@mui/x-date-pickers-pro 7.0.0-beta.6 → 7.0.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 (107) hide show
  1. package/CHANGELOG.md +311 -12
  2. package/DateRangeCalendar/DateRangeCalendar.js +34 -74
  3. package/DateRangeCalendar/DateRangeCalendar.types.d.ts +3 -2
  4. package/DateRangeCalendar/useDragRange.js +1 -2
  5. package/DateRangePicker/DateRangePicker.js +1 -1
  6. package/DateRangePicker/shared.js +3 -5
  7. package/DateTimeRangePicker/DateTimeRangePicker.d.ts +10 -0
  8. package/DateTimeRangePicker/DateTimeRangePicker.js +11 -1
  9. package/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.d.ts +4 -5
  10. package/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +2 -3
  11. package/DateTimeRangePicker/DateTimeRangePickerToolbar.js +2 -2
  12. package/DateTimeRangePicker/shared.d.ts +5 -4
  13. package/DateTimeRangePicker/shared.js +9 -10
  14. package/DesktopDateRangePicker/DesktopDateRangePicker.js +6 -10
  15. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.d.ts +10 -0
  16. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +31 -28
  17. package/MobileDateRangePicker/MobileDateRangePicker.js +5 -9
  18. package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.d.ts +10 -0
  19. package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +20 -14
  20. package/MultiInputDateRangeField/MultiInputDateRangeField.js +21 -17
  21. package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +21 -17
  22. package/MultiInputTimeRangeField/MultiInputTimeRangeField.js +20 -16
  23. package/PickersRangeCalendarHeader/PickersRangeCalendarHeader.d.ts +8 -0
  24. package/PickersRangeCalendarHeader/PickersRangeCalendarHeader.js +124 -0
  25. package/PickersRangeCalendarHeader/PickersRangeCalendarHeader.types.d.ts +18 -0
  26. package/PickersRangeCalendarHeader/PickersRangeCalendarHeader.types.js +1 -0
  27. package/PickersRangeCalendarHeader/index.d.ts +2 -0
  28. package/PickersRangeCalendarHeader/index.js +1 -0
  29. package/PickersRangeCalendarHeader/package.json +6 -0
  30. package/README.md +1 -1
  31. package/SingleInputDateRangeField/SingleInputDateRangeField.js +8 -4
  32. package/SingleInputDateRangeField/useSingleInputDateRangeField.js +6 -2
  33. package/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +8 -4
  34. package/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.js +6 -2
  35. package/SingleInputTimeRangeField/SingleInputTimeRangeField.js +7 -3
  36. package/SingleInputTimeRangeField/useSingleInputTimeRangeField.js +6 -2
  37. package/StaticDateRangePicker/StaticDateRangePicker.js +4 -5
  38. package/index.d.ts +1 -0
  39. package/index.js +2 -1
  40. package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +9 -11
  41. package/internals/hooks/useEnrichedRangePickerFieldProps.js +25 -31
  42. package/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +9 -10
  43. package/internals/hooks/useMultiInputFieldSelectedSections.js +3 -6
  44. package/internals/hooks/useRangePosition.js +3 -5
  45. package/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +14 -18
  46. package/internals/models/dateRange.d.ts +3 -3
  47. package/internals/models/dateTimeRange.d.ts +2 -2
  48. package/internals/models/timeRange.d.ts +2 -2
  49. package/internals/utils/releaseInfo.js +1 -1
  50. package/internals/utils/validation/validateDateRange.js +2 -2
  51. package/internals/utils/validation/validateDateTimeRange.js +2 -2
  52. package/internals/utils/valueManagers.d.ts +3 -1
  53. package/internals/utils/valueManagers.js +9 -7
  54. package/models/fields.d.ts +8 -1
  55. package/modern/DateRangeCalendar/DateRangeCalendar.js +40 -72
  56. package/modern/DateRangePicker/DateRangePicker.js +1 -1
  57. package/modern/DateTimeRangePicker/DateTimeRangePicker.js +11 -1
  58. package/modern/DesktopDateRangePicker/DesktopDateRangePicker.js +1 -1
  59. package/modern/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +20 -9
  60. package/modern/MobileDateRangePicker/MobileDateRangePicker.js +1 -1
  61. package/modern/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +15 -5
  62. package/modern/MultiInputDateRangeField/MultiInputDateRangeField.js +14 -6
  63. package/modern/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +14 -6
  64. package/modern/MultiInputTimeRangeField/MultiInputTimeRangeField.js +13 -5
  65. package/modern/PickersRangeCalendarHeader/PickersRangeCalendarHeader.js +124 -0
  66. package/modern/PickersRangeCalendarHeader/PickersRangeCalendarHeader.types.js +1 -0
  67. package/modern/PickersRangeCalendarHeader/index.js +1 -0
  68. package/modern/SingleInputDateRangeField/SingleInputDateRangeField.js +6 -1
  69. package/modern/SingleInputDateRangeField/useSingleInputDateRangeField.js +6 -2
  70. package/modern/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +6 -1
  71. package/modern/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.js +6 -2
  72. package/modern/SingleInputTimeRangeField/SingleInputTimeRangeField.js +5 -0
  73. package/modern/SingleInputTimeRangeField/useSingleInputTimeRangeField.js +6 -2
  74. package/modern/StaticDateRangePicker/StaticDateRangePicker.js +1 -1
  75. package/modern/index.js +2 -1
  76. package/modern/internals/utils/releaseInfo.js +1 -1
  77. package/modern/internals/utils/valueManagers.js +7 -5
  78. package/node/DateRangeCalendar/DateRangeCalendar.js +39 -71
  79. package/node/DateRangePicker/DateRangePicker.js +1 -1
  80. package/node/DateTimeRangePicker/DateTimeRangePicker.js +11 -1
  81. package/node/DesktopDateRangePicker/DesktopDateRangePicker.js +1 -1
  82. package/node/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +20 -9
  83. package/node/MobileDateRangePicker/MobileDateRangePicker.js +1 -1
  84. package/node/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +15 -5
  85. package/node/MultiInputDateRangeField/MultiInputDateRangeField.js +14 -6
  86. package/node/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +14 -6
  87. package/node/MultiInputTimeRangeField/MultiInputTimeRangeField.js +13 -5
  88. package/node/PickersRangeCalendarHeader/PickersRangeCalendarHeader.js +132 -0
  89. package/node/PickersRangeCalendarHeader/PickersRangeCalendarHeader.types.js +5 -0
  90. package/node/PickersRangeCalendarHeader/index.js +12 -0
  91. package/node/SingleInputDateRangeField/SingleInputDateRangeField.js +6 -1
  92. package/node/SingleInputDateRangeField/useSingleInputDateRangeField.js +7 -1
  93. package/node/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +6 -1
  94. package/node/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.js +7 -1
  95. package/node/SingleInputTimeRangeField/SingleInputTimeRangeField.js +5 -0
  96. package/node/SingleInputTimeRangeField/useSingleInputTimeRangeField.js +7 -1
  97. package/node/StaticDateRangePicker/StaticDateRangePicker.js +1 -1
  98. package/node/index.js +13 -1
  99. package/node/internals/utils/releaseInfo.js +1 -1
  100. package/node/internals/utils/valueManagers.js +9 -6
  101. package/package.json +7 -7
  102. package/themeAugmentation/components.d.ts +3 -0
  103. package/themeAugmentation/props.d.ts +2 -0
  104. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.d.ts +0 -9
  105. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.js +0 -52
  106. package/modern/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.js +0 -51
  107. package/node/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.js +0 -59
