import { useState, useRef, useEffect } from 'react'; import { Sun, Moon, Monitor } from 'lucide-react'; import { useTheme, ThemeMode } from '@/hooks/useTheme'; const modes: { value: ThemeMode; label: string; icon: typeof Sun }[] = [ { value: 'light', label: 'Light', icon: Sun }, { value: 'dark', label: 'Dark', icon: Moon }, { value: 'system', label: 'System', icon: Monitor }, ]; export function ThemeToggle() { const { mode, resolvedTheme, setMode } = useTheme(); const [isOpen, setIsOpen] = useState(false); const dropdownRef = useRef(null); // Close dropdown when clicking outside useEffect(() => { function handleClickOutside(event: MouseEvent) { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setIsOpen(false); } } document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); // Get current icon based on resolved theme const CurrentIcon = resolvedTheme === 'dark' ? Moon : Sun; return (
{isOpen && (
{modes.map(({ value, label, icon: Icon }) => ( ))}
)}
); }