import { useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { AlertTriangle, Loader2 } from 'lucide-react'; import { Card, CardContent } from './Card'; import { Button } from './Button'; interface ConfirmModalProps { title: string; message: string; confirmText?: string; cancelText?: string; cancelVariant?: 'primary' | 'secondary' | 'danger' | 'ghost'; cardClassName?: string; variant?: 'danger' | 'warning' | 'default'; isLoading?: boolean; loadingText?: string; onConfirm: () => void; onCancel: () => void; } export function ConfirmModal({ title, message, confirmText, cancelText, cancelVariant, cardClassName, variant = 'default', isLoading = false, loadingText, onConfirm, onCancel, }: ConfirmModalProps) { const { t } = useTranslation(); const resolvedConfirmText = confirmText ?? t('common.confirm'); const resolvedCancelText = cancelText ?? t('common.cancel'); const resolvedLoadingText = loadingText ?? t('common.loading'); // Close on Escape key (but not while loading) useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { if (e.key === 'Escape' && !isLoading) onCancel(); }; window.addEventListener('keydown', handleKeyDown); return () => window.removeEventListener('keydown', handleKeyDown); }, [onCancel, isLoading]); const variantStyles = { danger: { icon: 'text-red-400', button: 'bg-red-500 hover:bg-red-600', }, warning: { icon: 'text-yellow-400', button: 'bg-yellow-500 hover:bg-yellow-600 text-black', }, default: { icon: 'text-bambu-green', button: 'bg-bambu-green hover:bg-bambu-green-dark', }, }; const styles = variantStyles[variant]; return (
{message}