import { useEffect, useCallback, type ReactNode } from 'react'; import { createPortal } from 'react-dom'; import { useBackdropClose } from '../../lib/useBackdropClose'; interface EmbedModalProps { open: boolean; onClose: () => void; children: ReactNode; } export function EmbedModal({ open, onClose, children }: EmbedModalProps) { const backdrop = useBackdropClose(onClose); const handleKeyDown = useCallback((e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); }, [onClose]); useEffect(() => { if (open) { document.addEventListener('keydown', handleKeyDown); document.body.style.overflow = 'hidden'; return () => { document.removeEventListener('keydown', handleKeyDown); document.body.style.overflow = ''; }; } }, [open, handleKeyDown]); if (!open) return null; return createPortal(
{/* Backdrop — the close handler lives here (the actual clicked element), not the transparent outer div, so target===currentTarget holds. */}
{/* Modal content */}
e.stopPropagation()} > {/* Close button */} {children}
, document.body, ); }