@arbidocs/blocks 0.4.153 → 0.4.155

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 (248) hide show
  1. package/dist/{ConnectedNativeDocxComparison-OFPIXNJB.js → ConnectedNativeDocxComparison-OLWRQSRS.js} +11 -11
  2. package/dist/{ConnectedNativeDocxComparison-OFPIXNJB.js.map → ConnectedNativeDocxComparison-OLWRQSRS.js.map} +1 -1
  3. package/dist/{ConnectedNativeDocxComparison-Y5BNLNH6.cjs → ConnectedNativeDocxComparison-YORMOPPN.cjs} +12 -12
  4. package/dist/{ConnectedNativeDocxComparison-Y5BNLNH6.cjs.map → ConnectedNativeDocxComparison-YORMOPPN.cjs.map} +1 -1
  5. package/dist/{ConnectedNativeDocxEditor-LRYU5HPA.js → ConnectedNativeDocxEditor-34EBIIFS.js} +10 -10
  6. package/dist/{ConnectedNativeDocxEditor-LRYU5HPA.js.map → ConnectedNativeDocxEditor-34EBIIFS.js.map} +1 -1
  7. package/dist/{ConnectedNativeDocxEditor-HTEW5JAH.cjs → ConnectedNativeDocxEditor-EHTWGGX3.cjs} +12 -12
  8. package/dist/{ConnectedNativeDocxEditor-HTEW5JAH.cjs.map → ConnectedNativeDocxEditor-EHTWGGX3.cjs.map} +1 -1
  9. package/dist/{ConnectedStreamedWordArtifact-QW74LKHN.cjs → ConnectedStreamedWordArtifact-5DK6QGYN.cjs} +12 -12
  10. package/dist/ConnectedStreamedWordArtifact-5DK6QGYN.cjs.map +1 -0
  11. package/dist/{ConnectedStreamedWordArtifact-QAUVUCSX.js → ConnectedStreamedWordArtifact-GLIDLSAS.js} +11 -11
  12. package/dist/{ConnectedStreamedWordArtifact-QAUVUCSX.js.map → ConnectedStreamedWordArtifact-GLIDLSAS.js.map} +1 -1
  13. package/dist/WorkspaceTableView-5OWX53R5.js +376 -0
  14. package/dist/WorkspaceTableView-5OWX53R5.js.map +1 -0
  15. package/dist/WorkspaceTableView-ZFMAYHUD.cjs +378 -0
  16. package/dist/WorkspaceTableView-ZFMAYHUD.cjs.map +1 -0
  17. package/dist/agents/index.cjs +282 -282
  18. package/dist/agents/index.js +7 -7
  19. package/dist/{chunk-RQ2Y7USX.cjs → chunk-2VHYOTWW.cjs} +3 -3
  20. package/dist/chunk-2VHYOTWW.cjs.map +1 -0
  21. package/dist/{chunk-DTROMMDX.cjs → chunk-3VULDTNL.cjs} +4 -4
  22. package/dist/{chunk-DTROMMDX.cjs.map → chunk-3VULDTNL.cjs.map} +1 -1
  23. package/dist/{chunk-UTTTJSQU.cjs → chunk-4RPBUMHB.cjs} +4 -4
  24. package/dist/{chunk-UTTTJSQU.cjs.map → chunk-4RPBUMHB.cjs.map} +1 -1
  25. package/dist/chunk-53RCZPMR.cjs +496 -0
  26. package/dist/chunk-53RCZPMR.cjs.map +1 -0
  27. package/dist/chunk-5TDGVOR5.js +142 -0
  28. package/dist/chunk-5TDGVOR5.js.map +1 -0
  29. package/dist/chunk-6HMCF4AJ.js +1720 -0
  30. package/dist/chunk-6HMCF4AJ.js.map +1 -0
  31. package/dist/{chunk-CU2O32Z4.cjs → chunk-6QAAIDQQ.cjs} +62 -99
  32. package/dist/chunk-6QAAIDQQ.cjs.map +1 -0
  33. package/dist/chunk-7HHYMDPE.js +431 -0
  34. package/dist/chunk-7HHYMDPE.js.map +1 -0
  35. package/dist/{chunk-SMN32BQ3.cjs → chunk-7NL6WJER.cjs} +3 -160
  36. package/dist/chunk-7NL6WJER.cjs.map +1 -0
  37. package/dist/{chunk-IXWJGOM2.js → chunk-BQ77KSXU.js} +3 -3
  38. package/dist/{chunk-IXWJGOM2.js.map → chunk-BQ77KSXU.js.map} +1 -1
  39. package/dist/chunk-BTF4AZMG.js +148 -0
  40. package/dist/chunk-BTF4AZMG.js.map +1 -0
  41. package/dist/{chunk-HALD6ZB5.cjs → chunk-C3SMTA3C.cjs} +4 -4
  42. package/dist/{chunk-HALD6ZB5.cjs.map → chunk-C3SMTA3C.cjs.map} +1 -1
  43. package/dist/{chunk-GAYMJWTC.cjs → chunk-CB4TIDEX.cjs} +6 -6
  44. package/dist/{chunk-GAYMJWTC.cjs.map → chunk-CB4TIDEX.cjs.map} +1 -1
  45. package/dist/{chunk-KPZZ5FHE.cjs → chunk-CNHUJRQ4.cjs} +10 -6
  46. package/dist/chunk-CNHUJRQ4.cjs.map +1 -0
  47. package/dist/{chunk-Q4BY2CQQ.cjs → chunk-CQCNU5KT.cjs} +28 -28
  48. package/dist/{chunk-Q4BY2CQQ.cjs.map → chunk-CQCNU5KT.cjs.map} +1 -1
  49. package/dist/{chunk-GRGS5M6O.cjs → chunk-CROGFB46.cjs} +160 -3
  50. package/dist/chunk-CROGFB46.cjs.map +1 -0
  51. package/dist/{chunk-QN47Q4N7.js → chunk-CU6LDQ57.js} +3 -3
  52. package/dist/{chunk-QN47Q4N7.js.map → chunk-CU6LDQ57.js.map} +1 -1
  53. package/dist/{chunk-EF4ZLKRM.js → chunk-DEPF5LQI.js} +3 -3
  54. package/dist/{chunk-EF4ZLKRM.js.map → chunk-DEPF5LQI.js.map} +1 -1
  55. package/dist/{chunk-JAANWQGB.js → chunk-ETZ5A3GU.js} +3 -3
  56. package/dist/{chunk-JAANWQGB.js.map → chunk-ETZ5A3GU.js.map} +1 -1
  57. package/dist/{chunk-TBEVGWY3.js → chunk-F57LNUSZ.js} +10 -6
  58. package/dist/chunk-F57LNUSZ.js.map +1 -0
  59. package/dist/{chunk-GFNELPDP.cjs → chunk-FM3IRQJW.cjs} +10 -5
  60. package/dist/chunk-FM3IRQJW.cjs.map +1 -0
  61. package/dist/chunk-FPHTSNOE.js +465 -0
  62. package/dist/chunk-FPHTSNOE.js.map +1 -0
  63. package/dist/{chunk-OVR3XMYL.js → chunk-FYZXDZM7.js} +3 -3
  64. package/dist/{chunk-OVR3XMYL.js.map → chunk-FYZXDZM7.js.map} +1 -1
  65. package/dist/{chunk-2FLWPM3B.cjs → chunk-GC2FSPSQ.cjs} +7 -7
  66. package/dist/{chunk-2FLWPM3B.cjs.map → chunk-GC2FSPSQ.cjs.map} +1 -1
  67. package/dist/{chunk-DB2OXRQC.js → chunk-GO3BN76C.js} +7 -7
  68. package/dist/{chunk-DB2OXRQC.js.map → chunk-GO3BN76C.js.map} +1 -1
  69. package/dist/{chunk-XZIYRKLW.cjs → chunk-H32DV7XS.cjs} +5 -139
  70. package/dist/chunk-H32DV7XS.cjs.map +1 -0
  71. package/dist/{chunk-4236BRZK.js → chunk-HP2C4MD3.js} +29 -3
  72. package/dist/chunk-HP2C4MD3.js.map +1 -0
  73. package/dist/{chunk-ZP6Q3KXU.cjs → chunk-HUATKA3M.cjs} +4 -4
  74. package/dist/{chunk-ZP6Q3KXU.cjs.map → chunk-HUATKA3M.cjs.map} +1 -1
  75. package/dist/chunk-ISHFVKVU.js +304 -0
  76. package/dist/chunk-ISHFVKVU.js.map +1 -0
  77. package/dist/chunk-JUUOJP7I.cjs +164 -0
  78. package/dist/chunk-JUUOJP7I.cjs.map +1 -0
  79. package/dist/{chunk-4KMLM3GY.cjs → chunk-KBO75NLM.cjs} +7 -7
  80. package/dist/{chunk-4KMLM3GY.cjs.map → chunk-KBO75NLM.cjs.map} +1 -1
  81. package/dist/{chunk-Z4NQ3TED.js → chunk-KCSIX7CY.js} +3 -3
  82. package/dist/{chunk-Z4NQ3TED.js.map → chunk-KCSIX7CY.js.map} +1 -1
  83. package/dist/{chunk-DN2KI4BU.js → chunk-KDLX5AA7.js} +3 -3
  84. package/dist/{chunk-DN2KI4BU.js.map → chunk-KDLX5AA7.js.map} +1 -1
  85. package/dist/{chunk-WFA2GVZJ.js → chunk-MF5KQ4PS.js} +3 -3
  86. package/dist/{chunk-WFA2GVZJ.js.map → chunk-MF5KQ4PS.js.map} +1 -1
  87. package/dist/{chunk-YXNNNP57.js → chunk-MNG7N6M2.js} +4 -4
  88. package/dist/{chunk-YXNNNP57.js.map → chunk-MNG7N6M2.js.map} +1 -1
  89. package/dist/chunk-MSFQDELO.cjs +482 -0
  90. package/dist/chunk-MSFQDELO.cjs.map +1 -0
  91. package/dist/{chunk-T74Q3MCZ.cjs → chunk-MUDEL7UL.cjs} +25 -884
  92. package/dist/chunk-MUDEL7UL.cjs.map +1 -0
  93. package/dist/{chunk-KSHKTOY2.js → chunk-NUSBINUM.js} +3 -3
  94. package/dist/chunk-NUSBINUM.js.map +1 -0
  95. package/dist/{chunk-EYKISBDO.cjs → chunk-OALEDG67.cjs} +5 -5
  96. package/dist/{chunk-EYKISBDO.cjs.map → chunk-OALEDG67.cjs.map} +1 -1
  97. package/dist/{chunk-COCGRJLA.cjs → chunk-OFV3PRF2.cjs} +7 -7
  98. package/dist/{chunk-COCGRJLA.cjs.map → chunk-OFV3PRF2.cjs.map} +1 -1
  99. package/dist/chunk-OOU4QLRK.cjs +319 -0
  100. package/dist/chunk-OOU4QLRK.cjs.map +1 -0
  101. package/dist/chunk-OU3RGQFX.cjs +136 -0
  102. package/dist/chunk-OU3RGQFX.cjs.map +1 -0
  103. package/dist/{chunk-3PCBYOIZ.js → chunk-P6RIBIVN.js} +38 -7
  104. package/dist/chunk-P6RIBIVN.js.map +1 -0
  105. package/dist/{chunk-LXTOOUEN.cjs → chunk-Q7CQYYZW.cjs} +5 -5
  106. package/dist/{chunk-LXTOOUEN.cjs.map → chunk-Q7CQYYZW.cjs.map} +1 -1
  107. package/dist/{chunk-CROTH2BS.js → chunk-QKR5LWDO.js} +9 -40
  108. package/dist/{chunk-CROTH2BS.js.map → chunk-QKR5LWDO.js.map} +1 -1
  109. package/dist/chunk-REH7PX3N.cjs +145 -0
  110. package/dist/chunk-REH7PX3N.cjs.map +1 -0
  111. package/dist/chunk-RQKWYKZY.js +127 -0
  112. package/dist/chunk-RQKWYKZY.js.map +1 -0
  113. package/dist/{chunk-U6JQ4KMX.cjs → chunk-SN2GZ4ZM.cjs} +29 -2
  114. package/dist/chunk-SN2GZ4ZM.cjs.map +1 -0
  115. package/dist/{chunk-R6VCPDPF.js → chunk-SZSJGZSO.js} +156 -6
  116. package/dist/chunk-SZSJGZSO.js.map +1 -0
  117. package/dist/{chunk-US3S4DCB.js → chunk-TF7HN5EU.js} +10 -5
  118. package/dist/chunk-TF7HN5EU.js.map +1 -0
  119. package/dist/{chunk-YKQ2DPIP.js → chunk-VF5EUAIV.js} +3 -3
  120. package/dist/{chunk-YKQ2DPIP.js.map → chunk-VF5EUAIV.js.map} +1 -1
  121. package/dist/{chunk-KMZWKSKO.cjs → chunk-VZPFYZZU.cjs} +4 -4
  122. package/dist/{chunk-KMZWKSKO.cjs.map → chunk-VZPFYZZU.cjs.map} +1 -1
  123. package/dist/{chunk-HUJF2XM2.js → chunk-W7CWGURO.js} +28 -873
  124. package/dist/chunk-W7CWGURO.js.map +1 -0
  125. package/dist/{chunk-ZLEYLCE4.js → chunk-WK6FVIF7.js} +6 -156
  126. package/dist/chunk-WK6FVIF7.js.map +1 -0
  127. package/dist/chunk-WV4TD2HZ.cjs +1785 -0
  128. package/dist/chunk-WV4TD2HZ.cjs.map +1 -0
  129. package/dist/{chunk-COA3S3CZ.js → chunk-XI37A7HH.js} +4 -4
  130. package/dist/{chunk-COA3S3CZ.js.map → chunk-XI37A7HH.js.map} +1 -1
  131. package/dist/{chunk-LGBAZD37.js → chunk-XRL4R2TT.js} +7 -139
  132. package/dist/chunk-XRL4R2TT.js.map +1 -0
  133. package/dist/{chunk-4JNKXOFZ.cjs → chunk-YBJ4QGNH.cjs} +11 -11
  134. package/dist/{chunk-4JNKXOFZ.cjs.map → chunk-YBJ4QGNH.cjs.map} +1 -1
  135. package/dist/{chunk-GFOEWPAP.cjs → chunk-YF3QUHKN.cjs} +49 -12
  136. package/dist/chunk-YF3QUHKN.cjs.map +1 -0
  137. package/dist/{chunk-H4D7WKDY.js → chunk-YNMO3DSR.js} +3 -3
  138. package/dist/{chunk-H4D7WKDY.js.map → chunk-YNMO3DSR.js.map} +1 -1
  139. package/dist/citations/index.cjs +10 -10
  140. package/dist/citations/index.js +2 -2
  141. package/dist/collaboration/index.cjs +77 -77
  142. package/dist/collaboration/index.js +2 -2
  143. package/dist/connect/docx.cjs +14 -14
  144. package/dist/connect/docx.js +10 -10
  145. package/dist/connect/index.cjs +2820 -1043
  146. package/dist/connect/index.cjs.map +1 -1
  147. package/dist/connect/index.d.ts +4 -0
  148. package/dist/connect/index.js +2216 -504
  149. package/dist/connect/index.js.map +1 -1
  150. package/dist/connect/viewer.cjs +68 -72
  151. package/dist/connect/viewer.cjs.map +1 -1
  152. package/dist/connect/viewer.js +11 -15
  153. package/dist/connect/viewer.js.map +1 -1
  154. package/dist/connection/ConnectionProvider.d.ts +7 -0
  155. package/dist/connection/files/DocumentSyncGlyph.d.ts +28 -0
  156. package/dist/connection/files/explorer/ConnectedFilesExplorer.d.ts +56 -0
  157. package/dist/connection/files/explorer/FileTiles.d.ts +87 -0
  158. package/dist/connection/files/index.d.ts +5 -0
  159. package/dist/connection/files/store.d.ts +27 -0
  160. package/dist/connection/files/support.d.ts +38 -0
  161. package/dist/connection/projects/ConnectedProjectsPanel.d.ts +34 -0
  162. package/dist/connection/projects/index.d.ts +1 -0
  163. package/dist/connection/workspace-dashboard/ConnectedWorkspaceDashboard.d.ts +37 -0
  164. package/dist/connection/workspace-dashboard/dashboard-rows.d.ts +42 -0
  165. package/dist/connection/workspace-dashboard/index.d.ts +1 -0
  166. package/dist/connection/workspace-list/ConnectedWorkspaceList.d.ts +37 -0
  167. package/dist/connection/workspace-list/WorkspaceCardsView.d.ts +15 -0
  168. package/dist/connection/workspace-list/WorkspaceFilterMenu.d.ts +4 -0
  169. package/dist/connection/workspace-list/WorkspaceTableView.d.ts +13 -0
  170. package/dist/connection/workspace-list/index.d.ts +5 -0
  171. package/dist/connection/workspace-list/projectBilling.d.ts +21 -0
  172. package/dist/connection/workspace-list/useConnectedWorkspaceList.d.ts +251 -0
  173. package/dist/connection/workspace-list/workspaceTable.d.ts +58 -0
  174. package/dist/connection/workspace-settings/ConnectedWorkspaceMembers.d.ts +26 -0
  175. package/dist/connection/workspace-settings/ConnectedWorkspaceSettings.d.ts +7 -9
  176. package/dist/connection/workspace-settings/index.d.ts +2 -1
  177. package/dist/connection/workspace-settings/useConnectedWorkspaceSettings.d.ts +0 -1
  178. package/dist/facts/index.cjs +3 -3
  179. package/dist/facts/index.js +2 -2
  180. package/dist/files/DocStatusIcon.d.ts +5 -4
  181. package/dist/files/FailedStageIcon.d.ts +26 -0
  182. package/dist/files/folders/FolderProviderIcon.d.ts +29 -0
  183. package/dist/files/folders/folderPaths.d.ts +86 -0
  184. package/dist/files/folders/index.d.ts +2 -0
  185. package/dist/files/index.cjs +328 -240
  186. package/dist/files/index.d.ts +5 -0
  187. package/dist/files/index.js +4 -4
  188. package/dist/files/permissions.d.ts +28 -0
  189. package/dist/files/recently-deleted.d.ts +7 -0
  190. package/dist/files/visibility.d.ts +31 -0
  191. package/dist/home/index.cjs +119 -459
  192. package/dist/home/index.cjs.map +1 -1
  193. package/dist/home/index.js +13 -419
  194. package/dist/home/index.js.map +1 -1
  195. package/dist/index.cjs +480 -480
  196. package/dist/index.js +16 -16
  197. package/dist/provider/BlocksProvider.d.ts +9 -1
  198. package/dist/retrieval/index.cjs +4 -4
  199. package/dist/retrieval/index.js +2 -2
  200. package/dist/settings/index.cjs +169 -165
  201. package/dist/settings/index.d.ts +1 -0
  202. package/dist/settings/index.js +2 -2
  203. package/dist/settings/tri-state-filters.d.ts +13 -0
  204. package/dist/shell/index.cjs +44 -44
  205. package/dist/shell/index.js +3 -3
  206. package/dist/site/index.cjs +5 -5
  207. package/dist/site/index.js +1 -1
  208. package/dist/studio/index.cjs +14 -14
  209. package/dist/studio/index.js +6 -6
  210. package/dist/workflow-canvas/index.cjs +27 -27
  211. package/dist/workflow-canvas/index.js +9 -9
  212. package/dist/workspaces/index.cjs +110 -369
  213. package/dist/workspaces/index.cjs.map +1 -1
  214. package/dist/workspaces/index.d.ts +2 -0
  215. package/dist/workspaces/index.js +12 -350
  216. package/dist/workspaces/index.js.map +1 -1
  217. package/dist/workspaces/workspace-groups.d.ts +90 -0
  218. package/dist/workspaces/workspace-roles.d.ts +11 -0
  219. package/node_modules/@arbidocs/coedit/package.json +1 -1
  220. package/package.json +6 -5
  221. package/dist/ConnectedStreamedWordArtifact-QW74LKHN.cjs.map +0 -1
  222. package/dist/chunk-3PCBYOIZ.js.map +0 -1
  223. package/dist/chunk-4236BRZK.js.map +0 -1
  224. package/dist/chunk-CU2O32Z4.cjs.map +0 -1
  225. package/dist/chunk-EV7W64B6.js +0 -134
  226. package/dist/chunk-EV7W64B6.js.map +0 -1
  227. package/dist/chunk-GFNELPDP.cjs.map +0 -1
  228. package/dist/chunk-GFOEWPAP.cjs.map +0 -1
  229. package/dist/chunk-GRGS5M6O.cjs.map +0 -1
  230. package/dist/chunk-HUJF2XM2.js.map +0 -1
  231. package/dist/chunk-JGOST4IL.js +0 -648
  232. package/dist/chunk-JGOST4IL.js.map +0 -1
  233. package/dist/chunk-KPZZ5FHE.cjs.map +0 -1
  234. package/dist/chunk-KSHKTOY2.js.map +0 -1
  235. package/dist/chunk-LGBAZD37.js.map +0 -1
  236. package/dist/chunk-R6VCPDPF.js.map +0 -1
  237. package/dist/chunk-RQ2Y7USX.cjs.map +0 -1
  238. package/dist/chunk-RXK3XP62.cjs +0 -144
  239. package/dist/chunk-RXK3XP62.cjs.map +0 -1
  240. package/dist/chunk-SMN32BQ3.cjs.map +0 -1
  241. package/dist/chunk-T74Q3MCZ.cjs.map +0 -1
  242. package/dist/chunk-TBEVGWY3.js.map +0 -1
  243. package/dist/chunk-U6JQ4KMX.cjs.map +0 -1
  244. package/dist/chunk-US3S4DCB.js.map +0 -1
  245. package/dist/chunk-XZIYRKLW.cjs.map +0 -1
  246. package/dist/chunk-YAEXSCUW.cjs +0 -677
  247. package/dist/chunk-YAEXSCUW.cjs.map +0 -1
  248. package/dist/chunk-ZLEYLCE4.js.map +0 -1
