diff --git a/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/autoapprove/AutoApproveSettingsUi.kt b/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/autoapprove/AutoApproveSettingsUi.kt index 89a86ead9f..556f5f7541 100644 --- a/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/autoapprove/AutoApproveSettingsUi.kt +++ b/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/autoapprove/AutoApproveSettingsUi.kt @@ -15,7 +15,6 @@ import com.intellij.ui.SearchTextField import com.intellij.util.concurrency.annotations.RequiresEdt import com.intellij.util.ui.JBUI import kotlinx.coroutines.CoroutineScope -import java.awt.BorderLayout import javax.swing.event.DocumentEvent internal class AutoApproveSettingsUi( @@ -38,7 +37,7 @@ internal class AutoApproveSettingsUi( search.textEditor.document.addDocumentListener(object : DocumentAdapter() { override fun textChanged(e: DocumentEvent) = form.filter(search.text) }) - content.add(search, BorderLayout.NORTH) + setHeader(search) startSettings(AutoApproveContent({ updateDraft(it) }, picker)) } diff --git a/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/base/SettingsListPanel.kt b/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/base/SettingsListPanel.kt index e88638001b..9ef81d3ee3 100644 --- a/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/base/SettingsListPanel.kt +++ b/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/base/SettingsListPanel.kt @@ -65,7 +65,7 @@ internal abstract class SettingsListPanel( checkEdt() search.textEditor.emptyText.text = searchPlaceholder() view.setEmptyText(emptyText()) - content.add(header(), BorderLayout.NORTH) + setHeader(header()) setContent(view) } diff --git a/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/base/SettingsPanel.kt b/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/base/SettingsPanel.kt index 1fd43e4f67..683814a6a0 100644 --- a/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/base/SettingsPanel.kt +++ b/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/base/SettingsPanel.kt @@ -9,6 +9,7 @@ import java.awt.BorderLayout import java.awt.Dimension import java.awt.Rectangle import javax.swing.JComponent +import javax.swing.JPanel import javax.swing.ScrollPaneConstants import javax.swing.Scrollable @@ -50,6 +51,14 @@ internal open class SettingsPanel(scroll: Boolean = true, pad: Boolean = true) : repaint() } + fun setHeader(component: JComponent) { + val header = JPanel(BorderLayout()) + header.isOpaque = false + header.border = JBUI.Borders.emptyRight(UiStyle.Gap.xl()) + header.add(component, BorderLayout.CENTER) + content.add(header, BorderLayout.NORTH) + } + } private class SettingsBody : Stack(StackAxis.VERTICAL), Scrollable { diff --git a/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/providers/ProvidersSettingsUi.kt b/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/providers/ProvidersSettingsUi.kt index a5f77ce002..edb3d21699 100644 --- a/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/providers/ProvidersSettingsUi.kt +++ b/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/settings/providers/ProvidersSettingsUi.kt @@ -150,7 +150,7 @@ internal class ProvidersSettingsUi( private var oauth: DeviceOAuthPanel? = null init { - content.add(header(), BorderLayout.NORTH) + setHeader(header()) setContent(view) reload() } diff --git a/packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/settings/base/SettingsRowsTest.kt b/packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/settings/base/SettingsRowsTest.kt index 8267e79399..b4c13fda1a 100644 --- a/packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/settings/base/SettingsRowsTest.kt +++ b/packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/settings/base/SettingsRowsTest.kt @@ -6,6 +6,7 @@ import com.intellij.ui.SeparatorComponent import com.intellij.ui.components.JBLabel import java.awt.Color import java.awt.Container +import java.awt.BorderLayout import java.awt.Rectangle import java.awt.image.BufferedImage import javax.swing.AbstractButton @@ -134,6 +135,17 @@ class SettingsRowsTest : BasePlatformTestCase() { assertTrue((view as Scrollable).getScrollableTracksViewportWidth()) } + fun `test settings panel header gets right inset outside scroll`() { + val panel = SettingsPanel() + val field = javax.swing.JTextField() + + panel.setHeader(field) + + val header = (panel.content.layout as BorderLayout).getLayoutComponent(BorderLayout.NORTH) as JComponent + assertEquals(UiStyle.Gap.xl(), header.insets.right) + assertTrue(components(header).any { it === field }) + } + fun `test settings progress overlay is centered near top`() { val panel = SettingsPanel().apply { setSize(400, 300) }