Step List
A step list is an ordered list of step items showing progress through a multi-step process. It uses a semantic <ol> element so screen readers announce the count and order of steps.
Use it for wizards, checkout flows, onboarding tours, or any sequence of stages where the user can see their position relative to the whole.
Composition
Step List is the parent of Step List Items in the *List/*ListItem pattern.
<StepList label="Checkout" current={1}>
<StepListItem status="finished">Cart</StepListItem>
<StepListItem status="in-progress" current>Address</StepListItem>
<StepListItem status="waiting">Payment</StepListItem>
</StepList>
Implementation Notes
- Renders a semantic
<ol class="step-list">element aria-labelis set when the optionallabelprop is provideddata-currentis set when the optionalcurrentprop is provided- Children are typically
step-list-itemcomponents - The
<ol>provides list semantics; no extra ARIA role required
Props
label: string (optional) -- aria-labelcurrent: number (optional) -- 0-based index of the current step (data-current hook)children: slot -- step-list-item children...restProps: any additional HTML attributes
Usage
<StepList label="Onboarding" current={2}>
<StepListItem status="finished">Sign up</StepListItem>
<StepListItem status="finished">Verify email</StepListItem>
<StepListItem status="in-progress" current>Set preferences</StepListItem>
<StepListItem status="waiting">Done</StepListItem>
</StepList>
Keyboard Interactions
- None at this level — keyboard behavior lives on any interactive children.
ARIA
- The
<ol>element provides list semantics aria-labelprovides the accessible name whenlabelis setdata-currentis a CSS hook; the active item should also receivearia-current="step"via StepListItem
When to Use
- Use to show progress through a sequence of stages (checkout, wizard, onboarding).
- Use when users benefit from seeing where they are in the flow.
When Not to Use
- Do not use for arbitrary unordered content — use a regular list.
- Do not use for navigation menus — use a navigation list or breadcrumb.
Headless
Renders an <ol> with no styling. The orientation, connector lines, status colors, and visual indicators are entirely the consumer's responsibility.
Styles
Consumer CSS targets the step-list class. Use data-current to drive position-based styling. Provide horizontal or vertical orientation as needed.
Testing
- Verify the component renders an
<ol>element with classstep-list - Verify
aria-labelis set whenlabelis provided - Verify
data-currentreflects thecurrentprop when provided - Verify children render in document order
Advice
- Designers: Decide whether to show the user's position via
data-currentstyling or a separate visual indicator. Keep step labels short. - Developers: Pass the 0-based index via the
currentprop so consumer CSS can target the active step. Use StepListItemcurrentto applyaria-current="step".
Related components
step-list-item— one step in a step list with status of waiting, in progress, finished, or error
References
- WAI-ARIA Group Role: https://www.w3.org/TR/wai-aria-1.2/#group
- Ant Design Steps: https://ant.design/components/steps