@@ -0,0 +1,148 @@
1
+ "use client";
2
+ // src/workspaces/workspace-type.ts
3
+ function getHumanUserCount(users) {
4
+ if (!users) return 0;
5
+ return users.filter((u) => !u.agent_ext_id).length;
6
+ }
7
+ function getWorkspaceTypeInfo(isPublic, userCount) {
8
+ if (isPublic) {
9
+ return { type: "Common", variant: "gray" };
10
+ }
11
+ if (userCount > 1) {
12
+ return { type: "Group", variant: "secondary" };
13
+ }
14
+ return { type: "Individual", variant: "primary" };
15
+ }
16
+ function getVariantBgClass(variant) {
17
+ switch (variant) {
18
+ case "primary":
19
+ return "bg-primary";
20
+ case "secondary":
21
+ return "bg-secondary";
22
+ case "gray":
23
+ return "bg-gray-600";
24
+ }
25
+ }
26
+ function getVariantBorderClass(variant) {
27
+ switch (variant) {
28
+ case "primary":
29
+ return "border-primary";
30
+ case "secondary":
31
+ return "border-secondary";
32
+ case "gray":
33
+ return "border-gray-600";
34
+ }
35
+ }
36
+
37
+ // src/workspaces/workspace-groups.ts
38
+ var NO_PROJECT_GROUP_KEY = "__none__";
39
+ var isListedWorkspace = (workspace) => workspace.workspace_type !== "skills";
40
+ var byPinThenName = (pinned) => (a, b) => {
41
+ const aPinned = pinned.has(a.external_id);
42
+ const bPinned = pinned.has(b.external_id);
43
+ if (aPinned !== bPinned) return aPinned ? -1 : 1;
44
+ return a.name.localeCompare(b.name);
45
+ };
46
+ function groupWorkspacesByProject(workspaces, {
47
+ selfId,
48
+ pinned = /* @__PURE__ */ new Set(),
49
+ projects = [],
50
+ workspacesLabel = "Workspaces"
51
+ }) {
52
+ const byProject = /* @__PURE__ */ new Map();
53
+ for (const workspace of workspaces) {
54
+ const key = workspace.project_ext_id ?? null;
55
+ const list = byProject.get(key);
56
+ if (list) list.push(workspace);
57
+ else byProject.set(key, [workspace]);
58
+ }
59
+ const projectById = new Map(projects.map((p) => [p.external_id, p]));
60
+ const groups = [];
61
+ for (const [projectExtId, list] of byProject) {
62
+ const first = list[0];
63
+ const isOwned = !!projectExtId && first.project_owner_ext_id === selfId;
64
+ const isCommon = !projectExtId && !list.some((w) => w.is_member);
65
+ const name = projectExtId ? projectById.get(projectExtId)?.name || first.project_name || null : null;
66
+ groups.push({
67
+ key: projectExtId ?? NO_PROJECT_GROUP_KEY,
68
+ projectExtId,
69
+ title: projectExtId ? name || (isOwned ? "Personal" : "Unnamed project") : isCommon ? "Common" : workspacesLabel,
70
+ isOwned,
71
+ isCommon,
72
+ workspaces: [...list].sort(byPinThenName(pinned))
73
+ });
74
+ }
75
+ groups.sort((a, b) => {
76
+ if (!a.projectExtId !== !b.projectExtId) return a.projectExtId ? -1 : 1;
77
+ if (a.isOwned !== b.isOwned) return a.isOwned ? -1 : 1;
78
+ return a.title.localeCompare(b.title);
79
+ });
80
+ const empty = projects.filter((p) => p.created_by === selfId && !byProject.has(p.external_id)).map((p) => ({
81
+ key: p.external_id,
82
+ projectExtId: p.external_id,
83
+ title: p.name || "Personal",
84
+ isOwned: true,
85
+ isCommon: false,
86
+ workspaces: []
87
+ }));
88
+ const ownedCount = groups.filter((g) => g.isOwned).length;
89
+ groups.splice(ownedCount, 0, ...empty);
90
+ return groups;
91
+ }
92
+ function byRecentUpdate(a, b) {
93
+ const time = (w) => {
94
+ const t = Date.parse(w.updated_at ?? "");
95
+ return Number.isNaN(t) ? 0 : t;
96
+ };
97
+ return time(b) - time(a);
98
+ }
99
+ var workspaceDocumentCount = (w) => (w.shared_document_count ?? 0) + (w.private_document_count ?? 0);
100
+ var workspaceConversationCount = (w) => (w.shared_conversation_count ?? 0) + (w.private_conversation_count ?? 0);
101
+ var isAgentAccount = (user) => user.external_id.startsWith("agt-");
102
+ function workspaceGroupStats(workspaces) {
103
+ let documents = 0;
104
+ let conversations = 0;
105
+ let updatedAt = "";
106
+ const members = /* @__PURE__ */ new Set();
107
+ for (const workspace of workspaces) {
108
+ documents += workspaceDocumentCount(workspace);
109
+ conversations += workspaceConversationCount(workspace);
110
+ const at = workspace.updated_at || workspace.created_at || "";
111
+ if (at > updatedAt) updatedAt = at;
112
+ for (const member of workspace.users ?? []) {
113
+ if (isAgentAccount(member.user)) continue;
114
+ members.add(member.user.external_id || member.user.email);
115
+ }
116
+ }
117
+ return {
118
+ workspaces: workspaces.length,
119
+ documents,
120
+ conversations,
121
+ members: members.size,
122
+ updatedAt
123
+ };
124
+ }
125
+ var WORKSPACE_CATEGORY_FILTERS = [
126
+ { id: "owned", label: "Owned by me" },
127
+ { id: "pinned", label: "Pinned" },
128
+ { id: "individual", label: "Individual" },
129
+ { id: "group", label: "Group" },
130
+ { id: "common", label: "Common" }
131
+ ];
132
+ var projectFilterId = (projectExtId) => `project:${projectExtId}`;
133
+ function workspaceFilterAttributes(workspace, { selfId, pinned }) {
134
+ const { type } = getWorkspaceTypeInfo(workspace.is_public, getHumanUserCount(workspace.users));
135
+ const attributes = {
136
+ individual: type === "Individual",
137
+ group: type === "Group",
138
+ common: type === "Common",
139
+ pinned: pinned.has(workspace.external_id),
140
+ owned: workspace.created_by_ext_id === selfId
141
+ };
142
+ if (workspace.project_ext_id) attributes[projectFilterId(workspace.project_ext_id)] = true;
143
+ return attributes;
144
+ }
145
+
146
+ export { NO_PROJECT_GROUP_KEY, WORKSPACE_CATEGORY_FILTERS, byRecentUpdate, getHumanUserCount, getVariantBgClass, getVariantBorderClass, getWorkspaceTypeInfo, groupWorkspacesByProject, isAgentAccount, isListedWorkspace, projectFilterId, workspaceConversationCount, workspaceDocumentCount, workspaceFilterAttributes, workspaceGroupStats };
147
+ //# sourceMappingURL=chunk-BTF4AZMG.js.map
148
+ //# sourceMappingURL=chunk-BTF4AZMG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/workspaces/workspace-type.ts","../src/workspaces/workspace-groups.ts"],"names":[],"mappings":"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","file":"chunk-BTF4AZMG.js","sourcesContent":["/**\n * Workspace Type Utilities\n *\n * Helper functions for determining workspace type information.\n */\n\nexport type WorkspaceVariant = 'primary' | 'secondary' | 'gray'\n\n/**\n * Count non-agent users in a workspace.\n * Workspace users with agent_ext_id are agents and should not count\n * for determining workspace type (individual vs group).\n */\nexport function getHumanUserCount(users?: { agent_ext_id?: string | null }[]): number {\n if (!users) return 0\n return users.filter((u) => !u.agent_ext_id).length\n}\n\n/**\n * Helper to determine workspace type and variant\n */\nexport function getWorkspaceTypeInfo(\n isPublic: boolean,\n userCount: number\n): { type: string; variant: WorkspaceVariant } {\n if (isPublic) {\n return { type: 'Common', variant: 'gray' }\n }\n if (userCount > 1) {\n return { type: 'Group', variant: 'secondary' }\n }\n return { type: 'Individual', variant: 'primary' }\n}\n\n/**\n * Returns the Tailwind background color class for a workspace type variant\n */\nexport function getVariantBgClass(variant: WorkspaceVariant): string {\n switch (variant) {\n case 'primary':\n return 'bg-primary'\n case 'secondary':\n return 'bg-secondary'\n case 'gray':\n return 'bg-gray-600'\n }\n}\n\n/**\n * Returns the Tailwind border color class for a workspace type variant\n */\nexport function getVariantBorderClass(variant: WorkspaceVariant): string {\n switch (variant) {\n case 'primary':\n return 'border-primary'\n case 'secondary':\n return 'border-secondary'\n case 'gray':\n return 'border-gray-600'\n }\n}\n","/**\n * The user's workspaces grouped by project, as the workspace list shows them (cards and table\n * alike): one group per project, the user's own projects first (an owned project with no\n * workspace yet still gets its group, to invite the first one), other people's projects by name,\n * and the workspaces with no visible project last. Plus the tri-state filter over the list\n * (projects and workspace categories) and the totals a group's heading shows.\n *\n * Pure: a host maps nothing; these read the API's workspace and project records as they come.\n */\nimport type { components } from '@arbidocs/client'\nimport { getHumanUserCount, getWorkspaceTypeInfo } from './workspace-type'\n\nexport type GroupedWorkspace = components['schemas']['WorkspaceResponse']\ntype Project = Pick<\n components['schemas']['ProjectResponse'],\n 'external_id' | 'name' | 'subscription' | 'created_by'\n>\n\n/** Group key of the workspaces that have no visible project. */\nexport const NO_PROJECT_GROUP_KEY = '__none__'\n\nexport interface WorkspaceProjectGroup {\n /** Stable key (the project's id, or `NO_PROJECT_GROUP_KEY`): collapse state and row ids. */\n key: string\n projectExtId: string | null\n /** The project's name with the fallbacks applied (\"Personal\", \"Common\", \"Workspaces\"…). */\n title: string\n /** The user owns the project. */\n isOwned: boolean\n /**\n * The no-project group of public workspaces the user is not a member of (\"Common\"): shared\n * with everyone, so it starts collapsed.\n */\n isCommon: boolean\n /** Pinned first, then by name. */\n workspaces: GroupedWorkspace[]\n}\n\nexport interface GroupWorkspacesOptions {\n /** The signed-in user (`usr-…`): whose projects and workspaces are \"own\". */\n selfId: string | undefined\n /** Pinned workspace ids: first within their group. */\n pinned?: ReadonlySet<string>\n /** The user's projects: fresher names, and a group for each owned project with no workspace. */\n projects?: readonly Project[]\n /** The plural word for workspaces (the own no-project group's title). */\n workspacesLabel?: string\n}\n\n/** The skills marketplace is a system workspace: reached through the skills UI, never listed. */\nexport const isListedWorkspace = (workspace: Pick<GroupedWorkspace, 'workspace_type'>): boolean =>\n workspace.workspace_type !== 'skills'\n\nconst byPinThenName =\n (pinned: ReadonlySet<string>) => (a: GroupedWorkspace, b: GroupedWorkspace) => {\n const aPinned = pinned.has(a.external_id)\n const bPinned = pinned.has(b.external_id)\n if (aPinned !== bPinned) return aPinned ? -1 : 1\n return a.name.localeCompare(b.name)\n }\n\n/**\n * Group `workspaces` (already filtered) by project. The order: own projects (by name, then the\n * own projects with no workspace), other people's projects by name, the no-project group last.\n */\nexport function groupWorkspacesByProject(\n workspaces: readonly GroupedWorkspace[],\n {\n selfId,\n pinned = new Set(),\n projects = [],\n workspacesLabel = 'Workspaces',\n }: GroupWorkspacesOptions\n): WorkspaceProjectGroup[] {\n const byProject = new Map<string | null, GroupedWorkspace[]>()\n for (const workspace of workspaces) {\n const key = workspace.project_ext_id ?? null\n const list = byProject.get(key)\n if (list) list.push(workspace)\n else byProject.set(key, [workspace])\n }\n\n const projectById = new Map(projects.map((p) => [p.external_id, p]))\n const groups: WorkspaceProjectGroup[] = []\n for (const [projectExtId, list] of byProject) {\n const first = list[0]\n const isOwned = !!projectExtId && first.project_owner_ext_id === selfId\n const isCommon = !projectExtId && !list.some((w) => w.is_member)\n const name = projectExtId\n ? projectById.get(projectExtId)?.name || first.project_name || null\n : null\n groups.push({\n key: projectExtId ?? NO_PROJECT_GROUP_KEY,\n projectExtId,\n title: projectExtId\n ? name || (isOwned ? 'Personal' : 'Unnamed project')\n : isCommon\n ? 'Common'\n : workspacesLabel,\n isOwned,\n isCommon,\n workspaces: [...list].sort(byPinThenName(pinned)),\n })\n }\n\n groups.sort((a, b) => {\n if (!a.projectExtId !== !b.projectExtId) return a.projectExtId ? -1 : 1\n if (a.isOwned !== b.isOwned) return a.isOwned ? -1 : 1\n return a.title.localeCompare(b.title)\n })\n\n // An own project with no workspace yet keeps its group (after the own projects with some).\n const empty = projects\n .filter((p) => p.created_by === selfId && !byProject.has(p.external_id))\n .map<WorkspaceProjectGroup>((p) => ({\n key: p.external_id,\n projectExtId: p.external_id,\n title: p.name || 'Personal',\n isOwned: true,\n isCommon: false,\n workspaces: [],\n }))\n const ownedCount = groups.filter((g) => g.isOwned).length\n groups.splice(ownedCount, 0, ...empty)\n return groups\n}\n\n/** Most recently updated first (the cards' order within a group). */\nexport function byRecentUpdate(a: GroupedWorkspace, b: GroupedWorkspace): number {\n const time = (w: GroupedWorkspace) => {\n const t = Date.parse(w.updated_at ?? '')\n return Number.isNaN(t) ? 0 : t\n }\n return time(b) - time(a)\n}\n\n/** What a group's heading reports about its workspaces: sums, and distinct people (no agents). */\nexport interface WorkspaceGroupStats {\n workspaces: number\n documents: number\n conversations: number\n members: number\n /** The most recent activity (ISO), `''` when none. */\n updatedAt: string\n}\n\nexport const workspaceDocumentCount = (w: GroupedWorkspace): number =>\n (w.shared_document_count ?? 0) + (w.private_document_count ?? 0)\n\nexport const workspaceConversationCount = (w: GroupedWorkspace): number =>\n (w.shared_conversation_count ?? 0) + (w.private_conversation_count ?? 0)\n\n/** An agent account (`agt-…`): kept out of member counts and faces. */\nexport const isAgentAccount = (user: { external_id: string }): boolean =>\n user.external_id.startsWith('agt-')\n\nexport function workspaceGroupStats(workspaces: readonly GroupedWorkspace[]): WorkspaceGroupStats {\n let documents = 0\n let conversations = 0\n let updatedAt = ''\n const members = new Set<string>()\n for (const workspace of workspaces) {\n documents += workspaceDocumentCount(workspace)\n conversations += workspaceConversationCount(workspace)\n const at = workspace.updated_at || workspace.created_at || ''\n if (at > updatedAt) updatedAt = at\n for (const member of workspace.users ?? []) {\n if (isAgentAccount(member.user)) continue\n members.add(member.user.external_id || member.user.email)\n }\n }\n return {\n workspaces: workspaces.length,\n documents,\n conversations,\n members: members.size,\n updatedAt,\n }\n}\n\n// ── Filtering ────────────────────────────────────────────────────────────────\n\n/** The category filters, in menu order. */\nexport const WORKSPACE_CATEGORY_FILTERS = [\n { id: 'owned', label: 'Owned by me' },\n { id: 'pinned', label: 'Pinned' },\n { id: 'individual', label: 'Individual' },\n { id: 'group', label: 'Group' },\n { id: 'common', label: 'Common' },\n] as const\n\n/** A project filter's id. */\nexport const projectFilterId = (projectExtId: string): string => `project:${projectExtId}`\n\n/** Which filters a workspace matches: its category, pinned, owned, and its project. */\nexport function workspaceFilterAttributes(\n workspace: GroupedWorkspace,\n { selfId, pinned }: { selfId: string | undefined; pinned: ReadonlySet<string> }\n): Record<string, boolean> {\n const { type } = getWorkspaceTypeInfo(workspace.is_public, getHumanUserCount(workspace.users))\n const attributes: Record<string, boolean> = {\n individual: type === 'Individual',\n group: type === 'Group',\n common: type === 'Common',\n pinned: pinned.has(workspace.external_id),\n owned: workspace.created_by_ext_id === selfId,\n }\n if (workspace.project_ext_id) attributes[projectFilterId(workspace.project_ext_id)] = true\n return attributes\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkQ4BY2CQQ_cjs = require('./chunk-Q4BY2CQQ.cjs');
4
+ var chunkCQCNU5KT_cjs = require('./chunk-CQCNU5KT.cjs');
5
5
  var chunkKUT2Y7JF_cjs = require('./chunk-KUT2Y7JF.cjs');
