@mui/x-date-pickers-pro 8.0.0-alpha.1 → 8.0.0-alpha.11

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 (294) hide show
  1. package/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/index.d.ts +1 -1
  2. package/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/index.js +1 -1
  3. package/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/package.json +1 -1
  4. package/{AdapterDateFnsV3 → AdapterDateFnsV2}/index.d.ts +1 -1
  5. package/{AdapterDateFnsV3 → AdapterDateFnsV2}/index.js +1 -1
  6. package/{AdapterDateFnsV3 → AdapterDateFnsV2}/package.json +1 -1
  7. package/CHANGELOG.md +2007 -230
  8. package/DateRangeCalendar/DateRangeCalendar.js +73 -46
  9. package/DateRangePicker/DateRangePicker.js +1 -4
  10. package/DateRangePicker/DateRangePicker.types.d.ts +6 -2
  11. package/DateRangePicker/DateRangePickerToolbar.d.ts +2 -3
  12. package/DateRangePicker/DateRangePickerToolbar.js +33 -41
  13. package/DateRangePicker/shared.d.ts +4 -3
  14. package/DateTimeRangePicker/DateTimeRangePicker.js +2 -5
  15. package/DateTimeRangePicker/DateTimeRangePicker.types.d.ts +1 -2
  16. package/DateTimeRangePicker/DateTimeRangePickerTabs.d.ts +4 -5
  17. package/DateTimeRangePicker/DateTimeRangePickerTabs.js +35 -33
  18. package/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.d.ts +8 -10
  19. package/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +8 -6
  20. package/DateTimeRangePicker/DateTimeRangePickerToolbar.d.ts +2 -5
  21. package/DateTimeRangePicker/DateTimeRangePickerToolbar.js +81 -109
  22. package/DateTimeRangePicker/shared.d.ts +6 -5
  23. package/DesktopDateRangePicker/DesktopDateRangePicker.js +11 -9
  24. package/DesktopDateRangePicker/DesktopDateRangePicker.types.d.ts +7 -2
  25. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +20 -22
  26. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.types.d.ts +2 -3
  27. package/MobileDateRangePicker/MobileDateRangePicker.js +6 -8
  28. package/MobileDateRangePicker/MobileDateRangePicker.types.d.ts +2 -2
  29. package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +20 -16
  30. package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.types.d.ts +2 -3
  31. package/MultiInputDateRangeField/MultiInputDateRangeField.d.ts +9 -4
  32. package/MultiInputDateRangeField/MultiInputDateRangeField.js +15 -121
  33. package/MultiInputDateRangeField/index.d.ts +5 -3
  34. package/MultiInputDateRangeField/index.js +2 -2
  35. package/MultiInputDateRangeField/multiInputDateRangeFieldClasses.d.ts +6 -0
  36. package/MultiInputDateRangeField/multiInputDateRangeFieldClasses.js +4 -0
  37. package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.d.ts +9 -4
  38. package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +15 -121
  39. package/MultiInputDateTimeRangeField/index.d.ts +5 -3
  40. package/MultiInputDateTimeRangeField/index.js +2 -2
  41. package/MultiInputDateTimeRangeField/multiInputDateTimeRangeFieldClasses.d.ts +6 -0
  42. package/MultiInputDateTimeRangeField/multiInputDateTimeRangeFieldClasses.js +4 -0
  43. package/MultiInputTimeRangeField/MultiInputTimeRangeField.d.ts +9 -4
  44. package/MultiInputTimeRangeField/MultiInputTimeRangeField.js +16 -122
  45. package/MultiInputTimeRangeField/index.d.ts +5 -3
  46. package/MultiInputTimeRangeField/index.js +2 -2
  47. package/MultiInputTimeRangeField/multiInputTimeRangeFieldClasses.d.ts +6 -0
  48. package/MultiInputTimeRangeField/multiInputTimeRangeFieldClasses.js +4 -0
  49. package/PickersRangeCalendarHeader/PickersRangeCalendarHeader.js +2 -2
  50. package/README.md +8 -5
  51. package/SingleInputDateRangeField/SingleInputDateRangeField.js +23 -33
  52. package/SingleInputDateRangeField/SingleInputDateRangeField.types.d.ts +6 -16
  53. package/SingleInputDateRangeField/useSingleInputDateRangeField.d.ts +1 -1
  54. package/SingleInputDateRangeField/useSingleInputDateRangeField.js +14 -14
  55. package/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +23 -33
  56. package/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.types.d.ts +6 -17
  57. package/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.d.ts +1 -1
  58. package/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.js +14 -14
  59. package/SingleInputTimeRangeField/SingleInputTimeRangeField.js +23 -33
  60. package/SingleInputTimeRangeField/SingleInputTimeRangeField.types.d.ts +6 -17
  61. package/SingleInputTimeRangeField/useSingleInputTimeRangeField.d.ts +1 -1
  62. package/SingleInputTimeRangeField/useSingleInputTimeRangeField.js +14 -14
  63. package/StaticDateRangePicker/StaticDateRangePicker.js +2 -2
  64. package/StaticDateRangePicker/StaticDateRangePicker.types.d.ts +2 -2
  65. package/dateRangeViewRenderers/dateRangeViewRenderers.d.ts +2 -2
  66. package/dateRangeViewRenderers/dateRangeViewRenderers.js +0 -6
  67. package/hooks/index.d.ts +2 -0
  68. package/hooks/index.js +2 -0
  69. package/hooks/package.json +6 -0
  70. package/hooks/useMultiInputRangeField/index.d.ts +1 -0
  71. package/hooks/useMultiInputRangeField/index.js +1 -0
  72. package/hooks/useMultiInputRangeField/useMultiInputRangeField.d.ts +53 -0
  73. package/hooks/useMultiInputRangeField/useMultiInputRangeField.js +149 -0
  74. package/hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.d.ts +17 -0
  75. package/{modern/internals/hooks/useMultiInputFieldSelectedSections.js → hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.js} +10 -8
  76. package/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.d.ts +17 -0
  77. package/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.js +59 -0
  78. package/hooks/usePickerRangePositionContext.d.ts +7 -0
  79. package/hooks/usePickerRangePositionContext.js +15 -0
  80. package/index.d.ts +2 -0
  81. package/index.js +4 -2
  82. package/internals/hooks/models/index.d.ts +1 -1
  83. package/internals/hooks/models/useRangePicker.d.ts +8 -11
  84. package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +68 -100
  85. package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.types.d.ts +8 -10
  86. package/internals/hooks/{useEnrichedRangePickerFieldProps.d.ts → useEnrichedRangePickerField.d.ts} +25 -16
  87. package/internals/hooks/{useEnrichedRangePickerFieldProps.js → useEnrichedRangePickerField.js} +50 -63
  88. package/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +57 -80
  89. package/internals/hooks/useMobileRangePicker/useMobileRangePicker.types.d.ts +7 -9
  90. package/internals/hooks/useNullablePickerRangePositionContext.d.ts +5 -0
  91. package/internals/hooks/useNullablePickerRangePositionContext.js +10 -0
  92. package/internals/hooks/useRangePosition.d.ts +4 -3
  93. package/internals/hooks/useRangePosition.js +1 -1
  94. package/internals/hooks/useStaticRangePicker/useStaticRangePicker.d.ts +1 -1
  95. package/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +17 -30
  96. package/internals/hooks/useStaticRangePicker/useStaticRangePicker.types.d.ts +6 -12
  97. package/internals/models/dateTimeRange.d.ts +1 -6
  98. package/internals/models/fields.d.ts +7 -11
  99. package/internals/models/index.d.ts +0 -1
  100. package/internals/models/index.js +0 -1
  101. package/internals/models/managers.d.ts +3 -0
  102. package/internals/utils/createMultiInputRangeField/createMultiInputRangeField.d.ts +3 -0
  103. package/internals/utils/createMultiInputRangeField/createMultiInputRangeField.js +136 -0
  104. package/internals/utils/createMultiInputRangeField/createMultiInputRangeField.types.d.ts +72 -0
  105. package/internals/utils/createMultiInputRangeField/index.d.ts +3 -0
  106. package/internals/utils/createMultiInputRangeField/index.js +2 -0
  107. package/internals/utils/date-fields-utils.d.ts +6 -6
  108. package/internals/utils/date-range-manager.js +2 -1
  109. package/internals/utils/releaseInfo.js +1 -1
  110. package/internals/utils/valueManagers.d.ts +4 -3
  111. package/internals/utils/valueManagers.js +7 -7
  112. package/managers/index.d.ts +6 -0
  113. package/managers/index.js +3 -0
  114. package/managers/package.json +6 -0
  115. package/managers/useDateRangeManager.d.ts +15 -0
  116. package/managers/useDateRangeManager.js +33 -0
  117. package/managers/useDateTimeRangeManager.d.ts +15 -0
  118. package/managers/useDateTimeRangeManager.js +33 -0
  119. package/managers/useTimeRangeManager.d.ts +15 -0
  120. package/managers/useTimeRangeManager.js +31 -0
  121. package/models/fields.d.ts +7 -11
  122. package/models/index.d.ts +1 -2
  123. package/models/index.js +1 -2
  124. package/models/range.d.ts +0 -2
  125. package/modern/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/index.js +1 -1
  126. package/modern/{AdapterDateFnsV3 → AdapterDateFnsV2}/index.js +1 -1
  127. package/modern/DateRangeCalendar/DateRangeCalendar.js +73 -46
  128. package/modern/DateRangePicker/DateRangePicker.js +1 -4
  129. package/modern/DateRangePicker/DateRangePickerToolbar.js +33 -41
  130. package/modern/DateTimeRangePicker/DateTimeRangePicker.js +2 -5
  131. package/modern/DateTimeRangePicker/DateTimeRangePickerTabs.js +35 -33
  132. package/modern/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +8 -6
  133. package/modern/DateTimeRangePicker/DateTimeRangePickerToolbar.js +81 -109
  134. package/modern/DesktopDateRangePicker/DesktopDateRangePicker.js +11 -9
  135. package/modern/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +20 -22
  136. package/modern/MobileDateRangePicker/MobileDateRangePicker.js +6 -8
  137. package/modern/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +20 -16
  138. package/modern/MultiInputDateRangeField/MultiInputDateRangeField.js +15 -121
  139. package/modern/MultiInputDateRangeField/index.js +2 -2
  140. package/modern/MultiInputDateRangeField/multiInputDateRangeFieldClasses.js +4 -0
  141. package/modern/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +15 -121
  142. package/modern/MultiInputDateTimeRangeField/index.js +2 -2
  143. package/modern/MultiInputDateTimeRangeField/multiInputDateTimeRangeFieldClasses.js +4 -0
  144. package/modern/MultiInputTimeRangeField/MultiInputTimeRangeField.js +16 -122
  145. package/modern/MultiInputTimeRangeField/index.js +2 -2
  146. package/modern/MultiInputTimeRangeField/multiInputTimeRangeFieldClasses.js +4 -0
  147. package/modern/PickersRangeCalendarHeader/PickersRangeCalendarHeader.js +2 -2
  148. package/modern/SingleInputDateRangeField/SingleInputDateRangeField.js +23 -33
  149. package/modern/SingleInputDateRangeField/useSingleInputDateRangeField.js +14 -14
  150. package/modern/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +23 -33
  151. package/modern/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.js +14 -14
  152. package/modern/SingleInputTimeRangeField/SingleInputTimeRangeField.js +23 -33
  153. package/modern/SingleInputTimeRangeField/useSingleInputTimeRangeField.js +14 -14
  154. package/modern/StaticDateRangePicker/StaticDateRangePicker.js +2 -2
  155. package/modern/dateRangeViewRenderers/dateRangeViewRenderers.js +0 -6
  156. package/modern/hooks/index.js +2 -0
  157. package/modern/hooks/useMultiInputRangeField/index.js +1 -0
  158. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeField.js +149 -0
  159. package/{internals/hooks/useMultiInputFieldSelectedSections.js → modern/hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.js} +10 -8
  160. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.js +59 -0
  161. package/modern/hooks/usePickerRangePositionContext.js +15 -0
  162. package/modern/index.js +4 -2
  163. package/modern/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +68 -100
  164. package/modern/internals/hooks/{useEnrichedRangePickerFieldProps.js → useEnrichedRangePickerField.js} +50 -63
  165. package/modern/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +57 -80
  166. package/modern/internals/hooks/useNullablePickerRangePositionContext.js +10 -0
  167. package/modern/internals/hooks/useRangePosition.js +1 -1
  168. package/modern/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +17 -30
  169. package/modern/internals/models/index.js +0 -1
  170. package/modern/internals/utils/createMultiInputRangeField/createMultiInputRangeField.js +136 -0
  171. package/modern/internals/utils/createMultiInputRangeField/index.js +2 -0
  172. package/modern/internals/utils/date-range-manager.js +2 -1
  173. package/modern/internals/utils/releaseInfo.js +1 -1
  174. package/modern/internals/utils/valueManagers.js +7 -7
  175. package/modern/managers/index.js +3 -0
  176. package/modern/managers/useDateRangeManager.js +33 -0
  177. package/modern/managers/useDateTimeRangeManager.js +33 -0
  178. package/modern/managers/useTimeRangeManager.js +31 -0
  179. package/modern/models/index.js +1 -2
  180. package/modern/validation/validateDateRange.js +8 -0
  181. package/modern/validation/validateDateTimeRange.js +4 -0
  182. package/modern/validation/validateTimeRange.js +8 -0
  183. package/node/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/index.js +1 -1
  184. package/node/{AdapterDateFnsV3 → AdapterDateFnsV2}/index.js +1 -1
  185. package/node/DateRangeCalendar/DateRangeCalendar.js +72 -45
  186. package/node/DateRangePicker/DateRangePicker.js +1 -4
  187. package/node/DateRangePicker/DateRangePickerToolbar.js +31 -39
  188. package/node/DateTimeRangePicker/DateTimeRangePicker.js +2 -5
  189. package/node/DateTimeRangePicker/DateTimeRangePickerTabs.js +33 -31
  190. package/node/DateTimeRangePicker/DateTimeRangePickerTimeWrapper.js +8 -6
  191. package/node/DateTimeRangePicker/DateTimeRangePickerToolbar.js +80 -108
  192. package/node/DesktopDateRangePicker/DesktopDateRangePicker.js +11 -9
  193. package/node/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +20 -22
  194. package/node/MobileDateRangePicker/MobileDateRangePicker.js +6 -8
  195. package/node/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +20 -16
  196. package/node/MultiInputDateRangeField/MultiInputDateRangeField.js +14 -124
  197. package/node/MultiInputDateRangeField/index.js +3 -9
  198. package/node/MultiInputDateRangeField/multiInputDateRangeFieldClasses.js +12 -0
  199. package/node/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +14 -124
  200. package/node/MultiInputDateTimeRangeField/index.js +3 -9
  201. package/node/MultiInputDateTimeRangeField/multiInputDateTimeRangeFieldClasses.js +12 -0
  202. package/node/MultiInputTimeRangeField/MultiInputTimeRangeField.js +15 -125
  203. package/node/MultiInputTimeRangeField/index.js +3 -9
  204. package/node/MultiInputTimeRangeField/multiInputTimeRangeFieldClasses.js +12 -0
  205. package/node/PickersRangeCalendarHeader/PickersRangeCalendarHeader.js +2 -2
  206. package/node/SingleInputDateRangeField/SingleInputDateRangeField.js +22 -32
  207. package/node/SingleInputDateRangeField/useSingleInputDateRangeField.js +13 -14
  208. package/node/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +22 -32
  209. package/node/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.js +13 -14
  210. package/node/SingleInputTimeRangeField/SingleInputTimeRangeField.js +22 -32
  211. package/node/SingleInputTimeRangeField/useSingleInputTimeRangeField.js +13 -14
  212. package/node/StaticDateRangePicker/StaticDateRangePicker.js +2 -2
  213. package/node/dateRangeViewRenderers/dateRangeViewRenderers.js +0 -6
  214. package/node/hooks/index.js +19 -0
  215. package/node/hooks/useMultiInputRangeField/index.js +12 -0
  216. package/node/hooks/useMultiInputRangeField/useMultiInputRangeField.js +155 -0
  217. package/node/{internals/hooks/useMultiInputFieldSelectedSections.js → hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.js} +11 -10
  218. package/node/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.js +66 -0
  219. package/node/hooks/usePickerRangePositionContext.js +22 -0
  220. package/node/index.js +23 -1
  221. package/node/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +68 -100
  222. package/node/internals/hooks/{useEnrichedRangePickerFieldProps.js → useEnrichedRangePickerField.js} +52 -65
  223. package/node/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +57 -80
  224. package/node/internals/hooks/useNullablePickerRangePositionContext.js +16 -0
  225. package/node/internals/hooks/useRangePosition.js +1 -1
  226. package/node/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +16 -29
  227. package/node/internals/models/index.js +0 -11
  228. package/node/internals/utils/createMultiInputRangeField/createMultiInputRangeField.js +143 -0
  229. package/node/internals/utils/createMultiInputRangeField/index.js +19 -0
  230. package/node/internals/utils/date-range-manager.js +2 -1
  231. package/node/internals/utils/releaseInfo.js +1 -1
  232. package/node/internals/utils/valueManagers.js +7 -7
  233. package/node/managers/index.js +26 -0
  234. package/node/managers/useDateRangeManager.js +40 -0
  235. package/node/managers/useDateTimeRangeManager.js +40 -0
  236. package/node/managers/useTimeRangeManager.js +38 -0
  237. package/node/models/index.js +0 -22
  238. package/node/validation/validateDateRange.js +8 -0
  239. package/node/validation/validateDateTimeRange.js +4 -0
  240. package/node/validation/validateTimeRange.js +8 -0
  241. package/package.json +6 -6
  242. package/themeAugmentation/overrides.d.ts +6 -4
  243. package/themeAugmentation/props.d.ts +2 -2
  244. package/validation/validateDateRange.d.ts +9 -1
  245. package/validation/validateDateRange.js +8 -0
  246. package/validation/validateDateTimeRange.d.ts +6 -2
  247. package/validation/validateDateTimeRange.js +4 -0
  248. package/validation/validateTimeRange.d.ts +9 -1
  249. package/validation/validateTimeRange.js +8 -0
  250. package/MultiInputDateRangeField/MultiInputDateRangeField.types.d.ts +0 -53
  251. package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.types.d.ts +0 -54
  252. package/MultiInputTimeRangeField/MultiInputTimeRangeField.types.d.ts +0 -54
  253. package/internals/hooks/useMultiInputFieldSelectedSections.d.ts +0 -21
  254. package/internals/hooks/useMultiInputRangeField/shared.d.ts +0 -1
  255. package/internals/hooks/useMultiInputRangeField/shared.js +0 -9
  256. package/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.d.ts +0 -3
  257. package/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +0 -113
  258. package/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.d.ts +0 -3
  259. package/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +0 -113
  260. package/internals/hooks/useMultiInputRangeField/useMultiInputRangeField.types.d.ts +0 -11
  261. package/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.d.ts +0 -3
  262. package/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +0 -113
  263. package/internals/models/timeRange.d.ts +0 -6
  264. package/internals/models/timeRange.js +0 -1
  265. package/models/dateRange.d.ts +0 -7
  266. package/models/dateRange.js +0 -1
  267. package/models/multiInputRangeFieldClasses.d.ts +0 -7
  268. package/models/multiInputRangeFieldClasses.js +0 -1
  269. package/modern/MultiInputDateRangeField/MultiInputDateRangeField.types.js +0 -1
  270. package/modern/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.types.js +0 -1
  271. package/modern/MultiInputTimeRangeField/MultiInputTimeRangeField.types.js +0 -1
  272. package/modern/internals/hooks/useMultiInputRangeField/shared.js +0 -9
  273. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +0 -113
  274. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +0 -113
  275. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputRangeField.types.js +0 -1
  276. package/modern/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +0 -113
  277. package/modern/internals/models/timeRange.js +0 -1
  278. package/modern/models/dateRange.js +0 -1
  279. package/modern/models/multiInputRangeFieldClasses.js +0 -1
  280. package/node/MultiInputTimeRangeField/MultiInputTimeRangeField.types.js +0 -5
  281. package/node/internals/hooks/useMultiInputRangeField/shared.js +0 -16
  282. package/node/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +0 -121
  283. package/node/internals/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +0 -121
  284. package/node/internals/hooks/useMultiInputRangeField/useMultiInputRangeField.types.js +0 -5
  285. package/node/internals/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +0 -121
  286. package/node/internals/models/timeRange.js +0 -5
  287. package/node/models/dateRange.js +0 -5
  288. package/node/models/multiInputRangeFieldClasses.js +0 -5
  289. /package/{MultiInputDateRangeField/MultiInputDateRangeField.types.js → internals/models/managers.js} +0 -0
  290. /package/{MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.types.js → internals/utils/createMultiInputRangeField/createMultiInputRangeField.types.js} +0 -0
  291. /package/{MultiInputTimeRangeField/MultiInputTimeRangeField.types.js → modern/internals/models/managers.js} +0 -0
  292. /package/{internals/hooks/useMultiInputRangeField/useMultiInputRangeField.types.js → modern/internals/utils/createMultiInputRangeField/createMultiInputRangeField.types.js} +0 -0
  293. /package/node/{MultiInputDateRangeField/MultiInputDateRangeField.types.js → internals/models/managers.js} +0 -0
  294. /package/node/{MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.types.js → internals/utils/createMultiInputRangeField/createMultiInputRangeField.types.js} +0 -0
