Add this component

npx zentauri-ui add wizard

Accessibility notes

Keyboard accessible by default with semantic markup, visible focus treatment, and tokenized states. Add descriptive labels for icon-only or decorative usage.

Dependency notes

Check Installation for shared peers. This component keeps styling in Tailwind classes and the --zui-* token contract.

Form

Wizard multi-step forms

Wizard is a compound component for building multi-step workflows with headers, progress indicators, navigation controls, sidebars, and footers — all declaratively composed.

Step 1 of 0

Examples

The Wizard component provides a multi-step workflow with compound sub-components for headers, progress indicators, navigation, sidebars, and footers.


Basic wizard

A simple multi-step form with header, dots progress, and navigation.

Step 1 of 0

With sidebar

Display all steps in a sidebar with clickable navigation.

Step 1 of 0

Custom footer

Wrap the navigation in a custom footer layout.

Wizard API

Generated from the package prop types and variant definitions.

Wizard

WizardProps

Variants

PropTypeDefault
appearance
aquabluecardcrimsoncyandefaultelectricemeraldforestghostgradient-bluegradient-green+32
default
size
lgmdsm
md

Behavior

PropTypeDefault
defaultStepnumber | undefinednone
linearboolean | undefinednone
onCancel(() => void) | undefinednone
onFinish(() => void) | undefinednone
onReset(() => void) | undefinednone
onStepChange((step: number) => void) | undefinednone
onStepComplete((stepId: string) => void) | undefinednone
persistboolean | undefinednone
storageKeystring | undefinednone

Content

PropTypeDefault
childrenReactNodenone
Inherited HTML props
PropTypeDefault
classNamestring | undefinednone

WizardContent

WizardContentProps

Inherited HTML props
PropTypeDefault
childrenReactNodenone
classNamestring | undefinednone
idstring | undefinednone
onClickMouseEventHandler<HTMLDivElement> | undefinednone
styleCSSProperties | undefinednone
titlestring | undefinednone

WizardFooter

WizardFooterProps

Inherited HTML props
PropTypeDefault
childrenReactNodenone
classNamestring | undefinednone
idstring | undefinednone
onClickMouseEventHandler<HTMLDivElement> | undefinednone
styleCSSProperties | undefinednone
titlestring | undefinednone

WizardHeader

WizardHeaderProps

Variants

PropTypeDefault
size
lgmdsm
md
Inherited HTML props
PropTypeDefault
childrenReactNodenone
classNamestring | undefinednone
idstring | undefinednone
onClickMouseEventHandler<HTMLDivElement> | undefinednone
styleCSSProperties | undefinednone
titlestring | undefinednone

WizardNavigation

WizardNavigationProps

Variants

PropTypeDefault
size
lgmdsm
md

Behavior

PropTypeDefault
backLabelReactNodenone
cancelLabelReactNodenone
finishLabelReactNodenone
nextLabelReactNodenone
showCancelboolean | undefinednone

Content

PropTypeDefault
childrenReactNodenone
Inherited HTML props
PropTypeDefault
classNamestring | undefinednone

WizardProgress

WizardProgressProps

Behavior

PropTypeDefault
variantWizardProgressVariant | undefinednone
Inherited HTML props
PropTypeDefault
classNamestring | undefinednone

WizardSidebar

WizardSidebarProps

Inherited HTML props
PropTypeDefault
classNamestring | undefinednone

WizardStep

WizardStepProps

Behavior

PropTypeDefault
descriptionstring | undefinednone
disabledboolean | undefinednone
hiddenboolean | undefinednone
iconReactNodenone
optionalboolean | undefinednone
title*stringnone

Content

PropTypeDefault
childrenReactNodenone
Inherited HTML props
PropTypeDefault
id*stringnone

WizardAnimated

WizardAnimatedProps

animated

Behavior

PropTypeDefault
appearance'default' | 'outline' | 'ghost' | 'card' | 'separated' | 'blue' | 'cyan' | 'green' | 'lime' | 'mint' | 'ocean' | 'sapphire' | 'lavender' | 'ruby' | 'red' | 'slate' | 'zinc' | 'stone' | 'royal' | 'electric' | 'forest' | 'sunset' | 'magenta' | 'crimson' | 'aqua' | 'plum' | 'sky' | 'rose' | 'purple' | 'pink' | 'orange' | 'yellow' | 'teal' | 'indigo' | 'emerald' | 'gradient-blue' | 'gradient-green' | 'gradient-red' | 'gradient-yellow' | 'gradient-purple' | 'gradient-teal' | 'gradient-indigo' | 'gradient-pink' | 'gradient-orange' | null | undefinednone
defaultStepnumber | undefinednone
linearboolean | undefinednone
onCancel(() => void) | undefinednone
onFinish(() => void) | undefinednone
onReset(() => void) | undefinednone
onStepChange((step: number) => void) | undefinednone
onStepComplete((stepId: string) => void) | undefinednone
persistboolean | undefinednone
size'md' | 'sm' | 'lg' | null | undefinednone
storageKeystring | undefinednone

Content

PropTypeDefault
childrenReactNodenone
Inherited HTML props
PropTypeDefault
classNamestring | undefinednone

WizardContentAnimated

WizardContentAnimatedProps

animated

Behavior

PropTypeDefault
animationWizardAnimation | undefinednone
Inherited HTML props
PropTypeDefault
childrenReactNodenone
classNamestring | undefinednone
idstring | undefinednone
onClickMouseEventHandler<HTMLDivElement> | undefinednone
styleCSSProperties | undefinednone
titlestring | undefinednone

Overview

Wizard is a compound component that provides a complete multi-step workflow solution without boilerplate. Compose WizardStep children inside a Wizard parent, then add optional sub-components like WizardHeader for step indication, WizardProgress for visual progress (bar, dots, or numbers), WizardNavigation for built-in back/next/finish buttons, WizardSidebar for a step list, and WizardFooter for custom footer layouts.

Common use cases

  • Checkout and payment flows.
  • Multi-page registration and signup forms.
  • Onboarding wizards with sidebar navigation.
  • Survey and questionnaire interfaces.

FAQ

Can I control the current step from outside?

The Wizard is uncontrolled by default. Use the useWizard hook inside the Wizard to access currentStep, next, previous, goTo, reset, and other controls. For fully controlled state, the wizard accepts defaultStep and onStepChange.

How do I skip certain steps conditionally?

Set the hidden prop on Wizard.Step to conditionally hide steps. Hidden steps are automatically excluded from navigation and progress calculations.

Can I persist the wizard state across page reloads?

Yes. Set persist and storageKey on the Wizard component to save the current step and completed steps to localStorage.

How do I add animations between steps?

Import from the animated entry: @zentauri-ui/zentauri-components/ui/wizard/animated. Use WizardContentAnimated with the animation prop (slide, fade, scale, flip).