import { useState, useRef, useEffect, type ReactNode } from 'react'; import styles from './Dropdown.module.css'; interface DropdownItem { label: string; value: string; icon?: ReactNode; } interface DropdownProps { items: DropdownItem[]; value: string; onSelect: (value: string) => void; trigger: ReactNode; minWidth?: number; } export function Dropdown({ items, value, onSelect, trigger, minWidth = 150 }: DropdownProps) { const [open, setOpen] = useState(false); const ref = useRef(null); useEffect(() => { function handleClick(e: MouseEvent) { if (ref.current && !ref.current.contains(e.target as Node)) { setOpen(false); } } document.addEventListener('mousedown', handleClick); return () => document.removeEventListener('mousedown', handleClick); }, []); return (
setOpen(!open)}> {trigger}
{items.map((item) => (
{ onSelect(item.value); setOpen(false); }} > {item.icon && {item.icon}} {item.label}
))}
); }