crucıble

Gimbal

A machined armillary instrument: nested brushed-metal rings with engraved scales pivot at mutually-prime rates under studio light. Drag to spin on detented bearings, click to align every ring. Offscreen-paused and reduced-motion-safe.

r3fpro

Installation

CLI

npx shadcn@latest add @crucible/gimbal

Manual — install dependencies, then copy the source

npm install three @react-three/fiber

Props

PropTypeDefaultDescription
ringsnumber4Number of nested rings, 3–5.
speednumberDrift-rate multiplier for the rings' slow, mutually-prime rotations. 1 = default, 0 holds the rings still (drag and observe still work).
materialGimbalMaterialFinish of the instrument: brushed "steel" (default, cool neutral), warm turned "brass", or dark "graphite" with light paint-filled engravings.
engravingbooleantrueEngraved tick scales on every ring and a degree band on the outer ring.
interactivebooleantrue. Programmatic observe() works either wayDrag to spin the instrument on its bearings, click to align the rings.
tone"dark" | "light"Studio backdrop: "dark" (default) or "light".
pausedbooleanfalseFreeze the instrument at a composed static pose. Also forced on when the user prefers reduced motion.
classNamestringExtra classes for the wrapper. Positioned absolute inset-0 -z-10.
refReact.Ref<GimbalHandle>Imperative handle — see {@link GimbalHandle}.

Honors prefers-reduced-motion with a designed static fallback, pauses offscreen and on hidden tabs, and passes className through.