6
6
  var jsxRuntime = require('react/jsx-runtime');
7
7
 
@@ -9,10 +9,10 @@ function ConnectedStreamedWordArtifact({
9
9
  fontBaseUrl,
10
10
  ...props
11
11
  }) {
12
- const adapter = chunkQ4BY2CQQ_cjs.useConnectedNativeDocxAdapter(fontBaseUrl);
12
+ const adapter = chunkCQCNU5KT_cjs.useConnectedNativeDocxAdapter(fontBaseUrl);
13
13
  return /* @__PURE__ */ jsxRuntime.jsx(chunkKUT2Y7JF_cjs.StreamedWordArtifact, { ...props, adapter });
14
14
  }
15
15
 
16
16
  exports.ConnectedStreamedWordArtifact = ConnectedStreamedWordArtifact;
17
- //# sourceMappingURL=chunk-HALD6ZB5.cjs.map
18
- //# sourceMappingURL=chunk-HALD6ZB5.cjs.map
17
+ //# sourceMappingURL=chunk-C3SMTA3C.cjs.map
18
+ //# sourceMappingURL=chunk-C3SMTA3C.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/docx/ConnectedStreamedWordArtifact.tsx"],"names":["useConnectedNativeDocxAdapter","jsx","StreamedWordArtifact"],"mappings":";;;;;;AAMO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0E;AACxE,EAAA,MAAM,OAAA,GAAUA,gDAA8B,WAAW,CAAA;AACzD,EAAA,uBAAOC,cAAA,CAACC,sCAAA,EAAA,EAAsB,GAAG,KAAA,EAAO,OAAA,EAAkB,CAAA;AAC5D","file":"chunk-HALD6ZB5.cjs","sourcesContent":["import { useConnectedNativeDocxAdapter } from './ConnectedNativeDocxEditor'\nimport {\n StreamedWordArtifact,\n type StreamedWordArtifactProps,\n} from '../../docx/StreamedWordArtifact'\n\nexport function ConnectedStreamedWordArtifact({\n fontBaseUrl,\n ...props\n}: Omit<StreamedWordArtifactProps, 'adapter'> & { fontBaseUrl?: string }) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n return <StreamedWordArtifact {...props} adapter={adapter} />\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/docx/ConnectedStreamedWordArtifact.tsx"],"names":["useConnectedNativeDocxAdapter","jsx","StreamedWordArtifact"],"mappings":";;;;;;AAMO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0E;AACxE,EAAA,MAAM,OAAA,GAAUA,gDAA8B,WAAW,CAAA;AACzD,EAAA,uBAAOC,cAAA,CAACC,sCAAA,EAAA,EAAsB,GAAG,KAAA,EAAO,OAAA,EAAkB,CAAA;AAC5D","file":"chunk-C3SMTA3C.cjs","sourcesContent":["import { useConnectedNativeDocxAdapter } from './ConnectedNativeDocxEditor'\nimport {\n StreamedWordArtifact,\n type StreamedWordArtifactProps,\n} from '../../docx/StreamedWordArtifact'\n\nexport function ConnectedStreamedWordArtifact({\n fontBaseUrl,\n ...props\n}: Omit<StreamedWordArtifactProps, 'adapter'> & { fontBaseUrl?: string }) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n return <StreamedWordArtifact {...props} adapter={adapter} />\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkGFNELPDP_cjs = require('./chunk-GFNELPDP.cjs');
4
+ var chunkFM3IRQJW_cjs = require('./chunk-FM3IRQJW.cjs');
5
5
  var react = require('react');
