import { useEffect, useState } from "react"; export const ThemeToggle = ({ className = "" }) => { const [activeTheme, setActiveTheme] = useState("system"); useEffect(() => { const savedTheme = localStorage.getItem("theme"); if (savedTheme === "system" || !savedTheme) { applySystemTheme(); setActiveTheme("system"); } else { applyTheme(savedTheme); setActiveTheme(savedTheme); } const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)"); const handleSystemThemeChange = () => { if (!savedTheme || savedTheme === "system") { applySystemTheme(); } }; mediaQuery.addEventListener("change", handleSystemThemeChange); return () => { mediaQuery.removeEventListener("change", handleSystemThemeChange); }; }, []); const applyTheme = (theme: string) => { if (theme === "dark") { document.documentElement.classList.add("dark"); } else if (theme === "light") { document.documentElement.classList.remove("dark"); } }; const handleThemeChange = (newTheme: string) => { setActiveTheme(newTheme); localStorage.setItem("theme", newTheme); if (newTheme === "system") { applySystemTheme(); } else { applyTheme(newTheme); } }; const applySystemTheme = () => { const systemPrefersDark = window.matchMedia( "(prefers-color-scheme: dark)" ).matches; if (systemPrefersDark) { document.documentElement.classList.add("dark"); } else { document.documentElement.classList.remove("dark"); } }; return (
); };