@mui/x-date-pickers-pro 6.8.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 +76 -5534
  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 +8 -0
  10. package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +8 -0
  11. package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.types.d.ts +1 -1
  12. package/MultiInputTimeRangeField/MultiInputTimeRangeField.js +8 -0
  13. package/MultiInputTimeRangeField/MultiInputTimeRangeField.types.d.ts +1 -1
  14. package/SingleInputDateRangeField/SingleInputDateRangeField.js +8 -0
  15. package/SingleInputDateRangeField/SingleInputDateRangeField.types.d.ts +1 -1
  16. package/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +8 -0
  17. package/SingleInputTimeRangeField/SingleInputTimeRangeField.js +8 -0
  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 +8 -0
  38. package/legacy/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +8 -0
  39. package/legacy/MultiInputTimeRangeField/MultiInputTimeRangeField.js +8 -0
  40. package/legacy/SingleInputDateRangeField/SingleInputDateRangeField.js +8 -0
  41. package/legacy/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +8 -0
  42. package/legacy/SingleInputTimeRangeField/SingleInputTimeRangeField.js +8 -0
  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 +8 -0
  59. package/modern/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +8 -0
  60. package/modern/MultiInputTimeRangeField/MultiInputTimeRangeField.js +8 -0
  61. package/modern/SingleInputDateRangeField/SingleInputDateRangeField.js +8 -0
  62. package/modern/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +8 -0
  63. package/modern/SingleInputTimeRangeField/SingleInputTimeRangeField.js +8 -0
  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 +8 -0
  80. package/node/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +8 -0
  81. package/node/MultiInputTimeRangeField/MultiInputTimeRangeField.js +8 -0
  82. package/node/SingleInputDateRangeField/SingleInputDateRangeField.js +8 -0
  83. package/node/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +8 -0
  84. package/node/SingleInputTimeRangeField/SingleInputTimeRangeField.js +8 -0
  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 => {
@@ -32,7 +30,6 @@ export const useMultiInputDateTimeRangeField = ({
32
30
  endInputRef,
33
31
  unstableEndFieldRef
34
32
  }) => {
35
- var _firstDefaultValue$cu;
36
33
  const sharedProps = useDefaultizedDateTimeRangeFieldProps(inSharedProps);
37
34
  const adapter = useLocalizationContext();
38
35
  const {
@@ -40,37 +37,45 @@ export const useMultiInputDateTimeRangeField = ({
40
37
  defaultValue,
41
38
  format,
42
39
  shouldRespectLeadingZeros,
40
+ timezone: timezoneProp,
43
41
  onChange,
44
42
  disabled,
45
43
  readOnly
46
44
  } = sharedProps;
47
- const firstDefaultValue = React.useRef(defaultValue);
48
- const [value, setValue] = useControlled({
49
- name: 'useMultiInputDateTimeRangeField',
50
- state: 'value',
51
- controlled: valueProp,
52
- default: (_firstDefaultValue$cu = firstDefaultValue.current) != null ? _firstDefaultValue$cu : rangeValueManager.emptyValue
45
+ const {
46
+ value,
47
+ handleValueChange,
48
+ timezone
49
+ } = useControlledValueWithTimezone({
50
+ name: 'useMultiInputDateRangeField',
51
+ timezone: timezoneProp,
52
+ value: valueProp,
53
+ defaultValue,
54
+ onChange,
55
+ valueManager: rangeValueManager
53
56
  });
54
57
 
55
58
  // TODO: Maybe export utility from `useField` instead of copy/pasting the logic
56
59
  const buildChangeHandler = index => {
57
60
  return (newDate, rawContext) => {
58
61
  const newDateRange = index === 0 ? [newDate, value[1]] : [value[0], newDate];
59
- setValue(newDateRange);
60
62
  const context = _extends({}, rawContext, {
61
63
  validationError: validateDateTimeRange({
62
64
  adapter,
63
65
  value: newDateRange,
64
- props: sharedProps
66
+ props: _extends({}, sharedProps, {
67
+ timezone
68
+ })
65
69
  })
66
70
  });
67
- onChange == null ? void 0 : onChange(newDateRange, context);
71
+ handleValueChange(newDateRange, context);
68
72
  };
69
73
  };
70
74
  const handleStartDateChange = useEventCallback(buildChangeHandler(0));
71
75
  const handleEndDateChange = useEventCallback(buildChangeHandler(1));
72
76
  const validationError = useValidation(_extends({}, sharedProps, {
73
- value
77
+ value,
78
+ timezone
74
79
  }), validateDateTimeRange, rangeValueManager.isSameError, rangeValueManager.defaultErrorState);
75
80
  const startFieldProps = _extends({
76
81
  error: !!validationError[0]
@@ -79,6 +84,7 @@ export const useMultiInputDateTimeRangeField = ({
79
84
  shouldRespectLeadingZeros,
80
85
  disabled,
81
86
  readOnly,
87
+ timezone,
82
88
  unstableFieldRef: unstableStartFieldRef,
83
89
  value: valueProp === undefined ? undefined : valueProp[0],
84
90
  defaultValue: defaultValue === undefined ? undefined : defaultValue[0],
@@ -91,6 +97,7 @@ export const useMultiInputDateTimeRangeField = ({
91
97
  shouldRespectLeadingZeros,
92
98
  disabled,
93
99
  readOnly,
100
+ timezone,
94
101
  unstableFieldRef: unstableEndFieldRef,
95
102
  value: valueProp === undefined ? undefined : valueProp[1],
96
103
  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 => {
@@ -26,7 +24,6 @@ export const useMultiInputTimeRangeField = ({
26
24
  endInputRef,
27
25
  unstableEndFieldRef
28
26
  }) => {
29
- var _firstDefaultValue$cu;
30
27
  const sharedProps = useDefaultizedTimeRangeFieldProps(inSharedProps);
31
28
  const adapter = useLocalizationContext();
32
29
  const {
@@ -34,37 +31,45 @@ export const useMultiInputTimeRangeField = ({
34
31
  defaultValue,
35
32
  format,
36
33
  shouldRespectLeadingZeros,
34
+ timezone: timezoneProp,
37
35
  onChange,
38
36
  disabled,
39
37
  readOnly
40
38
  } = sharedProps;
41
- const firstDefaultValue = React.useRef(defaultValue);
42
- const [value, setValue] = useControlled({
43
- name: 'useMultiInputTimeRangeField',
44
- state: 'value',
45
- controlled: valueProp,
46
- default: (_firstDefaultValue$cu = firstDefaultValue.current) != null ? _firstDefaultValue$cu : rangeValueManager.emptyValue
39
+ const {
40
+ value,
41
+ handleValueChange,
42
+ timezone
43
+ } = useControlledValueWithTimezone({
44
+ name: 'useMultiInputDateRangeField',
45
+ timezone: timezoneProp,
46
+ value: valueProp,
47
+ defaultValue,
48
+ onChange,
49
+ valueManager: rangeValueManager
47
50
  });
48
51
 
49
52
  // TODO: Maybe export utility from `useField` instead of copy/pasting the logic
50
53
  const buildChangeHandler = index => {
51
54
  return (newDate, rawContext) => {
52
55
  const newDateRange = index === 0 ? [newDate, value[1]] : [value[0], newDate];
53
- setValue(newDateRange);
54
56
  const context = _extends({}, rawContext, {
55
57
  validationError: validateTimeRange({
56
58
  adapter,
57
59
  value: newDateRange,
58
- props: sharedProps
60
+ props: _extends({}, sharedProps, {
61
+ timezone
62
+ })
59
63
  })
60
64
  });
61
- onChange == null ? void 0 : onChange(newDateRange, context);
65
+ handleValueChange(newDateRange, context);
62
66
  };
63
67
  };
64
68
  const handleStartDateChange = useEventCallback(buildChangeHandler(0));
65
69
  const handleEndDateChange = useEventCallback(buildChangeHandler(1));
66
70
  const validationError = useValidation(_extends({}, sharedProps, {
67
- value
71
+ value,
72
+ timezone
68
73
  }), validateTimeRange, rangeValueManager.isSameError, rangeValueManager.defaultErrorState);
69
74
  const startFieldProps = _extends({
70
75
  error: !!validationError[0]
@@ -73,6 +78,7 @@ export const useMultiInputTimeRangeField = ({
73
78
  shouldRespectLeadingZeros,
74
79
  disabled,
75
80
  readOnly,
81
+ timezone,
76
82
  unstableFieldRef: unstableStartFieldRef,
77
83
  value: valueProp === undefined ? undefined : valueProp[0],
78
84
  defaultValue: defaultValue === undefined ? undefined : defaultValue[0],
@@ -85,6 +91,7 @@ export const useMultiInputTimeRangeField = ({
85
91
  shouldRespectLeadingZeros,
86
92
  disabled,
87
93
  readOnly,
94
+ timezone,
88
95
  unstableFieldRef: unstableEndFieldRef,
89
96
  value: valueProp === undefined ? undefined : valueProp[1],
90
97
  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 = "MTY4Njg2MjgwMDAwMA==";
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
@@ -1,6 +1,7 @@
1
- import { Validator, BaseDateValidationProps } from '@mui/x-date-pickers/internals';
1
+ import { TimezoneProps } from '@mui/x-date-pickers/models';
2
+ import { Validator, BaseDateValidationProps, DefaultizedProps } from '@mui/x-date-pickers/internals';
2
3
  import { DateRange, DayRangeValidationProps } from '../../models';
3
4
  import { DateRangeValidationError } from '../../../models';
4
- export interface DateRangeComponentValidationProps<TDate> extends DayRangeValidationProps<TDate>, Required<BaseDateValidationProps<TDate>> {
5
+ export interface DateRangeComponentValidationProps<TDate> extends DayRangeValidationProps<TDate>, Required<BaseDateValidationProps<TDate>>, DefaultizedProps<TimezoneProps, 'timezone'> {
5
6
  }
6
7
  export declare const validateDateRange: Validator<DateRange<any>, any, DateRangeValidationError, DateRangeComponentValidationProps<any>>;
@@ -1,7 +1,8 @@
1
- import { Validator, BaseDateValidationProps, TimeValidationProps } from '@mui/x-date-pickers/internals';
1
+ import { TimezoneProps } from '@mui/x-date-pickers/models';
2
+ import { Validator, BaseDateValidationProps, TimeValidationProps, DefaultizedProps } from '@mui/x-date-pickers/internals';
2
3
  import { DayRangeValidationProps } from '../../models/dateRange';
3
4
  import { DateRange } from '../../models/range';
4
5
  import { DateTimeRangeValidationError } from '../../../models';
5
- export interface DateTimeRangeComponentValidationProps<TDate> extends DayRangeValidationProps<TDate>, TimeValidationProps<TDate>, Required<BaseDateValidationProps<TDate>> {
6
+ export interface DateTimeRangeComponentValidationProps<TDate> extends DayRangeValidationProps<TDate>, TimeValidationProps<TDate>, Required<BaseDateValidationProps<TDate>>, DefaultizedProps<TimezoneProps, 'timezone'> {
6
7
  }
7
8
  export declare const validateDateTimeRange: Validator<DateRange<any>, any, DateTimeRangeValidationError, DateTimeRangeComponentValidationProps<any>>;
@@ -1,6 +1,7 @@
1
- import { Validator, BaseTimeValidationProps } from '@mui/x-date-pickers/internals';
1
+ import { TimezoneProps } from '@mui/x-date-pickers/models';
2
+ import { Validator, BaseTimeValidationProps, DefaultizedProps } from '@mui/x-date-pickers/internals';
2
3
  import { DateRange } from '../../models/range';
3
4
  import { TimeRangeValidationError } from '../../../models';
4
- export interface TimeRangeComponentValidationProps extends Required<BaseTimeValidationProps> {
5
+ export interface TimeRangeComponentValidationProps extends Required<BaseTimeValidationProps>, DefaultizedProps<TimezoneProps, 'timezone'> {
5
6
  }
6
7
  export declare const validateTimeRange: Validator<DateRange<any>, any, TimeRangeValidationError, TimeRangeComponentValidationProps>;
@@ -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 != null ? 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) => {
@@ -2,19 +2,18 @@ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
5
- var _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"],
5
+ var _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"],
6
6
  _excluded2 = ["isDragging", "rangeDragDay", "draggingDatePosition"];
7
7
  import * as React from 'react';
8
8
  import PropTypes from 'prop-types';
9
9
  import clsx from 'clsx';
10
10
  import useEventCallback from '@mui/utils/useEventCallback';
11
- import useControlled from '@mui/utils/useControlled';
12
11
  import useMediaQuery from '@mui/material/useMediaQuery';
13
12
  import { resolveComponentProps } from '@mui/base/utils';
14
13
  import { styled, useThemeProps } from '@mui/material/styles';
15
14
  import { unstable_composeClasses as composeClasses } from '@mui/utils';
16
15
  import { Watermark } from '@mui/x-license-pro';
17
- import { applyDefaultDate, DAY_MARGIN, DayCalendar, defaultReduceAnimations, PickersArrowSwitcher, PickersCalendarHeader, useCalendarState, useDefaultDates, useLocaleText, useNextMonthDisabled, usePreviousMonthDisabled, useUtils, useNow, uncapitalizeObjectKeys, DEFAULT_DESKTOP_MODE_MEDIA_QUERY, buildWarning } from '@mui/x-date-pickers/internals';
16
+ import { applyDefaultDate, DAY_MARGIN, DayCalendar, defaultReduceAnimations, PickersArrowSwitcher, PickersCalendarHeader, useCalendarState, useDefaultDates, useLocaleText, useNextMonthDisabled, usePreviousMonthDisabled, useUtils, useNow, uncapitalizeObjectKeys, DEFAULT_DESKTOP_MODE_MEDIA_QUERY, buildWarning, useControlledValueWithTimezone } from '@mui/x-date-pickers/internals';
18
17
  import { getReleaseInfo } from '../internal/utils/releaseInfo';
19
18
  import { dateRangeCalendarClasses, getDateRangeCalendarUtilityClass } from './dateRangeCalendarClasses';
20
19
  import { isEndOfRange, isRangeValid, isStartOfRange, isWithinRange } from '../internal/utils/date-utils';
@@ -46,7 +45,7 @@ var DateRangeCalendarMonthContainer = styled('div', {
46
45
  var theme = _ref.theme;
47
46
  return {
48
47
  '&:not(:last-of-type)': {
49
- borderRight: "2px solid ".concat((theme.vars || theme).palette.divider)
48
+ borderRight: "1px solid ".concat((theme.vars || theme).palette.divider)
50
49
  }
51
50
  };
52
51
  });
@@ -113,9 +112,6 @@ var useUtilityClasses = function useUtilityClasses(ownerState) {
113
112
  return composeClasses(slots, getDateRangeCalendarUtilityClass, classes);
114
113
  };
115
114
  var DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalendar(inProps, ref) {
116
- var utils = useUtils();
117
- var localeText = useLocaleText();
118
- var now = useNow();
119
115
  var props = useDateRangeCalendarDefaultizedProps(inProps, 'MuiDateRangeCalendar');
120
116
  var shouldHavePreview = useMediaQuery(DEFAULT_DESKTOP_MODE_MEDIA_QUERY, {
121
117
  defaultMatches: false
@@ -154,18 +150,24 @@ var DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalendar
154
150
  fixedWeekNumber = props.fixedWeekNumber,
155
151
  disableDragEditing = props.disableDragEditing,
156
152
  displayWeekNumber = props.displayWeekNumber,
153
+ timezoneProp = props.timezone,
157
154
  other = _objectWithoutProperties(props, _excluded);
158
- var slots = innerSlots != null ? innerSlots : uncapitalizeObjectKeys(components);
159
- var slotProps = innerSlotProps != null ? innerSlotProps : componentsProps;
160
- var _useControlled = useControlled({
161
- controlled: valueProp,
162
- default: defaultValue != null ? defaultValue : rangeValueManager.emptyValue,
155
+ var _useControlledValueWi = useControlledValueWithTimezone({
163
156
  name: 'DateRangeCalendar',
164
- state: 'value'
157
+ timezone: timezoneProp,
158
+ value: valueProp,
159
+ defaultValue: defaultValue,
160
+ onChange: onChange,
161
+ valueManager: rangeValueManager
165
162
  }),
166
- _useControlled2 = _slicedToArray(_useControlled, 2),
167
- value = _useControlled2[0],
168
- setValue = _useControlled2[1];
163
+ value = _useControlledValueWi.value,
164
+ handleValueChange = _useControlledValueWi.handleValueChange,
165
+ timezone = _useControlledValueWi.timezone;
166
+ var utils = useUtils();
167
+ var localeText = useLocaleText();
168
+ var now = useNow(timezone);
169
+ var slots = innerSlots != null ? innerSlots : uncapitalizeObjectKeys(components);
170
+ var slotProps = innerSlotProps != null ? innerSlotProps : componentsProps;
169
171
  var _useRangePosition = useRangePosition({
170
172
  rangePosition: rangePositionProp,
171
173
  defaultRangePosition: inDefaultRangePosition,
@@ -191,8 +193,7 @@ var DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalendar
191
193
  newRange = _calculateRangeChange.newRange;
192
194
  onRangePositionChange(nextSelection);
193
195
  var isFullRangeSelected = rangePosition === 'end' && isRangeValid(utils, newRange);
194
- setValue(newRange);
195
- onChange == null ? void 0 : onChange(newRange, isFullRangeSelected ? 'finish' : 'partial');
196
+ handleValueChange(newRange, isFullRangeSelected ? 'finish' : 'partial');
196
197
  });
197
198
  var handleDrop = useEventCallback(function (newDate) {
198
199
  handleSelectedDayChange(newDate, undefined, true);
@@ -209,7 +210,8 @@ var DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalendar
209
210
  onDrop: handleDrop,
210
211
  onDatePositionChange: handleDatePositionChange,
211
212
  utils: utils,
212
- dateRange: valueDayRange
213
+ dateRange: valueDayRange,
214
+ timezone: timezone
213
215
  }),
214
216
  isDragging = _useDragRange.isDragging,
215
217
  rangeDragDay = _useDragRange.rangeDragDay,
@@ -250,7 +252,8 @@ var DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalendar
250
252
  minDate: minDate,
251
253
  onMonthChange: onMonthChange,
252
254
  reduceAnimations: reduceAnimations,
253
- shouldDisableDate: wrappedShouldDisableDate
255
+ shouldDisableDate: wrappedShouldDisableDate,
256
+ timezone: timezone
254
257
  }),
255
258
  calendarState = _useCalendarState.calendarState,
256
259
  changeFocusedDay = _useCalendarState.changeFocusedDay,
@@ -291,11 +294,13 @@ var DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalendar
291
294
  }, [changeMonth, calendarState.currentMonth, utils]);
292
295
  var isNextMonthDisabled = useNextMonthDisabled(calendarState.currentMonth, {
293
296
  disableFuture: disableFuture,
294
- maxDate: maxDate
297
+ maxDate: maxDate,
298
+ timezone: timezone
295
299
  });
296
300
  var isPreviousMonthDisabled = usePreviousMonthDisabled(calendarState.currentMonth, {
297
301
  disablePast: disablePast,
298
- minDate: minDate
302
+ minDate: minDate,
303
+ timezone: timezone
299
304
  });
300
305
  var baseDateValidationProps = {
301
306
  disablePast: disablePast,
@@ -445,7 +450,8 @@ var DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalendar
445
450
  disableFuture: disableFuture,
446
451
  reduceAnimations: reduceAnimations,
447
452
  slots: slots,
448
- slotProps: slotProps
453
+ slotProps: slotProps,
454
+ timezone: timezone
449
455
  }) : /*#__PURE__*/_jsx(DateRangeCalendarArrowSwitcher, {
450
456
  onGoToPrevious: selectPreviousMonth,
451
457
  onGoToNext: selectNextMonth,
@@ -477,7 +483,8 @@ var DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalendar
477
483
  slotProps: slotPropsForDayCalendar,
478
484
  autoFocus: month === focusedMonth,
479
485
  fixedWeekNumber: fixedWeekNumber,
480
- displayWeekNumber: displayWeekNumber
486
+ displayWeekNumber: displayWeekNumber,
487
+ timezone: timezone
481
488
  }), index)]
482
489
  }, month);
483
490
  })]
@@ -667,6 +674,14 @@ process.env.NODE_ENV !== "production" ? DateRangeCalendar.propTypes = {
667
674
  * The system prop that allows defining system overrides as well as additional CSS styles.
668
675
  */
669
676
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
677
+ /**
678
+ * Choose which timezone to use for the value.
679
+ * Example: "default", "system", "UTC", "America/New_York".
680
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
681
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
682
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
683
+ */
684
+ timezone: PropTypes.string,
670
685
  /**
671
686
  * The selected value.
672
687
  * Used when the component is controlled.
@@ -3,13 +3,13 @@ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
3
  import * as React from 'react';
4
4
  import useEventCallback from '@mui/utils/useEventCallback';
5
5
  import { isEndOfRange, isStartOfRange } from '../internal/utils/date-utils';
6
- var resolveDateFromTarget = function resolveDateFromTarget(target, utils) {
6
+ var resolveDateFromTarget = function resolveDateFromTarget(target, utils, timezone) {
7
7
  var timestampString = target.dataset.timestamp;
8
8
  if (!timestampString) {
9
9
  return null;
10
10
  }
11
11
  var timestamp = +timestampString;
12
- return utils.date(new Date(timestamp));
12
+ return utils.dateWithTimezone(new Date(timestamp).toISOString(), timezone);
13
13
  };
14
14
  var isSameAsDraggingDate = function isSameAsDraggingDate(event) {
15
15
  var timestampString = event.target.dataset.timestamp;
@@ -50,7 +50,8 @@ var useDragRangeEvents = function useDragRangeEvents(_ref) {
50
50
  onDatePositionChange = _ref.onDatePositionChange,
51
51
  onDrop = _ref.onDrop,
52
52
  disableDragEditing = _ref.disableDragEditing,
53
- dateRange = _ref.dateRange;
53
+ dateRange = _ref.dateRange,
54
+ timezone = _ref.timezone;
54
55
  var emptyDragImgRef = React.useRef(null);
55
56
  React.useEffect(function () {
56
57
  // Preload the image - required for Safari support: https://stackoverflow.com/a/40923520/3303436
@@ -67,7 +68,7 @@ var useDragRangeEvents = function useDragRangeEvents(_ref) {
67
68
  return shouldInitDragging && (isSelectedStartDate || isSelectedEndDate);
68
69
  };
69
70
  var handleDragStart = useEventCallback(function (event) {
70
- var newDate = resolveDateFromTarget(event.target, utils);
71
+ var newDate = resolveDateFromTarget(event.target, utils, timezone);
71
72
  if (!isElementDraggable(newDate)) {
72
73
  return;
73
74
  }
@@ -91,7 +92,7 @@ var useDragRangeEvents = function useDragRangeEvents(_ref) {
91
92
  if (!target) {
92
93
  return;
93
94
  }
94
- var newDate = resolveDateFromTarget(target, utils);
95
+ var newDate = resolveDateFromTarget(target, utils, timezone);
95
96
  if (!isElementDraggable(newDate)) {
96
97
  return;
97
98
  }
@@ -110,14 +111,14 @@ var useDragRangeEvents = function useDragRangeEvents(_ref) {
110
111
  event.preventDefault();
111
112
  event.stopPropagation();
112
113
  event.dataTransfer.dropEffect = 'move';
113
- setRangeDragDay(resolveDateFromTarget(event.target, utils));
114
+ setRangeDragDay(resolveDateFromTarget(event.target, utils, timezone));
114
115
  });
115
116
  var handleTouchMove = useEventCallback(function (event) {
116
117
  var target = resolveElementFromTouch(event);
117
118
  if (!isDragging || !target) {
118
119
  return;
119
120
  }
120
- var newDate = resolveDateFromTarget(target, utils);
121
+ var newDate = resolveDateFromTarget(target, utils, timezone);
121
122
  if (newDate) {
122
123
  setRangeDragDay(newDate);
123
124
  }
@@ -150,7 +151,7 @@ var useDragRangeEvents = function useDragRangeEvents(_ref) {
150
151
 
151
152
  // make sure the focused element is the element where touch ended
152
153
  target.focus();
153
- var newDate = resolveDateFromTarget(target, utils);
154
+ var newDate = resolveDateFromTarget(target, utils, timezone);
154
155
  if (newDate) {
155
156
  onDrop(newDate);
156
157
  }
@@ -177,7 +178,7 @@ var useDragRangeEvents = function useDragRangeEvents(_ref) {
177
178
  if (isSameAsDraggingDate(event)) {
178
179
  return;
179
180
  }
180
- var newDate = resolveDateFromTarget(event.target, utils);
181
+ var newDate = resolveDateFromTarget(event.target, utils, timezone);
181
182
  if (newDate) {
182
183
  onDrop(newDate);
183
184
  }
@@ -199,7 +200,8 @@ export var useDragRange = function useDragRange(_ref2) {
199
200
  utils = _ref2.utils,
200
201
  onDatePositionChange = _ref2.onDatePositionChange,
201
202
  onDrop = _ref2.onDrop,
202
- dateRange = _ref2.dateRange;
203
+ dateRange = _ref2.dateRange,
204
+ timezone = _ref2.timezone;
203
205
  var _React$useState = React.useState(false),
204
206
  _React$useState2 = _slicedToArray(_React$useState, 2),
205
207
  isDragging = _React$useState2[0],
@@ -235,7 +237,8 @@ export var useDragRange = function useDragRange(_ref2) {
235
237
  isDragging: isDragging,
236
238
  setRangeDragDay: handleRangeDragDayChange,
237
239
  disableDragEditing: disableDragEditing,
238
- dateRange: dateRange
240
+ dateRange: dateRange,
241
+ timezone: timezone
239
242
  });
240
243
  return React.useMemo(function () {
241
244
  return _extends({
@@ -306,6 +306,14 @@ process.env.NODE_ENV !== "production" ? DateRangePicker.propTypes = {
306
306
  * The system prop that allows defining system overrides as well as additional CSS styles.
307
307
  */
308
308
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.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.string,
309
317
  /**
310
318
  * The selected value.
311
319
  * Used when the component is controlled.
@@ -315,6 +315,14 @@ DesktopDateRangePicker.propTypes = {
315
315
  * The system prop that allows defining system overrides as well as additional CSS styles.
316
316
  */
317
317
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
318
+ /**
319
+ * Choose which timezone to use for the value.
320
+ * Example: "default", "system", "UTC", "America/New_York".
321
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
322
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
323
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
324
+ */
325
+ timezone: PropTypes.string,
318
326
  /**
319
327
  * The selected value.
320
328
  * Used when the component is controlled.
@@ -320,6 +320,14 @@ MobileDateRangePicker.propTypes = {
320
320
  * The system prop that allows defining system overrides as well as additional CSS styles.
321
321
  */
322
322
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
323
+ /**
324
+ * Choose which timezone to use for the value.
325
+ * Example: "default", "system", "UTC", "America/New_York".
326
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
327
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
328
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
329
+ */
330
+ timezone: PropTypes.string,
323
331
  /**
324
332
  * The selected value.
325
333
  * Used when the component is controlled.
@@ -300,6 +300,14 @@ process.env.NODE_ENV !== "production" ? MultiInputDateRangeField.propTypes = {
300
300
  * The system prop, which allows defining system overrides as well as additional CSS styles.
301
301
  */
302
302
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
303
+ /**
304
+ * Choose which timezone to use for the value.
305
+ * Example: "default", "system", "UTC", "America/New_York".
306
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
307
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
308
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
309
+ */
310
+ timezone: PropTypes.string,
303
311
  unstableEndFieldRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
304
312
  unstableStartFieldRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
305
313
  /**
@@ -349,6 +349,14 @@ process.env.NODE_ENV !== "production" ? MultiInputDateTimeRangeField.propTypes =
349
349
  * The system prop, which allows defining system overrides as well as additional CSS styles.
350
350
  */
351
351
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
352
+ /**
353
+ * Choose which timezone to use for the value.
354
+ * Example: "default", "system", "UTC", "America/New_York".
355
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
356
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
357
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
358
+ */
359
+ timezone: PropTypes.string,
352
360
  unstableEndFieldRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
353
361
  unstableStartFieldRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
354
362
  /**
@@ -325,6 +325,14 @@ process.env.NODE_ENV !== "production" ? MultiInputTimeRangeField.propTypes = {
325
325
  * The system prop, which allows defining system overrides as well as additional CSS styles.
326
326
  */
327
327
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.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.string,
328
336
  unstableEndFieldRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
329
337
  unstableStartFieldRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
330
338
  /**
@@ -290,6 +290,14 @@ process.env.NODE_ENV !== "production" ? SingleInputDateRangeField.propTypes = {
290
290
  * The system prop that allows defining system overrides as well as additional CSS styles.
291
291
  */
292
292
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
293
+ /**
294
+ * Choose which timezone to use for the value.
295
+ * Example: "default", "system", "UTC", "America/New_York".
296
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
297
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
298
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
299
+ */
300
+ timezone: PropTypes.string,
293
301
  /**
294
302
  * The ref object used to imperatively interact with the field.
295
303
  */
@@ -339,6 +339,14 @@ process.env.NODE_ENV !== "production" ? SingleInputDateTimeRangeField.propTypes
339
339
  * The system prop that allows defining system overrides as well as additional CSS styles.
340
340
  */
341
341
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
342
+ /**
343
+ * Choose which timezone to use for the value.
344
+ * Example: "default", "system", "UTC", "America/New_York".
345
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
346
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
347
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
348
+ */
349
+ timezone: PropTypes.string,
342
350
  /**
343
351
  * The ref object used to imperatively interact with the field.
344
352
  */
@@ -315,6 +315,14 @@ process.env.NODE_ENV !== "production" ? SingleInputTimeRangeField.propTypes = {
315
315
  * The system prop that allows defining system overrides as well as additional CSS styles.
316
316
  */
317
317
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
318
+ /**
319
+ * Choose which timezone to use for the value.
320
+ * Example: "default", "system", "UTC", "America/New_York".
321
+ * If you pass values from other timezones to some props, they will be converted to this timezone before being used.
322
+ * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
323
+ * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
324
+ */
325
+ timezone: PropTypes.string,
318
326
  /**
319
327
  * The ref object used to imperatively interact with the field.
320
328
  */