6
6
  var react$1 = require('@arbidocs/react');
7
7
  var jsxRuntime = require('react/jsx-runtime');
@@ -26,7 +26,7 @@ function useList(hosted, own) {
26
26
  );
27
27
  }
28
28
  function useConnectedDocuments() {
29
- const { workspaceId } = chunkGFNELPDP_cjs.useConnectedWorkspace();
29
+ const { workspaceId } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
30
30
  const { data, isFetched } = react$1.useDocuments(workspaceId);
31
31
  return react.useMemo(
32
32
  () => ({ data: data ?? EMPTY, loaded: isFetched }),
@@ -35,13 +35,13 @@ function useConnectedDocuments() {
35
35
  }
36
36
  function useConnectedTags() {
37
37
  const hosted = react.useContext(WorkspaceDataContext).tags;
38
- const { workspaceId } = chunkGFNELPDP_cjs.useConnectedWorkspace();
38
+ const { workspaceId } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
39
39
  const own = react$1.useTags(workspaceId ?? void 0, { enabled: !hosted });
40
40
  return useList(hosted, own);
41
41
  }
42
42
  function useConnectedConversations(options) {
43
43
  const hosted = react.useContext(WorkspaceDataContext).conversations;
44
- const { workspaceId } = chunkGFNELPDP_cjs.useConnectedWorkspace();
44
+ const { workspaceId } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
45
45
  const own = react$1.useConversations(workspaceId ?? void 0, { enabled: !hosted, live: options?.live });
46
46
  return useList(hosted, own);
47
47
  }
@@ -50,5 +50,5 @@ exports.ConnectedWorkspaceDataProvider = ConnectedWorkspaceDataProvider;
50
50
  exports.useConnectedConversations = useConnectedConversations;
51
51
  exports.useConnectedDocuments = useConnectedDocuments;
52
52
  exports.useConnectedTags = useConnectedTags;
53
- //# sourceMappingURL=chunk-GAYMJWTC.cjs.map
54
- //# sourceMappingURL=chunk-GAYMJWTC.cjs.map
53
+ //# sourceMappingURL=chunk-CB4TIDEX.cjs.map
54
+ //# sourceMappingURL=chunk-CB4TIDEX.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/workspaceData.tsx"],"names":["createContext","useMemo","jsx","useConnectedWorkspace","useDocuments","useContext","useTags","useConversations"],"mappings":";;;;;;;AA+BA,IAAM,oBAAA,GAAuBA,mBAAA,CAAsC,EAAE,CAAA;AAE9D,SAAS,8BAAA,CAA+B;AAAA,EAC7C,IAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAAqD;AACnD,EAAA,MAAM,KAAA,GAAQC,aAAA,CAAQ,OAAO,EAAE,IAAA,EAAM,eAAc,CAAA,EAAI,CAAC,IAAA,EAAM,aAAa,CAAC,CAAA;AAC5E,EAAA,uBAAOC,cAAA,CAAC,oBAAA,CAAqB,QAAA,EAArB,EAA8B,OAAe,QAAA,EAAS,CAAA;AAChE;AASA,IAAM,QAAiB,EAAC;AAExB,SAAS,OAAA,CACP,QACA,GAAA,EACwB;AACxB,EAAA,MAAM,SAAS,MAAA,IAAU,GAAA;AACzB,EAAA,MAAM,IAAA,GAAO,OAAO,IAAA,IAAS,KAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,MAAA,GAAS,MAAA,CAAO,OAAA,GAAU,GAAA,CAAI,OAAA;AAC9C,EAAA,OAAOD,aAAA;AAAA,IACL,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,CAAO,WAAW,OAAA,EAAQ,CAAA;AAAA,IACjD,CAAC,IAAA,EAAM,MAAA,CAAO,SAAA,EAAW,OAAO;AAAA,GAClC;AACF;AAGO,SAAS,qBAAA,GAAgE;AAC9E,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIE,uCAAA,EAAsB;AAC9C,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAIC,qBAAa,WAAW,CAAA;AACpD,EAAA,OAAOH,aAAA;AAAA,IACL,OAAO,EAAE,IAAA,EAAM,IAAA,IAAS,KAAA,EAA+B,QAAQ,SAAA,EAAU,CAAA;AAAA,IACzE,CAAC,MAAM,SAAS;AAAA,GAClB;AACF;AAGO,SAAS,gBAAA,GAAsD;AACpE,EAAA,MAAM,MAAA,GAASI,gBAAA,CAAW,oBAAoB,CAAA,CAAE,IAAA;AAChD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIF,uCAAA,EAAsB;AAC9C,EAAA,MAAM,GAAA,GAAMG,gBAAQ,WAAA,IAAe,MAAA,EAAW,EAAE,OAAA,EAAS,CAAC,QAAQ,CAAA;AAClE,EAAA,OAAO,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC5B;AAMO,SAAS,0BAA0B,OAAA,EAEK;AAC7C,EAAA,MAAM,MAAA,GAASD,gBAAA,CAAW,oBAAoB,CAAA,CAAE,aAAA;AAChD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIF,uCAAA,EAAsB;AAC9C,EAAA,MAAM,GAAA,GAAMI,wBAAA,CAAiB,WAAA,IAAe,MAAA,EAAW,EAAE,OAAA,EAAS,CAAC,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,CAAA;AAChG,EAAA,OAAO,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC5B","file":"chunk-GAYMJWTC.cjs","sourcesContent":["/**\n * The open workspace's documents, tags and conversations for the connected kits. Each kit reads them\n * through the `@arbidocs/react` hooks; the documents always come from `useDocuments` (read once,\n * progressively, then patched in place by every write and event, so a kit never re-reads it). A\n * host that already keeps tags or conversations live in its own cache passes them once through\n * `ConnectedWorkspaceDataProvider`, so the kits show the same list and nothing is fetched twice.\n */\n\nimport { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport { useConversations, useDocuments, useTags } from '@arbidocs/react'\nimport { useConnectedWorkspace } from './ConnectionProvider'\n\nexport type ConnectedDocument = NonNullable<ReturnType<typeof useDocuments>['data']>[number]\nexport type ConnectedTag = NonNullable<ReturnType<typeof useTags>['data']>[number]\nexport type ConnectedConversation = NonNullable<ReturnType<typeof useConversations>['data']>[number]\n\n/**\n * A list the host keeps: its rows, whether it has arrived, and how to read it again (absent: the\n * host keeps it current itself, so a kit never re-reads it).\n */\nexport interface ConnectedList<T> {\n data: T[] | undefined\n isFetched: boolean\n refetch?: () => unknown\n}\n\nexport interface ConnectedWorkspaceData {\n tags?: ConnectedList<ConnectedTag>\n conversations?: ConnectedList<ConnectedConversation>\n}\n\nconst WorkspaceDataContext = createContext<ConnectedWorkspaceData>({})\n\nexport function ConnectedWorkspaceDataProvider({\n tags,\n conversations,\n children,\n}: ConnectedWorkspaceData & { children: ReactNode }) {\n const value = useMemo(() => ({ tags, conversations }), [tags, conversations])\n return <WorkspaceDataContext.Provider value={value}>{children}</WorkspaceDataContext.Provider>\n}\n\nexport interface ConnectedListResult<T> {\n data: T[]\n loaded: boolean\n /** Read the list again after a change made here; absent when the host keeps it current. */\n refetch?: () => unknown\n}\n\nconst EMPTY: never[] = []\n\nfunction useList<T>(\n hosted: ConnectedList<T> | undefined,\n own: { data?: T[]; isFetched: boolean; refetch: () => unknown }\n): ConnectedListResult<T> {\n const source = hosted ?? own\n const data = source.data ?? (EMPTY as T[])\n const refetch = hosted ? hosted.refetch : own.refetch\n return useMemo(\n () => ({ data, loaded: source.isFetched, refetch }),\n [data, source.isFetched, refetch]\n )\n}\n\n/** The open workspace's documents (`useDocuments`: the one list every host and kit shares). */\nexport function useConnectedDocuments(): ConnectedListResult<ConnectedDocument> {\n const { workspaceId } = useConnectedWorkspace()\n const { data, isFetched } = useDocuments(workspaceId)\n return useMemo(\n () => ({ data: data ?? (EMPTY as ConnectedDocument[]), loaded: isFetched }),\n [data, isFetched]\n )\n}\n\n/** The open workspace's tags: the host's list when it gives one, else read here. */\nexport function useConnectedTags(): ConnectedListResult<ConnectedTag> {\n const hosted = useContext(WorkspaceDataContext).tags\n const { workspaceId } = useConnectedWorkspace()\n const own = useTags(workspaceId ?? undefined, { enabled: !hosted })\n return useList(hosted, own)\n}\n\n/**\n * The open workspace's conversations (threads and tasks): the host's list when it gives one, else\n * read here (`live`: re-read while shown, as a run moves on by itself).\n */\nexport function useConnectedConversations(options?: {\n live?: boolean\n}): ConnectedListResult<ConnectedConversation> {\n const hosted = useContext(WorkspaceDataContext).conversations\n const { workspaceId } = useConnectedWorkspace()\n const own = useConversations(workspaceId ?? undefined, { enabled: !hosted, live: options?.live })\n return useList(hosted, own)\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/workspaceData.tsx"],"names":["createContext","useMemo","jsx","useConnectedWorkspace","useDocuments","useContext","useTags","useConversations"],"mappings":";;;;;;;AA+BA,IAAM,oBAAA,GAAuBA,mBAAA,CAAsC,EAAE,CAAA;AAE9D,SAAS,8BAAA,CAA+B;AAAA,EAC7C,IAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAAqD;AACnD,EAAA,MAAM,KAAA,GAAQC,aAAA,CAAQ,OAAO,EAAE,IAAA,EAAM,eAAc,CAAA,EAAI,CAAC,IAAA,EAAM,aAAa,CAAC,CAAA;AAC5E,EAAA,uBAAOC,cAAA,CAAC,oBAAA,CAAqB,QAAA,EAArB,EAA8B,OAAe,QAAA,EAAS,CAAA;AAChE;AASA,IAAM,QAAiB,EAAC;AAExB,SAAS,OAAA,CACP,QACA,GAAA,EACwB;AACxB,EAAA,MAAM,SAAS,MAAA,IAAU,GAAA;AACzB,EAAA,MAAM,IAAA,GAAO,OAAO,IAAA,IAAS,KAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,MAAA,GAAS,MAAA,CAAO,OAAA,GAAU,GAAA,CAAI,OAAA;AAC9C,EAAA,OAAOD,aAAA;AAAA,IACL,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,CAAO,WAAW,OAAA,EAAQ,CAAA;AAAA,IACjD,CAAC,IAAA,EAAM,MAAA,CAAO,SAAA,EAAW,OAAO;AAAA,GAClC;AACF;AAGO,SAAS,qBAAA,GAAgE;AAC9E,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIE,uCAAA,EAAsB;AAC9C,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAIC,qBAAa,WAAW,CAAA;AACpD,EAAA,OAAOH,aAAA;AAAA,IACL,OAAO,EAAE,IAAA,EAAM,IAAA,IAAS,KAAA,EAA+B,QAAQ,SAAA,EAAU,CAAA;AAAA,IACzE,CAAC,MAAM,SAAS;AAAA,GAClB;AACF;AAGO,SAAS,gBAAA,GAAsD;AACpE,EAAA,MAAM,MAAA,GAASI,gBAAA,CAAW,oBAAoB,CAAA,CAAE,IAAA;AAChD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIF,uCAAA,EAAsB;AAC9C,EAAA,MAAM,GAAA,GAAMG,gBAAQ,WAAA,IAAe,MAAA,EAAW,EAAE,OAAA,EAAS,CAAC,QAAQ,CAAA;AAClE,EAAA,OAAO,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC5B;AAMO,SAAS,0BAA0B,OAAA,EAEK;AAC7C,EAAA,MAAM,MAAA,GAASD,gBAAA,CAAW,oBAAoB,CAAA,CAAE,aAAA;AAChD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIF,uCAAA,EAAsB;AAC9C,EAAA,MAAM,GAAA,GAAMI,wBAAA,CAAiB,WAAA,IAAe,MAAA,EAAW,EAAE,OAAA,EAAS,CAAC,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,CAAA;AAChG,EAAA,OAAO,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC5B","file":"chunk-CB4TIDEX.cjs","sourcesContent":["/**\n * The open workspace's documents, tags and conversations for the connected kits. Each kit reads them\n * through the `@arbidocs/react` hooks; the documents always come from `useDocuments` (read once,\n * progressively, then patched in place by every write and event, so a kit never re-reads it). A\n * host that already keeps tags or conversations live in its own cache passes them once through\n * `ConnectedWorkspaceDataProvider`, so the kits show the same list and nothing is fetched twice.\n */\n\nimport { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport { useConversations, useDocuments, useTags } from '@arbidocs/react'\nimport { useConnectedWorkspace } from './ConnectionProvider'\n\nexport type ConnectedDocument = NonNullable<ReturnType<typeof useDocuments>['data']>[number]\nexport type ConnectedTag = NonNullable<ReturnType<typeof useTags>['data']>[number]\nexport type ConnectedConversation = NonNullable<ReturnType<typeof useConversations>['data']>[number]\n\n/**\n * A list the host keeps: its rows, whether it has arrived, and how to read it again (absent: the\n * host keeps it current itself, so a kit never re-reads it).\n */\nexport interface ConnectedList<T> {\n data: T[] | undefined\n isFetched: boolean\n refetch?: () => unknown\n}\n\nexport interface ConnectedWorkspaceData {\n tags?: ConnectedList<ConnectedTag>\n conversations?: ConnectedList<ConnectedConversation>\n}\n\nconst WorkspaceDataContext = createContext<ConnectedWorkspaceData>({})\n\nexport function ConnectedWorkspaceDataProvider({\n tags,\n conversations,\n children,\n}: ConnectedWorkspaceData & { children: ReactNode }) {\n const value = useMemo(() => ({ tags, conversations }), [tags, conversations])\n return <WorkspaceDataContext.Provider value={value}>{children}</WorkspaceDataContext.Provider>\n}\n\nexport interface ConnectedListResult<T> {\n data: T[]\n loaded: boolean\n /** Read the list again after a change made here; absent when the host keeps it current. */\n refetch?: () => unknown\n}\n\nconst EMPTY: never[] = []\n\nfunction useList<T>(\n hosted: ConnectedList<T> | undefined,\n own: { data?: T[]; isFetched: boolean; refetch: () => unknown }\n): ConnectedListResult<T> {\n const source = hosted ?? own\n const data = source.data ?? (EMPTY as T[])\n const refetch = hosted ? hosted.refetch : own.refetch\n return useMemo(\n () => ({ data, loaded: source.isFetched, refetch }),\n [data, source.isFetched, refetch]\n )\n}\n\n/** The open workspace's documents (`useDocuments`: the one list every host and kit shares). */\nexport function useConnectedDocuments(): ConnectedListResult<ConnectedDocument> {\n const { workspaceId } = useConnectedWorkspace()\n const { data, isFetched } = useDocuments(workspaceId)\n return useMemo(\n () => ({ data: data ?? (EMPTY as ConnectedDocument[]), loaded: isFetched }),\n [data, isFetched]\n )\n}\n\n/** The open workspace's tags: the host's list when it gives one, else read here. */\nexport function useConnectedTags(): ConnectedListResult<ConnectedTag> {\n const hosted = useContext(WorkspaceDataContext).tags\n const { workspaceId } = useConnectedWorkspace()\n const own = useTags(workspaceId ?? undefined, { enabled: !hosted })\n return useList(hosted, own)\n}\n\n/**\n * The open workspace's conversations (threads and tasks): the host's list when it gives one, else\n * read here (`live`: re-read while shown, as a run moves on by itself).\n */\nexport function useConnectedConversations(options?: {\n live?: boolean\n}): ConnectedListResult<ConnectedConversation> {\n const hosted = useContext(WorkspaceDataContext).conversations\n const { workspaceId } = useConnectedWorkspace()\n const own = useConversations(workspaceId ?? undefined, { enabled: !hosted, live: options?.live })\n return useList(hosted, own)\n}\n"]}
@@ -125,7 +125,8 @@ var defaultEnvironment = {
125
125
  openDocument: noop,
126
126
  openConversation: noop,
127
127
  openSettings: requestSettingsSection,
128
- openProject: noop
128
+ openProject: noop,
129
+ openWorkspace: noop
129
130
  };
130
131
  var BlocksContext = react.createContext(defaultEnvironment);
131
132
  function BlocksProvider({
@@ -139,7 +140,8 @@ function BlocksProvider({
139
140
  openDocument,
140
141
  openConversation,
141
142
  openSettings,
142
- openProject
143
+ openProject,
144
+ openWorkspace
143
145
  }) {
144
146
  const parent = react.useContext(BlocksContext);
145
147
  const value = react.useMemo(
@@ -156,7 +158,8 @@ function BlocksProvider({
156
158
  requestSettingsSection(section);
157
159
  openSettings(section);
158
160
  } : parent.openSettings,
159
- openProject: openProject ?? parent.openProject
161
+ openProject: openProject ?? parent.openProject,
162
+ openWorkspace: openWorkspace ?? parent.openWorkspace
160
163
  }),
161
164
  [
162
165
  parent,
@@ -169,7 +172,8 @@ function BlocksProvider({
169
172
  openDocument,
170
173
  openConversation,
171
174
  openSettings,
172
- openProject
175
+ openProject,
176
+ openWorkspace
173
177
  ]
174
178
  );
175
179
  return /* @__PURE__ */ jsxRuntime.jsx(BlocksContext.Provider, { value, children });
@@ -182,5 +186,5 @@ exports.BlocksProvider = BlocksProvider;
182
186
  exports.requestSettingsSection = requestSettingsSection;
183
187
  exports.useBlocksEnvironment = useBlocksEnvironment;
184
188
  exports.useRequestedSettingsSection = useRequestedSettingsSection;
185
- //# sourceMappingURL=chunk-KPZZ5FHE.cjs.map
186
- //# sourceMappingURL=chunk-KPZZ5FHE.cjs.map
189
+ //# sourceMappingURL=chunk-CNHUJRQ4.cjs.map
190
+ //# sourceMappingURL=chunk-CNHUJRQ4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/provider/dialogs.tsx","../src/provider/settings-section.ts","../src/provider/BlocksProvider.tsx"],"names":["request","useState","jsx","ModalScaffold","Info","AlertCircle","Button","useSyncExternalStore","notifyStore","createContext","useContext","useMemo"],"mappings":"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","file":"chunk-CNHUJRQ4.cjs","sourcesContent":["/**\n * Promise-based prompt dialogs — the blocks replacement for `window.confirm` / `window.alert`.\n * Each call mounts its own short-lived React root, so it works from any event handler with no\n * dialog host in the tree. Hosts reach these through `useBlocksEnvironment().confirm` / `.choose`\n * (the defaults), which lets an app swap in its own dialogs without touching callers.\n *\n * For a confirmation with a loading state, render the declarative {@link ConfirmDialog} instead.\n */\nimport { useState, type ReactElement } from 'react'\nimport { AlertCircle, Info } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { ModalScaffold } from '../settings/ModalScaffold'\n\ntype ChoiceVariant = 'default' | 'destructive' | 'outline'\n\nexport interface PromptChoice<T extends string> {\n label: string\n value: T\n variant?: ChoiceVariant\n}\n\n/** A dialog offering arbitrary choices (e.g. Overwrite / Skip / Cancel). */\nexport interface ChoiceRequest<T extends string> {\n message: string\n title?: string\n choices: PromptChoice<T>[]\n icon?: 'alert' | 'info'\n /** Dialog test id; each button is `${testId}-${value}-button`. Default `choice-modal`. */\n testId?: string\n}\n\n/**\n * `confirm` — Cancel / Confirm (destructive); `yesno` — No / Yes; `alert` — a single OK\n * (resolves true once acknowledged).\n */\nexport type ConfirmKind = 'confirm' | 'yesno' | 'alert'\n\nexport interface ConfirmRequest {\n message: string\n /** Default: \"Alert\" for `alert`, else \"Confirm\". */\n title?: string\n kind?: ConfirmKind\n}\n\n/** Close animation length before the root is unmounted. */\nconst UNMOUNT_DELAY_MS = 300\n\nfunction PromptDialog<T extends string>({\n request,\n onSettle,\n}: {\n request: ChoiceRequest<T>\n onSettle: (value: T | null) => void\n}): ReactElement {\n const [open, setOpen] = useState(true)\n const { message, title = 'Confirm', choices, icon = 'alert', testId = 'choice-modal' } = request\n const settle = (value: T | null) => {\n setOpen(false)\n onSettle(value)\n }\n return (\n <ModalScaffold\n open={open}\n onOpenChange={(next) => {\n if (!next) settle(null)\n }}\n title={title}\n icon={\n icon === 'info' ? (\n <Info className=\"h-5 w-5 text-blue-text\" aria-hidden=\"true\" />\n ) : (\n <AlertCircle className=\"h-5 w-5\" aria-hidden=\"true\" />\n )\n }\n description={<span className=\"whitespace-pre-line\">{message}</span>}\n showDescription\n testId={testId}\n >\n <ModalScaffold.Footer>\n {choices.map((choice) => (\n <Button\n key={choice.value}\n variant={choice.variant ?? 'default'}\n onClick={() => settle(choice.value)}\n data-testid={`${testId}-${choice.value.toLowerCase()}-button`}\n >\n {choice.label}\n </Button>\n ))}\n </ModalScaffold.Footer>\n </ModalScaffold>\n )\n}\n\n/** Show a choice dialog; resolves with the chosen `value`, or `null` when dismissed. */\nexport function choiceDialog<T extends string>(request: ChoiceRequest<T>): Promise<T | null> {\n if (typeof document === 'undefined') return Promise.resolve(null)\n return new Promise((resolve) => {\n const container = document.createElement('div')\n document.body.appendChild(container)\n let settled = false\n void import('react-dom/client').then(({ createRoot }) => {\n const root = createRoot(container)\n const onSettle = (value: T | null) => {\n if (settled) return\n settled = true\n resolve(value)\n setTimeout(() => {\n root.unmount()\n container.remove()\n }, UNMOUNT_DELAY_MS)\n }\n root.render(<PromptDialog request={request} onSettle={onSettle} />)\n })\n })\n}\n\nconst CONFIRM_CHOICES: Record<\n ConfirmKind,\n PromptChoice<'confirm' | 'cancel' | 'yes' | 'no' | 'ok'>[]\n> = {\n confirm: [\n { label: 'Cancel', value: 'cancel', variant: 'outline' },\n { label: 'Confirm', value: 'confirm', variant: 'destructive' },\n ],\n yesno: [\n { label: 'No', value: 'no', variant: 'outline' },\n { label: 'Yes', value: 'yes' },\n ],\n alert: [{ label: 'OK', value: 'ok' }],\n}\n\nconst CONFIRM_TEST_ID: Record<ConfirmKind, string> = {\n confirm: 'confirmation-modal',\n yesno: 'yes-no-modal',\n alert: 'alert-modal',\n}\n\n/** Show a confirmation; resolves true on Confirm / Yes / OK, false on cancel or dismissal. */\nexport async function confirmDialog(request: ConfirmRequest): Promise<boolean> {\n const kind = request.kind ?? 'confirm'\n const choice = await choiceDialog({\n message: request.message,\n title: request.title ?? (kind === 'alert' ? 'Alert' : 'Confirm'),\n choices: CONFIRM_CHOICES[kind],\n icon: kind === 'alert' ? 'info' : 'alert',\n testId: CONFIRM_TEST_ID[kind],\n })\n return choice === 'confirm' || choice === 'yes' || choice === 'ok'\n}\n","/**\n * The settings section asked for last, so `openSettings(section)` opens that section in every host.\n *\n * `BlocksEnvironment.openSettings` records the section here before the host shows its settings\n * (a panel, a route); a `ConnectedSettingsPage` without its own `section` prop opens at it and\n * follows every later request, even one for the section asked for before. A host that keeps the\n * open section itself (`section` + `onSectionChange`) routes `openSettings` to its own state.\n */\nimport { useSyncExternalStore } from 'react'\n\nexport interface SettingsSectionRequest {\n section: string\n /** Increases with every request, so asking again for the same section is a new request. */\n seq: number\n}\n\nlet request: SettingsSectionRequest | undefined\nconst listeners = new Set<() => void>()\n\n/** Ask for a settings section; no section asks for none (the page stays where it is). */\nexport function requestSettingsSection(section?: string): void {\n if (!section) return\n request = { section, seq: (request?.seq ?? 0) + 1 }\n listeners.forEach((listener) => listener())\n}\n\nfunction subscribe(listener: () => void): () => void {\n listeners.add(listener)\n return () => listeners.delete(listener)\n}\n\nconst snapshot = () => request\n\n/** The last settings-section request (`undefined` until there is one). */\nexport function useRequestedSettingsSection(): SettingsSectionRequest | undefined {\n return useSyncExternalStore(subscribe, snapshot, snapshot)\n}\n","import { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport {\n notify as notifyStore,\n type NotifyOptions,\n type NotifyVariant,\n} from '@arbidocs/react/shell'\nimport type { BlockLinkComponent } from '../components/blockLink'\nimport { choiceDialog, confirmDialog, type ChoiceRequest, type ConfirmRequest } from './dialogs'\nimport { requestSettingsSection } from './settings-section'\n\n/** What blocks need from the host's runtime configuration (the app's `config.json`). */\nexport interface BlocksRuntimeConfig {\n /** Origin of the ARBI API; `''` means the page's own origin. */\n apiBaseUrl: string\n /** The deployment's domain, e.g. `www.arbidocs.com` (deep links, key derivation, labels). */\n deploymentDomain: string\n}\n\nexport interface OpenDocumentOptions {\n /** 1-based page to scroll to. */\n page?: number\n /** Passage (chunk) to highlight. */\n passageId?: string\n}\n\n/**\n * The only way blocks reach the host app's environment. Blocks never import a router, a toast\n * library or an app store; the host injects what it has, and every field has a safe default so a\n * block renders correctly with no provider at all. A nested provider overrides only the fields\n * it is given and inherits the rest.\n */\nexport interface BlocksEnvironment {\n /** Router-aware link (keeps navigation in-SPA). Default: a plain `<a href>`. */\n linkComponent?: BlockLinkComponent\n /** Imperative navigation for buttons and keyboard shortcuts. Default: `window.location.assign`. */\n navigate: (href: string) => void\n /** Surface a transient message (and record it in the notification centre). Default: the shared\n * `@arbidocs/react` notify store, rendered by its `<Toaster/>`. */\n notify: (message: ReactNode, kind?: NotifyVariant, options?: NotifyOptions) => void\n /** Ask the user to confirm. Default: the blocks prompt dialog. */\n confirm: (request: ConfirmRequest) => Promise<boolean>\n /** Ask the user to pick one of several choices; `null` when dismissed. Default: the blocks\n * prompt dialog. */\n choose: <T extends string>(request: ChoiceRequest<T>) => Promise<T | null>\n /** Deployment configuration. Default: same-origin API on the page's own host. */\n runtimeConfig: BlocksRuntimeConfig\n /** Open a document (optionally at a page / passage) wherever the host shows documents.\n * Default: no-op. */\n openDocument: (documentId: string, options?: OpenDocumentOptions) => void\n /** Open a conversation thread, optionally scrolled to a message. Default: no-op. */\n openConversation: (conversationId: string, options?: { messageId?: string }) => void\n /**\n * Open the user's settings, optionally at a section (a `ConnectedSettingsPage` section id).\n * The section is always recorded for `ConnectedSettingsPage` first (`requestSettingsSection`);\n * the host's handler then shows its settings. Default: only that record.\n */\n openSettings: (section?: string) => void\n /** Open a project. Default: no-op. */\n openProject: (projectId: string) => void\n /**\n * Show a workspace (its own page). Under a `ConnectionProvider` the kits select it first\n * (`useConnectedWorkspace().openWorkspace`); a host that keeps its own session switches to it\n * here. `name` is for the host's messages. Default: no-op.\n */\n openWorkspace: (workspaceId: string, options?: { name?: string }) => void\n}\n\nconst noop = () => {}\n\nconst defaultEnvironment: BlocksEnvironment = {\n navigate: (href) => {\n if (typeof window !== 'undefined') window.location.assign(href)\n },\n notify: (message, kind = 'info', options) => {\n notifyStore[kind](message, options)\n },\n confirm: confirmDialog,\n choose: choiceDialog,\n runtimeConfig: {\n apiBaseUrl: '',\n deploymentDomain: typeof window !== 'undefined' ? window.location.host : '',\n },\n openDocument: noop,\n openConversation: noop,\n openSettings: requestSettingsSection,\n openProject: noop,\n openWorkspace: noop,\n}\n\nconst BlocksContext = createContext<BlocksEnvironment>(defaultEnvironment)\n\nexport interface BlocksProviderProps extends Partial<BlocksEnvironment> {\n children: ReactNode\n}\n\nexport function BlocksProvider({\n children,\n linkComponent,\n navigate,\n notify,\n confirm,\n choose,\n runtimeConfig,\n openDocument,\n openConversation,\n openSettings,\n openProject,\n openWorkspace,\n}: BlocksProviderProps) {\n const parent = useContext(BlocksContext)\n const value = useMemo<BlocksEnvironment>(\n () => ({\n linkComponent: linkComponent ?? parent.linkComponent,\n navigate: navigate ?? parent.navigate,\n notify: notify ?? parent.notify,\n confirm: confirm ?? parent.confirm,\n choose: choose ?? parent.choose,\n runtimeConfig: runtimeConfig ?? parent.runtimeConfig,\n openDocument: openDocument ?? parent.openDocument,\n openConversation: openConversation ?? parent.openConversation,\n openSettings: openSettings\n ? (section?: string) => {\n requestSettingsSection(section)\n openSettings(section)\n }\n : parent.openSettings,\n openProject: openProject ?? parent.openProject,\n openWorkspace: openWorkspace ?? parent.openWorkspace,\n }),\n [\n parent,\n linkComponent,\n navigate,\n notify,\n confirm,\n choose,\n runtimeConfig,\n openDocument,\n openConversation,\n openSettings,\n openProject,\n openWorkspace,\n ]\n )\n return <BlocksContext.Provider value={value}>{children}</BlocksContext.Provider>\n}\n\nexport function useBlocksEnvironment(): BlocksEnvironment {\n return useContext(BlocksContext)\n}\n"]}
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkGAYMJWTC_cjs = require('./chunk-GAYMJWTC.cjs');
5
- var chunkGFNELPDP_cjs = require('./chunk-GFNELPDP.cjs');
4
+ var chunkCB4TIDEX_cjs = require('./chunk-CB4TIDEX.cjs');
5
+ var chunkFM3IRQJW_cjs = require('./chunk-FM3IRQJW.cjs');
6
6
  var chunk464YPRAE_cjs = require('./chunk-464YPRAE.cjs');
7
7
  var chunkNPR5BGFF_cjs = require('./chunk-NPR5BGFF.cjs');
8
8
  var chunkLJJJ6CYH_cjs = require('./chunk-LJJJ6CYH.cjs');
9
- var chunk4JNKXOFZ_cjs = require('./chunk-4JNKXOFZ.cjs');
10
- var chunkRQ2Y7USX_cjs = require('./chunk-RQ2Y7USX.cjs');
9
+ var chunkYBJ4QGNH_cjs = require('./chunk-YBJ4QGNH.cjs');
10
+ var chunk2VHYOTWW_cjs = require('./chunk-2VHYOTWW.cjs');
11
11
  var chunkJKB7WT7L_cjs = require('./chunk-JKB7WT7L.cjs');
12
- var chunkKPZZ5FHE_cjs = require('./chunk-KPZZ5FHE.cjs');
12
+ var chunkCNHUJRQ4_cjs = require('./chunk-CNHUJRQ4.cjs');
13
13
  var chunkKDG6FER6_cjs = require('./chunk-KDG6FER6.cjs');
14
14
  var react = require('react');
15
15
  var reactQuery = require('@tanstack/react-query');
@@ -41,9 +41,9 @@ function toWorkflowFieldDocument(doc) {
41
41
  };
42
42
  }
43
43
  function useConnectedWorkflowScopeSource() {
44
- const { data: docs } = chunkGAYMJWTC_cjs.useConnectedDocuments();
45
- const { data: tags } = chunkGAYMJWTC_cjs.useConnectedTags();
46
- return react.useMemo(() => chunk4JNKXOFZ_cjs.buildWorkflowScopeSource(docs, chunk4JNKXOFZ_cjs.documentScopeLabels(tags)), [docs, tags]);
44
+ const { data: docs } = chunkCB4TIDEX_cjs.useConnectedDocuments();
45
+ const { data: tags } = chunkCB4TIDEX_cjs.useConnectedTags();
46
+ return react.useMemo(() => chunkYBJ4QGNH_cjs.buildWorkflowScopeSource(docs, chunkYBJ4QGNH_cjs.documentScopeLabels(tags)), [docs, tags]);
47
47
  }
48
48
  function useConnectedAgentOptions() {
49
49
  const { data: agents } = react$1.useAgents();
@@ -59,9 +59,9 @@ function ConnectedWorkflowDocumentsField({
59
59
  onAddFiles,
60
60
  labels
61
61
  }) {
62
- const { notify } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
63
- const { ensureWorkspaceOpen } = chunkGFNELPDP_cjs.useConnectedWorkspace();
64
- const { data: docs, loaded } = chunkGAYMJWTC_cjs.useConnectedDocuments();
62
+ const { notify } = chunkCNHUJRQ4_cjs.useBlocksEnvironment();
63
+ const { ensureWorkspaceOpen } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
64
+ const { data: docs, loaded } = chunkCB4TIDEX_cjs.useConnectedDocuments();
65
65
  const uploadDocuments = react$1.useUploadDocuments();
66
66
  const documents = react.useMemo(() => docs.map(toWorkflowFieldDocument), [docs]);
67
67
  const chosen = value.documents ?? [];
@@ -100,7 +100,7 @@ function ConnectedWorkflowDocumentsField({
100
100
  }
101
101
  ),
102
102
  /* @__PURE__ */ jsxRuntime.jsx(
103
- chunk4JNKXOFZ_cjs.WorkflowDocumentsField,
103
+ chunkYBJ4QGNH_cjs.WorkflowDocumentsField,
104
104
  {
105
105
  field,
106
106
  value,
@@ -122,7 +122,7 @@ function ConnectedWorkflowLauncher({
122
122
  const scopeSource = useConnectedWorkflowScopeSource();
123
123
  const agents = useConnectedAgentOptions();
124
124
  return /* @__PURE__ */ jsxRuntime.jsx(
125
- chunk4JNKXOFZ_cjs.WorkflowLauncher,
125
+ chunkYBJ4QGNH_cjs.WorkflowLauncher,
126
126
  {
127
127
  ...props,
128
128
  scopeSource,
@@ -151,7 +151,7 @@ function ReferencePicker({
151
151
  }, [documents]);
152
152
  const selected = groups[0].docs.find((d) => d.id === selectedId);
153
153
  return /* @__PURE__ */ jsxRuntime.jsx(
154
- chunkRQ2Y7USX_cjs.DocumentPicker,
154
+ chunk2VHYOTWW_cjs.DocumentPicker,
155
155
  {
156
156
  groups,
157
157
  value: selectedId ?? "",
@@ -163,9 +163,9 @@ function ReferencePicker({
163
163
  }
164
164
  function useConnectedDocxReferences() {
165
165
  const arbi = react$1.useArbi();
166
- const { workspaceId } = chunkGFNELPDP_cjs.useConnectedWorkspace();
167
- const { openDocument, runtimeConfig } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
168
- const { data: documents } = chunkGAYMJWTC_cjs.useConnectedDocuments();
166
+ const { workspaceId } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
167
+ const { openDocument, runtimeConfig } = chunkCNHUJRQ4_cjs.useBlocksEnvironment();
168
+ const { data: documents } = chunkCB4TIDEX_cjs.useConnectedDocuments();
169
169
  const documentsRef = react.useRef(documents);
170
170
  documentsRef.current = documents;
171
171
  return react.useMemo(
@@ -216,7 +216,7 @@ function useConnectedDocxReferences() {
216
216
  );
217
217
  }
218
218
  function useConnectedWorkspaceRole() {
219
- const { workspaceId, live, userId, ensureWorkspaceOpen } = chunkGFNELPDP_cjs.useConnectedWorkspace();
219
+ const { workspaceId, live, userId, ensureWorkspaceOpen } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
220
220
  const { data: members = [] } = react$1.useWorkspaceUsers(workspaceId ?? void 0, {
221
221
  enabled: live && !!workspaceId,
222
222
  beforeFetch: ensureWorkspaceOpen
@@ -244,17 +244,17 @@ var DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS = {
244
244
  var messageOf = (error) => error instanceof Error ? error.message : "";
245
245
  function ConnectedWorkflowsTable({
246
246
  filter,
247
- describeTrigger = (w) => chunk4JNKXOFZ_cjs.workflowTriggerType(w).replaceAll("_", " "),
247
+ describeTrigger = (w) => chunkYBJ4QGNH_cjs.workflowTriggerType(w).replaceAll("_", " "),
248
248
  formatDate = chunkKDG6FER6_cjs.fmtDate,
249
249
  onViewRuns,
250
250
  connectedLabels,
251
251
  ...tableProps
252
252
  }) {
253
253
  const l = { ...DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, ...connectedLabels };
254
- const { notify, confirm, openConversation } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
254
+ const { notify, confirm, openConversation } = chunkCNHUJRQ4_cjs.useBlocksEnvironment();
255
255
  const { canEditShared, isWorkspaceOwner } = useConnectedWorkspaceRole();
256
256
  const { data: saved = [], isLoading } = react$1.useWorkflows({ live: true });
257
- const { data: conversations, refetch } = chunkGAYMJWTC_cjs.useConnectedConversations({ live: true });
257
+ const { data: conversations, refetch } = chunkCB4TIDEX_cjs.useConnectedConversations({ live: true });
258
258
  const { data: agents = [] } = react$1.useAgents();
259
259
  const update = react$1.useUpdateWorkflow();
260
260
  const remove = react$1.useDeleteWorkflow();
@@ -306,7 +306,7 @@ function ConnectedWorkflowsTable({
306
306
  await act(workflow, () => remove.mutateAsync(workflow.external_id));
307
307
  };
308
308
  return /* @__PURE__ */ jsxRuntime.jsx(
309
- chunk4JNKXOFZ_cjs.WorkflowsTable,
309
+ chunkYBJ4QGNH_cjs.WorkflowsTable,
310
310
  {
311
311
  ...tableProps,
312
312
  workflows,
@@ -356,7 +356,7 @@ function ConnectedWorkflowsTable({
356
356
  function useConnectedHouseTemplate() {
357
357
  const arbi = react$1.useArbi();
358
358
  const { mutateAsync: setWorkspaceTemplate } = react$1.useSetWorkspaceHouseTemplate();
359
- const { workspaceId, live, ensureWorkspaceOpen } = chunkGFNELPDP_cjs.useConnectedWorkspace();
359
+ const { workspaceId, live, ensureWorkspaceOpen } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
360
360
  const { data: workspaces } = react$1.useWorkspaces({ enabled: live });
361
361
  const workspace = workspaces?.find((w) => w.external_id === workspaceId);
362
362
  const { isWorkspaceOwner } = useConnectedWorkspaceRole();
@@ -408,7 +408,7 @@ function ConnectedNativeDocxEditor({
408
408
  ...props
409
409
  }) {
410
410
  const adapter = useConnectedNativeDocxAdapter(fontBaseUrl);
411
- const { workspaceId } = chunkGFNELPDP_cjs.useConnectedWorkspace();
411
+ const { workspaceId } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
412
412
  const { commentTarget } = useNativeDocxSupport();
413
413
  const [openFailed, setOpenFailed] = react.useState(false);
414
414
  const hasOpened = react.useRef(false);
@@ -459,9 +459,9 @@ function tokenChanges(arbi) {
459
459
  }
460
460
  function useConnectedNativeDocxAdapter(fontBaseUrl = "/native-docx/fonts") {
461
461
  const arbi = react$1.useArbi();
462
- const { workspaceId, live, user, ensureWorkspaceOpen } = chunkGFNELPDP_cjs.useConnectedWorkspace();
462
+ const { workspaceId, live, user, ensureWorkspaceOpen } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
463
463
  const queries = reactQuery.useQueryClient();
464
- const { notify } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
464
+ const { notify } = chunkCNHUJRQ4_cjs.useBlocksEnvironment();
465
465
  const tools = documentTools.useOptionalDocumentTools();
466
466
  const support = useNativeDocxSupport();
467
467
  const references = useConnectedDocxReferences();
@@ -553,5 +553,5 @@ exports.useConnectedNativeDocxAdapter = useConnectedNativeDocxAdapter;
553
553
  exports.useConnectedWorkflowScopeSource = useConnectedWorkflowScopeSource;
554
554
  exports.useConnectedWorkspaceRole = useConnectedWorkspaceRole;
555
555
  exports.useNativeDocxSupport = useNativeDocxSupport;
556
- //# sourceMappingURL=chunk-Q4BY2CQQ.cjs.map
557
- //# sourceMappingURL=chunk-Q4BY2CQQ.cjs.map
556
+ //# sourceMappingURL=chunk-CQCNU5KT.cjs.map
557
+ //# sourceMappingURL=chunk-CQCNU5KT.cjs.map