9router / src /store /themeStore.js
2api
feat: configurable stream stall timeout + per-provider UI
88c4c60
Raw
History Blame Contribute Delete
1.19 kB
"use client";
import { create } from "zustand";
import { persist } from "zustand/middleware";
import { THEME_CONFIG } from "@/shared/constants/config";
const useThemeStore = create(
persist(
(set, get) => ({
theme: THEME_CONFIG.defaultTheme,
setTheme: (theme) => {
set({ theme });
applyTheme(theme);
},
toggleTheme: () => {
const currentTheme = get().theme;
const newTheme = currentTheme === "dark" ? "light" : "dark";
set({ theme: newTheme });
applyTheme(newTheme);
},
initTheme: () => {
const theme = get().theme;
applyTheme(theme);
},
}),
{
name: THEME_CONFIG.storageKey,
}
)
);
// Apply theme to document
function applyTheme(theme) {
if (typeof window === "undefined") return;
const root = document.documentElement;
const systemTheme = window.matchMedia("(prefers-color-scheme: dark)").matches
? "dark"
: "light";
const effectiveTheme = theme === "system" ? systemTheme : theme;
if (effectiveTheme === "dark") {
root.classList.add("dark");
} else {
root.classList.remove("dark");
}
}
export default useThemeStore;