Interactive form wizard with segmented progress bar, form fields, and back/next navigation. Perfect for account registration flows collecting user and company information.
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.
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.
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
npx shadcn add "https://ui.beste.co/r/onboarding8?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
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.
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.
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:
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" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string; variant?: "default" | "secondary" | "outline" } | – | Small badge above the heading |
heading | string | – | Main headline |
description | string | – | Supporting copy below the heading |
steps | FormStep[] | [] | Ordered wizard steps, each with its own JSX content |
currentStep | number | 0 | Seeds 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 |
className | string | – | Extra classes for the outer <section> |
type FormStep = {
id: string;
title: string;
description?: string;
content: React.ReactNode;
};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.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.console.log("Setup completed!"); there is no onFinish/onComplete callback prop, so consumers can't hook into wizard completion without editing the component.bg-primary once index <= currentStep, so the current step's segment is already fully colored, not partially filled.w-full when Back is hidden.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.
onboarding5
Multi-step progress indicator with numbered circles connected by a progress line. Perfect for account setup wizards that show users their completion status.
onboarding11
Desktop wizard with a vertical side navigation menu and content panels for each step. Perfect for comprehensive account setup requiring multiple configuration screens.
onboarding9
Animated step wizard with square numbered indicators and content cards for each step. Perfect for product walkthroughs that guide users through key features.
onboarding10
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.
onboarding6
Vertical timeline layout with step indicators, descriptions, and a connecting progress line. Perfect for workspace setup flows with detailed step explanations.
onboarding29
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.