@12-apps/ui 6.92.2 → 6.93.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 (319) hide show
  1. package/components-catalog.md +10 -3
  2. package/components-guidelines.md +30 -0
  3. package/dist/_internal/components/data-display/Alert/Alert.js +2 -2
  4. package/dist/_internal/components/data-display/AlertDialog/AlertDialog.js +2 -2
  5. package/dist/_internal/components/data-display/AlertDialog/AlertDialog.parts.js +9 -3
  6. package/dist/_internal/components/data-display/Avatar/Avatar.js +3 -3
  7. package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
  8. package/dist/_internal/components/data-display/Badge/Badge.js +2 -2
  9. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +3 -3
  10. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +10 -10
  11. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +7 -7
  12. package/dist/_internal/components/data-display/Carousel/Carousel.js +3 -3
  13. package/dist/_internal/components/data-display/Chart/Chart.js +4 -4
  14. package/dist/_internal/components/data-display/Chart/SpecChart.js +7 -7
  15. package/dist/_internal/components/data-display/Chart/chart-context.js +2 -2
  16. package/dist/_internal/components/data-display/Chart/chart-renderers.js +3 -3
  17. package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
  18. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +34 -34
  19. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +48 -48
  20. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +7 -7
  21. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +3 -3
  22. package/dist/_internal/components/data-display/DataViews/base-list-card-layout.js +3 -3
  23. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +2 -2
  24. package/dist/_internal/components/data-display/DataViews/base-list-card.js +6 -6
  25. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +3 -3
  26. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +6 -6
  27. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +5 -5
  28. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +28 -28
  29. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +10 -10
  30. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +7 -7
  31. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +8 -8
  32. package/dist/_internal/components/data-display/DataViews/data-views-range-bounds.js +3 -3
  33. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +5 -5
  34. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +2 -2
  35. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +7 -7
  36. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +10 -10
  37. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +6 -6
  38. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +2 -2
  39. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +4 -4
  40. package/dist/_internal/components/data-display/DayRuler/DayRuler.footer.js +25 -0
  41. package/dist/_internal/components/data-display/DayRuler/DayRuler.footer.js.map +1 -0
  42. package/dist/_internal/components/data-display/DayRuler/DayRuler.footer.styles.js +23 -0
  43. package/dist/_internal/components/data-display/DayRuler/DayRuler.footer.styles.js.map +1 -0
  44. package/dist/_internal/components/data-display/DayRuler/DayRuler.js +15 -13
  45. package/dist/_internal/components/data-display/DayRuler/DayRuler.keyboard.js +3 -3
  46. package/dist/_internal/components/data-display/DayRuler/DayRuler.metrics.js +1 -1
  47. package/dist/_internal/components/data-display/DayRuler/DayRuler.parts.js +12 -15
  48. package/dist/_internal/components/data-display/DayRuler/DayRuler.styles.js +3 -11
  49. package/dist/_internal/components/data-display/DayRuler/day-ruler-model.js +5 -1
  50. package/dist/_internal/components/data-display/DayRuler/useRulerDrag.js +3 -3
  51. package/dist/_internal/components/data-display/DayRuler/useTextFits.js +4 -3
  52. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +1 -1
  53. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +5 -5
  54. package/dist/_internal/components/data-display/Lightbox/LightboxControls.js +2 -2
  55. package/dist/_internal/components/data-display/Lightbox/LightboxOverlay.js +3 -3
  56. package/dist/_internal/components/data-display/Lightbox/LightboxThumbnails.js +2 -2
  57. package/dist/_internal/components/data-display/RegionMap/RegionMap.js +2 -2
  58. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.js +7 -7
  59. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.parts.js +5 -5
  60. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.styles.js +2 -2
  61. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleNameCell.js +3 -3
  62. package/dist/_internal/components/data-display/ScheduleGrid/schedule-name.styles.js +2 -2
  63. package/dist/_internal/components/data-display/ScheduleGrid/schedule-tones.js +3 -1
  64. package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
  65. package/dist/_internal/components/data-display/Sheet/Sheet.js +3 -3
  66. package/dist/_internal/components/data-display/Table/Table.js +3 -3
  67. package/dist/_internal/components/data-display/index.js +61 -59
  68. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +4 -4
  69. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.parts.js +3 -3
  70. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +5 -5
  71. package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +4 -4
  72. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +3 -3
  73. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.frame.js +48 -0
  74. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.frame.js.map +1 -0
  75. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +6 -5
  76. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.overview.js +4 -4
  77. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.parts.js +3 -3
  78. package/dist/_internal/components/feedback/index.js +15 -14
  79. package/dist/_internal/components/index.js +80 -77
  80. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +4 -4
  81. package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +6 -6
  82. package/dist/_internal/components/navigation/SectionNav/SectionNav.js +9 -9
  83. package/dist/_internal/components/navigation/SectionNav/SectionNav.parts.js +3 -3
  84. package/dist/_internal/components/navigation/SectionNav/SectionNav.primary.js +4 -4
  85. package/dist/_internal/components/navigation/SectionNav/SectionNav.rail.js +5 -5
  86. package/dist/_internal/components/navigation/SectionNav/SectionNav.railCreate.js +4 -4
  87. package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +4 -4
  88. package/dist/_internal/components/navigation/index.js +13 -13
  89. package/dist/_internal/user-avatar/user-avatar.js +4 -4
  90. package/dist/charts.js +16 -16
  91. package/dist/{chunk-LDCZPZPD.js → chunk-24HHUCWB.js} +2 -2
  92. package/dist/{chunk-7ZQ3KQ7J.js → chunk-273OLFJD.js} +16 -6
  93. package/dist/chunk-273OLFJD.js.map +1 -0
  94. package/dist/{chunk-FAUNQ3FS.js → chunk-2M3W6ACW.js} +3 -3
  95. package/dist/{chunk-ALOEOGQV.js → chunk-3TZUZXY5.js} +2 -2
  96. package/dist/{chunk-4HK4FVMV.js → chunk-3UAHDLKH.js} +7 -1
  97. package/dist/{chunk-4HK4FVMV.js.map → chunk-3UAHDLKH.js.map} +1 -1
  98. package/dist/{chunk-DWH4TQXK.js → chunk-4E2RQOSQ.js} +2 -2
  99. package/dist/{chunk-4QR7LM5F.js → chunk-4J62V5OE.js} +7 -7
  100. package/dist/{chunk-OJZLFFG4.js → chunk-5AZEDQXX.js} +59 -70
  101. package/dist/chunk-5AZEDQXX.js.map +1 -0
  102. package/dist/{chunk-CZVAVX5L.js → chunk-6ATXOJVQ.js} +2 -2
  103. package/dist/{chunk-YE7M7URT.js → chunk-6D5AMANO.js} +2 -2
  104. package/dist/{chunk-Q3SILZTQ.js → chunk-6LGKJVOA.js} +2 -2
  105. package/dist/{chunk-ZCNR4DN5.js → chunk-7WE432RQ.js} +12 -12
  106. package/dist/{chunk-EOQ6EKTS.js → chunk-7XSCEHGA.js} +7 -7
  107. package/dist/{chunk-B5STMM3R.js → chunk-ALMGYCHY.js} +2 -2
  108. package/dist/{chunk-5357QUVE.js → chunk-AMLHEKSV.js} +5 -5
  109. package/dist/{chunk-3I5PHWKQ.js → chunk-ASEHJIIV.js} +6 -6
  110. package/dist/{chunk-64UNVW6D.js → chunk-BP3ZKIPE.js} +4 -4
  111. package/dist/{chunk-OCT5VCLP.js → chunk-BQBEN44R.js} +2 -2
  112. package/dist/{chunk-FYUNROLW.js → chunk-BZYLTGOE.js} +2 -2
  113. package/dist/{chunk-TZ44F6W7.js → chunk-CGS2LQE5.js} +2 -2
  114. package/dist/chunk-CPQJFHNZ.js +63 -0
  115. package/dist/chunk-CPQJFHNZ.js.map +1 -0
  116. package/dist/{chunk-PCQ5JWLF.js → chunk-CWXX5JR3.js} +14 -12
  117. package/dist/chunk-CWXX5JR3.js.map +1 -0
  118. package/dist/{chunk-6HXNFNOB.js → chunk-EE6DJPB7.js} +4 -4
  119. package/dist/{chunk-QE4KYG5I.js → chunk-F2UP5ZF4.js} +6 -6
  120. package/dist/{chunk-P53ANKZV.js → chunk-F7LBTMCA.js} +4 -4
  121. package/dist/{chunk-UDBOGSFO.js → chunk-FGZIEZEP.js} +67 -110
  122. package/dist/chunk-FGZIEZEP.js.map +1 -0
  123. package/dist/{chunk-IWSTMVCA.js → chunk-FKS2PNJF.js} +8 -8
  124. package/dist/{chunk-3WYEENUH.js → chunk-FPNVOB52.js} +7 -7
  125. package/dist/{chunk-E73C73UD.js → chunk-FYSS2PYA.js} +3 -3
  126. package/dist/{chunk-N557OEZR.js → chunk-G6NMSBSQ.js} +2 -2
  127. package/dist/{chunk-A5OERY43.js → chunk-GARM5SX6.js} +2 -2
  128. package/dist/{chunk-66VKX6JE.js → chunk-GXGHEOWC.js} +3 -3
  129. package/dist/{chunk-U2SAW6DH.js → chunk-GY53SDVL.js} +4 -4
  130. package/dist/{chunk-JVOEVTCZ.js → chunk-HQCZT6TO.js} +5 -5
  131. package/dist/{chunk-CNUO2BRV.js → chunk-HWZETMO4.js} +3 -3
  132. package/dist/{chunk-MM3QESLI.js → chunk-ILJ3FXIC.js} +2 -2
  133. package/dist/{chunk-FWTVIRZZ.js → chunk-JVQ56E3U.js} +6 -6
  134. package/dist/{chunk-YOLLISEY.js → chunk-JXK53XJW.js} +9 -9
  135. package/dist/{chunk-K6VEN5VN.js → chunk-K3PMMW23.js} +4 -4
  136. package/dist/{chunk-T5RFH2T5.js → chunk-KOGJBAFI.js} +2 -2
  137. package/dist/{chunk-COK65GX2.js → chunk-KURE5R7Z.js} +12 -2
  138. package/dist/chunk-KURE5R7Z.js.map +1 -0
  139. package/dist/{chunk-EKSJES5E.js → chunk-KXDLLS62.js} +3 -3
  140. package/dist/{chunk-LE5JYNR7.js → chunk-L5CAHQIN.js} +23 -2
  141. package/dist/chunk-L5CAHQIN.js.map +1 -0
  142. package/dist/{chunk-DBI6AMNY.js → chunk-LKWXU6NH.js} +4 -4
  143. package/dist/{chunk-56JF5PZK.js → chunk-LYVTJLCF.js} +4 -4
  144. package/dist/{chunk-NXQ6PXLJ.js → chunk-LZ5PGB7U.js} +2 -2
  145. package/dist/chunk-MPVH2GM5.js +83 -0
  146. package/dist/chunk-MPVH2GM5.js.map +1 -0
  147. package/dist/{chunk-5I75WRXT.js → chunk-N3GLX64O.js} +4 -4
  148. package/dist/{chunk-6DO672AG.js → chunk-N5PVD4J5.js} +7 -7
  149. package/dist/{chunk-PEAUGQKU.js → chunk-NQCTANF3.js} +7 -7
  150. package/dist/{chunk-ZYZPSBNQ.js → chunk-OGSTMHT6.js} +22 -7
  151. package/dist/chunk-OGSTMHT6.js.map +1 -0
  152. package/dist/{chunk-W676GY42.js → chunk-P772HCHI.js} +4 -4
  153. package/dist/{chunk-FQNDJITD.js → chunk-RCTHCXS6.js} +2 -2
  154. package/dist/{chunk-VWRXSBT2.js → chunk-SB2SEGR6.js} +3 -3
  155. package/dist/{chunk-Z2WZDVGG.js → chunk-SI5SKX52.js} +2 -2
  156. package/dist/{chunk-RYJ6XGFA.js → chunk-SJAOQGQI.js} +2 -2
  157. package/dist/{chunk-D7R6SRJB.js → chunk-SKQPUAMK.js} +3 -3
  158. package/dist/{chunk-AMIUZRDQ.js → chunk-SNWCT6JN.js} +3 -3
  159. package/dist/{chunk-7W5X3KQ2.js → chunk-SW7JCF4Z.js} +2 -2
  160. package/dist/{chunk-WLLUARTC.js → chunk-T2G4LDU5.js} +2 -2
  161. package/dist/{chunk-BNBWUXT3.js → chunk-TE6HAWDM.js} +2 -2
  162. package/dist/{chunk-JG733RMP.js → chunk-TZC6KIK2.js} +5 -5
  163. package/dist/{chunk-Y3F2F36I.js → chunk-U4Z6GZDW.js} +3 -3
  164. package/dist/{chunk-KQDBOZQE.js → chunk-UIIHUWOV.js} +13 -13
  165. package/dist/{chunk-L4V7FZJI.js → chunk-UKUGSU3Y.js} +2 -2
  166. package/dist/{chunk-D2JQF2WC.js → chunk-UOKXYV3U.js} +5 -5
  167. package/dist/{chunk-K7IDOTSU.js → chunk-VNMD6BA4.js} +2 -2
  168. package/dist/chunk-WG7CAT5D.js +65 -0
  169. package/dist/chunk-WG7CAT5D.js.map +1 -0
  170. package/dist/chunk-WSSD7H5E.js +52 -0
  171. package/dist/chunk-WSSD7H5E.js.map +1 -0
  172. package/dist/{chunk-DTZOP4ZR.js → chunk-XCUHGPPZ.js} +2 -2
  173. package/dist/{chunk-DBPFKGXX.js → chunk-Y7BOP7VZ.js} +3 -3
  174. package/dist/{chunk-BOADHYTA.js → chunk-YNZUYZ2O.js} +2 -2
  175. package/dist/{chunk-XRV4QFEQ.js → chunk-ZBUMGMWP.js} +83 -65
  176. package/dist/chunk-ZBUMGMWP.js.map +1 -0
  177. package/dist/{chunk-XNAI7QGU.js → chunk-ZM6FJCWS.js} +4 -4
  178. package/dist/{chunk-FC7UCFFA.js → chunk-ZPWPA6FR.js} +8 -8
  179. package/dist/data-display/Alert.js +2 -2
  180. package/dist/data-display/AlertDialog.js +2 -2
  181. package/dist/data-display/Avatar.js +3 -3
  182. package/dist/data-display/Badge.js +2 -2
  183. package/dist/data-display/CardKit.js +18 -18
  184. package/dist/data-display/Carousel.js +3 -3
  185. package/dist/data-display/Chart.js +16 -16
  186. package/dist/data-display/DataViews.js +66 -66
  187. package/dist/data-display/DayRuler.js +15 -13
  188. package/dist/data-display/HoverCard.js +1 -1
  189. package/dist/data-display/Lightbox.js +5 -5
  190. package/dist/data-display/RegionMap.js +2 -2
  191. package/dist/data-display/ScheduleGrid.js +9 -9
  192. package/dist/data-display/Sheet.js +3 -3
  193. package/dist/data-display/Table.js +3 -3
  194. package/dist/feedback/ConfirmAction.js +8 -8
  195. package/dist/feedback/NotificationStatusNotice.js +3 -3
  196. package/dist/feedback/SequenceResolver.js +6 -5
  197. package/dist/navigation/AppHeader.js +4 -4
  198. package/dist/navigation/SectionNav.js +9 -9
  199. package/dist/types/components/data-display/AlertDialog/AlertDialog.d.ts.map +1 -1
  200. package/dist/types/components/data-display/AlertDialog/AlertDialog.parts.d.ts +11 -0
  201. package/dist/types/components/data-display/AlertDialog/AlertDialog.parts.d.ts.map +1 -1
  202. package/dist/types/components/data-display/DayRuler/DayRuler.d.ts.map +1 -1
  203. package/dist/types/components/data-display/DayRuler/DayRuler.footer.d.ts +16 -0
  204. package/dist/types/components/data-display/DayRuler/DayRuler.footer.d.ts.map +1 -0
  205. package/dist/types/components/data-display/DayRuler/DayRuler.footer.styles.d.ts +18 -0
  206. package/dist/types/components/data-display/DayRuler/DayRuler.footer.styles.d.ts.map +1 -0
  207. package/dist/types/components/data-display/DayRuler/DayRuler.metrics.d.ts +15 -5
  208. package/dist/types/components/data-display/DayRuler/DayRuler.metrics.d.ts.map +1 -1
  209. package/dist/types/components/data-display/DayRuler/DayRuler.parts.d.ts +13 -14
  210. package/dist/types/components/data-display/DayRuler/DayRuler.parts.d.ts.map +1 -1
  211. package/dist/types/components/data-display/DayRuler/DayRuler.styles.d.ts +20 -23
  212. package/dist/types/components/data-display/DayRuler/DayRuler.styles.d.ts.map +1 -1
  213. package/dist/types/components/data-display/DayRuler/DayRuler.types.d.ts +13 -3
  214. package/dist/types/components/data-display/DayRuler/DayRuler.types.d.ts.map +1 -1
  215. package/dist/types/components/data-display/DayRuler/day-ruler-model.d.ts +27 -0
  216. package/dist/types/components/data-display/DayRuler/day-ruler-model.d.ts.map +1 -1
  217. package/dist/types/components/data-display/DayRuler/useTextFits.d.ts +11 -9
  218. package/dist/types/components/data-display/DayRuler/useTextFits.d.ts.map +1 -1
  219. package/dist/types/components/data-display/ScheduleGrid/schedule-tones.d.ts +8 -0
  220. package/dist/types/components/data-display/ScheduleGrid/schedule-tones.d.ts.map +1 -1
  221. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.d.ts +55 -2
  222. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.d.ts.map +1 -1
  223. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.frame.d.ts +16 -0
  224. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.frame.d.ts.map +1 -0
  225. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.types.d.ts +10 -4
  226. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.types.d.ts.map +1 -1
  227. package/dist/user-avatar.js +4 -4
  228. package/package.json +1 -1
  229. package/src/components/data-display/AlertDialog/AlertDialog.md +25 -1
  230. package/src/components/data-display/AlertDialog/AlertDialog.parts.tsx +28 -0
  231. package/src/components/data-display/AlertDialog/AlertDialog.tsx +34 -5
  232. package/src/components/data-display/DayRuler/DayRuler.footer.styles.ts +54 -0
  233. package/src/components/data-display/DayRuler/DayRuler.footer.tsx +123 -0
  234. package/src/components/data-display/DayRuler/DayRuler.md +37 -13
  235. package/src/components/data-display/DayRuler/DayRuler.metrics.ts +15 -5
  236. package/src/components/data-display/DayRuler/DayRuler.parts.tsx +86 -155
  237. package/src/components/data-display/DayRuler/DayRuler.styles.ts +89 -83
  238. package/src/components/data-display/DayRuler/DayRuler.tsx +3 -2
  239. package/src/components/data-display/DayRuler/DayRuler.types.ts +13 -3
  240. package/src/components/data-display/DayRuler/day-ruler-model.ts +45 -0
  241. package/src/components/data-display/DayRuler/useTextFits.ts +68 -25
  242. package/src/components/data-display/ScheduleGrid/schedule-tones.ts +13 -0
  243. package/src/components/feedback/ConfirmAction/ConfirmAction.md +10 -0
  244. package/src/components/feedback/SequenceResolver/SequenceResolver.frame.tsx +71 -0
  245. package/src/components/feedback/SequenceResolver/SequenceResolver.md +2 -2
  246. package/src/components/feedback/SequenceResolver/SequenceResolver.tsx +122 -61
  247. package/src/components/feedback/SequenceResolver/SequenceResolver.types.ts +10 -4
  248. package/dist/chunk-7ZQ3KQ7J.js.map +0 -1
  249. package/dist/chunk-COK65GX2.js.map +0 -1
  250. package/dist/chunk-LE5JYNR7.js.map +0 -1
  251. package/dist/chunk-OJZLFFG4.js.map +0 -1
  252. package/dist/chunk-PCQ5JWLF.js.map +0 -1
  253. package/dist/chunk-UDBOGSFO.js.map +0 -1
  254. package/dist/chunk-XRV4QFEQ.js.map +0 -1
  255. package/dist/chunk-YMYJO2CZ.js +0 -32
  256. package/dist/chunk-YMYJO2CZ.js.map +0 -1
  257. package/dist/chunk-ZYZPSBNQ.js.map +0 -1
  258. /package/dist/{chunk-LDCZPZPD.js.map → chunk-24HHUCWB.js.map} +0 -0
  259. /package/dist/{chunk-FAUNQ3FS.js.map → chunk-2M3W6ACW.js.map} +0 -0
  260. /package/dist/{chunk-ALOEOGQV.js.map → chunk-3TZUZXY5.js.map} +0 -0
  261. /package/dist/{chunk-DWH4TQXK.js.map → chunk-4E2RQOSQ.js.map} +0 -0
  262. /package/dist/{chunk-4QR7LM5F.js.map → chunk-4J62V5OE.js.map} +0 -0
  263. /package/dist/{chunk-CZVAVX5L.js.map → chunk-6ATXOJVQ.js.map} +0 -0
  264. /package/dist/{chunk-YE7M7URT.js.map → chunk-6D5AMANO.js.map} +0 -0
  265. /package/dist/{chunk-Q3SILZTQ.js.map → chunk-6LGKJVOA.js.map} +0 -0
  266. /package/dist/{chunk-ZCNR4DN5.js.map → chunk-7WE432RQ.js.map} +0 -0
  267. /package/dist/{chunk-EOQ6EKTS.js.map → chunk-7XSCEHGA.js.map} +0 -0
  268. /package/dist/{chunk-B5STMM3R.js.map → chunk-ALMGYCHY.js.map} +0 -0
  269. /package/dist/{chunk-5357QUVE.js.map → chunk-AMLHEKSV.js.map} +0 -0
  270. /package/dist/{chunk-3I5PHWKQ.js.map → chunk-ASEHJIIV.js.map} +0 -0
  271. /package/dist/{chunk-64UNVW6D.js.map → chunk-BP3ZKIPE.js.map} +0 -0
  272. /package/dist/{chunk-OCT5VCLP.js.map → chunk-BQBEN44R.js.map} +0 -0
  273. /package/dist/{chunk-FYUNROLW.js.map → chunk-BZYLTGOE.js.map} +0 -0
  274. /package/dist/{chunk-TZ44F6W7.js.map → chunk-CGS2LQE5.js.map} +0 -0
  275. /package/dist/{chunk-6HXNFNOB.js.map → chunk-EE6DJPB7.js.map} +0 -0
  276. /package/dist/{chunk-QE4KYG5I.js.map → chunk-F2UP5ZF4.js.map} +0 -0
  277. /package/dist/{chunk-P53ANKZV.js.map → chunk-F7LBTMCA.js.map} +0 -0
  278. /package/dist/{chunk-IWSTMVCA.js.map → chunk-FKS2PNJF.js.map} +0 -0
  279. /package/dist/{chunk-3WYEENUH.js.map → chunk-FPNVOB52.js.map} +0 -0
  280. /package/dist/{chunk-E73C73UD.js.map → chunk-FYSS2PYA.js.map} +0 -0
  281. /package/dist/{chunk-N557OEZR.js.map → chunk-G6NMSBSQ.js.map} +0 -0
  282. /package/dist/{chunk-A5OERY43.js.map → chunk-GARM5SX6.js.map} +0 -0
  283. /package/dist/{chunk-66VKX6JE.js.map → chunk-GXGHEOWC.js.map} +0 -0
  284. /package/dist/{chunk-U2SAW6DH.js.map → chunk-GY53SDVL.js.map} +0 -0
  285. /package/dist/{chunk-JVOEVTCZ.js.map → chunk-HQCZT6TO.js.map} +0 -0
  286. /package/dist/{chunk-CNUO2BRV.js.map → chunk-HWZETMO4.js.map} +0 -0
  287. /package/dist/{chunk-MM3QESLI.js.map → chunk-ILJ3FXIC.js.map} +0 -0
  288. /package/dist/{chunk-FWTVIRZZ.js.map → chunk-JVQ56E3U.js.map} +0 -0
  289. /package/dist/{chunk-YOLLISEY.js.map → chunk-JXK53XJW.js.map} +0 -0
  290. /package/dist/{chunk-K6VEN5VN.js.map → chunk-K3PMMW23.js.map} +0 -0
  291. /package/dist/{chunk-T5RFH2T5.js.map → chunk-KOGJBAFI.js.map} +0 -0
  292. /package/dist/{chunk-EKSJES5E.js.map → chunk-KXDLLS62.js.map} +0 -0
  293. /package/dist/{chunk-DBI6AMNY.js.map → chunk-LKWXU6NH.js.map} +0 -0
  294. /package/dist/{chunk-56JF5PZK.js.map → chunk-LYVTJLCF.js.map} +0 -0
  295. /package/dist/{chunk-NXQ6PXLJ.js.map → chunk-LZ5PGB7U.js.map} +0 -0
  296. /package/dist/{chunk-5I75WRXT.js.map → chunk-N3GLX64O.js.map} +0 -0
  297. /package/dist/{chunk-6DO672AG.js.map → chunk-N5PVD4J5.js.map} +0 -0
  298. /package/dist/{chunk-PEAUGQKU.js.map → chunk-NQCTANF3.js.map} +0 -0
  299. /package/dist/{chunk-W676GY42.js.map → chunk-P772HCHI.js.map} +0 -0
  300. /package/dist/{chunk-FQNDJITD.js.map → chunk-RCTHCXS6.js.map} +0 -0
  301. /package/dist/{chunk-VWRXSBT2.js.map → chunk-SB2SEGR6.js.map} +0 -0
  302. /package/dist/{chunk-Z2WZDVGG.js.map → chunk-SI5SKX52.js.map} +0 -0
  303. /package/dist/{chunk-RYJ6XGFA.js.map → chunk-SJAOQGQI.js.map} +0 -0
  304. /package/dist/{chunk-D7R6SRJB.js.map → chunk-SKQPUAMK.js.map} +0 -0
  305. /package/dist/{chunk-AMIUZRDQ.js.map → chunk-SNWCT6JN.js.map} +0 -0
  306. /package/dist/{chunk-7W5X3KQ2.js.map → chunk-SW7JCF4Z.js.map} +0 -0
  307. /package/dist/{chunk-WLLUARTC.js.map → chunk-T2G4LDU5.js.map} +0 -0
  308. /package/dist/{chunk-BNBWUXT3.js.map → chunk-TE6HAWDM.js.map} +0 -0
  309. /package/dist/{chunk-JG733RMP.js.map → chunk-TZC6KIK2.js.map} +0 -0
  310. /package/dist/{chunk-Y3F2F36I.js.map → chunk-U4Z6GZDW.js.map} +0 -0
  311. /package/dist/{chunk-KQDBOZQE.js.map → chunk-UIIHUWOV.js.map} +0 -0
  312. /package/dist/{chunk-L4V7FZJI.js.map → chunk-UKUGSU3Y.js.map} +0 -0
  313. /package/dist/{chunk-D2JQF2WC.js.map → chunk-UOKXYV3U.js.map} +0 -0
  314. /package/dist/{chunk-K7IDOTSU.js.map → chunk-VNMD6BA4.js.map} +0 -0
  315. /package/dist/{chunk-DTZOP4ZR.js.map → chunk-XCUHGPPZ.js.map} +0 -0
  316. /package/dist/{chunk-DBPFKGXX.js.map → chunk-Y7BOP7VZ.js.map} +0 -0
  317. /package/dist/{chunk-BOADHYTA.js.map → chunk-YNZUYZ2O.js.map} +0 -0
  318. /package/dist/{chunk-XNAI7QGU.js.map → chunk-ZM6FJCWS.js.map} +0 -0
  319. /package/dist/{chunk-FC7UCFFA.js.map → chunk-ZPWPA6FR.js.map} +0 -0
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-PUFA7FQ7.js";
7
7
  import {
8
8
  Badge
9
- } from "./chunk-6DO672AG.js";
9
+ } from "./chunk-N5PVD4J5.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-LDCZPZPD.js.map
118
+ //# sourceMappingURL=chunk-24HHUCWB.js.map
@@ -1,13 +1,17 @@
1
1
  // src/components/data-display/DayRuler/DayRuler.metrics.ts
