@fluentui/react-calendar-compat 0.4.3 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -2
- package/lib/components/CalendarYear/CalendarYear.js +3 -2
- package/lib/components/CalendarYear/CalendarYear.js.map +1 -1
- package/lib-commonjs/components/CalendarYear/CalendarYear.js +3 -2
- package/lib-commonjs/components/CalendarYear/CalendarYear.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
# Change Log - @fluentui/react-calendar-compat
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Mon, 29 Jun 2026 15:14:11 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
+
## [0.4.4](https://github.com/microsoft/fluentui/tree/@fluentui/react-calendar-compat_v0.4.4)
|
|
8
|
+
|
|
9
|
+
Mon, 29 Jun 2026 15:14:11 GMT
|
|
10
|
+
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-calendar-compat_v0.4.3..@fluentui/react-calendar-compat_v0.4.4)
|
|
11
|
+
|
|
12
|
+
### Patches
|
|
13
|
+
|
|
14
|
+
- fix(Calendar): year prev/next buttons don't lose focus when they become disabled ([PR #36343](https://github.com/microsoft/fluentui/pull/36343) by sarah.higley@microsoft.com)
|
|
15
|
+
|
|
7
16
|
## [0.4.3](https://github.com/microsoft/fluentui/tree/@fluentui/react-calendar-compat_v0.4.3)
|
|
8
17
|
|
|
9
|
-
Wed, 24 Jun 2026 11:
|
|
18
|
+
Wed, 24 Jun 2026 11:10:08 GMT
|
|
10
19
|
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-calendar-compat_v0.4.2..@fluentui/react-calendar-compat_v0.4.3)
|
|
11
20
|
|
|
12
21
|
### Patches
|
|
@@ -139,11 +139,12 @@ const CalendarYearNavArrow = (props)=>{
|
|
|
139
139
|
};
|
|
140
140
|
return /*#__PURE__*/ React.createElement("button", {
|
|
141
141
|
className: mergeClasses(classNames.navigationButton, disabled && classNames.disabled),
|
|
142
|
+
"aria-disabled": disabled,
|
|
143
|
+
tabIndex: disabled ? -1 : undefined,
|
|
142
144
|
onClick: !disabled ? onNavigate : undefined,
|
|
143
145
|
onKeyDown: !disabled ? onKeyDown : undefined,
|
|
144
146
|
type: "button",
|
|
145
|
-
title: ariaLabelString
|
|
146
|
-
disabled: disabled
|
|
147
|
+
title: ariaLabelString
|
|
147
148
|
}, direction === CalendarYearNavDirection.Previous ? navigationIcons.upNavigation : navigationIcons.downNavigation);
|
|
148
149
|
};
|
|
149
150
|
CalendarYearNavArrow.displayName = 'CalendarYearNavArrow';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/CalendarYear/CalendarYear.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Enter, Space } from '@fluentui/keyboard-keys';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { mergeClasses } from '@griffel/react';\nimport { useCalendarYearStyles_unstable } from './useCalendarYearStyles.styles';\nimport { DirectionalSlideIn } from '../../utils/calendarMotions';\nimport type {\n CalendarYearStrings,\n CalendarYearProps,\n CalendarYearRange,\n CalendarYearHeaderProps,\n} from './CalendarYear.types';\n\nconst CELL_COUNT = 12;\nconst CELLS_PER_ROW = 4;\n\nconst DefaultCalendarYearStrings: CalendarYearStrings = {\n prevRangeAriaLabel: undefined,\n nextRangeAriaLabel: undefined,\n};\ninterface CalendarYearGrid {\n focus(): void;\n}\n\ninterface CalendarYearGridCellProps extends CalendarYearProps {\n year: number;\n current?: boolean;\n selected?: boolean;\n disabled?: boolean;\n onSelectYear?: (year: number) => void;\n onRenderYear?: (year: number) => React.ReactNode;\n}\n\ninterface CalendarYearGridProps extends CalendarYearProps, CalendarYearRange {\n selectedYear?: number;\n animateBackwards?: boolean;\n componentRef?: React.RefObject<CalendarYearGridCell | null>;\n}\n\ninterface CalendarYearGridCell {\n focus(): void;\n}\n\nconst CalendarYearGridCell: React.FunctionComponent<CalendarYearGridCellProps> = props => {\n const {\n className,\n highlightCurrentYear,\n highlightSelectedYear,\n year,\n selected,\n disabled,\n componentRef,\n onSelectYear,\n onRenderYear,\n } = props;\n\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n React.useImperativeHandle(\n componentRef,\n () => ({\n focus() {\n buttonRef.current?.focus?.();\n },\n }),\n [],\n );\n\n const onClick = () => {\n onSelectYear?.(year);\n };\n\n const onKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter) {\n onSelectYear?.(year);\n }\n };\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n highlightCurrent: highlightCurrentYear,\n highlightSelected: highlightSelectedYear,\n });\n\n return (\n <button\n className={mergeClasses(classNames.itemButton, selected && classNames.selected, disabled && classNames.disabled)}\n type=\"button\"\n role=\"gridcell\"\n onClick={!disabled ? onClick : undefined}\n onKeyDown={!disabled ? onKeyDown : undefined}\n disabled={disabled}\n aria-selected={selected}\n ref={buttonRef}\n >\n {onRenderYear?.(year) ?? year}\n </button>\n );\n};\nCalendarYearGridCell.displayName = 'CalendarYearGridCell';\n\nconst CalendarYearGrid: React.FunctionComponent<CalendarYearGridProps> = props => {\n const {\n className,\n fromYear,\n toYear,\n animationDirection,\n animateBackwards,\n minYear,\n maxYear,\n onSelectYear,\n selectedYear,\n componentRef,\n } = props;\n\n const selectedCellRef = React.useRef<CalendarYearGridCell>(null);\n\n const currentCellRef = React.useRef<CalendarYearGridCell>(null);\n\n React.useImperativeHandle(\n componentRef,\n () => ({\n focus() {\n (selectedCellRef.current || currentCellRef.current)?.focus?.();\n },\n }),\n [],\n );\n\n const renderCell = (yearToRender: number): React.ReactNode => {\n const selected = yearToRender === selectedYear;\n const disabled =\n (minYear !== undefined && yearToRender < minYear) || (maxYear !== undefined && yearToRender > maxYear);\n const current = yearToRender === new Date().getFullYear();\n\n return (\n <CalendarYearGridCell\n {...props}\n key={yearToRender}\n year={yearToRender}\n selected={selected}\n current={current}\n disabled={disabled}\n onSelectYear={onSelectYear}\n componentRef={selected ? selectedCellRef : current ? currentCellRef : undefined}\n />\n );\n };\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n animateBackwards,\n animationDirection,\n });\n\n const onRenderYear = (value: number) => {\n return props.onRenderYear?.(value) ?? value;\n };\n\n const gridAriaLabel = `${onRenderYear(fromYear)} - ${onRenderYear(toYear)}`;\n\n let year = fromYear;\n const cells: React.ReactNode[][] = [];\n\n for (let i = 0; i < (toYear - fromYear + 1) / CELLS_PER_ROW; i++) {\n cells.push([]);\n for (let j = 0; j < CELLS_PER_ROW; j++) {\n cells[i].push(renderCell(year));\n year++;\n }\n }\n\n const arrowNavigationAttributes = useArrowNavigationGroup({ axis: 'grid' });\n\n return (\n <div {...arrowNavigationAttributes} className={classNames.gridContainer} role=\"grid\" aria-label={gridAriaLabel}>\n {cells.map((cellRow: React.ReactNode[], index: number) => {\n return (\n <DirectionalSlideIn\n key={index}\n replayKey={fromYear}\n animationDirection={animationDirection}\n animateBackwards={animateBackwards}\n >\n <div role=\"row\" className={classNames.buttonRow}>\n {cellRow}\n </div>\n </DirectionalSlideIn>\n );\n })}\n </div>\n );\n};\nCalendarYearGrid.displayName = 'CalendarYearGrid';\n\nconst CalendarYearNavDirection = {\n Previous: 0 as const,\n Next: 1 as const,\n};\n\ninterface CalendarYearNavArrowProps extends CalendarYearHeaderProps {\n direction: (typeof CalendarYearNavDirection)[keyof typeof CalendarYearNavDirection];\n}\n\nconst CalendarYearNavArrow: React.FunctionComponent<CalendarYearNavArrowProps> = props => {\n const {\n className,\n strings = DefaultCalendarYearStrings,\n direction,\n onSelectPrev,\n onSelectNext,\n fromYear,\n toYear,\n maxYear,\n minYear,\n navigationIcons,\n } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n const ariaLabel =\n direction === CalendarYearNavDirection.Previous ? strings.prevRangeAriaLabel : strings.nextRangeAriaLabel;\n const newRangeOffset = direction === CalendarYearNavDirection.Previous ? -CELL_COUNT : CELL_COUNT;\n const newRange = { fromYear: fromYear + newRangeOffset, toYear: toYear + newRangeOffset };\n const ariaLabelString = ariaLabel ? (typeof ariaLabel === 'string' ? ariaLabel : ariaLabel(newRange)) : undefined;\n const disabled =\n direction === CalendarYearNavDirection.Previous\n ? minYear !== undefined && fromYear < minYear\n : maxYear !== undefined && props.fromYear + CELL_COUNT > maxYear;\n\n const onNavigate = () => {\n direction === CalendarYearNavDirection.Previous ? onSelectPrev?.() : onSelectNext?.();\n };\n\n const onKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter) {\n onNavigate();\n }\n };\n\n return (\n <button\n className={mergeClasses(classNames.navigationButton, disabled && classNames.disabled)}\n onClick={!disabled ? onNavigate : undefined}\n onKeyDown={!disabled ? onKeyDown : undefined}\n type=\"button\"\n title={ariaLabelString}\n disabled={disabled}\n >\n {direction === CalendarYearNavDirection.Previous ? navigationIcons.upNavigation : navigationIcons.downNavigation}\n </button>\n );\n};\nCalendarYearNavArrow.displayName = 'CalendarYearNavArrow';\n\nconst CalendarYearNav: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const { className } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n return (\n <div className={classNames.navigationButtonsContainer}>\n <CalendarYearNavArrow {...props} direction={CalendarYearNavDirection.Previous} />\n <CalendarYearNavArrow {...props} direction={CalendarYearNavDirection.Next} />\n </div>\n );\n};\nCalendarYearNav.displayName = 'CalendarYearNav';\n\nconst CalendarYearTitle: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const {\n className,\n fromYear,\n toYear,\n strings = DefaultCalendarYearStrings,\n animateBackwards,\n animationDirection,\n } = props;\n\n const onHeaderSelect = () => {\n props.onHeaderSelect?.(true);\n };\n\n const onHeaderKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter || ev.key === Space) {\n onHeaderSelect();\n }\n };\n\n const onRenderYear = (year: number) => {\n return props.onRenderYear?.(year) ?? year;\n };\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection,\n });\n\n if (props.onHeaderSelect) {\n const rangeAriaLabel = strings.rangeAriaLabel;\n const headerAriaLabelFormatString = strings.headerAriaLabelFormatString;\n const currentDateRange = rangeAriaLabel\n ? typeof rangeAriaLabel === 'string'\n ? rangeAriaLabel\n : rangeAriaLabel(props)\n : undefined;\n\n const ariaLabel = headerAriaLabelFormatString\n ? headerAriaLabelFormatString.replace('{0}', currentDateRange ?? '')\n : currentDateRange;\n\n return (\n <button\n className={classNames.currentItemButton}\n onClick={onHeaderSelect}\n onKeyDown={onHeaderKeyDown}\n aria-label={ariaLabel}\n role=\"button\"\n type=\"button\"\n >\n <span aria-live=\"assertive\" aria-atomic=\"true\">\n {onRenderYear(fromYear)} - {onRenderYear(toYear)}\n </span>\n </button>\n );\n }\n\n return (\n <div className={classNames.current}>\n {onRenderYear(fromYear)} - {onRenderYear(toYear)}\n </div>\n );\n};\nCalendarYearTitle.displayName = 'CalendarYearTitle';\n\nconst CalendarYearHeader: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const { className, animateBackwards, animationDirection, onRenderTitle } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection,\n });\n\n return (\n <div className={classNames.headerContainer}>\n {onRenderTitle?.(props) ?? <CalendarYearTitle {...props} />}\n <CalendarYearNav {...props} />\n </div>\n );\n};\nCalendarYearHeader.displayName = 'CalendarYearHeader';\n\nfunction useAnimateBackwards(fromYear: number): boolean | undefined {\n const previousFromYearRef = React.useRef<number | undefined>(undefined);\n React.useEffect(() => {\n previousFromYearRef.current = fromYear;\n });\n // eslint-disable-next-line react-hooks/refs\n const previousFromYear = previousFromYearRef.current;\n\n // eslint-disable-next-line react-hooks/refs\n if (previousFromYear === undefined || previousFromYear === fromYear) {\n return undefined;\n // eslint-disable-next-line react-hooks/refs\n } else if (previousFromYear > fromYear) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction useYearRangeState({ selectedYear, navigatedYear, onNavigateDate }: CalendarYearProps) {\n const rangeYear = React.useMemo(() => {\n return selectedYear || navigatedYear || Math.floor(new Date().getFullYear() / 10) * 10;\n }, [navigatedYear, selectedYear]);\n\n const [fromYear, setFromYear] = React.useState<number>(rangeYear);\n\n const onNavNext = () => {\n const newFromYear = fromYear + CELL_COUNT;\n setFromYear(newFromYear);\n onNavigateDate?.(newFromYear);\n };\n\n const onNavPrevious = () => {\n const newFromYear = fromYear - CELL_COUNT;\n setFromYear(newFromYear);\n onNavigateDate?.(newFromYear);\n };\n\n React.useEffect(() => {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setFromYear(rangeYear);\n }, [rangeYear]);\n\n const toYear = fromYear + CELL_COUNT - 1;\n\n return [fromYear, toYear, onNavNext, onNavPrevious] as const;\n}\n\n/**\n * @internal\n */\nexport const CalendarYear: React.FunctionComponent<CalendarYearProps> = props => {\n const [fromYear, toYear, onNavNext, onNavPrevious] = useYearRangeState(props);\n const animateBackwards = useAnimateBackwards(fromYear);\n\n const gridRef = React.useRef<CalendarYearGrid>(null);\n\n React.useImperativeHandle(props.componentRef, () => ({\n focus() {\n gridRef.current?.focus?.();\n },\n }));\n\n const { className } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n return (\n <div className={classNames.root}>\n <CalendarYearHeader\n {...props}\n fromYear={fromYear}\n toYear={toYear}\n onSelectPrev={onNavPrevious}\n onSelectNext={onNavNext}\n animateBackwards={animateBackwards}\n />\n <CalendarYearGrid\n {...props}\n fromYear={fromYear}\n toYear={toYear}\n animateBackwards={animateBackwards}\n componentRef={gridRef}\n />\n </div>\n );\n};\nCalendarYear.displayName = 'CalendarYear';\n"],"names":["React","Enter","Space","useArrowNavigationGroup","mergeClasses","useCalendarYearStyles_unstable","DirectionalSlideIn","CELL_COUNT","CELLS_PER_ROW","DefaultCalendarYearStrings","prevRangeAriaLabel","undefined","nextRangeAriaLabel","CalendarYearGridCell","props","className","highlightCurrentYear","highlightSelectedYear","year","selected","disabled","componentRef","onSelectYear","onRenderYear","buttonRef","useRef","useImperativeHandle","focus","current","onClick","onKeyDown","ev","key","classNames","highlightCurrent","highlightSelected","button","itemButton","type","role","aria-selected","ref","displayName","CalendarYearGrid","fromYear","toYear","animationDirection","animateBackwards","minYear","maxYear","selectedYear","selectedCellRef","currentCellRef","renderCell","yearToRender","Date","getFullYear","value","gridAriaLabel","cells","i","push","j","arrowNavigationAttributes","axis","div","gridContainer","aria-label","map","cellRow","index","replayKey","buttonRow","CalendarYearNavDirection","Previous","Next","CalendarYearNavArrow","strings","direction","onSelectPrev","onSelectNext","navigationIcons","ariaLabel","newRangeOffset","newRange","ariaLabelString","onNavigate","navigationButton","title","upNavigation","downNavigation","CalendarYearNav","navigationButtonsContainer","CalendarYearTitle","onHeaderSelect","onHeaderKeyDown","hasHeaderClickCallback","rangeAriaLabel","headerAriaLabelFormatString","currentDateRange","replace","currentItemButton","span","aria-live","aria-atomic","CalendarYearHeader","onRenderTitle","headerContainer","useAnimateBackwards","previousFromYearRef","useEffect","previousFromYear","useYearRangeState","navigatedYear","onNavigateDate","rangeYear","useMemo","Math","floor","setFromYear","useState","onNavNext","newFromYear","onNavPrevious","CalendarYear","gridRef","root"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/components/CalendarYear/CalendarYear.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Enter, Space } from '@fluentui/keyboard-keys';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { mergeClasses } from '@griffel/react';\nimport { useCalendarYearStyles_unstable } from './useCalendarYearStyles.styles';\nimport { DirectionalSlideIn } from '../../utils/calendarMotions';\nimport type {\n CalendarYearStrings,\n CalendarYearProps,\n CalendarYearRange,\n CalendarYearHeaderProps,\n} from './CalendarYear.types';\n\nconst CELL_COUNT = 12;\nconst CELLS_PER_ROW = 4;\n\nconst DefaultCalendarYearStrings: CalendarYearStrings = {\n prevRangeAriaLabel: undefined,\n nextRangeAriaLabel: undefined,\n};\ninterface CalendarYearGrid {\n focus(): void;\n}\n\ninterface CalendarYearGridCellProps extends CalendarYearProps {\n year: number;\n current?: boolean;\n selected?: boolean;\n disabled?: boolean;\n onSelectYear?: (year: number) => void;\n onRenderYear?: (year: number) => React.ReactNode;\n}\n\ninterface CalendarYearGridProps extends CalendarYearProps, CalendarYearRange {\n selectedYear?: number;\n animateBackwards?: boolean;\n componentRef?: React.RefObject<CalendarYearGridCell | null>;\n}\n\ninterface CalendarYearGridCell {\n focus(): void;\n}\n\nconst CalendarYearGridCell: React.FunctionComponent<CalendarYearGridCellProps> = props => {\n const {\n className,\n highlightCurrentYear,\n highlightSelectedYear,\n year,\n selected,\n disabled,\n componentRef,\n onSelectYear,\n onRenderYear,\n } = props;\n\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n React.useImperativeHandle(\n componentRef,\n () => ({\n focus() {\n buttonRef.current?.focus?.();\n },\n }),\n [],\n );\n\n const onClick = () => {\n onSelectYear?.(year);\n };\n\n const onKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter) {\n onSelectYear?.(year);\n }\n };\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n highlightCurrent: highlightCurrentYear,\n highlightSelected: highlightSelectedYear,\n });\n\n return (\n <button\n className={mergeClasses(classNames.itemButton, selected && classNames.selected, disabled && classNames.disabled)}\n type=\"button\"\n role=\"gridcell\"\n onClick={!disabled ? onClick : undefined}\n onKeyDown={!disabled ? onKeyDown : undefined}\n disabled={disabled}\n aria-selected={selected}\n ref={buttonRef}\n >\n {onRenderYear?.(year) ?? year}\n </button>\n );\n};\nCalendarYearGridCell.displayName = 'CalendarYearGridCell';\n\nconst CalendarYearGrid: React.FunctionComponent<CalendarYearGridProps> = props => {\n const {\n className,\n fromYear,\n toYear,\n animationDirection,\n animateBackwards,\n minYear,\n maxYear,\n onSelectYear,\n selectedYear,\n componentRef,\n } = props;\n\n const selectedCellRef = React.useRef<CalendarYearGridCell>(null);\n\n const currentCellRef = React.useRef<CalendarYearGridCell>(null);\n\n React.useImperativeHandle(\n componentRef,\n () => ({\n focus() {\n (selectedCellRef.current || currentCellRef.current)?.focus?.();\n },\n }),\n [],\n );\n\n const renderCell = (yearToRender: number): React.ReactNode => {\n const selected = yearToRender === selectedYear;\n const disabled =\n (minYear !== undefined && yearToRender < minYear) || (maxYear !== undefined && yearToRender > maxYear);\n const current = yearToRender === new Date().getFullYear();\n\n return (\n <CalendarYearGridCell\n {...props}\n key={yearToRender}\n year={yearToRender}\n selected={selected}\n current={current}\n disabled={disabled}\n onSelectYear={onSelectYear}\n componentRef={selected ? selectedCellRef : current ? currentCellRef : undefined}\n />\n );\n };\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n animateBackwards,\n animationDirection,\n });\n\n const onRenderYear = (value: number) => {\n return props.onRenderYear?.(value) ?? value;\n };\n\n const gridAriaLabel = `${onRenderYear(fromYear)} - ${onRenderYear(toYear)}`;\n\n let year = fromYear;\n const cells: React.ReactNode[][] = [];\n\n for (let i = 0; i < (toYear - fromYear + 1) / CELLS_PER_ROW; i++) {\n cells.push([]);\n for (let j = 0; j < CELLS_PER_ROW; j++) {\n cells[i].push(renderCell(year));\n year++;\n }\n }\n\n const arrowNavigationAttributes = useArrowNavigationGroup({ axis: 'grid' });\n\n return (\n <div {...arrowNavigationAttributes} className={classNames.gridContainer} role=\"grid\" aria-label={gridAriaLabel}>\n {cells.map((cellRow: React.ReactNode[], index: number) => {\n return (\n <DirectionalSlideIn\n key={index}\n replayKey={fromYear}\n animationDirection={animationDirection}\n animateBackwards={animateBackwards}\n >\n <div role=\"row\" className={classNames.buttonRow}>\n {cellRow}\n </div>\n </DirectionalSlideIn>\n );\n })}\n </div>\n );\n};\nCalendarYearGrid.displayName = 'CalendarYearGrid';\n\nconst CalendarYearNavDirection = {\n Previous: 0 as const,\n Next: 1 as const,\n};\n\ninterface CalendarYearNavArrowProps extends CalendarYearHeaderProps {\n direction: (typeof CalendarYearNavDirection)[keyof typeof CalendarYearNavDirection];\n}\n\nconst CalendarYearNavArrow: React.FunctionComponent<CalendarYearNavArrowProps> = props => {\n const {\n className,\n strings = DefaultCalendarYearStrings,\n direction,\n onSelectPrev,\n onSelectNext,\n fromYear,\n toYear,\n maxYear,\n minYear,\n navigationIcons,\n } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n const ariaLabel =\n direction === CalendarYearNavDirection.Previous ? strings.prevRangeAriaLabel : strings.nextRangeAriaLabel;\n const newRangeOffset = direction === CalendarYearNavDirection.Previous ? -CELL_COUNT : CELL_COUNT;\n const newRange = { fromYear: fromYear + newRangeOffset, toYear: toYear + newRangeOffset };\n const ariaLabelString = ariaLabel ? (typeof ariaLabel === 'string' ? ariaLabel : ariaLabel(newRange)) : undefined;\n const disabled =\n direction === CalendarYearNavDirection.Previous\n ? minYear !== undefined && fromYear < minYear\n : maxYear !== undefined && props.fromYear + CELL_COUNT > maxYear;\n\n const onNavigate = () => {\n direction === CalendarYearNavDirection.Previous ? onSelectPrev?.() : onSelectNext?.();\n };\n\n const onKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter) {\n onNavigate();\n }\n };\n\n return (\n <button\n className={mergeClasses(classNames.navigationButton, disabled && classNames.disabled)}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : undefined}\n onClick={!disabled ? onNavigate : undefined}\n onKeyDown={!disabled ? onKeyDown : undefined}\n type=\"button\"\n title={ariaLabelString}\n >\n {direction === CalendarYearNavDirection.Previous ? navigationIcons.upNavigation : navigationIcons.downNavigation}\n </button>\n );\n};\nCalendarYearNavArrow.displayName = 'CalendarYearNavArrow';\n\nconst CalendarYearNav: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const { className } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n return (\n <div className={classNames.navigationButtonsContainer}>\n <CalendarYearNavArrow {...props} direction={CalendarYearNavDirection.Previous} />\n <CalendarYearNavArrow {...props} direction={CalendarYearNavDirection.Next} />\n </div>\n );\n};\nCalendarYearNav.displayName = 'CalendarYearNav';\n\nconst CalendarYearTitle: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const {\n className,\n fromYear,\n toYear,\n strings = DefaultCalendarYearStrings,\n animateBackwards,\n animationDirection,\n } = props;\n\n const onHeaderSelect = () => {\n props.onHeaderSelect?.(true);\n };\n\n const onHeaderKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter || ev.key === Space) {\n onHeaderSelect();\n }\n };\n\n const onRenderYear = (year: number) => {\n return props.onRenderYear?.(year) ?? year;\n };\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection,\n });\n\n if (props.onHeaderSelect) {\n const rangeAriaLabel = strings.rangeAriaLabel;\n const headerAriaLabelFormatString = strings.headerAriaLabelFormatString;\n const currentDateRange = rangeAriaLabel\n ? typeof rangeAriaLabel === 'string'\n ? rangeAriaLabel\n : rangeAriaLabel(props)\n : undefined;\n\n const ariaLabel = headerAriaLabelFormatString\n ? headerAriaLabelFormatString.replace('{0}', currentDateRange ?? '')\n : currentDateRange;\n\n return (\n <button\n className={classNames.currentItemButton}\n onClick={onHeaderSelect}\n onKeyDown={onHeaderKeyDown}\n aria-label={ariaLabel}\n role=\"button\"\n type=\"button\"\n >\n <span aria-live=\"assertive\" aria-atomic=\"true\">\n {onRenderYear(fromYear)} - {onRenderYear(toYear)}\n </span>\n </button>\n );\n }\n\n return (\n <div className={classNames.current}>\n {onRenderYear(fromYear)} - {onRenderYear(toYear)}\n </div>\n );\n};\nCalendarYearTitle.displayName = 'CalendarYearTitle';\n\nconst CalendarYearHeader: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const { className, animateBackwards, animationDirection, onRenderTitle } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection,\n });\n\n return (\n <div className={classNames.headerContainer}>\n {onRenderTitle?.(props) ?? <CalendarYearTitle {...props} />}\n <CalendarYearNav {...props} />\n </div>\n );\n};\nCalendarYearHeader.displayName = 'CalendarYearHeader';\n\nfunction useAnimateBackwards(fromYear: number): boolean | undefined {\n const previousFromYearRef = React.useRef<number | undefined>(undefined);\n React.useEffect(() => {\n previousFromYearRef.current = fromYear;\n });\n // eslint-disable-next-line react-hooks/refs\n const previousFromYear = previousFromYearRef.current;\n\n // eslint-disable-next-line react-hooks/refs\n if (previousFromYear === undefined || previousFromYear === fromYear) {\n return undefined;\n // eslint-disable-next-line react-hooks/refs\n } else if (previousFromYear > fromYear) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction useYearRangeState({ selectedYear, navigatedYear, onNavigateDate }: CalendarYearProps) {\n const rangeYear = React.useMemo(() => {\n return selectedYear || navigatedYear || Math.floor(new Date().getFullYear() / 10) * 10;\n }, [navigatedYear, selectedYear]);\n\n const [fromYear, setFromYear] = React.useState<number>(rangeYear);\n\n const onNavNext = () => {\n const newFromYear = fromYear + CELL_COUNT;\n setFromYear(newFromYear);\n onNavigateDate?.(newFromYear);\n };\n\n const onNavPrevious = () => {\n const newFromYear = fromYear - CELL_COUNT;\n setFromYear(newFromYear);\n onNavigateDate?.(newFromYear);\n };\n\n React.useEffect(() => {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setFromYear(rangeYear);\n }, [rangeYear]);\n\n const toYear = fromYear + CELL_COUNT - 1;\n\n return [fromYear, toYear, onNavNext, onNavPrevious] as const;\n}\n\n/**\n * @internal\n */\nexport const CalendarYear: React.FunctionComponent<CalendarYearProps> = props => {\n const [fromYear, toYear, onNavNext, onNavPrevious] = useYearRangeState(props);\n const animateBackwards = useAnimateBackwards(fromYear);\n\n const gridRef = React.useRef<CalendarYearGrid>(null);\n\n React.useImperativeHandle(props.componentRef, () => ({\n focus() {\n gridRef.current?.focus?.();\n },\n }));\n\n const { className } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n return (\n <div className={classNames.root}>\n <CalendarYearHeader\n {...props}\n fromYear={fromYear}\n toYear={toYear}\n onSelectPrev={onNavPrevious}\n onSelectNext={onNavNext}\n animateBackwards={animateBackwards}\n />\n <CalendarYearGrid\n {...props}\n fromYear={fromYear}\n toYear={toYear}\n animateBackwards={animateBackwards}\n componentRef={gridRef}\n />\n </div>\n );\n};\nCalendarYear.displayName = 'CalendarYear';\n"],"names":["React","Enter","Space","useArrowNavigationGroup","mergeClasses","useCalendarYearStyles_unstable","DirectionalSlideIn","CELL_COUNT","CELLS_PER_ROW","DefaultCalendarYearStrings","prevRangeAriaLabel","undefined","nextRangeAriaLabel","CalendarYearGridCell","props","className","highlightCurrentYear","highlightSelectedYear","year","selected","disabled","componentRef","onSelectYear","onRenderYear","buttonRef","useRef","useImperativeHandle","focus","current","onClick","onKeyDown","ev","key","classNames","highlightCurrent","highlightSelected","button","itemButton","type","role","aria-selected","ref","displayName","CalendarYearGrid","fromYear","toYear","animationDirection","animateBackwards","minYear","maxYear","selectedYear","selectedCellRef","currentCellRef","renderCell","yearToRender","Date","getFullYear","value","gridAriaLabel","cells","i","push","j","arrowNavigationAttributes","axis","div","gridContainer","aria-label","map","cellRow","index","replayKey","buttonRow","CalendarYearNavDirection","Previous","Next","CalendarYearNavArrow","strings","direction","onSelectPrev","onSelectNext","navigationIcons","ariaLabel","newRangeOffset","newRange","ariaLabelString","onNavigate","navigationButton","aria-disabled","tabIndex","title","upNavigation","downNavigation","CalendarYearNav","navigationButtonsContainer","CalendarYearTitle","onHeaderSelect","onHeaderKeyDown","hasHeaderClickCallback","rangeAriaLabel","headerAriaLabelFormatString","currentDateRange","replace","currentItemButton","span","aria-live","aria-atomic","CalendarYearHeader","onRenderTitle","headerContainer","useAnimateBackwards","previousFromYearRef","useEffect","previousFromYear","useYearRangeState","navigatedYear","onNavigateDate","rangeYear","useMemo","Math","floor","setFromYear","useState","onNavNext","newFromYear","onNavPrevious","CalendarYear","gridRef","root"],"mappings":"AAAA;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,KAAK,EAAEC,KAAK,QAAQ,0BAA0B;AACvD,SAASC,uBAAuB,QAAQ,0BAA0B;AAClE,SAASC,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,8BAA8B,QAAQ,iCAAiC;AAChF,SAASC,kBAAkB,QAAQ,8BAA8B;AAQjE,MAAMC,aAAa;AACnB,MAAMC,gBAAgB;AAEtB,MAAMC,6BAAkD;IACtDC,oBAAoBC;IACpBC,oBAAoBD;AACtB;AAwBA,MAAME,uBAA2EC,CAAAA;IAC/E,MAAM,EACJC,SAAS,EACTC,oBAAoB,EACpBC,qBAAqB,EACrBC,IAAI,EACJC,QAAQ,EACRC,QAAQ,EACRC,YAAY,EACZC,YAAY,EACZC,YAAY,EACb,GAAGT;IAEJ,MAAMU,YAAYxB,MAAMyB,MAAM,CAAoB;IAElDzB,MAAM0B,mBAAmB,CACvBL,cACA,IAAO,CAAA;YACLM;oBACEH,0BAAAA;iBAAAA,qBAAAA,UAAUI,OAAO,cAAjBJ,0CAAAA,2BAAAA,mBAAmBG,KAAK,cAAxBH,+CAAAA,8BAAAA;YACF;QACF,CAAA,GACA,EAAE;IAGJ,MAAMK,UAAU;QACdP,yBAAAA,mCAAAA,aAAeJ;IACjB;IAEA,MAAMY,YAAY,CAACC;QACjB,IAAIA,GAAGC,GAAG,KAAK/B,OAAO;YACpBqB,yBAAAA,mCAAAA,aAAeJ;QACjB;IACF;IAEA,MAAMe,aAAa5B,+BAA+B;QAChDU;QACAmB,kBAAkBlB;QAClBmB,mBAAmBlB;IACrB;QAaKM;IAXL,qBACE,oBAACa;QACCrB,WAAWX,aAAa6B,WAAWI,UAAU,EAAElB,YAAYc,WAAWd,QAAQ,EAAEC,YAAYa,WAAWb,QAAQ;QAC/GkB,MAAK;QACLC,MAAK;QACLV,SAAS,CAACT,WAAWS,UAAUlB;QAC/BmB,WAAW,CAACV,WAAWU,YAAYnB;QACnCS,UAAUA;QACVoB,iBAAerB;QACfsB,KAAKjB;OAEJD,CAAAA,gBAAAA,yBAAAA,mCAAAA,aAAeL,mBAAfK,2BAAAA,gBAAwBL;AAG/B;AACAL,qBAAqB6B,WAAW,GAAG;AAEnC,MAAMC,mBAAmE7B,CAAAA;IACvE,MAAM,EACJC,SAAS,EACT6B,QAAQ,EACRC,MAAM,EACNC,kBAAkB,EAClBC,gBAAgB,EAChBC,OAAO,EACPC,OAAO,EACP3B,YAAY,EACZ4B,YAAY,EACZ7B,YAAY,EACb,GAAGP;IAEJ,MAAMqC,kBAAkBnD,MAAMyB,MAAM,CAAuB;IAE3D,MAAM2B,iBAAiBpD,MAAMyB,MAAM,CAAuB;IAE1DzB,MAAM0B,mBAAmB,CACvBL,cACA,IAAO,CAAA;YACLM;oBACE,QAACwB;iBAAAA,QAAAA,gBAAgBvB,OAAO,IAAIwB,eAAexB,OAAO,cAAjDuB,6BAAD,SAAA,AAACA,MAAoDxB,KAAK,cAA1D,6BAAA,YAACwB;YACH;QACF,CAAA,GACA,EAAE;IAGJ,MAAME,aAAa,CAACC;QAClB,MAAMnC,WAAWmC,iBAAiBJ;QAClC,MAAM9B,WACJ,AAAC4B,YAAYrC,aAAa2C,eAAeN,WAAaC,YAAYtC,aAAa2C,eAAeL;QAChG,MAAMrB,UAAU0B,iBAAiB,IAAIC,OAAOC,WAAW;QAEvD,qBACE,oBAAC3C;YACE,GAAGC,KAAK;YACTkB,KAAKsB;YACLpC,MAAMoC;YACNnC,UAAUA;YACVS,SAASA;YACTR,UAAUA;YACVE,cAAcA;YACdD,cAAcF,WAAWgC,kBAAkBvB,UAAUwB,iBAAiBzC;;IAG5E;IAEA,MAAMsB,aAAa5B,+BAA+B;QAChDU;QACAgC;QACAD;IACF;IAEA,MAAMvB,eAAe,CAACkC;YACb3C;YAAAA;QAAP,OAAOA,CAAAA,wBAAAA,sBAAAA,MAAMS,YAAY,cAAlBT,0CAAAA,yBAAAA,OAAqB2C,oBAArB3C,kCAAAA,uBAA+B2C;IACxC;IAEA,MAAMC,gBAAgB,GAAGnC,aAAaqB,UAAU,GAAG,EAAErB,aAAasB,SAAS;IAE3E,IAAI3B,OAAO0B;IACX,MAAMe,QAA6B,EAAE;IAErC,IAAK,IAAIC,IAAI,GAAGA,IAAI,AAACf,CAAAA,SAASD,WAAW,CAAA,IAAKpC,eAAeoD,IAAK;QAChED,MAAME,IAAI,CAAC,EAAE;QACb,IAAK,IAAIC,IAAI,GAAGA,IAAItD,eAAesD,IAAK;YACtCH,KAAK,CAACC,EAAE,CAACC,IAAI,CAACR,WAAWnC;YACzBA;QACF;IACF;IAEA,MAAM6C,4BAA4B5D,wBAAwB;QAAE6D,MAAM;IAAO;IAEzE,qBACE,oBAACC;QAAK,GAAGF,yBAAyB;QAAEhD,WAAWkB,WAAWiC,aAAa;QAAE3B,MAAK;QAAO4B,cAAYT;OAC9FC,MAAMS,GAAG,CAAC,CAACC,SAA4BC;QACtC,qBACE,oBAAChE;YACC0B,KAAKsC;YACLC,WAAW3B;YACXE,oBAAoBA;YACpBC,kBAAkBA;yBAElB,oBAACkB;YAAI1B,MAAK;YAAMxB,WAAWkB,WAAWuC,SAAS;WAC5CH;IAIT;AAGN;AACA1B,iBAAiBD,WAAW,GAAG;AAE/B,MAAM+B,2BAA2B;IAC/BC,UAAU;IACVC,MAAM;AACR;AAMA,MAAMC,uBAA2E9D,CAAAA;IAC/E,MAAM,EACJC,SAAS,EACT8D,UAAUpE,0BAA0B,EACpCqE,SAAS,EACTC,YAAY,EACZC,YAAY,EACZpC,QAAQ,EACRC,MAAM,EACNI,OAAO,EACPD,OAAO,EACPiC,eAAe,EAChB,GAAGnE;IAEJ,MAAMmB,aAAa5B,+BAA+B;QAChDU;IACF;IAEA,MAAMmE,YACJJ,cAAcL,yBAAyBC,QAAQ,GAAGG,QAAQnE,kBAAkB,GAAGmE,QAAQjE,kBAAkB;IAC3G,MAAMuE,iBAAiBL,cAAcL,yBAAyBC,QAAQ,GAAG,CAACnE,aAAaA;IACvF,MAAM6E,WAAW;QAAExC,UAAUA,WAAWuC;QAAgBtC,QAAQA,SAASsC;IAAe;IACxF,MAAME,kBAAkBH,YAAa,OAAOA,cAAc,WAAWA,YAAYA,UAAUE,YAAazE;IACxG,MAAMS,WACJ0D,cAAcL,yBAAyBC,QAAQ,GAC3C1B,YAAYrC,aAAaiC,WAAWI,UACpCC,YAAYtC,aAAaG,MAAM8B,QAAQ,GAAGrC,aAAa0C;IAE7D,MAAMqC,aAAa;QACjBR,cAAcL,yBAAyBC,QAAQ,GAAGK,yBAAAA,mCAAAA,iBAAmBC,yBAAAA,mCAAAA;IACvE;IAEA,MAAMlD,YAAY,CAACC;QACjB,IAAIA,GAAGC,GAAG,KAAK/B,OAAO;YACpBqF;QACF;IACF;IAEA,qBACE,oBAAClD;QACCrB,WAAWX,aAAa6B,WAAWsD,gBAAgB,EAAEnE,YAAYa,WAAWb,QAAQ;QACpFoE,iBAAepE;QACfqE,UAAUrE,WAAW,CAAC,IAAIT;QAC1BkB,SAAS,CAACT,WAAWkE,aAAa3E;QAClCmB,WAAW,CAACV,WAAWU,YAAYnB;QACnC2B,MAAK;QACLoD,OAAOL;OAENP,cAAcL,yBAAyBC,QAAQ,GAAGO,gBAAgBU,YAAY,GAAGV,gBAAgBW,cAAc;AAGtH;AACAhB,qBAAqBlC,WAAW,GAAG;AAEnC,MAAMmD,kBAAoE/E,CAAAA;IACxE,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,MAAMmB,aAAa5B,+BAA+B;QAChDU;IACF;IAEA,qBACE,oBAACkD;QAAIlD,WAAWkB,WAAW6D,0BAA0B;qBACnD,oBAAClB;QAAsB,GAAG9D,KAAK;QAAEgE,WAAWL,yBAAyBC,QAAQ;sBAC7E,oBAACE;QAAsB,GAAG9D,KAAK;QAAEgE,WAAWL,yBAAyBE,IAAI;;AAG/E;AACAkB,gBAAgBnD,WAAW,GAAG;AAE9B,MAAMqD,oBAAsEjF,CAAAA;IAC1E,MAAM,EACJC,SAAS,EACT6B,QAAQ,EACRC,MAAM,EACNgC,UAAUpE,0BAA0B,EACpCsC,gBAAgB,EAChBD,kBAAkB,EACnB,GAAGhC;IAEJ,MAAMkF,iBAAiB;YACrBlF;SAAAA,wBAAAA,MAAMkF,cAAc,cAApBlF,4CAAAA,2BAAAA,OAAuB;IACzB;IAEA,MAAMmF,kBAAkB,CAAClE;QACvB,IAAIA,GAAGC,GAAG,KAAK/B,SAAS8B,GAAGC,GAAG,KAAK9B,OAAO;YACxC8F;QACF;IACF;IAEA,MAAMzE,eAAe,CAACL;YACbJ;YAAAA;QAAP,OAAOA,CAAAA,wBAAAA,sBAAAA,MAAMS,YAAY,cAAlBT,0CAAAA,yBAAAA,OAAqBI,mBAArBJ,kCAAAA,uBAA8BI;IACvC;IAEA,MAAMe,aAAa5B,+BAA+B;QAChDU;QACAmF,wBAAwB,CAAC,CAACpF,MAAMkF,cAAc;QAC9CjD;QACAD;IACF;IAEA,IAAIhC,MAAMkF,cAAc,EAAE;QACxB,MAAMG,iBAAiBtB,QAAQsB,cAAc;QAC7C,MAAMC,8BAA8BvB,QAAQuB,2BAA2B;QACvE,MAAMC,mBAAmBF,iBACrB,OAAOA,mBAAmB,WACxBA,iBACAA,eAAerF,SACjBH;QAEJ,MAAMuE,YAAYkB,8BACdA,4BAA4BE,OAAO,CAAC,OAAOD,6BAAAA,8BAAAA,mBAAoB,MAC/DA;QAEJ,qBACE,oBAACjE;YACCrB,WAAWkB,WAAWsE,iBAAiB;YACvC1E,SAASmE;YACTlE,WAAWmE;YACX9B,cAAYe;YACZ3C,MAAK;YACLD,MAAK;yBAEL,oBAACkE;YAAKC,aAAU;YAAYC,eAAY;WACrCnF,aAAaqB,WAAU,OAAIrB,aAAasB;IAIjD;IAEA,qBACE,oBAACoB;QAAIlD,WAAWkB,WAAWL,OAAO;OAC/BL,aAAaqB,WAAU,OAAIrB,aAAasB;AAG/C;AACAkD,kBAAkBrD,WAAW,GAAG;AAEhC,MAAMiE,qBAAuE7F,CAAAA;IAC3E,MAAM,EAAEC,SAAS,EAAEgC,gBAAgB,EAAED,kBAAkB,EAAE8D,aAAa,EAAE,GAAG9F;IAE3E,MAAMmB,aAAa5B,+BAA+B;QAChDU;QACAmF,wBAAwB,CAAC,CAACpF,MAAMkF,cAAc;QAC9CjD;QACAD;IACF;QAIK8D;IAFL,qBACE,oBAAC3C;QAAIlD,WAAWkB,WAAW4E,eAAe;OACvCD,CAAAA,iBAAAA,0BAAAA,oCAAAA,cAAgB9F,oBAAhB8F,4BAAAA,+BAA0B,oBAACb,mBAAsBjF,sBAClD,oBAAC+E,iBAAoB/E;AAG3B;AACA6F,mBAAmBjE,WAAW,GAAG;AAEjC,SAASoE,oBAAoBlE,QAAgB;IAC3C,MAAMmE,sBAAsB/G,MAAMyB,MAAM,CAAqBd;IAC7DX,MAAMgH,SAAS,CAAC;QACdD,oBAAoBnF,OAAO,GAAGgB;IAChC;IACA,4CAA4C;IAC5C,MAAMqE,mBAAmBF,oBAAoBnF,OAAO;IAEpD,4CAA4C;IAC5C,IAAIqF,qBAAqBtG,aAAasG,qBAAqBrE,UAAU;QACnE,OAAOjC;IACP,4CAA4C;IAC9C,OAAO,IAAIsG,mBAAmBrE,UAAU;QACtC,OAAO;IACT,OAAO;QACL,OAAO;IACT;AACF;AAEA,SAASsE,kBAAkB,EAAEhE,YAAY,EAAEiE,aAAa,EAAEC,cAAc,EAAqB;IAC3F,MAAMC,YAAYrH,MAAMsH,OAAO,CAAC;QAC9B,OAAOpE,gBAAgBiE,iBAAiBI,KAAKC,KAAK,CAAC,IAAIjE,OAAOC,WAAW,KAAK,MAAM;IACtF,GAAG;QAAC2D;QAAejE;KAAa;IAEhC,MAAM,CAACN,UAAU6E,YAAY,GAAGzH,MAAM0H,QAAQ,CAASL;IAEvD,MAAMM,YAAY;QAChB,MAAMC,cAAchF,WAAWrC;QAC/BkH,YAAYG;QACZR,2BAAAA,qCAAAA,eAAiBQ;IACnB;IAEA,MAAMC,gBAAgB;QACpB,MAAMD,cAAchF,WAAWrC;QAC/BkH,YAAYG;QACZR,2BAAAA,qCAAAA,eAAiBQ;IACnB;IAEA5H,MAAMgH,SAAS,CAAC;QACd,2DAA2D;QAC3DS,YAAYJ;IACd,GAAG;QAACA;KAAU;IAEd,MAAMxE,SAASD,WAAWrC,aAAa;IAEvC,OAAO;QAACqC;QAAUC;QAAQ8E;QAAWE;KAAc;AACrD;AAEA;;CAEC,GACD,OAAO,MAAMC,eAA2DhH,CAAAA;IACtE,MAAM,CAAC8B,UAAUC,QAAQ8E,WAAWE,cAAc,GAAGX,kBAAkBpG;IACvE,MAAMiC,mBAAmB+D,oBAAoBlE;IAE7C,MAAMmF,UAAU/H,MAAMyB,MAAM,CAAmB;IAE/CzB,MAAM0B,mBAAmB,CAACZ,MAAMO,YAAY,EAAE,IAAO,CAAA;YACnDM;oBACEoG,wBAAAA;iBAAAA,mBAAAA,QAAQnG,OAAO,cAAfmG,wCAAAA,yBAAAA,iBAAiBpG,KAAK,cAAtBoG,6CAAAA,4BAAAA;YACF;QACF,CAAA;IAEA,MAAM,EAAEhH,SAAS,EAAE,GAAGD;IAEtB,MAAMmB,aAAa5B,+BAA+B;QAChDU;IACF;IAEA,qBACE,oBAACkD;QAAIlD,WAAWkB,WAAW+F,IAAI;qBAC7B,oBAACrB;QACE,GAAG7F,KAAK;QACT8B,UAAUA;QACVC,QAAQA;QACRkC,cAAc8C;QACd7C,cAAc2C;QACd5E,kBAAkBA;sBAEpB,oBAACJ;QACE,GAAG7B,KAAK;QACT8B,UAAUA;QACVC,QAAQA;QACRE,kBAAkBA;QAClB1B,cAAc0G;;AAItB,EAAE;AACFD,aAAapF,WAAW,GAAG"}
|
|
@@ -150,11 +150,12 @@ const CalendarYearNavArrow = (props)=>{
|
|
|
150
150
|
};
|
|
151
151
|
return /*#__PURE__*/ _react.createElement("button", {
|
|
152
152
|
className: (0, _react1.mergeClasses)(classNames.navigationButton, disabled && classNames.disabled),
|
|
153
|
+
"aria-disabled": disabled,
|
|
154
|
+
tabIndex: disabled ? -1 : undefined,
|
|
153
155
|
onClick: !disabled ? onNavigate : undefined,
|
|
154
156
|
onKeyDown: !disabled ? onKeyDown : undefined,
|
|
155
157
|
type: "button",
|
|
156
|
-
title: ariaLabelString
|
|
157
|
-
disabled: disabled
|
|
158
|
+
title: ariaLabelString
|
|
158
159
|
}, direction === CalendarYearNavDirection.Previous ? navigationIcons.upNavigation : navigationIcons.downNavigation);
|
|
159
160
|
};
|
|
160
161
|
CalendarYearNavArrow.displayName = 'CalendarYearNavArrow';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/CalendarYear/CalendarYear.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Enter, Space } from '@fluentui/keyboard-keys';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { mergeClasses } from '@griffel/react';\nimport { useCalendarYearStyles_unstable } from './useCalendarYearStyles.styles';\nimport { DirectionalSlideIn } from '../../utils/calendarMotions';\nimport type {\n CalendarYearStrings,\n CalendarYearProps,\n CalendarYearRange,\n CalendarYearHeaderProps,\n} from './CalendarYear.types';\n\nconst CELL_COUNT = 12;\nconst CELLS_PER_ROW = 4;\n\nconst DefaultCalendarYearStrings: CalendarYearStrings = {\n prevRangeAriaLabel: undefined,\n nextRangeAriaLabel: undefined,\n};\ninterface CalendarYearGrid {\n focus(): void;\n}\n\ninterface CalendarYearGridCellProps extends CalendarYearProps {\n year: number;\n current?: boolean;\n selected?: boolean;\n disabled?: boolean;\n onSelectYear?: (year: number) => void;\n onRenderYear?: (year: number) => React.ReactNode;\n}\n\ninterface CalendarYearGridProps extends CalendarYearProps, CalendarYearRange {\n selectedYear?: number;\n animateBackwards?: boolean;\n componentRef?: React.RefObject<CalendarYearGridCell | null>;\n}\n\ninterface CalendarYearGridCell {\n focus(): void;\n}\n\nconst CalendarYearGridCell: React.FunctionComponent<CalendarYearGridCellProps> = props => {\n const {\n className,\n highlightCurrentYear,\n highlightSelectedYear,\n year,\n selected,\n disabled,\n componentRef,\n onSelectYear,\n onRenderYear,\n } = props;\n\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n React.useImperativeHandle(\n componentRef,\n () => ({\n focus() {\n buttonRef.current?.focus?.();\n },\n }),\n [],\n );\n\n const onClick = () => {\n onSelectYear?.(year);\n };\n\n const onKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter) {\n onSelectYear?.(year);\n }\n };\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n highlightCurrent: highlightCurrentYear,\n highlightSelected: highlightSelectedYear,\n });\n\n return (\n <button\n className={mergeClasses(classNames.itemButton, selected && classNames.selected, disabled && classNames.disabled)}\n type=\"button\"\n role=\"gridcell\"\n onClick={!disabled ? onClick : undefined}\n onKeyDown={!disabled ? onKeyDown : undefined}\n disabled={disabled}\n aria-selected={selected}\n ref={buttonRef}\n >\n {onRenderYear?.(year) ?? year}\n </button>\n );\n};\nCalendarYearGridCell.displayName = 'CalendarYearGridCell';\n\nconst CalendarYearGrid: React.FunctionComponent<CalendarYearGridProps> = props => {\n const {\n className,\n fromYear,\n toYear,\n animationDirection,\n animateBackwards,\n minYear,\n maxYear,\n onSelectYear,\n selectedYear,\n componentRef,\n } = props;\n\n const selectedCellRef = React.useRef<CalendarYearGridCell>(null);\n\n const currentCellRef = React.useRef<CalendarYearGridCell>(null);\n\n React.useImperativeHandle(\n componentRef,\n () => ({\n focus() {\n (selectedCellRef.current || currentCellRef.current)?.focus?.();\n },\n }),\n [],\n );\n\n const renderCell = (yearToRender: number): React.ReactNode => {\n const selected = yearToRender === selectedYear;\n const disabled =\n (minYear !== undefined && yearToRender < minYear) || (maxYear !== undefined && yearToRender > maxYear);\n const current = yearToRender === new Date().getFullYear();\n\n return (\n <CalendarYearGridCell\n {...props}\n key={yearToRender}\n year={yearToRender}\n selected={selected}\n current={current}\n disabled={disabled}\n onSelectYear={onSelectYear}\n componentRef={selected ? selectedCellRef : current ? currentCellRef : undefined}\n />\n );\n };\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n animateBackwards,\n animationDirection,\n });\n\n const onRenderYear = (value: number) => {\n return props.onRenderYear?.(value) ?? value;\n };\n\n const gridAriaLabel = `${onRenderYear(fromYear)} - ${onRenderYear(toYear)}`;\n\n let year = fromYear;\n const cells: React.ReactNode[][] = [];\n\n for (let i = 0; i < (toYear - fromYear + 1) / CELLS_PER_ROW; i++) {\n cells.push([]);\n for (let j = 0; j < CELLS_PER_ROW; j++) {\n cells[i].push(renderCell(year));\n year++;\n }\n }\n\n const arrowNavigationAttributes = useArrowNavigationGroup({ axis: 'grid' });\n\n return (\n <div {...arrowNavigationAttributes} className={classNames.gridContainer} role=\"grid\" aria-label={gridAriaLabel}>\n {cells.map((cellRow: React.ReactNode[], index: number) => {\n return (\n <DirectionalSlideIn\n key={index}\n replayKey={fromYear}\n animationDirection={animationDirection}\n animateBackwards={animateBackwards}\n >\n <div role=\"row\" className={classNames.buttonRow}>\n {cellRow}\n </div>\n </DirectionalSlideIn>\n );\n })}\n </div>\n );\n};\nCalendarYearGrid.displayName = 'CalendarYearGrid';\n\nconst CalendarYearNavDirection = {\n Previous: 0 as const,\n Next: 1 as const,\n};\n\ninterface CalendarYearNavArrowProps extends CalendarYearHeaderProps {\n direction: (typeof CalendarYearNavDirection)[keyof typeof CalendarYearNavDirection];\n}\n\nconst CalendarYearNavArrow: React.FunctionComponent<CalendarYearNavArrowProps> = props => {\n const {\n className,\n strings = DefaultCalendarYearStrings,\n direction,\n onSelectPrev,\n onSelectNext,\n fromYear,\n toYear,\n maxYear,\n minYear,\n navigationIcons,\n } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n const ariaLabel =\n direction === CalendarYearNavDirection.Previous ? strings.prevRangeAriaLabel : strings.nextRangeAriaLabel;\n const newRangeOffset = direction === CalendarYearNavDirection.Previous ? -CELL_COUNT : CELL_COUNT;\n const newRange = { fromYear: fromYear + newRangeOffset, toYear: toYear + newRangeOffset };\n const ariaLabelString = ariaLabel ? (typeof ariaLabel === 'string' ? ariaLabel : ariaLabel(newRange)) : undefined;\n const disabled =\n direction === CalendarYearNavDirection.Previous\n ? minYear !== undefined && fromYear < minYear\n : maxYear !== undefined && props.fromYear + CELL_COUNT > maxYear;\n\n const onNavigate = () => {\n direction === CalendarYearNavDirection.Previous ? onSelectPrev?.() : onSelectNext?.();\n };\n\n const onKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter) {\n onNavigate();\n }\n };\n\n return (\n <button\n className={mergeClasses(classNames.navigationButton, disabled && classNames.disabled)}\n onClick={!disabled ? onNavigate : undefined}\n onKeyDown={!disabled ? onKeyDown : undefined}\n type=\"button\"\n title={ariaLabelString}\n disabled={disabled}\n >\n {direction === CalendarYearNavDirection.Previous ? navigationIcons.upNavigation : navigationIcons.downNavigation}\n </button>\n );\n};\nCalendarYearNavArrow.displayName = 'CalendarYearNavArrow';\n\nconst CalendarYearNav: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const { className } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n return (\n <div className={classNames.navigationButtonsContainer}>\n <CalendarYearNavArrow {...props} direction={CalendarYearNavDirection.Previous} />\n <CalendarYearNavArrow {...props} direction={CalendarYearNavDirection.Next} />\n </div>\n );\n};\nCalendarYearNav.displayName = 'CalendarYearNav';\n\nconst CalendarYearTitle: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const {\n className,\n fromYear,\n toYear,\n strings = DefaultCalendarYearStrings,\n animateBackwards,\n animationDirection,\n } = props;\n\n const onHeaderSelect = () => {\n props.onHeaderSelect?.(true);\n };\n\n const onHeaderKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter || ev.key === Space) {\n onHeaderSelect();\n }\n };\n\n const onRenderYear = (year: number) => {\n return props.onRenderYear?.(year) ?? year;\n };\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection,\n });\n\n if (props.onHeaderSelect) {\n const rangeAriaLabel = strings.rangeAriaLabel;\n const headerAriaLabelFormatString = strings.headerAriaLabelFormatString;\n const currentDateRange = rangeAriaLabel\n ? typeof rangeAriaLabel === 'string'\n ? rangeAriaLabel\n : rangeAriaLabel(props)\n : undefined;\n\n const ariaLabel = headerAriaLabelFormatString\n ? headerAriaLabelFormatString.replace('{0}', currentDateRange ?? '')\n : currentDateRange;\n\n return (\n <button\n className={classNames.currentItemButton}\n onClick={onHeaderSelect}\n onKeyDown={onHeaderKeyDown}\n aria-label={ariaLabel}\n role=\"button\"\n type=\"button\"\n >\n <span aria-live=\"assertive\" aria-atomic=\"true\">\n {onRenderYear(fromYear)} - {onRenderYear(toYear)}\n </span>\n </button>\n );\n }\n\n return (\n <div className={classNames.current}>\n {onRenderYear(fromYear)} - {onRenderYear(toYear)}\n </div>\n );\n};\nCalendarYearTitle.displayName = 'CalendarYearTitle';\n\nconst CalendarYearHeader: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const { className, animateBackwards, animationDirection, onRenderTitle } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection,\n });\n\n return (\n <div className={classNames.headerContainer}>\n {onRenderTitle?.(props) ?? <CalendarYearTitle {...props} />}\n <CalendarYearNav {...props} />\n </div>\n );\n};\nCalendarYearHeader.displayName = 'CalendarYearHeader';\n\nfunction useAnimateBackwards(fromYear: number): boolean | undefined {\n const previousFromYearRef = React.useRef<number | undefined>(undefined);\n React.useEffect(() => {\n previousFromYearRef.current = fromYear;\n });\n // eslint-disable-next-line react-hooks/refs\n const previousFromYear = previousFromYearRef.current;\n\n // eslint-disable-next-line react-hooks/refs\n if (previousFromYear === undefined || previousFromYear === fromYear) {\n return undefined;\n // eslint-disable-next-line react-hooks/refs\n } else if (previousFromYear > fromYear) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction useYearRangeState({ selectedYear, navigatedYear, onNavigateDate }: CalendarYearProps) {\n const rangeYear = React.useMemo(() => {\n return selectedYear || navigatedYear || Math.floor(new Date().getFullYear() / 10) * 10;\n }, [navigatedYear, selectedYear]);\n\n const [fromYear, setFromYear] = React.useState<number>(rangeYear);\n\n const onNavNext = () => {\n const newFromYear = fromYear + CELL_COUNT;\n setFromYear(newFromYear);\n onNavigateDate?.(newFromYear);\n };\n\n const onNavPrevious = () => {\n const newFromYear = fromYear - CELL_COUNT;\n setFromYear(newFromYear);\n onNavigateDate?.(newFromYear);\n };\n\n React.useEffect(() => {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setFromYear(rangeYear);\n }, [rangeYear]);\n\n const toYear = fromYear + CELL_COUNT - 1;\n\n return [fromYear, toYear, onNavNext, onNavPrevious] as const;\n}\n\n/**\n * @internal\n */\nexport const CalendarYear: React.FunctionComponent<CalendarYearProps> = props => {\n const [fromYear, toYear, onNavNext, onNavPrevious] = useYearRangeState(props);\n const animateBackwards = useAnimateBackwards(fromYear);\n\n const gridRef = React.useRef<CalendarYearGrid>(null);\n\n React.useImperativeHandle(props.componentRef, () => ({\n focus() {\n gridRef.current?.focus?.();\n },\n }));\n\n const { className } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n return (\n <div className={classNames.root}>\n <CalendarYearHeader\n {...props}\n fromYear={fromYear}\n toYear={toYear}\n onSelectPrev={onNavPrevious}\n onSelectNext={onNavNext}\n animateBackwards={animateBackwards}\n />\n <CalendarYearGrid\n {...props}\n fromYear={fromYear}\n toYear={toYear}\n animateBackwards={animateBackwards}\n componentRef={gridRef}\n />\n </div>\n );\n};\nCalendarYear.displayName = 'CalendarYear';\n"],"names":["React","Enter","Space","useArrowNavigationGroup","mergeClasses","useCalendarYearStyles_unstable","DirectionalSlideIn","CELL_COUNT","CELLS_PER_ROW","DefaultCalendarYearStrings","prevRangeAriaLabel","undefined","nextRangeAriaLabel","CalendarYearGridCell","props","className","highlightCurrentYear","highlightSelectedYear","year","selected","disabled","componentRef","onSelectYear","onRenderYear","buttonRef","useRef","useImperativeHandle","focus","current","onClick","onKeyDown","ev","key","classNames","highlightCurrent","highlightSelected","button","itemButton","type","role","aria-selected","ref","displayName","CalendarYearGrid","fromYear","toYear","animationDirection","animateBackwards","minYear","maxYear","selectedYear","selectedCellRef","currentCellRef","renderCell","yearToRender","Date","getFullYear","value","gridAriaLabel","cells","i","push","j","arrowNavigationAttributes","axis","div","gridContainer","aria-label","map","cellRow","index","replayKey","buttonRow","CalendarYearNavDirection","Previous","Next","CalendarYearNavArrow","strings","direction","onSelectPrev","onSelectNext","navigationIcons","ariaLabel","newRangeOffset","newRange","ariaLabelString","onNavigate","navigationButton","title","upNavigation","downNavigation","CalendarYearNav","navigationButtonsContainer","CalendarYearTitle","onHeaderSelect","onHeaderKeyDown","hasHeaderClickCallback","rangeAriaLabel","headerAriaLabelFormatString","currentDateRange","replace","currentItemButton","span","aria-live","aria-atomic","CalendarYearHeader","onRenderTitle","headerContainer","useAnimateBackwards","previousFromYearRef","useEffect","previousFromYear","useYearRangeState","navigatedYear","onNavigateDate","rangeYear","useMemo","Math","floor","setFromYear","useState","onNavNext","newFromYear","onNavPrevious","CalendarYear","gridRef","root"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/components/CalendarYear/CalendarYear.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Enter, Space } from '@fluentui/keyboard-keys';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { mergeClasses } from '@griffel/react';\nimport { useCalendarYearStyles_unstable } from './useCalendarYearStyles.styles';\nimport { DirectionalSlideIn } from '../../utils/calendarMotions';\nimport type {\n CalendarYearStrings,\n CalendarYearProps,\n CalendarYearRange,\n CalendarYearHeaderProps,\n} from './CalendarYear.types';\n\nconst CELL_COUNT = 12;\nconst CELLS_PER_ROW = 4;\n\nconst DefaultCalendarYearStrings: CalendarYearStrings = {\n prevRangeAriaLabel: undefined,\n nextRangeAriaLabel: undefined,\n};\ninterface CalendarYearGrid {\n focus(): void;\n}\n\ninterface CalendarYearGridCellProps extends CalendarYearProps {\n year: number;\n current?: boolean;\n selected?: boolean;\n disabled?: boolean;\n onSelectYear?: (year: number) => void;\n onRenderYear?: (year: number) => React.ReactNode;\n}\n\ninterface CalendarYearGridProps extends CalendarYearProps, CalendarYearRange {\n selectedYear?: number;\n animateBackwards?: boolean;\n componentRef?: React.RefObject<CalendarYearGridCell | null>;\n}\n\ninterface CalendarYearGridCell {\n focus(): void;\n}\n\nconst CalendarYearGridCell: React.FunctionComponent<CalendarYearGridCellProps> = props => {\n const {\n className,\n highlightCurrentYear,\n highlightSelectedYear,\n year,\n selected,\n disabled,\n componentRef,\n onSelectYear,\n onRenderYear,\n } = props;\n\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n React.useImperativeHandle(\n componentRef,\n () => ({\n focus() {\n buttonRef.current?.focus?.();\n },\n }),\n [],\n );\n\n const onClick = () => {\n onSelectYear?.(year);\n };\n\n const onKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter) {\n onSelectYear?.(year);\n }\n };\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n highlightCurrent: highlightCurrentYear,\n highlightSelected: highlightSelectedYear,\n });\n\n return (\n <button\n className={mergeClasses(classNames.itemButton, selected && classNames.selected, disabled && classNames.disabled)}\n type=\"button\"\n role=\"gridcell\"\n onClick={!disabled ? onClick : undefined}\n onKeyDown={!disabled ? onKeyDown : undefined}\n disabled={disabled}\n aria-selected={selected}\n ref={buttonRef}\n >\n {onRenderYear?.(year) ?? year}\n </button>\n );\n};\nCalendarYearGridCell.displayName = 'CalendarYearGridCell';\n\nconst CalendarYearGrid: React.FunctionComponent<CalendarYearGridProps> = props => {\n const {\n className,\n fromYear,\n toYear,\n animationDirection,\n animateBackwards,\n minYear,\n maxYear,\n onSelectYear,\n selectedYear,\n componentRef,\n } = props;\n\n const selectedCellRef = React.useRef<CalendarYearGridCell>(null);\n\n const currentCellRef = React.useRef<CalendarYearGridCell>(null);\n\n React.useImperativeHandle(\n componentRef,\n () => ({\n focus() {\n (selectedCellRef.current || currentCellRef.current)?.focus?.();\n },\n }),\n [],\n );\n\n const renderCell = (yearToRender: number): React.ReactNode => {\n const selected = yearToRender === selectedYear;\n const disabled =\n (minYear !== undefined && yearToRender < minYear) || (maxYear !== undefined && yearToRender > maxYear);\n const current = yearToRender === new Date().getFullYear();\n\n return (\n <CalendarYearGridCell\n {...props}\n key={yearToRender}\n year={yearToRender}\n selected={selected}\n current={current}\n disabled={disabled}\n onSelectYear={onSelectYear}\n componentRef={selected ? selectedCellRef : current ? currentCellRef : undefined}\n />\n );\n };\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n animateBackwards,\n animationDirection,\n });\n\n const onRenderYear = (value: number) => {\n return props.onRenderYear?.(value) ?? value;\n };\n\n const gridAriaLabel = `${onRenderYear(fromYear)} - ${onRenderYear(toYear)}`;\n\n let year = fromYear;\n const cells: React.ReactNode[][] = [];\n\n for (let i = 0; i < (toYear - fromYear + 1) / CELLS_PER_ROW; i++) {\n cells.push([]);\n for (let j = 0; j < CELLS_PER_ROW; j++) {\n cells[i].push(renderCell(year));\n year++;\n }\n }\n\n const arrowNavigationAttributes = useArrowNavigationGroup({ axis: 'grid' });\n\n return (\n <div {...arrowNavigationAttributes} className={classNames.gridContainer} role=\"grid\" aria-label={gridAriaLabel}>\n {cells.map((cellRow: React.ReactNode[], index: number) => {\n return (\n <DirectionalSlideIn\n key={index}\n replayKey={fromYear}\n animationDirection={animationDirection}\n animateBackwards={animateBackwards}\n >\n <div role=\"row\" className={classNames.buttonRow}>\n {cellRow}\n </div>\n </DirectionalSlideIn>\n );\n })}\n </div>\n );\n};\nCalendarYearGrid.displayName = 'CalendarYearGrid';\n\nconst CalendarYearNavDirection = {\n Previous: 0 as const,\n Next: 1 as const,\n};\n\ninterface CalendarYearNavArrowProps extends CalendarYearHeaderProps {\n direction: (typeof CalendarYearNavDirection)[keyof typeof CalendarYearNavDirection];\n}\n\nconst CalendarYearNavArrow: React.FunctionComponent<CalendarYearNavArrowProps> = props => {\n const {\n className,\n strings = DefaultCalendarYearStrings,\n direction,\n onSelectPrev,\n onSelectNext,\n fromYear,\n toYear,\n maxYear,\n minYear,\n navigationIcons,\n } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n const ariaLabel =\n direction === CalendarYearNavDirection.Previous ? strings.prevRangeAriaLabel : strings.nextRangeAriaLabel;\n const newRangeOffset = direction === CalendarYearNavDirection.Previous ? -CELL_COUNT : CELL_COUNT;\n const newRange = { fromYear: fromYear + newRangeOffset, toYear: toYear + newRangeOffset };\n const ariaLabelString = ariaLabel ? (typeof ariaLabel === 'string' ? ariaLabel : ariaLabel(newRange)) : undefined;\n const disabled =\n direction === CalendarYearNavDirection.Previous\n ? minYear !== undefined && fromYear < minYear\n : maxYear !== undefined && props.fromYear + CELL_COUNT > maxYear;\n\n const onNavigate = () => {\n direction === CalendarYearNavDirection.Previous ? onSelectPrev?.() : onSelectNext?.();\n };\n\n const onKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter) {\n onNavigate();\n }\n };\n\n return (\n <button\n className={mergeClasses(classNames.navigationButton, disabled && classNames.disabled)}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : undefined}\n onClick={!disabled ? onNavigate : undefined}\n onKeyDown={!disabled ? onKeyDown : undefined}\n type=\"button\"\n title={ariaLabelString}\n >\n {direction === CalendarYearNavDirection.Previous ? navigationIcons.upNavigation : navigationIcons.downNavigation}\n </button>\n );\n};\nCalendarYearNavArrow.displayName = 'CalendarYearNavArrow';\n\nconst CalendarYearNav: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const { className } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n return (\n <div className={classNames.navigationButtonsContainer}>\n <CalendarYearNavArrow {...props} direction={CalendarYearNavDirection.Previous} />\n <CalendarYearNavArrow {...props} direction={CalendarYearNavDirection.Next} />\n </div>\n );\n};\nCalendarYearNav.displayName = 'CalendarYearNav';\n\nconst CalendarYearTitle: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const {\n className,\n fromYear,\n toYear,\n strings = DefaultCalendarYearStrings,\n animateBackwards,\n animationDirection,\n } = props;\n\n const onHeaderSelect = () => {\n props.onHeaderSelect?.(true);\n };\n\n const onHeaderKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter || ev.key === Space) {\n onHeaderSelect();\n }\n };\n\n const onRenderYear = (year: number) => {\n return props.onRenderYear?.(year) ?? year;\n };\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection,\n });\n\n if (props.onHeaderSelect) {\n const rangeAriaLabel = strings.rangeAriaLabel;\n const headerAriaLabelFormatString = strings.headerAriaLabelFormatString;\n const currentDateRange = rangeAriaLabel\n ? typeof rangeAriaLabel === 'string'\n ? rangeAriaLabel\n : rangeAriaLabel(props)\n : undefined;\n\n const ariaLabel = headerAriaLabelFormatString\n ? headerAriaLabelFormatString.replace('{0}', currentDateRange ?? '')\n : currentDateRange;\n\n return (\n <button\n className={classNames.currentItemButton}\n onClick={onHeaderSelect}\n onKeyDown={onHeaderKeyDown}\n aria-label={ariaLabel}\n role=\"button\"\n type=\"button\"\n >\n <span aria-live=\"assertive\" aria-atomic=\"true\">\n {onRenderYear(fromYear)} - {onRenderYear(toYear)}\n </span>\n </button>\n );\n }\n\n return (\n <div className={classNames.current}>\n {onRenderYear(fromYear)} - {onRenderYear(toYear)}\n </div>\n );\n};\nCalendarYearTitle.displayName = 'CalendarYearTitle';\n\nconst CalendarYearHeader: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const { className, animateBackwards, animationDirection, onRenderTitle } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection,\n });\n\n return (\n <div className={classNames.headerContainer}>\n {onRenderTitle?.(props) ?? <CalendarYearTitle {...props} />}\n <CalendarYearNav {...props} />\n </div>\n );\n};\nCalendarYearHeader.displayName = 'CalendarYearHeader';\n\nfunction useAnimateBackwards(fromYear: number): boolean | undefined {\n const previousFromYearRef = React.useRef<number | undefined>(undefined);\n React.useEffect(() => {\n previousFromYearRef.current = fromYear;\n });\n // eslint-disable-next-line react-hooks/refs\n const previousFromYear = previousFromYearRef.current;\n\n // eslint-disable-next-line react-hooks/refs\n if (previousFromYear === undefined || previousFromYear === fromYear) {\n return undefined;\n // eslint-disable-next-line react-hooks/refs\n } else if (previousFromYear > fromYear) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction useYearRangeState({ selectedYear, navigatedYear, onNavigateDate }: CalendarYearProps) {\n const rangeYear = React.useMemo(() => {\n return selectedYear || navigatedYear || Math.floor(new Date().getFullYear() / 10) * 10;\n }, [navigatedYear, selectedYear]);\n\n const [fromYear, setFromYear] = React.useState<number>(rangeYear);\n\n const onNavNext = () => {\n const newFromYear = fromYear + CELL_COUNT;\n setFromYear(newFromYear);\n onNavigateDate?.(newFromYear);\n };\n\n const onNavPrevious = () => {\n const newFromYear = fromYear - CELL_COUNT;\n setFromYear(newFromYear);\n onNavigateDate?.(newFromYear);\n };\n\n React.useEffect(() => {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setFromYear(rangeYear);\n }, [rangeYear]);\n\n const toYear = fromYear + CELL_COUNT - 1;\n\n return [fromYear, toYear, onNavNext, onNavPrevious] as const;\n}\n\n/**\n * @internal\n */\nexport const CalendarYear: React.FunctionComponent<CalendarYearProps> = props => {\n const [fromYear, toYear, onNavNext, onNavPrevious] = useYearRangeState(props);\n const animateBackwards = useAnimateBackwards(fromYear);\n\n const gridRef = React.useRef<CalendarYearGrid>(null);\n\n React.useImperativeHandle(props.componentRef, () => ({\n focus() {\n gridRef.current?.focus?.();\n },\n }));\n\n const { className } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n return (\n <div className={classNames.root}>\n <CalendarYearHeader\n {...props}\n fromYear={fromYear}\n toYear={toYear}\n onSelectPrev={onNavPrevious}\n onSelectNext={onNavNext}\n animateBackwards={animateBackwards}\n />\n <CalendarYearGrid\n {...props}\n fromYear={fromYear}\n toYear={toYear}\n animateBackwards={animateBackwards}\n componentRef={gridRef}\n />\n </div>\n );\n};\nCalendarYear.displayName = 'CalendarYear';\n"],"names":["React","Enter","Space","useArrowNavigationGroup","mergeClasses","useCalendarYearStyles_unstable","DirectionalSlideIn","CELL_COUNT","CELLS_PER_ROW","DefaultCalendarYearStrings","prevRangeAriaLabel","undefined","nextRangeAriaLabel","CalendarYearGridCell","props","className","highlightCurrentYear","highlightSelectedYear","year","selected","disabled","componentRef","onSelectYear","onRenderYear","buttonRef","useRef","useImperativeHandle","focus","current","onClick","onKeyDown","ev","key","classNames","highlightCurrent","highlightSelected","button","itemButton","type","role","aria-selected","ref","displayName","CalendarYearGrid","fromYear","toYear","animationDirection","animateBackwards","minYear","maxYear","selectedYear","selectedCellRef","currentCellRef","renderCell","yearToRender","Date","getFullYear","value","gridAriaLabel","cells","i","push","j","arrowNavigationAttributes","axis","div","gridContainer","aria-label","map","cellRow","index","replayKey","buttonRow","CalendarYearNavDirection","Previous","Next","CalendarYearNavArrow","strings","direction","onSelectPrev","onSelectNext","navigationIcons","ariaLabel","newRangeOffset","newRange","ariaLabelString","onNavigate","navigationButton","aria-disabled","tabIndex","title","upNavigation","downNavigation","CalendarYearNav","navigationButtonsContainer","CalendarYearTitle","onHeaderSelect","onHeaderKeyDown","hasHeaderClickCallback","rangeAriaLabel","headerAriaLabelFormatString","currentDateRange","replace","currentItemButton","span","aria-live","aria-atomic","CalendarYearHeader","onRenderTitle","headerContainer","useAnimateBackwards","previousFromYearRef","useEffect","previousFromYear","useYearRangeState","navigatedYear","onNavigateDate","rangeYear","useMemo","Math","floor","setFromYear","useState","onNavNext","newFromYear","onNavPrevious","CalendarYear","gridRef","root"],"mappings":"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"}
|