diff options
| author | Frank <[email protected]> | 2025-08-08 13:22:54 -0400 |
|---|---|---|
| committer | Frank <[email protected]> | 2025-08-08 13:24:32 -0400 |
| commit | 183e0911b76025a1f2a82e979d9834fec2131d0e (patch) | |
| tree | 9987c1753bd64d1ce1d174ab397f1a8c681f642c /cloud/web/src/components/context-theme.tsx | |
| parent | c7bb19ad0712469063eab35589aa5d3602b0c5b1 (diff) | |
| download | opencode-183e0911b76025a1f2a82e979d9834fec2131d0e.tar.gz opencode-183e0911b76025a1f2a82e979d9834fec2131d0e.zip | |
wip: gateway
Diffstat (limited to 'cloud/web/src/components/context-theme.tsx')
| -rw-r--r-- | cloud/web/src/components/context-theme.tsx | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/cloud/web/src/components/context-theme.tsx b/cloud/web/src/components/context-theme.tsx new file mode 100644 index 000000000..7800aeca0 --- /dev/null +++ b/cloud/web/src/components/context-theme.tsx @@ -0,0 +1,39 @@ +import { createStore } from "solid-js/store" +import { makePersisted } from "@solid-primitives/storage" +import { createEffect } from "solid-js" +import { createInitializedContext } from "../util/context" +import { isServer } from "solid-js/web" + +interface Storage { + mode: "light" | "dark" +} + +export const { provider: ThemeProvider, use: useTheme } = + createInitializedContext("ThemeContext", () => { + const [store, setStore] = makePersisted( + createStore<Storage>({ + mode: + !isServer && + window.matchMedia && + window.matchMedia("(prefers-color-scheme: dark)").matches + ? "dark" + : "light", + }), + { + name: "theme", + }, + ) + createEffect(() => { + document.documentElement.setAttribute("data-color-mode", store.mode) + }) + + return { + setMode(mode: Storage["mode"]) { + setStore("mode", mode) + }, + get mode() { + return store.mode + }, + ready: true, + } + }) |
