diff options
| author | Dax Raad <[email protected]> | 2026-01-05 10:38:33 -0500 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2026-01-05 10:38:35 -0500 |
| commit | 91d5ce8bf3f80747264ff94ebebb814e622f84b5 (patch) | |
| tree | 1afb6418a5f00762b6e371e254bc5752e0c2f375 | |
| parent | 7f870cc9d4d93ca889698ad5780c90a8ab057242 (diff) | |
| download | opencode-91d5ce8bf3f80747264ff94ebebb814e622f84b5.tar.gz opencode-91d5ce8bf3f80747264ff94ebebb814e622f84b5.zip | |
tui: add system theme resolution and event handling
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/context/theme.tsx | 59 |
1 files changed, 35 insertions, 24 deletions
diff --git a/packages/opencode/src/cli/cmd/tui/context/theme.tsx b/packages/opencode/src/cli/cmd/tui/context/theme.tsx index 95346e3ac..14d10ad60 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/theme.tsx @@ -40,6 +40,7 @@ import { useRenderer } from "@opentui/solid" import { createStore, produce } from "solid-js/store" import { Global } from "@/global" import { Filesystem } from "@/util/filesystem" +import { useSDK } from "./sdk" type ThemeColors = { primary: RGBA @@ -310,32 +311,42 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({ }) }) - const renderer = useRenderer() - renderer - .getPalette({ - size: 16, - }) - .then((colors) => { - if (!colors.palette[0]) { - if (store.active === "system") { - setStore( - produce((draft) => { - draft.active = "opencode" - draft.ready = true - }), - ) - } - return - } - setStore( - produce((draft) => { - draft.themes.system = generateSystem(colors, store.mode) + function resolveSystemTheme() { + console.log("resolved system theme") + renderer + .getPalette({ + size: 16, + }) + .then((colors) => { + if (!colors.palette[0]) { if (store.active === "system") { - draft.ready = true + setStore( + produce((draft) => { + draft.active = "opencode" + draft.ready = true + }), + ) } - }), - ) - }) + return + } + setStore( + produce((draft) => { + draft.themes.system = generateSystem(colors, store.mode) + if (store.active === "system") { + draft.ready = true + } + }), + ) + }) + } + + const renderer = useRenderer() + resolveSystemTheme() + + const sdk = useSDK() + sdk.event.on("server.instance.disposed", () => { + resolveSystemTheme() + }) const values = createMemo(() => { return resolveTheme(store.themes[store.active] ?? store.themes.opencode, store.mode) |
