@arbidocs/blocks 0.5.104 → 0.5.105

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 (210) hide show
  1. package/dist/{ConnectedCallDock-P7LK2HYF.cjs → ConnectedCallDock-63F733HH.cjs} +20 -20
  2. package/dist/{ConnectedCallDock-P7LK2HYF.cjs.map → ConnectedCallDock-63F733HH.cjs.map} +1 -1
  3. package/dist/{ConnectedCallDock-NEZJNTKH.js → ConnectedCallDock-VJGARAFW.js} +12 -12
  4. package/dist/{ConnectedCallDock-NEZJNTKH.js.map → ConnectedCallDock-VJGARAFW.js.map} +1 -1
  5. package/dist/{ConnectedCallRoom-K3X6ICCG.js → ConnectedCallRoom-JEHW4VML.js} +12 -12
  6. package/dist/{ConnectedCallRoom-K3X6ICCG.js.map → ConnectedCallRoom-JEHW4VML.js.map} +1 -1
  7. package/dist/{ConnectedCallRoom-FXTR4YFI.cjs → ConnectedCallRoom-RYPXT4T5.cjs} +13 -13
  8. package/dist/{ConnectedCallRoom-FXTR4YFI.cjs.map → ConnectedCallRoom-RYPXT4T5.cjs.map} +1 -1
  9. package/dist/{ConnectedNativeDocxComparison-FENZYWDH.js → ConnectedNativeDocxComparison-3EASEGA7.js} +15 -15
  10. package/dist/{ConnectedNativeDocxComparison-FENZYWDH.js.map → ConnectedNativeDocxComparison-3EASEGA7.js.map} +1 -1
  11. package/dist/{ConnectedNativeDocxComparison-7VJKOKYU.cjs → ConnectedNativeDocxComparison-JZ6E75CT.cjs} +16 -16
  12. package/dist/{ConnectedNativeDocxComparison-7VJKOKYU.cjs.map → ConnectedNativeDocxComparison-JZ6E75CT.cjs.map} +1 -1
  13. package/dist/{ConnectedNativeDocxEditor-HB5BHGZ2.cjs → ConnectedNativeDocxEditor-QJET2DM7.cjs} +16 -16
  14. package/dist/{ConnectedNativeDocxEditor-HB5BHGZ2.cjs.map → ConnectedNativeDocxEditor-QJET2DM7.cjs.map} +1 -1
  15. package/dist/{ConnectedNativeDocxEditor-CNQAMO2N.js → ConnectedNativeDocxEditor-X5R5WDIV.js} +14 -14
  16. package/dist/{ConnectedNativeDocxEditor-CNQAMO2N.js.map → ConnectedNativeDocxEditor-X5R5WDIV.js.map} +1 -1
  17. package/dist/{ConnectedProductionSetDialog-ENAIZWPK.cjs → ConnectedProductionSetDialog-CNF6RZCU.cjs} +3 -3
  18. package/dist/{ConnectedProductionSetDialog-ENAIZWPK.cjs.map → ConnectedProductionSetDialog-CNF6RZCU.cjs.map} +1 -1
  19. package/dist/{ConnectedProductionSetDialog-O4FWTZNF.js → ConnectedProductionSetDialog-MVSRWQAH.js} +3 -3
  20. package/dist/{ConnectedProductionSetDialog-O4FWTZNF.js.map → ConnectedProductionSetDialog-MVSRWQAH.js.map} +1 -1
  21. package/dist/{ConnectedStreamedWordArtifact-BF6JET2D.cjs → ConnectedStreamedWordArtifact-G4NO45TW.cjs} +16 -16
  22. package/dist/ConnectedStreamedWordArtifact-G4NO45TW.cjs.map +1 -0
  23. package/dist/{ConnectedStreamedWordArtifact-ILMKFCDC.js → ConnectedStreamedWordArtifact-WY34LSU2.js} +15 -15
  24. package/dist/ConnectedStreamedWordArtifact-WY34LSU2.js.map +1 -0
  25. package/dist/{DocumentReviewCard-WZNBPG72.js → DocumentReviewCard-DBRWDHRF.js} +11 -11
  26. package/dist/{DocumentReviewCard-WZNBPG72.js.map → DocumentReviewCard-DBRWDHRF.js.map} +1 -1
  27. package/dist/{DocumentReviewCard-MSHD73S3.cjs → DocumentReviewCard-O2CPX6PY.cjs} +16 -16
  28. package/dist/{DocumentReviewCard-MSHD73S3.cjs.map → DocumentReviewCard-O2CPX6PY.cjs.map} +1 -1
  29. package/dist/{FilesViewerDialog-DV2U4USR.cjs → FilesViewerDialog-3JCXOSI5.cjs} +39 -39
  30. package/dist/{FilesViewerDialog-DV2U4USR.cjs.map → FilesViewerDialog-3JCXOSI5.cjs.map} +1 -1
  31. package/dist/{FilesViewerDialog-XETOHORQ.js → FilesViewerDialog-7AHLHVDB.js} +33 -33
  32. package/dist/{FilesViewerDialog-XETOHORQ.js.map → FilesViewerDialog-7AHLHVDB.js.map} +1 -1
  33. package/dist/{WorkspaceTableView-WD754UBK.js → WorkspaceTableView-4VRDGFGG.js} +7 -7
  34. package/dist/{WorkspaceTableView-WD754UBK.js.map → WorkspaceTableView-4VRDGFGG.js.map} +1 -1
  35. package/dist/{WorkspaceTableView-3D6SYOWT.cjs → WorkspaceTableView-T2SIYAEM.cjs} +9 -9
  36. package/dist/{WorkspaceTableView-3D6SYOWT.cjs.map → WorkspaceTableView-T2SIYAEM.cjs.map} +1 -1
  37. package/dist/agents/index.cjs +296 -296
  38. package/dist/agents/index.js +13 -13
  39. package/dist/{ai-WASSGEMI.js → ai-KXDTYRZC.js} +16 -16
  40. package/dist/ai-KXDTYRZC.js.map +1 -0
  41. package/dist/{ai-E6FA4Y4J.cjs → ai-QXZ4PB2M.cjs} +24 -24
  42. package/dist/ai-QXZ4PB2M.cjs.map +1 -0
  43. package/dist/calls/index.cjs +121 -121
  44. package/dist/calls/index.js +8 -8
  45. package/dist/chat/index.cjs +1 -1
  46. package/dist/chat/index.js +1 -1
  47. package/dist/{chunk-RBI7WVEP.cjs → chunk-2NAAK4NF.cjs} +4 -4
  48. package/dist/{chunk-RBI7WVEP.cjs.map → chunk-2NAAK4NF.cjs.map} +1 -1
  49. package/dist/{chunk-PIWT2GCY.cjs → chunk-2THO5FO3.cjs} +20 -20
  50. package/dist/{chunk-PIWT2GCY.cjs.map → chunk-2THO5FO3.cjs.map} +1 -1
  51. package/dist/{chunk-4UOXUWX3.js → chunk-35M3UPTC.js} +71 -20
  52. package/dist/chunk-35M3UPTC.js.map +1 -0
  53. package/dist/{chunk-TQFDPCWU.js → chunk-3726GQUW.js} +17 -17
  54. package/dist/{chunk-TQFDPCWU.js.map → chunk-3726GQUW.js.map} +1 -1
  55. package/dist/{chunk-N77UYRV7.js → chunk-3BSFHBHY.js} +4 -4
  56. package/dist/{chunk-N77UYRV7.js.map → chunk-3BSFHBHY.js.map} +1 -1
  57. package/dist/{chunk-VULH3XAJ.cjs → chunk-3V7IZLHM.cjs} +28 -28
  58. package/dist/{chunk-VULH3XAJ.cjs.map → chunk-3V7IZLHM.cjs.map} +1 -1
  59. package/dist/{chunk-TP5PGWIO.cjs → chunk-4IOYQLKG.cjs} +3 -3
  60. package/dist/{chunk-TP5PGWIO.cjs.map → chunk-4IOYQLKG.cjs.map} +1 -1
  61. package/dist/{chunk-KGUBKE3V.cjs → chunk-4WJTJ2CM.cjs} +12 -12
  62. package/dist/{chunk-KGUBKE3V.cjs.map → chunk-4WJTJ2CM.cjs.map} +1 -1
  63. package/dist/{chunk-E26MNOLG.js → chunk-534Q6CX4.js} +3 -3
  64. package/dist/{chunk-E26MNOLG.js.map → chunk-534Q6CX4.js.map} +1 -1
  65. package/dist/{chunk-DBHBJIF4.js → chunk-55UIEU7L.js} +3 -3
  66. package/dist/{chunk-DBHBJIF4.js.map → chunk-55UIEU7L.js.map} +1 -1
  67. package/dist/{chunk-N52PBUAP.cjs → chunk-5VZVB63L.cjs} +6 -6
  68. package/dist/{chunk-N52PBUAP.cjs.map → chunk-5VZVB63L.cjs.map} +1 -1
  69. package/dist/{chunk-Y2FPWPDB.js → chunk-5XB3H2TJ.js} +3 -3
  70. package/dist/{chunk-Y2FPWPDB.js.map → chunk-5XB3H2TJ.js.map} +1 -1
  71. package/dist/{chunk-CEVVGJQX.js → chunk-62J727CD.js} +3 -3
  72. package/dist/{chunk-CEVVGJQX.js.map → chunk-62J727CD.js.map} +1 -1
  73. package/dist/{chunk-3PV25ICC.js → chunk-6KKVJ2V6.js} +3 -3
  74. package/dist/{chunk-3PV25ICC.js.map → chunk-6KKVJ2V6.js.map} +1 -1
  75. package/dist/{chunk-ET3W24JV.js → chunk-6PM2ZUUL.js} +14 -14
  76. package/dist/{chunk-ET3W24JV.js.map → chunk-6PM2ZUUL.js.map} +1 -1
  77. package/dist/{chunk-JWUCDK2F.js → chunk-6Q3SYCSX.js} +4 -4
  78. package/dist/{chunk-JWUCDK2F.js.map → chunk-6Q3SYCSX.js.map} +1 -1
  79. package/dist/{chunk-5UMZXDGL.cjs → chunk-7HGIC644.cjs} +5 -5
  80. package/dist/{chunk-5UMZXDGL.cjs.map → chunk-7HGIC644.cjs.map} +1 -1
  81. package/dist/{chunk-6NSKIS35.cjs → chunk-7MGK4ROW.cjs} +4 -4
  82. package/dist/{chunk-6NSKIS35.cjs.map → chunk-7MGK4ROW.cjs.map} +1 -1
  83. package/dist/{chunk-KUI2IC7W.js → chunk-7OUI4S7X.js} +3 -3
  84. package/dist/{chunk-KUI2IC7W.js.map → chunk-7OUI4S7X.js.map} +1 -1
  85. package/dist/{chunk-QN5GTCPB.cjs → chunk-BM2B6RWH.cjs} +6 -6
  86. package/dist/{chunk-QN5GTCPB.cjs.map → chunk-BM2B6RWH.cjs.map} +1 -1
  87. package/dist/{chunk-HTGEAQOA.js → chunk-C66RM2KW.js} +11 -11
  88. package/dist/{chunk-HTGEAQOA.js.map → chunk-C66RM2KW.js.map} +1 -1
  89. package/dist/{chunk-5OUOPKGE.cjs → chunk-C67B5OL7.cjs} +10 -10
  90. package/dist/{chunk-5OUOPKGE.cjs.map → chunk-C67B5OL7.cjs.map} +1 -1
  91. package/dist/{chunk-OG3TI5GX.js → chunk-CARVLLKR.js} +5 -5
  92. package/dist/{chunk-OG3TI5GX.js.map → chunk-CARVLLKR.js.map} +1 -1
  93. package/dist/{chunk-OKUXM2N4.cjs → chunk-CJOYEXEI.cjs} +4 -4
  94. package/dist/{chunk-OKUXM2N4.cjs.map → chunk-CJOYEXEI.cjs.map} +1 -1
  95. package/dist/{chunk-HKGO2GUG.cjs → chunk-CQ4M5S7Q.cjs} +3 -3
  96. package/dist/{chunk-HKGO2GUG.cjs.map → chunk-CQ4M5S7Q.cjs.map} +1 -1
  97. package/dist/{chunk-PGCKTXYH.js → chunk-E23QC3K5.js} +3 -3
  98. package/dist/{chunk-PGCKTXYH.js.map → chunk-E23QC3K5.js.map} +1 -1
  99. package/dist/{chunk-RAYNCZ7O.js → chunk-EAHJ2JSM.js} +4 -4
  100. package/dist/{chunk-RAYNCZ7O.js.map → chunk-EAHJ2JSM.js.map} +1 -1
  101. package/dist/{chunk-J3E5CSSC.js → chunk-ETUFJZKO.js} +4 -4
  102. package/dist/{chunk-J3E5CSSC.js.map → chunk-ETUFJZKO.js.map} +1 -1
  103. package/dist/{chunk-S7NJVJJX.cjs → chunk-FA5EFIHM.cjs} +55 -55
  104. package/dist/{chunk-S7NJVJJX.cjs.map → chunk-FA5EFIHM.cjs.map} +1 -1
  105. package/dist/{chunk-FDNIK5YS.cjs → chunk-GAJ5HESV.cjs} +4 -4
  106. package/dist/{chunk-FDNIK5YS.cjs.map → chunk-GAJ5HESV.cjs.map} +1 -1
  107. package/dist/{chunk-FNGFSHVE.js → chunk-H57PBOFE.js} +3 -3
  108. package/dist/{chunk-FNGFSHVE.js.map → chunk-H57PBOFE.js.map} +1 -1
  109. package/dist/{chunk-7OPOPYV6.cjs → chunk-H5OLHP2U.cjs} +3 -3
  110. package/dist/{chunk-7OPOPYV6.cjs.map → chunk-H5OLHP2U.cjs.map} +1 -1
  111. package/dist/{chunk-Y5P5ZMHQ.js → chunk-HFPKMVHR.js} +4 -4
  112. package/dist/{chunk-Y5P5ZMHQ.js.map → chunk-HFPKMVHR.js.map} +1 -1
  113. package/dist/{chunk-VJAMDAR6.cjs → chunk-I727LFZM.cjs} +4 -4
  114. package/dist/{chunk-VJAMDAR6.cjs.map → chunk-I727LFZM.cjs.map} +1 -1
  115. package/dist/{chunk-3RUQHIDC.js → chunk-IUOTGOXM.js} +3 -3
  116. package/dist/{chunk-3RUQHIDC.js.map → chunk-IUOTGOXM.js.map} +1 -1
  117. package/dist/{chunk-BSPPKX6X.cjs → chunk-IUTJW6FB.cjs} +50 -50
  118. package/dist/{chunk-BSPPKX6X.cjs.map → chunk-IUTJW6FB.cjs.map} +1 -1
  119. package/dist/{chunk-HTIEJVPI.js → chunk-JKAVXGHL.js} +5 -5
  120. package/dist/{chunk-HTIEJVPI.js.map → chunk-JKAVXGHL.js.map} +1 -1
  121. package/dist/{chunk-DDIV3MYQ.cjs → chunk-K3C4WECV.cjs} +5 -5
  122. package/dist/{chunk-DDIV3MYQ.cjs.map → chunk-K3C4WECV.cjs.map} +1 -1
  123. package/dist/{chunk-IWLNDDPN.cjs → chunk-KYTOLFAU.cjs} +35 -35
  124. package/dist/{chunk-IWLNDDPN.cjs.map → chunk-KYTOLFAU.cjs.map} +1 -1
  125. package/dist/{chunk-FMRTLPC7.cjs → chunk-LKK4PVOM.cjs} +6 -6
  126. package/dist/{chunk-FMRTLPC7.cjs.map → chunk-LKK4PVOM.cjs.map} +1 -1
  127. package/dist/{chunk-BMHW7WTF.js → chunk-LPHUB6EC.js} +3 -3
  128. package/dist/{chunk-BMHW7WTF.js.map → chunk-LPHUB6EC.js.map} +1 -1
  129. package/dist/{chunk-IIUEDF3F.js → chunk-LZAID6RY.js} +7 -7
  130. package/dist/{chunk-IIUEDF3F.js.map → chunk-LZAID6RY.js.map} +1 -1
  131. package/dist/{chunk-OFF2PR4W.js → chunk-NAAOKIR5.js} +3 -3
  132. package/dist/{chunk-OFF2PR4W.js.map → chunk-NAAOKIR5.js.map} +1 -1
  133. package/dist/{chunk-7LIPW6ZK.cjs → chunk-NNJQTH6R.cjs} +3 -3
  134. package/dist/{chunk-7LIPW6ZK.cjs.map → chunk-NNJQTH6R.cjs.map} +1 -1
  135. package/dist/{chunk-2VHZUSFW.js → chunk-OUORCDQD.js} +3 -3
  136. package/dist/{chunk-2VHZUSFW.js.map → chunk-OUORCDQD.js.map} +1 -1
  137. package/dist/{chunk-V2CKYM4B.cjs → chunk-OVKVMKTI.cjs} +15 -15
  138. package/dist/{chunk-V2CKYM4B.cjs.map → chunk-OVKVMKTI.cjs.map} +1 -1
  139. package/dist/{chunk-KCP42W67.cjs → chunk-P5D5GKVH.cjs} +3 -3
  140. package/dist/{chunk-KCP42W67.cjs.map → chunk-P5D5GKVH.cjs.map} +1 -1
  141. package/dist/{chunk-JS66ZT33.js → chunk-PVNULRFR.js} +3 -3
  142. package/dist/{chunk-JS66ZT33.js.map → chunk-PVNULRFR.js.map} +1 -1
  143. package/dist/{chunk-4WMGFGYP.cjs → chunk-QZGXZRWU.cjs} +4 -4
  144. package/dist/{chunk-4WMGFGYP.cjs.map → chunk-QZGXZRWU.cjs.map} +1 -1
  145. package/dist/{chunk-MMSHLHTA.cjs → chunk-RB6MAAS7.cjs} +4 -4
  146. package/dist/{chunk-MMSHLHTA.cjs.map → chunk-RB6MAAS7.cjs.map} +1 -1
  147. package/dist/{chunk-7ONU7EWY.js → chunk-RMQZHYBO.js} +6 -6
  148. package/dist/{chunk-7ONU7EWY.js.map → chunk-RMQZHYBO.js.map} +1 -1
  149. package/dist/{chunk-GOJ5GHFS.js → chunk-S5AFXSIQ.js} +3 -3
  150. package/dist/{chunk-GOJ5GHFS.js.map → chunk-S5AFXSIQ.js.map} +1 -1
  151. package/dist/{chunk-SY2WD6VA.cjs → chunk-SBTIITBJ.cjs} +6 -6
  152. package/dist/{chunk-SY2WD6VA.cjs.map → chunk-SBTIITBJ.cjs.map} +1 -1
  153. package/dist/{chunk-6A4GNM4T.cjs → chunk-TBYFNJRJ.cjs} +26 -26
  154. package/dist/{chunk-6A4GNM4T.cjs.map → chunk-TBYFNJRJ.cjs.map} +1 -1
  155. package/dist/{chunk-5R67KX2O.cjs → chunk-TSIMQOJR.cjs} +126 -75
  156. package/dist/chunk-TSIMQOJR.cjs.map +1 -0
  157. package/dist/{chunk-GARDQALH.js → chunk-TSLXIDUF.js} +7 -7
  158. package/dist/{chunk-GARDQALH.js.map → chunk-TSLXIDUF.js.map} +1 -1
  159. package/dist/{chunk-6KQVTMRL.cjs → chunk-UOGXKHTJ.cjs} +3 -3
  160. package/dist/{chunk-6KQVTMRL.cjs.map → chunk-UOGXKHTJ.cjs.map} +1 -1
  161. package/dist/{chunk-E6ISR55S.js → chunk-UTUXEZBC.js} +3 -3
  162. package/dist/{chunk-E6ISR55S.js.map → chunk-UTUXEZBC.js.map} +1 -1
  163. package/dist/{chunk-2UP73FZT.js → chunk-VNFNIHHJ.js} +3 -3
  164. package/dist/{chunk-2UP73FZT.js.map → chunk-VNFNIHHJ.js.map} +1 -1
  165. package/dist/{chunk-M4TM3K52.cjs → chunk-XCTQ6MLJ.cjs} +47 -47
  166. package/dist/{chunk-M4TM3K52.cjs.map → chunk-XCTQ6MLJ.cjs.map} +1 -1
  167. package/dist/{chunk-62OMGQHS.js → chunk-Y3NQBB43.js} +3 -3
  168. package/dist/{chunk-62OMGQHS.js.map → chunk-Y3NQBB43.js.map} +1 -1
  169. package/dist/{chunk-LWCLAAEX.js → chunk-YG77JLOX.js} +4 -4
  170. package/dist/{chunk-LWCLAAEX.js.map → chunk-YG77JLOX.js.map} +1 -1
  171. package/dist/{chunk-35BADIIF.cjs → chunk-YGOMTIBA.cjs} +3 -3
  172. package/dist/{chunk-35BADIIF.cjs.map → chunk-YGOMTIBA.cjs.map} +1 -1
  173. package/dist/{chunk-4FV5DO3V.js → chunk-YK4U6EV5.js} +3 -3
  174. package/dist/{chunk-4FV5DO3V.js.map → chunk-YK4U6EV5.js.map} +1 -1
  175. package/dist/{chunk-YPTZNQPJ.cjs → chunk-YP4FDWK3.cjs} +4 -4
  176. package/dist/{chunk-YPTZNQPJ.cjs.map → chunk-YP4FDWK3.cjs.map} +1 -1
  177. package/dist/{chunk-JNVJQCGF.cjs → chunk-YXYHYS5S.cjs} +3 -3
  178. package/dist/{chunk-JNVJQCGF.cjs.map → chunk-YXYHYS5S.cjs.map} +1 -1
  179. package/dist/collaboration/index.cjs +1 -1
  180. package/dist/collaboration/index.js +1 -1
  181. package/dist/connect/docx.cjs +19 -19
  182. package/dist/connect/docx.js +15 -15
  183. package/dist/connect/index.cjs +1019 -1019
  184. package/dist/connect/index.js +73 -73
  185. package/dist/connect/viewer.cjs +25 -25
  186. package/dist/connect/viewer.js +24 -24
  187. package/dist/dashboards/index.cjs +1 -1
  188. package/dist/dashboards/index.js +1 -1
  189. package/dist/embed/index.cjs +38 -38
  190. package/dist/embed/index.js +32 -32
  191. package/dist/files/index.cjs +224 -224
  192. package/dist/files/index.js +3 -3
  193. package/dist/index.cjs +1575 -1575
  194. package/dist/index.js +40 -40
  195. package/dist/settings/index.cjs +152 -152
  196. package/dist/settings/index.js +3 -3
  197. package/dist/shell/index.cjs +88 -88
  198. package/dist/shell/index.js +9 -9
  199. package/dist/studio/index.cjs +26 -26
  200. package/dist/studio/index.js +23 -23
  201. package/dist/workflow-canvas/index.cjs +51 -51
  202. package/dist/workflow-canvas/index.js +31 -31
  203. package/node_modules/@arbidocs/coedit/package.json +1 -1
  204. package/package.json +5 -5
  205. package/dist/ConnectedStreamedWordArtifact-BF6JET2D.cjs.map +0 -1
  206. package/dist/ConnectedStreamedWordArtifact-ILMKFCDC.js.map +0 -1
  207. package/dist/ai-E6FA4Y4J.cjs.map +0 -1
  208. package/dist/ai-WASSGEMI.js.map +0 -1
  209. package/dist/chunk-4UOXUWX3.js.map +0 -1
  210. package/dist/chunk-5R67KX2O.cjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkTTPJ2G3G_cjs = require('./chunk-TTPJ2G3G.cjs');
