@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
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/calls/recording-labels.ts","../src/calls/call-cards.ts","../src/calls/HeaderAction.tsx","../src/connection/entities/ConnectedUserEntity.tsx","../src/calls/connected/CallUserPill.tsx"],"names":["ConnectedUserEntity","jsx","jsxs","ArbiBotIcon","useMemo","memo","CallUserPill","getUserDisplayName"],"mappings":";;;;;;;;;;AAKO,IAAM,UAAA,GAAkD;AAAA,EAC7D,KAAA,EAAO,OAAA;AAAA,EACP,WAAA,EAAa;AACf;AAGO,IAAM,WAAA,GAAc,CAAC,IAAA,EAAM,CAAA,EAAG,IAAI,EAAE;AAGpC,SAAS,SAAA,CAAU,IAAA,EAAqB,GAAA,GAAM,IAAA,CAAK,KAAI,EAAkB;AAC9E,EAAA,OAAO,IAAA,GAAO,IAAI,IAAA,CAAK,GAAA,GAAM,OAAO,KAAU,CAAA,CAAE,aAAY,GAAI,IAAA;AAClE;AAGO,SAAS,cAAA,CAAe,SAAA,EAA0B,GAAA,GAAM,IAAA,CAAK,KAAI,EAAW;AACjF,EAAA,IAAI,CAAC,WAAW,OAAO,MAAA;AACvB,EAAA,MAAM,IAAA,GAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,SAAS,IAAI,GAAA,IAAO,KAAA;AAC7C,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA,CAAE,MAAA;AAAA,IAAO,CAAC,IAAA,EAAM,CAAA,KACxC,IAAA,CAAK,GAAA,CAAI,CAAA,GAAI,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,GAAO,IAAI,IAAI,CAAA,GAAI;AAAA,GACnD;AACA,EAAA,OAAO,OAAO,OAAO,CAAA;AACvB;;;ACXA,IAAM,GAAA,GAAM,CAAC,CAAA,KACX,KAAA,CAAM,QAAQ,CAAC,CAAA,GAAI,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAmB,OAAO,CAAA,KAAM,QAAQ,IAAI,EAAC;AAC5E,IAAM,MAAM,CAAC,CAAA,KAA+B,OAAO,CAAA,KAAM,QAAA,IAAY,IAAI,CAAA,GAAI,IAAA;AAGtE,SAAS,mBACd,MAAA,EACsB;AACtB,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,MAAA,EAAQ,WAAW,CAAA;AACzC,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,SAAA,EAAW,OAAO,IAAA;AAClC,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,SAAA;AAAA,IACb,UAAA,EAAY,GAAA,CAAI,MAAA,CAAO,UAAU,CAAA;AAAA,IACjC,OAAA,EAAS,GAAA,CAAI,MAAA,CAAO,OAAO,CAAA;AAAA,IAC3B,UAAA,EAAY,GAAA,CAAI,MAAA,CAAO,UAAU,CAAA;AAAA,IACjC,QAAA,EAAU,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA;AAAA,IAC7B,YAAY,OAAO,MAAA,CAAO,UAAA,KAAe,QAAA,GAAW,OAAO,UAAA,GAAa,IAAA;AAAA,IACxE,MAAA,EAAQ,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA;AAAA,IACzB,2BAAA,EAA6B,GAAA,CAAI,MAAA,CAAO,2BAA2B;AAAA,GACrE;AACF;AAGO,SAAS,mBAAmB,OAAA,EAAmD;AACpF,EAAA,IAAI,OAAA,IAAW,IAAA,IAAQ,OAAA,GAAU,CAAA,EAAG,OAAO,IAAA;AAC3C,EAAA,IAAI,UAAU,EAAA,EAAI,OAAO,GAAG,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,CAAA,EAAA,CAAA;AAC/C,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACvC,EAAA,IAAI,OAAA,GAAU,EAAA,EAAI,OAAO,CAAA,EAAG,OAAO,CAAA,IAAA,CAAA;AACnC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACjC,EAAA,MAAM,IAAI,OAAA,GAAU,EAAA;AACpB,EAAA,OAAO,IAAI,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA,IAAA,CAAA,GAAS,GAAG,CAAC,CAAA,EAAA,CAAA;AACrC;AAGO,SAAS,UAAA,CACd,MACA,OAAA,EACS;AACT,EAAA,IAAI,SAAS,OAAO,IAAA;AACpB,EAAA,IAAI,CAAC,IAAA,EAAM,UAAA,IAAc,IAAA,CAAK,WAAW,OAAO,KAAA;AAChD,EAAA,OAAO,CAAC,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AACjF;AAGO,SAAS,kBAAkB,KAAA,EAAgC;AAChE,EAAA,IAAI,CAAC,KAAA,CAAM,MAAA,EAAQ,OAAO,IAAA;AAC1B,EAAA,MAAM,QAAQ,KAAA,CAAM,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AACzC,EAAA,OAAO,CAAA,UAAA,EAAa,KAAK,CAAA,EAAG,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,CAAA,EAAA,EAAK,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AAC7E;ACtDO,SAAS,YAAA,CAAa;AAAA,EAC3B,KAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,OAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAOiB;AACf,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,uBACE,IAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,IAAA,EAAK,IAAA;AAAA,QACL,OAAA,EAAQ,SAAA;AAAA,QACR,SAAA;AAAA,QACA,OAAA;AAAA,QACA,aAAA,EAAa,MAAA;AAAA,QAEb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,UACxC;AAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACA,EAAA,4BACG,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,SAAO,IAAA,EACrB,QAAA,kBAAA,IAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,IAAA,EAAK,MAAA;AAAA,QACL,OAAA,EAAQ,OAAA;AAAA,QACR,SAAA;AAAA,QACA,YAAA,EAAY,KAAA;AAAA,QACZ,OAAA;AAAA,QACA,aAAA,EAAa,MAAA;AAAA,QAEZ,QAAA,EAAA;AAAA,UAAA,IAAA;AAAA,0BACD,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,KACnC,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAK,QAAA,EAAU,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EACvC,CAAA;AAEJ;ACCA,SAAS,gBAAA,CACP,IAAA,EACA,IAAA,EACA,YAAA,EACmC;AACnC,EAAA,MAAM,WAAW,eAAA,EAAgB;AACjC,EAAA,MAAM,QAAA,GAAW,cAAA;AAAA,IAAe,CAAC,MAC/B,YAAA,IAAgB,IAAA,GAAO,EAAE,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,GAAI;AAAA,GACxD;AACA,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,eAAA,EAAgB;AAC3C,EAAA,IAAI,CAAC,cAAc,OAAO,MAAA;AAC1B,EAAA,IAAI,IAAA,EAAM;AAER,IAAA,IAAI,QAAA,KAAa,WAAA,EAAa,OAAO,QAAA,EAAU,qBAAqB,QAAA,GAAW,WAAA;AAC/E,IAAA,OAAO,QAAA,KAAa,iBAAiB,YAAA,GAAe,QAAA;AAAA,EACtD;AAEA,EAAA,OAAO,QAAA,KAAa,WAAW,WAAA,GAAc,QAAA;AAC/C;AAEO,IAAM,mBAAA,GAAsB,IAAA,CAAK,SAASA,oBAAAA,CAAoB;AAAA,EACnE,IAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,MAAA;AAAA,EACV,SAAA;AAAA,EACA,WAAA,GAAc,IAAA;AAAA,EACd,YAAA,GAAe,IAAA;AAAA,EACf,WAAA,GAAc,IAAA;AAAA,EACd;AACF,CAAA,EAA6B;AAC3B,EAAA,MAAM,EAAE,MAAA,EAAQ,aAAA,EAAc,GAAI,qBAAA,EAAsB;AACxD,EAAA,MAAM,EAAE,cAAA,EAAgB,YAAA,EAAa,GAAI,oBAAA,EAAqB;AAC9D,EAAA,MAAM,OAAO,CAAC,EAAE,IAAA,IAAQ,aAAA,IAAiB,KAAK,WAAA,KAAgB,aAAA,CAAA;AAC9D,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,IAAA,EAAM,IAAA,EAAM,YAAY,CAAA;AAG/D,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,GAAa,EAAC,KAAM,aAAA,EAAc;AAChD,EAAA,MAAM,gBAAA,GAAmB,QAAQ,MAAM;AACrC,IAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,EAAM,OAAO,EAAC;AAC3B,IAAA,OAAO,UAAA,CAAW,MAAA;AAAA,MAAO,CAAC,EAAA,KACxB,EAAA,CAAG,KAAA,EAAO,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,IAAA,CAAK,WAAA,KAAgB,IAAA,CAAK,WAAW;AAAA,KACzE;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,IAAA,EAAM,IAAI,CAAC,CAAA;AAC3B,EAAA,MAAM,UAAA,GAAa,QAAQ,MAAM;AAC/B,IAAA,IAAI,CAAC,QAAQ,CAAC,OAAA,CAAQ,IAAI,CAAA,IAAK,CAAC,IAAA,CAAK,aAAA,EAAe,OAAO,IAAA;AAC3D,IAAA,KAAA,MAAW,MAAM,UAAA,EAAY;AAC3B,MAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,KAAA,EAAO,IAAA,CAAK,CAAC,WAAW,MAAA,CAAO,IAAA,CAAK,WAAA,KAAgB,IAAA,CAAK,aAAa,CAAA;AACvF,MAAA,IAAI,KAAA,SAAc,KAAA,CAAM,IAAA;AAAA,IAC1B;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG,CAAC,IAAA,EAAM,UAAU,CAAC,CAAA;AAErB,EAAA,IAAI,CAAC,MAAM,uBAAOC,IAAC,UAAA,EAAA,EAAW,KAAA,EAAK,IAAA,EAAC,IAAA,EAAY,SAAA,EAAsB,CAAA;AAEtE,EAAA,MAAM,QAAA,GAAW,gBAAgB,IAAI,CAAA;AACrC,EAAA,MAAM,WAAA,GAAc,QAAQ,IAAI,CAAA;AAChC,EAAA,MAAM,QAAA,GAAW,mBAAmB,IAAI,CAAA;AACxC,EAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,IAAA,CAAK,WAAW,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,WAAA,GAAc,iBAAA,CAAkB,UAAU,CAAA,GAAI,MAAA;AACjE,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,IAAQ,CAAC,CAAC,cAAA;AAE3B,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAkB;AACjC,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,IAAI,MAAM,YAAA,EAAa;AAAA,SAClB,cAAA,GAAiB,KAAK,WAAW,CAAA;AAAA,EACxC,CAAA;AAEA,EAAA,MAAM,cAAA,mBACJC,IAAAA,CAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,sBACEC,IAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,SAAA;AAAA,cACA,cAAc,qCAAA,GAAwC;AAAA,aACxD;AAAA,YACA,KAAA,EAAO,UAAA;AAAA,YAEN,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,OAAA,oBAAWD,GAAAA,CAAC,WAAA,EAAA,EAAY,KAAK,IAAA,CAAK,OAAA,EAAS,KAAK,QAAA,EAAU,CAAA;AAAA,8BAChEA,GAAAA;AAAA,gBAAC,cAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA;AAAA,oBACT,oCAAA;AAAA,oBACA,WAAA,GAAc,6BAAA,GAAgC,CAAA,WAAA,EAAc,UAAU,CAAA;AAAA,mBACxE;AAAA,kBACA,KAAA,EAAO,UAAA;AAAA,kBAEN,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,SACF;AAAA,QAEF,KAAA,EAAO,QAAA;AAAA,QACP,gBACE,WAAA,mBAAcA,IAACE,eAAA,EAAA,EAAY,SAAA,EAAU,4BAA2B,CAAA,GAAK,MAAA;AAAA,QAEvE,UAAU,IAAA,CAAK;AAAA;AAAA,KACjB;AAAA,IAEC,WAAA,IAAe,UAAA,oBACdF,GAAAA,CAAC,wBACC,QAAA,kBAAAC,IAAAA,CAAC,iBAAA,EAAA,EAAkB,IAAA,kBAAMD,GAAAA,CAACE,eAAA,EAAA,EAAY,SAAA,EAAU,6BAA4B,CAAA,EAAI,QAAA,EAAA;AAAA,MAAA,UAAA;AAAA,MACrE,GAAA;AAAA,sBACTF,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,6BAAA,EAA+B,QAAA,EAAA,kBAAA,CAAmB,UAAU,CAAA,EAAE;AAAA,KAAA,EAChF,CAAA,EACF,CAAA;AAAA,IAGD,gBAAA,CAAiB,MAAA,GAAS,CAAA,oBACzBA,GAAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,IAAA,kBAAMA,GAAAA,CAAC,KAAA,EAAA,EAAM,WAAU,2BAAA,EAA4B,CAAA;AAAA,QACnD,OAAA,EAAQ,mBAAA;AAAA,QAER,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACZ,QAAA,EAAA;AAAA,UAAA,gBAAA,CAAiB,MAAM,CAAA,EAAG,CAAC,EAAE,GAAA,CAAI,CAAC,uBACjCA,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAU,uEAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAD,GAAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAM,EAAA,CAAG,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAAA,oBACtB,cAAA,EAAgB,iBAAA,CAAkB,EAAA,CAAG,WAAW,CAAA;AAAA,oBAChD,IAAA,EAAM;AAAA;AAAA,iBACR;AAAA,gCACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,aAAG,IAAA,EAAK;AAAA;AAAA,aAAA;AAAA,YAR5C,EAAA,CAAG;AAAA,WAUX,CAAA;AAAA,UACA,iBAAiB,MAAA,GAAS,CAAA,oBACzBC,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,YAAA,GAAA;AAAA,YAC5C,iBAAiB,MAAA,GAAS,CAAA;AAAA,YAAE;AAAA,WAAA,EAChC;AAAA,SAAA,EAEJ;AAAA;AAAA,KACF;AAAA,IAGD,eAAe,OAAA,KAAY,MAAA,IAAU,OAAA,oBACpCD,IAAC,iBAAA,EAAA,EAAkB,OAAA,EAAO,IAAA,EAAC,IAAA,kBAAMA,GAAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAU,SAAA,EAAU,GAAI,QAAA,EAAA,uBAAA,EAE5E;AAAA,GAAA,EAEJ,CAAA;AAGF,EAAA,uBACEA,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA,EAAa,gBAAgB,IAAA,IAAQ,OAAA,CAAA;AAAA,MACrC,QAAA;AAAA,MACA,WAAA,EAAa,IAAA,GAAQ,SAAA,IAAa,KAAA,GAAS,QAAA;AAAA,MAC3C,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,UAAA;AAAA,MACA,OAAA,EAAS,WAAA;AAAA,MACT,UAAA,EAAY,KAAK,oBAAA,KAAyB,IAAA;AAAA,MAC1C,UAAA;AAAA,MACA,IAAA;AAAA,MACA,aAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ,CAAC;ACnMD,SAAS,WAAA,CAAY,UAAkB,YAAA,EAA4C;AACjF,EAAA,MAAM,EAAA,GAAK,gBAAe,CAAE,IAAA;AAC5B,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,SAAA,EAAU;AAC3B,EAAA,OAAOG,QAAQ,MAAM;AACnB,IAAA,IAAI,EAAA,IAAM,EAAA,CAAG,WAAA,KAAgB,QAAA,EAAU,OAAO,EAAA;AAC9C,IAAA,MAAM,IAAA,GAAO,KAAK,QAAQ,CAAA;AAC1B,IAAA,IAAI,MAAM,OAAO,IAAA;AACjB,IAAA,MAAM,CAAC,KAAA,GAAQ,EAAA,EAAI,GAAG,IAAI,CAAA,GAAA,CAAK,YAAA,IAAgB,QAAA,EAAU,IAAA,EAAK,CAAE,KAAA,CAAM,KAAK,CAAA;AAC3E,IAAA,OAAO;AAAA,MACL,WAAA,EAAa,QAAA;AAAA,MACb,UAAA,EAAY,KAAA;AAAA,MACZ,WAAA,EAAa,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA,MAC1B,KAAA,EAAO;AAAA,KACT;AAAA,EACF,GAAG,CAAC,EAAA,EAAI,IAAA,EAAM,QAAA,EAAU,YAAY,CAAC,CAAA;AACvC;AAEO,IAAM,YAAA,GAAeC,IAAAA,CAAK,SAASC,aAAAA,CAAa;AAAA,EACrD,QAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,MAAA;AAAA,EACV,WAAA,GAAc,KAAA;AAAA,EACd;AACF,CAAA,EAAoC;AAClC,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,QAAA,EAAU,IAAI,CAAA;AACvC,EAAA,uBACEL,GAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA,EAAc,KAAA;AAAA,MACd,SAAA,EAAW,CAAA,EAAGM,kBAAAA,CAAmB,IAAI,CAAC,CAAA,KAAA,CAAA;AAAA,MACtC;AAAA;AAAA,GACF;AAEJ,CAAC","file":"chunk-DEIF2VAA.js","sourcesContent":["import type { calls } from '@arbidocs/sdk/browser'\n\n/** Shared by the recording UI (kept out of the component files for fast refresh). */\n\n/** How a recording mode is named in the UI. */\nexport const MODE_LABEL: Record<calls.RecordingMode, string> = {\n audio: 'Audio',\n audio_video: 'Audio + video',\n}\n\n/** Expiry choices (days; null = kept). */\nexport const EXPIRY_DAYS = [null, 7, 30, 90] as const\n\n/** `expires_at` for a choice, from now. */\nexport function expiryFor(days: number | null, now = Date.now()): string | null {\n return days ? new Date(now + days * 86_400_000).toISOString() : null\n}\n\n/** Which expiry choice an `expires_at` is closest to (for the select). */\nexport function expiryChoiceOf(expiresAt: string | null, now = Date.now()): string {\n if (!expiresAt) return 'none'\n const days = (Date.parse(expiresAt) - now) / 86_400_000\n const nearest = [7, 30, 90].reduce((best, d) =>\n Math.abs(d - days) < Math.abs(best - days) ? d : best\n )\n return String(nearest)\n}\n","/** Pure helpers for the call cards and call titles (kept apart from the components). */\n\nimport type { calls } from '@arbidocs/sdk/browser'\n\nexport interface CallLogDetail {\n call_ext_id: string\n started_by: string | null\n invited: string[]\n started_at: string | null\n ended_at: string | null\n duration_s: number | null\n joined: string[]\n meeting_conversation_ext_id: string | null\n}\n\nconst ids = (v: unknown): string[] =>\n Array.isArray(v) ? v.filter((x): x is string => typeof x === 'string') : []\nconst str = (v: unknown): string | null => (typeof v === 'string' && v ? v : null)\n\n/** The card's detail from an activity event's `detail`, or null when it is not a call card. */\nexport function parseCallLogDetail(\n detail: Record<string, unknown> | null | undefined\n): CallLogDetail | null {\n const callExtId = str(detail?.call_ext_id)\n if (!detail || !callExtId) return null\n return {\n call_ext_id: callExtId,\n started_by: str(detail.started_by),\n invited: ids(detail.invited),\n started_at: str(detail.started_at),\n ended_at: str(detail.ended_at),\n duration_s: typeof detail.duration_s === 'number' ? detail.duration_s : null,\n joined: ids(detail.joined),\n meeting_conversation_ext_id: str(detail.meeting_conversation_ext_id),\n }\n}\n\n/** \"45 s\", \"12 min\", \"1 h 5 min\". */\nexport function formatCallDuration(seconds: number | null | undefined): string | null {\n if (seconds == null || seconds < 0) return null\n if (seconds < 60) return `${Math.round(seconds)} s`\n const minutes = Math.round(seconds / 60)\n if (minutes < 60) return `${minutes} min`\n const h = Math.floor(minutes / 60)\n const m = minutes % 60\n return m ? `${h} h ${m} min` : `${h} h`\n}\n\n/** Whether the call's current session is running (the server's view, or `call.started`). */\nexport function isCallLive(\n call: Pick<calls.CallResponse, 'started_at' | 'ended_at' | 'cancelled'> | undefined,\n liveNow: boolean\n): boolean {\n if (liveNow) return true\n if (!call?.started_at || call.cancelled) return false\n return !call.ended_at || Date.parse(call.started_at) > Date.parse(call.ended_at)\n}\n\n/** \"Call with Ada, Bob\" (the title is encrypted under the call key). */\nexport function contactsCallTitle(names: string[]): string | null {\n if (!names.length) return null\n const shown = names.slice(0, 3).join(', ')\n return `Call with ${shown}${names.length > 3 ? ` +${names.length - 3}` : ''}`\n}\n","/**\n * A secondary action of a conversation header (Save transcript, Recordings): labelled where there\n * is room, or icon-only with the label in a tooltip (and for screen readers) where the header is\n * crowded — the thread's title keeps priority.\n */\n\nimport type { ReactElement, ReactNode } from 'react'\nimport { Button, Tooltip, TooltipContent, TooltipTrigger } from '@arbidocs/react/ui'\n\nexport function HeaderAction({\n label,\n icon,\n iconOnly = false,\n onClick,\n testId,\n className,\n}: {\n label: string\n icon: ReactNode\n iconOnly?: boolean\n onClick(): void\n testId?: string\n className?: string\n}): ReactElement {\n if (!iconOnly) {\n return (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n className={className}\n onClick={onClick}\n data-testid={testId}\n >\n <span className=\"mr-1 inline-flex\">{icon}</span>\n {label}\n </Button>\n )\n }\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className={className}\n aria-label={label}\n onClick={onClick}\n data-testid={testId}\n >\n {icon}\n <span className=\"sr-only\">{label}</span>\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{label}</TooltipContent>\n </Tooltip>\n )\n}\n","/**\n * A person, connected: the shared avatar / pill (`UserEntity` in `@arbidocs/react/ui`) with what\n * the session knows about them. \"You\" for the signed-in user, their live presence (and, on your own\n * avatar, the live connection's status unless you hide your online status), the workspaces you\n * share and an agent's owner in the hover card. A click on someone else opens your direct chat\n * with them (`openDirectChat`); on yourself, your settings.\n */\nimport { memo, useMemo, type MouseEvent } from 'react'\nimport { MessageCircleMore, Users } from 'lucide-react'\nimport {\n ArbiBotHeadIcon as ArbiBotIcon,\n useArbiWsStatus,\n useArbiWsStore,\n useUserSettings,\n useWorkspaces,\n} from '@arbidocs/react'\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n ShieldIcon,\n UserEntity,\n agentAvatarColors,\n cn,\n getWorkspaceColor,\n type PresenceDisplayStatus,\n getUserAvatarColor,\n getUserDisplayName,\n getUserInitials,\n isAgent,\n} from '@arbidocs/react/ui'\nimport type { components } from '@arbidocs/client'\nimport {\n EntityTooltip,\n EntityTooltipHeader,\n EntityTooltipHint,\n EntityTooltipSection,\n} from '../../components/EntityTooltip'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\n\ntype UserResponse = components['schemas']['UserResponse']\n\nexport interface ConnectedUserEntityProps {\n user?: UserResponse | null\n size?: 'xs' | 'sm' | 'md' | 'lg'\n variant?: 'icon' | 'pill'\n className?: string\n /** Hovering shows their card (default true). */\n showTooltip?: boolean\n /** The presence dot (default true). */\n showPresence?: boolean\n /** A click opens the chat with them, or your settings (default true). */\n interactive?: boolean\n /** Your own label in place of \"You\" (e.g. \"Ada Lovelace (me)\" in a call). */\n selfLabel?: string\n}\n\n/** The presence dot: your own live connection, or the person's presence. */\nfunction useDisplayStatus(\n user: UserResponse | null | undefined,\n isMe: boolean,\n showPresence: boolean\n): PresenceDisplayStatus | undefined {\n const wsStatus = useArbiWsStatus()\n const presence = useArbiWsStore((s) =>\n showPresence && user ? s.presence[user.external_id] : undefined\n )\n const { data: settings } = useUserSettings()\n if (!showPresence) return undefined\n if (isMe) {\n // Hiding your online status hides only \"connected\": connection trouble always shows.\n if (wsStatus === 'connected') return settings?.hide_online_status ? 'hidden' : 'connected'\n return wsStatus === 'reconnecting' ? 'connecting' : wsStatus\n }\n // `unknown` (removed from contacts, or hidden) and no news show grey.\n return presence === 'online' ? 'connected' : 'hidden'\n}\n\nexport const ConnectedUserEntity = memo(function ConnectedUserEntity({\n user,\n size = 'md',\n variant = 'pill',\n className,\n showTooltip = true,\n showPresence = true,\n interactive = true,\n selfLabel,\n}: ConnectedUserEntityProps) {\n const { userId: currentUserId } = useConnectedWorkspace()\n const { openDirectChat, openSettings } = useBlocksEnvironment()\n const isMe = !!(user && currentUserId && user.external_id === currentUserId)\n const displayStatus = useDisplayStatus(user, isMe, showPresence)\n\n // The workspaces you share with them, and an agent's human owner (the hover card only).\n const { data: workspaces = [] } = useWorkspaces()\n const sharedWorkspaces = useMemo(() => {\n if (!user || isMe) return []\n return workspaces.filter((ws) =>\n ws.users?.some((member) => member.user.external_id === user.external_id)\n )\n }, [workspaces, user, isMe])\n const agentOwner = useMemo(() => {\n if (!user || !isAgent(user) || !user.parent_ext_id) return null\n for (const ws of workspaces) {\n const found = ws.users?.find((member) => member.user.external_id === user.parent_ext_id)\n if (found) return found.user\n }\n return null\n }, [user, workspaces])\n\n if (!user) return <UserEntity empty size={size} className={className} />\n\n const initials = getUserInitials(user)\n const userIsAgent = isAgent(user)\n const fullName = getUserDisplayName(user)\n const colorClass = getUserAvatarColor(user.external_id)\n const agentStyle = userIsAgent ? agentAvatarColors(colorClass) : undefined\n const canChat = !isMe && !!openDirectChat\n\n const onClick = (e: MouseEvent) => {\n e.stopPropagation()\n if (isMe) openSettings()\n else openDirectChat?.(user.external_id)\n }\n\n const tooltipContent = (\n <EntityTooltip>\n <EntityTooltipHeader\n lead={\n <Avatar\n className={cn(\n 'h-8 w-8',\n userIsAgent ? 'rounded-full border-2 border-dashed' : 'border border-white'\n )}\n style={agentStyle}\n >\n {user.picture && <AvatarImage src={user.picture} alt={initials} />}\n <AvatarFallback\n className={cn(\n 'text-xs font-semibold leading-none',\n userIsAgent ? 'rounded-full bg-transparent' : `text-white ${colorClass}`\n )}\n style={agentStyle}\n >\n {initials}\n </AvatarFallback>\n </Avatar>\n }\n title={fullName}\n titleAccessory={\n userIsAgent ? <ArbiBotIcon className=\"w-3.5 h-3.5 text-primary\" /> : undefined\n }\n subtitle={user.email}\n />\n\n {userIsAgent && agentOwner && (\n <EntityTooltipSection>\n <EntityTooltipHint icon={<ArbiBotIcon className=\"w-3.5 h-3.5 flex-shrink-0\" />}>\n Agent of{' '}\n <span className=\"font-medium text-foreground\">{getUserDisplayName(agentOwner)}</span>\n </EntityTooltipHint>\n </EntityTooltipSection>\n )}\n\n {sharedWorkspaces.length > 0 && (\n <EntityTooltipSection\n icon={<Users className=\"w-3.5 h-3.5 flex-shrink-0\" />}\n heading=\"Shared Workspaces\"\n >\n <div className=\"flex flex-wrap gap-1 pl-5\">\n {sharedWorkspaces.slice(0, 3).map((ws) => (\n <div\n key={ws.external_id}\n className=\"inline-flex items-center gap-1 px-1.5 py-0.5 bg-muted rounded text-xs\"\n >\n <ShieldIcon\n char={ws.name.charAt(0)}\n workspaceColor={getWorkspaceColor(ws.external_id)}\n size={14}\n />\n <span className=\"truncate max-w-[80px]\">{ws.name}</span>\n </div>\n ))}\n {sharedWorkspaces.length > 3 && (\n <span className=\"text-xs text-muted-foreground\">\n +{sharedWorkspaces.length - 3} more\n </span>\n )}\n </div>\n </EntityTooltipSection>\n )}\n\n {interactive && variant === 'pill' && canChat && (\n <EntityTooltipHint isRuled icon={<MessageCircleMore className=\"w-3 h-3\" />}>\n Click to send message\n </EntityTooltipHint>\n )}\n </EntityTooltip>\n )\n\n return (\n <UserEntity\n size={size}\n variant={variant}\n className={className}\n showTooltip={showTooltip}\n interactive={interactive && (isMe || canChat)}\n initials={initials}\n displayName={isMe ? (selfLabel ?? 'You') : fullName}\n picture={user.picture}\n colorClass={colorClass}\n isAgent={userIsAgent}\n isVerified={user.is_identity_verified === true}\n agentStyle={agentStyle}\n isMe={isMe}\n displayStatus={displayStatus}\n onClick={onClick}\n tooltipContent={tooltipContent}\n />\n )\n})\n","/**\n * A person in the call UI, shown the way people are shown everywhere: the `ConnectedUserEntity`\n * pill (avatar with initials or picture, name, verified tick), without presence. My own reads\n * \"Name (me)\". The user is one the session already knows (me, contacts, workspace members); a\n * participant it does not know yet gets a pill built from the call's own name for them.\n */\n\nimport { memo, useMemo, type ReactElement } from 'react'\nimport { useArbiSession, usePeople, type UserResponse } from '@arbidocs/react'\nimport { getUserDisplayName, type EntitySize } from '@arbidocs/react/ui'\nimport { ConnectedUserEntity } from '../../connection/entities/ConnectedUserEntity'\n\n/** A person in the call UI (a participant, a speaker, a host). */\nexport interface CallUserPillProps {\n /** Their LiveKit identity: the user ext id. */\n identity: string\n /** The call's name for them, for someone the session does not know. */\n name?: string | null\n size?: EntitySize\n variant?: 'pill' | 'icon'\n /** Click opens a chat with them (off by default inside the call). */\n interactive?: boolean\n className?: string\n}\n\n/** The known user for an identity (user ext id), else a stand-in from the call's name. */\nfunction useCallUser(identity: string, fallbackName?: string | null): UserResponse {\n const me = useArbiSession().user\n const { byId } = usePeople()\n return useMemo(() => {\n if (me && me.external_id === identity) return me as UserResponse\n const user = byId(identity)\n if (user) return user\n const [given = '', ...rest] = (fallbackName || identity).trim().split(/\\s+/)\n return {\n external_id: identity,\n given_name: given,\n family_name: rest.join(' '),\n email: '',\n } as UserResponse\n }, [me, byId, identity, fallbackName])\n}\n\nexport const CallUserPill = memo(function CallUserPill({\n identity,\n name,\n size = 'xs',\n variant = 'pill',\n interactive = false,\n className,\n}: CallUserPillProps): ReactElement {\n const user = useCallUser(identity, name)\n return (\n <ConnectedUserEntity\n user={user}\n size={size}\n variant={variant}\n interactive={interactive}\n showPresence={false}\n selfLabel={`${getUserDisplayName(user)} (me)`}\n className={className}\n />\n )\n})\n"]}
1
+ {"version":3,"sources":["../src/calls/recording-labels.ts","../src/calls/call-cards.ts","../src/calls/HeaderAction.tsx","../src/connection/entities/ConnectedUserEntity.tsx","../src/calls/connected/CallUserPill.tsx"],"names":["ConnectedUserEntity","jsx","jsxs","ArbiBotIcon","useMemo","memo","CallUserPill","getUserDisplayName"],"mappings":"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","file":"chunk-3GFQNJYE.js","sourcesContent":["import type { calls } from '@arbidocs/sdk/browser'\n\n/** Shared by the recording UI (kept out of the component files for fast refresh). */\n\n/** How a recording mode is named in the UI. */\nexport const MODE_LABEL: Record<calls.RecordingMode, string> = {\n audio: 'Audio',\n audio_video: 'Audio + video',\n}\n\n/** Expiry choices (days; null = kept). */\nexport const EXPIRY_DAYS = [null, 7, 30, 90] as const\n\n/** `expires_at` for a choice, from now. */\nexport function expiryFor(days: number | null, now = Date.now()): string | null {\n return days ? new Date(now + days * 86_400_000).toISOString() : null\n}\n\n/** Which expiry choice an `expires_at` is closest to (for the select). */\nexport function expiryChoiceOf(expiresAt: string | null, now = Date.now()): string {\n if (!expiresAt) return 'none'\n const days = (Date.parse(expiresAt) - now) / 86_400_000\n const nearest = [7, 30, 90].reduce((best, d) =>\n Math.abs(d - days) < Math.abs(best - days) ? d : best\n )\n return String(nearest)\n}\n","/** Pure helpers for the call cards and call titles (kept apart from the components). */\n\nimport type { calls } from '@arbidocs/sdk/browser'\n\nexport interface CallLogDetail {\n call_ext_id: string\n started_by: string | null\n invited: string[]\n started_at: string | null\n ended_at: string | null\n duration_s: number | null\n joined: string[]\n meeting_conversation_ext_id: string | null\n}\n\nconst ids = (v: unknown): string[] =>\n Array.isArray(v) ? v.filter((x): x is string => typeof x === 'string') : []\nconst str = (v: unknown): string | null => (typeof v === 'string' && v ? v : null)\n\n/** The card's detail from an activity event's `detail`, or null when it is not a call card. */\nexport function parseCallLogDetail(\n detail: Record<string, unknown> | null | undefined\n): CallLogDetail | null {\n const callExtId = str(detail?.call_ext_id)\n if (!detail || !callExtId) return null\n return {\n call_ext_id: callExtId,\n started_by: str(detail.started_by),\n invited: ids(detail.invited),\n started_at: str(detail.started_at),\n ended_at: str(detail.ended_at),\n duration_s: typeof detail.duration_s === 'number' ? detail.duration_s : null,\n joined: ids(detail.joined),\n meeting_conversation_ext_id: str(detail.meeting_conversation_ext_id),\n }\n}\n\n/** \"45 s\", \"12 min\", \"1 h 5 min\". */\nexport function formatCallDuration(seconds: number | null | undefined): string | null {\n if (seconds == null || seconds < 0) return null\n if (seconds < 60) return `${Math.round(seconds)} s`\n const minutes = Math.round(seconds / 60)\n if (minutes < 60) return `${minutes} min`\n const h = Math.floor(minutes / 60)\n const m = minutes % 60\n return m ? `${h} h ${m} min` : `${h} h`\n}\n\n/** Whether the call's current session is running (the server's view, or `call.started`). */\nexport function isCallLive(\n call: Pick<calls.CallResponse, 'started_at' | 'ended_at' | 'cancelled'> | undefined,\n liveNow: boolean\n): boolean {\n if (liveNow) return true\n if (!call?.started_at || call.cancelled) return false\n return !call.ended_at || Date.parse(call.started_at) > Date.parse(call.ended_at)\n}\n\n/** \"Call with Ada, Bob\" (the title is encrypted under the call key). */\nexport function contactsCallTitle(names: string[]): string | null {\n if (!names.length) return null\n const shown = names.slice(0, 3).join(', ')\n return `Call with ${shown}${names.length > 3 ? ` +${names.length - 3}` : ''}`\n}\n","/**\n * A secondary action of a conversation header (Save transcript, Recordings): labelled where there\n * is room, or icon-only with the label in a tooltip (and for screen readers) where the header is\n * crowded — the thread's title keeps priority.\n */\n\nimport type { ReactElement, ReactNode } from 'react'\nimport { Button, Tooltip, TooltipContent, TooltipTrigger } from '@arbidocs/react/ui'\n\nexport function HeaderAction({\n label,\n icon,\n iconOnly = false,\n onClick,\n testId,\n className,\n}: {\n label: string\n icon: ReactNode\n iconOnly?: boolean\n onClick(): void\n testId?: string\n className?: string\n}): ReactElement {\n if (!iconOnly) {\n return (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n className={className}\n onClick={onClick}\n data-testid={testId}\n >\n <span className=\"mr-1 inline-flex\">{icon}</span>\n {label}\n </Button>\n )\n }\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className={className}\n aria-label={label}\n onClick={onClick}\n data-testid={testId}\n >\n {icon}\n <span className=\"sr-only\">{label}</span>\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{label}</TooltipContent>\n </Tooltip>\n )\n}\n","/**\n * A person, connected: the shared avatar / pill (`UserEntity` in `@arbidocs/react/ui`) with what\n * the session knows about them. \"You\" for the signed-in user, their live presence (and, on your own\n * avatar, the live connection's status unless you hide your online status), the workspaces you\n * share and an agent's owner in the hover card. A click on someone else opens your direct chat\n * with them (`openDirectChat`); on yourself, your settings.\n */\nimport { memo, useMemo, type MouseEvent } from 'react'\nimport { MessageCircleMore, Users } from 'lucide-react'\nimport {\n ArbiBotHeadIcon as ArbiBotIcon,\n useArbiWsStatus,\n useArbiWsStore,\n useUserSettings,\n useWorkspaces,\n} from '@arbidocs/react'\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n ShieldIcon,\n UserEntity,\n agentAvatarColors,\n cn,\n getWorkspaceColor,\n type PresenceDisplayStatus,\n getUserAvatarColor,\n getUserDisplayName,\n getUserInitials,\n isAgent,\n} from '@arbidocs/react/ui'\nimport type { components } from '@arbidocs/client'\nimport {\n EntityTooltip,\n EntityTooltipHeader,\n EntityTooltipHint,\n EntityTooltipSection,\n} from '../../components/EntityTooltip'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\n\ntype UserResponse = components['schemas']['UserResponse']\n\nexport interface ConnectedUserEntityProps {\n user?: UserResponse | null\n size?: 'xs' | 'sm' | 'md' | 'lg'\n variant?: 'icon' | 'pill'\n className?: string\n /** Hovering shows their card (default true). */\n showTooltip?: boolean\n /** The presence dot (default true). */\n showPresence?: boolean\n /** A click opens the chat with them, or your settings (default true). */\n interactive?: boolean\n /** Your own label in place of \"You\" (e.g. \"Ada Lovelace (me)\" in a call). */\n selfLabel?: string\n}\n\n/** The presence dot: your own live connection, or the person's presence. */\nfunction useDisplayStatus(\n user: UserResponse | null | undefined,\n isMe: boolean,\n showPresence: boolean\n): PresenceDisplayStatus | undefined {\n const wsStatus = useArbiWsStatus()\n const presence = useArbiWsStore((s) =>\n showPresence && user ? s.presence[user.external_id] : undefined\n )\n const { data: settings } = useUserSettings()\n if (!showPresence) return undefined\n if (isMe) {\n // Hiding your online status hides only \"connected\": connection trouble always shows.\n if (wsStatus === 'connected') return settings?.hide_online_status ? 'hidden' : 'connected'\n return wsStatus === 'reconnecting' ? 'connecting' : wsStatus\n }\n // `unknown` (removed from contacts, or hidden) and no news show grey.\n return presence === 'online' ? 'connected' : 'hidden'\n}\n\nexport const ConnectedUserEntity = memo(function ConnectedUserEntity({\n user,\n size = 'md',\n variant = 'pill',\n className,\n showTooltip = true,\n showPresence = true,\n interactive = true,\n selfLabel,\n}: ConnectedUserEntityProps) {\n const { userId: currentUserId } = useConnectedWorkspace()\n const { openDirectChat, openSettings } = useBlocksEnvironment()\n const isMe = !!(user && currentUserId && user.external_id === currentUserId)\n const displayStatus = useDisplayStatus(user, isMe, showPresence)\n\n // The workspaces you share with them, and an agent's human owner (the hover card only).\n const { data: workspaces = [] } = useWorkspaces()\n const sharedWorkspaces = useMemo(() => {\n if (!user || isMe) return []\n return workspaces.filter((ws) =>\n ws.users?.some((member) => member.user.external_id === user.external_id)\n )\n }, [workspaces, user, isMe])\n const agentOwner = useMemo(() => {\n if (!user || !isAgent(user) || !user.parent_ext_id) return null\n for (const ws of workspaces) {\n const found = ws.users?.find((member) => member.user.external_id === user.parent_ext_id)\n if (found) return found.user\n }\n return null\n }, [user, workspaces])\n\n if (!user) return <UserEntity empty size={size} className={className} />\n\n const initials = getUserInitials(user)\n const userIsAgent = isAgent(user)\n const fullName = getUserDisplayName(user)\n const colorClass = getUserAvatarColor(user.external_id)\n const agentStyle = userIsAgent ? agentAvatarColors(colorClass) : undefined\n const canChat = !isMe && !!openDirectChat\n\n const onClick = (e: MouseEvent) => {\n e.stopPropagation()\n if (isMe) openSettings()\n else openDirectChat?.(user.external_id)\n }\n\n const tooltipContent = (\n <EntityTooltip>\n <EntityTooltipHeader\n lead={\n <Avatar\n className={cn(\n 'h-8 w-8',\n userIsAgent ? 'rounded-full border-2 border-dashed' : 'border border-white'\n )}\n style={agentStyle}\n >\n {user.picture && <AvatarImage src={user.picture} alt={initials} />}\n <AvatarFallback\n className={cn(\n 'text-xs font-semibold leading-none',\n userIsAgent ? 'rounded-full bg-transparent' : `text-white ${colorClass}`\n )}\n style={agentStyle}\n >\n {initials}\n </AvatarFallback>\n </Avatar>\n }\n title={fullName}\n titleAccessory={\n userIsAgent ? <ArbiBotIcon className=\"w-3.5 h-3.5 text-primary\" /> : undefined\n }\n subtitle={user.email}\n />\n\n {userIsAgent && agentOwner && (\n <EntityTooltipSection>\n <EntityTooltipHint icon={<ArbiBotIcon className=\"w-3.5 h-3.5 flex-shrink-0\" />}>\n Agent of{' '}\n <span className=\"font-medium text-foreground\">{getUserDisplayName(agentOwner)}</span>\n </EntityTooltipHint>\n </EntityTooltipSection>\n )}\n\n {sharedWorkspaces.length > 0 && (\n <EntityTooltipSection\n icon={<Users className=\"w-3.5 h-3.5 flex-shrink-0\" />}\n heading=\"Shared Workspaces\"\n >\n <div className=\"flex flex-wrap gap-1 pl-5\">\n {sharedWorkspaces.slice(0, 3).map((ws) => (\n <div\n key={ws.external_id}\n className=\"inline-flex items-center gap-1 px-1.5 py-0.5 bg-muted rounded text-xs\"\n >\n <ShieldIcon\n char={ws.name.charAt(0)}\n workspaceColor={getWorkspaceColor(ws.external_id)}\n size={14}\n />\n <span className=\"truncate max-w-[80px]\">{ws.name}</span>\n </div>\n ))}\n {sharedWorkspaces.length > 3 && (\n <span className=\"text-xs text-muted-foreground\">\n +{sharedWorkspaces.length - 3} more\n </span>\n )}\n </div>\n </EntityTooltipSection>\n )}\n\n {interactive && variant === 'pill' && canChat && (\n <EntityTooltipHint isRuled icon={<MessageCircleMore className=\"w-3 h-3\" />}>\n Click to send message\n </EntityTooltipHint>\n )}\n </EntityTooltip>\n )\n\n return (\n <UserEntity\n size={size}\n variant={variant}\n className={className}\n showTooltip={showTooltip}\n interactive={interactive && (isMe || canChat)}\n initials={initials}\n displayName={isMe ? (selfLabel ?? 'You') : fullName}\n picture={user.picture}\n colorClass={colorClass}\n isAgent={userIsAgent}\n isVerified={user.is_identity_verified === true}\n agentStyle={agentStyle}\n isMe={isMe}\n displayStatus={displayStatus}\n onClick={onClick}\n tooltipContent={tooltipContent}\n />\n )\n})\n","/**\n * A person in the call UI, shown the way people are shown everywhere: the `ConnectedUserEntity`\n * pill (avatar with initials or picture, name, verified tick), without presence. My own reads\n * \"Name (me)\". The user is one the session already knows (me, contacts, workspace members); a\n * participant it does not know yet gets a pill built from the call's own name for them.\n */\n\nimport { memo, useMemo, type ReactElement } from 'react'\nimport { useArbiSession, usePeople, type UserResponse } from '@arbidocs/react'\nimport { getUserDisplayName, type EntitySize } from '@arbidocs/react/ui'\nimport { ConnectedUserEntity } from '../../connection/entities/ConnectedUserEntity'\n\n/** A person in the call UI (a participant, a speaker, a host). */\nexport interface CallUserPillProps {\n /** Their LiveKit identity: the user ext id. */\n identity: string\n /** The call's name for them, for someone the session does not know. */\n name?: string | null\n size?: EntitySize\n variant?: 'pill' | 'icon'\n /** Click opens a chat with them (off by default inside the call). */\n interactive?: boolean\n className?: string\n}\n\n/** The known user for an identity (user ext id), else a stand-in from the call's name. */\nfunction useCallUser(identity: string, fallbackName?: string | null): UserResponse {\n const me = useArbiSession().user\n const { byId } = usePeople()\n return useMemo(() => {\n if (me && me.external_id === identity) return me as UserResponse\n const user = byId(identity)\n if (user) return user\n const [given = '', ...rest] = (fallbackName || identity).trim().split(/\\s+/)\n return {\n external_id: identity,\n given_name: given,\n family_name: rest.join(' '),\n email: '',\n } as UserResponse\n }, [me, byId, identity, fallbackName])\n}\n\nexport const CallUserPill = memo(function CallUserPill({\n identity,\n name,\n size = 'xs',\n variant = 'pill',\n interactive = false,\n className,\n}: CallUserPillProps): ReactElement {\n const user = useCallUser(identity, name)\n return (\n <ConnectedUserEntity\n user={user}\n size={size}\n variant={variant}\n interactive={interactive}\n showPresence={false}\n selfLabel={`${getUserDisplayName(user)} (me)`}\n className={className}\n />\n )\n})\n"]}
@@ -11,5 +11,5 @@ function useHost() {
11
11
 
12
12
  exports.ArbiHost = ArbiHost;
13
13
  exports.useHost = useHost;
14
- //# sourceMappingURL=chunk-LUO46ELJ.cjs.map
15
- //# sourceMappingURL=chunk-LUO46ELJ.cjs.map
14
+ //# sourceMappingURL=chunk-3YZKDCWY.cjs.map
15
+ //# sourceMappingURL=chunk-3YZKDCWY.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/provider/host.ts"],"names":["GenericArbiHost","useHostConfigRecord"],"mappings":";;;;;AA8DO,IAAM,QAAA,GAAmEA;AAGzE,SAAS,OAAA,GAA0B;AACxC,EAAA,OAAOC,yBAAA,EAAoB;AAC7B","file":"chunk-3YZKDCWY.cjs","sourcesContent":["/**\n * The host configuration of `@arbidocs/blocks`: the `@arbidocs/react` domains plus the blocks ones,\n * handed over once:\n *\n * <ArbiHost config={{ arbi, session, environment: { navigate, notify }, billing, viewer, … }}>\n * <App />\n * </ArbiHost>\n *\n * Every field is optional and has a default; each kit reads its domain (`useHost().billing`, or a\n * domain hook such as `useBlocksEnvironment()` that fills in the defaults). A blocks-only site gets\n * `arbi` and its sign-in layer from `defaultHost` (`@arbidocs/blocks/connect`); ARBI-frontend\n * passes its own (src/host/app-host.tsx), and is the reference for a site that looks like it.\n * A field whose value lives in the host's state is a hook (`use…`), so the configuration stays one\n * stable object. There is no other host provider: a new domain is a new optional field here.\n *\n * SDK-free: the provider is `@arbidocs/react/shell`'s, and the domain types are type-only.\n */\n\nimport type { PanelHostSupport } from '../shell/panel-host'\nimport type { ReactElement } from 'react'\nimport { ArbiHost as GenericArbiHost, useHostConfigRecord } from '@arbidocs/react/shell'\nimport type { ArbiHostProps } from '@arbidocs/react/shell'\nimport type { ArbiHostConfig as ArbiReactHostConfig } from '@arbidocs/react'\nimport type { BillingSupport } from '../connection/billing/support'\nimport type { NativeDocxSupport } from '../connection/docx/support'\nimport type { DocumentViewerSupport } from '../connection/viewer/support'\nimport type { DocumentToolsHost } from '../connection/viewer/ConnectedDocumentToolsProvider'\nimport type { ConnectedWorkspaceData } from '../connection/workspaceData'\nimport type { BlocksEnvironment } from './environment'\nimport type { AuthPagesSupport, SsoSupport } from '../connection/auth/support'\nimport type { WorkflowsHost } from '../connection/workflows/support'\nimport type { GuidedRuns } from '../guided/sequences'\n\nexport interface ArbiHostConfig extends ArbiReactHostConfig {\n /** Panel popup registry and site-specific titles. Absent: shared browser windows, plain titles. */\n panels?: PanelHostSupport\n /** Router, notices, dialogs, runtime config and where documents, threads, … open. */\n environment?: Partial<BlocksEnvironment>\n /** Selling plans (Stripe). Absent: nothing is for sale; projects show limits and usage only. */\n billing?: BillingSupport\n /** The Word editor's host additions. Absent: no Defined term, no Generate image. */\n docx?: NativeDocxSupport\n /** The document viewer's host additions. Absent: no drafts, Translate, … */\n viewer?: DocumentViewerSupport\n /** The PDF document tools' host binding (its upload, its lists to refresh, Mail). */\n documentTools?: DocumentToolsHost\n /** Workspace lists the host already keeps live. Absent: the kits read their own. */\n workspaceData?: ConnectedWorkspaceData\n /** The auth pages' look, password rules and sign-in follow-ups. Absent: plain pages. */\n auth?: AuthPagesSupport\n /** The single sign-on provider. Absent: no SSO. */\n sso?: SsoSupport\n /** The workflows a site offers to start from, in its categories. Absent: none. */\n workflows?: WorkflowsHost\n /**\n * The guided runs (\"Show me\", remote control): the kit's plus the host's own runs, demos and\n * cursor mark (`createGuidedRuns`). Absent: the kit's runs and a plain cursor.\n */\n guided?: GuidedRuns\n}\n\n/** `<ArbiHost config>` with the blocks domains. */\nexport const ArbiHost: (props: ArbiHostProps<ArbiHostConfig>) => ReactElement = GenericArbiHost\n\n/** The host configuration in scope (`{}` outside an `<ArbiHost>`). */\nexport function useHost(): ArbiHostConfig {\n return useHostConfigRecord() as ArbiHostConfig\n}\n"]}
@@ -1,16 +1,16 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
+ var chunk53RXGFJ6_cjs = require('./chunk-53RXGFJ6.cjs');
5
+ var chunk7V4OCZS6_cjs = require('./chunk-7V4OCZS6.cjs');
4
6
  var chunk464YPRAE_cjs = require('./chunk-464YPRAE.cjs');
5
7
  var chunkMI7GQZIZ_cjs = require('./chunk-MI7GQZIZ.cjs');
6
- var chunk53RXGFJ6_cjs = require('./chunk-53RXGFJ6.cjs');
7
- var chunkQN5GTCPB_cjs = require('./chunk-QN5GTCPB.cjs');
8
8
  var chunkKCP42W67_cjs = require('./chunk-KCP42W67.cjs');
9
9
  var chunk3YEXZX4H_cjs = require('./chunk-3YEXZX4H.cjs');
10
10
  var chunkVZOOGA47_cjs = require('./chunk-VZOOGA47.cjs');
11
- var chunkD3GZWKHW_cjs = require('./chunk-D3GZWKHW.cjs');
12
- var chunkTJQMC7GJ_cjs = require('./chunk-TJQMC7GJ.cjs');
13
- var chunkLUO46ELJ_cjs = require('./chunk-LUO46ELJ.cjs');
11
+ var chunkEKSHUNJI_cjs = require('./chunk-EKSHUNJI.cjs');
12
+ var chunkNNBL3HPG_cjs = require('./chunk-NNBL3HPG.cjs');
13
+ var chunk3YZKDCWY_cjs = require('./chunk-3YZKDCWY.cjs');
14
14
  var chunkQGVOT7E4_cjs = require('./chunk-QGVOT7E4.cjs');
15
15
  var chunkIPSHAMO2_cjs = require('./chunk-IPSHAMO2.cjs');
16
16
  var chunkWGWP4ATS_cjs = require('./chunk-WGWP4ATS.cjs');
@@ -26,7 +26,7 @@ var jsxRuntime = require('react/jsx-runtime');
26
26
  var NO_SUPPORT = {};
27
27
  var NO_TARGET = () => null;
28
28
  function useNativeDocxSupport() {
29
- return chunkLUO46ELJ_cjs.useHost().docx ?? NO_SUPPORT;
29
+ return chunk3YZKDCWY_cjs.useHost().docx ?? NO_SUPPORT;
30
30
  }
31
31
  function useDocxCommentTarget() {
32
32
  const useTarget = useNativeDocxSupport().useCommentTarget ?? NO_TARGET;
@@ -39,7 +39,7 @@ function ReferencePicker({
39
39
  onSelect
40
40
  }) {
41
41
  const groups = react$1.useMemo(() => {
42
- const docs = documents.filter(isTopLevel).map(chunkQN5GTCPB_cjs.toWorkflowFieldDocument).sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase()));
42
+ const docs = documents.filter(isTopLevel).map(chunk7V4OCZS6_cjs.toWorkflowFieldDocument).sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase()));
43
43
  return [{ id: "all", heading: "In this workspace", docs }];
44
44
  }, [documents]);
