import { useEffect, useState } from 'react' import { AlertTriangle, X } from 'lucide-react' import styles from './ConfirmDeleteModal.module.css' interface ConfirmDeleteModalProps { open: boolean title: string message: string onConfirm: () => void onCancel: () => void } const ANIMATION_MS = 220 export function ConfirmDeleteModal({ open, title, message, onConfirm, onCancel, }: ConfirmDeleteModalProps) { const [mounted, setMounted] = useState(open) const [closing, setClosing] = useState(false) useEffect(() => { if (open) { setMounted(true) setClosing(false) } else if (mounted) { setClosing(true) const timer = setTimeout(() => { setMounted(false) setClosing(false) }, ANIMATION_MS) return () => clearTimeout(timer) } }, [open, mounted]) useEffect(() => { if (!mounted || closing) return const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onCancel() } document.addEventListener('keydown', onKey) return () => document.removeEventListener('keydown', onKey) }, [mounted, closing, onCancel]) if (!mounted) return null return (
e.stopPropagation()} role="alertdialog" aria-modal="true" aria-labelledby="confirm-delete-title" >

{title}

{message}

) }