@12-apps/ui 6.97.1 → 6.98.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 (604) hide show
  1. package/components-catalog.md +1 -1
  2. package/dist/_internal/components/data-display/AlertDialog/AlertDialog.js +3 -3
  3. package/dist/_internal/components/data-display/AlertDialog/AlertDialog.parts.js +2 -2
  4. package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +5 -5
  5. package/dist/_internal/components/data-display/Avatar/Avatar.js +5 -5
  6. package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
  7. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +8 -8
  8. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +8 -8
  9. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +4 -4
  10. package/dist/_internal/components/data-display/Carousel/Carousel.js +6 -6
  11. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +3 -3
  12. package/dist/_internal/components/data-display/Chart/Chart.js +3 -3
  13. package/dist/_internal/components/data-display/Chart/SpecChart.js +7 -7
  14. package/dist/_internal/components/data-display/Chart/chart-renderers.js +2 -2
  15. package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
  16. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
  17. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +51 -51
  18. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +66 -66
  19. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +3 -3
  20. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +9 -9
  21. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +3 -3
  22. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +2 -2
  23. package/dist/_internal/components/data-display/DataViews/base-list-card-layout.js +2 -2
  24. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +2 -2
  25. package/dist/_internal/components/data-display/DataViews/base-list-card.js +4 -4
  26. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +11 -11
  27. package/dist/_internal/components/data-display/DataViews/data-views-day-input.js +1 -1
  28. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +1 -1
  29. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +32 -32
  30. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +6 -6
  31. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +48 -48
  32. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +31 -31
  33. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +29 -29
  34. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +30 -30
  35. package/dist/_internal/components/data-display/DataViews/data-views-preset-chips.js +3 -3
  36. package/dist/_internal/components/data-display/DataViews/data-views-range-bounds.js +15 -15
  37. package/dist/_internal/components/data-display/DataViews/data-views-range-calendar.js +12 -12
  38. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +18 -18
  39. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +10 -10
  40. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +16 -16
  41. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +9 -9
  42. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +2 -2
  43. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +2 -2
  44. package/dist/_internal/components/data-display/DayRuler/DayRuler.js +7 -7
  45. package/dist/_internal/components/data-display/DayRuler/DayRuler.parts.js +2 -2
  46. package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -2
  47. package/dist/_internal/components/data-display/ErrorState/ErrorState.js +2 -2
  48. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +10 -10
  49. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +9 -9
  50. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +2 -2
  51. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +12 -12
  52. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +3 -3
  53. package/dist/_internal/components/data-display/LazyImage/LazyImage.js +2 -2
  54. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +3 -3
  55. package/dist/_internal/components/data-display/LoadingState/LoadingState.js +2 -2
  56. package/dist/_internal/components/data-display/MapPreview/MapControlBar.js +4 -4
  57. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +6 -6
  58. package/dist/_internal/components/data-display/MapPreview/MapMarkers.js +4 -4
  59. package/dist/_internal/components/data-display/MapPreview/MapPreview.helpers.js +3 -3
  60. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +8 -8
  61. package/dist/_internal/components/data-display/RegionMap/RegionMap.js +5 -5
  62. package/dist/_internal/components/data-display/RegionMap/RegionMapDrawing.js +2 -2
  63. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.js +6 -6
  64. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.labels.js +2 -2
  65. package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +4 -4
  66. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +3 -3
  67. package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
  68. package/dist/_internal/components/data-display/Sheet/Sheet.js +6 -6
  69. package/dist/_internal/components/data-display/Sheet/Sheet.parts.js +2 -2
  70. package/dist/_internal/components/data-display/Stepper/Stepper.js +2 -2
  71. package/dist/_internal/components/data-display/Table/Table.js +4 -4
  72. package/dist/_internal/components/data-display/Table/TableParts.hooks.js +2 -2
  73. package/dist/_internal/components/data-display/Table/TableParts.js +2 -2
  74. package/dist/_internal/components/data-display/Timeline/Timeline.js +2 -2
  75. package/dist/_internal/components/data-display/index.js +86 -86
  76. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +5 -5
  77. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.parts.js +4 -4
  78. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +6 -6
  79. package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +5 -5
  80. package/dist/_internal/components/feedback/Dialog/Dialog.js +2 -2
  81. package/dist/_internal/components/feedback/Modal/Modal.js +2 -2
  82. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.frame.js +3 -3
  83. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +4 -4
  84. package/dist/_internal/components/feedback/Sonner/Sonner.js +2 -2
  85. package/dist/_internal/components/feedback/StackedModal/StackedModal.js +4 -4
  86. package/dist/_internal/components/feedback/StackedModal/StackedModal.parts.js +2 -2
  87. package/dist/_internal/components/feedback/Toast/Toast.js +2 -2
  88. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +2 -2
  89. package/dist/_internal/components/feedback/UsableModal/UsableModal.js +1 -1
  90. package/dist/_internal/components/feedback/UsableModal/UsableModal.modal.js +4 -4
  91. package/dist/_internal/components/feedback/UsableModal/UsableModal.sheet.js +6 -6
  92. package/dist/_internal/components/feedback/index.js +21 -21
  93. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +4 -4
  94. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +7 -7
  95. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +2 -2
  96. package/dist/_internal/components/form/Calendar/Calendar.band.js +1 -1
  97. package/dist/_internal/components/form/Calendar/Calendar.helpers.js +1 -1
  98. package/dist/_internal/components/form/Calendar/Calendar.hooks.js +1 -1
  99. package/dist/_internal/components/form/Calendar/Calendar.js +10 -10
  100. package/dist/_internal/components/form/Calendar/CalendarDay.js +2 -2
  101. package/dist/_internal/components/form/Calendar/CalendarDayCell.js +3 -3
  102. package/dist/_internal/components/form/Calendar/CalendarMonth.js +10 -6
  103. package/dist/_internal/components/form/Calendar/CalendarSelectorsMonth.js +6 -6
  104. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +2 -2
  105. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +4 -4
  106. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +3 -3
  107. package/dist/_internal/components/form/Command/Command.hooks.js +2 -2
  108. package/dist/_internal/components/form/Command/Command.js +4 -4
  109. package/dist/_internal/components/form/Command/Command.parts.js +2 -2
  110. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.frame.js +22 -0
  111. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.frame.js.map +1 -0
  112. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +4 -4
  113. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +20 -15
  114. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.layout.js +13 -0
  115. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.layout.js.map +1 -0
  116. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +3 -3
  117. package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +4 -4
  118. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.dom.js +2 -2
  119. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.format.js +3 -3
  120. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.hooks.js +4 -4
  121. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +5 -5
  122. package/dist/_internal/components/form/index.js +37 -34
  123. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +5 -5
  124. package/dist/_internal/components/form/total-form/Fields/index.js +6 -6
  125. package/dist/_internal/components/form/total-form/FormErrorSnackbar.js +3 -3
  126. package/dist/_internal/components/index.js +164 -162
  127. package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +2 -2
  128. package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +3 -3
  129. package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +2 -2
  130. package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +2 -2
  131. package/dist/_internal/components/layout/Dashboard/Dashboard.js +2 -2
  132. package/dist/_internal/components/layout/Drawer/Drawer.js +2 -2
  133. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +2 -2
  134. package/dist/_internal/components/layout/TableFilter/TableFilter.js +2 -2
  135. package/dist/_internal/components/layout/index.js +9 -9
  136. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +8 -8
  137. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +2 -2
  138. package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.js +2 -2
  139. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +3 -3
  140. package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +2 -2
  141. package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +4 -4
  142. package/dist/_internal/components/navigation/SectionNav/SectionNav.js +5 -5
  143. package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +3 -3
  144. package/dist/_internal/components/navigation/Tabs/Tabs.js +1 -1
  145. package/dist/_internal/components/navigation/index.js +18 -18
  146. package/dist/_internal/components/typography/Code/Code.js +2 -2
  147. package/dist/_internal/components/typography/index.js +2 -2
  148. package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.js +2 -2
  149. package/dist/_internal/components/utility/InfiniteScroll/InfiniteScroll.js +3 -3
  150. package/dist/_internal/components/utility/InfiniteScroll/InfiniteScroll.parts.js +2 -2
  151. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +2 -2
  152. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +5 -5
  153. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +3 -3
  154. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +4 -4
  155. package/dist/_internal/components/utility/index.js +8 -8
  156. package/dist/_internal/en-US.data-display.js +2 -2
  157. package/dist/_internal/en-US.labels.js +1 -1
  158. package/dist/_internal/pt-BR.data-display.js +2 -2
  159. package/dist/_internal/pt-BR.labels.js +1 -1
  160. package/dist/_internal/social-login-button/social-login-button.js +2 -2
  161. package/dist/_internal/user-avatar/user-avatar.js +6 -6
  162. package/dist/charts.js +17 -17
  163. package/dist/{chunk-UBVKMM3V.js → chunk-2A5GHOL3.js} +2 -2
  164. package/dist/{chunk-YGLAGY74.js → chunk-332KWE5H.js} +2 -2
  165. package/dist/{chunk-HNEZWVDR.js → chunk-364NT46L.js} +3 -3
  166. package/dist/{chunk-RLTGD5WJ.js → chunk-3AKQHYTM.js} +4 -4
  167. package/dist/{chunk-5I75WRXT.js → chunk-3CXRHRGE.js} +7 -7
  168. package/dist/{chunk-G6NMSBSQ.js → chunk-3LD42RNV.js} +2 -2
  169. package/dist/{chunk-3BMG6VMB.js → chunk-3N2HWNKT.js} +2 -2
  170. package/dist/{chunk-MSJP2AEN.js → chunk-3N3W4TID.js} +2 -2
  171. package/dist/{chunk-H2UUMZQR.js → chunk-3PWDVJWD.js} +2 -1
  172. package/dist/chunk-3PWDVJWD.js.map +1 -0
  173. package/dist/{chunk-YNVTUQ5B.js → chunk-3V7OTBUZ.js} +2 -2
  174. package/dist/{chunk-LZNUBQ5I.js → chunk-4A454JZN.js} +2 -2
  175. package/dist/{chunk-TPMT3J32.js → chunk-4I2SDWSF.js} +2 -1
  176. package/dist/chunk-4I2SDWSF.js.map +1 -0
  177. package/dist/{chunk-SW7JCF4Z.js → chunk-4P63RSSY.js} +2 -2
  178. package/dist/{chunk-7QKFMMWK.js → chunk-4W4C4Q46.js} +2 -2
  179. package/dist/{chunk-B32XH7NK.js → chunk-4WVUX7IU.js} +3 -3
  180. package/dist/{chunk-Z6QFIRD7.js → chunk-4X2TOMK6.js} +7 -7
  181. package/dist/{chunk-MYTV353T.js → chunk-4Y3QLISA.js} +2 -2
  182. package/dist/{chunk-IMYKJTVX.js → chunk-5J6LN2O7.js} +2 -2
  183. package/dist/{chunk-QWI7IPYJ.js → chunk-5V7IZBRY.js} +4 -4
  184. package/dist/{chunk-ZBUMGMWP.js → chunk-64LNNC54.js} +4 -4
  185. package/dist/{chunk-T77OVQEO.js → chunk-6D7CASMK.js} +2 -2
  186. package/dist/{chunk-YVDNCV2D.js → chunk-6RYSSNOO.js} +3 -3
  187. package/dist/{chunk-CPQJFHNZ.js → chunk-74IH3ZGD.js} +2 -2
  188. package/dist/{chunk-UQ5GJPVZ.js → chunk-76GAXLNC.js} +3 -3
  189. package/dist/{chunk-X4J576GR.js → chunk-7LFST3PW.js} +2 -2
  190. package/dist/{chunk-XCUHGPPZ.js → chunk-7MLT66DE.js} +2 -2
  191. package/dist/{chunk-EOIRU62W.js → chunk-7P544IWT.js} +3 -3
  192. package/dist/{chunk-XTYBJAZG.js → chunk-7TENMQNQ.js} +7 -7
  193. package/dist/{chunk-EB25XITI.js → chunk-A27J4CIZ.js} +10 -10
  194. package/dist/{chunk-2KSFBZ2H.js → chunk-ABZJNKR6.js} +2 -2
  195. package/dist/{chunk-6LOWZCH7.js → chunk-AHXQN4VL.js} +2 -2
  196. package/dist/{chunk-Y7BOP7VZ.js → chunk-AP7GEUJS.js} +2 -2
  197. package/dist/{chunk-U2SAW6DH.js → chunk-B4OZU7J4.js} +7 -7
  198. package/dist/{chunk-DDGYTY4E.js → chunk-BIHZXB5P.js} +4 -4
  199. package/dist/{chunk-4QGMUHAU.js → chunk-BWNZVMBT.js} +2 -2
  200. package/dist/{chunk-CY4XIZNW.js → chunk-CAH5XNHT.js} +2 -2
  201. package/dist/{chunk-KILA7LCC.js → chunk-CFDWKQZT.js} +4 -4
  202. package/dist/{chunk-EWFBDAB7.js → chunk-CKGRSCRT.js} +2 -2
  203. package/dist/{chunk-YOLLISEY.js → chunk-CRD2WCU7.js} +9 -9
  204. package/dist/{chunk-L5KPBMMF.js → chunk-CXL3TT3K.js} +2 -2
  205. package/dist/{chunk-KOGJBAFI.js → chunk-D3KLIC5N.js} +2 -2
  206. package/dist/{chunk-2SBQ47RI.js → chunk-D4JL5725.js} +3 -3
  207. package/dist/{chunk-NI3MC742.js → chunk-DBJLYURK.js} +2 -2
  208. package/dist/{chunk-75GAQL2Q.js → chunk-DKPELKGL.js} +12 -12
  209. package/dist/{chunk-NGXL4R54.js → chunk-E4MJA52O.js} +4 -4
  210. package/dist/{chunk-QSOCOXVL.js → chunk-EASEJDBQ.js} +13 -8
  211. package/dist/chunk-EASEJDBQ.js.map +1 -0
  212. package/dist/{chunk-5HXVXW22.js → chunk-EGBQR5GH.js} +5 -5
  213. package/dist/{chunk-FTYOCFTV.js → chunk-EGYJUJMR.js} +2 -2
  214. package/dist/{chunk-7XSCEHGA.js → chunk-EOQ6EKTS.js} +7 -7
  215. package/dist/{chunk-6AKDAQSS.js → chunk-ERAMSYPR.js} +2 -2
  216. package/dist/{chunk-WYRH6OSN.js → chunk-F5EH5BJN.js} +2 -2
  217. package/dist/{chunk-HBRBIPNF.js → chunk-F7JRQ2EI.js} +6 -6
  218. package/dist/chunk-F7JRQ2EI.js.map +1 -0
  219. package/dist/{chunk-QCYQL3ST.js → chunk-FJLPVPRG.js} +2 -2
  220. package/dist/{chunk-MAHY7PK3.js → chunk-FQMLTCXT.js} +4 -4
  221. package/dist/{chunk-TMINUTQQ.js → chunk-FRQGZIYU.js} +2 -2
  222. package/dist/{chunk-LV6AD6XC.js → chunk-FT3LJZWZ.js} +2 -2
  223. package/dist/{chunk-IS3L67TF.js → chunk-FW5GTAUY.js} +6 -6
  224. package/dist/{chunk-VMTOLAZ5.js → chunk-FZZMNKVF.js} +5 -5
  225. package/dist/{chunk-FGZIEZEP.js → chunk-G6TKWNF2.js} +4 -4
  226. package/dist/{chunk-I6IFUFLW.js → chunk-G7MHDZTL.js} +2 -2
  227. package/dist/{chunk-KES3HNSU.js → chunk-GB2DQOZ7.js} +2 -2
  228. package/dist/{chunk-W3IFJA35.js → chunk-GFYDOH7D.js} +3 -3
  229. package/dist/{chunk-M2M4IDFU.js → chunk-GXYOBTOY.js} +2 -2
  230. package/dist/{chunk-OLHAUGVQ.js → chunk-GZQQSTKR.js} +2 -2
  231. package/dist/{chunk-N2J24TJ3.js → chunk-HAWOS4SF.js} +2 -2
  232. package/dist/{chunk-S2VZUBM7.js → chunk-HCTHY66U.js} +6 -6
  233. package/dist/{chunk-ABVIMFSD.js → chunk-HG52QQ2L.js} +2 -2
  234. package/dist/{chunk-AMLHEKSV.js → chunk-HI7JPDD6.js} +5 -5
  235. package/dist/{chunk-F5OERPU4.js → chunk-HOWAMSUY.js} +6 -6
  236. package/dist/{chunk-3TZUZXY5.js → chunk-HTXYBKLK.js} +2 -2
  237. package/dist/{chunk-WW3F7DCX.js → chunk-IFOHCY4O.js} +2 -2
  238. package/dist/{chunk-S46LGAQ2.js → chunk-IJVBLU25.js} +2 -2
  239. package/dist/{chunk-ARGVUTTL.js → chunk-IPVGWENM.js} +2 -2
  240. package/dist/{chunk-MPWA55CF.js → chunk-IXXB7CTR.js} +9 -5
  241. package/dist/chunk-IXXB7CTR.js.map +1 -0
  242. package/dist/{chunk-MWXZXCVX.js → chunk-J43PARXM.js} +6 -6
  243. package/dist/{chunk-UYKIUUWP.js → chunk-JJTJ7DCV.js} +2 -2
  244. package/dist/{chunk-HQCZT6TO.js → chunk-JVOEVTCZ.js} +5 -5
  245. package/dist/{chunk-RZ3P4X2I.js → chunk-K62L5JFC.js} +25 -4
  246. package/dist/chunk-K62L5JFC.js.map +1 -0
  247. package/dist/{chunk-2365CQJU.js → chunk-KAQDWEG6.js} +2 -2
  248. package/dist/{chunk-TB5CRHTF.js → chunk-KEPLO2AB.js} +2 -2
  249. package/dist/chunk-KNW63H63.js +263 -0
  250. package/dist/chunk-KNW63H63.js.map +1 -0
  251. package/dist/{chunk-PVIQDBUN.js → chunk-KUQ4XHVV.js} +2 -2
  252. package/dist/{chunk-DAFFZED3.js → chunk-KWBMM6MJ.js} +2 -2
  253. package/dist/{chunk-QPCHABOZ.js → chunk-L5YGVLPH.js} +8 -4
  254. package/dist/chunk-L5YGVLPH.js.map +1 -0
  255. package/dist/{chunk-JJYECKEL.js → chunk-LFECE4R7.js} +2 -2
  256. package/dist/{chunk-LXIPBHNJ.js → chunk-LKTJ26ST.js} +2 -2
  257. package/dist/{chunk-56JF5PZK.js → chunk-LYVTJLCF.js} +4 -4
  258. package/dist/{chunk-EYFDIUVR.js → chunk-M4G4LRQK.js} +2 -2
  259. package/dist/{chunk-TJUWSQYQ.js → chunk-MDU5Q2HW.js} +3 -2
  260. package/dist/{chunk-TJUWSQYQ.js.map → chunk-MDU5Q2HW.js.map} +1 -1
  261. package/dist/{chunk-KMMFN24G.js → chunk-MKHNLRVX.js} +4 -4
  262. package/dist/{chunk-4IG73U2X.js → chunk-MSPLIRBH.js} +2 -2
  263. package/dist/{chunk-55MYYWOV.js → chunk-O4UXH7BM.js} +7 -7
  264. package/dist/{chunk-DYHOBKPU.js → chunk-OA6T2ME3.js} +5 -5
  265. package/dist/{chunk-VNMD6BA4.js → chunk-OFRQMFWD.js} +3 -3
  266. package/dist/{chunk-LTJC7TGB.js → chunk-OHA2PAAA.js} +2 -2
  267. package/dist/{chunk-ZANWHTXH.js → chunk-OVJV2ZN7.js} +2 -2
  268. package/dist/{chunk-SKQPUAMK.js → chunk-PDWQJFMK.js} +6 -6
  269. package/dist/{chunk-6EZQLNPK.js → chunk-PGJIWCQR.js} +4 -4
  270. package/dist/{chunk-FRAFGRRD.js → chunk-PIELY4BJ.js} +1 -1
  271. package/dist/{chunk-3Z6JX7UN.js → chunk-PZJEF232.js} +2 -2
  272. package/dist/{chunk-6ATXOJVQ.js → chunk-QADTI63U.js} +4 -4
  273. package/dist/chunk-QAF76E6U.js +43 -0
  274. package/dist/chunk-QAF76E6U.js.map +1 -0
  275. package/dist/{chunk-4RF4BALN.js → chunk-R775ISK6.js} +4 -4
  276. package/dist/{chunk-YBAK2WN5.js → chunk-RFMQBIE6.js} +4 -4
  277. package/dist/{chunk-43EFQ3DU.js → chunk-RVBLOR32.js} +2 -2
  278. package/dist/{chunk-XNAI7QGU.js → chunk-SA3KLZDZ.js} +5 -5
  279. package/dist/{chunk-CAOL4AIB.js → chunk-SARK3GHS.js} +2 -2
  280. package/dist/chunk-SIY64A6O.js +60 -0
  281. package/dist/chunk-SIY64A6O.js.map +1 -0
  282. package/dist/{chunk-CQOJUYTT.js → chunk-SOXO2VN3.js} +3 -3
  283. package/dist/{chunk-6PU5P7QT.js → chunk-TDXEWGY2.js} +2 -2
  284. package/dist/{chunk-SB2SEGR6.js → chunk-TIM4PXWN.js} +3 -3
  285. package/dist/{chunk-OGSTMHT6.js → chunk-TTBLQZVT.js} +3 -3
  286. package/dist/{chunk-GTE4TW3W.js → chunk-U4PV2ZKK.js} +6 -6
  287. package/dist/{chunk-VHE7UEG5.js → chunk-UC7DLGMP.js} +2 -2
  288. package/dist/{chunk-TI4FGQYV.js → chunk-UHLGJHTD.js} +2 -2
  289. package/dist/{chunk-TAHO2LCU.js → chunk-UIZIEU4X.js} +3 -3
  290. package/dist/{chunk-F7LBTMCA.js → chunk-ULC4SCFC.js} +2 -2
  291. package/dist/{chunk-FORQEHRQ.js → chunk-UXVWGNPG.js} +2 -2
  292. package/dist/{chunk-3ZRK3BRN.js → chunk-UXYCBPCE.js} +12 -6
  293. package/dist/chunk-UXYCBPCE.js.map +1 -0
  294. package/dist/{chunk-L6YTVXGN.js → chunk-VCYYL23C.js} +4 -2
  295. package/dist/{chunk-L6YTVXGN.js.map → chunk-VCYYL23C.js.map} +1 -1
  296. package/dist/{chunk-KF3Q3C3P.js → chunk-VGIBWJ72.js} +2 -2
  297. package/dist/{chunk-I54YFYBS.js → chunk-VMACQT3T.js} +3 -3
  298. package/dist/{chunk-XOXXG7Q5.js → chunk-VWKMN3ZZ.js} +3 -2
  299. package/dist/{chunk-XOXXG7Q5.js.map → chunk-VWKMN3ZZ.js.map} +1 -1
  300. package/dist/{chunk-EXEBN5ZP.js → chunk-W56KN53D.js} +8 -8
  301. package/dist/{chunk-KURE5R7Z.js → chunk-WGK7VNCO.js} +2 -2
  302. package/dist/{chunk-UIS3E72B.js → chunk-WK577LQL.js} +3 -3
  303. package/dist/{chunk-G3WG77QY.js → chunk-WN6LR4HX.js} +21 -6
  304. package/dist/chunk-WN6LR4HX.js.map +1 -0
  305. package/dist/{chunk-LLPPIO3K.js → chunk-WNTXHLVJ.js} +2 -2
  306. package/dist/{chunk-PEVBSNCD.js → chunk-WPRQPKLV.js} +2 -2
  307. package/dist/{chunk-C347NNZJ.js → chunk-WVCHMTPG.js} +2 -2
  308. package/dist/{chunk-CSD6SWBZ.js → chunk-WYNGH2WL.js} +6 -6
  309. package/dist/{chunk-4L54KUZV.js → chunk-X5GCAXZS.js} +38 -16
  310. package/dist/chunk-X5GCAXZS.js.map +1 -0
  311. package/dist/{chunk-PJDAZG65.js → chunk-XA5ES25V.js} +3 -3
  312. package/dist/{chunk-FWTVIRZZ.js → chunk-YLZXIR6B.js} +4 -4
  313. package/dist/{chunk-STOZ6JB5.js → chunk-YQMJJ7AL.js} +33 -16
  314. package/dist/chunk-YQMJJ7AL.js.map +1 -0
  315. package/dist/{chunk-JOQGKXR5.js → chunk-Z2J4MRTF.js} +4 -4
  316. package/dist/{chunk-I4K5JMS4.js → chunk-ZDLC4BN4.js} +4 -2
  317. package/dist/chunk-ZDLC4BN4.js.map +1 -0
  318. package/dist/{chunk-USHVG4UQ.js → chunk-ZKVSFVIA.js} +3 -3
  319. package/dist/{chunk-TE6HAWDM.js → chunk-ZP2GPRNQ.js} +2 -2
  320. package/dist/{chunk-3PQL2EN5.js → chunk-ZW7Q3IRL.js} +6 -6
  321. package/dist/{chunk-M5Y42AZ4.js → chunk-ZX4ORMBC.js} +2 -2
  322. package/dist/data-display/AlertDialog.js +3 -3
  323. package/dist/data-display/AsyncStateContainer.js +5 -5
  324. package/dist/data-display/Avatar.js +5 -5
  325. package/dist/data-display/CardKit.js +12 -12
  326. package/dist/data-display/Carousel.js +6 -6
  327. package/dist/data-display/Chart.js +17 -17
  328. package/dist/data-display/DataGrid.js +2 -2
  329. package/dist/data-display/DataViews.js +72 -72
  330. package/dist/data-display/DayRuler.js +11 -11
  331. package/dist/data-display/EmptyState.js +2 -2
  332. package/dist/data-display/ErrorState.js +2 -2
  333. package/dist/data-display/FleetMap.js +12 -12
  334. package/dist/data-display/HoverCard.js +3 -3
  335. package/dist/data-display/LazyImage.js +2 -2
  336. package/dist/data-display/Lightbox.js +3 -3
  337. package/dist/data-display/LoadingState.js +2 -2
  338. package/dist/data-display/MapPreview.js +8 -8
  339. package/dist/data-display/RegionMap.js +5 -5
  340. package/dist/data-display/ScheduleGrid.js +10 -10
  341. package/dist/data-display/SectionOnboarding.js +4 -4
  342. package/dist/data-display/Sheet.js +6 -6
  343. package/dist/data-display/Stepper.js +2 -2
  344. package/dist/data-display/Table.js +4 -4
  345. package/dist/data-display/Timeline.js +2 -2
  346. package/dist/en-US.js +2 -2
  347. package/dist/feedback/ConfirmAction.js +9 -9
  348. package/dist/feedback/Dialog.js +2 -2
  349. package/dist/feedback/Modal.js +2 -2
  350. package/dist/feedback/SequenceResolver.js +4 -4
  351. package/dist/feedback/Sonner.js +2 -2
  352. package/dist/feedback/StackedModal.js +4 -4
  353. package/dist/feedback/Toast.js +2 -2
  354. package/dist/feedback/TutorialOverlay.js +2 -2
  355. package/dist/feedback/UsableModal.js +1 -1
  356. package/dist/form/AddressAutocomplete.js +7 -7
  357. package/dist/form/Autocomplete.js +2 -2
  358. package/dist/form/Calendar.js +10 -10
  359. package/dist/form/CategorySelect.js +4 -4
  360. package/dist/form/CodeEditor.js +3 -3
  361. package/dist/form/Command.js +4 -4
  362. package/dist/form/DateRangePicker.js +20 -15
  363. package/dist/form/RichTextEditor.js +5 -5
  364. package/dist/form/total-form.js +9 -9
  365. package/dist/layout/ContentToolbar.js +6 -6
  366. package/dist/layout/Dashboard.js +2 -2
  367. package/dist/layout/Drawer.js +2 -2
  368. package/dist/layout/SettingsLayout.js +2 -2
  369. package/dist/layout/TableFilter.js +2 -2
  370. package/dist/locales.js +4 -4
  371. package/dist/native/chunks/{chunk-QHW7JEPZ.js → chunk-O76COY56.js} +3 -2
  372. package/dist/native/chunks/{chunk-QHW7JEPZ.js.map → chunk-O76COY56.js.map} +1 -1
  373. package/dist/native/chunks/{chunk-FXA5DLKR.js → chunk-UQ272RI2.js} +3 -3
  374. package/dist/native/chunks/{chunk-IN3XZ7EK.js → chunk-X65TVC3B.js} +2 -2
  375. package/dist/native/data-display/Avatar.js +1 -1
  376. package/dist/native/data-display/Badge.js +1 -1
  377. package/dist/native/data-display/Chip.js +1 -1
  378. package/dist/native/data-display/EmptyState.js +3 -3
  379. package/dist/native/data-display/ErrorState.js +2 -2
  380. package/dist/native/data-display/FleetMap.js +3 -3
  381. package/dist/native/data-display/LoadingState.js +1 -1
  382. package/dist/native/feedback/Dialog.js +1 -1
  383. package/dist/native/form/Button.js +2 -2
  384. package/dist/native/form/Checkbox.js +1 -1
  385. package/dist/native/form/Input.js +1 -1
  386. package/dist/native/form/Switch.js +1 -1
  387. package/dist/navigation/AppHeader.js +10 -10
  388. package/dist/navigation/Breadcrumbs.js +2 -2
  389. package/dist/navigation/NavigationMenu.js +3 -3
  390. package/dist/navigation/SectionNav.js +5 -5
  391. package/dist/navigation/Tabs.js +1 -1
  392. package/dist/pt-BR.js +2 -2
  393. package/dist/social-login-button.js +2 -2
  394. package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts +3 -1
  395. package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts.map +1 -1
  396. package/dist/types/components/form/Calendar/Calendar.band.d.ts.map +1 -1
  397. package/dist/types/components/form/Calendar/Calendar.d.ts.map +1 -1
  398. package/dist/types/components/form/Calendar/Calendar.helpers.d.ts.map +1 -1
  399. package/dist/types/components/form/Calendar/Calendar.hooks.d.ts.map +1 -1
  400. package/dist/types/components/form/Calendar/Calendar.types.d.ts +24 -1
  401. package/dist/types/components/form/Calendar/Calendar.types.d.ts.map +1 -1
  402. package/dist/types/components/form/Calendar/CalendarDay.d.ts +6 -0
  403. package/dist/types/components/form/Calendar/CalendarDay.d.ts.map +1 -1
  404. package/dist/types/components/form/Calendar/CalendarDayCell.d.ts +11 -1
  405. package/dist/types/components/form/Calendar/CalendarDayCell.d.ts.map +1 -1
  406. package/dist/types/components/form/Calendar/CalendarMonth.d.ts +22 -0
  407. package/dist/types/components/form/Calendar/CalendarMonth.d.ts.map +1 -1
  408. package/dist/types/components/form/Calendar/index.d.ts +1 -1
  409. package/dist/types/components/form/Calendar/index.d.ts.map +1 -1
  410. package/dist/types/components/form/DateRangePicker/DateRangePicker.d.ts +1 -1
  411. package/dist/types/components/form/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  412. package/dist/types/components/form/DateRangePicker/DateRangePicker.frame.d.ts +93 -0
  413. package/dist/types/components/form/DateRangePicker/DateRangePicker.frame.d.ts.map +1 -0
  414. package/dist/types/components/form/DateRangePicker/DateRangePicker.hooks.d.ts +1 -1
  415. package/dist/types/components/form/DateRangePicker/DateRangePicker.hooks.d.ts.map +1 -1
  416. package/dist/types/components/form/DateRangePicker/DateRangePicker.layout.d.ts +27 -0
  417. package/dist/types/components/form/DateRangePicker/DateRangePicker.layout.d.ts.map +1 -0
  418. package/dist/types/components/form/DateRangePicker/DateRangePicker.range.d.ts +8 -2
  419. package/dist/types/components/form/DateRangePicker/DateRangePicker.range.d.ts.map +1 -1
  420. package/dist/types/components/form/DateRangePicker/DateRangePicker.types.d.ts +90 -1
  421. package/dist/types/components/form/DateRangePicker/DateRangePicker.types.d.ts.map +1 -1
  422. package/dist/types/components/form/DateRangePicker/DateRangePickerFields.d.ts +7 -1
  423. package/dist/types/components/form/DateRangePicker/DateRangePickerFields.d.ts.map +1 -1
  424. package/dist/types/components/navigation/Tabs/Tabs.d.ts.map +1 -1
  425. package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +18 -3
  426. package/dist/types/components/navigation/Tabs/Tabs.types.d.ts.map +1 -1
  427. package/dist/types/copy/labels.d.ts +6 -0
  428. package/dist/types/copy/labels.d.ts.map +1 -1
  429. package/dist/types/en-US.labels.d.ts.map +1 -1
  430. package/dist/types/pt-BR.labels.d.ts.map +1 -1
  431. package/dist/types-native/copy/labels.d.ts +6 -0
  432. package/dist/types-native/copy/labels.d.ts.map +1 -1
  433. package/dist/types-native/en-US.labels.d.ts.map +1 -1
  434. package/dist/typography/Code.js +2 -2
  435. package/dist/user-avatar.js +6 -6
  436. package/dist/utility/AnimatedIcon.js +2 -2
  437. package/dist/utility/InfiniteScroll.js +3 -3
  438. package/dist/utility/WorkflowStep.js +5 -5
  439. package/package.json +1 -1
  440. package/src/components/data-display/DataViews/data-views-day-input.tsx +4 -0
  441. package/src/components/form/Calendar/Calendar.band.ts +3 -0
  442. package/src/components/form/Calendar/Calendar.helpers.ts +2 -0
  443. package/src/components/form/Calendar/Calendar.hooks.ts +4 -2
  444. package/src/components/form/Calendar/Calendar.md +12 -1
  445. package/src/components/form/Calendar/Calendar.tsx +30 -10
  446. package/src/components/form/Calendar/Calendar.types.ts +27 -1
  447. package/src/components/form/Calendar/CalendarDay.tsx +85 -13
  448. package/src/components/form/Calendar/CalendarDayCell.tsx +17 -1
  449. package/src/components/form/Calendar/CalendarMonth.tsx +40 -4
  450. package/src/components/form/Calendar/CalendarSelectorsMonth.tsx +2 -2
  451. package/src/components/form/Calendar/index.ts +1 -0
  452. package/src/components/form/DateRangePicker/DateRangePicker.frame.ts +92 -0
  453. package/src/components/form/DateRangePicker/DateRangePicker.hooks.ts +43 -1
  454. package/src/components/form/DateRangePicker/DateRangePicker.layout.ts +69 -0
  455. package/src/components/form/DateRangePicker/DateRangePicker.md +77 -2
  456. package/src/components/form/DateRangePicker/DateRangePicker.range.ts +10 -2
  457. package/src/components/form/DateRangePicker/DateRangePicker.tsx +177 -57
  458. package/src/components/form/DateRangePicker/DateRangePicker.types.ts +88 -1
  459. package/src/components/form/DateRangePicker/DateRangePickerFields.tsx +13 -2
  460. package/src/components/navigation/Tabs/Tabs.md +22 -1
  461. package/src/components/navigation/Tabs/Tabs.tsx +25 -9
  462. package/src/components/navigation/Tabs/Tabs.types.ts +18 -2
  463. package/src/copy/labels.ts +6 -0
  464. package/src/en-US.labels.ts +1 -0
  465. package/src/pt-BR.labels.ts +1 -0
  466. package/dist/chunk-3CSKB57B.js +0 -184
  467. package/dist/chunk-3CSKB57B.js.map +0 -1
  468. package/dist/chunk-3ZRK3BRN.js.map +0 -1
  469. package/dist/chunk-4L54KUZV.js.map +0 -1
  470. package/dist/chunk-G3WG77QY.js.map +0 -1
  471. package/dist/chunk-H2UUMZQR.js.map +0 -1
  472. package/dist/chunk-HBRBIPNF.js.map +0 -1
  473. package/dist/chunk-I4K5JMS4.js.map +0 -1
  474. package/dist/chunk-MPWA55CF.js.map +0 -1
  475. package/dist/chunk-QPCHABOZ.js.map +0 -1
  476. package/dist/chunk-QSOCOXVL.js.map +0 -1
  477. package/dist/chunk-RZ3P4X2I.js.map +0 -1
  478. package/dist/chunk-STOZ6JB5.js.map +0 -1
  479. package/dist/chunk-TPMT3J32.js.map +0 -1
  480. /package/dist/{chunk-UBVKMM3V.js.map → chunk-2A5GHOL3.js.map} +0 -0
  481. /package/dist/{chunk-YGLAGY74.js.map → chunk-332KWE5H.js.map} +0 -0
  482. /package/dist/{chunk-HNEZWVDR.js.map → chunk-364NT46L.js.map} +0 -0
  483. /package/dist/{chunk-RLTGD5WJ.js.map → chunk-3AKQHYTM.js.map} +0 -0
  484. /package/dist/{chunk-5I75WRXT.js.map → chunk-3CXRHRGE.js.map} +0 -0
  485. /package/dist/{chunk-G6NMSBSQ.js.map → chunk-3LD42RNV.js.map} +0 -0
  486. /package/dist/{chunk-3BMG6VMB.js.map → chunk-3N2HWNKT.js.map} +0 -0
  487. /package/dist/{chunk-MSJP2AEN.js.map → chunk-3N3W4TID.js.map} +0 -0
  488. /package/dist/{chunk-YNVTUQ5B.js.map → chunk-3V7OTBUZ.js.map} +0 -0
  489. /package/dist/{chunk-LZNUBQ5I.js.map → chunk-4A454JZN.js.map} +0 -0
  490. /package/dist/{chunk-SW7JCF4Z.js.map → chunk-4P63RSSY.js.map} +0 -0
  491. /package/dist/{chunk-7QKFMMWK.js.map → chunk-4W4C4Q46.js.map} +0 -0
  492. /package/dist/{chunk-B32XH7NK.js.map → chunk-4WVUX7IU.js.map} +0 -0
  493. /package/dist/{chunk-Z6QFIRD7.js.map → chunk-4X2TOMK6.js.map} +0 -0
  494. /package/dist/{chunk-MYTV353T.js.map → chunk-4Y3QLISA.js.map} +0 -0
  495. /package/dist/{chunk-IMYKJTVX.js.map → chunk-5J6LN2O7.js.map} +0 -0
  496. /package/dist/{chunk-QWI7IPYJ.js.map → chunk-5V7IZBRY.js.map} +0 -0
  497. /package/dist/{chunk-ZBUMGMWP.js.map → chunk-64LNNC54.js.map} +0 -0
  498. /package/dist/{chunk-T77OVQEO.js.map → chunk-6D7CASMK.js.map} +0 -0
  499. /package/dist/{chunk-YVDNCV2D.js.map → chunk-6RYSSNOO.js.map} +0 -0
  500. /package/dist/{chunk-CPQJFHNZ.js.map → chunk-74IH3ZGD.js.map} +0 -0
  501. /package/dist/{chunk-UQ5GJPVZ.js.map → chunk-76GAXLNC.js.map} +0 -0
  502. /package/dist/{chunk-X4J576GR.js.map → chunk-7LFST3PW.js.map} +0 -0
  503. /package/dist/{chunk-XCUHGPPZ.js.map → chunk-7MLT66DE.js.map} +0 -0
  504. /package/dist/{chunk-EOIRU62W.js.map → chunk-7P544IWT.js.map} +0 -0
  505. /package/dist/{chunk-XTYBJAZG.js.map → chunk-7TENMQNQ.js.map} +0 -0
  506. /package/dist/{chunk-EB25XITI.js.map → chunk-A27J4CIZ.js.map} +0 -0
  507. /package/dist/{chunk-2KSFBZ2H.js.map → chunk-ABZJNKR6.js.map} +0 -0
  508. /package/dist/{chunk-6LOWZCH7.js.map → chunk-AHXQN4VL.js.map} +0 -0
  509. /package/dist/{chunk-Y7BOP7VZ.js.map → chunk-AP7GEUJS.js.map} +0 -0
  510. /package/dist/{chunk-U2SAW6DH.js.map → chunk-B4OZU7J4.js.map} +0 -0
  511. /package/dist/{chunk-DDGYTY4E.js.map → chunk-BIHZXB5P.js.map} +0 -0
  512. /package/dist/{chunk-4QGMUHAU.js.map → chunk-BWNZVMBT.js.map} +0 -0
  513. /package/dist/{chunk-CY4XIZNW.js.map → chunk-CAH5XNHT.js.map} +0 -0
  514. /package/dist/{chunk-KILA7LCC.js.map → chunk-CFDWKQZT.js.map} +0 -0
  515. /package/dist/{chunk-EWFBDAB7.js.map → chunk-CKGRSCRT.js.map} +0 -0
  516. /package/dist/{chunk-YOLLISEY.js.map → chunk-CRD2WCU7.js.map} +0 -0
  517. /package/dist/{chunk-L5KPBMMF.js.map → chunk-CXL3TT3K.js.map} +0 -0
  518. /package/dist/{chunk-KOGJBAFI.js.map → chunk-D3KLIC5N.js.map} +0 -0
  519. /package/dist/{chunk-2SBQ47RI.js.map → chunk-D4JL5725.js.map} +0 -0
  520. /package/dist/{chunk-NI3MC742.js.map → chunk-DBJLYURK.js.map} +0 -0
  521. /package/dist/{chunk-75GAQL2Q.js.map → chunk-DKPELKGL.js.map} +0 -0
  522. /package/dist/{chunk-NGXL4R54.js.map → chunk-E4MJA52O.js.map} +0 -0
  523. /package/dist/{chunk-5HXVXW22.js.map → chunk-EGBQR5GH.js.map} +0 -0
  524. /package/dist/{chunk-FTYOCFTV.js.map → chunk-EGYJUJMR.js.map} +0 -0
  525. /package/dist/{chunk-7XSCEHGA.js.map → chunk-EOQ6EKTS.js.map} +0 -0
  526. /package/dist/{chunk-6AKDAQSS.js.map → chunk-ERAMSYPR.js.map} +0 -0
  527. /package/dist/{chunk-WYRH6OSN.js.map → chunk-F5EH5BJN.js.map} +0 -0
  528. /package/dist/{chunk-QCYQL3ST.js.map → chunk-FJLPVPRG.js.map} +0 -0
  529. /package/dist/{chunk-MAHY7PK3.js.map → chunk-FQMLTCXT.js.map} +0 -0
  530. /package/dist/{chunk-TMINUTQQ.js.map → chunk-FRQGZIYU.js.map} +0 -0
  531. /package/dist/{chunk-LV6AD6XC.js.map → chunk-FT3LJZWZ.js.map} +0 -0
  532. /package/dist/{chunk-IS3L67TF.js.map → chunk-FW5GTAUY.js.map} +0 -0
  533. /package/dist/{chunk-VMTOLAZ5.js.map → chunk-FZZMNKVF.js.map} +0 -0
  534. /package/dist/{chunk-FGZIEZEP.js.map → chunk-G6TKWNF2.js.map} +0 -0
  535. /package/dist/{chunk-I6IFUFLW.js.map → chunk-G7MHDZTL.js.map} +0 -0
  536. /package/dist/{chunk-KES3HNSU.js.map → chunk-GB2DQOZ7.js.map} +0 -0
  537. /package/dist/{chunk-W3IFJA35.js.map → chunk-GFYDOH7D.js.map} +0 -0
  538. /package/dist/{chunk-M2M4IDFU.js.map → chunk-GXYOBTOY.js.map} +0 -0
  539. /package/dist/{chunk-OLHAUGVQ.js.map → chunk-GZQQSTKR.js.map} +0 -0
  540. /package/dist/{chunk-N2J24TJ3.js.map → chunk-HAWOS4SF.js.map} +0 -0
  541. /package/dist/{chunk-S2VZUBM7.js.map → chunk-HCTHY66U.js.map} +0 -0
  542. /package/dist/{chunk-ABVIMFSD.js.map → chunk-HG52QQ2L.js.map} +0 -0
  543. /package/dist/{chunk-AMLHEKSV.js.map → chunk-HI7JPDD6.js.map} +0 -0
  544. /package/dist/{chunk-F5OERPU4.js.map → chunk-HOWAMSUY.js.map} +0 -0
  545. /package/dist/{chunk-3TZUZXY5.js.map → chunk-HTXYBKLK.js.map} +0 -0
  546. /package/dist/{chunk-WW3F7DCX.js.map → chunk-IFOHCY4O.js.map} +0 -0
  547. /package/dist/{chunk-S46LGAQ2.js.map → chunk-IJVBLU25.js.map} +0 -0
  548. /package/dist/{chunk-ARGVUTTL.js.map → chunk-IPVGWENM.js.map} +0 -0
  549. /package/dist/{chunk-MWXZXCVX.js.map → chunk-J43PARXM.js.map} +0 -0
  550. /package/dist/{chunk-UYKIUUWP.js.map → chunk-JJTJ7DCV.js.map} +0 -0
  551. /package/dist/{chunk-HQCZT6TO.js.map → chunk-JVOEVTCZ.js.map} +0 -0
  552. /package/dist/{chunk-2365CQJU.js.map → chunk-KAQDWEG6.js.map} +0 -0
  553. /package/dist/{chunk-TB5CRHTF.js.map → chunk-KEPLO2AB.js.map} +0 -0
  554. /package/dist/{chunk-PVIQDBUN.js.map → chunk-KUQ4XHVV.js.map} +0 -0
  555. /package/dist/{chunk-DAFFZED3.js.map → chunk-KWBMM6MJ.js.map} +0 -0
  556. /package/dist/{chunk-JJYECKEL.js.map → chunk-LFECE4R7.js.map} +0 -0
  557. /package/dist/{chunk-LXIPBHNJ.js.map → chunk-LKTJ26ST.js.map} +0 -0
  558. /package/dist/{chunk-56JF5PZK.js.map → chunk-LYVTJLCF.js.map} +0 -0
  559. /package/dist/{chunk-EYFDIUVR.js.map → chunk-M4G4LRQK.js.map} +0 -0
  560. /package/dist/{chunk-KMMFN24G.js.map → chunk-MKHNLRVX.js.map} +0 -0
  561. /package/dist/{chunk-4IG73U2X.js.map → chunk-MSPLIRBH.js.map} +0 -0
  562. /package/dist/{chunk-55MYYWOV.js.map → chunk-O4UXH7BM.js.map} +0 -0
  563. /package/dist/{chunk-DYHOBKPU.js.map → chunk-OA6T2ME3.js.map} +0 -0
  564. /package/dist/{chunk-VNMD6BA4.js.map → chunk-OFRQMFWD.js.map} +0 -0
  565. /package/dist/{chunk-LTJC7TGB.js.map → chunk-OHA2PAAA.js.map} +0 -0
  566. /package/dist/{chunk-ZANWHTXH.js.map → chunk-OVJV2ZN7.js.map} +0 -0
  567. /package/dist/{chunk-SKQPUAMK.js.map → chunk-PDWQJFMK.js.map} +0 -0
  568. /package/dist/{chunk-6EZQLNPK.js.map → chunk-PGJIWCQR.js.map} +0 -0
  569. /package/dist/{chunk-FRAFGRRD.js.map → chunk-PIELY4BJ.js.map} +0 -0
  570. /package/dist/{chunk-3Z6JX7UN.js.map → chunk-PZJEF232.js.map} +0 -0
  571. /package/dist/{chunk-6ATXOJVQ.js.map → chunk-QADTI63U.js.map} +0 -0
  572. /package/dist/{chunk-4RF4BALN.js.map → chunk-R775ISK6.js.map} +0 -0
  573. /package/dist/{chunk-YBAK2WN5.js.map → chunk-RFMQBIE6.js.map} +0 -0
  574. /package/dist/{chunk-43EFQ3DU.js.map → chunk-RVBLOR32.js.map} +0 -0
  575. /package/dist/{chunk-XNAI7QGU.js.map → chunk-SA3KLZDZ.js.map} +0 -0
  576. /package/dist/{chunk-CAOL4AIB.js.map → chunk-SARK3GHS.js.map} +0 -0
  577. /package/dist/{chunk-CQOJUYTT.js.map → chunk-SOXO2VN3.js.map} +0 -0
  578. /package/dist/{chunk-6PU5P7QT.js.map → chunk-TDXEWGY2.js.map} +0 -0
  579. /package/dist/{chunk-SB2SEGR6.js.map → chunk-TIM4PXWN.js.map} +0 -0
  580. /package/dist/{chunk-OGSTMHT6.js.map → chunk-TTBLQZVT.js.map} +0 -0
  581. /package/dist/{chunk-GTE4TW3W.js.map → chunk-U4PV2ZKK.js.map} +0 -0
  582. /package/dist/{chunk-VHE7UEG5.js.map → chunk-UC7DLGMP.js.map} +0 -0
  583. /package/dist/{chunk-TI4FGQYV.js.map → chunk-UHLGJHTD.js.map} +0 -0
  584. /package/dist/{chunk-TAHO2LCU.js.map → chunk-UIZIEU4X.js.map} +0 -0
  585. /package/dist/{chunk-F7LBTMCA.js.map → chunk-ULC4SCFC.js.map} +0 -0
  586. /package/dist/{chunk-FORQEHRQ.js.map → chunk-UXVWGNPG.js.map} +0 -0
  587. /package/dist/{chunk-KF3Q3C3P.js.map → chunk-VGIBWJ72.js.map} +0 -0
  588. /package/dist/{chunk-I54YFYBS.js.map → chunk-VMACQT3T.js.map} +0 -0
  589. /package/dist/{chunk-EXEBN5ZP.js.map → chunk-W56KN53D.js.map} +0 -0
  590. /package/dist/{chunk-KURE5R7Z.js.map → chunk-WGK7VNCO.js.map} +0 -0
  591. /package/dist/{chunk-UIS3E72B.js.map → chunk-WK577LQL.js.map} +0 -0
  592. /package/dist/{chunk-LLPPIO3K.js.map → chunk-WNTXHLVJ.js.map} +0 -0
  593. /package/dist/{chunk-PEVBSNCD.js.map → chunk-WPRQPKLV.js.map} +0 -0
  594. /package/dist/{chunk-C347NNZJ.js.map → chunk-WVCHMTPG.js.map} +0 -0
  595. /package/dist/{chunk-CSD6SWBZ.js.map → chunk-WYNGH2WL.js.map} +0 -0
  596. /package/dist/{chunk-PJDAZG65.js.map → chunk-XA5ES25V.js.map} +0 -0
  597. /package/dist/{chunk-FWTVIRZZ.js.map → chunk-YLZXIR6B.js.map} +0 -0
  598. /package/dist/{chunk-JOQGKXR5.js.map → chunk-Z2J4MRTF.js.map} +0 -0
  599. /package/dist/{chunk-USHVG4UQ.js.map → chunk-ZKVSFVIA.js.map} +0 -0
  600. /package/dist/{chunk-TE6HAWDM.js.map → chunk-ZP2GPRNQ.js.map} +0 -0
  601. /package/dist/{chunk-3PQL2EN5.js.map → chunk-ZW7Q3IRL.js.map} +0 -0
  602. /package/dist/{chunk-M5Y42AZ4.js.map → chunk-ZX4ORMBC.js.map} +0 -0
  603. /package/dist/native/chunks/{chunk-FXA5DLKR.js.map → chunk-UQ272RI2.js.map} +0 -0
  604. /package/dist/native/chunks/{chunk-IN3XZ7EK.js.map → chunk-X65TVC3B.js.map} +0 -0
