Components

Year Picker

Accessible paged year grid with constraints and single or multiple selection.

YearPicker presents a configurable page of years with roving focus, paging, constraints, locale formatting, and single or multiple selection. Selected values are @internationalized/date dates normalized to January 1.

Anatomy

  • #previous: Previous-page control content.
  • #heading: Visible year-range heading.
  • #next: Next-page control content.
  • #year: Year button content and state.
  • #footer: Optional content after grid.

Usage

2024 – 2035

Selected: 2028

Examples

Page size and columns

yearsPerPage controls paging distance and visible item count. columns controls the number of keyboard rows.

<YearPicker :years-per-page="9" :columns="3" />

Multiple years

Use multiple with an array model for non-contiguous years.

<YearPicker v-model="years" multiple prevent-deselect />

Constraints

Boundaries and matcher props use complete date values but are compared at year precision.

<YearPicker
  :min-value="new CalendarDate(2025, 1, 1)"
  :max-value="new CalendarDate(2035, 1, 1)"
  :is-year-unavailable="date => date.year === 2030"
/>

Custom year content

<YearPicker>
  <template #year="{ label, selected }">
    <strong v-if="selected">{{ label }}</strong>
    <span v-else>{{ label }}</span>
  </template>
</YearPicker>

API Reference

Models

ModelTypeDefaultDescription
v-modelCalendarDateValue | CalendarDateValue[] | undefinedundefinedSelected year(s), normalized to January 1.
v-model:placeholderCalendarDateValueselected year or todayFirst year displayed on current page.

Props

PropTypeDefaultDescription
localestring"en-US"Locale used for year labels.
dir"ltr" | "rtl""ltr"Reading direction.
calendarLabelstring"Year picker"Accessible root label.
columnsnumber3Visual grid columns.
yearsPerPagenumber12Visible years and paging distance.
multiplebooleanfalseEnables independent multiple selection.
preventDeselectbooleanfalsePrevents removing a selected year.
disabledbooleanfalseDisables paging and selection.
readOnlybooleanfalseAllows navigation but blocks selection.
initialFocusbooleanfalseFocuses selected/current year on mount.
minValue / maxValueCalendarDateValueSelection and paging boundaries.
isYearDisabled(date) => booleanMarks years disabled.
isYearUnavailable(date) => booleanMarks years unavailable.
nextPage / prevPage(placeholder) => CalendarDateValuepage arithmeticReplaces default page calculation.
uiYearPickerUiClasses for generated parts.

Emits

EventPayloadDescription
update:modelValuevalueFires after accepted selection changes.
update:placeholderdateFires after accepted page changes.
value-change(value, details)Fires before selection. details.cancel() prevents update.
placeholder-change(date, details)Fires before paging. details.cancel() prevents update.

Slots

SlotPropsDescription
previousdisabledPrevious control content.
headinglabel, itemsVisible year-range heading.
nextdisabledNext control content.
yeardate, label, selected, today, disabled, unavailable, focusedYear button content and state.
footervalue, placeholderOptional content after grid.

Methods

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

UI Options

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

Styling Hooks

UI keyCSS classData attributes
root.akaza-year-pickerdata-akaza-state, data-akaza-selection-mode, data-akaza-disabled, data-akaza-readonly, data-akaza-invalid
header.akaza-year-picker-header
previous.akaza-year-picker-previousdata-akaza-disabled
heading.akaza-year-picker-heading
next.akaza-year-picker-nextdata-akaza-disabled
grid.akaza-year-picker-grid
gridRow.akaza-year-picker-grid-row
cell.akaza-year-picker-cellSelection and availability attributes listed below.
cellTrigger.akaza-year-picker-cell-triggerdata-akaza-state, data-akaza-selected, data-akaza-today, data-akaza-disabled, data-akaza-unavailable
footer.akaza-year-picker-footer

Keyboard

KeyBehavior
ArrowLeft / ArrowRightMoves one year, reversed in RTL.
ArrowUp / ArrowDownMoves one visual row.
Home / EndMoves to row boundary.
PageUp / PageDownMoves one yearsPerPage page.
Shift + PageUp / Shift + PageDownMoves ten pages.
Enter / SpaceSelects focused year.