@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.
- package/CHANGELOG.md +169 -0
- package/DateRangeCalendar/DateRangeCalendar.js +3 -1
- package/README.md +3 -3
- package/index.js +1 -1
- package/internals/hooks/useEnrichedRangePickerFieldProps.js +4 -4
- package/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +2 -0
- package/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +2 -0
- package/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +3 -1
- package/internals/utils/date-range-manager.d.ts +2 -1
- package/internals/utils/date-range-manager.js +11 -9
- package/internals/utils/releaseInfo.js +1 -1
- package/modern/DateRangeCalendar/DateRangeCalendar.js +3 -1
- package/modern/index.js +1 -1
- package/modern/internals/hooks/useEnrichedRangePickerFieldProps.js +4 -4
- package/modern/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +2 -0
- package/modern/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +2 -0
- package/modern/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +3 -1
- package/modern/internals/utils/date-range-manager.js +11 -9
- package/modern/internals/utils/releaseInfo.js +1 -1
- package/node/DateRangeCalendar/DateRangeCalendar.js +3 -1
- package/node/index.js +1 -1
- package/node/internals/hooks/useEnrichedRangePickerFieldProps.js +4 -4
- package/node/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +2 -0
- package/node/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +2 -0
- package/node/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +3 -1
- package/node/internals/utils/date-range-manager.js +11 -9
- package/node/internals/utils/releaseInfo.js +1 -1
- 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` [](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` [](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` [](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` [](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` [](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` [](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` [](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` [](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` [](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
|
@@ -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,
|
|
25
|
+
newRange: [end, newSelectedDate]
|
|
24
26
|
} : {
|
|
25
27
|
nextSelection: 'end',
|
|
26
|
-
newRange: [
|
|
28
|
+
newRange: [newSelectedDate, null]
|
|
27
29
|
};
|
|
28
|
-
return Boolean(end) && utils.isAfter(
|
|
30
|
+
return Boolean(end) && utils.isAfter(newSelectedDate, end) ? truthyResult : {
|
|
29
31
|
nextSelection: 'end',
|
|
30
|
-
newRange: [
|
|
32
|
+
newRange: [newSelectedDate, end]
|
|
31
33
|
};
|
|
32
34
|
}
|
|
33
35
|
const truthyResult = allowRangeFlip ? {
|
|
34
36
|
nextSelection: 'end',
|
|
35
|
-
newRange: [
|
|
37
|
+
newRange: [newSelectedDate, start]
|
|
36
38
|
} : {
|
|
37
39
|
nextSelection: 'end',
|
|
38
|
-
newRange: [
|
|
40
|
+
newRange: [newSelectedDate, null]
|
|
39
41
|
};
|
|
40
|
-
return Boolean(start) && utils.isBeforeDay(
|
|
42
|
+
return Boolean(start) && utils.isBeforeDay(newSelectedDate, start) ? truthyResult : {
|
|
41
43
|
nextSelection: 'start',
|
|
42
|
-
newRange: [start,
|
|
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 = "
|
|
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
|
@@ -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,
|
|
25
|
+
newRange: [end, newSelectedDate]
|
|
24
26
|
} : {
|
|
25
27
|
nextSelection: 'end',
|
|
26
|
-
newRange: [
|
|
28
|
+
newRange: [newSelectedDate, null]
|
|
27
29
|
};
|
|
28
|
-
return Boolean(end) && utils.isAfter(
|
|
30
|
+
return Boolean(end) && utils.isAfter(newSelectedDate, end) ? truthyResult : {
|
|
29
31
|
nextSelection: 'end',
|
|
30
|
-
newRange: [
|
|
32
|
+
newRange: [newSelectedDate, end]
|
|
31
33
|
};
|
|
32
34
|
}
|
|
33
35
|
const truthyResult = allowRangeFlip ? {
|
|
34
36
|
nextSelection: 'end',
|
|
35
|
-
newRange: [
|
|
37
|
+
newRange: [newSelectedDate, start]
|
|
36
38
|
} : {
|
|
37
39
|
nextSelection: 'end',
|
|
38
|
-
newRange: [
|
|
40
|
+
newRange: [newSelectedDate, null]
|
|
39
41
|
};
|
|
40
|
-
return Boolean(start) && utils.isBeforeDay(
|
|
42
|
+
return Boolean(start) && utils.isBeforeDay(newSelectedDate, start) ? truthyResult : {
|
|
41
43
|
nextSelection: 'start',
|
|
42
|
-
newRange: [start,
|
|
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 = "
|
|
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
|
@@ -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,
|
|
32
|
+
newRange: [end, newSelectedDate]
|
|
31
33
|
} : {
|
|
32
34
|
nextSelection: 'end',
|
|
33
|
-
newRange: [
|
|
35
|
+
newRange: [newSelectedDate, null]
|
|
34
36
|
};
|
|
35
|
-
return Boolean(end) && utils.isAfter(
|
|
37
|
+
return Boolean(end) && utils.isAfter(newSelectedDate, end) ? truthyResult : {
|
|
36
38
|
nextSelection: 'end',
|
|
37
|
-
newRange: [
|
|
39
|
+
newRange: [newSelectedDate, end]
|
|
38
40
|
};
|
|
39
41
|
}
|
|
40
42
|
const truthyResult = allowRangeFlip ? {
|
|
41
43
|
nextSelection: 'end',
|
|
42
|
-
newRange: [
|
|
44
|
+
newRange: [newSelectedDate, start]
|
|
43
45
|
} : {
|
|
44
46
|
nextSelection: 'end',
|
|
45
|
-
newRange: [
|
|
47
|
+
newRange: [newSelectedDate, null]
|
|
46
48
|
};
|
|
47
|
-
return Boolean(start) && utils.isBeforeDay(
|
|
49
|
+
return Boolean(start) && utils.isBeforeDay(newSelectedDate, start) ? truthyResult : {
|
|
48
50
|
nextSelection: 'start',
|
|
49
|
-
newRange: [start,
|
|
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 = "
|
|
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.
|
|
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.
|
|
41
|
-
"@mui/x-internals": "7.
|
|
42
|
-
"@mui/x-license": "7.
|
|
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": {
|