Color
Typography
Spacing
Radius
Border
Opacity
Elevation
Blur
Avatar
Badge
Button
Checkbox
Input
ProgressBar
RadioButton
Separator
Slider
Switch
TextArea
TextLink
Accordion
Breadcrumb
ButtonGroup
Combobox
DropdownMenu
ListItem
Pagination
SegmentedControl
Select
Tooltip
Calendar
Card
CommandMenu
DatePicker
Dialog
Drawer
EmptyState
Footer
Form
NavigationBar
Sidebar
Skeleton
Table
Tabs
Toaster

Calendar

Picks a date, or a range of dates, from a month grid. Moves between months with its buttons or the keyboard.

October 2026

SUNMONTUEWEDTHUFRISAT
Selection

Usage

Import the component and render it.

import { Calendar } from 'src/components/Calendar/Calendar';

<Calendar selection="single" month="2026-10" today="2026-10-01" />

Accessibility

Role: group named by the month and year, with a table of date buttons.

KeyAction
TabMoves between Previous month, Next month and the focused date
Arrow keysMove the focus by one day (left/right) or one week (up/down), crossing months
Home / EndFirst / last day of the week
Page Up / Page DownPrevious / next month (with Shift: year)
Enter / SpaceSelects the focused date
  • Only one date is in the Tab order: the selected date, else today, else the first of the month.
  • Each date is named by its full date; today has aria-current="date" and the selected dates aria-pressed="true".
  • The month and year are a live region, so moving to another month is announced.

Selection

Set the selection prop: Single is "single", Range is "range".

October 2026

SUNMONTUEWEDTHUFRISAT
Single

October 2026

SUNMONTUEWEDTHUFRISAT
Range
<Calendar selection="single" />
<Calendar selection="range" />

Composition

Use the following composition to build a Calendar:

Calendar
├── CalendarDate
└── Button

CalendarDate

One date of the Calendar grid: a 40px round button. Only used inside Calendar.

CalendarDate
<CalendarDate label="14" />

Used in

Calendar is part of DatePicker.

Actions

Pass callbacks to respond to the component.

import { Calendar } from 'src/components/Calendar/Calendar';

<Calendar
  selection="single"
  month="2026-10"
  today="2026-10-01"
  onValueChange={(value) => console.log(value)}
  onRangeStartChange={(value) => console.log(value)}
  onRangeEndChange={(value) => console.log(value)}
  onMonthChange={(month) => console.log(month)}
/>
CallbackWhen
onValueChangeCalled with the date the user selects (Single).
onRangeStartChangeCalled when the range start changes.
onRangeEndChangeCalled when the range end changes.
onMonthChangeCalled when the user moves to another month.