2
2
  var DAY_RULER_METRICS = {
3
- /** The name and the actions columns on a computer. */
3
+ /** The name column on a computer; a row's actions sit in it, under the name (FUT-3831). */
4
4
  sideColumn: 220,
5
5
  gap: 16,
6
+ /** Between the name (with its meta and chips) and the row's actions under it, on a computer. */
7
+ actionsTop: 8,
6
8
  /**
7
9
  * Below this container width a row stacks: name and actions on top, the
8
- * track under them. Two 220px side columns, their gaps and a track of at
9
- * least 320px (where the hour labels every 4 hours do not collide): 792,
10
- * rounded up.
10
+ * track under them. Measured when the actions had a 220px column of their
11
+ * own (two 220px side columns, their gaps and a track of at least 320px,
12
+ * where the hour labels every 4 hours do not collide: 792, rounded up); kept
13
+ * when they moved under the name (FUT-3831) so the bound every host was
14
+ * checked at did not move.
11
15
  */
12
16
  compactBelow: 800,
13
17
  /**
@@ -18,6 +22,12 @@ var DAY_RULER_METRICS = {
18
22
  phoneBelow: 600,
19
23
  rowPaddingY: 8,
20
24
  track: { height: 40, compactHeight: 30, radius: 8, compactRadius: 6 },
25
+ /**
26
+ * `hitArea`: on a narrow ruler the invisible hit band round a bar is this
27
+ * tall and at least this wide, centred on the bar and cut at the midpoint to
28
+ * a neighbour (FUT-3831). `font` is the floor: a text that does not fit at
29
+ * it is not drawn, never drawn smaller.
30
+ */
21
31
  block: { top: 4, height: 24, compactTop: 3, compactHeight: 20, radius: 6, paddingX: 6, font: 12, hitArea: 40 },
22
32
  /** The end handles' hit area. */
23
33
  handle: 10,
@@ -34,7 +44,7 @@ var DAY_RULER_METRICS = {
34
44
  ringOffset: 1,
35
45
  /** The loading row's name bar. */
36
46
  skeletonNameRadius: 4,
37
- /** Where a block's text cannot be measured, one shorter than this share of the ruler says only its start on a narrow ruler. */
47
+ /** Where a block's text cannot be measured, one shorter than this share of the ruler says only its start. */
38
48
  narrowShare: 0.3,
39
49
  /** The shortest block a resize leaves, in hours. */
40
50
  minHours: 0.5,
@@ -46,4 +56,4 @@ var DAY_RULER_METRICS = {
46
56
  export {
47
57
  DAY_RULER_METRICS
48
58
  };
49
- //# sourceMappingURL=chunk-7ZQ3KQ7J.js.map
59
+ //# sourceMappingURL=chunk-273OLFJD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DayRuler/DayRuler.metrics.ts"],"sourcesContent":["/**\n * THE DAY RULER'S NUMBERS — the approved prototype's (FUT-3823, frames d02 at\n * 1280 and the phone rows), in px. The web reads them through `rem`/`sxRem`.\n */\nexport const DAY_RULER_METRICS = {\n /** The name column on a computer; a row's actions sit in it, under the name (FUT-3831). */\n sideColumn: 220,\n gap: 16,\n /** Between the name (with its meta and chips) and the row's actions under it, on a computer. */\n actionsTop: 8,\n /**\n * Below this container width a row stacks: name and actions on top, the\n * track under them. Measured when the actions had a 220px column of their\n * own (two 220px side columns, their gaps and a track of at least 320px,\n * where the hour labels every 4 hours do not collide: 792, rounded up); kept\n * when they moved under the name (FUT-3831) so the bound every host was\n * checked at did not move.\n */\n compactBelow: 800,\n /**\n * Below this container width the pane is phone-sized: no coverage row and\n * no hour axis. Between it and `compactBelow` the rows stack and the two\n * lines are drawn across the full width, like the tracks.\n */\n phoneBelow: 600,\n rowPaddingY: 8,\n track: { height: 40, compactHeight: 30, radius: 8, compactRadius: 6 },\n /**\n * `hitArea`: on a narrow ruler the invisible hit band round a bar is this\n * tall and at least this wide, centred on the bar and cut at the midpoint to\n * a neighbour (FUT-3831). `font` is the floor: a text that does not fit at\n * it is not drawn, never drawn smaller.\n */\n block: { top: 4, height: 24, compactTop: 3, compactHeight: 20, radius: 6, paddingX: 6, font: 12, hitArea: 40 },\n /** The end handles' hit area. */\n handle: 10,\n actual: { top: 31, height: 6, compactTop: 24, compactHeight: 4, radius: 3 },\n actualLabel: { top: 8, offset: 6, font: 12 },\n now: { width: 2, overhang: 2 },\n coverage: { height: 26, gap: 2, radius: 4, font: 12 },\n axis: { height: 18, font: 12 },\n name: 15,\n meta: 13,\n groupTitle: 12,\n ring: 2,\n /** How far a block's focus ring stands off it. */\n ringOffset: 1,\n /** The loading row's name bar. */\n skeletonNameRadius: 4,\n /** Where a block's text cannot be measured, one shorter than this share of the ruler says only its start. */\n narrowShare: 0.3,\n /** The shortest block a resize leaves, in hours. */\n minHours: 0.5,\n skeletonRows: 4,\n /** The hatch of a break inside a block: stripe width. */\n breakStripe: { ink: 2, gap: 3 },\n} as const;\n"],"mappings":";AAIO,IAAM,oBAAoB;AAAA;AAAA,EAE/B,YAAY;AAAA,EACZ,KAAK;AAAA;AAAA,EAEL,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASZ,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMd,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,OAAO,EAAE,QAAQ,IAAI,eAAe,IAAI,QAAQ,GAAG,eAAe,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOpE,OAAO,EAAE,KAAK,GAAG,QAAQ,IAAI,YAAY,GAAG,eAAe,IAAI,QAAQ,GAAG,UAAU,GAAG,MAAM,IAAI,SAAS,GAAG;AAAA;AAAA,EAE7G,QAAQ;AAAA,EACR,QAAQ,EAAE,KAAK,IAAI,QAAQ,GAAG,YAAY,IAAI,eAAe,GAAG,QAAQ,EAAE;AAAA,EAC1E,aAAa,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG;AAAA,EAC3C,KAAK,EAAE,OAAO,GAAG,UAAU,EAAE;AAAA,EAC7B,UAAU,EAAE,QAAQ,IAAI,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG;AAAA,EACpD,MAAM,EAAE,QAAQ,IAAI,MAAM,GAAG;AAAA,EAC7B,MAAM;AAAA,EACN,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,MAAM;AAAA;AAAA,EAEN,YAAY;AAAA;AAAA,EAEZ,oBAAoB;AAAA;AAAA,EAEpB,aAAa;AAAA;AAAA,EAEb,UAAU;AAAA,EACV,cAAc;AAAA;AAAA,EAEd,aAAa,EAAE,KAAK,GAAG,KAAK,EAAE;AAChC;","names":[]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  SectionNavRail
3
- } from "./chunk-AMIUZRDQ.js";
3
+ } from "./chunk-SNWCT6JN.js";
4
4
  import {
5
5
  SectionNavBar
6
- } from "./chunk-P53ANKZV.js";
6
+ } from "./chunk-F7LBTMCA.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-FAUNQ3FS.js.map
58
+ //# sourceMappingURL=chunk-2M3W6ACW.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ConfirmActionDialog
3
- } from "./chunk-7W5X3KQ2.js";
3
+ } from "./chunk-SW7JCF4Z.js";
4
4
  import {
5
5
  useConfirmAction
6
6
  } from "./chunk-EMYESBIT.js";
