{"mappings":"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","sources":["packages/react-aria/src/datepicker/useDateRangePicker.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 {AriaButtonProps} from '../button/useButton';\n\nimport {AriaDatePickerProps} from './useDatePicker';\nimport {AriaDialogProps} from '../dialog/useDialog';\nimport {AriaLabelingProps, DOMAttributes, DOMProps, GroupDOMAttributes, InputDOMProps, KeyboardEvent, RefObject, ValidationResult} from '@react-types/shared';\nimport {createFocusManager} from '../focus/FocusScope';\nimport {DateRange, DateRangePickerProps, DateRangePickerState, DateValue} from 'react-stately/useDateRangePickerState';\nimport {DEFAULT_VALIDATION_RESULT, mergeValidation, privateValidationStateProp} from 'react-stately/private/form/useFormValidationState';\nimport {filterDOMProps} from '../utils/filterDOMProps';\nimport {focusManagerSymbol, roleSymbol} from './useDateField';\nimport intlMessages from '../../intl/datepicker/*.json';\nimport {mergeProps} from '../utils/mergeProps';\nimport {nodeContains} from '../utils/shadowdom/DOMFunctions';\nimport {RangeCalendarProps} from 'react-stately/useRangeCalendarState';\nimport {useDatePickerGroup} from './useDatePickerGroup';\n// @ts-ignore\nimport {useDescription} from '../utils/useDescription';\nimport {useField} from '../label/useField';\nimport {useFocusWithin} from '../interactions/useFocusWithin';\nimport {useId} from '../utils/useId';\nimport {useLocale} from '../i18n/I18nProvider';\nimport {useLocalizedStringFormatter} from '../i18n/useLocalizedStringFormatter';\nimport {useMemo, useRef} from 'react';\n\nexport interface AriaDateRangePickerProps<T extends DateValue> extends DateRangePickerProps<T>, AriaLabelingProps, Omit<InputDOMProps, 'name'>, DOMProps {}\n\nexport interface DateRangePickerAria extends ValidationResult {\n  /** Props for the date range picker's visible label element, if any. */\n  labelProps: DOMAttributes,\n  /** Props for the grouping element containing the date fields and button. */\n  groupProps: GroupDOMAttributes,\n  /** Props for the start date field. */\n  startFieldProps: AriaDatePickerProps<DateValue>,\n  /** Props for the end date field. */\n  endFieldProps: AriaDatePickerProps<DateValue>,\n  /** Props for the popover trigger button. */\n  buttonProps: AriaButtonProps,\n  /** Props for the description element, if any. */\n  descriptionProps: DOMAttributes,\n  /** Props for the error message element, if any. */\n  errorMessageProps: DOMAttributes,\n  /** Props for the popover dialog. */\n  dialogProps: AriaDialogProps,\n  /** Props for the range calendar within the popover dialog. */\n  calendarProps: RangeCalendarProps<DateValue>\n}\n\n/**\n * Provides the behavior and accessibility implementation for a date picker component.\n * A date range picker combines two DateFields and a RangeCalendar popover to allow\n * users to enter or select a date and time range.\n */\nexport function useDateRangePicker<T extends DateValue>(props: AriaDateRangePickerProps<T>, state: DateRangePickerState, ref: RefObject<Element | null>): DateRangePickerAria {\n  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-aria/datepicker');\n  let {isInvalid, validationErrors, validationDetails} = state.displayValidation;\n  let {labelProps, fieldProps, descriptionProps, errorMessageProps} = useField({\n    ...props,\n    labelElementType: 'span',\n    isInvalid,\n    errorMessage: props.errorMessage || validationErrors\n  });\n\n  let labelledBy = fieldProps['aria-labelledby'] || fieldProps.id;\n\n  let {locale} = useLocale();\n  let range = state.formatValue(locale, {month: 'long'});\n  let description = range ? stringFormatter.format('selectedRangeDescription', {startDate: range.start, endDate: range.end}) : '';\n  let descProps = useDescription(description);\n\n  let startFieldProps = {\n    'aria-label': stringFormatter.format('startDate'),\n    'aria-labelledby': labelledBy\n  };\n\n  let endFieldProps = {\n    'aria-label': stringFormatter.format('endDate'),\n    'aria-labelledby': labelledBy\n  };\n\n  let buttonId = useId();\n  let dialogId = useId();\n\n  let groupProps = useDatePickerGroup(state, ref);\n\n  let ariaDescribedBy = [descProps['aria-describedby'], fieldProps['aria-describedby']].filter(Boolean).join(' ') || undefined;\n  let focusManager = useMemo(() => createFocusManager(ref, {\n    // Exclude the button from the focus manager.\n    accept: element => element.id !== buttonId\n  }), [ref, buttonId]);\n\n  let commonFieldProps = {\n    [focusManagerSymbol]: focusManager,\n    [roleSymbol]: 'presentation',\n    'aria-describedby': ariaDescribedBy,\n    placeholderValue: props.placeholderValue,\n    hideTimeZone: props.hideTimeZone,\n    hourCycle: props.hourCycle,\n    granularity: props.granularity,\n    shouldForceLeadingZeros: props.shouldForceLeadingZeros,\n    isDisabled: props.isDisabled,\n    isReadOnly: props.isReadOnly,\n    isRequired: props.isRequired,\n    validationBehavior: props.validationBehavior\n  };\n\n  let domProps = filterDOMProps(props);\n\n  let isFocused = useRef(false);\n  let {focusWithinProps} = useFocusWithin({\n    ...props,\n    isDisabled: state.isOpen,\n    onBlurWithin: e => {\n      // Ignore when focus moves into the popover.\n      let dialog = document.getElementById(dialogId);\n      if (!nodeContains(dialog, e.relatedTarget)) {\n        isFocused.current = false;\n        props.onBlur?.(e);\n        props.onFocusChange?.(false);\n      }\n    },\n    onFocusWithin: e => {\n      if (!isFocused.current) {\n        isFocused.current = true;\n        props.onFocus?.(e);\n        props.onFocusChange?.(true);\n      }\n    }\n  });\n\n  let startFieldValidation = useRef(DEFAULT_VALIDATION_RESULT);\n  let endFieldValidation = useRef(DEFAULT_VALIDATION_RESULT);\n\n  return {\n    groupProps: mergeProps(domProps, groupProps, fieldProps, descProps, focusWithinProps, {\n      role: 'group' as const,\n      'aria-disabled': props.isDisabled || null,\n      'aria-describedby': ariaDescribedBy,\n      onKeyDown(e: KeyboardEvent) {\n        if (state.isOpen) {\n          return;\n        }\n\n        if (props.onKeyDown) {\n          props.onKeyDown(e);\n        }\n      },\n      onKeyUp(e: KeyboardEvent) {\n        if (state.isOpen) {\n          return;\n        }\n\n        if (props.onKeyUp) {\n          props.onKeyUp(e);\n        }\n      }\n    }),\n    labelProps: {\n      ...labelProps,\n      onClick: () => {\n        focusManager.focusFirst();\n      }\n    },\n    buttonProps: {\n      ...descProps,\n      id: buttonId,\n      'aria-haspopup': 'dialog',\n      'aria-label': stringFormatter.format('calendar'),\n      'aria-labelledby': `${buttonId} ${labelledBy}`,\n      'aria-describedby': ariaDescribedBy,\n      'aria-expanded': state.isOpen,\n      isDisabled: props.isDisabled || props.isReadOnly,\n      onPress: () => state.setOpen(true)\n    },\n    dialogProps: {\n      id: dialogId,\n      'aria-labelledby': `${buttonId} ${labelledBy}`\n    },\n    startFieldProps: {\n      ...startFieldProps,\n      ...commonFieldProps,\n      value: state.value?.start ?? null,\n      defaultValue: state.defaultValue?.start,\n      onChange: start => state.setDateTime('start', start),\n      autoFocus: props.autoFocus,\n      name: props.startName,\n      form: props.form,\n      [privateValidationStateProp]: {\n        realtimeValidation: state.realtimeValidation,\n        displayValidation: state.displayValidation,\n        updateValidation(e) {\n          startFieldValidation.current = e;\n          state.updateValidation(mergeValidation(e, endFieldValidation.current));\n        },\n        resetValidation: state.resetValidation,\n        commitValidation: state.commitValidation\n      }\n    },\n    endFieldProps: {\n      ...endFieldProps,\n      ...commonFieldProps,\n      value: state.value?.end ?? null,\n      defaultValue: state.defaultValue?.end,\n      onChange: end => state.setDateTime('end', end),\n      name: props.endName,\n      form: props.form,\n      [privateValidationStateProp]: {\n        realtimeValidation: state.realtimeValidation,\n        displayValidation: state.displayValidation,\n        updateValidation(e) {\n          endFieldValidation.current = e;\n          state.updateValidation(mergeValidation(startFieldValidation.current, e));\n        },\n        resetValidation: state.resetValidation,\n        commitValidation: state.commitValidation\n      }\n    },\n    descriptionProps,\n    errorMessageProps,\n    calendarProps: {\n      autoFocus: true,\n      value: state.dateRange?.start && state.dateRange.end ? state.dateRange as DateRange : null,\n      onChange: state.setDateRange,\n      minValue: props.minValue,\n      maxValue: props.maxValue,\n      isDisabled: props.isDisabled,\n      isReadOnly: props.isReadOnly,\n      isDateUnavailable: props.isDateUnavailable,\n      allowsNonContiguousRanges: props.allowsNonContiguousRanges,\n      defaultFocusedValue: state.dateRange ? undefined : props.placeholderValue,\n      isInvalid: state.isInvalid,\n      errorMessage: typeof props.errorMessage === 'function' ? props.errorMessage(state.displayValidation) : (props.errorMessage || state.displayValidation.validationErrors.join(' ')),\n      firstDayOfWeek: props.firstDayOfWeek,\n      pageBehavior: props.pageBehavior\n    },\n    isInvalid,\n    validationErrors,\n    validationDetails\n  };\n}\n"],"names":[],"version":3,"file":"useDateRangePicker.cjs.map"}