@mui/x-date-pickers-pro 7.0.0-alpha.9 → 7.0.0-beta.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 +139 -38
- package/DateRangeCalendar/DateRangeCalendar.js +79 -13
- package/DateRangeCalendar/DateRangeCalendar.types.d.ts +15 -14
- package/DateTimeRangePicker/DateTimeRangePicker.d.ts +7 -0
- package/DateTimeRangePicker/DateTimeRangePicker.js +414 -0
- package/DateTimeRangePicker/DateTimeRangePicker.types.d.ts +24 -0
- package/DateTimeRangePicker/DateTimeRangePicker.types.js +1 -0
- package/DateTimeRangePicker/DateTimeRangePickerTabs.d.ts +32 -0
- package/DateTimeRangePicker/DateTimeRangePickerTabs.js +183 -0
- package/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.d.ts +20 -0
- package/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +59 -0
- package/DateTimeRangePicker/DateTimeRangePickerToolbar.d.ts +15 -0
- package/DateTimeRangePicker/DateTimeRangePickerToolbar.js +176 -0
- package/DateTimeRangePicker/dateTimeRangePickerTabsClasses.d.ts +13 -0
- package/DateTimeRangePicker/dateTimeRangePickerTabsClasses.js +6 -0
- package/DateTimeRangePicker/dateTimeRangePickerToolbarClasses.d.ts +11 -0
- package/DateTimeRangePicker/dateTimeRangePickerToolbarClasses.js +5 -0
- package/DateTimeRangePicker/index.d.ts +10 -0
- package/DateTimeRangePicker/index.js +5 -0
- package/DateTimeRangePicker/package.json +6 -0
- package/DateTimeRangePicker/shared.d.ts +60 -0
- package/DateTimeRangePicker/shared.js +56 -0
- package/DesktopDateRangePicker/DesktopDateRangePicker.types.d.ts +1 -1
- package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.d.ts +7 -0
- package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +491 -0
- package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.types.d.ts +25 -0
- package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.types.js +1 -0
- package/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.d.ts +8 -0
- package/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.js +52 -0
- package/DesktopDateTimeRangePicker/index.d.ts +2 -0
- package/DesktopDateTimeRangePicker/index.js +1 -0
- package/DesktopDateTimeRangePicker/package.json +6 -0
- package/MobileDateRangePicker/MobileDateRangePicker.js +1 -5
- package/MobileDateRangePicker/MobileDateRangePicker.types.d.ts +1 -6
- package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.d.ts +7 -0
- package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +490 -0
- package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.types.d.ts +20 -0
- package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.types.js +1 -0
- package/MobileDateTimeRangePicker/index.d.ts +2 -0
- package/MobileDateTimeRangePicker/index.js +1 -0
- package/MobileDateTimeRangePicker/package.json +6 -0
- package/MultiInputDateRangeField/MultiInputDateRangeField.types.d.ts +2 -5
- package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.types.d.ts +2 -5
- package/MultiInputTimeRangeField/MultiInputTimeRangeField.types.d.ts +2 -5
- package/README.md +2 -2
- package/SingleInputDateRangeField/SingleInputDateRangeField.d.ts +2 -1
- package/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.d.ts +2 -1
- package/SingleInputTimeRangeField/SingleInputTimeRangeField.d.ts +2 -1
- package/StaticDateRangePicker/StaticDateRangePicker.js +1 -1
- package/StaticDateRangePicker/StaticDateRangePicker.types.d.ts +5 -0
- package/dateRangeViewRenderers/dateRangeViewRenderers.d.ts +2 -4
- package/dateRangeViewRenderers/dateRangeViewRenderers.js +10 -2
- package/index.d.ts +3 -0
- package/index.js +4 -1
- package/internals/constants/dimensions.d.ts +3 -0
- package/internals/constants/dimensions.js +5 -0
- package/internals/hooks/models/index.d.ts +1 -0
- package/internals/hooks/models/index.js +1 -0
- package/internals/hooks/models/useRangePicker.d.ts +21 -0
- package/internals/hooks/models/useRangePicker.js +1 -0
- package/internals/hooks/useDesktopRangePicker/index.d.ts +1 -1
- package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +17 -3
- package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.types.d.ts +8 -14
- package/internals/hooks/useEnrichedRangePickerFieldProps.d.ts +5 -2
- package/internals/hooks/useEnrichedRangePickerFieldProps.js +41 -11
- package/internals/hooks/useMobileRangePicker/index.d.ts +1 -1
- package/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +4 -0
- package/internals/hooks/useMobileRangePicker/useMobileRangePicker.types.d.ts +8 -14
- package/internals/hooks/useMultiInputRangeField/useMultiInputRangeField.types.d.ts +2 -6
- package/internals/models/dateTimeRange.d.ts +3 -1
- package/internals/models/fields.d.ts +7 -2
- package/internals/utils/date-range-manager.d.ts +2 -1
- package/internals/utils/date-range-manager.js +12 -1
- package/internals/utils/releaseInfo.js +1 -1
- package/legacy/DateRangeCalendar/DateRangeCalendar.js +77 -12
- package/legacy/DateTimeRangePicker/DateTimeRangePicker.js +413 -0
- package/legacy/DateTimeRangePicker/DateTimeRangePicker.types.js +1 -0
- package/legacy/DateTimeRangePicker/DateTimeRangePickerTabs.js +191 -0
- package/legacy/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +57 -0
- package/legacy/DateTimeRangePicker/DateTimeRangePickerToolbar.js +184 -0
- package/legacy/DateTimeRangePicker/dateTimeRangePickerTabsClasses.js +6 -0
- package/legacy/DateTimeRangePicker/dateTimeRangePickerToolbarClasses.js +5 -0
- package/legacy/DateTimeRangePicker/index.js +5 -0
- package/legacy/DateTimeRangePicker/shared.js +54 -0
- package/legacy/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +491 -0
- package/legacy/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.types.js +1 -0
- package/legacy/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.js +48 -0
- package/legacy/DesktopDateTimeRangePicker/index.js +1 -0
- package/legacy/MobileDateRangePicker/MobileDateRangePicker.js +1 -5
- package/legacy/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +484 -0
- package/legacy/MobileDateTimeRangePicker/MobileDateTimeRangePicker.types.js +1 -0
- package/legacy/MobileDateTimeRangePicker/index.js +1 -0
- package/legacy/StaticDateRangePicker/StaticDateRangePicker.js +1 -1
- package/legacy/dateRangeViewRenderers/dateRangeViewRenderers.js +10 -2
- package/legacy/index.js +4 -1
- package/legacy/internals/constants/dimensions.js +5 -0
- package/legacy/internals/hooks/models/index.js +1 -0
- package/legacy/internals/hooks/models/useRangePicker.js +1 -0
- package/legacy/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +17 -3
- package/legacy/internals/hooks/useEnrichedRangePickerFieldProps.js +43 -11
- package/legacy/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +4 -0
- package/legacy/internals/utils/date-range-manager.js +13 -1
- package/legacy/internals/utils/releaseInfo.js +1 -1
- package/modern/DateRangeCalendar/DateRangeCalendar.js +78 -12
- package/modern/DateTimeRangePicker/DateTimeRangePicker.js +414 -0
- package/modern/DateTimeRangePicker/DateTimeRangePicker.types.js +1 -0
- package/modern/DateTimeRangePicker/DateTimeRangePickerTabs.js +183 -0
- package/modern/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +58 -0
- package/modern/DateTimeRangePicker/DateTimeRangePickerToolbar.js +176 -0
- package/modern/DateTimeRangePicker/dateTimeRangePickerTabsClasses.js +6 -0
- package/modern/DateTimeRangePicker/dateTimeRangePickerToolbarClasses.js +5 -0
- package/modern/DateTimeRangePicker/index.js +5 -0
- package/modern/DateTimeRangePicker/shared.js +55 -0
- package/modern/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +483 -0
- package/modern/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.types.js +1 -0
- package/modern/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.js +51 -0
- package/modern/DesktopDateTimeRangePicker/index.js +1 -0
- package/modern/MobileDateRangePicker/MobileDateRangePicker.js +1 -5
- package/modern/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +486 -0
- package/modern/MobileDateTimeRangePicker/MobileDateTimeRangePicker.types.js +1 -0
- package/modern/MobileDateTimeRangePicker/index.js +1 -0
- package/modern/StaticDateRangePicker/StaticDateRangePicker.js +1 -1
- package/modern/dateRangeViewRenderers/dateRangeViewRenderers.js +10 -2
- package/modern/index.js +4 -1
- package/modern/internals/constants/dimensions.js +5 -0
- package/modern/internals/hooks/models/index.js +1 -0
- package/modern/internals/hooks/models/useRangePicker.js +1 -0
- package/modern/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +16 -2
- package/modern/internals/hooks/useEnrichedRangePickerFieldProps.js +40 -9
- package/modern/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +4 -0
- package/modern/internals/utils/date-range-manager.js +12 -1
- package/modern/internals/utils/releaseInfo.js +1 -1
- package/node/DateRangeCalendar/DateRangeCalendar.js +78 -12
- package/node/DateTimeRangePicker/DateTimeRangePicker.js +422 -0
- package/node/DateTimeRangePicker/DateTimeRangePicker.types.js +5 -0
- package/node/DateTimeRangePicker/DateTimeRangePickerTabs.js +190 -0
- package/node/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +64 -0
- package/node/DateTimeRangePicker/DateTimeRangePickerToolbar.js +183 -0
- package/node/DateTimeRangePicker/dateTimeRangePickerTabsClasses.js +14 -0
- package/node/DateTimeRangePicker/dateTimeRangePickerToolbarClasses.js +12 -0
- package/node/DateTimeRangePicker/index.js +52 -0
- package/node/DateTimeRangePicker/shared.js +62 -0
- package/node/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +490 -0
- package/node/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.types.js +5 -0
- package/node/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.js +59 -0
- package/node/DesktopDateTimeRangePicker/index.js +12 -0
- package/node/MobileDateRangePicker/MobileDateRangePicker.js +1 -5
- package/node/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +494 -0
- package/node/MobileDateTimeRangePicker/MobileDateTimeRangePicker.types.js +5 -0
- package/node/MobileDateTimeRangePicker/index.js +12 -0
- package/node/StaticDateRangePicker/StaticDateRangePicker.js +1 -1
- package/node/dateRangeViewRenderers/dateRangeViewRenderers.js +10 -2
- package/node/index.js +37 -1
- package/node/internals/constants/dimensions.js +16 -0
- package/node/internals/hooks/models/index.js +5 -0
- package/node/internals/hooks/models/useRangePicker.js +5 -0
- package/node/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +16 -2
- package/node/internals/hooks/useEnrichedRangePickerFieldProps.js +40 -9
- package/node/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +4 -0
- package/node/internals/utils/date-range-manager.js +12 -1
- package/node/internals/utils/releaseInfo.js +1 -1
- package/package.json +6 -6
- package/themeAugmentation/components.d.ts +22 -3
- package/themeAugmentation/overrides.d.ts +7 -0
- package/themeAugmentation/props.d.ts +12 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import { styled, useThemeProps } from '@mui/material/styles';
|
|
5
|
+
import composeClasses from '@mui/utils/composeClasses';
|
|
6
|
+
import useEventCallback from '@mui/utils/useEventCallback';
|
|
7
|
+
import { TimeIcon, DateRangeIcon, ArrowLeftIcon, ArrowRightIcon } from '@mui/x-date-pickers/icons';
|
|
8
|
+
import { useLocaleText, isDatePickerView } from '@mui/x-date-pickers/internals';
|
|
9
|
+
import IconButton from '@mui/material/IconButton';
|
|
10
|
+
import Button from '@mui/material/Button';
|
|
11
|
+
import { getDateTimeRangePickerTabsUtilityClass } from './dateTimeRangePickerTabsClasses';
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
|
+
var viewToTab = function viewToTab(view, rangePosition) {
|
|
15
|
+
if (isDatePickerView(view)) {
|
|
16
|
+
return rangePosition === 'start' ? 'start-date' : 'end-date';
|
|
17
|
+
}
|
|
18
|
+
return rangePosition === 'start' ? 'start-time' : 'end-time';
|
|
19
|
+
};
|
|
20
|
+
var tabToView = function tabToView(tab) {
|
|
21
|
+
if (tab === 'start-date' || tab === 'end-date') {
|
|
22
|
+
return 'day';
|
|
23
|
+
}
|
|
24
|
+
return 'hours';
|
|
25
|
+
};
|
|
26
|
+
var useUtilityClasses = function useUtilityClasses(ownerState) {
|
|
27
|
+
var classes = ownerState.classes;
|
|
28
|
+
var slots = {
|
|
29
|
+
root: ['root'],
|
|
30
|
+
tabButton: ['tabButton'],
|
|
31
|
+
navigationButton: ['navigationButton'],
|
|
32
|
+
filler: ['filler']
|
|
33
|
+
};
|
|
34
|
+
return composeClasses(slots, getDateTimeRangePickerTabsUtilityClass, classes);
|
|
35
|
+
};
|
|
36
|
+
var DateTimeRangePickerTabsRoot = styled('div', {
|
|
37
|
+
name: 'MuiDateTimeRangePickerTabs',
|
|
38
|
+
slot: 'Root',
|
|
39
|
+
overridesResolver: function overridesResolver(_, styles) {
|
|
40
|
+
return styles.root;
|
|
41
|
+
}
|
|
42
|
+
})(function (_ref) {
|
|
43
|
+
var theme = _ref.theme;
|
|
44
|
+
return {
|
|
45
|
+
display: 'flex',
|
|
46
|
+
justifyContent: 'space-between',
|
|
47
|
+
alignItems: 'center',
|
|
48
|
+
borderBottom: "1px solid ".concat((theme.vars || theme).palette.divider),
|
|
49
|
+
minHeight: 48
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
var DateTimeRangePickerTab = styled(Button, {
|
|
53
|
+
name: 'MuiDateTimeRangePickerTabs',
|
|
54
|
+
slot: 'TabButton',
|
|
55
|
+
overridesResolver: function overridesResolver(_, styles) {
|
|
56
|
+
return styles.tabButton;
|
|
57
|
+
}
|
|
58
|
+
})({
|
|
59
|
+
textTransform: 'none'
|
|
60
|
+
});
|
|
61
|
+
var DateTimeRangePickerTabFiller = styled('div', {
|
|
62
|
+
name: 'MuiDateTimeRangePickerTabs',
|
|
63
|
+
slot: 'Filler',
|
|
64
|
+
overridesResolver: function overridesResolver(_, styles) {
|
|
65
|
+
return styles.filler;
|
|
66
|
+
}
|
|
67
|
+
})({
|
|
68
|
+
width: 40
|
|
69
|
+
});
|
|
70
|
+
var tabOptions = ['start-date', 'start-time', 'end-date', 'end-time'];
|
|
71
|
+
var DateTimeRangePickerTabs = function DateTimeRangePickerTabs(inProps) {
|
|
72
|
+
var props = useThemeProps({
|
|
73
|
+
props: inProps,
|
|
74
|
+
name: 'MuiDateTimeRangePickerTabs'
|
|
75
|
+
});
|
|
76
|
+
var _props$dateIcon = props.dateIcon,
|
|
77
|
+
dateIcon = _props$dateIcon === void 0 ? /*#__PURE__*/_jsx(DateRangeIcon, {}) : _props$dateIcon,
|
|
78
|
+
onViewChange = props.onViewChange,
|
|
79
|
+
_props$timeIcon = props.timeIcon,
|
|
80
|
+
timeIcon = _props$timeIcon === void 0 ? /*#__PURE__*/_jsx(TimeIcon, {}) : _props$timeIcon,
|
|
81
|
+
view = props.view,
|
|
82
|
+
_props$hidden = props.hidden,
|
|
83
|
+
hidden = _props$hidden === void 0 ? typeof window === 'undefined' || window.innerHeight < 667 : _props$hidden,
|
|
84
|
+
rangePosition = props.rangePosition,
|
|
85
|
+
onRangePositionChange = props.onRangePositionChange,
|
|
86
|
+
className = props.className;
|
|
87
|
+
var localeText = useLocaleText();
|
|
88
|
+
var classes = useUtilityClasses(props);
|
|
89
|
+
var value = React.useMemo(function () {
|
|
90
|
+
return viewToTab(view, rangePosition);
|
|
91
|
+
}, [view, rangePosition]);
|
|
92
|
+
var isPreviousHidden = value === 'start-date';
|
|
93
|
+
var isNextHidden = value === 'end-time';
|
|
94
|
+
var tabLabel = React.useMemo(function () {
|
|
95
|
+
switch (value) {
|
|
96
|
+
case 'start-date':
|
|
97
|
+
return localeText.startDate;
|
|
98
|
+
case 'start-time':
|
|
99
|
+
return localeText.startTime;
|
|
100
|
+
case 'end-date':
|
|
101
|
+
return localeText.endDate;
|
|
102
|
+
case 'end-time':
|
|
103
|
+
return localeText.endTime;
|
|
104
|
+
default:
|
|
105
|
+
return '';
|
|
106
|
+
}
|
|
107
|
+
}, [localeText.endDate, localeText.endTime, localeText.startDate, localeText.startTime, value]);
|
|
108
|
+
var handleRangePositionChange = useEventCallback(function (newTab) {
|
|
109
|
+
if (newTab.includes('start')) {
|
|
110
|
+
onRangePositionChange('start');
|
|
111
|
+
} else {
|
|
112
|
+
onRangePositionChange('end');
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
var changeToPreviousTab = useEventCallback(function () {
|
|
116
|
+
var previousTab = tabOptions[tabOptions.indexOf(value) - 1];
|
|
117
|
+
onViewChange(tabToView(previousTab));
|
|
118
|
+
handleRangePositionChange(previousTab);
|
|
119
|
+
});
|
|
120
|
+
var changeToNextTab = useEventCallback(function () {
|
|
121
|
+
var nextTab = tabOptions[tabOptions.indexOf(value) + 1];
|
|
122
|
+
onViewChange(tabToView(nextTab));
|
|
123
|
+
handleRangePositionChange(nextTab);
|
|
124
|
+
});
|
|
125
|
+
if (hidden) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
return /*#__PURE__*/_jsxs(DateTimeRangePickerTabsRoot, {
|
|
129
|
+
ownerState: props,
|
|
130
|
+
className: clsx(classes.root, className),
|
|
131
|
+
children: [!isPreviousHidden ? /*#__PURE__*/_jsx(IconButton, {
|
|
132
|
+
onClick: changeToPreviousTab,
|
|
133
|
+
className: classes.navigationButton,
|
|
134
|
+
title: localeText.openPreviousView,
|
|
135
|
+
children: /*#__PURE__*/_jsx(ArrowLeftIcon, {})
|
|
136
|
+
}) : /*#__PURE__*/_jsx(DateTimeRangePickerTabFiller, {
|
|
137
|
+
className: classes.filler
|
|
138
|
+
}), /*#__PURE__*/_jsx(DateTimeRangePickerTab, {
|
|
139
|
+
startIcon: isDatePickerView(view) ? dateIcon : timeIcon,
|
|
140
|
+
className: classes.tabButton,
|
|
141
|
+
size: "large",
|
|
142
|
+
children: tabLabel
|
|
143
|
+
}), !isNextHidden ? /*#__PURE__*/_jsx(IconButton, {
|
|
144
|
+
onClick: changeToNextTab,
|
|
145
|
+
className: classes.navigationButton,
|
|
146
|
+
title: localeText.openNextView,
|
|
147
|
+
children: /*#__PURE__*/_jsx(ArrowRightIcon, {})
|
|
148
|
+
}) : /*#__PURE__*/_jsx(DateTimeRangePickerTabFiller, {
|
|
149
|
+
className: classes.filler
|
|
150
|
+
})]
|
|
151
|
+
});
|
|
152
|
+
};
|
|
153
|
+
process.env.NODE_ENV !== "production" ? DateTimeRangePickerTabs.propTypes = {
|
|
154
|
+
// ----------------------------- Warning --------------------------------
|
|
155
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
156
|
+
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
157
|
+
// ----------------------------------------------------------------------
|
|
158
|
+
/**
|
|
159
|
+
* Override or extend the styles applied to the component.
|
|
160
|
+
*/
|
|
161
|
+
classes: PropTypes.object,
|
|
162
|
+
className: PropTypes.string,
|
|
163
|
+
/**
|
|
164
|
+
* Date tab icon.
|
|
165
|
+
* @default DateRangeIcon
|
|
166
|
+
*/
|
|
167
|
+
dateIcon: PropTypes.element,
|
|
168
|
+
/**
|
|
169
|
+
* Toggles visibility of the tabs allowing view switching.
|
|
170
|
+
* @default `window.innerHeight < 667` for `DesktopDateTimeRangePicker` and `MobileDateTimeRangePicker`
|
|
171
|
+
*/
|
|
172
|
+
hidden: PropTypes.bool,
|
|
173
|
+
onRangePositionChange: PropTypes.func.isRequired,
|
|
174
|
+
/**
|
|
175
|
+
* Callback called when a tab is clicked.
|
|
176
|
+
* @template TView
|
|
177
|
+
* @param {TView} view The view to open
|
|
178
|
+
*/
|
|
179
|
+
onViewChange: PropTypes.func.isRequired,
|
|
180
|
+
rangePosition: PropTypes.oneOf(['end', 'start']).isRequired,
|
|
181
|
+
/**
|
|
182
|
+
* Time tab icon.
|
|
183
|
+
* @default TimeIcon
|
|
184
|
+
*/
|
|
185
|
+
timeIcon: PropTypes.element,
|
|
186
|
+
/**
|
|
187
|
+
* Currently visible picker view.
|
|
188
|
+
*/
|
|
189
|
+
view: PropTypes.oneOf(['day', 'hours', 'meridiem', 'minutes', 'month', 'seconds', 'year']).isRequired
|
|
190
|
+
} : void 0;
|
|
191
|
+
export { DateTimeRangePickerTabs };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
+
var _excluded = ["rangePosition", "onRangePositionChange", "viewRenderer", "value", "onChange", "defaultValue", "onViewChange", "views", "className"];
|
|
4
|
+
import { isInternalTimeView, useUtils } from '@mui/x-date-pickers/internals';
|
|
5
|
+
import { isRangeValid } from '../internals/utils/date-utils';
|
|
6
|
+
import { calculateRangeChange } from '../internals/utils/date-range-manager';
|
|
7
|
+
/**
|
|
8
|
+
* @ignore - internal component.
|
|
9
|
+
*/
|
|
10
|
+
function DateTimeRangePickerTimeWrapper(props, ref) {
|
|
11
|
+
var _ref, _ref2;
|
|
12
|
+
var utils = useUtils();
|
|
13
|
+
var rangePosition = props.rangePosition,
|
|
14
|
+
onRangePositionChange = props.onRangePositionChange,
|
|
15
|
+
viewRenderer = props.viewRenderer,
|
|
16
|
+
value = props.value,
|
|
17
|
+
onChange = props.onChange,
|
|
18
|
+
defaultValue = props.defaultValue,
|
|
19
|
+
onViewChange = props.onViewChange,
|
|
20
|
+
views = props.views,
|
|
21
|
+
className = props.className,
|
|
22
|
+
other = _objectWithoutProperties(props, _excluded);
|
|
23
|
+
if (!viewRenderer) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
var currentValue = (_ref = rangePosition === 'start' ? value == null ? void 0 : value[0] : value == null ? void 0 : value[1]) != null ? _ref : null;
|
|
27
|
+
var currentDefaultValue = (_ref2 = rangePosition === 'start' ? defaultValue == null ? void 0 : defaultValue[0] : defaultValue == null ? void 0 : defaultValue[1]) != null ? _ref2 : null;
|
|
28
|
+
var handleOnChange = function handleOnChange(newDate, selectionState, selectedView) {
|
|
29
|
+
if (!onChange || !value) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
var _calculateRangeChange = calculateRangeChange({
|
|
33
|
+
newDate: newDate,
|
|
34
|
+
utils: utils,
|
|
35
|
+
range: value,
|
|
36
|
+
rangePosition: rangePosition
|
|
37
|
+
}),
|
|
38
|
+
newRange = _calculateRangeChange.newRange;
|
|
39
|
+
var isFullRangeSelected = rangePosition === 'end' && isRangeValid(utils, newRange);
|
|
40
|
+
var timeViews = views.filter(isInternalTimeView);
|
|
41
|
+
// reset view to the first time view and swap range position after selecting the last time view (start or end position)
|
|
42
|
+
if (selectedView === timeViews[timeViews.length - 1] && onViewChange) {
|
|
43
|
+
onViewChange(views[0]);
|
|
44
|
+
onRangePositionChange(rangePosition === 'start' ? 'end' : 'start');
|
|
45
|
+
}
|
|
46
|
+
onChange(newRange, isFullRangeSelected ? 'finish' : 'partial', selectedView);
|
|
47
|
+
};
|
|
48
|
+
return viewRenderer(_extends({}, other, {
|
|
49
|
+
ref: ref,
|
|
50
|
+
views: views,
|
|
51
|
+
onViewChange: onViewChange,
|
|
52
|
+
value: currentValue,
|
|
53
|
+
onChange: handleOnChange,
|
|
54
|
+
defaultValue: currentDefaultValue
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
export { DateTimeRangePickerTimeWrapper };
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
4
|
+
var _excluded = ["value", "rangePosition", "onRangePositionChange", "className", "onViewChange", "toolbarVariant", "onChange", "classes", "view"];
|
|
5
|
+
import * as React from 'react';
|
|
6
|
+
import PropTypes from 'prop-types';
|
|
7
|
+
import clsx from 'clsx';
|
|
8
|
+
import { styled, useThemeProps } from '@mui/material/styles';
|
|
9
|
+
import { unstable_composeClasses as composeClasses } from '@mui/utils';
|
|
10
|
+
import { useLocaleText, useUtils } from '@mui/x-date-pickers/internals';
|
|
11
|
+
import { DateTimePickerToolbar } from '@mui/x-date-pickers/DateTimePicker';
|
|
12
|
+
import { getDateTimeRangePickerToolbarUtilityClass } from './dateTimeRangePickerToolbarClasses';
|
|
13
|
+
import { calculateRangeChange } from '../internals/utils/date-range-manager';
|
|
14
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
16
|
+
var useUtilityClasses = function useUtilityClasses(ownerState) {
|
|
17
|
+
var classes = ownerState.classes;
|
|
18
|
+
var slots = {
|
|
19
|
+
root: ['root'],
|
|
20
|
+
startToolbar: ['startToolbar'],
|
|
21
|
+
endToolbar: ['endToolbar']
|
|
22
|
+
};
|
|
23
|
+
return composeClasses(slots, getDateTimeRangePickerToolbarUtilityClass, classes);
|
|
24
|
+
};
|
|
25
|
+
var DateTimeRangePickerToolbarRoot = styled('div', {
|
|
26
|
+
name: 'MuiDateTimeRangePickerToolbar',
|
|
27
|
+
slot: 'Root',
|
|
28
|
+
overridesResolver: function overridesResolver(_, styles) {
|
|
29
|
+
return styles.root;
|
|
30
|
+
}
|
|
31
|
+
})({
|
|
32
|
+
display: 'flex',
|
|
33
|
+
flexDirection: 'column'
|
|
34
|
+
});
|
|
35
|
+
var DateTimeRangePickerToolbarStart = styled(DateTimePickerToolbar, {
|
|
36
|
+
name: 'MuiDateTimeRangePickerToolbar',
|
|
37
|
+
slot: 'StartToolbar',
|
|
38
|
+
overridesResolver: function overridesResolver(_, styles) {
|
|
39
|
+
return styles.startToolbar;
|
|
40
|
+
}
|
|
41
|
+
})(function (_ref) {
|
|
42
|
+
var ownerState = _ref.ownerState;
|
|
43
|
+
return _extends({
|
|
44
|
+
borderBottom: 'none'
|
|
45
|
+
}, (ownerState == null ? void 0 : ownerState.toolbarVariant) !== 'desktop' ? {
|
|
46
|
+
padding: '12px 8px 0 12px'
|
|
47
|
+
} : {
|
|
48
|
+
paddingBottom: 0
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
var DateTimeRangePickerToolbarEnd = styled(DateTimePickerToolbar, {
|
|
52
|
+
name: 'MuiDateTimeRangePickerToolbar',
|
|
53
|
+
slot: 'EndToolbar',
|
|
54
|
+
overridesResolver: function overridesResolver(_, styles) {
|
|
55
|
+
return styles.endToolbar;
|
|
56
|
+
}
|
|
57
|
+
})(function (_ref2) {
|
|
58
|
+
var ownerState = _ref2.ownerState;
|
|
59
|
+
return {
|
|
60
|
+
padding: (ownerState == null ? void 0 : ownerState.toolbarVariant) !== 'desktop' ? '12px 8px 12px 12px' : undefined
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
var DateTimeRangePickerToolbar = /*#__PURE__*/React.forwardRef(function DateTimeRangePickerToolbar(inProps, ref) {
|
|
64
|
+
var props = useThemeProps({
|
|
65
|
+
props: inProps,
|
|
66
|
+
name: 'MuiDateTimeRangePickerToolbar'
|
|
67
|
+
});
|
|
68
|
+
var utils = useUtils();
|
|
69
|
+
var _props$value = _slicedToArray(props.value, 2),
|
|
70
|
+
start = _props$value[0],
|
|
71
|
+
end = _props$value[1],
|
|
72
|
+
rangePosition = props.rangePosition,
|
|
73
|
+
onRangePositionChange = props.onRangePositionChange,
|
|
74
|
+
className = props.className,
|
|
75
|
+
onViewChange = props.onViewChange,
|
|
76
|
+
toolbarVariant = props.toolbarVariant,
|
|
77
|
+
onChange = props.onChange,
|
|
78
|
+
inClasses = props.classes,
|
|
79
|
+
view = props.view,
|
|
80
|
+
other = _objectWithoutProperties(props, _excluded);
|
|
81
|
+
var localeText = useLocaleText();
|
|
82
|
+
var ownerState = props;
|
|
83
|
+
var classes = useUtilityClasses(ownerState);
|
|
84
|
+
var handleStartRangeViewChange = React.useCallback(function (newView) {
|
|
85
|
+
if (newView === 'year' || newView === 'month') {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (rangePosition !== 'start') {
|
|
89
|
+
onRangePositionChange('start');
|
|
90
|
+
}
|
|
91
|
+
onViewChange(newView);
|
|
92
|
+
}, [onRangePositionChange, onViewChange, rangePosition]);
|
|
93
|
+
var handleEndRangeViewChange = React.useCallback(function (newView) {
|
|
94
|
+
if (newView === 'year' || newView === 'month') {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (rangePosition !== 'end') {
|
|
98
|
+
onRangePositionChange('end');
|
|
99
|
+
}
|
|
100
|
+
onViewChange(newView);
|
|
101
|
+
}, [onRangePositionChange, onViewChange, rangePosition]);
|
|
102
|
+
var handleOnChange = React.useCallback(function (newDate) {
|
|
103
|
+
var _calculateRangeChange = calculateRangeChange({
|
|
104
|
+
newDate: newDate,
|
|
105
|
+
utils: utils,
|
|
106
|
+
range: props.value,
|
|
107
|
+
rangePosition: rangePosition,
|
|
108
|
+
allowRangeFlip: true
|
|
109
|
+
}),
|
|
110
|
+
nextSelection = _calculateRangeChange.nextSelection,
|
|
111
|
+
newRange = _calculateRangeChange.newRange;
|
|
112
|
+
onRangePositionChange(nextSelection);
|
|
113
|
+
onChange(newRange);
|
|
114
|
+
}, [onChange, onRangePositionChange, props.value, rangePosition, utils]);
|
|
115
|
+
return /*#__PURE__*/_jsxs(DateTimeRangePickerToolbarRoot, {
|
|
116
|
+
className: clsx(className, classes.root),
|
|
117
|
+
ownerState: ownerState,
|
|
118
|
+
ref: ref,
|
|
119
|
+
children: [/*#__PURE__*/_jsx(DateTimeRangePickerToolbarStart, _extends({}, other, {
|
|
120
|
+
value: start,
|
|
121
|
+
onViewChange: handleStartRangeViewChange,
|
|
122
|
+
toolbarTitle: localeText.start,
|
|
123
|
+
ownerState: ownerState,
|
|
124
|
+
toolbarVariant: "desktop",
|
|
125
|
+
view: rangePosition === 'start' ? view : undefined,
|
|
126
|
+
className: classes.startToolbar,
|
|
127
|
+
onChange: handleOnChange
|
|
128
|
+
})), /*#__PURE__*/_jsx(DateTimeRangePickerToolbarEnd, _extends({}, other, {
|
|
129
|
+
value: end,
|
|
130
|
+
onViewChange: handleEndRangeViewChange,
|
|
131
|
+
toolbarTitle: localeText.end,
|
|
132
|
+
ownerState: ownerState,
|
|
133
|
+
toolbarVariant: "desktop",
|
|
134
|
+
view: rangePosition === 'end' ? view : undefined,
|
|
135
|
+
className: classes.endToolbar,
|
|
136
|
+
onChange: handleOnChange
|
|
137
|
+
}))]
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
process.env.NODE_ENV !== "production" ? DateTimeRangePickerToolbar.propTypes = {
|
|
141
|
+
// ----------------------------- Warning --------------------------------
|
|
142
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
143
|
+
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
144
|
+
// ----------------------------------------------------------------------
|
|
145
|
+
ampm: PropTypes.bool,
|
|
146
|
+
classes: PropTypes.object,
|
|
147
|
+
className: PropTypes.string,
|
|
148
|
+
disabled: PropTypes.bool,
|
|
149
|
+
/**
|
|
150
|
+
* If `true`, show the toolbar even in desktop mode.
|
|
151
|
+
* @default `true` for Desktop, `false` for Mobile.
|
|
152
|
+
*/
|
|
153
|
+
hidden: PropTypes.bool,
|
|
154
|
+
isLandscape: PropTypes.bool.isRequired,
|
|
155
|
+
onChange: PropTypes.func.isRequired,
|
|
156
|
+
onRangePositionChange: PropTypes.func.isRequired,
|
|
157
|
+
/**
|
|
158
|
+
* Callback called when a toolbar is clicked
|
|
159
|
+
* @template TView
|
|
160
|
+
* @param {TView} view The view to open
|
|
161
|
+
*/
|
|
162
|
+
onViewChange: PropTypes.func.isRequired,
|
|
163
|
+
rangePosition: PropTypes.oneOf(['end', 'start']).isRequired,
|
|
164
|
+
readOnly: PropTypes.bool,
|
|
165
|
+
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
166
|
+
titleId: PropTypes.string,
|
|
167
|
+
/**
|
|
168
|
+
* Toolbar date format.
|
|
169
|
+
*/
|
|
170
|
+
toolbarFormat: PropTypes.string,
|
|
171
|
+
/**
|
|
172
|
+
* Toolbar value placeholder—it is displayed when the value is empty.
|
|
173
|
+
* @default "––"
|
|
174
|
+
*/
|
|
175
|
+
toolbarPlaceholder: PropTypes.node,
|
|
176
|
+
toolbarVariant: PropTypes.oneOf(['desktop', 'mobile']),
|
|
177
|
+
value: PropTypes.arrayOf(PropTypes.any).isRequired,
|
|
178
|
+
/**
|
|
179
|
+
* Currently visible picker view.
|
|
180
|
+
*/
|
|
181
|
+
view: PropTypes.oneOf(['day', 'hours', 'meridiem', 'minutes', 'seconds']).isRequired,
|
|
182
|
+
views: PropTypes.arrayOf(PropTypes.oneOf(['day', 'hours', 'meridiem', 'minutes', 'seconds']).isRequired).isRequired
|
|
183
|
+
} : void 0;
|
|
184
|
+
export { DateTimeRangePickerToolbar };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import generateUtilityClass from '@mui/utils/generateUtilityClass';
|
|
2
|
+
import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
|
|
3
|
+
export function getDateTimeRangePickerTabsUtilityClass(slot) {
|
|
4
|
+
return generateUtilityClass('MuiDateTimeRangePickerTabs', slot);
|
|
5
|
+
}
|
|
6
|
+
export var dateTimeRangePickerTabsClasses = generateUtilityClasses('MuiDateTimeRangePickerTabs', ['root', 'tabButton', 'navigationButton', 'filler']);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { unstable_generateUtilityClass as generateUtilityClass, unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';
|
|
2
|
+
export function getDateTimeRangePickerToolbarUtilityClass(slot) {
|
|
3
|
+
return generateUtilityClass('MuiDateTimeRangePickerToolbar', slot);
|
|
4
|
+
}
|
|
5
|
+
export var dateTimeRangePickerToolbarClasses = generateUtilityClasses('MuiDateTimeRangePickerToolbar', ['root', 'startToolbar', 'endToolbar']);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { DateTimeRangePicker } from './DateTimeRangePicker';
|
|
2
|
+
export { DateTimeRangePickerTabs } from './DateTimeRangePickerTabs';
|
|
3
|
+
export { getDateTimeRangePickerTabsUtilityClass, dateTimeRangePickerTabsClasses } from './dateTimeRangePickerTabsClasses';
|
|
4
|
+
export { DateTimeRangePickerToolbar } from './DateTimeRangePickerToolbar';
|
|
5
|
+
export { getDateTimeRangePickerToolbarUtilityClass, dateTimeRangePickerToolbarClasses } from './dateTimeRangePickerToolbarClasses';
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import { useThemeProps } from '@mui/material/styles';
|
|
3
|
+
import { useDefaultDates, useUtils, applyDefaultDate, applyDefaultViewProps, resolveTimeViewsResponse } from '@mui/x-date-pickers/internals';
|
|
4
|
+
import { DateTimeRangePickerToolbar } from './DateTimeRangePickerToolbar';
|
|
5
|
+
import { DateTimeRangePickerTabs } from './DateTimeRangePickerTabs';
|
|
6
|
+
export function useDateTimeRangePickerDefaultizedProps(props, name) {
|
|
7
|
+
var _themeProps$ampm, _themeProps$disableFu, _themeProps$disablePa, _themeProps$slotProps;
|
|
8
|
+
var utils = useUtils();
|
|
9
|
+
var defaultDates = useDefaultDates();
|
|
10
|
+
var themeProps = useThemeProps({
|
|
11
|
+
props: props,
|
|
12
|
+
name: name
|
|
13
|
+
});
|
|
14
|
+
var ampm = (_themeProps$ampm = themeProps.ampm) != null ? _themeProps$ampm : utils.is12HourCycleInCurrentLocale();
|
|
15
|
+
var _applyDefaultViewProp = applyDefaultViewProps({
|
|
16
|
+
views: themeProps.views,
|
|
17
|
+
openTo: themeProps.openTo,
|
|
18
|
+
defaultViews: ['day', 'hours', 'minutes'],
|
|
19
|
+
defaultOpenTo: 'day'
|
|
20
|
+
}),
|
|
21
|
+
openTo = _applyDefaultViewProp.openTo,
|
|
22
|
+
defaultViews = _applyDefaultViewProp.views;
|
|
23
|
+
var _resolveTimeViewsResp = resolveTimeViewsResponse({
|
|
24
|
+
thresholdToRenderTimeInASingleColumn: themeProps.thresholdToRenderTimeInASingleColumn,
|
|
25
|
+
ampm: ampm,
|
|
26
|
+
timeSteps: themeProps.timeSteps,
|
|
27
|
+
views: defaultViews
|
|
28
|
+
}),
|
|
29
|
+
shouldRenderTimeInASingleColumn = _resolveTimeViewsResp.shouldRenderTimeInASingleColumn,
|
|
30
|
+
thresholdToRenderTimeInASingleColumn = _resolveTimeViewsResp.thresholdToRenderTimeInASingleColumn,
|
|
31
|
+
views = _resolveTimeViewsResp.views,
|
|
32
|
+
timeSteps = _resolveTimeViewsResp.timeSteps;
|
|
33
|
+
return _extends({}, themeProps, {
|
|
34
|
+
timeSteps: timeSteps,
|
|
35
|
+
openTo: openTo,
|
|
36
|
+
shouldRenderTimeInASingleColumn: shouldRenderTimeInASingleColumn,
|
|
37
|
+
thresholdToRenderTimeInASingleColumn: thresholdToRenderTimeInASingleColumn,
|
|
38
|
+
views: views,
|
|
39
|
+
ampm: ampm,
|
|
40
|
+
disableFuture: (_themeProps$disableFu = themeProps.disableFuture) != null ? _themeProps$disableFu : false,
|
|
41
|
+
disablePast: (_themeProps$disablePa = themeProps.disablePast) != null ? _themeProps$disablePa : false,
|
|
42
|
+
minDate: applyDefaultDate(utils, themeProps.minDate, defaultDates.minDate),
|
|
43
|
+
maxDate: applyDefaultDate(utils, themeProps.maxDate, defaultDates.maxDate),
|
|
44
|
+
slots: _extends({
|
|
45
|
+
tabs: DateTimeRangePickerTabs,
|
|
46
|
+
toolbar: DateTimeRangePickerToolbar
|
|
47
|
+
}, themeProps.slots),
|
|
48
|
+
slotProps: _extends({}, themeProps.slotProps, {
|
|
49
|
+
toolbar: _extends({}, (_themeProps$slotProps = themeProps.slotProps) == null ? void 0 : _themeProps$slotProps.toolbar, {
|
|
50
|
+
ampm: ampm
|
|
51
|
+
})
|
|
52
|
+
})
|
|
53
|
+
});
|
|
54
|
+
}
|