diff --git a/packages/opencode/src/cli/cmd/tui/context/theme.tsx b/packages/opencode/src/cli/cmd/tui/context/theme.tsx index c9fd82af..b2c92ff1 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/theme.tsx @@ -1,5 +1,5 @@ import { SyntaxStyle, RGBA } from "@opentui/core" -import { createMemo } from "solid-js" +import { createMemo, createSignal } from "solid-js" import { useSync } from "@tui/context/sync" import { createSimpleContext } from "./helper" import aura from "../../../../../../tui/internal/theme/themes/aura.json" with { type: "json" } @@ -83,7 +83,7 @@ type ThemeJson = { theme: Record } -export const THEMES = { +export const THEMES: Record = { aura: resolveTheme(aura), ayu: resolveTheme(ayu), catppuccin: resolveTheme(catppuccin), @@ -629,23 +629,24 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({ const sync = useSync() const kv = useKV() - const theme = createMemo(() => { - return THEMES[kv.data.theme as keyof typeof THEMES] ?? THEMES.opencode + const [theme, setTheme] = createSignal(sync.data.config.theme ?? kv.data.theme) + + const values = createMemo(() => { + return THEMES[theme()] ?? THEMES.opencode }) return { - get theme() { - return new Proxy(theme(), { - get(_target, prop) { - // @ts-expect-error - return theme()[prop] - }, - }) - }, + theme: new Proxy(values(), { + get(_target, prop) { + // @ts-expect-error + return values()[prop] + }, + }), get selectedTheme() { return kv.data.theme }, setSelectedTheme(theme: string) { + setTheme(theme) kv.set("theme", theme) }, get ready() {