Carousel

A responsive, accessible slider and scroll-track carousel supporting container alignment, edge gradient fades, and pagination.

// Plain markup
import { Carousel, CarouselControls, CarouselDots, CarouselItem, CarouselNext, CarouselPrevious, CarouselTrack } from "@shavin/ui";

Cards Track with Navigation Controls

Featured Primitives

Foundation

Design Tokens

Two-tier architecture for flawless theme sync.

UI Engine

Accessible Primitives

74 WCAG 2.1 AAA primitives with zero slop.

Creative FX

Visual Shaders

10 hardware-accelerated WebGL shader canvases.

AI Integration

MCP Server

Ground-truth AI tooling for zero hallucination.

Builder

Studio Canvas

Visual drag-and-drop screen composition.

Component Source
<Carousel variant="cards" alignToContainer="lg" fadeEdges>
  <div className="flex items-center justify-between mb-4">
    <Heading size="md">Featured Items</Heading>
    <Carousel.Controls>
      <Carousel.Previous />
      <Carousel.Next />
    </Carousel.Controls>
  </div>
  <Carousel.Track gap="4">
    {items.map((item, idx) => (
      <Carousel.Item key={idx} className="w-[280px]">
        <Card className="p-4 flex flex-col gap-2">
          <Heading size="sm">{item.title}</Heading>
          <Text size="sm" color="subtle">{item.desc}</Text>
        </Card>
      </Carousel.Item>
    ))}
  </Carousel.Track>
</Carousel>

Slider Mode (Paginated Slide Sequence)

Foundation

Design Tokens

Two-tier architecture for flawless theme sync.

UI Engine

Accessible Primitives

74 WCAG 2.1 AAA primitives with zero slop.

Creative FX

Visual Shaders

10 hardware-accelerated WebGL shader canvases.

AI Integration

MCP Server

Ground-truth AI tooling for zero hallucination.

Builder

Studio Canvas

Visual drag-and-drop screen composition.

Component Source
<Carousel variant="slider" onSlideChange={setSlide}>
  <Carousel.Track>
    {slides.map((slide, idx) => (
      <Carousel.Item key={idx}>
        <div className="h-48 rounded-[var(--radius-panel)] bg-surface-hover/40 border border-hairline flex items-center justify-center p-6 text-center">
          <Heading size="lg">{slide.title}</Heading>
        </div>
      </Carousel.Item>
    ))}
  </Carousel.Track>
  <Carousel.Dots count={5} />
</Carousel>

Props Specification

PropTypeDefaultDescription
alignToContainerContainerSizenoneAlignment of track start/end to a standard Shavin container size. Default "none".
fadeEdgesbooleanfalseWhether to render subtle gradient edge fade overlays on the track boundaries. Default false.
scrollStepnumber340Custom scroll step in pixels for cards variant. Default 340.
autoPlayIntervalnumberdisabledAuto-scroll interval in ms (slider mode only). Default disabled.
onSlideChange(index: number) => void—Callback fired when active slide index changes.
variant"slider" | "cards""cards"—
Configure Theme
Theme
Accent Color
Custom
Gray Family
Appearance
Radius
Scaling
Panel Style
Heading Font
Body Font