"use client"; import { useState } from "react"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils/cn"; export interface ImageGalleryProps { images: { id: string; url: string; caption?: string | null }[]; className?: string; } /** * Home page hero — a real gallery with thumbnails (Phase 9), replacing * the old single full-bleed logo banner. Matches the content width rather * than bleeding edge-to-edge, per the brief. Plain click-to-swap + arrow * buttons; no swipe-gesture library, since the thumbnail strip already * covers "jump to any image" and arrows cover "next/previous" — a * touch-drag carousel would be a reasonable future upgrade, not required * for this to be a real gallery. */ export function ImageGallery({ images, className }: ImageGalleryProps) { const [activeIndex, setActiveIndex] = useState(0); if (images.length === 0) return null; const active = images[Math.min(activeIndex, images.length - 1)]!; const goTo = (index: number) => setActiveIndex((index + images.length) % images.length); return (
{/* A little taller on phones (3:2) so the cover fills more of the screen; 16:9 from tablet width up. */}
{/* eslint-disable-next-line @next/next/no-img-element -- local/user-supplied URL, same pattern used app-wide */} {active.caption {images.length > 1 && ( <> )}
{images.length > 1 && (
{images.map((image, index) => ( ))}
)}
); }