@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.
Files changed (333) hide show
  1. package/AlertBanner/AlertBanner.d.ts +93 -0
  2. package/AlertBanner/AlertBanner.js +154 -0
  3. package/AlertBanner/index.d.ts +2 -0
  4. package/AlertBanner/index.js +1 -0
  5. package/{Overlay/Overlay.d.ts → Backdrop/Backdrop.d.ts} +12 -16
  6. package/Backdrop/Backdrop.js +40 -0
  7. package/Backdrop/index.d.ts +2 -0
  8. package/Backdrop/index.js +1 -0
  9. package/Badge/Badge.d.ts +20 -14
  10. package/Badge/Badge.js +14 -16
  11. package/Badge/BadgeContainer.d.ts +1 -1
  12. package/Badge/BadgeContainer.js +1 -1
  13. package/Badge/index.d.ts +1 -2
  14. package/Badge/typings.d.ts +48 -0
  15. package/Breadcrumb/Breadcrumb.d.ts +6 -0
  16. package/Breadcrumb/Breadcrumb.js +25 -0
  17. package/Breadcrumb/BreadcrumbItem.d.ts +4 -0
  18. package/Breadcrumb/BreadcrumbItem.js +45 -0
  19. package/Breadcrumb/index.d.ts +2 -0
  20. package/Breadcrumb/index.js +1 -0
  21. package/Breadcrumb/typings.d.ts +70 -0
  22. package/Button/Button.js +2 -2
  23. package/Calendar/Calendar.d.ts +31 -2
  24. package/Calendar/Calendar.js +73 -19
  25. package/Calendar/CalendarCell.d.ts +4 -0
  26. package/Calendar/CalendarCell.js +3 -3
  27. package/Calendar/CalendarContext.d.ts +14 -7
  28. package/Calendar/CalendarContext.js +7 -13
  29. package/Calendar/CalendarControls.d.ts +16 -0
  30. package/Calendar/CalendarControls.js +3 -7
  31. package/Calendar/CalendarDayOfWeek.js +3 -3
  32. package/Calendar/CalendarDays.d.ts +9 -1
  33. package/Calendar/CalendarDays.js +62 -37
  34. package/Calendar/CalendarFooterActions.d.ts +13 -0
  35. package/Calendar/CalendarFooterActions.js +14 -0
  36. package/Calendar/CalendarFooterControl.d.ts +16 -0
  37. package/Calendar/CalendarFooterControl.js +14 -0
  38. package/Calendar/CalendarHalfYears.d.ts +39 -0
  39. package/Calendar/CalendarHalfYears.js +62 -0
  40. package/Calendar/CalendarMonths.js +15 -4
  41. package/Calendar/CalendarQuarters.d.ts +37 -0
  42. package/Calendar/CalendarQuarters.js +64 -0
  43. package/Calendar/CalendarQuickSelect.d.ts +21 -0
  44. package/Calendar/CalendarQuickSelect.js +15 -0
  45. package/Calendar/CalendarWeeks.d.ts +1 -1
  46. package/Calendar/CalendarWeeks.js +88 -43
  47. package/Calendar/CalendarYears.js +12 -3
  48. package/Calendar/RangeCalendar.d.ts +59 -0
  49. package/Calendar/RangeCalendar.js +232 -0
  50. package/Calendar/index.d.ts +8 -1
  51. package/Calendar/index.js +4 -0
  52. package/Calendar/useCalendarControlModifiers.d.ts +4 -4
  53. package/Calendar/useCalendarControlModifiers.js +39 -8
  54. package/Calendar/useCalendarControls.d.ts +2 -0
  55. package/Calendar/useCalendarControls.js +18 -2
  56. package/Calendar/useRangeCalendarControls.d.ts +18 -0
  57. package/Calendar/useRangeCalendarControls.js +115 -0
  58. package/Checkbox/CheckAll.d.ts +16 -6
  59. package/Checkbox/CheckAll.js +40 -26
  60. package/Checkbox/Checkbox.d.ts +100 -22
  61. package/Checkbox/Checkbox.js +72 -16
  62. package/Checkbox/CheckboxGroup.d.ts +100 -18
  63. package/Checkbox/CheckboxGroup.js +169 -24
  64. package/Checkbox/CheckboxGroupContext.d.ts +0 -2
  65. package/Checkbox/index.d.ts +15 -6
  66. package/Checkbox/index.js +6 -2
  67. package/Checkbox/typings.d.ts +37 -0
  68. package/ClearActions/ClearActions.d.ts +41 -0
  69. package/ClearActions/ClearActions.js +23 -0
  70. package/ClearActions/index.d.ts +3 -0
  71. package/ClearActions/index.js +5 -0
  72. package/DatePicker/DatePicker.d.ts +12 -1
  73. package/DatePicker/DatePicker.js +40 -9
  74. package/DatePicker/DatePickerCalendar.d.ts +2 -5
  75. package/DatePicker/DatePickerCalendar.js +36 -37
  76. package/DateRangePicker/DateRangePicker.d.ts +18 -2
  77. package/DateRangePicker/DateRangePicker.js +142 -100
  78. package/DateRangePicker/DateRangePickerCalendar.d.ts +13 -9
  79. package/DateRangePicker/DateRangePickerCalendar.js +6 -94
  80. package/DateRangePicker/useDateRangeCalendarControls.js +6 -2
  81. package/DateRangePicker/useDateRangePickerValue.d.ts +38 -15
  82. package/DateRangePicker/useDateRangePickerValue.js +141 -63
  83. package/DateTimePicker/DateTimePicker.d.ts +31 -10
  84. package/DateTimePicker/DateTimePicker.js +178 -94
  85. package/DateTimePicker/index.d.ts +0 -2
  86. package/DateTimePicker/index.js +0 -1
  87. package/Drawer/Drawer.js +2 -2
  88. package/Dropdown/Dropdown.js +12 -22
  89. package/Empty/Empty.d.ts +1 -16
  90. package/Empty/Empty.js +36 -7
  91. package/Empty/icons/EmptyMainInitialDataIcon.d.ts +4 -0
  92. package/Empty/icons/EmptyMainInitialDataIcon.js +9 -0
  93. package/Empty/icons/EmptyMainResultIcon.d.ts +4 -0
  94. package/Empty/icons/EmptyMainResultIcon.js +9 -0
  95. package/Empty/icons/EmptyMainSystemIcon.d.ts +4 -0
  96. package/Empty/icons/EmptyMainSystemIcon.js +9 -0
  97. package/Empty/index.d.ts +1 -1
  98. package/Empty/typings.d.ts +52 -0
  99. package/Form/FormHintText.d.ts +18 -0
  100. package/Form/FormHintText.js +17 -0
  101. package/Form/index.d.ts +2 -2
  102. package/Form/index.js +1 -1
  103. package/InlineMessage/InlineMessage.d.ts +33 -0
  104. package/InlineMessage/InlineMessage.js +42 -0
  105. package/InlineMessage/InlineMessageGroup.d.ts +24 -0
  106. package/InlineMessage/InlineMessageGroup.js +21 -0
  107. package/InlineMessage/index.d.ts +4 -0
  108. package/InlineMessage/index.js +2 -0
  109. package/Input/ActionButton/ActionButton.d.ts +26 -0
  110. package/Input/ActionButton/ActionButton.js +14 -0
  111. package/Input/ActionButton/index.d.ts +2 -0
  112. package/Input/ActionButton/index.js +1 -0
  113. package/Input/Input.d.ts +147 -42
  114. package/Input/Input.js +194 -27
  115. package/Input/PasswordStrengthIndicator/PasswordStrengthIndicator.d.ts +31 -0
  116. package/Input/PasswordStrengthIndicator/PasswordStrengthIndicator.js +18 -0
  117. package/Input/PasswordStrengthIndicator/index.d.ts +2 -0
  118. package/Input/PasswordStrengthIndicator/index.js +1 -0
  119. package/Input/SelectButton/SelectButton.d.ts +20 -0
  120. package/Input/SelectButton/SelectButton.js +21 -0
  121. package/Input/SelectButton/index.d.ts +2 -0
  122. package/Input/SelectButton/index.js +1 -0
  123. package/Input/SpinnerButton/SpinnerButton.d.ts +19 -0
  124. package/Input/SpinnerButton/SpinnerButton.js +14 -0
  125. package/Input/SpinnerButton/index.d.ts +2 -0
  126. package/Input/SpinnerButton/index.js +1 -0
  127. package/Input/index.d.ts +2 -2
  128. package/Message/Message.d.ts +6 -4
  129. package/Message/Message.js +86 -9
  130. package/Message/MessageTimerController.d.ts +14 -0
  131. package/Message/MessageTimerController.js +27 -0
  132. package/Modal/Modal.js +2 -2
  133. package/Modal/useModalContainer.d.ts +1 -1
  134. package/Modal/useModalContainer.js +2 -4
  135. package/Navigation/NavigationSubMenu.js +15 -26
  136. package/Notifier/NotifierManager.d.ts +15 -2
  137. package/Notifier/NotifierManager.js +60 -18
  138. package/Notifier/createNotifier.d.ts +9 -0
  139. package/Notifier/createNotifier.js +3 -2
  140. package/Notifier/typings.d.ts +3 -1
  141. package/OverflowTooltip/OverflowCounterTag.d.ts +12 -0
  142. package/OverflowTooltip/OverflowCounterTag.js +48 -0
  143. package/OverflowTooltip/OverflowTooltip.d.ts +34 -0
  144. package/OverflowTooltip/OverflowTooltip.js +53 -0
  145. package/OverflowTooltip/index.d.ts +2 -0
  146. package/OverflowTooltip/index.js +2 -0
  147. package/PageFooter/PageFooter.d.ts +73 -8
  148. package/PageFooter/PageFooter.js +34 -3
  149. package/PageHeader/PageHeader.d.ts +36 -0
  150. package/PageHeader/PageHeader.js +65 -0
  151. package/PageHeader/index.d.ts +2 -0
  152. package/PageHeader/index.js +1 -0
  153. package/PageToolbar/PageToolbar.d.ts +67 -0
  154. package/PageToolbar/PageToolbar.js +114 -0
  155. package/PageToolbar/index.d.ts +2 -0
  156. package/PageToolbar/index.js +1 -0
  157. package/Picker/FormattedInput.d.ts +17 -0
  158. package/Picker/FormattedInput.js +74 -0
  159. package/Picker/MaskFormat.d.ts +39 -0
  160. package/Picker/MaskFormat.js +94 -0
  161. package/Picker/PickerTrigger.d.ts +13 -3
  162. package/Picker/PickerTrigger.js +17 -2
  163. package/Picker/PickerTriggerWithSeparator.d.ts +124 -0
  164. package/Picker/PickerTriggerWithSeparator.js +80 -0
  165. package/Picker/RangePickerTrigger.d.ts +55 -4
  166. package/Picker/RangePickerTrigger.js +65 -7
  167. package/Picker/formatUtils.d.ts +34 -0
  168. package/Picker/formatUtils.js +124 -0
  169. package/Picker/index.d.ts +7 -2
  170. package/Picker/index.js +4 -1
  171. package/Picker/useDateInputFormatter.d.ts +52 -0
  172. package/Picker/useDateInputFormatter.js +382 -0
  173. package/Picker/usePickerValue.d.ts +1 -2
  174. package/Picker/usePickerValue.js +8 -13
  175. package/Popover/Popover.js +4 -8
  176. package/Popper/Popper.d.ts +15 -10
  177. package/Popper/Popper.js +88 -17
  178. package/Popper/index.d.ts +1 -1
  179. package/Portal/Portal.d.ts +13 -5
  180. package/Portal/Portal.js +25 -10
  181. package/Portal/index.d.ts +2 -0
  182. package/Portal/index.js +1 -0
  183. package/Portal/portalRegistry.d.ts +17 -0
  184. package/Portal/portalRegistry.js +92 -0
  185. package/Progress/Progress.d.ts +23 -30
  186. package/Progress/Progress.js +70 -21
  187. package/Progress/index.d.ts +2 -2
  188. package/Provider/ConfigProvider.d.ts +1 -0
  189. package/Provider/ConfigProvider.js +1 -0
  190. package/ResultState/ResultState.d.ts +52 -0
  191. package/ResultState/ResultState.js +24 -0
  192. package/ResultState/index.d.ts +2 -0
  193. package/ResultState/index.js +1 -0
  194. package/Select/AutoComplete.d.ts +1 -1
  195. package/Select/Select.d.ts +1 -1
  196. package/Select/SelectTrigger.d.ts +1 -87
  197. package/Select/SelectTrigger.js +26 -21
  198. package/Select/SelectTriggerTags.d.ts +1 -1
  199. package/Select/SelectTriggerTags.js +47 -18
  200. package/Select/TreeSelect.d.ts +1 -1
  201. package/Select/typings.d.ts +99 -0
  202. package/Select/useSelectTriggerTags.d.ts +15 -8
  203. package/Select/useSelectTriggerTags.js +83 -44
  204. package/Selection/Selection.d.ts +98 -0
  205. package/Selection/Selection.js +46 -0
  206. package/Selection/index.d.ts +12 -0
  207. package/Selection/index.js +5 -0
  208. package/Skeleton/Skeleton.d.ts +10 -3
  209. package/Skeleton/Skeleton.js +12 -4
  210. package/Slider/Slider.d.ts +44 -7
  211. package/Slider/Slider.js +17 -13
  212. package/Spin/Spin.d.ts +39 -0
  213. package/{Loading/Loading.js → Spin/Spin.js} +8 -8
  214. package/Spin/index.d.ts +2 -0
  215. package/Spin/index.js +1 -0
  216. package/Stepper/Step.d.ts +1 -35
  217. package/Stepper/Step.js +43 -10
  218. package/Stepper/Stepper.d.ts +1 -14
  219. package/Stepper/Stepper.js +49 -15
  220. package/Stepper/index.d.ts +3 -2
  221. package/Stepper/index.js +1 -0
  222. package/Stepper/typings.d.ts +77 -0
  223. package/Stepper/useStepDistance.d.ts +10 -0
  224. package/Stepper/useStepDistance.js +81 -0
  225. package/Stepper/useStepper.d.ts +21 -0
  226. package/Stepper/useStepper.js +26 -0
  227. package/Table/Table.js +2 -2
  228. package/Table/TableBody.js +2 -2
  229. package/Table/rowSelection/TableRowSelection.js +1 -1
  230. package/Tag/Tag.d.ts +2 -25
  231. package/Tag/Tag.js +22 -13
  232. package/Tag/TagGroup.d.ts +12 -0
  233. package/Tag/TagGroup.js +41 -0
  234. package/Tag/index.d.ts +1 -1
  235. package/Tag/typings.d.ts +78 -0
  236. package/TextField/TextField.d.ts +78 -19
  237. package/TextField/TextField.js +57 -20
  238. package/TextField/index.d.ts +1 -1
  239. package/Textarea/Textarea.d.ts +19 -51
  240. package/Textarea/Textarea.js +12 -19
  241. package/Textarea/index.d.ts +0 -1
  242. package/TimePanel/TimePanel.d.ts +1 -22
  243. package/TimePanel/TimePanel.js +30 -26
  244. package/TimePanel/TimePanelAction.d.ts +2 -8
  245. package/TimePanel/TimePanelAction.js +2 -2
  246. package/TimePanel/TimePanelColumn.d.ts +0 -13
  247. package/TimePanel/TimePanelColumn.js +9 -11
  248. package/TimePicker/TimePicker.d.ts +10 -1
  249. package/TimePicker/TimePicker.js +85 -35
  250. package/TimePicker/TimePickerPanel.d.ts +1 -2
  251. package/TimePicker/TimePickerPanel.js +2 -2
  252. package/Toggle/Toggle.d.ts +46 -0
  253. package/Toggle/Toggle.js +29 -0
  254. package/Toggle/index.d.ts +3 -0
  255. package/Toggle/index.js +1 -0
  256. package/Tooltip/Tooltip.d.ts +13 -2
  257. package/Tooltip/Tooltip.js +56 -10
  258. package/Tooltip/useDelayMouseEnterLeave.d.ts +1 -2
  259. package/Tooltip/useDelayMouseEnterLeave.js +0 -4
  260. package/Transition/Collapse.d.ts +2 -0
  261. package/Transition/Collapse.js +3 -2
  262. package/Transition/Fade.js +4 -4
  263. package/Transition/Rotate.d.ts +42 -0
  264. package/Transition/Rotate.js +30 -0
  265. package/Transition/Scale.d.ts +13 -0
  266. package/Transition/{Grow.js → Scale.js} +17 -12
  267. package/Transition/Slide.d.ts +7 -0
  268. package/Transition/{Zoom.js → Slide.js} +14 -12
  269. package/Transition/SlideFade.d.ts +3 -0
  270. package/Transition/SlideFade.js +5 -4
  271. package/Transition/Transition.d.ts +1 -1
  272. package/Transition/Translate.d.ts +14 -0
  273. package/Transition/Translate.js +94 -0
  274. package/Transition/index.d.ts +8 -4
  275. package/Transition/index.js +4 -2
  276. package/Tree/TreeNode.js +6 -6
  277. package/Upload/Upload.d.ts +175 -0
  278. package/Upload/Upload.js +279 -0
  279. package/Upload/UploadItem.d.ts +82 -0
  280. package/Upload/UploadItem.js +118 -0
  281. package/Upload/UploadPictureCard.d.ts +110 -0
  282. package/Upload/UploadPictureCard.js +101 -0
  283. package/Upload/Uploader.d.ts +161 -0
  284. package/Upload/Uploader.js +120 -0
  285. package/Upload/index.d.ts +8 -11
  286. package/Upload/index.js +4 -5
  287. package/Upload/upload-utils.d.ts +41 -0
  288. package/Upload/upload-utils.js +65 -0
  289. package/_internal/InputTriggerPopper/InputTriggerPopper.js +15 -25
  290. package/_internal/SlideFadeOverlay/SlideFadeOverlay.d.ts +2 -2
  291. package/_internal/SlideFadeOverlay/SlideFadeOverlay.js +4 -27
  292. package/hooks/useScrollLock.d.ts +28 -0
  293. package/hooks/useScrollLock.js +134 -0
  294. package/index.d.ts +99 -84
  295. package/index.js +92 -78
  296. package/package.json +7 -7
  297. package/utils/get-css-variable-value.d.ts +1 -0
  298. package/utils/get-css-variable-value.js +9 -0
  299. package/DateTimePicker/DateTimePickerPanel.d.ts +0 -28
  300. package/DateTimePicker/DateTimePickerPanel.js +0 -50
  301. package/Form/FormMessage.d.ts +0 -7
  302. package/Form/FormMessage.js +0 -19
  303. package/Form/useInputWithTagsModeValue.js +0 -88
  304. package/Loading/Loading.d.ts +0 -33
  305. package/Loading/index.d.ts +0 -2
  306. package/Loading/index.js +0 -1
  307. package/Overlay/Overlay.js +0 -31
  308. package/Overlay/index.d.ts +0 -2
  309. package/Overlay/index.js +0 -1
  310. package/Picker/useRangePickerValue.d.ts +0 -23
  311. package/Picker/useRangePickerValue.js +0 -99
  312. package/Switch/Switch.d.ts +0 -43
  313. package/Switch/Switch.js +0 -29
  314. package/Switch/index.d.ts +0 -3
  315. package/Switch/index.js +0 -1
  316. package/Transition/Grow.d.ts +0 -12
  317. package/Transition/Zoom.d.ts +0 -7
  318. package/Upload/UploadButton.d.ts +0 -9
  319. package/Upload/UploadButton.js +0 -23
  320. package/Upload/UploadInput.d.ts +0 -20
  321. package/Upload/UploadInput.js +0 -23
  322. package/Upload/UploadPicture.d.ts +0 -49
  323. package/Upload/UploadPicture.js +0 -51
  324. package/Upload/UploadPictureBlock.d.ts +0 -20
  325. package/Upload/UploadPictureBlock.js +0 -79
  326. package/Upload/UploadPictureWall.d.ts +0 -81
  327. package/Upload/UploadPictureWall.js +0 -168
  328. package/Upload/UploadPictureWallItem.d.ts +0 -15
  329. package/Upload/UploadPictureWallItem.js +0 -18
  330. package/Upload/UploadResult.d.ts +0 -35
  331. package/Upload/UploadResult.js +0 -30
  332. package/utils/scroll-lock.d.ts +0 -2
  333. 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, formats, inputFromRef, inputToRef, mode, onChange: onChangeProp, value: valueProp, }) {
7
- const { addDay } = useCalendarContext();
8
- const { inputFromValue, inputToValue, onChange, onFromBlur, onFromKeyDown, onInputFromChange, onInputToChange, onToBlur, onToKeyDown, value, } = useRangePickerValue({
9
- format,
10
- formats,
11
- value: valueProp,
12
- inputFromRef,
13
- inputToRef,
14
- });
15
- const [from, to] = value;
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 onSyncHoverValueInputFromChange = (event) => {
18
- onInputFromChange(event);
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 onSyncHoverValueInputToChange = (event) => {
22
- onInputToChange(event);
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 = (val) => {
26
- const firstVal = from || to;
27
- const newValue = (from && to) || (!from && !to)
28
- ? [val, undefined]
29
- : [firstVal, val];
30
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
31
- const [sortedFrom, sortedTo] = onChange(newValue, {
32
- from: (nextFrom) => nextFrom,
33
- to: (nextTo) => {
34
- if (!nextTo)
35
- return nextTo;
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
- /** Hover settings */
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 onSyncHoverValueClear = () => {
58
- onChange(undefined);
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 onFromKeyDownWithOnChange = (event) => {
63
- onFromKeyDown(event);
64
- if (event.key === 'Enter' && from && to) {
65
- onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp([from, to]);
66
- }
67
- if (event.key === 'Escape') {
68
- onChange(valueProp);
69
- }
70
- };
71
- const onToKeyDownWithOnChange = (event) => {
72
- onToKeyDown(event);
73
- if (event.key === 'Enter' && from && to) {
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: onSyncHoverValueClear,
165
+ onClear,
88
166
  onFromBlur,
89
- onFromKeyDown: onFromKeyDownWithOnChange,
90
- onInputFromChange: onSyncHoverValueInputFromChange,
91
- onInputToChange: onSyncHoverValueInputToChange,
167
+ onFromFocus,
168
+ onInputFromChange,
169
+ onInputToChange,
92
170
  onToBlur,
93
- onToKeyDown: onToKeyDownWithOnChange,
171
+ onToFocus,
94
172
  value,
95
173
  };
96
174
  }
@@ -1,27 +1,48 @@
1
1
  import { DateType } from '@mezzanine-ui/core/calendar';
2
- import { PickerTriggerProps } from '../Picker';
3
- import { DateTimePickerPanelProps } from './DateTimePickerPanel';
4
- export interface DateTimePickerProps extends Omit<DateTimePickerPanelProps, 'onConfirm' | 'referenceDate'>, Omit<PickerTriggerProps, 'anchor' | 'defaultValue' | 'inputRef' | 'onChange' | 'onClear' | 'onClick' | 'onIconClick' | 'onKeyDown' | 'open' | 'suffixActionIcon' | 'value'> {
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 time.
12
+ * The format for displaying date (left input).
11
13
  */
12
- format?: string;
14
+ formatDate?: string;
13
15
  /**
14
- * A function that fires when panel toggled. Receive open status in boolean format as props.
16
+ * The format for displaying time (right input).
15
17
  */
16
- onPanelToggle?: (open: boolean) => void;
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
- * Notice that any component related to time-picker should be used along with `CalendarContext`.
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 { ClockIcon } from '@mezzanine-ui/icons';
4
- import { forwardRef, useContext, useMemo, useState, useCallback, useRef, useEffect } from 'react';
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 DateTimePickerPanel from './DateTimePickerPanel.js';
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 PickerTrigger from '../Picker/PickerTrigger.js';
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
- * Notice that any component related to time-picker should be used along with `CalendarContext`.
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 { disabled: disabledFromFormControl, fullWidth: fullWidthFromFormControl, required: requiredFromFormControl, severity, } = useContext(FormControlContext) || {};
20
- const { defaultDateFormat, defaultTimeFormat, getNow, startOf } = useCalendarContext();
21
- const defaultFormat = `${defaultDateFormat} ${defaultTimeFormat}`;
22
- const { calendarProps, className, clearable = true, confirmText, defaultValue, disabledMonthSwitch = false, disableOnNext, disableOnPrev, disabledYearSwitch = false, disabled = disabledFromFormControl, displayMonthLocale, error = severity === 'error' || false, fadeProps, format = defaultFormat, fullWidth = fullWidthFromFormControl, hideHour, hideMinute, hideSecond, hourPrefix, hourStep, inputProps, isDateDisabled, isMonthDisabled, isWeekDisabled, isYearDisabled, minutePrefix, minuteStep, onChange: onChangeProp, onPanelToggle: onPanelToggleProp, placeholder, popperProps, prefix, readOnly, referenceDate: referenceDateProp, required = requiredFromFormControl, secondPrefix, secondStep, size: sizeProp, value: valueProp, } = props;
23
- const { onBlur: onBlurProp, onKeyDown: onKeyDownProp, onFocus: onFocusProp, size: inputSize = format.length + 2, ...restInputProp } = inputProps || {};
24
- const formats = useMemo(() => [format, defaultFormat], [defaultFormat, format]);
25
- /** Panel open control */
26
- const [open, setOpen] = useState(false);
27
- const preventOpen = readOnly;
28
- const onPanelToggle = useCallback((nextOpen) => {
29
- if (!preventOpen) {
30
- setOpen(nextOpen);
31
- if (onPanelToggleProp) {
32
- onPanelToggleProp(nextOpen);
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
- }, [onPanelToggleProp, preventOpen]);
36
- const onFocus = useCallback((event) => {
37
- if (onFocusProp) {
38
- onFocusProp(event);
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
- onPanelToggle(true);
41
- }, [onFocusProp, onPanelToggle]);
42
- /** Controlling input value and bind change handler */
43
- const inputRef = useRef(null);
44
- const { inputValue, onBlur, onChange, onInputChange, onKeyDown, value: internalValue, } = usePickerValue({
45
- defaultValue,
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
- onPanelToggle(false);
57
- }, [internalValue, onChangeProp, onPanelToggle]);
58
- /** using internal reference date */
59
- const [referenceDate, setReferenceDate] = useState(startOf(referenceDateProp || defaultValue || getNow(), 'hour'));
60
- useEffect(() => {
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
- }, [internalValue]);
65
- /** Bind input props */
66
- const onResolvedKeyDown = useCallback((event) => {
67
- if (onKeyDownProp) {
68
- onKeyDownProp(event);
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
- onKeyDown(event);
71
- if (event.key === 'Enter') {
72
- onConfirm();
105
+ }, [combineDateTime, onChangeProp]);
106
+ // Handle left complete - auto focus right
107
+ const onLeftComplete = useCallback(() => {
108
+ if (timeValue) {
109
+ onClose();
73
110
  }
74
- }, [onConfirm, onKeyDown, onKeyDownProp]);
75
- const onResolvedBlur = useCallback((event) => {
76
- if (onBlurProp) {
77
- onBlurProp(event);
111
+ else {
112
+ setTimeout(() => {
113
+ var _a;
114
+ (_a = inputRightRef.current) === null || _a === void 0 ? void 0 : _a.focus();
115
+ }, 0);
78
116
  }
79
- onBlur(event);
80
- }, [onBlur, onBlurProp]);
81
- const resolvedInputProps = {
82
- ...restInputProp,
83
- size: inputSize,
84
- onFocus,
85
- onKeyDown: onResolvedKeyDown,
86
- onBlur: onResolvedBlur,
87
- };
88
- /** Popper positioning */
89
- const anchorRef = useRef(null);
90
- const panelRef = useRef(null);
91
- const triggerComposedRef = useComposeRefs([anchorRef, ref]);
92
- /** Blur, click away and key down close */
93
- const onClose = useCallback(() => {
94
- onChange(valueProp);
95
- onPanelToggle(false);
96
- }, [onChange, onPanelToggle, valueProp]);
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
- popperRef: panelRef,
101
- lastElementRefInFlow: inputRef,
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
- /** Bind on change to on clear */
106
- const onClear = () => {
107
- onChange(undefined);
184
+ const onClear = useCallback((evt) => {
185
+ setDateValue(undefined);
186
+ setTimeValue(undefined);
108
187
  onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(undefined);
109
- };
110
- /** Icon */
111
- const onIconClick = (e) => {
112
- e.stopPropagation();
113
- if (open) {
114
- onChange(valueProp);
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
- onPanelToggle(!open);
117
- };
118
- const suffixActionIcon = jsx(Icon, { icon: ClockIcon, onClick: onIconClick });
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 };
@@ -1,4 +1,2 @@
1
- export { default as DateTimePickerPanel } from './DateTimePickerPanel';
2
- export type { DateTimePickerPanelProps } from './DateTimePickerPanel';
3
1
  export type { DateTimePickerProps } from './DateTimePicker';
4
2
  export { default } from './DateTimePicker';
@@ -1,2 +1 @@
1
- export { default as DateTimePickerPanel } from './DateTimePickerPanel.js';
2
1
  export { default } from './DateTimePicker.js';
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, hideBackdrop, invisibleBackdrop, onBackdropClick, onClose, open, placement = 'left', ...rest } = props;
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, hideBackdrop: hideBackdrop, invisibleBackdrop: invisibleBackdrop, onBackdropClick: onBackdropClick, onClose: onClose, open: open, ref: ref, children: jsx("div", { ...rest, className: cx(drawerClasses.host, drawerClasses[placement], className), children: children }) }));
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 };