@react-stately/calendar 3.5.1 → 3.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/@react-stately/calendar/src/useRangeCalendarState.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, constrainValue, isInvalid, previousAvailableDate} from './utils';\nimport {Calendar, CalendarDate, DateDuration, GregorianCalendar, isEqualDay, maxDate, minDate, toCalendar, toCalendarDate} from '@internationalized/date';\nimport {CalendarState, RangeCalendarState} from './types';\nimport {DateRange, DateValue, RangeCalendarProps} from '@react-types/calendar';\nimport {RangeValue, ValidationState} from '@react-types/shared';\nimport {useCalendarState} from './useCalendarState';\nimport {useControlledState} from '@react-stately/utils';\nimport {useMemo, useRef, useState} from 'react';\n\nexport interface RangeCalendarStateOptions<T extends DateValue = DateValue> extends RangeCalendarProps<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: string) => 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\n/**\n * Provides state management for a range calendar component.\n * A range calendar displays one or more date grids and allows users to select a contiguous range of dates.\n */\nexport function useRangeCalendarState<T extends DateValue = DateValue>(props: RangeCalendarStateOptions<T>): RangeCalendarState {\n let {value: valueProp, defaultValue, onChange, createCalendar, locale, visibleDuration = {months: 1}, minValue, maxValue, ...calendarProps} = props;\n let [value, setValue] = useControlledState<DateRange>(\n valueProp,\n defaultValue || null,\n onChange\n );\n\n let [anchorDate, setAnchorDateState] = useState(null);\n let alignment: 'center' | 'start' = 'center';\n if (value && value.start && value.end) {\n let start = alignCenter(toCalendarDate(value.start), visibleDuration, locale, minValue, maxValue);\n let end = start.add(visibleDuration).subtract({days: 1});\n\n if (value.end.compare(end) > 0) {\n alignment = 'start';\n }\n }\n\n // Available range must be stored in a ref so we have access to the updated version immediately in `isInvalid`.\n let availableRangeRef = useRef<RangeValue<DateValue>>(null);\n let [availableRange, setAvailableRange] = useState<RangeValue<DateValue>>(null);\n let min = useMemo(() => maxDate(minValue, availableRange?.start), [minValue, availableRange]);\n let max = useMemo(() => minDate(maxValue, availableRange?.end), [maxValue, availableRange]);\n\n let calendar = useCalendarState({\n ...calendarProps,\n value: value && value.start,\n createCalendar,\n locale,\n visibleDuration,\n minValue: min,\n maxValue: max,\n selectionAlignment: alignment\n });\n\n let updateAvailableRange = (date) => {\n if (date && props.isDateUnavailable && !props.allowsNonContiguousRanges) {\n availableRangeRef.current = {\n start: nextUnavailableDate(date, calendar, -1),\n end: nextUnavailableDate(date, calendar, 1)\n };\n setAvailableRange(availableRangeRef.current);\n } else {\n availableRangeRef.current = null;\n setAvailableRange(null);\n }\n };\n\n // If the visible range changes, we need to update the available range.\n let [lastVisibleRange, setLastVisibleRange] = useState(calendar.visibleRange);\n if (!isEqualDay(calendar.visibleRange.start, lastVisibleRange.start) || !isEqualDay(calendar.visibleRange.end, lastVisibleRange.end)) {\n updateAvailableRange(anchorDate);\n setLastVisibleRange(calendar.visibleRange);\n }\n\n let setAnchorDate = (date: CalendarDate) => {\n if (date) {\n setAnchorDateState(date);\n updateAvailableRange(date);\n } else {\n setAnchorDateState(null);\n updateAvailableRange(null);\n }\n };\n\n let highlightedRange = anchorDate ? makeRange(anchorDate, calendar.focusedDate) : value && makeRange(value.start, value.end);\n let selectDate = (date: CalendarDate) => {\n if (props.isReadOnly) {\n return;\n }\n\n date = constrainValue(date, min, max);\n date = previousAvailableDate(date, calendar.visibleRange.start, props.isDateUnavailable);\n if (!date) {\n return;\n }\n\n if (!anchorDate) {\n setAnchorDate(date);\n } else {\n let range = makeRange(anchorDate, date);\n setValue({\n start: convertValue(range.start, value?.start),\n end: convertValue(range.end, value?.end)\n });\n setAnchorDate(null);\n }\n };\n\n let [isDragging, setDragging] = useState(false);\n\n let {isDateUnavailable} = props;\n let isInvalidSelection = useMemo(() => {\n if (!value || anchorDate) {\n return false;\n }\n\n if (isDateUnavailable && (isDateUnavailable(value.start) || isDateUnavailable(value.end))) {\n return true;\n }\n\n return isInvalid(value.start, minValue, maxValue) || isInvalid(value.end, minValue, maxValue);\n }, [isDateUnavailable, value, anchorDate, minValue, maxValue]);\n\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isInvalidSelection;\n let validationState: ValidationState = isValueInvalid ? 'invalid' : null;\n\n return {\n ...calendar,\n value,\n setValue,\n anchorDate,\n setAnchorDate,\n highlightedRange,\n validationState,\n isValueInvalid,\n selectFocusedDate() {\n selectDate(calendar.focusedDate);\n },\n selectDate,\n highlightDate(date) {\n if (anchorDate) {\n calendar.setFocusedDate(date);\n }\n },\n isSelected(date) {\n return highlightedRange && date.compare(highlightedRange.start) >= 0 && date.compare(highlightedRange.end) <= 0 && !calendar.isCellDisabled(date) && !calendar.isCellUnavailable(date);\n },\n isInvalid(date) {\n return calendar.isInvalid(date) || isInvalid(date, availableRangeRef.current?.start, availableRangeRef.current?.end);\n },\n isDragging,\n setDragging\n };\n}\n\nfunction makeRange(start: DateValue, end: DateValue): RangeValue<CalendarDate> {\n if (!start || !end) {\n return null;\n }\n\n if (end.compare(start) < 0) {\n [start, end] = [end, start];\n }\n\n return {start: toCalendarDate(start), end: toCalendarDate(end)};\n}\n\nfunction convertValue(newValue: CalendarDate, oldValue: DateValue) {\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 newValue = toCalendar(newValue, oldValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (oldValue && 'hour' in oldValue) {\n return oldValue.set(newValue);\n }\n\n return newValue;\n}\n\nfunction nextUnavailableDate(anchorDate: CalendarDate, state: CalendarState, dir: number) {\n let nextDate = anchorDate.add({days: dir});\n while (\n (dir < 0 ? nextDate.compare(state.visibleRange.start) >= 0 : nextDate.compare(state.visibleRange.end) <= 0) &&\n !state.isCellUnavailable(nextDate)\n ) {\n nextDate = nextDate.add({days: dir});\n }\n\n if (state.isCellUnavailable(nextDate)) {\n return nextDate.add({days: -dir});\n }\n\n return null;\n}\n"],"names":[],"version":3,"file":"useRangeCalendarState.main.js.map"}
1
+ {"mappings":"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","sources":["packages/@react-stately/calendar/src/useRangeCalendarState.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, constrainValue, isInvalid, previousAvailableDate} from './utils';\nimport {Calendar, CalendarDate, DateDuration, GregorianCalendar, isEqualDay, maxDate, minDate, toCalendar, toCalendarDate} from '@internationalized/date';\nimport {CalendarState, RangeCalendarState} from './types';\nimport {DateValue, RangeCalendarProps} from '@react-types/calendar';\nimport {RangeValue, ValidationState} from '@react-types/shared';\nimport {useCalendarState} from './useCalendarState';\nimport {useControlledState} from '@react-stately/utils';\nimport {useMemo, useRef, useState} from 'react';\n\nexport interface RangeCalendarStateOptions<T extends DateValue = DateValue> extends RangeCalendarProps<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: string) => 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\n/**\n * Provides state management for a range calendar component.\n * A range calendar displays one or more date grids and allows users to select a contiguous range of dates.\n */\nexport function useRangeCalendarState<T extends DateValue = DateValue>(props: RangeCalendarStateOptions<T>): RangeCalendarState {\n let {value: valueProp, defaultValue, onChange, createCalendar, locale, visibleDuration = {months: 1}, minValue, maxValue, ...calendarProps} = props;\n let [value, setValue] = useControlledState<RangeValue<T> | null, RangeValue<T>>(\n valueProp!,\n defaultValue || null!,\n onChange\n );\n\n let [anchorDate, setAnchorDateState] = useState<CalendarDate | null>(null);\n let alignment: 'center' | 'start' = 'center';\n if (value && value.start && value.end) {\n let start = alignCenter(toCalendarDate(value.start), visibleDuration, locale, minValue, maxValue);\n let end = start.add(visibleDuration).subtract({days: 1});\n\n if (value.end.compare(end) > 0) {\n alignment = 'start';\n }\n }\n\n // Available range must be stored in a ref so we have access to the updated version immediately in `isInvalid`.\n let availableRangeRef = useRef<Partial<RangeValue<DateValue>> | null>(null);\n let [availableRange, setAvailableRange] = useState<Partial<RangeValue<DateValue>>|null>(null);\n let min = useMemo(() => maxDate(minValue, availableRange?.start), [minValue, availableRange]);\n let max = useMemo(() => minDate(maxValue, availableRange?.end), [maxValue, availableRange]);\n\n let calendar = useCalendarState({\n ...calendarProps,\n value: value && value.start,\n createCalendar,\n locale,\n visibleDuration,\n minValue: min,\n maxValue: max,\n selectionAlignment: alignment\n });\n\n let updateAvailableRange = (date) => {\n if (date && props.isDateUnavailable && !props.allowsNonContiguousRanges) {\n const nextAvailableStartDate = nextUnavailableDate(date, calendar, -1);\n const nextAvailableEndDate = nextUnavailableDate(date, calendar, 1);\n availableRangeRef.current = {\n start: nextAvailableStartDate,\n end: nextAvailableEndDate\n };\n setAvailableRange(availableRangeRef.current);\n } else {\n availableRangeRef.current = null;\n setAvailableRange(null);\n }\n };\n\n // If the visible range changes, we need to update the available range.\n let [lastVisibleRange, setLastVisibleRange] = useState(calendar.visibleRange);\n if (!isEqualDay(calendar.visibleRange.start, lastVisibleRange.start) || !isEqualDay(calendar.visibleRange.end, lastVisibleRange.end)) {\n updateAvailableRange(anchorDate);\n setLastVisibleRange(calendar.visibleRange);\n }\n\n let setAnchorDate = (date: CalendarDate | null) => {\n if (date) {\n setAnchorDateState(date);\n updateAvailableRange(date);\n } else {\n setAnchorDateState(null);\n updateAvailableRange(null);\n }\n };\n\n let highlightedRange = anchorDate ? makeRange(anchorDate, calendar.focusedDate) : value && makeRange(value.start, value.end);\n let selectDate = (date: CalendarDate) => {\n if (props.isReadOnly) {\n return;\n }\n\n const constrainedDate = constrainValue(date, min, max);\n const previousAvailableConstrainedDate = previousAvailableDate(constrainedDate, calendar.visibleRange.start, props.isDateUnavailable);\n if (!previousAvailableConstrainedDate) {\n return;\n }\n\n if (!anchorDate) {\n setAnchorDate(previousAvailableConstrainedDate);\n } else {\n let range = makeRange(anchorDate, previousAvailableConstrainedDate);\n if (range) {\n setValue({\n start: convertValue(range.start, value?.start) as T,\n end: convertValue(range.end, value?.end) as T\n });\n }\n setAnchorDate(null);\n }\n };\n\n let [isDragging, setDragging] = useState(false);\n\n let {isDateUnavailable} = props;\n let isInvalidSelection = useMemo(() => {\n if (!value || anchorDate) {\n return false;\n }\n\n if (isDateUnavailable && (isDateUnavailable(value.start) || isDateUnavailable(value.end))) {\n return true;\n }\n\n return isInvalid(value.start, minValue, maxValue) || isInvalid(value.end, minValue, maxValue);\n }, [isDateUnavailable, value, anchorDate, minValue, maxValue]);\n\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isInvalidSelection;\n let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n return {\n ...calendar,\n value,\n setValue,\n anchorDate,\n setAnchorDate,\n highlightedRange,\n validationState,\n isValueInvalid,\n selectFocusedDate() {\n selectDate(calendar.focusedDate);\n },\n selectDate,\n highlightDate(date) {\n if (anchorDate) {\n calendar.setFocusedDate(date);\n }\n },\n isSelected(date) {\n return Boolean(highlightedRange && date.compare(highlightedRange.start) >= 0 && date.compare(highlightedRange.end) <= 0 && !calendar.isCellDisabled(date) && !calendar.isCellUnavailable(date));\n },\n isInvalid(date) {\n return calendar.isInvalid(date) || isInvalid(date, availableRangeRef.current?.start, availableRangeRef.current?.end);\n },\n isDragging,\n setDragging\n };\n}\n\nfunction makeRange(start: DateValue, end: DateValue): RangeValue<CalendarDate> | null {\n if (!start || !end) {\n return null;\n }\n\n if (end.compare(start) < 0) {\n [start, end] = [end, start];\n }\n\n return {start: toCalendarDate(start), end: toCalendarDate(end)};\n}\n\nfunction convertValue(newValue: CalendarDate, oldValue?: DateValue): DateValue {\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 newValue = toCalendar(newValue, oldValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (oldValue && 'hour' in oldValue) {\n return oldValue.set(newValue);\n }\n\n return newValue;\n}\n\nfunction nextUnavailableDate(anchorDate: CalendarDate, state: CalendarState, dir: number): CalendarDate | undefined {\n let nextDate = anchorDate.add({days: dir});\n while (\n (dir < 0 ? nextDate.compare(state.visibleRange.start) >= 0 : nextDate.compare(state.visibleRange.end) <= 0) &&\n !state.isCellUnavailable(nextDate)\n ) {\n nextDate = nextDate.add({days: dir});\n }\n\n if (state.isCellUnavailable(nextDate)) {\n return nextDate.add({days: -dir});\n }\n\n}\n"],"names":[],"version":3,"file":"useRangeCalendarState.main.js.map"}
@@ -56,9 +56,11 @@ function $9a36b6ba2fb1a7c5$export$9a987164d97ecc90(props) {
56
56
  });
