Skip to content
v2.5.0
English
Русский
Documentation

MonthPicker

MonthPicker is the grid-based month-selection subsystem used directly or as part of the calendar family.

Root Props

PropTypeDefault
yearstring—
Year whose months are shown, given as a YYYY-MM-DD string of any day in it. Defaults to the current year.
calendarCalendarSystemgregorianCalendar
Calendar system the months belong to — it defines how many months a year has. Defaults to the Gregorian calendar.
localestringgetDefaultLocale()
BCP 47 locale of the month names, e.g. de-DE. Defaults to the locale of the runtime, like Intl.
sizeDataGridPickerSize'xs'
Controls the item’s visual size. Useful for adapting the picker to compact or large layouts.
variantDataGridPickerVariant—
Visual appearance preset for the picker.
selectionS'single'
Selection mode. 'single' — only one cell can be selected at a time; 'multiple' — independent multi-selection (toggle per cell); 'range' — range selection between two points (Shift + arrows or pointer drag)
disabledDataGridDisabled<string>—
Predicate or map of disabled cells. Can be: a function (key) => boolean; an array of disabled keys; a single key. Disabled cells cannot be selected or focused.
excludeDisabledboolean—
—
expandablebooleantrue
Enables expanding selection ranges (Shift + Arrow or mouse drag).
defaultActivestring—
Uncontrolled initial active cell.
activestring—
Controlled active cell.
selectedS extends "single" ? string | null : string[]—
Controlled selected cells. In 'single' mode null means controlled with nothing selected.
defaultSelectedS extends "single" ? string : string[]—
Uncontrolled initially selected cells.
fromstring—
Range boundaries. If provided, limits selection to cells between from and to based on the compare function.
tostring—
—
resolveRange(start: DataGridResolveValue<K>, end: DataGridResolveValue<K>, grid: Grid<HTMLElement, K>) => K[]—
Custom range resolution logic for selection="range". Given start and end values, returns the list of keys forming the range.
equals(start: K | undefined, end: K | undefined) => boolean—
Custom equality comparator for comparing two cell keys. Defaults to strict equality (===).
compare(a: K, b: K) => -1 | 0 | 1—
Custom ordering comparator for comparing two cell keys. Should return -1, 0, or 1.
onSelectCell(value: S extends 'single' ? K : K[]) => void—
Fires when the user selects cell. Receives the list of selected cell keys.
onChangeActive(active: K) => void—
Fires when the active (focused) cell changes.
refRef<HTMLDivElement>—
Ref to the grid’s root element.
apiRefRef<DataGridApiRef<string>>—
Ref to the grid’s imperative API. Exposes low-level structures for advanced scenarios: grid — matrix navigation helper; keyMap — Map<K, [row, col]> for fast lookups
wrapDataGridWrap—
Navigation wrap mode. 'horizontal' — wrap across columns within the same row; 'vertical' — wrap across rows within the same column; 'both' — enable both behaviors; undefined — no wrapping
excludeDataGridExclude<string>—
Exclude cells from focus traversal. Can be: a single key; an array of keys; a predicate (key) => boolean
rowDeltanumber—
Page navigation row step for PageUp/PageDown. undefined — jump to the first/last row; number — move by N rows relative to the current row
onArrow(e: KeyboardEvent<HTMLDivElement>, node: MatrixNode<HTMLElement, K>, prevNode: MatrixNode<HTMLElement, K>) => void—
Fires on each Arrow navigation step after focus changes

Also accepts all <div> attributes.

Child Parts

  • MonthPickerLayout
  • MonthPickerRowGroup
  • MonthPickerRow
  • MonthPickerItem
  • MonthPickerCell

MonthPickerItem