45
45
  const selected = groups[0].docs.find((d) => d.id === selectedId);
@@ -56,14 +56,14 @@ function ReferencePicker({
56
56
  }
57
57
  function useConnectedDocxReferences() {
58
58
  const arbi = react.useArbi();
59
- const { workspaceId } = chunkTJQMC7GJ_cjs.useConnectedWorkspace();
59
+ const { workspaceId } = chunkNNBL3HPG_cjs.useConnectedWorkspace();
60
60
  const { openDocument, runtimeConfig } = chunkWGWP4ATS_cjs.useBlocksEnvironment();
61
- const { data: documents } = chunkD3GZWKHW_cjs.useListedDocuments();
61
+ const { data: documents } = chunkEKSHUNJI_cjs.useListedDocuments();
62
62
  const documentsRef = react$1.useRef(documents);
63
63
  documentsRef.current = documents;
64
64
  return react$1.useMemo(
65
65
  () => ({
66
- documents: async () => documentsRef.current.filter(isTopLevel).map((d) => ({ id: d.external_id, title: chunkQN5GTCPB_cjs.toWorkflowFieldDocument(d).title })),
66
+ documents: async () => documentsRef.current.filter(isTopLevel).map((d) => ({ id: d.external_id, title: chunk7V4OCZS6_cjs.toWorkflowFieldDocument(d).title })),
67
67
  passages: async (documentId) => {
68
68
  const parsed = await arbi.documents.getParsedContent(documentId, "final");
69
69
  return (parsed.chunks ?? []).flatMap(
@@ -109,7 +109,7 @@ function useConnectedDocxReferences() {
109
109
  );
110
110
  }
111
111
  function useConnectedWorkspaceRole() {
112
- const { workspaceId, live, userId, ensureWorkspaceOpen } = chunkTJQMC7GJ_cjs.useConnectedWorkspace();
112
+ const { workspaceId, live, userId, ensureWorkspaceOpen } = chunkNNBL3HPG_cjs.useConnectedWorkspace();
113
113
  const { data: members = [] } = react.useWorkspaceUsers(workspaceId ?? void 0, {
114
114
  enabled: live && !!workspaceId,
115
115
  beforeFetch: ensureWorkspaceOpen
@@ -148,7 +148,7 @@ function ConnectedWorkflowsTable({
148
148
  const l = { ...DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, ...connectedLabels };
149
149
  const { notify, confirm, openConversation } = chunkWGWP4ATS_cjs.useBlocksEnvironment();
150
150
  const openWorkflow = chunk53RXGFJ6_cjs.useOpenWorkflow();
151
- const host = chunkLUO46ELJ_cjs.useHost().workflows;
151
+ const host = chunk3YZKDCWY_cjs.useHost().workflows;
152
152
  const catalogueEntries = filter ? void 0 : host?.catalogue;
153
153
  const catalogue = react$1.useMemo(
154
154
  () => catalogueEntries?.map(({ workflow, category, note, runnable }) => ({
@@ -165,7 +165,7 @@ function ConnectedWorkflowsTable({
165
165
  );
166
166
  const { canEditShared, isWorkspaceOwner } = useConnectedWorkspaceRole();
167
167
  const { data: saved = [], isLoading } = react.useWorkflows({ live: true });
168
- const { data: conversations, refetch } = chunkD3GZWKHW_cjs.useConnectedConversations({ live: true });
168
+ const { data: conversations, refetch } = chunkEKSHUNJI_cjs.useConnectedConversations({ live: true });
169
169
  const { data: agents = [] } = react.useAgents();
170
170
  const update = react.useUpdateWorkflow();
171
171
  const remove = react.useDeleteWorkflow();
@@ -277,7 +277,7 @@ function ConnectedWorkflowsTable({
277
277
  function useConnectedHouseTemplate() {
278
278
  const arbi = react.useArbi();
279
279
  const { mutateAsync: setWorkspaceTemplate } = react.useSetWorkspaceHouseTemplate();
280
- const { workspaceId, live, ensureWorkspaceOpen } = chunkTJQMC7GJ_cjs.useConnectedWorkspace();
280
+ const { workspaceId, live, ensureWorkspaceOpen } = chunkNNBL3HPG_cjs.useConnectedWorkspace();
281
281
  const { data: workspaces } = react.useWorkspaces({ enabled: live });
282
282
  const workspace = workspaces?.find((w) => w.external_id === workspaceId);
283
283
  const { isWorkspaceOwner } = useConnectedWorkspaceRole();
@@ -329,7 +329,7 @@ function ConnectedNativeDocxEditor({
329
329
  ...props
330
330
  }) {
331
331
  const adapter = useConnectedNativeDocxAdapter(fontBaseUrl);
332
- const { workspaceId } = chunkTJQMC7GJ_cjs.useConnectedWorkspace();
332
+ const { workspaceId } = chunkNNBL3HPG_cjs.useConnectedWorkspace();
333
333
  const commentTarget = useDocxCommentTarget();
334
334
  const [openFailed, setOpenFailed] = react$1.useState(false);
335
335
  const hasOpened = react$1.useRef(false);
@@ -380,7 +380,7 @@ function tokenChanges(arbi) {
380
380
  }
381
381
  function useConnectedNativeDocxAdapter(fontBaseUrl = "/native-docx/fonts") {
382
382
  const arbi = react.useArbi();
383
- const { workspaceId, live, user, ensureWorkspaceOpen } = chunkTJQMC7GJ_cjs.useConnectedWorkspace();
383
+ const { workspaceId, live, user, ensureWorkspaceOpen } = chunkNNBL3HPG_cjs.useConnectedWorkspace();
384
384
  const queries = reactQuery.useQueryClient();
385
385
  const { notify } = chunkWGWP4ATS_cjs.useBlocksEnvironment();
386
386
  const tools = documentTools.useOptionalDocumentTools();
@@ -479,5 +479,5 @@ exports.useConnectedNativeDocxAdapter = useConnectedNativeDocxAdapter;
479
479
  exports.useConnectedWorkspaceRole = useConnectedWorkspaceRole;
480
480
  exports.useDocxCommentTarget = useDocxCommentTarget;
481
481
  exports.useNativeDocxSupport = useNativeDocxSupport;
482
- //# sourceMappingURL=chunk-5OUOPKGE.cjs.map
483
- //# sourceMappingURL=chunk-5OUOPKGE.cjs.map
482
+ //# sourceMappingURL=chunk-45OU2UAA.cjs.map
483
+ //# sourceMappingURL=chunk-45OU2UAA.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/docx/support.ts","../src/connection/docx/useConnectedDocxReferences.tsx","../src/connection/ConnectedWorkflowsTable.tsx","../src/connection/docx/useConnectedHouseTemplate.ts","../src/connection/docx/ConnectedNativeDocxEditor.tsx"],"names":["useHost","useMemo","toWorkflowFieldDocument","jsx","DocumentPicker","useArbi","useConnectedWorkspace","useBlocksEnvironment","useListedDocuments","useRef","buildDeepLinkUrl","parseDeepLinkPath","useWorkspaceUsers","fmtDate","useOpenWorkflow","workflowSteps","useWorkflows","useConnectedConversations","useAgents","useUpdateWorkflow","useDeleteWorkflow","useRunWorkflow","useState","isScheduledWorkflow","useEffect","WorkflowsTable","workflowSignal","workflowTriggerType","useSetWorkspaceHouseTemplate","useWorkspaces","supportsHouseTemplates","workspaceHouseTemplateId","useHouseTemplateCandidates","contentPath","builtinHouseTemplate","isCandidate","useRegisterOpenDocument","jsxs","NativeDocxEditor","useQueryClient","useOptionalDocumentTools","loadDocxFonts","refreshDocuments","fetchSavedSignature","storeSavedSignature"],"mappings":"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","file":"chunk-5OUOPKGE.cjs","sourcesContent":["/**\n * What a host adds to the connected Word editor that the platform API alone cannot give: the\n * workspace's definitions (facts labelled \"Definitions\"), image generation (an assistant run), the\n * host's leave-page guard, and a comment to open the editor at. It is the host configuration's\n * `docx`; every field is optional, and without one the editor simply offers less (no Defined term,\n * no Generate image).\n */\n\nimport { useHost } from '../../provider/host'\nimport type { DefinitionSource } from '../../tags/definitions'\nimport type { DocxImageGeneration } from '../../docx/layout/GenerateImage'\n\nexport interface NativeDocxSupport {\n /** The workspace's definitions. Present: Insert offers Defined term and `@@` the type-ahead. */\n definitions?: () => Promise<DefinitionSource[]>\n /** The platform's image generation. Present: Insert offers Generate image. */\n imageGeneration?: DocxImageGeneration\n /** The open editor has (or no longer has) unsaved changes. */\n onDirtyChange?: (dirty: boolean) => void\n /** A comment thread to open when its document opens (a notification's link), as a hook. */\n useCommentTarget?: () => { documentId: string; commentId: string } | null\n}\n\nconst NO_SUPPORT: NativeDocxSupport = {}\nconst NO_TARGET = () => null\n\nexport function useNativeDocxSupport(): NativeDocxSupport {\n return useHost().docx ?? NO_SUPPORT\n}\n\n/** The comment thread to open with its document (none without the host's). */\nexport function useDocxCommentTarget(): { documentId: string; commentId: string } | null {\n const useTarget = useNativeDocxSupport().useCommentTarget ?? NO_TARGET\n return useTarget()\n}\n","/**\n * The Word editor's references to the workspace's other documents: the documents and their\n * passages (the same parsed passages a fact's citations quote), the ARBI address of a passage\n * (`/wrk-…/doc-…/cnk-…`, the deep link that opens a document at a passage, so the link works from\n * Word too), and opening one wherever the host shows documents, highlighted like a citation.\n */\nimport { useMemo, useRef } from 'react'\nimport { useArbi } from '@arbidocs/react'\nimport type { DocxReferencesAdapter } from '../../docx/references/CrossReferences'\nimport { DocumentPicker } from '../../settings/DocumentPicker'\nimport { buildDeepLinkUrl, parseDeepLinkPath } from '../../lib/deep-link'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { toWorkflowFieldDocument } from '../ConnectedWorkflowLauncher'\nimport { useListedDocuments, type ConnectedDocument } from '../workspaceData'\n\ninterface ParsedChunk {\n content?: string | null\n metadata?: { chunk_ext_id?: string | null; page_number?: number | null } | null\n}\n\n/** Top-level documents only: an attachment opens with its parent. */\nconst isTopLevel = (doc: ConnectedDocument) => !doc.parent_ext_id\n\nfunction ReferencePicker({\n documents,\n selectedId,\n onSelect,\n}: {\n documents: ConnectedDocument[]\n selectedId: string | null\n onSelect: (documentId: string) => void\n}) {\n const groups = useMemo(() => {\n const docs = documents\n .filter(isTopLevel)\n .map(toWorkflowFieldDocument)\n .sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase()))\n return [{ id: 'all', heading: 'In this workspace', docs }]\n }, [documents])\n const selected = groups[0].docs.find((d) => d.id === selectedId)\n return (\n <DocumentPicker\n groups={groups}\n value={selectedId ?? ''}\n onValueChange={onSelect}\n selected={selected}\n labels={{ placeholder: 'Search documents…' }}\n />\n )\n}\n\nexport function useConnectedDocxReferences(): DocxReferencesAdapter {\n const arbi = useArbi()\n const { workspaceId } = useConnectedWorkspace()\n const { openDocument, runtimeConfig } = useBlocksEnvironment()\n const { data: documents } = useListedDocuments()\n // Read when called (the picker, a link): the list grows while the editor is open.\n const documentsRef = useRef(documents)\n documentsRef.current = documents\n return useMemo<DocxReferencesAdapter>(\n () => ({\n documents: async () =>\n documentsRef.current\n .filter(isTopLevel)\n .map((d) => ({ id: d.external_id, title: toWorkflowFieldDocument(d).title })),\n passages: async (documentId) => {\n const parsed = await arbi.documents.getParsedContent(documentId, 'final')\n return ((parsed.chunks ?? []) as ParsedChunk[]).flatMap((chunk) =>\n chunk.metadata?.chunk_ext_id && chunk.content?.trim()\n ? [\n {\n chunkId: chunk.metadata.chunk_ext_id,\n page: chunk.metadata.page_number ?? null,\n text: chunk.content,\n },\n ]\n : []\n )\n },\n linkFor: ({ documentId, chunkId, page }) => {\n const url = buildDeepLinkUrl(\n { workspaceId: workspaceId ?? undefined, documentId, chunkId },\n runtimeConfig.deploymentDomain\n )\n return page ? `${url}?page=${page}` : url\n },\n targetOf: (href) => {\n let url: URL\n try {\n url = new URL(href, window.location.origin)\n } catch {\n return null\n }\n const { documentId, chunkId } = parseDeepLinkPath(url.pathname)\n if (!documentId || !chunkId) return null\n const page = Number(url.searchParams.get('page')) || null\n return { documentId, chunkId, page }\n },\n open: ({ documentId, chunkId, page }) =>\n openDocument(documentId, { passageId: chunkId, page: page ?? undefined }),\n renderDocumentPicker: (onSelect, selectedId) => (\n <ReferencePicker\n documents={documentsRef.current}\n selectedId={selectedId}\n onSelect={onSelect}\n />\n ),\n }),\n [arbi, workspaceId, openDocument, runtimeConfig.deploymentDomain]\n )\n}\n","/**\n * The saved workflows bound to the connection: when each starts, its last run (a link to the thread\n * it created) and next run, who runs it, pause and resume, share, run now, delete (one or many), and\n * the workflow's history. The host opens a workflow (its builder) and its history; threads open\n * through the environment's `openConversation`, failures are told through its `notify`.\n *\n * The host's catalogue (the host configuration's `workflows.catalogue`), when it has one, is listed\n * in its categories above the saved workflows: an entry opens in the builder (`onOpenTemplate`) or\n * runs (the environment's `openWorkflow(id, { view: 'run' })`). A filtered list (`filter`) is about\n * saved workflows only and leaves the catalogue out.\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport {\n useAgents,\n useDeleteWorkflow,\n useRunWorkflow,\n useUpdateWorkflow,\n useWorkflows,\n useWorkspaceUsers,\n type WorkflowResponse,\n} from '@arbidocs/react'\nimport { WorkflowsTable, type WorkflowsTableProps } from '../agents/tasks/WorkflowsTable'\nimport type { WorkflowCatalogueRow } from '../agents/tasks/WorkflowCatalogueSections'\nimport {\n isScheduledWorkflow,\n workflowSignal,\n workflowTriggerType,\n} from '../agents/tasks/workflowRows'\nimport { workflowSteps } from '../agents/workflows/run'\nimport { fmtDate } from '../lib/format'\nimport { useBlocksEnvironment } from '../provider/environment'\nimport { useOpenWorkflow } from './workflows/useOpenWorkflow'\nimport { useHost } from '../provider/host'\nimport { useConnectedWorkspace } from './ConnectionProvider'\nimport { useConnectedConversations } from './workspaceData'\n\n/** The viewer's role in the open workspace, and the workspace's members. */\nexport function useConnectedWorkspaceRole() {\n const { workspaceId, live, userId, ensureWorkspaceOpen } = useConnectedWorkspace()\n const { data: members = [] } = useWorkspaceUsers(workspaceId ?? undefined, {\n enabled: live && !!workspaceId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const role = members.find((m) => m.user.external_id === userId)?.role\n return {\n members,\n role,\n /** An owner or a collaborator edits, pauses, resumes and runs what is shared with the workspace. */\n canEditShared: role === 'owner' || role === 'collaborator',\n /** With an item's creator, the only one who deletes it. */\n isWorkspaceOwner: role === 'owner',\n }\n}\n\nexport interface ConnectedWorkflowsTableLabels {\n /** A change (pause, share, delete) that failed without a message. */\n updateFailed: string\n deleteTitle: string\n deleteOne: (name: string) => string\n deleteMany: (count: number) => string\n /** A run that failed: its history has the error report. */\n runFailed: string\n /** A run that created no thread. */\n noThread: string\n /** A document action that started (it has no thread): what is happening. */\n documentAction: (workflow: WorkflowResponse) => string\n untitledTask: string\n /** When a workflow that starts on a step signal starts (the default trigger text). */\n signalTrigger: (signal: string) => string\n}\n\nexport const DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS: ConnectedWorkflowsTableLabels = {\n updateFailed: 'Could not update the workflow',\n deleteTitle: 'Delete workflow',\n deleteOne: (name) => `Delete “${name}”? Threads it already created stay.`,\n deleteMany: (count) => `Delete ${count} workflows? Threads they already created stay.`,\n runFailed: 'The workflow failed. You can send an error report from its history.',\n noThread: 'The workflow did not create a thread.',\n documentAction: (workflow) =>\n workflow.action?.type === 'email_documents'\n ? 'Preparing your document email'\n : 'Reviewing documents',\n untitledTask: 'Untitled thread',\n signalTrigger: (signal) => `When a step signals ${signal}`,\n}\n\ntype TableProps = WorkflowsTableProps<WorkflowResponse>\n\nexport interface ConnectedWorkflowsTableProps extends Omit<\n TableProps,\n | 'workflows'\n | 'isLoading'\n | 'busyId'\n | 'describeTrigger'\n | 'formatDate'\n | 'onToggleActive'\n | 'onToggleShared'\n | 'onDelete'\n | 'onDeleteMany'\n | 'onToggleActiveMany'\n | 'onRun'\n | 'onOpenThread'\n | 'lastRuns'\n | 'agentNames'\n | 'taskNames'\n | 'canEditShared'\n | 'isWorkspaceOwner'\n | 'catalogue'\n | 'categories'\n | 'renderIcon'\n> {\n /**\n * Which saved workflows to list: `scheduled` (those that start on a date or a repeat), or a\n * predicate. Default: all.\n */\n filter?: 'scheduled' | ((workflow: WorkflowResponse) => boolean)\n /**\n * When a workflow starts, in the host's words. Default: the step signal it starts on, else its\n * trigger type.\n */\n describeTrigger?: TableProps['describeTrigger']\n formatDate?: TableProps['formatDate']\n connectedLabels?: Partial<ConnectedWorkflowsTableLabels>\n}\n\nconst messageOf = (error: unknown) => (error instanceof Error ? error.message : '')\n\nexport function ConnectedWorkflowsTable({\n filter,\n describeTrigger,\n formatDate = fmtDate,\n onViewRuns,\n connectedLabels,\n onRunTemplate,\n ...tableProps\n}: ConnectedWorkflowsTableProps) {\n const l = { ...DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, ...connectedLabels }\n const { notify, confirm, openConversation } = useBlocksEnvironment()\n const openWorkflow = useOpenWorkflow()\n const host = useHost().workflows\n // A filtered list (the scheduled workflows) is about saved workflows only.\n const catalogueEntries = filter ? undefined : host?.catalogue\n const catalogue = useMemo(\n () =>\n catalogueEntries?.map(({ workflow, category, note, runnable }): WorkflowCatalogueRow => ({\n id: workflow.id,\n title: workflow.title,\n description: workflow.description,\n icon: workflow.icon,\n category,\n stepCount: workflowSteps(workflow).length,\n note,\n runnable,\n })),\n [catalogueEntries]\n )\n const { canEditShared, isWorkspaceOwner } = useConnectedWorkspaceRole()\n const { data: saved = [], isLoading } = useWorkflows({ live: true })\n const { data: conversations, refetch } = useConnectedConversations({ live: true })\n const { data: agents = [] } = useAgents()\n const update = useUpdateWorkflow()\n const remove = useDeleteWorkflow()\n const run = useRunWorkflow()\n const [busyId, setBusyId] = useState<string | null>(null)\n\n const workflows = useMemo(() => {\n const keep = filter === 'scheduled' ? isScheduledWorkflow : filter\n return keep ? saved.filter(keep) : saved\n }, [saved, filter])\n // A clock or an event fired a workflow: the thread it created is new to the conversation list.\n const firingStamp = saved.map((w) => `${w.external_id}:${w.last_fired_at ?? ''}`).join('|')\n useEffect(() => {\n void refetch?.()\n }, [firingStamp, refetch])\n\n const lastRuns = useMemo(() => {\n const out: NonNullable<TableProps['lastRuns']> = {}\n for (const c of conversations) {\n const id = c.workflow_ext_id\n if (id && (!out[id] || Date.parse(c.created_at) > Date.parse(out[id].at)))\n out[id] = { conversationId: c.external_id, at: c.created_at, threadStatus: c.status }\n }\n return out\n }, [conversations])\n const agentNames = useMemo(\n () => Object.fromEntries(agents.map((a) => [a.external_id, a.given_name || a.email])),\n [agents]\n )\n const taskNames = useMemo(\n () =>\n Object.fromEntries(\n conversations\n .filter((c) => c.status != null)\n .map((c) => [c.external_id, c.title || l.untitledTask])\n ),\n [conversations, l.untitledTask]\n )\n\n const act = async (workflow: WorkflowResponse, action: () => Promise<unknown>) => {\n setBusyId(workflow.external_id)\n try {\n await action()\n } catch (error) {\n notify(messageOf(error) || l.updateFailed, 'error')\n } finally {\n setBusyId(null)\n }\n }\n const setActive = (workflow: WorkflowResponse, active: boolean) =>\n act(workflow, () => update.mutateAsync({ workflowId: workflow.external_id, patch: { active } }))\n const deleteAll = async (items: WorkflowResponse[]) => {\n if (!items.length) return\n const ok = await confirm({\n title: l.deleteTitle,\n message: items.length === 1 ? l.deleteOne(items[0].name) : l.deleteMany(items.length),\n })\n if (!ok) return\n for (const workflow of items)\n await act(workflow, () => remove.mutateAsync(workflow.external_id))\n }\n\n return (\n <WorkflowsTable\n {...tableProps}\n workflows={workflows}\n isLoading={isLoading}\n busyId={busyId}\n describeTrigger={\n describeTrigger ??\n ((w) => {\n const signal = workflowSignal(w)\n return signal ? l.signalTrigger(signal) : workflowTriggerType(w).replaceAll('_', ' ')\n })\n }\n catalogue={catalogue}\n categories={host?.categories}\n renderIcon={host?.renderIcon}\n onRunTemplate={onRunTemplate ?? (openWorkflow && ((id) => openWorkflow(id, { view: 'run' })))}\n formatDate={formatDate}\n agentNames={agentNames}\n taskNames={taskNames}\n lastRuns={lastRuns}\n canEditShared={canEditShared}\n isWorkspaceOwner={isWorkspaceOwner}\n onOpenThread={(conversationId) => openConversation(conversationId)}\n onViewRuns={onViewRuns}\n onToggleActive={(workflow, active) => void setActive(workflow, active)}\n onToggleActiveMany={(items, active) => {\n void (async () => {\n for (const workflow of items) await setActive(workflow, active)\n })()\n }}\n onToggleShared={(workflow, shared) =>\n void act(workflow, () =>\n update.mutateAsync({ workflowId: workflow.external_id, patch: { shared } })\n )\n }\n onDelete={(workflow) => void deleteAll([workflow])}\n onDeleteMany={(items) => void deleteAll(items)}\n onRun={(workflow) =>\n void act(workflow, async () => {\n const result = await run.mutateAsync(workflow.external_id)\n if (result.conversation_ext_id) openConversation(result.conversation_ext_id)\n if (result.error) {\n onViewRuns?.(workflow)\n notify(l.runFailed, 'error')\n return\n }\n if (result.execution_id && !result.conversation_ext_id) {\n // A document action runs without a thread: its history shows how it goes.\n onViewRuns?.(workflow)\n notify(l.documentAction(workflow), 'success')\n return\n }\n if (!result.conversation_ext_id) throw new Error(l.noThread)\n })\n }\n />\n )\n}\n","/**\n * The house template for the open workspace: its own (a document of the workspace), else the\n * deployment's default, else ARBI's built-in legal template. A workspace owner can make a document\n * the house template once the server supports it.\n */\nimport { useMemo } from 'react'\nimport {\n supportsHouseTemplates,\n useArbi,\n useHouseTemplateCandidates,\n useSetWorkspaceHouseTemplate,\n useWorkspaces,\n workspaceHouseTemplateId,\n} from '@arbidocs/react'\nimport { contentPath } from '../../docx/NativeDocxEditor'\nimport {\n builtinHouseTemplate,\n type HouseTemplate,\n type HouseTemplateHost,\n} from '../../docx/template/HouseTemplate'\nimport { isCandidate } from '../../docx/template/candidates'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { useConnectedWorkspaceRole } from '../ConnectedWorkflowsTable'\n\nexport function useConnectedHouseTemplate(): HouseTemplateHost {\n const arbi = useArbi()\n const { mutateAsync: setWorkspaceTemplate } = useSetWorkspaceHouseTemplate()\n const { workspaceId, live, ensureWorkspaceOpen } = useConnectedWorkspace()\n const { data: workspaces } = useWorkspaces({ enabled: live })\n const workspace = workspaces?.find((w) => w.external_id === workspaceId)\n const { isWorkspaceOwner } = useConnectedWorkspaceRole()\n const supported = supportsHouseTemplates(workspace)\n const templateId = workspaceHouseTemplateId(workspace)\n // Only an eligible document (shared, Word, here or in a public workspace) is offered as the template.\n const { data: candidates } = useHouseTemplateCandidates(\n workspaceId,\n supported && isWorkspaceOwner\n )\n return useMemo<HouseTemplateHost>(\n () => ({\n load: async (): Promise<HouseTemplate> => {\n if (templateId) {\n await ensureWorkspaceOpen()\n const response = await arbi.editor.request(contentPath(templateId))\n const [record] = await arbi.documents.get([templateId]).catch(() => [])\n return {\n bytes: new Uint8Array(await response.arrayBuffer()),\n name: record?.file_name ?? 'House template.docx',\n source: 'workspace',\n documentId: templateId,\n }\n }\n if (supported) {\n const deployment = await arbi.houseTemplates.deployment()\n if (deployment) return { ...deployment, source: 'deployment' }\n }\n return builtinHouseTemplate()\n },\n setFromDocument:\n supported && isWorkspaceOwner\n ? async (documentId) => {\n await ensureWorkspaceOpen()\n await setWorkspaceTemplate(documentId)\n }\n : undefined,\n isEligible: (documentId) => isCandidate(candidates, documentId),\n }),\n [\n arbi,\n setWorkspaceTemplate,\n supported,\n templateId,\n isWorkspaceOwner,\n candidates,\n ensureWorkspaceOpen,\n ]\n )\n}\n","import { useMemo, useRef, useState } from 'react'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { refreshDocuments, useArbi, useWorkspaceUsers } from '@arbidocs/react'\nimport {\n fetchSavedSignature,\n storeSavedSignature,\n useOptionalDocumentTools,\n} from '@arbidocs/react/document-tools'\nimport {\n NativeDocxEditor,\n type NativeDocxAdapter,\n type NativeDocxEditorProps,\n} from '../../docx/NativeDocxEditor'\nimport { loadDocxFonts } from '../../docx/fonts'\nimport { useRegisterOpenDocument } from '@arbidocs/react/shell'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { useDocxCommentTarget, useNativeDocxSupport } from './support'\nimport { useConnectedDocxReferences } from './useConnectedDocxReferences'\nimport { useConnectedHouseTemplate } from './useConnectedHouseTemplate'\n\nexport type ConnectedNativeDocxEditorProps = Omit<NativeDocxEditorProps, 'adapter' | 'compact'> & {\n fontBaseUrl?: string\n}\n\n/**\n * The native Word editor on the signed-in ARBI session, under any host (`defaultHost`'s sign-in\n * layer, or the host's own `arbi` and session state). Until a live session has opened, a failure to\n * open one falls back to the saved copy, read-only, so the document is still readable; later token\n * refreshes are not guarded (switching modes would drop unsaved edits).\n */\nexport function ConnectedNativeDocxEditor({\n fontBaseUrl = '/native-docx/fonts',\n ...props\n}: ConnectedNativeDocxEditorProps) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n const { workspaceId } = useConnectedWorkspace()\n const commentTarget = useDocxCommentTarget()\n const [openFailed, setOpenFailed] = useState(false)\n const hasOpened = useRef(false)\n const guardedAdapter = useMemo<NativeDocxAdapter>(\n () => ({\n ...adapter,\n open: async (documentId) => {\n try {\n const session = await adapter.open(documentId)\n hasOpened.current = true\n return session\n } catch (error) {\n if (!hasOpened.current) setOpenFailed(true)\n throw error\n }\n },\n }),\n [adapter]\n )\n // Drafting mode: the saved Word document being edited is what the chat is about. A history\n // snapshot, a streamed preview, an unsaved draft and an embedded body field are not.\n const live = !props.snapshot && !props.stream && !props.draftContent\n useRegisterOpenDocument({ documentId: live ? props.documentId : null, workspaceId })\n const initialCommentId =\n props.initialCommentId ??\n (commentTarget?.documentId === props.documentId ? commentTarget.commentId : undefined)\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n {openFailed && (\n <p role=\"status\" className=\"text-muted-foreground border-b px-3 py-2 text-xs\">\n Co-editing isn&apos;t available for this document right now, so this is a read-only copy\n of the last saved version.\n </p>\n )}\n <div className=\"min-h-0 flex-1\">\n <NativeDocxEditor\n {...props}\n snapshot={props.snapshot || openFailed}\n initialCommentId={initialCommentId}\n adapter={guardedAdapter}\n />\n </div>\n </div>\n )\n}\n\n/** The access token changed (a refresh): the live room is told the new one. */\nfunction tokenChanges(arbi: ReturnType<typeof useArbi>) {\n return (listener: () => void) => {\n if (!arbi.isLoggedIn) return () => {}\n const session = arbi.getClient().session\n let token = session.getState().accessToken\n return session.subscribe((state) => {\n if (state.accessToken === token) return\n token = state.accessToken\n listener()\n })\n }\n}\n\n/**\n * The native Word adapter on the signed-in session: the editor transport, the people to mention,\n * cross-references, the house template, and the host's extras (its host config's `docx`).\n */\nexport function useConnectedNativeDocxAdapter(fontBaseUrl = '/native-docx/fonts') {\n const arbi = useArbi()\n const { workspaceId, live, user, ensureWorkspaceOpen } = useConnectedWorkspace()\n const queries = useQueryClient()\n const { notify } = useBlocksEnvironment()\n const tools = useOptionalDocumentTools()\n const support = useNativeDocxSupport()\n const references = useConnectedDocxReferences()\n const houseTemplate = useConnectedHouseTemplate()\n const { data: members } = useWorkspaceUsers(workspaceId ?? undefined, {\n enabled: live && !!workspaceId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const onDocumentsChanged = tools?.onDocumentsChanged\n // Tracked changes and comments are authored by the user's first name.\n const author = (live && arbi.user.profile()?.givenName) || user?.name || 'You'\n const adapter = useMemo<NativeDocxAdapter>(\n () => ({\n request: async (path, options) => {\n await ensureWorkspaceOpen()\n return arbi.editor.request(path, options)\n },\n open: async (id) => {\n await ensureWorkspaceOpen()\n return (\n await arbi.editor.request(`/${encodeURIComponent(id)}/session`, { method: 'POST' })\n ).json()\n },\n save: async (id, state) =>\n (\n await arbi.editor.request(`/${encodeURIComponent(id)}/save`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ state }),\n })\n ).json(),\n loadFonts: () => loadDocxFonts(fontBaseUrl),\n baseUrl: arbi.getConnectionInfo()?.baseUrl || window.location.origin,\n author,\n subscribeTokenChanges: tokenChanges(arbi),\n onDirtyChange: support.onDirtyChange,\n // The document's row moves to the saved version in place: through the host when it keeps\n // the lists (its document tools refresh them), else here.\n onVersionSaved: async (id) => {\n await (onDocumentsChanged\n ? onDocumentsChanged([id], 'version')\n : refreshDocuments(queries, arbi, [id]))\n },\n notify,\n mentions: members?.map(({ user: member }) => ({\n id: member.external_id,\n name: [member.given_name, member.family_name].filter(Boolean).join(' '),\n kind: member.external_id.startsWith('agt-') ? 'agent' : 'human',\n })),\n savedSignature: {\n load: () => fetchSavedSignature(arbi.getClient().fetch),\n save: (signature) => storeSavedSignature(arbi.getClient().fetch, signature),\n defaultName: user?.name ?? '',\n },\n signatureSigners: members\n ?.filter(({ user: member }) => member.external_id.startsWith('usr-'))\n .map(({ user: member }) => ({\n email: member.email,\n name: [member.given_name, member.family_name].filter(Boolean).join(' '),\n })),\n requestAgent: async (id, request) => {\n const response = await arbi.editor.request(`/${encodeURIComponent(id)}/mentions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n comment_id: request.commentId,\n instruction: request.instruction,\n request_id: request.requestId,\n recipient_ids: request.recipientIds,\n }),\n })\n const delivery = (await response.json()) as { response_ids: string[] }\n notify('Mention delivered.', 'success')\n return { responseIds: delivery.response_ids || [] }\n },\n getAgentStatus: async (responseId) => (await arbi.assistant.getResponse(responseId)).status,\n definitions: support.definitions,\n references,\n imageGeneration: support.imageGeneration,\n houseTemplate,\n }),\n [\n arbi,\n author,\n members,\n ensureWorkspaceOpen,\n fontBaseUrl,\n queries,\n notify,\n onDocumentsChanged,\n support,\n references,\n houseTemplate,\n user?.name,\n ]\n )\n return adapter\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/docx/support.ts","../src/connection/docx/useConnectedDocxReferences.tsx","../src/connection/ConnectedWorkflowsTable.tsx","../src/connection/docx/useConnectedHouseTemplate.ts","../src/connection/docx/ConnectedNativeDocxEditor.tsx"],"names":["useHost","useMemo","toWorkflowFieldDocument","jsx","DocumentPicker","useArbi","useConnectedWorkspace","useBlocksEnvironment","useListedDocuments","useRef","buildDeepLinkUrl","parseDeepLinkPath","useWorkspaceUsers","fmtDate","useOpenWorkflow","workflowSteps","useWorkflows","useConnectedConversations","useAgents","useUpdateWorkflow","useDeleteWorkflow","useRunWorkflow","useState","isScheduledWorkflow","useEffect","WorkflowsTable","workflowSignal","workflowTriggerType","useSetWorkspaceHouseTemplate","useWorkspaces","supportsHouseTemplates","workspaceHouseTemplateId","useHouseTemplateCandidates","contentPath","builtinHouseTemplate","isCandidate","useRegisterOpenDocument","jsxs","NativeDocxEditor","useQueryClient","useOptionalDocumentTools","loadDocxFonts","refreshDocuments","fetchSavedSignature","storeSavedSignature"],"mappings":"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","file":"chunk-45OU2UAA.cjs","sourcesContent":["/**\n * What a host adds to the connected Word editor that the platform API alone cannot give: the\n * workspace's definitions (facts labelled \"Definitions\"), image generation (an assistant run), the\n * host's leave-page guard, and a comment to open the editor at. It is the host configuration's\n * `docx`; every field is optional, and without one the editor simply offers less (no Defined term,\n * no Generate image).\n */\n\nimport { useHost } from '../../provider/host'\nimport type { DefinitionSource } from '../../tags/definitions'\nimport type { DocxImageGeneration } from '../../docx/layout/GenerateImage'\n\nexport interface NativeDocxSupport {\n /** The workspace's definitions. Present: Insert offers Defined term and `@@` the type-ahead. */\n definitions?: () => Promise<DefinitionSource[]>\n /** The platform's image generation. Present: Insert offers Generate image. */\n imageGeneration?: DocxImageGeneration\n /** The open editor has (or no longer has) unsaved changes. */\n onDirtyChange?: (dirty: boolean) => void\n /** A comment thread to open when its document opens (a notification's link), as a hook. */\n useCommentTarget?: () => { documentId: string; commentId: string } | null\n}\n\nconst NO_SUPPORT: NativeDocxSupport = {}\nconst NO_TARGET = () => null\n\nexport function useNativeDocxSupport(): NativeDocxSupport {\n return useHost().docx ?? NO_SUPPORT\n}\n\n/** The comment thread to open with its document (none without the host's). */\nexport function useDocxCommentTarget(): { documentId: string; commentId: string } | null {\n const useTarget = useNativeDocxSupport().useCommentTarget ?? NO_TARGET\n return useTarget()\n}\n","/**\n * The Word editor's references to the workspace's other documents: the documents and their\n * passages (the same parsed passages a fact's citations quote), the ARBI address of a passage\n * (`/wrk-…/doc-…/cnk-…`, the deep link that opens a document at a passage, so the link works from\n * Word too), and opening one wherever the host shows documents, highlighted like a citation.\n */\nimport { useMemo, useRef } from 'react'\nimport { useArbi } from '@arbidocs/react'\nimport type { DocxReferencesAdapter } from '../../docx/references/CrossReferences'\nimport { DocumentPicker } from '../../settings/DocumentPicker'\nimport { buildDeepLinkUrl, parseDeepLinkPath } from '../../lib/deep-link'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { toWorkflowFieldDocument } from '../ConnectedWorkflowLauncher'\nimport { useListedDocuments, type ConnectedDocument } from '../workspaceData'\n\ninterface ParsedChunk {\n content?: string | null\n metadata?: { chunk_ext_id?: string | null; page_number?: number | null } | null\n}\n\n/** Top-level documents only: an attachment opens with its parent. */\nconst isTopLevel = (doc: ConnectedDocument) => !doc.parent_ext_id\n\nfunction ReferencePicker({\n documents,\n selectedId,\n onSelect,\n}: {\n documents: ConnectedDocument[]\n selectedId: string | null\n onSelect: (documentId: string) => void\n}) {\n const groups = useMemo(() => {\n const docs = documents\n .filter(isTopLevel)\n .map(toWorkflowFieldDocument)\n .sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase()))\n return [{ id: 'all', heading: 'In this workspace', docs }]\n }, [documents])\n const selected = groups[0].docs.find((d) => d.id === selectedId)\n return (\n <DocumentPicker\n groups={groups}\n value={selectedId ?? ''}\n onValueChange={onSelect}\n selected={selected}\n labels={{ placeholder: 'Search documents…' }}\n />\n )\n}\n\nexport function useConnectedDocxReferences(): DocxReferencesAdapter {\n const arbi = useArbi()\n const { workspaceId } = useConnectedWorkspace()\n const { openDocument, runtimeConfig } = useBlocksEnvironment()\n const { data: documents } = useListedDocuments()\n // Read when called (the picker, a link): the list grows while the editor is open.\n const documentsRef = useRef(documents)\n documentsRef.current = documents\n return useMemo<DocxReferencesAdapter>(\n () => ({\n documents: async () =>\n documentsRef.current\n .filter(isTopLevel)\n .map((d) => ({ id: d.external_id, title: toWorkflowFieldDocument(d).title })),\n passages: async (documentId) => {\n const parsed = await arbi.documents.getParsedContent(documentId, 'final')\n return ((parsed.chunks ?? []) as ParsedChunk[]).flatMap((chunk) =>\n chunk.metadata?.chunk_ext_id && chunk.content?.trim()\n ? [\n {\n chunkId: chunk.metadata.chunk_ext_id,\n page: chunk.metadata.page_number ?? null,\n text: chunk.content,\n },\n ]\n : []\n )\n },\n linkFor: ({ documentId, chunkId, page }) => {\n const url = buildDeepLinkUrl(\n { workspaceId: workspaceId ?? undefined, documentId, chunkId },\n runtimeConfig.deploymentDomain\n )\n return page ? `${url}?page=${page}` : url\n },\n targetOf: (href) => {\n let url: URL\n try {\n url = new URL(href, window.location.origin)\n } catch {\n return null\n }\n const { documentId, chunkId } = parseDeepLinkPath(url.pathname)\n if (!documentId || !chunkId) return null\n const page = Number(url.searchParams.get('page')) || null\n return { documentId, chunkId, page }\n },\n open: ({ documentId, chunkId, page }) =>\n openDocument(documentId, { passageId: chunkId, page: page ?? undefined }),\n renderDocumentPicker: (onSelect, selectedId) => (\n <ReferencePicker\n documents={documentsRef.current}\n selectedId={selectedId}\n onSelect={onSelect}\n />\n ),\n }),\n [arbi, workspaceId, openDocument, runtimeConfig.deploymentDomain]\n )\n}\n","/**\n * The saved workflows bound to the connection: when each starts, its last run (a link to the thread\n * it created) and next run, who runs it, pause and resume, share, run now, delete (one or many), and\n * the workflow's history. The host opens a workflow (its builder) and its history; threads open\n * through the environment's `openConversation`, failures are told through its `notify`.\n *\n * The host's catalogue (the host configuration's `workflows.catalogue`), when it has one, is listed\n * in its categories above the saved workflows: an entry opens in the builder (`onOpenTemplate`) or\n * runs (the environment's `openWorkflow(id, { view: 'run' })`). A filtered list (`filter`) is about\n * saved workflows only and leaves the catalogue out.\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport {\n useAgents,\n useDeleteWorkflow,\n useRunWorkflow,\n useUpdateWorkflow,\n useWorkflows,\n useWorkspaceUsers,\n type WorkflowResponse,\n} from '@arbidocs/react'\nimport { WorkflowsTable, type WorkflowsTableProps } from '../agents/tasks/WorkflowsTable'\nimport type { WorkflowCatalogueRow } from '../agents/tasks/WorkflowCatalogueSections'\nimport {\n isScheduledWorkflow,\n workflowSignal,\n workflowTriggerType,\n} from '../agents/tasks/workflowRows'\nimport { workflowSteps } from '../agents/workflows/run'\nimport { fmtDate } from '../lib/format'\nimport { useBlocksEnvironment } from '../provider/environment'\nimport { useOpenWorkflow } from './workflows/useOpenWorkflow'\nimport { useHost } from '../provider/host'\nimport { useConnectedWorkspace } from './ConnectionProvider'\nimport { useConnectedConversations } from './workspaceData'\n\n/** The viewer's role in the open workspace, and the workspace's members. */\nexport function useConnectedWorkspaceRole() {\n const { workspaceId, live, userId, ensureWorkspaceOpen } = useConnectedWorkspace()\n const { data: members = [] } = useWorkspaceUsers(workspaceId ?? undefined, {\n enabled: live && !!workspaceId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const role = members.find((m) => m.user.external_id === userId)?.role\n return {\n members,\n role,\n /** An owner or a collaborator edits, pauses, resumes and runs what is shared with the workspace. */\n canEditShared: role === 'owner' || role === 'collaborator',\n /** With an item's creator, the only one who deletes it. */\n isWorkspaceOwner: role === 'owner',\n }\n}\n\nexport interface ConnectedWorkflowsTableLabels {\n /** A change (pause, share, delete) that failed without a message. */\n updateFailed: string\n deleteTitle: string\n deleteOne: (name: string) => string\n deleteMany: (count: number) => string\n /** A run that failed: its history has the error report. */\n runFailed: string\n /** A run that created no thread. */\n noThread: string\n /** A document action that started (it has no thread): what is happening. */\n documentAction: (workflow: WorkflowResponse) => string\n untitledTask: string\n /** When a workflow that starts on a step signal starts (the default trigger text). */\n signalTrigger: (signal: string) => string\n}\n\nexport const DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS: ConnectedWorkflowsTableLabels = {\n updateFailed: 'Could not update the workflow',\n deleteTitle: 'Delete workflow',\n deleteOne: (name) => `Delete “${name}”? Threads it already created stay.`,\n deleteMany: (count) => `Delete ${count} workflows? Threads they already created stay.`,\n runFailed: 'The workflow failed. You can send an error report from its history.',\n noThread: 'The workflow did not create a thread.',\n documentAction: (workflow) =>\n workflow.action?.type === 'email_documents'\n ? 'Preparing your document email'\n : 'Reviewing documents',\n untitledTask: 'Untitled thread',\n signalTrigger: (signal) => `When a step signals ${signal}`,\n}\n\ntype TableProps = WorkflowsTableProps<WorkflowResponse>\n\nexport interface ConnectedWorkflowsTableProps extends Omit<\n TableProps,\n | 'workflows'\n | 'isLoading'\n | 'busyId'\n | 'describeTrigger'\n | 'formatDate'\n | 'onToggleActive'\n | 'onToggleShared'\n | 'onDelete'\n | 'onDeleteMany'\n | 'onToggleActiveMany'\n | 'onRun'\n | 'onOpenThread'\n | 'lastRuns'\n | 'agentNames'\n | 'taskNames'\n | 'canEditShared'\n | 'isWorkspaceOwner'\n | 'catalogue'\n | 'categories'\n | 'renderIcon'\n> {\n /**\n * Which saved workflows to list: `scheduled` (those that start on a date or a repeat), or a\n * predicate. Default: all.\n */\n filter?: 'scheduled' | ((workflow: WorkflowResponse) => boolean)\n /**\n * When a workflow starts, in the host's words. Default: the step signal it starts on, else its\n * trigger type.\n */\n describeTrigger?: TableProps['describeTrigger']\n formatDate?: TableProps['formatDate']\n connectedLabels?: Partial<ConnectedWorkflowsTableLabels>\n}\n\nconst messageOf = (error: unknown) => (error instanceof Error ? error.message : '')\n\nexport function ConnectedWorkflowsTable({\n filter,\n describeTrigger,\n formatDate = fmtDate,\n onViewRuns,\n connectedLabels,\n onRunTemplate,\n ...tableProps\n}: ConnectedWorkflowsTableProps) {\n const l = { ...DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, ...connectedLabels }\n const { notify, confirm, openConversation } = useBlocksEnvironment()\n const openWorkflow = useOpenWorkflow()\n const host = useHost().workflows\n // A filtered list (the scheduled workflows) is about saved workflows only.\n const catalogueEntries = filter ? undefined : host?.catalogue\n const catalogue = useMemo(\n () =>\n catalogueEntries?.map(({ workflow, category, note, runnable }): WorkflowCatalogueRow => ({\n id: workflow.id,\n title: workflow.title,\n description: workflow.description,\n icon: workflow.icon,\n category,\n stepCount: workflowSteps(workflow).length,\n note,\n runnable,\n })),\n [catalogueEntries]\n )\n const { canEditShared, isWorkspaceOwner } = useConnectedWorkspaceRole()\n const { data: saved = [], isLoading } = useWorkflows({ live: true })\n const { data: conversations, refetch } = useConnectedConversations({ live: true })\n const { data: agents = [] } = useAgents()\n const update = useUpdateWorkflow()\n const remove = useDeleteWorkflow()\n const run = useRunWorkflow()\n const [busyId, setBusyId] = useState<string | null>(null)\n\n const workflows = useMemo(() => {\n const keep = filter === 'scheduled' ? isScheduledWorkflow : filter\n return keep ? saved.filter(keep) : saved\n }, [saved, filter])\n // A clock or an event fired a workflow: the thread it created is new to the conversation list.\n const firingStamp = saved.map((w) => `${w.external_id}:${w.last_fired_at ?? ''}`).join('|')\n useEffect(() => {\n void refetch?.()\n }, [firingStamp, refetch])\n\n const lastRuns = useMemo(() => {\n const out: NonNullable<TableProps['lastRuns']> = {}\n for (const c of conversations) {\n const id = c.workflow_ext_id\n if (id && (!out[id] || Date.parse(c.created_at) > Date.parse(out[id].at)))\n out[id] = { conversationId: c.external_id, at: c.created_at, threadStatus: c.status }\n }\n return out\n }, [conversations])\n const agentNames = useMemo(\n () => Object.fromEntries(agents.map((a) => [a.external_id, a.given_name || a.email])),\n [agents]\n )\n const taskNames = useMemo(\n () =>\n Object.fromEntries(\n conversations\n .filter((c) => c.status != null)\n .map((c) => [c.external_id, c.title || l.untitledTask])\n ),\n [conversations, l.untitledTask]\n )\n\n const act = async (workflow: WorkflowResponse, action: () => Promise<unknown>) => {\n setBusyId(workflow.external_id)\n try {\n await action()\n } catch (error) {\n notify(messageOf(error) || l.updateFailed, 'error')\n } finally {\n setBusyId(null)\n }\n }\n const setActive = (workflow: WorkflowResponse, active: boolean) =>\n act(workflow, () => update.mutateAsync({ workflowId: workflow.external_id, patch: { active } }))\n const deleteAll = async (items: WorkflowResponse[]) => {\n if (!items.length) return\n const ok = await confirm({\n title: l.deleteTitle,\n message: items.length === 1 ? l.deleteOne(items[0].name) : l.deleteMany(items.length),\n })\n if (!ok) return\n for (const workflow of items)\n await act(workflow, () => remove.mutateAsync(workflow.external_id))\n }\n\n return (\n <WorkflowsTable\n {...tableProps}\n workflows={workflows}\n isLoading={isLoading}\n busyId={busyId}\n describeTrigger={\n describeTrigger ??\n ((w) => {\n const signal = workflowSignal(w)\n return signal ? l.signalTrigger(signal) : workflowTriggerType(w).replaceAll('_', ' ')\n })\n }\n catalogue={catalogue}\n categories={host?.categories}\n renderIcon={host?.renderIcon}\n onRunTemplate={onRunTemplate ?? (openWorkflow && ((id) => openWorkflow(id, { view: 'run' })))}\n formatDate={formatDate}\n agentNames={agentNames}\n taskNames={taskNames}\n lastRuns={lastRuns}\n canEditShared={canEditShared}\n isWorkspaceOwner={isWorkspaceOwner}\n onOpenThread={(conversationId) => openConversation(conversationId)}\n onViewRuns={onViewRuns}\n onToggleActive={(workflow, active) => void setActive(workflow, active)}\n onToggleActiveMany={(items, active) => {\n void (async () => {\n for (const workflow of items) await setActive(workflow, active)\n })()\n }}\n onToggleShared={(workflow, shared) =>\n void act(workflow, () =>\n update.mutateAsync({ workflowId: workflow.external_id, patch: { shared } })\n )\n }\n onDelete={(workflow) => void deleteAll([workflow])}\n onDeleteMany={(items) => void deleteAll(items)}\n onRun={(workflow) =>\n void act(workflow, async () => {\n const result = await run.mutateAsync(workflow.external_id)\n if (result.conversation_ext_id) openConversation(result.conversation_ext_id)\n if (result.error) {\n onViewRuns?.(workflow)\n notify(l.runFailed, 'error')\n return\n }\n if (result.execution_id && !result.conversation_ext_id) {\n // A document action runs without a thread: its history shows how it goes.\n onViewRuns?.(workflow)\n notify(l.documentAction(workflow), 'success')\n return\n }\n if (!result.conversation_ext_id) throw new Error(l.noThread)\n })\n }\n />\n )\n}\n","/**\n * The house template for the open workspace: its own (a document of the workspace), else the\n * deployment's default, else ARBI's built-in legal template. A workspace owner can make a document\n * the house template once the server supports it.\n */\nimport { useMemo } from 'react'\nimport {\n supportsHouseTemplates,\n useArbi,\n useHouseTemplateCandidates,\n useSetWorkspaceHouseTemplate,\n useWorkspaces,\n workspaceHouseTemplateId,\n} from '@arbidocs/react'\nimport { contentPath } from '../../docx/NativeDocxEditor'\nimport {\n builtinHouseTemplate,\n type HouseTemplate,\n type HouseTemplateHost,\n} from '../../docx/template/HouseTemplate'\nimport { isCandidate } from '../../docx/template/candidates'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { useConnectedWorkspaceRole } from '../ConnectedWorkflowsTable'\n\nexport function useConnectedHouseTemplate(): HouseTemplateHost {\n const arbi = useArbi()\n const { mutateAsync: setWorkspaceTemplate } = useSetWorkspaceHouseTemplate()\n const { workspaceId, live, ensureWorkspaceOpen } = useConnectedWorkspace()\n const { data: workspaces } = useWorkspaces({ enabled: live })\n const workspace = workspaces?.find((w) => w.external_id === workspaceId)\n const { isWorkspaceOwner } = useConnectedWorkspaceRole()\n const supported = supportsHouseTemplates(workspace)\n const templateId = workspaceHouseTemplateId(workspace)\n // Only an eligible document (shared, Word, here or in a public workspace) is offered as the template.\n const { data: candidates } = useHouseTemplateCandidates(\n workspaceId,\n supported && isWorkspaceOwner\n )\n return useMemo<HouseTemplateHost>(\n () => ({\n load: async (): Promise<HouseTemplate> => {\n if (templateId) {\n await ensureWorkspaceOpen()\n const response = await arbi.editor.request(contentPath(templateId))\n const [record] = await arbi.documents.get([templateId]).catch(() => [])\n return {\n bytes: new Uint8Array(await response.arrayBuffer()),\n name: record?.file_name ?? 'House template.docx',\n source: 'workspace',\n documentId: templateId,\n }\n }\n if (supported) {\n const deployment = await arbi.houseTemplates.deployment()\n if (deployment) return { ...deployment, source: 'deployment' }\n }\n return builtinHouseTemplate()\n },\n setFromDocument:\n supported && isWorkspaceOwner\n ? async (documentId) => {\n await ensureWorkspaceOpen()\n await setWorkspaceTemplate(documentId)\n }\n : undefined,\n isEligible: (documentId) => isCandidate(candidates, documentId),\n }),\n [\n arbi,\n setWorkspaceTemplate,\n supported,\n templateId,\n isWorkspaceOwner,\n candidates,\n ensureWorkspaceOpen,\n ]\n )\n}\n","import { useMemo, useRef, useState } from 'react'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { refreshDocuments, useArbi, useWorkspaceUsers } from '@arbidocs/react'\nimport {\n fetchSavedSignature,\n storeSavedSignature,\n useOptionalDocumentTools,\n} from '@arbidocs/react/document-tools'\nimport {\n NativeDocxEditor,\n type NativeDocxAdapter,\n type NativeDocxEditorProps,\n} from '../../docx/NativeDocxEditor'\nimport { loadDocxFonts } from '../../docx/fonts'\nimport { useRegisterOpenDocument } from '@arbidocs/react/shell'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { useDocxCommentTarget, useNativeDocxSupport } from './support'\nimport { useConnectedDocxReferences } from './useConnectedDocxReferences'\nimport { useConnectedHouseTemplate } from './useConnectedHouseTemplate'\n\nexport type ConnectedNativeDocxEditorProps = Omit<NativeDocxEditorProps, 'adapter' | 'compact'> & {\n fontBaseUrl?: string\n}\n\n/**\n * The native Word editor on the signed-in ARBI session, under any host (`defaultHost`'s sign-in\n * layer, or the host's own `arbi` and session state). Until a live session has opened, a failure to\n * open one falls back to the saved copy, read-only, so the document is still readable; later token\n * refreshes are not guarded (switching modes would drop unsaved edits).\n */\nexport function ConnectedNativeDocxEditor({\n fontBaseUrl = '/native-docx/fonts',\n ...props\n}: ConnectedNativeDocxEditorProps) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n const { workspaceId } = useConnectedWorkspace()\n const commentTarget = useDocxCommentTarget()\n const [openFailed, setOpenFailed] = useState(false)\n const hasOpened = useRef(false)\n const guardedAdapter = useMemo<NativeDocxAdapter>(\n () => ({\n ...adapter,\n open: async (documentId) => {\n try {\n const session = await adapter.open(documentId)\n hasOpened.current = true\n return session\n } catch (error) {\n if (!hasOpened.current) setOpenFailed(true)\n throw error\n }\n },\n }),\n [adapter]\n )\n // Drafting mode: the saved Word document being edited is what the chat is about. A history\n // snapshot, a streamed preview, an unsaved draft and an embedded body field are not.\n const live = !props.snapshot && !props.stream && !props.draftContent\n useRegisterOpenDocument({ documentId: live ? props.documentId : null, workspaceId })\n const initialCommentId =\n props.initialCommentId ??\n (commentTarget?.documentId === props.documentId ? commentTarget.commentId : undefined)\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n {openFailed && (\n <p role=\"status\" className=\"text-muted-foreground border-b px-3 py-2 text-xs\">\n Co-editing isn&apos;t available for this document right now, so this is a read-only copy\n of the last saved version.\n </p>\n )}\n <div className=\"min-h-0 flex-1\">\n <NativeDocxEditor\n {...props}\n snapshot={props.snapshot || openFailed}\n initialCommentId={initialCommentId}\n adapter={guardedAdapter}\n />\n </div>\n </div>\n )\n}\n\n/** The access token changed (a refresh): the live room is told the new one. */\nfunction tokenChanges(arbi: ReturnType<typeof useArbi>) {\n return (listener: () => void) => {\n if (!arbi.isLoggedIn) return () => {}\n const session = arbi.getClient().session\n let token = session.getState().accessToken\n return session.subscribe((state) => {\n if (state.accessToken === token) return\n token = state.accessToken\n listener()\n })\n }\n}\n\n/**\n * The native Word adapter on the signed-in session: the editor transport, the people to mention,\n * cross-references, the house template, and the host's extras (its host config's `docx`).\n */\nexport function useConnectedNativeDocxAdapter(fontBaseUrl = '/native-docx/fonts') {\n const arbi = useArbi()\n const { workspaceId, live, user, ensureWorkspaceOpen } = useConnectedWorkspace()\n const queries = useQueryClient()\n const { notify } = useBlocksEnvironment()\n const tools = useOptionalDocumentTools()\n const support = useNativeDocxSupport()\n const references = useConnectedDocxReferences()\n const houseTemplate = useConnectedHouseTemplate()\n const { data: members } = useWorkspaceUsers(workspaceId ?? undefined, {\n enabled: live && !!workspaceId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const onDocumentsChanged = tools?.onDocumentsChanged\n // Tracked changes and comments are authored by the user's first name.\n const author = (live && arbi.user.profile()?.givenName) || user?.name || 'You'\n const adapter = useMemo<NativeDocxAdapter>(\n () => ({\n request: async (path, options) => {\n await ensureWorkspaceOpen()\n return arbi.editor.request(path, options)\n },\n open: async (id) => {\n await ensureWorkspaceOpen()\n return (\n await arbi.editor.request(`/${encodeURIComponent(id)}/session`, { method: 'POST' })\n ).json()\n },\n save: async (id, state) =>\n (\n await arbi.editor.request(`/${encodeURIComponent(id)}/save`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ state }),\n })\n ).json(),\n loadFonts: () => loadDocxFonts(fontBaseUrl),\n baseUrl: arbi.getConnectionInfo()?.baseUrl || window.location.origin,\n author,\n subscribeTokenChanges: tokenChanges(arbi),\n onDirtyChange: support.onDirtyChange,\n // The document's row moves to the saved version in place: through the host when it keeps\n // the lists (its document tools refresh them), else here.\n onVersionSaved: async (id) => {\n await (onDocumentsChanged\n ? onDocumentsChanged([id], 'version')\n : refreshDocuments(queries, arbi, [id]))\n },\n notify,\n mentions: members?.map(({ user: member }) => ({\n id: member.external_id,\n name: [member.given_name, member.family_name].filter(Boolean).join(' '),\n kind: member.external_id.startsWith('agt-') ? 'agent' : 'human',\n })),\n savedSignature: {\n load: () => fetchSavedSignature(arbi.getClient().fetch),\n save: (signature) => storeSavedSignature(arbi.getClient().fetch, signature),\n defaultName: user?.name ?? '',\n },\n signatureSigners: members\n ?.filter(({ user: member }) => member.external_id.startsWith('usr-'))\n .map(({ user: member }) => ({\n email: member.email,\n name: [member.given_name, member.family_name].filter(Boolean).join(' '),\n })),\n requestAgent: async (id, request) => {\n const response = await arbi.editor.request(`/${encodeURIComponent(id)}/mentions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n comment_id: request.commentId,\n instruction: request.instruction,\n request_id: request.requestId,\n recipient_ids: request.recipientIds,\n }),\n })\n const delivery = (await response.json()) as { response_ids: string[] }\n notify('Mention delivered.', 'success')\n return { responseIds: delivery.response_ids || [] }\n },\n getAgentStatus: async (responseId) => (await arbi.assistant.getResponse(responseId)).status,\n definitions: support.definitions,\n references,\n imageGeneration: support.imageGeneration,\n houseTemplate,\n }),\n [\n arbi,\n author,\n members,\n ensureWorkspaceOpen,\n fontBaseUrl,\n queries,\n notify,\n onDocumentsChanged,\n support,\n references,\n houseTemplate,\n user?.name,\n ]\n )\n return adapter\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkLUO46ELJ_cjs = require('./chunk-LUO46ELJ.cjs');
4
+ var chunk3YZKDCWY_cjs = require('./chunk-3YZKDCWY.cjs');
5
5
  var react = require('@arbidocs/react');
6
6
  var shell = require('@arbidocs/react/shell');
7
7
 
@@ -12,7 +12,7 @@ function compareDocumentsIn(session, documentId, otherDocumentId) {
12
12
  }
13
13
  var NO_SUPPORT = {};
14
14
  function useDocumentViewerSupport() {
15
- return chunkLUO46ELJ_cjs.useHost().viewer ?? NO_SUPPORT;
15
+ return chunk3YZKDCWY_cjs.useHost().viewer ?? NO_SUPPORT;
16
16
  }
17
17
  var NONE = () => void 0;
18
18
  var ATTACHED = () => false;
@@ -33,5 +33,5 @@ exports.useDocumentViewerSupport = useDocumentViewerSupport;
33
33
  exports.useViewerIsDetached = useViewerIsDetached;
34
34
  exports.useViewerPassageCitation = useViewerPassageCitation;
35
35
  exports.useViewerStreamingDocument = useViewerStreamingDocument;
36
- //# sourceMappingURL=chunk-JXKNPKU6.cjs.map
37
- //# sourceMappingURL=chunk-JXKNPKU6.cjs.map
36
+ //# sourceMappingURL=chunk-4CIVQWAX.cjs.map
37
+ //# sourceMappingURL=chunk-4CIVQWAX.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/viewer/compareDocuments.ts","../src/connection/viewer/support.ts"],"names":["DOCUMENT_VIEWER_PANEL","useHost","useChatArtifact"],"mappings":";;;;;;AAGO,SAAS,kBAAA,CACd,OAAA,EACA,UAAA,EACA,eAAA,EACM;AACN,EAAA,OAAA,CAAQ,mBAAmB,EAAE,EAAA,EAAI,UAAA,EAAY,IAAA,EAAM,MAAM,CAAA;AACzD,EAAA,OAAA,CAAQ,kBAAkB,EAAE,SAAA,EAAW,eAAA,EAAiB,GAAA,EAAK,QAAQ,CAAA;AACrE,EAAA,OAAA,CAAQ,SAAA,CAAUA,6BAAuB,QAAQ,CAAA;AACnD;AC8DA,IAAM,aAAoC,EAAC;AAEpC,SAAS,wBAAA,GAAkD;AAChE,EAAA,OAAOC,yBAAA,GAAU,MAAA,IAAU,UAAA;AAC7B;AAEA,IAAM,OAAO,MAAM,MAAA;AACnB,IAAM,WAAW,MAAM,KAAA;AAGhB,SAAS,2BACd,UAAA,EACqC;AACrC,EAAA,OAAOC,sBAAgB,UAAU,CAAA;AACnC;AAGO,SAAS,wBAAA,GAAwD;AACtE,EAAA,MAAM,WAAA,GAAc,wBAAA,EAAyB,CAAE,kBAAA,IAAsB,IAAA;AACrE,EAAA,OAAO,WAAA,EAAY;AACrB;AAGO,SAAS,mBAAA,GAA+B;AAC7C,EAAA,MAAM,WAAA,GAAc,wBAAA,EAAyB,CAAE,aAAA,IAAiB,QAAA;AAChE,EAAA,OAAO,WAAA,EAAY;AACrB","file":"chunk-JXKNPKU6.cjs","sourcesContent":["import { DOCUMENT_VIEWER_PANEL, type ArbiSessionStore } from '@arbidocs/react'\n\n/** Open `documentId` in the viewer beside `otherDocumentId`, in the text view. */\nexport function compareDocumentsIn(\n session: Pick<ArbiSessionStore, 'setViewingDocument' | 'setDocumentViewer' | 'openPanel'>,\n documentId: string,\n otherDocumentId: string\n): void {\n session.setViewingDocument({ id: documentId, page: null })\n session.setDocumentViewer({ compareId: otherDocumentId, tab: 'html' })\n session.openPanel(DOCUMENT_VIEWER_PANEL, 'docked')\n}\n","/**\n * What a host adds to the connected document viewer. The viewer reads documents, versions, PDFs,\n * markup and signatures on the signed-in session by itself, and the session's unsaved drafts and\n * related documents (`./drafts`); these are the host's own things it cannot know: the host's\n * dialogs and workflows a document action opens, and how the host lays the viewer out. It is the\n * host configuration's `viewer`. Every field is optional: without one the viewer offers less (no\n * Translate button), never something that does nothing.\n * What changes while the viewer is open is read through hooks (`use…`).\n */\n\nimport type { ReactNode } from 'react'\nimport type { components } from '@arbidocs/client'\nimport { useChatArtifact } from '@arbidocs/react/shell'\nimport { useHost } from '../../provider/host'\n\n/** A document's record, as the viewer reads it. */\nexport type ViewerDocumentRecord = components['schemas']['DocResponse']\n\n/** An artifact being generated in a chat, shown in the viewer as it streams. */\nexport interface ViewerStreamingDocument {\n title?: string | null\n /** The content so far (Markdown, or the html/react source of a live artifact). */\n content: string\n /** How it is carried: a document draft, a live `html` / `react` artifact, an `image`. */\n mode?: string | null\n isComplete: boolean\n}\n\nexport interface DocumentViewerSupport {\n /** A document as a pill (the comparison's other side). Default: its name. */\n renderDocumentPill?: (documentId: string) => ReactNode\n /** Open the host's share dialog for the document. Default: share it with the workspace. */\n share?: (document: { id: string; name: string | undefined; isPrivate: boolean }) => void\n /** Ask the assistant about a version (`doc-…@v2`) open read-only. Absent: not offered. */\n askAboutVersion?: (versionRef: string) => void\n /** Translate the document (or the version) on screen. Absent: not offered. */\n translate?: (documentRef: string) => void\n /** Start an image generation from the image on screen. Absent: not offered. */\n useImageAsReference?: (documentId: string) => void\n /**\n * A citation being edited elsewhere (a fact's sources, a field's) picks its passages in the text\n * view: clicks and selections there are handed to it (a hook). Absent: passages are not pickable.\n */\n usePassageCitation?: () => PassageCitation | undefined\n /** Open the document's passages in the host's navigator (a passage's menu). Absent: not offered. */\n openInNavigator?: (documentId: string) => void\n /** Start a new label or field in the host's editor (the passage tagging panel). Absent: not offered. */\n createTag?: () => void\n /** How dates read (versions, signatures). Default: `fmtDate`. */\n formatDate?: (iso: string) => string\n /** Whether the viewer is shown in another window, where PDF pages render without the page's web\n * fonts (a hook). */\n useIsDetached?: () => boolean\n}\n\n/** A passage picked for a citation: its chunk and, when known, its page. */\nexport interface PickedPassage {\n chunk_id: string\n page?: number\n}\n\n/** The citation a host is editing, as the text view sees it. */\nexport interface PassageCitation {\n /** The citation picking passages now, and the document it picks in; null when none is. */\n active: { documentId: string; key: string | null } | null\n /** Passages to light (a fact's cited passages while its sources are open). */\n highlighted: readonly string[]\n /** Passages added to the citation. */\n pick: (passages: PickedPassage[]) => void\n /** Passages taken off it. */\n unpick: (chunkIds: string[]) => void\n}\n\nconst NO_SUPPORT: DocumentViewerSupport = {}\n\nexport function useDocumentViewerSupport(): DocumentViewerSupport {\n return useHost().viewer ?? NO_SUPPORT\n}\n\nconst NONE = () => undefined\nconst ATTACHED = () => false\n\n/** The artifact a chat is streaming in as this document (the chat engine's `useChatArtifact`). */\nexport function useViewerStreamingDocument(\n documentId: string\n): ViewerStreamingDocument | undefined {\n return useChatArtifact(documentId)\n}\n\n/** The citation picking passages (none without the host's). */\nexport function useViewerPassageCitation(): PassageCitation | undefined {\n const useCitation = useDocumentViewerSupport().usePassageCitation ?? NONE\n return useCitation()\n}\n\n/** Whether the viewer is in another window (never without the host's). */\nexport function useViewerIsDetached(): boolean {\n const useDetached = useDocumentViewerSupport().useIsDetached ?? ATTACHED\n return useDetached()\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/viewer/compareDocuments.ts","../src/connection/viewer/support.ts"],"names":["DOCUMENT_VIEWER_PANEL","useHost","useChatArtifact"],"mappings":";;;;;;AAGO,SAAS,kBAAA,CACd,OAAA,EACA,UAAA,EACA,eAAA,EACM;AACN,EAAA,OAAA,CAAQ,mBAAmB,EAAE,EAAA,EAAI,UAAA,EAAY,IAAA,EAAM,MAAM,CAAA;AACzD,EAAA,OAAA,CAAQ,kBAAkB,EAAE,SAAA,EAAW,eAAA,EAAiB,GAAA,EAAK,QAAQ,CAAA;AACrE,EAAA,OAAA,CAAQ,SAAA,CAAUA,6BAAuB,QAAQ,CAAA;AACnD;AC8DA,IAAM,aAAoC,EAAC;AAEpC,SAAS,wBAAA,GAAkD;AAChE,EAAA,OAAOC,yBAAA,GAAU,MAAA,IAAU,UAAA;AAC7B;AAEA,IAAM,OAAO,MAAM,MAAA;AACnB,IAAM,WAAW,MAAM,KAAA;AAGhB,SAAS,2BACd,UAAA,EACqC;AACrC,EAAA,OAAOC,sBAAgB,UAAU,CAAA;AACnC;AAGO,SAAS,wBAAA,GAAwD;AACtE,EAAA,MAAM,WAAA,GAAc,wBAAA,EAAyB,CAAE,kBAAA,IAAsB,IAAA;AACrE,EAAA,OAAO,WAAA,EAAY;AACrB;AAGO,SAAS,mBAAA,GAA+B;AAC7C,EAAA,MAAM,WAAA,GAAc,wBAAA,EAAyB,CAAE,aAAA,IAAiB,QAAA;AAChE,EAAA,OAAO,WAAA,EAAY;AACrB","file":"chunk-4CIVQWAX.cjs","sourcesContent":["import { DOCUMENT_VIEWER_PANEL, type ArbiSessionStore } from '@arbidocs/react'\n\n/** Open `documentId` in the viewer beside `otherDocumentId`, in the text view. */\nexport function compareDocumentsIn(\n session: Pick<ArbiSessionStore, 'setViewingDocument' | 'setDocumentViewer' | 'openPanel'>,\n documentId: string,\n otherDocumentId: string\n): void {\n session.setViewingDocument({ id: documentId, page: null })\n session.setDocumentViewer({ compareId: otherDocumentId, tab: 'html' })\n session.openPanel(DOCUMENT_VIEWER_PANEL, 'docked')\n}\n","/**\n * What a host adds to the connected document viewer. The viewer reads documents, versions, PDFs,\n * markup and signatures on the signed-in session by itself, and the session's unsaved drafts and\n * related documents (`./drafts`); these are the host's own things it cannot know: the host's\n * dialogs and workflows a document action opens, and how the host lays the viewer out. It is the\n * host configuration's `viewer`. Every field is optional: without one the viewer offers less (no\n * Translate button), never something that does nothing.\n * What changes while the viewer is open is read through hooks (`use…`).\n */\n\nimport type { ReactNode } from 'react'\nimport type { components } from '@arbidocs/client'\nimport { useChatArtifact } from '@arbidocs/react/shell'\nimport { useHost } from '../../provider/host'\n\n/** A document's record, as the viewer reads it. */\nexport type ViewerDocumentRecord = components['schemas']['DocResponse']\n\n/** An artifact being generated in a chat, shown in the viewer as it streams. */\nexport interface ViewerStreamingDocument {\n title?: string | null\n /** The content so far (Markdown, or the html/react source of a live artifact). */\n content: string\n /** How it is carried: a document draft, a live `html` / `react` artifact, an `image`. */\n mode?: string | null\n isComplete: boolean\n}\n\nexport interface DocumentViewerSupport {\n /** A document as a pill (the comparison's other side). Default: its name. */\n renderDocumentPill?: (documentId: string) => ReactNode\n /** Open the host's share dialog for the document. Default: share it with the workspace. */\n share?: (document: { id: string; name: string | undefined; isPrivate: boolean }) => void\n /** Ask the assistant about a version (`doc-…@v2`) open read-only. Absent: not offered. */\n askAboutVersion?: (versionRef: string) => void\n /** Translate the document (or the version) on screen. Absent: not offered. */\n translate?: (documentRef: string) => void\n /** Start an image generation from the image on screen. Absent: not offered. */\n useImageAsReference?: (documentId: string) => void\n /**\n * A citation being edited elsewhere (a fact's sources, a field's) picks its passages in the text\n * view: clicks and selections there are handed to it (a hook). Absent: passages are not pickable.\n */\n usePassageCitation?: () => PassageCitation | undefined\n /** Open the document's passages in the host's navigator (a passage's menu). Absent: not offered. */\n openInNavigator?: (documentId: string) => void\n /** Start a new label or field in the host's editor (the passage tagging panel). Absent: not offered. */\n createTag?: () => void\n /** How dates read (versions, signatures). Default: `fmtDate`. */\n formatDate?: (iso: string) => string\n /** Whether the viewer is shown in another window, where PDF pages render without the page's web\n * fonts (a hook). */\n useIsDetached?: () => boolean\n}\n\n/** A passage picked for a citation: its chunk and, when known, its page. */\nexport interface PickedPassage {\n chunk_id: string\n page?: number\n}\n\n/** The citation a host is editing, as the text view sees it. */\nexport interface PassageCitation {\n /** The citation picking passages now, and the document it picks in; null when none is. */\n active: { documentId: string; key: string | null } | null\n /** Passages to light (a fact's cited passages while its sources are open). */\n highlighted: readonly string[]\n /** Passages added to the citation. */\n pick: (passages: PickedPassage[]) => void\n /** Passages taken off it. */\n unpick: (chunkIds: string[]) => void\n}\n\nconst NO_SUPPORT: DocumentViewerSupport = {}\n\nexport function useDocumentViewerSupport(): DocumentViewerSupport {\n return useHost().viewer ?? NO_SUPPORT\n}\n\nconst NONE = () => undefined\nconst ATTACHED = () => false\n\n/** The artifact a chat is streaming in as this document (the chat engine's `useChatArtifact`). */\nexport function useViewerStreamingDocument(\n documentId: string\n): ViewerStreamingDocument | undefined {\n return useChatArtifact(documentId)\n}\n\n/** The citation picking passages (none without the host's). */\nexport function useViewerPassageCitation(): PassageCitation | undefined {\n const useCitation = useDocumentViewerSupport().usePassageCitation ?? NONE\n return useCitation()\n}\n\n/** Whether the viewer is in another window (never without the host's). */\nexport function useViewerIsDetached(): boolean {\n const useDetached = useDocumentViewerSupport().useIsDetached ?? ATTACHED\n return useDetached()\n}\n"]}