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

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 (158) hide show
  1. package/CHANGELOG.md +551 -3
  2. package/DateCalendar/DayCalendar.js +2 -0
  3. package/DateField/DateField.js +26 -31
  4. package/DateField/DateField.types.d.ts +6 -15
  5. package/DateField/useDateField.d.ts +1 -1
  6. package/DateField/useDateField.js +2 -1
  7. package/DateTimeField/DateTimeField.js +26 -31
  8. package/DateTimeField/DateTimeField.types.d.ts +6 -15
  9. package/DateTimeField/useDateTimeField.d.ts +1 -1
  10. package/DateTimeField/useDateTimeField.js +2 -1
  11. package/DesktopDatePicker/DesktopDatePicker.js +0 -11
  12. package/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -12
  13. package/DesktopTimePicker/DesktopTimePicker.js +1 -12
  14. package/MobileDatePicker/MobileDatePicker.js +0 -9
  15. package/MobileDateTimePicker/MobileDateTimePicker.js +0 -9
  16. package/MobileTimePicker/MobileTimePicker.js +0 -9
  17. package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +2 -0
  18. package/PickersCalendarHeader/PickersCalendarHeader.js +2 -0
  19. package/TimeClock/ClockPointer.js +2 -0
  20. package/TimeField/TimeField.js +25 -30
  21. package/TimeField/TimeField.types.d.ts +6 -15
  22. package/TimeField/useTimeField.d.ts +1 -1
  23. package/TimeField/useTimeField.js +2 -1
  24. package/hooks/useParsedFormat.d.ts +8 -6
  25. package/hooks/useParsedFormat.js +10 -12
  26. package/hooks/usePickerActionsContext.d.ts +1 -1
  27. package/hooks/usePickerContext.d.ts +4 -2
  28. package/hooks/usePickerContext.js +2 -1
  29. package/hooks/useSplitFieldProps.d.ts +12 -3
  30. package/hooks/useSplitFieldProps.js +8 -3
  31. package/index.js +1 -1
  32. package/internals/components/PickerFieldUI.d.ts +132 -0
  33. package/internals/components/PickerFieldUI.js +306 -0
  34. package/internals/components/PickerProvider.d.ts +25 -4
  35. package/internals/components/PickerProvider.js +11 -6
  36. package/internals/hooks/useDesktopPicker/useDesktopPicker.d.ts +1 -1
  37. package/internals/hooks/useDesktopPicker/useDesktopPicker.js +21 -94
  38. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +8 -31
  39. package/internals/hooks/useField/index.d.ts +3 -1
  40. package/internals/hooks/useField/index.js +3 -2
  41. package/internals/hooks/useField/useField.d.ts +1 -10
  42. package/internals/hooks/useField/useField.js +16 -19
  43. package/internals/hooks/useField/useField.types.d.ts +11 -4
  44. package/internals/hooks/useField/useFieldInternalPropsWithDefaults.d.ts +15 -0
  45. package/internals/hooks/useField/useFieldInternalPropsWithDefaults.js +46 -0
  46. package/internals/hooks/useField/useFieldV6TextField.js +3 -0
  47. package/internals/hooks/useField/useFieldV7TextField.js +6 -3
  48. package/internals/hooks/useFieldOwnerState.d.ts +1 -2
  49. package/internals/hooks/useMobilePicker/useMobilePicker.d.ts +1 -1
  50. package/internals/hooks/useMobilePicker/useMobilePicker.js +20 -49
  51. package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +6 -14
  52. package/internals/hooks/useNullablePickerContext.d.ts +5 -0
  53. package/internals/hooks/useNullablePickerContext.js +10 -0
  54. package/internals/hooks/usePicker/usePicker.d.ts +1 -2
  55. package/internals/hooks/usePicker/usePicker.js +0 -3
  56. package/internals/hooks/usePicker/usePicker.types.d.ts +2 -3
  57. package/internals/hooks/usePicker/usePickerProvider.d.ts +8 -2
  58. package/internals/hooks/usePicker/usePickerProvider.js +22 -2
  59. package/internals/hooks/usePicker/usePickerValue.js +5 -11
  60. package/internals/hooks/usePicker/usePickerValue.types.d.ts +5 -2
  61. package/internals/hooks/useUtils.d.ts +4 -3
  62. package/internals/index.d.ts +6 -3
  63. package/internals/index.js +1 -1
  64. package/internals/models/fields.d.ts +3 -16
  65. package/internals/models/manager.d.ts +3 -0
  66. package/internals/models/props/basePickerProps.d.ts +0 -12
  67. package/locales/utils/getPickersLocalization.d.ts +0 -7
  68. package/locales/utils/getPickersLocalization.js +0 -13
  69. package/managers/index.d.ts +3 -3
  70. package/managers/useDateManager.d.ts +1 -1
  71. package/managers/useDateManager.js +9 -1
  72. package/managers/useDateTimeManager.d.ts +1 -1
  73. package/managers/useDateTimeManager.js +9 -1
  74. package/managers/useTimeManager.d.ts +1 -1
  75. package/managers/useTimeManager.js +9 -1
  76. package/models/fields.d.ts +4 -4
  77. package/models/manager.d.ts +12 -3
  78. package/modern/DateCalendar/DayCalendar.js +2 -0
  79. package/modern/DateField/DateField.js +26 -31
  80. package/modern/DateField/useDateField.js +2 -1
  81. package/modern/DateTimeField/DateTimeField.js +26 -31
  82. package/modern/DateTimeField/useDateTimeField.js +2 -1
  83. package/modern/DesktopDatePicker/DesktopDatePicker.js +0 -11
  84. package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -12
  85. package/modern/DesktopTimePicker/DesktopTimePicker.js +1 -12
  86. package/modern/MobileDatePicker/MobileDatePicker.js +0 -9
  87. package/modern/MobileDateTimePicker/MobileDateTimePicker.js +0 -9
  88. package/modern/MobileTimePicker/MobileTimePicker.js +0 -9
  89. package/modern/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +2 -0
  90. package/modern/PickersCalendarHeader/PickersCalendarHeader.js +2 -0
  91. package/modern/TimeClock/ClockPointer.js +2 -0
  92. package/modern/TimeField/TimeField.js +25 -30
  93. package/modern/TimeField/useTimeField.js +2 -1
  94. package/modern/hooks/useParsedFormat.js +10 -12
  95. package/modern/hooks/usePickerContext.js +2 -1
  96. package/modern/hooks/useSplitFieldProps.js +8 -3
  97. package/modern/index.js +1 -1
  98. package/modern/internals/components/PickerFieldUI.js +306 -0
  99. package/modern/internals/components/PickerProvider.js +11 -6
  100. package/modern/internals/hooks/useDesktopPicker/useDesktopPicker.js +21 -94
  101. package/modern/internals/hooks/useField/index.js +3 -2
  102. package/modern/internals/hooks/useField/useField.js +16 -19
  103. package/modern/internals/hooks/useField/useFieldInternalPropsWithDefaults.js +46 -0
  104. package/modern/internals/hooks/useField/useFieldV6TextField.js +3 -0
  105. package/modern/internals/hooks/useField/useFieldV7TextField.js +6 -3
  106. package/modern/internals/hooks/useMobilePicker/useMobilePicker.js +20 -49
  107. package/modern/internals/hooks/useNullablePickerContext.js +10 -0
  108. package/modern/internals/hooks/usePicker/usePicker.js +0 -3
  109. package/modern/internals/hooks/usePicker/usePickerProvider.js +22 -2
  110. package/modern/internals/hooks/usePicker/usePickerValue.js +5 -11
  111. package/modern/internals/index.js +1 -1
  112. package/modern/locales/utils/getPickersLocalization.js +0 -13
  113. package/modern/managers/useDateManager.js +9 -1
  114. package/modern/managers/useDateTimeManager.js +9 -1
  115. package/modern/managers/useTimeManager.js +9 -1
  116. package/node/DateCalendar/DayCalendar.js +1 -0
  117. package/node/DateField/DateField.js +26 -31
  118. package/node/DateField/useDateField.js +2 -1
  119. package/node/DateTimeField/DateTimeField.js +26 -31
  120. package/node/DateTimeField/useDateTimeField.js +2 -1
  121. package/node/DesktopDatePicker/DesktopDatePicker.js +0 -11
  122. package/node/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -12
  123. package/node/DesktopTimePicker/DesktopTimePicker.js +1 -12
  124. package/node/MobileDatePicker/MobileDatePicker.js +0 -9
  125. package/node/MobileDateTimePicker/MobileDateTimePicker.js +0 -9
  126. package/node/MobileTimePicker/MobileTimePicker.js +0 -9
  127. package/node/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +1 -0
  128. package/node/PickersCalendarHeader/PickersCalendarHeader.js +2 -0
  129. package/node/TimeClock/ClockPointer.js +1 -0
  130. package/node/TimeField/TimeField.js +25 -30
  131. package/node/TimeField/useTimeField.js +2 -1
  132. package/node/hooks/useParsedFormat.js +10 -12
  133. package/node/hooks/usePickerContext.js +4 -3
  134. package/node/hooks/useSplitFieldProps.js +7 -2
  135. package/node/index.js +1 -1
  136. package/node/internals/components/PickerFieldUI.js +318 -0
  137. package/node/internals/components/PickerProvider.js +13 -8
  138. package/node/internals/hooks/useDesktopPicker/useDesktopPicker.js +23 -96
  139. package/node/internals/hooks/useField/index.js +3 -2
  140. package/node/internals/hooks/useField/useField.js +17 -21
  141. package/node/internals/hooks/useField/useFieldInternalPropsWithDefaults.js +55 -0
  142. package/node/internals/hooks/useField/useFieldV6TextField.js +3 -0
  143. package/node/internals/hooks/useField/useFieldV7TextField.js +6 -3
  144. package/node/internals/hooks/useMobilePicker/useMobilePicker.js +20 -49
  145. package/node/internals/hooks/useNullablePickerContext.js +16 -0
  146. package/node/internals/hooks/usePicker/usePicker.js +0 -3
  147. package/node/internals/hooks/usePicker/usePickerProvider.js +22 -2
  148. package/node/internals/hooks/usePicker/usePickerValue.js +5 -11
  149. package/node/internals/index.js +21 -3
  150. package/node/locales/utils/getPickersLocalization.js +2 -16
  151. package/node/managers/useDateManager.js +9 -1
  152. package/node/managers/useDateTimeManager.js +9 -1
  153. package/node/managers/useTimeManager.js +9 -1
  154. package/package.json +2 -2
  155. package/internals/utils/convertFieldResponseIntoMuiTextFieldProps.d.ts +0 -3
  156. package/internals/utils/convertFieldResponseIntoMuiTextFieldProps.js +0 -44
  157. package/modern/internals/utils/convertFieldResponseIntoMuiTextFieldProps.js +0 -44
  158. package/node/internals/utils/convertFieldResponseIntoMuiTextFieldProps.js +0 -52
