✨ Working with PDFs, images or videos? Discover 145+ free web apps built for everyday tasks

Carousel

A compound carousel primitive with drag-to-swipe, keyboard navigation, dot/thumbnail indicators, autoplay, and seamless looping.

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>
);
}