@arbidocs/blocks 0.4.142 → 0.4.144
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.
- package/dist/agents/index.cjs +435 -432
- package/dist/agents/index.js +7 -4
- package/dist/chat/index.cjs +139 -138
- package/dist/chat/index.js +4 -3
- package/dist/{chunk-N5X37J3D.js → chunk-2FJMTZNJ.js} +8 -5
- package/dist/chunk-2FJMTZNJ.js.map +1 -0
- package/dist/chunk-33ZOUJXA.js +561 -0
- package/dist/chunk-33ZOUJXA.js.map +1 -0
- package/dist/{chunk-S24XEVPS.cjs → chunk-464YPRAE.cjs} +33 -2
- package/dist/chunk-464YPRAE.cjs.map +1 -0
- package/dist/{chunk-7YLJHTDC.cjs → chunk-5A2QQAF5.cjs} +11 -11
- package/dist/{chunk-7YLJHTDC.cjs.map → chunk-5A2QQAF5.cjs.map} +1 -1
- package/dist/chunk-76L6LOP3.cjs +308 -0
- package/dist/chunk-76L6LOP3.cjs.map +1 -0
- package/dist/{chunk-FXG7TFAG.js → chunk-7NGAWGA3.js} +3 -3
- package/dist/{chunk-FXG7TFAG.js.map → chunk-7NGAWGA3.js.map} +1 -1
- package/dist/chunk-A6J2IBUG.js +1602 -0
- package/dist/chunk-A6J2IBUG.js.map +1 -0
- package/dist/{chunk-DPGFEMVT.cjs → chunk-ABUO6PIQ.cjs} +51 -1659
- package/dist/chunk-ABUO6PIQ.cjs.map +1 -0
- package/dist/chunk-AOSUHWIL.js +98 -0
- package/dist/chunk-AOSUHWIL.js.map +1 -0
- package/dist/{chunk-GBS6QVGS.cjs → chunk-BUWBXJ2N.cjs} +5 -5
- package/dist/{chunk-GBS6QVGS.cjs.map → chunk-BUWBXJ2N.cjs.map} +1 -1
- package/dist/chunk-CQCC7LE7.js +210 -0
- package/dist/chunk-CQCC7LE7.js.map +1 -0
- package/dist/{chunk-UGCKUXRV.js → chunk-CSI2B2H5.js} +3 -3
- package/dist/{chunk-UGCKUXRV.js.map → chunk-CSI2B2H5.js.map} +1 -1
- package/dist/{chunk-JO3EMZ4X.js → chunk-GWSGIZQ5.js} +3 -3
- package/dist/{chunk-JO3EMZ4X.js.map → chunk-GWSGIZQ5.js.map} +1 -1
- package/dist/{chunk-OWCEQKAR.cjs → chunk-JSTKEZBS.cjs} +21 -318
- package/dist/chunk-JSTKEZBS.cjs.map +1 -0
- package/dist/{chunk-CKCBBYTA.js → chunk-KSHKTOY2.js} +5 -205
- package/dist/chunk-KSHKTOY2.js.map +1 -0
- package/dist/chunk-LJJJ6CYH.cjs +62 -0
- package/dist/chunk-LJJJ6CYH.cjs.map +1 -0
- package/dist/chunk-MHFF5N65.cjs +101 -0
- package/dist/chunk-MHFF5N65.cjs.map +1 -0
- package/dist/{chunk-GYAUJ4KT.js → chunk-MTSKK3BN.js} +32 -3
- package/dist/chunk-MTSKK3BN.js.map +1 -0
- package/dist/chunk-O2ODDTMA.cjs +1627 -0
- package/dist/chunk-O2ODDTMA.cjs.map +1 -0
- package/dist/{chunk-3BFGL2JL.cjs → chunk-ODRHHWHY.cjs} +4 -4
- package/dist/{chunk-3BFGL2JL.cjs.map → chunk-ODRHHWHY.cjs.map} +1 -1
- package/dist/{chunk-Y5KTM3V5.js → chunk-PDKM27DF.js} +17 -295
- package/dist/chunk-PDKM27DF.js.map +1 -0
- package/dist/{chunk-OAL3B2ZU.cjs → chunk-PLJ7PHWU.cjs} +5 -5
- package/dist/{chunk-OAL3B2ZU.cjs.map → chunk-PLJ7PHWU.cjs.map} +1 -1
- package/dist/chunk-RA3ZJ45L.cjs +574 -0
- package/dist/chunk-RA3ZJ45L.cjs.map +1 -0
- package/dist/chunk-RFIBUWLF.cjs +232 -0
- package/dist/chunk-RFIBUWLF.cjs.map +1 -0
- package/dist/{chunk-MIDXCYZB.cjs → chunk-RQ2Y7USX.cjs} +15 -235
- package/dist/chunk-RQ2Y7USX.cjs.map +1 -0
- package/dist/chunk-SV65E4QW.js +58 -0
- package/dist/chunk-SV65E4QW.js.map +1 -0
- package/dist/chunk-TZGBRLPK.js +288 -0
- package/dist/chunk-TZGBRLPK.js.map +1 -0
- package/dist/{chunk-PROK33G6.js → chunk-X3TGXEFS.js} +11 -1596
- package/dist/chunk-X3TGXEFS.js.map +1 -0
- package/dist/{chunk-HIJUXAWS.cjs → chunk-XGZX22ET.cjs} +77 -74
- package/dist/chunk-XGZX22ET.cjs.map +1 -0
- package/dist/{chunk-5BXEYYH6.js → chunk-ZM26YEOT.js} +3 -3
- package/dist/{chunk-5BXEYYH6.js.map → chunk-ZM26YEOT.js.map} +1 -1
- package/dist/connect/docx.cjs +35 -6
- package/dist/connect/docx.cjs.map +1 -1
- package/dist/connect/docx.d.ts +9 -2
- package/dist/connect/docx.js +29 -5
- package/dist/connect/docx.js.map +1 -1
- package/dist/connect/index.cjs +126 -339
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +1 -0
- package/dist/connect/index.js +15 -260
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/docx/ConnectedNativeDocxComparison.d.ts +5 -0
- package/dist/connection/docx/ConnectedNativeDocxEditor.d.ts +16 -0
- package/dist/connection/{ConnectedStreamedWordArtifact.d.ts → docx/ConnectedStreamedWordArtifact.d.ts} +1 -1
- package/dist/connection/docx/support.d.ts +27 -0
- package/dist/connection/docx/useConnectedDocxReferences.d.ts +2 -0
- package/dist/connection/docx/useConnectedHouseTemplate.d.ts +2 -0
- package/dist/docx/index.cjs +17 -63
- package/dist/docx/index.cjs.map +1 -1
- package/dist/docx/index.d.ts +1 -0
- package/dist/docx/index.js +2 -64
- package/dist/docx/index.js.map +1 -1
- package/dist/docx/template/candidates.d.ts +16 -0
- package/dist/index.cjs +625 -609
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +13 -9
- package/dist/index.js.map +1 -1
- package/dist/lib/deep-link.d.ts +46 -0
- package/dist/settings/index.cjs +10 -9
- package/dist/settings/index.cjs.map +1 -1
- package/dist/settings/index.js +2 -1
- package/dist/settings/index.js.map +1 -1
- package/dist/studio/index.cjs +5 -4
- package/dist/studio/index.cjs.map +1 -1
- package/dist/studio/index.js +4 -3
- package/dist/studio/index.js.map +1 -1
- package/dist/workflow-canvas/index.cjs +58 -55
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +7 -4
- package/dist/workflow-canvas/index.js.map +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +4 -4
- package/dist/chunk-4TR5QCCX.cjs +0 -43
- package/dist/chunk-4TR5QCCX.cjs.map +0 -1
- package/dist/chunk-7NDW4KF4.cjs +0 -112
- package/dist/chunk-7NDW4KF4.cjs.map +0 -1
- package/dist/chunk-CKCBBYTA.js.map +0 -1
- package/dist/chunk-DPGFEMVT.cjs.map +0 -1
- package/dist/chunk-ETXYVO6E.js +0 -109
- package/dist/chunk-ETXYVO6E.js.map +0 -1
- package/dist/chunk-GYAUJ4KT.js.map +0 -1
- package/dist/chunk-HIJUXAWS.cjs.map +0 -1
- package/dist/chunk-MCKOZACC.js +0 -41
- package/dist/chunk-MCKOZACC.js.map +0 -1
- package/dist/chunk-MIDXCYZB.cjs.map +0 -1
- package/dist/chunk-N5X37J3D.js.map +0 -1
- package/dist/chunk-OWCEQKAR.cjs.map +0 -1
- package/dist/chunk-PROK33G6.js.map +0 -1
- package/dist/chunk-S24XEVPS.cjs.map +0 -1
- package/dist/chunk-Y5KTM3V5.js.map +0 -1
- 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 chunkO2ODDTMA_cjs = require('./chunk-O2ODDTMA.cjs');
|
|
10
|
+
var chunkRQ2Y7USX_cjs = require('./chunk-RQ2Y7USX.cjs');
|
|
11
|
+
var chunkJKB7WT7L_cjs = require('./chunk-JKB7WT7L.cjs');
|
|
12
|
+
var chunkC4WSHRR6_cjs = require('./chunk-C4WSHRR6.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(() => chunkO2ODDTMA_cjs.buildWorkflowScopeSource(docs, chunkO2ODDTMA_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 } = chunkC4WSHRR6_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
|
+
chunkO2ODDTMA_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
|
+
chunkO2ODDTMA_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) => chunkO2ODDTMA_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 } = chunkC4WSHRR6_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
|
+
chunkO2ODDTMA_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 } = chunkC4WSHRR6_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 } = chunkC4WSHRR6_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-RA3ZJ45L.cjs.map
|
|
574
|
+
//# sourceMappingURL=chunk-RA3ZJ45L.cjs.map
|