From e84cab5527bb2982083de8608fd66caf7a9526a9 Mon Sep 17 00:00:00 2001 From: Shantur Rathore Date: Tue, 28 Oct 2025 21:53:42 +0000 Subject: [PATCH] fix: UI improvements with design tokens - theme switching, full width settings, visible buttons, and delete icons --- src/components/folder-selection-view.tsx | 33 ++++++++++------- src/lib/theme.tsx | 45 +++++++++++++++++++----- src/styles/components.css | 2 +- 3 files changed, 59 insertions(+), 21 deletions(-) diff --git a/src/components/folder-selection-view.tsx b/src/components/folder-selection-view.tsx index f3279c46..12aaea3f 100644 --- a/src/components/folder-selection-view.tsx +++ b/src/components/folder-selection-view.tsx @@ -224,7 +224,7 @@ const FolderSelectionView: Component = (props) => { + + {/* Advanced settings section */} @@ -267,20 +276,20 @@ const FolderSelectionView: Component = (props) => { class="panel-section-header" >
- - Advanced Settings + + Advanced Settings
{showAdvanced() ? ( - + ) : ( - + )} -
-
-
OpenCode Binary
+
+
+
OpenCode Binary
= (props) => { />
-
+
diff --git a/src/lib/theme.tsx b/src/lib/theme.tsx index 9477c6dc..22cf3f00 100644 --- a/src/lib/theme.tsx +++ b/src/lib/theme.tsx @@ -19,20 +19,34 @@ function applyTheme(dark: boolean) { } export function ThemeProvider(props: { children: JSX.Element }) { - const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches - const [isDark, setIsDarkSignal] = createSignal(prefersDark) + const systemPrefersDark = window.matchMedia("(prefers-color-scheme: dark)") + const [isDark, setIsDarkSignal] = createSignal(systemPrefersDark.matches) - applyTheme(prefersDark) + applyTheme(systemPrefersDark.matches) async function loadTheme() { try { const config = await storage.loadConfig() - const savedTheme = (config as any).theme - const initialDark = savedTheme ? savedTheme === "dark" : prefersDark - setIsDarkSignal(initialDark) - applyTheme(initialDark) + const savedTheme = (config as any)?.theme + let themeDark: boolean + + if (savedTheme === "system") { + themeDark = systemPrefersDark.matches + } else if (savedTheme === "dark") { + themeDark = true + } else if (savedTheme === "light") { + themeDark = false + } else { + themeDark = systemPrefersDark.matches + } + + setIsDarkSignal(themeDark) + applyTheme(themeDark) } catch (error) { console.warn("Failed to load theme from config:", error) + const themeDark = systemPrefersDark.matches + setIsDarkSignal(themeDark) + applyTheme(themeDark) } } @@ -53,7 +67,22 @@ export function ThemeProvider(props: { children: JSX.Element }) { loadTheme() }) - return unsubscribe + // Listen for system theme changes + const handleSystemThemeChange = (e: MediaQueryListEvent) => { + const config = (window as any).currentConfig + const savedTheme = config?.theme + if (!savedTheme || savedTheme === "system") { + setIsDarkSignal(e.matches) + applyTheme(e.matches) + } + } + + systemPrefersDark.addEventListener("change", handleSystemThemeChange) + + return () => { + unsubscribe() + systemPrefersDark.removeEventListener("change", handleSystemThemeChange) + } }) createEffect(() => { diff --git a/src/styles/components.css b/src/styles/components.css index 76802c66..fc45d435 100644 --- a/src/styles/components.css +++ b/src/styles/components.css @@ -1363,7 +1363,7 @@ } .panel-section-content { - @apply px-4 py-3 border-t overflow-visible space-y-4; + @apply px-4 py-3 border-t overflow-visible space-y-4 w-full; border-color: var(--border-base); background-color: var(--surface-secondary); }