import { useCallback, useEffect, useRef, type ReactNode } from "react"; import { X } from "lucide-react"; interface DialogProps { open: boolean; onClose: () => void; title: string; children: ReactNode; } export function Dialog({ open, onClose, title, children }: DialogProps) { const dialogRef = useRef(null); const previousFocus = useRef(null); const close = useCallback(() => { dialogRef.current?.close(); previousFocus.current?.focus(); onClose(); }, [onClose]); useEffect(() => { const dialog = dialogRef.current; if (!dialog) return; if (open && !dialog.open) { previousFocus.current = document.activeElement as HTMLElement; dialog.showModal(); } else if (!open && dialog.open) { dialog.close(); previousFocus.current?.focus(); } }, [open]); useEffect(() => { const dialog = dialogRef.current; if (!dialog) return; const handleCancel = (e: Event) => { e.preventDefault(); close(); }; dialog.addEventListener("cancel", handleCancel); return () => dialog.removeEventListener("cancel", handleCancel); }, [close]); return ( { if (e.target === dialogRef.current) close(); }} >

{title}

{children}
); }