tween
ComponentsTemplatesShowcaseContact

Command Palette

Search for a command to run...

Getting Started
  • Introduction
  • Installation
  • StoryNew
Guides
  • Motion Principles
  • Scroll and Smooth Scroll
  • Performance and Accessibility
Scroll Animations
  • Sticky Cards Scroll
  • Rise Fan Cards Scroll
  • Rotate Stack Scroll
  • Doodle Lens ScrollNew
  • Slit Open Hero ScrollNew
  • Logo Mask Zoom ScrollNew
  • ASCII Dissolve ScrollNew
  • Lottie Flight ScrollNew
  • Inline Icon Text ScrollNew
  • Starfield ScrollNew
  • Name Swap ScrollNew
  • Spotlight Gallery HeroNew
  • Slit Rotate Hero ScrollNew
  • Stroke Cover ScrollNew
  • Stroke Rows ScrollNew
Text Animations
  • Text Skew Reveal
  • Block Text Reveal
Hover & Cursor
  • Image Trail Cursor
  • Cursor Depth Logo
  • Physics Tag Drop
  • Elastic Card ListNew
  • Magnetic Cards SpringNew
Sliders & Carousels
  • Wheel Fullscreen Carousel
  • Ripple Displacement Slider
  • Three.js Blend Slider
  • Stacked Deck Slider
  • Orbit Cylinder SliderNew
  • Fan Stack SliderNew
  • Exponential Strip SliderNew
  • Dual Column SliderNew
Galleries & Grids
  • Scroll Wave Gallery
Menus & Navigation
  • Shrink Page MenuNew
Preloaders & Intros
  • Floating Items RevealNew
  • Word Cycle RevealNew
  • Tile Grid LoaderNew
Page Transitions
  • Panel Assembly TransitionNew
3D & WebGL
  • Fractal Glass Hero
  • Fluid Cursor Canvas
  • Fluid Portrait Hero
  • Fluid Gradient Canvas
  • Inversion Lens HoverNew
UI Elements
  • Circular Widgets
  • Vinyl Cover
  • Image Explosion Footer
  • Accordion Image FramesNew

(Tween) — Motion registry

Animated components & full sites, one command away.

Product

  • Components
  • Templates
  • Installation
  • Guides
  • Blog
  • Contact

Categories

  • Scroll Animations
  • Text Animations
  • Hover & Cursor
  • Sliders & Carousels
  • Galleries & Grids
  • Menus & Navigation
  • Preloaders & Intros
  • Page Transitions
  • 3D & WebGL
  • UI Elements
TWEEN
ease: power2.inOut0.00s
© 2026 TweenBack to topBuilt by mohammad
  1. Docs/
  2. Components/
  3. Circular Widgets

Circular Widgets

PreviousNext

A radial widget dial that arranges items around a ring and spins them with a wheel-driven rotating indicator.

Open in
circular-widgets-demo
components/ui/circular-widgets-demo.tsx
import { CircularWidgets } from "@/registry/tween/circular-widgets"

export function CircularWidgetsDemo() {
  return (
    <div className="mx-auto w-full max-w-3xl">
      <CircularWidgets height="var(--preview-h, 640px)" />
    </div>
  )
}

Installation

pnpm dlx shadcn@latest add https://tweenui.dev/r/circular-widgets.json

Usage

import { CircularWidgets } from "@/components/ui/circular-widgets"
<CircularWidgets
  widgets={[
    { image: "https://example.com/ultraviolet.jpg", name: "Ultraviolet" },
    { image: "https://example.com/ember.jpg", name: "Ember" },
    // ...
  ]}
/>

Each entry becomes one segment of the ring; the section count is derived from the array length, so adding or removing widgets re-divides the dial automatically.

Props

PropTypeDefaultDescription
widgetsCircularWidget[]10 defaultsOne segment per item. { image, name }. Section count is derived.
heightnumber | string640Box height. A number is interpreted as pixels.
accentColorstring"#ffb23f"Color used for the rotating indicator line and the center pill.
backgroundColorstring"#0a0a0a"Box background.
outerRadiusRationumber0.4Outer ring radius as a fraction of min(width, height).
innerRadiusRationumber0.25Inner ring radius as a fraction of min(width, height).
rotationSpeednumber18Indicator base rotation speed in degrees/second.
spinnerSpeedFactornumber0.25Spinner speed multiplier relative to the indicator (opposite sign).
wheelSensitivitynumber0.05How strongly wheel deltas push the indicator and spinner.
classNamestring—Extra classes appended to the outer container.

Behavior

Wheel input feeds the indicator and the spinner ring at opposite signs, so scrolling rotates the dial in one direction while the inner spinner counter-rotates. When input stops, both rings ease back to their idle rotation speeds rather than snapping to a halt.

Theming

accentColor and backgroundColor are pure props — no CSS overrides required. The default sodium-amber #ffb23f on #0a0a0a reads like a darkroom safelight; pass your own values to match a brand palette.

Inversion Lens HoverVinyl Cover

On This Page

InstallationUsagePropsBehaviorTheming

Contribute

  • Report an issue
  • Request a feature
  • Edit this page