import React, { useEffect } from 'react'; export default function ImageModal({ imageSrc, isOpen, onClose, onNext, onPrev }) { if (!isOpen) return null; // Set up keyboard event listeners useEffect(() => { const handleKeyDown = (e) => { if (e.key === 'ArrowLeft') { onPrev(); } else if (e.key === 'ArrowRight') { onNext(); } else if (e.key === 'Escape') { onClose(); } }; document.addEventListener('keydown', handleKeyDown); return () => document.removeEventListener('keydown', handleKeyDown); }, [onClose, onNext, onPrev]); // Swipe detection for mobile let touchStartX = 0; let touchEndX = 0; const handleTouchStart = (e) => { touchStartX = e.changedTouches[0].screenX; }; const handleTouchEnd = (e) => { touchEndX = e.changedTouches[0].screenX; handleSwipeGesture(); }; const handleSwipeGesture = () => { if (touchEndX < touchStartX - 50) { onNext(); } else if (touchEndX > touchStartX + 50) { onPrev(); } }; const handleClose = (e) => { if (e.target === e.currentTarget) { onClose(); } }; return ( <div className="fixed inset-0 bg-black bg-opacity-75 z-50 flex items-center justify-center p-4 overflow-auto" onClick={handleClose} onTouchStart={handleTouchStart} onTouchEnd={handleTouchEnd} > <div className="relative max-w-[90vw] max-h-[90vh] flex items-center justify-center"> <button onClick={onPrev} className="absolute left-4 z-10 bg-black bg-opacity-50 text-white p-2 rounded-full hover:bg-opacity-75" > ← </button> <img src={imageSrc} alt="Modal view" className="max-h-[90vh] max-w-[90vw] object-contain" /> <button onClick={onNext} className="absolute right-4 z-10 bg-black bg-opacity-50 text-white p-2 rounded-full hover:bg-opacity-75" > → </button> <button onClick={onClose} className="absolute top-4 right-4 z-10 bg-black bg-opacity-50 text-white p-2 rounded-full hover:bg-opacity-75" > × </button> </div> </div> ); }