Skip to content
Site volume
Colourway

Components

Loader

Three shape glyphs hop in turn beside a visible label, for five cycles at most, then hold still.

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

Loader says that something is on its way: a circle, a triangle and a square in the ink hop in turn (900 ms a cycle, at most five cycles, then still) beside a visible label ("Loading"). The label never moves. art takes the 3D kit's block loader in place of the glyphs.

Example#

Look of this example
Loading
Sending
Live render of examples/loader/basic.tsx

Usage#

Use a loader when something is on its way and there is no shape to hold: a search, a render, an upload being processed. Three glyphs hop in turn beside a visible label, for five cycles at most, then stand still.

  • The label never moves and is announced politely (role="status").
  • art takes the 3D kit's BlockLoader in place of the glyphs, for bigger moments.
  • Reduced motion shows the glyphs still.
  • Content with a known shape loads behind a Skeleton instead.

Anatomy#

Loading
Sending
The parts of examples/loader/basic.tsx, numbered:
  1. Glyphsdata-mk-part="glyphs"
  2. Labeldata-mk-part="label"

Volume#

Reading layer: identical at every volume.

  • Quiet

    Loading
    Sending

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

  • Studio

    Loading
    Sending

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

  • Press

    Loading
    Sending

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

  • Rave

    Loading
    Sending

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

Content#

  • Say what is loading: "Rendering the cover", not just "Loading".
  • A joke can go beside the loader at louder volumes; the label stays literal.

Do and don't#

Do

Rendering the cover

Names the wait.

Don't

Hang tight…

Says nothing about what is happening.

A specific label tells people whether to wait or to come back later.

Accessibility#

  • It is a polite role="status" named by its visible label.
  • Reduced motion prints the glyphs still; the label says the same thing either way.
  • The hop ends on its own, so it never runs as an endless loop (D-E3).

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

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

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

Props#

PropTypeDefaultDescription
labelstring"Loading"Visible and announced (default "Loading").
size"md" | "sm"noneGlyph size: `sm` 16 px (inline), `md` 24 px (default).
artReactElement<unknown, string | React.JSXElementConstructor<any>>noneThe 3D kit's block loader (or other art) in place of the three glyphs.

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

Tokens#

System tokens (9)

Its own properties (3)

  • --mk-loader-cycle
  • --mk-loader-cycles
  • --mk-loader-glyph

Scanned from its CSS at build and checked against its registry entry; 2 read but not declared there.

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