Home / Blocks / Application / Calendars
8 blocks in this section

Shadcn Calendar Components

Five calendar shapes: month grid, week schedule, a timezone-aware booking picker, a resource timeline and a streak-driven agenda.

How it works

Three steps to working code

Install a block and the files land in your repository. Nothing calls back to us.

  1. terminal

    $ npx shadcn@latest add @shadcnstore/calendar-8

    ✓ Checking registry

    ✓ Installing dependencies

    01

    Run one command

    Every preview above prints its own. The CLI writes the block and the components it needs into your project.

    Installation docs
  2. your project 3 files added

    components/

    ├─ ui/

    ├─ button.tsx

    └─ navigation-menu.tsx

    └─ calendar-8.tsx

    02

    Get real files

    React, TypeScript and Tailwind v4, with no framework imports. Next.js, Vite, Remix and Astro all work.

  3. calendar-8.tsx

    <Menu.Trigger

    - asChild

    + render={<button />}

    />

    03

    Edit it as your own

    Built on Base UI, not Radix, so keyboard and focus behaviour come from the primitive.

Blocks that hold state already carry the use client directive the Next.js App Router needs.

Guide

Calendars, from a month grid to a resource timeline#

Calendar is one word covering several unrelated problems. Picking a date, running a booking flow, scheduling rooms and reading an agenda need different interfaces, and building one component that does all four is how calendars become unusable.

The eight calendar blocks#

  • Calendar 1: a month application with a sidebar, filterable calendars and a day detail sheet.
  • Calendar 2: a week time grid with positioned events and a mobile agenda fallback.
  • Calendar 3: a class booking flow with timezone-aware slots, a waitlist and a directional date-change transition.
  • Calendar 4: a rooms-by-hour resource timeline with overlap lane-splitting and a real now-line.
  • Calendar 5: a grouped agenda list with a derived streak strip, composed filters and sticky day headers.
  • Calendar 6: a front-desk switcher that swaps the day list, with live capacity badges and a join-waitlist action.
  • Calendar 7: a short intake questionnaire that assembles a computed recommended week.
  • Calendar 8: a plain month grid with a selected-day list. No shell, no filters, no dialogs. Free, and the one to reach for when the calendar is part of a page rather than the page.

Month, week or agenda#

A month grid answers what is happening this month and is bad at showing time of day. A week grid answers when exactly and cannot hold more than about seven days. An agenda list answers what is next and works on any screen, which is why Calendar 2 falls back to one on mobile rather than shrinking a time grid nobody can tap.

Overlapping events#

Calendar 4 splits overlapping bookings into lanes so two events at the same hour are both readable, and draws a now-line across the resources. Stacking overlaps on top of each other is the default failure, and it hides exactly the conflicts a scheduling view exists to surface.

Timezones in a booking flow#

Calendar 3 resolves slots in the viewer timezone and says which timezone it is using. This is the part of a booking screen that fails silently: a slot shown in the venue timezone to somebody two hours away produces a confident booking and a missed appointment, with nothing in the interface having looked wrong.

Capacity, waitlists and full slots#

A full slot should say full and offer the waitlist rather than disappearing, because a disappearing slot reads as a bug. Calendar 3 and Calendar 6 both carry live capacity and a working join-waitlist action, and Calendar 6 shows the same day across venues, which is how a front desk actually answers when the next class is.

Keyboard and date entry#

Arrow keys move by day, page keys by month, and the grid keeps a single tab stop so somebody navigating by keyboard is not trapped in forty-two cells. Where a date can be typed, typing it is allowed; a picker that refuses a keyboard is a picker that fights anybody entering a birth date.

Where calendars sit#

Inside an app shell for the scheduling applications, or standing alone for the plain month grid. A booking flow ends in a checkout when the slot is paid for, and the dashboard widgets cover the upcoming-events summary a calendar page is too heavy for.

FAQ

Calendars questions, answered

What people ask before choosing a block from this collection.

Calendar 8 is exactly that: a month grid with a selected-day list, no sidebar, no filters and no dialogs. It is the one to reach for when a calendar is a piece of a page rather than the page itself.
Calendar 2 positions events on a time grid and falls back to an agenda on mobile. Calendar 4 goes further for resource scheduling, splitting overlapping bookings into lanes and drawing a real now-line across the rooms.
Calendar 3 resolves slots in the viewer's timezone, carries a waitlist when a class is full, and animates a date change in the direction it moved so forward and back stay distinguishable. Timezone handling is the part of a booking screen that fails silently, so it is explicit here.
Calendar 1 has a sidebar of filterable calendars and a day detail sheet, so a shared schedule can be narrowed to one team without leaving the month view.
Calendar 8, the plain month grid with a selected-day list, is free. The application, week grid, booking, resource timeline, agenda, front-desk and intake calendars are Pro under the pricing licence.

Documentation

The components behind these blocks

How to install, customise and combine the shadcn/ui components this collection is built from.

Free & Premium Templates

Launch Faster with Complete Templates

Love these blocks? Get our free dashboard and landing page templates with 30+ pre-built pages and all the components you need. Premium templates with advanced features launching soon at $69.

Free Templates Now
30+ Pages Included
Premium Coming Soon