@mui/x-date-pickers 9.6.0 → 9.8.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 (490) hide show
  1. package/AdapterDateFns/AdapterDateFns.d.mts +2 -2
  2. package/AdapterDateFns/AdapterDateFns.d.ts +2 -2
  3. package/AdapterDateFnsBase/AdapterDateFnsBase.d.mts +2 -2
  4. package/AdapterDateFnsBase/AdapterDateFnsBase.d.ts +2 -2
  5. package/AdapterDateFnsJalali/AdapterDateFnsJalali.d.mts +2 -2
  6. package/AdapterDateFnsJalali/AdapterDateFnsJalali.d.ts +2 -2
  7. package/AdapterDateFnsJalaliV2/AdapterDateFnsJalaliV2.d.mts +1 -1
  8. package/AdapterDateFnsJalaliV2/AdapterDateFnsJalaliV2.d.ts +1 -1
  9. package/AdapterDateFnsV2/AdapterDateFnsV2.d.mts +1 -1
  10. package/AdapterDateFnsV2/AdapterDateFnsV2.d.ts +1 -1
  11. package/AdapterDayjs/AdapterDayjs.d.mts +29 -29
  12. package/AdapterDayjs/AdapterDayjs.d.ts +29 -29
  13. package/AdapterDayjs/AdapterDayjs.mjs +1 -0
  14. package/AdapterDayjsBuddhist/AdapterDayjsBuddhist.d.mts +4 -4
  15. package/AdapterDayjsBuddhist/AdapterDayjsBuddhist.d.ts +4 -4
  16. package/AdapterDayjsBuddhist/AdapterDayjsBuddhist.mjs +1 -0
  17. package/AdapterLuxon/AdapterLuxon.d.mts +1 -1
  18. package/AdapterLuxon/AdapterLuxon.d.ts +1 -1
  19. package/AdapterMoment/AdapterMoment.d.mts +29 -28
  20. package/AdapterMoment/AdapterMoment.d.ts +29 -28
  21. package/AdapterMomentHijri/AdapterMomentHijri.d.mts +14 -13
  22. package/AdapterMomentHijri/AdapterMomentHijri.d.ts +14 -13
  23. package/AdapterMomentHijri/AdapterMomentHijri.js +2 -2
  24. package/AdapterMomentHijri/AdapterMomentHijri.mjs +3 -2
  25. package/AdapterMomentJalaali/AdapterMomentJalaali.d.mts +13 -12
  26. package/AdapterMomentJalaali/AdapterMomentJalaali.d.ts +13 -12
  27. package/AdapterMomentJalaali/AdapterMomentJalaali.js +2 -2
  28. package/AdapterMomentJalaali/AdapterMomentJalaali.mjs +3 -2
  29. package/CHANGELOG.md +241 -2
  30. package/DateCalendar/DateCalendar.d.mts +1 -1
  31. package/DateCalendar/DateCalendar.d.ts +1 -1
  32. package/DateCalendar/DateCalendar.types.d.mts +16 -16
  33. package/DateCalendar/DateCalendar.types.d.ts +16 -16
  34. package/DateCalendar/DayCalendar.d.mts +9 -9
  35. package/DateCalendar/DayCalendar.d.ts +9 -9
  36. package/DateCalendar/DayCalendar.js +5 -4
  37. package/DateCalendar/DayCalendar.mjs +5 -4
  38. package/DateCalendar/PickersFadeTransitionGroup.d.mts +1 -1
  39. package/DateCalendar/PickersFadeTransitionGroup.d.ts +1 -1
  40. package/DateCalendar/PickersSlideTransition.d.mts +3 -3
  41. package/DateCalendar/PickersSlideTransition.d.ts +3 -3
  42. package/DateCalendar/useCalendarState.d.mts +3 -3
  43. package/DateCalendar/useCalendarState.d.ts +3 -3
  44. package/DateCalendar/useIsDateDisabled.d.mts +3 -3
  45. package/DateCalendar/useIsDateDisabled.d.ts +3 -3
  46. package/DateField/DateField.d.mts +1 -1
  47. package/DateField/DateField.d.ts +1 -1
  48. package/DateField/DateField.js +1 -0
  49. package/DateField/DateField.mjs +1 -0
  50. package/DateField/DateField.types.d.mts +6 -6
  51. package/DateField/DateField.types.d.ts +6 -6
  52. package/DateField/useDateField.d.mts +1 -1
  53. package/DateField/useDateField.d.ts +1 -1
  54. package/DatePicker/DatePicker.d.mts +1 -1
  55. package/DatePicker/DatePicker.d.ts +1 -1
  56. package/DatePicker/DatePicker.types.d.mts +4 -4
  57. package/DatePicker/DatePicker.types.d.ts +4 -4
  58. package/DatePicker/DatePickerToolbar.d.mts +2 -2
  59. package/DatePicker/DatePickerToolbar.d.ts +2 -2
  60. package/DatePicker/shared.d.mts +10 -10
  61. package/DatePicker/shared.d.ts +10 -10
  62. package/DateTimeField/DateTimeField.d.mts +1 -1
  63. package/DateTimeField/DateTimeField.d.ts +1 -1
  64. package/DateTimeField/DateTimeField.js +1 -0
  65. package/DateTimeField/DateTimeField.mjs +1 -0
  66. package/DateTimeField/DateTimeField.types.d.mts +7 -7
  67. package/DateTimeField/DateTimeField.types.d.ts +7 -7
  68. package/DateTimeField/useDateTimeField.d.mts +1 -1
  69. package/DateTimeField/useDateTimeField.d.ts +1 -1
  70. package/DateTimePicker/DateTimePicker.d.mts +1 -1
  71. package/DateTimePicker/DateTimePicker.d.ts +1 -1
  72. package/DateTimePicker/DateTimePicker.types.d.mts +5 -5
  73. package/DateTimePicker/DateTimePicker.types.d.ts +5 -5
  74. package/DateTimePicker/DateTimePickerTabs.d.mts +2 -2
  75. package/DateTimePicker/DateTimePickerTabs.d.ts +2 -2
  76. package/DateTimePicker/DateTimePickerToolbar.d.mts +5 -5
  77. package/DateTimePicker/DateTimePickerToolbar.d.ts +5 -5
  78. package/DateTimePicker/shared.d.mts +15 -15
  79. package/DateTimePicker/shared.d.ts +15 -15
  80. package/DayCalendarSkeleton/DayCalendarSkeleton.d.mts +3 -3
  81. package/DayCalendarSkeleton/DayCalendarSkeleton.d.ts +3 -3
  82. package/DesktopDatePicker/DesktopDatePicker.d.mts +1 -1
  83. package/DesktopDatePicker/DesktopDatePicker.d.ts +1 -1
  84. package/DesktopDatePicker/DesktopDatePicker.types.d.mts +4 -4
  85. package/DesktopDatePicker/DesktopDatePicker.types.d.ts +4 -4
  86. package/DesktopDateTimePicker/DesktopDateTimePicker.d.mts +1 -1
  87. package/DesktopDateTimePicker/DesktopDateTimePicker.d.ts +1 -1
  88. package/DesktopDateTimePicker/DesktopDateTimePicker.types.d.mts +6 -6
  89. package/DesktopDateTimePicker/DesktopDateTimePicker.types.d.ts +6 -6
  90. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.d.mts +2 -2
  91. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.d.ts +2 -2
  92. package/DesktopTimePicker/DesktopTimePicker.d.mts +1 -1
  93. package/DesktopTimePicker/DesktopTimePicker.d.ts +1 -1
  94. package/DesktopTimePicker/DesktopTimePicker.types.d.mts +8 -8
  95. package/DesktopTimePicker/DesktopTimePicker.types.d.ts +8 -8
  96. package/DigitalClock/DigitalClock.d.mts +1 -1
  97. package/DigitalClock/DigitalClock.d.ts +1 -1
  98. package/DigitalClock/DigitalClock.types.d.mts +6 -6
  99. package/DigitalClock/DigitalClock.types.d.ts +6 -6
  100. package/LocalizationProvider/LocalizationProvider.d.mts +2 -2
  101. package/LocalizationProvider/LocalizationProvider.d.ts +2 -2
  102. package/MobileDatePicker/MobileDatePicker.d.mts +1 -1
  103. package/MobileDatePicker/MobileDatePicker.d.ts +1 -1
  104. package/MobileDatePicker/MobileDatePicker.types.d.mts +3 -3
  105. package/MobileDatePicker/MobileDatePicker.types.d.ts +3 -3
  106. package/MobileDateTimePicker/MobileDateTimePicker.d.mts +1 -1
  107. package/MobileDateTimePicker/MobileDateTimePicker.d.ts +1 -1
  108. package/MobileDateTimePicker/MobileDateTimePicker.types.d.mts +3 -3
  109. package/MobileDateTimePicker/MobileDateTimePicker.types.d.ts +3 -3
  110. package/MobileTimePicker/MobileTimePicker.d.mts +2 -2
  111. package/MobileTimePicker/MobileTimePicker.d.ts +2 -2
  112. package/MobileTimePicker/MobileTimePicker.types.d.mts +5 -5
  113. package/MobileTimePicker/MobileTimePicker.types.d.ts +5 -5
  114. package/MonthCalendar/MonthCalendar.d.mts +2 -2
  115. package/MonthCalendar/MonthCalendar.d.ts +2 -2
  116. package/MonthCalendar/MonthCalendar.types.d.mts +8 -8
  117. package/MonthCalendar/MonthCalendar.types.d.ts +8 -8
  118. package/MonthCalendar/MonthCalendarButton.d.mts +2 -2
  119. package/MonthCalendar/MonthCalendarButton.d.ts +2 -2
  120. package/MultiSectionDigitalClock/MultiSectionDigitalClock.d.mts +1 -1
  121. package/MultiSectionDigitalClock/MultiSectionDigitalClock.d.ts +1 -1
  122. package/MultiSectionDigitalClock/MultiSectionDigitalClock.types.d.mts +7 -7
  123. package/MultiSectionDigitalClock/MultiSectionDigitalClock.types.d.ts +7 -7
  124. package/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.d.mts +2 -2
  125. package/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.d.ts +2 -2
  126. package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.d.mts +3 -3
  127. package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.d.ts +3 -3
  128. package/PickerDay/PickerDay.d.mts +1 -1
  129. package/PickerDay/PickerDay.d.ts +1 -1
  130. package/PickerDay/PickerDay.types.d.mts +5 -5
  131. package/PickerDay/PickerDay.types.d.ts +5 -5
  132. package/PickersActionBar/PickersActionBar.d.mts +1 -1
  133. package/PickersActionBar/PickersActionBar.d.ts +1 -1
  134. package/PickersCalendarHeader/PickersCalendarHeader.d.mts +1 -1
  135. package/PickersCalendarHeader/PickersCalendarHeader.d.ts +1 -1
  136. package/PickersCalendarHeader/PickersCalendarHeader.types.d.mts +9 -9
  137. package/PickersCalendarHeader/PickersCalendarHeader.types.d.ts +9 -9
  138. package/PickersLayout/PickersLayout.d.mts +2 -2
  139. package/PickersLayout/PickersLayout.d.ts +2 -2
  140. package/PickersLayout/PickersLayout.types.d.mts +11 -11
  141. package/PickersLayout/PickersLayout.types.d.ts +11 -11
  142. package/PickersLayout/usePickerLayout.d.mts +2 -2
  143. package/PickersLayout/usePickerLayout.d.ts +2 -2
  144. package/PickersSectionList/PickersSectionList.types.d.mts +4 -4
  145. package/PickersSectionList/PickersSectionList.types.d.ts +4 -4
  146. package/PickersShortcuts/PickersShortcuts.d.mts +3 -3
  147. package/PickersShortcuts/PickersShortcuts.d.ts +3 -3
  148. package/PickersTextField/PickersFilledInput/PickersFilledInput.d.mts +2 -2
  149. package/PickersTextField/PickersFilledInput/PickersFilledInput.d.ts +2 -2
  150. package/PickersTextField/PickersFilledInput/PickersFilledInput.js +1 -0
  151. package/PickersTextField/PickersFilledInput/PickersFilledInput.mjs +1 -0
  152. package/PickersTextField/PickersFilledInput/pickersFilledInputClasses.d.mts +1 -1
  153. package/PickersTextField/PickersFilledInput/pickersFilledInputClasses.d.ts +1 -1
  154. package/PickersTextField/PickersInput/PickersInput.d.mts +2 -2
  155. package/PickersTextField/PickersInput/PickersInput.d.ts +2 -2
  156. package/PickersTextField/PickersInput/PickersInput.js +1 -0
  157. package/PickersTextField/PickersInput/PickersInput.mjs +1 -0
  158. package/PickersTextField/PickersInput/pickersInputClasses.d.mts +1 -1
  159. package/PickersTextField/PickersInput/pickersInputClasses.d.ts +1 -1
  160. package/PickersTextField/PickersInputBase/PickersInputBase.d.mts +2 -2
  161. package/PickersTextField/PickersInputBase/PickersInputBase.d.ts +2 -2
  162. package/PickersTextField/PickersInputBase/PickersInputBase.js +16 -1
  163. package/PickersTextField/PickersInputBase/PickersInputBase.mjs +16 -1
  164. package/PickersTextField/PickersInputBase/PickersInputBase.types.d.mts +6 -5
  165. package/PickersTextField/PickersInputBase/PickersInputBase.types.d.ts +6 -5
  166. package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.d.mts +1 -1
  167. package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.d.ts +1 -1
  168. package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +12 -8
  169. package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.mjs +12 -8
  170. package/PickersTextField/PickersOutlinedInput/pickersOutlinedInputClasses.d.mts +1 -1
  171. package/PickersTextField/PickersOutlinedInput/pickersOutlinedInputClasses.d.ts +1 -1
  172. package/PickersTextField/PickersTextField.js +4 -1
  173. package/PickersTextField/PickersTextField.mjs +4 -1
  174. package/PickersTextField/PickersTextField.types.d.mts +6 -6
  175. package/PickersTextField/PickersTextField.types.d.ts +6 -6
  176. package/PickersTextField/usePickerTextFieldOwnerState.d.mts +1 -1
  177. package/PickersTextField/usePickerTextFieldOwnerState.d.ts +1 -1
  178. package/StaticDatePicker/StaticDatePicker.d.mts +1 -1
  179. package/StaticDatePicker/StaticDatePicker.d.ts +1 -1
  180. package/StaticDatePicker/StaticDatePicker.types.d.mts +3 -3
  181. package/StaticDatePicker/StaticDatePicker.types.d.ts +3 -3
  182. package/StaticDateTimePicker/StaticDateTimePicker.d.mts +1 -1
  183. package/StaticDateTimePicker/StaticDateTimePicker.d.ts +1 -1
  184. package/StaticDateTimePicker/StaticDateTimePicker.types.d.mts +3 -3
  185. package/StaticDateTimePicker/StaticDateTimePicker.types.d.ts +3 -3
  186. package/StaticTimePicker/StaticTimePicker.d.mts +1 -1
  187. package/StaticTimePicker/StaticTimePicker.d.ts +1 -1
  188. package/StaticTimePicker/StaticTimePicker.types.d.mts +4 -4
  189. package/StaticTimePicker/StaticTimePicker.types.d.ts +4 -4
  190. package/TimeClock/Clock.d.mts +5 -5
  191. package/TimeClock/Clock.d.ts +5 -5
  192. package/TimeClock/Clock.js +76 -30
  193. package/TimeClock/Clock.mjs +76 -30
  194. package/TimeClock/ClockNumber.d.mts +2 -2
  195. package/TimeClock/ClockNumber.d.ts +2 -2
  196. package/TimeClock/ClockNumbers.d.mts +1 -1
  197. package/TimeClock/ClockNumbers.d.ts +1 -1
  198. package/TimeClock/ClockPointer.d.mts +2 -2
  199. package/TimeClock/ClockPointer.d.ts +2 -2
  200. package/TimeClock/TimeClock.d.mts +1 -1
  201. package/TimeClock/TimeClock.d.ts +1 -1
  202. package/TimeClock/TimeClock.types.d.mts +5 -5
  203. package/TimeClock/TimeClock.types.d.ts +5 -5
  204. package/TimeField/TimeField.d.mts +1 -1
  205. package/TimeField/TimeField.d.ts +1 -1
  206. package/TimeField/TimeField.js +1 -0
  207. package/TimeField/TimeField.mjs +1 -0
  208. package/TimeField/TimeField.types.d.mts +7 -7
  209. package/TimeField/TimeField.types.d.ts +7 -7
  210. package/TimeField/useTimeField.d.mts +1 -1
  211. package/TimeField/useTimeField.d.ts +1 -1
  212. package/TimePicker/TimePicker.d.mts +1 -1
  213. package/TimePicker/TimePicker.d.ts +1 -1
  214. package/TimePicker/TimePicker.types.d.mts +4 -4
  215. package/TimePicker/TimePicker.types.d.ts +4 -4
  216. package/TimePicker/TimePickerToolbar.d.mts +2 -2
  217. package/TimePicker/TimePickerToolbar.d.ts +2 -2
  218. package/TimePicker/shared.d.mts +11 -11
  219. package/TimePicker/shared.d.ts +11 -11
  220. package/YearCalendar/YearCalendar.d.mts +1 -1
  221. package/YearCalendar/YearCalendar.d.ts +1 -1
  222. package/YearCalendar/YearCalendar.types.d.mts +8 -8
  223. package/YearCalendar/YearCalendar.types.d.ts +8 -8
  224. package/YearCalendar/YearCalendarButton.d.mts +2 -2
  225. package/YearCalendar/YearCalendarButton.d.ts +2 -2
  226. package/dateViewRenderers/dateViewRenderers.d.mts +3 -3
  227. package/dateViewRenderers/dateViewRenderers.d.ts +3 -3
  228. package/hooks/useIsValidValue.d.mts +1 -1
  229. package/hooks/useIsValidValue.d.ts +1 -1
  230. package/hooks/usePickerActionsContext.d.mts +2 -2
  231. package/hooks/usePickerActionsContext.d.ts +2 -2
  232. package/hooks/usePickerAdapter.d.mts +2 -2
  233. package/hooks/usePickerAdapter.d.ts +2 -2
  234. package/hooks/usePickerContext.d.mts +1 -1
  235. package/hooks/usePickerContext.d.ts +1 -1
  236. package/hooks/useSplitFieldProps.d.mts +1 -1
  237. package/hooks/useSplitFieldProps.d.ts +1 -1
  238. package/index.js +1 -1
  239. package/index.mjs +1 -1
  240. package/internals/components/PickerFieldUI.d.mts +7 -7
  241. package/internals/components/PickerFieldUI.d.ts +7 -7
  242. package/internals/components/PickerPopper/PickerPopper.d.mts +7 -7
  243. package/internals/components/PickerPopper/PickerPopper.d.ts +7 -7
  244. package/internals/components/PickerPopper/PickerPopper.js +1 -1
  245. package/internals/components/PickerPopper/PickerPopper.mjs +1 -1
  246. package/internals/components/PickerProvider.d.mts +6 -6
  247. package/internals/components/PickerProvider.d.ts +6 -6
  248. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.d.mts +1 -1
  249. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.d.ts +1 -1
  250. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.types.d.mts +6 -6
  251. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.types.d.ts +6 -6
  252. package/internals/components/PickersModalDialog.d.mts +3 -3
  253. package/internals/components/PickersModalDialog.d.ts +3 -3
  254. package/internals/components/PickersToolbar.d.mts +2 -2
  255. package/internals/components/PickersToolbar.d.ts +2 -2
  256. package/internals/components/PickersToolbarButton.d.mts +4 -4
  257. package/internals/components/PickersToolbarButton.d.ts +4 -4
  258. package/internals/components/PickersToolbarText.d.mts +2 -2
  259. package/internals/components/PickersToolbarText.d.ts +2 -2
  260. package/internals/demo/DemoContainer.d.mts +2 -2
  261. package/internals/demo/DemoContainer.d.ts +2 -2
  262. package/internals/hooks/PickerDay.types.d.mts +1 -1
  263. package/internals/hooks/PickerDay.types.d.ts +1 -1
  264. package/internals/hooks/date-helpers-hooks.d.mts +3 -3
  265. package/internals/hooks/date-helpers-hooks.d.ts +3 -3
  266. package/internals/hooks/useClockReferenceDate.d.mts +2 -2
  267. package/internals/hooks/useClockReferenceDate.d.ts +2 -2
  268. package/internals/hooks/useControlledValue.d.mts +2 -3
  269. package/internals/hooks/useControlledValue.d.ts +2 -3
  270. package/internals/hooks/useDesktopPicker/useDesktopPicker.d.mts +2 -2
  271. package/internals/hooks/useDesktopPicker/useDesktopPicker.d.ts +2 -2
  272. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.mts +10 -10
  273. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +10 -10
  274. package/internals/hooks/useField/buildSectionsFromFormat.d.mts +2 -2
  275. package/internals/hooks/useField/buildSectionsFromFormat.d.ts +2 -2
  276. package/internals/hooks/useField/syncSelectionToDOM.d.mts +3 -3
  277. package/internals/hooks/useField/syncSelectionToDOM.d.ts +3 -3
  278. package/internals/hooks/useField/useField.d.mts +2 -2
  279. package/internals/hooks/useField/useField.d.ts +2 -2
  280. package/internals/hooks/useField/useField.js +18 -0
  281. package/internals/hooks/useField/useField.mjs +18 -0
  282. package/internals/hooks/useField/useField.types.d.mts +5 -4
  283. package/internals/hooks/useField/useField.types.d.ts +5 -4
  284. package/internals/hooks/useField/useField.utils.d.mts +3 -5
  285. package/internals/hooks/useField/useField.utils.d.ts +3 -5
  286. package/internals/hooks/useField/useField.utils.js +2 -4
  287. package/internals/hooks/useField/useField.utils.mjs +1 -2
  288. package/internals/hooks/useField/useFieldCharacterEditing.d.mts +2 -2
  289. package/internals/hooks/useField/useFieldCharacterEditing.d.ts +2 -2
  290. package/internals/hooks/useField/useFieldHiddenInputProps.d.mts +2 -2
  291. package/internals/hooks/useField/useFieldHiddenInputProps.d.ts +2 -2
  292. package/internals/hooks/useField/useFieldInternalPropsWithDefaults.d.mts +1 -1
  293. package/internals/hooks/useField/useFieldInternalPropsWithDefaults.d.ts +1 -1
  294. package/internals/hooks/useField/useFieldRootProps.d.mts +5 -4
  295. package/internals/hooks/useField/useFieldRootProps.d.ts +5 -4
  296. package/internals/hooks/useField/useFieldRootProps.js +95 -8
  297. package/internals/hooks/useField/useFieldRootProps.mjs +95 -8
  298. package/internals/hooks/useField/useFieldSectionContainerProps.d.mts +2 -2
  299. package/internals/hooks/useField/useFieldSectionContainerProps.d.ts +2 -2
  300. package/internals/hooks/useField/useFieldSectionContainerProps.js +35 -4
  301. package/internals/hooks/useField/useFieldSectionContainerProps.mjs +34 -4
  302. package/internals/hooks/useField/useFieldSectionContentProps.d.mts +6 -6
  303. package/internals/hooks/useField/useFieldSectionContentProps.d.ts +6 -6
  304. package/internals/hooks/useField/useFieldSectionContentProps.js +17 -12
  305. package/internals/hooks/useField/useFieldSectionContentProps.mjs +17 -12
  306. package/internals/hooks/useField/useFieldState.d.mts +3 -3
  307. package/internals/hooks/useField/useFieldState.d.ts +3 -3
  308. package/internals/hooks/useFieldOwnerState.d.mts +2 -2
  309. package/internals/hooks/useFieldOwnerState.d.ts +2 -2
  310. package/internals/hooks/useMobilePicker/useMobilePicker.d.mts +2 -2
  311. package/internals/hooks/useMobilePicker/useMobilePicker.d.ts +2 -2
  312. package/internals/hooks/useMobilePicker/useMobilePicker.types.d.mts +10 -10
  313. package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +10 -10
  314. package/internals/hooks/useNullableFieldPrivateContext.d.mts +2 -2
  315. package/internals/hooks/useNullableFieldPrivateContext.d.ts +2 -2
  316. package/internals/hooks/usePicker/hooks/useOrientation.d.mts +1 -1
  317. package/internals/hooks/usePicker/hooks/useOrientation.d.ts +1 -1
  318. package/internals/hooks/usePicker/hooks/useValueAndOpenStates.d.mts +5 -5
  319. package/internals/hooks/usePicker/hooks/useValueAndOpenStates.d.ts +5 -5
  320. package/internals/hooks/usePicker/usePicker.d.mts +2 -2
  321. package/internals/hooks/usePicker/usePicker.d.ts +2 -2
  322. package/internals/hooks/usePicker/usePicker.types.d.mts +10 -10
  323. package/internals/hooks/usePicker/usePicker.types.d.ts +10 -10
  324. package/internals/hooks/usePickerDayOwnerState.d.mts +2 -2
  325. package/internals/hooks/usePickerDayOwnerState.d.ts +2 -2
  326. package/internals/hooks/useReduceAnimations.js +4 -1
  327. package/internals/hooks/useReduceAnimations.mjs +4 -1
  328. package/internals/hooks/useStaticPicker/useStaticPicker.d.mts +2 -2
  329. package/internals/hooks/useStaticPicker/useStaticPicker.d.ts +2 -2
  330. package/internals/hooks/useStaticPicker/useStaticPicker.types.d.mts +5 -5
  331. package/internals/hooks/useStaticPicker/useStaticPicker.types.d.ts +5 -5
  332. package/internals/hooks/useToolbarOwnerState.d.mts +1 -1
  333. package/internals/hooks/useToolbarOwnerState.d.ts +1 -1
  334. package/internals/hooks/useUtils.d.mts +1 -1
  335. package/internals/hooks/useUtils.d.ts +1 -1
  336. package/internals/hooks/useViews.d.mts +4 -4
  337. package/internals/hooks/useViews.d.ts +4 -4
  338. package/internals/models/common.d.mts +1 -1
  339. package/internals/models/common.d.ts +1 -1
  340. package/internals/models/fields.d.mts +1 -1
  341. package/internals/models/fields.d.ts +1 -1
  342. package/internals/models/helpers.d.mts +2 -2
  343. package/internals/models/helpers.d.ts +2 -2
  344. package/internals/models/manager.d.mts +1 -1
  345. package/internals/models/manager.d.ts +1 -1
  346. package/internals/models/props/basePickerProps.d.mts +7 -8
  347. package/internals/models/props/basePickerProps.d.ts +7 -8
  348. package/internals/models/props/tabs.d.mts +2 -2
  349. package/internals/models/props/tabs.d.ts +2 -2
  350. package/internals/models/props/time.d.mts +6 -6
  351. package/internals/models/props/time.d.ts +6 -6
  352. package/internals/models/props/toolbar.d.mts +3 -3
  353. package/internals/models/props/toolbar.d.ts +3 -3
  354. package/internals/models/value.d.mts +1 -1
  355. package/internals/models/value.d.ts +1 -1
  356. package/internals/utils/createNonRangePickerStepNavigation.d.mts +1 -1
  357. package/internals/utils/createNonRangePickerStepNavigation.d.ts +1 -1
  358. package/internals/utils/createStepNavigation.d.mts +1 -1
  359. package/internals/utils/createStepNavigation.d.ts +1 -1
  360. package/internals/utils/date-time-utils.d.mts +4 -4
  361. package/internals/utils/date-time-utils.d.ts +4 -4
  362. package/internals/utils/date-utils.d.mts +2 -2
  363. package/internals/utils/date-utils.d.ts +2 -2
  364. package/internals/utils/getDefaultReferenceDate.d.mts +1 -1
  365. package/internals/utils/getDefaultReferenceDate.d.ts +1 -1
  366. package/internals/utils/time-utils.d.mts +2 -2
  367. package/internals/utils/time-utils.d.ts +2 -2
  368. package/internals/utils/utils.d.mts +3 -3
  369. package/internals/utils/utils.d.ts +3 -3
  370. package/internals/utils/valueManagers.d.mts +2 -3
  371. package/internals/utils/valueManagers.d.ts +2 -3
  372. package/internals/utils/views.d.mts +1 -1
  373. package/internals/utils/views.d.ts +1 -1
  374. package/locales/beBY.d.mts +1 -1
  375. package/locales/beBY.d.ts +1 -1
  376. package/locales/bgBG.d.mts +1 -1
  377. package/locales/bgBG.d.ts +1 -1
  378. package/locales/bnBD.d.mts +1 -1
  379. package/locales/bnBD.d.ts +1 -1
  380. package/locales/caES.d.mts +1 -1
  381. package/locales/caES.d.ts +1 -1
  382. package/locales/csCZ.d.mts +1 -1
  383. package/locales/csCZ.d.ts +1 -1
  384. package/locales/daDK.d.mts +1 -1
  385. package/locales/daDK.d.ts +1 -1
  386. package/locales/deDE.d.mts +1 -1
  387. package/locales/deDE.d.ts +1 -1
  388. package/locales/elGR.d.mts +1 -1
  389. package/locales/elGR.d.ts +1 -1
  390. package/locales/enUS.d.mts +1 -1
  391. package/locales/enUS.d.ts +1 -1
  392. package/locales/esES.d.mts +1 -1
  393. package/locales/esES.d.ts +1 -1
  394. package/locales/eu.d.mts +1 -1
  395. package/locales/eu.d.ts +1 -1
  396. package/locales/faIR.d.mts +1 -1
  397. package/locales/faIR.d.ts +1 -1
  398. package/locales/fiFI.d.mts +1 -1
  399. package/locales/fiFI.d.ts +1 -1
  400. package/locales/frFR.d.mts +1 -1
  401. package/locales/frFR.d.ts +1 -1
  402. package/locales/heIL.d.mts +1 -1
  403. package/locales/heIL.d.ts +1 -1
  404. package/locales/hrHR.d.mts +1 -1
  405. package/locales/hrHR.d.ts +1 -1
  406. package/locales/huHU.d.mts +1 -1
  407. package/locales/huHU.d.ts +1 -1
  408. package/locales/isIS.d.mts +1 -1
  409. package/locales/isIS.d.ts +1 -1
  410. package/locales/itIT.d.mts +1 -1
  411. package/locales/itIT.d.ts +1 -1
  412. package/locales/jaJP.d.mts +1 -1
  413. package/locales/jaJP.d.ts +1 -1
  414. package/locales/koKR.d.mts +1 -1
  415. package/locales/koKR.d.ts +1 -1
  416. package/locales/kzKZ.d.mts +1 -1
  417. package/locales/kzKZ.d.ts +1 -1
  418. package/locales/nbNO.d.mts +1 -1
  419. package/locales/nbNO.d.ts +1 -1
  420. package/locales/nlNL.d.mts +1 -1
  421. package/locales/nlNL.d.ts +1 -1
  422. package/locales/nnNO.d.mts +1 -1
  423. package/locales/nnNO.d.ts +1 -1
  424. package/locales/plPL.d.mts +1 -1
  425. package/locales/plPL.d.ts +1 -1
  426. package/locales/ptBR.d.mts +1 -1
  427. package/locales/ptBR.d.ts +1 -1
  428. package/locales/ptPT.d.mts +1 -1
  429. package/locales/ptPT.d.ts +1 -1
  430. package/locales/roRO.d.mts +1 -1
  431. package/locales/roRO.d.ts +1 -1
  432. package/locales/roRO.js +2 -3
  433. package/locales/roRO.mjs +2 -3
  434. package/locales/ruRU.d.mts +1 -1
  435. package/locales/ruRU.d.ts +1 -1
  436. package/locales/skSK.d.mts +1 -1
  437. package/locales/skSK.d.ts +1 -1
  438. package/locales/svSE.d.mts +1 -1
  439. package/locales/svSE.d.ts +1 -1
  440. package/locales/thTH.d.mts +1 -1
  441. package/locales/thTH.d.ts +1 -1
  442. package/locales/trTR.d.mts +1 -1
  443. package/locales/trTR.d.ts +1 -1
  444. package/locales/ukUA.d.mts +1 -1
  445. package/locales/ukUA.d.ts +1 -1
  446. package/locales/urPK.d.mts +1 -1
  447. package/locales/urPK.d.ts +1 -1
  448. package/locales/utils/getPickersLocalization.d.mts +1 -1
  449. package/locales/utils/getPickersLocalization.d.ts +1 -1
  450. package/locales/utils/pickersLocaleTextApi.d.mts +2 -2
  451. package/locales/utils/pickersLocaleTextApi.d.ts +2 -2
  452. package/locales/viVN.d.mts +1 -1
  453. package/locales/viVN.d.ts +1 -1
  454. package/locales/zhCN.d.mts +1 -1
  455. package/locales/zhCN.d.ts +1 -1
  456. package/locales/zhHK.d.mts +1 -1
  457. package/locales/zhHK.d.ts +1 -1
  458. package/locales/zhTW.d.mts +1 -1
  459. package/locales/zhTW.d.ts +1 -1
  460. package/managers/useDateManager.d.mts +4 -4
  461. package/managers/useDateManager.d.ts +4 -4
  462. package/managers/useDateTimeManager.d.mts +5 -5
  463. package/managers/useDateTimeManager.d.ts +5 -5
  464. package/managers/useTimeManager.d.mts +5 -5
  465. package/managers/useTimeManager.d.ts +5 -5
  466. package/models/adapters.d.mts +3 -3
  467. package/models/adapters.d.ts +3 -3
  468. package/models/fields.d.mts +4 -4
  469. package/models/fields.d.ts +4 -4
  470. package/models/pickers.d.mts +1 -1
  471. package/models/pickers.d.ts +1 -1
  472. package/package.json +3 -3
  473. package/themeAugmentation/components.d.mts +16 -16
  474. package/themeAugmentation/components.d.ts +16 -16
  475. package/themeAugmentation/overrides.d.mts +20 -20
  476. package/themeAugmentation/overrides.d.ts +20 -20
  477. package/themeAugmentation/props.d.mts +38 -38
  478. package/themeAugmentation/props.d.ts +38 -38
  479. package/timeViewRenderers/timeViewRenderers.d.mts +6 -6
  480. package/timeViewRenderers/timeViewRenderers.d.ts +6 -6
  481. package/validation/extractValidationProps.d.mts +1 -1
  482. package/validation/extractValidationProps.d.ts +1 -1
  483. package/validation/useValidation.d.mts +2 -3
  484. package/validation/useValidation.d.ts +2 -3
  485. package/validation/validateDate.d.mts +4 -4
  486. package/validation/validateDate.d.ts +4 -4
  487. package/validation/validateDateTime.d.mts +6 -6
  488. package/validation/validateDateTime.d.ts +6 -6
  489. package/validation/validateTime.d.mts +4 -4
  490. package/validation/validateTime.d.ts +4 -4
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
- import { PickerAnyManager } from "../../models/manager.mjs";
3
- import { UseFieldStateReturnValue } from "./useFieldState.mjs";
2
+ import type { PickerAnyManager } from "../../models/manager.mjs";
3
+ import type { UseFieldStateReturnValue } from "./useFieldState.mjs";
4
4
  /**
5
5
  * Generate the props to pass to the hidden input element of the field.
6
6
  * @param {UseFieldHiddenInputPropsParameters} parameters The parameters of the hook.
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
- import { PickerAnyManager } from "../../models/manager.js";
3
- import { UseFieldStateReturnValue } from "./useFieldState.js";
2
+ import type { PickerAnyManager } from "../../models/manager.js";
3
+ import type { UseFieldStateReturnValue } from "./useFieldState.js";
4
4
  /**
5
5
  * Generate the props to pass to the hidden input element of the field.
6
6
  * @param {UseFieldHiddenInputPropsParameters} parameters The parameters of the hook.
@@ -1,4 +1,4 @@
1
- import { PickerAnyManager, PickerManagerFieldInternalProps, PickerManagerFieldInternalPropsWithDefaults } from "../../models/index.mjs";
1
+ import type { PickerAnyManager, PickerManagerFieldInternalProps, PickerManagerFieldInternalPropsWithDefaults } from "../../models/index.mjs";
2
2
  /**
3
3
  * Applies the default values to the field internal props.
4
4
  * This is a temporary hook that will be removed during a follow up when `useField` will receive the internal props without the defaults.
@@ -1,4 +1,4 @@
1
- import { PickerAnyManager, PickerManagerFieldInternalProps, PickerManagerFieldInternalPropsWithDefaults } from "../../models/index.js";
1
+ import type { PickerAnyManager, PickerManagerFieldInternalProps, PickerManagerFieldInternalPropsWithDefaults } from "../../models/index.js";
2
2
  /**
3
3
  * Applies the default values to the field internal props.
4
4
  * This is a temporary hook that will be removed during a follow up when `useField` will receive the internal props without the defaults.
@@ -1,7 +1,7 @@
1
- import { UseFieldDOMGetters, UseFieldInternalProps } from "./useField.types.mjs";
2
- import { UseFieldStateReturnValue } from "./useFieldState.mjs";
3
- import { UseFieldCharacterEditingReturnValue } from "./useFieldCharacterEditing.mjs";
4
- import { PickerAnyManager } from "../../models/index.mjs";
1
+ import type { UseFieldDOMGetters, UseFieldInternalProps } from "./useField.types.mjs";
2
+ import type { UseFieldStateReturnValue } from "./useFieldState.mjs";
3
+ import type { UseFieldCharacterEditingReturnValue } from "./useFieldCharacterEditing.mjs";
4
+ import type { PickerAnyManager } from "../../models/index.mjs";
5
5
  /**
6
6
  * Generate the props to pass to the root element of the field.
7
7
  * @param {UseFieldRootPropsParameters} parameters The parameters of the hook.
@@ -24,6 +24,7 @@ interface UseFieldRootPropsReturnValue {
24
24
  onBlur: React.FocusEventHandler<HTMLDivElement>;
25
25
  onFocus: React.FocusEventHandler<HTMLDivElement>;
26
26
  onClick: React.MouseEventHandler<HTMLDivElement>;
27
+ onMouseDown: React.MouseEventHandler<HTMLDivElement>;
27
28
  onPaste: React.ClipboardEventHandler<HTMLDivElement>;
28
29
  onInput: React.FormEventHandler<HTMLDivElement>;
29
30
  contentEditable: boolean;
@@ -1,7 +1,7 @@
1
- import { UseFieldDOMGetters, UseFieldInternalProps } from "./useField.types.js";
2
- import { UseFieldStateReturnValue } from "./useFieldState.js";
3
- import { UseFieldCharacterEditingReturnValue } from "./useFieldCharacterEditing.js";
4
- import { PickerAnyManager } from "../../models/index.js";
1
+ import type { UseFieldDOMGetters, UseFieldInternalProps } from "./useField.types.js";
2
+ import type { UseFieldStateReturnValue } from "./useFieldState.js";
3
+ import type { UseFieldCharacterEditingReturnValue } from "./useFieldCharacterEditing.js";
4
+ import type { PickerAnyManager } from "../../models/index.js";
5
5
  /**
6
6
  * Generate the props to pass to the root element of the field.
7
7
  * @param {UseFieldRootPropsParameters} parameters The parameters of the hook.
@@ -24,6 +24,7 @@ interface UseFieldRootPropsReturnValue {
24
24
  onBlur: React.FocusEventHandler<HTMLDivElement>;
25
25
  onFocus: React.FocusEventHandler<HTMLDivElement>;
26
26
  onClick: React.MouseEventHandler<HTMLDivElement>;
27
+ onMouseDown: React.MouseEventHandler<HTMLDivElement>;
27
28
  onPaste: React.ClipboardEventHandler<HTMLDivElement>;
28
29
  onInput: React.FormEventHandler<HTMLDivElement>;
29
30
  contentEditable: boolean;
@@ -144,14 +144,22 @@ function useFieldRootProps(parameters) {
144
144
  }
145
145
  });
146
146
  const containerClickTimeout = (0, _useTimeout.default)();
147
- const handleClick = (0, _useEventCallback.default)(event => {
147
+ const handleClick = (0, _useEventCallback.default)(() => {
148
148
  if (disabled || !domGetters.isReady()) {
149
149
  return;
150
150
  }
151
- setFocused(true);
152
151
  if (parsedSelectedSections === 'all') {
152
+ setFocused(true);
153
153
  containerClickTimeout.start(0, () => {
154
- const cursorPosition = document.getSelection().getRangeAt(0).startOffset;
154
+ // `getSelection`/`getRangeAt` can be unset transiently (e.g. focus
155
+ // moved before this 0-tick callback ran). Fall back to the first
156
+ // section in that case.
157
+ const selection = document.getSelection();
158
+ if (!selection || selection.rangeCount === 0) {
159
+ setSelectedSections(sectionOrder.startIndex);
160
+ return;
161
+ }
162
+ const cursorPosition = selection.getRangeAt(0).startOffset;
155
163
  if (cursorPosition === 0) {
156
164
  setSelectedSections(sectionOrder.startIndex);
157
165
  return;
@@ -165,16 +173,70 @@ function useFieldRootProps(parameters) {
165
173
  }
166
174
  setSelectedSections(sectionIndex - 1);
167
175
  });
168
- } else if (!focused) {
176
+ return;
177
+ }
178
+
179
+ // For trusted pointer input, `handleMouseDown` already ran and set the
180
+ // section. This branch only matters for `click` events that arrive
181
+ // without a preceding `mousedown` (programmatic `element.click()`, some
182
+ // assistive-technology activations, synthetic event sequences in tests).
183
+ // Fall back to the first section so the field doesn't enter a "focused
184
+ // but no active section" state.
185
+ if (!focused) {
169
186
  setFocused(true);
170
- setSelectedSections(sectionOrder.startIndex);
171
- } else {
172
- const hasClickedOnASection = domGetters.getRoot().contains(event.target);
173
- if (!hasClickedOnASection) {
187
+ if (parsedSelectedSections == null) {
174
188
  setSelectedSections(sectionOrder.startIndex);
175
189
  }
176
190
  }
177
191
  });
192
+
193
+ // Replaces Chromium's focus delegation with an explicit section focus on
194
+ // every primary mousedown inside the sections container. The CSS gate
195
+ // (`WebkitUserModify: read-only` while not `:focus-within`) can make the
196
+ // section's contenteditable span temporarily non-focusable, in which case
197
+ // Chromium falls back to the sections-container `tabindex=0` and our
198
+ // `handleFocus` then runs the "no active section" fallback, briefly
199
+ // selecting the first section before the click bubble corrects it.
200
+ // Setting the target section here (and letting `syncSelectionToDOM` move
201
+ // focus via `.focus()`, which works even with the user-modify rule
202
+ // active) skips that race entirely.
203
+ const handleMouseDown = (0, _useEventCallback.default)(event => {
204
+ if (disabled || !domGetters.isReady() || parsedSelectedSections === 'all') {
205
+ return;
206
+ }
207
+ if (event.button !== 0) {
208
+ return;
209
+ }
210
+ const target = event.target;
211
+ // `sectionListRoot` is the sections container (a descendant of the
212
+ // InputBase root that owns this handler). The guard rejects clicks on
213
+ // sibling adornments (open / clear buttons, etc.) which have their own
214
+ // behavior and must not get intercepted here.
215
+ const sectionListRoot = domGetters.getRoot();
216
+ if (!sectionListRoot.contains(target)) {
217
+ return;
218
+ }
219
+ // Prefer the visually-containing section (matches Chromium's
220
+ // delegation + section container `onClick`), fall back to the
221
+ // closest-by-distance section for padding / past-last-section clicks.
222
+ const sectionElement = target.closest('[data-sectionindex]');
223
+ const parsedIndex = sectionElement ? Number(sectionElement.dataset.sectionindex) : findClosestSectionIndexToPoint(sectionListRoot, event.clientX);
224
+ // `Number(undefined) === NaN` and `NaN == null === false`, so guard
225
+ // explicitly here even though `data-sectionindex` is set by
226
+ // `useFieldSectionContainerProps` for every section in practice.
227
+ if (parsedIndex == null || !Number.isInteger(parsedIndex)) {
228
+ return;
229
+ }
230
+ event.preventDefault();
231
+ setFocused(true);
232
+ // `mousedown` is now authoritative for pointer section selection. The
233
+ // section container's own `onClick` deduplicates against the resulting
234
+ // `parsedSelectedSections` on the click bubble (see
235
+ // `useFieldSectionContainerProps`), so we always select here and let that
236
+ // guard absorb the redundant call -- matching the pre-PR
237
+ // `onSelectedSectionsChange` invocation count.
238
+ setSelectedSections(parsedIndex);
239
+ });
178
240
  const handleInput = (0, _useEventCallback.default)(event => {
179
241
  if (!domGetters.isReady() || parsedSelectedSections !== 'all') {
180
242
  return;
@@ -242,6 +304,7 @@ function useFieldRootProps(parameters) {
242
304
  onBlur: handleBlur,
243
305
  onFocus: handleFocus,
244
306
  onClick: handleClick,
307
+ onMouseDown: handleMouseDown,
245
308
  onPaste: handlePaste,
246
309
  onInput: handleInput,
247
310
  // Other
@@ -249,6 +312,30 @@ function useFieldRootProps(parameters) {
249
312
  tabIndex: internalPropsWithDefaults.disabled || parsedSelectedSections === 0 ? -1 : 0 // TODO: Try to set to undefined when there is a section selected.
250
313
  };
251
314
  }
315
+
316
+ /**
317
+ * Returns the index of the section whose horizontal center is closest to `clientX`.
318
+ * Returns `null` if the field renders no `[role="spinbutton"]` descendants
319
+ * (defensive — every section content span sets `role="spinbutton"` in practice).
320
+ */
321
+ function findClosestSectionIndexToPoint(root, clientX) {
322
+ const sections = root.querySelectorAll('[role="spinbutton"]');
323
+ if (sections.length === 0) {
324
+ return null;
325
+ }
326
+ let closestIndex = 0;
327
+ let closestDistance = Infinity;
328
+ for (let i = 0; i < sections.length; i += 1) {
329
+ const rect = sections[i].getBoundingClientRect();
330
+ const center = (rect.left + rect.right) / 2;
331
+ const distance = Math.abs(clientX - center);
332
+ if (distance < closestDistance) {
333
+ closestDistance = distance;
334
+ closestIndex = i;
335
+ }
336
+ }
337
+ return closestIndex;
338
+ }
252
339
  function getDeltaFromKeyCode(keyCode) {
253
340
  switch (keyCode) {
254
341
  case 'ArrowUp':
@@ -138,14 +138,22 @@ export function useFieldRootProps(parameters) {
138
138
  }
139
139
  });
