{"mappings":"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","sources":["packages/react-stately/src/calendar/useCalendarState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {alignCenter, alignEnd, alignStart, constrainStart, constrainValue, isInvalid, previousAvailableDate} from './utils';\nimport {\n  Calendar,\n  CalendarDate,\n  CalendarIdentifier,\n  DateDuration,\n  DateFormatter,\n  endOfMonth,\n  endOfWeek,\n  getDayOfWeek,\n  GregorianCalendar,\n  isEqualCalendar,\n  isSameDay,\n  startOfMonth,\n  startOfWeek,\n  toCalendar,\n  toCalendarDate,\n  today\n} from '@internationalized/date';\nimport {CalendarPropsBase, CalendarState, DateValue, MappedDateValue} from './types';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useMemo, useState} from 'react';\nimport {ValidationState, ValueBase} from '@react-types/shared';\n\nexport interface CalendarProps<T extends DateValue> extends CalendarPropsBase, ValueBase<T | null, MappedDateValue<T>> {}\n\nexport interface CalendarStateOptions<T extends DateValue = DateValue> extends CalendarProps<T> {\n  /** The locale to display and edit the value according to. */\n  locale: string,\n  /**\n   * A function that creates a [Calendar](../internationalized/date/Calendar.html)\n   * object for a given calendar identifier. Such a function may be imported from the\n   * `@internationalized/date` package, or manually implemented to include support for\n   * only certain calendars.\n   */\n  createCalendar: (name: CalendarIdentifier) => Calendar,\n  /**\n   * The amount of days that will be displayed at once. This affects how pagination works.\n   * @default {months: 1}\n   */\n  visibleDuration?: DateDuration,\n  /**\n   * Determines the alignment of the visible months on initial render based on the current selection or current date if there is no selection.\n   * @default 'center'\n   */\n  selectionAlignment?: 'start' | 'center' | 'end'\n}\n/**\n * Provides state management for a calendar component.\n * A calendar displays one or more date grids and allows users to select a single date.\n */\nexport function useCalendarState<T extends DateValue = DateValue>(props: CalendarStateOptions<T>): CalendarState {\n  let defaultFormatter = useMemo(() => new DateFormatter(props.locale), [props.locale]);\n  let resolvedOptions = useMemo(() => defaultFormatter.resolvedOptions(), [defaultFormatter]);\n  let {\n    locale,\n    createCalendar,\n    visibleDuration = {months: 1},\n    minValue,\n    maxValue,\n    selectionAlignment,\n    isDateUnavailable,\n    pageBehavior = 'visible',\n    firstDayOfWeek\n  } = props;\n  let calendar = useMemo(() => createCalendar(resolvedOptions.calendar as CalendarIdentifier), [createCalendar, resolvedOptions.calendar]);\n\n  let [value, setControlledValue] = useControlledState<DateValue | null, MappedDateValue<T>>(props.value!, props.defaultValue ?? null!, props.onChange);\n  let calendarDateValue = useMemo(() => value ? toCalendar(toCalendarDate(value), calendar) : null, [value, calendar]);\n  let timeZone = useMemo(() => value && 'timeZone' in value ? value.timeZone : resolvedOptions.timeZone, [value, resolvedOptions.timeZone]);\n  let focusedCalendarDate = useMemo(() => (\n    props.focusedValue\n      ? constrainValue(toCalendar(toCalendarDate(props.focusedValue), calendar), minValue, maxValue)\n      : undefined\n  ), [props.focusedValue, calendar, minValue, maxValue]);\n  let defaultFocusedCalendarDate = useMemo(() => (\n    constrainValue(\n      props.defaultFocusedValue\n        ? toCalendar(toCalendarDate(props.defaultFocusedValue), calendar)\n        : calendarDateValue || toCalendar(today(timeZone), calendar),\n      minValue,\n      maxValue\n    )\n  ), [props.defaultFocusedValue, calendarDateValue, timeZone, calendar, minValue, maxValue]);\n  let [focusedDate, setFocusedDate] = useControlledState(focusedCalendarDate, defaultFocusedCalendarDate, props.onFocusChange);\n  let [startDate, setStartDate] = useState(() => {\n    switch (selectionAlignment) {\n      case 'start':\n        return alignStart(focusedDate, visibleDuration, locale, minValue, maxValue);\n      case 'end':\n        return alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue);\n      case 'center':\n      default:\n        return alignCenter(focusedDate, visibleDuration, locale, minValue, maxValue);\n    }\n  });\n  let [isFocused, setFocused] = useState(props.autoFocus || false);\n\n  let endDate = useMemo(() => {\n    let duration = {...visibleDuration};\n    if (duration.days) {\n      duration.days--;\n    } else {\n      duration.days = -1;\n    }\n    return startDate.add(duration);\n  }, [startDate, visibleDuration]);\n\n  // Reset focused date and visible range when calendar changes.\n  let [lastCalendar, setLastCalendar] = useState(calendar);\n  if (!isEqualCalendar(calendar, lastCalendar)) {\n    let newFocusedDate = toCalendar(focusedDate, calendar);\n    setStartDate(alignCenter(newFocusedDate, visibleDuration, locale, minValue, maxValue));\n    setFocusedDate(newFocusedDate);\n    setLastCalendar(calendar);\n  }\n\n  if (isInvalid(focusedDate, minValue, maxValue)) {\n    // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n    setFocusedDate(constrainValue(focusedDate, minValue, maxValue));\n  } else if (focusedDate.compare(startDate) < 0) {\n    setStartDate(alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue));\n  } else if (focusedDate.compare(endDate) > 0) {\n    setStartDate(alignStart(focusedDate, visibleDuration, locale, minValue, maxValue));\n  }\n\n  // Sets focus to a specific cell date\n  function focusCell(date: CalendarDate) {\n    date = constrainValue(date, minValue, maxValue);\n    setFocusedDate(date);\n  }\n\n  function setValue(newValue: CalendarDate | null) {\n    if (!props.isDisabled && !props.isReadOnly) {\n      let localValue = newValue;\n      if (localValue === null) {\n        setControlledValue(null);\n        return;\n      }\n      localValue = constrainValue(localValue, minValue, maxValue);\n      localValue = previousAvailableDate(localValue, startDate, isDateUnavailable);\n      if (!localValue) {\n        return;\n      }\n\n      // The display calendar should not have any effect on the emitted value.\n      // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n      localValue = toCalendar(localValue, value?.calendar || new GregorianCalendar());\n\n      // Preserve time if the input value had one.\n      if (value && 'hour' in value) {\n        setControlledValue(value.set(localValue));\n      } else {\n        setControlledValue(localValue);\n      }\n    }\n  }\n\n  let isUnavailable = useMemo(() => {\n    if (!calendarDateValue) {\n      return false;\n    }\n\n    if (isDateUnavailable && isDateUnavailable(calendarDateValue)) {\n      return true;\n    }\n\n    return isInvalid(calendarDateValue, minValue, maxValue);\n  }, [calendarDateValue, isDateUnavailable, minValue, maxValue]);\n  let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isUnavailable;\n  let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n  let pageDuration = useMemo(() => {\n    if (pageBehavior === 'visible') {\n      return visibleDuration;\n    }\n\n    return unitDuration(visibleDuration);\n  }, [pageBehavior, visibleDuration]);\n\n  return {\n    isDisabled: props.isDisabled ?? false,\n    isReadOnly: props.isReadOnly ?? false,\n    value: calendarDateValue,\n    setValue,\n    visibleRange: {\n      start: startDate,\n      end: endDate\n    },\n    minValue,\n    maxValue,\n    focusedDate,\n    timeZone,\n    validationState,\n    isValueInvalid,\n    setFocusedDate(date) {\n      focusCell(date);\n    },\n    focusNextDay() {\n      focusCell(focusedDate.add({days: 1}));\n    },\n    focusPreviousDay() {\n      focusCell(focusedDate.subtract({days: 1}));\n    },\n    focusNextRow() {\n      if (visibleDuration.days) {\n        this.focusNextPage();\n      } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n        focusCell(focusedDate.add({weeks: 1}));\n      }\n    },\n    focusPreviousRow() {\n      if (visibleDuration.days) {\n        this.focusPreviousPage();\n      } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n        focusCell(focusedDate.subtract({weeks: 1}));\n      }\n    },\n    focusNextPage() {\n      let start = startDate.add(pageDuration);\n      setFocusedDate(constrainValue(focusedDate.add(pageDuration), minValue, maxValue));\n      setStartDate(\n        alignStart(\n          constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n          pageDuration,\n          locale\n        )\n      );\n    },\n    focusPreviousPage() {\n      let start = startDate.subtract(pageDuration);\n      setFocusedDate(constrainValue(focusedDate.subtract(pageDuration), minValue, maxValue));\n      setStartDate(\n        alignStart(\n          constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n          pageDuration,\n          locale\n        )\n      );\n    },\n    focusSectionStart() {\n      if (visibleDuration.days) {\n        focusCell(startDate);\n      } else if (visibleDuration.weeks) {\n        focusCell(startOfWeek(focusedDate, locale));\n      } else if (visibleDuration.months || visibleDuration.years) {\n        focusCell(startOfMonth(focusedDate));\n      }\n    },\n    focusSectionEnd() {\n      if (visibleDuration.days) {\n        focusCell(endDate);\n      } else if (visibleDuration.weeks) {\n        focusCell(endOfWeek(focusedDate, locale));\n      } else if (visibleDuration.months || visibleDuration.years) {\n        focusCell(endOfMonth(focusedDate));\n      }\n    },\n    focusNextSection(larger) {\n      if (!larger && !visibleDuration.days) {\n        focusCell(focusedDate.add(unitDuration(visibleDuration)));\n        return;\n      }\n\n      if (visibleDuration.days) {\n        this.focusNextPage();\n      } else if (visibleDuration.weeks) {\n        focusCell(focusedDate.add({months: 1}));\n      } else if (visibleDuration.months || visibleDuration.years) {\n        focusCell(focusedDate.add({years: 1}));\n      }\n    },\n    focusPreviousSection(larger) {\n      if (!larger && !visibleDuration.days) {\n        focusCell(focusedDate.subtract(unitDuration(visibleDuration)));\n        return;\n      }\n\n      if (visibleDuration.days) {\n        this.focusPreviousPage();\n      } else if (visibleDuration.weeks) {\n        focusCell(focusedDate.subtract({months: 1}));\n      } else if (visibleDuration.months || visibleDuration.years) {\n        focusCell(focusedDate.subtract({years: 1}));\n      }\n    },\n    selectFocusedDate() {\n      if (!(isDateUnavailable && isDateUnavailable(focusedDate))) {\n        setValue(focusedDate);\n      }\n    },\n    selectDate(date) {\n      setValue(date);\n    },\n    isFocused,\n    setFocused,\n    isInvalid(date) {\n      return isInvalid(date, minValue, maxValue);\n    },\n    isSelected(date) {\n      return calendarDateValue != null && isSameDay(date, calendarDateValue) && !this.isCellDisabled(date) && !this.isCellUnavailable(date);\n    },\n    isCellFocused(date) {\n      return isFocused && focusedDate && isSameDay(date, focusedDate);\n    },\n    isCellDisabled(date) {\n      return props.isDisabled || date.compare(startDate) < 0 || date.compare(endDate) > 0 || this.isInvalid(date);\n    },\n    isCellUnavailable(date) {\n      return props.isDateUnavailable ? props.isDateUnavailable(date) : false;\n    },\n    isPreviousVisibleRangeInvalid() {\n      let prev = startDate.subtract({days: 1});\n      return isSameDay(prev, startDate) || this.isInvalid(prev);\n    },\n    isNextVisibleRangeInvalid() {\n      // Adding may return the same date if we reached the end of time\n      // according to the calendar system (e.g. 9999-12-31).\n      let next = endDate.add({days: 1});\n      return isSameDay(next, endDate) || this.isInvalid(next);\n    },\n    getDatesInWeek(weekIndex, from = startDate) {\n      let date = from.add({weeks: weekIndex});\n      let dates: (CalendarDate | null)[] = [];\n\n      date = startOfWeek(date, locale, firstDayOfWeek);\n\n      // startOfWeek will clamp dates within the calendar system's valid range, which may\n      // start in the middle of a week. In this case, add null placeholders.\n      let dayOfWeek = getDayOfWeek(date, locale, firstDayOfWeek);\n      for (let i = 0; i < dayOfWeek; i++) {\n        dates.push(null);\n      }\n\n      while (dates.length < 7) {\n        dates.push(date);\n        let nextDate = date.add({days: 1});\n        if (isSameDay(date, nextDate)) {\n          // If the next day is the same, we have hit the end of the calendar system.\n          break;\n        }\n        date = nextDate;\n      }\n\n      // Add null placeholders if at the end of the calendar system.\n      while (dates.length < 7) {\n        dates.push(null);\n      }\n\n      return dates;\n    }\n  };\n}\n\nfunction unitDuration(duration: DateDuration) {\n  let unit = {...duration};\n  for (let key in duration) {\n    unit[key] = 1;\n  }\n  return unit;\n}\n"],"names":[],"version":3,"file":"useCalendarState.mjs.map"}