Accessibility
Progress from @prepared911/ui-core wraps Radix Progress with an optional label and percentage. The primitive exposes the progressbar role and ARIA value attributes; your job is to give the bar a meaningful label, stabilize percentages, and honor reduced-motion expectations for indeterminate animations.
role="progressbar".aria-valuenow, aria-valuemin, and aria-valuemax update as the value changes.label prop renders visibly and associates with the bar.showPercentage with a volatile value (re-counting every 100 ms). Round to integers and throttle updates so the screen reader doesn't spam the user.value (or set it to undefined) and rely on the indeterminate animation with the label.Progress is non-interactive; there is no keyboard surface. If a cancel affordance is needed, pair the progress bar with a Button beside it.
role="progressbar" on the bar.aria-valuenow, aria-valuemin, aria-valuemax reflect the state.aria-valuenow so the rotor announces "indeterminate".aria-valuenow changes.Snackbar or inline Callout) so the completion message persists after the bar disappears.prefers-reduced-motion: reduce is set.LoadingIndicator.