Skip to content

Commit 91d5ce8

Browse files
committed
tui: add system theme resolution and event handling
1 parent 7f870cc commit 91d5ce8

File tree

1 file changed

+35
-24
lines changed
  • packages/opencode/src/cli/cmd/tui/context

1 file changed

+35
-24
lines changed

packages/opencode/src/cli/cmd/tui/context/theme.tsx

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import { useRenderer } from "@opentui/solid"
4040
import { createStore, produce } from "solid-js/store"
4141
import { Global } from "@/global"
4242
import { Filesystem } from "@/util/filesystem"
43+
import { useSDK } from "./sdk"
4344

4445
type ThemeColors = {
4546
primary: RGBA
@@ -310,32 +311,42 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
310311
})
311312
})
312313

313-
const renderer = useRenderer()
314-
renderer
315-
.getPalette({
316-
size: 16,
317-
})
318-
.then((colors) => {
319-
if (!colors.palette[0]) {
320-
if (store.active === "system") {
321-
setStore(
322-
produce((draft) => {
323-
draft.active = "opencode"
324-
draft.ready = true
325-
}),
326-
)
327-
}
328-
return
329-
}
330-
setStore(
331-
produce((draft) => {
332-
draft.themes.system = generateSystem(colors, store.mode)
314+
function resolveSystemTheme() {
315+
console.log("resolved system theme")
316+
renderer
317+
.getPalette({
318+
size: 16,
319+
})
320+
.then((colors) => {
321+
if (!colors.palette[0]) {
333322
if (store.active === "system") {
334-
draft.ready = true
323+
setStore(
324+
produce((draft) => {
325+
draft.active = "opencode"
326+
draft.ready = true
327+
}),
328+
)
335329
}
336-
}),
337-
)
338-
})
330+
return
331+
}
332+
setStore(
333+
produce((draft) => {
334+
draft.themes.system = generateSystem(colors, store.mode)
335+
if (store.active === "system") {
336+
draft.ready = true
337+
}
338+
}),
339+
)
340+
})
341+
}
342+
343+
const renderer = useRenderer()
344+
resolveSystemTheme()
345+
346+
const sdk = useSDK()
347+
sdk.event.on("server.instance.disposed", () => {
348+
resolveSystemTheme()
349+
})
339350

340351
const values = createMemo(() => {
341352
return resolveTheme(store.themes[store.active] ?? store.themes.opencode, store.mode)

0 commit comments

Comments
 (0)