"use client"; import { useEffect, useState } from "react"; import useEmblaCarousel from "embla-carousel-react"; import { Icon } from "@iconify/react"; import ImageViewer from "./image-viewer"; interface Props { images: string[]; className?: string; } export default function Carousel({ images, className }: Props) { const [emblaRef, emblaApi] = useEmblaCarousel(); const [selectedIndex, setSelectedIndex] = useState(0); const [scrollSnaps, setScrollSnaps] = useState([]); const [isFocused, setIsFocused] = useState(false); useEffect(() => { if (!emblaApi) return; setScrollSnaps(emblaApi.scrollSnapList()); emblaApi.on("select", () => setSelectedIndex(emblaApi.selectedScrollSnap())); }, [images, emblaApi]); // Handle keyboard events useEffect(() => { if (!isFocused || !emblaApi) return; const handleKeyDown = (event: KeyboardEvent) => { switch (event.key) { case "ArrowLeft": emblaApi.scrollPrev(); break; case "ArrowRight": emblaApi.scrollNext(); break; default: break; } }; window.addEventListener("keydown", handleKeyDown); return () => { window.removeEventListener("keydown", handleKeyDown); }; }, [isFocused, emblaApi]); return (
setIsFocused(true)} onMouseLeave={() => setIsFocused(false)}>
{images.map((src, index) => (
))}
{images.length > 1 && ( <>
{scrollSnaps.map((_, index) => (
)}
); }