@@ -12,32 +12,30 @@ var _useUtils = require("../internals/hooks/useUtils");
12
12
  var _buildSectionsFromFormat = require("../internals/hooks/useField/buildSectionsFromFormat");
13
13
  var _useField = require("../internals/hooks/useField/useField.utils");
14
14
  var _usePickerTranslations = require("./usePickerTranslations");
15
+ var _useNullablePickerContext = require("../internals/hooks/useNullablePickerContext");
15
16
  /**
16
17
  * Returns the parsed format to be rendered in the field when there is no value or in other parts of the Picker.
17
18
  * This format is localized (for example `AAAA` for the year with the French locale) and cannot be parsed by your date library.
18
19
  * @param {object} The parameters needed to build the placeholder.
19
- * @param {string} params.format Format of the date to use.
20
- * @param {'dense' | 'spacious'} params.formatDensity Density of the format (setting `formatDensity` to `"spacious"` will add a space before and after each `/`, `-` and `.` character).
21
- * @param {boolean} params.shouldRespectLeadingZeros If `true`, the format will respect the leading zeroes, if `false`, the format will always add leading zeroes.
20
+ * @param {string} params.format Format to parse.
22
21
  * @returns
23
22
  */
24
- const useParsedFormat = parameters => {
25
- const {
26
- format,
27
- formatDensity = 'dense',
28
- shouldRespectLeadingZeros = false
29
- } = parameters;
23
+ const useParsedFormat = (parameters = {}) => {
24
+ const pickerContext = (0, _useNullablePickerContext.useNullablePickerContext)();
30
25
  const utils = (0, _useUtils.useUtils)();
31
26
  const isRtl = (0, _RtlProvider.useRtl)();
32
27
  const translations = (0, _usePickerTranslations.usePickerTranslations)();
33
28
  const localizedDigits = React.useMemo(() => (0, _useField.getLocalizedDigits)(utils), [utils]);
29
+ const {
30
+ format = pickerContext?.fieldFormat ?? utils.formats.fullDate
31
+ } = parameters;
34
32
  return React.useMemo(() => {
35
33
  const sections = (0, _buildSectionsFromFormat.buildSectionsFromFormat)({
36
34
  utils,
37
35
  format,
38
- formatDensity,
36
+ formatDensity: 'dense',
39
37
  isRtl,
40
- shouldRespectLeadingZeros,
38
+ shouldRespectLeadingZeros: true,
41
39
  localeText: translations,
42
40
  localizedDigits,
43
41
  date: null,
@@ -45,6 +43,6 @@ const useParsedFormat = parameters => {
45
43
  enableAccessibleFieldDOMStructure: false
46
44
  });
47
45
  return sections.map(section => `${section.startSeparator}${section.placeholder}${section.endSeparator}`).join('');
48
- }, [utils, isRtl, translations, localizedDigits, format, formatDensity, shouldRespectLeadingZeros]);
46
+ }, [utils, isRtl, translations, localizedDigits, format]);
49
47
  };
