Skip to main content
Version: latest
Works everywhere

Stepper works in both server and client environments. Always use the standard import (e.g. @prokodo/ui/stepper) — the library detects the runtime automatically.

Stepper

Stepper renders a multi-step progress indicator suitable for wizards and multi-page forms. Steps can be navigated linearly (requiring completion validation) or freely.

Live demo →

Overview

import { Stepper } from "@prokodo/ui/stepper"
;<Stepper
activeStep={step}
steps={[
{ label: "Personal info" },
{ label: "Address" },
{ label: "Confirm" },
]}
/>

Import

import { Stepper } from "@prokodo/ui/stepper"

CSS:

import "@prokodo/ui/stepper.css"

Props

PropTypeDefaultRequiredDescription
stepsStep[]Step definitions.
initialStepnumber0Index of the initially active step (0-based).
translationsStepperTranslationsOverride default label strings.
colorVariantsAccent color variant.
onChange(step: number) => voidCalled when the active step changes.
onFocus() => voidCalled when the stepper receives focus.
onBlur() => voidCalled when the stepper loses focus.
refStepperRefRef to imperative handle for programmatic control.
classNamestringCSS class on root element.

See src/components/stepper/Stepper.model.ts for the full StepperProps type.


Design Tokens

Customise via CSS custom properties on :root or a scoped ancestor element.

TokenDefaultDescription
--pk-stepper-icon-mask-bgvar(--pk-color-surface)Mask isolation colour for icon border gradient
--pk-stepper-label-colorvar(--pk-color-muted)Step label text colour (inactive)
--pk-stepper-label-color-activevar(--pk-color-fg)Step label text colour (active)
--pk-stepper-shadowvar(--pk-shadow-sm)Active icon container box-shadow
--pk-stepper-shadow-insetvar(--elevation-1--inset)Active icon container inset shadow
--pk-stepper-icon-mbvar(--pk-space-md)Bottom margin between icon and label

AIC Note

Use the standard import path in application code:

import { Stepper } from "@prokodo/ui/stepper"

No separate /client or /lazy import selection is required in consumer code.

AIC components also support a priority flag for critical above-the-fold elements. This is most visible on Image (native preloading via <link rel="preload"> for above-the-fold content).


WCAG 2.2 Status

CriterionNameStatusNote
1.3.1Info and Relationships (A)✅ FulfilledSemantic structure (headings, lists, labels, landmarks) must be conveyed programmatically via HTML or ARIA.
2.1.1Keyboard (A)✅ FulfilledAll functionality must be operable via keyboard alone, without requiring specific timing.
2.4.3Focus Order (A)🔍 Manual reviewThe keyboard focus sequence must preserve meaning and operability in the complete page integration context.
2.4.7Focus Visible (AA)🔍 Manual reviewA visible keyboard focus indicator must be present on every interactive element. Verify against the applied product theme.
4.1.2Name, Role, Value (A)✅ FulfilledName, role, and state of all interactive UI components must be programmatically determinable via native HTML semantics or ARIA.
4.1.3Status Messages (AA)✅ FulfilledStatus messages (loading, success, error, progress) must reach assistive technologies without a focus change (aria-live or role='status').

Test coverage: 3 jest-axe assertion(s) across 4 test file(s) · 6 ARIA attribute occurrence(s) in source scan. Criteria marked 🔍 require manual verification in the final product integration and theme context.

Storybook

👉 Open Stepper in Storybook


Source

src/components/stepper/Stepper.model.ts