@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
@@ -71,13 +71,90 @@ function openingMonth(value, months) {
71
71
  const anchor = end ?? /* @__PURE__ */ new Date();
72
72
  return new Date(anchor.getFullYear(), anchor.getMonth() - (months > 1 ? 1 : 0), 1);
73
73
  }
74
+ function HintLine({
75
+ text,
76
+ isWindow,
77
+ canClear,
78
+ onClear,
79
+ testId
80
+ }) {
81
+ const clear = useDataViewsCopy().filters.clear;
82
+ return /* @__PURE__ */ jsxs(
83
+ Box,
84
+ {
85
+ "data-testid": `${testId}-calendar-line`,
86
+ sx: {
87
+ display: "flex",
88
+ alignItems: "center",
89
+ justifyContent: "space-between",
90
+ gap: 2,
91
+ mt: { xs: 0.25, sm: 1 },
92
+ minHeight: canClear ? sxRem(40) : void 0,
93
+ fontSize: sxRem(12),
94
+ lineHeight: 1.5
95
+ },
96
+ children: [
97
+ /* @__PURE__ */ jsx(
98
+ Typography,
99
+ {
100
+ component: "p",
101
+ "aria-live": "polite",
102
+ "data-testid": `${testId}-calendar-hint`,
103
+ title: text,
104
+ noWrap: true,
105
+ sx: { m: 0, minWidth: 0, font: "inherit", color: isWindow ? "text.primary" : "text.secondary" },
106
+ children: text
107
+ }
108
+ ),
109
+ onClear && /* @__PURE__ */ jsx(
110
+ Box,
111
+ {
112
+ component: "button",
113
+ type: "button",
114
+ onClick: (event) => onClear(event.detail === 0),
115
+ "data-testid": `${testId}-clear`,
116
+ sx: {
117
+ flexShrink: 0,
118
+ display: "inline-flex",
119
+ alignItems: "center",
120
+ minHeight: sxRem(40),
121
+ border: 0,
122
+ bgcolor: "transparent",
123
+ cursor: "pointer",
124
+ font: "inherit",
125
+ fontWeight: 600,
126
+ color: "primary.main",
127
+ px: 1,
128
+ py: 0,
129
+ // Its text lines up with the boxes' right edge; the side padding
130
+ // reaches into the popover's own.
131
+ mr: -1,
132
+ borderRadius: 1,
133
+ "&:hover": { bgcolor: "action.hover" },
134
+ // The theme's focus ring for a keyboard, none for a tap.
135
+ "&:focus": { outline: "none" },
136
+ "&:focus-visible": {
137
+ outline: (theme) => `${rem(theme, 2)} solid`,
138
+ outlineColor: "primary.main",
139
+ outlineOffset: sxRem(1)
140
+ }
141
+ },
142
+ children: clear
143
+ }
144
+ )
145
+ ]
146
+ }
147
+ );
148
+ }
74
149
  function DayRangeCalendar({
75
150
  fieldLabel,
76
151
  value,
77
152
  onChange,
78
153
  months,
79
154
  viewKey,
80
- testId
155
+ testId,
156
+ summary,
157
+ onClear
81
158
  }) {
82
159
  const copy = useDataViewsCopy().filters.dayCalendar ?? EN_US_DATA_VIEWS_COPY.filters.dayCalendar;
83
160
  const range = rangeOf(value);
@@ -103,13 +180,13 @@ function DayRangeCalendar({
103
180
  viewKey
104
181
  ),
105
182
  /* @__PURE__ */ jsx(
106
- Typography,
183
+ HintLine,
107
184
  {
108
- component: "p",
109
- "aria-live": "polite",
110
- "data-testid": `${testId}-calendar-hint`,
111
- sx: { mt: { xs: 0.25, sm: 1 }, fontSize: sxRem(12), color: "text.secondary" },
112
- children: waitingForEnd ? copy.pickEnd : copy.pickStart
185
+ text: waitingForEnd ? copy.pickEnd : summary ?? copy.pickStart,
186
+ isWindow: !waitingForEnd && summary !== void 0,
187
+ canClear: onClear !== void 0,
188
+ onClear: summary === void 0 ? void 0 : onClear,
189
+ testId
113
190
  }
114
191
  )
115
192
  ] });
@@ -119,4 +196,4 @@ export {
119
196
  rangeFromCalendar,
120
197
  DayRangeCalendar
121
198
  };
