import React, { useEffect, useCallback } from 'react'; import ReactDOM from 'react-dom'; import { usePortalContainer } from '../../hooks/usePortalContainer'; interface ConfirmDialogProps { isOpen: boolean; onClose: () => void; onConfirm: () => void | Promise; title: string; description: string | React.ReactNode; confirmLabel?: string; cancelLabel?: string; variant?: 'danger' | 'warning'; loading?: boolean; } export function ConfirmDialog({ isOpen, onClose, onConfirm, title, description, confirmLabel = 'Confirm', cancelLabel = 'Cancel', variant = 'danger', loading = false, }: ConfirmDialogProps) { const handleKeyDown = useCallback((e: KeyboardEvent) => { if (e.key === 'Escape' && !loading) { e.stopPropagation(); onClose(); } }, [onClose, loading]); useEffect(() => { if (isOpen) { document.addEventListener('keydown', handleKeyDown, true); return () => document.removeEventListener('keydown', handleKeyDown, true); } }, [isOpen, handleKeyDown]); const portalContainer = usePortalContainer(); if (!isOpen) return null; const isDanger = variant === 'danger'; const confirmBg = isDanger ? 'bg-accent-rose hover:bg-accent-rose/80' : 'bg-accent-amber hover:bg-accent-amber/80'; return ReactDOM.createPortal(
{ if (!loading) onClose(); }} />

{title}

{description}
, portalContainer, ); }