import React, { useState, useRef, useEffect } from 'react' import ReactDOM from 'react-dom' import { ChevronDown, Check } from 'lucide-react' export default function CustomSelect({ value, onChange, options = [], // [{ value, label, icon? }] placeholder = '', searchable = false, style = {}, size = 'md', // 'sm' | 'md' }) { const [open, setOpen] = useState(false) const [search, setSearch] = useState('') const ref = useRef(null) const dropRef = useRef(null) const searchRef = useRef(null) useEffect(() => { if (open && searchable && searchRef.current) searchRef.current.focus() }, [open, searchable]) useEffect(() => { const handleClick = (e) => { if (ref.current?.contains(e.target)) return if (dropRef.current?.contains(e.target)) return setOpen(false) } if (open) document.addEventListener('mousedown', handleClick) return () => document.removeEventListener('mousedown', handleClick) }, [open]) const selected = options.find(o => o.value === value) const filtered = searchable && search ? options.filter(o => o.label.toLowerCase().includes(search.toLowerCase())) : options const sm = size === 'sm' return (