bx

Carousel

A carousel with motion and swipe built using a tiny island.

1
2
3
4
5
tsx
<Carousel>
  <CarouselContent>
    <CarouselItem>1</CarouselItem>
    <CarouselItem>2</CarouselItem>
  </CarouselContent>
  <CarouselPrevious />
  <CarouselNext />
</Carousel>

Carousel — slider horizontal ou vertical. Chaque CarouselItem est un slide, snap sur le scroll. Boutons Previous/Next pour navigation, plus le scroll natif (drag/wheel) et le swipe tactile.

Installation

Terminal
$ bext ui add carousel

Usage

tsx
import { Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext } from "@bext-stack/ui/primitives"

<Carousel>
  <CarouselContent>
    <CarouselItem><Card>Slide 1</Card></CarouselItem>
    <CarouselItem><Card>Slide 2</Card></CarouselItem>
  </CarouselContent>
  <CarouselPrevious />
  <CarouselNext />
</Carousel>

Anatomy

<Carousel>
  ├── <CarouselContent>
  │   ├── <CarouselItem>slide 1</CarouselItem>
  │   ├── <CarouselItem>slide 2</CarouselItem>
  │   └── <CarouselItem>slide 3</CarouselItem>
  ├── <CarouselPrevious />
  └── <CarouselNext />
</Carousel>

API Reference

Prop Type Default Description
orientation "horizontal" | "vertical" "horizontal" undefined
children ReactNode undefined

CarouselContent

Prop Type Default Description
children ReactNode undefined

CarouselItem

Prop Type Default Description
children ReactNode Un slide. Par défaut basis-full. Pour multi-slide visible : basis-1/2 md:basis-1/3 …

CarouselPrevious / CarouselNext

Prop Type Default Description
className string undefined

Data Attributes

Attributs qu'on peut cibler en CSS custom pour override le style par état.

Attribute On Values Description
data-ui="carousel" Carousel root undefined undefined
data-orientation Carousel root "horizontal" | "vertical" undefined

Keyboard

Key Action
Arrow Left / Right Slide précédent / suivant.
Home / End Premier / dernier slide.

Accessibility

role="region" aria-roledescription="carousel". Chaque slide porte role="group" aria-roledescription="slide" aria-label="N of M".

Try it live
Open in play

Edit this component live in the bext playground. The PRISM + signals version is the bext-native idiom — fine-grained reactivity, no virtual DOM.

src/app/page.tsx 2 files · signals · runs in your browser
Pure PRISM + real bext signals — fine-grained, no re-render.