Toggle Sidebar B
AppearanceLight & dark mode D

Date Picker

The date family: DatePicker (date/date-range, optional time, presets), TimePicker & TimeRangePicker (segmented clock fields), and Month/Year pickers. Popover-triggered pickers built on Calendar and reka-ui. For inline picking without a trigger, use Calendar directly.

Basic

A single date picker bound to a ref. The model is a plain Date.

Dark previewReplay preview

With text input

Compose an Input with a Calendar popover for typed entry. Typing a parseable date ("June 15, 2026" or "2026-06-15") syncs the calendar, and picking a day writes the formatted string back. The shared DatePicker is trigger-only, so this is built from primitives.

Dark previewReplay preview

Natural Language Picker

Parse plain-English dates ("tomorrow", "next friday", "in 3 days", "2 weeks ago") with a small dayjs helper, then mirror the result on a Calendar. The helper lives beside the example, so the shared DatePicker stays dependency-free.

Dark previewReplay preview

Default

Click to open the calendar popover. The model is a plain Date.

Dark previewReplay preview

Range

Set mode to range. The model becomes { start, end } of plain Dates, and the popover closes once both ends are picked.

Dark previewReplay preview

Presets

presets renders a shortcut panel below the calendar: outline buttons that wrap to the calendar's width, at every breakpoint. A preset sets the value, jumps the calendar to it, and closes the popover. Pass a getter as value so relative presets like Today never go stale.

Dark previewReplay preview

With time

Set withTime to add hour and minute selects below the calendar. Single mode only — picking a day keeps the popover open so the clock can be set, then Apply commits it.

Dark previewReplay preview

Sizes

size controls the trigger height. The trigger is a field, so each step matches the equivalent Input and is one step taller on phones; the exact pixels belong to the active style.

Dark previewReplay preview

Months and bounds

numberOfMonths defaults to 2 in range mode and is clamped to 1 below the md breakpoint, where extra months would otherwise stack. min and max bound the selectable window.

Dark previewReplay preview

Date of birth

A birthday picker: max caps selection at today, minYear/maxYear frame the year dropdown, and the month-and-year layout lets you jump decades without paging the calendar.

Dark previewReplay preview

Disabled

Set disabled to block the trigger from opening.

Dark previewReplay preview

Time picker

TimePicker is a segmented HH:MM field (reka-ui TimeField). Bind to a Time from @internationalized/date.

Dark previewReplay preview

Time — hour cycle

Set hourCycle to 12 or 24.

Dark previewReplay preview

Time — granularity

Control the smallest segment: hour, minute (default), or second.

Dark previewReplay preview

Time — step

Pass a step object (e.g. { minute: 15 }) to snap segment increments.

Dark previewReplay preview

Time — clearable

Set clearable to show a clear button once a value is selected.

Dark previewReplay preview

Time — disabled & read-only

disabled blocks all input; readonly shows the value but prevents edits.

Dark previewReplay preview

Time range picker

TimeRangePicker has start and end segments with a dash separator. Bind to { start, end } Time values.

Dark previewReplay preview

Month picker

MonthPicker opens a popover with a month grid. v-model is a reka-ui DateValue.

Dark previewReplay preview

Month range picker

MonthRangePicker selects a start and end month. v-model is a reka-ui DateRange.

Dark previewReplay preview

Year picker

YearPicker opens a popover with a decade-aligned year grid. v-model is a reka-ui DateValue.

Dark previewReplay preview

Year range picker

YearRangePicker selects a start and end year. v-model is a reka-ui DateRange.

Dark previewReplay preview

API Reference

DatePicker

