@mui/x-date-pickers-pro 8.0.0-alpha.0 → 8.0.0-alpha.1

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 (45) hide show
  1. package/CHANGELOG.md +429 -5
  2. package/DateRangeCalendar/DateRangeCalendar.js +3 -1
  3. package/DateRangePicker/DateRangePickerToolbar.js +0 -12
  4. package/DateTimeRangePicker/DateTimeRangePickerToolbar.d.ts +2 -2
  5. package/DateTimeRangePicker/DateTimeRangePickerToolbar.js +6 -16
  6. package/README.md +2 -2
  7. package/index.js +1 -1
  8. package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +2 -2
  9. package/internals/hooks/useEnrichedRangePickerFieldProps.d.ts +2 -2
  10. package/internals/hooks/useEnrichedRangePickerFieldProps.js +9 -9
  11. package/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +2 -2
  12. package/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +2 -0
  13. package/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +2 -0
  14. package/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +3 -1
  15. package/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +1 -1
  16. package/internals/utils/date-range-manager.d.ts +2 -1
  17. package/internals/utils/date-range-manager.js +11 -9
  18. package/internals/utils/releaseInfo.js +1 -1
  19. package/modern/DateRangeCalendar/DateRangeCalendar.js +3 -1
  20. package/modern/DateRangePicker/DateRangePickerToolbar.js +0 -12
  21. package/modern/DateTimeRangePicker/DateTimeRangePickerToolbar.js +6 -16
  22. package/modern/index.js +1 -1
  23. package/modern/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +2 -2
  24. package/modern/internals/hooks/useEnrichedRangePickerFieldProps.js +9 -9
  25. package/modern/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +2 -2
  26. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +2 -0
  27. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +2 -0
  28. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +3 -1
  29. package/modern/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +1 -1
  30. package/modern/internals/utils/date-range-manager.js +11 -9
  31. package/modern/internals/utils/releaseInfo.js +1 -1
  32. package/node/DateRangeCalendar/DateRangeCalendar.js +3 -1
  33. package/node/DateRangePicker/DateRangePickerToolbar.js +0 -12
  34. package/node/DateTimeRangePicker/DateTimeRangePickerToolbar.js +5 -15
  35. package/node/index.js +1 -1
  36. package/node/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +2 -2
  37. package/node/internals/hooks/useEnrichedRangePickerFieldProps.js +9 -9
  38. package/node/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +2 -2
  39. package/node/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +2 -0
  40. package/node/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +2 -0
  41. package/node/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +3 -1
  42. package/node/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +1 -1
  43. package/node/internals/utils/date-range-manager.js +11 -9
  44. package/node/internals/utils/releaseInfo.js +1 -1
  45. package/package.json +6 -6
@@ -8,7 +8,7 @@ import useForkRef from '@mui/utils/useForkRef';
8
8
  import { usePickerTranslations } from '@mui/x-date-pickers/hooks';
9
9
  import { onSpaceOrEnter } from '@mui/x-date-pickers/internals';
