@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,12 +1,11 @@
1
1
  'use client';
2
2
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
- import { forwardRef, useContext, useMemo, useState, useCallback, useRef, useEffect } from 'react';
3
+ import { forwardRef, useCallback, useState, useRef, useEffect, useMemo } from 'react';
4
4
  import { getDefaultModeFormat } from '@mezzanine-ui/core/calendar';
5
5
  import { CalendarIcon } from '@mezzanine-ui/icons';
6
6
  import DateRangePickerCalendar from './DateRangePickerCalendar.js';
7
7
  import { useDateRangePickerValue } from './useDateRangePickerValue.js';
8
8
  import { useComposeRefs } from '../hooks/useComposeRefs.js';
9
- import { FormControlContext } from '../Form/FormControlContext.js';
10
9
  import { useCalendarContext } from '../Calendar/CalendarContext.js';
11
10
  import { usePickerDocumentEventClose } from '../Picker/usePickerDocumentEventClose.js';
12
11
  import Icon from '../Icon/Icon.js';
@@ -14,19 +13,65 @@ import RangePickerTrigger from '../Picker/RangePickerTrigger.js';
14
13
 
15
14
  /**
16
15
  * The react component for `mezzanine` date range picker.
17
- * Notice that any component related to date-range-picker should be used along with `CalendarContext`. <br />
16
+ * Notice that any component related to date-range-picker should be used along with `CalendarContext`.
18
17
  */
