shadcn.io is not affiliated with official shadcn/ui
Split Calendar Booking Hero Block for React
A reverse split hero for a scheduling tool: a working booking page in a hairline frame with plus marks on its corners (step through weeks, pick a day and a time) beside a headline, a Shine Button and three ticks.
Installation
Overview
A reverse split hero with a working booking page beside the copy, for React with Base UI. The section sits on the page's drafting lines: two solid rails at the edges of the page column that continue into the blocks above and below, and a rule along its top edge that runs to the page's edges, with a plus mark on each crossing. Every line is the theme's border colour, so it follows any preset. On the start side a booking page for Openhour, a scheduling tool, sits in a hairline frame with plus marks on its corners, over a faint glow: it shows next week's working days with their dates, arrows to step up to four weeks ahead, a grid of start times and a Book this slot link that names the chosen day and time. The days and the times are two SegmentGroups, so they work with a mouse, a finger or the arrow keys, the chosen ones are filled with the foreground colour, and the dates come from the visitor's own calendar, so the page never shows a week that has passed. On the other side an announcement pill links to round-robin team links, then a headline, a subtitle, a primary ShineButton and an outline Button, both links, and three ticks. Below the lg breakpoint the text comes first. Made for scheduling tools, booking links, sales demo pages and meeting automation products.
FAQ
How do I change the days and the times on offer?
Edit WEEKDAYS and TIMES at the top of the file. Each weekday has a value, a short name for the strip and a long one for screen readers; drop Friday, say, and the strip shows four days. WEEKS sets how far ahead guests can book, counting next week, and the day and time states start on Wednesday at 10:00 AM. Keep a multiple of three times, so the three-column grid ends on a full row (two columns on the narrowest phones).
Where do the dates come from?
From the visitor's own clock, in the browser: the strip always starts on the Monday after today, and the arrows move a week at a time from there. The server can't know the visitor's date or time zone, so it renders the weekdays with a dash for each date and Next week as the heading; the real dates fill in as soon as the page runs, in the same places, so nothing moves.
How do I show my real availability?
Load the free times for the week being shown from your scheduling backend, keyed by the week's dates, and pass them in place of TIMES; refetch when the arrows change the week. A day with no free times can be left out of WEEKDAYS, or shown with its item disabled. Point the Book this slot link at your booking flow with the chosen date and time in its address, and keep the guest's time zone in the request.
How are the frame and the reverse split built?
The page column has Guides bleed marks="top" rules="top": two side rails and one top rule with a plus on each crossing. The frame is Guides extend="sm" marks="corners" on the box around the booking page, so its lines overshoot the corners a little. The text comes first in the source and the booking page takes the first column on wide screens with lg:col-start-1 lg:row-start-1, so reading order and the tab order are the same everywhere. Below lg the booking page sits under a ruled line.
Can it be used with a keyboard?
Yes. Each SegmentGroup is a radio group: Tab moves into it, landing on the chosen day or time, the arrow keys move the choice, and Tab moves on. The week arrows are buttons, and the previous one is disabled on next week, the first that can be booked. A visible ring sits outside the chosen day or time when it has keyboard focus.
What do screen readers hear?
The booking page is a figure named Booking page. The days are a radio group named Day, each read with its full date (Wednesday, October 21) rather than a lone number, and the times a group named Start time, in your time zone. Changing the week announces the new range once, through a polite live region, and the booking link reads its full slot, Book this slot, Wednesday, October 21 at 10:00 AM. The window's title bar is hidden, and the headline is the block's one h1.
How does the hero fit on a phone?
The two columns stack below the lg breakpoint, with the booking page under the copy. The five days keep one row of 32px circles down to 320px, the times stay in two columns below 380px and three above, and the summary and the Book this slot link wrap onto two lines when they don't fit side by side. The headline steps down from text-5xl to text-4xl, and the Shine Button is on the first screen.
Related
- Pro
Centered Demo Schedule Hero
Interactive demosA showcase centered hero for a demo booking: a headline, then a scheduler in a hairline frame with a split divider between day and time, and one Shine Button to book the slot.
- Pro
Split Feature Flags Hero
Product windowsA split hero for a feature-flag service: the headline, a Shine Button and three ticks beside a narrow flags dashboard in a hairline frame, with environment tabs, rollout meters and a working switch on every flag.
- Pro
Split API Playground Hero
Code and terminalA showcase hero for a payments API: a headline, a Shine Button, a second action and three ticks, then a wide playground under its own rule: a POST request beside the 200 response, each JSON body writing itself out.
- Pro
Split Signup Form Hero
Signup and waitlistA split hero with a sign-up form on the page: copy and ticks at the start, and a card in card form at the end with a work email, a password and a Shine Button that shows a spinner, then a confirmation.
- Pro
Split Layout Form Builder Hero
Product windowsA reverse split hero for a form builder: a builder window with a palette and a canvas of fields in a hairline frame with + marks, then a divider, the headline, three checks and a Shine Button.
- Pro
Split Layout Before After Slider Hero
Interactive demosA split hero for a site speed tool: a headline, a Shine Button and a second action beside a speed report that fills its cell edge to edge, before on one side of a handle and after on the other.