import { useEffect, useState } from "react"; type ThemeMode = "light" | "dark" | "auto"; export default function ThemeToggle() { const [theme, setTheme] = useState("auto"); const [isMounted, setIsMounted] = useState(false); useEffect(() => { setIsMounted(true); const savedTheme = (localStorage.getItem("theme") || "auto") as ThemeMode; setTheme(savedTheme); applyTheme(savedTheme); }, []); const applyTheme = (mode: ThemeMode) => { let isDark: boolean; if (mode === "auto") { isDark = window.matchMedia("(prefers-color-scheme: dark)").matches; } else { isDark = mode === "dark"; } if (isDark) { document.documentElement.classList.add("dark"); } else { document.documentElement.classList.remove("dark"); } }; const cycleTheme = () => { const themes: ThemeMode[] = ["light", "dark", "auto"]; const currentIndex = themes.indexOf(theme); const newTheme = themes[(currentIndex + 1) % themes.length]; setTheme(newTheme); localStorage.setItem("theme", newTheme); applyTheme(newTheme); }; if (!isMounted) return null; return ( ); }