'use client' import { useEffect, useEffectEvent, useRef } from 'react' interface LightboxProps { isOpen: boolean onClose: () => void src: string alt: string } export function Lightbox({ isOpen, onClose, src, alt }: LightboxProps) { const overlayRef = useRef(null) const onCloseEvent = useEffectEvent(onClose) useEffect(() => { if (!isOpen) return const handleKeyDown = (event: KeyboardEvent) => { if (event.key === 'Escape') { onCloseEvent() } } const handleClickOutside = (event: MouseEvent) => { if (overlayRef.current && event.target === overlayRef.current) { onCloseEvent() } } document.addEventListener('keydown', handleKeyDown) document.addEventListener('click', handleClickOutside) document.body.style.overflow = 'hidden' return () => { document.removeEventListener('keydown', handleKeyDown) document.removeEventListener('click', handleClickOutside) document.body.style.overflow = 'unset' } }, [isOpen]) if (!isOpen) return null return (
) }