10
10
  const useMultiInputFieldSlotProps = ({
11
- wrapperVariant,
11
+ variant,
12
12
  open,
13
13
  actions,
14
14
  readOnly,
@@ -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 || variant === '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, variant]);
53
53
  const openRangeStartSelection = event => {
54
54
  event.stopPropagation();
55
55
  onRangePositionChange('start');
@@ -98,7 +98,7 @@ const useMultiInputFieldSlotProps = ({
98
98
  focused: open ? rangePosition === 'start' : undefined
99
99
  }, !readOnly && !fieldProps.disabled && {
100
100
  onClick: openRangeStartSelection
101
- }, wrapperVariant === 'mobile' && {
101
+ }, variant === 'mobile' && {
102
102
  readOnly: true
103
103
  });
104
104
  if (anchorRef) {
@@ -114,7 +114,7 @@ const useMultiInputFieldSlotProps = ({
114
114
  focused: open ? rangePosition === 'end' : undefined
115
115
  }, !readOnly && !fieldProps.disabled && {
116
116
  onClick: openRangeEndSelection
117
- }, wrapperVariant === 'mobile' && {
117
+ }, variant === 'mobile' && {
118
118
  readOnly: true
119
119
  });
120
120
  InputProps = resolvedComponentProps?.InputProps;
@@ -146,7 +146,7 @@ const useMultiInputFieldSlotProps = ({
146
146
  return enrichedFieldProps;
147
147
  };
148
148
  const useSingleInputFieldSlotProps = ({
149
- wrapperVariant,
149
+ variant,
150
150
  open,
151
151
  actions,
152
152
  readOnly,
@@ -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 || variant === '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, variant]);
183
183
  const updateRangePosition = () => {
184
184
  if (!startFieldRef.current?.isFieldFocused()) {
185
185
  return;
@@ -225,7 +225,7 @@ const useSingleInputFieldSlotProps = ({
225
225
  focused: open ? true : undefined
226
226
  }, labelId != null && {
227
227
  id: labelId
228
- }, wrapperVariant === 'mobile' && {
228
+ }, variant === 'mobile' && {
229
229
  readOnly: true
230
230
  }, !readOnly && !fieldProps.disabled && {
231
231
  onClick: openPicker
@@ -57,7 +57,7 @@ export const useMobileRangePicker = _ref => {
57
57
  ownerState
58
58
  } = usePicker(_extends({}, pickerParams, {
59
59
  props,
60
- wrapperVariant: 'mobile',
60
+ variant: 'mobile',
61
61
  autoFocusView: true,
62
62
  fieldRef: rangePosition === 'start' ? startFieldRef : endFieldRef,
63
63
  localeText,
@@ -95,7 +95,7 @@ export const useMobileRangePicker = _ref => {
95
95
  });
96
96
  const isToolbarHidden = innerSlotProps?.toolbar?.hidden ?? false;
97
97
  const enrichedFieldProps = useEnrichedRangePickerFieldProps({
98
- wrapperVariant: 'mobile',
98
+ variant: 'mobile',
99
99
  fieldType,
100
100
  open,
101
101
  actions,
@@ -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,
@@ -52,7 +52,7 @@ export const useStaticRangePicker = _ref => {
52
52
  rangePosition,
53
53
  onRangePositionChange
54
54
  },
55
- wrapperVariant: displayStaticWrapperAs
55
+ variant: displayStaticWrapperAs
56
56
  }));
57
57
  const Layout = slots?.layout ?? PickerStaticLayout;
58
58
  const slotPropsForLayout = _extends({}, slotProps, {
@@ -13,11 +13,12 @@ interface CalculateRangeChangeOptions {
13
13
  */
14
14
  allowRangeFlip?: boolean;
15
15
  shouldMergeDateAndTime?: boolean;
16
+ referenceDate?: PickerValidDate;
16
17
  }
17
18
  interface CalculateRangeChangeResponse {
18
19
  nextSelection: RangePosition;
19
20
  newRange: PickerRangeValue;
20
21
  }
21
- export declare function calculateRangeChange({ utils, range, newDate: selectedDate, rangePosition, allowRangeFlip, shouldMergeDateAndTime, }: CalculateRangeChangeOptions): CalculateRangeChangeResponse;
22
+ export declare function calculateRangeChange({ utils, range, newDate: selectedDate, rangePosition, allowRangeFlip, shouldMergeDateAndTime, referenceDate, }: CalculateRangeChangeOptions): CalculateRangeChangeResponse;
22
23
  export declare function calculateRangePreview(options: CalculateRangeChangeOptions): PickerRangeValue;
23
24
  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 = "MTczMTUzODgwMDAwMA==";
3
+ const releaseInfo = "MTczMjIzMDAwMDAwMA==";
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
@@ -169,6 +169,7 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
169
169
  name: 'DateRangeCalendar',
170
170
  timezone: timezoneProp,
171
171
  value: valueProp,
172
+ referenceDate,
172
173
  defaultValue,
173
174
  onChange,
174
175
  valueManager: rangeValueManager
@@ -210,7 +211,8 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
210
211
  range: value,
211
212
  rangePosition,
212
213
  allowRangeFlip,
213
- shouldMergeDateAndTime: true
214
+ shouldMergeDateAndTime: true,
215
+ referenceDate
214
216
  });
215
217
  const isNextSectionAvailable = availableRangePositions.includes(nextSelection);
216
218
  if (isNextSectionAvailable) {
@@ -99,12 +99,6 @@ process.env.NODE_ENV !== "production" ? DateRangePickerToolbar.propTypes = {
99
99
  */
100
100
  classes: PropTypes.object,
101
101
  className: PropTypes.string,
102
- /**
103
- * If `true`, the component is disabled.
104
- * When disabled, the value cannot be changed and no interaction is possible.
105
- * @default false
106
- */
107
- disabled: PropTypes.bool,
108
102
  /**
109
103
  * If `true`, show the toolbar even in desktop mode.
110
104
  * @default `true` for Desktop, `false` for Mobile.
@@ -118,12 +112,6 @@ process.env.NODE_ENV !== "production" ? DateRangePickerToolbar.propTypes = {
118
112
  */
119
113
  onViewChange: PropTypes.func.isRequired,
120
114
  rangePosition: PropTypes.oneOf(['end', 'start']).isRequired,
121
- /**
122
- * If `true`, the component is read-only.
123
- * When read-only, the value cannot be changed but the user can interact with the interface.
124
- * @default false
125
- */
126
- readOnly: PropTypes.bool,
127
115
  /**
128
116
  * The system prop that allows defining system overrides as well as additional CSS styles.
129
117
  */
@@ -2,14 +2,14 @@
2
2
 
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
5
- const _excluded = ["value", "rangePosition", "onRangePositionChange", "className", "onViewChange", "toolbarVariant", "onChange", "classes", "view", "isLandscape", "views", "ampm", "disabled", "readOnly", "hidden", "toolbarFormat", "toolbarPlaceholder", "titleId", "sx"];
5
+ const _excluded = ["value", "rangePosition", "onRangePositionChange", "className", "onViewChange", "toolbarVariant", "onChange", "classes", "view", "isLandscape", "views", "ampm", "hidden", "toolbarFormat", "toolbarPlaceholder", "titleId", "sx"];
6
6
  import * as React from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import clsx from 'clsx';
9
9
  import { styled, useThemeProps } from '@mui/material/styles';
10
10
  import composeClasses from '@mui/utils/composeClasses';
11
11
  import { useUtils } from '@mui/x-date-pickers/internals';
12
- import { usePickerTranslations } from '@mui/x-date-pickers/hooks';
12
+ import { usePickerContext, usePickerTranslations } from '@mui/x-date-pickers/hooks';
13
13
  import { DateTimePickerToolbar } from '@mui/x-date-pickers/DateTimePicker';
14
14
  import { getDateTimeRangePickerToolbarUtilityClass } from "./dateTimeRangePickerToolbarClasses.js";
15
15
  import { calculateRangeChange } from "../internals/utils/date-range-manager.js";
@@ -86,8 +86,6 @@ const DateTimeRangePickerToolbar = /*#__PURE__*/React.forwardRef(function DateTi
86
86
  isLandscape,
87
87
  views,
88
88
  ampm,
89
- disabled,
90
- readOnly,
91
89
  hidden,
92
90
  toolbarFormat,
93
91
  toolbarPlaceholder,
@@ -95,6 +93,10 @@ const DateTimeRangePickerToolbar = /*#__PURE__*/React.forwardRef(function DateTi
95
93
  sx
96
94
  } = props,
97
95
  other = _objectWithoutPropertiesLoose(props, _excluded);
96
+ const {
97
+ disabled,
98
+ readOnly
99
+ } = usePickerContext();
98
100
  const commonToolbarProps = {
99
101
  isLandscape,
100
102
  views,
@@ -183,12 +185,6 @@ process.env.NODE_ENV !== "production" ? DateTimeRangePickerToolbar.propTypes = {
183
185
  */
184
186
  classes: PropTypes.object,
185
187
  className: PropTypes.string,
186
- /**
187
- * If `true`, the component is disabled.
188
- * When disabled, the value cannot be changed and no interaction is possible.
189
- * @default false
190
- */
191
- disabled: PropTypes.bool,
192
188
  /**
193
189
  * If `true`, show the toolbar even in desktop mode.
194
190
  * @default `true` for Desktop, `false` for Mobile.
@@ -204,12 +200,6 @@ process.env.NODE_ENV !== "production" ? DateTimeRangePickerToolbar.propTypes = {
204
200
  */
205
201
  onViewChange: PropTypes.func.isRequired,
206
202
  rangePosition: PropTypes.oneOf(['end', 'start']).isRequired,
207
- /**
208
- * If `true`, the component is read-only.
209
- * When read-only, the value cannot be changed but the user can interact with the interface.
210
- * @default false
211
- */
212
- readOnly: PropTypes.bool,
213
203
  /**
214
204
  * The system prop that allows defining system overrides as well as additional CSS styles.
215
205
  */
package/modern/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers-pro v8.0.0-alpha.0
2
+ * @mui/x-date-pickers-pro v8.0.0-alpha.1
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -60,7 +60,7 @@ export const useDesktopRangePicker = _ref => {
60
60
  ownerState
61
61
  } = usePicker(_extends({}, pickerParams, {
62
62
  props,
63
- wrapperVariant: 'desktop',
63
+ variant: 'desktop',
64
64
  autoFocusView: false,
65
65
  fieldRef: rangePosition === 'start' ? startFieldRef : endFieldRef,
66
66
  localeText,
@@ -113,7 +113,7 @@ export const useDesktopRangePicker = _ref => {
113
113
  ownerState
114
114
  });
115
115
  const enrichedFieldProps = useEnrichedRangePickerFieldProps({
116
- wrapperVariant: 'desktop',
116
+ variant: 'desktop',
117
117
  fieldType,
118
118
  open,
119
119
  actions,
@@ -8,7 +8,7 @@ import useForkRef from '@mui/utils/useForkRef';
8
8
  import { usePickerTranslations } from '@mui/x-date-pickers/hooks';
9
9
  import { onSpaceOrEnter } from '@mui/x-date-pickers/internals';
10
10
  const useMultiInputFieldSlotProps = ({
11
- wrapperVariant,
11
+ variant,
12
12
  open,
13
13
  actions,
14
14
  readOnly,
@@ -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 || variant === '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, variant]);
53
53
  const openRangeStartSelection = event => {
54
54
  event.stopPropagation();
55
55
  onRangePositionChange('start');
@@ -98,7 +98,7 @@ const useMultiInputFieldSlotProps = ({
98
98
  focused: open ? rangePosition === 'start' : undefined
99
99
  }, !readOnly && !fieldProps.disabled && {
100
100
  onClick: openRangeStartSelection
101
- }, wrapperVariant === 'mobile' && {
101
+ }, variant === 'mobile' && {
102
102
  readOnly: true
103
103
  });
104
104
  if (anchorRef) {
@@ -114,7 +114,7 @@ const useMultiInputFieldSlotProps = ({
114
114
  focused: open ? rangePosition === 'end' : undefined
115
115
  }, !readOnly && !fieldProps.disabled && {
116
116
  onClick: openRangeEndSelection
117
- }, wrapperVariant === 'mobile' && {
117
+ }, variant === 'mobile' && {
118
118
  readOnly: true
119
119
  });
120
120
  InputProps = resolvedComponentProps?.InputProps;
@@ -146,7 +146,7 @@ const useMultiInputFieldSlotProps = ({
146
146
  return enrichedFieldProps;
147
147
  };
148
148
  const useSingleInputFieldSlotProps = ({
149
- wrapperVariant,
149
+ variant,
150
150
  open,
151
151
  actions,
152
152
  readOnly,
@@ -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 || variant === '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, variant]);
183
183
  const updateRangePosition = () => {
184
184
  if (!startFieldRef.current?.isFieldFocused()) {
185
185
  return;
@@ -225,7 +225,7 @@ const useSingleInputFieldSlotProps = ({
225
225
  focused: open ? true : undefined
226
226
  }, labelId != null && {
227
227
  id: labelId
228
- }, wrapperVariant === 'mobile' && {
228
+ }, variant === 'mobile' && {
229
229
  readOnly: true
230
230
  }, !readOnly && !fieldProps.disabled && {
231
231
  onClick: openPicker
@@ -57,7 +57,7 @@ export const useMobileRangePicker = _ref => {
57
57
  ownerState
58
58
  } = usePicker(_extends({}, pickerParams, {
59
59
  props,
60
- wrapperVariant: 'mobile',
60
+ variant: 'mobile',
61
61
  autoFocusView: true,
62
62
  fieldRef: rangePosition === 'start' ? startFieldRef : endFieldRef,
63
63
  localeText,
@@ -95,7 +95,7 @@ export const useMobileRangePicker = _ref => {
95
95
  });
96
96
  const isToolbarHidden = innerSlotProps?.toolbar?.hidden ?? false;
97
97
  const enrichedFieldProps = useEnrichedRangePickerFieldProps({
98
- wrapperVariant: 'mobile',
98
+ variant: 'mobile',
99
99
  fieldType,
100
100
  open,
101
101
  actions,
@@ -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,
@@ -52,7 +52,7 @@ export const useStaticRangePicker = _ref => {
52
52
  rangePosition,
53
53
  onRangePositionChange
54
54
  },
55
- wrapperVariant: displayStaticWrapperAs
55
+ variant: displayStaticWrapperAs
56
56
  }));
57
57
  const Layout = slots?.layout ?? PickerStaticLayout;
58
58
  const slotPropsForLayout = _extends({}, slotProps, {
@@ -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 = "MTczMTUzODgwMDAwMA==";
3
+ const releaseInfo = "MTczMjIzMDAwMDAwMA==";
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
@@ -176,6 +176,7 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
176
176
  name: 'DateRangeCalendar',
177
177
  timezone: timezoneProp,
178
178
  value: valueProp,
179
+ referenceDate,
179
180
  defaultValue,
180
181
  onChange,
181
182
  valueManager: _valueManagers.rangeValueManager
@@ -217,7 +218,8 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
217
218
  range: value,
218
219
  rangePosition,
219
220
  allowRangeFlip,
220
- shouldMergeDateAndTime: true
221
+ shouldMergeDateAndTime: true,
222
+ referenceDate
221
223
  });
222
224
  const isNextSectionAvailable = availableRangePositions.includes(nextSelection);
223
225
  if (isNextSectionAvailable) {
@@ -106,12 +106,6 @@ process.env.NODE_ENV !== "production" ? DateRangePickerToolbar.propTypes = {
106
106
  */
107
107
  classes: _propTypes.default.object,
108
108
  className: _propTypes.default.string,
109
- /**
110
- * If `true`, the component is disabled.
111
- * When disabled, the value cannot be changed and no interaction is possible.
112
- * @default false
113
- */
114
- disabled: _propTypes.default.bool,
115
109
  /**
116
110
  * If `true`, show the toolbar even in desktop mode.
117
111
  * @default `true` for Desktop, `false` for Mobile.
@@ -125,12 +119,6 @@ process.env.NODE_ENV !== "production" ? DateRangePickerToolbar.propTypes = {
125
119
  */
126
120
  onViewChange: _propTypes.default.func.isRequired,
127
121
  rangePosition: _propTypes.default.oneOf(['end', 'start']).isRequired,
128
- /**
129
- * If `true`, the component is read-only.
130
- * When read-only, the value cannot be changed but the user can interact with the interface.
131
- * @default false
132
- */
133
- readOnly: _propTypes.default.bool,
134
122
  /**
135
123
  * The system prop that allows defining system overrides as well as additional CSS styles.
136
124
  */