@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
@@ -0,0 +1,65 @@
1
+ import {
2
+ textFitOf
3
+ } from "./chunk-L5CAHQIN.js";
4
+
5
+ // src/components/data-display/DayRuler/useTextFits.ts
6
+ import { useLayoutEffect, useState } from "react";
7
+ function textWidth(span) {
8
+ if (!span) return Number.POSITIVE_INFINITY;
9
+ const range = span.ownerDocument.createRange();
10
+ range.selectNodeContents(span);
11
+ return range.getBoundingClientRect().width;
12
+ }
13
+ function measureFit(el) {
14
+ const full = el.querySelector('[data-dr-text="full"]');
15
+ if (!full) return null;
16
+ const short = el.querySelector('[data-dr-text="short"]');
17
+ const spans = [full, short].filter((span) => span !== null);
18
+ const shown = spans.map((span) => span.style.display);
19
+ for (const span of spans) span.style.display = "inline";
20
+ const fullWidth = textWidth(full);
21
+ const shortWidth = textWidth(short);
22
+ const style = getComputedStyle(el);
23
+ const outer = el.clientWidth;
24
+ const room = outer - Number.parseFloat(style.paddingLeft) - Number.parseFloat(style.paddingRight);
25
+ spans.forEach((span, index) => {
26
+ span.style.display = shown[index] ?? "";
27
+ });
28
+ if (room > 0) return textFitOf(fullWidth, shortWidth, room);
29
+ return outer > 0 ? "none" : null;
30
+ }
31
+ function useTextFit(block, text, short, fallback) {
32
+ const [fit, setFit] = useState(fallback);
33
+ useLayoutEffect(() => {
34
+ const el = block.current;
35
+ if (!el || typeof ResizeObserver === "undefined") return void 0;
36
+ let live = true;
37
+ let frame = 0;
38
+ const measure = () => {
39
+ frame = 0;
40
+ if (!live) return;
41
+ const next = measureFit(el);
42
+ if (next) setFit(next);
43
+ };
44
+ const schedule = () => {
45
+ if (frame || !live) return;
46
+ frame = typeof requestAnimationFrame === "function" ? requestAnimationFrame(measure) : 0;
47
+ if (!frame) measure();
48
+ };
49
+ measure();
50
+ const observer = new ResizeObserver(schedule);
51
+ observer.observe(el);
52
+ el.ownerDocument.fonts?.ready.then(schedule, () => void 0);
53
+ return () => {
54
+ live = false;
55
+ observer.disconnect();
56
+ if (frame && typeof cancelAnimationFrame === "function") cancelAnimationFrame(frame);
57
+ };
58
+ }, [block, text, short]);
59
+ return fit;
60
+ }
61
+
62
+ export {
63
+ useTextFit
64
+ };
65
+ //# sourceMappingURL=chunk-WG7CAT5D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DayRuler/useTextFits.ts"],"sourcesContent":["import type * as React from 'react';\nimport { useLayoutEffect, useState } from 'react';\n\nimport { textFitOf, type BlockTextFit } from './day-ruler-model';\n\n/** A text span's own width (its laid-out text, whatever the span's own box). */\nfunction textWidth(span: HTMLElement | null): number {\n if (!span) return Number.POSITIVE_INFINITY;\n const range = span.ownerDocument.createRange();\n range.selectNodeContents(span);\n return range.getBoundingClientRect().width;\n}\n\n/**\n * The block's fit, measured in ONE layout: every write first (both texts\n * shown for the measurement alone), then every read, then the writes undone —\n * so a ruler of many blocks forces one layout per block, not one per text.\n * `null` when there is nothing to measure yet.\n */\nfunction measureFit(el: HTMLElement): BlockTextFit | null {\n const full = el.querySelector<HTMLElement>('[data-dr-text=\"full\"]');\n if (!full) return null;\n const short = el.querySelector<HTMLElement>('[data-dr-text=\"short\"]');\n const spans = [full, short].filter((span): span is HTMLElement => span !== null);\n const shown = spans.map((span) => span.style.display);\n for (const span of spans) span.style.display = 'inline';\n const fullWidth = textWidth(full);\n const shortWidth = textWidth(short);\n const style = getComputedStyle(el);\n const outer = el.clientWidth;\n const room = outer - Number.parseFloat(style.paddingLeft) - Number.parseFloat(style.paddingRight);\n spans.forEach((span, index) => {\n span.style.display = shown[index] ?? '';\n });\n if (room > 0) return textFitOf(fullWidth, shortWidth, room);\n // A bar with no room at all (narrower than its own padding) says nothing.\n return outer > 0 ? 'none' : null;\n}\n\n/**\n * Which of a block's texts fits it, by pixels (FUT-3825, FUT-3831): the full\n * text's and the short text's own widths against the room the block leaves\n * them. A wide block keeps \"18:00–23:00\"; one too short for it says its start\n * (\"18:00\"); one too short even for that says nothing — never a cut \"18:\".\n *\n * Measured at once (synchronously, so nothing is painted), then again on the\n * next frame whenever the block is resized, and once more when the page's\n * fonts have loaded: a webfont arriving late changes every text's width, and\n * a fit read in the fallback font would leave a label cut. Where nothing can\n * be measured (no `ResizeObserver`) it answers `fallback`.\n */\nexport function useTextFit(block: React.RefObject<HTMLElement | null>, text: string, short: string, fallback: BlockTextFit): BlockTextFit {\n const [fit, setFit] = useState<BlockTextFit>(fallback);\n\n useLayoutEffect(() => {\n const el = block.current;\n if (!el || typeof ResizeObserver === 'undefined') return undefined;\n let live = true;\n let frame = 0;\n const measure = (): void => {\n frame = 0;\n if (!live) return;\n const next = measureFit(el);\n if (next) setFit(next);\n };\n // Resizes and the fonts come in bursts: one measurement per frame.\n const schedule = (): void => {\n if (frame || !live) return;\n frame = typeof requestAnimationFrame === 'function' ? requestAnimationFrame(measure) : 0;\n if (!frame) measure();\n };\n measure();\n const observer = new ResizeObserver(schedule);\n observer.observe(el);\n el.ownerDocument.fonts?.ready.then(schedule, () => undefined);\n return () => {\n live = false;\n observer.disconnect();\n if (frame && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(frame);\n };\n }, [block, text, short]);\n\n return fit;\n}\n"],"mappings":";;;;;AACA,SAAS,iBAAiB,gBAAgB;AAK1C,SAAS,UAAU,MAAkC;AACnD,MAAI,CAAC,KAAM,QAAO,OAAO;AACzB,QAAM,QAAQ,KAAK,cAAc,YAAY;AAC7C,QAAM,mBAAmB,IAAI;AAC7B,SAAO,MAAM,sBAAsB,EAAE;AACvC;AAQA,SAAS,WAAW,IAAsC;AACxD,QAAM,OAAO,GAAG,cAA2B,uBAAuB;AAClE,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,QAAQ,GAAG,cAA2B,wBAAwB;AACpE,QAAM,QAAQ,CAAC,MAAM,KAAK,EAAE,OAAO,CAAC,SAA8B,SAAS,IAAI;AAC/E,QAAM,QAAQ,MAAM,IAAI,CAAC,SAAS,KAAK,MAAM,OAAO;AACpD,aAAW,QAAQ,MAAO,MAAK,MAAM,UAAU;AAC/C,QAAM,YAAY,UAAU,IAAI;AAChC,QAAM,aAAa,UAAU,KAAK;AAClC,QAAM,QAAQ,iBAAiB,EAAE;AACjC,QAAM,QAAQ,GAAG;AACjB,QAAM,OAAO,QAAQ,OAAO,WAAW,MAAM,WAAW,IAAI,OAAO,WAAW,MAAM,YAAY;AAChG,QAAM,QAAQ,CAAC,MAAM,UAAU;AAC7B,SAAK,MAAM,UAAU,MAAM,KAAK,KAAK;AAAA,EACvC,CAAC;AACD,MAAI,OAAO,EAAG,QAAO,UAAU,WAAW,YAAY,IAAI;AAE1D,SAAO,QAAQ,IAAI,SAAS;AAC9B;AAcO,SAAS,WAAW,OAA4C,MAAc,OAAe,UAAsC;AACxI,QAAM,CAAC,KAAK,MAAM,IAAI,SAAuB,QAAQ;AAErD,kBAAgB,MAAM;AACpB,UAAM,KAAK,MAAM;AACjB,QAAI,CAAC,MAAM,OAAO,mBAAmB,YAAa,QAAO;AACzD,QAAI,OAAO;AACX,QAAI,QAAQ;AACZ,UAAM,UAAU,MAAY;AAC1B,cAAQ;AACR,UAAI,CAAC,KAAM;AACX,YAAM,OAAO,WAAW,EAAE;AAC1B,UAAI,KAAM,QAAO,IAAI;AAAA,IACvB;AAEA,UAAM,WAAW,MAAY;AAC3B,UAAI,SAAS,CAAC,KAAM;AACpB,cAAQ,OAAO,0BAA0B,aAAa,sBAAsB,OAAO,IAAI;AACvF,UAAI,CAAC,MAAO,SAAQ;AAAA,IACtB;AACA,YAAQ;AACR,UAAM,WAAW,IAAI,eAAe,QAAQ;AAC5C,aAAS,QAAQ,EAAE;AACnB,OAAG,cAAc,OAAO,MAAM,KAAK,UAAU,MAAM,MAAS;AAC5D,WAAO,MAAM;AACX,aAAO;AACP,eAAS,WAAW;AACpB,UAAI,SAAS,OAAO,yBAAyB,WAAY,sBAAqB,KAAK;AAAA,IACrF;AAAA,EACF,GAAG,CAAC,OAAO,MAAM,KAAK,CAAC;AAEvB,SAAO;AACT;","names":[]}
@@ -0,0 +1,52 @@
1
+ import {
2
+ DAY_RULER_METRICS
3
+ } from "./chunk-273OLFJD.js";
4
+ import {
5
+ signalInk
6
+ } from "./chunk-3UAHDLKH.js";
7
+ import {
8
+ rem
9
+ } from "./chunk-YKCAJ2TN.js";
10
+
11
+ // src/components/data-display/DayRuler/DayRuler.footer.styles.ts
12
+ function footerInk(theme, marked, plain) {
13
+ return marked ? signalInk(theme, "warning", theme.palette.background.default) : plain;
14
+ }
15
+ function footerCellSx(marked) {
16
+ return (theme) => ({
17
+ display: "flex",
18
+ alignItems: "center",
19
+ justifyContent: "center",
20
+ fontSize: rem(theme, DAY_RULER_METRICS.coverage.font),
21
+ borderRadius: rem(theme, DAY_RULER_METRICS.coverage.radius),
22
+ color: footerInk(theme, marked, theme.palette.text.primary),
23
+ fontWeight: marked ? 500 : 400,
24
+ // The hairline is always there, transparent when unmarked, so a mark never shifts a count.
25
+ border: `1px solid ${marked ? theme.palette.warning.main : "transparent"}`,
26
+ minWidth: 0,
27
+ overflow: "hidden"
28
+ });
29
+ }
30
+ function footerNoteSx(marked) {
31
+ return (theme) => ({
32
+ fontSize: rem(theme, DAY_RULER_METRICS.meta),
33
+ color: footerInk(theme, marked, theme.palette.text.secondary),
34
+ fontWeight: marked ? 500 : 400,
35
+ ...marked ? { borderLeft: `${rem(theme, 3)} solid ${theme.palette.warning.main}`, paddingLeft: rem(theme, 6) } : {}
36
+ });
37
+ }
38
+ var trendSx = (theme) => ({
39
+ display: "block",
40
+ width: "100%",
41
+ height: rem(theme, DAY_RULER_METRICS.coverage.height + DAY_RULER_METRICS.coverage.height / 2),
42
+ color: theme.palette.primary.main,
43
+ overflow: "visible"
44
+ });
45
+
46
+ export {
47
+ footerInk,
48
+ footerCellSx,
49
+ footerNoteSx,
50
+ trendSx
51
+ };
52
+ //# sourceMappingURL=chunk-WSSD7H5E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DayRuler/DayRuler.footer.styles.ts"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles/index.js';\n\nimport { rem } from '../../../tokens/relative';\nimport { signalInk } from '../ScheduleGrid/schedule-tones';\nimport { DAY_RULER_METRICS as M } from './DayRuler.metrics';\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":";;;;;;;;;;;AAWO,SAAS,UAAU,OAAc,QAAiB,OAAuB;AAC9E,SAAO,SAAS,UAAU,OAAO,WAAW,MAAM,QAAQ,WAAW,OAAO,IAAI;AAClF;AAGO,SAAS,aAAa,QAAiC;AAC5D,SAAO,CAAC,WAAkB;AAAA,IACxB,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,UAAU,IAAI,OAAO,kBAAE,SAAS,IAAI;AAAA,IACpC,cAAc,IAAI,OAAO,kBAAE,SAAS,MAAM;AAAA,IAC1C,OAAO,UAAU,OAAO,QAAQ,MAAM,QAAQ,KAAK,OAAO;AAAA,IAC1D,YAAY,SAAS,MAAM;AAAA;AAAA,IAE3B,QAAQ,aAAa,SAAS,MAAM,QAAQ,QAAQ,OAAO,aAAa;AAAA,IACxE,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AACF;AAOO,SAAS,aAAa,QAAiC;AAC5D,SAAO,CAAC,WAAkB;AAAA,IACxB,UAAU,IAAI,OAAO,kBAAE,IAAI;AAAA,IAC3B,OAAO,UAAU,OAAO,QAAQ,MAAM,QAAQ,KAAK,SAAS;AAAA,IAC5D,YAAY,SAAS,MAAM;AAAA,IAC3B,GAAI,SAAS,EAAE,YAAY,GAAG,IAAI,OAAO,CAAC,CAAC,UAAU,MAAM,QAAQ,QAAQ,IAAI,IAAI,aAAa,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC;AAAA,EACrH;AACF;AAGO,IAAM,UAA0B,CAAC,WAAkB;AAAA,EACxD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ,IAAI,OAAO,kBAAE,SAAS,SAAS,kBAAE,SAAS,SAAS,CAAC;AAAA,EAC5D,OAAO,MAAM,QAAQ,QAAQ;AAAA,EAC7B,UAAU;AACZ;","names":[]}
@@ -4,7 +4,7 @@ import {
4
4
  CountedIcon,
5
5
  controlProps,
6
6
  focusRing
7
- } from "./chunk-LDCZPZPD.js";
7
+ } from "./chunk-24HHUCWB.js";
8
8
  import {
9
9
  Drawer,
10
10
  DrawerContent,
@@ -175,4 +175,4 @@ function SectionNavSheet({
175
175
  export {
176
176
  SectionNavSheet
177
177
  };
178
- //# sourceMappingURL=chunk-DTZOP4ZR.js.map
178
+ //# sourceMappingURL=chunk-XCUHGPPZ.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  useCardActions
3
- } from "./chunk-FQNDJITD.js";
3
+ } from "./chunk-RCTHCXS6.js";
4
4
  import {
5
5
  ConfirmActionDialog
6
- } from "./chunk-7W5X3KQ2.js";
6
+ } from "./chunk-SW7JCF4Z.js";
7
7
  import {
8
8
  useConfirmAction
9
9
  } from "./chunk-EMYESBIT.js";