57
57
  let updateAvailableRange = (date)=>{
58
58
  if (date && props.isDateUnavailable && !props.allowsNonContiguousRanges) {
59
+ const nextAvailableStartDate = $9a36b6ba2fb1a7c5$var$nextUnavailableDate(date, calendar, -1);
60
+ const nextAvailableEndDate = $9a36b6ba2fb1a7c5$var$nextUnavailableDate(date, calendar, 1);
59
61
  availableRangeRef.current = {
60
- start: $9a36b6ba2fb1a7c5$var$nextUnavailableDate(date, calendar, -1),
61
- end: $9a36b6ba2fb1a7c5$var$nextUnavailableDate(date, calendar, 1)
62
+ start: nextAvailableStartDate,
63
+ end: nextAvailableEndDate
62
64
  };
63
65
  setAvailableRange(availableRangeRef.current);
64
66
  } else {
@@ -84,13 +86,13 @@ function $9a36b6ba2fb1a7c5$export$9a987164d97ecc90(props) {
84
86
  let highlightedRange = anchorDate ? $9a36b6ba2fb1a7c5$var$makeRange(anchorDate, calendar.focusedDate) : value && $9a36b6ba2fb1a7c5$var$makeRange(value.start, value.end);
85
87
  let selectDate = (date)=>{
86
88
  if (props.isReadOnly) return;
87
- date = (0, $f62d864046160412$export$4f5203c0d889109e)(date, min, max);
88
- date = (0, $f62d864046160412$export$a1d3911297b952d7)(date, calendar.visibleRange.start, props.isDateUnavailable);
89
- if (!date) return;
90
- if (!anchorDate) setAnchorDate(date);
89
+ const constrainedDate = (0, $f62d864046160412$export$4f5203c0d889109e)(date, min, max);
90
+ const previousAvailableConstrainedDate = (0, $f62d864046160412$export$a1d3911297b952d7)(constrainedDate, calendar.visibleRange.start, props.isDateUnavailable);
91
+ if (!previousAvailableConstrainedDate) return;
92
+ if (!anchorDate) setAnchorDate(previousAvailableConstrainedDate);
91
93
  else {
92
- let range = $9a36b6ba2fb1a7c5$var$makeRange(anchorDate, date);
93
- setValue({
94
+ let range = $9a36b6ba2fb1a7c5$var$makeRange(anchorDate, previousAvailableConstrainedDate);
95
+ if (range) setValue({
94
96
  start: $9a36b6ba2fb1a7c5$var$convertValue(range.start, value === null || value === void 0 ? void 0 : value.start),
95
97
  end: $9a36b6ba2fb1a7c5$var$convertValue(range.end, value === null || value === void 0 ? void 0 : value.end)
96
98
  });
@@ -129,7 +131,7 @@ function $9a36b6ba2fb1a7c5$export$9a987164d97ecc90(props) {
129
131
  if (anchorDate) calendar.setFocusedDate(date);
130
132
  },
131
133
  isSelected (date) {
132
- return highlightedRange && date.compare(highlightedRange.start) >= 0 && date.compare(highlightedRange.end) <= 0 && !calendar.isCellDisabled(date) && !calendar.isCellUnavailable(date);
134
+ return Boolean(highlightedRange && date.compare(highlightedRange.start) >= 0 && date.compare(highlightedRange.end) <= 0 && !calendar.isCellDisabled(date) && !calendar.isCellUnavailable(date));
133
135
  },
134
136
  isInvalid (date) {
135
137
  var _availableRangeRef_current, _availableRangeRef_current1;
@@ -168,7 +170,6 @@ function $9a36b6ba2fb1a7c5$var$nextUnavailableDate(anchorDate, state, dir) {
168
170
  if (state.isCellUnavailable(nextDate)) return nextDate.add({
169
171
  days: -dir
170
172
  });
171
- return null;
172
173
  }
173
174
 
174
175
 
@@ -56,9 +56,11 @@ function $9a36b6ba2fb1a7c5$export$9a987164d97ecc90(props) {
56
56
  });
57
57
  let updateAvailableRange = (date)=>{
58
58
  if (date && props.isDateUnavailable && !props.allowsNonContiguousRanges) {
59
+ const nextAvailableStartDate = $9a36b6ba2fb1a7c5$var$nextUnavailableDate(date, calendar, -1);
60
+ const nextAvailableEndDate = $9a36b6ba2fb1a7c5$var$nextUnavailableDate(date, calendar, 1);
59
61
  availableRangeRef.current = {
60
- start: $9a36b6ba2fb1a7c5$var$nextUnavailableDate(date, calendar, -1),
61
- end: $9a36b6ba2fb1a7c5$var$nextUnavailableDate(date, calendar, 1)
62
+ start: nextAvailableStartDate,
63
+ end: nextAvailableEndDate
62
64
  };
63
65
  setAvailableRange(availableRangeRef.current);
64
66
  } else {
@@ -84,13 +86,13 @@ function $9a36b6ba2fb1a7c5$export$9a987164d97ecc90(props) {
84
86
  let highlightedRange = anchorDate ? $9a36b6ba2fb1a7c5$var$makeRange(anchorDate, calendar.focusedDate) : value && $9a36b6ba2fb1a7c5$var$makeRange(value.start, value.end);
85
87
  let selectDate = (date)=>{
86
88
  if (props.isReadOnly) return;
87
- date = (0, $f62d864046160412$export$4f5203c0d889109e)(date, min, max);
88
- date = (0, $f62d864046160412$export$a1d3911297b952d7)(date, calendar.visibleRange.start, props.isDateUnavailable);
89
- if (!date) return;
90
- if (!anchorDate) setAnchorDate(date);
89
+ const constrainedDate = (0, $f62d864046160412$export$4f5203c0d889109e)(date, min, max);
90
+ const previousAvailableConstrainedDate = (0, $f62d864046160412$export$a1d3911297b952d7)(constrainedDate, calendar.visibleRange.start, props.isDateUnavailable);
91
+ if (!previousAvailableConstrainedDate) return;
92
+ if (!anchorDate) setAnchorDate(previousAvailableConstrainedDate);
91
93
  else {
92
- let range = $9a36b6ba2fb1a7c5$var$makeRange(anchorDate, date);
93
- setValue({
94
+ let range = $9a36b6ba2fb1a7c5$var$makeRange(anchorDate, previousAvailableConstrainedDate);
95
+ if (range) setValue({
94
96
  start: $9a36b6ba2fb1a7c5$var$convertValue(range.start, value === null || value === void 0 ? void 0 : value.start),
95
97
  end: $9a36b6ba2fb1a7c5$var$convertValue(range.end, value === null || value === void 0 ? void 0 : value.end)
96
98
  });
@@ -129,7 +131,7 @@ function $9a36b6ba2fb1a7c5$export$9a987164d97ecc90(props) {
129
131
  if (anchorDate) calendar.setFocusedDate(date);
130
132
  },
131
133
  isSelected (date) {
132
- return highlightedRange && date.compare(highlightedRange.start) >= 0 && date.compare(highlightedRange.end) <= 0 && !calendar.isCellDisabled(date) && !calendar.isCellUnavailable(date);
134
+ return Boolean(highlightedRange && date.compare(highlightedRange.start) >= 0 && date.compare(highlightedRange.end) <= 0 && !calendar.isCellDisabled(date) && !calendar.isCellUnavailable(date));
133
135
  },
134
136
  isInvalid (date) {
135
137
  var _availableRangeRef_current, _availableRangeRef_current1;
@@ -168,7 +170,6 @@ function $9a36b6ba2fb1a7c5$var$nextUnavailableDate(anchorDate, state, dir) {
168
170
  if (state.isCellUnavailable(nextDate)) return nextDate.add({
169
171
  days: -dir
170
172
  });
171
- return null;
172
173
  }
173
174
 
174
175
 
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/@react-stately/calendar/src/useRangeCalendarState.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, constrainValue, isInvalid, previousAvailableDate} from './utils';\nimport {Calendar, CalendarDate, DateDuration, GregorianCalendar, isEqualDay, maxDate, minDate, toCalendar, toCalendarDate} from '@internationalized/date';\nimport {CalendarState, RangeCalendarState} from './types';\nimport {DateRange, DateValue, RangeCalendarProps} from '@react-types/calendar';\nimport {RangeValue, ValidationState} from '@react-types/shared';\nimport {useCalendarState} from './useCalendarState';\nimport {useControlledState} from '@react-stately/utils';\nimport {useMemo, useRef, useState} from 'react';\n\nexport interface RangeCalendarStateOptions<T extends DateValue = DateValue> extends RangeCalendarProps<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: string) => 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\n/**\n * Provides state management for a range calendar component.\n * A range calendar displays one or more date grids and allows users to select a contiguous range of dates.\n */\nexport function useRangeCalendarState<T extends DateValue = DateValue>(props: RangeCalendarStateOptions<T>): RangeCalendarState {\n let {value: valueProp, defaultValue, onChange, createCalendar, locale, visibleDuration = {months: 1}, minValue, maxValue, ...calendarProps} = props;\n let [value, setValue] = useControlledState<DateRange>(\n valueProp,\n defaultValue || null,\n onChange\n );\n\n let [anchorDate, setAnchorDateState] = useState(null);\n let alignment: 'center' | 'start' = 'center';\n if (value && value.start && value.end) {\n let start = alignCenter(toCalendarDate(value.start), visibleDuration, locale, minValue, maxValue);\n let end = start.add(visibleDuration).subtract({days: 1});\n\n if (value.end.compare(end) > 0) {\n alignment = 'start';\n }\n }\n\n // Available range must be stored in a ref so we have access to the updated version immediately in `isInvalid`.\n let availableRangeRef = useRef<RangeValue<DateValue>>(null);\n let [availableRange, setAvailableRange] = useState<RangeValue<DateValue>>(null);\n let min = useMemo(() => maxDate(minValue, availableRange?.start), [minValue, availableRange]);\n let max = useMemo(() => minDate(maxValue, availableRange?.end), [maxValue, availableRange]);\n\n let calendar = useCalendarState({\n ...calendarProps,\n value: value && value.start,\n createCalendar,\n locale,\n visibleDuration,\n minValue: min,\n maxValue: max,\n selectionAlignment: alignment\n });\n\n let updateAvailableRange = (date) => {\n if (date && props.isDateUnavailable && !props.allowsNonContiguousRanges) {\n availableRangeRef.current = {\n start: nextUnavailableDate(date, calendar, -1),\n end: nextUnavailableDate(date, calendar, 1)\n };\n setAvailableRange(availableRangeRef.current);\n } else {\n availableRangeRef.current = null;\n setAvailableRange(null);\n }\n };\n\n // If the visible range changes, we need to update the available range.\n let [lastVisibleRange, setLastVisibleRange] = useState(calendar.visibleRange);\n if (!isEqualDay(calendar.visibleRange.start, lastVisibleRange.start) || !isEqualDay(calendar.visibleRange.end, lastVisibleRange.end)) {\n updateAvailableRange(anchorDate);\n setLastVisibleRange(calendar.visibleRange);\n }\n\n let setAnchorDate = (date: CalendarDate) => {\n if (date) {\n setAnchorDateState(date);\n updateAvailableRange(date);\n } else {\n setAnchorDateState(null);\n updateAvailableRange(null);\n }\n };\n\n let highlightedRange = anchorDate ? makeRange(anchorDate, calendar.focusedDate) : value && makeRange(value.start, value.end);\n let selectDate = (date: CalendarDate) => {\n if (props.isReadOnly) {\n return;\n }\n\n date = constrainValue(date, min, max);\n date = previousAvailableDate(date, calendar.visibleRange.start, props.isDateUnavailable);\n if (!date) {\n return;\n }\n\n if (!anchorDate) {\n setAnchorDate(date);\n } else {\n let range = makeRange(anchorDate, date);\n setValue({\n start: convertValue(range.start, value?.start),\n end: convertValue(range.end, value?.end)\n });\n setAnchorDate(null);\n }\n };\n\n let [isDragging, setDragging] = useState(false);\n\n let {isDateUnavailable} = props;\n let isInvalidSelection = useMemo(() => {\n if (!value || anchorDate) {\n return false;\n }\n\n if (isDateUnavailable && (isDateUnavailable(value.start) || isDateUnavailable(value.end))) {\n return true;\n }\n\n return isInvalid(value.start, minValue, maxValue) || isInvalid(value.end, minValue, maxValue);\n }, [isDateUnavailable, value, anchorDate, minValue, maxValue]);\n\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isInvalidSelection;\n let validationState: ValidationState = isValueInvalid ? 'invalid' : null;\n\n return {\n ...calendar,\n value,\n setValue,\n anchorDate,\n setAnchorDate,\n highlightedRange,\n validationState,\n isValueInvalid,\n selectFocusedDate() {\n selectDate(calendar.focusedDate);\n },\n selectDate,\n highlightDate(date) {\n if (anchorDate) {\n calendar.setFocusedDate(date);\n }\n },\n isSelected(date) {\n return highlightedRange && date.compare(highlightedRange.start) >= 0 && date.compare(highlightedRange.end) <= 0 && !calendar.isCellDisabled(date) && !calendar.isCellUnavailable(date);\n },\n isInvalid(date) {\n return calendar.isInvalid(date) || isInvalid(date, availableRangeRef.current?.start, availableRangeRef.current?.end);\n },\n isDragging,\n setDragging\n };\n}\n\nfunction makeRange(start: DateValue, end: DateValue): RangeValue<CalendarDate> {\n if (!start || !end) {\n return null;\n }\n\n if (end.compare(start) < 0) {\n [start, end] = [end, start];\n }\n\n return {start: toCalendarDate(start), end: toCalendarDate(end)};\n}\n\nfunction convertValue(newValue: CalendarDate, oldValue: DateValue) {\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 newValue = toCalendar(newValue, oldValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (oldValue && 'hour' in oldValue) {\n return oldValue.set(newValue);\n }\n\n return newValue;\n}\n\nfunction nextUnavailableDate(anchorDate: CalendarDate, state: CalendarState, dir: number) {\n let nextDate = anchorDate.add({days: dir});\n while (\n (dir < 0 ? nextDate.compare(state.visibleRange.start) >= 0 : nextDate.compare(state.visibleRange.end) <= 0) &&\n !state.isCellUnavailable(nextDate)\n ) {\n nextDate = nextDate.add({days: dir});\n }\n\n if (state.isCellUnavailable(nextDate)) {\n return nextDate.add({days: -dir});\n }\n\n return null;\n}\n"],"names":[],"version":3,"file":"useRangeCalendarState.module.js.map"}
1
+ {"mappings":"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","sources":["packages/@react-stately/calendar/src/useRangeCalendarState.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, constrainValue, isInvalid, previousAvailableDate} from './utils';\nimport {Calendar, CalendarDate, DateDuration, GregorianCalendar, isEqualDay, maxDate, minDate, toCalendar, toCalendarDate} from '@internationalized/date';\nimport {CalendarState, RangeCalendarState} from './types';\nimport {DateValue, RangeCalendarProps} from '@react-types/calendar';\nimport {RangeValue, ValidationState} from '@react-types/shared';\nimport {useCalendarState} from './useCalendarState';\nimport {useControlledState} from '@react-stately/utils';\nimport {useMemo, useRef, useState} from 'react';\n\nexport interface RangeCalendarStateOptions<T extends DateValue = DateValue> extends RangeCalendarProps<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: string) => 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\n/**\n * Provides state management for a range calendar component.\n * A range calendar displays one or more date grids and allows users to select a contiguous range of dates.\n */\nexport function useRangeCalendarState<T extends DateValue = DateValue>(props: RangeCalendarStateOptions<T>): RangeCalendarState {\n let {value: valueProp, defaultValue, onChange, createCalendar, locale, visibleDuration = {months: 1}, minValue, maxValue, ...calendarProps} = props;\n let [value, setValue] = useControlledState<RangeValue<T> | null, RangeValue<T>>(\n valueProp!,\n defaultValue || null!,\n onChange\n );\n\n let [anchorDate, setAnchorDateState] = useState<CalendarDate | null>(null);\n let alignment: 'center' | 'start' = 'center';\n if (value && value.start && value.end) {\n let start = alignCenter(toCalendarDate(value.start), visibleDuration, locale, minValue, maxValue);\n let end = start.add(visibleDuration).subtract({days: 1});\n\n if (value.end.compare(end) > 0) {\n alignment = 'start';\n }\n }\n\n // Available range must be stored in a ref so we have access to the updated version immediately in `isInvalid`.\n let availableRangeRef = useRef<Partial<RangeValue<DateValue>> | null>(null);\n let [availableRange, setAvailableRange] = useState<Partial<RangeValue<DateValue>>|null>(null);\n let min = useMemo(() => maxDate(minValue, availableRange?.start), [minValue, availableRange]);\n let max = useMemo(() => minDate(maxValue, availableRange?.end), [maxValue, availableRange]);\n\n let calendar = useCalendarState({\n ...calendarProps,\n value: value && value.start,\n createCalendar,\n locale,\n visibleDuration,\n minValue: min,\n maxValue: max,\n selectionAlignment: alignment\n });\n\n let updateAvailableRange = (date) => {\n if (date && props.isDateUnavailable && !props.allowsNonContiguousRanges) {\n const nextAvailableStartDate = nextUnavailableDate(date, calendar, -1);\n const nextAvailableEndDate = nextUnavailableDate(date, calendar, 1);\n availableRangeRef.current = {\n start: nextAvailableStartDate,\n end: nextAvailableEndDate\n };\n setAvailableRange(availableRangeRef.current);\n } else {\n availableRangeRef.current = null;\n setAvailableRange(null);\n }\n };\n\n // If the visible range changes, we need to update the available range.\n let [lastVisibleRange, setLastVisibleRange] = useState(calendar.visibleRange);\n if (!isEqualDay(calendar.visibleRange.start, lastVisibleRange.start) || !isEqualDay(calendar.visibleRange.end, lastVisibleRange.end)) {\n updateAvailableRange(anchorDate);\n setLastVisibleRange(calendar.visibleRange);\n }\n\n let setAnchorDate = (date: CalendarDate | null) => {\n if (date) {\n setAnchorDateState(date);\n updateAvailableRange(date);\n } else {\n setAnchorDateState(null);\n updateAvailableRange(null);\n }\n };\n\n let highlightedRange = anchorDate ? makeRange(anchorDate, calendar.focusedDate) : value && makeRange(value.start, value.end);\n let selectDate = (date: CalendarDate) => {\n if (props.isReadOnly) {\n return;\n }\n\n const constrainedDate = constrainValue(date, min, max);\n const previousAvailableConstrainedDate = previousAvailableDate(constrainedDate, calendar.visibleRange.start, props.isDateUnavailable);\n if (!previousAvailableConstrainedDate) {\n return;\n }\n\n if (!anchorDate) {\n setAnchorDate(previousAvailableConstrainedDate);\n } else {\n let range = makeRange(anchorDate, previousAvailableConstrainedDate);\n if (range) {\n setValue({\n start: convertValue(range.start, value?.start) as T,\n end: convertValue(range.end, value?.end) as T\n });\n }\n setAnchorDate(null);\n }\n };\n\n let [isDragging, setDragging] = useState(false);\n\n let {isDateUnavailable} = props;\n let isInvalidSelection = useMemo(() => {\n if (!value || anchorDate) {\n return false;\n }\n\n if (isDateUnavailable && (isDateUnavailable(value.start) || isDateUnavailable(value.end))) {\n return true;\n }\n\n return isInvalid(value.start, minValue, maxValue) || isInvalid(value.end, minValue, maxValue);\n }, [isDateUnavailable, value, anchorDate, minValue, maxValue]);\n\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isInvalidSelection;\n let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n return {\n ...calendar,\n value,\n setValue,\n anchorDate,\n setAnchorDate,\n highlightedRange,\n validationState,\n isValueInvalid,\n selectFocusedDate() {\n selectDate(calendar.focusedDate);\n },\n selectDate,\n highlightDate(date) {\n if (anchorDate) {\n calendar.setFocusedDate(date);\n }\n },\n isSelected(date) {\n return Boolean(highlightedRange && date.compare(highlightedRange.start) >= 0 && date.compare(highlightedRange.end) <= 0 && !calendar.isCellDisabled(date) && !calendar.isCellUnavailable(date));\n },\n isInvalid(date) {\n return calendar.isInvalid(date) || isInvalid(date, availableRangeRef.current?.start, availableRangeRef.current?.end);\n },\n isDragging,\n setDragging\n };\n}\n\nfunction makeRange(start: DateValue, end: DateValue): RangeValue<CalendarDate> | null {\n if (!start || !end) {\n return null;\n }\n\n if (end.compare(start) < 0) {\n [start, end] = [end, start];\n }\n\n return {start: toCalendarDate(start), end: toCalendarDate(end)};\n}\n\nfunction convertValue(newValue: CalendarDate, oldValue?: DateValue): DateValue {\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 newValue = toCalendar(newValue, oldValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (oldValue && 'hour' in oldValue) {\n return oldValue.set(newValue);\n }\n\n return newValue;\n}\n\nfunction nextUnavailableDate(anchorDate: CalendarDate, state: CalendarState, dir: number): CalendarDate | undefined {\n let nextDate = anchorDate.add({days: dir});\n while (\n (dir < 0 ? nextDate.compare(state.visibleRange.start) >= 0 : nextDate.compare(state.visibleRange.end) <= 0) &&\n !state.isCellUnavailable(nextDate)\n ) {\n nextDate = nextDate.add({days: dir});\n }\n\n if (state.isCellUnavailable(nextDate)) {\n return nextDate.add({days: -dir});\n }\n\n}\n"],"names":[],"version":3,"file":"useRangeCalendarState.module.js.map"}
@@ -48,21 +48,33 @@ function $4301262d71f567b9$export$530edbfc915b2b04(date, duration, locale, minVa
48
48
  ...duration
49
49
  };
50
50
  // subtract 1 from the smallest unit
51
- if (duration.days) d.days--;
52
- else if (duration.weeks) d.weeks--;
53
- else if (duration.months) d.months--;
54
- else if (duration.years) d.years--;
51
+ if (d.days) d.days--;
52
+ else if (d.weeks) d.weeks--;
53
+ else if (d.months) d.months--;
54
+ else if (d.years) d.years--;
55
55
  let aligned = $4301262d71f567b9$export$144a00ba6044eb9(date, duration, locale).subtract(d);
56
56
  return $4301262d71f567b9$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue);
57
57
  }
58
58
  function $4301262d71f567b9$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue) {
59
- if (minValue && date.compare(minValue) >= 0) aligned = (0, $i2P57$internationalizeddate.maxDate)(aligned, $4301262d71f567b9$export$144a00ba6044eb9((0, $i2P57$internationalizeddate.toCalendarDate)(minValue), duration, locale));
60
- if (maxValue && date.compare(maxValue) <= 0) aligned = (0, $i2P57$internationalizeddate.minDate)(aligned, $4301262d71f567b9$export$530edbfc915b2b04((0, $i2P57$internationalizeddate.toCalendarDate)(maxValue), duration, locale));
59
+ if (minValue && date.compare(minValue) >= 0) {
60
+ let newDate = (0, $i2P57$internationalizeddate.maxDate)(aligned, $4301262d71f567b9$export$144a00ba6044eb9((0, $i2P57$internationalizeddate.toCalendarDate)(minValue), duration, locale));
61
+ if (newDate) aligned = newDate;
62
+ }
63
+ if (maxValue && date.compare(maxValue) <= 0) {
64
+ let newDate = (0, $i2P57$internationalizeddate.minDate)(aligned, $4301262d71f567b9$export$530edbfc915b2b04((0, $i2P57$internationalizeddate.toCalendarDate)(maxValue), duration, locale));
65
+ if (newDate) aligned = newDate;
66
+ }
61
67
  return aligned;
62
68
  }
63
69
  function $4301262d71f567b9$export$4f5203c0d889109e(date, minValue, maxValue) {
64
- if (minValue) date = (0, $i2P57$internationalizeddate.maxDate)(date, (0, $i2P57$internationalizeddate.toCalendarDate)(minValue));
65
- if (maxValue) date = (0, $i2P57$internationalizeddate.minDate)(date, (0, $i2P57$internationalizeddate.toCalendarDate)(maxValue));
70
+ if (minValue) {
71
+ let newDate = (0, $i2P57$internationalizeddate.maxDate)(date, (0, $i2P57$internationalizeddate.toCalendarDate)(minValue));
72
+ if (newDate) date = newDate;
73
+ }
74
+ if (maxValue) {
75
+ let newDate = (0, $i2P57$internationalizeddate.minDate)(date, (0, $i2P57$internationalizeddate.toCalendarDate)(maxValue));
76
+ if (newDate) date = newDate;
77
+ }
66
78
  return date;
67
79
  }
68
80
  function $4301262d71f567b9$export$a1d3911297b952d7(date, minValue, isDateUnavailable) {
@@ -71,6 +83,7 @@ function $4301262d71f567b9$export$a1d3911297b952d7(date, minValue, isDateUnavail
71
83
  days: 1
72
84
  });
73
85
  if (date.compare(minValue) >= 0) return date;
86
+ return null;
74
87
  }
75
88
 
76
89
 
@@ -1 +1 @@
1
- {"mappings":";;;;;;;;;;;;;;AAAA;;;;;;;;;;CAUC;AAaM,SAAS,0CAAU,IAAe,EAAE,QAAmB,EAAE,QAAmB;IACjF,OAAO,AAAC,YAAY,QAAQ,KAAK,OAAO,CAAC,YAAY,KAClD,YAAY,QAAQ,KAAK,OAAO,CAAC,YAAY;AAClD;AAEO,SAAS,0CAAY,IAAkB,EAAE,QAAsB,EAAE,MAAc,EAAE,QAAoB,EAAE,QAAoB;IAChI,IAAI,eAA6B,CAAC;IAClC,IAAK,IAAI,OAAO,SAAU;QACxB,YAAY,CAAC,IAAI,GAAG,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG;QAC/C,IAAI,YAAY,CAAC,IAAI,GAAG,KAAK,QAAQ,CAAC,IAAI,GAAG,MAAM,GACjD,YAAY,CAAC,IAAI;IAErB;IAEA,IAAI,UAAU,yCAAW,MAAM,UAAU,QAAQ,QAAQ,CAAC;IAC1D,OAAO,0CAAe,MAAM,SAAS,UAAU,QAAQ,UAAU;AACnE;AAEO,SAAS,yCAAW,IAAkB,EAAE,QAAsB,EAAE,MAAc,EAAE,QAAoB,EAAE,QAAoB;IAC/H,yCAAyC;IACzC,IAAI,UAAU;IACd,IAAI,SAAS,KAAK,EAChB,UAAU,CAAA,GAAA,wCAAU,EAAE;SACjB,IAAI,SAAS,MAAM,EACxB,UAAU,CAAA,GAAA,yCAAW,EAAE;SAClB,IAAI,SAAS,KAAK,EACvB,UAAU,CAAA,GAAA,wCAAU,EAAE,MAAM;IAG9B,OAAO,0CAAe,MAAM,SAAS,UAAU,QAAQ,UAAU;AACnE;AAEO,SAAS,0CAAS,IAAkB,EAAE,QAAsB,EAAE,MAAc,EAAE,QAAoB,EAAE,QAAoB;IAC7H,IAAI,IAAI;QAAC,GAAG,QAAQ;IAAA;IACpB,oCAAoC;IACpC,IAAI,SAAS,IAAI,EACf,EAAE,IAAI;SACD,IAAI,SAAS,KAAK,EACvB,EAAE,KAAK;SACF,IAAI,SAAS,MAAM,EACxB,EAAE,MAAM;SACH,IAAI,SAAS,KAAK,EACvB,EAAE,KAAK;IAGT,IAAI,UAAU,yCAAW,MAAM,UAAU,QAAQ,QAAQ,CAAC;IAC1D,OAAO,0CAAe,MAAM,SAAS,UAAU,QAAQ,UAAU;AACnE;AAEO,SAAS,0CACd,IAAkB,EAClB,OAAqB,EACrB,QAAsB,EACtB,MAAc,EACd,QAAmB,EACnB,QAAmB;IACnB,IAAI,YAAY,KAAK,OAAO,CAAC,aAAa,GACxC,UAAU,CAAA,GAAA,oCAAM,EACd,SACA,yCAAW,CAAA,GAAA,2CAAa,EAAE,WAAW,UAAU;IAInD,IAAI,YAAY,KAAK,OAAO,CAAC,aAAa,GACxC,UAAU,CAAA,GAAA,oCAAM,EACd,SACA,0CAAS,CAAA,GAAA,2CAAa,EAAE,WAAW,UAAU;IAIjD,OAAO;AACT;AAEO,SAAS,0CAAe,IAAkB,EAAE,QAAmB,EAAE,QAAmB;IACzF,IAAI,UACF,OAAO,CAAA,GAAA,oCAAM,EAAE,MAAM,CAAA,GAAA,2CAAa,EAAE;IAGtC,IAAI,UACF,OAAO,CAAA,GAAA,oCAAM,EAAE,MAAM,CAAA,GAAA,2CAAa,EAAE;IAGtC,OAAO;AACT;AAEO,SAAS,0CAAsB,IAAkB,EAAE,QAAmB,EAAE,iBAAkD;IAC/H,IAAI,CAAC,mBACH,OAAO;IAGT,MAAO,KAAK,OAAO,CAAC,aAAa,KAAK,kBAAkB,MACtD,OAAO,KAAK,QAAQ,CAAC;QAAC,MAAM;IAAC;IAG/B,IAAI,KAAK,OAAO,CAAC,aAAa,GAC5B,OAAO;AAEX","sources":["packages/@react-stately/calendar/src/utils.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 */\nimport {\n CalendarDate,\n DateDuration,\n maxDate,\n minDate,\n startOfMonth,\n startOfWeek,\n startOfYear,\n toCalendarDate\n} from '@internationalized/date';\nimport {DateValue} from '@react-types/calendar';\n\nexport function isInvalid(date: DateValue, minValue: DateValue, maxValue: DateValue) {\n return (minValue != null && date.compare(minValue) < 0) ||\n (maxValue != null && date.compare(maxValue) > 0);\n}\n\nexport function alignCenter(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue, maxValue?: DateValue) {\n let halfDuration: DateDuration = {};\n for (let key in duration) {\n halfDuration[key] = Math.floor(duration[key] / 2);\n if (halfDuration[key] > 0 && duration[key] % 2 === 0) {\n halfDuration[key]--;\n }\n }\n\n let aligned = alignStart(date, duration, locale).subtract(halfDuration);\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function alignStart(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue, maxValue?: DateValue) {\n // align to the start of the largest unit\n let aligned = date;\n if (duration.years) {\n aligned = startOfYear(date);\n } else if (duration.months) {\n aligned = startOfMonth(date);\n } else if (duration.weeks) {\n aligned = startOfWeek(date, locale);\n }\n\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function alignEnd(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue, maxValue?: DateValue) {\n let d = {...duration};\n // subtract 1 from the smallest unit\n if (duration.days) {\n d.days--;\n } else if (duration.weeks) {\n d.weeks--;\n } else if (duration.months) {\n d.months--;\n } else if (duration.years) {\n d.years--;\n }\n\n let aligned = alignStart(date, duration, locale).subtract(d);\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function constrainStart(\n date: CalendarDate,\n aligned: CalendarDate,\n duration: DateDuration,\n locale: string,\n minValue: DateValue,\n maxValue: DateValue) {\n if (minValue && date.compare(minValue) >= 0) {\n aligned = maxDate(\n aligned,\n alignStart(toCalendarDate(minValue), duration, locale)\n );\n }\n\n if (maxValue && date.compare(maxValue) <= 0) {\n aligned = minDate(\n aligned,\n alignEnd(toCalendarDate(maxValue), duration, locale)\n );\n }\n\n return aligned;\n}\n\nexport function constrainValue(date: CalendarDate, minValue: DateValue, maxValue: DateValue) {\n if (minValue) {\n date = maxDate(date, toCalendarDate(minValue));\n }\n\n if (maxValue) {\n date = minDate(date, toCalendarDate(maxValue));\n }\n\n return date;\n}\n\nexport function previousAvailableDate(date: CalendarDate, minValue: DateValue, isDateUnavailable: (date: CalendarDate) => boolean) {\n if (!isDateUnavailable) {\n return date;\n }\n\n while (date.compare(minValue) >= 0 && isDateUnavailable(date)) {\n date = date.subtract({days: 1});\n }\n\n if (date.compare(minValue) >= 0) {\n return date;\n }\n}\n"],"names":[],"version":3,"file":"utils.main.js.map"}
1
+ {"mappings":"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","sources":["packages/@react-stately/calendar/src/utils.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 */\nimport {\n CalendarDate,\n DateDuration,\n maxDate,\n minDate,\n startOfMonth,\n startOfWeek,\n startOfYear,\n toCalendarDate\n} from '@internationalized/date';\nimport {DateValue} from '@react-types/calendar';\n\nexport function isInvalid(date: DateValue, minValue?: DateValue | null, maxValue?: DateValue | null) {\n return (minValue != null && date.compare(minValue) < 0) ||\n (maxValue != null && date.compare(maxValue) > 0);\n}\n\nexport function alignCenter(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue | null, maxValue?: DateValue | null) {\n let halfDuration: DateDuration = {};\n for (let key in duration) {\n halfDuration[key] = Math.floor(duration[key] / 2);\n if (halfDuration[key] > 0 && duration[key] % 2 === 0) {\n halfDuration[key]--;\n }\n }\n\n let aligned = alignStart(date, duration, locale).subtract(halfDuration);\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function alignStart(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue | null, maxValue?: DateValue | null) {\n // align to the start of the largest unit\n let aligned = date;\n if (duration.years) {\n aligned = startOfYear(date);\n } else if (duration.months) {\n aligned = startOfMonth(date);\n } else if (duration.weeks) {\n aligned = startOfWeek(date, locale);\n }\n\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function alignEnd(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue | null, maxValue?: DateValue | null) {\n let d = {...duration};\n // subtract 1 from the smallest unit\n if (d.days) {\n d.days--;\n } else if (d.weeks) {\n d.weeks--;\n } else if (d.months) {\n d.months--;\n } else if (d.years) {\n d.years--;\n }\n\n let aligned = alignStart(date, duration, locale).subtract(d);\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function constrainStart(\n date: CalendarDate,\n aligned: CalendarDate,\n duration: DateDuration,\n locale: string,\n minValue?: DateValue | null,\n maxValue?: DateValue | null) {\n if (minValue && date.compare(minValue) >= 0) {\n let newDate = maxDate(\n aligned,\n alignStart(toCalendarDate(minValue), duration, locale)\n );\n if (newDate) {\n aligned = newDate;\n }\n }\n\n if (maxValue && date.compare(maxValue) <= 0) {\n let newDate = minDate(\n aligned,\n alignEnd(toCalendarDate(maxValue), duration, locale)\n );\n if (newDate) {\n aligned = newDate;\n }\n }\n\n return aligned;\n}\n\nexport function constrainValue(date: CalendarDate, minValue?: DateValue | null, maxValue?: DateValue | null) {\n if (minValue) {\n let newDate = maxDate(date, toCalendarDate(minValue));\n if (newDate) {\n date = newDate;\n }\n }\n\n if (maxValue) {\n let newDate = minDate(date, toCalendarDate(maxValue));\n if (newDate) {\n date = newDate;\n }\n }\n\n return date;\n}\n\nexport function previousAvailableDate(date: CalendarDate, minValue: DateValue, isDateUnavailable?: (date: CalendarDate) => boolean): CalendarDate | null {\n if (!isDateUnavailable) {\n return date;\n }\n\n while (date.compare(minValue) >= 0 && isDateUnavailable(date)) {\n date = date.subtract({days: 1});\n }\n\n if (date.compare(minValue) >= 0) {\n return date;\n }\n return null;\n}\n"],"names":[],"version":3,"file":"utils.main.js.map"}
package/dist/utils.mjs CHANGED
@@ -36,21 +36,33 @@ function $f62d864046160412$export$530edbfc915b2b04(date, duration, locale, minVa
36
36
  ...duration
37
37
  };
38
38
  // subtract 1 from the smallest unit
39
- if (duration.days) d.days--;
40
- else if (duration.weeks) d.weeks--;
41
- else if (duration.months) d.months--;
42
- else if (duration.years) d.years--;
39
+ if (d.days) d.days--;
40
+ else if (d.weeks) d.weeks--;
41
+ else if (d.months) d.months--;
42
+ else if (d.years) d.years--;
43
43
  let aligned = $f62d864046160412$export$144a00ba6044eb9(date, duration, locale).subtract(d);
44
44
  return $f62d864046160412$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue);
45
45
  }
46
46
  function $f62d864046160412$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue) {
47
- if (minValue && date.compare(minValue) >= 0) aligned = (0, $k1D4u$maxDate)(aligned, $f62d864046160412$export$144a00ba6044eb9((0, $k1D4u$toCalendarDate)(minValue), duration, locale));
48
- if (maxValue && date.compare(maxValue) <= 0) aligned = (0, $k1D4u$minDate)(aligned, $f62d864046160412$export$530edbfc915b2b04((0, $k1D4u$toCalendarDate)(maxValue), duration, locale));
47
+ if (minValue && date.compare(minValue) >= 0) {
48
+ let newDate = (0, $k1D4u$maxDate)(aligned, $f62d864046160412$export$144a00ba6044eb9((0, $k1D4u$toCalendarDate)(minValue), duration, locale));
49
+ if (newDate) aligned = newDate;
50
+ }
51
+ if (maxValue && date.compare(maxValue) <= 0) {
52
+ let newDate = (0, $k1D4u$minDate)(aligned, $f62d864046160412$export$530edbfc915b2b04((0, $k1D4u$toCalendarDate)(maxValue), duration, locale));
53
+ if (newDate) aligned = newDate;
54
+ }
49
55
  return aligned;
50
56
  }
51
57
  function $f62d864046160412$export$4f5203c0d889109e(date, minValue, maxValue) {
52
- if (minValue) date = (0, $k1D4u$maxDate)(date, (0, $k1D4u$toCalendarDate)(minValue));
53
- if (maxValue) date = (0, $k1D4u$minDate)(date, (0, $k1D4u$toCalendarDate)(maxValue));
58
+ if (minValue) {
59
+ let newDate = (0, $k1D4u$maxDate)(date, (0, $k1D4u$toCalendarDate)(minValue));
60
+ if (newDate) date = newDate;
61
+ }
62
+ if (maxValue) {
63
+ let newDate = (0, $k1D4u$minDate)(date, (0, $k1D4u$toCalendarDate)(maxValue));
64
+ if (newDate) date = newDate;
65
+ }
54
66
  return date;
55
67
  }
56
68
  function $f62d864046160412$export$a1d3911297b952d7(date, minValue, isDateUnavailable) {
@@ -59,6 +71,7 @@ function $f62d864046160412$export$a1d3911297b952d7(date, minValue, isDateUnavail
59
71
  days: 1
60
72
  });
61
73
  if (date.compare(minValue) >= 0) return date;
74
+ return null;
62
75
  }
63
76
 
64
77
 
@@ -36,21 +36,33 @@ function $f62d864046160412$export$530edbfc915b2b04(date, duration, locale, minVa
36
36
  ...duration
37
37
  };
38
38
  // subtract 1 from the smallest unit
39
- if (duration.days) d.days--;
40
- else if (duration.weeks) d.weeks--;
41
- else if (duration.months) d.months--;
42
- else if (duration.years) d.years--;
39
+ if (d.days) d.days--;
40
+ else if (d.weeks) d.weeks--;
41
+ else if (d.months) d.months--;
42
+ else if (d.years) d.years--;
43
43
  let aligned = $f62d864046160412$export$144a00ba6044eb9(date, duration, locale).subtract(d);
44
44
  return $f62d864046160412$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue);
45
45
  }
46
46
  function $f62d864046160412$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue) {
47
- if (minValue && date.compare(minValue) >= 0) aligned = (0, $k1D4u$maxDate)(aligned, $f62d864046160412$export$144a00ba6044eb9((0, $k1D4u$toCalendarDate)(minValue), duration, locale));
48
- if (maxValue && date.compare(maxValue) <= 0) aligned = (0, $k1D4u$minDate)(aligned, $f62d864046160412$export$530edbfc915b2b04((0, $k1D4u$toCalendarDate)(maxValue), duration, locale));
47
+ if (minValue && date.compare(minValue) >= 0) {
48
+ let newDate = (0, $k1D4u$maxDate)(aligned, $f62d864046160412$export$144a00ba6044eb9((0, $k1D4u$toCalendarDate)(minValue), duration, locale));
49
+ if (newDate) aligned = newDate;
50
+ }
51
+ if (maxValue && date.compare(maxValue) <= 0) {
52
+ let newDate = (0, $k1D4u$minDate)(aligned, $f62d864046160412$export$530edbfc915b2b04((0, $k1D4u$toCalendarDate)(maxValue), duration, locale));
53
+ if (newDate) aligned = newDate;
54
+ }
49
55
  return aligned;
50
56
  }
51
57
  function $f62d864046160412$export$4f5203c0d889109e(date, minValue, maxValue) {
52
- if (minValue) date = (0, $k1D4u$maxDate)(date, (0, $k1D4u$toCalendarDate)(minValue));
53
- if (maxValue) date = (0, $k1D4u$minDate)(date, (0, $k1D4u$toCalendarDate)(maxValue));
58
+ if (minValue) {
59
+ let newDate = (0, $k1D4u$maxDate)(date, (0, $k1D4u$toCalendarDate)(minValue));
60
+ if (newDate) date = newDate;
61
+ }
62
+ if (maxValue) {
63
+ let newDate = (0, $k1D4u$minDate)(date, (0, $k1D4u$toCalendarDate)(maxValue));
64
+ if (newDate) date = newDate;
65
+ }
54
66
  return date;
55
67
  }
56
68
  function $f62d864046160412$export$a1d3911297b952d7(date, minValue, isDateUnavailable) {
@@ -59,6 +71,7 @@ function $f62d864046160412$export$a1d3911297b952d7(date, minValue, isDateUnavail
59
71
  days: 1
60
72
  });
61
73
  if (date.compare(minValue) >= 0) return date;
74
+ return null;
62
75
  }
63
76
 
64
77
 
@@ -1 +1 @@
1
- {"mappings":";;AAAA;;;;;;;;;;CAUC;AAaM,SAAS,0CAAU,IAAe,EAAE,QAAmB,EAAE,QAAmB;IACjF,OAAO,AAAC,YAAY,QAAQ,KAAK,OAAO,CAAC,YAAY,KAClD,YAAY,QAAQ,KAAK,OAAO,CAAC,YAAY;AAClD;AAEO,SAAS,0CAAY,IAAkB,EAAE,QAAsB,EAAE,MAAc,EAAE,QAAoB,EAAE,QAAoB;IAChI,IAAI,eAA6B,CAAC;IAClC,IAAK,IAAI,OAAO,SAAU;QACxB,YAAY,CAAC,IAAI,GAAG,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG;QAC/C,IAAI,YAAY,CAAC,IAAI,GAAG,KAAK,QAAQ,CAAC,IAAI,GAAG,MAAM,GACjD,YAAY,CAAC,IAAI;IAErB;IAEA,IAAI,UAAU,yCAAW,MAAM,UAAU,QAAQ,QAAQ,CAAC;IAC1D,OAAO,0CAAe,MAAM,SAAS,UAAU,QAAQ,UAAU;AACnE;AAEO,SAAS,yCAAW,IAAkB,EAAE,QAAsB,EAAE,MAAc,EAAE,QAAoB,EAAE,QAAoB;IAC/H,yCAAyC;IACzC,IAAI,UAAU;IACd,IAAI,SAAS,KAAK,EAChB,UAAU,CAAA,GAAA,kBAAU,EAAE;SACjB,IAAI,SAAS,MAAM,EACxB,UAAU,CAAA,GAAA,mBAAW,EAAE;SAClB,IAAI,SAAS,KAAK,EACvB,UAAU,CAAA,GAAA,kBAAU,EAAE,MAAM;IAG9B,OAAO,0CAAe,MAAM,SAAS,UAAU,QAAQ,UAAU;AACnE;AAEO,SAAS,0CAAS,IAAkB,EAAE,QAAsB,EAAE,MAAc,EAAE,QAAoB,EAAE,QAAoB;IAC7H,IAAI,IAAI;QAAC,GAAG,QAAQ;IAAA;IACpB,oCAAoC;IACpC,IAAI,SAAS,IAAI,EACf,EAAE,IAAI;SACD,IAAI,SAAS,KAAK,EACvB,EAAE,KAAK;SACF,IAAI,SAAS,MAAM,EACxB,EAAE,MAAM;SACH,IAAI,SAAS,KAAK,EACvB,EAAE,KAAK;IAGT,IAAI,UAAU,yCAAW,MAAM,UAAU,QAAQ,QAAQ,CAAC;IAC1D,OAAO,0CAAe,MAAM,SAAS,UAAU,QAAQ,UAAU;AACnE;AAEO,SAAS,0CACd,IAAkB,EAClB,OAAqB,EACrB,QAAsB,EACtB,MAAc,EACd,QAAmB,EACnB,QAAmB;IACnB,IAAI,YAAY,KAAK,OAAO,CAAC,aAAa,GACxC,UAAU,CAAA,GAAA,cAAM,EACd,SACA,yCAAW,CAAA,GAAA,qBAAa,EAAE,WAAW,UAAU;IAInD,IAAI,YAAY,KAAK,OAAO,CAAC,aAAa,GACxC,UAAU,CAAA,GAAA,cAAM,EACd,SACA,0CAAS,CAAA,GAAA,qBAAa,EAAE,WAAW,UAAU;IAIjD,OAAO;AACT;AAEO,SAAS,0CAAe,IAAkB,EAAE,QAAmB,EAAE,QAAmB;IACzF,IAAI,UACF,OAAO,CAAA,GAAA,cAAM,EAAE,MAAM,CAAA,GAAA,qBAAa,EAAE;IAGtC,IAAI,UACF,OAAO,CAAA,GAAA,cAAM,EAAE,MAAM,CAAA,GAAA,qBAAa,EAAE;IAGtC,OAAO;AACT;AAEO,SAAS,0CAAsB,IAAkB,EAAE,QAAmB,EAAE,iBAAkD;IAC/H,IAAI,CAAC,mBACH,OAAO;IAGT,MAAO,KAAK,OAAO,CAAC,aAAa,KAAK,kBAAkB,MACtD,OAAO,KAAK,QAAQ,CAAC;QAAC,MAAM;IAAC;IAG/B,IAAI,KAAK,OAAO,CAAC,aAAa,GAC5B,OAAO;AAEX","sources":["packages/@react-stately/calendar/src/utils.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 */\nimport {\n CalendarDate,\n DateDuration,\n maxDate,\n minDate,\n startOfMonth,\n startOfWeek,\n startOfYear,\n toCalendarDate\n} from '@internationalized/date';\nimport {DateValue} from '@react-types/calendar';\n\nexport function isInvalid(date: DateValue, minValue: DateValue, maxValue: DateValue) {\n return (minValue != null && date.compare(minValue) < 0) ||\n (maxValue != null && date.compare(maxValue) > 0);\n}\n\nexport function alignCenter(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue, maxValue?: DateValue) {\n let halfDuration: DateDuration = {};\n for (let key in duration) {\n halfDuration[key] = Math.floor(duration[key] / 2);\n if (halfDuration[key] > 0 && duration[key] % 2 === 0) {\n halfDuration[key]--;\n }\n }\n\n let aligned = alignStart(date, duration, locale).subtract(halfDuration);\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function alignStart(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue, maxValue?: DateValue) {\n // align to the start of the largest unit\n let aligned = date;\n if (duration.years) {\n aligned = startOfYear(date);\n } else if (duration.months) {\n aligned = startOfMonth(date);\n } else if (duration.weeks) {\n aligned = startOfWeek(date, locale);\n }\n\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function alignEnd(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue, maxValue?: DateValue) {\n let d = {...duration};\n // subtract 1 from the smallest unit\n if (duration.days) {\n d.days--;\n } else if (duration.weeks) {\n d.weeks--;\n } else if (duration.months) {\n d.months--;\n } else if (duration.years) {\n d.years--;\n }\n\n let aligned = alignStart(date, duration, locale).subtract(d);\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function constrainStart(\n date: CalendarDate,\n aligned: CalendarDate,\n duration: DateDuration,\n locale: string,\n minValue: DateValue,\n maxValue: DateValue) {\n if (minValue && date.compare(minValue) >= 0) {\n aligned = maxDate(\n aligned,\n alignStart(toCalendarDate(minValue), duration, locale)\n );\n }\n\n if (maxValue && date.compare(maxValue) <= 0) {\n aligned = minDate(\n aligned,\n alignEnd(toCalendarDate(maxValue), duration, locale)\n );\n }\n\n return aligned;\n}\n\nexport function constrainValue(date: CalendarDate, minValue: DateValue, maxValue: DateValue) {\n if (minValue) {\n date = maxDate(date, toCalendarDate(minValue));\n }\n\n if (maxValue) {\n date = minDate(date, toCalendarDate(maxValue));\n }\n\n return date;\n}\n\nexport function previousAvailableDate(date: CalendarDate, minValue: DateValue, isDateUnavailable: (date: CalendarDate) => boolean) {\n if (!isDateUnavailable) {\n return date;\n }\n\n while (date.compare(minValue) >= 0 && isDateUnavailable(date)) {\n date = date.subtract({days: 1});\n }\n\n if (date.compare(minValue) >= 0) {\n return date;\n }\n}\n"],"names":[],"version":3,"file":"utils.module.js.map"}
1
+ {"mappings":";;AAAA;;;;;;;;;;CAUC;AAaM,SAAS,0CAAU,IAAe,EAAE,QAA2B,EAAE,QAA2B;IACjG,OAAO,AAAC,YAAY,QAAQ,KAAK,OAAO,CAAC,YAAY,KAClD,YAAY,QAAQ,KAAK,OAAO,CAAC,YAAY;AAClD;AAEO,SAAS,0CAAY,IAAkB,EAAE,QAAsB,EAAE,MAAc,EAAE,QAA2B,EAAE,QAA2B;IAC9I,IAAI,eAA6B,CAAC;IAClC,IAAK,IAAI,OAAO,SAAU;QACxB,YAAY,CAAC,IAAI,GAAG,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG;QAC/C,IAAI,YAAY,CAAC,IAAI,GAAG,KAAK,QAAQ,CAAC,IAAI,GAAG,MAAM,GACjD,YAAY,CAAC,IAAI;IAErB;IAEA,IAAI,UAAU,yCAAW,MAAM,UAAU,QAAQ,QAAQ,CAAC;IAC1D,OAAO,0CAAe,MAAM,SAAS,UAAU,QAAQ,UAAU;AACnE;AAEO,SAAS,yCAAW,IAAkB,EAAE,QAAsB,EAAE,MAAc,EAAE,QAA2B,EAAE,QAA2B;IAC7I,yCAAyC;IACzC,IAAI,UAAU;IACd,IAAI,SAAS,KAAK,EAChB,UAAU,CAAA,GAAA,kBAAU,EAAE;SACjB,IAAI,SAAS,MAAM,EACxB,UAAU,CAAA,GAAA,mBAAW,EAAE;SAClB,IAAI,SAAS,KAAK,EACvB,UAAU,CAAA,GAAA,kBAAU,EAAE,MAAM;IAG9B,OAAO,0CAAe,MAAM,SAAS,UAAU,QAAQ,UAAU;AACnE;AAEO,SAAS,0CAAS,IAAkB,EAAE,QAAsB,EAAE,MAAc,EAAE,QAA2B,EAAE,QAA2B;IAC3I,IAAI,IAAI;QAAC,GAAG,QAAQ;IAAA;IACpB,oCAAoC;IACpC,IAAI,EAAE,IAAI,EACR,EAAE,IAAI;SACD,IAAI,EAAE,KAAK,EAChB,EAAE,KAAK;SACF,IAAI,EAAE,MAAM,EACjB,EAAE,MAAM;SACH,IAAI,EAAE,KAAK,EAChB,EAAE,KAAK;IAGT,IAAI,UAAU,yCAAW,MAAM,UAAU,QAAQ,QAAQ,CAAC;IAC1D,OAAO,0CAAe,MAAM,SAAS,UAAU,QAAQ,UAAU;AACnE;AAEO,SAAS,0CACd,IAAkB,EAClB,OAAqB,EACrB,QAAsB,EACtB,MAAc,EACd,QAA2B,EAC3B,QAA2B;IAC3B,IAAI,YAAY,KAAK,OAAO,CAAC,aAAa,GAAG;QAC3C,IAAI,UAAU,CAAA,GAAA,cAAM,EAClB,SACA,yCAAW,CAAA,GAAA,qBAAa,EAAE,WAAW,UAAU;QAEjD,IAAI,SACF,UAAU;IAEd;IAEA,IAAI,YAAY,KAAK,OAAO,CAAC,aAAa,GAAG;QAC3C,IAAI,UAAU,CAAA,GAAA,cAAM,EAClB,SACA,0CAAS,CAAA,GAAA,qBAAa,EAAE,WAAW,UAAU;QAE/C,IAAI,SACF,UAAU;IAEd;IAEA,OAAO;AACT;AAEO,SAAS,0CAAe,IAAkB,EAAE,QAA2B,EAAE,QAA2B;IACzG,IAAI,UAAU;QACZ,IAAI,UAAU,CAAA,GAAA,cAAM,EAAE,MAAM,CAAA,GAAA,qBAAa,EAAE;QAC3C,IAAI,SACF,OAAO;IAEX;IAEA,IAAI,UAAU;QACZ,IAAI,UAAU,CAAA,GAAA,cAAM,EAAE,MAAM,CAAA,GAAA,qBAAa,EAAE;QAC3C,IAAI,SACF,OAAO;IAEX;IAEA,OAAO;AACT;AAEO,SAAS,0CAAsB,IAAkB,EAAE,QAAmB,EAAE,iBAAmD;IAChI,IAAI,CAAC,mBACH,OAAO;IAGT,MAAO,KAAK,OAAO,CAAC,aAAa,KAAK,kBAAkB,MACtD,OAAO,KAAK,QAAQ,CAAC;QAAC,MAAM;IAAC;IAG/B,IAAI,KAAK,OAAO,CAAC,aAAa,GAC5B,OAAO;IAET,OAAO;AACT","sources":["packages/@react-stately/calendar/src/utils.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 */\nimport {\n CalendarDate,\n DateDuration,\n maxDate,\n minDate,\n startOfMonth,\n startOfWeek,\n startOfYear,\n toCalendarDate\n} from '@internationalized/date';\nimport {DateValue} from '@react-types/calendar';\n\nexport function isInvalid(date: DateValue, minValue?: DateValue | null, maxValue?: DateValue | null) {\n return (minValue != null && date.compare(minValue) < 0) ||\n (maxValue != null && date.compare(maxValue) > 0);\n}\n\nexport function alignCenter(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue | null, maxValue?: DateValue | null) {\n let halfDuration: DateDuration = {};\n for (let key in duration) {\n halfDuration[key] = Math.floor(duration[key] / 2);\n if (halfDuration[key] > 0 && duration[key] % 2 === 0) {\n halfDuration[key]--;\n }\n }\n\n let aligned = alignStart(date, duration, locale).subtract(halfDuration);\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function alignStart(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue | null, maxValue?: DateValue | null) {\n // align to the start of the largest unit\n let aligned = date;\n if (duration.years) {\n aligned = startOfYear(date);\n } else if (duration.months) {\n aligned = startOfMonth(date);\n } else if (duration.weeks) {\n aligned = startOfWeek(date, locale);\n }\n\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function alignEnd(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue | null, maxValue?: DateValue | null) {\n let d = {...duration};\n // subtract 1 from the smallest unit\n if (d.days) {\n d.days--;\n } else if (d.weeks) {\n d.weeks--;\n } else if (d.months) {\n d.months--;\n } else if (d.years) {\n d.years--;\n }\n\n let aligned = alignStart(date, duration, locale).subtract(d);\n return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function constrainStart(\n date: CalendarDate,\n aligned: CalendarDate,\n duration: DateDuration,\n locale: string,\n minValue?: DateValue | null,\n maxValue?: DateValue | null) {\n if (minValue && date.compare(minValue) >= 0) {\n let newDate = maxDate(\n aligned,\n alignStart(toCalendarDate(minValue), duration, locale)\n );\n if (newDate) {\n aligned = newDate;\n }\n }\n\n if (maxValue && date.compare(maxValue) <= 0) {\n let newDate = minDate(\n aligned,\n alignEnd(toCalendarDate(maxValue), duration, locale)\n );\n if (newDate) {\n aligned = newDate;\n }\n }\n\n return aligned;\n}\n\nexport function constrainValue(date: CalendarDate, minValue?: DateValue | null, maxValue?: DateValue | null) {\n if (minValue) {\n let newDate = maxDate(date, toCalendarDate(minValue));\n if (newDate) {\n date = newDate;\n }\n }\n\n if (maxValue) {\n let newDate = minDate(date, toCalendarDate(maxValue));\n if (newDate) {\n date = newDate;\n }\n }\n\n return date;\n}\n\nexport function previousAvailableDate(date: CalendarDate, minValue: DateValue, isDateUnavailable?: (date: CalendarDate) => boolean): CalendarDate | null {\n if (!isDateUnavailable) {\n return date;\n }\n\n while (date.compare(minValue) >= 0 && isDateUnavailable(date)) {\n date = date.subtract({days: 1});\n }\n\n if (date.compare(minValue) >= 0) {\n return date;\n }\n return null;\n}\n"],"names":[],"version":3,"file":"utils.module.js.map"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-stately/calendar",
3
- "version": "3.5.1",
3
+ "version": "3.5.3",
4
4
  "description": "Spectrum UI components in React",
5
5
  "license": "Apache-2.0",
6
6
  "main": "dist/main.js",
@@ -22,17 +22,17 @@
22
22
  "url": "https://github.com/adobe/react-spectrum"
23
23
  },
24
24
  "dependencies": {
25
- "@internationalized/date": "^3.5.4",
26
- "@react-stately/utils": "^3.10.1",
27
- "@react-types/calendar": "^3.4.6",
28
- "@react-types/shared": "^3.23.1",
25
+ "@internationalized/date": "^3.5.5",
26
+ "@react-stately/utils": "^3.10.2",
27
+ "@react-types/calendar": "^3.4.8",
28
+ "@react-types/shared": "^3.24.1",
29
29
  "@swc/helpers": "^0.5.0"
30
30
  },
31
31
  "peerDependencies": {
32
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
32
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0"
33
33
  },
34
34
  "publishConfig": {
35
35
  "access": "public"
36
36
  },
37
- "gitHead": "b77d7d594dff4dcfb5359bffbcfd18142b146433"
37
+ "gitHead": "f0aa6aacee60af265dc8994b9274ccf072a850aa"
38
38
  }
package/src/types.ts CHANGED
@@ -22,16 +22,16 @@ interface CalendarStateBase {
22
22
  /** The date range that is currently visible in the calendar. */
23
23
  readonly visibleRange: RangeValue<CalendarDate>,
24
24
  /** The minimum allowed date that a user may select. */
25
- readonly minValue?: DateValue,
25
+ readonly minValue?: DateValue | null,
26
26
  /** The maximum allowed date that a user may select. */
27
- readonly maxValue?: DateValue,
27
+ readonly maxValue?: DateValue | null,
28
28
  /** The time zone of the dates currently being displayed. */
29
29
  readonly timeZone: string,
30
30
  /**
31
31
  * The current validation state of the selected value.
32
32
  * @deprecated Use `isValueInvalid` instead.
33
33
  */
34
- readonly validationState: ValidationState,
34
+ readonly validationState: ValidationState | null,
35
35
  /** Whether the calendar is invalid. */
36
36
  readonly isValueInvalid: boolean,
37
37
  /** The currently focused date. */
@@ -108,9 +108,9 @@ export interface CalendarState extends CalendarStateBase {
108
108
 
109
109
  export interface RangeCalendarState extends CalendarStateBase {
110
110
  /** The currently selected date range. */
111
- readonly value: RangeValue<DateValue>,
111
+ readonly value: RangeValue<DateValue> | null,
112
112
  /** Sets the currently selected date range. */
113
- setValue(value: RangeValue<DateValue>): void,
113
+ setValue(value: RangeValue<DateValue> | null): void,
114
114
  /** Highlights the given date during selection, e.g. by hovering or dragging. */
115
115
  highlightDate(date: CalendarDate): void,
116
116
  /** The current anchor date that the user clicked on to begin range selection. */
@@ -118,7 +118,7 @@ export interface RangeCalendarState extends CalendarStateBase {
118
118
  /** Sets the anchor date that the user clicked on to begin range selection. */
119
119
  setAnchorDate(date: CalendarDate | null): void,
120
120
  /** The currently highlighted date range. */
121
- readonly highlightedRange: RangeValue<CalendarDate>,
121
+ readonly highlightedRange: RangeValue<CalendarDate> | null,
122
122
  /** Whether the user is currently dragging over the calendar. */
123
123
  readonly isDragging: boolean,
124
124
  /** Sets whether the user is dragging over the calendar. */