@mui/x-date-pickers-pro 7.22.2 → 7.23.0

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 (28) hide show
  1. package/CHANGELOG.md +169 -0
  2. package/DateRangeCalendar/DateRangeCalendar.js +3 -1
  3. package/README.md +3 -3
  4. package/index.js +1 -1
  5. package/internals/hooks/useEnrichedRangePickerFieldProps.js +4 -4
  6. package/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +2 -0
  7. package/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +2 -0
  8. package/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +3 -1
  9. package/internals/utils/date-range-manager.d.ts +2 -1
  10. package/internals/utils/date-range-manager.js +11 -9
  11. package/internals/utils/releaseInfo.js +1 -1
  12. package/modern/DateRangeCalendar/DateRangeCalendar.js +3 -1
  13. package/modern/index.js +1 -1
  14. package/modern/internals/hooks/useEnrichedRangePickerFieldProps.js +4 -4
  15. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +2 -0
  16. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +2 -0
  17. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +3 -1
  18. package/modern/internals/utils/date-range-manager.js +11 -9
  19. package/modern/internals/utils/releaseInfo.js +1 -1
  20. package/node/DateRangeCalendar/DateRangeCalendar.js +3 -1
  21. package/node/index.js +1 -1
  22. package/node/internals/hooks/useEnrichedRangePickerFieldProps.js +4 -4
  23. package/node/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +2 -0
  24. package/node/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +2 -0
  25. package/node/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +3 -1
  26. package/node/internals/utils/date-range-manager.js +11 -9
  27. package/node/internals/utils/releaseInfo.js +1 -1
  28. package/package.json +6 -6