@@ -50,4 +50,4 @@ function useRemoveConfirm({
50
50
  export {
51
51
  useRemoveConfirm
52
52
  };
53
- //# sourceMappingURL=chunk-DBPFKGXX.js.map
53
+ //# sourceMappingURL=chunk-Y7BOP7VZ.js.map
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-L7BRU4UF.js";
9
9
  import {
10
10
  Alert
11
- } from "./chunk-PEAUGQKU.js";
11
+ } from "./chunk-NQCTANF3.js";
12
12
  import {
13
13
  Button
14
14
  } from "./chunk-YOXYSAUI.js";
@@ -106,4 +106,4 @@ NotificationStatusNotice.displayName = "NotificationStatusNotice";
106
106
  export {
107
107
  NotificationStatusNotice
108
108
  };
109
- //# sourceMappingURL=chunk-BOADHYTA.js.map
109
+ //# sourceMappingURL=chunk-YNZUYZ2O.js.map
@@ -1,20 +1,14 @@
1
1
  import {
2
2
  SequenceOverviewBody
3
- } from "./chunk-YE7M7URT.js";
3
+ } from "./chunk-6D5AMANO.js";
4
4
  import {
5
5
  SequenceDoneBody,
6
6
  SequenceIntroBody,
7
7
  SequenceStepBody
8
- } from "./chunk-OCT5VCLP.js";
8
+ } from "./chunk-BQBEN44R.js";
9
9
  import {
10
- SequenceHeader
11
- } from "./chunk-JO6D7YGN.js";
12
- import {
13
- chromeSx,
14
- columnSx,
15
- paperSx,
16
- scrollBodySx
17
- } from "./chunk-2ORD2FMN.js";
10
+ ResolverFrame
11
+ } from "./chunk-CPQJFHNZ.js";
18
12
  import {
19
13
  SEQUENCE_METRICS
20
14
  } from "./chunk-ALDS5ISD.js";
