summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorShpetim <[email protected]>2025-12-20 18:53:46 +0100
committerGitHub <[email protected]>2025-12-20 11:53:46 -0600
commit426791f68a3a6a5212af5e88c932c2b41f17c294 (patch)
treec36e6caa40c266f28bb8acd0cde5494afac1dde4
parentc7cade2494a08fc64cedc9025ad10d26d00d746a (diff)
downloadopencode-426791f68a3a6a5212af5e88c932c2b41f17c294.tar.gz
opencode-426791f68a3a6a5212af5e88c932c2b41f17c294.zip
fix: system theme flicker (#5842)
Co-authored-by: Shpetim <[email protected]>
-rw-r--r--packages/opencode/src/cli/cmd/tui/context/theme.tsx46
1 files changed, 36 insertions, 10 deletions
diff --git a/packages/opencode/src/cli/cmd/tui/context/theme.tsx b/packages/opencode/src/cli/cmd/tui/context/theme.tsx
index 8bca9fa88..cbe836b1c 100644
--- a/packages/opencode/src/cli/cmd/tui/context/theme.tsx
+++ b/packages/opencode/src/cli/cmd/tui/context/theme.tsx
@@ -281,14 +281,23 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
ready: false,
})
- createEffect(async () => {
- const custom = await getCustomThemes()
- setStore(
- produce((draft) => {
- Object.assign(draft.themes, custom)
- draft.ready = true
- }),
- )
+ createEffect(() => {
+ getCustomThemes()
+ .then((custom) => {
+ setStore(
+ produce((draft) => {
+ Object.assign(draft.themes, custom)
+ }),
+ )
+ })
+ .catch(() => {
+ setStore("active", "opencode")
+ })
+ .finally(() => {
+ if (store.active !== "system") {
+ setStore("ready", true)
+ }
+ })
})
const renderer = useRenderer()
@@ -297,8 +306,25 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
size: 16,
})
.then((colors) => {
- if (!colors.palette[0]) return
- setStore("themes", "system", generateSystem(colors, store.mode))
+ 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)
+ if (store.active === "system") {
+ draft.ready = true
+ }
+ }),
+ )
})
const values = createMemo(() => {