import { useEffect, useRef } from 'react'; import { createPortal } from 'react-dom'; export default function ImageLightbox({ src, onClose }) { const overlayRef = useRef(null); // Close on Escape useEffect(() => { const handler = (e) => { if (e.key === 'Escape') onClose(); }; window.addEventListener('keydown', handler); // Prevent body scroll while open document.body.style.overflow = 'hidden'; return () => { window.removeEventListener('keydown', handler); document.body.style.overflow = ''; }; }, [onClose]); return createPortal(
e.target === overlayRef.current && onClose()} style={{ position: 'fixed', inset: 0, zIndex: 9999, background: 'rgba(0,0,0,0.92)', display: 'flex', alignItems: 'center', justifyContent: 'center', touchAction: 'pinch-zoom', }} > {/* Close button */} {/* Download button */} {/* Image — fit to screen, browser handles pinch-zoom natively */} Full size e.stopPropagation()} />
, document.body ); }