Progress accessibility
WCAG 2.1 AA — release blocker
Semantics
- Renders with
role="progressbar". - Determinate mode sets
aria-valuenow,aria-valuemin(0), andaria-valuemax. - Indeterminate mode omits
aria-valuenow— screen readers announce "progress busy". labelprop maps toaria-labelfor an accessible name.
Visual
- Tone colours meet 4.5:1 contrast against the track background.
- The
showValuepercentage text usestabular-numsfor stable width during updates. - Indeterminate animation uses CSS only — no JavaScript timers that could stall.
Sizes
sm(6px),md(10px),lg(16px) — all above the minimum 4px touch target for non-interactive elements.
Labelling
- Always provide a
labelprop for screen reader context (e.g. "Uploading file"). - When using
showValue, the visible percentage supplements the label.
Audit checklist
- Screen reader announces progress role and current value.
- Indeterminate mode is announced as busy/indeterminate.
-
aria-labelis set whenlabelprop is provided. - Tone colours meet 4.5:1 contrast ratio.
- Animation respects
prefers-reduced-motion(future enhancement).