Calendar

An accessible date picker built from scratch — no third-party date library. Use Calendar for an always-visible inline grid, or DatePicker for an input that opens a popup.

Inline Calendar

An always-visible month grid. Click a day to select it. Use arrow keys to navigate, PageUp/PageDown to change months.

May 2026
SunMonTueWedThuFriSat

Controlled selection

Pass value and onChange to control the selection externally.

May 2026
SunMonTueWedThuFriSat

Selected: none

Min / Max dates

Use minDate and maxDate to restrict the selectable range. Days outside the range are dimmed and unclickable.

May 2026
SunMonTueWedThuFriSat

Custom disabled dates

Pass isDateDisabled to block arbitrary dates — weekends in this example.

May 2026
SunMonTueWedThuFriSat

Range selection

Set mode="range" to enable two-click range selection. The first click sets the start; the second sets the end. Hover over days to preview the range before confirming.

May 2026
SunMonTueWedThuFriSat

Start: none · End: none

Range with uncontrolled default

Use defaultRangeValue for an uncontrolled pre-filled range.

May 2026
SunMonTueWedThuFriSat

DatePicker

An input that opens the calendar in a popup. Click to open, select a date to close. The clear button (×) resets the value.

With Label

Error state

Pass a message string to error. It disappears automatically once a date is selected.

Disabled

Min / Max constraint

Only dates within the allowed window are selectable inside the picker.

Placement

The placement prop controls which direction the popup opens. "auto" (default) measures available viewport space and picks the roomier side.

placement="auto"

placement="bottom"

placement="top"

DateRangePicker

Two inputs sharing a single range-mode calendar popup. Click the start input to open; click a start date, then an end date — the popup closes automatically once both are selected.

Controlled range picker

No range selected

Range picker — error state

Error clears once both dates are selected.

Range picker — disabled