@12-apps/ui 6.91.0 → 6.92.1

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 (273) hide show
  1. package/components-catalog.md +2 -2
  2. package/dist/_internal/components/data-display/Alert/Alert.js +2 -2
  3. package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +3 -3
  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/Chart/Chart.js +3 -3
  8. package/dist/_internal/components/data-display/Chart/SpecChart.js +5 -5
  9. package/dist/_internal/components/data-display/Chart/chart-renderers.js +2 -2
  10. package/dist/_internal/components/data-display/Chip/Chip.js +3 -3
  11. package/dist/_internal/components/data-display/Chip/Chip.styles.js +2 -2
  12. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
  13. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +20 -20
  14. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +26 -26
  15. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +1 -1
  16. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +5 -5
  17. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +4 -4
  18. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +17 -17
  19. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +7 -7
  20. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +5 -5
  21. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +6 -6
  22. package/dist/_internal/components/data-display/DataViews/data-views-range-bounds.js +2 -2
  23. package/dist/_internal/components/data-display/DataViews/data-views-range-calendar.js +1 -1
  24. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +4 -4
  25. package/dist/_internal/components/data-display/DataViews/data-views-range-summary.js +1 -1
  26. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +2 -2
  27. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +1 -1
  28. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +4 -4
  29. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +1 -1
  30. package/dist/_internal/components/data-display/DayRuler/DayRuler.en-US.js +1 -1
  31. package/dist/_internal/components/data-display/DayRuler/DayRuler.js +5 -5
  32. package/dist/_internal/components/data-display/DayRuler/DayRuler.labels.js +3 -3
  33. package/dist/_internal/components/data-display/DayRuler/DayRuler.parts.js +9 -4
  34. package/dist/_internal/components/data-display/DayRuler/DayRuler.pt-BR.js +1 -1
  35. package/dist/_internal/components/data-display/DayRuler/DayRuler.styles.js +9 -1
  36. package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -2
  37. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +5 -5
  38. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +4 -4
  39. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +9 -9
  40. package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +2 -2
  41. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +2 -2
  42. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +2 -2
  43. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +3 -3
  44. package/dist/_internal/components/data-display/RegionMap/RegionMap.js +2 -2
  45. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.js +4 -3
  46. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.parts.js +3 -2
  47. package/dist/_internal/components/data-display/ScheduleGrid/schedule-header-host.styles.js +12 -0
  48. package/dist/_internal/components/data-display/ScheduleGrid/schedule-header-host.styles.js.map +1 -0
  49. package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +3 -3
  50. package/dist/_internal/components/data-display/index.js +42 -41
  51. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +3 -3
  52. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +5 -5
  53. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.overview.js +4 -4
  54. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.parts.js +3 -3
  55. package/dist/_internal/components/feedback/index.js +6 -6
  56. package/dist/_internal/components/index.js +60 -59
  57. package/dist/_internal/components/layout/SettingCard/SettingCard.js +8 -8
  58. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +4 -4
  59. package/dist/_internal/components/layout/SettingCard/SettingCard.summary.js +7 -7
  60. package/dist/_internal/components/layout/SettingCard/SettingGrid.js +5 -5
  61. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +9 -9
  62. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +8 -8
  63. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +9 -9
  64. package/dist/_internal/components/layout/index.js +12 -12
  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/charts.js +6 -6
  74. package/dist/{chunk-HC6OZ7QK.js → chunk-3EIRRLCQ.js} +2 -2
  75. package/dist/{chunk-U2AEM3K4.js → chunk-3PQL2EN5.js} +2 -2
  76. package/dist/{chunk-7NP2JHGM.js → chunk-3WYEENUH.js} +11 -6
  77. package/dist/chunk-3WYEENUH.js.map +1 -0
  78. package/dist/{chunk-M3XJVD5G.js → chunk-5357QUVE.js} +2 -2
  79. package/dist/{chunk-Z7T4EFEC.js → chunk-5I75WRXT.js} +4 -4
  80. package/dist/chunk-5MXVKZKZ.js +30 -0
  81. package/dist/chunk-5MXVKZKZ.js.map +1 -0
  82. package/dist/{chunk-5E2CRRD4.js → chunk-66VKX6JE.js} +5 -5
  83. package/dist/{chunk-N5PVD4J5.js → chunk-6DO672AG.js} +7 -7
  84. package/dist/{chunk-76DX2IMH.js → chunk-7F6D73NL.js} +2 -2
  85. package/dist/{chunk-SNWCT6JN.js → chunk-AMIUZRDQ.js} +3 -3
  86. package/dist/{chunk-A3DDEKLV.js → chunk-BOADHYTA.js} +2 -2
  87. package/dist/{chunk-JKZPGCN7.js → chunk-BXZMV6QC.js} +12 -12
  88. package/dist/{chunk-JH2XLVWM.js → chunk-CW5Z67NA.js} +2 -2
  89. package/dist/{chunk-3JZ3KEQQ.js → chunk-CZVAVX5L.js} +4 -4
  90. package/dist/{chunk-O3OU3ED7.js → chunk-D7R6SRJB.js} +3 -3
  91. package/dist/{chunk-O3OU3ED7.js.map → chunk-D7R6SRJB.js.map} +1 -1
  92. package/dist/{chunk-DVX4HDNP.js → chunk-DBPFKGXX.js} +2 -2
  93. package/dist/{chunk-QN7FVZQD.js → chunk-DHAXUVMR.js} +4 -4
  94. package/dist/{chunk-XCUHGPPZ.js → chunk-DTZOP4ZR.js} +2 -2
  95. package/dist/{chunk-BLZDSCIZ.js → chunk-DYHOBKPU.js} +6 -6
  96. package/dist/{chunk-MX2RF34M.js → chunk-E73C73UD.js} +15 -7
  97. package/dist/chunk-E73C73UD.js.map +1 -0
  98. package/dist/{chunk-42D7KBDH.js → chunk-EOIRU62W.js} +2 -2
  99. package/dist/{chunk-HNW7IZPV.js → chunk-EZBBLLEU.js} +5 -5
  100. package/dist/{chunk-HNW7IZPV.js.map → chunk-EZBBLLEU.js.map} +1 -1
  101. package/dist/{chunk-K3IB7S7Q.js → chunk-F2ZUUEXC.js} +3 -2
  102. package/dist/{chunk-K3IB7S7Q.js.map → chunk-F2ZUUEXC.js.map} +1 -1
  103. package/dist/{chunk-2M3W6ACW.js → chunk-FAUNQ3FS.js} +3 -3
  104. package/dist/{chunk-FORAVDJF.js → chunk-FC7UCFFA.js} +35 -7
  105. package/dist/chunk-FC7UCFFA.js.map +1 -0
  106. package/dist/{chunk-PJNIJIE6.js → chunk-FQNDJITD.js} +2 -2
  107. package/dist/{chunk-ZIHSCBMN.js → chunk-FWTVIRZZ.js} +4 -4
  108. package/dist/{chunk-L3PDY7CJ.js → chunk-FYUNROLW.js} +2 -2
  109. package/dist/{chunk-KJKD6Y6V.js → chunk-GBB23QLL.js} +3 -3
  110. package/dist/{chunk-MICX23P4.js → chunk-HRES2S3Q.js} +85 -8
  111. package/dist/chunk-HRES2S3Q.js.map +1 -0
  112. package/dist/{chunk-XILMDEGZ.js → chunk-IEUVP6UV.js} +3 -3
  113. package/dist/{chunk-3IDL7NK7.js → chunk-K2VDRODL.js} +2 -2
  114. package/dist/{chunk-K3PMMW23.js → chunk-K6VEN5VN.js} +4 -4
  115. package/dist/{chunk-UKUGSU3Y.js → chunk-L4V7FZJI.js} +2 -2
  116. package/dist/{chunk-24HHUCWB.js → chunk-LDCZPZPD.js} +2 -2
  117. package/dist/{chunk-42TOCPXB.js → chunk-LXIPBHNJ.js} +5 -5
  118. package/dist/{chunk-ILJ3FXIC.js → chunk-MM3QESLI.js} +2 -2
  119. package/dist/{chunk-PGANINQD.js → chunk-NI67M453.js} +5 -5
  120. package/dist/{chunk-JN2IANXD.js → chunk-OCGPOACB.js} +2 -2
  121. package/dist/{chunk-RDCIST7P.js → chunk-OCT5VCLP.js} +2 -2
  122. package/dist/{chunk-G2PVUPE7.js → chunk-OJZLFFG4.js} +41 -3
  123. package/dist/chunk-OJZLFFG4.js.map +1 -0
  124. package/dist/{chunk-F7LBTMCA.js → chunk-P53ANKZV.js} +4 -4
  125. package/dist/{chunk-HMEGQKNQ.js → chunk-PCQ5JWLF.js} +15 -7
  126. package/dist/chunk-PCQ5JWLF.js.map +1 -0
  127. package/dist/{chunk-QVDEGBME.js → chunk-PEAUGQKU.js} +4 -4
  128. package/dist/{chunk-HS662RLW.js → chunk-RZWU2KYP.js} +2 -2
  129. package/dist/{chunk-U2QXQ7D4.js → chunk-S2VZUBM7.js} +4 -4
  130. package/dist/{chunk-HOPRZEBM.js → chunk-SKIAWOUC.js} +3 -3
  131. package/dist/{chunk-WCF56ZCD.js → chunk-TMINUTQQ.js} +2 -2
  132. package/dist/{chunk-ACM3HHZY.js → chunk-UDBOGSFO.js} +68 -2
  133. package/dist/chunk-UDBOGSFO.js.map +1 -0
  134. package/dist/{chunk-MZAYIG2I.js → chunk-VCJ72ODU.js} +2 -2
  135. package/dist/{chunk-YGQM6GFQ.js → chunk-VHE7UEG5.js} +2 -2
  136. package/dist/{chunk-QHIWV55K.js → chunk-VWRXSBT2.js} +2 -2
  137. package/dist/chunk-WLDP7C4K.js +44 -0
  138. package/dist/chunk-WLDP7C4K.js.map +1 -0
  139. package/dist/{chunk-TSEBMVYY.js → chunk-X2GWR75Q.js} +3 -3
  140. package/dist/{chunk-NKEFH3RS.js → chunk-XNAI7QGU.js} +2 -2
  141. package/dist/{chunk-L6JAALMX.js → chunk-XRV4QFEQ.js} +3 -3
  142. package/dist/{chunk-WH3LUOCQ.js → chunk-YE7M7URT.js} +2 -2
  143. package/dist/{chunk-DA3D5X5Z.js → chunk-YVDNCV2D.js} +6 -6
  144. package/dist/{chunk-G3JFESKD.js → chunk-Z5WUSI47.js} +6 -6
  145. package/dist/{chunk-5HADIIWN.js → chunk-ZDAAHCIS.js} +3 -3
  146. package/dist/{chunk-D3OXTS7Y.js → chunk-ZHCZOPKE.js} +3 -2
  147. package/dist/{chunk-D3OXTS7Y.js.map → chunk-ZHCZOPKE.js.map} +1 -1
  148. package/dist/{chunk-4KWDNGMA.js → chunk-ZVHHFLYY.js} +3 -3
  149. package/dist/data-display/Alert.js +2 -2
  150. package/dist/data-display/AsyncStateContainer.js +3 -3
  151. package/dist/data-display/Badge.js +2 -2
  152. package/dist/data-display/CardKit.js +7 -7
  153. package/dist/data-display/Chart.js +6 -6
  154. package/dist/data-display/Chip.js +3 -3
  155. package/dist/data-display/DataGrid.js +2 -2
  156. package/dist/data-display/DataViews.js +35 -35
  157. package/dist/data-display/DayRuler.js +7 -7
  158. package/dist/data-display/EmptyState.js +2 -2
  159. package/dist/data-display/FleetMap.js +9 -9
  160. package/dist/data-display/InteractiveTooltip.js +2 -2
  161. package/dist/data-display/Lightbox.js +2 -2
  162. package/dist/data-display/MapPreview.js +3 -3
  163. package/dist/data-display/RegionMap.js +2 -2
  164. package/dist/data-display/ScheduleGrid.js +4 -3
  165. package/dist/data-display/SectionOnboarding.js +3 -3
  166. package/dist/feedback/NotificationStatusNotice.js +3 -3
  167. package/dist/feedback/SequenceResolver.js +5 -5
  168. package/dist/layout/SettingCard.js +12 -12
  169. package/dist/navigation/SectionNav.js +9 -9
  170. package/dist/types/components/data-display/DataViews/data-views-range-bounds.d.ts +6 -1
  171. package/dist/types/components/data-display/DataViews/data-views-range-bounds.d.ts.map +1 -1
  172. package/dist/types/components/data-display/DataViews/data-views-range-calendar.d.ts +13 -1
  173. package/dist/types/components/data-display/DataViews/data-views-range-calendar.d.ts.map +1 -1
  174. package/dist/types/components/data-display/DataViews/data-views-range-pill.d.ts.map +1 -1
  175. package/dist/types/components/data-display/DataViews/data-views-range-summary.d.ts +4 -5
  176. package/dist/types/components/data-display/DataViews/data-views-range-summary.d.ts.map +1 -1
  177. package/dist/types/components/data-display/DayRuler/DayRuler.d.ts.map +1 -1
  178. package/dist/types/components/data-display/DayRuler/DayRuler.en-US.d.ts.map +1 -1
  179. package/dist/types/components/data-display/DayRuler/DayRuler.labels.d.ts +2 -0
  180. package/dist/types/components/data-display/DayRuler/DayRuler.labels.d.ts.map +1 -1
  181. package/dist/types/components/data-display/DayRuler/DayRuler.parts.d.ts +13 -1
  182. package/dist/types/components/data-display/DayRuler/DayRuler.parts.d.ts.map +1 -1
  183. package/dist/types/components/data-display/DayRuler/DayRuler.pt-BR.d.ts.map +1 -1
  184. package/dist/types/components/data-display/DayRuler/DayRuler.styles.d.ts +16 -0
  185. package/dist/types/components/data-display/DayRuler/DayRuler.styles.d.ts.map +1 -1
  186. package/dist/types/components/data-display/DayRuler/DayRuler.types.d.ts +44 -1
  187. package/dist/types/components/data-display/DayRuler/DayRuler.types.d.ts.map +1 -1
  188. package/dist/types/components/data-display/DayRuler/index.d.ts +1 -1
  189. package/dist/types/components/data-display/DayRuler/index.d.ts.map +1 -1
  190. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.parts.d.ts +3 -1
  191. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.parts.d.ts.map +1 -1
  192. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.types.d.ts +12 -0
  193. package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.types.d.ts.map +1 -1
  194. package/dist/types/components/data-display/ScheduleGrid/schedule-header-host.styles.d.ts +16 -0
  195. package/dist/types/components/data-display/ScheduleGrid/schedule-header-host.styles.d.ts.map +1 -0
  196. package/package.json +1 -1
  197. package/src/components/data-display/DataViews/RESPONSIVE-BEHAVIOUR.md +8 -4
  198. package/src/components/data-display/DataViews/data-views-range-bounds.tsx +57 -3
  199. package/src/components/data-display/DataViews/data-views-range-calendar.tsx +122 -8
  200. package/src/components/data-display/DataViews/data-views-range-pill.tsx +5 -0
  201. package/src/components/data-display/DataViews/data-views-range-summary.tsx +9 -22
  202. package/src/components/data-display/DayRuler/DayRuler.en-US.ts +1 -0
  203. package/src/components/data-display/DayRuler/DayRuler.labels.ts +2 -0
  204. package/src/components/data-display/DayRuler/DayRuler.md +3 -2
  205. package/src/components/data-display/DayRuler/DayRuler.parts.tsx +120 -1
  206. package/src/components/data-display/DayRuler/DayRuler.pt-BR.ts +1 -0
  207. package/src/components/data-display/DayRuler/DayRuler.styles.ts +50 -1
  208. package/src/components/data-display/DayRuler/DayRuler.tsx +10 -1
  209. package/src/components/data-display/DayRuler/DayRuler.types.ts +30 -1
  210. package/src/components/data-display/DayRuler/index.ts +2 -0
  211. package/src/components/data-display/ScheduleGrid/ScheduleGrid.md +3 -2
  212. package/src/components/data-display/ScheduleGrid/ScheduleGrid.parts.tsx +18 -3
  213. package/src/components/data-display/ScheduleGrid/ScheduleGrid.tsx +1 -1
  214. package/src/components/data-display/ScheduleGrid/ScheduleGrid.types.ts +12 -0
  215. package/src/components/data-display/ScheduleGrid/schedule-header-host.styles.ts +35 -0
  216. package/dist/chunk-7NP2JHGM.js.map +0 -1
  217. package/dist/chunk-ACM3HHZY.js.map +0 -1
  218. package/dist/chunk-FORAVDJF.js.map +0 -1
  219. package/dist/chunk-G2PVUPE7.js.map +0 -1
  220. package/dist/chunk-HMEGQKNQ.js.map +0 -1
  221. package/dist/chunk-J2AVWIMM.js +0 -60
  222. package/dist/chunk-J2AVWIMM.js.map +0 -1
  223. package/dist/chunk-MICX23P4.js.map +0 -1
  224. package/dist/chunk-MX2RF34M.js.map +0 -1
  225. /package/dist/{chunk-HC6OZ7QK.js.map → chunk-3EIRRLCQ.js.map} +0 -0
  226. /package/dist/{chunk-U2AEM3K4.js.map → chunk-3PQL2EN5.js.map} +0 -0
  227. /package/dist/{chunk-M3XJVD5G.js.map → chunk-5357QUVE.js.map} +0 -0
  228. /package/dist/{chunk-Z7T4EFEC.js.map → chunk-5I75WRXT.js.map} +0 -0
  229. /package/dist/{chunk-5E2CRRD4.js.map → chunk-66VKX6JE.js.map} +0 -0
  230. /package/dist/{chunk-N5PVD4J5.js.map → chunk-6DO672AG.js.map} +0 -0
  231. /package/dist/{chunk-76DX2IMH.js.map → chunk-7F6D73NL.js.map} +0 -0
  232. /package/dist/{chunk-SNWCT6JN.js.map → chunk-AMIUZRDQ.js.map} +0 -0
  233. /package/dist/{chunk-A3DDEKLV.js.map → chunk-BOADHYTA.js.map} +0 -0
  234. /package/dist/{chunk-JKZPGCN7.js.map → chunk-BXZMV6QC.js.map} +0 -0
  235. /package/dist/{chunk-JH2XLVWM.js.map → chunk-CW5Z67NA.js.map} +0 -0
  236. /package/dist/{chunk-3JZ3KEQQ.js.map → chunk-CZVAVX5L.js.map} +0 -0
  237. /package/dist/{chunk-DVX4HDNP.js.map → chunk-DBPFKGXX.js.map} +0 -0
  238. /package/dist/{chunk-QN7FVZQD.js.map → chunk-DHAXUVMR.js.map} +0 -0
  239. /package/dist/{chunk-XCUHGPPZ.js.map → chunk-DTZOP4ZR.js.map} +0 -0
  240. /package/dist/{chunk-BLZDSCIZ.js.map → chunk-DYHOBKPU.js.map} +0 -0
  241. /package/dist/{chunk-42D7KBDH.js.map → chunk-EOIRU62W.js.map} +0 -0
  242. /package/dist/{chunk-2M3W6ACW.js.map → chunk-FAUNQ3FS.js.map} +0 -0
  243. /package/dist/{chunk-PJNIJIE6.js.map → chunk-FQNDJITD.js.map} +0 -0
  244. /package/dist/{chunk-ZIHSCBMN.js.map → chunk-FWTVIRZZ.js.map} +0 -0
  245. /package/dist/{chunk-L3PDY7CJ.js.map → chunk-FYUNROLW.js.map} +0 -0
  246. /package/dist/{chunk-KJKD6Y6V.js.map → chunk-GBB23QLL.js.map} +0 -0
  247. /package/dist/{chunk-XILMDEGZ.js.map → chunk-IEUVP6UV.js.map} +0 -0
  248. /package/dist/{chunk-3IDL7NK7.js.map → chunk-K2VDRODL.js.map} +0 -0
  249. /package/dist/{chunk-K3PMMW23.js.map → chunk-K6VEN5VN.js.map} +0 -0
  250. /package/dist/{chunk-UKUGSU3Y.js.map → chunk-L4V7FZJI.js.map} +0 -0
  251. /package/dist/{chunk-24HHUCWB.js.map → chunk-LDCZPZPD.js.map} +0 -0
  252. /package/dist/{chunk-42TOCPXB.js.map → chunk-LXIPBHNJ.js.map} +0 -0
  253. /package/dist/{chunk-ILJ3FXIC.js.map → chunk-MM3QESLI.js.map} +0 -0
  254. /package/dist/{chunk-PGANINQD.js.map → chunk-NI67M453.js.map} +0 -0
  255. /package/dist/{chunk-JN2IANXD.js.map → chunk-OCGPOACB.js.map} +0 -0
  256. /package/dist/{chunk-RDCIST7P.js.map → chunk-OCT5VCLP.js.map} +0 -0
  257. /package/dist/{chunk-F7LBTMCA.js.map → chunk-P53ANKZV.js.map} +0 -0
  258. /package/dist/{chunk-QVDEGBME.js.map → chunk-PEAUGQKU.js.map} +0 -0
  259. /package/dist/{chunk-HS662RLW.js.map → chunk-RZWU2KYP.js.map} +0 -0
  260. /package/dist/{chunk-U2QXQ7D4.js.map → chunk-S2VZUBM7.js.map} +0 -0
  261. /package/dist/{chunk-HOPRZEBM.js.map → chunk-SKIAWOUC.js.map} +0 -0
  262. /package/dist/{chunk-WCF56ZCD.js.map → chunk-TMINUTQQ.js.map} +0 -0
  263. /package/dist/{chunk-MZAYIG2I.js.map → chunk-VCJ72ODU.js.map} +0 -0
  264. /package/dist/{chunk-YGQM6GFQ.js.map → chunk-VHE7UEG5.js.map} +0 -0
  265. /package/dist/{chunk-QHIWV55K.js.map → chunk-VWRXSBT2.js.map} +0 -0
  266. /package/dist/{chunk-TSEBMVYY.js.map → chunk-X2GWR75Q.js.map} +0 -0
  267. /package/dist/{chunk-NKEFH3RS.js.map → chunk-XNAI7QGU.js.map} +0 -0
  268. /package/dist/{chunk-L6JAALMX.js.map → chunk-XRV4QFEQ.js.map} +0 -0
  269. /package/dist/{chunk-WH3LUOCQ.js.map → chunk-YE7M7URT.js.map} +0 -0
  270. /package/dist/{chunk-DA3D5X5Z.js.map → chunk-YVDNCV2D.js.map} +0 -0
  271. /package/dist/{chunk-G3JFESKD.js.map → chunk-Z5WUSI47.js.map} +0 -0
  272. /package/dist/{chunk-5HADIIWN.js.map → chunk-ZDAAHCIS.js.map} +0 -0
  273. /package/dist/{chunk-4KWDNGMA.js.map → chunk-ZVHHFLYY.js.map} +0 -0