5
4
  var chunkYZSQ7F5K_cjs = require('./chunk-YZSQ7F5K.cjs');
5
+ var chunkTTPJ2G3G_cjs = require('./chunk-TTPJ2G3G.cjs');
6
6
  var chunkPLIF5CUV_cjs = require('./chunk-PLIF5CUV.cjs');
7
7
  var react = require('react');
8
8
  var ui = require('@arbidocs/react/ui');
@@ -621,5 +621,5 @@ exports.SidebarBadgeRow = SidebarBadgeRow;
621
621
  exports.SidebarRowHoverContext = SidebarRowHoverContext;
622
622
  exports.useShellStartInset = useShellStartInset;
623
623
  exports.useSidebarContext = useSidebarContext;
624
- //# sourceMappingURL=chunk-7LIPW6ZK.cjs.map
625
- //# sourceMappingURL=chunk-7LIPW6ZK.cjs.map
624
+ //# sourceMappingURL=chunk-NNJQTH6R.cjs.map
625
+ //# sourceMappingURL=chunk-NNJQTH6R.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/shell/sidebar-context.ts","../src/shell/SidebarBadgeRow.tsx","../src/lib/start-inset.ts","../src/shell/Sidebar.tsx"],"names":["createContext","useContext","forwardRef","SidebarBadgeRow","jsxs","cn","jsx","Tooltip","TooltipTrigger","TooltipContent","useEffect","useMemo","useRef","useDrawerBehavior","testIdOr","Fragment","BlocksTooltipProvider","useState","ActionLink","PanelLeftClose","PanelLeftOpen","X"],"mappings":"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","file":"chunk-7LIPW6ZK.cjs","sourcesContent":["import { createContext, useContext } from 'react'\n\n/** Fixed strings of the sidebar family. Set once on `Sidebar.Root`; parts read them from context. */\nexport interface SidebarLabels {\n /** The sidebar's accessible name (the Root `aria-label` prop wins). */\n mainNavigation: string\n hideSidebar: string\n showSidebar: string\n /** The drawer's close button (the `closeLabel` prop wins). */\n closeNavigationMenu: string\n}\n\nexport const DEFAULT_SIDEBAR_LABELS: SidebarLabels = {\n mainNavigation: 'Main navigation',\n hideSidebar: 'Hide sidebar',\n showSidebar: 'Show sidebar',\n closeNavigationMenu: 'Close navigation menu',\n}\n\nexport interface SidebarContextValue {\n /** Labels are visible (full width), as opposed to the icon-only rail. */\n expanded: boolean\n labels: SidebarLabels\n}\nexport const SidebarContext = createContext<SidebarContextValue>({\n expanded: true,\n labels: DEFAULT_SIDEBAR_LABELS,\n})\nexport const useSidebarContext = (): SidebarContextValue => useContext(SidebarContext)\n\n/** True while the surrounding row is hovered/focused; trailing controls may brighten on it. */\nexport const SidebarRowHoverContext = createContext(false)\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react'\nimport { cn, Tooltip, TooltipContent, TooltipTrigger } from '@arbidocs/react/ui'\nimport { useSidebarContext } from './sidebar-context'\n\nexport interface SidebarBadgeRowProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'children'\n> {\n /** Glyph (20px). */\n icon: ReactNode\n /** Visible label of the expanded row; the tooltip of the icon-only rail. */\n label: string\n /** Unread/pending number. Hidden at 0 or `undefined`; values above 9 read \"9+\". */\n count?: number\n /**\n * Accessible name including the count, for example \"Notifications, 2 unread\". Defaults to\n * `label` plus the count.\n */\n ariaLabel?: string\n /**\n * `row`: a labelled row styled like the module rows, badge at the right. `icon`: icon-only with\n * the badge on the corner. Default follows the sidebar (`row` expanded, `icon` on the rail).\n */\n variant?: 'row' | 'icon'\n /** Test id of the count badge. */\n badgeTestId?: string\n}\n\n/**\n * A sidebar row that carries a badge and may open something (a panel, a popover): the\n * notifications and contacts rows above the account bar. A real button that forwards its ref and\n * rest props, so it can be a popover trigger (`<DropdownMenuTrigger asChild>`). The badge is\n * visible in both the expanded row and the icon-only rail, and the accessible name carries the\n * count in both.\n */\nexport const SidebarBadgeRow = forwardRef<HTMLButtonElement, SidebarBadgeRowProps>(\n function SidebarBadgeRow(\n { icon, label, count, ariaLabel, variant, badgeTestId, className, type = 'button', ...rest },\n ref\n ) {\n const { expanded } = useSidebarContext()\n const resolved = variant ?? (expanded ? 'row' : 'icon')\n const hasCount = count !== undefined && count > 0\n const badgeText = hasCount ? (count > 9 ? '9+' : String(count)) : null\n const name = ariaLabel ?? (hasCount ? `${label}, ${count}` : label)\n\n if (resolved === 'row') {\n return (\n <button\n ref={ref}\n type={type}\n aria-label={name}\n data-slot=\"sidebar-badge-row\"\n data-variant=\"row\"\n className={cn(\n 'group flex h-9 w-full cursor-pointer items-center rounded-md px-3 text-left text-sm font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:h-11',\n className\n )}\n {...rest}\n >\n <span className=\"flex size-5 flex-shrink-0 items-center justify-center\" aria-hidden>\n {icon}\n </span>\n <span className=\"ml-3 min-w-0 truncate\" aria-hidden>\n {label}\n </span>\n {badgeText && (\n <span\n aria-hidden\n data-testid={badgeTestId}\n className=\"ml-auto inline-flex min-w-5 flex-shrink-0 items-center justify-center rounded-full bg-primary px-1.5 text-xs font-semibold leading-5 tabular-nums text-primary-foreground\"\n >\n {badgeText}\n </span>\n )}\n </button>\n )\n }\n\n const iconButton = (\n <button\n ref={ref}\n type={type}\n aria-label={name}\n data-slot=\"sidebar-badge-row\"\n data-variant=\"icon\"\n title={variant === 'icon' ? label : undefined}\n className={cn(\n 'relative m-0 flex h-9 w-12 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:h-11',\n className\n )}\n {...rest}\n >\n <span className=\"flex size-5 items-center justify-center\" aria-hidden>\n {icon}\n </span>\n {badgeText && (\n <span\n aria-hidden\n data-testid={badgeTestId}\n className=\"absolute right-1 top-0.5 flex min-w-4 items-center justify-center rounded-full bg-primary px-1 text-xs font-semibold leading-4 tabular-nums text-primary-foreground\"\n >\n {badgeText}\n </span>\n )}\n </button>\n )\n // A standalone icon button (the page header) keeps its native title; the rail uses a tooltip.\n if (variant === 'icon') return iconButton\n return (\n <Tooltip delayDuration={50}>\n <TooltipTrigger asChild>{iconButton}</TooltipTrigger>\n <TooltipContent side=\"right\" sideOffset={8}>\n {label}\n </TooltipContent>\n </Tooltip>\n )\n }\n)\n","import { useEffect } from 'react'\n\n/**\n * The CSS custom property that carries how much of the screen's start (left) edge a docked sidebar\n * takes, set on `<html>`. A floating element pinned to the start corner (the install prompt)\n * positions itself `calc(var(--shell-start-inset, 0px) + 0.75rem)` so it never covers the\n * sidebar's footer (the account menu).\n */\nexport const SHELL_START_INSET_VAR = '--shell-start-inset'\n\nconst widths = new Map<symbol, number>()\n\nfunction apply(): void {\n if (typeof document === 'undefined') return\n const inset = Math.max(0, ...widths.values())\n const style = document.documentElement.style\n if (inset > 0) style.setProperty(SHELL_START_INSET_VAR, `${inset}px`)\n else style.removeProperty(SHELL_START_INSET_VAR)\n}\n\n/**\n * Report a sidebar docked at the start edge, `width` px wide (0 while it is collapsed or is an\n * overlay drawer), to {@link SHELL_START_INSET_VAR}. `Sidebar.Root` calls it; call it from your\n * own docked side panel.\n */\nexport function useShellStartInset(width: number): void {\n useEffect(() => {\n const key = Symbol('shell-start-inset')\n widths.set(key, width)\n apply()\n return () => {\n widths.delete(key)\n apply()\n }\n }, [width])\n}\n","import {\n Fragment,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n type PointerEventHandler,\n} from 'react'\nimport { PanelLeftClose, PanelLeftOpen, X } from 'lucide-react'\nimport { cn, Tooltip, TooltipContent, TooltipTrigger } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\nimport {\n DEFAULT_SIDEBAR_LABELS,\n SidebarContext,\n SidebarRowHoverContext,\n useSidebarContext,\n type SidebarLabels,\n} from './sidebar-context'\nimport { SidebarBadgeRow } from './SidebarBadgeRow'\nimport { ActionLink } from '../components/ActionLink'\nimport { BlocksTooltipProvider } from '../provider/TooltipScope'\nimport { useDrawerBehavior } from '../lib/use-drawer'\nimport { useShellStartInset } from '../lib/start-inset'\nimport type { SidebarMode } from '../lib/sidebar-mode'\nimport type { NavItem, NavItemIndicator, NavSection } from './types'\n\n/**\n * Sidebar: the one tinted column that carries the app frame. Compound parts:\n * Sidebar.Root positioning shell for the four modes (drawer / collapsed / pinned / rail)\n * Sidebar.Header top block (switcher, ask field, pin toggle)\n * Sidebar.Nav the rows: pass `items` (NavItem[]) or compose Sidebar.NavItem children\n * Sidebar.Group a labelled run of rows (heading when expanded, divider on the rail)\n * Sidebar.Footer pinned to the bottom (offline pill, tips card, action cluster)\n * Sidebar.PinToggle / Sidebar.DrawerHeader the header's two stock controls\n *\n * Presentational and controlled: the app resolves `mode`/`expanded` (see `resolveSidebarLayout`\n * and `useSidebarSettle`) and owns where hover/pin/drawer state lives.\n */\n\nconst noop = () => {}\n\nconst COLLAPSED_PX = 64\nconst EXPANDED_PX = 256\nconst COLLAPSED_WIDTH = `${COLLAPSED_PX}px`\nconst EXPANDED_WIDTH = `${EXPANDED_PX}px`\n\nexport interface SidebarRootProps {\n /** Constrain the drawer to an embedded frame. The app keeps the viewport default. */\n contained?: boolean\n mode: SidebarMode\n /** Labels visible. Provided to every part through context. */\n expanded: boolean\n /** `rail` mode: floats open to full width. */\n isHovering?: boolean\n onBackdropClick?: () => void\n /** `rail` mode on touch: the floated-open rail dims the content behind it; tapping it closes. */\n hasRailBackdrop?: boolean\n onMouseEnter?: () => void\n onMouseLeave?: () => void\n onPointerEnter?: PointerEventHandler<HTMLElement>\n onPointerLeave?: PointerEventHandler<HTMLElement>\n children: ReactNode\n className?: string\n 'aria-label'?: string\n labels?: Partial<SidebarLabels>\n /** Root id (default `sidebar`). */\n 'data-testid'?: string\n /** Drawer backdrop id (default `sidebar-backdrop`). */\n backdropTestId?: string\n}\n\nfunction SidebarRoot({\n mode,\n contained = false,\n expanded,\n isHovering = false,\n onBackdropClick,\n hasRailBackdrop = false,\n onMouseEnter,\n onMouseLeave,\n onPointerEnter,\n onPointerLeave,\n children,\n className,\n 'aria-label': ariaLabelProp,\n labels,\n 'data-testid': testId,\n backdropTestId,\n}: SidebarRootProps) {\n const mergedLabels = useMemo(() => ({ ...DEFAULT_SIDEBAR_LABELS, ...labels }), [labels])\n // The drawer is a modal: scroll lock, Escape, focus trap and focus return to the opener.\n const drawerRef = useRef<HTMLDivElement>(null)\n const isDrawer = mode === 'drawer'\n useDrawerBehavior(isDrawer, onBackdropClick ?? noop, drawerRef)\n // Floating start-corner elements (the install prompt) sit clear of the docked sidebar; a rail\n // expanding on hover floats over the page, so only its collapsed width counts.\n useShellStartInset(mode === 'pinned' ? EXPANDED_PX : mode === 'rail' ? COLLAPSED_PX : 0)\n const ariaLabel = ariaLabelProp ?? mergedLabels.mainNavigation\n const contextValue = useMemo(() => ({ expanded, labels: mergedLabels }), [expanded, mergedLabels])\n // `navBase` omits horizontal padding so each mode owns its own: the collapsed state must\n // reach a true 0 width, which an `!important` px would block.\n const navBase =\n 'group/sidebar bg-sidebar border-r border-border text-foreground scrollbar-themed flex flex-col h-full overflow-y-auto overflow-x-hidden pb-safe pt-3 transition-all duration-300 ease-in-out'\n const common = {\n 'aria-label': ariaLabel,\n 'data-testid': testIdOr(testId, { testId: 'sidebar' }),\n 'data-slot': 'sidebar',\n 'data-mode': mode,\n } as const\n const fixedWidth: CSSProperties = { width: EXPANDED_WIDTH, minWidth: EXPANDED_WIDTH }\n\n let body: ReactNode\n if (mode === 'drawer') {\n // Small-screen off-canvas panel + dismiss backdrop; bypasses the hover/collapse model. The\n // wrapper is the modal dialog; the nav landmark sits inside it.\n body = (\n <div\n ref={drawerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n data-slot=\"sidebar-drawer\"\n className={cn(contained ? 'absolute' : 'fixed', 'inset-0 z-50')}\n >\n <div\n className=\"absolute inset-0 bg-black/50\"\n onClick={onBackdropClick}\n aria-hidden=\"true\"\n data-testid={testIdOr(backdropTestId, { testId: 'sidebar-backdrop' })}\n />\n <nav\n {...common}\n className={cn(navBase, '!px-3 absolute left-0 top-0 pt-safe shadow-xl', className)}\n style={fixedWidth}\n >\n {children}\n </nav>\n </div>\n )\n } else if (mode === 'collapsed') {\n // Stays mounted at width 0 so the transition runs on both enter and leave. Horizontal padding\n // is dropped or overflow-hidden would reveal a clipped sliver of the icons.\n body = (\n <nav\n {...common}\n className={cn(navBase, 'absolute left-0 top-0 z-[45]', className)}\n style={{\n width: '0px',\n minWidth: 0,\n paddingLeft: 0,\n paddingRight: 0,\n borderRightWidth: 0,\n pointerEvents: 'none',\n }}\n // Width 0 hides the links visually; inert also takes them out of the tab order and the\n // accessibility tree.\n inert\n >\n {children}\n </nav>\n )\n } else if (mode === 'pinned') {\n body = (\n <nav\n {...common}\n className={cn(navBase, '!px-3 relative flex-shrink-0', className)}\n style={fixedWidth}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onPointerEnter={onPointerEnter}\n onPointerLeave={onPointerLeave}\n >\n {children}\n </nav>\n )\n } else {\n // Rail: a permanent spacer keeps the flex layout still; the nav is always absolute so only\n // its width animates on hover (no layout jump).\n body = (\n <>\n <div\n className=\"bg-sidebar border-r border-border flex flex-col h-full relative px-0 pb-safe flex-shrink-0\"\n style={{ width: COLLAPSED_WIDTH, minWidth: COLLAPSED_WIDTH }}\n aria-hidden=\"true\"\n />\n {isHovering && hasRailBackdrop && (\n <div\n className=\"fixed inset-0 z-[44] bg-black/40\"\n onClick={onBackdropClick}\n aria-hidden=\"true\"\n data-testid={testIdOr(backdropTestId, { testId: 'sidebar-backdrop' })}\n />\n )}\n <nav\n {...common}\n className={cn(\n navBase,\n isHovering ? '!px-3 shadow-xl' : '!px-2',\n 'absolute left-0 top-0 z-[45]',\n className\n )}\n style={{\n width: isHovering ? EXPANDED_WIDTH : COLLAPSED_WIDTH,\n minWidth: isHovering ? EXPANDED_WIDTH : COLLAPSED_WIDTH,\n }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onPointerEnter={onPointerEnter}\n onPointerLeave={onPointerLeave}\n >\n {children}\n </nav>\n </>\n )\n }\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <BlocksTooltipProvider>{body}</BlocksTooltipProvider>\n </SidebarContext.Provider>\n )\n}\n\nexport interface SidebarSectionProps {\n children: ReactNode\n className?: string\n 'data-testid'?: string\n}\n\nfunction SidebarHeader({ children, className, 'data-testid': testId }: SidebarSectionProps) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-testid={testId}\n className={cn('flex flex-shrink-0 flex-col gap-3 pb-3', className)}\n >\n {children}\n </div>\n )\n}\n\nexport interface SidebarNavProps extends Omit<SidebarSectionProps, 'children'> {\n children?: ReactNode\n /** Rows as data. Children render after them. */\n items?: NavItem[]\n /** Labelled groups of rows as data (each a `Sidebar.Group`), after `items`. */\n sections?: NavSection[]\n}\n\nfunction SidebarNav({\n items,\n sections,\n children,\n className,\n 'data-testid': testId,\n}: SidebarNavProps) {\n const { expanded } = useSidebarContext()\n return (\n <div\n data-slot=\"sidebar-nav\"\n data-testid={testId}\n className={cn('flex flex-shrink-0 flex-col gap-0.5', !expanded && 'items-center', className)}\n >\n {items?.map((item) => (\n <SidebarNavItem key={item.id} {...item} />\n ))}\n {sections?.map((section, index) => (\n <Fragment key={section.id}>\n {/* An unlabelled run after other rows is set apart, so it never reads as part of the\n group above it. */}\n {!section.label && (index > 0 || !!items?.length) && (\n <div\n role=\"separator\"\n data-slot=\"sidebar-group-divider\"\n className={cn('my-1 h-px bg-border', expanded ? 'mx-2' : 'w-6')}\n />\n )}\n <SidebarGroup\n label={section.label}\n ariaLabel={section.ariaLabel}\n data-testid={section.testId}\n >\n {section.items.map((item) => (\n <SidebarNavItem key={item.id} {...item} />\n ))}\n </SidebarGroup>\n </Fragment>\n ))}\n {children}\n </div>\n )\n}\n\nexport interface SidebarGroupProps extends SidebarSectionProps {\n /** Group heading. Shown above the rows when expanded; a thin divider stands in on the rail. */\n label?: ReactNode\n /** Accessible name when `label` is not plain text. */\n ariaLabel?: string\n}\n\n/** A labelled run of rows inside the nav (for example \"Workspace\", \"Tools\"). */\nfunction SidebarGroup({\n label,\n ariaLabel,\n children,\n className,\n 'data-testid': testId,\n}: SidebarGroupProps) {\n const { expanded } = useSidebarContext()\n return (\n <div\n role=\"group\"\n aria-label={ariaLabel ?? (typeof label === 'string' ? label : undefined)}\n data-slot=\"sidebar-group\"\n data-testid={testId}\n className={cn('flex flex-shrink-0 flex-col gap-0.5', !expanded && 'items-center', className)}\n >\n {label &&\n (expanded ? (\n <SidebarGroupLabel>{label}</SidebarGroupLabel>\n ) : (\n <div\n role=\"separator\"\n data-slot=\"sidebar-group-divider\"\n className=\"my-1 h-px w-6 bg-border\"\n />\n ))}\n {children}\n </div>\n )\n}\n\n/** The heading of a `Sidebar.Group` (exported for custom headings). Hidden by the group on the rail. */\nfunction SidebarGroupLabel({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <div\n data-slot=\"sidebar-group-label\"\n className={cn(\n 'px-2 pb-0.5 pt-2 text-xs font-medium uppercase tracking-wide text-muted-foreground',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\nfunction SidebarFooter({ children, className, 'data-testid': testId }: SidebarSectionProps) {\n const { expanded } = useSidebarContext()\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-testid={testId}\n className={cn(\n 'mt-auto flex flex-shrink-0 flex-col gap-2 pt-3 pb-3',\n !expanded && 'items-center',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\nconst INDICATOR_TONES: Record<NavItemIndicator, string> = {\n progress: 'bg-primary',\n error: 'bg-red-solid',\n attention: 'bg-yellow-solid',\n}\n\nexport type SidebarNavItemProps = Omit<NavItem, 'id'> & {\n id?: string\n className?: string\n /** Tooltip shown on the icon-only rail; defaults to the label. */\n tooltip?: string\n}\n\n/**\n * One row: [icon] [label] [count] [trailing]. 36px (44px on coarse pointers). The active row is\n * the selection tint, never a filled block; counts are quiet numbers, not pills.\n *\n * The expanded row is a div with role=\"button\" (not a native <button>) so an interactive\n * `trailing` control can be nested without producing button-in-button markup.\n */\nfunction SidebarNavItem({\n label,\n icon,\n active = false,\n onSelect,\n href,\n external,\n pressed,\n count,\n countIcon,\n testId,\n disabled = false,\n trailing,\n indicator,\n className,\n tooltip,\n}: SidebarNavItemProps) {\n const { expanded } = useSidebarContext()\n // Tracked as state (not CSS :hover) so a trailing control can read it via context.\n const [isRowActive, setIsRowActive] = useState(false)\n const tip = expanded ? undefined : (tooltip ?? label)\n // A toggle row says whether it is pressed; a destination whether it is the current page.\n const selected = active || pressed === true\n const state =\n pressed !== undefined\n ? { 'aria-pressed': pressed }\n : { 'aria-current': active ? ('page' as const) : undefined }\n\n if (!expanded) {\n const railButton = (\n <ActionLink\n href={href}\n external={external}\n onSelect={onSelect}\n disabled={disabled}\n aria-label={label}\n {...state}\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={cn(\n 'm-0 flex h-9 w-12 items-center justify-center rounded-md transition-colors pointer-coarse:h-11',\n selected\n ? 'bg-accent text-accent-foreground'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground',\n disabled && 'pointer-events-none cursor-not-allowed opacity-30',\n className\n )}\n >\n <div className=\"flex size-5 items-center justify-center\">\n {indicator ? (\n <div className=\"relative\">\n {icon}\n <div\n data-slot=\"sidebar-nav-indicator\"\n data-tone={indicator}\n className={cn(\n 'absolute -right-1 -top-1 size-2.5 rounded-full border border-sidebar',\n INDICATOR_TONES[indicator]\n )}\n />\n </div>\n ) : (\n icon\n )}\n </div>\n </ActionLink>\n )\n if (!tip) return railButton\n return (\n <Tooltip delayDuration={50}>\n <TooltipTrigger asChild>{railButton}</TooltipTrigger>\n <TooltipContent side=\"right\" sideOffset={8}>\n {tip}\n </TooltipContent>\n </Tooltip>\n )\n }\n\n const rowClass = cn(\n 'group flex h-9 w-full cursor-pointer items-center rounded-md px-3 text-sm transition-colors pointer-coarse:h-11',\n selected\n ? 'bg-accent font-semibold text-accent-foreground'\n : 'font-medium text-muted-foreground hover:bg-muted hover:text-foreground',\n disabled && 'pointer-events-none cursor-not-allowed opacity-30',\n className\n )\n const countNode = count !== undefined && (\n <span\n // `ml-auto` lines the counts up on the right edge as one column of numbers.\n className={cn(\n 'ml-auto inline-flex flex-shrink-0 items-center gap-0.5 pl-2 text-xs font-normal tabular-nums',\n selected ? 'text-accent-foreground' : 'text-muted-foreground'\n )}\n >\n {countIcon}\n {count}\n </span>\n )\n\n // A link row without a nested control is the anchor itself.\n if (href && !disabled && !trailing) {\n return (\n <ActionLink\n href={href}\n external={external}\n onSelect={onSelect}\n {...state}\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={rowClass}\n >\n <div className=\"flex size-5 flex-shrink-0 items-center justify-center\">{icon}</div>\n <span className=\"ml-3 min-w-0 truncate text-left\">{label}</span>\n {countNode}\n </ActionLink>\n )\n }\n\n // A link row with a nested control: a stretched anchor sits under the content, and the\n // trailing control rises above it, so there is never an interactive element inside an anchor.\n if (href && !disabled) {\n return (\n <div\n onMouseEnter={() => setIsRowActive(true)}\n onMouseLeave={() => setIsRowActive(false)}\n onFocusCapture={() => setIsRowActive(true)}\n onBlurCapture={(e) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node | null)) setIsRowActive(false)\n }}\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={cn(rowClass, 'relative')}\n >\n <ActionLink\n href={href}\n external={external}\n onSelect={onSelect}\n aria-label={label}\n {...state}\n className=\"absolute inset-0 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n />\n <div className=\"pointer-events-none flex min-w-0 flex-1 items-center\">\n <div className=\"flex size-5 flex-shrink-0 items-center justify-center\">{icon}</div>\n <span className=\"ml-3 min-w-0 truncate text-left\">{label}</span>\n {countNode}\n </div>\n <SidebarRowHoverContext.Provider value={isRowActive}>\n <span className=\"relative ml-2 flex flex-shrink-0 items-center\">{trailing}</span>\n </SidebarRowHoverContext.Provider>\n </div>\n )\n }\n\n return (\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n {...state}\n onClick={disabled ? undefined : onSelect}\n onMouseEnter={() => setIsRowActive(true)}\n onMouseLeave={() => setIsRowActive(false)}\n onFocusCapture={() => setIsRowActive(true)}\n onBlurCapture={(e) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node | null)) setIsRowActive(false)\n }}\n onKeyDown={\n disabled\n ? undefined\n : (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onSelect()\n }\n }\n }\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={rowClass}\n >\n <div className=\"flex size-5 flex-shrink-0 items-center justify-center\">{icon}</div>\n <span className=\"ml-3 min-w-0 truncate text-left\">{label}</span>\n {countNode}\n {trailing && (\n <SidebarRowHoverContext.Provider value={isRowActive}>\n <span className=\"ml-auto flex flex-shrink-0 items-center pl-2\">{trailing}</span>\n </SidebarRowHoverContext.Provider>\n )}\n </div>\n )\n}\n\nexport interface SidebarPinToggleProps {\n isPinned: boolean\n onToggle: () => void\n className?: string\n /** Default `sidebar-pin-button`. */\n 'data-testid'?: string\n}\n\n/**\n * Pin/unpin button, revealed while the pointer is over the sidebar. It is always visible on\n * coarse pointers (no hover on touch) and revealed by keyboard focus anywhere in the sidebar. It\n * is hidden with opacity and pointer-events, never display:none, so it keeps its accessible name\n * and stays in the tab order.\n */\nfunction SidebarPinToggle({\n isPinned,\n onToggle,\n className,\n 'data-testid': testId,\n}: SidebarPinToggleProps) {\n const { expanded, labels } = useSidebarContext()\n const label = isPinned ? labels.hideSidebar : labels.showSidebar\n return (\n <button\n type=\"button\"\n onClick={onToggle}\n title={label}\n aria-label={label}\n aria-pressed={isPinned}\n data-testid={testIdOr(testId, { testId: 'sidebar-pin-button' })}\n className={cn(\n 'flex flex-shrink-0 items-center justify-center rounded-md text-muted-foreground transition-[opacity,colors] hover:bg-muted hover:text-foreground pointer-coarse:size-11',\n 'pointer-events-none opacity-0 group-hover/sidebar:pointer-events-auto group-hover/sidebar:opacity-100',\n 'group-focus-within/sidebar:pointer-events-auto group-focus-within/sidebar:opacity-100',\n 'pointer-coarse:pointer-events-auto pointer-coarse:opacity-100 focus-visible:pointer-events-auto focus-visible:opacity-100',\n expanded ? 'size-9' : 'h-9 w-12',\n className\n )}\n >\n {isPinned ? <PanelLeftClose className=\"size-5\" /> : <PanelLeftOpen className=\"size-5\" />}\n </button>\n )\n}\n\nexport interface SidebarDrawerHeaderProps {\n /** Brand mark. */\n logo: ReactNode\n onClose: () => void\n closeLabel?: string\n /** Close button id (default `mobile-nav-close`). */\n 'data-testid'?: string\n}\n\n/** The phone drawer's header: brand mark and a 44px close button. */\nfunction SidebarDrawerHeader({\n logo,\n onClose,\n closeLabel: closeLabelProp,\n 'data-testid': testId,\n}: SidebarDrawerHeaderProps) {\n const { labels } = useSidebarContext()\n const closeLabel = closeLabelProp ?? labels.closeNavigationMenu\n return (\n <div\n data-slot=\"sidebar-drawer-header\"\n className=\"flex flex-shrink-0 items-center justify-between pb-2\"\n >\n {logo}\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={closeLabel}\n data-testid={testIdOr(testId, { testId: 'mobile-nav-close' })}\n className=\"flex size-11 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n >\n <X className=\"size-5\" />\n </button>\n </div>\n )\n}\n\nexport { DEFAULT_SIDEBAR_LABELS, SidebarRowHoverContext, useSidebarContext, type SidebarLabels }\n\nexport const Sidebar = {\n Root: SidebarRoot,\n Header: SidebarHeader,\n Nav: SidebarNav,\n Group: SidebarGroup,\n GroupLabel: SidebarGroupLabel,\n NavItem: SidebarNavItem,\n Footer: SidebarFooter,\n PinToggle: SidebarPinToggle,\n BadgeRow: SidebarBadgeRow,\n DrawerHeader: SidebarDrawerHeader,\n}\n"]}
1
+ {"version":3,"sources":["../src/shell/sidebar-context.ts","../src/shell/SidebarBadgeRow.tsx","../src/lib/start-inset.ts","../src/shell/Sidebar.tsx"],"names":["createContext","useContext","forwardRef","SidebarBadgeRow","jsxs","cn","jsx","Tooltip","TooltipTrigger","TooltipContent","useEffect","useMemo","useRef","useDrawerBehavior","testIdOr","Fragment","BlocksTooltipProvider","useState","ActionLink","PanelLeftClose","PanelLeftOpen","X"],"mappings":"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","file":"chunk-NNJQTH6R.cjs","sourcesContent":["import { createContext, useContext } from 'react'\n\n/** Fixed strings of the sidebar family. Set once on `Sidebar.Root`; parts read them from context. */\nexport interface SidebarLabels {\n /** The sidebar's accessible name (the Root `aria-label` prop wins). */\n mainNavigation: string\n hideSidebar: string\n showSidebar: string\n /** The drawer's close button (the `closeLabel` prop wins). */\n closeNavigationMenu: string\n}\n\nexport const DEFAULT_SIDEBAR_LABELS: SidebarLabels = {\n mainNavigation: 'Main navigation',\n hideSidebar: 'Hide sidebar',\n showSidebar: 'Show sidebar',\n closeNavigationMenu: 'Close navigation menu',\n}\n\nexport interface SidebarContextValue {\n /** Labels are visible (full width), as opposed to the icon-only rail. */\n expanded: boolean\n labels: SidebarLabels\n}\nexport const SidebarContext = createContext<SidebarContextValue>({\n expanded: true,\n labels: DEFAULT_SIDEBAR_LABELS,\n})\nexport const useSidebarContext = (): SidebarContextValue => useContext(SidebarContext)\n\n/** True while the surrounding row is hovered/focused; trailing controls may brighten on it. */\nexport const SidebarRowHoverContext = createContext(false)\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react'\nimport { cn, Tooltip, TooltipContent, TooltipTrigger } from '@arbidocs/react/ui'\nimport { useSidebarContext } from './sidebar-context'\n\nexport interface SidebarBadgeRowProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'children'\n> {\n /** Glyph (20px). */\n icon: ReactNode\n /** Visible label of the expanded row; the tooltip of the icon-only rail. */\n label: string\n /** Unread/pending number. Hidden at 0 or `undefined`; values above 9 read \"9+\". */\n count?: number\n /**\n * Accessible name including the count, for example \"Notifications, 2 unread\". Defaults to\n * `label` plus the count.\n */\n ariaLabel?: string\n /**\n * `row`: a labelled row styled like the module rows, badge at the right. `icon`: icon-only with\n * the badge on the corner. Default follows the sidebar (`row` expanded, `icon` on the rail).\n */\n variant?: 'row' | 'icon'\n /** Test id of the count badge. */\n badgeTestId?: string\n}\n\n/**\n * A sidebar row that carries a badge and may open something (a panel, a popover): the\n * notifications and contacts rows above the account bar. A real button that forwards its ref and\n * rest props, so it can be a popover trigger (`<DropdownMenuTrigger asChild>`). The badge is\n * visible in both the expanded row and the icon-only rail, and the accessible name carries the\n * count in both.\n */\nexport const SidebarBadgeRow = forwardRef<HTMLButtonElement, SidebarBadgeRowProps>(\n function SidebarBadgeRow(\n { icon, label, count, ariaLabel, variant, badgeTestId, className, type = 'button', ...rest },\n ref\n ) {\n const { expanded } = useSidebarContext()\n const resolved = variant ?? (expanded ? 'row' : 'icon')\n const hasCount = count !== undefined && count > 0\n const badgeText = hasCount ? (count > 9 ? '9+' : String(count)) : null\n const name = ariaLabel ?? (hasCount ? `${label}, ${count}` : label)\n\n if (resolved === 'row') {\n return (\n <button\n ref={ref}\n type={type}\n aria-label={name}\n data-slot=\"sidebar-badge-row\"\n data-variant=\"row\"\n className={cn(\n 'group flex h-9 w-full cursor-pointer items-center rounded-md px-3 text-left text-sm font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:h-11',\n className\n )}\n {...rest}\n >\n <span className=\"flex size-5 flex-shrink-0 items-center justify-center\" aria-hidden>\n {icon}\n </span>\n <span className=\"ml-3 min-w-0 truncate\" aria-hidden>\n {label}\n </span>\n {badgeText && (\n <span\n aria-hidden\n data-testid={badgeTestId}\n className=\"ml-auto inline-flex min-w-5 flex-shrink-0 items-center justify-center rounded-full bg-primary px-1.5 text-xs font-semibold leading-5 tabular-nums text-primary-foreground\"\n >\n {badgeText}\n </span>\n )}\n </button>\n )\n }\n\n const iconButton = (\n <button\n ref={ref}\n type={type}\n aria-label={name}\n data-slot=\"sidebar-badge-row\"\n data-variant=\"icon\"\n title={variant === 'icon' ? label : undefined}\n className={cn(\n 'relative m-0 flex h-9 w-12 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:h-11',\n className\n )}\n {...rest}\n >\n <span className=\"flex size-5 items-center justify-center\" aria-hidden>\n {icon}\n </span>\n {badgeText && (\n <span\n aria-hidden\n data-testid={badgeTestId}\n className=\"absolute right-1 top-0.5 flex min-w-4 items-center justify-center rounded-full bg-primary px-1 text-xs font-semibold leading-4 tabular-nums text-primary-foreground\"\n >\n {badgeText}\n </span>\n )}\n </button>\n )\n // A standalone icon button (the page header) keeps its native title; the rail uses a tooltip.\n if (variant === 'icon') return iconButton\n return (\n <Tooltip delayDuration={50}>\n <TooltipTrigger asChild>{iconButton}</TooltipTrigger>\n <TooltipContent side=\"right\" sideOffset={8}>\n {label}\n </TooltipContent>\n </Tooltip>\n )\n }\n)\n","import { useEffect } from 'react'\n\n/**\n * The CSS custom property that carries how much of the screen's start (left) edge a docked sidebar\n * takes, set on `<html>`. A floating element pinned to the start corner (the install prompt)\n * positions itself `calc(var(--shell-start-inset, 0px) + 0.75rem)` so it never covers the\n * sidebar's footer (the account menu).\n */\nexport const SHELL_START_INSET_VAR = '--shell-start-inset'\n\nconst widths = new Map<symbol, number>()\n\nfunction apply(): void {\n if (typeof document === 'undefined') return\n const inset = Math.max(0, ...widths.values())\n const style = document.documentElement.style\n if (inset > 0) style.setProperty(SHELL_START_INSET_VAR, `${inset}px`)\n else style.removeProperty(SHELL_START_INSET_VAR)\n}\n\n/**\n * Report a sidebar docked at the start edge, `width` px wide (0 while it is collapsed or is an\n * overlay drawer), to {@link SHELL_START_INSET_VAR}. `Sidebar.Root` calls it; call it from your\n * own docked side panel.\n */\nexport function useShellStartInset(width: number): void {\n useEffect(() => {\n const key = Symbol('shell-start-inset')\n widths.set(key, width)\n apply()\n return () => {\n widths.delete(key)\n apply()\n }\n }, [width])\n}\n","import {\n Fragment,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n type PointerEventHandler,\n} from 'react'\nimport { PanelLeftClose, PanelLeftOpen, X } from 'lucide-react'\nimport { cn, Tooltip, TooltipContent, TooltipTrigger } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\nimport {\n DEFAULT_SIDEBAR_LABELS,\n SidebarContext,\n SidebarRowHoverContext,\n useSidebarContext,\n type SidebarLabels,\n} from './sidebar-context'\nimport { SidebarBadgeRow } from './SidebarBadgeRow'\nimport { ActionLink } from '../components/ActionLink'\nimport { BlocksTooltipProvider } from '../provider/TooltipScope'\nimport { useDrawerBehavior } from '../lib/use-drawer'\nimport { useShellStartInset } from '../lib/start-inset'\nimport type { SidebarMode } from '../lib/sidebar-mode'\nimport type { NavItem, NavItemIndicator, NavSection } from './types'\n\n/**\n * Sidebar: the one tinted column that carries the app frame. Compound parts:\n * Sidebar.Root positioning shell for the four modes (drawer / collapsed / pinned / rail)\n * Sidebar.Header top block (switcher, ask field, pin toggle)\n * Sidebar.Nav the rows: pass `items` (NavItem[]) or compose Sidebar.NavItem children\n * Sidebar.Group a labelled run of rows (heading when expanded, divider on the rail)\n * Sidebar.Footer pinned to the bottom (offline pill, tips card, action cluster)\n * Sidebar.PinToggle / Sidebar.DrawerHeader the header's two stock controls\n *\n * Presentational and controlled: the app resolves `mode`/`expanded` (see `resolveSidebarLayout`\n * and `useSidebarSettle`) and owns where hover/pin/drawer state lives.\n */\n\nconst noop = () => {}\n\nconst COLLAPSED_PX = 64\nconst EXPANDED_PX = 256\nconst COLLAPSED_WIDTH = `${COLLAPSED_PX}px`\nconst EXPANDED_WIDTH = `${EXPANDED_PX}px`\n\nexport interface SidebarRootProps {\n /** Constrain the drawer to an embedded frame. The app keeps the viewport default. */\n contained?: boolean\n mode: SidebarMode\n /** Labels visible. Provided to every part through context. */\n expanded: boolean\n /** `rail` mode: floats open to full width. */\n isHovering?: boolean\n onBackdropClick?: () => void\n /** `rail` mode on touch: the floated-open rail dims the content behind it; tapping it closes. */\n hasRailBackdrop?: boolean\n onMouseEnter?: () => void\n onMouseLeave?: () => void\n onPointerEnter?: PointerEventHandler<HTMLElement>\n onPointerLeave?: PointerEventHandler<HTMLElement>\n children: ReactNode\n className?: string\n 'aria-label'?: string\n labels?: Partial<SidebarLabels>\n /** Root id (default `sidebar`). */\n 'data-testid'?: string\n /** Drawer backdrop id (default `sidebar-backdrop`). */\n backdropTestId?: string\n}\n\nfunction SidebarRoot({\n mode,\n contained = false,\n expanded,\n isHovering = false,\n onBackdropClick,\n hasRailBackdrop = false,\n onMouseEnter,\n onMouseLeave,\n onPointerEnter,\n onPointerLeave,\n children,\n className,\n 'aria-label': ariaLabelProp,\n labels,\n 'data-testid': testId,\n backdropTestId,\n}: SidebarRootProps) {\n const mergedLabels = useMemo(() => ({ ...DEFAULT_SIDEBAR_LABELS, ...labels }), [labels])\n // The drawer is a modal: scroll lock, Escape, focus trap and focus return to the opener.\n const drawerRef = useRef<HTMLDivElement>(null)\n const isDrawer = mode === 'drawer'\n useDrawerBehavior(isDrawer, onBackdropClick ?? noop, drawerRef)\n // Floating start-corner elements (the install prompt) sit clear of the docked sidebar; a rail\n // expanding on hover floats over the page, so only its collapsed width counts.\n useShellStartInset(mode === 'pinned' ? EXPANDED_PX : mode === 'rail' ? COLLAPSED_PX : 0)\n const ariaLabel = ariaLabelProp ?? mergedLabels.mainNavigation\n const contextValue = useMemo(() => ({ expanded, labels: mergedLabels }), [expanded, mergedLabels])\n // `navBase` omits horizontal padding so each mode owns its own: the collapsed state must\n // reach a true 0 width, which an `!important` px would block.\n const navBase =\n 'group/sidebar bg-sidebar border-r border-border text-foreground scrollbar-themed flex flex-col h-full overflow-y-auto overflow-x-hidden pb-safe pt-3 transition-all duration-300 ease-in-out'\n const common = {\n 'aria-label': ariaLabel,\n 'data-testid': testIdOr(testId, { testId: 'sidebar' }),\n 'data-slot': 'sidebar',\n 'data-mode': mode,\n } as const\n const fixedWidth: CSSProperties = { width: EXPANDED_WIDTH, minWidth: EXPANDED_WIDTH }\n\n let body: ReactNode\n if (mode === 'drawer') {\n // Small-screen off-canvas panel + dismiss backdrop; bypasses the hover/collapse model. The\n // wrapper is the modal dialog; the nav landmark sits inside it.\n body = (\n <div\n ref={drawerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n data-slot=\"sidebar-drawer\"\n className={cn(contained ? 'absolute' : 'fixed', 'inset-0 z-50')}\n >\n <div\n className=\"absolute inset-0 bg-black/50\"\n onClick={onBackdropClick}\n aria-hidden=\"true\"\n data-testid={testIdOr(backdropTestId, { testId: 'sidebar-backdrop' })}\n />\n <nav\n {...common}\n className={cn(navBase, '!px-3 absolute left-0 top-0 pt-safe shadow-xl', className)}\n style={fixedWidth}\n >\n {children}\n </nav>\n </div>\n )\n } else if (mode === 'collapsed') {\n // Stays mounted at width 0 so the transition runs on both enter and leave. Horizontal padding\n // is dropped or overflow-hidden would reveal a clipped sliver of the icons.\n body = (\n <nav\n {...common}\n className={cn(navBase, 'absolute left-0 top-0 z-[45]', className)}\n style={{\n width: '0px',\n minWidth: 0,\n paddingLeft: 0,\n paddingRight: 0,\n borderRightWidth: 0,\n pointerEvents: 'none',\n }}\n // Width 0 hides the links visually; inert also takes them out of the tab order and the\n // accessibility tree.\n inert\n >\n {children}\n </nav>\n )\n } else if (mode === 'pinned') {\n body = (\n <nav\n {...common}\n className={cn(navBase, '!px-3 relative flex-shrink-0', className)}\n style={fixedWidth}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onPointerEnter={onPointerEnter}\n onPointerLeave={onPointerLeave}\n >\n {children}\n </nav>\n )\n } else {\n // Rail: a permanent spacer keeps the flex layout still; the nav is always absolute so only\n // its width animates on hover (no layout jump).\n body = (\n <>\n <div\n className=\"bg-sidebar border-r border-border flex flex-col h-full relative px-0 pb-safe flex-shrink-0\"\n style={{ width: COLLAPSED_WIDTH, minWidth: COLLAPSED_WIDTH }}\n aria-hidden=\"true\"\n />\n {isHovering && hasRailBackdrop && (\n <div\n className=\"fixed inset-0 z-[44] bg-black/40\"\n onClick={onBackdropClick}\n aria-hidden=\"true\"\n data-testid={testIdOr(backdropTestId, { testId: 'sidebar-backdrop' })}\n />\n )}\n <nav\n {...common}\n className={cn(\n navBase,\n isHovering ? '!px-3 shadow-xl' : '!px-2',\n 'absolute left-0 top-0 z-[45]',\n className\n )}\n style={{\n width: isHovering ? EXPANDED_WIDTH : COLLAPSED_WIDTH,\n minWidth: isHovering ? EXPANDED_WIDTH : COLLAPSED_WIDTH,\n }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onPointerEnter={onPointerEnter}\n onPointerLeave={onPointerLeave}\n >\n {children}\n </nav>\n </>\n )\n }\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <BlocksTooltipProvider>{body}</BlocksTooltipProvider>\n </SidebarContext.Provider>\n )\n}\n\nexport interface SidebarSectionProps {\n children: ReactNode\n className?: string\n 'data-testid'?: string\n}\n\nfunction SidebarHeader({ children, className, 'data-testid': testId }: SidebarSectionProps) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-testid={testId}\n className={cn('flex flex-shrink-0 flex-col gap-3 pb-3', className)}\n >\n {children}\n </div>\n )\n}\n\nexport interface SidebarNavProps extends Omit<SidebarSectionProps, 'children'> {\n children?: ReactNode\n /** Rows as data. Children render after them. */\n items?: NavItem[]\n /** Labelled groups of rows as data (each a `Sidebar.Group`), after `items`. */\n sections?: NavSection[]\n}\n\nfunction SidebarNav({\n items,\n sections,\n children,\n className,\n 'data-testid': testId,\n}: SidebarNavProps) {\n const { expanded } = useSidebarContext()\n return (\n <div\n data-slot=\"sidebar-nav\"\n data-testid={testId}\n className={cn('flex flex-shrink-0 flex-col gap-0.5', !expanded && 'items-center', className)}\n >\n {items?.map((item) => (\n <SidebarNavItem key={item.id} {...item} />\n ))}\n {sections?.map((section, index) => (\n <Fragment key={section.id}>\n {/* An unlabelled run after other rows is set apart, so it never reads as part of the\n group above it. */}\n {!section.label && (index > 0 || !!items?.length) && (\n <div\n role=\"separator\"\n data-slot=\"sidebar-group-divider\"\n className={cn('my-1 h-px bg-border', expanded ? 'mx-2' : 'w-6')}\n />\n )}\n <SidebarGroup\n label={section.label}\n ariaLabel={section.ariaLabel}\n data-testid={section.testId}\n >\n {section.items.map((item) => (\n <SidebarNavItem key={item.id} {...item} />\n ))}\n </SidebarGroup>\n </Fragment>\n ))}\n {children}\n </div>\n )\n}\n\nexport interface SidebarGroupProps extends SidebarSectionProps {\n /** Group heading. Shown above the rows when expanded; a thin divider stands in on the rail. */\n label?: ReactNode\n /** Accessible name when `label` is not plain text. */\n ariaLabel?: string\n}\n\n/** A labelled run of rows inside the nav (for example \"Workspace\", \"Tools\"). */\nfunction SidebarGroup({\n label,\n ariaLabel,\n children,\n className,\n 'data-testid': testId,\n}: SidebarGroupProps) {\n const { expanded } = useSidebarContext()\n return (\n <div\n role=\"group\"\n aria-label={ariaLabel ?? (typeof label === 'string' ? label : undefined)}\n data-slot=\"sidebar-group\"\n data-testid={testId}\n className={cn('flex flex-shrink-0 flex-col gap-0.5', !expanded && 'items-center', className)}\n >\n {label &&\n (expanded ? (\n <SidebarGroupLabel>{label}</SidebarGroupLabel>\n ) : (\n <div\n role=\"separator\"\n data-slot=\"sidebar-group-divider\"\n className=\"my-1 h-px w-6 bg-border\"\n />\n ))}\n {children}\n </div>\n )\n}\n\n/** The heading of a `Sidebar.Group` (exported for custom headings). Hidden by the group on the rail. */\nfunction SidebarGroupLabel({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <div\n data-slot=\"sidebar-group-label\"\n className={cn(\n 'px-2 pb-0.5 pt-2 text-xs font-medium uppercase tracking-wide text-muted-foreground',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\nfunction SidebarFooter({ children, className, 'data-testid': testId }: SidebarSectionProps) {\n const { expanded } = useSidebarContext()\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-testid={testId}\n className={cn(\n 'mt-auto flex flex-shrink-0 flex-col gap-2 pt-3 pb-3',\n !expanded && 'items-center',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\nconst INDICATOR_TONES: Record<NavItemIndicator, string> = {\n progress: 'bg-primary',\n error: 'bg-red-solid',\n attention: 'bg-yellow-solid',\n}\n\nexport type SidebarNavItemProps = Omit<NavItem, 'id'> & {\n id?: string\n className?: string\n /** Tooltip shown on the icon-only rail; defaults to the label. */\n tooltip?: string\n}\n\n/**\n * One row: [icon] [label] [count] [trailing]. 36px (44px on coarse pointers). The active row is\n * the selection tint, never a filled block; counts are quiet numbers, not pills.\n *\n * The expanded row is a div with role=\"button\" (not a native <button>) so an interactive\n * `trailing` control can be nested without producing button-in-button markup.\n */\nfunction SidebarNavItem({\n label,\n icon,\n active = false,\n onSelect,\n href,\n external,\n pressed,\n count,\n countIcon,\n testId,\n disabled = false,\n trailing,\n indicator,\n className,\n tooltip,\n}: SidebarNavItemProps) {\n const { expanded } = useSidebarContext()\n // Tracked as state (not CSS :hover) so a trailing control can read it via context.\n const [isRowActive, setIsRowActive] = useState(false)\n const tip = expanded ? undefined : (tooltip ?? label)\n // A toggle row says whether it is pressed; a destination whether it is the current page.\n const selected = active || pressed === true\n const state =\n pressed !== undefined\n ? { 'aria-pressed': pressed }\n : { 'aria-current': active ? ('page' as const) : undefined }\n\n if (!expanded) {\n const railButton = (\n <ActionLink\n href={href}\n external={external}\n onSelect={onSelect}\n disabled={disabled}\n aria-label={label}\n {...state}\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={cn(\n 'm-0 flex h-9 w-12 items-center justify-center rounded-md transition-colors pointer-coarse:h-11',\n selected\n ? 'bg-accent text-accent-foreground'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground',\n disabled && 'pointer-events-none cursor-not-allowed opacity-30',\n className\n )}\n >\n <div className=\"flex size-5 items-center justify-center\">\n {indicator ? (\n <div className=\"relative\">\n {icon}\n <div\n data-slot=\"sidebar-nav-indicator\"\n data-tone={indicator}\n className={cn(\n 'absolute -right-1 -top-1 size-2.5 rounded-full border border-sidebar',\n INDICATOR_TONES[indicator]\n )}\n />\n </div>\n ) : (\n icon\n )}\n </div>\n </ActionLink>\n )\n if (!tip) return railButton\n return (\n <Tooltip delayDuration={50}>\n <TooltipTrigger asChild>{railButton}</TooltipTrigger>\n <TooltipContent side=\"right\" sideOffset={8}>\n {tip}\n </TooltipContent>\n </Tooltip>\n )\n }\n\n const rowClass = cn(\n 'group flex h-9 w-full cursor-pointer items-center rounded-md px-3 text-sm transition-colors pointer-coarse:h-11',\n selected\n ? 'bg-accent font-semibold text-accent-foreground'\n : 'font-medium text-muted-foreground hover:bg-muted hover:text-foreground',\n disabled && 'pointer-events-none cursor-not-allowed opacity-30',\n className\n )\n const countNode = count !== undefined && (\n <span\n // `ml-auto` lines the counts up on the right edge as one column of numbers.\n className={cn(\n 'ml-auto inline-flex flex-shrink-0 items-center gap-0.5 pl-2 text-xs font-normal tabular-nums',\n selected ? 'text-accent-foreground' : 'text-muted-foreground'\n )}\n >\n {countIcon}\n {count}\n </span>\n )\n\n // A link row without a nested control is the anchor itself.\n if (href && !disabled && !trailing) {\n return (\n <ActionLink\n href={href}\n external={external}\n onSelect={onSelect}\n {...state}\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={rowClass}\n >\n <div className=\"flex size-5 flex-shrink-0 items-center justify-center\">{icon}</div>\n <span className=\"ml-3 min-w-0 truncate text-left\">{label}</span>\n {countNode}\n </ActionLink>\n )\n }\n\n // A link row with a nested control: a stretched anchor sits under the content, and the\n // trailing control rises above it, so there is never an interactive element inside an anchor.\n if (href && !disabled) {\n return (\n <div\n onMouseEnter={() => setIsRowActive(true)}\n onMouseLeave={() => setIsRowActive(false)}\n onFocusCapture={() => setIsRowActive(true)}\n onBlurCapture={(e) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node | null)) setIsRowActive(false)\n }}\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={cn(rowClass, 'relative')}\n >\n <ActionLink\n href={href}\n external={external}\n onSelect={onSelect}\n aria-label={label}\n {...state}\n className=\"absolute inset-0 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n />\n <div className=\"pointer-events-none flex min-w-0 flex-1 items-center\">\n <div className=\"flex size-5 flex-shrink-0 items-center justify-center\">{icon}</div>\n <span className=\"ml-3 min-w-0 truncate text-left\">{label}</span>\n {countNode}\n </div>\n <SidebarRowHoverContext.Provider value={isRowActive}>\n <span className=\"relative ml-2 flex flex-shrink-0 items-center\">{trailing}</span>\n </SidebarRowHoverContext.Provider>\n </div>\n )\n }\n\n return (\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n {...state}\n onClick={disabled ? undefined : onSelect}\n onMouseEnter={() => setIsRowActive(true)}\n onMouseLeave={() => setIsRowActive(false)}\n onFocusCapture={() => setIsRowActive(true)}\n onBlurCapture={(e) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node | null)) setIsRowActive(false)\n }}\n onKeyDown={\n disabled\n ? undefined\n : (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onSelect()\n }\n }\n }\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={rowClass}\n >\n <div className=\"flex size-5 flex-shrink-0 items-center justify-center\">{icon}</div>\n <span className=\"ml-3 min-w-0 truncate text-left\">{label}</span>\n {countNode}\n {trailing && (\n <SidebarRowHoverContext.Provider value={isRowActive}>\n <span className=\"ml-auto flex flex-shrink-0 items-center pl-2\">{trailing}</span>\n </SidebarRowHoverContext.Provider>\n )}\n </div>\n )\n}\n\nexport interface SidebarPinToggleProps {\n isPinned: boolean\n onToggle: () => void\n className?: string\n /** Default `sidebar-pin-button`. */\n 'data-testid'?: string\n}\n\n/**\n * Pin/unpin button, revealed while the pointer is over the sidebar. It is always visible on\n * coarse pointers (no hover on touch) and revealed by keyboard focus anywhere in the sidebar. It\n * is hidden with opacity and pointer-events, never display:none, so it keeps its accessible name\n * and stays in the tab order.\n */\nfunction SidebarPinToggle({\n isPinned,\n onToggle,\n className,\n 'data-testid': testId,\n}: SidebarPinToggleProps) {\n const { expanded, labels } = useSidebarContext()\n const label = isPinned ? labels.hideSidebar : labels.showSidebar\n return (\n <button\n type=\"button\"\n onClick={onToggle}\n title={label}\n aria-label={label}\n aria-pressed={isPinned}\n data-testid={testIdOr(testId, { testId: 'sidebar-pin-button' })}\n className={cn(\n 'flex flex-shrink-0 items-center justify-center rounded-md text-muted-foreground transition-[opacity,colors] hover:bg-muted hover:text-foreground pointer-coarse:size-11',\n 'pointer-events-none opacity-0 group-hover/sidebar:pointer-events-auto group-hover/sidebar:opacity-100',\n 'group-focus-within/sidebar:pointer-events-auto group-focus-within/sidebar:opacity-100',\n 'pointer-coarse:pointer-events-auto pointer-coarse:opacity-100 focus-visible:pointer-events-auto focus-visible:opacity-100',\n expanded ? 'size-9' : 'h-9 w-12',\n className\n )}\n >\n {isPinned ? <PanelLeftClose className=\"size-5\" /> : <PanelLeftOpen className=\"size-5\" />}\n </button>\n )\n}\n\nexport interface SidebarDrawerHeaderProps {\n /** Brand mark. */\n logo: ReactNode\n onClose: () => void\n closeLabel?: string\n /** Close button id (default `mobile-nav-close`). */\n 'data-testid'?: string\n}\n\n/** The phone drawer's header: brand mark and a 44px close button. */\nfunction SidebarDrawerHeader({\n logo,\n onClose,\n closeLabel: closeLabelProp,\n 'data-testid': testId,\n}: SidebarDrawerHeaderProps) {\n const { labels } = useSidebarContext()\n const closeLabel = closeLabelProp ?? labels.closeNavigationMenu\n return (\n <div\n data-slot=\"sidebar-drawer-header\"\n className=\"flex flex-shrink-0 items-center justify-between pb-2\"\n >\n {logo}\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={closeLabel}\n data-testid={testIdOr(testId, { testId: 'mobile-nav-close' })}\n className=\"flex size-11 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n >\n <X className=\"size-5\" />\n </button>\n </div>\n )\n}\n\nexport { DEFAULT_SIDEBAR_LABELS, SidebarRowHoverContext, useSidebarContext, type SidebarLabels }\n\nexport const Sidebar = {\n Root: SidebarRoot,\n Header: SidebarHeader,\n Nav: SidebarNav,\n Group: SidebarGroup,\n GroupLabel: SidebarGroupLabel,\n NavItem: SidebarNavItem,\n Footer: SidebarFooter,\n PinToggle: SidebarPinToggle,\n BadgeRow: SidebarBadgeRow,\n DrawerHeader: SidebarDrawerHeader,\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { NativeDocxComparison } from './chunk-2CBB34K3.js';
3
- import { useConnectedNativeDocxAdapter } from './chunk-IIUEDF3F.js';
3
+ import { useConnectedNativeDocxAdapter } from './chunk-LZAID6RY.js';
4
4
  import { useDocuments, useDocumentsLoading } from '@arbidocs/react';
5
5
  import { jsx } from 'react/jsx-runtime';
6
6
 
@@ -25,5 +25,5 @@ function ConnectedNativeDocxComparison({
25
25
  }
26
26
 
27
27
  export { ConnectedNativeDocxComparison };
28
- //# sourceMappingURL=chunk-2VHZUSFW.js.map
29
- //# sourceMappingURL=chunk-2VHZUSFW.js.map
28
+ //# sourceMappingURL=chunk-OUORCDQD.js.map
29
+ //# sourceMappingURL=chunk-OUORCDQD.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/docx/ConnectedNativeDocxComparison.tsx"],"names":[],"mappings":";;;;;AAYO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,MAAM,OAAA,GAAU,8BAA8B,WAAW,CAAA;AACzD,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,SAAA,KAAc,YAAA,EAAa;AAEpD,EAAA,MAAM,YAAY,mBAAA,EAAoB;AAEtC,EAAA,IAAI,SAAA,IAAa,SAAA;AACf,IAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAoB,IAAA,EAAK,UAAS,QAAA,EAAA,gCAAA,EAEjD,CAAA;AAEJ,EAAA,uBACE,GAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,OAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAY,OAAA,CAAQ;AAAA;AAAA,GACtB;AAEJ","file":"chunk-2VHZUSFW.js","sourcesContent":["import { useDocuments, useDocumentsLoading } from '@arbidocs/react'\nimport {\n NativeDocxComparison,\n type NativeDocxComparisonProps,\n} from '../../docx/NativeDocxComparison'\nimport { useConnectedNativeDocxAdapter } from './ConnectedNativeDocxEditor'\n\n/**\n * The Word redline of two documents or versions, on the signed-in session. The unedited redline\n * saved earlier from the same versions is opened again (found in the workspace's documents, once\n * all their pages are read), so opening a comparison saves at most one.\n */\nexport function ConnectedNativeDocxComparison({\n fontBaseUrl,\n ...props\n}: Omit<NativeDocxComparisonProps, 'adapter' | 'onCompared' | 'documents'> & {\n fontBaseUrl?: string\n}) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n const { data: documents, isLoading } = useDocuments()\n // Every page: the first holds only the oldest documents, and a redline is often newer.\n const morePages = useDocumentsLoading()\n // Until the documents are read, a saved redline can't be found: wait rather than save another.\n if (isLoading || morePages)\n return (\n <div className=\"native-docx-error\" role=\"status\">\n Comparing Word documents…\n </div>\n )\n return (\n <NativeDocxComparison\n {...props}\n adapter={adapter}\n documents={documents}\n onCompared={adapter.onVersionSaved}\n />\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/docx/ConnectedNativeDocxComparison.tsx"],"names":[],"mappings":";;;;;AAYO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,MAAM,OAAA,GAAU,8BAA8B,WAAW,CAAA;AACzD,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,SAAA,KAAc,YAAA,EAAa;AAEpD,EAAA,MAAM,YAAY,mBAAA,EAAoB;AAEtC,EAAA,IAAI,SAAA,IAAa,SAAA;AACf,IAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAoB,IAAA,EAAK,UAAS,QAAA,EAAA,gCAAA,EAEjD,CAAA;AAEJ,EAAA,uBACE,GAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,OAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAY,OAAA,CAAQ;AAAA;AAAA,GACtB;AAEJ","file":"chunk-OUORCDQD.js","sourcesContent":["import { useDocuments, useDocumentsLoading } from '@arbidocs/react'\nimport {\n NativeDocxComparison,\n type NativeDocxComparisonProps,\n} from '../../docx/NativeDocxComparison'\nimport { useConnectedNativeDocxAdapter } from './ConnectedNativeDocxEditor'\n\n/**\n * The Word redline of two documents or versions, on the signed-in session. The unedited redline\n * saved earlier from the same versions is opened again (found in the workspace's documents, once\n * all their pages are read), so opening a comparison saves at most one.\n */\nexport function ConnectedNativeDocxComparison({\n fontBaseUrl,\n ...props\n}: Omit<NativeDocxComparisonProps, 'adapter' | 'onCompared' | 'documents'> & {\n fontBaseUrl?: string\n}) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n const { data: documents, isLoading } = useDocuments()\n // Every page: the first holds only the oldest documents, and a redline is often newer.\n const morePages = useDocumentsLoading()\n // Until the documents are read, a saved redline can't be found: wait rather than save another.\n if (isLoading || morePages)\n return (\n <div className=\"native-docx-error\" role=\"status\">\n Comparing Word documents…\n </div>\n )\n return (\n <NativeDocxComparison\n {...props}\n adapter={adapter}\n documents={documents}\n onCompared={adapter.onVersionSaved}\n />\n )\n}\n"]}
@@ -1,14 +1,14 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkRBI7WVEP_cjs = require('./chunk-RBI7WVEP.cjs');
4
+ var chunk2NAAK4NF_cjs = require('./chunk-2NAAK4NF.cjs');
5
5
  var chunk53RXGFJ6_cjs = require('./chunk-53RXGFJ6.cjs');
6
- var chunkTP5PGWIO_cjs = require('./chunk-TP5PGWIO.cjs');
6
+ var chunk4IOYQLKG_cjs = require('./chunk-4IOYQLKG.cjs');
7
+ var chunkHSLPFBK2_cjs = require('./chunk-HSLPFBK2.cjs');
8
+ var chunkQGVOT7E4_cjs = require('./chunk-QGVOT7E4.cjs');
7
9
  var chunkVOI26MXJ_cjs = require('./chunk-VOI26MXJ.cjs');
8
10
  var chunk7IF3E3I2_cjs = require('./chunk-7IF3E3I2.cjs');
9
11
  var chunkTJQMC7GJ_cjs = require('./chunk-TJQMC7GJ.cjs');
10
- var chunkHSLPFBK2_cjs = require('./chunk-HSLPFBK2.cjs');
11
- var chunkQGVOT7E4_cjs = require('./chunk-QGVOT7E4.cjs');
12
12
  var chunkWGWP4ATS_cjs = require('./chunk-WGWP4ATS.cjs');
13
13
  var ui = require('@arbidocs/react/ui');
14
14
  var lucideReact = require('lucide-react');
@@ -48,16 +48,16 @@ function useConnectedThreadActivity(conversationId) {
48
48
  const assistantCopy = shell.useAssistantCopy();
49
49
  const workspaceExtId = react.useArbiSessionState((s) => s.workspaceId);
50
50
  const task = conversations.find((c) => c.external_id === conversationId);
51
- const latestMessageAt = chunkTP5PGWIO_cjs.latestMessageTime(messageHistory);
51
+ const latestMessageAt = chunk4IOYQLKG_cjs.latestMessageTime(messageHistory);
52
52
  const events = (activity.data ?? []).filter(
53
- (event) => !chunkTP5PGWIO_cjs.isSupersededStop(event, latestMessageAt)
53
+ (event) => !chunk4IOYQLKG_cjs.isSupersededStop(event, latestMessageAt)
54
54
  );
55
55
  const personName = (extId) => {
56
56
  const person = members.find((m) => m.user.external_id === extId)?.user;
57
57
  return person ? ui.getUserDisplayName(person) : "someone";
58
58
  };
59
- const planSteps = chunkTP5PGWIO_cjs.fromPlanSteps(task?.plan?.steps ?? []);
60
- const entries = chunkTP5PGWIO_cjs.compactThreadActivity(events, (id) => planSteps.find((s) => s.id === id)?.title);
59
+ const planSteps = chunk4IOYQLKG_cjs.fromPlanSteps(task?.plan?.steps ?? []);
60
+ const entries = chunk4IOYQLKG_cjs.compactThreadActivity(events, (id) => planSteps.find((s) => s.id === id)?.title);
61
61
  const items = entries.map(({ event, label, recipients }) => {
62
62
  const messageActivity = [
63
63
  "created",
@@ -83,7 +83,7 @@ function useConnectedThreadActivity(conversationId) {
83
83
  const messageId = sourceMessage ?? [...messageHistory].reverse().find((message) => Date.parse(message.created_at ?? "") <= Date.parse(event.created_at))?.external_id ?? messageHistory[0]?.external_id;
84
84
  const doc = docId ? docs.find((d) => d.external_id === docId) : void 0;
85
85
  const mailDraftId = event.kind === "notified" && event.detail?.event === "mail_draft_ready" && typeof event.detail?.mail_id === "string" ? event.detail.mail_id : void 0;
86
- const missed = event.kind === "notified" && recipients.length ? chunkTP5PGWIO_cjs.unnotifiedMentions(
86
+ const missed = event.kind === "notified" && recipients.length ? chunk4IOYQLKG_cjs.unnotifiedMentions(
87
87
  messageHistory.find((message) => message.external_id === sourceMessage)?.mentions,
88
88
  recipients,
89
89
  event.actor_ext_id
@@ -116,7 +116,7 @@ function useConnectedThreadActivity(conversationId) {
116
116
  ) : void 0,
117
117
  docId,
118
118
  docTitle: doc ? ui.getDocumentTitle(doc) : void 0,
119
- label: mailDraftId ? "Left a draft email" : event.kind === "notified" && recipients.length ? chunkTP5PGWIO_cjs.notifiedLabel(recipients.map(personName), missed.map(personName)) : label,
119
+ label: mailDraftId ? "Left a draft email" : event.kind === "notified" && recipients.length ? chunk4IOYQLKG_cjs.notifiedLabel(recipients.map(personName), missed.map(personName)) : label,
120
120
  description: [
121
121
  name,
122
122
  label,
@@ -130,7 +130,7 @@ function useConnectedThreadActivity(conversationId) {
130
130
  stepChip: eventStep ? stepChipOf(eventStep, event.kind, stepDocument) : void 0,
131
131
  // No avatar tooltip: the entry is already a button (or titled row) that carries the same
132
132
  // details, and a tooltip trigger inside it would be a nested <button>.
133
- avatar: assistant ? /* @__PURE__ */ jsxRuntime.jsx(chunkTP5PGWIO_cjs.AssistantEntity, { variant: "icon", size: 20, showTooltip: false }) : member ? /* @__PURE__ */ jsxRuntime.jsx(chunkRBI7WVEP_cjs.DocumentUser, { user: member, tooltip: false }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { className: "size-4 text-muted-foreground" }),
133
+ avatar: assistant ? /* @__PURE__ */ jsxRuntime.jsx(chunk4IOYQLKG_cjs.AssistantEntity, { variant: "icon", size: 20, showTooltip: false }) : member ? /* @__PURE__ */ jsxRuntime.jsx(chunk2NAAK4NF_cjs.DocumentUser, { user: member, tooltip: false }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { className: "size-4 text-muted-foreground" }),
134
134
  time: ui.formatRelativeTime(event.created_at, { style: "short" }),
135
135
  exactTime: ui.formatFriendlyDate(event.created_at),
136
136
  onOpenDocument: docId && doc ? () => openDocument(docId) : void 0,
@@ -179,7 +179,7 @@ function useConnectedThreadActivity(conversationId) {
179
179
  onSelect: () => navigateToConversation(source)
180
180
  });
181
181
  }
182
- const links = chunkTP5PGWIO_cjs.linkedRunsFromActivity(activity.data);
182
+ const links = chunk4IOYQLKG_cjs.linkedRunsFromActivity(activity.data);
183
183
  const threadName = (id, workflowId) => conversations.find((c) => c.external_id === id)?.title || workflows.find((w) => w.external_id === workflowId)?.name || "Linked thread";
184
184
  const signals = links.raised.map((raised) => ({
185
185
  step: raised.step,
@@ -194,7 +194,7 @@ function useConnectedThreadActivity(conversationId) {
194
194
  if (links.startedBy) {
195
195
  const { conversationId: parentId, step, signal } = links.startedBy;
196
196
  const parent = conversations.find((c) => c.external_id === parentId);
197
- const parentSteps = chunkTP5PGWIO_cjs.fromPlanSteps(parent?.plan?.steps ?? []);
197
+ const parentSteps = chunk4IOYQLKG_cjs.fromPlanSteps(parent?.plan?.steps ?? []);
198
198
  startedBy = {
199
199
  stepTitle: parentSteps.find((s) => s.id === step)?.title ?? step ?? "a step",
200
200
  threadTitle: parent?.title || "another thread",
@@ -218,5 +218,5 @@ function useSelectWorkspace() {
218
218
 
219
219
  exports.useConnectedThreadActivity = useConnectedThreadActivity;
220
220
  exports.useSelectWorkspace = useSelectWorkspace;
221
- //# sourceMappingURL=chunk-V2CKYM4B.cjs.map
222
- //# sourceMappingURL=chunk-V2CKYM4B.cjs.map
221
+ //# sourceMappingURL=chunk-OVKVMKTI.cjs.map
222
+ //# sourceMappingURL=chunk-OVKVMKTI.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/tasks/useConnectedThreadActivity.tsx","../src/connection/useSelectWorkspace.ts"],"names":["stepKindOf","STEP_KIND_ICONS","jsx","useWorkflows","useConversationItems","useWorkspaceUsers","useDocuments","useConversationActivity","useConversationData","useBlocksEnvironment","useOpenWorkflow","useAssistantCopy","useArbiSessionState","latestMessageTime","isSupersededStop","getUserDisplayName","fromPlanSteps","compactThreadActivity","splitDocRef","getDocumentTitle","unnotifiedMentions","parseCallLogDetail","ThreadCallLogCard","formatRelativeTime","RecordingCard","notifiedLabel","AssistantEntity","DocumentUser","Clock","formatFriendlyDate","linkedRunsFromActivity","useOptionalConnection","useSwitchWorkspace","useCallback"],"mappings":";;;;;;;;;;;;;;;;;;AA2CA,IAAM,iBAAA,GAAuD;AAAA;AAAA,EAE3D,YAAA,EAAc,OAAA;AAAA,EACd,YAAA,EAAc,SAAA;AAAA,EACd,aAAA,EAAe,SAAA;AAAA,EACf,SAAA,EAAW,MAAA;AAAA,EACX,YAAA,EAAc,SAAA;AAAA,EACd,WAAA,EAAa,QAAA;AAAA,EACb,cAAA,EAAgB;AAClB,CAAA;AAGA,SAAS,UAAA,CACP,IAAA,EACA,SAAA,EACA,QAAA,EACA;AACA,EAAA,MAAM,KAAA,GAAQ,kBAAkB,SAAS,CAAA;AACzC,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,IAAA,GAAOA,6BAAW,IAAI,CAAA;AAC5B,EAAA,MAAM,QAAA,GAAWC,kCAAgB,IAAI,CAAA;AACrC,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,sBAAMC,cAAA,CAAC,QAAA,EAAA,EAAS,GAAI,QAAA,EAAS;AACrD;AAQO,SAAS,2BAA2B,cAAA,EAA2C;AACpF,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,GAAY,EAAC,KAAMC,kBAAA,EAAa;AAC9C,EAAA,MAAM,EAAE,aAAA,EAAc,GAAIC,0BAAA,EAAqB;AAC/C,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,GAAU,EAAC,KAAMC,uBAAA,EAAkB;AACjD,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,GAAO,EAAC,KAAMC,kBAAA,EAAa;AACzC,EAAA,MAAM,WAAWC,6BAAA,CAAwB,cAAA,IAAkB,QAAW,EAAE,IAAA,EAAM,MAAM,CAAA;AACpF,EAAA,MAAM,EAAE,cAAA,EAAe,GAAIC,yBAAA,EAAoB;AAC/C,EAAA,MAAM,cAAcC,sCAAA,EAAqB;AACzC,EAAA,MAAM,EAAE,YAAA,EAAc,QAAA,EAAS,GAAI,WAAA;AACnC,EAAA,MAAM,sBAAA,GAAyB,CAAC,EAAA,EAAY,SAAA,KAC1C,WAAA,CAAY,gBAAA,CAAiB,EAAA,EAAI,SAAA,GAAY,EAAE,SAAA,EAAU,GAAI,MAAS,CAAA;AAExE,EAAA,MAAM,eAAeC,iCAAA,EAAgB;AACrC,EAAA,MAAM,gBAAgBC,sBAAA,EAAiB;AACvC,EAAA,MAAM,cAAA,GAAiBC,yBAAA,CAAoB,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AAC/D,EAAA,MAAM,OAAO,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,cAAc,CAAA;AACvE,EAAA,MAAM,eAAA,GAAkBC,oCAAkB,cAAc,CAAA;AACxD,EAAA,MAAM,MAAA,GAAA,CAAW,QAAA,CAAS,IAAA,IAAQ,EAAC,EAA2B,MAAA;AAAA,IAC5D,CAAC,KAAA,KAAU,CAACC,kCAAA,CAAiB,OAAO,eAAe;AAAA,GACrD;AACA,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAAkB;AACpC,IAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,CAAK,WAAA,KAAgB,KAAK,CAAA,EAAG,IAAA;AAClE,IAAA,OAAO,MAAA,GAASC,qBAAA,CAAmB,MAAM,CAAA,GAAI,SAAA;AAAA,EAC/C,CAAA;AAEA,EAAA,MAAM,YAAYC,+BAAA,CAAe,IAAA,EAAM,IAAA,EAAM,KAAA,IAAS,EAAqB,CAAA;AAC3E,EAAA,MAAM,OAAA,GAAUC,uCAAA,CAAsB,MAAA,EAAQ,CAAC,EAAA,KAAO,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,EAAE,GAAG,KAAK,CAAA;AAC/F,EAAA,MAAM,KAAA,GAAQ,QAAQ,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,KAAA,EAAO,YAAW,KAAM;AAC1D,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,SAAA;AAAA,MACA,oBAAA;AAAA,MACA,qBAAA;AAAA,MACA;AAAA,KACF,CAAE,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AAErB,IAAA,MAAM,SAAA,GACJ,MAAM,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,IAAK,OAAO,MAAM,MAAA,EAAQ,IAAA,KAAS,WAC5D,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAA,GACjD,MAAA;AAEN,IAAA,MAAM,UAAA,GACJ,KAAA,CAAM,IAAA,KAAS,WAAA,IAAe,MAAM,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,SAAS,IAC9D,KAAA,CAAM,MAAA,CAAO,SAAA,CAAuB,EAAA,CAAG,EAAE,CAAA,GAC1C,MAAA;AACN,IAAA,MAAM,SAAA,GAAY,UAAA,GAAaC,6BAAA,CAAY,UAAU,EAAE,EAAA,GAAK,MAAA;AAC5D,IAAA,MAAM,aAAA,GAAgB,YAAY,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,KAAgB,SAAS,CAAA,GAAI,MAAA;AAClF,IAAA,MAAM,eAAe,SAAA,GACjB;AAAA,MACE,IAAA,EAAM,aAAA,GAAgBC,mBAAA,CAAiB,aAAa,CAAA,GAAI,SAAA;AAAA,MACxD,MAAA,EAAQ,MAAM,YAAA,CAAa,SAAS;AAAA,KACtC,GACA,MAAA;AAEJ,IAAA,MAAM,SAAA,GACJ,KAAA,CAAM,IAAA,KAAS,qBAAA,IACf,KAAA,CAAM,IAAA,KAAS,mBAAA,IACf,KAAA,CAAM,MAAA,EAAQ,SAAA,KAAc,IAAA,IAC5B,SAAA,EAAW,IAAA,KAAS,OAAA;AACtB,IAAA,MAAM,SAAS,OAAA,CAAQ,IAAA;AAAA,MACrB,CAAC,CAAA,KACC,CAAA,CAAE,IAAA,CAAK,WAAA,MACN,KAAA,CAAM,YAAA,KAAiB,KAAA,CAAM,IAAA,KAAS,SAAA,GAAY,IAAA,EAAM,iBAAA,GAAoB,MAAA,CAAA;AAAA,KACjF,EAAG,IAAA;AACH,IAAA,MAAM,OAAO,SAAA,GAAY,aAAA,CAAc,OAAO,MAAA,GAASJ,qBAAA,CAAmB,MAAM,CAAA,GAAI,QAAA;AACpF,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,CAAM,MAAA,EAAQ,eAAe,QAAA,GAAW,KAAA,CAAM,OAAO,UAAA,GAAa,MAAA;AACvF,IAAA,MAAM,aAAA,GACJ,OAAO,KAAA,CAAM,MAAA,EAAQ,mBAAmB,QAAA,GAAW,KAAA,CAAM,OAAO,cAAA,GAAiB,MAAA;AACnF,IAAA,MAAM,SAAA,GACJ,aAAA,IACA,CAAC,GAAG,cAAc,CAAA,CACf,OAAA,EAAQ,CACR,IAAA,CAAK,CAAC,OAAA,KAAY,IAAA,CAAK,KAAA,CAAM,QAAQ,UAAA,IAAc,EAAE,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,UAAU,CAAC,CAAA,EACrF,WAAA,IACJ,cAAA,CAAe,CAAC,CAAA,EAAG,WAAA;AACrB,IAAA,MAAM,GAAA,GAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,KAAgB,KAAK,CAAA,GAAI,MAAA;AAEhE,IAAA,MAAM,WAAA,GACJ,KAAA,CAAM,IAAA,KAAS,UAAA,IACf,MAAM,MAAA,EAAQ,KAAA,KAAU,kBAAA,IACxB,OAAO,MAAM,MAAA,EAAQ,OAAA,KAAY,QAAA,GAC7B,KAAA,CAAM,OAAO,OAAA,GACb,MAAA;AAEN,IAAA,MAAM,MAAA,GACJ,KAAA,CAAM,IAAA,KAAS,UAAA,IAAc,WAAW,MAAA,GACpCK,oCAAA;AAAA,MACE,eAAe,IAAA,CAAK,CAAC,YAAY,OAAA,CAAQ,WAAA,KAAgB,aAAa,CAAA,EAAG,QAAA;AAAA,MACzE,UAAA;AAAA,MACA,KAAA,CAAM;AAAA,QAER,EAAC;AAEP,IAAA,MAAM,aAAa,KAAA,CAAM,IAAA,KAAS,SAASC,oCAAA,CAAmB,KAAA,CAAM,MAAM,CAAA,GAAI,IAAA;AAE9E,IAAA,MAAM,aAAA,GACJ,KAAA,CAAM,IAAA,KAAS,WAAA,IAAe,OAAO,KAAA,CAAM,MAAA,EAAQ,WAAA,KAAgB,QAAA,GAC/D,KAAA,CAAM,MAAA,CAAO,WAAA,GACb,IAAA;AACN,IAAA,MAAM,WAAA,GACJ,OAAO,KAAA,CAAM,MAAA,EAAQ,qBAAqB,QAAA,GAAW,KAAA,CAAM,OAAO,gBAAA,GAAmB,IAAA;AACvF,IAAA,OAAO;AAAA,MACL,IAAI,KAAA,CAAM,WAAA;AAAA,MACV,MAAM,KAAA,CAAM,IAAA;AAAA;AAAA,MAEZ,IAAA,EAAM,OAAO,KAAA,CAAM,MAAA,EAAQ,SAAS,QAAA,GAAW,KAAA,CAAM,OAAO,IAAA,GAAO,MAAA;AAAA,MACnE,WAAW,KAAA,CAAM,UAAA;AAAA,MACjB,MAAM,UAAA,mBACJnB,cAAA;AAAA,QAACoB,mCAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,UAAA;AAAA,UACR,IAAA,EAAM,UAAA;AAAA,UACN,cAAA;AAAA,UACA,MAAMC,qBAAA,CAAmB,KAAA,CAAM,YAAY,EAAE,KAAA,EAAO,SAAS;AAAA;AAAA,UAE7D,aAAA,mBACFrB,cAAA;AAAA,QAACsB,+BAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,aAAA;AAAA,UACX,cAAA,EAAgB,WAAA;AAAA,UAChB,OAAO,IAAA,EAAM,KAAA;AAAA,UACb,MAAMD,qBAAA,CAAmB,KAAA,CAAM,YAAY,EAAE,KAAA,EAAO,SAAS;AAAA;AAAA,OAC/D,GACE,MAAA;AAAA,MACJ,KAAA;AAAA,MACA,QAAA,EAAU,GAAA,GAAMJ,mBAAA,CAAiB,GAAG,CAAA,GAAI,MAAA;AAAA,MACxC,OAAO,WAAA,GACH,oBAAA,GACA,KAAA,CAAM,IAAA,KAAS,cAAc,UAAA,CAAW,MAAA,GACtCM,+BAAA,CAAc,UAAA,CAAW,IAAI,UAAU,CAAA,EAAG,OAAO,GAAA,CAAI,UAAU,CAAC,CAAA,GAChE,KAAA;AAAA,MACN,WAAA,EAAa;AAAA,QACX,IAAA;AAAA,QACA,KAAA;AAAA,QACA,GAAG,UAAA,CAAW,GAAA,CAAI,CAAC,EAAA,KAAO;AACxB,UAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,CAAK,WAAA,KAAgB,EAAE,CAAA,EAAG,IAAA;AAC/D,UAAA,OAAO,MAAA,GAASV,qBAAA,CAAmB,MAAM,CAAA,GAAI,EAAA;AAAA,QAC/C,CAAC,CAAA;AAAA,QACD,GAAA,GAAMI,mBAAA,CAAiB,GAAG,CAAA,GAAI;AAAA,OAChC,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,QAAK,CAAA;AAAA,MACb,KAAA,EAAO,SAAA,GAAY,WAAA,GAAe,MAAA,EAAQ,WAAA,IAAe,QAAA;AAAA,MACzD,UAAU,SAAA,GAAY,UAAA,CAAW,WAAW,KAAA,CAAM,IAAA,EAAM,YAAY,CAAA,GAAI,MAAA;AAAA;AAAA;AAAA,MAGxE,MAAA,EAAQ,4BACNjB,cAAA,CAACwB,iCAAA,EAAA,EAAgB,SAAQ,MAAA,EAAO,IAAA,EAAM,EAAA,EAAI,WAAA,EAAa,KAAA,EAAO,CAAA,GAC5D,yBACFxB,cAAA,CAACyB,8BAAA,EAAA,EAAa,MAAM,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAA,mBAE5CzB,cAAA,CAAC0B,iBAAA,EAAA,EAAM,SAAA,EAAU,8BAAA,EAA+B,CAAA;AAAA,MAElD,MAAML,qBAAA,CAAmB,KAAA,CAAM,YAAY,EAAE,KAAA,EAAO,SAAS,CAAA;AAAA,MAC7D,SAAA,EAAWM,qBAAA,CAAmB,KAAA,CAAM,UAAU,CAAA;AAAA,MAC9C,gBAAgB,KAAA,IAAS,GAAA,GAAM,MAAM,YAAA,CAAa,KAAK,CAAA,GAAI,MAAA;AAAA,MAC3D,UAAU,MAAM;AACd,QAAA,IAAI,eAAe,QAAA,EAAU;AAC3B,UAAA,QAAA,CAAS,EAAE,OAAA,EAAS,WAAA,EAAa,CAAA;AACjC,UAAA;AAAA,QACF;AACA,QAAA,MAAM,MAAA,GAAS,eAAA,GAAkB,SAAA,GAAY,KAAA,CAAM,WAAA;AAEnD,QAAA,IAAI,MAAA,EAAQ,sBAAA,CAAuB,cAAA,EAAiB,MAAM,CAAA;AAAA,MAC5D;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,OAAA,GAAU,SAAA,CACb,MAAA,CAAO,CAAC,QAAA,KAAa,QAAA,CAAS,yBAAA,KAA8B,cAAc,CAAA,CAC1E,GAAA,CAAI,CAAC,QAAA,KAAa;AACjB,IAAA,MAAM,OAAO,aAAA,CAAc,IAAA;AAAA,MACzB,CAAC,YAAA,KAAiB,YAAA,CAAa,eAAA,KAAoB,QAAA,CAAS;AAAA,KAC9D;AACA,IAAA,OAAO;AAAA,MACL,IAAI,QAAA,CAAS,WAAA;AAAA,MACb,KAAA,EAAO,IAAA,EAAM,KAAA,IAAS,QAAA,CAAS,IAAA;AAAA,MAC/B,KAAA,EAAO,iCAAA;AAAA,MACP,UAAU,MAAM;AACd,QAAA,IAAI,IAAA,EAAM,sBAAA,CAAuB,IAAA,CAAK,WAAW,CAAA;AAAA,aAC5C,YAAA,GAAe,SAAS,WAAW,CAAA;AAAA,MAC1C;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,MAAM,MAAA,GAAS,YAAA,GACX,SAAA,CAAU,IAAA,CAAK,CAAC,aAAa,QAAA,CAAS,WAAA,KAAgB,IAAA,EAAM,eAAe,CAAA,GAC3E,MAAA;AACJ,EAAA,IAAI,MAAA,IAAU,YAAA;AACZ,IAAA,OAAA,CAAQ,OAAA,CAAQ;AAAA,MACd,EAAA,EAAI,CAAA,OAAA,EAAU,MAAA,CAAO,WAAW,CAAA,CAAA;AAAA,MAChC,OAAO,MAAA,CAAO,IAAA;AAAA,MACd,KAAA,EAAO,kCAAA;AAAA,MACP,QAAA,EAAU,MAAM,YAAA,CAAa,MAAA,CAAO,WAAW;AAAA,KAChD,CAAA;AACH,EAAA,MAAM,SAAS,SAAA,CAAU,IAAA;AAAA,IACvB,CAAC,QAAA,KAAa,QAAA,CAAS,WAAA,KAAgB,IAAA,EAAM;AAAA,GAC/C,EAAG,yBAAA;AACH,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAM,SAAS,aAAA,CAAc,IAAA,CAAK,CAAC,YAAA,KAAiB,YAAA,CAAa,gBAAgB,MAAM,CAAA;AACvF,IAAA,IAAI,MAAA;AACF,MAAA,OAAA,CAAQ,OAAA,CAAQ;AAAA,QACd,EAAA,EAAI,MAAA;AAAA,QACJ,KAAA,EAAO,OAAO,KAAA,IAAS,iBAAA;AAAA,QACvB,KAAA,EAAO,mCAAA;AAAA,QACP,QAAA,EAAU,MAAM,sBAAA,CAAuB,MAAM;AAAA,OAC9C,CAAA;AAAA,EACL;AAGA,EAAA,MAAM,KAAA,GAAQC,wCAAA,CAAuB,QAAA,CAAS,IAAuC,CAAA;AACrF,EAAA,MAAM,UAAA,GAAa,CAAC,EAAA,EAAY,UAAA,KAC9B,cAAc,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,WAAA,KAAgB,EAAE,CAAA,EAAG,KAAA,IACjD,UAAU,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,WAAA,KAAgB,UAAU,CAAA,EAAG,IAAA,IACrD,eAAA;AACF,EAAA,MAAM,OAAA,GAAkC,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,IACpE,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MAC9B,IAAI,GAAA,CAAI,cAAA;AAAA,MACR,KAAA,EAAO,UAAA,CAAW,GAAA,CAAI,cAAA,EAAgB,IAAI,UAAU,CAAA;AAAA,MACpD,QAAA,EAAU,MAAM,sBAAA,CAAuB,GAAA,CAAI,cAAc;AAAA,KAC3D,CAAE;AAAA,GACJ,CAAE,CAAA;AACF,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,MAAM,SAAA,EAAW;AACnB,IAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,IAAA,EAAM,MAAA,KAAW,KAAA,CAAM,SAAA;AACzD,IAAA,MAAM,SAAS,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,QAAQ,CAAA;AACnE,IAAA,MAAM,cAAcd,+BAAA,CAAe,MAAA,EAAQ,IAAA,EAAM,KAAA,IAAS,EAAqB,CAAA;AAC/E,IAAA,SAAA,GAAY;AAAA,MACV,SAAA,EAAW,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,EAAA,KAAO,IAAI,CAAA,EAAG,KAAA,IAAS,IAAA,IAAQ,QAAA;AAAA,MACpE,WAAA,EAAa,QAAQ,KAAA,IAAS,gBAAA;AAAA,MAC9B,MAAA;AAAA,MACA,QAAA,EAAU,MAAM,sBAAA,CAAuB,QAAQ;AAAA,KACjD;AAAA,EACF;AACA,EAAA,OAAO,EAAE,QAAA,EAAU,KAAA,EAAO,OAAA,EAAS,SAAS,SAAA,EAAU;AACxD;AC1SO,SAAS,kBAAA,GAAoD;AAClE,EAAA,MAAM,aAAae,uCAAA,EAAsB;AACzC,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAIC,wBAAA,EAAmB;AAC/C,EAAA,OAAOC,mBAAA;AAAA,IACL,OAAO,EAAA,KAAe;AACpB,MAAA,IAAI,UAAA,EAAY,OAAO,UAAA,CAAW,YAAA,CAAa,EAAE,CAAA;AACjD,MAAA,IAAI,CAAE,MAAM,eAAA,CAAgB,EAAE,EAAA,EAAI,CAAA,EAAI,MAAM,IAAI,KAAA,CAAM,8BAA8B,CAAA;AAAA,IACtF,CAAA;AAAA,IACA,CAAC,YAAY,eAAe;AAAA,GAC9B;AACF","file":"chunk-V2CKYM4B.cjs","sourcesContent":["import {\n formatFriendlyDate,\n getDocumentTitle,\n getUserDisplayName,\n formatRelativeTime,\n} from '@arbidocs/react/ui'\nimport { Clock } from 'lucide-react'\nimport {\n useConversationActivity,\n useWorkflows,\n useDocuments,\n useWorkspaceUsers,\n useArbiSessionState,\n useConversationData,\n useConversationItems,\n} from '@arbidocs/react'\nimport { useAssistantCopy } from '@arbidocs/react/shell'\nimport { STEP_KIND_ICONS, stepKindOf } from '../../agents/workflows/stepKinds'\nimport { compactThreadActivity } from '../../agents/tasks/compact-thread-activity'\nimport { fromPlanSteps, type TaskPlanStep } from '../../agents/workflows/planSteps'\nimport { splitDocRef, type WorkflowStepPhase } from '../../agents/workflows/run'\nimport { type WorkflowStep } from '../../agents/workflows/types'\nimport { linkedRunsFromActivity } from '../../agents/tasks/linkedRuns'\nimport { type TaskActivityEvent } from '../../agents/tasks/TaskActivityTimeline'\nimport {\n type WorkflowThreadOrigin,\n type WorkflowThreadSignal,\n} from '../../agents/tasks/WorkflowThreadStrip'\nimport { ThreadCallLogCard } from '../../calls/connected/ThreadCallLogCard'\nimport { RecordingCard } from '../../calls/connected/RecordingCard'\nimport { parseCallLogDetail } from '../../calls/call-cards'\nimport { AssistantEntity } from '../../agents/tasks/AssistantEntity'\nimport {\n isSupersededStop,\n latestMessageTime,\n notifiedLabel,\n unnotifiedMentions,\n} from '../../agents/tasks/taskHelpers'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useOpenWorkflow } from '../workflows/useOpenWorkflow'\nimport { DocumentUser } from '../files/fields/DocumentUser'\n\n/** The phase a step event puts its step in, for its chip in the transcript. */\nconst STEP_EVENT_PHASES: Record<string, WorkflowStepPhase> = {\n // A past \"started\" is not still running: the step's own chip (on the bar) says where it is now.\n step_started: 'ready',\n step_waiting: 'waiting',\n step_progress: 'waiting',\n step_done: 'done',\n step_skipped: 'skipped',\n step_failed: 'failed',\n step_sent_back: 'ready',\n}\n\n/** A step event's chip in the transcript: its step's kind and icon, the phase the event set. */\nfunction stepChipOf(\n step: WorkflowStep,\n eventKind: string,\n document?: { name: string; onOpen: () => void }\n) {\n const phase = STEP_EVENT_PHASES[eventKind]\n if (!phase) return undefined\n const kind = stepKindOf(step)\n const KindIcon = STEP_KIND_ICONS[kind]\n return { kind, phase, icon: <KindIcon />, document }\n}\n\n/**\n * A thread's persisted history, as its top bar's ribbon and its transcript show it: each entry with\n * its actor, its step chip, the document or email it is about and where a click goes; the threads\n * linked to it (what started it, what it starts); the signals its steps raised. Documents,\n * threads, email drafts and workflows open through the host's environment.\n */\nexport function useConnectedThreadActivity(conversationId: string | null | undefined) {\n const { data: workflows = [] } = useWorkflows()\n const { conversations } = useConversationItems()\n const { data: members = [] } = useWorkspaceUsers()\n const { data: docs = [] } = useDocuments()\n const activity = useConversationActivity(conversationId ?? undefined, { live: true })\n const { messageHistory } = useConversationData()\n const environment = useBlocksEnvironment()\n const { openDocument, openMail } = environment\n const navigateToConversation = (id: string, messageId?: string) =>\n environment.openConversation(id, messageId ? { messageId } : undefined)\n // The host's Workflows page, while it has one (absent: a workflow has nowhere to open).\n const openWorkflow = useOpenWorkflow()\n const assistantCopy = useAssistantCopy()\n const workspaceExtId = useArbiSessionState((s) => s.workspaceId)\n const task = conversations.find((c) => c.external_id === conversationId)\n const latestMessageAt = latestMessageTime(messageHistory)\n const events = ((activity.data ?? []) as TaskActivityEvent[]).filter(\n (event) => !isSupersededStop(event, latestMessageAt)\n )\n const personName = (extId: string) => {\n const person = members.find((m) => m.user.external_id === extId)?.user\n return person ? getUserDisplayName(person) : 'someone'\n }\n // The run's steps, from its plan: step events are named after their step and drawn as its chip.\n const planSteps = fromPlanSteps((task?.plan?.steps ?? []) as TaskPlanStep[])\n const entries = compactThreadActivity(events, (id) => planSteps.find((s) => s.id === id)?.title)\n const items = entries.map(({ event, label, recipients }) => {\n const messageActivity = [\n 'created',\n 'participant_joined',\n 'assistant_responded',\n 'assistant_stopped',\n ].includes(event.kind)\n // A stop is about the assistant's turn (the event names no actor), so it is shown as ARBI's.\n const eventStep =\n event.kind.startsWith('step_') && typeof event.detail?.step === 'string'\n ? planSteps.find((s) => s.id === event.detail?.step)\n : undefined\n // A finished step's document (its latest version), one click from its chip in the transcript.\n const stepDocRef =\n event.kind === 'step_done' && Array.isArray(event.detail?.documents)\n ? (event.detail.documents as string[]).at(-1)\n : undefined\n const stepDocId = stepDocRef ? splitDocRef(stepDocRef).id : undefined\n const stepDocRecord = stepDocId ? docs.find((d) => d.external_id === stepDocId) : undefined\n const stepDocument = stepDocId\n ? {\n name: stepDocRecord ? getDocumentTitle(stepDocRecord) : stepDocId,\n onOpen: () => openDocument(stepDocId),\n }\n : undefined\n // An AI step's progress is ARBI's, whoever started the run.\n const assistant =\n event.kind === 'assistant_responded' ||\n event.kind === 'assistant_stopped' ||\n event.detail?.assistant === true ||\n eventStep?.kind === 'agent'\n const member = members.find(\n (m) =>\n m.user.external_id ===\n (event.actor_ext_id ?? (event.kind === 'created' ? task?.created_by_ext_id : undefined))\n )?.user\n const name = assistant ? assistantCopy.name : member ? getUserDisplayName(member) : 'System'\n const docId = typeof event.detail?.doc_ext_id === 'string' ? event.detail.doc_ext_id : undefined\n const sourceMessage =\n typeof event.detail?.message_ext_id === 'string' ? event.detail.message_ext_id : undefined\n const messageId =\n sourceMessage ??\n [...messageHistory]\n .reverse()\n .find((message) => Date.parse(message.created_at ?? '') <= Date.parse(event.created_at))\n ?.external_id ??\n messageHistory[0]?.external_id\n const doc = docId ? docs.find((d) => d.external_id === docId) : undefined\n // A draft email an agent left in the user's native mailbox: the entry opens it in Mail.\n const mailDraftId =\n event.kind === 'notified' &&\n event.detail?.event === 'mail_draft_ready' &&\n typeof event.detail?.mail_id === 'string'\n ? event.detail.mail_id\n : undefined\n // Say who a batch reached, and name any @mentioned person it did not, so nobody has to guess.\n const missed =\n event.kind === 'notified' && recipients.length\n ? unnotifiedMentions(\n messageHistory.find((message) => message.external_id === sourceMessage)?.mentions,\n recipients,\n event.actor_ext_id\n )\n : []\n // A thread call: the server's log card (live → Join, ended → summary + meeting chat).\n const callDetail = event.kind === 'call' ? parseCallLogDetail(event.detail) : null\n // A recording of the thread's call stopped: its Recording card (in a meeting thread).\n const recordingCall =\n event.kind === 'recording' && typeof event.detail?.call_ext_id === 'string'\n ? event.detail.call_ext_id\n : null\n const recordingId =\n typeof event.detail?.recording_ext_id === 'string' ? event.detail.recording_ext_id : null\n return {\n id: event.external_id,\n kind: event.kind,\n // A workflow step event: the step it is about (the thread's step strip places entries by it).\n step: typeof event.detail?.step === 'string' ? event.detail.step : undefined,\n createdAt: event.created_at,\n card: callDetail ? (\n <ThreadCallLogCard\n detail={callDetail}\n name={personName}\n workspaceExtId={workspaceExtId}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : recordingCall ? (\n <RecordingCard\n callExtId={recordingCall}\n recordingExtId={recordingId}\n title={task?.title}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : undefined,\n docId,\n docTitle: doc ? getDocumentTitle(doc) : undefined,\n label: mailDraftId\n ? 'Left a draft email'\n : event.kind === 'notified' && recipients.length\n ? notifiedLabel(recipients.map(personName), missed.map(personName))\n : label,\n description: [\n name,\n label,\n ...recipients.map((id) => {\n const person = members.find((m) => m.user.external_id === id)?.user\n return person ? getUserDisplayName(person) : id\n }),\n doc ? getDocumentTitle(doc) : null,\n ]\n .filter(Boolean)\n .join(' · '),\n actor: assistant ? 'assistant' : (member?.external_id ?? 'system'),\n stepChip: eventStep ? stepChipOf(eventStep, event.kind, stepDocument) : undefined,\n // No avatar tooltip: the entry is already a button (or titled row) that carries the same\n // details, and a tooltip trigger inside it would be a nested <button>.\n avatar: assistant ? (\n <AssistantEntity variant=\"icon\" size={20} showTooltip={false} />\n ) : member ? (\n <DocumentUser user={member} tooltip={false} />\n ) : (\n <Clock className=\"size-4 text-muted-foreground\" />\n ),\n time: formatRelativeTime(event.created_at, { style: 'short' }),\n exactTime: formatFriendlyDate(event.created_at),\n onOpenDocument: docId && doc ? () => openDocument(docId) : undefined,\n onSelect: () => {\n if (mailDraftId && openMail) {\n openMail({ draftId: mailDraftId })\n return\n }\n const target = messageActivity ? messageId : event.external_id\n // The deep link selects the thread the message is on (useConversationData).\n if (target) navigateToConversation(conversationId!, target)\n },\n }\n })\n const related = workflows\n .filter((workflow) => workflow.after_conversation_ext_id === conversationId)\n .map((workflow) => {\n const next = conversations.find(\n (conversation) => conversation.workflow_ext_id === workflow.external_id\n )\n return {\n id: workflow.external_id,\n label: next?.title || workflow.name,\n title: 'Starts when this thread is done',\n onSelect: () => {\n if (next) navigateToConversation(next.external_id)\n else openWorkflow?.(workflow.external_id)\n },\n }\n })\n // The run's workflow, opened in the builder: the same steps, as designed. Only where Workflows\n // is on (otherwise there is no page to open it on).\n const origin = openWorkflow\n ? workflows.find((workflow) => workflow.external_id === task?.workflow_ext_id)\n : undefined\n if (origin && openWorkflow)\n related.unshift({\n id: `origin-${origin.external_id}`,\n label: origin.name,\n title: 'Open the workflow in the builder',\n onSelect: () => openWorkflow(origin.external_id),\n })\n const source = workflows.find(\n (workflow) => workflow.external_id === task?.workflow_ext_id\n )?.after_conversation_ext_id\n if (source) {\n const before = conversations.find((conversation) => conversation.external_id === source)\n if (before)\n related.unshift({\n id: source,\n label: before.title || 'Previous thread',\n title: 'Started when this thread was done',\n onSelect: () => navigateToConversation(source),\n })\n }\n // Linked runs: the signals this thread's steps raised and the threads they started, and, for a\n // thread a signal started, the step and thread it came from.\n const links = linkedRunsFromActivity(activity.data as TaskActivityEvent[] | undefined)\n const threadName = (id: string, workflowId?: string) =>\n conversations.find((c) => c.external_id === id)?.title ||\n workflows.find((w) => w.external_id === workflowId)?.name ||\n 'Linked thread'\n const signals: WorkflowThreadSignal[] = links.raised.map((raised) => ({\n step: raised.step,\n signal: raised.signal,\n runs: raised.runs.map((run) => ({\n id: run.conversationId,\n label: threadName(run.conversationId, run.workflowId),\n onSelect: () => navigateToConversation(run.conversationId),\n })),\n }))\n let startedBy: WorkflowThreadOrigin | undefined\n if (links.startedBy) {\n const { conversationId: parentId, step, signal } = links.startedBy\n const parent = conversations.find((c) => c.external_id === parentId)\n const parentSteps = fromPlanSteps((parent?.plan?.steps ?? []) as TaskPlanStep[])\n startedBy = {\n stepTitle: parentSteps.find((s) => s.id === step)?.title ?? step ?? 'a step',\n threadTitle: parent?.title || 'another thread',\n signal,\n onSelect: () => navigateToConversation(parentId),\n }\n }\n return { activity, items, related, signals, startedBy }\n}\n","import { useCallback } from 'react'\nimport { useSwitchWorkspace } from '@arbidocs/react'\nimport { useOptionalConnection } from './ConnectionProvider'\n\n/**\n * Select a workspace in place, through the sign-in layer when there is one (else the host's own\n * session switch): the page on screen stays, unlike `openWorkspace`, which also shows the\n * workspace. Rejects when it could not be opened.\n */\nexport function useSelectWorkspace(): (id: string) => Promise<void> {\n const connection = useOptionalConnection()\n const { switchWorkspace } = useSwitchWorkspace()\n return useCallback(\n async (id: string) => {\n if (connection) return connection.setWorkspace(id)\n if (!(await switchWorkspace({ id }))) throw new Error('Could not open the workspace')\n },\n [connection, switchWorkspace]\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/tasks/useConnectedThreadActivity.tsx","../src/connection/useSelectWorkspace.ts"],"names":["stepKindOf","STEP_KIND_ICONS","jsx","useWorkflows","useConversationItems","useWorkspaceUsers","useDocuments","useConversationActivity","useConversationData","useBlocksEnvironment","useOpenWorkflow","useAssistantCopy","useArbiSessionState","latestMessageTime","isSupersededStop","getUserDisplayName","fromPlanSteps","compactThreadActivity","splitDocRef","getDocumentTitle","unnotifiedMentions","parseCallLogDetail","ThreadCallLogCard","formatRelativeTime","RecordingCard","notifiedLabel","AssistantEntity","DocumentUser","Clock","formatFriendlyDate","linkedRunsFromActivity","useOptionalConnection","useSwitchWorkspace","useCallback"],"mappings":"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","file":"chunk-OVKVMKTI.cjs","sourcesContent":["import {\n formatFriendlyDate,\n getDocumentTitle,\n getUserDisplayName,\n formatRelativeTime,\n} from '@arbidocs/react/ui'\nimport { Clock } from 'lucide-react'\nimport {\n useConversationActivity,\n useWorkflows,\n useDocuments,\n useWorkspaceUsers,\n useArbiSessionState,\n useConversationData,\n useConversationItems,\n} from '@arbidocs/react'\nimport { useAssistantCopy } from '@arbidocs/react/shell'\nimport { STEP_KIND_ICONS, stepKindOf } from '../../agents/workflows/stepKinds'\nimport { compactThreadActivity } from '../../agents/tasks/compact-thread-activity'\nimport { fromPlanSteps, type TaskPlanStep } from '../../agents/workflows/planSteps'\nimport { splitDocRef, type WorkflowStepPhase } from '../../agents/workflows/run'\nimport { type WorkflowStep } from '../../agents/workflows/types'\nimport { linkedRunsFromActivity } from '../../agents/tasks/linkedRuns'\nimport { type TaskActivityEvent } from '../../agents/tasks/TaskActivityTimeline'\nimport {\n type WorkflowThreadOrigin,\n type WorkflowThreadSignal,\n} from '../../agents/tasks/WorkflowThreadStrip'\nimport { ThreadCallLogCard } from '../../calls/connected/ThreadCallLogCard'\nimport { RecordingCard } from '../../calls/connected/RecordingCard'\nimport { parseCallLogDetail } from '../../calls/call-cards'\nimport { AssistantEntity } from '../../agents/tasks/AssistantEntity'\nimport {\n isSupersededStop,\n latestMessageTime,\n notifiedLabel,\n unnotifiedMentions,\n} from '../../agents/tasks/taskHelpers'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useOpenWorkflow } from '../workflows/useOpenWorkflow'\nimport { DocumentUser } from '../files/fields/DocumentUser'\n\n/** The phase a step event puts its step in, for its chip in the transcript. */\nconst STEP_EVENT_PHASES: Record<string, WorkflowStepPhase> = {\n // A past \"started\" is not still running: the step's own chip (on the bar) says where it is now.\n step_started: 'ready',\n step_waiting: 'waiting',\n step_progress: 'waiting',\n step_done: 'done',\n step_skipped: 'skipped',\n step_failed: 'failed',\n step_sent_back: 'ready',\n}\n\n/** A step event's chip in the transcript: its step's kind and icon, the phase the event set. */\nfunction stepChipOf(\n step: WorkflowStep,\n eventKind: string,\n document?: { name: string; onOpen: () => void }\n) {\n const phase = STEP_EVENT_PHASES[eventKind]\n if (!phase) return undefined\n const kind = stepKindOf(step)\n const KindIcon = STEP_KIND_ICONS[kind]\n return { kind, phase, icon: <KindIcon />, document }\n}\n\n/**\n * A thread's persisted history, as its top bar's ribbon and its transcript show it: each entry with\n * its actor, its step chip, the document or email it is about and where a click goes; the threads\n * linked to it (what started it, what it starts); the signals its steps raised. Documents,\n * threads, email drafts and workflows open through the host's environment.\n */\nexport function useConnectedThreadActivity(conversationId: string | null | undefined) {\n const { data: workflows = [] } = useWorkflows()\n const { conversations } = useConversationItems()\n const { data: members = [] } = useWorkspaceUsers()\n const { data: docs = [] } = useDocuments()\n const activity = useConversationActivity(conversationId ?? undefined, { live: true })\n const { messageHistory } = useConversationData()\n const environment = useBlocksEnvironment()\n const { openDocument, openMail } = environment\n const navigateToConversation = (id: string, messageId?: string) =>\n environment.openConversation(id, messageId ? { messageId } : undefined)\n // The host's Workflows page, while it has one (absent: a workflow has nowhere to open).\n const openWorkflow = useOpenWorkflow()\n const assistantCopy = useAssistantCopy()\n const workspaceExtId = useArbiSessionState((s) => s.workspaceId)\n const task = conversations.find((c) => c.external_id === conversationId)\n const latestMessageAt = latestMessageTime(messageHistory)\n const events = ((activity.data ?? []) as TaskActivityEvent[]).filter(\n (event) => !isSupersededStop(event, latestMessageAt)\n )\n const personName = (extId: string) => {\n const person = members.find((m) => m.user.external_id === extId)?.user\n return person ? getUserDisplayName(person) : 'someone'\n }\n // The run's steps, from its plan: step events are named after their step and drawn as its chip.\n const planSteps = fromPlanSteps((task?.plan?.steps ?? []) as TaskPlanStep[])\n const entries = compactThreadActivity(events, (id) => planSteps.find((s) => s.id === id)?.title)\n const items = entries.map(({ event, label, recipients }) => {\n const messageActivity = [\n 'created',\n 'participant_joined',\n 'assistant_responded',\n 'assistant_stopped',\n ].includes(event.kind)\n // A stop is about the assistant's turn (the event names no actor), so it is shown as ARBI's.\n const eventStep =\n event.kind.startsWith('step_') && typeof event.detail?.step === 'string'\n ? planSteps.find((s) => s.id === event.detail?.step)\n : undefined\n // A finished step's document (its latest version), one click from its chip in the transcript.\n const stepDocRef =\n event.kind === 'step_done' && Array.isArray(event.detail?.documents)\n ? (event.detail.documents as string[]).at(-1)\n : undefined\n const stepDocId = stepDocRef ? splitDocRef(stepDocRef).id : undefined\n const stepDocRecord = stepDocId ? docs.find((d) => d.external_id === stepDocId) : undefined\n const stepDocument = stepDocId\n ? {\n name: stepDocRecord ? getDocumentTitle(stepDocRecord) : stepDocId,\n onOpen: () => openDocument(stepDocId),\n }\n : undefined\n // An AI step's progress is ARBI's, whoever started the run.\n const assistant =\n event.kind === 'assistant_responded' ||\n event.kind === 'assistant_stopped' ||\n event.detail?.assistant === true ||\n eventStep?.kind === 'agent'\n const member = members.find(\n (m) =>\n m.user.external_id ===\n (event.actor_ext_id ?? (event.kind === 'created' ? task?.created_by_ext_id : undefined))\n )?.user\n const name = assistant ? assistantCopy.name : member ? getUserDisplayName(member) : 'System'\n const docId = typeof event.detail?.doc_ext_id === 'string' ? event.detail.doc_ext_id : undefined\n const sourceMessage =\n typeof event.detail?.message_ext_id === 'string' ? event.detail.message_ext_id : undefined\n const messageId =\n sourceMessage ??\n [...messageHistory]\n .reverse()\n .find((message) => Date.parse(message.created_at ?? '') <= Date.parse(event.created_at))\n ?.external_id ??\n messageHistory[0]?.external_id\n const doc = docId ? docs.find((d) => d.external_id === docId) : undefined\n // A draft email an agent left in the user's native mailbox: the entry opens it in Mail.\n const mailDraftId =\n event.kind === 'notified' &&\n event.detail?.event === 'mail_draft_ready' &&\n typeof event.detail?.mail_id === 'string'\n ? event.detail.mail_id\n : undefined\n // Say who a batch reached, and name any @mentioned person it did not, so nobody has to guess.\n const missed =\n event.kind === 'notified' && recipients.length\n ? unnotifiedMentions(\n messageHistory.find((message) => message.external_id === sourceMessage)?.mentions,\n recipients,\n event.actor_ext_id\n )\n : []\n // A thread call: the server's log card (live → Join, ended → summary + meeting chat).\n const callDetail = event.kind === 'call' ? parseCallLogDetail(event.detail) : null\n // A recording of the thread's call stopped: its Recording card (in a meeting thread).\n const recordingCall =\n event.kind === 'recording' && typeof event.detail?.call_ext_id === 'string'\n ? event.detail.call_ext_id\n : null\n const recordingId =\n typeof event.detail?.recording_ext_id === 'string' ? event.detail.recording_ext_id : null\n return {\n id: event.external_id,\n kind: event.kind,\n // A workflow step event: the step it is about (the thread's step strip places entries by it).\n step: typeof event.detail?.step === 'string' ? event.detail.step : undefined,\n createdAt: event.created_at,\n card: callDetail ? (\n <ThreadCallLogCard\n detail={callDetail}\n name={personName}\n workspaceExtId={workspaceExtId}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : recordingCall ? (\n <RecordingCard\n callExtId={recordingCall}\n recordingExtId={recordingId}\n title={task?.title}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : undefined,\n docId,\n docTitle: doc ? getDocumentTitle(doc) : undefined,\n label: mailDraftId\n ? 'Left a draft email'\n : event.kind === 'notified' && recipients.length\n ? notifiedLabel(recipients.map(personName), missed.map(personName))\n : label,\n description: [\n name,\n label,\n ...recipients.map((id) => {\n const person = members.find((m) => m.user.external_id === id)?.user\n return person ? getUserDisplayName(person) : id\n }),\n doc ? getDocumentTitle(doc) : null,\n ]\n .filter(Boolean)\n .join(' · '),\n actor: assistant ? 'assistant' : (member?.external_id ?? 'system'),\n stepChip: eventStep ? stepChipOf(eventStep, event.kind, stepDocument) : undefined,\n // No avatar tooltip: the entry is already a button (or titled row) that carries the same\n // details, and a tooltip trigger inside it would be a nested <button>.\n avatar: assistant ? (\n <AssistantEntity variant=\"icon\" size={20} showTooltip={false} />\n ) : member ? (\n <DocumentUser user={member} tooltip={false} />\n ) : (\n <Clock className=\"size-4 text-muted-foreground\" />\n ),\n time: formatRelativeTime(event.created_at, { style: 'short' }),\n exactTime: formatFriendlyDate(event.created_at),\n onOpenDocument: docId && doc ? () => openDocument(docId) : undefined,\n onSelect: () => {\n if (mailDraftId && openMail) {\n openMail({ draftId: mailDraftId })\n return\n }\n const target = messageActivity ? messageId : event.external_id\n // The deep link selects the thread the message is on (useConversationData).\n if (target) navigateToConversation(conversationId!, target)\n },\n }\n })\n const related = workflows\n .filter((workflow) => workflow.after_conversation_ext_id === conversationId)\n .map((workflow) => {\n const next = conversations.find(\n (conversation) => conversation.workflow_ext_id === workflow.external_id\n )\n return {\n id: workflow.external_id,\n label: next?.title || workflow.name,\n title: 'Starts when this thread is done',\n onSelect: () => {\n if (next) navigateToConversation(next.external_id)\n else openWorkflow?.(workflow.external_id)\n },\n }\n })\n // The run's workflow, opened in the builder: the same steps, as designed. Only where Workflows\n // is on (otherwise there is no page to open it on).\n const origin = openWorkflow\n ? workflows.find((workflow) => workflow.external_id === task?.workflow_ext_id)\n : undefined\n if (origin && openWorkflow)\n related.unshift({\n id: `origin-${origin.external_id}`,\n label: origin.name,\n title: 'Open the workflow in the builder',\n onSelect: () => openWorkflow(origin.external_id),\n })\n const source = workflows.find(\n (workflow) => workflow.external_id === task?.workflow_ext_id\n )?.after_conversation_ext_id\n if (source) {\n const before = conversations.find((conversation) => conversation.external_id === source)\n if (before)\n related.unshift({\n id: source,\n label: before.title || 'Previous thread',\n title: 'Started when this thread was done',\n onSelect: () => navigateToConversation(source),\n })\n }\n // Linked runs: the signals this thread's steps raised and the threads they started, and, for a\n // thread a signal started, the step and thread it came from.\n const links = linkedRunsFromActivity(activity.data as TaskActivityEvent[] | undefined)\n const threadName = (id: string, workflowId?: string) =>\n conversations.find((c) => c.external_id === id)?.title ||\n workflows.find((w) => w.external_id === workflowId)?.name ||\n 'Linked thread'\n const signals: WorkflowThreadSignal[] = links.raised.map((raised) => ({\n step: raised.step,\n signal: raised.signal,\n runs: raised.runs.map((run) => ({\n id: run.conversationId,\n label: threadName(run.conversationId, run.workflowId),\n onSelect: () => navigateToConversation(run.conversationId),\n })),\n }))\n let startedBy: WorkflowThreadOrigin | undefined\n if (links.startedBy) {\n const { conversationId: parentId, step, signal } = links.startedBy\n const parent = conversations.find((c) => c.external_id === parentId)\n const parentSteps = fromPlanSteps((parent?.plan?.steps ?? []) as TaskPlanStep[])\n startedBy = {\n stepTitle: parentSteps.find((s) => s.id === step)?.title ?? step ?? 'a step',\n threadTitle: parent?.title || 'another thread',\n signal,\n onSelect: () => navigateToConversation(parentId),\n }\n }\n return { activity, items, related, signals, startedBy }\n}\n","import { useCallback } from 'react'\nimport { useSwitchWorkspace } from '@arbidocs/react'\nimport { useOptionalConnection } from './ConnectionProvider'\n\n/**\n * Select a workspace in place, through the sign-in layer when there is one (else the host's own\n * session switch): the page on screen stays, unlike `openWorkspace`, which also shows the\n * workspace. Rejects when it could not be opened.\n */\nexport function useSelectWorkspace(): (id: string) => Promise<void> {\n const connection = useOptionalConnection()\n const { switchWorkspace } = useSwitchWorkspace()\n return useCallback(\n async (id: string) => {\n if (connection) return connection.setWorkspace(id)\n if (!(await switchWorkspace({ id }))) throw new Error('Could not open the workspace')\n },\n [connection, switchWorkspace]\n )\n}\n"]}
@@ -5,10 +5,10 @@ var chunk3YEXZX4H_cjs = require('./chunk-3YEXZX4H.cjs');
5
5
  var chunk4PA6VCCR_cjs = require('./chunk-4PA6VCCR.cjs');
6
6
  var chunkRL2HI6NP_cjs = require('./chunk-RL2HI6NP.cjs');
7
7
  var chunk6UZC4XVV_cjs = require('./chunk-6UZC4XVV.cjs');
8
+ var chunkIPSHAMO2_cjs = require('./chunk-IPSHAMO2.cjs');
8
9
  var chunkXNXNLXIC_cjs = require('./chunk-XNXNLXIC.cjs');
9
10
  var chunkSJSGSHIT_cjs = require('./chunk-SJSGSHIT.cjs');
10
11
  var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
11
- var chunkIPSHAMO2_cjs = require('./chunk-IPSHAMO2.cjs');
12
12
  var chunkPLIF5CUV_cjs = require('./chunk-PLIF5CUV.cjs');
13
13
  var ui = require('@arbidocs/react/ui');
14
14
  var jsxRuntime = require('react/jsx-runtime');
@@ -805,5 +805,5 @@ exports.WORKFLOW_COLUMN_ORDER = WORKFLOW_COLUMN_ORDER;
805
805
  exports.WorkflowCatalogueSections = WorkflowCatalogueSections;
806
806
  exports.WorkflowsTable = WorkflowsTable;
807
807
  exports.createWorkflowColumns = createWorkflowColumns;
808
- //# sourceMappingURL=chunk-KCP42W67.cjs.map
809
- //# sourceMappingURL=chunk-KCP42W67.cjs.map
808
+ //# sourceMappingURL=chunk-P5D5GKVH.cjs.map
809
+ //# sourceMappingURL=chunk-P5D5GKVH.cjs.map