@mui/x-date-pickers-pro 8.0.0-alpha.12 → 8.0.0-alpha.13

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 (141) hide show
  1. package/CHANGELOG.md +299 -0
  2. package/DateRangePicker/DateRangePicker.types.d.ts +2 -2
  3. package/DateTimeRangePicker/DateTimeRangePicker.types.d.ts +2 -2
  4. package/DesktopDateRangePicker/DesktopDateRangePicker.js +2 -2
  5. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +2 -2
  6. package/MobileDateRangePicker/MobileDateRangePicker.js +2 -2
  7. package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +2 -2
  8. package/SingleInputDateRangeField/useSingleInputDateRangeField.d.ts +1 -1
  9. package/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.d.ts +1 -1
  10. package/SingleInputTimeRangeField/useSingleInputTimeRangeField.d.ts +1 -1
  11. package/dateRangeViewRenderers/dateRangeViewRenderers.d.ts +6 -4
  12. package/dateRangeViewRenderers/dateRangeViewRenderers.js +13 -8
  13. package/esm/DateRangePicker/DateRangePicker.types.d.ts +2 -2
  14. package/esm/DateTimeRangePicker/DateTimeRangePicker.types.d.ts +2 -2
  15. package/esm/DesktopDateRangePicker/DesktopDateRangePicker.js +2 -2
  16. package/esm/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +2 -2
  17. package/esm/MobileDateRangePicker/MobileDateRangePicker.js +2 -2
  18. package/esm/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +2 -2
  19. package/esm/SingleInputDateRangeField/useSingleInputDateRangeField.d.ts +1 -1
  20. package/esm/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.d.ts +1 -1
  21. package/esm/SingleInputTimeRangeField/useSingleInputTimeRangeField.d.ts +1 -1
  22. package/esm/dateRangeViewRenderers/dateRangeViewRenderers.d.ts +6 -4
  23. package/esm/dateRangeViewRenderers/dateRangeViewRenderers.js +13 -8
  24. package/esm/hooks/index.d.ts +2 -1
  25. package/esm/hooks/useMultiInputRangeField/index.d.ts +2 -1
  26. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeField.d.ts +37 -18
  27. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeField.js +41 -50
  28. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeFieldRootProps.d.ts +11 -0
  29. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeFieldRootProps.js +25 -0
  30. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.d.ts +4 -1
  31. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.js +3 -2
  32. package/esm/hooks/useMultiInputRangeField/useTextFieldProps.d.ts +30 -0
  33. package/esm/hooks/useMultiInputRangeField/useTextFieldProps.js +141 -0
  34. package/esm/index.js +1 -1
  35. package/esm/internals/hooks/models/index.d.ts +1 -1
  36. package/esm/internals/hooks/models/useRangePicker.d.ts +1 -8
  37. package/esm/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +8 -75
  38. package/esm/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.types.d.ts +16 -4
  39. package/esm/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +17 -47
  40. package/esm/internals/hooks/useMobileRangePicker/useMobileRangePicker.types.d.ts +17 -4
  41. package/esm/internals/hooks/useRangePosition.d.ts +1 -4
  42. package/esm/internals/hooks/useRangePosition.js +1 -18
  43. package/esm/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +3 -3
  44. package/esm/internals/utils/createMultiInputRangeField/createMultiInputRangeField.js +26 -32
  45. package/esm/internals/utils/createMultiInputRangeField/createMultiInputRangeField.types.d.ts +1 -1
  46. package/esm/internals/utils/createMultiInputRangeField/useTextFieldProps.d.ts +12 -0
  47. package/esm/internals/utils/createMultiInputRangeField/useTextFieldProps.js +36 -0
  48. package/esm/internals/utils/date-fields-utils.d.ts +4 -1
  49. package/esm/internals/utils/date-fields-utils.js +5 -1
  50. package/esm/internals/utils/releaseInfo.js +1 -1
  51. package/esm/managers/useDateRangeManager.js +8 -1
  52. package/esm/managers/useDateTimeRangeManager.js +8 -1
  53. package/esm/managers/useTimeRangeManager.js +10 -1
  54. package/esm/models/fields.d.ts +5 -18
  55. package/hooks/index.d.ts +2 -1
  56. package/hooks/useMultiInputRangeField/index.d.ts +2 -1
  57. package/hooks/useMultiInputRangeField/useMultiInputRangeField.d.ts +37 -18
  58. package/hooks/useMultiInputRangeField/useMultiInputRangeField.js +40 -51
  59. package/hooks/useMultiInputRangeField/useMultiInputRangeFieldRootProps.d.ts +11 -0
  60. package/hooks/useMultiInputRangeField/useMultiInputRangeFieldRootProps.js +31 -0
  61. package/hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.d.ts +4 -1
  62. package/hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.js +3 -1
  63. package/hooks/useMultiInputRangeField/useTextFieldProps.d.ts +30 -0
  64. package/hooks/useMultiInputRangeField/useTextFieldProps.js +149 -0
  65. package/index.js +1 -1
  66. package/internals/hooks/models/index.d.ts +1 -1
  67. package/internals/hooks/models/useRangePicker.d.ts +1 -8
  68. package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +7 -74
  69. package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.types.d.ts +16 -4
  70. package/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +17 -47
  71. package/internals/hooks/useMobileRangePicker/useMobileRangePicker.types.d.ts +17 -4
  72. package/internals/hooks/useRangePosition.d.ts +1 -4
  73. package/internals/hooks/useRangePosition.js +1 -18
  74. package/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +3 -3
  75. package/internals/utils/createMultiInputRangeField/createMultiInputRangeField.js +25 -31
  76. package/internals/utils/createMultiInputRangeField/createMultiInputRangeField.types.d.ts +1 -1
  77. package/internals/utils/createMultiInputRangeField/useTextFieldProps.d.ts +12 -0
  78. package/internals/utils/createMultiInputRangeField/useTextFieldProps.js +44 -0
  79. package/internals/utils/date-fields-utils.d.ts +4 -1
  80. package/internals/utils/date-fields-utils.js +6 -1
  81. package/internals/utils/releaseInfo.js +1 -1
  82. package/managers/useDateRangeManager.js +8 -1
  83. package/managers/useDateTimeRangeManager.js +8 -1
  84. package/managers/useTimeRangeManager.js +10 -1
  85. package/models/fields.d.ts +5 -18
  86. package/modern/DateRangePicker/DateRangePicker.types.d.ts +2 -2
  87. package/modern/DateTimeRangePicker/DateTimeRangePicker.types.d.ts +2 -2
  88. package/modern/DesktopDateRangePicker/DesktopDateRangePicker.js +2 -2
  89. package/modern/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +2 -2
  90. package/modern/MobileDateRangePicker/MobileDateRangePicker.js +2 -2
  91. package/modern/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +2 -2
  92. package/modern/SingleInputDateRangeField/useSingleInputDateRangeField.d.ts +1 -1
  93. package/modern/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.d.ts +1 -1
  94. package/modern/SingleInputTimeRangeField/useSingleInputTimeRangeField.d.ts +1 -1
  95. package/modern/dateRangeViewRenderers/dateRangeViewRenderers.d.ts +6 -4
  96. package/modern/dateRangeViewRenderers/dateRangeViewRenderers.js +13 -8
  97. package/modern/hooks/index.d.ts +2 -1
  98. package/modern/hooks/useMultiInputRangeField/index.d.ts +2 -1
  99. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeField.d.ts +37 -18
  100. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeField.js +41 -50
  101. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeFieldRootProps.d.ts +11 -0
  102. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeFieldRootProps.js +25 -0
  103. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.d.ts +4 -1
  104. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.js +3 -2
  105. package/modern/hooks/useMultiInputRangeField/useTextFieldProps.d.ts +30 -0
  106. package/modern/hooks/useMultiInputRangeField/useTextFieldProps.js +141 -0
  107. package/modern/index.js +1 -1
  108. package/modern/internals/hooks/models/index.d.ts +1 -1
  109. package/modern/internals/hooks/models/useRangePicker.d.ts +1 -8
  110. package/modern/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +8 -75
  111. package/modern/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.types.d.ts +16 -4
  112. package/modern/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +17 -47
  113. package/modern/internals/hooks/useMobileRangePicker/useMobileRangePicker.types.d.ts +17 -4
  114. package/modern/internals/hooks/useRangePosition.d.ts +1 -4
  115. package/modern/internals/hooks/useRangePosition.js +1 -18
  116. package/modern/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +3 -3
  117. package/modern/internals/utils/createMultiInputRangeField/createMultiInputRangeField.js +26 -32
  118. package/modern/internals/utils/createMultiInputRangeField/createMultiInputRangeField.types.d.ts +1 -1
  119. package/modern/internals/utils/createMultiInputRangeField/useTextFieldProps.d.ts +12 -0
  120. package/modern/internals/utils/createMultiInputRangeField/useTextFieldProps.js +36 -0
  121. package/modern/internals/utils/date-fields-utils.d.ts +4 -1
  122. package/modern/internals/utils/date-fields-utils.js +5 -1
  123. package/modern/internals/utils/releaseInfo.js +1 -1
  124. package/modern/managers/useDateRangeManager.js +8 -1
  125. package/modern/managers/useDateTimeRangeManager.js +8 -1
  126. package/modern/managers/useTimeRangeManager.js +10 -1
  127. package/modern/models/fields.d.ts +5 -18
  128. package/package.json +4 -4
  129. package/tsconfig.build.tsbuildinfo +1 -1
  130. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.d.ts +0 -17
  131. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.js +0 -59
  132. package/esm/internals/hooks/useEnrichedRangePickerField.d.ts +0 -70
  133. package/esm/internals/hooks/useEnrichedRangePickerField.js +0 -236
  134. package/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.d.ts +0 -17
  135. package/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.js +0 -66
  136. package/internals/hooks/useEnrichedRangePickerField.d.ts +0 -70
  137. package/internals/hooks/useEnrichedRangePickerField.js +0 -245
  138. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.d.ts +0 -17
  139. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.js +0 -59
  140. package/modern/internals/hooks/useEnrichedRangePickerField.d.ts +0 -70
  141. package/modern/internals/hooks/useEnrichedRangePickerField.js +0 -236
