import React, { useState, useEffect } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; interface OverlayPictureProps { src: string; alt: string; className?: string; } const OverlayPicture: React.FC = ({ src, alt, className = '' }) => { const [isOpen, setIsOpen] = useState(false); useEffect(() => { const handleEscape = (event: KeyboardEvent) => { if (event.key === 'Escape' && isOpen) { // We don't want the escape key event to propagate to the overlay parent // If the picture overlay is used inside another overlay, this prevents both overlays from closing event.stopPropagation(); setIsOpen(false); } }; if (isOpen) { // Use capture phase document.addEventListener('keydown', handleEscape, true); document.body.style.overflow = 'hidden'; } return () => { document.removeEventListener('keydown', handleEscape, true); document.body.style.overflow = 'unset'; }; }, [isOpen]); return ( <> setIsOpen(true)} transition={{ duration: 0.2 }} layoutId='overlay-image' /> {isOpen && ( { if (e.target === e.currentTarget) { setIsOpen(false); } }} > )} ); }; export default OverlayPicture;