@fluentui/react-calendar-compat 0.3.3 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -2
- package/lib/Calendar.js.map +1 -1
- package/lib/CalendarDay.js.map +1 -1
- package/lib/CalendarDayGrid.js.map +1 -1
- package/lib/CalendarMonth.js.map +1 -1
- package/lib/CalendarPicker.js.map +1 -1
- package/lib/CalendarYear.js.map +1 -1
- package/lib/components/Calendar/Calendar.js.map +1 -1
- package/lib/components/Calendar/Calendar.types.js +3 -3
- package/lib/components/Calendar/Calendar.types.js.map +1 -1
- package/lib/components/Calendar/calendarNavigationIcons.js.map +1 -1
- package/lib/components/Calendar/defaults.js.map +1 -1
- package/lib/components/Calendar/index.js.map +1 -1
- package/lib/components/Calendar/useCalendarStyles.styles.raw.js +115 -0
- package/lib/components/Calendar/useCalendarStyles.styles.raw.js.map +1 -0
- package/lib/components/CalendarDay/CalendarDay.js.map +1 -1
- package/lib/components/CalendarDay/CalendarDay.types.js.map +1 -1
- package/lib/components/CalendarDay/index.js.map +1 -1
- package/lib/components/CalendarDay/useCalendarDayStyles.styles.raw.js +142 -0
- package/lib/components/CalendarDay/useCalendarDayStyles.styles.raw.js.map +1 -0
- package/lib/components/CalendarDayGrid/CalendarDayGrid.js.map +1 -1
- package/lib/components/CalendarDayGrid/CalendarDayGrid.types.js.map +1 -1
- package/lib/components/CalendarDayGrid/CalendarGridDayCell.js.map +1 -1
- package/lib/components/CalendarDayGrid/CalendarGridRow.js.map +1 -1
- package/lib/components/CalendarDayGrid/CalendarMonthHeaderRow.js.map +1 -1
- package/lib/components/CalendarDayGrid/index.js.map +1 -1
- package/lib/components/CalendarDayGrid/useCalendarDayGridStyles.styles.raw.js +395 -0
- package/lib/components/CalendarDayGrid/useCalendarDayGridStyles.styles.raw.js.map +1 -0
- package/lib/components/CalendarDayGrid/useWeekCornerStyles.styles.raw.js +92 -0
- package/lib/components/CalendarDayGrid/useWeekCornerStyles.styles.raw.js.map +1 -0
- package/lib/components/CalendarDayGrid/useWeeks.js.map +1 -1
- package/lib/components/CalendarMonth/CalendarMonth.js.map +1 -1
- package/lib/components/CalendarMonth/CalendarMonth.types.js.map +1 -1
- package/lib/components/CalendarMonth/index.js.map +1 -1
- package/lib/components/CalendarMonth/useCalendarMonthStyles.styles.raw.js +9 -0
- package/lib/components/CalendarMonth/useCalendarMonthStyles.styles.raw.js.map +1 -0
- package/lib/components/CalendarPicker/CalendarPicker.types.js.map +1 -1
- package/lib/components/CalendarPicker/index.js.map +1 -1
- package/lib/components/CalendarPicker/useCalendarPickerStyles.styles.raw.js +291 -0
- package/lib/components/CalendarPicker/useCalendarPickerStyles.styles.raw.js.map +1 -0
- package/lib/components/CalendarYear/CalendarYear.js.map +1 -1
- package/lib/components/CalendarYear/CalendarYear.types.js.map +1 -1
- package/lib/components/CalendarYear/index.js.map +1 -1
- package/lib/components/CalendarYear/useCalendarYearStyles.styles.raw.js +9 -0
- package/lib/components/CalendarYear/useCalendarYearStyles.styles.raw.js.map +1 -0
- package/lib/index.js.map +1 -1
- package/lib/utils/animations.js.map +1 -1
- package/lib/utils/constants.js +18 -12
- package/lib/utils/constants.js.map +1 -1
- package/lib/utils/dateFormatting/dateFormatting.defaults.js.map +1 -1
- package/lib/utils/dateFormatting/dateFormatting.types.js.map +1 -1
- package/lib/utils/dateFormatting/index.js.map +1 -1
- package/lib/utils/dateGrid/dateGrid.types.js.map +1 -1
- package/lib/utils/dateGrid/findAvailableDate.js.map +1 -1
- package/lib/utils/dateGrid/getBoundedDateRange.js.map +1 -1
- package/lib/utils/dateGrid/getDateRangeTypeToUse.js.map +1 -1
- package/lib/utils/dateGrid/getDayGrid.js.map +1 -1
- package/lib/utils/dateGrid/index.js.map +1 -1
- package/lib/utils/dateGrid/isAfterMaxDate.js.map +1 -1
- package/lib/utils/dateGrid/isBeforeMinDate.js.map +1 -1
- package/lib/utils/dateGrid/isContiguous.js.map +1 -1
- package/lib/utils/dateGrid/isRestrictedDate.js.map +1 -1
- package/lib/utils/dateMath/dateMath.js.map +1 -1
- package/lib/utils/dateMath/index.js.map +1 -1
- package/lib/utils/focus.js.map +1 -1
- package/lib/utils/index.js.map +1 -1
- package/lib-commonjs/Calendar.js.map +1 -1
- package/lib-commonjs/CalendarDay.js.map +1 -1
- package/lib-commonjs/CalendarDayGrid.js.map +1 -1
- package/lib-commonjs/CalendarMonth.js.map +1 -1
- package/lib-commonjs/CalendarPicker.js.map +1 -1
- package/lib-commonjs/CalendarYear.js.map +1 -1
- package/lib-commonjs/components/Calendar/Calendar.js.map +1 -1
- package/lib-commonjs/components/Calendar/Calendar.types.js +3 -3
- package/lib-commonjs/components/Calendar/Calendar.types.js.map +1 -1
- package/lib-commonjs/components/Calendar/calendarNavigationIcons.js.map +1 -1
- package/lib-commonjs/components/Calendar/defaults.js.map +1 -1
- package/lib-commonjs/components/Calendar/index.js.map +1 -1
- package/lib-commonjs/components/Calendar/useCalendarStyles.styles.js.map +1 -1
- package/lib-commonjs/components/Calendar/useCalendarStyles.styles.raw.js +127 -0
- package/lib-commonjs/components/Calendar/useCalendarStyles.styles.raw.js.map +1 -0
- package/lib-commonjs/components/CalendarDay/CalendarDay.js.map +1 -1
- package/lib-commonjs/components/CalendarDay/CalendarDay.types.js.map +1 -1
- package/lib-commonjs/components/CalendarDay/index.js.map +1 -1
- package/lib-commonjs/components/CalendarDay/useCalendarDayStyles.styles.js.map +1 -1
- package/lib-commonjs/components/CalendarDay/useCalendarDayStyles.styles.raw.js +154 -0
- package/lib-commonjs/components/CalendarDay/useCalendarDayStyles.styles.raw.js.map +1 -0
- package/lib-commonjs/components/CalendarDayGrid/CalendarDayGrid.js.map +1 -1
- package/lib-commonjs/components/CalendarDayGrid/CalendarDayGrid.types.js.map +1 -1
- package/lib-commonjs/components/CalendarDayGrid/CalendarGridDayCell.js.map +1 -1
- package/lib-commonjs/components/CalendarDayGrid/CalendarGridRow.js.map +1 -1
- package/lib-commonjs/components/CalendarDayGrid/CalendarMonthHeaderRow.js.map +1 -1
- package/lib-commonjs/components/CalendarDayGrid/index.js.map +1 -1
- package/lib-commonjs/components/CalendarDayGrid/useCalendarDayGridStyles.styles.js.map +1 -1
- package/lib-commonjs/components/CalendarDayGrid/useCalendarDayGridStyles.styles.raw.js +408 -0
- package/lib-commonjs/components/CalendarDayGrid/useCalendarDayGridStyles.styles.raw.js.map +1 -0
- package/lib-commonjs/components/CalendarDayGrid/useWeekCornerStyles.styles.js.map +1 -1
- package/lib-commonjs/components/CalendarDayGrid/useWeekCornerStyles.styles.raw.js +106 -0
- package/lib-commonjs/components/CalendarDayGrid/useWeekCornerStyles.styles.raw.js.map +1 -0
- package/lib-commonjs/components/CalendarDayGrid/useWeeks.js.map +1 -1
- package/lib-commonjs/components/CalendarMonth/CalendarMonth.js.map +1 -1
- package/lib-commonjs/components/CalendarMonth/CalendarMonth.types.js.map +1 -1
- package/lib-commonjs/components/CalendarMonth/index.js.map +1 -1
- package/lib-commonjs/components/CalendarMonth/useCalendarMonthStyles.styles.js.map +1 -1
- package/lib-commonjs/components/CalendarMonth/useCalendarMonthStyles.styles.raw.js +15 -0
- package/lib-commonjs/components/CalendarMonth/useCalendarMonthStyles.styles.raw.js.map +1 -0
- package/lib-commonjs/components/CalendarPicker/CalendarPicker.types.js.map +1 -1
- package/lib-commonjs/components/CalendarPicker/index.js.map +1 -1
- package/lib-commonjs/components/CalendarPicker/useCalendarPickerStyles.styles.js.map +1 -1
- package/lib-commonjs/components/CalendarPicker/useCalendarPickerStyles.styles.raw.js +303 -0
- package/lib-commonjs/components/CalendarPicker/useCalendarPickerStyles.styles.raw.js.map +1 -0
- package/lib-commonjs/components/CalendarYear/CalendarYear.js.map +1 -1
- package/lib-commonjs/components/CalendarYear/CalendarYear.types.js.map +1 -1
- package/lib-commonjs/components/CalendarYear/index.js.map +1 -1
- package/lib-commonjs/components/CalendarYear/useCalendarYearStyles.styles.js.map +1 -1
- package/lib-commonjs/components/CalendarYear/useCalendarYearStyles.styles.raw.js +15 -0
- package/lib-commonjs/components/CalendarYear/useCalendarYearStyles.styles.raw.js.map +1 -0
- package/lib-commonjs/index.js.map +1 -1
- package/lib-commonjs/utils/animations.js.map +1 -1
- package/lib-commonjs/utils/constants.js +12 -12
- package/lib-commonjs/utils/constants.js.map +1 -1
- package/lib-commonjs/utils/dateFormatting/dateFormatting.defaults.js.map +1 -1
- package/lib-commonjs/utils/dateFormatting/dateFormatting.types.js.map +1 -1
- package/lib-commonjs/utils/dateFormatting/index.js.map +1 -1
- package/lib-commonjs/utils/dateGrid/dateGrid.types.js.map +1 -1
- package/lib-commonjs/utils/dateGrid/findAvailableDate.js.map +1 -1
- package/lib-commonjs/utils/dateGrid/getBoundedDateRange.js.map +1 -1
- package/lib-commonjs/utils/dateGrid/getDateRangeTypeToUse.js.map +1 -1
- package/lib-commonjs/utils/dateGrid/getDayGrid.js.map +1 -1
- package/lib-commonjs/utils/dateGrid/index.js.map +1 -1
- package/lib-commonjs/utils/dateGrid/isAfterMaxDate.js.map +1 -1
- package/lib-commonjs/utils/dateGrid/isBeforeMinDate.js.map +1 -1
- package/lib-commonjs/utils/dateGrid/isContiguous.js.map +1 -1
- package/lib-commonjs/utils/dateGrid/isRestrictedDate.js.map +1 -1
- package/lib-commonjs/utils/dateMath/dateMath.js.map +1 -1
- package/lib-commonjs/utils/dateMath/index.js.map +1 -1
- package/lib-commonjs/utils/focus.js.map +1 -1
- package/lib-commonjs/utils/index.js.map +1 -1
- package/package.json +4 -4
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/components/CalendarMonth/CalendarMonth.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Enter } from '@fluentui/keyboard-keys';\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.styles';\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 navigationIcons,\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 arrowNavigationAttributes = useArrowNavigationGroup({ axis: 'grid' });\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 navigationIcons={navigationIcons}\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 {navigationIcons.upNavigation}\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 {navigationIcons.downNavigation}\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.monthPickerHeaderAriaLabel,\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","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","navigationIcons","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","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","upNavigation","nextYearAriaLabel","downNavigation","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","callback","ev"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
1
|
+
{"version":3,"sources":["../src/components/CalendarMonth/CalendarMonth.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Enter } from '@fluentui/keyboard-keys';\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.styles';\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 navigationIcons,\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 arrowNavigationAttributes = useArrowNavigationGroup({ axis: 'grid' });\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 navigationIcons={navigationIcons}\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 {navigationIcons.upNavigation}\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 {navigationIcons.downNavigation}\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.monthPickerHeaderAriaLabel,\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","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","navigationIcons","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","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","upNavigation","nextYearAriaLabel","downNavigation","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","callback","ev"],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/components/CalendarMonth/CalendarMonth.types.ts"],"sourcesContent":["import * as React from 'react';\nimport { AnimationDirection } from '../Calendar/Calendar.types';\nimport type { CalendarNavigationIcons } from '../Calendar/calendarNavigationIcons';\nimport type { CalendarStrings, DateFormatting } from '../../utils';\nimport type { CalendarPickerStyleProps, CalendarPickerStyles } from '../CalendarPicker/CalendarPicker.types';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport interface ICalendarMonth {\n focus(): void;\n}\n\nexport interface CalendarMonthProps {\n /**\n * Optional callback to access the ICalendarMonth interface. Use this instead of ref for accessing\n * the public methods and properties of the component.\n */\n componentRef?: React.RefObject<ICalendarMonth>;\n\n /**\n * Localized strings to use in the Calendar\n */\n strings: CalendarStrings;\n\n /**\n * The currently selected date\n */\n selectedDate: Date;\n\n /**\n * The currently navigated date\n */\n navigatedDate: Date;\n\n /**\n * Callback issued when a month is selected\n * @param date - The date the user selected\n * @param selectedDateRangeArray - The resultant list of dates that are selected based on the date range type set\n * for the component.\n */\n onSelectDate?: (date: Date, selectedDateRangeArray?: Date[]) => void;\n\n /**\n * Callback issued when the year is navigated\n * @param date - The date that is navigated to\n * @param focusOnNavigatedDay - Whether to set the focus to the navigated date.\n */\n onNavigateDate: (date: Date, focusOnNavigatedDay: boolean) => void;\n\n /**\n * Value of today. If unspecified, current time in client machine will be used.\n */\n today?: Date;\n\n /**\n * Callback function when the header is selected\n */\n onHeaderSelect?: () => void;\n\n /**\n * Apply additional formatting to dates, for example localized date formatting.\n */\n dateTimeFormatter?: DateFormatting;\n\n /**\n * If set the Calendar will not allow navigation to or selection of a date earlier than this value.\n */\n minDate?: Date;\n\n /**\n * If set the Calendar will not allow navigation to or selection of a date later than this value.\n */\n maxDate?: Date;\n\n /**\n * Whether the month picker should highlight the current month\n * @default false\n */\n highlightCurrentMonth?: boolean;\n\n /**\n * Whether the month picker should highlight the selected month\n * @default false\n */\n highlightSelectedMonth?: boolean;\n\n /**\n * Allows all dates and buttons to be focused, including disabled ones\n * @default false\n */\n allFocusable?: boolean;\n\n /**\n * Additional CSS class(es) to apply to the CalendarMonth.\n */\n className?: string;\n\n /**\n * Whether the year picker is hidden\n * @default false\n */\n yearPickerHidden?: boolean;\n\n /**\n * The cardinal directions for animation to occur during transitions, either horizontal or veritcal\n */\n animationDirection?: AnimationDirection;\n\n /**\n * Custom navigation icons.\n */\n navigationIcons: CalendarNavigationIcons;\n}\n\n/**\n * @internal\n */\nexport interface CalendarMonthStyleProps extends CalendarPickerStyleProps {}\n\n/**\n * @internal\n */\nexport interface CalendarMonthStyles extends CalendarPickerStyles {}\n"],"names":["React"],"
|
1
|
+
{"version":3,"sources":["../src/components/CalendarMonth/CalendarMonth.types.ts"],"sourcesContent":["import * as React from 'react';\nimport { AnimationDirection } from '../Calendar/Calendar.types';\nimport type { CalendarNavigationIcons } from '../Calendar/calendarNavigationIcons';\nimport type { CalendarStrings, DateFormatting } from '../../utils';\nimport type { CalendarPickerStyleProps, CalendarPickerStyles } from '../CalendarPicker/CalendarPicker.types';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport interface ICalendarMonth {\n focus(): void;\n}\n\nexport interface CalendarMonthProps {\n /**\n * Optional callback to access the ICalendarMonth interface. Use this instead of ref for accessing\n * the public methods and properties of the component.\n */\n componentRef?: React.RefObject<ICalendarMonth>;\n\n /**\n * Localized strings to use in the Calendar\n */\n strings: CalendarStrings;\n\n /**\n * The currently selected date\n */\n selectedDate: Date;\n\n /**\n * The currently navigated date\n */\n navigatedDate: Date;\n\n /**\n * Callback issued when a month is selected\n * @param date - The date the user selected\n * @param selectedDateRangeArray - The resultant list of dates that are selected based on the date range type set\n * for the component.\n */\n onSelectDate?: (date: Date, selectedDateRangeArray?: Date[]) => void;\n\n /**\n * Callback issued when the year is navigated\n * @param date - The date that is navigated to\n * @param focusOnNavigatedDay - Whether to set the focus to the navigated date.\n */\n onNavigateDate: (date: Date, focusOnNavigatedDay: boolean) => void;\n\n /**\n * Value of today. If unspecified, current time in client machine will be used.\n */\n today?: Date;\n\n /**\n * Callback function when the header is selected\n */\n onHeaderSelect?: () => void;\n\n /**\n * Apply additional formatting to dates, for example localized date formatting.\n */\n dateTimeFormatter?: DateFormatting;\n\n /**\n * If set the Calendar will not allow navigation to or selection of a date earlier than this value.\n */\n minDate?: Date;\n\n /**\n * If set the Calendar will not allow navigation to or selection of a date later than this value.\n */\n maxDate?: Date;\n\n /**\n * Whether the month picker should highlight the current month\n * @default false\n */\n highlightCurrentMonth?: boolean;\n\n /**\n * Whether the month picker should highlight the selected month\n * @default false\n */\n highlightSelectedMonth?: boolean;\n\n /**\n * Allows all dates and buttons to be focused, including disabled ones\n * @default false\n */\n allFocusable?: boolean;\n\n /**\n * Additional CSS class(es) to apply to the CalendarMonth.\n */\n className?: string;\n\n /**\n * Whether the year picker is hidden\n * @default false\n */\n yearPickerHidden?: boolean;\n\n /**\n * The cardinal directions for animation to occur during transitions, either horizontal or veritcal\n */\n animationDirection?: AnimationDirection;\n\n /**\n * Custom navigation icons.\n */\n navigationIcons: CalendarNavigationIcons;\n}\n\n/**\n * @internal\n */\nexport interface CalendarMonthStyleProps extends CalendarPickerStyleProps {}\n\n/**\n * @internal\n */\nexport interface CalendarMonthStyles extends CalendarPickerStyles {}\n"],"names":["React"],"mappings":"AAAA,YAAYA,WAAW,QAAQ"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/components/CalendarMonth/index.ts"],"sourcesContent":["export { CalendarMonth } from './CalendarMonth';\nexport type {\n CalendarMonthProps,\n CalendarMonthStyleProps,\n CalendarMonthStyles,\n ICalendarMonth,\n} from './CalendarMonth.types';\nexport { useCalendarMonthStyles_unstable } from './useCalendarMonthStyles.styles';\n"],"names":["CalendarMonth","useCalendarMonthStyles_unstable"],"
|
1
|
+
{"version":3,"sources":["../src/components/CalendarMonth/index.ts"],"sourcesContent":["export { CalendarMonth } from './CalendarMonth';\nexport type {\n CalendarMonthProps,\n CalendarMonthStyleProps,\n CalendarMonthStyles,\n ICalendarMonth,\n} from './CalendarMonth.types';\nexport { useCalendarMonthStyles_unstable } from './useCalendarMonthStyles.styles';\n"],"names":["CalendarMonth","useCalendarMonthStyles_unstable"],"mappings":"AAAA,SAASA,aAAa,QAAQ,kBAAkB;AAOhD,SAASC,+BAA+B,QAAQ,kCAAkC"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { useCalendarPickerStyles_unstable } from '../CalendarPicker/useCalendarPickerStyles.styles';
|
2
|
+
/**
|
3
|
+
* @internal
|
4
|
+
*
|
5
|
+
* Apply styling to the CalendarMonth slots based on the state
|
6
|
+
*/ export const useCalendarMonthStyles_unstable = (props)=>{
|
7
|
+
'use no memo';
|
8
|
+
return useCalendarPickerStyles_unstable(props);
|
9
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/components/CalendarMonth/useCalendarMonthStyles.styles.ts"],"sourcesContent":["import { useCalendarPickerStyles_unstable } from '../CalendarPicker/useCalendarPickerStyles.styles';\nimport type { CalendarMonthStyleProps, CalendarMonthStyles } from './CalendarMonth.types';\n\n/**\n * @internal\n *\n * Apply styling to the CalendarMonth slots based on the state\n */\nexport const useCalendarMonthStyles_unstable = (props: CalendarMonthStyleProps): CalendarMonthStyles => {\n 'use no memo';\n\n return useCalendarPickerStyles_unstable(props);\n};\n"],"names":["useCalendarPickerStyles_unstable","useCalendarMonthStyles_unstable","props"],"mappings":"AAAA,SAASA,gCAAgC,QAAQ,mDAAmD;AAGpG;;;;CAIC,GACD,OAAO,MAAMC,kCAAkC,CAACC;IAC9C;IAEA,OAAOF,iCAAiCE;AAC1C,EAAE"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/components/CalendarPicker/CalendarPicker.types.ts"],"sourcesContent":["import { AnimationDirection } from '../Calendar/Calendar.types';\n\n/**\n * @internal\n */\nexport interface CalendarPickerStyleProps {\n /**\n * Accept custom classNames\n */\n className?: string;\n\n /**\n * Whether the header can be clicked\n */\n hasHeaderClickCallback?: boolean;\n\n /**\n * Whether the picker should highlight the current item\n */\n highlightCurrent?: boolean;\n\n /**\n * Whether the picker should highlight the selected item\n */\n highlightSelected?: boolean;\n\n /**\n * The cardinal directions for animation to occur during transitions, either horizontal or veritcal\n */\n animationDirection?: AnimationDirection;\n\n /**\n * Whether grid entering animation should be forwards or backwards\n */\n animateBackwards?: boolean;\n}\n\n/**\n * @internal\n */\nexport interface CalendarPickerStyles {\n /**\n * Style for the root element.\n */\n root: string;\n\n headerContainer: string;\n\n currentItemButton: string;\n\n navigationButtonsContainer: string;\n\n navigationButton: string;\n\n gridContainer: string;\n\n buttonRow: string;\n\n itemButton: string;\n\n current: string;\n\n selected: string;\n\n disabled: string;\n}\n"],"names":[],"
|
1
|
+
{"version":3,"sources":["../src/components/CalendarPicker/CalendarPicker.types.ts"],"sourcesContent":["import { AnimationDirection } from '../Calendar/Calendar.types';\n\n/**\n * @internal\n */\nexport interface CalendarPickerStyleProps {\n /**\n * Accept custom classNames\n */\n className?: string;\n\n /**\n * Whether the header can be clicked\n */\n hasHeaderClickCallback?: boolean;\n\n /**\n * Whether the picker should highlight the current item\n */\n highlightCurrent?: boolean;\n\n /**\n * Whether the picker should highlight the selected item\n */\n highlightSelected?: boolean;\n\n /**\n * The cardinal directions for animation to occur during transitions, either horizontal or veritcal\n */\n animationDirection?: AnimationDirection;\n\n /**\n * Whether grid entering animation should be forwards or backwards\n */\n animateBackwards?: boolean;\n}\n\n/**\n * @internal\n */\nexport interface CalendarPickerStyles {\n /**\n * Style for the root element.\n */\n root: string;\n\n headerContainer: string;\n\n currentItemButton: string;\n\n navigationButtonsContainer: string;\n\n navigationButton: string;\n\n gridContainer: string;\n\n buttonRow: string;\n\n itemButton: string;\n\n current: string;\n\n selected: string;\n\n disabled: string;\n}\n"],"names":[],"mappings":"AAqCA;;CAEC,GACD,WAyBC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/components/CalendarPicker/index.ts"],"sourcesContent":["export type { CalendarPickerStyleProps, CalendarPickerStyles } from './CalendarPicker.types';\nexport { calendarPickerClassNames, useCalendarPickerStyles_unstable } from './useCalendarPickerStyles.styles';\n"],"names":["calendarPickerClassNames","useCalendarPickerStyles_unstable"],"
|
1
|
+
{"version":3,"sources":["../src/components/CalendarPicker/index.ts"],"sourcesContent":["export type { CalendarPickerStyleProps, CalendarPickerStyles } from './CalendarPicker.types';\nexport { calendarPickerClassNames, useCalendarPickerStyles_unstable } from './useCalendarPickerStyles.styles';\n"],"names":["calendarPickerClassNames","useCalendarPickerStyles_unstable"],"mappings":"AACA,SAASA,wBAAwB,EAAEC,gCAAgC,QAAQ,mCAAmC"}
|
@@ -0,0 +1,291 @@
|
|
1
|
+
import { tokens } from '@fluentui/react-theme';
|
2
|
+
import { makeStyles, mergeClasses, shorthands } from '@griffel/react';
|
3
|
+
import { DURATION_2, DURATION_3, EASING_FUNCTION_1, EASING_FUNCTION_2, FADE_IN, SLIDE_DOWN_IN20, SLIDE_LEFT_IN20, SLIDE_RIGHT_IN20, SLIDE_UP_IN20 } from '../../utils/animations';
|
4
|
+
import { AnimationDirection } from '../Calendar/Calendar.types';
|
5
|
+
/**
|
6
|
+
* @internal
|
7
|
+
*/ export const calendarPickerClassNames = {
|
8
|
+
root: 'fui-CalendarPicker',
|
9
|
+
headerContainer: 'fui-CalendarPicker__headerContainer',
|
10
|
+
currentItemButton: 'fui-CalendarPicker__currentItemButton',
|
11
|
+
navigationButtonsContainer: 'fui-CalendarPicker__navigationButtonsContainer',
|
12
|
+
navigationButton: 'fui-CalendarPicker__navigationButton',
|
13
|
+
gridContainer: 'fui-CalendarPicker__gridContainer',
|
14
|
+
buttonRow: 'fui-CalendarPicker__buttonRow',
|
15
|
+
itemButton: 'fui-CalendarPicker__itemButton',
|
16
|
+
current: 'fui-CalendarPicker__current',
|
17
|
+
selected: 'fui-CalendarPicker__selected',
|
18
|
+
disabled: 'fui-CalendarPicker__disabled'
|
19
|
+
};
|
20
|
+
const useRootStyles = makeStyles({
|
21
|
+
base: {
|
22
|
+
boxSizing: 'content-box',
|
23
|
+
overflow: 'hidden',
|
24
|
+
padding: '12px',
|
25
|
+
width: '196px'
|
26
|
+
},
|
27
|
+
normalize: {
|
28
|
+
boxShadow: 'none',
|
29
|
+
boxSizing: 'border-box',
|
30
|
+
margin: '0',
|
31
|
+
padding: '0'
|
32
|
+
}
|
33
|
+
});
|
34
|
+
const useHeaderContainerStyles = makeStyles({
|
35
|
+
base: {
|
36
|
+
display: 'flex'
|
37
|
+
}
|
38
|
+
});
|
39
|
+
const useCurrentItemButtonStyles = makeStyles({
|
40
|
+
base: {
|
41
|
+
backgroundColor: tokens.colorTransparentBackground,
|
42
|
+
...shorthands.borderStyle('none'),
|
43
|
+
borderRadius: tokens.borderRadiusMedium,
|
44
|
+
color: 'inherit',
|
45
|
+
flexGrow: 1,
|
46
|
+
fontFamily: 'inherit',
|
47
|
+
fontSize: tokens.fontSizeBase300,
|
48
|
+
fontWeight: tokens.fontWeightSemibold,
|
49
|
+
overflow: 'visible',
|
50
|
+
padding: '0 4px 0 10px',
|
51
|
+
textAlign: 'left'
|
52
|
+
},
|
53
|
+
animation: {
|
54
|
+
animationDuration: DURATION_2,
|
55
|
+
animationFillMode: 'both',
|
56
|
+
animationName: FADE_IN,
|
57
|
+
animationTimingFunction: EASING_FUNCTION_2
|
58
|
+
},
|
59
|
+
hasHeaderClickCallback: {
|
60
|
+
// If this is updated, make sure to update headerIsClickable in useCalendarDayStyles as well
|
61
|
+
'&:hover': {
|
62
|
+
backgroundColor: tokens.colorBrandBackgroundInvertedHover,
|
63
|
+
color: tokens.colorBrandForegroundOnLightHover,
|
64
|
+
cursor: 'pointer',
|
65
|
+
outline: `1px solid ${tokens.colorTransparentStroke}`
|
66
|
+
},
|
67
|
+
'&:hover:active': {
|
68
|
+
backgroundColor: tokens.colorBrandBackgroundInvertedPressed,
|
69
|
+
color: tokens.colorBrandForegroundOnLightPressed,
|
70
|
+
cursor: 'pointer',
|
71
|
+
outline: `1px solid ${tokens.colorTransparentStroke}`
|
72
|
+
}
|
73
|
+
}
|
74
|
+
});
|
75
|
+
const useNavigationButtonsContainerStyles = makeStyles({
|
76
|
+
base: {
|
77
|
+
alignItems: 'center',
|
78
|
+
display: 'flex'
|
79
|
+
}
|
80
|
+
});
|
81
|
+
const useNavigationButtonStyles = makeStyles({
|
82
|
+
base: {
|
83
|
+
backgroundColor: tokens.colorTransparentBackground,
|
84
|
+
border: 'none',
|
85
|
+
borderRadius: tokens.borderRadiusMedium,
|
86
|
+
color: tokens.colorNeutralForeground1,
|
87
|
+
display: 'block',
|
88
|
+
fontFamily: 'inherit',
|
89
|
+
fontSize: tokens.fontSizeBase200,
|
90
|
+
height: '28px',
|
91
|
+
lineHeight: '28px',
|
92
|
+
minHeight: '28px',
|
93
|
+
minWidth: '28px',
|
94
|
+
overflow: 'visible',
|
95
|
+
padding: '0',
|
96
|
+
position: 'relative',
|
97
|
+
textAlign: 'center',
|
98
|
+
width: '28px',
|
99
|
+
'&:hover': {
|
100
|
+
backgroundColor: tokens.colorBrandBackgroundInvertedHover,
|
101
|
+
color: tokens.colorBrandForegroundOnLightHover,
|
102
|
+
cursor: 'pointer',
|
103
|
+
outline: `1px solid ${tokens.colorTransparentStroke}`
|
104
|
+
},
|
105
|
+
'&:hover:active': {
|
106
|
+
backgroundColor: tokens.colorBrandBackgroundInvertedPressed,
|
107
|
+
color: tokens.colorBrandForegroundOnLightPressed
|
108
|
+
}
|
109
|
+
}
|
110
|
+
});
|
111
|
+
const useGridContainerStyles = makeStyles({
|
112
|
+
base: {
|
113
|
+
marginTop: '4px'
|
114
|
+
}
|
115
|
+
});
|
116
|
+
const useButtonRowStyles = makeStyles({
|
117
|
+
base: {
|
118
|
+
marginBottom: '16px',
|
119
|
+
'&:last-of-type': {
|
120
|
+
marginBottom: 0
|
121
|
+
}
|
122
|
+
},
|
123
|
+
animation: {
|
124
|
+
animationDuration: DURATION_3,
|
125
|
+
animationFillMode: 'both',
|
126
|
+
animationTimingFunction: EASING_FUNCTION_1
|
127
|
+
},
|
128
|
+
horizontalBackward: {
|
129
|
+
animationName: [
|
130
|
+
FADE_IN,
|
131
|
+
SLIDE_RIGHT_IN20
|
132
|
+
]
|
133
|
+
},
|
134
|
+
horizontalForward: {
|
135
|
+
animationName: [
|
136
|
+
FADE_IN,
|
137
|
+
SLIDE_LEFT_IN20
|
138
|
+
]
|
139
|
+
},
|
140
|
+
verticalBackward: {
|
141
|
+
animationName: [
|
142
|
+
FADE_IN,
|
143
|
+
SLIDE_DOWN_IN20
|
144
|
+
]
|
145
|
+
},
|
146
|
+
verticalForward: {
|
147
|
+
animationName: [
|
148
|
+
FADE_IN,
|
149
|
+
SLIDE_UP_IN20
|
150
|
+
]
|
151
|
+
}
|
152
|
+
});
|
153
|
+
const useItemButtonStyles = makeStyles({
|
154
|
+
base: {
|
155
|
+
backgroundColor: tokens.colorTransparentBackground,
|
156
|
+
border: 'none',
|
157
|
+
borderRadius: tokens.borderRadiusMedium,
|
158
|
+
color: tokens.colorNeutralForeground3,
|
159
|
+
fontFamily: 'inherit',
|
160
|
+
fontSize: tokens.fontSizeBase200,
|
161
|
+
height: '40px',
|
162
|
+
lineHeight: '40px',
|
163
|
+
minHeight: '40px',
|
164
|
+
minWidth: '40px',
|
165
|
+
margin: '0 12px 0 0',
|
166
|
+
overflow: 'visible',
|
167
|
+
padding: '0',
|
168
|
+
width: '40px',
|
169
|
+
'&:nth-child(4n + 4)': {
|
170
|
+
marginRight: 0
|
171
|
+
},
|
172
|
+
'&:nth-child(n + 9)': {
|
173
|
+
marginBottom: 0
|
174
|
+
},
|
175
|
+
'& div': {
|
176
|
+
fontWeight: tokens.fontWeightRegular
|
177
|
+
},
|
178
|
+
'&:hover': {
|
179
|
+
backgroundColor: tokens.colorBrandBackgroundInvertedHover,
|
180
|
+
color: tokens.colorNeutralForeground1Static,
|
181
|
+
cursor: 'pointer',
|
182
|
+
outline: `1px solid ${tokens.colorTransparentStroke}`,
|
183
|
+
'@media (forced-colors: active)': {
|
184
|
+
backgroundColor: 'Window',
|
185
|
+
color: 'WindowText',
|
186
|
+
forcedColorAdjust: 'none',
|
187
|
+
outline: '1px solid Highlight'
|
188
|
+
}
|
189
|
+
},
|
190
|
+
'&:hover:active': {
|
191
|
+
backgroundColor: tokens.colorBrandBackgroundInvertedPressed,
|
192
|
+
'@media (forced-colors: active)': {
|
193
|
+
backgroundColor: 'Window',
|
194
|
+
color: 'Highlight',
|
195
|
+
forcedColorAdjust: 'none'
|
196
|
+
}
|
197
|
+
}
|
198
|
+
}
|
199
|
+
});
|
200
|
+
const useCurrentStyles = makeStyles({
|
201
|
+
highlightCurrent: {
|
202
|
+
backgroundColor: tokens.colorBrandBackground,
|
203
|
+
color: tokens.colorNeutralForegroundOnBrand,
|
204
|
+
fontWeight: tokens.fontWeightSemibold,
|
205
|
+
'@media (forced-colors: active)': {
|
206
|
+
backgroundColor: 'WindowText',
|
207
|
+
color: 'Window',
|
208
|
+
forcedColorAdjust: 'none'
|
209
|
+
},
|
210
|
+
'&:hover, &:hover:active': {
|
211
|
+
backgroundColor: tokens.colorBrandBackground,
|
212
|
+
color: tokens.colorNeutralForegroundOnBrand,
|
213
|
+
'@media (forced-colors: active)': {
|
214
|
+
backgroundColor: 'WindowText',
|
215
|
+
color: 'Window',
|
216
|
+
forcedColorAdjust: 'none'
|
217
|
+
}
|
218
|
+
}
|
219
|
+
}
|
220
|
+
});
|
221
|
+
const useSelectedStyles = makeStyles({
|
222
|
+
highlightSelected: {
|
223
|
+
backgroundColor: tokens.colorBrandBackgroundInvertedSelected,
|
224
|
+
color: tokens.colorNeutralForeground1Static,
|
225
|
+
fontWeight: tokens.fontWeightSemibold,
|
226
|
+
'@media (forced-colors: active)': {
|
227
|
+
backgroundColor: 'Highlight',
|
228
|
+
color: 'Window',
|
229
|
+
forcedColorAdjust: 'none'
|
230
|
+
},
|
231
|
+
'& div': {
|
232
|
+
fontWeight: tokens.fontWeightSemibold
|
233
|
+
},
|
234
|
+
'&:hover': {
|
235
|
+
backgroundColor: tokens.colorBrandBackgroundInvertedSelected,
|
236
|
+
color: tokens.colorNeutralForeground1Static,
|
237
|
+
'@media (forced-colors: active)': {
|
238
|
+
backgroundColor: 'Highlight',
|
239
|
+
color: 'Window',
|
240
|
+
forcedColorAdjust: 'none'
|
241
|
+
}
|
242
|
+
},
|
243
|
+
'&:hover:active': {
|
244
|
+
backgroundColor: tokens.colorBrandBackgroundInvertedPressed
|
245
|
+
}
|
246
|
+
}
|
247
|
+
});
|
248
|
+
const useDisabledStyles = makeStyles({
|
249
|
+
base: {
|
250
|
+
'&, &:disabled, & button': {
|
251
|
+
color: tokens.colorNeutralForegroundDisabled,
|
252
|
+
pointerEvents: 'none'
|
253
|
+
},
|
254
|
+
'@media (forced-colors: active)': {
|
255
|
+
color: 'GrayText',
|
256
|
+
forcedColorAdjust: 'none'
|
257
|
+
}
|
258
|
+
}
|
259
|
+
});
|
260
|
+
/**
|
261
|
+
* @internal
|
262
|
+
*
|
263
|
+
* Apply styling to the CalendarPicker slots based on the state
|
264
|
+
*/ export const useCalendarPickerStyles_unstable = (props)=>{
|
265
|
+
'use no memo';
|
266
|
+
const rootStyles = useRootStyles();
|
267
|
+
const headerContainerStyles = useHeaderContainerStyles();
|
268
|
+
const currentItemButtonStyles = useCurrentItemButtonStyles();
|
269
|
+
const navigationButtonsContainerStyles = useNavigationButtonsContainerStyles();
|
270
|
+
const navigationButtonStyles = useNavigationButtonStyles();
|
271
|
+
const gridContainerStyles = useGridContainerStyles();
|
272
|
+
const buttonRowStyles = useButtonRowStyles();
|
273
|
+
const itemButtonStyles = useItemButtonStyles();
|
274
|
+
const currentStyles = useCurrentStyles();
|
275
|
+
const selectedStyles = useSelectedStyles();
|
276
|
+
const disabledStyles = useDisabledStyles();
|
277
|
+
const { animateBackwards, animationDirection, className, hasHeaderClickCallback, highlightCurrent, highlightSelected } = props;
|
278
|
+
return {
|
279
|
+
root: mergeClasses(calendarPickerClassNames.root, rootStyles.normalize, rootStyles.base, className),
|
280
|
+
headerContainer: mergeClasses(calendarPickerClassNames.headerContainer, headerContainerStyles.base),
|
281
|
+
currentItemButton: mergeClasses(calendarPickerClassNames.currentItemButton, currentItemButtonStyles.base, animateBackwards !== undefined && currentItemButtonStyles.animation, hasHeaderClickCallback && currentItemButtonStyles.hasHeaderClickCallback),
|
282
|
+
navigationButtonsContainer: mergeClasses(calendarPickerClassNames.navigationButtonsContainer, navigationButtonsContainerStyles.base),
|
283
|
+
navigationButton: mergeClasses(calendarPickerClassNames.navigationButton, navigationButtonStyles.base),
|
284
|
+
gridContainer: mergeClasses(calendarPickerClassNames.gridContainer, gridContainerStyles.base),
|
285
|
+
buttonRow: mergeClasses(calendarPickerClassNames.buttonRow, buttonRowStyles.base, buttonRowStyles.animation, animateBackwards !== undefined && (animationDirection === AnimationDirection.Horizontal ? animateBackwards ? buttonRowStyles.horizontalBackward : buttonRowStyles.horizontalForward : animateBackwards ? buttonRowStyles.verticalBackward : buttonRowStyles.verticalForward)),
|
286
|
+
itemButton: mergeClasses(calendarPickerClassNames.itemButton, itemButtonStyles.base),
|
287
|
+
selected: mergeClasses(calendarPickerClassNames.selected, highlightSelected && selectedStyles.highlightSelected),
|
288
|
+
current: mergeClasses(calendarPickerClassNames.current, highlightCurrent && currentStyles.highlightCurrent),
|
289
|
+
disabled: mergeClasses(calendarPickerClassNames.disabled, disabledStyles.base)
|
290
|
+
};
|
291
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/components/CalendarPicker/useCalendarPickerStyles.styles.ts"],"sourcesContent":["import { tokens } from '@fluentui/react-theme';\nimport { makeStyles, mergeClasses, shorthands } from '@griffel/react';\nimport {\n DURATION_2,\n DURATION_3,\n EASING_FUNCTION_1,\n EASING_FUNCTION_2,\n FADE_IN,\n SLIDE_DOWN_IN20,\n SLIDE_LEFT_IN20,\n SLIDE_RIGHT_IN20,\n SLIDE_UP_IN20,\n} from '../../utils/animations';\nimport { AnimationDirection } from '../Calendar/Calendar.types';\nimport type { SlotClassNames } from '@fluentui/react-utilities';\nimport type { CalendarPickerStyles, CalendarPickerStyleProps } from './CalendarPicker.types';\n\n/**\n * @internal\n */\nexport const calendarPickerClassNames: SlotClassNames<CalendarPickerStyles> = {\n root: 'fui-CalendarPicker',\n headerContainer: 'fui-CalendarPicker__headerContainer',\n currentItemButton: 'fui-CalendarPicker__currentItemButton',\n navigationButtonsContainer: 'fui-CalendarPicker__navigationButtonsContainer',\n navigationButton: 'fui-CalendarPicker__navigationButton',\n gridContainer: 'fui-CalendarPicker__gridContainer',\n buttonRow: 'fui-CalendarPicker__buttonRow',\n itemButton: 'fui-CalendarPicker__itemButton',\n current: 'fui-CalendarPicker__current',\n selected: 'fui-CalendarPicker__selected',\n disabled: 'fui-CalendarPicker__disabled',\n};\n\nconst useRootStyles = makeStyles({\n base: {\n boxSizing: 'content-box',\n overflow: 'hidden',\n padding: '12px',\n width: '196px',\n },\n normalize: {\n boxShadow: 'none',\n boxSizing: 'border-box',\n margin: '0',\n padding: '0',\n },\n});\n\nconst useHeaderContainerStyles = makeStyles({\n base: {\n display: 'flex',\n },\n});\n\nconst useCurrentItemButtonStyles = makeStyles({\n base: {\n backgroundColor: tokens.colorTransparentBackground,\n ...shorthands.borderStyle('none'),\n borderRadius: tokens.borderRadiusMedium,\n color: 'inherit',\n flexGrow: 1,\n fontFamily: 'inherit',\n fontSize: tokens.fontSizeBase300,\n fontWeight: tokens.fontWeightSemibold,\n overflow: 'visible',\n padding: '0 4px 0 10px',\n textAlign: 'left',\n },\n animation: {\n animationDuration: DURATION_2,\n animationFillMode: 'both',\n animationName: FADE_IN,\n animationTimingFunction: EASING_FUNCTION_2,\n },\n hasHeaderClickCallback: {\n // If this is updated, make sure to update headerIsClickable in useCalendarDayStyles as well\n '&:hover': {\n backgroundColor: tokens.colorBrandBackgroundInvertedHover,\n color: tokens.colorBrandForegroundOnLightHover,\n cursor: 'pointer',\n outline: `1px solid ${tokens.colorTransparentStroke}`,\n },\n '&:hover:active': {\n backgroundColor: tokens.colorBrandBackgroundInvertedPressed,\n color: tokens.colorBrandForegroundOnLightPressed,\n cursor: 'pointer',\n outline: `1px solid ${tokens.colorTransparentStroke}`,\n },\n },\n});\n\nconst useNavigationButtonsContainerStyles = makeStyles({\n base: {\n alignItems: 'center',\n display: 'flex',\n },\n});\n\nconst useNavigationButtonStyles = makeStyles({\n base: {\n backgroundColor: tokens.colorTransparentBackground,\n border: 'none',\n borderRadius: tokens.borderRadiusMedium,\n color: tokens.colorNeutralForeground1,\n display: 'block',\n fontFamily: 'inherit',\n fontSize: tokens.fontSizeBase200,\n height: '28px',\n lineHeight: '28px',\n minHeight: '28px',\n minWidth: '28px',\n overflow: 'visible',\n padding: '0',\n position: 'relative',\n textAlign: 'center',\n width: '28px',\n\n '&:hover': {\n backgroundColor: tokens.colorBrandBackgroundInvertedHover,\n color: tokens.colorBrandForegroundOnLightHover,\n cursor: 'pointer',\n outline: `1px solid ${tokens.colorTransparentStroke}`,\n },\n\n '&:hover:active': {\n backgroundColor: tokens.colorBrandBackgroundInvertedPressed,\n color: tokens.colorBrandForegroundOnLightPressed,\n },\n },\n});\n\nconst useGridContainerStyles = makeStyles({\n base: {\n marginTop: '4px',\n },\n});\n\nconst useButtonRowStyles = makeStyles({\n base: {\n marginBottom: '16px',\n '&:last-of-type': {\n marginBottom: 0,\n },\n },\n animation: {\n animationDuration: DURATION_3,\n animationFillMode: 'both',\n animationTimingFunction: EASING_FUNCTION_1,\n },\n horizontalBackward: {\n animationName: [FADE_IN, SLIDE_RIGHT_IN20],\n },\n horizontalForward: {\n animationName: [FADE_IN, SLIDE_LEFT_IN20],\n },\n verticalBackward: {\n animationName: [FADE_IN, SLIDE_DOWN_IN20],\n },\n verticalForward: {\n animationName: [FADE_IN, SLIDE_UP_IN20],\n },\n});\n\nconst useItemButtonStyles = makeStyles({\n base: {\n backgroundColor: tokens.colorTransparentBackground,\n border: 'none',\n borderRadius: tokens.borderRadiusMedium,\n color: tokens.colorNeutralForeground3,\n fontFamily: 'inherit',\n fontSize: tokens.fontSizeBase200,\n height: '40px',\n lineHeight: '40px',\n minHeight: '40px',\n minWidth: '40px',\n margin: '0 12px 0 0',\n overflow: 'visible',\n padding: '0',\n width: '40px',\n\n '&:nth-child(4n + 4)': {\n marginRight: 0,\n },\n '&:nth-child(n + 9)': {\n marginBottom: 0,\n },\n '& div': {\n fontWeight: tokens.fontWeightRegular,\n },\n '&:hover': {\n backgroundColor: tokens.colorBrandBackgroundInvertedHover,\n color: tokens.colorNeutralForeground1Static,\n cursor: 'pointer',\n outline: `1px solid ${tokens.colorTransparentStroke}`,\n\n '@media (forced-colors: active)': {\n backgroundColor: 'Window',\n color: 'WindowText',\n forcedColorAdjust: 'none',\n outline: '1px solid Highlight',\n },\n },\n '&:hover:active': {\n backgroundColor: tokens.colorBrandBackgroundInvertedPressed,\n\n '@media (forced-colors: active)': {\n backgroundColor: 'Window',\n color: 'Highlight',\n forcedColorAdjust: 'none',\n },\n },\n },\n});\n\nconst useCurrentStyles = makeStyles({\n highlightCurrent: {\n backgroundColor: tokens.colorBrandBackground,\n color: tokens.colorNeutralForegroundOnBrand,\n fontWeight: tokens.fontWeightSemibold,\n\n '@media (forced-colors: active)': {\n backgroundColor: 'WindowText',\n color: 'Window',\n forcedColorAdjust: 'none',\n },\n '&:hover, &:hover:active': {\n backgroundColor: tokens.colorBrandBackground,\n color: tokens.colorNeutralForegroundOnBrand,\n\n '@media (forced-colors: active)': {\n backgroundColor: 'WindowText',\n color: 'Window',\n forcedColorAdjust: 'none',\n },\n },\n },\n});\n\nconst useSelectedStyles = makeStyles({\n highlightSelected: {\n backgroundColor: tokens.colorBrandBackgroundInvertedSelected,\n color: tokens.colorNeutralForeground1Static,\n fontWeight: tokens.fontWeightSemibold,\n\n '@media (forced-colors: active)': {\n backgroundColor: 'Highlight',\n color: 'Window',\n forcedColorAdjust: 'none',\n },\n '& div': {\n fontWeight: tokens.fontWeightSemibold,\n },\n '&:hover': {\n backgroundColor: tokens.colorBrandBackgroundInvertedSelected,\n color: tokens.colorNeutralForeground1Static,\n\n '@media (forced-colors: active)': {\n backgroundColor: 'Highlight',\n color: 'Window',\n forcedColorAdjust: 'none',\n },\n },\n '&:hover:active': {\n backgroundColor: tokens.colorBrandBackgroundInvertedPressed,\n },\n },\n});\n\nconst useDisabledStyles = makeStyles({\n base: {\n '&, &:disabled, & button': {\n color: tokens.colorNeutralForegroundDisabled,\n pointerEvents: 'none',\n },\n '@media (forced-colors: active)': {\n color: 'GrayText',\n forcedColorAdjust: 'none',\n },\n },\n});\n\n/**\n * @internal\n *\n * Apply styling to the CalendarPicker slots based on the state\n */\nexport const useCalendarPickerStyles_unstable = (props: CalendarPickerStyleProps): CalendarPickerStyles => {\n 'use no memo';\n\n const rootStyles = useRootStyles();\n const headerContainerStyles = useHeaderContainerStyles();\n const currentItemButtonStyles = useCurrentItemButtonStyles();\n const navigationButtonsContainerStyles = useNavigationButtonsContainerStyles();\n const navigationButtonStyles = useNavigationButtonStyles();\n const gridContainerStyles = useGridContainerStyles();\n const buttonRowStyles = useButtonRowStyles();\n const itemButtonStyles = useItemButtonStyles();\n const currentStyles = useCurrentStyles();\n const selectedStyles = useSelectedStyles();\n const disabledStyles = useDisabledStyles();\n\n const {\n animateBackwards,\n animationDirection,\n className,\n hasHeaderClickCallback,\n highlightCurrent,\n highlightSelected,\n } = props;\n\n return {\n root: mergeClasses(calendarPickerClassNames.root, rootStyles.normalize, rootStyles.base, className),\n headerContainer: mergeClasses(calendarPickerClassNames.headerContainer, headerContainerStyles.base),\n currentItemButton: mergeClasses(\n calendarPickerClassNames.currentItemButton,\n currentItemButtonStyles.base,\n animateBackwards !== undefined && currentItemButtonStyles.animation,\n hasHeaderClickCallback && currentItemButtonStyles.hasHeaderClickCallback,\n ),\n navigationButtonsContainer: mergeClasses(\n calendarPickerClassNames.navigationButtonsContainer,\n navigationButtonsContainerStyles.base,\n ),\n navigationButton: mergeClasses(calendarPickerClassNames.navigationButton, navigationButtonStyles.base),\n gridContainer: mergeClasses(calendarPickerClassNames.gridContainer, gridContainerStyles.base),\n buttonRow: mergeClasses(\n calendarPickerClassNames.buttonRow,\n buttonRowStyles.base,\n buttonRowStyles.animation,\n animateBackwards !== undefined &&\n (animationDirection === AnimationDirection.Horizontal\n ? animateBackwards\n ? buttonRowStyles.horizontalBackward\n : buttonRowStyles.horizontalForward\n : animateBackwards\n ? buttonRowStyles.verticalBackward\n : buttonRowStyles.verticalForward),\n ),\n itemButton: mergeClasses(calendarPickerClassNames.itemButton, itemButtonStyles.base),\n selected: mergeClasses(calendarPickerClassNames.selected, highlightSelected && selectedStyles.highlightSelected),\n current: mergeClasses(calendarPickerClassNames.current, highlightCurrent && currentStyles.highlightCurrent),\n disabled: mergeClasses(calendarPickerClassNames.disabled, disabledStyles.base),\n };\n};\n"],"names":["tokens","makeStyles","mergeClasses","shorthands","DURATION_2","DURATION_3","EASING_FUNCTION_1","EASING_FUNCTION_2","FADE_IN","SLIDE_DOWN_IN20","SLIDE_LEFT_IN20","SLIDE_RIGHT_IN20","SLIDE_UP_IN20","AnimationDirection","calendarPickerClassNames","root","headerContainer","currentItemButton","navigationButtonsContainer","navigationButton","gridContainer","buttonRow","itemButton","current","selected","disabled","useRootStyles","base","boxSizing","overflow","padding","width","normalize","boxShadow","margin","useHeaderContainerStyles","display","useCurrentItemButtonStyles","backgroundColor","colorTransparentBackground","borderStyle","borderRadius","borderRadiusMedium","color","flexGrow","fontFamily","fontSize","fontSizeBase300","fontWeight","fontWeightSemibold","textAlign","animation","animationDuration","animationFillMode","animationName","animationTimingFunction","hasHeaderClickCallback","colorBrandBackgroundInvertedHover","colorBrandForegroundOnLightHover","cursor","outline","colorTransparentStroke","colorBrandBackgroundInvertedPressed","colorBrandForegroundOnLightPressed","useNavigationButtonsContainerStyles","alignItems","useNavigationButtonStyles","border","colorNeutralForeground1","fontSizeBase200","height","lineHeight","minHeight","minWidth","position","useGridContainerStyles","marginTop","useButtonRowStyles","marginBottom","horizontalBackward","horizontalForward","verticalBackward","verticalForward","useItemButtonStyles","colorNeutralForeground3","marginRight","fontWeightRegular","colorNeutralForeground1Static","forcedColorAdjust","useCurrentStyles","highlightCurrent","colorBrandBackground","colorNeutralForegroundOnBrand","useSelectedStyles","highlightSelected","colorBrandBackgroundInvertedSelected","useDisabledStyles","colorNeutralForegroundDisabled","pointerEvents","useCalendarPickerStyles_unstable","props","rootStyles","headerContainerStyles","currentItemButtonStyles","navigationButtonsContainerStyles","navigationButtonStyles","gridContainerStyles","buttonRowStyles","itemButtonStyles","currentStyles","selectedStyles","disabledStyles","animateBackwards","animationDirection","className","undefined","Horizontal"],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/components/CalendarYear/CalendarYear.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Enter, Space } from '@fluentui/keyboard-keys';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { mergeClasses } from '@griffel/react';\nimport { useCalendarYearStyles_unstable } from './useCalendarYearStyles.styles';\nimport type {\n CalendarYearStrings,\n CalendarYearProps,\n CalendarYearRange,\n CalendarYearHeaderProps,\n} from './CalendarYear.types';\n\nconst CELL_COUNT = 12;\nconst CELLS_PER_ROW = 4;\n\n/* eslint-disable react-compiler/react-compiler */\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 // eslint-disable-next-line react-hooks/rules-of-hooks\n const selectedCellRef = React.useRef<CalendarYearGridCell>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const currentCellRef = React.useRef<CalendarYearGridCell>(null);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\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 // eslint-disable-next-line react-hooks/rules-of-hooks\n const classNames = useCalendarYearStyles_unstable({\n className,\n animateBackwards,\n animationDirection,\n });\n\n const onRenderYear = (value: number) => {\n return props.onRenderYear?.(value) ?? value;\n };\n\n const gridAriaLabel = `${onRenderYear(fromYear)} - ${onRenderYear(toYear)}`;\n\n let year = fromYear;\n const cells: React.ReactNode[][] = [];\n\n for (let i = 0; i < (toYear - fromYear + 1) / CELLS_PER_ROW; i++) {\n cells.push([]);\n for (let j = 0; j < CELLS_PER_ROW; j++) {\n cells[i].push(renderCell(year));\n year++;\n }\n }\n\n const arrowNavigationAttributes = useArrowNavigationGroup({ axis: 'grid' });\n\n return (\n <div {...arrowNavigationAttributes} className={classNames.gridContainer} role=\"grid\" aria-label={gridAriaLabel}>\n {cells.map((cellRow: React.ReactNode[], index: number) => {\n return (\n <div key={'yearPickerRow_' + index + '_' + fromYear} role=\"row\" className={classNames.buttonRow}>\n {cellRow}\n </div>\n );\n })}\n </div>\n );\n};\nCalendarYearGrid.displayName = 'CalendarYearGrid';\n\nconst CalendarYearNavDirection = {\n Previous: 0 as const,\n Next: 1 as const,\n};\n\ninterface CalendarYearNavArrowProps extends CalendarYearHeaderProps {\n direction: (typeof CalendarYearNavDirection)[keyof typeof CalendarYearNavDirection];\n}\n\nconst CalendarYearNavArrow: React.FunctionComponent<CalendarYearNavArrowProps> = props => {\n const {\n className,\n strings = DefaultCalendarYearStrings,\n direction,\n onSelectPrev,\n onSelectNext,\n fromYear,\n toYear,\n maxYear,\n minYear,\n navigationIcons,\n } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n const ariaLabel =\n direction === CalendarYearNavDirection.Previous ? strings.prevRangeAriaLabel : strings.nextRangeAriaLabel;\n const newRangeOffset = direction === CalendarYearNavDirection.Previous ? -CELL_COUNT : CELL_COUNT;\n const newRange = { fromYear: fromYear + newRangeOffset, toYear: toYear + newRangeOffset };\n const ariaLabelString = ariaLabel ? (typeof ariaLabel === 'string' ? ariaLabel : ariaLabel(newRange)) : undefined;\n const disabled =\n direction === CalendarYearNavDirection.Previous\n ? minYear !== undefined && fromYear < minYear\n : maxYear !== undefined && props.fromYear + CELL_COUNT > maxYear;\n\n const onNavigate = () => {\n direction === CalendarYearNavDirection.Previous ? onSelectPrev?.() : onSelectNext?.();\n };\n\n const onKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter) {\n onNavigate();\n }\n };\n\n return (\n <button\n className={mergeClasses(classNames.navigationButton, disabled && classNames.disabled)}\n onClick={!disabled ? onNavigate : undefined}\n onKeyDown={!disabled ? onKeyDown : undefined}\n type=\"button\"\n title={ariaLabelString}\n disabled={disabled}\n >\n {direction === CalendarYearNavDirection.Previous ? navigationIcons.upNavigation : navigationIcons.downNavigation}\n </button>\n );\n};\nCalendarYearNavArrow.displayName = 'CalendarYearNavArrow';\n\nconst CalendarYearNav: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const { className } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n return (\n <div className={classNames.navigationButtonsContainer}>\n <CalendarYearNavArrow {...props} direction={CalendarYearNavDirection.Previous} />\n <CalendarYearNavArrow {...props} direction={CalendarYearNavDirection.Next} />\n </div>\n );\n};\nCalendarYearNav.displayName = 'CalendarYearNav';\n\nconst CalendarYearTitle: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const {\n className,\n fromYear,\n toYear,\n strings = DefaultCalendarYearStrings,\n animateBackwards,\n animationDirection,\n } = props;\n\n const onHeaderSelect = () => {\n props.onHeaderSelect?.(true);\n };\n\n const onHeaderKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter || ev.key === Space) {\n onHeaderSelect();\n }\n };\n\n const onRenderYear = (year: number) => {\n return props.onRenderYear?.(year) ?? year;\n };\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection,\n });\n\n if (props.onHeaderSelect) {\n const rangeAriaLabel = strings.rangeAriaLabel;\n const headerAriaLabelFormatString = strings.headerAriaLabelFormatString;\n const currentDateRange = rangeAriaLabel\n ? typeof rangeAriaLabel === 'string'\n ? rangeAriaLabel\n : rangeAriaLabel(props)\n : undefined;\n\n const ariaLabel = headerAriaLabelFormatString\n ? headerAriaLabelFormatString.replace('{0}', currentDateRange ?? '')\n : currentDateRange;\n\n return (\n <button\n className={classNames.currentItemButton}\n onClick={onHeaderSelect}\n onKeyDown={onHeaderKeyDown}\n aria-label={ariaLabel}\n role=\"button\"\n type=\"button\"\n >\n <span aria-live=\"assertive\" aria-atomic=\"true\">\n {onRenderYear(fromYear)} - {onRenderYear(toYear)}\n </span>\n </button>\n );\n }\n\n return (\n <div className={classNames.current}>\n {onRenderYear(fromYear)} - {onRenderYear(toYear)}\n </div>\n );\n};\nCalendarYearTitle.displayName = 'CalendarYearTitle';\n\nconst CalendarYearHeader: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const { className, animateBackwards, animationDirection, onRenderTitle } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection,\n });\n\n return (\n <div className={classNames.headerContainer}>\n {onRenderTitle?.(props) ?? <CalendarYearTitle {...props} />}\n <CalendarYearNav {...props} />\n </div>\n );\n};\nCalendarYearHeader.displayName = 'CalendarYearHeader';\n\nfunction useAnimateBackwards({ 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","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","navigationIcons","ariaLabel","newRangeOffset","newRange","ariaLabelString","onNavigate","navigationButton","title","upNavigation","downNavigation","CalendarYearNav","navigationButtonsContainer","CalendarYearTitle","onHeaderSelect","onHeaderKeyDown","hasHeaderClickCallback","rangeAriaLabel","headerAriaLabelFormatString","currentDateRange","replace","currentItemButton","span","aria-live","aria-atomic","CalendarYearHeader","onRenderTitle","headerContainer","useAnimateBackwards","navigatedYear","rangeYear","Math","floor","previousFromYearRef","previousFromYear","useYearRangeState","useMemo","setFromYear","useState","onNavNext","onNavPrevious","useEffect","CalendarYear","gridRef","root"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
1
|
+
{"version":3,"sources":["../src/components/CalendarYear/CalendarYear.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Enter, Space } from '@fluentui/keyboard-keys';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { mergeClasses } from '@griffel/react';\nimport { useCalendarYearStyles_unstable } from './useCalendarYearStyles.styles';\nimport type {\n CalendarYearStrings,\n CalendarYearProps,\n CalendarYearRange,\n CalendarYearHeaderProps,\n} from './CalendarYear.types';\n\nconst CELL_COUNT = 12;\nconst CELLS_PER_ROW = 4;\n\n/* eslint-disable react-compiler/react-compiler */\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 // eslint-disable-next-line react-hooks/rules-of-hooks\n const selectedCellRef = React.useRef<CalendarYearGridCell>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const currentCellRef = React.useRef<CalendarYearGridCell>(null);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\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 // eslint-disable-next-line react-hooks/rules-of-hooks\n const classNames = useCalendarYearStyles_unstable({\n className,\n animateBackwards,\n animationDirection,\n });\n\n const onRenderYear = (value: number) => {\n return props.onRenderYear?.(value) ?? value;\n };\n\n const gridAriaLabel = `${onRenderYear(fromYear)} - ${onRenderYear(toYear)}`;\n\n let year = fromYear;\n const cells: React.ReactNode[][] = [];\n\n for (let i = 0; i < (toYear - fromYear + 1) / CELLS_PER_ROW; i++) {\n cells.push([]);\n for (let j = 0; j < CELLS_PER_ROW; j++) {\n cells[i].push(renderCell(year));\n year++;\n }\n }\n\n const arrowNavigationAttributes = useArrowNavigationGroup({ axis: 'grid' });\n\n return (\n <div {...arrowNavigationAttributes} className={classNames.gridContainer} role=\"grid\" aria-label={gridAriaLabel}>\n {cells.map((cellRow: React.ReactNode[], index: number) => {\n return (\n <div key={'yearPickerRow_' + index + '_' + fromYear} role=\"row\" className={classNames.buttonRow}>\n {cellRow}\n </div>\n );\n })}\n </div>\n );\n};\nCalendarYearGrid.displayName = 'CalendarYearGrid';\n\nconst CalendarYearNavDirection = {\n Previous: 0 as const,\n Next: 1 as const,\n};\n\ninterface CalendarYearNavArrowProps extends CalendarYearHeaderProps {\n direction: (typeof CalendarYearNavDirection)[keyof typeof CalendarYearNavDirection];\n}\n\nconst CalendarYearNavArrow: React.FunctionComponent<CalendarYearNavArrowProps> = props => {\n const {\n className,\n strings = DefaultCalendarYearStrings,\n direction,\n onSelectPrev,\n onSelectNext,\n fromYear,\n toYear,\n maxYear,\n minYear,\n navigationIcons,\n } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n const ariaLabel =\n direction === CalendarYearNavDirection.Previous ? strings.prevRangeAriaLabel : strings.nextRangeAriaLabel;\n const newRangeOffset = direction === CalendarYearNavDirection.Previous ? -CELL_COUNT : CELL_COUNT;\n const newRange = { fromYear: fromYear + newRangeOffset, toYear: toYear + newRangeOffset };\n const ariaLabelString = ariaLabel ? (typeof ariaLabel === 'string' ? ariaLabel : ariaLabel(newRange)) : undefined;\n const disabled =\n direction === CalendarYearNavDirection.Previous\n ? minYear !== undefined && fromYear < minYear\n : maxYear !== undefined && props.fromYear + CELL_COUNT > maxYear;\n\n const onNavigate = () => {\n direction === CalendarYearNavDirection.Previous ? onSelectPrev?.() : onSelectNext?.();\n };\n\n const onKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter) {\n onNavigate();\n }\n };\n\n return (\n <button\n className={mergeClasses(classNames.navigationButton, disabled && classNames.disabled)}\n onClick={!disabled ? onNavigate : undefined}\n onKeyDown={!disabled ? onKeyDown : undefined}\n type=\"button\"\n title={ariaLabelString}\n disabled={disabled}\n >\n {direction === CalendarYearNavDirection.Previous ? navigationIcons.upNavigation : navigationIcons.downNavigation}\n </button>\n );\n};\nCalendarYearNavArrow.displayName = 'CalendarYearNavArrow';\n\nconst CalendarYearNav: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const { className } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n });\n\n return (\n <div className={classNames.navigationButtonsContainer}>\n <CalendarYearNavArrow {...props} direction={CalendarYearNavDirection.Previous} />\n <CalendarYearNavArrow {...props} direction={CalendarYearNavDirection.Next} />\n </div>\n );\n};\nCalendarYearNav.displayName = 'CalendarYearNav';\n\nconst CalendarYearTitle: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const {\n className,\n fromYear,\n toYear,\n strings = DefaultCalendarYearStrings,\n animateBackwards,\n animationDirection,\n } = props;\n\n const onHeaderSelect = () => {\n props.onHeaderSelect?.(true);\n };\n\n const onHeaderKeyDown = (ev: React.KeyboardEvent<HTMLElement>) => {\n if (ev.key === Enter || ev.key === Space) {\n onHeaderSelect();\n }\n };\n\n const onRenderYear = (year: number) => {\n return props.onRenderYear?.(year) ?? year;\n };\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection,\n });\n\n if (props.onHeaderSelect) {\n const rangeAriaLabel = strings.rangeAriaLabel;\n const headerAriaLabelFormatString = strings.headerAriaLabelFormatString;\n const currentDateRange = rangeAriaLabel\n ? typeof rangeAriaLabel === 'string'\n ? rangeAriaLabel\n : rangeAriaLabel(props)\n : undefined;\n\n const ariaLabel = headerAriaLabelFormatString\n ? headerAriaLabelFormatString.replace('{0}', currentDateRange ?? '')\n : currentDateRange;\n\n return (\n <button\n className={classNames.currentItemButton}\n onClick={onHeaderSelect}\n onKeyDown={onHeaderKeyDown}\n aria-label={ariaLabel}\n role=\"button\"\n type=\"button\"\n >\n <span aria-live=\"assertive\" aria-atomic=\"true\">\n {onRenderYear(fromYear)} - {onRenderYear(toYear)}\n </span>\n </button>\n );\n }\n\n return (\n <div className={classNames.current}>\n {onRenderYear(fromYear)} - {onRenderYear(toYear)}\n </div>\n );\n};\nCalendarYearTitle.displayName = 'CalendarYearTitle';\n\nconst CalendarYearHeader: React.FunctionComponent<CalendarYearHeaderProps> = props => {\n const { className, animateBackwards, animationDirection, onRenderTitle } = props;\n\n const classNames = useCalendarYearStyles_unstable({\n className,\n hasHeaderClickCallback: !!props.onHeaderSelect,\n animateBackwards,\n animationDirection,\n });\n\n return (\n <div className={classNames.headerContainer}>\n {onRenderTitle?.(props) ?? <CalendarYearTitle {...props} />}\n <CalendarYearNav {...props} />\n </div>\n );\n};\nCalendarYearHeader.displayName = 'CalendarYearHeader';\n\nfunction useAnimateBackwards({ 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","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","navigationIcons","ariaLabel","newRangeOffset","newRange","ariaLabelString","onNavigate","navigationButton","title","upNavigation","downNavigation","CalendarYearNav","navigationButtonsContainer","CalendarYearTitle","onHeaderSelect","onHeaderKeyDown","hasHeaderClickCallback","rangeAriaLabel","headerAriaLabelFormatString","currentDateRange","replace","currentItemButton","span","aria-live","aria-atomic","CalendarYearHeader","onRenderTitle","headerContainer","useAnimateBackwards","navigatedYear","rangeYear","Math","floor","previousFromYearRef","previousFromYear","useYearRangeState","useMemo","setFromYear","useState","onNavNext","onNavPrevious","useEffect","CalendarYear","gridRef","root"],"mappings":"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"}
|