import React, { useState, useRef, useEffect } from 'react'; import { cn } from '@/lib/utils'; interface DropdownProps { trigger: React.ReactNode; children: React.ReactNode; align?: 'left' | 'right'; } export const Dropdown: React.FC = ({ trigger, children, align = 'left' }) => { const [isOpen, setIsOpen] = useState(false); const dropdownRef = useRef(null); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setIsOpen(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); return (
setIsOpen(!isOpen)}> {trigger}
{isOpen && (
{children}
)}
); }; interface DropdownItemProps extends React.HTMLAttributes { icon?: React.ReactNode; } export const DropdownItem = React.forwardRef( ({ className, icon, children, ...props }, ref) => (
{icon && {icon}} {children}
) ); DropdownItem.displayName = 'DropdownItem';