"use client"; import { useEffect, useState } from "react"; import { useTheme } from "next-themes"; // Sun Icon const SunIcon = ({ className }: { className?: string }) => ( ); // Moon Icon const MoonIcon = ({ className }: { className?: string }) => ( ); // Monitor Icon (for system) const MonitorIcon = ({ className }: { className?: string }) => ( ); export function ThemeToggle() { const { theme, setTheme, resolvedTheme, systemTheme } = useTheme(); const [mounted, setMounted] = useState(false); useEffect(() => { setMounted(true); }, []); if (!mounted) { return ( ); } const activeTheme = theme === "system" ? resolvedTheme : theme; const toggleTheme = () => { if (theme === "system") { setTheme(systemTheme === "dark" ? "light" : "dark"); } else { setTheme(theme === "dark" ? "light" : "dark"); } }; return ( ); } // Full theme selector with dropdown export function ThemeSelector() { const { theme, setTheme } = useTheme(); const [mounted, setMounted] = useState(false); useEffect(() => { setMounted(true); }, []); if (!mounted) { return (
Theme
); } const themes = [ { value: "light", label: "Light", icon: SunIcon }, { value: "dark", label: "Dark", icon: MoonIcon }, { value: "system", label: "System", icon: MonitorIcon }, ]; return (
{themes.map(({ value, label, icon: Icon }) => ( ))}
); }