@salt-ds/date-components 0.0.0-snapshot-20260330155807
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/CHANGELOG.md +109 -0
- package/README.md +63 -0
- package/css/salt-date-components.css +633 -0
- package/dist-cjs/calendar/Calendar.css.js +6 -0
- package/dist-cjs/calendar/Calendar.css.js.map +1 -0
- package/dist-cjs/calendar/Calendar.js +154 -0
- package/dist-cjs/calendar/Calendar.js.map +1 -0
- package/dist-cjs/calendar/CalendarGrid.js +85 -0
- package/dist-cjs/calendar/CalendarGrid.js.map +1 -0
- package/dist-cjs/calendar/CalendarMonthHeader.css.js +6 -0
- package/dist-cjs/calendar/CalendarMonthHeader.css.js.map +1 -0
- package/dist-cjs/calendar/CalendarMonthHeader.js +41 -0
- package/dist-cjs/calendar/CalendarMonthHeader.js.map +1 -0
- package/dist-cjs/calendar/CalendarNavigation.css.js +6 -0
- package/dist-cjs/calendar/CalendarNavigation.css.js.map +1 -0
- package/dist-cjs/calendar/CalendarNavigation.js +334 -0
- package/dist-cjs/calendar/CalendarNavigation.js.map +1 -0
- package/dist-cjs/calendar/CalendarWeekHeader.css.js +6 -0
- package/dist-cjs/calendar/CalendarWeekHeader.css.js.map +1 -0
- package/dist-cjs/calendar/CalendarWeekHeader.js +46 -0
- package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -0
- package/dist-cjs/calendar/internal/CalendarContext.js +23 -0
- package/dist-cjs/calendar/internal/CalendarContext.js.map +1 -0
- package/dist-cjs/calendar/internal/CalendarDay.css.js +6 -0
- package/dist-cjs/calendar/internal/CalendarDay.css.js.map +1 -0
- package/dist-cjs/calendar/internal/CalendarDay.js +98 -0
- package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -0
- package/dist-cjs/calendar/internal/CalendarMonth.css.js +6 -0
- package/dist-cjs/calendar/internal/CalendarMonth.css.js.map +1 -0
- package/dist-cjs/calendar/internal/CalendarMonth.js +81 -0
- package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -0
- package/dist-cjs/calendar/internal/createAnnouncement.js +90 -0
- package/dist-cjs/calendar/internal/createAnnouncement.js.map +1 -0
- package/dist-cjs/calendar/internal/useFocusManagement.js +66 -0
- package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -0
- package/dist-cjs/calendar/internal/utils.js +50 -0
- package/dist-cjs/calendar/internal/utils.js.map +1 -0
- package/dist-cjs/calendar/useCalendar.js +464 -0
- package/dist-cjs/calendar/useCalendar.js.map +1 -0
- package/dist-cjs/calendar/useCalendarDay.js +84 -0
- package/dist-cjs/calendar/useCalendarDay.js.map +1 -0
- package/dist-cjs/calendar/useCalendarSelection.js +353 -0
- package/dist-cjs/calendar/useCalendarSelection.js.map +1 -0
- package/dist-cjs/calendar/useDateSelectionAnnouncer.js +52 -0
- package/dist-cjs/calendar/useDateSelectionAnnouncer.js.map +1 -0
- package/dist-cjs/date-input/DateInput.css.js +6 -0
- package/dist-cjs/date-input/DateInput.css.js.map +1 -0
- package/dist-cjs/date-input/DateInputRange.js +353 -0
- package/dist-cjs/date-input/DateInputRange.js.map +1 -0
- package/dist-cjs/date-input/DateInputSingle.js +237 -0
- package/dist-cjs/date-input/DateInputSingle.js.map +1 -0
- package/dist-cjs/date-picker/DatePicker.js +83 -0
- package/dist-cjs/date-picker/DatePicker.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerActions.css.js +6 -0
- package/dist-cjs/date-picker/DatePickerActions.css.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerActions.js +119 -0
- package/dist-cjs/date-picker/DatePickerActions.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerContext.js +36 -0
- package/dist-cjs/date-picker/DatePickerContext.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerHelperText.css.js +6 -0
- package/dist-cjs/date-picker/DatePickerHelperText.css.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerHelperText.js +36 -0
- package/dist-cjs/date-picker/DatePickerHelperText.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerOverlay.css.js +6 -0
- package/dist-cjs/date-picker/DatePickerOverlay.css.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerOverlay.js +49 -0
- package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerOverlayProvider.js +164 -0
- package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerPanel.css.js +6 -0
- package/dist-cjs/date-picker/DatePickerPanel.css.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerRangeGridPanel.js +250 -0
- package/dist-cjs/date-picker/DatePickerRangeGridPanel.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerRangeInput.js +206 -0
- package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerRangePanel.js +365 -0
- package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerSingleGridPanel.js +262 -0
- package/dist-cjs/date-picker/DatePickerSingleGridPanel.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerSingleInput.js +150 -0
- package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerSinglePanel.js +20 -0
- package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerTrigger.js +32 -0
- package/dist-cjs/date-picker/DatePickerTrigger.js.map +1 -0
- package/dist-cjs/date-picker/useDatePicker.js +222 -0
- package/dist-cjs/date-picker/useDatePicker.js.map +1 -0
- package/dist-cjs/date-picker/useFocusOut.js +43 -0
- package/dist-cjs/date-picker/useFocusOut.js.map +1 -0
- package/dist-cjs/date-picker/useKeyboard.js +22 -0
- package/dist-cjs/date-picker/useKeyboard.js.map +1 -0
- package/dist-cjs/index.js +64 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/localization-provider/LocalizationProvider.js +51 -0
- package/dist-cjs/localization-provider/LocalizationProvider.js.map +1 -0
- package/dist-es/calendar/Calendar.css.js +4 -0
- package/dist-es/calendar/Calendar.css.js.map +1 -0
- package/dist-es/calendar/Calendar.js +152 -0
- package/dist-es/calendar/Calendar.js.map +1 -0
- package/dist-es/calendar/CalendarGrid.js +83 -0
- package/dist-es/calendar/CalendarGrid.js.map +1 -0
- package/dist-es/calendar/CalendarMonthHeader.css.js +4 -0
- package/dist-es/calendar/CalendarMonthHeader.css.js.map +1 -0
- package/dist-es/calendar/CalendarMonthHeader.js +39 -0
- package/dist-es/calendar/CalendarMonthHeader.js.map +1 -0
- package/dist-es/calendar/CalendarNavigation.css.js +4 -0
- package/dist-es/calendar/CalendarNavigation.css.js.map +1 -0
- package/dist-es/calendar/CalendarNavigation.js +332 -0
- package/dist-es/calendar/CalendarNavigation.js.map +1 -0
- package/dist-es/calendar/CalendarWeekHeader.css.js +4 -0
- package/dist-es/calendar/CalendarWeekHeader.css.js.map +1 -0
- package/dist-es/calendar/CalendarWeekHeader.js +44 -0
- package/dist-es/calendar/CalendarWeekHeader.js.map +1 -0
- package/dist-es/calendar/internal/CalendarContext.js +20 -0
- package/dist-es/calendar/internal/CalendarContext.js.map +1 -0
- package/dist-es/calendar/internal/CalendarDay.css.js +4 -0
- package/dist-es/calendar/internal/CalendarDay.css.js.map +1 -0
- package/dist-es/calendar/internal/CalendarDay.js +96 -0
- package/dist-es/calendar/internal/CalendarDay.js.map +1 -0
- package/dist-es/calendar/internal/CalendarMonth.css.js +4 -0
- package/dist-es/calendar/internal/CalendarMonth.css.js.map +1 -0
- package/dist-es/calendar/internal/CalendarMonth.js +79 -0
- package/dist-es/calendar/internal/CalendarMonth.js.map +1 -0
- package/dist-es/calendar/internal/createAnnouncement.js +87 -0
- package/dist-es/calendar/internal/createAnnouncement.js.map +1 -0
- package/dist-es/calendar/internal/useFocusManagement.js +64 -0
- package/dist-es/calendar/internal/useFocusManagement.js.map +1 -0
- package/dist-es/calendar/internal/utils.js +44 -0
- package/dist-es/calendar/internal/utils.js.map +1 -0
- package/dist-es/calendar/useCalendar.js +462 -0
- package/dist-es/calendar/useCalendar.js.map +1 -0
- package/dist-es/calendar/useCalendarDay.js +82 -0
- package/dist-es/calendar/useCalendarDay.js.map +1 -0
- package/dist-es/calendar/useCalendarSelection.js +349 -0
- package/dist-es/calendar/useCalendarSelection.js.map +1 -0
- package/dist-es/calendar/useDateSelectionAnnouncer.js +50 -0
- package/dist-es/calendar/useDateSelectionAnnouncer.js.map +1 -0
- package/dist-es/date-input/DateInput.css.js +4 -0
- package/dist-es/date-input/DateInput.css.js.map +1 -0
- package/dist-es/date-input/DateInputRange.js +350 -0
- package/dist-es/date-input/DateInputRange.js.map +1 -0
- package/dist-es/date-input/DateInputSingle.js +235 -0
- package/dist-es/date-input/DateInputSingle.js.map +1 -0
- package/dist-es/date-picker/DatePicker.js +80 -0
- package/dist-es/date-picker/DatePicker.js.map +1 -0
- package/dist-es/date-picker/DatePickerActions.css.js +4 -0
- package/dist-es/date-picker/DatePickerActions.css.js.map +1 -0
- package/dist-es/date-picker/DatePickerActions.js +117 -0
- package/dist-es/date-picker/DatePickerActions.js.map +1 -0
- package/dist-es/date-picker/DatePickerContext.js +32 -0
- package/dist-es/date-picker/DatePickerContext.js.map +1 -0
- package/dist-es/date-picker/DatePickerHelperText.css.js +4 -0
- package/dist-es/date-picker/DatePickerHelperText.css.js.map +1 -0
- package/dist-es/date-picker/DatePickerHelperText.js +34 -0
- package/dist-es/date-picker/DatePickerHelperText.js.map +1 -0
- package/dist-es/date-picker/DatePickerOverlay.css.js +4 -0
- package/dist-es/date-picker/DatePickerOverlay.css.js.map +1 -0
- package/dist-es/date-picker/DatePickerOverlay.js +47 -0
- package/dist-es/date-picker/DatePickerOverlay.js.map +1 -0
- package/dist-es/date-picker/DatePickerOverlayProvider.js +161 -0
- package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -0
- package/dist-es/date-picker/DatePickerPanel.css.js +4 -0
- package/dist-es/date-picker/DatePickerPanel.css.js.map +1 -0
- package/dist-es/date-picker/DatePickerRangeGridPanel.js +248 -0
- package/dist-es/date-picker/DatePickerRangeGridPanel.js.map +1 -0
- package/dist-es/date-picker/DatePickerRangeInput.js +203 -0
- package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -0
- package/dist-es/date-picker/DatePickerRangePanel.js +363 -0
- package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -0
- package/dist-es/date-picker/DatePickerSingleGridPanel.js +260 -0
- package/dist-es/date-picker/DatePickerSingleGridPanel.js.map +1 -0
- package/dist-es/date-picker/DatePickerSingleInput.js +148 -0
- package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -0
- package/dist-es/date-picker/DatePickerSinglePanel.js +18 -0
- package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -0
- package/dist-es/date-picker/DatePickerTrigger.js +30 -0
- package/dist-es/date-picker/DatePickerTrigger.js.map +1 -0
- package/dist-es/date-picker/useDatePicker.js +220 -0
- package/dist-es/date-picker/useDatePicker.js.map +1 -0
- package/dist-es/date-picker/useFocusOut.js +41 -0
- package/dist-es/date-picker/useFocusOut.js.map +1 -0
- package/dist-es/date-picker/useKeyboard.js +20 -0
- package/dist-es/date-picker/useKeyboard.js.map +1 -0
- package/dist-es/index.js +25 -0
- package/dist-es/index.js.map +1 -0
- package/dist-es/localization-provider/LocalizationProvider.js +47 -0
- package/dist-es/localization-provider/LocalizationProvider.js.map +1 -0
- package/dist-types/calendar/Calendar.d.ts +105 -0
- package/dist-types/calendar/CalendarGrid.d.ts +27 -0
- package/dist-types/calendar/CalendarMonthHeader.d.ts +17 -0
- package/dist-types/calendar/CalendarNavigation.d.ts +43 -0
- package/dist-types/calendar/CalendarWeekHeader.d.ts +6 -0
- package/dist-types/calendar/index.d.ts +9 -0
- package/dist-types/calendar/internal/CalendarContext.d.ts +6 -0
- package/dist-types/calendar/internal/CalendarDay.d.ts +33 -0
- package/dist-types/calendar/internal/CalendarMonth.d.ts +14 -0
- package/dist-types/calendar/internal/createAnnouncement.d.ts +24 -0
- package/dist-types/calendar/internal/useFocusManagement.d.ts +9 -0
- package/dist-types/calendar/internal/utils.d.ts +6 -0
- package/dist-types/calendar/useCalendar.d.ts +335 -0
- package/dist-types/calendar/useCalendarDay.d.ts +67 -0
- package/dist-types/calendar/useCalendarSelection.d.ts +145 -0
- package/dist-types/calendar/useDateSelectionAnnouncer.d.ts +6 -0
- package/dist-types/date-input/DateInputRange.d.ts +131 -0
- package/dist-types/date-input/DateInputSingle.d.ts +99 -0
- package/dist-types/date-input/index.d.ts +2 -0
- package/dist-types/date-picker/DatePicker.d.ts +52 -0
- package/dist-types/date-picker/DatePickerActions.d.ts +79 -0
- package/dist-types/date-picker/DatePickerContext.d.ts +172 -0
- package/dist-types/date-picker/DatePickerHelperText.d.ts +4 -0
- package/dist-types/date-picker/DatePickerOverlay.d.ts +11 -0
- package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +106 -0
- package/dist-types/date-picker/DatePickerRangeGridPanel.d.ts +14 -0
- package/dist-types/date-picker/DatePickerRangeInput.d.ts +17 -0
- package/dist-types/date-picker/DatePickerRangePanel.d.ts +83 -0
- package/dist-types/date-picker/DatePickerSingleGridPanel.d.ts +63 -0
- package/dist-types/date-picker/DatePickerSingleInput.d.ts +15 -0
- package/dist-types/date-picker/DatePickerSinglePanel.d.ts +8 -0
- package/dist-types/date-picker/DatePickerTrigger.d.ts +9 -0
- package/dist-types/date-picker/index.d.ts +13 -0
- package/dist-types/date-picker/useDatePicker.d.ts +121 -0
- package/dist-types/date-picker/useFocusOut.d.ts +9 -0
- package/dist-types/date-picker/useKeyboard.d.ts +20 -0
- package/dist-types/index.d.ts +4 -0
- package/dist-types/localization-provider/LocalizationProvider.d.ts +62 -0
- package/dist-types/localization-provider/index.d.ts +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { makePrefixer, useForkRef, useControlled, useIsomorphicLayoutEffect, StackLayout, FlexItem, FormFieldHelperText, FlexLayout, FormFieldContext } from '@salt-ds/core';
|
|
3
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
4
|
+
import { useWindow } from '@salt-ds/window';
|
|
5
|
+
import { clsx } from 'clsx';
|
|
6
|
+
import { forwardRef, useRef, useState, useCallback } from 'react';
|
|
7
|
+
import { Calendar } from '../calendar/Calendar.js';
|
|
8
|
+
import { CalendarGrid } from '../calendar/CalendarGrid.js';
|
|
9
|
+
import { CalendarNavigation } from '../calendar/CalendarNavigation.js';
|
|
10
|
+
import '../calendar/CalendarWeekHeader.js';
|
|
11
|
+
import { useLocalization } from '../localization-provider/LocalizationProvider.js';
|
|
12
|
+
import { generateDatesForMonth } from '../calendar/internal/utils.js';
|
|
13
|
+
import '../calendar/useCalendarSelection.js';
|
|
14
|
+
import '../calendar/internal/CalendarContext.js';
|
|
15
|
+
import { useDatePickerContext } from './DatePickerContext.js';
|
|
16
|
+
import { useDatePickerOverlay } from './DatePickerOverlayProvider.js';
|
|
17
|
+
import css_248z from './DatePickerPanel.css.js';
|
|
18
|
+
|
|
19
|
+
function getFallbackVisibleMonths(dateAdapter, selectedDate, timezone = "default") {
|
|
20
|
+
function createConsecutiveRange(date) {
|
|
21
|
+
const startDate = dateAdapter.startOf(date, "month");
|
|
22
|
+
const endDate = dateAdapter.add(startDate, { months: 1 });
|
|
23
|
+
return [startDate, endDate];
|
|
24
|
+
}
|
|
25
|
+
if (selectedDate && dateAdapter.isValid(selectedDate == null ? void 0 : selectedDate.startDate)) {
|
|
26
|
+
const { startDate, endDate } = selectedDate;
|
|
27
|
+
if (dateAdapter.isValid(endDate)) {
|
|
28
|
+
return dateAdapter.isSame(startDate, endDate, "month") ? createConsecutiveRange(startDate) : [
|
|
29
|
+
dateAdapter.startOf(startDate, "month"),
|
|
30
|
+
dateAdapter.startOf(endDate, "month")
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
return createConsecutiveRange(startDate);
|
|
34
|
+
}
|
|
35
|
+
const currentMonth = dateAdapter.startOf(
|
|
36
|
+
dateAdapter.today(timezone),
|
|
37
|
+
"month"
|
|
38
|
+
);
|
|
39
|
+
return [currentMonth, dateAdapter.add(currentMonth, { months: 1 })];
|
|
40
|
+
}
|
|
41
|
+
const withBaseName = makePrefixer("saltDatePickerPanel");
|
|
42
|
+
const DatePickerRangePanel = forwardRef(function DatePickerRangePanel2(props, ref) {
|
|
43
|
+
const { dateAdapter } = useLocalization();
|
|
44
|
+
const {
|
|
45
|
+
className,
|
|
46
|
+
defaultStartVisibleMonth: defaultStartVisibleMonthProp,
|
|
47
|
+
startVisibleMonth: startVisibleMonthProp,
|
|
48
|
+
onStartVisibleMonthChange,
|
|
49
|
+
defaultEndVisibleMonth: defaultEndVisibleMonthProp,
|
|
50
|
+
endVisibleMonth: endVisibleMonthProp,
|
|
51
|
+
onEndVisibleMonthChange,
|
|
52
|
+
helperText,
|
|
53
|
+
onFocusedDateChange,
|
|
54
|
+
onHoveredDateChange,
|
|
55
|
+
onSelectionChange,
|
|
56
|
+
StartCalendarProps: StartCalendarPropsProp,
|
|
57
|
+
StartCalendarNavigationProps,
|
|
58
|
+
StartCalendarGridProps,
|
|
59
|
+
EndCalendarProps: EndCalendarPropsProp,
|
|
60
|
+
EndCalendarNavigationProps,
|
|
61
|
+
EndCalendarGridProps,
|
|
62
|
+
...rest
|
|
63
|
+
} = props;
|
|
64
|
+
const targetWindow = useWindow();
|
|
65
|
+
useComponentCssInjection({
|
|
66
|
+
testId: "salt-date-picker-range-panel",
|
|
67
|
+
css: css_248z,
|
|
68
|
+
window: targetWindow
|
|
69
|
+
});
|
|
70
|
+
const calendarsRef = useRef(null);
|
|
71
|
+
const containerRef = useForkRef(ref, calendarsRef);
|
|
72
|
+
const {
|
|
73
|
+
state: {
|
|
74
|
+
timezone,
|
|
75
|
+
selectedDate,
|
|
76
|
+
minDate = dateAdapter.startOf(dateAdapter.today(timezone), "month"),
|
|
77
|
+
maxDate = dateAdapter.add(minDate, { months: 1 })
|
|
78
|
+
},
|
|
79
|
+
helpers: { select, isDayHighlighted, isDayUnselectable }
|
|
80
|
+
} = useDatePickerContext({
|
|
81
|
+
selectionVariant: "range"
|
|
82
|
+
});
|
|
83
|
+
const {
|
|
84
|
+
state: { initialFocusRef, focused }
|
|
85
|
+
} = useDatePickerOverlay();
|
|
86
|
+
const [hoveredDate, setHoveredDate] = useState(
|
|
87
|
+
null
|
|
88
|
+
);
|
|
89
|
+
const [[fallbackStartVisibleMonth, fallbackEndVisibleMonth]] = useState(
|
|
90
|
+
() => getFallbackVisibleMonths(dateAdapter, selectedDate, timezone)
|
|
91
|
+
);
|
|
92
|
+
const [startVisibleMonth, setStartVisibleMonth] = useControlled({
|
|
93
|
+
controlled: startVisibleMonthProp,
|
|
94
|
+
default: defaultStartVisibleMonthProp || fallbackStartVisibleMonth,
|
|
95
|
+
name: "DatePickerRangePanel",
|
|
96
|
+
state: "startVisibleMonth"
|
|
97
|
+
});
|
|
98
|
+
const [endVisibleMonth, setEndVisibleMonth] = useControlled({
|
|
99
|
+
controlled: endVisibleMonthProp,
|
|
100
|
+
default: defaultEndVisibleMonthProp || fallbackEndVisibleMonth,
|
|
101
|
+
name: "DatePickerRangePanel",
|
|
102
|
+
state: "endVisibleMonth"
|
|
103
|
+
});
|
|
104
|
+
const handleSelectionChange = useCallback(
|
|
105
|
+
(event, newDate) => {
|
|
106
|
+
select(event, newDate);
|
|
107
|
+
onSelectionChange == null ? void 0 : onSelectionChange(event, newDate);
|
|
108
|
+
},
|
|
109
|
+
[select, onSelectionChange]
|
|
110
|
+
);
|
|
111
|
+
const handleHoveredStartDateChange = useCallback(
|
|
112
|
+
(event, newHoveredDate) => {
|
|
113
|
+
setHoveredDate(newHoveredDate);
|
|
114
|
+
onHoveredDateChange == null ? void 0 : onHoveredDateChange(event, newHoveredDate);
|
|
115
|
+
},
|
|
116
|
+
[onHoveredDateChange]
|
|
117
|
+
);
|
|
118
|
+
const handleHoveredEndDateChange = useCallback(
|
|
119
|
+
(event, newHoveredDate) => {
|
|
120
|
+
setHoveredDate(newHoveredDate);
|
|
121
|
+
onHoveredDateChange == null ? void 0 : onHoveredDateChange(event, newHoveredDate);
|
|
122
|
+
},
|
|
123
|
+
[onHoveredDateChange]
|
|
124
|
+
);
|
|
125
|
+
const handleStartVisibleMonthChange = useCallback(
|
|
126
|
+
(event, newVisibleMonth) => {
|
|
127
|
+
setStartVisibleMonth(newVisibleMonth);
|
|
128
|
+
if (dateAdapter.compare(newVisibleMonth, endVisibleMonth) >= 0) {
|
|
129
|
+
setEndVisibleMonth(dateAdapter.add(newVisibleMonth, { months: 1 }));
|
|
130
|
+
}
|
|
131
|
+
onStartVisibleMonthChange == null ? void 0 : onStartVisibleMonthChange(event, newVisibleMonth);
|
|
132
|
+
},
|
|
133
|
+
[dateAdapter, endVisibleMonth, onStartVisibleMonthChange]
|
|
134
|
+
);
|
|
135
|
+
const handleEndVisibleMonthChange = useCallback(
|
|
136
|
+
(event, newVisibleMonth) => {
|
|
137
|
+
setEndVisibleMonth(newVisibleMonth);
|
|
138
|
+
if (dateAdapter.compare(newVisibleMonth, startVisibleMonth) <= 0) {
|
|
139
|
+
setStartVisibleMonth(
|
|
140
|
+
dateAdapter.startOf(
|
|
141
|
+
dateAdapter.subtract(newVisibleMonth, { months: 1 }),
|
|
142
|
+
"month"
|
|
143
|
+
)
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
onEndVisibleMonthChange == null ? void 0 : onEndVisibleMonthChange(event, newVisibleMonth);
|
|
147
|
+
},
|
|
148
|
+
[dateAdapter, startVisibleMonth, onEndVisibleMonthChange]
|
|
149
|
+
);
|
|
150
|
+
const calendarSelectedDate = {
|
|
151
|
+
startDate: selectedDate && dateAdapter.isValid(selectedDate.startDate) ? selectedDate.startDate : null,
|
|
152
|
+
endDate: selectedDate && dateAdapter.isValid(selectedDate.endDate) ? selectedDate.endDate : null
|
|
153
|
+
};
|
|
154
|
+
const [focusedDate, setFocusedDate] = useState(
|
|
155
|
+
null
|
|
156
|
+
);
|
|
157
|
+
const handleStartCalendarFocusedDateChange = useCallback(
|
|
158
|
+
(event, newFocusedDate) => {
|
|
159
|
+
setFocusedDate(newFocusedDate);
|
|
160
|
+
if (newFocusedDate && !dateAdapter.isSame(startVisibleMonth, newFocusedDate, "month")) {
|
|
161
|
+
handleStartVisibleMonthChange(
|
|
162
|
+
event,
|
|
163
|
+
dateAdapter.startOf(newFocusedDate, "month")
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
onFocusedDateChange == null ? void 0 : onFocusedDateChange(event, newFocusedDate);
|
|
167
|
+
},
|
|
168
|
+
[
|
|
169
|
+
dateAdapter,
|
|
170
|
+
startVisibleMonth,
|
|
171
|
+
handleStartVisibleMonthChange,
|
|
172
|
+
onFocusedDateChange
|
|
173
|
+
]
|
|
174
|
+
);
|
|
175
|
+
const handleEndCalendarFocusedDateChange = useCallback(
|
|
176
|
+
(event, newFocusedDate) => {
|
|
177
|
+
setFocusedDate(newFocusedDate);
|
|
178
|
+
if (newFocusedDate && !dateAdapter.isSame(endVisibleMonth, newFocusedDate, "month")) {
|
|
179
|
+
handleEndVisibleMonthChange(
|
|
180
|
+
event,
|
|
181
|
+
dateAdapter.startOf(newFocusedDate, "month")
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
onFocusedDateChange == null ? void 0 : onFocusedDateChange(event, newFocusedDate);
|
|
185
|
+
},
|
|
186
|
+
[
|
|
187
|
+
dateAdapter,
|
|
188
|
+
endVisibleMonth,
|
|
189
|
+
handleEndVisibleMonthChange,
|
|
190
|
+
onFocusedDateChange
|
|
191
|
+
]
|
|
192
|
+
);
|
|
193
|
+
const getNextFocusedDate = (nextStartVisibleMonth, nextEndVisibleMonth) => {
|
|
194
|
+
const isOutsideAllowedDates = (date) => {
|
|
195
|
+
return dateAdapter.compare(date, minDate) < 0 || dateAdapter.compare(date, maxDate) > 0;
|
|
196
|
+
};
|
|
197
|
+
const isDaySelectable = (date) => !(date && ((isDayUnselectable == null ? void 0 : isDayUnselectable(date)) || isOutsideAllowedDates(date)));
|
|
198
|
+
const getVisibleSelectedDate = (visibleMonth) => {
|
|
199
|
+
if ((selectedDate == null ? void 0 : selectedDate.startDate) && dateAdapter.isSame(visibleMonth, selectedDate.startDate, "month") && isDaySelectable(selectedDate.startDate)) {
|
|
200
|
+
return selectedDate.startDate;
|
|
201
|
+
}
|
|
202
|
+
if ((selectedDate == null ? void 0 : selectedDate.endDate) && dateAdapter.isSame(visibleMonth, selectedDate.endDate, "month") && isDaySelectable(selectedDate.endDate)) {
|
|
203
|
+
return selectedDate.endDate;
|
|
204
|
+
}
|
|
205
|
+
return null;
|
|
206
|
+
};
|
|
207
|
+
let focusSelectedDate = getVisibleSelectedDate(nextStartVisibleMonth);
|
|
208
|
+
focusSelectedDate = focusSelectedDate ?? getVisibleSelectedDate(nextEndVisibleMonth);
|
|
209
|
+
if (focusSelectedDate && isDaySelectable(focusSelectedDate)) {
|
|
210
|
+
return focusSelectedDate;
|
|
211
|
+
}
|
|
212
|
+
const today = dateAdapter.today(timezone);
|
|
213
|
+
if ((dateAdapter.isSame(nextStartVisibleMonth, today, "month") || dateAdapter.isSame(nextEndVisibleMonth, today, "month")) && isDaySelectable(today)) {
|
|
214
|
+
return today;
|
|
215
|
+
}
|
|
216
|
+
const getFirstSelectableDate = (visibleMonth) => {
|
|
217
|
+
const firstSelectableDate = generateDatesForMonth(
|
|
218
|
+
dateAdapter,
|
|
219
|
+
visibleMonth
|
|
220
|
+
).find((visibleDay) => isDaySelectable(visibleDay));
|
|
221
|
+
return firstSelectableDate ?? null;
|
|
222
|
+
};
|
|
223
|
+
return getFirstSelectableDate(nextStartVisibleMonth) ?? getFirstSelectableDate(nextEndVisibleMonth);
|
|
224
|
+
};
|
|
225
|
+
useIsomorphicLayoutEffect(() => {
|
|
226
|
+
if (!focused) {
|
|
227
|
+
setFocusedDate(null);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const isStartDateValid = (selectedDate == null ? void 0 : selectedDate.startDate) && dateAdapter.isValid(selectedDate.startDate) && dateAdapter.compare(selectedDate.startDate, minDate) >= 0 && dateAdapter.compare(selectedDate.startDate, maxDate) <= 0;
|
|
231
|
+
const isEndDateValid = (selectedDate == null ? void 0 : selectedDate.endDate) && dateAdapter.isValid(selectedDate.endDate) && dateAdapter.compare(selectedDate.endDate, minDate) >= 0 && dateAdapter.compare(selectedDate.endDate, maxDate) <= 0;
|
|
232
|
+
let nextStartVisibleMonth = startVisibleMonth;
|
|
233
|
+
let nextEndVisibleMonth = endVisibleMonth;
|
|
234
|
+
const setVisibleMonths = (start, end) => {
|
|
235
|
+
nextStartVisibleMonth = dateAdapter.startOf(start, "month");
|
|
236
|
+
nextEndVisibleMonth = dateAdapter.startOf(end, "month");
|
|
237
|
+
};
|
|
238
|
+
if ((selectedDate == null ? void 0 : selectedDate.startDate) && (selectedDate == null ? void 0 : selectedDate.endDate) && isStartDateValid && isEndDateValid) {
|
|
239
|
+
if (dateAdapter.isSame(
|
|
240
|
+
selectedDate.startDate,
|
|
241
|
+
startVisibleMonth,
|
|
242
|
+
"month"
|
|
243
|
+
) && dateAdapter.isSame(selectedDate.endDate, startVisibleMonth, "month")) {
|
|
244
|
+
setVisibleMonths(
|
|
245
|
+
selectedDate.startDate,
|
|
246
|
+
dateAdapter.add(selectedDate.startDate, { months: 1 })
|
|
247
|
+
);
|
|
248
|
+
} else {
|
|
249
|
+
setVisibleMonths(selectedDate.startDate, selectedDate.endDate);
|
|
250
|
+
}
|
|
251
|
+
} else if ((selectedDate == null ? void 0 : selectedDate.startDate) && isStartDateValid) {
|
|
252
|
+
setVisibleMonths(
|
|
253
|
+
selectedDate.startDate,
|
|
254
|
+
dateAdapter.add(selectedDate.startDate, { months: 1 })
|
|
255
|
+
);
|
|
256
|
+
} else if ((selectedDate == null ? void 0 : selectedDate.endDate) && isEndDateValid) {
|
|
257
|
+
setVisibleMonths(
|
|
258
|
+
dateAdapter.subtract(selectedDate.endDate, { months: 1 }),
|
|
259
|
+
selectedDate.endDate
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
if (!focusedDate) {
|
|
263
|
+
setFocusedDate((prevFocusedDate) => {
|
|
264
|
+
if (!prevFocusedDate) {
|
|
265
|
+
return getNextFocusedDate(nextStartVisibleMonth, nextEndVisibleMonth);
|
|
266
|
+
}
|
|
267
|
+
return prevFocusedDate;
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}, [dateAdapter, minDate, maxDate, focused]);
|
|
271
|
+
const StartCalendarProps = {
|
|
272
|
+
visibleMonth: startVisibleMonth,
|
|
273
|
+
hoveredDate,
|
|
274
|
+
selectedDate: calendarSelectedDate,
|
|
275
|
+
isDayHighlighted,
|
|
276
|
+
isDayUnselectable,
|
|
277
|
+
focusedDateRef: initialFocusRef,
|
|
278
|
+
focusedDate: focusedDate && dateAdapter.compare(
|
|
279
|
+
focusedDate,
|
|
280
|
+
dateAdapter.startOf(endVisibleMonth, "month")
|
|
281
|
+
) < 0 ? focusedDate : null,
|
|
282
|
+
onHoveredDateChange: handleHoveredStartDateChange,
|
|
283
|
+
onFocusedDateChange: handleStartCalendarFocusedDateChange,
|
|
284
|
+
onVisibleMonthChange: handleStartVisibleMonthChange,
|
|
285
|
+
onSelectionChange: handleSelectionChange,
|
|
286
|
+
hideOutOfRangeDates: true,
|
|
287
|
+
minDate,
|
|
288
|
+
maxDate,
|
|
289
|
+
timezone,
|
|
290
|
+
...StartCalendarPropsProp
|
|
291
|
+
};
|
|
292
|
+
const EndCalendarProps = {
|
|
293
|
+
visibleMonth: endVisibleMonth,
|
|
294
|
+
hoveredDate,
|
|
295
|
+
isDayHighlighted,
|
|
296
|
+
isDayUnselectable,
|
|
297
|
+
focusedDateRef: initialFocusRef,
|
|
298
|
+
focusedDate: focusedDate && dateAdapter.compare(
|
|
299
|
+
focusedDate,
|
|
300
|
+
dateAdapter.startOf(endVisibleMonth, "month")
|
|
301
|
+
) >= 0 ? focusedDate : null,
|
|
302
|
+
selectedDate: calendarSelectedDate,
|
|
303
|
+
onFocusedDateChange: handleEndCalendarFocusedDateChange,
|
|
304
|
+
onHoveredDateChange: handleHoveredEndDateChange,
|
|
305
|
+
onVisibleMonthChange: handleEndVisibleMonthChange,
|
|
306
|
+
onSelectionChange: handleSelectionChange,
|
|
307
|
+
hideOutOfRangeDates: true,
|
|
308
|
+
minDate,
|
|
309
|
+
maxDate,
|
|
310
|
+
timezone,
|
|
311
|
+
...EndCalendarPropsProp
|
|
312
|
+
};
|
|
313
|
+
return /* @__PURE__ */ jsxs(
|
|
314
|
+
StackLayout,
|
|
315
|
+
{
|
|
316
|
+
separators: true,
|
|
317
|
+
gap: 0,
|
|
318
|
+
className: clsx(className, withBaseName("container")),
|
|
319
|
+
ref: containerRef,
|
|
320
|
+
...rest,
|
|
321
|
+
children: [
|
|
322
|
+
helperText && /* @__PURE__ */ jsx(FlexItem, { className: withBaseName("header"), children: /* @__PURE__ */ jsx(FormFieldHelperText, { children: helperText }) }),
|
|
323
|
+
/* @__PURE__ */ jsx(FlexLayout, { gap: 0, children: /* @__PURE__ */ jsxs(FormFieldContext.Provider, { value: {}, children: [
|
|
324
|
+
/* @__PURE__ */ jsxs(Calendar, { selectionVariant: "range", ...StartCalendarProps, children: [
|
|
325
|
+
/* @__PURE__ */ jsx(
|
|
326
|
+
CalendarNavigation,
|
|
327
|
+
{
|
|
328
|
+
NextButtonProps: {
|
|
329
|
+
disabled: dateAdapter.isSame(
|
|
330
|
+
startVisibleMonth,
|
|
331
|
+
dateAdapter.subtract(maxDate, { months: 1 }),
|
|
332
|
+
"month"
|
|
333
|
+
)
|
|
334
|
+
},
|
|
335
|
+
...StartCalendarNavigationProps
|
|
336
|
+
}
|
|
337
|
+
),
|
|
338
|
+
/* @__PURE__ */ jsx(CalendarGrid, { ...StartCalendarGridProps })
|
|
339
|
+
] }),
|
|
340
|
+
/* @__PURE__ */ jsxs(Calendar, { selectionVariant: "range", ...EndCalendarProps, children: [
|
|
341
|
+
/* @__PURE__ */ jsx(
|
|
342
|
+
CalendarNavigation,
|
|
343
|
+
{
|
|
344
|
+
NextButtonProps: {
|
|
345
|
+
disabled: dateAdapter.isSame(
|
|
346
|
+
endVisibleMonth,
|
|
347
|
+
dateAdapter.add(minDate, { months: 1 }),
|
|
348
|
+
"month"
|
|
349
|
+
)
|
|
350
|
+
},
|
|
351
|
+
...EndCalendarNavigationProps
|
|
352
|
+
}
|
|
353
|
+
),
|
|
354
|
+
/* @__PURE__ */ jsx(CalendarGrid, { ...EndCalendarGridProps })
|
|
355
|
+
] })
|
|
356
|
+
] }) })
|
|
357
|
+
]
|
|
358
|
+
}
|
|
359
|
+
);
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
export { DatePickerRangePanel };
|
|
363
|
+
//# sourceMappingURL=DatePickerRangePanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePickerRangePanel.js","sources":["../src/date-picker/DatePickerRangePanel.tsx"],"sourcesContent":["import {\n FlexItem,\n FlexLayout,\n FormFieldContext,\n type FormFieldContextValue,\n FormFieldHelperText,\n makePrefixer,\n StackLayout,\n useControlled,\n useForkRef,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport type {\n DateFrameworkType,\n SaltDateAdapter,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type SyntheticEvent,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport {\n Calendar,\n CalendarGrid,\n type CalendarGridProps,\n CalendarNavigation,\n type CalendarNavigationProps,\n type CalendarOffsetProps,\n type CalendarProps,\n type CalendarRangeProps,\n type DateRangeSelection,\n type UseCalendarSelectionRangeProps,\n} from \"../calendar\";\nimport { generateDatesForMonth } from \"../calendar/internal/utils\";\nimport { useLocalization } from \"../localization-provider\";\nimport {\n type RangeDatePickerState,\n useDatePickerContext,\n} from \"./DatePickerContext\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\nimport datePickerPanelCss from \"./DatePickerPanel.css\";\n\n/**\n * Props for the DatePickerRangePanel component.\n */\nexport interface DatePickerRangePanelProps\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Callback fired when a date range is selected.\n * @param event - The synthetic event.\n * @param selectedDate - The selected date range or null.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate?: DateRangeSelection | null,\n ) => void;\n\n /**\n * Helper text to be displayed below the date picker.\n */\n helperText?: string;\n\n /**\n * The currently visible month for the start date.\n */\n startVisibleMonth?: DateFrameworkType;\n\n /**\n * The default visible month for the start date.\n */\n defaultStartVisibleMonth?: DateFrameworkType;\n\n /**\n * Callback fired when the visible month for the start date changes.\n * @param event - The synthetic event, or null if called by effect.\n * @param visibleMonth - The new visible month for the start date.\n */\n onStartVisibleMonthChange?: (\n event: SyntheticEvent | null,\n visibleMonth: DateFrameworkType,\n ) => void;\n\n /**\n * The currently visible month for the end date.\n */\n endVisibleMonth?: DateFrameworkType;\n\n /**\n * The default visible month for the end date.\n */\n defaultEndVisibleMonth?: DateFrameworkType;\n\n /**\n * Callback fired when the visible month for the end date changes.\n * @param event - The synthetic event or null if triggered by code.\n * @param visibleMonth - The new visible month for the end date.\n */\n onEndVisibleMonthChange?: (\n event: SyntheticEvent | null,\n visibleMonth: DateFrameworkType,\n ) => void;\n\n /**\n * Callback fired when the focused date changes.\n * @param event - The synthetic event or null if triggered by code.\n * @param focusedDate - The new focused date.\n */\n onFocusedDateChange?: (\n event: SyntheticEvent | null,\n focusedDate?: DateFrameworkType | null,\n ) => void;\n /**\n * Callback fired when the hovered date changes.\n * @param event - The synthetic event.\n * @param hoveredDate - The new hovered date.\n */\n onHoveredDateChange?: (\n event: SyntheticEvent,\n hoveredDate?: DateFrameworkType | null,\n ) => void;\n\n /**\n * Props to be passed to the start date CalendarNavigation component.\n */\n StartCalendarNavigationProps?: CalendarNavigationProps;\n\n /**\n * Props to be passed to the start date calendar component.\n */\n StartCalendarProps?: Partial<\n Omit<\n CalendarRangeProps | CalendarOffsetProps,\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"multiselect\"\n | \"onFocusedDateChange\"\n | \"onHoveredDateChange\"\n | \"onSelectionChange\"\n | \"onVisibleMonthChange\"\n >\n >;\n /**\n * Props to be passed to the start date CalendarGrid component.\n */\n StartCalendarGridProps?: CalendarGridProps;\n\n /**\n * Props to be passed to the end date CalendarNavigation component.\n */\n EndCalendarProps?: Partial<\n Omit<\n CalendarRangeProps,\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"multiselect\"\n | \"onFocusedDateChange\"\n | \"onHoveredDateChange\"\n | \"onSelectionChange\"\n | \"onVisibleMonthChange\"\n >\n >;\n\n /**\n * Props to be passed to the end date CalendarNavigation component.\n */\n EndCalendarNavigationProps?: CalendarNavigationProps;\n /**\n * Props to be passed to the end date CalendarGrid component.\n */\n EndCalendarGridProps?: CalendarGridProps;\n}\n\nfunction getFallbackVisibleMonths(\n dateAdapter: SaltDateAdapter,\n selectedDate: DateRangeSelection | null,\n timezone: Timezone = \"default\",\n) {\n function createConsecutiveRange(date: DateFrameworkType) {\n const startDate = dateAdapter.startOf(date, \"month\");\n const endDate = dateAdapter.add(startDate, { months: 1 });\n return [startDate, endDate];\n }\n\n if (selectedDate && dateAdapter.isValid(selectedDate?.startDate)) {\n const { startDate, endDate } = selectedDate;\n if (dateAdapter.isValid(endDate)) {\n return dateAdapter.isSame(startDate, endDate, \"month\")\n ? createConsecutiveRange(startDate)\n : [\n dateAdapter.startOf(startDate, \"month\"),\n dateAdapter.startOf(endDate, \"month\"),\n ];\n }\n return createConsecutiveRange(startDate);\n }\n\n const currentMonth = dateAdapter.startOf(\n dateAdapter.today(timezone),\n \"month\",\n );\n return [currentMonth, dateAdapter.add(currentMonth, { months: 1 })];\n}\n\nconst withBaseName = makePrefixer(\"saltDatePickerPanel\");\n\nexport const DatePickerRangePanel = forwardRef(function DatePickerRangePanel(\n props: DatePickerRangePanelProps,\n ref: React.Ref<HTMLDivElement>,\n) {\n const { dateAdapter } = useLocalization();\n\n const {\n className,\n defaultStartVisibleMonth: defaultStartVisibleMonthProp,\n startVisibleMonth: startVisibleMonthProp,\n onStartVisibleMonthChange,\n defaultEndVisibleMonth: defaultEndVisibleMonthProp,\n endVisibleMonth: endVisibleMonthProp,\n onEndVisibleMonthChange,\n helperText,\n onFocusedDateChange,\n onHoveredDateChange,\n onSelectionChange,\n StartCalendarProps: StartCalendarPropsProp,\n StartCalendarNavigationProps,\n StartCalendarGridProps,\n EndCalendarProps: EndCalendarPropsProp,\n EndCalendarNavigationProps,\n EndCalendarGridProps,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-range-panel\",\n css: datePickerPanelCss,\n window: targetWindow,\n });\n\n const calendarsRef = useRef<HTMLDivElement>(null);\n const containerRef = useForkRef(ref, calendarsRef);\n\n const {\n state: {\n timezone,\n selectedDate,\n minDate = dateAdapter.startOf(dateAdapter.today(timezone), \"month\"),\n maxDate = dateAdapter.add(minDate, { months: 1 }),\n },\n helpers: { select, isDayHighlighted, isDayUnselectable },\n } = useDatePickerContext({\n selectionVariant: \"range\",\n }) as RangeDatePickerState;\n\n const {\n state: { initialFocusRef, focused },\n } = useDatePickerOverlay();\n\n const [hoveredDate, setHoveredDate] = useState<DateFrameworkType | null>(\n null,\n );\n\n const [[fallbackStartVisibleMonth, fallbackEndVisibleMonth]] = useState(() =>\n getFallbackVisibleMonths(dateAdapter, selectedDate, timezone),\n );\n\n const [startVisibleMonth, setStartVisibleMonth] = useControlled({\n controlled: startVisibleMonthProp,\n default: defaultStartVisibleMonthProp || fallbackStartVisibleMonth,\n name: \"DatePickerRangePanel\",\n state: \"startVisibleMonth\",\n });\n\n const [endVisibleMonth, setEndVisibleMonth] = useControlled({\n controlled: endVisibleMonthProp,\n default: defaultEndVisibleMonthProp || fallbackEndVisibleMonth,\n name: \"DatePickerRangePanel\",\n state: \"endVisibleMonth\",\n });\n\n const handleSelectionChange = useCallback(\n (event: SyntheticEvent, newDate: DateRangeSelection | null) => {\n select(event, newDate);\n onSelectionChange?.(event, newDate);\n },\n [select, onSelectionChange],\n );\n\n const handleHoveredStartDateChange: CalendarProps[\"onHoveredDateChange\"] =\n useCallback(\n (event: SyntheticEvent, newHoveredDate: DateFrameworkType | null) => {\n setHoveredDate(newHoveredDate);\n onHoveredDateChange?.(event, newHoveredDate);\n },\n [onHoveredDateChange],\n );\n\n const handleHoveredEndDateChange = useCallback(\n (event: SyntheticEvent, newHoveredDate: DateFrameworkType | null) => {\n setHoveredDate(newHoveredDate);\n onHoveredDateChange?.(event, newHoveredDate);\n },\n [onHoveredDateChange],\n );\n\n const handleStartVisibleMonthChange = useCallback(\n (event: SyntheticEvent | null, newVisibleMonth: DateFrameworkType) => {\n setStartVisibleMonth(newVisibleMonth);\n if (dateAdapter.compare(newVisibleMonth, endVisibleMonth) >= 0) {\n setEndVisibleMonth(dateAdapter.add(newVisibleMonth, { months: 1 }));\n }\n onStartVisibleMonthChange?.(event, newVisibleMonth);\n },\n [dateAdapter, endVisibleMonth, onStartVisibleMonthChange],\n );\n\n const handleEndVisibleMonthChange = useCallback(\n (event: SyntheticEvent | null, newVisibleMonth: DateFrameworkType) => {\n setEndVisibleMonth(newVisibleMonth);\n if (dateAdapter.compare(newVisibleMonth, startVisibleMonth) <= 0) {\n setStartVisibleMonth(\n dateAdapter.startOf(\n dateAdapter.subtract(newVisibleMonth, { months: 1 }),\n \"month\",\n ),\n );\n }\n onEndVisibleMonthChange?.(event, newVisibleMonth);\n },\n [dateAdapter, startVisibleMonth, onEndVisibleMonthChange],\n );\n\n const calendarSelectedDate = {\n startDate:\n selectedDate && dateAdapter.isValid(selectedDate.startDate)\n ? selectedDate.startDate\n : null,\n endDate:\n selectedDate && dateAdapter.isValid(selectedDate.endDate)\n ? selectedDate.endDate\n : null,\n };\n\n const [focusedDate, setFocusedDate] = useState<DateFrameworkType | null>(\n null,\n );\n\n const handleStartCalendarFocusedDateChange = useCallback(\n (event: SyntheticEvent | null, newFocusedDate: DateFrameworkType) => {\n setFocusedDate(newFocusedDate);\n if (\n newFocusedDate &&\n !dateAdapter.isSame(startVisibleMonth, newFocusedDate, \"month\")\n ) {\n handleStartVisibleMonthChange(\n event,\n dateAdapter.startOf(newFocusedDate, \"month\"),\n );\n }\n onFocusedDateChange?.(event, newFocusedDate);\n },\n [\n dateAdapter,\n startVisibleMonth,\n handleStartVisibleMonthChange,\n onFocusedDateChange,\n ],\n );\n\n const handleEndCalendarFocusedDateChange = useCallback(\n (event: SyntheticEvent | null, newFocusedDate: DateFrameworkType) => {\n setFocusedDate(newFocusedDate);\n if (\n newFocusedDate &&\n !dateAdapter.isSame(endVisibleMonth, newFocusedDate, \"month\")\n ) {\n handleEndVisibleMonthChange(\n event,\n dateAdapter.startOf(newFocusedDate, \"month\"),\n );\n }\n onFocusedDateChange?.(event, newFocusedDate);\n },\n [\n dateAdapter,\n endVisibleMonth,\n handleEndVisibleMonthChange,\n onFocusedDateChange,\n ],\n );\n\n const getNextFocusedDate = (\n nextStartVisibleMonth: DateFrameworkType,\n nextEndVisibleMonth: DateFrameworkType,\n ) => {\n const isOutsideAllowedDates = (date: DateFrameworkType) => {\n return (\n dateAdapter.compare(date, minDate) < 0 ||\n dateAdapter.compare(date, maxDate) > 0\n );\n };\n const isDaySelectable = (date: DateFrameworkType) =>\n !(\n date &&\n (isDayUnselectable?.(date) ||\n isOutsideAllowedDates(date as DateFrameworkType))\n );\n\n const getVisibleSelectedDate = (visibleMonth: DateFrameworkType) => {\n if (\n selectedDate?.startDate &&\n dateAdapter.isSame(visibleMonth, selectedDate.startDate, \"month\") &&\n isDaySelectable(selectedDate.startDate)\n ) {\n return selectedDate.startDate;\n }\n if (\n selectedDate?.endDate &&\n dateAdapter.isSame(visibleMonth, selectedDate.endDate, \"month\") &&\n isDaySelectable(selectedDate.endDate)\n ) {\n return selectedDate.endDate;\n }\n return null;\n };\n let focusSelectedDate = getVisibleSelectedDate(nextStartVisibleMonth);\n focusSelectedDate =\n focusSelectedDate ?? getVisibleSelectedDate(nextEndVisibleMonth);\n if (focusSelectedDate && isDaySelectable(focusSelectedDate)) {\n return focusSelectedDate;\n }\n // Today\n const today = dateAdapter.today(timezone);\n if (\n (dateAdapter.isSame(nextStartVisibleMonth, today, \"month\") ||\n dateAdapter.isSame(nextEndVisibleMonth, today, \"month\")) &&\n isDaySelectable(today)\n ) {\n return today;\n }\n // First selectable date in either calendar\n const getFirstSelectableDate = (visibleMonth: DateFrameworkType) => {\n const firstSelectableDate = generateDatesForMonth(\n dateAdapter,\n visibleMonth,\n ).find((visibleDay) => isDaySelectable(visibleDay));\n return firstSelectableDate ?? null;\n };\n\n return (\n getFirstSelectableDate(nextStartVisibleMonth) ??\n getFirstSelectableDate(nextEndVisibleMonth)\n );\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: only run when focus/min/max date changes\n useIsomorphicLayoutEffect(() => {\n if (!focused) {\n setFocusedDate(null);\n return;\n }\n\n const isStartDateValid =\n selectedDate?.startDate &&\n dateAdapter.isValid(selectedDate.startDate) &&\n dateAdapter.compare(selectedDate.startDate, minDate) >= 0 &&\n dateAdapter.compare(selectedDate.startDate, maxDate) <= 0;\n\n const isEndDateValid =\n selectedDate?.endDate &&\n dateAdapter.isValid(selectedDate.endDate) &&\n dateAdapter.compare(selectedDate.endDate, minDate) >= 0 &&\n dateAdapter.compare(selectedDate.endDate, maxDate) <= 0;\n\n let nextStartVisibleMonth = startVisibleMonth;\n let nextEndVisibleMonth = endVisibleMonth;\n\n const setVisibleMonths = (\n start: typeof nextStartVisibleMonth,\n end: typeof nextEndVisibleMonth,\n ) => {\n nextStartVisibleMonth = dateAdapter.startOf(start, \"month\");\n nextEndVisibleMonth = dateAdapter.startOf(end, \"month\");\n };\n\n if (\n selectedDate?.startDate &&\n selectedDate?.endDate &&\n isStartDateValid &&\n isEndDateValid\n ) {\n if (\n dateAdapter.isSame(\n selectedDate.startDate,\n startVisibleMonth,\n \"month\",\n ) &&\n dateAdapter.isSame(selectedDate.endDate, startVisibleMonth, \"month\")\n ) {\n setVisibleMonths(\n selectedDate.startDate,\n dateAdapter.add(selectedDate.startDate, { months: 1 }),\n );\n } else {\n setVisibleMonths(selectedDate.startDate, selectedDate.endDate);\n }\n } else if (selectedDate?.startDate && isStartDateValid) {\n setVisibleMonths(\n selectedDate.startDate,\n dateAdapter.add(selectedDate.startDate, { months: 1 }),\n );\n } else if (selectedDate?.endDate && isEndDateValid) {\n setVisibleMonths(\n dateAdapter.subtract(selectedDate.endDate, { months: 1 }),\n selectedDate.endDate,\n );\n }\n\n if (!focusedDate) {\n setFocusedDate((prevFocusedDate: DateFrameworkType | null) => {\n if (!prevFocusedDate) {\n return getNextFocusedDate(nextStartVisibleMonth, nextEndVisibleMonth);\n }\n return prevFocusedDate;\n });\n }\n }, [dateAdapter, minDate, maxDate, focused]);\n\n const StartCalendarProps = {\n visibleMonth: startVisibleMonth,\n hoveredDate,\n selectedDate: calendarSelectedDate,\n isDayHighlighted,\n isDayUnselectable,\n focusedDateRef: initialFocusRef,\n focusedDate:\n focusedDate &&\n dateAdapter.compare(\n focusedDate,\n dateAdapter.startOf(endVisibleMonth, \"month\"),\n ) < 0\n ? focusedDate\n : null,\n onHoveredDateChange: handleHoveredStartDateChange,\n onFocusedDateChange: handleStartCalendarFocusedDateChange,\n onVisibleMonthChange: handleStartVisibleMonthChange,\n onSelectionChange: handleSelectionChange,\n hideOutOfRangeDates: true,\n minDate,\n maxDate,\n timezone,\n ...StartCalendarPropsProp,\n } as Partial<UseCalendarSelectionRangeProps>;\n const EndCalendarProps = {\n visibleMonth: endVisibleMonth,\n hoveredDate,\n isDayHighlighted,\n isDayUnselectable,\n focusedDateRef: initialFocusRef,\n focusedDate:\n focusedDate &&\n dateAdapter.compare(\n focusedDate,\n dateAdapter.startOf(endVisibleMonth, \"month\"),\n ) >= 0\n ? focusedDate\n : null,\n selectedDate: calendarSelectedDate,\n onFocusedDateChange: handleEndCalendarFocusedDateChange,\n onHoveredDateChange: handleHoveredEndDateChange,\n onVisibleMonthChange: handleEndVisibleMonthChange,\n onSelectionChange: handleSelectionChange,\n hideOutOfRangeDates: true,\n minDate,\n maxDate,\n timezone,\n ...EndCalendarPropsProp,\n } as Partial<UseCalendarSelectionRangeProps>;\n\n return (\n <StackLayout\n separators\n gap={0}\n className={clsx(className, withBaseName(\"container\"))}\n ref={containerRef}\n {...rest}\n >\n {helperText && (\n <FlexItem className={withBaseName(\"header\")}>\n <FormFieldHelperText>{helperText}</FormFieldHelperText>\n </FlexItem>\n )}\n <FlexLayout gap={0}>\n {/* Avoid Dropdowns in Calendar inheriting the FormField's state */}\n <FormFieldContext.Provider value={{} as FormFieldContextValue}>\n <Calendar selectionVariant={\"range\"} {...StartCalendarProps}>\n <CalendarNavigation\n NextButtonProps={{\n disabled: dateAdapter.isSame(\n startVisibleMonth,\n dateAdapter.subtract(maxDate, { months: 1 }),\n \"month\",\n ),\n }}\n {...StartCalendarNavigationProps}\n />\n <CalendarGrid {...StartCalendarGridProps} />\n </Calendar>\n <Calendar selectionVariant={\"range\"} {...EndCalendarProps}>\n <CalendarNavigation\n NextButtonProps={{\n disabled: dateAdapter.isSame(\n endVisibleMonth,\n dateAdapter.add(minDate, { months: 1 }),\n \"month\",\n ),\n }}\n {...EndCalendarNavigationProps}\n />\n <CalendarGrid {...EndCalendarGridProps} />\n </Calendar>\n </FormFieldContext.Provider>\n </FlexLayout>\n </StackLayout>\n );\n});\n"],"names":["DatePickerRangePanel","datePickerPanelCss"],"mappings":"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"}
|