@@ -13,10 +13,10 @@ var _useSlotProps2 = _interopRequireDefault(require("@mui/utils/useSlotProps"));
13
13
  var _xLicense = require("@mui/x-license");
14
14
  var _PickersLayout = require("@mui/x-date-pickers/PickersLayout");
15
15
  var _internals = require("@mui/x-date-pickers/internals");
16
- var _useEnrichedRangePickerField = require("../useEnrichedRangePickerField");
17
16
  var _releaseInfo = require("../../utils/releaseInfo");
18
17
  var _useRangePosition = require("../useRangePosition");
19
18
  var _usePickerRangePositionContext = require("../../../hooks/usePickerRangePositionContext");
19
+ var _dateFieldsUtils = require("../../utils/date-fields-utils");
20
20
  var _jsxRuntime = require("react/jsx-runtime");
21
21
  const _excluded = ["props"],
22
22
  _excluded2 = ["ownerState"];
@@ -31,27 +31,11 @@ const useDesktopRangePicker = _ref => {
31
31
  slots,
32
32
  slotProps,
33
33
  inputRef,
34
- readOnly,
35
- autoFocus,
36
- disableOpenPicker,
37
34
  localeText
38
35
  } = props;
39
- const fieldContainerRef = React.useRef(null);
40
- const popperRef = React.useRef(null);
41
- const startFieldRef = React.useRef(null);
42
- const endFieldRef = React.useRef(null);
43
- const singleInputFieldRef = React.useRef(null);
44
- const initialView = React.useRef(props.openTo ?? null);
45
- const fieldType = slots.field.fieldType ?? 'multi-input';
46
- const rangePositionResponse = (0, _useRangePosition.useRangePosition)(props, fieldType === 'single-input' ? singleInputFieldRef : undefined);
47
- let fieldRef;
48
- if (fieldType === 'single-input') {
49
- fieldRef = singleInputFieldRef;
50
- } else if (rangePositionResponse.rangePosition === 'start') {
51
- fieldRef = startFieldRef;
52
- } else {
53
- fieldRef = endFieldRef;
54
- }
36
+ const fieldType = (0, _dateFieldsUtils.getRangeFieldType)(slots.field);
37
+ const viewContainerRole = fieldType === 'single-input' ? 'dialog' : 'tooltip';
38
+ const rangePositionResponse = (0, _useRangePosition.useRangePosition)(props);
55
39
  const {
56
40
  providerProps,
57
41
  renderCurrentView,
@@ -59,77 +43,26 @@ const useDesktopRangePicker = _ref => {
59
43
  } = (0, _internals.usePicker)((0, _extends2.default)({}, pickerParams, {
60
44
  props,
61
45
  variant: 'desktop',
62
- autoFocusView: false,
63
- fieldRef,
46
+ autoFocusView: viewContainerRole === 'dialog',
47
+ viewContainerRole,
64
48
  localeText
65
49
  }));
66
-
67
- // Temporary hack to hide the opening button on the range pickers until we have migrate them to the new opening logic.
68
- providerProps.contextValue.triggerStatus = 'hidden';
69
- React.useEffect(() => {
70
- if (providerProps.contextValue.view) {
71
- initialView.current = providerProps.contextValue.view;
72
- }
73
- // eslint-disable-next-line react-hooks/exhaustive-deps
74
- }, []);
75
- const handleBlur = () => {
76
- (0, _internals.executeInTheNextEventLoopTick)(() => {
77
- if (fieldContainerRef.current?.contains((0, _internals.getActiveElement)(document)) || popperRef.current?.contains((0, _internals.getActiveElement)(document))) {
78
- return;
79
- }
80
-
81
- // This direct access to `providerProps` will go away once the range fields stop having their views in a tooltip.
82
- providerProps.privateContextValue.dismissViews();
83
- });
84
- };
85
50
  const Field = slots.field;
86
51
  const _useSlotProps = (0, _useSlotProps2.default)({
87
52
  elementType: Field,
88
53
  externalSlotProps: slotProps?.field,
89
- additionalProps: {
90
- // Internal props
91
- readOnly,
92
- autoFocus: autoFocus && !props.open,
93
- // Forwarded props
94
- ref: fieldContainerRef
95
- },
96
54
  ownerState
97
55
  }),
98
56
  fieldProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps, _excluded2);
