import { type ReactNode, useEffect, useRef } from "react"; import { createPortal } from "react-dom"; interface ModalProps { title: string; onClose: () => void; children: ReactNode; wide?: boolean; } export function Modal({ title, onClose, children, wide = false }: ModalProps) { const backdropRef = useRef(null); useEffect(() => { document.body.style.overflow = "hidden"; return () => { document.body.style.overflow = ""; }; }, []); useEffect(() => { const handler = (e: KeyboardEvent) => { if (e.key === "Escape" && !e.defaultPrevented) onClose(); }; document.addEventListener("keydown", handler); return () => document.removeEventListener("keydown", handler); }, [onClose]); return createPortal(
{ if (e.target === backdropRef.current) onClose(); }} >
{title}
{children}
, document.body, ); }