@react-stately/calendar 3.4.4 → 3.5.0

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.
@@ -0,0 +1,176 @@
1
+ import {alignCenter as $f62d864046160412$export$f4a51ff076cc9a09, constrainValue as $f62d864046160412$export$4f5203c0d889109e, isInvalid as $f62d864046160412$export$eac50920cf2fd59a, previousAvailableDate as $f62d864046160412$export$a1d3911297b952d7} from "./utils.mjs";
2
+ import {useCalendarState as $131cf43a05231e1e$export$6d095e787d2b5e1f} from "./useCalendarState.mjs";
3
+ import {toCalendarDate as $d0gbl$toCalendarDate, maxDate as $d0gbl$maxDate, minDate as $d0gbl$minDate, isEqualDay as $d0gbl$isEqualDay, toCalendar as $d0gbl$toCalendar, GregorianCalendar as $d0gbl$GregorianCalendar} from "@internationalized/date";
4
+ import {useControlledState as $d0gbl$useControlledState} from "@react-stately/utils";
5
+ import {useState as $d0gbl$useState, useRef as $d0gbl$useRef, useMemo as $d0gbl$useMemo} from "react";
6
+
7
+ /*
8
+ * Copyright 2020 Adobe. All rights reserved.
9
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
10
+ * you may not use this file except in compliance with the License. You may obtain a copy
11
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software distributed under
14
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
15
+ * OF ANY KIND, either express or implied. See the License for the specific language
16
+ * governing permissions and limitations under the License.
17
+ */
18
+
19
+
20
+
21
+
22
+ function $9a36b6ba2fb1a7c5$export$9a987164d97ecc90(props) {
23
+ let { value: valueProp, defaultValue: defaultValue, onChange: onChange, createCalendar: createCalendar, locale: locale, visibleDuration: visibleDuration = {
24
+ months: 1
25
+ }, minValue: minValue, maxValue: maxValue, ...calendarProps } = props;
26
+ let [value, setValue] = (0, $d0gbl$useControlledState)(valueProp, defaultValue || null, onChange);
27
+ let [anchorDate, setAnchorDateState] = (0, $d0gbl$useState)(null);
28
+ let alignment = "center";
29
+ if (value && value.start && value.end) {
30
+ let start = (0, $f62d864046160412$export$f4a51ff076cc9a09)((0, $d0gbl$toCalendarDate)(value.start), visibleDuration, locale, minValue, maxValue);
31
+ let end = start.add(visibleDuration).subtract({
32
+ days: 1
33
+ });
34
+ if (value.end.compare(end) > 0) alignment = "start";
35
+ }
36
+ // Available range must be stored in a ref so we have access to the updated version immediately in `isInvalid`.
37
+ let availableRangeRef = (0, $d0gbl$useRef)(null);
38
+ let [availableRange, setAvailableRange] = (0, $d0gbl$useState)(null);
39
+ let min = (0, $d0gbl$useMemo)(()=>(0, $d0gbl$maxDate)(minValue, availableRange === null || availableRange === void 0 ? void 0 : availableRange.start), [
40
+ minValue,
41
+ availableRange
42
+ ]);
43
+ let max = (0, $d0gbl$useMemo)(()=>(0, $d0gbl$minDate)(maxValue, availableRange === null || availableRange === void 0 ? void 0 : availableRange.end), [
44
+ maxValue,
45
+ availableRange
46
+ ]);
47
+ let calendar = (0, $131cf43a05231e1e$export$6d095e787d2b5e1f)({
48
+ ...calendarProps,
49
+ value: value && value.start,
50
+ createCalendar: createCalendar,
51
+ locale: locale,
52
+ visibleDuration: visibleDuration,
53
+ minValue: min,
54
+ maxValue: max,
55
+ selectionAlignment: alignment
56
+ });
57
+ let updateAvailableRange = (date)=>{
58
+ if (date && props.isDateUnavailable && !props.allowsNonContiguousRanges) {
59
+ availableRangeRef.current = {
60
+ start: $9a36b6ba2fb1a7c5$var$nextUnavailableDate(date, calendar, -1),
61
+ end: $9a36b6ba2fb1a7c5$var$nextUnavailableDate(date, calendar, 1)
62
+ };
63
+ setAvailableRange(availableRangeRef.current);
64
+ } else {
65
+ availableRangeRef.current = null;
66
+ setAvailableRange(null);
67
+ }
68
+ };
69
+ // If the visible range changes, we need to update the available range.
70
+ let [lastVisibleRange, setLastVisibleRange] = (0, $d0gbl$useState)(calendar.visibleRange);
71
+ if (!(0, $d0gbl$isEqualDay)(calendar.visibleRange.start, lastVisibleRange.start) || !(0, $d0gbl$isEqualDay)(calendar.visibleRange.end, lastVisibleRange.end)) {
72
+ updateAvailableRange(anchorDate);
73
+ setLastVisibleRange(calendar.visibleRange);
74
+ }
75
+ let setAnchorDate = (date)=>{
76
+ if (date) {
77
+ setAnchorDateState(date);
78
+ updateAvailableRange(date);
79
+ } else {
80
+ setAnchorDateState(null);
81
+ updateAvailableRange(null);
82
+ }
83
+ };
84
+ let highlightedRange = anchorDate ? $9a36b6ba2fb1a7c5$var$makeRange(anchorDate, calendar.focusedDate) : value && $9a36b6ba2fb1a7c5$var$makeRange(value.start, value.end);
85
+ let selectDate = (date)=>{
86
+ 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);
91
+ else {
92
+ let range = $9a36b6ba2fb1a7c5$var$makeRange(anchorDate, date);
93
+ setValue({
94
+ start: $9a36b6ba2fb1a7c5$var$convertValue(range.start, value === null || value === void 0 ? void 0 : value.start),
95
+ end: $9a36b6ba2fb1a7c5$var$convertValue(range.end, value === null || value === void 0 ? void 0 : value.end)
96
+ });
97
+ setAnchorDate(null);
98
+ }
99
+ };
100
+ let [isDragging, setDragging] = (0, $d0gbl$useState)(false);
101
+ let { isDateUnavailable: isDateUnavailable } = props;
102
+ let isInvalidSelection = (0, $d0gbl$useMemo)(()=>{
103
+ if (!value || anchorDate) return false;
104
+ if (isDateUnavailable && (isDateUnavailable(value.start) || isDateUnavailable(value.end))) return true;
105
+ return (0, $f62d864046160412$export$eac50920cf2fd59a)(value.start, minValue, maxValue) || (0, $f62d864046160412$export$eac50920cf2fd59a)(value.end, minValue, maxValue);
106
+ }, [
107
+ isDateUnavailable,
108
+ value,
109
+ anchorDate,
110
+ minValue,
111
+ maxValue
112
+ ]);
113
+ let isValueInvalid = props.isInvalid || props.validationState === "invalid" || isInvalidSelection;
114
+ let validationState = isValueInvalid ? "invalid" : null;
115
+ return {
116
+ ...calendar,
117
+ value: value,
118
+ setValue: setValue,
119
+ anchorDate: anchorDate,
120
+ setAnchorDate: setAnchorDate,
121
+ highlightedRange: highlightedRange,
122
+ validationState: validationState,
123
+ isValueInvalid: isValueInvalid,
124
+ selectFocusedDate () {
125
+ selectDate(calendar.focusedDate);
126
+ },
127
+ selectDate: selectDate,
128
+ highlightDate (date) {
129
+ if (anchorDate) calendar.setFocusedDate(date);
130
+ },
131
+ isSelected (date) {
132
+ return highlightedRange && date.compare(highlightedRange.start) >= 0 && date.compare(highlightedRange.end) <= 0 && !calendar.isCellDisabled(date) && !calendar.isCellUnavailable(date);
133
+ },
134
+ isInvalid (date) {
135
+ var _availableRangeRef_current, _availableRangeRef_current1;
136
+ return calendar.isInvalid(date) || (0, $f62d864046160412$export$eac50920cf2fd59a)(date, (_availableRangeRef_current = availableRangeRef.current) === null || _availableRangeRef_current === void 0 ? void 0 : _availableRangeRef_current.start, (_availableRangeRef_current1 = availableRangeRef.current) === null || _availableRangeRef_current1 === void 0 ? void 0 : _availableRangeRef_current1.end);
137
+ },
138
+ isDragging: isDragging,
139
+ setDragging: setDragging
140
+ };
141
+ }
142
+ function $9a36b6ba2fb1a7c5$var$makeRange(start, end) {
143
+ if (!start || !end) return null;
144
+ if (end.compare(start) < 0) [start, end] = [
145
+ end,
146
+ start
147
+ ];
148
+ return {
149
+ start: (0, $d0gbl$toCalendarDate)(start),
150
+ end: (0, $d0gbl$toCalendarDate)(end)
151
+ };
152
+ }
153
+ function $9a36b6ba2fb1a7c5$var$convertValue(newValue, oldValue) {
154
+ // The display calendar should not have any effect on the emitted value.
155
+ // Emit dates in the same calendar as the original value, if any, otherwise gregorian.
156
+ newValue = (0, $d0gbl$toCalendar)(newValue, (oldValue === null || oldValue === void 0 ? void 0 : oldValue.calendar) || new (0, $d0gbl$GregorianCalendar)());
157
+ // Preserve time if the input value had one.
158
+ if (oldValue && "hour" in oldValue) return oldValue.set(newValue);
159
+ return newValue;
160
+ }
161
+ function $9a36b6ba2fb1a7c5$var$nextUnavailableDate(anchorDate, state, dir) {
162
+ let nextDate = anchorDate.add({
163
+ days: dir
164
+ });
165
+ while((dir < 0 ? nextDate.compare(state.visibleRange.start) >= 0 : nextDate.compare(state.visibleRange.end) <= 0) && !state.isCellUnavailable(nextDate))nextDate = nextDate.add({
166
+ days: dir
167
+ });
168
+ if (state.isCellUnavailable(nextDate)) return nextDate.add({
169
+ days: -dir
170
+ });
171
+ return null;
172
+ }
173
+
174
+
175
+ export {$9a36b6ba2fb1a7c5$export$9a987164d97ecc90 as useRangeCalendarState};
176
+ //# sourceMappingURL=useRangeCalendarState.mjs.map
@@ -0,0 +1,176 @@
1
+ import {alignCenter as $f62d864046160412$export$f4a51ff076cc9a09, constrainValue as $f62d864046160412$export$4f5203c0d889109e, isInvalid as $f62d864046160412$export$eac50920cf2fd59a, previousAvailableDate as $f62d864046160412$export$a1d3911297b952d7} from "./utils.module.js";
2
+ import {useCalendarState as $131cf43a05231e1e$export$6d095e787d2b5e1f} from "./useCalendarState.module.js";
3
+ import {toCalendarDate as $d0gbl$toCalendarDate, maxDate as $d0gbl$maxDate, minDate as $d0gbl$minDate, isEqualDay as $d0gbl$isEqualDay, toCalendar as $d0gbl$toCalendar, GregorianCalendar as $d0gbl$GregorianCalendar} from "@internationalized/date";
4
+ import {useControlledState as $d0gbl$useControlledState} from "@react-stately/utils";
5
+ import {useState as $d0gbl$useState, useRef as $d0gbl$useRef, useMemo as $d0gbl$useMemo} from "react";
6
+
7
+ /*
8
+ * Copyright 2020 Adobe. All rights reserved.
9
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
10
+ * you may not use this file except in compliance with the License. You may obtain a copy
11
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software distributed under
14
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
15
+ * OF ANY KIND, either express or implied. See the License for the specific language
16
+ * governing permissions and limitations under the License.
17
+ */
18
+
19
+
20
+
21
+
22
+ function $9a36b6ba2fb1a7c5$export$9a987164d97ecc90(props) {
23
+ let { value: valueProp, defaultValue: defaultValue, onChange: onChange, createCalendar: createCalendar, locale: locale, visibleDuration: visibleDuration = {
24
+ months: 1
25
+ }, minValue: minValue, maxValue: maxValue, ...calendarProps } = props;
26
+ let [value, setValue] = (0, $d0gbl$useControlledState)(valueProp, defaultValue || null, onChange);
27
+ let [anchorDate, setAnchorDateState] = (0, $d0gbl$useState)(null);
28
+ let alignment = "center";
29
+ if (value && value.start && value.end) {
30
+ let start = (0, $f62d864046160412$export$f4a51ff076cc9a09)((0, $d0gbl$toCalendarDate)(value.start), visibleDuration, locale, minValue, maxValue);
31
+ let end = start.add(visibleDuration).subtract({
32
+ days: 1
33
+ });
34
+ if (value.end.compare(end) > 0) alignment = "start";
35
+ }
36
+ // Available range must be stored in a ref so we have access to the updated version immediately in `isInvalid`.
37
+ let availableRangeRef = (0, $d0gbl$useRef)(null);
38
+ let [availableRange, setAvailableRange] = (0, $d0gbl$useState)(null);
39
+ let min = (0, $d0gbl$useMemo)(()=>(0, $d0gbl$maxDate)(minValue, availableRange === null || availableRange === void 0 ? void 0 : availableRange.start), [
40
+ minValue,
41
+ availableRange
42
+ ]);
43
+ let max = (0, $d0gbl$useMemo)(()=>(0, $d0gbl$minDate)(maxValue, availableRange === null || availableRange === void 0 ? void 0 : availableRange.end), [
44
+ maxValue,
45
+ availableRange
46
+ ]);
47
+ let calendar = (0, $131cf43a05231e1e$export$6d095e787d2b5e1f)({
48
+ ...calendarProps,
49
+ value: value && value.start,
50
+ createCalendar: createCalendar,
51
+ locale: locale,
52
+ visibleDuration: visibleDuration,
53
+ minValue: min,
54
+ maxValue: max,
55
+ selectionAlignment: alignment
56
+ });
57
+ let updateAvailableRange = (date)=>{
58
+ if (date && props.isDateUnavailable && !props.allowsNonContiguousRanges) {
59
+ availableRangeRef.current = {
60
+ start: $9a36b6ba2fb1a7c5$var$nextUnavailableDate(date, calendar, -1),
61
+ end: $9a36b6ba2fb1a7c5$var$nextUnavailableDate(date, calendar, 1)
62
+ };
63
+ setAvailableRange(availableRangeRef.current);
64
+ } else {
65
+ availableRangeRef.current = null;
66
+ setAvailableRange(null);
67
+ }
68
+ };
69
+ // If the visible range changes, we need to update the available range.
70
+ let [lastVisibleRange, setLastVisibleRange] = (0, $d0gbl$useState)(calendar.visibleRange);
71
+ if (!(0, $d0gbl$isEqualDay)(calendar.visibleRange.start, lastVisibleRange.start) || !(0, $d0gbl$isEqualDay)(calendar.visibleRange.end, lastVisibleRange.end)) {
72
+ updateAvailableRange(anchorDate);
73
+ setLastVisibleRange(calendar.visibleRange);
74
+ }
75
+ let setAnchorDate = (date)=>{
76
+ if (date) {
77
+ setAnchorDateState(date);
78
+ updateAvailableRange(date);
79
+ } else {
80
+ setAnchorDateState(null);
81
+ updateAvailableRange(null);
82
+ }
83
+ };
84
+ let highlightedRange = anchorDate ? $9a36b6ba2fb1a7c5$var$makeRange(anchorDate, calendar.focusedDate) : value && $9a36b6ba2fb1a7c5$var$makeRange(value.start, value.end);
85
+ let selectDate = (date)=>{
86
+ 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);
91
+ else {
92
+ let range = $9a36b6ba2fb1a7c5$var$makeRange(anchorDate, date);
93
+ setValue({
94
+ start: $9a36b6ba2fb1a7c5$var$convertValue(range.start, value === null || value === void 0 ? void 0 : value.start),
95
+ end: $9a36b6ba2fb1a7c5$var$convertValue(range.end, value === null || value === void 0 ? void 0 : value.end)
96
+ });
97
+ setAnchorDate(null);
98
+ }
99
+ };
100
+ let [isDragging, setDragging] = (0, $d0gbl$useState)(false);
101
+ let { isDateUnavailable: isDateUnavailable } = props;
102
+ let isInvalidSelection = (0, $d0gbl$useMemo)(()=>{
103
+ if (!value || anchorDate) return false;
104
+ if (isDateUnavailable && (isDateUnavailable(value.start) || isDateUnavailable(value.end))) return true;
105
+ return (0, $f62d864046160412$export$eac50920cf2fd59a)(value.start, minValue, maxValue) || (0, $f62d864046160412$export$eac50920cf2fd59a)(value.end, minValue, maxValue);
106
+ }, [
107
+ isDateUnavailable,
108
+ value,
109
+ anchorDate,
110
+ minValue,
111
+ maxValue
112
+ ]);
113
+ let isValueInvalid = props.isInvalid || props.validationState === "invalid" || isInvalidSelection;
114
+ let validationState = isValueInvalid ? "invalid" : null;
115
+ return {
116
+ ...calendar,
117
+ value: value,
118
+ setValue: setValue,
119
+ anchorDate: anchorDate,
120
+ setAnchorDate: setAnchorDate,
121
+ highlightedRange: highlightedRange,
122
+ validationState: validationState,
123
+ isValueInvalid: isValueInvalid,
124
+ selectFocusedDate () {
125
+ selectDate(calendar.focusedDate);
126
+ },
127
+ selectDate: selectDate,
128
+ highlightDate (date) {
129
+ if (anchorDate) calendar.setFocusedDate(date);
130
+ },
131
+ isSelected (date) {
132
+ return highlightedRange && date.compare(highlightedRange.start) >= 0 && date.compare(highlightedRange.end) <= 0 && !calendar.isCellDisabled(date) && !calendar.isCellUnavailable(date);
133
+ },
134
+ isInvalid (date) {
135
+ var _availableRangeRef_current, _availableRangeRef_current1;
136
+ return calendar.isInvalid(date) || (0, $f62d864046160412$export$eac50920cf2fd59a)(date, (_availableRangeRef_current = availableRangeRef.current) === null || _availableRangeRef_current === void 0 ? void 0 : _availableRangeRef_current.start, (_availableRangeRef_current1 = availableRangeRef.current) === null || _availableRangeRef_current1 === void 0 ? void 0 : _availableRangeRef_current1.end);
137
+ },
138
+ isDragging: isDragging,
139
+ setDragging: setDragging
140
+ };
141
+ }
142
+ function $9a36b6ba2fb1a7c5$var$makeRange(start, end) {
143
+ if (!start || !end) return null;
144
+ if (end.compare(start) < 0) [start, end] = [
145
+ end,
146
+ start
147
+ ];
148
+ return {
149
+ start: (0, $d0gbl$toCalendarDate)(start),
150
+ end: (0, $d0gbl$toCalendarDate)(end)
151
+ };
152
+ }
153
+ function $9a36b6ba2fb1a7c5$var$convertValue(newValue, oldValue) {
154
+ // The display calendar should not have any effect on the emitted value.
155
+ // Emit dates in the same calendar as the original value, if any, otherwise gregorian.
156
+ newValue = (0, $d0gbl$toCalendar)(newValue, (oldValue === null || oldValue === void 0 ? void 0 : oldValue.calendar) || new (0, $d0gbl$GregorianCalendar)());
157
+ // Preserve time if the input value had one.
158
+ if (oldValue && "hour" in oldValue) return oldValue.set(newValue);
159
+ return newValue;
160
+ }
161
+ function $9a36b6ba2fb1a7c5$var$nextUnavailableDate(anchorDate, state, dir) {
162
+ let nextDate = anchorDate.add({
163
+ days: dir
164
+ });
165
+ while((dir < 0 ? nextDate.compare(state.visibleRange.start) >= 0 : nextDate.compare(state.visibleRange.end) <= 0) && !state.isCellUnavailable(nextDate))nextDate = nextDate.add({
166
+ days: dir
167
+ });
168
+ if (state.isCellUnavailable(nextDate)) return nextDate.add({
169
+ days: -dir
170
+ });
171
+ return null;
172
+ }
173
+
174
+
175
+ export {$9a36b6ba2fb1a7c5$export$9a987164d97ecc90 as useRangeCalendarState};
176
+ //# sourceMappingURL=useRangeCalendarState.module.js.map
@@ -0,0 +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"}
@@ -0,0 +1,77 @@
1
+ var $i2P57$internationalizeddate = require("@internationalized/date");
2
+
3
+
4
+ function $parcel$export(e, n, v, s) {
5
+ Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
6
+ }
7
+
8
+ $parcel$export(module.exports, "isInvalid", () => $4301262d71f567b9$export$eac50920cf2fd59a);
9
+ $parcel$export(module.exports, "alignCenter", () => $4301262d71f567b9$export$f4a51ff076cc9a09);
10
+ $parcel$export(module.exports, "alignStart", () => $4301262d71f567b9$export$144a00ba6044eb9);
11
+ $parcel$export(module.exports, "constrainStart", () => $4301262d71f567b9$export$5bb865b12696a77d);
12
+ $parcel$export(module.exports, "alignEnd", () => $4301262d71f567b9$export$530edbfc915b2b04);
13
+ $parcel$export(module.exports, "constrainValue", () => $4301262d71f567b9$export$4f5203c0d889109e);
14
+ $parcel$export(module.exports, "previousAvailableDate", () => $4301262d71f567b9$export$a1d3911297b952d7);
15
+ /*
16
+ * Copyright 2020 Adobe. All rights reserved.
17
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
18
+ * you may not use this file except in compliance with the License. You may obtain a copy
19
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
20
+ *
21
+ * Unless required by applicable law or agreed to in writing, software distributed under
22
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
23
+ * OF ANY KIND, either express or implied. See the License for the specific language
24
+ * governing permissions and limitations under the License.
25
+ */
26
+ function $4301262d71f567b9$export$eac50920cf2fd59a(date, minValue, maxValue) {
27
+ return minValue != null && date.compare(minValue) < 0 || maxValue != null && date.compare(maxValue) > 0;
28
+ }
29
+ function $4301262d71f567b9$export$f4a51ff076cc9a09(date, duration, locale, minValue, maxValue) {
30
+ let halfDuration = {};
31
+ for(let key in duration){
32
+ halfDuration[key] = Math.floor(duration[key] / 2);
33
+ if (halfDuration[key] > 0 && duration[key] % 2 === 0) halfDuration[key]--;
34
+ }
35
+ let aligned = $4301262d71f567b9$export$144a00ba6044eb9(date, duration, locale).subtract(halfDuration);
36
+ return $4301262d71f567b9$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue);
37
+ }
38
+ function $4301262d71f567b9$export$144a00ba6044eb9(date, duration, locale, minValue, maxValue) {
39
+ // align to the start of the largest unit
40
+ let aligned = date;
41
+ if (duration.years) aligned = (0, $i2P57$internationalizeddate.startOfYear)(date);
42
+ else if (duration.months) aligned = (0, $i2P57$internationalizeddate.startOfMonth)(date);
43
+ else if (duration.weeks) aligned = (0, $i2P57$internationalizeddate.startOfWeek)(date, locale);
44
+ return $4301262d71f567b9$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue);
45
+ }
46
+ function $4301262d71f567b9$export$530edbfc915b2b04(date, duration, locale, minValue, maxValue) {
47
+ let d = {
48
+ ...duration
49
+ };
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--;
55
+ let aligned = $4301262d71f567b9$export$144a00ba6044eb9(date, duration, locale).subtract(d);
56
+ return $4301262d71f567b9$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue);
57
+ }
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));
61
+ return aligned;
62
+ }
63
+ 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));
66
+ return date;
67
+ }
68
+ function $4301262d71f567b9$export$a1d3911297b952d7(date, minValue, isDateUnavailable) {
69
+ if (!isDateUnavailable) return date;
70
+ while(date.compare(minValue) >= 0 && isDateUnavailable(date))date = date.subtract({
71
+ days: 1
72
+ });
73
+ if (date.compare(minValue) >= 0) return date;
74
+ }
75
+
76
+
77
+ //# sourceMappingURL=utils.main.js.map
@@ -0,0 +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"}
package/dist/utils.mjs ADDED
@@ -0,0 +1,66 @@
1
+ import {startOfYear as $k1D4u$startOfYear, startOfMonth as $k1D4u$startOfMonth, startOfWeek as $k1D4u$startOfWeek, maxDate as $k1D4u$maxDate, toCalendarDate as $k1D4u$toCalendarDate, minDate as $k1D4u$minDate} from "@internationalized/date";
2
+
3
+ /*
4
+ * Copyright 2020 Adobe. All rights reserved.
5
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License. You may obtain a copy
7
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under
10
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
11
+ * OF ANY KIND, either express or implied. See the License for the specific language
12
+ * governing permissions and limitations under the License.
13
+ */
14
+ function $f62d864046160412$export$eac50920cf2fd59a(date, minValue, maxValue) {
15
+ return minValue != null && date.compare(minValue) < 0 || maxValue != null && date.compare(maxValue) > 0;
16
+ }
17
+ function $f62d864046160412$export$f4a51ff076cc9a09(date, duration, locale, minValue, maxValue) {
18
+ let halfDuration = {};
19
+ for(let key in duration){
20
+ halfDuration[key] = Math.floor(duration[key] / 2);
21
+ if (halfDuration[key] > 0 && duration[key] % 2 === 0) halfDuration[key]--;
22
+ }
23
+ let aligned = $f62d864046160412$export$144a00ba6044eb9(date, duration, locale).subtract(halfDuration);
24
+ return $f62d864046160412$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue);
25
+ }
26
+ function $f62d864046160412$export$144a00ba6044eb9(date, duration, locale, minValue, maxValue) {
27
+ // align to the start of the largest unit
28
+ let aligned = date;
29
+ if (duration.years) aligned = (0, $k1D4u$startOfYear)(date);
30
+ else if (duration.months) aligned = (0, $k1D4u$startOfMonth)(date);
31
+ else if (duration.weeks) aligned = (0, $k1D4u$startOfWeek)(date, locale);
32
+ return $f62d864046160412$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue);
33
+ }
34
+ function $f62d864046160412$export$530edbfc915b2b04(date, duration, locale, minValue, maxValue) {
35
+ let d = {
36
+ ...duration
37
+ };
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--;
43
+ let aligned = $f62d864046160412$export$144a00ba6044eb9(date, duration, locale).subtract(d);
44
+ return $f62d864046160412$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue);
45
+ }
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));
49
+ return aligned;
50
+ }
51
+ 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));
54
+ return date;
55
+ }
56
+ function $f62d864046160412$export$a1d3911297b952d7(date, minValue, isDateUnavailable) {
57
+ if (!isDateUnavailable) return date;
58
+ while(date.compare(minValue) >= 0 && isDateUnavailable(date))date = date.subtract({
59
+ days: 1
60
+ });
61
+ if (date.compare(minValue) >= 0) return date;
62
+ }
63
+
64
+
65
+ export {$f62d864046160412$export$eac50920cf2fd59a as isInvalid, $f62d864046160412$export$f4a51ff076cc9a09 as alignCenter, $f62d864046160412$export$144a00ba6044eb9 as alignStart, $f62d864046160412$export$5bb865b12696a77d as constrainStart, $f62d864046160412$export$530edbfc915b2b04 as alignEnd, $f62d864046160412$export$4f5203c0d889109e as constrainValue, $f62d864046160412$export$a1d3911297b952d7 as previousAvailableDate};
66
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1,66 @@
1
+ import {startOfYear as $k1D4u$startOfYear, startOfMonth as $k1D4u$startOfMonth, startOfWeek as $k1D4u$startOfWeek, maxDate as $k1D4u$maxDate, toCalendarDate as $k1D4u$toCalendarDate, minDate as $k1D4u$minDate} from "@internationalized/date";
2
+
3
+ /*
4
+ * Copyright 2020 Adobe. All rights reserved.
5
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License. You may obtain a copy
7
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under
10
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
11
+ * OF ANY KIND, either express or implied. See the License for the specific language
12
+ * governing permissions and limitations under the License.
13
+ */
14
+ function $f62d864046160412$export$eac50920cf2fd59a(date, minValue, maxValue) {
15
+ return minValue != null && date.compare(minValue) < 0 || maxValue != null && date.compare(maxValue) > 0;
16
+ }
17
+ function $f62d864046160412$export$f4a51ff076cc9a09(date, duration, locale, minValue, maxValue) {
18
+ let halfDuration = {};
19
+ for(let key in duration){
20
+ halfDuration[key] = Math.floor(duration[key] / 2);
21
+ if (halfDuration[key] > 0 && duration[key] % 2 === 0) halfDuration[key]--;
22
+ }
23
+ let aligned = $f62d864046160412$export$144a00ba6044eb9(date, duration, locale).subtract(halfDuration);
24
+ return $f62d864046160412$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue);
25
+ }
26
+ function $f62d864046160412$export$144a00ba6044eb9(date, duration, locale, minValue, maxValue) {
27
+ // align to the start of the largest unit
28
+ let aligned = date;
29
+ if (duration.years) aligned = (0, $k1D4u$startOfYear)(date);
30
+ else if (duration.months) aligned = (0, $k1D4u$startOfMonth)(date);
31
+ else if (duration.weeks) aligned = (0, $k1D4u$startOfWeek)(date, locale);
32
+ return $f62d864046160412$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue);
33
+ }
34
+ function $f62d864046160412$export$530edbfc915b2b04(date, duration, locale, minValue, maxValue) {
35
+ let d = {
36
+ ...duration
37
+ };
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--;
43
+ let aligned = $f62d864046160412$export$144a00ba6044eb9(date, duration, locale).subtract(d);
44
+ return $f62d864046160412$export$5bb865b12696a77d(date, aligned, duration, locale, minValue, maxValue);
45
+ }
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));
49
+ return aligned;
50
+ }
51
+ 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));
54
+ return date;
55
+ }
56
+ function $f62d864046160412$export$a1d3911297b952d7(date, minValue, isDateUnavailable) {
57
+ if (!isDateUnavailable) return date;
58
+ while(date.compare(minValue) >= 0 && isDateUnavailable(date))date = date.subtract({
59
+ days: 1
60
+ });
61
+ if (date.compare(minValue) >= 0) return date;
62
+ }
63
+
64
+
65
+ export {$f62d864046160412$export$eac50920cf2fd59a as isInvalid, $f62d864046160412$export$f4a51ff076cc9a09 as alignCenter, $f62d864046160412$export$144a00ba6044eb9 as alignStart, $f62d864046160412$export$5bb865b12696a77d as constrainStart, $f62d864046160412$export$530edbfc915b2b04 as alignEnd, $f62d864046160412$export$4f5203c0d889109e as constrainValue, $f62d864046160412$export$a1d3911297b952d7 as previousAvailableDate};
66
+ //# sourceMappingURL=utils.module.js.map
@@ -0,0 +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"}