19
18
  const DateRangePicker = forwardRef(function DateRangePicker(props, ref) {
20
- const { disabled: disabledFromFormControl, fullWidth: fullWidthFromFormControl, required: requiredFromFormControl, severity, } = useContext(FormControlContext) || {};
21
- const { defaultDateFormat, getNow, isBetween } = useCalendarContext();
22
- const { calendarProps, className, clearable = true, defaultValue, disabledMonthSwitch = false, disableOnNext, disableOnPrev, disabledYearSwitch = false, disabled = disabledFromFormControl || false, displayMonthLocale, error = severity === 'error' || false, fadeProps, format = defaultDateFormat, fullWidth = fullWidthFromFormControl || false, inputFromPlaceholder, inputFromProps, inputToPlaceholder, inputToProps, isDateDisabled, isWeekDisabled, isMonthDisabled, isYearDisabled, mode = 'day', onCalendarToggle: onCalendarToggleProp, onChange: onChangeProp, popperProps, prefix, readOnly, referenceDate: referenceDateProp, required = requiredFromFormControl || false, size, value: valueProp, } = props;
23
- const { onBlur: onFromBlurProp, onKeyDown: onFromKeyDownProp, onFocus: onFromFocusProp, ...restInputFromProps } = inputFromProps || {};
24
- const { onBlur: onToBlurProp, onKeyDown: onToKeyDownProp, onFocus: onToFocusProp, ...restInputToProps } = inputToProps || {};
25
- const formats = useMemo(() => [format, defaultDateFormat, getDefaultModeFormat(mode)], [defaultDateFormat, format, mode]);
19
+ const { addDay, getNow, isBefore, isBetween } = useCalendarContext();
20
+ const { actions: actionsProp, calendarProps, className, clearable = true, confirmMode = 'immediate', defaultValue, disabledMonthSwitch = false, disableOnDoubleNext, disableOnDoublePrev, disableOnNext, disableOnPrev, disabled = false, disabledYearSwitch = false, displayMonthLocale, displayWeekDayLocale, error = false, errorMessagesFrom, errorMessagesTo, fadeProps, firstCalendarRef, format: formatProp, fullWidth = false, inputFromPlaceholder, inputFromProps, inputToPlaceholder, inputToProps, isDateDisabled, isHalfYearDisabled, isMonthDisabled, isQuarterDisabled, isWeekDisabled, isYearDisabled, mode = 'day', onCalendarToggle: onCalendarToggleProp, onChange: onChangeProp, popperProps, prefix, quickSelect, readOnly, referenceDate: referenceDateProp, renderAnnotations, required = false, secondCalendarRef, size, validateFrom, validateTo, value: valueProp, } = props;
21
+ const format = formatProp || getDefaultModeFormat(mode);
26
22
  function isBetweenRange(valueToCheck, t1, t2, granularity) {
27
23
  return (isBetween(valueToCheck, t1, t2, granularity) ||
28
24
  isBetween(valueToCheck, t2, t1, granularity));
29
25
  }
26
+ /** Check if there are disabled dates in the range */
27
+ const hasDisabledDateInRange = useCallback((start, end) => {
28
+ var _a, _b, _c, _d, _e, _f;
29
+ const [rangeStart, rangeEnd] = isBefore(start, end)
30
+ ? [start, end]
31
+ : [end, start];
32
+ let current = rangeStart;
33
+ while (isBefore(current, rangeEnd) || current === rangeEnd) {
34
+ let isDisabled = false;
35
+ switch (mode) {
36
+ case 'day':
37
+ isDisabled = (_a = isDateDisabled === null || isDateDisabled === void 0 ? void 0 : isDateDisabled(current)) !== null && _a !== void 0 ? _a : false;
38
+ break;
39
+ case 'week':
40
+ isDisabled = (_b = isWeekDisabled === null || isWeekDisabled === void 0 ? void 0 : isWeekDisabled(current)) !== null && _b !== void 0 ? _b : false;
41
+ break;
42
+ case 'month':
43
+ isDisabled = (_c = isMonthDisabled === null || isMonthDisabled === void 0 ? void 0 : isMonthDisabled(current)) !== null && _c !== void 0 ? _c : false;
44
+ break;
45
+ case 'year':
46
+ isDisabled = (_d = isYearDisabled === null || isYearDisabled === void 0 ? void 0 : isYearDisabled(current)) !== null && _d !== void 0 ? _d : false;
47
+ break;
48
+ case 'quarter':
49
+ isDisabled = (_e = isQuarterDisabled === null || isQuarterDisabled === void 0 ? void 0 : isQuarterDisabled(current)) !== null && _e !== void 0 ? _e : false;
50
+ break;
51
+ case 'half-year':
52
+ isDisabled = (_f = isHalfYearDisabled === null || isHalfYearDisabled === void 0 ? void 0 : isHalfYearDisabled(current)) !== null && _f !== void 0 ? _f : false;
53
+ break;
54
+ }
55
+ if (isDisabled) {
56
+ return true;
57
+ }
58
+ current = addDay(current, 1);
59
+ if (isBefore(rangeEnd, current)) {
60
+ break;
61
+ }
62
+ }
63
+ return false;
64
+ }, [
65
+ addDay,
66
+ isBefore,
67
+ mode,
68
+ isDateDisabled,
69
+ isWeekDisabled,
70
+ isMonthDisabled,
71
+ isYearDisabled,
72
+ isQuarterDisabled,
73
+ isHalfYearDisabled,
74
+ ]);
30
75
  /** Using internal reference date */
31
76
  const [referenceDate, updateReferenceDate] = useState(referenceDateProp || (defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue[0]) || getNow());
32
77
  /** Calendar panel toggle */
@@ -35,35 +80,24 @@ const DateRangePicker = forwardRef(function DateRangePicker(props, ref) {
35
80
  const onCalendarToggle = useCallback((currentOpen) => {
36
81
  if (!preventOpen) {
37
82
  setOpen(currentOpen);
38
- if (onCalendarToggleProp) {
39
- onCalendarToggleProp(currentOpen);
40
- }
83
+ onCalendarToggleProp === null || onCalendarToggleProp === void 0 ? void 0 : onCalendarToggleProp(currentOpen);
41
84
  }
42
85
  }, [onCalendarToggleProp, preventOpen]);
43
- const onFromFocus = useCallback((event) => {
44
- if (onFromFocusProp) {
45
- onFromFocusProp(event);
46
- }
47
- onCalendarToggle(true);
48
- }, [onCalendarToggle, onFromFocusProp]);
49
- const onToFocus = useCallback((event) => {
50
- if (onToFocusProp) {
51
- onToFocusProp(event);
52
- }
53
- onCalendarToggle(true);
54
- }, [onCalendarToggle, onToFocusProp]);
55
86
  /** Values and onChange */
56
87
  const inputToRef = useRef(null);
57
88
  const inputFromRef = useRef(null);
58
- const { calendarValue, inputFromValue, inputToValue, onCalendarChange, onCalendarHover, onChange, onClear, onFromBlur, onFromKeyDown, onInputFromChange, onInputToChange, onToBlur, onToKeyDown, value: internalValue, } = useDateRangePickerValue({
89
+ // In manual mode, don't pass onChange to hook - we'll handle it via confirm button
90
+ const shouldTriggerOnChangeImmediately = confirmMode === 'immediate' && !actionsProp;
91
+ const { calendarValue, checkIsInRange, inputFromValue, inputToValue, onCalendarChange, onCalendarHover, onChange, onClear, onFromBlur, onFromFocus, onInputFromChange, onInputToChange, onToBlur, onToFocus, value: internalValue, } = useDateRangePickerValue({
59
92
  format,
60
- formats,
61
- value: valueProp,
93
+ hasDisabledDateInRange,
62
94
  inputFromRef,
63
95
  inputToRef,
64
96
  mode,
65
- onChange: onChangeProp,
97
+ onChange: shouldTriggerOnChangeImmediately ? onChangeProp : undefined,
98
+ value: valueProp,
66
99
  });
100
+ // Update reference date when internal value changes
67
101
  useEffect(() => {
68
102
  const [from, to] = internalValue;
69
103
  if (from) {
@@ -76,112 +110,120 @@ const DateRangePicker = forwardRef(function DateRangePicker(props, ref) {
76
110
  /** Bind calendar open control to handlers */
77
111
  const onCalendarChangeWithCloseControl = useCallback((val) => {
78
112
  onCalendarChange(val);
79
- const [from, to] = internalValue;
80
- const hasFirstValue = (from && !to) || (to && !from);
81
- if (hasFirstValue && val) {
113
+ // Close panel when range is complete (only if auto-close is enabled)
114
+ // Auto-close is disabled when actions are provided or in manual mode
115
+ if (val[0] && val[1] && shouldTriggerOnChangeImmediately) {
82
116
  onCalendarToggle(false);
83
117
  }
84
- }, [internalValue, onCalendarChange, onCalendarToggle]);
85
- const onFromKeyDownWithCloseControl = useCallback((event) => {
86
- onFromKeyDown(event);
118
+ }, [onCalendarChange, onCalendarToggle, shouldTriggerOnChangeImmediately]);
119
+ /** Handle confirm action (for manual mode) */
120
+ const onConfirm = useCallback(() => {
87
121
  const [from, to] = internalValue;
88
- if (event.key === 'Enter' && from && to) {
89
- onCalendarToggle(false);
122
+ if (from && to) {
123
+ onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp([from, to]);
124
+ // Sync internal state and reset isSelecting
125
+ onChange([from, to]);
90
126
  }
91
- }, [internalValue, onCalendarToggle, onFromKeyDown]);
92
- const onToKeyDownWithCloseControl = useCallback((event) => {
93
- onToKeyDown(event);
94
- const [from, to] = internalValue;
95
- if (event.key === 'Enter' && from && to) {
96
- onCalendarToggle(false);
127
+ onCalendarToggle(false);
128
+ }, [internalValue, onChange, onChangeProp, onCalendarToggle]);
129
+ /** Handle cancel action (for manual mode) */
130
+ const onCancel = useCallback(() => {
131
+ onChange(valueProp);
132
+ onCalendarToggle(false);
133
+ }, [onChange, onCalendarToggle, valueProp]);
134
+ /** Auto-generated actions for manual mode */
135
+ const actions = useMemo(() => {
136
+ // In manual mode, auto-generate actions
137
+ if (confirmMode === 'manual') {
138
+ const [from, to] = internalValue;
139
+ const isRangeComplete = Boolean(from && to);
140
+ return {
141
+ primaryButtonProps: {
142
+ children: 'Confirm',
143
+ disabled: !isRangeComplete,
144
+ onClick: onConfirm,
145
+ ...actionsProp === null || actionsProp === void 0 ? void 0 : actionsProp.primaryButtonProps,
146
+ },
147
+ secondaryButtonProps: {
148
+ children: 'Cancel',
149
+ onClick: onCancel,
150
+ ...actionsProp === null || actionsProp === void 0 ? void 0 : actionsProp.secondaryButtonProps,
151
+ },
152
+ };
97
153
  }
98
- }, [internalValue, onCalendarToggle, onToKeyDown]);
154
+ if (actionsProp) {
155
+ return actionsProp;
156
+ }
157
+ return undefined;
158
+ }, [actionsProp, confirmMode, internalValue, onConfirm, onCancel]);
99
159
  /** Calendar cell in range checker */
100
160
  const getIsInRangeHandler = (granularity) => {
101
161
  const [anchor1, anchor2] = calendarValue || [];
102
- return anchor1 && anchor2
103
- ? (date) => isBetweenRange(date, anchor1, anchor2, granularity)
104
- : undefined;
162
+ // If no range or disabled dates exist in range, return undefined
163
+ if (!anchor1 || !anchor2 || !checkIsInRange(anchor2)) {
164
+ return undefined;
165
+ }
166
+ return (date) => isBetweenRange(date, anchor1, anchor2, granularity);
105
167
  };
106
168
  /** Popper settings */
107
169
  const anchorRef = useRef(null);
108
170
  const calendarRef = useRef(null);
109
171
  const triggerComposedRef = useComposeRefs([anchorRef, ref]);
110
- /** Resolve input props */
111
- const onResolvedFromBlur = useCallback((event) => {
112
- if (onFromBlurProp) {
113
- onFromBlurProp(event);
114
- }
115
- onFromBlur(event);
116
- }, [onFromBlur, onFromBlurProp]);
117
- const onResolvedToBlur = useCallback((event) => {
118
- if (onToBlurProp) {
119
- onToBlurProp(event);
120
- }
121
- onToBlur(event);
122
- }, [onToBlur, onToBlurProp]);
123
- const onResolvedFromKeyDown = useCallback((event) => {
124
- if (onFromKeyDownProp) {
125
- onFromKeyDownProp(event);
126
- }
127
- onFromKeyDownWithCloseControl(event);
128
- }, [onFromKeyDownProp, onFromKeyDownWithCloseControl]);
129
- const onResolvedToKeyDown = useCallback((event) => {
130
- if (onToKeyDownProp) {
131
- onToKeyDownProp(event);
132
- }
133
- onToKeyDownWithCloseControl(event);
134
- }, [onToKeyDownProp, onToKeyDownWithCloseControl]);
135
- const resolvedInputFromProps = {
136
- ...restInputFromProps,
137
- onFocus: onFromFocus,
138
- onKeyDown: onResolvedFromKeyDown,
139
- onBlur: onResolvedFromBlur,
140
- size: format.length + 2,
141
- };
142
- const resolvedInputToProps = {
143
- ...restInputToProps,
144
- onFocus: onToFocus,
145
- onKeyDown: onResolvedToKeyDown,
146
- onBlur: onResolvedToBlur,
147
- size: format.length + 2,
148
- };
172
+ /** Input focus handlers */
173
+ const onFromFocusHandler = useCallback((_event) => {
174
+ onFromFocus();
175
+ onCalendarToggle(true);
176
+ }, [onCalendarToggle, onFromFocus]);
177
+ const onToFocusHandler = useCallback((_event) => {
178
+ onToFocus();
179
+ onCalendarToggle(true);
180
+ }, [onCalendarToggle, onToFocus]);
149
181
  /** Blur, click away and key down close */
150
- const onClose = () => {
182
+ const onClose = useCallback(() => {
151
183
  onChange(valueProp);
152
184
  onCalendarToggle(false);
153
- };
154
- const onChangeClose = () => {
185
+ }, [onChange, onCalendarToggle, valueProp]);
186
+ const onChangeClose = useCallback(() => {
187
+ // In manual mode, always restore to valueProp (don't auto-submit on click-away)
188
+ if (confirmMode === 'manual') {
189
+ onChange(valueProp);
190
+ onCalendarToggle(false);
191
+ return;
192
+ }
155
193
  const [from, to] = internalValue;
156
194
  if (from && to) {
157
- const newValue = onChange([from, to]);
158
- if (onChangeProp) {
159
- onChangeProp(newValue);
160
- }
195
+ onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp([from, to]);
161
196
  }
162
197
  else {
163
198
  onChange(valueProp);
164
199
  }
165
200
  onCalendarToggle(false);
166
- };
201
+ }, [
202
+ confirmMode,
203
+ internalValue,
204
+ onChange,
205
+ onCalendarToggle,
206
+ onChangeProp,
207
+ valueProp,
208
+ ]);
167
209
  usePickerDocumentEventClose({
168
- open,
169
210
  anchorRef,
170
- popperRef: calendarRef,
171
211
  lastElementRefInFlow: inputToRef,
172
- onClose,
173
212
  onChangeClose,
213
+ onClose,
214
+ open,
215
+ popperRef: calendarRef,
174
216
  });
175
- /** Icon */
176
- const onIconClick = (e) => {
217
+ /** Icon click handler */
218
+ const onIconClick = useCallback((e) => {
177
219
  e.stopPropagation();
178
220
  if (open) {
179
221
  onChange(valueProp);
180
222
  }
181
223
  onCalendarToggle(!open);
182
- };
224
+ }, [onChange, onCalendarToggle, open, valueProp]);
183
225
  const suffixActionIcon = jsx(Icon, { icon: CalendarIcon, onClick: onIconClick });
184
- return (jsxs(Fragment, { children: [jsx(RangePickerTrigger, { ref: triggerComposedRef, className: className, clearable: clearable, disabled: disabled, error: error, fullWidth: fullWidth, inputFromPlaceholder: inputFromPlaceholder, inputFromProps: resolvedInputFromProps, inputFromRef: inputFromRef, inputFromValue: inputFromValue, inputToPlaceholder: inputToPlaceholder, inputToProps: resolvedInputToProps, inputToRef: inputToRef, inputToValue: inputToValue, onClear: onClear, onInputFromChange: onInputFromChange, onInputToChange: onInputToChange, prefix: prefix, readOnly: readOnly, required: required, size: size, suffixActionIcon: suffixActionIcon }), jsx(DateRangePickerCalendar, { ref: calendarRef, open: open, anchor: anchorRef, calendarProps: calendarProps, disabledMonthSwitch: disabledMonthSwitch, disableOnNext: disableOnNext, disableOnPrev: disableOnPrev, disabledYearSwitch: disabledYearSwitch, displayMonthLocale: displayMonthLocale, fadeProps: fadeProps, isDateDisabled: isDateDisabled, isDateInRange: getIsInRangeHandler('date'), isMonthDisabled: isMonthDisabled, isMonthInRange: getIsInRangeHandler('month'), isWeekDisabled: isWeekDisabled, isWeekInRange: getIsInRangeHandler('week'), isYearDisabled: isYearDisabled, isYearInRange: getIsInRangeHandler('year'), mode: mode, onChange: onCalendarChangeWithCloseControl, onDateHover: onCalendarHover, onWeekHover: onCalendarHover, onMonthHover: onCalendarHover, onYearHover: onCalendarHover, popperProps: popperProps, referenceDate: referenceDate, value: calendarValue })] }));
226
+ return (jsxs(Fragment, { children: [jsx(RangePickerTrigger, { className: className, clearable: clearable, disabled: disabled, error: error, errorMessagesFrom: errorMessagesFrom, errorMessagesTo: errorMessagesTo, format: format, fullWidth: fullWidth, inputFromPlaceholder: inputFromPlaceholder, inputFromProps: inputFromProps, inputFromRef: inputFromRef, inputFromValue: inputFromValue, inputToPlaceholder: inputToPlaceholder, inputToProps: inputToProps, inputToRef: inputToRef, inputToValue: inputToValue, onClear: onClear, onFromBlur: onFromBlur, onFromFocus: onFromFocusHandler, onInputFromChange: onInputFromChange, onInputToChange: onInputToChange, onToBlur: onToBlur, onToFocus: onToFocusHandler, prefix: prefix, readOnly: readOnly, ref: triggerComposedRef, required: required, size: size, suffixActionIcon: suffixActionIcon, validateFrom: validateFrom, validateTo: validateTo }), jsx(DateRangePickerCalendar, { actions: actions, anchor: anchorRef, calendarProps: calendarProps, disabledMonthSwitch: disabledMonthSwitch, disabledYearSwitch: disabledYearSwitch, disableOnDoubleNext: disableOnDoubleNext, disableOnDoublePrev: disableOnDoublePrev, disableOnNext: disableOnNext, disableOnPrev: disableOnPrev, displayMonthLocale: displayMonthLocale, displayWeekDayLocale: displayWeekDayLocale, fadeProps: fadeProps, firstCalendarRef: firstCalendarRef, isDateDisabled: isDateDisabled, isDateInRange: getIsInRangeHandler('date'), isHalfYearDisabled: isHalfYearDisabled, isHalfYearInRange: getIsInRangeHandler('half-year'), isMonthDisabled: isMonthDisabled, isMonthInRange: getIsInRangeHandler('month'), isQuarterDisabled: isQuarterDisabled, isQuarterInRange: getIsInRangeHandler('quarter'), isWeekDisabled: isWeekDisabled, isWeekInRange: getIsInRangeHandler('week'), isYearDisabled: isYearDisabled, isYearInRange: getIsInRangeHandler('year'), mode: mode, onChange: onCalendarChangeWithCloseControl, onDateHover: onCalendarHover, onHalfYearHover: onCalendarHover, onMonthHover: onCalendarHover, onQuarterHover: onCalendarHover, onWeekHover: onCalendarHover, onYearHover: onCalendarHover, open: open, popperProps: popperProps, quickSelect: quickSelect, ref: calendarRef, referenceDate: referenceDate, renderAnnotations: renderAnnotations, secondCalendarRef: secondCalendarRef, value: calendarValue })] }));
185
227
  });
186
228
 
187
229
  export { DateRangePicker as default };
@@ -1,26 +1,30 @@
1
- import { RefObject } from 'react';
2
- import { CalendarProps } from '../Calendar';
1
+ import { DateType, CalendarMode } from '@mezzanine-ui/core/calendar';
2
+ import { RangeCalendarProps } from '../Calendar';
3
3
  import { InputTriggerPopperProps } from '../_internal/InputTriggerPopper';
4
- export interface DateRangePickerCalendarProps extends Pick<InputTriggerPopperProps, 'anchor' | 'fadeProps' | 'open'>, Pick<CalendarProps, 'value' | 'onChange' | 'disabledMonthSwitch' | 'disabledYearSwitch' | 'disableOnNext' | 'disableOnPrev' | 'displayMonthLocale' | 'mode' | 'isDateInRange' | 'isDateDisabled' | 'isMonthDisabled' | 'isMonthInRange' | 'isWeekDisabled' | 'isWeekInRange' | 'isYearDisabled' | 'isYearInRange' | 'onDateHover' | 'onWeekHover' | 'onMonthHover' | 'onYearHover' | 'referenceDate'> {
4
+ export interface DateRangePickerCalendarProps extends Pick<InputTriggerPopperProps, 'anchor' | 'fadeProps' | 'open'>, Pick<RangeCalendarProps, 'actions' | 'calendarProps' | 'disabledMonthSwitch' | 'disabledYearSwitch' | 'disableOnNext' | 'disableOnPrev' | 'disableOnDoubleNext' | 'disableOnDoublePrev' | 'displayMonthLocale' | 'displayWeekDayLocale' | 'firstCalendarRef' | 'isDateDisabled' | 'isDateInRange' | 'isMonthDisabled' | 'isMonthInRange' | 'isWeekDisabled' | 'isWeekInRange' | 'isYearDisabled' | 'isYearInRange' | 'isQuarterDisabled' | 'isQuarterInRange' | 'isHalfYearDisabled' | 'isHalfYearInRange' | 'onDateHover' | 'onWeekHover' | 'onMonthHover' | 'onYearHover' | 'onQuarterHover' | 'onHalfYearHover' | 'quickSelect' | 'renderAnnotations' | 'secondCalendarRef' | 'value'> {
5
5
  /**
6
- * Other props you may pass to calendar component.
6
+ * Use this prop to switch calendars.
7
+ * @default 'day'
7
8
  */
8
- calendarProps?: Omit<CalendarProps, keyof DateRangePickerCalendarProps>;
9
+ mode?: CalendarMode;
9
10
  /**
10
- * React Ref for the first(on the left side) calendar
11
+ * Click handler for every cell on calendars.
12
+ * When completing a range (second click), returns normalized [start, end].
13
+ * When starting a new range (first click), returns the clicked date.
11
14
  */
12
- firstCalendarRef?: RefObject<HTMLDivElement | null>;
15
+ onChange?: (value: [DateType, DateType | undefined]) => void;
13
16
  /**
14
17
  * Other props you may provide to `Popper` component
15
18
  */
16
19
  popperProps?: Omit<InputTriggerPopperProps, 'anchor' | 'children' | 'fadeProps' | 'open'>;
17
20
  /**
18
- * React Ref for the second(on the right side) calendar
21
+ * The reference date for getting the calendar.
19
22
  */
20
- secondCalendarRef?: RefObject<HTMLDivElement | null>;
23
+ referenceDate: DateType;
21
24
  }
22
25
  /**
23
26
  * The react component for `mezzanine` date range picker calendar.
27
+ * This is a wrapper around RangeCalendar with InputTriggerPopper for popup behavior.
24
28
  */
25
29
  declare const DateRangePickerCalendar: import("react").ForwardRefExoticComponent<DateRangePickerCalendarProps & import("react").RefAttributes<HTMLDivElement>>;
26
30
  export default DateRangePickerCalendar;
@@ -1,104 +1,16 @@
1
1
  'use client';
2
- import { jsx, jsxs } from 'react/jsx-runtime';
3
- import { dateRangePickerClasses } from '@mezzanine-ui/core/date-range-picker';
4
- import { forwardRef, useCallback, useState } from 'react';
5
- import { useDateRangeCalendarControls } from './useDateRangeCalendarControls.js';
6
- import { useCalendarContext } from '../Calendar/CalendarContext.js';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { forwardRef } from 'react';
7
4
  import InputTriggerPopper from '../_internal/InputTriggerPopper/InputTriggerPopper.js';
8
- import Calendar from '../Calendar/Calendar.js';
9
- import cx from 'clsx';
5
+ import RangeCalendar from '../Calendar/RangeCalendar.js';
10
6
 
11
7
  /**
12
8
  * The react component for `mezzanine` date range picker calendar.
9
+ * This is a wrapper around RangeCalendar with InputTriggerPopper for popup behavior.
13
10
  */
14
11
  const DateRangePickerCalendar = forwardRef(function DateRangePickerCalendar(props, ref) {
15
- const { displayMonthLocale: displayMonthLocaleFromConfig, getMonth, getYear, setMonth, setYear, } = useCalendarContext();
16
- const { anchor, calendarProps, disabledMonthSwitch, disableOnNext, disableOnPrev, disabledYearSwitch, displayMonthLocale = displayMonthLocaleFromConfig, fadeProps, firstCalendarRef, isDateDisabled, isDateInRange, isMonthDisabled, isMonthInRange, isWeekDisabled, isWeekInRange, isYearDisabled, isYearInRange, mode = 'day', onChange: onChangeProp, onDateHover, onMonthHover, onWeekHover, onYearHover, open, popperProps, referenceDate: referenceDateProp, secondCalendarRef, value, } = props;
17
- const { className, ...restCalendarProps } = calendarProps || {};
18
- const { currentMode, onMonthControlClick: onMonthControlClickFromHook, onFirstNext, onFirstPrev, onSecondNext, onSecondPrev, onYearControlClick: onYearControlClickFromHook, popModeStack, referenceDates, updateFirstReferenceDate, updateSecondReferenceDate, } = useDateRangeCalendarControls(referenceDateProp, mode);
19
- const onChangeFactory = useCallback((calendar) => {
20
- const targetDate = referenceDates[calendar];
21
- const updateReferenceDate = calendar
22
- ? updateSecondReferenceDate
23
- : updateFirstReferenceDate;
24
- if (currentMode === 'day' || currentMode === 'week') {
25
- return (target) => {
26
- updateReferenceDate(target);
27
- popModeStack();
28
- if (currentMode === mode && onChangeProp) {
29
- onChangeProp(target);
30
- }
31
- };
32
- }
33
- if (currentMode === 'month') {
34
- return (target) => {
35
- const result = currentMode === mode
36
- ? target
37
- : setMonth(targetDate, getMonth(target));
38
- updateReferenceDate(result);
39
- popModeStack();
40
- if (currentMode === mode && onChangeProp) {
41
- onChangeProp(result);
42
- }
43
- };
44
- }
45
- if (currentMode === 'year') {
46
- return (target) => {
47
- const result = currentMode === mode
48
- ? target
49
- : setYear(targetDate, getYear(target));
50
- updateReferenceDate(result);
51
- popModeStack();
52
- if (currentMode === mode && onChangeProp) {
53
- onChangeProp(result);
54
- }
55
- };
56
- }
57
- }, [
58
- currentMode,
59
- getMonth,
60
- getYear,
61
- mode,
62
- onChangeProp,
63
- popModeStack,
64
- referenceDates,
65
- setMonth,
66
- setYear,
67
- updateFirstReferenceDate,
68
- updateSecondReferenceDate,
69
- ]);
70
- const [controlPanelOnLeft, setControlPanelOnLeft] = useState(true);
71
- const onMonthControlClickFactory = useCallback((calendar) => {
72
- if (calendar) {
73
- return () => {
74
- setControlPanelOnLeft(false);
75
- onMonthControlClickFromHook();
76
- };
77
- }
78
- return () => {
79
- setControlPanelOnLeft(true);
80
- onMonthControlClickFromHook();
81
- };
82
- }, [onMonthControlClickFromHook]);
83
- const onYearControlClickFactory = useCallback((calendar) => {
84
- if (calendar) {
85
- return () => {
86
- setControlPanelOnLeft(false);
87
- onYearControlClickFromHook();
88
- };
89
- }
90
- return () => {
91
- setControlPanelOnLeft(true);
92
- onYearControlClickFromHook();
93
- };
94
- }, [onYearControlClickFromHook]);
95
- const isSettingFirstCalendar = currentMode !== mode && controlPanelOnLeft;
96
- const isSettingSecondCalendar = currentMode !== mode && !controlPanelOnLeft;
97
- return (jsx(InputTriggerPopper, { ...popperProps, ref: ref, anchor: anchor, open: open, fadeProps: fadeProps, children: jsxs("div", { className: dateRangePickerClasses.calendarGroup, children: [jsx(Calendar, { ...restCalendarProps, className: cx(dateRangePickerClasses.calendar, {
98
- [dateRangePickerClasses.calendarInactive]: isSettingSecondCalendar,
99
- }, className), disabledMonthSwitch: disabledMonthSwitch, disableOnNext: disableOnNext, disableOnPrev: disableOnPrev, disabledYearSwitch: disabledYearSwitch, displayMonthLocale: displayMonthLocale, isDateDisabled: isDateDisabled, isDateInRange: isDateInRange, isMonthDisabled: isMonthDisabled, isMonthInRange: isMonthInRange, isWeekDisabled: isWeekDisabled, isWeekInRange: isWeekInRange, isYearDisabled: isYearDisabled, isYearInRange: isYearInRange, mode: controlPanelOnLeft ? currentMode : mode, onChange: onChangeFactory(0), onDateHover: currentMode === mode ? onDateHover : undefined, onMonthHover: currentMode === mode ? onMonthHover : undefined, onWeekHover: currentMode === mode ? onWeekHover : undefined, onYearHover: currentMode === mode ? onYearHover : undefined, onMonthControlClick: onMonthControlClickFactory(0), onNext: isSettingFirstCalendar ? onFirstNext : undefined, onPrev: onFirstPrev, onYearControlClick: onYearControlClickFactory(0), ref: firstCalendarRef, referenceDate: referenceDates[0], value: isSettingFirstCalendar ? referenceDates[0] : value }), jsx(Calendar, { ...restCalendarProps, className: cx(dateRangePickerClasses.calendar, {
100
- [dateRangePickerClasses.calendarInactive]: isSettingFirstCalendar,
101
- }, className), disabledMonthSwitch: disabledMonthSwitch, disableOnNext: disableOnNext, disableOnPrev: disableOnPrev, disabledYearSwitch: disabledYearSwitch, displayMonthLocale: displayMonthLocale, isDateDisabled: isDateDisabled, isDateInRange: isDateInRange, isMonthDisabled: isMonthDisabled, isMonthInRange: isMonthInRange, isWeekDisabled: isWeekDisabled, isWeekInRange: isWeekInRange, isYearDisabled: isYearDisabled, isYearInRange: isYearInRange, mode: !controlPanelOnLeft ? currentMode : mode, onChange: onChangeFactory(1), onDateHover: currentMode === mode ? onDateHover : undefined, onMonthHover: currentMode === mode ? onMonthHover : undefined, onWeekHover: currentMode === mode ? onWeekHover : undefined, onYearHover: currentMode === mode ? onYearHover : undefined, onMonthControlClick: onMonthControlClickFactory(1), onNext: onSecondNext, onPrev: isSettingSecondCalendar ? onSecondPrev : undefined, onYearControlClick: onYearControlClickFactory(1), ref: secondCalendarRef, referenceDate: referenceDates[1], value: isSettingSecondCalendar ? referenceDates[1] : value })] }) }));
12
+ const { actions, anchor, calendarProps, disabledMonthSwitch, disableOnNext, disableOnPrev, disableOnDoubleNext, disableOnDoublePrev, disabledYearSwitch, displayMonthLocale, displayWeekDayLocale, fadeProps, firstCalendarRef, isDateDisabled, isDateInRange, isHalfYearDisabled, isHalfYearInRange, isMonthDisabled, isMonthInRange, isQuarterDisabled, isQuarterInRange, isWeekDisabled, isWeekInRange, isYearDisabled, isYearInRange, mode = 'day', onChange, onDateHover, onHalfYearHover, onMonthHover, onQuarterHover, onWeekHover, onYearHover, open, popperProps, quickSelect, referenceDate, renderAnnotations, secondCalendarRef, value, } = props;
13
+ return (jsx(InputTriggerPopper, { ...popperProps, ref: ref, anchor: anchor, fadeProps: fadeProps, open: open, children: jsx(RangeCalendar, { actions: actions, calendarProps: calendarProps, disabledMonthSwitch: disabledMonthSwitch, disabledYearSwitch: disabledYearSwitch, disableOnDoubleNext: disableOnDoubleNext, disableOnDoublePrev: disableOnDoublePrev, disableOnNext: disableOnNext, disableOnPrev: disableOnPrev, displayMonthLocale: displayMonthLocale, displayWeekDayLocale: displayWeekDayLocale, firstCalendarRef: firstCalendarRef, isDateDisabled: isDateDisabled, isDateInRange: isDateInRange, isHalfYearDisabled: isHalfYearDisabled, isHalfYearInRange: isHalfYearInRange, isMonthDisabled: isMonthDisabled, isMonthInRange: isMonthInRange, isQuarterDisabled: isQuarterDisabled, isQuarterInRange: isQuarterInRange, isWeekDisabled: isWeekDisabled, isWeekInRange: isWeekInRange, isYearDisabled: isYearDisabled, isYearInRange: isYearInRange, mode: mode, onChange: onChange, onDateHover: onDateHover, onHalfYearHover: onHalfYearHover, onMonthHover: onMonthHover, onQuarterHover: onQuarterHover, onWeekHover: onWeekHover, onYearHover: onYearHover, quickSelect: quickSelect, referenceDate: referenceDate, renderAnnotations: renderAnnotations, secondCalendarRef: secondCalendarRef, value: value }) }));
102
14
  });
103
15
 
104
16
  export { DateRangePickerCalendar as default };
@@ -37,7 +37,9 @@ function useDateRangeCalendarControls(referenceDate, mode) {
37
37
  setReferenceDates([adder(date), date]);
38
38
  }, [getAdder]);
39
39
  const onPrevFactory = (target) => () => {
40
- const [handleMinus] = modifierGroup[currentMode];
40
+ var _a;
41
+ const modifiers = modifierGroup[currentMode];
42
+ const [handleMinus] = (_a = modifiers.single) !== null && _a !== void 0 ? _a : modifiers.double;
41
43
  const newAnchor = handleMinus(referenceDates[target]);
42
44
  const newDates = [...referenceDates];
43
45
  newDates[target] = newAnchor;
@@ -50,7 +52,9 @@ function useDateRangeCalendarControls(referenceDate, mode) {
50
52
  setReferenceDates(newDates);
51
53
  };
52
54
  const onNextFactory = (target) => () => {
53
- const [, handleAdd] = modifierGroup[currentMode];
55
+ var _a;
56
+ const modifiers = modifierGroup[currentMode];
57
+ const [, handleAdd] = (_a = modifiers.single) !== null && _a !== void 0 ? _a : modifiers.double;
54
58
  const newAnchor = handleAdd(referenceDates[target]);
55
59
  const newDates = [...referenceDates];
56
60
  newDates[target] = newAnchor;
@@ -1,28 +1,51 @@
1
1
  import { DateType } from '@mezzanine-ui/core/calendar';
2
2
  import { RangePickerPickingValue, RangePickerValue } from '@mezzanine-ui/core/picker';
3
- import { ChangeEventHandler, KeyboardEventHandler } from 'react';
4
- import { UseRangePickerValueProps } from '../Picker/useRangePickerValue';
3
+ import { RefObject } from 'react';
5
4
  import { DateRangePickerCalendarProps } from './DateRangePickerCalendar';
6
- export interface UseDateRangePickerValueProps extends Omit<UseRangePickerValueProps, 'onChange'> {
5
+ export interface UseDateRangePickerValueProps {
6
+ /**
7
+ * The format pattern for the inputs (e.g., "YYYY-MM-DD")
8
+ */
9
+ format: string;
10
+ /**
11
+ * Function to check if there are disabled dates in the range
12
+ */
13
+ hasDisabledDateInRange?: (start: DateType, end: DateType) => boolean;
14
+ /**
15
+ * Ref for the 'from' input element
16
+ */
17
+ inputFromRef: RefObject<HTMLInputElement | null>;
18
+ /**
19
+ * Ref for the 'to' input element
20
+ */
21
+ inputToRef: RefObject<HTMLInputElement | null>;
22
+ /**
23
+ * Calendar mode
24
+ */
7
25
  mode?: DateRangePickerCalendarProps['mode'];
26
+ /**
27
+ * Change handler called when range is complete
28
+ */
8
29
  onChange?: (value?: RangePickerValue) => void;
30
+ /**
31
+ * Controlled value
32
+ */
33
+ value?: RangePickerValue;
9
34
  }
10
- export declare function useDateRangePickerValue({ format, formats, inputFromRef, inputToRef, mode, onChange: onChangeProp, value: valueProp, }: UseDateRangePickerValueProps): {
35
+ export declare function useDateRangePickerValue({ format, hasDisabledDateInRange, inputFromRef: _inputFromRef, inputToRef, mode, onChange: onChangeProp, value: valueProp, }: UseDateRangePickerValueProps): {
11
36
  calendarValue: string[] | undefined;
37
+ checkIsInRange: (_date: DateType) => boolean;
12
38
  inputFromValue: string;
13
39
  inputToValue: string;
14
- onCalendarChange: (val?: DateType) => void;
40
+ onCalendarChange: (rangeValue: [DateType, DateType | undefined]) => void;
15
41
  onCalendarHover: import("react").Dispatch<import("react").SetStateAction<string | undefined>> | undefined;
16
- onChange: (target?: RangePickerPickingValue, callback?: {
17
- from: (date?: string) => string | undefined;
18
- to: (date?: string) => string | undefined;
19
- }) => RangePickerPickingValue | undefined;
42
+ onChange: (target?: RangePickerPickingValue) => RangePickerPickingValue | undefined;
20
43
  onClear: () => void;
21
- onFromBlur: import("react").FocusEventHandler<HTMLInputElement>;
22
- onFromKeyDown: KeyboardEventHandler<HTMLInputElement>;
23
- onInputFromChange: ChangeEventHandler<HTMLInputElement>;
24
- onInputToChange: ChangeEventHandler<HTMLInputElement>;
25
- onToBlur: import("react").FocusEventHandler<HTMLInputElement>;
26
- onToKeyDown: KeyboardEventHandler<HTMLInputElement>;
44
+ onFromBlur: () => void;
45
+ onFromFocus: () => void;
46
+ onInputFromChange: (formattedValue: string) => void;
47
+ onInputToChange: (formattedValue: string) => void;
48
+ onToBlur: () => void;
49
+ onToFocus: () => void;
27
50
  value: RangePickerPickingValue;
28
51
  };