import { useEffect } from "react"; import { createPortal } from "react-dom"; import { X } from "lucide-react"; import { cn } from "../lib/format"; interface ModalProps { open: boolean; onClose: () => void; title?: string; subtitle?: string; children: React.ReactNode; size?: "sm" | "md" | "lg"; footer?: React.ReactNode; } export function Modal({ open, onClose, title, subtitle, children, size = "md", footer }: ModalProps) { useEffect(() => { if (!open) return; const onKey = (e: KeyboardEvent) => { if (e.key === "Escape") onClose(); }; window.addEventListener("keydown", onKey); document.body.style.overflow = "hidden"; return () => { window.removeEventListener("keydown", onKey); document.body.style.overflow = ""; }; }, [open, onClose]); if (!open) return null; const maxW = size === "sm" ? "max-w-md" : size === "lg" ? "max-w-3xl" : "max-w-xl"; return createPortal(
{subtitle}
}