"use client";
import * as React from "react";
import { Card, CardContent } from "@/registry/ui/card";
import {
Carousel,
CarouselContent,
CarouselItem,
CarouselNext,
CarouselPrevious,
type CarouselApi,
} from "@/registry/ui/carousel";
import { Progress } from "@/registry/ui/progress";
export default function CarouselWithProgress() {
const [api, setApi] = React.useState<CarouselApi>();
const [current, setCurrent] = React.useState(0);
const [count, setCount] = React.useState(0);
const progress = (current * 100) / count;
React.useEffect(() => {
if (!api) {
return;
}
setCount(api.scrollSnapList().length);
setCurrent(api.selectedScrollSnap() + 1);
api.on("select", () => {
setCurrent(api.selectedScrollSnap() + 1);
});
}, [api]);
return (
<div className="mx-auto max-w-xs py-4">
<Carousel setApi={setApi} className="w-full max-w-xs">
<CarouselContent>
{Array.from({ length: 5 }).map((_, index) => (
<CarouselItem key={index}>
<Card>
<CardContent className="flex aspect-video items-center justify-center p-6">
<span className="text-4xl font-semibold">{index + 1}</span>
</CardContent>
</Card>
</CarouselItem>
))}
</CarouselContent>
<CarouselPrevious className="top-[calc(100%+0.5rem)] translate-y-0 left-0" />
<CarouselNext className="top-[calc(100%+0.5rem)] translate-y-0 left-2 translate-x-full" />
</Carousel>
<Progress value={progress} className="mt-4 w-24 ml-auto" />
</div>
);
}