50
48
  exports.useParsedFormat = useParsedFormat;
@@ -5,14 +5,15 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.usePickerContext = void 0;
8
+ exports.usePickerContext = exports.PickerContext = void 0;
9
9
  var React = _interopRequireWildcard(require("react"));
10
- var _PickerProvider = require("../internals/components/PickerProvider");
10
+ const PickerContext = exports.PickerContext = /*#__PURE__*/React.createContext(null);
11
+
11
12
  /**
12
13
  * Returns the context passed by the picker that wraps the current component.
13
14
  */
14
15
  const usePickerContext = () => {
15
- const value = React.useContext(_PickerProvider.PickerContext);
16
+ const value = React.useContext(PickerContext);
16
17
  if (value == null) {
17
18
  throw new Error('MUI X: The `usePickerContext` hook can only be called inside the context of a picker component');
18
19
  }
@@ -10,13 +10,13 @@ exports.useSplitFieldProps = void 0;
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
  var React = _interopRequireWildcard(require("react"));
12
12
  var _extractValidationProps = require("../validation/extractValidationProps");
13
- const SHARED_FIELD_INTERNAL_PROP_NAMES = ['value', 'defaultValue', 'referenceDate', 'format', 'formatDensity', 'onChange', 'timezone', 'onError', 'shouldRespectLeadingZeros', 'selectedSections', 'onSelectedSectionsChange', 'unstableFieldRef', 'enableAccessibleFieldDOMStructure', 'disabled', 'readOnly', 'dateSeparator'];
13
+ const SHARED_FIELD_INTERNAL_PROP_NAMES = ['value', 'defaultValue', 'referenceDate', 'format', 'formatDensity', 'onChange', 'timezone', 'onError', 'shouldRespectLeadingZeros', 'selectedSections', 'onSelectedSectionsChange', 'unstableFieldRef', 'unstableStartFieldRef', 'unstableEndFieldRef', 'enableAccessibleFieldDOMStructure', 'disabled', 'readOnly', 'dateSeparator', 'autoFocus'];
14
14
  /**
15
15
  * Split the props received by the field component into:
16
16
  * - `internalProps` which are used by the various hooks called by the field component.
17
17
  * - `forwardedProps` which are passed to the underlying component.
18
18
  * Note that some forwarded props might be used by the hooks as well.
19
- * For instance, hooks like `useDateField` need props like `autoFocus` to know how to behave.
19
+ * For instance, hooks like `useDateField` need props like `onKeyDown` to merge the default event handler and the one provided by the application.
20
20
  * @template TProps, TValueType
21
21
  * @param {TProps} props The props received by the field component.
22
22
  * @param {TValueType} valueType The type of the field value ('date', 'time', or 'date-time').
@@ -48,4 +48,9 @@ const useSplitFieldProps = (props, valueType) => {
48
48
  };
49
49
  }, [props, valueType]);
50
50
  };
51
+
52
+ /**
53
+ * Extract the internal props from the props received by the field component.
54
+ * This makes sure that the internal props not defined in the props are not present in the result.
55
+ */
51
56
  exports.useSplitFieldProps = useSplitFieldProps;
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers v8.0.0-alpha.7
2
+ * @mui/x-date-pickers v8.0.0-alpha.9
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -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