"use client"; import { createContext, useContext, useEffect, useState, ReactNode } from "react"; type Theme = "light" | "dark"; const ThemeContext = createContext<{ theme: Theme; setTheme: (t: Theme) => void; toggle: () => void; }>({ theme: "light", setTheme: () => {}, toggle: () => {}, }); export function ThemeProvider({ children }: { children: ReactNode }) { const [theme, setThemeState] = useState("light"); const [mounted, setMounted] = useState(false); useEffect(() => { // Read from localStorage, fall back to system preference const stored = localStorage.getItem("theme") as Theme | null; if (stored === "dark" || stored === "light") { setThemeState(stored); } else if (window.matchMedia("(prefers-color-scheme: dark)").matches) { setThemeState("dark"); } setMounted(true); }, []); useEffect(() => { if (!mounted) return; document.documentElement.classList.toggle("dark", theme === "dark"); localStorage.setItem("theme", theme); }, [theme, mounted]); const setTheme = (t: Theme) => setThemeState(t); const toggle = () => setThemeState((t) => (t === "dark" ? "light" : "dark")); return ( {children} ); } export function useTheme() { return useContext(ThemeContext); }