import { useEffect } from 'react'; import { XIcon } from './icons'; interface Props { open: boolean; title: string; onClose: () => void; children: React.ReactNode; size?: 'md' | 'lg'; } export function Modal({ open, title, onClose, children, size = 'md' }: Props) { useEffect(() => { if (!open) return; function onKey(e: KeyboardEvent) { if (e.key === 'Escape') onClose(); } document.addEventListener('keydown', onKey); const prevOverflow = document.body.style.overflow; document.body.style.overflow = 'hidden'; return () => { document.removeEventListener('keydown', onKey); document.body.style.overflow = prevOverflow; }; }, [open, onClose]); if (!open) return null; const width = size === 'lg' ? 'max-w-xl' : 'max-w-md'; return (