122
- //# sourceMappingURL=chunk-MICX23P4.js.map
199
+ //# sourceMappingURL=chunk-HRES2S3Q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DataViews/data-views-range-calendar.tsx"],"sourcesContent":["'use client';\n\n/**\n * The range calendar under a day filter's `De`/`Até` boxes (FUT-4144).\n *\n * The owner picked it ALWAYS OPEN (option B of the prototype): a period is\n * three taps — open the filter, the first day, the last day — against five for\n * a calendar button in each box and four for a link to a separate sheet. It\n * sits BELOW the boxes, with no button of its own, so the typed path is not one\n * keystroke longer than it was.\n *\n * The boxes and the calendar are two views of ONE range: a tap writes the\n * boxes, a typed day moves and repaints the calendar, an impossible typed day\n * (which writes nothing) leaves it alone, and \"Limpar\" empties both.\n *\n * It is `Calendar` in `selectionMode=\"range\"`, the same one `DateRangePicker`\n * mounts — not a second calendar. Its own rule picks the period: the first tap\n * starts it, the second closes it, and a second tap BEFORE the first swaps the\n * two, so the boxes never show a period backwards.\n */\nimport Box from '@mui/material/Box/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React from 'react';\n\nimport { EN_US_DATA_VIEWS_COPY } from '../../../en-US.data-display';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport { rem, sxRem } from '../../../tokens/relative';\nimport { Calendar, type DateRange } from '../../form/Calendar';\nimport { toDayString, toLocalDay } from '../../form/DateRangePicker/DateRangePicker.dates';\nimport type { DataViewsDayCalendarCopy } from './data-views-copy';\nimport { useDataViewsCopy } from './data-views-copy-context';\nimport type { RangeValue } from './data-views-types';\n\nconst CALENDAR_CLASS = 'data-views-range-calendar';\n\n/**\n * `Calendar` draws its own `Paper` with 24px of padding and a shadow. Inside\n * the filter's popover that reads as a card inside a card, so the inner frame\n * is flattened through the class hook the component offers for this — the\n * same thing `DateRangePicker` does.\n */\nconst ROOT_SX = (theme: Theme) => ({\n mt: { xs: 1, sm: 1.5 },\n // Below `sm` the caption and the weekday row give up their bottom margins,\n // so the whole popover fits a 320×568 screen under its pill (FUT-4144).\n '& :has(> * > [data-testid=\"calendar-month-select\"])': { mb: { xs: 0.5, sm: 2 } },\n '& :has(> [role=\"columnheader\"])': { mb: { xs: 0, sm: 1 } },\n '& [role=\"columnheader\"]': { height: { xs: rem(theme, 24), sm: rem(theme, 32) } },\n // The days carry no column gap of their own (`Calendar`, FUT-4162), so the\n // seven columns are what a day's 40px target is carved from below `sm`; the\n // range band and its round endpoints are the Calendar's, untouched here.\n // The month/year caption on ONE row at 320: the selectors give up the slack\n // around their text before the arrows are pushed onto a second row.\n '& [data-testid=\"calendar-month-select\"], & [data-testid=\"calendar-year-select\"]': { px: 0.5, minWidth: 0 },\n [`& .${CALENDAR_CLASS}`]: {\n p: 0,\n boxShadow: 'none',\n backgroundColor: 'transparent',\n backgroundImage: 'none',\n // A tapped day already rings itself; the whole grid framed in the primary\n // colour after every tap is noise in a popover. The frame stays for the\n // keyboard reaching the grid itself.\n '&:focus-within': { outline: 'none' },\n '&:focus-visible': {\n outline: (theme: Theme) => `${rem(theme, 2)} solid`,\n outlineColor: 'primary.main',\n outlineOffset: sxRem(2),\n },\n },\n});\n\n/** The two ends of a range, as `Calendar` reads them. */\nfunction rangeOf(value: RangeValue): DateRange {\n return {\n start: toLocalDay(typeof value.min === 'string' ? value.min : null),\n end: toLocalDay(typeof value.max === 'string' ? value.max : null),\n };\n}\n\n/**\n * What a tap on the calendar makes of the range.\n *\n * `Calendar` reports the period it holds after the tap: a fresh start (`end`\n * null) or a closed one, already in order. The one case it cannot see is a\n * range with only `Até` — typed, or left by a saved view — where its first tap\n * would drop that `Até`. A first day on or before it keeps it, so \"até 15/10\"\n * plus one tap on the 3rd is 03/10–15/10, as the prototype does.\n */\nexport function rangeFromCalendar(previous: RangeValue, picked: DateRange): RangeValue {\n const min = dayOf(picked.start);\n const max = dayOf(picked.end) ?? keptEnd(previous, min);\n return { ...(min ? { min } : {}), ...(max ? { max } : {}) };\n}\n\nconst dayOf = (date: Date | null | undefined): string | undefined => (date ? toDayString(date) : undefined);\n\n/** The `Até` of a range that has ONLY one, when the new first day is on or before it. */\nfunction keptEnd(previous: RangeValue, min: string | undefined): string | undefined {\n if (previous.min != null || typeof previous.max !== 'string') return undefined;\n return min && min <= previous.max ? previous.max : undefined;\n}\n\n/**\n * The month the calendar opens on while `De` is empty. With `De` set it opens\n * on De's month, which `Calendar` does by itself.\n *\n * With two months the current month sits on the RIGHT (setembro | outubro), so\n * the days a filter usually asks about — the ones just past — are on screen;\n * with only `Até` set, its month takes that place.\n */\nfunction openingMonth(value: RangeValue, months: number): Date | undefined {\n const end = toLocalDay(typeof value.max === 'string' ? value.max : null);\n const anchor = end ?? new Date();\n return new Date(anchor.getFullYear(), anchor.getMonth() - (months > 1 ? 1 : 0), 1);\n}\n\n/**\n * The line under the calendar: the next step (\"Toque no primeiro e no último\n * dia.\" / \"Agora toque no último dia.\") or, once a period is applied, the\n * window, with \"Limpar\" at its end.\n *\n * ONE line whose words change, never a row held empty for later (FUT-4144\n * follow-up): #932 kept an invisible summary row under the hint so the first\n * tap would not grow the popover, and at 1280 that was 59px of white.\n *\n * Where the line can hold \"Limpar\" (the pill's popover) it is always as tall as\n * its 40px target, so it keeps one height with the button and without it, and\n * the popover does not move. Where it cannot (a panel, whose header has\n * \"Limpar\") it stays a plain line of text: no row reserved for a button that\n * never comes. The text keeps to one line, cut with an ellipsis and whole in\n * its title, so a long label never grows the line on the closing tap. The target\n * is its own box, not padding pushed out with a negative margin: that version\n * ran under the calendar's last week, which took its top 10px at 320 (FUT-4144\n * UI review). The window is said in the primary ink, the steps in the\n * secondary one, so the result does not read as one more instruction.\n */\nfunction HintLine({\n text,\n isWindow,\n canClear,\n onClear,\n testId,\n}: {\n text: string;\n /** `text` is the applied window, not a step. */\n isWindow: boolean;\n /** The line can hold \"Limpar\" at all — fixed per surface, not per state. */\n canClear: boolean;\n /** Shown now: \"Limpar\" empties the range; `fromKeyboard` is a click with `detail` 0 (Enter or Space). */\n onClear: ((fromKeyboard: boolean) => void) | undefined;\n testId: string;\n}): React.JSX.Element {\n const clear = useDataViewsCopy().filters.clear;\n return (\n <Box\n data-testid={`${testId}-calendar-line`}\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 2,\n mt: { xs: 0.25, sm: 1 },\n minHeight: canClear ? sxRem(40) : undefined,\n fontSize: sxRem(12),\n lineHeight: 1.5,\n }}\n >\n <Typography\n component=\"p\"\n aria-live=\"polite\"\n data-testid={`${testId}-calendar-hint`}\n title={text}\n noWrap\n sx={{ m: 0, minWidth: 0, font: 'inherit', color: isWindow ? 'text.primary' : 'text.secondary' }}\n >\n {text}\n </Typography>\n {onClear && (\n <Box\n component=\"button\"\n type=\"button\"\n onClick={(event) => onClear(event.detail === 0)}\n data-testid={`${testId}-clear`}\n sx={{\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n minHeight: sxRem(40),\n border: 0,\n bgcolor: 'transparent',\n cursor: 'pointer',\n font: 'inherit',\n fontWeight: 600,\n color: 'primary.main',\n px: 1,\n py: 0,\n // Its text lines up with the boxes' right edge; the side padding\n // reaches into the popover's own.\n mr: -1,\n borderRadius: 1,\n '&:hover': { bgcolor: 'action.hover' },\n // The theme's focus ring for a keyboard, none for a tap.\n '&:focus': { outline: 'none' },\n '&:focus-visible': {\n outline: (theme: Theme) => `${rem(theme, 2)} solid`,\n outlineColor: 'primary.main',\n outlineOffset: sxRem(1),\n },\n }}\n >\n {clear}\n </Box>\n )}\n </Box>\n );\n}\n\n/** Props of {@link DayRangeCalendar}. */\nexport interface DayRangeCalendarProps {\n /** The filter's own label (\"Data\"), which names the calendar. */\n fieldLabel: string;\n value: RangeValue;\n /** Called with the range a tap leaves; never for a typed day. */\n onChange: (range: RangeValue) => void;\n /**\n * Months side by side. Two read as a period at a glance where there is room;\n * one, with the month/year selectors, where there is not.\n */\n months: 1 | 2;\n /**\n * Changes when the range moved from OUTSIDE the calendar (typed, a preset,\n * \"Limpar\"), so the calendar re-opens on it. Never for its own taps: a\n * calendar that jumped under the finger picking in it would be unusable.\n */\n viewKey: string;\n testId: string;\n /**\n * The applied window in words (\"Data: 01/10–15/10\"), said on the hint's own\n * line with \"Limpar\" at its end. Set by the pill, whose popover has no other\n * place for them; a panel says them in its own header and leaves this unset.\n */\n summary?: string;\n /**\n * Empties the range: the line's \"Limpar\", shown while `summary` is set. Set\n * only where the line may hold it; the line reserves its 40px only then.\n * `fromKeyboard` is true when it was pressed from the keyboard.\n */\n onClear?: (fromKeyboard: boolean) => void;\n}\n\nexport function DayRangeCalendar({\n fieldLabel,\n value,\n onChange,\n months,\n viewKey,\n testId,\n summary,\n onClear,\n}: DayRangeCalendarProps): React.JSX.Element {\n const copy: DataViewsDayCalendarCopy =\n useDataViewsCopy().filters.dayCalendar ?? (EN_US_DATA_VIEWS_COPY.filters.dayCalendar as DataViewsDayCalendarCopy);\n const range = rangeOf(value);\n const pick = (picked: DateRange) => onChange(rangeFromCalendar(value, picked));\n const waitingForEnd = Boolean(range.start && !range.end);\n\n return (\n <Box sx={ROOT_SX} data-testid={`${testId}-calendar`}>\n <Calendar\n key={viewKey}\n ariaLabel={copy.label(fieldLabel)}\n className={CALENDAR_CLASS}\n selectionMode=\"range\"\n locale={copy.locale}\n labels={copy.caption}\n // Sunday first, as a pt-BR calendar reads (`D S T Q Q S S`) and as the\n // presets' \"Esta semana\" counts.\n firstDayOfWeek={0}\n numberOfMonths={months}\n // Side by side, a day of the next month in this one is the same day\n // twice; one month alone keeps them, muted, as a six-week frame.\n showOutsideDays={months === 1}\n captionLayout={months > 1 ? 'arrows' : 'selectors'}\n defaultMonth={openingMonth(value, months)}\n range={range}\n // The intermediate callback does the work: the other fires only on the\n // tap that CLOSES a period, so the first tap would write nothing.\n onIntermediateRangeChange={pick}\n />\n <HintLine\n text={waitingForEnd ? copy.pickEnd : (summary ?? copy.pickStart)}\n isWindow={!waitingForEnd && summary !== undefined}\n canClear={onClear !== undefined}\n onClear={summary === undefined ? undefined : onClear}\n testId={testId}\n />\n </Box>\n );\n}\n"],"mappings":"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","names":["theme"]}
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-T7OIVPCO.js";
6
6
  import {
7
7
  MoreFilters
8
- } from "./chunk-HS662RLW.js";
8
+ } from "./chunk-RZWU2KYP.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-7NP2JHGM.js";
17
+ } from "./chunk-3WYEENUH.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-XILMDEGZ.js.map
254
+ //# sourceMappingURL=chunk-IEUVP6UV.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
  useSettingGroup
