@arbidocs/blocks 0.4.142 → 0.4.143

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 (209) hide show
  1. package/dist/agents/index.cjs +438 -435
  2. package/dist/agents/index.js +10 -7
  3. package/dist/chat/index.cjs +139 -138
  4. package/dist/chat/index.js +4 -3
  5. package/dist/{chunk-S24XEVPS.cjs → chunk-464YPRAE.cjs} +33 -2
  6. package/dist/chunk-464YPRAE.cjs.map +1 -0
  7. package/dist/{chunk-7YLJHTDC.cjs → chunk-5A2QQAF5.cjs} +11 -11
  8. package/dist/{chunk-7YLJHTDC.cjs.map → chunk-5A2QQAF5.cjs.map} +1 -1
  9. package/dist/{chunk-ON3TKY5Y.js → chunk-5YHEHEJT.js} +242 -4
  10. package/dist/chunk-5YHEHEJT.js.map +1 -0
  11. package/dist/chunk-76L6LOP3.cjs +308 -0
  12. package/dist/chunk-76L6LOP3.cjs.map +1 -0
  13. package/dist/chunk-AOSUHWIL.js +98 -0
  14. package/dist/chunk-AOSUHWIL.js.map +1 -0
  15. package/dist/{chunk-PROK33G6.js → chunk-C44TDH54.js} +13 -1598
  16. package/dist/chunk-C44TDH54.js.map +1 -0
  17. package/dist/{chunk-YFY3TQ6Q.cjs → chunk-COCGRJLA.cjs} +7 -7
  18. package/dist/{chunk-YFY3TQ6Q.cjs.map → chunk-COCGRJLA.cjs.map} +1 -1
  19. package/dist/chunk-CQCC7LE7.js +210 -0
  20. package/dist/chunk-CQCC7LE7.js.map +1 -0
  21. package/dist/{chunk-UGCKUXRV.js → chunk-CSI2B2H5.js} +3 -3
  22. package/dist/{chunk-UGCKUXRV.js.map → chunk-CSI2B2H5.js.map} +1 -1
  23. package/dist/{chunk-R26BK7YL.cjs → chunk-DTROMMDX.cjs} +4 -4
  24. package/dist/{chunk-R26BK7YL.cjs.map → chunk-DTROMMDX.cjs.map} +1 -1
  25. package/dist/{chunk-65THHQVB.cjs → chunk-ECW2R2KF.cjs} +27 -27
  26. package/dist/{chunk-65THHQVB.cjs.map → chunk-ECW2R2KF.cjs.map} +1 -1
  27. package/dist/{chunk-RI6DZA5X.js → chunk-EF4ZLKRM.js} +3 -3
  28. package/dist/{chunk-RI6DZA5X.js.map → chunk-EF4ZLKRM.js.map} +1 -1
  29. package/dist/{chunk-WS5EX7DN.cjs → chunk-EYKISBDO.cjs} +5 -5
  30. package/dist/{chunk-WS5EX7DN.cjs.map → chunk-EYKISBDO.cjs.map} +1 -1
  31. package/dist/chunk-FJETR2AS.js +561 -0
  32. package/dist/chunk-FJETR2AS.js.map +1 -0
  33. package/dist/{chunk-JO3EMZ4X.js → chunk-GWSGIZQ5.js} +3 -3
  34. package/dist/{chunk-JO3EMZ4X.js.map → chunk-GWSGIZQ5.js.map} +1 -1
  35. package/dist/{chunk-I7WG3JRD.js → chunk-H4D7WKDY.js} +3 -3
  36. package/dist/{chunk-I7WG3JRD.js.map → chunk-H4D7WKDY.js.map} +1 -1
  37. package/dist/{chunk-GBS6QVGS.cjs → chunk-HAOKT4LC.cjs} +5 -5
  38. package/dist/{chunk-GBS6QVGS.cjs.map → chunk-HAOKT4LC.cjs.map} +1 -1
  39. package/dist/{chunk-N5X37J3D.js → chunk-IJST4EBM.js} +11 -8
  40. package/dist/chunk-IJST4EBM.js.map +1 -0
  41. package/dist/{chunk-3RJN2VTL.js → chunk-IXWJGOM2.js} +3 -3
  42. package/dist/{chunk-3RJN2VTL.js.map → chunk-IXWJGOM2.js.map} +1 -1
  43. package/dist/{chunk-CYNF5PZI.js → chunk-J5CWKFSC.js} +3 -3
  44. package/dist/{chunk-CYNF5PZI.js.map → chunk-J5CWKFSC.js.map} +1 -1
  45. package/dist/{chunk-OWCEQKAR.cjs → chunk-JSTKEZBS.cjs} +21 -318
  46. package/dist/chunk-JSTKEZBS.cjs.map +1 -0
  47. package/dist/{chunk-TP6PLDNM.cjs → chunk-KMZWKSKO.cjs} +8 -8
  48. package/dist/{chunk-TP6PLDNM.cjs.map → chunk-KMZWKSKO.cjs.map} +1 -1
  49. package/dist/{chunk-C4WSHRR6.cjs → chunk-KPZZ5FHE.cjs} +32 -12
  50. package/dist/chunk-KPZZ5FHE.cjs.map +1 -0
  51. package/dist/{chunk-CKCBBYTA.js → chunk-KSHKTOY2.js} +5 -205
  52. package/dist/chunk-KSHKTOY2.js.map +1 -0
  53. package/dist/chunk-LJJJ6CYH.cjs +62 -0
  54. package/dist/chunk-LJJJ6CYH.cjs.map +1 -0
  55. package/dist/chunk-LPYEUD2D.cjs +1627 -0
  56. package/dist/chunk-LPYEUD2D.cjs.map +1 -0
  57. package/dist/chunk-MHFF5N65.cjs +101 -0
  58. package/dist/chunk-MHFF5N65.cjs.map +1 -0
  59. package/dist/{chunk-GYAUJ4KT.js → chunk-MTSKK3BN.js} +32 -3
  60. package/dist/chunk-MTSKK3BN.js.map +1 -0
  61. package/dist/chunk-NHZK64TQ.js +75 -0
  62. package/dist/chunk-NHZK64TQ.js.map +1 -0
  63. package/dist/{chunk-BPBSSMRB.js → chunk-NRFAWUVD.js} +3 -3
  64. package/dist/{chunk-BPBSSMRB.js.map → chunk-NRFAWUVD.js.map} +1 -1
  65. package/dist/chunk-NWNVWO6L.cjs +80 -0
  66. package/dist/chunk-NWNVWO6L.cjs.map +1 -0
  67. package/dist/{chunk-HIJUXAWS.cjs → chunk-O2GW5IY6.cjs} +86 -83
  68. package/dist/chunk-O2GW5IY6.cjs.map +1 -0
  69. package/dist/{chunk-3BFGL2JL.cjs → chunk-ODRHHWHY.cjs} +4 -4
  70. package/dist/{chunk-3BFGL2JL.cjs.map → chunk-ODRHHWHY.cjs.map} +1 -1
  71. package/dist/{chunk-Y3KA6X7B.js → chunk-OVR3XMYL.js} +4 -4
  72. package/dist/{chunk-Y3KA6X7B.js.map → chunk-OVR3XMYL.js.map} +1 -1
  73. package/dist/{chunk-Y5KTM3V5.js → chunk-PDKM27DF.js} +17 -295
  74. package/dist/chunk-PDKM27DF.js.map +1 -0
  75. package/dist/{chunk-OAL3B2ZU.cjs → chunk-PLJ7PHWU.cjs} +5 -5
  76. package/dist/{chunk-OAL3B2ZU.cjs.map → chunk-PLJ7PHWU.cjs.map} +1 -1
  77. package/dist/{chunk-DPGFEMVT.cjs → chunk-RB7GX2VT.cjs} +57 -1665
  78. package/dist/chunk-RB7GX2VT.cjs.map +1 -0
  79. package/dist/chunk-RFIBUWLF.cjs +232 -0
  80. package/dist/chunk-RFIBUWLF.cjs.map +1 -0
  81. package/dist/{chunk-MIDXCYZB.cjs → chunk-RQ2Y7USX.cjs} +15 -235
  82. package/dist/chunk-RQ2Y7USX.cjs.map +1 -0
  83. package/dist/chunk-SV65E4QW.js +58 -0
  84. package/dist/chunk-SV65E4QW.js.map +1 -0
  85. package/dist/{chunk-LYUO3E6V.js → chunk-SZOFGU7W.js} +3 -3
  86. package/dist/{chunk-LYUO3E6V.js.map → chunk-SZOFGU7W.js.map} +1 -1
  87. package/dist/chunk-T5B7FM7S.js +1602 -0
  88. package/dist/chunk-T5B7FM7S.js.map +1 -0
  89. package/dist/{chunk-YNIBUKV5.js → chunk-TBEVGWY3.js} +32 -14
  90. package/dist/chunk-TBEVGWY3.js.map +1 -0
  91. package/dist/{chunk-MJCCBMM5.cjs → chunk-TC3RQNEX.cjs} +6 -80
  92. package/dist/chunk-TC3RQNEX.cjs.map +1 -0
  93. package/dist/chunk-TZGBRLPK.js +288 -0
  94. package/dist/chunk-TZGBRLPK.js.map +1 -0
  95. package/dist/chunk-U6YVZDOV.cjs +574 -0
  96. package/dist/chunk-U6YVZDOV.cjs.map +1 -0
  97. package/dist/{chunk-QIMVTGKS.cjs → chunk-U73KPFYH.cjs} +255 -2
  98. package/dist/chunk-U73KPFYH.cjs.map +1 -0
  99. package/dist/{chunk-HFGXA5CL.cjs → chunk-UTTTJSQU.cjs} +4 -4
  100. package/dist/{chunk-HFGXA5CL.cjs.map → chunk-UTTTJSQU.cjs.map} +1 -1
  101. package/dist/{chunk-DLBUFHLY.js → chunk-VTTZZ4FN.js} +4 -74
  102. package/dist/chunk-VTTZZ4FN.js.map +1 -0
  103. package/dist/{chunk-5FTIHRZH.cjs → chunk-XVUOMWMD.cjs} +4 -4
  104. package/dist/{chunk-5FTIHRZH.cjs.map → chunk-XVUOMWMD.cjs.map} +1 -1
  105. package/dist/{chunk-FXG7TFAG.js → chunk-Y4ATWQGV.js} +3 -3
  106. package/dist/{chunk-FXG7TFAG.js.map → chunk-Y4ATWQGV.js.map} +1 -1
  107. package/dist/{chunk-444XKG46.js → chunk-YKQ2DPIP.js} +3 -3
  108. package/dist/{chunk-444XKG46.js.map → chunk-YKQ2DPIP.js.map} +1 -1
  109. package/dist/{chunk-HEMU73OP.cjs → chunk-YSHIC4NJ.cjs} +4 -4
  110. package/dist/{chunk-HEMU73OP.cjs.map → chunk-YSHIC4NJ.cjs.map} +1 -1
  111. package/dist/{chunk-5BXEYYH6.js → chunk-ZM26YEOT.js} +3 -3
  112. package/dist/{chunk-5BXEYYH6.js.map → chunk-ZM26YEOT.js.map} +1 -1
  113. package/dist/citations/index.cjs +12 -12
  114. package/dist/citations/index.js +3 -3
  115. package/dist/connect/docx.cjs +36 -7
  116. package/dist/connect/docx.cjs.map +1 -1
  117. package/dist/connect/docx.d.ts +9 -2
  118. package/dist/connect/docx.js +30 -6
  119. package/dist/connect/docx.js.map +1 -1
  120. package/dist/connect/index.cjs +802 -628
  121. package/dist/connect/index.cjs.map +1 -1
  122. package/dist/connect/index.d.ts +2 -0
  123. package/dist/connect/index.js +636 -507
  124. package/dist/connect/index.js.map +1 -1
  125. package/dist/connection/ConnectedSettings.d.ts +3 -2
  126. package/dist/connection/docx/ConnectedNativeDocxComparison.d.ts +5 -0
  127. package/dist/connection/docx/ConnectedNativeDocxEditor.d.ts +16 -0
  128. package/dist/connection/{ConnectedStreamedWordArtifact.d.ts → docx/ConnectedStreamedWordArtifact.d.ts} +1 -1
  129. package/dist/connection/docx/support.d.ts +27 -0
  130. package/dist/connection/docx/useConnectedDocxReferences.d.ts +2 -0
  131. package/dist/connection/docx/useConnectedHouseTemplate.d.ts +2 -0
  132. package/dist/connection/settings-page/ConnectedAccountSettings.d.ts +35 -0
  133. package/dist/connection/settings-page/ConnectedMailSettings.d.ts +13 -0
  134. package/dist/connection/settings-page/ConnectedPremiumModels.d.ts +1 -0
  135. package/dist/connection/settings-page/ConnectedPrivacySettings.d.ts +12 -0
  136. package/dist/connection/settings-page/ConnectedSettingsPage.d.ts +29 -0
  137. package/dist/connection/settings-page/SessionStatusIcon.d.ts +7 -0
  138. package/dist/connection/settings-page/index.d.ts +6 -0
  139. package/dist/docx/index.cjs +17 -63
  140. package/dist/docx/index.cjs.map +1 -1
  141. package/dist/docx/index.d.ts +1 -0
  142. package/dist/docx/index.js +2 -64
  143. package/dist/docx/index.js.map +1 -1
  144. package/dist/docx/template/candidates.d.ts +16 -0
  145. package/dist/facts/index.cjs +3 -3
  146. package/dist/facts/index.js +2 -2
  147. package/dist/files/index.cjs +3 -3
  148. package/dist/files/index.js +2 -2
  149. package/dist/home/index.cjs +20 -20
  150. package/dist/home/index.js +4 -4
  151. package/dist/index.cjs +766 -741
  152. package/dist/index.cjs.map +1 -1
  153. package/dist/index.d.ts +2 -0
  154. package/dist/index.js +23 -18
  155. package/dist/index.js.map +1 -1
  156. package/dist/lib/deep-link.d.ts +46 -0
  157. package/dist/provider/BlocksProvider.d.ts +5 -1
  158. package/dist/provider/settings-section.d.ts +9 -0
  159. package/dist/retrieval/index.cjs +4 -4
  160. package/dist/retrieval/index.js +2 -2
  161. package/dist/settings/AppearanceSettings.d.ts +18 -0
  162. package/dist/settings/ServerConnectionControls.d.ts +16 -0
  163. package/dist/settings/SettingsPage.d.ts +31 -0
  164. package/dist/settings/index.cjs +188 -250
  165. package/dist/settings/index.cjs.map +1 -1
  166. package/dist/settings/index.d.ts +3 -1
  167. package/dist/settings/index.js +88 -199
  168. package/dist/settings/index.js.map +1 -1
  169. package/dist/shell/index.cjs +44 -44
  170. package/dist/shell/index.js +3 -3
  171. package/dist/site/index.cjs +74 -73
  172. package/dist/site/index.js +3 -2
  173. package/dist/studio/index.cjs +80 -78
  174. package/dist/studio/index.cjs.map +1 -1
  175. package/dist/studio/index.js +10 -8
  176. package/dist/studio/index.js.map +1 -1
  177. package/dist/workflow-canvas/index.cjs +62 -59
  178. package/dist/workflow-canvas/index.cjs.map +1 -1
  179. package/dist/workflow-canvas/index.js +10 -7
  180. package/dist/workflow-canvas/index.js.map +1 -1
  181. package/dist/workspaces/index.cjs +3 -3
  182. package/dist/workspaces/index.js +2 -2
  183. package/node_modules/@arbidocs/coedit/package.json +1 -1
  184. package/package.json +4 -4
  185. package/dist/chunk-4TR5QCCX.cjs +0 -43
  186. package/dist/chunk-4TR5QCCX.cjs.map +0 -1
  187. package/dist/chunk-7NDW4KF4.cjs +0 -112
  188. package/dist/chunk-7NDW4KF4.cjs.map +0 -1
  189. package/dist/chunk-C4WSHRR6.cjs.map +0 -1
  190. package/dist/chunk-CKCBBYTA.js.map +0 -1
  191. package/dist/chunk-DLBUFHLY.js.map +0 -1
  192. package/dist/chunk-DPGFEMVT.cjs.map +0 -1
  193. package/dist/chunk-ETXYVO6E.js +0 -109
  194. package/dist/chunk-ETXYVO6E.js.map +0 -1
  195. package/dist/chunk-GYAUJ4KT.js.map +0 -1
  196. package/dist/chunk-HIJUXAWS.cjs.map +0 -1
  197. package/dist/chunk-MCKOZACC.js +0 -41
  198. package/dist/chunk-MCKOZACC.js.map +0 -1
  199. package/dist/chunk-MIDXCYZB.cjs.map +0 -1
  200. package/dist/chunk-MJCCBMM5.cjs.map +0 -1
  201. package/dist/chunk-N5X37J3D.js.map +0 -1
  202. package/dist/chunk-ON3TKY5Y.js.map +0 -1
  203. package/dist/chunk-OWCEQKAR.cjs.map +0 -1
  204. package/dist/chunk-PROK33G6.js.map +0 -1
  205. package/dist/chunk-QIMVTGKS.cjs.map +0 -1
  206. package/dist/chunk-S24XEVPS.cjs.map +0 -1
  207. package/dist/chunk-Y5KTM3V5.js.map +0 -1
  208. package/dist/chunk-YNIBUKV5.js.map +0 -1
  209. package/dist/connection/ConnectedNativeDocxEditor.d.ts +0 -6
