@mui/x-date-pickers-pro 8.0.0-alpha.6 → 8.0.0-alpha.7

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 (144) hide show
  1. package/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/index.d.ts +1 -1
  2. package/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/index.js +1 -1
  3. package/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/package.json +1 -1
  4. package/{AdapterDateFnsV3 → AdapterDateFnsV2}/index.d.ts +1 -1
  5. package/{AdapterDateFnsV3 → AdapterDateFnsV2}/index.js +1 -1
  6. package/{AdapterDateFnsV3 → AdapterDateFnsV2}/package.json +1 -1
  7. package/CHANGELOG.md +127 -1
  8. package/DateRangeCalendar/DateRangeCalendar.js +9 -7
  9. package/DateRangePicker/DateRangePicker.js +1 -1
  10. package/DateRangePicker/DateRangePicker.types.d.ts +5 -0
  11. package/DateRangePicker/DateRangePickerToolbar.d.ts +2 -3
  12. package/DateRangePicker/DateRangePickerToolbar.js +25 -17
  13. package/DateRangePicker/shared.d.ts +1 -1
  14. package/DateTimeRangePicker/DateTimeRangePicker.js +2 -2
  15. package/DateTimeRangePicker/DateTimeRangePickerTabs.d.ts +3 -4
  16. package/DateTimeRangePicker/DateTimeRangePickerTabs.js +8 -7
  17. package/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.d.ts +8 -10
  18. package/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +7 -5
  19. package/DateTimeRangePicker/DateTimeRangePickerToolbar.d.ts +2 -3
  20. package/DateTimeRangePicker/DateTimeRangePickerToolbar.js +26 -28
  21. package/DateTimeRangePicker/shared.d.ts +2 -2
  22. package/DesktopDateRangePicker/DesktopDateRangePicker.js +9 -3
  23. package/DesktopDateRangePicker/DesktopDateRangePicker.types.d.ts +5 -0
  24. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +17 -14
  25. package/MobileDateRangePicker/MobileDateRangePicker.js +2 -2
  26. package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +15 -8
  27. package/SingleInputDateRangeField/useSingleInputDateRangeField.d.ts +1 -1
  28. package/SingleInputDateRangeField/useSingleInputDateRangeField.js +13 -14
  29. package/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.d.ts +1 -1
  30. package/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.js +13 -14
  31. package/SingleInputTimeRangeField/useSingleInputTimeRangeField.d.ts +1 -1
  32. package/SingleInputTimeRangeField/useSingleInputTimeRangeField.js +13 -14
  33. package/dateRangeViewRenderers/dateRangeViewRenderers.d.ts +2 -2
  34. package/dateRangeViewRenderers/dateRangeViewRenderers.js +0 -6
  35. package/hooks/index.d.ts +1 -0
  36. package/hooks/index.js +1 -0
  37. package/hooks/package.json +6 -0
  38. package/hooks/usePickerRangePositionContext.d.ts +7 -0
  39. package/hooks/usePickerRangePositionContext.js +15 -0
  40. package/index.d.ts +2 -0
  41. package/index.js +4 -2
  42. package/internals/hooks/models/useRangePicker.d.ts +2 -2
  43. package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +26 -43
  44. package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.types.d.ts +3 -5
  45. package/internals/hooks/useEnrichedRangePickerFieldProps.d.ts +5 -5
  46. package/internals/hooks/useEnrichedRangePickerFieldProps.js +3 -3
  47. package/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +21 -35
  48. package/internals/hooks/useMobileRangePicker/useMobileRangePicker.types.d.ts +3 -5
  49. package/internals/hooks/useMultiInputFieldSelectedSections.d.ts +10 -12
  50. package/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.d.ts +1 -1
  51. package/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +11 -6
  52. package/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.d.ts +2 -2
  53. package/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +12 -7
  54. package/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.d.ts +2 -2
  55. package/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +13 -8
  56. package/internals/hooks/useNullablePickerRangePositionContext.d.ts +5 -0
  57. package/internals/hooks/useNullablePickerRangePositionContext.js +10 -0
  58. package/internals/hooks/useRangePosition.d.ts +1 -1
  59. package/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +14 -24
  60. package/internals/hooks/useStaticRangePicker/useStaticRangePicker.types.d.ts +2 -2
  61. package/internals/utils/date-range-manager.js +2 -1
  62. package/internals/utils/releaseInfo.js +1 -1
  63. package/internals/utils/valueManagers.js +7 -7
  64. package/managers/index.d.ts +6 -0
  65. package/managers/index.js +3 -0
  66. package/managers/package.json +6 -0
  67. package/managers/useDateRangeManager.d.ts +15 -0
  68. package/managers/useDateRangeManager.js +31 -0
  69. package/managers/useDateTimeRangeManager.d.ts +15 -0
  70. package/managers/useDateTimeRangeManager.js +31 -0
  71. package/managers/useTimeRangeManager.d.ts +15 -0
  72. package/managers/useTimeRangeManager.js +29 -0
  73. package/models/range.d.ts +0 -1
  74. package/modern/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/index.js +1 -1
  75. package/modern/{AdapterDateFnsV3 → AdapterDateFnsV2}/index.js +1 -1
  76. package/modern/DateRangeCalendar/DateRangeCalendar.js +9 -7
  77. package/modern/DateRangePicker/DateRangePicker.js +1 -1
  78. package/modern/DateRangePicker/DateRangePickerToolbar.js +25 -17
  79. package/modern/DateTimeRangePicker/DateTimeRangePicker.js +2 -2
  80. package/modern/DateTimeRangePicker/DateTimeRangePickerTabs.js +8 -7
  81. package/modern/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +7 -5
  82. package/modern/DateTimeRangePicker/DateTimeRangePickerToolbar.js +26 -28
  83. package/modern/DesktopDateRangePicker/DesktopDateRangePicker.js +9 -3
  84. package/modern/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +17 -14
  85. package/modern/MobileDateRangePicker/MobileDateRangePicker.js +2 -2
  86. package/modern/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +15 -8
  87. package/modern/SingleInputDateRangeField/useSingleInputDateRangeField.js +13 -14
  88. package/modern/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.js +13 -14
  89. package/modern/SingleInputTimeRangeField/useSingleInputTimeRangeField.js +13 -14
  90. package/modern/dateRangeViewRenderers/dateRangeViewRenderers.js +0 -6
  91. package/modern/hooks/index.js +1 -0
  92. package/modern/hooks/usePickerRangePositionContext.js +15 -0
  93. package/modern/index.js +4 -2
  94. package/modern/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +26 -43
  95. package/modern/internals/hooks/useEnrichedRangePickerFieldProps.js +3 -3
  96. package/modern/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +21 -35
  97. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +11 -6
  98. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +12 -7
  99. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +13 -8
  100. package/modern/internals/hooks/useNullablePickerRangePositionContext.js +10 -0
  101. package/modern/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +14 -24
  102. package/modern/internals/utils/date-range-manager.js +2 -1
  103. package/modern/internals/utils/releaseInfo.js +1 -1
  104. package/modern/internals/utils/valueManagers.js +7 -7
  105. package/modern/managers/index.js +3 -0
  106. package/modern/managers/useDateRangeManager.js +31 -0
  107. package/modern/managers/useDateTimeRangeManager.js +31 -0
  108. package/modern/managers/useTimeRangeManager.js +29 -0
  109. package/node/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/index.js +1 -1
  110. package/node/{AdapterDateFnsV3 → AdapterDateFnsV2}/index.js +1 -1
  111. package/node/DateRangeCalendar/DateRangeCalendar.js +9 -7
  112. package/node/DateRangePicker/DateRangePicker.js +1 -1
  113. package/node/DateRangePicker/DateRangePickerToolbar.js +24 -16
  114. package/node/DateTimeRangePicker/DateTimeRangePicker.js +2 -2
  115. package/node/DateTimeRangePicker/DateTimeRangePickerTabs.js +8 -7
  116. package/node/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +7 -5
  117. package/node/DateTimeRangePicker/DateTimeRangePickerToolbar.js +26 -28
  118. package/node/DesktopDateRangePicker/DesktopDateRangePicker.js +9 -3
  119. package/node/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +17 -14
  120. package/node/MobileDateRangePicker/MobileDateRangePicker.js +2 -2
  121. package/node/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +15 -8
  122. package/node/SingleInputDateRangeField/useSingleInputDateRangeField.js +12 -14
  123. package/node/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.js +12 -14
  124. package/node/SingleInputTimeRangeField/useSingleInputTimeRangeField.js +12 -14
  125. package/node/dateRangeViewRenderers/dateRangeViewRenderers.js +0 -6
  126. package/node/hooks/index.js +12 -0
  127. package/node/hooks/usePickerRangePositionContext.js +22 -0
  128. package/node/index.js +23 -1
  129. package/node/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +26 -43
  130. package/node/internals/hooks/useEnrichedRangePickerFieldProps.js +3 -3
  131. package/node/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +21 -35
  132. package/node/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +10 -5
  133. package/node/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +11 -6
  134. package/node/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +12 -7
  135. package/node/internals/hooks/useNullablePickerRangePositionContext.js +16 -0
  136. package/node/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +14 -24
  137. package/node/internals/utils/date-range-manager.js +2 -1
  138. package/node/internals/utils/releaseInfo.js +1 -1
  139. package/node/internals/utils/valueManagers.js +7 -7
  140. package/node/managers/index.js +26 -0
  141. package/node/managers/useDateRangeManager.js +38 -0
  142. package/node/managers/useDateTimeRangeManager.js +38 -0
  143. package/node/managers/useTimeRangeManager.js +36 -0
  144. package/package.json +5 -5
