{"version":3,"file":"Calendar.cjs","names":["clampLevel","useUncontrolledDates","toDateString","Box","MonthLevelGroup","YearLevelGroup","DecadeLevelGroup"],"sources":["../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useEffect, useImperativeHandle, useRef } from 'react';\nimport {\n  Box,\n  BoxProps,\n  ElementProps,\n  Factory,\n  factory,\n  StylesApiProps,\n  useProps,\n  useResolvedStylesApi,\n} from '@mantine/core';\nimport { useMergedRef, useUncontrolled } from '@mantine/hooks';\nimport { useUncontrolledDates } from '../../hooks';\nimport { CalendarLevel, DateStringValue } from '../../types';\nimport { toDateString } from '../../utils';\nimport { DecadeLevelSettings } from '../DecadeLevel';\nimport { DecadeLevelGroup, DecadeLevelGroupStylesNames } from '../DecadeLevelGroup';\nimport { MonthLevelSettings } from '../MonthLevel';\nimport { MonthLevelGroup, MonthLevelGroupStylesNames } from '../MonthLevelGroup';\nimport { YearLevelSettings } from '../YearLevel';\nimport { YearLevelGroup, YearLevelGroupStylesNames } from '../YearLevelGroup';\nimport { clampLevel } from './clamp-level/clamp-level';\n\nexport type CalendarStylesNames =\n  | MonthLevelGroupStylesNames\n  | YearLevelGroupStylesNames\n  | DecadeLevelGroupStylesNames;\n\nexport interface CalendarAriaLabels {\n  monthLevelControl?: string;\n  yearLevelControl?: string;\n\n  nextMonth?: string;\n  previousMonth?: string;\n\n  nextYear?: string;\n  previousYear?: string;\n\n  nextDecade?: string;\n  previousDecade?: string;\n}\n\ntype OmittedSettings =\n  | 'onNext'\n  | 'onPrevious'\n  | 'onLevelClick'\n  | 'withNext'\n  | 'withPrevious'\n  | 'nextDisabled'\n  | 'previousDisabled'\n  | 'hasNextLevel';\n\nexport interface CalendarSettings\n  extends\n    Omit<DecadeLevelSettings, OmittedSettings>,\n    Omit<YearLevelSettings, OmittedSettings>,\n    Omit<MonthLevelSettings, OmittedSettings> {\n  /** Initial displayed level in uncontrolled mode */\n  defaultLevel?: CalendarLevel;\n\n  /** Current displayed level displayed in controlled mode */\n  level?: CalendarLevel;\n\n  /** Called when level changes */\n  onLevelChange?: (level: CalendarLevel) => void;\n\n  /** Called when user selects year */\n  onYearSelect?: (date: DateStringValue) => void;\n\n  /** Called when user selects month */\n  onMonthSelect?: (date: DateStringValue) => void;\n\n  /** Called when mouse enters year control */\n  onYearMouseEnter?: (event: React.MouseEvent<HTMLButtonElement>, date: DateStringValue) => void;\n\n  /** Called when mouse enters month control */\n  onMonthMouseEnter?: (event: React.MouseEvent<HTMLButtonElement>, date: DateStringValue) => void;\n}\n\nexport interface CalendarBaseProps {\n  __staticSelector?: string;\n\n  /** Prevents focus shift when buttons are clicked */\n  __preventFocus?: boolean;\n\n  /** Determines whether date should be updated when year control is clicked */\n  __updateDateOnYearSelect?: boolean;\n\n  /** Determines whether date should be updated when month control is clicked */\n  __updateDateOnMonthSelect?: boolean;\n\n  /** Assigns function to set date to the given ref */\n  __setDateRef?: React.RefObject<((date: DateStringValue) => void) | null>;\n\n  /** Assigns function to set level to the given ref */\n  __setLevelRef?: React.RefObject<((level: CalendarLevel) => void) | null>;\n\n  /** Initial displayed date in uncontrolled mode */\n  defaultDate?: DateStringValue | Date;\n\n  /** Displayed date in controlled mode */\n  date?: DateStringValue | Date;\n\n  /** Called when date changes */\n  onDateChange?: (date: DateStringValue) => void;\n\n  /** Number of columns displayed next to each other @default 1 */\n  numberOfColumns?: number;\n\n  /** Number of columns to scroll with next/prev buttons, same as `numberOfColumns` if not set explicitly */\n  columnsToScroll?: number;\n\n  /** `aria-label` attributes for controls on different levels */\n  ariaLabels?: CalendarAriaLabels;\n\n  /** Next button `aria-label` */\n  nextLabel?: string;\n\n  /** Previous button `aria-label` */\n  previousLabel?: string;\n\n  /** Determines whether the calendar should take the full width of its container @default false */\n  fullWidth?: boolean;\n\n  /** Called when the next decade button is clicked */\n  onNextDecade?: (date: DateStringValue) => void;\n\n  /** Called when the previous decade button is clicked */\n  onPreviousDecade?: (date: DateStringValue) => void;\n\n  /** Called when the next year button is clicked */\n  onNextYear?: (date: DateStringValue) => void;\n\n  /** Called when the previous year button is clicked */\n  onPreviousYear?: (date: DateStringValue) => void;\n\n  /** Called when the next month button is clicked */\n  onNextMonth?: (date: DateStringValue) => void;\n\n  /** Called when the previous month button is clicked */\n  onPreviousMonth?: (date: DateStringValue) => void;\n}\n\nexport interface CalendarProps\n  extends\n    BoxProps,\n    CalendarSettings,\n    CalendarBaseProps,\n    StylesApiProps<CalendarFactory>,\n    ElementProps<'div'> {\n  /** Max level that user can go up to (decade, year, month) @default 'decade' */\n  maxLevel?: CalendarLevel;\n\n  /** Min level that user can go down to (decade, year, month) @default 'month' */\n  minLevel?: CalendarLevel;\n\n  /** Determines whether days should be static, static days can be used to display month if it is not expected that user will interact with the component in any way  */\n  static?: boolean;\n\n  /** Enable enhanced keyboard navigation (Ctrl/Cmd + Arrow keys for year navigation, Ctrl/Cmd + Shift + Arrow keys for decade navigation, Y key to open year view) */\n  enableKeyboardNavigation?: boolean;\n}\n\nexport type CalendarFactory = Factory<{\n  props: CalendarProps;\n  ref: HTMLDivElement;\n  stylesNames: CalendarStylesNames;\n}>;\n\nconst defaultProps = {\n  maxLevel: 'decade',\n  minLevel: 'month',\n  __updateDateOnYearSelect: true,\n  __updateDateOnMonthSelect: true,\n  enableKeyboardNavigation: true,\n} satisfies Partial<CalendarProps>;\n\nexport const Calendar = factory<CalendarFactory>((_props) => {\n  const props = useProps('Calendar', defaultProps, _props);\n  const {\n    // CalendarLevel props\n    vars,\n    maxLevel,\n    minLevel,\n    defaultLevel,\n    level,\n    onLevelChange,\n    date,\n    defaultDate,\n    onDateChange,\n    numberOfColumns,\n    columnsToScroll,\n    ariaLabels,\n    nextLabel,\n    previousLabel,\n    onYearSelect,\n    onMonthSelect,\n    onYearMouseEnter,\n    onMonthMouseEnter,\n    headerControlsOrder,\n    __updateDateOnYearSelect,\n    __updateDateOnMonthSelect,\n    __setDateRef,\n    __setLevelRef,\n\n    // MonthLevelGroup props\n    firstDayOfWeek,\n    weekdayFormat,\n    weekendDays,\n    getDayProps,\n    excludeDate,\n    renderDay,\n    hideOutsideDates,\n    hideWeekdays,\n    getDayAriaLabel,\n    monthLabelFormat,\n    nextIcon,\n    previousIcon,\n    __onDayClick,\n    __onDayMouseEnter,\n    withCellSpacing,\n    highlightToday,\n    withWeekNumbers,\n\n    // YearLevelGroup props\n    monthsListFormat,\n    getMonthControlProps,\n    yearLabelFormat,\n\n    // DecadeLevelGroup props\n    yearsListFormat,\n    getYearControlProps,\n    decadeLabelFormat,\n\n    // Other props\n    classNames,\n    styles,\n    unstyled,\n    minDate,\n    maxDate,\n    locale,\n    __staticSelector,\n    size,\n    __preventFocus,\n    __stopPropagation,\n    onNextDecade,\n    onPreviousDecade,\n    onNextYear,\n    onPreviousYear,\n    onNextMonth,\n    onPreviousMonth,\n    static: isStatic,\n    enableKeyboardNavigation,\n    fullWidth,\n    attributes,\n    ref,\n    ...others\n  } = props;\n\n  const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<CalendarFactory>({\n    classNames,\n    styles,\n    props,\n  });\n\n  const [_level, setLevel] = useUncontrolled({\n    value: level ? clampLevel(level, minLevel, maxLevel) : undefined,\n    defaultValue: defaultLevel ? clampLevel(defaultLevel, minLevel, maxLevel) : undefined,\n    finalValue: clampLevel(undefined, minLevel, maxLevel),\n    onChange: onLevelChange,\n  });\n\n  const [_date, setDate] = useUncontrolledDates({\n    type: 'default',\n    value: toDateString(date),\n    defaultValue: toDateString(defaultDate),\n    onChange: onDateChange as any,\n  });\n\n  useImperativeHandle(__setDateRef, () => (date: DateStringValue) => {\n    setDate(date);\n  });\n\n  useImperativeHandle(__setLevelRef, () => (level: CalendarLevel) => {\n    setLevel(level);\n  });\n\n  const stylesApiProps = {\n    __staticSelector: __staticSelector || 'Calendar',\n    styles: resolvedStyles,\n    classNames: resolvedClassNames,\n    unstyled,\n    size,\n    attributes,\n  };\n\n  const _columnsToScroll = columnsToScroll || numberOfColumns || 1;\n\n  const fallbackDateRef = useRef<DateStringValue | null>(null);\n  if (fallbackDateRef.current === null) {\n    const now = new Date();\n    fallbackDateRef.current = (\n      minDate && dayjs(now).isAfter(minDate) ? minDate : dayjs(now).format('YYYY-MM-DD')\n    ) as DateStringValue;\n  }\n  const currentDate = _date || fallbackDateRef.current;\n\n  const handleNextMonth = () => {\n    const nextDate = dayjs(currentDate).add(_columnsToScroll, 'month').format('YYYY-MM-DD');\n    onNextMonth?.(nextDate);\n    setDate(nextDate);\n  };\n\n  const handlePreviousMonth = () => {\n    const nextDate = dayjs(currentDate).subtract(_columnsToScroll, 'month').format('YYYY-MM-DD');\n    onPreviousMonth?.(nextDate);\n    setDate(nextDate);\n  };\n\n  const handleNextYear = () => {\n    const nextDate = dayjs(currentDate).add(_columnsToScroll, 'year').format('YYYY-MM-DD');\n    onNextYear?.(nextDate);\n    setDate(nextDate);\n  };\n\n  const handlePreviousYear = () => {\n    const nextDate = dayjs(currentDate).subtract(_columnsToScroll, 'year').format('YYYY-MM-DD');\n    onPreviousYear?.(nextDate);\n    setDate(nextDate);\n  };\n\n  const handleNextDecade = () => {\n    const nextDate = dayjs(currentDate)\n      .add(10 * _columnsToScroll, 'year')\n      .format('YYYY-MM-DD');\n    onNextDecade?.(nextDate);\n    setDate(nextDate);\n  };\n\n  const handlePreviousDecade = () => {\n    const nextDate = dayjs(currentDate)\n      .subtract(10 * _columnsToScroll, 'year')\n      .format('YYYY-MM-DD');\n    onPreviousDecade?.(nextDate);\n    setDate(nextDate);\n  };\n\n  const calendarRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (!enableKeyboardNavigation || isStatic) {\n      return;\n    }\n\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (!calendarRef.current?.contains(document.activeElement)) {\n        return;\n      }\n\n      const isCtrlOrCmd = event.ctrlKey || event.metaKey;\n      const isShift = event.shiftKey;\n\n      switch (event.key) {\n        case 'ArrowUp':\n          if (isCtrlOrCmd && isShift) {\n            event.preventDefault();\n            handlePreviousDecade();\n          } else if (isCtrlOrCmd) {\n            event.preventDefault();\n            handlePreviousYear();\n          }\n          break;\n\n        case 'ArrowDown':\n          if (isCtrlOrCmd && isShift) {\n            event.preventDefault();\n            handleNextDecade();\n          } else if (isCtrlOrCmd) {\n            event.preventDefault();\n            handleNextYear();\n          }\n          break;\n\n        case 'y':\n        case 'Y':\n          if (_level === 'month') {\n            event.preventDefault();\n            setLevel('year');\n          }\n          break;\n      }\n    };\n\n    document.addEventListener('keydown', handleKeyDown);\n\n    return () => {\n      document.removeEventListener('keydown', handleKeyDown);\n    };\n  }, [\n    enableKeyboardNavigation,\n    isStatic,\n    _level,\n    handleNextYear,\n    handlePreviousYear,\n    handleNextDecade,\n    handlePreviousDecade,\n  ]);\n\n  return (\n    <Box\n      ref={useMergedRef(calendarRef, ref)}\n      size={size}\n      data-calendar\n      data-full-width={fullWidth || undefined}\n      {...others}\n    >\n      {_level === 'month' && (\n        <MonthLevelGroup\n          month={currentDate}\n          minDate={minDate}\n          maxDate={maxDate}\n          firstDayOfWeek={firstDayOfWeek}\n          weekdayFormat={weekdayFormat}\n          weekendDays={weekendDays}\n          getDayProps={getDayProps}\n          excludeDate={excludeDate}\n          renderDay={renderDay}\n          hideOutsideDates={hideOutsideDates}\n          hideWeekdays={hideWeekdays}\n          getDayAriaLabel={getDayAriaLabel}\n          onNext={handleNextMonth}\n          onPrevious={handlePreviousMonth}\n          hasNextLevel={maxLevel !== 'month'}\n          onLevelClick={() => setLevel('year')}\n          numberOfColumns={numberOfColumns}\n          locale={locale}\n          levelControlAriaLabel={ariaLabels?.monthLevelControl}\n          nextLabel={ariaLabels?.nextMonth ?? nextLabel}\n          nextIcon={nextIcon}\n          previousLabel={ariaLabels?.previousMonth ?? previousLabel}\n          previousIcon={previousIcon}\n          monthLabelFormat={monthLabelFormat}\n          __onDayClick={__onDayClick}\n          __onDayMouseEnter={__onDayMouseEnter}\n          __preventFocus={__preventFocus}\n          __stopPropagation={__stopPropagation}\n          static={isStatic}\n          withCellSpacing={withCellSpacing}\n          highlightToday={highlightToday}\n          withWeekNumbers={withWeekNumbers}\n          headerControlsOrder={headerControlsOrder}\n          fullWidth={fullWidth}\n          {...stylesApiProps}\n        />\n      )}\n\n      {_level === 'year' && (\n        <YearLevelGroup\n          year={currentDate}\n          numberOfColumns={numberOfColumns}\n          minDate={minDate}\n          maxDate={maxDate}\n          monthsListFormat={monthsListFormat}\n          getMonthControlProps={getMonthControlProps}\n          locale={locale}\n          onNext={handleNextYear}\n          onPrevious={handlePreviousYear}\n          hasNextLevel={maxLevel !== 'month' && maxLevel !== 'year'}\n          onLevelClick={() => setLevel('decade')}\n          levelControlAriaLabel={ariaLabels?.yearLevelControl}\n          nextLabel={ariaLabels?.nextYear ?? nextLabel}\n          nextIcon={nextIcon}\n          previousLabel={ariaLabels?.previousYear ?? previousLabel}\n          previousIcon={previousIcon}\n          yearLabelFormat={yearLabelFormat}\n          __onControlMouseEnter={onMonthMouseEnter}\n          __onControlClick={(_event, payload) => {\n            __updateDateOnMonthSelect && setDate(payload);\n            setLevel(clampLevel('month', minLevel, maxLevel));\n            onMonthSelect?.(payload);\n          }}\n          __preventFocus={__preventFocus}\n          __stopPropagation={__stopPropagation}\n          withCellSpacing={withCellSpacing}\n          headerControlsOrder={headerControlsOrder}\n          fullWidth={fullWidth}\n          {...stylesApiProps}\n        />\n      )}\n\n      {_level === 'decade' && (\n        <DecadeLevelGroup\n          decade={currentDate}\n          minDate={minDate}\n          maxDate={maxDate}\n          yearsListFormat={yearsListFormat}\n          getYearControlProps={getYearControlProps}\n          locale={locale}\n          onNext={handleNextDecade}\n          onPrevious={handlePreviousDecade}\n          numberOfColumns={numberOfColumns}\n          nextLabel={ariaLabels?.nextDecade ?? nextLabel}\n          nextIcon={nextIcon}\n          previousLabel={ariaLabels?.previousDecade ?? previousLabel}\n          previousIcon={previousIcon}\n          decadeLabelFormat={decadeLabelFormat}\n          __onControlMouseEnter={onYearMouseEnter}\n          __onControlClick={(_event, payload) => {\n            __updateDateOnYearSelect && setDate(payload);\n            setLevel(clampLevel('year', minLevel, maxLevel));\n            onYearSelect?.(payload);\n          }}\n          __preventFocus={__preventFocus}\n          __stopPropagation={__stopPropagation}\n          withCellSpacing={withCellSpacing}\n          headerControlsOrder={headerControlsOrder}\n          fullWidth={fullWidth}\n          {...stylesApiProps}\n        />\n      )}\n    </Box>\n  );\n});\n\nCalendar.classes = {\n  ...DecadeLevelGroup.classes,\n  ...YearLevelGroup.classes,\n  ...MonthLevelGroup.classes,\n};\nCalendar.displayName = '@mantine/dates/Calendar';\n\nexport namespace Calendar {\n  export type Props = CalendarProps;\n  export type StylesNames = CalendarStylesNames;\n  export type AriaLabels = CalendarAriaLabels;\n  export type Settings = CalendarSettings;\n  export type BaseProps = CalendarBaseProps;\n  export type Factory = CalendarFactory;\n}\n"],"mappings":"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"}