summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2026-01-05 10:38:33 -0500
committerDax Raad <[email protected]>2026-01-05 10:38:35 -0500
commit91d5ce8bf3f80747264ff94ebebb814e622f84b5 (patch)
tree1afb6418a5f00762b6e371e254bc5752e0c2f375
parent7f870cc9d4d93ca889698ad5780c90a8ab057242 (diff)
downloadopencode-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.tsx59
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)