react-stately 3.49.0 → 3.51.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.
- package/dist/exports/useTokenFieldState.cjs.map +1 -1
- package/dist/exports/useTokenFieldState.js.map +1 -1
- package/dist/exports/useTokenFieldState.mjs.map +1 -1
- package/dist/private/calendar/useCalendarState.cjs +2 -1
- package/dist/private/calendar/useCalendarState.cjs.map +1 -1
- package/dist/private/calendar/useCalendarState.js +3 -2
- package/dist/private/calendar/useCalendarState.js.map +1 -1
- package/dist/private/calendar/useCalendarState.mjs +3 -2
- package/dist/private/calendar/useCalendarState.mjs.map +1 -1
- package/dist/private/color/Color.cjs +5 -3
- package/dist/private/color/Color.cjs.map +1 -1
- package/dist/private/color/Color.js +5 -3
- package/dist/private/color/Color.js.map +1 -1
- package/dist/private/color/Color.mjs +5 -3
- package/dist/private/color/Color.mjs.map +1 -1
- package/dist/private/combobox/useComboBoxState.cjs +15 -1
- package/dist/private/combobox/useComboBoxState.cjs.map +1 -1
- package/dist/private/combobox/useComboBoxState.js +16 -2
- package/dist/private/combobox/useComboBoxState.js.map +1 -1
- package/dist/private/combobox/useComboBoxState.mjs +16 -2
- package/dist/private/combobox/useComboBoxState.mjs.map +1 -1
- package/dist/private/data/useTreeData.cjs +7 -2
- package/dist/private/data/useTreeData.cjs.map +1 -1
- package/dist/private/data/useTreeData.js +9 -2
- package/dist/private/data/useTreeData.js.map +1 -1
- package/dist/private/data/useTreeData.mjs +7 -2
- package/dist/private/data/useTreeData.mjs.map +1 -1
- package/dist/private/layout/ListLayout.cjs +4 -0
- package/dist/private/layout/ListLayout.cjs.map +1 -1
- package/dist/private/layout/ListLayout.js +4 -0
- package/dist/private/layout/ListLayout.js.map +1 -1
- package/dist/private/layout/ListLayout.mjs +4 -0
- package/dist/private/layout/ListLayout.mjs.map +1 -1
- package/dist/private/tokenfield/TokenFieldValue.cjs +45 -15
- package/dist/private/tokenfield/TokenFieldValue.cjs.map +1 -1
- package/dist/private/tokenfield/TokenFieldValue.js +45 -17
- package/dist/private/tokenfield/TokenFieldValue.js.map +1 -1
- package/dist/private/tokenfield/TokenFieldValue.mjs +46 -16
- package/dist/private/tokenfield/TokenFieldValue.mjs.map +1 -1
- package/dist/private/tooltip/useTooltipTriggerState.cjs.map +1 -1
- package/dist/private/tooltip/useTooltipTriggerState.js.map +1 -1
- package/dist/private/tooltip/useTooltipTriggerState.mjs.map +1 -1
- package/dist/private/utils/useControlledState.cjs +1 -1
- package/dist/private/utils/useControlledState.cjs.map +1 -1
- package/dist/private/utils/useControlledState.js +1 -1
- package/dist/private/utils/useControlledState.js.map +1 -1
- package/dist/private/utils/useControlledState.mjs +1 -1
- package/dist/private/utils/useControlledState.mjs.map +1 -1
- package/dist/types/exports/useTokenFieldState.d.ts +1 -1
- package/dist/types/src/collections/Item.d.ts +1 -6
- package/dist/types/src/collections/Section.d.ts +1 -6
- package/dist/types/src/table/Cell.d.ts +0 -5
- package/dist/types/src/table/Column.d.ts +0 -7
- package/dist/types/src/table/Row.d.ts +0 -6
- package/dist/types/src/table/TableBody.d.ts +1 -6
- package/dist/types/src/table/TableHeader.d.ts +1 -7
- package/dist/types/src/tokenfield/TokenFieldValue.d.ts +27 -4
- package/dist/types/src/tooltip/useTooltipTriggerState.d.ts +2 -2
- package/package.json +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;;;AAAA;;;;;;;;;;CAUC","sources":["packages/react-stately/exports/useTokenFieldState.ts"],"sourcesContent":["/*\n * Copyright 2026 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\nexport {useTokenFieldState} from '../src/tokenfield/useTokenFieldState';\nexport {TokenFieldValue} from '../src/tokenfield/TokenFieldValue';\n\nexport type {TokenFieldProps, TokenFieldState} from '../src/tokenfield/useTokenFieldState';\nexport type {\n TokenFieldSegment,\n TokenSegment,\n TextSegment,\n Position,\n TokenFieldValueOptions\n} from '../src/tokenfield/TokenFieldValue';\n"],"names":[],"version":3,"file":"useTokenFieldState.cjs.map"}
|
|
1
|
+
{"mappings":";;;;;;;;;;AAAA;;;;;;;;;;CAUC","sources":["packages/react-stately/exports/useTokenFieldState.ts"],"sourcesContent":["/*\n * Copyright 2026 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\nexport {useTokenFieldState} from '../src/tokenfield/useTokenFieldState';\nexport {TokenFieldValue} from '../src/tokenfield/TokenFieldValue';\n\nexport type {TokenFieldProps, TokenFieldState} from '../src/tokenfield/useTokenFieldState';\nexport type {\n TokenFieldSegment,\n TokenSegment,\n TextSegment,\n Position,\n SelectedRange,\n TokenFieldValueOptions\n} from '../src/tokenfield/TokenFieldValue';\n"],"names":[],"version":3,"file":"useTokenFieldState.cjs.map"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;AAAA;;;;;;;;;;CAUC","sources":["packages/react-stately/exports/useTokenFieldState.ts"],"sourcesContent":["/*\n * Copyright 2026 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\nexport {useTokenFieldState} from '../src/tokenfield/useTokenFieldState';\nexport {TokenFieldValue} from '../src/tokenfield/TokenFieldValue';\n\nexport type {TokenFieldProps, TokenFieldState} from '../src/tokenfield/useTokenFieldState';\nexport type {\n TokenFieldSegment,\n TokenSegment,\n TextSegment,\n Position,\n TokenFieldValueOptions\n} from '../src/tokenfield/TokenFieldValue';\n"],"names":[],"version":3,"file":"useTokenFieldState.js.map"}
|
|
1
|
+
{"mappings":";;;AAAA;;;;;;;;;;CAUC","sources":["packages/react-stately/exports/useTokenFieldState.ts"],"sourcesContent":["/*\n * Copyright 2026 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\nexport {useTokenFieldState} from '../src/tokenfield/useTokenFieldState';\nexport {TokenFieldValue} from '../src/tokenfield/TokenFieldValue';\n\nexport type {TokenFieldProps, TokenFieldState} from '../src/tokenfield/useTokenFieldState';\nexport type {\n TokenFieldSegment,\n TokenSegment,\n TextSegment,\n Position,\n SelectedRange,\n TokenFieldValueOptions\n} from '../src/tokenfield/TokenFieldValue';\n"],"names":[],"version":3,"file":"useTokenFieldState.js.map"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;AAAA;;;;;;;;;;CAUC","sources":["packages/react-stately/exports/useTokenFieldState.ts"],"sourcesContent":["/*\n * Copyright 2026 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\nexport {useTokenFieldState} from '../src/tokenfield/useTokenFieldState';\nexport {TokenFieldValue} from '../src/tokenfield/TokenFieldValue';\n\nexport type {TokenFieldProps, TokenFieldState} from '../src/tokenfield/useTokenFieldState';\nexport type {\n TokenFieldSegment,\n TokenSegment,\n TextSegment,\n Position,\n TokenFieldValueOptions\n} from '../src/tokenfield/TokenFieldValue';\n"],"names":[],"version":3,"file":"useTokenFieldState.mjs.map"}
|
|
1
|
+
{"mappings":";;;AAAA;;;;;;;;;;CAUC","sources":["packages/react-stately/exports/useTokenFieldState.ts"],"sourcesContent":["/*\n * Copyright 2026 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\nexport {useTokenFieldState} from '../src/tokenfield/useTokenFieldState';\nexport {TokenFieldValue} from '../src/tokenfield/TokenFieldValue';\n\nexport type {TokenFieldProps, TokenFieldState} from '../src/tokenfield/useTokenFieldState';\nexport type {\n TokenFieldSegment,\n TokenSegment,\n TextSegment,\n Position,\n SelectedRange,\n TokenFieldValueOptions\n} from '../src/tokenfield/TokenFieldValue';\n"],"names":[],"version":3,"file":"useTokenFieldState.mjs.map"}
|
|
@@ -119,7 +119,8 @@ function $e247a673010dfa8e$export$6d095e787d2b5e1f(props) {
|
|
|
119
119
|
}
|
|
120
120
|
function normalizeValue(newValue) {
|
|
121
121
|
let constrained = (0, $8b8d004404afcaba$exports.constrainValue)(newValue, minValue, maxValue);
|
|
122
|
-
let
|
|
122
|
+
let lowerBound = minValue ?? (0, $9I0if$internationalizeddate.minDate)(constrained, startDate);
|
|
123
|
+
let prev = (0, $8b8d004404afcaba$exports.previousAvailableDate)(constrained, lowerBound, isDateUnavailable);
|
|
123
124
|
if (!prev) return null;
|
|
124
125
|
// The display calendar should not have any effect on the emitted value.
|
|
125
126
|
// Emit dates in the same calendar as the original value, if any, otherwise gregorian.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/react-stately/src/calendar/useCalendarState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n alignCenter,\n alignEnd,\n alignStart,\n constrainStart,\n constrainValue,\n isEqualDuration,\n isInvalid,\n previousAvailableDate\n} from './utils';\nimport {\n Calendar,\n CalendarDate,\n CalendarIdentifier,\n DateDuration,\n DateFormatter,\n endOfMonth,\n endOfWeek,\n getDayOfWeek,\n getWeeksInMonth,\n GregorianCalendar,\n isEqualCalendar,\n isSameDay,\n startOfMonth,\n startOfWeek,\n toCalendar,\n toCalendarDate,\n today\n} from '@internationalized/date';\nimport {\n CalendarPropsBase,\n CalendarSelectionMode,\n CalendarState,\n CalendarValueType,\n DateValue,\n MappedDateValue\n} from './types';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useMemo, useState} from 'react';\nimport {ValidationState, ValueBase} from '@react-types/shared';\n\nexport interface CalendarProps<T extends DateValue, M extends CalendarSelectionMode = 'single'>\n extends\n CalendarPropsBase,\n ValueBase<CalendarValueType<T | null, M>, CalendarValueType<MappedDateValue<T>, M>> {\n /**\n * Whether single or multiple selection is enabled.\n *\n * @default 'single'\n */\n selectionMode?: M;\n /**\n * Callback that is called for each date of the calendar. If it returns true, then the date is\n * unavailable.\n */\n isDateUnavailable?: (date: DateValue) => boolean;\n}\n\nexport interface CalendarStateOptions<\n T extends DateValue = DateValue,\n M extends CalendarSelectionMode = 'single'\n> extends CalendarProps<T, M> {\n /** The locale to display and edit the value according to. */\n locale: string;\n /**\n * A function that creates a [Calendar](../internationalized/date/Calendar.html)\n * object for a given calendar identifier. Such a function may be imported from the\n * `@internationalized/date` package, or manually implemented to include support for\n * only certain calendars.\n */\n createCalendar: (name: CalendarIdentifier) => Calendar;\n /**\n * The amount of days that will be displayed at once. This affects how pagination works.\n *\n * @default { months: 1 }\n */\n visibleDuration?: DateDuration;\n /**\n * Determines the alignment of the visible months on initial render based on the current selection\n * or current date if there is no selection.\n *\n * @default 'center'\n */\n selectionAlignment?: 'start' | 'center' | 'end';\n}\n/**\n * Provides state management for a calendar component.\n * A calendar displays one or more date grids and allows users to select a single date.\n */\nexport function useCalendarState<\n T extends DateValue = DateValue,\n M extends CalendarSelectionMode = 'single'\n>(props: CalendarStateOptions<T, M>): CalendarState<M> {\n let defaultFormatter = useMemo(() => new DateFormatter(props.locale), [props.locale]);\n let resolvedOptions = useMemo(() => defaultFormatter.resolvedOptions(), [defaultFormatter]);\n let {\n locale,\n createCalendar,\n visibleDuration = {months: 1},\n minValue,\n maxValue,\n selectionAlignment,\n isDateUnavailable,\n pageBehavior = 'visible',\n selectionMode = 'single' as M,\n firstDayOfWeek,\n weeksInMonth\n } = props;\n let calendar = useMemo(\n () => createCalendar(resolvedOptions.calendar as CalendarIdentifier),\n [createCalendar, resolvedOptions.calendar]\n );\n\n let [value, setControlledValue] = useControlledState<\n T | T[] | null,\n MappedDateValue<T> | MappedDateValue<T>[] | null\n >(props.value as any, (props.defaultValue as any) ?? null, props.onChange as any);\n let calendarDateValue = useMemo(() => {\n if (Array.isArray(value)) {\n return value.map(value => toCalendar(toCalendarDate(value), calendar));\n } else {\n return value ? toCalendar(toCalendarDate(value), calendar) : null;\n }\n }, [value, calendar]);\n let timeZone = useMemo(() => {\n let val = Array.isArray(value) ? value[0] : value;\n return val && 'timeZone' in val ? val.timeZone : resolvedOptions.timeZone;\n }, [value, resolvedOptions.timeZone]);\n let focusedCalendarDate = useMemo(\n () =>\n props.focusedValue\n ? constrainValue(\n toCalendar(toCalendarDate(props.focusedValue), calendar),\n minValue,\n maxValue\n )\n : undefined,\n [props.focusedValue, calendar, minValue, maxValue]\n );\n let defaultFocusedCalendarDate = useMemo(() => {\n if (props.defaultFocusedValue) {\n return constrainValue(\n toCalendar(toCalendarDate(props.defaultFocusedValue), calendar),\n minValue,\n maxValue\n );\n }\n\n if (calendarDateValue) {\n return constrainValue(\n Array.isArray(calendarDateValue) ? calendarDateValue[0] : calendarDateValue,\n minValue,\n maxValue\n );\n }\n\n return constrainValue(toCalendar(today(timeZone), calendar), minValue, maxValue);\n }, [props.defaultFocusedValue, calendarDateValue, timeZone, calendar, minValue, maxValue]);\n let [focusedDate, setFocusedDate] = useControlledState(\n focusedCalendarDate,\n defaultFocusedCalendarDate,\n props.onFocusChange\n );\n let getStartDate = () => {\n switch (selectionAlignment) {\n case 'start':\n return alignStart(focusedDate, visibleDuration, locale, minValue, maxValue);\n case 'end':\n return alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue);\n case 'center':\n default:\n return alignCenter(focusedDate, visibleDuration, locale, minValue, maxValue);\n }\n };\n\n let [startDate, setStartDate] = useState(getStartDate);\n let [isFocused, setFocused] = useState(props.autoFocus || false);\n\n let [lastVisibleDuration, setLastVisibleDuration] = useState(visibleDuration);\n if (!isEqualDuration(visibleDuration, lastVisibleDuration)) {\n setLastVisibleDuration(visibleDuration);\n setStartDate(getStartDate());\n }\n\n let endDate = useMemo(() => {\n let duration = {...visibleDuration};\n if (duration.days) {\n duration.days--;\n } else {\n duration.days = -1;\n }\n return startDate.add(duration);\n }, [startDate, visibleDuration]);\n\n // Reset focused date and visible range when calendar changes.\n let [lastCalendar, setLastCalendar] = useState(calendar);\n if (!isEqualCalendar(calendar, lastCalendar)) {\n let newFocusedDate = toCalendar(focusedDate, calendar);\n setStartDate(alignCenter(newFocusedDate, visibleDuration, locale, minValue, maxValue));\n setFocusedDate(newFocusedDate);\n setLastCalendar(calendar);\n }\n\n if (isInvalid(focusedDate, minValue, maxValue)) {\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n setFocusedDate(constrainValue(focusedDate, minValue, maxValue));\n } else if (focusedDate.compare(startDate) < 0) {\n setStartDate(alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue));\n } else if (focusedDate.compare(endDate) > 0) {\n setStartDate(alignStart(focusedDate, visibleDuration, locale, minValue, maxValue));\n }\n\n // Sets focus to a specific cell date\n function focusCell(date: CalendarDate) {\n date = constrainValue(date, minValue, maxValue);\n setFocusedDate(date);\n }\n\n function normalizeValue(newValue: CalendarDate) {\n let constrained = constrainValue(newValue, minValue, maxValue);\n let prev = previousAvailableDate(constrained, startDate, isDateUnavailable);\n if (!prev) {\n return null;\n }\n\n // The display calendar should not have any effect on the emitted value.\n // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n let baseValue = Array.isArray(value) ? value[0] : value;\n let calendarValue = toCalendar(prev, baseValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (baseValue && 'hour' in baseValue) {\n return baseValue.set(calendarValue) as T;\n }\n\n return calendarValue as T;\n }\n\n function setValue(newValue: CalendarDate | CalendarDate[] | null) {\n if (!props.isDisabled && !props.isReadOnly) {\n if (newValue === null) {\n setControlledValue(selectionMode === 'multiple' ? [] : null);\n return;\n }\n\n if (Array.isArray(newValue)) {\n setControlledValue(newValue.map(normalizeValue).filter(Boolean) as any);\n } else {\n let localValue = normalizeValue(newValue);\n if (localValue) {\n setControlledValue(localValue as any);\n }\n }\n }\n }\n\n let isUnavailable = useMemo(() => {\n if (!calendarDateValue) {\n return false;\n }\n\n if (Array.isArray(calendarDateValue)) {\n return calendarDateValue.some(\n date => isDateUnavailable?.(date) || isInvalid(date, minValue, maxValue)\n );\n }\n\n return (\n isDateUnavailable?.(calendarDateValue) || isInvalid(calendarDateValue, minValue, maxValue)\n );\n }, [calendarDateValue, isDateUnavailable, minValue, maxValue]);\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isUnavailable;\n let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n let pageDuration = useMemo(() => {\n if (pageBehavior === 'visible') {\n return visibleDuration;\n }\n\n return unitDuration(visibleDuration);\n }, [pageBehavior, visibleDuration]);\n\n return {\n isDisabled: props.isDisabled ?? false,\n isReadOnly: props.isReadOnly ?? false,\n value: calendarDateValue as any,\n setValue: setValue as any,\n selectionMode,\n visibleDuration,\n visibleRange: {\n start: startDate,\n end: endDate\n },\n minValue,\n maxValue,\n focusedDate,\n timeZone,\n validationState,\n isValueInvalid,\n setFocusedDate(date) {\n focusCell(date);\n },\n focusNextDay() {\n focusCell(focusedDate.add({days: 1}));\n },\n focusPreviousDay() {\n focusCell(focusedDate.subtract({days: 1}));\n },\n focusNextRow() {\n if (visibleDuration.days) {\n this.focusNextPage();\n } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.add({weeks: 1}));\n }\n },\n focusPreviousRow() {\n if (visibleDuration.days) {\n this.focusPreviousPage();\n } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.subtract({weeks: 1}));\n }\n },\n focusNextPage() {\n let start = startDate.add(pageDuration);\n setFocusedDate(constrainValue(focusedDate.add(pageDuration), minValue, maxValue));\n setStartDate(\n alignStart(\n constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n pageDuration,\n locale\n )\n );\n },\n focusPreviousPage() {\n let start = startDate.subtract(pageDuration);\n setFocusedDate(constrainValue(focusedDate.subtract(pageDuration), minValue, maxValue));\n setStartDate(\n alignStart(\n constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n pageDuration,\n locale\n )\n );\n },\n focusSectionStart() {\n if (visibleDuration.days) {\n focusCell(startDate);\n } else if (visibleDuration.weeks) {\n focusCell(startOfWeek(focusedDate, locale));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(startOfMonth(focusedDate));\n }\n },\n focusSectionEnd() {\n if (visibleDuration.days) {\n focusCell(endDate);\n } else if (visibleDuration.weeks) {\n focusCell(endOfWeek(focusedDate, locale));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(endOfMonth(focusedDate));\n }\n },\n focusNextSection(larger) {\n if (!larger && !visibleDuration.days) {\n focusCell(focusedDate.add(unitDuration(visibleDuration)));\n return;\n }\n\n if (visibleDuration.days) {\n this.focusNextPage();\n } else if (visibleDuration.weeks) {\n focusCell(focusedDate.add({months: 1}));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.add({years: 1}));\n }\n },\n focusPreviousSection(larger) {\n if (!larger && !visibleDuration.days) {\n focusCell(focusedDate.subtract(unitDuration(visibleDuration)));\n return;\n }\n\n if (visibleDuration.days) {\n this.focusPreviousPage();\n } else if (visibleDuration.weeks) {\n focusCell(focusedDate.subtract({months: 1}));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.subtract({years: 1}));\n }\n },\n selectFocusedDate() {\n if (!(isDateUnavailable && isDateUnavailable(focusedDate))) {\n this.selectDate(focusedDate);\n }\n },\n selectDate(date) {\n if (props.isDisabled || props.isReadOnly) {\n return;\n }\n\n if (selectionMode === 'multiple' && date != null) {\n let newDate = normalizeValue(date);\n if (!newDate) {\n return;\n }\n\n let baseValue: T[] = [];\n if (Array.isArray(value)) {\n baseValue = value;\n } else if (value != null) {\n baseValue = [value];\n }\n\n let index = baseValue.findIndex(value => isSameDay(value, newDate));\n let newValue =\n index >= 0\n ? baseValue.slice(0, index).concat(baseValue.slice(index + 1))\n : [...baseValue, newDate];\n setControlledValue(newValue);\n } else {\n setValue(date);\n }\n },\n isFocused,\n setFocused,\n isInvalid(date) {\n return isInvalid(date, minValue, maxValue);\n },\n isSelected(date) {\n if (!calendarDateValue || this.isCellDisabled(date) || this.isCellUnavailable(date)) {\n return false;\n }\n return Array.isArray(calendarDateValue)\n ? calendarDateValue.some(value => isSameDay(value, date))\n : isSameDay(date, calendarDateValue);\n },\n isCellFocused(date) {\n return isFocused && focusedDate && isSameDay(date, focusedDate);\n },\n isCellDisabled(date) {\n return (\n props.isDisabled ||\n date.compare(startDate) < 0 ||\n date.compare(endDate) > 0 ||\n this.isInvalid(date)\n );\n },\n isCellUnavailable(date) {\n return props.isDateUnavailable ? props.isDateUnavailable(date) : false;\n },\n isPreviousVisibleRangeInvalid() {\n let prev = startDate.subtract({days: 1});\n return isSameDay(prev, startDate) || this.isInvalid(prev);\n },\n isNextVisibleRangeInvalid() {\n // Adding may return the same date if we reached the end of time\n // according to the calendar system (e.g. 9999-12-31).\n let next = endDate.add({days: 1});\n return isSameDay(next, endDate) || this.isInvalid(next);\n },\n getDatesInWeek(weekIndex, from = startDate) {\n let date = from.add({weeks: weekIndex});\n let dates: (CalendarDate | null)[] = [];\n\n let days = visibleDuration.days && visibleDuration.days < 7 ? visibleDuration.days : 7;\n if (days === 7) {\n date = startOfWeek(date, locale, firstDayOfWeek);\n\n // startOfWeek will clamp dates within the calendar system's valid range, which may\n // start in the middle of a week. In this case, add null placeholders.\n let dayOfWeek = getDayOfWeek(date, locale, firstDayOfWeek);\n for (let i = 0; i < dayOfWeek; i++) {\n dates.push(null);\n }\n }\n\n while (dates.length < days) {\n dates.push(date);\n let nextDate = date.add({days: 1});\n if (isSameDay(date, nextDate)) {\n // If the next day is the same, we have hit the end of the calendar system.\n break;\n }\n date = nextDate;\n }\n\n // Add null placeholders if at the end of the calendar system.\n while (dates.length < days) {\n dates.push(null);\n }\n\n return dates;\n },\n getWeeksInMonth(date = startDate) {\n let weeks = weeksInMonth || getWeeksInMonth(date, locale, firstDayOfWeek);\n if (visibleDuration.weeks || visibleDuration.days) {\n weeks = visibleDuration.weeks ?? 0;\n if (visibleDuration.days) {\n weeks += Math.ceil(visibleDuration.days / 7);\n }\n }\n return weeks;\n }\n };\n}\n\nfunction unitDuration(duration: DateDuration) {\n let unit = {...duration};\n for (let key in duration) {\n unit[key] = 1;\n }\n return unit;\n}\n"],"names":[],"version":3,"file":"useCalendarState.cjs.map"}
|
|
1
|
+
{"mappings":"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","sources":["packages/react-stately/src/calendar/useCalendarState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n alignCenter,\n alignEnd,\n alignStart,\n constrainStart,\n constrainValue,\n isEqualDuration,\n isInvalid,\n previousAvailableDate\n} from './utils';\nimport {\n Calendar,\n CalendarDate,\n CalendarIdentifier,\n DateDuration,\n DateFormatter,\n endOfMonth,\n endOfWeek,\n getDayOfWeek,\n getWeeksInMonth,\n GregorianCalendar,\n isEqualCalendar,\n isSameDay,\n minDate,\n startOfMonth,\n startOfWeek,\n toCalendar,\n toCalendarDate,\n today\n} from '@internationalized/date';\nimport {\n CalendarPropsBase,\n CalendarSelectionMode,\n CalendarState,\n CalendarValueType,\n DateValue,\n MappedDateValue\n} from './types';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useMemo, useState} from 'react';\nimport {ValidationState, ValueBase} from '@react-types/shared';\n\nexport interface CalendarProps<T extends DateValue, M extends CalendarSelectionMode = 'single'>\n extends\n CalendarPropsBase,\n ValueBase<CalendarValueType<T | null, M>, CalendarValueType<MappedDateValue<T>, M>> {\n /**\n * Whether single or multiple selection is enabled.\n *\n * @default 'single'\n */\n selectionMode?: M;\n /**\n * Callback that is called for each date of the calendar. If it returns true, then the date is\n * unavailable.\n */\n isDateUnavailable?: (date: DateValue) => boolean;\n}\n\nexport interface CalendarStateOptions<\n T extends DateValue = DateValue,\n M extends CalendarSelectionMode = 'single'\n> extends CalendarProps<T, M> {\n /** The locale to display and edit the value according to. */\n locale: string;\n /**\n * A function that creates a [Calendar](../internationalized/date/Calendar.html)\n * object for a given calendar identifier. Such a function may be imported from the\n * `@internationalized/date` package, or manually implemented to include support for\n * only certain calendars.\n */\n createCalendar: (name: CalendarIdentifier) => Calendar;\n /**\n * The amount of days that will be displayed at once. This affects how pagination works.\n *\n * @default { months: 1 }\n */\n visibleDuration?: DateDuration;\n /**\n * Determines the alignment of the visible months on initial render based on the current selection\n * or current date if there is no selection.\n *\n * @default 'center'\n */\n selectionAlignment?: 'start' | 'center' | 'end';\n}\n/**\n * Provides state management for a calendar component.\n * A calendar displays one or more date grids and allows users to select a single date.\n */\nexport function useCalendarState<\n T extends DateValue = DateValue,\n M extends CalendarSelectionMode = 'single'\n>(props: CalendarStateOptions<T, M>): CalendarState<M> {\n let defaultFormatter = useMemo(() => new DateFormatter(props.locale), [props.locale]);\n let resolvedOptions = useMemo(() => defaultFormatter.resolvedOptions(), [defaultFormatter]);\n let {\n locale,\n createCalendar,\n visibleDuration = {months: 1},\n minValue,\n maxValue,\n selectionAlignment,\n isDateUnavailable,\n pageBehavior = 'visible',\n selectionMode = 'single' as M,\n firstDayOfWeek,\n weeksInMonth\n } = props;\n let calendar = useMemo(\n () => createCalendar(resolvedOptions.calendar as CalendarIdentifier),\n [createCalendar, resolvedOptions.calendar]\n );\n\n let [value, setControlledValue] = useControlledState<\n T | T[] | null,\n MappedDateValue<T> | MappedDateValue<T>[] | null\n >(props.value as any, (props.defaultValue as any) ?? null, props.onChange as any);\n let calendarDateValue = useMemo(() => {\n if (Array.isArray(value)) {\n return value.map(value => toCalendar(toCalendarDate(value), calendar));\n } else {\n return value ? toCalendar(toCalendarDate(value), calendar) : null;\n }\n }, [value, calendar]);\n let timeZone = useMemo(() => {\n let val = Array.isArray(value) ? value[0] : value;\n return val && 'timeZone' in val ? val.timeZone : resolvedOptions.timeZone;\n }, [value, resolvedOptions.timeZone]);\n let focusedCalendarDate = useMemo(\n () =>\n props.focusedValue\n ? constrainValue(\n toCalendar(toCalendarDate(props.focusedValue), calendar),\n minValue,\n maxValue\n )\n : undefined,\n [props.focusedValue, calendar, minValue, maxValue]\n );\n let defaultFocusedCalendarDate = useMemo(() => {\n if (props.defaultFocusedValue) {\n return constrainValue(\n toCalendar(toCalendarDate(props.defaultFocusedValue), calendar),\n minValue,\n maxValue\n );\n }\n\n if (calendarDateValue) {\n return constrainValue(\n Array.isArray(calendarDateValue) ? calendarDateValue[0] : calendarDateValue,\n minValue,\n maxValue\n );\n }\n\n return constrainValue(toCalendar(today(timeZone), calendar), minValue, maxValue);\n }, [props.defaultFocusedValue, calendarDateValue, timeZone, calendar, minValue, maxValue]);\n let [focusedDate, setFocusedDate] = useControlledState(\n focusedCalendarDate,\n defaultFocusedCalendarDate,\n props.onFocusChange\n );\n let getStartDate = () => {\n switch (selectionAlignment) {\n case 'start':\n return alignStart(focusedDate, visibleDuration, locale, minValue, maxValue);\n case 'end':\n return alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue);\n case 'center':\n default:\n return alignCenter(focusedDate, visibleDuration, locale, minValue, maxValue);\n }\n };\n\n let [startDate, setStartDate] = useState(getStartDate);\n let [isFocused, setFocused] = useState(props.autoFocus || false);\n\n let [lastVisibleDuration, setLastVisibleDuration] = useState(visibleDuration);\n if (!isEqualDuration(visibleDuration, lastVisibleDuration)) {\n setLastVisibleDuration(visibleDuration);\n setStartDate(getStartDate());\n }\n\n let endDate = useMemo(() => {\n let duration = {...visibleDuration};\n if (duration.days) {\n duration.days--;\n } else {\n duration.days = -1;\n }\n return startDate.add(duration);\n }, [startDate, visibleDuration]);\n\n // Reset focused date and visible range when calendar changes.\n let [lastCalendar, setLastCalendar] = useState(calendar);\n if (!isEqualCalendar(calendar, lastCalendar)) {\n let newFocusedDate = toCalendar(focusedDate, calendar);\n setStartDate(alignCenter(newFocusedDate, visibleDuration, locale, minValue, maxValue));\n setFocusedDate(newFocusedDate);\n setLastCalendar(calendar);\n }\n\n if (isInvalid(focusedDate, minValue, maxValue)) {\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n setFocusedDate(constrainValue(focusedDate, minValue, maxValue));\n } else if (focusedDate.compare(startDate) < 0) {\n setStartDate(alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue));\n } else if (focusedDate.compare(endDate) > 0) {\n setStartDate(alignStart(focusedDate, visibleDuration, locale, minValue, maxValue));\n }\n\n // Sets focus to a specific cell date\n function focusCell(date: CalendarDate) {\n date = constrainValue(date, minValue, maxValue);\n setFocusedDate(date);\n }\n\n function normalizeValue(newValue: CalendarDate) {\n let constrained = constrainValue(newValue, minValue, maxValue);\n let lowerBound = minValue ?? minDate(constrained, startDate);\n let prev = previousAvailableDate(constrained, lowerBound, isDateUnavailable);\n if (!prev) {\n return null;\n }\n\n // The display calendar should not have any effect on the emitted value.\n // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n let baseValue = Array.isArray(value) ? value[0] : value;\n let calendarValue = toCalendar(prev, baseValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (baseValue && 'hour' in baseValue) {\n return baseValue.set(calendarValue) as T;\n }\n\n return calendarValue as T;\n }\n\n function setValue(newValue: CalendarDate | CalendarDate[] | null) {\n if (!props.isDisabled && !props.isReadOnly) {\n if (newValue === null) {\n setControlledValue(selectionMode === 'multiple' ? [] : null);\n return;\n }\n\n if (Array.isArray(newValue)) {\n setControlledValue(newValue.map(normalizeValue).filter(Boolean) as any);\n } else {\n let localValue = normalizeValue(newValue);\n if (localValue) {\n setControlledValue(localValue as any);\n }\n }\n }\n }\n\n let isUnavailable = useMemo(() => {\n if (!calendarDateValue) {\n return false;\n }\n\n if (Array.isArray(calendarDateValue)) {\n return calendarDateValue.some(\n date => isDateUnavailable?.(date) || isInvalid(date, minValue, maxValue)\n );\n }\n\n return (\n isDateUnavailable?.(calendarDateValue) || isInvalid(calendarDateValue, minValue, maxValue)\n );\n }, [calendarDateValue, isDateUnavailable, minValue, maxValue]);\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isUnavailable;\n let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n let pageDuration = useMemo(() => {\n if (pageBehavior === 'visible') {\n return visibleDuration;\n }\n\n return unitDuration(visibleDuration);\n }, [pageBehavior, visibleDuration]);\n\n return {\n isDisabled: props.isDisabled ?? false,\n isReadOnly: props.isReadOnly ?? false,\n value: calendarDateValue as any,\n setValue: setValue as any,\n selectionMode,\n visibleDuration,\n visibleRange: {\n start: startDate,\n end: endDate\n },\n minValue,\n maxValue,\n focusedDate,\n timeZone,\n validationState,\n isValueInvalid,\n setFocusedDate(date) {\n focusCell(date);\n },\n focusNextDay() {\n focusCell(focusedDate.add({days: 1}));\n },\n focusPreviousDay() {\n focusCell(focusedDate.subtract({days: 1}));\n },\n focusNextRow() {\n if (visibleDuration.days) {\n this.focusNextPage();\n } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.add({weeks: 1}));\n }\n },\n focusPreviousRow() {\n if (visibleDuration.days) {\n this.focusPreviousPage();\n } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.subtract({weeks: 1}));\n }\n },\n focusNextPage() {\n let start = startDate.add(pageDuration);\n setFocusedDate(constrainValue(focusedDate.add(pageDuration), minValue, maxValue));\n setStartDate(\n alignStart(\n constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n pageDuration,\n locale\n )\n );\n },\n focusPreviousPage() {\n let start = startDate.subtract(pageDuration);\n setFocusedDate(constrainValue(focusedDate.subtract(pageDuration), minValue, maxValue));\n setStartDate(\n alignStart(\n constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n pageDuration,\n locale\n )\n );\n },\n focusSectionStart() {\n if (visibleDuration.days) {\n focusCell(startDate);\n } else if (visibleDuration.weeks) {\n focusCell(startOfWeek(focusedDate, locale));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(startOfMonth(focusedDate));\n }\n },\n focusSectionEnd() {\n if (visibleDuration.days) {\n focusCell(endDate);\n } else if (visibleDuration.weeks) {\n focusCell(endOfWeek(focusedDate, locale));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(endOfMonth(focusedDate));\n }\n },\n focusNextSection(larger) {\n if (!larger && !visibleDuration.days) {\n focusCell(focusedDate.add(unitDuration(visibleDuration)));\n return;\n }\n\n if (visibleDuration.days) {\n this.focusNextPage();\n } else if (visibleDuration.weeks) {\n focusCell(focusedDate.add({months: 1}));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.add({years: 1}));\n }\n },\n focusPreviousSection(larger) {\n if (!larger && !visibleDuration.days) {\n focusCell(focusedDate.subtract(unitDuration(visibleDuration)));\n return;\n }\n\n if (visibleDuration.days) {\n this.focusPreviousPage();\n } else if (visibleDuration.weeks) {\n focusCell(focusedDate.subtract({months: 1}));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.subtract({years: 1}));\n }\n },\n selectFocusedDate() {\n if (!(isDateUnavailable && isDateUnavailable(focusedDate))) {\n this.selectDate(focusedDate);\n }\n },\n selectDate(date) {\n if (props.isDisabled || props.isReadOnly) {\n return;\n }\n\n if (selectionMode === 'multiple' && date != null) {\n let newDate = normalizeValue(date);\n if (!newDate) {\n return;\n }\n\n let baseValue: T[] = [];\n if (Array.isArray(value)) {\n baseValue = value;\n } else if (value != null) {\n baseValue = [value];\n }\n\n let index = baseValue.findIndex(value => isSameDay(value, newDate));\n let newValue =\n index >= 0\n ? baseValue.slice(0, index).concat(baseValue.slice(index + 1))\n : [...baseValue, newDate];\n setControlledValue(newValue);\n } else {\n setValue(date);\n }\n },\n isFocused,\n setFocused,\n isInvalid(date) {\n return isInvalid(date, minValue, maxValue);\n },\n isSelected(date) {\n if (!calendarDateValue || this.isCellDisabled(date) || this.isCellUnavailable(date)) {\n return false;\n }\n return Array.isArray(calendarDateValue)\n ? calendarDateValue.some(value => isSameDay(value, date))\n : isSameDay(date, calendarDateValue);\n },\n isCellFocused(date) {\n return isFocused && focusedDate && isSameDay(date, focusedDate);\n },\n isCellDisabled(date) {\n return (\n props.isDisabled ||\n date.compare(startDate) < 0 ||\n date.compare(endDate) > 0 ||\n this.isInvalid(date)\n );\n },\n isCellUnavailable(date) {\n return props.isDateUnavailable ? props.isDateUnavailable(date) : false;\n },\n isPreviousVisibleRangeInvalid() {\n let prev = startDate.subtract({days: 1});\n return isSameDay(prev, startDate) || this.isInvalid(prev);\n },\n isNextVisibleRangeInvalid() {\n // Adding may return the same date if we reached the end of time\n // according to the calendar system (e.g. 9999-12-31).\n let next = endDate.add({days: 1});\n return isSameDay(next, endDate) || this.isInvalid(next);\n },\n getDatesInWeek(weekIndex, from = startDate) {\n let date = from.add({weeks: weekIndex});\n let dates: (CalendarDate | null)[] = [];\n\n let days = visibleDuration.days && visibleDuration.days < 7 ? visibleDuration.days : 7;\n if (days === 7) {\n date = startOfWeek(date, locale, firstDayOfWeek);\n\n // startOfWeek will clamp dates within the calendar system's valid range, which may\n // start in the middle of a week. In this case, add null placeholders.\n let dayOfWeek = getDayOfWeek(date, locale, firstDayOfWeek);\n for (let i = 0; i < dayOfWeek; i++) {\n dates.push(null);\n }\n }\n\n while (dates.length < days) {\n dates.push(date);\n let nextDate = date.add({days: 1});\n if (isSameDay(date, nextDate)) {\n // If the next day is the same, we have hit the end of the calendar system.\n break;\n }\n date = nextDate;\n }\n\n // Add null placeholders if at the end of the calendar system.\n while (dates.length < days) {\n dates.push(null);\n }\n\n return dates;\n },\n getWeeksInMonth(date = startDate) {\n let weeks = weeksInMonth || getWeeksInMonth(date, locale, firstDayOfWeek);\n if (visibleDuration.weeks || visibleDuration.days) {\n weeks = visibleDuration.weeks ?? 0;\n if (visibleDuration.days) {\n weeks += Math.ceil(visibleDuration.days / 7);\n }\n }\n return weeks;\n }\n };\n}\n\nfunction unitDuration(duration: DateDuration) {\n let unit = {...duration};\n for (let key in duration) {\n unit[key] = 1;\n }\n return unit;\n}\n"],"names":[],"version":3,"file":"useCalendarState.cjs.map"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {alignCenter as $4f2e4d26acdebef8$export$f4a51ff076cc9a09, alignEnd as $4f2e4d26acdebef8$export$530edbfc915b2b04, alignStart as $4f2e4d26acdebef8$export$144a00ba6044eb9, constrainStart as $4f2e4d26acdebef8$export$5bb865b12696a77d, constrainValue as $4f2e4d26acdebef8$export$4f5203c0d889109e, isEqualDuration as $4f2e4d26acdebef8$export$6595e603c409b4b8, isInvalid as $4f2e4d26acdebef8$export$eac50920cf2fd59a, previousAvailableDate as $4f2e4d26acdebef8$export$a1d3911297b952d7} from "./utils.js";
|
|
2
2
|
import {useControlledState as $2a35a170cf8e413e$export$40bfa8c7b0832715} from "../utils/useControlledState.js";
|
|
3
|
-
import {DateFormatter as $5WOJq$DateFormatter, toCalendar as $5WOJq$toCalendar, toCalendarDate as $5WOJq$toCalendarDate, today as $5WOJq$today, isEqualCalendar as $5WOJq$isEqualCalendar, GregorianCalendar as $5WOJq$GregorianCalendar, startOfWeek as $5WOJq$startOfWeek, startOfMonth as $5WOJq$startOfMonth, endOfWeek as $5WOJq$endOfWeek, endOfMonth as $5WOJq$endOfMonth, isSameDay as $5WOJq$isSameDay, getDayOfWeek as $5WOJq$getDayOfWeek, getWeeksInMonth as $5WOJq$getWeeksInMonth} from "@internationalized/date";
|
|
3
|
+
import {DateFormatter as $5WOJq$DateFormatter, toCalendar as $5WOJq$toCalendar, toCalendarDate as $5WOJq$toCalendarDate, today as $5WOJq$today, isEqualCalendar as $5WOJq$isEqualCalendar, minDate as $5WOJq$minDate, GregorianCalendar as $5WOJq$GregorianCalendar, startOfWeek as $5WOJq$startOfWeek, startOfMonth as $5WOJq$startOfMonth, endOfWeek as $5WOJq$endOfWeek, endOfMonth as $5WOJq$endOfMonth, isSameDay as $5WOJq$isSameDay, getDayOfWeek as $5WOJq$getDayOfWeek, getWeeksInMonth as $5WOJq$getWeeksInMonth} from "@internationalized/date";
|
|
4
4
|
import {useMemo as $5WOJq$useMemo, useState as $5WOJq$useState} from "react";
|
|
5
5
|
|
|
6
6
|
/*
|
|
@@ -114,7 +114,8 @@ function $2ff2cc7e373be77a$export$6d095e787d2b5e1f(props) {
|
|
|
114
114
|
}
|
|
115
115
|
function normalizeValue(newValue) {
|
|
116
116
|
let constrained = (0, $4f2e4d26acdebef8$export$4f5203c0d889109e)(newValue, minValue, maxValue);
|
|
117
|
-
let
|
|
117
|
+
let lowerBound = minValue !== null && minValue !== void 0 ? minValue : (0, $5WOJq$minDate)(constrained, startDate);
|
|
118
|
+
let prev = (0, $4f2e4d26acdebef8$export$a1d3911297b952d7)(constrained, lowerBound, isDateUnavailable);
|
|
118
119
|
if (!prev) return null;
|
|
119
120
|
// The display calendar should not have any effect on the emitted value.
|
|
120
121
|
// Emit dates in the same calendar as the original value, if any, otherwise gregorian.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/react-stately/src/calendar/useCalendarState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n alignCenter,\n alignEnd,\n alignStart,\n constrainStart,\n constrainValue,\n isEqualDuration,\n isInvalid,\n previousAvailableDate\n} from './utils';\nimport {\n Calendar,\n CalendarDate,\n CalendarIdentifier,\n DateDuration,\n DateFormatter,\n endOfMonth,\n endOfWeek,\n getDayOfWeek,\n getWeeksInMonth,\n GregorianCalendar,\n isEqualCalendar,\n isSameDay,\n startOfMonth,\n startOfWeek,\n toCalendar,\n toCalendarDate,\n today\n} from '@internationalized/date';\nimport {\n CalendarPropsBase,\n CalendarSelectionMode,\n CalendarState,\n CalendarValueType,\n DateValue,\n MappedDateValue\n} from './types';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useMemo, useState} from 'react';\nimport {ValidationState, ValueBase} from '@react-types/shared';\n\nexport interface CalendarProps<T extends DateValue, M extends CalendarSelectionMode = 'single'>\n extends\n CalendarPropsBase,\n ValueBase<CalendarValueType<T | null, M>, CalendarValueType<MappedDateValue<T>, M>> {\n /**\n * Whether single or multiple selection is enabled.\n *\n * @default 'single'\n */\n selectionMode?: M;\n /**\n * Callback that is called for each date of the calendar. If it returns true, then the date is\n * unavailable.\n */\n isDateUnavailable?: (date: DateValue) => boolean;\n}\n\nexport interface CalendarStateOptions<\n T extends DateValue = DateValue,\n M extends CalendarSelectionMode = 'single'\n> extends CalendarProps<T, M> {\n /** The locale to display and edit the value according to. */\n locale: string;\n /**\n * A function that creates a [Calendar](../internationalized/date/Calendar.html)\n * object for a given calendar identifier. Such a function may be imported from the\n * `@internationalized/date` package, or manually implemented to include support for\n * only certain calendars.\n */\n createCalendar: (name: CalendarIdentifier) => Calendar;\n /**\n * The amount of days that will be displayed at once. This affects how pagination works.\n *\n * @default { months: 1 }\n */\n visibleDuration?: DateDuration;\n /**\n * Determines the alignment of the visible months on initial render based on the current selection\n * or current date if there is no selection.\n *\n * @default 'center'\n */\n selectionAlignment?: 'start' | 'center' | 'end';\n}\n/**\n * Provides state management for a calendar component.\n * A calendar displays one or more date grids and allows users to select a single date.\n */\nexport function useCalendarState<\n T extends DateValue = DateValue,\n M extends CalendarSelectionMode = 'single'\n>(props: CalendarStateOptions<T, M>): CalendarState<M> {\n let defaultFormatter = useMemo(() => new DateFormatter(props.locale), [props.locale]);\n let resolvedOptions = useMemo(() => defaultFormatter.resolvedOptions(), [defaultFormatter]);\n let {\n locale,\n createCalendar,\n visibleDuration = {months: 1},\n minValue,\n maxValue,\n selectionAlignment,\n isDateUnavailable,\n pageBehavior = 'visible',\n selectionMode = 'single' as M,\n firstDayOfWeek,\n weeksInMonth\n } = props;\n let calendar = useMemo(\n () => createCalendar(resolvedOptions.calendar as CalendarIdentifier),\n [createCalendar, resolvedOptions.calendar]\n );\n\n let [value, setControlledValue] = useControlledState<\n T | T[] | null,\n MappedDateValue<T> | MappedDateValue<T>[] | null\n >(props.value as any, (props.defaultValue as any) ?? null, props.onChange as any);\n let calendarDateValue = useMemo(() => {\n if (Array.isArray(value)) {\n return value.map(value => toCalendar(toCalendarDate(value), calendar));\n } else {\n return value ? toCalendar(toCalendarDate(value), calendar) : null;\n }\n }, [value, calendar]);\n let timeZone = useMemo(() => {\n let val = Array.isArray(value) ? value[0] : value;\n return val && 'timeZone' in val ? val.timeZone : resolvedOptions.timeZone;\n }, [value, resolvedOptions.timeZone]);\n let focusedCalendarDate = useMemo(\n () =>\n props.focusedValue\n ? constrainValue(\n toCalendar(toCalendarDate(props.focusedValue), calendar),\n minValue,\n maxValue\n )\n : undefined,\n [props.focusedValue, calendar, minValue, maxValue]\n );\n let defaultFocusedCalendarDate = useMemo(() => {\n if (props.defaultFocusedValue) {\n return constrainValue(\n toCalendar(toCalendarDate(props.defaultFocusedValue), calendar),\n minValue,\n maxValue\n );\n }\n\n if (calendarDateValue) {\n return constrainValue(\n Array.isArray(calendarDateValue) ? calendarDateValue[0] : calendarDateValue,\n minValue,\n maxValue\n );\n }\n\n return constrainValue(toCalendar(today(timeZone), calendar), minValue, maxValue);\n }, [props.defaultFocusedValue, calendarDateValue, timeZone, calendar, minValue, maxValue]);\n let [focusedDate, setFocusedDate] = useControlledState(\n focusedCalendarDate,\n defaultFocusedCalendarDate,\n props.onFocusChange\n );\n let getStartDate = () => {\n switch (selectionAlignment) {\n case 'start':\n return alignStart(focusedDate, visibleDuration, locale, minValue, maxValue);\n case 'end':\n return alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue);\n case 'center':\n default:\n return alignCenter(focusedDate, visibleDuration, locale, minValue, maxValue);\n }\n };\n\n let [startDate, setStartDate] = useState(getStartDate);\n let [isFocused, setFocused] = useState(props.autoFocus || false);\n\n let [lastVisibleDuration, setLastVisibleDuration] = useState(visibleDuration);\n if (!isEqualDuration(visibleDuration, lastVisibleDuration)) {\n setLastVisibleDuration(visibleDuration);\n setStartDate(getStartDate());\n }\n\n let endDate = useMemo(() => {\n let duration = {...visibleDuration};\n if (duration.days) {\n duration.days--;\n } else {\n duration.days = -1;\n }\n return startDate.add(duration);\n }, [startDate, visibleDuration]);\n\n // Reset focused date and visible range when calendar changes.\n let [lastCalendar, setLastCalendar] = useState(calendar);\n if (!isEqualCalendar(calendar, lastCalendar)) {\n let newFocusedDate = toCalendar(focusedDate, calendar);\n setStartDate(alignCenter(newFocusedDate, visibleDuration, locale, minValue, maxValue));\n setFocusedDate(newFocusedDate);\n setLastCalendar(calendar);\n }\n\n if (isInvalid(focusedDate, minValue, maxValue)) {\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n setFocusedDate(constrainValue(focusedDate, minValue, maxValue));\n } else if (focusedDate.compare(startDate) < 0) {\n setStartDate(alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue));\n } else if (focusedDate.compare(endDate) > 0) {\n setStartDate(alignStart(focusedDate, visibleDuration, locale, minValue, maxValue));\n }\n\n // Sets focus to a specific cell date\n function focusCell(date: CalendarDate) {\n date = constrainValue(date, minValue, maxValue);\n setFocusedDate(date);\n }\n\n function normalizeValue(newValue: CalendarDate) {\n let constrained = constrainValue(newValue, minValue, maxValue);\n let prev = previousAvailableDate(constrained, startDate, isDateUnavailable);\n if (!prev) {\n return null;\n }\n\n // The display calendar should not have any effect on the emitted value.\n // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n let baseValue = Array.isArray(value) ? value[0] : value;\n let calendarValue = toCalendar(prev, baseValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (baseValue && 'hour' in baseValue) {\n return baseValue.set(calendarValue) as T;\n }\n\n return calendarValue as T;\n }\n\n function setValue(newValue: CalendarDate | CalendarDate[] | null) {\n if (!props.isDisabled && !props.isReadOnly) {\n if (newValue === null) {\n setControlledValue(selectionMode === 'multiple' ? [] : null);\n return;\n }\n\n if (Array.isArray(newValue)) {\n setControlledValue(newValue.map(normalizeValue).filter(Boolean) as any);\n } else {\n let localValue = normalizeValue(newValue);\n if (localValue) {\n setControlledValue(localValue as any);\n }\n }\n }\n }\n\n let isUnavailable = useMemo(() => {\n if (!calendarDateValue) {\n return false;\n }\n\n if (Array.isArray(calendarDateValue)) {\n return calendarDateValue.some(\n date => isDateUnavailable?.(date) || isInvalid(date, minValue, maxValue)\n );\n }\n\n return (\n isDateUnavailable?.(calendarDateValue) || isInvalid(calendarDateValue, minValue, maxValue)\n );\n }, [calendarDateValue, isDateUnavailable, minValue, maxValue]);\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isUnavailable;\n let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n let pageDuration = useMemo(() => {\n if (pageBehavior === 'visible') {\n return visibleDuration;\n }\n\n return unitDuration(visibleDuration);\n }, [pageBehavior, visibleDuration]);\n\n return {\n isDisabled: props.isDisabled ?? false,\n isReadOnly: props.isReadOnly ?? false,\n value: calendarDateValue as any,\n setValue: setValue as any,\n selectionMode,\n visibleDuration,\n visibleRange: {\n start: startDate,\n end: endDate\n },\n minValue,\n maxValue,\n focusedDate,\n timeZone,\n validationState,\n isValueInvalid,\n setFocusedDate(date) {\n focusCell(date);\n },\n focusNextDay() {\n focusCell(focusedDate.add({days: 1}));\n },\n focusPreviousDay() {\n focusCell(focusedDate.subtract({days: 1}));\n },\n focusNextRow() {\n if (visibleDuration.days) {\n this.focusNextPage();\n } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.add({weeks: 1}));\n }\n },\n focusPreviousRow() {\n if (visibleDuration.days) {\n this.focusPreviousPage();\n } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.subtract({weeks: 1}));\n }\n },\n focusNextPage() {\n let start = startDate.add(pageDuration);\n setFocusedDate(constrainValue(focusedDate.add(pageDuration), minValue, maxValue));\n setStartDate(\n alignStart(\n constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n pageDuration,\n locale\n )\n );\n },\n focusPreviousPage() {\n let start = startDate.subtract(pageDuration);\n setFocusedDate(constrainValue(focusedDate.subtract(pageDuration), minValue, maxValue));\n setStartDate(\n alignStart(\n constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n pageDuration,\n locale\n )\n );\n },\n focusSectionStart() {\n if (visibleDuration.days) {\n focusCell(startDate);\n } else if (visibleDuration.weeks) {\n focusCell(startOfWeek(focusedDate, locale));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(startOfMonth(focusedDate));\n }\n },\n focusSectionEnd() {\n if (visibleDuration.days) {\n focusCell(endDate);\n } else if (visibleDuration.weeks) {\n focusCell(endOfWeek(focusedDate, locale));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(endOfMonth(focusedDate));\n }\n },\n focusNextSection(larger) {\n if (!larger && !visibleDuration.days) {\n focusCell(focusedDate.add(unitDuration(visibleDuration)));\n return;\n }\n\n if (visibleDuration.days) {\n this.focusNextPage();\n } else if (visibleDuration.weeks) {\n focusCell(focusedDate.add({months: 1}));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.add({years: 1}));\n }\n },\n focusPreviousSection(larger) {\n if (!larger && !visibleDuration.days) {\n focusCell(focusedDate.subtract(unitDuration(visibleDuration)));\n return;\n }\n\n if (visibleDuration.days) {\n this.focusPreviousPage();\n } else if (visibleDuration.weeks) {\n focusCell(focusedDate.subtract({months: 1}));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.subtract({years: 1}));\n }\n },\n selectFocusedDate() {\n if (!(isDateUnavailable && isDateUnavailable(focusedDate))) {\n this.selectDate(focusedDate);\n }\n },\n selectDate(date) {\n if (props.isDisabled || props.isReadOnly) {\n return;\n }\n\n if (selectionMode === 'multiple' && date != null) {\n let newDate = normalizeValue(date);\n if (!newDate) {\n return;\n }\n\n let baseValue: T[] = [];\n if (Array.isArray(value)) {\n baseValue = value;\n } else if (value != null) {\n baseValue = [value];\n }\n\n let index = baseValue.findIndex(value => isSameDay(value, newDate));\n let newValue =\n index >= 0\n ? baseValue.slice(0, index).concat(baseValue.slice(index + 1))\n : [...baseValue, newDate];\n setControlledValue(newValue);\n } else {\n setValue(date);\n }\n },\n isFocused,\n setFocused,\n isInvalid(date) {\n return isInvalid(date, minValue, maxValue);\n },\n isSelected(date) {\n if (!calendarDateValue || this.isCellDisabled(date) || this.isCellUnavailable(date)) {\n return false;\n }\n return Array.isArray(calendarDateValue)\n ? calendarDateValue.some(value => isSameDay(value, date))\n : isSameDay(date, calendarDateValue);\n },\n isCellFocused(date) {\n return isFocused && focusedDate && isSameDay(date, focusedDate);\n },\n isCellDisabled(date) {\n return (\n props.isDisabled ||\n date.compare(startDate) < 0 ||\n date.compare(endDate) > 0 ||\n this.isInvalid(date)\n );\n },\n isCellUnavailable(date) {\n return props.isDateUnavailable ? props.isDateUnavailable(date) : false;\n },\n isPreviousVisibleRangeInvalid() {\n let prev = startDate.subtract({days: 1});\n return isSameDay(prev, startDate) || this.isInvalid(prev);\n },\n isNextVisibleRangeInvalid() {\n // Adding may return the same date if we reached the end of time\n // according to the calendar system (e.g. 9999-12-31).\n let next = endDate.add({days: 1});\n return isSameDay(next, endDate) || this.isInvalid(next);\n },\n getDatesInWeek(weekIndex, from = startDate) {\n let date = from.add({weeks: weekIndex});\n let dates: (CalendarDate | null)[] = [];\n\n let days = visibleDuration.days && visibleDuration.days < 7 ? visibleDuration.days : 7;\n if (days === 7) {\n date = startOfWeek(date, locale, firstDayOfWeek);\n\n // startOfWeek will clamp dates within the calendar system's valid range, which may\n // start in the middle of a week. In this case, add null placeholders.\n let dayOfWeek = getDayOfWeek(date, locale, firstDayOfWeek);\n for (let i = 0; i < dayOfWeek; i++) {\n dates.push(null);\n }\n }\n\n while (dates.length < days) {\n dates.push(date);\n let nextDate = date.add({days: 1});\n if (isSameDay(date, nextDate)) {\n // If the next day is the same, we have hit the end of the calendar system.\n break;\n }\n date = nextDate;\n }\n\n // Add null placeholders if at the end of the calendar system.\n while (dates.length < days) {\n dates.push(null);\n }\n\n return dates;\n },\n getWeeksInMonth(date = startDate) {\n let weeks = weeksInMonth || getWeeksInMonth(date, locale, firstDayOfWeek);\n if (visibleDuration.weeks || visibleDuration.days) {\n weeks = visibleDuration.weeks ?? 0;\n if (visibleDuration.days) {\n weeks += Math.ceil(visibleDuration.days / 7);\n }\n }\n return weeks;\n }\n };\n}\n\nfunction unitDuration(duration: DateDuration) {\n let unit = {...duration};\n for (let key in duration) {\n unit[key] = 1;\n }\n return unit;\n}\n"],"names":[],"version":3,"file":"useCalendarState.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["packages/react-stately/src/calendar/useCalendarState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n alignCenter,\n alignEnd,\n alignStart,\n constrainStart,\n constrainValue,\n isEqualDuration,\n isInvalid,\n previousAvailableDate\n} from './utils';\nimport {\n Calendar,\n CalendarDate,\n CalendarIdentifier,\n DateDuration,\n DateFormatter,\n endOfMonth,\n endOfWeek,\n getDayOfWeek,\n getWeeksInMonth,\n GregorianCalendar,\n isEqualCalendar,\n isSameDay,\n minDate,\n startOfMonth,\n startOfWeek,\n toCalendar,\n toCalendarDate,\n today\n} from '@internationalized/date';\nimport {\n CalendarPropsBase,\n CalendarSelectionMode,\n CalendarState,\n CalendarValueType,\n DateValue,\n MappedDateValue\n} from './types';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useMemo, useState} from 'react';\nimport {ValidationState, ValueBase} from '@react-types/shared';\n\nexport interface CalendarProps<T extends DateValue, M extends CalendarSelectionMode = 'single'>\n extends\n CalendarPropsBase,\n ValueBase<CalendarValueType<T | null, M>, CalendarValueType<MappedDateValue<T>, M>> {\n /**\n * Whether single or multiple selection is enabled.\n *\n * @default 'single'\n */\n selectionMode?: M;\n /**\n * Callback that is called for each date of the calendar. If it returns true, then the date is\n * unavailable.\n */\n isDateUnavailable?: (date: DateValue) => boolean;\n}\n\nexport interface CalendarStateOptions<\n T extends DateValue = DateValue,\n M extends CalendarSelectionMode = 'single'\n> extends CalendarProps<T, M> {\n /** The locale to display and edit the value according to. */\n locale: string;\n /**\n * A function that creates a [Calendar](../internationalized/date/Calendar.html)\n * object for a given calendar identifier. Such a function may be imported from the\n * `@internationalized/date` package, or manually implemented to include support for\n * only certain calendars.\n */\n createCalendar: (name: CalendarIdentifier) => Calendar;\n /**\n * The amount of days that will be displayed at once. This affects how pagination works.\n *\n * @default { months: 1 }\n */\n visibleDuration?: DateDuration;\n /**\n * Determines the alignment of the visible months on initial render based on the current selection\n * or current date if there is no selection.\n *\n * @default 'center'\n */\n selectionAlignment?: 'start' | 'center' | 'end';\n}\n/**\n * Provides state management for a calendar component.\n * A calendar displays one or more date grids and allows users to select a single date.\n */\nexport function useCalendarState<\n T extends DateValue = DateValue,\n M extends CalendarSelectionMode = 'single'\n>(props: CalendarStateOptions<T, M>): CalendarState<M> {\n let defaultFormatter = useMemo(() => new DateFormatter(props.locale), [props.locale]);\n let resolvedOptions = useMemo(() => defaultFormatter.resolvedOptions(), [defaultFormatter]);\n let {\n locale,\n createCalendar,\n visibleDuration = {months: 1},\n minValue,\n maxValue,\n selectionAlignment,\n isDateUnavailable,\n pageBehavior = 'visible',\n selectionMode = 'single' as M,\n firstDayOfWeek,\n weeksInMonth\n } = props;\n let calendar = useMemo(\n () => createCalendar(resolvedOptions.calendar as CalendarIdentifier),\n [createCalendar, resolvedOptions.calendar]\n );\n\n let [value, setControlledValue] = useControlledState<\n T | T[] | null,\n MappedDateValue<T> | MappedDateValue<T>[] | null\n >(props.value as any, (props.defaultValue as any) ?? null, props.onChange as any);\n let calendarDateValue = useMemo(() => {\n if (Array.isArray(value)) {\n return value.map(value => toCalendar(toCalendarDate(value), calendar));\n } else {\n return value ? toCalendar(toCalendarDate(value), calendar) : null;\n }\n }, [value, calendar]);\n let timeZone = useMemo(() => {\n let val = Array.isArray(value) ? value[0] : value;\n return val && 'timeZone' in val ? val.timeZone : resolvedOptions.timeZone;\n }, [value, resolvedOptions.timeZone]);\n let focusedCalendarDate = useMemo(\n () =>\n props.focusedValue\n ? constrainValue(\n toCalendar(toCalendarDate(props.focusedValue), calendar),\n minValue,\n maxValue\n )\n : undefined,\n [props.focusedValue, calendar, minValue, maxValue]\n );\n let defaultFocusedCalendarDate = useMemo(() => {\n if (props.defaultFocusedValue) {\n return constrainValue(\n toCalendar(toCalendarDate(props.defaultFocusedValue), calendar),\n minValue,\n maxValue\n );\n }\n\n if (calendarDateValue) {\n return constrainValue(\n Array.isArray(calendarDateValue) ? calendarDateValue[0] : calendarDateValue,\n minValue,\n maxValue\n );\n }\n\n return constrainValue(toCalendar(today(timeZone), calendar), minValue, maxValue);\n }, [props.defaultFocusedValue, calendarDateValue, timeZone, calendar, minValue, maxValue]);\n let [focusedDate, setFocusedDate] = useControlledState(\n focusedCalendarDate,\n defaultFocusedCalendarDate,\n props.onFocusChange\n );\n let getStartDate = () => {\n switch (selectionAlignment) {\n case 'start':\n return alignStart(focusedDate, visibleDuration, locale, minValue, maxValue);\n case 'end':\n return alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue);\n case 'center':\n default:\n return alignCenter(focusedDate, visibleDuration, locale, minValue, maxValue);\n }\n };\n\n let [startDate, setStartDate] = useState(getStartDate);\n let [isFocused, setFocused] = useState(props.autoFocus || false);\n\n let [lastVisibleDuration, setLastVisibleDuration] = useState(visibleDuration);\n if (!isEqualDuration(visibleDuration, lastVisibleDuration)) {\n setLastVisibleDuration(visibleDuration);\n setStartDate(getStartDate());\n }\n\n let endDate = useMemo(() => {\n let duration = {...visibleDuration};\n if (duration.days) {\n duration.days--;\n } else {\n duration.days = -1;\n }\n return startDate.add(duration);\n }, [startDate, visibleDuration]);\n\n // Reset focused date and visible range when calendar changes.\n let [lastCalendar, setLastCalendar] = useState(calendar);\n if (!isEqualCalendar(calendar, lastCalendar)) {\n let newFocusedDate = toCalendar(focusedDate, calendar);\n setStartDate(alignCenter(newFocusedDate, visibleDuration, locale, minValue, maxValue));\n setFocusedDate(newFocusedDate);\n setLastCalendar(calendar);\n }\n\n if (isInvalid(focusedDate, minValue, maxValue)) {\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n setFocusedDate(constrainValue(focusedDate, minValue, maxValue));\n } else if (focusedDate.compare(startDate) < 0) {\n setStartDate(alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue));\n } else if (focusedDate.compare(endDate) > 0) {\n setStartDate(alignStart(focusedDate, visibleDuration, locale, minValue, maxValue));\n }\n\n // Sets focus to a specific cell date\n function focusCell(date: CalendarDate) {\n date = constrainValue(date, minValue, maxValue);\n setFocusedDate(date);\n }\n\n function normalizeValue(newValue: CalendarDate) {\n let constrained = constrainValue(newValue, minValue, maxValue);\n let lowerBound = minValue ?? minDate(constrained, startDate);\n let prev = previousAvailableDate(constrained, lowerBound, isDateUnavailable);\n if (!prev) {\n return null;\n }\n\n // The display calendar should not have any effect on the emitted value.\n // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n let baseValue = Array.isArray(value) ? value[0] : value;\n let calendarValue = toCalendar(prev, baseValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (baseValue && 'hour' in baseValue) {\n return baseValue.set(calendarValue) as T;\n }\n\n return calendarValue as T;\n }\n\n function setValue(newValue: CalendarDate | CalendarDate[] | null) {\n if (!props.isDisabled && !props.isReadOnly) {\n if (newValue === null) {\n setControlledValue(selectionMode === 'multiple' ? [] : null);\n return;\n }\n\n if (Array.isArray(newValue)) {\n setControlledValue(newValue.map(normalizeValue).filter(Boolean) as any);\n } else {\n let localValue = normalizeValue(newValue);\n if (localValue) {\n setControlledValue(localValue as any);\n }\n }\n }\n }\n\n let isUnavailable = useMemo(() => {\n if (!calendarDateValue) {\n return false;\n }\n\n if (Array.isArray(calendarDateValue)) {\n return calendarDateValue.some(\n date => isDateUnavailable?.(date) || isInvalid(date, minValue, maxValue)\n );\n }\n\n return (\n isDateUnavailable?.(calendarDateValue) || isInvalid(calendarDateValue, minValue, maxValue)\n );\n }, [calendarDateValue, isDateUnavailable, minValue, maxValue]);\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isUnavailable;\n let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n let pageDuration = useMemo(() => {\n if (pageBehavior === 'visible') {\n return visibleDuration;\n }\n\n return unitDuration(visibleDuration);\n }, [pageBehavior, visibleDuration]);\n\n return {\n isDisabled: props.isDisabled ?? false,\n isReadOnly: props.isReadOnly ?? false,\n value: calendarDateValue as any,\n setValue: setValue as any,\n selectionMode,\n visibleDuration,\n visibleRange: {\n start: startDate,\n end: endDate\n },\n minValue,\n maxValue,\n focusedDate,\n timeZone,\n validationState,\n isValueInvalid,\n setFocusedDate(date) {\n focusCell(date);\n },\n focusNextDay() {\n focusCell(focusedDate.add({days: 1}));\n },\n focusPreviousDay() {\n focusCell(focusedDate.subtract({days: 1}));\n },\n focusNextRow() {\n if (visibleDuration.days) {\n this.focusNextPage();\n } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.add({weeks: 1}));\n }\n },\n focusPreviousRow() {\n if (visibleDuration.days) {\n this.focusPreviousPage();\n } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.subtract({weeks: 1}));\n }\n },\n focusNextPage() {\n let start = startDate.add(pageDuration);\n setFocusedDate(constrainValue(focusedDate.add(pageDuration), minValue, maxValue));\n setStartDate(\n alignStart(\n constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n pageDuration,\n locale\n )\n );\n },\n focusPreviousPage() {\n let start = startDate.subtract(pageDuration);\n setFocusedDate(constrainValue(focusedDate.subtract(pageDuration), minValue, maxValue));\n setStartDate(\n alignStart(\n constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n pageDuration,\n locale\n )\n );\n },\n focusSectionStart() {\n if (visibleDuration.days) {\n focusCell(startDate);\n } else if (visibleDuration.weeks) {\n focusCell(startOfWeek(focusedDate, locale));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(startOfMonth(focusedDate));\n }\n },\n focusSectionEnd() {\n if (visibleDuration.days) {\n focusCell(endDate);\n } else if (visibleDuration.weeks) {\n focusCell(endOfWeek(focusedDate, locale));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(endOfMonth(focusedDate));\n }\n },\n focusNextSection(larger) {\n if (!larger && !visibleDuration.days) {\n focusCell(focusedDate.add(unitDuration(visibleDuration)));\n return;\n }\n\n if (visibleDuration.days) {\n this.focusNextPage();\n } else if (visibleDuration.weeks) {\n focusCell(focusedDate.add({months: 1}));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.add({years: 1}));\n }\n },\n focusPreviousSection(larger) {\n if (!larger && !visibleDuration.days) {\n focusCell(focusedDate.subtract(unitDuration(visibleDuration)));\n return;\n }\n\n if (visibleDuration.days) {\n this.focusPreviousPage();\n } else if (visibleDuration.weeks) {\n focusCell(focusedDate.subtract({months: 1}));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.subtract({years: 1}));\n }\n },\n selectFocusedDate() {\n if (!(isDateUnavailable && isDateUnavailable(focusedDate))) {\n this.selectDate(focusedDate);\n }\n },\n selectDate(date) {\n if (props.isDisabled || props.isReadOnly) {\n return;\n }\n\n if (selectionMode === 'multiple' && date != null) {\n let newDate = normalizeValue(date);\n if (!newDate) {\n return;\n }\n\n let baseValue: T[] = [];\n if (Array.isArray(value)) {\n baseValue = value;\n } else if (value != null) {\n baseValue = [value];\n }\n\n let index = baseValue.findIndex(value => isSameDay(value, newDate));\n let newValue =\n index >= 0\n ? baseValue.slice(0, index).concat(baseValue.slice(index + 1))\n : [...baseValue, newDate];\n setControlledValue(newValue);\n } else {\n setValue(date);\n }\n },\n isFocused,\n setFocused,\n isInvalid(date) {\n return isInvalid(date, minValue, maxValue);\n },\n isSelected(date) {\n if (!calendarDateValue || this.isCellDisabled(date) || this.isCellUnavailable(date)) {\n return false;\n }\n return Array.isArray(calendarDateValue)\n ? calendarDateValue.some(value => isSameDay(value, date))\n : isSameDay(date, calendarDateValue);\n },\n isCellFocused(date) {\n return isFocused && focusedDate && isSameDay(date, focusedDate);\n },\n isCellDisabled(date) {\n return (\n props.isDisabled ||\n date.compare(startDate) < 0 ||\n date.compare(endDate) > 0 ||\n this.isInvalid(date)\n );\n },\n isCellUnavailable(date) {\n return props.isDateUnavailable ? props.isDateUnavailable(date) : false;\n },\n isPreviousVisibleRangeInvalid() {\n let prev = startDate.subtract({days: 1});\n return isSameDay(prev, startDate) || this.isInvalid(prev);\n },\n isNextVisibleRangeInvalid() {\n // Adding may return the same date if we reached the end of time\n // according to the calendar system (e.g. 9999-12-31).\n let next = endDate.add({days: 1});\n return isSameDay(next, endDate) || this.isInvalid(next);\n },\n getDatesInWeek(weekIndex, from = startDate) {\n let date = from.add({weeks: weekIndex});\n let dates: (CalendarDate | null)[] = [];\n\n let days = visibleDuration.days && visibleDuration.days < 7 ? visibleDuration.days : 7;\n if (days === 7) {\n date = startOfWeek(date, locale, firstDayOfWeek);\n\n // startOfWeek will clamp dates within the calendar system's valid range, which may\n // start in the middle of a week. In this case, add null placeholders.\n let dayOfWeek = getDayOfWeek(date, locale, firstDayOfWeek);\n for (let i = 0; i < dayOfWeek; i++) {\n dates.push(null);\n }\n }\n\n while (dates.length < days) {\n dates.push(date);\n let nextDate = date.add({days: 1});\n if (isSameDay(date, nextDate)) {\n // If the next day is the same, we have hit the end of the calendar system.\n break;\n }\n date = nextDate;\n }\n\n // Add null placeholders if at the end of the calendar system.\n while (dates.length < days) {\n dates.push(null);\n }\n\n return dates;\n },\n getWeeksInMonth(date = startDate) {\n let weeks = weeksInMonth || getWeeksInMonth(date, locale, firstDayOfWeek);\n if (visibleDuration.weeks || visibleDuration.days) {\n weeks = visibleDuration.weeks ?? 0;\n if (visibleDuration.days) {\n weeks += Math.ceil(visibleDuration.days / 7);\n }\n }\n return weeks;\n }\n };\n}\n\nfunction unitDuration(duration: DateDuration) {\n let unit = {...duration};\n for (let key in duration) {\n unit[key] = 1;\n }\n return unit;\n}\n"],"names":[],"version":3,"file":"useCalendarState.js.map"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {alignCenter as $dd602d3c757202f2$export$f4a51ff076cc9a09, alignEnd as $dd602d3c757202f2$export$530edbfc915b2b04, alignStart as $dd602d3c757202f2$export$144a00ba6044eb9, constrainStart as $dd602d3c757202f2$export$5bb865b12696a77d, constrainValue as $dd602d3c757202f2$export$4f5203c0d889109e, isEqualDuration as $dd602d3c757202f2$export$6595e603c409b4b8, isInvalid as $dd602d3c757202f2$export$eac50920cf2fd59a, previousAvailableDate as $dd602d3c757202f2$export$a1d3911297b952d7} from "./utils.mjs";
|
|
2
2
|
import {useControlledState as $3e6197669829fe11$export$40bfa8c7b0832715} from "../utils/useControlledState.mjs";
|
|
3
|
-
import {DateFormatter as $aoVcW$DateFormatter, toCalendar as $aoVcW$toCalendar, toCalendarDate as $aoVcW$toCalendarDate, today as $aoVcW$today, isEqualCalendar as $aoVcW$isEqualCalendar, GregorianCalendar as $aoVcW$GregorianCalendar, startOfWeek as $aoVcW$startOfWeek, startOfMonth as $aoVcW$startOfMonth, endOfWeek as $aoVcW$endOfWeek, endOfMonth as $aoVcW$endOfMonth, isSameDay as $aoVcW$isSameDay, getDayOfWeek as $aoVcW$getDayOfWeek, getWeeksInMonth as $aoVcW$getWeeksInMonth} from "@internationalized/date";
|
|
3
|
+
import {DateFormatter as $aoVcW$DateFormatter, toCalendar as $aoVcW$toCalendar, toCalendarDate as $aoVcW$toCalendarDate, today as $aoVcW$today, isEqualCalendar as $aoVcW$isEqualCalendar, minDate as $aoVcW$minDate, GregorianCalendar as $aoVcW$GregorianCalendar, startOfWeek as $aoVcW$startOfWeek, startOfMonth as $aoVcW$startOfMonth, endOfWeek as $aoVcW$endOfWeek, endOfMonth as $aoVcW$endOfMonth, isSameDay as $aoVcW$isSameDay, getDayOfWeek as $aoVcW$getDayOfWeek, getWeeksInMonth as $aoVcW$getWeeksInMonth} from "@internationalized/date";
|
|
4
4
|
import {useMemo as $aoVcW$useMemo, useState as $aoVcW$useState} from "react";
|
|
5
5
|
|
|
6
6
|
/*
|
|
@@ -113,7 +113,8 @@ function $ea0ea6e62ae0d7ca$export$6d095e787d2b5e1f(props) {
|
|
|
113
113
|
}
|
|
114
114
|
function normalizeValue(newValue) {
|
|
115
115
|
let constrained = (0, $dd602d3c757202f2$export$4f5203c0d889109e)(newValue, minValue, maxValue);
|
|
116
|
-
let
|
|
116
|
+
let lowerBound = minValue ?? (0, $aoVcW$minDate)(constrained, startDate);
|
|
117
|
+
let prev = (0, $dd602d3c757202f2$export$a1d3911297b952d7)(constrained, lowerBound, isDateUnavailable);
|
|
117
118
|
if (!prev) return null;
|
|
118
119
|
// The display calendar should not have any effect on the emitted value.
|
|
119
120
|
// Emit dates in the same calendar as the original value, if any, otherwise gregorian.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/react-stately/src/calendar/useCalendarState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n alignCenter,\n alignEnd,\n alignStart,\n constrainStart,\n constrainValue,\n isEqualDuration,\n isInvalid,\n previousAvailableDate\n} from './utils';\nimport {\n Calendar,\n CalendarDate,\n CalendarIdentifier,\n DateDuration,\n DateFormatter,\n endOfMonth,\n endOfWeek,\n getDayOfWeek,\n getWeeksInMonth,\n GregorianCalendar,\n isEqualCalendar,\n isSameDay,\n startOfMonth,\n startOfWeek,\n toCalendar,\n toCalendarDate,\n today\n} from '@internationalized/date';\nimport {\n CalendarPropsBase,\n CalendarSelectionMode,\n CalendarState,\n CalendarValueType,\n DateValue,\n MappedDateValue\n} from './types';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useMemo, useState} from 'react';\nimport {ValidationState, ValueBase} from '@react-types/shared';\n\nexport interface CalendarProps<T extends DateValue, M extends CalendarSelectionMode = 'single'>\n extends\n CalendarPropsBase,\n ValueBase<CalendarValueType<T | null, M>, CalendarValueType<MappedDateValue<T>, M>> {\n /**\n * Whether single or multiple selection is enabled.\n *\n * @default 'single'\n */\n selectionMode?: M;\n /**\n * Callback that is called for each date of the calendar. If it returns true, then the date is\n * unavailable.\n */\n isDateUnavailable?: (date: DateValue) => boolean;\n}\n\nexport interface CalendarStateOptions<\n T extends DateValue = DateValue,\n M extends CalendarSelectionMode = 'single'\n> extends CalendarProps<T, M> {\n /** The locale to display and edit the value according to. */\n locale: string;\n /**\n * A function that creates a [Calendar](../internationalized/date/Calendar.html)\n * object for a given calendar identifier. Such a function may be imported from the\n * `@internationalized/date` package, or manually implemented to include support for\n * only certain calendars.\n */\n createCalendar: (name: CalendarIdentifier) => Calendar;\n /**\n * The amount of days that will be displayed at once. This affects how pagination works.\n *\n * @default { months: 1 }\n */\n visibleDuration?: DateDuration;\n /**\n * Determines the alignment of the visible months on initial render based on the current selection\n * or current date if there is no selection.\n *\n * @default 'center'\n */\n selectionAlignment?: 'start' | 'center' | 'end';\n}\n/**\n * Provides state management for a calendar component.\n * A calendar displays one or more date grids and allows users to select a single date.\n */\nexport function useCalendarState<\n T extends DateValue = DateValue,\n M extends CalendarSelectionMode = 'single'\n>(props: CalendarStateOptions<T, M>): CalendarState<M> {\n let defaultFormatter = useMemo(() => new DateFormatter(props.locale), [props.locale]);\n let resolvedOptions = useMemo(() => defaultFormatter.resolvedOptions(), [defaultFormatter]);\n let {\n locale,\n createCalendar,\n visibleDuration = {months: 1},\n minValue,\n maxValue,\n selectionAlignment,\n isDateUnavailable,\n pageBehavior = 'visible',\n selectionMode = 'single' as M,\n firstDayOfWeek,\n weeksInMonth\n } = props;\n let calendar = useMemo(\n () => createCalendar(resolvedOptions.calendar as CalendarIdentifier),\n [createCalendar, resolvedOptions.calendar]\n );\n\n let [value, setControlledValue] = useControlledState<\n T | T[] | null,\n MappedDateValue<T> | MappedDateValue<T>[] | null\n >(props.value as any, (props.defaultValue as any) ?? null, props.onChange as any);\n let calendarDateValue = useMemo(() => {\n if (Array.isArray(value)) {\n return value.map(value => toCalendar(toCalendarDate(value), calendar));\n } else {\n return value ? toCalendar(toCalendarDate(value), calendar) : null;\n }\n }, [value, calendar]);\n let timeZone = useMemo(() => {\n let val = Array.isArray(value) ? value[0] : value;\n return val && 'timeZone' in val ? val.timeZone : resolvedOptions.timeZone;\n }, [value, resolvedOptions.timeZone]);\n let focusedCalendarDate = useMemo(\n () =>\n props.focusedValue\n ? constrainValue(\n toCalendar(toCalendarDate(props.focusedValue), calendar),\n minValue,\n maxValue\n )\n : undefined,\n [props.focusedValue, calendar, minValue, maxValue]\n );\n let defaultFocusedCalendarDate = useMemo(() => {\n if (props.defaultFocusedValue) {\n return constrainValue(\n toCalendar(toCalendarDate(props.defaultFocusedValue), calendar),\n minValue,\n maxValue\n );\n }\n\n if (calendarDateValue) {\n return constrainValue(\n Array.isArray(calendarDateValue) ? calendarDateValue[0] : calendarDateValue,\n minValue,\n maxValue\n );\n }\n\n return constrainValue(toCalendar(today(timeZone), calendar), minValue, maxValue);\n }, [props.defaultFocusedValue, calendarDateValue, timeZone, calendar, minValue, maxValue]);\n let [focusedDate, setFocusedDate] = useControlledState(\n focusedCalendarDate,\n defaultFocusedCalendarDate,\n props.onFocusChange\n );\n let getStartDate = () => {\n switch (selectionAlignment) {\n case 'start':\n return alignStart(focusedDate, visibleDuration, locale, minValue, maxValue);\n case 'end':\n return alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue);\n case 'center':\n default:\n return alignCenter(focusedDate, visibleDuration, locale, minValue, maxValue);\n }\n };\n\n let [startDate, setStartDate] = useState(getStartDate);\n let [isFocused, setFocused] = useState(props.autoFocus || false);\n\n let [lastVisibleDuration, setLastVisibleDuration] = useState(visibleDuration);\n if (!isEqualDuration(visibleDuration, lastVisibleDuration)) {\n setLastVisibleDuration(visibleDuration);\n setStartDate(getStartDate());\n }\n\n let endDate = useMemo(() => {\n let duration = {...visibleDuration};\n if (duration.days) {\n duration.days--;\n } else {\n duration.days = -1;\n }\n return startDate.add(duration);\n }, [startDate, visibleDuration]);\n\n // Reset focused date and visible range when calendar changes.\n let [lastCalendar, setLastCalendar] = useState(calendar);\n if (!isEqualCalendar(calendar, lastCalendar)) {\n let newFocusedDate = toCalendar(focusedDate, calendar);\n setStartDate(alignCenter(newFocusedDate, visibleDuration, locale, minValue, maxValue));\n setFocusedDate(newFocusedDate);\n setLastCalendar(calendar);\n }\n\n if (isInvalid(focusedDate, minValue, maxValue)) {\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n setFocusedDate(constrainValue(focusedDate, minValue, maxValue));\n } else if (focusedDate.compare(startDate) < 0) {\n setStartDate(alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue));\n } else if (focusedDate.compare(endDate) > 0) {\n setStartDate(alignStart(focusedDate, visibleDuration, locale, minValue, maxValue));\n }\n\n // Sets focus to a specific cell date\n function focusCell(date: CalendarDate) {\n date = constrainValue(date, minValue, maxValue);\n setFocusedDate(date);\n }\n\n function normalizeValue(newValue: CalendarDate) {\n let constrained = constrainValue(newValue, minValue, maxValue);\n let prev = previousAvailableDate(constrained, startDate, isDateUnavailable);\n if (!prev) {\n return null;\n }\n\n // The display calendar should not have any effect on the emitted value.\n // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n let baseValue = Array.isArray(value) ? value[0] : value;\n let calendarValue = toCalendar(prev, baseValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (baseValue && 'hour' in baseValue) {\n return baseValue.set(calendarValue) as T;\n }\n\n return calendarValue as T;\n }\n\n function setValue(newValue: CalendarDate | CalendarDate[] | null) {\n if (!props.isDisabled && !props.isReadOnly) {\n if (newValue === null) {\n setControlledValue(selectionMode === 'multiple' ? [] : null);\n return;\n }\n\n if (Array.isArray(newValue)) {\n setControlledValue(newValue.map(normalizeValue).filter(Boolean) as any);\n } else {\n let localValue = normalizeValue(newValue);\n if (localValue) {\n setControlledValue(localValue as any);\n }\n }\n }\n }\n\n let isUnavailable = useMemo(() => {\n if (!calendarDateValue) {\n return false;\n }\n\n if (Array.isArray(calendarDateValue)) {\n return calendarDateValue.some(\n date => isDateUnavailable?.(date) || isInvalid(date, minValue, maxValue)\n );\n }\n\n return (\n isDateUnavailable?.(calendarDateValue) || isInvalid(calendarDateValue, minValue, maxValue)\n );\n }, [calendarDateValue, isDateUnavailable, minValue, maxValue]);\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isUnavailable;\n let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n let pageDuration = useMemo(() => {\n if (pageBehavior === 'visible') {\n return visibleDuration;\n }\n\n return unitDuration(visibleDuration);\n }, [pageBehavior, visibleDuration]);\n\n return {\n isDisabled: props.isDisabled ?? false,\n isReadOnly: props.isReadOnly ?? false,\n value: calendarDateValue as any,\n setValue: setValue as any,\n selectionMode,\n visibleDuration,\n visibleRange: {\n start: startDate,\n end: endDate\n },\n minValue,\n maxValue,\n focusedDate,\n timeZone,\n validationState,\n isValueInvalid,\n setFocusedDate(date) {\n focusCell(date);\n },\n focusNextDay() {\n focusCell(focusedDate.add({days: 1}));\n },\n focusPreviousDay() {\n focusCell(focusedDate.subtract({days: 1}));\n },\n focusNextRow() {\n if (visibleDuration.days) {\n this.focusNextPage();\n } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.add({weeks: 1}));\n }\n },\n focusPreviousRow() {\n if (visibleDuration.days) {\n this.focusPreviousPage();\n } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.subtract({weeks: 1}));\n }\n },\n focusNextPage() {\n let start = startDate.add(pageDuration);\n setFocusedDate(constrainValue(focusedDate.add(pageDuration), minValue, maxValue));\n setStartDate(\n alignStart(\n constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n pageDuration,\n locale\n )\n );\n },\n focusPreviousPage() {\n let start = startDate.subtract(pageDuration);\n setFocusedDate(constrainValue(focusedDate.subtract(pageDuration), minValue, maxValue));\n setStartDate(\n alignStart(\n constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n pageDuration,\n locale\n )\n );\n },\n focusSectionStart() {\n if (visibleDuration.days) {\n focusCell(startDate);\n } else if (visibleDuration.weeks) {\n focusCell(startOfWeek(focusedDate, locale));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(startOfMonth(focusedDate));\n }\n },\n focusSectionEnd() {\n if (visibleDuration.days) {\n focusCell(endDate);\n } else if (visibleDuration.weeks) {\n focusCell(endOfWeek(focusedDate, locale));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(endOfMonth(focusedDate));\n }\n },\n focusNextSection(larger) {\n if (!larger && !visibleDuration.days) {\n focusCell(focusedDate.add(unitDuration(visibleDuration)));\n return;\n }\n\n if (visibleDuration.days) {\n this.focusNextPage();\n } else if (visibleDuration.weeks) {\n focusCell(focusedDate.add({months: 1}));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.add({years: 1}));\n }\n },\n focusPreviousSection(larger) {\n if (!larger && !visibleDuration.days) {\n focusCell(focusedDate.subtract(unitDuration(visibleDuration)));\n return;\n }\n\n if (visibleDuration.days) {\n this.focusPreviousPage();\n } else if (visibleDuration.weeks) {\n focusCell(focusedDate.subtract({months: 1}));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.subtract({years: 1}));\n }\n },\n selectFocusedDate() {\n if (!(isDateUnavailable && isDateUnavailable(focusedDate))) {\n this.selectDate(focusedDate);\n }\n },\n selectDate(date) {\n if (props.isDisabled || props.isReadOnly) {\n return;\n }\n\n if (selectionMode === 'multiple' && date != null) {\n let newDate = normalizeValue(date);\n if (!newDate) {\n return;\n }\n\n let baseValue: T[] = [];\n if (Array.isArray(value)) {\n baseValue = value;\n } else if (value != null) {\n baseValue = [value];\n }\n\n let index = baseValue.findIndex(value => isSameDay(value, newDate));\n let newValue =\n index >= 0\n ? baseValue.slice(0, index).concat(baseValue.slice(index + 1))\n : [...baseValue, newDate];\n setControlledValue(newValue);\n } else {\n setValue(date);\n }\n },\n isFocused,\n setFocused,\n isInvalid(date) {\n return isInvalid(date, minValue, maxValue);\n },\n isSelected(date) {\n if (!calendarDateValue || this.isCellDisabled(date) || this.isCellUnavailable(date)) {\n return false;\n }\n return Array.isArray(calendarDateValue)\n ? calendarDateValue.some(value => isSameDay(value, date))\n : isSameDay(date, calendarDateValue);\n },\n isCellFocused(date) {\n return isFocused && focusedDate && isSameDay(date, focusedDate);\n },\n isCellDisabled(date) {\n return (\n props.isDisabled ||\n date.compare(startDate) < 0 ||\n date.compare(endDate) > 0 ||\n this.isInvalid(date)\n );\n },\n isCellUnavailable(date) {\n return props.isDateUnavailable ? props.isDateUnavailable(date) : false;\n },\n isPreviousVisibleRangeInvalid() {\n let prev = startDate.subtract({days: 1});\n return isSameDay(prev, startDate) || this.isInvalid(prev);\n },\n isNextVisibleRangeInvalid() {\n // Adding may return the same date if we reached the end of time\n // according to the calendar system (e.g. 9999-12-31).\n let next = endDate.add({days: 1});\n return isSameDay(next, endDate) || this.isInvalid(next);\n },\n getDatesInWeek(weekIndex, from = startDate) {\n let date = from.add({weeks: weekIndex});\n let dates: (CalendarDate | null)[] = [];\n\n let days = visibleDuration.days && visibleDuration.days < 7 ? visibleDuration.days : 7;\n if (days === 7) {\n date = startOfWeek(date, locale, firstDayOfWeek);\n\n // startOfWeek will clamp dates within the calendar system's valid range, which may\n // start in the middle of a week. In this case, add null placeholders.\n let dayOfWeek = getDayOfWeek(date, locale, firstDayOfWeek);\n for (let i = 0; i < dayOfWeek; i++) {\n dates.push(null);\n }\n }\n\n while (dates.length < days) {\n dates.push(date);\n let nextDate = date.add({days: 1});\n if (isSameDay(date, nextDate)) {\n // If the next day is the same, we have hit the end of the calendar system.\n break;\n }\n date = nextDate;\n }\n\n // Add null placeholders if at the end of the calendar system.\n while (dates.length < days) {\n dates.push(null);\n }\n\n return dates;\n },\n getWeeksInMonth(date = startDate) {\n let weeks = weeksInMonth || getWeeksInMonth(date, locale, firstDayOfWeek);\n if (visibleDuration.weeks || visibleDuration.days) {\n weeks = visibleDuration.weeks ?? 0;\n if (visibleDuration.days) {\n weeks += Math.ceil(visibleDuration.days / 7);\n }\n }\n return weeks;\n }\n };\n}\n\nfunction unitDuration(duration: DateDuration) {\n let unit = {...duration};\n for (let key in duration) {\n unit[key] = 1;\n }\n return unit;\n}\n"],"names":[],"version":3,"file":"useCalendarState.mjs.map"}
|
|
1
|
+
{"mappings":"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","sources":["packages/react-stately/src/calendar/useCalendarState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n alignCenter,\n alignEnd,\n alignStart,\n constrainStart,\n constrainValue,\n isEqualDuration,\n isInvalid,\n previousAvailableDate\n} from './utils';\nimport {\n Calendar,\n CalendarDate,\n CalendarIdentifier,\n DateDuration,\n DateFormatter,\n endOfMonth,\n endOfWeek,\n getDayOfWeek,\n getWeeksInMonth,\n GregorianCalendar,\n isEqualCalendar,\n isSameDay,\n minDate,\n startOfMonth,\n startOfWeek,\n toCalendar,\n toCalendarDate,\n today\n} from '@internationalized/date';\nimport {\n CalendarPropsBase,\n CalendarSelectionMode,\n CalendarState,\n CalendarValueType,\n DateValue,\n MappedDateValue\n} from './types';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useMemo, useState} from 'react';\nimport {ValidationState, ValueBase} from '@react-types/shared';\n\nexport interface CalendarProps<T extends DateValue, M extends CalendarSelectionMode = 'single'>\n extends\n CalendarPropsBase,\n ValueBase<CalendarValueType<T | null, M>, CalendarValueType<MappedDateValue<T>, M>> {\n /**\n * Whether single or multiple selection is enabled.\n *\n * @default 'single'\n */\n selectionMode?: M;\n /**\n * Callback that is called for each date of the calendar. If it returns true, then the date is\n * unavailable.\n */\n isDateUnavailable?: (date: DateValue) => boolean;\n}\n\nexport interface CalendarStateOptions<\n T extends DateValue = DateValue,\n M extends CalendarSelectionMode = 'single'\n> extends CalendarProps<T, M> {\n /** The locale to display and edit the value according to. */\n locale: string;\n /**\n * A function that creates a [Calendar](../internationalized/date/Calendar.html)\n * object for a given calendar identifier. Such a function may be imported from the\n * `@internationalized/date` package, or manually implemented to include support for\n * only certain calendars.\n */\n createCalendar: (name: CalendarIdentifier) => Calendar;\n /**\n * The amount of days that will be displayed at once. This affects how pagination works.\n *\n * @default { months: 1 }\n */\n visibleDuration?: DateDuration;\n /**\n * Determines the alignment of the visible months on initial render based on the current selection\n * or current date if there is no selection.\n *\n * @default 'center'\n */\n selectionAlignment?: 'start' | 'center' | 'end';\n}\n/**\n * Provides state management for a calendar component.\n * A calendar displays one or more date grids and allows users to select a single date.\n */\nexport function useCalendarState<\n T extends DateValue = DateValue,\n M extends CalendarSelectionMode = 'single'\n>(props: CalendarStateOptions<T, M>): CalendarState<M> {\n let defaultFormatter = useMemo(() => new DateFormatter(props.locale), [props.locale]);\n let resolvedOptions = useMemo(() => defaultFormatter.resolvedOptions(), [defaultFormatter]);\n let {\n locale,\n createCalendar,\n visibleDuration = {months: 1},\n minValue,\n maxValue,\n selectionAlignment,\n isDateUnavailable,\n pageBehavior = 'visible',\n selectionMode = 'single' as M,\n firstDayOfWeek,\n weeksInMonth\n } = props;\n let calendar = useMemo(\n () => createCalendar(resolvedOptions.calendar as CalendarIdentifier),\n [createCalendar, resolvedOptions.calendar]\n );\n\n let [value, setControlledValue] = useControlledState<\n T | T[] | null,\n MappedDateValue<T> | MappedDateValue<T>[] | null\n >(props.value as any, (props.defaultValue as any) ?? null, props.onChange as any);\n let calendarDateValue = useMemo(() => {\n if (Array.isArray(value)) {\n return value.map(value => toCalendar(toCalendarDate(value), calendar));\n } else {\n return value ? toCalendar(toCalendarDate(value), calendar) : null;\n }\n }, [value, calendar]);\n let timeZone = useMemo(() => {\n let val = Array.isArray(value) ? value[0] : value;\n return val && 'timeZone' in val ? val.timeZone : resolvedOptions.timeZone;\n }, [value, resolvedOptions.timeZone]);\n let focusedCalendarDate = useMemo(\n () =>\n props.focusedValue\n ? constrainValue(\n toCalendar(toCalendarDate(props.focusedValue), calendar),\n minValue,\n maxValue\n )\n : undefined,\n [props.focusedValue, calendar, minValue, maxValue]\n );\n let defaultFocusedCalendarDate = useMemo(() => {\n if (props.defaultFocusedValue) {\n return constrainValue(\n toCalendar(toCalendarDate(props.defaultFocusedValue), calendar),\n minValue,\n maxValue\n );\n }\n\n if (calendarDateValue) {\n return constrainValue(\n Array.isArray(calendarDateValue) ? calendarDateValue[0] : calendarDateValue,\n minValue,\n maxValue\n );\n }\n\n return constrainValue(toCalendar(today(timeZone), calendar), minValue, maxValue);\n }, [props.defaultFocusedValue, calendarDateValue, timeZone, calendar, minValue, maxValue]);\n let [focusedDate, setFocusedDate] = useControlledState(\n focusedCalendarDate,\n defaultFocusedCalendarDate,\n props.onFocusChange\n );\n let getStartDate = () => {\n switch (selectionAlignment) {\n case 'start':\n return alignStart(focusedDate, visibleDuration, locale, minValue, maxValue);\n case 'end':\n return alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue);\n case 'center':\n default:\n return alignCenter(focusedDate, visibleDuration, locale, minValue, maxValue);\n }\n };\n\n let [startDate, setStartDate] = useState(getStartDate);\n let [isFocused, setFocused] = useState(props.autoFocus || false);\n\n let [lastVisibleDuration, setLastVisibleDuration] = useState(visibleDuration);\n if (!isEqualDuration(visibleDuration, lastVisibleDuration)) {\n setLastVisibleDuration(visibleDuration);\n setStartDate(getStartDate());\n }\n\n let endDate = useMemo(() => {\n let duration = {...visibleDuration};\n if (duration.days) {\n duration.days--;\n } else {\n duration.days = -1;\n }\n return startDate.add(duration);\n }, [startDate, visibleDuration]);\n\n // Reset focused date and visible range when calendar changes.\n let [lastCalendar, setLastCalendar] = useState(calendar);\n if (!isEqualCalendar(calendar, lastCalendar)) {\n let newFocusedDate = toCalendar(focusedDate, calendar);\n setStartDate(alignCenter(newFocusedDate, visibleDuration, locale, minValue, maxValue));\n setFocusedDate(newFocusedDate);\n setLastCalendar(calendar);\n }\n\n if (isInvalid(focusedDate, minValue, maxValue)) {\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n setFocusedDate(constrainValue(focusedDate, minValue, maxValue));\n } else if (focusedDate.compare(startDate) < 0) {\n setStartDate(alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue));\n } else if (focusedDate.compare(endDate) > 0) {\n setStartDate(alignStart(focusedDate, visibleDuration, locale, minValue, maxValue));\n }\n\n // Sets focus to a specific cell date\n function focusCell(date: CalendarDate) {\n date = constrainValue(date, minValue, maxValue);\n setFocusedDate(date);\n }\n\n function normalizeValue(newValue: CalendarDate) {\n let constrained = constrainValue(newValue, minValue, maxValue);\n let lowerBound = minValue ?? minDate(constrained, startDate);\n let prev = previousAvailableDate(constrained, lowerBound, isDateUnavailable);\n if (!prev) {\n return null;\n }\n\n // The display calendar should not have any effect on the emitted value.\n // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n let baseValue = Array.isArray(value) ? value[0] : value;\n let calendarValue = toCalendar(prev, baseValue?.calendar || new GregorianCalendar());\n\n // Preserve time if the input value had one.\n if (baseValue && 'hour' in baseValue) {\n return baseValue.set(calendarValue) as T;\n }\n\n return calendarValue as T;\n }\n\n function setValue(newValue: CalendarDate | CalendarDate[] | null) {\n if (!props.isDisabled && !props.isReadOnly) {\n if (newValue === null) {\n setControlledValue(selectionMode === 'multiple' ? [] : null);\n return;\n }\n\n if (Array.isArray(newValue)) {\n setControlledValue(newValue.map(normalizeValue).filter(Boolean) as any);\n } else {\n let localValue = normalizeValue(newValue);\n if (localValue) {\n setControlledValue(localValue as any);\n }\n }\n }\n }\n\n let isUnavailable = useMemo(() => {\n if (!calendarDateValue) {\n return false;\n }\n\n if (Array.isArray(calendarDateValue)) {\n return calendarDateValue.some(\n date => isDateUnavailable?.(date) || isInvalid(date, minValue, maxValue)\n );\n }\n\n return (\n isDateUnavailable?.(calendarDateValue) || isInvalid(calendarDateValue, minValue, maxValue)\n );\n }, [calendarDateValue, isDateUnavailable, minValue, maxValue]);\n let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isUnavailable;\n let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n let pageDuration = useMemo(() => {\n if (pageBehavior === 'visible') {\n return visibleDuration;\n }\n\n return unitDuration(visibleDuration);\n }, [pageBehavior, visibleDuration]);\n\n return {\n isDisabled: props.isDisabled ?? false,\n isReadOnly: props.isReadOnly ?? false,\n value: calendarDateValue as any,\n setValue: setValue as any,\n selectionMode,\n visibleDuration,\n visibleRange: {\n start: startDate,\n end: endDate\n },\n minValue,\n maxValue,\n focusedDate,\n timeZone,\n validationState,\n isValueInvalid,\n setFocusedDate(date) {\n focusCell(date);\n },\n focusNextDay() {\n focusCell(focusedDate.add({days: 1}));\n },\n focusPreviousDay() {\n focusCell(focusedDate.subtract({days: 1}));\n },\n focusNextRow() {\n if (visibleDuration.days) {\n this.focusNextPage();\n } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.add({weeks: 1}));\n }\n },\n focusPreviousRow() {\n if (visibleDuration.days) {\n this.focusPreviousPage();\n } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.subtract({weeks: 1}));\n }\n },\n focusNextPage() {\n let start = startDate.add(pageDuration);\n setFocusedDate(constrainValue(focusedDate.add(pageDuration), minValue, maxValue));\n setStartDate(\n alignStart(\n constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n pageDuration,\n locale\n )\n );\n },\n focusPreviousPage() {\n let start = startDate.subtract(pageDuration);\n setFocusedDate(constrainValue(focusedDate.subtract(pageDuration), minValue, maxValue));\n setStartDate(\n alignStart(\n constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n pageDuration,\n locale\n )\n );\n },\n focusSectionStart() {\n if (visibleDuration.days) {\n focusCell(startDate);\n } else if (visibleDuration.weeks) {\n focusCell(startOfWeek(focusedDate, locale));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(startOfMonth(focusedDate));\n }\n },\n focusSectionEnd() {\n if (visibleDuration.days) {\n focusCell(endDate);\n } else if (visibleDuration.weeks) {\n focusCell(endOfWeek(focusedDate, locale));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(endOfMonth(focusedDate));\n }\n },\n focusNextSection(larger) {\n if (!larger && !visibleDuration.days) {\n focusCell(focusedDate.add(unitDuration(visibleDuration)));\n return;\n }\n\n if (visibleDuration.days) {\n this.focusNextPage();\n } else if (visibleDuration.weeks) {\n focusCell(focusedDate.add({months: 1}));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.add({years: 1}));\n }\n },\n focusPreviousSection(larger) {\n if (!larger && !visibleDuration.days) {\n focusCell(focusedDate.subtract(unitDuration(visibleDuration)));\n return;\n }\n\n if (visibleDuration.days) {\n this.focusPreviousPage();\n } else if (visibleDuration.weeks) {\n focusCell(focusedDate.subtract({months: 1}));\n } else if (visibleDuration.months || visibleDuration.years) {\n focusCell(focusedDate.subtract({years: 1}));\n }\n },\n selectFocusedDate() {\n if (!(isDateUnavailable && isDateUnavailable(focusedDate))) {\n this.selectDate(focusedDate);\n }\n },\n selectDate(date) {\n if (props.isDisabled || props.isReadOnly) {\n return;\n }\n\n if (selectionMode === 'multiple' && date != null) {\n let newDate = normalizeValue(date);\n if (!newDate) {\n return;\n }\n\n let baseValue: T[] = [];\n if (Array.isArray(value)) {\n baseValue = value;\n } else if (value != null) {\n baseValue = [value];\n }\n\n let index = baseValue.findIndex(value => isSameDay(value, newDate));\n let newValue =\n index >= 0\n ? baseValue.slice(0, index).concat(baseValue.slice(index + 1))\n : [...baseValue, newDate];\n setControlledValue(newValue);\n } else {\n setValue(date);\n }\n },\n isFocused,\n setFocused,\n isInvalid(date) {\n return isInvalid(date, minValue, maxValue);\n },\n isSelected(date) {\n if (!calendarDateValue || this.isCellDisabled(date) || this.isCellUnavailable(date)) {\n return false;\n }\n return Array.isArray(calendarDateValue)\n ? calendarDateValue.some(value => isSameDay(value, date))\n : isSameDay(date, calendarDateValue);\n },\n isCellFocused(date) {\n return isFocused && focusedDate && isSameDay(date, focusedDate);\n },\n isCellDisabled(date) {\n return (\n props.isDisabled ||\n date.compare(startDate) < 0 ||\n date.compare(endDate) > 0 ||\n this.isInvalid(date)\n );\n },\n isCellUnavailable(date) {\n return props.isDateUnavailable ? props.isDateUnavailable(date) : false;\n },\n isPreviousVisibleRangeInvalid() {\n let prev = startDate.subtract({days: 1});\n return isSameDay(prev, startDate) || this.isInvalid(prev);\n },\n isNextVisibleRangeInvalid() {\n // Adding may return the same date if we reached the end of time\n // according to the calendar system (e.g. 9999-12-31).\n let next = endDate.add({days: 1});\n return isSameDay(next, endDate) || this.isInvalid(next);\n },\n getDatesInWeek(weekIndex, from = startDate) {\n let date = from.add({weeks: weekIndex});\n let dates: (CalendarDate | null)[] = [];\n\n let days = visibleDuration.days && visibleDuration.days < 7 ? visibleDuration.days : 7;\n if (days === 7) {\n date = startOfWeek(date, locale, firstDayOfWeek);\n\n // startOfWeek will clamp dates within the calendar system's valid range, which may\n // start in the middle of a week. In this case, add null placeholders.\n let dayOfWeek = getDayOfWeek(date, locale, firstDayOfWeek);\n for (let i = 0; i < dayOfWeek; i++) {\n dates.push(null);\n }\n }\n\n while (dates.length < days) {\n dates.push(date);\n let nextDate = date.add({days: 1});\n if (isSameDay(date, nextDate)) {\n // If the next day is the same, we have hit the end of the calendar system.\n break;\n }\n date = nextDate;\n }\n\n // Add null placeholders if at the end of the calendar system.\n while (dates.length < days) {\n dates.push(null);\n }\n\n return dates;\n },\n getWeeksInMonth(date = startDate) {\n let weeks = weeksInMonth || getWeeksInMonth(date, locale, firstDayOfWeek);\n if (visibleDuration.weeks || visibleDuration.days) {\n weeks = visibleDuration.weeks ?? 0;\n if (visibleDuration.days) {\n weeks += Math.ceil(visibleDuration.days / 7);\n }\n }\n return weeks;\n }\n };\n}\n\nfunction unitDuration(duration: DateDuration) {\n let unit = {...duration};\n for (let key in duration) {\n unit[key] = 1;\n }\n return unit;\n}\n"],"names":[],"version":3,"file":"useCalendarState.mjs.map"}
|
|
@@ -231,9 +231,11 @@ class $90c404755d945e7c$var$RGBColor extends $90c404755d945e7c$var$Color {
|
|
|
231
231
|
// matching rgb(rrr, ggg, bbb), rgba(rrr, ggg, bbb, 0.a)
|
|
232
232
|
const match = value.match(/^rgba?\((.*)\)$/);
|
|
233
233
|
if (match?.[1]) {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
234
|
+
const parts = match[1].split(',').map((value)=>value.trim());
|
|
235
|
+
// Number('') is 0 rather than NaN, so empty components need their own check.
|
|
236
|
+
if (parts.some((part)=>part === '' || !Number.isFinite(Number(part)))) return undefined;
|
|
237
|
+
colors = parts.map((part, i)=>{
|
|
238
|
+
return (0, $d947385dec0a279e$exports.clamp)(Number(part), 0, i < 3 ? 255 : 1);
|
|
237
239
|
});
|
|
238
240
|
}
|
|
239
241
|
if (colors[0] === undefined || colors[1] === undefined || colors[2] === undefined) return undefined;
|