@mui/x-date-pickers 9.0.0-alpha.4 → 9.0.0-rc.0

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 (290) hide show
  1. package/AdapterDateFnsBase/AdapterDateFnsBase.mjs +1 -1
  2. package/AdapterDayjs/AdapterDayjs.mjs +1 -1
  3. package/AdapterLuxon/AdapterLuxon.mjs +1 -1
  4. package/AdapterMoment/AdapterMoment.mjs +1 -1
  5. package/AdapterMomentHijri/AdapterMomentHijri.mjs +1 -1
  6. package/AdapterMomentJalaali/AdapterMomentJalaali.mjs +1 -1
  7. package/CHANGELOG.md +262 -2
  8. package/DateCalendar/DateCalendar.js +1 -1
  9. package/DateCalendar/DateCalendar.mjs +1 -1
  10. package/DateCalendar/DayCalendar.d.mts +7 -7
  11. package/DateCalendar/DayCalendar.d.ts +7 -7
  12. package/DateCalendar/DayCalendar.js +23 -25
  13. package/DateCalendar/DayCalendar.mjs +23 -25
  14. package/DateField/DateField.d.mts +1 -1
  15. package/DateField/DateField.d.ts +1 -1
  16. package/DateField/DateField.js +22 -4
  17. package/DateField/DateField.mjs +22 -4
  18. package/DateField/DateField.types.d.mts +3 -3
  19. package/DateField/DateField.types.d.ts +3 -3
  20. package/DateField/useDateField.d.mts +1 -1
  21. package/DateField/useDateField.d.ts +1 -1
  22. package/DateField/useDateField.js +1 -1
  23. package/DateField/useDateField.mjs +1 -1
  24. package/DatePicker/DatePicker.d.mts +1 -1
  25. package/DatePicker/DatePicker.d.ts +1 -1
  26. package/DatePicker/DatePicker.js +1 -5
  27. package/DatePicker/DatePicker.mjs +1 -5
  28. package/DatePicker/DatePicker.types.d.mts +3 -3
  29. package/DatePicker/DatePicker.types.d.ts +3 -3
  30. package/DateTimeField/DateTimeField.d.mts +1 -1
  31. package/DateTimeField/DateTimeField.d.ts +1 -1
  32. package/DateTimeField/DateTimeField.js +22 -4
  33. package/DateTimeField/DateTimeField.mjs +22 -4
  34. package/DateTimeField/DateTimeField.types.d.mts +2 -2
  35. package/DateTimeField/DateTimeField.types.d.ts +2 -2
  36. package/DateTimeField/useDateTimeField.d.mts +1 -1
  37. package/DateTimeField/useDateTimeField.d.ts +1 -1
  38. package/DateTimeField/useDateTimeField.js +1 -1
  39. package/DateTimeField/useDateTimeField.mjs +1 -1
  40. package/DateTimePicker/DateTimePicker.d.mts +1 -1
  41. package/DateTimePicker/DateTimePicker.d.ts +1 -1
  42. package/DateTimePicker/DateTimePicker.js +1 -5
  43. package/DateTimePicker/DateTimePicker.mjs +1 -5
  44. package/DateTimePicker/DateTimePicker.types.d.mts +3 -3
  45. package/DateTimePicker/DateTimePicker.types.d.ts +3 -3
  46. package/DesktopDatePicker/DesktopDatePicker.d.mts +1 -1
  47. package/DesktopDatePicker/DesktopDatePicker.d.ts +1 -1
  48. package/DesktopDatePicker/DesktopDatePicker.js +1 -5
  49. package/DesktopDatePicker/DesktopDatePicker.mjs +1 -5
  50. package/DesktopDatePicker/DesktopDatePicker.types.d.mts +3 -3
  51. package/DesktopDatePicker/DesktopDatePicker.types.d.ts +3 -3
  52. package/DesktopDateTimePicker/DesktopDateTimePicker.d.mts +1 -1
  53. package/DesktopDateTimePicker/DesktopDateTimePicker.d.ts +1 -1
  54. package/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -5
  55. package/DesktopDateTimePicker/DesktopDateTimePicker.mjs +1 -5
  56. package/DesktopDateTimePicker/DesktopDateTimePicker.types.d.mts +3 -3
  57. package/DesktopDateTimePicker/DesktopDateTimePicker.types.d.ts +3 -3
  58. package/DesktopTimePicker/DesktopTimePicker.d.mts +1 -1
  59. package/DesktopTimePicker/DesktopTimePicker.d.ts +1 -1
  60. package/DesktopTimePicker/DesktopTimePicker.js +0 -4
  61. package/DesktopTimePicker/DesktopTimePicker.mjs +0 -4
  62. package/DesktopTimePicker/DesktopTimePicker.types.d.mts +3 -3
  63. package/DesktopTimePicker/DesktopTimePicker.types.d.ts +3 -3
  64. package/DigitalClock/DigitalClock.d.mts +1 -1
  65. package/DigitalClock/DigitalClock.d.ts +1 -1
  66. package/DigitalClock/DigitalClock.js +2 -2
  67. package/DigitalClock/DigitalClock.mjs +3 -3
  68. package/MobileDatePicker/MobileDatePicker.d.mts +1 -1
  69. package/MobileDatePicker/MobileDatePicker.d.ts +1 -1
  70. package/MobileDatePicker/MobileDatePicker.js +1 -5
  71. package/MobileDatePicker/MobileDatePicker.mjs +1 -5
  72. package/MobileDatePicker/MobileDatePicker.types.d.mts +3 -3
  73. package/MobileDatePicker/MobileDatePicker.types.d.ts +3 -3
  74. package/MobileDateTimePicker/MobileDateTimePicker.d.mts +1 -1
  75. package/MobileDateTimePicker/MobileDateTimePicker.d.ts +1 -1
  76. package/MobileDateTimePicker/MobileDateTimePicker.js +1 -5
  77. package/MobileDateTimePicker/MobileDateTimePicker.mjs +1 -5
  78. package/MobileDateTimePicker/MobileDateTimePicker.types.d.mts +3 -3
  79. package/MobileDateTimePicker/MobileDateTimePicker.types.d.ts +3 -3
  80. package/MobileTimePicker/MobileTimePicker.d.mts +1 -1
  81. package/MobileTimePicker/MobileTimePicker.d.ts +1 -1
  82. package/MobileTimePicker/MobileTimePicker.js +0 -4
  83. package/MobileTimePicker/MobileTimePicker.mjs +0 -4
  84. package/MobileTimePicker/MobileTimePicker.types.d.mts +3 -3
  85. package/MobileTimePicker/MobileTimePicker.types.d.ts +3 -3
  86. package/MonthCalendar/MonthCalendarButton.js +2 -2
  87. package/MonthCalendar/MonthCalendarButton.mjs +3 -3
  88. package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +2 -2
  89. package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.mjs +3 -3
  90. package/PickerDay/PickerDay.d.mts +14 -0
  91. package/PickerDay/PickerDay.d.ts +14 -0
  92. package/{PickerDay2/PickerDay2.js → PickerDay/PickerDay.js} +110 -45
  93. package/{PickerDay2/PickerDay2.mjs → PickerDay/PickerDay.mjs} +110 -45
  94. package/PickerDay/PickerDay.types.d.mts +137 -0
  95. package/PickerDay/PickerDay.types.d.ts +137 -0
  96. package/PickerDay/index.d.mts +4 -0
  97. package/PickerDay/index.d.ts +4 -0
  98. package/PickerDay/index.js +25 -0
  99. package/PickerDay/index.mjs +2 -0
  100. package/{PickerDay2/pickerDay2Classes.d.mts → PickerDay/pickerDayClasses.d.mts} +4 -4
  101. package/{PickerDay2/pickerDay2Classes.d.ts → PickerDay/pickerDayClasses.d.ts} +4 -4
  102. package/PickerDay/pickerDayClasses.js +14 -0
  103. package/PickerDay/pickerDayClasses.mjs +6 -0
  104. package/PickersTextField/PickersFilledInput/PickersFilledInput.js +27 -1
  105. package/PickersTextField/PickersFilledInput/PickersFilledInput.mjs +27 -1
  106. package/PickersTextField/PickersInput/PickersInput.js +27 -1
  107. package/PickersTextField/PickersInput/PickersInput.mjs +27 -1
  108. package/PickersTextField/PickersInputBase/PickersInputBase.js +26 -0
  109. package/PickersTextField/PickersInputBase/PickersInputBase.mjs +26 -0
  110. package/PickersTextField/PickersInputBase/PickersInputBase.types.d.mts +26 -0
  111. package/PickersTextField/PickersInputBase/PickersInputBase.types.d.ts +26 -0
  112. package/PickersTextField/PickersOutlinedInput/Outline.js +1 -1
  113. package/PickersTextField/PickersOutlinedInput/Outline.mjs +1 -1
  114. package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +27 -1
  115. package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.mjs +27 -1
  116. package/PickersTextField/PickersTextField.js +42 -2
  117. package/PickersTextField/PickersTextField.mjs +42 -2
  118. package/PickersTextField/PickersTextField.types.d.mts +22 -6
  119. package/PickersTextField/PickersTextField.types.d.ts +22 -6
  120. package/StaticDatePicker/StaticDatePicker.js +1 -1
  121. package/StaticDatePicker/StaticDatePicker.mjs +1 -1
  122. package/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
  123. package/StaticDateTimePicker/StaticDateTimePicker.mjs +1 -1
  124. package/TimeField/TimeField.d.mts +1 -1
  125. package/TimeField/TimeField.d.ts +1 -1
  126. package/TimeField/TimeField.js +22 -4
  127. package/TimeField/TimeField.mjs +22 -4
  128. package/TimeField/TimeField.types.d.mts +2 -2
  129. package/TimeField/TimeField.types.d.ts +2 -2
  130. package/TimeField/useTimeField.d.mts +1 -1
  131. package/TimeField/useTimeField.d.ts +1 -1
  132. package/TimePicker/TimePicker.d.mts +1 -1
  133. package/TimePicker/TimePicker.d.ts +1 -1
  134. package/TimePicker/TimePicker.js +0 -4
  135. package/TimePicker/TimePicker.mjs +0 -4
  136. package/TimePicker/TimePicker.types.d.mts +3 -3
  137. package/TimePicker/TimePicker.types.d.ts +3 -3
  138. package/YearCalendar/YearCalendarButton.js +2 -2
  139. package/YearCalendar/YearCalendarButton.mjs +3 -3
  140. package/hooks/useParsedFormat.js +5 -7
  141. package/hooks/useParsedFormat.mjs +5 -7
  142. package/hooks/useSplitFieldProps.d.mts +1 -1
  143. package/hooks/useSplitFieldProps.d.ts +1 -1
  144. package/hooks/useSplitFieldProps.js +1 -1
  145. package/hooks/useSplitFieldProps.mjs +1 -1
  146. package/index.d.mts +1 -2
  147. package/index.d.ts +1 -2
  148. package/index.js +2 -14
  149. package/index.mjs +2 -3
  150. package/internals/components/PickerFieldUI.d.mts +22 -13
  151. package/internals/components/PickerFieldUI.d.ts +22 -13
  152. package/internals/components/PickerFieldUI.js +22 -80
  153. package/internals/components/PickerFieldUI.mjs +22 -80
  154. package/internals/components/PickerPopper/PickerPopper.js +3 -0
  155. package/internals/components/PickerPopper/PickerPopper.mjs +3 -0
  156. package/internals/components/PickersToolbar.js +3 -1
  157. package/internals/components/PickersToolbar.mjs +3 -1
  158. package/internals/demo/DemoContainer.js +6 -8
  159. package/internals/demo/DemoContainer.mjs +6 -8
  160. package/internals/hooks/PickerDay.types.d.mts +12 -0
  161. package/internals/hooks/PickerDay.types.d.ts +12 -0
  162. package/internals/hooks/useDesktopPicker/useDesktopPicker.d.mts +2 -2
  163. package/internals/hooks/useDesktopPicker/useDesktopPicker.d.ts +2 -2
  164. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.mts +6 -6
  165. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +6 -6
  166. package/internals/hooks/useField/buildSectionsFromFormat.d.mts +0 -1
  167. package/internals/hooks/useField/buildSectionsFromFormat.d.ts +0 -1
  168. package/internals/hooks/useField/buildSectionsFromFormat.js +1 -1
  169. package/internals/hooks/useField/buildSectionsFromFormat.mjs +1 -1
  170. package/internals/hooks/useField/index.d.mts +1 -1
  171. package/internals/hooks/useField/index.d.ts +1 -1
  172. package/internals/hooks/useField/index.js +2 -8
  173. package/internals/hooks/useField/index.mjs +1 -1
  174. package/internals/hooks/useField/useField.d.mts +2 -2
  175. package/internals/hooks/useField/useField.d.ts +2 -2
  176. package/internals/hooks/useField/useField.js +265 -8
  177. package/internals/hooks/useField/useField.mjs +264 -8
  178. package/internals/hooks/useField/useField.types.d.mts +11 -50
  179. package/internals/hooks/useField/useField.types.d.ts +11 -50
  180. package/internals/hooks/useField/useField.utils.d.mts +2 -3
  181. package/internals/hooks/useField/useField.utils.d.ts +2 -3
  182. package/internals/hooks/useField/useField.utils.js +8 -65
  183. package/internals/hooks/useField/useField.utils.mjs +6 -62
  184. package/internals/hooks/useField/useFieldHiddenInputProps.d.mts +2 -4
  185. package/internals/hooks/useField/useFieldHiddenInputProps.d.ts +2 -4
  186. package/internals/hooks/useField/useFieldHiddenInputProps.js +1 -3
  187. package/internals/hooks/useField/useFieldHiddenInputProps.mjs +1 -3
  188. package/internals/hooks/useField/useFieldInternalPropsWithDefaults.js +0 -1
  189. package/internals/hooks/useField/useFieldInternalPropsWithDefaults.mjs +0 -1
  190. package/internals/hooks/useField/useFieldRootProps.d.mts +5 -5
  191. package/internals/hooks/useField/useFieldRootProps.d.ts +5 -5
  192. package/internals/hooks/useField/useFieldRootProps.js +183 -11
  193. package/internals/hooks/useField/useFieldRootProps.mjs +183 -11
  194. package/internals/hooks/useField/useFieldSectionContainerProps.d.mts +3 -5
  195. package/internals/hooks/useField/useFieldSectionContainerProps.d.ts +3 -5
  196. package/internals/hooks/useField/useFieldSectionContainerProps.js +2 -4
  197. package/internals/hooks/useField/useFieldSectionContainerProps.mjs +2 -4
  198. package/internals/hooks/useField/useFieldSectionContentProps.d.mts +6 -7
  199. package/internals/hooks/useField/useFieldSectionContentProps.d.ts +6 -7
  200. package/internals/hooks/useField/useFieldSectionContentProps.js +2 -4
  201. package/internals/hooks/useField/useFieldSectionContentProps.mjs +2 -4
  202. package/internals/hooks/useField/useFieldState.d.mts +4 -4
  203. package/internals/hooks/useField/useFieldState.d.ts +4 -4
  204. package/internals/hooks/useField/useFieldState.js +3 -6
  205. package/internals/hooks/useField/useFieldState.mjs +3 -6
  206. package/internals/hooks/useMobilePicker/useMobilePicker.d.mts +2 -2
  207. package/internals/hooks/useMobilePicker/useMobilePicker.d.ts +2 -2
  208. package/internals/hooks/useMobilePicker/useMobilePicker.types.d.mts +6 -6
  209. package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +6 -6
  210. package/internals/hooks/useNullableFieldPrivateContext.d.mts +1 -1
  211. package/internals/hooks/useNullableFieldPrivateContext.d.ts +1 -1
  212. package/internals/hooks/usePicker/usePicker.js +1 -3
  213. package/internals/hooks/usePicker/usePicker.mjs +1 -3
  214. package/{PickersDay → internals/hooks}/usePickerDayOwnerState.d.mts +2 -3
  215. package/{PickersDay → internals/hooks}/usePickerDayOwnerState.d.ts +2 -3
  216. package/{PickersDay → internals/hooks}/usePickerDayOwnerState.js +3 -5
  217. package/{PickersDay → internals/hooks}/usePickerDayOwnerState.mjs +3 -5
  218. package/internals/index.d.mts +4 -4
  219. package/internals/index.d.ts +4 -4
  220. package/internals/index.js +9 -9
  221. package/internals/index.mjs +3 -3
  222. package/internals/models/manager.d.mts +3 -5
  223. package/internals/models/manager.d.ts +3 -5
  224. package/internals/utils/valueManagers.js +1 -2
  225. package/internals/utils/valueManagers.mjs +2 -3
  226. package/managers/index.d.mts +2 -2
  227. package/managers/index.d.ts +2 -2
  228. package/managers/useDateManager.d.mts +3 -6
  229. package/managers/useDateManager.d.ts +3 -6
  230. package/managers/useDateManager.js +2 -6
  231. package/managers/useDateManager.mjs +2 -6
  232. package/managers/useDateTimeManager.d.mts +3 -6
  233. package/managers/useDateTimeManager.d.ts +3 -6
  234. package/managers/useDateTimeManager.js +2 -6
  235. package/managers/useDateTimeManager.mjs +2 -6
  236. package/managers/useTimeManager.d.mts +4 -6
  237. package/managers/useTimeManager.d.ts +4 -6
  238. package/managers/useTimeManager.js +1 -3
  239. package/managers/useTimeManager.mjs +1 -3
  240. package/models/fields.d.mts +3 -4
  241. package/models/fields.d.ts +3 -4
  242. package/models/manager.d.mts +2 -8
  243. package/models/manager.d.ts +2 -8
  244. package/package.json +55 -69
  245. package/themeAugmentation/components.d.mts +4 -8
  246. package/themeAugmentation/components.d.ts +4 -8
  247. package/themeAugmentation/overrides.d.mts +2 -4
  248. package/themeAugmentation/overrides.d.ts +2 -4
  249. package/themeAugmentation/props.d.mts +5 -7
  250. package/themeAugmentation/props.d.ts +5 -7
  251. package/PickerDay2/PickerDay2.d.mts +0 -7
  252. package/PickerDay2/PickerDay2.d.ts +0 -7
  253. package/PickerDay2/PickerDay2.types.d.mts +0 -18
  254. package/PickerDay2/PickerDay2.types.d.ts +0 -18
  255. package/PickerDay2/index.d.mts +0 -4
  256. package/PickerDay2/index.d.ts +0 -4
  257. package/PickerDay2/index.js +0 -25
  258. package/PickerDay2/index.mjs +0 -2
  259. package/PickerDay2/pickerDay2Classes.js +0 -14
  260. package/PickerDay2/pickerDay2Classes.mjs +0 -6
  261. package/PickersDay/PickersDay.d.mts +0 -15
  262. package/PickersDay/PickersDay.d.ts +0 -15
  263. package/PickersDay/PickersDay.js +0 -384
  264. package/PickersDay/PickersDay.mjs +0 -377
  265. package/PickersDay/PickersDay.types.d.mts +0 -114
  266. package/PickersDay/PickersDay.types.d.ts +0 -114
  267. package/PickersDay/index.d.mts +0 -4
  268. package/PickersDay/index.d.ts +0 -4
  269. package/PickersDay/index.js +0 -25
  270. package/PickersDay/index.mjs +0 -2
  271. package/PickersDay/pickersDayClasses.d.mts +0 -19
  272. package/PickersDay/pickersDayClasses.d.ts +0 -19
  273. package/PickersDay/pickersDayClasses.js +0 -14
  274. package/PickersDay/pickersDayClasses.mjs +0 -6
  275. package/internals/hooks/useField/useFieldRootHandleKeyDown.d.mts +0 -16
  276. package/internals/hooks/useField/useFieldRootHandleKeyDown.d.ts +0 -16
  277. package/internals/hooks/useField/useFieldRootHandleKeyDown.js +0 -211
  278. package/internals/hooks/useField/useFieldRootHandleKeyDown.mjs +0 -205
  279. package/internals/hooks/useField/useFieldV6TextField.d.mts +0 -26
  280. package/internals/hooks/useField/useFieldV6TextField.d.ts +0 -26
  281. package/internals/hooks/useField/useFieldV6TextField.js +0 -422
  282. package/internals/hooks/useField/useFieldV6TextField.mjs +0 -413
  283. package/internals/hooks/useField/useFieldV7TextField.d.mts +0 -3
  284. package/internals/hooks/useField/useFieldV7TextField.d.ts +0 -3
  285. package/internals/hooks/useField/useFieldV7TextField.js +0 -272
  286. package/internals/hooks/useField/useFieldV7TextField.mjs +0 -264
  287. /package/{PickerDay2/PickerDay2.types.js → PickerDay/PickerDay.types.js} +0 -0
  288. /package/{PickerDay2/PickerDay2.types.mjs → PickerDay/PickerDay.types.mjs} +0 -0
  289. /package/{PickersDay/PickersDay.types.js → internals/hooks/PickerDay.types.js} +0 -0
  290. /package/{PickersDay/PickersDay.types.mjs → internals/hooks/PickerDay.types.mjs} +0 -0
