Skip to content
ghostui

Preview

A product team reviews onboarding, synthesizes research, protects focus time, and plans a release across the next three days. Open an event for its organizer, attendees, location, notes, and meeting link. Accept or dismiss the suggested focus block to see caller-owned AI scheduling state change.

Wed, Oct 7 – Fri, Oct 9

Asia/Jakarta
Wed, Oct 7
All day
Thu, Oct 8
All day
Fri, Oct 9
All day

Design guidance

Use Calendar for dated events that need more than date selection. Choose a view that matches the task: agenda for a short list, day or three-day for scheduling, week for planning, month for date context, or schedule to compare resources. Keep time zones explicit. Timed values need an ISO offset; all-day end dates are exclusive. Give events stable IDs and keep persistence, invitation policy, and AI decisions in the caller.

The React view is still React. Its date, interval, validation, and lane helpers are plain TypeScript and can be consumed from the calendar-core entry without mounting the UI.

Installation

Install

Calendar composes Dialog, Avatar, Button, ScrollArea, EmptyState, Link, and Separator. The registry item includes those dependencies.

Load the shared foundation and Button styles once in your application entry. Calendar imports its own stylesheet.

Install Field and Input when you use the caller-owned creation dialog shown in the Preview.

Basic usage

Structures

The component renders its navigation, date grid, event cards, and detail or overflow dialog. Pass resources and event data from the caller. Use renderEvent when the card content needs product-specific treatment; the calendar still owns its event wrapper and interactions.

Examples

Agenda list

Use agenda to scan the day's events in chronological order and open details without a time grid.

Wednesday, October 7, 2026

Asia/Jakarta
All day

Daily schedule

Use a day view when the team needs one detailed timeline. Empty timed slots can open a caller-owned creation flow.

Wednesday, October 7, 2026

Asia/Jakarta
Wed, Oct 7
All day

Three-day planning

Compare adjacent days on one time axis. The Preview uses this view for the team's immediate plan.

Wed, Oct 7 – Fri, Oct 9

Asia/Jakarta
Wed, Oct 7
All day
Thu, Oct 8
All day
Fri, Oct 9
All day

Week planning

Use the Monday-first week for broader planning. The caller owns the selected date and view when they need to control navigation.

Mon, Oct 5 – Sun, Oct 11

Asia/Jakarta
Mon, Oct 5
All day
Tue, Oct 6
All day
Wed, Oct 7
All day
Thu, Oct 8
All day
Fri, Oct 9
All day
Sat, Oct 10
All day
Sun, Oct 11
All day

Month context

Use the month grid for date context. Crowded dates reveal the remaining events in a dialog.

October 2026

Asia/Jakarta
Mon
Tue
Wed
Thu
Fri
Sat
Sun

Resource schedule

Pass resources and matching resourceId values to compare team calendars. Unassigned events remain visible in the unassigned column.

Wednesday, October 7, 2026

Asia/Jakarta
Events
All day
Mina Patel
All day
Alex Rivera
All day
Jo Kim
All day

Controlled edits and creation

Set editable and provide onEventChange to enable move and resize gestures in a time or date grid. Agenda remains a read-only chronological list. The callback returns a new event with its original metadata; update your controlled events value to commit it. Escape, cancellation, and invalid drops do not commit. onSlotSelect receives a draft range; create the event in your own dialog and add it only after the user submits.

Wed, Oct 7 – Fri, Oct 9

Asia/Jakarta
Wed, Oct 7
All day
Thu, Oct 8
All day
Fri, Oct 9
All day

slotDuration defaults to 30 minutes and snapDuration to 15 minutes. Click or keyboard selection uses the same snapped slot. Move with Alt+Arrow keys; resize handles use Arrow keys. Timed events resize vertically; all-day and month events resize by date.

Overlap and overflow

Overlapping timed events use up to three visible lanes. Open +N to reach every hidden event. Adjacent events can reuse a lane.

Wednesday, October 7, 2026

Asia/Jakarta
Wed, Oct 7

Event details and responses

Organizer, participants, location, notes, link, status, and conflict are event data. Pending response actions appear only when onEventResponse is supplied; update the controlled event after the caller accepts or declines.

Wednesday, October 7, 2026

Asia/Jakarta

AI suggestion and scheduled provenance

Scheduling provenance is independent from invitation status. The callback requests an action; the caller decides what it means and updates the event. Accepting a suggestion changes its state to scheduled while retaining its AI source and reason.

Wednesday, October 7, 2026

Asia/Jakarta

Read-only data states

Without editable, event changes are disabled. Invalid data produces a visible alert. Empty data, very short events, midnight continuation, daylight-saving transitions, and event kinds are also represented in these examples.

Wed, Oct 7 – Fri, Oct 9

Asia/Jakarta
Wed, Oct 7
Thu, Oct 8
Fri, Oct 9

October 2026

Asia/Jakarta
Mon
Tue
Wed
Thu
Fri
Sat
Sun

Wednesday, October 7, 2026

Asia/Jakarta
Wed, Oct 7

Sunday, November 3, 2024

America/New_York
Sun, Nov 3

Wednesday, October 7, 2026

Asia/Jakarta

No events on this day

Choose another date to see scheduled moments.

Career history remains owned by Timeline. Date Picker owns date selection; Booking keeps its private date/time strip.

API reference

Source utilities

Import the framework-free date and layout helpers from the installed calendar.utils source (or the import package’s calendar-core entry) when a caller needs the same date validation, zone conversion, interval splitting, or lane layout without rendering the React view.

Keyboard and accessibility

Tab reaches calendar controls, events, and the slot grid when creation is enabled. Enter or Space opens event details. Escape closes dialogs and cancels an unfinished gesture. Alt+Arrow keys move a focused editable event; resize handles use Arrow keys. Empty timed cells support arrow-key slot selection and Enter. Event and slot controls expose accessible names and status feedback.