{"version":3,"sources":["../../../../src/components/Calendar/CalendarDay/useCalendarDay.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {\n  ArrowDown,\n  ArrowLeft,\n  ArrowRight,\n  ArrowUp,\n  End,\n  Enter,\n  Home,\n  PageDown,\n  PageUp,\n  Space,\n} from '@fluentui/keyboard-keys';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { getIntrinsicElementProps, mergeCallbacks, slot, useMergedRefs } from '@fluentui/react-utilities';\nimport {\n  DAYS_IN_WEEK,\n  addDays,\n  addMonths,\n  addYears,\n  compareDatePart,\n  findAvailableDate,\n  getDateRange,\n  getDayGrid,\n  getDayFromIndex,\n  getDayIndex,\n  getMonthEnd,\n  getMonthStart,\n  getWeekNumber,\n  isRestrictedDate,\n} from '../utils';\nimport { addCivilDays, createDate, matchesCivilDate } from '../utils/dateMath';\nimport { getAvailableDates } from '../utils/dateGrid/dateAvailability';\nimport { mergeProps } from '../../../utils/mergeProps';\nimport { getDateRangeTypeToUse } from '../utils/dateGrid/workWeek';\nimport { getCalendarGridCell, getCalendarGridTargetIndex, isCalendarGridNavigationKey } from '../hooks/useCalendarGrid';\nimport {\n  getCalendarEventType,\n  onCalendarEnterKeyDown,\n  resolveCalendarNavigationButton,\n  setCalendarNavigationDate,\n} from '../utils/calendarNavigation';\nimport { useCalendarContext } from '../calendarContext';\nimport type { DayGridOptions, RestrictedDatesOptions } from '../utils';\nimport type {\n  CalendarDayProps,\n  CalendarDayState,\n  CalendarDayCellData,\n  CalendarDayWeekdayCellData,\n} from './CalendarDay.types';\nimport { toDataAttributeValue } from '../../../utils';\n\ntype ButtonEvent = React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>;\ntype CalendarDayGridSlotProps = React.ComponentProps<'table'> & {\n  'data-fui-calendar-grid'?: string;\n};\n\nconst noop = () => undefined;\n\n/**\n * Applied imperatively to every cell in the hovered or pressed range, because an arbitrary blob of\n * days cannot be expressed with a `:hover` rule.\n */\nconst RANGE_HOVERED_ATTRIBUTE = 'data-range-hovered';\nconst RANGE_PRESSED_ATTRIBUTE = 'data-range-pressed';\n\n/**\n * Finds the next representable civil date at `initialOffset` days and beyond, skipping dates that do not exist in\n * the local timezone.\n */\nconst getDirectionalTargetDate = (date: Date, initialOffset: number, direction: 1 | -1): Date | undefined => {\n  const origin = { year: date.getFullYear(), month: date.getMonth(), day: date.getDate() };\n  for (let offset = initialOffset; ; offset += direction) {\n    const civilDate = addCivilDays(origin, offset);\n    if (!Number.isFinite(civilDate.year)) {\n      return undefined;\n    }\n\n    const candidate = createDate(civilDate.year, civilDate.month, civilDate.day);\n    if (!Number.isFinite(candidate.getTime())) {\n      return undefined;\n    }\n\n    if (matchesCivilDate(candidate, civilDate) && compareDatePart(candidate, date) * direction > 0) {\n      return candidate;\n    }\n  }\n};\n\n/**\n * Finds the nearest available date on the same weekday as `date`, stepping a week at a time and skipping dates that\n * do not exist in the local timezone. The search stops at the minimum or maximum date.\n */\nconst findAvailableWeekdayDate = (date: Date, direction: 1 | -1, options: RestrictedDatesOptions): Date | undefined => {\n  const origin = { year: date.getFullYear(), month: date.getMonth(), day: date.getDate() };\n  const bound = direction === 1 ? options.maxDate : options.minDate;\n  for (let offset = DAYS_IN_WEEK * direction; ; offset += DAYS_IN_WEEK * direction) {\n    const civilDate = addCivilDays(origin, offset);\n    if (!Number.isFinite(civilDate.year)) {\n      return undefined;\n    }\n\n    const candidate = createDate(civilDate.year, civilDate.month, civilDate.day);\n    if (!Number.isFinite(candidate.getTime()) || (bound && compareDatePart(candidate, bound) * direction > 0)) {\n      return undefined;\n    }\n\n    if (matchesCivilDate(candidate, civilDate) && !isRestrictedDate(candidate, options)) {\n      return candidate;\n    }\n  }\n};\n\n/**\n * Create the state required to render CalendarDay.\n * Calendar owns selection, range hover, directional navigation and roving focus.\n */\nexport const useCalendarDay = (props: CalendarDayProps, ref: React.Ref<HTMLDivElement>): CalendarDayState => {\n  const {\n    allFocusable,\n    dateRangeType,\n    firstDayOfWeek,\n    firstWeekOfYear,\n    formatters,\n    maxDate,\n    minDate,\n    restrictedDates,\n    setValue,\n    showWeekNumbers,\n    today: contextToday,\n    value,\n    workWeekDays,\n  } = useCalendarContext();\n  const { dir } = useFluent_unstable();\n\n  const {\n    body,\n    closeButton,\n    daysToSelectInDayView,\n    getCellProps,\n    getMarkedDays,\n    getRowProps,\n    getWeekdayCellProps,\n    grid,\n    header,\n    heading,\n    navigation,\n    nextMonthButton,\n    onDismiss,\n    onHeaderSelect,\n    onNavigateDate = noop,\n    previousMonthButton,\n    weeksToShow,\n  } = props;\n\n  const today = React.useMemo(() => contextToday ?? new Date(), [contextToday]);\n  const navigatedDate = props.navigatedDate ?? today;\n  const selectedDate = value ?? null;\n  const restrictedDatesOptions = { minDate, maxDate, restrictedDates };\n\n  const [dayElements] = React.useState(() => new Map<string, HTMLTableCellElement>());\n  const dayElementRefs = React.useRef(new Map<string, React.RefCallback<HTMLTableCellElement>>());\n  const nextMonthRef = React.useRef<HTMLButtonElement>(null);\n  const previousMonthRef = React.useRef<HTMLButtonElement>(null);\n  const navigatedDateTimestamp = navigatedDate.getTime();\n\n  React.useEffect(() => {\n    dayElements.forEach(element => {\n      element.removeAttribute(RANGE_HOVERED_ATTRIBUTE);\n      element.removeAttribute(RANGE_PRESSED_ATTRIBUTE);\n    });\n    dayElementRefs.current.forEach((_callback, key) => {\n      if (!dayElements.has(key)) {\n        dayElementRefs.current.delete(key);\n      }\n    });\n  }, [dayElements, navigatedDateTimestamp]);\n\n  const onSelectDay = (ev: React.SyntheticEvent<HTMLElement>, date: Date): void => {\n    if (isRestrictedDate(date, restrictedDatesOptions)) {\n      return;\n    }\n\n    const dateRange = getAvailableDates(\n      getDateRange(date, dateRangeType, firstDayOfWeek, workWeekDays, daysToSelectInDayView),\n      restrictedDatesOptions,\n    );\n\n    const type = getCalendarEventType(ev);\n    setValue?.(ev, { event: ev, type, date, selectedDateRange: dateRange });\n    onNavigateDate(ev, { event: ev, type, date, focusOnNavigatedDay: true });\n  };\n\n  const gridOptions: DayGridOptions = {\n    daysToSelectInDayView,\n    dateRangeType,\n    firstDayOfWeek,\n    maxDate,\n    minDate,\n    navigatedDate,\n    restrictedDates,\n    selectedDate,\n    today,\n    weeksToShow,\n    workWeekDays,\n  };\n\n  const dayGrid = getDayGrid(gridOptions);\n  const visibleDates = dayGrid\n    .flatMap(week => week.map(day => day.originalDate))\n    .filter((date): date is Date => date !== null);\n  const markedDays =\n    visibleDates.length > 0 ? getMarkedDays?.(visibleDates[0], visibleDates[visibleDates.length - 1]) || [] : [];\n  const markedDayKeys = new Set(markedDays.map(date => `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`));\n  for (const week of dayGrid) {\n    for (const day of week) {\n      const dayDate = day.originalDate;\n      day.isMarked ||=\n        !!dayDate && markedDayKeys.has(`${dayDate.getFullYear()}-${dayDate.getMonth()}-${dayDate.getDate()}`);\n    }\n  }\n\n  let focusTargetDate: Date | undefined = navigatedDate;\n  if (!allFocusable && isRestrictedDate(navigatedDate, restrictedDatesOptions)) {\n    const isInNavigatedMonth = (date: Date) =>\n      compareDatePart(date, getMonthStart(navigatedDate)) >= 0 &&\n      compareDatePart(date, getMonthEnd(navigatedDate)) <= 0;\n    const isAvailable = (date: Date) => !isRestrictedDate(date, restrictedDatesOptions);\n    const sameMonthDates = visibleDates.filter(isInNavigatedMonth);\n    const currentIndex = sameMonthDates.findIndex(date => compareDatePart(date, navigatedDate) === 0);\n    const searchDirection = (direction: 1 | -1) => {\n      for (let index = currentIndex + direction; index >= 0 && index < sameMonthDates.length; index += direction) {\n        if (isAvailable(sameMonthDates[index])) {\n          return sameMonthDates[index];\n        }\n      }\n      return undefined;\n    };\n    const remainingVisibleDates = visibleDates.filter(date => !isInNavigatedMonth(date));\n\n    focusTargetDate =\n      searchDirection(1) ??\n      searchDirection(-1) ??\n      remainingVisibleDates.find(date => compareDatePart(date, navigatedDate) > 0 && isAvailable(date)) ??\n      remainingVisibleDates\n        .slice()\n        .reverse()\n        .find(date => compareDatePart(date, navigatedDate) < 0 && isAvailable(date)) ??\n      findAvailableDate({\n        ...restrictedDatesOptions,\n        initialDate: addDays(getMonthEnd(navigatedDate), 1),\n        targetDate: navigatedDate,\n        direction: 1,\n      }) ??\n      findAvailableDate({\n        ...restrictedDatesOptions,\n        initialDate: addDays(getMonthStart(navigatedDate), -1),\n        targetDate: navigatedDate,\n        direction: -1,\n      });\n  }\n\n  const focusTarget = focusTargetDate;\n  const focusTargetKey = focusTarget\n    ? dayGrid.flat().find(day => day.originalDate && compareDatePart(day.originalDate, focusTarget) === 0)?.key\n    : undefined;\n  const isDayFocusable = (day: { originalDate: Date | null; isInBounds: boolean }) =>\n    !!day.originalDate && (allFocusable || day.isInBounds);\n  // The focused day keeps the roving tab stop until the grid navigates to another date.\n  const [activeDay, setActiveDay] = React.useState<{ key: string; navigatedDate: number } | undefined>(undefined);\n  const activeDayKey =\n    activeDay?.navigatedDate === navigatedDateTimestamp &&\n    dayGrid.some(week => week.some(day => day.key === activeDay.key && isDayFocusable(day)))\n      ? activeDay.key\n      : undefined;\n  const tabStopKey = activeDayKey ?? focusTargetKey;\n\n  const weeks: CalendarDayState['weeks'] = dayGrid.map((week, weekIndex) => {\n    const days = week.map(\n      (day): CalendarDayCellData => ({\n        ...day,\n        label: day.originalDate ? formatters.dateTime({ date: day.originalDate, format: 'day' }) : day.date,\n        isNavigated: !!day.originalDate && day.key === focusTargetKey,\n      }),\n    );\n    const lastDate = week\n      .slice()\n      .reverse()\n      .find(day => day.originalDate)?.originalDate;\n    const weekNumber =\n      showWeekNumbers && lastDate ? getWeekNumber(lastDate, firstDayOfWeek, firstWeekOfYear) : undefined;\n    return { type: 'week', key: weekIndex, days, weekNumber };\n  });\n  const visibleDays = weeks.flatMap(week => week.days);\n  const getDayElementRef = (key: string): React.RefCallback<HTMLTableCellElement> => {\n    let callback = dayElementRefs.current.get(key);\n    if (!callback) {\n      callback = element => {\n        if (element) {\n          dayElements.set(key, element);\n        } else {\n          dayElements.delete(key);\n        }\n      };\n      dayElementRefs.current.set(key, callback);\n    }\n    return callback;\n  };\n  const getDayCellProps: CalendarDayState['getDayCellProps'] = day => {\n    const date = day.originalDate;\n    const formattedDate = date ? formatters.dateTime({ date, format: 'monthDayYear' }) : day.date;\n    const overrides = getCellProps?.(day);\n    const rootProps = {\n      role: 'gridcell' as const,\n      'aria-current': day.isToday ? ('date' as const) : undefined,\n      'aria-disabled': !day.isInBounds,\n      'aria-selected': day.isInBounds ? day.isSelected : undefined,\n      // One roving tab stop; unavailable days stay out of focus unless allFocusable is set.\n      tabIndex: isDayFocusable(day) ? (day.key === tabStopKey ? 0 : -1) : undefined,\n      ref: getDayElementRef(day.key),\n      'data-day-key': day.key,\n      'data-marked': toDataAttributeValue(day.isMarked),\n      'data-outside-bounds': toDataAttributeValue(!day.isInBounds),\n      'data-outside-month': toDataAttributeValue(!day.isInMonth),\n      'data-selected': toDataAttributeValue(day.isSelected),\n      'data-today': toDataAttributeValue(day.isToday),\n    };\n    return {\n      root: mergeProps<HTMLTableCellElement, React.ComponentProps<'td'>>(rootProps, overrides?.root),\n      button: mergeProps(\n        {\n          'aria-label': day.isMarked && date ? formatters.dayMarkedLabel({ date, formattedDate }) : formattedDate,\n          disabled: !day.isInBounds,\n          onMouseDown: (event: React.MouseEvent<HTMLButtonElement>) => event.preventDefault(),\n          tabIndex: -1,\n          type: 'button',\n        },\n        overrides?.button,\n      ),\n      label: mergeProps({ children: day.label }, overrides?.label),\n      marker: day.isMarked ? mergeProps({ 'aria-hidden': true }, overrides?.marker) : undefined,\n    };\n  };\n  const getDayRowProps: CalendarDayState['getDayRowProps'] = row => {\n    const overrides = getRowProps?.(row);\n    const weekNumber = row.type === 'week' ? row.weekNumber : undefined;\n    const weekNumberLabel = weekNumber !== undefined ? formatters.weekNumberLabel({ weekNumber }) : '';\n    return {\n      root: mergeProps({ role: 'row' }, overrides?.root),\n      weekNumber:\n        row.type === 'weekday'\n          ? showWeekNumbers\n            ? mergeProps({ role: 'presentation' }, overrides?.weekNumber)\n            : undefined\n          : weekNumber !== undefined\n          ? mergeProps(\n              {\n                'aria-label': weekNumberLabel,\n                children: <span>{weekNumber}</span>,\n                scope: 'row',\n                title: weekNumberLabel,\n              },\n              overrides?.weekNumber,\n            )\n          : undefined,\n    };\n  };\n\n  // Weekday labels follow the configured first day of the week.\n  const weekdayDates = Array.from({ length: DAYS_IN_WEEK }, (_, index) => new Date(2020, 0, 5 + index));\n  const shortDays = weekdayDates.map(date => formatters.dateTime({ date, format: 'shortWeekday' }));\n  const dayNames = weekdayDates.map(date => formatters.dateTime({ date, format: 'weekday' }));\n  const firstDayOfWeekIndex = getDayIndex(firstDayOfWeek);\n  const firstOfMonthIndex = dayGrid[0].findIndex(day => day.originalDate?.getDate() === 1);\n  const firstOfMonthDate = dayGrid[0][firstOfMonthIndex]?.originalDate;\n  if (weeksToShow === 1 && firstOfMonthDate) {\n    // if we only show one week, replace the header with short month name\n    const firstOfMonthIndexOffset = (firstOfMonthIndex + firstDayOfWeekIndex) % DAYS_IN_WEEK;\n    shortDays[firstOfMonthIndexOffset] = formatters.dateTime({ date: firstOfMonthDate, format: 'shortMonth' });\n    dayNames[firstOfMonthIndexOffset] = formatters.dateTime({ date: firstOfMonthDate, format: 'month' });\n  }\n  const weekdayRow: CalendarDayState['weekdayRow'] = {\n    type: 'weekday',\n    cells: shortDays.map((_, index): CalendarDayWeekdayCellData => {\n      const i = (index + firstDayOfWeekIndex) % DAYS_IN_WEEK;\n      return {\n        key: shortDays[i] + ' ' + index,\n        dayOfWeek: getDayFromIndex(i),\n        label: shortDays[i],\n        accessibleLabel: dayNames[i],\n      };\n    }),\n  };\n  const resolveWeekdayCellProps: CalendarDayState['getWeekdayCellProps'] = weekday => ({\n    root: mergeProps(\n      {\n        role: 'columnheader',\n        'aria-label': weekday.accessibleLabel,\n        children: weekday.label,\n        scope: 'col',\n        title: weekday.accessibleLabel,\n      },\n      getWeekdayCellProps?.(weekday).root,\n    ),\n  });\n\n  const getFocusTarget = () => (tabStopKey ? dayElements.get(tabStopKey) : undefined);\n\n  React.useImperativeHandle(props.imperativeRef, () => ({\n    focus(options?: FocusOptions) {\n      const target =\n        getFocusTarget() ??\n        [nextMonthRef.current, previousMonthRef.current].find(\n          button => button && !button.disabled && button.getAttribute('aria-disabled') !== 'true',\n        );\n      target?.focus(options);\n    },\n  }));\n\n  const findDay = (cell: HTMLElement) => visibleDays.find(day => dayElements.get(day.key) === cell);\n\n  /**\n   * Because we want arbitrary blobs of days to be selectable — to support highlighting every day in\n   * the month for month view — a CSS `:hover` rule isn't enough. Mouse callbacks set attributes on\n   * every relevant cell instead, so the grid resolves a day to its peers.\n   */\n  const getDaysInRange = (day: CalendarDayCellData): CalendarDayCellData[] => {\n    if (!day.originalDate) {\n      return [];\n    }\n    // The hover state looks weird with non-contiguous days in work week view. In work week, show week hover state\n    const dateRange = getDateRange(\n      day.originalDate,\n      getDateRangeTypeToUse(dateRangeType, workWeekDays, firstDayOfWeek),\n      firstDayOfWeek,\n      workWeekDays,\n      daysToSelectInDayView,\n    );\n    return visibleDays.filter(visibleDay => {\n      const date = visibleDay.originalDate;\n      return date !== null && dateRange.some(rangeDate => compareDatePart(rangeDate, date) === 0);\n    });\n  };\n\n  const updateRange = (day: CalendarDayCellData, hovered: boolean | undefined, pressed?: boolean) => {\n    const daysInRange = getDaysInRange(day);\n    daysInRange.forEach(dayInRange => {\n      const element = dayElements.get(dayInRange.key);\n      if (!element) {\n        return;\n      }\n      if (hovered !== undefined) {\n        element.toggleAttribute(RANGE_HOVERED_ATTRIBUTE, hovered);\n      }\n      if (pressed !== undefined) {\n        element.toggleAttribute(RANGE_PRESSED_ATTRIBUTE, pressed);\n      }\n    });\n  };\n\n  const navigateOutsideVisibleDays = (ev: React.KeyboardEvent<HTMLElement>, date: Date): void => {\n    if (ev.altKey || ev.ctrlKey || ev.metaKey || ev.shiftKey) {\n      return;\n    }\n\n    const searchOptions = { ...restrictedDatesOptions, restrictedDates: allFocusable ? undefined : restrictedDates };\n    let nextDate: Date | undefined;\n\n    if (ev.key === ArrowUp || ev.key === ArrowDown) {\n      // Vertical movement keeps the weekday, so unavailable days in the column are skipped a week at a time.\n      nextDate = findAvailableWeekdayDate(date, ev.key === ArrowUp ? -1 : 1, searchOptions);\n    } else if (ev.key === ArrowLeft || ev.key === ArrowRight) {\n      const direction = (ev.key === ArrowRight) !== (dir === 'rtl') ? 1 : -1;\n      // Called only when no visible day in this direction can take focus, so a visible target is unavailable.\n      const targetDate = getDirectionalTargetDate(date, direction, direction);\n      nextDate = targetDate && findAvailableDate({ initialDate: date, targetDate, direction, ...searchOptions });\n    } else {\n      return;\n    }\n\n    if (nextDate) {\n      ev.preventDefault();\n      onNavigateDate(ev, { event: ev, type: 'keydown', date: nextDate, focusOnNavigatedDay: true });\n    }\n  };\n\n  const getEventDay = (ev: React.SyntheticEvent<HTMLElement>): [HTMLElement, CalendarDayCellData] | undefined => {\n    const cell = getCalendarGridCell(ev);\n    const day = cell && findDay(cell);\n    return cell && day?.originalDate ? [cell, day] : undefined;\n  };\n\n  // Ignore pointer moves between a cell and its own content.\n  const onMouseOverOrOut = (hovered: boolean) => (ev: React.MouseEvent<HTMLElement>) => {\n    const eventDay = getEventDay(ev);\n    if (eventDay && !(ev.relatedTarget && eventDay[0].contains(ev.relatedTarget as Node))) {\n      updateRange(eventDay[1], hovered, hovered ? undefined : false);\n    }\n  };\n\n  const monthAndYear = formatters.dateTime({ date: navigatedDate, format: 'monthYear' });\n  const prevMonthInBounds = minDate ? compareDatePart(minDate, getMonthStart(navigatedDate)) < 0 : true;\n  const nextMonthInBounds = maxDate ? compareDatePart(getMonthEnd(navigatedDate), maxDate) < 0 : true;\n\n  const navigateMonth = (ev: ButtonEvent, offset: number) =>\n    onNavigateDate(ev, {\n      event: ev,\n      type: getCalendarEventType(ev),\n      date: addMonths(navigatedDate, offset),\n      focusOnNavigatedDay: false,\n    });\n  const onSelectHeader = (ev: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>) =>\n    onHeaderSelect?.(ev, { event: ev, type: getCalendarEventType(ev) });\n  const onClose = (ev: ButtonEvent) => onDismiss?.(ev, { event: ev, type: getCalendarEventType(ev) });\n\n  /**\n   * Moves the roving tab stop with arrows, Home and End, skipping unavailable days. Arrows wrap across weeks.\n   * Reaching an available day of an adjacent month loads that month; moving past the visible days pages to the next\n   * available date. Neither selects a date.\n   */\n  const moveFocus = (ev: React.KeyboardEvent<HTMLElement>, day: CalendarDayCellData): void => {\n    const index = visibleDays.indexOf(day);\n    const targetIndex = getCalendarGridTargetIndex(\n      ev.key,\n      dir,\n      index,\n      visibleDays.length,\n      DAYS_IN_WEEK,\n      candidate => isDayFocusable(visibleDays[candidate]),\n      true,\n    );\n    const target = targetIndex === undefined ? undefined : visibleDays[targetIndex];\n    if (!target?.originalDate) {\n      if (ev.key !== Home && ev.key !== End) {\n        navigateOutsideVisibleDays(ev, day.originalDate!);\n      }\n      // Boundary keys are owned too, so the page does not scroll when focus cannot move further.\n      if (!ev.isDefaultPrevented()) {\n        ev.preventDefault();\n      }\n      return;\n    }\n\n    ev.preventDefault();\n    setActiveDay({ key: target.key, navigatedDate: navigatedDateTimestamp });\n    dayElements.get(target.key)?.focus();\n    if (!target.isInMonth && target.isInBounds) {\n      onNavigateDate(ev, { event: ev, type: 'keydown', date: target.originalDate, focusOnNavigatedDay: true });\n    }\n  };\n\n  const gridSlot = slot.always(grid, {\n    defaultProps: {\n      role: 'grid',\n      'aria-label': monthAndYear,\n      'aria-multiselectable': dateRangeType !== 'day' || Math.abs(daysToSelectInDayView ?? 1) > 1,\n    },\n    elementType: 'table',\n  }) as CalendarDayGridSlotProps;\n  gridSlot['data-fui-calendar-grid'] = '';\n  gridSlot.onKeyDown = mergeCallbacks(gridSlot.onKeyDown, (ev: React.KeyboardEvent<HTMLElement>) => {\n    const eventDay = getEventDay(ev);\n    if (!eventDay || ev.isDefaultPrevented()) {\n      return;\n    }\n    const [, day] = eventDay;\n    const date = day.originalDate!;\n    if (ev.key === PageUp || ev.key === PageDown) {\n      if (ev.currentTarget.closest('[data-fui-calendar-root]')) {\n        // Calendar pages from the focused day rather than the navigated date.\n        setCalendarNavigationDate(ev.nativeEvent, date);\n      } else {\n        const direction = ev.key === PageUp ? -1 : 1;\n        onNavigateDate(ev, {\n          event: ev,\n          type: 'keydown',\n          date: ev.shiftKey ? addYears(date, direction) : addMonths(date, direction),\n          focusOnNavigatedDay: true,\n        });\n        ev.preventDefault();\n      }\n    } else if ((ev.key === Enter || ev.key === Space) && day.isInBounds) {\n      onSelectDay(ev, date);\n      ev.preventDefault();\n    } else if (isCalendarGridNavigationKey(ev)) {\n      moveFocus(ev, day);\n    }\n  });\n  gridSlot.onClick = mergeCallbacks(gridSlot.onClick, (ev: React.MouseEvent<HTMLElement>) => {\n    const eventDay = getEventDay(ev);\n    if (eventDay && !ev.isDefaultPrevented()) {\n      eventDay[0].focus();\n      if (!ev.isDefaultPrevented() && eventDay[1].isInBounds) {\n        onSelectDay(ev, eventDay[1].originalDate!);\n      }\n    }\n  });\n  gridSlot.onFocus = mergeCallbacks(gridSlot.onFocus, (ev: React.FocusEvent<HTMLElement>) => {\n    const eventDay = getEventDay(ev);\n    if (eventDay && ev.target === eventDay[0] && isDayFocusable(eventDay[1])) {\n      setActiveDay({ key: eventDay[1].key, navigatedDate: navigatedDateTimestamp });\n    }\n  });\n  gridSlot.onMouseOver = mergeCallbacks(gridSlot.onMouseOver, onMouseOverOrOut(true));\n  gridSlot.onMouseOut = mergeCallbacks(gridSlot.onMouseOut, onMouseOverOrOut(false));\n  gridSlot.onMouseDown = mergeCallbacks(gridSlot.onMouseDown, (ev: React.MouseEvent<HTMLElement>) => {\n    const eventDay = getEventDay(ev);\n    if (eventDay) {\n      ev.preventDefault();\n      updateRange(eventDay[1], undefined, true);\n    }\n  });\n  gridSlot.onMouseUp = mergeCallbacks(gridSlot.onMouseUp, (ev: React.MouseEvent<HTMLElement>) => {\n    const eventDay = getEventDay(ev);\n    if (eventDay) {\n      updateRange(eventDay[1], undefined, false);\n    }\n  });\n  const previousMonthSlot = resolveCalendarNavigationButton(\n    previousMonthButton,\n    prevMonthInBounds,\n    allFocusable,\n    formatters.previousMonthLabel({\n      date: addMonths(navigatedDate, -1),\n      formattedDate: formatters.dateTime({ date: addMonths(navigatedDate, -1), format: 'month' }),\n    }),\n    ev => navigateMonth(ev, -1),\n  );\n  previousMonthSlot.ref = useMergedRefs(previousMonthSlot.ref, previousMonthRef);\n  const nextMonthSlot = resolveCalendarNavigationButton(\n    nextMonthButton,\n    nextMonthInBounds,\n    allFocusable,\n    formatters.nextMonthLabel({\n      date: addMonths(navigatedDate, 1),\n      formattedDate: formatters.dateTime({ date: addMonths(navigatedDate, 1), format: 'month' }),\n    }),\n    ev => navigateMonth(ev, 1),\n  );\n  nextMonthSlot.ref = useMergedRefs(nextMonthSlot.ref, nextMonthRef);\n  const headingSlot = slot.always(heading, {\n    defaultProps: {\n      'aria-label': onHeaderSelect\n        ? formatters.dayPickerHeaderLabel({ date: navigatedDate, formattedDate: monthAndYear })\n        : undefined,\n      tabIndex: onHeaderSelect ? 0 : undefined,\n      type: onHeaderSelect ? 'button' : undefined,\n      children: (\n        <span aria-live=\"polite\" aria-atomic=\"true\">\n          {monthAndYear}\n        </span>\n      ),\n    },\n    elementType: onHeaderSelect ? 'button' : 'div',\n  });\n  if (onHeaderSelect) {\n    headingSlot.onClick = mergeCallbacks(\n      headingSlot.onClick as React.MouseEventHandler<HTMLElement> | undefined,\n      ev => {\n        if (!ev.isDefaultPrevented()) {\n          onSelectHeader(ev);\n        }\n      },\n    );\n    headingSlot.onKeyDown = mergeCallbacks(\n      headingSlot.onKeyDown as React.KeyboardEventHandler<HTMLElement> | undefined,\n      ev => {\n        if (!ev.isDefaultPrevented()) {\n          onCalendarEnterKeyDown(onSelectHeader)(ev);\n        }\n      },\n    );\n  }\n  const closeButtonSlot = slot.optional(closeButton, {\n    defaultProps: {\n      'aria-label': formatters.closeLabel(),\n      title: formatters.closeLabel(),\n      type: 'button',\n    },\n    elementType: 'button',\n  });\n  if (closeButtonSlot && onDismiss) {\n    closeButtonSlot.onClick = mergeCallbacks(closeButtonSlot.onClick, ev => {\n      if (!ev.isDefaultPrevented()) {\n        onClose(ev);\n      }\n    });\n    closeButtonSlot.onKeyDown = mergeCallbacks(closeButtonSlot.onKeyDown, ev => {\n      if (!ev.isDefaultPrevented()) {\n        onCalendarEnterKeyDown(onClose)(ev);\n      }\n    });\n  }\n\n  return {\n    weekdayRow,\n    weeks,\n    getDayCellProps,\n    getDayRowProps,\n    getWeekdayCellProps: resolveWeekdayCellProps,\n    components: {\n      root: 'div',\n      header: 'div',\n      heading: onHeaderSelect ? 'button' : 'div',\n      navigation: 'div',\n      previousMonthButton: 'button',\n      nextMonthButton: 'button',\n      closeButton: 'button',\n      grid: 'table',\n      body: 'tbody',\n    },\n    root: slot.always(getIntrinsicElementProps('div', { ...props, ref, 'data-fui-calendar-picker': 'day' }), {\n      elementType: 'div',\n    }),\n    header: slot.always(header, { elementType: 'div' }),\n    heading: headingSlot,\n    navigation: slot.always(navigation, { elementType: 'div' }),\n    previousMonthButton: previousMonthSlot,\n    nextMonthButton: nextMonthSlot,\n    closeButton: closeButtonSlot,\n    grid: gridSlot,\n    body: slot.always(body, { elementType: 'tbody' }),\n  };\n};\n"],"names":["useCalendarDay","noop","undefined","RANGE_HOVERED_ATTRIBUTE","RANGE_PRESSED_ATTRIBUTE","getDirectionalTargetDate","date","initialOffset","direction","origin","year","getFullYear","month","getMonth","day","getDate","offset","civilDate","addCivilDays","Number","isFinite","candidate","createDate","getTime","matchesCivilDate","compareDatePart","findAvailableWeekdayDate","options","bound","maxDate","minDate","DAYS_IN_WEEK","isRestrictedDate","props","ref","allFocusable","dateRangeType","firstDayOfWeek","firstWeekOfYear","formatters","restrictedDates","setValue","showWeekNumbers","today","contextToday","value","workWeekDays","useCalendarContext","dir","useFluent_unstable","body","closeButton","daysToSelectInDayView","getCellProps","getMarkedDays","getRowProps","getWeekdayCellProps","grid","header","heading","navigation","nextMonthButton","onDismiss","onHeaderSelect","onNavigateDate","previousMonthButton","weeksToShow","React","useMemo","Date","navigatedDate","selectedDate","restrictedDatesOptions","dayElements","useState","Map","dayElementRefs","useRef","nextMonthRef","previousMonthRef","navigatedDateTimestamp","useEffect","forEach","element","removeAttribute","current","_callback","key","has","delete","onSelectDay","ev","dateRange","getAvailableDates","getDateRange","type","getCalendarEventType","event","selectedDateRange","focusOnNavigatedDay","gridOptions","dayGrid","getDayGrid","visibleDates","flatMap","week","map","originalDate","filter","markedDays","length","markedDayKeys","Set","dayDate","isMarked","focusTargetDate","isInNavigatedMonth","getMonthStart","getMonthEnd","isAvailable","sameMonthDates","currentIndex","findIndex","searchDirection","index","remainingVisibleDates","find","slice","reverse","findAvailableDate","initialDate","addDays","targetDate","focusTarget","focusTargetKey","flat","isDayFocusable","isInBounds","activeDay","setActiveDay","activeDayKey","some","tabStopKey","weeks","weekIndex","days","label","dateTime","format","isNavigated","lastDate","weekNumber","getWeekNumber","visibleDays","getDayElementRef","callback","get","set","getDayCellProps","formattedDate","overrides","rootProps","role","isToday","isSelected","tabIndex","toDataAttributeValue","isInMonth","root","mergeProps","button","dayMarkedLabel","disabled","onMouseDown","preventDefault","children","marker","getDayRowProps","row","weekNumberLabel","span","scope","title","weekdayDates","Array","from","_","shortDays","dayNames","firstDayOfWeekIndex","getDayIndex","firstOfMonthIndex","firstOfMonthDate","firstOfMonthIndexOffset","weekdayRow","cells","i","dayOfWeek","getDayFromIndex","accessibleLabel","resolveWeekdayCellProps","weekday","getFocusTarget","useImperativeHandle","imperativeRef","focus","target","getAttribute","findDay","cell","getDaysInRange","getDateRangeTypeToUse","visibleDay","rangeDate","updateRange","hovered","pressed","daysInRange","dayInRange","toggleAttribute","navigateOutsideVisibleDays","altKey","ctrlKey","metaKey","shiftKey","searchOptions","nextDate","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","getEventDay","getCalendarGridCell","onMouseOverOrOut","eventDay","relatedTarget","contains","monthAndYear","prevMonthInBounds","nextMonthInBounds","navigateMonth","addMonths","onSelectHeader","onClose","moveFocus","indexOf","targetIndex","getCalendarGridTargetIndex","Home","End","isDefaultPrevented","gridSlot","slot","always","defaultProps","Math","abs","elementType","onKeyDown","mergeCallbacks","PageUp","PageDown","currentTarget","closest","setCalendarNavigationDate","nativeEvent","addYears","Enter","Space","isCalendarGridNavigationKey","onClick","onFocus","onMouseOver","onMouseOut","onMouseUp","previousMonthSlot","resolveCalendarNavigationButton","previousMonthLabel","useMergedRefs","nextMonthSlot","nextMonthLabel","headingSlot","dayPickerHeaderLabel","aria-live","aria-atomic","onCalendarEnterKeyDown","closeButtonSlot","optional","closeLabel","components","getIntrinsicElementProps"],"mappings":"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"}