@arbidocs/blocks 0.4.155 → 0.4.157
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/{ConnectedNativeDocxComparison-OLWRQSRS.js → ConnectedNativeDocxComparison-2PLOOXSH.js} +6 -6
- package/dist/{ConnectedNativeDocxComparison-OLWRQSRS.js.map → ConnectedNativeDocxComparison-2PLOOXSH.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-YORMOPPN.cjs → ConnectedNativeDocxComparison-S25BPUH5.cjs} +7 -7
- package/dist/{ConnectedNativeDocxComparison-YORMOPPN.cjs.map → ConnectedNativeDocxComparison-S25BPUH5.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-34EBIIFS.js → ConnectedNativeDocxEditor-JJAGMHZC.js} +4 -4
- package/dist/{ConnectedNativeDocxEditor-34EBIIFS.js.map → ConnectedNativeDocxEditor-JJAGMHZC.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-EHTWGGX3.cjs → ConnectedNativeDocxEditor-YA4HWLY4.cjs} +6 -6
- package/dist/{ConnectedNativeDocxEditor-EHTWGGX3.cjs.map → ConnectedNativeDocxEditor-YA4HWLY4.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-5DK6QGYN.cjs → ConnectedStreamedWordArtifact-EXYZAU4Y.cjs} +7 -7
- package/dist/ConnectedStreamedWordArtifact-EXYZAU4Y.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-GLIDLSAS.js → ConnectedStreamedWordArtifact-YAAXY5KY.js} +6 -6
- package/dist/{ConnectedStreamedWordArtifact-GLIDLSAS.js.map → ConnectedStreamedWordArtifact-YAAXY5KY.js.map} +1 -1
- package/dist/{NativeDocxEditor-XT5ZLFGU.js → NativeDocxEditor-JBQMH3MP.js} +3 -3
- package/dist/{NativeDocxEditor-XT5ZLFGU.js.map → NativeDocxEditor-JBQMH3MP.js.map} +1 -1
- package/dist/{NativeDocxEditor-5VBNM5I7.cjs → NativeDocxEditor-M3I776GD.cjs} +7 -7
- package/dist/{NativeDocxEditor-5VBNM5I7.cjs.map → NativeDocxEditor-M3I776GD.cjs.map} +1 -1
- package/dist/{chunk-MF5KQ4PS.js → chunk-2CWM2CFZ.js} +4 -4
- package/dist/{chunk-MF5KQ4PS.js.map → chunk-2CWM2CFZ.js.map} +1 -1
- package/dist/{chunk-6HMCF4AJ.js → chunk-5ZIYPZYE.js} +1033 -5
- package/dist/chunk-5ZIYPZYE.js.map +1 -0
- package/dist/{chunk-KHXEIEXN.js → chunk-7IRSCMNK.js} +3 -3
- package/dist/{chunk-KHXEIEXN.js.map → chunk-7IRSCMNK.js.map} +1 -1
- package/dist/{chunk-TZOQKV64.js → chunk-EWCJXUBP.js} +3 -3
- package/dist/{chunk-TZOQKV64.js.map → chunk-EWCJXUBP.js.map} +1 -1
- package/dist/{chunk-CU6LDQ57.js → chunk-F3EZDBDJ.js} +4 -4
- package/dist/{chunk-CU6LDQ57.js.map → chunk-F3EZDBDJ.js.map} +1 -1
- package/dist/{chunk-W7CWGURO.js → chunk-FTZ45WHY.js} +6 -685
- package/dist/chunk-FTZ45WHY.js.map +1 -0
- package/dist/{chunk-CQCNU5KT.cjs → chunk-IJEISII2.cjs} +6 -6
- package/dist/{chunk-CQCNU5KT.cjs.map → chunk-IJEISII2.cjs.map} +1 -1
- package/dist/{chunk-NPR5BGFF.cjs → chunk-JSQEAPTC.cjs} +26 -14
- package/dist/chunk-JSQEAPTC.cjs.map +1 -0
- package/dist/{chunk-MUDEL7UL.cjs → chunk-NPLGB4LI.cjs} +4 -703
- package/dist/chunk-NPLGB4LI.cjs.map +1 -0
- package/dist/{chunk-265GOG4W.js → chunk-ONTUMV74.js} +26 -14
- package/dist/chunk-ONTUMV74.js.map +1 -0
- package/dist/chunk-OTU5KGQ6.cjs +18 -0
- package/dist/{chunk-HUATKA3M.cjs.map → chunk-OTU5KGQ6.cjs.map} +1 -1
- package/dist/{chunk-GO3BN76C.js → chunk-PGOSIJ2I.js} +3 -3
- package/dist/{chunk-GO3BN76C.js.map → chunk-PGOSIJ2I.js.map} +1 -1
- package/dist/{chunk-WV4TD2HZ.cjs → chunk-QJFJ5JBF.cjs} +1055 -2
- package/dist/chunk-QJFJ5JBF.cjs.map +1 -0
- package/dist/chunk-S74QMZVZ.cjs +18 -0
- package/dist/{chunk-C3SMTA3C.cjs.map → chunk-S74QMZVZ.cjs.map} +1 -1
- package/dist/{chunk-KUT2Y7JF.cjs → chunk-TQIY2SVY.cjs} +5 -5
- package/dist/{chunk-KUT2Y7JF.cjs.map → chunk-TQIY2SVY.cjs.map} +1 -1
- package/dist/{chunk-757OYF6G.cjs → chunk-VY4UFXTM.cjs} +4 -4
- package/dist/{chunk-757OYF6G.cjs.map → chunk-VY4UFXTM.cjs.map} +1 -1
- package/dist/connect/docx.cjs +10 -10
- package/dist/connect/docx.js +6 -6
- package/dist/connect/index.cjs +626 -66
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +564 -9
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +43 -43
- package/dist/connect/viewer.js +5 -5
- package/dist/connection/files/index.d.ts +5 -0
- package/dist/connection/files/support.d.ts +2 -0
- package/dist/connection/files/upload/AddFromAccountsButton.d.ts +16 -0
- package/dist/connection/files/upload/ConnectedUpload.d.ts +36 -0
- package/dist/connection/files/upload/ConnectedUploadDropzone.d.ts +36 -0
- package/dist/connection/files/upload/EmptyWorkspaceUpload.d.ts +13 -0
- package/dist/connection/files/upload/useAddFromUrls.d.ts +13 -0
- package/dist/docx/index.cjs +47 -47
- package/dist/docx/index.js +3 -3
- package/dist/files/PrivacyExplainerModal.d.ts +8 -0
- package/dist/files/ShareToggle.d.ts +8 -0
- package/dist/files/UrlInputDialog.d.ts +24 -0
- package/dist/files/index.cjs +298 -278
- package/dist/files/index.d.ts +4 -0
- package/dist/files/index.js +2 -2
- package/dist/files/media-preview.d.ts +24 -0
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.cjs +96 -29
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.cjs.map +1 -1
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.d.cts +1 -1
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.d.ts +1 -1
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.js +98 -31
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.js.map +1 -1
- package/node_modules/@arbidocs/coedit/dist/index.cjs +96 -29
- package/node_modules/@arbidocs/coedit/dist/index.cjs.map +1 -1
- package/node_modules/@arbidocs/coedit/dist/index.d.cts +1 -1
- package/node_modules/@arbidocs/coedit/dist/index.d.ts +1 -1
- package/node_modules/@arbidocs/coedit/dist/index.js +98 -31
- package/node_modules/@arbidocs/coedit/dist/index.js.map +1 -1
- package/node_modules/@arbidocs/coedit/dist/server.cjs +98 -33
- package/node_modules/@arbidocs/coedit/dist/server.cjs.map +1 -1
- package/node_modules/@arbidocs/coedit/dist/server.d.cts +1 -1
- package/node_modules/@arbidocs/coedit/dist/server.d.ts +1 -1
- package/node_modules/@arbidocs/coedit/dist/server.js +99 -34
- package/node_modules/@arbidocs/coedit/dist/server.js.map +1 -1
- package/node_modules/@arbidocs/coedit/dist/{session-Cf9iu1Vt.d.cts → session-WGvWs6yO.d.cts} +22 -4
- package/node_modules/@arbidocs/coedit/dist/{session-Cf9iu1Vt.d.ts → session-WGvWs6yO.d.ts} +22 -4
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-5DK6QGYN.cjs.map +0 -1
- package/dist/chunk-265GOG4W.js.map +0 -1
- package/dist/chunk-6HMCF4AJ.js.map +0 -1
- package/dist/chunk-C3SMTA3C.cjs +0 -18
- package/dist/chunk-HUATKA3M.cjs +0 -18
- package/dist/chunk-MUDEL7UL.cjs.map +0 -1
- package/dist/chunk-NPR5BGFF.cjs.map +0 -1
- package/dist/chunk-W7CWGURO.js.map +0 -1
- package/dist/chunk-WV4TD2HZ.cjs.map +0 -1
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
var chunkCB4TIDEX_cjs = require('./chunk-CB4TIDEX.cjs');
|
|
5
5
|
var chunkFM3IRQJW_cjs = require('./chunk-FM3IRQJW.cjs');
|
|
6
6
|
var chunk464YPRAE_cjs = require('./chunk-464YPRAE.cjs');
|
|
7
|
-
var
|
|
7
|
+
var chunkJSQEAPTC_cjs = require('./chunk-JSQEAPTC.cjs');
|
|
8
8
|
var chunkLJJJ6CYH_cjs = require('./chunk-LJJJ6CYH.cjs');
|
|
9
9
|
var chunkYBJ4QGNH_cjs = require('./chunk-YBJ4QGNH.cjs');
|
|
10
10
|
var chunk2VHYOTWW_cjs = require('./chunk-2VHYOTWW.cjs');
|
|
@@ -371,7 +371,7 @@ function useConnectedHouseTemplate() {
|
|
|
371
371
|
load: async () => {
|
|
372
372
|
if (templateId) {
|
|
373
373
|
await ensureWorkspaceOpen();
|
|
374
|
-
const response = await arbi.editor.request(
|
|
374
|
+
const response = await arbi.editor.request(chunkJSQEAPTC_cjs.contentPath(templateId));
|
|
375
375
|
const [record] = await arbi.documents.get([templateId]).catch(() => []);
|
|
376
376
|
return {
|
|
377
377
|
bytes: new Uint8Array(await response.arrayBuffer()),
|
|
@@ -384,7 +384,7 @@ function useConnectedHouseTemplate() {
|
|
|
384
384
|
const deployment = await arbi.houseTemplates.deployment();
|
|
385
385
|
if (deployment) return { ...deployment, source: "deployment" };
|
|
386
386
|
}
|
|
387
|
-
return
|
|
387
|
+
return chunkJSQEAPTC_cjs.builtinHouseTemplate();
|
|
388
388
|
},
|
|
389
389
|
setFromDocument: supported && isWorkspaceOwner ? async (documentId) => {
|
|
390
390
|
await ensureWorkspaceOpen();
|
|
@@ -434,7 +434,7 @@ function ConnectedNativeDocxEditor({
|
|
|
434
434
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [
|
|
435
435
|
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." }),
|
|
436
436
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
437
|
-
|
|
437
|
+
chunkJSQEAPTC_cjs.NativeDocxEditor,
|
|
438
438
|
{
|
|
439
439
|
...props,
|
|
440
440
|
snapshot: props.snapshot || openFailed,
|
|
@@ -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-
|
|
557
|
-
//# sourceMappingURL=chunk-
|
|
556
|
+
//# sourceMappingURL=chunk-IJEISII2.cjs.map
|
|
557
|
+
//# sourceMappingURL=chunk-IJEISII2.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/docx/support.tsx","../src/connection/ConnectedWorkflowLauncher.tsx","../src/connection/docx/useConnectedDocxReferences.tsx","../src/connection/ConnectedWorkflowsTable.tsx","../src/connection/docx/useConnectedHouseTemplate.ts","../src/connection/docx/ConnectedNativeDocxEditor.tsx"],"names":["createContext","jsx","useContext","useConnectedDocuments","useConnectedTags","useMemo","buildWorkflowScopeSource","documentScopeLabels","useAgents","useBlocksEnvironment","useConnectedWorkspace","useUploadDocuments","useThumbnails","useRef","useState","useCallback","jsxs","Fragment","WorkflowDocumentsField","WorkflowLauncher","DocumentPicker","useArbi","buildDeepLinkUrl","parseDeepLinkPath","useWorkspaceUsers","workflowTriggerType","fmtDate","useWorkflows","useConnectedConversations","useUpdateWorkflow","useDeleteWorkflow","useRunWorkflow","useEffect","WorkflowsTable","useSetWorkspaceHouseTemplate","useWorkspaces","supportsHouseTemplates","workspaceHouseTemplateId","useHouseTemplateCandidates","contentPath","builtinHouseTemplate","isCandidate","useRegisterOpenDocument","NativeDocxEditor","useQueryClient","useOptionalDocumentTools","loadDocxFonts","refreshDocuments"],"mappings":"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","file":"chunk-CQCNU5KT.cjs","sourcesContent":["/**\n * What a host adds to the connected Word editor that the platform API alone cannot give: the\n * workspace's definitions (facts labelled \"Definitions\"), image generation (an assistant run), the\n * host's leave-page guard, and a comment to open the editor at. Every field is optional; without a\n * provider the editor simply offers less (no Defined term, no Generate image).\n */\n\nimport { createContext, useContext, type ReactNode } from 'react'\nimport type { DefinitionSource } from '../../tags/definitions'\nimport type { DocxImageGeneration } from '../../docx/layout/GenerateImage'\n\nexport interface NativeDocxSupport {\n /** The workspace's definitions. Present: Insert offers Defined term and `@@` the type-ahead. */\n definitions?: () => Promise<DefinitionSource[]>\n /** The platform's image generation. Present: Insert offers Generate image. */\n imageGeneration?: DocxImageGeneration\n /** The open editor has (or no longer has) unsaved changes. */\n onDirtyChange?: (dirty: boolean) => void\n /** A comment thread to open when its document opens (a notification's link). */\n commentTarget?: { documentId: string; commentId: string } | null\n}\n\nconst NativeDocxSupportContext = createContext<NativeDocxSupport>({})\n\nexport function NativeDocxSupportProvider({\n value,\n children,\n}: {\n value: NativeDocxSupport\n children: ReactNode\n}) {\n return (\n <NativeDocxSupportContext.Provider value={value}>{children}</NativeDocxSupportContext.Provider>\n )\n}\n\nexport function useNativeDocxSupport(): NativeDocxSupport {\n return useContext(NativeDocxSupportContext)\n}\n","/**\n * The workflow launcher bound to the connection: the open workspace's folders, labels and files\n * behind its scope and `documents` fields (files can be added right there), and the user's agents\n * behind \"Run as\". The host still says what a launch does (`onLaunch`): open a chat, start a task.\n */\n\nimport { useCallback, useMemo, useRef, useState } from 'react'\nimport { useAgents, useThumbnails, useUploadDocuments } from '@arbidocs/react'\nimport { WorkflowLauncher, type WorkflowLauncherProps } from '../agents/workflows/WorkflowLauncher'\nimport {\n WorkflowDocumentsField,\n type WorkflowDocumentsFieldLabels,\n type WorkflowFieldDocument,\n} from '../agents/workflows/WorkflowDocumentsField'\nimport type { WorkflowScopeSource } from '../agents/workflows/WorkflowConfigDialog'\nimport { buildWorkflowScopeSource, documentScopeLabels } from '../agents/workflows/workspaceScope'\nimport type { AgentOption } from '../agents/workflows/AgentSelect'\nimport type { WorkflowField, WorkflowScope } from '../agents/workflows/types'\nimport { useBlocksEnvironment } from '../provider/BlocksProvider'\nimport { useConnectedWorkspace } from './ConnectionProvider'\nimport { useConnectedDocuments, useConnectedTags, type ConnectedDocument } from './workspaceData'\n\nconst IMAGE_FILE_TYPES = new Set(['png', 'jpg', 'jpeg', 'gif', 'bmp', 'tiff', 'webp'])\n\n/** A workspace document as a `documents` field offers it. */\nexport function toWorkflowFieldDocument(doc: ConnectedDocument): WorkflowFieldDocument {\n // Pages and tokens are a text-parsing concept: never meaningful for an image.\n const isImage = IMAGE_FILE_TYPES.has((doc.file_type ?? '').toLowerCase())\n return {\n id: doc.external_id,\n title: doc.doc_metadata?.title || doc.file_name || doc.external_id,\n fileName: doc.file_name,\n pages: isImage ? null : (doc.n_pages ?? null),\n tokens: isImage ? null : (doc.tokens ?? null),\n status: doc.status,\n isImage,\n }\n}\n\n/** The open workspace's folders and labels for a workflow's scope field. */\nexport function useConnectedWorkflowScopeSource(): WorkflowScopeSource {\n const { data: docs } = useConnectedDocuments()\n const { data: tags } = useConnectedTags()\n return useMemo(() => buildWorkflowScopeSource(docs, documentScopeLabels(tags)), [docs, tags])\n}\n\n/** The user's agents, for \"Run as\". */\nexport function useConnectedAgentOptions(): AgentOption[] {\n const { data: agents } = useAgents()\n return useMemo(\n () => (agents ?? []).map((a) => ({ id: a.external_id, label: a.given_name || a.email })),\n [agents]\n )\n}\n\nexport interface ConnectedWorkflowDocumentsFieldProps {\n field: WorkflowField\n value: WorkflowScope\n onChange: (value: WorkflowScope) => void\n /** Add files the host's way (its upload dialog). Absent: they are uploaded here. */\n onAddFiles?: (files?: File[]) => void\n labels?: Partial<WorkflowDocumentsFieldLabels>\n}\n\n/**\n * A workflow `documents` field over the open workspace's files: pick, add (or drop) files, see the\n * chosen images. A launcher's or a task composer's `renderDocuments`.\n */\nexport function ConnectedWorkflowDocumentsField({\n field,\n value,\n onChange,\n onAddFiles,\n labels,\n}: ConnectedWorkflowDocumentsFieldProps) {\n const { notify } = useBlocksEnvironment()\n const { ensureWorkspaceOpen } = useConnectedWorkspace()\n const { data: docs, loaded } = useConnectedDocuments()\n const uploadDocuments = useUploadDocuments()\n const documents = useMemo(() => docs.map(toWorkflowFieldDocument), [docs])\n const chosen = value.documents ?? []\n const { data: thumbnails } = useThumbnails(chosen, { enabled: (field.max ?? 1) > 1 })\n const input = useRef<HTMLInputElement>(null)\n const [adding, setAdding] = useState(false)\n\n const upload = useCallback(\n async (files: File[]) => {\n setAdding(true)\n try {\n await ensureWorkspaceOpen()\n // Each new document joins the shared list as it lands.\n for (const file of files) await uploadDocuments.mutateAsync({ files: [file] })\n } catch (error) {\n notify(error instanceof Error && error.message ? error.message : String(error), 'error')\n } finally {\n setAdding(false)\n }\n },\n [uploadDocuments, ensureWorkspaceOpen, notify]\n )\n\n return (\n <>\n {!onAddFiles && (\n <input\n ref={input}\n type=\"file\"\n multiple\n className=\"hidden\"\n aria-label=\"Add files\"\n data-testid=\"workflow-add-files-input\"\n onChange={(e) => {\n const files = Array.from(e.target.files ?? [])\n e.target.value = ''\n if (files.length) void upload(files)\n }}\n />\n )}\n <WorkflowDocumentsField\n field={field}\n value={value}\n onChange={onChange}\n documents={documents}\n loaded={loaded}\n thumbnailOf={(id) => thumbnails?.[id]}\n onAddFiles={\n onAddFiles ?? ((files) => (files?.length ? void upload(files) : input.current?.click()))\n }\n adding={adding}\n labels={labels}\n />\n </>\n )\n}\n\nexport interface ConnectedWorkflowLauncherProps extends Omit<\n WorkflowLauncherProps,\n 'scopeSource' | 'renderDocuments' | 'agents'\n> {\n /** Add files from a `documents` field the host's way (its upload dialog). Absent: uploaded here. */\n onAddFiles?: (files?: File[]) => void\n}\n\nexport function ConnectedWorkflowLauncher({\n onAddFiles,\n ...props\n}: ConnectedWorkflowLauncherProps) {\n const scopeSource = useConnectedWorkflowScopeSource()\n const agents = useConnectedAgentOptions()\n return (\n <WorkflowLauncher\n {...props}\n scopeSource={scopeSource}\n agents={agents}\n renderDocuments={(field, value, onChange) => (\n <ConnectedWorkflowDocumentsField\n field={field}\n value={value}\n onChange={onChange}\n onAddFiles={onAddFiles}\n />\n )}\n />\n )\n}\n","/**\n * The Word editor's references to the workspace's other documents: the documents and their\n * passages (the same parsed passages a fact's citations quote), the ARBI address of a passage\n * (`/wrk-…/doc-…/cnk-…`, the deep link that opens a document at a passage, so the link works from\n * Word too), and opening one wherever the host shows documents, highlighted like a citation.\n */\nimport { useMemo, useRef } from 'react'\nimport { useArbi } from '@arbidocs/react'\nimport type { DocxReferencesAdapter } from '../../docx/references/CrossReferences'\nimport { DocumentPicker } from '../../settings/DocumentPicker'\nimport { buildDeepLinkUrl, parseDeepLinkPath } from '../../lib/deep-link'\nimport { useBlocksEnvironment } from '../../provider/BlocksProvider'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { toWorkflowFieldDocument } from '../ConnectedWorkflowLauncher'\nimport { useConnectedDocuments, type ConnectedDocument } from '../workspaceData'\n\ninterface ParsedChunk {\n content?: string | null\n metadata?: { chunk_ext_id?: string | null; page_number?: number | null } | null\n}\n\n/** Top-level documents only: an attachment opens with its parent. */\nconst isTopLevel = (doc: ConnectedDocument) => !doc.parent_ext_id\n\nfunction ReferencePicker({\n documents,\n selectedId,\n onSelect,\n}: {\n documents: ConnectedDocument[]\n selectedId: string | null\n onSelect: (documentId: string) => void\n}) {\n const groups = useMemo(() => {\n const docs = documents\n .filter(isTopLevel)\n .map(toWorkflowFieldDocument)\n .sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase()))\n return [{ id: 'all', heading: 'In this workspace', docs }]\n }, [documents])\n const selected = groups[0].docs.find((d) => d.id === selectedId)\n return (\n <DocumentPicker\n groups={groups}\n value={selectedId ?? ''}\n onValueChange={onSelect}\n selected={selected}\n labels={{ placeholder: 'Search documents…' }}\n />\n )\n}\n\nexport function useConnectedDocxReferences(): DocxReferencesAdapter {\n const arbi = useArbi()\n const { workspaceId } = useConnectedWorkspace()\n const { openDocument, runtimeConfig } = useBlocksEnvironment()\n const { data: documents } = useConnectedDocuments()\n // Read when called (the picker, a link): the list grows while the editor is open.\n const documentsRef = useRef(documents)\n documentsRef.current = documents\n return useMemo<DocxReferencesAdapter>(\n () => ({\n documents: async () =>\n documentsRef.current\n .filter(isTopLevel)\n .map((d) => ({ id: d.external_id, title: toWorkflowFieldDocument(d).title })),\n passages: async (documentId) => {\n const parsed = await arbi.documents.getParsedContent(documentId, 'final')\n return ((parsed.chunks ?? []) as ParsedChunk[]).flatMap((chunk) =>\n chunk.metadata?.chunk_ext_id && chunk.content?.trim()\n ? [\n {\n chunkId: chunk.metadata.chunk_ext_id,\n page: chunk.metadata.page_number ?? null,\n text: chunk.content,\n },\n ]\n : []\n )\n },\n linkFor: ({ documentId, chunkId, page }) => {\n const url = buildDeepLinkUrl(\n { workspaceId: workspaceId ?? undefined, documentId, chunkId },\n runtimeConfig.deploymentDomain\n )\n return page ? `${url}?page=${page}` : url\n },\n targetOf: (href) => {\n let url: URL\n try {\n url = new URL(href, window.location.origin)\n } catch {\n return null\n }\n const { documentId, chunkId } = parseDeepLinkPath(url.pathname)\n if (!documentId || !chunkId) return null\n const page = Number(url.searchParams.get('page')) || null\n return { documentId, chunkId, page }\n },\n open: ({ documentId, chunkId, page }) =>\n openDocument(documentId, { passageId: chunkId, page: page ?? undefined }),\n renderDocumentPicker: (onSelect, selectedId) => (\n <ReferencePicker\n documents={documentsRef.current}\n selectedId={selectedId}\n onSelect={onSelect}\n />\n ),\n }),\n [arbi, workspaceId, openDocument, runtimeConfig.deploymentDomain]\n )\n}\n","/**\n * The saved workflows bound to the connection: when each starts, its last run (a link to the thread\n * it created) and next run, who runs it, pause and resume, share, run now, delete (one or many), and\n * the workflow's history. The host opens a workflow (its builder) and its history; threads open\n * through the environment's `openConversation`, failures are told through its `notify`.\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport {\n useAgents,\n useDeleteWorkflow,\n useRunWorkflow,\n useUpdateWorkflow,\n useWorkflows,\n useWorkspaceUsers,\n type WorkflowResponse,\n} from '@arbidocs/react'\nimport { WorkflowsTable, type WorkflowsTableProps } from '../agents/tasks/WorkflowsTable'\nimport { workflowTriggerType } from '../agents/tasks/workflowRows'\nimport { fmtDate } from '../lib/format'\nimport { useBlocksEnvironment } from '../provider/BlocksProvider'\nimport { useConnectedWorkspace } from './ConnectionProvider'\nimport { useConnectedConversations } from './workspaceData'\n\n/** The viewer's role in the open workspace, and the workspace's members. */\nexport function useConnectedWorkspaceRole() {\n const { workspaceId, live, userId, ensureWorkspaceOpen } = useConnectedWorkspace()\n const { data: members = [] } = useWorkspaceUsers(workspaceId ?? undefined, {\n enabled: live && !!workspaceId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const role = members.find((m) => m.user.external_id === userId)?.role\n return {\n members,\n role,\n /** An owner or a collaborator edits, pauses, resumes and runs what is shared with the workspace. */\n canEditShared: role === 'owner' || role === 'collaborator',\n /** With an item's creator, the only one who deletes it. */\n isWorkspaceOwner: role === 'owner',\n }\n}\n\nexport interface ConnectedWorkflowsTableLabels {\n /** A change (pause, share, delete) that failed without a message. */\n updateFailed: string\n deleteTitle: string\n deleteOne: (name: string) => string\n deleteMany: (count: number) => string\n /** A run that failed: its history has the error report. */\n runFailed: string\n /** A run that created no thread. */\n noThread: string\n /** A document action that started (it has no thread): what is happening. */\n documentAction: (workflow: WorkflowResponse) => string\n untitledTask: string\n}\n\nexport const DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS: ConnectedWorkflowsTableLabels = {\n updateFailed: 'Could not update the workflow',\n deleteTitle: 'Delete workflow',\n deleteOne: (name) => `Delete “${name}”? Threads it already created stay.`,\n deleteMany: (count) => `Delete ${count} workflows? Threads they already created stay.`,\n runFailed: 'The workflow failed. You can send an error report from its history.',\n noThread: 'The workflow did not create a thread.',\n documentAction: (workflow) =>\n workflow.action?.type === 'email_documents'\n ? 'Preparing your document email'\n : 'Reviewing documents',\n untitledTask: 'Untitled thread',\n}\n\ntype TableProps = WorkflowsTableProps<WorkflowResponse>\n\nexport interface ConnectedWorkflowsTableProps extends Omit<\n TableProps,\n | 'workflows'\n | 'isLoading'\n | 'busyId'\n | 'describeTrigger'\n | 'formatDate'\n | 'onToggleActive'\n | 'onToggleShared'\n | 'onDelete'\n | 'onDeleteMany'\n | 'onToggleActiveMany'\n | 'onRun'\n | 'onOpenThread'\n | 'lastRuns'\n | 'agentNames'\n | 'taskNames'\n | 'canEditShared'\n | 'isWorkspaceOwner'\n> {\n /** Which saved workflows to list (e.g. those on a schedule). Default: all. */\n filter?: (workflow: WorkflowResponse) => boolean\n /** When a workflow starts, in the host's words. Default: its trigger type. */\n describeTrigger?: TableProps['describeTrigger']\n formatDate?: TableProps['formatDate']\n connectedLabels?: Partial<ConnectedWorkflowsTableLabels>\n}\n\nconst messageOf = (error: unknown) => (error instanceof Error ? error.message : '')\n\nexport function ConnectedWorkflowsTable({\n filter,\n describeTrigger = (w) => workflowTriggerType(w).replaceAll('_', ' '),\n formatDate = fmtDate,\n onViewRuns,\n connectedLabels,\n ...tableProps\n}: ConnectedWorkflowsTableProps) {\n const l = { ...DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, ...connectedLabels }\n const { notify, confirm, openConversation } = useBlocksEnvironment()\n const { canEditShared, isWorkspaceOwner } = useConnectedWorkspaceRole()\n const { data: saved = [], isLoading } = useWorkflows({ live: true })\n const { data: conversations, refetch } = useConnectedConversations({ live: true })\n const { data: agents = [] } = useAgents()\n const update = useUpdateWorkflow()\n const remove = useDeleteWorkflow()\n const run = useRunWorkflow()\n const [busyId, setBusyId] = useState<string | null>(null)\n\n const workflows = useMemo(() => (filter ? saved.filter(filter) : saved), [saved, filter])\n // A clock or an event fired a workflow: the thread it created is new to the conversation list.\n const firingStamp = saved.map((w) => `${w.external_id}:${w.last_fired_at ?? ''}`).join('|')\n useEffect(() => {\n void refetch?.()\n }, [firingStamp, refetch])\n\n const lastRuns = useMemo(() => {\n const out: NonNullable<TableProps['lastRuns']> = {}\n for (const c of conversations) {\n const id = c.workflow_ext_id\n if (id && (!out[id] || Date.parse(c.created_at) > Date.parse(out[id].at)))\n out[id] = { conversationId: c.external_id, at: c.created_at, threadStatus: c.status }\n }\n return out\n }, [conversations])\n const agentNames = useMemo(\n () => Object.fromEntries(agents.map((a) => [a.external_id, a.given_name || a.email])),\n [agents]\n )\n const taskNames = useMemo(\n () =>\n Object.fromEntries(\n conversations\n .filter((c) => c.status != null)\n .map((c) => [c.external_id, c.title || l.untitledTask])\n ),\n [conversations, l.untitledTask]\n )\n\n const act = async (workflow: WorkflowResponse, action: () => Promise<unknown>) => {\n setBusyId(workflow.external_id)\n try {\n await action()\n } catch (error) {\n notify(messageOf(error) || l.updateFailed, 'error')\n } finally {\n setBusyId(null)\n }\n }\n const setActive = (workflow: WorkflowResponse, active: boolean) =>\n act(workflow, () => update.mutateAsync({ workflowId: workflow.external_id, patch: { active } }))\n const deleteAll = async (items: WorkflowResponse[]) => {\n if (!items.length) return\n const ok = await confirm({\n title: l.deleteTitle,\n message: items.length === 1 ? l.deleteOne(items[0].name) : l.deleteMany(items.length),\n })\n if (!ok) return\n for (const workflow of items)\n await act(workflow, () => remove.mutateAsync(workflow.external_id))\n }\n\n return (\n <WorkflowsTable\n {...tableProps}\n workflows={workflows}\n isLoading={isLoading}\n busyId={busyId}\n describeTrigger={describeTrigger}\n formatDate={formatDate}\n agentNames={agentNames}\n taskNames={taskNames}\n lastRuns={lastRuns}\n canEditShared={canEditShared}\n isWorkspaceOwner={isWorkspaceOwner}\n onOpenThread={(conversationId) => openConversation(conversationId)}\n onViewRuns={onViewRuns}\n onToggleActive={(workflow, active) => void setActive(workflow, active)}\n onToggleActiveMany={(items, active) => {\n void (async () => {\n for (const workflow of items) await setActive(workflow, active)\n })()\n }}\n onToggleShared={(workflow, shared) =>\n void act(workflow, () =>\n update.mutateAsync({ workflowId: workflow.external_id, patch: { shared } })\n )\n }\n onDelete={(workflow) => void deleteAll([workflow])}\n onDeleteMany={(items) => void deleteAll(items)}\n onRun={(workflow) =>\n void act(workflow, async () => {\n const result = await run.mutateAsync(workflow.external_id)\n if (result.conversation_ext_id) openConversation(result.conversation_ext_id)\n if (result.error) {\n onViewRuns?.(workflow)\n notify(l.runFailed, 'error')\n return\n }\n if (result.execution_id && !result.conversation_ext_id) {\n // A document action runs without a thread: its history shows how it goes.\n onViewRuns?.(workflow)\n notify(l.documentAction(workflow), 'success')\n return\n }\n if (!result.conversation_ext_id) throw new Error(l.noThread)\n })\n }\n />\n )\n}\n","/**\n * The house template for the open workspace: its own (a document of the workspace), else the\n * deployment's default, else ARBI's built-in legal template. A workspace owner can make a document\n * the house template once the server supports it.\n */\nimport { useMemo } from 'react'\nimport {\n supportsHouseTemplates,\n useArbi,\n useHouseTemplateCandidates,\n useSetWorkspaceHouseTemplate,\n useWorkspaces,\n workspaceHouseTemplateId,\n} from '@arbidocs/react'\nimport { contentPath } from '../../docx/NativeDocxEditor'\nimport {\n builtinHouseTemplate,\n type HouseTemplate,\n type HouseTemplateHost,\n} from '../../docx/template/HouseTemplate'\nimport { isCandidate } from '../../docx/template/candidates'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { useConnectedWorkspaceRole } from '../ConnectedWorkflowsTable'\n\nexport function useConnectedHouseTemplate(): HouseTemplateHost {\n const arbi = useArbi()\n const { mutateAsync: setWorkspaceTemplate } = useSetWorkspaceHouseTemplate()\n const { workspaceId, live, ensureWorkspaceOpen } = useConnectedWorkspace()\n const { data: workspaces } = useWorkspaces({ enabled: live })\n const workspace = workspaces?.find((w) => w.external_id === workspaceId)\n const { isWorkspaceOwner } = useConnectedWorkspaceRole()\n const supported = supportsHouseTemplates(workspace)\n const templateId = workspaceHouseTemplateId(workspace)\n // Only an eligible document (shared, Word, here or in a public workspace) is offered as the template.\n const { data: candidates } = useHouseTemplateCandidates(\n workspaceId,\n supported && isWorkspaceOwner\n )\n return useMemo<HouseTemplateHost>(\n () => ({\n load: async (): Promise<HouseTemplate> => {\n if (templateId) {\n await ensureWorkspaceOpen()\n const response = await arbi.editor.request(contentPath(templateId))\n const [record] = await arbi.documents.get([templateId]).catch(() => [])\n return {\n bytes: new Uint8Array(await response.arrayBuffer()),\n name: record?.file_name ?? 'House template.docx',\n source: 'workspace',\n documentId: templateId,\n }\n }\n if (supported) {\n const deployment = await arbi.houseTemplates.deployment()\n if (deployment) return { ...deployment, source: 'deployment' }\n }\n return builtinHouseTemplate()\n },\n setFromDocument:\n supported && isWorkspaceOwner\n ? async (documentId) => {\n await ensureWorkspaceOpen()\n await setWorkspaceTemplate(documentId)\n }\n : undefined,\n isEligible: (documentId) => isCandidate(candidates, documentId),\n }),\n [\n arbi,\n setWorkspaceTemplate,\n supported,\n templateId,\n isWorkspaceOwner,\n candidates,\n ensureWorkspaceOpen,\n ]\n )\n}\n","import { useMemo, useRef, useState } from 'react'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { refreshDocuments, useArbi, useWorkspaceUsers } from '@arbidocs/react'\nimport { useOptionalDocumentTools } from '@arbidocs/react/document-tools'\nimport {\n NativeDocxEditor,\n type NativeDocxAdapter,\n type NativeDocxEditorProps,\n} from '../../docx/NativeDocxEditor'\nimport { loadDocxFonts } from '../../docx/fonts'\nimport { useRegisterOpenDocument } from '../../chat/open-document'\nimport { useBlocksEnvironment } from '../../provider/BlocksProvider'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { useNativeDocxSupport } from './support'\nimport { useConnectedDocxReferences } from './useConnectedDocxReferences'\nimport { useConnectedHouseTemplate } from './useConnectedHouseTemplate'\n\nexport type ConnectedNativeDocxEditorProps = Omit<NativeDocxEditorProps, 'adapter'> & {\n fontBaseUrl?: string\n}\n\n/**\n * The native Word editor on the signed-in ARBI session, under any host (a `ConnectionProvider`, or\n * the host's own `ArbiProvider` + session state). Until a live session has opened, a failure to\n * open one falls back to the saved copy, read-only, so the document is still readable; later token\n * refreshes are not guarded (switching modes would drop unsaved edits).\n */\nexport function ConnectedNativeDocxEditor({\n fontBaseUrl = '/native-docx/fonts',\n ...props\n}: ConnectedNativeDocxEditorProps) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n const { workspaceId } = useConnectedWorkspace()\n const { commentTarget } = useNativeDocxSupport()\n const [openFailed, setOpenFailed] = useState(false)\n const hasOpened = useRef(false)\n const guardedAdapter = useMemo<NativeDocxAdapter>(\n () => ({\n ...adapter,\n open: async (documentId) => {\n try {\n const session = await adapter.open(documentId)\n hasOpened.current = true\n return session\n } catch (error) {\n if (!hasOpened.current) setOpenFailed(true)\n throw error\n }\n },\n }),\n [adapter]\n )\n // Drafting mode: the saved Word document being edited is what the chat is about. A history\n // snapshot, a streamed preview, an unsaved draft and an embedded body field are not.\n const live = !props.snapshot && !props.stream && !props.draftContent && !props.compact\n useRegisterOpenDocument({ documentId: live ? props.documentId : null, workspaceId })\n const initialCommentId =\n props.initialCommentId ??\n (commentTarget?.documentId === props.documentId ? commentTarget.commentId : undefined)\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n {openFailed && (\n <p role=\"status\" className=\"text-muted-foreground border-b px-3 py-2 text-xs\">\n Co-editing isn't available for this document right now, so this is a read-only copy\n of the last saved version.\n </p>\n )}\n <div className=\"min-h-0 flex-1\">\n <NativeDocxEditor\n {...props}\n snapshot={props.snapshot || openFailed}\n initialCommentId={initialCommentId}\n adapter={guardedAdapter}\n />\n </div>\n </div>\n )\n}\n\n/** The access token changed (a refresh): the live room is told the new one. */\nfunction tokenChanges(arbi: ReturnType<typeof useArbi>) {\n return (listener: () => void) => {\n if (!arbi.isLoggedIn) return () => {}\n const session = arbi.getClient().session\n let token = session.getState().accessToken\n return session.subscribe((state) => {\n if (state.accessToken === token) return\n token = state.accessToken\n listener()\n })\n }\n}\n\n/**\n * The native Word adapter on the signed-in session: the editor transport, the people to mention,\n * cross-references, the house template, and the host's extras (`NativeDocxSupportProvider`).\n */\nexport function useConnectedNativeDocxAdapter(fontBaseUrl = '/native-docx/fonts') {\n const arbi = useArbi()\n const { workspaceId, live, user, ensureWorkspaceOpen } = useConnectedWorkspace()\n const queries = useQueryClient()\n const { notify } = useBlocksEnvironment()\n const tools = useOptionalDocumentTools()\n const support = useNativeDocxSupport()\n const references = useConnectedDocxReferences()\n const houseTemplate = useConnectedHouseTemplate()\n const { data: members } = useWorkspaceUsers(workspaceId ?? undefined, {\n enabled: live && !!workspaceId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const onDocumentsChanged = tools?.onDocumentsChanged\n // Tracked changes and comments are authored by the user's first name.\n const author = (live && arbi.user.profile()?.givenName) || user?.name || 'You'\n const adapter = useMemo<NativeDocxAdapter>(\n () => ({\n request: async (path, options) => {\n await ensureWorkspaceOpen()\n return arbi.editor.request(path, options)\n },\n open: async (id) => {\n await ensureWorkspaceOpen()\n return (\n await arbi.editor.request(`/${encodeURIComponent(id)}/session`, { method: 'POST' })\n ).json()\n },\n save: async (id, state) =>\n (\n await arbi.editor.request(`/${encodeURIComponent(id)}/save`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ state }),\n })\n ).json(),\n loadFonts: () => loadDocxFonts(fontBaseUrl),\n baseUrl: arbi.getConnectionInfo()?.baseUrl || window.location.origin,\n author,\n subscribeTokenChanges: tokenChanges(arbi),\n onDirtyChange: support.onDirtyChange,\n // The document's row moves to the saved version in place: through the host when it keeps\n // the lists (its document tools refresh them), else here.\n onVersionSaved: async (id) => {\n await (onDocumentsChanged\n ? onDocumentsChanged([id], 'version')\n : refreshDocuments(queries, arbi, [id]))\n },\n notify,\n mentions: members?.map(({ user: member }) => ({\n id: member.external_id,\n name: [member.given_name, member.family_name].filter(Boolean).join(' '),\n kind: member.external_id.startsWith('agt-') ? 'agent' : 'human',\n })),\n requestAgent: async (id, request) => {\n const response = await arbi.editor.request(`/${encodeURIComponent(id)}/mentions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n comment_id: request.commentId,\n instruction: request.instruction,\n request_id: request.requestId,\n recipient_ids: request.recipientIds,\n }),\n })\n const delivery = (await response.json()) as { response_ids: string[] }\n notify('Mention delivered.', 'success')\n return { responseIds: delivery.response_ids || [] }\n },\n getAgentStatus: async (responseId) => (await arbi.assistant.getResponse(responseId)).status,\n definitions: support.definitions,\n references,\n imageGeneration: support.imageGeneration,\n houseTemplate,\n }),\n [\n arbi,\n author,\n members,\n ensureWorkspaceOpen,\n fontBaseUrl,\n queries,\n notify,\n onDocumentsChanged,\n support,\n references,\n houseTemplate,\n ]\n )\n return adapter\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/connection/docx/support.tsx","../src/connection/ConnectedWorkflowLauncher.tsx","../src/connection/docx/useConnectedDocxReferences.tsx","../src/connection/ConnectedWorkflowsTable.tsx","../src/connection/docx/useConnectedHouseTemplate.ts","../src/connection/docx/ConnectedNativeDocxEditor.tsx"],"names":["createContext","jsx","useContext","useConnectedDocuments","useConnectedTags","useMemo","buildWorkflowScopeSource","documentScopeLabels","useAgents","useBlocksEnvironment","useConnectedWorkspace","useUploadDocuments","useThumbnails","useRef","useState","useCallback","jsxs","Fragment","WorkflowDocumentsField","WorkflowLauncher","DocumentPicker","useArbi","buildDeepLinkUrl","parseDeepLinkPath","useWorkspaceUsers","workflowTriggerType","fmtDate","useWorkflows","useConnectedConversations","useUpdateWorkflow","useDeleteWorkflow","useRunWorkflow","useEffect","WorkflowsTable","useSetWorkspaceHouseTemplate","useWorkspaces","supportsHouseTemplates","workspaceHouseTemplateId","useHouseTemplateCandidates","contentPath","builtinHouseTemplate","isCandidate","useRegisterOpenDocument","NativeDocxEditor","useQueryClient","useOptionalDocumentTools","loadDocxFonts","refreshDocuments"],"mappings":"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","file":"chunk-IJEISII2.cjs","sourcesContent":["/**\n * What a host adds to the connected Word editor that the platform API alone cannot give: the\n * workspace's definitions (facts labelled \"Definitions\"), image generation (an assistant run), the\n * host's leave-page guard, and a comment to open the editor at. Every field is optional; without a\n * provider the editor simply offers less (no Defined term, no Generate image).\n */\n\nimport { createContext, useContext, type ReactNode } from 'react'\nimport type { DefinitionSource } from '../../tags/definitions'\nimport type { DocxImageGeneration } from '../../docx/layout/GenerateImage'\n\nexport interface NativeDocxSupport {\n /** The workspace's definitions. Present: Insert offers Defined term and `@@` the type-ahead. */\n definitions?: () => Promise<DefinitionSource[]>\n /** The platform's image generation. Present: Insert offers Generate image. */\n imageGeneration?: DocxImageGeneration\n /** The open editor has (or no longer has) unsaved changes. */\n onDirtyChange?: (dirty: boolean) => void\n /** A comment thread to open when its document opens (a notification's link). */\n commentTarget?: { documentId: string; commentId: string } | null\n}\n\nconst NativeDocxSupportContext = createContext<NativeDocxSupport>({})\n\nexport function NativeDocxSupportProvider({\n value,\n children,\n}: {\n value: NativeDocxSupport\n children: ReactNode\n}) {\n return (\n <NativeDocxSupportContext.Provider value={value}>{children}</NativeDocxSupportContext.Provider>\n )\n}\n\nexport function useNativeDocxSupport(): NativeDocxSupport {\n return useContext(NativeDocxSupportContext)\n}\n","/**\n * The workflow launcher bound to the connection: the open workspace's folders, labels and files\n * behind its scope and `documents` fields (files can be added right there), and the user's agents\n * behind \"Run as\". The host still says what a launch does (`onLaunch`): open a chat, start a task.\n */\n\nimport { useCallback, useMemo, useRef, useState } from 'react'\nimport { useAgents, useThumbnails, useUploadDocuments } from '@arbidocs/react'\nimport { WorkflowLauncher, type WorkflowLauncherProps } from '../agents/workflows/WorkflowLauncher'\nimport {\n WorkflowDocumentsField,\n type WorkflowDocumentsFieldLabels,\n type WorkflowFieldDocument,\n} from '../agents/workflows/WorkflowDocumentsField'\nimport type { WorkflowScopeSource } from '../agents/workflows/WorkflowConfigDialog'\nimport { buildWorkflowScopeSource, documentScopeLabels } from '../agents/workflows/workspaceScope'\nimport type { AgentOption } from '../agents/workflows/AgentSelect'\nimport type { WorkflowField, WorkflowScope } from '../agents/workflows/types'\nimport { useBlocksEnvironment } from '../provider/BlocksProvider'\nimport { useConnectedWorkspace } from './ConnectionProvider'\nimport { useConnectedDocuments, useConnectedTags, type ConnectedDocument } from './workspaceData'\n\nconst IMAGE_FILE_TYPES = new Set(['png', 'jpg', 'jpeg', 'gif', 'bmp', 'tiff', 'webp'])\n\n/** A workspace document as a `documents` field offers it. */\nexport function toWorkflowFieldDocument(doc: ConnectedDocument): WorkflowFieldDocument {\n // Pages and tokens are a text-parsing concept: never meaningful for an image.\n const isImage = IMAGE_FILE_TYPES.has((doc.file_type ?? '').toLowerCase())\n return {\n id: doc.external_id,\n title: doc.doc_metadata?.title || doc.file_name || doc.external_id,\n fileName: doc.file_name,\n pages: isImage ? null : (doc.n_pages ?? null),\n tokens: isImage ? null : (doc.tokens ?? null),\n status: doc.status,\n isImage,\n }\n}\n\n/** The open workspace's folders and labels for a workflow's scope field. */\nexport function useConnectedWorkflowScopeSource(): WorkflowScopeSource {\n const { data: docs } = useConnectedDocuments()\n const { data: tags } = useConnectedTags()\n return useMemo(() => buildWorkflowScopeSource(docs, documentScopeLabels(tags)), [docs, tags])\n}\n\n/** The user's agents, for \"Run as\". */\nexport function useConnectedAgentOptions(): AgentOption[] {\n const { data: agents } = useAgents()\n return useMemo(\n () => (agents ?? []).map((a) => ({ id: a.external_id, label: a.given_name || a.email })),\n [agents]\n )\n}\n\nexport interface ConnectedWorkflowDocumentsFieldProps {\n field: WorkflowField\n value: WorkflowScope\n onChange: (value: WorkflowScope) => void\n /** Add files the host's way (its upload dialog). Absent: they are uploaded here. */\n onAddFiles?: (files?: File[]) => void\n labels?: Partial<WorkflowDocumentsFieldLabels>\n}\n\n/**\n * A workflow `documents` field over the open workspace's files: pick, add (or drop) files, see the\n * chosen images. A launcher's or a task composer's `renderDocuments`.\n */\nexport function ConnectedWorkflowDocumentsField({\n field,\n value,\n onChange,\n onAddFiles,\n labels,\n}: ConnectedWorkflowDocumentsFieldProps) {\n const { notify } = useBlocksEnvironment()\n const { ensureWorkspaceOpen } = useConnectedWorkspace()\n const { data: docs, loaded } = useConnectedDocuments()\n const uploadDocuments = useUploadDocuments()\n const documents = useMemo(() => docs.map(toWorkflowFieldDocument), [docs])\n const chosen = value.documents ?? []\n const { data: thumbnails } = useThumbnails(chosen, { enabled: (field.max ?? 1) > 1 })\n const input = useRef<HTMLInputElement>(null)\n const [adding, setAdding] = useState(false)\n\n const upload = useCallback(\n async (files: File[]) => {\n setAdding(true)\n try {\n await ensureWorkspaceOpen()\n // Each new document joins the shared list as it lands.\n for (const file of files) await uploadDocuments.mutateAsync({ files: [file] })\n } catch (error) {\n notify(error instanceof Error && error.message ? error.message : String(error), 'error')\n } finally {\n setAdding(false)\n }\n },\n [uploadDocuments, ensureWorkspaceOpen, notify]\n )\n\n return (\n <>\n {!onAddFiles && (\n <input\n ref={input}\n type=\"file\"\n multiple\n className=\"hidden\"\n aria-label=\"Add files\"\n data-testid=\"workflow-add-files-input\"\n onChange={(e) => {\n const files = Array.from(e.target.files ?? [])\n e.target.value = ''\n if (files.length) void upload(files)\n }}\n />\n )}\n <WorkflowDocumentsField\n field={field}\n value={value}\n onChange={onChange}\n documents={documents}\n loaded={loaded}\n thumbnailOf={(id) => thumbnails?.[id]}\n onAddFiles={\n onAddFiles ?? ((files) => (files?.length ? void upload(files) : input.current?.click()))\n }\n adding={adding}\n labels={labels}\n />\n </>\n )\n}\n\nexport interface ConnectedWorkflowLauncherProps extends Omit<\n WorkflowLauncherProps,\n 'scopeSource' | 'renderDocuments' | 'agents'\n> {\n /** Add files from a `documents` field the host's way (its upload dialog). Absent: uploaded here. */\n onAddFiles?: (files?: File[]) => void\n}\n\nexport function ConnectedWorkflowLauncher({\n onAddFiles,\n ...props\n}: ConnectedWorkflowLauncherProps) {\n const scopeSource = useConnectedWorkflowScopeSource()\n const agents = useConnectedAgentOptions()\n return (\n <WorkflowLauncher\n {...props}\n scopeSource={scopeSource}\n agents={agents}\n renderDocuments={(field, value, onChange) => (\n <ConnectedWorkflowDocumentsField\n field={field}\n value={value}\n onChange={onChange}\n onAddFiles={onAddFiles}\n />\n )}\n />\n )\n}\n","/**\n * The Word editor's references to the workspace's other documents: the documents and their\n * passages (the same parsed passages a fact's citations quote), the ARBI address of a passage\n * (`/wrk-…/doc-…/cnk-…`, the deep link that opens a document at a passage, so the link works from\n * Word too), and opening one wherever the host shows documents, highlighted like a citation.\n */\nimport { useMemo, useRef } from 'react'\nimport { useArbi } from '@arbidocs/react'\nimport type { DocxReferencesAdapter } from '../../docx/references/CrossReferences'\nimport { DocumentPicker } from '../../settings/DocumentPicker'\nimport { buildDeepLinkUrl, parseDeepLinkPath } from '../../lib/deep-link'\nimport { useBlocksEnvironment } from '../../provider/BlocksProvider'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { toWorkflowFieldDocument } from '../ConnectedWorkflowLauncher'\nimport { useConnectedDocuments, type ConnectedDocument } from '../workspaceData'\n\ninterface ParsedChunk {\n content?: string | null\n metadata?: { chunk_ext_id?: string | null; page_number?: number | null } | null\n}\n\n/** Top-level documents only: an attachment opens with its parent. */\nconst isTopLevel = (doc: ConnectedDocument) => !doc.parent_ext_id\n\nfunction ReferencePicker({\n documents,\n selectedId,\n onSelect,\n}: {\n documents: ConnectedDocument[]\n selectedId: string | null\n onSelect: (documentId: string) => void\n}) {\n const groups = useMemo(() => {\n const docs = documents\n .filter(isTopLevel)\n .map(toWorkflowFieldDocument)\n .sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase()))\n return [{ id: 'all', heading: 'In this workspace', docs }]\n }, [documents])\n const selected = groups[0].docs.find((d) => d.id === selectedId)\n return (\n <DocumentPicker\n groups={groups}\n value={selectedId ?? ''}\n onValueChange={onSelect}\n selected={selected}\n labels={{ placeholder: 'Search documents…' }}\n />\n )\n}\n\nexport function useConnectedDocxReferences(): DocxReferencesAdapter {\n const arbi = useArbi()\n const { workspaceId } = useConnectedWorkspace()\n const { openDocument, runtimeConfig } = useBlocksEnvironment()\n const { data: documents } = useConnectedDocuments()\n // Read when called (the picker, a link): the list grows while the editor is open.\n const documentsRef = useRef(documents)\n documentsRef.current = documents\n return useMemo<DocxReferencesAdapter>(\n () => ({\n documents: async () =>\n documentsRef.current\n .filter(isTopLevel)\n .map((d) => ({ id: d.external_id, title: toWorkflowFieldDocument(d).title })),\n passages: async (documentId) => {\n const parsed = await arbi.documents.getParsedContent(documentId, 'final')\n return ((parsed.chunks ?? []) as ParsedChunk[]).flatMap((chunk) =>\n chunk.metadata?.chunk_ext_id && chunk.content?.trim()\n ? [\n {\n chunkId: chunk.metadata.chunk_ext_id,\n page: chunk.metadata.page_number ?? null,\n text: chunk.content,\n },\n ]\n : []\n )\n },\n linkFor: ({ documentId, chunkId, page }) => {\n const url = buildDeepLinkUrl(\n { workspaceId: workspaceId ?? undefined, documentId, chunkId },\n runtimeConfig.deploymentDomain\n )\n return page ? `${url}?page=${page}` : url\n },\n targetOf: (href) => {\n let url: URL\n try {\n url = new URL(href, window.location.origin)\n } catch {\n return null\n }\n const { documentId, chunkId } = parseDeepLinkPath(url.pathname)\n if (!documentId || !chunkId) return null\n const page = Number(url.searchParams.get('page')) || null\n return { documentId, chunkId, page }\n },\n open: ({ documentId, chunkId, page }) =>\n openDocument(documentId, { passageId: chunkId, page: page ?? undefined }),\n renderDocumentPicker: (onSelect, selectedId) => (\n <ReferencePicker\n documents={documentsRef.current}\n selectedId={selectedId}\n onSelect={onSelect}\n />\n ),\n }),\n [arbi, workspaceId, openDocument, runtimeConfig.deploymentDomain]\n )\n}\n","/**\n * The saved workflows bound to the connection: when each starts, its last run (a link to the thread\n * it created) and next run, who runs it, pause and resume, share, run now, delete (one or many), and\n * the workflow's history. The host opens a workflow (its builder) and its history; threads open\n * through the environment's `openConversation`, failures are told through its `notify`.\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport {\n useAgents,\n useDeleteWorkflow,\n useRunWorkflow,\n useUpdateWorkflow,\n useWorkflows,\n useWorkspaceUsers,\n type WorkflowResponse,\n} from '@arbidocs/react'\nimport { WorkflowsTable, type WorkflowsTableProps } from '../agents/tasks/WorkflowsTable'\nimport { workflowTriggerType } from '../agents/tasks/workflowRows'\nimport { fmtDate } from '../lib/format'\nimport { useBlocksEnvironment } from '../provider/BlocksProvider'\nimport { useConnectedWorkspace } from './ConnectionProvider'\nimport { useConnectedConversations } from './workspaceData'\n\n/** The viewer's role in the open workspace, and the workspace's members. */\nexport function useConnectedWorkspaceRole() {\n const { workspaceId, live, userId, ensureWorkspaceOpen } = useConnectedWorkspace()\n const { data: members = [] } = useWorkspaceUsers(workspaceId ?? undefined, {\n enabled: live && !!workspaceId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const role = members.find((m) => m.user.external_id === userId)?.role\n return {\n members,\n role,\n /** An owner or a collaborator edits, pauses, resumes and runs what is shared with the workspace. */\n canEditShared: role === 'owner' || role === 'collaborator',\n /** With an item's creator, the only one who deletes it. */\n isWorkspaceOwner: role === 'owner',\n }\n}\n\nexport interface ConnectedWorkflowsTableLabels {\n /** A change (pause, share, delete) that failed without a message. */\n updateFailed: string\n deleteTitle: string\n deleteOne: (name: string) => string\n deleteMany: (count: number) => string\n /** A run that failed: its history has the error report. */\n runFailed: string\n /** A run that created no thread. */\n noThread: string\n /** A document action that started (it has no thread): what is happening. */\n documentAction: (workflow: WorkflowResponse) => string\n untitledTask: string\n}\n\nexport const DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS: ConnectedWorkflowsTableLabels = {\n updateFailed: 'Could not update the workflow',\n deleteTitle: 'Delete workflow',\n deleteOne: (name) => `Delete “${name}”? Threads it already created stay.`,\n deleteMany: (count) => `Delete ${count} workflows? Threads they already created stay.`,\n runFailed: 'The workflow failed. You can send an error report from its history.',\n noThread: 'The workflow did not create a thread.',\n documentAction: (workflow) =>\n workflow.action?.type === 'email_documents'\n ? 'Preparing your document email'\n : 'Reviewing documents',\n untitledTask: 'Untitled thread',\n}\n\ntype TableProps = WorkflowsTableProps<WorkflowResponse>\n\nexport interface ConnectedWorkflowsTableProps extends Omit<\n TableProps,\n | 'workflows'\n | 'isLoading'\n | 'busyId'\n | 'describeTrigger'\n | 'formatDate'\n | 'onToggleActive'\n | 'onToggleShared'\n | 'onDelete'\n | 'onDeleteMany'\n | 'onToggleActiveMany'\n | 'onRun'\n | 'onOpenThread'\n | 'lastRuns'\n | 'agentNames'\n | 'taskNames'\n | 'canEditShared'\n | 'isWorkspaceOwner'\n> {\n /** Which saved workflows to list (e.g. those on a schedule). Default: all. */\n filter?: (workflow: WorkflowResponse) => boolean\n /** When a workflow starts, in the host's words. Default: its trigger type. */\n describeTrigger?: TableProps['describeTrigger']\n formatDate?: TableProps['formatDate']\n connectedLabels?: Partial<ConnectedWorkflowsTableLabels>\n}\n\nconst messageOf = (error: unknown) => (error instanceof Error ? error.message : '')\n\nexport function ConnectedWorkflowsTable({\n filter,\n describeTrigger = (w) => workflowTriggerType(w).replaceAll('_', ' '),\n formatDate = fmtDate,\n onViewRuns,\n connectedLabels,\n ...tableProps\n}: ConnectedWorkflowsTableProps) {\n const l = { ...DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, ...connectedLabels }\n const { notify, confirm, openConversation } = useBlocksEnvironment()\n const { canEditShared, isWorkspaceOwner } = useConnectedWorkspaceRole()\n const { data: saved = [], isLoading } = useWorkflows({ live: true })\n const { data: conversations, refetch } = useConnectedConversations({ live: true })\n const { data: agents = [] } = useAgents()\n const update = useUpdateWorkflow()\n const remove = useDeleteWorkflow()\n const run = useRunWorkflow()\n const [busyId, setBusyId] = useState<string | null>(null)\n\n const workflows = useMemo(() => (filter ? saved.filter(filter) : saved), [saved, filter])\n // A clock or an event fired a workflow: the thread it created is new to the conversation list.\n const firingStamp = saved.map((w) => `${w.external_id}:${w.last_fired_at ?? ''}`).join('|')\n useEffect(() => {\n void refetch?.()\n }, [firingStamp, refetch])\n\n const lastRuns = useMemo(() => {\n const out: NonNullable<TableProps['lastRuns']> = {}\n for (const c of conversations) {\n const id = c.workflow_ext_id\n if (id && (!out[id] || Date.parse(c.created_at) > Date.parse(out[id].at)))\n out[id] = { conversationId: c.external_id, at: c.created_at, threadStatus: c.status }\n }\n return out\n }, [conversations])\n const agentNames = useMemo(\n () => Object.fromEntries(agents.map((a) => [a.external_id, a.given_name || a.email])),\n [agents]\n )\n const taskNames = useMemo(\n () =>\n Object.fromEntries(\n conversations\n .filter((c) => c.status != null)\n .map((c) => [c.external_id, c.title || l.untitledTask])\n ),\n [conversations, l.untitledTask]\n )\n\n const act = async (workflow: WorkflowResponse, action: () => Promise<unknown>) => {\n setBusyId(workflow.external_id)\n try {\n await action()\n } catch (error) {\n notify(messageOf(error) || l.updateFailed, 'error')\n } finally {\n setBusyId(null)\n }\n }\n const setActive = (workflow: WorkflowResponse, active: boolean) =>\n act(workflow, () => update.mutateAsync({ workflowId: workflow.external_id, patch: { active } }))\n const deleteAll = async (items: WorkflowResponse[]) => {\n if (!items.length) return\n const ok = await confirm({\n title: l.deleteTitle,\n message: items.length === 1 ? l.deleteOne(items[0].name) : l.deleteMany(items.length),\n })\n if (!ok) return\n for (const workflow of items)\n await act(workflow, () => remove.mutateAsync(workflow.external_id))\n }\n\n return (\n <WorkflowsTable\n {...tableProps}\n workflows={workflows}\n isLoading={isLoading}\n busyId={busyId}\n describeTrigger={describeTrigger}\n formatDate={formatDate}\n agentNames={agentNames}\n taskNames={taskNames}\n lastRuns={lastRuns}\n canEditShared={canEditShared}\n isWorkspaceOwner={isWorkspaceOwner}\n onOpenThread={(conversationId) => openConversation(conversationId)}\n onViewRuns={onViewRuns}\n onToggleActive={(workflow, active) => void setActive(workflow, active)}\n onToggleActiveMany={(items, active) => {\n void (async () => {\n for (const workflow of items) await setActive(workflow, active)\n })()\n }}\n onToggleShared={(workflow, shared) =>\n void act(workflow, () =>\n update.mutateAsync({ workflowId: workflow.external_id, patch: { shared } })\n )\n }\n onDelete={(workflow) => void deleteAll([workflow])}\n onDeleteMany={(items) => void deleteAll(items)}\n onRun={(workflow) =>\n void act(workflow, async () => {\n const result = await run.mutateAsync(workflow.external_id)\n if (result.conversation_ext_id) openConversation(result.conversation_ext_id)\n if (result.error) {\n onViewRuns?.(workflow)\n notify(l.runFailed, 'error')\n return\n }\n if (result.execution_id && !result.conversation_ext_id) {\n // A document action runs without a thread: its history shows how it goes.\n onViewRuns?.(workflow)\n notify(l.documentAction(workflow), 'success')\n return\n }\n if (!result.conversation_ext_id) throw new Error(l.noThread)\n })\n }\n />\n )\n}\n","/**\n * The house template for the open workspace: its own (a document of the workspace), else the\n * deployment's default, else ARBI's built-in legal template. A workspace owner can make a document\n * the house template once the server supports it.\n */\nimport { useMemo } from 'react'\nimport {\n supportsHouseTemplates,\n useArbi,\n useHouseTemplateCandidates,\n useSetWorkspaceHouseTemplate,\n useWorkspaces,\n workspaceHouseTemplateId,\n} from '@arbidocs/react'\nimport { contentPath } from '../../docx/NativeDocxEditor'\nimport {\n builtinHouseTemplate,\n type HouseTemplate,\n type HouseTemplateHost,\n} from '../../docx/template/HouseTemplate'\nimport { isCandidate } from '../../docx/template/candidates'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { useConnectedWorkspaceRole } from '../ConnectedWorkflowsTable'\n\nexport function useConnectedHouseTemplate(): HouseTemplateHost {\n const arbi = useArbi()\n const { mutateAsync: setWorkspaceTemplate } = useSetWorkspaceHouseTemplate()\n const { workspaceId, live, ensureWorkspaceOpen } = useConnectedWorkspace()\n const { data: workspaces } = useWorkspaces({ enabled: live })\n const workspace = workspaces?.find((w) => w.external_id === workspaceId)\n const { isWorkspaceOwner } = useConnectedWorkspaceRole()\n const supported = supportsHouseTemplates(workspace)\n const templateId = workspaceHouseTemplateId(workspace)\n // Only an eligible document (shared, Word, here or in a public workspace) is offered as the template.\n const { data: candidates } = useHouseTemplateCandidates(\n workspaceId,\n supported && isWorkspaceOwner\n )\n return useMemo<HouseTemplateHost>(\n () => ({\n load: async (): Promise<HouseTemplate> => {\n if (templateId) {\n await ensureWorkspaceOpen()\n const response = await arbi.editor.request(contentPath(templateId))\n const [record] = await arbi.documents.get([templateId]).catch(() => [])\n return {\n bytes: new Uint8Array(await response.arrayBuffer()),\n name: record?.file_name ?? 'House template.docx',\n source: 'workspace',\n documentId: templateId,\n }\n }\n if (supported) {\n const deployment = await arbi.houseTemplates.deployment()\n if (deployment) return { ...deployment, source: 'deployment' }\n }\n return builtinHouseTemplate()\n },\n setFromDocument:\n supported && isWorkspaceOwner\n ? async (documentId) => {\n await ensureWorkspaceOpen()\n await setWorkspaceTemplate(documentId)\n }\n : undefined,\n isEligible: (documentId) => isCandidate(candidates, documentId),\n }),\n [\n arbi,\n setWorkspaceTemplate,\n supported,\n templateId,\n isWorkspaceOwner,\n candidates,\n ensureWorkspaceOpen,\n ]\n )\n}\n","import { useMemo, useRef, useState } from 'react'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { refreshDocuments, useArbi, useWorkspaceUsers } from '@arbidocs/react'\nimport { useOptionalDocumentTools } from '@arbidocs/react/document-tools'\nimport {\n NativeDocxEditor,\n type NativeDocxAdapter,\n type NativeDocxEditorProps,\n} from '../../docx/NativeDocxEditor'\nimport { loadDocxFonts } from '../../docx/fonts'\nimport { useRegisterOpenDocument } from '../../chat/open-document'\nimport { useBlocksEnvironment } from '../../provider/BlocksProvider'\nimport { useConnectedWorkspace } from '../ConnectionProvider'\nimport { useNativeDocxSupport } from './support'\nimport { useConnectedDocxReferences } from './useConnectedDocxReferences'\nimport { useConnectedHouseTemplate } from './useConnectedHouseTemplate'\n\nexport type ConnectedNativeDocxEditorProps = Omit<NativeDocxEditorProps, 'adapter'> & {\n fontBaseUrl?: string\n}\n\n/**\n * The native Word editor on the signed-in ARBI session, under any host (a `ConnectionProvider`, or\n * the host's own `ArbiProvider` + session state). Until a live session has opened, a failure to\n * open one falls back to the saved copy, read-only, so the document is still readable; later token\n * refreshes are not guarded (switching modes would drop unsaved edits).\n */\nexport function ConnectedNativeDocxEditor({\n fontBaseUrl = '/native-docx/fonts',\n ...props\n}: ConnectedNativeDocxEditorProps) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n const { workspaceId } = useConnectedWorkspace()\n const { commentTarget } = useNativeDocxSupport()\n const [openFailed, setOpenFailed] = useState(false)\n const hasOpened = useRef(false)\n const guardedAdapter = useMemo<NativeDocxAdapter>(\n () => ({\n ...adapter,\n open: async (documentId) => {\n try {\n const session = await adapter.open(documentId)\n hasOpened.current = true\n return session\n } catch (error) {\n if (!hasOpened.current) setOpenFailed(true)\n throw error\n }\n },\n }),\n [adapter]\n )\n // Drafting mode: the saved Word document being edited is what the chat is about. A history\n // snapshot, a streamed preview, an unsaved draft and an embedded body field are not.\n const live = !props.snapshot && !props.stream && !props.draftContent && !props.compact\n useRegisterOpenDocument({ documentId: live ? props.documentId : null, workspaceId })\n const initialCommentId =\n props.initialCommentId ??\n (commentTarget?.documentId === props.documentId ? commentTarget.commentId : undefined)\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n {openFailed && (\n <p role=\"status\" className=\"text-muted-foreground border-b px-3 py-2 text-xs\">\n Co-editing isn't available for this document right now, so this is a read-only copy\n of the last saved version.\n </p>\n )}\n <div className=\"min-h-0 flex-1\">\n <NativeDocxEditor\n {...props}\n snapshot={props.snapshot || openFailed}\n initialCommentId={initialCommentId}\n adapter={guardedAdapter}\n />\n </div>\n </div>\n )\n}\n\n/** The access token changed (a refresh): the live room is told the new one. */\nfunction tokenChanges(arbi: ReturnType<typeof useArbi>) {\n return (listener: () => void) => {\n if (!arbi.isLoggedIn) return () => {}\n const session = arbi.getClient().session\n let token = session.getState().accessToken\n return session.subscribe((state) => {\n if (state.accessToken === token) return\n token = state.accessToken\n listener()\n })\n }\n}\n\n/**\n * The native Word adapter on the signed-in session: the editor transport, the people to mention,\n * cross-references, the house template, and the host's extras (`NativeDocxSupportProvider`).\n */\nexport function useConnectedNativeDocxAdapter(fontBaseUrl = '/native-docx/fonts') {\n const arbi = useArbi()\n const { workspaceId, live, user, ensureWorkspaceOpen } = useConnectedWorkspace()\n const queries = useQueryClient()\n const { notify } = useBlocksEnvironment()\n const tools = useOptionalDocumentTools()\n const support = useNativeDocxSupport()\n const references = useConnectedDocxReferences()\n const houseTemplate = useConnectedHouseTemplate()\n const { data: members } = useWorkspaceUsers(workspaceId ?? undefined, {\n enabled: live && !!workspaceId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const onDocumentsChanged = tools?.onDocumentsChanged\n // Tracked changes and comments are authored by the user's first name.\n const author = (live && arbi.user.profile()?.givenName) || user?.name || 'You'\n const adapter = useMemo<NativeDocxAdapter>(\n () => ({\n request: async (path, options) => {\n await ensureWorkspaceOpen()\n return arbi.editor.request(path, options)\n },\n open: async (id) => {\n await ensureWorkspaceOpen()\n return (\n await arbi.editor.request(`/${encodeURIComponent(id)}/session`, { method: 'POST' })\n ).json()\n },\n save: async (id, state) =>\n (\n await arbi.editor.request(`/${encodeURIComponent(id)}/save`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ state }),\n })\n ).json(),\n loadFonts: () => loadDocxFonts(fontBaseUrl),\n baseUrl: arbi.getConnectionInfo()?.baseUrl || window.location.origin,\n author,\n subscribeTokenChanges: tokenChanges(arbi),\n onDirtyChange: support.onDirtyChange,\n // The document's row moves to the saved version in place: through the host when it keeps\n // the lists (its document tools refresh them), else here.\n onVersionSaved: async (id) => {\n await (onDocumentsChanged\n ? onDocumentsChanged([id], 'version')\n : refreshDocuments(queries, arbi, [id]))\n },\n notify,\n mentions: members?.map(({ user: member }) => ({\n id: member.external_id,\n name: [member.given_name, member.family_name].filter(Boolean).join(' '),\n kind: member.external_id.startsWith('agt-') ? 'agent' : 'human',\n })),\n requestAgent: async (id, request) => {\n const response = await arbi.editor.request(`/${encodeURIComponent(id)}/mentions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n comment_id: request.commentId,\n instruction: request.instruction,\n request_id: request.requestId,\n recipient_ids: request.recipientIds,\n }),\n })\n const delivery = (await response.json()) as { response_ids: string[] }\n notify('Mention delivered.', 'success')\n return { responseIds: delivery.response_ids || [] }\n },\n getAgentStatus: async (responseId) => (await arbi.assistant.getResponse(responseId)).status,\n definitions: support.definitions,\n references,\n imageGeneration: support.imageGeneration,\n houseTemplate,\n }),\n [\n arbi,\n author,\n members,\n ensureWorkspaceOpen,\n fontBaseUrl,\n queries,\n notify,\n onDocumentsChanged,\n support,\n references,\n houseTemplate,\n ]\n )\n return adapter\n}\n"]}
|
|
@@ -2933,6 +2933,8 @@ function CrossReferencesProvider({
|
|
|
2933
2933
|
},
|
|
2934
2934
|
[editor, dialog, track, notify]
|
|
2935
2935
|
);
|
|
2936
|
+
const loaded = react.useEditorState((snapshot) => !snapshot.isLoading && !snapshot.isOpening);
|
|
2937
|
+
const refreshedOnLoad = React4.useRef(null);
|
|
2936
2938
|
React4.useEffect(() => {
|
|
2937
2939
|
if (!editor || !editable) return;
|
|
2938
2940
|
const refresh = () => {
|
|
@@ -2943,13 +2945,12 @@ function CrossReferencesProvider({
|
|
|
2943
2945
|
} catch {
|
|
2944
2946
|
}
|
|
2945
2947
|
};
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
|
|
2952
|
-
}, [editor, editable]);
|
|
2948
|
+
if (loaded && refreshedOnLoad.current !== editor) {
|
|
2949
|
+
refreshedOnLoad.current = editor;
|
|
2950
|
+
refresh();
|
|
2951
|
+
}
|
|
2952
|
+
return onBeforeSave(editor, refresh);
|
|
2953
|
+
}, [editor, editable, loaded]);
|
|
2953
2954
|
const [report, setReport] = React4.useState(null);
|
|
2954
2955
|
const update = React4.useCallback(() => {
|
|
2955
2956
|
if (!editor || !editable) return;
|
|
@@ -4383,6 +4384,14 @@ var EditorBoundary = class extends React4__default.default.Component {
|
|
|
4383
4384
|
] }) : this.props.children;
|
|
4384
4385
|
}
|
|
4385
4386
|
};
|
|
4387
|
+
function RoomInputBinding({ session }) {
|
|
4388
|
+
const editor = react.useDocxEditor();
|
|
4389
|
+
React4.useEffect(() => {
|
|
4390
|
+
if (!editor || !session) return;
|
|
4391
|
+
return session.bindEditorInput(() => editor.surface?.flushPendingInput());
|
|
4392
|
+
}, [editor, session]);
|
|
4393
|
+
return null;
|
|
4394
|
+
}
|
|
4386
4395
|
function DocxParticipants({ session }) {
|
|
4387
4396
|
const [people, setPeople] = React4.useState([]);
|
|
4388
4397
|
React4.useEffect(() => {
|
|
@@ -4960,7 +4969,7 @@ function NativeDocxEditor({
|
|
|
4960
4969
|
children: [
|
|
4961
4970
|
/* @__PURE__ */ jsxRuntime.jsxs(react.DocxEditor.Viewport, { className: "native-docx-viewport", children: [
|
|
4962
4971
|
/* @__PURE__ */ jsxRuntime.jsx(react.DocxEditor.Content, {}),
|
|
4963
|
-
/* @__PURE__ */ jsxRuntime.
|
|
4972
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4964
4973
|
DocxMentions,
|
|
4965
4974
|
{
|
|
4966
4975
|
initialCommentId,
|
|
@@ -4968,10 +4977,13 @@ function NativeDocxEditor({
|
|
|
4968
4977
|
notify: adapter.notify,
|
|
4969
4978
|
getAgentStatus: adapter.getAgentStatus,
|
|
4970
4979
|
requestAgent: adapter.requestAgent ? (request) => adapter.requestAgent(documentId, request) : void 0,
|
|
4971
|
-
children:
|
|
4972
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4973
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4974
|
-
|
|
4980
|
+
children: [
|
|
4981
|
+
/* @__PURE__ */ jsxRuntime.jsx(RoomInputBinding, { session: ready.room?.session }),
|
|
4982
|
+
/* @__PURE__ */ jsxRuntime.jsx(AgentUndoRoom.Provider, { value: ready.room?.ydoc ?? null, children: /* @__PURE__ */ jsxRuntime.jsx(DocxEditorReview, { children: () => /* @__PURE__ */ jsxRuntime.jsxs(DocxEditorReview.Card, { children: [
|
|
4983
|
+
/* @__PURE__ */ jsxRuntime.jsx(DocxCommentActivity, {}),
|
|
4984
|
+
/* @__PURE__ */ jsxRuntime.jsx(AgentUndo, {})
|
|
4985
|
+
] }) }) })
|
|
4986
|
+
]
|
|
4975
4987
|
}
|
|
4976
4988
|
),
|
|
4977
4989
|
!compact && /* @__PURE__ */ jsxRuntime.jsx(react.DocxEditor.HeaderFooterChrome, {}),
|
|
@@ -5108,5 +5120,5 @@ exports.useReview = useReview;
|
|
|
5108
5120
|
exports.useReviewItem = useReviewItem;
|
|
5109
5121
|
exports.useTrackedOrNoted = useTrackedOrNoted;
|
|
5110
5122
|
exports.withDirectEditing = withDirectEditing;
|
|
5111
|
-
//# sourceMappingURL=chunk-
|
|
5112
|
-
//# sourceMappingURL=chunk-
|
|
5123
|
+
//# sourceMappingURL=chunk-JSQEAPTC.cjs.map
|
|
5124
|
+
//# sourceMappingURL=chunk-JSQEAPTC.cjs.map
|