@@ -0,0 +1,2 @@
1
+ export { createMultiInputRangeField } from "./createMultiInputRangeField.js";
2
+ export { useMultiInputRangeField as unstable_useMultiInputRangeField } from "../../../hooks/useMultiInputRangeField/useMultiInputRangeField.js";
@@ -8,7 +8,8 @@ export function calculateRangeChange({
8
8
  shouldMergeDateAndTime = false,
9
9
  referenceDate
10
10
  }) {
11
- const [start, end] = range;
11
+ const start = !utils.isValid(range[0]) ? null : range[0];
12
+ const end = !utils.isValid(range[1]) ? null : range[1];
12
13
  if (shouldMergeDateAndTime && selectedDate) {
13
14
  // If there is a date already selected, then we want to keep its time
14
15
  if (start && rangePosition === 'start') {
@@ -1,6 +1,6 @@
1
1
  import { ponyfillGlobal } from '@mui/utils';
2
2
  export const getReleaseInfo = () => {
3
- const releaseInfo = "MTczMjIzMDAwMDAwMA==";
3
+ const releaseInfo = "MTczODg4MjgwMDAwMA==";
4
4
  if (process.env.NODE_ENV !== 'production') {
5
5
  // A simple hack to set the value in the test environment (has no build step).
6
6
  // eslint-disable-next-line no-useless-concat
@@ -12,8 +12,8 @@ export const rangeValueManager = {
12
12
  referenceDate: referenceDateProp
13
13
  } = _ref,
14
14
  params = _objectWithoutPropertiesLoose(_ref, _excluded);
15
- const shouldKeepStartDate = value[0] != null && params.utils.isValid(value[0]);
16
- const shouldKeepEndDate = value[1] != null && params.utils.isValid(value[1]);
15
+ const shouldKeepStartDate = params.utils.isValid(value[0]);
16
+ const shouldKeepEndDate = params.utils.isValid(value[1]);
17
17
  if (shouldKeepStartDate && shouldKeepEndDate) {
18
18
  return value;
19
19
  }
@@ -26,8 +26,8 @@ export const rangeValueManager = {
26
26
  hasError: error => error[0] != null || error[1] != null,
27
27
  defaultErrorState: [null, null],
28
28
  getTimezone: (utils, value) => {
29
- const timezoneStart = value[0] == null || !utils.isValid(value[0]) ? null : utils.getTimezone(value[0]);
30
- const timezoneEnd = value[1] == null || !utils.isValid(value[1]) ? null : utils.getTimezone(value[1]);
29
+ const timezoneStart = utils.isValid(value[0]) ? utils.getTimezone(value[0]) : null;
30
+ const timezoneEnd = utils.isValid(value[1]) ? utils.getTimezone(value[1]) : null;
31
31
  if (timezoneStart != null && timezoneEnd != null && timezoneStart !== timezoneEnd) {
32
32
  throw new Error('MUI X: The timezone of the start and the end date should be the same.');
33
33
  }
@@ -39,8 +39,8 @@ export const getRangeFieldValueManager = ({
39
39
  dateSeparator = '–'
40
40
  }) => ({
41
41
  updateReferenceValue: (utils, value, prevReferenceValue) => {
42
- const shouldKeepStartDate = value[0] != null && utils.isValid(value[0]);
43
- const shouldKeepEndDate = value[1] != null && utils.isValid(value[1]);
42
+ const shouldKeepStartDate = utils.isValid(value[0]);
43
+ const shouldKeepEndDate = utils.isValid(value[1]);
44
44
  if (!shouldKeepStartDate && !shouldKeepEndDate) {
45
45
  return prevReferenceValue;
46
46
  }
@@ -111,7 +111,7 @@ export const getRangeFieldValueManager = ({
111
111
  },
112
112
  getNewValuesFromNewActiveDate: newActiveDate => ({
113
113
  value: updateDateInRange(newActiveDate, state.value),
114
- referenceValue: newActiveDate == null || !utils.isValid(newActiveDate) ? state.referenceValue : updateDateInRange(newActiveDate, state.referenceValue)
114
+ referenceValue: !utils.isValid(newActiveDate) ? state.referenceValue : updateDateInRange(newActiveDate, state.referenceValue)
115
115
  })
116
116
  };
117
117
  }
@@ -0,0 +1,3 @@
1
+ export { useDateRangeManager } from "./useDateRangeManager.js";
2
+ export { useTimeRangeManager } from "./useTimeRangeManager.js";
3
+ export { useDateTimeRangeManager } from "./useDateTimeRangeManager.js";
@@ -0,0 +1,33 @@
1
+ 'use client';
2
+
3
+ import _extends from "@babel/runtime/helpers/esm/extends";
4
+ import * as React from 'react';
5
+ import { getDateFieldInternalPropsDefaults } from '@mui/x-date-pickers/internals';
6
+ import { getRangeFieldValueManager, rangeValueManager } from "../internals/utils/valueManagers.js";
7
+ import { validateDateRange } from "../validation/index.js";
8
+ export function useDateRangeManager(parameters = {}) {
9
+ const {
10
+ enableAccessibleFieldDOMStructure = true,
11
+ dateSeparator
12
+ } = parameters;
13
+ return React.useMemo(() => ({
14
+ valueType: 'date',
15
+ validator: validateDateRange,
16
+ internal_valueManager: rangeValueManager,
17
+ internal_fieldValueManager: getRangeFieldValueManager({
18
+ dateSeparator
19
+ }),
20
+ internal_enableAccessibleFieldDOMStructure: enableAccessibleFieldDOMStructure,
21
+ internal_applyDefaultsToFieldInternalProps: ({
22
+ internalProps,
23
+ utils,
24
+ defaultDates
25
+ }) => _extends({}, internalProps, getDateFieldInternalPropsDefaults({
26
+ defaultDates,
27
+ utils,
28
+ internalProps
29
+ })),
30
+ // TODO v8: Add a real aria label before moving the opening logic to the field on range pickers.
31
+ internal_getOpenPickerButtonAriaLabel: () => ''
32
+ }), [enableAccessibleFieldDOMStructure, dateSeparator]);
33
+ }
@@ -0,0 +1,33 @@
1
+ 'use client';
2
+
3
+ import _extends from "@babel/runtime/helpers/esm/extends";
4
+ import * as React from 'react';
5
+ import { getDateTimeFieldInternalPropsDefaults } from '@mui/x-date-pickers/internals';
6
+ import { getRangeFieldValueManager, rangeValueManager } from "../internals/utils/valueManagers.js";
7
+ import { validateDateTimeRange } from "../validation/index.js";
8
+ export function useDateTimeRangeManager(parameters = {}) {
9
+ const {
10
+ enableAccessibleFieldDOMStructure = true,
11
+ dateSeparator
12
+ } = parameters;
13
+ return React.useMemo(() => ({
14
+ valueType: 'date-time',
15
+ validator: validateDateTimeRange,
16
+ internal_valueManager: rangeValueManager,
17
+ internal_fieldValueManager: getRangeFieldValueManager({
18
+ dateSeparator
19
+ }),
20
+ internal_enableAccessibleFieldDOMStructure: enableAccessibleFieldDOMStructure,
21
+ internal_applyDefaultsToFieldInternalProps: ({
22
+ internalProps,
23
+ utils,
24
+ defaultDates
25
+ }) => _extends({}, internalProps, getDateTimeFieldInternalPropsDefaults({
26
+ internalProps,
27
+ utils,
28
+ defaultDates
29
+ })),
30
+ // TODO v8: Add a real aria label before moving the opening logic to the field on range pickers.
31
+ internal_getOpenPickerButtonAriaLabel: () => ''
32
+ }), [enableAccessibleFieldDOMStructure, dateSeparator]);
33
+ }
@@ -0,0 +1,31 @@
1
+ 'use client';
2
+
3
+ import _extends from "@babel/runtime/helpers/esm/extends";
4
+ import * as React from 'react';
5
+ import { getTimeFieldInternalPropsDefaults } from '@mui/x-date-pickers/internals';
6
+ import { getRangeFieldValueManager, rangeValueManager } from "../internals/utils/valueManagers.js";
7
+ import { validateTimeRange } from "../validation/index.js";
8
+ export function useTimeRangeManager(parameters = {}) {
9
+ const {
10
+ enableAccessibleFieldDOMStructure = true,
11
+ dateSeparator
12
+ } = parameters;
13
+ return React.useMemo(() => ({
14
+ valueType: 'time',
15
+ validator: validateTimeRange,
16
+ internal_valueManager: rangeValueManager,
17
+ internal_fieldValueManager: getRangeFieldValueManager({
18
+ dateSeparator
19
+ }),
20
+ internal_enableAccessibleFieldDOMStructure: enableAccessibleFieldDOMStructure,
21
+ internal_applyDefaultsToFieldInternalProps: ({
22
+ internalProps,
23
+ utils
24
+ }) => _extends({}, internalProps, getTimeFieldInternalPropsDefaults({
25
+ utils,
26
+ internalProps
27
+ })),
28
+ // TODO v8: Add a real aria label before moving the opening logic to the field on range pickers.
29
+ internal_getOpenPickerButtonAriaLabel: () => ''
30
+ }), [enableAccessibleFieldDOMStructure, dateSeparator]);
31
+ }
@@ -1,5 +1,4 @@
1
- export * from "./dateRange.js";
2
1
  export * from "./fields.js";
3
2
  export * from "./range.js";
4
3
  export * from "./validation.js";
5
- export * from "./multiInputRangeFieldClasses.js";
4
+ export {};
@@ -9,6 +9,14 @@ import { rangeValueManager } from "../internals/utils/valueManagers.js";
9
9
  * Validation props used by the Date Range Picker, Date Range Field and Date Range Calendar components.
10
10
  */
11
11
 
12
+ /**
13
+ * Validation props as received by the validateDateRange method.
14
+ */
15
+
16
+ /**
17
+ * Name of the props that should be defaulted before being passed to the validateDateRange method.
18
+ */
19
+
12
20
  export const validateDateRange = ({
13
21
  adapter,
14
22
  value,
@@ -9,6 +9,10 @@ import { rangeValueManager } from "../internals/utils/valueManagers.js";
9
9
  * Validation props used by the Date Time Range Picker and Date Time Range Field.
10
10
  */
11
11
 
12
+ /**
13
+ * Validation props as received by the validateDateTimeRange method.
14
+ */
15
+
12
16
  export const validateDateTimeRange = ({
13
17
  adapter,
14
18
  value,
@@ -6,6 +6,14 @@ import { rangeValueManager } from "../internals/utils/valueManagers.js";
6
6
  * Validation props used by the Time Range Picker and Time Range Field.
7
7
  */
8
8
 
9
+ /**
10
+ * Validation props as received by the validateTimeRange method.
11
+ */
12
+
13
+ /**
14
+ * Name of the props that should be defaulted before being passed to the validateTimeRange method.
15
+ */
16
+
9
17
  export const validateTimeRange = ({
10
18
  adapter,
11
19
  value,
@@ -9,4 +9,4 @@ Object.defineProperty(exports, "AdapterDateFnsJalali", {
9
9
  return _AdapterDateFnsJalaliV.AdapterDateFnsJalali;
10
10
  }
11
11
  });
12
- var _AdapterDateFnsJalaliV = require("@mui/x-date-pickers/AdapterDateFnsJalaliV3");
12
+ var _AdapterDateFnsJalaliV = require("@mui/x-date-pickers/AdapterDateFnsJalaliV2");
@@ -9,4 +9,4 @@ Object.defineProperty(exports, "AdapterDateFns", {
9
9
  return _AdapterDateFnsV.AdapterDateFns;
10
10
  }
11
11
  });
12
- var _AdapterDateFnsV = require("@mui/x-date-pickers/AdapterDateFnsV3");
12
+ var _AdapterDateFnsV = require("@mui/x-date-pickers/AdapterDateFnsV2");
@@ -32,8 +32,9 @@ var _useDragRange2 = require("./useDragRange");
32
32
  var _useRangePosition = require("../internals/hooks/useRangePosition");
33
33
  var _dimensions = require("../internals/constants/dimensions");
34
34
  var _PickersRangeCalendarHeader = require("../PickersRangeCalendarHeader");
35
+ var _useNullablePickerRangePositionContext = require("../internals/hooks/useNullablePickerRangePositionContext");
35
36
  var _jsxRuntime = require("react/jsx-runtime");
36
- const _excluded = ["value", "defaultValue", "referenceDate", "onChange", "className", "classes", "disableFuture", "disablePast", "minDate", "maxDate", "shouldDisableDate", "reduceAnimations", "onMonthChange", "rangePosition", "defaultRangePosition", "onRangePositionChange", "calendars", "currentMonthCalendarPosition", "slots", "slotProps", "loading", "renderLoading", "disableHighlightToday", "readOnly", "disabled", "showDaysOutsideCurrentMonth", "dayOfWeekFormatter", "disableAutoMonthSwitching", "autoFocus", "fixedWeekNumber", "disableDragEditing", "displayWeekNumber", "timezone", "availableRangePositions", "views", "view", "openTo", "onViewChange"],
37
+ const _excluded = ["value", "defaultValue", "referenceDate", "onChange", "className", "classes", "disableFuture", "disablePast", "minDate", "maxDate", "shouldDisableDate", "reduceAnimations", "onMonthChange", "rangePosition", "defaultRangePosition", "onRangePositionChange", "calendars", "currentMonthCalendarPosition", "slots", "slotProps", "loading", "renderLoading", "disableHighlightToday", "focusedView", "onFocusedViewChange", "readOnly", "disabled", "showDaysOutsideCurrentMonth", "dayOfWeekFormatter", "disableAutoMonthSwitching", "autoFocus", "fixedWeekNumber", "disableDragEditing", "displayWeekNumber", "timezone", "availableRangePositions", "views", "view", "openTo", "onViewChange"],
37
38
  _excluded2 = ["isDragging", "rangeDragDay", "draggingDatePosition"];
38
39
  const releaseInfo = (0, _releaseInfo.getReleaseInfo)();
39
40
  const DateRangeCalendarRoot = (0, _styles.styled)('div', {
@@ -82,16 +83,16 @@ const DayCalendarForRange = InnerDayCalendarForRange;
82
83
  function useDateRangeCalendarDefaultizedProps(props, name) {
83
84
  const utils = (0, _internals.useUtils)();
84
85
  const defaultDates = (0, _internals.useDefaultDates)();
85
- const defaultReduceAnimations = (0, _internals.useDefaultReduceAnimations)();
86
86
  const themeProps = (0, _styles.useThemeProps)({
87
87
  props,
88
88
  name
89
89
  });
90
+ const reduceAnimations = (0, _internals.useReduceAnimations)(themeProps.reduceAnimations);
90
91
  return (0, _extends2.default)({}, themeProps, {
91
92
  renderLoading: themeProps.renderLoading ?? (() => /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
92
93
  children: "..."
93
94
  })),
94
- reduceAnimations: themeProps.reduceAnimations ?? defaultReduceAnimations,
95
+ reduceAnimations,
95
96
  loading: props.loading ?? false,
96
97
  disablePast: props.disablePast ?? false,
97
98
  disableFuture: props.disableFuture ?? false,
@@ -142,8 +143,8 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
142
143
  reduceAnimations,
143
144
  onMonthChange,
144
145
  rangePosition: rangePositionProp,
145
- defaultRangePosition: inDefaultRangePosition,
146
- onRangePositionChange: inOnRangePositionChange,
146
+ defaultRangePosition: defaultRangePositionProp,
147
+ onRangePositionChange: onRangePositionChangeProp,
147
148
  calendars,
148
149
  currentMonthCalendarPosition = 1,
149
150
  slots,
@@ -151,6 +152,8 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
151
152
  loading,
152
153
  renderLoading,
153
154
  disableHighlightToday,
155
+ focusedView: focusedViewProp,
156
+ onFocusedViewChange,
154
157
  readOnly,
155
158
  disabled,
156
159
  showDaysOutsideCurrentMonth,
@@ -168,6 +171,7 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
168
171
  onViewChange
169
172
  } = props,
170
173
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
174
+ const rangePositionContext = (0, _useNullablePickerRangePositionContext.useNullablePickerRangePositionContext)();
171
175
  const {
172
176
  value,
173
177
  handleValueChange,
@@ -182,30 +186,33 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
182
186
  valueManager: _valueManagers.rangeValueManager
183
187
  });
184
188
  const {
185
- setValueAndGoToNextView,
186
- view
189
+ view,
190
+ setFocusedView,
191
+ focusedView,
192
+ setValueAndGoToNextView
187
193
  } = (0, _internals.useViews)({
188
194
  view: inView,
189
195
  views,
190
196
  openTo,
191
197
  onChange: handleValueChange,
192
198
  onViewChange,
193
- autoFocus
199
+ autoFocus,
200
+ focusedView: focusedViewProp,
201
+ onFocusedViewChange
194
202
  });
195
203
  const utils = (0, _internals.useUtils)();
196
- const now = (0, _internals.useNow)(timezone);
197
204
  const id = (0, _useId.default)();
198
205
  const {
199
206
  rangePosition,
200
- onRangePositionChange
207
+ setRangePosition
201
208
  } = (0, _useRangePosition.useRangePosition)({
202
- rangePosition: rangePositionProp,
203
- defaultRangePosition: inDefaultRangePosition,
204
- onRangePositionChange: inOnRangePositionChange
209
+ rangePosition: rangePositionProp ?? rangePositionContext?.rangePosition,
210
+ defaultRangePosition: defaultRangePositionProp,
211
+ onRangePositionChange: onRangePositionChangeProp ?? rangePositionContext?.setRangePosition
205
212
  });
206
213
  const handleDatePositionChange = (0, _useEventCallback.default)(position => {
207
214
  if (rangePosition !== position) {
208
- onRangePositionChange(position);
215
+ setRangePosition(position);
209
216
  }
210
217
  });
211
218
  const handleSelectedDayChange = (0, _useEventCallback.default)((newDate, selectionState, allowRangeFlip = false) => {
@@ -223,7 +230,7 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
223
230
  });
224
231
  const isNextSectionAvailable = availableRangePositions.includes(nextSelection);
225
232
  if (isNextSectionAvailable) {
226
- onRangePositionChange(nextSelection);
233
+ setRangePosition(nextSelection);
227
234
  }
228
235
  const isFullRangeSelected = rangePosition === 'end' && (0, _dateUtils.isRangeValid)(utils, newRange);
229
236
  setValueAndGoToNextView(newRange, isFullRangeSelected || !isNextSectionAvailable ? 'finish' : 'partial', view);
@@ -235,7 +242,7 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
235
242
 
236
243
  // Range going for the start of the start day to the end of the end day.
237
244
  // This makes sure that `isWithinRange` works with any time in the start and end day.
238
- const valueDayRange = React.useMemo(() => [value[0] == null || !utils.isValid(value[0]) ? value[0] : utils.startOfDay(value[0]), value[1] == null || !utils.isValid(value[1]) ? value[1] : utils.endOfDay(value[1])], [value, utils]);
245
+ const valueDayRange = React.useMemo(() => [!utils.isValid(value[0]) ? value[0] : utils.startOfDay(value[0]), !utils.isValid(value[1]) ? value[1] : utils.endOfDay(value[1])], [value, utils]);
239
246
  const _useDragRange = (0, _useDragRange2.useDragRange)({
240
247
  disableDragEditing: shouldDisableDragEditing,
241
248
  onDrop: handleDrop,
@@ -278,22 +285,39 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
278
285
  }, [shouldDisableDate, rangePosition, draggingDatePosition]);
279
286
  const {
280
287
  calendarState,
281
- changeFocusedDay,
282
- changeMonth,
283
- handleChangeMonth,
288
+ setVisibleDate,
284
289
  onMonthSwitchingAnimationEnd
285
290
  } = (0, _internals.useCalendarState)({
286
291
  value: value[0] || value[1],
287
292
  referenceDate,
288
293
  disableFuture,
289
294
  disablePast,
290
- disableSwitchToMonthOnDayFocus: true,
291
295
  maxDate,
292
296
  minDate,
293
297
  onMonthChange,
294
298
  reduceAnimations,
295
299
  shouldDisableDate: wrappedShouldDisableDate,
296
- timezone
300
+ timezone,
301
+ getCurrentMonthFromVisibleDate: (visibleDate, prevMonth) => {
302
+ const firstVisibleMonth = utils.addMonths(prevMonth, 1 - currentMonthCalendarPosition);
303
+ const lastVisibleMonth = utils.endOfMonth(utils.addMonths(firstVisibleMonth, calendars - 1));
304
+
305
+ // The new focused day is inside the visible calendars,
306
+ // Do not change the current month
307
+ if (utils.isWithinRange(visibleDate, [firstVisibleMonth, lastVisibleMonth])) {
308
+ return prevMonth;
309
+ }
310
+
311
+ // The new focused day is after the last visible month,
312
+ // Move the current month so that the new focused day is inside the first visible month
313
+ if (utils.isAfter(visibleDate, lastVisibleMonth)) {
314
+ return utils.startOfMonth(utils.addMonths(visibleDate, currentMonthCalendarPosition - 1));
315
+ }
316
+
317
+ // The new focused day is before the first visible month,
318
+ // Move the current month so that the new focused day is inside the last visible month
319
+ return utils.startOfMonth(utils.addMonths(visibleDate, currentMonthCalendarPosition - calendars));
320
+ }
297
321
  });
298
322
  const CalendarHeader = slots?.calendarHeader ?? _PickersRangeCalendarHeader.PickersRangeCalendarHeader;
299
323
  const calendarHeaderProps = (0, _useSlotProps.default)({
@@ -304,9 +328,9 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
304
328
  views: ['day'],
305
329
  view: 'day',
306
330
  currentMonth: calendarState.currentMonth,
307
- onMonthChange: (newMonth, direction) => handleChangeMonth({
308
- newMonth,
309
- direction
331
+ onMonthChange: month => setVisibleDate({
332
+ target: month,
333
+ reason: 'header-navigation'
310
334
  }),
311
335
  minDate,
312
336
  maxDate,
@@ -320,10 +344,12 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
320
344
  },
321
345
  ownerState
322
346
  });
347
+
348
+ // TODO: Move this logic inside the render instead of using an effect
323
349
  const prevValue = React.useRef(null);
324
350
  React.useEffect(() => {
325
351
  const date = rangePosition === 'start' ? value[0] : value[1];
326
- if (!date || !utils.isValid(date)) {
352
+ if (!utils.isValid(date)) {
327
353
  return;
328
354
  }
329
355
  const prevDate = rangePosition === 'start' ? prevValue.current?.[0] : prevValue.current?.[1];
@@ -341,7 +367,10 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
341
367
  const newMonth = rangePosition === 'start' ? date :
342
368
  // If need to focus end, scroll to the state when "end" is displaying in the last calendar
343
369
  utils.addMonths(date, -displayingMonthRange);
344
- changeMonth(newMonth);
370
+ setVisibleDate({
371
+ target: newMonth,
372
+ reason: 'controlled-value-change'
373
+ });
345
374
  }
346
375
  }, [rangePosition, value]); // eslint-disable-line
347
376
 
@@ -424,25 +453,19 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
424
453
  length: calendars
425
454
  }).map((_, index) => utils.addMonths(firstMonth, index));
426
455
  }, [utils, calendarState.currentMonth, calendars, currentMonthCalendarPosition]);
427
- const focusedMonth = React.useMemo(() => {
428
- if (!autoFocus) {
429
- return null;
430
- }
431
-
432
- // The focus priority of the "day" view is as follows:
433
- // 1. Month of the `start` date
434
- // 2. Month of the `end` date
435
- // 3. Month of the current date
436
- // 4. First visible month
437
-
438
- if (value[0] != null) {
439
- return visibleMonths.find(month => utils.isSameMonth(month, value[0]));
456
+ const hasFocus = focusedView !== null;
457
+ const prevOpenViewRef = React.useRef(view);
458
+ React.useEffect(() => {
459
+ // If the view change and the focus was on the previous view
460
+ // Then we update the focus.
461
+ if (prevOpenViewRef.current === view) {
462
+ return;
440
463
  }
441
- if (value[1] != null) {
442
- return visibleMonths.find(month => utils.isSameMonth(month, value[1]));
464
+ if (focusedView === prevOpenViewRef.current) {
465
+ setFocusedView(view, true);
443
466
  }
444
- return visibleMonths.find(month => utils.isSameMonth(month, now)) ?? visibleMonths[0];
445
- }, [utils, value, visibleMonths, autoFocus, now]);
467
+ prevOpenViewRef.current = view;
468
+ }, [focusedView, setFocusedView, view]);
446
469
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(DateRangeCalendarRoot, (0, _extends2.default)({
447
470
  ref: ref,
448
471
  className: (0, _clsx.default)(classes.root, className),
@@ -464,20 +487,24 @@ const DateRangeCalendar = exports.DateRangeCalendar = /*#__PURE__*/React.forward
464
487
  className: classes.dayCalendar
465
488
  }, calendarState, baseDateValidationProps, commonViewProps, {
466
489
  onMonthSwitchingAnimationEnd: onMonthSwitchingAnimationEnd,
467
- onFocusedDayChange: changeFocusedDay,
490
+ onFocusedDayChange: focusedDate => setVisibleDate({
491
+ target: focusedDate,
492
+ reason: 'cell-interaction'
493
+ }),
468
494
  reduceAnimations: reduceAnimations,
469
495
  selectedDays: value,
470
496
  onSelectedDaysChange: handleSelectedDayChange,
471
497
  currentMonth: month,
472
498
  TransitionProps: CalendarTransitionProps,
473
499
  shouldDisableDate: wrappedShouldDisableDate,
500
+ hasFocus: hasFocus,
501
+ onFocusedViewChange: isViewFocused => setFocusedView('day', isViewFocused),
474
502
  showDaysOutsideCurrentMonth: calendars === 1 && showDaysOutsideCurrentMonth,
475
503
  dayOfWeekFormatter: dayOfWeekFormatter,
476
504
  loading: loading,
477
505
  renderLoading: renderLoading,
478
506
  slots: slotsForDayCalendar,
479
507
  slotProps: slotPropsForDayCalendar,
480
- autoFocus: month === focusedMonth,
481
508
  fixedWeekNumber: fixedWeekNumber,
482
509
  displayWeekNumber: displayWeekNumber,
483
510
  timezone: timezone,
@@ -70,7 +70,7 @@ process.env.NODE_ENV !== "production" ? DateRangePicker.propTypes = {
70
70
  calendars: _propTypes.default.oneOf([1, 2, 3]),
71
71
  className: _propTypes.default.string,
72
72
  /**
73
- * If `true`, the popover or modal will close after submitting the full date.
73
+ * If `true`, the Picker will close after submitting the full date.
74
74
  * @default `true` for desktop, `false` for mobile (based on the chosen wrapper and `desktopModeMediaQuery` prop).
75
75
  */
76
76
  closeOnSelect: _propTypes.default.bool,
@@ -165,12 +165,10 @@ process.env.NODE_ENV !== "production" ? DateRangePicker.propTypes = {
165
165
  formatDensity: _propTypes.default.oneOf(['dense', 'spacious']),
166
166
  /**
167
167
  * Pass a ref to the `input` element.
168
- * Ignored if the field has several inputs.
169
168
  */
170
169
  inputRef: _utils.refType,
171
170
  /**
172
171
  * The label content.
173
- * Ignored if the field has several inputs.
174
172
  */
175
173
  label: _propTypes.default.node,
176
174
  /**
@@ -196,7 +194,6 @@ process.env.NODE_ENV !== "production" ? DateRangePicker.propTypes = {
196
194
  minDate: _propTypes.default.object,
197
195
  /**
198
196
  * Name attribute used by the `input` element in the Field.
199
- * Ignored if the field has several inputs.
200
197
  */
201
198
  name: _propTypes.default.string,
202
199
  /**
@@ -18,12 +18,10 @@ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"
18
18
  var _internals = require("@mui/x-date-pickers/internals");
19
19
  var _hooks = require("@mui/x-date-pickers/hooks");
20
20
  var _dateRangePickerToolbarClasses = require("./dateRangePickerToolbarClasses");
21
+ var _hooks2 = require("../hooks");
21
22
  var _jsxRuntime = require("react/jsx-runtime");
22
- const _excluded = ["value", "rangePosition", "onRangePositionChange", "toolbarFormat", "className", "onViewChange", "view", "views"];
23
- const useUtilityClasses = ownerState => {
24
- const {
25
- classes
26
- } = ownerState;
23
+ const _excluded = ["toolbarFormat", "className", "classes"];
24
+ const useUtilityClasses = classes => {
27
25
  const slots = {
28
26
  root: ['root'],
29
27
  container: ['container']
@@ -59,39 +57,50 @@ const DateRangePickerToolbar = exports.DateRangePickerToolbar = /*#__PURE__*/Rea
59
57
  name: 'MuiDateRangePickerToolbar'
60
58
  });
61
59
  const {
62
- value: [start, end],
63
- rangePosition,
64
- onRangePositionChange,
65
- toolbarFormat,
66
- className
60
+ toolbarFormat: toolbarFormatProp,
61
+ className,
62
+ classes: classesProp
67
63
  } = props,
68
64
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
65
+ const {
66
+ value
67
+ } = (0, _hooks.usePickerContext)();
69
68
  const translations = (0, _hooks.usePickerTranslations)();
70
- const startDateValue = start ? utils.formatByString(start, toolbarFormat || utils.formats.shortDate) : translations.start;
71
- const endDateValue = end ? utils.formatByString(end, toolbarFormat || utils.formats.shortDate) : translations.end;
72
- const ownerState = props;
73
- const classes = useUtilityClasses(ownerState);
69
+ const ownerState = (0, _internals.useToolbarOwnerState)();
70
+ const {
71
+ rangePosition,
72
+ setRangePosition
73
+ } = (0, _hooks2.usePickerRangePositionContext)();
74
+ const classes = useUtilityClasses(classesProp);
75
+
76
+ // This can't be a default value when spreading because it breaks the API generation.
77
+ const toolbarFormat = toolbarFormatProp ?? utils.formats.shortDate;
78
+ const formatDate = (date, fallback) => {
79
+ if (!utils.isValid(date)) {
80
+ return fallback;
81
+ }
82
+ return utils.formatByString(date, toolbarFormat);
83
+ };
74
84
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(DateRangePickerToolbarRoot, (0, _extends2.default)({}, other, {
75
85
  toolbarTitle: translations.dateRangePickerToolbarTitle,
76
- isLandscape: false,
77
86
  className: (0, _clsx.default)(classes.root, className),
78
87
  ownerState: ownerState,
79
88
  ref: ref,
80
89
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(DateRangePickerToolbarContainer, {
81
90
  className: classes.container,
82
91
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.PickersToolbarButton, {
83
- variant: start !== null ? 'h5' : 'h6',
84
- value: startDateValue,
92
+ variant: value[0] == null ? 'h6' : 'h5',
93
+ value: formatDate(value[0], translations.start),
85
94
  selected: rangePosition === 'start',
86
- onClick: () => onRangePositionChange('start')
95
+ onClick: () => setRangePosition('start')
87
96
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Typography.default, {
88
97
  variant: "h5",
89
98
  children: ["\xA0", '–', "\xA0"]
90
99
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.PickersToolbarButton, {
91
- variant: end !== null ? 'h5' : 'h6',
92
- value: endDateValue,
100
+ variant: value[1] == null ? 'h6' : 'h5',
101
+ value: formatDate(value[1], translations.end),
93
102
  selected: rangePosition === 'end',
94
- onClick: () => onRangePositionChange('end')
103
+ onClick: () => setRangePosition('end')
95
104
  })]
96
105
  })
97
106
  }));
@@ -111,14 +120,6 @@ process.env.NODE_ENV !== "production" ? DateRangePickerToolbar.propTypes = {
111
120
  * @default `true` for Desktop, `false` for Mobile.
112
121
  */
113
122
  hidden: _propTypes.default.bool,
114
- onRangePositionChange: _propTypes.default.func.isRequired,
115
- /**
116
- * Callback called when a toolbar is clicked
117
- * @template TView
118
- * @param {TView} view The view to open
119
- */
120
- onViewChange: _propTypes.default.func.isRequired,
121
- rangePosition: _propTypes.default.oneOf(['end', 'start']).isRequired,
122
123
  /**
123
124
  * The system prop that allows defining system overrides as well as additional CSS styles.
124
125
  */
@@ -132,14 +133,5 @@ process.env.NODE_ENV !== "production" ? DateRangePickerToolbar.propTypes = {
132
133
  * Toolbar value placeholder—it is displayed when the value is empty.
133
134
  * @default "––"
134
135
  */
135
- toolbarPlaceholder: _propTypes.default.node,
136
- value: _propTypes.default.arrayOf(_propTypes.default.object).isRequired,
137
- /**
138
- * Currently visible picker view.
139
- */
140
- view: _propTypes.default.oneOf(['day']).isRequired,
141
- /**
142
- * Available views.
143
- */
144
- views: _propTypes.default.arrayOf(_propTypes.default.oneOf(['day'])).isRequired
136
+ toolbarPlaceholder: _propTypes.default.node
145
137
  } : void 0;