@@ -40,4 +40,4 @@ function withConfirmation(Wrapped, defaults) {
40
40
  export {
41
41
  withConfirmation
42
42
  };
43
- //# sourceMappingURL=chunk-ALOEOGQV.js.map
43
+ //# sourceMappingURL=chunk-3TZUZXY5.js.map
@@ -85,6 +85,11 @@ function blockToneStyles(theme, tone, dashedPlan = false) {
85
85
  };
86
86
  }
87
87
  }
88
+ function dashedLabelGround(theme, tone) {
89
+ if (tone === "away" || tone === "uncovered") return cellGround(theme);
90
+ if (tone === "plan") return flatten(cellGround(theme), theme.palette.action.hover);
91
+ return void 0;
92
+ }
88
93
  function breakHatch(theme, stripe, period) {
89
94
  const ink = theme.palette.action.disabled;
90
95
  const ground = theme.palette.background.default;
@@ -100,7 +105,8 @@ export {
100
105
  readableInk,
101
106
  signalInk,
102
107
  blockToneStyles,
108
+ dashedLabelGround,
103
109
  breakHatch,
104
110
  actualBarColor
105
111
  };
106
- //# sourceMappingURL=chunk-4HK4FVMV.js.map
112
+ //# sourceMappingURL=chunk-3UAHDLKH.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/data-display/ScheduleGrid/schedule-tones.ts"],"sourcesContent":["import type { Theme } from '@mui/material/styles/index.js';\nimport type { CSSObject } from '@mui/material/styles/index.js';\n\nimport { blend, darken, decomposeColor, getContrastRatio, getLuminance, lighten } from '../../../tokens/color';\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { absoluteInk } from '../../../tokens/ink';\nimport { softSignal, surfaces } from '../../../tokens/surfaces';\nimport type { ScheduleBlockTone } from './ScheduleGrid.types';\n\n/** WCAG AA for a block's text (12px, not large): every tone's ink clears it on its ground. */\nexport const TONE_TEXT_CONTRAST = 4.5;\n\n/** A translucent colour as it shows over an opaque `ground`. */\nfunction flatten(ground: string, overlay: string): string {\n const { values, type } = decomposeColor(overlay);\n const opacity = type.endsWith('a') ? (values[3] ?? 1) : 1;\n return blend(ground, overlay, opacity);\n}\n\n/** The ground a block with no fill of its own sits on: a cell (or a track) over the page. */\nexport function cellGround(theme: Theme): string {\n return flatten(theme.palette.background.default, theme.palette.action.hover);\n}\n\n/** The first ink that reads at {@link TONE_TEXT_CONTRAST} on `ground`; none does, the one that reads best. */\nexport function readableInk(ground: string, candidates: readonly string[]): string {\n let best = candidates[0] ?? '';\n let bestRatio = -1;\n for (const ink of candidates) {\n const ratio = getContrastRatio(flatten(ground, ink), ground);\n if (ratio >= TONE_TEXT_CONTRAST) return ink;\n if (ratio > bestRatio) [best, bestRatio] = [ink, ratio];\n }\n return best;\n}\n\n/** `color`, then ten steps of it towards whichever end reads on `ground` — the hue kept as long as it can be. */\nfunction deepening(color: string, ground: string): string[] {\n const toward = getLuminance(ground) > LUMINANCE_MIDPOINT ? darken : lighten;\n return Array.from({ length: 11 }, (_, step) => (step === 0 ? color : toward(color, step / 10)));\n}\n\n/** Where black and white read equally well on a ground (WCAG luminance). */\nconst LUMINANCE_MIDPOINT = 0.179;\n\n/**\n * The signal's readable ink on a ground that is not its own colour: its deep\n * step on a light ground, its light step on a dark one, deepened further until\n * it reads at 4.5:1 (MUI's `warning.dark` is 3.6:1 on a light cell).\n */\nexport function signalInk(theme: Theme, signal: 'warning' | 'success', ground: string): string {\n const step = theme.palette.mode === 'dark' ? theme.palette[signal].light : theme.palette[signal].dark;\n return readableInk(ground, deepening(step, ground));\n}\n\n/**\n * The ink on a solid signal fill: the palette's own `contrastText` when it\n * reads (a host's brand decision), else the page's own text, else black or\n * white — MUI's default `warning` has white at 3.1:1 on its orange; the\n * prototype writes it in the dark ink.\n */\nfunction inkOnFill(theme: Theme, fill: string, incumbent: string): string {\n const { black, white } = absoluteInk(theme);\n return readableInk(fill, [incumbent, theme.palette.text.primary, black, white]);\n}\n\n/**\n * How a block of each tone is drawn — in the week grid and on the day ruler\n * alike, so one tone reads the same in both views. `dashedPlan` is the ruler's\n * escala block (a dashed outline over a faint ground); the grid's plan block is\n * a raised chip. Never colour alone: every tone also carries its note text.\n */\nexport function blockToneStyles(theme: Theme, tone: ScheduleBlockTone, dashedPlan = false): CSSObject {\n const hairline = '1px solid';\n switch (tone) {\n case 'late':\n return {\n backgroundColor: theme.palette.warning.main,\n color: inkOnFill(theme, theme.palette.warning.main, theme.palette.warning.contrastText),\n border: `${hairline} ${theme.palette.warning.main}`,\n };\n case 'away':\n case 'uncovered':\n return {\n backgroundColor: 'transparent',\n color: signalInk(theme, 'warning', cellGround(theme)),\n border: `1px dashed ${theme.palette.warning.main}`,\n };\n case 'onduty':\n return {\n backgroundColor: softSignal(theme, 'success'),\n color: theme.palette.text.primary,\n border: `${hairline} ${theme.palette.success.main}`,\n };\n case 'plan':\n default:\n return dashedPlan\n ? {\n backgroundColor: theme.palette.action.hover,\n color: theme.palette.text.primary,\n border: `1px dashed ${theme.palette.text.secondary}`,\n }\n : {\n backgroundColor: surfaces(theme).raised,\n color: theme.palette.text.primary,\n border: `${hairline} ${fieldEdge(theme, surfaces(theme).raised)}`,\n };\n }\n}\n\n/**\n * A break inside a block (a meal break): the page's own ground with diagonal\n * stripes of the disabled action colour, opaque, so the block reads as CUT there in any\n * tone, light or dark. `stripe` / `period` are CSS lengths (a stripe and the\n * stripe plus its gap).\n */\nexport function breakHatch(theme: Theme, stripe: string, period: string): string {\n const ink = theme.palette.action.disabled;\n const ground = theme.palette.background.default;\n return `repeating-linear-gradient(135deg, ${ink} 0, ${ink} ${stripe}, ${ground} ${stripe}, ${ground} ${period}), ${ground}`;\n}\n\n/** The thin bar under a ruler row that says the shift is really running. */\nexport function actualBarColor(theme: Theme): string {\n return theme.palette.success.main;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/components/data-display/ScheduleGrid/schedule-tones.ts"],"sourcesContent":["import type { Theme } from '@mui/material/styles/index.js';\nimport type { CSSObject } from '@mui/material/styles/index.js';\n\nimport { blend, darken, decomposeColor, getContrastRatio, getLuminance, lighten } from '../../../tokens/color';\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { absoluteInk } from '../../../tokens/ink';\nimport { softSignal, surfaces } from '../../../tokens/surfaces';\nimport type { ScheduleBlockTone } from './ScheduleGrid.types';\n\n/** WCAG AA for a block's text (12px, not large): every tone's ink clears it on its ground. */\nexport const TONE_TEXT_CONTRAST = 4.5;\n\n/** A translucent colour as it shows over an opaque `ground`. */\nfunction flatten(ground: string, overlay: string): string {\n const { values, type } = decomposeColor(overlay);\n const opacity = type.endsWith('a') ? (values[3] ?? 1) : 1;\n return blend(ground, overlay, opacity);\n}\n\n/** The ground a block with no fill of its own sits on: a cell (or a track) over the page. */\nexport function cellGround(theme: Theme): string {\n return flatten(theme.palette.background.default, theme.palette.action.hover);\n}\n\n/** The first ink that reads at {@link TONE_TEXT_CONTRAST} on `ground`; none does, the one that reads best. */\nexport function readableInk(ground: string, candidates: readonly string[]): string {\n let best = candidates[0] ?? '';\n let bestRatio = -1;\n for (const ink of candidates) {\n const ratio = getContrastRatio(flatten(ground, ink), ground);\n if (ratio >= TONE_TEXT_CONTRAST) return ink;\n if (ratio > bestRatio) [best, bestRatio] = [ink, ratio];\n }\n return best;\n}\n\n/** `color`, then ten steps of it towards whichever end reads on `ground` — the hue kept as long as it can be. */\nfunction deepening(color: string, ground: string): string[] {\n const toward = getLuminance(ground) > LUMINANCE_MIDPOINT ? darken : lighten;\n return Array.from({ length: 11 }, (_, step) => (step === 0 ? color : toward(color, step / 10)));\n}\n\n/** Where black and white read equally well on a ground (WCAG luminance). */\nconst LUMINANCE_MIDPOINT = 0.179;\n\n/**\n * The signal's readable ink on a ground that is not its own colour: its deep\n * step on a light ground, its light step on a dark one, deepened further until\n * it reads at 4.5:1 (MUI's `warning.dark` is 3.6:1 on a light cell).\n */\nexport function signalInk(theme: Theme, signal: 'warning' | 'success', ground: string): string {\n const step = theme.palette.mode === 'dark' ? theme.palette[signal].light : theme.palette[signal].dark;\n return readableInk(ground, deepening(step, ground));\n}\n\n/**\n * The ink on a solid signal fill: the palette's own `contrastText` when it\n * reads (a host's brand decision), else the page's own text, else black or\n * white — MUI's default `warning` has white at 3.1:1 on its orange; the\n * prototype writes it in the dark ink.\n */\nfunction inkOnFill(theme: Theme, fill: string, incumbent: string): string {\n const { black, white } = absoluteInk(theme);\n return readableInk(fill, [incumbent, theme.palette.text.primary, black, white]);\n}\n\n/**\n * How a block of each tone is drawn — in the week grid and on the day ruler\n * alike, so one tone reads the same in both views. `dashedPlan` is the ruler's\n * escala block (a dashed outline over a faint ground); the grid's plan block is\n * a raised chip. Never colour alone: every tone also carries its note text.\n */\nexport function blockToneStyles(theme: Theme, tone: ScheduleBlockTone, dashedPlan = false): CSSObject {\n const hairline = '1px solid';\n switch (tone) {\n case 'late':\n return {\n backgroundColor: theme.palette.warning.main,\n color: inkOnFill(theme, theme.palette.warning.main, theme.palette.warning.contrastText),\n border: `${hairline} ${theme.palette.warning.main}`,\n };\n case 'away':\n case 'uncovered':\n return {\n backgroundColor: 'transparent',\n color: signalInk(theme, 'warning', cellGround(theme)),\n border: `1px dashed ${theme.palette.warning.main}`,\n };\n case 'onduty':\n return {\n backgroundColor: softSignal(theme, 'success'),\n color: theme.palette.text.primary,\n border: `${hairline} ${theme.palette.success.main}`,\n };\n case 'plan':\n default:\n return dashedPlan\n ? {\n backgroundColor: theme.palette.action.hover,\n color: theme.palette.text.primary,\n border: `1px dashed ${theme.palette.text.secondary}`,\n }\n : {\n backgroundColor: surfaces(theme).raised,\n color: theme.palette.text.primary,\n border: `${hairline} ${fieldEdge(theme, surfaces(theme).raised)}`,\n };\n }\n}\n\n/**\n * An OPAQUE ground for a ruler block's label where the block's own fill is\n * not opaque (the dashed plan's faint wash, the away / uncovered outline): the\n * fill flattened over the cell's ground, so the label reads the same and\n * whatever the track draws under the block — the \"agora\" line — never shows\n * through the text (FUT-3831). An opaque fill needs none: `undefined`.\n */\nexport function dashedLabelGround(theme: Theme, tone: ScheduleBlockTone): string | undefined {\n if (tone === 'away' || tone === 'uncovered') return cellGround(theme);\n if (tone === 'plan') return flatten(cellGround(theme), theme.palette.action.hover);\n return undefined;\n}\n\n/**\n * A break inside a block (a meal break): the page's own ground with diagonal\n * stripes of the disabled action colour, opaque, so the block reads as CUT there in any\n * tone, light or dark. `stripe` / `period` are CSS lengths (a stripe and the\n * stripe plus its gap).\n */\nexport function breakHatch(theme: Theme, stripe: string, period: string): string {\n const ink = theme.palette.action.disabled;\n const ground = theme.palette.background.default;\n return `repeating-linear-gradient(135deg, ${ink} 0, ${ink} ${stripe}, ${ground} ${stripe}, ${ground} ${period}), ${ground}`;\n}\n\n/** The thin bar under a ruler row that says the shift is really running. */\nexport function actualBarColor(theme: Theme): string {\n return theme.palette.success.main;\n}\n"],"mappings":"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","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  MoreGroup,
4
4
  MoreQuick,
5
5
  fieldClearing
6
- } from "./chunk-D2JQF2WC.js";
6
+ } from "./chunk-UOKXYV3U.js";
7
7
  import {
8
8
  useStillAnchor
9
9
  } from "./chunk-7CUZTWKW.js";