7
7
  } from "./chunk-XJQNSMGA.js";
@@ -44,4 +44,4 @@ SettingToggle.displayName = "SettingToggle";
44
44
  export {
45
45
  SettingToggle
46
46
  };
47
- //# sourceMappingURL=chunk-3IDL7NK7.js.map
47
+ //# sourceMappingURL=chunk-K2VDRODL.js.map
@@ -1,9 +1,9 @@
1
- import {
2
- DataViewsScopeTabs
3
- } from "./chunk-PL2AB5HJ.js";
4
1
  import {
5
2
  useDataViewsLayout
6
3
  } from "./chunk-5CAWRMDX.js";
4
+ import {
5
+ DataViewsScopeTabs
6
+ } from "./chunk-PL2AB5HJ.js";
7
7
 
8
8
  // src/components/data-display/DataViews/data-views-scope-tabs.tsx
9
9
  import { jsx } from "react/jsx-runtime";
@@ -34,4 +34,4 @@ function ScopeTabsSlot({
34
34
  export {
35
35
  ScopeTabsSlot
36
36
  };
37
- //# sourceMappingURL=chunk-K3PMMW23.js.map
37
+ //# sourceMappingURL=chunk-K6VEN5VN.js.map
@@ -3,7 +3,7 @@ import {
3
3
  CONTROL_RESET,
4
4
  NOT_LIVE,
5
5
  SlotIcon
6
- } from "./chunk-24HHUCWB.js";
6
+ } from "./chunk-LDCZPZPD.js";
7
7
  import {
8
8
  rem
9
9
  } from "./chunk-YKCAJ2TN.js";
@@ -129,4 +129,4 @@ export {
129
129
  RAISED_LIFT_COMPACT,
130
130
  raisedLift
131
131
  };
132
- //# sourceMappingURL=chunk-UKUGSU3Y.js.map
132
+ //# sourceMappingURL=chunk-L4V7FZJI.js.map
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-PUFA7FQ7.js";
7
7
  import {
8
8
  Badge
9
- } from "./chunk-N5PVD4J5.js";
9
+ } from "./chunk-6DO672AG.js";
10
10
  import {
11
11
  rem
12
12
  } from "./chunk-YKCAJ2TN.js";
@@ -115,4 +115,4 @@ export {
115
115
  VISUALLY_HIDDEN,
116
116
  useMounted
117
117
  };
118
- //# sourceMappingURL=chunk-24HHUCWB.js.map
118
+ //# sourceMappingURL=chunk-LDCZPZPD.js.map
@@ -1,7 +1,3 @@
1
- import {
2
- actionsOf,
3
- makeTestId
4
- } from "./chunk-MWFSIB6K.js";
5
1
  import {
6
2
  ACTIONS_GAP_UNITS,
7
3
  ACTIONS_MARGIN_TOP_UNITS,
@@ -18,6 +14,10 @@ import {
18
14
  illustrationMaxWidth,
19
15
  illustrationOpacity
20
16
  } from "./chunk-KLPTOVIX.js";
17
+ import {
18
+ actionsOf,
19
+ makeTestId
20
+ } from "./chunk-MWFSIB6K.js";
21
21
  import {
22
22
  EN_US_UI_LABELS
23
23
  } from "./chunk-XOXXG7Q5.js";
@@ -207,4 +207,4 @@ export {
207
207
  EmptyState,
208
208
  EmptyState_default
209
209
  };
210
- //# sourceMappingURL=chunk-42TOCPXB.js.map
210
+ //# sourceMappingURL=chunk-LXIPBHNJ.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CountedIcon
3
- } from "./chunk-24HHUCWB.js";
3
+ } from "./chunk-LDCZPZPD.js";
4
4
  import {
5
5
  rem
6
6
  } from "./chunk-YKCAJ2TN.js";
