Stepper
Multi-step progress indicator for signup flows, checkouts, onboarding wizards, multi-part forms. Horizontal (default) for compact flows, vertical when each step needs a description. Three states per step: --complete, --active, default (upcoming). Optional --error state for steps that failed validation.
a11y (built in): the stepper is an ordered list — <ol class="lb-stepper"> with aria-label — so step position and total come from the markup, and the current step carries aria-current="step". Glyph indicator bubbles — the check and x marks — are aria-hidden and the connector lines are ::after pseudo-elements, so completed/error state is announced by a .lb-visually-hidden state span after each step label — "(completed)", "(has an error)" — the pattern every demo on this page ships; numeric indicators stay plain text beside the step label. Clickable steps are real <button class="lb-stepper__trigger"> elements with their own aria-label and native disabled for steps that aren't reachable yet; the focus ring lands on the indicator.
Usage: <ol class="lb-stepper"> (horizontal default, add --vertical for stacked). Each <li class="lb-stepper__step"> holds a .lb-stepper__indicator (number or check SVG) and a .lb-stepper__label. Wrap the step in a .lb-stepper__trigger button if steps are clickable (e.g. letting users revisit completed steps).
Horizontal — 4 steps
Account setup flow. Two complete, one active, one upcoming.
- Account (completed)
- Organization (completed)
- 3 Plan
- 4 Invite
Horizontal — 3 steps
Checkout flow, first step active.
- 1 Shipping
- 2 Payment
- 3 Review
Vertical — with descriptions
Use when each step benefits from explanation. Label sits next to the indicator; optional description on a second line.
-
Create account
Signed up with work email on April 22.
-
Connect design tool
Figma plugin authorised and synced.
-
3
Import your first tokens
Export `source-tokens.json` from the letbe plugin and upload it here to see your brand applied across every component.
-
4
Invite your team
Share the workspace with designers and engineers.
-
5
Deploy
Publish to npm or host the gallery on your CDN.
Error state
Signal that a step failed validation — e.g. form submission came back with errors from the server.
- Basics (completed)
- Payment (has an error)
- 3 Confirm
Clickable steps
Wrap a step in a <button class="lb-stepper__trigger"> to let users jump back to a previous step. Focus ring + hover halo appear. Future upcoming steps should remain disabled to prevent skipping.
Small — dense contexts
Smaller indicators for inline / compact placements (inside a toolbar, sidebar widget).
- Profile (completed)
- 2 Team
- 3 Done