@@ -223,4 +223,4 @@ function MoreFilters({
223
223
  export {
224
224
  MoreFilters
225
225
  };
226
- //# sourceMappingURL=chunk-DWH4TQXK.js.map
226
+ //# sourceMappingURL=chunk-4E2RQOSQ.js.map
@@ -1,17 +1,17 @@
1
+ import {
2
+ AVATAR_DEFAULTS,
3
+ contentTypeOf,
4
+ pickAvatarContent
5
+ } from "./chunk-3ZVUNSFF.js";
1
6
  import {
2
7
  AvatarView
3
- } from "./chunk-EOQ6EKTS.js";
8
+ } from "./chunk-7XSCEHGA.js";
4
9
  import {
5
10
  BORDER_WIDTH,
6
11
  GROUP_HOVER,
7
12
  GROUP_MAX,
8
13
  GROUP_OVERLAP
9
14
  } from "./chunk-6ZZGK5DT.js";
10
- import {
11
- AVATAR_DEFAULTS,
12
- contentTypeOf,
13
- pickAvatarContent
14
- } from "./chunk-3ZVUNSFF.js";
15
15
  import {
16
16
  EN_US_UI_LABELS
17
17
  } from "./chunk-XOXXG7Q5.js";
@@ -178,4 +178,4 @@ export {
178
178
  Avatar,
179
179
  AvatarGroup
180
180
  };
181
- //# sourceMappingURL=chunk-4QR7LM5F.js.map
181
+ //# sourceMappingURL=chunk-4J62V5OE.js.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  DAY_RULER_METRICS
3
- } from "./chunk-7ZQ3KQ7J.js";
3
+ } from "./chunk-273OLFJD.js";
4
4
  import {
5
5
  actualBarColor,
6
6
  blockToneStyles,
7
7
  breakHatch,
8
- signalInk
9
- } from "./chunk-4HK4FVMV.js";
8
+ dashedLabelGround
9
+ } from "./chunk-3UAHDLKH.js";
10
10
  import {
11
11
  FIELD_BORDER_WIDTH
12
12
  } from "./chunk-O6MJWHU5.js";
