Spaces:
Sleeping
Sleeping
| /** | |
| * Theme store — dark/light mode with persistence. | |
| * Syncs to DOM and to backend preferences when user is logged in. | |
| */ | |
| import { create } from "zustand"; | |
| import { persist } from "zustand/middleware"; | |
| type Theme = "dark" | "light"; | |
| interface ThemeState { | |
| theme: Theme; | |
| setTheme: (t: Theme) => void; | |
| toggle: () => void; | |
| } | |
| export const useThemeStore = create<ThemeState>()( | |
| persist( | |
| (set, get) => ({ | |
| theme: "dark", | |
| setTheme: (t) => { | |
| set({ theme: t }); | |
| if (typeof document !== "undefined") { | |
| document.documentElement.classList.toggle("dark", t === "dark"); | |
| document.documentElement.classList.toggle("light", t === "light"); | |
| } | |
| }, | |
| toggle: () => { | |
| const next: Theme = get().theme === "dark" ? "light" : "dark"; | |
| get().setTheme(next); | |
| }, | |
| }), | |
| { name: "bb_theme" } | |
| ) | |
| ); | |