@12-apps/ui 6.90.0 → 6.92.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 (285) hide show
  1. package/components-catalog.md +3 -3
  2. package/dist/_internal/components/data-display/Alert/Alert.js +2 -2
  3. package/dist/_internal/components/data-display/Avatar/Avatar.js +2 -2
  4. package/dist/_internal/components/data-display/Badge/Badge.js +2 -2
  5. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +3 -3
  6. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +4 -4
  7. package/dist/_internal/components/data-display/Carousel/Carousel.js +2 -2
  8. package/dist/_internal/components/data-display/Chart/Chart.js +4 -4
  9. package/dist/_internal/components/data-display/Chart/SpecChart.js +6 -6
  10. package/dist/_internal/components/data-display/Chart/chart-context.js +2 -2
  11. package/dist/_internal/components/data-display/Chart/chart-renderers.js +3 -3
  12. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
  13. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +25 -25
  14. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +31 -31
  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 +8 -8
  19. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +1 -1
  20. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +7 -7
  21. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +9 -9
  22. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +22 -22
  23. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +9 -9
  24. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +7 -7
  25. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +8 -8
  26. package/dist/_internal/components/data-display/DataViews/data-views-range-bounds.js +4 -4
  27. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +6 -6
  28. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +2 -2
  29. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +1 -1
  30. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +3 -3
  31. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +1 -1
  32. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +4 -4
  33. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +2 -2
  34. package/dist/_internal/components/data-display/DayRuler/DayRuler.en-US.js +1 -1
  35. package/dist/_internal/components/data-display/DayRuler/DayRuler.js +5 -5
  36. package/dist/_internal/components/data-display/DayRuler/DayRuler.labels.js +3 -3
  37. package/dist/_internal/components/data-display/DayRuler/DayRuler.parts.js +9 -4
  38. package/dist/_internal/components/data-display/DayRuler/DayRuler.pt-BR.js +1 -1
  39. package/dist/_internal/components/data-display/DayRuler/DayRuler.styles.js +9 -1
  40. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +10 -10
  41. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +9 -9
  42. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +12 -12
  43. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +7 -7
  44. package/dist/_internal/components/data-display/Lightbox/LightboxControls.js +2 -2
  45. package/dist/_internal/components/data-display/Lightbox/LightboxOverlay.js +3 -3
  46. package/dist/_internal/components/data-display/Lightbox/LightboxThumbnails.js +2 -2
  47. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +3 -3
  48. package/dist/_internal/components/data-display/MapPreview/MapMarkers.js +2 -2
  49. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +8 -8
  50. package/dist/_internal/components/data-display/RegionMap/RegionMap.hooks.js +2 -1
  51. package/dist/_internal/components/data-display/RegionMap/RegionMap.js +5 -4
  52. package/dist/_internal/components/data-display/RegionMap/RegionMap.view.js +19 -0
  53. package/dist/_internal/components/data-display/RegionMap/RegionMapDrawing.js +1 -1
  54. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.js +4 -3
  55. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.parts.js +3 -2
  56. package/dist/_internal/components/data-display/ScheduleGrid/schedule-header-host.styles.js +12 -0
  57. package/dist/_internal/components/data-display/ScheduleGrid/schedule-header-host.styles.js.map +1 -0
  58. package/dist/_internal/components/data-display/index.js +58 -51
  59. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +3 -3
  60. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +5 -5
  61. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.overview.js +4 -4
  62. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.parts.js +3 -3
  63. package/dist/_internal/components/feedback/index.js +6 -6
  64. package/dist/_internal/components/index.js +69 -62
  65. package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +6 -6
  66. package/dist/_internal/components/navigation/SectionNav/SectionNav.js +9 -9
  67. package/dist/_internal/components/navigation/SectionNav/SectionNav.parts.js +3 -3
  68. package/dist/_internal/components/navigation/SectionNav/SectionNav.primary.js +4 -4
  69. package/dist/_internal/components/navigation/SectionNav/SectionNav.rail.js +5 -5
  70. package/dist/_internal/components/navigation/SectionNav/SectionNav.railCreate.js +4 -4
  71. package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +4 -4
  72. package/dist/_internal/components/navigation/index.js +9 -9
  73. package/dist/_internal/user-avatar/user-avatar.js +3 -3
  74. package/dist/charts.js +6 -6
  75. package/dist/{chunk-FI2CQOGC.js → chunk-3OHZAZEE.js} +5 -5
  76. package/dist/{chunk-CJ6XXM4X.js → chunk-3PQL2EN5.js} +6 -6
  77. package/dist/{chunk-7YJYIMWP.js → chunk-4QR7LM5F.js} +6 -6
  78. package/dist/{chunk-HI7JPDD6.js → chunk-5357QUVE.js} +2 -2
  79. package/dist/{chunk-WNNA6YYE.js → chunk-5I75WRXT.js} +10 -7
  80. package/dist/chunk-5I75WRXT.js.map +1 -0
  81. package/dist/chunk-5MXVKZKZ.js +30 -0
  82. package/dist/chunk-5MXVKZKZ.js.map +1 -0
  83. package/dist/{chunk-BP3ZKIPE.js → chunk-64UNVW6D.js} +4 -4
  84. package/dist/{chunk-SCXVTNLE.js → chunk-66VKX6JE.js} +2 -2
  85. package/dist/{chunk-N5PVD4J5.js → chunk-6DO672AG.js} +7 -7
  86. package/dist/{chunk-NK6O4NE4.js → chunk-AI7XWBNG.js} +3 -3
  87. package/dist/{chunk-SNWCT6JN.js → chunk-AMIUZRDQ.js} +3 -3
  88. package/dist/{chunk-BMTIBQQC.js → chunk-BBBHPK2Q.js} +6 -6
  89. package/dist/{chunk-A3DDEKLV.js → chunk-BOADHYTA.js} +2 -2
  90. package/dist/{chunk-KRBPWTXW.js → chunk-CKQOYPH3.js} +2 -2
  91. package/dist/{chunk-EUR2ORTN.js → chunk-CSJ7WNXU.js} +2 -2
  92. package/dist/{chunk-QADTI63U.js → chunk-CZVAVX5L.js} +4 -4
  93. package/dist/{chunk-O3OU3ED7.js → chunk-D7R6SRJB.js} +3 -3
  94. package/dist/{chunk-O3OU3ED7.js.map → chunk-D7R6SRJB.js.map} +1 -1
  95. package/dist/{chunk-DVX4HDNP.js → chunk-DBPFKGXX.js} +2 -2
  96. package/dist/{chunk-XCUHGPPZ.js → chunk-DTZOP4ZR.js} +2 -2
  97. package/dist/chunk-DY2I6LMX.js +1 -0
  98. package/dist/chunk-DY2I6LMX.js.map +1 -0
  99. package/dist/{chunk-BLZDSCIZ.js → chunk-DYHOBKPU.js} +6 -6
  100. package/dist/{chunk-QKOJ4637.js → chunk-E6K2UZGR.js} +3 -3
  101. package/dist/{chunk-MX2RF34M.js → chunk-E73C73UD.js} +15 -7
  102. package/dist/chunk-E73C73UD.js.map +1 -0
  103. package/dist/{chunk-HNW7IZPV.js → chunk-EZBBLLEU.js} +5 -5
  104. package/dist/{chunk-HNW7IZPV.js.map → chunk-EZBBLLEU.js.map} +1 -1
  105. package/dist/{chunk-K3IB7S7Q.js → chunk-F2ZUUEXC.js} +3 -2
  106. package/dist/{chunk-K3IB7S7Q.js.map → chunk-F2ZUUEXC.js.map} +1 -1
  107. package/dist/{chunk-2M3W6ACW.js → chunk-FAUNQ3FS.js} +3 -3
  108. package/dist/{chunk-VIMMEADQ.js → chunk-FORAVDJF.js} +9 -9
  109. package/dist/{chunk-PJNIJIE6.js → chunk-FQNDJITD.js} +2 -2
  110. package/dist/chunk-FWAY2SAI.js +72 -0
  111. package/dist/chunk-FWAY2SAI.js.map +1 -0
  112. package/dist/{chunk-COKPPU42.js → chunk-FWTVIRZZ.js} +13 -13
  113. package/dist/{chunk-GMRQPNG3.js → chunk-G2NVBCF7.js} +20 -25
  114. package/dist/chunk-G2NVBCF7.js.map +1 -0
  115. package/dist/{chunk-JHWEL4NX.js → chunk-HS662RLW.js} +2 -2
  116. package/dist/{chunk-BZBLPXV7.js → chunk-IWSTMVCA.js} +4 -4
  117. package/dist/{chunk-TZC6KIK2.js → chunk-JG733RMP.js} +5 -5
  118. package/dist/{chunk-K3PMMW23.js → chunk-K6VEN5VN.js} +4 -4
  119. package/dist/{chunk-UKUGSU3Y.js → chunk-L4V7FZJI.js} +2 -2
  120. package/dist/{chunk-24HHUCWB.js → chunk-LDCZPZPD.js} +2 -2
  121. package/dist/{chunk-ILJ3FXIC.js → chunk-MM3QESLI.js} +2 -2
  122. package/dist/{chunk-EEO7M5GU.js → chunk-MYTV353T.js} +4 -4
  123. package/dist/{chunk-3HZKUN5J.js → chunk-MZAYIG2I.js} +2 -2
  124. package/dist/{chunk-AKE6KVQG.js → chunk-NGXL4R54.js} +5 -1
  125. package/dist/chunk-NGXL4R54.js.map +1 -0
  126. package/dist/{chunk-RDCIST7P.js → chunk-OCT5VCLP.js} +2 -2
  127. package/dist/{chunk-G2PVUPE7.js → chunk-OJZLFFG4.js} +41 -3
  128. package/dist/chunk-OJZLFFG4.js.map +1 -0
  129. package/dist/{chunk-F7LBTMCA.js → chunk-P53ANKZV.js} +4 -4
  130. package/dist/{chunk-HMEGQKNQ.js → chunk-PCQ5JWLF.js} +15 -7
  131. package/dist/chunk-PCQ5JWLF.js.map +1 -0
  132. package/dist/{chunk-QVDEGBME.js → chunk-PEAUGQKU.js} +4 -4
  133. package/dist/{chunk-BV2LOTMC.js → chunk-Q3SILZTQ.js} +2 -2
  134. package/dist/{chunk-DSBC6O46.js → chunk-R4LCPPKA.js} +3 -3
  135. package/dist/{chunk-ZH6NYB6Y.js → chunk-S2VZUBM7.js} +7 -7
  136. package/dist/{chunk-JFD742C3.js → chunk-TMINUTQQ.js} +2 -2
  137. package/dist/{chunk-SK2CTB3O.js → chunk-U2SAW6DH.js} +5 -5
  138. package/dist/{chunk-ACM3HHZY.js → chunk-UDBOGSFO.js} +68 -2
  139. package/dist/chunk-UDBOGSFO.js.map +1 -0
  140. package/dist/{chunk-DAHSKQBV.js → chunk-UMOHHWXY.js} +2 -2
  141. package/dist/{chunk-QAEO52Z4.js → chunk-VHE7UEG5.js} +2 -2
  142. package/dist/{chunk-TIM4PXWN.js → chunk-VWRXSBT2.js} +2 -2
  143. package/dist/{chunk-KANCE4MS.js → chunk-W2KOP27S.js} +3 -3
  144. package/dist/{chunk-P772HCHI.js → chunk-W676GY42.js} +4 -4
  145. package/dist/{chunk-T2G4LDU5.js → chunk-WLLUARTC.js} +2 -2
  146. package/dist/{chunk-3OTGREQG.js → chunk-X3GD3TFI.js} +15 -15
  147. package/dist/{chunk-3X2MA47R.js → chunk-XNAI7QGU.js} +6 -6
  148. package/dist/{chunk-L6JAALMX.js → chunk-XRV4QFEQ.js} +3 -3
  149. package/dist/{chunk-WH3LUOCQ.js → chunk-YE7M7URT.js} +2 -2
  150. package/dist/{chunk-WWR6APJR.js → chunk-YVDNCV2D.js} +5 -5
  151. package/dist/{chunk-LOLYBFYY.js → chunk-ZCNR4DN5.js} +5 -5
  152. package/dist/{chunk-D3OXTS7Y.js → chunk-ZHCZOPKE.js} +3 -2
  153. package/dist/{chunk-D3OXTS7Y.js.map → chunk-ZHCZOPKE.js.map} +1 -1
  154. package/dist/data-display/Alert.js +2 -2
  155. package/dist/data-display/Avatar.js +2 -2
  156. package/dist/data-display/Badge.js +2 -2
  157. package/dist/data-display/CardKit.js +14 -14
  158. package/dist/data-display/Carousel.js +2 -2
  159. package/dist/data-display/Chart.js +6 -6
  160. package/dist/data-display/DataGrid.js +2 -2
  161. package/dist/data-display/DataViews.js +47 -47
  162. package/dist/data-display/DayRuler.js +9 -9
  163. package/dist/data-display/FleetMap.js +12 -12
  164. package/dist/data-display/Lightbox.js +7 -7
  165. package/dist/data-display/MapPreview.js +8 -8
  166. package/dist/data-display/RegionMap.js +12 -6
  167. package/dist/data-display/ScheduleGrid.js +4 -3
  168. package/dist/feedback/NotificationStatusNotice.js +3 -3
  169. package/dist/feedback/SequenceResolver.js +5 -5
  170. package/dist/navigation/SectionNav.js +9 -9
  171. package/dist/types/components/data-display/DayRuler/DayRuler.d.ts.map +1 -1
  172. package/dist/types/components/data-display/DayRuler/DayRuler.en-US.d.ts.map +1 -1
  173. package/dist/types/components/data-display/DayRuler/DayRuler.labels.d.ts +2 -0
  174. package/dist/types/components/data-display/DayRuler/DayRuler.labels.d.ts.map +1 -1
  175. package/dist/types/components/data-display/DayRuler/DayRuler.parts.d.ts +13 -1
  176. package/dist/types/components/data-display/DayRuler/DayRuler.parts.d.ts.map +1 -1
  177. package/dist/types/components/data-display/DayRuler/DayRuler.pt-BR.d.ts.map +1 -1
  178. package/dist/types/components/data-display/DayRuler/DayRuler.styles.d.ts +16 -0
  179. package/dist/types/components/data-display/DayRuler/DayRuler.styles.d.ts.map +1 -1
  180. package/dist/types/components/data-display/DayRuler/DayRuler.types.d.ts +44 -1
  181. package/dist/types/components/data-display/DayRuler/DayRuler.types.d.ts.map +1 -1
  182. package/dist/types/components/data-display/DayRuler/index.d.ts +1 -1
  183. package/dist/types/components/data-display/DayRuler/index.d.ts.map +1 -1
  184. package/dist/types/components/data-display/RegionMap/RegionMap.d.ts +4 -1
  185. package/dist/types/components/data-display/RegionMap/RegionMap.d.ts.map +1 -1
  186. package/dist/types/components/data-display/RegionMap/RegionMap.hooks.d.ts +4 -2
  187. package/dist/types/components/data-display/RegionMap/RegionMap.hooks.d.ts.map +1 -1
  188. package/dist/types/components/data-display/RegionMap/RegionMap.types.d.ts +40 -0
  189. package/dist/types/components/data-display/RegionMap/RegionMap.types.d.ts.map +1 -1
  190. package/dist/types/components/data-display/RegionMap/RegionMap.view.d.ts +36 -0
  191. package/dist/types/components/data-display/RegionMap/RegionMap.view.d.ts.map +1 -0
  192. package/dist/types/components/data-display/RegionMap/RegionMapDrawing.d.ts +4 -1
  193. package/dist/types/components/data-display/RegionMap/RegionMapDrawing.d.ts.map +1 -1
  194. package/dist/types/components/data-display/RegionMap/index.d.ts +3 -2
  195. package/dist/types/components/data-display/RegionMap/index.d.ts.map +1 -1
  196. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.parts.d.ts +3 -1
  197. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.parts.d.ts.map +1 -1
  198. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.types.d.ts +12 -0
  199. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.types.d.ts.map +1 -1
  200. package/dist/types/components/data-display/ScheduleGrid/schedule-header-host.styles.d.ts +16 -0
  201. package/dist/types/components/data-display/ScheduleGrid/schedule-header-host.styles.d.ts.map +1 -0
  202. package/dist/user-avatar.js +3 -3
  203. package/package.json +1 -1
  204. package/src/components/data-display/DayRuler/DayRuler.en-US.ts +1 -0
  205. package/src/components/data-display/DayRuler/DayRuler.labels.ts +2 -0
  206. package/src/components/data-display/DayRuler/DayRuler.md +3 -2
  207. package/src/components/data-display/DayRuler/DayRuler.parts.tsx +120 -1
  208. package/src/components/data-display/DayRuler/DayRuler.pt-BR.ts +1 -0
  209. package/src/components/data-display/DayRuler/DayRuler.styles.ts +50 -1
  210. package/src/components/data-display/DayRuler/DayRuler.tsx +10 -1
  211. package/src/components/data-display/DayRuler/DayRuler.types.ts +30 -1
  212. package/src/components/data-display/DayRuler/index.ts +2 -0
  213. package/src/components/data-display/RegionMap/RegionMap.hooks.ts +24 -33
  214. package/src/components/data-display/RegionMap/RegionMap.md +27 -0
  215. package/src/components/data-display/RegionMap/RegionMap.tsx +7 -1
  216. package/src/components/data-display/RegionMap/RegionMap.types.ts +41 -0
  217. package/src/components/data-display/RegionMap/RegionMap.view.ts +105 -0
  218. package/src/components/data-display/RegionMap/RegionMapDrawing.tsx +11 -0
  219. package/src/components/data-display/RegionMap/index.ts +5 -1
  220. package/src/components/data-display/RegionMap/tests.md +10 -2
  221. package/src/components/data-display/ScheduleGrid/ScheduleGrid.md +3 -2
  222. package/src/components/data-display/ScheduleGrid/ScheduleGrid.parts.tsx +18 -3
  223. package/src/components/data-display/ScheduleGrid/ScheduleGrid.tsx +1 -1
  224. package/src/components/data-display/ScheduleGrid/ScheduleGrid.types.ts +12 -0
  225. package/src/components/data-display/ScheduleGrid/schedule-header-host.styles.ts +35 -0
  226. package/dist/chunk-ACFKPE2T.js +0 -1
  227. package/dist/chunk-ACM3HHZY.js.map +0 -1
  228. package/dist/chunk-AKE6KVQG.js.map +0 -1
  229. package/dist/chunk-G2PVUPE7.js.map +0 -1
  230. package/dist/chunk-GMRQPNG3.js.map +0 -1
  231. package/dist/chunk-HMEGQKNQ.js.map +0 -1
  232. package/dist/chunk-MX2RF34M.js.map +0 -1
  233. package/dist/chunk-WNNA6YYE.js.map +0 -1
  234. /package/dist/{chunk-ACFKPE2T.js.map → _internal/components/data-display/RegionMap/RegionMap.view.js.map} +0 -0
  235. /package/dist/{chunk-FI2CQOGC.js.map → chunk-3OHZAZEE.js.map} +0 -0
  236. /package/dist/{chunk-CJ6XXM4X.js.map → chunk-3PQL2EN5.js.map} +0 -0
  237. /package/dist/{chunk-7YJYIMWP.js.map → chunk-4QR7LM5F.js.map} +0 -0
  238. /package/dist/{chunk-HI7JPDD6.js.map → chunk-5357QUVE.js.map} +0 -0
  239. /package/dist/{chunk-BP3ZKIPE.js.map → chunk-64UNVW6D.js.map} +0 -0
  240. /package/dist/{chunk-SCXVTNLE.js.map → chunk-66VKX6JE.js.map} +0 -0
  241. /package/dist/{chunk-N5PVD4J5.js.map → chunk-6DO672AG.js.map} +0 -0
  242. /package/dist/{chunk-NK6O4NE4.js.map → chunk-AI7XWBNG.js.map} +0 -0
  243. /package/dist/{chunk-SNWCT6JN.js.map → chunk-AMIUZRDQ.js.map} +0 -0
  244. /package/dist/{chunk-BMTIBQQC.js.map → chunk-BBBHPK2Q.js.map} +0 -0
  245. /package/dist/{chunk-A3DDEKLV.js.map → chunk-BOADHYTA.js.map} +0 -0
  246. /package/dist/{chunk-KRBPWTXW.js.map → chunk-CKQOYPH3.js.map} +0 -0
  247. /package/dist/{chunk-EUR2ORTN.js.map → chunk-CSJ7WNXU.js.map} +0 -0
  248. /package/dist/{chunk-QADTI63U.js.map → chunk-CZVAVX5L.js.map} +0 -0
  249. /package/dist/{chunk-DVX4HDNP.js.map → chunk-DBPFKGXX.js.map} +0 -0
  250. /package/dist/{chunk-XCUHGPPZ.js.map → chunk-DTZOP4ZR.js.map} +0 -0
  251. /package/dist/{chunk-BLZDSCIZ.js.map → chunk-DYHOBKPU.js.map} +0 -0
  252. /package/dist/{chunk-QKOJ4637.js.map → chunk-E6K2UZGR.js.map} +0 -0
  253. /package/dist/{chunk-2M3W6ACW.js.map → chunk-FAUNQ3FS.js.map} +0 -0
  254. /package/dist/{chunk-VIMMEADQ.js.map → chunk-FORAVDJF.js.map} +0 -0
  255. /package/dist/{chunk-PJNIJIE6.js.map → chunk-FQNDJITD.js.map} +0 -0
  256. /package/dist/{chunk-COKPPU42.js.map → chunk-FWTVIRZZ.js.map} +0 -0
  257. /package/dist/{chunk-JHWEL4NX.js.map → chunk-HS662RLW.js.map} +0 -0
  258. /package/dist/{chunk-BZBLPXV7.js.map → chunk-IWSTMVCA.js.map} +0 -0
  259. /package/dist/{chunk-TZC6KIK2.js.map → chunk-JG733RMP.js.map} +0 -0
  260. /package/dist/{chunk-K3PMMW23.js.map → chunk-K6VEN5VN.js.map} +0 -0
  261. /package/dist/{chunk-UKUGSU3Y.js.map → chunk-L4V7FZJI.js.map} +0 -0
  262. /package/dist/{chunk-24HHUCWB.js.map → chunk-LDCZPZPD.js.map} +0 -0
  263. /package/dist/{chunk-ILJ3FXIC.js.map → chunk-MM3QESLI.js.map} +0 -0
  264. /package/dist/{chunk-EEO7M5GU.js.map → chunk-MYTV353T.js.map} +0 -0
  265. /package/dist/{chunk-3HZKUN5J.js.map → chunk-MZAYIG2I.js.map} +0 -0
  266. /package/dist/{chunk-RDCIST7P.js.map → chunk-OCT5VCLP.js.map} +0 -0
  267. /package/dist/{chunk-F7LBTMCA.js.map → chunk-P53ANKZV.js.map} +0 -0
  268. /package/dist/{chunk-QVDEGBME.js.map → chunk-PEAUGQKU.js.map} +0 -0
  269. /package/dist/{chunk-BV2LOTMC.js.map → chunk-Q3SILZTQ.js.map} +0 -0
  270. /package/dist/{chunk-DSBC6O46.js.map → chunk-R4LCPPKA.js.map} +0 -0
  271. /package/dist/{chunk-ZH6NYB6Y.js.map → chunk-S2VZUBM7.js.map} +0 -0
  272. /package/dist/{chunk-JFD742C3.js.map → chunk-TMINUTQQ.js.map} +0 -0
  273. /package/dist/{chunk-SK2CTB3O.js.map → chunk-U2SAW6DH.js.map} +0 -0
  274. /package/dist/{chunk-DAHSKQBV.js.map → chunk-UMOHHWXY.js.map} +0 -0
  275. /package/dist/{chunk-QAEO52Z4.js.map → chunk-VHE7UEG5.js.map} +0 -0
  276. /package/dist/{chunk-TIM4PXWN.js.map → chunk-VWRXSBT2.js.map} +0 -0
  277. /package/dist/{chunk-KANCE4MS.js.map → chunk-W2KOP27S.js.map} +0 -0
  278. /package/dist/{chunk-P772HCHI.js.map → chunk-W676GY42.js.map} +0 -0
  279. /package/dist/{chunk-T2G4LDU5.js.map → chunk-WLLUARTC.js.map} +0 -0
  280. /package/dist/{chunk-3OTGREQG.js.map → chunk-X3GD3TFI.js.map} +0 -0
  281. /package/dist/{chunk-3X2MA47R.js.map → chunk-XNAI7QGU.js.map} +0 -0
  282. /package/dist/{chunk-L6JAALMX.js.map → chunk-XRV4QFEQ.js.map} +0 -0
  283. /package/dist/{chunk-WH3LUOCQ.js.map → chunk-YE7M7URT.js.map} +0 -0
  284. /package/dist/{chunk-WWR6APJR.js.map → chunk-YVDNCV2D.js.map} +0 -0
  285. /package/dist/{chunk-LOLYBFYY.js.map → chunk-ZCNR4DN5.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  renderChartByType
3
- } from "./chunk-QADTI63U.js";
3
+ } from "./chunk-CZVAVX5L.js";
4
4
  import {
5
5
  ChartContainer
6
6
  } from "./chunk-RIRTW5EU.js";