@@ -18,8 +18,9 @@ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"
18
18
  var _internals = require("@mui/x-date-pickers/internals");
19
19
  var _hooks = require("@mui/x-date-pickers/hooks");
20
20
  var _dateRangePickerToolbarClasses = require("./dateRangePickerToolbarClasses");
21
+ var _hooks2 = require("../hooks");
21
22
  var _jsxRuntime = require("react/jsx-runtime");
22
- const _excluded = ["value", "rangePosition", "onRangePositionChange", "toolbarFormat", "className", "classes"];
23
+ const _excluded = ["toolbarFormat", "className", "classes"];
23
24
  const useUtilityClasses = classes => {
24
25
  const slots = {
25
26
  root: ['root'],
@@ -56,38 +57,48 @@ const DateRangePickerToolbar = exports.DateRangePickerToolbar = /*#__PURE__*/Rea
56
57
  name: 'MuiDateRangePickerToolbar'
57
58
  });
58
59
  const {
59
- value: [start, end],
60
- rangePosition,
61
- onRangePositionChange,
62
- toolbarFormat,
60
+ toolbarFormat: toolbarFormatProp,
63
61
  className,
64
62
  classes: classesProp
65
63
  } = props,
66
64
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
65
+ const {
66
+ value
67
+ } = (0, _hooks.usePickerContext)();
67
68
  const translations = (0, _hooks.usePickerTranslations)();