@@ -133,4 +133,4 @@ function RailCreateMenu({
133
133
  export {
134
134
  RailCreateMenu
135
135
  };
136
- //# sourceMappingURL=chunk-ILJ3FXIC.js.map
136
+ //# sourceMappingURL=chunk-MM3QESLI.js.map
@@ -3,15 +3,15 @@ import {
3
3
  chipStyles,
4
4
  iconWithTestId,
5
5
  makeKeyDownHandler
6
- } from "./chunk-QN7FVZQD.js";
6
+ } from "./chunk-DHAXUVMR.js";
7
+ import {
8
+ chipMuiSize
9
+ } from "./chunk-E5I776YW.js";
7
10
  import {
8
11
  chipRole,
9
12
  isClickable,
10
13
  makeTestId
11
14
  } from "./chunk-BF4FYOAR.js";
12
- import {
13
- chipMuiSize
14
- } from "./chunk-E5I776YW.js";
15
15
 
16
16
  // src/components/data-display/Chip/Chip.tsx
17
17
  import CancelIcon from "@mui/icons-material/Cancel";
@@ -77,4 +77,4 @@ Chip.displayName = "Chip";
77
77
  export {
78
78
  Chip
79
79
  };
80
- //# sourceMappingURL=chunk-PGANINQD.js.map
80
+ //# sourceMappingURL=chunk-NI67M453.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  GridShell
3
- } from "./chunk-JKZPGCN7.js";
3
+ } from "./chunk-BXZMV6QC.js";
4
4
  import {
5
5
  useDataViewsState
6
6
  } from "./chunk-ZCNR4DN5.js";
@@ -27,4 +27,4 @@ function DataViewsGrid(props) {
27
27
  export {
28
28
  DataViewsGrid
29
29
  };
30
- //# sourceMappingURL=chunk-JN2IANXD.js.map
30
+ //# sourceMappingURL=chunk-OCGPOACB.js.map
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-2ORD2FMN.js";
18
18
  import {
19
19
  Alert
20
- } from "./chunk-QVDEGBME.js";
20
+ } from "./chunk-PEAUGQKU.js";
21
21
  import {
22
22
  Button
23
23
  } from "./chunk-YOXYSAUI.js";
@@ -160,4 +160,4 @@ export {
160
160
  SequenceStepBody,
161
161
  SequenceDoneBody
162
162
  };