@@ -31,22 +31,19 @@ const MultiInputDateRangeFieldRoot = styled( /*#__PURE__*/React.forwardRef((prop
31
31
  ref: ref,
32
32
  spacing: 2,
33
33
  direction: "row",
34
- alignItems: "baseline"
34
+ alignItems: "center"
35
35
  }, props))), {
36
36
  name: 'MuiMultiInputDateRangeField',
37
37
  slot: 'Root',
38
38
  overridesResolver: (props, styles) => styles.root
39
39
  })({});
40
- const MultiInputDateRangeFieldSeparator = styled(props => {
41
- var _props$children;
42
- return /*#__PURE__*/_jsx(Typography, _extends({}, props, {
43
- children: (_props$children = props.children) != null ? _props$children : ' – '
44
- }));
45
- }, {
40
+ const MultiInputDateRangeFieldSeparator = styled(Typography, {
46
41
  name: 'MuiMultiInputDateRangeField',
47
42
  slot: 'Separator',
48
43
  overridesResolver: (props, styles) => styles.separator
49
- })({});
44
+ })({
45
+ lineHeight: '1.4375em' // 23px
46
+ });
50
47
  /**
51
48
  * Demos:
52
49
  *
@@ -58,7 +55,6 @@ const MultiInputDateRangeFieldSeparator = styled(props => {
58
55
  * - [MultiInputDateRangeField API](https://mui.com/x/api/multi-input-date-range-field/)
59
56
  */
