"use client"; import { useState, useEffect, ReactNode } from "react"; import { ChevronLeft, ChevronRight } from "lucide-react"; interface BannerCarouselProps { slides: ReactNode[]; intervalMs?: number; className?: string; } export function BannerCarousel({ slides, intervalMs = 8000, className = "", }: BannerCarouselProps) { const [index, setIndex] = useState(0); // Pick a random starting slide on the client to avoid hydration mismatch useEffect(() => { setIndex(Math.floor(Math.random() * slides.length)); }, [slides.length]); // Re-keyed on index so a manual change restarts the countdown useEffect(() => { const id = setTimeout( () => setIndex((i) => (i + 1) % slides.length), intervalMs ); return () => clearTimeout(id); }, [index, intervalMs, slides.length]); const go = (delta: number) => setIndex((i) => (i + delta + slides.length) % slides.length); return (
{/* Slides stacked in one grid cell so the container fits the tallest */}
{slides.map((slide, i) => (
{slide}
))}
{slides.map((_, i) => (
); }