@mui/x-date-pickers 8.0.0-beta.0 → 8.0.0-beta.2

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 (237) hide show
  1. package/CHANGELOG.md +171 -0
  2. package/DateCalendar/DateCalendar.js +4 -8
  3. package/DateCalendar/DayCalendar.d.ts +3 -7
  4. package/DateCalendar/DayCalendar.js +18 -10
  5. package/DateCalendar/index.d.ts +0 -1
  6. package/DateField/useDateField.d.ts +1 -1
  7. package/DateField/useDateField.js +2 -16
  8. package/DatePicker/DatePicker.js +1 -0
  9. package/DatePicker/shared.js +3 -9
  10. package/DateTimeField/useDateTimeField.d.ts +1 -1
  11. package/DateTimeField/useDateTimeField.js +2 -16
  12. package/DateTimePicker/DateTimePicker.js +1 -0
  13. package/DateTimePicker/shared.js +3 -13
  14. package/DesktopDatePicker/DesktopDatePicker.js +1 -0
  15. package/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -0
  16. package/DesktopTimePicker/DesktopTimePicker.js +1 -0
  17. package/MobileDatePicker/MobileDatePicker.js +1 -0
  18. package/MobileDateTimePicker/MobileDateTimePicker.js +1 -0
  19. package/MobileTimePicker/MobileTimePicker.js +1 -0
  20. package/MonthCalendar/MonthCalendar.js +4 -9
  21. package/PickersDay/PickersDay.d.ts +1 -72
  22. package/PickersDay/PickersDay.js +30 -28
  23. package/PickersDay/PickersDay.types.d.ts +114 -0
  24. package/PickersDay/PickersDay.types.js +5 -0
  25. package/PickersDay/index.d.ts +1 -1
  26. package/PickersDay/usePickerDayOwnerState.d.ts +14 -0
  27. package/PickersDay/usePickerDayOwnerState.js +40 -0
  28. package/PickersSectionList/PickersSectionList.d.ts +1 -1
  29. package/PickersSectionList/PickersSectionList.types.d.ts +2 -6
  30. package/TimeField/useTimeField.d.ts +1 -1
  31. package/TimeField/useTimeField.js +2 -16
  32. package/TimePicker/TimePicker.js +1 -0
  33. package/TimePicker/shared.js +3 -3
  34. package/YearCalendar/YearCalendar.js +4 -10
  35. package/esm/DateCalendar/DateCalendar.js +6 -10
  36. package/esm/DateCalendar/DayCalendar.d.ts +3 -7
  37. package/esm/DateCalendar/DayCalendar.js +18 -10
  38. package/esm/DateCalendar/index.d.ts +0 -1
  39. package/esm/DateField/useDateField.d.ts +1 -1
  40. package/esm/DateField/useDateField.js +3 -17
  41. package/esm/DatePicker/DatePicker.js +1 -0
  42. package/esm/DatePicker/shared.js +3 -9
  43. package/esm/DateTimeField/useDateTimeField.d.ts +1 -1
  44. package/esm/DateTimeField/useDateTimeField.js +3 -17
  45. package/esm/DateTimePicker/DateTimePicker.js +1 -0
  46. package/esm/DateTimePicker/shared.js +4 -14
  47. package/esm/DesktopDatePicker/DesktopDatePicker.js +1 -0
  48. package/esm/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -0
  49. package/esm/DesktopTimePicker/DesktopTimePicker.js +1 -0
  50. package/esm/MobileDatePicker/MobileDatePicker.js +1 -0
  51. package/esm/MobileDateTimePicker/MobileDateTimePicker.js +1 -0
  52. package/esm/MobileTimePicker/MobileTimePicker.js +1 -0
  53. package/esm/MonthCalendar/MonthCalendar.js +6 -11
  54. package/esm/PickersDay/PickersDay.d.ts +1 -72
  55. package/esm/PickersDay/PickersDay.js +30 -28
  56. package/esm/PickersDay/PickersDay.types.d.ts +114 -0
  57. package/esm/PickersDay/PickersDay.types.js +1 -0
  58. package/esm/PickersDay/index.d.ts +1 -1
  59. package/esm/PickersDay/usePickerDayOwnerState.d.ts +14 -0
  60. package/esm/PickersDay/usePickerDayOwnerState.js +32 -0
  61. package/esm/PickersSectionList/PickersSectionList.d.ts +1 -1
  62. package/esm/PickersSectionList/PickersSectionList.types.d.ts +2 -6
  63. package/esm/TimeField/useTimeField.d.ts +1 -1
  64. package/esm/TimeField/useTimeField.js +3 -17
  65. package/esm/TimePicker/TimePicker.js +1 -0
  66. package/esm/TimePicker/shared.js +3 -3
  67. package/esm/YearCalendar/YearCalendar.js +5 -11
  68. package/esm/hooks/useSplitFieldProps.d.ts +1 -1
  69. package/esm/index.js +1 -1
  70. package/esm/internals/components/PickerFieldUI.d.ts +5 -5
  71. package/esm/internals/hooks/useField/buildSectionsFromFormat.d.ts +2 -2
  72. package/esm/internals/hooks/useField/buildSectionsFromFormat.js +9 -9
  73. package/esm/internals/hooks/useField/index.d.ts +1 -1
  74. package/esm/internals/hooks/useField/syncSelectionToDOM.d.ts +9 -0
  75. package/esm/internals/hooks/useField/syncSelectionToDOM.js +50 -0
  76. package/esm/internals/hooks/useField/useField.d.ts +2 -4
  77. package/esm/internals/hooks/useField/useField.js +5 -229
  78. package/esm/internals/hooks/useField/useField.types.d.ts +55 -68
  79. package/esm/internals/hooks/useField/useField.utils.d.ts +3 -8
  80. package/esm/internals/hooks/useField/useField.utils.js +7 -149
  81. package/esm/internals/hooks/useField/useFieldCharacterEditing.d.ts +19 -26
  82. package/esm/internals/hooks/useField/useFieldCharacterEditing.js +42 -60
  83. package/esm/internals/hooks/useField/useFieldHiddenInputProps.d.ts +20 -0
  84. package/esm/internals/hooks/useField/useFieldHiddenInputProps.js +31 -0
  85. package/esm/internals/hooks/useField/useFieldInternalPropsWithDefaults.js +8 -10
  86. package/esm/internals/hooks/useField/useFieldRootHandleKeyDown.d.ts +16 -0
  87. package/esm/internals/hooks/useField/useFieldRootHandleKeyDown.js +205 -0
  88. package/esm/internals/hooks/useField/useFieldRootProps.d.ts +32 -0
  89. package/esm/internals/hooks/useField/useFieldRootProps.js +150 -0
  90. package/esm/internals/hooks/useField/useFieldSectionContainerProps.d.ts +15 -0
  91. package/esm/internals/hooks/useField/useFieldSectionContainerProps.js +29 -0
  92. package/esm/internals/hooks/useField/useFieldSectionContentProps.d.ts +23 -0
  93. package/esm/internals/hooks/useField/useFieldSectionContentProps.js +226 -0
  94. package/esm/internals/hooks/useField/useFieldState.d.ts +23 -13
  95. package/esm/internals/hooks/useField/useFieldState.js +103 -30
  96. package/esm/internals/hooks/useField/useFieldV6TextField.d.ts +3 -3
  97. package/esm/internals/hooks/useField/useFieldV6TextField.js +202 -135
  98. package/esm/internals/hooks/useField/useFieldV7TextField.d.ts +3 -2
  99. package/esm/internals/hooks/useField/useFieldV7TextField.js +200 -367
  100. package/esm/internals/hooks/usePicker/usePicker.types.d.ts +1 -0
  101. package/esm/internals/index.d.ts +6 -5
  102. package/esm/internals/index.js +4 -3
  103. package/esm/locales/deDE.js +2 -3
  104. package/esm/managers/useDateManager.d.ts +4 -13
  105. package/esm/managers/useDateManager.js +21 -31
  106. package/esm/managers/useDateTimeManager.d.ts +4 -13
  107. package/esm/managers/useDateTimeManager.js +26 -36
  108. package/esm/managers/useTimeManager.d.ts +4 -13
  109. package/esm/managers/useTimeManager.js +17 -27
  110. package/esm/models/fields.d.ts +2 -2
  111. package/esm/models/manager.d.ts +6 -10
  112. package/esm/validation/validateDate.js +3 -4
  113. package/hooks/useSplitFieldProps.d.ts +1 -1
  114. package/index.js +1 -1
  115. package/internals/components/PickerFieldUI.d.ts +5 -5
  116. package/internals/hooks/useField/buildSectionsFromFormat.d.ts +2 -2
  117. package/internals/hooks/useField/buildSectionsFromFormat.js +9 -9
  118. package/internals/hooks/useField/index.d.ts +1 -1
  119. package/internals/hooks/useField/syncSelectionToDOM.d.ts +9 -0
  120. package/internals/hooks/useField/syncSelectionToDOM.js +56 -0
  121. package/internals/hooks/useField/useField.d.ts +2 -4
  122. package/internals/hooks/useField/useField.js +5 -231
  123. package/internals/hooks/useField/useField.types.d.ts +55 -68
  124. package/internals/hooks/useField/useField.utils.d.ts +3 -8
  125. package/internals/hooks/useField/useField.utils.js +9 -154
  126. package/internals/hooks/useField/useFieldCharacterEditing.d.ts +19 -26
  127. package/internals/hooks/useField/useFieldCharacterEditing.js +41 -59
  128. package/internals/hooks/useField/useFieldHiddenInputProps.d.ts +20 -0
  129. package/internals/hooks/useField/useFieldHiddenInputProps.js +39 -0
  130. package/internals/hooks/useField/useFieldInternalPropsWithDefaults.js +8 -10
  131. package/internals/hooks/useField/useFieldRootHandleKeyDown.d.ts +16 -0
  132. package/internals/hooks/useField/useFieldRootHandleKeyDown.js +211 -0
  133. package/internals/hooks/useField/useFieldRootProps.d.ts +32 -0
  134. package/internals/hooks/useField/useFieldRootProps.js +156 -0
  135. package/internals/hooks/useField/useFieldSectionContainerProps.d.ts +15 -0
  136. package/internals/hooks/useField/useFieldSectionContainerProps.js +37 -0
  137. package/internals/hooks/useField/useFieldSectionContentProps.d.ts +23 -0
  138. package/internals/hooks/useField/useFieldSectionContentProps.js +234 -0
  139. package/internals/hooks/useField/useFieldState.d.ts +23 -13
  140. package/internals/hooks/useField/useFieldState.js +102 -29
  141. package/internals/hooks/useField/useFieldV6TextField.d.ts +3 -3
  142. package/internals/hooks/useField/useFieldV6TextField.js +202 -135
  143. package/internals/hooks/useField/useFieldV7TextField.d.ts +3 -2
  144. package/internals/hooks/useField/useFieldV7TextField.js +200 -367
  145. package/internals/hooks/usePicker/usePicker.types.d.ts +1 -0
  146. package/internals/index.d.ts +6 -5
  147. package/internals/index.js +25 -18
  148. package/locales/deDE.js +2 -3
  149. package/managers/useDateManager.d.ts +4 -13
  150. package/managers/useDateManager.js +21 -31
  151. package/managers/useDateTimeManager.d.ts +4 -13
  152. package/managers/useDateTimeManager.js +26 -36
  153. package/managers/useTimeManager.d.ts +4 -13
  154. package/managers/useTimeManager.js +18 -28
  155. package/models/fields.d.ts +2 -2
  156. package/models/manager.d.ts +6 -10
  157. package/modern/DateCalendar/DateCalendar.js +6 -10
  158. package/modern/DateCalendar/DayCalendar.d.ts +3 -7
  159. package/modern/DateCalendar/DayCalendar.js +18 -10
  160. package/modern/DateCalendar/index.d.ts +0 -1
  161. package/modern/DateField/useDateField.d.ts +1 -1
  162. package/modern/DateField/useDateField.js +3 -17
  163. package/modern/DatePicker/DatePicker.js +1 -0
  164. package/modern/DatePicker/shared.js +3 -9
  165. package/modern/DateTimeField/useDateTimeField.d.ts +1 -1
  166. package/modern/DateTimeField/useDateTimeField.js +3 -17
  167. package/modern/DateTimePicker/DateTimePicker.js +1 -0
  168. package/modern/DateTimePicker/shared.js +4 -14
  169. package/modern/DesktopDatePicker/DesktopDatePicker.js +1 -0
  170. package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -0
  171. package/modern/DesktopTimePicker/DesktopTimePicker.js +1 -0
  172. package/modern/MobileDatePicker/MobileDatePicker.js +1 -0
  173. package/modern/MobileDateTimePicker/MobileDateTimePicker.js +1 -0
  174. package/modern/MobileTimePicker/MobileTimePicker.js +1 -0
  175. package/modern/MonthCalendar/MonthCalendar.js +6 -11
  176. package/modern/PickersDay/PickersDay.d.ts +1 -72
  177. package/modern/PickersDay/PickersDay.js +30 -28
  178. package/modern/PickersDay/PickersDay.types.d.ts +114 -0
  179. package/modern/PickersDay/PickersDay.types.js +1 -0
  180. package/modern/PickersDay/index.d.ts +1 -1
  181. package/modern/PickersDay/usePickerDayOwnerState.d.ts +14 -0
  182. package/modern/PickersDay/usePickerDayOwnerState.js +32 -0
  183. package/modern/PickersSectionList/PickersSectionList.d.ts +1 -1
  184. package/modern/PickersSectionList/PickersSectionList.types.d.ts +2 -6
  185. package/modern/TimeField/useTimeField.d.ts +1 -1
  186. package/modern/TimeField/useTimeField.js +3 -17
  187. package/modern/TimePicker/TimePicker.js +1 -0
  188. package/modern/TimePicker/shared.js +3 -3
  189. package/modern/YearCalendar/YearCalendar.js +5 -11
  190. package/modern/hooks/useSplitFieldProps.d.ts +1 -1
  191. package/modern/index.js +1 -1
  192. package/modern/internals/components/PickerFieldUI.d.ts +5 -5
  193. package/modern/internals/hooks/useField/buildSectionsFromFormat.d.ts +2 -2
  194. package/modern/internals/hooks/useField/buildSectionsFromFormat.js +9 -9
  195. package/modern/internals/hooks/useField/index.d.ts +1 -1
  196. package/modern/internals/hooks/useField/syncSelectionToDOM.d.ts +9 -0
  197. package/modern/internals/hooks/useField/syncSelectionToDOM.js +50 -0
  198. package/modern/internals/hooks/useField/useField.d.ts +2 -4
  199. package/modern/internals/hooks/useField/useField.js +5 -229
  200. package/modern/internals/hooks/useField/useField.types.d.ts +55 -68
  201. package/modern/internals/hooks/useField/useField.utils.d.ts +3 -8
  202. package/modern/internals/hooks/useField/useField.utils.js +7 -149
  203. package/modern/internals/hooks/useField/useFieldCharacterEditing.d.ts +19 -26
  204. package/modern/internals/hooks/useField/useFieldCharacterEditing.js +42 -60
  205. package/modern/internals/hooks/useField/useFieldHiddenInputProps.d.ts +20 -0
  206. package/modern/internals/hooks/useField/useFieldHiddenInputProps.js +31 -0
  207. package/modern/internals/hooks/useField/useFieldInternalPropsWithDefaults.js +8 -10
  208. package/modern/internals/hooks/useField/useFieldRootHandleKeyDown.d.ts +16 -0
  209. package/modern/internals/hooks/useField/useFieldRootHandleKeyDown.js +205 -0
  210. package/modern/internals/hooks/useField/useFieldRootProps.d.ts +32 -0
  211. package/modern/internals/hooks/useField/useFieldRootProps.js +150 -0
  212. package/modern/internals/hooks/useField/useFieldSectionContainerProps.d.ts +15 -0
  213. package/modern/internals/hooks/useField/useFieldSectionContainerProps.js +29 -0
  214. package/modern/internals/hooks/useField/useFieldSectionContentProps.d.ts +23 -0
  215. package/modern/internals/hooks/useField/useFieldSectionContentProps.js +226 -0
  216. package/modern/internals/hooks/useField/useFieldState.d.ts +23 -13
  217. package/modern/internals/hooks/useField/useFieldState.js +103 -30
  218. package/modern/internals/hooks/useField/useFieldV6TextField.d.ts +3 -3
  219. package/modern/internals/hooks/useField/useFieldV6TextField.js +202 -135
  220. package/modern/internals/hooks/useField/useFieldV7TextField.d.ts +3 -2
  221. package/modern/internals/hooks/useField/useFieldV7TextField.js +200 -367
  222. package/modern/internals/hooks/usePicker/usePicker.types.d.ts +1 -0
  223. package/modern/internals/index.d.ts +6 -5
  224. package/modern/internals/index.js +4 -3
  225. package/modern/locales/deDE.js +2 -3
  226. package/modern/managers/useDateManager.d.ts +4 -13
  227. package/modern/managers/useDateManager.js +21 -31
  228. package/modern/managers/useDateTimeManager.d.ts +4 -13
  229. package/modern/managers/useDateTimeManager.js +26 -36
  230. package/modern/managers/useTimeManager.d.ts +4 -13
  231. package/modern/managers/useTimeManager.js +17 -27
  232. package/modern/models/fields.d.ts +2 -2
  233. package/modern/models/manager.d.ts +6 -10
  234. package/modern/validation/validateDate.js +3 -4
  235. package/package.json +2 -2
  236. package/tsconfig.build.tsbuildinfo +1 -1
  237. package/validation/validateDate.js +3 -4
