Components Feedback
ProgressCircle
StableA circular progress indicator, determinate or indeterminate.
Use ProgressCircle where a bar does not fit: inside cards, next to file names or for compact completion scores. It needs an accessible name from aria-label or aria-labelledby.
Overview
import { ProgressCircle } from '@bindshq/stance-react';
export function Basic() {
return <ProgressCircle aria-label="Profile completeness" value={75} showValue />;
}Light, dark and high contrast
Every Stance component is designed and tested in all three appearance modes.
Import
import { ProgressCircle } from '@bindshq/stance-react';Platforms
ProgressCircle has native counterparts. They share Stance tokens and intent, and use each platform’s own controls and conventions. The live previews on this page are the web implementation.
import { ProgressCircle } from '@bindshq/stance-react';Playground
<ProgressCircle />Examples
import { ProgressCircle } from '@bindshq/stance-react';
export function Sizes() {
return (
<div style={{ display: 'flex', alignItems: 'center', gap: 24 }}>
<ProgressCircle aria-label="Small" value={40} size="sm" />
<ProgressCircle aria-label="Medium" value={60} size="md" showValue />
<ProgressCircle aria-label="Large" value={80} size="lg" showValue />
</div>
);
}import { ProgressCircle } from '@bindshq/stance-react';
export function Custom() {
return (
<div style={{ display: 'flex', alignItems: 'center', gap: 24 }}>
<ProgressCircle
aria-label="Seats used"
value={46}
max={50}
size={96}
tone="warning"
formatValue={(v, m) => `${v} of ${m} seats`}
>
46/50
</ProgressCircle>
<ProgressCircle
aria-label="Deployment complete"
value={100}
size="lg"
tone="success"
showValue
/>
</div>
);
}import { ProgressCircle } from '@bindshq/stance-react';
export function Indeterminate() {
return <ProgressCircle aria-label="Verifying domain" />;
}API reference
| Prop | Type | Default | Description |
|---|---|---|---|
value | number | null | None | Current value; null or omitted is indeterminate. |
max | number | 100 | Maximum value. |
size | 'sm' | 'md' | 'lg' | number | 'md' | 32, 48, 72px or a custom pixel size. |
thickness | number | None | Ring thickness in px. |
tone | 'default' | 'success' | 'warning' | 'danger' | 'default' | Indicator colour. |
showValue | boolean | false | Show the value in the centre. |
formatValue | (value: number, max: number) => string | percentage | Value text. |
children | ReactNode | None | Custom centre content (visual only). |
Accessibility
- role="progressbar" with value attributes and aria-valuetext.
- Centre content is aria-hidden, since the value is already announced through aria-valuetext.
- Always provide aria-label or aria-labelledby.
Usage guidelines
Do
- Use md or larger when showing the value inside.
Don’t
- Use as a decorative spinner; use Spinner.