@@ -29,15 +23,11 @@ import {
29
23
  progressOf,
30
24
  summaryOf
31
25
  } from "./chunk-KZ5F52D6.js";
32
- import {
33
- Dialog
34
- } from "./chunk-DAFFZED3.js";
35
26
 
36
27
  // src/components/feedback/SequenceResolver/SequenceResolver.tsx
37
- import Box from "@mui/material/Box/index.js";
38
28
  import { useTheme } from "@mui/material/styles/index.js";
39
29
  import useMediaQuery from "@mui/material/useMediaQuery/index.js";
40
- import { useCallback, useId, useRef, useState } from "react";
30
+ import { useCallback, useEffect, useId, useRef, useState } from "react";
41
31
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
42
32
  function headerLabelOf(props, run, current) {
43
33
  const { labels } = props;
@@ -89,13 +79,6 @@ function headerOf(inputs) {
89
79
  }
90
80
  return { ...base, back: backOf(props, state), seeAll: overview.button };
91
81
  }
92
- function escapeCloses(close) {
93
- return (event) => {
94
- if (event.key !== "Escape" || event.defaultPrevented) return;
95
- event.stopPropagation();
96
- close();
97
- };
98
- }
99
82
  function SequenceBody(body) {
100
83
  const { props, state, current, step, overview, titleId, stepTitleRef, touch, testId, close } = body;
101
84
  if (props.intro) {
@@ -137,6 +120,7 @@ function SequenceBody(body) {
137
120
  ] });
