Installation

pnpm dlx shadcn@latest add @cortexcn/carouselUsage
import { type CarouselApi, Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext, useCarousel } from "@/components/carousel";Examples
Basic
import { Card, CardContent } from "@/components/card"import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from "@/components/carousel"export function CarouselBasic() { return ( <div className="flex flex-col gap-6"> <Carousel className="mx-auto max-w-xs sm:max-w-sm"> <CarouselContent> {Array.from({ length: 5 }).map((_, index) => ( <CarouselItem key={index}> <div className="p-1 style-luma:p-2.5"> <Card> <CardContent className="flex aspect-square items-center justify-center p-6"> <span className="text-4xl font-semibold">{index + 1}</span> </CardContent> </Card> </div> </CarouselItem> ))} </CarouselContent> <CarouselPrevious className="hidden sm:inline-flex" /> <CarouselNext className="hidden sm:inline-flex" /> </Carousel> </div> )}Multiple
import { Card, CardContent } from "@/components/card"import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from "@/components/carousel"export function CarouselMultiple() { return ( <div className="flex flex-col gap-6"> <Carousel className="mx-auto max-w-xs sm:max-w-sm" opts={{ align: "start", }} > <CarouselContent> {Array.from({ length: 5 }).map((_, index) => ( <CarouselItem key={index} className="sm:basis-1/2 lg:basis-1/3"> <div className="p-1 style-luma:p-2.5"> <Card> <CardContent className="flex aspect-square items-center justify-center p-6"> <span className="text-3xl font-semibold">{index + 1}</span> </CardContent> </Card> </div> </CarouselItem> ))} </CarouselContent> <CarouselPrevious className="hidden sm:inline-flex" /> <CarouselNext className="hidden sm:inline-flex" /> </Carousel> </div> )}With gap
import { Card, CardContent } from "@/components/card"import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from "@/components/carousel"export function CarouselWithGap() { return ( <div className="flex flex-col gap-6"> <Carousel className="mx-auto max-w-xs sm:max-w-sm"> <CarouselContent className="-ml-1"> {Array.from({ length: 5 }).map((_, index) => ( <CarouselItem key={index} className="pl-1 md:basis-1/2"> <div className="p-1 style-luma:p-2.5"> <Card> <CardContent className="flex aspect-square items-center justify-center p-6"> <span className="text-2xl font-semibold">{index + 1}</span> </CardContent> </Card> </div> </CarouselItem> ))} </CarouselContent> <CarouselPrevious className="hidden sm:inline-flex" /> <CarouselNext className="hidden sm:inline-flex" /> </Carousel> </div> )}Adapted from the shadcn/ui Carousel (MIT).
