@arbidocs/blocks 0.5.106 → 0.5.107

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 (249) hide show
  1. package/README.md +60 -6
  2. package/dist/{ConnectedCallDock-P7LK2HYF.cjs → ConnectedCallDock-H3WWFGXF.cjs} +8 -8
  3. package/dist/{ConnectedCallDock-P7LK2HYF.cjs.map → ConnectedCallDock-H3WWFGXF.cjs.map} +1 -1
  4. package/dist/{ConnectedCallDock-NEZJNTKH.js → ConnectedCallDock-TDYRHPAK.js} +6 -6
  5. package/dist/{ConnectedCallDock-NEZJNTKH.js.map → ConnectedCallDock-TDYRHPAK.js.map} +1 -1
  6. package/dist/{ConnectedCallRoom-FXTR4YFI.cjs → ConnectedCallRoom-55O5OUN7.cjs} +7 -7
  7. package/dist/{ConnectedCallRoom-FXTR4YFI.cjs.map → ConnectedCallRoom-55O5OUN7.cjs.map} +1 -1
  8. package/dist/{ConnectedCallRoom-K3X6ICCG.js → ConnectedCallRoom-Z6F6WCLH.js} +6 -6
  9. package/dist/{ConnectedCallRoom-K3X6ICCG.js.map → ConnectedCallRoom-Z6F6WCLH.js.map} +1 -1
  10. package/dist/{ConnectedNativeDocxComparison-7VJKOKYU.cjs → ConnectedNativeDocxComparison-DGBZJ4XA.cjs} +10 -10
  11. package/dist/{ConnectedNativeDocxComparison-7VJKOKYU.cjs.map → ConnectedNativeDocxComparison-DGBZJ4XA.cjs.map} +1 -1
  12. package/dist/{ConnectedNativeDocxComparison-FENZYWDH.js → ConnectedNativeDocxComparison-NVZRVNOS.js} +9 -9
  13. package/dist/{ConnectedNativeDocxComparison-FENZYWDH.js.map → ConnectedNativeDocxComparison-NVZRVNOS.js.map} +1 -1
  14. package/dist/{ConnectedNativeDocxEditor-HB5BHGZ2.cjs → ConnectedNativeDocxEditor-R4WINUUB.cjs} +10 -10
  15. package/dist/{ConnectedNativeDocxEditor-HB5BHGZ2.cjs.map → ConnectedNativeDocxEditor-R4WINUUB.cjs.map} +1 -1
  16. package/dist/{ConnectedNativeDocxEditor-CNQAMO2N.js → ConnectedNativeDocxEditor-RSVBN7DY.js} +8 -8
  17. package/dist/{ConnectedNativeDocxEditor-CNQAMO2N.js.map → ConnectedNativeDocxEditor-RSVBN7DY.js.map} +1 -1
  18. package/dist/{ConnectedProductionSetDialog-O4FWTZNF.js → ConnectedProductionSetDialog-2DFBXE2X.js} +5 -5
  19. package/dist/{ConnectedProductionSetDialog-O4FWTZNF.js.map → ConnectedProductionSetDialog-2DFBXE2X.js.map} +1 -1
  20. package/dist/{ConnectedProductionSetDialog-ENAIZWPK.cjs → ConnectedProductionSetDialog-KYDPQ7SG.cjs} +6 -6
  21. package/dist/{ConnectedProductionSetDialog-ENAIZWPK.cjs.map → ConnectedProductionSetDialog-KYDPQ7SG.cjs.map} +1 -1
  22. package/dist/{ConnectedStreamedWordArtifact-ILMKFCDC.js → ConnectedStreamedWordArtifact-HLJ5IIOU.js} +9 -9
  23. package/dist/ConnectedStreamedWordArtifact-HLJ5IIOU.js.map +1 -0
  24. package/dist/{ConnectedStreamedWordArtifact-BF6JET2D.cjs → ConnectedStreamedWordArtifact-JQ34AOUU.cjs} +10 -10
  25. package/dist/ConnectedStreamedWordArtifact-JQ34AOUU.cjs.map +1 -0
  26. package/dist/{DocumentReviewCard-UOLXZKZE.js → DocumentReviewCard-7JSXRJZ2.js} +6 -6
  27. package/dist/{DocumentReviewCard-UOLXZKZE.js.map → DocumentReviewCard-7JSXRJZ2.js.map} +1 -1
  28. package/dist/{DocumentReviewCard-QVQ2LGFH.cjs → DocumentReviewCard-C4HVT3WM.cjs} +8 -8
  29. package/dist/{DocumentReviewCard-QVQ2LGFH.cjs.map → DocumentReviewCard-C4HVT3WM.cjs.map} +1 -1
  30. package/dist/{FilesViewerDialog-5ELQYWAZ.js → FilesViewerDialog-IMQTZWKD.js} +16 -16
  31. package/dist/{FilesViewerDialog-5ELQYWAZ.js.map → FilesViewerDialog-IMQTZWKD.js.map} +1 -1
  32. package/dist/{FilesViewerDialog-XNGHHWYS.cjs → FilesViewerDialog-UP7GFHYN.cjs} +23 -23
  33. package/dist/{FilesViewerDialog-XNGHHWYS.cjs.map → FilesViewerDialog-UP7GFHYN.cjs.map} +1 -1
  34. package/dist/{RechartsRenderer-EJRIFAAP.js → RechartsRenderer-23OF4H6X.js} +3 -3
  35. package/dist/{RechartsRenderer-EJRIFAAP.js.map → RechartsRenderer-23OF4H6X.js.map} +1 -1
  36. package/dist/{RechartsRenderer-CNFQ5EHF.cjs → RechartsRenderer-GIRCW7DB.cjs} +4 -4
  37. package/dist/{RechartsRenderer-CNFQ5EHF.cjs.map → RechartsRenderer-GIRCW7DB.cjs.map} +1 -1
  38. package/dist/{WorkspaceTableView-HRCV6WR7.cjs → WorkspaceTableView-PJM47B5F.cjs} +8 -8
  39. package/dist/{WorkspaceTableView-HRCV6WR7.cjs.map → WorkspaceTableView-PJM47B5F.cjs.map} +1 -1
  40. package/dist/{WorkspaceTableView-DIMTW5P5.js → WorkspaceTableView-YDA7A4UJ.js} +6 -6
  41. package/dist/{WorkspaceTableView-DIMTW5P5.js.map → WorkspaceTableView-YDA7A4UJ.js.map} +1 -1
  42. package/dist/{ai-E6FA4Y4J.cjs → ai-ADS6YSS2.cjs} +17 -17
  43. package/dist/ai-ADS6YSS2.cjs.map +1 -0
  44. package/dist/{ai-WASSGEMI.js → ai-KHWTGBT5.js} +9 -9
  45. package/dist/ai-KHWTGBT5.js.map +1 -0
  46. package/dist/auth/index.cjs +32 -32
  47. package/dist/auth/index.js +1 -1
  48. package/dist/calls/index.cjs +49 -49
  49. package/dist/calls/index.js +10 -10
  50. package/dist/{chunk-VJAMDAR6.cjs → chunk-22KAKJ3W.cjs} +4 -4
  51. package/dist/{chunk-VJAMDAR6.cjs.map → chunk-22KAKJ3W.cjs.map} +1 -1
  52. package/dist/{chunk-DEIF2VAA.js → chunk-3GFQNJYE.js} +3 -3
  53. package/dist/{chunk-DEIF2VAA.js.map → chunk-3GFQNJYE.js.map} +1 -1
  54. package/dist/{chunk-LUO46ELJ.cjs → chunk-3YZKDCWY.cjs} +2 -2
  55. package/dist/chunk-3YZKDCWY.cjs.map +1 -0
  56. package/dist/{chunk-5OUOPKGE.cjs → chunk-45OU2UAA.cjs} +18 -18
  57. package/dist/{chunk-5OUOPKGE.cjs.map → chunk-45OU2UAA.cjs.map} +1 -1
  58. package/dist/{chunk-JXKNPKU6.cjs → chunk-4CIVQWAX.cjs} +4 -4
  59. package/dist/{chunk-JXKNPKU6.cjs.map → chunk-4CIVQWAX.cjs.map} +1 -1
  60. package/dist/{chunk-VOI26MXJ.cjs → chunk-5AC52BHL.cjs} +16 -16
  61. package/dist/{chunk-VOI26MXJ.cjs.map → chunk-5AC52BHL.cjs.map} +1 -1
  62. package/dist/{chunk-OG3TI5GX.js → chunk-6M5NAAWX.js} +47 -5
  63. package/dist/chunk-6M5NAAWX.js.map +1 -0
  64. package/dist/{chunk-IIUEDF3F.js → chunk-6ZYOUT73.js} +7 -7
  65. package/dist/{chunk-IIUEDF3F.js.map → chunk-6ZYOUT73.js.map} +1 -1
  66. package/dist/{chunk-TRI3LQVR.js → chunk-7S7YVBFK.js} +5 -5
  67. package/dist/{chunk-TRI3LQVR.js.map → chunk-7S7YVBFK.js.map} +1 -1
  68. package/dist/{chunk-QN5GTCPB.cjs → chunk-7V4OCZS6.cjs} +8 -8
  69. package/dist/{chunk-QN5GTCPB.cjs.map → chunk-7V4OCZS6.cjs.map} +1 -1
  70. package/dist/{chunk-S7NJVJJX.cjs → chunk-AHMRYY7J.cjs} +25 -25
  71. package/dist/{chunk-S7NJVJJX.cjs.map → chunk-AHMRYY7J.cjs.map} +1 -1
  72. package/dist/{chunk-GK5BMDS6.js → chunk-AVGHTUPE.js} +4 -4
  73. package/dist/{chunk-GK5BMDS6.js.map → chunk-AVGHTUPE.js.map} +1 -1
  74. package/dist/{chunk-RAYNCZ7O.js → chunk-AZCMKGDG.js} +3 -3
  75. package/dist/{chunk-RAYNCZ7O.js.map → chunk-AZCMKGDG.js.map} +1 -1
  76. package/dist/{chunk-IJVU5MZA.js → chunk-BAUZUIHB.js} +5 -5
  77. package/dist/{chunk-IJVU5MZA.js.map → chunk-BAUZUIHB.js.map} +1 -1
  78. package/dist/{chunk-2VHZUSFW.js → chunk-BBWLFK3C.js} +3 -3
  79. package/dist/{chunk-2VHZUSFW.js.map → chunk-BBWLFK3C.js.map} +1 -1
  80. package/dist/{chunk-MW7FGIF4.cjs → chunk-BFVCYBND.cjs} +9 -9
  81. package/dist/{chunk-MW7FGIF4.cjs.map → chunk-BFVCYBND.cjs.map} +1 -1
  82. package/dist/{chunk-7ONU7EWY.js → chunk-BH6IKGZ3.js} +5 -5
  83. package/dist/{chunk-7ONU7EWY.js.map → chunk-BH6IKGZ3.js.map} +1 -1
  84. package/dist/{chunk-RNX5LAQK.cjs → chunk-C42WBPH4.cjs} +7 -7
  85. package/dist/{chunk-RNX5LAQK.cjs.map → chunk-C42WBPH4.cjs.map} +1 -1
  86. package/dist/{chunk-LM5CPXJO.cjs → chunk-CRLFLMTK.cjs} +19 -13
  87. package/dist/chunk-CRLFLMTK.cjs.map +1 -0
  88. package/dist/{chunk-CWC6W2NE.cjs → chunk-D35EHOK5.cjs} +11 -11
  89. package/dist/{chunk-CWC6W2NE.cjs.map → chunk-D35EHOK5.cjs.map} +1 -1
  90. package/dist/{chunk-BMHW7WTF.js → chunk-DBKZANTC.js} +4 -4
  91. package/dist/{chunk-BMHW7WTF.js.map → chunk-DBKZANTC.js.map} +1 -1
  92. package/dist/{chunk-Q5U6Y2NO.js → chunk-E2P4JJLJ.js} +4 -45
  93. package/dist/chunk-E2P4JJLJ.js.map +1 -0
  94. package/dist/{chunk-D3GZWKHW.cjs → chunk-EKSHUNJI.cjs} +9 -9
  95. package/dist/{chunk-D3GZWKHW.cjs.map → chunk-EKSHUNJI.cjs.map} +1 -1
  96. package/dist/{chunk-5XQNXDST.js → chunk-FPOKWML2.js} +18 -5
  97. package/dist/chunk-FPOKWML2.js.map +1 -0
  98. package/dist/{chunk-M4TM3K52.cjs → chunk-FSXQHEFQ.cjs} +16 -16
  99. package/dist/{chunk-M4TM3K52.cjs.map → chunk-FSXQHEFQ.cjs.map} +1 -1
  100. package/dist/{chunk-35BADIIF.cjs → chunk-GX75YCWJ.cjs} +23 -23
  101. package/dist/{chunk-35BADIIF.cjs.map → chunk-GX75YCWJ.cjs.map} +1 -1
  102. package/dist/{chunk-7IF3E3I2.cjs → chunk-I7CJDF3V.cjs} +4 -4
  103. package/dist/{chunk-7IF3E3I2.cjs.map → chunk-I7CJDF3V.cjs.map} +1 -1
  104. package/dist/{chunk-KYLQRS3O.js → chunk-IHOV6OTA.js} +4 -4
  105. package/dist/{chunk-KYLQRS3O.js.map → chunk-IHOV6OTA.js.map} +1 -1
  106. package/dist/{chunk-OXHAZN43.cjs → chunk-IXL2KJOZ.cjs} +26 -26
  107. package/dist/{chunk-OXHAZN43.cjs.map → chunk-IXL2KJOZ.cjs.map} +1 -1
  108. package/dist/{chunk-632JXVXY.js → chunk-KIXFXCHL.js} +15 -9
  109. package/dist/chunk-KIXFXCHL.js.map +1 -0
  110. package/dist/{chunk-PIWT2GCY.cjs → chunk-LFYKB7KF.cjs} +15 -15
  111. package/dist/{chunk-PIWT2GCY.cjs.map → chunk-LFYKB7KF.cjs.map} +1 -1
  112. package/dist/{chunk-7Q6EVFMT.js → chunk-LYW5A35J.js} +9 -9
  113. package/dist/{chunk-7Q6EVFMT.js.map → chunk-LYW5A35J.js.map} +1 -1
  114. package/dist/chunk-NFK2SEUD.js +577 -0
  115. package/dist/chunk-NFK2SEUD.js.map +1 -0
  116. package/dist/{chunk-TJQMC7GJ.cjs → chunk-NNBL3HPG.cjs} +4 -4
  117. package/dist/{chunk-TJQMC7GJ.cjs.map → chunk-NNBL3HPG.cjs.map} +1 -1
  118. package/dist/{chunk-Y5P5ZMHQ.js → chunk-NWBCZ4PA.js} +4 -4
  119. package/dist/{chunk-Y5P5ZMHQ.js.map → chunk-NWBCZ4PA.js.map} +1 -1
  120. package/dist/{chunk-5UMZXDGL.cjs → chunk-O27K7KTZ.cjs} +161 -7
  121. package/dist/chunk-O27K7KTZ.cjs.map +1 -0
  122. package/dist/{chunk-GARDQALH.js → chunk-OLAYDOPC.js} +5 -5
  123. package/dist/{chunk-GARDQALH.js.map → chunk-OLAYDOPC.js.map} +1 -1
  124. package/dist/chunk-ORELHENJ.cjs +594 -0
  125. package/dist/chunk-ORELHENJ.cjs.map +1 -0
  126. package/dist/{chunk-NUOMPVKQ.js → chunk-OWHO2TO3.js} +3 -3
  127. package/dist/{chunk-NUOMPVKQ.js.map → chunk-OWHO2TO3.js.map} +1 -1
  128. package/dist/{chunk-6XNWGOS3.cjs → chunk-PHDUN4SG.cjs} +187 -80
  129. package/dist/chunk-PHDUN4SG.cjs.map +1 -0
  130. package/dist/{chunk-KGUBKE3V.cjs → chunk-PL7O3RJJ.cjs} +48 -4
  131. package/dist/chunk-PL7O3RJJ.cjs.map +1 -0
  132. package/dist/{chunk-BH4MK2J5.js → chunk-QG6MRLZG.js} +2 -2
  133. package/dist/chunk-QG6MRLZG.js.map +1 -0
  134. package/dist/{chunk-YPTZNQPJ.cjs → chunk-RCZRI72J.cjs} +4 -4
  135. package/dist/{chunk-YPTZNQPJ.cjs.map → chunk-RCZRI72J.cjs.map} +1 -1
  136. package/dist/{chunk-E7STRFBT.cjs → chunk-SCLGUHLU.cjs} +4 -4
  137. package/dist/{chunk-E7STRFBT.cjs.map → chunk-SCLGUHLU.cjs.map} +1 -1
  138. package/dist/{chunk-EOTJX536.js → chunk-T5ZMG6MC.js} +3 -3
  139. package/dist/{chunk-EOTJX536.js.map → chunk-T5ZMG6MC.js.map} +1 -1
  140. package/dist/{chunk-LWEX3AOZ.js → chunk-TG4IICWO.js} +4 -4
  141. package/dist/{chunk-LWEX3AOZ.js.map → chunk-TG4IICWO.js.map} +1 -1
  142. package/dist/{chunk-ET3W24JV.js → chunk-TNKPQ3EF.js} +9 -9
  143. package/dist/{chunk-ET3W24JV.js.map → chunk-TNKPQ3EF.js.map} +1 -1
  144. package/dist/{chunk-QFKL4HV2.js → chunk-U5F5P4YU.js} +118 -15
  145. package/dist/chunk-U5F5P4YU.js.map +1 -0
  146. package/dist/{chunk-N52PBUAP.cjs → chunk-U6LQ6Z3P.cjs} +10 -10
  147. package/dist/{chunk-N52PBUAP.cjs.map → chunk-U6LQ6Z3P.cjs.map} +1 -1
  148. package/dist/{chunk-JNVJQCGF.cjs → chunk-UCA4JLLJ.cjs} +4 -4
  149. package/dist/{chunk-JNVJQCGF.cjs.map → chunk-UCA4JLLJ.cjs.map} +1 -1
  150. package/dist/{chunk-3RUQHIDC.js → chunk-UQ2OBHMV.js} +7 -7
  151. package/dist/{chunk-3RUQHIDC.js.map → chunk-UQ2OBHMV.js.map} +1 -1
  152. package/dist/{chunk-VYJF4ZQY.cjs → chunk-V6C2MBFY.cjs} +3 -2
  153. package/dist/chunk-V6C2MBFY.cjs.map +1 -0
  154. package/dist/{chunk-O4X7HXLF.cjs → chunk-VCEX7COE.cjs} +2 -45
  155. package/dist/chunk-VCEX7COE.cjs.map +1 -0
  156. package/dist/{chunk-QTSNHGSI.js → chunk-WFM6E7DD.js} +3 -3
  157. package/dist/{chunk-QTSNHGSI.js.map → chunk-WFM6E7DD.js.map} +1 -1
  158. package/dist/{chunk-SY2WD6VA.cjs → chunk-WI3BVKEC.cjs} +5 -5
  159. package/dist/{chunk-SY2WD6VA.cjs.map → chunk-WI3BVKEC.cjs.map} +1 -1
  160. package/dist/{chunk-LWCLAAEX.js → chunk-WJHRWXWJ.js} +3 -3
  161. package/dist/{chunk-LWCLAAEX.js.map → chunk-WJHRWXWJ.js.map} +1 -1
  162. package/dist/{chunk-FVZ2CN4A.js → chunk-WQH2WWZE.js} +3 -2
  163. package/dist/chunk-WQH2WWZE.js.map +1 -0
  164. package/dist/{chunk-V2CKYM4B.cjs → chunk-XHN5KOI2.cjs} +9 -9
  165. package/dist/{chunk-V2CKYM4B.cjs.map → chunk-XHN5KOI2.cjs.map} +1 -1
  166. package/dist/{chunk-DBHBJIF4.js → chunk-YJWAGXYM.js} +3 -3
  167. package/dist/{chunk-DBHBJIF4.js.map → chunk-YJWAGXYM.js.map} +1 -1
  168. package/dist/{chunk-KUI2IC7W.js → chunk-YLKHTBYA.js} +3 -3
  169. package/dist/{chunk-KUI2IC7W.js.map → chunk-YLKHTBYA.js.map} +1 -1
  170. package/dist/{chunk-73FJ6L6I.cjs → chunk-ZMVF7EYJ.cjs} +18 -5
  171. package/dist/chunk-ZMVF7EYJ.cjs.map +1 -0
  172. package/dist/{chunk-CEVVGJQX.js → chunk-ZNY5W3VX.js} +162 -9
  173. package/dist/chunk-ZNY5W3VX.js.map +1 -0
  174. package/dist/connect/docx.cjs +13 -13
  175. package/dist/connect/docx.js +9 -9
  176. package/dist/connect/index.cjs +1100 -884
  177. package/dist/connect/index.cjs.map +1 -1
  178. package/dist/connect/index.d.ts +1 -0
  179. package/dist/connect/index.js +475 -274
  180. package/dist/connect/index.js.map +1 -1
  181. package/dist/connect/viewer.cjs +12 -12
  182. package/dist/connect/viewer.js +10 -10
  183. package/dist/connection/account-cluster/ConnectedAccountCluster.d.ts +1 -1
  184. package/dist/connection/dashboards/ConnectedDashboardsPage.d.ts +13 -2
  185. package/dist/connection/dashboards/index.d.ts +1 -1
  186. package/dist/connection/dashboards/templates.d.ts +14 -3
  187. package/dist/connection/remote-control/ConnectedRemoteControlConsent.d.ts +17 -0
  188. package/dist/connection/remote-control/ConnectedRemoteControlIndicator.d.ts +8 -0
  189. package/dist/connection/remote-control/ConnectedRemoteControlSwitch.d.ts +1 -0
  190. package/dist/connection/remote-control/index.d.ts +4 -0
  191. package/dist/connection/remote-control/remoteControl.d.ts +40 -0
  192. package/dist/connection/routes/useDeepLinkSync.d.ts +4 -1
  193. package/dist/connection/runtime/ConnectedAppRuntime.d.ts +1 -1
  194. package/dist/connection/settings-page/settingsSections.d.ts +1 -1
  195. package/dist/connection/tags/ConnectedTagTable.d.ts +1 -1
  196. package/dist/dashboards/index.cjs +327 -116
  197. package/dist/dashboards/index.cjs.map +1 -1
  198. package/dist/dashboards/index.js +311 -101
  199. package/dist/dashboards/index.js.map +1 -1
  200. package/dist/embed/index.cjs +21 -21
  201. package/dist/embed/index.js +14 -14
  202. package/dist/guided/GuidedCursor.d.ts +21 -0
  203. package/dist/guided/cursor.d.ts +56 -0
  204. package/dist/guided/index.d.ts +5 -0
  205. package/dist/guided/runner.d.ts +30 -0
  206. package/dist/guided/sequences.d.ts +80 -0
  207. package/dist/guided/surfaces.d.ts +13 -0
  208. package/dist/guided/useGuidedRuns.d.ts +3 -0
  209. package/dist/index.cjs +171 -135
  210. package/dist/index.d.ts +1 -0
  211. package/dist/index.js +7 -7
  212. package/dist/provider/host.d.ts +6 -0
  213. package/dist/settings/PlanBadge.d.ts +1 -1
  214. package/dist/settings/TipsEditor.d.ts +6 -3
  215. package/dist/settings/index.cjs +152 -151
  216. package/dist/settings/index.js +3 -2
  217. package/dist/shell/index.cjs +46 -46
  218. package/dist/shell/index.js +3 -3
  219. package/dist/studio/index.cjs +15 -15
  220. package/dist/studio/index.js +9 -9
  221. package/dist/styles.css +1 -1
  222. package/dist/workflow-canvas/index.cjs +25 -25
  223. package/dist/workflow-canvas/index.js +13 -13
  224. package/node_modules/@arbidocs/coedit/package.json +1 -1
  225. package/package.json +5 -5
  226. package/dist/ConnectedStreamedWordArtifact-BF6JET2D.cjs.map +0 -1
  227. package/dist/ConnectedStreamedWordArtifact-ILMKFCDC.js.map +0 -1
  228. package/dist/ai-E6FA4Y4J.cjs.map +0 -1
  229. package/dist/ai-WASSGEMI.js.map +0 -1
  230. package/dist/chunk-5UMZXDGL.cjs.map +0 -1
  231. package/dist/chunk-5XQNXDST.js.map +0 -1
  232. package/dist/chunk-632JXVXY.js.map +0 -1
  233. package/dist/chunk-6XNWGOS3.cjs.map +0 -1
  234. package/dist/chunk-73FJ6L6I.cjs.map +0 -1
  235. package/dist/chunk-BH4MK2J5.js.map +0 -1
  236. package/dist/chunk-C4TGESIB.cjs +0 -260
  237. package/dist/chunk-C4TGESIB.cjs.map +0 -1
  238. package/dist/chunk-CEVVGJQX.js.map +0 -1
  239. package/dist/chunk-FVZ2CN4A.js.map +0 -1
  240. package/dist/chunk-KGUBKE3V.cjs.map +0 -1
  241. package/dist/chunk-LM5CPXJO.cjs.map +0 -1
  242. package/dist/chunk-LUO46ELJ.cjs.map +0 -1
  243. package/dist/chunk-MHFWGIF4.js +0 -254
  244. package/dist/chunk-MHFWGIF4.js.map +0 -1
  245. package/dist/chunk-O4X7HXLF.cjs.map +0 -1
  246. package/dist/chunk-OG3TI5GX.js.map +0 -1
  247. package/dist/chunk-Q5U6Y2NO.js.map +0 -1
  248. package/dist/chunk-QFKL4HV2.js.map +0 -1
  249. package/dist/chunk-VYJF4ZQY.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shell/AccountBanners.tsx","../src/shell/use-install-prompt.ts","../src/shell/InstallPrompt.tsx","../src/shell/SplitLayout.tsx"],"names":["useState","jsx","jsxs","cn"],"mappings":"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","file":"chunk-E2P4JJLJ.js","sourcesContent":["import { canPersistSession } from '@arbidocs/client'\nimport { Banner } from '../components/Banner'\n\nexport const DEFAULT_INSECURE_SESSION_BANNER_TEXT =\n 'This connection is not secure (no HTTPS), so your session is kept in memory only and you will be signed out when you reload. Use https:// or localhost for a persistent, encrypted session.'\n\nexport interface InsecureSessionBannerProps {\n text?: string\n className?: string\n}\n\n/**\n * Shown whenever the browser has no Web Crypto (a plain-HTTP origin other than localhost,\n * Tracking Prevention, some embedded webviews). Encryption at rest needs a non-extractable key,\n * so the session is held in memory only: everything works, but a reload signs the user out. Said\n * out loud rather than silently degrading. Renders nothing in a secure context.\n */\nexport function InsecureSessionBanner({\n text = DEFAULT_INSECURE_SESSION_BANNER_TEXT,\n className,\n}: InsecureSessionBannerProps) {\n if (canPersistSession()) return null\n return (\n <Banner\n variant=\"alert\"\n tone=\"warning\"\n text={text}\n className={className}\n testId=\"insecure-context-banner\"\n />\n )\n}\n\nexport const DEFAULT_ACCOUNT_DELETION_BANNER_TEXT = (date: string) =>\n `Account deletion requested on ${date}. Your account and all data will be permanently deleted shortly.`\n\nexport interface AccountDeletionBannerProps {\n /** When the user asked for the deletion (ISO timestamp, the user setting `deletion_requested_at`). */\n requestedAt: string\n /** The notice, given the formatted request date. */\n text?: (date: string) => string\n className?: string\n}\n\n/** The account is due for deletion: a standing notice until it goes. */\nexport function AccountDeletionBanner({\n requestedAt,\n text = DEFAULT_ACCOUNT_DELETION_BANNER_TEXT,\n className,\n}: AccountDeletionBannerProps) {\n const date = new Date(requestedAt).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n })\n return (\n <Banner\n variant=\"alert\"\n tone=\"destructive\"\n text={text(date)}\n className={className}\n testId=\"account-deletion-banner\"\n />\n )\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport { getInstallInstructions, isIosDevice, type InstallGuide } from './install-instructions'\n\n/** Non-standard Chromium event, not in lib.dom types. */\ninterface BeforeInstallPromptEvent extends Event {\n readonly platforms: string[]\n readonly userChoice: Promise<{ outcome: 'accepted' | 'dismissed'; platform: string }>\n prompt(): Promise<void>\n}\n\nlet deferredPrompt: BeforeInstallPromptEvent | null = null\nlet installed = false\nlet initialized = false\nlet autoPromptParam: string | null = null\n\nconst subscribers = new Set<() => void>()\nconst notify = () => subscribers.forEach((fn) => fn())\n\nfunction isStandalone(): boolean {\n if (typeof window === 'undefined') return false\n const iosStandalone = (navigator as Navigator & { standalone?: boolean }).standalone === true\n return window.matchMedia?.('(display-mode: standalone)').matches === true || iosStandalone\n}\n\nfunction wantsAutoPrompt(): boolean {\n if (!autoPromptParam) return false\n return new URLSearchParams(window.location.search).get(autoPromptParam) === 'true'\n}\n\nfunction onBeforeInstallPrompt(event: Event): void {\n event.preventDefault()\n deferredPrompt = event as BeforeInstallPromptEvent\n notify()\n if (wantsAutoPrompt()) void promptAppInstall()\n}\n\nfunction onAppInstalled(): void {\n installed = true\n deferredPrompt = null\n notify()\n}\n\n/**\n * Begin capturing install events. Idempotent. Chromium fires `beforeinstallprompt` once, early,\n * usually before a lazy route has mounted, so call this at app startup (before the first render);\n * `useInstallPrompt` also calls it, which is enough when the hook mounts at the root.\n *\n * `options.autoPromptParam`: a share link `/?{param}=true` opens the native dialog as soon as the\n * browser is ready (Chromium).\n */\nexport function initInstallPrompt(options: { autoPromptParam?: string } = {}): void {\n if (options.autoPromptParam) autoPromptParam = options.autoPromptParam\n if (initialized || typeof window === 'undefined') return\n initialized = true\n installed = isStandalone()\n\n window.addEventListener('beforeinstallprompt', onBeforeInstallPrompt)\n window.addEventListener('appinstalled', onAppInstalled)\n}\n\n/**\n * Open the browser's install dialog if one was captured. Returns false when there is none (the\n * caller then shows {@link getInstallInstructions}). A captured prompt works once.\n */\nexport async function promptAppInstall(): Promise<boolean> {\n if (!deferredPrompt) return false\n const prompt = deferredPrompt\n deferredPrompt = null\n notify()\n try {\n await prompt.prompt()\n } catch {\n // The user dismissed it or the browser rejected it: nothing actionable.\n }\n return true\n}\n\n/** Default storage key of the remembered dismissal. */\nexport const INSTALL_PROMPT_DISMISSED_KEY = 'arbi-blocks:install-prompt-dismissed'\nconst DAY_MS = 24 * 60 * 60 * 1000\n\nfunction readDismissedAt(key: string): number | null {\n try {\n const raw = window.localStorage.getItem(key)\n const at = raw ? Number(raw) : NaN\n return Number.isFinite(at) ? at : null\n } catch {\n return null\n }\n}\n\nexport interface UseInstallPromptOptions {\n /** localStorage key remembering a dismissal. */\n storageKey?: string\n /** Days a dismissal is remembered. Default 30. */\n dismissDays?: number\n /** Query param that turns a share link into a one-click install (`install` for `?install=true`). */\n autoPromptParam?: string\n /** App name used in the manual instructions. */\n appName?: string\n}\n\nexport interface UseInstallPromptResult {\n /** A native install dialog can be opened right now (Chromium, once the event fired). */\n canPrompt: boolean\n /** Running as an installed app, or `appinstalled` fired. */\n isInstalled: boolean\n /** iOS has no install API: offer manual instructions instead. */\n isIos: boolean\n /** The user dismissed the offer (remembered across visits). */\n isDismissed: boolean\n /** Open the native dialog; false when none is available. */\n promptInstall: () => Promise<boolean>\n /** Hide the offer and remember it. */\n dismiss: () => void\n /** Manual steps for this browser. */\n instructions: InstallGuide\n}\n\n/** The install state of the app, framework-neutral logic behind `InstallPrompt`. */\nexport function useInstallPrompt({\n storageKey = INSTALL_PROMPT_DISMISSED_KEY,\n dismissDays = 30,\n autoPromptParam: autoParam,\n appName,\n}: UseInstallPromptOptions = {}): UseInstallPromptResult {\n const [, forceRender] = useState(0)\n const [dismissedAt, setDismissedAt] = useState<number | null>(() =>\n typeof window === 'undefined' ? null : readDismissedAt(storageKey)\n )\n\n useEffect(() => {\n initInstallPrompt({ autoPromptParam: autoParam })\n const onChange = () => forceRender((n) => n + 1)\n subscribers.add(onChange)\n // The singleton may have started before this mount: pick up the current state.\n onChange()\n return () => {\n subscribers.delete(onChange)\n }\n }, [autoParam])\n\n const dismiss = useCallback(() => {\n const now = Date.now()\n setDismissedAt(now)\n try {\n window.localStorage.setItem(storageKey, String(now))\n } catch {\n // Storage blocked: the dismissal lasts for this page view only.\n }\n }, [storageKey])\n\n const isDismissed = dismissedAt !== null && Date.now() - dismissedAt < dismissDays * DAY_MS\n const isInstalled = installed || isStandalone()\n return {\n canPrompt: !isInstalled && deferredPrompt !== null,\n isInstalled,\n isIos: isIosDevice(),\n isDismissed,\n promptInstall: promptAppInstall,\n dismiss,\n instructions: getInstallInstructions({ appName }),\n }\n}\n\n/** Test seam: forget captured state (the singleton lives for the page). */\nexport function resetInstallPromptForTests(): void {\n if (typeof window !== 'undefined') {\n window.removeEventListener('beforeinstallprompt', onBeforeInstallPrompt)\n window.removeEventListener('appinstalled', onAppInstalled)\n }\n deferredPrompt = null\n installed = false\n initialized = false\n autoPromptParam = null\n subscribers.clear()\n}\n","import { useState } from 'react'\nimport { Download, X } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\nimport { useInstallPrompt, type UseInstallPromptOptions } from './use-install-prompt'\n\n/** Fixed strings of the install prompt. */\nexport interface InstallPromptLabels {\n /** The pill's text. */\n install: string\n /** The dismiss button's accessible name. */\n dismiss: string\n /** Accessible name of the pill (`{app}` is replaced by `appName`). */\n installAs: string\n}\n\nexport const DEFAULT_INSTALL_PROMPT_LABELS: InstallPromptLabels = {\n install: 'Install app',\n dismiss: 'Dismiss install prompt',\n installAs: 'Install {app} as an app',\n}\n\nexport interface InstallPromptProps extends UseInstallPromptOptions {\n labels?: Partial<InstallPromptLabels>\n className?: string\n 'data-testid'?: string\n}\n\n/**\n * A small floating \"Install app\" pill. Renders only while the app can be installed (the browser\n * fired `beforeinstallprompt`, or on iOS where it shows the Add to Home Screen steps), is not\n * already installed, and was not dismissed (the dismissal is remembered for `dismissDays`).\n *\n * It sits above whatever is pinned to the bottom of the screen: it reads `--shell-bottom-inset`\n * (set by `MobileTabBar` and the chat composer, see `useShellBottomInset`) plus the device\n * safe area, so it never covers the tab bar or the composer. It sits in the bottom start corner\n * (clear of a bottom-right toaster) and clears a docked `Sidebar` (`--shell-start-inset`). Both\n * controls are 44px tall on a phone.\n */\nexport function InstallPrompt({\n labels,\n className,\n 'data-testid': testId,\n ...options\n}: InstallPromptProps) {\n const l = { ...DEFAULT_INSTALL_PROMPT_LABELS, ...labels }\n const install = useInstallPrompt(options)\n const [showSteps, setShowSteps] = useState(false)\n\n const isOffer = install.canPrompt || install.isIos\n if (install.isInstalled || install.isDismissed || !isOffer) return null\n\n const appName = options.appName ?? 'this app'\n const onInstall = async () => {\n if (install.canPrompt) await install.promptInstall()\n else setShowSteps((open) => !open)\n }\n\n return (\n <div\n data-slot=\"install-prompt\"\n data-testid={testIdOr(testId, { testId: 'install-app-prompt' })}\n className={cn(\n 'fixed z-30 flex max-w-[calc(100vw-1.5rem)] flex-col gap-2',\n // Above the bottom bars (tab bar / composer) and the home indicator on a phone, a plain\n // corner offset from `sm` up where the tab bar is gone.\n 'bottom-[calc(max(var(--shell-bottom-inset,0px),env(safe-area-inset-bottom,0px))+0.75rem)] sm:bottom-[calc(env(safe-area-inset-bottom,0px)+0.75rem)]',\n // From `sm` up, clear of a docked sidebar (its footer holds the account menu).\n 'left-3 items-start sm:left-[calc(var(--shell-start-inset,0px)+0.75rem)]',\n className\n )}\n >\n {showSteps && (\n <div\n data-slot=\"install-prompt-steps\"\n className=\"w-72 max-w-full rounded-lg border border-border bg-card p-3 text-sm text-card-foreground shadow-lg\"\n >\n <p className=\"font-medium\">{install.instructions.heading}</p>\n <ol className=\"mt-2 list-decimal space-y-1 pl-5 text-muted-foreground\">\n {install.instructions.steps.map((step) => (\n <li key={step}>{step}</li>\n ))}\n </ol>\n </div>\n )}\n <div className=\"inline-flex items-center rounded-full border border-border bg-card/95 text-foreground shadow-sm backdrop-blur\">\n <button\n type=\"button\"\n onClick={() => void onInstall()}\n aria-label={l.installAs.replace('{app}', appName)}\n aria-expanded={install.canPrompt ? undefined : showSteps}\n data-slot=\"install-prompt-action\"\n className=\"inline-flex min-h-11 items-center gap-1.5 rounded-full pl-4 pr-2 text-xs font-medium transition-colors hover:bg-accent sm:min-h-9 sm:pl-3\"\n >\n <Download className=\"size-3.5\" aria-hidden=\"true\" />\n {l.install}\n </button>\n <button\n type=\"button\"\n onClick={install.dismiss}\n aria-label={l.dismiss}\n data-slot=\"install-prompt-dismiss\"\n className=\"inline-flex size-11 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground sm:size-9\"\n >\n <X className=\"size-3.5\" aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface SplitLayoutProps {\n /** The main pane (the detail, the form, the transcript): takes the remaining width. */\n primary: ReactNode\n /**\n * The side pane (the picker, the launcher): 20rem wide at the start once side by side, on top\n * when stacked.\n */\n secondary: ReactNode\n className?: string\n primaryClassName?: string\n secondaryClassName?: string\n testId?: string\n}\n\n/**\n * Two panes (list and detail, form and preview) that stack by the width of their CONTAINER,\n * not the viewport: side by side from 48rem of container width, stacked below. Inside\n * `Shell.Content` / `PageContainer` (both are containers) an open dock or a narrow window\n * therefore stacks the panes instead of squeezing the main one to a sliver. Every pane has\n * `min-w-0`, so long words and wide tables shrink instead of stretching the grid.\n */\nexport function SplitLayout({\n primary,\n secondary,\n className,\n primaryClassName,\n secondaryClassName,\n testId = 'split-layout',\n}: SplitLayoutProps) {\n return (\n <div\n data-slot=\"split-layout\"\n data-testid={testId}\n className={cn('flex flex-col gap-6 @3xl:flex-row @3xl:items-start', className)}\n >\n <div\n data-slot=\"split-secondary\"\n className={cn('min-w-0 @3xl:w-80 @3xl:shrink-0', secondaryClassName)}\n >\n {secondary}\n </div>\n <div data-slot=\"split-primary\" className={cn('min-w-0 @3xl:flex-1', primaryClassName)}>\n {primary}\n </div>\n </div>\n )\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkTJQMC7GJ_cjs = require('./chunk-TJQMC7GJ.cjs');
5
- var chunkLUO46ELJ_cjs = require('./chunk-LUO46ELJ.cjs');
4
+ var chunkNNBL3HPG_cjs = require('./chunk-NNBL3HPG.cjs');
5
+ var chunk3YZKDCWY_cjs = require('./chunk-3YZKDCWY.cjs');
6
6
  var react$1 = require('react');
7
7
  var react = require('@arbidocs/react');
8
8
 
@@ -10,7 +10,7 @@ function isListedDocument(document) {
10
10
  return document.wp_type !== "skill";
11
11
  }
12
12
  function useDocumentFilter() {
13
- return chunkLUO46ELJ_cjs.useHost().workspaceData?.documentFilter ?? isListedDocument;
13
+ return chunk3YZKDCWY_cjs.useHost().workspaceData?.documentFilter ?? isListedDocument;
14
14
  }
15
15
  function listedDocuments(documents, filter) {
16
16
  const kept = documents.filter(filter);
@@ -28,7 +28,7 @@ function useList(hosted, own) {
28
28
  );
29
29
  }
30
30
  function useConnectedDocuments() {
31
- const { workspaceId } = chunkTJQMC7GJ_cjs.useConnectedWorkspace();
31
+ const { workspaceId } = chunkNNBL3HPG_cjs.useConnectedWorkspace();
32
32
  const { data, isFetched } = react.useDocuments(workspaceId);
33
33
  return react$1.useMemo(
34
34
  () => ({ data: data ?? EMPTY, loaded: isFetched }),
@@ -41,14 +41,14 @@ function useListedDocuments() {
41
41
  return react$1.useMemo(() => ({ ...all, data: listedDocuments(all.data, filter) }), [all, filter]);
42
42
  }
43
43
  function useConnectedTags() {
44
- const useHosted = chunkLUO46ELJ_cjs.useHost().workspaceData?.useTags ?? NONE;
44
+ const useHosted = chunk3YZKDCWY_cjs.useHost().workspaceData?.useTags ?? NONE;
45
45
  const hosted = useHosted();
46
- const { workspaceId } = chunkTJQMC7GJ_cjs.useConnectedWorkspace();
46
+ const { workspaceId } = chunkNNBL3HPG_cjs.useConnectedWorkspace();
47
47
  const own = react.useTags(workspaceId ?? void 0, { enabled: !hosted });
48
48
  return useList(hosted, own);
49
49
  }
50
50
  function useConnectedConversations(options) {
51
- const { workspaceId } = chunkTJQMC7GJ_cjs.useConnectedWorkspace();
51
+ const { workspaceId } = chunkNNBL3HPG_cjs.useConnectedWorkspace();
52
52
  const { data, isFetched, refetch } = react.useConversations(workspaceId ?? void 0, {
53
53
  live: options?.live
54
54
  });
@@ -65,5 +65,5 @@ exports.useConnectedDocuments = useConnectedDocuments;
65
65
  exports.useConnectedTags = useConnectedTags;
66
66
  exports.useDocumentFilter = useDocumentFilter;
67
67
  exports.useListedDocuments = useListedDocuments;
68
- //# sourceMappingURL=chunk-D3GZWKHW.cjs.map
69
- //# sourceMappingURL=chunk-D3GZWKHW.cjs.map
68
+ //# sourceMappingURL=chunk-EKSHUNJI.cjs.map
69
+ //# sourceMappingURL=chunk-EKSHUNJI.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/workspaceData.ts"],"names":["useHost","useMemo","useConnectedWorkspace","useDocuments","useTags","useConversations"],"mappings":";;;;;;;AA8CO,SAAS,iBAAiB,QAAA,EAAgD;AAC/E,EAAA,OAAO,SAAS,OAAA,KAAY,OAAA;AAC9B;AAGO,SAAS,iBAAA,GAA8D;AAC5E,EAAA,OAAOA,yBAAA,EAAQ,CAAE,aAAA,EAAe,cAAA,IAAkB,gBAAA;AACpD;AAGO,SAAS,eAAA,CACd,WACA,MAAA,EACK;AAEL,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,MAAA,CAAO,MAA6C,CAAA;AAC3E,EAAA,OAAO,IAAA,CAAK,MAAA,KAAW,SAAA,CAAU,MAAA,GAAS,SAAA,GAAY,IAAA;AACxD;AAEA,IAAM,OAAO,MAAM,MAAA;AASnB,IAAM,QAAiB,EAAC;AAExB,SAAS,OAAA,CACP,QACA,GAAA,EACwB;AACxB,EAAA,MAAM,SAAS,MAAA,IAAU,GAAA;AACzB,EAAA,MAAM,IAAA,GAAO,OAAO,IAAA,IAAS,KAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,MAAA,GAAS,MAAA,CAAO,OAAA,GAAU,GAAA,CAAI,OAAA;AAC9C,EAAA,OAAOC,eAAA;AAAA,IACL,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,CAAO,WAAW,OAAA,EAAQ,CAAA;AAAA,IACjD,CAAC,IAAA,EAAM,MAAA,CAAO,SAAA,EAAW,OAAO;AAAA,GAClC;AACF;AAGO,SAAS,qBAAA,GAAgE;AAC9E,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIC,uCAAA,EAAsB;AAC9C,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAIC,mBAAa,WAAW,CAAA;AACpD,EAAA,OAAOF,eAAA;AAAA,IACL,OAAO,EAAE,IAAA,EAAM,IAAA,IAAS,KAAA,EAA+B,QAAQ,SAAA,EAAU,CAAA;AAAA,IACzE,CAAC,MAAM,SAAS;AAAA,GAClB;AACF;AAGO,SAAS,kBAAA,GAA6D;AAC3E,EAAA,MAAM,MAAM,qBAAA,EAAsB;AAClC,EAAA,MAAM,SAAS,iBAAA,EAAkB;AACjC,EAAA,OAAOA,eAAA,CAAQ,OAAO,EAAE,GAAG,KAAK,IAAA,EAAM,eAAA,CAAgB,GAAA,CAAI,IAAA,EAAM,MAAM,CAAA,EAAE,CAAA,EAAI,CAAC,GAAA,EAAK,MAAM,CAAC,CAAA;AAC3F;AAGO,SAAS,gBAAA,GAAsD;AACpE,EAAA,MAAM,SAAA,GAAYD,yBAAA,EAAQ,CAAE,aAAA,EAAe,OAAA,IAAW,IAAA;AACtD,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIE,uCAAA,EAAsB;AAC9C,EAAA,MAAM,GAAA,GAAME,cAAQ,WAAA,IAAe,MAAA,EAAW,EAAE,OAAA,EAAS,CAAC,QAAQ,CAAA;AAClE,EAAA,OAAO,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC5B;AAMO,SAAS,0BAA0B,OAAA,EAEQ;AAChD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIF,uCAAA,EAAsB;AAC9C,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,SAAQ,GAAIG,sBAAA,CAAiB,eAAe,MAAA,EAAW;AAAA,IAC9E,MAAM,OAAA,EAAS;AAAA,GAChB,CAAA;AACD,EAAA,OAAOJ,eAAA;AAAA,IACL,OAAO,EAAE,IAAA,EAAM,QAAS,KAAA,EAAsC,MAAA,EAAQ,WAAW,OAAA,EAAQ,CAAA;AAAA,IACzF,CAAC,IAAA,EAAM,SAAA,EAAW,OAAO;AAAA,GAC3B;AACF","file":"chunk-D3GZWKHW.cjs","sourcesContent":["/**\n * The open workspace's documents, tags and conversations for the connected kits. Each kit reads them\n * through the `@arbidocs/react` hooks: the documents from `useDocuments` (read once, progressively,\n * then patched in place by every write and event, so a kit never re-reads it) and the conversations\n * from `useConversations` (the one list every host and kit shares, patched by its writers). A host\n * that already keeps tags live in its own cache gives them once, as a hook in the host\n * configuration's `workspaceData`, so the kits show the same list and nothing is fetched twice.\n */\n\nimport { useMemo } from 'react'\nimport { useConversations, useDocuments, useTags } from '@arbidocs/react'\nimport { useConnectedWorkspace } from './ConnectionProvider'\nimport { useHost } from '../provider/host'\n\nexport type ConnectedDocument = NonNullable<ReturnType<typeof useDocuments>['data']>[number]\nexport type ConnectedTag = NonNullable<ReturnType<typeof useTags>['data']>[number]\nexport type ConnectedConversationRow = NonNullable<\n ReturnType<typeof useConversations>['data']\n>[number]\n\n/**\n * A list the host keeps: its rows, whether it has arrived, and how to read it again (absent: the\n * host keeps it current itself, so a kit never re-reads it).\n */\nexport interface ConnectedList<T> {\n data: T[] | undefined\n isFetched: boolean\n refetch?: () => unknown\n}\n\n/** The lists a host keeps live for the open workspace, as hooks (each fixed for the host's life). */\nexport interface ConnectedWorkspaceData {\n useTags?: () => ConnectedList<ConnectedTag>\n /**\n * Which documents the browsing kits list: Files, the dashboard's recent files and the file\n * pickers (a workflow's documents, cross-references). Kits that act on given ids still see every\n * document. Default: `isListedDocument` (all but skill files); a host narrowing it further\n * usually keeps that too: `(d) => isListedDocument(d) && mine(d)`.\n */\n documentFilter?: (document: ConnectedDocument) => boolean\n}\n\n/**\n * The default `documentFilter`: every document but a skill's files (`wp_type: 'skill'`, under\n * `skills/<name>/`). They are how a skill is stored; the skills library shows them as skills.\n */\nexport function isListedDocument(document: { wp_type?: string | null }): boolean {\n return document.wp_type !== 'skill'\n}\n\n/** The host's `documentFilter` (default `isListedDocument`). */\nexport function useDocumentFilter(): (document: ConnectedDocument) => boolean {\n return useHost().workspaceData?.documentFilter ?? isListedDocument\n}\n\n/** Keep the listed documents; the same array when nothing is left out (stable for memos). */\nexport function listedDocuments<D>(\n documents: D[],\n filter: (document: ConnectedDocument) => boolean\n): D[] {\n // A kit's own row type is the same document list (a view of `DocResponse`).\n const kept = documents.filter(filter as unknown as (document: D) => boolean)\n return kept.length === documents.length ? documents : kept\n}\n\nconst NONE = () => undefined\n\nexport interface ConnectedListResult<T> {\n data: T[]\n loaded: boolean\n /** Read the list again after a change made here; absent when the host keeps it current. */\n refetch?: () => unknown\n}\n\nconst EMPTY: never[] = []\n\nfunction useList<T>(\n hosted: ConnectedList<T> | undefined,\n own: { data?: T[]; isFetched: boolean; refetch: () => unknown }\n): ConnectedListResult<T> {\n const source = hosted ?? own\n const data = source.data ?? (EMPTY as T[])\n const refetch = hosted ? hosted.refetch : own.refetch\n return useMemo(\n () => ({ data, loaded: source.isFetched, refetch }),\n [data, source.isFetched, refetch]\n )\n}\n\n/** The open workspace's documents (`useDocuments`: the one list every host and kit shares). */\nexport function useConnectedDocuments(): ConnectedListResult<ConnectedDocument> {\n const { workspaceId } = useConnectedWorkspace()\n const { data, isFetched } = useDocuments(workspaceId)\n return useMemo(\n () => ({ data: data ?? (EMPTY as ConnectedDocument[]), loaded: isFetched }),\n [data, isFetched]\n )\n}\n\n/** The open workspace's documents a person browses (the host's `documentFilter`). */\nexport function useListedDocuments(): ConnectedListResult<ConnectedDocument> {\n const all = useConnectedDocuments()\n const filter = useDocumentFilter()\n return useMemo(() => ({ ...all, data: listedDocuments(all.data, filter) }), [all, filter])\n}\n\n/** The open workspace's tags: the host's list when it gives one, else read here. */\nexport function useConnectedTags(): ConnectedListResult<ConnectedTag> {\n const useHosted = useHost().workspaceData?.useTags ?? NONE\n const hosted = useHosted()\n const { workspaceId } = useConnectedWorkspace()\n const own = useTags(workspaceId ?? undefined, { enabled: !hosted })\n return useList(hosted, own)\n}\n\n/**\n * The open workspace's conversations (threads and tasks): the shared list (`live`: re-read while\n * shown, as a run moves on by itself).\n */\nexport function useConnectedConversations(options?: {\n live?: boolean\n}): ConnectedListResult<ConnectedConversationRow> {\n const { workspaceId } = useConnectedWorkspace()\n const { data, isFetched, refetch } = useConversations(workspaceId ?? undefined, {\n live: options?.live,\n })\n return useMemo(\n () => ({ data: data ?? (EMPTY as ConnectedConversationRow[]), loaded: isFetched, refetch }),\n [data, isFetched, refetch]\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/workspaceData.ts"],"names":["useHost","useMemo","useConnectedWorkspace","useDocuments","useTags","useConversations"],"mappings":";;;;;;;AA8CO,SAAS,iBAAiB,QAAA,EAAgD;AAC/E,EAAA,OAAO,SAAS,OAAA,KAAY,OAAA;AAC9B;AAGO,SAAS,iBAAA,GAA8D;AAC5E,EAAA,OAAOA,yBAAA,EAAQ,CAAE,aAAA,EAAe,cAAA,IAAkB,gBAAA;AACpD;AAGO,SAAS,eAAA,CACd,WACA,MAAA,EACK;AAEL,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,MAAA,CAAO,MAA6C,CAAA;AAC3E,EAAA,OAAO,IAAA,CAAK,MAAA,KAAW,SAAA,CAAU,MAAA,GAAS,SAAA,GAAY,IAAA;AACxD;AAEA,IAAM,OAAO,MAAM,MAAA;AASnB,IAAM,QAAiB,EAAC;AAExB,SAAS,OAAA,CACP,QACA,GAAA,EACwB;AACxB,EAAA,MAAM,SAAS,MAAA,IAAU,GAAA;AACzB,EAAA,MAAM,IAAA,GAAO,OAAO,IAAA,IAAS,KAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,MAAA,GAAS,MAAA,CAAO,OAAA,GAAU,GAAA,CAAI,OAAA;AAC9C,EAAA,OAAOC,eAAA;AAAA,IACL,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,CAAO,WAAW,OAAA,EAAQ,CAAA;AAAA,IACjD,CAAC,IAAA,EAAM,MAAA,CAAO,SAAA,EAAW,OAAO;AAAA,GAClC;AACF;AAGO,SAAS,qBAAA,GAAgE;AAC9E,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIC,uCAAA,EAAsB;AAC9C,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAIC,mBAAa,WAAW,CAAA;AACpD,EAAA,OAAOF,eAAA;AAAA,IACL,OAAO,EAAE,IAAA,EAAM,IAAA,IAAS,KAAA,EAA+B,QAAQ,SAAA,EAAU,CAAA;AAAA,IACzE,CAAC,MAAM,SAAS;AAAA,GAClB;AACF;AAGO,SAAS,kBAAA,GAA6D;AAC3E,EAAA,MAAM,MAAM,qBAAA,EAAsB;AAClC,EAAA,MAAM,SAAS,iBAAA,EAAkB;AACjC,EAAA,OAAOA,eAAA,CAAQ,OAAO,EAAE,GAAG,KAAK,IAAA,EAAM,eAAA,CAAgB,GAAA,CAAI,IAAA,EAAM,MAAM,CAAA,EAAE,CAAA,EAAI,CAAC,GAAA,EAAK,MAAM,CAAC,CAAA;AAC3F;AAGO,SAAS,gBAAA,GAAsD;AACpE,EAAA,MAAM,SAAA,GAAYD,yBAAA,EAAQ,CAAE,aAAA,EAAe,OAAA,IAAW,IAAA;AACtD,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIE,uCAAA,EAAsB;AAC9C,EAAA,MAAM,GAAA,GAAME,cAAQ,WAAA,IAAe,MAAA,EAAW,EAAE,OAAA,EAAS,CAAC,QAAQ,CAAA;AAClE,EAAA,OAAO,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC5B;AAMO,SAAS,0BAA0B,OAAA,EAEQ;AAChD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIF,uCAAA,EAAsB;AAC9C,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,SAAQ,GAAIG,sBAAA,CAAiB,eAAe,MAAA,EAAW;AAAA,IAC9E,MAAM,OAAA,EAAS;AAAA,GAChB,CAAA;AACD,EAAA,OAAOJ,eAAA;AAAA,IACL,OAAO,EAAE,IAAA,EAAM,QAAS,KAAA,EAAsC,MAAA,EAAQ,WAAW,OAAA,EAAQ,CAAA;AAAA,IACzF,CAAC,IAAA,EAAM,SAAA,EAAW,OAAO;AAAA,GAC3B;AACF","file":"chunk-EKSHUNJI.cjs","sourcesContent":["/**\n * The open workspace's documents, tags and conversations for the connected kits. Each kit reads them\n * through the `@arbidocs/react` hooks: the documents from `useDocuments` (read once, progressively,\n * then patched in place by every write and event, so a kit never re-reads it) and the conversations\n * from `useConversations` (the one list every host and kit shares, patched by its writers). A host\n * that already keeps tags live in its own cache gives them once, as a hook in the host\n * configuration's `workspaceData`, so the kits show the same list and nothing is fetched twice.\n */\n\nimport { useMemo } from 'react'\nimport { useConversations, useDocuments, useTags } from '@arbidocs/react'\nimport { useConnectedWorkspace } from './ConnectionProvider'\nimport { useHost } from '../provider/host'\n\nexport type ConnectedDocument = NonNullable<ReturnType<typeof useDocuments>['data']>[number]\nexport type ConnectedTag = NonNullable<ReturnType<typeof useTags>['data']>[number]\nexport type ConnectedConversationRow = NonNullable<\n ReturnType<typeof useConversations>['data']\n>[number]\n\n/**\n * A list the host keeps: its rows, whether it has arrived, and how to read it again (absent: the\n * host keeps it current itself, so a kit never re-reads it).\n */\nexport interface ConnectedList<T> {\n data: T[] | undefined\n isFetched: boolean\n refetch?: () => unknown\n}\n\n/** The lists a host keeps live for the open workspace, as hooks (each fixed for the host's life). */\nexport interface ConnectedWorkspaceData {\n useTags?: () => ConnectedList<ConnectedTag>\n /**\n * Which documents the browsing kits list: Files, the dashboard's recent files and the file\n * pickers (a workflow's documents, cross-references). Kits that act on given ids still see every\n * document. Default: `isListedDocument` (all but skill files); a host narrowing it further\n * usually keeps that too: `(d) => isListedDocument(d) && mine(d)`.\n */\n documentFilter?: (document: ConnectedDocument) => boolean\n}\n\n/**\n * The default `documentFilter`: every document but a skill's files (`wp_type: 'skill'`, under\n * `skills/<name>/`). They are how a skill is stored; the skills library shows them as skills.\n */\nexport function isListedDocument(document: { wp_type?: string | null }): boolean {\n return document.wp_type !== 'skill'\n}\n\n/** The host's `documentFilter` (default `isListedDocument`). */\nexport function useDocumentFilter(): (document: ConnectedDocument) => boolean {\n return useHost().workspaceData?.documentFilter ?? isListedDocument\n}\n\n/** Keep the listed documents; the same array when nothing is left out (stable for memos). */\nexport function listedDocuments<D>(\n documents: D[],\n filter: (document: ConnectedDocument) => boolean\n): D[] {\n // A kit's own row type is the same document list (a view of `DocResponse`).\n const kept = documents.filter(filter as unknown as (document: D) => boolean)\n return kept.length === documents.length ? documents : kept\n}\n\nconst NONE = () => undefined\n\nexport interface ConnectedListResult<T> {\n data: T[]\n loaded: boolean\n /** Read the list again after a change made here; absent when the host keeps it current. */\n refetch?: () => unknown\n}\n\nconst EMPTY: never[] = []\n\nfunction useList<T>(\n hosted: ConnectedList<T> | undefined,\n own: { data?: T[]; isFetched: boolean; refetch: () => unknown }\n): ConnectedListResult<T> {\n const source = hosted ?? own\n const data = source.data ?? (EMPTY as T[])\n const refetch = hosted ? hosted.refetch : own.refetch\n return useMemo(\n () => ({ data, loaded: source.isFetched, refetch }),\n [data, source.isFetched, refetch]\n )\n}\n\n/** The open workspace's documents (`useDocuments`: the one list every host and kit shares). */\nexport function useConnectedDocuments(): ConnectedListResult<ConnectedDocument> {\n const { workspaceId } = useConnectedWorkspace()\n const { data, isFetched } = useDocuments(workspaceId)\n return useMemo(\n () => ({ data: data ?? (EMPTY as ConnectedDocument[]), loaded: isFetched }),\n [data, isFetched]\n )\n}\n\n/** The open workspace's documents a person browses (the host's `documentFilter`). */\nexport function useListedDocuments(): ConnectedListResult<ConnectedDocument> {\n const all = useConnectedDocuments()\n const filter = useDocumentFilter()\n return useMemo(() => ({ ...all, data: listedDocuments(all.data, filter) }), [all, filter])\n}\n\n/** The open workspace's tags: the host's list when it gives one, else read here. */\nexport function useConnectedTags(): ConnectedListResult<ConnectedTag> {\n const useHosted = useHost().workspaceData?.useTags ?? NONE\n const hosted = useHosted()\n const { workspaceId } = useConnectedWorkspace()\n const own = useTags(workspaceId ?? undefined, { enabled: !hosted })\n return useList(hosted, own)\n}\n\n/**\n * The open workspace's conversations (threads and tasks): the shared list (`live`: re-read while\n * shown, as a run moves on by itself).\n */\nexport function useConnectedConversations(options?: {\n live?: boolean\n}): ConnectedListResult<ConnectedConversationRow> {\n const { workspaceId } = useConnectedWorkspace()\n const { data, isFetched, refetch } = useConversations(workspaceId ?? undefined, {\n live: options?.live,\n })\n return useMemo(\n () => ({ data: data ?? (EMPTY as ConnectedConversationRow[]), loaded: isFetched, refetch }),\n [data, isFetched, refetch]\n )\n}\n"]}
@@ -19,15 +19,28 @@ function formatBucketLabel(key, bucket = "month") {
19
19
  if (bucket === "quarter" && (m = key.match(/^(\d{4})-Q(\d)$/))) return `Q${m[2]} ${m[1]}`;
20
20
  return key;
21
21
  }
22
- var compact = new Intl.NumberFormat("en-GB", { notation: "compact", maximumFractionDigits: 1 });
23
22
  var plain = new Intl.NumberFormat("en-GB", { maximumFractionDigits: 2 });
23
+ var oneDecimal = new Intl.NumberFormat("en-GB", { maximumFractionDigits: 1 });
24
+ var COMPACT_UNITS = [
25
+ [1e12, "T"],
26
+ [1e9, "B"],
27
+ [1e6, "M"],
28
+ [1e3, "K"]
29
+ ];
30
+ function formatCompact(value) {
31
+ const size = Math.abs(value);
32
+ const at = COMPACT_UNITS.findIndex(([divisor2]) => size >= divisor2);
33
+ if (at === -1) return oneDecimal.format(value);
34
+ const [divisor, suffix] = at > 0 && Math.round(size / COMPACT_UNITS[at][0] * 10) / 10 >= 1e3 ? COMPACT_UNITS[at - 1] : COMPACT_UNITS[at];
35
+ return `${oneDecimal.format(value / divisor)}${suffix}`;
36
+ }
24
37
  var DEFAULT_UNIT_FORMATTERS = {
25
38
  gbp: (v) => `${v < 0 ? "-" : ""}\xA3${Math.abs(v).toLocaleString("en-GB", {
26
39
  minimumFractionDigits: Number.isInteger(v) ? 0 : 2,
27
40
  maximumFractionDigits: 2
28
41
  })}`,
29
42
  bytes: (v) => v < 1024 ? `${v} B` : v < 1024 ** 2 ? `${(v / 1024).toFixed(1)} KB` : v < 1024 ** 3 ? `${(v / 1024 ** 2).toFixed(1)} MB` : `${(v / 1024 ** 3).toFixed(1)} GB`,
30
- tokens: (v) => compact.format(v)
43
+ tokens: formatCompact
31
44
  };
32
45
  function formatterOf(field, formatters = DEFAULT_UNIT_FORMATTERS) {
33
46
  const unit = field?.unit;
@@ -110,7 +123,7 @@ function chartModelOf(spec, dataset, options = {}) {
110
123
  xLabel: xField?.label ?? "",
111
124
  valueLabel,
112
125
  format,
113
- formatTick: valueField?.unit === "gbp" || valueField?.unit === "bytes" ? format : (v) => compact.format(v)
126
+ formatTick: valueField?.unit === "gbp" || valueField?.unit === "bytes" ? format : formatCompact
114
127
  };
115
128
  }
116
129
  function sliceColors(model, otherLabel = "Other") {
@@ -127,5 +140,5 @@ function metricValueOf(dataset) {
127
140
  }
128
141
 
129
142
  export { DEFAULT_UNIT_FORMATTERS, chartModelOf, formatBucketLabel, formatterOf, metricValueOf, sliceColors };
130
- //# sourceMappingURL=chunk-5XQNXDST.js.map
131
- //# sourceMappingURL=chunk-5XQNXDST.js.map
143
+ //# sourceMappingURL=chunk-FPOKWML2.js.map
144
+ //# sourceMappingURL=chunk-FPOKWML2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/dashboards/chartModel.ts"],"names":["divisor"],"mappings":";AAeA,IAAM,CAAA,GAAI;AAAA,EACR,KAAA,EAAO,OAAA;AAAA,EACP,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,KAAA,EAAO;AACT,CAAA;AAmCO,IAAM,aAAA,GAAgB,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,gBAAA,EAAmB,CAAC,CAAA,EAAA,CAAI,CAAA;AACzE,IAAM,WAAA,GAAc,8BAAA;AAE3B,IAAM,MAAA,GAAS,CAAC,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,OAAO,KAAK,CAAA;AAG3F,SAAS,iBAAA,CAAkB,GAAA,EAAa,MAAA,GAAqB,OAAA,EAAiB;AACnF,EAAA,IAAI,CAAA;AACJ,EAAA,IAAI,MAAA,KAAW,KAAA,KAAU,CAAA,GAAI,GAAA,CAAI,MAAM,2BAA2B,CAAA,CAAA;AAChE,IAAA,OAAO,GAAG,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAC,IAAI,MAAA,CAAO,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AAC5D,EAAA,IAAI,WAAW,MAAA,KAAW,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,oBAAoB,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AAC/F,EAAA,IAAI,MAAA,KAAW,OAAA,KAAY,CAAA,GAAI,GAAA,CAAI,MAAM,mBAAmB,CAAA,CAAA;AAC1D,IAAA,OAAO,CAAA,EAAG,MAAA,CAAO,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AAC5C,EAAA,IAAI,MAAA,KAAW,SAAA,KAAc,CAAA,GAAI,GAAA,CAAI,MAAM,iBAAiB,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AACvF,EAAA,OAAO,GAAA;AACT;AAEA,IAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,YAAA,CAAa,SAAS,EAAE,qBAAA,EAAuB,GAAG,CAAA;AACzE,IAAM,UAAA,GAAa,IAAI,IAAA,CAAK,YAAA,CAAa,SAAS,EAAE,qBAAA,EAAuB,GAAG,CAAA;AAC9E,IAAM,aAAA,GAA6C;AAAA,EACjD,CAAC,MAAM,GAAG,CAAA;AAAA,EACV,CAAC,KAAK,GAAG,CAAA;AAAA,EACT,CAAC,KAAK,GAAG,CAAA;AAAA,EACT,CAAC,KAAK,GAAG;AACX,CAAA;AAMA,SAAS,cAAc,KAAA,EAAuB;AAC5C,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AAC3B,EAAA,MAAM,EAAA,GAAK,cAAc,SAAA,CAAU,CAAC,CAACA,QAAO,CAAA,KAAM,QAAQA,QAAO,CAAA;AACjE,EAAA,IAAI,EAAA,KAAO,EAAA,EAAI,OAAO,UAAA,CAAW,OAAO,KAAK,CAAA;AAE7C,EAAA,MAAM,CAAC,SAAS,MAAM,CAAA,GACpB,KAAK,CAAA,IAAK,IAAA,CAAK,KAAA,CAAO,IAAA,GAAO,aAAA,CAAc,EAAE,EAAE,CAAC,CAAA,GAAK,EAAE,CAAA,GAAI,EAAA,IAAM,GAAA,GAC7D,cAAc,EAAA,GAAK,CAAC,CAAA,GACpB,aAAA,CAAc,EAAE,CAAA;AACtB,EAAA,OAAO,GAAG,UAAA,CAAW,MAAA,CAAO,QAAQ,OAAO,CAAC,GAAG,MAAM,CAAA,CAAA;AACvD;AAGO,IAAM,uBAAA,GAA0C;AAAA,EACrD,GAAA,EAAK,CAAC,CAAA,KACJ,CAAA,EAAG,IAAI,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,IAAA,EAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,CAAE,eAAe,OAAA,EAAS;AAAA,IACzD,qBAAA,EAAuB,MAAA,CAAO,SAAA,CAAU,CAAC,IAAI,CAAA,GAAI,CAAA;AAAA,IACjD,qBAAA,EAAuB;AAAA,GACxB,CAAC,CAAA,CAAA;AAAA,EACJ,KAAA,EAAO,CAAC,CAAA,KACN,CAAA,GAAI,OACA,CAAA,EAAG,CAAC,CAAA,EAAA,CAAA,GACJ,CAAA,GAAI,QAAQ,CAAA,GACV,CAAA,EAAA,CAAI,CAAA,GAAI,IAAA,EAAM,QAAQ,CAAC,CAAC,CAAA,GAAA,CAAA,GACxB,CAAA,GAAI,QAAQ,CAAA,GACV,CAAA,EAAA,CAAI,CAAA,GAAI,IAAA,IAAQ,GAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA,GAC7B,IAAI,CAAA,GAAI,IAAA,IAAQ,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAAA,EACvC,MAAA,EAAQ;AACV;AAGO,SAAS,WAAA,CACd,KAAA,EACA,UAAA,GAA6B,uBAAA,EACF;AAC3B,EAAA,MAAM,OAAO,KAAA,EAAO,IAAA;AACpB,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA,KAAM,KAAA,CAAM,OAAO,CAAC,CAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,IAAI,CAAA,IAAK,wBAAwB,IAAI,CAAA;AAC9D,EAAA,OAAO,KAAA,KAAU,CAAC,CAAA,KAAM,CAAA,EAAG,MAAM,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAA;AACpD;AAGO,IAAM,cAAc,aAAA,CAAc,MAAA;AAEzC,IAAM,QAAA,GAAW,CAAC,IAAA,KAAA,CACf,IAAA,CAAK,aAAa,OAAA,MAAa,OAAA,IAAW,KAAK,SAAA,KAAc,KAAA;AAEhE,IAAM,MAAM,CAAC,CAAA,KAAiC,OAAO,CAAA,KAAM,WAAW,CAAA,GAAI,IAAA;AAcnE,SAAS,YAAA,CACd,IAAA,EACA,OAAA,EACA,OAAA,GAA6B,EAAC,EAClB;AACZ,EAAA,MAAM,KAAA,GAAQ,QAAQ,UAAA,IAAc,OAAA;AACpC,EAAA,MAAM,UAAA,GAAa,QAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,CAAA,CAAE,KAAK,CAAA;AAC9D,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,EAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,IAAA,CAAK,CAAC,CAAA;AAC1D,EAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,KAAS,MAAA;AAChC,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,EAAA,MAAM,YAAsB,EAAC;AAC7B,EAAA,MAAM,KAAA,uBAAY,GAAA,EAA2B;AAC7C,EAAA,KAAA,MAAW,GAAA,IAAO,QAAQ,IAAA,EAAM;AAC9B,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,GAAG,KAAK,GAAA,CAAI,CAAA,CAAE,KAAK,CAAA,IAAK,EAAE,CAAA;AACnD,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA,EAAG;AACpB,MAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AACb,MAAA,MAAM,QAAQ,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,KAAK,KAAK,GAAG,CAAA;AACxC,MAAA,MAAA,CAAO,GAAA,CAAI,KAAK,MAAA,IAAU,GAAA,GAAM,kBAAkB,GAAA,EAAK,IAAA,CAAK,MAAM,CAAA,GAAI,KAAK,CAAA;AAAA,IAC7E;AACA,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA,KAAM,MAAA,GAAY,EAAA,GAAK,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,MAAM,CAAC,CAAA;AACjE,IAAA,IAAI,CAAC,SAAA,CAAU,QAAA,CAAS,CAAC,CAAA,EAAG,SAAA,CAAU,KAAK,CAAC,CAAA;AAC5C,IAAA,KAAA,CAAM,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,EAAA,EAAS,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,GAAA,CAAI,CAAA,CAAE,KAAK,CAAC,CAAC,CAAA;AAAA,EACjD;AACA,EAAA,MAAM,UAAA,GAAa,YAAY,KAAA,IAAS,OAAA;AACxC,EAAA,IAAI,MAAA,GAAS,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACjC,EAAA,EAAI,KAAK,CAAA,CAAE,KAAA;AAAA,IACX,OAAO,CAAA,IAAK,UAAA;AAAA,IACZ,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,KAAA,CAAM,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA,EAAA,EAAS,CAAC,CAAA,CAAE,KAAK,IAAI;AAAA,GAC7D,CAAE,CAAA;AACF,EAAA,IAAI,UAAA,GAAa,KAAK,GAAA,CAAI,CAAC,MAAM,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,IAAK,CAAC,CAAA;AACnD,EAAA,MAAM,GAAA,GAAM,CAAC,MAAA,KAA8B,MAAA,CAAO,MAAA,CAAe,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,IAAK,CAAA,IAAK,CAAA,CAAA,EAAI,CAAC,CAAA;AAE1F,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,KAAA,IAAS,IAAA,CAAK,SAAS,OAAA,EAAS;AAChD,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,CAAC,CAAA,EAAG,UAAU,EAAC;AACrC,IAAA,IAAI,UAAA,CAAW,SAAS,WAAA,EAAa;AACnC,MAAA,MAAM,QAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,OAAO,CAAC,CAAA,IAAK,MAAM,MAAA,CAAO,CAAC,KAAK,CAAA,CAAE,CAAA;AACxF,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,cAAc,CAAC,CAAA;AAC3C,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,WAAA,GAAc,CAAC,CAAA;AACxC,MAAA,UAAA,GAAa,CAAC,GAAG,IAAA,CAAK,IAAI,CAAC,CAAA,KAAM,WAAW,CAAC,CAAC,CAAA,EAAG,GAAI,SAAS,IAAI,CAAA,GAAI,CAAC,KAAK,CAAA,GAAI,EAAG,CAAA;AACnF,MAAA,MAAM,aAAa,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAC,CAAA;AAC5C,MAAA,MAAA,GAAS;AAAA,QACP;AAAA,UACE,GAAG,OAAO,CAAC,CAAA;AAAA,UACX,QAAQ,QAAA,CAAS,IAAI,CAAA,GAAI,CAAC,GAAG,UAAA,EAAY,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAC,CAAC,CAAC,CAAA,GAAI;AAAA;AAC9E,OACF;AAAA,IACF;AAAA,EACF,CAAA,MAAA,IAAW,MAAA,CAAO,MAAA,GAAS,WAAA,EAAa;AACtC,IAAA,MAAM,QAAQ,CAAC,GAAG,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,GAAA,CAAI,EAAE,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,CAAE,MAAM,CAAC,CAAA;AACtE,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,cAAc,CAAC,CAAA;AAC3C,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,WAAA,GAAc,CAAC,CAAA;AACxC,IAAA,MAAA,GAAS;AAAA,MACP,GAAG,OAAO,MAAA,CAAO,CAAC,MAAM,IAAA,CAAK,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,MACxC,GAAI,QAAA,CAAS,IAAI,CAAA,GACb;AAAA,QACE;AAAA,UACE,EAAA,EAAI,SAAA;AAAA,UACJ,KAAA,EAAO,KAAA;AAAA,UACP,QAAQ,IAAA,CAAK,GAAA;AAAA,YAAI,CAAC,GAAG,CAAA,KACnB,IAAA,CAAK,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,IAAI,CAAA,GAAI,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA,GAAI;AAAA;AAC/E;AACF,UAEF;AAAC,KACP;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,UAAA,EAAY,OAAA,CAAQ,UAAU,CAAA;AACzD,EAAA,OAAO;AAAA,IACL,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,OAAA,EAAS,QAAQ,IAAA,CAAK,OAAO,MAAM,IAAA,CAAK,IAAA,KAAS,KAAA,IAAS,IAAA,CAAK,IAAA,KAAS,MAAA,CAAA;AAAA,IACxE,UAAA;AAAA,IACA,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,GAAG,CAAA,MAAO;AAAA,MAC5B,GAAG,CAAA;AAAA,MACH,KAAA,EAAO,EAAE,EAAA,KAAO,SAAA,GAAY,cAAc,aAAA,CAAc,CAAA,GAAI,cAAc,MAAM;AAAA,KAClF,CAAE,CAAA;AAAA,IACF,MAAA,EAAQ,QAAQ,KAAA,IAAS,EAAA;AAAA,IACzB,UAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAY,UAAA,EAAY,IAAA,KAAS,SAAS,UAAA,EAAY,IAAA,KAAS,UAAU,MAAA,GAAS;AAAA,GACpF;AACF;AAGO,SAAS,WAAA,CAAY,KAAA,EAAuC,UAAA,GAAa,OAAA,EAAS;AACvF,EAAA,OAAO,MAAM,UAAA,CAAW,GAAA;AAAA,IAAI,CAAC,CAAA,EAAG,CAAA,KAC9B,CAAA,KAAM,UAAA,IAAc,MAAM,KAAA,CAAM,UAAA,CAAW,MAAA,GAAS,CAAA,IAAK,KAAK,WAAA,GAAc,CAAA,GACxE,cACA,aAAA,CAAc,CAAA,GAAI,cAAc,MAAM;AAAA,GAC5C;AACF;AAGO,SAAS,cAAc,OAAA,EAA6C;AACzE,EAAA,IAAI,CAAC,OAAA,EAAS,IAAA,CAAK,MAAA,EAAQ,OAAO,IAAA;AAClC,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAsB,CAAC,OAAO,GAAA,KAAQ;AACxD,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,GAAA,CAAI,CAAA,CAAE,KAAK,CAAC,CAAA;AAC1B,IAAA,OAAO,CAAA,KAAM,IAAA,GAAO,KAAA,GAAA,CAAS,KAAA,IAAS,CAAA,IAAK,CAAA;AAAA,EAC7C,GAAG,IAAI,CAAA;AACT","file":"chunk-FPOKWML2.js","sourcesContent":["/**\n * The renderer adapter's first half: a `ChartSpec` and its aggregated `Dataset` (long form: a row\n * per group and series) become a `ChartModel`, the categories and series a drawing component plots.\n * Nothing here knows the drawing library, so it can change without touching specs or sources.\n */\nimport type {\n AGGREGATE_FIELDS,\n ChartSpec,\n Dataset,\n DatasetField,\n DatasetValue,\n TimeBucket,\n} from '@arbidocs/react'\n\n/** The aggregated dataset's field ids (`@arbidocs/react`'s `AGGREGATE_FIELDS`, checked). */\nconst F = {\n group: 'group',\n key: 'key',\n series: 'series',\n value: 'value',\n} as const satisfies typeof AGGREGATE_FIELDS\n\n/** The drawing types (a metric and a table are not drawn). */\nexport type DrawnChartType = 'bar' | 'line' | 'area' | 'pie' | 'donut'\n\nexport interface ChartModelSeries {\n id: string\n label: string\n /** One per category; `null` where the group has no value. */\n values: (number | null)[]\n /** The series' colour as a CSS value (a theme token). */\n color: string\n}\n\n/** What a chart plots, library-free. */\nexport interface ChartModel {\n type: DrawnChartType\n stacked: boolean\n /** Category labels, in order (x axis, or pie slices). */\n categories: string[]\n series: ChartModelSeries[]\n /** The x axis's name (the grouped field). */\n xLabel: string\n /** The value's name (\"count\", \"sum of Fee\"). */\n valueLabel: string\n /** Formats a value for ticks, the tooltip and the table. */\n format: (value: number) => string\n /** Short form of `format` for axis ticks. */\n formatTick: (value: number) => string\n}\n\n/** Formats by unit (`gbp`, `bytes`, `tokens`, …); a host passes its own (the SDK's £ formatter). */\nexport type UnitFormatters = Readonly<Record<string, (value: number) => string>>\n\n/** The theme's series colours, then a muted \"Other\". */\nexport const SERIES_COLORS = [1, 2, 3, 4, 5].map((i) => `hsl(var(--chart-${i}))`)\nexport const OTHER_COLOR = 'hsl(var(--muted-foreground))'\n\nconst MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n\n/** A date bucket key as people read it: \"12 Jun 2026\", \"W24 2026\", \"Jun 2026\", \"Q2 2026\", \"2026\". */\nexport function formatBucketLabel(key: string, bucket: TimeBucket = 'month'): string {\n let m: RegExpMatchArray | null\n if (bucket === 'day' && (m = key.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/)))\n return `${Number(m[3])} ${MONTHS[Number(m[2]) - 1]} ${m[1]}`\n if (bucket === 'week' && (m = key.match(/^(\\d{4})-W(\\d{2})$/))) return `W${Number(m[2])} ${m[1]}`\n if (bucket === 'month' && (m = key.match(/^(\\d{4})-(\\d{2})$/)))\n return `${MONTHS[Number(m[2]) - 1]} ${m[1]}`\n if (bucket === 'quarter' && (m = key.match(/^(\\d{4})-Q(\\d)$/))) return `Q${m[2]} ${m[1]}`\n return key\n}\n\nconst plain = new Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 })\nconst oneDecimal = new Intl.NumberFormat('en-GB', { maximumFractionDigits: 1 })\nconst COMPACT_UNITS: readonly [number, string][] = [\n [1e12, 'T'],\n [1e9, 'B'],\n [1e6, 'M'],\n [1e3, 'K'],\n]\n\n/**\n * A number in fixed suffixes (950, 1.2K, 1.5M, 3B), the same in every browser and runtime:\n * `Intl`'s compact notation follows the ICU data, which writes \"1.5m\" in some versions.\n */\nfunction formatCompact(value: number): string {\n const size = Math.abs(value)\n const at = COMPACT_UNITS.findIndex(([divisor]) => size >= divisor)\n if (at === -1) return oneDecimal.format(value)\n // 999,950 rounds to \"1000K\": the next suffix up reads it.\n const [divisor, suffix] =\n at > 0 && Math.round((size / COMPACT_UNITS[at][0]) * 10) / 10 >= 1000\n ? COMPACT_UNITS[at - 1]\n : COMPACT_UNITS[at]\n return `${oneDecimal.format(value / divisor)}${suffix}`\n}\n\n/** The default formatters: £ with pence, bytes in KB/MB/GB, tokens compact. */\nexport const DEFAULT_UNIT_FORMATTERS: UnitFormatters = {\n gbp: (v) =>\n `${v < 0 ? '-' : ''}£${Math.abs(v).toLocaleString('en-GB', {\n minimumFractionDigits: Number.isInteger(v) ? 0 : 2,\n maximumFractionDigits: 2,\n })}`,\n bytes: (v) =>\n v < 1024\n ? `${v} B`\n : v < 1024 ** 2\n ? `${(v / 1024).toFixed(1)} KB`\n : v < 1024 ** 3\n ? `${(v / 1024 ** 2).toFixed(1)} MB`\n : `${(v / 1024 ** 3).toFixed(1)} GB`,\n tokens: formatCompact,\n}\n\n/** The formatter of a value field: by its unit, a suffix for any other unit, else a number. */\nexport function formatterOf(\n field: Pick<DatasetField, 'unit'> | undefined,\n formatters: UnitFormatters = DEFAULT_UNIT_FORMATTERS\n): (value: number) => string {\n const unit = field?.unit\n if (!unit) return (v) => plain.format(v)\n const known = formatters[unit] ?? DEFAULT_UNIT_FORMATTERS[unit]\n return known ?? ((v) => `${plain.format(v)} ${unit}`)\n}\n\n/** The most series (or pie slices) drawn in their own colour; the rest fold into \"Other\". */\nexport const MAX_COLORED = SERIES_COLORS.length\n\nconst additive = (spec: ChartSpec) =>\n (spec.aggregate ?? 'count') === 'count' || spec.aggregate === 'sum'\n\nconst num = (v: DatasetValue | undefined) => (typeof v === 'number' ? v : null)\n\nexport interface ChartModelOptions {\n /** The source's fields, for the x axis's name. */\n fields?: readonly DatasetField[]\n formatters?: UnitFormatters\n /** The words for the folded series and slices. Default \"Other\". */\n otherLabel?: string\n}\n\n/**\n * Turn an aggregated dataset into what a chart plots. Series (and pie slices) beyond the theme's\n * colours fold into \"Other\" when the values add up (count, sum); otherwise the smallest are left out.\n */\nexport function chartModelOf(\n spec: ChartSpec & { type: DrawnChartType },\n dataset: Dataset,\n options: ChartModelOptions = {}\n): ChartModel {\n const other = options.otherLabel ?? 'Other'\n const valueField = dataset.fields.find((f) => f.id === F.value)\n const xField = options.fields?.find((f) => f.id === spec.x)\n const isDate = xField?.type === 'date'\n const keys: string[] = []\n const labels = new Map<string, string>()\n const seriesIds: string[] = []\n const cells = new Map<string, number | null>()\n for (const row of dataset.rows) {\n const key = String(row[F.key] ?? row[F.group] ?? '')\n if (!labels.has(key)) {\n keys.push(key)\n const label = String(row[F.group] ?? key)\n labels.set(key, isDate && key ? formatBucketLabel(key, spec.bucket) : label)\n }\n const s = row[F.series] === undefined ? '' : String(row[F.series])\n if (!seriesIds.includes(s)) seriesIds.push(s)\n cells.set(`${key}\\u0000${s}`, num(row[F.value]))\n }\n const valueLabel = valueField?.label ?? 'value'\n let series = seriesIds.map((s) => ({\n id: s || F.value,\n label: s || valueLabel,\n values: keys.map((k) => cells.get(`${k}\\u0000${s}`) ?? null),\n }))\n let categories = keys.map((k) => labels.get(k) ?? k)\n const sum = (values: (number | null)[]) => values.reduce<number>((a, v) => a + (v ?? 0), 0)\n\n if (spec.type === 'pie' || spec.type === 'donut') {\n const values = series[0]?.values ?? []\n if (categories.length > MAX_COLORED) {\n const order = values.map((_, i) => i).sort((a, b) => (values[b] ?? 0) - (values[a] ?? 0))\n const kept = order.slice(0, MAX_COLORED - 1)\n const rest = order.slice(MAX_COLORED - 1)\n categories = [...kept.map((i) => categories[i]), ...(additive(spec) ? [other] : [])]\n const keptValues = kept.map((i) => values[i])\n series = [\n {\n ...series[0],\n values: additive(spec) ? [...keptValues, sum(rest.map((i) => values[i]))] : keptValues,\n },\n ]\n }\n } else if (series.length > MAX_COLORED) {\n const order = [...series].sort((a, b) => sum(b.values) - sum(a.values))\n const kept = order.slice(0, MAX_COLORED - 1)\n const rest = order.slice(MAX_COLORED - 1)\n series = [\n ...series.filter((s) => kept.includes(s)),\n ...(additive(spec)\n ? [\n {\n id: '__other',\n label: other,\n values: keys.map((_, i) =>\n rest.some((s) => s.values[i] !== null) ? sum(rest.map((s) => s.values[i])) : null\n ),\n },\n ]\n : []),\n ]\n }\n\n const format = formatterOf(valueField, options.formatters)\n return {\n type: spec.type,\n stacked: Boolean(spec.stacked) && (spec.type === 'bar' || spec.type === 'area'),\n categories,\n series: series.map((s, i) => ({\n ...s,\n color: s.id === '__other' ? OTHER_COLOR : SERIES_COLORS[i % SERIES_COLORS.length],\n })),\n xLabel: xField?.label ?? '',\n valueLabel,\n format,\n formatTick: valueField?.unit === 'gbp' || valueField?.unit === 'bytes' ? format : formatCompact,\n }\n}\n\n/** The pie slice colours (one per category; \"Other\" muted). */\nexport function sliceColors(model: Pick<ChartModel, 'categories'>, otherLabel = 'Other') {\n return model.categories.map((c, i) =>\n c === otherLabel && i === model.categories.length - 1 && i >= MAX_COLORED - 1\n ? OTHER_COLOR\n : SERIES_COLORS[i % SERIES_COLORS.length]\n )\n}\n\n/** The single value of a metric (an aggregated dataset with one group), or null. */\nexport function metricValueOf(dataset: Dataset | undefined): number | null {\n if (!dataset?.rows.length) return null\n return dataset.rows.reduce<number | null>((total, row) => {\n const v = num(row[F.value])\n return v === null ? total : (total ?? 0) + v\n }, null)\n}\n"]}
@@ -3,7 +3,7 @@
3
3
 
4
4
  var chunk7OPOPYV6_cjs = require('./chunk-7OPOPYV6.cjs');
5
5
  var chunkOAIOOVFN_cjs = require('./chunk-OAIOOVFN.cjs');
6
- var chunk7IF3E3I2_cjs = require('./chunk-7IF3E3I2.cjs');
6
+ var chunkI7CJDF3V_cjs = require('./chunk-I7CJDF3V.cjs');
7
7
  var chunkM2FOXGJU_cjs = require('./chunk-M2FOXGJU.cjs');
8
8
  var chunkZBP4ZSAJ_cjs = require('./chunk-ZBP4ZSAJ.cjs');
9
9
  var chunkWGWP4ATS_cjs = require('./chunk-WGWP4ATS.cjs');
@@ -121,13 +121,13 @@ function RecordingControl({
121
121
  modes: [
122
122
  {
123
123
  mode: "audio",
124
- label: chunk7IF3E3I2_cjs.MODE_LABEL.audio,
124
+ label: chunkI7CJDF3V_cjs.MODE_LABEL.audio,
125
125
  description: "Everyone\u2019s microphone, one track each",
126
126
  testId: "recording-mode-audio"
127
127
  },
128
128
  {
129
129
  mode: "audio_video",
130
- label: chunk7IF3E3I2_cjs.MODE_LABEL.audio_video,
130
+ label: chunkI7CJDF3V_cjs.MODE_LABEL.audio_video,
131
131
  description: "Plus a video of your view of the call",
132
132
  testId: "recording-mode-video"
133
133
  }
@@ -179,7 +179,7 @@ function RecordingIndicator({
179
179
  return /* @__PURE__ */ jsxRuntime.jsx(
180
180
  chunk7OPOPYV6_cjs.RecordingStatusChip,
181
181
  {
182
- sentence: `Recording${mode ? ` (${chunk7IF3E3I2_cjs.MODE_LABEL[mode]})` : ""} \u2014 started by ${by}`,
182
+ sentence: `Recording${mode ? ` (${chunkI7CJDF3V_cjs.MODE_LABEL[mode]})` : ""} \u2014 started by ${by}`,
183
183
  compact,
184
184
  announce,
185
185
  onAnnounced,
@@ -530,7 +530,7 @@ function WebinarChat({ chat }) {
530
530
  const id = `${line.senderIdentity}-${line.id}`;
531
531
  return /* @__PURE__ */ jsxRuntime.jsx(chunkM2FOXGJU_cjs.MessageRoot, { role: "user", messageId: id, className: "px-3", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkM2FOXGJU_cjs.MessageContent, { role: "user", messageId: id, align: line.mine ? "end" : "start", children: [
532
532
  startsRun && /* @__PURE__ */ jsxRuntime.jsx(chunkM2FOXGJU_cjs.MessageAuthor, { children: /* @__PURE__ */ jsxRuntime.jsx(
533
- chunk7IF3E3I2_cjs.CallUserPill,
533
+ chunkI7CJDF3V_cjs.CallUserPill,
534
534
  {
535
535
  identity: line.senderIdentity,
536
536
  name: line.senderName,
@@ -601,14 +601,14 @@ function WebinarQA({ webinar }) {
601
601
  body: q.text,
602
602
  status: q.status,
603
603
  answer: q.answerText,
604
- answeredBy: q.answered_by_ext_id ? /* @__PURE__ */ jsxRuntime.jsx(chunk7IF3E3I2_cjs.CallUserPill, { identity: q.answered_by_ext_id }) : void 0,
604
+ answeredBy: q.answered_by_ext_id ? /* @__PURE__ */ jsxRuntime.jsx(chunkI7CJDF3V_cjs.CallUserPill, { identity: q.answered_by_ext_id }) : void 0,
605
605
  voteCount: q.vote_count,
606
606
  voted: q.voted,
607
607
  mine: q.mine,
608
608
  createdAt: q.created_at,
609
609
  // Who asked is hidden from attendees (another attendee's question): "Attendee".
610
610
  askerName: q.asker_ext_id ? "" : null,
611
- asker: q.asker_ext_id ? /* @__PURE__ */ jsxRuntime.jsx(chunk7IF3E3I2_cjs.CallUserPill, { identity: q.asker_ext_id }) : void 0
611
+ asker: q.asker_ext_id ? /* @__PURE__ */ jsxRuntime.jsx(chunkI7CJDF3V_cjs.CallUserPill, { identity: q.asker_ext_id }) : void 0
612
612
  })),
613
613
  [webinar.questions]
614
614
  );
@@ -640,7 +640,7 @@ function WebinarAudience({ webinar }) {
640
640
  id: h.identity,
641
641
  name: h.name,
642
642
  raisedAt: h.raised_at,
643
- entity: /* @__PURE__ */ jsxRuntime.jsx(chunk7IF3E3I2_cjs.CallUserPill, { identity: h.identity, name: h.name, size: "sm" })
643
+ entity: /* @__PURE__ */ jsxRuntime.jsx(chunkI7CJDF3V_cjs.CallUserPill, { identity: h.identity, name: h.name, size: "sm" })
644
644
  })),
645
645
  attendees: webinar.attendees.map((a) => ({
646
646
  id: a.identity,
@@ -648,7 +648,7 @@ function WebinarAudience({ webinar }) {
648
648
  role: a.role,
649
649
  onStage: a.on_stage,
650
650
  handRaised: a.hand_raised,
651
- entity: /* @__PURE__ */ jsxRuntime.jsx(chunk7IF3E3I2_cjs.CallUserPill, { identity: a.identity, name: a.name, size: "sm" })
651
+ entity: /* @__PURE__ */ jsxRuntime.jsx(chunkI7CJDF3V_cjs.CallUserPill, { identity: a.identity, name: a.name, size: "sm" })
652
652
  })),
653
653
  onPromote: webinar.promote,
654
654
  onDemote: webinar.demote
@@ -859,7 +859,7 @@ function CallBody({
859
859
  const participants = componentsReact.useParticipants();
860
860
  const speakingIds = chunkOAIOOVFN_cjs.useSpeakingIds();
861
861
  const speakingNames = react$1.useMemo(
862
- () => speakingIds.map((id) => participants.find((p) => p.identity === id)).filter((p) => !!p).map((p) => /* @__PURE__ */ jsxRuntime.jsx(chunk7IF3E3I2_cjs.CallUserPill, { identity: p.identity, name: p.name }, p.identity)),
862
+ () => speakingIds.map((id) => participants.find((p) => p.identity === id)).filter((p) => !!p).map((p) => /* @__PURE__ */ jsxRuntime.jsx(chunkI7CJDF3V_cjs.CallUserPill, { identity: p.identity, name: p.name }, p.identity)),
863
863
  [speakingIds, participants]
864
864
  );
865
865
  const stageRef = react$1.useRef(null);
@@ -1074,7 +1074,7 @@ function webinarControls(webinar, opts) {
1074
1074
  }
1075
1075
  function useCallNotices(recording, transcription) {
1076
1076
  const [shown, setShown] = react$1.useState({});
1077
- const recordingText = recording.on ? `Recording${recording.mode ? ` (${chunk7IF3E3I2_cjs.MODE_LABEL[recording.mode]})` : ""} \u2014 started by ${recording.startedByMe ? "you" : recording.startedByName || "the host"}` : null;
1077
+ const recordingText = recording.on ? `Recording${recording.mode ? ` (${chunkI7CJDF3V_cjs.MODE_LABEL[recording.mode]})` : ""} \u2014 started by ${recording.startedByMe ? "you" : recording.startedByName || "the host"}` : null;
1078
1078
  const transcriptionText = transcription.on ? `Transcription on \u2014 started by ${transcription.startedByMe ? "you" : transcription.startedByName || "a participant"}` : null;
1079
1079
  useNotice("recording", recordingText, setShown);
1080
1080
  useNotice("transcription", transcriptionText, setShown);
@@ -1150,7 +1150,7 @@ function RoomTile({
1150
1150
  ...elementProps,
1151
1151
  name: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1152
1152
  /* @__PURE__ */ jsxRuntime.jsx(
1153
- chunk7IF3E3I2_cjs.CallUserPill,
1153
+ chunkI7CJDF3V_cjs.CallUserPill,
1154
1154
  {
1155
1155
  identity: participant.identity,
1156
1156
  name: participant.name,
@@ -1292,7 +1292,7 @@ function ParticipantsList({
1292
1292
  id: p.identity,
1293
1293
  name: p.name || p.identity,
1294
1294
  isLocal: p.isLocal,
1295
- entity: /* @__PURE__ */ jsxRuntime.jsx(chunk7IF3E3I2_cjs.CallUserPill, { identity: p.identity, name: p.name, size: "sm", interactive: !p.isLocal }),
1295
+ entity: /* @__PURE__ */ jsxRuntime.jsx(chunkI7CJDF3V_cjs.CallUserPill, { identity: p.identity, name: p.name, size: "sm", interactive: !p.isLocal }),
1296
1296
  speaking: speakingIds.includes(p.identity),
1297
1297
  level: levels[p.identity] ?? 0,
1298
1298
  micMuted: !p.isMicrophoneEnabled,
@@ -1325,7 +1325,7 @@ function Lobby({ callExtId }) {
1325
1325
  requests: mine.map((k) => ({
1326
1326
  id: k.knockId,
1327
1327
  name: k.displayName,
1328
- entity: /* @__PURE__ */ jsxRuntime.jsx(chunk7IF3E3I2_cjs.CallUserPill, { identity: k.userExtId, name: k.displayName })
1328
+ entity: /* @__PURE__ */ jsxRuntime.jsx(chunkI7CJDF3V_cjs.CallUserPill, { identity: k.userExtId, name: k.displayName })
1329
1329
  })),
1330
1330
  onDecide: (id, admit) => void decide(id, admit)
1331
1331
  }
@@ -1339,5 +1339,5 @@ function ConnectingOverlay() {
1339
1339
  }
1340
1340
 
1341
1341
  exports.ConnectedCallRoom = ConnectedCallRoom;
1342
- //# sourceMappingURL=chunk-M4TM3K52.cjs.map
1343
- //# sourceMappingURL=chunk-M4TM3K52.cjs.map
1342
+ //# sourceMappingURL=chunk-FSXQHEFQ.cjs.map
1343
+ //# sourceMappingURL=chunk-FSXQHEFQ.cjs.map