@@ -10,25 +10,30 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _useControlled = _interopRequireDefault(require("@mui/utils/useControlled"));
12
12
  var _useTimeout = _interopRequireDefault(require("@mui/utils/useTimeout"));
13
+ var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
13
14
  var _RtlProvider = require("@mui/system/RtlProvider");
14
15
  var _usePickerTranslations = require("../../../hooks/usePickerTranslations");
15
16
  var _useUtils = require("../useUtils");
16
17
  var _useField = require("./useField.utils");
17
18
  var _buildSectionsFromFormat = require("./buildSectionsFromFormat");
19
+ var _validation = require("../../../validation");
18
20
  var _useControlledValue = require("../useControlledValue");
19
21
  var _getDefaultReferenceDate = require("../../utils/getDefaultReferenceDate");
20
- const useFieldState = params => {
22
+ const QUERY_LIFE_DURATION_MS = 5000;
23
+ const useFieldState = parameters => {
21
24
  const utils = (0, _useUtils.useUtils)();
22
25
  const translations = (0, _usePickerTranslations.usePickerTranslations)();
23
26
  const adapter = (0, _useUtils.useLocalizationContext)();
24
27
  const isRtl = (0, _RtlProvider.useRtl)();
25
28
  const {
26
- valueManager,
27
- fieldValueManager,
28
- valueType,
29
- validator,
30
- internalProps,
31
- internalProps: {
29
+ manager: {
30
+ validator,
31
+ valueType,
32
+ internal_valueManager: valueManager,
33
+ internal_fieldValueManager: fieldValueManager
34
+ },
35
+ internalPropsWithDefaults,
36
+ internalPropsWithDefaults: {
32
37
  value: valueProp,
33
38
  defaultValue,
34
39
  referenceDate: referenceDateProp,
@@ -40,8 +45,11 @@ const useFieldState = params => {
40
45
  shouldRespectLeadingZeros = false,
41
46
  timezone: timezoneProp,
42
47
  enableAccessibleFieldDOMStructure = true
48
+ },
49
+ forwardedProps: {
50
+ error: errorProp
43
51
  }
44
- } = params;
52
+ } = parameters;
45
53
  const {
46
54
  value,
47
55
  handleValueChange,
@@ -59,6 +67,23 @@ const useFieldState = params => {
59
67
  React.useEffect(() => {
60
68
  valueRef.current = value;
61
69
  }, [value]);
70
+ const {
71
+ hasValidationError
72
+ } = (0, _validation.useValidation)({
73
+ props: internalPropsWithDefaults,
74
+ validator,
75
+ timezone,
76
+ value,
77
+ onError: internalPropsWithDefaults.onError
78
+ });
79
+ const error = React.useMemo(() => {
80
+ // only override when `error` is undefined.
81
+ // in case of multi input fields, the `error` value is provided externally and will always be defined.
82
+ if (errorProp !== undefined) {
83
+ return errorProp;
84
+ }
85
+ return hasValidationError;
86
+ }, [hasValidationError, errorProp]);
62
87
  const localizedDigits = React.useMemo(() => (0, _useField.getLocalizedDigits)(utils), [utils]);
63
88
  const sectionsValueBoundaries = React.useMemo(() => (0, _useField.getSectionsBoundaries)(utils, localizedDigits, timezone), [utils, localizedDigits, timezone]);
64
89
  const getSectionsFromValue = React.useCallback(valueToAnalyze => fieldValueManager.getSectionsFromValue(valueToAnalyze, date => (0, _buildSectionsFromFormat.buildSectionsFromFormat)({
@@ -83,14 +108,15 @@ const useFieldState = params => {
83
108
  isRtl,
84
109
  locale: utils.locale
85
110
  },
86
- tempValueStrAndroid: null
111
+ tempValueStrAndroid: null,
112
+ characterQuery: null
87
113
  };
88
114
  const granularity = (0, _getDefaultReferenceDate.getSectionTypeGranularity)(sections);
89
115
  const referenceValue = valueManager.getInitialReferenceValue({
90
116
  referenceDate: referenceDateProp,
91
117
  value,
92
118
  utils,
93
- props: internalProps,
119
+ props: internalPropsWithDefaults,
94
120
  granularity,
95
121
  timezone
96
122
  });
@@ -110,13 +136,15 @@ const useFieldState = params => {
110
136
  };
111
137
  const parsedSelectedSections = React.useMemo(() => (0, _useField.parseSelectedSections)(selectedSections, state.sections), [selectedSections, state.sections]);
112
138
  const activeSectionIndex = parsedSelectedSections === 'all' ? 0 : parsedSelectedSections;
139
+ const sectionOrder = React.useMemo(() => (0, _useField.getSectionOrder)(state.sections, isRtl && !enableAccessibleFieldDOMStructure), [state.sections, isRtl, enableAccessibleFieldDOMStructure]);
140
+ const areAllSectionsEmpty = React.useMemo(() => state.sections.every(section => section.value === ''), [state.sections]);
113
141
  const publishValue = newValue => {
114
142
  const context = {
115
143
  validationError: validator({
116
144
  adapter,
117
145
  value: newValue,
118
146
  timezone,
119
- props: internalProps
147
+ props: internalPropsWithDefaults
120
148
  })
121
149
  };
122
150
  handleValueChange(newValue, context);
@@ -130,7 +158,7 @@ const useFieldState = params => {
130
158
  return newSections;
131
159
  };
132
160
  const sectionToUpdateOnNextInvalidDateRef = React.useRef(null);
133
- const timeoutToUpdateSectionValueOnNextInvalidDate = (0, _useTimeout.default)();
161
+ const updateSectionValueOnNextInvalidDateTimeout = (0, _useTimeout.default)();
134
162
  const setSectionUpdateToApplyOnNextInvalidDate = newSectionValue => {
135
163
  if (activeSectionIndex == null) {
136
164
  return;
@@ -139,7 +167,7 @@ const useFieldState = params => {
139
167
  sectionIndex: activeSectionIndex,
140
168
  value: newSectionValue
141
169
  };
142
- timeoutToUpdateSectionValueOnNextInvalidDate.start(0, () => {
170
+ updateSectionValueOnNextInvalidDateTimeout.start(0, () => {
143
171
  sectionToUpdateOnNextInvalidDateRef.current = null;
144
172
  });
145
173
  };
@@ -149,9 +177,13 @@ const useFieldState = params => {
149
177
  sections: prevState.sections.map(section => (0, _extends2.default)({}, section, {
150
178
  value: ''
151
179
  })),
152
- tempValueStrAndroid: null
180
+ tempValueStrAndroid: null,
181
+ characterQuery: null
153
182
  }));
154
183
  } else {
184
+ setState(prevState => (0, _extends2.default)({}, prevState, {
185
+ characterQuery: null
186
+ }));
155
187
  publishValue(valueManager.emptyValue);
156
188
  }
157
189
  };
@@ -167,9 +199,13 @@ const useFieldState = params => {
167
199
  if (fieldValueManager.getDateFromSection(value, activeSection) === null) {
168
200
  setState(prevState => (0, _extends2.default)({}, prevState, {
169
201
  sections: setSectionValue(activeSectionIndex, ''),
170
- tempValueStrAndroid: null
202
+ tempValueStrAndroid: null,
203
+ characterQuery: null
171
204
  }));
172
205
  } else {
206
+ setState(prevState => (0, _extends2.default)({}, prevState, {
207
+ characterQuery: null
208
+ }));
173
209
  publishValue(fieldValueManager.updateDateInValue(value, activeSection, null));
174
210
  }
175
211
  };
@@ -195,14 +231,14 @@ const useFieldState = params => {
195
231
  const newValue = fieldValueManager.parseValueStr(valueStr, state.referenceValue, parseDateStr);
196
232
  publishValue(newValue);
197
233
  };
198
- const timeoutToCleanActiveDateSectionsIfValueNull = (0, _useTimeout.default)();
234
+ const cleanActiveDateSectionsIfValueNullTimeout = (0, _useTimeout.default)();
199
235
  const updateSectionValue = ({
200
236
  section,
201
237
  newSectionValue,
202
238
  shouldGoToNextSection
203
239
  }) => {
204
- timeoutToUpdateSectionValueOnNextInvalidDate.clear();
205
- timeoutToCleanActiveDateSectionsIfValueNull.clear();
240
+ updateSectionValueOnNextInvalidDateTimeout.clear();
241
+ cleanActiveDateSectionsIfValueNullTimeout.clear();
206
242
  const activeDate = fieldValueManager.getDateFromSection(value, section);
207
243
 
208
244
  /**
@@ -227,7 +263,7 @@ const useFieldState = params => {
227
263
  if (utils.isValid(newActiveDate)) {
228
264
  const mergedDate = (0, _useField.mergeDateIntoReferenceDate)(utils, newActiveDate, newActiveDateSections, fieldValueManager.getDateFromSection(state.referenceValue, section), true);
229
265
  if (activeDate == null) {
230
- timeoutToCleanActiveDateSectionsIfValueNull.start(0, () => {
266
+ cleanActiveDateSectionsIfValueNullTimeout.start(0, () => {
231
267
  if (valueRef.current === value) {
232
268
  setState(prevState => (0, _extends2.default)({}, prevState, {
233
269
  sections: fieldValueManager.clearDateSections(state.sections, section),
@@ -266,9 +302,14 @@ const useFieldState = params => {
266
302
  tempValueStrAndroid: null
267
303
  }));
268
304
  };
269
- const setTempAndroidValueStr = tempValueStrAndroid => setState(prev => (0, _extends2.default)({}, prev, {
305
+ const setTempAndroidValueStr = tempValueStrAndroid => setState(prevState => (0, _extends2.default)({}, prevState, {
270
306
  tempValueStrAndroid
271
307
  }));
308
+ const setCharacterQuery = (0, _useEventCallback.default)(newCharacterQuery => {
309
+ setState(prevState => (0, _extends2.default)({}, prevState, {
310
+ characterQuery: newCharacterQuery
311
+ }));
312
+ });
272
313
 
273
314
  // If `prop.value` changes, we update the state to reflect the new value
274
315
  if (value !== state.lastExternalValue) {
@@ -300,29 +341,61 @@ const useFieldState = params => {
300
341
  locale: utils.locale
301
342
  },
302
343
  sections,
303
- tempValueStrAndroid: null
344
+ tempValueStrAndroid: null,
345
+ characterQuery: null
304
346
  }));
305
347
  }
348
+ if (state.characterQuery != null && !error && activeSectionIndex == null) {
349
+ setCharacterQuery(null);
350
+ }
351
+ if (state.characterQuery != null && state.sections[state.characterQuery.sectionIndex]?.type !== state.characterQuery.sectionType) {
352
+ setCharacterQuery(null);
353
+ }
306
354
  React.useEffect(() => {
307
355
  if (sectionToUpdateOnNextInvalidDateRef.current != null) {
308
356
  sectionToUpdateOnNextInvalidDateRef.current = null;
309
357
  }
310
358
  });
359
+ const cleanCharacterQueryTimeout = (0, _useTimeout.default)();
360
+ React.useEffect(() => {
361
+ if (state.characterQuery != null) {
362
+ cleanCharacterQueryTimeout.start(QUERY_LIFE_DURATION_MS, () => setCharacterQuery(null));
363
+ }
364
+ return () => {};
365
+ }, [state.characterQuery, setCharacterQuery, cleanCharacterQueryTimeout]);
366
+
367
+ // If `tempValueStrAndroid` is still defined for some section when running `useEffect`,
368
+ // Then `onChange` has only been called once, which means the user pressed `Backspace` to reset the section.
369
+ // This causes a small flickering on Android,
370
+ // But we can't use `useEnhancedEffect` which is always called before the second `onChange` call and then would cause false positives.
371
+ React.useEffect(() => {
372
+ if (state.tempValueStrAndroid != null && activeSectionIndex != null) {
373
+ clearActiveSection();
374
+ }
375
+ }, [state.sections]); // eslint-disable-line react-hooks/exhaustive-deps
376
+
311
377
  return {
312
- state,
313
- value,
378
+ // States and derived states
314
379
  activeSectionIndex,
380
+ areAllSectionsEmpty,
381
+ error,
382
+ localizedDigits,
315
383
  parsedSelectedSections,
316
- setSelectedSections,
384
+ sectionOrder,
385
+ sectionsValueBoundaries,
386
+ state,
387
+ timezone,
388
+ value,
389
+ // Methods to update the states
317
390
  clearValue,
318
391
  clearActiveSection,
392
+ setCharacterQuery,
393
+ setSelectedSections,
394
+ setTempAndroidValueStr,
319
395
  updateSectionValue,
320
396
  updateValueFromValueStr,
321
- setTempAndroidValueStr,
322
- getSectionsFromValue,
323
- sectionsValueBoundaries,
324
- localizedDigits,
325
- timezone
397
+ // Utilities methods
398
+ getSectionsFromValue
326
399
  };
327
400
  };
328
401
  exports.useFieldState = useFieldState;
@@ -1,6 +1,8 @@
1
- import { UseFieldTextField } from "./useField.types.js";
1
+ import { UseFieldParameters, UseFieldProps, UseFieldReturnValue } from "./useField.types.js";
2
2
  import { InferFieldSection } from "../../../models/index.js";
3
3
  import { PickerValidValue } from "../../models/index.js";
4
+ export declare const addPositionPropertiesToSections: <TValue extends PickerValidValue>(sections: InferFieldSection<TValue>[], localizedDigits: string[], isRtl: boolean) => FieldSectionWithPositions<TValue>[];
5
+ export declare const useFieldV6TextField: <TValue extends PickerValidValue, TError, TValidationProps extends {}, TProps extends UseFieldProps<false>>(parameters: UseFieldParameters<TValue, false, TError, TValidationProps, TProps>) => UseFieldReturnValue<false, TProps>;
4
6
  type FieldSectionWithPositions<TValue extends PickerValidValue> = InferFieldSection<TValue> & {
5
7
  /**
6
8
  * Start index of the section in the format
@@ -21,6 +23,4 @@ type FieldSectionWithPositions<TValue extends PickerValidValue> = InferFieldSect
21
23
  */
22
24
  endInInput: number;
23
25
  };
24
- export declare const addPositionPropertiesToSections: <TValue extends PickerValidValue>(sections: InferFieldSection<TValue>[], localizedDigits: string[], isRtl: boolean) => FieldSectionWithPositions<TValue>[];
25
- export declare const useFieldV6TextField: UseFieldTextField<false>;
26
26
  export {};