diff options
| author | Shpetim <[email protected]> | 2025-12-20 18:53:46 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-12-20 11:53:46 -0600 |
| commit | 426791f68a3a6a5212af5e88c932c2b41f17c294 (patch) | |
| tree | c36e6caa40c266f28bb8acd0cde5494afac1dde4 | |
| parent | c7cade2494a08fc64cedc9025ad10d26d00d746a (diff) | |
| download | opencode-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.tsx | 46 |
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(() => { |
