Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Conference ticket steppers Contact Block for React

A conference registration with a stepper for each ticket tier, a running total and an eight-ticket cap.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

A registration for Cairnfield Conf, a conference on trail building and land care, for React with Base UI. Three tiers sit in a hairline list, each with a Number Input: General at $180, Workshop pass at $340 and Student at $90. A line under the list shows how many of the eight tickets this order holds, and the total of the prices. The steppers' buttons are 44 pixels. Name, email and a meal Select sit beside the list on a wide screen and under it on a phone. The steppers and those fields belong to one form, so a single submit checks them all. The form checks itself, then a confirmation repeats the tiers that have a ticket, the total and the meal. The date in the header is 12 to 14 May 2027. The page's rails and top rule come from the Guides spine. It's built from Number Input, Item, Select, Field, Input, Guides, Shine Button and Button, with a CSS transition on the header and your theme's tokens for every colour. For conferences and any registration that sells more than one ticket at a time.

FAQ

How does the eight-ticket cap work?

The order holds eight tickets across the three tiers. Each stepper's maximum is eight minus the other two tiers, so one tier can take the whole order and the others stop at zero. Typing a higher number snaps back to the room that's left. The line under the list is that sum, written as "N of 8 tickets". The total is each tier's count times its price.

Where does the form send its data?

Nowhere yet. The submit handler waits 800 milliseconds, as a stand-in for a request, then shows the confirmation. Replace that timer in submit with your own call. details holds the three counts, the name, the email and the meal. The confirmation lists only the tiers with at least one ticket, then the total from those same prices. It doesn't invent a confirmation number.

How does the form check what's typed?

The form has noValidate. On submit it requires at least one ticket and rejects a sum over eight, then a name, an email address with an @ and a domain, and a meal. The meal starts on "No preference". A missing ticket count moves focus to the General stepper. Each other problem moves focus to its own field.

How is the meal select labelled?

The label above it names the select's button for screen readers, and focus can land on that button when the meal is missing. The select's trigger takes the id, and the label points to it with htmlFor.

What does the confirmation say, and who hears it?

It thanks the visitor by first name and repeats the tickets they hold, the total and the meal, plus the email they typed. It's a status region that takes focus when it appears. The ticket list stays visible and stops accepting changes. "Register someone else" clears the counts back to zero, returns the meal to "No preference", and puts focus on the details heading.

Are the email address and phone number real?

No. hello@cairnfield.example uses the .example domain, which is reserved for examples, and +1 (415) 555-0110 is in the 555-0100 to 555-0199 range set aside for fiction. Replace EMAIL, PHONE, PHONE_HREF, HOURS and WHEN. The date is fixed in the file. It is not the visitor's clock. Prices and the phone number keep their order in a right-to-left layout.

  • Pro

    A restaurant reservation in a card in card: a party size stepper, a date picker that closes Mondays and past days, five sittings as choices and a form that checks itself and confirms in place.

  • Pro

    Stylist Booking Contact

    Visits and services

    A salon booking that starts with the person: three stylists in hairline cells, each with their next three openings as chips, a live appointment line, and a form that checks itself and confirms in place.

  • Pro

    An event-catering request for a caterer: a guest-count slider drawn as a ruler beside the cost per head and the total, then a three-course menu, dietary needs and a short form on ruled bands.

  • Pro

    A date enquiry for a wedding planner that shows the calendar first: a season band, an inline calendar with booked and too-soon days crossed out, guests, a venue style and contact details.

  • Pro

    A scheduling split: a host panel at the start; a month calendar that closes weekends and past days, the open times of the chosen day and a name and email at the end, with Confirm unavailable until a day and time are chosen.

  • Pro

    A talk-to-sales split for a scheduling platform: what happens next as three numbered steps and a band of contact details beside a form that checks itself, shows each problem under its field and confirms in place.