Skip to content

Range Calendar

Choose an inclusive date range directly in an always-visible calendar grid.

Usage

Booking

Choose an inclusive start and end date for a reservation.

Choose an inclusive start and end date for a reservation.

Aug 2026

Bounded

Reject values outside the configured minimum and maximum.

Reject values outside the configured minimum and maximum.

Aug 2026

Controlled

Let the parent own the current value and apply accepted changes back to the component.

Let the parent own the current value and apply accepted changes back to the component.

Aug 2026

API

Vue package: @sectile/vue/temporal/range-calendar

Components
  • RangeCalendarRoot
  • RangeCalendarContent
  • RangeCalendarGrid
  • RangeCalendarCell
  • RangeCalendarPreviousMonth
  • RangeCalendarNextMonth
  • RangeCalendarPreviousYear
  • RangeCalendarNextYear

Props

RangeCalendarRootProps

as

Element or component rendered for this part.

asChild

Whether to merge this part into its single child instead of rendering a wrapper.

defaultHighlightedValue

Initially highlighted value for uncontrolled state.

defaultOpen

Initial uncontrolled open state.

defaultValue

Initial value used when the component owns its state.

defaultView

Initial calendar or picker view.

disabled

Whether interaction is unavailable.

highlightedValue

Value currently highlighted for keyboard interaction.

label

Accessible name announced for the control.

modelValue

Current value when state is controlled by the parent.

open

Whether the associated popup or disclosure is open.

policies

Behavior policies that customize validation, movement, or selection.

readonly

Whether the value can be inspected but not changed.

referenceDate

Deterministic civil date used when a calendar has no selected or highlighted value.

required

Whether the control must contain a valid value before submission.

RangeCalendarPartProps

as

Element or component rendered for this part.

asChild

Whether to merge this part into its single child instead of rendering a wrapper.

Slots

RangeCalendarRootSlotProps

dates

Dates projected by the active view.

disabled

Whether interaction is unavailable.

highlightedValue

Value currently highlighted for interaction.

months

Months projected by the active view.

open

Whether the associated popup or disclosure is open.

readonly

Whether the value can be inspected but not changed.

value

Current value exposed by this contract.

view

Current calendar anchor.

viewMode

Active calendar view mode.

years

Years projected by the active view.

RangeCalendarCellSlotProps

disabled

Whether interaction is unavailable.

highlighted

Whether this item is highlighted for interaction.

inRange

Whether this value lies inside the selected range.

outsideMonth

Whether this date belongs to an adjacent month.

selected

Whether this item is selected.

value

Current value exposed by this contract.

Other types

RangeCalendarValueChangeHandler

ts
type RangeCalendarValueChangeHandler = NonNullable<InstanceType<typeof RangeCalendarRoot>['$props']['onUpdate:modelValue']>

RangeCalendarOpenChangeHandler

ts
type RangeCalendarOpenChangeHandler = NonNullable<InstanceType<typeof RangeCalendarRoot>['$props']['onUpdate:open']>

RangeCalendarHighlightedValueChangeHandler

ts
type RangeCalendarHighlightedValueChangeHandler = NonNullable<InstanceType<typeof RangeCalendarRoot>['$props']['onUpdate:highlightedValue']>

DateRange

NameTypeRequired
startDateValueYes
endDateValueYes

DateValue

NameTypeRequired
yearnumberYes
monthnumberYes
daynumberYes

Parts

Shared scope: [data-scope="range-calendar"]. Combine it with a part selector to keep styles local to this component.

PartSelectorRoleExtra attributes
content[data-part="content"]Contains the component content shown for the active state.
grid[data-part="grid"]Groups cells into a navigable two-dimensional structure.
cell[data-part="cell"]Represents one navigable or selectable grid value.
previous-month[data-part="previous-month"]Moves to the previous month.
next-month[data-part="next-month"]Moves to the next month.
previous-year[data-part="previous-year"]Moves to the previous year.
next-year[data-part="next-year"]Moves to the next year.

Keyboard interaction

KeyBehavior
Arrow keysMove the highlighted date by one day or one week.
Home / EndMove to the start or end of the week.
Page Up / Page DownMove by one month; hold Shift to move by one year.
Enter / SpaceSelect the highlighted date.
EscapeClose the calendar without selecting another date.

Accessibility

The always-visible grid exposes both range endpoints and every date between them without a popup trigger.

Released under the MIT License.