99
- const enrichedFieldResponse = (0, _useEnrichedRangePickerField.useEnrichedRangePickerField)((0, _extends2.default)({
100
- variant: 'desktop',
101
- fieldType,
102
- // These direct access to `providerProps` will go away once the range fields handle the picker opening
103
- contextValue: providerProps.contextValue,
104
- fieldPrivateContextValue: providerProps.fieldPrivateContextValue,
105
- readOnly,
106
- disableOpenPicker,
107
- localeText,
108
- onBlur: handleBlur,
109
- pickerSlotProps: slotProps,
110
- pickerSlots: slots,
111
- fieldProps,
112
- anchorRef: providerProps.contextValue.triggerRef,
113
- startFieldRef,
114
- endFieldRef,
115
- singleInputFieldRef,
116
- currentView: providerProps.contextValue.view !== props.openTo ? providerProps.contextValue.view : undefined,
117
- initialView: initialView.current ?? undefined
118
- }, rangePositionResponse));
119
57
  const Layout = slots?.layout ?? _PickersLayout.PickersLayout;
120
58
  const renderPicker = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.PickerProvider, (0, _extends2.default)({}, providerProps, {
121
- // This override will go away once the range fields handle the picker opening
122
- fieldPrivateContextValue: (0, _extends2.default)({}, providerProps.fieldPrivateContextValue, enrichedFieldResponse.fieldPrivateContextValue),
123
59
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.PickerFieldUIContextProvider, {
124
60
  slots: slots,
125
61
  slotProps: slotProps,
126
62
  inputRef: inputRef,
127
63
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_usePickerRangePositionContext.PickerRangePositionContext.Provider, {
128
64
  value: rangePositionResponse,
129
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Field, (0, _extends2.default)({}, enrichedFieldResponse.fieldProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.PickerPopper, {
130
- role: "tooltip",
131
- containerRef: popperRef,
132
- onBlur: handleBlur,
65
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Field, (0, _extends2.default)({}, fieldProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.PickerPopper, {
133
66
  slots: slots,
134
67
  slotProps: slotProps,
135
68
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Layout, (0, _extends2.default)({}, slotProps?.layout, {
@@ -1,7 +1,19 @@
1
- import { PickerPopperSlots, PickerPopperSlotProps, UsePickerViewsProps, DateOrTimeViewWithMeridiem } from '@mui/x-date-pickers/internals';
2
- import { RangeOnlyPickerProps, UseRangePickerParams, UseRangePickerProps, UseRangePickerSlotProps, UseRangePickerSlots } from "../models/useRangePicker.js";
3
- export interface UseDesktopRangePickerSlots extends UseRangePickerSlots, PickerPopperSlots {}
4
- export interface UseDesktopRangePickerSlotProps<TEnableAccessibleFieldDOMStructure extends boolean> extends UseRangePickerSlotProps<TEnableAccessibleFieldDOMStructure>, PickerPopperSlotProps {}
1
+ import { SlotComponentPropsFromProps } from '@mui/x-internals/types';
2
+ import { PickerFieldSlotProps, PickerOwnerState } from '@mui/x-date-pickers/models';
3
+ import { PickerPopperSlots, PickerPopperSlotProps, UsePickerViewsProps, DateOrTimeViewWithMeridiem, PickerRangeValue, PickerFieldUISlotsFromContext, PickerFieldUISlotPropsFromContext } from '@mui/x-date-pickers/internals';
4
+ import { ExportedPickersLayoutSlotProps, ExportedPickersLayoutSlots } from '@mui/x-date-pickers/PickersLayout';
5
+ import { RangeOnlyPickerProps, UseRangePickerParams, UseRangePickerProps } from "../models/useRangePicker.js";
6
+ export interface UseDesktopRangePickerSlots extends PickerPopperSlots, ExportedPickersLayoutSlots<PickerRangeValue>, PickerFieldUISlotsFromContext {
7
+ /**
8
+ * Component used to enter the date with the keyboard.
9
+ */
10
+ field: React.ElementType;
11
+ }
12
+ export interface UseDesktopRangePickerSlotProps<TEnableAccessibleFieldDOMStructure extends boolean> extends PickerPopperSlotProps, ExportedPickersLayoutSlotProps<PickerRangeValue>, PickerFieldUISlotPropsFromContext {
13
+ field?: SlotComponentPropsFromProps<PickerFieldSlotProps<PickerRangeValue, TEnableAccessibleFieldDOMStructure> & {
14
+ dateSeparator?: string;
15
+ }, {}, PickerOwnerState>;
16
+ }
5
17
  export interface DesktopRangeOnlyPickerProps extends RangeOnlyPickerProps {
6
18
  /**
7
19
  * If `true`, the start `input` element is focused during the first mount.
@@ -10,15 +10,15 @@ 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
12
  var _useSlotProps2 = _interopRequireDefault(require("@mui/utils/useSlotProps"));
13
+ var _resolveComponentProps = _interopRequireDefault(require("@mui/utils/resolveComponentProps"));
13
14
  var _xLicense = require("@mui/x-license");
14
15
  var _PickersLayout = require("@mui/x-date-pickers/PickersLayout");
15
16
  var _internals = require("@mui/x-date-pickers/internals");
16
17
  var _hooks = require("@mui/x-date-pickers/hooks");
17
- var _useId = _interopRequireDefault(require("@mui/utils/useId"));
18
- var _useEnrichedRangePickerField = require("../useEnrichedRangePickerField");
19
18
  var _releaseInfo = require("../../utils/releaseInfo");
20
19
  var _useRangePosition = require("../useRangePosition");
21
20
  var _usePickerRangePositionContext = require("../../../hooks/usePickerRangePositionContext");
21
+ var _dateFieldsUtils = require("../../utils/date-fields-utils");
22
22
  var _jsxRuntime = require("react/jsx-runtime");
23
23
  const _excluded = ["props"],
24
24
  _excluded2 = ["ownerState"];
@@ -34,25 +34,11 @@ const useMobileRangePicker = _ref => {
34
34
  slotProps: innerSlotProps,
35
35
  label,
36
36
  inputRef,
37
- readOnly,
38
- disableOpenPicker,
39
37
  localeText
40
38
  } = props;
41
- const startFieldRef = React.useRef(null);
42
- const endFieldRef = React.useRef(null);
43
- const singleInputFieldRef = React.useRef(null);
44
- const fieldType = slots.field.fieldType ?? 'multi-input';
45
- const rangePositionResponse = (0, _useRangePosition.useRangePosition)(props, fieldType === 'single-input' ? singleInputFieldRef : undefined);
46
- const labelId = (0, _useId.default)();
39
+ const fieldType = (0, _dateFieldsUtils.getRangeFieldType)(slots.field);
40
+ const rangePositionResponse = (0, _useRangePosition.useRangePosition)(props);
47
41
  const contextTranslations = (0, _hooks.usePickerTranslations)();
48
- let fieldRef;
49
- if (fieldType === 'single-input') {
50
- fieldRef = singleInputFieldRef;
51
- } else if (rangePositionResponse.rangePosition === 'start') {
52
- fieldRef = startFieldRef;
53
- } else {
54
- fieldRef = endFieldRef;
55
- }
56
42
  const {
57
43
  providerProps,
58
44
  renderCurrentView,
@@ -61,41 +47,21 @@ const useMobileRangePicker = _ref => {
61
47
  props,
62
48
  variant: 'mobile',
63
49
  autoFocusView: true,
64
- fieldRef,
50
+ viewContainerRole: 'dialog',
65
51
  localeText
66
52
  }));
67
-
68
- // Temporary hack to hide the opening button on the range pickers until we have migrate them to the new opening logic.
69
- providerProps.contextValue.triggerStatus = 'hidden';
53
+ const labelId = providerProps.privateContextValue.labelId;
54
+ const isToolbarHidden = innerSlotProps?.toolbar?.hidden ?? false;
70
55
  const Field = slots.field;
71
56
  const _useSlotProps = (0, _useSlotProps2.default)({
72
57
  elementType: Field,
73
58
  externalSlotProps: innerSlotProps?.field,
74
- additionalProps: {
75
- // Internal props
76
- readOnly: readOnly ?? true
77
- },
59
+ additionalProps: (0, _extends2.default)({}, fieldType === 'single-input' && isToolbarHidden && {
60
+ id: labelId
61
+ }),
78
62
  ownerState
79
63
  }),
80
64
  fieldProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps, _excluded2);
81
- const isToolbarHidden = innerSlotProps?.toolbar?.hidden ?? false;
82
- const enrichedFieldResponse = (0, _useEnrichedRangePickerField.useEnrichedRangePickerField)((0, _extends2.default)({
83
- variant: 'mobile',
84
- fieldType,
85
- // These direct access to `providerProps` will go away once the range fields handle the picker opening
86
- contextValue: providerProps.contextValue,
87
- fieldPrivateContextValue: providerProps.fieldPrivateContextValue,
88
- readOnly,
89
- labelId,
90
- disableOpenPicker,
91
- localeText,
92
- pickerSlots: slots,
93
- pickerSlotProps: innerSlotProps,
94
- fieldProps,
95
- startFieldRef,
96
- endFieldRef,
97
- singleInputFieldRef
98
- }, rangePositionResponse));
99
65
  const Layout = slots?.layout ?? _PickersLayout.PickersLayout;
100
66
  const finalLocaleText = (0, _extends2.default)({}, contextTranslations, localeText);
101
67
  let labelledById = pickerParams.valueType === 'date-time' ? `${labelId}-start-toolbar ${labelId}-end-toolbar` : labelId;
@@ -120,17 +86,21 @@ const useMobileRangePicker = _ref => {
120
86
  mobilePaper: (0, _extends2.default)({
121
87
  'aria-labelledby': labelledById
122
88
  }, innerSlotProps?.mobilePaper)
89
+ }, fieldType === 'multi-input' && {
90
+ textField: slotOwnerState => {
91
+ return (0, _extends2.default)({}, (0, _resolveComponentProps.default)(innerSlotProps?.textField, slotOwnerState), {
92
+ id: `${labelId}-${slotOwnerState.position}`
93
+ });
94
+ }
123
95
  });
124
96
  const renderPicker = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.PickerProvider, (0, _extends2.default)({}, providerProps, {
125
- // This override will go away once the range fields handle the picker opening
126
- fieldPrivateContextValue: (0, _extends2.default)({}, providerProps.fieldPrivateContextValue, enrichedFieldResponse.fieldPrivateContextValue),
127
97
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.PickerFieldUIContextProvider, {
128
98
  slots: slots,
129
99
  slotProps: slotProps,
130
100
  inputRef: inputRef,
131
101
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_usePickerRangePositionContext.PickerRangePositionContext.Provider, {
132
102
  value: rangePositionResponse,
133
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Field, (0, _extends2.default)({}, enrichedFieldResponse.fieldProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.PickersModalDialog, {
103
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Field, (0, _extends2.default)({}, fieldProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.PickersModalDialog, {
134
104
  slots: slots,
135
105
  slotProps: slotProps,
136
106
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Layout, (0, _extends2.default)({}, slotProps?.layout, {
@@ -1,7 +1,20 @@
1
- import { PickersModalDialogSlots, PickersModalDialogSlotProps, UsePickerViewsProps, DateOrTimeViewWithMeridiem } from '@mui/x-date-pickers/internals';
2
- import { RangeOnlyPickerProps, UseRangePickerParams, UseRangePickerProps, UseRangePickerSlotProps, UseRangePickerSlots } from "../models/useRangePicker.js";
3
- export interface UseMobileRangePickerSlots extends UseRangePickerSlots, PickersModalDialogSlots {}
4
- export interface UseMobileRangePickerSlotProps<TEnableAccessibleFieldDOMStructure extends boolean> extends UseRangePickerSlotProps<TEnableAccessibleFieldDOMStructure>, PickersModalDialogSlotProps {}
1
+ import { SlotComponentPropsFromProps } from '@mui/x-internals/types';
2
+ import { PickerFieldSlotProps, PickerOwnerState } from '@mui/x-date-pickers/models';
3
+ import { PickersModalDialogSlots, PickersModalDialogSlotProps, UsePickerViewsProps, DateOrTimeViewWithMeridiem, PickerRangeValue, PickerFieldUISlotsFromContext, PickerFieldUISlotPropsFromContext } from '@mui/x-date-pickers/internals';
4
+ import { ExportedPickersLayoutSlotProps, ExportedPickersLayoutSlots, PickersLayoutSlotProps } from '@mui/x-date-pickers/PickersLayout';
5
+ import { RangeOnlyPickerProps, UseRangePickerParams, UseRangePickerProps } from "../models/useRangePicker.js";
6
+ export interface UseMobileRangePickerSlots extends PickersModalDialogSlots, ExportedPickersLayoutSlots<PickerRangeValue>, PickerFieldUISlotsFromContext {
7
+ /**
8
+ * Component used to enter the date with the keyboard.
9
+ */
10
+ field: React.ElementType;
11
+ }
12
+ export interface ExportedUseMobileRangePickerSlotProps<TEnableAccessibleFieldDOMStructure extends boolean> extends PickersModalDialogSlotProps, ExportedPickersLayoutSlotProps<PickerRangeValue>, PickerFieldUISlotPropsFromContext {
13
+ field?: SlotComponentPropsFromProps<PickerFieldSlotProps<PickerRangeValue, TEnableAccessibleFieldDOMStructure> & {
14
+ dateSeparator?: string;
15
+ }, {}, PickerOwnerState>;
16
+ }
17
+ export interface UseMobileRangePickerSlotProps<TEnableAccessibleFieldDOMStructure extends boolean> extends ExportedUseMobileRangePickerSlotProps<TEnableAccessibleFieldDOMStructure>, Pick<PickersLayoutSlotProps<PickerRangeValue>, 'toolbar'> {}
5
18
  export interface MobileRangeOnlyPickerProps extends RangeOnlyPickerProps {}
6
19
  export interface UseMobileRangePickerProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TError, TExternalProps extends UsePickerViewsProps<any, TView, any>> extends UseRangePickerProps<TView, TError, TExternalProps> {
7
20
  /**
@@ -1,6 +1,3 @@
1
- import * as React from 'react';
2
- import { FieldRef } from '@mui/x-date-pickers/models';
3
- import { PickerRangeValue } from '@mui/x-date-pickers/internals';
4
1
  import { RangePosition } from "../../models/index.js";
5
2
  export interface UseRangePositionProps {
6
3
  /**
@@ -24,4 +21,4 @@ export interface UseRangePositionResponse {
24
21
  rangePosition: RangePosition;
25
22
  setRangePosition: (newPosition: RangePosition) => void;
26
23
  }
27
- export declare const useRangePosition: (props: UseRangePositionProps, singleInputFieldRef?: React.RefObject<FieldRef<PickerRangeValue> | null>) => UseRangePositionResponse;
24
+ export declare const useRangePosition: (props: UseRangePositionProps) => UseRangePositionResponse;
@@ -7,33 +7,16 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.useRangePosition = void 0;
8
8
  var _useControlled = _interopRequireDefault(require("@mui/utils/useControlled"));
9
9
  var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
10
- const useRangePosition = (props, singleInputFieldRef) => {
10
+ const useRangePosition = props => {
11
11
  const [rangePosition, setRangePosition] = (0, _useControlled.default)({
12
12
  name: 'useRangePosition',
13
13
  state: 'rangePosition',
14
14
  controlled: props.rangePosition,
15
15
  default: props.defaultRangePosition ?? 'start'
16
16
  });
17
-
18
- // When using a single input field,
19
- // we want to select the 1st section of the edited date when updating the range position.
20
- const syncRangePositionWithSingleInputField = newRangePosition => {
21
- if (singleInputFieldRef?.current == null) {
22
- return;
23
- }
24
- const sections = singleInputFieldRef.current.getSections();
25
- const targetActiveSectionIndex = newRangePosition === 'start' ? 0 : sections.length / 2;
26
- const activeSectionIndex = singleInputFieldRef.current.getActiveSectionIndex();
27
- // if the active section is already within the target range, we don't need to update it.
28
- if (activeSectionIndex && activeSectionIndex >= targetActiveSectionIndex && activeSectionIndex < targetActiveSectionIndex + sections.length / 2) {
29
- return;
30
- }
31
- singleInputFieldRef.current.setSelectedSections(targetActiveSectionIndex);
32
- };
33
17
  const handleRangePositionChange = (0, _useEventCallback.default)(newRangePosition => {
34
18
  setRangePosition(newRangePosition);
35
19
  props.onRangePositionChange?.(newRangePosition);
36
- syncRangePositionWithSingleInputField(newRangePosition);
37
20
  });
38
21
  return {
39
22
  rangePosition,
@@ -47,10 +47,10 @@ const useStaticRangePicker = _ref => {
47
47
  renderCurrentView
48
48
  } = (0, _internals.usePicker)((0, _extends2.default)({}, pickerParams, {
49
49
  props,
50
+ variant: displayStaticWrapperAs,
50
51
  autoFocusView: autoFocus ?? false,
51
- fieldRef: undefined,
52
- localeText,
53
- variant: displayStaticWrapperAs
52
+ viewContainerRole: null,
53
+ localeText
54
54
  }));
55
55
  const Layout = slots?.layout ?? PickerStaticLayout;
56
56
  const renderPicker = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_usePickerRangePositionContext.PickerRangePositionContext.Provider, {
@@ -22,6 +22,7 @@ var _internals = require("@mui/x-date-pickers/internals");
22
22
  var _hooks = require("@mui/x-date-pickers/hooks");
23
23
  var _PickersTextField = require("@mui/x-date-pickers/PickersTextField");
24
24
  var _useMultiInputRangeField = require("../../../hooks/useMultiInputRangeField");
25
+ var _useTextFieldProps = require("./useTextFieldProps");
25
26
  var _jsxRuntime = require("react/jsx-runtime");
26
27
  const _excluded = ["slots", "slotProps", "className", "classes"];
27
28
  function createMultiInputRangeField({
@@ -59,14 +60,19 @@ function createMultiInputRangeField({
59
60
  // eslint-disable-next-line material-ui/mui-name-matches-component-name
60
61
  name
61
62
  });
63
+ const pickerFieldUIContext = React.useContext(_internals.PickerFieldUIContext);
64
+ const pickerContext = (0, _internals.useNullablePickerContext)();
62
65
  const manager = useManager({
63
66
  enableAccessibleFieldDOMStructure: props.enableAccessibleFieldDOMStructure,
64
67
  dateSeparator: props.dateSeparator
65
68
  });
66
69
  const {
67
- internalProps,
70
+ internalProps: rawInternalProps,
68
71
  forwardedProps
69
72
  } = (0, _hooks.useSplitFieldProps)(themeProps, manager.valueType);
73
+ const internalProps = pickerContext?.variant === 'mobile' ? (0, _extends2.default)({}, rawInternalProps, {
74
+ readOnly: true
75
+ }) : rawInternalProps;
70
76
  const {
71
77
  slots,
72
78
  slotProps,
@@ -76,7 +82,6 @@ function createMultiInputRangeField({
76
82
  otherForwardedProps = (0, _objectWithoutPropertiesLoose2.default)(forwardedProps, _excluded);
77
83
  const classes = useUtilityClasses(classesProp);
78
84
  const ownerState = (0, _internals.useFieldOwnerState)(internalProps);
79
- const pickerContext = (0, _internals.useNullablePickerContext)();
80
85
  const handleRef = (0, _useForkRef.default)(ref, pickerContext?.rootRef);
81
86
  const Root = slots?.root ?? MultiInputRangeFieldRoot;
82
87
  const rootProps = (0, _useSlotProps.default)({
@@ -89,29 +94,22 @@ function createMultiInputRangeField({
89
94
  ownerState,
90
95
  className: (0, _clsx.default)(className, classes.root)
91
96
  });
92
- const startTextFieldProps = (0, _useSlotProps.default)({
93
- elementType: _PickersTextField.PickersTextField,
94
- externalSlotProps: slotProps?.textField,
95
- ownerState: (0, _extends2.default)({}, ownerState, {
96
- position: 'start'
97
- })
97
+ const startTextFieldProps = (0, _useTextFieldProps.useTextFieldProps)({
98
+ slotProps,
99
+ ownerState,
100
+ position: 'start'
98
101
  });
99
- const endTextFieldProps = (0, _useSlotProps.default)({
100
- elementType: _PickersTextField.PickersTextField,
101
- externalSlotProps: slotProps?.textField,
102
- ownerState: (0, _extends2.default)({}, ownerState, {
103
- position: 'end'
104
- })
102
+ const endTextFieldProps = (0, _useTextFieldProps.useTextFieldProps)({
103
+ slotProps,
104
+ ownerState,
105
+ position: 'end'
105
106
  });
106
- const {
107
- startDate,
108
- endDate,
109
- enableAccessibleFieldDOMStructure
110
- } = (0, _useMultiInputRangeField.useMultiInputRangeField)({
107
+ const fieldResponse = (0, _useMultiInputRangeField.useMultiInputRangeField)({
111
108
  manager,
112
109
  internalProps,
113
- startForwardedProps: startTextFieldProps,
114
- endForwardedProps: endTextFieldProps
110
+ rootProps,
111
+ startTextFieldProps,
112
+ endTextFieldProps
115
113
  });
116
114
  const Separator = slots?.separator ?? MultiInputRangeFieldSeparator;
117
115
  const separatorProps = (0, _useSlotProps.default)({
@@ -123,19 +121,15 @@ function createMultiInputRangeField({
123
121
  ownerState,
124
122
  className: classes.separator
125
123
  });
126
- const {
127
- textFieldProps: startDateProps
128
- } = (0, _internals.cleanFieldResponse)(startDate);
129
- const {
130
- textFieldProps: endDateProps
131
- } = (0, _internals.cleanFieldResponse)(endDate);
132
- const TextField = slots?.textField ?? (enableAccessibleFieldDOMStructure === false ? _TextField.default : _PickersTextField.PickersTextField);
133
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Root, (0, _extends2.default)({}, rootProps, {
124
+ const cleanStartTextFieldResponse = (0, _internals.cleanFieldResponse)(fieldResponse.startTextField);
125
+ const cleanEndTextFieldResponse = (0, _internals.cleanFieldResponse)(fieldResponse.endTextField);
126
+ const TextField = slots?.textField ?? pickerFieldUIContext.slots.textField ?? (fieldResponse.enableAccessibleFieldDOMStructure === false ? _TextField.default : _PickersTextField.PickersTextField);
127
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Root, (0, _extends2.default)({}, fieldResponse.root, {
134
128
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(TextField, (0, _extends2.default)({
135
129
  fullWidth: true
136
- }, startDateProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(Separator, (0, _extends2.default)({}, separatorProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(TextField, (0, _extends2.default)({
130
+ }, cleanStartTextFieldResponse.textFieldProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(Separator, (0, _extends2.default)({}, separatorProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(TextField, (0, _extends2.default)({
137
131
  fullWidth: true
138
- }, endDateProps))]
132
+ }, cleanEndTextFieldResponse.textFieldProps))]
139
133
  }));
140
134
  });
141
135
  MultiInputRangeField.fieldType = 'multi-input';
@@ -7,7 +7,7 @@ import { FieldOwnerState } from '@mui/x-date-pickers/models';
7
7
  import { PickerManagerEnableAccessibleFieldDOMStructure, PickerManagerFieldInternalProps } from '@mui/x-date-pickers/internals';
8
8
  import { FieldType, MultiInputFieldRefs, RangeFieldSeparatorProps, RangePosition } from "../../../models/index.js";
9
9
  import { PickerAnyRangeManager } from "../../models/managers.js";
10
- export type MultiInputRangeFieldProps<TManager extends PickerAnyRangeManager> = MultiInputFieldRefs & RangeFieldSeparatorProps & Omit<PickerManagerFieldInternalProps<TManager>, 'unstableFieldRef' | 'clearable' | 'onClear'> & Omit<StackProps, 'position' | keyof PickerManagerFieldInternalProps<TManager>> & {
10
+ export type MultiInputRangeFieldProps<TManager extends PickerAnyRangeManager> = MultiInputFieldRefs & RangeFieldSeparatorProps & Omit<PickerManagerFieldInternalProps<TManager>, 'unstableFieldRef' | 'clearable' | 'onClear' | 'focused'> & Omit<StackProps, 'position' | keyof PickerManagerFieldInternalProps<TManager>> & {
11
11
  /**
12
12
  * If `true`, the field is focused during the first mount.
13
13
  * @default false
@@ -0,0 +1,12 @@
1
+ import { PickersTextFieldProps } from '@mui/x-date-pickers/PickersTextField';
2
+ import { FieldOwnerState } from '@mui/x-date-pickers/models';
3
+ import { MultiInputRangeFieldSlotProps } from "./createMultiInputRangeField.types.js";
4
+ export declare function useTextFieldProps({
5
+ slotProps,
6
+ ownerState,
7
+ position
8
+ }: {
9
+ slotProps: MultiInputRangeFieldSlotProps | undefined;
10
+ ownerState: FieldOwnerState;
11
+ position: 'start' | 'end';
12
+ }): PickersTextFieldProps;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useTextFieldProps = useTextFieldProps;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var React = _interopRequireWildcard(require("react"));
11
+ var _useSlotProps = _interopRequireDefault(require("@mui/utils/useSlotProps"));
12
+ var _PickersTextField = require("@mui/x-date-pickers/PickersTextField");
13
+ var _hooks = require("@mui/x-date-pickers/hooks");
14
+ var _internals = require("@mui/x-date-pickers/internals");
15
+ var _useNullablePickerRangePositionContext = require("../../hooks/useNullablePickerRangePositionContext");
16
+ function useTextFieldProps({
17
+ slotProps,
18
+ ownerState,
19
+ position
20
+ }) {
21
+ const pickerContext = (0, _internals.useNullablePickerContext)();
22
+ const translations = (0, _hooks.usePickerTranslations)();
23
+ const pickerFieldUIContext = React.useContext(_internals.PickerFieldUIContext);
24
+ const rangePositionContext = (0, _useNullablePickerRangePositionContext.useNullablePickerRangePositionContext)();
25
+ const textFieldProps = (0, _useSlotProps.default)({
26
+ elementType: _PickersTextField.PickersTextField,
27
+ externalSlotProps: (0, _internals.mergeSlotProps)(pickerFieldUIContext.slotProps.textField, slotProps?.textField),
28
+ additionalProps: {
29
+ // TODO: Decide if we also want to set the default labels on standalone fields.
30
+ label: pickerContext ? translations[position] : undefined,
31
+ focused: pickerContext?.open ? rangePositionContext?.rangePosition === position : undefined
32
+ },
33
+ ownerState: (0, _extends2.default)({}, ownerState, {
34
+ position
35
+ })
36
+ });
37
+ if (!textFieldProps.InputProps) {
38
+ textFieldProps.InputProps = {};
39
+ }
40
+ if (pickerContext && position === 'start') {
41
+ textFieldProps.InputProps.ref = pickerContext.triggerRef;
42
+ }
43
+ return textFieldProps;
44
+ }
@@ -17,4 +17,7 @@ export declare const removeLastSeparator: (dateSections: FieldRangeSection[]) =>
17
17
  modified: boolean;
18
18
  startSeparator: string;
19
19
  endSeparator: string;
20
- })[];
20
+ })[];
21
+ export declare function getRangeFieldType(field: React.ElementType & {
22
+ fieldType?: 'single-input' | 'multi-input';
23
+ }): "single-input" | "multi-input";
@@ -4,6 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
+ exports.getRangeFieldType = getRangeFieldType;
7
8
  exports.splitDateRangeSections = exports.removeLastSeparator = void 0;
8
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10
  const splitDateRangeSections = sections => {
@@ -30,4 +31,8 @@ const removeLastSeparator = dateSections => dateSections.map((section, sectionIn
30
31
  }
31
32
  return section;
32
33
  });
33
- exports.removeLastSeparator = removeLastSeparator;
34
+ exports.removeLastSeparator = removeLastSeparator;
35
+ function getRangeFieldType(field) {
36
+ const fieldType = field.fieldType ?? 'multi-input';
37
+ return fieldType;
38
+ }
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getReleaseInfo = void 0;
7
7
  var _utils = require("@mui/utils");
8
8
  const getReleaseInfo = () => {
9
- const releaseInfo = "MTczOTc0NjgwMDAwMA==";
9
+ const releaseInfo = "MTc0MDY5NzIwMDAwMA==";
10
10
  if (process.env.NODE_ENV !== 'production') {
11
11
  // A simple hack to set the value in the test environment (has no build step).
12
12
  // eslint-disable-next-line no-useless-concat
@@ -35,6 +35,13 @@ function useDateRangeManager(parameters = {}) {
35
35
  internalProps
36
36
  })),
37
37
  // TODO v8: Add a real aria label before moving the opening logic to the field on range pickers.
38
- internal_getOpenPickerButtonAriaLabel: () => ''
38
+ internal_getOpenPickerButtonAriaLabel: ({
39
+ value,
40
+ utils,
41
+ localeText
42
+ }) => {
43
+ const formattedValue = utils.isValid(value[0]) ? utils.format(value[0], 'fullDate') : null;
44
+ return localeText.openDatePickerDialogue(formattedValue);
45
+ }
39
46
  }), [enableAccessibleFieldDOMStructure, dateSeparator]);
40
47
  }
@@ -35,6 +35,13 @@ function useDateTimeRangeManager(parameters = {}) {
35
35
  defaultDates
36
36
  })),
37
37
  // TODO v8: Add a real aria label before moving the opening logic to the field on range pickers.
38
- internal_getOpenPickerButtonAriaLabel: () => ''
38
+ internal_getOpenPickerButtonAriaLabel: ({
39
+ value,
40
+ utils,
41
+ localeText
42
+ }) => {
43
+ const formattedValue = utils.isValid(value[0]) ? utils.format(value[0], 'fullDate') : null;
44
+ return localeText.openDatePickerDialogue(formattedValue);
45
+ }
39
46
  }), [enableAccessibleFieldDOMStructure, dateSeparator]);
40
47
  }
@@ -33,6 +33,15 @@ function useTimeRangeManager(parameters = {}) {
33
33
  internalProps
34
34
  })),
35
35
  // TODO v8: Add a real aria label before moving the opening logic to the field on range pickers.
36
- internal_getOpenPickerButtonAriaLabel: () => ''
36
+ internal_getOpenPickerButtonAriaLabel: ({
37
+ value,
38
+ utils,
39
+ localeText
40
+ }) => {
41
+ // TODO: Use ampm prop?
42
+ const ampm = utils.is12HourCycleInCurrentLocale();
43
+ const formattedValue = utils.isValid(value[0]) ? utils.format(value[0], ampm ? 'fullTime12h' : 'fullTime24h') : null;
44
+ return localeText.openTimePickerDialogue(formattedValue);
45
+ }
37
46
  }), [enableAccessibleFieldDOMStructure, dateSeparator]);
38
47
  }