140
140
  const containerClickTimeout = useTimeout();
141
- const handleClick = useEventCallback(event => {
141
+ const handleClick = useEventCallback(() => {
142
142
  if (disabled || !domGetters.isReady()) {
143
143
  return;
144
144
  }
145
- setFocused(true);
146
145
  if (parsedSelectedSections === 'all') {
146
+ setFocused(true);
147
147
  containerClickTimeout.start(0, () => {
148
- const cursorPosition = document.getSelection().getRangeAt(0).startOffset;
148
+ // `getSelection`/`getRangeAt` can be unset transiently (e.g. focus
149
+ // moved before this 0-tick callback ran). Fall back to the first
150
+ // section in that case.
151
+ const selection = document.getSelection();
152
+ if (!selection || selection.rangeCount === 0) {
153
+ setSelectedSections(sectionOrder.startIndex);
154
+ return;
155
+ }
156
+ const cursorPosition = selection.getRangeAt(0).startOffset;
149
157
  if (cursorPosition === 0) {
150
158
  setSelectedSections(sectionOrder.startIndex);
151
159
  return;
@@ -159,16 +167,70 @@ export function useFieldRootProps(parameters) {
159
167
  }
160
168
  setSelectedSections(sectionIndex - 1);
161
169
  });
162
- } else if (!focused) {
170
+ return;
171
+ }
172
+
173
+ // For trusted pointer input, `handleMouseDown` already ran and set the
174
+ // section. This branch only matters for `click` events that arrive
175
+ // without a preceding `mousedown` (programmatic `element.click()`, some
176
+ // assistive-technology activations, synthetic event sequences in tests).
177
+ // Fall back to the first section so the field doesn't enter a "focused
178
+ // but no active section" state.
179
+ if (!focused) {
163
180
  setFocused(true);
164
- setSelectedSections(sectionOrder.startIndex);
165
- } else {
166
- const hasClickedOnASection = domGetters.getRoot().contains(event.target);
167
- if (!hasClickedOnASection) {
181
+ if (parsedSelectedSections == null) {
168
182
  setSelectedSections(sectionOrder.startIndex);
169
183
  }
170
184
  }
171
185
  });
186
+
187
+ // Replaces Chromium's focus delegation with an explicit section focus on
188
+ // every primary mousedown inside the sections container. The CSS gate
189
+ // (`WebkitUserModify: read-only` while not `:focus-within`) can make the
190
+ // section's contenteditable span temporarily non-focusable, in which case
191
+ // Chromium falls back to the sections-container `tabindex=0` and our
192
+ // `handleFocus` then runs the "no active section" fallback, briefly
193
+ // selecting the first section before the click bubble corrects it.
194
+ // Setting the target section here (and letting `syncSelectionToDOM` move
195
+ // focus via `.focus()`, which works even with the user-modify rule
196
+ // active) skips that race entirely.
197
+ const handleMouseDown = useEventCallback(event => {
198
+ if (disabled || !domGetters.isReady() || parsedSelectedSections === 'all') {
199
+ return;
200
+ }
201
+ if (event.button !== 0) {
202
+ return;
203
+ }
204
+ const target = event.target;
205
+ // `sectionListRoot` is the sections container (a descendant of the
206
+ // InputBase root that owns this handler). The guard rejects clicks on
207
+ // sibling adornments (open / clear buttons, etc.) which have their own
208
+ // behavior and must not get intercepted here.
209
+ const sectionListRoot = domGetters.getRoot();
210
+ if (!sectionListRoot.contains(target)) {
211
+ return;
212
+ }
213
+ // Prefer the visually-containing section (matches Chromium's
214
+ // delegation + section container `onClick`), fall back to the
215
+ // closest-by-distance section for padding / past-last-section clicks.
216
+ const sectionElement = target.closest('[data-sectionindex]');
217
+ const parsedIndex = sectionElement ? Number(sectionElement.dataset.sectionindex) : findClosestSectionIndexToPoint(sectionListRoot, event.clientX);
218
+ // `Number(undefined) === NaN` and `NaN == null === false`, so guard
219
+ // explicitly here even though `data-sectionindex` is set by
220
+ // `useFieldSectionContainerProps` for every section in practice.
221
+ if (parsedIndex == null || !Number.isInteger(parsedIndex)) {
222
+ return;
223
+ }
224
+ event.preventDefault();
225
+ setFocused(true);
226
+ // `mousedown` is now authoritative for pointer section selection. The
227
+ // section container's own `onClick` deduplicates against the resulting
228
+ // `parsedSelectedSections` on the click bubble (see
229
+ // `useFieldSectionContainerProps`), so we always select here and let that
230
+ // guard absorb the redundant call -- matching the pre-PR
231
+ // `onSelectedSectionsChange` invocation count.
232
+ setSelectedSections(parsedIndex);
233
+ });
172
234
  const handleInput = useEventCallback(event => {
173
235
  if (!domGetters.isReady() || parsedSelectedSections !== 'all') {
174
236
  return;
@@ -236,6 +298,7 @@ export function useFieldRootProps(parameters) {
236
298
  onBlur: handleBlur,
237
299
  onFocus: handleFocus,
238
300
  onClick: handleClick,
301
+ onMouseDown: handleMouseDown,
239
302
  onPaste: handlePaste,
240
303
  onInput: handleInput,
241
304
  // Other
@@ -243,6 +306,30 @@ export function useFieldRootProps(parameters) {
243
306
  tabIndex: internalPropsWithDefaults.disabled || parsedSelectedSections === 0 ? -1 : 0 // TODO: Try to set to undefined when there is a section selected.
244
307
  };
245
308
  }
309
+
310
+ /**
311
+ * Returns the index of the section whose horizontal center is closest to `clientX`.
312
+ * Returns `null` if the field renders no `[role="spinbutton"]` descendants
313
+ * (defensive — every section content span sets `role="spinbutton"` in practice).
314
+ */
315
+ function findClosestSectionIndexToPoint(root, clientX) {
316
+ const sections = root.querySelectorAll('[role="spinbutton"]');
317
+ if (sections.length === 0) {
318
+ return null;
319
+ }
320
+ let closestIndex = 0;
321
+ let closestDistance = Infinity;
322
+ for (let i = 0; i < sections.length; i += 1) {
323
+ const rect = sections[i].getBoundingClientRect();
324
+ const center = (rect.left + rect.right) / 2;
325
+ const distance = Math.abs(clientX - center);
326
+ if (distance < closestDistance) {
327
+ closestDistance = distance;
328
+ closestIndex = i;
329
+ }
330
+ }
331
+ return closestIndex;
332
+ }
246
333
  function getDeltaFromKeyCode(keyCode) {
247
334
  switch (keyCode) {
248
335
  case 'ArrowUp':
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
- import { UseFieldStateReturnValue } from "./useFieldState.mjs";
3
- import { UseFieldInternalProps } from "./useField.types.mjs";
2
+ import type { UseFieldStateReturnValue } from "./useFieldState.mjs";
3
+ import type { UseFieldInternalProps } from "./useField.types.mjs";
4
4
  /**
5
5
  * Generate the props to pass to the container element of each section of the field.
6
6
  * @param {UseFieldSectionContainerPropsParameters} parameters The parameters of the hook.
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
- import { UseFieldStateReturnValue } from "./useFieldState.js";
3
- import { UseFieldInternalProps } from "./useField.types.js";
2
+ import type { UseFieldStateReturnValue } from "./useFieldState.js";
3
+ import type { UseFieldInternalProps } from "./useField.types.js";
4
4
  /**
5
5
  * Generate the props to pass to the container element of each section of the field.
6
6
  * @param {UseFieldSectionContainerPropsParameters} parameters The parameters of the hook.
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
4
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.useFieldSectionContainerProps = useFieldSectionContainerProps;
8
9
  var React = _interopRequireWildcard(require("react"));
10
+ var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
9
11
  /**
10
12
  * Generate the props to pass to the container element of each section of the field.
11
13
  * @param {UseFieldSectionContainerPropsParameters} parameters The parameters of the hook.
@@ -14,6 +16,8 @@ var React = _interopRequireWildcard(require("react"));
14
16
  function useFieldSectionContainerProps(parameters) {
15
17
  const {
16
18
  stateResponse: {
19
+ // States and derived states
20
+ parsedSelectedSections,
17
21
  // Methods to update the states
18
22
  setSelectedSections
19
23
  },
@@ -21,16 +25,43 @@ function useFieldSectionContainerProps(parameters) {
21
25
  disabled = false
22
26
  }
23
27
  } = parameters;
24
- const createHandleClick = React.useCallback(sectionIndex => event => {
28
+
29
+ // A single stable handler shared by every section, rather than a per-index
30
+ // factory. The section index is read from the container's `data-sectionindex`
31
+ // at click time, and `useEventCallback` reads the latest `disabled` /
32
+ // `parsedSelectedSections` / `setSelectedSections` internally -- so none of
33
+ // them sit in a dependency array and the `onClick` identity stays stable
34
+ // across renders (`setSelectedSections` is recreated on every render, which
35
+ // would otherwise churn the handler).
36
+ const handleClick = (0, _useEventCallback.default)(event => {
25
37
  // The click event on the clear button would propagate to the input, trigger this handler and result in a wrong section selection.
26
38
  // We avoid this by checking if the call to this function is actually intended, or a side effect.
27
39
  if (disabled || event.isDefaultPrevented()) {
28
40
  return;
29
41
  }
42
+
43
+ // `currentTarget` is the section container, which always carries
44
+ // `data-sectionindex` (set below). Guard the parse defensively all the
45
+ // same -- `Number(undefined)` is `NaN`, and `NaN === parsedSelectedSections`
46
+ // is always false, so it would otherwise reach `setSelectedSections(NaN)`.
47
+ const sectionIndex = Number(event.currentTarget.dataset.sectionindex);
48
+ if (!Number.isInteger(sectionIndex)) {
49
+ return;
50
+ }
51
+
52
+ // For pointer input the `mousedown` handler already selected the section
53
+ // before this click bubbles, so bail to avoid a redundant
54
+ // `onSelectedSectionsChange` invocation. On the non-pointer paths
55
+ // (programmatic `element.click()`, some AT activations) `mousedown`
56
+ // didn't run, so `parsedSelectedSections` won't match yet and selection
57
+ // proceeds normally.
58
+ if (parsedSelectedSections === sectionIndex) {
59
+ return;
60
+ }
30
61
  setSelectedSections(sectionIndex);
31
- }, [disabled, setSelectedSections]);
62
+ });
32
63
  return React.useCallback(sectionIndex => ({
33
64
  'data-sectionindex': sectionIndex,
34
- onClick: createHandleClick(sectionIndex)
35
- }), [createHandleClick]);
65
+ onClick: handleClick
66
+ }), [handleClick]);
36
67
  }
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import useEventCallback from '@mui/utils/useEventCallback';
2
3
  /**
3
4
  * Generate the props to pass to the container element of each section of the field.
4
5
  * @param {UseFieldSectionContainerPropsParameters} parameters The parameters of the hook.
@@ -7,6 +8,8 @@ import * as React from 'react';
7
8
  export function useFieldSectionContainerProps(parameters) {
8
9
  const {
9
10
  stateResponse: {
11
+ // States and derived states
12
+ parsedSelectedSections,
10
13
  // Methods to update the states
11
14
  setSelectedSections
12
15
  },
@@ -14,16 +17,43 @@ export function useFieldSectionContainerProps(parameters) {
14
17
  disabled = false
15
18
  }
16
19
  } = parameters;
17
- const createHandleClick = React.useCallback(sectionIndex => event => {
20
+
21
+ // A single stable handler shared by every section, rather than a per-index
22
+ // factory. The section index is read from the container's `data-sectionindex`
23
+ // at click time, and `useEventCallback` reads the latest `disabled` /
24
+ // `parsedSelectedSections` / `setSelectedSections` internally -- so none of
25
+ // them sit in a dependency array and the `onClick` identity stays stable
26
+ // across renders (`setSelectedSections` is recreated on every render, which
27
+ // would otherwise churn the handler).
28
+ const handleClick = useEventCallback(event => {
18
29
  // The click event on the clear button would propagate to the input, trigger this handler and result in a wrong section selection.
19
30
  // We avoid this by checking if the call to this function is actually intended, or a side effect.
20
31
  if (disabled || event.isDefaultPrevented()) {
21
32
  return;
22
33
  }
34
+
35
+ // `currentTarget` is the section container, which always carries
36
+ // `data-sectionindex` (set below). Guard the parse defensively all the
37
+ // same -- `Number(undefined)` is `NaN`, and `NaN === parsedSelectedSections`
38
+ // is always false, so it would otherwise reach `setSelectedSections(NaN)`.
39
+ const sectionIndex = Number(event.currentTarget.dataset.sectionindex);
40
+ if (!Number.isInteger(sectionIndex)) {
41
+ return;
42
+ }
43
+
44
+ // For pointer input the `mousedown` handler already selected the section
45
+ // before this click bubbles, so bail to avoid a redundant
46
+ // `onSelectedSectionsChange` invocation. On the non-pointer paths
47
+ // (programmatic `element.click()`, some AT activations) `mousedown`
48
+ // didn't run, so `parsedSelectedSections` won't match yet and selection
49
+ // proceeds normally.
50
+ if (parsedSelectedSections === sectionIndex) {
51
+ return;
52
+ }
23
53
  setSelectedSections(sectionIndex);
24
- }, [disabled, setSelectedSections]);
54
+ });
25
55
  return React.useCallback(sectionIndex => ({
26
56
  'data-sectionindex': sectionIndex,
27
- onClick: createHandleClick(sectionIndex)
28
- }), [createHandleClick]);
57
+ onClick: handleClick
58
+ }), [handleClick]);
29
59
  }
@@ -1,9 +1,9 @@
1
- import { UseFieldStateReturnValue } from "./useFieldState.mjs";
2
- import { FieldSection } from "../../../models/index.mjs";
3
- import { UseFieldDOMGetters, UseFieldInternalProps } from "./useField.types.mjs";
4
- import { UseFieldCharacterEditingReturnValue } from "./useFieldCharacterEditing.mjs";
5
- import { PickerAnyManager } from "../../models/index.mjs";
6
- import { PickersSectionElement } from "../../../PickersSectionList/index.mjs";
1
+ import type { UseFieldStateReturnValue } from "./useFieldState.mjs";
2
+ import type { FieldSection } from "../../../models/index.mjs";
3
+ import type { UseFieldDOMGetters, UseFieldInternalProps } from "./useField.types.mjs";
4
+ import type { UseFieldCharacterEditingReturnValue } from "./useFieldCharacterEditing.mjs";
5
+ import type { PickerAnyManager } from "../../models/index.mjs";
6
+ import type { PickersSectionElement } from "../../../PickersSectionList/index.mjs";
7
7
  /**
8
8
  * Generate the props to pass to the content element of each section of the field.
9
9
  * @param {UseFieldSectionContentPropsParameters} parameters The parameters of the hook.
@@ -1,9 +1,9 @@
1
- import { UseFieldStateReturnValue } from "./useFieldState.js";
2
- import { FieldSection } from "../../../models/index.js";
3
- import { UseFieldDOMGetters, UseFieldInternalProps } from "./useField.types.js";
4
- import { UseFieldCharacterEditingReturnValue } from "./useFieldCharacterEditing.js";
5
- import { PickerAnyManager } from "../../models/index.js";
6
- import { PickersSectionElement } from "../../../PickersSectionList/index.js";
1
+ import type { UseFieldStateReturnValue } from "./useFieldState.js";
2
+ import type { FieldSection } from "../../../models/index.js";
3
+ import type { UseFieldDOMGetters, UseFieldInternalProps } from "./useField.types.js";
4
+ import type { UseFieldCharacterEditingReturnValue } from "./useFieldCharacterEditing.js";
5
+ import type { PickerAnyManager } from "../../models/index.js";
6
+ import type { PickersSectionElement } from "../../../PickersSectionList/index.js";
7
7
  /**
8
8
  * Generate the props to pass to the content element of each section of the field.
9
9
  * @param {UseFieldSectionContentPropsParameters} parameters The parameters of the hook.
@@ -10,6 +10,7 @@ var React = _interopRequireWildcard(require("react"));
10
10
  var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
11
11
  var _hooks = require("../../../hooks");
12
12
  var _syncSelectionToDOM = require("./syncSelectionToDOM");
13
+ var _useField = require("./useField.utils");
13
14
  /**
14
15
  * Generate the props to pass to the content element of each section of the field.
15
16
  * @param {UseFieldSectionContentPropsParameters} parameters The parameters of the hook.
@@ -32,6 +33,7 @@ function useFieldSectionContentProps(parameters) {
32
33
  sectionsValueBoundaries,
33
34
  state,
34
35
  value,
36
+ localizedDigits,
35
37
  // Methods to update the states
36
38
  clearActiveSection,
37
39
  setCharacterQuery,
@@ -152,10 +154,10 @@ function useFieldSectionContentProps(parameters) {
152
154
  onFocus: createFocusHandler(sectionIndex),
153
155
  // Aria attributes
154
156
  'aria-readonly': readOnly,
155
- 'aria-valuenow': getSectionValueNow(section, adapter),
157
+ 'aria-valuenow': getSectionValueNow(section, adapter, localizedDigits),
156
158
  'aria-valuemin': sectionBoundaries.minimum,
157
159
  'aria-valuemax': sectionBoundaries.maximum,
158
- 'aria-valuetext': section.value ? getSectionValueText(section, adapter) : translations.empty,
160
+ 'aria-valuetext': section.value ? getSectionValueText(section, adapter, localizedDigits) : translations.empty,
159
161
  'aria-label': translations[section.type],
160
162
  'aria-disabled': disabled,
161
163
  // Other
@@ -171,9 +173,9 @@ function useFieldSectionContentProps(parameters) {
171
173
  children: section.value || section.placeholder,
172
174
  inputMode: section.contentType === 'letter' ? 'text' : 'numeric'
173
175
  };
174
- }, [sectionsValueBoundaries, isContainerEditable, disabled, readOnly, isEditable, translations, adapter, handleInput, handlePaste, handleMouseUp, handleDragOver, createFocusHandler, fieldValueManager, value]);
176
+ }, [sectionsValueBoundaries, isContainerEditable, disabled, readOnly, isEditable, translations, adapter, localizedDigits, handleInput, handlePaste, handleMouseUp, handleDragOver, createFocusHandler, fieldValueManager, value]);
175
177
  }
176
- function getSectionValueText(section, adapter) {
178
+ function getSectionValueText(section, adapter, localizedDigits) {
177
179
  if (!section.value) {
178
180
  return undefined;
179
181
  }
@@ -181,7 +183,7 @@ function getSectionValueText(section, adapter) {
181
183
  case 'month':
182
184
  {
183
185
  if (section.contentType === 'digit') {
184
- const dateWithMonth = adapter.setMonth(adapter.date(), Number(section.value) - 1);
186
+ const dateWithMonth = adapter.setMonth(adapter.date(), Number((0, _useField.removeLocalizedDigits)(section.value, localizedDigits)) - 1);
185
187
  return adapter.isValid(dateWithMonth) ? adapter.format(dateWithMonth, 'month') : '';
186
188
  }
187
189
  const parsedDate = adapter.parse(section.value, section.format);
@@ -189,8 +191,10 @@ function getSectionValueText(section, adapter) {
189
191
  }
190
192
  case 'day':
191
193
  if (section.contentType === 'digit') {
192
- const dateWithDay = adapter.setDate(adapter.startOfYear(adapter.date()), Number(section.value));
193
- return adapter.isValid(dateWithDay) ? adapter.format(dateWithDay, 'dayOfMonthFull') : '';
194
+ const dateWithDay = adapter.setDate(adapter.startOfYear(adapter.date()), Number((0, _useField.removeLocalizedDigits)(section.value, localizedDigits)));
195
+ // Announce a cardinal day (e.g. "2"), not a locale ordinal (e.g. French "2ème").
196
+ // See https://github.com/mui/mui-x/issues/22915.
197
+ return adapter.isValid(dateWithDay) ? adapter.format(dateWithDay, 'dayOfMonth') : '';
194
198
  }
195
199
  return section.value;
196
200
  case 'weekDay':
@@ -200,10 +204,11 @@ function getSectionValueText(section, adapter) {
200
204
  return undefined;
201
205
  }
202
206
  }
203
- function getSectionValueNow(section, adapter) {
207
+ function getSectionValueNow(section, adapter, localizedDigits) {
204
208
  if (!section.value) {
205
209
  return undefined;
206
210
  }
211
+ const nonLocalizedValue = (0, _useField.removeLocalizedDigits)(section.value, localizedDigits);
207
212
  switch (section.type) {
208
213
  case 'weekDay':
209
214
  {
@@ -211,7 +216,7 @@ function getSectionValueNow(section, adapter) {
211
216
  // TODO: improve by resolving the week day number from a letter week day
212
217
  return undefined;
213
218
  }
214
- return Number(section.value);
219
+ return Number(nonLocalizedValue);
215
220
  }
216
221
  case 'meridiem':
217
222
  {
@@ -222,16 +227,16 @@ function getSectionValueNow(section, adapter) {
222
227
  return undefined;
223
228
  }
224
229
  case 'day':
225
- return section.contentType === 'digit-with-letter' ? parseInt(section.value, 10) : Number(section.value);
230
+ return section.contentType === 'digit-with-letter' ? parseInt(nonLocalizedValue, 10) : Number(nonLocalizedValue);
226
231
  case 'month':
227
232
  {
228
233
  if (section.contentType === 'digit') {
229
- return Number(section.value);
234
+ return Number(nonLocalizedValue);
230
235
  }
231
236
  const parsedDate = adapter.parse(section.value, section.format);
232
237
  return parsedDate ? adapter.getMonth(parsedDate) + 1 : undefined;
233
238
  }
234
239
  default:
235
- return section.contentType !== 'letter' ? Number(section.value) : undefined;
240
+ return section.contentType !== 'letter' ? Number(nonLocalizedValue) : undefined;
236
241
  }
237
242
  }