@mui/x-date-pickers-pro 6.7.0 → 6.9.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 (95) hide show
  1. package/CHANGELOG.md +145 -5541
  2. package/DateRangeCalendar/DateRangeCalendar.js +41 -22
  3. package/DateRangeCalendar/DateRangeCalendar.types.d.ts +2 -1
  4. package/DateRangeCalendar/useDragRange.d.ts +3 -2
  5. package/DateRangeCalendar/useDragRange.js +14 -11
  6. package/DateRangePicker/DateRangePicker.js +8 -0
  7. package/DesktopDateRangePicker/DesktopDateRangePicker.js +8 -0
  8. package/MobileDateRangePicker/MobileDateRangePicker.js +8 -0
  9. package/MultiInputDateRangeField/MultiInputDateRangeField.js +9 -1
  10. package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +9 -1
  11. package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.types.d.ts +1 -1
  12. package/MultiInputTimeRangeField/MultiInputTimeRangeField.js +9 -1
  13. package/MultiInputTimeRangeField/MultiInputTimeRangeField.types.d.ts +1 -1
  14. package/SingleInputDateRangeField/SingleInputDateRangeField.js +9 -1
  15. package/SingleInputDateRangeField/SingleInputDateRangeField.types.d.ts +1 -1
  16. package/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +9 -1
  17. package/SingleInputTimeRangeField/SingleInputTimeRangeField.js +9 -1
  18. package/StaticDateRangePicker/StaticDateRangePicker.js +8 -0
  19. package/dateRangeViewRenderers/dateRangeViewRenderers.d.ts +1 -1
  20. package/dateRangeViewRenderers/dateRangeViewRenderers.js +4 -2
  21. package/index.js +1 -1
  22. package/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +2 -0
  23. package/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +3 -1
  24. package/internal/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +21 -14
  25. package/internal/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +21 -14
  26. package/internal/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +21 -14
  27. package/internal/utils/releaseInfo.js +1 -1
  28. package/internal/utils/validation/validateDateRange.d.ts +3 -2
  29. package/internal/utils/validation/validateDateTimeRange.d.ts +3 -2
  30. package/internal/utils/validation/validateTimeRange.d.ts +3 -2
  31. package/internal/utils/valueManagers.js +3 -2
  32. package/legacy/DateRangeCalendar/DateRangeCalendar.js +39 -24
  33. package/legacy/DateRangeCalendar/useDragRange.js +14 -11
  34. package/legacy/DateRangePicker/DateRangePicker.js +8 -0
  35. package/legacy/DesktopDateRangePicker/DesktopDateRangePicker.js +8 -0
  36. package/legacy/MobileDateRangePicker/MobileDateRangePicker.js +8 -0
  37. package/legacy/MultiInputDateRangeField/MultiInputDateRangeField.js +9 -1
  38. package/legacy/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +9 -1
  39. package/legacy/MultiInputTimeRangeField/MultiInputTimeRangeField.js +9 -1
  40. package/legacy/SingleInputDateRangeField/SingleInputDateRangeField.js +9 -1
  41. package/legacy/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +9 -1
  42. package/legacy/SingleInputTimeRangeField/SingleInputTimeRangeField.js +9 -1
  43. package/legacy/StaticDateRangePicker/StaticDateRangePicker.js +8 -0
  44. package/legacy/dateRangeViewRenderers/dateRangeViewRenderers.js +4 -2
  45. package/legacy/index.js +1 -1
  46. package/legacy/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +2 -0
  47. package/legacy/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +3 -1
  48. package/legacy/internal/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +20 -18
  49. package/legacy/internal/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +20 -18
  50. package/legacy/internal/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +20 -18
  51. package/legacy/internal/utils/releaseInfo.js +1 -1
  52. package/legacy/internal/utils/valueManagers.js +5 -2
  53. package/modern/DateRangeCalendar/DateRangeCalendar.js +41 -22
  54. package/modern/DateRangeCalendar/useDragRange.js +14 -11
  55. package/modern/DateRangePicker/DateRangePicker.js +8 -0
  56. package/modern/DesktopDateRangePicker/DesktopDateRangePicker.js +8 -0
  57. package/modern/MobileDateRangePicker/MobileDateRangePicker.js +8 -0
  58. package/modern/MultiInputDateRangeField/MultiInputDateRangeField.js +9 -1
  59. package/modern/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +9 -1
  60. package/modern/MultiInputTimeRangeField/MultiInputTimeRangeField.js +9 -1
  61. package/modern/SingleInputDateRangeField/SingleInputDateRangeField.js +9 -1
  62. package/modern/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +9 -1
  63. package/modern/SingleInputTimeRangeField/SingleInputTimeRangeField.js +9 -1
  64. package/modern/StaticDateRangePicker/StaticDateRangePicker.js +8 -0
  65. package/modern/dateRangeViewRenderers/dateRangeViewRenderers.js +4 -2
  66. package/modern/index.js +1 -1
  67. package/modern/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +2 -0
  68. package/modern/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +3 -1
  69. package/modern/internal/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +21 -13
  70. package/modern/internal/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +21 -13
  71. package/modern/internal/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +21 -13
  72. package/modern/internal/utils/releaseInfo.js +1 -1
  73. package/modern/internal/utils/valueManagers.js +3 -2
  74. package/node/DateRangeCalendar/DateRangeCalendar.js +40 -21
  75. package/node/DateRangeCalendar/useDragRange.js +14 -11
  76. package/node/DateRangePicker/DateRangePicker.js +8 -0
  77. package/node/DesktopDateRangePicker/DesktopDateRangePicker.js +8 -0
  78. package/node/MobileDateRangePicker/MobileDateRangePicker.js +8 -0
  79. package/node/MultiInputDateRangeField/MultiInputDateRangeField.js +9 -1
  80. package/node/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +9 -1
  81. package/node/MultiInputTimeRangeField/MultiInputTimeRangeField.js +9 -1
  82. package/node/SingleInputDateRangeField/SingleInputDateRangeField.js +9 -1
  83. package/node/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +9 -1
  84. package/node/SingleInputTimeRangeField/SingleInputTimeRangeField.js +9 -1
  85. package/node/StaticDateRangePicker/StaticDateRangePicker.js +8 -0
  86. package/node/dateRangeViewRenderers/dateRangeViewRenderers.js +4 -2
  87. package/node/index.js +1 -1
  88. package/node/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +2 -0
  89. package/node/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +3 -1
  90. package/node/internal/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +20 -14
  91. package/node/internal/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +20 -14
  92. package/node/internal/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +20 -14
  93. package/node/internal/utils/releaseInfo.js +1 -1
  94. package/node/internal/utils/valueManagers.js +3 -2
  95. package/package.json +4 -4
