oxyn

Bar Ring: every bar-ring state in one loader

Nine bar-ring animations in one React component. Bars glide from read to write to seek as your AI agent's state changes. Install with shadcn.

Installation

Install with the shadcn CLI, or copy the component file. It only needs React.

npx shadcn@latest add https://oxyn.space/r/bar-ring.json

Usage

Updates live with the parameters you set.

import { BarRing } from "@/components/bar-ring";

export function Thinking() {
  return (
    <BarRing />
  );
}

Props

For the selected animation. Switch it to see the props each one takes.

PropTypeDefaultDescription
animation"read"|"comet"|"twin"|"write"|"seek"|"stream"|"transfer"|"ping"|"plan""read"Which animation runs. Changing it blends from the old animation to the new one; every other prop keeps its value.
barsnumber36Number of bars around the ring.
barHeightnumber12Resting height of each bar in px, pointing away from the center.
barWidthnumber2Thickness of each bar in px. Capped so neighbors never overlap.
radiusnumber1Corner radius of each bar in px.
extendnumber10How far a full push would grow a bar in px; reading uses about a third of it.
durationnumber0.32Seconds one bar stays lit as the reading passes.
staggernumber0.09Seconds between one bar lighting and the next, going clockwise.
direction"out"|"in""out"Which way the push carries a bar: away from the center, or toward it.
sizenumber160Width and height of the orb in px.
minOpacitynumber0.35Opacity of resting bars. Bars at the peak of the wave are always fully opaque.
colorstring"#e4e4e7"Bar color.
pausedbooleanfalseCoast to a stop on the current frame without unmounting. Turning it off eases back up to speed.
labelstring"Thinking"Accessible name; the wrapper is role="status".
className / style——Spread onto the wrapper div, along with any other div props.

Single loaders

Each animation also ships on its own, for a spot that only ever shows one state.