Skip to content

Components · Workflow

OnboardingChecklist

A first-run checklist with done steps, a progress summary, per-step actions, collapse and dismiss.

@rookcom/monarch-react/patternsComponent

Get started

Get started

A few steps to set up your workspace.

  1. Complete your profile, Done

  2. Invite your team, Not done

    Work is easier to share with the people you work with.

  3. Create your first project, Not done

    Start from a template or a blank project.

  4. Choose your notifications, Not done

Usage examples

Complete

Purpose

Guides people through setting up a product: a short list of steps, each with a done state and an optional call to action, and a summary of how far they are.

Use when

  • A new workspace or account has a handful of setup steps that unlock the product.
  • Steps can be done in any order and are completed by doing the thing itself (the product ticks them from its data).
  • People should be able to put the checklist away (collapse) or remove it for good (dismiss).

Avoid when

  • The steps must happen in order inside one flow: use Stepper.
  • There is one thing to do: use a callout or an empty state with an action.

Design principles

  • The product owns the truth: it defines the steps, decides when each is done and persists collapse and dismiss.
  • Done is shown three ways: a filled check marker, muted title, and hidden "Done" text for screen readers.
  • The next step stands out (aria-current="step", accent marker, tinted row) so people know where to go.
  • An action belongs only to a step that is not done; done steps lose their description and action.
  • Progress reuses Progress, and turns success when everything is done, with a completion message.
  • Unlike Stepper, the order is a suggestion, not a sequence the component enforces.

API reference

import { OnboardingChecklist } from '@rookcom/monarch-react/patterns';
ExportKindRenderingRoot class
OnboardingChecklistcomponentclient.mn-onboarding-checklist

steps are { id, title, done, description?, action? }. action is any node, typically a small Button or a link.

Collapse is controlled with collapsed + onCollapsedChange, or uncontrolled with defaultCollapsed; collapsible={false} removes the toggle.

The dismiss button shows only when onDismiss is given; the product hides the checklist and remembers it.

The ref is the root <section>, labelled by the title; other attributes pass through.

Generated from the TypeScript declarations of packages/react/src/components/workflow/onboarding-checklist.

Properties

OnboardingChecklist

A first-run checklist: steps with a done state and an optional call to action, a progress summary, and collapse and dismiss controls. The product defines the steps, decides when each is done and persists collapse and dismiss.

PropTypeDescription
steps requiredreadonly OnboardingStep[]
title requiredReactNodeHeading of the checklist, e.g. "Get started".
childrenReactNode
classNamestring
collapsedbooleanSteps hidden (controlled). The product persists it.
collapsiblebooleanShow a toggle that hides the steps. Default true.
completeContentReactNodeShown when every step is done. Default `messages.complete`.
defaultCollapsedbooleanSteps hidden at first render (uncontrolled).
descriptionReactNodeText under the heading.
headingLevel3 | 4 | 6 | 2 | 5Heading level of the title. Default 2.
idstring
messagesPartial<OnboardingChecklistMessages>Override labels.
onCollapsedChange((collapsed: boolean) => void)
onDismiss(() => void)Called by the dismiss button, which shows only when this is set. The product persists it.

Variants

PropValuesDescription
collapsible'true''false'Show the toggle that hides the steps (default). The title and progress stay visible.
headingLevel'2''3''4''5''6'Heading level of the title, to fit the page outline. Default 2.

States

StateExposed asBehaviour
Step donedata-doneFilled success marker with a check; muted title.
Current stepdata-current, aria-current="step"The first step not done: accent marker and tinted row.
Collapseddata-collapsed, aria-expanded="false"Only the header and progress show.
Completedata-completeEvery step is done: success progress and the completion message (completeContent).

Interaction behaviour

  • The toggle shows and hides the steps; the chevron turns to show the state.
  • Dismiss calls onDismiss; nothing is hidden until the product stops rendering the checklist.
  • Step actions are the product’s own buttons or links and behave as they normally do.
  • When the product marks a step done, its row updates and the next step becomes current.

Keyboard support

KeysAction
TabMoves to the toggle, the dismiss button, then each step’s action.
Enter / SpaceActivates the toggle, dismiss or a step action.

Accessibility

Role
region (section) labelled by the title; an ordered list of steps
Accessible name
The title.
  • The toggle is a button named by the title with aria-expanded and aria-controls.
  • The progress bar is named "Setup progress" and reads "2 of 4 done".
  • Each step title is followed by hidden ", Done" or ", Not done" text; the current step has aria-current="step".
  • The dismiss button is named "Dismiss checklist".
  • Verified with axe in jsdom and in Chromium, Firefox and WebKit on /components/onboarding-checklist.

Responsive behaviour

  • Step actions sit at the end of the row on wider screens and wrap under the text on narrow ones, aligned with the title.
  • The header wraps; the progress bar always takes the full width. Works at 320px.

Theme support

  • Colours are Monarch semantic tokens only, so light, dark and more-contrast themes apply automatically.
  • Done markers use --mn-color-success-solid and --mn-color-success-on-solid; the current step uses --mn-color-accent-strong.
  • Reduced motion removes the toggle transition. Forced colours outline done markers with Highlight.

Do and don't

Do

  • Keep it short: three to six steps that matter for getting value.
  • Tick steps from real data (the thing was done), not from clicking the action.
  • Persist collapse and dismiss per person, and offer a way back (for example in Help).

Don't

  • Do not use it for a strict sequence or a form split into pages: use Stepper.
  • Do not show it to people who have finished setup; hide it once dismissed or complete.
  • Do not put several actions in one step.
  • Stepper: Steps in a fixed order inside one flow.
  • Progress: The progress summary, on its own.
  • EmptyState: A single first action on an empty screen.

Dependencies

KindDepends on
npm packagesreact
Monarch componentsButton, Progress

Testing coverage

  • Steps, done state, progress value text and the current step render; actions are the product’s nodes; axe passes.
  • Done steps hide their description and action.
  • Collapse uncontrolled (click and keyboard) and controlled; collapsible={false} removes the toggle; progress stays visible.
  • Dismiss shows only with onDismiss and calls it.
  • Complete state with success progress and custom content; empty list; heading level; translated messages; server rendering.
CheckCovered
Axe in jsdomYes
Server renderingYes
Browser suitesVisual baselines: /__gallery/onboarding-checklist; Cross-browser axe: /components/onboarding-checklist

Tests: packages/react/src/components/workflow/onboarding-checklist