163
- //# sourceMappingURL=chunk-RDCIST7P.js.map
163
+ //# sourceMappingURL=chunk-OCT5VCLP.js.map
@@ -4,7 +4,8 @@ import {
4
4
  import {
5
5
  actualBarColor,
6
6
  blockToneStyles,
7
- breakHatch
7
+ breakHatch,
8
+ signalInk
8
9
  } from "./chunk-4HK4FVMV.js";
9
10
  import {
10
11
  FIELD_BORDER_WIDTH
@@ -265,6 +266,39 @@ var skeletonNameSx = (theme) => ({
265
266
  borderRadius: rem(theme, DAY_RULER_METRICS.skeletonNameRadius),
266
267
  backgroundColor: theme.palette.action.hover
267
268
  });
269
+ function footerInk(theme, marked, plain) {
270
+ return marked ? signalInk(theme, "warning", theme.palette.background.default) : plain;
271
+ }
272
+ function footerCellSx(marked) {
273
+ return (theme) => ({
274
+ display: "flex",
275
+ alignItems: "center",
276
+ justifyContent: "center",
277
+ fontSize: rem(theme, DAY_RULER_METRICS.coverage.font),
278
+ borderRadius: rem(theme, DAY_RULER_METRICS.coverage.radius),
279
+ color: footerInk(theme, marked, theme.palette.text.primary),
280
+ fontWeight: marked ? 500 : 400,
281
+ // The hairline is always there, transparent when unmarked, so a mark never shifts a count.
282
+ border: `1px solid ${marked ? theme.palette.warning.main : "transparent"}`,
283
+ minWidth: 0,
284
+ overflow: "hidden"
285
+ });
286
+ }
287
+ function footerNoteSx(marked) {
288
+ return (theme) => ({
289
+ fontSize: rem(theme, DAY_RULER_METRICS.meta),
290
+ color: footerInk(theme, marked, theme.palette.text.secondary),
291
+ fontWeight: marked ? 500 : 400,
292
+ ...marked ? { borderLeft: `${rem(theme, 3)} solid ${theme.palette.warning.main}`, paddingLeft: rem(theme, 6) } : {}
293
+ });
294
+ }
295
+ var trendSx = (theme) => ({
296
+ display: "block",
297
+ width: "100%",
298
+ height: rem(theme, DAY_RULER_METRICS.coverage.height + DAY_RULER_METRICS.coverage.height / 2),
299
+ color: theme.palette.primary.main,
300
+ overflow: "visible"
301
+ });
268
302
 
269
303
  export {
270
304
  rootSx,
@@ -286,6 +320,10 @@ export {
286
320
  actualLabelSx,
287
321
  nowSx,
288
322
  skeletonTrackSx,
289
- skeletonNameSx
323
+ skeletonNameSx,
324
+ footerInk,
325
+ footerCellSx,
326
+ footerNoteSx,
327
+ trendSx
290
328
  };
291
- //# sourceMappingURL=chunk-G2PVUPE7.js.map
329
+ //# sourceMappingURL=chunk-OJZLFFG4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DayRuler/DayRuler.styles.ts"],"sourcesContent":["import { alpha, type CSSObject, type SxProps, type Theme } from '@mui/material/styles/index.js';\n\nimport { FIELD_BORDER_WIDTH } from '../../../tokens/field-height.core';\nimport { rem, sxRem } from '../../../tokens/relative';\nimport { actualBarColor, blockToneStyles, breakHatch, signalInk } from '../ScheduleGrid/schedule-tones';\nimport type { ScheduleBlockTone } from '../ScheduleGrid/ScheduleGrid.types';\nimport { DAY_RULER_METRICS as M } from './DayRuler.metrics';\n\n/** The container narrow rows answer to (container queries, never media queries). */\n/**\n * `--dr-actions`: the actions column, 220px when any row has actions and\n * nothing when none does (no empty column at the end of every row).\n */\nexport function rootSx(hasActions: boolean): SxProps<Theme> {\n return (theme: Theme) => ({\n containerType: 'inline-size',\n minWidth: 0,\n width: '100%',\n userSelect: 'none',\n '--dr-actions': hasActions ? rem(theme, M.sideColumn) : '0%',\n });\n}\n\n/** `@container` below which a row stacks (the coverage and axis rows go full width). Bounds are \"from px up\". */\nfunction compact(theme: Theme): string {\n return `@container (width < ${rem(theme, M.compactBelow)})`;\n}\n\n/** `@container` below which the pane is phone-sized: no coverage row, no axis. Bounds are \"from px up\". */\nfunction phone(theme: Theme): string {\n return `@container (width < ${rem(theme, M.phoneBelow)})`;\n}\n\n/** Name · track · actions, the coverage row and the axis row share these columns on a computer. */\nexport const lineSx: SxProps<Theme> = (theme: Theme) => ({\n display: 'grid',\n gridTemplateColumns: `${rem(theme, M.sideColumn)} minmax(0, 1fr) var(--dr-actions)`,\n columnGap: rem(theme, M.gap),\n alignItems: 'center',\n // Stacked: across the full width, like the tracks; the label above the counts.\n [compact(theme)]: {\n gridTemplateColumns: 'minmax(0, 1fr)',\n rowGap: rem(theme, M.coverage.gap),\n '& > span:empty': { display: 'none' },\n },\n [phone(theme)]: { display: 'none' },\n});\n\nexport const coverageLabelSx: SxProps<Theme> = { fontSize: sxRem(M.meta), color: 'text.secondary' };\n\nexport function coverageSx(hours: number): SxProps<Theme> {\n return (theme: Theme) => ({\n display: 'grid',\n gridTemplateColumns: `repeat(${hours}, minmax(0, 1fr))`,\n gap: rem(theme, M.coverage.gap),\n height: rem(theme, M.coverage.height),\n });\n}\n\n/**\n * How strongly a staffed hour is filled: the prototype's tonal success step, deeper with each\n * person on the escala (0.18 + 0.09 per person, at most 0.85). An empty hour has none.\n */\nexport function coverageStrength(count: number): number {\n if (count <= 0) return 0;\n return Math.min(0.85, 0.18 + count * 0.09);\n}\n\nexport function coverageCellSx(count: number): SxProps<Theme> {\n return (theme: Theme) => {\n const strength = coverageStrength(count);\n return {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: rem(theme, M.coverage.font),\n borderRadius: rem(theme, M.coverage.radius),\n color: theme.palette.text.primary,\n // A tonal fill, as the prototype's coverage line draws it — never an outline (FUT-3831). It is\n // the success colour over the page, so a staffed hour is LIGHTER than an empty one in dark mode\n // and plainly green in light, where the soft-signal blend read as the empty grey. The hairline\n // stays transparent so a count never shifts its cell.\n backgroundColor: strength > 0 ? alpha(theme.palette.success.main, strength) : theme.palette.action.hover,\n border: '1px solid transparent',\n minWidth: 0,\n overflow: 'hidden',\n };\n };\n}\n\nexport const axisSx: SxProps<Theme> = (theme: Theme) => ({\n position: 'relative',\n height: rem(theme, M.axis.height),\n fontSize: rem(theme, M.axis.font),\n color: theme.palette.text.secondary,\n mt: 0.5,\n '& > span': { position: 'absolute', transform: 'translateX(-50%)', whiteSpace: 'nowrap' },\n});\n\nexport const groupTitleSx: SxProps<Theme> = {\n fontSize: sxRem(M.groupTitle),\n letterSpacing: '0.05em',\n textTransform: 'uppercase',\n color: 'text.secondary',\n fontWeight: 500,\n pt: 1.5,\n pb: 0.5,\n m: 0,\n};\n\n/**\n * One person's row. A computer: name · track · actions on one line. A narrow\n * ruler (a phone): name and actions on top, the track under them, full width.\n */\nexport const rowSx: SxProps<Theme> = (theme: Theme) => ({\n display: 'grid',\n gridTemplateColumns: `${rem(theme, M.sideColumn)} minmax(0, 1fr) var(--dr-actions)`,\n gridTemplateAreas: '\"who track actions\"',\n columnGap: rem(theme, M.gap),\n alignItems: 'center',\n py: rem(theme, M.rowPaddingY),\n borderBottom: `1px solid ${theme.palette.divider}`,\n [compact(theme)]: {\n gridTemplateColumns: 'minmax(0, 1fr) auto',\n gridTemplateAreas: '\"who actions\" \"track track\"',\n rowGap: theme.spacing(1),\n py: theme.spacing(1.5),\n },\n});\n\nexport const whoSx: SxProps<Theme> = { gridArea: 'who', minWidth: 0 };\n\nexport const actionsSx: SxProps<Theme> = {\n gridArea: 'actions',\n display: 'flex',\n gap: 1,\n alignItems: 'center',\n justifyContent: 'flex-end',\n flexWrap: 'wrap',\n minWidth: 0,\n};\n\n/** A break inside a block: a hatched band across its height, under its text. `span` is in % of the block. */\nexport function breakSx(span: Span): SxProps<Theme> {\n return (theme: Theme) => ({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: `${span.at}%`,\n width: `${span.share}%`,\n background: breakHatch(theme, rem(theme, M.breakStripe.ink), rem(theme, M.breakStripe.ink + M.breakStripe.gap)),\n pointerEvents: 'none',\n // Where the band meets an end of the block it takes the block's rounding:\n // on a phone the block does not clip (its hit area reaches past it).\n ...(span.at <= 0.01 ? { borderTopLeftRadius: 'inherit', borderBottomLeftRadius: 'inherit' } : {}),\n ...(span.at + span.share >= 99.99 ? { borderTopRightRadius: 'inherit', borderBottomRightRadius: 'inherit' } : {}),\n });\n}\n\n/** The hour lines: one every `every` hours of a `hours`-long ruler. */\nfunction hourLines(theme: Theme, hours: number, every: number): string {\n const line = theme.palette.divider;\n const step = `${(100 * every) / hours}%`;\n const hairline = `${FIELD_BORDER_WIDTH}px`;\n return `repeating-linear-gradient(to right, ${line} 0, ${line} ${hairline}, transparent ${hairline}, transparent ${step})`;\n}\n\nexport function trackSx(opts: { hours: number; tickHours: number; interactive: boolean }): SxProps<Theme> {\n return (theme: Theme) => ({\n gridArea: 'track',\n position: 'relative',\n height: rem(theme, M.track.height),\n borderRadius: rem(theme, M.track.radius),\n backgroundColor: theme.palette.action.hover,\n backgroundImage: hourLines(theme, opts.hours, 1),\n cursor: opts.interactive ? 'crosshair' : 'default',\n touchAction: 'auto',\n outline: 'none',\n '&:focus-visible': { boxShadow: `0 0 0 ${rem(theme, M.ring)} ${theme.palette.primary.main}` },\n [compact(theme)]: {\n height: rem(theme, M.track.compactHeight),\n borderRadius: rem(theme, M.track.compactRadius),\n backgroundImage: hourLines(theme, opts.hours, opts.tickHours),\n },\n });\n}\n\n/** Where a bar starts and how long it is, both in % of the track. */\nexport interface Span {\n at: number;\n share: number;\n}\n\nexport function blockSx(tone: ScheduleBlockTone, span: Span, opts: { selected: boolean; movable: boolean }): SxProps<Theme> {\n return (theme: Theme): CSSObject => ({\n ...blockToneStyles(theme, tone, true),\n position: 'absolute',\n left: `${span.at}%`,\n width: `${span.share}%`,\n top: rem(theme, M.block.top),\n height: rem(theme, M.block.height),\n boxSizing: 'border-box',\n borderRadius: rem(theme, M.block.radius),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: `0 ${rem(theme, M.block.paddingX)}`,\n margin: 0,\n font: 'inherit',\n fontSize: rem(theme, M.block.font),\n fontWeight: 500,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n cursor: opts.movable ? 'grab' : 'pointer',\n boxShadow: opts.selected ? `0 0 0 ${rem(theme, M.ring)} ${theme.palette.primary.main}` : 'none',\n '&:focus-visible': { outline: `${rem(theme, M.ring)} solid ${theme.palette.primary.main}`, outlineOffset: rem(theme, M.ringOffset) },\n '& [data-dr-text]': { position: 'relative', overflow: 'hidden', textOverflow: 'ellipsis', minWidth: 0 },\n '& [data-dr-text=\"short\"]': { display: 'none' },\n [compact(theme)]: {\n top: rem(theme, M.block.compactTop),\n height: rem(theme, M.block.compactHeight),\n // A 40px hit area around the 20px bar, the look unchanged: the text cuts\n // itself (its spans ellipsize), so the block need not clip.\n overflow: 'visible',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n left: 0,\n right: 0,\n top: '50%',\n height: rem(theme, M.block.hitArea),\n transform: 'translateY(-50%)',\n },\n '&[data-narrow] [data-dr-text=\"full\"]': { display: 'none' },\n '&[data-narrow] [data-dr-text=\"short\"]': { display: 'inline' },\n },\n });\n}\n\nexport function handleSx(side: 'l' | 'r'): SxProps<Theme> {\n return (theme: Theme) => ({\n position: 'absolute',\n top: 0,\n bottom: 0,\n [side === 'l' ? 'left' : 'right']: 0,\n width: rem(theme, M.handle),\n cursor: 'ew-resize',\n });\n}\n\nexport function actualSx(span: Span): SxProps<Theme> {\n return (theme: Theme) => ({\n position: 'absolute',\n left: `${span.at}%`,\n width: `${span.share}%`,\n top: rem(theme, M.actual.top),\n height: rem(theme, M.actual.height),\n borderRadius: rem(theme, M.actual.radius),\n backgroundColor: actualBarColor(theme),\n pointerEvents: 'none',\n [compact(theme)]: { top: rem(theme, M.actual.compactTop), height: rem(theme, M.actual.compactHeight) },\n });\n}\n\nexport function actualLabelSx(left: number): SxProps<Theme> {\n return (theme: Theme) => ({\n position: 'absolute',\n left: `calc(${left}% + ${rem(theme, M.actualLabel.offset)})`,\n top: rem(theme, M.actualLabel.top),\n fontSize: rem(theme, M.actualLabel.font),\n color: theme.palette.text.secondary,\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n [compact(theme)]: { display: 'none' },\n });\n}\n\nexport function nowSx(left: number): SxProps<Theme> {\n return (theme: Theme) => ({\n position: 'absolute',\n left: `${left}%`,\n top: rem(theme, -M.now.overhang),\n bottom: rem(theme, -M.now.overhang),\n width: rem(theme, M.now.width),\n backgroundColor: theme.palette.primary.main,\n pointerEvents: 'none',\n });\n}\n\nexport const skeletonTrackSx: SxProps<Theme> = (theme: Theme) => ({\n gridArea: 'track',\n height: rem(theme, M.track.height),\n borderRadius: rem(theme, M.track.radius),\n backgroundColor: theme.palette.action.hover,\n});\n\nexport const skeletonNameSx: SxProps<Theme> = (theme: Theme) => ({\n gridArea: 'who',\n height: rem(theme, M.name),\n width: '60%',\n borderRadius: rem(theme, M.skeletonNameRadius),\n backgroundColor: theme.palette.action.hover,\n});\n\n/**\n * A marked footer's words (FUT-3882): the warning ink deepened until it reads\n * at 4.5:1 on the page — `warning.main` is 3.1:1 on white. The outline keeps\n * `warning.main`: a non-text mark needs 3:1.\n */\nexport function footerInk(theme: Theme, marked: boolean, plain: string): string {\n return marked ? signalInk(theme, 'warning', theme.palette.background.default) : plain;\n}\n\n/** A group's count line (FUT-3882): plain counts on the hours' columns, a marked hour outlined in the warning ink. */\nexport function footerCellSx(marked: boolean): SxProps<Theme> {\n return (theme: Theme) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: rem(theme, M.coverage.font),\n borderRadius: rem(theme, M.coverage.radius),\n color: footerInk(theme, marked, theme.palette.text.primary),\n fontWeight: marked ? 500 : 400,\n // The hairline is always there, transparent when unmarked, so a mark never shifts a count.\n border: `1px solid ${marked ? theme.palette.warning.main : 'transparent'}`,\n minWidth: 0,\n overflow: 'hidden',\n });\n}\n\n/**\n * A footer line's sentence; when the host marks it (\"Faltam 2, 20h–22h\"), in\n * the readable warning ink with a warning bar before it — a shape, so colour\n * is never the only signal.\n */\nexport function footerNoteSx(marked: boolean): SxProps<Theme> {\n return (theme: Theme) => ({\n fontSize: rem(theme, M.meta),\n color: footerInk(theme, marked, theme.palette.text.secondary),\n fontWeight: marked ? 500 : 400,\n ...(marked ? { borderLeft: `${rem(theme, 3)} solid ${theme.palette.warning.main}`, paddingLeft: rem(theme, 6) } : {}),\n });\n}\n\n/** A group's trend line: as tall as the coverage row, drawn in the primary colour. */\nexport const trendSx: SxProps<Theme> = (theme: Theme) => ({\n display: 'block',\n width: '100%',\n height: rem(theme, M.coverage.height + M.coverage.height / 2),\n color: theme.palette.primary.main,\n overflow: 'visible',\n});\n"],"mappings":"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","names":[]}
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  SectionNavSheet
3
- } from "./chunk-XCUHGPPZ.js";
3
+ } from "./chunk-DTZOP4ZR.js";
4
4
  import {
5
5
  RaisedActionButton,
6
6
  raisedLift
7
- } from "./chunk-UKUGSU3Y.js";
7
+ } from "./chunk-L4V7FZJI.js";
8
8
  import {
9
9
  Box,
10
10
  CONTROL_RESET,
@@ -15,7 +15,7 @@ import {
15
15
  destinationControl,
16
16
  focusRing,
17
17
  useMounted
18
- } from "./chunk-24HHUCWB.js";
18
+ } from "./chunk-LDCZPZPD.js";
19
19
  import {
20
20
  barSlots,
21
21
  destinationState,
@@ -327,4 +327,4 @@ export {
327
327
  sectionNavSheetOffset,
328
328
  SectionNavBar
329
329
  };
330
- //# sourceMappingURL=chunk-F7LBTMCA.js.map
330
+ //# sourceMappingURL=chunk-P53ANKZV.js.map
@@ -1,22 +1,23 @@
1
1
  import {
2
2
  Axis,
3
3
  Coverage,
4
+ GroupFooter,
4
5
  RulerRow
5
- } from "./chunk-ACM3HHZY.js";
6
+ } from "./chunk-UDBOGSFO.js";
6
7
  import {
7
8
  groupTitleSx,
8
9
  rootSx,
9
10
  rowSx,
10
11
  skeletonNameSx,
11
12
  skeletonTrackSx
12
- } from "./chunk-G2PVUPE7.js";
13
+ } from "./chunk-OJZLFFG4.js";
14
+ import {
15
+ EN_US_DAY_RULER_LABELS
16
+ } from "./chunk-F2ZUUEXC.js";
13
17
  import {
14
18
  handleBlockKey,
15
19
  keyCreateSpan
16
20
  } from "./chunk-Y3F2F36I.js";
