Aliases
date range picker
RangeDatePickerTwo-month date-range field with blocked-date support.
Aliases
date range picker
Foundations
RangeDatePicker when the user is choosing a bounded start and end date as one decision.min, max, and disabledDates to constrain selection.RangeDatePicker for one-off date fields; use DatePicker.field button
trigger Shows the current range summary and opens the two-month calendar.
calendar popover
surface Contains the paired month grids and navigation controls.
calendar day
day Selectable day cell supporting start, end, and in-range styling.
| Name | Type | Default | Description |
|---|---|---|---|
label | string | — | Visible label used for the field or control. |
description | string | — | Provides field guidance associated with the control. |
error | string | — | Shows a validation error associated with the control. |
placeholder | string | — | Placeholder text shown before a user makes a selection or enters text. |
required | boolean | false | Marks the control as required. |
disabled | boolean | false | Prevents interaction and exposes the disabled state. |
name | string | — | Form field name used for native form submission. |
id | string | — | Sets the control ID for external labels and descriptions. |
size | 'sm' | 'md' | 'lg' | 'md' | Sets the component size. |
value | { start?: string; end?: string } | — | Controlled ISO date-only range value. |
min | string | — | Earliest selectable ISO date. |
max | string | — | Latest selectable ISO date. |
disabledDates | string[] | — | Explicit ISO dates that cannot be selected. |
weekStartsOn | 0 | 1 | 0 | First day of the week for the month grid. |
open | boolean | false | Controlled popover open state. |
onOpenChange | (detail: { open: boolean }) => void | — | Runs when the calendar opens or closes. |
onChange | (detail: { value: { start?: string; end?: string } }) => void | — | Runs when the range changes. |
theme | ThemeContract | — | Sets the theme used to resolve component styles. |
| Name | Payload | Description |
|---|---|---|
openchange | { open: boolean } | Fires when an overlay-style component opens or closes through user interaction. |
change | { value: { start?: string; end?: string } } | Fires when the range changes. |
| Name | Description |
|---|---|
default | RangeDatePicker is prop-driven and does not expose custom day or panel slots. |
Variants
default: Two linked month grids with start/end range emphasis.Sizes
sm: Compact range fieldmd: Default range fieldlg: Larger touch-oriented range fieldStates
closed: Calendar hiddenopen: Calendar visiblepartial: Start date chosen but end date still pendingcomplete: Start and end dates selectedSemantics
Keyboard
Screen readers
Checklist
Implementation notes
A date-range field with a label and guidance.
<RangeDatePicker label="Stay window" description="Choose the booking range." /> Constrain selectable dates with min, max, and disabledDates.
<RangeDatePicker label="Freeze window" min="2026-04-10" max="2026-04-20" disabledDates={['2026-04-16']} /> Control the range and the surface when app workflow owns selection state.
<RangeDatePicker value={range} open={isOpen} onOpenChange={(detail) => isOpen = detail.open} onChange={(detail) => range = detail.value} /> Calculated fixtures; browser evidence is not collected. Layout estimates use declared text behavior and maximum token values.
size=sm
size=md
size=lg