@fluentui/react-datepicker-compat 0.3.1 → 0.3.3

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.json CHANGED
@@ -2,7 +2,67 @@
2
2
  "name": "@fluentui/react-datepicker-compat",
3
3
  "entries": [
4
4
  {
5
- "date": "Wed, 16 Aug 2023 11:35:24 GMT",
5
+ "date": "Mon, 21 Aug 2023 11:36:39 GMT",
6
+ "tag": "@fluentui/react-datepicker-compat_v0.3.3",
7
+ "version": "0.3.3",
8
+ "comments": {
9
+ "patch": [
10
+ {
11
+ "author": "esteban.230@hotmail.com",
12
+ "package": "@fluentui/react-datepicker-compat",
13
+ "commit": "d73590f34a41a22776a0bc2c41391b589531e679",
14
+ "comment": "fix: Make year picker react to go to today."
15
+ },
16
+ {
17
+ "author": "beachball",
18
+ "package": "@fluentui/react-datepicker-compat",
19
+ "comment": "Bump @fluentui/react-popover to v9.7.16",
20
+ "commit": "55e07ffc8d180554fb027841e7d2a89637cefcb3"
21
+ },
22
+ {
23
+ "author": "beachball",
24
+ "package": "@fluentui/react-datepicker-compat",
25
+ "comment": "Bump @fluentui/react-positioning to v9.9.5",
26
+ "commit": "55e07ffc8d180554fb027841e7d2a89637cefcb3"
27
+ }
28
+ ]
29
+ }
30
+ },
31
+ {
32
+ "date": "Wed, 16 Aug 2023 17:41:08 GMT",
33
+ "tag": "@fluentui/react-datepicker-compat_v0.3.2",
34
+ "version": "0.3.2",
35
+ "comments": {
36
+ "patch": [
37
+ {
38
+ "author": "beachball",
39
+ "package": "@fluentui/react-datepicker-compat",
40
+ "comment": "Bump @fluentui/react-field to v9.1.19",
41
+ "commit": "b331b368030e157e0ff38a59c9d4aaf1d01d9b6a"
42
+ },
43
+ {
44
+ "author": "beachball",
45
+ "package": "@fluentui/react-datepicker-compat",
46
+ "comment": "Bump @fluentui/react-input to v9.4.29",
47
+ "commit": "b331b368030e157e0ff38a59c9d4aaf1d01d9b6a"
48
+ },
49
+ {
50
+ "author": "beachball",
51
+ "package": "@fluentui/react-datepicker-compat",
52
+ "comment": "Bump @fluentui/react-jsx-runtime to v9.0.0",
53
+ "commit": "b331b368030e157e0ff38a59c9d4aaf1d01d9b6a"
54
+ },
55
+ {
56
+ "author": "beachball",
57
+ "package": "@fluentui/react-datepicker-compat",
58
+ "comment": "Bump @fluentui/react-popover to v9.7.15",
59
+ "commit": "b331b368030e157e0ff38a59c9d4aaf1d01d9b6a"
60
+ }
61
+ ]
62
+ }
63
+ },
64
+ {
65
+ "date": "Wed, 16 Aug 2023 11:38:33 GMT",
6
66
  "tag": "@fluentui/react-datepicker-compat_v0.3.1",
7
67
  "version": "0.3.1",
8
68
  "comments": {
@@ -11,25 +71,25 @@
11
71
  "author": "beachball",
12
72
  "package": "@fluentui/react-datepicker-compat",
13
73
  "comment": "Bump @fluentui/react-field to v9.1.18",
14
- "commit": "f14628ac44d2cea2301452829d9775e49f70b824"
74
+ "commit": "70fb3a013a466af6f5918b7301761b14dc46cea3"
15
75
  },
16
76
  {
17
77
  "author": "beachball",
18
78
  "package": "@fluentui/react-datepicker-compat",
19
79
  "comment": "Bump @fluentui/react-input to v9.4.28",
20
- "commit": "f14628ac44d2cea2301452829d9775e49f70b824"
80
+ "commit": "70fb3a013a466af6f5918b7301761b14dc46cea3"
21
81
  },
22
82
  {
23
83
  "author": "beachball",
24
84
  "package": "@fluentui/react-datepicker-compat",
25
85
  "comment": "Bump @fluentui/react-jsx-runtime to v9.0.0-alpha.16",
26
- "commit": "f14628ac44d2cea2301452829d9775e49f70b824"
86
+ "commit": "70fb3a013a466af6f5918b7301761b14dc46cea3"
27
87
  },
28
88
  {
29
89
  "author": "beachball",
30
90
  "package": "@fluentui/react-datepicker-compat",
31
91
  "comment": "Bump @fluentui/react-popover to v9.7.14",
32
- "commit": "f14628ac44d2cea2301452829d9775e49f70b824"
92
+ "commit": "70fb3a013a466af6f5918b7301761b14dc46cea3"
33
93
  }
34
94
  ]
35
95
  }
package/CHANGELOG.md CHANGED
@@ -1,20 +1,43 @@
1
1
  # Change Log - @fluentui/react-datepicker-compat
2
2
 