@@ -0,0 +1,92 @@
1
+ /**
2
+ * The months' frame in the in-page (`beside`) layout, and the fields' column
3
+ * beside it: how wide each is, with and without `fullWidth`. Kept out of the
4
+ * component so that file stays a layout of parts.
5
+ */
6
+ import type { Theme } from '@mui/material/styles/index.js';
7
+
8
+ import { rem, sxRem } from '../../../tokens/relative';
9
+ import { surfaces } from '../../../tokens/surfaces';
10
+ import { CARD_RADIUS_UNITS } from '../../layout/Card/Card.metrics';
11
+
12
+ import { framedMonthsWidth } from './DateRangePicker.layout';
13
+
14
+ export const CALENDAR_CLASS = 'date-range-picker__calendar';
15
+
16
+ // `Calendar` renders its own `Paper` with 24px of padding. Nested in this one
17
+ // that reads as a box inside a box, so the inner frame is flattened here
18
+ // through the className hook the component exposes for exactly this.
19
+ export const FLAT_CALENDAR = {
20
+ [`& .${CALENDAR_CLASS}`]: {
21
+ p: 0,
22
+ boxShadow: 'none',
23
+ backgroundColor: 'transparent',
24
+ backgroundImage: 'none',
25
+ },
26
+ };
27
+
28
+ /**
29
+ * The months' own frame in the `beside` layout: the picker is part of a page
30
+ * there, so the frame holds the calendar alone and the fields sit on the page
31
+ * beside or under it, as the form's other fields do.
32
+ */
33
+ const BESIDE_FRAME_SX = {
34
+ p: 2,
35
+ maxWidth: '100%',
36
+ minWidth: 0,
37
+ // A card on the page, as the prototype draws it: the RAISED surface role
38
+ // (`background.paper` unless the host states one — a host whose paper is its
39
+ // page ground states a lighter card there) and the default `Card`'s radius,
40
+ // not a Paper's 4px (FUT-4156, round 3). In-page only: the popover keeps its own.
41
+ bgcolor: (theme: Theme) => surfaces(theme).raised,
42
+ borderRadius: (theme: Theme) => theme.spacing(CARD_RADIUS_UNITS.md),
43
+ ...FLAT_CALENDAR,
44
+ } as const;
45
+
46
+ /**
47
+ * Under the fields' row the frame is as wide as its months and centred: a
48
+ * frame stretched across the page around one month left a third of itself
49
+ * blank (FUT-4156, 600 and 900 wide).
50
+ */
51
+ const BELOW_FRAME_SX = {
52
+ ...BESIDE_FRAME_SX,
53
+ alignSelf: 'center',
54
+ width: 'fit-content',
55
+ } as const;
56
+
57
+ /**
58
+ * `fullWidth`: the frame's edges are the picker's. Under the fields it spans
59
+ * the picker; beside them it takes the row the fields' column leaves, and the
60
+ * months spread across it (FUT-4156: a fitted frame left blank bands of 10 to
61
+ * 77px each side at 390, 600 and 900 wide).
62
+ */
63
+ /**
64
+ * Under the fields the frame gives up its side padding before its columns
65
+ * drop under 40 design px: seven 40px columns and the hairlines need 282, so
66
+ * the padding is what is left of the row past that, never more than its 16
67
+ * (FUT-4156, round 3: at 320 wide the columns were 36). `100%` is the row's
68
+ * width — padding percentages read the containing block.
69
+ */
70
+ export const FILL_COLUMN_MIN = 40;
71
+ const sidePadding = (theme: Theme): string =>
72
+ `clamp(0px, calc((100% - ${rem(theme, 7 * FILL_COLUMN_MIN + 2)}) / 2), ${theme.spacing(2)})`;
73
+ const FILL_BELOW_FRAME_SX = { ...BESIDE_FRAME_SX, alignSelf: 'stretch', px: sidePadding } as const;
74
+ // Never narrower than its months at their full size: the fields' column gives
75
+ // way first, down to the room `besideLayout` chose this placement with.
76
+ const fillBesideFrameSx = (months: number) =>
77
+ ({ ...BESIDE_FRAME_SX, flex: '1 1 auto', minWidth: sxRem(framedMonthsWidth(months)) }) as const;
78
+
79
+ /**
80
+ * The fields' column beside a filling frame stops at 320 design px: at 1920
81
+ * wide it ran to 694 for a ten-character date, with the room under it blank.
82
+ */
83
+ const FILL_FIELDS_COLUMN = { flex: '0 1 auto', width: sxRem(320), minWidth: 0 } as const;
84
+
85
+ export const frameSx = (sideBySide: boolean, fill: boolean, months: number) => {
86
+ if (fill) return sideBySide ? fillBesideFrameSx(months) : FILL_BELOW_FRAME_SX;
87
+ return sideBySide ? { ...BESIDE_FRAME_SX, flex: '0 0 auto' } : BELOW_FRAME_SX;
88
+ };
89
+
90
+ export const fieldsColumnSx = (sideBySide: boolean, fill: boolean) =>
91
+ fill && sideBySide ? FILL_FIELDS_COLUMN : { flex: 1, minWidth: 0 };
92
+
@@ -3,7 +3,7 @@
3
3
  * the component so that file is a layout and this one is the behaviour — the
