@12-apps/ui 6.88.0 → 6.89.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 (533) 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 +3 -3
  6. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +8 -8
  7. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +8 -8
  8. package/dist/_internal/components/data-display/Carousel/Carousel.js +3 -3
  9. package/dist/_internal/components/data-display/Chart/SpecChart.js +3 -3
  10. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +34 -34
  11. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +47 -47
  12. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +3 -3
  13. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +9 -9
  14. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +3 -3
  15. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +6 -6
  16. package/dist/_internal/components/data-display/DataViews/base-list-card-layout.js +7 -7
  17. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +5 -5
  18. package/dist/_internal/components/data-display/DataViews/base-list-card.js +9 -9
  19. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +7 -7
  20. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +2 -2
  21. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +12 -12
  22. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +6 -6
  23. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +31 -31
  24. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +15 -15
  25. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +12 -12
  26. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +13 -13
  27. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +3 -3
  28. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +11 -11
  29. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +16 -16
  30. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +10 -10
  31. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +4 -4
  32. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +2 -2
  33. package/dist/_internal/components/data-display/DayRuler/DayRuler.en-US.js +8 -0
  34. package/dist/_internal/components/data-display/DayRuler/DayRuler.js +11 -11
  35. package/dist/_internal/components/data-display/DayRuler/DayRuler.keyboard.js +2 -2
  36. package/dist/_internal/components/data-display/DayRuler/DayRuler.labels.js +10 -0
  37. package/dist/_internal/components/data-display/DayRuler/DayRuler.parts.js +6 -6
  38. package/dist/_internal/components/data-display/DayRuler/DayRuler.pt-BR.js +8 -0
  39. package/dist/_internal/components/data-display/DayRuler/DayRuler.pt-BR.js.map +1 -0
  40. package/dist/_internal/components/data-display/DayRuler/useRulerDrag.js +2 -2
  41. package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -2
  42. package/dist/_internal/components/data-display/ErrorState/ErrorState.js +2 -2
  43. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +10 -10
  44. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +9 -9
  45. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +14 -14
  46. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +3 -3
  47. package/dist/_internal/components/data-display/LazyImage/LazyImage.js +2 -2
  48. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +7 -7
  49. package/dist/_internal/components/data-display/Lightbox/LightboxControls.js +2 -2
  50. package/dist/_internal/components/data-display/Lightbox/LightboxOverlay.js +3 -3
  51. package/dist/_internal/components/data-display/Lightbox/LightboxThumbnails.js +2 -2
  52. package/dist/_internal/components/data-display/LoadingState/LoadingState.js +2 -2
  53. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +3 -3
  54. package/dist/_internal/components/data-display/MapPreview/MapMarkers.js +2 -2
  55. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +8 -8
  56. package/dist/_internal/components/data-display/RegionMap/RegionMap.js +4 -4
  57. package/dist/_internal/components/data-display/RegionMap/RegionMapDrawing.js +2 -2
  58. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.en-US.js +8 -0
  59. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.en-US.js.map +1 -0
  60. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.js +9 -8
  61. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.keyboard.js +1 -1
  62. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.labels.js +10 -0
  63. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.labels.js.map +1 -0
  64. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.parts.js +5 -5
  65. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.pt-BR.js +8 -0
  66. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.pt-BR.js.map +1 -0
  67. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.styles.js +2 -2
  68. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleNameCell.js +3 -3
  69. package/dist/_internal/components/data-display/ScheduleGrid/schedule-name.styles.js +2 -2
  70. package/dist/_internal/components/data-display/ScheduleGrid/useScrollToDay.js +8 -0
  71. package/dist/_internal/components/data-display/ScheduleGrid/useScrollToDay.js.map +1 -0
  72. package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +4 -4
  73. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +3 -3
  74. package/dist/_internal/components/data-display/Sheet/Sheet.js +4 -4
  75. package/dist/_internal/components/data-display/Sheet/Sheet.parts.js +2 -2
  76. package/dist/_internal/components/data-display/Stepper/Stepper.js +2 -2
  77. package/dist/_internal/components/data-display/Table/Table.js +3 -3
  78. package/dist/_internal/components/data-display/Table/TableParts.hooks.js +2 -2
  79. package/dist/_internal/components/data-display/Table/TableParts.js +2 -2
  80. package/dist/_internal/components/data-display/Timeline/Timeline.js +2 -2
  81. package/dist/_internal/components/data-display/index.js +87 -74
  82. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +5 -5
  83. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.parts.js +4 -4
  84. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +6 -6
  85. package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +5 -5
  86. package/dist/_internal/components/feedback/Dialog/Dialog.js +2 -2
  87. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +3 -3
  88. package/dist/_internal/components/feedback/Sonner/Sonner.js +2 -2
  89. package/dist/_internal/components/feedback/StackedModal/StackedModal.js +3 -3
  90. package/dist/_internal/components/feedback/StackedModal/StackedModal.parts.js +2 -2
  91. package/dist/_internal/components/feedback/Toast/Toast.js +2 -2
  92. package/dist/_internal/components/feedback/index.js +13 -13
  93. package/dist/_internal/components/form/Calendar/Calendar.js +2 -2
  94. package/dist/_internal/components/form/Command/Command.hooks.js +2 -2
  95. package/dist/_internal/components/form/Command/Command.js +4 -4
  96. package/dist/_internal/components/form/Command/Command.parts.js +2 -2
  97. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +3 -3
  98. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +6 -6
  99. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +2 -2
  100. package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +3 -3
  101. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.dom.js +2 -2
  102. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.format.js +3 -3
  103. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.hooks.js +4 -4
  104. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +5 -5
  105. package/dist/_internal/components/form/index.js +13 -13
  106. package/dist/_internal/components/form/total-form/FormErrorSnackbar.js +3 -3
  107. package/dist/_internal/components/index.js +133 -120
  108. package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +2 -2
  109. package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +3 -3
  110. package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +2 -2
  111. package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +2 -2
  112. package/dist/_internal/components/layout/Dashboard/Dashboard.js +2 -2
  113. package/dist/_internal/components/layout/Drawer/Drawer.js +2 -2
  114. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +2 -2
  115. package/dist/_internal/components/layout/TableFilter/TableFilter.js +2 -2
  116. package/dist/_internal/components/layout/index.js +9 -9
  117. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +6 -6
  118. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +2 -2
  119. package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.js +2 -2
  120. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +3 -3
  121. package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +2 -2
  122. package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +4 -4
  123. package/dist/_internal/components/navigation/SectionNav/SectionNav.js +5 -5
  124. package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +3 -3
  125. package/dist/_internal/components/navigation/index.js +15 -15
  126. package/dist/_internal/components/typography/Code/Code.js +2 -2
  127. package/dist/_internal/components/typography/index.js +2 -2
  128. package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.js +2 -2
  129. package/dist/_internal/components/utility/InfiniteScroll/InfiniteScroll.js +3 -3
  130. package/dist/_internal/components/utility/InfiniteScroll/InfiniteScroll.parts.js +2 -2
  131. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +2 -2
  132. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +5 -5
  133. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +3 -3
  134. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +4 -4
  135. package/dist/_internal/components/utility/index.js +8 -8
  136. package/dist/_internal/en-US.labels.js +1 -1
  137. package/dist/_internal/pt-BR.labels.js +1 -1
  138. package/dist/_internal/social-login-button/social-login-button.js +2 -2
  139. package/dist/_internal/user-avatar/user-avatar.js +4 -4
  140. package/dist/charts.js +11 -11
  141. package/dist/{chunk-C3MXURP3.js → chunk-2M3W6ACW.js} +2 -2
  142. package/dist/{chunk-7IBFGOLF.js → chunk-3YFDGFEK.js} +2 -2
  143. package/dist/{chunk-O2MR6U7Q.js → chunk-3Z6JX7UN.js} +2 -2
  144. package/dist/{chunk-ZIA774ZW.js → chunk-4IG73U2X.js} +2 -2
  145. package/dist/{chunk-VQ7YNAK2.js → chunk-4QGMUHAU.js} +2 -2
  146. package/dist/{chunk-TYGVNTUP.js → chunk-5CP5Z3YU.js} +2 -2
  147. package/dist/chunk-5EP37B4F.js +57 -0
  148. package/dist/chunk-5EP37B4F.js.map +1 -0
  149. package/dist/{chunk-WLC56R2I.js → chunk-5KK3I42O.js} +6 -6
  150. package/dist/{chunk-B7GGLFJB.js → chunk-5RSK5M6M.js} +2 -2
  151. package/dist/{chunk-WUBMJSBR.js → chunk-5S5K73I6.js} +2 -2
  152. package/dist/{chunk-EE6DJPB7.js → chunk-6HXNFNOB.js} +4 -4
  153. package/dist/{chunk-XALFZ25A.js → chunk-7F6D73NL.js} +4 -4
  154. package/dist/{chunk-2Q2DUGH7.js → chunk-7QKFMMWK.js} +2 -2
  155. package/dist/{chunk-UBMH5MED.js → chunk-7QKIL5YF.js} +4 -4
  156. package/dist/{chunk-6BQ3YKLD.js → chunk-7W5X3KQ2.js} +2 -2
  157. package/dist/{chunk-6HZYRKOB.js → chunk-A5OERY43.js} +4 -4
  158. package/dist/{chunk-AWUB3T7C.js → chunk-ABVIMFSD.js} +2 -2
  159. package/dist/{chunk-I6CP3ZTP.js → chunk-AJ6KFHEE.js} +2 -2
  160. package/dist/{chunk-EVIQUBC6.js → chunk-AKE6KVQG.js} +4 -4
  161. package/dist/{chunk-AXGQB24R.js → chunk-ALOEOGQV.js} +2 -2
  162. package/dist/{chunk-WHOD6LVN.js → chunk-B32XH7NK.js} +3 -3
  163. package/dist/{chunk-3B4NXP4N.js → chunk-B5STMM3R.js} +3 -3
  164. package/dist/{chunk-B5SBDLRS.js → chunk-BAQ3ITZV.js} +2 -2
  165. package/dist/{chunk-HWJ3FLZY.js → chunk-BEHT4IHH.js} +5 -5
  166. package/dist/{chunk-BBBHPK2Q.js → chunk-BMTIBQQC.js} +6 -6
  167. package/dist/{chunk-XEKJ7L7I.js → chunk-BNBWUXT3.js} +2 -2
  168. package/dist/{chunk-LSGZLFKX.js → chunk-BO6MT2S2.js} +5 -5
  169. package/dist/{chunk-64UNVW6D.js → chunk-BP3ZKIPE.js} +4 -4
  170. package/dist/{chunk-B7ZAEZJW.js → chunk-C347NNZJ.js} +2 -2
  171. package/dist/{chunk-AEAVVKGY.js → chunk-CAOL4AIB.js} +2 -2
  172. package/dist/{chunk-OZYUE2BI.js → chunk-CJUK32UH.js} +4 -4
  173. package/dist/{chunk-N2KHISGH.js → chunk-COK65GX2.js} +2 -2
  174. package/dist/{chunk-YLZXIR6B.js → chunk-COKPPU42.js} +11 -11
  175. package/dist/{chunk-D3B4V44W.js → chunk-CY4XIZNW.js} +2 -2
  176. package/dist/chunk-D3OXTS7Y.js +14 -0
  177. package/dist/chunk-D3OXTS7Y.js.map +1 -0
  178. package/dist/{chunk-5YVMFK7Y.js → chunk-DAFFZED3.js} +2 -2
  179. package/dist/{chunk-UMOHHWXY.js → chunk-DAHSKQBV.js} +2 -2
  180. package/dist/chunk-DDGYTY4E.js +17 -0
  181. package/dist/chunk-DDGYTY4E.js.map +1 -0
  182. package/dist/{chunk-HED2CZDZ.js → chunk-E2UOEI7N.js} +2 -2
  183. package/dist/{chunk-ZLIES3XR.js → chunk-E5OBAS3U.js} +2 -2
  184. package/dist/{chunk-MAYAJXO6.js → chunk-EKSJES5E.js} +4 -4
  185. package/dist/{chunk-AD6GRJFV.js → chunk-EOIRU62W.js} +3 -3
  186. package/dist/chunk-ESOM4KVQ.js +1 -0
  187. package/dist/chunk-ESOM4KVQ.js.map +1 -0
  188. package/dist/{chunk-CSJ7WNXU.js → chunk-EUR2ORTN.js} +2 -2
  189. package/dist/{chunk-TOLCZ4XT.js → chunk-EWFBDAB7.js} +2 -2
  190. package/dist/{chunk-IQ5MBELJ.js → chunk-EXVCVXFX.js} +7 -7
  191. package/dist/{chunk-RZTUMBRD.js → chunk-EYFDIUVR.js} +2 -2
  192. package/dist/{chunk-NTCWIMIU.js → chunk-F7LBTMCA.js} +2 -2
  193. package/dist/{chunk-MLIBJWQZ.js → chunk-FKF34YJV.js} +11 -11
  194. package/dist/chunk-FKF34YJV.js.map +1 -0
  195. package/dist/{chunk-L5GZZUTY.js → chunk-FORQEHRQ.js} +2 -2
  196. package/dist/{chunk-TOOEEQ46.js → chunk-HBH7V3IP.js} +2 -2
  197. package/dist/{chunk-P5C4DTO4.js → chunk-HNEZWVDR.js} +3 -3
  198. package/dist/chunk-HNW7IZPV.js +17 -0
  199. package/dist/chunk-HNW7IZPV.js.map +1 -0
  200. package/dist/{chunk-MJDSXQV7.js → chunk-HUXAIQC5.js} +2 -2
  201. package/dist/{chunk-YAQE7QVC.js → chunk-I4DG3PP4.js} +2 -2
  202. package/dist/{chunk-KLLHCPA2.js → chunk-IMYKJTVX.js} +2 -2
  203. package/dist/{chunk-CTN4BRAH.js → chunk-JIEVKHOH.js} +7 -7
  204. package/dist/chunk-K3IB7S7Q.js +14 -0
  205. package/dist/chunk-K3IB7S7Q.js.map +1 -0
  206. package/dist/{chunk-I62SKY4E.js → chunk-K6FCSB6T.js} +4 -4
  207. package/dist/{chunk-2KBATUOZ.js → chunk-K7IDOTSU.js} +3 -3
  208. package/dist/{chunk-T7NEXLW6.js → chunk-KES3HNSU.js} +2 -2
  209. package/dist/{chunk-JJFLCEJJ.js → chunk-KF3Q3C3P.js} +2 -2
  210. package/dist/{chunk-2ENMRK3U.js → chunk-L5KPBMMF.js} +2 -2
  211. package/dist/{chunk-Y4ZWPOUV.js → chunk-LLPPIO3K.js} +2 -2
  212. package/dist/{chunk-ZCNR4DN5.js → chunk-LOLYBFYY.js} +5 -5
  213. package/dist/{chunk-D3SIZ2CX.js → chunk-LV6AD6XC.js} +3 -3
  214. package/dist/chunk-LVZYKETN.js +15 -0
  215. package/dist/chunk-LVZYKETN.js.map +1 -0
  216. package/dist/{chunk-I5SIHPOG.js → chunk-LXIPBHNJ.js} +2 -2
  217. package/dist/chunk-M6K6PCOS.js +1 -0
  218. package/dist/chunk-M6K6PCOS.js.map +1 -0
  219. package/dist/{chunk-3EKY63LD.js → chunk-MSJP2AEN.js} +2 -2
  220. package/dist/{chunk-GCR6VE5S.js → chunk-MW7P2C2C.js} +2 -2
  221. package/dist/{chunk-ARPOWDEO.js → chunk-MX2RF34M.js} +3 -3
  222. package/dist/chunk-MX2RF34M.js.map +1 -0
  223. package/dist/{chunk-L62HC3UB.js → chunk-N557OEZR.js} +2 -2
  224. package/dist/{chunk-DRJGHTQU.js → chunk-NASLJO2R.js} +2 -2
  225. package/dist/chunk-NMXYHPOG.js +15 -0
  226. package/dist/chunk-NMXYHPOG.js.map +1 -0
  227. package/dist/{chunk-UNCDOLF5.js → chunk-NQDOKJLI.js} +2 -2
  228. package/dist/{chunk-2CRNOJGL.js → chunk-NXQ6PXLJ.js} +3 -3
  229. package/dist/{chunk-UIJU5X26.js → chunk-O3OU3ED7.js} +17 -10
  230. package/dist/chunk-O3OU3ED7.js.map +1 -0
  231. package/dist/{chunk-FKS2PNJF.js → chunk-O63ZROSY.js} +9 -9
  232. package/dist/{chunk-Y6IIWGZB.js → chunk-OBA75Y5O.js} +2 -2
  233. package/dist/{chunk-ICHM2LQA.js → chunk-OKRITX4S.js} +8 -8
  234. package/dist/{chunk-Z7CBLQQR.js → chunk-OLHAUGVQ.js} +2 -2
  235. package/dist/{chunk-5QUH53HV.js → chunk-OWRQOYUE.js} +6 -6
  236. package/dist/{chunk-W676GY42.js → chunk-P772HCHI.js} +4 -4
  237. package/dist/{chunk-MLAIXRVL.js → chunk-PEVBSNCD.js} +2 -2
  238. package/dist/{chunk-2UNZG4JK.js → chunk-PNZH6CDD.js} +2 -2
  239. package/dist/{chunk-YFG6XXBB.js → chunk-PVIQDBUN.js} +2 -2
  240. package/dist/{chunk-GS3QDXDP.js → chunk-Q2ERGAQO.js} +2 -2
  241. package/dist/{chunk-7XUQJJPK.js → chunk-QCYQL3ST.js} +2 -2
  242. package/dist/{chunk-E6K2UZGR.js → chunk-QKOJ4637.js} +3 -3
  243. package/dist/{chunk-XRVXQJNB.js → chunk-QRRWLLXW.js} +3 -3
  244. package/dist/{chunk-WMTW4JXT.js → chunk-RYJ6XGFA.js} +9 -5
  245. package/dist/chunk-RYJ6XGFA.js.map +1 -0
  246. package/dist/{chunk-IP424VZD.js → chunk-S4ITA3FA.js} +8 -8
  247. package/dist/{chunk-UIHPFELH.js → chunk-S6D7NOV7.js} +2 -2
  248. package/dist/{chunk-WLLUARTC.js → chunk-T2G4LDU5.js} +2 -2
  249. package/dist/{chunk-YKONJEI4.js → chunk-T5RFH2T5.js} +2 -2
  250. package/dist/{chunk-LZKS3NER.js → chunk-T77OVQEO.js} +2 -2
  251. package/dist/{chunk-4PZZJ2AE.js → chunk-TAHO2LCU.js} +3 -3
  252. package/dist/{chunk-62PTREG5.js → chunk-TI4FGQYV.js} +2 -2
  253. package/dist/{chunk-PSIUFPXA.js → chunk-TJUWSQYQ.js} +1 -18
  254. package/dist/{chunk-PSIUFPXA.js.map → chunk-TJUWSQYQ.js.map} +1 -1
  255. package/dist/{chunk-3KMP2F4R.js → chunk-TYXFFNPM.js} +10 -10
  256. package/dist/{chunk-AC7K7IJE.js → chunk-TZ44F6W7.js} +2 -2
  257. package/dist/{chunk-YGQ2DLIM.js → chunk-UBVKMM3V.js} +2 -2
  258. package/dist/{chunk-N3C4J6Z2.js → chunk-UQ5GJPVZ.js} +3 -3
  259. package/dist/{chunk-V2QTL6VI.js → chunk-UYKIUUWP.js} +2 -2
  260. package/dist/{chunk-3STNOYYO.js → chunk-VM4UYCD4.js} +2 -2
  261. package/dist/{chunk-EXKEPOL7.js → chunk-WAO7UQRS.js} +4 -4
  262. package/dist/{chunk-IMMPY4Q7.js → chunk-WJMSND5Q.js} +3 -3
  263. package/dist/{chunk-H5R2EZYI.js → chunk-WNNA6YYE.js} +4 -4
  264. package/dist/{chunk-SFNVAM7I.js → chunk-WQO5WONV.js} +3 -3
  265. package/dist/{chunk-NQUYBJKJ.js → chunk-WW3F7DCX.js} +2 -2
  266. package/dist/{chunk-XNIHDUOP.js → chunk-WYRH6OSN.js} +2 -2
  267. package/dist/{chunk-WTACWJSF.js → chunk-X4J576GR.js} +2 -2
  268. package/dist/{chunk-55PFFAAY.js → chunk-XCUHGPPZ.js} +2 -2
  269. package/dist/{chunk-ZF2LZVDO.js → chunk-XE33EZVS.js} +3 -3
  270. package/dist/{chunk-LR56OANO.js → chunk-XLU5WFSY.js} +6 -6
  271. package/dist/{native/chunks/chunk-E5UA5XVN.js → chunk-XOXXG7Q5.js} +1 -18
  272. package/dist/chunk-XOXXG7Q5.js.map +1 -0
  273. package/dist/{chunk-BK3YLYL6.js → chunk-Y3F2F36I.js} +4 -4
  274. package/dist/chunk-Y3F2F36I.js.map +1 -0
  275. package/dist/{chunk-RFMQBIE6.js → chunk-YBAK2WN5.js} +4 -4
  276. package/dist/{chunk-DM57YWZH.js → chunk-YGLAGY74.js} +2 -2
  277. package/dist/{chunk-YWBPASB2.js → chunk-YNVTUQ5B.js} +2 -2
  278. package/dist/{chunk-AN37BIIO.js → chunk-YOLLISEY.js} +2 -2
  279. package/dist/{chunk-CVB26LLB.js → chunk-ZANWHTXH.js} +2 -2
  280. package/dist/{chunk-MPUOLKFT.js → chunk-ZHKCE5LR.js} +1 -1
  281. package/dist/chunk-ZHKCE5LR.js.map +1 -0
  282. package/dist/{chunk-G3G5W4OF.js → chunk-ZYZPSBNQ.js} +3 -3
  283. package/dist/data-display/AlertDialog.js +3 -3
  284. package/dist/data-display/AsyncStateContainer.js +5 -5
  285. package/dist/data-display/Avatar.js +3 -3
  286. package/dist/data-display/CardKit.js +9 -9
  287. package/dist/data-display/Carousel.js +3 -3
  288. package/dist/data-display/Chart.js +11 -11
  289. package/dist/data-display/DataViews.js +54 -54
  290. package/dist/data-display/DayRuler.js +17 -12
  291. package/dist/data-display/EmptyState.js +2 -2
  292. package/dist/data-display/ErrorState.js +2 -2
  293. package/dist/data-display/FleetMap.js +14 -14
  294. package/dist/data-display/HoverCard.js +3 -3
  295. package/dist/data-display/LazyImage.js +2 -2
  296. package/dist/data-display/Lightbox.js +7 -7
  297. package/dist/data-display/LoadingState.js +2 -2
  298. package/dist/data-display/MapPreview.js +8 -8
  299. package/dist/data-display/RegionMap.js +5 -5
  300. package/dist/data-display/ScheduleGrid.js +15 -9
  301. package/dist/data-display/SectionOnboarding.js +4 -4
  302. package/dist/data-display/Sheet.js +4 -4
  303. package/dist/data-display/Stepper.js +2 -2
  304. package/dist/data-display/Table.js +3 -3
  305. package/dist/data-display/Timeline.js +2 -2
  306. package/dist/en-US.js +1 -1
  307. package/dist/feedback/ConfirmAction.js +7 -7
  308. package/dist/feedback/Dialog.js +2 -2
  309. package/dist/feedback/SequenceResolver.js +3 -3
  310. package/dist/feedback/Sonner.js +2 -2
  311. package/dist/feedback/StackedModal.js +3 -3
  312. package/dist/feedback/Toast.js +2 -2
  313. package/dist/form/Calendar.js +2 -2
  314. package/dist/form/Command.js +4 -4
  315. package/dist/form/DateRangePicker.js +6 -6
  316. package/dist/form/RichTextEditor.js +5 -5
  317. package/dist/form/total-form.js +3 -3
  318. package/dist/layout/ContentToolbar.js +6 -6
  319. package/dist/layout/Dashboard.js +2 -2
  320. package/dist/layout/Drawer.js +2 -2
  321. package/dist/layout/SettingsLayout.js +2 -2
  322. package/dist/layout/TableFilter.js +2 -2
  323. package/dist/locales.js +2 -2
  324. package/dist/native/chunks/{chunk-4G634E3Q.js → chunk-FXA5DLKR.js} +3 -3
  325. package/dist/native/chunks/{chunk-WLG3KT2V.js → chunk-IN3XZ7EK.js} +2 -2
  326. package/dist/{chunk-57FIUJJJ.js → native/chunks/chunk-QHW7JEPZ.js} +1 -18
  327. package/dist/native/chunks/chunk-QHW7JEPZ.js.map +1 -0
  328. package/dist/native/data-display/Avatar.js +1 -1
  329. package/dist/native/data-display/Badge.js +1 -1
  330. package/dist/native/data-display/Chip.js +1 -1
  331. package/dist/native/data-display/EmptyState.js +3 -3
  332. package/dist/native/data-display/ErrorState.js +2 -2
  333. package/dist/native/data-display/FleetMap.js +3 -3
  334. package/dist/native/data-display/LoadingState.js +1 -1
  335. package/dist/native/feedback/Dialog.js +1 -1
  336. package/dist/native/form/Button.js +2 -2
  337. package/dist/native/form/Checkbox.js +1 -1
  338. package/dist/native/form/Input.js +1 -1
  339. package/dist/native/form/Switch.js +1 -1
  340. package/dist/navigation/AppHeader.js +8 -8
  341. package/dist/navigation/Breadcrumbs.js +2 -2
  342. package/dist/navigation/NavigationMenu.js +3 -3
  343. package/dist/navigation/SectionNav.js +5 -5
  344. package/dist/pt-BR.js +1 -1
  345. package/dist/social-login-button.js +2 -2
  346. package/dist/types/components/data-display/DayRuler/DayRuler.en-US.d.ts +4 -0
  347. package/dist/types/components/data-display/DayRuler/DayRuler.en-US.d.ts.map +1 -0
  348. package/dist/types/components/data-display/DayRuler/DayRuler.keyboard.d.ts +1 -1
  349. package/dist/types/components/data-display/DayRuler/DayRuler.keyboard.d.ts.map +1 -1
  350. package/dist/types/components/data-display/DayRuler/DayRuler.labels.d.ts +24 -0
  351. package/dist/types/components/data-display/DayRuler/DayRuler.labels.d.ts.map +1 -0
  352. package/dist/types/components/data-display/DayRuler/DayRuler.pt-BR.d.ts +4 -0
  353. package/dist/types/components/data-display/DayRuler/DayRuler.pt-BR.d.ts.map +1 -0
  354. package/dist/types/components/data-display/DayRuler/DayRuler.types.d.ts +1 -1
  355. package/dist/types/components/data-display/DayRuler/DayRuler.types.d.ts.map +1 -1
  356. package/dist/types/components/data-display/DayRuler/index.d.ts +2 -1
  357. package/dist/types/components/data-display/DayRuler/index.d.ts.map +1 -1
  358. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.d.ts.map +1 -1
  359. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.en-US.d.ts +4 -0
  360. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.en-US.d.ts.map +1 -0
  361. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.keyboard.d.ts +1 -1
  362. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.keyboard.d.ts.map +1 -1
  363. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.labels.d.ts +26 -0
  364. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.labels.d.ts.map +1 -0
  365. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.parts.d.ts +1 -1
  366. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.parts.d.ts.map +1 -1
  367. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.pt-BR.d.ts +4 -0
  368. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.pt-BR.d.ts.map +1 -0
  369. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.styles.d.ts +4 -1
  370. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.styles.d.ts.map +1 -1
  371. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.types.d.ts +12 -1
  372. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.types.d.ts.map +1 -1
  373. package/dist/types/components/data-display/ScheduleGrid/index.d.ts +2 -1
  374. package/dist/types/components/data-display/ScheduleGrid/index.d.ts.map +1 -1
  375. package/dist/types/components/data-display/ScheduleGrid/useScrollToDay.d.ts +26 -0
  376. package/dist/types/components/data-display/ScheduleGrid/useScrollToDay.d.ts.map +1 -0
  377. package/dist/types/copy/labels.d.ts +0 -34
  378. package/dist/types/copy/labels.d.ts.map +1 -1
  379. package/dist/types/en-US.labels.d.ts.map +1 -1
  380. package/dist/types/pt-BR.labels.d.ts.map +1 -1
  381. package/dist/types-native/copy/labels.d.ts +0 -34
  382. package/dist/types-native/copy/labels.d.ts.map +1 -1
  383. package/dist/types-native/en-US.labels.d.ts.map +1 -1
  384. package/dist/typography/Code.js +2 -2
  385. package/dist/user-avatar.js +4 -4
  386. package/dist/utility/AnimatedIcon.js +2 -2
  387. package/dist/utility/InfiniteScroll.js +3 -3
  388. package/dist/utility/WorkflowStep.js +5 -5
  389. package/package.json +1 -1
  390. package/src/components/data-display/DayRuler/DayRuler.en-US.ts +11 -0
  391. package/src/components/data-display/DayRuler/DayRuler.keyboard.ts +1 -1
  392. package/src/components/data-display/DayRuler/DayRuler.labels.ts +37 -0
  393. package/src/components/data-display/DayRuler/DayRuler.md +1 -1
  394. package/src/components/data-display/DayRuler/DayRuler.pt-BR.ts +11 -0
  395. package/src/components/data-display/DayRuler/DayRuler.tsx +2 -2
  396. package/src/components/data-display/DayRuler/DayRuler.types.ts +1 -1
  397. package/src/components/data-display/DayRuler/index.ts +2 -1
  398. package/src/components/data-display/ScheduleGrid/ScheduleGrid.en-US.ts +12 -0
  399. package/src/components/data-display/ScheduleGrid/ScheduleGrid.keyboard.ts +1 -1
  400. package/src/components/data-display/ScheduleGrid/ScheduleGrid.labels.ts +39 -0
  401. package/src/components/data-display/ScheduleGrid/ScheduleGrid.md +5 -1
  402. package/src/components/data-display/ScheduleGrid/ScheduleGrid.parts.tsx +1 -1
  403. package/src/components/data-display/ScheduleGrid/ScheduleGrid.pt-BR.ts +12 -0
  404. package/src/components/data-display/ScheduleGrid/ScheduleGrid.styles.ts +9 -2
  405. package/src/components/data-display/ScheduleGrid/ScheduleGrid.tsx +9 -2
  406. package/src/components/data-display/ScheduleGrid/ScheduleGrid.types.ts +12 -1
  407. package/src/components/data-display/ScheduleGrid/index.ts +2 -1
  408. package/src/components/data-display/ScheduleGrid/useScrollToDay.ts +99 -0
  409. package/src/copy/labels.ts +0 -36
  410. package/src/en-US.labels.ts +0 -17
  411. package/src/pt-BR.labels.ts +0 -17
  412. package/dist/chunk-57FIUJJJ.js.map +0 -1
  413. package/dist/chunk-7RXL4ONS.js +0 -1
  414. package/dist/chunk-ARPOWDEO.js.map +0 -1
  415. package/dist/chunk-BK3YLYL6.js.map +0 -1
  416. package/dist/chunk-MLIBJWQZ.js.map +0 -1
  417. package/dist/chunk-MPUOLKFT.js.map +0 -1
  418. package/dist/chunk-TTRWOI6Z.js +0 -1
  419. package/dist/chunk-UIJU5X26.js.map +0 -1
  420. package/dist/chunk-WMTW4JXT.js.map +0 -1
  421. package/dist/native/chunks/chunk-E5UA5XVN.js.map +0 -1
  422. /package/dist/{chunk-7RXL4ONS.js.map → _internal/components/data-display/DayRuler/DayRuler.en-US.js.map} +0 -0
  423. /package/dist/{chunk-TTRWOI6Z.js.map → _internal/components/data-display/DayRuler/DayRuler.labels.js.map} +0 -0
  424. /package/dist/{chunk-C3MXURP3.js.map → chunk-2M3W6ACW.js.map} +0 -0
  425. /package/dist/{chunk-7IBFGOLF.js.map → chunk-3YFDGFEK.js.map} +0 -0
  426. /package/dist/{chunk-O2MR6U7Q.js.map → chunk-3Z6JX7UN.js.map} +0 -0
  427. /package/dist/{chunk-ZIA774ZW.js.map → chunk-4IG73U2X.js.map} +0 -0
  428. /package/dist/{chunk-VQ7YNAK2.js.map → chunk-4QGMUHAU.js.map} +0 -0
  429. /package/dist/{chunk-TYGVNTUP.js.map → chunk-5CP5Z3YU.js.map} +0 -0
  430. /package/dist/{chunk-WLC56R2I.js.map → chunk-5KK3I42O.js.map} +0 -0
  431. /package/dist/{chunk-B7GGLFJB.js.map → chunk-5RSK5M6M.js.map} +0 -0
  432. /package/dist/{chunk-WUBMJSBR.js.map → chunk-5S5K73I6.js.map} +0 -0
  433. /package/dist/{chunk-EE6DJPB7.js.map → chunk-6HXNFNOB.js.map} +0 -0
  434. /package/dist/{chunk-XALFZ25A.js.map → chunk-7F6D73NL.js.map} +0 -0
  435. /package/dist/{chunk-2Q2DUGH7.js.map → chunk-7QKFMMWK.js.map} +0 -0
  436. /package/dist/{chunk-UBMH5MED.js.map → chunk-7QKIL5YF.js.map} +0 -0
  437. /package/dist/{chunk-6BQ3YKLD.js.map → chunk-7W5X3KQ2.js.map} +0 -0
  438. /package/dist/{chunk-6HZYRKOB.js.map → chunk-A5OERY43.js.map} +0 -0
  439. /package/dist/{chunk-AWUB3T7C.js.map → chunk-ABVIMFSD.js.map} +0 -0
  440. /package/dist/{chunk-I6CP3ZTP.js.map → chunk-AJ6KFHEE.js.map} +0 -0
  441. /package/dist/{chunk-EVIQUBC6.js.map → chunk-AKE6KVQG.js.map} +0 -0
  442. /package/dist/{chunk-AXGQB24R.js.map → chunk-ALOEOGQV.js.map} +0 -0
  443. /package/dist/{chunk-WHOD6LVN.js.map → chunk-B32XH7NK.js.map} +0 -0
  444. /package/dist/{chunk-3B4NXP4N.js.map → chunk-B5STMM3R.js.map} +0 -0
  445. /package/dist/{chunk-B5SBDLRS.js.map → chunk-BAQ3ITZV.js.map} +0 -0
  446. /package/dist/{chunk-HWJ3FLZY.js.map → chunk-BEHT4IHH.js.map} +0 -0
  447. /package/dist/{chunk-BBBHPK2Q.js.map → chunk-BMTIBQQC.js.map} +0 -0
  448. /package/dist/{chunk-XEKJ7L7I.js.map → chunk-BNBWUXT3.js.map} +0 -0
  449. /package/dist/{chunk-LSGZLFKX.js.map → chunk-BO6MT2S2.js.map} +0 -0
  450. /package/dist/{chunk-64UNVW6D.js.map → chunk-BP3ZKIPE.js.map} +0 -0
  451. /package/dist/{chunk-B7ZAEZJW.js.map → chunk-C347NNZJ.js.map} +0 -0
  452. /package/dist/{chunk-AEAVVKGY.js.map → chunk-CAOL4AIB.js.map} +0 -0
  453. /package/dist/{chunk-OZYUE2BI.js.map → chunk-CJUK32UH.js.map} +0 -0
  454. /package/dist/{chunk-N2KHISGH.js.map → chunk-COK65GX2.js.map} +0 -0
  455. /package/dist/{chunk-YLZXIR6B.js.map → chunk-COKPPU42.js.map} +0 -0
  456. /package/dist/{chunk-D3B4V44W.js.map → chunk-CY4XIZNW.js.map} +0 -0
  457. /package/dist/{chunk-5YVMFK7Y.js.map → chunk-DAFFZED3.js.map} +0 -0
  458. /package/dist/{chunk-UMOHHWXY.js.map → chunk-DAHSKQBV.js.map} +0 -0
  459. /package/dist/{chunk-HED2CZDZ.js.map → chunk-E2UOEI7N.js.map} +0 -0
  460. /package/dist/{chunk-ZLIES3XR.js.map → chunk-E5OBAS3U.js.map} +0 -0
  461. /package/dist/{chunk-MAYAJXO6.js.map → chunk-EKSJES5E.js.map} +0 -0
  462. /package/dist/{chunk-AD6GRJFV.js.map → chunk-EOIRU62W.js.map} +0 -0
  463. /package/dist/{chunk-CSJ7WNXU.js.map → chunk-EUR2ORTN.js.map} +0 -0
  464. /package/dist/{chunk-TOLCZ4XT.js.map → chunk-EWFBDAB7.js.map} +0 -0
  465. /package/dist/{chunk-IQ5MBELJ.js.map → chunk-EXVCVXFX.js.map} +0 -0
  466. /package/dist/{chunk-RZTUMBRD.js.map → chunk-EYFDIUVR.js.map} +0 -0
  467. /package/dist/{chunk-NTCWIMIU.js.map → chunk-F7LBTMCA.js.map} +0 -0
  468. /package/dist/{chunk-L5GZZUTY.js.map → chunk-FORQEHRQ.js.map} +0 -0
  469. /package/dist/{chunk-TOOEEQ46.js.map → chunk-HBH7V3IP.js.map} +0 -0
  470. /package/dist/{chunk-P5C4DTO4.js.map → chunk-HNEZWVDR.js.map} +0 -0
  471. /package/dist/{chunk-MJDSXQV7.js.map → chunk-HUXAIQC5.js.map} +0 -0
  472. /package/dist/{chunk-YAQE7QVC.js.map → chunk-I4DG3PP4.js.map} +0 -0
  473. /package/dist/{chunk-KLLHCPA2.js.map → chunk-IMYKJTVX.js.map} +0 -0
  474. /package/dist/{chunk-CTN4BRAH.js.map → chunk-JIEVKHOH.js.map} +0 -0
  475. /package/dist/{chunk-I62SKY4E.js.map → chunk-K6FCSB6T.js.map} +0 -0
  476. /package/dist/{chunk-2KBATUOZ.js.map → chunk-K7IDOTSU.js.map} +0 -0
  477. /package/dist/{chunk-T7NEXLW6.js.map → chunk-KES3HNSU.js.map} +0 -0
  478. /package/dist/{chunk-JJFLCEJJ.js.map → chunk-KF3Q3C3P.js.map} +0 -0
  479. /package/dist/{chunk-2ENMRK3U.js.map → chunk-L5KPBMMF.js.map} +0 -0
  480. /package/dist/{chunk-Y4ZWPOUV.js.map → chunk-LLPPIO3K.js.map} +0 -0
  481. /package/dist/{chunk-ZCNR4DN5.js.map → chunk-LOLYBFYY.js.map} +0 -0
  482. /package/dist/{chunk-D3SIZ2CX.js.map → chunk-LV6AD6XC.js.map} +0 -0
  483. /package/dist/{chunk-I5SIHPOG.js.map → chunk-LXIPBHNJ.js.map} +0 -0
  484. /package/dist/{chunk-3EKY63LD.js.map → chunk-MSJP2AEN.js.map} +0 -0
  485. /package/dist/{chunk-GCR6VE5S.js.map → chunk-MW7P2C2C.js.map} +0 -0
  486. /package/dist/{chunk-L62HC3UB.js.map → chunk-N557OEZR.js.map} +0 -0
  487. /package/dist/{chunk-DRJGHTQU.js.map → chunk-NASLJO2R.js.map} +0 -0
  488. /package/dist/{chunk-UNCDOLF5.js.map → chunk-NQDOKJLI.js.map} +0 -0
  489. /package/dist/{chunk-2CRNOJGL.js.map → chunk-NXQ6PXLJ.js.map} +0 -0
  490. /package/dist/{chunk-FKS2PNJF.js.map → chunk-O63ZROSY.js.map} +0 -0
  491. /package/dist/{chunk-Y6IIWGZB.js.map → chunk-OBA75Y5O.js.map} +0 -0
  492. /package/dist/{chunk-ICHM2LQA.js.map → chunk-OKRITX4S.js.map} +0 -0
  493. /package/dist/{chunk-Z7CBLQQR.js.map → chunk-OLHAUGVQ.js.map} +0 -0
  494. /package/dist/{chunk-5QUH53HV.js.map → chunk-OWRQOYUE.js.map} +0 -0
  495. /package/dist/{chunk-W676GY42.js.map → chunk-P772HCHI.js.map} +0 -0
  496. /package/dist/{chunk-MLAIXRVL.js.map → chunk-PEVBSNCD.js.map} +0 -0
  497. /package/dist/{chunk-2UNZG4JK.js.map → chunk-PNZH6CDD.js.map} +0 -0
  498. /package/dist/{chunk-YFG6XXBB.js.map → chunk-PVIQDBUN.js.map} +0 -0
  499. /package/dist/{chunk-GS3QDXDP.js.map → chunk-Q2ERGAQO.js.map} +0 -0
  500. /package/dist/{chunk-7XUQJJPK.js.map → chunk-QCYQL3ST.js.map} +0 -0
  501. /package/dist/{chunk-E6K2UZGR.js.map → chunk-QKOJ4637.js.map} +0 -0
  502. /package/dist/{chunk-XRVXQJNB.js.map → chunk-QRRWLLXW.js.map} +0 -0
  503. /package/dist/{chunk-IP424VZD.js.map → chunk-S4ITA3FA.js.map} +0 -0
  504. /package/dist/{chunk-UIHPFELH.js.map → chunk-S6D7NOV7.js.map} +0 -0
  505. /package/dist/{chunk-WLLUARTC.js.map → chunk-T2G4LDU5.js.map} +0 -0
  506. /package/dist/{chunk-YKONJEI4.js.map → chunk-T5RFH2T5.js.map} +0 -0
  507. /package/dist/{chunk-LZKS3NER.js.map → chunk-T77OVQEO.js.map} +0 -0
  508. /package/dist/{chunk-4PZZJ2AE.js.map → chunk-TAHO2LCU.js.map} +0 -0
  509. /package/dist/{chunk-62PTREG5.js.map → chunk-TI4FGQYV.js.map} +0 -0
  510. /package/dist/{chunk-3KMP2F4R.js.map → chunk-TYXFFNPM.js.map} +0 -0
  511. /package/dist/{chunk-AC7K7IJE.js.map → chunk-TZ44F6W7.js.map} +0 -0
  512. /package/dist/{chunk-YGQ2DLIM.js.map → chunk-UBVKMM3V.js.map} +0 -0
  513. /package/dist/{chunk-N3C4J6Z2.js.map → chunk-UQ5GJPVZ.js.map} +0 -0
  514. /package/dist/{chunk-V2QTL6VI.js.map → chunk-UYKIUUWP.js.map} +0 -0
  515. /package/dist/{chunk-3STNOYYO.js.map → chunk-VM4UYCD4.js.map} +0 -0
  516. /package/dist/{chunk-EXKEPOL7.js.map → chunk-WAO7UQRS.js.map} +0 -0
  517. /package/dist/{chunk-IMMPY4Q7.js.map → chunk-WJMSND5Q.js.map} +0 -0
  518. /package/dist/{chunk-H5R2EZYI.js.map → chunk-WNNA6YYE.js.map} +0 -0
  519. /package/dist/{chunk-SFNVAM7I.js.map → chunk-WQO5WONV.js.map} +0 -0
  520. /package/dist/{chunk-NQUYBJKJ.js.map → chunk-WW3F7DCX.js.map} +0 -0
  521. /package/dist/{chunk-XNIHDUOP.js.map → chunk-WYRH6OSN.js.map} +0 -0
  522. /package/dist/{chunk-WTACWJSF.js.map → chunk-X4J576GR.js.map} +0 -0
  523. /package/dist/{chunk-55PFFAAY.js.map → chunk-XCUHGPPZ.js.map} +0 -0
  524. /package/dist/{chunk-ZF2LZVDO.js.map → chunk-XE33EZVS.js.map} +0 -0
  525. /package/dist/{chunk-LR56OANO.js.map → chunk-XLU5WFSY.js.map} +0 -0
  526. /package/dist/{chunk-RFMQBIE6.js.map → chunk-YBAK2WN5.js.map} +0 -0
  527. /package/dist/{chunk-DM57YWZH.js.map → chunk-YGLAGY74.js.map} +0 -0
  528. /package/dist/{chunk-YWBPASB2.js.map → chunk-YNVTUQ5B.js.map} +0 -0
  529. /package/dist/{chunk-AN37BIIO.js.map → chunk-YOLLISEY.js.map} +0 -0
  530. /package/dist/{chunk-CVB26LLB.js.map → chunk-ZANWHTXH.js.map} +0 -0
  531. /package/dist/{chunk-G3G5W4OF.js.map → chunk-ZYZPSBNQ.js.map} +0 -0
  532. /package/dist/native/chunks/{chunk-4G634E3Q.js.map → chunk-FXA5DLKR.js.map} +0 -0
  533. /package/dist/native/chunks/{chunk-WLG3KT2V.js.map → chunk-IN3XZ7EK.js.map} +0 -0