60
57
  const MultiInputDateRangeField = /*#__PURE__*/React.forwardRef(function MultiInputDateRangeField(inProps, ref) {
61
- var _slots$root, _slots$textField, _slots$separator;
62
58
  const themeProps = useThemeProps({
63
59
  props: inProps,
64
60
  name: 'MuiMultiInputDateRangeField'
@@ -77,10 +73,10 @@ const MultiInputDateRangeField = /*#__PURE__*/React.forwardRef(function MultiInp
77
73
  otherForwardedProps = _objectWithoutPropertiesLoose(forwardedProps, _excluded);
78
74
  const ownerState = themeProps;
79
75
  const classes = useUtilityClasses(ownerState);
80
- const Root = (_slots$root = slots == null ? void 0 : slots.root) != null ? _slots$root : MultiInputDateRangeFieldRoot;
76
+ const Root = slots?.root ?? MultiInputDateRangeFieldRoot;
81
77
  const rootProps = useSlotProps({
82
78
  elementType: Root,
83
- externalSlotProps: slotProps == null ? void 0 : slotProps.root,
79
+ externalSlotProps: slotProps?.root,
84
80
  externalForwardedProps: otherForwardedProps,
85
81
  additionalProps: {
86
82
  ref
@@ -88,25 +84,28 @@ const MultiInputDateRangeField = /*#__PURE__*/React.forwardRef(function MultiInp
88
84
  ownerState,
89
85
  className: clsx(className, classes.root)
90
86
  });
91
- const TextField = (_slots$textField = slots == null ? void 0 : slots.textField) != null ? _slots$textField : inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField;
87
+ const TextField = slots?.textField ?? (inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField);
92
88
  const startTextFieldProps = useSlotProps({
93
89
  elementType: TextField,
94
- externalSlotProps: slotProps == null ? void 0 : slotProps.textField,
90
+ externalSlotProps: slotProps?.textField,
95
91
  ownerState: _extends({}, ownerState, {
96
92
  position: 'start'
97
93
  })
98
94
  });
99
95
  const endTextFieldProps = useSlotProps({
100
96
  elementType: TextField,
101
- externalSlotProps: slotProps == null ? void 0 : slotProps.textField,
97
+ externalSlotProps: slotProps?.textField,
102
98
  ownerState: _extends({}, ownerState, {
103
99
  position: 'end'
104
100
  })
105
101
  });
106
- const Separator = (_slots$separator = slots == null ? void 0 : slots.separator) != null ? _slots$separator : MultiInputDateRangeFieldSeparator;
102
+ const Separator = slots?.separator ?? MultiInputDateRangeFieldSeparator;
107
103
  const separatorProps = useSlotProps({
108
104
  elementType: Separator,
109
- externalSlotProps: slotProps == null ? void 0 : slotProps.separator,
105
+ externalSlotProps: slotProps?.separator,
106
+ additionalProps: {
107
+ children: ` ${internalProps.dateSeparator ?? '–'} `
108
+ },
110
109
  ownerState,
111
110
  className: classes.separator
112
111
  });
@@ -142,6 +141,11 @@ process.env.NODE_ENV !== "production" ? MultiInputDateRangeField.propTypes = {
142
141
  classes: PropTypes.object,
143
142
  className: PropTypes.string,
144
143
  component: PropTypes.elementType,
144
+ /**
145
+ * String displayed between the start and the end dates.
146
+ * @default "–"
147
+ */
148
+ dateSeparator: PropTypes.string,
145
149
  /**
146
150
  * The default value. Use when the component is not controlled.
147
151
  */
@@ -239,7 +243,7 @@ process.env.NODE_ENV !== "production" ? MultiInputDateRangeField.propTypes = {
239
243
  /**
240
244
  * Disable specific date.
241
245
  *
242
- * Warning: This function can be called multiple times (e.g. when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
246
+ * Warning: This function can be called multiple times (for example when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
243
247
  *
244
248
  * @template TDate
245
249
  * @param {TDate} day The date to test.
@@ -31,22 +31,19 @@ const MultiInputDateTimeRangeFieldRoot = styled( /*#__PURE__*/React.forwardRef((
31
31
  ref: ref,
32
32
  spacing: 2,
33
33
  direction: "row",
34
- alignItems: "baseline"
34
+ alignItems: "center"
35
35
  }, props))), {
36
36
  name: 'MuiMultiInputDateTimeRangeField',
37
37
  slot: 'Root',
38
38
  overridesResolver: (props, styles) => styles.root
39
39
  })({});
40
- const MultiInputDateTimeRangeFieldSeparator = styled(props => {
41
- var _props$children;
42
- return /*#__PURE__*/_jsx(Typography, _extends({}, props, {
43
- children: (_props$children = props.children) != null ? _props$children : ' – '
44
- }));
45
- }, {
40
+ const MultiInputDateTimeRangeFieldSeparator = styled(Typography, {
46
41
  name: 'MuiMultiInputDateTimeRangeField',
47
42
  slot: 'Separator',
48
43
  overridesResolver: (props, styles) => styles.separator
49
- })({});
44
+ })({
45
+ lineHeight: '1.4375em' // 23px
46
+ });
50
47
  /**
51
48
  * Demos:
52
49
  *
@@ -58,7 +55,6 @@ const MultiInputDateTimeRangeFieldSeparator = styled(props => {
58
55
  * - [MultiInputDateTimeRangeField API](https://mui.com/x/api/multi-input-date-time-range-field/)
59
56
  */
60
57
  const MultiInputDateTimeRangeField = /*#__PURE__*/React.forwardRef(function MultiInputDateTimeRangeField(inProps, ref) {
61
- var _slots$root, _slots$textField, _slots$separator;
62
58
  const themeProps = useThemeProps({
63
59
  props: inProps,
64
60
  name: 'MuiMultiInputDateTimeRangeField'
@@ -77,10 +73,10 @@ const MultiInputDateTimeRangeField = /*#__PURE__*/React.forwardRef(function Mult
77
73
  otherForwardedProps = _objectWithoutPropertiesLoose(forwardedProps, _excluded);
78
74
  const ownerState = themeProps;
79
75
  const classes = useUtilityClasses(ownerState);
80
- const Root = (_slots$root = slots == null ? void 0 : slots.root) != null ? _slots$root : MultiInputDateTimeRangeFieldRoot;
76
+ const Root = slots?.root ?? MultiInputDateTimeRangeFieldRoot;
81
77
  const rootProps = useSlotProps({
82
78
  elementType: Root,
83
- externalSlotProps: slotProps == null ? void 0 : slotProps.root,
79
+ externalSlotProps: slotProps?.root,
84
80
  externalForwardedProps: otherForwardedProps,
85
81
  additionalProps: {
86
82
  ref
@@ -88,25 +84,28 @@ const MultiInputDateTimeRangeField = /*#__PURE__*/React.forwardRef(function Mult
88
84
  ownerState,
89
85
  className: clsx(className, classes.root)
90
86
  });
91
- const TextField = (_slots$textField = slots == null ? void 0 : slots.textField) != null ? _slots$textField : inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField;
87
+ const TextField = slots?.textField ?? (inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField);
92
88
  const startTextFieldProps = useSlotProps({
93
89
  elementType: TextField,
94
- externalSlotProps: slotProps == null ? void 0 : slotProps.textField,
90
+ externalSlotProps: slotProps?.textField,
95
91
  ownerState: _extends({}, ownerState, {
96
92
  position: 'start'
97
93
  })
98
94
  });
99
95
  const endTextFieldProps = useSlotProps({
100
96
  elementType: TextField,
101
- externalSlotProps: slotProps == null ? void 0 : slotProps.textField,
97
+ externalSlotProps: slotProps?.textField,
102
98
  ownerState: _extends({}, ownerState, {
103
99
  position: 'end'
104
100
  })
105
101
  });
106
- const Separator = (_slots$separator = slots == null ? void 0 : slots.separator) != null ? _slots$separator : MultiInputDateTimeRangeFieldSeparator;
102
+ const Separator = slots?.separator ?? MultiInputDateTimeRangeFieldSeparator;
107
103
  const separatorProps = useSlotProps({
108
104
  elementType: Separator,
109
- externalSlotProps: slotProps == null ? void 0 : slotProps.separator,
105
+ externalSlotProps: slotProps?.separator,
106
+ additionalProps: {
107
+ children: ` ${internalProps.dateSeparator ?? '–'} `
108
+ },
110
109
  ownerState,
111
110
  className: classes.separator
112
111
  });
@@ -147,6 +146,11 @@ process.env.NODE_ENV !== "production" ? MultiInputDateTimeRangeField.propTypes =
147
146
  classes: PropTypes.object,
148
147
  className: PropTypes.string,
149
148
  component: PropTypes.elementType,
149
+ /**
150
+ * String displayed between the start and the end dates.
151
+ * @default "–"
152
+ */
153
+ dateSeparator: PropTypes.string,
150
154
  /**
151
155
  * The default value. Use when the component is not controlled.
152
156
  */
@@ -272,7 +276,7 @@ process.env.NODE_ENV !== "production" ? MultiInputDateTimeRangeField.propTypes =
272
276
  /**
273
277
  * Disable specific date.
274
278
  *
275
- * Warning: This function can be called multiple times (e.g. when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
279
+ * Warning: This function can be called multiple times (for example when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
276
280
  *
277
281
  * @template TDate
278
282
  * @param {TDate} day The date to test.
@@ -31,22 +31,19 @@ const MultiInputTimeRangeFieldRoot = styled( /*#__PURE__*/React.forwardRef((prop
31
31
  ref: ref,
32
32
  spacing: 2,
33
33
  direction: "row",
34
- alignItems: "baseline"
34
+ alignItems: "center"
35
35
  }, props))), {
36
36
  name: 'MuiMultiInputTimeRangeField',
37
37
  slot: 'Root',
38
38
  overridesResolver: (props, styles) => styles.root
39
39
  })({});
40
- const MultiInputTimeRangeFieldSeparator = styled(props => {
41
- var _props$children;
42
- return /*#__PURE__*/_jsx(Typography, _extends({}, props, {
43
- children: (_props$children = props.children) != null ? _props$children : ' – '
44
- }));
45
- }, {
40
+ const MultiInputTimeRangeFieldSeparator = styled(Typography, {
46
41
  name: 'MuiMultiInputTimeRangeField',
47
42
  slot: 'Separator',
48
43
  overridesResolver: (props, styles) => styles.separator
49
- })({});
44
+ })({
45
+ lineHeight: '1.4375em' // 23px
46
+ });
50
47
  /**
51
48
  * Demos:
52
49
  *
@@ -58,7 +55,6 @@ const MultiInputTimeRangeFieldSeparator = styled(props => {
58
55
  * - [MultiInputTimeRangeField API](https://mui.com/x/api/multi-input-time-range-field/)
59
56
  */
60
57
  const MultiInputTimeRangeField = /*#__PURE__*/React.forwardRef(function MultiInputTimeRangeField(inProps, ref) {
61
- var _slots$root, _slots$textField, _slots$separator;
62
58
  const themeProps = useThemeProps({
63
59
  props: inProps,
64
60
  name: 'MuiMultiInputTimeRangeField'
@@ -77,10 +73,10 @@ const MultiInputTimeRangeField = /*#__PURE__*/React.forwardRef(function MultiInp
77
73
  otherForwardedProps = _objectWithoutPropertiesLoose(forwardedProps, _excluded);
78
74
  const ownerState = themeProps;
79
75
  const classes = useUtilityClasses(ownerState);
80
- const Root = (_slots$root = slots == null ? void 0 : slots.root) != null ? _slots$root : MultiInputTimeRangeFieldRoot;
76
+ const Root = slots?.root ?? MultiInputTimeRangeFieldRoot;
81
77
  const rootProps = useSlotProps({
82
78
  elementType: Root,
83
- externalSlotProps: slotProps == null ? void 0 : slotProps.root,
79
+ externalSlotProps: slotProps?.root,
84
80
  externalForwardedProps: otherForwardedProps,
85
81
  additionalProps: {
86
82
  ref
@@ -88,25 +84,28 @@ const MultiInputTimeRangeField = /*#__PURE__*/React.forwardRef(function MultiInp
88
84
  ownerState,
89
85
  className: clsx(className, classes.root)
90
86
  });
91
- const TextField = (_slots$textField = slots == null ? void 0 : slots.textField) != null ? _slots$textField : inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField;
87
+ const TextField = slots?.textField ?? (inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField);
92
88
  const startTextFieldProps = useSlotProps({
93
89
  elementType: TextField,
94
- externalSlotProps: slotProps == null ? void 0 : slotProps.textField,
90
+ externalSlotProps: slotProps?.textField,
95
91
  ownerState: _extends({}, ownerState, {
96
92
  position: 'start'
97
93
  })
98
94
  });
99
95
  const endTextFieldProps = useSlotProps({
100
96
  elementType: TextField,
101
- externalSlotProps: slotProps == null ? void 0 : slotProps.textField,
97
+ externalSlotProps: slotProps?.textField,
102
98
  ownerState: _extends({}, ownerState, {
103
99
  position: 'end'
104
100
  })
105
101
  });
106
- const Separator = (_slots$separator = slots == null ? void 0 : slots.separator) != null ? _slots$separator : MultiInputTimeRangeFieldSeparator;
102
+ const Separator = slots?.separator ?? MultiInputTimeRangeFieldSeparator;
107
103
  const separatorProps = useSlotProps({
108
104
  elementType: Separator,
109
- externalSlotProps: slotProps == null ? void 0 : slotProps.separator,
105
+ externalSlotProps: slotProps?.separator,
106
+ additionalProps: {
107
+ children: ` ${internalProps.dateSeparator ?? '–'} `
108
+ },
110
109
  ownerState,
111
110
  className: classes.separator
112
111
  });
@@ -147,6 +146,11 @@ process.env.NODE_ENV !== "production" ? MultiInputTimeRangeField.propTypes = {
147
146
  classes: PropTypes.object,
148
147
  className: PropTypes.string,
149
148
  component: PropTypes.elementType,
149
+ /**
150
+ * String displayed between the start and the end dates.
151
+ * @default "–"
152
+ */
153
+ dateSeparator: PropTypes.string,
150
154
  /**
151
155
  * The default value. Use when the component is not controlled.
152
156
  */
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import { PickerValidDate } from '@mui/x-date-pickers/models';
3
+ import { PickersRangeCalendarHeaderProps } from './PickersRangeCalendarHeader.types';
4
+ type PickersRangeCalendarHeaderComponent = (<TDate extends PickerValidDate>(props: PickersRangeCalendarHeaderProps<TDate> & React.RefAttributes<HTMLDivElement>) => React.JSX.Element) & {
5
+ propTypes?: any;
6
+ };
7
+ declare const PickersRangeCalendarHeader: PickersRangeCalendarHeaderComponent;
8
+ export { PickersRangeCalendarHeader };
@@ -0,0 +1,124 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
+ const _excluded = ["calendars", "month", "monthIndex"];
4
+ import * as React from 'react';
5
+ import PropTypes from 'prop-types';
6
+ import { styled } from '@mui/material/styles';
7
+ import { PickersCalendarHeader } from '@mui/x-date-pickers/PickersCalendarHeader';
8
+ import { PickersArrowSwitcher, useLocaleText, useNextMonthDisabled, usePreviousMonthDisabled, useUtils } from '@mui/x-date-pickers/internals';
9
+ import { jsx as _jsx } from "react/jsx-runtime";
10
+ const PickersRangeCalendarHeaderContentMultipleCalendars = styled(PickersArrowSwitcher)({
11
+ padding: '12px 16px 4px 16px',
12
+ display: 'flex',
13
+ alignItems: 'center',
14
+ justifyContent: 'space-between'
15
+ });
16
+ const PickersRangeCalendarHeader = /*#__PURE__*/React.forwardRef(function PickersRangeCalendarHeader(props, ref) {
17
+ const utils = useUtils();
18
+ const localeText = useLocaleText();
19
+ const {
20
+ calendars,
21
+ month,
22
+ monthIndex
23
+ } = props,
24
+ other = _objectWithoutPropertiesLoose(props, _excluded);
25
+ const {
26
+ format,
27
+ slots,
28
+ slotProps,
29
+ currentMonth,
30
+ onMonthChange,
31
+ disableFuture,
32
+ disablePast,
33
+ minDate,
34
+ maxDate,
35
+ timezone
36
+ } = props;
37
+ const isNextMonthDisabled = useNextMonthDisabled(currentMonth, {
38
+ disableFuture,
39
+ maxDate,
40
+ timezone
41
+ });
42
+ const isPreviousMonthDisabled = usePreviousMonthDisabled(currentMonth, {
43
+ disablePast,
44
+ minDate,
45
+ timezone
46
+ });
47
+ if (calendars === 1) {
48
+ return /*#__PURE__*/_jsx(PickersCalendarHeader, _extends({}, other, {
49
+ ref: ref
50
+ }));
51
+ }
52
+ const selectNextMonth = () => onMonthChange(utils.addMonths(currentMonth, 1), 'left');
53
+ const selectPreviousMonth = () => onMonthChange(utils.addMonths(currentMonth, -1), 'right');
54
+ return /*#__PURE__*/_jsx(PickersRangeCalendarHeaderContentMultipleCalendars, {
55
+ ref: ref,
56
+ onGoToPrevious: selectPreviousMonth,
57
+ onGoToNext: selectNextMonth,
58
+ isPreviousHidden: monthIndex !== 0,
59
+ isPreviousDisabled: isPreviousMonthDisabled,
60
+ previousLabel: localeText.previousMonth,
61
+ isNextHidden: monthIndex !== calendars - 1,
62
+ isNextDisabled: isNextMonthDisabled,
63
+ nextLabel: localeText.nextMonth,
64
+ slots: slots,
65
+ slotProps: slotProps,
66
+ children: utils.formatByString(month, format ?? `${utils.formats.month} ${utils.formats.year}`)
67
+ });
68
+ });
69
+ process.env.NODE_ENV !== "production" ? PickersRangeCalendarHeader.propTypes = {
70
+ // ----------------------------- Warning --------------------------------
71
+ // | These PropTypes are generated from the TypeScript type definitions |
72
+ // | To update them edit the TypeScript types and run "yarn proptypes" |
73
+ // ----------------------------------------------------------------------
74
+ /**
75
+ * The number of calendars rendered.
76
+ */
77
+ calendars: PropTypes.oneOf([1, 2, 3]).isRequired,
78
+ /**
79
+ * Override or extend the styles applied to the component.
80
+ */
81
+ classes: PropTypes.object,
82
+ className: PropTypes.string,
83
+ currentMonth: PropTypes.object.isRequired,
84
+ disabled: PropTypes.bool,
85
+ disableFuture: PropTypes.bool,
86
+ disablePast: PropTypes.bool,
87
+ /**
88
+ * Format used to display the date.
89
+ * @default `${adapter.formats.month} ${adapter.formats.year}`
90
+ */
91
+ format: PropTypes.string,
92
+ labelId: PropTypes.string,
93
+ maxDate: PropTypes.object.isRequired,
94
+ minDate: PropTypes.object.isRequired,
95
+ /**
96
+ * Month used for this header.
97
+ */
98
+ month: PropTypes.object.isRequired,
99
+ /**
100
+ * Index of the month used for this header.
101
+ */
102
+ monthIndex: PropTypes.number.isRequired,
103
+ onMonthChange: PropTypes.func.isRequired,
104
+ onViewChange: PropTypes.func,
105
+ reduceAnimations: PropTypes.bool.isRequired,
106
+ /**
107
+ * The props used for each component slot.
108
+ * @default {}
109
+ */
110
+ slotProps: PropTypes.object,
111
+ /**
112
+ * Overridable component slots.
113
+ * @default {}
114
+ */
115
+ slots: PropTypes.object,
116
+ /**
117
+ * The system prop that allows defining system overrides as well as additional CSS styles.
118
+ */
119
+ sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
120
+ timezone: PropTypes.string.isRequired,
121
+ view: PropTypes.oneOf(['day', 'month', 'year']).isRequired,
122
+ views: PropTypes.arrayOf(PropTypes.oneOf(['day', 'month', 'year']).isRequired).isRequired
123
+ } : void 0;
124
+ export { PickersRangeCalendarHeader };
@@ -0,0 +1,18 @@
1
+ import { PickerValidDate } from '@mui/x-date-pickers/models';
2
+ import { ExportedPickersCalendarHeaderProps, PickersCalendarHeaderProps } from '@mui/x-date-pickers/PickersCalendarHeader';
3
+ export interface PickersRangeCalendarHeaderProps<TDate extends PickerValidDate> extends PickersCalendarHeaderProps<TDate> {
4
+ /**
5
+ * The number of calendars rendered.
6
+ */
7
+ calendars: 1 | 2 | 3;
8
+ /**
9
+ * Month used for this header.
10
+ */
11
+ month: TDate;
12
+ /**
13
+ * Index of the month used for this header.
14
+ */
15
+ monthIndex: number;
16
+ }
17
+ export interface ExportedPickersRangeCalendarHeaderProps<TDate extends PickerValidDate> extends ExportedPickersCalendarHeaderProps<TDate> {
18
+ }
@@ -0,0 +1,2 @@
1
+ export { PickersRangeCalendarHeader } from './PickersRangeCalendarHeader';
2
+ export type { PickersRangeCalendarHeaderProps, ExportedPickersRangeCalendarHeaderProps, } from './PickersRangeCalendarHeader.types';
@@ -0,0 +1 @@
1
+ export { PickersRangeCalendarHeader } from './PickersRangeCalendarHeader';
@@ -0,0 +1,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "./index.js",
4
+ "main": "../node/PickersRangeCalendarHeader/index.js",
5
+ "types": "./index.d.ts"
6
+ }
package/README.md CHANGED
@@ -34,7 +34,7 @@ This component has the following peer dependencies that you will need to install
34
34
 
35
35
  ```json
36
36
  "peerDependencies": {
37
- "@mui/material": "^5.15.0",
37
+ "@mui/material": "^5.15.14",
38
38
  "react": "^17.0.0 || ^18.0.0",
39
39
  "react-dom": "^17.0.0 || ^18.0.0"
40
40
  },
@@ -23,7 +23,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
23
23
  * - [SingleInputDateRangeField API](https://mui.com/x/api/single-input-date-range-field/)
24
24
  */
25
25
  const SingleInputDateRangeField = /*#__PURE__*/React.forwardRef(function SingleInputDateRangeField(inProps, inRef) {
26
- var _slots$textField;
27
26
  const themeProps = useThemeProps({
28
27
  props: inProps,
29
28
  name: 'MuiSingleInputDateRangeField'
@@ -36,10 +35,10 @@ const SingleInputDateRangeField = /*#__PURE__*/React.forwardRef(function SingleI
36
35
  } = themeProps,
37
36
  other = _objectWithoutPropertiesLoose(themeProps, _excluded);
38
37
  const ownerState = themeProps;
39
- const TextField = (_slots$textField = slots == null ? void 0 : slots.textField) != null ? _slots$textField : inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField;
38
+ const TextField = slots?.textField ?? (inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField);
40
39
  const textFieldProps = useSlotProps({
41
40
  elementType: TextField,
42
- externalSlotProps: slotProps == null ? void 0 : slotProps.textField,
41
+ externalSlotProps: slotProps?.textField,
43
42
  externalForwardedProps: other,
44
43
  ownerState,
45
44
  additionalProps: {
@@ -83,6 +82,11 @@ process.env.NODE_ENV !== "production" ? SingleInputDateRangeField.propTypes = {
83
82
  */
84
83
  color: PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']),
85
84
  component: PropTypes.elementType,
85
+ /**
86
+ * String displayed between the start and the end dates.
87
+ * @default "–"
88
+ */
89
+ dateSeparator: PropTypes.string,
86
90
  /**
87
91
  * The default value. Use when the component is not controlled.
88
92
  */
@@ -243,7 +247,7 @@ process.env.NODE_ENV !== "production" ? SingleInputDateRangeField.propTypes = {
243
247
  /**
244
248
  * Disable specific date.
245
249
  *
246
- * Warning: This function can be called multiple times (e.g. when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
250
+ * Warning: This function can be called multiple times (for example when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
247
251
  *
248
252
  * @template TDate
249
253
  * @param {TDate} day The date to test.
@@ -1,5 +1,6 @@
1
+ import * as React from 'react';
1
2
  import { useField, splitFieldInternalAndForwardedProps, useDefaultizedDateField } from '@mui/x-date-pickers/internals';
2
- import { rangeValueManager, rangeFieldValueManager } from '../internals/utils/valueManagers';
3
+ import { rangeValueManager, getRangeFieldValueManager } from '../internals/utils/valueManagers';
3
4
  import { validateDateRange } from '../internals/utils/validation/validateDateRange';
4
5
  export const useSingleInputDateRangeField = inProps => {
5
6
  const props = useDefaultizedDateField(inProps);
@@ -7,11 +8,14 @@ export const useSingleInputDateRangeField = inProps => {
7
8
  forwardedProps,
8
9
  internalProps
9
10
  } = splitFieldInternalAndForwardedProps(props, 'date');
11
+ const fieldValueManager = React.useMemo(() => getRangeFieldValueManager({
12
+ dateSeparator: internalProps.dateSeparator
13
+ }), [internalProps.dateSeparator]);
10
14
  return useField({
11
15
  forwardedProps,
12
16
  internalProps,
13
17
  valueManager: rangeValueManager,
14
- fieldValueManager: rangeFieldValueManager,
18
+ fieldValueManager,
15
19
  validator: validateDateRange,
16
20
  valueType: 'date'
17
21
  });
@@ -23,7 +23,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
23
23
  * - [SingleInputDateTimeRangeField API](https://mui.com/x/api/single-input-date-time-range-field/)
24
24
  */
25
25
  const SingleInputDateTimeRangeField = /*#__PURE__*/React.forwardRef(function SingleInputDateTimeRangeField(inProps, inRef) {
26
- var _slots$textField;
27
26
  const themeProps = useThemeProps({
28
27
  props: inProps,
29
28
  name: 'MuiSingleInputDateTimeRangeField'
@@ -36,10 +35,10 @@ const SingleInputDateTimeRangeField = /*#__PURE__*/React.forwardRef(function Sin
36
35
  } = themeProps,
37
36
  other = _objectWithoutPropertiesLoose(themeProps, _excluded);
38
37
  const ownerState = themeProps;
39
- const TextField = (_slots$textField = slots == null ? void 0 : slots.textField) != null ? _slots$textField : inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField;
38
+ const TextField = slots?.textField ?? (inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField);
40
39
  const textFieldProps = useSlotProps({
41
40
  elementType: TextField,
42
- externalSlotProps: slotProps == null ? void 0 : slotProps.textField,
41
+ externalSlotProps: slotProps?.textField,
43
42
  externalForwardedProps: other,
44
43
  ownerState,
45
44
  additionalProps: {
@@ -88,6 +87,11 @@ process.env.NODE_ENV !== "production" ? SingleInputDateTimeRangeField.propTypes
88
87
  */
89
88
  color: PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']),
90
89
  component: PropTypes.elementType,
90
+ /**
91
+ * String displayed between the start and the end dates.
92
+ * @default "–"
93
+ */
94
+ dateSeparator: PropTypes.string,
91
95
  /**
92
96
  * The default value. Use when the component is not controlled.
93
97
  */
@@ -276,7 +280,7 @@ process.env.NODE_ENV !== "production" ? SingleInputDateTimeRangeField.propTypes
276
280
  /**
277
281
  * Disable specific date.
278
282
  *
279
- * Warning: This function can be called multiple times (e.g. when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
283
+ * Warning: This function can be called multiple times (for example when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
280
284
  *
281
285
  * @template TDate
282
286
  * @param {TDate} day The date to test.
@@ -1,5 +1,6 @@
1
+ import * as React from 'react';
1
2
  import { useField, splitFieldInternalAndForwardedProps, useDefaultizedDateTimeField } from '@mui/x-date-pickers/internals';
2
- import { rangeValueManager, rangeFieldValueManager } from '../internals/utils/valueManagers';
3
+ import { rangeValueManager, getRangeFieldValueManager } from '../internals/utils/valueManagers';
3
4
  import { validateDateTimeRange } from '../internals/utils/validation/validateDateTimeRange';
4
5
  export const useSingleInputDateTimeRangeField = inProps => {
5
6
  const props = useDefaultizedDateTimeField(inProps);
@@ -7,11 +8,14 @@ export const useSingleInputDateTimeRangeField = inProps => {
7
8
  forwardedProps,
8
9
  internalProps
9
10
  } = splitFieldInternalAndForwardedProps(props, 'date-time');
11
+ const fieldValueManager = React.useMemo(() => getRangeFieldValueManager({
12
+ dateSeparator: internalProps.dateSeparator
13
+ }), [internalProps.dateSeparator]);
10
14
  return useField({
11
15
  forwardedProps,
12
16
  internalProps,
13
17
  valueManager: rangeValueManager,
14
- fieldValueManager: rangeFieldValueManager,
18
+ fieldValueManager,
15
19
  validator: validateDateTimeRange,
16
20
  valueType: 'date-time'
17
21
  });
@@ -23,7 +23,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
23
23
  * - [SingleInputTimeRangeField API](https://mui.com/x/api/single-input-time-range-field/)
24
24
  */
25
25
  const SingleInputTimeRangeField = /*#__PURE__*/React.forwardRef(function SingleInputTimeRangeField(inProps, inRef) {
26
- var _slots$textField;
27
26
  const themeProps = useThemeProps({
28
27
  props: inProps,
29
28
  name: 'MuiSingleInputTimeRangeField'
@@ -36,10 +35,10 @@ const SingleInputTimeRangeField = /*#__PURE__*/React.forwardRef(function SingleI
36
35
  } = themeProps,
37
36
  other = _objectWithoutPropertiesLoose(themeProps, _excluded);
38
37
  const ownerState = themeProps;
39
- const TextField = (_slots$textField = slots == null ? void 0 : slots.textField) != null ? _slots$textField : inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField;
38
+ const TextField = slots?.textField ?? (inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField);
40
39
  const textFieldProps = useSlotProps({
41
40
  elementType: TextField,
42
- externalSlotProps: slotProps == null ? void 0 : slotProps.textField,
41
+ externalSlotProps: slotProps?.textField,
43
42
  externalForwardedProps: other,
44
43
  ownerState,
45
44
  additionalProps: {
@@ -88,6 +87,11 @@ process.env.NODE_ENV !== "production" ? SingleInputTimeRangeField.propTypes = {
88
87
  */
89
88
  color: PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']),
90
89
  component: PropTypes.elementType,
90
+ /**
91
+ * String displayed between the start and the end dates.
92
+ * @default "–"
93
+ */
94
+ dateSeparator: PropTypes.string,
91
95
  /**
92
96
  * The default value. Use when the component is not controlled.
93
97
  */