import { X } from "lucide-react"; import { type ReactNode, useEffect, useRef } from "react"; import { cn } from "../../lib/utils.js"; import { Button } from "./button.js"; interface DialogProps { open: boolean; onClose: () => void; className?: string; children: ReactNode; } export function Dialog({ open, onClose, className, children }: DialogProps) { const dialogRef = useRef(null); useEffect(() => { const dialog = dialogRef.current; if (!dialog) return; if (open && !dialog.open) dialog.showModal(); else if (!open && dialog.open) dialog.close(); }, [open]); useEffect(() => { const dialog = dialogRef.current; if (!dialog) return; function handleCancel(e: Event) { e.preventDefault(); onClose(); } function handleBackdropClick(e: MouseEvent) { if (e.target === dialog) onClose(); } dialog.addEventListener("cancel", handleCancel); dialog.addEventListener("mousedown", handleBackdropClick); return () => { dialog.removeEventListener("cancel", handleCancel); dialog.removeEventListener("mousedown", handleBackdropClick); }; }, [onClose]); return (
{children}
); } export function DialogHeader({ title, onClose, }: Readonly<{ title: string; onClose: () => void }>) { return (

{title}

); }