@@ -1,9 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import * as React from 'react';
3
2
  import useEventCallback from '@mui/utils/useEventCallback';
4
3
  import { unstable_useDateTimeField as useDateTimeField } from '@mui/x-date-pickers/DateTimeField';
5
- import { applyDefaultDate, useDefaultDates, useLocalizationContext, useUtils, useValidation } from '@mui/x-date-pickers/internals';
6
- import useControlled from '@mui/utils/useControlled';
4
+ import { applyDefaultDate, useDefaultDates, useLocalizationContext, useUtils, useValidation, useControlledValueWithTimezone } from '@mui/x-date-pickers/internals';
7
5
  import { validateDateTimeRange } from '../../utils/validation/validateDateTimeRange';
8
6
  import { rangeValueManager } from '../../utils/valueManagers';
9
7
  export const useDefaultizedDateTimeRangeFieldProps = props => {
@@ -38,37 +36,45 @@ export const useMultiInputDateTimeRangeField = ({
38
36
  defaultValue,
39
37
  format,
40
38
  shouldRespectLeadingZeros,
39
+ timezone: timezoneProp,
41
40
  onChange,
42
41
  disabled,
43
42
  readOnly
44
43
  } = sharedProps;
45
- const firstDefaultValue = React.useRef(defaultValue);
46
- const [value, setValue] = useControlled({
47
- name: 'useMultiInputDateTimeRangeField',
48
- state: 'value',
49
- controlled: valueProp,
50
- default: firstDefaultValue.current ?? rangeValueManager.emptyValue
44
+ const {
45
+ value,
46
+ handleValueChange,
47
+ timezone
48
+ } = useControlledValueWithTimezone({
49
+ name: 'useMultiInputDateRangeField',
50
+ timezone: timezoneProp,
51
+ value: valueProp,
52
+ defaultValue,
53
+ onChange,
54
+ valueManager: rangeValueManager
51
55
  });
52
56
 
53
57
  // TODO: Maybe export utility from `useField` instead of copy/pasting the logic
54
58
  const buildChangeHandler = index => {
55
59
  return (newDate, rawContext) => {
56
60
  const newDateRange = index === 0 ? [newDate, value[1]] : [value[0], newDate];
57
- setValue(newDateRange);
58
61
  const context = _extends({}, rawContext, {
59
62
  validationError: validateDateTimeRange({
60
63
  adapter,
61
64
  value: newDateRange,
62
- props: sharedProps
65
+ props: _extends({}, sharedProps, {
66
+ timezone
67
+ })
63
68
  })
64
69
  });
65
- onChange?.(newDateRange, context);
70
+ handleValueChange(newDateRange, context);
66
71
  };
67
72
  };
68
73
  const handleStartDateChange = useEventCallback(buildChangeHandler(0));
69
74
  const handleEndDateChange = useEventCallback(buildChangeHandler(1));
70
75
  const validationError = useValidation(_extends({}, sharedProps, {
71
- value
76
+ value,
77
+ timezone
72
78
  }), validateDateTimeRange, rangeValueManager.isSameError, rangeValueManager.defaultErrorState);
73
79
  const startFieldProps = _extends({
74
80
  error: !!validationError[0]
@@ -77,6 +83,7 @@ export const useMultiInputDateTimeRangeField = ({
77
83
  shouldRespectLeadingZeros,
78
84
  disabled,
79
85
  readOnly,
86
+ timezone,
80
87
  unstableFieldRef: unstableStartFieldRef,
81
88
  value: valueProp === undefined ? undefined : valueProp[0],
82
89
  defaultValue: defaultValue === undefined ? undefined : defaultValue[0],
@@ -89,6 +96,7 @@ export const useMultiInputDateTimeRangeField = ({
89
96
  shouldRespectLeadingZeros,
90
97
  disabled,
91
98
  readOnly,
99
+ timezone,
92
100
  unstableFieldRef: unstableEndFieldRef,
93
101
  value: valueProp === undefined ? undefined : valueProp[1],
94
102
  defaultValue: defaultValue === undefined ? undefined : defaultValue[1],
@@ -1,9 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import * as React from 'react';
3
2
  import useEventCallback from '@mui/utils/useEventCallback';
4
3
  import { unstable_useTimeField as useTimeField } from '@mui/x-date-pickers/TimeField';
5
- import { useLocalizationContext, useUtils, useValidation } from '@mui/x-date-pickers/internals';
6
- import useControlled from '@mui/utils/useControlled';
4
+ import { useLocalizationContext, useUtils, useValidation, useControlledValueWithTimezone } from '@mui/x-date-pickers/internals';
7
5
  import { validateTimeRange } from '../../utils/validation/validateTimeRange';
8
6
  import { rangeValueManager } from '../../utils/valueManagers';
9
7
  export const useDefaultizedTimeRangeFieldProps = props => {
@@ -32,37 +30,45 @@ export const useMultiInputTimeRangeField = ({
32
30
  defaultValue,
33
31
  format,
34
32
  shouldRespectLeadingZeros,
33
+ timezone: timezoneProp,
35
34
  onChange,
36
35
  disabled,
37
36
  readOnly
38
37
  } = sharedProps;
39
- const firstDefaultValue = React.useRef(defaultValue);
40
- const [value, setValue] = useControlled({
41
- name: 'useMultiInputTimeRangeField',
42
- state: 'value',
43
- controlled: valueProp,
44
- default: firstDefaultValue.current ?? rangeValueManager.emptyValue
38
+ const {
39
+ value,
40
+ handleValueChange,
41
+ timezone
42
+ } = useControlledValueWithTimezone({
43
+ name: 'useMultiInputDateRangeField',
44
+ timezone: timezoneProp,
45
+ value: valueProp,
46
+ defaultValue,
47
+ onChange,
48
+ valueManager: rangeValueManager
45
49
  });
46
50
 
47
51
  // TODO: Maybe export utility from `useField` instead of copy/pasting the logic
48
52
  const buildChangeHandler = index => {
49
53
  return (newDate, rawContext) => {
50
54
  const newDateRange = index === 0 ? [newDate, value[1]] : [value[0], newDate];
51
- setValue(newDateRange);
52
55
  const context = _extends({}, rawContext, {
53
56
  validationError: validateTimeRange({
54
57
  adapter,
55
58
  value: newDateRange,
56
- props: sharedProps
59
+ props: _extends({}, sharedProps, {
60
+ timezone
61
+ })
57
62
  })
58
63
  });
59
- onChange?.(newDateRange, context);
64
+ handleValueChange(newDateRange, context);
60
65
  };
61
66
  };
62
67
  const handleStartDateChange = useEventCallback(buildChangeHandler(0));
63
68
  const handleEndDateChange = useEventCallback(buildChangeHandler(1));
64
69
  const validationError = useValidation(_extends({}, sharedProps, {
65
- value
70
+ value,
71
+ timezone
66
72
  }), validateTimeRange, rangeValueManager.isSameError, rangeValueManager.defaultErrorState);
67
73
  const startFieldProps = _extends({
68
74
  error: !!validationError[0]
@@ -71,6 +77,7 @@ export const useMultiInputTimeRangeField = ({
71
77
  shouldRespectLeadingZeros,
72
78
  disabled,
73
79
  readOnly,
80
+ timezone,
74
81
  unstableFieldRef: unstableStartFieldRef,
75
82
  value: valueProp === undefined ? undefined : valueProp[0],
76
83
  defaultValue: defaultValue === undefined ? undefined : defaultValue[0],
@@ -83,6 +90,7 @@ export const useMultiInputTimeRangeField = ({
83
90
  shouldRespectLeadingZeros,
84
91
  disabled,
85
92
  readOnly,
93
+ timezone,
86
94
  unstableFieldRef: unstableEndFieldRef,
87
95
  value: valueProp === undefined ? undefined : valueProp[1],
88
96
  defaultValue: defaultValue === undefined ? undefined : defaultValue[1],
@@ -1,6 +1,6 @@
1
1
  import { ponyfillGlobal } from '@mui/utils';
2
2
  export const getReleaseInfo = () => {
3
- const releaseInfo = "MTY4NjI2MTYwMDAwMA==";
3
+ const releaseInfo = "MTY4NzM4MTIwMDAwMA==";
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
@@ -5,7 +5,7 @@ import { replaceInvalidDateByNull, addPositionPropertiesToSections, createDateSt
5
5
  import { splitDateRangeSections, removeLastSeparator } from './date-fields-utils';
6
6
  export const rangeValueManager = {
7
7
  emptyValue: [null, null],
8
- getTodayValue: (utils, valueType) => [getTodayDate(utils, valueType), getTodayDate(utils, valueType)],
8
+ getTodayValue: (utils, timezone, valueType) => [getTodayDate(utils, timezone, valueType), getTodayDate(utils, timezone, valueType)],
9
9
  getInitialReferenceValue: _ref => {
10
10
  let {
11
11
  value,
@@ -32,7 +32,8 @@ export const rangeValueManager = {
32
32
  throw new Error('MUI: The timezone of the start and the end date should be the same');
33
33
  }
34
34
  return timezoneStart ?? timezoneEnd;
35
- }
35
+ },
36
+ setTimezone: (utils, timezone, value) => [value[0] == null ? null : utils.setTimezone(value[0], timezone), value[1] == null ? null : utils.setTimezone(value[1], timezone)]
36
37
  };
37
38
  export const rangeFieldValueManager = {
38
39
  updateReferenceValue: (utils, value, prevReferenceValue) => {
@@ -11,7 +11,6 @@ var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
12
  var _clsx = _interopRequireDefault(require("clsx"));
13
13
  var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
14
- var _useControlled = _interopRequireDefault(require("@mui/utils/useControlled"));
15
14
  var _useMediaQuery = _interopRequireDefault(require("@mui/material/useMediaQuery"));
16
15
  var _utils = require("@mui/base/utils");
17
16
  var _styles = require("@mui/material/styles");
@@ -27,7 +26,7 @@ var _valueManagers = require("../internal/utils/valueManagers");
27
26
  var _useDragRange2 = require("./useDragRange");
28
27
  var _useRangePosition = require("../internal/hooks/useRangePosition");
29
28
  var _jsxRuntime = require("react/jsx-runtime");
30
- const _excluded = ["value", "defaultValue", "onChange", "className", "disableFuture", "disablePast", "minDate", "maxDate", "shouldDisableDate", "reduceAnimations", "onMonthChange", "defaultCalendarMonth", "rangePosition", "defaultRangePosition", "onRangePositionChange", "calendars", "currentMonthCalendarPosition", "components", "componentsProps", "slots", "slotProps", "loading", "renderLoading", "disableHighlightToday", "readOnly", "disabled", "showDaysOutsideCurrentMonth", "dayOfWeekFormatter", "disableAutoMonthSwitching", "autoFocus", "fixedWeekNumber", "disableDragEditing", "displayWeekNumber"],
29
+ const _excluded = ["value", "defaultValue", "onChange", "className", "disableFuture", "disablePast", "minDate", "maxDate", "shouldDisableDate", "reduceAnimations", "onMonthChange", "defaultCalendarMonth", "rangePosition", "defaultRangePosition", "onRangePositionChange", "calendars", "currentMonthCalendarPosition", "components", "componentsProps", "slots", "slotProps", "loading", "renderLoading", "disableHighlightToday", "readOnly", "disabled", "showDaysOutsideCurrentMonth", "dayOfWeekFormatter", "disableAutoMonthSwitching", "autoFocus", "fixedWeekNumber", "disableDragEditing", "displayWeekNumber", "timezone"],
31
30
  _excluded2 = ["isDragging", "rangeDragDay", "draggingDatePosition"];
32
31
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
32
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -48,7 +47,7 @@ const DateRangeCalendarMonthContainer = (0, _styles.styled)('div', {
48
47
  theme
49
48
  }) => ({
50
49
  '&:not(:last-of-type)': {
51
- borderRight: `2px solid ${(theme.vars || theme).palette.divider}`
50
+ borderRight: `1px solid ${(theme.vars || theme).palette.divider}`
52
51
  }
53
52
  }));
54
53
  const DateRangeCalendarArrowSwitcher = (0, _styles.styled)(_internals.PickersArrowSwitcher)({
@@ -116,9 +115,6 @@ const useUtilityClasses = ownerState => {
116
115
  return (0, _utils2.unstable_composeClasses)(slots, _dateRangeCalendarClasses.getDateRangeCalendarUtilityClass, classes);
117
116
  };
118
117
  const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalendar(inProps, ref) {
119
- const utils = (0, _internals.useUtils)();
120
- const localeText = (0, _internals.useLocaleText)();
121
- const now = (0, _internals.useNow)();
122
118
  const props = useDateRangeCalendarDefaultizedProps(inProps, 'MuiDateRangeCalendar');
123
119
  const shouldHavePreview = (0, _useMediaQuery.default)(_internals.DEFAULT_DESKTOP_MODE_MEDIA_QUERY, {
124
120
  defaultMatches: false
@@ -156,17 +152,27 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
156
152
  autoFocus,
157
153
  fixedWeekNumber,
158
154
  disableDragEditing,
159
- displayWeekNumber
155
+ displayWeekNumber,
156
+ timezone: timezoneProp
160
157
  } = props,
161
158
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
162
- const slots = innerSlots ?? (0, _internals.uncapitalizeObjectKeys)(components);
163
- const slotProps = innerSlotProps ?? componentsProps;
164
- const [value, setValue] = (0, _useControlled.default)({
165
- controlled: valueProp,
166
- default: defaultValue ?? _valueManagers.rangeValueManager.emptyValue,
159
+ const {
160
+ value,
161
+ handleValueChange,
162
+ timezone
163
+ } = (0, _internals.useControlledValueWithTimezone)({
167
164
  name: 'DateRangeCalendar',
168
- state: 'value'
165
+ timezone: timezoneProp,
166
+ value: valueProp,
167
+ defaultValue,
168
+ onChange,
169
+ valueManager: _valueManagers.rangeValueManager
169
170
  });
171
+ const utils = (0, _internals.useUtils)();
172
+ const localeText = (0, _internals.useLocaleText)();
173
+ const now = (0, _internals.useNow)(timezone);
174
+ const slots = innerSlots ?? (0, _internals.uncapitalizeObjectKeys)(components);
175
+ const slotProps = innerSlotProps ?? componentsProps;
170
176
  const {
171
177
  rangePosition,
172
178
  onRangePositionChange
@@ -193,8 +199,7 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
193
199
  });
194
200
  onRangePositionChange(nextSelection);
195
201
  const isFullRangeSelected = rangePosition === 'end' && (0, _dateUtils.isRangeValid)(utils, newRange);
196
- setValue(newRange);
197
- onChange?.(newRange, isFullRangeSelected ? 'finish' : 'partial');
202
+ handleValueChange(newRange, isFullRangeSelected ? 'finish' : 'partial');
198
203
  });
199
204
  const handleDrop = (0, _useEventCallback.default)(newDate => {
200
205
  handleSelectedDayChange(newDate, undefined, true);
@@ -209,7 +214,8 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
209
214
  onDrop: handleDrop,
210
215
  onDatePositionChange: handleDatePositionChange,
211
216
  utils,
212
- dateRange: valueDayRange
217
+ dateRange: valueDayRange,
218
+ timezone
213
219
  }),
214
220
  {
215
221
  isDragging,
@@ -256,7 +262,8 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
256
262
  minDate,
257
263
  onMonthChange,
258
264
  reduceAnimations,
259
- shouldDisableDate: wrappedShouldDisableDate
265
+ shouldDisableDate: wrappedShouldDisableDate,
266
+ timezone
260
267
  });
261
268
  const prevValue = React.useRef(null);
262
269
  React.useEffect(() => {
@@ -291,11 +298,13 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
291
298
  }, [changeMonth, calendarState.currentMonth, utils]);
292
299
  const isNextMonthDisabled = (0, _internals.useNextMonthDisabled)(calendarState.currentMonth, {
293
300
  disableFuture,
294
- maxDate
301
+ maxDate,
302
+ timezone
295
303
  });
296
304
  const isPreviousMonthDisabled = (0, _internals.usePreviousMonthDisabled)(calendarState.currentMonth, {
297
305
  disablePast,
298
- minDate
306
+ minDate,
307
+ timezone
299
308
  });
300
309
  const baseDateValidationProps = {
301
310
  disablePast,
@@ -423,7 +432,8 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
423
432
  disableFuture: disableFuture,
424
433
  reduceAnimations: reduceAnimations,
425
434
  slots: slots,
426
- slotProps: slotProps
435
+ slotProps: slotProps,
436
+ timezone: timezone
427
437
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(DateRangeCalendarArrowSwitcher, {
428
438
  onGoToPrevious: selectPreviousMonth,
429
439
  onGoToNext: selectNextMonth,
@@ -455,7 +465,8 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
455
465
  slotProps: slotPropsForDayCalendar,
456
466
  autoFocus: month === focusedMonth,
457
467
  fixedWeekNumber: fixedWeekNumber,
458
- displayWeekNumber: displayWeekNumber
468
+ displayWeekNumber: displayWeekNumber,
469
+ timezone: timezone
459
470
  }), index)]
460
471
  }, month))]
461
472
  }));
@@ -645,6 +656,14 @@ process.env.NODE_ENV !== "production" ? DateRangeCalendar.propTypes = {
645
656
  * The system prop that allows defining system overrides as well as additional CSS styles.
646
657
  */
647
658
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
659
+ /**
660
+ * Choose which timezone to use for the value.
661
+ * Example: "default", "system", "UTC", "America/New_York".
662
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
663
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
664
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
665
+ */
666
+ timezone: _propTypes.default.string,
648
667
  /**
649
668
  * The selected value.
650
669
  * Used when the component is controlled.
@@ -11,13 +11,13 @@ var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallb
11
11
  var _dateUtils = require("../internal/utils/date-utils");
12
12
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
13
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
14
- const resolveDateFromTarget = (target, utils) => {
14
+ const resolveDateFromTarget = (target, utils, timezone) => {
15
15
  const timestampString = target.dataset.timestamp;
16
16
  if (!timestampString) {
17
17
  return null;
18
18
  }
19
19
  const timestamp = +timestampString;
20
- return utils.date(new Date(timestamp));
20
+ return utils.dateWithTimezone(new Date(timestamp).toISOString(), timezone);
21
21
  };
22
22
  const isSameAsDraggingDate = event => {
23
23
  const timestampString = event.target.dataset.timestamp;
@@ -57,7 +57,8 @@ const useDragRangeEvents = ({
57
57
  onDatePositionChange,
58
58
  onDrop,
59
59
  disableDragEditing,
60
- dateRange
60
+ dateRange,
61
+ timezone
61
62
  }) => {
62
63
  const emptyDragImgRef = React.useRef(null);
63
64
  React.useEffect(() => {
@@ -75,7 +76,7 @@ const useDragRangeEvents = ({
75
76
  return shouldInitDragging && (isSelectedStartDate || isSelectedEndDate);
76
77
  };
77
78
  const handleDragStart = (0, _useEventCallback.default)(event => {
78
- const newDate = resolveDateFromTarget(event.target, utils);
79
+ const newDate = resolveDateFromTarget(event.target, utils, timezone);
79
80
  if (!isElementDraggable(newDate)) {
80
81
  return;
81
82
  }
@@ -99,7 +100,7 @@ const useDragRangeEvents = ({
99
100
  if (!target) {
100
101
  return;
101
102
  }
102
- const newDate = resolveDateFromTarget(target, utils);
103
+ const newDate = resolveDateFromTarget(target, utils, timezone);
103
104
  if (!isElementDraggable(newDate)) {
104
105
  return;
105
106
  }
@@ -118,14 +119,14 @@ const useDragRangeEvents = ({
118
119
  event.preventDefault();
119
120
  event.stopPropagation();
120
121
  event.dataTransfer.dropEffect = 'move';
121
- setRangeDragDay(resolveDateFromTarget(event.target, utils));
122
+ setRangeDragDay(resolveDateFromTarget(event.target, utils, timezone));
122
123
  });
123
124
  const handleTouchMove = (0, _useEventCallback.default)(event => {
124
125
  const target = resolveElementFromTouch(event);
125
126
  if (!isDragging || !target) {
126
127
  return;
127
128
  }
128
- const newDate = resolveDateFromTarget(target, utils);
129
+ const newDate = resolveDateFromTarget(target, utils, timezone);
129
130
  if (newDate) {
130
131
  setRangeDragDay(newDate);
131
132
  }
@@ -158,7 +159,7 @@ const useDragRangeEvents = ({
158
159
 
159
160
  // make sure the focused element is the element where touch ended
160
161
  target.focus();
161
- const newDate = resolveDateFromTarget(target, utils);
162
+ const newDate = resolveDateFromTarget(target, utils, timezone);
162
163
  if (newDate) {
163
164
  onDrop(newDate);
164
165
  }
@@ -185,7 +186,7 @@ const useDragRangeEvents = ({
185
186
  if (isSameAsDraggingDate(event)) {
186
187
  return;
187
188
  }
188
- const newDate = resolveDateFromTarget(event.target, utils);
189
+ const newDate = resolveDateFromTarget(event.target, utils, timezone);
189
190
  if (newDate) {
190
191
  onDrop(newDate);
191
192
  }
@@ -207,7 +208,8 @@ const useDragRange = ({
207
208
  utils,
208
209
  onDatePositionChange,
209
210
  onDrop,
210
- dateRange
211
+ dateRange,
212
+ timezone
211
213
  }) => {
212
214
  const [isDragging, setIsDragging] = React.useState(false);
213
215
  const [rangeDragDay, setRangeDragDay] = React.useState(null);
@@ -236,7 +238,8 @@ const useDragRange = ({
236
238
  isDragging,
237
239
  setRangeDragDay: handleRangeDragDayChange,
238
240
  disableDragEditing,
239
- dateRange
241
+ dateRange,
242
+ timezone
240
243
  });
241
244
  return React.useMemo(() => (0, _extends2.default)({
242
245
  isDragging,
@@ -317,6 +317,14 @@ process.env.NODE_ENV !== "production" ? DateRangePicker.propTypes = {
317
317
  * The system prop that allows defining system overrides as well as additional CSS styles.
318
318
  */
319
319
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
320
+ /**
321
+ * Choose which timezone to use for the value.
322
+ * Example: "default", "system", "UTC", "America/New_York".
323
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
324
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
325
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
326
+ */
327
+ timezone: _propTypes.default.string,
320
328
  /**
321
329
  * The selected value.
322
330
  * Used when the component is controlled.
@@ -322,6 +322,14 @@ DesktopDateRangePicker.propTypes = {
322
322
  * The system prop that allows defining system overrides as well as additional CSS styles.
323
323
  */
324
324
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
325
+ /**
326
+ * Choose which timezone to use for the value.
327
+ * Example: "default", "system", "UTC", "America/New_York".
328
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
329
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
330
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
331
+ */
332
+ timezone: _propTypes.default.string,
325
333
  /**
326
334
  * The selected value.
327
335
  * Used when the component is controlled.
@@ -325,6 +325,14 @@ MobileDateRangePicker.propTypes = {
325
325
  * The system prop that allows defining system overrides as well as additional CSS styles.
326
326
  */
327
327
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
328
+ /**
329
+ * Choose which timezone to use for the value.
330
+ * Example: "default", "system", "UTC", "America/New_York".
331
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
332
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
333
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
334
+ */
335
+ timezone: _propTypes.default.string,
328
336
  /**
329
337
  * The selected value.
330
338
  * Used when the component is controlled.
@@ -245,7 +245,7 @@ process.env.NODE_ENV !== "production" ? MultiInputDateRangeField.propTypes = {
245
245
  */
246
246
  readOnly: _propTypes.default.bool,
247
247
  /**
248
- * The date used to generate a part of the date-time that is not present in the format when both `value` and `defaultValue` are not present.
248
+ * The date used to generate a part of the new value that is not present in the format when both `value` and `defaultValue` are empty.
249
249
  * For example, on time fields it will be used to determine the date to set.
250
250
  * @default The closest valid date using the validation props, except callbacks such as `shouldDisableDate`. Value is rounded to the most granular section used.
251
251
  */
@@ -306,6 +306,14 @@ process.env.NODE_ENV !== "production" ? MultiInputDateRangeField.propTypes = {
306
306
  * The system prop, which allows defining system overrides as well as additional CSS styles.
307
307
  */
308
308
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
309
+ /**
310
+ * Choose which timezone to use for the value.
311
+ * Example: "default", "system", "UTC", "America/New_York".
312
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
313
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
314
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
315
+ */
316
+ timezone: _propTypes.default.string,
309
317
  unstableEndFieldRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
310
318
  unstableStartFieldRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
311
319
  /**
@@ -278,7 +278,7 @@ process.env.NODE_ENV !== "production" ? MultiInputDateTimeRangeField.propTypes =
278
278
  */
279
279
  readOnly: _propTypes.default.bool,
280
280
  /**
281
- * The date used to generate a part of the date-time that is not present in the format when both `value` and `defaultValue` are not present.
281
+ * The date used to generate a part of the new value that is not present in the format when both `value` and `defaultValue` are empty.
282
282
  * For example, on time fields it will be used to determine the date to set.
283
283
  * @default The closest valid date using the validation props, except callbacks such as `shouldDisableDate`. Value is rounded to the most granular section used.
284
284
  */
@@ -355,6 +355,14 @@ process.env.NODE_ENV !== "production" ? MultiInputDateTimeRangeField.propTypes =
355
355
  * The system prop, which allows defining system overrides as well as additional CSS styles.
356
356
  */
357
357
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
358
+ /**
359
+ * Choose which timezone to use for the value.
360
+ * Example: "default", "system", "UTC", "America/New_York".
361
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
362
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
363
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
364
+ */
365
+ timezone: _propTypes.default.string,
358
366
  unstableEndFieldRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
359
367
  unstableStartFieldRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
360
368
  /**
@@ -262,7 +262,7 @@ process.env.NODE_ENV !== "production" ? MultiInputTimeRangeField.propTypes = {
262
262
  */
263
263
  readOnly: _propTypes.default.bool,
264
264
  /**
265
- * The date used to generate a part of the date-time that is not present in the format when both `value` and `defaultValue` are not present.
265
+ * The date used to generate a part of the new value that is not present in the format when both `value` and `defaultValue` are empty.
266
266
  * For example, on time fields it will be used to determine the date to set.
267
267
  * @default The closest valid date using the validation props, except callbacks such as `shouldDisableDate`. Value is rounded to the most granular section used.
268
268
  */
@@ -331,6 +331,14 @@ process.env.NODE_ENV !== "production" ? MultiInputTimeRangeField.propTypes = {
331
331
  * The system prop, which allows defining system overrides as well as additional CSS styles.
332
332
  */
333
333
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
334
+ /**
335
+ * Choose which timezone to use for the value.
336
+ * Example: "default", "system", "UTC", "America/New_York".
337
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
338
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
339
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
340
+ */
341
+ timezone: _propTypes.default.string,
334
342
  unstableEndFieldRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
335
343
  unstableStartFieldRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
336
344
  /**
@@ -240,7 +240,7 @@ process.env.NODE_ENV !== "production" ? SingleInputDateRangeField.propTypes = {
240
240
  */
241
241
  readOnly: _propTypes.default.bool,
242
242
  /**
243
- * The date used to generate a part of the date-time that is not present in the format when both `value` and `defaultValue` are not present.
243
+ * The date used to generate a part of the new value that is not present in the format when both `value` and `defaultValue` are empty.
244
244
  * For example, on time fields it will be used to determine the date to set.
245
245
  * @default The closest valid date using the validation props, except callbacks such as `shouldDisableDate`. Value is rounded to the most granular section used.
246
246
  */
@@ -305,6 +305,14 @@ process.env.NODE_ENV !== "production" ? SingleInputDateRangeField.propTypes = {
305
305
  * The system prop that allows defining system overrides as well as additional CSS styles.
306
306
  */
307
307
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
308
+ /**
309
+ * Choose which timezone to use for the value.
310
+ * Example: "default", "system", "UTC", "America/New_York".
311
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
312
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
313
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
314
+ */
315
+ timezone: _propTypes.default.string,
308
316
  /**
309
317
  * The ref object used to imperatively interact with the field.
310
318
  */
@@ -273,7 +273,7 @@ process.env.NODE_ENV !== "production" ? SingleInputDateTimeRangeField.propTypes
273
273
  */
274
274
  readOnly: _propTypes.default.bool,
275
275
  /**
276
- * The date used to generate a part of the date-time that is not present in the format when both `value` and `defaultValue` are not present.
276
+ * The date used to generate a part of the new value that is not present in the format when both `value` and `defaultValue` are empty.
277
277
  * For example, on time fields it will be used to determine the date to set.
278
278
  * @default The closest valid date using the validation props, except callbacks such as `shouldDisableDate`. Value is rounded to the most granular section used.
279
279
  */
@@ -354,6 +354,14 @@ process.env.NODE_ENV !== "production" ? SingleInputDateTimeRangeField.propTypes
354
354
  * The system prop that allows defining system overrides as well as additional CSS styles.
355
355
  */
356
356
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
357
+ /**
358
+ * Choose which timezone to use for the value.
359
+ * Example: "default", "system", "UTC", "America/New_York".
360
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
361
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
362
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
363
+ */
364
+ timezone: _propTypes.default.string,
357
365
  /**
358
366
  * The ref object used to imperatively interact with the field.
359
367
  */
@@ -257,7 +257,7 @@ process.env.NODE_ENV !== "production" ? SingleInputTimeRangeField.propTypes = {
257
257
  */
258
258
  readOnly: _propTypes.default.bool,
259
259
  /**
260
- * The date used to generate a part of the date-time that is not present in the format when both `value` and `defaultValue` are not present.
260
+ * The date used to generate a part of the new value that is not present in the format when both `value` and `defaultValue` are empty.
261
261
  * For example, on time fields it will be used to determine the date to set.
262
262
  * @default The closest valid date using the validation props, except callbacks such as `shouldDisableDate`. Value is rounded to the most granular section used.
263
263
  */
@@ -330,6 +330,14 @@ process.env.NODE_ENV !== "production" ? SingleInputTimeRangeField.propTypes = {
330
330
  * The system prop that allows defining system overrides as well as additional CSS styles.
331
331
  */
332
332
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
333
+ /**
334
+ * Choose which timezone to use for the value.
335
+ * Example: "default", "system", "UTC", "America/New_York".
336
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
337
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
338
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
339
+ */
340
+ timezone: _propTypes.default.string,
333
341
  /**
334
342
  * The ref object used to imperatively interact with the field.
335
343
  */