@mui/x-date-pickers-pro 7.0.0-alpha.9 → 7.0.0-beta.1

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 (165) hide show
  1. package/CHANGELOG.md +386 -38
  2. package/DateRangeCalendar/DateRangeCalendar.js +79 -13
  3. package/DateRangeCalendar/DateRangeCalendar.types.d.ts +15 -14
  4. package/DateTimeRangePicker/DateTimeRangePicker.d.ts +7 -0
  5. package/DateTimeRangePicker/DateTimeRangePicker.js +414 -0
  6. package/DateTimeRangePicker/DateTimeRangePicker.types.d.ts +24 -0
  7. package/DateTimeRangePicker/DateTimeRangePicker.types.js +1 -0
  8. package/DateTimeRangePicker/DateTimeRangePickerTabs.d.ts +32 -0
  9. package/DateTimeRangePicker/DateTimeRangePickerTabs.js +183 -0
  10. package/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.d.ts +20 -0
  11. package/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +59 -0
  12. package/DateTimeRangePicker/DateTimeRangePickerToolbar.d.ts +15 -0
  13. package/DateTimeRangePicker/DateTimeRangePickerToolbar.js +176 -0
  14. package/DateTimeRangePicker/dateTimeRangePickerTabsClasses.d.ts +13 -0
  15. package/DateTimeRangePicker/dateTimeRangePickerTabsClasses.js +6 -0
  16. package/DateTimeRangePicker/dateTimeRangePickerToolbarClasses.d.ts +11 -0
  17. package/DateTimeRangePicker/dateTimeRangePickerToolbarClasses.js +5 -0
  18. package/DateTimeRangePicker/index.d.ts +10 -0
  19. package/DateTimeRangePicker/index.js +5 -0
  20. package/DateTimeRangePicker/package.json +6 -0
  21. package/DateTimeRangePicker/shared.d.ts +60 -0
  22. package/DateTimeRangePicker/shared.js +56 -0
  23. package/DesktopDateRangePicker/DesktopDateRangePicker.types.d.ts +1 -1
  24. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.d.ts +7 -0
  25. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +491 -0
  26. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.types.d.ts +25 -0
  27. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.types.js +1 -0
  28. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.d.ts +8 -0
  29. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.js +52 -0
  30. package/DesktopDateTimeRangePicker/index.d.ts +2 -0
  31. package/DesktopDateTimeRangePicker/index.js +1 -0
  32. package/DesktopDateTimeRangePicker/package.json +6 -0
  33. package/MobileDateRangePicker/MobileDateRangePicker.js +1 -5
  34. package/MobileDateRangePicker/MobileDateRangePicker.types.d.ts +1 -6
  35. package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.d.ts +7 -0
  36. package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +490 -0
  37. package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.types.d.ts +20 -0
  38. package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.types.js +1 -0
  39. package/MobileDateTimeRangePicker/index.d.ts +2 -0
  40. package/MobileDateTimeRangePicker/index.js +1 -0
  41. package/MobileDateTimeRangePicker/package.json +6 -0
  42. package/MultiInputDateRangeField/MultiInputDateRangeField.types.d.ts +2 -5
  43. package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.types.d.ts +2 -5
  44. package/MultiInputTimeRangeField/MultiInputTimeRangeField.types.d.ts +2 -5
  45. package/README.md +2 -2
  46. package/SingleInputDateRangeField/SingleInputDateRangeField.d.ts +2 -1
  47. package/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.d.ts +2 -1
  48. package/SingleInputTimeRangeField/SingleInputTimeRangeField.d.ts +2 -1
  49. package/StaticDateRangePicker/StaticDateRangePicker.js +1 -1
  50. package/StaticDateRangePicker/StaticDateRangePicker.types.d.ts +5 -0
  51. package/dateRangeViewRenderers/dateRangeViewRenderers.d.ts +2 -4
  52. package/dateRangeViewRenderers/dateRangeViewRenderers.js +10 -2
  53. package/index.d.ts +3 -0
  54. package/index.js +4 -1
  55. package/internals/constants/dimensions.d.ts +3 -0
  56. package/internals/constants/dimensions.js +5 -0
  57. package/internals/hooks/models/index.d.ts +1 -0
  58. package/internals/hooks/models/index.js +1 -0
  59. package/internals/hooks/models/useRangePicker.d.ts +21 -0
  60. package/internals/hooks/models/useRangePicker.js +1 -0
  61. package/internals/hooks/useDesktopRangePicker/index.d.ts +1 -1
  62. package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +17 -3
  63. package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.types.d.ts +8 -14
  64. package/internals/hooks/useEnrichedRangePickerFieldProps.d.ts +5 -2
  65. package/internals/hooks/useEnrichedRangePickerFieldProps.js +41 -11
  66. package/internals/hooks/useMobileRangePicker/index.d.ts +1 -1
  67. package/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +4 -0
  68. package/internals/hooks/useMobileRangePicker/useMobileRangePicker.types.d.ts +8 -14
  69. package/internals/hooks/useMultiInputRangeField/useMultiInputRangeField.types.d.ts +2 -6
  70. package/internals/models/dateTimeRange.d.ts +3 -1
  71. package/internals/models/fields.d.ts +7 -2
  72. package/internals/utils/date-range-manager.d.ts +2 -1
  73. package/internals/utils/date-range-manager.js +12 -1
  74. package/internals/utils/releaseInfo.js +1 -1
  75. package/legacy/DateRangeCalendar/DateRangeCalendar.js +77 -12
  76. package/legacy/DateTimeRangePicker/DateTimeRangePicker.js +413 -0
  77. package/legacy/DateTimeRangePicker/DateTimeRangePicker.types.js +1 -0
  78. package/legacy/DateTimeRangePicker/DateTimeRangePickerTabs.js +191 -0
  79. package/legacy/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +57 -0
  80. package/legacy/DateTimeRangePicker/DateTimeRangePickerToolbar.js +184 -0
  81. package/legacy/DateTimeRangePicker/dateTimeRangePickerTabsClasses.js +6 -0
  82. package/legacy/DateTimeRangePicker/dateTimeRangePickerToolbarClasses.js +5 -0
  83. package/legacy/DateTimeRangePicker/index.js +5 -0
  84. package/legacy/DateTimeRangePicker/shared.js +54 -0
  85. package/legacy/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +491 -0
  86. package/legacy/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.types.js +1 -0
  87. package/legacy/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.js +48 -0
  88. package/legacy/DesktopDateTimeRangePicker/index.js +1 -0
  89. package/legacy/MobileDateRangePicker/MobileDateRangePicker.js +1 -5
  90. package/legacy/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +484 -0
  91. package/legacy/MobileDateTimeRangePicker/MobileDateTimeRangePicker.types.js +1 -0
  92. package/legacy/MobileDateTimeRangePicker/index.js +1 -0
  93. package/legacy/StaticDateRangePicker/StaticDateRangePicker.js +1 -1
  94. package/legacy/dateRangeViewRenderers/dateRangeViewRenderers.js +10 -2
  95. package/legacy/index.js +4 -1
  96. package/legacy/internals/constants/dimensions.js +5 -0
  97. package/legacy/internals/hooks/models/index.js +1 -0
  98. package/legacy/internals/hooks/models/useRangePicker.js +1 -0
  99. package/legacy/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +17 -3
  100. package/legacy/internals/hooks/useEnrichedRangePickerFieldProps.js +43 -11
  101. package/legacy/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +4 -0
  102. package/legacy/internals/utils/date-range-manager.js +13 -1
  103. package/legacy/internals/utils/releaseInfo.js +1 -1
  104. package/modern/DateRangeCalendar/DateRangeCalendar.js +78 -12
  105. package/modern/DateTimeRangePicker/DateTimeRangePicker.js +414 -0
  106. package/modern/DateTimeRangePicker/DateTimeRangePicker.types.js +1 -0
  107. package/modern/DateTimeRangePicker/DateTimeRangePickerTabs.js +183 -0
  108. package/modern/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +58 -0
  109. package/modern/DateTimeRangePicker/DateTimeRangePickerToolbar.js +176 -0
  110. package/modern/DateTimeRangePicker/dateTimeRangePickerTabsClasses.js +6 -0
  111. package/modern/DateTimeRangePicker/dateTimeRangePickerToolbarClasses.js +5 -0
  112. package/modern/DateTimeRangePicker/index.js +5 -0
  113. package/modern/DateTimeRangePicker/shared.js +55 -0
  114. package/modern/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +483 -0
  115. package/modern/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.types.js +1 -0
  116. package/modern/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.js +51 -0
  117. package/modern/DesktopDateTimeRangePicker/index.js +1 -0
  118. package/modern/MobileDateRangePicker/MobileDateRangePicker.js +1 -5
  119. package/modern/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +486 -0
  120. package/modern/MobileDateTimeRangePicker/MobileDateTimeRangePicker.types.js +1 -0
  121. package/modern/MobileDateTimeRangePicker/index.js +1 -0
  122. package/modern/StaticDateRangePicker/StaticDateRangePicker.js +1 -1
  123. package/modern/dateRangeViewRenderers/dateRangeViewRenderers.js +10 -2
  124. package/modern/index.js +4 -1
  125. package/modern/internals/constants/dimensions.js +5 -0
  126. package/modern/internals/hooks/models/index.js +1 -0
  127. package/modern/internals/hooks/models/useRangePicker.js +1 -0
  128. package/modern/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +16 -2
  129. package/modern/internals/hooks/useEnrichedRangePickerFieldProps.js +40 -9
  130. package/modern/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +4 -0
  131. package/modern/internals/utils/date-range-manager.js +12 -1
  132. package/modern/internals/utils/releaseInfo.js +1 -1
  133. package/node/DateRangeCalendar/DateRangeCalendar.js +78 -12
  134. package/node/DateTimeRangePicker/DateTimeRangePicker.js +422 -0
  135. package/node/DateTimeRangePicker/DateTimeRangePicker.types.js +5 -0
  136. package/node/DateTimeRangePicker/DateTimeRangePickerTabs.js +190 -0
  137. package/node/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +64 -0
  138. package/node/DateTimeRangePicker/DateTimeRangePickerToolbar.js +183 -0
  139. package/node/DateTimeRangePicker/dateTimeRangePickerTabsClasses.js +14 -0
  140. package/node/DateTimeRangePicker/dateTimeRangePickerToolbarClasses.js +12 -0
  141. package/node/DateTimeRangePicker/index.js +52 -0
  142. package/node/DateTimeRangePicker/shared.js +62 -0
  143. package/node/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +490 -0
  144. package/node/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.types.js +5 -0
  145. package/node/DesktopDateTimeRangePicker/DesktopDateTimeRangePickerLayout.js +59 -0
  146. package/node/DesktopDateTimeRangePicker/index.js +12 -0
  147. package/node/MobileDateRangePicker/MobileDateRangePicker.js +1 -5
  148. package/node/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +494 -0
  149. package/node/MobileDateTimeRangePicker/MobileDateTimeRangePicker.types.js +5 -0
  150. package/node/MobileDateTimeRangePicker/index.js +12 -0
  151. package/node/StaticDateRangePicker/StaticDateRangePicker.js +1 -1
  152. package/node/dateRangeViewRenderers/dateRangeViewRenderers.js +10 -2
  153. package/node/index.js +37 -1
  154. package/node/internals/constants/dimensions.js +16 -0
  155. package/node/internals/hooks/models/index.js +5 -0
  156. package/node/internals/hooks/models/useRangePicker.js +5 -0
  157. package/node/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +16 -2
  158. package/node/internals/hooks/useEnrichedRangePickerFieldProps.js +40 -9
  159. package/node/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +4 -0
  160. package/node/internals/utils/date-range-manager.js +12 -1
  161. package/node/internals/utils/releaseInfo.js +1 -1
  162. package/package.json +7 -7
  163. package/themeAugmentation/components.d.ts +22 -3
  164. package/themeAugmentation/overrides.d.ts +7 -0
  165. 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
+ }