package/CHANGELOG.md CHANGED
@@ -3,6 +3,175 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 7.23.0
7
+
8
+ _Nov 29, 2024_
9
+
10
+ We'd like to offer a big thanks to the 10 contributors who made this release possible. Here are some highlights ✨:
11
+
12
+ - ✨ Support for a new display mode on the Data Grid with the [List View feature](https://mui.com/x/react-data-grid/list-view/), offering an extremely flexible way to render datasets and enabling developers to adapt how data is displayed across different screen sizes.
13
+
14
+ https://github.com/user-attachments/assets/61286adc-03fc-4323-9739-8ca726fcc16c
15
+
16
+ - ⚛️ React 19 support
17
+ - 📚 Documentation improvements
18
+ - 🌍 Improve Spanish, Portuguese, Chinese locales on the Data Grid component.
19
+ - 🌍 Improve Dutch locale on the Date and Time Picker components.
20
+ - 🐞 Bugfixes
21
+
22
+ Special thanks go out to the community contributors who have helped make this release possible:
23
+ @dloeda, @headironc, @mathzdev, @nphmuller, @lhilgert9, @lauri865.
24
+ Following are all team members who have contributed to this release:
25
+ @oliviertassinari, @arminmeh, @KenanYusuf, @flaviendelangle, @MBilalShafi.
26
+
27
+ <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
28
+
29
+ ### Data Grid
30
+
31
+ #### `@mui/x-data-grid@v7.23.0`
32
+
33
+ - [DataGrid] React 19 support (#15557) @arminmeh
34
+ - [DataGrid] Change test dom check from `/jsdom/` to `/jsdom|HappyDOM/`. (#15642) @jedesroches
35
+ - [DataGrid] Fix last separator not being hidden when grid is scrollable (#15551) @KenanYusuf
36
+ - [DataGrid] Fix order of spread props on toolbar items (#15556) @KenanYusuf
37
+ - [DataGrid] Fix row-spanning in combination with column-pinning (#15460) @lhilgert9
38
+ - [DataGrid] Improve resize performance (#15592) @lauri865
39
+ - [DataGrid] Support column virtualization with dynamic row height (#15567) @cherniavskii
40
+ - [DataGrid] Improve `GridCell` performance (#15621) @lauri865
41
+ - [l10n] Improve Chinese (zh-CN) locale (#15570) @headironc
42
+ - [l10n] Improve Portuguese (pt-PT) locale (#15561) @mathzdev
43
+
44
+ #### `@mui/x-data-grid-pro@v7.23.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
45
+
46
+ Same changes as in `@mui/x-data-grid@v7.23.0`, plus:
47
+
48
+ - [DataGridPro] Fix header filtering with `boolean` column type (#15640) @k-rajat19
49
+ - [DataGridPro] Fix pagination state not updating if the data source response has no rows (#15643) @zinoroman
50
+ - [DataGridPro] Fix selection propagation issue on initialization (#15593) @MBilalShafi
51
+
52
+ #### `@mui/x-data-grid-premium@v7.23.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
53
+
54
+ Same changes as in `@mui/x-data-grid-pro@v7.23.0`.
55
+
56
+ ### Date and Time Pickers
57
+
58
+ #### `@mui/x-date-pickers@v7.23.0`
59
+
60
+ - [pickers] React 19 support (#15557) @arminmeh
61
+ - [pickers] Fix DST issue with `America/Asuncion` timezone and `AdapterMoment` (#15653) @flaviendelangle
62
+ - [pickers] Use `props.referenceDate` timezone when `props.value` and `props.defaultValue` are not defined (#15544) @flaviendelangle
63
+ - [l10n] Improve Dutch (nl-NL) locale (#15564) @nphmuller
64
+
65
+ #### `@mui/x-date-pickers-pro@v7.23.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
66
+
67
+ Same changes as in `@mui/x-date-pickers@v7.23.0`.
68
+
69
+ ### Charts
70
+
71
+ #### `@mui/x-charts@v7.23.0`
72
+
73
+ - [charts] React 19 support (#15557) @arminmeh
74
+ - [charts] Prevent invalid `releasePointerCapture` (#15609) @alexfauquette
75
+
76
+ #### `@mui/x-charts-pro@v7.23.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
77
+
78
+ Same changes as in `@mui/x-charts@v7.23.0`.
79
+
80
+ ### Tree View
81
+
82
+ #### `@mui/x-tree-view@v7.23.0`
83
+
84
+ - [TreeView] React 19 support (#15557) @arminmeh
85
+
86
+ #### `@mui/x-tree-view-pro@7.23.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
87
+
88
+ Same changes as in `@mui/x-tree-view@7.23.0`.
89
+
90
+ ### Docs
91
+
92
+ - [docs] Add data caching to lazy loaded detail panel demo (#15555) @cherniavskii
93
+ - [docs] Remove selectors section from list view docs (#15639) @KenanYusuf
94
+ - [docs] Add documentation for the list view feature (#15344) @KenanYusuf
95
+
96
+ ### Core
97
+
98
+ - [core] Update @mui/monorepo (#15574) @oliviertassinari
99
+
100
+ ## 7.22.3
101
+
102
+ _Nov 21, 2024_
103
+
104
+ We'd like to offer a big thanks to the 10 contributors who made this release possible. Here are some highlights ✨:
105
+
106
+ - 📊 Charts Pro get stable. The [zoom](https://mui.com/x/react-charts/zoom-and-pan/) and [Heatmap](https://mui.com/x/react-charts/heatmap/) are now stable.
107
+ - 🌍 Improve Chinese, Spanish, Swedish, and Turkish locales on the Data Grid
108
+ - 🐞 Bugfixes
109
+
110
+ Special thanks go out to the community contributors who have helped make this release possible:
111
+ @CarlosLopezLg, @headironc, @viktormelin, @qerkules, @DungTiger, @hendrikpeilke, @k-rajat19.
112
+ Following are all team members who have contributed to this release:
113
+ @alexfauquette, @LukasTy, @MBilalShafi, @flaviendelangle.
114
+
115
+ <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
116
+
117
+ ### Data Grid
118
+
119
+ #### `@mui/x-data-grid@7.22.3`
120
+
121
+ - [DataGrid] Add prop to override search input props in `GridColumnsManagement` (#15476) @k-rajat19
122
+ - [DataGrid] Add test coverage for issues fixed in #15184 @MBilalShafi
123
+ - [DataGrid] Fix memoized selectors with arguments (#15336) @MBilalShafi
124
+ - [DataGrid] Fix right column group header border with virtualization (#15503) @hendrikpeilke
125
+ - [DataGrid] Pass reason to `onPaginationModelChange` (#15402) @DungTiger
126
+ - [DataGrid] Set default overlay height in flex parent layout (#15535) @cherniavskii
127
+ - [l10n] Improve Chinese (zh-CN) locale (#15365) @headironc
128
+ - [l10n] Improve Spanish (es-ES) locale (#15369) @CarlosLopezLg
129
+ - [l10n] Improve Swedish (sv-SE) locale (#15371) @viktormelin
130
+ - [l10n] Improve Turkish (tr-TR) locale (#15414) @qerkules
131
+
132
+ #### `@mui/x-data-grid-pro@7.22.3` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
133
+
134
+ Same changes as in `@mui/x-data-grid@7.22.3`.
135
+
136
+ #### `@mui/x-data-grid-premium@7.22.3` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
137
+
138
+ Same changes as in `@mui/x-data-grid-pro@7.22.3`.
139
+
140
+ ### Date and Time Pickers
141
+
142
+ #### `@mui/x-date-pickers@7.22.3`
143
+
144
+ - [pickers] Always use `props.value` when it changes (#15500) @flaviendelangle
145
+ - [pickers] Ensure internal value timezone is updated (#15491) @LukasTy
146
+ - [pickers] Fix `DateTimeRangePicker` error when using format without time (#15341) @fxnoob
147
+ - [pickers] Fix unused code in `PickersToolbar` component (#15525) @LukasTy
148
+
149
+ #### `@mui/x-date-pickers-pro@7.22.3` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
150
+
151
+ Same changes as in `@mui/x-date-pickers@7.22.3`, plus:
152
+
153
+ - [DateTimeRangePicker] Use time in `referenceDate` when selecting date (#15431) @LukasTy
154
+
155
+ ### Charts
156
+
157
+ #### `@mui/x-charts@7.22.3`
158
+
159
+ No changes since `@mui/x-charts@7.22.2`.
160
+
161
+ #### `@mui/x-charts-pro@7.22.3` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
162
+
163
+ - [charts-pro] Fix missing typeOverload (#15400) @alexfauquette
164
+
165
+ ### Docs
166
+
167
+ - [docs] Add `PickersPopper` component to customization playground (#15397) @LukasTy
168
+ - [docs] Add `next` version links (#15423) @LukasTy
169
+ - [docs] Use the `loading` state in the demos (#15538) @cherniavskii
170
+
171
+ - [code-infra] Tentative fix for Argos flaky screenshot tests (#15399) @JCQuintas
172
+ - [docs-infra] Transpile `.ts` demo files (#15421) @KenanYusuf
173
+ - [core] Clarify release version bump strategy (#15536) @cherniavskii
174
+
6
175
  ## 7.22.2
7
176
 
8
177
  _Nov 8, 2024_
@@ -172,6 +172,7 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
172
172
  name: 'DateRangeCalendar',
173
173
  timezone: timezoneProp,
174
174
  value: valueProp,
175
+ referenceDate,
175
176
  defaultValue,
176
177
  onChange,
177
178
  valueManager: rangeValueManager
@@ -213,7 +214,8 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
213
214
  range: value,
214
215
  rangePosition,
215
216
  allowRangeFlip,
216
- shouldMergeDateAndTime: true
217
+ shouldMergeDateAndTime: true,
218
+ referenceDate
217
219
  });
218
220
  const isNextSectionAvailable = availableRangePositions.includes(nextSelection);
219
221
  if (isNextSectionAvailable) {
package/README.md CHANGED
@@ -34,9 +34,9 @@ This component has the following peer dependencies that you will need to install
34
34
 
35
35
  ```json
36
36
  "peerDependencies": {
37
- "@mui/material": "^5.15.14",
38
- "react": "^17.0.0 || ^18.0.0",
39
- "react-dom": "^17.0.0 || ^18.0.0"
37
+ "@mui/material": "^5.15.14 || ^6.0.0",
38
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
39
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
40
40
  },
41
41
  ```
42
42
 
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers-pro v7.22.2
2
+ * @mui/x-date-pickers-pro v7.23.0
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -33,7 +33,7 @@ const useMultiInputFieldSlotProps = ({
33
33
  const handleEndFieldRef = useForkRef(fieldProps.unstableEndFieldRef, endFieldRef);
34
34
  const previousRangePosition = React.useRef(rangePosition);
35
35
  React.useEffect(() => {
36
- if (!open) {
36
+ if (!open || wrapperVariant === 'mobile') {
37
37
  return;
38
38
  }
39
39
  const currentFieldRef = rangePosition === 'start' ? startFieldRef : endFieldRef;
@@ -49,7 +49,7 @@ const useMultiInputFieldSlotProps = ({
49
49
  // use the current view or `0` when the range position has just been swapped
50
50
  previousRangePosition.current === rangePosition ? currentView : 0);
51
51
  previousRangePosition.current = rangePosition;
52
- }, [rangePosition, open, currentView, startFieldRef, endFieldRef]);
52
+ }, [rangePosition, open, currentView, startFieldRef, endFieldRef, wrapperVariant]);
53
53
  const openRangeStartSelection = event => {
54
54
  event.stopPropagation();
55
55
  onRangePositionChange('start');
@@ -166,7 +166,7 @@ const useSingleInputFieldSlotProps = ({
166
166
  }) => {
167
167
  const handleFieldRef = useForkRef(fieldProps.unstableFieldRef, startFieldRef, endFieldRef);
168
168
  React.useEffect(() => {
169
- if (!open || !startFieldRef.current) {
169
+ if (!open || !startFieldRef.current || wrapperVariant === 'mobile') {
170
170
  return;
171
171
  }
172
172
  if (startFieldRef.current.isFieldFocused()) {
@@ -179,7 +179,7 @@ const useSingleInputFieldSlotProps = ({
179
179
  const newSelectedSection = rangePosition === 'start' ? sections.indexOf(currentView) : sections.lastIndexOf(currentView);
180
180
  startFieldRef.current?.focusField(newSelectedSection);
181
181
  }
182
- }, [rangePosition, open, currentView, startFieldRef]);
182
+ }, [rangePosition, open, currentView, startFieldRef, wrapperVariant]);
183
183
  const updateRangePosition = () => {
184
184
  if (!startFieldRef.current?.isFieldFocused()) {
185
185
  return;
@@ -18,6 +18,7 @@ export const useMultiInputDateRangeField = ({
18
18
  const {
19
19
  value: valueProp,
20
20
  defaultValue,
21
+ referenceDate,
21
22
  format,
22
23
  formatDensity,
23
24
  shouldRespectLeadingZeros,
@@ -39,6 +40,7 @@ export const useMultiInputDateRangeField = ({
39
40
  timezone: timezoneProp,
40
41
  value: valueProp,
41
42
  defaultValue,
43
+ referenceDate,
42
44
  onChange,
43
45
  valueManager: rangeValueManager
44
46
  });
@@ -18,6 +18,7 @@ export const useMultiInputDateTimeRangeField = ({
18
18
  const {
19
19
  value: valueProp,
20
20
  defaultValue,
21
+ referenceDate,
21
22
  format,
22
23
  formatDensity,
23
24
  shouldRespectLeadingZeros,
@@ -39,6 +40,7 @@ export const useMultiInputDateTimeRangeField = ({
39
40
  timezone: timezoneProp,
40
41
  value: valueProp,
41
42
  defaultValue,
43
+ referenceDate,
42
44
  onChange,
43
45
  valueManager: rangeValueManager
44
46
  });
@@ -18,6 +18,7 @@ export const useMultiInputTimeRangeField = ({
18
18
  const {
19
19
  value: valueProp,
20
20
  defaultValue,
21
+ referenceDate,
21
22
  format,
22
23
  formatDensity,
23
24
  shouldRespectLeadingZeros,
@@ -40,7 +41,8 @@ export const useMultiInputTimeRangeField = ({
40
41
  value: valueProp,
41
42
  defaultValue,
42
43
  onChange,
43
- valueManager: rangeValueManager
44
+ valueManager: rangeValueManager,
45
+ referenceDate
44
46
  });
45
47
  const {
46
48
  validationError,
@@ -12,11 +12,12 @@ interface CalculateRangeChangeOptions<TDate extends PickerValidDate> {
12
12
  */
13
13
  allowRangeFlip?: boolean;
14
14
  shouldMergeDateAndTime?: boolean;
15
+ referenceDate?: TDate | null;
15
16
  }
16
17
  interface CalculateRangeChangeResponse<TDate extends PickerValidDate> {
17
18
  nextSelection: RangePosition;
18
19
  newRange: DateRange<TDate>;
19
20
  }
20
- export declare function calculateRangeChange<TDate extends PickerValidDate>({ utils, range, newDate: selectedDate, rangePosition, allowRangeFlip, shouldMergeDateAndTime, }: CalculateRangeChangeOptions<TDate>): CalculateRangeChangeResponse<TDate>;
21
+ export declare function calculateRangeChange<TDate extends PickerValidDate>({ utils, range, newDate: selectedDate, rangePosition, allowRangeFlip, shouldMergeDateAndTime, referenceDate, }: CalculateRangeChangeOptions<TDate>): CalculateRangeChangeResponse<TDate>;
21
22
  export declare function calculateRangePreview<TDate extends PickerValidDate>(options: CalculateRangeChangeOptions<TDate>): DateRange<TDate>;
22
23
  export {};
@@ -5,7 +5,8 @@ export function calculateRangeChange({
5
5
  newDate: selectedDate,
6
6
  rangePosition,
7
7
  allowRangeFlip = false,
8
- shouldMergeDateAndTime = false
8
+ shouldMergeDateAndTime = false,
9
+ referenceDate
9
10
  }) {
10
11
  const [start, end] = range;
11
12
  if (shouldMergeDateAndTime && selectedDate) {
@@ -17,29 +18,30 @@ export function calculateRangeChange({
17
18
  selectedDate = mergeDateAndTime(utils, selectedDate, end);
18
19
  }
19
20
  }
21
+ const newSelectedDate = referenceDate && selectedDate && shouldMergeDateAndTime ? mergeDateAndTime(utils, selectedDate, referenceDate) : selectedDate;
20
22
  if (rangePosition === 'start') {
21
23
  const truthyResult = allowRangeFlip ? {
22
24
  nextSelection: 'start',
23
- newRange: [end, selectedDate]
25
+ newRange: [end, newSelectedDate]
24
26
  } : {
25
27
  nextSelection: 'end',
26
- newRange: [selectedDate, null]
28
+ newRange: [newSelectedDate, null]
27
29
  };
28
- return Boolean(end) && utils.isAfter(selectedDate, end) ? truthyResult : {
30
+ return Boolean(end) && utils.isAfter(newSelectedDate, end) ? truthyResult : {
29
31
  nextSelection: 'end',
30
- newRange: [selectedDate, end]
32
+ newRange: [newSelectedDate, end]
31
33
  };
32
34
  }
33
35
  const truthyResult = allowRangeFlip ? {
34
36
  nextSelection: 'end',
35
- newRange: [selectedDate, start]
37
+ newRange: [newSelectedDate, start]
36
38
  } : {
37
39
  nextSelection: 'end',
38
- newRange: [selectedDate, null]
40
+ newRange: [newSelectedDate, null]
39
41
  };
40
- return Boolean(start) && utils.isBeforeDay(selectedDate, start) ? truthyResult : {
42
+ return Boolean(start) && utils.isBeforeDay(newSelectedDate, start) ? truthyResult : {
41
43
  nextSelection: 'start',
42
- newRange: [start, selectedDate]
44
+ newRange: [start, newSelectedDate]
43
45
  };
44
46
  }
45
47
  export function calculateRangePreview(options) {
@@ -1,6 +1,6 @@
1
1
  import { ponyfillGlobal } from '@mui/utils';
2
2
  export const getReleaseInfo = () => {
3
- const releaseInfo = "MTczMTAyMDQwMDAwMA==";
3
+ const releaseInfo = "MTczMjgzNDgwMDAwMA==";
4
4
  if (process.env.NODE_ENV !== 'production') {
5
5
  // A simple hack to set the value in the test environment (has no build step).
6
6
  // eslint-disable-next-line no-useless-concat
@@ -172,6 +172,7 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
172
172
  name: 'DateRangeCalendar',
173
173
  timezone: timezoneProp,
174
174
  value: valueProp,
175
+ referenceDate,
175
176
  defaultValue,
176
177
  onChange,
177
178
  valueManager: rangeValueManager
@@ -213,7 +214,8 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
213
214
  range: value,
214
215
  rangePosition,
215
216
  allowRangeFlip,
216
- shouldMergeDateAndTime: true
217
+ shouldMergeDateAndTime: true,
218
+ referenceDate
217
219
  });
218
220
  const isNextSectionAvailable = availableRangePositions.includes(nextSelection);
219
221
  if (isNextSectionAvailable) {
package/modern/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers-pro v7.22.2
2
+ * @mui/x-date-pickers-pro v7.23.0
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -33,7 +33,7 @@ const useMultiInputFieldSlotProps = ({
33
33
  const handleEndFieldRef = useForkRef(fieldProps.unstableEndFieldRef, endFieldRef);
34
34
  const previousRangePosition = React.useRef(rangePosition);
35
35
  React.useEffect(() => {
36
- if (!open) {
36
+ if (!open || wrapperVariant === 'mobile') {
37
37
  return;
38
38
  }
39
39
  const currentFieldRef = rangePosition === 'start' ? startFieldRef : endFieldRef;
@@ -49,7 +49,7 @@ const useMultiInputFieldSlotProps = ({
49
49
  // use the current view or `0` when the range position has just been swapped
50
50
  previousRangePosition.current === rangePosition ? currentView : 0);
51
51
  previousRangePosition.current = rangePosition;
52
- }, [rangePosition, open, currentView, startFieldRef, endFieldRef]);
52
+ }, [rangePosition, open, currentView, startFieldRef, endFieldRef, wrapperVariant]);
53
53
  const openRangeStartSelection = event => {
54
54
  event.stopPropagation();
55
55
  onRangePositionChange('start');
@@ -166,7 +166,7 @@ const useSingleInputFieldSlotProps = ({
166
166
  }) => {
167
167
  const handleFieldRef = useForkRef(fieldProps.unstableFieldRef, startFieldRef, endFieldRef);
168
168
  React.useEffect(() => {
169
- if (!open || !startFieldRef.current) {
169
+ if (!open || !startFieldRef.current || wrapperVariant === 'mobile') {
170
170
  return;
171
171
  }
172
172
  if (startFieldRef.current.isFieldFocused()) {
@@ -179,7 +179,7 @@ const useSingleInputFieldSlotProps = ({
179
179
  const newSelectedSection = rangePosition === 'start' ? sections.indexOf(currentView) : sections.lastIndexOf(currentView);
180
180
  startFieldRef.current?.focusField(newSelectedSection);
181
181
  }
182
- }, [rangePosition, open, currentView, startFieldRef]);
182
+ }, [rangePosition, open, currentView, startFieldRef, wrapperVariant]);
183
183
  const updateRangePosition = () => {
184
184
  if (!startFieldRef.current?.isFieldFocused()) {
185
185
  return;
@@ -18,6 +18,7 @@ export const useMultiInputDateRangeField = ({
18
18
  const {
19
19
  value: valueProp,
20
20
  defaultValue,
21
+ referenceDate,
21
22
  format,
22
23
  formatDensity,
23
24
  shouldRespectLeadingZeros,
@@ -39,6 +40,7 @@ export const useMultiInputDateRangeField = ({
39
40
  timezone: timezoneProp,
40
41
  value: valueProp,
41
42
  defaultValue,
43
+ referenceDate,
42
44
  onChange,
43
45
  valueManager: rangeValueManager
44
46
  });
@@ -18,6 +18,7 @@ export const useMultiInputDateTimeRangeField = ({
18
18
  const {
19
19
  value: valueProp,
20
20
  defaultValue,
21
+ referenceDate,
21
22
  format,
22
23
  formatDensity,
23
24
  shouldRespectLeadingZeros,
@@ -39,6 +40,7 @@ export const useMultiInputDateTimeRangeField = ({
39
40
  timezone: timezoneProp,
40
41
  value: valueProp,
41
42
  defaultValue,
43
+ referenceDate,
42
44
  onChange,
43
45
  valueManager: rangeValueManager
44
46
  });
@@ -18,6 +18,7 @@ export const useMultiInputTimeRangeField = ({
18
18
  const {
19
19
  value: valueProp,
20
20
  defaultValue,
21
+ referenceDate,
21
22
  format,
22
23
  formatDensity,
23
24
  shouldRespectLeadingZeros,
@@ -40,7 +41,8 @@ export const useMultiInputTimeRangeField = ({
40
41
  value: valueProp,
41
42
  defaultValue,
42
43
  onChange,
43
- valueManager: rangeValueManager
44
+ valueManager: rangeValueManager,
45
+ referenceDate
44
46
  });
45
47
  const {
46
48
  validationError,
@@ -5,7 +5,8 @@ export function calculateRangeChange({
5
5
  newDate: selectedDate,
6
6
  rangePosition,
7
7
  allowRangeFlip = false,
8
- shouldMergeDateAndTime = false
8
+ shouldMergeDateAndTime = false,
9
+ referenceDate
9
10
  }) {
10
11
  const [start, end] = range;
11
12
  if (shouldMergeDateAndTime && selectedDate) {
@@ -17,29 +18,30 @@ export function calculateRangeChange({
17
18
  selectedDate = mergeDateAndTime(utils, selectedDate, end);
18
19
  }
19
20
  }
21
+ const newSelectedDate = referenceDate && selectedDate && shouldMergeDateAndTime ? mergeDateAndTime(utils, selectedDate, referenceDate) : selectedDate;
20
22
  if (rangePosition === 'start') {
21
23
  const truthyResult = allowRangeFlip ? {
22
24
  nextSelection: 'start',
23
- newRange: [end, selectedDate]
25
+ newRange: [end, newSelectedDate]
24
26
  } : {
25
27
  nextSelection: 'end',
26
- newRange: [selectedDate, null]
28
+ newRange: [newSelectedDate, null]
27
29
  };
28
- return Boolean(end) && utils.isAfter(selectedDate, end) ? truthyResult : {
30
+ return Boolean(end) && utils.isAfter(newSelectedDate, end) ? truthyResult : {
29
31
  nextSelection: 'end',
30
- newRange: [selectedDate, end]
32
+ newRange: [newSelectedDate, end]
31
33
  };
32
34
  }
33
35
  const truthyResult = allowRangeFlip ? {
34
36
  nextSelection: 'end',
35
- newRange: [selectedDate, start]
37
+ newRange: [newSelectedDate, start]
36
38
  } : {
37
39
  nextSelection: 'end',
38
- newRange: [selectedDate, null]
40
+ newRange: [newSelectedDate, null]
39
41
  };
40
- return Boolean(start) && utils.isBeforeDay(selectedDate, start) ? truthyResult : {
42
+ return Boolean(start) && utils.isBeforeDay(newSelectedDate, start) ? truthyResult : {
41
43
  nextSelection: 'start',
42
- newRange: [start, selectedDate]
44
+ newRange: [start, newSelectedDate]
43
45
  };
44
46
  }
45
47
  export function calculateRangePreview(options) {
@@ -1,6 +1,6 @@
1
1
  import { ponyfillGlobal } from '@mui/utils';
2
2
  export const getReleaseInfo = () => {
3
- const releaseInfo = "MTczMTAyMDQwMDAwMA==";
3
+ const releaseInfo = "MTczMjgzNDgwMDAwMA==";
4
4
  if (process.env.NODE_ENV !== 'production') {
5
5
  // A simple hack to set the value in the test environment (has no build step).
6
6
  // eslint-disable-next-line no-useless-concat
@@ -179,6 +179,7 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
179
179
  name: 'DateRangeCalendar',
180
180
  timezone: timezoneProp,
181
181
  value: valueProp,
182
+ referenceDate,
182
183
  defaultValue,
183
184
  onChange,
184
185
  valueManager: _valueManagers.rangeValueManager
@@ -220,7 +221,8 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
220
221
  range: value,
221
222
  rangePosition,
222
223
  allowRangeFlip,
223
- shouldMergeDateAndTime: true
224
+ shouldMergeDateAndTime: true,
225
+ referenceDate
224
226
  });
225
227
  const isNextSectionAvailable = availableRangePositions.includes(nextSelection);
226
228
  if (isNextSectionAvailable) {
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers-pro v7.22.2
2
+ * @mui/x-date-pickers-pro v7.23.0
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -41,7 +41,7 @@ const useMultiInputFieldSlotProps = ({
41
41
  const handleEndFieldRef = (0, _useForkRef.default)(fieldProps.unstableEndFieldRef, endFieldRef);
42
42
  const previousRangePosition = React.useRef(rangePosition);
43
43
  React.useEffect(() => {
44
- if (!open) {
44
+ if (!open || wrapperVariant === 'mobile') {
45
45
  return;
46
46
  }
47
47
  const currentFieldRef = rangePosition === 'start' ? startFieldRef : endFieldRef;
@@ -57,7 +57,7 @@ const useMultiInputFieldSlotProps = ({
57
57
  // use the current view or `0` when the range position has just been swapped
58
58
  previousRangePosition.current === rangePosition ? currentView : 0);
59
59
  previousRangePosition.current = rangePosition;
60
- }, [rangePosition, open, currentView, startFieldRef, endFieldRef]);
60
+ }, [rangePosition, open, currentView, startFieldRef, endFieldRef, wrapperVariant]);
61
61
  const openRangeStartSelection = event => {
62
62
  event.stopPropagation();
63
63
  onRangePositionChange('start');
@@ -174,7 +174,7 @@ const useSingleInputFieldSlotProps = ({
174
174
  }) => {
175
175
  const handleFieldRef = (0, _useForkRef.default)(fieldProps.unstableFieldRef, startFieldRef, endFieldRef);
176
176
  React.useEffect(() => {
177
- if (!open || !startFieldRef.current) {
177
+ if (!open || !startFieldRef.current || wrapperVariant === 'mobile') {
178
178
  return;
179
179
  }
180
180
  if (startFieldRef.current.isFieldFocused()) {
@@ -187,7 +187,7 @@ const useSingleInputFieldSlotProps = ({
187
187
  const newSelectedSection = rangePosition === 'start' ? sections.indexOf(currentView) : sections.lastIndexOf(currentView);
188
188
  startFieldRef.current?.focusField(newSelectedSection);
189
189
  }
190
- }, [rangePosition, open, currentView, startFieldRef]);
190
+ }, [rangePosition, open, currentView, startFieldRef, wrapperVariant]);
191
191
  const updateRangePosition = () => {
192
192
  if (!startFieldRef.current?.isFieldFocused()) {
193
193
  return;
@@ -25,6 +25,7 @@ const useMultiInputDateRangeField = ({
25
25
  const {
26
26
  value: valueProp,
27
27
  defaultValue,
28
+ referenceDate,
28
29
  format,
29
30
  formatDensity,
30
31
  shouldRespectLeadingZeros,
@@ -46,6 +47,7 @@ const useMultiInputDateRangeField = ({
46
47
  timezone: timezoneProp,
47
48
  value: valueProp,
48
49
  defaultValue,
50
+ referenceDate,
49
51
  onChange,
50
52
  valueManager: _valueManagers.rangeValueManager
51
53
  });
@@ -25,6 +25,7 @@ const useMultiInputDateTimeRangeField = ({
25
25
  const {
26
26
  value: valueProp,
27
27
  defaultValue,
28
+ referenceDate,
28
29
  format,
29
30
  formatDensity,
30
31
  shouldRespectLeadingZeros,
@@ -46,6 +47,7 @@ const useMultiInputDateTimeRangeField = ({
46
47
  timezone: timezoneProp,
47
48
  value: valueProp,
48
49
  defaultValue,
50
+ referenceDate,
49
51
  onChange,
50
52
  valueManager: _valueManagers.rangeValueManager
51
53
  });
@@ -25,6 +25,7 @@ const useMultiInputTimeRangeField = ({
25
25
  const {
26
26
  value: valueProp,
27
27
  defaultValue,
28
+ referenceDate,
28
29
  format,
29
30
  formatDensity,
30
31
  shouldRespectLeadingZeros,
@@ -47,7 +48,8 @@ const useMultiInputTimeRangeField = ({
47
48
  value: valueProp,
48
49
  defaultValue,
49
50
  onChange,
50
- valueManager: _valueManagers.rangeValueManager
51
+ valueManager: _valueManagers.rangeValueManager,
52
+ referenceDate
51
53
  });
52
54
  const {
53
55
  validationError,
@@ -12,7 +12,8 @@ function calculateRangeChange({
12
12
  newDate: selectedDate,
13
13
  rangePosition,
14
14
  allowRangeFlip = false,
15
- shouldMergeDateAndTime = false
15
+ shouldMergeDateAndTime = false,
16
+ referenceDate
16
17
  }) {
17
18
  const [start, end] = range;
18
19
  if (shouldMergeDateAndTime && selectedDate) {
@@ -24,29 +25,30 @@ function calculateRangeChange({
24
25
  selectedDate = (0, _internals.mergeDateAndTime)(utils, selectedDate, end);
25
26
  }
26
27
  }
28
+ const newSelectedDate = referenceDate && selectedDate && shouldMergeDateAndTime ? (0, _internals.mergeDateAndTime)(utils, selectedDate, referenceDate) : selectedDate;
27
29
  if (rangePosition === 'start') {
28
30
  const truthyResult = allowRangeFlip ? {
29
31
  nextSelection: 'start',
30
- newRange: [end, selectedDate]
32
+ newRange: [end, newSelectedDate]
31
33
  } : {
32
34
  nextSelection: 'end',
33
- newRange: [selectedDate, null]
35
+ newRange: [newSelectedDate, null]
34
36
  };
35
- return Boolean(end) && utils.isAfter(selectedDate, end) ? truthyResult : {
37
+ return Boolean(end) && utils.isAfter(newSelectedDate, end) ? truthyResult : {
36
38
  nextSelection: 'end',
37
- newRange: [selectedDate, end]
39
+ newRange: [newSelectedDate, end]
38
40
  };
39
41
  }
40
42
  const truthyResult = allowRangeFlip ? {
41
43
  nextSelection: 'end',
42
- newRange: [selectedDate, start]
44
+ newRange: [newSelectedDate, start]
43
45
  } : {
44
46
  nextSelection: 'end',
45
- newRange: [selectedDate, null]
47
+ newRange: [newSelectedDate, null]
46
48
  };
47
- return Boolean(start) && utils.isBeforeDay(selectedDate, start) ? truthyResult : {
49
+ return Boolean(start) && utils.isBeforeDay(newSelectedDate, start) ? truthyResult : {
48
50
  nextSelection: 'start',
49
- newRange: [start, selectedDate]
51
+ newRange: [start, newSelectedDate]
50
52
  };
51
53
  }
52
54
  function calculateRangePreview(options) {
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getReleaseInfo = void 0;
7
7
  var _utils = require("@mui/utils");
8
8
  const getReleaseInfo = () => {
9
- const releaseInfo = "MTczMTAyMDQwMDAwMA==";
9
+ const releaseInfo = "MTczMjgzNDgwMDAwMA==";
10
10
  if (process.env.NODE_ENV !== 'production') {
11
11
  // A simple hack to set the value in the test environment (has no build step).
12
12
  // eslint-disable-next-line no-useless-concat
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-date-pickers-pro",
3
- "version": "7.22.2",
3
+ "version": "7.23.0",
4
4
  "description": "The Pro plan edition of the Date and Time Picker components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -37,9 +37,9 @@
37
37
  "clsx": "^2.1.1",
38
38
  "prop-types": "^15.8.1",
39
39
  "react-transition-group": "^4.4.5",
40
- "@mui/x-date-pickers": "7.22.2",
41
- "@mui/x-internals": "7.21.0",
42
- "@mui/x-license": "7.21.0"
40
+ "@mui/x-date-pickers": "7.23.0",
41
+ "@mui/x-internals": "7.23.0",
42
+ "@mui/x-license": "7.23.0"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "@emotion/react": "^11.9.0",
@@ -53,8 +53,8 @@
53
53
  "moment": "^2.29.4",
54
54
  "moment-hijri": "^2.1.2 || ^3.0.0",
55
55
  "moment-jalaali": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0",
56
- "react": "^17.0.0 || ^18.0.0",
57
- "react-dom": "^17.0.0 || ^18.0.0"
56
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
57
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
58
58
  },
59
59
  "peerDependenciesMeta": {
60
60
  "@emotion/react": {