PropTypeDefaultDescription
mode"single" | "range""single"Pick one date or a start/end range.
openbooleanfalsePopover state. Supports v-model:open for programmatic control.
align"start" | "center" | "end""start"Popover alignment against the trigger. Forced to start below the md breakpoint.
classstring—Applied to the trigger button — the popover root renders no element of its own.
modelValueDate | { start: Date | null, end: Date | null } | nullnullSelected value — a Date in single mode, a { start, end } object in range mode. Supports v-model.
presets{ label: string, value: Date | { start, end } | (() => …) }[][]Shortcut buttons beside the calendar. A function value is resolved on click.
withTimebooleanfalseAdd hour/minute selects below the calendar. Single mode only.
size"sm" | "default" | "lg""default"Trigger height.
numberOfMonthsnumberrange: 2, single: 1Months shown side by side. Always 1 below the md breakpoint.
layout"month-and-year" | "month-only" | "year-only" | null"month-and-year"Calendar heading layout.
disabledbooleanfalseDisable the trigger.
placeholderstring"Pick a date" / "Pick a date range"Trigger text when nothing is selected.
defaultHournumber9Initial hour when withTime is on.
defaultMinutenumber0Initial minute when withTime is on.
disableFutureDatesbooleanfalseBlock selecting dates after today.
disablePastDatesbooleanfalseBlock selecting dates before today.
minDate | nullnullEarliest selectable date.
maxDate | nullnullLatest selectable date.
allowedDatesDate[] | nullnullWhitelist. Every other date is struck through and cannot be picked — for pickers locked to a fixed set of days.
minYearnumber—Lower bound of the year dropdown.
maxYearnumber—Upper bound of the year dropdown.
placeholderDateDate | nullnullMonth the calendar opens on when empty.
EventDescription
update:modelValueFires with the chosen Date (single) or { start, end } (range). Enables v-model.
update:openFires when the popover opens or closes. Enables v-model:open.
SlotDescription
presetsReplaces the default preset panel. Receives { apply } to commit a value.

TimePicker

PropTypeDefaultDescription
modelValueTime | undefined—Time value from @internationalized/date. Use new Time(hour, minute). Supports v-model.
hourCycle12 | 2424Display 12- or 24-hour format.
granularity"hour" | "minute" | "second""minute"Smallest segment shown.
step{ hour?: number, minute?: number, second?: number }—Increment applied per segment when stepping with arrows.
clearablebooleanfalseShow a clear button when a value is set.
disabledbooleanfalseDisable input.
readonlybooleanfalseMake the field read-only.
EventDescription
update:modelValueFires with the new Time (or undefined). Enables v-model.

TimeRangePicker

PropTypeDefaultDescription
modelValue{ start?: Time, end?: Time }—Range with Time instances from @internationalized/date. Supports v-model.
hourCycle12 | 2424Display 12- or 24-hour format.
clearablebooleanfalseShow a clear button when a value is set.
EventDescription
update:modelValueFires with the new { start, end } range. Enables v-model.

MonthPicker / YearPicker

PropTypeDefaultDescription
modelValueDateValue | nullnullreka-ui DateValue for the picked month/year. Supports v-model.
openbooleanfalsePopover open state. Supports v-model:open.
minValue / maxValueDateValue—Selectable bounds.
isMonthDisabled / isYearDisabled(date: DateValue) => boolean—Disable individual cells.
yearsPerPagenumber12YearPicker only. Years shown per page (decade-aligned).
size"sm" | "default" | "lg""default"Trigger height.
align"start" | "center" | "end""start"Popover alignment.
placeholderTextstring"Pick a month" / "Pick a year"Trigger text when empty.
EventDescription
update:modelValueFires with the picked DateValue. Enables v-model.

MonthRangePicker / YearRangePicker

PropTypeDefaultDescription
modelValueDateRange | nullnullreka-ui { start, end } of DateValue. Supports v-model.
maximumMonths / maximumYearsnumber—Cap the selectable range length.
fixedDate"start" | "end"—Keep one endpoint fixed while adjusting the other.
allowNonContiguousRangesbooleanfalsePermit ranges that skip unavailable cells.
minValue / maxValueDateValue—Selectable bounds.
size"sm" | "default" | "lg""default"Trigger height.
EventDescription
update:modelValueFires with the { start, end } DateRange. Enables v-model.

Accessibility

Keyboard shortcuts and ARIA behavior.

Shortcut Description
SpaceOpens the calendar popover from the trigger.
EnterOpens the calendar popover from the trigger.
↑Moves to the same day in the previous week.
↓Moves to the same day in the next week.
←Moves to the previous day.
→Moves to the next day.
EscCloses the popover and returns focus to the trigger.
  • Composes a button, popover, and calendar grid.
  • Focus moves into the grid when the popover opens and back to the trigger when it closes.
  • The trigger exposes aria-expanded to reflect the popover state.