Installation
npm install @kuzenbo/core
Usage
import { Carousel } from "@kuzenbo/core";
function Example() {
return (
<Carousel className="w-full max-w-xs">
<Carousel.Content>
<Carousel.Item>
<div className="p-1">
<Card>
<CardContent className="flex aspect-square items-center justify-center p-6">
<span className="text-4xl font-semibold">1</span>
</CardContent>
</Card>
</div>
</Carousel.Item>
<Carousel.Item>
<div className="p-1">
<Card>
<CardContent className="flex aspect-square items-center justify-center p-6">
<span className="text-4xl font-semibold">2</span>
</CardContent>
</Card>
</div>
</Carousel.Item>
</Carousel.Content>
<Carousel.Previous />
<Carousel.Next />
</Carousel>
);
}
Props
Carousel
orientation
'horizontal' | 'vertical'
default:"'horizontal'"
The orientation of the carousel.
Options for the Embla carousel instance.
setApi
(api: CarouselApi) => void
Callback to receive the carousel API instance.
Embla carousel plugins to use.
Additional CSS classes to apply.
Carousel.Content
Additional CSS classes to apply.
Carousel.Item
Additional CSS classes to apply.
Carousel.Previous / Carousel.Next
Additional CSS classes to apply.
Advanced Patterns
Autoplay
import { useEffect, useState } from "react";
import type { CarouselApi } from "@kuzenbo/core";
function AutoplayCarousel() {
const [api, setApi] = useState<CarouselApi>();
useEffect(() => {
if (!api) return;
const interval = setInterval(() => {
api.scrollNext();
}, 3000);
return () => clearInterval(interval);
}, [api]);
return (
<Carousel setApi={setApi} opts={{ loop: true }}>
{/* ... */}
</Carousel>
);
}
Thumbnail Navigation
const [api, setApi] = useState<CarouselApi>();
const [current, setCurrent] = useState(0);
useEffect(() => {
if (!api) return;
setCurrent(api.selectedScrollSnap());
api.on("select", () => setCurrent(api.selectedScrollSnap()));
}, [api]);
Vertical Orientation
<Carousel orientation="vertical" className="h-96">
{/* ... */}
</Carousel>