Staaarter

Multi-step Booking Wizard

A four-step booking wizard with a numbered stepper header and an animated horizontal progress bar that fills based on the current step. Step 1 picks a service, step 2 picks a date and time slot, step 3 collects contact details, and step 4 reviews the selections made in the earlier steps before a decorative Confirm booking action. Back/Next buttons move between steps, with Back disabled on step 1 and Next swapping to Confirm on the final step.

By Staaarter Team
Booking
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its button dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/multi-step-booking-wizard.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/booking/booking19.tsx instead.

Usage

The file also exports booking19Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.

import { Booking19, booking19Demo } from "@/components/blocks/booking/booking19";

export default function Page() {
  return <Booking19 {...booking19Demo} />;
}

Props

PropTypeDefaultDescription
headingstring"Schedule your visit"Heading above the stepper.
descriptionstringnoneShort subheading under the heading.
servicesBookingService[]noneSelectable services shown in step 1.
timeSlotsstring[]noneSelectable time slot pills shown in step 2.
classNamestringnoneExtra classes for the outer section element.

Types

interface BookingService {
  id: string;
  name: string;
  duration: string;
  price: string;
}

Behavior notes

  • step, selectedServiceId, selectedDate, and selectedTime are all real useState; the progress bar width and stepper dot states are computed deterministically from the step index (no randomness).
  • The date field is a native <input type="date"> bound to selectedDate; the time slot pills and service cards are real single-select toggles.
  • The contact fields in step 3 are plain uncontrolled inputs since their values aren't needed elsewhere in the block; the review panel in step 4 reads back the real service/date/time state, and the final Confirm booking button is decorative with no real submit.