@mui/x-date-pickers-pro 8.0.0-alpha.5 → 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 (148) 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 +206 -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 -31
  13. package/DateRangePicker/shared.d.ts +1 -1
  14. package/DateTimeRangePicker/DateTimeRangePicker.js +2 -2
  15. package/DateTimeRangePicker/DateTimeRangePickerTabs.d.ts +4 -5
  16. package/DateTimeRangePicker/DateTimeRangePickerTabs.js +25 -24
  17. package/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.d.ts +8 -10
  18. package/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +7 -5
  19. package/DateTimeRangePicker/DateTimeRangePickerToolbar.d.ts +2 -4
  20. package/DateTimeRangePicker/DateTimeRangePickerToolbar.js +66 -69
  21. package/DateTimeRangePicker/shared.d.ts +2 -2
  22. package/DesktopDateRangePicker/DesktopDateRangePicker.js +9 -3
  23. package/DesktopDateRangePicker/DesktopDateRangePicker.types.d.ts +7 -2
  24. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +17 -14
  25. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.types.d.ts +2 -3
  26. package/MobileDateRangePicker/MobileDateRangePicker.js +2 -2
  27. package/MobileDateRangePicker/MobileDateRangePicker.types.d.ts +2 -2
  28. package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +15 -8
  29. package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.types.d.ts +2 -3
  30. package/SingleInputDateRangeField/useSingleInputDateRangeField.d.ts +1 -1
  31. package/SingleInputDateRangeField/useSingleInputDateRangeField.js +13 -14
  32. package/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.d.ts +1 -1
  33. package/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.js +13 -14
  34. package/SingleInputTimeRangeField/useSingleInputTimeRangeField.d.ts +1 -1
  35. package/SingleInputTimeRangeField/useSingleInputTimeRangeField.js +13 -14
  36. package/StaticDateRangePicker/StaticDateRangePicker.types.d.ts +2 -2
  37. package/dateRangeViewRenderers/dateRangeViewRenderers.d.ts +2 -2
  38. package/dateRangeViewRenderers/dateRangeViewRenderers.js +0 -6
  39. package/hooks/index.d.ts +1 -0
  40. package/hooks/index.js +1 -0
  41. package/hooks/package.json +6 -0
  42. package/hooks/usePickerRangePositionContext.d.ts +7 -0
  43. package/hooks/usePickerRangePositionContext.js +15 -0
  44. package/index.d.ts +2 -0
  45. package/index.js +4 -2
  46. package/internals/hooks/models/useRangePicker.d.ts +4 -4
  47. package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +35 -53
  48. package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.types.d.ts +7 -9
  49. package/internals/hooks/useEnrichedRangePickerFieldProps.d.ts +6 -6
  50. package/internals/hooks/useEnrichedRangePickerFieldProps.js +11 -8
  51. package/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +24 -40
  52. package/internals/hooks/useMobileRangePicker/useMobileRangePicker.types.d.ts +7 -9
  53. package/internals/hooks/useMultiInputFieldSelectedSections.d.ts +10 -12
  54. package/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.d.ts +1 -1
  55. package/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +11 -6
  56. package/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.d.ts +2 -2
  57. package/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +12 -7
  58. package/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.d.ts +2 -2
  59. package/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +13 -8
  60. package/internals/hooks/useNullablePickerRangePositionContext.d.ts +5 -0
  61. package/internals/hooks/useNullablePickerRangePositionContext.js +10 -0
  62. package/internals/hooks/useRangePosition.d.ts +1 -1
  63. package/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +14 -24
  64. package/internals/hooks/useStaticRangePicker/useStaticRangePicker.types.d.ts +6 -6
  65. package/internals/utils/date-range-manager.js +2 -1
  66. package/internals/utils/releaseInfo.js +1 -1
  67. package/internals/utils/valueManagers.js +7 -7
  68. package/managers/index.d.ts +6 -0
  69. package/managers/index.js +3 -0
  70. package/managers/package.json +6 -0
  71. package/managers/useDateRangeManager.d.ts +15 -0
  72. package/managers/useDateRangeManager.js +31 -0
  73. package/managers/useDateTimeRangeManager.d.ts +15 -0
  74. package/managers/useDateTimeRangeManager.js +31 -0
  75. package/managers/useTimeRangeManager.d.ts +15 -0
  76. package/managers/useTimeRangeManager.js +29 -0
  77. package/models/range.d.ts +0 -1
  78. package/modern/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/index.js +1 -1
  79. package/modern/{AdapterDateFnsV3 → AdapterDateFnsV2}/index.js +1 -1
  80. package/modern/DateRangeCalendar/DateRangeCalendar.js +9 -7
  81. package/modern/DateRangePicker/DateRangePicker.js +1 -1
  82. package/modern/DateRangePicker/DateRangePickerToolbar.js +25 -31
  83. package/modern/DateTimeRangePicker/DateTimeRangePicker.js +2 -2
  84. package/modern/DateTimeRangePicker/DateTimeRangePickerTabs.js +25 -24
  85. package/modern/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +7 -5
  86. package/modern/DateTimeRangePicker/DateTimeRangePickerToolbar.js +66 -69
  87. package/modern/DesktopDateRangePicker/DesktopDateRangePicker.js +9 -3
  88. package/modern/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +17 -14
  89. package/modern/MobileDateRangePicker/MobileDateRangePicker.js +2 -2
  90. package/modern/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +15 -8
  91. package/modern/SingleInputDateRangeField/useSingleInputDateRangeField.js +13 -14
  92. package/modern/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.js +13 -14
  93. package/modern/SingleInputTimeRangeField/useSingleInputTimeRangeField.js +13 -14
  94. package/modern/dateRangeViewRenderers/dateRangeViewRenderers.js +0 -6
  95. package/modern/hooks/index.js +1 -0
  96. package/modern/hooks/usePickerRangePositionContext.js +15 -0
  97. package/modern/index.js +4 -2
  98. package/modern/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +35 -53
  99. package/modern/internals/hooks/useEnrichedRangePickerFieldProps.js +11 -8
  100. package/modern/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +24 -40
  101. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +11 -6
  102. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +12 -7
  103. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +13 -8
  104. package/modern/internals/hooks/useNullablePickerRangePositionContext.js +10 -0
  105. package/modern/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +14 -24
  106. package/modern/internals/utils/date-range-manager.js +2 -1
  107. package/modern/internals/utils/releaseInfo.js +1 -1
  108. package/modern/internals/utils/valueManagers.js +7 -7
  109. package/modern/managers/index.js +3 -0
  110. package/modern/managers/useDateRangeManager.js +31 -0
  111. package/modern/managers/useDateTimeRangeManager.js +31 -0
  112. package/modern/managers/useTimeRangeManager.js +29 -0
  113. package/node/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/index.js +1 -1
  114. package/node/{AdapterDateFnsV3 → AdapterDateFnsV2}/index.js +1 -1
  115. package/node/DateRangeCalendar/DateRangeCalendar.js +9 -7
  116. package/node/DateRangePicker/DateRangePicker.js +1 -1
  117. package/node/DateRangePicker/DateRangePickerToolbar.js +24 -30
  118. package/node/DateTimeRangePicker/DateTimeRangePicker.js +2 -2
  119. package/node/DateTimeRangePicker/DateTimeRangePickerTabs.js +24 -23
  120. package/node/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +7 -5
  121. package/node/DateTimeRangePicker/DateTimeRangePickerToolbar.js +65 -68
  122. package/node/DesktopDateRangePicker/DesktopDateRangePicker.js +9 -3
  123. package/node/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +17 -14
  124. package/node/MobileDateRangePicker/MobileDateRangePicker.js +2 -2
  125. package/node/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +15 -8
  126. package/node/SingleInputDateRangeField/useSingleInputDateRangeField.js +12 -14
  127. package/node/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.js +12 -14
  128. package/node/SingleInputTimeRangeField/useSingleInputTimeRangeField.js +12 -14
  129. package/node/dateRangeViewRenderers/dateRangeViewRenderers.js +0 -6
  130. package/node/hooks/index.js +12 -0
  131. package/node/hooks/usePickerRangePositionContext.js +22 -0
  132. package/node/index.js +23 -1
  133. package/node/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +35 -53
  134. package/node/internals/hooks/useEnrichedRangePickerFieldProps.js +11 -8
  135. package/node/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +24 -40
  136. package/node/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +10 -5
  137. package/node/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +11 -6
  138. package/node/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +12 -7
  139. package/node/internals/hooks/useNullablePickerRangePositionContext.js +16 -0
  140. package/node/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +14 -24
  141. package/node/internals/utils/date-range-manager.js +2 -1
  142. package/node/internals/utils/releaseInfo.js +1 -1
  143. package/node/internals/utils/valueManagers.js +7 -7
  144. package/node/managers/index.js +26 -0
  145. package/node/managers/useDateRangeManager.js +38 -0
  146. package/node/managers/useDateTimeRangeManager.js +38 -0
  147. package/node/managers/useTimeRangeManager.js +36 -0
  148. 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", "onViewChange", "view", "views"];
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,14 +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
- /**
114
- * Callback called when a toolbar is clicked
115
- * @template TView
116
- * @param {TView} view The view to open
117
- */
118
- onViewChange: _propTypes.default.func.isRequired,
119
- rangePosition: _propTypes.default.oneOf(['end', 'start']).isRequired,
120
123
  /**
121
124
  * The system prop that allows defining system overrides as well as additional CSS styles.
122
125
  */
