"use client";
import Image from "next/image";
import { Swiper, SwiperSlide } from "swiper/react";
import { Autoplay, Pagination } from "swiper/modules";
import "swiper/css";
import "swiper/css/pagination";
/**
* Carousel allégé réservé aux vignettes des listes (portfolio, compétences).
*
* Différences volontaires par rapport à `Carousel.tsx` / `CarouselCompetences.tsx`
* (qui restent utilisés dans les fiches détail) :
*
* - **Pas de flèches de navigation** : chaque vignette est enveloppée d'un
* `` qui capture le clic. Les flèches Swiper créaient une zone de clic
* ambiguë (on croit naviguer dans les images, on arrive sur la fiche détail).
* L'autoplay + le swipe tactile suffisent à l'échelle d'une vignette.
* - **Pas de lightbox** (pas de `createPortal`). La lightbox reste la signature
* de la fiche détail ; en vignette on ne propose que la navigation vers la fiche.
* - **Pagination Stitch** : bullets teintés `primary` via des variables CSS
* Swiper surchargées en inline, pour éviter de polluer `globals.css` avec un
* sélecteur global.
*
* Le composant couvre 100 % de son conteneur parent (qui fixe le `aspect-ratio`
* dans les pages liste), avec `object-cover` sur les images.
*/
interface VignetteCarouselProps {
images: Array<{ url: string; alt: string }>;
autoplayDelay?: number;
}
export default function VignetteCarousel({
images,
autoplayDelay = 3500,
}: VignetteCarouselProps) {
return (
1}
autoplay={{ delay: autoplayDelay, disableOnInteraction: false }}
pagination={{ clickable: false }}
className="h-full w-full"
style={
{
// Surcharges Swiper : bullets primary Stitch, taille discrète.
"--swiper-pagination-color": "#26445d",
"--swiper-pagination-bullet-inactive-color": "#ffffff",
"--swiper-pagination-bullet-inactive-opacity": "0.55",
"--swiper-pagination-bullet-size": "6px",
"--swiper-pagination-bullet-horizontal-gap": "3px",
"--swiper-pagination-bottom": "8px",
} as React.CSSProperties
}
>
{images.map((img, index) => (
))}
);
}