"use client"; import { createContext, useContext, useEffect, useState } from "react"; type Theme = "dark" | "light" | "system"; const ThemeContext = createContext<{ theme: Theme; setTheme: (t: Theme) => void; }>({ theme: "system", setTheme: () => {}, }); export function ThemeProvider({ children }: { children: React.ReactNode }) { const [theme, setTheme] = useState("system"); useEffect(() => { const root = document.documentElement; root.classList.remove("light", "dark"); if (theme === "system") { const mq = window.matchMedia("(prefers-color-scheme: dark)"); const apply = () => { root.classList.remove("light", "dark"); root.classList.add(mq.matches ? "dark" : "light"); }; apply(); mq.addEventListener("change", apply); return () => mq.removeEventListener("change", apply); } root.classList.add(theme); }, [theme]); return ( {children} ); } export const useTheme = () => useContext(ThemeContext);