@@ -130,14 +133,5 @@ process.env.NODE_ENV !== "production" ? DateRangePickerToolbar.propTypes = {
130
133
  * Toolbar value placeholder—it is displayed when the value is empty.
131
134
  * @default "––"
132
135
  */
133
- toolbarPlaceholder: _propTypes.default.node,
134
- value: _propTypes.default.arrayOf(_propTypes.default.object).isRequired,
135
- /**
136
- * Currently visible picker view.
137
- */
138
- view: _propTypes.default.oneOf(['day']).isRequired,
139
- /**
140
- * Available views.
141
- */
142
- views: _propTypes.default.arrayOf(_propTypes.default.oneOf(['day'])).isRequired
136
+ toolbarPlaceholder: _propTypes.default.node
143
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)) {
@@ -76,12 +77,8 @@ const DateTimeRangePickerTabs = exports.DateTimeRangePickerTabs = function DateT
76
77
  });
77
78
  const {
78
79
  dateIcon = /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.DateRangeIcon, {}),
79
- onViewChange,
80
80
  timeIcon = /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.TimeIcon, {}),
81
- view,
82
81
  hidden = typeof window === 'undefined' || window.innerHeight < 667,
83
- rangePosition,
84
- onRangePositionChange,
85
82
  className,
86
83
  classes: classesProp,