3
- This log was last generated on Wed, 16 Aug 2023 11:35:24 GMT and should not be manually modified.
3
+ This log was last generated on Mon, 21 Aug 2023 11:36:39 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## [0.3.3](https://github.com/microsoft/fluentui/tree/@fluentui/react-datepicker-compat_v0.3.3)
8
+
9
+ Mon, 21 Aug 2023 11:36:39 GMT
10
+ [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-datepicker-compat_v0.3.2..@fluentui/react-datepicker-compat_v0.3.3)
11
+
12
+ ### Patches
13
+
14
+ - fix: Make year picker react to go to today. ([PR #28907](https://github.com/microsoft/fluentui/pull/28907) by esteban.230@hotmail.com)
15
+ - Bump @fluentui/react-popover to v9.7.16 ([PR #28884](https://github.com/microsoft/fluentui/pull/28884) by beachball)
16
+ - Bump @fluentui/react-positioning to v9.9.5 ([PR #28884](https://github.com/microsoft/fluentui/pull/28884) by beachball)
17
+
18
+ ## [0.3.2](https://github.com/microsoft/fluentui/tree/@fluentui/react-datepicker-compat_v0.3.2)
19
+
20
+ Wed, 16 Aug 2023 17:41:08 GMT
21
+ [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-datepicker-compat_v0.3.1..@fluentui/react-datepicker-compat_v0.3.2)
22
+
23
+ ### Patches
24
+
25
+ - Bump @fluentui/react-field to v9.1.19 ([PR #28885](https://github.com/microsoft/fluentui/pull/28885) by beachball)
26
+ - Bump @fluentui/react-input to v9.4.29 ([PR #28885](https://github.com/microsoft/fluentui/pull/28885) by beachball)
27
+ - Bump @fluentui/react-jsx-runtime to v9.0.0 ([PR #28885](https://github.com/microsoft/fluentui/pull/28885) by beachball)
28
+ - Bump @fluentui/react-popover to v9.7.15 ([PR #28885](https://github.com/microsoft/fluentui/pull/28885) by beachball)
29
+
7
30
  ## [0.3.1](https://github.com/microsoft/fluentui/tree/@fluentui/react-datepicker-compat_v0.3.1)
8
31
 
9
- Wed, 16 Aug 2023 11:35:24 GMT
32
+ Wed, 16 Aug 2023 11:38:33 GMT
10
33
  [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-datepicker-compat_v0.3.0..@fluentui/react-datepicker-compat_v0.3.1)
11
34
 
12
35
  ### Patches
13
36
 
14
- - Bump @fluentui/react-field to v9.1.18 ([commit](https://github.com/microsoft/fluentui/commit/f14628ac44d2cea2301452829d9775e49f70b824) by beachball)
15
- - Bump @fluentui/react-input to v9.4.28 ([commit](https://github.com/microsoft/fluentui/commit/f14628ac44d2cea2301452829d9775e49f70b824) by beachball)
16
- - Bump @fluentui/react-jsx-runtime to v9.0.0-alpha.16 ([commit](https://github.com/microsoft/fluentui/commit/f14628ac44d2cea2301452829d9775e49f70b824) by beachball)
17
- - Bump @fluentui/react-popover to v9.7.14 ([commit](https://github.com/microsoft/fluentui/commit/f14628ac44d2cea2301452829d9775e49f70b824) by beachball)
37
+ - Bump @fluentui/react-field to v9.1.18 ([PR #28791](https://github.com/microsoft/fluentui/pull/28791) by beachball)
38
+ - Bump @fluentui/react-input to v9.4.28 ([PR #28791](https://github.com/microsoft/fluentui/pull/28791) by beachball)
39
+ - Bump @fluentui/react-jsx-runtime to v9.0.0-alpha.16 ([PR #28791](https://github.com/microsoft/fluentui/pull/28791) by beachball)
40
+ - Bump @fluentui/react-popover to v9.7.14 ([PR #28791](https://github.com/microsoft/fluentui/pull/28791) by beachball)
18
41
 
19
42
  ## [0.3.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-datepicker-compat_v0.3.0)
20
43
 
@@ -138,6 +138,7 @@ function useFocusLogic({ componentRef }) {
138
138
  // eslint-disable-next-line react/jsx-no-bind
139
139
  onHeaderSelect: onYearPickerHeaderSelect,
140
140
  selectedYear: selectedDate ? selectedDate.getFullYear() : navigatedDate ? navigatedDate.getFullYear() : undefined,
141
+ navigatedYear: navigatedDate.getFullYear(),
141
142
  onRenderYear: onRenderYear,
142
143
  strings: yearStrings,
143
144
  componentRef: calendarYearRef,
@@ -1 +1 @@
1
- {"version":3,"sources":["CalendarMonth.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Enter } from '@fluentui/keyboard-keys';\nimport { ArrowDownRegular, ArrowUpRegular } from '@fluentui/react-icons';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { mergeClasses } from '@griffel/react';\nimport {\n addYears,\n compareDatePart,\n getMonthEnd,\n getMonthStart,\n getYearEnd,\n getYearStart,\n setMonth,\n DEFAULT_DATE_FORMATTING,\n} from '../../utils';\nimport { CalendarYear } from '../CalendarYear/CalendarYear';\nimport { useCalendarMonthStyles_unstable } from './useCalendarMonthStyles';\nimport type { CalendarMonthProps } from './CalendarMonth.types';\nimport type { CalendarYearRange, ICalendarYear } from '../CalendarYear/CalendarYear.types';\n\nconst MONTHS_PER_ROW = 4;\n\nfunction useAnimateBackwards({ navigatedDate }: { navigatedDate: CalendarMonthProps['navigatedDate'] }) {\n const currentYear = navigatedDate.getFullYear();\n\n const previousYearRef = React.useRef<number | undefined>();\n React.useEffect(() => {\n previousYearRef.current = currentYear;\n });\n const previousYear = previousYearRef.current;\n\n if (previousYear === undefined || previousYear === currentYear) {\n return undefined;\n } else {\n return previousYear > currentYear;\n }\n}\n\nfunction useFocusLogic({ componentRef }: { componentRef: CalendarMonthProps['componentRef'] }) {\n const navigatedMonthRef = React.useRef<HTMLButtonElement>(null);\n const calendarYearRef = React.useRef<ICalendarYear>(null);\n const focusOnUpdate = React.useRef(false);\n\n const focus = React.useCallback(() => {\n if (calendarYearRef.current) {\n calendarYearRef.current.focus();\n } else if (navigatedMonthRef.current) {\n navigatedMonthRef.current.focus();\n }\n }, []);\n\n React.useImperativeHandle(componentRef, () => ({ focus }), [focus]);\n\n React.useEffect(() => {\n if (focusOnUpdate.current) {\n focus();\n focusOnUpdate.current = false;\n }\n });\n\n const focusOnNextUpdate = () => {\n focusOnUpdate.current = true;\n };\n\n return [navigatedMonthRef, calendarYearRef, focusOnNextUpdate] as const;\n}\n\n/**\n * @internal\n */\nexport const CalendarMonth: React.FunctionComponent<CalendarMonthProps> = props => {\n const {\n allFocusable,\n animationDirection,\n className,\n componentRef,\n dateTimeFormatter = DEFAULT_DATE_FORMATTING,\n highlightCurrentMonth,\n highlightSelectedMonth,\n maxDate,\n minDate,\n navigatedDate,\n onHeaderSelect: onUserHeaderSelect,\n onNavigateDate,\n selectedDate,\n strings,\n today = new Date(),\n yearPickerHidden = false,\n } = props;\n\n const [navigatedMonthRef, calendarYearRef, focusOnNextUpdate] = useFocusLogic({ componentRef });\n const [isYearPickerVisible, setIsYearPickerVisible] = React.useState(false);\n\n const animateBackwards = useAnimateBackwards({ navigatedDate });\n\n const selectMonthCallback = (newMonth: number): (() => void) => {\n return () => onSelectMonth(newMonth);\n };\n\n const onSelectNextYear = (): void => {\n onNavigateDate(addYears(navigatedDate, 1), false);\n };\n\n const onSelectPrevYear = (): void => {\n onNavigateDate(addYears(navigatedDate, -1), false);\n };\n\n const onSelectMonth = (newMonth: number): void => {\n // If header is clickable the calendars are overlayed, switch back to day picker when month is clicked\n onUserHeaderSelect?.();\n onNavigateDate(setMonth(navigatedDate, newMonth), true);\n };\n\n const onHeaderSelect = (): void => {\n if (!yearPickerHidden) {\n focusOnNextUpdate();\n setIsYearPickerVisible(true);\n } else {\n onUserHeaderSelect?.();\n }\n };\n\n const onSelectYear = (selectedYear: number) => {\n focusOnNextUpdate();\n const navYear = navigatedDate.getFullYear();\n if (navYear !== selectedYear) {\n let newNavigationDate = new Date(navigatedDate.getTime());\n newNavigationDate.setFullYear(selectedYear);\n // for min and max dates, adjust the new navigation date - perhaps this should be\n // checked on the master navigation date handler (i.e. in Calendar)\n if (maxDate && newNavigationDate > maxDate) {\n newNavigationDate = setMonth(newNavigationDate, maxDate.getMonth());\n } else if (minDate && newNavigationDate < minDate) {\n newNavigationDate = setMonth(newNavigationDate, minDate.getMonth());\n }\n onNavigateDate(newNavigationDate, true);\n }\n setIsYearPickerVisible(false);\n };\n\n const onYearPickerHeaderSelect = (focus: boolean): void => {\n focusOnNextUpdate();\n setIsYearPickerVisible(false);\n };\n\n const dateFormatter = dateTimeFormatter!;\n\n // determine if previous/next years are in bounds\n const isPrevYearInBounds = minDate ? compareDatePart(minDate, getYearStart(navigatedDate)) < 0 : true;\n const isNextYearInBounds = maxDate ? compareDatePart(getYearEnd(navigatedDate), maxDate) < 0 : true;\n\n const classNames = useCalendarMonthStyles_unstable({\n className,\n hasHeaderClickCallback: !!onUserHeaderSelect || !yearPickerHidden,\n highlightCurrent: highlightCurrentMonth,\n highlightSelected: highlightSelectedMonth,\n animateBackwards,\n animationDirection,\n });\n\n const { dir } = useFluent_unstable();\n const arrowNavigationAttributes = useArrowNavigationGroup({ axis: 'both' });\n\n if (isYearPickerVisible) {\n const [onRenderYear, yearStrings] = getYearStrings({ dateTimeFormatter, navigatedDate, strings });\n // use navigated date for the year picker\n return (\n <CalendarYear\n key={'calendarYear'}\n minYear={minDate ? minDate.getFullYear() : undefined}\n maxYear={maxDate ? maxDate.getFullYear() : undefined}\n // eslint-disable-next-line react/jsx-no-bind\n onSelectYear={onSelectYear}\n // eslint-disable-next-line react/jsx-no-bind\n onHeaderSelect={onYearPickerHeaderSelect}\n selectedYear={\n selectedDate ? selectedDate.getFullYear() : navigatedDate ? navigatedDate.getFullYear() : undefined\n }\n onRenderYear={onRenderYear}\n strings={yearStrings}\n componentRef={calendarYearRef}\n highlightCurrentYear={highlightCurrentMonth}\n highlightSelectedYear={highlightSelectedMonth}\n animationDirection={animationDirection}\n />\n );\n }\n\n const rowIndexes = [];\n for (let i = 0; i < strings.shortMonths.length / MONTHS_PER_ROW; i++) {\n rowIndexes.push(i);\n }\n\n const yearString = dateFormatter.formatYear(navigatedDate);\n const headerAriaLabel = strings.monthPickerHeaderAriaLabel\n ? strings.monthPickerHeaderAriaLabel.replace('{0}', yearString)\n : yearString;\n\n return (\n <div className={classNames.root}>\n <div className={classNames.headerContainer}>\n <button\n className={classNames.currentItemButton}\n onClick={onHeaderSelect}\n onKeyDown={onButtonKeyDown(onHeaderSelect)}\n aria-label={headerAriaLabel}\n tabIndex={!!onUserHeaderSelect || !yearPickerHidden ? 0 : -1}\n type=\"button\"\n >\n <span aria-live=\"polite\" aria-atomic=\"true\">\n {yearString}\n </span>\n </button>\n <div className={classNames.navigationButtonsContainer}>\n <button\n className={mergeClasses(classNames.navigationButton, !isPrevYearInBounds && classNames.disabled)}\n aria-disabled={!isPrevYearInBounds}\n tabIndex={isPrevYearInBounds ? undefined : allFocusable ? 0 : -1}\n onClick={isPrevYearInBounds ? onSelectPrevYear : undefined}\n onKeyDown={isPrevYearInBounds ? onButtonKeyDown(onSelectPrevYear) : undefined}\n title={\n strings.prevYearAriaLabel\n ? strings.prevYearAriaLabel + ' ' + dateFormatter.formatYear(addYears(navigatedDate, -1))\n : undefined\n }\n type=\"button\"\n >\n {dir === 'ltr' ? <ArrowUpRegular /> : <ArrowDownRegular />}\n </button>\n <button\n className={mergeClasses(classNames.navigationButton, !isNextYearInBounds && classNames.disabled)}\n aria-disabled={!isNextYearInBounds}\n tabIndex={isNextYearInBounds ? undefined : allFocusable ? 0 : -1}\n onClick={isNextYearInBounds ? onSelectNextYear : undefined}\n onKeyDown={isNextYearInBounds ? onButtonKeyDown(onSelectNextYear) : undefined}\n title={\n strings.nextYearAriaLabel\n ? strings.nextYearAriaLabel + ' ' + dateFormatter.formatYear(addYears(navigatedDate, 1))\n : undefined\n }\n type=\"button\"\n >\n {dir === 'ltr' ? <ArrowDownRegular /> : <ArrowUpRegular />}\n </button>\n </div>\n </div>\n <div {...arrowNavigationAttributes} className={classNames.gridContainer} role=\"grid\" aria-label={yearString}>\n {rowIndexes.map((rowNum: number) => {\n const monthsForRow = strings!.shortMonths.slice(rowNum * MONTHS_PER_ROW, (rowNum + 1) * MONTHS_PER_ROW);\n return (\n <div key={'monthRow_' + rowNum + navigatedDate.getFullYear()} role=\"row\" className={classNames.buttonRow}>\n {monthsForRow.map((month: string, index: number) => {\n const monthIndex = rowNum * MONTHS_PER_ROW + index;\n const indexedMonth = setMonth(navigatedDate, monthIndex);\n const isNavigatedMonth = navigatedDate.getMonth() === monthIndex;\n const isSelectedMonth = selectedDate.getMonth() === monthIndex;\n const isSelectedYear = selectedDate.getFullYear() === navigatedDate.getFullYear();\n const isInBounds =\n (minDate ? compareDatePart(minDate, getMonthEnd(indexedMonth)) < 1 : true) &&\n (maxDate ? compareDatePart(getMonthStart(indexedMonth), maxDate) < 1 : true);\n\n return (\n <button\n ref={isNavigatedMonth ? navigatedMonthRef : undefined}\n role={'gridcell'}\n className={mergeClasses(\n classNames.itemButton,\n highlightCurrentMonth &&\n isCurrentMonth(monthIndex, navigatedDate.getFullYear(), today) &&\n classNames.current,\n highlightSelectedMonth && isSelectedMonth && isSelectedYear && classNames.selected,\n !isInBounds && classNames.disabled,\n )}\n disabled={!allFocusable && !isInBounds}\n key={monthIndex}\n onClick={isInBounds ? selectMonthCallback(monthIndex) : undefined}\n onKeyDown={isInBounds ? onButtonKeyDown(selectMonthCallback(monthIndex)) : undefined}\n aria-label={dateFormatter.formatMonth(indexedMonth, strings!)}\n aria-selected={isNavigatedMonth}\n tabIndex={isInBounds ? 0 : -1}\n type=\"button\"\n >\n {month}\n </button>\n );\n })}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\nCalendarMonth.displayName = 'CalendarMonth';\n\nfunction getYearStrings({\n dateTimeFormatter,\n navigatedDate,\n strings,\n}: Pick<CalendarMonthProps, 'dateTimeFormatter' | 'navigatedDate' | 'strings'>) {\n const yearToString = (year: number) => {\n if (dateTimeFormatter) {\n // create a date based on the current nav date\n const yearFormattingDate = new Date(navigatedDate.getTime());\n yearFormattingDate.setFullYear(year);\n return dateTimeFormatter.formatYear(yearFormattingDate);\n }\n return String(year);\n };\n\n const yearRangeToString = (yearRange: CalendarYearRange) => {\n return `${yearToString(yearRange.fromYear)} - ${yearToString(yearRange.toYear)}`;\n };\n\n const yearRangeToNextDecadeLabel = (yearRange: CalendarYearRange) => {\n return strings.nextYearRangeAriaLabel ? `${strings.nextYearRangeAriaLabel} ${yearRangeToString(yearRange)}` : '';\n };\n\n const yearRangeToPrevDecadeLabel = (yearRange: CalendarYearRange) => {\n return strings.prevYearRangeAriaLabel ? `${strings.prevYearRangeAriaLabel} ${yearRangeToString(yearRange)}` : '';\n };\n\n return [\n yearToString,\n {\n rangeAriaLabel: yearRangeToString,\n prevRangeAriaLabel: yearRangeToPrevDecadeLabel,\n nextRangeAriaLabel: yearRangeToNextDecadeLabel,\n headerAriaLabelFormatString: strings.yearPickerHeaderAriaLabel,\n } as const,\n ] as const;\n}\n\nfunction isCurrentMonth(month: number, year: number, today: Date): boolean {\n return today.getFullYear() === year && today.getMonth() === month;\n}\n\nfunction onButtonKeyDown(callback: () => void): (ev: React.KeyboardEvent<HTMLButtonElement>) => void {\n return (ev: React.KeyboardEvent<HTMLButtonElement>) => {\n switch (ev.key) {\n case Enter:\n callback();\n break;\n }\n };\n}\n"],"names":["React","Enter","ArrowDownRegular","ArrowUpRegular","useFluent_unstable","useArrowNavigationGroup","mergeClasses","addYears","compareDatePart","getMonthEnd","getMonthStart","getYearEnd","getYearStart","setMonth","DEFAULT_DATE_FORMATTING","CalendarYear","useCalendarMonthStyles_unstable","MONTHS_PER_ROW","useAnimateBackwards","navigatedDate","currentYear","getFullYear","previousYearRef","useRef","useEffect","current","previousYear","undefined","useFocusLogic","componentRef","navigatedMonthRef","calendarYearRef","focusOnUpdate","focus","useCallback","useImperativeHandle","focusOnNextUpdate","CalendarMonth","props","allFocusable","animationDirection","className","dateTimeFormatter","highlightCurrentMonth","highlightSelectedMonth","maxDate","minDate","onHeaderSelect","onUserHeaderSelect","onNavigateDate","selectedDate","strings","today","Date","yearPickerHidden","isYearPickerVisible","setIsYearPickerVisible","useState","animateBackwards","selectMonthCallback","newMonth","onSelectMonth","onSelectNextYear","onSelectPrevYear","onSelectYear","selectedYear","navYear","newNavigationDate","getTime","setFullYear","getMonth","onYearPickerHeaderSelect","dateFormatter","isPrevYearInBounds","isNextYearInBounds","classNames","hasHeaderClickCallback","highlightCurrent","highlightSelected","dir","arrowNavigationAttributes","axis","onRenderYear","yearStrings","getYearStrings","key","minYear","maxYear","highlightCurrentYear","highlightSelectedYear","rowIndexes","i","shortMonths","length","push","yearString","formatYear","headerAriaLabel","monthPickerHeaderAriaLabel","replace","div","root","headerContainer","button","currentItemButton","onClick","onKeyDown","onButtonKeyDown","aria-label","tabIndex","type","span","aria-live","aria-atomic","navigationButtonsContainer","navigationButton","disabled","aria-disabled","title","prevYearAriaLabel","nextYearAriaLabel","gridContainer","role","map","rowNum","monthsForRow","slice","buttonRow","month","index","monthIndex","indexedMonth","isNavigatedMonth","isSelectedMonth","isSelectedYear","isInBounds","ref","itemButton","isCurrentMonth","selected","formatMonth","aria-selected","displayName","yearToString","year","yearFormattingDate","String","yearRangeToString","yearRange","fromYear","toYear","yearRangeToNextDecadeLabel","nextYearRangeAriaLabel","yearRangeToPrevDecadeLabel","prevYearRangeAriaLabel","rangeAriaLabel","prevRangeAriaLabel","nextRangeAriaLabel","headerAriaLabelFormatString","yearPickerHeaderAriaLabel","callback","ev"],"mappings":"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"}
1
+ {"version":3,"sources":["CalendarMonth.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Enter } from '@fluentui/keyboard-keys';\nimport { ArrowDownRegular, ArrowUpRegular } from '@fluentui/react-icons';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { mergeClasses } from '@griffel/react';\nimport {\n addYears,\n compareDatePart,\n getMonthEnd,\n getMonthStart,\n getYearEnd,\n getYearStart,\n setMonth,\n DEFAULT_DATE_FORMATTING,\n} from '../../utils';\nimport { CalendarYear } from '../CalendarYear/CalendarYear';\nimport { useCalendarMonthStyles_unstable } from './useCalendarMonthStyles';\nimport type { CalendarMonthProps } from './CalendarMonth.types';\nimport type { CalendarYearRange, ICalendarYear } from '../CalendarYear/CalendarYear.types';\n\nconst MONTHS_PER_ROW = 4;\n\nfunction useAnimateBackwards({ navigatedDate }: { navigatedDate: CalendarMonthProps['navigatedDate'] }) {\n const currentYear = navigatedDate.getFullYear();\n\n const previousYearRef = React.useRef<number | undefined>();\n React.useEffect(() => {\n previousYearRef.current = currentYear;\n });\n const previousYear = previousYearRef.current;\n\n if (previousYear === undefined || previousYear === currentYear) {\n return undefined;\n } else {\n return previousYear > currentYear;\n }\n}\n\nfunction useFocusLogic({ componentRef }: { componentRef: CalendarMonthProps['componentRef'] }) {\n const navigatedMonthRef = React.useRef<HTMLButtonElement>(null);\n const calendarYearRef = React.useRef<ICalendarYear>(null);\n const focusOnUpdate = React.useRef(false);\n\n const focus = React.useCallback(() => {\n if (calendarYearRef.current) {\n calendarYearRef.current.focus();\n } else if (navigatedMonthRef.current) {\n navigatedMonthRef.current.focus();\n }\n }, []);\n\n React.useImperativeHandle(componentRef, () => ({ focus }), [focus]);\n\n React.useEffect(() => {\n if (focusOnUpdate.current) {\n focus();\n focusOnUpdate.current = false;\n }\n });\n\n const focusOnNextUpdate = () => {\n focusOnUpdate.current = true;\n };\n\n return [navigatedMonthRef, calendarYearRef, focusOnNextUpdate] as const;\n}\n\n/**\n * @internal\n */\nexport const CalendarMonth: React.FunctionComponent<CalendarMonthProps> = props => {\n const {\n allFocusable,\n animationDirection,\n className,\n componentRef,\n dateTimeFormatter = DEFAULT_DATE_FORMATTING,\n highlightCurrentMonth,\n highlightSelectedMonth,\n maxDate,\n minDate,\n navigatedDate,\n onHeaderSelect: onUserHeaderSelect,\n onNavigateDate,\n selectedDate,\n strings,\n today = new Date(),\n yearPickerHidden = false,\n } = props;\n\n const [navigatedMonthRef, calendarYearRef, focusOnNextUpdate] = useFocusLogic({ componentRef });\n const [isYearPickerVisible, setIsYearPickerVisible] = React.useState(false);\n\n const animateBackwards = useAnimateBackwards({ navigatedDate });\n\n const selectMonthCallback = (newMonth: number): (() => void) => {\n return () => onSelectMonth(newMonth);\n };\n\n const onSelectNextYear = (): void => {\n onNavigateDate(addYears(navigatedDate, 1), false);\n };\n\n const onSelectPrevYear = (): void => {\n onNavigateDate(addYears(navigatedDate, -1), false);\n };\n\n const onSelectMonth = (newMonth: number): void => {\n // If header is clickable the calendars are overlayed, switch back to day picker when month is clicked\n onUserHeaderSelect?.();\n onNavigateDate(setMonth(navigatedDate, newMonth), true);\n };\n\n const onHeaderSelect = (): void => {\n if (!yearPickerHidden) {\n focusOnNextUpdate();\n setIsYearPickerVisible(true);\n } else {\n onUserHeaderSelect?.();\n }\n };\n\n const onSelectYear = (selectedYear: number) => {\n focusOnNextUpdate();\n const navYear = navigatedDate.getFullYear();\n if (navYear !== selectedYear) {\n let newNavigationDate = new Date(navigatedDate.getTime());\n newNavigationDate.setFullYear(selectedYear);\n // for min and max dates, adjust the new navigation date - perhaps this should be\n // checked on the master navigation date handler (i.e. in Calendar)\n if (maxDate && newNavigationDate > maxDate) {\n newNavigationDate = setMonth(newNavigationDate, maxDate.getMonth());\n } else if (minDate && newNavigationDate < minDate) {\n newNavigationDate = setMonth(newNavigationDate, minDate.getMonth());\n }\n onNavigateDate(newNavigationDate, true);\n }\n setIsYearPickerVisible(false);\n };\n\n const onYearPickerHeaderSelect = (focus: boolean): void => {\n focusOnNextUpdate();\n setIsYearPickerVisible(false);\n };\n\n const dateFormatter = dateTimeFormatter!;\n\n // determine if previous/next years are in bounds\n const isPrevYearInBounds = minDate ? compareDatePart(minDate, getYearStart(navigatedDate)) < 0 : true;\n const isNextYearInBounds = maxDate ? compareDatePart(getYearEnd(navigatedDate), maxDate) < 0 : true;\n\n const classNames = useCalendarMonthStyles_unstable({\n className,\n hasHeaderClickCallback: !!onUserHeaderSelect || !yearPickerHidden,\n highlightCurrent: highlightCurrentMonth,\n highlightSelected: highlightSelectedMonth,\n animateBackwards,\n animationDirection,\n });\n\n const { dir } = useFluent_unstable();\n const arrowNavigationAttributes = useArrowNavigationGroup({ axis: 'both' });\n\n if (isYearPickerVisible) {\n const [onRenderYear, yearStrings] = getYearStrings({ dateTimeFormatter, navigatedDate, strings });\n // use navigated date for the year picker\n return (\n <CalendarYear\n key={'calendarYear'}\n minYear={minDate ? minDate.getFullYear() : undefined}\n maxYear={maxDate ? maxDate.getFullYear() : undefined}\n // eslint-disable-next-line react/jsx-no-bind\n onSelectYear={onSelectYear}\n // eslint-disable-next-line react/jsx-no-bind\n onHeaderSelect={onYearPickerHeaderSelect}\n selectedYear={\n selectedDate ? selectedDate.getFullYear() : navigatedDate ? navigatedDate.getFullYear() : undefined\n }\n navigatedYear={navigatedDate.getFullYear()}\n onRenderYear={onRenderYear}\n strings={yearStrings}\n componentRef={calendarYearRef}\n highlightCurrentYear={highlightCurrentMonth}\n highlightSelectedYear={highlightSelectedMonth}\n animationDirection={animationDirection}\n />\n );\n }\n\n const rowIndexes = [];\n for (let i = 0; i < strings.shortMonths.length / MONTHS_PER_ROW; i++) {\n rowIndexes.push(i);\n }\n\n const yearString = dateFormatter.formatYear(navigatedDate);\n const headerAriaLabel = strings.monthPickerHeaderAriaLabel\n ? strings.monthPickerHeaderAriaLabel.replace('{0}', yearString)\n : yearString;\n\n return (\n <div className={classNames.root}>\n <div className={classNames.headerContainer}>\n <button\n className={classNames.currentItemButton}\n onClick={onHeaderSelect}\n onKeyDown={onButtonKeyDown(onHeaderSelect)}\n aria-label={headerAriaLabel}\n tabIndex={!!onUserHeaderSelect || !yearPickerHidden ? 0 : -1}\n type=\"button\"\n >\n <span aria-live=\"polite\" aria-atomic=\"true\">\n {yearString}\n </span>\n </button>\n <div className={classNames.navigationButtonsContainer}>\n <button\n className={mergeClasses(classNames.navigationButton, !isPrevYearInBounds && classNames.disabled)}\n aria-disabled={!isPrevYearInBounds}\n tabIndex={isPrevYearInBounds ? undefined : allFocusable ? 0 : -1}\n onClick={isPrevYearInBounds ? onSelectPrevYear : undefined}\n onKeyDown={isPrevYearInBounds ? onButtonKeyDown(onSelectPrevYear) : undefined}\n title={\n strings.prevYearAriaLabel\n ? strings.prevYearAriaLabel + ' ' + dateFormatter.formatYear(addYears(navigatedDate, -1))\n : undefined\n }\n type=\"button\"\n >\n {dir === 'ltr' ? <ArrowUpRegular /> : <ArrowDownRegular />}\n </button>\n <button\n className={mergeClasses(classNames.navigationButton, !isNextYearInBounds && classNames.disabled)}\n aria-disabled={!isNextYearInBounds}\n tabIndex={isNextYearInBounds ? undefined : allFocusable ? 0 : -1}\n onClick={isNextYearInBounds ? onSelectNextYear : undefined}\n onKeyDown={isNextYearInBounds ? onButtonKeyDown(onSelectNextYear) : undefined}\n title={\n strings.nextYearAriaLabel\n ? strings.nextYearAriaLabel + ' ' + dateFormatter.formatYear(addYears(navigatedDate, 1))\n : undefined\n }\n type=\"button\"\n >\n {dir === 'ltr' ? <ArrowDownRegular /> : <ArrowUpRegular />}\n </button>\n </div>\n </div>\n <div {...arrowNavigationAttributes} className={classNames.gridContainer} role=\"grid\" aria-label={yearString}>\n {rowIndexes.map((rowNum: number) => {\n const monthsForRow = strings!.shortMonths.slice(rowNum * MONTHS_PER_ROW, (rowNum + 1) * MONTHS_PER_ROW);\n return (\n <div key={'monthRow_' + rowNum + navigatedDate.getFullYear()} role=\"row\" className={classNames.buttonRow}>\n {monthsForRow.map((month: string, index: number) => {\n const monthIndex = rowNum * MONTHS_PER_ROW + index;\n const indexedMonth = setMonth(navigatedDate, monthIndex);\n const isNavigatedMonth = navigatedDate.getMonth() === monthIndex;\n const isSelectedMonth = selectedDate.getMonth() === monthIndex;\n const isSelectedYear = selectedDate.getFullYear() === navigatedDate.getFullYear();\n const isInBounds =\n (minDate ? compareDatePart(minDate, getMonthEnd(indexedMonth)) < 1 : true) &&\n (maxDate ? compareDatePart(getMonthStart(indexedMonth), maxDate) < 1 : true);\n\n return (\n <button\n ref={isNavigatedMonth ? navigatedMonthRef : undefined}\n role={'gridcell'}\n className={mergeClasses(\n classNames.itemButton,\n highlightCurrentMonth &&\n isCurrentMonth(monthIndex, navigatedDate.getFullYear(), today) &&\n classNames.current,\n highlightSelectedMonth && isSelectedMonth && isSelectedYear && classNames.selected,\n !isInBounds && classNames.disabled,\n )}\n disabled={!allFocusable && !isInBounds}\n key={monthIndex}\n onClick={isInBounds ? selectMonthCallback(monthIndex) : undefined}\n onKeyDown={isInBounds ? onButtonKeyDown(selectMonthCallback(monthIndex)) : undefined}\n aria-label={dateFormatter.formatMonth(indexedMonth, strings!)}\n aria-selected={isNavigatedMonth}\n tabIndex={isInBounds ? 0 : -1}\n type=\"button\"\n >\n {month}\n </button>\n );\n })}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\nCalendarMonth.displayName = 'CalendarMonth';\n\nfunction getYearStrings({\n dateTimeFormatter,\n navigatedDate,\n strings,\n}: Pick<CalendarMonthProps, 'dateTimeFormatter' | 'navigatedDate' | 'strings'>) {\n const yearToString = (year: number) => {\n if (dateTimeFormatter) {\n // create a date based on the current nav date\n const yearFormattingDate = new Date(navigatedDate.getTime());\n yearFormattingDate.setFullYear(year);\n return dateTimeFormatter.formatYear(yearFormattingDate);\n }\n return String(year);\n };\n\n const yearRangeToString = (yearRange: CalendarYearRange) => {\n return `${yearToString(yearRange.fromYear)} - ${yearToString(yearRange.toYear)}`;\n };\n\n const yearRangeToNextDecadeLabel = (yearRange: CalendarYearRange) => {\n return strings.nextYearRangeAriaLabel ? `${strings.nextYearRangeAriaLabel} ${yearRangeToString(yearRange)}` : '';\n };\n\n const yearRangeToPrevDecadeLabel = (yearRange: CalendarYearRange) => {\n return strings.prevYearRangeAriaLabel ? `${strings.prevYearRangeAriaLabel} ${yearRangeToString(yearRange)}` : '';\n };\n\n return [\n yearToString,\n {\n rangeAriaLabel: yearRangeToString,\n prevRangeAriaLabel: yearRangeToPrevDecadeLabel,\n nextRangeAriaLabel: yearRangeToNextDecadeLabel,\n headerAriaLabelFormatString: strings.yearPickerHeaderAriaLabel,\n } as const,\n ] as const;\n}\n\nfunction isCurrentMonth(month: number, year: number, today: Date): boolean {\n return today.getFullYear() === year && today.getMonth() === month;\n}\n\nfunction onButtonKeyDown(callback: () => void): (ev: React.KeyboardEvent<HTMLButtonElement>) => void {\n return (ev: React.KeyboardEvent<HTMLButtonElement>) => {\n switch (ev.key) {\n case Enter:\n callback();\n break;\n }\n };\n}\n"],"names":["React","Enter","ArrowDownRegular","ArrowUpRegular","useFluent_unstable","useArrowNavigationGroup","mergeClasses","addYears","compareDatePart","getMonthEnd","getMonthStart","getYearEnd","getYearStart","setMonth","DEFAULT_DATE_FORMATTING","CalendarYear","useCalendarMonthStyles_unstable","MONTHS_PER_ROW","useAnimateBackwards","navigatedDate","currentYear","getFullYear","previousYearRef","useRef","useEffect","current","previousYear","undefined","useFocusLogic","componentRef","navigatedMonthRef","calendarYearRef","focusOnUpdate","focus","useCallback","useImperativeHandle","focusOnNextUpdate","CalendarMonth","props","allFocusable","animationDirection","className","dateTimeFormatter","highlightCurrentMonth","highlightSelectedMonth","maxDate","minDate","onHeaderSelect","onUserHeaderSelect","onNavigateDate","selectedDate","strings","today","Date","yearPickerHidden","isYearPickerVisible","setIsYearPickerVisible","useState","animateBackwards","selectMonthCallback","newMonth","onSelectMonth","onSelectNextYear","onSelectPrevYear","onSelectYear","selectedYear","navYear","newNavigationDate","getTime","setFullYear","getMonth","onYearPickerHeaderSelect","dateFormatter","isPrevYearInBounds","isNextYearInBounds","classNames","hasHeaderClickCallback","highlightCurrent","highlightSelected","dir","arrowNavigationAttributes","axis","onRenderYear","yearStrings","getYearStrings","key","minYear","maxYear","navigatedYear","highlightCurrentYear","highlightSelectedYear","rowIndexes","i","shortMonths","length","push","yearString","formatYear","headerAriaLabel","monthPickerHeaderAriaLabel","replace","div","root","headerContainer","button","currentItemButton","onClick","onKeyDown","onButtonKeyDown","aria-label","tabIndex","type","span","aria-live","aria-atomic","navigationButtonsContainer","navigationButton","disabled","aria-disabled","title","prevYearAriaLabel","nextYearAriaLabel","gridContainer","role","map","rowNum","monthsForRow","slice","buttonRow","month","index","monthIndex","indexedMonth","isNavigatedMonth","isSelectedMonth","isSelectedYear","isInBounds","ref","itemButton","isCurrentMonth","selected","formatMonth","aria-selected","displayName","yearToString","year","yearFormattingDate","String","yearRangeToString","yearRange","fromYear","toYear","yearRangeToNextDecadeLabel","nextYearRangeAriaLabel","yearRangeToPrevDecadeLabel","prevYearRangeAriaLabel","rangeAriaLabel","prevRangeAriaLabel","nextRangeAriaLabel","headerAriaLabelFormatString","yearPickerHeaderAriaLabel","callback","ev"],"mappings":"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"}
@@ -239,20 +239,26 @@ function useAnimateBackwards({ selectedYear , navigatedYear }) {
239
239
  return false;
240
240
  }
241
241
  }
242
- const NavigationDirection = {
243
- Previous: 0,
244
- Next: 1
245
- };
246
242
  function useYearRangeState({ selectedYear , navigatedYear }) {
247
- const [fromYear, navigate] = React.useReducer((state, action)=>{
248
- return state + (action === NavigationDirection.Next ? CELL_COUNT : -CELL_COUNT);
249
- }, undefined, ()=>{
250
- const rangeYear = selectedYear || navigatedYear || new Date().getFullYear();
251
- return Math.floor(rangeYear / 10) * 10;
252
- });
243
+ const rangeYear = React.useMemo(()=>{
244
+ return selectedYear || navigatedYear || Math.floor(new Date().getFullYear() / 10) * 10;
245
+ }, [
246
+ navigatedYear,
247
+ selectedYear
248
+ ]);
249
+ const [fromYear, setFromYear] = React.useState(rangeYear);
250
+ const onNavNext = ()=>{
251
+ setFromYear((year)=>year + CELL_COUNT);
252
+ };
253
+ const onNavPrevious = ()=>{
254
+ setFromYear((year)=>year - CELL_COUNT);
255
+ };
256
+ React.useEffect(()=>{
257
+ setFromYear(rangeYear);
258
+ }, [
259
+ rangeYear
260
+ ]);
253
261
  const toYear = fromYear + CELL_COUNT - 1;
254
- const onNavNext = ()=>navigate(NavigationDirection.Next);
255
- const onNavPrevious = ()=>navigate(NavigationDirection.Previous);
256
262
  return [
257
263
  fromYear,
258
264
  toYear,
@@ -1 +1 @@
1
- {"version":3,"sources":["CalendarYear.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Enter, Space } from '@fluentui/keyboard-keys';\nimport { ArrowDownRegular, ArrowUpRegular } from '@fluentui/react-icons';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { mergeClasses } from '@griffel/react';\nimport { useCalendarYearStyles_unstable } from './useCalendarYearStyles.styles';\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>;\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 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: 'both' });\n\n return (\n <div {...arrowNavigationAttributes}>\n <div className={classNames.gridContainer} role=\"grid\" aria-label={gridAriaLabel}>\n {cells.map((cellRow: React.ReactNode[], index: number) => {\n return (\n <div key={'yearPickerRow_' + index + '_' + fromYear} role=\"row\" className={classNames.buttonRow}>\n {cellRow}\n </div>\n );\n })}\n </div>\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 } = 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 const { dir } = useFluent_unstable();\n\n // can be condensed, but leaving verbose for clarity due to regressions\n const isLeftNavigation =\n dir === 'rtl' ? direction === CalendarYearNavDirection.Next : direction === CalendarYearNavDirection.Previous;\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 {isLeftNavigation ? <ArrowUpRegular /> : <ArrowDownRegular />}\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({ selectedYear, navigatedYear }: CalendarYearProps) {\n const rangeYear = selectedYear || navigatedYear || new Date().getFullYear();\n const fromYear = Math.floor(rangeYear / 10) * 10;\n\n const previousFromYearRef = React.useRef<number | undefined>(fromYear);\n React.useRef(() => {\n previousFromYearRef.current = fromYear;\n });\n const previousFromYear = previousFromYearRef.current;\n\n if (!previousFromYear || previousFromYear === fromYear) {\n return undefined;\n } else if (previousFromYear > fromYear) {\n return true;\n } else {\n return false;\n }\n}\n\nconst NavigationDirection = {\n Previous: 0 as const,\n Next: 1 as const,\n};\n\nfunction useYearRangeState({ selectedYear, navigatedYear }: CalendarYearProps) {\n const [fromYear, navigate] = React.useReducer(\n (state: number, action: (typeof NavigationDirection)[keyof typeof NavigationDirection]): number => {\n return state + (action === NavigationDirection.Next ? CELL_COUNT : -CELL_COUNT);\n },\n undefined,\n () => {\n const rangeYear = selectedYear || navigatedYear || new Date().getFullYear();\n return Math.floor(rangeYear / 10) * 10;\n },\n );\n const toYear = fromYear + CELL_COUNT - 1;\n\n const onNavNext = () => navigate(NavigationDirection.Next);\n const onNavPrevious = () => navigate(NavigationDirection.Previous);\n\n return [fromYear, toYear, onNavNext, onNavPrevious] as const;\n}\n\n/**\n * @internal\n */\nexport const CalendarYear: React.FunctionComponent<CalendarYearProps> = props => {\n const animateBackwards = useAnimateBackwards(props);\n const [fromYear, toYear, onNavNext, onNavPrevious] = useYearRangeState(props);\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","ArrowDownRegular","ArrowUpRegular","useFluent_unstable","useArrowNavigationGroup","mergeClasses","useCalendarYearStyles_unstable","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","buttonRow","CalendarYearNavDirection","Previous","Next","CalendarYearNavArrow","strings","direction","onSelectPrev","onSelectNext","ariaLabel","newRangeOffset","newRange","ariaLabelString","onNavigate","dir","isLeftNavigation","navigationButton","title","CalendarYearNav","navigationButtonsContainer","CalendarYearTitle","onHeaderSelect","onHeaderKeyDown","hasHeaderClickCallback","rangeAriaLabel","headerAriaLabelFormatString","currentDateRange","replace","currentItemButton","span","aria-live","aria-atomic","CalendarYearHeader","onRenderTitle","headerContainer","useAnimateBackwards","navigatedYear","rangeYear","Math","floor","previousFromYearRef","previousFromYear","NavigationDirection","useYearRangeState","navigate","useReducer","state","action","onNavNext","onNavPrevious","CalendarYear","gridRef","root"],"mappings":"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"}
1
+ {"version":3,"sources":["CalendarYear.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Enter, Space } from '@fluentui/keyboard-keys';\nimport { ArrowDownRegular, ArrowUpRegular } from '@fluentui/react-icons';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { mergeClasses } from '@griffel/react';\nimport { useCalendarYearStyles_unstable } from './useCalendarYearStyles.styles';\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>;\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 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: 'both' });\n\n return (\n <div {...arrowNavigationAttributes}>\n <div className={classNames.gridContainer} role=\"grid\" aria-label={gridAriaLabel}>\n {cells.map((cellRow: React.ReactNode[], index: number) => {\n return (\n <div key={'yearPickerRow_' + index + '_' + fromYear} role=\"row\" className={classNames.buttonRow}>\n {cellRow}\n </div>\n );\n })}\n </div>\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 } = 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 const { dir } = useFluent_unstable();\n\n // can be condensed, but leaving verbose for clarity due to regressions\n const isLeftNavigation =\n dir === 'rtl' ? direction === CalendarYearNavDirection.Next : direction === CalendarYearNavDirection.Previous;\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 {isLeftNavigation ? <ArrowUpRegular /> : <ArrowDownRegular />}\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({ selectedYear, navigatedYear }: CalendarYearProps) {\n const rangeYear = selectedYear || navigatedYear || new Date().getFullYear();\n const fromYear = Math.floor(rangeYear / 10) * 10;\n\n const previousFromYearRef = React.useRef<number | undefined>(fromYear);\n React.useRef(() => {\n previousFromYearRef.current = fromYear;\n });\n const previousFromYear = previousFromYearRef.current;\n\n if (!previousFromYear || previousFromYear === fromYear) {\n return undefined;\n } else if (previousFromYear > fromYear) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction useYearRangeState({ selectedYear, navigatedYear }: 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 setFromYear(year => year + CELL_COUNT);\n };\n\n const onNavPrevious = () => {\n setFromYear(year => year - CELL_COUNT);\n };\n\n React.useEffect(() => {\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 animateBackwards = useAnimateBackwards(props);\n const [fromYear, toYear, onNavNext, onNavPrevious] = useYearRangeState(props);\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","ArrowDownRegular","ArrowUpRegular","useFluent_unstable","useArrowNavigationGroup","mergeClasses","useCalendarYearStyles_unstable","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","buttonRow","CalendarYearNavDirection","Previous","Next","CalendarYearNavArrow","strings","direction","onSelectPrev","onSelectNext","ariaLabel","newRangeOffset","newRange","ariaLabelString","onNavigate","dir","isLeftNavigation","navigationButton","title","CalendarYearNav","navigationButtonsContainer","CalendarYearTitle","onHeaderSelect","onHeaderKeyDown","hasHeaderClickCallback","rangeAriaLabel","headerAriaLabelFormatString","currentDateRange","replace","currentItemButton","span","aria-live","aria-atomic","CalendarYearHeader","onRenderTitle","headerContainer","useAnimateBackwards","navigatedYear","rangeYear","Math","floor","previousFromYearRef","previousFromYear","useYearRangeState","useMemo","setFromYear","useState","onNavNext","onNavPrevious","useEffect","CalendarYear","gridRef","root"],"mappings":"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"}
@@ -145,6 +145,7 @@ const CalendarMonth = (props)=>{
145
145
  // eslint-disable-next-line react/jsx-no-bind
146
146
  onHeaderSelect: onYearPickerHeaderSelect,
147
147
  selectedYear: selectedDate ? selectedDate.getFullYear() : navigatedDate ? navigatedDate.getFullYear() : undefined,
148
+ navigatedYear: navigatedDate.getFullYear(),
148
149
  onRenderYear: onRenderYear,
149
150
  strings: yearStrings,
150
151
  componentRef: calendarYearRef,
@@ -1 +1 @@
1
- {"version":3,"sources":["CalendarMonth.js"],"sourcesContent":["import * as React from 'react';\nimport { Enter } from '@fluentui/keyboard-keys';\nimport { ArrowDownRegular, ArrowUpRegular } from '@fluentui/react-icons';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { mergeClasses } from '@griffel/react';\nimport { addYears, compareDatePart, getMonthEnd, getMonthStart, getYearEnd, getYearStart, setMonth, DEFAULT_DATE_FORMATTING } from '../../utils';\nimport { CalendarYear } from '../CalendarYear/CalendarYear';\nimport { useCalendarMonthStyles_unstable } from './useCalendarMonthStyles';\nconst MONTHS_PER_ROW = 4;\nfunction useAnimateBackwards({ navigatedDate }) {\n const currentYear = navigatedDate.getFullYear();\n const previousYearRef = React.useRef();\n React.useEffect(()=>{\n previousYearRef.current = currentYear;\n });\n const previousYear = previousYearRef.current;\n if (previousYear === undefined || previousYear === currentYear) {\n return undefined;\n } else {\n return previousYear > currentYear;\n }\n}\nfunction useFocusLogic({ componentRef }) {\n const navigatedMonthRef = React.useRef(null);\n const calendarYearRef = React.useRef(null);\n const focusOnUpdate = React.useRef(false);\n const focus = React.useCallback(()=>{\n if (calendarYearRef.current) {\n calendarYearRef.current.focus();\n } else if (navigatedMonthRef.current) {\n navigatedMonthRef.current.focus();\n }\n }, []);\n React.useImperativeHandle(componentRef, ()=>({\n focus\n }), [\n focus\n ]);\n React.useEffect(()=>{\n if (focusOnUpdate.current) {\n focus();\n focusOnUpdate.current = false;\n }\n });\n const focusOnNextUpdate = ()=>{\n focusOnUpdate.current = true;\n };\n return [\n navigatedMonthRef,\n calendarYearRef,\n focusOnNextUpdate\n ];\n}\n/**\n * @internal\n */ export const CalendarMonth = (props)=>{\n const { allFocusable , animationDirection , className , componentRef , dateTimeFormatter =DEFAULT_DATE_FORMATTING , highlightCurrentMonth , highlightSelectedMonth , maxDate , minDate , navigatedDate , onHeaderSelect: onUserHeaderSelect , onNavigateDate , selectedDate , strings , today =new Date() , yearPickerHidden =false } = props;\n const [navigatedMonthRef, calendarYearRef, focusOnNextUpdate] = useFocusLogic({\n componentRef\n });\n const [isYearPickerVisible, setIsYearPickerVisible] = React.useState(false);\n const animateBackwards = useAnimateBackwards({\n navigatedDate\n });\n const selectMonthCallback = (newMonth)=>{\n return ()=>onSelectMonth(newMonth);\n };\n const onSelectNextYear = ()=>{\n onNavigateDate(addYears(navigatedDate, 1), false);\n };\n const onSelectPrevYear = ()=>{\n onNavigateDate(addYears(navigatedDate, -1), false);\n };\n const onSelectMonth = (newMonth)=>{\n // If header is clickable the calendars are overlayed, switch back to day picker when month is clicked\n onUserHeaderSelect === null || onUserHeaderSelect === void 0 ? void 0 : onUserHeaderSelect();\n onNavigateDate(setMonth(navigatedDate, newMonth), true);\n };\n const onHeaderSelect = ()=>{\n if (!yearPickerHidden) {\n focusOnNextUpdate();\n setIsYearPickerVisible(true);\n } else {\n onUserHeaderSelect === null || onUserHeaderSelect === void 0 ? void 0 : onUserHeaderSelect();\n }\n };\n const onSelectYear = (selectedYear)=>{\n focusOnNextUpdate();\n const navYear = navigatedDate.getFullYear();\n if (navYear !== selectedYear) {\n let newNavigationDate = new Date(navigatedDate.getTime());\n newNavigationDate.setFullYear(selectedYear);\n // for min and max dates, adjust the new navigation date - perhaps this should be\n // checked on the master navigation date handler (i.e. in Calendar)\n if (maxDate && newNavigationDate > maxDate) {\n newNavigationDate = setMonth(newNavigationDate, maxDate.getMonth());\n } else if (minDate && newNavigationDate < minDate) {\n newNavigationDate = setMonth(newNavigationDate, minDate.getMonth());\n }\n onNavigateDate(newNavigationDate, true);\n }\n setIsYearPickerVisible(false);\n };\n const onYearPickerHeaderSelect = (focus)=>{\n focusOnNextUpdate();\n setIsYearPickerVisible(false);\n };\n const dateFormatter = dateTimeFormatter;\n // determine if previous/next years are in bounds\n const isPrevYearInBounds = minDate ? compareDatePart(minDate, getYearStart(navigatedDate)) < 0 : true;\n const isNextYearInBounds = maxDate ? compareDatePart(getYearEnd(navigatedDate), maxDate) < 0 : true;\n const classNames = useCalendarMonthStyles_unstable({\n className,\n hasHeaderClickCallback: !!onUserHeaderSelect || !yearPickerHidden,\n highlightCurrent: highlightCurrentMonth,\n highlightSelected: highlightSelectedMonth,\n animateBackwards,\n animationDirection\n });\n const { dir } = useFluent_unstable();\n const arrowNavigationAttributes = useArrowNavigationGroup({\n axis: 'both'\n });\n if (isYearPickerVisible) {\n const [onRenderYear, yearStrings] = getYearStrings({\n dateTimeFormatter,\n navigatedDate,\n strings\n });\n // use navigated date for the year picker\n return /*#__PURE__*/ React.createElement(CalendarYear, {\n key: 'calendarYear',\n minYear: minDate ? minDate.getFullYear() : undefined,\n maxYear: maxDate ? maxDate.getFullYear() : undefined,\n // eslint-disable-next-line react/jsx-no-bind\n onSelectYear: onSelectYear,\n // eslint-disable-next-line react/jsx-no-bind\n onHeaderSelect: onYearPickerHeaderSelect,\n selectedYear: selectedDate ? selectedDate.getFullYear() : navigatedDate ? navigatedDate.getFullYear() : undefined,\n onRenderYear: onRenderYear,\n strings: yearStrings,\n componentRef: calendarYearRef,\n highlightCurrentYear: highlightCurrentMonth,\n highlightSelectedYear: highlightSelectedMonth,\n animationDirection: animationDirection\n });\n }\n const rowIndexes = [];\n for(let i = 0; i < strings.shortMonths.length / MONTHS_PER_ROW; i++){\n rowIndexes.push(i);\n }\n const yearString = dateFormatter.formatYear(navigatedDate);\n const headerAriaLabel = strings.monthPickerHeaderAriaLabel ? strings.monthPickerHeaderAriaLabel.replace('{0}', yearString) : yearString;\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.root\n }, /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.headerContainer\n }, /*#__PURE__*/ React.createElement(\"button\", {\n className: classNames.currentItemButton,\n onClick: onHeaderSelect,\n onKeyDown: onButtonKeyDown(onHeaderSelect),\n \"aria-label\": headerAriaLabel,\n tabIndex: !!onUserHeaderSelect || !yearPickerHidden ? 0 : -1,\n type: \"button\"\n }, /*#__PURE__*/ React.createElement(\"span\", {\n \"aria-live\": \"polite\",\n \"aria-atomic\": \"true\"\n }, yearString)), /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.navigationButtonsContainer\n }, /*#__PURE__*/ React.createElement(\"button\", {\n className: mergeClasses(classNames.navigationButton, !isPrevYearInBounds && classNames.disabled),\n \"aria-disabled\": !isPrevYearInBounds,\n tabIndex: isPrevYearInBounds ? undefined : allFocusable ? 0 : -1,\n onClick: isPrevYearInBounds ? onSelectPrevYear : undefined,\n onKeyDown: isPrevYearInBounds ? onButtonKeyDown(onSelectPrevYear) : undefined,\n title: strings.prevYearAriaLabel ? strings.prevYearAriaLabel + ' ' + dateFormatter.formatYear(addYears(navigatedDate, -1)) : undefined,\n type: \"button\"\n }, dir === 'ltr' ? /*#__PURE__*/ React.createElement(ArrowUpRegular, null) : /*#__PURE__*/ React.createElement(ArrowDownRegular, null)), /*#__PURE__*/ React.createElement(\"button\", {\n className: mergeClasses(classNames.navigationButton, !isNextYearInBounds && classNames.disabled),\n \"aria-disabled\": !isNextYearInBounds,\n tabIndex: isNextYearInBounds ? undefined : allFocusable ? 0 : -1,\n onClick: isNextYearInBounds ? onSelectNextYear : undefined,\n onKeyDown: isNextYearInBounds ? onButtonKeyDown(onSelectNextYear) : undefined,\n title: strings.nextYearAriaLabel ? strings.nextYearAriaLabel + ' ' + dateFormatter.formatYear(addYears(navigatedDate, 1)) : undefined,\n type: \"button\"\n }, dir === 'ltr' ? /*#__PURE__*/ React.createElement(ArrowDownRegular, null) : /*#__PURE__*/ React.createElement(ArrowUpRegular, null)))), /*#__PURE__*/ React.createElement(\"div\", {\n ...arrowNavigationAttributes,\n className: classNames.gridContainer,\n role: \"grid\",\n \"aria-label\": yearString\n }, rowIndexes.map((rowNum)=>{\n const monthsForRow = strings.shortMonths.slice(rowNum * MONTHS_PER_ROW, (rowNum + 1) * MONTHS_PER_ROW);\n return /*#__PURE__*/ React.createElement(\"div\", {\n key: 'monthRow_' + rowNum + navigatedDate.getFullYear(),\n role: \"row\",\n className: classNames.buttonRow\n }, monthsForRow.map((month, index)=>{\n const monthIndex = rowNum * MONTHS_PER_ROW + index;\n const indexedMonth = setMonth(navigatedDate, monthIndex);\n const isNavigatedMonth = navigatedDate.getMonth() === monthIndex;\n const isSelectedMonth = selectedDate.getMonth() === monthIndex;\n const isSelectedYear = selectedDate.getFullYear() === navigatedDate.getFullYear();\n const isInBounds = (minDate ? compareDatePart(minDate, getMonthEnd(indexedMonth)) < 1 : true) && (maxDate ? compareDatePart(getMonthStart(indexedMonth), maxDate) < 1 : true);\n return /*#__PURE__*/ React.createElement(\"button\", {\n ref: isNavigatedMonth ? navigatedMonthRef : undefined,\n role: 'gridcell',\n className: mergeClasses(classNames.itemButton, highlightCurrentMonth && isCurrentMonth(monthIndex, navigatedDate.getFullYear(), today) && classNames.current, highlightSelectedMonth && isSelectedMonth && isSelectedYear && classNames.selected, !isInBounds && classNames.disabled),\n disabled: !allFocusable && !isInBounds,\n key: monthIndex,\n onClick: isInBounds ? selectMonthCallback(monthIndex) : undefined,\n onKeyDown: isInBounds ? onButtonKeyDown(selectMonthCallback(monthIndex)) : undefined,\n \"aria-label\": dateFormatter.formatMonth(indexedMonth, strings),\n \"aria-selected\": isNavigatedMonth,\n tabIndex: isInBounds ? 0 : -1,\n type: \"button\"\n }, month);\n }));\n })));\n};\nCalendarMonth.displayName = 'CalendarMonth';\nfunction getYearStrings({ dateTimeFormatter , navigatedDate , strings }) {\n const yearToString = (year)=>{\n if (dateTimeFormatter) {\n // create a date based on the current nav date\n const yearFormattingDate = new Date(navigatedDate.getTime());\n yearFormattingDate.setFullYear(year);\n return dateTimeFormatter.formatYear(yearFormattingDate);\n }\n return String(year);\n };\n const yearRangeToString = (yearRange)=>{\n return `${yearToString(yearRange.fromYear)} - ${yearToString(yearRange.toYear)}`;\n };\n const yearRangeToNextDecadeLabel = (yearRange)=>{\n return strings.nextYearRangeAriaLabel ? `${strings.nextYearRangeAriaLabel} ${yearRangeToString(yearRange)}` : '';\n };\n const yearRangeToPrevDecadeLabel = (yearRange)=>{\n return strings.prevYearRangeAriaLabel ? `${strings.prevYearRangeAriaLabel} ${yearRangeToString(yearRange)}` : '';\n };\n return [\n yearToString,\n {\n rangeAriaLabel: yearRangeToString,\n prevRangeAriaLabel: yearRangeToPrevDecadeLabel,\n nextRangeAriaLabel: yearRangeToNextDecadeLabel,\n headerAriaLabelFormatString: strings.yearPickerHeaderAriaLabel\n }\n ];\n}\nfunction isCurrentMonth(month, year, today) {\n return today.getFullYear() === year && today.getMonth() === month;\n}\nfunction onButtonKeyDown(callback) {\n return (ev)=>{\n switch(ev.key){\n case Enter:\n callback();\n break;\n }\n };\n}\n"],"names":["CalendarMonth","MONTHS_PER_ROW","useAnimateBackwards","navigatedDate","currentYear","getFullYear","previousYearRef","React","useRef","useEffect","current","previousYear","undefined","useFocusLogic","componentRef","navigatedMonthRef","calendarYearRef","focusOnUpdate","focus","useCallback","useImperativeHandle","focusOnNextUpdate","props","allFocusable","animationDirection","className","dateTimeFormatter","DEFAULT_DATE_FORMATTING","highlightCurrentMonth","highlightSelectedMonth","maxDate","minDate","onHeaderSelect","onUserHeaderSelect","onNavigateDate","selectedDate","strings","today","Date","yearPickerHidden","isYearPickerVisible","setIsYearPickerVisible","useState","animateBackwards","selectMonthCallback","newMonth","onSelectMonth","onSelectNextYear","addYears","onSelectPrevYear","setMonth","onSelectYear","selectedYear","navYear","newNavigationDate","getTime","setFullYear","getMonth","onYearPickerHeaderSelect","dateFormatter","isPrevYearInBounds","compareDatePart","getYearStart","isNextYearInBounds","getYearEnd","classNames","useCalendarMonthStyles_unstable","hasHeaderClickCallback","highlightCurrent","highlightSelected","dir","useFluent_unstable","arrowNavigationAttributes","useArrowNavigationGroup","axis","onRenderYear","yearStrings","getYearStrings","createElement","CalendarYear","key","minYear","maxYear","highlightCurrentYear","highlightSelectedYear","rowIndexes","i","shortMonths","length","push","yearString","formatYear","headerAriaLabel","monthPickerHeaderAriaLabel","replace","root","headerContainer","currentItemButton","onClick","onKeyDown","onButtonKeyDown","tabIndex","type","navigationButtonsContainer","mergeClasses","navigationButton","disabled","title","prevYearAriaLabel","ArrowUpRegular","ArrowDownRegular","nextYearAriaLabel","gridContainer","role","map","rowNum","monthsForRow","slice","buttonRow","month","index","monthIndex","indexedMonth","isNavigatedMonth","isSelectedMonth","isSelectedYear","isInBounds","getMonthEnd","getMonthStart","ref","itemButton","isCurrentMonth","selected","formatMonth","displayName","yearToString","year","yearFormattingDate","String","yearRangeToString","yearRange","fromYear","toYear","yearRangeToNextDecadeLabel","nextYearRangeAriaLabel","yearRangeToPrevDecadeLabel","prevYearRangeAriaLabel","rangeAriaLabel","prevRangeAriaLabel","nextRangeAriaLabel","headerAriaLabelFormatString","yearPickerHeaderAriaLabel","callback","ev","Enter"],"mappings":"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"}
1
+ {"version":3,"sources":["CalendarMonth.js"],"sourcesContent":["import * as React from 'react';\nimport { Enter } from '@fluentui/keyboard-keys';\nimport { ArrowDownRegular, ArrowUpRegular } from '@fluentui/react-icons';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { mergeClasses } from '@griffel/react';\nimport { addYears, compareDatePart, getMonthEnd, getMonthStart, getYearEnd, getYearStart, setMonth, DEFAULT_DATE_FORMATTING } from '../../utils';\nimport { CalendarYear } from '../CalendarYear/CalendarYear';\nimport { useCalendarMonthStyles_unstable } from './useCalendarMonthStyles';\nconst MONTHS_PER_ROW = 4;\nfunction useAnimateBackwards({ navigatedDate }) {\n const currentYear = navigatedDate.getFullYear();\n const previousYearRef = React.useRef();\n React.useEffect(()=>{\n previousYearRef.current = currentYear;\n });\n const previousYear = previousYearRef.current;\n if (previousYear === undefined || previousYear === currentYear) {\n return undefined;\n } else {\n return previousYear > currentYear;\n }\n}\nfunction useFocusLogic({ componentRef }) {\n const navigatedMonthRef = React.useRef(null);\n const calendarYearRef = React.useRef(null);\n const focusOnUpdate = React.useRef(false);\n const focus = React.useCallback(()=>{\n if (calendarYearRef.current) {\n calendarYearRef.current.focus();\n } else if (navigatedMonthRef.current) {\n navigatedMonthRef.current.focus();\n }\n }, []);\n React.useImperativeHandle(componentRef, ()=>({\n focus\n }), [\n focus\n ]);\n React.useEffect(()=>{\n if (focusOnUpdate.current) {\n focus();\n focusOnUpdate.current = false;\n }\n });\n const focusOnNextUpdate = ()=>{\n focusOnUpdate.current = true;\n };\n return [\n navigatedMonthRef,\n calendarYearRef,\n focusOnNextUpdate\n ];\n}\n/**\n * @internal\n */ export const CalendarMonth = (props)=>{\n const { allFocusable , animationDirection , className , componentRef , dateTimeFormatter =DEFAULT_DATE_FORMATTING , highlightCurrentMonth , highlightSelectedMonth , maxDate , minDate , navigatedDate , onHeaderSelect: onUserHeaderSelect , onNavigateDate , selectedDate , strings , today =new Date() , yearPickerHidden =false } = props;\n const [navigatedMonthRef, calendarYearRef, focusOnNextUpdate] = useFocusLogic({\n componentRef\n });\n const [isYearPickerVisible, setIsYearPickerVisible] = React.useState(false);\n const animateBackwards = useAnimateBackwards({\n navigatedDate\n });\n const selectMonthCallback = (newMonth)=>{\n return ()=>onSelectMonth(newMonth);\n };\n const onSelectNextYear = ()=>{\n onNavigateDate(addYears(navigatedDate, 1), false);\n };\n const onSelectPrevYear = ()=>{\n onNavigateDate(addYears(navigatedDate, -1), false);\n };\n const onSelectMonth = (newMonth)=>{\n // If header is clickable the calendars are overlayed, switch back to day picker when month is clicked\n onUserHeaderSelect === null || onUserHeaderSelect === void 0 ? void 0 : onUserHeaderSelect();\n onNavigateDate(setMonth(navigatedDate, newMonth), true);\n };\n const onHeaderSelect = ()=>{\n if (!yearPickerHidden) {\n focusOnNextUpdate();\n setIsYearPickerVisible(true);\n } else {\n onUserHeaderSelect === null || onUserHeaderSelect === void 0 ? void 0 : onUserHeaderSelect();\n }\n };\n const onSelectYear = (selectedYear)=>{\n focusOnNextUpdate();\n const navYear = navigatedDate.getFullYear();\n if (navYear !== selectedYear) {\n let newNavigationDate = new Date(navigatedDate.getTime());\n newNavigationDate.setFullYear(selectedYear);\n // for min and max dates, adjust the new navigation date - perhaps this should be\n // checked on the master navigation date handler (i.e. in Calendar)\n if (maxDate && newNavigationDate > maxDate) {\n newNavigationDate = setMonth(newNavigationDate, maxDate.getMonth());\n } else if (minDate && newNavigationDate < minDate) {\n newNavigationDate = setMonth(newNavigationDate, minDate.getMonth());\n }\n onNavigateDate(newNavigationDate, true);\n }\n setIsYearPickerVisible(false);\n };\n const onYearPickerHeaderSelect = (focus)=>{\n focusOnNextUpdate();\n setIsYearPickerVisible(false);\n };\n const dateFormatter = dateTimeFormatter;\n // determine if previous/next years are in bounds\n const isPrevYearInBounds = minDate ? compareDatePart(minDate, getYearStart(navigatedDate)) < 0 : true;\n const isNextYearInBounds = maxDate ? compareDatePart(getYearEnd(navigatedDate), maxDate) < 0 : true;\n const classNames = useCalendarMonthStyles_unstable({\n className,\n hasHeaderClickCallback: !!onUserHeaderSelect || !yearPickerHidden,\n highlightCurrent: highlightCurrentMonth,\n highlightSelected: highlightSelectedMonth,\n animateBackwards,\n animationDirection\n });\n const { dir } = useFluent_unstable();\n const arrowNavigationAttributes = useArrowNavigationGroup({\n axis: 'both'\n });\n if (isYearPickerVisible) {\n const [onRenderYear, yearStrings] = getYearStrings({\n dateTimeFormatter,\n navigatedDate,\n strings\n });\n // use navigated date for the year picker\n return /*#__PURE__*/ React.createElement(CalendarYear, {\n key: 'calendarYear',\n minYear: minDate ? minDate.getFullYear() : undefined,\n maxYear: maxDate ? maxDate.getFullYear() : undefined,\n // eslint-disable-next-line react/jsx-no-bind\n onSelectYear: onSelectYear,\n // eslint-disable-next-line react/jsx-no-bind\n onHeaderSelect: onYearPickerHeaderSelect,\n selectedYear: selectedDate ? selectedDate.getFullYear() : navigatedDate ? navigatedDate.getFullYear() : undefined,\n navigatedYear: navigatedDate.getFullYear(),\n onRenderYear: onRenderYear,\n strings: yearStrings,\n componentRef: calendarYearRef,\n highlightCurrentYear: highlightCurrentMonth,\n highlightSelectedYear: highlightSelectedMonth,\n animationDirection: animationDirection\n });\n }\n const rowIndexes = [];\n for(let i = 0; i < strings.shortMonths.length / MONTHS_PER_ROW; i++){\n rowIndexes.push(i);\n }\n const yearString = dateFormatter.formatYear(navigatedDate);\n const headerAriaLabel = strings.monthPickerHeaderAriaLabel ? strings.monthPickerHeaderAriaLabel.replace('{0}', yearString) : yearString;\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.root\n }, /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.headerContainer\n }, /*#__PURE__*/ React.createElement(\"button\", {\n className: classNames.currentItemButton,\n onClick: onHeaderSelect,\n onKeyDown: onButtonKeyDown(onHeaderSelect),\n \"aria-label\": headerAriaLabel,\n tabIndex: !!onUserHeaderSelect || !yearPickerHidden ? 0 : -1,\n type: \"button\"\n }, /*#__PURE__*/ React.createElement(\"span\", {\n \"aria-live\": \"polite\",\n \"aria-atomic\": \"true\"\n }, yearString)), /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.navigationButtonsContainer\n }, /*#__PURE__*/ React.createElement(\"button\", {\n className: mergeClasses(classNames.navigationButton, !isPrevYearInBounds && classNames.disabled),\n \"aria-disabled\": !isPrevYearInBounds,\n tabIndex: isPrevYearInBounds ? undefined : allFocusable ? 0 : -1,\n onClick: isPrevYearInBounds ? onSelectPrevYear : undefined,\n onKeyDown: isPrevYearInBounds ? onButtonKeyDown(onSelectPrevYear) : undefined,\n title: strings.prevYearAriaLabel ? strings.prevYearAriaLabel + ' ' + dateFormatter.formatYear(addYears(navigatedDate, -1)) : undefined,\n type: \"button\"\n }, dir === 'ltr' ? /*#__PURE__*/ React.createElement(ArrowUpRegular, null) : /*#__PURE__*/ React.createElement(ArrowDownRegular, null)), /*#__PURE__*/ React.createElement(\"button\", {\n className: mergeClasses(classNames.navigationButton, !isNextYearInBounds && classNames.disabled),\n \"aria-disabled\": !isNextYearInBounds,\n tabIndex: isNextYearInBounds ? undefined : allFocusable ? 0 : -1,\n onClick: isNextYearInBounds ? onSelectNextYear : undefined,\n onKeyDown: isNextYearInBounds ? onButtonKeyDown(onSelectNextYear) : undefined,\n title: strings.nextYearAriaLabel ? strings.nextYearAriaLabel + ' ' + dateFormatter.formatYear(addYears(navigatedDate, 1)) : undefined,\n type: \"button\"\n }, dir === 'ltr' ? /*#__PURE__*/ React.createElement(ArrowDownRegular, null) : /*#__PURE__*/ React.createElement(ArrowUpRegular, null)))), /*#__PURE__*/ React.createElement(\"div\", {\n ...arrowNavigationAttributes,\n className: classNames.gridContainer,\n role: \"grid\",\n \"aria-label\": yearString\n }, rowIndexes.map((rowNum)=>{\n const monthsForRow = strings.shortMonths.slice(rowNum * MONTHS_PER_ROW, (rowNum + 1) * MONTHS_PER_ROW);\n return /*#__PURE__*/ React.createElement(\"div\", {\n key: 'monthRow_' + rowNum + navigatedDate.getFullYear(),\n role: \"row\",\n className: classNames.buttonRow\n }, monthsForRow.map((month, index)=>{\n const monthIndex = rowNum * MONTHS_PER_ROW + index;\n const indexedMonth = setMonth(navigatedDate, monthIndex);\n const isNavigatedMonth = navigatedDate.getMonth() === monthIndex;\n const isSelectedMonth = selectedDate.getMonth() === monthIndex;\n const isSelectedYear = selectedDate.getFullYear() === navigatedDate.getFullYear();\n const isInBounds = (minDate ? compareDatePart(minDate, getMonthEnd(indexedMonth)) < 1 : true) && (maxDate ? compareDatePart(getMonthStart(indexedMonth), maxDate) < 1 : true);\n return /*#__PURE__*/ React.createElement(\"button\", {\n ref: isNavigatedMonth ? navigatedMonthRef : undefined,\n role: 'gridcell',\n className: mergeClasses(classNames.itemButton, highlightCurrentMonth && isCurrentMonth(monthIndex, navigatedDate.getFullYear(), today) && classNames.current, highlightSelectedMonth && isSelectedMonth && isSelectedYear && classNames.selected, !isInBounds && classNames.disabled),\n disabled: !allFocusable && !isInBounds,\n key: monthIndex,\n onClick: isInBounds ? selectMonthCallback(monthIndex) : undefined,\n onKeyDown: isInBounds ? onButtonKeyDown(selectMonthCallback(monthIndex)) : undefined,\n \"aria-label\": dateFormatter.formatMonth(indexedMonth, strings),\n \"aria-selected\": isNavigatedMonth,\n tabIndex: isInBounds ? 0 : -1,\n type: \"button\"\n }, month);\n }));\n })));\n};\nCalendarMonth.displayName = 'CalendarMonth';\nfunction getYearStrings({ dateTimeFormatter , navigatedDate , strings }) {\n const yearToString = (year)=>{\n if (dateTimeFormatter) {\n // create a date based on the current nav date\n const yearFormattingDate = new Date(navigatedDate.getTime());\n yearFormattingDate.setFullYear(year);\n return dateTimeFormatter.formatYear(yearFormattingDate);\n }\n return String(year);\n };\n const yearRangeToString = (yearRange)=>{\n return `${yearToString(yearRange.fromYear)} - ${yearToString(yearRange.toYear)}`;\n };\n const yearRangeToNextDecadeLabel = (yearRange)=>{\n return strings.nextYearRangeAriaLabel ? `${strings.nextYearRangeAriaLabel} ${yearRangeToString(yearRange)}` : '';\n };\n const yearRangeToPrevDecadeLabel = (yearRange)=>{\n return strings.prevYearRangeAriaLabel ? `${strings.prevYearRangeAriaLabel} ${yearRangeToString(yearRange)}` : '';\n };\n return [\n yearToString,\n {\n rangeAriaLabel: yearRangeToString,\n prevRangeAriaLabel: yearRangeToPrevDecadeLabel,\n nextRangeAriaLabel: yearRangeToNextDecadeLabel,\n headerAriaLabelFormatString: strings.yearPickerHeaderAriaLabel\n }\n ];\n}\nfunction isCurrentMonth(month, year, today) {\n return today.getFullYear() === year && today.getMonth() === month;\n}\nfunction onButtonKeyDown(callback) {\n return (ev)=>{\n switch(ev.key){\n case Enter:\n callback();\n break;\n }\n };\n}\n"],"names":["CalendarMonth","MONTHS_PER_ROW","useAnimateBackwards","navigatedDate","currentYear","getFullYear","previousYearRef","React","useRef","useEffect","current","previousYear","undefined","useFocusLogic","componentRef","navigatedMonthRef","calendarYearRef","focusOnUpdate","focus","useCallback","useImperativeHandle","focusOnNextUpdate","props","allFocusable","animationDirection","className","dateTimeFormatter","DEFAULT_DATE_FORMATTING","highlightCurrentMonth","highlightSelectedMonth","maxDate","minDate","onHeaderSelect","onUserHeaderSelect","onNavigateDate","selectedDate","strings","today","Date","yearPickerHidden","isYearPickerVisible","setIsYearPickerVisible","useState","animateBackwards","selectMonthCallback","newMonth","onSelectMonth","onSelectNextYear","addYears","onSelectPrevYear","setMonth","onSelectYear","selectedYear","navYear","newNavigationDate","getTime","setFullYear","getMonth","onYearPickerHeaderSelect","dateFormatter","isPrevYearInBounds","compareDatePart","getYearStart","isNextYearInBounds","getYearEnd","classNames","useCalendarMonthStyles_unstable","hasHeaderClickCallback","highlightCurrent","highlightSelected","dir","useFluent_unstable","arrowNavigationAttributes","useArrowNavigationGroup","axis","onRenderYear","yearStrings","getYearStrings","createElement","CalendarYear","key","minYear","maxYear","navigatedYear","highlightCurrentYear","highlightSelectedYear","rowIndexes","i","shortMonths","length","push","yearString","formatYear","headerAriaLabel","monthPickerHeaderAriaLabel","replace","root","headerContainer","currentItemButton","onClick","onKeyDown","onButtonKeyDown","tabIndex","type","navigationButtonsContainer","mergeClasses","navigationButton","disabled","title","prevYearAriaLabel","ArrowUpRegular","ArrowDownRegular","nextYearAriaLabel","gridContainer","role","map","rowNum","monthsForRow","slice","buttonRow","month","index","monthIndex","indexedMonth","isNavigatedMonth","isSelectedMonth","isSelectedYear","isInBounds","getMonthEnd","getMonthStart","ref","itemButton","isCurrentMonth","selected","formatMonth","displayName","yearToString","year","yearFormattingDate","String","yearRangeToString","yearRange","fromYear","toYear","yearRangeToNextDecadeLabel","nextYearRangeAriaLabel","yearRangeToPrevDecadeLabel","prevYearRangeAriaLabel","rangeAriaLabel","prevRangeAriaLabel","nextRangeAriaLabel","headerAriaLabelFormatString","yearPickerHeaderAriaLabel","callback","ev","Enter"],"mappings":"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"}
@@ -248,20 +248,26 @@ function useAnimateBackwards({ selectedYear , navigatedYear }) {
248
248
  return false;
249
249
  }
250
250
  }
251
- const NavigationDirection = {
252
- Previous: 0,
253
- Next: 1
254
- };
255
251
  function useYearRangeState({ selectedYear , navigatedYear }) {
256
- const [fromYear, navigate] = _react.useReducer((state, action)=>{
257
- return state + (action === NavigationDirection.Next ? CELL_COUNT : -CELL_COUNT);
258
- }, undefined, ()=>{
259
- const rangeYear = selectedYear || navigatedYear || new Date().getFullYear();
260
- return Math.floor(rangeYear / 10) * 10;
261
- });
252
+ const rangeYear = _react.useMemo(()=>{
253
+ return selectedYear || navigatedYear || Math.floor(new Date().getFullYear() / 10) * 10;
254
+ }, [
255
+ navigatedYear,
256
+ selectedYear
257
+ ]);
258
+ const [fromYear, setFromYear] = _react.useState(rangeYear);
259
+ const onNavNext = ()=>{
260
+ setFromYear((year)=>year + CELL_COUNT);
261
+ };
262
+ const onNavPrevious = ()=>{
263
+ setFromYear((year)=>year - CELL_COUNT);
264
+ };
265
+ _react.useEffect(()=>{
266
+ setFromYear(rangeYear);
267
+ }, [
268
+ rangeYear
269
+ ]);
262
270
  const toYear = fromYear + CELL_COUNT - 1;
263
- const onNavNext = ()=>navigate(NavigationDirection.Next);
264
- const onNavPrevious = ()=>navigate(NavigationDirection.Previous);
265
271
  return [
266
272
  fromYear,
267
273
  toYear,
@@ -1 +1 @@
1
- {"version":3,"sources":["CalendarYear.js"],"sourcesContent":["import * as React from 'react';\nimport { Enter, Space } from '@fluentui/keyboard-keys';\nimport { ArrowDownRegular, ArrowUpRegular } from '@fluentui/react-icons';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { mergeClasses } from '@griffel/react';\nimport { useCalendarYearStyles_unstable } from './useCalendarYearStyles.styles';\nconst CELL_COUNT = 12;\nconst CELLS_PER_ROW = 4;\nconst DefaultCalendarYearStrings = {\n prevRangeAriaLabel: undefined,\n nextRangeAriaLabel: undefined\n};\nconst CalendarYearGridCell = (props)=>{\n const { className , highlightCurrentYear , highlightSelectedYear , year , selected , disabled , componentRef , onSelectYear , onRenderYear } = props;\n const buttonRef = React.useRef(null);\n React.useImperativeHandle(componentRef, ()=>{\n return {\n focus () {\n var _buttonRef_current, _buttonRef_current_focus;\n (_buttonRef_current = buttonRef.current) === null || _buttonRef_current === void 0 ? void 0 : (_buttonRef_current_focus = _buttonRef_current.focus) === null || _buttonRef_current_focus === void 0 ? void 0 : _buttonRef_current_focus.call(_buttonRef_current);\n }\n };\n }, []);\n const onClick = ()=>{\n onSelectYear === null || onSelectYear === void 0 ? void 0 : onSelectYear(year);\n };\n const onKeyDown = (ev)=>{\n if (ev.key === Enter) {\n onSelectYear === null || onSelectYear === void 0 ? void 0 : onSelectYear(year);\n }\n };\n const classNames = useCalendarYearStyles_unstable({\n className,\n highlightCurrent: highlightCurrentYear,\n highlightSelected: highlightSelectedYear\n });\n var _onRenderYear;\n return /*#__PURE__*/ React.createElement(\"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 }, (_onRenderYear = onRenderYear === null || onRenderYear === void 0 ? void 0 : onRenderYear(year)) !== null && _onRenderYear !== void 0 ? _onRenderYear : year);\n};\nCalendarYearGridCell.displayName = 'CalendarYearGridCell';\nconst CalendarYearGrid = (props)=>{\n const { className , fromYear , toYear , animationDirection , animateBackwards , minYear , maxYear , onSelectYear , selectedYear , componentRef } = props;\n const selectedCellRef = React.useRef(null);\n const currentCellRef = React.useRef(null);\n React.useImperativeHandle(componentRef, ()=>{\n return {\n focus () {\n var _ref, _ref_focus;\n (_ref = selectedCellRef.current || currentCellRef.current) === null || _ref === void 0 ? void 0 : (_ref_focus = _ref.focus) === null || _ref_focus === void 0 ? void 0 : _ref_focus.call(_ref);\n }\n };\n }, []);\n const renderCell = (yearToRender)=>{\n const selected = yearToRender === selectedYear;\n const disabled = minYear !== undefined && yearToRender < minYear || maxYear !== undefined && yearToRender > maxYear;\n const current = yearToRender === new Date().getFullYear();\n return /*#__PURE__*/ React.createElement(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 const classNames = useCalendarYearStyles_unstable({\n className,\n animateBackwards,\n animationDirection\n });\n const onRenderYear = (value)=>{\n var _props_onRenderYear;\n var _props_onRenderYear1;\n return (_props_onRenderYear1 = (_props_onRenderYear = props.onRenderYear) === null || _props_onRenderYear === void 0 ? void 0 : _props_onRenderYear.call(props, value)) !== null && _props_onRenderYear1 !== void 0 ? _props_onRenderYear1 : value;\n };\n const gridAriaLabel = `${onRenderYear(fromYear)} - ${onRenderYear(toYear)}`;\n let year = fromYear;\n const cells = [];\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 const arrowNavigationAttributes = useArrowNavigationGroup({\n axis: 'both'\n });\n return /*#__PURE__*/ React.createElement(\"div\", arrowNavigationAttributes, /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.gridContainer,\n role: \"grid\",\n \"aria-label\": gridAriaLabel\n }, cells.map((cellRow, index)=>{\n return /*#__PURE__*/ React.createElement(\"div\", {\n key: 'yearPickerRow_' + index + '_' + fromYear,\n role: \"row\",\n className: classNames.buttonRow\n }, cellRow);\n })));\n};\nCalendarYearGrid.displayName = 'CalendarYearGrid';\nconst CalendarYearNavDirection = {\n Previous: 0,\n Next: 1\n};\nconst CalendarYearNavArrow = (props)=>{\n const { className , strings =DefaultCalendarYearStrings , direction , onSelectPrev , onSelectNext , fromYear , toYear , maxYear , minYear } = props;\n const classNames = useCalendarYearStyles_unstable({\n className\n });\n const ariaLabel = direction === CalendarYearNavDirection.Previous ? strings.prevRangeAriaLabel : strings.nextRangeAriaLabel;\n const newRangeOffset = direction === CalendarYearNavDirection.Previous ? -CELL_COUNT : CELL_COUNT;\n const newRange = {\n fromYear: fromYear + newRangeOffset,\n toYear: toYear + newRangeOffset\n };\n const ariaLabelString = ariaLabel ? typeof ariaLabel === 'string' ? ariaLabel : ariaLabel(newRange) : undefined;\n const disabled = direction === CalendarYearNavDirection.Previous ? minYear !== undefined && fromYear < minYear : maxYear !== undefined && props.fromYear + CELL_COUNT > maxYear;\n const onNavigate = ()=>{\n direction === CalendarYearNavDirection.Previous ? onSelectPrev === null || onSelectPrev === void 0 ? void 0 : onSelectPrev() : onSelectNext === null || onSelectNext === void 0 ? void 0 : onSelectNext();\n };\n const onKeyDown = (ev)=>{\n if (ev.key === Enter) {\n onNavigate();\n }\n };\n const { dir } = useFluent_unstable();\n // can be condensed, but leaving verbose for clarity due to regressions\n const isLeftNavigation = dir === 'rtl' ? direction === CalendarYearNavDirection.Next : direction === CalendarYearNavDirection.Previous;\n return /*#__PURE__*/ React.createElement(\"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 }, isLeftNavigation ? /*#__PURE__*/ React.createElement(ArrowUpRegular, null) : /*#__PURE__*/ React.createElement(ArrowDownRegular, null));\n};\nCalendarYearNavArrow.displayName = 'CalendarYearNavArrow';\nconst CalendarYearNav = (props)=>{\n const { className } = props;\n const classNames = useCalendarYearStyles_unstable({\n className\n });\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.navigationButtonsContainer\n }, /*#__PURE__*/ React.createElement(CalendarYearNavArrow, {\n ...props,\n direction: CalendarYearNavDirection.Previous\n }), /*#__PURE__*/ React.createElement(CalendarYearNavArrow, {\n ...props,\n direction: CalendarYearNavDirection.Next\n }));\n};\nCalendarYearNav.displayName = 'CalendarYearNav';\nconst CalendarYearTitle = (props)=>{\n const { className , fromYear , toYear , strings =DefaultCalendarYearStrings , animateBackwards , animationDirection } = props;\n const onHeaderSelect = ()=>{\n var _props_onHeaderSelect;\n (_props_onHeaderSelect = props.onHeaderSelect) === null || _props_onHeaderSelect === void 0 ? void 0 : _props_onHeaderSelect.call(props, true);\n };\n const onHeaderKeyDown = (ev)=>{\n if (ev.key === Enter || ev.key === Space) {\n onHeaderSelect();\n }\n };\n const onRenderYear = (year)=>{\n var _props_onRenderYear;\n var _props_onRenderYear1;\n return (_props_onRenderYear1 = (_props_onRenderYear = props.onRenderYear) === null || _props_onRenderYear === void 0 ? void 0 : _props_onRenderYear.call(props, year)) !== null && _props_onRenderYear1 !== void 0 ? _props_onRenderYear1 : year;\n };\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection\n });\n if (props.onHeaderSelect) {\n const rangeAriaLabel = strings.rangeAriaLabel;\n const headerAriaLabelFormatString = strings.headerAriaLabelFormatString;\n const currentDateRange = rangeAriaLabel ? typeof rangeAriaLabel === 'string' ? rangeAriaLabel : rangeAriaLabel(props) : undefined;\n const ariaLabel = headerAriaLabelFormatString ? headerAriaLabelFormatString.replace('{0}', currentDateRange !== null && currentDateRange !== void 0 ? currentDateRange : '') : currentDateRange;\n return /*#__PURE__*/ React.createElement(\"button\", {\n className: classNames.currentItemButton,\n onClick: onHeaderSelect,\n onKeyDown: onHeaderKeyDown,\n \"aria-label\": ariaLabel,\n role: \"button\",\n type: \"button\"\n }, /*#__PURE__*/ React.createElement(\"span\", {\n \"aria-live\": \"assertive\",\n \"aria-atomic\": \"true\"\n }, onRenderYear(fromYear), \" - \", onRenderYear(toYear)));\n }\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.current\n }, onRenderYear(fromYear), \" - \", onRenderYear(toYear));\n};\nCalendarYearTitle.displayName = 'CalendarYearTitle';\nconst CalendarYearHeader = (props)=>{\n const { className , animateBackwards , animationDirection , onRenderTitle } = props;\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection\n });\n var _onRenderTitle;\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.headerContainer\n }, (_onRenderTitle = onRenderTitle === null || onRenderTitle === void 0 ? void 0 : onRenderTitle(props)) !== null && _onRenderTitle !== void 0 ? _onRenderTitle : /*#__PURE__*/ React.createElement(CalendarYearTitle, props), /*#__PURE__*/ React.createElement(CalendarYearNav, props));\n};\nCalendarYearHeader.displayName = 'CalendarYearHeader';\nfunction useAnimateBackwards({ selectedYear , navigatedYear }) {\n const rangeYear = selectedYear || navigatedYear || new Date().getFullYear();\n const fromYear = Math.floor(rangeYear / 10) * 10;\n const previousFromYearRef = React.useRef(fromYear);\n React.useRef(()=>{\n previousFromYearRef.current = fromYear;\n });\n const previousFromYear = previousFromYearRef.current;\n if (!previousFromYear || previousFromYear === fromYear) {\n return undefined;\n } else if (previousFromYear > fromYear) {\n return true;\n } else {\n return false;\n }\n}\nconst NavigationDirection = {\n Previous: 0,\n Next: 1\n};\nfunction useYearRangeState({ selectedYear , navigatedYear }) {\n const [fromYear, navigate] = React.useReducer((state, action)=>{\n return state + (action === NavigationDirection.Next ? CELL_COUNT : -CELL_COUNT);\n }, undefined, ()=>{\n const rangeYear = selectedYear || navigatedYear || new Date().getFullYear();\n return Math.floor(rangeYear / 10) * 10;\n });\n const toYear = fromYear + CELL_COUNT - 1;\n const onNavNext = ()=>navigate(NavigationDirection.Next);\n const onNavPrevious = ()=>navigate(NavigationDirection.Previous);\n return [\n fromYear,\n toYear,\n onNavNext,\n onNavPrevious\n ];\n}\n/**\n * @internal\n */ export const CalendarYear = (props)=>{\n const animateBackwards = useAnimateBackwards(props);\n const [fromYear, toYear, onNavNext, onNavPrevious] = useYearRangeState(props);\n const gridRef = React.useRef(null);\n React.useImperativeHandle(props.componentRef, ()=>{\n return {\n focus () {\n var _gridRef_current, _gridRef_current_focus;\n (_gridRef_current = gridRef.current) === null || _gridRef_current === void 0 ? void 0 : (_gridRef_current_focus = _gridRef_current.focus) === null || _gridRef_current_focus === void 0 ? void 0 : _gridRef_current_focus.call(_gridRef_current);\n }\n };\n });\n const { className } = props;\n const classNames = useCalendarYearStyles_unstable({\n className\n });\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.root\n }, /*#__PURE__*/ React.createElement(CalendarYearHeader, {\n ...props,\n fromYear: fromYear,\n toYear: toYear,\n onSelectPrev: onNavPrevious,\n onSelectNext: onNavNext,\n animateBackwards: animateBackwards\n }), /*#__PURE__*/ React.createElement(CalendarYearGrid, {\n ...props,\n fromYear: fromYear,\n toYear: toYear,\n animateBackwards: animateBackwards,\n componentRef: gridRef\n }));\n};\nCalendarYear.displayName = 'CalendarYear';\n"],"names":["CalendarYear","CELL_COUNT","CELLS_PER_ROW","DefaultCalendarYearStrings","prevRangeAriaLabel","undefined","nextRangeAriaLabel","CalendarYearGridCell","props","className","highlightCurrentYear","highlightSelectedYear","year","selected","disabled","componentRef","onSelectYear","onRenderYear","buttonRef","React","useRef","useImperativeHandle","focus","_buttonRef_current","_buttonRef_current_focus","current","call","onClick","onKeyDown","ev","key","Enter","classNames","useCalendarYearStyles_unstable","highlightCurrent","highlightSelected","_onRenderYear","createElement","mergeClasses","itemButton","type","role","ref","displayName","CalendarYearGrid","fromYear","toYear","animationDirection","animateBackwards","minYear","maxYear","selectedYear","selectedCellRef","currentCellRef","_ref","_ref_focus","renderCell","yearToRender","Date","getFullYear","value","_props_onRenderYear","_props_onRenderYear1","gridAriaLabel","cells","i","push","j","arrowNavigationAttributes","useArrowNavigationGroup","axis","gridContainer","map","cellRow","index","buttonRow","CalendarYearNavDirection","Previous","Next","CalendarYearNavArrow","strings","direction","onSelectPrev","onSelectNext","ariaLabel","newRangeOffset","newRange","ariaLabelString","onNavigate","dir","useFluent_unstable","isLeftNavigation","navigationButton","title","ArrowUpRegular","ArrowDownRegular","CalendarYearNav","navigationButtonsContainer","CalendarYearTitle","onHeaderSelect","_props_onHeaderSelect","onHeaderKeyDown","Space","hasHeaderClickCallback","rangeAriaLabel","headerAriaLabelFormatString","currentDateRange","replace","currentItemButton","CalendarYearHeader","onRenderTitle","_onRenderTitle","headerContainer","useAnimateBackwards","navigatedYear","rangeYear","Math","floor","previousFromYearRef","previousFromYear","NavigationDirection","useYearRangeState","navigate","useReducer","state","action","onNavNext","onNavPrevious","gridRef","_gridRef_current","_gridRef_current_focus","root"],"mappings":"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"}
1
+ {"version":3,"sources":["CalendarYear.js"],"sourcesContent":["import * as React from 'react';\nimport { Enter, Space } from '@fluentui/keyboard-keys';\nimport { ArrowDownRegular, ArrowUpRegular } from '@fluentui/react-icons';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { mergeClasses } from '@griffel/react';\nimport { useCalendarYearStyles_unstable } from './useCalendarYearStyles.styles';\nconst CELL_COUNT = 12;\nconst CELLS_PER_ROW = 4;\nconst DefaultCalendarYearStrings = {\n prevRangeAriaLabel: undefined,\n nextRangeAriaLabel: undefined\n};\nconst CalendarYearGridCell = (props)=>{\n const { className , highlightCurrentYear , highlightSelectedYear , year , selected , disabled , componentRef , onSelectYear , onRenderYear } = props;\n const buttonRef = React.useRef(null);\n React.useImperativeHandle(componentRef, ()=>{\n return {\n focus () {\n var _buttonRef_current, _buttonRef_current_focus;\n (_buttonRef_current = buttonRef.current) === null || _buttonRef_current === void 0 ? void 0 : (_buttonRef_current_focus = _buttonRef_current.focus) === null || _buttonRef_current_focus === void 0 ? void 0 : _buttonRef_current_focus.call(_buttonRef_current);\n }\n };\n }, []);\n const onClick = ()=>{\n onSelectYear === null || onSelectYear === void 0 ? void 0 : onSelectYear(year);\n };\n const onKeyDown = (ev)=>{\n if (ev.key === Enter) {\n onSelectYear === null || onSelectYear === void 0 ? void 0 : onSelectYear(year);\n }\n };\n const classNames = useCalendarYearStyles_unstable({\n className,\n highlightCurrent: highlightCurrentYear,\n highlightSelected: highlightSelectedYear\n });\n var _onRenderYear;\n return /*#__PURE__*/ React.createElement(\"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 }, (_onRenderYear = onRenderYear === null || onRenderYear === void 0 ? void 0 : onRenderYear(year)) !== null && _onRenderYear !== void 0 ? _onRenderYear : year);\n};\nCalendarYearGridCell.displayName = 'CalendarYearGridCell';\nconst CalendarYearGrid = (props)=>{\n const { className , fromYear , toYear , animationDirection , animateBackwards , minYear , maxYear , onSelectYear , selectedYear , componentRef } = props;\n const selectedCellRef = React.useRef(null);\n const currentCellRef = React.useRef(null);\n React.useImperativeHandle(componentRef, ()=>{\n return {\n focus () {\n var _ref, _ref_focus;\n (_ref = selectedCellRef.current || currentCellRef.current) === null || _ref === void 0 ? void 0 : (_ref_focus = _ref.focus) === null || _ref_focus === void 0 ? void 0 : _ref_focus.call(_ref);\n }\n };\n }, []);\n const renderCell = (yearToRender)=>{\n const selected = yearToRender === selectedYear;\n const disabled = minYear !== undefined && yearToRender < minYear || maxYear !== undefined && yearToRender > maxYear;\n const current = yearToRender === new Date().getFullYear();\n return /*#__PURE__*/ React.createElement(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 const classNames = useCalendarYearStyles_unstable({\n className,\n animateBackwards,\n animationDirection\n });\n const onRenderYear = (value)=>{\n var _props_onRenderYear;\n var _props_onRenderYear1;\n return (_props_onRenderYear1 = (_props_onRenderYear = props.onRenderYear) === null || _props_onRenderYear === void 0 ? void 0 : _props_onRenderYear.call(props, value)) !== null && _props_onRenderYear1 !== void 0 ? _props_onRenderYear1 : value;\n };\n const gridAriaLabel = `${onRenderYear(fromYear)} - ${onRenderYear(toYear)}`;\n let year = fromYear;\n const cells = [];\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 const arrowNavigationAttributes = useArrowNavigationGroup({\n axis: 'both'\n });\n return /*#__PURE__*/ React.createElement(\"div\", arrowNavigationAttributes, /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.gridContainer,\n role: \"grid\",\n \"aria-label\": gridAriaLabel\n }, cells.map((cellRow, index)=>{\n return /*#__PURE__*/ React.createElement(\"div\", {\n key: 'yearPickerRow_' + index + '_' + fromYear,\n role: \"row\",\n className: classNames.buttonRow\n }, cellRow);\n })));\n};\nCalendarYearGrid.displayName = 'CalendarYearGrid';\nconst CalendarYearNavDirection = {\n Previous: 0,\n Next: 1\n};\nconst CalendarYearNavArrow = (props)=>{\n const { className , strings =DefaultCalendarYearStrings , direction , onSelectPrev , onSelectNext , fromYear , toYear , maxYear , minYear } = props;\n const classNames = useCalendarYearStyles_unstable({\n className\n });\n const ariaLabel = direction === CalendarYearNavDirection.Previous ? strings.prevRangeAriaLabel : strings.nextRangeAriaLabel;\n const newRangeOffset = direction === CalendarYearNavDirection.Previous ? -CELL_COUNT : CELL_COUNT;\n const newRange = {\n fromYear: fromYear + newRangeOffset,\n toYear: toYear + newRangeOffset\n };\n const ariaLabelString = ariaLabel ? typeof ariaLabel === 'string' ? ariaLabel : ariaLabel(newRange) : undefined;\n const disabled = direction === CalendarYearNavDirection.Previous ? minYear !== undefined && fromYear < minYear : maxYear !== undefined && props.fromYear + CELL_COUNT > maxYear;\n const onNavigate = ()=>{\n direction === CalendarYearNavDirection.Previous ? onSelectPrev === null || onSelectPrev === void 0 ? void 0 : onSelectPrev() : onSelectNext === null || onSelectNext === void 0 ? void 0 : onSelectNext();\n };\n const onKeyDown = (ev)=>{\n if (ev.key === Enter) {\n onNavigate();\n }\n };\n const { dir } = useFluent_unstable();\n // can be condensed, but leaving verbose for clarity due to regressions\n const isLeftNavigation = dir === 'rtl' ? direction === CalendarYearNavDirection.Next : direction === CalendarYearNavDirection.Previous;\n return /*#__PURE__*/ React.createElement(\"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 }, isLeftNavigation ? /*#__PURE__*/ React.createElement(ArrowUpRegular, null) : /*#__PURE__*/ React.createElement(ArrowDownRegular, null));\n};\nCalendarYearNavArrow.displayName = 'CalendarYearNavArrow';\nconst CalendarYearNav = (props)=>{\n const { className } = props;\n const classNames = useCalendarYearStyles_unstable({\n className\n });\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.navigationButtonsContainer\n }, /*#__PURE__*/ React.createElement(CalendarYearNavArrow, {\n ...props,\n direction: CalendarYearNavDirection.Previous\n }), /*#__PURE__*/ React.createElement(CalendarYearNavArrow, {\n ...props,\n direction: CalendarYearNavDirection.Next\n }));\n};\nCalendarYearNav.displayName = 'CalendarYearNav';\nconst CalendarYearTitle = (props)=>{\n const { className , fromYear , toYear , strings =DefaultCalendarYearStrings , animateBackwards , animationDirection } = props;\n const onHeaderSelect = ()=>{\n var _props_onHeaderSelect;\n (_props_onHeaderSelect = props.onHeaderSelect) === null || _props_onHeaderSelect === void 0 ? void 0 : _props_onHeaderSelect.call(props, true);\n };\n const onHeaderKeyDown = (ev)=>{\n if (ev.key === Enter || ev.key === Space) {\n onHeaderSelect();\n }\n };\n const onRenderYear = (year)=>{\n var _props_onRenderYear;\n var _props_onRenderYear1;\n return (_props_onRenderYear1 = (_props_onRenderYear = props.onRenderYear) === null || _props_onRenderYear === void 0 ? void 0 : _props_onRenderYear.call(props, year)) !== null && _props_onRenderYear1 !== void 0 ? _props_onRenderYear1 : year;\n };\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection\n });\n if (props.onHeaderSelect) {\n const rangeAriaLabel = strings.rangeAriaLabel;\n const headerAriaLabelFormatString = strings.headerAriaLabelFormatString;\n const currentDateRange = rangeAriaLabel ? typeof rangeAriaLabel === 'string' ? rangeAriaLabel : rangeAriaLabel(props) : undefined;\n const ariaLabel = headerAriaLabelFormatString ? headerAriaLabelFormatString.replace('{0}', currentDateRange !== null && currentDateRange !== void 0 ? currentDateRange : '') : currentDateRange;\n return /*#__PURE__*/ React.createElement(\"button\", {\n className: classNames.currentItemButton,\n onClick: onHeaderSelect,\n onKeyDown: onHeaderKeyDown,\n \"aria-label\": ariaLabel,\n role: \"button\",\n type: \"button\"\n }, /*#__PURE__*/ React.createElement(\"span\", {\n \"aria-live\": \"assertive\",\n \"aria-atomic\": \"true\"\n }, onRenderYear(fromYear), \" - \", onRenderYear(toYear)));\n }\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.current\n }, onRenderYear(fromYear), \" - \", onRenderYear(toYear));\n};\nCalendarYearTitle.displayName = 'CalendarYearTitle';\nconst CalendarYearHeader = (props)=>{\n const { className , animateBackwards , animationDirection , onRenderTitle } = props;\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection\n });\n var _onRenderTitle;\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.headerContainer\n }, (_onRenderTitle = onRenderTitle === null || onRenderTitle === void 0 ? void 0 : onRenderTitle(props)) !== null && _onRenderTitle !== void 0 ? _onRenderTitle : /*#__PURE__*/ React.createElement(CalendarYearTitle, props), /*#__PURE__*/ React.createElement(CalendarYearNav, props));\n};\nCalendarYearHeader.displayName = 'CalendarYearHeader';\nfunction useAnimateBackwards({ selectedYear , navigatedYear }) {\n const rangeYear = selectedYear || navigatedYear || new Date().getFullYear();\n const fromYear = Math.floor(rangeYear / 10) * 10;\n const previousFromYearRef = React.useRef(fromYear);\n React.useRef(()=>{\n previousFromYearRef.current = fromYear;\n });\n const previousFromYear = previousFromYearRef.current;\n if (!previousFromYear || previousFromYear === fromYear) {\n return undefined;\n } else if (previousFromYear > fromYear) {\n return true;\n } else {\n return false;\n }\n}\nfunction useYearRangeState({ selectedYear , navigatedYear }) {\n const rangeYear = React.useMemo(()=>{\n return selectedYear || navigatedYear || Math.floor(new Date().getFullYear() / 10) * 10;\n }, [\n navigatedYear,\n selectedYear\n ]);\n const [fromYear, setFromYear] = React.useState(rangeYear);\n const onNavNext = ()=>{\n setFromYear((year)=>year + CELL_COUNT);\n };\n const onNavPrevious = ()=>{\n setFromYear((year)=>year - CELL_COUNT);\n };\n React.useEffect(()=>{\n setFromYear(rangeYear);\n }, [\n rangeYear\n ]);\n const toYear = fromYear + CELL_COUNT - 1;\n return [\n fromYear,\n toYear,\n onNavNext,\n onNavPrevious\n ];\n}\n/**\n * @internal\n */ export const CalendarYear = (props)=>{\n const animateBackwards = useAnimateBackwards(props);\n const [fromYear, toYear, onNavNext, onNavPrevious] = useYearRangeState(props);\n const gridRef = React.useRef(null);\n React.useImperativeHandle(props.componentRef, ()=>{\n return {\n focus () {\n var _gridRef_current, _gridRef_current_focus;\n (_gridRef_current = gridRef.current) === null || _gridRef_current === void 0 ? void 0 : (_gridRef_current_focus = _gridRef_current.focus) === null || _gridRef_current_focus === void 0 ? void 0 : _gridRef_current_focus.call(_gridRef_current);\n }\n };\n });\n const { className } = props;\n const classNames = useCalendarYearStyles_unstable({\n className\n });\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: classNames.root\n }, /*#__PURE__*/ React.createElement(CalendarYearHeader, {\n ...props,\n fromYear: fromYear,\n toYear: toYear,\n onSelectPrev: onNavPrevious,\n onSelectNext: onNavNext,\n animateBackwards: animateBackwards\n }), /*#__PURE__*/ React.createElement(CalendarYearGrid, {\n ...props,\n fromYear: fromYear,\n toYear: toYear,\n animateBackwards: animateBackwards,\n componentRef: gridRef\n }));\n};\nCalendarYear.displayName = 'CalendarYear';\n"],"names":["CalendarYear","CELL_COUNT","CELLS_PER_ROW","DefaultCalendarYearStrings","prevRangeAriaLabel","undefined","nextRangeAriaLabel","CalendarYearGridCell","props","className","highlightCurrentYear","highlightSelectedYear","year","selected","disabled","componentRef","onSelectYear","onRenderYear","buttonRef","React","useRef","useImperativeHandle","focus","_buttonRef_current","_buttonRef_current_focus","current","call","onClick","onKeyDown","ev","key","Enter","classNames","useCalendarYearStyles_unstable","highlightCurrent","highlightSelected","_onRenderYear","createElement","mergeClasses","itemButton","type","role","ref","displayName","CalendarYearGrid","fromYear","toYear","animationDirection","animateBackwards","minYear","maxYear","selectedYear","selectedCellRef","currentCellRef","_ref","_ref_focus","renderCell","yearToRender","Date","getFullYear","value","_props_onRenderYear","_props_onRenderYear1","gridAriaLabel","cells","i","push","j","arrowNavigationAttributes","useArrowNavigationGroup","axis","gridContainer","map","cellRow","index","buttonRow","CalendarYearNavDirection","Previous","Next","CalendarYearNavArrow","strings","direction","onSelectPrev","onSelectNext","ariaLabel","newRangeOffset","newRange","ariaLabelString","onNavigate","dir","useFluent_unstable","isLeftNavigation","navigationButton","title","ArrowUpRegular","ArrowDownRegular","CalendarYearNav","navigationButtonsContainer","CalendarYearTitle","onHeaderSelect","_props_onHeaderSelect","onHeaderKeyDown","Space","hasHeaderClickCallback","rangeAriaLabel","headerAriaLabelFormatString","currentDateRange","replace","currentItemButton","CalendarYearHeader","onRenderTitle","_onRenderTitle","headerContainer","useAnimateBackwards","navigatedYear","rangeYear","Math","floor","previousFromYearRef","previousFromYear","useYearRangeState","useMemo","setFromYear","useState","onNavNext","onNavPrevious","useEffect","gridRef","_gridRef_current","_gridRef_current_focus","root"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluentui/react-datepicker-compat",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "React components for building web experiences",
5
5
  "main": "lib-commonjs/index.js",
6
6
  "module": "lib/index.js",
@@ -36,13 +36,13 @@
36
36
  },
37
37
  "dependencies": {
38
38
  "@fluentui/keyboard-keys": "^9.0.3",
39
- "@fluentui/react-field": "^9.1.18",
39
+ "@fluentui/react-field": "^9.1.19",
40
40
  "@fluentui/react-icons": "^2.0.207",
41
- "@fluentui/react-input": "^9.4.28",
42
- "@fluentui/react-jsx-runtime": "9.0.0-alpha.16",
43
- "@fluentui/react-popover": "^9.7.14",
41
+ "@fluentui/react-input": "^9.4.29",
42
+ "@fluentui/react-jsx-runtime": "^9.0.0",
43
+ "@fluentui/react-popover": "^9.7.16",
44
44
  "@fluentui/react-portal": "^9.3.7",
45
- "@fluentui/react-positioning": "^9.9.4",
45
+ "@fluentui/react-positioning": "^9.9.5",
46
46
  "@fluentui/react-shared-contexts": "^9.7.2",
47
47
  "@fluentui/react-tabster": "^9.12.2",
48
48
  "@fluentui/react-theme": "^9.1.11",