'use client'; import { useEffect } from 'react'; import { ExclamationTriangleIcon } from '@heroicons/react/24/outline'; interface ConfirmDialogProps { open: boolean; title: string; message: string; confirmLabel?: string; cancelLabel?: string; tone?: 'danger' | 'primary'; isLoading?: boolean; onConfirm: () => void; onCancel: () => void; } // Styled replacement for the native confirm() dialog so destructive actions // match the rest of the panel. export default function ConfirmDialog({ open, title, message, confirmLabel = 'تأیید', cancelLabel = 'انصراف', tone = 'danger', isLoading = false, onConfirm, onCancel, }: ConfirmDialogProps) { useEffect(() => { if (!open) return; const handleKeyDown = (event: KeyboardEvent) => { if (event.key === 'Escape' && !isLoading) onCancel(); }; document.addEventListener('keydown', handleKeyDown); return () => document.removeEventListener('keydown', handleKeyDown); }, [open, isLoading, onCancel]); if (!open) return null; const confirmClass = tone === 'danger' ? 'bg-red-600 hover:bg-red-700 focus:ring-red-500/30 shadow-red-500/20' : 'bg-indigo-600 hover:bg-indigo-700 focus:ring-indigo-500/30 shadow-indigo-500/20'; const iconWrapClass = tone === 'danger' ? 'bg-red-50 text-red-600 dark:bg-red-500/10 dark:text-red-400' : 'bg-indigo-50 text-indigo-600 dark:bg-indigo-500/10 dark:text-indigo-400'; return (
{ if (!isLoading) onCancel(); }} >
event.stopPropagation()} role="alertdialog" aria-modal="true" aria-label={title} >

{title}

{message}

); }