Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Split Panel Calendar Grid CTA Block for React

A split call to action beside a week-by-time availability grid on a framed card: pick a free slot and the Shine Button names it.

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 split call to action for booking a demo, for React with Base UI, here for Brindle, a fictional support inbox. On one side sit a status badge, a two-line headline, a short sentence and a three-point checklist. On the other, a card in a hairline frame with + marks on its corners holds an availability grid, five weekdays by four times, built from a SegmentGroup of 20 cells: free slots are outlined, full ones are dimmed and disabled, and the chosen one fills solid with a tick. Under the grid, a summary names the slot and a Shine Button link reads "Book Wed 10:30", changing as you pick. It's built from Badge, Status, Segment Group, Guides and Shine Button with Lucide icons and Tailwind CSS. Made for demo and consultation pages, sales sections and any offer where choosing a time is the conversion.

FAQ

How do I change the days, times and which slots are taken?

Edit DAYS, TIMES and TAKEN at the top of the file. Each slot is a day and a time, and TAKEN lists the ones that are full as Mon-09:00; the grid, the "13 of 20 slots free" count and the first pick (FIRST) are all worked out from them. The grid is five columns by four rows, so keep to five days and four times, or change grid-cols-5 and grid-rows-4 together.

How do the arrow keys work in the grid?

The cells are radio buttons in one group, so the grid is a single tab stop: Tab lands on the chosen slot, and the arrow keys move through the free ones and select as they go. They skip full slots, because disabled cells can't take focus. The cells are in day order, so Down and Right both walk down a day and then on to the next.

How does a screen reader read the grid?

The group is named Available slots, and each cell reads its day and time, such as "Wednesday at 10:30", with ", full" added when it's taken. The weekday and time captions around the grid are decoration, since every cell already says both. The summary under the grid is a polite live region, so picking a slot announces it, and the button's link text spells out the day and the time.

How do I connect it to a real calendar?

Load your open slots instead of the constants, and point the button's href at your booking page with the chosen slot in the query string, such as ?slot=Wed-10:30. The block keeps no data of its own and shows weekday names only, so it never goes out of date. If your slots are in a different time zone from the visitor, say so in the caption above the grid. On Base UI, the button renders its link with render={<a href="…" />} and nativeButton={false}.

How does it fit a phone?

The two columns stack below the lg breakpoint with the copy first. The checklist is shown from sm up, and on a phone the grid's cells are 36px tall, so the headline, the grid and the Shine Button all land within the first screen. Five columns plus the time labels fit down to 320px without scrolling sideways, and the button and the summary wrap onto two lines when the card is narrow.

What moves, and what about reduced motion?

The copy fades and rises in once, the cells fade their colour when you pick one, and the Shine Button sweeps a band of light across itself on hover or focus. It's all CSS, with no animation library, and with reduced motion on everything appears in place and the light fades in instead.

  • Pro

    A split call to action for a browser extension: the pitch and a Shine Button at the start, its popup with working bookmarks in a hairline frame at the end, and a closing band of three ruled benefits.

  • Pro

    A split call to action for a deploy platform: the pitch and a Shine Button at the start, a wide demo player in a hairline frame at the end: a poster drawn from the product over three chapter tabs.

  • Pro

    A split call to action beside a reticle field that fills its half of the block edge to edge: crosshair lines follow the pointer or the arrow keys, with a live coordinate readout.

  • Pro

    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.

  • Pro

    A 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

    Language Chips CTA

    Pickers and toggles

    A split call to action for a product that speaks your users' language: the pitch and a Shine Button beside a framed greeting over a cloud of language chips that switch the greeting and the button's label, each in its own language and direction.