87
84
  sx
@@ -90,8 +87,16 @@ const DateTimeRangePickerTabs = exports.DateTimeRangePickerTabs = function DateT
90
87
  const {
91
88
  ownerState
92
89
  } = (0, _internals.usePickerPrivateContext)();
90
+ const {
91
+ view,
92
+ setView
93
+ } = (0, _hooks.usePickerContext)();
93
94
  const classes = useUtilityClasses(classesProp);
94
- const value = React.useMemo(() => viewToTab(view, rangePosition), [view, rangePosition]);
95
+ const {
96
+ rangePosition,
97
+ onRangePositionChange
98
+ } = (0, _hooks2.usePickerRangePositionContext)();
99
+ const value = React.useMemo(() => view == null ? null : viewToTab(view, rangePosition), [view, rangePosition]);
95
100
  const isPreviousHidden = value === 'start-date';
96
101
  const isNextHidden = value === 'end-time';
97
102
  const tabLabel = React.useMemo(() => {
@@ -116,18 +121,26 @@ const DateTimeRangePickerTabs = exports.DateTimeRangePickerTabs = function DateT
116
121
  }
117
122
  });
118
123
  const changeToPreviousTab = (0, _useEventCallback.default)(() => {
119
- const previousTab = tabOptions[tabOptions.indexOf(value) - 1];
120
- onViewChange(tabToView(previousTab));
124
+ const previousTab = value == null ? tabOptions[0] : tabOptions[tabOptions.indexOf(value) - 1];
125
+ setView(tabToView(previousTab));
121
126
  handleRangePositionChange(previousTab);
122
127
  });
123
128
  const changeToNextTab = (0, _useEventCallback.default)(() => {
124
- const nextTab = tabOptions[tabOptions.indexOf(value) + 1];
125
- onViewChange(tabToView(nextTab));
129
+ const nextTab = value == null ? tabOptions[0] : tabOptions[tabOptions.indexOf(value) + 1];
130
+ setView(tabToView(nextTab));
126
131
  handleRangePositionChange(nextTab);
127
132
  });
128
133
  if (hidden) {
129
134
  return null;
130
135
  }
