Carousel

Swipeable carousels with slide indicators, autoplay, looping, and keyboard navigation for galleries and showcases.

Loading preview

Examples

Practical examples and common states for the same installable component.

Cards

Scrollable carousel for cards and content.

examples/carousel-cards.tsx
import {
Carousel,
CarouselContent,
CarouselItem,
CarouselPrevious,
CarouselNext,
CarouselDots,
} from "@/components/wensity/carousel";
export function CarouselCards() {
return (
<Carousel loop>
<CarouselContent>
<CarouselItem>
<div className="rounded-2xl border p-5">Revenue: $48.2k</div>
</CarouselItem>
<CarouselItem>
<div className="rounded-2xl border p-5">Active users: 3,204</div>
</CarouselItem>
</CarouselContent>
<div className="mt-3 flex items-center justify-between">
<CarouselPrevious />
<CarouselDots />
<CarouselNext />
</div>
</Carousel>
);
}

Vertical

Moves through content with vertical drag, controls, and keyboard navigation.

examples/carousel-vertical.tsx
import {
Carousel,
CarouselContent,
CarouselItem,
CarouselPrevious,
CarouselNext,
} from "@/components/wensity/carousel";
export function CarouselVertical() {
return (
<Carousel loop orientation="vertical">
<CarouselContent className="h-56">
<CarouselItem>
<div className="h-full rounded-2xl border p-5">Refine onboarding flow</div>
</CarouselItem>
<CarouselItem>
<div className="h-full rounded-2xl border p-5">Review empty states</div>
</CarouselItem>
</CarouselContent>
<div className="absolute inset-y-3 right-3 flex flex-col justify-between">
<CarouselPrevious />
<CarouselNext />
</div>
</Carousel>
);
}

Thumbnails

Carousel with selectable thumbnail navigation.

examples/carousel-thumbnails.tsx
import {
Carousel,
CarouselContent,
CarouselItem,
CarouselThumbnails,
} from "@/components/wensity/carousel";
export function CarouselThumbnailsDemo() {
return (
<Carousel loop>
<CarouselContent>
<CarouselItem>
<img src="/photo-1.jpg" alt="" className="h-56 w-full rounded-2xl object-cover" />
</CarouselItem>
<CarouselItem>
<img src="/photo-2.jpg" alt="" className="h-56 w-full rounded-2xl object-cover" />
</CarouselItem>
</CarouselContent>
<CarouselThumbnails className="mt-3">
<img src="/photo-1.jpg" alt="" className="h-14 w-20 object-cover" />
<img src="/photo-2.jpg" alt="" className="h-14 w-20 object-cover" />
</CarouselThumbnails>
</Carousel>
);
}

Autoplay

Automatically advances through carousel items.

examples/carousel-autoplay.tsx
import {
Carousel,
CarouselContent,
CarouselItem,
CarouselDots,
} from "@/components/wensity/carousel";
export function CarouselAutoplay() {
return (
<Carousel loop autoplay autoplayInterval={2800}>
<CarouselContent>
<CarouselItem>
<div className="rounded-2xl border p-5">Design review</div>
</CarouselItem>
<CarouselItem>
<div className="rounded-2xl border p-5">Team sync</div>
</CarouselItem>
</CarouselContent>
<div className="mt-3 flex items-center justify-center">
<CarouselDots />
</div>
</Carousel>
);
}

Infinite

Seamlessly loops content without visible ending.

examples/carousel-infinite.tsx
import {
Carousel,
CarouselContent,
CarouselItem,
CarouselPrevious,
CarouselNext,
CarouselDots,
} from "@/components/wensity/carousel";
export function CarouselInfinite() {
return (
<Carousel loop>
<CarouselContent>
<CarouselItem>
<div className="rounded-2xl border p-5">One</div>
</CarouselItem>
<CarouselItem>
<div className="rounded-2xl border p-5">Two</div>
</CarouselItem>
<CarouselItem>
<div className="rounded-2xl border p-5">Three</div>
</CarouselItem>
</CarouselContent>
<div className="mt-3 flex items-center justify-between">
<CarouselPrevious />
<CarouselDots />
<CarouselNext />
</div>
</Carousel>
);
}

Props

PropTypeDefaultDescription
indexnumber-Controlled active slide index.
defaultIndexnumber0Initial slide when uncontrolled.
onIndexChange(index: number) => void-Called when the active slide changes.
loopbooleanfalseWraps from the last slide back to the first.
autoplaybooleanfalseAdvances slides automatically.
autoplayIntervalnumber4000Milliseconds between automatic advances.
pauseOnHoverbooleantruePauses autoplay while the pointer is over the carousel.
orientation"horizontal" | "vertical""horizontal"Axis the slides travel along.