Skip to content

Stepper

Introduction

The Stepper component provides a flexible, accessible, and highly customizable interface for multi-step processes such as forms, wizards, onboarding flows, and checkout experiences. It supports linear and non-linear navigation, horizontal and vertical orientations, multiple visual variants, step status indicators, navigation controls, and both controlled and uncontrolled usage. Designed for complex workflows, it adapts to a wide range of use cases in dashboards, e-commerce, project setup, and more.

Import

ts
import { Stepper } from '@odyssee/components';

LiveCodeEditor examples

Basic Stepper

Code Éditable
Résultat

Modes: Linear & Non-Linear

Code Éditable
Résultat

Orientations

Code Éditable
Résultat

Variants

Code Éditable
Résultat

With Navigation Controls

Code Éditable
Résultat

Alignment

Code Éditable
Résultat

Use Case: Multi-Step Registration Form

Code Éditable
Résultat

Props

PropTypeDefaultDescription
stepsStepper.StepItemData[]Array of step data (see below for structure).
currentStepnumber | Signal<number>The current step (1-indexed).
mode"linear" | "non-linear""linear"Navigation mode: sequential or free navigation.
orientation"horizontal" | "vertical""horizontal"Stepper orientation.
variant"default" | "white" | "solid""default"Visual style of the stepper.
alignment"start" | "center" | "end""start"Alignment of the stepper.
showControlsbooleanfalseShows navigation controls (Back, Next, Finish, etc.).
backTextstring"Back"Text for the back button.
nextTextstring"Next"Text for the next button.
finishTextstring"Finish"Text for the finish button.
resetTextstring"Reset"Text for the reset button.
skipTextstring"Skip"Text for the skip button.
completeStepTextstringText for the complete step button.
onStepChange(step: number) => voidCallback fired when the step changes.
onComplete() => voidCallback fired when the stepper is completed.
onSkip(step: number) => voidCallback fired when a step is skipped.
onReset() => voidCallback fired when the stepper is reset.
onBack() => voidCallback fired when the back button is pressed.
onNext() => voidCallback fired when the next button is pressed.
childrenPulse.JSX.Element | Pulse.JSX.Element[]Custom children (alternative to steps array).
classNamestringAdditional CSS classes for the root element.
idstringauto-generatedID for the stepper component.
styleobjectInline styles for the root element.
...restBaseComponentPropsAny other base props supported by Odyssee components.

Stepper.StepItemData

PropTypeDescription
indexnumberStep index (1-based).
labelstringStep label.
descriptionstringOptional description for the step.
iconPulse.JSX.ElementOptional icon for the step.
avatarstringOptional avatar image URL for the step.
contentPulse.JSX.Element | () => Pulse.JSX.ElementStep content.
isOptionalbooleanMarks the step as optional.
isCompletedbooleanMarks the step as completed.
hasErrorbooleanMarks the step as having an error.

Implementation notes

  • The component supports both controlled and uncontrolled usage via Pulse signals.
  • Linear mode enforces sequential navigation; non-linear allows free navigation.
  • Supports horizontal and vertical layouts, with alignment options.
  • Step status is visually indicated (pending, active, completed, error, processed).
  • Navigation controls (Back, Next, Finish, etc.) are built-in and customizable.
  • Step content can be static or rendered via a function.
  • Designed for both light and dark themes.
  • All steps and interactions are accessible and keyboard-navigable.

Accessibility

  • Uses ARIA roles (list, listitem, tabpanel) for screen readers.
  • Keyboard navigation is supported (Tab, Arrow keys, Enter/Space for controls).
  • Focus and active states are clearly styled.
  • Disabled steps are not focusable or clickable.
  • Navigation controls use accessible buttons with proper labels.

Best practices

  • Use controlled mode (signals + callbacks) for full synchronization with your app state.
  • Prefer linear mode for processes that require sequential completion.
  • Use vertical orientation for sidebar or wizard layouts.
  • Provide clear labels and descriptions for each step.
  • Use icons or avatars to visually distinguish steps when appropriate.
  • Ensure all step content is concise and accessible.
  • Customize navigation controls to match your workflow.

Released under the MIT License.