@@ -17,24 +17,23 @@ import {
17
17
 
18
18
  // src/components/data-display/DayRuler/DayRuler.styles.ts
19
19
  import { alpha } from "@mui/material/styles/index.js";
20
- function rootSx(hasActions) {
21
- return (theme) => ({
22
- containerType: "inline-size",
23
- minWidth: 0,
24
- width: "100%",
25
- userSelect: "none",
26
- "--dr-actions": hasActions ? rem(theme, DAY_RULER_METRICS.sideColumn) : "0%"
27
- });
28
- }
20
+ var CONTAINER = "day-ruler";
21
+ var rootSx = {
22
+ containerType: "inline-size",
23
+ containerName: CONTAINER,
24
+ minWidth: 0,
25
+ width: "100%",
26
+ userSelect: "none"
27
+ };
29
28
  function compact(theme) {
30
- return `@container (width < ${rem(theme, DAY_RULER_METRICS.compactBelow)})`;
29
+ return `@container ${CONTAINER} (width < ${rem(theme, DAY_RULER_METRICS.compactBelow)})`;
31
30
  }
32
31
  function phone(theme) {
33
- return `@container (width < ${rem(theme, DAY_RULER_METRICS.phoneBelow)})`;
32
+ return `@container ${CONTAINER} (width < ${rem(theme, DAY_RULER_METRICS.phoneBelow)})`;
34
33
  }
35
34
  var lineSx = (theme) => ({
36
35
  display: "grid",
37
- gridTemplateColumns: `${rem(theme, DAY_RULER_METRICS.sideColumn)} minmax(0, 1fr) var(--dr-actions)`,
36
+ gridTemplateColumns: `${rem(theme, DAY_RULER_METRICS.sideColumn)} minmax(0, 1fr)`,
38
37
  columnGap: rem(theme, DAY_RULER_METRICS.gap),
39
38
  alignItems: "center",
40
39
  // Stacked: across the full width, like the tracks; the label above the counts.
@@ -99,29 +98,33 @@ var groupTitleSx = {
99
98
  };
100
99
  var rowSx = (theme) => ({
101
100
  display: "grid",
102
- gridTemplateColumns: `${rem(theme, DAY_RULER_METRICS.sideColumn)} minmax(0, 1fr) var(--dr-actions)`,
103
- gridTemplateAreas: '"who track actions"',
101
+ gridTemplateColumns: `${rem(theme, DAY_RULER_METRICS.sideColumn)} minmax(0, 1fr)`,
102
+ gridTemplateRows: "auto auto",
103
+ gridTemplateAreas: '"who track" "actions track"',
104
104
  columnGap: rem(theme, DAY_RULER_METRICS.gap),
105
105
  alignItems: "center",
106
106
  py: rem(theme, DAY_RULER_METRICS.rowPaddingY),
107
107
  borderBottom: `1px solid ${theme.palette.divider}`,
108
108
  [compact(theme)]: {
109
109
  gridTemplateColumns: "minmax(0, 1fr) auto",
110
+ gridTemplateRows: "none",
110
111
  gridTemplateAreas: '"who actions" "track track"',
111
112
  rowGap: theme.spacing(1),
112
113
  py: theme.spacing(1.5)
113
114
  }
114
115
  });
115
116
  var whoSx = { gridArea: "who", minWidth: 0 };
116
- var actionsSx = {
117
+ var actionsSx = (theme) => ({
117
118
  gridArea: "actions",
118
119
  display: "flex",
119
120
  gap: 1,
120
121
  alignItems: "center",
121
- justifyContent: "flex-end",
122
+ justifyContent: "flex-start",
122
123
  flexWrap: "wrap",
123
- minWidth: 0
124
- };
124
+ minWidth: 0,
125
+ pt: rem(theme, DAY_RULER_METRICS.actionsTop),
126
+ [compact(theme)]: { justifyContent: "flex-end", pt: 0 }
127
+ });
125
128
  function breakSx(span) {
126
129
  return (theme) => ({
127
130
  position: "absolute",
@@ -162,6 +165,15 @@ function trackSx(opts) {
162
165
  }
163
166
  });
164
167
  }
168
+ function hitBand(theme, span, bounds) {
169
+ const border = `${FIELD_BORDER_WIDTH}px`;
170
+ const half = `max(calc(50% + ${border}), ${rem(theme, DAY_RULER_METRICS.block.hitArea / 2)})`;
171
+ if (!(span.share > 0)) return { left: `calc(50% - ${half})`, width: `calc(2 * ${half})` };
172
+ const rel = (pct) => `calc(${(pct - span.at) / span.share} * (100% + 2 * ${border}) - ${border})`;
173
+ const left = `max(${rel(bounds.lo)}, calc(50% - ${half}))`;
174
+ const right = `min(${rel(bounds.hi)}, calc(50% + ${half}))`;
175
+ return { left, width: `calc(${right} - ${left})` };
176
+ }
165
177
  function blockSx(tone, span, opts) {
166
178
  return (theme) => ({
167
179
  ...blockToneStyles(theme, tone, true),
@@ -185,25 +197,35 @@ function blockSx(tone, span, opts) {
185
197
  cursor: opts.movable ? "grab" : "pointer",
186
198
  boxShadow: opts.selected ? `0 0 0 ${rem(theme, DAY_RULER_METRICS.ring)} ${theme.palette.primary.main}` : "none",
187
199
  "&:focus-visible": { outline: `${rem(theme, DAY_RULER_METRICS.ring)} solid ${theme.palette.primary.main}`, outlineOffset: rem(theme, DAY_RULER_METRICS.ringOffset) },
188
- "& [data-dr-text]": { position: "relative", overflow: "hidden", textOverflow: "ellipsis", minWidth: 0 },
200
+ // The label sits above the "agora" line (drawn under the blocks): on a fill
201
+ // that is not opaque it takes an opaque ground, so the line never cuts it.
202
+ "& [data-dr-text]": {
203
+ position: "relative",
204
+ overflow: "hidden",
205
+ textOverflow: "ellipsis",
206
+ minWidth: 0,
207
+ backgroundColor: dashedLabelGround(theme, tone)
208
+ },
189
209
  '& [data-dr-text="short"]': { display: "none" },
210
+ // By pixels, at every width: the full text, else the start, else nothing — never a cut text.
211
+ '&[data-fit="short"] [data-dr-text="full"]': { display: "none" },
212
+ '&[data-fit="short"] [data-dr-text="short"]': { display: "inline" },
213
+ '&[data-fit="none"] [data-dr-text]': { display: "none" },
190
214
  [compact(theme)]: {
191
215
  top: rem(theme, DAY_RULER_METRICS.block.compactTop),
192
216
  height: rem(theme, DAY_RULER_METRICS.block.compactHeight),
193
- // A 40px hit area around the 20px bar, the look unchanged: the text cuts
194
- // itself (its spans ellipsize), so the block need not clip.
217
+ // A 40px × 40px-or-wider hit area round the 20px bar, the look
218
+ // unchanged: the text never overflows (it fits or it is not shown), so
219
+ // the block need not clip.
195
220
  overflow: "visible",
196
221
  "&::after": {
197
222
  content: '""',
198
223
  position: "absolute",
199
- left: 0,
200
- right: 0,
201
224
  top: "50%",
202
225
  height: rem(theme, DAY_RULER_METRICS.block.hitArea),
203
- transform: "translateY(-50%)"
204
- },
205
- '&[data-narrow] [data-dr-text="full"]': { display: "none" },
206
- '&[data-narrow] [data-dr-text="short"]': { display: "inline" }
226
+ transform: "translateY(-50%)",
227
+ ...hitBand(theme, span, opts.hit)
228
+ }
207
229
  }
208
230
  });
209
231
  }
@@ -214,7 +236,11 @@ function handleSx(side) {
214
236
  bottom: 0,
215
237
  [side === "l" ? "left" : "right"]: 0,
216
238
  width: rem(theme, DAY_RULER_METRICS.handle),
217
- cursor: "ew-resize"
239
+ cursor: "ew-resize",
240
+ // Above the block's hit band (its `::after`, painted last): on a narrow
241
+ // ruler the band covers the whole bar, and a press on an end must still
242
+ // resize rather than move (FUT-3831).
243
+ zIndex: 1
218
244
  });
219
245
  }
220
246
  function actualSx(span) {
@@ -266,39 +292,6 @@ var skeletonNameSx = (theme) => ({
266
292
  borderRadius: rem(theme, DAY_RULER_METRICS.skeletonNameRadius),
267
293
  backgroundColor: theme.palette.action.hover
268
294
  });
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
- });
302
295
 
