"use client"; import { useState } from "react"; function ChevronIcon({ direction, className }: { direction: "prev" | "next"; className?: string }) { const d = direction === "prev" ? "M14.5 6.5 9 12l5.5 5.5" : "M9.5 6.5 15 12l-5.5 5.5"; return ( ); } export function ProductGallery({ images, alt }: { images: string[]; alt: string }) { const [index, setIndex] = useState(0); const [zoomed, setZoomed] = useState(false); const [origin, setOrigin] = useState({ x: 50, y: 50 }); const list = images.length > 0 ? images : ["/images/placeholder.svg"]; const hasMultiple = list.length > 1; const go = (delta: number) => { setIndex((prev) => (prev + delta + list.length) % list.length); }; return (
{ const rect = event.currentTarget.getBoundingClientRect(); setOrigin({ x: ((event.clientX - rect.left) / rect.width) * 100, y: ((event.clientY - rect.top) / rect.height) * 100, }); }} onMouseEnter={() => setZoomed(true)} onMouseLeave={() => setZoomed(false)} > {/* eslint-disable-next-line @next/next/no-img-element */} {alt} {hasMultiple && ( <> )}
{hasMultiple && (
{list.map((img, i) => ( ))}
)}
); }