@@ -111,4 +111,4 @@ var Chart = (props) => {
111
111
  export {
112
112
  Chart
113
113
  };
114
- //# sourceMappingURL=chunk-HI7JPDD6.js.map
114
+ //# sourceMappingURL=chunk-5357QUVE.js.map
@@ -1,15 +1,15 @@
1
+ import {
2
+ RegionMapLegend
3
+ } from "./chunk-PBRCKHN3.js";
1
4
  import {
2
5
  RegionMapDrawing
3
- } from "./chunk-AKE6KVQG.js";
6
+ } from "./chunk-NGXL4R54.js";
4
7
  import {
5
8
  useRegionMap
6
- } from "./chunk-GMRQPNG3.js";
9
+ } from "./chunk-G2NVBCF7.js";
7
10
  import {
8
11
  RegionMapList
9
12
  } from "./chunk-BRZKOUEL.js";
10
- import {
11
- RegionMapLegend
12
- } from "./chunk-PBRCKHN3.js";
13
13
 
14
14
  // src/components/data-display/RegionMap/RegionMap.tsx
15
15
  import Box from "@mui/material/Box/index.js";
@@ -20,6 +20,8 @@ function RegionMap({
20
20
  regions,
21
21
  center,
22
22
  circles,
23
+ reach,
24
+ overlay,
23
25
  onToggle,
24
26
  highlightedIds = NO_IDS,
25
27
  copy,
@@ -30,7 +32,7 @@ function RegionMap({
30
32
  dataTestId = "region-map"
31
33
  }) {
32
34
  const theme = useTheme();
33
- const model = useRegionMap({ regions, center, circles, onToggle });
35
+ const model = useRegionMap({ regions, center, circles, reach, onToggle });
34
36
  const { view } = model;
35
37
  if (view === null && regions.length === 0) return null;
36
38
  return /* @__PURE__ */ jsxs(Box, { className, "data-testid": dataTestId, children: [
@@ -39,6 +41,7 @@ function RegionMap({
39
41
  RegionMapDrawing,
40
42
  {
41
43
  model: { ...model, view },
44
+ overlay,
42
45
  showCenter: center !== null,
43
46
  highlightedIds,
44
47
  maxHeight,
@@ -77,4 +80,4 @@ function RegionMap({
77
80
  export {
78
81
  RegionMap
79
82
  };
80
- //# sourceMappingURL=chunk-WNNA6YYE.js.map
83
+ //# sourceMappingURL=chunk-5I75WRXT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/RegionMap/RegionMap.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { useRegionMap } from './RegionMap.hooks';\nimport type { RegionMapProps } from './RegionMap.types';\nimport { RegionMapDrawing } from './RegionMapDrawing';\nimport { RegionMapLegend } from './RegionMapLegend';\nimport { RegionMapList } from './RegionMapList';\n\n/** One empty list, so the default does not change identity per render. */\nconst NO_IDS: readonly string[] = [];\n\n/**\n * A hand-drawn map of named areas around a centre; a tap toggles an area.\n *\n * Drawn as inline SVG over a plain background — no tile server, no API key,\n * nothing fetched — because the question it answers is \"which of THESE areas\",\n * not \"what is the street called\". Four choices shape it:\n *\n * - **The list is the accessible way in.** The drawing is one `role=\"img\"`\n * with a name; its areas are not tab stops (dozens of them, many too small to\n * tap on a phone). Every area is also a toggle button in the list beneath,\n * with `aria-pressed`, which is what a keyboard and a screen reader use —\n * and what reaches a sliver no finger can.\n * - **Excluded is hatched AND named, never only coloured,** and never in the\n * error colour: leaving an area out is a choice, not a failure.\n * - **The hit test is ours, not only the browser's.** A mouse click on a path\n * is that path. A finger's tap takes the SMALLEST area within a few pixels'\n * worth of metres (`hitRegion`), so a sliver beside a big area can be hit\n * from the map; one too thin even for that is still on the list.\n * - **The host can draw inside it.** `reach` widens the view past the largest\n * circle and `overlay` draws a layer in the SVG at the map's own projection,\n * tap-transparent; `regionMapView` gives the same view to HTML laid over it.\n * - **A toggle is cheap.** Geometry is projected once per `rings` identity,\n * and the base layer is memoised, so a tap re-renders the hatch and labels.\n */\nexport function RegionMap({\n regions,\n center,\n circles,\n reach,\n overlay,\n onToggle,\n highlightedIds = NO_IDS,\n copy,\n listMode = 'collapsed',\n listSort = 'given',\n maxHeight,\n className,\n dataTestId = 'region-map',\n}: RegionMapProps): React.JSX.Element | null {\n const theme = useTheme();\n const model = useRegionMap({ regions, center, circles, reach, onToggle });\n const { view } = model;\n if (view === null && regions.length === 0) return null;\n return (\n <Box className={className} data-testid={dataTestId}>\n {view && (\n <>\n <RegionMapDrawing\n model={{ ...model, view }}\n overlay={overlay}\n showCenter={center !== null}\n highlightedIds={highlightedIds}\n maxHeight={maxHeight}\n label={copy.mapLabel}\n tappable={onToggle !== undefined}\n testId={dataTestId}\n theme={theme}\n />\n <RegionMapLegend\n copy={copy}\n outermostMetres={model.outermostMetres}\n showCenter={center !== null}\n theme={theme}\n testId={dataTestId}\n />\n </>\n )}\n {listMode !== 'none' && (\n <RegionMapList\n regions={regions}\n copy={copy}\n mode={listMode}\n sort={listSort}\n onToggle={onToggle}\n testId={dataTestId}\n theme={theme}\n />\n )}\n </Box>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,OAAO,SAAS;AAChB,SAAS,gBAAgB;AA0DjB,mBACE,KADF;AAhDR,IAAM,SAA4B,CAAC;AA0B5B,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,aAAa;AACf,GAA6C;AAC3C,QAAM,QAAQ,SAAS;AACvB,QAAM,QAAQ,aAAa,EAAE,SAAS,QAAQ,SAAS,OAAO,SAAS,CAAC;AACxE,QAAM,EAAE,KAAK,IAAI;AACjB,MAAI,SAAS,QAAQ,QAAQ,WAAW,EAAG,QAAO;AAClD,SACE,qBAAC,OAAI,WAAsB,eAAa,YACrC;AAAA,YACC,iCACE;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,EAAE,GAAG,OAAO,KAAK;AAAA,UACxB;AAAA,UACA,YAAY,WAAW;AAAA,UACvB;AAAA,UACA;AAAA,UACA,OAAO,KAAK;AAAA,UACZ,UAAU,aAAa;AAAA,UACvB,QAAQ;AAAA,UACR;AAAA;AAAA,MACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,iBAAiB,MAAM;AAAA,UACvB,YAAY,WAAW;AAAA,UACvB;AAAA,UACA,QAAQ;AAAA;AAAA,MACV;AAAA,OACF;AAAA,IAED,aAAa,UACZ;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,QACR;AAAA;AAAA,IACF;AAAA,KAEJ;AAEJ;","names":[]}
@@ -0,0 +1,30 @@
1
+ import {
2
+ SCHEDULE_GRID_METRICS
3
+ } from "./chunk-3R6BR22L.js";
4
+ import {
5
+ sxRem
6
+ } from "./chunk-YKCAJ2TN.js";
7
+
8
+ // src/components/data-display/ScheduleGrid/schedule-header-host.styles.ts
9
+ var headerAdornmentSx = {
10
+ mt: 0.5,
11
+ fontSize: sxRem(SCHEDULE_GRID_METRICS.headerSublabel),
12
+ fontWeight: 400,
13
+ color: "text.secondary"
14
+ };
15
+ var cornerSx = {
16
+ display: "flex",
17
+ flexDirection: "column",
18
+ justifyContent: "flex-start",
19
+ fontSize: sxRem(SCHEDULE_GRID_METRICS.headerSublabel),
20
+ color: "text.secondary",
21
+ pt: 0.5,
22
+ pr: 0.5,
23
+ minWidth: 0
24
+ };
25
+
26
+ export {
27
+ headerAdornmentSx,
28
+ cornerSx
29
+ };
30
+ //# sourceMappingURL=chunk-5MXVKZKZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/ScheduleGrid/schedule-header-host.styles.ts"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles/index.js';\n\nimport { sxRem } from '../../../tokens/relative';\nimport { SCHEDULE_GRID_METRICS as M } from './ScheduleGrid.metrics';\n\n/**\n * The header row's host figures (FUT-3882): a day's adornment under its label\n * and the corner above the names. Their own module to keep the grid's styles\n * under the file-size budget.\n */\n\n/** A day's adornment: under its label, the column's full width, in the secondary ink unless the host says otherwise. */\nexport const headerAdornmentSx: SxProps<Theme> = {\n mt: 0.5,\n fontSize: sxRem(M.headerSublabel),\n fontWeight: 400,\n color: 'text.secondary',\n};\n\n/**\n * The cell above the names. It is the pinned mask over the names column (the\n * grid's sticky rule): it must stay a stretched grid item, the header row's\n * full height, or a day scrolled sideways shows above the names. Its words sit\n * inside it on the days' label line (the prototype's \"Movimento, 11h–23h\").\n */\nexport const cornerSx: SxProps<Theme> = {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-start',\n fontSize: sxRem(M.headerSublabel),\n color: 'text.secondary',\n pt: 0.5,\n pr: 0.5,\n minWidth: 0,\n};\n"],"mappings":";;;;;;;;AAYO,IAAM,oBAAoC;AAAA,EAC/C,IAAI;AAAA,EACJ,UAAU,MAAM,sBAAE,cAAc;AAAA,EAChC,YAAY;AAAA,EACZ,OAAO;AACT;AAQO,IAAM,WAA2B;AAAA,EACtC,SAAS;AAAA,EACT,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,UAAU,MAAM,sBAAE,cAAc;AAAA,EAChC,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,UAAU;AACZ;","names":[]}
@@ -1,9 +1,9 @@
1
- import {
2
- useLightboxCopy
3
- } from "./chunk-TEQYTEM2.js";
4
1
  import {
5
2
  thumbnailStripSx
6
3
  } from "./chunk-VQU3CBAL.js";
4
+ import {
5
+ useLightboxCopy
6
+ } from "./chunk-TEQYTEM2.js";
7
7
  import {
8
8
  onMedia,
9
9
  sheen
@@ -89,4 +89,4 @@ var LightboxThumbnails = ({
89
89
  export {
90
90
  LightboxThumbnails
91
91
  };
92
- //# sourceMappingURL=chunk-BP3ZKIPE.js.map
92
+ //# sourceMappingURL=chunk-64UNVW6D.js.map
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-4SQ2WCZA.js";
13
13
  import {
14
14
  Alert
15
- } from "./chunk-QVDEGBME.js";
15
+ } from "./chunk-PEAUGQKU.js";
16
16
 
17
17
  // src/components/data-display/DataViews/data-views-table-parts.tsx
18
18
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -121,4 +121,4 @@ export {
121
121
  ViewsMenuSlot,
122
122
  ViewDialogs
123
123
  };
124
- //# sourceMappingURL=chunk-SCXVTNLE.js.map
124
+ //# sourceMappingURL=chunk-66VKX6JE.js.map
@@ -1,9 +1,3 @@
1
- import {
2
- badgeContentOf,
3
- definedAria,
4
- formatCount,
5
- resolveBadgeProps
6
- } from "./chunk-6C5D6O3D.js";
7
1
  import {
8
2
  buildBadgeContent
9
3
  } from "./chunk-ZNCYCE7L.js";
@@ -11,6 +5,12 @@ import {
11
5
  badgeStyles,
12
6
  getAnchorOrigin
13
7
  } from "./chunk-2L3VRVRE.js";
8
+ import {
9
+ badgeContentOf,
10
+ definedAria,
11
+ formatCount,
12
+ resolveBadgeProps
13
+ } from "./chunk-6C5D6O3D.js";
14
14
  import {
15
15
  CLOSE_DELAY_MS,
16
16
  MOUNT_ANIMATION_MS
@@ -180,4 +180,4 @@ Badge.displayName = "Badge";
180
180
  export {
181
181
  Badge
182
182
  };
183
- //# sourceMappingURL=chunk-N5PVD4J5.js.map
183
+ //# sourceMappingURL=chunk-6DO672AG.js.map
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-T7OIVPCO.js";
6
6
  import {
7
7
  MoreFilters
8
- } from "./chunk-JHWEL4NX.js";
8
+ } from "./chunk-HS662RLW.js";
9
9
  import {
10
10
  PillControl
11
11
  } from "./chunk-AJ6KFHEE.js";
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-KYUEO2IO.js";
15
15
  import {
16
16
  RangePill
17
- } from "./chunk-FI2CQOGC.js";
17
+ } from "./chunk-3OHZAZEE.js";
18
18
  import {
19
19
  QuickChip
20
20
  } from "./chunk-AT6UKTH4.js";
@@ -251,4 +251,4 @@ function FilterSlots({
251
251
  export {
252
252
  InlineFilterControls
253
253
  };
254
- //# sourceMappingURL=chunk-NK6O4NE4.js.map
254
+ //# sourceMappingURL=chunk-AI7XWBNG.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RailCreateMenu
3
- } from "./chunk-ILJ3FXIC.js";
3
+ } from "./chunk-MM3QESLI.js";
4
4
  import {
5
5
  Box,
6
6
  CONTROL_RESET,
@@ -11,7 +11,7 @@ import {
11
11
  controlProps,
12
12
  destinationControl,
13
13
  focusRing
14
- } from "./chunk-24HHUCWB.js";
14
+ } from "./chunk-LDCZPZPD.js";
15
15
  import {
16
16
  destinationState,
17
17
  isMenu
@@ -295,4 +295,4 @@ function SectionNavRail({
295
295
  export {
296
296
  SectionNavRail
297
297
  };
298
- //# sourceMappingURL=chunk-SNWCT6JN.js.map
298
+ //# sourceMappingURL=chunk-AMIUZRDQ.js.map
@@ -1,14 +1,14 @@
1
- import {
2
- CellConfigProvider,
3
- cellTracks,
4
- compactCellTracks
5
- } from "./chunk-F5S5UFGD.js";
6
1
  import {
7
2
  DENSITY_ROW_PADDING
8
3
  } from "./chunk-5CAWRMDX.js";
9
4
  import {
10
5
  GroupGrid
11
6
  } from "./chunk-U3HEYECF.js";
7
+ import {
8
+ CellConfigProvider,
9
+ cellTracks,
10
+ compactCellTracks
11
+ } from "./chunk-F5S5UFGD.js";
12
12
 
13
13
  // src/components/data-display/DataViews/list-card-rails.tsx
14
14
  import { createContext, useContext } from "react";
@@ -133,4 +133,4 @@ export {
133
133
  cellRailCount,
134
134
  ListCardGroup
135
135
  };
136
- //# sourceMappingURL=chunk-BMTIBQQC.js.map
136
+ //# sourceMappingURL=chunk-BBBHPK2Q.js.map
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-L7BRU4UF.js";
9
9
  import {
10
10
  Alert
11
- } from "./chunk-QVDEGBME.js";
11
+ } from "./chunk-PEAUGQKU.js";
12
12
  import {
13
13
  Button
14
14
  } from "./chunk-YOXYSAUI.js";
@@ -106,4 +106,4 @@ NotificationStatusNotice.displayName = "NotificationStatusNotice";
106
106
  export {
107
107
  NotificationStatusNotice
108
108
  };
109
- //# sourceMappingURL=chunk-A3DDEKLV.js.map
109
+ //# sourceMappingURL=chunk-BOADHYTA.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-AJ6KFHEE.js";
4
4
  import {
5
5
  PanelRangeField
6
- } from "./chunk-FI2CQOGC.js";
6
+ } from "./chunk-3OHZAZEE.js";
7
7
  import {
8
8
  useDataViewsCopy
9
9
  } from "./chunk-KHG57NAE.js";
@@ -157,4 +157,4 @@ export {
157
157
  GridFilterPanel,
158
158
  FilterDialog
159
159
  };
160
- //# sourceMappingURL=chunk-KRBPWTXW.js.map
160
+ //# sourceMappingURL=chunk-CKQOYPH3.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RAIL_GAP_PX
3
- } from "./chunk-BMTIBQQC.js";
3
+ } from "./chunk-BBBHPK2Q.js";
4
4
  import {
5
5
  COMPACT_BREAK,
6
6
  META_BREAK
@@ -257,4 +257,4 @@ export {
257
257
  ListCardActions,
258
258
  ListCardTail
259
259
  };
260
- //# sourceMappingURL=chunk-EUR2ORTN.js.map
260
+ //# sourceMappingURL=chunk-CSJ7WNXU.js.map
@@ -1,10 +1,10 @@
1
+ import {
2
+ buildChartContext
3
+ } from "./chunk-JG733RMP.js";
1
4
  import {
2
5
  ChartLegendContent,
3
6
  ChartTooltipContent
4
7
  } from "./chunk-RIRTW5EU.js";
5
- import {
6
- buildChartContext
7
- } from "./chunk-TZC6KIK2.js";
8
8
  import {
9
9
  uiInk
10
10
  } from "./chunk-XJAD6E3V.js";
@@ -318,4 +318,4 @@ function renderChartByType(props, theme) {
318
318
  export {
319
319
  renderChartByType
320
320
  };
321
- //# sourceMappingURL=chunk-QADTI63U.js.map
321
+ //# sourceMappingURL=chunk-CZVAVX5L.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  GridBody,
3
3
  GridHeader
4
- } from "./chunk-MX2RF34M.js";
4
+ } from "./chunk-E73C73UD.js";
5
5
  import {
6
6
  focusables,
7
7
  handleGridKey
@@ -119,7 +119,7 @@ function ScheduleGrid(props) {
119
119
  onPointerDownCapture: focus.forget,
120
120
  onClickCapture: can.create ? focus.followClickCreate : void 0,
121
121
  children: [
122
- /* @__PURE__ */ jsx(Box, { ref: headRef, role: "none", sx: headerSx(props.stickyTop ?? 0), "data-sg-head": "", "data-testid": `${testId}-head`, onWheel: sideways.forwardWheel, children: /* @__PURE__ */ jsx(GridHeader, { columns, totalLabel: hasTotal ? props.totalLabel ?? "" : void 0, rowSx, testId }) }),
122
+ /* @__PURE__ */ jsx(Box, { ref: headRef, role: "none", sx: headerSx(props.stickyTop ?? 0), "data-sg-head": "", "data-testid": `${testId}-head`, onWheel: sideways.forwardWheel, children: /* @__PURE__ */ jsx(GridHeader, { columns, totalLabel: hasTotal ? props.totalLabel ?? "" : void 0, corner: props.corner, rowSx, testId }) }),
123
123
  /* @__PURE__ */ jsx(
124
124
  Box,
125
125
  {
@@ -144,4 +144,4 @@ function ScheduleGrid(props) {
144
144
  export {
145
145
  ScheduleGrid
146
146
  };
147
- //# sourceMappingURL=chunk-O3OU3ED7.js.map
147
+ //# sourceMappingURL=chunk-D7R6SRJB.js.map
@@ -1 +1 @@
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 { resolveLabels } from '../../../utils/resolve-labels';\nimport { EN_US_SCHEDULE_GRID_LABELS } from './ScheduleGrid.en-US';\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 { useScrollToDay } from './useScrollToDay';\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\n/** The body shows the days' rows: not the skeleton, the host's error or its empty state. */\nfunction daysDrawn(props: ScheduleGridProps, rowCount: number): boolean {\n return !props.loading && !props.error && rowCount > 0;\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_SCHEDULE_GRID_LABELS, 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 useScrollToDay(headRef, bodyRef, { day: props.scrollToDay, dayCount: columns.length, drawn: daysDrawn(props, rows.length) }, sideways.follow);\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
+ {"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 { resolveLabels } from '../../../utils/resolve-labels';\nimport { EN_US_SCHEDULE_GRID_LABELS } from './ScheduleGrid.en-US';\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 { useScrollToDay } from './useScrollToDay';\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\n/** The body shows the days' rows: not the skeleton, the host's error or its empty state. */\nfunction daysDrawn(props: ScheduleGridProps, rowCount: number): boolean {\n return !props.loading && !props.error && rowCount > 0;\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_SCHEDULE_GRID_LABELS, 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 useScrollToDay(headRef, bodyRef, { day: props.scrollToDay, dayCount: columns.length, drawn: daysDrawn(props, rows.length) }, sideways.follow);\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} corner={props.corner} 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,OAAO,SAAS;AAChB,SAAgB,WAAW,cAAc;AAsHnC,SAaI,KAbJ;AA9FN,SAAS,OAAO,QAAyC;AACvD,MAAI,EAAE,kBAAkB,aAAc,QAAO;AAC7C,QAAM,OAAO,OAAO,QAAqB,uBAAuB;AAChE,SAAO,QAAQ,KAAK,QAAQ,YAAY,UAAa,KAAK,QAAQ,UAAU,SAAY,OAAO;AACjG;AAEA,SAAS,eAAe,SAA8C;AACpE,QAAM,UAAU,OAA4B,IAAI;AAChD,YAAU,MAAM;AACd,UAAM,SAAS,QAAQ;AACvB,QAAI,CAAC,UAAU,CAAC,QAAQ,QAAS;AACjC,UAAM,QAAQ,WAAW,QAAQ,OAAO,EAAE;AAAA,MAAK,CAAC,OAC9C,OAAO,GAAG,QAAQ,KAAK,MAAM,OAAO,OAAO,GAAG,QAAQ,YAAY,SAC9D,QACA,OAAO,SAAS,SACd,GAAG,QAAQ,YAAY,OAAO,KAC9B,GAAG,QAAQ,UAAU,OAAO;AAAA,IACpC;AACA,QAAI,CAAC,MAAO;AAEZ,UAAM,MAAM,OAAO,SAAS,YAAY,OAAO,UAAU,EAAE,eAAe,KAAK,IAAI,MAAS;AAC5F,YAAQ,UAAU;AAAA,EACpB,CAAC;AACD,SAAO;AAAA,IACL,QAAQ,CAAC,IAAY,QAAsB;AACzC,cAAQ,UAAU,EAAE,MAAM,QAAQ,IAAI,IAAI;AAAA,IAC5C;AAAA;AAAA,IAEA,cAAc,CAAC,UAAqC;AAClD,YAAM,OAAO,OAAO,MAAM,MAAM;AAChC,UAAK,MAAM,QAAQ,WAAW,MAAM,QAAQ,OAAQ,CAAC,MAAM,QAAQ,MAAO;AAC1E,cAAQ,UAAU,EAAE,MAAM,UAAU,KAAK,KAAK,QAAQ,OAAO,KAAK,OAAO,KAAK,QAAQ,KAAK,GAAG,SAAS,MAAM;AAAA,IAC/G;AAAA;AAAA,IAEA,mBAAmB,CAAC,UAAkC;AACpD,YAAM,OAAO,OAAO,MAAM,MAAM;AAChC,UAAI,MAAM,WAAW,KAAK,CAAC,MAAM,QAAQ,MAAO;AAChD,cAAQ,UAAU,EAAE,MAAM,UAAU,KAAK,KAAK,QAAQ,OAAO,KAAK,OAAO,KAAK,QAAQ,KAAK,GAAG,SAAS,KAAK;AAAA,IAC9G;AAAA,IACA,QAAQ,MAAY;AAClB,cAAQ,UAAU;AAAA,IACpB;AAAA,EACF;AACF;AAGA,SAAS,UAAU,OAA0B,UAA2B;AACtE,SAAO,CAAC,MAAM,WAAW,CAAC,MAAM,SAAS,WAAW;AACtD;AAEA,SAAS,YAAY,OAAyC;AAC5D,QAAM,OAAO,CAAC,MAAM,YAAY,CAAC,MAAM;AACvC,SAAO,EAAE,QAAQ,QAAQ,QAAQ,MAAM,QAAQ,GAAG,MAAM,QAAQ,QAAQ,MAAM,MAAM,GAAG,MAAM,QAAQ,QAAQ,MAAM,MAAM,EAAE;AAC7H;AAaO,SAAS,aAAa,OAA6C;AACxE,QAAM,EAAE,SAAS,QAAQ,MAAM,UAAU,QAAQ,OAAO,IAAI;AAC5D,QAAM,SAAS,MAAM,cAAc;AACnC,QAAM,SAAS,cAAc,4BAA4B,MAAM,MAAM;AACrE,QAAM,UAAU,OAA8B,IAAI;AAClD,QAAM,EAAE,MAAM,cAAc,IAAI,IAAI,aAAa;AACjD,QAAM,QAAQ,eAAe,OAAO;AACpC,QAAM,UAAU,YAAY,SAAS,EAAE,MAAM,UAAU,QAAQ,OAAO,CAAC;AACvE,QAAM,MAAM,YAAY,KAAK;AAC7B,QAAM,OAAO,OAAO,QAAQ,CAAC,UAAU,MAAM,IAAI;AACjD,QAAM,WAAW,MAAM,eAAe,UAAa,KAAK,KAAK,CAAC,QAAQ,IAAI,UAAU,MAAS;AAC7F,QAAM,QAAQ,UAAU,QAAQ,QAAQ,QAAQ;AAEhD,QAAM,UAAU,OAA8B,IAAI;AAClD,QAAM,UAAU,OAA8B,IAAI;AAClD,QAAM,WAAW,kBAAkB,SAAS,OAAO;AACnD,iBAAe,SAAS,SAAS,EAAE,KAAK,MAAM,aAAa,UAAU,QAAQ,QAAQ,OAAO,UAAU,OAAO,KAAK,MAAM,EAAE,GAAG,SAAS,MAAM;AAE5I,QAAM,YAAY,CAAC,UAAqC;AACtD,aAAS,QAAQ;AACjB,UAAM,OAAO;AACb,QAAI,CAAC,QAAQ,QAAS;AACtB,QAAI,IAAI,OAAQ,OAAM,aAAa,KAAK;AACxC,kBAAc,OAAO,EAAE,MAAM,QAAQ,SAAS,MAAM,SAAS,MAAM,KAAK,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,MAAM,OAAO,CAAC;AAAA,EAC7H;AAEA,SACE,qBAAC,OAAI,IAAI,QAAQ,eAAa,QAC5B;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,MAAK;AAAA,QACL,cAAY,MAAM,YAAY;AAAA,QAC9B,aAAW,MAAM,WAAW;AAAA,QAC5B,oBAAkB,MAAM,UAAU,OAAO,UAAU;AAAA,QACnD,IAAI,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,QACpC;AAAA,QACA,sBAAsB,MAAM;AAAA,QAC5B,gBAAgB,IAAI,SAAS,MAAM,oBAAoB;AAAA,QAGvD;AAAA,8BAAC,OAAI,KAAK,SAAS,MAAK,QAAO,IAAI,SAAS,MAAM,aAAa,CAAC,GAAG,gBAAa,IAAG,eAAa,GAAG,MAAM,SAAS,SAAS,SAAS,cAClI,8BAAC,cAAW,SAAkB,YAAY,WAAY,MAAM,cAAc,KAAM,QAAW,QAAQ,MAAM,QAAQ,OAAc,QAAgB,GACjJ;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cAAI,KAAK;AAAA,cAAS,MAAK;AAAA,cAAO,IAAI;AAAA,cAAU,kBAAe;AAAA,cAAG,eAAa,GAAG,MAAM;AAAA,cAAW,UAAU,SAAS;AAAA,cACjH,SAAS,SAAS;AAAA,cAClB,sBAAsB,SAAS;AAAA,cAE/B,8BAAC,YAAS,MAAM,OAAO,MAAY,OAAc,UAAoB,KAAU,SAAkB,QAAgB,QAAgB;AAAA;AAAA,UACnI;AAAA;AAAA;AAAA,IACF;AAAA,IACA,oBAAC,OAAI,IAAI,YAAY,aAAU,UAAS,MAAK,UAAS,eAAa,GAAG,MAAM,SACzE,wBACH;AAAA,KACF;AAEJ;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  useCardActions
3
- } from "./chunk-PJNIJIE6.js";
3
+ } from "./chunk-FQNDJITD.js";
4
4
  import {
5
5
  ConfirmActionDialog
6
6
  } from "./chunk-7W5X3KQ2.js";
@@ -50,4 +50,4 @@ function useRemoveConfirm({
50
50
  export {
51
51
  useRemoveConfirm
52
52
  };
53
- //# sourceMappingURL=chunk-DVX4HDNP.js.map
53
+ //# sourceMappingURL=chunk-DBPFKGXX.js.map
@@ -4,7 +4,7 @@ import {
4
4
  CountedIcon,
5
5
  controlProps,
6
6
  focusRing
7
- } from "./chunk-24HHUCWB.js";
7
+ } from "./chunk-LDCZPZPD.js";
8
8
  import {
9
9
  Drawer,
10
10
  DrawerContent,
@@ -175,4 +175,4 @@ function SectionNavSheet({
175
175
  export {
176
176
  SectionNavSheet
177
177
  };
178
- //# sourceMappingURL=chunk-XCUHGPPZ.js.map
178
+ //# sourceMappingURL=chunk-DTZOP4ZR.js.map
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-DY2I6LMX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,3 +1,8 @@
1
+ import {
2
+ DataGridEmpty,
3
+ DataGridError,
4
+ DataGridLoading
5
+ } from "./chunk-EARWC6PD.js";
1
6
  import {
2
7
  useDataGridModel
3
8
  } from "./chunk-LDROG4QI.js";
@@ -5,11 +10,6 @@ import {
5
10
  GridBody,
6
11
  GridHeader
7
12
  } from "./chunk-5RYPVYWP.js";
8
- import {
9
- DataGridEmpty,
10
- DataGridError,
11
- DataGridLoading
12
- } from "./chunk-EARWC6PD.js";
13
13
 
14
14
  // src/components/data-display/DataGrid/DataGrid.tsx
15
15
  import Paper from "@mui/material/Paper/index.js";
@@ -120,4 +120,4 @@ export {
120
120
  DataGrid,
121
121
  GRID_ONLY_PROPS
122
122
  };
123
- //# sourceMappingURL=chunk-BLZDSCIZ.js.map
123
+ //# sourceMappingURL=chunk-DYHOBKPU.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  rowGutters
3
- } from "./chunk-DAHSKQBV.js";
3
+ } from "./chunk-UMOHHWXY.js";
4
4
  import {
5
5
  cellRailsTemplate
6
- } from "./chunk-BMTIBQQC.js";
6
+ } from "./chunk-BBBHPK2Q.js";
7
7
  import {
8
8
  cellTracks,
9
9
  compactCellTracks,
@@ -55,4 +55,4 @@ export {
55
55
  useRowLayout,
56
56
  StandaloneContainer
57
57
  };
58
- //# sourceMappingURL=chunk-QKOJ4637.js.map
58
+ //# sourceMappingURL=chunk-E6K2UZGR.js.map
@@ -1,10 +1,11 @@
1
+ import {
2
+ cornerSx,
3
+ headerAdornmentSx
4
+ } from "./chunk-5MXVKZKZ.js";
1
5
  import {
2
6
  daysBetween,
3
7
  isOpen
4
8
  } from "./chunk-E6UMTR2G.js";
5
- import {
6
- ScheduleNameCell
7
- } from "./chunk-TZ44F6W7.js";
8
9
  import {
9
10
  SR_ONLY_SX,
10
11
  blockSx,
@@ -24,6 +25,9 @@ import {
24
25
  totalCellSx,
25
26
  totalHeaderSx
26
27
  } from "./chunk-RYJ6XGFA.js";
28
+ import {
29
+ ScheduleNameCell
30
+ } from "./chunk-TZ44F6W7.js";
27
31
  import {
28
32
  SCHEDULE_GRID_METRICS
29
33
  } from "./chunk-3R6BR22L.js";
@@ -173,12 +177,15 @@ function NameCell({ row }) {
173
177
  const sizes = { name: SCHEDULE_GRID_METRICS.rowName, meta: SCHEDULE_GRID_METRICS.rowMeta, chipsTop: 0.5 };
174
178
  return /* @__PURE__ */ jsx(ScheduleNameCell, { row, role: "rowheader", sx: nameCellSx, sizes });
175
179
  }
180
+ function keepRangesWhole(node) {
181
+ return typeof node === "string" ? node.replace(/(\S)–(\S)/g, "$1\u2060\u2013\u2060$2") : node;
182
+ }
176
183
  function keepDatesWhole(label) {
177
184
  return label.replace(/ (?=\d)/g, "\xA0");
178
185
  }
179
- function GridHeader({ columns, totalLabel, rowSx, testId }) {
186
+ function GridHeader({ columns, totalLabel, corner, rowSx, testId }) {
180
187
  return /* @__PURE__ */ jsxs(Box, { role: "row", sx: [rowSx, headerRowSx], "data-testid": `${testId}-header`, children: [
181
- /* @__PURE__ */ jsx("span", { role: "cell", "data-sg-corner": "" }),
188
+ /* @__PURE__ */ jsx(Box, { component: "span", role: "cell", "data-sg-corner": "", sx: cornerSx, "data-testid": `${testId}-corner`, children: keepRangesWhole(corner) }),
182
189
  columns.map((column, day) => /* @__PURE__ */ jsxs(
183
190
  Box,
184
191
  {
@@ -187,7 +194,8 @@ function GridHeader({ columns, totalLabel, rowSx, testId }) {
187
194
  "data-sg-past": column.past ? "" : void 0,
188
195
  children: [
189
196
  /* @__PURE__ */ jsx("span", { "data-sg-col": "full", title: column.label, children: keepDatesWhole(column.label) }),
190
- column.sublabel ? /* @__PURE__ */ jsx(Box, { component: "span", sx: headerSublabelSx, "data-sg-col": "sub", children: column.sublabel }) : null
197
+ column.sublabel ? /* @__PURE__ */ jsx(Box, { component: "span", sx: headerSublabelSx, "data-sg-col": "sub", children: column.sublabel }) : null,
198
+ column.adornment ? /* @__PURE__ */ jsx(Box, { component: "span", sx: headerAdornmentSx, "data-sg-col": "adornment", "data-testid": `${testId}-adornment-${day}`, children: column.adornment }) : null
191
199
  ]
192
200
  },
193
201
  `${day}-${column.label}`
@@ -246,4 +254,4 @@ export {
246
254
  GridHeader,
247
255
  GridBody
248
256
  };
249
- //# sourceMappingURL=chunk-MX2RF34M.js.map
257
+ //# sourceMappingURL=chunk-E73C73UD.js.map
@@ -0,0 +1 @@
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 './ScheduleGrid.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 { cornerSx, headerAdornmentSx } from './schedule-header-host.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 /** Above the names (`ScheduleGridProps.corner`). */\n corner?: React.ReactNode;\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 range (\"11h–23h\") breaks before or after it, never at its dash; a spaced dash (\"11h – 23h\") keeps its spaces. */\nfunction keepRangesWhole(node: React.ReactNode): React.ReactNode {\n return typeof node === 'string' ? node.replace(/(\\S)–(\\S)/g, '$1\\u2060–\\u2060$2') : node;\n}\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, corner, 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 but the host's corner words. */}\n <Box component=\"span\" role=\"cell\" data-sg-corner=\"\" sx={cornerSx} data-testid={`${testId}-corner`}>\n {keepRangesWhole(corner)}\n </Box>\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 {column.adornment ? (\n <Box component=\"span\" sx={headerAdornmentSx} data-sg-col=\"adornment\" data-testid={`${testId}-adornment-${day}`}>\n {column.adornment}\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,9 +1,9 @@
1
- import {
2
- PT_BR_DAY_RULER_LABELS
3
- } from "./chunk-D3OXTS7Y.js";
4
1
  import {
5
2
  EN_US_DAY_RULER_LABELS
6
- } from "./chunk-K3IB7S7Q.js";
3
+ } from "./chunk-F2ZUUEXC.js";
4
+ import {
5
+ PT_BR_DAY_RULER_LABELS
6
+ } from "./chunk-ZHCZOPKE.js";
7
7
 
8
8
  // src/components/data-display/DayRuler/DayRuler.labels.ts
9
9
  var DAY_RULER_LABELS = {
@@ -14,4 +14,4 @@ var DAY_RULER_LABELS = {
14
14
  export {
15
15
  DAY_RULER_LABELS
16
16
  };
17
- //# sourceMappingURL=chunk-HNW7IZPV.js.map
17
+ //# sourceMappingURL=chunk-EZBBLLEU.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/data-display/DayRuler/DayRuler.labels.ts"],"sourcesContent":["/**\n * `DayRuler`'s words, in both languages. They live with the component rather\n * than in `UiLabels` so they load only with it: `EN_US_UI_LABELS` and\n * `PT_BR_UI_LABELS` are imported by eagerly loaded components (`Avatar`), and\n * every family in them ships to every host that renders any of those (FUT-3831).\n *\n * Each language is a named pack beside the component (`DayRuler.pt-BR.ts`,\n * `DayRuler.en-US.ts`). A pt-BR host passes `DAY_RULER_LABELS['pt-BR']` to\n * `labels`; the ruler falls back to `'en-US'` on its own.\n */\nimport { EN_US_DAY_RULER_LABELS } from './DayRuler.en-US';\nimport { PT_BR_DAY_RULER_LABELS } from './DayRuler.pt-BR';\n\n/** `DayRuler`'s track names and the sentences its live region reads after a keyboard move or resize. */\nexport interface DayRulerLabels {\n /** A row's empty track: Enter schedules this row. */\n createTrack(row: string): string;\n /** After Alt+←/→ moved a block; `range` is \"20:45–00:45\". */\n moved(block: string, range: string): string;\n /** After Shift(+Alt)+←/→ changed a block's end or start. */\n resized(block: string, range: string): string;\n /** A keyboard move or resize past the ruler's ends or under the shortest length. */\n refused: string;\n /** Shift/Alt+←/→ on a block that is not `movable` / `resizable`: the block is fixed. */\n notMovable: string;\n /** The ruler's busy state. */\n loading: string;\n}\n\n/**\n * Both packs, in the shape `locales.ts`'s `pack(...)` yields. The component\n * itself imports only the en-US file, its fallback.\n */\nexport const DAY_RULER_LABELS: { readonly 'pt-BR': DayRulerLabels; readonly 'en-US': DayRulerLabels } = {\n 'pt-BR': PT_BR_DAY_RULER_LABELS,\n 'en-US': EN_US_DAY_RULER_LABELS,\n};\n"],"mappings":";;;;;;;;AAiCO,IAAM,mBAA2F;AAAA,EACtG,SAAS;AAAA,EACT,SAAS;AACX;","names":[]}
1
+ {"version":3,"sources":["../src/components/data-display/DayRuler/DayRuler.labels.ts"],"sourcesContent":["/**\n * `DayRuler`'s words, in both languages. They live with the component rather\n * than in `UiLabels` so they load only with it: `EN_US_UI_LABELS` and\n * `PT_BR_UI_LABELS` are imported by eagerly loaded components (`Avatar`), and\n * every family in them ships to every host that renders any of those (FUT-3831).\n *\n * Each language is a named pack beside the component (`DayRuler.pt-BR.ts`,\n * `DayRuler.en-US.ts`). A pt-BR host passes `DAY_RULER_LABELS['pt-BR']` to\n * `labels`; the ruler falls back to `'en-US'` on its own.\n */\nimport { EN_US_DAY_RULER_LABELS } from './DayRuler.en-US';\nimport { PT_BR_DAY_RULER_LABELS } from './DayRuler.pt-BR';\n\n/** `DayRuler`'s track names and the sentences its live region reads after a keyboard move or resize. */\nexport interface DayRulerLabels {\n /** A row's empty track: Enter schedules this row. */\n createTrack(row: string): string;\n /** After Alt+←/→ moved a block; `range` is \"20:45–00:45\". */\n moved(block: string, range: string): string;\n /** After Shift(+Alt)+←/→ changed a block's end or start. */\n resized(block: string, range: string): string;\n /** A keyboard move or resize past the ruler's ends or under the shortest length. */\n refused: string;\n /** Shift/Alt+←/→ on a block that is not `movable` / `resizable`: the block is fixed. */\n notMovable: string;\n /** The ruler's busy state. */\n loading: string;\n /** Said after a group footer's marked hour when the host gives it no `title` (FUT-3882). */\n footerMarked: string;\n}\n\n/**\n * Both packs, in the shape `locales.ts`'s `pack(...)` yields. The component\n * itself imports only the en-US file, its fallback.\n */\nexport const DAY_RULER_LABELS: { readonly 'pt-BR': DayRulerLabels; readonly 'en-US': DayRulerLabels } = {\n 'pt-BR': PT_BR_DAY_RULER_LABELS,\n 'en-US': EN_US_DAY_RULER_LABELS,\n};\n"],"mappings":";;;;;;;;AAmCO,IAAM,mBAA2F;AAAA,EACtG,SAAS;AAAA,EACT,SAAS;AACX;","names":[]}