theo-agent-dashboard

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

theme.ts (730B)


      1 import { create } from "zustand";
      2 
      3 type Theme = "dark" | "light";
      4 
      5 interface ThemeState {
      6   theme: Theme;
      7   toggleTheme: () => void;
      8   setTheme: (theme: Theme) => void;
      9 }
     10 
     11 function getInitialTheme(): Theme {
     12   const stored = localStorage.getItem("theo-theme");
     13   if (stored === "light" || stored === "dark") return stored;
     14   return "dark";
     15 }
     16 
     17 export const useThemeStore = create<ThemeState>((set) => ({
     18   theme: getInitialTheme(),
     19   toggleTheme: () =>
     20     set((state) => {
     21       const next: Theme = state.theme === "dark" ? "light" : "dark";
     22       localStorage.setItem("theo-theme", next);
     23       return { theme: next };
     24     }),
     25   setTheme: (theme) => {
     26     localStorage.setItem("theo-theme", theme);
     27     set({ theme });
     28   },
     29 }));