@@ -144,23 +144,6 @@ export const EN_US_UI_LABELS: UiLabels = {
144
144
  dateRangePicker: {
145
145
  calendar: "Calendar",
146
146
  },
147
- scheduleGrid: {
148
- createCell: (row, column) => `Schedule ${row}, ${column}`,
149
- blockedCell: (row, column) => `${row}, ${column}: closed`,
150
- copied: (block, column) => `${block} copied to ${column}`,
151
- moved: (block, row, column) => `${block} moved to ${row}, ${column}`,
152
- refused: "Not there: that day is taken or closed",
153
- notMovable: "This shift cannot be changed here",
154
- loading: "Loading the schedule",
155
- },
156
- dayRuler: {
157
- createTrack: (row) => `Schedule ${row}`,
158
- moved: (block, range) => `${block} now ${range}`,
159
- resized: (block, range) => `${block} now ${range}`,
160
- refused: "It cannot go further",
161
- notMovable: "This shift cannot be changed here",
162
- loading: "Loading the day",
163
- },
164
147
  calendar: {
165
148
  chooseMonth: (month) => `${month}, choose month`,
166
149
  chooseYear: (year) => `${year}, choose year`,
@@ -143,23 +143,6 @@ export const PT_BR_UI_LABELS: UiLabels = {
143
143
  dateRangePicker: {
144
144
  calendar: "Calendário",
145
145
  },
146
- scheduleGrid: {
147
- createCell: (row, column) => `Agendar ${row}, ${column}`,
148
- blockedCell: (row, column) => `${row}, ${column}: fechado`,
149
- copied: (block, column) => `${block} copiado para ${column}`,
150
- moved: (block, row, column) => `${block} movido para ${row}, ${column}`,
151
- refused: "Não dá para pôr aí: o dia está ocupado ou fechado",
152
- notMovable: "Este turno não muda por aqui",
153
- loading: "Carregando a escala",
154
- },
155
- dayRuler: {
156
- createTrack: (row) => `Agendar ${row}`,
157
- moved: (block, range) => `${block} agora ${range}`,
158
- resized: (block, range) => `${block} agora ${range}`,
159
- refused: "Não dá para ir além",
160
- notMovable: "Este turno não muda por aqui",
161
- loading: "Carregando o dia",
162
- },
163
146
  calendar: {
164
147
  chooseMonth: (month) => `${month}, escolher mês`,
165
148
  chooseYear: (year) => `${year}, escolher ano`,
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/en-US.labels.ts"],"sourcesContent":["/**\n * The en-US labels pack — and, unlike the other en-US packs, the components'\n * own fallback: each `labels` prop is optional, and this is what a host that\n * passes nothing has always rendered, kept word for word (including the\n * lower-case `close`/`loading` names tests already query by).\n */\nimport type { UiLabels } from './copy/labels';\n\nexport const EN_US_UI_LABELS: UiLabels = {\n common: {\n loading: \"loading\",\n close: \"close\",\n delete: \"delete\",\n },\n stepper: {\n step: (position, label) => `Step ${position}: ${label}`,\n optional: \"optional\",\n completed: \"completed\",\n current: \"current\",\n },\n timeline: {\n expandDetails: \"Expand item details\",\n collapseDetails: \"Collapse item details\",\n item: (title) => `Timeline item: ${title}`,\n },\n lazyImage: {\n loadingAlt: (alt) => `${alt} (loading)`,\n fallbackAlt: (alt) => `${alt} (fallback)`,\n },\n sonner: {\n hiddenCount: (count) => `+${count} more`,\n },\n richTextEditor: {\n placeholder: \"Start typing...\",\n ariaLabel: \"Rich text editor\",\n listItem: \"List item\",\n bold: \"Bold\",\n italic: \"Italic\",\n underline: \"Underline\",\n strikethrough: \"Strikethrough\",\n numberedList: \"Numbered List\",\n bulletedList: \"Bulleted List\",\n insertLink: \"Insert Link\",\n insertImage: \"Insert Image\",\n codeBlock: \"Code Block\",\n quote: \"Quote\",\n linkPrompt: \"Enter URL:\",\n imagePrompt: \"Enter image URL:\",\n },\n table: {\n sortBy: (header) => `Sort by ${header}`,\n selectRow: (rowNumber) => `select row ${rowNumber}`,\n selectAllRows: \"select all\",\n },\n code: {\n copy: \"Copy code\",\n copied: \"Copied!\",\n },\n contentToolbar: {\n gridView: \"Grid View\",\n listView: \"List View\",\n openFilters: \"Open filters\",\n closeFilters: \"Close filters\",\n filters: \"Filters\",\n all: \"All\",\n search: \"Search…\",\n noResults: \"No results\",\n },\n dashboard: {\n breadcrumb: \"breadcrumb\",\n moreFilters: \"More filters\",\n },\n navigationMenu: {\n collapse: \"Collapse\",\n expand: \"Expand\",\n },\n workflowStep: {\n step: (position, title) => `Step ${position}: ${title}`,\n progress: (position, total) => `Step ${position} of ${total}`,\n },\n alertDialog: {\n cancel: \"Cancel\",\n confirm: \"Confirm\",\n },\n avatar: {\n name: \"Avatar\",\n },\n emptyState: {\n refresh: \"Refresh\",\n create: \"Create New\",\n },\n errorState: {\n retry: \"Retry\",\n },\n loadingState: {\n skeleton: \"Loading content\",\n spinner: \"Loading\",\n },\n stackedModal: {\n loading: \"Loading...\",\n },\n command: {\n placeholder: \"Type a command or search...\",\n empty: \"No results found\",\n loading: \"Loading...\",\n },\n formErrorSnackbar: {\n message: \"Please fix the highlighted fields and try again.\",\n },\n columnsMenu: {\n title: \"Columns\",\n toggle: \"Toggle columns\",\n },\n drawer: {\n close: \"Close drawer\",\n },\n settingsLayout: {\n navigation: \"Settings\",\n searchPlaceholder: \"Search settings\",\n emptySearch: \"No settings match your search.\",\n back: \"Back\",\n },\n tableFilter: {\n filters: \"Filters\",\n keywordPlaceholder: \"Press Enter to filter\",\n keywordLabel: \"Filter by keyword\",\n },\n appHeader: {\n disclose: (title) => `${title} details`,\n },\n breadcrumbs: {\n navigation: \"breadcrumb navigation\",\n },\n animatedIcon: {\n name: (variant) => `Animated ${variant} icon`,\n },\n infiniteScroll: {\n loadFailed: \"An error occurred while loading more items\",\n },\n socialLogin: {\n title: \"Sign in to continue\",\n divider: \"or\",\n },\n dateRangePicker: {\n calendar: \"Calendar\",\n },\n scheduleGrid: {\n createCell: (row, column) => `Schedule ${row}, ${column}`,\n blockedCell: (row, column) => `${row}, ${column}: closed`,\n copied: (block, column) => `${block} copied to ${column}`,\n moved: (block, row, column) => `${block} moved to ${row}, ${column}`,\n refused: \"Not there: that day is taken or closed\",\n notMovable: \"This shift cannot be changed here\",\n loading: \"Loading the schedule\",\n },\n dayRuler: {\n createTrack: (row) => `Schedule ${row}`,\n moved: (block, range) => `${block} now ${range}`,\n resized: (block, range) => `${block} now ${range}`,\n refused: \"It cannot go further\",\n notMovable: \"This shift cannot be changed here\",\n loading: \"Loading the day\",\n },\n calendar: {\n chooseMonth: (month) => `${month}, choose month`,\n chooseYear: (year) => `${year}, choose year`,\n previousMonth: \"Previous month\",\n nextMonth: \"Next month\",\n months: \"Months\",\n years: \"Years\",\n },\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=chunk-7RXL4ONS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/ScheduleGrid/ScheduleGrid.parts.tsx"],"sourcesContent":["import AddIcon from '@mui/icons-material/Add';\nimport Box from '@mui/material/Box/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport type * as React from 'react';\n\nimport type { ScheduleGridLabels } from '../../../copy/labels';\nimport { daysBetween, isOpen } from './schedule-grid-model';\nimport { SCHEDULE_GRID_METRICS } from './ScheduleGrid.metrics';\nimport {\n blockedLabelSx,\n blockSx,\n breakSx,\n cellSx,\n ghostSx,\n gripSx,\n groupTitleSx,\n headerCellSx,\n headerSublabelSx,\n headerRowSx,\n nameCellSx,\n personRowSx,\n plusButtonSx,\n skeletonCellSx,\n SR_ONLY_SX,\n totalCellSx,\n totalHeaderSx,\n} from './ScheduleGrid.styles';\nimport type { CellLook } from './ScheduleGrid.styles';\nimport type {\n ScheduleGridBlock,\n ScheduleGridCell,\n ScheduleGridColumn,\n ScheduleGridProps,\n ScheduleGridRow,\n} from './ScheduleGrid.types';\nimport { ScheduleNameCell } from './ScheduleNameCell';\nimport type { GridDrag, GridDragApi } from './useGridDrag';\n\n/** What the grid lets a cell do, resolved once per render. */\nexport interface CellAbilities {\n create: boolean;\n copy: boolean;\n move: boolean;\n}\n\n/** A row's shared columns, as an `sx` part. */\ntype RowSx = (theme: Theme) => CSSObject;\n\ninterface CellProps {\n row: ScheduleGridRow;\n day: number;\n column: ScheduleGridColumn;\n cell: ScheduleGridCell;\n drag: GridDrag | null;\n dragApi: GridDragApi;\n can: CellAbilities;\n createPreview?: (rowId: string) => string;\n onCreate?: (rowId: string, days: number[]) => void;\n onBlockClick?: (blockId: string) => void;\n labels: ScheduleGridLabels;\n testId: string;\n}\n\n/** The ghost text this cell shows during a create or copy, or `null` when the gesture does not land here. */\nfunction ghostFor(props: CellProps): string | null {\n const { drag, row, day, cell, createPreview } = props;\n if (!drag || drag.mode === 'move' || drag.rowId !== row.id || !isOpen(cell)) return null;\n if (!daysBetween(drag.anchor, drag.day).includes(day)) return null;\n if (drag.mode === 'copy') return day === drag.anchor ? null : drag.preview;\n return createPreview?.(row.id) ?? '';\n}\n\n/** The keys a block answers to, for `aria-keyshortcuts`. */\nfunction shortcutsOf(movable: boolean, copyable: boolean): string | undefined {\n const keys = [movable ? 'Alt+ArrowLeft Alt+ArrowRight' : '', copyable ? 'Shift+ArrowLeft Shift+ArrowRight' : ''];\n return keys.filter(Boolean).join(' ') || undefined;\n}\n\nconst titleOf = (block: ScheduleGridBlock): string => block.title ?? [block.label, block.note].filter(Boolean).join(' · ');\n\ninterface BlockProps {\n block: ScheduleGridBlock;\n row: ScheduleGridRow;\n day: number;\n can: CellAbilities;\n dragApi: GridDragApi;\n onBlockClick?: (blockId: string) => void;\n testId: string;\n}\n\nfunction Grip({ side, onPointerDown, testId }: { side: 'l' | 'r'; onPointerDown: (event: React.PointerEvent) => void; testId: string }) {\n return <Box component=\"span\" aria-hidden sx={gripSx(side)} onPointerDown={onPointerDown} data-sg-grip=\"\" data-testid={testId} />;\n}\n\n/** The block's break, kept inside it whatever the host sent. */\nfunction BreakBand({ span, testId }: { span: { start: number; end: number }; testId: string }): React.JSX.Element | null {\n const start = Math.min(1, Math.max(0, span.start));\n const end = Math.min(1, Math.max(0, span.end));\n if (!(end > start)) return null;\n return <Box component=\"span\" aria-hidden sx={breakSx({ start, end })} data-sg-break=\"\" data-testid={testId} />;\n}\n\nfunction BlockButton({ block, row, day, can, dragApi, onBlockClick, testId }: BlockProps): React.JSX.Element {\n const movable = can.move && Boolean(block.movable);\n const copyable = can.copy && Boolean(block.copyable);\n const startCopy = (event: React.PointerEvent): void => dragApi.startCopy(event, block.id, row.id, day, block.label);\n const startMove = (event: React.PointerEvent): void => dragApi.startMove(event, block.id, row.id, day);\n return (\n <Box\n component=\"button\"\n type=\"button\"\n sx={blockSx(block.tone, { selected: Boolean(block.selected), movable })}\n title={titleOf(block)}\n aria-keyshortcuts={shortcutsOf(movable, copyable)}\n aria-current={block.selected ? 'true' : undefined}\n data-sg-focus=\"\"\n data-sg-row={row.id}\n data-sg-day={day}\n data-sg-block={block.id}\n data-tone={block.tone}\n data-testid={`${testId}-block-${block.id}`}\n onPointerDown={movable ? startMove : undefined}\n onClick={() => {\n if (!dragApi.takeClick()) onBlockClick?.(block.id);\n }}\n >\n {block.breakSpan ? <BreakBand span={block.breakSpan} testId={`${testId}-break-${block.id}`} /> : null}\n {copyable ? <Grip side=\"l\" onPointerDown={startCopy} testId={`${testId}-grip-l-${block.id}`} /> : null}\n <span data-sg-line=\"label\">{block.label}</span>\n {block.note ? <span data-sg-line=\"note\">{block.note}</span> : null}\n {copyable ? <Grip side=\"r\" onPointerDown={startCopy} testId={`${testId}-grip-r-${block.id}`} /> : null}\n </Box>\n );\n}\n\n/**\n * The empty cell's \"+\". It stays mounted while a drag shows the ghost in it, so\n * a press and release in place is still its click.\n */\nfunction PlusButton({ props, ghost }: { props: CellProps; ghost: string | null }): React.JSX.Element {\n const { row, day, column, dragApi, onCreate, labels } = props;\n return (\n <Box\n component=\"button\"\n type=\"button\"\n sx={plusButtonSx}\n aria-label={labels.createCell(row.label, column.label)}\n data-ghost={ghost === null ? undefined : ''}\n data-sg-focus=\"\"\n data-sg-row={row.id}\n data-sg-day={day}\n onPointerDown={(event: React.PointerEvent) => dragApi.startCreate(event, row.id, day)}\n onClick={() => {\n if (!dragApi.takeClick()) onCreate?.(row.id, [day]);\n }}\n >\n {ghost === null ? <AddIcon aria-hidden /> : <Ghost text={ghost} />}\n </Box>\n );\n}\n\nfunction Ghost({ text }: { text: string }): React.JSX.Element {\n return (\n <Box component=\"span\" sx={ghostSx} aria-hidden>\n {text}\n </Box>\n );\n}\n\n/** What fills a cell after its blocks: the \"+\" (or the ghost in it), a lone ghost, or a closed day's label. */\nfunction CellFill({ props, ghost }: { props: CellProps; ghost: string | null }): React.JSX.Element | null {\n const { cell, can } = props;\n if (can.create && isOpen(cell)) return <PlusButton props={props} ghost={ghost} />;\n if (ghost !== null) return <Ghost text={ghost} />;\n if (!cell.blocked || cell.blocks.length > 0 || !cell.blockedLabel) return null;\n return (\n <Box component=\"span\" sx={blockedLabelSx} aria-hidden title={cell.blockedLabel}>\n {cell.blockedLabel}\n </Box>\n );\n}\n\n/** A gone day's words for a screen reader (\"Já passou\"): visually hidden, and only when the host gives them. */\nfunction ClosedWords({ cell }: { cell: ScheduleGridCell }): React.JSX.Element | null {\n if (!cell.closed || cell.blocked || !cell.closedLabel) return null;\n return (\n <Box component=\"span\" sx={SR_ONLY_SX}>\n {cell.closedLabel}\n </Box>\n );\n}\n\n/** How the cell is drawn right now. */\nfunction lookOf(props: CellProps, ghost: string | null): CellLook {\n const { row, day, column, cell, drag, can } = props;\n return {\n today: Boolean(column.today),\n blocked: Boolean(cell.blocked),\n closed: Boolean(cell.closed),\n target: ghost !== null,\n over: drag?.mode === 'move' && drag.moved && drag.rowId === row.id && drag.day === day,\n interactive: can.create && isOpen(cell),\n };\n}\n\n/** One day of one row: its blocks, a \"+\" when it is empty, the hatch when it is closed. */\nexport function GridCell(props: CellProps): React.JSX.Element {\n const { row, day, column, cell, can, labels, testId } = props;\n const ghost = ghostFor(props);\n const look = lookOf(props, ghost);\n const blocked = look.blocked;\n const closedName = blocked && cell.blocks.length === 0 ? (cell.blockedLabel ?? labels.blockedCell(row.label, column.label)) : undefined;\n return (\n <Box\n role=\"cell\"\n sx={cellSx(look)}\n data-sg-cell=\"\"\n data-sg-row={row.id}\n data-sg-day={day}\n data-testid={`${testId}-cell-${row.id}-${day}`}\n aria-label={closedName}\n >\n {cell.blocks.map((block) => (\n <BlockButton\n key={block.id}\n block={block}\n row={row}\n day={day}\n can={can}\n dragApi={props.dragApi}\n onBlockClick={props.onBlockClick}\n testId={testId}\n />\n ))}\n <CellFill props={props} ghost={ghost} />\n <ClosedWords cell={cell} />\n </Box>\n );\n}\n\n/** The first column: the person, as both views draw it. */\nfunction NameCell({ row }: { row: ScheduleGridRow }): React.JSX.Element {\n const sizes = { name: SCHEDULE_GRID_METRICS.rowName, meta: SCHEDULE_GRID_METRICS.rowMeta, chipsTop: 0.5 };\n return <ScheduleNameCell row={row} role=\"rowheader\" sx={nameCellSx} sizes={sizes} />;\n}\n\ninterface HeaderProps {\n columns: readonly ScheduleGridColumn[];\n /** Present when the grid has a last column. */\n totalLabel?: string;\n rowSx: RowSx;\n testId: string;\n}\n\n/** The days, their counts and the total column's header — pinned while the grid scrolls. */\n\n/** A label wraps between words, never inside \"Seg 19/10\": the space before a number holds. */\nfunction keepDatesWhole(label: string): string {\n return label.replace(/ (?=\\d)/g, '\\u00a0');\n}\n\nexport function GridHeader({ columns, totalLabel, rowSx, testId }: HeaderProps): React.JSX.Element {\n return (\n <Box role=\"row\" sx={[rowSx, headerRowSx]} data-testid={`${testId}-header`}>\n {/* Above the names: a cell of the header row, with nothing to head. */}\n <span role=\"cell\" data-sg-corner=\"\" />\n {columns.map((column, day) => (\n <Box\n role=\"columnheader\"\n key={`${day}-${column.label}`}\n sx={headerCellSx(Boolean(column.today), Boolean(column.past))}\n data-sg-past={column.past ? '' : undefined}\n >\n <span data-sg-col=\"full\" title={column.label}>\n {keepDatesWhole(column.label)}\n </span>\n {column.sublabel ? (\n <Box component=\"span\" sx={headerSublabelSx} data-sg-col=\"sub\">\n {column.sublabel}\n </Box>\n ) : null}\n </Box>\n ))}\n {totalLabel !== undefined ? (\n <Box role=\"columnheader\" sx={totalHeaderSx}>\n {totalLabel}\n </Box>\n ) : null}\n </Box>\n );\n}\n\ninterface BodyProps {\n grid: ScheduleGridProps;\n rows: readonly ScheduleGridRow[];\n rowSx: RowSx;\n hasTotal: boolean;\n can: CellAbilities;\n dragApi: GridDragApi;\n labels: ScheduleGridLabels;\n testId: string;\n}\n\nfunction SkeletonRows({ grid, rowSx, testId }: Pick<BodyProps, 'grid' | 'rowSx' | 'testId'>): React.JSX.Element {\n return (\n <>\n {Array.from({ length: SCHEDULE_GRID_METRICS.skeletonRows }, (_, index) => (\n <Box key={index} sx={[rowSx, personRowSx]} aria-hidden data-testid={`${testId}-loading`}>\n <Box sx={skeletonCellSx} />\n {grid.columns.map((column, day) => (\n <Box key={`${day}-${column.label}`} sx={skeletonCellSx} />\n ))}\n </Box>\n ))}\n </>\n );\n}\n\nfunction PersonRow({ row, body }: { row: ScheduleGridRow; body: BodyProps }): React.JSX.Element {\n const { grid, rowSx, hasTotal, can, dragApi, labels, testId } = body;\n return (\n <Box role=\"row\" sx={[rowSx, personRowSx]} data-testid={`${testId}-row-${row.id}`}>\n <NameCell row={row} />\n {grid.columns.map((column, day) => (\n <GridCell\n key={`${day}-${column.label}`}\n row={row}\n day={day}\n column={column}\n cell={grid.cell(row.id, day)}\n drag={dragApi.drag}\n dragApi={dragApi}\n can={can}\n createPreview={grid.createPreview}\n onCreate={grid.onCreate}\n onBlockClick={grid.onBlockClick}\n labels={labels}\n testId={testId}\n />\n ))}\n {hasTotal ? (\n <Box role=\"cell\" sx={totalCellSx}>\n {row.total}\n </Box>\n ) : null}\n </Box>\n );\n}\n\n/** The host's error or empty node, as the table's one full-width row (a table holds rows only). */\nfunction MessageRow({ children, testId }: { children: React.ReactNode; testId: string }): React.JSX.Element | null {\n if (children === null || children === undefined || children === false) return null;\n return (\n <Box role=\"row\" data-testid={`${testId}-message`}>\n <Box role=\"cell\">{children}</Box>\n </Box>\n );\n}\n\n/** The groups and their rows — or the skeleton, the host's error, or the host's empty state. */\nexport function GridBody(body: BodyProps): React.JSX.Element | null {\n const { grid, rows } = body;\n if (grid.error) return <MessageRow testId={body.testId}>{grid.error}</MessageRow>;\n if (grid.loading) return <SkeletonRows grid={grid} rowSx={body.rowSx} testId={body.testId} />;\n if (rows.length === 0) return <MessageRow testId={body.testId}>{grid.empty}</MessageRow>;\n return (\n <>\n {grid.groups.map((group, index) => (\n <Box role=\"rowgroup\" key={`${index}-${group.title ?? ''}`} aria-label={group.title}>\n {group.title ? (\n <Box component=\"p\" sx={groupTitleSx} aria-hidden data-sg-group-title=\"\">\n {group.title}\n </Box>\n ) : null}\n {group.rows.map((row) => (\n <PersonRow key={row.id} row={row} body={body} />\n ))}\n </Box>\n ))}\n </>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/DayRuler/DayRuler.keyboard.ts"],"sourcesContent":["import type * as React from 'react';\n\nimport type { DayRulerLabels } from '../../../copy/labels';\nimport { DAY_RULER_METRICS as M } from './DayRuler.metrics';\nimport { clamp, formatRange, moved, resized, snapTo } from './day-ruler-model';\nimport type { DayRulerBlock, RulerHour } from './DayRuler.types';\n\n/** The ruler's span and step, resolved once per render. */\nexport interface RulerScale {\n from: RulerHour;\n to: RulerHour;\n /** The snap, in hours (0.25 for 15 minutes). */\n snap: number;\n createHours: number;\n tickHours: number;\n}\n\n/** What the ruler lets a row do, resolved once per render. */\nexport interface RulerAbilities {\n create: boolean;\n move: boolean;\n resize: boolean;\n}\n\n/** Which gesture a modified arrow asks of a block, if the ruler allows it. */\ntype Gesture = 'move' | 'start' | 'end';\n\nfunction gestureOf(event: React.KeyboardEvent, block: DayRulerBlock, can: RulerAbilities): Gesture | null {\n if (event.altKey && !event.shiftKey) return can.move && block.movable ? 'move' : null;\n if (!event.shiftKey) return null;\n if (!can.resize || !block.resizable) return null;\n return event.altKey ? 'start' : 'end';\n}\n\n/** The block's hours after one snap of `gesture` in `direction`. */\nfunction stepped(block: DayRulerBlock, gesture: Gesture, direction: -1 | 1, scale: RulerScale): [RulerHour, RulerHour] {\n const step = direction * scale.snap;\n if (gesture === 'move') return moved(block.start, block.end, step, scale.from, scale.to);\n const edge = (gesture === 'start' ? block.start : block.end) + step;\n return resized(block.start, block.end, gesture, edge, M.minHours, scale.from, scale.to);\n}\n\ninterface BlockKeyContext {\n scale: RulerScale;\n can: RulerAbilities;\n onMove?: (blockId: string, start: RulerHour, end: RulerHour) => void;\n onResize?: (blockId: string, start: RulerHour, end: RulerHour) => void;\n labels: DayRulerLabels;\n say: (text: string) => void;\n}\n\n/**\n * A focused block's keys (FUT-3825): Alt+←/→ moves it one snap, Shift+←/→\n * moves its end, Shift+Alt+←/→ its start. Each is read by the live region; one\n * that cannot go further, or that the block does not allow, is refused aloud\n * and changes nothing.\n */\n/** Shift and/or Alt with ← or →, and no Ctrl or Meta: a key the ruler answers for a block. */\nfunction isBlockKey(event: React.KeyboardEvent): boolean {\n const arrow = event.key === 'ArrowLeft' || event.key === 'ArrowRight';\n return arrow && (event.altKey || event.shiftKey) && !event.ctrlKey && !event.metaKey;\n}\n\nexport function handleBlockKey(event: React.KeyboardEvent, block: DayRulerBlock, ctx: BlockKeyContext): void {\n if (!isBlockKey(event)) return;\n // The key is the ruler's either way: Alt+← would otherwise be the browser's Back.\n event.preventDefault();\n const gesture = gestureOf(event, block, ctx.can);\n if (!gesture) {\n ctx.say(ctx.labels.notMovable);\n return;\n }\n const [start, end] = stepped(block, gesture, event.key === 'ArrowLeft' ? -1 : 1, ctx.scale);\n if (start === block.start && end === block.end) {\n ctx.say(ctx.labels.refused);\n return;\n }\n const range = formatRange(start, end);\n if (gesture === 'move') {\n ctx.onMove?.(block.id, start, end);\n ctx.say(ctx.labels.moved(block.label, range));\n return;\n }\n ctx.onResize?.(block.id, start, end);\n ctx.say(ctx.labels.resized(block.label, range));\n}\n\n/** Where Enter on a track creates: the host's `createStart`, else `now` snapped up, else `from` — kept on the ruler. */\nexport function keyCreateSpan(scale: RulerScale, now: RulerHour | undefined, hostStart: RulerHour | undefined): [RulerHour, RulerHour] {\n const onRuler = now !== undefined && now >= scale.from && now < scale.to;\n const fallback = onRuler ? Math.ceil(now / scale.snap) * scale.snap : scale.from;\n const start = clamp(snapTo(hostStart ?? fallback, scale.snap), scale.from, scale.to - M.minHours);\n return [start, Math.min(scale.to, start + scale.createHours)];\n}\n"],"mappings":";;;;;;;;;;;;AA2BA,SAAS,UAAU,OAA4B,OAAsB,KAAqC;AACxG,MAAI,MAAM,UAAU,CAAC,MAAM,SAAU,QAAO,IAAI,QAAQ,MAAM,UAAU,SAAS;AACjF,MAAI,CAAC,MAAM,SAAU,QAAO;AAC5B,MAAI,CAAC,IAAI,UAAU,CAAC,MAAM,UAAW,QAAO;AAC5C,SAAO,MAAM,SAAS,UAAU;AAClC;AAGA,SAAS,QAAQ,OAAsB,SAAkB,WAAmB,OAA2C;AACrH,QAAM,OAAO,YAAY,MAAM;AAC/B,MAAI,YAAY,OAAQ,QAAO,MAAM,MAAM,OAAO,MAAM,KAAK,MAAM,MAAM,MAAM,MAAM,EAAE;AACvF,QAAM,QAAQ,YAAY,UAAU,MAAM,QAAQ,MAAM,OAAO;AAC/D,SAAO,QAAQ,MAAM,OAAO,MAAM,KAAK,SAAS,MAAM,kBAAE,UAAU,MAAM,MAAM,MAAM,EAAE;AACxF;AAkBA,SAAS,WAAW,OAAqC;AACvD,QAAM,QAAQ,MAAM,QAAQ,eAAe,MAAM,QAAQ;AACzD,SAAO,UAAU,MAAM,UAAU,MAAM,aAAa,CAAC,MAAM,WAAW,CAAC,MAAM;AAC/E;AAEO,SAAS,eAAe,OAA4B,OAAsB,KAA4B;AAC3G,MAAI,CAAC,WAAW,KAAK,EAAG;AAExB,QAAM,eAAe;AACrB,QAAM,UAAU,UAAU,OAAO,OAAO,IAAI,GAAG;AAC/C,MAAI,CAAC,SAAS;AACZ,QAAI,IAAI,IAAI,OAAO,UAAU;AAC7B;AAAA,EACF;AACA,QAAM,CAAC,OAAO,GAAG,IAAI,QAAQ,OAAO,SAAS,MAAM,QAAQ,cAAc,KAAK,GAAG,IAAI,KAAK;AAC1F,MAAI,UAAU,MAAM,SAAS,QAAQ,MAAM,KAAK;AAC9C,QAAI,IAAI,IAAI,OAAO,OAAO;AAC1B;AAAA,EACF;AACA,QAAM,QAAQ,YAAY,OAAO,GAAG;AACpC,MAAI,YAAY,QAAQ;AACtB,QAAI,SAAS,MAAM,IAAI,OAAO,GAAG;AACjC,QAAI,IAAI,IAAI,OAAO,MAAM,MAAM,OAAO,KAAK,CAAC;AAC5C;AAAA,EACF;AACA,MAAI,WAAW,MAAM,IAAI,OAAO,GAAG;AACnC,MAAI,IAAI,IAAI,OAAO,QAAQ,MAAM,OAAO,KAAK,CAAC;AAChD;AAGO,SAAS,cAAc,OAAmB,KAA4B,WAA0D;AACrI,QAAM,UAAU,QAAQ,UAAa,OAAO,MAAM,QAAQ,MAAM,MAAM;AACtE,QAAM,WAAW,UAAU,KAAK,KAAK,MAAM,MAAM,IAAI,IAAI,MAAM,OAAO,MAAM;AAC5E,QAAM,QAAQ,MAAM,OAAO,aAAa,UAAU,MAAM,IAAI,GAAG,MAAM,MAAM,MAAM,KAAK,kBAAE,QAAQ;AAChG,SAAO,CAAC,OAAO,KAAK,IAAI,MAAM,IAAI,QAAQ,MAAM,WAAW,CAAC;AAC9D;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/DayRuler/DayRuler.tsx"],"sourcesContent":["'use client';\n\nimport Box from '@mui/material/Box/index.js';\nimport type React from 'react';\n\nimport { EN_US_UI_LABELS } from '../../../en-US.labels';\nimport { resolveLabels } from '../../../utils/resolve-labels';\nimport { SR_ONLY_SX } from '../ScheduleGrid/ScheduleGrid.styles';\nimport { useAnnouncer } from '../ScheduleGrid/useAnnouncer';\nimport { handleBlockKey, keyCreateSpan, type RulerAbilities, type RulerScale } from './DayRuler.keyboard';\nimport { DAY_RULER_METRICS as M } from './DayRuler.metrics';\nimport { Axis, Coverage, RulerRow, type RowContext } from './DayRuler.parts';\nimport { groupTitleSx, rootSx, rowSx, skeletonNameSx, skeletonTrackSx } from './DayRuler.styles';\nimport type { DayRulerProps, DayRulerRow } from './DayRuler.types';\nimport { useRulerDrag } from './useRulerDrag';\n\n/** The rows, grouped under a heading each time `row.group` changes. */\nfunction grouped(rows: readonly DayRulerRow[]): { title?: string; rows: DayRulerRow[] }[] {\n const out: { title?: string; rows: DayRulerRow[] }[] = [];\n for (const row of rows) {\n const last = out[out.length - 1];\n if (last && last.title === row.group) last.rows.push(row);\n else out.push({ title: row.group, rows: [row] });\n }\n return out;\n}\n\nfunction scaleOf(props: DayRulerProps): RulerScale {\n return {\n from: props.from ?? 6,\n to: props.to ?? 26,\n snap: (props.snapMinutes ?? 15) / 60,\n createHours: props.createHours ?? 4,\n tickHours: props.tickHours ?? 4,\n };\n}\n\nfunction abilitiesOf(props: DayRulerProps): RulerAbilities {\n const open = !props.readOnly && !props.loading;\n return { create: open && Boolean(props.onCreate), move: open && Boolean(props.onMove), resize: open && Boolean(props.onResize) };\n}\n\n/** The groups and their rows — or the skeleton, the host's error, or the host's empty state. */\nfunction RulerBody({ props, ctx }: { props: DayRulerProps; ctx: RowContext }): React.JSX.Element {\n if (props.error) return <>{props.error}</>;\n if (props.loading) {\n return (\n <>\n {Array.from({ length: M.skeletonRows }, (_, index) => (\n <Box key={index} sx={rowSx} aria-hidden data-testid={`${ctx.testId}-loading`}>\n <Box sx={skeletonNameSx} />\n <Box sx={skeletonTrackSx} />\n </Box>\n ))}\n </>\n );\n }\n if (props.rows.length === 0) return <>{props.empty ?? null}</>;\n return (\n <>\n {grouped(props.rows).map((group, index) => (\n <Box key={`${index}-${group.title ?? ''}`} role=\"list\" aria-label={group.title}>\n {group.title ? (\n <Box component=\"p\" sx={groupTitleSx} aria-hidden>\n {group.title}\n </Box>\n ) : null}\n {group.rows.map((row) => (\n <RulerRow key={row.id} row={row} ctx={ctx} />\n ))}\n </Box>\n ))}\n </>\n );\n}\n\n/**\n * One day as an hour ruler per row — who is on the escala when, and who is\n * really on shift (FUT-3825). Drag on an empty stretch to create (a click\n * alone is `createHours`), drag a block to move it, drag its ends to change\n * them; every hour snaps to `snapMinutes`. On a narrow ruler (a phone) each row\n * stacks and the blocks are tap-only: touch scrolls and never drags.\n *\n * The ruler reports gestures; hours, limits and refusals are the host's.\n */\nexport function DayRuler(props: DayRulerProps): React.JSX.Element {\n const { now, onCreate, onMove, onResize } = props;\n const testId = props.dataTestId ?? 'day-ruler';\n const labels = resolveLabels(EN_US_UI_LABELS.dayRuler, props.labels);\n const scale = scaleOf(props);\n const can = abilitiesOf(props);\n const dragApi = useRulerDrag(scale, { onCreate, onMove, onResize });\n const { text: announcement, say } = useAnnouncer();\n\n const ctx: RowContext = {\n scale,\n now,\n can,\n drag: dragApi.drag,\n dragApi,\n onBlockClick: props.onBlockClick,\n onKeyCreate: (row) => {\n const [start, end] = keyCreateSpan(scale, now, props.createStart?.(row.id));\n onCreate?.(row.id, start, end);\n },\n onBlockKey: (event, block) => handleBlockKey(event, block, { scale, can, onMove, onResize, labels, say }),\n createLabel: labels.createTrack,\n testId,\n };\n\n return (\n <Box\n sx={rootSx(props.rows.some((row) => row.actions !== undefined && row.actions !== null))}\n data-testid={testId}\n role=\"region\"\n aria-label={props['aria-label']}\n aria-busy={props.loading || undefined}\n aria-description={props.loading ? labels.loading : undefined}\n >\n {props.coverage && props.coverage.length > 0 ? (\n <Coverage coverage={props.coverage} label={props.coverageLabel} scale={scale} testId={testId} />\n ) : null}\n <Axis scale={scale} testId={testId} />\n <RulerBody props={props} ctx={ctx} />\n <Box sx={SR_ONLY_SX} aria-live=\"polite\" role=\"status\" data-testid={`${testId}-live`}>\n {announcement}\n </Box>\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/ScheduleGrid/ScheduleGrid.keyboard.ts"],"sourcesContent":["import type * as React from 'react';\n\nimport type { ScheduleGridLabels } from '../../../copy/labels';\nimport { isOpen, stepDay } from './schedule-grid-model';\nimport type { CellAbilities } from './ScheduleGrid.parts';\nimport type { ScheduleGridBlock, ScheduleGridCell, ScheduleGridColumn, ScheduleGridRow } from './ScheduleGrid.types';\n\n/**\n * THE GRID'S KEYBOARD (FUT-3825). Every empty cell's \"+\" and every block is a\n * button in the tab order; on top of that:\n * - arrows move focus to the nearest focusable cell that way;\n * - Shift+←/→ on a copyable block copies it one day;\n * - Alt+←/→ on a movable block moves it one day (focus follows it);\n * either on a block that cannot do it says so (`notMovable`), a taken or\n * closed day is refused; each is read by the live region. With Ctrl or Meta\n * the key is not the grid's.\n */\nexport interface GridKeyContext {\n root: HTMLElement;\n rows: readonly ScheduleGridRow[];\n columns: readonly ScheduleGridColumn[];\n cell: (rowId: string, day: number) => ScheduleGridCell;\n can: CellAbilities;\n onCopy?: (blockId: string, days: number[]) => void;\n onMove?: (blockId: string, toRowId: string, toDay: number) => void;\n labels: ScheduleGridLabels;\n say: (text: string) => void;\n /** Wait for the block at its new day and focus it there. */\n follow: (blockId: string, day: number) => void;\n}\n\n/** Every focusable part of the grid (empty cells' buttons and blocks). */\nexport function focusables(root: HTMLElement): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>('[data-sg-focus]'));\n}\n\n/** Focus the first focusable of the cell at (`rowId`, `day`); false when it has none. */\nfunction focusCell(root: HTMLElement, rowId: string, day: number): boolean {\n const target = focusables(root).find((el) => el.dataset.sgRow === rowId && Number(el.dataset.sgDay) === day);\n target?.focus();\n return Boolean(target);\n}\n\ninterface Arrow {\n horizontal: boolean;\n step: -1 | 1;\n}\n\nfunction arrowOf(key: string): Arrow | null {\n if (key === 'ArrowLeft') return { horizontal: true, step: -1 };\n if (key === 'ArrowRight') return { horizontal: true, step: 1 };\n if (key === 'ArrowUp') return { horizontal: false, step: -1 };\n if (key === 'ArrowDown') return { horizontal: false, step: 1 };\n return null;\n}\n\n/** Move focus `arrow`-wards to the nearest cell that has something to focus; a closed or read-only one is passed over. */\nfunction moveFocus(ctx: GridKeyContext, from: HTMLElement, arrow: Arrow): boolean {\n const rowIndex = ctx.rows.findIndex((row) => row.id === from.dataset.sgRow);\n const day = Number(from.dataset.sgDay);\n if (rowIndex < 0) return false;\n for (let distance = 1; ; distance += 1) {\n const offset = arrow.step * distance;\n const nextDay = arrow.horizontal ? day + offset : day;\n const row = ctx.rows[arrow.horizontal ? rowIndex : rowIndex + offset];\n if (!row || nextDay < 0 || nextDay >= ctx.columns.length) return false;\n if (focusCell(ctx.root, row.id, nextDay)) return true;\n }\n}\n\n/** Which gesture a modified arrow asks of this block, if the grid allows it. */\nfunction gestureOf(event: React.KeyboardEvent, block: ScheduleGridBlock, can: CellAbilities): 'copy' | 'move' | null {\n if (event.shiftKey && !event.altKey) return can.copy && block.copyable ? 'copy' : null;\n if (event.altKey && !event.shiftKey) return can.move && block.movable ? 'move' : null;\n return null;\n}\n\n/** The block a key landed on, with its row — or nothing. */\nfunction blockUnder(ctx: GridKeyContext, el: HTMLElement): { block: ScheduleGridBlock; row: ScheduleGridRow; day: number } | null {\n const rowId = el.dataset.sgRow ?? '';\n const day = Number(el.dataset.sgDay);\n const block = ctx.cell(rowId, day).blocks.find((entry) => entry.id === el.dataset.sgBlock);\n const row = ctx.rows.find((entry) => entry.id === rowId);\n return block && row ? { block, row, day } : null;\n}\n\n/** The open day one step away, with its column — or nothing past either end or on a taken / closed day. */\nfunction openNeighbour(ctx: GridKeyContext, rowId: string, day: number, step: -1 | 1) {\n const target = stepDay(day, step, ctx.columns.length);\n if (target === undefined) return null;\n const column = ctx.columns[target];\n return column && isOpen(ctx.cell(rowId, target)) ? { day: target, column } : null;\n}\n\n/**\n * Shift/Alt+←/→ on a block. Returns whether the key was the grid's: a block\n * that cannot be copied or moved that way refuses it aloud, and the key goes\n * no further (Alt+← would otherwise be the browser's Back).\n */\nfunction blockKey(ctx: GridKeyContext, el: HTMLElement, event: React.KeyboardEvent, step: -1 | 1): boolean {\n const under = blockUnder(ctx, el);\n if (!under) return false;\n const gesture = gestureOf(event, under.block, ctx.can);\n const { block, row, day } = under;\n const target = gesture ? openNeighbour(ctx, row.id, day, step) : null;\n if (!gesture) {\n ctx.say(ctx.labels.notMovable);\n } else if (!target) {\n ctx.say(ctx.labels.refused);\n } else if (gesture === 'copy') {\n ctx.onCopy?.(block.id, [target.day]);\n ctx.say(ctx.labels.copied(block.label, target.column.label));\n } else {\n ctx.follow(block.id, target.day);\n ctx.onMove?.(block.id, row.id, target.day);\n ctx.say(ctx.labels.moved(block.label, row.label, target.column.label));\n }\n return true;\n}\n\n/** Shift OR Alt (not both) and no Ctrl or Meta: a key the grid answers for a block, as the ruler does. */\nconst isBlockGesture = (event: React.KeyboardEvent): boolean =>\n event.shiftKey !== event.altKey && !event.ctrlKey && !event.metaKey;\n\nconst hasModifier = (event: React.KeyboardEvent): boolean => event.shiftKey || event.altKey || event.ctrlKey || event.metaKey;\n\n/** The grid's `onKeyDown`. */\nexport function handleGridKey(event: React.KeyboardEvent, ctx: GridKeyContext): void {\n const el = (event.target as HTMLElement).closest<HTMLElement>('[data-sg-focus]');\n const arrow = arrowOf(event.key);\n if (!el || !arrow) return;\n const onBlock = el.dataset.sgBlock !== undefined;\n if (onBlock && arrow.horizontal && isBlockGesture(event)) {\n if (blockKey(ctx, el, event, arrow.step)) event.preventDefault();\n return;\n }\n if (!hasModifier(event) && moveFocus(ctx, el, arrow)) event.preventDefault();\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=chunk-TTRWOI6Z.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/ScheduleGrid/ScheduleGrid.tsx"],"sourcesContent":["'use client';\n\nimport Box from '@mui/material/Box/index.js';\nimport React, { useEffect, useRef } from 'react';\n\nimport { EN_US_UI_LABELS } from '../../../en-US.labels';\nimport { resolveLabels } from '../../../utils/resolve-labels';\nimport { focusables, handleGridKey } from './ScheduleGrid.keyboard';\nimport { GridBody, GridHeader, type CellAbilities } from './ScheduleGrid.parts';\nimport { frameSx, headerSx, rootSx, rowGridSx, scrollSx, SR_ONLY_SX } from './ScheduleGrid.styles';\nimport type { ScheduleGridProps } from './ScheduleGrid.types';\nimport { useAnnouncer } from './useAnnouncer';\nimport { useGridDrag } from './useGridDrag';\nimport { useSidewaysScroll } from './useSidewaysScroll';\n\n/**\n * After a keyboard move the host re-renders the block in its new cell (a new\n * element): focus follows it there. After a create on an empty day's \"+\" (Enter,\n * Space or a click) the \"+\" gives way to the host's new block: focus moves to\n * it, so the arrows go on from there — after a click without scrolling. A host\n * that refused keeps focus where it was; the next key or pointer press forgets\n * the wait.\n */\ntype FollowTarget = { kind: 'move'; id: string; day: number } | { kind: 'create'; row: string; day: number; pointer: boolean };\n\n/** The empty day's \"+\" an event landed on, if any. */\nfunction plusOf(target: EventTarget): HTMLElement | null {\n if (!(target instanceof HTMLElement)) return null;\n const plus = target.closest<HTMLElement>('button[data-sg-focus]');\n return plus && plus.dataset.sgBlock === undefined && plus.dataset.sgRow !== undefined ? plus : null;\n}\n\nfunction useFollowFocus(rootRef: React.RefObject<HTMLElement | null>) {\n const pending = useRef<FollowTarget | null>(null);\n useEffect(() => {\n const follow = pending.current;\n if (!follow || !rootRef.current) return;\n const block = focusables(rootRef.current).find((el) =>\n Number(el.dataset.sgDay) !== follow.day || el.dataset.sgBlock === undefined\n ? false\n : follow.kind === 'move'\n ? el.dataset.sgBlock === follow.id\n : el.dataset.sgRow === follow.row,\n );\n if (!block) return;\n // After a click the cell stays where the pointer left it: no scroll at all (FUT-3825 R1).\n block.focus(follow.kind === 'create' && follow.pointer ? { preventScroll: true } : undefined);\n pending.current = null;\n });\n return {\n follow: (id: string, day: number): void => {\n pending.current = { kind: 'move', id, day };\n },\n /** A key that presses an empty day's \"+\" (its click creates there). */\n followCreate: (event: React.KeyboardEvent): void => {\n const plus = plusOf(event.target);\n if ((event.key !== 'Enter' && event.key !== ' ') || !plus?.dataset.sgRow) return;\n pending.current = { kind: 'create', row: plus.dataset.sgRow, day: Number(plus.dataset.sgDay), pointer: false };\n },\n /** A pointer click on an empty day's \"+\" (a key's click, `detail` 0, is the key's). */\n followClickCreate: (event: React.MouseEvent): void => {\n const plus = plusOf(event.target);\n if (event.detail === 0 || !plus?.dataset.sgRow) return;\n pending.current = { kind: 'create', row: plus.dataset.sgRow, day: Number(plus.dataset.sgDay), pointer: true };\n },\n forget: (): void => {\n pending.current = null;\n },\n };\n}\n\nfunction abilitiesOf(props: ScheduleGridProps): CellAbilities {\n const open = !props.readOnly && !props.loading;\n return { create: open && Boolean(props.onCreate), copy: open && Boolean(props.onCopy), move: open && Boolean(props.onMove) };\n}\n\n/**\n * People (or resources) as rows, days as columns, and blocks with a start and\n * an end in the cells — the week grid of a staff schedule (FUT-3825).\n *\n * Click an empty cell to create on that day; drag across empty cells of a row\n * to create on each; drag a block's edge grip along its row to copy it; drag\n * its middle to move it to another day or row; click it to open it. Touch\n * scrolls and never drags. Every gesture has a keyboard twin.\n *\n * The grid reports gestures; the hours, limits and refusals are the host's.\n */\nexport function ScheduleGrid(props: ScheduleGridProps): React.JSX.Element {\n const { columns, groups, cell, onCreate, onCopy, onMove } = props;\n const testId = props.dataTestId ?? 'schedule-grid';\n const labels = resolveLabels(EN_US_UI_LABELS.scheduleGrid, props.labels);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const { text: announcement, say } = useAnnouncer();\n const focus = useFollowFocus(rootRef);\n const dragApi = useGridDrag(rootRef, { cell, onCreate, onCopy, onMove });\n const can = abilitiesOf(props);\n const rows = groups.flatMap((group) => group.rows);\n const hasTotal = props.totalLabel !== undefined || rows.some((row) => row.total !== undefined);\n const rowSx = rowGridSx(columns.length, hasTotal);\n\n const headRef = useRef<HTMLDivElement | null>(null);\n const bodyRef = useRef<HTMLDivElement | null>(null);\n const sideways = useSidewaysScroll(headRef, bodyRef);\n\n const onKeyDown = (event: React.KeyboardEvent): void => {\n sideways.release();\n focus.forget();\n if (!rootRef.current) return;\n if (can.create) focus.followCreate(event);\n handleGridKey(event, { root: rootRef.current, rows, columns, cell, can, onCopy, onMove, labels, say, follow: focus.follow });\n };\n\n return (\n <Box sx={rootSx} data-testid={testId}>\n <Box\n ref={rootRef}\n role=\"table\"\n aria-label={props['aria-label']}\n aria-busy={props.loading || undefined}\n aria-description={props.loading ? labels.loading : undefined}\n sx={frameSx(columns.length, hasTotal)}\n onKeyDown={onKeyDown}\n onPointerDownCapture={focus.forget}\n onClickCapture={can.create ? focus.followClickCreate : undefined}\n >\n {/* The header row sits outside the sideways scroller, so it sticks to the page; it follows the days sideways. */}\n <Box ref={headRef} role=\"none\" sx={headerSx(props.stickyTop ?? 0)} data-sg-head=\"\" data-testid={`${testId}-head`} onWheel={sideways.forwardWheel}>\n <GridHeader columns={columns} totalLabel={hasTotal ? (props.totalLabel ?? '') : undefined} rowSx={rowSx} testId={testId} />\n </Box>\n <Box ref={bodyRef} role=\"none\" sx={scrollSx} data-sg-scroll=\"\" data-testid={`${testId}-scroll`} onScroll={sideways.follow}\n onFocus={sideways.bringOut}\n onPointerDownCapture={sideways.press}\n >\n <GridBody grid={props} rows={rows} rowSx={rowSx} hasTotal={hasTotal} can={can} dragApi={dragApi} labels={labels} testId={testId} />\n </Box>\n </Box>\n <Box sx={SR_ONLY_SX} aria-live=\"polite\" role=\"status\" data-testid={`${testId}-live`}>\n {announcement}\n </Box>\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/ScheduleGrid/ScheduleGrid.styles.ts"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles/index.js';\nimport type { CSSObject } from '@mui/material/styles/index.js';\n\nimport { rem, sxRem } from '../../../tokens/relative';\nimport { SCHEDULE_GRID_METRICS as M } from './ScheduleGrid.metrics';\nimport { blockToneStyles, breakHatch } from './schedule-tones';\nimport type { ScheduleBlockTone } from './ScheduleGrid.types';\n\n/**\n * The grid's root: the container the column widths answer to (container\n * queries, never media queries — the grid may sit in a narrow pane).\n */\nexport const rootSx: SxProps<Theme> = { containerType: 'inline-size', minWidth: 0, width: '100%' };\n\n/** The columns a row has: the name, the days, the total (when there is one). */\nfunction trackCount(dayCount: number, hasTotal: boolean): number {\n return 1 + dayCount + (hasTotal ? 1 : 0);\n}\n\n/**\n * The narrowest container a layout fits in, in px: its name column, its days\n * at their minimum, its total, and the gaps between them — for THIS grid's\n * day count, so a fortnight scrolls where a week still fits.\n */\nfunction fitsFrom(dayCount: number, hasTotal: boolean, name: number, day: number, total: number): number {\n return name + dayCount * day + (hasTotal ? total : 0) + (trackCount(dayCount, hasTotal) - 1) * M.gap;\n}\n\n/** `@container (width < px)`: every bound is \"from px up\" (ranges are exclusive below, inclusive above). */\nfunction below(theme: Theme, px: number): string {\n return `@container (width < ${rem(theme, px)})`;\n}\n\n/**\n * The column widths, as variables every row reads, by the container's width:\n * - from `wide` up: 200px names, days of at least 104px with their grips;\n * - from `compact` up: 140px names, 40px total, days of at least 98px — still\n * unscrolled, grips kept, the header row sticking to the page;\n * - below `compact`: days of at least 152px, grips kept; the body scrolls\n * sideways under the pinned names and the header row follows it sideways\n * while it still sticks to the page (`useSidewaysScroll` sets its scroll);\n * - below 600px: 120px names, 136px days, no grips.\n * The `wide` and `compact` bounds come from this grid's own day count\n * (`fitsFrom`). Container queries, never media queries.\n */\nexport function frameSx(dayCount: number, hasTotal: boolean): SxProps<Theme> {\n return (theme: Theme) => {\n const terms = ['var(--sg-name)', `${dayCount} * var(--sg-day)`, `${trackCount(dayCount, hasTotal) - 1} * ${rem(theme, M.gap)}`];\n if (hasTotal) terms.push('var(--sg-total)');\n const wide = fitsFrom(dayCount, hasTotal, M.nameColumn.wide, M.dayMin.wide, M.totalColumn.wide);\n const compact = fitsFrom(dayCount, hasTotal, M.nameColumn.compact, M.dayMin.compact, M.totalColumn.compact);\n return {\n '--sg-name': rem(theme, M.nameColumn.wide),\n '--sg-total': rem(theme, M.totalColumn.wide),\n '--sg-day': rem(theme, M.dayMin.wide),\n // What every row is at least: its own columns at their minimums.\n '--sg-min': `calc(${terms.join(' + ')})`,\n [below(theme, wide)]: {\n '--sg-name': rem(theme, M.nameColumn.compact),\n '--sg-total': rem(theme, M.totalColumn.compact),\n '--sg-day': rem(theme, M.dayMin.compact),\n '& [data-sg-block]': { paddingLeft: rem(theme, M.blockPadding.tight), paddingRight: rem(theme, M.blockPadding.tight) },\n },\n [below(theme, compact)]: {\n '--sg-day': rem(theme, M.dayMin.scrolled),\n '& [data-sg-block]': {\n paddingLeft: rem(theme, M.blockPadding.start),\n paddingRight: rem(theme, M.blockPadding.end),\n },\n // A cell the keyboard reaches is brought out beside the pinned names, never under them.\n '& > [data-sg-scroll]': {\n overflowX: 'auto',\n overscrollBehaviorX: 'contain',\n scrollPaddingInlineStart: `calc(var(--sg-name) + ${rem(theme, M.gap)})`,\n },\n // The header row follows the days sideways (the grid sets its scroll). It is no scroller of\n // its own: a scroller with nothing focusable inside is a tab stop of its own.\n // `contain` still holds on a hidden overflow: a sideways swipe over the header is never the\n // browser's back / forward gesture.\n '& > [data-sg-head]': { overflowX: 'hidden', overscrollBehaviorX: 'contain' },\n // The pinned column: the names (and the cell above them, and the group\n // titles) stay while the days scroll under them.\n '& [role=\"rowheader\"], & [data-sg-corner]': {\n position: 'sticky',\n left: 0,\n zIndex: 2,\n backgroundColor: theme.palette.background.default,\n // Covers the gap after it too, so nothing scrolling shows between the name and the days.\n boxShadow: `${rem(theme, M.gap)} 0 0 ${theme.palette.background.default}`,\n },\n '& [data-sg-group-title]': { position: 'sticky', left: 0, width: 'fit-content' },\n },\n [below(theme, M.narrowBelow)]: {\n '--sg-name': rem(theme, M.nameColumn.narrow),\n '--sg-day': rem(theme, M.dayMin.narrow),\n // A phone-sized pane is read and tapped, not dragged (a phone renders\n // DayRuler per day): the grips would eat the block (Shift+arrows still copy).\n '& [data-sg-grip]': { display: 'none' },\n '& [data-sg-block]': { paddingLeft: rem(theme, M.cellPadding), paddingRight: rem(theme, M.cellPadding) },\n },\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n userSelect: 'none',\n };\n };\n}\n\n/** The body: scrolls sideways (under the compact bound) when the days' minimums do not fit. */\nexport const scrollSx: SxProps<Theme> = { minWidth: 0 };\n\n/** One line of the grid — the header or a person — as the shared columns. */\n/** A style that may sit in an `sx` array next to another. */\ntype SxPart = (theme: Theme) => CSSObject;\n\nexport function rowGridSx(dayCount: number, hasTotal: boolean): SxPart {\n return (theme: Theme) => ({\n display: 'grid',\n gridTemplateColumns: `var(--sg-name) repeat(${dayCount}, minmax(var(--sg-day), 1fr))${hasTotal ? ' var(--sg-total)' : ''}`,\n gap: rem(theme, M.gap),\n alignItems: 'stretch',\n minWidth: 'var(--sg-min)',\n });\n}\n\n/**\n * Around the header row: opaque, pinned to the top of the PAGE (or whatever\n * scrolls the grid vertically) — it is not inside the sideways scroller, so\n * it sticks at every width; while the days scroll it follows them sideways.\n */\nexport function headerSx(stickyTop: number): SxPart {\n return (theme: Theme) => ({\n position: 'sticky',\n top: rem(theme, stickyTop),\n zIndex: 3,\n backgroundColor: theme.palette.background.default,\n });\n}\n\n/** The header row itself, inside its sticky frame. */\nexport const headerRowSx: SxPart = (theme: Theme) => ({\n paddingTop: theme.spacing(0.75),\n paddingBottom: theme.spacing(0.75),\n});\n\n/** A day's header: today's label in the primary colour, a gone day's in the secondary ink (today wins). */\nexport function headerCellSx(today: boolean, past = false): SxProps<Theme> {\n let color = 'text.primary';\n if (past) color = 'text.secondary';\n if (today) color = 'primary.main';\n return {\n fontSize: sxRem(M.headerLabel),\n fontWeight: 500,\n color,\n p: 0.5,\n minWidth: 0,\n // A long label (\"Hoje · Seg 19/10\") wraps to a second line, as the prototype's: never cut.\n '& > *': { display: 'block', overflowWrap: 'anywhere' },\n };\n}\n\nexport const headerSublabelSx: SxProps<Theme> = {\n fontSize: sxRem(M.headerSublabel),\n fontWeight: 400,\n color: 'text.secondary',\n};\n\nexport const totalHeaderSx: SxProps<Theme> = {\n fontSize: sxRem(M.total),\n color: 'text.secondary',\n textAlign: 'right',\n alignSelf: 'end',\n p: 0.5,\n pr: 0,\n};\n\nexport const groupTitleSx: SxProps<Theme> = {\n fontSize: sxRem(M.groupTitle),\n letterSpacing: '0.05em',\n textTransform: 'uppercase',\n color: 'text.secondary',\n fontWeight: 500,\n pt: 1.5,\n pb: 0.5,\n m: 0,\n};\n\n/** A person's line: one grid row, then the gap below it. */\nexport const personRowSx: SxPart = (theme: Theme) => ({ marginBottom: rem(theme, M.gap) });\n\nexport const nameCellSx: SxProps<Theme> = {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n pr: 0.5,\n minWidth: 0,\n};\n\nexport const totalCellSx: SxProps<Theme> = {\n fontSize: sxRem(M.total),\n color: 'text.secondary',\n textAlign: 'right',\n alignSelf: 'center',\n whiteSpace: 'nowrap',\n};\n\n/** What a cell is drawing right now. */\nexport interface CellLook {\n today: boolean;\n blocked: boolean;\n /** The day has gone (`closed`): no fill, the divider border; never a drop target. */\n closed: boolean;\n /** A create or copy will land here: dashed, with the hours as ghost text. */\n target: boolean;\n /** The pointer is over it while a block moves. */\n over: boolean;\n /** The cell's own \"+\" button may be pressed. */\n interactive: boolean;\n}\n\nfunction hatch(theme: Theme): string {\n const a = theme.palette.action.hover;\n const b = theme.palette.action.selected;\n const w = rem(theme, M.hatch);\n const w2 = rem(theme, M.hatch * 2);\n return `repeating-linear-gradient(135deg, ${a} 0, ${a} ${w}, ${b} ${w}, ${b} ${w2})`;\n}\n\nexport function cellSx(look: CellLook): SxProps<Theme> {\n return (theme: Theme): CSSObject => {\n const base: CSSObject = {\n position: 'relative',\n minHeight: rem(theme, M.cellMinHeight),\n borderRadius: rem(theme, M.cellRadius),\n backgroundColor: theme.palette.action.hover,\n border: `1px solid ${look.today ? theme.palette.primary.main : theme.palette.divider}`,\n padding: rem(theme, M.cellPadding),\n display: 'flex',\n flexDirection: 'column',\n gap: rem(theme, M.blockGap),\n boxSizing: 'border-box',\n minWidth: 0,\n cursor: look.interactive ? 'cell' : 'default',\n };\n if (look.blocked) {\n return { ...base, background: hatch(theme), borderColor: theme.palette.divider, cursor: 'not-allowed' };\n }\n if (look.closed) return { ...base, backgroundColor: 'transparent', borderColor: theme.palette.divider };\n if (look.target) {\n return {\n ...base,\n border: `${rem(theme, M.targetBorder)} dashed ${theme.palette.primary.main}`,\n backgroundColor: theme.palette.action.selected,\n };\n }\n if (look.over) return { ...base, borderColor: theme.palette.primary.main, backgroundColor: theme.palette.action.selected };\n return base;\n };\n}\n\n/** The empty cell's button: the whole cell, a quiet \"+\" in its middle. */\nexport const plusButtonSx: SxProps<Theme> = (theme: Theme) => ({\n flex: '1 1 auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n font: 'inherit',\n background: 'transparent',\n border: 0,\n p: 0,\n m: 0,\n color: theme.palette.text.disabled,\n cursor: 'inherit',\n borderRadius: rem(theme, M.cellRadius - M.cellPadding),\n '& svg': { fontSize: rem(theme, M.plusIcon) },\n // The \"+\" is swapped for the ghost on pointer down: were it the press's\n // target, the browser would drop the click once it left the DOM.\n '& > *': { pointerEvents: 'none' },\n '&:hover': { color: theme.palette.text.secondary },\n '&:focus-visible': { outline: `${rem(theme, M.ring)} solid ${theme.palette.primary.main}`, outlineOffset: 0 },\n // A drag's ghost text sits where the prototype writes it: top left.\n '&[data-ghost]': { justifyContent: 'flex-start', alignItems: 'flex-start' },\n});\n\n/** The ghost text of a cell a create or copy will land on. */\nexport const ghostSx: SxProps<Theme> = (theme: Theme) => ({\n fontSize: rem(theme, M.blockFont),\n fontWeight: 500,\n color: theme.palette.primary.main,\n px: 0.75,\n py: 0.5,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n});\n\n/** A closed day's word (\"Afastamento\"): one line inside its cell, cut with an ellipsis (the full word in `title`). */\nexport const blockedLabelSx: SxProps<Theme> = (theme: Theme) => ({\n display: 'block',\n fontSize: rem(theme, M.blockFont),\n color: theme.palette.text.secondary,\n px: 0.75,\n py: 0.5,\n lineHeight: 1.3,\n minWidth: 0,\n maxWidth: '100%',\n boxSizing: 'border-box',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n});\n\nexport function blockSx(tone: ScheduleBlockTone, opts: { selected: boolean; movable: boolean }): SxProps<Theme> {\n return (theme: Theme): CSSObject => ({\n ...blockToneStyles(theme, tone),\n position: 'relative',\n display: 'block',\n width: '100%',\n minWidth: 0,\n maxWidth: '100%',\n boxSizing: 'border-box',\n textAlign: 'left',\n font: 'inherit',\n fontSize: rem(theme, M.blockFont),\n fontWeight: 500,\n lineHeight: 1.35,\n borderRadius: rem(theme, M.blockRadius),\n padding: `${rem(theme, M.blockPadding.y)} ${rem(theme, M.blockPadding.end)} ${rem(theme, M.blockPadding.y)} ${rem(theme, M.blockPadding.start)}`,\n cursor: opts.movable ? 'grab' : 'pointer',\n margin: 0,\n boxShadow: opts.selected ? `0 0 0 ${rem(theme, M.ring)} ${theme.palette.primary.main}` : 'none',\n '&:focus-visible': { outline: `${rem(theme, M.ring)} solid ${theme.palette.primary.main}`, outlineOffset: rem(theme, M.ringOffset) },\n // The hours stay on one line; the note wraps (the block grows), as the prototype's\n // \"↻ a cada 2 / semanas\": a note is never cut, so a break keeps its end.\n '& > [data-sg-line]': { position: 'relative', display: 'block' },\n '& > [data-sg-line=\"label\"]': { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' },\n '& > [data-sg-line=\"note\"]': { fontWeight: 400, overflowWrap: 'anywhere' },\n });\n}\n\n/** A break inside a block: a hatched band across its height, under its text. */\nexport function breakSx(span: { start: number; end: number }): SxProps<Theme> {\n return (theme: Theme) => ({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: `${span.start * 100}%`,\n width: `${(span.end - span.start) * 100}%`,\n background: breakHatch(theme, rem(theme, M.breakStripe.ink), rem(theme, M.breakStripe.ink + M.breakStripe.gap)),\n pointerEvents: 'none',\n });\n}\n\nexport function gripSx(side: 'l' | 'r'): SxProps<Theme> {\n return (theme: Theme) => ({\n position: 'absolute',\n top: 0,\n bottom: 0,\n [side === 'l' ? 'left' : 'right']: 0,\n width: rem(theme, M.grip.width),\n cursor: 'ew-resize',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n '&::before': {\n content: '\"\"',\n display: 'block',\n width: rem(theme, M.grip.barWidth),\n height: rem(theme, M.grip.barHeight),\n borderRadius: rem(theme, M.grip.barRadius),\n backgroundColor: 'currentColor',\n opacity: 0.5,\n },\n });\n}\n\nexport const skeletonCellSx: SxProps<Theme> = (theme: Theme) => ({\n minHeight: rem(theme, M.cellMinHeight),\n borderRadius: rem(theme, M.cellRadius),\n backgroundColor: theme.palette.action.hover,\n});\n\nexport const SR_ONLY_SX: SxProps<Theme> = {\n position: 'absolute',\n width: sxRem(1),\n height: sxRem(1),\n padding: 0,\n margin: sxRem(-1),\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/en-US.labels.ts"],"sourcesContent":["/**\n * The en-US labels pack — and, unlike the other en-US packs, the components'\n * own fallback: each `labels` prop is optional, and this is what a host that\n * passes nothing has always rendered, kept word for word (including the\n * lower-case `close`/`loading` names tests already query by).\n */\nimport type { UiLabels } from './copy/labels';\n\nexport const EN_US_UI_LABELS: UiLabels = {\n common: {\n loading: \"loading\",\n close: \"close\",\n delete: \"delete\",\n },\n stepper: {\n step: (position, label) => `Step ${position}: ${label}`,\n optional: \"optional\",\n completed: \"completed\",\n current: \"current\",\n },\n timeline: {\n expandDetails: \"Expand item details\",\n collapseDetails: \"Collapse item details\",\n item: (title) => `Timeline item: ${title}`,\n },\n lazyImage: {\n loadingAlt: (alt) => `${alt} (loading)`,\n fallbackAlt: (alt) => `${alt} (fallback)`,\n },\n sonner: {\n hiddenCount: (count) => `+${count} more`,\n },\n richTextEditor: {\n placeholder: \"Start typing...\",\n ariaLabel: \"Rich text editor\",\n listItem: \"List item\",\n bold: \"Bold\",\n italic: \"Italic\",\n underline: \"Underline\",\n strikethrough: \"Strikethrough\",\n numberedList: \"Numbered List\",\n bulletedList: \"Bulleted List\",\n insertLink: \"Insert Link\",\n insertImage: \"Insert Image\",\n codeBlock: \"Code Block\",\n quote: \"Quote\",\n linkPrompt: \"Enter URL:\",\n imagePrompt: \"Enter image URL:\",\n },\n table: {\n sortBy: (header) => `Sort by ${header}`,\n selectRow: (rowNumber) => `select row ${rowNumber}`,\n selectAllRows: \"select all\",\n },\n code: {\n copy: \"Copy code\",\n copied: \"Copied!\",\n },\n contentToolbar: {\n gridView: \"Grid View\",\n listView: \"List View\",\n openFilters: \"Open filters\",\n closeFilters: \"Close filters\",\n filters: \"Filters\",\n all: \"All\",\n search: \"Search…\",\n noResults: \"No results\",\n },\n dashboard: {\n breadcrumb: \"breadcrumb\",\n moreFilters: \"More filters\",\n },\n navigationMenu: {\n collapse: \"Collapse\",\n expand: \"Expand\",\n },\n workflowStep: {\n step: (position, title) => `Step ${position}: ${title}`,\n progress: (position, total) => `Step ${position} of ${total}`,\n },\n alertDialog: {\n cancel: \"Cancel\",\n confirm: \"Confirm\",\n },\n avatar: {\n name: \"Avatar\",\n },\n emptyState: {\n refresh: \"Refresh\",\n create: \"Create New\",\n },\n errorState: {\n retry: \"Retry\",\n },\n loadingState: {\n skeleton: \"Loading content\",\n spinner: \"Loading\",\n },\n stackedModal: {\n loading: \"Loading...\",\n },\n command: {\n placeholder: \"Type a command or search...\",\n empty: \"No results found\",\n loading: \"Loading...\",\n },\n formErrorSnackbar: {\n message: \"Please fix the highlighted fields and try again.\",\n },\n columnsMenu: {\n title: \"Columns\",\n toggle: \"Toggle columns\",\n },\n drawer: {\n close: \"Close drawer\",\n },\n settingsLayout: {\n navigation: \"Settings\",\n searchPlaceholder: \"Search settings\",\n emptySearch: \"No settings match your search.\",\n back: \"Back\",\n },\n tableFilter: {\n filters: \"Filters\",\n keywordPlaceholder: \"Press Enter to filter\",\n keywordLabel: \"Filter by keyword\",\n },\n appHeader: {\n disclose: (title) => `${title} details`,\n },\n breadcrumbs: {\n navigation: \"breadcrumb navigation\",\n },\n animatedIcon: {\n name: (variant) => `Animated ${variant} icon`,\n },\n infiniteScroll: {\n loadFailed: \"An error occurred while loading more items\",\n },\n socialLogin: {\n title: \"Sign in to continue\",\n divider: \"or\",\n },\n dateRangePicker: {\n calendar: \"Calendar\",\n },\n scheduleGrid: {\n createCell: (row, column) => `Schedule ${row}, ${column}`,\n blockedCell: (row, column) => `${row}, ${column}: closed`,\n copied: (block, column) => `${block} copied to ${column}`,\n moved: (block, row, column) => `${block} moved to ${row}, ${column}`,\n refused: \"Not there: that day is taken or closed\",\n notMovable: \"This shift cannot be changed here\",\n loading: \"Loading the schedule\",\n },\n dayRuler: {\n createTrack: (row) => `Schedule ${row}`,\n moved: (block, range) => `${block} now ${range}`,\n resized: (block, range) => `${block} now ${range}`,\n refused: \"It cannot go further\",\n notMovable: \"This shift cannot be changed here\",\n loading: \"Loading the day\",\n },\n calendar: {\n chooseMonth: (month) => `${month}, choose month`,\n chooseYear: (year) => `${year}, choose year`,\n previousMonth: \"Previous month\",\n nextMonth: \"Next month\",\n months: \"Months\",\n years: \"Years\",\n },\n};\n"],"mappings":"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","names":[]}