Shimmer
Status-line text with one narrow highlight that crosses it on the shared clock while work is live.
import { Shimmer } from "@arcadia/ui"The text renders at its tone colour × 60% while one narrow highlight, a rank up, crosses it over 70% of --loop-shimmer (1.6s, half the watch) on --ease-sweep and then rests, so the words stay readable throughout. It runs on the shared clock with the pine sweep and a product's live signal: in the specimen above, the pine's left arm lights as the highlight sets off.
It is a live signal, not decoration: secondary for live tool verbs and "Working", tertiary for tail status. A live Collapsible header uses this same component, so its verb shares the clock too.
Which loader? A Shimmer marks live status text. A Pine Sweep says an agent is running, a Spinner says a control or a small region is busy, and a Skeleton holds the place of content on its way.
Examples
Live to done
active={false} renders plain text in the tone colour with no motion: the same element carries the finished state.
One clock
Every looping Shimmer pins its sweep to the document timeline through useSyncedAnimations, like PineSweep and Spinner: on mount, when it turns active, and whenever the browser restarts the loop later (shown again after display: none, or moved in the DOM).
However late a line mounts, all of them cross together.
rootStyle takes layout and the sweep's three colours, each a palette token (the resting words may be one at a share of its strength).
| Knob | Takes | Default | Sets |
|---|---|---|---|
Paint | var(--text-2) | Text colour when still (inactive, reduced motion, forced colours). | |
Paint | Faded | color-mix(in srgb | The words between beams. | |
Paint | var(--text-1) | The beam. |
The sweep is visual only; the words are plain text and read normally. Put the live-region role on the status container, not on the shimmer, and announce a change of step ("Reading", then "Editing") rather than every update. With reduced motion the sweep stops and the text holds its tone colour.
Shimmer
tone- "secondary" | "tertiary"Default"secondary"
secondary: text-2 at rest, sweeping to text-1 (live tool verbs, "Thinking").tertiary: text-3 sweeping to text-2 (tail status, "Summarizing context").active- booleanDefaulttrue
- Sweep while true. False renders plain text in the tone colour, no motion.
rootStyle- RootStyle<ShimmerKnobs>
- Typed StyleX override: layout and the
--shimmer-*knobs. className- string
- The part name a parent gives the shimmer it renders (
ui-collapsible-action), for its own rules.
Rest props go to <span> props and render.