@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.
- package/CHANGELOG.md +311 -12
- package/DateRangeCalendar/DateRangeCalendar.js +34 -74
- package/DateRangeCalendar/DateRangeCalendar.types.d.ts +3 -2
- package/DateRangeCalendar/useDragRange.js +1 -2
- package/DateRangePicker/DateRangePicker.js +1 -1
- package/DateRangePicker/shared.js +3 -5
- package/DateTimeRangePicker/DateTimeRangePicker.d.ts +10 -0
- package/DateTimeRangePicker/DateTimeRangePicker.js +11 -1
- package/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.d.ts +4 -5
- package/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +2 -3
- package/DateTimeRangePicker/DateTimeRangePickerToolbar.js +2 -2
- package/DateTimeRangePicker/shared.d.ts +5 -4
- package/DateTimeRangePicker/shared.js +9 -10
- package/DesktopDateRangePicker/DesktopDateRangePicker.js +6 -10
- package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.d.ts +10 -0
- package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +31 -28
- package/MobileDateRangePicker/MobileDateRangePicker.js +5 -9
- package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.d.ts +10 -0
- package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +20 -14
- package/MultiInputDateRangeField/MultiInputDateRangeField.js +21 -17
- package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +21 -17
- package/MultiInputTimeRangeField/MultiInputTimeRangeField.js +20 -16
- package/PickersRangeCalendarHeader/PickersRangeCalendarHeader.d.ts +8 -0
- package/PickersRangeCalendarHeader/PickersRangeCalendarHeader.js +124 -0
- package/PickersRangeCalendarHeader/PickersRangeCalendarHeader.types.d.ts +18 -0
- package/PickersRangeCalendarHeader/PickersRangeCalendarHeader.types.js +1 -0
- package/PickersRangeCalendarHeader/index.d.ts +2 -0
- package/PickersRangeCalendarHeader/index.js +1 -0
- package/PickersRangeCalendarHeader/package.json +6 -0
- package/README.md +1 -1
- package/SingleInputDateRangeField/SingleInputDateRangeField.js +8 -4
- package/SingleInputDateRangeField/useSingleInputDateRangeField.js +6 -2
- package/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +8 -4
- package/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.js +6 -2
- package/SingleInputTimeRangeField/SingleInputTimeRangeField.js +7 -3
- package/SingleInputTimeRangeField/useSingleInputTimeRangeField.js +6 -2
- package/StaticDateRangePicker/StaticDateRangePicker.js +4 -5
- package/index.d.ts +1 -0
- package/index.js +2 -1
- package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +9 -11
- package/internals/hooks/useEnrichedRangePickerFieldProps.js +25 -31
- package/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +9 -10
- package/internals/hooks/useMultiInputFieldSelectedSections.js +3 -6
- package/internals/hooks/useRangePosition.js +3 -5
- package/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +14 -18
- package/internals/models/dateRange.d.ts +3 -3
- package/internals/models/dateTimeRange.d.ts +2 -2
- package/internals/models/timeRange.d.ts +2 -2
- package/internals/utils/releaseInfo.js +1 -1
- package/internals/utils/validation/validateDateRange.js +2 -2
- package/internals/utils/validation/validateDateTimeRange.js +2 -2
- package/internals/utils/valueManagers.d.ts +3 -1
- package/internals/utils/valueManagers.js +9 -7
- package/models/fields.d.ts +8 -1
- package/modern/DateRangeCalendar/DateRangeCalendar.js +40 -72
- package/modern/DateRangePicker/DateRangePicker.js +1 -1
- package/modern/DateTimeRangePicker/DateTimeRangePicker.js +11 -1
- package/modern/DesktopDateRangePicker/DesktopDateRangePicker.js +1 -1
- package/modern/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +20 -9
- package/modern/MobileDateRangePicker/MobileDateRangePicker.js +1 -1
- package/modern/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +15 -5
- package/modern/MultiInputDateRangeField/MultiInputDateRangeField.js +14 -6
- package/modern/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +14 -6
- package/modern/MultiInputTimeRangeField/MultiInputTimeRangeField.js +13 -5
- package/modern/PickersRangeCalendarHeader/PickersRangeCalendarHeader.js +124 -0
- package/modern/PickersRangeCalendarHeader/PickersRangeCalendarHeader.types.js +1 -0
- package/modern/PickersRangeCalendarHeader/index.js +1 -0
- package/modern/SingleInputDateRangeField/SingleInputDateRangeField.js +6 -1
- package/modern/SingleInputDateRangeField/useSingleInputDateRangeField.js +6 -2
- package/modern/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +6 -1
- package/modern/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.js +6 -2
- package/modern/SingleInputTimeRangeField/SingleInputTimeRangeField.js +5 -0
- package/modern/SingleInputTimeRangeField/useSingleInputTimeRangeField.js +6 -2
- package/modern/StaticDateRangePicker/StaticDateRangePicker.js +1 -1
- package/modern/index.js +2 -1
- package/modern/internals/utils/releaseInfo.js +1 -1
- package/modern/internals/utils/valueManagers.js +7 -5
- package/node/DateRangeCalendar/DateRangeCalendar.js +39 -71
- package/node/DateRangePicker/DateRangePicker.js +1 -1
- package/node/DateTimeRangePicker/DateTimeRangePicker.js +11 -1
- package/node/DesktopDateRangePicker/DesktopDateRangePicker.js +1 -1
- package/node/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +20 -9
- package/node/MobileDateRangePicker/MobileDateRangePicker.js +1 -1
- package/node/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +15 -5
- package/node/MultiInputDateRangeField/MultiInputDateRangeField.js +14 -6
- package/node/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +14 -6
- package/node/MultiInputTimeRangeField/MultiInputTimeRangeField.js +13 -5
- package/node/PickersRangeCalendarHeader/PickersRangeCalendarHeader.js +132 -0
- package/node/PickersRangeCalendarHeader/PickersRangeCalendarHeader.types.js +5 -0
- package/node/PickersRangeCalendarHeader/index.js +12 -0
- package/node/SingleInputDateRangeField/SingleInputDateRangeField.js +6 -1
- package/node/SingleInputDateRangeField/useSingleInputDateRangeField.js +7 -1
- package/node/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +6 -1
- package/node/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.js +7 -1
- package/node/SingleInputTimeRangeField/SingleInputTimeRangeField.js +5 -0
- package/node/SingleInputTimeRangeField/useSingleInputTimeRangeField.js +7 -1
- package/node/StaticDateRangePicker/StaticDateRangePicker.js +1 -1
- package/node/index.js +13 -1
- package/node/internals/utils/releaseInfo.js +1 -1
- package/node/internals/utils/valueManagers.js +9 -6
- package/package.json +7 -7
- package/themeAugmentation/components.d.ts +3 -0
- package/themeAugmentation/props.d.ts +2 -0
- package/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.d.ts +0 -9
- package/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.js +0 -52
- package/modern/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.js +0 -51
- 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: "
|
|
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(
|
|
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 =
|
|
76
|
+
const Root = slots?.root ?? MultiInputDateRangeFieldRoot;
|
|
81
77
|
const rootProps = useSlotProps({
|
|
82
78
|
elementType: Root,
|
|
83
|
-
externalSlotProps: slotProps
|
|
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 =
|
|
87
|
+
const TextField = slots?.textField ?? (inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField);
|
|
92
88
|
const startTextFieldProps = useSlotProps({
|
|
93
89
|
elementType: TextField,
|
|
94
|
-
externalSlotProps: slotProps
|
|
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
|
|
97
|
+
externalSlotProps: slotProps?.textField,
|
|
102
98
|
ownerState: _extends({}, ownerState, {
|
|
103
99
|
position: 'end'
|
|
104
100
|
})
|
|
105
101
|
});
|
|
106
|
-
const Separator =
|
|
102
|
+
const Separator = slots?.separator ?? MultiInputDateRangeFieldSeparator;
|
|
107
103
|
const separatorProps = useSlotProps({
|
|
108
104
|
elementType: Separator,
|
|
109
|
-
externalSlotProps: slotProps
|
|
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 (
|
|
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: "
|
|
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(
|
|
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 =
|
|
76
|
+
const Root = slots?.root ?? MultiInputDateTimeRangeFieldRoot;
|
|
81
77
|
const rootProps = useSlotProps({
|
|
82
78
|
elementType: Root,
|
|
83
|
-
externalSlotProps: slotProps
|
|
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 =
|
|
87
|
+
const TextField = slots?.textField ?? (inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField);
|
|
92
88
|
const startTextFieldProps = useSlotProps({
|
|
93
89
|
elementType: TextField,
|
|
94
|
-
externalSlotProps: slotProps
|
|
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
|
|
97
|
+
externalSlotProps: slotProps?.textField,
|
|
102
98
|
ownerState: _extends({}, ownerState, {
|
|
103
99
|
position: 'end'
|
|
104
100
|
})
|
|
105
101
|
});
|
|
106
|
-
const Separator =
|
|
102
|
+
const Separator = slots?.separator ?? MultiInputDateTimeRangeFieldSeparator;
|
|
107
103
|
const separatorProps = useSlotProps({
|
|
108
104
|
elementType: Separator,
|
|
109
|
-
externalSlotProps: slotProps
|
|
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 (
|
|
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: "
|
|
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(
|
|
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 =
|
|
76
|
+
const Root = slots?.root ?? MultiInputTimeRangeFieldRoot;
|
|
81
77
|
const rootProps = useSlotProps({
|
|
82
78
|
elementType: Root,
|
|
83
|
-
externalSlotProps: slotProps
|
|
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 =
|
|
87
|
+
const TextField = slots?.textField ?? (inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField);
|
|
92
88
|
const startTextFieldProps = useSlotProps({
|
|
93
89
|
elementType: TextField,
|
|
94
|
-
externalSlotProps: slotProps
|
|
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
|
|
97
|
+
externalSlotProps: slotProps?.textField,
|
|
102
98
|
ownerState: _extends({}, ownerState, {
|
|
103
99
|
position: 'end'
|
|
104
100
|
})
|
|
105
101
|
});
|
|
106
|
-
const Separator =
|
|
102
|
+
const Separator = slots?.separator ?? MultiInputTimeRangeFieldSeparator;
|
|
107
103
|
const separatorProps = useSlotProps({
|
|
108
104
|
elementType: Separator,
|
|
109
|
-
externalSlotProps: slotProps
|
|
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 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PickersRangeCalendarHeader } from './PickersRangeCalendarHeader';
|
package/README.md
CHANGED
|
@@ -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 =
|
|
38
|
+
const TextField = slots?.textField ?? (inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField);
|
|
40
39
|
const textFieldProps = useSlotProps({
|
|
41
40
|
elementType: TextField,
|
|
42
|
-
externalSlotProps: slotProps
|
|
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 (
|
|
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,
|
|
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
|
|
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 =
|
|
38
|
+
const TextField = slots?.textField ?? (inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField);
|
|
40
39
|
const textFieldProps = useSlotProps({
|
|
41
40
|
elementType: TextField,
|
|
42
|
-
externalSlotProps: slotProps
|
|
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 (
|
|
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,
|
|
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
|
|
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 =
|
|
38
|
+
const TextField = slots?.textField ?? (inProps.enableAccessibleFieldDOMStructure ? PickersTextField : MuiTextField);
|
|
40
39
|
const textFieldProps = useSlotProps({
|
|
41
40
|
elementType: TextField,
|
|
42
|
-
externalSlotProps: slotProps
|
|
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
|
*/
|