@@ -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":"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","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
@@ -1,6 +1,3 @@
1
- import {
2
- chipKeyAction
3
- } from "./chunk-BF4FYOAR.js";
4
1
  import {
5
2
  CHIP_SIZES,
6
3
  CHIP_TRANSITION_EASING,
@@ -10,6 +7,9 @@ import {
10
7
  SOFT_GROUND_ALPHA,
11
8
  SOFT_HOVER_ALPHA
12
9
  } from "./chunk-E5I776YW.js";
10
+ import {
11
+ chipKeyAction
12
+ } from "./chunk-BF4FYOAR.js";
13
13
  import {
14
14
  shadowInk
15
15
  } from "./chunk-XJAD6E3V.js";
@@ -110,4 +110,4 @@ export {
110
110
  chipStyles,
111
111
  iconWithTestId
112
112
  };
113
- //# sourceMappingURL=chunk-QN7FVZQD.js.map
113
+ //# sourceMappingURL=chunk-DHAXUVMR.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
@@ -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,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":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-EWFBDAB7.js";
4
4
  import {
5
5
  EmptyState
6
- } from "./chunk-42TOCPXB.js";
6
+ } from "./chunk-LXIPBHNJ.js";
7
7
 
8
8
  // src/components/data-display/SectionOnboarding/SectionOnboarding.tsx
