Spaces:
Sleeping
Sleeping
File size: 885 Bytes
ee111cd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | /**
* 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" }
)
);
|