138
121
  }
139
122
  if (stepBody) return /* @__PURE__ */ jsx(Fragment, { children: stepBody });
123
+ if (props.done === null) return /* @__PURE__ */ jsx(Fragment, {});
140
124
  const summary = summaryOf(state.run);
141
125
  return /* @__PURE__ */ jsx(
142
126
  SequenceDoneBody,
@@ -151,8 +135,51 @@ function SequenceBody(body) {
151
135
  }
152
136
  );
153
137
  }
138
+ function useCloseAtEnd(ended, close) {
139
+ const closeRef = useRef(close);
140
+ const fired = useRef(false);
141
+ useEffect(() => {
142
+ closeRef.current = close;
143
+ });
144
+ useEffect(() => {
145
+ if (!ended) {
146
+ fired.current = false;
147
+ return;
148
+ }
149
+ if (fired.current) return;
150
+ fired.current = true;
151
+ closeRef.current();
152
+ }, [ended]);
153
+ return ended;
154
+ }
155
+ function useExitScreen(live, input) {
156
+ const { open, hasStep, closesAtEnd } = input;
157
+ const last = useRef(null);
158
+ const wasOpen = useRef(open);
159
+ if (open && !wasOpen.current) last.current = null;
160
+ wasOpen.current = open;
161
+ if (!closesAtEnd) return live;
162
+ if (open && hasStep) {
163
+ last.current = live;
164
+ return live;
165
+ }
166
+ const kept = last.current;
167
+ if (!kept) return live;
168
+ const { header } = kept;
169
+ if (!("back" in header) || !header.back) return kept;
170
+ return { ...kept, header: { ...header, back: { ...header.back, onClick: () => void 0 } } };
171
+ }
172
+ function useRunEnding(props, state) {
173
+ const { open, onClose, intro } = props;
174
+ const { run } = state;
175
+ const current = intro ? void 0 : currentOf(run);
176
+ const close = () => onClose(summaryOf(run));
177
+ const closesAtEnd = props.done === null && !intro;
178
+ const ended = useCloseAtEnd(open && closesAtEnd && !current, close);
179
+ return { current, close, ended, exiting: ended || !open && closesAtEnd };
180
+ }
154
181
  function SequenceResolver(props) {
155
- const { open, onClose, intro, labels } = props;
182
+ const { open, intro, labels } = props;
156
183
  const testId = props.dataTestId ?? "sequence-resolver";
157
184
  const theme = useTheme();
158
185
  const touch = useMediaQuery(theme.breakpoints.down(SEQUENCE_METRICS.sheetBreakpoint));
@@ -171,53 +198,44 @@ function SequenceResolver(props) {
171
198
  failed: labels.failed,
172
199
  stepAllowsBack: () => stepAllowsBack.current
173
200
  });
174
- const { run } = state;
175
- const current = intro ? void 0 : currentOf(run);
176
- const close = () => onClose(summaryOf(run));
201
+ const ending = useRunEnding(props, state);
202
+ const { current, close } = ending;
177
203
  const overview = useOverview(props, state, current, open);
178
204
  const titleProps = { id: overview.shown ? `${titleId}-kept` : titleId, tabIndex: -1, ref: titleRef };
179
205
  const step = current ? props.renderStep(current, stepApiOf(state, titleProps)) : void 0;
180
206
  stepAllowsBack.current = step?.canGoBack !== false;
207
+ const screen = useExitScreen(
208
+ {
209
+ header: headerOf({ props, state, current, overview, titleId }),
210
+ body: /* @__PURE__ */ jsx(
211
+ SequenceBody,
212
+ {
213
+ props,
214
+ state,
215
+ current,
216
+ step,
217
+ overview,
218
+ titleId,
219
+ stepTitleRef,
220
+ touch,
221
+ testId,
222
+ close
223
+ }
224
+ )
225
+ },
226
+ { open, hasStep: current !== void 0 && step !== void 0, closesAtEnd: props.done === null && !intro }
227
+ );
181
228
  return /* @__PURE__ */ jsx(
182
- Dialog,
229
+ ResolverFrame,
183
230
  {
184
- open,
185
- onClose: close,
186
- persistent: true,
187
- variant: touch ? "bottom-sheet" : "default",
188
- size: "sm",
189
- "aria-labelledby": titleId,
190
- onKeyDown: escapeCloses(close),
191
- slotProps: { paper: { sx: paperSx(touch) } },
192
- dataTestId: testId,
193
- children: /* @__PURE__ */ jsxs(Box, { sx: columnSx, children: [
194
- /* @__PURE__ */ jsx(Box, { sx: chromeSx, children: /* @__PURE__ */ jsx(
195
- SequenceHeader,
196
- {
197
- touch,
198
- ...headerOf({ props, state, current, overview, titleId }),
199
- closeLabel: labels.close,
200
- onClose: close,
201
- progressLabel: labels.progress,
202
- testId
203
- }
204
- ) }),
205
- /* @__PURE__ */ jsx(Box, { sx: scrollBodySx, "data-testid": `${testId}-body`, children: /* @__PURE__ */ jsx(
206
- SequenceBody,
207
- {
208
- props,
209
- state,
210
- current,
211
- step,
212
- overview,
213
- titleId,
214
- stepTitleRef,
215
- touch,
216
- testId,
217
- close
218
- }
219
- ) })
220
- ] })
231
+ shown: open && !ending.ended,
232
+ exiting: ending.exiting,
233
+ touch,
234
+ titleId,
235
+ testId,
236
+ labels,
237
+ screen,
238
+ close
221
239
  }
222
240
  );