9
9
  import CheckCircle from "@mui/icons-material/CheckCircle";
@@ -193,4 +193,4 @@ export {
193
193
  SectionOnboarding,
194
194
  SectionOnboarding_default
195
195
  };
196
- //# sourceMappingURL=chunk-42D7KBDH.js.map
196
+ //# sourceMappingURL=chunk-EOIRU62W.js.map
@@ -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":[]}
@@ -5,10 +5,11 @@ var EN_US_DAY_RULER_LABELS = {
5
5
  resized: (block, range) => `${block} now ${range}`,
6
6
  refused: "It cannot go further",
7
7
  notMovable: "This shift cannot be changed here",
8
- loading: "Loading the day"
8
+ loading: "Loading the day",
9
+ footerMarked: "short of people"
9
10
  };
10
11
 
11
12
  export {
12
13
  EN_US_DAY_RULER_LABELS
13
14
  };
14
- //# sourceMappingURL=chunk-K3IB7S7Q.js.map
15
+ //# sourceMappingURL=chunk-F2ZUUEXC.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/data-display/DayRuler/DayRuler.en-US.ts"],"sourcesContent":["/** `DayRuler`'s en-US words, and the component's own fallback when `labels` is not given. */\nimport type { DayRulerLabels } from './DayRuler.labels';\n\nexport const EN_US_DAY_RULER_LABELS: DayRulerLabels = {\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"],"mappings":";AAGO,IAAM,yBAAyC;AAAA,EACpD,aAAa,CAAC,QAAQ,YAAY,GAAG;AAAA,EACrC,OAAO,CAAC,OAAO,UAAU,GAAG,KAAK,QAAQ,KAAK;AAAA,EAC9C,SAAS,CAAC,OAAO,UAAU,GAAG,KAAK,QAAQ,KAAK;AAAA,EAChD,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AACX;","names":[]}
1
+ {"version":3,"sources":["../src/components/data-display/DayRuler/DayRuler.en-US.ts"],"sourcesContent":["/** `DayRuler`'s en-US words, and the component's own fallback when `labels` is not given. */\nimport type { DayRulerLabels } from './DayRuler.labels';\n\nexport const EN_US_DAY_RULER_LABELS: DayRulerLabels = {\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 footerMarked: \"short of people\",\n};\n"],"mappings":";AAGO,IAAM,yBAAyC;AAAA,EACpD,aAAa,CAAC,QAAQ,YAAY,GAAG;AAAA,EACrC,OAAO,CAAC,OAAO,UAAU,GAAG,KAAK,QAAQ,KAAK;AAAA,EAC9C,SAAS,CAAC,OAAO,UAAU,GAAG,KAAK,QAAQ,KAAK;AAAA,EAChD,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,cAAc;AAChB;","names":[]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  SectionNavRail
3
- } from "./chunk-SNWCT6JN.js";
3
+ } from "./chunk-AMIUZRDQ.js";
4
4
  import {
5
5
  SectionNavBar
6
- } from "./chunk-F7LBTMCA.js";
6
+ } from "./chunk-P53ANKZV.js";
7
7
 
