Skip to content
Site volume
Colourway

Components

Progress bar

How far a task has come, as a bar or as cells, with its label and value in words.

  • Experimental
  • Reading layer
  • Server component
  • Since 0.9.0
  • Press check
Import from@maxgrits/overprint-react/progress-bar
On this page

ProgressBar shows how far a task has come. A visible label is required, and the value prints beside it in words. bar is a 12 px sunken track filled in the selected ink; segments counts up to 12 cells, done cells in the selected ink. indeterminate prints a still, hatched track and "Working…": there is no loop.

Example#

Look of this example
Upload42 %
Screens approved7 of 9 screens
Rendering the coverWorking…
Live render of examples/progress-bar/basic.tsx

Usage#

Use a progress bar to show how far a task has come: an upload, screens approved, a render. A visible label is required and the value prints beside it in words.

  • bar (default) is a 12 px sunken track filled in the selected ink.
  • segments counts up to 12 cells, for steps people count, such as screens approved.
  • indeterminate prints a still, hatched track and "Working…". It never loops (D-E3).

Anatomy#

Upload42 %
Screens approved7 of 9 screens
Rendering the coverWorking…
The parts of examples/progress-bar/basic.tsx, numbered:
  1. Headdata-mk-part="head"
  2. Labeldata-mk-part="label"
  3. Valuedata-mk-part="value"
  4. Trackdata-mk-part="track"

Volume#

Reading layer: identical at every volume.

  • Quiet

    Upload42 %
    Screens approved7 of 9 screens
    Rendering the coverWorking…

    Docs, forms, legal and long reads. Flat inks, no art in motion.

  • Studio

    Upload42 %
    Screens approved7 of 9 screens
    Rendering the coverWorking…

    The site default. Art on its own plates, one display moment per view.

  • Press

    Upload42 %
    Screens approved7 of 9 screens
    Rendering the coverWorking…

    Hero moments, covers and campaigns. Halftone fields and the second ink.

  • Rave

    Upload42 %
    Screens approved7 of 9 screens
    Rendering the coverWorking…

    Launches, posters and the 404. Every ink, and the words still win.

Content#

  • The label names the task: "Upload", "Screens approved".
  • valueText says it in the reader's terms: "7 of 9 screens", not "77.7 %".

Do and don't#

Do

Screens approved7 of 9 screens

Counted in the task's own units.

Don't

Progress77.7 %

A precise percentage of nothing named.

People think in screens, files and steps. A labelled count tells them what is left; a bare percentage does not.

Accessibility#

  • role="progressbar" named by the label, with aria-valuetext in the same words the bar prints.
  • Nothing animates: the fill is set once per render, so reduced motion changes nothing.
  • Done and open cells differ by face and rule weight as well as ink.

The colour pairs it prints, with their contrast on both papers:

TextSurfaceRoleBoneNight
--mk-text--mk-surfaceuinot in this looknot in this look
--mk-text-2--mk-surfaceuinot in this looknot in this look

Process at Studio, normal contrast. Every look: the press check.

Props#

PropTypeDefaultDescription
label requiredstringnoneVisible and the bar's name.
valuenumbernone
maxnumber100Default 100.
valueTextstring"{n} %", or "{value} of {max}" for segmentsThe words for the value (default "{n} %", or "{value} of {max}" for segments).
appearance"bar" | "segments"none
indeterminatebooleannoneNo known value: a still hatched track and `indeterminateText`.
indeterminateTextstringnoneDefault "Working…".

Plus 279 React and DOM attributes passed through to the root element (className, ref, aria-*, event handlers and the rest). Generated from ProgressBarProps in packages/overprint-react/src/reading/progress-bar/progress-bar.tsx.

Tokens#

Changelog#

Arrived in 0.9.0.

0.9.024 October 2026

  • MinorreactBreadcrumbs, Pagination (with paginationRange), Count, ProgressBar (bar, segments, indeterminate), Avatar and AvatarGroup, Tick, EmptyState, Kbd, Skeleton and Loader. Read the whole entry