import { useState, useEffect } from 'react'; import { Sun, Moon, Monitor } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; type Theme = 'light' | 'dark' | 'system'; export default function ThemeToggle() { const [theme, setTheme] = useState('system'); useEffect(() => { const stored = localStorage.getItem('theme') as Theme | null; if (stored) { setTheme(stored); } }, []); useEffect(() => { const root = document.documentElement; function applyTheme(t: Theme) { if (t === 'dark') { root.classList.add('dark'); } else if (t === 'light') { root.classList.remove('dark'); } else { // system if (window.matchMedia('(prefers-color-scheme: dark)').matches) { root.classList.add('dark'); } else { root.classList.remove('dark'); } } } applyTheme(theme); if (theme === 'system') { localStorage.removeItem('theme'); const mq = window.matchMedia('(prefers-color-scheme: dark)'); const handler = () => applyTheme('system'); mq.addEventListener('change', handler); return () => mq.removeEventListener('change', handler); } else { localStorage.setItem('theme', theme); } }, [theme]); const icon = theme === 'dark' ? ( ) : theme === 'light' ? ( ) : ( ); return ( setTheme('light')}> Light setTheme('dark')}> Dark setTheme('system')}> System ); }