logo

SINGULARITY

DOCS

PurchaseReturn to the Dashboard
Reference

Progress

Progress indicators, often referred to as spinners, convey either an indefinite wait period or show the duration of a task.

Progress indicators provide users with updates on the status of ongoing tasks, such as application loading, form submission, or data saving.
  • Determinate indicators illustrate the expected duration of a process.
  • Indeterminate indicators depict an unspecified waiting period.
The components' animations leverage CSS to the fullest to ensure functionality even before JavaScript is fully loaded.

Circular

Circular indeterminate

Circular color

Circular size

Circular determinate

Interactive integration

Circular with label

10%

Linear

Linear indeterminate

Linear color

Linear determinate

Linear buffer

Linear with label

10%

Non-standard ranges

Progress components accept values between 0 and 100, simplifying accessibility for screen-reader users with these as default minimum and maximum values. However, if your data source uses a different range, you can transform those values to fit the 0–100 scale as shown below:
// MIN = Minimum expected value
// MAX = Maximum expected value
// Method to normalize the values (MIN / MAX could be integrated)
const normalise = (value) => ((value - MIN) * 100) / (MAX - MIN);

// Example component that utilizes the `normalise` function at the point of render.
function Progress(props) {
  return (
    <React.Fragment>
      <CircularProgress variant="determinate" value={normalise(props.value)} />
      <LinearProgress variant="determinate" value={normalise(props.value)} />
    </React.Fragment>
  );
}

Customization

Below are examples of tailoring the component. Further details can be found in the overrides documentation page.

Delaying appearance

There are three critical thresholds to understand regarding response times. The ripple effect in the ButtonBase component creates an immediate sense of responsiveness. Typically, no additional feedback is needed for delays between 0.1 and 1.0 seconds. Beyond 1.0 second, displaying a loader helps maintain the user’s thought flow.

Limitations

High CPU load

During intense processing, you may notice the loss of stroke dash animations or inconsistent CircularProgress ring widths. To avoid blocking the main rendering thread, consider running demanding operations in a web worker or processing them in batches.
When this isn’t feasible, using the disableShrink prop can help address the issue. Refer to this issue for more details.

High frequency updates

The LinearProgress component employs a CSS transform property transition for smooth value updates, with a default duration of 200ms. If a parent component updates the value prop too rapidly, there will be at least a 200ms delay before the progress bar fully reflects the change.
For scenarios requiring 30 or more re-renders per second, we suggest disabling the transition as shown below:
.MuiLinearProgress-bar {
  transition: none;
}