Progress
The Progress component displays the status of a task or operation over time.
Installation
Base UI components are all available as a single package.
npm install @base_ui/react
Once you have the package installed, import the component.
import { Progress } from '@base_ui/react/Progress';Anatomy
Progress
<Progress.Root />is a top-level component that wraps the other components.<Progress.Track />renders the rail that represents the total length or duration of progress.<Progress.Indicator />renders the filled portion of the track.
<Progress.Root>
<Progress.Track>
<Progress.Indicator />
</Progress.Track>
</Progress.Root>Value
Determinate
The value prop represents the percentage value of the Progress component. The default minimum and maximum values are 0 and 100, and can be changed with the min and max props. When progress is determinate the data-progressing attribute exists, changing to data-complete when value equals max.
function App() {
const [progressValue] = React.useState(25);
return (
<Progress.Root value={progressValue} min={0} max={100}>
<Progress.Track>
<Progress.Indicator />
</Progress.Track>
</Progress.Root>
);
}Indeterminate
Set value to null to configure an indeterminate progress bar. The data-indeterminate attribute will exist.
<Progress.Root value={null}>
<Progress.Track>
<Progress.Indicator />
</Progress.Track>
</Progress.Root>RTL
Set the direction prop to 'rtl' to change the direction that the Indicator fills towards for right-to-left languages:
<Progress.Root direction="rtl">{/* Subcomponents */}</Progress.Root>Overriding default components
Use the render prop to override the rendered element for all subcomponents:
<Progress.Indicator render={<MyCustomIndicator />} />
// or
<Progress.Indicator render={(props) => <MyCustomIndicator {...props} />} />Accessibility
The Progress component implements the ARIA progressbar specification.
When using Progress, ensure that it has a human-readable text label by using either the aria-label, aria-labelledby, or getAriaLabel prop:
<Progress.Root aria-labelledby="MyCustomLabel">
<MyCustomLabel id="MyCustomLabel">Loading progress<MyCustomLabel/>
<Progress.Track>
<Progress.Indicator />
</Progress.Track>
</Progress.Root>
// or
<Progress.Root aria-label="Loading progress">
<Progress.Track>
<Progress.Indicator />
</Progress.Track>
</Progress.Root>API Reference
ProgressRoot
| Prop | Type | Default | Description |
|---|---|---|---|
aria-label | string | The label for the Indicator component. | |
aria-labelledby | string | An id or space-separated list of ids of elements that label the Indicator component. | |
aria-valuetext | string | A string value that provides a human-readable text alternative for the current value of the progress indicator. | |
className | union | Class names applied to the element or a function that returns them based on the component's state. | |
direction | enum | 'ltr' | The direction that progress bars fill in |
getAriaLabel | func | Accepts a function which returns a string value that provides an accessible name for the Indicator component | |
getAriaValueText | func | Accepts a function which returns a string value that provides a human-readable text alternative for the current value of the progress indicator. | |
max | number | 100 | The maximum value |
min | number | 0 | The minimum value |
render | union | A function to customize rendering of the component. | |
value | number | null | The current value. The component is indeterminate when value is null. |
ProgressTrack
| Prop | Type | Default | Description |
|---|---|---|---|
className | union | Class names applied to the element or a function that returns them based on the component's state. | |
render | union | A function to customize rendering of the component. |
ProgressIndicator
| Prop | Type | Default | Description |
|---|---|---|---|
className | union | Class names applied to the element or a function that returns them based on the component's state. | |
render | union | A function to customize rendering of the component. |