import { useEffect } from "react"; import { createPortal } from "react-dom"; import "./Modal.css"; /** * Shared foundation for both centered dialogs and side drawers. * variant: "dialog" | "drawer" */ export function Modal({ open, onClose, title, children, footer, variant = "dialog", width = 480, }) { useEffect(() => { if (!open) return; const onKeyDown = (e) => { if (e.key === "Escape") onClose?.(); }; window.addEventListener("keydown", onKeyDown); return () => window.removeEventListener("keydown", onKeyDown); }, [open, onClose]); if (!open) return null; return createPortal(
e.stopPropagation()} role="dialog" aria-modal="true" > {title && (

{title}

)}
{children}
{footer &&
{footer}
}
, document.body ); } /** Convenience wrapper — same foundation, right-side drawer defaults. */ export function Drawer(props) { return ; }