import { useEffect, type ReactNode } from 'react'; import { createPortal } from 'react-dom'; import { X } from 'lucide-react'; import { cn } from '@/lib/cn'; import { Button } from './Button'; interface ModalProps { open: boolean; onClose: () => void; title: ReactNode; description?: ReactNode; children: ReactNode; footer?: ReactNode; size?: 'md' | 'lg'; } export function Modal({ open, onClose, title, description, children, footer, size = 'md', }: ModalProps) { useEffect(() => { if (!open) return; const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); }; window.addEventListener('keydown', onKey); const prev = document.body.style.overflow; document.body.style.overflow = 'hidden'; return () => { window.removeEventListener('keydown', onKey); document.body.style.overflow = prev; }; }, [open, onClose]); if (!open) return null; return createPortal(
{description}
}