@salt-ds/lab 1.0.0-alpha.50 → 1.0.0-alpha.52
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/css/salt-lab.css +279 -267
- package/dist-cjs/calendar/Calendar.css.js +1 -1
- package/dist-cjs/calendar/Calendar.js +6 -15
- package/dist-cjs/calendar/Calendar.js.map +1 -1
- package/dist-cjs/calendar/CalendarNavigation.css.js +6 -0
- package/dist-cjs/calendar/{internal/CalendarNavigation.js → CalendarNavigation.js} +160 -63
- package/dist-cjs/calendar/CalendarNavigation.js.map +1 -0
- package/dist-cjs/calendar/formatDate.js +56 -0
- package/dist-cjs/calendar/formatDate.js.map +1 -0
- package/dist-cjs/calendar/internal/CalendarCarousel.js +3 -3
- package/dist-cjs/calendar/internal/CalendarCarousel.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
- package/dist-cjs/calendar/internal/CalendarDay.js +45 -33
- package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarMonth.js +3 -2
- package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarWeekHeader.js +3 -3
- package/dist-cjs/calendar/internal/CalendarWeekHeader.js.map +1 -1
- package/dist-cjs/calendar/internal/useFocusManagement.js +7 -4
- package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
- package/dist-cjs/calendar/internal/utils.js +28 -23
- package/dist-cjs/calendar/internal/utils.js.map +1 -1
- package/dist-cjs/calendar/useCalendar.js +94 -45
- package/dist-cjs/calendar/useCalendar.js.map +1 -1
- package/dist-cjs/calendar/useCalendarDay.js +19 -10
- package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
- package/dist-cjs/calendar/useCalendarSelection.js +360 -0
- package/dist-cjs/calendar/useCalendarSelection.js.map +1 -0
- package/dist-cjs/cascading-menu/internal/useMouseHandlers.js.map +1 -1
- package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/ComboBox.css.js +1 -1
- package/dist-cjs/common-hooks/useCollectionItems.js.map +1 -1
- package/dist-cjs/content-status/ContentStatus.css.js +1 -1
- package/dist-cjs/date-input/DateInput.css.js +1 -1
- package/dist-cjs/date-input/DateInputRange.js +355 -0
- package/dist-cjs/date-input/DateInputRange.js.map +1 -0
- package/dist-cjs/date-input/DateInputSingle.js +229 -0
- package/dist-cjs/date-input/DateInputSingle.js.map +1 -0
- package/dist-cjs/date-input/utils.js +65 -0
- package/dist-cjs/date-input/utils.js.map +1 -0
- package/dist-cjs/date-picker/DatePicker.js +40 -148
- package/dist-cjs/date-picker/DatePicker.js.map +1 -1
- 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 +102 -0
- package/dist-cjs/date-picker/DatePickerActions.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerContext.js +23 -17
- package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
- 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 +50 -0
- package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerOverlayProvider.js +105 -0
- package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerPanel.css.js +1 -1
- package/dist-cjs/date-picker/DatePickerRangeInput.js +118 -0
- package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerRangePanel.js +206 -0
- package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerSingleInput.js +97 -0
- package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerSinglePanel.js +138 -0
- package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -0
- package/dist-cjs/date-picker/useDatePicker.js +179 -0
- package/dist-cjs/date-picker/useDatePicker.js.map +1 -0
- package/dist-cjs/dropdown/Dropdown.css.js +1 -1
- package/dist-cjs/dropdown/DropdownBase.js +1 -1
- package/dist-cjs/dropdown/DropdownBase.js.map +1 -1
- package/dist-cjs/dropdown/useDropdown.js.map +1 -1
- package/dist-cjs/form-field-legacy/FormLabel.js.map +1 -1
- package/dist-cjs/index.js +43 -10
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/list/List.js.map +1 -1
- package/dist-cjs/menu-button/MenuButtonTrigger.css.js +1 -1
- package/dist-cjs/query-input/QueryInput.css.js +1 -1
- package/dist-cjs/slider/Slider.css.js +1 -1
- package/dist-cjs/slider/Slider.js +53 -105
- package/dist-cjs/slider/Slider.js.map +1 -1
- package/dist-cjs/slider/internal/SliderContext.js +21 -0
- package/dist-cjs/slider/internal/SliderContext.js.map +1 -0
- package/dist-cjs/slider/internal/SliderMarks.js +31 -0
- package/dist-cjs/slider/internal/SliderMarks.js.map +1 -0
- package/dist-cjs/slider/internal/SliderSelection.js +17 -10
- package/dist-cjs/slider/internal/SliderSelection.js.map +1 -1
- package/dist-cjs/slider/internal/SliderThumb.js +77 -0
- package/dist-cjs/slider/internal/SliderThumb.js.map +1 -0
- package/dist-cjs/slider/internal/SliderTrack.js +91 -0
- package/dist-cjs/slider/internal/SliderTrack.js.map +1 -0
- package/dist-cjs/slider/internal/useKeyDownThumb.js +53 -0
- package/dist-cjs/slider/internal/useKeyDownThumb.js.map +1 -0
- package/dist-cjs/slider/internal/utils.js +78 -116
- package/dist-cjs/slider/internal/utils.js.map +1 -1
- package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.css.js +1 -1
- package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js +29 -25
- package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
- package/dist-cjs/tabs/TabActivationIndicator.css.js +1 -1
- package/dist-cjs/tabs/Tabstrip.css.js +1 -1
- package/dist-cjs/tabs/useTabs.js.map +1 -1
- package/dist-cjs/toolbar/overflow-panel/OverflowPanel.css.js +1 -1
- package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-es/calendar/Calendar.css.js +1 -1
- package/dist-es/calendar/Calendar.js +7 -16
- package/dist-es/calendar/Calendar.js.map +1 -1
- package/dist-es/calendar/CalendarNavigation.css.js +4 -0
- package/dist-es/calendar/CalendarNavigation.js +308 -0
- package/dist-es/calendar/CalendarNavigation.js.map +1 -0
- package/dist-es/calendar/formatDate.js +51 -0
- package/dist-es/calendar/formatDate.js.map +1 -0
- package/dist-es/calendar/internal/CalendarCarousel.js +3 -3
- package/dist-es/calendar/internal/CalendarCarousel.js.map +1 -1
- package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
- package/dist-es/calendar/internal/CalendarDay.js +45 -33
- package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
- package/dist-es/calendar/internal/CalendarMonth.js +3 -2
- package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
- package/dist-es/calendar/internal/CalendarWeekHeader.js +3 -3
- package/dist-es/calendar/internal/CalendarWeekHeader.js.map +1 -1
- package/dist-es/calendar/internal/useFocusManagement.js +7 -4
- package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
- package/dist-es/calendar/internal/utils.js +29 -23
- package/dist-es/calendar/internal/utils.js.map +1 -1
- package/dist-es/calendar/useCalendar.js +96 -47
- package/dist-es/calendar/useCalendar.js.map +1 -1
- package/dist-es/calendar/useCalendarDay.js +20 -11
- package/dist-es/calendar/useCalendarDay.js.map +1 -1
- package/dist-es/calendar/useCalendarSelection.js +350 -0
- package/dist-es/calendar/useCalendarSelection.js.map +1 -0
- package/dist-es/cascading-menu/internal/useMouseHandlers.js.map +1 -1
- package/dist-es/color-chooser/ColorChooser.js.map +1 -1
- package/dist-es/combo-box-deprecated/ComboBox.css.js +1 -1
- package/dist-es/common-hooks/useCollectionItems.js.map +1 -1
- package/dist-es/content-status/ContentStatus.css.js +1 -1
- package/dist-es/date-input/DateInput.css.js +1 -1
- package/dist-es/date-input/DateInputRange.js +351 -0
- package/dist-es/date-input/DateInputRange.js.map +1 -0
- package/dist-es/date-input/DateInputSingle.js +225 -0
- package/dist-es/date-input/DateInputSingle.js.map +1 -0
- package/dist-es/date-input/utils.js +57 -0
- package/dist-es/date-input/utils.js.map +1 -0
- package/dist-es/date-picker/DatePicker.js +43 -152
- package/dist-es/date-picker/DatePicker.js.map +1 -1
- 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 +98 -0
- package/dist-es/date-picker/DatePickerActions.js.map +1 -0
- package/dist-es/date-picker/DatePickerContext.js +22 -17
- package/dist-es/date-picker/DatePickerContext.js.map +1 -1
- 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 +46 -0
- package/dist-es/date-picker/DatePickerOverlay.js.map +1 -0
- package/dist-es/date-picker/DatePickerOverlayProvider.js +100 -0
- package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -0
- package/dist-es/date-picker/DatePickerPanel.css.js +1 -1
- package/dist-es/date-picker/DatePickerRangeInput.js +114 -0
- package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -0
- package/dist-es/date-picker/DatePickerRangePanel.js +198 -0
- package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -0
- package/dist-es/date-picker/DatePickerSingleInput.js +93 -0
- package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -0
- package/dist-es/date-picker/DatePickerSinglePanel.js +130 -0
- package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -0
- package/dist-es/date-picker/useDatePicker.js +175 -0
- package/dist-es/date-picker/useDatePicker.js.map +1 -0
- package/dist-es/dropdown/Dropdown.css.js +1 -1
- package/dist-es/dropdown/DropdownBase.js +1 -1
- package/dist-es/dropdown/DropdownBase.js.map +1 -1
- package/dist-es/dropdown/useDropdown.js.map +1 -1
- package/dist-es/form-field-legacy/FormLabel.js.map +1 -1
- package/dist-es/index.js +14 -3
- package/dist-es/index.js.map +1 -1
- package/dist-es/list/List.js.map +1 -1
- package/dist-es/menu-button/MenuButtonTrigger.css.js +1 -1
- package/dist-es/query-input/QueryInput.css.js +1 -1
- package/dist-es/slider/Slider.css.js +1 -1
- package/dist-es/slider/Slider.js +55 -107
- package/dist-es/slider/Slider.js.map +1 -1
- package/dist-es/slider/internal/SliderContext.js +16 -0
- package/dist-es/slider/internal/SliderContext.js.map +1 -0
- package/dist-es/slider/internal/SliderMarks.js +27 -0
- package/dist-es/slider/internal/SliderMarks.js.map +1 -0
- package/dist-es/slider/internal/SliderSelection.js +17 -10
- package/dist-es/slider/internal/SliderSelection.js.map +1 -1
- package/dist-es/slider/internal/SliderThumb.js +73 -0
- package/dist-es/slider/internal/SliderThumb.js.map +1 -0
- package/dist-es/slider/internal/SliderTrack.js +87 -0
- package/dist-es/slider/internal/SliderTrack.js.map +1 -0
- package/dist-es/slider/internal/useKeyDownThumb.js +49 -0
- package/dist-es/slider/internal/useKeyDownThumb.js.map +1 -0
- package/dist-es/slider/internal/utils.js +70 -111
- package/dist-es/slider/internal/utils.js.map +1 -1
- package/dist-es/stepped-tracker/TrackerStep/TrackerStep.css.js +1 -1
- package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js +30 -26
- package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
- package/dist-es/tabs/TabActivationIndicator.css.js +1 -1
- package/dist-es/tabs/Tabstrip.css.js +1 -1
- package/dist-es/tabs/useTabs.js.map +1 -1
- package/dist-es/toolbar/overflow-panel/OverflowPanel.css.js +1 -1
- package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-types/calendar/Calendar.d.ts +63 -5
- package/dist-types/calendar/CalendarNavigation.d.ts +57 -0
- package/dist-types/calendar/formatDate.d.ts +14 -0
- package/dist-types/calendar/index.d.ts +3 -1
- package/dist-types/calendar/internal/CalendarDay.d.ts +2 -1
- package/dist-types/calendar/internal/CalendarWeekHeader.d.ts +4 -4
- package/dist-types/calendar/internal/useFocusManagement.d.ts +2 -1
- package/dist-types/calendar/internal/utils.d.ts +7 -8
- package/dist-types/calendar/useCalendar.d.ts +100 -16
- package/dist-types/calendar/useCalendarDay.d.ts +38 -0
- package/dist-types/calendar/useCalendarSelection.d.ts +189 -0
- package/dist-types/date-input/DateInputRange.d.ts +150 -0
- package/dist-types/date-input/DateInputSingle.d.ts +117 -0
- package/dist-types/date-input/index.d.ts +3 -1
- package/dist-types/date-input/utils.d.ts +43 -0
- package/dist-types/date-picker/DatePicker.d.ts +20 -62
- package/dist-types/date-picker/DatePickerActions.d.ts +80 -0
- package/dist-types/date-picker/DatePickerContext.d.ts +180 -17
- package/dist-types/date-picker/DatePickerOverlay.d.ts +11 -0
- package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +67 -0
- package/dist-types/date-picker/DatePickerRangeInput.d.ts +7 -0
- package/dist-types/date-picker/DatePickerRangePanel.d.ts +64 -0
- package/dist-types/date-picker/DatePickerSingleInput.d.ts +7 -0
- package/dist-types/date-picker/DatePickerSinglePanel.d.ts +42 -0
- package/dist-types/date-picker/index.d.ts +7 -0
- package/dist-types/date-picker/useDatePicker.d.ts +112 -0
- package/dist-types/slider/Slider.d.ts +23 -10
- package/dist-types/slider/internal/SliderContext.d.ts +11 -0
- package/dist-types/slider/internal/SliderMarks.d.ts +7 -0
- package/dist-types/slider/internal/SliderSelection.d.ts +3 -3
- package/dist-types/slider/internal/SliderThumb.d.ts +8 -0
- package/dist-types/slider/internal/SliderTrack.d.ts +4 -0
- package/dist-types/slider/internal/index.d.ts +3 -0
- package/dist-types/slider/internal/useKeyDownThumb.d.ts +2 -0
- package/dist-types/slider/internal/utils.d.ts +18 -10
- package/dist-types/slider/types.d.ts +3 -1
- package/dist-types/stepped-tracker/TrackerStep/TrackerStep.d.ts +11 -3
- package/package.json +3 -3
- package/dist-cjs/calendar/internal/CalendarNavigation.css.js +0 -6
- package/dist-cjs/calendar/internal/CalendarNavigation.js.map +0 -1
- package/dist-cjs/calendar/useSelection.js +0 -249
- package/dist-cjs/calendar/useSelection.js.map +0 -1
- package/dist-cjs/date-input/DateInput.js +0 -281
- package/dist-cjs/date-input/DateInput.js.map +0 -1
- package/dist-cjs/date-picker/DatePickerPanel.js +0 -155
- package/dist-cjs/date-picker/DatePickerPanel.js.map +0 -1
- package/dist-cjs/slider/internal/SliderHandle.js +0 -44
- package/dist-cjs/slider/internal/SliderHandle.js.map +0 -1
- package/dist-cjs/slider/internal/SliderMarkLabels.js +0 -45
- package/dist-cjs/slider/internal/SliderMarkLabels.js.map +0 -1
- package/dist-cjs/slider/internal/SliderRail.js +0 -25
- package/dist-cjs/slider/internal/SliderRail.js.map +0 -1
- package/dist-cjs/slider/internal/SliderRailMarks.js +0 -48
- package/dist-cjs/slider/internal/SliderRailMarks.js.map +0 -1
- package/dist-cjs/slider/internal/styles.js +0 -99
- package/dist-cjs/slider/internal/styles.js.map +0 -1
- package/dist-cjs/slider/internal/useSliderKeyDown.js +0 -50
- package/dist-cjs/slider/internal/useSliderKeyDown.js.map +0 -1
- package/dist-cjs/slider/internal/useSliderMouseDown.js +0 -96
- package/dist-cjs/slider/internal/useSliderMouseDown.js.map +0 -1
- package/dist-es/calendar/internal/CalendarNavigation.css.js +0 -4
- package/dist-es/calendar/internal/CalendarNavigation.js +0 -211
- package/dist-es/calendar/internal/CalendarNavigation.js.map +0 -1
- package/dist-es/calendar/useSelection.js +0 -242
- package/dist-es/calendar/useSelection.js.map +0 -1
- package/dist-es/date-input/DateInput.js +0 -277
- package/dist-es/date-input/DateInput.js.map +0 -1
- package/dist-es/date-picker/DatePickerPanel.js +0 -151
- package/dist-es/date-picker/DatePickerPanel.js.map +0 -1
- package/dist-es/slider/internal/SliderHandle.js +0 -40
- package/dist-es/slider/internal/SliderHandle.js.map +0 -1
- package/dist-es/slider/internal/SliderMarkLabels.js +0 -41
- package/dist-es/slider/internal/SliderMarkLabels.js.map +0 -1
- package/dist-es/slider/internal/SliderRail.js +0 -21
- package/dist-es/slider/internal/SliderRail.js.map +0 -1
- package/dist-es/slider/internal/SliderRailMarks.js +0 -44
- package/dist-es/slider/internal/SliderRailMarks.js.map +0 -1
- package/dist-es/slider/internal/styles.js +0 -91
- package/dist-es/slider/internal/styles.js.map +0 -1
- package/dist-es/slider/internal/useSliderKeyDown.js +0 -46
- package/dist-es/slider/internal/useSliderKeyDown.js.map +0 -1
- package/dist-es/slider/internal/useSliderMouseDown.js +0 -92
- package/dist-es/slider/internal/useSliderMouseDown.js.map +0 -1
- package/dist-types/calendar/internal/CalendarNavigation.d.ts +0 -15
- package/dist-types/calendar/useSelection.d.ts +0 -78
- package/dist-types/date-input/DateInput.d.ts +0 -56
- package/dist-types/date-picker/DatePickerPanel.d.ts +0 -10
- package/dist-types/slider/internal/SliderHandle.d.ts +0 -11
- package/dist-types/slider/internal/SliderMarkLabels.d.ts +0 -7
- package/dist-types/slider/internal/SliderRail.d.ts +0 -1
- package/dist-types/slider/internal/SliderRailMarks.d.ts +0 -12
- package/dist-types/slider/internal/styles.d.ts +0 -10
- package/dist-types/slider/internal/useSliderKeyDown.d.ts +0 -4
- package/dist-types/slider/internal/useSliderMouseDown.d.ts +0 -4
- /package/dist-cjs/calendar/{internal/CalendarNavigation.css.js.map → CalendarNavigation.css.js.map} +0 -0
- /package/dist-es/calendar/{internal/CalendarNavigation.css.js.map → CalendarNavigation.css.js.map} +0 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { getLocalTimeZone, startOfMonth, today, isSameMonth, endOfMonth } from '@internationalized/date';
|
|
3
|
+
import { makePrefixer, useControlled, StackLayout, FlexItem, FormFieldHelperText, FlexLayout, FormFieldContext } from '@salt-ds/core';
|
|
4
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
5
|
+
import { useWindow } from '@salt-ds/window';
|
|
6
|
+
import clsx from 'clsx';
|
|
7
|
+
import { forwardRef, useState, useCallback } from 'react';
|
|
8
|
+
import { Calendar } from '../calendar/Calendar.js';
|
|
9
|
+
import { CalendarNavigation } from '../calendar/CalendarNavigation.js';
|
|
10
|
+
import '../calendar/internal/CalendarContext.js';
|
|
11
|
+
import { getCurrentLocale } from '../calendar/formatDate.js';
|
|
12
|
+
import '../calendar/useCalendarSelection.js';
|
|
13
|
+
import { useDatePickerContext } from './DatePickerContext.js';
|
|
14
|
+
import css_248z from './DatePickerPanel.css.js';
|
|
15
|
+
|
|
16
|
+
function getFallbackVisibleMonths(selectedDate, timeZone) {
|
|
17
|
+
const createConsecutiveRange = (date) => [
|
|
18
|
+
startOfMonth(date),
|
|
19
|
+
startOfMonth(date).add({ months: 1 })
|
|
20
|
+
];
|
|
21
|
+
if (selectedDate == null ? void 0 : selectedDate.startDate) {
|
|
22
|
+
const { startDate, endDate } = selectedDate;
|
|
23
|
+
if (endDate) {
|
|
24
|
+
return isSameMonth(startDate, endDate) ? createConsecutiveRange(startDate) : [startOfMonth(startDate), startOfMonth(endDate)];
|
|
25
|
+
}
|
|
26
|
+
return createConsecutiveRange(startDate);
|
|
27
|
+
}
|
|
28
|
+
const currentMonth = startOfMonth(today(timeZone));
|
|
29
|
+
return [currentMonth, currentMonth.add({ months: 1 })];
|
|
30
|
+
}
|
|
31
|
+
const withBaseName = makePrefixer("saltDatePickerPanel");
|
|
32
|
+
const DatePickerRangePanel = forwardRef(function DatePickerRangePanel2(props, ref) {
|
|
33
|
+
const {
|
|
34
|
+
className,
|
|
35
|
+
defaultStartVisibleMonth: defaultStartVisibleMonthProp,
|
|
36
|
+
startVisibleMonth: startVisibleMonthProp,
|
|
37
|
+
onStartVisibleMonthChange,
|
|
38
|
+
defaultEndVisibleMonth: defaultEndVisibleMonthProp,
|
|
39
|
+
endVisibleMonth: endVisibleMonthProp,
|
|
40
|
+
onEndVisibleMonthChange,
|
|
41
|
+
helperText,
|
|
42
|
+
onSelect,
|
|
43
|
+
StartCalendarProps: StartCalendarPropsProp,
|
|
44
|
+
StartCalendarNavigationProps,
|
|
45
|
+
EndCalendarProps: EndCalendarPropsProp,
|
|
46
|
+
EndCalendarNavigationProps
|
|
47
|
+
} = props;
|
|
48
|
+
const targetWindow = useWindow();
|
|
49
|
+
useComponentCssInjection({
|
|
50
|
+
testId: "salt-date-picker-range-panel",
|
|
51
|
+
css: css_248z,
|
|
52
|
+
window: targetWindow
|
|
53
|
+
});
|
|
54
|
+
const {
|
|
55
|
+
state: {
|
|
56
|
+
selectedDate,
|
|
57
|
+
timeZone = getLocalTimeZone(),
|
|
58
|
+
minDate = startOfMonth(today(timeZone)),
|
|
59
|
+
maxDate = minDate.add({ months: 1 }),
|
|
60
|
+
locale = getCurrentLocale()
|
|
61
|
+
},
|
|
62
|
+
helpers: { setSelectedDate }
|
|
63
|
+
} = useDatePickerContext({ selectionVariant: "range" });
|
|
64
|
+
const [hoveredDate, setHoveredDate] = useState(null);
|
|
65
|
+
const [[fallbackStartVisibleMonth, fallbackEndVisibleMonth]] = useState(
|
|
66
|
+
() => getFallbackVisibleMonths(selectedDate, timeZone)
|
|
67
|
+
);
|
|
68
|
+
const [startVisibleMonth, setStartVisibleMonth] = useControlled({
|
|
69
|
+
controlled: startVisibleMonthProp,
|
|
70
|
+
default: defaultStartVisibleMonthProp || fallbackStartVisibleMonth,
|
|
71
|
+
name: "DatePickerRangePanel",
|
|
72
|
+
state: "startVisibleMonth"
|
|
73
|
+
});
|
|
74
|
+
const [endVisibleMonth, setEndVisibleMonth] = useControlled({
|
|
75
|
+
controlled: endVisibleMonthProp,
|
|
76
|
+
default: defaultEndVisibleMonthProp || fallbackEndVisibleMonth,
|
|
77
|
+
name: "DatePickerRangePanel",
|
|
78
|
+
state: "endVisibleMonth"
|
|
79
|
+
});
|
|
80
|
+
const handleSelectedDateChange = useCallback(
|
|
81
|
+
(event, newDate) => {
|
|
82
|
+
setSelectedDate(newDate, { startDate: false, endDate: false });
|
|
83
|
+
onSelect == null ? void 0 : onSelect(event, newDate);
|
|
84
|
+
},
|
|
85
|
+
[onSelect, setSelectedDate]
|
|
86
|
+
);
|
|
87
|
+
const handleHoveredStartDateChange = useCallback(
|
|
88
|
+
(event, newHoveredDate) => {
|
|
89
|
+
var _a;
|
|
90
|
+
setHoveredDate(newHoveredDate);
|
|
91
|
+
if (newHoveredDate && (StartCalendarPropsProp == null ? void 0 : StartCalendarPropsProp.onHoveredDateChange)) {
|
|
92
|
+
(_a = StartCalendarPropsProp.onHoveredDateChange) == null ? void 0 : _a.call(StartCalendarPropsProp, event, newHoveredDate);
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
[StartCalendarPropsProp == null ? void 0 : StartCalendarPropsProp.onHoveredDateChange]
|
|
96
|
+
);
|
|
97
|
+
const handleHoveredEndDateChange = useCallback(
|
|
98
|
+
(event, newHoveredDate) => {
|
|
99
|
+
setHoveredDate(newHoveredDate);
|
|
100
|
+
if (newHoveredDate && (EndCalendarPropsProp == null ? void 0 : EndCalendarPropsProp.onHoveredDateChange)) {
|
|
101
|
+
EndCalendarPropsProp.onHoveredDateChange(event, newHoveredDate);
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
[EndCalendarPropsProp == null ? void 0 : EndCalendarPropsProp.onHoveredDateChange]
|
|
105
|
+
);
|
|
106
|
+
const handleStartVisibleMonthChange = useCallback(
|
|
107
|
+
(event, newVisibleMonth) => {
|
|
108
|
+
setStartVisibleMonth(newVisibleMonth);
|
|
109
|
+
if (newVisibleMonth.compare(endVisibleMonth) >= 0) {
|
|
110
|
+
setEndVisibleMonth(newVisibleMonth.add({ months: 1 }));
|
|
111
|
+
}
|
|
112
|
+
onStartVisibleMonthChange == null ? void 0 : onStartVisibleMonthChange(event, newVisibleMonth);
|
|
113
|
+
},
|
|
114
|
+
[endVisibleMonth, onStartVisibleMonthChange]
|
|
115
|
+
);
|
|
116
|
+
const handleEndVisibleMonthChange = useCallback(
|
|
117
|
+
(event, newVisibleMonth) => {
|
|
118
|
+
setEndVisibleMonth(newVisibleMonth);
|
|
119
|
+
if (newVisibleMonth.compare(startVisibleMonth) <= 0) {
|
|
120
|
+
setStartVisibleMonth(
|
|
121
|
+
startOfMonth(newVisibleMonth.subtract({ months: 1 }))
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
onEndVisibleMonthChange == null ? void 0 : onEndVisibleMonthChange(event, newVisibleMonth);
|
|
125
|
+
},
|
|
126
|
+
[startVisibleMonth, onEndVisibleMonthChange]
|
|
127
|
+
);
|
|
128
|
+
function getHoveredDate(date, hoveredDate2) {
|
|
129
|
+
return date && hoveredDate2 && (hoveredDate2 == null ? void 0 : hoveredDate2.compare(endOfMonth(date))) > 0 ? endOfMonth(date) : hoveredDate2;
|
|
130
|
+
}
|
|
131
|
+
const StartCalendarProps = {
|
|
132
|
+
visibleMonth: startVisibleMonth,
|
|
133
|
+
hoveredDate: getHoveredDate(selectedDate == null ? void 0 : selectedDate.startDate, hoveredDate),
|
|
134
|
+
selectedDate,
|
|
135
|
+
onHoveredDateChange: handleHoveredStartDateChange,
|
|
136
|
+
onVisibleMonthChange: handleStartVisibleMonthChange,
|
|
137
|
+
onSelectedDateChange: handleSelectedDateChange,
|
|
138
|
+
hideOutOfRangeDates: true,
|
|
139
|
+
minDate,
|
|
140
|
+
maxDate,
|
|
141
|
+
locale,
|
|
142
|
+
timeZone,
|
|
143
|
+
...StartCalendarPropsProp
|
|
144
|
+
};
|
|
145
|
+
const EndCalendarProps = {
|
|
146
|
+
visibleMonth: endVisibleMonth,
|
|
147
|
+
hoveredDate,
|
|
148
|
+
selectedDate,
|
|
149
|
+
onHoveredDateChange: handleHoveredEndDateChange,
|
|
150
|
+
onVisibleMonthChange: handleEndVisibleMonthChange,
|
|
151
|
+
onSelectedDateChange: handleSelectedDateChange,
|
|
152
|
+
hideOutOfRangeDates: true,
|
|
153
|
+
minDate,
|
|
154
|
+
maxDate,
|
|
155
|
+
locale,
|
|
156
|
+
timeZone,
|
|
157
|
+
...EndCalendarPropsProp
|
|
158
|
+
};
|
|
159
|
+
return /* @__PURE__ */ jsxs(StackLayout, {
|
|
160
|
+
separators: true,
|
|
161
|
+
gap: 0,
|
|
162
|
+
className: clsx(className, withBaseName("container")),
|
|
163
|
+
ref,
|
|
164
|
+
children: [
|
|
165
|
+
helperText && /* @__PURE__ */ jsx(FlexItem, {
|
|
166
|
+
className: withBaseName("header"),
|
|
167
|
+
children: /* @__PURE__ */ jsx(FormFieldHelperText, {
|
|
168
|
+
children: helperText
|
|
169
|
+
})
|
|
170
|
+
}),
|
|
171
|
+
/* @__PURE__ */ jsx(FlexLayout, {
|
|
172
|
+
gap: 0,
|
|
173
|
+
children: /* @__PURE__ */ jsxs(FormFieldContext.Provider, {
|
|
174
|
+
value: {},
|
|
175
|
+
children: [
|
|
176
|
+
/* @__PURE__ */ jsx(Calendar, {
|
|
177
|
+
selectionVariant: "range",
|
|
178
|
+
...StartCalendarProps,
|
|
179
|
+
children: /* @__PURE__ */ jsx(CalendarNavigation, {
|
|
180
|
+
...StartCalendarNavigationProps
|
|
181
|
+
})
|
|
182
|
+
}),
|
|
183
|
+
/* @__PURE__ */ jsx(Calendar, {
|
|
184
|
+
selectionVariant: "range",
|
|
185
|
+
...EndCalendarProps,
|
|
186
|
+
children: /* @__PURE__ */ jsx(CalendarNavigation, {
|
|
187
|
+
...EndCalendarNavigationProps
|
|
188
|
+
})
|
|
189
|
+
})
|
|
190
|
+
]
|
|
191
|
+
})
|
|
192
|
+
})
|
|
193
|
+
]
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
export { DatePickerRangePanel };
|
|
198
|
+
//# sourceMappingURL=DatePickerRangePanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePickerRangePanel.js","sources":["../src/date-picker/DatePickerRangePanel.tsx"],"sourcesContent":["import {\n type DateValue,\n endOfMonth,\n getLocalTimeZone,\n isSameMonth,\n startOfMonth,\n today,\n} from \"@internationalized/date\";\nimport {\n FlexItem,\n FlexLayout,\n FormFieldContext,\n type FormFieldContextValue,\n FormFieldHelperText,\n StackLayout,\n makePrefixer,\n useControlled,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport clsx from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useState,\n} from \"react\";\nimport {\n Calendar,\n CalendarNavigation,\n type CalendarNavigationProps,\n type CalendarOffsetProps,\n type CalendarProps,\n type CalendarRangeProps,\n type DateRangeSelection,\n type UseCalendarSelectionRangeProps,\n getCurrentLocale,\n} from \"../calendar\";\nimport { useDatePickerContext } from \"./DatePickerContext\";\nimport datePickerPanelCss from \"./DatePickerPanel.css\";\n\n/**\n * Props for the DatePickerRangePanel component.\n * @template T - The type of the selected date range.\n */\nexport interface DatePickerRangePanelProps<T>\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 onSelect?: (event: SyntheticEvent, selectedDate?: T | null) => 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?: DateValue;\n\n /**\n * The default visible month for the start date.\n */\n defaultStartVisibleMonth?: DateValue;\n\n /**\n * Callback fired when the visible month for the start date changes.\n * @param event - The synthetic event.\n * @param visibleMonth - The new visible month for the start date.\n */\n onStartVisibleMonthChange?: (\n event: SyntheticEvent,\n visibleMonth: DateValue,\n ) => void;\n\n /**\n * The currently visible month for the end date.\n */\n endVisibleMonth?: DateValue;\n\n /**\n * The default visible month for the end date.\n */\n defaultEndVisibleMonth?: DateValue;\n\n /**\n * Callback fired when the visible month for the end date changes.\n * @param event - The synthetic event.\n * @param visibleMonth - The new visible month for the end date.\n */\n onEndVisibleMonthChange?: (\n event: SyntheticEvent,\n visibleMonth: DateValue,\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 | \"onSelectedDateChange\"\n | \"onVisibleMonthChange\"\n >\n >;\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 | \"onSelectedDateChange\"\n | \"onVisibleMonthChange\"\n >\n >;\n\n /**\n * Props to be passed to the end date CalendarNavigation component.\n */\n EndCalendarNavigationProps?: CalendarNavigationProps;\n}\n\nfunction getFallbackVisibleMonths(\n selectedDate: DateRangeSelection | null,\n timeZone: string,\n) {\n const createConsecutiveRange = (date: DateValue) => [\n startOfMonth(date),\n startOfMonth(date).add({ months: 1 }),\n ];\n\n if (selectedDate?.startDate) {\n const { startDate, endDate } = selectedDate;\n if (endDate) {\n return isSameMonth(startDate, endDate)\n ? createConsecutiveRange(startDate)\n : [startOfMonth(startDate), startOfMonth(endDate)];\n }\n return createConsecutiveRange(startDate);\n }\n\n const currentMonth = startOfMonth(today(timeZone));\n return [currentMonth, currentMonth.add({ months: 1 })];\n}\n\nconst withBaseName = makePrefixer(\"saltDatePickerPanel\");\n\nexport const DatePickerRangePanel = forwardRef<\n HTMLDivElement,\n DatePickerRangePanelProps<DateRangeSelection>\n>(function DatePickerRangePanel(props, ref) {\n const {\n className,\n defaultStartVisibleMonth: defaultStartVisibleMonthProp,\n startVisibleMonth: startVisibleMonthProp,\n onStartVisibleMonthChange,\n defaultEndVisibleMonth: defaultEndVisibleMonthProp,\n endVisibleMonth: endVisibleMonthProp,\n onEndVisibleMonthChange,\n helperText,\n onSelect,\n StartCalendarProps: StartCalendarPropsProp,\n StartCalendarNavigationProps,\n EndCalendarProps: EndCalendarPropsProp,\n EndCalendarNavigationProps,\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 {\n state: {\n selectedDate,\n timeZone = getLocalTimeZone(),\n minDate = startOfMonth(today(timeZone)),\n maxDate = minDate.add({ months: 1 }),\n locale = getCurrentLocale(),\n },\n helpers: { setSelectedDate },\n } = useDatePickerContext({ selectionVariant: \"range\" });\n\n const [hoveredDate, setHoveredDate] = useState<DateValue | null>(null);\n\n const [[fallbackStartVisibleMonth, fallbackEndVisibleMonth]] = useState(() =>\n getFallbackVisibleMonths(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 handleSelectedDateChange = useCallback(\n (event: SyntheticEvent, newDate: DateRangeSelection | null) => {\n setSelectedDate(newDate, { startDate: false, endDate: false });\n onSelect?.(event, newDate);\n },\n [onSelect, setSelectedDate],\n );\n\n const handleHoveredStartDateChange: CalendarProps[\"onHoveredDateChange\"] =\n useCallback(\n (event: SyntheticEvent, newHoveredDate: DateValue | null) => {\n setHoveredDate(newHoveredDate);\n if (newHoveredDate && StartCalendarPropsProp?.onHoveredDateChange) {\n StartCalendarPropsProp.onHoveredDateChange?.(event, newHoveredDate);\n }\n },\n [StartCalendarPropsProp?.onHoveredDateChange],\n );\n const handleHoveredEndDateChange = useCallback(\n (event: SyntheticEvent, newHoveredDate: DateValue | null) => {\n setHoveredDate(newHoveredDate);\n if (newHoveredDate && EndCalendarPropsProp?.onHoveredDateChange) {\n EndCalendarPropsProp.onHoveredDateChange(event, newHoveredDate);\n }\n },\n [EndCalendarPropsProp?.onHoveredDateChange],\n );\n\n const handleStartVisibleMonthChange = useCallback(\n (event: SyntheticEvent, newVisibleMonth: DateValue) => {\n setStartVisibleMonth(newVisibleMonth);\n if (newVisibleMonth.compare(endVisibleMonth) >= 0) {\n setEndVisibleMonth(newVisibleMonth.add({ months: 1 }));\n }\n onStartVisibleMonthChange?.(event, newVisibleMonth);\n },\n [endVisibleMonth, onStartVisibleMonthChange],\n );\n\n const handleEndVisibleMonthChange = useCallback(\n (event: SyntheticEvent, newVisibleMonth: DateValue) => {\n setEndVisibleMonth(newVisibleMonth);\n if (newVisibleMonth.compare(startVisibleMonth) <= 0) {\n setStartVisibleMonth(\n startOfMonth(newVisibleMonth.subtract({ months: 1 })),\n );\n }\n onEndVisibleMonthChange?.(event, newVisibleMonth);\n },\n [startVisibleMonth, onEndVisibleMonthChange],\n );\n\n function getHoveredDate(\n date?: DateValue | null,\n hoveredDate?: DateValue | null,\n ) {\n return date && hoveredDate && hoveredDate?.compare(endOfMonth(date)) > 0\n ? endOfMonth(date)\n : hoveredDate;\n }\n\n const StartCalendarProps = {\n visibleMonth: startVisibleMonth,\n hoveredDate: getHoveredDate(selectedDate?.startDate, hoveredDate),\n selectedDate: selectedDate as DateRangeSelection,\n onHoveredDateChange: handleHoveredStartDateChange,\n onVisibleMonthChange: handleStartVisibleMonthChange,\n onSelectedDateChange: handleSelectedDateChange,\n hideOutOfRangeDates: true,\n minDate,\n maxDate,\n locale,\n timeZone,\n ...StartCalendarPropsProp,\n } as Partial<UseCalendarSelectionRangeProps>;\n const EndCalendarProps = {\n visibleMonth: endVisibleMonth,\n hoveredDate,\n selectedDate: selectedDate as DateRangeSelection,\n onHoveredDateChange: handleHoveredEndDateChange,\n onVisibleMonthChange: handleEndVisibleMonthChange,\n onSelectedDateChange: handleSelectedDateChange,\n hideOutOfRangeDates: true,\n minDate,\n maxDate,\n locale,\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={ref}\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 {...StartCalendarNavigationProps} />\n </Calendar>\n <Calendar selectionVariant={\"range\"} {...EndCalendarProps}>\n <CalendarNavigation {...EndCalendarNavigationProps} />\n </Calendar>\n </FormFieldContext.Provider>\n </FlexLayout>\n </StackLayout>\n );\n});\n"],"names":["DatePickerRangePanel","datePickerPanelCss","hoveredDate"],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { makePrefixer, useForkRef, useControlled, Button } from '@salt-ds/core';
|
|
3
|
+
import { CalendarIcon } from '@salt-ds/icons';
|
|
4
|
+
import { clsx } from 'clsx';
|
|
5
|
+
import { forwardRef, useRef, useCallback, useEffect } from 'react';
|
|
6
|
+
import { DateInputSingle } from '../date-input/DateInputSingle.js';
|
|
7
|
+
import '../date-input/DateInputRange.js';
|
|
8
|
+
import '@internationalized/date';
|
|
9
|
+
import { useDatePickerContext } from './DatePickerContext.js';
|
|
10
|
+
import { useDatePickerOverlay } from './DatePickerOverlayProvider.js';
|
|
11
|
+
|
|
12
|
+
const withBaseName = makePrefixer("saltDatePickerSingleInput");
|
|
13
|
+
const DatePickerSingleInput = forwardRef(function DatePickerSingleInput2(props, ref) {
|
|
14
|
+
const {
|
|
15
|
+
className,
|
|
16
|
+
onFocus,
|
|
17
|
+
onBlur,
|
|
18
|
+
value: valueProp,
|
|
19
|
+
defaultValue,
|
|
20
|
+
onDateValueChange,
|
|
21
|
+
...rest
|
|
22
|
+
} = props;
|
|
23
|
+
const {
|
|
24
|
+
state: { selectedDate, disabled, readOnly, cancelled, locale, timeZone },
|
|
25
|
+
helpers: { setSelectedDate }
|
|
26
|
+
} = useDatePickerContext({ selectionVariant: "single" });
|
|
27
|
+
const {
|
|
28
|
+
state: { open, floatingUIResult },
|
|
29
|
+
helpers: { getReferenceProps, setOpen }
|
|
30
|
+
} = useDatePickerOverlay();
|
|
31
|
+
const inputRef = useForkRef(ref, floatingUIResult == null ? void 0 : floatingUIResult.reference);
|
|
32
|
+
const prevState = useRef();
|
|
33
|
+
const [value, setValue] = useControlled({
|
|
34
|
+
controlled: valueProp,
|
|
35
|
+
default: defaultValue,
|
|
36
|
+
name: "DatePickerSingleInput",
|
|
37
|
+
state: "value"
|
|
38
|
+
});
|
|
39
|
+
const handleCalendarButton = useCallback(() => {
|
|
40
|
+
setOpen(!open);
|
|
41
|
+
}, [open, setOpen]);
|
|
42
|
+
const handleDateChange = useCallback(
|
|
43
|
+
(_event, newDate, error) => {
|
|
44
|
+
setSelectedDate(newDate, error);
|
|
45
|
+
},
|
|
46
|
+
[setSelectedDate]
|
|
47
|
+
);
|
|
48
|
+
const handleDateValueChange = (newDateValue, isFormatted) => {
|
|
49
|
+
setValue(newDateValue);
|
|
50
|
+
onDateValueChange == null ? void 0 : onDateValueChange(newDateValue, isFormatted);
|
|
51
|
+
};
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (open) {
|
|
54
|
+
prevState.current = { date: selectedDate, value };
|
|
55
|
+
}
|
|
56
|
+
}, [open]);
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
var _a, _b;
|
|
59
|
+
if (cancelled) {
|
|
60
|
+
setValue((_a = prevState == null ? void 0 : prevState.current) == null ? void 0 : _a.value);
|
|
61
|
+
setSelectedDate(((_b = prevState == null ? void 0 : prevState.current) == null ? void 0 : _b.date) || null, false);
|
|
62
|
+
}
|
|
63
|
+
}, [cancelled, setSelectedDate]);
|
|
64
|
+
return /* @__PURE__ */ jsx(DateInputSingle, {
|
|
65
|
+
value: value || "",
|
|
66
|
+
locale,
|
|
67
|
+
timeZone,
|
|
68
|
+
className: clsx(withBaseName(), className),
|
|
69
|
+
ref: inputRef,
|
|
70
|
+
date: selectedDate || null,
|
|
71
|
+
readOnly,
|
|
72
|
+
onDateChange: handleDateChange,
|
|
73
|
+
onDateValueChange: handleDateValueChange,
|
|
74
|
+
endAdornment: /* @__PURE__ */ jsx(Button, {
|
|
75
|
+
variant: "secondary",
|
|
76
|
+
onClick: handleCalendarButton,
|
|
77
|
+
disabled,
|
|
78
|
+
"aria-label": "Open Calendar",
|
|
79
|
+
children: /* @__PURE__ */ jsx(CalendarIcon, {})
|
|
80
|
+
}),
|
|
81
|
+
...getReferenceProps({
|
|
82
|
+
...rest,
|
|
83
|
+
onKeyDown: (event) => {
|
|
84
|
+
if (event.key === "ArrowDown") {
|
|
85
|
+
setOpen(true);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
})
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
export { DatePickerSingleInput };
|
|
93
|
+
//# sourceMappingURL=DatePickerSingleInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePickerSingleInput.js","sources":["../src/date-picker/DatePickerSingleInput.tsx"],"sourcesContent":["import { Button, makePrefixer, useControlled, useForkRef } from \"@salt-ds/core\";\nimport { CalendarIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport {\n type KeyboardEvent,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport type { SingleDateSelection } from \"../calendar\";\nimport {\n DateInputSingle,\n type DateInputSingleError,\n type DateInputSingleProps,\n} from \"../date-input\";\nimport { useDatePickerContext } from \"./DatePickerContext\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerSingleInput\");\n\n/**\n * Props for the DatePickerSingleInput component.\n */\nexport interface DatePickerSingleInputProps extends DateInputSingleProps {}\n\nexport const DatePickerSingleInput = forwardRef<\n HTMLDivElement,\n DatePickerSingleInputProps\n>(function DatePickerSingleInput(props, ref) {\n const {\n className,\n onFocus,\n onBlur,\n value: valueProp,\n defaultValue,\n onDateValueChange,\n ...rest\n } = props;\n\n const {\n state: { selectedDate, disabled, readOnly, cancelled, locale, timeZone },\n helpers: { setSelectedDate },\n } = useDatePickerContext({ selectionVariant: \"single\" });\n const {\n state: { open, floatingUIResult },\n helpers: { getReferenceProps, setOpen },\n } = useDatePickerOverlay();\n\n const inputRef = useForkRef<HTMLDivElement>(ref, floatingUIResult?.reference);\n const prevState = useRef<\n { date: typeof selectedDate; value: typeof valueProp } | undefined\n >();\n\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DatePickerSingleInput\",\n state: \"value\",\n });\n\n const handleCalendarButton = useCallback(() => {\n setOpen(!open);\n }, [open, setOpen]);\n\n const handleDateChange = useCallback(\n (\n _event: SyntheticEvent,\n newDate: SingleDateSelection | null,\n error: DateInputSingleError,\n ) => {\n setSelectedDate(newDate, error);\n },\n [setSelectedDate],\n );\n\n const handleDateValueChange = (\n newDateValue: string,\n isFormatted: boolean,\n ) => {\n setValue(newDateValue);\n onDateValueChange?.(newDateValue, isFormatted);\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: should run when open changes and not selected date or value\n useEffect(() => {\n if (open) {\n prevState.current = { date: selectedDate, value };\n }\n }, [open]);\n\n useEffect(() => {\n if (cancelled) {\n setValue(prevState?.current?.value);\n setSelectedDate(prevState?.current?.date || null, false);\n }\n }, [cancelled, setSelectedDate]);\n\n return (\n <DateInputSingle\n value={value || \"\"}\n locale={locale}\n timeZone={timeZone}\n className={clsx(withBaseName(), className)}\n ref={inputRef}\n date={selectedDate || null}\n readOnly={readOnly}\n onDateChange={handleDateChange}\n onDateValueChange={handleDateValueChange}\n endAdornment={\n <Button\n variant=\"secondary\"\n onClick={handleCalendarButton}\n disabled={disabled}\n aria-label=\"Open Calendar\"\n >\n <CalendarIcon />\n </Button>\n }\n {...getReferenceProps({\n ...rest,\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") {\n setOpen(true);\n }\n },\n })}\n />\n );\n});\n"],"names":["DatePickerSingleInput"],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { getLocalTimeZone, startOfMonth, today } from '@internationalized/date';
|
|
3
|
+
import { makePrefixer, useControlled, StackLayout, FlexItem, FormFieldHelperText, FlexLayout, FormFieldContext } from '@salt-ds/core';
|
|
4
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
5
|
+
import { useWindow } from '@salt-ds/window';
|
|
6
|
+
import clsx from 'clsx';
|
|
7
|
+
import { forwardRef, useState, useCallback } from 'react';
|
|
8
|
+
import { Calendar } from '../calendar/Calendar.js';
|
|
9
|
+
import { CalendarNavigation } from '../calendar/CalendarNavigation.js';
|
|
10
|
+
import '../calendar/internal/CalendarContext.js';
|
|
11
|
+
import { getCurrentLocale } from '../calendar/formatDate.js';
|
|
12
|
+
import '../calendar/useCalendarSelection.js';
|
|
13
|
+
import css_248z from './DatePickerPanel.css.js';
|
|
14
|
+
import './DatePicker.js';
|
|
15
|
+
import './DatePickerActions.js';
|
|
16
|
+
import { useDatePickerContext } from './DatePickerContext.js';
|
|
17
|
+
import './DatePickerOverlay.js';
|
|
18
|
+
import './DatePickerSingleInput.js';
|
|
19
|
+
import './DatePickerRangeInput.js';
|
|
20
|
+
import './DatePickerRangePanel.js';
|
|
21
|
+
|
|
22
|
+
const withBaseName = makePrefixer("saltDatePickerPanel");
|
|
23
|
+
const DatePickerSinglePanel = forwardRef(function DatePickerSinglePanel2(props, ref) {
|
|
24
|
+
const {
|
|
25
|
+
CalendarProps,
|
|
26
|
+
CalendarNavigationProps,
|
|
27
|
+
className,
|
|
28
|
+
defaultVisibleMonth,
|
|
29
|
+
visibleMonth: visibleMonthProp,
|
|
30
|
+
onVisibleMonthChange,
|
|
31
|
+
helperText,
|
|
32
|
+
onSelect
|
|
33
|
+
} = props;
|
|
34
|
+
const targetWindow = useWindow();
|
|
35
|
+
useComponentCssInjection({
|
|
36
|
+
testId: "salt-date-picker-single-panel",
|
|
37
|
+
css: css_248z,
|
|
38
|
+
window: targetWindow
|
|
39
|
+
});
|
|
40
|
+
const {
|
|
41
|
+
state: {
|
|
42
|
+
selectedDate,
|
|
43
|
+
timeZone = getLocalTimeZone(),
|
|
44
|
+
minDate = startOfMonth(today(timeZone)),
|
|
45
|
+
maxDate = minDate.add({ months: 1 }),
|
|
46
|
+
locale = getCurrentLocale()
|
|
47
|
+
},
|
|
48
|
+
helpers: { setSelectedDate }
|
|
49
|
+
} = useDatePickerContext({ selectionVariant: "single" });
|
|
50
|
+
const [hoveredDate, setHoveredDate] = useState(null);
|
|
51
|
+
const [uncontrolledDefaultVisibleMonth] = useState(
|
|
52
|
+
() => defaultVisibleMonth || startOfMonth(selectedDate || today(timeZone))
|
|
53
|
+
);
|
|
54
|
+
const [visibleMonth, setVisibleMonth] = useControlled({
|
|
55
|
+
controlled: visibleMonthProp,
|
|
56
|
+
default: uncontrolledDefaultVisibleMonth,
|
|
57
|
+
name: "DatePickerSinglePanel",
|
|
58
|
+
state: "visibleMonth"
|
|
59
|
+
});
|
|
60
|
+
const handleSelectedDateChange = useCallback(
|
|
61
|
+
(event, newDate) => {
|
|
62
|
+
setSelectedDate(newDate, false);
|
|
63
|
+
onSelect == null ? void 0 : onSelect(event, newDate);
|
|
64
|
+
},
|
|
65
|
+
[setSelectedDate, onSelect]
|
|
66
|
+
);
|
|
67
|
+
const handleHoveredDateChange = useCallback(
|
|
68
|
+
(event, newHoveredDate) => {
|
|
69
|
+
setHoveredDate(newHoveredDate);
|
|
70
|
+
if (newHoveredDate && (CalendarProps == null ? void 0 : CalendarProps.onHoveredDateChange)) {
|
|
71
|
+
CalendarProps.onHoveredDateChange(event, newHoveredDate);
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
[CalendarProps == null ? void 0 : CalendarProps.onHoveredDateChange]
|
|
75
|
+
);
|
|
76
|
+
const handleVisibleMonthChange = useCallback(
|
|
77
|
+
(event, newVisibleMonth) => {
|
|
78
|
+
setVisibleMonth(newVisibleMonth);
|
|
79
|
+
if (onVisibleMonthChange) {
|
|
80
|
+
onVisibleMonthChange(event, newVisibleMonth);
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
[onVisibleMonthChange]
|
|
84
|
+
);
|
|
85
|
+
const baseCalendarProps = {
|
|
86
|
+
selectionVariant: "single",
|
|
87
|
+
visibleMonth,
|
|
88
|
+
hoveredDate,
|
|
89
|
+
onHoveredDateChange: handleHoveredDateChange,
|
|
90
|
+
onVisibleMonthChange: handleVisibleMonthChange,
|
|
91
|
+
onSelectedDateChange: handleSelectedDateChange,
|
|
92
|
+
hideOutOfRangeDates: true,
|
|
93
|
+
selectedDate,
|
|
94
|
+
minDate,
|
|
95
|
+
maxDate,
|
|
96
|
+
locale,
|
|
97
|
+
timeZone,
|
|
98
|
+
...CalendarProps
|
|
99
|
+
};
|
|
100
|
+
return /* @__PURE__ */ jsxs(StackLayout, {
|
|
101
|
+
separators: true,
|
|
102
|
+
gap: 0,
|
|
103
|
+
className: clsx(className, withBaseName("container")),
|
|
104
|
+
ref,
|
|
105
|
+
children: [
|
|
106
|
+
helperText && /* @__PURE__ */ jsx(FlexItem, {
|
|
107
|
+
className: withBaseName("header"),
|
|
108
|
+
children: /* @__PURE__ */ jsx(FormFieldHelperText, {
|
|
109
|
+
children: helperText
|
|
110
|
+
})
|
|
111
|
+
}),
|
|
112
|
+
/* @__PURE__ */ jsx(FlexLayout, {
|
|
113
|
+
gap: 0,
|
|
114
|
+
children: /* @__PURE__ */ jsx(FormFieldContext.Provider, {
|
|
115
|
+
value: {},
|
|
116
|
+
children: /* @__PURE__ */ jsx(Calendar, {
|
|
117
|
+
selectionVariant: "single",
|
|
118
|
+
...baseCalendarProps,
|
|
119
|
+
children: /* @__PURE__ */ jsx(CalendarNavigation, {
|
|
120
|
+
...CalendarNavigationProps
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
})
|
|
124
|
+
})
|
|
125
|
+
]
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
export { DatePickerSinglePanel };
|
|
130
|
+
//# sourceMappingURL=DatePickerSinglePanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePickerSinglePanel.js","sources":["../src/date-picker/DatePickerSinglePanel.tsx"],"sourcesContent":["import {\n type DateValue,\n getLocalTimeZone,\n startOfMonth,\n today,\n} from \"@internationalized/date\";\nimport {\n FlexItem,\n FlexLayout,\n FormFieldContext,\n type FormFieldContextValue,\n FormFieldHelperText,\n StackLayout,\n makePrefixer,\n useControlled,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport clsx from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useState,\n} from \"react\";\nimport {\n CalendarNavigation,\n type CalendarNavigationProps,\n type CalendarSingleProps,\n getCurrentLocale,\n} from \"../calendar\";\nimport { Calendar, type SingleDateSelection } from \"../calendar\";\nimport datePickerPanelCss from \"./DatePickerPanel.css\";\nimport { useDatePickerContext } from \"./index\";\n\n/**\n * Props for the DatePickerSinglePanel component.\n * @template T - The type of the selected date.\n */\nexport interface DatePickerSinglePanelProps<T>\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Callback fired when a date is selected.\n * @param event - The synthetic event.\n * @param selectedDate - The selected date or null.\n */\n onSelect?: (event: SyntheticEvent, selectedDate?: T | null) => void;\n\n /**\n * Helper text to be displayed below the date picker.\n */\n helperText?: string;\n\n /**\n * The currently visible month.\n */\n visibleMonth?: DateValue;\n\n /**\n * The default visible month.\n */\n defaultVisibleMonth?: DateValue;\n\n /**\n * Callback fired when the visible month changes.\n * @param event - The synthetic event.\n * @param visibleMonth - The new visible month.\n */\n onVisibleMonthChange?: (\n event: SyntheticEvent,\n visibleMonth: DateValue,\n ) => void;\n\n /**\n * Props to be passed to the Calendar component.\n */\n CalendarProps?: Partial<\n Omit<\n CalendarSingleProps,\n | \"selectionVariant\"\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"onSelectedDateChange\"\n | \"onVisibleMonthChange\"\n >\n >;\n\n /**\n * Props to be passed to the CalendarNavigation component.\n */\n CalendarNavigationProps?: CalendarNavigationProps;\n}\n\nconst withBaseName = makePrefixer(\"saltDatePickerPanel\");\n\nexport const DatePickerSinglePanel = forwardRef<\n HTMLDivElement,\n DatePickerSinglePanelProps<SingleDateSelection>\n>(function DatePickerSinglePanel(props, ref) {\n const {\n CalendarProps,\n CalendarNavigationProps,\n className,\n defaultVisibleMonth,\n visibleMonth: visibleMonthProp,\n onVisibleMonthChange,\n helperText,\n onSelect,\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-single-panel\",\n css: datePickerPanelCss,\n window: targetWindow,\n });\n\n const {\n state: {\n selectedDate,\n timeZone = getLocalTimeZone(),\n minDate = startOfMonth(today(timeZone)),\n maxDate = minDate.add({ months: 1 }),\n locale = getCurrentLocale(),\n },\n helpers: { setSelectedDate },\n } = useDatePickerContext({ selectionVariant: \"single\" });\n\n const [hoveredDate, setHoveredDate] = useState<DateValue | null>(null);\n\n const [uncontrolledDefaultVisibleMonth] = useState(\n () => defaultVisibleMonth || startOfMonth(selectedDate || today(timeZone)),\n );\n const [visibleMonth, setVisibleMonth] = useControlled({\n controlled: visibleMonthProp,\n default: uncontrolledDefaultVisibleMonth,\n name: \"DatePickerSinglePanel\",\n state: \"visibleMonth\",\n });\n\n const handleSelectedDateChange = useCallback(\n (event: SyntheticEvent, newDate: SingleDateSelection | null) => {\n setSelectedDate(newDate, false);\n onSelect?.(event, newDate);\n },\n [setSelectedDate, onSelect],\n );\n\n const handleHoveredDateChange = useCallback(\n (event: SyntheticEvent, newHoveredDate: SingleDateSelection | null) => {\n setHoveredDate(newHoveredDate);\n if (newHoveredDate && CalendarProps?.onHoveredDateChange) {\n CalendarProps.onHoveredDateChange(event, newHoveredDate);\n }\n },\n [CalendarProps?.onHoveredDateChange],\n );\n\n const handleVisibleMonthChange = useCallback(\n (event: SyntheticEvent, newVisibleMonth: DateValue) => {\n setVisibleMonth(newVisibleMonth);\n if (onVisibleMonthChange) {\n onVisibleMonthChange(event, newVisibleMonth);\n }\n },\n [onVisibleMonthChange],\n );\n\n const baseCalendarProps: Partial<CalendarSingleProps> = {\n selectionVariant: \"single\",\n visibleMonth,\n hoveredDate,\n onHoveredDateChange: handleHoveredDateChange,\n onVisibleMonthChange: handleVisibleMonthChange,\n onSelectedDateChange: handleSelectedDateChange,\n hideOutOfRangeDates: true,\n selectedDate,\n minDate,\n maxDate,\n locale,\n timeZone,\n ...CalendarProps,\n };\n\n return (\n <StackLayout\n separators\n gap={0}\n className={clsx(className, withBaseName(\"container\"))}\n ref={ref}\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=\"single\" {...baseCalendarProps}>\n <CalendarNavigation {...CalendarNavigationProps} />\n </Calendar>\n </FormFieldContext.Provider>\n </FlexLayout>\n </StackLayout>\n );\n});\n"],"names":["DatePickerSinglePanel","datePickerPanelCss"],"mappings":"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"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { getLocalTimeZone, startOfMonth, CalendarDate, endOfMonth } from '@internationalized/date';
|
|
2
|
+
import { useForkRef, useControlled, useFormFieldProps } from '@salt-ds/core';
|
|
3
|
+
import { useRef, useState, useEffect } from 'react';
|
|
4
|
+
import '../calendar/Calendar.js';
|
|
5
|
+
import '../calendar/CalendarNavigation.js';
|
|
6
|
+
import '../calendar/internal/CalendarContext.js';
|
|
7
|
+
import { getCurrentLocale } from '../calendar/formatDate.js';
|
|
8
|
+
import { CALENDAR_MIN_YEAR, CALENDAR_MAX_YEAR } from '../calendar/useCalendarSelection.js';
|
|
9
|
+
import { useDatePickerOverlay } from './DatePickerOverlayProvider.js';
|
|
10
|
+
|
|
11
|
+
function useDatePicker(props, ref) {
|
|
12
|
+
const {
|
|
13
|
+
readOnly = false,
|
|
14
|
+
disabled,
|
|
15
|
+
selectionVariant,
|
|
16
|
+
defaultSelectedDate = null,
|
|
17
|
+
selectedDate: selectedDateProp,
|
|
18
|
+
onSelectedDateChange,
|
|
19
|
+
onApply,
|
|
20
|
+
minDate: minDateProp,
|
|
21
|
+
maxDate: maxDateProp,
|
|
22
|
+
timeZone = getLocalTimeZone(),
|
|
23
|
+
locale = getCurrentLocale(),
|
|
24
|
+
onCancel,
|
|
25
|
+
...rest
|
|
26
|
+
} = props;
|
|
27
|
+
const minDate = minDateProp != null ? minDateProp : startOfMonth(new CalendarDate(CALENDAR_MIN_YEAR, 1, 1));
|
|
28
|
+
const maxDate = maxDateProp != null ? maxDateProp : endOfMonth(new CalendarDate(CALENDAR_MAX_YEAR, 1, 1));
|
|
29
|
+
const datePickerRef = useRef(null);
|
|
30
|
+
const containerRef = useForkRef(ref, datePickerRef);
|
|
31
|
+
const {
|
|
32
|
+
state: { open },
|
|
33
|
+
helpers: { setOpen }
|
|
34
|
+
} = useDatePickerOverlay();
|
|
35
|
+
const [selectedDate, setSelectedDate] = useControlled({
|
|
36
|
+
controlled: selectedDateProp,
|
|
37
|
+
default: defaultSelectedDate,
|
|
38
|
+
name: "DatePicker",
|
|
39
|
+
state: "selectedDate"
|
|
40
|
+
});
|
|
41
|
+
const [enableApply, setEnableApply] = useState(false);
|
|
42
|
+
const [cancelled, setCancelled] = useState(false);
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
if (open) {
|
|
45
|
+
setCancelled(false);
|
|
46
|
+
}
|
|
47
|
+
}, [open]);
|
|
48
|
+
const { disabled: formFieldDisabled, readOnly: formFieldReadOnly } = useFormFieldProps();
|
|
49
|
+
const isReadOnly = readOnly || formFieldReadOnly || false;
|
|
50
|
+
const isDisabled = disabled || formFieldDisabled || false;
|
|
51
|
+
const applySingle = (appliedDate, error) => {
|
|
52
|
+
setCancelled(false);
|
|
53
|
+
setOpen(false);
|
|
54
|
+
if (selectionVariant === "single") {
|
|
55
|
+
onApply == null ? void 0 : onApply(appliedDate, error);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const setSelectedSingleDate = (selection, error) => {
|
|
59
|
+
let nextDate;
|
|
60
|
+
if (error || !selection) {
|
|
61
|
+
nextDate = selection;
|
|
62
|
+
} else {
|
|
63
|
+
let dateAfterMinDate = true;
|
|
64
|
+
let dateBeforeMaxDate = true;
|
|
65
|
+
if (minDate && selection) {
|
|
66
|
+
dateAfterMinDate = selection.compare(minDate) >= 0;
|
|
67
|
+
}
|
|
68
|
+
if (maxDate && selection) {
|
|
69
|
+
dateBeforeMaxDate = selection.compare(maxDate) <= 0;
|
|
70
|
+
}
|
|
71
|
+
nextDate = dateAfterMinDate && dateBeforeMaxDate ? selection : null;
|
|
72
|
+
}
|
|
73
|
+
setSelectedDate(nextDate);
|
|
74
|
+
if (selectionVariant === "single") {
|
|
75
|
+
onSelectedDateChange == null ? void 0 : onSelectedDateChange(nextDate, error);
|
|
76
|
+
}
|
|
77
|
+
if (!enableApply) {
|
|
78
|
+
setOpen(false);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const applyRange = (appliedDate, error) => {
|
|
82
|
+
setCancelled(false);
|
|
83
|
+
if ((appliedDate == null ? void 0 : appliedDate.startDate) && (appliedDate == null ? void 0 : appliedDate.endDate)) {
|
|
84
|
+
setOpen(false);
|
|
85
|
+
}
|
|
86
|
+
if (selectionVariant === "range") {
|
|
87
|
+
onApply == null ? void 0 : onApply(appliedDate, error);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
const setSelectedRangeDate = (selection, error) => {
|
|
91
|
+
let nextDate;
|
|
92
|
+
let nextError = { ...error };
|
|
93
|
+
let startDateInRange = true;
|
|
94
|
+
let endDateInRange = true;
|
|
95
|
+
if ((error == null ? void 0 : error.startDate) || (error == null ? void 0 : error.endDate) || !selection) {
|
|
96
|
+
nextDate = selection;
|
|
97
|
+
} else {
|
|
98
|
+
if (maxDate && (selection == null ? void 0 : selection.startDate)) {
|
|
99
|
+
startDateInRange = selection.startDate.compare(minDate) >= 0;
|
|
100
|
+
}
|
|
101
|
+
if (maxDate && (selection == null ? void 0 : selection.endDate)) {
|
|
102
|
+
endDateInRange = (selection == null ? void 0 : selection.endDate) && selection.endDate.compare(maxDate) <= 0;
|
|
103
|
+
}
|
|
104
|
+
if (!startDateInRange && !endDateInRange) {
|
|
105
|
+
nextDate = null;
|
|
106
|
+
nextError = {
|
|
107
|
+
startDate: "is before min date",
|
|
108
|
+
endDate: "is after max date"
|
|
109
|
+
};
|
|
110
|
+
} else {
|
|
111
|
+
nextDate = {
|
|
112
|
+
startDate: selection.startDate || null,
|
|
113
|
+
endDate: selection.endDate || null
|
|
114
|
+
};
|
|
115
|
+
nextError = {
|
|
116
|
+
startDate: !startDateInRange ? "is before min date" : nextError.startDate,
|
|
117
|
+
endDate: !endDateInRange ? "is after max date" : nextError.endDate
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
setSelectedDate(nextDate);
|
|
122
|
+
if (selectionVariant === "range") {
|
|
123
|
+
onSelectedDateChange == null ? void 0 : onSelectedDateChange(nextDate, nextError);
|
|
124
|
+
}
|
|
125
|
+
if (!enableApply && (nextDate == null ? void 0 : nextDate.startDate) && (nextDate == null ? void 0 : nextDate.endDate)) {
|
|
126
|
+
setOpen(false);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
const cancel = () => {
|
|
130
|
+
setCancelled(true);
|
|
131
|
+
setOpen(false);
|
|
132
|
+
onCancel == null ? void 0 : onCancel();
|
|
133
|
+
};
|
|
134
|
+
const returnValue = {
|
|
135
|
+
state: {
|
|
136
|
+
selectionVariant,
|
|
137
|
+
selectedDate,
|
|
138
|
+
cancelled,
|
|
139
|
+
enableApply,
|
|
140
|
+
disabled: isDisabled,
|
|
141
|
+
readOnly: isReadOnly,
|
|
142
|
+
containerRef,
|
|
143
|
+
minDate,
|
|
144
|
+
maxDate,
|
|
145
|
+
locale,
|
|
146
|
+
timeZone,
|
|
147
|
+
...rest
|
|
148
|
+
},
|
|
149
|
+
helpers: {
|
|
150
|
+
cancel,
|
|
151
|
+
setEnableApply
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
if (props.selectionVariant === "range") {
|
|
155
|
+
return {
|
|
156
|
+
...returnValue,
|
|
157
|
+
helpers: {
|
|
158
|
+
...returnValue.helpers,
|
|
159
|
+
apply: applyRange,
|
|
160
|
+
setSelectedDate: setSelectedRangeDate
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
...returnValue,
|
|
166
|
+
helpers: {
|
|
167
|
+
...returnValue.helpers,
|
|
168
|
+
apply: applySingle,
|
|
169
|
+
setSelectedDate: setSelectedSingleDate
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export { useDatePicker };
|
|
175
|
+
//# sourceMappingURL=useDatePicker.js.map
|