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.
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.
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.
Default
Click to open the calendar popover. The model is a plain Date.
Range
Set mode to range. The model becomes { start, end } of plain Dates, and the popover closes once both ends are picked.
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.
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.
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.
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.
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.
Disabled
Set disabled to block the trigger from opening.
Time picker
TimePicker is a segmented HH:MM field (reka-ui TimeField). Bind to a Time from @internationalized/date.
Time — hour cycle
Set hourCycle to 12 or 24.
Time — granularity
Control the smallest segment: hour, minute (default), or second.
Time — step
Pass a step object (e.g. { minute: 15 }) to snap segment increments.
Time — clearable
Set clearable to show a clear button once a value is selected.
Time — disabled & read-only
disabled blocks all input; readonly shows the value but prevents edits.
Time range picker
TimeRangePicker has start and end segments with a dash separator. Bind to { start, end } Time values.
Month picker
MonthPicker opens a popover with a month grid. v-model is a reka-ui DateValue.
Month range picker
MonthRangePicker selects a start and end month. v-model is a reka-ui DateRange.
Year picker
YearPicker opens a popover with a decade-aligned year grid. v-model is a reka-ui DateValue.
Year range picker
YearRangePicker selects a start and end year. v-model is a reka-ui DateRange.
API Reference
DatePicker
TimePicker
TimeRangePicker
MonthPicker / YearPicker
MonthRangePicker / YearRangePicker
Accessibility
Keyboard shortcuts and ARIA behavior.
- 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.