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.

Replay 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.

Replay 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.

Replay preview

Default

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

Replay preview

Range

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

Replay 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.

Replay 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.

Replay 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.

Replay 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.

Replay 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.

Replay preview

Disabled

Set disabled to block the trigger from opening.

Replay preview

Time picker

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

Replay preview

Time — hour cycle

Set hourCycle to 12 or 24.

Replay preview

Time — granularity

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

Replay preview

Time — step

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

Replay preview

Time — clearable

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

Replay preview

Time — disabled & read-only

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

Replay preview

Time range picker

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

Replay preview

Month picker

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

Replay preview

Month range picker

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

Replay preview

Year picker

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

Replay preview

Year range picker

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

Replay 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.
classstringApplied 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.
minYearnumberLower bound of the year dropdown.
maxYearnumberUpper 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 | undefinedTime 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 / maxValueDateValueSelectable bounds.
isMonthDisabled / isYearDisabled(date: DateValue) => booleanDisable 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 / maximumYearsnumberCap the selectable range length.
fixedDate"start" | "end"Keep one endpoint fixed while adjusting the other.
allowNonContiguousRangesbooleanfalsePermit ranges that skip unavailable cells.
minValue / maxValueDateValueSelectable 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.