Skip to main content

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

orientation
'horizontal' | 'vertical'
default:"'horizontal'"
The orientation of the carousel.
opts
EmblaOptionsType
Options for the Embla carousel instance.
setApi
(api: CarouselApi) => void
Callback to receive the carousel API instance.
plugins
EmblaPluginType[]
Embla carousel plugins to use.
className
string
Additional CSS classes to apply.
className
string
Additional CSS classes to apply.
className
string
Additional CSS classes to apply.
className
string
Additional CSS classes to apply.
variant
string
Button variant to use.
size
string
Button size to use.

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>

Build docs developers (and LLMs) love