Multi-Step Form Wizard

Setup Wizard

Create your account

Let's get you set up in just a few steps.

Personal Info1 of 3

Tell us about yourself

About this block

Multi-Step Form WizardPRO

Interactive form wizard with segmented progress bar, form fields, and back/next navigation. Perfect for account registration flows collecting user and company information.

Onboarding8: Multi-Step Form Wizard

Card wizard with a segmented progress bar and real Back/Next/Finish navigation driven by internal useState. Each step's content is caller-supplied JSX; the shipped demo fills it with shadcn Input, Select, and Checkbox fields for a personal-info, company-details, and preferences flow.

Upgrade to Pro

Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.

Upgrade Now

Installation

Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/onboarding8?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/onboarding8?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/onboarding8.tsx and the badge and button shadcn/ui primitives it depends on.

Quick start

The installed file exports onboarding8Demo alongside the block: the exact props behind the preview above. Spread it to get a working three-step wizard in one line.

tsx
import { Onboarding8, onboarding8Demo } from "@/components/beste/block/onboarding8";

export default function OnboardingPage() {
  return <Onboarding8 {...onboarding8Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Onboarding8 } from "@/components/beste/block/onboarding8";
import { Input } from "@/components/ui/input";

export default function OnboardingPage() {
  return (
    <Onboarding8
      badge={{ label: "Setup Wizard", variant: "secondary" }}
      heading="Create your account"
      description="Let's get you set up in just a few steps."
      steps={[
        {
          id: "1",
          title: "Personal Info",
          description: "Tell us about yourself",
          content: <Input type="email" placeholder="john@example.com" />,
        },
        {
          id: "2",
          title: "Preferences",
          description: "Customize your experience",
          content: <Input type="text" placeholder="Team name" />,
        },
      ]}
      labels={{ next: "Continue", back: "Back", finish: "Complete Setup", stepOf: "of" }}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string; variant?: "default" | "secondary" | "outline" }Small badge above the heading
headingstringMain headline
descriptionstringSupporting copy below the heading
stepsFormStep[][]Ordered wizard steps, each with its own JSX content
currentStepnumber0Seeds the initial step only; see Behavior notes
labels{ next?: string; back?: string; finish?: string; stepOf?: string }{}Navigation button labels and the "X Y" separator word
classNamestringExtra classes for the outer <section>
ts
type FormStep = {
  id: string;
  title: string;
  description?: string;
  content: React.ReactNode;
};

Behavior notes

  • currentStep only seeds useState(initialStep) at mount (destructured as currentStep: initialStep = 0); after that, navigation runs entirely through the internal handleNext/handleBack handlers, so changing the currentStep prop later does not move the wizard.
  • The three demo steps render real shadcn Input, Select, and Checkbox elements, but none of them are wired to state or an onChange handler: they are presentational placeholders inside step.content, and nothing the user types or selects is ever read back by the component. Note also that .meta.ts's registryDependencies only lists badge and button, not select/checkbox/input, even though the demo content renders all three.
  • Clicking "Finish" on the last step only calls console.log("Setup completed!"); there is no onFinish/onComplete callback prop, so consumers can't hook into wizard completion without editing the component.
  • The step indicator is a row of equal-width segments (one per step) rather than numbered circles; a segment turns bg-primary once index <= currentStep, so the current step's segment is already fully colored, not partially filled.
  • The Back button is omitted entirely (not shown disabled) on the first step, and the Next/Finish button expands to w-full when Back is hidden.
  • If steps is empty the component returns null rather than rendering an empty card.

Wiring the form up

This block ships the form markup only; state, validation, and submit are yours to add. Our guide wires the shadcn Field primitives to React Hook Form, TanStack Form, and Formisch on one field system.

More Onboarding blocks

View all Onboarding
PRO

onboarding11

Side Navigation Wizard

Desktop wizard with a vertical side navigation menu and content panels for each step. Perfect for comprehensive account setup requiring multiple configuration screens.

PRO

onboarding5

Horizontal Steps with Progress Line

Multi-step progress indicator with numbered circles connected by a progress line. Perfect for account setup wizards that show users their completion status.

FREE

onboarding9

Step Cards with Numbered Indicators

Animated step wizard with square numbered indicators and content cards for each step. Perfect for product walkthroughs that guide users through key features.

PRO

onboarding10

Accordion Steps with Expandable Actions

Interactive accordion layout where each step expands to reveal detailed instructions and action buttons. Perfect for setup guides that let users complete tasks at their own pace.

PRO

onboarding29

Company Info Form

Onboarding screen for collecting company information including name, team size selector chips, and industry dropdown. Perfect for B2B SaaS apps that need organizational context during setup.

PRO

onboarding6

Vertical Timeline Steps

Vertical timeline layout with step indicators, descriptions, and a connecting progress line. Perfect for workspace setup flows with detailed step explanations.