68
69
  const ownerState = (0, _internals.useToolbarOwnerState)();
70
+ const {
71
+ rangePosition,
72
+ onRangePositionChange
73
+ } = (0, _hooks2.usePickerRangePositionContext)();
69
74
  const classes = useUtilityClasses(classesProp);
70
- const startDateValue = start ? utils.formatByString(start, toolbarFormat || utils.formats.shortDate) : translations.start;
71
- const endDateValue = end ? utils.formatByString(end, toolbarFormat || utils.formats.shortDate) : translations.end;
75
+
76
+ // This can't be a default value when spreading because it breaks the API generation.
77
+ const toolbarFormat = toolbarFormatProp ?? utils.formats.shortDate;
78
+ const formatDate = (date, fallback) => {
79
+ if (!utils.isValid(date)) {
80
+ return fallback;
81
+ }
82
+ return utils.formatByString(date, toolbarFormat);
83
+ };
72
84
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(DateRangePickerToolbarRoot, (0, _extends2.default)({}, other, {
73
85
  toolbarTitle: translations.dateRangePickerToolbarTitle,
74
- isLandscape: false,
75
86
  className: (0, _clsx.default)(classes.root, className),
76
87
  ownerState: ownerState,
77
88
  ref: ref,
78
89
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(DateRangePickerToolbarContainer, {
79
90
  className: classes.container,
80
91
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.PickersToolbarButton, {
81
- variant: start !== null ? 'h5' : 'h6',
82
- value: startDateValue,
92
+ variant: value[0] == null ? 'h6' : 'h5',
93
+ value: formatDate(value[0], translations.start),
83
94
  selected: rangePosition === 'start',
84
95
  onClick: () => onRangePositionChange('start')
85
96
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Typography.default, {
86
97
  variant: "h5",
87
98
  children: ["\xA0", '–', "\xA0"]
88
99
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.PickersToolbarButton, {
89
- variant: end !== null ? 'h5' : 'h6',
90
- value: endDateValue,
100
+ variant: value[1] == null ? 'h6' : 'h5',
101
+ value: formatDate(value[1], translations.end),
91
102
  selected: rangePosition === 'end',
92
103
  onClick: () => onRangePositionChange('end')
93
104
  })]
@@ -109,8 +120,6 @@ process.env.NODE_ENV !== "production" ? DateRangePickerToolbar.propTypes = {
109
120
  * @default `true` for Desktop, `false` for Mobile.
110
121
  */
111
122
  hidden: _propTypes.default.bool,
112
- onRangePositionChange: _propTypes.default.func.isRequired,
113
- rangePosition: _propTypes.default.oneOf(['end', 'start']).isRequired,
114
123
  /**
115
124
  * The system prop that allows defining system overrides as well as additional CSS styles.
116
125
  */
@@ -124,6 +133,5 @@ process.env.NODE_ENV !== "production" ? DateRangePickerToolbar.propTypes = {
124
133
  * Toolbar value placeholder—it is displayed when the value is empty.
125
134
  * @default "––"
126
135
  */
127
- toolbarPlaceholder: _propTypes.default.node,
128
- value: _propTypes.default.arrayOf(_propTypes.default.object).isRequired
136
+ toolbarPlaceholder: _propTypes.default.node
129
137
  } : void 0;
@@ -75,8 +75,8 @@ process.env.NODE_ENV !== "production" ? DateTimeRangePicker.propTypes = {
75
75
  calendars: _propTypes.default.oneOf([1, 2, 3]),
76
76
  className: _propTypes.default.string,
77
77
  /**
78
- * If `true`, the popover or modal will close after submitting the full date.
79
- * @default `true` for desktop, `false` for mobile (based on the chosen wrapper and `desktopModeMediaQuery` prop).
78
+ * If `true`, the Picker will close after submitting the full date.
79
+ * @default false
80
80
  */
81
81
  closeOnSelect: _propTypes.default.bool,
82
82
  /**
@@ -19,6 +19,7 @@ var _hooks = require("@mui/x-date-pickers/hooks");
19
19
  var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
20
20
  var _Button = _interopRequireDefault(require("@mui/material/Button"));
21
21
  var _dateTimeRangePickerTabsClasses = require("./dateTimeRangePickerTabsClasses");
22
+ var _hooks2 = require("../hooks");
22
23
  var _jsxRuntime = require("react/jsx-runtime");
23
24
  const viewToTab = (view, rangePosition) => {
24
25
  if ((0, _internals.isDatePickerView)(view)) {
@@ -78,8 +79,6 @@ const DateTimeRangePickerTabs = exports.DateTimeRangePickerTabs = function DateT
78
79
  dateIcon = /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.DateRangeIcon, {}),
79
80
  timeIcon = /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.TimeIcon, {}),
80
81
  hidden = typeof window === 'undefined' || window.innerHeight < 667,
81
- rangePosition,
82
- onRangePositionChange,
83
82
  className,
84
83
  classes: classesProp,
85
84
  sx
@@ -90,9 +89,13 @@ const DateTimeRangePickerTabs = exports.DateTimeRangePickerTabs = function DateT
90
89
  } = (0, _internals.usePickerPrivateContext)();
91
90
  const {
92
91
  view,
93
- onViewChange
92
+ setView
94
93
  } = (0, _hooks.usePickerContext)();
95
94
  const classes = useUtilityClasses(classesProp);
95
+ const {
96
+ rangePosition,
97
+ onRangePositionChange
98
+ } = (0, _hooks2.usePickerRangePositionContext)();
96
99
  const value = React.useMemo(() => view == null ? null : viewToTab(view, rangePosition), [view, rangePosition]);
97
100
  const isPreviousHidden = value === 'start-date';
98
101
  const isNextHidden = value === 'end-time';
@@ -119,12 +122,12 @@ const DateTimeRangePickerTabs = exports.DateTimeRangePickerTabs = function DateT
119
122
  });
120
123
  const changeToPreviousTab = (0, _useEventCallback.default)(() => {
121
124
  const previousTab = value == null ? tabOptions[0] : tabOptions[tabOptions.indexOf(value) - 1];
122
- onViewChange(tabToView(previousTab));
125
+ setView(tabToView(previousTab));
123
126
  handleRangePositionChange(previousTab);
124
127
  });
125
128
  const changeToNextTab = (0, _useEventCallback.default)(() => {
126
129
  const nextTab = value == null ? tabOptions[0] : tabOptions[tabOptions.indexOf(value) + 1];
127
- onViewChange(tabToView(nextTab));
130
+ setView(tabToView(nextTab));
128
131
  handleRangePositionChange(nextTab);
129
132
  });
130
133
  if (hidden) {
@@ -184,8 +187,6 @@ process.env.NODE_ENV !== "production" ? DateTimeRangePickerTabs.propTypes = {
184
187
  * @default `window.innerHeight < 667` for `DesktopDateTimeRangePicker` and `MobileDateTimeRangePicker`
185
188
  */
186
189
  hidden: _propTypes.default.bool,
187
- onRangePositionChange: _propTypes.default.func.isRequired,
188
- rangePosition: _propTypes.default.oneOf(['end', 'start']).isRequired,
189
190
  /**
190
191
  * The system prop that allows defining system overrides as well as additional CSS styles.
191
192
  */
@@ -10,15 +10,14 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
10
10
  var _internals = require("@mui/x-date-pickers/internals");
11
11
  var _dateUtils = require("../internals/utils/date-utils");
12
12
  var _dateRangeManager = require("../internals/utils/date-range-manager");
13
- const _excluded = ["rangePosition", "onRangePositionChange", "viewRenderer", "value", "onChange", "defaultValue", "onViewChange", "views", "className"];
13
+ var _hooks = require("../hooks");
14
+ const _excluded = ["viewRenderer", "value", "onChange", "defaultValue", "onViewChange", "views", "className"];
14
15
  /**
15
16
  * @ignore - internal component.
16
17
  */
17
- function DateTimeRangePickerTimeWrapper(props, ref) {
18
+ function DateTimeRangePickerTimeWrapper(props) {
18
19
  const utils = (0, _internals.useUtils)();
19
20
  const {
20
- rangePosition,
21
- onRangePositionChange,
22
21
  viewRenderer,
23
22
  value,
24
23
  onChange,
@@ -27,6 +26,10 @@ function DateTimeRangePickerTimeWrapper(props, ref) {
27
26
  views
28
27
  } = props,
29
28
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
29
+ const {
30
+ rangePosition,
31
+ onRangePositionChange
32
+ } = (0, _hooks.usePickerRangePositionContext)();
30
33
  if (!viewRenderer) {
31
34
  return null;
32
35
  }
@@ -54,7 +57,6 @@ function DateTimeRangePickerTimeWrapper(props, ref) {
54
57
  onChange(newRange, isFullRangeSelected ? 'finish' : 'partial', selectedView);
55
58
  };
56
59
  return viewRenderer((0, _extends2.default)({}, other, {
57
- ref,
58
60
  views,
59
61
  onViewChange,
60
62
  value: currentValue,
@@ -19,8 +19,9 @@ var _hooks = require("@mui/x-date-pickers/hooks");
19
19
  var _DateTimePicker = require("@mui/x-date-pickers/DateTimePicker");
20
20
  var _dateTimeRangePickerToolbarClasses = require("./dateTimeRangePickerToolbarClasses");
21
21
  var _dateRangeManager = require("../internals/utils/date-range-manager");
22
+ var _hooks2 = require("../hooks");
22
23
  var _jsxRuntime = require("react/jsx-runtime");
23
- const _excluded = ["value", "rangePosition", "onRangePositionChange", "className", "classes", "onChange", "classes", "isLandscape", "ampm", "hidden", "toolbarFormat", "toolbarPlaceholder", "titleId", "sx"];
24
+ const _excluded = ["className", "classes", "classes", "ampm", "hidden", "toolbarFormat", "toolbarPlaceholder", "titleId", "sx"];
24
25
  const useUtilityClasses = classes => {
25
26
  const slots = {
26
27
  root: ['root'],
@@ -57,13 +58,8 @@ const DateTimeRangePickerToolbar = exports.DateTimeRangePickerToolbar = /*#__PUR
57
58
  });
58
59
  const utils = (0, _internals.useUtils)();
59
60
  const {
60
- value: [start, end],
61
- rangePosition,
62
- onRangePositionChange,
63
61
  className,
64
62
  classes: classesProp,
65
- onChange,
66
- isLandscape,
67
63
  ampm,
68
64
  hidden,
69
65
  toolbarFormat,
@@ -73,17 +69,22 @@ const DateTimeRangePickerToolbar = exports.DateTimeRangePickerToolbar = /*#__PUR
73
69
  } = props,
74
70
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
75
71
  const {
72
+ value,
73
+ setValue,
76
74
  disabled,
77
75
  readOnly,
78
76
  view,
79
- onViewChange,
77
+ setView,
80
78
  views
81
79
  } = (0, _hooks.usePickerContext)();
82
80
  const translations = (0, _hooks.usePickerTranslations)();
83
81
  const ownerState = (0, _internals.useToolbarOwnerState)();
82
+ const {
83
+ rangePosition,
84
+ onRangePositionChange
85
+ } = (0, _hooks2.usePickerRangePositionContext)();
84
86
  const classes = useUtilityClasses(classesProp);
85
87
  const commonToolbarProps = {
86
- isLandscape,
87
88
  views,
88
89
  ampm,
89
90
  disabled,
@@ -92,20 +93,22 @@ const DateTimeRangePickerToolbar = exports.DateTimeRangePickerToolbar = /*#__PUR
92
93
  toolbarFormat,
93
94
  toolbarPlaceholder
94
95
  };
95
- const handleOnChange = React.useCallback(newDate => {
96
+ const wrappedSetValue = React.useCallback(newDate => {
96
97
  const {
97
98
  nextSelection,
98
99
  newRange
99
100
  } = (0, _dateRangeManager.calculateRangeChange)({
100
101
  newDate,
101
102
  utils,
102
- range: props.value,
103
+ range: value,
103
104
  rangePosition,
104
105
  allowRangeFlip: true
105
106
  });
106
107
  onRangePositionChange(nextSelection);
107
- onChange(newRange);
108
- }, [onChange, onRangePositionChange, props.value, rangePosition, utils]);
108
+ setValue(newRange, {
109
+ changeImportance: 'set'
110
+ });
111
+ }, [setValue, onRangePositionChange, value, rangePosition, utils]);
109
112
  const startOverrides = React.useMemo(() => {
110
113
  const handleStartRangeViewChange = newView => {
111
114
  if (newView === 'year' || newView === 'month') {
@@ -114,14 +117,16 @@ const DateTimeRangePickerToolbar = exports.DateTimeRangePickerToolbar = /*#__PUR
114
117
  if (rangePosition !== 'start') {
115
118
  onRangePositionChange('start');
116
119
  }
117
- onViewChange(newView);
120
+ setView(newView);
118
121
  };
119
122
  return {
123
+ value: value[0],
124
+ setValue: wrappedSetValue,
120
125
  forceDesktopVariant: true,
121
- onViewChange: handleStartRangeViewChange,
126
+ setView: handleStartRangeViewChange,
122
127
  view: rangePosition === 'start' ? view : null
123
128
  };
124
- }, [rangePosition, view, onRangePositionChange, onViewChange]);
129
+ }, [value, wrappedSetValue, rangePosition, view, onRangePositionChange, setView]);
125
130
  const endOverrides = React.useMemo(() => {
126
131
  const handleEndRangeViewChange = newView => {
127
132
  if (newView === 'year' || newView === 'month') {
@@ -130,14 +135,16 @@ const DateTimeRangePickerToolbar = exports.DateTimeRangePickerToolbar = /*#__PUR
130
135
  if (rangePosition !== 'end') {
131
136
  onRangePositionChange('end');
132
137
  }
133
- onViewChange(newView);
138
+ setView(newView);
134
139
  };
135
140
  return {
141
+ value: value[1],
142
+ setValue: wrappedSetValue,
136
143
  forceDesktopVariant: true,
137
- onViewChange: handleEndRangeViewChange,
144
+ setView: handleEndRangeViewChange,
138
145
  view: rangePosition === 'end' ? view : null
139
146
  };
140
- }, [rangePosition, view, onRangePositionChange, onViewChange]);
147
+ }, [value, wrappedSetValue, rangePosition, view, onRangePositionChange, setView]);
141
148
  if (hidden) {
142
149
  return null;
143
150
  }
@@ -150,21 +157,17 @@ const DateTimeRangePickerToolbar = exports.DateTimeRangePickerToolbar = /*#__PUR
150
157
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.DateTimePickerToolbarOverrideContext.Provider, {
151
158
  value: startOverrides,
152
159
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DateTimeRangePickerToolbarStart, (0, _extends2.default)({
153
- value: start,
154
160
  toolbarTitle: translations.start,
155
161
  ownerState: ownerState,
156
162
  className: classes.startToolbar,
157
- onChange: handleOnChange,
158
163
  titleId: titleId ? `${titleId}-start-toolbar` : undefined
159
164
  }, commonToolbarProps))
160
165
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.DateTimePickerToolbarOverrideContext.Provider, {
161
166
  value: endOverrides,
162
167
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DateTimeRangePickerToolbarEnd, (0, _extends2.default)({
163
- value: end,
164
168
  toolbarTitle: translations.end,
165
169
  ownerState: ownerState,
166
170
  className: classes.endToolbar,
167
- onChange: handleOnChange,
168
171
  titleId: titleId ? `${titleId}-end-toolbar` : undefined
169
172
  }, commonToolbarProps))
170
173
  })]
@@ -186,10 +189,6 @@ process.env.NODE_ENV !== "production" ? DateTimeRangePickerToolbar.propTypes = {
186
189
  * @default `true` for Desktop, `false` for Mobile.
187
190
  */
188
191
  hidden: _propTypes.default.bool,
189
- isLandscape: _propTypes.default.bool.isRequired,
190
- onChange: _propTypes.default.func.isRequired,
191
- onRangePositionChange: _propTypes.default.func.isRequired,
192
- rangePosition: _propTypes.default.oneOf(['end', 'start']).isRequired,
193
192
  /**
194
193
  * The system prop that allows defining system overrides as well as additional CSS styles.
195
194
  */
@@ -203,6 +202,5 @@ process.env.NODE_ENV !== "production" ? DateTimeRangePickerToolbar.propTypes = {
203
202
  * Toolbar value placeholder—it is displayed when the value is empty.
204
203
  * @default "––"
205
204
  */
206
- toolbarPlaceholder: _propTypes.default.node,
207
- value: _propTypes.default.arrayOf(_propTypes.default.object).isRequired
205
+ toolbarPlaceholder: _propTypes.default.node
208
206
  } : void 0;
@@ -20,6 +20,8 @@ var _dateRangeViewRenderers = require("../dateRangeViewRenderers");
20
20
  var _MultiInputDateRangeField = require("../MultiInputDateRangeField");
21
21
  var _useDesktopRangePicker = require("../internals/hooks/useDesktopRangePicker");
22
22
  var _validation2 = require("../validation");
23
+ const emptyActions = [];
24
+
23
25
  /**
24
26
  * Demos:
25
27
  *
@@ -39,6 +41,7 @@ const DesktopDateRangePicker = exports.DesktopDateRangePicker = /*#__PURE__*/Rea
39
41
  day: _dateRangeViewRenderers.renderDateRangeViewCalendar
40
42
  }, defaultizedProps.viewRenderers);
41
43
  const props = (0, _extends2.default)({}, defaultizedProps, {
44
+ closeOnSelect: defaultizedProps.closeOnSelect ?? true,
42
45
  viewRenderers,
43
46
  format: utils.formats.keyboardDate,
44
47
  calendars: defaultizedProps.calendars ?? 2,
@@ -53,7 +56,10 @@ const DesktopDateRangePicker = exports.DesktopDateRangePicker = /*#__PURE__*/Rea
53
56
  }),
54
57
  toolbar: (0, _extends2.default)({
55
58
  hidden: true
56
- }, defaultizedProps.slotProps?.toolbar)
59
+ }, defaultizedProps.slotProps?.toolbar),
60
+ actionBar: ownerState => (0, _extends2.default)({
61
+ actions: emptyActions
62
+ }, (0, _resolveComponentProps.default)(defaultizedProps.slotProps?.actionBar, ownerState))
57
63
  })
58
64
  });
59
65
  const {
@@ -85,8 +91,8 @@ DesktopDateRangePicker.propTypes = {
85
91
  calendars: _propTypes.default.oneOf([1, 2, 3]),
86
92
  className: _propTypes.default.string,
87
93
  /**
88
- * If `true`, the popover or modal will close after submitting the full date.
89
- * @default `true` for desktop, `false` for mobile (based on the chosen wrapper and `desktopModeMediaQuery` prop).
94
+ * If `true`, the Picker will close after submitting the full date.
95
+ * @default true
90
96
  */
91
97
  closeOnSelect: _propTypes.default.bool,
92
98
  /**
@@ -28,16 +28,23 @@ var _shared = require("../DateTimeRangePicker/shared");
28
28
  var _MultiInputDateTimeRangeField = require("../MultiInputDateTimeRangeField");
29
29
  var _DateTimeRangePickerTimeWrapper = require("../DateTimeRangePicker/DateTimeRangePickerTimeWrapper");
30
30
  var _dimensions = require("../internals/constants/dimensions");
31
+ var _hooks = require("../hooks");
31
32
  var _jsxRuntime = require("react/jsx-runtime");
32
- const _excluded = ["openTo", "rangePosition"];
33
- const rendererInterceptor = function rendererInterceptor(inViewRenderers, popperView, rendererProps) {
33
+ const _excluded = ["openTo"];
34
+ const rendererInterceptor = function RendererInterceptor(props) {
34
35
  const {
35
- openTo,
36
- rangePosition
36
+ viewRenderers,
37
+ popperView,
38
+ rendererProps
39
+ } = props;
40
+ const {
41
+ openTo
37
42
  } = rendererProps,
38
43
  otherProps = (0, _objectWithoutPropertiesLoose2.default)(rendererProps, _excluded);
44
+ const {
45
+ rangePosition
46
+ } = (0, _hooks.usePickerRangePositionContext)();
39
47
  const finalProps = (0, _extends2.default)({}, otherProps, {
40
- rangePosition,
41
48
  focusedView: null,
42
49
  sx: [{
43
50
  [`&.${_MultiSectionDigitalClock.multiSectionDigitalClockClasses.root}`]: {
@@ -50,7 +57,7 @@ const rendererInterceptor = function rendererInterceptor(inViewRenderers, popper
50
57
  });
51
58
  const isTimeViewActive = (0, _internals.isInternalTimeView)(popperView);
52
59
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, {
53
- children: [inViewRenderers.day?.((0, _extends2.default)({}, rendererProps, {
60
+ children: [viewRenderers.day?.((0, _extends2.default)({}, rendererProps, {
54
61
  availableRangePositions: [rangePosition],
55
62
  view: !isTimeViewActive ? popperView : 'day',
56
63
  views: rendererProps.views.filter(_internals.isDatePickerView),
@@ -66,7 +73,7 @@ const rendererInterceptor = function rendererInterceptor(inViewRenderers, popper
66
73
  view: isTimeViewActive ? popperView : 'hours',
67
74
  views: finalProps.views.filter(_internals.isInternalTimeView),
68
75
  openTo: (0, _internals.isInternalTimeView)(openTo) ? openTo : 'hours',
69
- viewRenderer: inViewRenderers[isTimeViewActive ? popperView : 'hours'],
76
+ viewRenderer: viewRenderers[isTimeViewActive ? popperView : 'hours'],
70
77
  sx: [{
71
78
  gridColumn: 3
72
79
  }, ...finalProps.sx]
@@ -99,7 +106,6 @@ const DesktopDateTimeRangePicker = exports.DesktopDateTimeRangePicker = /*#__PUR
99
106
  // Need to avoid adding the `meridiem` view when unexpected renderer is specified
100
107
  const shouldHoursRendererContainMeridiemView = viewRenderers.hours?.name === _timeViewRenderers.renderMultiSectionDigitalClockTimeView.name;
101
108
  const views = !shouldHoursRendererContainMeridiemView ? defaultizedProps.views.filter(view => view !== 'meridiem') : defaultizedProps.views;
102
- const actionBarActions = defaultizedProps.shouldRenderTimeInASingleColumn ? [] : ['accept'];
103
109
  const props = (0, _extends2.default)({}, defaultizedProps, {
104
110
  views,
105
111
  viewRenderers,
@@ -120,10 +126,7 @@ const DesktopDateTimeRangePicker = exports.DesktopDateTimeRangePicker = /*#__PUR
120
126
  }, defaultizedProps.slotProps?.tabs),
121
127
  toolbar: (0, _extends2.default)({
122
128
  hidden: true
123
- }, defaultizedProps.slotProps?.toolbar),
124
- actionBar: ownerState => (0, _extends2.default)({
125
- actions: actionBarActions
126
- }, (0, _resolveComponentProps.default)(defaultizedProps.slotProps?.actionBar, ownerState))
129
+ }, defaultizedProps.slotProps?.toolbar)
127
130
  })
128
131
  });
129
132
  const {
@@ -161,8 +164,8 @@ DesktopDateTimeRangePicker.propTypes = {
161
164
  calendars: _propTypes.default.oneOf([1, 2, 3]),
162
165
  className: _propTypes.default.string,
163
166
  /**
164
- * If `true`, the popover or modal will close after submitting the full date.
165
- * @default `true` for desktop, `false` for mobile (based on the chosen wrapper and `desktopModeMediaQuery` prop).
167
+ * If `true`, the Picker will close after submitting the full date.
168
+ * @default false
166
169
  */
167
170
  closeOnSelect: _propTypes.default.bool,
168
171
  /**
@@ -81,8 +81,8 @@ MobileDateRangePicker.propTypes = {
81
81
  autoFocus: _propTypes.default.bool,
82
82
  className: _propTypes.default.string,
83
83
  /**
84
- * If `true`, the popover or modal will close after submitting the full date.
85
- * @default `true` for desktop, `false` for mobile (based on the chosen wrapper and `desktopModeMediaQuery` prop).
84
+ * If `true`, the Picker will close after submitting the full date.
85
+ * @default false
86
86
  */
87
87
  closeOnSelect: _propTypes.default.bool,
88
88
  /**
@@ -26,17 +26,24 @@ var _shared = require("../DateTimeRangePicker/shared");
26
26
  var _MultiInputDateTimeRangeField = require("../MultiInputDateTimeRangeField");
27
27
  var _DateTimeRangePickerTimeWrapper = require("../DateTimeRangePicker/DateTimeRangePickerTimeWrapper");
28
28
  var _dimensions = require("../internals/constants/dimensions");
29
+ var _hooks = require("../hooks");
29
30
  var _jsxRuntime = require("react/jsx-runtime");
30
- const _excluded = ["view", "openTo", "rangePosition"];
31
- const rendererInterceptor = function rendererInterceptor(inViewRenderers, popperView, rendererProps) {
31
+ const _excluded = ["view", "openTo"];
32
+ const rendererInterceptor = function RendererInterceptor(props) {
33
+ const {
34
+ viewRenderers,
35
+ popperView,
36
+ rendererProps
37
+ } = props;
38
+ const {
39
+ rangePosition
40
+ } = (0, _hooks.usePickerRangePositionContext)();
32
41
  const {
33
42
  view,
34
- openTo,
35
- rangePosition
43
+ openTo
36
44
  } = rendererProps,
37
45
  otherRendererProps = (0, _objectWithoutPropertiesLoose2.default)(rendererProps, _excluded);
38
46
  const finalProps = (0, _extends2.default)({}, otherRendererProps, {
39
- rangePosition,
40
47
  focusedView: null,
41
48
  sx: [{
42
49
  width: _internals.DIALOG_WIDTH,
@@ -60,7 +67,7 @@ const rendererInterceptor = function rendererInterceptor(inViewRenderers, popper
60
67
  }]
61
68
  });
62
69
  const isTimeView = (0, _internals.isInternalTimeView)(popperView);
63
- const viewRenderer = inViewRenderers[popperView];
70
+ const viewRenderer = viewRenderers[popperView];
64
71
  if (!viewRenderer) {
65
72
  return null;
66
73
  }
@@ -155,8 +162,8 @@ MobileDateTimeRangePicker.propTypes = {
155
162
  autoFocus: _propTypes.default.bool,
156
163
  className: _propTypes.default.string,
157
164
  /**
158
- * If `true`, the popover or modal will close after submitting the full date.
159
- * @default `true` for desktop, `false` for mobile (based on the chosen wrapper and `desktopModeMediaQuery` prop).
165
+ * If `true`, the Picker will close after submitting the full date.
166
+ * @default false
160
167
  */
161
168
  closeOnSelect: _propTypes.default.bool,
162
169
  /**
@@ -1,32 +1,30 @@
1
1
  "use strict";
2
2
  'use client';
3
3
 
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.useSingleInputDateRangeField = void 0;
9
- var React = _interopRequireWildcard(require("react"));
10
8
  var _internals = require("@mui/x-date-pickers/internals");
11
9
  var _hooks = require("@mui/x-date-pickers/hooks");
12
- var _valueManagers = require("../internals/utils/valueManagers");
13
- var _validation = require("../validation");
14
- const useSingleInputDateRangeField = inProps => {
15
- const props = (0, _internals.useDefaultizedDateField)(inProps);
10
+ var _managers = require("../managers");
11
+ const useSingleInputDateRangeField = props => {
12
+ const manager = (0, _managers.useDateRangeManager)(props);
16
13
  const {
17
14
  forwardedProps,
18
15
  internalProps
19
16
  } = (0, _hooks.useSplitFieldProps)(props, 'date');
20
- const fieldValueManager = React.useMemo(() => (0, _valueManagers.getRangeFieldValueManager)({
21
- dateSeparator: internalProps.dateSeparator
22
- }), [internalProps.dateSeparator]);
17
+ const internalPropsWithDefaults = (0, _internals.useFieldInternalPropsWithDefaults)({
18
+ manager,
19
+ internalProps
20
+ });
23
21
  return (0, _internals.useField)({
24
22
  forwardedProps,
25
- internalProps,
26
- valueManager: _valueManagers.rangeValueManager,
27
- fieldValueManager,
28
- validator: _validation.validateDateRange,
29
- valueType: 'date'
23
+ internalProps: internalPropsWithDefaults,
24
+ valueManager: manager.internal_valueManager,
25
+ fieldValueManager: manager.internal_fieldValueManager,
26
+ validator: manager.validator,
27
+ valueType: manager.valueType
30
28
  });
31
29
  };
32
30
  exports.useSingleInputDateRangeField = useSingleInputDateRangeField;
@@ -1,32 +1,30 @@
1
1
  "use strict";
2
2
  'use client';
3
3
 
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.useSingleInputDateTimeRangeField = void 0;
9
- var React = _interopRequireWildcard(require("react"));
10
8
  var _internals = require("@mui/x-date-pickers/internals");
11
9
  var _hooks = require("@mui/x-date-pickers/hooks");
12
- var _valueManagers = require("../internals/utils/valueManagers");
13
- var _validation = require("../validation");
14
- const useSingleInputDateTimeRangeField = inProps => {
15
- const props = (0, _internals.useDefaultizedDateTimeField)(inProps);
10
+ var _managers = require("../managers");
11
+ const useSingleInputDateTimeRangeField = props => {
12
+ const manager = (0, _managers.useDateTimeRangeManager)(props);
16
13
  const {
17
14
  forwardedProps,
18
15
  internalProps
19
16
  } = (0, _hooks.useSplitFieldProps)(props, 'date-time');
20
- const fieldValueManager = React.useMemo(() => (0, _valueManagers.getRangeFieldValueManager)({
21
- dateSeparator: internalProps.dateSeparator
22
- }), [internalProps.dateSeparator]);
17
+ const internalPropsWithDefaults = (0, _internals.useFieldInternalPropsWithDefaults)({
18
+ manager,
19
+ internalProps
20
+ });
23
21
  return (0, _internals.useField)({
24
22
  forwardedProps,
25
- internalProps,
26
- valueManager: _valueManagers.rangeValueManager,
27
- fieldValueManager,
28
- validator: _validation.validateDateTimeRange,
29
- valueType: 'date-time'
23
+ internalProps: internalPropsWithDefaults,
24
+ valueManager: manager.internal_valueManager,
25
+ fieldValueManager: manager.internal_fieldValueManager,
26
+ validator: manager.validator,
27
+ valueType: manager.valueType
30
28
  });
31
29
  };
32
30
  exports.useSingleInputDateTimeRangeField = useSingleInputDateTimeRangeField;