PropTypeDefault
rangeDataGridPickerItemRangePosition—
Optional visual indicator of the cell’s position within a range. One of: "start" | "between" | "end". If not provided, the component automatically derives it based on selection context.
sizeDataGridPickerSize—
Controls the item’s visual size. Useful for adapting the picker to compact or large layouts.
valueDataGridCellKey—
Logical value associated with this grid cell. Used as the cell’s unique selection key.
variantDataGridPickerVariant—
Visual appearance preset for the picker.
disabledboolean—
Disables click and keyboard selection. Overrides value from root DataGrid
refRef<HTMLDivElement>—
External ref to the cell root element. Will be merged with the internal itemRef([row, col], key) registration when the cell is not excluded.
colrequirednumber—
Column index of the cell (0-based). Used together with row index from the row context to form grid coordinates: [row, col].
asChildbooleanfalse
When true, renders children via Slot and forwards props/refs to the child element instead of using a native <div>.
excludedboolean—
Exclude cells from focus traversal. Overrides value from root DataGrid

Also accepts all <div> attributes.

MonthPickerCell

PropTypeDefault
sizeDataGridPickerSize—
Controls the item’s visual size. Useful for adapting the picker to compact or large layouts.
rangeDataGridPickerItemRangePosition—
Optional visual indicator of the cell’s position within a range. One of: "start" | "between" | "end". If not provided, the component automatically derives it based on selection context.
variantDataGridPickerVariant—
Visual appearance preset for the picker.
disabledboolean—
Disables click and keyboard selection. Overrides value from root DataGrid
refRef<HTMLDivElement>—
External ref to the cell root element. Will be merged with the internal itemRef([row, col], key) registration when the cell is not excluded.
asChildbooleanfalse
When true, renders children via Slot and forwards props/refs to the child element instead of using a native <div>.
excludedboolean—
Exclude cells from focus traversal. Overrides value from root DataGrid

Also accepts all <div> attributes.

MonthPickerRow

PropTypeDefault
rowrequirednumber—
Zero-based row index for all descendant cells. Provided to descendants via context.

Also accepts all <div> attributes.

MonthPickerRowGroup

PropTypeDefault
scopeDataGridScope—
The scope prop is required and identifies the logical group of cells rendered by this row group. When used with DataGridIndexedSnapScroller, the scope usually matches the current index or page. Providing a scope allows the DataGrid to restore focus to the first available cell when the index changes and new cells are rendered.

Also accepts all <div> attributes.

MonthPickerLayout

PropTypeDefault
childrenrequiredReactNode—
Template of a month cell, rendered once for every month of the year. Read the month with useMonthPickerCellContext(); usually <MonthPickerCell />.
colsnumber3
Number of columns; rows are added as needed for all months of the year.
localestring—
Locale used for formatting month names. Defaults to the locale of the picker.
formatIntl.DateTimeFormatOptions['month']'long'
Month display format (from Intl.DateTimeFormatOptions).
scopeDataGridScope—
The scope prop is required and identifies the logical group of cells rendered by this row group. When used with DataGridIndexedSnapScroller, the scope usually matches the current index or page. Providing a scope allows the DataGrid to restore focus to the first available cell when the index changes and new cells are rendered.

Also accepts all <div> attributes.

Types

  • MonthPickerProps
  • MonthPickerLayoutProps
  • MonthPickerRowGroupProps
  • MonthPickerRowProps
  • MonthPickerItemProps
  • MonthPickerCellProps
  • MonthPickerCellContextData

State Model

  • Selection and bounds behavior are inherited from DataGridPicker.
  • Months are keyed by their first day as a YYYY-MM-DD string; selected, from, to, and disabled use the same strings.
  • The root provides the visible year (its first day) and calendar through useMonthPickerContext.
  • createMonthPickerGrid({ year, calendar, cols }) derives the rows from the months of the year: 12, or 13 in Hebrew leap years.
  • MonthPickerLayout formats labels with Intl.DateTimeFormat in the picker's calendar system.
  • Children of MonthPickerLayout are the template of a cell, rendered once per month inside a cell context. The children are required, usually <MonthPickerCell />, which shows the formatted label.
  • useMonthPickerCellContext() returns { col, date, fields, label }; date is the first day of the month. Take month numbers from label or fields, never from the ISO date string.
  • locale and calendar are root props; the layouts accept their own locale override.