GodUI

Orbit Carousel

Slides ride an arc and rotate around a pivot, tilting and receding with angular distance from the front, with momentum drag and snap.

Slides fan out on a wheel and rotate around a pivot below the stage. The front slide sits upright and full-size; the rest tilt, shrink, and dim as they curve away. Drag, click a slide, use the buttons, or the arrow keys.

Aurora

Aurora

Basalt

Basalt

Cirrus

Cirrus

Drift

Drift

Ember

Ember

3 / 5

Installation

pnpm dlx shadcn@latest add "https://godui.design/r/orbit-carousel.json"

A single rotation motion value places every slide on the arc; each derives its position, tilt, scale, and opacity from its angular distance to the top. A release snaps the rotation to the nearest slide with a spring, and a fast flick advances an extra step.

Usage

tsx
 
import { OrbitCarousel } from "@/components/godui/orbit-carousel";
tsx
 
<OrbitCarousel defaultIndex={0} onChange={(index) => select(index)}>
  <Card>One</Card>
  <Card>Two</Card>
  <Card>Three</Card>
</OrbitCarousel>

Shaping the arc

radius sets how far slides sit from the pivot; angleStep sets the degrees between adjacent slides — smaller values pack the wheel tighter.

tsx
 
<OrbitCarousel radius={280} angleStep={20}>
  {/* slides */}
</OrbitCarousel>

Accessibility

The stage is a focusable group: and move between slides, and the labelled buttons do the same. When prefers-reduced-motion is set, the per-slide tilt is dropped.

Props

PropTypeDefaultDescription
radiusnumber240Arc radius in px.
angleStepnumber26Degrees between adjacent slides.
itemWidthnumber160Slide width in px.
itemHeightnumber200Slide height in px.
defaultIndexnumber0Slide at the front on mount.
onChange(index: number) => voidFired when a new slide settles at the front.

OrbitCarousel also forwards every standard <div> attribute to the root element.

On this page

Built with GodUI

Beautifully crafted motion components for modern interfaces.

Star on GitHub