import React, { useState, useEffect, useRef, ReactNode } from 'react'; interface DropdownItem { label: string; icon?: ReactNode; onClick: () => void; danger?: boolean; } interface DropdownMenuProps { trigger: ReactNode; items: DropdownItem[]; align?: 'left' | 'right'; } export default function DropdownMenu({ trigger, items, align = 'left' }: DropdownMenuProps) { const [isOpen, setIsOpen] = useState(false); const containerRef = useRef(null); useEffect(() => { if (!isOpen) return; function handleClickOutside(event: MouseEvent) { if (containerRef.current && !containerRef.current.contains(event.target as Node)) { setIsOpen(false); } } document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, [isOpen]); const alignmentClass = align === 'right' ? 'right-0' : 'left-0'; return (
setIsOpen(!isOpen)} className="cursor-pointer" > {trigger}
{isOpen && (
{items.map((item, index) => ( ))}
)}
); }