@mui/x-date-pickers 8.0.0-alpha.7 → 8.0.0-alpha.8

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 (143) hide show
  1. package/CHANGELOG.md +115 -0
  2. package/DateField/DateField.js +26 -31
  3. package/DateField/DateField.types.d.ts +6 -15
  4. package/DateField/useDateField.d.ts +1 -1
  5. package/DateField/useDateField.js +2 -1
  6. package/DateTimeField/DateTimeField.js +26 -31
  7. package/DateTimeField/DateTimeField.types.d.ts +6 -15
  8. package/DateTimeField/useDateTimeField.d.ts +1 -1
  9. package/DateTimeField/useDateTimeField.js +2 -1
  10. package/DesktopDatePicker/DesktopDatePicker.js +0 -11
  11. package/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -12
  12. package/DesktopTimePicker/DesktopTimePicker.js +1 -12
  13. package/MobileDatePicker/MobileDatePicker.js +0 -9
  14. package/MobileDateTimePicker/MobileDateTimePicker.js +0 -9
  15. package/MobileTimePicker/MobileTimePicker.js +0 -9
  16. package/TimeField/TimeField.js +25 -30
  17. package/TimeField/TimeField.types.d.ts +6 -15
  18. package/TimeField/useTimeField.d.ts +1 -1
  19. package/TimeField/useTimeField.js +2 -1
  20. package/hooks/useParsedFormat.d.ts +8 -6
  21. package/hooks/useParsedFormat.js +10 -12
  22. package/hooks/usePickerActionsContext.d.ts +1 -1
  23. package/hooks/usePickerContext.d.ts +4 -2
  24. package/hooks/usePickerContext.js +2 -1
  25. package/hooks/useSplitFieldProps.d.ts +12 -3
  26. package/hooks/useSplitFieldProps.js +8 -3
  27. package/index.js +1 -1
  28. package/internals/components/PickerFieldUI.d.ts +132 -0
  29. package/internals/components/PickerFieldUI.js +306 -0
  30. package/internals/components/PickerProvider.d.ts +25 -4
  31. package/internals/components/PickerProvider.js +11 -6
  32. package/internals/hooks/useDesktopPicker/useDesktopPicker.d.ts +1 -1
  33. package/internals/hooks/useDesktopPicker/useDesktopPicker.js +21 -94
  34. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +8 -31
  35. package/internals/hooks/useField/index.d.ts +3 -1
  36. package/internals/hooks/useField/index.js +3 -2
  37. package/internals/hooks/useField/useField.d.ts +1 -10
  38. package/internals/hooks/useField/useField.js +11 -19
  39. package/internals/hooks/useField/useField.types.d.ts +11 -4
  40. package/internals/hooks/useField/useFieldInternalPropsWithDefaults.d.ts +15 -0
  41. package/internals/hooks/useField/useFieldInternalPropsWithDefaults.js +46 -0
  42. package/internals/hooks/useField/useFieldV7TextField.js +3 -3
  43. package/internals/hooks/useFieldOwnerState.d.ts +1 -2
  44. package/internals/hooks/useMobilePicker/useMobilePicker.d.ts +1 -1
  45. package/internals/hooks/useMobilePicker/useMobilePicker.js +20 -49
  46. package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +6 -14
  47. package/internals/hooks/useNullablePickerContext.d.ts +5 -0
  48. package/internals/hooks/useNullablePickerContext.js +10 -0
  49. package/internals/hooks/usePicker/usePicker.d.ts +1 -2
  50. package/internals/hooks/usePicker/usePicker.js +0 -3
  51. package/internals/hooks/usePicker/usePicker.types.d.ts +2 -3
  52. package/internals/hooks/usePicker/usePickerProvider.d.ts +8 -2
  53. package/internals/hooks/usePicker/usePickerProvider.js +22 -2
  54. package/internals/hooks/usePicker/usePickerValue.js +5 -11
  55. package/internals/hooks/usePicker/usePickerValue.types.d.ts +5 -2
  56. package/internals/hooks/useUtils.d.ts +4 -3
  57. package/internals/index.d.ts +6 -3
  58. package/internals/index.js +1 -1
  59. package/internals/models/fields.d.ts +3 -16
  60. package/internals/models/manager.d.ts +3 -0
  61. package/internals/models/props/basePickerProps.d.ts +0 -12
  62. package/locales/utils/getPickersLocalization.d.ts +0 -7
  63. package/locales/utils/getPickersLocalization.js +0 -13
  64. package/managers/index.d.ts +3 -3
  65. package/managers/useDateManager.d.ts +1 -1
  66. package/managers/useDateManager.js +9 -1
  67. package/managers/useDateTimeManager.d.ts +1 -1
  68. package/managers/useDateTimeManager.js +9 -1
  69. package/managers/useTimeManager.d.ts +1 -1
  70. package/managers/useTimeManager.js +9 -1
  71. package/models/fields.d.ts +4 -4
  72. package/models/manager.d.ts +12 -3
  73. package/modern/DateField/DateField.js +26 -31
  74. package/modern/DateField/useDateField.js +2 -1
  75. package/modern/DateTimeField/DateTimeField.js +26 -31
  76. package/modern/DateTimeField/useDateTimeField.js +2 -1
  77. package/modern/DesktopDatePicker/DesktopDatePicker.js +0 -11
  78. package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -12
  79. package/modern/DesktopTimePicker/DesktopTimePicker.js +1 -12
  80. package/modern/MobileDatePicker/MobileDatePicker.js +0 -9
  81. package/modern/MobileDateTimePicker/MobileDateTimePicker.js +0 -9
  82. package/modern/MobileTimePicker/MobileTimePicker.js +0 -9
  83. package/modern/TimeField/TimeField.js +25 -30
  84. package/modern/TimeField/useTimeField.js +2 -1
  85. package/modern/hooks/useParsedFormat.js +10 -12
  86. package/modern/hooks/usePickerContext.js +2 -1
  87. package/modern/hooks/useSplitFieldProps.js +8 -3
  88. package/modern/index.js +1 -1
  89. package/modern/internals/components/PickerFieldUI.js +306 -0
  90. package/modern/internals/components/PickerProvider.js +11 -6
  91. package/modern/internals/hooks/useDesktopPicker/useDesktopPicker.js +21 -94
  92. package/modern/internals/hooks/useField/index.js +3 -2
  93. package/modern/internals/hooks/useField/useField.js +11 -19
  94. package/modern/internals/hooks/useField/useFieldInternalPropsWithDefaults.js +46 -0
  95. package/modern/internals/hooks/useField/useFieldV7TextField.js +3 -3
  96. package/modern/internals/hooks/useMobilePicker/useMobilePicker.js +20 -49
  97. package/modern/internals/hooks/useNullablePickerContext.js +10 -0
  98. package/modern/internals/hooks/usePicker/usePicker.js +0 -3
  99. package/modern/internals/hooks/usePicker/usePickerProvider.js +22 -2
  100. package/modern/internals/hooks/usePicker/usePickerValue.js +5 -11
  101. package/modern/internals/index.js +1 -1
  102. package/modern/locales/utils/getPickersLocalization.js +0 -13
  103. package/modern/managers/useDateManager.js +9 -1
  104. package/modern/managers/useDateTimeManager.js +9 -1
  105. package/modern/managers/useTimeManager.js +9 -1
  106. package/node/DateField/DateField.js +26 -31
  107. package/node/DateField/useDateField.js +2 -1
  108. package/node/DateTimeField/DateTimeField.js +26 -31
  109. package/node/DateTimeField/useDateTimeField.js +2 -1
  110. package/node/DesktopDatePicker/DesktopDatePicker.js +0 -11
  111. package/node/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -12
  112. package/node/DesktopTimePicker/DesktopTimePicker.js +1 -12
  113. package/node/MobileDatePicker/MobileDatePicker.js +0 -9
  114. package/node/MobileDateTimePicker/MobileDateTimePicker.js +0 -9
  115. package/node/MobileTimePicker/MobileTimePicker.js +0 -9
  116. package/node/TimeField/TimeField.js +25 -30
  117. package/node/TimeField/useTimeField.js +2 -1
  118. package/node/hooks/useParsedFormat.js +10 -12
  119. package/node/hooks/usePickerContext.js +4 -3
  120. package/node/hooks/useSplitFieldProps.js +7 -2
  121. package/node/index.js +1 -1
  122. package/node/internals/components/PickerFieldUI.js +318 -0
  123. package/node/internals/components/PickerProvider.js +13 -8
  124. package/node/internals/hooks/useDesktopPicker/useDesktopPicker.js +23 -96
  125. package/node/internals/hooks/useField/index.js +3 -2
  126. package/node/internals/hooks/useField/useField.js +12 -21
  127. package/node/internals/hooks/useField/useFieldInternalPropsWithDefaults.js +55 -0
  128. package/node/internals/hooks/useField/useFieldV7TextField.js +3 -3
  129. package/node/internals/hooks/useMobilePicker/useMobilePicker.js +20 -49
  130. package/node/internals/hooks/useNullablePickerContext.js +16 -0
  131. package/node/internals/hooks/usePicker/usePicker.js +0 -3
  132. package/node/internals/hooks/usePicker/usePickerProvider.js +22 -2
  133. package/node/internals/hooks/usePicker/usePickerValue.js +5 -11
  134. package/node/internals/index.js +21 -3
  135. package/node/locales/utils/getPickersLocalization.js +2 -16
  136. package/node/managers/useDateManager.js +9 -1
  137. package/node/managers/useDateTimeManager.js +9 -1
  138. package/node/managers/useTimeManager.js +9 -1
  139. package/package.json +2 -2
  140. package/internals/utils/convertFieldResponseIntoMuiTextFieldProps.d.ts +0 -3
  141. package/internals/utils/convertFieldResponseIntoMuiTextFieldProps.js +0 -44
  142. package/modern/internals/utils/convertFieldResponseIntoMuiTextFieldProps.js +0 -44
  143. package/node/internals/utils/convertFieldResponseIntoMuiTextFieldProps.js +0 -52