@@ -222,26 +222,9 @@ export const getDateFromDateSections = (adapter, sections, localizedDigits) => {
222
222
  const dateWithoutSeparatorStr = sectionValues.join(' ');
223
223
  return adapter.parse(dateWithoutSeparatorStr, formatWithoutSeparator);
224
224
  };
225
- export const createDateStrForV7HiddenInputFromSections = sections => sections.map(section => {
225
+ export const createDateStrForHiddenInputFromSections = sections => sections.map(section => {
226
226
  return `${section.startSeparator}${section.value || section.placeholder}${section.endSeparator}`;
227
227
  }).join('');
228
- export const createDateStrForV6InputFromSections = (sections, localizedDigits, isRtl) => {
229
- const formattedSections = sections.map(section => {
230
- const dateValue = getSectionVisibleValue(section, isRtl ? 'input-rtl' : 'input-ltr', localizedDigits);
231
- return `${section.startSeparator}${dateValue}${section.endSeparator}`;
232
- });
233
- const dateStr = formattedSections.join('');
234
- if (!isRtl) {
235
- return dateStr;
236
- }
237
-
238
- // \u2066: start left-to-right isolation
239
- // \u2067: start right-to-left isolation
240
- // \u2068: start first strong character isolation
241
- // \u2069: pop isolation
242
- // wrap into an isolated group such that separators can split the string in smaller ones by adding \u2069\u2068
243
- return `\u2066${dateStr}\u2069`;
244
- };
245
228
  export const getSectionsBoundaries = (adapter, localizedDigits, timezone) => {
246
229
  const today = adapter.date(undefined, timezone);
247
230
  const endOfYear = adapter.endOfYear(today);
@@ -428,50 +411,11 @@ export const mergeDateIntoReferenceDate = (adapter, dateToTransferFrom, sections
428
411
  return mergedDate;
429
412
  }, referenceDate);
430
413
  export const isAndroid = () => navigator.userAgent.toLowerCase().includes('android');
431
-
432
- // TODO v9: Remove
433
- export const getSectionOrder = (sections, shouldApplyRTL) => {
414
+ export const getSectionOrder = sections => {
434
415
  const neighbors = {};
435
- if (!shouldApplyRTL) {
436
- sections.forEach((_, index) => {
437
- const leftIndex = index === 0 ? null : index - 1;
438
- const rightIndex = index === sections.length - 1 ? null : index + 1;
439
- neighbors[index] = {
440
- leftIndex,
441
- rightIndex
442
- };
443
- });
444
- return {
445
- neighbors,
446
- startIndex: 0,
447
- endIndex: sections.length - 1
448
- };
449
- }
450
- const rtl2ltr = {};
451
- const ltr2rtl = {};
452
- let groupedSectionsStart = 0;
453
- let groupedSectionsEnd = 0;
454
- let RTLIndex = sections.length - 1;
455
- while (RTLIndex >= 0) {
456
- groupedSectionsEnd = sections.findIndex(
457
- // eslint-disable-next-line @typescript-eslint/no-loop-func
458
- (section, index) => index >= groupedSectionsStart && section.endSeparator?.includes(' ') &&
459
- // Special case where the spaces were not there in the initial input
460
- section.endSeparator !== ' / ');
461
- if (groupedSectionsEnd === -1) {
462
- groupedSectionsEnd = sections.length - 1;
463
- }
464
- for (let i = groupedSectionsEnd; i >= groupedSectionsStart; i -= 1) {
465
- ltr2rtl[i] = RTLIndex;
466
- rtl2ltr[RTLIndex] = i;
467
- RTLIndex -= 1;
468
- }
469
- groupedSectionsStart = groupedSectionsEnd + 1;
470
- }
471
416
  sections.forEach((_, index) => {
472
- const rtlIndex = ltr2rtl[index];
473
- const leftIndex = rtlIndex === 0 ? null : rtl2ltr[rtlIndex - 1];
474
- const rightIndex = rtlIndex === sections.length - 1 ? null : rtl2ltr[rtlIndex + 1];
417
+ const leftIndex = index === 0 ? null : index - 1;
418
+ const rightIndex = index === sections.length - 1 ? null : index + 1;
475
419
  neighbors[index] = {
476
420
  leftIndex,
477
421
  rightIndex
@@ -479,8 +423,8 @@ export const getSectionOrder = (sections, shouldApplyRTL) => {
479
423
  });
480
424
  return {
481
425
  neighbors,
482
- startIndex: rtl2ltr[0],
483
- endIndex: rtl2ltr[sections.length - 1]
426
+ startIndex: 0,
427
+ endIndex: sections.length - 1
484
428
  };
485
429
  };
486
430
  export const parseSelectedSections = (selectedSections, sections) => {
@@ -1,16 +1,14 @@
1
1
  import * as React from 'react';
2
- import { PickerManager } from "../../../models/index.mjs";
2
+ import { PickerAnyManager } from "../../models/manager.mjs";
3
3
  import { UseFieldStateReturnValue } from "./useFieldState.mjs";
4
4
  /**
5
5
  * Generate the props to pass to the hidden input element of the field.
6
- * It is not used by the non-accessible DOM structure (with an <input /> element for editing).
7
- * It should be used in the MUI accessible DOM structure and the Base UI implementation.
8
6
  * @param {UseFieldHiddenInputPropsParameters} parameters The parameters of the hook.
9
7
  * @returns {UseFieldHiddenInputPropsReturnValue} The props to forward to the hidden input element of the field.
10
8
  */
11
9
  export declare function useFieldHiddenInputProps(parameters: UseFieldHiddenInputPropsParameters): UseFieldHiddenInputPropsReturnValue;
12
10
  interface UseFieldHiddenInputPropsParameters {
13
- manager: PickerManager<any, any, any, any, any>;
11
+ manager: PickerAnyManager;
14
12
  stateResponse: UseFieldStateReturnValue<any>;
15
13
  }
16
14
  interface UseFieldHiddenInputPropsReturnValue {
@@ -1,16 +1,14 @@
1
1
  import * as React from 'react';
2
- import { PickerManager } from "../../../models/index.js";
2
+ import { PickerAnyManager } from "../../models/manager.js";
3
3
  import { UseFieldStateReturnValue } from "./useFieldState.js";
4
4
  /**
5
5
  * Generate the props to pass to the hidden input element of the field.
6
- * It is not used by the non-accessible DOM structure (with an <input /> element for editing).
7
- * It should be used in the MUI accessible DOM structure and the Base UI implementation.
8
6
  * @param {UseFieldHiddenInputPropsParameters} parameters The parameters of the hook.
9
7
  * @returns {UseFieldHiddenInputPropsReturnValue} The props to forward to the hidden input element of the field.
10
8
  */
11
9
  export declare function useFieldHiddenInputProps(parameters: UseFieldHiddenInputPropsParameters): UseFieldHiddenInputPropsReturnValue;
12
10
  interface UseFieldHiddenInputPropsParameters {
13
- manager: PickerManager<any, any, any, any, any>;
11
+ manager: PickerAnyManager;
14
12
  stateResponse: UseFieldStateReturnValue<any>;
15
13
  }
16
14
  interface UseFieldHiddenInputPropsReturnValue {
@@ -10,8 +10,6 @@ var React = _interopRequireWildcard(require("react"));
10
10
  var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
11
11
  /**
12
12
  * Generate the props to pass to the hidden input element of the field.
13
- * It is not used by the non-accessible DOM structure (with an <input /> element for editing).
14
- * It should be used in the MUI accessible DOM structure and the Base UI implementation.
15
13
  * @param {UseFieldHiddenInputPropsParameters} parameters The parameters of the hook.
16
14
  * @returns {UseFieldHiddenInputPropsReturnValue} The props to forward to the hidden input element of the field.
17
15
  */
@@ -31,7 +29,7 @@ function useFieldHiddenInputProps(parameters) {
31
29
  const handleChange = (0, _useEventCallback.default)(event => {
32
30
  updateValueFromValueStr(event.target.value);
33
31
  });
34
- const valueStr = React.useMemo(() => areAllSectionsEmpty ? '' : fieldValueManager.getV7HiddenInputValueFromSections(state.sections), [areAllSectionsEmpty, state.sections, fieldValueManager]);
32
+ const valueStr = React.useMemo(() => areAllSectionsEmpty ? '' : fieldValueManager.getHiddenInputValueFromSections(state.sections), [areAllSectionsEmpty, state.sections, fieldValueManager]);
35
33
  return {
36
34
  value: valueStr,
37
35
  onChange: handleChange
@@ -2,8 +2,6 @@ import * as React from 'react';
2
2
  import useEventCallback from '@mui/utils/useEventCallback';
3
3
  /**
4
4
  * Generate the props to pass to the hidden input element of the field.
5
- * It is not used by the non-accessible DOM structure (with an <input /> element for editing).
6
- * It should be used in the MUI accessible DOM structure and the Base UI implementation.
7
5
  * @param {UseFieldHiddenInputPropsParameters} parameters The parameters of the hook.
8
6
  * @returns {UseFieldHiddenInputPropsReturnValue} The props to forward to the hidden input element of the field.
9
7
  */
@@ -23,7 +21,7 @@ export function useFieldHiddenInputProps(parameters) {
23
21
  const handleChange = useEventCallback(event => {
24
22
  updateValueFromValueStr(event.target.value);
25
23
  });
26
- const valueStr = React.useMemo(() => areAllSectionsEmpty ? '' : fieldValueManager.getV7HiddenInputValueFromSections(state.sections), [areAllSectionsEmpty, state.sections, fieldValueManager]);
24
+ const valueStr = React.useMemo(() => areAllSectionsEmpty ? '' : fieldValueManager.getHiddenInputValueFromSections(state.sections), [areAllSectionsEmpty, state.sections, fieldValueManager]);
27
25
  return {
28
26
  value: valueStr,
29
27
  onChange: handleChange
@@ -48,7 +48,6 @@ function useFieldInternalPropsWithDefaults(parameters) {
48
48
  focused: pickerContext.open ? true : undefined,
49
49
  format: pickerContext.fieldFormat,
50
50
  formatDensity: fieldPrivateContext.formatDensity,
51
- enableAccessibleFieldDOMStructure: fieldPrivateContext.enableAccessibleFieldDOMStructure,
52
51
  selectedSections: fieldPrivateContext.selectedSections,
53
52
  onSelectedSectionsChange: fieldPrivateContext.onSelectedSectionsChange,
54
53
  fieldRef: handleFieldRef
@@ -41,7 +41,6 @@ export function useFieldInternalPropsWithDefaults(parameters) {
41
41
  focused: pickerContext.open ? true : undefined,
42
42
  format: pickerContext.fieldFormat,
43
43
  formatDensity: fieldPrivateContext.formatDensity,
44
- enableAccessibleFieldDOMStructure: fieldPrivateContext.enableAccessibleFieldDOMStructure,
45
44
  selectedSections: fieldPrivateContext.selectedSections,
46
45
  onSelectedSectionsChange: fieldPrivateContext.onSelectedSectionsChange,
47
46
  fieldRef: handleFieldRef
@@ -1,20 +1,20 @@
1
- import { PickerManager } from "../../../models/index.mjs";
2
1
  import { UseFieldDOMGetters, UseFieldInternalProps } from "./useField.types.mjs";
3
2
  import { UseFieldStateReturnValue } from "./useFieldState.mjs";
4
3
  import { UseFieldCharacterEditingReturnValue } from "./useFieldCharacterEditing.mjs";
4
+ import { PickerAnyManager } from "../../models/index.mjs";
5
5
  /**
6
6
  * Generate the props to pass to the root element of the field.
7
- * It is not used by the non-accessible DOM structure (with an <input /> element for editing).
8
- * It should be used in the MUI accessible DOM structure and the Base UI implementation.
9
7
  * @param {UseFieldRootPropsParameters} parameters The parameters of the hook.
10
8
  * @returns {UseFieldRootPropsReturnValue} The props to forward to the root element of the field.
11
9
  */
12
10
  export declare function useFieldRootProps(parameters: UseFieldRootPropsParameters): UseFieldRootPropsReturnValue;
13
11
  interface UseFieldRootPropsParameters {
14
- manager: PickerManager<any, any, any, any, any>;
12
+ manager: PickerAnyManager;
15
13
  stateResponse: UseFieldStateReturnValue<any>;
16
14
  applyCharacterEditing: UseFieldCharacterEditingReturnValue;
17
- internalPropsWithDefaults: UseFieldInternalProps<any, any, any>;
15
+ internalPropsWithDefaults: UseFieldInternalProps<any, any> & {
16
+ minutesStep?: number;
17
+ };
18
18
  domGetters: UseFieldDOMGetters;
19
19
  focused: boolean;
20
20
  setFocused: (focused: boolean) => void;
@@ -1,20 +1,20 @@
1
- import { PickerManager } from "../../../models/index.js";
2
1
  import { UseFieldDOMGetters, UseFieldInternalProps } from "./useField.types.js";
3
2
  import { UseFieldStateReturnValue } from "./useFieldState.js";
4
3
  import { UseFieldCharacterEditingReturnValue } from "./useFieldCharacterEditing.js";
4
+ import { PickerAnyManager } from "../../models/index.js";
5
5
  /**
6
6
  * Generate the props to pass to the root element of the field.
7
- * It is not used by the non-accessible DOM structure (with an <input /> element for editing).
8
- * It should be used in the MUI accessible DOM structure and the Base UI implementation.
9
7
  * @param {UseFieldRootPropsParameters} parameters The parameters of the hook.
10
8
  * @returns {UseFieldRootPropsReturnValue} The props to forward to the root element of the field.
11
9
  */
12
10
  export declare function useFieldRootProps(parameters: UseFieldRootPropsParameters): UseFieldRootPropsReturnValue;
13
11
  interface UseFieldRootPropsParameters {
14
- manager: PickerManager<any, any, any, any, any>;
12
+ manager: PickerAnyManager;
15
13
  stateResponse: UseFieldStateReturnValue<any>;
16
14
  applyCharacterEditing: UseFieldCharacterEditingReturnValue;
17
- internalPropsWithDefaults: UseFieldInternalProps<any, any, any>;
15
+ internalPropsWithDefaults: UseFieldInternalProps<any, any> & {
16
+ minutesStep?: number;
17
+ };
18
18
  domGetters: UseFieldDOMGetters;
19
19
  focused: boolean;
20
20
  setFocused: (focused: boolean) => void;
@@ -7,19 +7,20 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.useFieldRootProps = useFieldRootProps;
8
8
  var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
9
9
  var _useTimeout = _interopRequireDefault(require("@mui/utils/useTimeout"));
10
- var _useFieldRootHandleKeyDown = require("./useFieldRootHandleKeyDown");
11
10
  var _utils = require("../../utils/utils");
12
11
  var _syncSelectionToDOM = require("./syncSelectionToDOM");
12
+ var _usePickerAdapter = require("../../../hooks/usePickerAdapter");
13
+ var _useField = require("./useField.utils");
13
14
  /**
14
15
  * Generate the props to pass to the root element of the field.
15
- * It is not used by the non-accessible DOM structure (with an <input /> element for editing).
16
- * It should be used in the MUI accessible DOM structure and the Base UI implementation.
17
16
  * @param {UseFieldRootPropsParameters} parameters The parameters of the hook.
18
17
  * @returns {UseFieldRootPropsReturnValue} The props to forward to the root element of the field.
19
18
  */
20
19
  function useFieldRootProps(parameters) {
21
20
  const {
22
- manager,
21
+ manager: {
22
+ internal_fieldValueManager: fieldValueManager
23
+ },
23
24
  focused,
24
25
  setFocused,
25
26
  domGetters,
@@ -29,25 +30,118 @@ function useFieldRootProps(parameters) {
29
30
  stateResponse: {
30
31
  // States and derived states
31
32
  parsedSelectedSections,
33
+ sectionsValueBoundaries,
32
34
  sectionOrder,
33
35
  state,
36
+ value,
37
+ activeSectionIndex,
38
+ localizedDigits,
39
+ timezone,
34
40
  // Methods to update the states
35
41
  clearValue,
42
+ clearActiveSection,
36
43
  setCharacterQuery,
37
44
  setSelectedSections,
38
- updateValueFromValueStr
45
+ updateValueFromValueStr,
46
+ updateSectionValue
39
47
  },
40
48
  internalPropsWithDefaults: {
41
49
  disabled = false,
42
- readOnly = false
50
+ readOnly = false,
51
+ minutesStep
43
52
  }
44
53
  } = parameters;
54
+ const adapter = (0, _usePickerAdapter.usePickerAdapter)();
55
+ const handleKeyDown = (0, _useEventCallback.default)(event => {
56
+ if (disabled) {
57
+ return;
58
+ }
45
59
 
46
- // TODO: Inline onContainerKeyDown once the old DOM structure is removed
47
- const handleKeyDown = (0, _useFieldRootHandleKeyDown.useFieldRootHandleKeyDown)({
48
- manager,
49
- internalPropsWithDefaults,
50
- stateResponse
60
+ // eslint-disable-next-line default-case
61
+ switch (true) {
62
+ // Select all
63
+ case (event.ctrlKey || event.metaKey) && String.fromCharCode(event.keyCode) === 'A' && !event.shiftKey && !event.altKey:
64
+ {
65
+ // prevent default to make sure that the next line "select all" while updating
66
+ // the internal state at the same time.
67
+ event.preventDefault();
68
+ setSelectedSections('all');
69
+ break;
70
+ }
71
+
72
+ // Move selection to next section
73
+ case event.key === 'ArrowRight':
74
+ {
75
+ event.preventDefault();
76
+ if (parsedSelectedSections == null) {
77
+ setSelectedSections(sectionOrder.startIndex);
78
+ } else if (parsedSelectedSections === 'all') {
79
+ setSelectedSections(sectionOrder.endIndex);
80
+ } else {
81
+ const nextSectionIndex = sectionOrder.neighbors[parsedSelectedSections].rightIndex;
82
+ if (nextSectionIndex !== null) {
83
+ setSelectedSections(nextSectionIndex);
84
+ }
85
+ }
86
+ break;
87
+ }
88
+
89
+ // Move selection to previous section
90
+ case event.key === 'ArrowLeft':
91
+ {
92
+ event.preventDefault();
93
+ if (parsedSelectedSections == null) {
94
+ setSelectedSections(sectionOrder.endIndex);
95
+ } else if (parsedSelectedSections === 'all') {
96
+ setSelectedSections(sectionOrder.startIndex);
97
+ } else {
98
+ const nextSectionIndex = sectionOrder.neighbors[parsedSelectedSections].leftIndex;
99
+ if (nextSectionIndex !== null) {
100
+ setSelectedSections(nextSectionIndex);
101
+ }
102
+ }
103
+ break;
104
+ }
105
+
106
+ // Reset the value of the selected section
107
+ case event.key === 'Delete':
108
+ {
109
+ event.preventDefault();
110
+ if (readOnly) {
111
+ break;
112
+ }
113
+ if (parsedSelectedSections == null || parsedSelectedSections === 'all') {
114
+ clearValue();
115
+ } else {
116
+ clearActiveSection();
117
+ }
118
+ break;
119
+ }
120
+
121
+ // Increment / decrement the selected section value
122
+ case ['ArrowUp', 'ArrowDown', 'Home', 'End', 'PageUp', 'PageDown'].includes(event.key):
123
+ {
124
+ event.preventDefault();
125
+ if (readOnly || activeSectionIndex == null) {
126
+ break;
127
+ }
128
+
129
+ // if all sections are selected, mark the currently editing one as selected
130
+ if (parsedSelectedSections === 'all') {
131
+ setSelectedSections(activeSectionIndex);
132
+ }
133
+ const activeSection = state.sections[activeSectionIndex];
134
+ const newSectionValue = adjustSectionValue(adapter, timezone, activeSection, event.key, sectionsValueBoundaries, localizedDigits, fieldValueManager.getDateFromSection(value, activeSection), {
135
+ minutesStep
136
+ });
137
+ updateSectionValue({
138
+ section: activeSection,
139
+ newSectionValue,
140
+ shouldGoToNextSection: false
141
+ });
142
+ break;
143
+ }
144
+ }
51
145
  });
52
146
  const containerClickTimeout = (0, _useTimeout.default)();
53
147
  const handleClick = (0, _useEventCallback.default)(event => {
@@ -154,4 +248,82 @@ function useFieldRootProps(parameters) {
154
248
  contentEditable: parsedSelectedSections === 'all',
155
249
  tabIndex: internalPropsWithDefaults.disabled || parsedSelectedSections === 0 ? -1 : 0 // TODO: Try to set to undefined when there is a section selected.
156
250
  };
251
+ }
252
+ function getDeltaFromKeyCode(keyCode) {
253
+ switch (keyCode) {
254
+ case 'ArrowUp':
255
+ return 1;
256
+ case 'ArrowDown':
257
+ return -1;
258
+ case 'PageUp':
259
+ return 5;
260
+ case 'PageDown':
261
+ return -5;
262
+ default:
263
+ return 0;
264
+ }
265
+ }
266
+ function adjustSectionValue(adapter, timezone, section, keyCode, sectionsValueBoundaries, localizedDigits, activeDate, stepsAttributes) {
267
+ const delta = getDeltaFromKeyCode(keyCode);
268
+ const isStart = keyCode === 'Home';
269
+ const isEnd = keyCode === 'End';
270
+ const shouldSetAbsolute = section.value === '' || isStart || isEnd;
271
+ const adjustDigitSection = () => {
272
+ const sectionBoundaries = sectionsValueBoundaries[section.type]({
273
+ currentDate: activeDate,
274
+ format: section.format,
275
+ contentType: section.contentType
276
+ });
277
+ const getCleanValue = value => (0, _useField.cleanDigitSectionValue)(adapter, value, sectionBoundaries, localizedDigits, section);
278
+ const step = section.type === 'minutes' && stepsAttributes?.minutesStep ? stepsAttributes.minutesStep : 1;
279
+ let newSectionValueNumber;
280
+ if (shouldSetAbsolute) {
281
+ if (section.type === 'year' && !isEnd && !isStart) {
282
+ return adapter.formatByString(adapter.date(undefined, timezone), section.format);
283
+ }
284
+ if (delta > 0 || isStart) {
285
+ newSectionValueNumber = sectionBoundaries.minimum;
286
+ } else {
287
+ newSectionValueNumber = sectionBoundaries.maximum;
288
+ }
289
+ } else {
290
+ const currentSectionValue = parseInt((0, _useField.removeLocalizedDigits)(section.value, localizedDigits), 10);
291
+ newSectionValueNumber = currentSectionValue + delta * step;
292
+ }
293
+ if (newSectionValueNumber % step !== 0) {
294
+ if (delta < 0 || isStart) {
295
+ newSectionValueNumber += step - (step + newSectionValueNumber) % step; // for JS -3 % 5 = -3 (should be 2)
296
+ }
297
+ if (delta > 0 || isEnd) {
298
+ newSectionValueNumber -= newSectionValueNumber % step;
299
+ }
300
+ }
301
+ if (newSectionValueNumber > sectionBoundaries.maximum) {
302
+ return getCleanValue(sectionBoundaries.minimum + (newSectionValueNumber - sectionBoundaries.maximum - 1) % (sectionBoundaries.maximum - sectionBoundaries.minimum + 1));
303
+ }
304
+ if (newSectionValueNumber < sectionBoundaries.minimum) {
305
+ return getCleanValue(sectionBoundaries.maximum - (sectionBoundaries.minimum - newSectionValueNumber - 1) % (sectionBoundaries.maximum - sectionBoundaries.minimum + 1));
306
+ }
307
+ return getCleanValue(newSectionValueNumber);
308
+ };
309
+ const adjustLetterSection = () => {
310
+ const options = (0, _useField.getLetterEditingOptions)(adapter, timezone, section.type, section.format);
311
+ if (options.length === 0) {
312
+ return section.value;
313
+ }
314
+ if (shouldSetAbsolute) {
315
+ if (delta > 0 || isStart) {
316
+ return options[0];
317
+ }
318
+ return options[options.length - 1];
319
+ }
320
+ const currentOptionIndex = options.indexOf(section.value);
321
+ const newOptionIndex = (currentOptionIndex + delta) % options.length;
322
+ const clampedIndex = (newOptionIndex + options.length) % options.length;
323
+ return options[clampedIndex];
324
+ };
325
+ if (section.contentType === 'digit' || section.contentType === 'digit-with-letter') {
326
+ return adjustDigitSection();
327
+ }
328
+ return adjustLetterSection();
157
329
  }