223
241
  }
@@ -225,4 +243,4 @@ function SequenceResolver(props) {
225
243
  export {
226
244
  SequenceResolver
227
245
  };
228
- //# sourceMappingURL=chunk-XRV4QFEQ.js.map
246
+ //# sourceMappingURL=chunk-ZBUMGMWP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/feedback/SequenceResolver/SequenceResolver.tsx"],"sourcesContent":["'use client';\n\nimport { useTheme } from '@mui/material/styles/index.js';\nimport useMediaQuery from '@mui/material/useMediaQuery/index.js';\nimport React, { useCallback, useEffect, useId, useRef, useState } from 'react';\n\nimport { canReturn, currentOf, jumpTargetOf, positionOf, progressOf, summaryOf, type RunState } from './sequence-model';\nimport {\n SequenceDoneBody,\n SequenceIntroBody,\n SequenceStepBody,\n} from './SequenceResolver.parts';\nimport { SequenceOverviewBody } from './SequenceResolver.overview';\nimport { ResolverFrame } from './SequenceResolver.frame';\nimport { SEQUENCE_METRICS } from './SequenceResolver.metrics';\nimport type {\n SequenceItem,\n SequenceOverviewCategory,\n SequenceResolverProps,\n SequenceStep,\n SequenceStepApi,\n} from './SequenceResolver.types';\nimport { useSequenceRun, type SequenceRun } from './useSequenceRun';\n\n/** What the header's label says on the screen showing. */\nfunction headerLabelOf<I extends SequenceItem, R>(\n props: SequenceResolverProps<I, R>,\n run: RunState<I, R>,\n current: I | undefined,\n): string {\n const { labels } = props;\n if (props.intro) return labels.introStep;\n if (!current) return labels.doneStep;\n return labels.step(positionOf(run), summaryOf(run).total, current);\n}\n\n/** The header's back button, once a previous step exists and the host allows it. */\nfunction backOf<I extends SequenceItem, R>(props: SequenceResolverProps<I, R>, state: SequenceRun<I, R>) {\n const { intro, labels, canGoBack = true } = props;\n if (intro || !canGoBack || !canReturn(state.run)) return undefined;\n return { label: labels.back, accessible: labels.backAccessible, onClick: state.back, disabled: state.busy };\n}\n\ninterface OverviewState {\n /** The overview is on screen instead of the step. */\n shown: boolean;\n /** The header's \"Ver todos (N)\", while there is a step and more than one problem. */\n button?: { label: string; onClick: () => void; disabled: boolean };\n canPick: (category: SequenceOverviewCategory) => boolean;\n pick: (category: SequenceOverviewCategory) => void;\n hide: () => void;\n /** The overview's title (in the header row): focus goes to it when it opens. */\n titleRef: React.RefObject<HTMLHeadingElement | null>;\n}\n\n/**\n * \"Ver todos\" inside the run: whether it shows, its header button, and its\n * picks. Opening it changes nothing in the run; a pick jumps; \"continue\"\n * returns to the step it left. Every opening of the resolver starts closed.\n */\nfunction useOverview<I extends SequenceItem, R>(\n props: SequenceResolverProps<I, R>,\n state: SequenceRun<I, R>,\n current: I | undefined,\n open: boolean,\n): OverviewState {\n const [shown, setShown] = useState(false);\n const [wasOpen, setWasOpen] = useState(open);\n const titleRef = useRef<HTMLHeadingElement | null>(null);\n if (wasOpen !== open) {\n setWasOpen(open);\n if (shown) setShown(false);\n }\n const { overview } = props;\n const total = summaryOf(state.run).total;\n const available = Boolean(overview && current && total > 1);\n const hide = (): void => setShown(false);\n return {\n shown: shown && available,\n button:\n available && overview\n ? { label: overview.label(total), onClick: () => setShown(true), disabled: state.busy }\n : undefined,\n canPick: (category) => jumpTargetOf(state.run, category.keys) !== undefined,\n pick: (category) => {\n const target = jumpTargetOf(state.run, category.keys);\n if (target === undefined) return;\n state.jumpTo(target);\n setShown(false);\n category.onPick?.();\n },\n hide,\n titleRef,\n };\n}\n\n/** What the host's `renderStep` gets: the run's verbs, `busy`, and the props for its title. */\nfunction stepApiOf<I extends SequenceItem, R>(\n state: SequenceRun<I, R>,\n titleProps: SequenceStepApi<R>['titleProps'],\n): SequenceStepApi<R> {\n return { resolve: state.resolve, skip: state.skip, back: state.back, jumpTo: state.jumpTo, busy: state.busy, titleProps };\n}\n\ninterface HeaderInputs<I extends SequenceItem, R> {\n props: SequenceResolverProps<I, R>;\n state: SequenceRun<I, R>;\n current: I | undefined;\n overview: OverviewState;\n titleId: string;\n}\n\n/** The header's back, \"Ver todos\" and label — or, over the overview, its title and close alone. */\nfunction headerOf<I extends SequenceItem, R>(inputs: HeaderInputs<I, R>) {\n const { props, state, current, overview, titleId } = inputs;\n const run = state.run;\n const base = { label: headerLabelOf(props, run, current), progress: props.intro ? 0 : progressOf(run) };\n if (overview.shown && props.overview) {\n return { ...base, title: { id: titleId, text: props.overview.title, ref: overview.titleRef } };\n }\n return { ...base, back: backOf(props, state), seeAll: overview.button };\n}\n\ninterface BodyProps<I extends SequenceItem, R> {\n props: SequenceResolverProps<I, R>;\n state: SequenceRun<I, R>;\n current: I | undefined;\n /** The step on screen, rendered once by the resolver (it also reads `canGoBack` from it). */\n step: SequenceStep | undefined;\n overview: OverviewState;\n titleId: string;\n stepTitleRef: React.RefObject<HTMLElement | null>;\n touch: boolean;\n testId: string;\n close: () => void;\n}\n\n/** The intro, the step on screen, or the end screen. */\nfunction SequenceBody<I extends SequenceItem, R>(body: BodyProps<I, R>): React.JSX.Element {\n const { props, state, current, step, overview, titleId, stepTitleRef, touch, testId, close } = body;\n if (props.intro) {\n return <SequenceIntroBody intro={props.intro} titleId={titleId} testId={testId} screenKey=\"intro\" />;\n }\n const stepBody =\n current && step ? (\n <SequenceStepBody\n key={`step:${current.key}`}\n step={step}\n skip={{ label: props.labels.skip, onClick: state.skip }}\n busy={state.busy}\n error={state.error}\n touch={touch}\n testId={testId}\n screenKey={`step:${current.key}`}\n titleRef={stepTitleRef}\n hidden={overview.shown}\n />\n ) : null;\n if (overview.shown && props.overview) {\n // The step stays mounted under the overview, so a half-filled answer survives \"continue\".\n return (\n <>\n <SequenceOverviewBody\n key=\"overview\"\n categories={props.overview.categories}\n canPick={overview.canPick}\n onPick={overview.pick}\n pickLabel={props.overview.pickLabel}\n continueLabel={props.overview.continueLabel}\n onContinue={overview.hide}\n titleRef={overview.titleRef}\n touch={touch}\n testId={testId}\n />\n {stepBody}\n </>\n );\n }\n if (stepBody) return <>{stepBody}</>;\n // `done: null`: no end screen — the resolver is closing over its last step (see `useExitScreen`).\n if (props.done === null) return <></>;\n const summary = summaryOf(state.run);\n return (\n <SequenceDoneBody\n done={typeof props.done === 'function' ? props.done(summary) : props.done}\n titleId={titleId}\n error={state.error}\n touch={touch}\n onConfirm={close}\n testId={testId}\n screenKey=\"done\"\n />\n );\n}\n\n/**\n * With `done: null`, the run's end closes the resolver: `onClose(summary)`\n * once, when the queue runs out while it is open and past the intro. Returns\n * whether the run has ended that way, so the dialog starts closing in the same\n * render (and keeps its last screen for the exit, see `useExitScreen`).\n *\n * `fired` makes it once per ending: StrictMode replays a mount's effects, and\n * a resolver mounted open over an empty queue would otherwise close twice. It\n * resets when the run is live again (a reopening, a queue that grew back).\n */\nfunction useCloseAtEnd(ended: boolean, close: () => void): boolean {\n const closeRef = useRef(close);\n const fired = useRef(false);\n useEffect(() => {\n closeRef.current = close;\n });\n useEffect(() => {\n if (!ended) {\n fired.current = false;\n return;\n }\n if (fired.current) return;\n fired.current = true;\n closeRef.current();\n }, [ended]);\n return ended;\n}\n\nexport interface Screen {\n header: ReturnType<typeof headerOf>;\n body: React.JSX.Element;\n}\n\n/**\n * What the dialog shows. While a step is on screen, that screen — and it is\n * kept: when the run ends with `done: null` the dialog closes in that same\n * render, and its exit transition (a fade, the sheet sliding down) plays over\n * the LAST step as it was — its label, Back, progress and body — rather than\n * an empty, collapsed \"done\" paper — also once the host turns `open` off from\n * `onClose`. Back is inert during the exit.\n */\nfunction useExitScreen(live: Screen, input: { open: boolean; hasStep: boolean; closesAtEnd: boolean }): Screen {\n const { open, hasStep, closesAtEnd } = input;\n const last = useRef<Screen | null>(null);\n const wasOpen = useRef(open);\n // A new opening is a new run: the last one's screen is not kept into it.\n if (open && !wasOpen.current) last.current = null;\n wasOpen.current = open;\n if (!closesAtEnd) return live;\n if (open && hasStep) {\n last.current = live;\n return live;\n }\n // Ended (or closed by the host after `onClose`): the exit plays over the last step.\n const kept = last.current;\n if (!kept) return live;\n const { header } = kept;\n if (!('back' in header) || !header.back) return kept;\n return { ...kept, header: { ...header, back: { ...header.back, onClick: () => undefined } } };\n}\n\ninterface RunEnding<I extends SequenceItem> {\n current: I | undefined;\n close: () => void;\n /** The run ended with `done: null`: the dialog is closing. */\n ended: boolean;\n /** The kept last step is playing its exit. */\n exiting: boolean;\n}\n\nfunction useRunEnding<I extends SequenceItem, R>(\n props: SequenceResolverProps<I, R>,\n state: SequenceRun<I, R>,\n): RunEnding<I> {\n const { open, onClose, intro } = props;\n const { run } = state;\n const current = intro ? undefined : currentOf(run);\n const close = (): void => onClose(summaryOf(run));\n const closesAtEnd = props.done === null && !intro;\n const ended = useCloseAtEnd(open && closesAtEnd && !current, close);\n return { current, close, ended, exiting: ended || (!open && closesAtEnd) };\n}\n\n/**\n * Resolve a queue of problems one at a time, in ONE dialog whose body is\n * replaced step by step: a header with \"‹ Back\", the step's label and close,\n * a progress bar, the host's step, and an end screen (FUT-3671) — or none,\n * with `done: null`: the run's end closes it (FUT-3833).\n *\n * A centred `Dialog` from the `sm` breakpoint up; the `Dialog` inset\n * bottom-sheet variant below it, never taller than 95% of the viewport. Either\n * way the paper scrolls inside the viewport, so a long step is never cut off.\n *\n * The component owns the run — which step is on screen, what was answered or\n * skipped, where Back returns to — and nothing about the domain: every step\n * body, every word and every server call is the host's.\n */\nexport function SequenceResolver<I extends SequenceItem, R = unknown>(\n props: SequenceResolverProps<I, R>,\n): React.JSX.Element {\n const { open, intro, labels } = props;\n const testId = props.dataTestId ?? 'sequence-resolver';\n const theme = useTheme();\n const touch = useMediaQuery(theme.breakpoints.down(SEQUENCE_METRICS.sheetBreakpoint));\n const titleId = `${useId()}-title`;\n const stepTitleRef = useRef<HTMLElement | null>(null);\n const titleRef = useCallback((node: HTMLElement | null) => {\n stepTitleRef.current = node;\n }, []);\n\n // Read when an answer is recorded: the step on screen's own `canGoBack`.\n const stepAllowsBack = useRef(true);\n const state = useSequenceRun<I, R>({\n open,\n active: open && !intro,\n queue: props.queue,\n initialKey: props.initialKey,\n onBack: props.onBack,\n failed: labels.failed,\n stepAllowsBack: () => stepAllowsBack.current,\n });\n const ending = useRunEnding(props, state);\n const { current, close } = ending;\n const overview = useOverview(props, state, current, open);\n // Under the overview the step is kept but hidden, and the overview's title names the dialog.\n const titleProps = { id: overview.shown ? `${titleId}-kept` : titleId, tabIndex: -1, ref: titleRef } as const;\n const step = current ? props.renderStep(current, stepApiOf(state, titleProps)) : undefined;\n stepAllowsBack.current = step?.canGoBack !== false;\n const screen = useExitScreen(\n {\n header: headerOf({ props, state, current, overview, titleId }),\n body: (\n <SequenceBody\n props={props}\n state={state}\n current={current}\n step={step}\n overview={overview}\n titleId={titleId}\n stepTitleRef={stepTitleRef}\n touch={touch}\n testId={testId}\n close={close}\n />\n ),\n },\n { open, hasStep: current !== undefined && step !== undefined, closesAtEnd: props.done === null && !intro },\n );\n\n return (\n <ResolverFrame\n shown={open && !ending.ended}\n exiting={ending.exiting}\n touch={touch}\n titleId={titleId}\n testId={testId}\n labels={labels}\n screen={screen}\n close={close}\n />\n );\n}\n"],"mappings":"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","names":[]}
@@ -4,12 +4,12 @@ import {
4
4
  import {
5
5
  CardBody
6
6
  } from "./chunk-4ZQQUICR.js";
7
- import {
8
- SelectAllStrip
9
- } from "./chunk-OY437NRJ.js";
10
7
  import {
11
8
  toGridExpansion
12
9
  } from "./chunk-O5UGAL2V.js";
10
+ import {
11
+ SelectAllStrip
12
+ } from "./chunk-OY437NRJ.js";
13
13
  import {
14
14
  useStickyTableHead
15
15
  } from "./chunk-4IE66GY2.js";
@@ -250,4 +250,4 @@ function GridMain(props) {
250
250
  export {
251
251
  GridMain
252
252
  };
253
- //# sourceMappingURL=chunk-XNAI7QGU.js.map
253
+ //# sourceMappingURL=chunk-ZM6FJCWS.js.map
@@ -1,9 +1,14 @@
1
+ import {
2
+ NumberBoundInput
3
+ } from "./chunk-2FKWKLSC.js";
1
4
  import {
2
5
  RangePresets
3
6
  } from "./chunk-LZNUBQ5I.js";
4
7
  import {
5
- NumberBoundInput
6
- } from "./chunk-2FKWKLSC.js";
8
+ isRangeInverted,
9
+ isRangeSet,
10
+ rangeChipLabel
11
+ } from "./chunk-GCZJH4XL.js";
7
12
  import {
8
13
  useOutsideResetKey
9
14
  } from "./chunk-YOPMXGHY.js";
@@ -13,11 +18,6 @@ import {
13
18
  import {
14
19
  DayRangeCalendar
15
20
  } from "./chunk-HRES2S3Q.js";
16
- import {
17
- isRangeInverted,
18
- isRangeSet,
19
- rangeChipLabel
20
- } from "./chunk-GCZJH4XL.js";
21
21
  import {
22
22
  useDataViewsCopy
23
23
  } from "./chunk-KHG57NAE.js";
@@ -189,4 +189,4 @@ function RangeBounds({
189
189
  export {
190
190
  RangeBounds
191
191
  };
192
- //# sourceMappingURL=chunk-FC7UCFFA.js.map
192
+ //# sourceMappingURL=chunk-ZPWPA6FR.js.map
@@ -1,10 +1,10 @@
1
1
  import "../chunk-NUGT7LMR.js";
2
2
  import {
3
3
  Alert
4
- } from "../chunk-PEAUGQKU.js";
4
+ } from "../chunk-NQCTANF3.js";
5
+ import "../chunk-L5RS6QAT.js";
5
6
  import "../chunk-QXUXO22M.js";
6
7
  import "../chunk-7HZ36QDH.js";
7
- import "../chunk-L5RS6QAT.js";
8
8
  import "../chunk-L7VH6IMR.js";
9
9
  import "../chunk-5ZY3IIIG.js";
10
10
  import "../chunk-TYJR4GOF.js";
@@ -1,8 +1,8 @@
1
1
  import "../chunk-2IBFEHIX.js";
2
2
  import {
3
3
  AlertDialog
4
- } from "../chunk-ZYZPSBNQ.js";
5
- import "../chunk-COK65GX2.js";
4
+ } from "../chunk-OGSTMHT6.js";
5
+ import "../chunk-KURE5R7Z.js";
6
6
  import "../chunk-XOXXG7Q5.js";
7
7
  import "../chunk-XJAD6E3V.js";
8
8
  import "../chunk-F5H2ZXST.js";
@@ -2,11 +2,11 @@ import "../chunk-UDQSIRAP.js";
2
2
  import {
3
3
  Avatar,
4
4
  AvatarGroup
5
- } from "../chunk-4QR7LM5F.js";
6
- import "../chunk-EOQ6EKTS.js";
7
- import "../chunk-6ZZGK5DT.js";
5
+ } from "../chunk-4J62V5OE.js";
8
6
  import "../chunk-3ZVUNSFF.js";
7
+ import "../chunk-7XSCEHGA.js";
9
8
  import "../chunk-MTEQEPNY.js";
9
+ import "../chunk-6ZZGK5DT.js";
10
10
  import "../chunk-XOXXG7Q5.js";
11
11
  import "../chunk-XJAD6E3V.js";
12
12
  import "../chunk-F5H2ZXST.js";
@@ -1,11 +1,11 @@
1
1
  import "../chunk-5AK2EZG5.js";
2
2
  import {
3
3
  Badge
4
- } from "../chunk-6DO672AG.js";
4
+ } from "../chunk-N5PVD4J5.js";
5
+ import "../chunk-6C5D6O3D.js";
5
6
  import "../chunk-ZNCYCE7L.js";
6
7
  import "../chunk-2L3VRVRE.js";
7
8
  import "../chunk-BJE3XHD4.js";
8
- import "../chunk-6C5D6O3D.js";
9
9
  import "../chunk-3UIDKLML.js";
10
10
  import "../chunk-PYC4CWCQ.js";
11
11
  import "../chunk-TYJR4GOF.js";
@@ -1,3 +1,9 @@
1
+ import {
2
+ useRowConfirm
3
+ } from "../chunk-G6NMSBSQ.js";
4
+ import {
5
+ useRemoveConfirm
6
+ } from "../chunk-Y7BOP7VZ.js";
1
7
  import {
2
8
  rowActionsToMenuItems
3
9
  } from "../chunk-ZBXG6RVJ.js";
@@ -8,38 +14,32 @@ import {
8
14
  Ledger,
9
15
  TagList
10
16
  } from "../chunk-JOKWTRWL.js";
11
- import {
12
- CardKebab
13
- } from "../chunk-R2ODLE6G.js";
14
- import {
15
- useRowConfirm
16
- } from "../chunk-N557OEZR.js";
17
- import {
18
- useRemoveConfirm
19
- } from "../chunk-DBPFKGXX.js";
20
17
  import {
21
18
  CardActionsProvider,
22
19
  useCardActions
23
- } from "../chunk-FQNDJITD.js";
20
+ } from "../chunk-RCTHCXS6.js";
21
+ import {
22
+ CardKebab
23
+ } from "../chunk-R2ODLE6G.js";
24
24
  import "../chunk-WVML3ENZ.js";