17
- import {
18
- EN_US_DAY_RULER_LABELS
19
- } from "./chunk-K3IB7S7Q.js";
20
21
  import {
21
22
  useRulerDrag
22
23
  } from "./chunk-EKSJES5E.js";
@@ -58,6 +59,12 @@ function abilitiesOf(props) {
58
59
  const open = !props.readOnly && !props.loading;
59
60
  return { create: open && Boolean(props.onCreate), move: open && Boolean(props.onMove), resize: open && Boolean(props.onResize) };
60
61
  }
62
+ function FooterOf({ props, group, ctx }) {
63
+ const rows = props.groupFooter?.(group);
64
+ if (!rows || rows.length === 0) return null;
65
+ const marked = props.labels?.footerMarked ?? EN_US_DAY_RULER_LABELS.footerMarked;
66
+ return /* @__PURE__ */ jsx(GroupFooter, { rows, scale: ctx.scale, testId: ctx.testId, marked });
67
+ }
61
68
  function RulerBody({ props, ctx }) {
62
69
  if (props.error) return /* @__PURE__ */ jsx(Fragment, { children: props.error });
63
70
  if (props.loading) {
@@ -69,7 +76,8 @@ function RulerBody({ props, ctx }) {
69
76
  if (props.rows.length === 0) return /* @__PURE__ */ jsx(Fragment, { children: props.empty ?? null });
70
77
  return /* @__PURE__ */ jsx(Fragment, { children: grouped(props.rows).map((group, index) => /* @__PURE__ */ jsxs(Box, { role: "list", "aria-label": group.title, children: [
71
78
  group.title ? /* @__PURE__ */ jsx(Box, { component: "p", sx: groupTitleSx, "aria-hidden": true, children: group.title }) : null,
72
- group.rows.map((row) => /* @__PURE__ */ jsx(RulerRow, { row, ctx }, row.id))
79
+ group.rows.map((row) => /* @__PURE__ */ jsx(RulerRow, { row, ctx }, row.id)),
80
+ /* @__PURE__ */ jsx(FooterOf, { props, group: group.title, ctx })
73
81
  ] }, `${index}-${group.title ?? ""}`)) });
74
82
  }
75
83
  function DayRuler(props) {
@@ -117,4 +125,4 @@ function DayRuler(props) {
117
125
  export {
118
126
  DayRuler
119
127
  };
120
- //# sourceMappingURL=chunk-HMEGQKNQ.js.map
128
+ //# sourceMappingURL=chunk-PCQ5JWLF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DayRuler/DayRuler.tsx"],"sourcesContent":["'use client';\n\nimport Box from '@mui/material/Box/index.js';\nimport type React from 'react';\n\nimport { resolveLabels } from '../../../utils/resolve-labels';\nimport { SR_ONLY_SX } from '../ScheduleGrid/ScheduleGrid.styles';\nimport { useAnnouncer } from '../ScheduleGrid/useAnnouncer';\nimport { handleBlockKey, keyCreateSpan, type RulerAbilities, type RulerScale } from './DayRuler.keyboard';\nimport { EN_US_DAY_RULER_LABELS } from './DayRuler.en-US';\nimport { DAY_RULER_METRICS as M } from './DayRuler.metrics';\nimport { Axis, Coverage, GroupFooter, RulerRow, type RowContext } from './DayRuler.parts';\nimport { groupTitleSx, rootSx, rowSx, skeletonNameSx, skeletonTrackSx } from './DayRuler.styles';\nimport type { DayRulerProps, DayRulerRow } from './DayRuler.types';\nimport { useRulerDrag } from './useRulerDrag';\n\n/** The rows, grouped under a heading each time `row.group` changes. */\nfunction grouped(rows: readonly DayRulerRow[]): { title?: string; rows: DayRulerRow[] }[] {\n const out: { title?: string; rows: DayRulerRow[] }[] = [];\n for (const row of rows) {\n const last = out[out.length - 1];\n if (last && last.title === row.group) last.rows.push(row);\n else out.push({ title: row.group, rows: [row] });\n }\n return out;\n}\n\nfunction scaleOf(props: DayRulerProps): RulerScale {\n return {\n from: props.from ?? 6,\n to: props.to ?? 26,\n snap: (props.snapMinutes ?? 15) / 60,\n createHours: props.createHours ?? 4,\n tickHours: props.tickHours ?? 4,\n };\n}\n\nfunction abilitiesOf(props: DayRulerProps): RulerAbilities {\n const open = !props.readOnly && !props.loading;\n return { create: open && Boolean(props.onCreate), move: open && Boolean(props.onMove), resize: open && Boolean(props.onResize) };\n}\n\n/** A group's lines under its rows, when the host gives any (`groupFooter`). */\nfunction FooterOf({ props, group, ctx }: { props: DayRulerProps; group: string | undefined; ctx: RowContext }): React.JSX.Element | null {\n const rows = props.groupFooter?.(group);\n if (!rows || rows.length === 0) return null;\n const marked = props.labels?.footerMarked ?? EN_US_DAY_RULER_LABELS.footerMarked;\n return <GroupFooter rows={rows} scale={ctx.scale} testId={ctx.testId} marked={marked} />;\n}\n\n/** The groups and their rows — or the skeleton, the host's error, or the host's empty state. */\nfunction RulerBody({ props, ctx }: { props: DayRulerProps; ctx: RowContext }): React.JSX.Element {\n if (props.error) return <>{props.error}</>;\n if (props.loading) {\n return (\n <>\n {Array.from({ length: M.skeletonRows }, (_, index) => (\n <Box key={index} sx={rowSx} aria-hidden data-testid={`${ctx.testId}-loading`}>\n <Box sx={skeletonNameSx} />\n <Box sx={skeletonTrackSx} />\n </Box>\n ))}\n </>\n );\n }\n if (props.rows.length === 0) return <>{props.empty ?? null}</>;\n return (\n <>\n {grouped(props.rows).map((group, index) => (\n <Box key={`${index}-${group.title ?? ''}`} role=\"list\" aria-label={group.title}>\n {group.title ? (\n <Box component=\"p\" sx={groupTitleSx} aria-hidden>\n {group.title}\n </Box>\n ) : null}\n {group.rows.map((row) => (\n <RulerRow key={row.id} row={row} ctx={ctx} />\n ))}\n <FooterOf props={props} group={group.title} ctx={ctx} />\n </Box>\n ))}\n </>\n );\n}\n\n/**\n * One day as an hour ruler per row — who is on the escala when, and who is\n * really on shift (FUT-3825). Drag on an empty stretch to create (a click\n * alone is `createHours`), drag a block to move it, drag its ends to change\n * them; every hour snaps to `snapMinutes`. On a narrow ruler (a phone) each row\n * stacks and the blocks are tap-only: touch scrolls and never drags.\n *\n * The ruler reports gestures; hours, limits and refusals are the host's.\n */\nexport function DayRuler(props: DayRulerProps): React.JSX.Element {\n const { now, onCreate, onMove, onResize } = props;\n const testId = props.dataTestId ?? 'day-ruler';\n const labels = resolveLabels(EN_US_DAY_RULER_LABELS, props.labels);\n const scale = scaleOf(props);\n const can = abilitiesOf(props);\n const dragApi = useRulerDrag(scale, { onCreate, onMove, onResize });\n const { text: announcement, say } = useAnnouncer();\n\n const ctx: RowContext = {\n scale,\n now,\n can,\n drag: dragApi.drag,\n dragApi,\n onBlockClick: props.onBlockClick,\n onKeyCreate: (row) => {\n const [start, end] = keyCreateSpan(scale, now, props.createStart?.(row.id));\n onCreate?.(row.id, start, end);\n },\n onBlockKey: (event, block) => handleBlockKey(event, block, { scale, can, onMove, onResize, labels, say }),\n createLabel: labels.createTrack,\n testId,\n };\n\n return (\n <Box\n sx={rootSx(props.rows.some((row) => row.actions !== undefined && row.actions !== null))}\n data-testid={testId}\n role=\"region\"\n aria-label={props['aria-label']}\n aria-busy={props.loading || undefined}\n aria-description={props.loading ? labels.loading : undefined}\n >\n {props.coverage && props.coverage.length > 0 ? (\n <Coverage coverage={props.coverage} label={props.coverageLabel} scale={scale} testId={testId} />\n ) : null}\n <Axis scale={scale} testId={testId} />\n <RulerBody props={props} ctx={ctx} />\n <Box sx={SR_ONLY_SX} aria-live=\"polite\" role=\"status\" data-testid={`${testId}-live`}>\n {announcement}\n </Box>\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1,3 +1,6 @@
1
+ import {
2
+ resolveIconPlacement
3
+ } from "./chunk-QXUXO22M.js";
1
4
  import {
2
5
  AlertContent
3
6
  } from "./chunk-7HZ36QDH.js";
@@ -14,9 +17,6 @@ import {
14
17
  resolveAnnouncement,
15
18
  testIdFor
16
19
  } from "./chunk-L7VH6IMR.js";
17
- import {
18
- resolveIconPlacement
19
- } from "./chunk-QXUXO22M.js";
20
20
  import {
21
21
  ACTIVE,
22
22
  ALERT_EASING,
@@ -277,4 +277,4 @@ export {
277
277
  Alert,
278
278
  ALERT_ONLY_PROPS
279
279
  };
280
- //# sourceMappingURL=chunk-QVDEGBME.js.map
280
+ //# sourceMappingURL=chunk-PEAUGQKU.js.map
@@ -2,7 +2,7 @@ import {
2
2
  MoreGroup,
3
3
  MoreQuick,
4
4
  fieldClearing
5
- } from "./chunk-MZAYIG2I.js";
5
+ } from "./chunk-VCJ72ODU.js";
6
6
  import {
7
7
  useStillAnchor
8
8
  } from "./chunk-7CUZTWKW.js";
@@ -222,4 +222,4 @@ function MoreFilters({
222
222
  export {
223
223
  MoreFilters
224
224
  };
225
- //# sourceMappingURL=chunk-HS662RLW.js.map
225
+ //# sourceMappingURL=chunk-RZWU2KYP.js.map
@@ -1,10 +1,10 @@
1
+ import {
2
+ MapControlBar
3
+ } from "./chunk-6PU5P7QT.js";
1
4
  import {
2
5
  HeatmapOverlay,
3
6
  RouteOverlay
4
7
  } from "./chunk-ZZ4MMUBY.js";
5
- import {
6
- MapControlBar
7
- } from "./chunk-6PU5P7QT.js";
8
8
  import {
9
9
  resolveMapCopy
10
10
  } from "./chunk-M5Y42AZ4.js";
@@ -59,4 +59,4 @@ var MapLayers = ({ settings, zoom, mapType, search, controls }) => {
59
59
  export {
60
60
  MapLayers
61
61
  };
62
- //# sourceMappingURL=chunk-U2QXQ7D4.js.map
62
+ //# sourceMappingURL=chunk-S2VZUBM7.js.map
@@ -3,14 +3,14 @@ import {
3
3
  } from "./chunk-SALQ65SM.js";
4
4
  import {
5
5
  useSummaryInfo
6
- } from "./chunk-TSEBMVYY.js";
6
+ } from "./chunk-X2GWR75Q.js";
7
7
  import {
8
8
  LearnMore,
9
9
  PendingSpinner,
10
10
  SaveError,
11
11
  SettingHeader,
12
12
  partTestId
13
- } from "./chunk-HC6OZ7QK.js";
13
+ } from "./chunk-3EIRRLCQ.js";
14
14
  import {
15
15
  SETTING_CARD_OPEN_ATTR,
16
16
  actionsStyles,
@@ -170,4 +170,4 @@ SettingCard.displayName = "SettingCard";
170
170
  export {
171
171
  SettingCard
172
172
  };
173
- //# sourceMappingURL=chunk-HOPRZEBM.js.map
173
+ //# sourceMappingURL=chunk-SKIAWOUC.js.map