136
+ let startIcon;
137
+ if (view == null) {
138
+ startIcon = null;
139
+ } else if ((0, _internals.isDatePickerView)(view)) {
140
+ startIcon = dateIcon;
141
+ } else {
142
+ startIcon = timeIcon;
143
+ }
131
144
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(DateTimeRangePickerTabsRoot, {
132
145
  ownerState: ownerState,
133
146
  className: (0, _clsx.default)(classes.root, className),
@@ -140,7 +153,7 @@ const DateTimeRangePickerTabs = exports.DateTimeRangePickerTabs = function DateT
140
153
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(DateTimeRangePickerTabFiller, {
141
154
  className: classes.filler
142
155
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(DateTimeRangePickerTab, {
143
- startIcon: (0, _internals.isDatePickerView)(view) ? dateIcon : timeIcon,
156
+ startIcon: startIcon,
144
157
  className: classes.tabButton,
145
158
  size: "large",
146
159
  children: tabLabel
@@ -174,14 +187,6 @@ process.env.NODE_ENV !== "production" ? DateTimeRangePickerTabs.propTypes = {
174
187
  * @default `window.innerHeight < 667` for `DesktopDateTimeRangePicker` and `MobileDateTimeRangePicker`
175
188
  */
176
189
  hidden: _propTypes.default.bool,
177
- onRangePositionChange: _propTypes.default.func.isRequired,
178
- /**
179
- * Callback called when a tab is clicked.
180
- * @template TView
181
- * @param {TView} view The view to open
182
- */
183
- onViewChange: _propTypes.default.func.isRequired,
184
- rangePosition: _propTypes.default.oneOf(['end', 'start']).isRequired,
185
190
  /**
186
191
  * The system prop that allows defining system overrides as well as additional CSS styles.
187
192
  */
@@ -190,9 +195,5 @@ process.env.NODE_ENV !== "production" ? DateTimeRangePickerTabs.propTypes = {
190
195
  * Time tab icon.
191
196
  * @default TimeIcon
192
197
  */
193
- timeIcon: _propTypes.default.element,
194
- /**
195
- * Currently visible picker view.
196
- */
197
- view: _propTypes.default.oneOf(['day', 'hours', 'meridiem', 'minutes', 'month', 'seconds', 'year']).isRequired
198
+ timeIcon: _propTypes.default.element
198
199
  } : void 0;
@@ -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", "onViewChange", "onChange", "classes", "view", "isLandscape", "views", "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,16 +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
- onViewChange,
66
- onChange,
67
- view,
68
- isLandscape,
69
- views,
70
63
  ampm,
71
64
  hidden,
72
65
  toolbarFormat,
@@ -76,14 +69,22 @@ const DateTimeRangePickerToolbar = exports.DateTimeRangePickerToolbar = /*#__PUR
76
69
  } = props,
77
70
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
78
71
  const {
72
+ value,
73
+ setValue,
79
74
  disabled,
80
- readOnly
75
+ readOnly,
76
+ view,
77
+ setView,
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,69 +93,84 @@ const DateTimeRangePickerToolbar = exports.DateTimeRangePickerToolbar = /*#__PUR
92
93
  toolbarFormat,
93
94
  toolbarPlaceholder
94
95
  };
95
- const handleStartRangeViewChange = React.useCallback(newView => {
96
- if (newView === 'year' || newView === 'month') {
97
- return;
98
- }
99
- if (rangePosition !== 'start') {
100
- onRangePositionChange('start');
101
- }
102
- onViewChange(newView);
103
- }, [onRangePositionChange, onViewChange, rangePosition]);
104
- const handleEndRangeViewChange = React.useCallback(newView => {
105
- if (newView === 'year' || newView === 'month') {
106
- return;
107
- }
108
- if (rangePosition !== 'end') {
109
- onRangePositionChange('end');
110
- }
111
- onViewChange(newView);
112
- }, [onRangePositionChange, onViewChange, rangePosition]);
113
- const handleOnChange = React.useCallback(newDate => {
96
+ const wrappedSetValue = React.useCallback(newDate => {
114
97
  const {
115
98
  nextSelection,
116
99
  newRange
117
100
  } = (0, _dateRangeManager.calculateRangeChange)({
118
101
  newDate,
119
102
  utils,
120
- range: props.value,
103
+ range: value,
121
104
  rangePosition,
122
105
  allowRangeFlip: true
123
106
  });
124
107
  onRangePositionChange(nextSelection);
125
- onChange(newRange);
126
- }, [onChange, onRangePositionChange, props.value, rangePosition, utils]);
108
+ setValue(newRange, {
109
+ changeImportance: 'set'
110
+ });
111
+ }, [setValue, onRangePositionChange, value, rangePosition, utils]);
112
+ const startOverrides = React.useMemo(() => {
113
+ const handleStartRangeViewChange = newView => {
114
+ if (newView === 'year' || newView === 'month') {
115
+ return;
116
+ }
117
+ if (rangePosition !== 'start') {
118
+ onRangePositionChange('start');
119
+ }
120
+ setView(newView);
121
+ };
122
+ return {
123
+ value: value[0],
124
+ setValue: wrappedSetValue,
125
+ forceDesktopVariant: true,
126
+ setView: handleStartRangeViewChange,
127
+ view: rangePosition === 'start' ? view : null
128
+ };
129
+ }, [value, wrappedSetValue, rangePosition, view, onRangePositionChange, setView]);
130
+ const endOverrides = React.useMemo(() => {
131
+ const handleEndRangeViewChange = newView => {
132
+ if (newView === 'year' || newView === 'month') {
133
+ return;
134
+ }
135
+ if (rangePosition !== 'end') {
136
+ onRangePositionChange('end');
137
+ }
138
+ setView(newView);
139
+ };
140
+ return {
141
+ value: value[1],
142
+ setValue: wrappedSetValue,
143
+ forceDesktopVariant: true,
144
+ setView: handleEndRangeViewChange,
145
+ view: rangePosition === 'end' ? view : null
146
+ };
147
+ }, [value, wrappedSetValue, rangePosition, view, onRangePositionChange, setView]);
127
148
  if (hidden) {
128
149
  return null;
129
150
  }
130
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(DateTimeRangePickerToolbarRoot, (0, _extends2.default)({
151
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(DateTimeRangePickerToolbarRoot, (0, _extends2.default)({
131
152
  className: (0, _clsx.default)(classes.root, className),
132
153
  ownerState: ownerState,
133
154
  ref: ref,
134
155
  sx: sx
135
156
  }, other, {
136
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_internals.DateTimePickerToolbarForceDesktopVariant.Provider, {
137
- value: true,
138
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(DateTimeRangePickerToolbarStart, (0, _extends2.default)({
139
- value: start,
140
- onViewChange: handleStartRangeViewChange,
157
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.DateTimePickerToolbarOverrideContext.Provider, {
158
+ value: startOverrides,
159
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DateTimeRangePickerToolbarStart, (0, _extends2.default)({
141
160
  toolbarTitle: translations.start,
142
161
  ownerState: ownerState,
143
- view: rangePosition === 'start' ? view : undefined,
144
162
  className: classes.startToolbar,
145
- onChange: handleOnChange,
146
163
  titleId: titleId ? `${titleId}-start-toolbar` : undefined
147
- }, commonToolbarProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(DateTimeRangePickerToolbarEnd, (0, _extends2.default)({
148
- value: end,
149
- onViewChange: handleEndRangeViewChange,
164
+ }, commonToolbarProps))
165
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.DateTimePickerToolbarOverrideContext.Provider, {
166
+ value: endOverrides,
167
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DateTimeRangePickerToolbarEnd, (0, _extends2.default)({
150
168
  toolbarTitle: translations.end,
151
169
  ownerState: ownerState,
152
- view: rangePosition === 'end' ? view : undefined,
153
170
  className: classes.endToolbar,
154
- onChange: handleOnChange,
155
171
  titleId: titleId ? `${titleId}-end-toolbar` : undefined
156
- }, commonToolbarProps))]
157
- })
172
+ }, commonToolbarProps))
173
+ })]
158
174
  }));
159
175
  });
160
176
  process.env.NODE_ENV !== "production" ? DateTimeRangePickerToolbar.propTypes = {
@@ -173,16 +189,6 @@ process.env.NODE_ENV !== "production" ? DateTimeRangePickerToolbar.propTypes = {
173
189
  * @default `true` for Desktop, `false` for Mobile.
174
190
  */
175
191
  hidden: _propTypes.default.bool,
176
- isLandscape: _propTypes.default.bool.isRequired,
177
- onChange: _propTypes.default.func.isRequired,
178
- onRangePositionChange: _propTypes.default.func.isRequired,
179
- /**
180
- * Callback called when a toolbar is clicked
181
- * @template TView
182
- * @param {TView} view The view to open
183
- */
184
- onViewChange: _propTypes.default.func.isRequired,
185
- rangePosition: _propTypes.default.oneOf(['end', 'start']).isRequired,
186
192
  /**
187
193
  * The system prop that allows defining system overrides as well as additional CSS styles.
188
194
  */
@@ -196,14 +202,5 @@ process.env.NODE_ENV !== "production" ? DateTimeRangePickerToolbar.propTypes = {
196
202
  * Toolbar value placeholder—it is displayed when the value is empty.
197
203
  * @default "––"
198
204
  */
199
- toolbarPlaceholder: _propTypes.default.node,
200
- value: _propTypes.default.arrayOf(_propTypes.default.object).isRequired,
201
- /**
202
- * Currently visible picker view.
203
- */
204
- view: _propTypes.default.oneOf(['day', 'hours', 'meridiem', 'minutes', 'seconds']).isRequired,
205
- /**
206
- * Available views.
207
- */
208
- views: _propTypes.default.arrayOf(_propTypes.default.oneOf(['day', 'hours', 'meridiem', 'minutes', 'seconds']).isRequired).isRequired
205
+ toolbarPlaceholder: _propTypes.default.node
209
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
  /**