@@ -0,0 +1,574 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkJZNXRMLH_cjs = require('./chunk-JZNXRMLH.cjs');
5
+ var chunkGFNELPDP_cjs = require('./chunk-GFNELPDP.cjs');
6
+ var chunk464YPRAE_cjs = require('./chunk-464YPRAE.cjs');
7
+ var chunkV5OAXIBN_cjs = require('./chunk-V5OAXIBN.cjs');
8
+ var chunkLJJJ6CYH_cjs = require('./chunk-LJJJ6CYH.cjs');
9
+ var chunkLPYEUD2D_cjs = require('./chunk-LPYEUD2D.cjs');
10
+ var chunkRQ2Y7USX_cjs = require('./chunk-RQ2Y7USX.cjs');
11
+ var chunkJKB7WT7L_cjs = require('./chunk-JKB7WT7L.cjs');
12
+ var chunkKPZZ5FHE_cjs = require('./chunk-KPZZ5FHE.cjs');
13
+ var chunkKDG6FER6_cjs = require('./chunk-KDG6FER6.cjs');
14
+ var react = require('react');
15
+ var jsxRuntime = require('react/jsx-runtime');
16
+ var react$1 = require('@arbidocs/react');
17
+ var reactQuery = require('@tanstack/react-query');
18
+ var documentTools = require('@arbidocs/react/document-tools');
19
+
20
+ var NativeDocxSupportContext = react.createContext({});
21
+ function NativeDocxSupportProvider({
22
+ value,
23
+ children
24
+ }) {
25
+ return /* @__PURE__ */ jsxRuntime.jsx(NativeDocxSupportContext.Provider, { value, children });
26
+ }
27
+ function useNativeDocxSupport() {
28
+ return react.useContext(NativeDocxSupportContext);
29
+ }
30
+ var IMAGE_FILE_TYPES = /* @__PURE__ */ new Set(["png", "jpg", "jpeg", "gif", "bmp", "tiff", "webp"]);
31
+ function toWorkflowFieldDocument(doc) {
32
+ const isImage = IMAGE_FILE_TYPES.has((doc.file_type ?? "").toLowerCase());
33
+ return {
34
+ id: doc.external_id,
35
+ title: doc.doc_metadata?.title || doc.file_name || doc.external_id,
36
+ fileName: doc.file_name,
37
+ pages: isImage ? null : doc.n_pages ?? null,
38
+ tokens: isImage ? null : doc.tokens ?? null,
39
+ status: doc.status,
40
+ isImage
41
+ };
42
+ }
43
+ function useConnectedWorkflowScopeSource() {
44
+ const { data: docs } = chunkJZNXRMLH_cjs.useConnectedDocuments();
45
+ const { data: tags } = chunkJZNXRMLH_cjs.useConnectedTags();
46
+ return react.useMemo(() => chunkLPYEUD2D_cjs.buildWorkflowScopeSource(docs, chunkLPYEUD2D_cjs.documentScopeLabels(tags)), [docs, tags]);
47
+ }
48
+ function useConnectedAgentOptions() {
49
+ const { data: agents } = react$1.useAgents();
50
+ return react.useMemo(
51
+ () => (agents ?? []).map((a) => ({ id: a.external_id, label: a.given_name || a.email })),
52
+ [agents]
53
+ );
54
+ }
55
+ function ConnectedWorkflowDocumentsField({
56
+ field,
57
+ value,
58
+ onChange,
59
+ onAddFiles,
60
+ labels
61
+ }) {
62
+ const arbi = react$1.useArbi();
63
+ const { notify } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
64
+ const { ensureWorkspaceOpen } = chunkGFNELPDP_cjs.useConnectedWorkspace();
65
+ const { data: docs, loaded, refetch } = chunkJZNXRMLH_cjs.useConnectedDocuments();
66
+ const documents = react.useMemo(() => docs.map(toWorkflowFieldDocument), [docs]);
67
+ const chosen = value.documents ?? [];
68
+ const { data: thumbnails } = react$1.useThumbnails(chosen, { enabled: (field.max ?? 1) > 1 });
69
+ const input = react.useRef(null);
70
+ const [adding, setAdding] = react.useState(false);
71
+ const upload = react.useCallback(
72
+ async (files) => {
73
+ setAdding(true);
74
+ try {
75
+ await ensureWorkspaceOpen();
76
+ for (const file of files) await arbi.documents.uploadFile(file, file.name);
77
+ } catch (error) {
78
+ notify(error instanceof Error && error.message ? error.message : String(error), "error");
79
+ } finally {
80
+ setAdding(false);
81
+ await refetch?.();
82
+ }
83
+ },
84
+ [arbi, ensureWorkspaceOpen, notify, refetch]
85
+ );
86
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
87
+ !onAddFiles && /* @__PURE__ */ jsxRuntime.jsx(
88
+ "input",
89
+ {
90
+ ref: input,
91
+ type: "file",
92
+ multiple: true,
93
+ className: "hidden",
94
+ "aria-label": "Add files",
95
+ "data-testid": "workflow-add-files-input",
96
+ onChange: (e) => {
97
+ const files = Array.from(e.target.files ?? []);
98
+ e.target.value = "";
99
+ if (files.length) void upload(files);
100
+ }
101
+ }
102
+ ),
103
+ /* @__PURE__ */ jsxRuntime.jsx(
104
+ chunkLPYEUD2D_cjs.WorkflowDocumentsField,
105
+ {
106
+ field,
107
+ value,
108
+ onChange,
109
+ documents,
110
+ loaded,
111
+ thumbnailOf: (id) => thumbnails?.[id],
112
+ onAddFiles: onAddFiles ?? ((files) => files?.length ? void upload(files) : input.current?.click()),
113
+ adding,
114
+ labels
115
+ }
116
+ )
117
+ ] });
118
+ }
119
+ function ConnectedWorkflowLauncher({
120
+ onAddFiles,
121
+ ...props
122
+ }) {
123
+ const scopeSource = useConnectedWorkflowScopeSource();
124
+ const agents = useConnectedAgentOptions();
125
+ return /* @__PURE__ */ jsxRuntime.jsx(
126
+ chunkLPYEUD2D_cjs.WorkflowLauncher,
127
+ {
128
+ ...props,
129
+ scopeSource,
130
+ agents,
131
+ renderDocuments: (field, value, onChange) => /* @__PURE__ */ jsxRuntime.jsx(
132
+ ConnectedWorkflowDocumentsField,
133
+ {
134
+ field,
135
+ value,
136
+ onChange,
137
+ onAddFiles
138
+ }
139
+ )
140
+ }
141
+ );
142
+ }
143
+ function useConnectedWorkspaceRole() {
144
+ const { workspaceId, live, userId, ensureWorkspaceOpen } = chunkGFNELPDP_cjs.useConnectedWorkspace();
145
+ const { data: members = [] } = react$1.useWorkspaceUsers(workspaceId ?? void 0, {
146
+ enabled: live && !!workspaceId,
147
+ beforeFetch: ensureWorkspaceOpen
148
+ });
149
+ const role = members.find((m) => m.user.external_id === userId)?.role;
150
+ return {
151
+ members,
152
+ role,
153
+ /** An owner or a collaborator edits, pauses, resumes and runs what is shared with the workspace. */
154
+ canEditShared: role === "owner" || role === "collaborator",
155
+ /** With an item's creator, the only one who deletes it. */
156
+ isWorkspaceOwner: role === "owner"
157
+ };
158
+ }
159
+ var DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS = {
160
+ updateFailed: "Could not update the workflow",
161
+ deleteTitle: "Delete workflow",
162
+ deleteOne: (name) => `Delete \u201C${name}\u201D? Threads it already created stay.`,
163
+ deleteMany: (count) => `Delete ${count} workflows? Threads they already created stay.`,
164
+ runFailed: "The workflow failed. You can send an error report from its history.",
165
+ noThread: "The workflow did not create a thread.",
166
+ documentAction: (workflow) => workflow.action?.type === "email_documents" ? "Preparing your document email" : "Reviewing documents",
167
+ untitledTask: "Untitled thread"
168
+ };
169
+ var messageOf = (error) => error instanceof Error ? error.message : "";
170
+ function ConnectedWorkflowsTable({
171
+ filter,
172
+ describeTrigger = (w) => chunkLPYEUD2D_cjs.workflowTriggerType(w).replaceAll("_", " "),
173
+ formatDate = chunkKDG6FER6_cjs.fmtDate,
174
+ onViewRuns,
175
+ connectedLabels,
176
+ ...tableProps
177
+ }) {
178
+ const l = { ...DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, ...connectedLabels };
179
+ const { notify, confirm, openConversation } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
180
+ const { canEditShared, isWorkspaceOwner } = useConnectedWorkspaceRole();
181
+ const { data: saved = [], isLoading } = react$1.useWorkflows({ live: true });
182
+ const { data: conversations, refetch } = chunkJZNXRMLH_cjs.useConnectedConversations({ live: true });
183
+ const { data: agents = [] } = react$1.useAgents();
184
+ const update = react$1.useUpdateWorkflow();
185
+ const remove = react$1.useDeleteWorkflow();
186
+ const run = react$1.useRunWorkflow();
187
+ const [busyId, setBusyId] = react.useState(null);
188
+ const workflows = react.useMemo(() => filter ? saved.filter(filter) : saved, [saved, filter]);
189
+ const firingStamp = saved.map((w) => `${w.external_id}:${w.last_fired_at ?? ""}`).join("|");
190
+ react.useEffect(() => {
191
+ void refetch?.();
192
+ }, [firingStamp, refetch]);
193
+ const lastRuns = react.useMemo(() => {
194
+ const out = {};
195
+ for (const c of conversations) {
196
+ const id = c.workflow_ext_id;
197
+ if (id && (!out[id] || Date.parse(c.created_at) > Date.parse(out[id].at)))
198
+ out[id] = { conversationId: c.external_id, at: c.created_at, threadStatus: c.status };
199
+ }
200
+ return out;
201
+ }, [conversations]);
202
+ const agentNames = react.useMemo(
203
+ () => Object.fromEntries(agents.map((a) => [a.external_id, a.given_name || a.email])),
204
+ [agents]
205
+ );
206
+ const taskNames = react.useMemo(
207
+ () => Object.fromEntries(
208
+ conversations.filter((c) => c.status != null).map((c) => [c.external_id, c.title || l.untitledTask])
209
+ ),
210
+ [conversations, l.untitledTask]
211
+ );
212
+ const act = async (workflow, action) => {
213
+ setBusyId(workflow.external_id);
214
+ try {
215
+ await action();
216
+ } catch (error) {
217
+ notify(messageOf(error) || l.updateFailed, "error");
218
+ } finally {
219
+ setBusyId(null);
220
+ }
221
+ };
222
+ const setActive = (workflow, active) => act(workflow, () => update.mutateAsync({ workflowId: workflow.external_id, patch: { active } }));
223
+ const deleteAll = async (items) => {
224
+ if (!items.length) return;
225
+ const ok = await confirm({
226
+ title: l.deleteTitle,
227
+ message: items.length === 1 ? l.deleteOne(items[0].name) : l.deleteMany(items.length)
228
+ });
229
+ if (!ok) return;
230
+ for (const workflow of items)
231
+ await act(workflow, () => remove.mutateAsync(workflow.external_id));
232
+ };
233
+ return /* @__PURE__ */ jsxRuntime.jsx(
234
+ chunkLPYEUD2D_cjs.WorkflowsTable,
235
+ {
236
+ ...tableProps,
237
+ workflows,
238
+ isLoading,
239
+ busyId,
240
+ describeTrigger,
241
+ formatDate,
242
+ agentNames,
243
+ taskNames,
244
+ lastRuns,
245
+ canEditShared,
246
+ isWorkspaceOwner,
247
+ onOpenThread: (conversationId) => openConversation(conversationId),
248
+ onViewRuns,
249
+ onToggleActive: (workflow, active) => void setActive(workflow, active),
250
+ onToggleActiveMany: (items, active) => {
251
+ void (async () => {
252
+ for (const workflow of items) await setActive(workflow, active);
253
+ })();
254
+ },
255
+ onToggleShared: (workflow, shared) => void act(
256
+ workflow,
257
+ () => update.mutateAsync({ workflowId: workflow.external_id, patch: { shared } })
258
+ ),
259
+ onDelete: (workflow) => void deleteAll([workflow]),
260
+ onDeleteMany: (items) => void deleteAll(items),
261
+ onRun: (workflow) => void act(workflow, async () => {
262
+ const result = await run.mutateAsync(workflow.external_id);
263
+ if (result.conversation_ext_id) openConversation(result.conversation_ext_id);
264
+ if (result.error) {
265
+ onViewRuns?.(workflow);
266
+ notify(l.runFailed, "error");
267
+ return;
268
+ }
269
+ if (result.execution_id && !result.conversation_ext_id) {
270
+ onViewRuns?.(workflow);
271
+ notify(l.documentAction(workflow), "success");
272
+ return;
273
+ }
274
+ if (!result.conversation_ext_id) throw new Error(l.noThread);
275
+ })
276
+ }
277
+ );
278
+ }
279
+ var isTopLevel = (doc) => !doc.parent_ext_id;
280
+ function ReferencePicker({
281
+ documents,
282
+ selectedId,
283
+ onSelect
284
+ }) {
285
+ const groups = react.useMemo(() => {
286
+ const docs = documents.filter(isTopLevel).map(toWorkflowFieldDocument).sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase()));
287
+ return [{ id: "all", heading: "In this workspace", docs }];
288
+ }, [documents]);
289
+ const selected = groups[0].docs.find((d) => d.id === selectedId);
290
+ return /* @__PURE__ */ jsxRuntime.jsx(
291
+ chunkRQ2Y7USX_cjs.DocumentPicker,
292
+ {
293
+ groups,
294
+ value: selectedId ?? "",
295
+ onValueChange: onSelect,
296
+ selected,
297
+ labels: { placeholder: "Search documents\u2026" }
298
+ }
299
+ );
300
+ }
301
+ function useConnectedDocxReferences() {
302
+ const arbi = react$1.useArbi();
303
+ const { workspaceId } = chunkGFNELPDP_cjs.useConnectedWorkspace();
304
+ const { openDocument, runtimeConfig } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
305
+ const { data: documents } = chunkJZNXRMLH_cjs.useConnectedDocuments();
306
+ const documentsRef = react.useRef(documents);
307
+ documentsRef.current = documents;
308
+ return react.useMemo(
309
+ () => ({
310
+ documents: async () => documentsRef.current.filter(isTopLevel).map((d) => ({ id: d.external_id, title: toWorkflowFieldDocument(d).title })),
311
+ passages: async (documentId) => {
312
+ const parsed = await arbi.documents.getParsedContent(documentId, "final");
313
+ return (parsed.chunks ?? []).flatMap(
314
+ (chunk) => chunk.metadata?.chunk_ext_id && chunk.content?.trim() ? [
315
+ {
316
+ chunkId: chunk.metadata.chunk_ext_id,
317
+ page: chunk.metadata.page_number ?? null,
318
+ text: chunk.content
319
+ }
320
+ ] : []
321
+ );
322
+ },
323
+ linkFor: ({ documentId, chunkId, page }) => {
324
+ const url = chunkLJJJ6CYH_cjs.buildDeepLinkUrl(
325
+ { workspaceId: workspaceId ?? void 0, documentId, chunkId },
326
+ runtimeConfig.deploymentDomain
327
+ );
328
+ return page ? `${url}?page=${page}` : url;
329
+ },
330
+ targetOf: (href) => {
331
+ let url;
332
+ try {
333
+ url = new URL(href, window.location.origin);
334
+ } catch {
335
+ return null;
336
+ }
337
+ const { documentId, chunkId } = chunkLJJJ6CYH_cjs.parseDeepLinkPath(url.pathname);
338
+ if (!documentId || !chunkId) return null;
339
+ const page = Number(url.searchParams.get("page")) || null;
340
+ return { documentId, chunkId, page };
341
+ },
342
+ open: ({ documentId, chunkId, page }) => openDocument(documentId, { passageId: chunkId, page: page ?? void 0 }),
343
+ renderDocumentPicker: (onSelect, selectedId) => /* @__PURE__ */ jsxRuntime.jsx(
344
+ ReferencePicker,
345
+ {
346
+ documents: documentsRef.current,
347
+ selectedId,
348
+ onSelect
349
+ }
350
+ )
351
+ }),
352
+ [arbi, workspaceId, openDocument, runtimeConfig.deploymentDomain]
353
+ );
354
+ }
355
+ function useConnectedHouseTemplate() {
356
+ const arbi = react$1.useArbi();
357
+ const { mutateAsync: setWorkspaceTemplate } = react$1.useSetWorkspaceHouseTemplate();
358
+ const { workspaceId, live, ensureWorkspaceOpen } = chunkGFNELPDP_cjs.useConnectedWorkspace();
359
+ const { data: workspaces } = react$1.useWorkspaces({ enabled: live });
360
+ const workspace = workspaces?.find((w) => w.external_id === workspaceId);
361
+ const { isWorkspaceOwner } = useConnectedWorkspaceRole();
362
+ const supported = react$1.supportsHouseTemplates(workspace);
363
+ const templateId = react$1.workspaceHouseTemplateId(workspace);
364
+ const { data: candidates } = react$1.useHouseTemplateCandidates(
365
+ workspaceId,
366
+ supported && isWorkspaceOwner
367
+ );
368
+ return react.useMemo(
369
+ () => ({
370
+ load: async () => {
371
+ if (templateId) {
372
+ await ensureWorkspaceOpen();
373
+ const response = await arbi.editor.request(chunkV5OAXIBN_cjs.contentPath(templateId));
374
+ const [record] = await arbi.documents.get([templateId]).catch(() => []);
375
+ return {
376
+ bytes: new Uint8Array(await response.arrayBuffer()),
377
+ name: record?.file_name ?? "House template.docx",
378
+ source: "workspace",
379
+ documentId: templateId
380
+ };
381
+ }
382
+ if (supported) {
383
+ const deployment = await arbi.houseTemplates.deployment();
384
+ if (deployment) return { ...deployment, source: "deployment" };
385
+ }
386
+ return chunkV5OAXIBN_cjs.builtinHouseTemplate();
387
+ },
388
+ setFromDocument: supported && isWorkspaceOwner ? async (documentId) => {
389
+ await ensureWorkspaceOpen();
390
+ await setWorkspaceTemplate(documentId);
391
+ } : void 0,
392
+ isEligible: (documentId) => chunk464YPRAE_cjs.isCandidate(candidates, documentId)
393
+ }),
394
+ [
395
+ arbi,
396
+ setWorkspaceTemplate,
397
+ supported,
398
+ templateId,
399
+ isWorkspaceOwner,
400
+ candidates,
401
+ ensureWorkspaceOpen
402
+ ]
403
+ );
404
+ }
405
+ function ConnectedNativeDocxEditor({
406
+ fontBaseUrl = "/native-docx/fonts",
407
+ ...props
408
+ }) {
409
+ const adapter = useConnectedNativeDocxAdapter(fontBaseUrl);
410
+ const { workspaceId } = chunkGFNELPDP_cjs.useConnectedWorkspace();
411
+ const { commentTarget } = useNativeDocxSupport();
412
+ const [openFailed, setOpenFailed] = react.useState(false);
413
+ const hasOpened = react.useRef(false);
414
+ const guardedAdapter = react.useMemo(
415
+ () => ({
416
+ ...adapter,
417
+ open: async (documentId) => {
418
+ try {
419
+ const session = await adapter.open(documentId);
420
+ hasOpened.current = true;
421
+ return session;
422
+ } catch (error) {
423
+ if (!hasOpened.current) setOpenFailed(true);
424
+ throw error;
425
+ }
426
+ }
427
+ }),
428
+ [adapter]
429
+ );
430
+ const live = !props.snapshot && !props.stream && !props.draftContent && !props.compact;
431
+ chunkJKB7WT7L_cjs.useRegisterOpenDocument({ documentId: live ? props.documentId : null, workspaceId });
432
+ const initialCommentId = props.initialCommentId ?? (commentTarget?.documentId === props.documentId ? commentTarget.commentId : void 0);
433
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [
434
+ openFailed && /* @__PURE__ */ jsxRuntime.jsx("p", { role: "status", className: "text-muted-foreground border-b px-3 py-2 text-xs", children: "Co-editing isn't available for this document right now, so this is a read-only copy of the last saved version." }),
435
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
436
+ chunkV5OAXIBN_cjs.NativeDocxEditor,
437
+ {
438
+ ...props,
439
+ snapshot: props.snapshot || openFailed,
440
+ initialCommentId,
441
+ adapter: guardedAdapter
442
+ }
443
+ ) })
444
+ ] });
445
+ }
446
+ function tokenChanges(arbi) {
447
+ return (listener) => {
448
+ if (!arbi.isLoggedIn) return () => {
449
+ };
450
+ const session = arbi.getClient().session;
451
+ let token = session.getState().accessToken;
452
+ return session.subscribe((state) => {
453
+ if (state.accessToken === token) return;
454
+ token = state.accessToken;
455
+ listener();
456
+ });
457
+ };
458
+ }
459
+ function useConnectedNativeDocxAdapter(fontBaseUrl = "/native-docx/fonts") {
460
+ const arbi = react$1.useArbi();
461
+ const { workspaceId, live, user, ensureWorkspaceOpen } = chunkGFNELPDP_cjs.useConnectedWorkspace();
462
+ const queries = reactQuery.useQueryClient();
463
+ const { notify } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
464
+ const tools = documentTools.useOptionalDocumentTools();
465
+ const support = useNativeDocxSupport();
466
+ const references = useConnectedDocxReferences();
467
+ const houseTemplate = useConnectedHouseTemplate();
468
+ const { data: members } = react$1.useWorkspaceUsers(workspaceId ?? void 0, {
469
+ enabled: live && !!workspaceId,
470
+ beforeFetch: ensureWorkspaceOpen
471
+ });
472
+ const onDocumentsChanged = tools?.onDocumentsChanged;
473
+ const author = live && arbi.user.profile()?.givenName || user?.name || "You";
474
+ const adapter = react.useMemo(
475
+ () => ({
476
+ request: async (path, options) => {
477
+ await ensureWorkspaceOpen();
478
+ return arbi.editor.request(path, options);
479
+ },
480
+ open: async (id) => {
481
+ await ensureWorkspaceOpen();
482
+ return (await arbi.editor.request(`/${encodeURIComponent(id)}/session`, { method: "POST" })).json();
483
+ },
484
+ save: async (id, state) => (await arbi.editor.request(`/${encodeURIComponent(id)}/save`, {
485
+ method: "POST",
486
+ headers: { "Content-Type": "application/json" },
487
+ body: JSON.stringify({ state })
488
+ })).json(),
489
+ loadFonts: () => chunk464YPRAE_cjs.loadDocxFonts(fontBaseUrl),
490
+ baseUrl: arbi.getConnectionInfo()?.baseUrl || window.location.origin,
491
+ author,
492
+ subscribeTokenChanges: tokenChanges(arbi),
493
+ onDirtyChange: support.onDirtyChange,
494
+ onVersionSaved: async (id) => {
495
+ const hostRefresh = onDocumentsChanged?.([id], "version");
496
+ if (workspaceId) {
497
+ const key = react$1.arbiQueryKeys.documents(workspaceId);
498
+ try {
499
+ const documents = await arbi.documents.get([id]);
500
+ if (!documents.length) throw new Error("The saved version is not available yet.");
501
+ queries.setQueryData(
502
+ key,
503
+ (previous) => [
504
+ ...documents,
505
+ ...(previous || []).filter(
506
+ (doc) => !documents.some((saved) => saved.external_id === doc.external_id)
507
+ )
508
+ ]
509
+ );
510
+ } catch {
511
+ await queries.invalidateQueries({ queryKey: key });
512
+ }
513
+ }
514
+ await hostRefresh;
515
+ },
516
+ notify,
517
+ mentions: members?.map(({ user: member }) => ({
518
+ id: member.external_id,
519
+ name: [member.given_name, member.family_name].filter(Boolean).join(" "),
520
+ kind: member.external_id.startsWith("agt-") ? "agent" : "human"
521
+ })),
522
+ requestAgent: async (id, request) => {
523
+ const response = await arbi.editor.request(`/${encodeURIComponent(id)}/mentions`, {
524
+ method: "POST",
525
+ headers: { "Content-Type": "application/json" },
526
+ body: JSON.stringify({
527
+ comment_id: request.commentId,
528
+ instruction: request.instruction,
529
+ request_id: request.requestId,
530
+ recipient_ids: request.recipientIds
531
+ })
532
+ });
533
+ const delivery = await response.json();
534
+ notify("Mention delivered.", "success");
535
+ return { responseIds: delivery.response_ids || [] };
536
+ },
537
+ getAgentStatus: async (responseId) => (await arbi.assistant.getResponse(responseId)).status,
538
+ definitions: support.definitions,
539
+ references,
540
+ imageGeneration: support.imageGeneration,
541
+ houseTemplate
542
+ }),
543
+ [
544
+ arbi,
545
+ author,
546
+ members,
547
+ ensureWorkspaceOpen,
548
+ fontBaseUrl,
549
+ queries,
550
+ workspaceId,
551
+ notify,
552
+ onDocumentsChanged,
553
+ support,
554
+ references,
555
+ houseTemplate
556
+ ]
557
+ );
558
+ return adapter;
559
+ }
560
+
561
+ exports.ConnectedNativeDocxEditor = ConnectedNativeDocxEditor;
562
+ exports.ConnectedWorkflowDocumentsField = ConnectedWorkflowDocumentsField;
563
+ exports.ConnectedWorkflowLauncher = ConnectedWorkflowLauncher;
564
+ exports.ConnectedWorkflowsTable = ConnectedWorkflowsTable;
565
+ exports.DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS = DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS;
566
+ exports.NativeDocxSupportProvider = NativeDocxSupportProvider;
567
+ exports.toWorkflowFieldDocument = toWorkflowFieldDocument;
568
+ exports.useConnectedAgentOptions = useConnectedAgentOptions;
569
+ exports.useConnectedNativeDocxAdapter = useConnectedNativeDocxAdapter;
570
+ exports.useConnectedWorkflowScopeSource = useConnectedWorkflowScopeSource;
571
+ exports.useConnectedWorkspaceRole = useConnectedWorkspaceRole;
572
+ exports.useNativeDocxSupport = useNativeDocxSupport;
573
+ //# sourceMappingURL=chunk-U6YVZDOV.cjs.map
574
+ //# sourceMappingURL=chunk-U6YVZDOV.cjs.map