8
8
  // src/components/navigation/SectionNav/SectionNav.tsx
9
9
  import { jsx } from "react/jsx-runtime";
@@ -55,4 +55,4 @@ function SectionNav({
55
55
  export {
56
56
  SectionNav
57
57
  };
58
- //# sourceMappingURL=chunk-2M3W6ACW.js.map
58
+ //# sourceMappingURL=chunk-FAUNQ3FS.js.map
@@ -12,9 +12,11 @@ import {
12
12
  } from "./chunk-CBOB5AV6.js";
13
13
  import {
14
14
  DayRangeCalendar
15
- } from "./chunk-MICX23P4.js";
15
+ } from "./chunk-HRES2S3Q.js";
16
16
  import {
17
- isRangeInverted
17
+ isRangeInverted,
18
+ isRangeSet,
19
+ rangeChipLabel
18
20
  } from "./chunk-GCZJH4XL.js";
19
21
  import {
20
22
  useDataViewsCopy
@@ -29,7 +31,7 @@ import {
29
31
  // src/components/data-display/DataViews/data-views-range-bounds.tsx
30
32
  import Box from "@mui/material/Box/index.js";
31
33
  import Typography from "@mui/material/Typography/index.js";
32
- import { useState } from "react";
34
+ import { useEffect, useRef, useState } from "react";
33
35
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
34
36
  function BoundField({
35
37
  field,
@@ -66,6 +68,28 @@ function BoundField({
66
68
  }
67
69
  );
68
70
  }
71
+ function useFocusDeAfterClear(key, testId) {
72
+ const rootRef = useRef(null);
73
+ const pending = useRef(false);
74
+ useEffect(() => {
75
+ if (!pending.current) return;
76
+ pending.current = false;
77
+ rootRef.current?.querySelector(`[data-testid="${testId}-min"]`)?.focus();
78
+ }, [key, testId]);
79
+ return {
80
+ rootRef,
81
+ clearToDe: (clear, fromKeyboard) => {
82
+ pending.current = fromKeyboard;
83
+ clear();
84
+ }
85
+ };
86
+ }
87
+ function hintLineProps(field, value, clear) {
88
+ return { summary: appliedWindow(field, value), onClear: clear };
89
+ }
90
+ function appliedWindow(field, value) {
91
+ return isRangeSet(value) ? rangeChipLabel(field, value) : void 0;
92
+ }
69
93
  function BoundCell({ grow, children }) {
70
94
  if (!grow) return /* @__PURE__ */ jsx(Fragment, { children });
71
95
  return /* @__PURE__ */ jsx(Box, { sx: { flex: "1 1 0", minWidth: 0 }, children });
@@ -105,17 +129,20 @@ function RangeBounds({
105
129
  testId,
106
130
  calendarMonths = 1,
107
131
  showCalendar = true,
108
- fillRow = false
132
+ fillRow = false,
133
+ summaryOnHint = false
109
134
  }) {
110
135
  const copy = useDataViewsCopy();
111
136
  const { key, emitted } = useOutsideResetKey(value);
137
+ const { rootRef, clearToDe } = useFocusDeAfterClear(key, testId);
138
+ const hintLine = summaryOnHint ? hintLineProps(field, value, (fromKeyboard) => clearToDe(() => onChange({}), fromKeyboard)) : {};
112
139
  const [typed, setTyped] = useState(0);
113
140
  const typedChange = (range) => {
114
141
  setTyped((n) => n + 1);
115
142
  onChange(emitted(range));
116
143
  };
117
144
  const day = field.kind === "day";
118
- return /* @__PURE__ */ jsxs(Box, { "data-testid": `${testId}-panel`, children: [
145
+ return /* @__PURE__ */ jsxs(Box, { ref: rootRef, "data-testid": `${testId}-panel`, children: [
119
146
  /* @__PURE__ */ jsx(Box, { sx: { "&:not(:empty)": { mb: { xs: 1, sm: 1.5 } } }, children: /* @__PURE__ */ jsx(RangePresets, { presets: presetsFor(field, copy), value, onChange, testId }) }),
120
147
  /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "flex-start", gap: 1.5 }, children: [
121
148
  /* @__PURE__ */ jsx(BoundCell, { grow: day || fillRow, children: /* @__PURE__ */ jsx(
@@ -152,7 +179,8 @@ function RangeBounds({
152
179
  onChange: (range) => onChange(emitted(range)),
153
180
  months: calendarMonths,
154
181
  viewKey: `${key}-${typed}`,
155
- testId
182
+ testId,
183
+ ...hintLine
156
184
  }
157
185
  )
158
186
  ] });
@@ -161,4 +189,4 @@ function RangeBounds({
161
189
  export {
162
190
  RangeBounds
163
191
  };
164
- //# sourceMappingURL=chunk-FORAVDJF.js.map
192
+ //# sourceMappingURL=chunk-FC7UCFFA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DataViews/data-views-range-bounds.tsx"],"sourcesContent":["'use client';\n\n/**\n * The `De`/`Até` pair of a range filter, its preset chips, the line under it\n * and — for a day range — the calendar under that (FUT-4144). Shared by the\n * pill's popover, the slide-in panel and the \"Mais\" sheet, so the three cannot\n * drift on what a bound accepts or how it clears.\n */\nimport Box from '@mui/material/Box/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { useDataViewsCopy } from './data-views-copy-context';\nimport { DayBoundInput } from './data-views-day-input';\nimport { NumberBoundInput } from './data-views-number-input';\nimport { RangePresets } from './data-views-preset-chips';\nimport { DayRangeCalendar } from './data-views-range-calendar';\nimport { presetsFor } from './data-views-range-presets';\nimport { useOutsideResetKey } from './data-views-range-reset';\nimport { isRangeInverted, isRangeSet, rangeChipLabel } from './data-views-range-values';\nimport type { RangeFieldConfig, RangeValue } from './data-views-types';\nimport { sxRem } from '../../../tokens/relative';\n\n/**\n * One end of the range. A day keeps its `AAAA-MM-DD` string verbatim (the form\n * both the field and the backend speak) and is typed through the masked\n * `dd/mm/aaaa` field rather than a native date input — see\n * {@link DayBoundInput} for why. A number parses, and an unparseable/blank\n * entry CLEARS the bound rather than writing `NaN`.\n */\nfunction BoundField<T extends Record<string, unknown>>({\n field,\n label,\n value,\n onChange,\n testId,\n fill,\n}: {\n field: RangeFieldConfig<T>;\n label: string;\n value: number | string | undefined;\n onChange: (bound: number | string | undefined) => void;\n testId: string;\n /** A number box takes its cell's width; a day box always does. */\n fill: boolean;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n if (field.kind === 'day') {\n return (\n <DayBoundInput\n fill\n mask={copy.filters.dayMask}\n invalidMessage={copy.filters.dayInvalid}\n label={label}\n value={value == null ? undefined : String(value)}\n onChange={onChange}\n testId={testId}\n />\n );\n }\n return (\n <NumberBoundInput\n fill={fill}\n label={label}\n value={value}\n unit={field.unit}\n onChange={onChange}\n testId={testId}\n />\n );\n}\n\n\n/**\n * After the line's \"Limpar\" pressed from the keyboard, focus goes to the\n * cleared \"De\" — the next thing to type — instead of falling to the page with\n * the button that held it. A tap leaves focus alone: focusing \"De\" there would\n * open the phone's keyboard over the calendar the next tap is for.\n * The boxes remount on a clear, so focus waits for the reset key to move.\n */\nfunction useFocusDeAfterClear(\n key: number,\n testId: string,\n): { rootRef: React.RefObject<HTMLDivElement | null>; clearToDe: (clear: () => void, fromKeyboard: boolean) => void } {\n const rootRef = useRef<HTMLDivElement>(null);\n const pending = useRef(false);\n useEffect(() => {\n if (!pending.current) return;\n pending.current = false;\n rootRef.current?.querySelector<HTMLInputElement>(`[data-testid=\"${testId}-min\"]`)?.focus();\n }, [key, testId]);\n return {\n rootRef,\n clearToDe: (clear, fromKeyboard) => {\n pending.current = fromKeyboard;\n clear();\n },\n };\n}\n\n/**\n * The window and \"Limpar\" for the hint line, where the host asks for them.\n * `clear` goes straight to the host, not through `emitted`: it is an outside\n * write, so the boxes and the calendar re-open on the empty range.\n */\nfunction hintLineProps<T extends Record<string, unknown>>(\n field: RangeFieldConfig<T>,\n value: RangeValue,\n clear: (fromKeyboard: boolean) => void,\n): { summary: string | undefined; onClear: (fromKeyboard: boolean) => void } {\n return { summary: appliedWindow(field, value), onClear: clear };\n}\n\n/** The applied window in words (\"Data: 01/10–15/10\"), or nothing while none is. */\nfunction appliedWindow<T extends Record<string, unknown>>(field: RangeFieldConfig<T>, value: RangeValue): string | undefined {\n return isRangeSet(value) ? rangeChipLabel(field, value) : undefined;\n}\n\n/** One box of the pair: an equal share of the row for a day, as it was for a number. */\nfunction BoundCell({ grow, children }: { grow: boolean; children: React.ReactNode }): React.JSX.Element {\n if (!grow) return <>{children}</>;\n return <Box sx={{ flex: '1 1 0', minWidth: 0 }}>{children}</Box>;\n}\n\n/**\n * The line under the pair: why an inverted window matches nothing, or — for a\n * day range — that BOTH days are in the result. Saying so is FUT-668's other\n * half: the bounds compare as ISO strings precisely so `até` keeps its whole\n * day, and nothing on screen would otherwise tell the merchant that.\n */\nfunction RangeNote({\n day,\n inverted,\n testId,\n}: {\n day: boolean;\n inverted: boolean;\n testId: string;\n}): React.JSX.Element | null {\n const copy = useDataViewsCopy();\n if (inverted) {\n return (\n <Typography\n component=\"p\"\n data-testid={`${testId}-inverted`}\n sx={{ mt: 0.75, fontSize: sxRem(12), color: 'error.main' }}\n >\n {copy.filters.rangeInvalid}\n </Typography>\n );\n }\n if (!day) return null;\n return (\n <Typography\n component=\"p\"\n data-testid={`${testId}-inclusive`}\n // `text.secondary`, not `disabled`: the note is read, and disabled grey\n // at 12px is 2.68:1 (FUT-4144 UI review).\n sx={{ mt: { xs: 0.25, sm: 0.75 }, fontSize: sxRem(12), color: 'text.secondary' }}\n >\n {copy.filters.rangeInclusiveNote}\n </Typography>\n );\n}\n\n/** Props of {@link RangeBounds}. */\ninterface RangeBoundsProps<T extends Record<string, unknown>> {\n field: RangeFieldConfig<T>;\n value: RangeValue;\n onChange: (range: RangeValue) => void;\n testId: string;\n /**\n * Months the day calendar shows side by side (FUT-4144). Two where the\n * popover has the room; one, with the month/year selectors, on a phone and\n * in the panels.\n */\n calendarMonths?: 1 | 2;\n /**\n * Whether the day calendar is mounted. A host that keeps the pair mounted\n * while hidden (the slide-in panel) passes its open state, so a closed panel\n * holds no calendar of its own.\n */\n showCalendar?: boolean;\n /**\n * A NUMBER pair splits the row equally too, as a day pair always does. Set\n * by the panels, whose width is the row's; the pill's popover sizes itself to\n * its content and keeps the boxes' own width.\n */\n fillRow?: boolean;\n /**\n * Say the applied window, and its \"Limpar\", on the day calendar's hint line.\n * The pill's popover sets it; a panel has them in its own header.\n */\n summaryOnHint?: boolean;\n}\n\n/**\n * The `De`/`Até` pair for a range — shared by the pill's popover and the\n * slide-in panel's day fields, so the two surfaces cannot drift on what a bound\n * accepts or how it clears.\n */\nexport function RangeBounds<T extends Record<string, unknown>>({\n field,\n value,\n onChange,\n testId,\n calendarMonths = 1,\n showCalendar = true,\n fillRow = false,\n summaryOnHint = false,\n}: RangeBoundsProps<T>): React.JSX.Element {\n const copy = useDataViewsCopy();\n const { key, emitted } = useOutsideResetKey(value);\n const { rootRef, clearToDe } = useFocusDeAfterClear(key, testId);\n const hintLine = summaryOnHint ? hintLineProps(field, value, (fromKeyboard) => clearToDe(() => onChange({}), fromKeyboard)) : {};\n // Moves the calendar to a TYPED day. A typed write is the fields' own, so\n // the outside key above does not see it; a tap on the calendar moves\n // neither, which is what keeps it still under the finger.\n const [typed, setTyped] = useState(0);\n const typedChange = (range: RangeValue) => {\n setTyped((n) => n + 1);\n onChange(emitted(range));\n };\n const day = field.kind === 'day';\n return (\n <Box ref={rootRef} data-testid={`${testId}-panel`}>\n {/* Above the inputs, not below: the presets are the answer for most\n merchants, and the two date pickers are the escape hatch. */}\n <Box sx={{ '&:not(:empty)': { mb: { xs: 1, sm: 1.5 } } }}>\n <RangePresets presets={presetsFor(field, copy)} value={value} onChange={onChange} testId={testId} />\n </Box>\n {/* Top-aligned: a day that does not exist grows ITS field by a message\n line, and centring would push the other box half a line down. The two\n boxes are one height, so with no message this is the same row. */}\n <Box sx={{ display: 'flex', alignItems: 'flex-start', gap: 1.5 }}>\n {/* A day pair shares the row equally, so it spans the calendar under\n it; a number pair keeps its own widths. */}\n <BoundCell grow={day || fillRow}>\n <BoundField\n key={`min-${key}`}\n field={field}\n label={copy.filters.rangeStart}\n value={value.min}\n onChange={(min) => typedChange({ ...value, min })}\n testId={`${testId}-min`}\n fill={fillRow}\n />\n </BoundCell>\n <BoundCell grow={day || fillRow}>\n <BoundField\n key={`max-${key}`}\n field={field}\n label={copy.filters.rangeEnd}\n value={value.max}\n onChange={(max) => typedChange({ ...value, max })}\n testId={`${testId}-max`}\n fill={fillRow}\n />\n </BoundCell>\n </Box>\n <RangeNote day={day} inverted={isRangeInverted(value)} testId={testId} />\n {/* Under the boxes and the note, with no button to reach it: the typed\n path stays as short as it was, and a period is two taps (FUT-4144). */}\n {day && showCalendar && (\n <DayRangeCalendar\n fieldLabel={field.label}\n value={value}\n onChange={(range) => onChange(emitted(range))}\n months={calendarMonths}\n viewKey={`${key}-${typed}`}\n testId={testId}\n {...hintLine}\n />\n )}\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Alert
3
- } from "./chunk-QVDEGBME.js";
3
+ } from "./chunk-PEAUGQKU.js";
4
4
 
5
5
  // src/components/data-display/CardKit/card-actions-context.tsx
6
6
  import { createContext, useCallback, useContext, useState } from "react";
@@ -58,4 +58,4 @@ export {
58
58
  CardActionsProvider,
59
59
  useCardActions
60
60
  };
61
- //# sourceMappingURL=chunk-PJNIJIE6.js.map
61
+ //# sourceMappingURL=chunk-FQNDJITD.js.map
@@ -1,6 +1,9 @@
1
1
  import {
2
2
  resolveLightboxProps
3
3
  } from "./chunk-UOS7DEQZ.js";
4
+ import {
5
+ LightboxThumbnails
6
+ } from "./chunk-64UNVW6D.js";
4
7
  import {
5
8
  LightboxStage
6
9
  } from "./chunk-SYGM4SHY.js";
@@ -13,9 +16,6 @@ import {
13
16
  import {
14
17
  useLightbox
15
18
  } from "./chunk-HZBDTPPV.js";
16
- import {
17
- LightboxThumbnails
18
- } from "./chunk-64UNVW6D.js";
19
19
  import {
20
20
  makeTestId
21
21
  } from "./chunk-VQU3CBAL.js";
@@ -148,4 +148,4 @@ export {
148
148
  Lightbox,
149
149
  Lightbox_default
150
150
  };
151
- //# sourceMappingURL=chunk-ZIHSCBMN.js.map
151
+ //# sourceMappingURL=chunk-FWTVIRZZ.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-AJ6KFHEE.js";
4
4
  import {
5
5
  PanelRangeField
6
- } from "./chunk-7NP2JHGM.js";
6
+ } from "./chunk-3WYEENUH.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-L3PDY7CJ.js.map
160
+ //# sourceMappingURL=chunk-FYUNROLW.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SettingSwitchBlock,
3
3
  useSettingSwitchIds
4
- } from "./chunk-5HADIIWN.js";
4
+ } from "./chunk-ZDAAHCIS.js";
5
5
  import {
6
6
  SettingGroupContext
7
7
  } from "./chunk-XJQNSMGA.js";
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-SALQ65SM.js";
11
11
  import {
12
12
  partTestId
13
- } from "./chunk-HC6OZ7QK.js";
13
+ } from "./chunk-3EIRRLCQ.js";
14
14
  import {
15
15
  dependentsStyles,
16
16
  hintStyles,
@@ -84,4 +84,4 @@ SettingGroup.displayName = "SettingGroup";
84
84
  export {
85
85
  SettingGroup
86
86
  };
87
- //# sourceMappingURL=chunk-KJKD6Y6V.js.map
87
+ //# sourceMappingURL=chunk-GBB23QLL.js.map