Full-height multi-step registration with a numbered progress stepper that advances as the user moves through account, profile, and workspace steps, with back and continue controls. Perfect for guided onboarding sign-up.
A full-height registration card that walks through an array of steps: a numbered progress stepper marks each step complete, active, or upcoming, and the active step renders its title plus a FieldGroup of labeled inputs, with a Back button (from step two onward) and a primary button that reads "Continue" until the final step, where it switches to "Create account".
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/auth33?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/auth33?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/auth33.tsx, plus the button, input, and field shadcn/ui primitives it uses for the step controls and the labeled form inputs.
The installed file exports auth33Demo alongside the block: the exact props behind the preview above. Spread it to get a working sign-up wizard in one line.
import { Auth33, auth33Demo } from "@/components/beste/block/auth33";
export default function Page() {
return <Auth33 {...auth33Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Auth33 } from "@/components/beste/block/auth33";
export default function Page() {
return (
<Auth33
heading="Create your account"
steps={[
{
label: "Account",
title: "Your login details",
fields: [
{ label: "Email", placeholder: "you@example.com", type: "email" },
{ label: "Password", placeholder: "Create a password", type: "password" },
],
},
{
label: "Workspace",
title: "Name your workspace",
fields: [{ label: "Workspace name", placeholder: "acme", type: "text" }],
},
]}
labels={{ back: "Back", next: "Continue", submit: "Create account" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
heading | string | – | Centered page title above the stepper; hidden when omitted |
steps | WizardStep[] | [] | Ordered steps rendered in the stepper and the active card |
labels | { back?: string; next?: string; submit?: string } | {} | Button text; back gates the Back button, submit shows on the last step |
className | string | – | Extra classes for the outer <section> |
type WizardField = {
label: string;
placeholder: string;
type?: string;
};
type WizardStep = {
label: string;
title?: string;
fields: WizardField[];
};useState(0) that is never lifted out or exposed via props, so the parent cannot read or control which step is showing.handleNext and handleBack just move the internal index (clamped with Math.max(0, ...)), and the <form> calls e.preventDefault() on submit, so no field values are collected, validated, or emitted, wiring real submission is left to the integrator.value, onChange, or state, so their contents are lost when the user moves between steps.current > 0 AND labels.back is truthy; omitting labels.back removes it entirely even on later steps.labels.next until current >= steps.length - 1, then labels.submit on the final step; both fall back to undefined (blank) if those labels are unset.current, active when it equals current, and the connector line and number badge recolor accordingly; step labels are hidden below the sm breakpoint (hidden ... sm:inline).steps.length > 0 and activeStep exists; each field's type defaults to "text" when unset.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.
auth46
Full-height step-up authentication screen that re-asks for the password before a sensitive action, showing the signed-in account and a cancel option. Perfect for protecting billing, security, and destructive actions.
auth24
Full-height profile setup step with an avatar uploader, a display name field, and a bio textarea, plus a skip option. Perfect for the post-sign-up onboarding step where users personalize their account.
auth6
Full-height passwordless sign-in screen with a single email field, a send-magic-link button, a helper note, and social login providers below a divider. Perfect for passwordless and email-link authentication flows.
auth26
Full-height plan selection step with a monthly/annual billing toggle and selectable plan cards that update their pricing live, plus a continue button. Perfect for paid sign-up and upgrade flows.
auth43
Full-height waitlist capture with an email field, a join button, a social-proof line, and a sign-in link for existing users. Perfect for pre-launch and early-access landing gates.
auth10
Full-height biometric sign-in with an animated face-scan viewfinder that runs through idle, scanning, and recognized states, plus a continue action and a password fallback. Perfect for Face ID and biometric authentication.