import React, { useState, useMemo } from "react"; import { getProxiedImageUrl } from "../utils"; interface ImageGalleryProps { images: string[]; title: string; mcpUrl?: string; } const ChevronLeftIcon: React.FC = () => ( ); const ChevronRightIcon: React.FC = () => ( ); const ImageIcon: React.FC = () => ( ); export const ImageGallery: React.FC = ({ images, title, mcpUrl }) => { const [selectedIndex, setSelectedIndex] = useState(0); const [isZoomed, setIsZoomed] = useState(false); // Proxy all images to avoid CORS issues const proxiedImages = useMemo(() => { return images?.map((img) => getProxiedImageUrl(img, mcpUrl) || img) || []; }, [images, mcpUrl]); if (!proxiedImages || proxiedImages.length === 0) return null; const handlePrevious = () => { setSelectedIndex((prev) => (prev === 0 ? proxiedImages.length - 1 : prev - 1)); }; const handleNext = () => { setSelectedIndex((prev) => (prev === proxiedImages.length - 1 ? 0 : prev + 1)); }; const handleThumbnailClick = (index: number) => { setSelectedIndex(index); }; return (

Product Gallery {selectedIndex + 1} / {proxiedImages.length}

{/* Main Image */}
setIsZoomed(!isZoomed)} > {`${title} { (e.target as HTMLImageElement).style.display = "none"; }} />
{/* Navigation Arrows */} {proxiedImages.length > 1 && ( <> )} {/* Zoom hint */}
Click to {isZoomed ? "zoom out" : "zoom in"}
{/* Thumbnails */} {proxiedImages.length > 1 && (
{proxiedImages.map((image, index) => ( ))}
)}
); };