ns-ui

Loader Spirograph Trace

A determinate loader that traces a real hypotrochoid: the full closed rosette is always visible as a ghost, and progress is the fraction of that curve's arc length inked in, so 0% and 100% are both legible shapes rather than an empty ring.

Use when a determinate circular loader where the route matters as much as the reading — the whole closed spirograph rosette is on screen as a ghost at 0%, so the empty state is a shape rather than a bare ring, and the same curve carries an arc-length sweep when no total is known yet. Pick loader-iris instead for a small inline indeterminate glyph in a fixed square footprint with no percentage to show, progress-wick when the progress is a horizontal transport bar whose real cadence is bursty, and loader-thread-spool when the wait starts unknown and the object should visibly become a gauge once a total arrives.

Install

npx shadcn add https://design.helpmarq.com/r/loader-spirograph-trace.json
View source and playground

ns-ui / loader-spirograph-trace

Building search index

inked arc length = progress, on the full rosette

no total yet — arc-length sweep

complete — the whole curve inked

Props

PropTypeDefaultDescription
value?numberprogress 0-100. Leave undefined for indeterminate (a travelling sweep).
size?numberglyph size in px.
label?stringaccessible name for the progressbar.
R?numberfixed radius of the spirograph ring.
r?numberrolling radius. gcd(R, r) = 1 keeps the rosette a single closed curve.
d?numberpen offset from the rolling circle's centre.
className?string