@@ -0,0 +1,318 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.PickerFieldUI = PickerFieldUI;
9
+ exports.PickerFieldUIContextProvider = PickerFieldUIContextProvider;
10
+ exports.cleanFieldResponse = void 0;
11
+ exports.useFieldTextFieldProps = useFieldTextFieldProps;
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
14
+ var React = _interopRequireWildcard(require("react"));
15
+ var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
16
+ var _resolveComponentProps = _interopRequireDefault(require("@mui/utils/resolveComponentProps"));
17
+ var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
18
+ var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
19
+ var _InputAdornment = _interopRequireDefault(require("@mui/material/InputAdornment"));
20
+ var _useSlotProps5 = _interopRequireDefault(require("@mui/utils/useSlotProps"));
21
+ var _useFieldOwnerState = require("../hooks/useFieldOwnerState");
22
+ var _hooks = require("../../hooks");
23
+ var _icons = require("../../icons");
24
+ var _useNullablePickerContext = require("../hooks/useNullablePickerContext");
25
+ var _PickersTextField = require("../../PickersTextField");
26
+ var _jsxRuntime = require("react/jsx-runtime");
27
+ const _excluded = ["enableAccessibleFieldDOMStructure"],
28
+ _excluded2 = ["InputProps", "readOnly", "onClear", "clearable", "clearButtonPosition", "openPickerButtonPosition", "openPickerAriaLabel"],
29
+ _excluded3 = ["onPaste", "onKeyDown", "inputMode", "readOnly", "InputProps", "inputProps", "inputRef", "onClear", "clearable", "clearButtonPosition", "openPickerButtonPosition", "openPickerAriaLabel"],
30
+ _excluded4 = ["ownerState"],
31
+ _excluded5 = ["ownerState"],
32
+ _excluded6 = ["ownerState"],
33
+ _excluded7 = ["ownerState"],
34
+ _excluded8 = ["InputProps", "inputProps"];
35
+ const cleanFieldResponse = _ref => {
36
+ let {
37
+ enableAccessibleFieldDOMStructure
38
+ } = _ref,
39
+ fieldResponse = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
40
+ if (enableAccessibleFieldDOMStructure) {
41
+ const {
42
+ InputProps,
43
+ readOnly,
44
+ onClear,
45
+ clearable,
46
+ clearButtonPosition,
47
+ openPickerButtonPosition,
48
+ openPickerAriaLabel
49
+ } = fieldResponse,
50
+ other = (0, _objectWithoutPropertiesLoose2.default)(fieldResponse, _excluded2);
51
+ return {
52
+ clearable,
53
+ onClear,
54
+ clearButtonPosition,
55
+ openPickerButtonPosition,
56
+ openPickerAriaLabel,
57
+ textFieldProps: (0, _extends2.default)({}, other, {
58
+ InputProps: (0, _extends2.default)({}, InputProps ?? {}, {
59
+ readOnly
60
+ })
61
+ })
62
+ };
63
+ }
64
+ const {
65
+ onPaste,
66
+ onKeyDown,
67
+ inputMode,
68
+ readOnly,
69
+ InputProps,
70
+ inputProps,
71
+ inputRef,
72
+ onClear,
73
+ clearable,
74
+ clearButtonPosition,
75
+ openPickerButtonPosition,
76
+ openPickerAriaLabel
77
+ } = fieldResponse,
78
+ other = (0, _objectWithoutPropertiesLoose2.default)(fieldResponse, _excluded3);
79
+ return {
80
+ clearable,
81
+ onClear,
82
+ clearButtonPosition,
83
+ openPickerButtonPosition,
84
+ openPickerAriaLabel,
85
+ textFieldProps: (0, _extends2.default)({}, other, {
86
+ InputProps: (0, _extends2.default)({}, InputProps ?? {}, {
87
+ readOnly
88
+ }),
89
+ inputProps: (0, _extends2.default)({}, inputProps ?? {}, {
90
+ inputMode,
91
+ onPaste,
92
+ onKeyDown,
93
+ ref: inputRef
94
+ })
95
+ })
96
+ };
97
+ };
98
+ exports.cleanFieldResponse = cleanFieldResponse;
99
+ const PickerFieldUIContext = /*#__PURE__*/React.createContext({
100
+ slots: {},
101
+ slotProps: {}
102
+ });
103
+
104
+ /**
105
+ * Adds the button to open the picker and the button to clear the value of the field.
106
+ * @ignore - internal component.
107
+ */
108
+ function PickerFieldUI(props) {
109
+ const {
110
+ slots,
111
+ slotProps,
112
+ fieldResponse,
113
+ defaultOpenPickerIcon
114
+ } = props;
115
+ const translations = (0, _hooks.usePickerTranslations)();
116
+ const pickerContext = (0, _useNullablePickerContext.useNullablePickerContext)();
117
+ const pickerFieldUIContext = React.useContext(PickerFieldUIContext);
118
+ const {
119
+ textFieldProps,
120
+ onClear,
121
+ clearable,
122
+ openPickerAriaLabel,
123
+ clearButtonPosition: clearButtonPositionProp = 'end',
124
+ openPickerButtonPosition: openPickerButtonPositionProp = 'end'
125
+ } = cleanFieldResponse(fieldResponse);
126
+ const ownerState = (0, _useFieldOwnerState.useFieldOwnerState)(textFieldProps);
127
+ const handleClickOpeningButton = (0, _useEventCallback.default)(event => {
128
+ event.preventDefault();
129
+ pickerContext?.setOpen(prev => !prev);
130
+ });
131
+ const triggerStatus = pickerContext ? pickerContext.triggerStatus : 'hidden';
132
+ const clearButtonPosition = clearable ? clearButtonPositionProp : null;
133
+ const openPickerButtonPosition = triggerStatus !== 'hidden' ? openPickerButtonPositionProp : null;
134
+ const TextField = slots?.textField ?? pickerFieldUIContext.slots.textField ?? (fieldResponse.enableAccessibleFieldDOMStructure === false ? _TextField.default : _PickersTextField.PickersTextField);
135
+ const InputAdornment = slots?.inputAdornment ?? pickerFieldUIContext.slots.inputAdornment ?? _InputAdornment.default;
136
+ const _useSlotProps = (0, _useSlotProps5.default)({
137
+ elementType: InputAdornment,
138
+ externalSlotProps: mergeSlotProps(pickerFieldUIContext.slotProps.inputAdornment, slotProps?.inputAdornment),
139
+ additionalProps: {
140
+ position: 'start'
141
+ },
142
+ ownerState: (0, _extends2.default)({}, ownerState, {
143
+ position: 'start'
144
+ })
145
+ }),
146
+ startInputAdornmentProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps, _excluded4);
147
+ const _useSlotProps2 = (0, _useSlotProps5.default)({
148
+ elementType: InputAdornment,
149
+ externalSlotProps: slotProps?.inputAdornment,
150
+ additionalProps: {
151
+ position: 'end'
152
+ },
153
+ ownerState: (0, _extends2.default)({}, ownerState, {
154
+ position: 'end'
155
+ })
156
+ }),
157
+ endInputAdornmentProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps2, _excluded5);
158
+ const OpenPickerButton = pickerFieldUIContext.slots.openPickerButton ?? _IconButton.default;
159
+ // We don't want to forward the `ownerState` to the `<IconButton />` component, see mui/material-ui#34056
160
+ const _useSlotProps3 = (0, _useSlotProps5.default)({
161
+ elementType: OpenPickerButton,
162
+ externalSlotProps: pickerFieldUIContext.slotProps.openPickerButton,
163
+ additionalProps: {
164
+ disabled: triggerStatus === 'disabled',
165
+ onClick: handleClickOpeningButton,
166
+ 'aria-label': openPickerAriaLabel,
167
+ edge: clearButtonPosition === 'start' && openPickerButtonPosition === 'start' ? undefined : openPickerButtonPosition
168
+ },
169
+ ownerState
170
+ }),
171
+ openPickerButtonProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps3, _excluded6);
172
+ const OpenPickerIcon = pickerFieldUIContext.slots.openPickerIcon ?? defaultOpenPickerIcon;
173
+ const openPickerIconProps = (0, _useSlotProps5.default)({
174
+ elementType: OpenPickerIcon,
175
+ externalSlotProps: pickerFieldUIContext.slotProps.openPickerIcon,
176
+ ownerState
177
+ });
178
+ const ClearButton = slots?.clearButton ?? pickerFieldUIContext.slots.clearButton ?? _IconButton.default;
179
+ // We don't want to forward the `ownerState` to the `<IconButton />` component, see mui/material-ui#34056
180
+ const _useSlotProps4 = (0, _useSlotProps5.default)({
181
+ elementType: ClearButton,
182
+ externalSlotProps: mergeSlotProps(pickerFieldUIContext.slotProps.clearButton, slotProps?.clearButton),
183
+ className: 'clearButton',
184
+ additionalProps: {
185
+ title: translations.fieldClearLabel,
186
+ tabIndex: -1,
187
+ onClick: onClear,
188
+ disabled: fieldResponse.disabled || fieldResponse.readOnly,
189
+ edge: clearButtonPosition === 'end' && openPickerButtonPosition === 'end' ? undefined : clearButtonPosition
190
+ },
191
+ ownerState
192
+ }),
193
+ clearButtonProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps4, _excluded7);
194
+ const ClearIcon = slots?.clearIcon ?? pickerFieldUIContext.slots.clearIcon ?? _icons.ClearIcon;
195
+ const clearIconProps = (0, _useSlotProps5.default)({
196
+ elementType: ClearIcon,
197
+ externalSlotProps: mergeSlotProps(pickerFieldUIContext.slotProps.clearIcon, slotProps?.clearIcon),
198
+ additionalProps: {
199
+ fontSize: 'small'
200
+ },
201
+ ownerState
202
+ });
203
+ if (!textFieldProps.InputProps) {
204
+ textFieldProps.InputProps = {};
205
+ }
206
+ if (pickerContext) {
207
+ textFieldProps.InputProps.ref = pickerContext.triggerRef;
208
+ }
209
+ if (!textFieldProps.InputProps?.startAdornment && (clearButtonPosition === 'start' || openPickerButtonPosition === 'start')) {
210
+ textFieldProps.InputProps.startAdornment = /*#__PURE__*/(0, _jsxRuntime.jsxs)(InputAdornment, (0, _extends2.default)({}, startInputAdornmentProps, {
211
+ children: [openPickerButtonPosition === 'start' && /*#__PURE__*/(0, _jsxRuntime.jsx)(OpenPickerButton, (0, _extends2.default)({}, openPickerButtonProps, {
212
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(OpenPickerIcon, (0, _extends2.default)({}, openPickerIconProps))
213
+ })), clearButtonPosition === 'start' && /*#__PURE__*/(0, _jsxRuntime.jsx)(ClearButton, (0, _extends2.default)({}, clearButtonProps, {
214
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ClearIcon, (0, _extends2.default)({}, clearIconProps))
215
+ }))]
216
+ }));
217
+ }
218
+ if (!textFieldProps.InputProps?.endAdornment && (clearButtonPosition === 'end' || openPickerButtonPosition === 'end')) {
219
+ textFieldProps.InputProps.endAdornment = /*#__PURE__*/(0, _jsxRuntime.jsxs)(InputAdornment, (0, _extends2.default)({}, endInputAdornmentProps, {
220
+ children: [clearButtonPosition === 'end' && /*#__PURE__*/(0, _jsxRuntime.jsx)(ClearButton, (0, _extends2.default)({}, clearButtonProps, {
221
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ClearIcon, (0, _extends2.default)({}, clearIconProps))
222
+ })), openPickerButtonPosition === 'end' && /*#__PURE__*/(0, _jsxRuntime.jsx)(OpenPickerButton, (0, _extends2.default)({}, openPickerButtonProps, {
223
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(OpenPickerIcon, (0, _extends2.default)({}, openPickerIconProps))
224
+ }))]
225
+ }));
226
+ }
227
+ if (clearButtonPosition != null) {
228
+ textFieldProps.sx = [{
229
+ '& .clearButton': {
230
+ opacity: 1
231
+ },
232
+ '@media (pointer: fine)': {
233
+ '& .clearButton': {
234
+ opacity: 0
235
+ },
236
+ '&:hover, &:focus-within': {
237
+ '.clearButton': {
238
+ opacity: 1
239
+ }
240
+ }
241
+ }
242
+ }, ...(Array.isArray(textFieldProps.sx) ? textFieldProps.sx : [textFieldProps.sx])];
243
+ }
244
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(TextField, (0, _extends2.default)({}, textFieldProps));
245
+ }
246
+ function mergeSlotProps(slotPropsA, slotPropsB) {
247
+ if (!slotPropsA) {
248
+ return slotPropsB;
249
+ }
250
+ if (!slotPropsB) {
251
+ return slotPropsA;
252
+ }
253
+ return ownerState => {
254
+ return (0, _extends2.default)({}, (0, _resolveComponentProps.default)(slotPropsB, ownerState), (0, _resolveComponentProps.default)(slotPropsA, ownerState));
255
+ };
256
+ }
257
+
258
+ /**
259
+ * The `textField` slot props cannot be handled inside `PickerFieldUI` because it would be a breaking change to not pass the enriched props to `useField`.
260
+ * Once the non-accessible DOM structure will be removed, we will be able to remove the `textField` slot and clean this logic.
261
+ */
262
+ function useFieldTextFieldProps(parameters) {
263
+ const {
264
+ ref,
265
+ externalForwardedProps,
266
+ slotProps
267
+ } = parameters;
268
+ const pickerFieldUIContext = React.useContext(PickerFieldUIContext);
269
+ const ownerState = (0, _useFieldOwnerState.useFieldOwnerState)(externalForwardedProps);
270
+ const {
271
+ InputProps,
272
+ inputProps
273
+ } = externalForwardedProps,
274
+ otherExternalForwardedProps = (0, _objectWithoutPropertiesLoose2.default)(externalForwardedProps, _excluded8);
275
+ const textFieldProps = (0, _useSlotProps5.default)({
276
+ elementType: _PickersTextField.PickersTextField,
277
+ externalSlotProps: mergeSlotProps(pickerFieldUIContext.slotProps.textField, slotProps?.textField),
278
+ externalForwardedProps: otherExternalForwardedProps,
279
+ additionalProps: {
280
+ ref
281
+ },
282
+ ownerState
283
+ });
284
+
285
+ // TODO: Remove when mui/material-ui#35088 will be merged
286
+ textFieldProps.inputProps = (0, _extends2.default)({}, inputProps, textFieldProps.inputProps);
287
+ textFieldProps.InputProps = (0, _extends2.default)({}, InputProps, textFieldProps.InputProps);
288
+ return textFieldProps;
289
+ }
290
+ function PickerFieldUIContextProvider(props) {
291
+ const {
292
+ slots = {},
293
+ slotProps = {},
294
+ children
295
+ } = props;
296
+ const contextValue = React.useMemo(() => ({
297
+ slots: {
298
+ openPickerButton: slots.openPickerButton,
299
+ openPickerIcon: slots.openPickerIcon,
300
+ textField: slots.textField,
301
+ inputAdornment: slots.inputAdornment,
302
+ clearIcon: slots.clearIcon,
303
+ clearButton: slots.clearButton
304
+ },
305
+ slotProps: {
306
+ openPickerButton: slotProps.openPickerButton,
307
+ openPickerIcon: slotProps.openPickerIcon,
308
+ textField: slotProps.textField,
309
+ inputAdornment: slotProps.inputAdornment,
310
+ clearIcon: slotProps.clearIcon,
311
+ clearButton: slotProps.clearButton
312
+ }
313
+ }), [slots.openPickerButton, slots.openPickerIcon, slots.textField, slots.inputAdornment, slots.clearIcon, slots.clearButton, slotProps.openPickerButton, slotProps.openPickerIcon, slotProps.textField, slotProps.inputAdornment, slotProps.clearIcon, slotProps.clearButton]);
314
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(PickerFieldUIContext.Provider, {
315
+ value: contextValue,
316
+ children: children
317
+ });
318
+ }
@@ -4,13 +4,14 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.PickerPrivateContext = exports.PickerContext = exports.PickerActionsContext = void 0;
7
+ exports.PickerPrivateContext = exports.PickerActionsContext = void 0;
8
8
  exports.PickerProvider = PickerProvider;
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _LocalizationProvider = require("../../LocalizationProvider");
11
11
  var _useIsValidValue = require("../../hooks/useIsValidValue");
