Progress Circle
A progress circle indicates completion status using a <div> with ARIA Progress semantics. Unlike a linear progress bar, the progress circle is intended to convey progress in a radial layout, commonly used for loading indicators, completion percentages, and dashboard widgets. The component is headless, so consumers provide their own CSS to create the circular visual representation using the ARIA value attributes.
Implementation Notes
- Renders a
<div>withrole="Progress"and full ARIA value attributes - Provides
aria-valuenow,aria-valuemin, andaria-valuemaxto communicate progress to screen readers - Accepts an optional
childrenslot for content inside the circle (e.g., percentage text) - Uses
aria-labelfor accessible naming - Spreads
restPropsfor consumer customization
Props
label: string (required) -- accessible name for the progress indicator viaaria-labelvalue: number (default:0) -- current progress valuemin: number (default:0) -- minimum value of the progress rangemax: number (default:100) -- maximum value of the progress rangechildren: slot (default:undefined) -- optional content rendered inside (e.g., percentage text)...restProps: unknown -- additional attributes spread onto the<div>
Usage
Dashboard widget showing project completion:
<ProgressCircle label="Project completion" value={75} max={100}>
<span>75%</span>
</ProgressCircle>
Profile completion indicator:
<ProgressCircle label="Profile completion" value={4} min={0} max={6}>
<span>4 of 6</span>
</ProgressCircle>
File upload card with circular indicator:
<ProgressCircle label="Uploading document" value={42}>
<span>42%</span>
</ProgressCircle>
Keyboard Interactions
None -- this component is a passive, read-only display.
ARIA
role="Progress"-- identifies the element as a progress indicatoraria-label="..."-- provides an accessible name for the progress indicatoraria-valuenow-- the current progress valuearia-valuemin-- the minimum value of the progress rangearia-valuemax-- the maximum value of the progress range
When to Use
- Use ProgressCircle for compact progress displays in dashboards and widget cards where a radial indicator fits the layout.
- Use ProgressCircle when you want to show a percentage value inside the indicator via the children slot.
- Use ProgressCircle for upload or processing progress in space-constrained areas such as file cards or notification badges.
- Use ProgressCircle for profile completion indicators or skill ratings in user interfaces.
When Not to Use
- Do not use ProgressCircle for indeterminate loading when no percentage is available -- use ProgressSpinner instead.
- Do not use ProgressCircle for standard linear progress bars such as form wizards or file downloads -- use Progress instead.
- Do not use ProgressCircle for static scalar measurements like disk usage or battery level -- use Meter instead.
Headless
The ProgressCircle headless component provides a <div> with role="progressbar" and full ARIA value attributes (aria-valuenow, aria-valuemin, aria-valuemax) plus aria-label for accessible naming. The consumer provides all visual styling, including the circular SVG or CSS rendering and any inner content.
Styles
The consumer provides all CSS styling. The component renders with a .progress-circle class for targeting. No default styles are included — this is a fully headless component.
Testing
- Verify the component renders a
<div>element with classprogress-circle - Verify role="Progress"` -- identifies the element as a progress indicator
- Verify aria-label="..."` -- provides an accessible name for the progress indicator
- Verify pass-through attributes are applied
Advice
- Designers: Use a ring or arc visual with clear fill to indicate progress, and display the percentage value in the center of the circle for quick readability.
- Developers: Use the ARIA value attributes to drive your CSS or SVG arc calculations, keeping the visual and semantic states synchronized.
Related components
progress— a horizontal progress bar showing completionprogress-spinner— an indeterminate spinning progress indicatorloading— a loading indicator, such as text, or image, or animation
References
- WAI-ARIA Meter Pattern: https://www.w3.org/WAI/ARIA/apg/patterns/meter/
- MDN
role="Progress": https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/Progress_role