Calendar
Month grid, week timeline, and day timeline in one component. Events mark their days with a dot in the month grid and week strip, and timed events render as blocks on the week/day hour timelines.
The view is a semantic boolean axis: pass week or day, or neither for the month grid (day wins over week when both are set).
In glass mode the selected day is a brand-tinted control-layer puck behind its number and event dot, in the month grid and along the week strip; in range mode both endpoints carry the puck over the range band. The day peek and the hover card are functional-layer glass cards beside their day. Solid mode keeps the skin's own filled day.
May 2026
SU
MO
TU
WE
TH
FR
SA
iOS
May 2026
S
M
T
W
T
F
S
Android
May 2026
Su
Mo
Tu
We
Th
Fr
Sa
Web
tsx
Default
Events
Day peek
Week
Day
Range
Compact
A bare calendar is uncontrolled: pressing a day selects it, and in the week/day views the chevrons page the selection a week or a day at a time (crossing into another month hands the press to onPrev/onNext, since the month itself is a prop).
Props
Do & Don’t
Single date
Don’t
Painting several days with the primary selected style fakes a multi-select; when you mean a span of days, use range instead.
Do
May 2026
Su
Mo
Tu
We
Th
Fr
Sa
Exactly one selected day (primary), with today marked separately in the accent tone.
Event marks
Don’t
Cramming event titles into month cells clips them into unreadable slivers and breaks the grid's rhythm.
Do
May 2026
Su
Mo
Tu
We
Th
Fr
Sa
A dot marks a day with events and the count lives in the accessible name; titles belong to the week/day timelines or a side panel.
Day details
Don’t
Selecting May 24 but leaving a detached panel on a placeholder breaks the link between the grid and its day.
Do
May 2026
Su
Mo
Tu
We
Th
Fr
Sa
dayPeek reveals a pressed day's schedule in place, anchored beside the cell, so detail arrives on demand and the grid stays the single source of truth.
Hour bounds
Don’t
Narrowing startHour/endHour below the real schedule silently clips events out of view; the 6:30 PM review never renders here.
Do
Saturday, May 24
12h
24h
12 AM
1 AM
2 AM
3 AM
4 AM
5 AM
6 AM
7 AM
8 AM
9 AM
10 AM
11 AM
12 PM
1 PM
2 PM
3 PM
4 PM
5 PM
6 PM
7 PM
8 PM
9 PM
10 PM
11 PM
Keep the full-day timeline and let the scroller do the work: it opens on the 8 AM to 5 PM window, and every event stays reachable.
Booking a stay
Don’t
Splitting the stay across two single-date calendars doubles the interaction cost and never shows the span at a glance.
Do
May 2026
Su
Mo
Tu
We
Th
Fr
Sa
One range calendar carries the whole check-in/check-out pick: the endpoints fill, the nights between band together, and an earlier press restarts.