Components

Month Range Picker

Accessible month-level range selection with preview, limits, fixed endpoints, and constraints.

MonthRangePicker selects inclusive ranges at month precision. First activation sets an anchor; hover or keyboard focus previews a pending range; second activation commits normalized start and end values.

Use Month Range Picker for ranges that do not need day precision. It shares Month Picker's DOM and styling hooks.

Anatomy

  • #previous: Previous-year control content.
  • #heading: Current year heading.
  • #next: Next-year control content.
  • #month: Month content with endpoint, in-range, highlighted, and availability state.
  • #footer: Optional content after the grid.

Usage

2026

Range: 2026-03-01 - 2026-06-01

Examples

Maximum range length

maximumMonths counts both endpoints. A value of 3 accepts March through May but rejects March through June.

<MonthRangePicker v-model="range" :maximum-months="3" />

Fixed endpoint

Keep one boundary stable while users choose the other. The fixed boundary must already exist in the model.

<MonthRangePicker v-model="range" fixed-date="start" />

Non-contiguous ranges

Ranges containing blocked interior months are rejected by default. allowNonContiguousRanges permits blocked interior months while keeping both endpoints selectable.

<MonthRangePicker
  v-model="range"
  allow-non-contiguous-ranges
  :is-month-unavailable="isClosedMonth"
/>

Application constraints

Hard boundaries also disable paging when no month on the target page can be selected.

<MonthRangePicker
  :min-value="new CalendarDate(2026, 3, 1)"
  :max-value="new CalendarDate(2027, 6, 1)"
/>

Calendar-aware pages

Year-sized month pages use calendar-year arithmetic, including leap-month years. Labels follow the value calendar and locale rather than assuming Gregorian dates.

API Reference

Models

ModelTypeDefaultDescription
v-modelCalendarDateRange{}Optional normalized start and end months.
v-model:placeholderCalendarDateValueselected start or todayYear displayed by grid.

Props

PropTypeDefaultDescription
localestring"en-US"Locale used for labels.
dir"ltr" | "rtl""ltr"Reading direction and horizontal arrows.
calendarLabelstring"Month range picker"Accessible root label.
columnsnumber3Number of month columns.
allowNonContiguousRangesbooleanfalseAllows blocked interior months.
maximumMonthsnumberMaximum inclusive range length.
fixedDate"start" | "end"Keeps one endpoint fixed.
disabledbooleanfalseDisables paging and selection.
readOnlybooleanfalseAllows navigation but blocks selection.
initialFocusbooleanfalseFocuses selected/current month on mount.
minValueCalendarDateValueEarliest selectable month.
maxValueCalendarDateValueLatest selectable month.
isMonthDisabled(date) => booleanMarks months disabled.
isMonthUnavailable(date) => booleanMarks months unavailable.
nextPage(placeholder) => CalendarDateValueadd one yearCustom next page.
prevPage(placeholder) => CalendarDateValuesubtract one yearCustom previous page.
uiMonthRangePickerUiClasses for generated parts.

Emits

EventPayloadDescription
update:modelValueCalendarDateRangeFires after accepted range changes.
update:placeholderCalendarDateValueFires after accepted page changes.
value-change(range, details)Cancelable range change.
placeholder-change(date, details)Cancelable page change.

Slots

SlotPropsDescription
previousdisabledPrevious control content.
headinglabel, itemsYear heading.
nextdisabledNext control content.
monthdate, label, selected, rangeStart, rangeEnd, inRange, highlighted, disabled, unavailable, focusedMonth content and range state.
footervalue, placeholderOptional footer.

Methods

MethodDescription
focusValue(date)Moves roving focus to a month and pages when needed.
selectValue(date, event?)Requests an endpoint selection.
nextPage(event?)Requests the next year.
previousPage(event?)Requests the previous year.

UI Options

KeyPart
rootRoot range group.
headerNavigation header.
previousPrevious-year button.
headingLive year heading.
nextNext-year button.
gridARIA month grid.
gridRowGrid row.
cellGrid cell.
cellTriggerInteractive month button.
footerOptional footer.

Styling Hooks

UI keyCSS classData attributes
root.akaza-month-range-picker`data-akaza-state="empty
header.akaza-month-range-picker-header
previous.akaza-month-range-picker-previousdata-akaza-disabled
heading.akaza-month-range-picker-heading
next.akaza-month-range-picker-nextdata-akaza-disabled
grid.akaza-month-range-picker-grid
gridRow.akaza-month-range-picker-grid-row
cell.akaza-month-range-picker-cellSelection, range, highlight, and availability attributes listed below.
cellTrigger.akaza-month-range-picker-cell-triggerdata-akaza-state, data-akaza-selected, data-akaza-today, data-akaza-range-start, data-akaza-range-end, data-akaza-in-range, data-akaza-highlighted, data-akaza-disabled, data-akaza-unavailable
footer.akaza-month-range-picker-footer

Keyboard

KeyBehavior
Arrow keysMove one month horizontally or one columns row vertically. Horizontal movement reverses in RTL.
Home / EndMoves to row boundary.
PageUp / PageDownMoves one year.
Shift + PageUp / Shift + PageDownMoves ten years.
Enter / SpaceSets range start or completes range end.

Pointer hover previews a pending range; touch activation selects endpoints without relying on hover.