import { useState, useRef, useEffect } from 'react'; import { motion, AnimatePresence } from 'motion/react'; import { ChevronDown, Palette, Check } from 'lucide-react'; export interface ThemeOption { value: string; label: string; description?: string; colorPreview?: string; } export interface ThemeSelectorProps { value: string; onChange: (value: string) => void; options: ThemeOption[]; } export function ThemeSelector({ value, onChange, options }: ThemeSelectorProps) { const [isOpen, setIsOpen] = useState(false); const containerRef = useRef(null); useEffect(() => { const handleClickOutside = (e: MouseEvent) => { if (containerRef.current && !containerRef.current.contains(e.target as Node)) { setIsOpen(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); const selectedOption = options.find(o => o.value === value) || options[0]; return (
{isOpen && (
{options.map((option) => ( ))}
)}
); }