Bar Transfer: a loader for upload and download
A ring of thin bars fills to a progress with a pulsing leading bar. A React loader for uploads and downloads. 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-transfer.jsonUsage
Updates live with the parameters you set.
import { BarTransfer } from "@/components/bar-transfer";
export function Thinking() {
return (
<BarTransfer />
);
}Props
| Prop | Type | Default | Description |
|---|---|---|---|
| bars | number | 36 | Number of bars around the ring. |
| barHeight | number | 12 | Resting height of each bar in px, pointing away from the center. |
| barWidth | number | 2 | Thickness of each bar in px. Capped so neighbors never overlap. |
| radius | number | 1 | Corner radius of each bar in px. |
| extend | number | 10 | How far a transferred bar grows in px. |
| duration | number | 0.16 | Seconds one bar takes to grow; the leading bar pulses every four of these. |
| stagger | number | 0.04 | Seconds between one bar filling and the next while looping. |
| direction | "out"|"in" | "out" | Which way the push carries a bar: away from the center, or toward it. |
| progress | number | 0.6 | How much has transferred. Leave the prop out in code to fill and drain on a loop. |
| size | number | 160 | Width and height of the orb in px. |
| minOpacity | number | 0.35 | Opacity of resting bars. Bars at the peak of the wave are always fully opaque. |
| color | string | "#e4e4e7" | Bar color. |
| paused | boolean | false | Coast to a stop on the current frame without unmounting. Turning it off eases back up to speed. |
| label | string | "Thinking" | Accessible name; the wrapper is role="status". |
| className / style | — | — | Spread onto the wrapper div, along with any other div props. |
Switch states
Bar Transfer is one of the animations in Bar Ring. Use the group when the agent's state changes, and it morphs between them.