Skip to content

CircularProgress ​

Ring progress, determinate or spinning

A gauge — round because a gauge is round, one of the three deliberate circles in the system (with the radio and the knob). Pass value for a determinate ring; omit it and the arc spins. Under prefers-reduced-motion it spins at half speed rather than stopping: a loader that stops reads as finished.

Use it where a percentage matters and space is square — a tile, an upload row, a card corner. For a task with room across the page, Progress is the linear one; for "busy" with no percentage, Spinner is smaller and cheaper. showValue puts the number in the ring; it's legible from size 48 up (the text is 26% of the size), so below that put the number beside it. format or the default slot ({ value, percent }) changes the text; format also becomes aria-valuetext, so a screen reader hears "3 of 5 files" rather than "3". Give every ring a label.

Basic
35%80%

Usage ​

ts
import { BlessCircularProgress } from "blessing-ui";

API ​

Props

NameTypeDefaultDescription
valuenumber—omit for indeterminate
maxnumber100
sizenumber48
thicknessnumber4
color"text" | "accent" | "danger" | "warning" | "success" | "info""accent"
labelstring—
showValuebooleanfalse
format((v: number) => string)—

Slots

NameScopeDescription
default{ value: number; percent: number; }

Released under the MIT License. Character names and artwork belong to their owners.