Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Booking Unavailable Error Block for React

A full-screen page for a time that was just taken: the booked slot as a struck chip, the next free times grouped by day, a Shine Button that follows the choice, and a waitlist switch that opens an email field.

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

Help people rebook in one press with this booking unavailable page for React with Base UI. It's the screen Cedarmoor Physio, a physiotherapy clinic, shows when the time a patient picked was taken while they were choosing: the page's two side rails run its full height and one band crosses the screen between two rules, split in two by a divider with plus marks. At the start, the heading, one sentence and the time that went as a struck Badge chip, and under them a Switch to join the waitlist for it, which opens an email Field and a button. At the end, the next free times grouped by day in one Toggle Group: the weekday of each day is worked out from its ISO date in UTC, never typed. Choosing a time makes the Shine Button say Book Fri 13 Nov, 09:30; pressing it says honestly that the time was held in this page and nothing was booked, and Release puts it back. For any clinic, salon or studio that books by the slot.

FAQ

What does booking do, and what stays in the page?

Nothing is booked. The button waits a moment, then a polite status line says the time was held in this demo with the therapist's name, and Release frees it again. The waitlist is the same: it checks the email, marks the button "On the waitlist" and says that no email will be sent. To make it real, send the chosen slot from book and the email from join to your booking service, and take the free times from it.

Where do the weekdays and dates come from?

From the ISO dates in DAYS and TAKEN, formatted in UTC with Intl.DateTimeFormat, so "Fri 13 Nov" can't disagree with its date and reads the same on the server and in every time zone. Times are typed clock text. In your app, build the days from your booking service and show the clinic's own time zone.

How do the times work with the keyboard?

The times are one single-choice toggle group split into days by headings: Tab reaches it, the arrow keys move from one time to the next across the days, and one time is always chosen, so the button always has something to book. Each time is named with its day ("09:30, Fri 13 Nov") for a screen reader.

Why does opening the waitlist not move anything?

The page is aligned to the top, not the middle, and the email field opens at the foot of its column, so everything above it stays where it was. The switch keeps its place and focus; its label says which time it is for.

Is a booking page an error page?

Here it is the page a visitor lands on when their choice is no longer there: it says what happened and gives the way forward first. In your app, send a conflict status from the booking call when a slot is taken, and keep this page's wording the same whether the slot went a second ago or a day ago.

What changes on a phone?

The heading and the struck time come first, then the times and the button, and the waitlist is last. The two halves stack with a rule between them, and the button is on the first screen.

  • Pro

    Sold Out Size Error

    Plans and checkout

    A full-screen page for a sold-out size: a drawn sweater, a row of five sizes with the sold-out ones struck, a notify field and Shine Button that follow the chosen size, and two similar knits in stock.

  • Pro

    Payment Failed Error

    Plans and checkout

    A full-screen page for a declined card payment: the order, the bank's answer, four reasons that each change the fix, and three ways to pay, with a Shine Button that follows the method.

  • Pro

    Coupon Invalid Error

    Plans and checkout

    A panel for a promo code that no longer works: the failed code with why, the offers that do work for this box ranked by saving, and the box's total recomputed as you choose.

  • 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

    Subscription Required Error

    Plans and checkout

    A full-screen 403 for a feature the plan does not include: the facts, what Pro adds, and an editable message that asks the workspace owners, with a Viewing as demo control that turns the ask into an upgrade with the price worked out.

  • Pro

    A full-height page for a feature that is not on for your workspace yet: three conditions ruled from rail to rail, a rollout meter with the next wave, and a Switch that joins early access and flips the last condition.