"use client"; import { useEffect, useId } from "react"; import { useFocusTrap } from "@/hooks/use-focus-trap"; import { useTranslations } from "next-intl"; import { Button } from "@/components/ui/button"; import { AlertTriangle } from "lucide-react"; import { cn } from "@/lib/utils"; interface ConfirmDialogProps { isOpen: boolean; onClose: () => void; onConfirm: () => void; title: string; message: string; confirmText?: string; cancelText?: string; variant?: "default" | "destructive"; } export function ConfirmDialog({ isOpen, onClose, onConfirm, title, message, confirmText, cancelText, variant = "default", }: ConfirmDialogProps) { const t = useTranslations("confirm_dialog"); const id = useId(); const dialogRef = useFocusTrap({ isActive: isOpen, onEscape: onClose, restoreFocus: true, }); useEffect(() => { if (!isOpen) return; const handleBackdropClick = (e: MouseEvent) => { if (dialogRef.current && !dialogRef.current.contains(e.target as Node)) { onClose(); } }; document.addEventListener("mousedown", handleBackdropClick); return () => document.removeEventListener("mousedown", handleBackdropClick); }, [isOpen, onClose, dialogRef]); if (!isOpen) return null; const resolvedConfirmText = confirmText || t("confirm"); const resolvedCancelText = cancelText || t("cancel"); return (
{variant === "destructive" && (
)}

{title}

{message}

); }