12
+ var _useFieldInternalPropsWithDefaults = require("../hooks/useField/useFieldInternalPropsWithDefaults");
13
+ var _usePickerContext = require("../../hooks/usePickerContext");
12
14
  var _jsxRuntime = require("react/jsx-runtime");
13
- const PickerContext = exports.PickerContext = /*#__PURE__*/React.createContext(null);
14
15
  const PickerActionsContext = exports.PickerActionsContext = /*#__PURE__*/React.createContext(null);
15
16
  const PickerPrivateContext = exports.PickerPrivateContext = /*#__PURE__*/React.createContext({
16
17
  ownerState: {
@@ -36,21 +37,25 @@ function PickerProvider(props) {
36
37
  contextValue,
37
38
  actionsContextValue,
38
39
  privateContextValue,
40
+ fieldPrivateContextValue,
39
41
  isValidContextValue,
40
42
  localeText,
41
43
  children
42
44
  } = props;
43
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(PickerContext.Provider, {
45
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_usePickerContext.PickerContext.Provider, {
44
46
  value: contextValue,
45
47
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(PickerActionsContext.Provider, {
46
48
  value: actionsContextValue,
47
49
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(PickerPrivateContext.Provider, {
48
50
  value: privateContextValue,
49
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_useIsValidValue.IsValidValueContext.Provider, {
50
- value: isValidContextValue,
51
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_LocalizationProvider.LocalizationProvider, {
52
- localeText: localeText,
53
- children: children
51
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_useFieldInternalPropsWithDefaults.PickerFieldPrivateContext.Provider, {
52
+ value: fieldPrivateContextValue,
53
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_useIsValidValue.IsValidValueContext.Provider, {
54
+ value: isValidContextValue,
55
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_LocalizationProvider.LocalizationProvider, {
56
+ localeText: localeText,
57
+ children: children
58
+ })
54
59
  })
55
60
  })
56
61
  })
@@ -9,19 +9,16 @@ exports.useDesktopPicker = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
11
  var React = _interopRequireWildcard(require("react"));
12
- var _useSlotProps3 = _interopRequireDefault(require("@mui/utils/useSlotProps"));
13
- var _InputAdornment = _interopRequireDefault(require("@mui/material/InputAdornment"));
14
- var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
12
+ var _useSlotProps = _interopRequireDefault(require("@mui/utils/useSlotProps"));
15
13
  var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
16
14
  var _useId = _interopRequireDefault(require("@mui/utils/useId"));
17
15
  var _PickersPopper = require("../../components/PickersPopper");
18
16
  var _usePicker = require("../usePicker");
19
17
  var _PickersLayout = require("../../../PickersLayout");
20
18
  var _PickerProvider = require("../../components/PickerProvider");
19
+ var _PickerFieldUI = require("../../components/PickerFieldUI");
21
20
  var _jsxRuntime = require("react/jsx-runtime");
22
- const _excluded = ["props", "getOpenDialogAriaText"],
23
- _excluded2 = ["ownerState"],
24
- _excluded3 = ["ownerState"];
21
+ const _excluded = ["props"];
25
22
  /**
26
23
  * Hook managing all the single-date desktop pickers:
27
24
  * - DesktopDatePicker
@@ -30,8 +27,7 @@ const _excluded = ["props", "getOpenDialogAriaText"],
30
27
  */
31
28
  const useDesktopPicker = _ref => {
32
29
  let {
33
- props,
34
- getOpenDialogAriaText
30
+ props
35
31
  } = _ref,
36
32
  pickerParams = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
37
33
  const {
@@ -39,31 +35,21 @@ const useDesktopPicker = _ref => {
39
35
  slotProps: innerSlotProps,
40
36
  className,
41
37
  sx,
42
- format,
43
- formatDensity,
44
- enableAccessibleFieldDOMStructure,
45
- selectedSections,
46
- onSelectedSectionsChange,
47
- timezone,
48
38
  name,
49
39
  label,
50
40
  inputRef,
51
41
  readOnly,
52
- disabled,
53
42
  autoFocus,
54
43
  localeText,
55
44
  reduceAnimations
56
45
  } = props;
57
- const containerRef = React.useRef(null);
58
46
  const fieldRef = React.useRef(null);
59
47
  const labelId = (0, _useId.default)();
60
48
  const isToolbarHidden = innerSlotProps?.toolbar?.hidden ?? false;
61
49
  const {
62
- hasUIView,
63
50
  providerProps,
64
51
  renderCurrentView,
65
52
  shouldRestoreFocus,
66
- fieldProps: pickerFieldProps,
67
53
  ownerState
68
54
  } = (0, _usePicker.usePicker)((0, _extends2.default)({}, pickerParams, {
69
55
  props,
@@ -72,57 +58,14 @@ const useDesktopPicker = _ref => {
72
58
  autoFocusView: true,
73
59
  variant: 'desktop'
74
60
  }));
75
- const InputAdornment = slots.inputAdornment ?? _InputAdornment.default;
76
- const _useSlotProps = (0, _useSlotProps3.default)({
77
- elementType: InputAdornment,
78
- externalSlotProps: innerSlotProps?.inputAdornment,
79
- additionalProps: {
80
- position: 'end'
81
- },
82
- ownerState
83
- }),
84
- inputAdornmentProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps, _excluded2);
85
- const OpenPickerButton = slots.openPickerButton ?? _IconButton.default;
86
- const _useSlotProps2 = (0, _useSlotProps3.default)({
87
- elementType: OpenPickerButton,
88
- externalSlotProps: innerSlotProps?.openPickerButton,
89
- additionalProps: {
90
- disabled: disabled || readOnly,
91
- // This direct access to `providerProps` will go away in https://github.com/mui/mui-x/pull/15671
92
- onClick: event => {
93
- event.preventDefault();
94
- providerProps.contextValue.setOpen(prevOpen => !prevOpen);
95
- },
96
- 'aria-label': getOpenDialogAriaText(pickerFieldProps.value),
97
- edge: inputAdornmentProps.position
98
- },
99
- ownerState
100
- }),
101
- openPickerButtonProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps2, _excluded3);
102
- const OpenPickerIcon = slots.openPickerIcon;
103
- const openPickerIconProps = (0, _useSlotProps3.default)({
104
- elementType: OpenPickerIcon,
105
- externalSlotProps: innerSlotProps?.openPickerIcon,
106
- ownerState
107
- });
108
61
  const Field = slots.field;
109
- const fieldProps = (0, _useSlotProps3.default)({
62
+ const fieldProps = (0, _useSlotProps.default)({
110
63
  elementType: Field,
111
64
  externalSlotProps: innerSlotProps?.field,
112
65
  additionalProps: (0, _extends2.default)({
113
66
  // Internal props
114
67
  readOnly,
115
- disabled,
116
- format,
117
- formatDensity,
118
- enableAccessibleFieldDOMStructure,
119
- selectedSections,
120
- onSelectedSectionsChange,
121
- timezone,
122
- autoFocus: autoFocus && !props.open
123
- }, pickerFieldProps, {
124
- // onChange and value
125
-
68
+ autoFocus: autoFocus && !props.open,
126
69
  // Forwarded props
127
70
  className,
128
71
  sx,
@@ -136,24 +79,6 @@ const useDesktopPicker = _ref => {
136
79
  }),
137
80
  ownerState
138
81
  });
139
-
140
- // TODO: Move to `useSlotProps` when https://github.com/mui/material-ui/pull/35088 will be merged
141
- if (hasUIView) {
142
- fieldProps.InputProps = (0, _extends2.default)({}, fieldProps.InputProps, {
143
- ref: containerRef
144
- }, !props.disableOpenPicker && {
145
- [`${inputAdornmentProps.position}Adornment`]: /*#__PURE__*/(0, _jsxRuntime.jsx)(InputAdornment, (0, _extends2.default)({}, inputAdornmentProps, {
146
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(OpenPickerButton, (0, _extends2.default)({}, openPickerButtonProps, {
147
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(OpenPickerIcon, (0, _extends2.default)({}, openPickerIconProps))
148
- }))
149
- }))
150
- });
151
- }
152
- const slotsForField = (0, _extends2.default)({
153
- textField: slots.textField,
154
- clearIcon: slots.clearIcon,
155
- clearButton: slots.clearButton
156
- }, fieldProps.slots);
157
82
  const Layout = slots.layout ?? _PickersLayout.PickersLayout;
158
83
  let labelledById = labelId;
159
84
  if (isToolbarHidden) {
@@ -172,25 +97,27 @@ const useDesktopPicker = _ref => {
172
97
  }, innerSlotProps?.popper)
173
98
  });
174
99
  const handleFieldRef = (0, _useForkRef.default)(fieldRef, fieldProps.unstableFieldRef);
175
- const renderPicker = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_PickerProvider.PickerProvider, (0, _extends2.default)({}, providerProps, {
176
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Field, (0, _extends2.default)({}, fieldProps, {
177
- slots: slotsForField,
178
- slotProps: slotProps,
179
- unstableFieldRef: handleFieldRef
180
- })), /*#__PURE__*/(0, _jsxRuntime.jsx)(_PickersPopper.PickersPopper, {
181
- role: "dialog",
182
- placement: "bottom-start",
183
- anchorEl: containerRef.current,
100
+ const renderPicker = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_PickerProvider.PickerProvider, (0, _extends2.default)({}, providerProps, {
101
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_PickerFieldUI.PickerFieldUIContextProvider, {
184
102
  slots: slots,
185
103
  slotProps: slotProps,
186
- shouldRestoreFocus: shouldRestoreFocus,
187
- reduceAnimations: reduceAnimations,
188
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Layout, (0, _extends2.default)({}, slotProps?.layout, {
104
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Field, (0, _extends2.default)({}, fieldProps, {
105
+ unstableFieldRef: handleFieldRef
106
+ })), /*#__PURE__*/(0, _jsxRuntime.jsx)(_PickersPopper.PickersPopper, {
107
+ role: "dialog",
108
+ placement: "bottom-start",
109
+ anchorEl: providerProps.contextValue.triggerRef.current,
189
110
  slots: slots,
190
111
  slotProps: slotProps,
191
- children: renderCurrentView()
192
- }))
193
- })]
112
+ shouldRestoreFocus: shouldRestoreFocus,
113
+ reduceAnimations: reduceAnimations,
114
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Layout, (0, _extends2.default)({}, slotProps?.layout, {
115
+ slots: slots,
116
+ slotProps: slotProps,
117
+ children: renderCurrentView()
118
+ }))
119
+ })]
120
+ })
194
121
  }));
195
122
  return {
196
123
  renderPicker
@@ -24,8 +24,9 @@ Object.defineProperty(exports, "useField", {
24
24
  Object.defineProperty(exports, "useFieldInternalPropsWithDefaults", {
25
25
  enumerable: true,
26
26
  get: function () {
27
- return _useField.useFieldInternalPropsWithDefaults;
27
+ return _useFieldInternalPropsWithDefaults.useFieldInternalPropsWithDefaults;
28
28
  }
29
29
  });
30
30
  var _useField = require("./useField");
31
- var _useField2 = require("./useField.utils");
31
+ var _useField2 = require("./useField.utils");
32
+ var _useFieldInternalPropsWithDefaults = require("./useFieldInternalPropsWithDefaults");
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.useFieldInternalPropsWithDefaults = exports.useField = void 0;
8
+ exports.useField = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
@@ -18,23 +18,6 @@ var _useFieldState = require("./useFieldState");
18
18
  var _useFieldCharacterEditing = require("./useFieldCharacterEditing");
19
19
  var _useFieldV7TextField = require("./useFieldV7TextField");
20
20
  var _useFieldV6TextField = require("./useFieldV6TextField");
21
- /**
22
- * Applies the default values to the field internal props.
23
- * This is a temporary hook that will be removed during a follow up when `useField` will receive the internal props without the defaults.
24
- * It is only here to allow the migration to be done in smaller steps.
25
- */
26
- const useFieldInternalPropsWithDefaults = ({
27
- manager,
28
- internalProps
29
- }) => {
30
- const localizationContext = (0, _useUtils.useLocalizationContext)();
31
- return React.useMemo(() => {
32
- return manager.internal_applyDefaultsToFieldInternalProps((0, _extends2.default)({}, localizationContext, {
33
- internalProps
34
- }));
35
- }, [manager, internalProps, localizationContext]);
36
- };
37
- exports.useFieldInternalPropsWithDefaults = useFieldInternalPropsWithDefaults;
38
21
  const useField = params => {
39
22
  const utils = (0, _useUtils.useUtils)();
40
23
  const {
@@ -44,7 +27,8 @@ const useField = params => {
44
27
  minutesStep,
45
28
  enableAccessibleFieldDOMStructure = true,
46
29
  disabled = false,
47
- readOnly = false
30
+ readOnly = false,
31
+ autoFocus = false
48
32
  },
49
33
  forwardedProps: {
50
34
  onKeyDown,
@@ -54,7 +38,8 @@ const useField = params => {
54
38
  },
55
39
  fieldValueManager,
56
40
  valueManager,
57
- validator
41
+ validator,
42
+ getOpenPickerButtonAriaLabel: getOpenDialogAriaText
58
43
  } = params;
59
44
  const isRtl = (0, _RtlProvider.useRtl)();
60
45
  const stateResponse = (0, _useFieldState.useFieldState)(params);
@@ -241,9 +226,15 @@ const useField = params => {
241
226
  error: inputError,
242
227
  clearable: Boolean(clearable && !areAllSectionsEmpty && !readOnly && !disabled)
243
228
  };
229
+ const localizationContext = (0, _useUtils.useLocalizationContext)();
230
+ const openPickerAriaLabel = React.useMemo(() => getOpenDialogAriaText((0, _extends2.default)({}, localizationContext, {
231
+ value: state.value
232
+ })), [getOpenDialogAriaText, state.value, localizationContext]);
244
233
  const commonAdditionalProps = {
245
234
  disabled,
246
- readOnly
235
+ readOnly,
236
+ autoFocus,
237
+ openPickerAriaLabel
247
238
  };
248
239
  return (0, _extends2.default)({}, params.forwardedProps, commonForwardedProps, commonAdditionalProps, returnedValue);
249
240
  };