303
296
  export {
304
297
  rootSx,
@@ -320,10 +313,6 @@ export {
320
313
  actualLabelSx,
321
314
  nowSx,
322
315
  skeletonTrackSx,
323
- skeletonNameSx,
324
- footerInk,
325
- footerCellSx,
326
- footerNoteSx,
327
- trendSx
316
+ skeletonNameSx
328
317
  };
329
- //# sourceMappingURL=chunk-OJZLFFG4.js.map
318
+ //# sourceMappingURL=chunk-5AZEDQXX.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, dashedLabelGround } from '../ScheduleGrid/schedule-tones';\nimport type { ScheduleBlockTone } from '../ScheduleGrid/ScheduleGrid.types';\nimport { DAY_RULER_METRICS as M } from './DayRuler.metrics';\n\n/** The container the ruler's layout answers to — named, so no other container between the root and a row can stand in for it. */\nconst CONTAINER = 'day-ruler';\n\n/** The ruler's root: the named container every layout query reads. */\nexport const rootSx: SxProps<Theme> = {\n containerType: 'inline-size',\n containerName: CONTAINER,\n minWidth: 0,\n width: '100%',\n userSelect: 'none',\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 ${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 ${CONTAINER} (width < ${rem(theme, M.phoneBelow)})`;\n}\n\n/**\n * Name · track: the coverage row and the axis row share these columns with\n * every row on a computer, so the hours line up down the whole ruler.\n */\nexport const lineSx: SxProps<Theme> = (theme: Theme) => ({\n display: 'grid',\n gridTemplateColumns: `${rem(theme, M.sideColumn)} minmax(0, 1fr)`,\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 (its actions under it) · track, the\n * track the same width on every row whether or not the row has actions. A\n * narrow ruler (a phone): name and actions on top, the track under them, full\n * width.\n */\nexport const rowSx: SxProps<Theme> = (theme: Theme) => ({\n display: 'grid',\n gridTemplateColumns: `${rem(theme, M.sideColumn)} minmax(0, 1fr)`,\n gridTemplateRows: 'auto auto',\n gridTemplateAreas: '\"who track\" \"actions track\"',\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 gridTemplateRows: 'none',\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> = (theme: Theme) => ({\n gridArea: 'actions',\n display: 'flex',\n gap: 1,\n alignItems: 'center',\n justifyContent: 'flex-start',\n flexWrap: 'wrap',\n minWidth: 0,\n pt: rem(theme, M.actionsTop),\n [compact(theme)]: { justifyContent: 'flex-end', pt: 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\n/** How far a bar's hit band may reach, in % of the track: the midpoints to its neighbours, or the track's ends. */\nexport interface HitBounds {\n lo: number;\n hi: number;\n}\n\n/**\n * The hit band round a bar on a narrow ruler (FUT-3831): `hitArea` tall and\n * at least `hitArea` wide, centred on the bar, then cut to `bounds` so it never\n * reaches past the midpoint to a neighbour. Positioned in % of the bar's\n * PADDING box (the pseudo-element's containing block, the bar less its\n * border), so a point at `k` bar-widths from the bar's outer left edge is\n * `k × (100% + 2 border) − border`; the px floor is the layout's to resolve.\n */\nfunction hitBand(theme: Theme, span: Span, bounds: HitBounds): CSSObject {\n // Every tone's border is the 1px hairline (`blockToneStyles`), the field border's width.\n const border = `${FIELD_BORDER_WIDTH}px`;\n const half = `max(calc(50% + ${border}), ${rem(theme, M.block.hitArea / 2)})`;\n if (!(span.share > 0)) return { left: `calc(50% - ${half})`, width: `calc(2 * ${half})` };\n const rel = (pct: number): string => `calc(${(pct - span.at) / span.share} * (100% + 2 * ${border}) - ${border})`;\n const left = `max(${rel(bounds.lo)}, calc(50% - ${half}))`;\n const right = `min(${rel(bounds.hi)}, calc(50% + ${half}))`;\n return { left, width: `calc(${right} - ${left})` };\n}\n\nexport function blockSx(\n tone: ScheduleBlockTone,\n span: Span,\n opts: { selected: boolean; movable: boolean; hit: HitBounds },\n): 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 // The label sits above the \"agora\" line (drawn under the blocks): on a fill\n // that is not opaque it takes an opaque ground, so the line never cuts it.\n '& [data-dr-text]': {\n position: 'relative',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n minWidth: 0,\n backgroundColor: dashedLabelGround(theme, tone),\n },\n '& [data-dr-text=\"short\"]': { display: 'none' },\n // By pixels, at every width: the full text, else the start, else nothing — never a cut text.\n '&[data-fit=\"short\"] [data-dr-text=\"full\"]': { display: 'none' },\n '&[data-fit=\"short\"] [data-dr-text=\"short\"]': { display: 'inline' },\n '&[data-fit=\"none\"] [data-dr-text]': { display: 'none' },\n [compact(theme)]: {\n top: rem(theme, M.block.compactTop),\n height: rem(theme, M.block.compactHeight),\n // A 40px × 40px-or-wider hit area round the 20px bar, the look\n // unchanged: the text never overflows (it fits or it is not shown), so\n // the block need not clip.\n overflow: 'visible',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n height: rem(theme, M.block.hitArea),\n transform: 'translateY(-50%)',\n ...hitBand(theme, span, opts.hit),\n },\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 // Above the block's hit band (its `::after`, painted last): on a narrow\n // ruler the band covers the whole bar, and a press on an end must still\n // resize rather than move (FUT-3831).\n zIndex: 1,\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\n/**\n * \"Agora\": drawn UNDER the blocks (before them in the track), so it never\n * crosses a block's label — \"07:30–1|3:00\" at 1280 (FUT-3831). It still shows\n * above and below each bar, where it overhangs the track, and through a\n * block's fill where that fill is not opaque — never through its text.\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"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  buildChartContext
3
- } from "./chunk-JG733RMP.js";
3
+ } from "./chunk-TZC6KIK2.js";
4
4
  import {
5
5
  ChartLegendContent,
6
6
  ChartTooltipContent
@@ -318,4 +318,4 @@ function renderChartByType(props, theme) {
318
318
  export {
319
319
  renderChartByType
320
320
  };
321
- //# sourceMappingURL=chunk-CZVAVX5L.js.map
321
+ //# sourceMappingURL=chunk-6ATXOJVQ.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  useFocusOnScreen
3
- } from "./chunk-OCT5VCLP.js";
3
+ } from "./chunk-BQBEN44R.js";
4
4
  import {
5
5
  actionSx,
6
6
  categoryDescriptionSx,
@@ -47,4 +47,4 @@ function SequenceOverviewBody(props) {
47
47
  export {
48
48
  SequenceOverviewBody
49
49
  };
50
- //# sourceMappingURL=chunk-YE7M7URT.js.map
50
+ //# sourceMappingURL=chunk-6D5AMANO.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-DQ22UKMZ.js";
4
4
  import {
5
5
  Avatar
6
- } from "./chunk-4QR7LM5F.js";
6
+ } from "./chunk-4J62V5OE.js";
7
7
  import {
8
8
  Card
9
9
  } from "./chunk-4XBAEKQQ.js";
@@ -80,4 +80,4 @@ export {
80
80
  UserAvatar,
81
81
  UserMenu
82
82
  };
83
- //# sourceMappingURL=chunk-Q3SILZTQ.js.map
83
+ //# sourceMappingURL=chunk-6LGKJVOA.js.map
@@ -5,14 +5,6 @@ import {
5
5
  import {
6
6
  filterRows
7
7
  } from "./chunk-YGQX7BNI.js";
8
- import {
9
- resolveScope,
10
- useScopeConfigChecks
11
- } from "./chunk-PL2AB5HJ.js";
12
- import {
13
- computeActiveFilterCount,
14
- defaultSortFields
15
- } from "./chunk-UKNMPGEM.js";
16
8
  import {
17
9
  serverDerived,
18
10
  useServerQuery
@@ -21,15 +13,23 @@ import {
21
13
  useSelection
22
14
  } from "./chunk-LLZWB32X.js";
23
15
  import {
24
- useClearFilters,
25
- useStateWriters
26
- } from "./chunk-OOLES6RR.js";
16
+ resolveScope,
17
+ useScopeConfigChecks
18
+ } from "./chunk-PL2AB5HJ.js";
19
+ import {
20
+ computeActiveFilterCount,
21
+ defaultSortFields
22
+ } from "./chunk-UKNMPGEM.js";
27
23
  import {
28
24
  emptyViewState
29
25
  } from "./chunk-HLYYB4O5.js";
30
26
  import {
31
27
  useDataViewsCopy
32
28
  } from "./chunk-KHG57NAE.js";
29
+ import {
30
+ useClearFilters,
31
+ useStateWriters
32
+ } from "./chunk-OOLES6RR.js";
33
33
 
34
34
  // src/components/data-display/DataViews/use-data-views-state.ts
35
35
  import { useEffect, useMemo, useRef, useState } from "react";
@@ -178,4 +178,4 @@ function useDataViewsState({
178
178
  export {
179
179
  useDataViewsState
180
180
  };
181
- //# sourceMappingURL=chunk-ZCNR4DN5.js.map
181
+ //# sourceMappingURL=chunk-7WE432RQ.js.map
@@ -1,3 +1,9 @@
1
+ import {
2
+ pulseAnimation,
3
+ rotateAnimation,
4
+ scaleInAnimation,
5
+ shimmerAnimation
6
+ } from "./chunk-MTEQEPNY.js";
1
7
  import {
2
8
  ACTIVE_SCALE,
3
9
  AVATAR_SIZES,
@@ -17,12 +23,6 @@ import {
17
23
  SPINNER,
18
24
  STATUS_DOT
19
25
  } from "./chunk-6ZZGK5DT.js";
20
- import {
21
- pulseAnimation,
22
- rotateAnimation,
23
- scaleInAnimation,
24
- shimmerAnimation
25
- } from "./chunk-MTEQEPNY.js";
26
26
  import {
27
27
  absoluteInk,
28
28
  controlNeutral,
@@ -277,4 +277,4 @@ function AvatarView(props) {
277
277
  export {
278
278
  AvatarView
279
279
  };
280
- //# sourceMappingURL=chunk-EOQ6EKTS.js.map
280
+ //# sourceMappingURL=chunk-7XSCEHGA.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Sheet
3
- } from "./chunk-NXQ6PXLJ.js";
3
+ } from "./chunk-LZ5PGB7U.js";
4
4
  import {
5
5
  Dialog
6
6
  } from "./chunk-DAFFZED3.js";
@@ -166,4 +166,4 @@ AppHeaderDetails.displayName = "AppHeaderDetails";
166
166
  export {
167
167
  AppHeaderDetails
168
168
  };
169
- //# sourceMappingURL=chunk-B5STMM3R.js.map
169
+ //# sourceMappingURL=chunk-ALMGYCHY.js.map
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  renderChartByType
3
- } from "./chunk-CZVAVX5L.js";
4
- import {
5
- ChartContainer
6
- } from "./chunk-RIRTW5EU.js";
3
+ } from "./chunk-6ATXOJVQ.js";
7
4
  import {
8
5
  getSizeStyles,
9
6
  getVariantStyles,
10
7
  plotHeightPx
11
8
  } from "./chunk-TCWISGSS.js";
9
+ import {
10
+ ChartContainer
11
+ } from "./chunk-RIRTW5EU.js";
12
12
  import {
13
13
  muiColor
14
14
  } from "./chunk-7ZPUN7TV.js";
@@ -111,4 +111,4 @@ var Chart = (props) => {
111
111
  export {
112
112
  Chart
113
113
  };
114
- //# sourceMappingURL=chunk-5357QUVE.js.map
114
+ //# sourceMappingURL=chunk-AMLHEKSV.js.map