{
  "version": 3,
  "sources": ["../../../src/calendar/date-range-calendar/index.tsx"],
  "sourcesContent": ["/**\n * External dependencies\n */\nimport { differenceInCalendarDays } from 'date-fns';\nimport { DayPicker, rangeContainsModifiers } from 'react-day-picker';\nimport { enUS } from 'react-day-picker/locale';\n/**\n * WordPress dependencies\n */\nimport { useMemo, useState, useCallback } from '@wordpress/element';\n/**\n * Internal dependencies\n */\nimport { COMMON_PROPS, MODIFIER_CLASSNAMES } from '../utils/constants';\nimport { clampNumberOfMonths } from '../utils/misc';\nimport { useControlledValue } from '../../utils/hooks';\nimport { useLocalizationProps } from '../utils/use-localization-props';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function usePreviewRange({\n  selected,\n  hoveredDate,\n  excludeDisabled,\n  min,\n  max,\n  disabled\n}) {\n  return useMemo(() => {\n    if (!hoveredDate || !selected?.from) {\n      return;\n    }\n    let previewHighlight;\n    let potentialNewRange;\n\n    // Hovering on a date before the start of the selected range\n    if (hoveredDate < selected.from) {\n      previewHighlight = {\n        from: hoveredDate,\n        to: selected.from\n      };\n      potentialNewRange = {\n        from: hoveredDate,\n        to: selected.to ?? selected.from\n      };\n    } else if (selected.to && hoveredDate > selected.from && hoveredDate < selected.to) {\n      // Hovering on a date between the start and end of the selected range\n      previewHighlight = {\n        from: selected.from,\n        to: hoveredDate\n      };\n      potentialNewRange = {\n        from: selected.from,\n        to: hoveredDate\n      };\n    } else if (hoveredDate > selected.from) {\n      // Hovering on a date after the end of the selected range (either\n      // because it's greater than selected.to, or because it's not defined)\n      previewHighlight = {\n        from: selected.to ?? selected.from,\n        to: hoveredDate\n      };\n      potentialNewRange = {\n        from: selected.from,\n        to: hoveredDate\n      };\n    }\n    if (min !== undefined && min > 0 && potentialNewRange && differenceInCalendarDays(potentialNewRange.to, potentialNewRange.from) < min) {\n      previewHighlight = {\n        from: hoveredDate,\n        to: hoveredDate\n      };\n    }\n    if (max !== undefined && max > 0 && potentialNewRange && differenceInCalendarDays(potentialNewRange.to, potentialNewRange.from) > max) {\n      previewHighlight = {\n        from: hoveredDate,\n        to: hoveredDate\n      };\n    }\n    if (excludeDisabled && disabled && potentialNewRange && rangeContainsModifiers(potentialNewRange, disabled)) {\n      previewHighlight = {\n        from: hoveredDate,\n        to: hoveredDate\n      };\n    }\n    return previewHighlight;\n  }, [selected, hoveredDate, excludeDisabled, min, max, disabled]);\n}\n\n/**\n * `DateRangeCalendar` is a React component that provides a customizable calendar\n * interface for **date range** selection.\n *\n * The component is built with accessibility in mind and follows ARIA best\n * practices for calendar widgets. It provides keyboard navigation, screen reader\n * support, and customizable labels for internationalization.\n */\nexport const DateRangeCalendar = ({\n  defaultSelected,\n  selected: selectedProp,\n  onSelect,\n  numberOfMonths = 1,\n  excludeDisabled,\n  min,\n  max,\n  disabled,\n  locale = enUS,\n  timeZone,\n  ...props\n}) => {\n  const localizationProps = useLocalizationProps({\n    locale,\n    timeZone,\n    mode: 'range'\n  });\n  const onChange = useCallback((selected, triggerDate, modifiers, e) => {\n    // Convert internal `null` to `undefined` for the public event handler.\n    onSelect?.(selected ?? undefined, triggerDate, modifiers, e);\n  }, [onSelect]);\n  const [selected, setSelected] = useControlledValue({\n    defaultValue: defaultSelected,\n    value: selectedProp,\n    onChange\n  });\n  const [hoveredDate, setHoveredDate] = useState(undefined);\n\n  // Compute the preview range for hover effect\n  const previewRange = usePreviewRange({\n    selected,\n    hoveredDate,\n    excludeDisabled,\n    min,\n    max,\n    disabled\n  });\n  const modifiers = useMemo(() => {\n    return {\n      preview: previewRange,\n      preview_start: previewRange?.from,\n      preview_end: previewRange?.to\n    };\n  }, [previewRange]);\n  return /*#__PURE__*/_jsx(DayPicker, {\n    ...COMMON_PROPS,\n    ...localizationProps,\n    ...props,\n    mode: \"range\",\n    numberOfMonths: clampNumberOfMonths(numberOfMonths),\n    disabled: disabled,\n    excludeDisabled: excludeDisabled,\n    min: min,\n    max: max,\n    selected: selected ?? undefined,\n    onSelect: setSelected,\n    onDayMouseEnter: date => setHoveredDate(date),\n    onDayMouseLeave: () => setHoveredDate(undefined),\n    modifiers: modifiers,\n    modifiersClassNames: MODIFIER_CLASSNAMES\n  });\n};"],
  "mappings": "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",
  "names": ["selected", "modifiers"]
}
