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.
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.jsonPrefer 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
| Prop | Type | Default | Description |
|---|---|---|---|
| heading | string | "Schedule your visit" | Heading above the stepper. |
| description | string | none | Short subheading under the heading. |
| services | BookingService[] | none | Selectable services shown in step 1. |
| timeSlots | string[] | none | Selectable time slot pills shown in step 2. |
| className | string | none | Extra 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.
More Booking Blocks
View all →date-time-picker
Date & Time Picker
Split-panel scheduler: a real monthly calendar on the left, morning/afternoon time slots on the right, and a live booking summary footer.
reservation-summary
Reservation Summary
A static booking confirmation card with service, date/time, provider avatar, price breakdown, promo code field, and cancellation policy.
appointment-list
Appointment List
Upcoming and past appointments grouped by date, with provider avatar, status badge, and reschedule/cancel actions.
service-selector
Service Selector
Category-tabbed grid of bookable services with icon, description, duration, and price.
provider-picker
Provider Picker
A selectable grid of staff/provider cards with rating, reviews, availability, and an Any Provider fallback.
restaurant-reservation
Restaurant Reservation
Table reservation form with a guest stepper, date/time inputs, seating pills, and a live summary panel.