25
25
  import "../chunk-AY5GKCH7.js";
26
26
  import "../chunk-XCBQXSTR.js";
27
- import "../chunk-T5RFH2T5.js";
28
- import "../chunk-BNBWUXT3.js";
29
- import "../chunk-ALOEOGQV.js";
30
- import "../chunk-7W5X3KQ2.js";
27
+ import "../chunk-KOGJBAFI.js";
28
+ import "../chunk-3TZUZXY5.js";
29
+ import "../chunk-TE6HAWDM.js";
30
+ import "../chunk-SW7JCF4Z.js";
31
31
  import "../chunk-EMYESBIT.js";
32
32
  import "../chunk-LZRVUOMU.js";
33
33
  import "../chunk-EEB66IVH.js";
34
34
  import "../chunk-NUGT7LMR.js";
35
- import "../chunk-PEAUGQKU.js";
35
+ import "../chunk-NQCTANF3.js";
36
+ import "../chunk-L5RS6QAT.js";
36
37
  import "../chunk-QXUXO22M.js";
37
38
  import "../chunk-7HZ36QDH.js";
38
- import "../chunk-L5RS6QAT.js";
39
39
  import "../chunk-L7VH6IMR.js";
40
40
  import "../chunk-2IBFEHIX.js";
41
- import "../chunk-ZYZPSBNQ.js";
42
- import "../chunk-COK65GX2.js";
41
+ import "../chunk-OGSTMHT6.js";
42
+ import "../chunk-KURE5R7Z.js";
43
43
  import "../chunk-5ZY3IIIG.js";
44
44
  import "../chunk-6DPAWXZ3.js";
45
45
  import "../chunk-BA4RHQ3B.js";
@@ -1,16 +1,16 @@
1
1
  import "../chunk-62FET2BM.js";
2
2
  import {
3
3
  Carousel
4
- } from "../chunk-U2SAW6DH.js";
4
+ } from "../chunk-GY53SDVL.js";
5
+ import "../chunk-TB5CRHTF.js";
5
6
  import "../chunk-Z64TMGYT.js";
6
7
  import "../chunk-6FDLBWTE.js";
7
- import "../chunk-RUIV5TVA.js";
8
- import "../chunk-TB5CRHTF.js";
9
8
  import {
10
9
  CarouselArrows,
11
10
  CarouselIndicators,
12
11
  CarouselThumbnails
13
12
  } from "../chunk-M2M4IDFU.js";
13
+ import "../chunk-RUIV5TVA.js";
14
14
  import "../chunk-ARGVUTTL.js";
15
15
  import "../chunk-PZS7N74L.js";
16
16
  import "../chunk-AA2X5GOT.js";