- The component contains a native HTML
<progress>element. - The component is visible on the page.
- The visual progress ring is implemented using a CSS
conic-gradient. - The center of the progress ring is transparent or "hollowed out" using
background-clip: border-area. - If
background-clip: border-areais not supported, fall back to hollowing out the center of the ring with a radial gradient mask. - The
valueattribute on<progress>is used to drive the visual progress of the ring usingattr(). - If using
attr()on non-content properties is not supported, fallback to update the visual ring using aMutationObserverthat monitors thevalueattribute and updates the--valueproperty. - The component supports displaying text content (e.g., the percentage) in the center of the ring.
- The ring smoothly transitions between values when the
--valueproperty is updated (requiring@propertysupport in the browser). - The
<progress>element includes anaria-labelfor accessibility. - The component's fill color changes to a success color (e.g., green) when the progress value reaches 100%.
- The component has a distinct visual "track" (background) behind the progress fill.
- The spinner respects
prefers-reduced-motionby changing to a new value immediately, rather than having a smooth transition.