4
4
  * same split `Calendar.hooks.ts` uses next door.
5
5
  */
6
- import { useId, useMemo, useState } from 'react';
6
+ import { useEffect, useId, useMemo, useRef, useState } from 'react';
7
7
 
8
8
  import { toDayString, todayIn } from './DateRangePicker.dates';
9
9
  import {
@@ -19,6 +19,42 @@ import type {
19
19
  UseDateRangePickerArgs,
20
20
  } from './DateRangePicker.types';
21
21
 
22
+ /**
23
+ * Whether `value` is what the picker last handed out — or that tap's draft
24
+ * carried on by the consumer: every bound the tap chose kept, a bound it left
25
+ * open filled in (a consumer that keeps an end the tap would have dropped).
26
+ * Either way the grid under the pointer must not move, nor lose its focus.
27
+ */
28
+ function cameFromPicker(value: DateRangeDraft, emitted: DateRangeDraft | null): boolean {
29
+ if (emitted === null) return false;
30
+ const kept = (bound: 'from' | 'to'): boolean => emitted[bound] === null || emitted[bound] === value[bound];
31
+ return kept('from') && kept('to');
32
+ }
33
+
34
+ /**
35
+ * Bump the view nonce when the value moves and the picker did not move it —
36
+ * a consumer's own field committed a day. Skips the mount and the picker's own
37
+ * emissions, so a click in the grid never remounts the grid under it. An
38
+ * emission is read once: the change after it is the consumer's own.
39
+ */
40
+ function useFollowValue(
41
+ enabled: boolean,
42
+ value: DateRangeDraft,
43
+ lastEmitted: { current: DateRangeDraft | null },
44
+ setViewNonce: (update: (nonce: number) => number) => void,
45
+ ): void {
46
+ const previous = useRef(value);
47
+ useEffect(() => {
48
+ const before = previous.current;
49
+ previous.current = value;
50
+ if (!enabled || (before.from === value.from && before.to === value.to)) return;
51
+ const emitted = lastEmitted.current;
52
+ lastEmitted.current = null;
53
+ if (cameFromPicker(value, emitted)) return;
54
+ setViewNonce((nonce) => nonce + 1);
55
+ }, [enabled, value, lastEmitted, setViewNonce]);
56
+ }
57
+
22
58
  export function useDateRangePicker({
23
59
  value,
24
60
  onChange,
@@ -28,6 +64,7 @@ export function useDateRangePicker({
28
64
  weekStartsOn,
29
65
  quickRanges,
30
66
  messages,
67
+ followValue = false,
31
68
  }: UseDateRangePickerArgs): DateRangePickerState {
32
69
  const statusId = useId();
33
70
  // `Calendar` reads which month to open on from the range it is handed, and
@@ -44,12 +81,17 @@ export function useDateRangePicker({
44
81
  [quickRanges, today, weekStartsOn, maxRangeDays],
45
82
  );
46
83
  const status = useMemo(() => resolveDayRange(value, maxRangeDays), [value, maxRangeDays]);
84
+ // What the picker itself last handed out: a value equal to it came FROM here
85
+ // (a click in the grid), and must not move the grid under the pointer.
86
+ const lastEmitted = useRef<DateRangeDraft | null>(null);
87
+ useFollowValue(followValue, value, lastEmitted, setViewNonce);
47
88
 
48
89
  const emit = (
49
90
  next: DateRangeDraft,
50
91
  source: DateRangeChangeMeta['source'],
51
92
  quickRangeId?: string,
52
93
  ): void => {
94
+ lastEmitted.current = next;
53
95
  onChange(next, {
54
96
  source,
55
97
  ...(quickRangeId ? { quickRangeId } : {}),
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Where the typed half goes when the consumer asked for it BESIDE the months
3
+ * (`fieldsPlacement="beside"`), and how many months fit with it.
4
+ *
5
+ * Decided from the PICKER's own width, never the viewport's: the same form sits
6
+ * full width on a computer and in a 3/5 column beside a preview on the same
7
+ * computer, and only its own box knows which. The numbers are the design px the
8
+ * month grid is built to (`MONTH_SX` in `CalendarMonth`: 304 wide, 24 apart).
9
+ */
10
+ import type { Theme } from '@mui/material/styles/index.js';
11
+ import { useLayoutEffect, useState, type RefObject } from 'react';
12
+
13
+ import { remPx } from '../../../tokens/relative';
14
+
15
+ /**
16
+ * The design px the layout is computed from, rendered through the theme
17
+ * (`remPx`) so a density that shrinks the grid shrinks the thresholds with it.
18
+ * Framed months: the grid's intrinsic 304 a month and 24 between two
19
+ * (`MONTH_SX`), plus the frame's 16px padding a side and its hairline. The
20
+ * column beside: the `gap: 4` to the frame and the 220 a `dd/mm/aaaa` field
21
+ * and its label read well in.
22
+ */
23
+ const FRAMED_MONTHS: Readonly<Record<number, number>> = { 1: 338, 2: 666 };
24
+ const BESIDE_COLUMN = 252;
25
+
26
+ export type FieldsPlacement = 'beside' | 'below';
27
+
28
+ /** The design px a frame around `months` month grids needs (see FRAMED_MONTHS). */
29
+ export function framedMonthsWidth(months: number): number {
30
+ return FRAMED_MONTHS[months] ?? (FRAMED_MONTHS[2]! * months) / 2;
31
+ }
32
+
33
+ /**
34
+ * The layout for a picker `width` px wide asking for `requested` months, in
35
+ * order of preference: every month requested with the fields beside, then
36
+ * under them, then one month beside, then one under. A picker not measured yet
37
+ * (no `ResizeObserver`, a server render) keeps the default layout.
38
+ */
39
+ export function besideLayout(
40
+ width: number | null,
41
+ requested: number,
42
+ theme: Theme,
43
+ ): { months: number; placement: FieldsPlacement } {
44
+ if (width === null) return { months: requested, placement: 'below' };
45
+ const framed = (months: number): number => remPx(theme, framedMonthsWidth(months));
46
+ const beside = remPx(theme, BESIDE_COLUMN);
47
+ const counts = requested > 1 ? [requested, 1] : [requested];
48
+ for (const months of counts) {
49
+ if (width >= framed(months) + beside) return { months, placement: 'beside' };
50
+ if (width >= framed(months)) return { months, placement: 'below' };
51
+ }
52
+ return { months: 1, placement: 'below' };
53
+ }
54
+
55
+ /** The element's content width, kept current; null until measured or when disabled. */
56
+ export function useMeasuredWidth(ref: RefObject<HTMLElement | null>, enabled: boolean): number | null {
57
+ const [width, setWidth] = useState<number | null>(null);
58
+ useLayoutEffect(() => {
59
+ const element = ref.current;
60
+ if (!enabled || element === null || typeof ResizeObserver === 'undefined') return undefined;
61
+ const observer = new ResizeObserver((entries) => {
62
+ const measured = entries[0]?.contentRect.width;
63
+ if (measured) setWidth(Math.round(measured));
64
+ });
65
+ observer.observe(element);
66
+ return () => observer.disconnect();
67
+ }, [ref, enabled]);
68
+ return width;
69
+ }
@@ -45,6 +45,13 @@ interface DateRangePickerProps {
45
45
  messages?: Partial<DateRangePickerMessages>;
46
46
  dataTestId?: string; // default 'date-range-picker'
47
47
  className?: string;
48
+ // Opt-in, for a picker laid out IN a page (all off by default):
49
+ fieldsPlacement?: 'below' | 'beside'; // default 'below'
50
+ renderFields?: (args: { placement: 'beside' | 'below'; disabled: boolean }) => ReactNode;
51
+ openEnd?: boolean; // a start with no end is an answer
52
+ disabled?: boolean; // shown, not changeable (default false)
53
+ label?: string; // the disabled group's name (default: calendarLabel)
54
+ calendarLabels?: Partial<CalendarLabels>; // names for the month arrows
48
55
  }
49
56
  ```
50
57
 
@@ -144,8 +151,14 @@ mounts. The picker remounts it when a **quick pick** or a **typed date** moves
144
151
  the range, and never when a day inside the grid is clicked — a calendar that
145
152
  jumped under the pointer picking in it would be unusable.
146
153
 
147
- So the grid follows the range's **start**. Picking "This year" in August moves
148
- it to January, because that is where the range now begins.
154
+ So the grid follows the range's **start** — or its **end** when only the end is
155
+ chosen. Picking "This year" in August moves it to January, because that is
156
+ where the range now begins.
157
+
158
+ A consumer that owns the draft may complete a tap into a different draft than
159
+ the one the picker handed it (keeping an end the tap would have dropped). That
160
+ is still the tap's own result: the grid stays on its month and focus stays on
161
+ the tapped day. Only a change that drops a bound the tap chose moves the grid.
149
162
 
150
163
  ## Layout
151
164
 
@@ -158,6 +171,68 @@ There is no `size` prop. The day grid has a fixed metric that a size scale would
158
171
  not change, and a prop that only altered the padding of the quick entries would
159
172
  be a scale in name only.
160
173
 
174
+ ## A picker laid out in a page
175
+
176
+ The defaults above are a popover's: one framed block, fields underneath, a
177
+ summary line. A form that shows the range ALWAYS OPEN among its other fields
178
+ needs four more things, each opt-in so no existing screen changes:
179
+
180
+ - **`fieldsPlacement="beside"`** — the months get their own outlined frame and
181
+ the typed half sits on the page: in a column BESIDE the frame when the
182
+ picker's own width holds both, under it when it does not, and with one month
183
+ instead of two when two would not fit either. Measured on the picker
184
+ (`ResizeObserver`), never the viewport: a form column beside a preview is
185
+ narrow on the widest screen. The root carries `data-fields-placement`.
186
+ - **`renderFields({ placement, disabled })`** — the consumer's OWN fields instead of the
187
+ built-in pair, for a form whose fields carry rules this picker does not (a
188
+ half-typed date kept until submit, its own messages). The summary line goes
189
+ with the built-in pair: beside fields that say their own refusals it would
190
+ only repeat them. The calendar follows the value whenever the consumer moves
191
+ it, as it follows a typed date — never on a click in the grid.
192
+ - **`openEnd`** — a start with no end is a finished answer ("from this day
193
+ on"), and the summary says `messages.openEnded` (default `No end date.`)
194
+ instead of asking for the end. It does not repeat the date: the field beside
195
+ it shows it. `resolveDayRange` is unchanged; what an open end means is the
196
+ caller's.
197
+ - **`calendarLabels`** — names for the calendar's month arrows
198
+ (`PT_BR_UI_LABELS.calendar` in Portuguese); without them they stay unnamed,
199
+ as before. `PT_BR_UI_LABELS.dateRangePicker.openEnded` is the Portuguese
200
+ `openEnded`.
201
+ - **`disabled`** — the period is shown but cannot be changed now (a consumer
202
+ that cannot place its days, FUT-4482). Every day is disabled and a tap
203
+ writes nothing, the quick ranges are not offered, the built-in boxes are
204
+ disabled, `renderFields` receives `disabled: true` so the consumer's fields
205
+ follow, and the root is a `group` named by `label` (default: the calendar
206
+ label) carrying `aria-disabled`. The month arrows are disabled and today's
207
+ ring takes the disabled ink. The days INSIDE a shown range keep the
208
+ secondary ink (`text.secondary`), so the period stays legible on the band
209
+ (the disabled ink there was 1.56:1). That is the locked picker only: on a
210
+ live one, a day `isDateDisabled` blocks inside the range keeps the disabled
211
+ ink. The control cannot say why: say it beside the
212
+ picker, and make that sentence your fields' `aria-describedby`. **In a
213
+ popover the consumer disables its own trigger** — the button or field that
214
+ opens the popover is the consumer's, and this prop cannot reach it.
215
+ - **`showOutsideDays`, `todayIndicator`, `allowSameDayRange`** — `Calendar`'s
216
+ own options, passed through: hide the neighbouring months' days, ring today
217
+ (`'ring'`), or refuse one day as a whole range (a second tap on the start day
218
+ then does nothing). Defaults unchanged: drawn, bold, allowed.
219
+
220
+ Under the fields' row (`placement="below"`) the frame is as wide as its months
221
+ and centred, never stretched across the page around one month.
222
+
223
+ - **`fullWidth`** (with `fieldsPlacement="beside"`) — the frame's edges are the
224
+ picker's: under the fields it spans the picker, beside them it takes what the
225
+ fields' column leaves (never less than its months at full size), and that
226
+ column stops at 320 design px. The calendar's seven columns spread across the
227
+ frame; the day faces keep their 40 design px, and the rows stay 40 tall. Under
228
+ the fields the frame trims its side padding before a column drops under 40
229
+ design px (a phone's tap target). For a picker laid into a form section whose
230
+ heading and fields the frame must line up with. Ignored in the default
231
+ (popover) layout. Default off.
232
+ - **The in-page frame** is a card on the page: the raised surface role
233
+ (`surfaces(theme).raised`, `background.paper` unless the host states one) and the
234
+ default `Card`'s radius.
235
+
161
236
  ## Accessibility
162
237
 
163
238
  - The quick entries are native `<button>`s with `aria-pressed`; the active one
@@ -64,6 +64,7 @@ export function defaultMessages(): DateRangePickerMessages {
64
64
  to: 'End date',
65
65
  quickRanges: 'Quick ranges',
66
66
  incomplete: 'Choose both dates.',
67
+ openEnded: EN_US_UI_LABELS.dateRangePicker.openEnded,
67
68
  reversed: 'The end date must be on or after the start date.',
68
69
  overMax: ({ maxRangeDays }) => `Choose a range of at most ${maxRangeDays} days.`,
69
70
  summary: ({ from, to }) => `${isoToMasked(from, dayMask)} – ${isoToMasked(to, dayMask)}`,
@@ -72,14 +73,21 @@ export function defaultMessages(): DateRangePickerMessages {
72
73
  };
73
74
  }
74
75
 
75
- /** The line under the fields: the chosen window, or why there isn't one. */
76
+ /**
77
+ * The line under the fields: the chosen window, or why there isn't one. With
78
+ * `openEnd`, a start with no end is an answer of its own and is said as one.
79
+ */
76
80
  export function statusMessage(
77
81
  status: DateRangeStatus,
78
82
  messages: DateRangePickerMessages,
79
83
  maxRangeDays: number | undefined,
84
+ openEnd: { enabled: boolean; draft: DateRangeDraft } = { enabled: false, draft: { from: null, to: null } },
80
85
  ): string {
81
86
  if (status.ok) return messages.summary(status.window);
82
- if (status.problem === 'incomplete') return messages.incomplete;
87
+ if (status.problem === 'incomplete') {
88
+ const openEnded = openEnd.enabled && openEnd.draft.from !== null && openEnd.draft.to === null;
89
+ return openEnded ? (messages.openEnded ?? messages.incomplete) : messages.incomplete;
90
+ }
83
91
  if (status.problem === 'reversed') return messages.reversed;
84
92
  return messages.overMax({ maxRangeDays: maxRangeDays ?? status.days, days: status.days });
85
93
  }
@@ -27,34 +27,27 @@ import Paper from '@mui/material/Paper/index.js';
27
27
  import useMediaQuery from '@mui/material/useMediaQuery/index.js';
28
28
  import { useTheme } from '@mui/material/styles/index.js';
29
29
  import type { SxProps, Theme } from '@mui/material/styles/index.js';
30
- import React from 'react';
30
+ import React, { useRef } from 'react';
31
31
 
32
+ import type { CalendarLabels } from '../../../copy/labels';
32
33
  import { Calendar } from '../Calendar';
33
34
 
34
35
  import { toLocalDay } from './DateRangePicker.dates';
35
36
  import { useDateRangePicker } from './DateRangePicker.hooks';
37
+ import { CALENDAR_CLASS, FLAT_CALENDAR, fieldsColumnSx, frameSx } from './DateRangePicker.frame';
38
+ import { besideLayout, useMeasuredWidth, type FieldsPlacement } from './DateRangePicker.layout';
36
39
  import { DEFAULT_QUICK_RANGES } from './DateRangePicker.quick';
37
40
  import type { DateRangeDraft, DateRangePickerProps, WeekStart } from './DateRangePicker.types';
38
41
  import { DateRangeFields } from './DateRangePickerFields';
39
42
  import { DateRangeQuickList } from './DateRangePickerQuickList';
40
43
 
41
- const CALENDAR_CLASS = 'date-range-picker__calendar';
42
-
43
44
  const ROOT_SX: SxProps<Theme> = {
44
45
  display: 'inline-flex',
45
46
  flexDirection: 'column',
46
47
  gap: 2,
47
48
  p: 2,
48
49
  maxWidth: '100%',
49
- // `Calendar` renders its own `Paper` with 24px of padding. Nested in this one
50
- // that reads as a box inside a box, so the inner frame is flattened here
51
- // through the className hook the component exposes for exactly this.
52
- [`& .${CALENDAR_CLASS}`]: {
53
- p: 0,
54
- boxShadow: 'none',
55
- backgroundColor: 'transparent',
56
- backgroundImage: 'none',
57
- },
50
+ ...FLAT_CALENDAR,
58
51
  };
59
52
 
60
53
  const BODY_SX: SxProps<Theme> = {
@@ -132,6 +125,15 @@ function useMonthCount(requested: number | undefined): number | undefined {
132
125
  }
133
126
 
134
127
  /** The grid, in range mode — `Calendar`, never a second implementation of one. */
128
+ /** The calendar options a picker passes through untouched. */
129
+ type CalendarDisplay = Pick<
130
+ DateRangePickerProps,
131
+ 'showOutsideDays' | 'todayIndicator' | 'allowSameDayRange' | 'fullWidth' | 'disabled'
132
+ >;
133
+
134
+ /** Every day, for a picker that is `disabled`. */
135
+ const EVERY_DAY = (): boolean => true;
136
+
135
137
  function RangeCalendar({
136
138
  calendarLabel,
137
139
  picker,
@@ -140,7 +142,11 @@ function RangeCalendar({
140
142
  weekStartsOn,
141
143
  months,
142
144
  maxRangeDays,
145
+ labels,
146
+ display,
143
147
  }: {
148
+ labels: Partial<CalendarLabels> | undefined;
149
+ display: CalendarDisplay;
144
150
  picker: Picker;
145
151
  value: DateRangeDraft;
146
152
  locale: string;
@@ -169,6 +175,12 @@ function RangeCalendar({
169
175
  // The same ceiling the quick list is judged against, so the calendar
170
176
  // cannot hand back a window the control has just called too long.
171
177
  maxRangeLength={maxRangeDays}
178
+ {...(labels ? { labels } : {})}
179
+ showOutsideDays={display.showOutsideDays}
180
+ todayIndicator={display.todayIndicator}
181
+ allowSameDayRange={display.allowSameDayRange}
182
+ fullWidth={display.fullWidth}
183
+ {...(display.disabled === true ? { isDateDisabled: EVERY_DAY, navigationDisabled: true } : {})}
172
184
  />
173
185
  );
174
186
  }
@@ -200,59 +212,167 @@ function QuickColumn({
200
212
  );
201
213
  }
202
214
 
203
- export function DateRangePicker({
204
- value,
205
- onChange,
206
- timeZone,
207
- now,
208
- maxRangeDays,
209
- weekStartsOn = 0,
210
- quickRanges = DEFAULT_QUICK_RANGES,
211
- locale = 'en-US',
212
- numberOfMonths,
213
- messages,
214
- dataTestId = 'date-range-picker',
215
- className,
216
- }: DateRangePickerProps): React.JSX.Element {
215
+ /** The typed half: the consumer's own fields, or the built-in pair and its line. */
216
+ function TypedHalf({
217
+ props,
218
+ picker,
219
+ placement,
220
+ }: {
221
+ props: DateRangePickerProps;
222
+ picker: Picker;
223
+ placement: FieldsPlacement;
224
+ }): React.JSX.Element {
225
+ const disabled = props.disabled === true;
226
+ if (props.renderFields) return <>{props.renderFields({ placement, disabled })}</>;
227
+ return (
228
+ <DateRangeFields
229
+ value={props.value}
230
+ status={picker.status}
231
+ messages={picker.copy}
232
+ maxRangeDays={props.maxRangeDays}
233
+ onEdit={picker.editBound}
234
+ statusId={picker.statusId}
235
+ dataTestId={props.dataTestId ?? 'date-range-picker'}
236
+ openEnd={props.openEnd ?? false}
237
+ stacked={placement === 'beside'}
238
+ disabled={disabled}
239
+ />
240
+ );
241
+ }
242
+
243
+ /**
244
+ * How many months, and where the typed half goes. The default layout counts
245
+ * months by the viewport, as it always did; `beside` measures the picker.
246
+ */
247
+ function usePickerLayout(props: DateRangePickerProps): {
248
+ root: React.RefObject<HTMLDivElement | null>;
249
+ months: number | undefined;
250
+ placement: FieldsPlacement;
251
+ } {
252
+ const theme = useTheme();
253
+ const viewportMonths = useMonthCount(props.numberOfMonths);
254
+ const root = useRef<HTMLDivElement>(null);
255
+ const beside = props.fieldsPlacement === 'beside';
256
+ const width = useMeasuredWidth(root, beside);
257
+ if (!beside || width === null) return { root, months: viewportMonths, placement: 'below' };
258
+ const layout = besideLayout(width, props.numberOfMonths ?? 2, theme);
259
+ return { root, months: layout.months, placement: layout.placement };
260
+ }
261
+
262
+ /** The `beside` layout: the months in their own frame, the fields on the page. */
263
+ function InPageLayout({
264
+ props,
265
+ picker,
266
+ layout,
267
+ body,
268
+ }: {
269
+ props: DateRangePickerProps;
270
+ picker: Picker;
271
+ layout: ReturnType<typeof usePickerLayout>;
272
+ body: React.ReactNode;
273
+ }): React.JSX.Element {
274
+ const sideBySide = layout.placement === 'beside';
275
+ return (
276
+ <Box
277
+ ref={layout.root}
278
+ className={props.className}
279
+ data-testid={props.dataTestId ?? 'date-range-picker'}
280
+ data-fields-placement={layout.placement}
281
+ {...disabledGroup(props, picker)}
282
+ sx={{
283
+ display: 'flex',
284
+ flexDirection: sideBySide ? 'row' : 'column',
285
+ alignItems: sideBySide ? 'flex-start' : 'stretch',
286
+ gap: sideBySide ? 4 : 2,
287
+ width: '100%',
288
+ minWidth: 0,
289
+ }}
290
+ >
291
+ <Paper variant="outlined" sx={frameSx(sideBySide, props.fullWidth === true, layout.months ?? 1)}>
292
+ {body}
293
+ </Paper>
294
+ <Box sx={fieldsColumnSx(sideBySide, props.fullWidth === true)}>
295
+ <TypedHalf props={props} picker={picker} placement={layout.placement} />
296
+ </Box>
297
+ </Box>
298
+ );
299
+ }
300
+
301
+ /**
302
+ * A disabled picker's root is a named GROUP (review round 6): `aria-disabled`
303
+ * is only valid on an element with a role, and the name says what is off.
304
+ * Enabled, the root carries neither, as it always did.
305
+ */
306
+ function disabledGroup(props: DateRangePickerProps, picker: Picker) {
307
+ if (props.disabled !== true) return {};
308
+ return { role: 'group', 'aria-label': props.label ?? picker.copy.calendarLabel, 'aria-disabled': true } as const;
309
+ }
310
+
311
+ /** The default layout: one framed block, the typed half under the months. */
312
+ function PopoverLayout({
313
+ props,
314
+ picker,
315
+ body,
316
+ }: {
317
+ props: DateRangePickerProps;
318
+ picker: Picker;
319
+ body: React.ReactNode;
320
+ }): React.JSX.Element {
321
+ const typed = <TypedHalf props={props} picker={picker} placement="below" />;
322
+ return (
323
+ <Paper
324
+ className={props.className}
325
+ data-testid={props.dataTestId ?? 'date-range-picker'}
326
+ {...disabledGroup(props, picker)}
327
+ sx={ROOT_SX}
328
+ >
329
+ {body}
330
+ {props.renderFields ? typed : <Box sx={FIELDS_DIVIDER_SX}>{typed}</Box>}
331
+ </Paper>
332
+ );
333
+ }
334
+
335
+ export function DateRangePicker(props: DateRangePickerProps): React.JSX.Element {
336
+ const { value, maxRangeDays, weekStartsOn = 0, locale = 'en-US', dataTestId = 'date-range-picker' } = props;
217
337
  const picker = useDateRangePicker({
218
338
  value,
219
- onChange,
220
- timeZone,
221
- now,
339
+ onChange: props.onChange,
340
+ timeZone: props.timeZone,
341
+ now: props.now,
222
342
  maxRangeDays,
223
343
  weekStartsOn,
224
- quickRanges,
225
- messages,
344
+ quickRanges: props.quickRanges ?? DEFAULT_QUICK_RANGES,
345
+ messages: props.messages,
346
+ followValue: props.renderFields !== undefined,
226
347
  });
227
- const months = useMonthCount(numberOfMonths);
348
+ const layout = usePickerLayout(props);
228
349
 
229
- return (
230
- <Paper className={className} data-testid={dataTestId} sx={ROOT_SX}>
231
- <Box sx={BODY_SX}>
232
- <RangeCalendar
233
- calendarLabel={picker.copy.calendarLabel}
234
- picker={picker}
235
- value={value}
236
- locale={locale}
237
- weekStartsOn={weekStartsOn}
238
- months={months}
239
- maxRangeDays={maxRangeDays}
240
- />
350
+ const body = (
351
+ <Box sx={BODY_SX}>
352
+ <RangeCalendar
353
+ calendarLabel={picker.copy.calendarLabel}
354
+ picker={picker}
355
+ value={value}
356
+ locale={locale}
357
+ weekStartsOn={weekStartsOn}
358
+ months={layout.months}
359
+ maxRangeDays={maxRangeDays}
360
+ labels={props.calendarLabels}
361
+ // `fullWidth` fills the in-page frame; the popover's frame is as wide
362
+ // as its months, and a filling calendar in it spread past the quick
363
+ // column and the typed pair (FUT-4156, round 3).
364
+ display={{ ...props, fullWidth: props.fieldsPlacement === 'beside' && props.fullWidth === true }}
365
+ />
366
+ {props.disabled === true ? null : (
241
367
  <QuickColumn picker={picker} maxRangeDays={maxRangeDays} dataTestId={dataTestId} />
242
- </Box>
243
- <Box sx={FIELDS_DIVIDER_SX}>
244
- <DateRangeFields
245
- value={value}
246
- status={picker.status}
247
- messages={picker.copy}
248
- maxRangeDays={maxRangeDays}
249
- onEdit={picker.editBound}
250
- statusId={picker.statusId}
251
- dataTestId={dataTestId}
252
- />
253
- </Box>
254
- </Paper>
368
+ )}
369
+ </Box>
255
370
  );
371
+
372
+ if (props.fieldsPlacement === 'beside') {
373
+ return <InPageLayout props={props} picker={picker} layout={layout} body={body} />;
374
+ }
375
+ return <PopoverLayout props={props} picker={picker} body={body} />;
256
376
  }
257
377
 
258
378
  export default DateRangePicker;