"use client"; import { useEffect, useId, useRef } from "react"; import styles from "./ConfirmDialog.module.css"; export default function ConfirmDialog({ open, title, kicker = "Confirm", message, confirmLabel = "Confirm", cancelLabel = "Cancel", danger = false, busy = false, onConfirm, onClose, }: { open: boolean; title: string; kicker?: string; message: string; confirmLabel?: string; cancelLabel?: string; danger?: boolean; busy?: boolean; onConfirm: () => void; onClose: () => void; }) { const titleId = useId(); const cancelRef = useRef(null); useEffect(() => { if (!open) return; const previousOverflow = document.body.style.overflow; document.body.style.overflow = "hidden"; cancelRef.current?.focus(); const onKey = (event: KeyboardEvent) => { if (event.key === "Escape" && !busy) onClose(); }; window.addEventListener("keydown", onKey); return () => { document.body.style.overflow = previousOverflow; window.removeEventListener("keydown", onKey); }; }, [open, busy, onClose]); if (!open) return null; return (
{ if (event.target === event.currentTarget && !busy) onClose(); }} >

{kicker}

{title}

{message}

); }