@mezzanine-ui/react 1.0.0-canary.2 → 1.0.0-canary.4
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/AlertBanner/AlertBanner.d.ts +93 -0
- package/AlertBanner/AlertBanner.js +154 -0
- package/AlertBanner/index.d.ts +2 -0
- package/AlertBanner/index.js +1 -0
- package/{Overlay/Overlay.d.ts → Backdrop/Backdrop.d.ts} +12 -16
- package/Backdrop/Backdrop.js +40 -0
- package/Backdrop/index.d.ts +2 -0
- package/Backdrop/index.js +1 -0
- package/Badge/Badge.d.ts +20 -14
- package/Badge/Badge.js +14 -16
- package/Badge/BadgeContainer.d.ts +1 -1
- package/Badge/BadgeContainer.js +1 -1
- package/Badge/index.d.ts +1 -2
- package/Badge/typings.d.ts +48 -0
- package/Breadcrumb/Breadcrumb.d.ts +6 -0
- package/Breadcrumb/Breadcrumb.js +25 -0
- package/Breadcrumb/BreadcrumbItem.d.ts +4 -0
- package/Breadcrumb/BreadcrumbItem.js +45 -0
- package/Breadcrumb/index.d.ts +2 -0
- package/Breadcrumb/index.js +1 -0
- package/Breadcrumb/typings.d.ts +70 -0
- package/Button/Button.js +2 -2
- package/Calendar/Calendar.d.ts +31 -2
- package/Calendar/Calendar.js +73 -19
- package/Calendar/CalendarCell.d.ts +4 -0
- package/Calendar/CalendarCell.js +3 -3
- package/Calendar/CalendarContext.d.ts +14 -7
- package/Calendar/CalendarContext.js +7 -13
- package/Calendar/CalendarControls.d.ts +16 -0
- package/Calendar/CalendarControls.js +3 -7
- package/Calendar/CalendarDayOfWeek.js +3 -3
- package/Calendar/CalendarDays.d.ts +9 -1
- package/Calendar/CalendarDays.js +62 -37
- package/Calendar/CalendarFooterActions.d.ts +13 -0
- package/Calendar/CalendarFooterActions.js +14 -0
- package/Calendar/CalendarFooterControl.d.ts +16 -0
- package/Calendar/CalendarFooterControl.js +14 -0
- package/Calendar/CalendarHalfYears.d.ts +39 -0
- package/Calendar/CalendarHalfYears.js +62 -0
- package/Calendar/CalendarMonths.js +15 -4
- package/Calendar/CalendarQuarters.d.ts +37 -0
- package/Calendar/CalendarQuarters.js +64 -0
- package/Calendar/CalendarQuickSelect.d.ts +21 -0
- package/Calendar/CalendarQuickSelect.js +15 -0
- package/Calendar/CalendarWeeks.d.ts +1 -1
- package/Calendar/CalendarWeeks.js +88 -43
- package/Calendar/CalendarYears.js +12 -3
- package/Calendar/RangeCalendar.d.ts +59 -0
- package/Calendar/RangeCalendar.js +232 -0
- package/Calendar/index.d.ts +8 -1
- package/Calendar/index.js +4 -0
- package/Calendar/useCalendarControlModifiers.d.ts +4 -4
- package/Calendar/useCalendarControlModifiers.js +39 -8
- package/Calendar/useCalendarControls.d.ts +2 -0
- package/Calendar/useCalendarControls.js +18 -2
- package/Calendar/useRangeCalendarControls.d.ts +18 -0
- package/Calendar/useRangeCalendarControls.js +115 -0
- package/Checkbox/CheckAll.d.ts +16 -6
- package/Checkbox/CheckAll.js +40 -26
- package/Checkbox/Checkbox.d.ts +100 -22
- package/Checkbox/Checkbox.js +72 -16
- package/Checkbox/CheckboxGroup.d.ts +100 -18
- package/Checkbox/CheckboxGroup.js +169 -24
- package/Checkbox/CheckboxGroupContext.d.ts +0 -2
- package/Checkbox/index.d.ts +15 -6
- package/Checkbox/index.js +6 -2
- package/Checkbox/typings.d.ts +37 -0
- package/ClearActions/ClearActions.d.ts +41 -0
- package/ClearActions/ClearActions.js +23 -0
- package/ClearActions/index.d.ts +3 -0
- package/ClearActions/index.js +5 -0
- package/DatePicker/DatePicker.d.ts +12 -1
- package/DatePicker/DatePicker.js +40 -9
- package/DatePicker/DatePickerCalendar.d.ts +2 -5
- package/DatePicker/DatePickerCalendar.js +36 -37
- package/DateRangePicker/DateRangePicker.d.ts +18 -2
- package/DateRangePicker/DateRangePicker.js +142 -100
- package/DateRangePicker/DateRangePickerCalendar.d.ts +13 -9
- package/DateRangePicker/DateRangePickerCalendar.js +6 -94
- package/DateRangePicker/useDateRangeCalendarControls.js +6 -2
- package/DateRangePicker/useDateRangePickerValue.d.ts +38 -15
- package/DateRangePicker/useDateRangePickerValue.js +141 -63
- package/DateTimePicker/DateTimePicker.d.ts +31 -10
- package/DateTimePicker/DateTimePicker.js +178 -94
- package/DateTimePicker/index.d.ts +0 -2
- package/DateTimePicker/index.js +0 -1
- package/Drawer/Drawer.js +2 -2
- package/Dropdown/Dropdown.js +12 -22
- package/Empty/Empty.d.ts +1 -16
- package/Empty/Empty.js +36 -7
- package/Empty/icons/EmptyMainInitialDataIcon.d.ts +4 -0
- package/Empty/icons/EmptyMainInitialDataIcon.js +9 -0
- package/Empty/icons/EmptyMainResultIcon.d.ts +4 -0
- package/Empty/icons/EmptyMainResultIcon.js +9 -0
- package/Empty/icons/EmptyMainSystemIcon.d.ts +4 -0
- package/Empty/icons/EmptyMainSystemIcon.js +9 -0
- package/Empty/index.d.ts +1 -1
- package/Empty/typings.d.ts +52 -0
- package/Form/FormHintText.d.ts +18 -0
- package/Form/FormHintText.js +17 -0
- package/Form/index.d.ts +2 -2
- package/Form/index.js +1 -1
- package/InlineMessage/InlineMessage.d.ts +33 -0
- package/InlineMessage/InlineMessage.js +42 -0
- package/InlineMessage/InlineMessageGroup.d.ts +24 -0
- package/InlineMessage/InlineMessageGroup.js +21 -0
- package/InlineMessage/index.d.ts +4 -0
- package/InlineMessage/index.js +2 -0
- package/Input/ActionButton/ActionButton.d.ts +26 -0
- package/Input/ActionButton/ActionButton.js +14 -0
- package/Input/ActionButton/index.d.ts +2 -0
- package/Input/ActionButton/index.js +1 -0
- package/Input/Input.d.ts +147 -42
- package/Input/Input.js +194 -27
- package/Input/PasswordStrengthIndicator/PasswordStrengthIndicator.d.ts +31 -0
- package/Input/PasswordStrengthIndicator/PasswordStrengthIndicator.js +18 -0
- package/Input/PasswordStrengthIndicator/index.d.ts +2 -0
- package/Input/PasswordStrengthIndicator/index.js +1 -0
- package/Input/SelectButton/SelectButton.d.ts +20 -0
- package/Input/SelectButton/SelectButton.js +21 -0
- package/Input/SelectButton/index.d.ts +2 -0
- package/Input/SelectButton/index.js +1 -0
- package/Input/SpinnerButton/SpinnerButton.d.ts +19 -0
- package/Input/SpinnerButton/SpinnerButton.js +14 -0
- package/Input/SpinnerButton/index.d.ts +2 -0
- package/Input/SpinnerButton/index.js +1 -0
- package/Input/index.d.ts +2 -2
- package/Message/Message.d.ts +6 -4
- package/Message/Message.js +86 -9
- package/Message/MessageTimerController.d.ts +14 -0
- package/Message/MessageTimerController.js +27 -0
- package/Modal/Modal.js +2 -2
- package/Modal/useModalContainer.d.ts +1 -1
- package/Modal/useModalContainer.js +2 -4
- package/Navigation/NavigationSubMenu.js +15 -26
- package/Notifier/NotifierManager.d.ts +15 -2
- package/Notifier/NotifierManager.js +60 -18
- package/Notifier/createNotifier.d.ts +9 -0
- package/Notifier/createNotifier.js +3 -2
- package/Notifier/typings.d.ts +3 -1
- package/OverflowTooltip/OverflowCounterTag.d.ts +12 -0
- package/OverflowTooltip/OverflowCounterTag.js +48 -0
- package/OverflowTooltip/OverflowTooltip.d.ts +34 -0
- package/OverflowTooltip/OverflowTooltip.js +53 -0
- package/OverflowTooltip/index.d.ts +2 -0
- package/OverflowTooltip/index.js +2 -0
- package/PageFooter/PageFooter.d.ts +73 -8
- package/PageFooter/PageFooter.js +34 -3
- package/PageHeader/PageHeader.d.ts +36 -0
- package/PageHeader/PageHeader.js +65 -0
- package/PageHeader/index.d.ts +2 -0
- package/PageHeader/index.js +1 -0
- package/PageToolbar/PageToolbar.d.ts +67 -0
- package/PageToolbar/PageToolbar.js +114 -0
- package/PageToolbar/index.d.ts +2 -0
- package/PageToolbar/index.js +1 -0
- package/Picker/FormattedInput.d.ts +17 -0
- package/Picker/FormattedInput.js +74 -0
- package/Picker/MaskFormat.d.ts +39 -0
- package/Picker/MaskFormat.js +94 -0
- package/Picker/PickerTrigger.d.ts +13 -3
- package/Picker/PickerTrigger.js +17 -2
- package/Picker/PickerTriggerWithSeparator.d.ts +124 -0
- package/Picker/PickerTriggerWithSeparator.js +80 -0
- package/Picker/RangePickerTrigger.d.ts +55 -4
- package/Picker/RangePickerTrigger.js +65 -7
- package/Picker/formatUtils.d.ts +34 -0
- package/Picker/formatUtils.js +124 -0
- package/Picker/index.d.ts +7 -2
- package/Picker/index.js +4 -1
- package/Picker/useDateInputFormatter.d.ts +52 -0
- package/Picker/useDateInputFormatter.js +382 -0
- package/Picker/usePickerValue.d.ts +1 -2
- package/Picker/usePickerValue.js +8 -13
- package/Popover/Popover.js +4 -8
- package/Popper/Popper.d.ts +15 -10
- package/Popper/Popper.js +88 -17
- package/Popper/index.d.ts +1 -1
- package/Portal/Portal.d.ts +13 -5
- package/Portal/Portal.js +25 -10
- package/Portal/index.d.ts +2 -0
- package/Portal/index.js +1 -0
- package/Portal/portalRegistry.d.ts +17 -0
- package/Portal/portalRegistry.js +92 -0
- package/Progress/Progress.d.ts +23 -30
- package/Progress/Progress.js +70 -21
- package/Progress/index.d.ts +2 -2
- package/Provider/ConfigProvider.d.ts +1 -0
- package/Provider/ConfigProvider.js +1 -0
- package/ResultState/ResultState.d.ts +52 -0
- package/ResultState/ResultState.js +24 -0
- package/ResultState/index.d.ts +2 -0
- package/ResultState/index.js +1 -0
- package/Select/AutoComplete.d.ts +1 -1
- package/Select/Select.d.ts +1 -1
- package/Select/SelectTrigger.d.ts +1 -87
- package/Select/SelectTrigger.js +26 -21
- package/Select/SelectTriggerTags.d.ts +1 -1
- package/Select/SelectTriggerTags.js +47 -18
- package/Select/TreeSelect.d.ts +1 -1
- package/Select/typings.d.ts +99 -0
- package/Select/useSelectTriggerTags.d.ts +15 -8
- package/Select/useSelectTriggerTags.js +83 -44
- package/Selection/Selection.d.ts +98 -0
- package/Selection/Selection.js +46 -0
- package/Selection/index.d.ts +12 -0
- package/Selection/index.js +5 -0
- package/Skeleton/Skeleton.d.ts +10 -3
- package/Skeleton/Skeleton.js +12 -4
- package/Slider/Slider.d.ts +44 -7
- package/Slider/Slider.js +17 -13
- package/Spin/Spin.d.ts +39 -0
- package/{Loading/Loading.js → Spin/Spin.js} +8 -8
- package/Spin/index.d.ts +2 -0
- package/Spin/index.js +1 -0
- package/Stepper/Step.d.ts +1 -35
- package/Stepper/Step.js +43 -10
- package/Stepper/Stepper.d.ts +1 -14
- package/Stepper/Stepper.js +49 -15
- package/Stepper/index.d.ts +3 -2
- package/Stepper/index.js +1 -0
- package/Stepper/typings.d.ts +77 -0
- package/Stepper/useStepDistance.d.ts +10 -0
- package/Stepper/useStepDistance.js +81 -0
- package/Stepper/useStepper.d.ts +21 -0
- package/Stepper/useStepper.js +26 -0
- package/Table/Table.js +2 -2
- package/Table/TableBody.js +2 -2
- package/Table/rowSelection/TableRowSelection.js +1 -1
- package/Tag/Tag.d.ts +2 -25
- package/Tag/Tag.js +22 -13
- package/Tag/TagGroup.d.ts +12 -0
- package/Tag/TagGroup.js +41 -0
- package/Tag/index.d.ts +1 -1
- package/Tag/typings.d.ts +78 -0
- package/TextField/TextField.d.ts +78 -19
- package/TextField/TextField.js +57 -20
- package/TextField/index.d.ts +1 -1
- package/Textarea/Textarea.d.ts +19 -51
- package/Textarea/Textarea.js +12 -19
- package/Textarea/index.d.ts +0 -1
- package/TimePanel/TimePanel.d.ts +1 -22
- package/TimePanel/TimePanel.js +30 -26
- package/TimePanel/TimePanelAction.d.ts +2 -8
- package/TimePanel/TimePanelAction.js +2 -2
- package/TimePanel/TimePanelColumn.d.ts +0 -13
- package/TimePanel/TimePanelColumn.js +9 -11
- package/TimePicker/TimePicker.d.ts +10 -1
- package/TimePicker/TimePicker.js +85 -35
- package/TimePicker/TimePickerPanel.d.ts +1 -2
- package/TimePicker/TimePickerPanel.js +2 -2
- package/Toggle/Toggle.d.ts +46 -0
- package/Toggle/Toggle.js +29 -0
- package/Toggle/index.d.ts +3 -0
- package/Toggle/index.js +1 -0
- package/Tooltip/Tooltip.d.ts +13 -2
- package/Tooltip/Tooltip.js +56 -10
- package/Tooltip/useDelayMouseEnterLeave.d.ts +1 -2
- package/Tooltip/useDelayMouseEnterLeave.js +0 -4
- package/Transition/Collapse.d.ts +2 -0
- package/Transition/Collapse.js +3 -2
- package/Transition/Fade.js +4 -4
- package/Transition/Rotate.d.ts +42 -0
- package/Transition/Rotate.js +30 -0
- package/Transition/Scale.d.ts +13 -0
- package/Transition/{Grow.js → Scale.js} +17 -12
- package/Transition/Slide.d.ts +7 -0
- package/Transition/{Zoom.js → Slide.js} +14 -12
- package/Transition/SlideFade.d.ts +3 -0
- package/Transition/SlideFade.js +5 -4
- package/Transition/Transition.d.ts +1 -1
- package/Transition/Translate.d.ts +14 -0
- package/Transition/Translate.js +94 -0
- package/Transition/index.d.ts +8 -4
- package/Transition/index.js +4 -2
- package/Tree/TreeNode.js +6 -6
- package/Upload/Upload.d.ts +175 -0
- package/Upload/Upload.js +279 -0
- package/Upload/UploadItem.d.ts +82 -0
- package/Upload/UploadItem.js +118 -0
- package/Upload/UploadPictureCard.d.ts +110 -0
- package/Upload/UploadPictureCard.js +101 -0
- package/Upload/Uploader.d.ts +161 -0
- package/Upload/Uploader.js +120 -0
- package/Upload/index.d.ts +8 -11
- package/Upload/index.js +4 -5
- package/Upload/upload-utils.d.ts +41 -0
- package/Upload/upload-utils.js +65 -0
- package/_internal/InputTriggerPopper/InputTriggerPopper.js +15 -25
- package/_internal/SlideFadeOverlay/SlideFadeOverlay.d.ts +2 -2
- package/_internal/SlideFadeOverlay/SlideFadeOverlay.js +4 -27
- package/hooks/useScrollLock.d.ts +28 -0
- package/hooks/useScrollLock.js +134 -0
- package/index.d.ts +99 -84
- package/index.js +92 -78
- package/package.json +7 -7
- package/utils/get-css-variable-value.d.ts +1 -0
- package/utils/get-css-variable-value.js +9 -0
- package/DateTimePicker/DateTimePickerPanel.d.ts +0 -28
- package/DateTimePicker/DateTimePickerPanel.js +0 -50
- package/Form/FormMessage.d.ts +0 -7
- package/Form/FormMessage.js +0 -19
- package/Form/useInputWithTagsModeValue.js +0 -88
- package/Loading/Loading.d.ts +0 -33
- package/Loading/index.d.ts +0 -2
- package/Loading/index.js +0 -1
- package/Overlay/Overlay.js +0 -31
- package/Overlay/index.d.ts +0 -2
- package/Overlay/index.js +0 -1
- package/Picker/useRangePickerValue.d.ts +0 -23
- package/Picker/useRangePickerValue.js +0 -99
- package/Switch/Switch.d.ts +0 -43
- package/Switch/Switch.js +0 -29
- package/Switch/index.d.ts +0 -3
- package/Switch/index.js +0 -1
- package/Transition/Grow.d.ts +0 -12
- package/Transition/Zoom.d.ts +0 -7
- package/Upload/UploadButton.d.ts +0 -9
- package/Upload/UploadButton.js +0 -23
- package/Upload/UploadInput.d.ts +0 -20
- package/Upload/UploadInput.js +0 -23
- package/Upload/UploadPicture.d.ts +0 -49
- package/Upload/UploadPicture.js +0 -51
- package/Upload/UploadPictureBlock.d.ts +0 -20
- package/Upload/UploadPictureBlock.js +0 -79
- package/Upload/UploadPictureWall.d.ts +0 -81
- package/Upload/UploadPictureWall.js +0 -168
- package/Upload/UploadPictureWallItem.d.ts +0 -15
- package/Upload/UploadPictureWallItem.js +0 -18
- package/Upload/UploadResult.d.ts +0 -35
- package/Upload/UploadResult.js +0 -30
- package/utils/scroll-lock.d.ts +0 -2
- package/utils/scroll-lock.js +0 -24
|
@@ -1,47 +1,115 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { useState, useMemo } from 'react';
|
|
3
|
-
import { useRangePickerValue } from '../Picker/useRangePickerValue.js';
|
|
2
|
+
import { useState, useCallback, useMemo } from 'react';
|
|
4
3
|
import { useCalendarContext } from '../Calendar/CalendarContext.js';
|
|
5
4
|
|
|
6
|
-
function useDateRangePickerValue({ format,
|
|
7
|
-
|
|
8
|
-
const {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
5
|
+
function useDateRangePickerValue({ format, hasDisabledDateInRange, inputFromRef: _inputFromRef, inputToRef, mode, onChange: onChangeProp, value: valueProp, }) {
|
|
6
|
+
var _a, _b;
|
|
7
|
+
const { addDay, formatToString, isBefore, locale } = useCalendarContext();
|
|
8
|
+
const [internalFrom, setInternalFrom] = useState(valueProp === null || valueProp === void 0 ? void 0 : valueProp[0]);
|
|
9
|
+
const [internalTo, setInternalTo] = useState(valueProp === null || valueProp === void 0 ? void 0 : valueProp[1]);
|
|
10
|
+
// Track if user is currently selecting a new range
|
|
11
|
+
// When selecting, we use internal state; otherwise, we prefer valueProp
|
|
12
|
+
const [isSelecting, setIsSelecting] = useState(false);
|
|
13
|
+
const from = isSelecting ? internalFrom : ((_a = valueProp === null || valueProp === void 0 ? void 0 : valueProp[0]) !== null && _a !== void 0 ? _a : internalFrom);
|
|
14
|
+
const to = isSelecting ? internalTo : ((_b = valueProp === null || valueProp === void 0 ? void 0 : valueProp[1]) !== null && _b !== void 0 ? _b : internalTo);
|
|
15
|
+
const value = [from, to];
|
|
16
|
+
const formatDate = useCallback((date) => {
|
|
17
|
+
if (!date)
|
|
18
|
+
return '';
|
|
19
|
+
return formatToString(locale, date, format);
|
|
20
|
+
}, [formatToString, locale, format]);
|
|
21
|
+
const sortValues = useCallback((v1, v2) => {
|
|
22
|
+
return isBefore(v1, v2) ? [v1, v2] : [v2, v1];
|
|
23
|
+
}, [isBefore]);
|
|
24
|
+
const inputFromValue = formatDate(from);
|
|
25
|
+
const inputToValue = formatDate(to);
|
|
16
26
|
const [hoverValue, setHoverValue] = useState(undefined);
|
|
17
|
-
const
|
|
18
|
-
|
|
27
|
+
const onInputFromChange = useCallback((formattedValue) => {
|
|
28
|
+
if (formattedValue) {
|
|
29
|
+
setIsSelecting(true);
|
|
30
|
+
if (to && isBefore(to, formattedValue)) {
|
|
31
|
+
setInternalFrom(to);
|
|
32
|
+
setInternalTo(formattedValue);
|
|
33
|
+
// Range is complete, trigger onChange (only in immediate mode)
|
|
34
|
+
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp([to, formattedValue]);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
setInternalFrom(formattedValue);
|
|
38
|
+
// If to is also set, range is complete (only trigger in immediate mode)
|
|
39
|
+
if (to) {
|
|
40
|
+
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp([formattedValue, to]);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
setInternalFrom(undefined);
|
|
46
|
+
}
|
|
19
47
|
setHoverValue(undefined);
|
|
20
|
-
};
|
|
21
|
-
const
|
|
22
|
-
|
|
48
|
+
}, [to, isBefore, onChangeProp]);
|
|
49
|
+
const onInputToChange = useCallback((formattedValue) => {
|
|
50
|
+
if (formattedValue) {
|
|
51
|
+
setIsSelecting(true);
|
|
52
|
+
if (from && isBefore(formattedValue, from)) {
|
|
53
|
+
setInternalTo(from);
|
|
54
|
+
setInternalFrom(formattedValue);
|
|
55
|
+
// Range is complete, trigger onChange (only in immediate mode)
|
|
56
|
+
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp([formattedValue, from]);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
setInternalTo(formattedValue);
|
|
60
|
+
// If from is also set, range is complete (only trigger in immediate mode)
|
|
61
|
+
if (from) {
|
|
62
|
+
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp([from, formattedValue]);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
setInternalTo(undefined);
|
|
68
|
+
}
|
|
23
69
|
setHoverValue(undefined);
|
|
24
|
-
};
|
|
25
|
-
const onCalendarChange = (
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
/** week mode should use the last day of the week (default is the first day) */
|
|
37
|
-
return mode === 'week' ? addDay(nextTo, 6) : nextTo;
|
|
38
|
-
},
|
|
39
|
-
});
|
|
40
|
-
if (sortedFrom && sortedTo) {
|
|
41
|
-
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp([sortedFrom, sortedTo]);
|
|
70
|
+
}, [from, isBefore, onChangeProp]);
|
|
71
|
+
const onCalendarChange = useCallback((rangeValue) => {
|
|
72
|
+
var _a;
|
|
73
|
+
const [newFrom, newTo] = rangeValue;
|
|
74
|
+
setInternalFrom(newFrom);
|
|
75
|
+
if (newTo) {
|
|
76
|
+
const adjustedTo = mode === 'week' ? addDay(newTo, 6) : newTo;
|
|
77
|
+
setInternalTo(adjustedTo);
|
|
78
|
+
if (newFrom && adjustedTo) {
|
|
79
|
+
const [sortedFrom, sortedTo] = sortValues(newFrom, adjustedTo);
|
|
80
|
+
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp([sortedFrom, sortedTo]);
|
|
81
|
+
}
|
|
42
82
|
}
|
|
43
|
-
|
|
44
|
-
|
|
83
|
+
else {
|
|
84
|
+
setInternalTo(undefined);
|
|
85
|
+
setIsSelecting(true);
|
|
86
|
+
// 開始新的選取,則先清除值
|
|
87
|
+
if (from && to) {
|
|
88
|
+
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(undefined);
|
|
89
|
+
}
|
|
90
|
+
(_a = inputToRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
91
|
+
}
|
|
92
|
+
setHoverValue(undefined);
|
|
93
|
+
}, [mode, addDay, sortValues, onChangeProp, inputToRef, from, to]);
|
|
94
|
+
const onChange = useCallback((target) => {
|
|
95
|
+
// Reset selecting state when value is explicitly changed (e.g., cancel/close)
|
|
96
|
+
setIsSelecting(false);
|
|
97
|
+
if (!target) {
|
|
98
|
+
setInternalFrom(undefined);
|
|
99
|
+
setInternalTo(undefined);
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
const [newFrom, newTo] = target;
|
|
103
|
+
if (newFrom && newTo) {
|
|
104
|
+
const sorted = sortValues(newFrom, newTo);
|
|
105
|
+
setInternalFrom(sorted[0]);
|
|
106
|
+
setInternalTo(sorted[1]);
|
|
107
|
+
return sorted;
|
|
108
|
+
}
|
|
109
|
+
setInternalFrom(newFrom);
|
|
110
|
+
setInternalTo(newTo);
|
|
111
|
+
return target;
|
|
112
|
+
}, [sortValues]);
|
|
45
113
|
const anchor1 = from || to;
|
|
46
114
|
const anchor2 = from && to ? to : hoverValue;
|
|
47
115
|
const calendarValue = useMemo(() => {
|
|
@@ -53,44 +121,54 @@ function useDateRangePickerValue({ format, formats, inputFromRef, inputToRef, mo
|
|
|
53
121
|
}
|
|
54
122
|
return undefined;
|
|
55
123
|
}, [anchor1, anchor2]);
|
|
124
|
+
/**
|
|
125
|
+
* Check if date is in range, considering disabled dates
|
|
126
|
+
* Returns a function that can be used as isDateInRange handler
|
|
127
|
+
*/
|
|
128
|
+
const checkIsInRange = useCallback((_date) => {
|
|
129
|
+
if (!anchor1 || !anchor2)
|
|
130
|
+
return false;
|
|
131
|
+
// Check if the range crosses any disabled dates
|
|
132
|
+
if (hasDisabledDateInRange === null || hasDisabledDateInRange === void 0 ? void 0 : hasDisabledDateInRange(anchor1, anchor2)) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
return true;
|
|
136
|
+
}, [anchor1, anchor2, hasDisabledDateInRange]);
|
|
56
137
|
const onCalendarHover = !(from && to) && anchor1 ? setHoverValue : undefined;
|
|
57
|
-
const
|
|
58
|
-
|
|
138
|
+
const onClear = useCallback(() => {
|
|
139
|
+
setInternalFrom(undefined);
|
|
140
|
+
setInternalTo(undefined);
|
|
59
141
|
setHoverValue(undefined);
|
|
142
|
+
setIsSelecting(false);
|
|
60
143
|
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(undefined);
|
|
61
|
-
};
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
};
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp([from, to]);
|
|
75
|
-
}
|
|
76
|
-
if (event.key === 'Escape') {
|
|
77
|
-
onChange(valueProp);
|
|
78
|
-
}
|
|
79
|
-
};
|
|
144
|
+
}, [onChangeProp]);
|
|
145
|
+
const onFromFocus = useCallback(() => {
|
|
146
|
+
// Optional: add focus logic
|
|
147
|
+
}, []);
|
|
148
|
+
const onToFocus = useCallback(() => {
|
|
149
|
+
// Optional: add focus logic
|
|
150
|
+
}, []);
|
|
151
|
+
const onFromBlur = useCallback(() => {
|
|
152
|
+
// Optional: add blur logic
|
|
153
|
+
}, []);
|
|
154
|
+
const onToBlur = useCallback(() => {
|
|
155
|
+
// Optional: add blur logic
|
|
156
|
+
}, []);
|
|
80
157
|
return {
|
|
81
158
|
calendarValue,
|
|
159
|
+
checkIsInRange,
|
|
82
160
|
inputFromValue,
|
|
83
161
|
inputToValue,
|
|
84
162
|
onCalendarChange,
|
|
85
163
|
onCalendarHover,
|
|
86
164
|
onChange,
|
|
87
|
-
onClear
|
|
165
|
+
onClear,
|
|
88
166
|
onFromBlur,
|
|
89
|
-
|
|
90
|
-
onInputFromChange
|
|
91
|
-
onInputToChange
|
|
167
|
+
onFromFocus,
|
|
168
|
+
onInputFromChange,
|
|
169
|
+
onInputToChange,
|
|
92
170
|
onToBlur,
|
|
93
|
-
|
|
171
|
+
onToFocus,
|
|
94
172
|
value,
|
|
95
173
|
};
|
|
96
174
|
}
|
|
@@ -1,27 +1,48 @@
|
|
|
1
1
|
import { DateType } from '@mezzanine-ui/core/calendar';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
2
|
+
import { DatePickerCalendarProps } from '../DatePicker';
|
|
3
|
+
import { PickerTriggerWithSeparatorProps } from '../Picker';
|
|
4
|
+
import { TimePickerPanelProps } from '../TimePicker';
|
|
5
|
+
type FocusedInput = 'left' | 'right' | null;
|
|
6
|
+
export interface DateTimePickerProps extends Omit<DatePickerCalendarProps, 'anchor' | 'onChange' | 'open' | 'referenceDate' | 'value'>, Omit<TimePickerPanelProps, 'anchor' | 'onChange' | 'open' | 'popperProps' | 'value'>, Omit<PickerTriggerWithSeparatorProps, 'formatLeft' | 'formatRight' | 'inputLeftRef' | 'inputRightRef' | 'onBlurLeft' | 'onBlurRight' | 'onChangeLeft' | 'onChangeRight' | 'onFocusLeft' | 'onFocusRight' | 'onLeftComplete' | 'onRightComplete' | 'suffix' | 'valueLeft' | 'valueRight'> {
|
|
5
7
|
/**
|
|
6
|
-
* Default value for time picker.
|
|
8
|
+
* Default value for date-time picker.
|
|
7
9
|
*/
|
|
8
10
|
defaultValue?: DateType;
|
|
9
11
|
/**
|
|
10
|
-
* The format for displaying
|
|
12
|
+
* The format for displaying date (left input).
|
|
11
13
|
*/
|
|
12
|
-
|
|
14
|
+
formatDate?: string;
|
|
13
15
|
/**
|
|
14
|
-
*
|
|
16
|
+
* The format for displaying time (right input).
|
|
15
17
|
*/
|
|
16
|
-
|
|
18
|
+
formatTime?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Change handler. Takes your declared `DateType` as argument.
|
|
21
|
+
* Called when both date and time values are complete.
|
|
22
|
+
*/
|
|
23
|
+
onChange?: (target?: DateType) => void;
|
|
24
|
+
/**
|
|
25
|
+
* A function that fires when panel toggled. Receive open status and focused input as props.
|
|
26
|
+
*/
|
|
27
|
+
onPanelToggle?: (open: boolean, focusedInput: FocusedInput) => void;
|
|
28
|
+
/**
|
|
29
|
+
* Other props you may provide to the time picker panel's `Popper` component
|
|
30
|
+
*/
|
|
31
|
+
popperPropsTime?: TimePickerPanelProps['popperProps'];
|
|
17
32
|
/**
|
|
18
33
|
* The reference date for getting calendars. Default to current time.
|
|
19
34
|
*/
|
|
20
35
|
referenceDate?: DateType;
|
|
36
|
+
/**
|
|
37
|
+
* Current value of date-time picker.
|
|
38
|
+
*/
|
|
39
|
+
value?: DateType;
|
|
21
40
|
}
|
|
22
41
|
/**
|
|
23
|
-
* The react component for `mezzanine` time picker.
|
|
24
|
-
*
|
|
42
|
+
* The react component for `mezzanine` date-time picker.
|
|
43
|
+
* This component features two separate inputs for date and time,
|
|
44
|
+
* with independent calendar and time panels shown based on focus.
|
|
45
|
+
* Notice that any component related to date-time picker should be used along with `CalendarContext`.
|
|
25
46
|
*/
|
|
26
47
|
declare const DateTimePicker: import("react").ForwardRefExoticComponent<DateTimePickerProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
27
48
|
export default DateTimePicker;
|
|
@@ -1,122 +1,206 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
3
|
-
import {
|
|
4
|
-
import { forwardRef,
|
|
3
|
+
import { CalendarTimeIcon } from '@mezzanine-ui/icons';
|
|
4
|
+
import { forwardRef, useState, useRef, useEffect, useMemo, useCallback } from 'react';
|
|
5
5
|
import { useComposeRefs } from '../hooks/useComposeRefs.js';
|
|
6
|
-
import
|
|
7
|
-
import { FormControlContext } from '../Form/FormControlContext.js';
|
|
6
|
+
import TimePickerPanel from '../TimePicker/TimePickerPanel.js';
|
|
8
7
|
import { useCalendarContext } from '../Calendar/CalendarContext.js';
|
|
9
|
-
import { usePickerValue } from '../Picker/usePickerValue.js';
|
|
10
8
|
import { usePickerDocumentEventClose } from '../Picker/usePickerDocumentEventClose.js';
|
|
11
9
|
import Icon from '../Icon/Icon.js';
|
|
12
|
-
import
|
|
10
|
+
import PickerTriggerWithSeparator from '../Picker/PickerTriggerWithSeparator.js';
|
|
11
|
+
import DatePickerCalendar from '../DatePicker/DatePickerCalendar.js';
|
|
13
12
|
|
|
14
13
|
/**
|
|
15
|
-
* The react component for `mezzanine` time picker.
|
|
16
|
-
*
|
|
14
|
+
* The react component for `mezzanine` date-time picker.
|
|
15
|
+
* This component features two separate inputs for date and time,
|
|
16
|
+
* with independent calendar and time panels shown based on focus.
|
|
17
|
+
* Notice that any component related to date-time picker should be used along with `CalendarContext`.
|
|
17
18
|
*/
|
|
18
19
|
const DateTimePicker = forwardRef(function DateTimePicker(props, ref) {
|
|
19
|
-
const {
|
|
20
|
-
const {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
20
|
+
const { defaultDateFormat, defaultTimeFormat, formatToString, getNow, getHour, getMinute, getSecond, isValid, setHour, setMinute, setSecond, startOf, locale, } = useCalendarContext();
|
|
21
|
+
const {
|
|
22
|
+
// Calendar props
|
|
23
|
+
calendarProps, calendarRef, disabledMonthSwitch = false, disableOnDoubleNext, disableOnDoublePrev, disableOnNext, disableOnPrev, disabledYearSwitch = false, displayMonthLocale, isDateDisabled, isHalfYearDisabled, isMonthDisabled, isQuarterDisabled, isWeekDisabled, isYearDisabled, mode = 'day',
|
|
24
|
+
// Time panel props
|
|
25
|
+
hideHour, hideMinute, hideSecond, hourStep, minuteStep, secondStep,
|
|
26
|
+
// DateTimePicker specific props
|
|
27
|
+
className, clearable = true, defaultValue, disabled = false, error = false, fadeProps, formatDate = defaultDateFormat, formatTime = hideSecond ? 'HH:mm' : defaultTimeFormat, fullWidth = false, onClear: onClearProp, onChange: onChangeProp, onPanelToggle: onPanelToggleProp, placeholderLeft = formatDate, placeholderRight = formatTime, popperProps, popperPropsTime, prefix, readOnly, referenceDate: referenceDateProp, required = false, size, value: valueProp, ...restTriggerProps } = props;
|
|
28
|
+
// Internal state
|
|
29
|
+
const [focusedInput, setFocusedInput] = useState(null);
|
|
30
|
+
const [dateValue, setDateValue] = useState(defaultValue !== null && defaultValue !== void 0 ? defaultValue : valueProp);
|
|
31
|
+
const [timeValue, setTimeValue] = useState(defaultValue !== null && defaultValue !== void 0 ? defaultValue : valueProp);
|
|
32
|
+
// Refs
|
|
33
|
+
const inputLeftRef = useRef(null);
|
|
34
|
+
const inputRightRef = useRef(null);
|
|
35
|
+
const anchorRef = useRef(null);
|
|
36
|
+
const calendarPanelRef = useRef(null);
|
|
37
|
+
const timePanelRef = useRef(null);
|
|
38
|
+
const triggerComposedRef = useComposeRefs([anchorRef, ref]);
|
|
39
|
+
// Reference date for calendar
|
|
40
|
+
const [referenceDate, setReferenceDate] = useState(startOf(referenceDateProp || defaultValue || getNow(), 'day'));
|
|
41
|
+
// Sync external value
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (valueProp !== undefined) {
|
|
44
|
+
setDateValue(valueProp);
|
|
45
|
+
setTimeValue(valueProp);
|
|
46
|
+
if (valueProp) {
|
|
47
|
+
setReferenceDate(startOf(valueProp, 'day'));
|
|
33
48
|
}
|
|
34
49
|
}
|
|
35
|
-
}, [
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
50
|
+
}, [valueProp, startOf]);
|
|
51
|
+
// Open state based on focused input
|
|
52
|
+
const openCalendar = focusedInput === 'left' && !readOnly;
|
|
53
|
+
const openTimePanel = focusedInput === 'right' && !readOnly;
|
|
54
|
+
// Format values for display
|
|
55
|
+
const displayDateValue = useMemo(() => {
|
|
56
|
+
if (!dateValue)
|
|
57
|
+
return '';
|
|
58
|
+
return formatToString(locale, dateValue, formatDate) || '';
|
|
59
|
+
}, [dateValue, formatDate, formatToString, locale]);
|
|
60
|
+
const displayTimeValue = useMemo(() => {
|
|
61
|
+
if (!timeValue)
|
|
62
|
+
return '';
|
|
63
|
+
return formatToString(locale, timeValue, formatTime) || '';
|
|
64
|
+
}, [timeValue, formatTime, formatToString, locale]);
|
|
65
|
+
// Panel toggle handler
|
|
66
|
+
const onPanelToggle = useCallback((open, input) => {
|
|
67
|
+
if (onPanelToggleProp) {
|
|
68
|
+
onPanelToggleProp(open, input);
|
|
39
69
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
format,
|
|
47
|
-
formats,
|
|
48
|
-
inputRef,
|
|
49
|
-
value: valueProp,
|
|
50
|
-
});
|
|
51
|
-
/** Panel confirm handler */
|
|
52
|
-
const onConfirm = useCallback(() => {
|
|
53
|
-
if (onChangeProp) {
|
|
54
|
-
onChangeProp(internalValue);
|
|
70
|
+
}, [onPanelToggleProp]);
|
|
71
|
+
// Focus handlers
|
|
72
|
+
const onFocusLeft = useCallback(() => {
|
|
73
|
+
if (!readOnly) {
|
|
74
|
+
setFocusedInput('left');
|
|
75
|
+
onPanelToggle(true, 'left');
|
|
55
76
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if (internalValue) {
|
|
62
|
-
setReferenceDate(internalValue);
|
|
77
|
+
}, [onPanelToggle, readOnly]);
|
|
78
|
+
const onFocusRight = useCallback(() => {
|
|
79
|
+
if (!readOnly) {
|
|
80
|
+
setFocusedInput('right');
|
|
81
|
+
onPanelToggle(true, 'right');
|
|
63
82
|
}
|
|
64
|
-
}, [
|
|
65
|
-
|
|
66
|
-
const
|
|
67
|
-
if (
|
|
68
|
-
|
|
83
|
+
}, [onPanelToggle, readOnly]);
|
|
84
|
+
// Combine date and time into a single value
|
|
85
|
+
const combineDateTime = useCallback((date, time) => {
|
|
86
|
+
if (!date)
|
|
87
|
+
return undefined;
|
|
88
|
+
const timeSource = time || getNow();
|
|
89
|
+
const result = setHour(setMinute(setSecond(date, getSecond(timeSource)), getMinute(timeSource)), getHour(timeSource));
|
|
90
|
+
return result;
|
|
91
|
+
}, [getNow, getHour, getMinute, getSecond, setHour, setMinute, setSecond]);
|
|
92
|
+
// Close handler
|
|
93
|
+
const onClose = useCallback(() => {
|
|
94
|
+
setFocusedInput(null);
|
|
95
|
+
onPanelToggle(false, null);
|
|
96
|
+
}, [onPanelToggle]);
|
|
97
|
+
// Trigger onChange when both date and time are set
|
|
98
|
+
const notifyChange = useCallback((date, time) => {
|
|
99
|
+
if (!onChangeProp)
|
|
100
|
+
return;
|
|
101
|
+
if (date && time) {
|
|
102
|
+
const combined = combineDateTime(date, time);
|
|
103
|
+
onChangeProp(combined);
|
|
69
104
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
105
|
+
}, [combineDateTime, onChangeProp]);
|
|
106
|
+
// Handle left complete - auto focus right
|
|
107
|
+
const onLeftComplete = useCallback(() => {
|
|
108
|
+
if (timeValue) {
|
|
109
|
+
onClose();
|
|
73
110
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
111
|
+
else {
|
|
112
|
+
setTimeout(() => {
|
|
113
|
+
var _a;
|
|
114
|
+
(_a = inputRightRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
115
|
+
}, 0);
|
|
78
116
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
117
|
+
}, [timeValue, onClose]);
|
|
118
|
+
// Handle left complete - auto focus right
|
|
119
|
+
const onRightComplete = useCallback(() => {
|
|
120
|
+
if (dateValue) {
|
|
121
|
+
onClose();
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
setTimeout(() => {
|
|
125
|
+
var _a;
|
|
126
|
+
(_a = inputLeftRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
127
|
+
}, 0);
|
|
128
|
+
}
|
|
129
|
+
}, [dateValue, onClose]);
|
|
130
|
+
// Handle date change from input
|
|
131
|
+
const onChangeLeft = useCallback((isoValue) => {
|
|
132
|
+
if (!isoValue) {
|
|
133
|
+
setDateValue(undefined);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
if (isValid(isoValue)) {
|
|
137
|
+
setDateValue(isoValue);
|
|
138
|
+
setReferenceDate(startOf(isoValue, 'day'));
|
|
139
|
+
notifyChange(isoValue, timeValue);
|
|
140
|
+
}
|
|
141
|
+
}, [isValid, notifyChange, startOf, timeValue]);
|
|
142
|
+
const onChangeRight = useCallback((isoValue) => {
|
|
143
|
+
if (!isoValue) {
|
|
144
|
+
setTimeValue(undefined);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (isValid(isoValue)) {
|
|
148
|
+
setTimeValue(isoValue);
|
|
149
|
+
notifyChange(dateValue, isoValue);
|
|
150
|
+
}
|
|
151
|
+
}, [dateValue, isValid, notifyChange]);
|
|
152
|
+
const onCalendarChange = useCallback((target) => {
|
|
153
|
+
setDateValue(target);
|
|
154
|
+
setReferenceDate(startOf(target, 'day'));
|
|
155
|
+
notifyChange(target, timeValue);
|
|
156
|
+
onLeftComplete();
|
|
157
|
+
}, [notifyChange, startOf, timeValue, onLeftComplete]);
|
|
158
|
+
// Handle time change from panel
|
|
159
|
+
const onTimePanelChange = useCallback((target) => {
|
|
160
|
+
if (!target)
|
|
161
|
+
return;
|
|
162
|
+
setTimeValue(target);
|
|
163
|
+
notifyChange(dateValue, target);
|
|
164
|
+
onRightComplete();
|
|
165
|
+
}, [dateValue, notifyChange, onRightComplete]);
|
|
166
|
+
// Document event close for calendar
|
|
97
167
|
usePickerDocumentEventClose({
|
|
98
|
-
open,
|
|
99
168
|
anchorRef,
|
|
100
|
-
|
|
101
|
-
|
|
169
|
+
lastElementRefInFlow: inputLeftRef,
|
|
170
|
+
onChangeClose: onClose,
|
|
102
171
|
onClose,
|
|
172
|
+
open: openCalendar,
|
|
173
|
+
popperRef: calendarPanelRef,
|
|
174
|
+
});
|
|
175
|
+
// Document event close for time panel
|
|
176
|
+
usePickerDocumentEventClose({
|
|
177
|
+
anchorRef,
|
|
178
|
+
lastElementRefInFlow: inputRightRef,
|
|
103
179
|
onChangeClose: onClose,
|
|
180
|
+
onClose,
|
|
181
|
+
open: openTimePanel,
|
|
182
|
+
popperRef: timePanelRef,
|
|
104
183
|
});
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
184
|
+
const onClear = useCallback((evt) => {
|
|
185
|
+
setDateValue(undefined);
|
|
186
|
+
setTimeValue(undefined);
|
|
108
187
|
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(undefined);
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
if (
|
|
114
|
-
|
|
188
|
+
onClearProp === null || onClearProp === void 0 ? void 0 : onClearProp(evt);
|
|
189
|
+
}, [onChangeProp, onClearProp]);
|
|
190
|
+
const onCalendarIconClick = useCallback(() => {
|
|
191
|
+
var _a;
|
|
192
|
+
if (readOnly || disabled)
|
|
193
|
+
return;
|
|
194
|
+
if (focusedInput) {
|
|
195
|
+
setFocusedInput(null);
|
|
196
|
+
onPanelToggle(false, null);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
(_a = inputLeftRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
115
200
|
}
|
|
116
|
-
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
return (jsxs(Fragment, { children: [jsx(PickerTrigger, { ref: triggerComposedRef, className: className, clearable: clearable, disabled: disabled, error: error, fullWidth: fullWidth, inputProps: resolvedInputProps, inputRef: inputRef, onChange: onInputChange, onClear: onClear, placeholder: placeholder, prefix: prefix, readOnly: readOnly, required: required, size: sizeProp, suffixActionIcon: suffixActionIcon, value: inputValue }), jsx(DateTimePickerPanel, { ref: panelRef, anchor: anchorRef, calendarProps: calendarProps, confirmText: confirmText, disabledMonthSwitch: disabledMonthSwitch, disableOnNext: disableOnNext, disableOnPrev: disableOnPrev, disabledYearSwitch: disabledYearSwitch, displayMonthLocale: displayMonthLocale, fadeProps: fadeProps, hideHour: hideHour, hideMinute: hideMinute, hideSecond: hideSecond, hourPrefix: hourPrefix, hourStep: hourStep, isDateDisabled: isDateDisabled, isMonthDisabled: isMonthDisabled, isWeekDisabled: isWeekDisabled, isYearDisabled: isYearDisabled, minutePrefix: minutePrefix, minuteStep: minuteStep, onChange: onChange, onConfirm: onConfirm, open: open, popperProps: popperProps, referenceDate: referenceDate, secondPrefix: secondPrefix, secondStep: secondStep, value: internalValue })] }));
|
|
201
|
+
}, [disabled, focusedInput, onPanelToggle, readOnly]);
|
|
202
|
+
const suffix = (jsx(Icon, { "aria-label": "Open calendar", icon: CalendarTimeIcon, onClick: onCalendarIconClick }));
|
|
203
|
+
return (jsxs(Fragment, { children: [jsx(PickerTriggerWithSeparator, { ...restTriggerProps, ref: triggerComposedRef, className: className, clearable: clearable, disabled: disabled, error: error, formatLeft: formatDate, formatRight: formatTime, fullWidth: fullWidth, inputLeftRef: inputLeftRef, inputRightRef: inputRightRef, onBlurLeft: () => { }, onBlurRight: () => { }, onChangeLeft: onChangeLeft, onChangeRight: onChangeRight, onClear: onClear, onFocusLeft: onFocusLeft, onFocusRight: onFocusRight, onLeftComplete: onLeftComplete, onRightComplete: onRightComplete, placeholderLeft: placeholderLeft, placeholderRight: placeholderRight, prefix: prefix, readOnly: readOnly, required: required, size: size, suffix: suffix, valueLeft: displayDateValue, valueRight: displayTimeValue }), jsx(DatePickerCalendar, { ref: calendarPanelRef, anchor: anchorRef, calendarProps: calendarProps, calendarRef: calendarRef, disabledMonthSwitch: disabledMonthSwitch, disableOnDoubleNext: disableOnDoubleNext, disableOnDoublePrev: disableOnDoublePrev, disableOnNext: disableOnNext, disableOnPrev: disableOnPrev, disabledYearSwitch: disabledYearSwitch, displayMonthLocale: displayMonthLocale, fadeProps: fadeProps, isDateDisabled: isDateDisabled, isHalfYearDisabled: isHalfYearDisabled, isMonthDisabled: isMonthDisabled, isQuarterDisabled: isQuarterDisabled, isWeekDisabled: isWeekDisabled, isYearDisabled: isYearDisabled, mode: mode, onChange: onCalendarChange, open: openCalendar, popperProps: popperProps, referenceDate: referenceDate, value: dateValue }), jsx(TimePickerPanel, { ref: timePanelRef, anchor: anchorRef, fadeProps: fadeProps, hideHour: hideHour, hideMinute: hideMinute, hideSecond: hideSecond, hourStep: hourStep, minuteStep: minuteStep, onChange: onTimePanelChange, open: openTimePanel, popperProps: popperPropsTime, secondStep: secondStep, value: timeValue })] }));
|
|
120
204
|
});
|
|
121
205
|
|
|
122
206
|
export { DateTimePicker as default };
|
package/DateTimePicker/index.js
CHANGED
package/Drawer/Drawer.js
CHANGED
|
@@ -5,14 +5,14 @@ import SlideFadeOverlay from '../_internal/SlideFadeOverlay/SlideFadeOverlay.js'
|
|
|
5
5
|
import cx from 'clsx';
|
|
6
6
|
|
|
7
7
|
const Drawer = forwardRef((props, ref) => {
|
|
8
|
-
const { className, children, container, disableCloseOnBackdropClick = false, disableCloseOnEscapeKeyDown = false, disablePortal,
|
|
8
|
+
const { className, children, container, disableCloseOnBackdropClick = false, disableCloseOnEscapeKeyDown = false, disablePortal, onBackdropClick, onClose, open, placement = 'left', ...rest } = props;
|
|
9
9
|
const slideFadeDirection = useMemo(() => ({
|
|
10
10
|
top: 'down',
|
|
11
11
|
left: 'right',
|
|
12
12
|
right: 'left',
|
|
13
13
|
bottom: 'up',
|
|
14
14
|
}), []);
|
|
15
|
-
return (jsx(SlideFadeOverlay, { className: drawerClasses.overlay, container: container, direction: slideFadeDirection[placement], disableCloseOnBackdropClick: disableCloseOnBackdropClick, disableCloseOnEscapeKeyDown: disableCloseOnEscapeKeyDown, disablePortal: disablePortal,
|
|
15
|
+
return (jsx(SlideFadeOverlay, { className: drawerClasses.overlay, container: container, direction: slideFadeDirection[placement], disableCloseOnBackdropClick: disableCloseOnBackdropClick, disableCloseOnEscapeKeyDown: disableCloseOnEscapeKeyDown, disablePortal: disablePortal, onBackdropClick: onBackdropClick, onClose: onClose, open: open, ref: ref, children: jsx("div", { ...rest, className: cx(drawerClasses.host, drawerClasses[placement], className), children: children }) }));
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
export { Drawer as default };
|