"use client"; import { type ReactNode, useEffect } from "react"; interface ModalProps { open: boolean; onClose: () => void; title: string; children: ReactNode; wide?: boolean; /** * When true, X + Esc prompt for confirmation before closing. * Backdrop clicks never close — user must use X. */ confirmClose?: boolean; confirmMessage?: string; } export default function Modal({ open, onClose, title, children, wide, confirmClose, confirmMessage = "Discard changes? Any unsaved data will be lost.", }: ModalProps) { const requestClose = () => { if (confirmClose && !window.confirm(confirmMessage)) return; onClose(); }; useEffect(() => { if (!open) return; const onKey = (e: KeyboardEvent) => { if (e.key === "Escape") requestClose(); }; window.addEventListener("keydown", onKey); return () => window.removeEventListener("keydown", onKey); // eslint-disable-next-line react-hooks/exhaustive-deps }, [open, confirmClose]); if (!open) return null; return (