import { useEffect, useRef } from 'react' import { AlertTriangle } from 'lucide-react' interface ConfirmModalProps { open: boolean title: string message: string confirmLabel?: string confirmVariant?: 'danger' | 'primary' onConfirm: () => void onCancel: () => void } export default function ConfirmModal({ open, title, message, confirmLabel = 'Delete', confirmVariant = 'danger', onConfirm, onCancel, }: ConfirmModalProps) { const cancelRef = useRef(null) const dialogRef = useRef(null) useEffect(() => { if (!open) return // Focus cancel button when modal opens cancelRef.current?.focus() const handleKeyDown = (e: KeyboardEvent) => { if (e.key === 'Escape') { onCancel() return } // Trap focus inside the modal if (e.key === 'Tab' && dialogRef.current) { const focusable = dialogRef.current.querySelectorAll( 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])' ) const first = focusable[0] const last = focusable[focusable.length - 1] if (e.shiftKey) { if (document.activeElement === first) { e.preventDefault() last?.focus() } } else { if (document.activeElement === last) { e.preventDefault() first?.focus() } } } } document.addEventListener('keydown', handleKeyDown) return () => document.removeEventListener('keydown', handleKeyDown) }, [open, onCancel]) if (!open) return null return (

{title}

{message}

) }