@arbidocs/blocks 0.5.115 → 0.5.117
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/{ConnectedCallDock-WER7R222.cjs → ConnectedCallDock-OZBTU3IT.cjs} +20 -20
- package/dist/{ConnectedCallDock-WER7R222.cjs.map → ConnectedCallDock-OZBTU3IT.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-T7OBQTYP.cjs → ConnectedCallRoom-VMZE2NFP.cjs} +13 -13
- package/dist/{ConnectedCallRoom-T7OBQTYP.cjs.map → ConnectedCallRoom-VMZE2NFP.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-YXMYJWXY.cjs → ConnectedNativeDocxComparison-7OUKTKYP.cjs} +20 -20
- package/dist/{ConnectedNativeDocxComparison-YXMYJWXY.cjs.map → ConnectedNativeDocxComparison-7OUKTKYP.cjs.map} +1 -1
- package/dist/{ConnectedProductionSetDialog-LHB4VQWC.cjs → ConnectedProductionSetDialog-4EAY6KAZ.cjs} +3 -3
- package/dist/{ConnectedProductionSetDialog-LHB4VQWC.cjs.map → ConnectedProductionSetDialog-4EAY6KAZ.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-2RTCHVPI.cjs → ConnectedStreamedWordArtifact-7V24ZDAC.cjs} +20 -20
- package/dist/{ConnectedStreamedWordArtifact-2RTCHVPI.cjs.map → ConnectedStreamedWordArtifact-7V24ZDAC.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-ZSBZBGFK.cjs → DocumentReviewCard-OCPFVMLD.cjs} +15 -15
- package/dist/{DocumentReviewCard-ZSBZBGFK.cjs.map → DocumentReviewCard-OCPFVMLD.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-I5QIHQZT.cjs → FilesViewerDialog-KLRDIYEH.cjs} +45 -45
- package/dist/{FilesViewerDialog-I5QIHQZT.cjs.map → FilesViewerDialog-KLRDIYEH.cjs.map} +1 -1
- package/dist/{NativeDocxEditor-H6TAEVGY.cjs → NativeDocxEditor-2LQY2CTV.cjs} +6 -6
- package/dist/{NativeDocxEditor-H6TAEVGY.cjs.map → NativeDocxEditor-2LQY2CTV.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-J3C6VH4T.cjs → WorkspaceTableView-IMAZICIZ.cjs} +8 -8
- package/dist/{WorkspaceTableView-J3C6VH4T.cjs.map → WorkspaceTableView-IMAZICIZ.cjs.map} +1 -1
- package/dist/agents/index.cjs +297 -297
- package/dist/{ai-IM4A23YT.cjs → ai-7U4B4CVF.cjs} +24 -24
- package/dist/ai-7U4B4CVF.cjs.map +1 -0
- package/dist/calls/index.cjs +121 -121
- package/dist/chat/index.cjs +1 -1
- package/dist/{chunk-M6IKVKU5.cjs → chunk-2CSLFAGF.cjs} +392 -149
- package/dist/chunk-2CSLFAGF.cjs.map +1 -0
- package/dist/{chunk-SGYSDABK.cjs → chunk-2W5E62EY.cjs} +6 -6
- package/dist/{chunk-SGYSDABK.cjs.map → chunk-2W5E62EY.cjs.map} +1 -1
- package/dist/{chunk-P77YTTJ3.cjs → chunk-3ODEWSRO.cjs} +4 -4
- package/dist/{chunk-P77YTTJ3.cjs.map → chunk-3ODEWSRO.cjs.map} +1 -1
- package/dist/{chunk-DDIW4HLU.cjs → chunk-3U36VYMD.cjs} +27 -27
- package/dist/{chunk-DDIW4HLU.cjs.map → chunk-3U36VYMD.cjs.map} +1 -1
- package/dist/{chunk-TP5PGWIO.cjs → chunk-4IOYQLKG.cjs} +3 -3
- package/dist/{chunk-TP5PGWIO.cjs.map → chunk-4IOYQLKG.cjs.map} +1 -1
- package/dist/{chunk-NY3YUCOW.cjs → chunk-4NPCDS2X.cjs} +3 -3
- package/dist/{chunk-NY3YUCOW.cjs.map → chunk-4NPCDS2X.cjs.map} +1 -1
- package/dist/{chunk-BQ5RIWWT.cjs → chunk-4VZZWYEC.cjs} +3 -3
- package/dist/{chunk-BQ5RIWWT.cjs.map → chunk-4VZZWYEC.cjs.map} +1 -1
- package/dist/{chunk-Y24V6HPR.cjs → chunk-57EE6CMW.cjs} +15 -15
- package/dist/{chunk-Y24V6HPR.cjs.map → chunk-57EE6CMW.cjs.map} +1 -1
- package/dist/{chunk-NNUK5ZM7.cjs → chunk-5QUL5BZO.cjs} +4 -4
- package/dist/{chunk-NNUK5ZM7.cjs.map → chunk-5QUL5BZO.cjs.map} +1 -1
- package/dist/{chunk-OEREKAAP.cjs → chunk-6DCIZA3X.cjs} +75 -75
- package/dist/{chunk-OEREKAAP.cjs.map → chunk-6DCIZA3X.cjs.map} +1 -1
- package/dist/{chunk-YGXOKB5Z.cjs → chunk-7TEUGFIL.cjs} +4 -4
- package/dist/{chunk-YGXOKB5Z.cjs.map → chunk-7TEUGFIL.cjs.map} +1 -1
- package/dist/{chunk-TT4IF52H.cjs → chunk-7X3FS5HQ.cjs} +35 -35
- package/dist/{chunk-TT4IF52H.cjs.map → chunk-7X3FS5HQ.cjs.map} +1 -1
- package/dist/{chunk-CPR6EHG7.cjs → chunk-7XT5B2DZ.cjs} +47 -47
- package/dist/{chunk-CPR6EHG7.cjs.map → chunk-7XT5B2DZ.cjs.map} +1 -1
- package/dist/chunk-BKY2LAV2.cjs +18 -0
- package/dist/{chunk-CIHERNDO.cjs.map → chunk-BKY2LAV2.cjs.map} +1 -1
- package/dist/{chunk-XKVPSOKP.cjs → chunk-BW5MF464.cjs} +4 -4
- package/dist/{chunk-XKVPSOKP.cjs.map → chunk-BW5MF464.cjs.map} +1 -1
- package/dist/{chunk-IW7CDJTA.cjs → chunk-COD5ENHK.cjs} +4 -4
- package/dist/{chunk-IW7CDJTA.cjs.map → chunk-COD5ENHK.cjs.map} +1 -1
- package/dist/{chunk-A3T3IC3K.cjs → chunk-D7ICHGWM.cjs} +239 -85
- package/dist/chunk-D7ICHGWM.cjs.map +1 -0
- package/dist/{chunk-TDO5UWXF.cjs → chunk-E4BLRF2L.cjs} +5 -5
- package/dist/{chunk-TDO5UWXF.cjs.map → chunk-E4BLRF2L.cjs.map} +1 -1
- package/dist/{chunk-WR2SF44W.cjs → chunk-E4DUXU5K.cjs} +9 -9
- package/dist/{chunk-WR2SF44W.cjs.map → chunk-E4DUXU5K.cjs.map} +1 -1
- package/dist/{chunk-WAV762GP.cjs → chunk-GQXPNIRE.cjs} +6 -6
- package/dist/{chunk-WAV762GP.cjs.map → chunk-GQXPNIRE.cjs.map} +1 -1
- package/dist/{chunk-7OPOPYV6.cjs → chunk-H5OLHP2U.cjs} +3 -3
- package/dist/{chunk-7OPOPYV6.cjs.map → chunk-H5OLHP2U.cjs.map} +1 -1
- package/dist/{chunk-6UTKM5AB.cjs → chunk-JSQQV23D.cjs} +3 -3
- package/dist/{chunk-6UTKM5AB.cjs.map → chunk-JSQQV23D.cjs.map} +1 -1
- package/dist/{chunk-557MJ4IH.cjs → chunk-LFRNBT2I.cjs} +20 -20
- package/dist/{chunk-557MJ4IH.cjs.map → chunk-LFRNBT2I.cjs.map} +1 -1
- package/dist/{chunk-R7CJEIA5.cjs → chunk-LYTIQQQ2.cjs} +3 -3
- package/dist/{chunk-R7CJEIA5.cjs.map → chunk-LYTIQQQ2.cjs.map} +1 -1
- package/dist/{chunk-CPG7II4E.cjs → chunk-MC4F2URI.cjs} +28 -28
- package/dist/{chunk-CPG7II4E.cjs.map → chunk-MC4F2URI.cjs.map} +1 -1
- package/dist/{chunk-WXUU3COI.cjs → chunk-MZ2KZXNU.cjs} +3 -3
- package/dist/{chunk-WXUU3COI.cjs.map → chunk-MZ2KZXNU.cjs.map} +1 -1
- package/dist/{chunk-ZTXQIIFV.cjs → chunk-OZVDOAXG.cjs} +6 -6
- package/dist/{chunk-ZTXQIIFV.cjs.map → chunk-OZVDOAXG.cjs.map} +1 -1
- package/dist/{chunk-325GVZE6.cjs → chunk-Q6DQGGP4.cjs} +3 -3
- package/dist/{chunk-325GVZE6.cjs.map → chunk-Q6DQGGP4.cjs.map} +1 -1
- package/dist/{chunk-KTQOGT2L.cjs → chunk-TDN33HSK.cjs} +6 -6
- package/dist/{chunk-KTQOGT2L.cjs.map → chunk-TDN33HSK.cjs.map} +1 -1
- package/dist/{chunk-T23UTIRI.cjs → chunk-UNDQYTRF.cjs} +6 -6
- package/dist/{chunk-T23UTIRI.cjs.map → chunk-UNDQYTRF.cjs.map} +1 -1
- package/dist/{chunk-KXIRVKCJ.cjs → chunk-UUENH4BJ.cjs} +3 -3
- package/dist/{chunk-KXIRVKCJ.cjs.map → chunk-UUENH4BJ.cjs.map} +1 -1
- package/dist/{chunk-24EDG4PC.cjs → chunk-VBL3SHWX.cjs} +50 -50
- package/dist/{chunk-24EDG4PC.cjs.map → chunk-VBL3SHWX.cjs.map} +1 -1
- package/dist/{chunk-3A7QWUAW.cjs → chunk-VKH3BEZE.cjs} +3 -3
- package/dist/{chunk-3A7QWUAW.cjs.map → chunk-VKH3BEZE.cjs.map} +1 -1
- package/dist/{chunk-X5LANJDZ.cjs → chunk-VTYJAZDU.cjs} +23 -15
- package/dist/chunk-VTYJAZDU.cjs.map +1 -0
- package/dist/{chunk-B3LZITVF.cjs → chunk-WW6LXQY6.cjs} +12 -12
- package/dist/{chunk-B3LZITVF.cjs.map → chunk-WW6LXQY6.cjs.map} +1 -1
- package/dist/{chunk-NJCK6V6U.cjs → chunk-XKDUPU7B.cjs} +4 -4
- package/dist/{chunk-NJCK6V6U.cjs.map → chunk-XKDUPU7B.cjs.map} +1 -1
- package/dist/{chunk-42TURFHF.cjs → chunk-YGBHY67W.cjs} +5 -5
- package/dist/{chunk-42TURFHF.cjs.map → chunk-YGBHY67W.cjs.map} +1 -1
- package/dist/connect/docx.cjs +24 -24
- package/dist/connect/index.cjs +983 -983
- package/dist/connect/viewer.cjs +34 -34
- package/dist/connection/docx/ConnectedNativeDocxEditor.js +10 -2
- package/dist/connection/docx/ConnectedNativeDocxEditor.js.map +2 -2
- package/dist/connection/viewer/ConnectedDocumentViewer.js +124 -21
- package/dist/connection/viewer/ConnectedDocumentViewer.js.map +2 -2
- package/dist/connection/viewer/VersionDropdown.d.ts +9 -0
- package/dist/connection/viewer/VersionDropdown.js +39 -0
- package/dist/connection/viewer/VersionDropdown.js.map +7 -0
- package/dist/connection/viewer/ViewerPdfPane.js +4 -1
- package/dist/connection/viewer/ViewerPdfPane.js.map +2 -2
- package/dist/connection/viewer/useViewerBlobs.d.ts +3 -1
- package/dist/connection/viewer/useViewerBlobs.js +14 -8
- package/dist/connection/viewer/useViewerBlobs.js.map +2 -2
- package/dist/connection/viewer/useViewerTabs.js +10 -0
- package/dist/connection/viewer/useViewerTabs.js.map +2 -2
- package/dist/dashboards/index.cjs +1 -1
- package/dist/docx/DocxCommandMenu.d.ts +8 -0
- package/dist/docx/DocxCommandMenu.js +202 -0
- package/dist/docx/DocxCommandMenu.js.map +7 -0
- package/dist/docx/NativeDocxEditor.d.ts +4 -2
- package/dist/docx/NativeDocxEditor.js +51 -12
- package/dist/docx/NativeDocxEditor.js.map +2 -2
- package/dist/docx/RibbonMenu.d.ts +3 -1
- package/dist/docx/RibbonMenu.js +10 -3
- package/dist/docx/RibbonMenu.js.map +2 -2
- package/dist/docx/RibbonOverflow.d.ts +3 -0
- package/dist/docx/RibbonOverflow.js +24 -1
- package/dist/docx/RibbonOverflow.js.map +2 -2
- package/dist/docx/index.cjs +38 -38
- package/dist/docx/signatures/SignatureFields.d.ts +3 -1
- package/dist/docx/signatures/SignatureFields.js +17 -8
- package/dist/docx/signatures/SignatureFields.js.map +2 -2
- package/dist/embed/index.cjs +38 -38
- package/dist/files/index.cjs +224 -224
- package/dist/index.cjs +1590 -1590
- package/dist/settings/index.cjs +147 -147
- package/dist/shell/index.cjs +90 -90
- package/dist/studio/index.cjs +26 -26
- package/dist/styles.css +1 -1
- package/dist/workflow-canvas/index.cjs +55 -55
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/src/docx/styles.css +94 -0
- package/dist/ai-IM4A23YT.cjs.map +0 -1
- package/dist/chunk-A3T3IC3K.cjs.map +0 -1
- package/dist/chunk-CIHERNDO.cjs +0 -18
- package/dist/chunk-M6IKVKU5.cjs.map +0 -1
- package/dist/chunk-X5LANJDZ.cjs.map +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var chunkYGBHY67W_cjs = require('./chunk-YGBHY67W.cjs');
|
|
5
|
+
var chunkVTYJAZDU_cjs = require('./chunk-VTYJAZDU.cjs');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
function ConnectedStreamedWordArtifact({
|
|
9
|
+
fontBaseUrl,
|
|
10
|
+
...props
|
|
11
|
+
}) {
|
|
12
|
+
const adapter = chunkVTYJAZDU_cjs.useConnectedNativeDocxAdapter(fontBaseUrl);
|
|
13
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkYGBHY67W_cjs.StreamedWordArtifact, { ...props, adapter });
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
exports.ConnectedStreamedWordArtifact = ConnectedStreamedWordArtifact;
|
|
17
|
+
//# sourceMappingURL=chunk-BKY2LAV2.cjs.map
|
|
18
|
+
//# sourceMappingURL=chunk-BKY2LAV2.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/docx/ConnectedStreamedWordArtifact.tsx"],"names":["useConnectedNativeDocxAdapter","jsx","StreamedWordArtifact"],"mappings":";;;;;;AAMO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0E;AACxE,EAAA,MAAM,OAAA,GAAUA,gDAA8B,WAAW,CAAA;AACzD,EAAA,uBAAOC,cAAA,CAACC,sCAAA,EAAA,EAAsB,GAAG,KAAA,EAAO,OAAA,EAAkB,CAAA;AAC5D","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/connection/docx/ConnectedStreamedWordArtifact.tsx"],"names":["useConnectedNativeDocxAdapter","jsx","StreamedWordArtifact"],"mappings":";;;;;;AAMO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0E;AACxE,EAAA,MAAM,OAAA,GAAUA,gDAA8B,WAAW,CAAA;AACzD,EAAA,uBAAOC,cAAA,CAACC,sCAAA,EAAA,EAAsB,GAAG,KAAA,EAAO,OAAA,EAAkB,CAAA;AAC5D","file":"chunk-BKY2LAV2.cjs","sourcesContent":["import { useConnectedNativeDocxAdapter } from './ConnectedNativeDocxEditor'\nimport {\n StreamedWordArtifact,\n type StreamedWordArtifactProps,\n} from '../../docx/StreamedWordArtifact'\n\nexport function ConnectedStreamedWordArtifact({\n fontBaseUrl,\n ...props\n}: Omit<StreamedWordArtifactProps, 'adapter'> & { fontBaseUrl?: string }) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n return <StreamedWordArtifact {...props} adapter={adapter} />\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunk3U36VYMD_cjs = require('./chunk-3U36VYMD.cjs');
|
|
5
5
|
var chunkQGVOT7E4_cjs = require('./chunk-QGVOT7E4.cjs');
|
|
6
6
|
var react = require('react');
|
|
7
7
|
|
|
@@ -45,7 +45,7 @@ function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, reso
|
|
|
45
45
|
}, delayMs)
|
|
46
46
|
);
|
|
47
47
|
}, [states, steps, workflow]);
|
|
48
|
-
return
|
|
48
|
+
return chunk3U36VYMD_cjs.useWorkflowView({
|
|
49
49
|
steps,
|
|
50
50
|
states,
|
|
51
51
|
inputs,
|
|
@@ -58,5 +58,5 @@ function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, reso
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
exports.useWorkflowPreview = useWorkflowPreview;
|
|
61
|
-
//# sourceMappingURL=chunk-
|
|
62
|
-
//# sourceMappingURL=chunk-
|
|
61
|
+
//# sourceMappingURL=chunk-BW5MF464.cjs.map
|
|
62
|
+
//# sourceMappingURL=chunk-BW5MF464.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/agents/workflows/useWorkflowPreview.ts"],"names":["workflowSteps","useState","initialRunInputs","useRef","useEffect","stepPhase","composeStepPrompt","useWorkflowView"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/agents/workflows/useWorkflowPreview.ts"],"names":["workflowSteps","useState","initialRunInputs","useRef","useEffect","stepPhase","composeStepPrompt","useWorkflowView"],"mappings":"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","file":"chunk-BW5MF464.cjs","sourcesContent":["/**\n * A stepped workflow run on screen only (the builder's preview): agent steps run one at a time,\n * the way the server does, and answer with the prompt they would send; action steps just finish.\n * No thread, no agent.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport {\n composeStepPrompt,\n initialRunInputs,\n stepPhase,\n workflowSteps,\n type StepComposeOptions,\n} from './run'\nimport type { WorkflowDefinition, WorkflowInputs, WorkflowStepState } from './types'\nimport { useWorkflowView, type WorkflowRunView } from './useWorkflowView'\n\nexport interface UseWorkflowPreviewOptions extends StepComposeOptions {\n /** What a stand-in agent step answers; `{prompt}` is replaced with the prompt it would send. */\n answer?: string\n /** How long a stand-in step takes. */\n delayMs?: number\n}\n\nexport function useWorkflowPreview(\n workflow: WorkflowDefinition,\n { answer = '{prompt}', delayMs = 400, resolveWorkflow, compose }: UseWorkflowPreviewOptions = {}\n): WorkflowRunView {\n const steps = workflowSteps(workflow)\n const [inputs, setInputs] = useState<WorkflowInputs>(() => initialRunInputs(workflow))\n const [states, setStates] = useState<Record<string, WorkflowStepState>>({})\n const set = (id: string, state: WorkflowStepState) => setStates((s) => ({ ...s, [id]: state }))\n\n // A stand-in step's timer outlives the re-render its start causes; it is cleared on unmount, and\n // a step it cut short starts again (StrictMode mounts twice).\n const timers = useRef(new Map<string, ReturnType<typeof setTimeout>>())\n useEffect(() => {\n const pending = timers.current\n return () => {\n for (const t of pending.values()) clearTimeout(t)\n pending.clear()\n setStates((s) =>\n Object.fromEntries(\n Object.entries(s).map(([id, v]) => [\n id,\n v.status === 'running' ? { status: 'pending' } : v,\n ])\n )\n )\n }\n }, [])\n\n // One turn at a time: start the first ready agent step when nothing is running.\n useEffect(() => {\n if (Object.values(states).some((s) => s.status === 'running')) return\n // An action step (a signature, an email, a review) stands in the same way, with no answer.\n const next = steps.find(\n (s) =>\n (s.kind === 'agent' || s.kind === 'action') && stepPhase(steps, states, s.id) === 'ready'\n )\n if (!next || (next.kind !== 'agent' && next.kind !== 'action')) return\n const prompt =\n next.kind === 'agent'\n ? composeStepPrompt(workflow, next, inputs, { resolveWorkflow, compose })\n : ''\n set(next.id, { status: 'running', startedAt: new Date().toISOString() })\n timers.current.set(\n next.id,\n setTimeout(() => {\n timers.current.delete(next.id)\n set(\n next.id,\n next.kind === 'agent'\n ? { status: 'done', text: answer.replace('{prompt}', prompt) }\n : { status: 'done' }\n )\n }, delayMs)\n )\n // `inputs` are read when a step starts, not watched.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [states, steps, workflow])\n\n return useWorkflowView({\n steps,\n states,\n inputs,\n setInput: (name, value) => setInputs((i) => ({ ...i, [name]: value })),\n complete: async (step) => set(step.id, { status: 'done' }),\n skip: async (id) => set(id, { status: 'skipped' }),\n retry: async (id) => set(id, { status: 'pending' }),\n isLocked: (id) => states[id]?.status === 'done',\n })\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunk2CSLFAGF_cjs = require('./chunk-2CSLFAGF.cjs');
|
|
5
5
|
var react = require('react');
|
|
6
6
|
var artifacts = require('@arbidocs/react/artifacts');
|
|
7
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -115,7 +115,7 @@ function NativeDocxComparison({
|
|
|
115
115
|
if (!documentId)
|
|
116
116
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "native-docx-error", role: "status", children: "Comparing Word documents\u2026" });
|
|
117
117
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
118
|
-
|
|
118
|
+
chunk2CSLFAGF_cjs.NativeDocxEditor,
|
|
119
119
|
{
|
|
120
120
|
adapter,
|
|
121
121
|
documentId,
|
|
@@ -126,5 +126,5 @@ function NativeDocxComparison({
|
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
exports.NativeDocxComparison = NativeDocxComparison;
|
|
129
|
-
//# sourceMappingURL=chunk-
|
|
130
|
-
//# sourceMappingURL=chunk-
|
|
129
|
+
//# sourceMappingURL=chunk-COD5ENHK.cjs.map
|
|
130
|
+
//# sourceMappingURL=chunk-COD5ENHK.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/docx/NativeDocxComparison.tsx"],"names":["parseVersionRef","useRef","useState","useEffect","error","jsxs","jsx","NativeDocxEditor"],"mappings":";;;;;;;AA8BA,SAAS,YAAA,CAAa,QAAgB,SAAA,EAAoC;AACxE,EAAA,MAAM,IAAA,GAAOA,0BAAgB,MAAM,CAAA;AACnC,EAAA,MAAM,OAAA,GAAUA,0BAAgB,SAAS,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB,EAAE,WAAA,EAAa,KAAK,KAAA,EAAO,cAAA,EAAgB,OAAA,CAAQ,KAAA,EAAO,CAAA;AAC5F,EAAA,IAAI,IAAA,CAAK,SAAS,KAAA,CAAM,GAAA,CAAI,gBAAgB,MAAA,CAAO,IAAA,CAAK,OAAO,CAAC,CAAA;AAChE,EAAA,IAAI,OAAA,CAAQ,SAAS,KAAA,CAAM,GAAA,CAAI,mBAAmB,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAC,CAAA;AACzE,EAAA,OAAO,KAAA;AACT;AAQA,SAAS,aAAA,CACP,SAAA,EACA,MAAA,EACA,SAAA,EACmE;AACnE,EAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KAAqC;AACjD,IAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAQ,GAAIA,0BAAgB,GAAG,CAAA;AAC9C,IAAA,IAAI,OAAA,EAAS,OAAO,EAAE,KAAA,EAAO,OAAA,EAAQ;AACrC,IAAA,MAAM,MAAM,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,KAAK,CAAA;AACzD,IAAA,OAAO,MAAM,EAAE,KAAA,EAAO,SAAS,GAAA,CAAI,eAAA,IAAmB,GAAE,GAAI,IAAA;AAAA,EAC9D,CAAA;AACA,EAAA,MAAM,IAAA,GAAO,KAAK,MAAM,CAAA;AACxB,EAAA,MAAM,OAAA,GAAU,KAAK,SAAS,CAAA;AAC9B,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,OAAA,EAAS,OAAO,IAAA;AAC9B,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAA,EAAK,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,EAAA,EAAK,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI,OAAA,CAAQ,KAAK,CAAA,EAAA,EAAK,OAAA,CAAQ,OAAO,CAAA;AAAA,GAC1E;AACF;AAOA,IAAM,gBAAA,uBAAuB,GAAA,EAA6C;AAQ1E,SAAS,eAAA,CACP,WACA,KAAA,EACoB;AACpB,EAAA,MAAM,QAAA,GAAW,CAAC,GAAA,EAAiC,IAAA,EAAc,SAC/D,CAAC,CAAC,IAAI,YAAA,EAAc,IAAA;AAAA,IAClB,CAAC,IAAA,KACC,IAAA,CAAK,IAAA,KAAS,IAAA,IAAQ,IAAA,CAAK,UAAA,KAAe,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,OAAA,KAAY,IAAA,CAAK;AAAA,GAClF;AACF,EAAA,MAAM,WAAW,SAAA,CAAU,IAAA;AAAA,IACzB,CAAC,GAAA,KAAA,CACE,GAAA,CAAI,eAAA,IAAmB,CAAA,MAAO,KAC/B,QAAA,CAAS,GAAA,EAAK,cAAA,EAAgB,KAAA,CAAM,IAAI,CAAA,IACxC,QAAA,CAAS,GAAA,EAAK,iBAAA,EAAmB,MAAM,OAAO;AAAA,GAClD;AACA,EAAA,IAAI,QAAA,SAAiB,QAAA,CAAS,WAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAC5C,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AAEnB,EAAA,IAAI,KAAA,CAAM,MAAA,IAAU,SAAA,CAAU,IAAA,CAAK,CAAC,QAAQ,GAAA,CAAI,WAAA,KAAgB,KAAA,CAAM,EAAE,CAAA,EAAG;AACzE,IAAA,gBAAA,CAAiB,MAAA,CAAO,MAAM,GAAG,CAAA;AACjC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA,CAAM,EAAA;AACf;AAGA,SAAS,WAAW,SAAA,EAA4D;AAC9E,EAAA,KAAA,MAAW,KAAA,IAAS,iBAAiB,MAAA,EAAO;AAC1C,IAAA,IAAI,CAAC,KAAA,CAAM,MAAA,IAAU,SAAA,CAAU,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,WAAA,KAAgB,KAAA,CAAM,EAAE,CAAA,QAAS,MAAA,GAAS,IAAA;AAC/F;AAOA,IAAM,cAAA,uBAAqB,GAAA,EAA6B;AAExD,SAAS,WAAA,CACP,OAAA,EACA,KAAA,EACA,UAAA,EACA,OAAA,EACiB;AACjB,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AACvC,EAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,EAAA,MAAM,KAAA,GAAQ,QACX,OAAA,CAAQ,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA,EAAI,EAAE,QAAQ,MAAA,EAAQ,EAC/C,IAAA,CAAK,CAAC,aAAa,QAAA,CAAS,IAAA,EAAM,CAAA,CAClC,IAAA,CAAK,CAAC,MAAA,KAAwC;AAC7C,IAAA,IAAI,CAAC,MAAA,CAAO,eAAA,EAAiB,MAAM,IAAI,MAAM,4CAA4C,CAAA;AACzF,IAAA,IAAI,UAAA;AACF,MAAA,gBAAA,CAAiB,GAAA,CAAI,YAAY,EAAE,EAAA,EAAI,OAAO,eAAA,EAAiB,MAAA,EAAQ,OAAO,CAAA;AAChF,IAAA,OAAO,MAAA,CAAO,eAAA;AAAA,EAChB,CAAC,CAAA;AACH,EAAA,cAAA,CAAe,GAAA,CAAI,OAAO,KAAK,CAAA;AAC/B,EAAA,KAAK,KAAA,CACF,IAAA;AAAA,IACC,CAAC,eAAe,OAAA,CAAQ,OAAA,CAAQ,QAAQ,UAAU,CAAC,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAAA,IACnE,MAAM;AAAA,IAAC;AAAA,IAER,OAAA,CAAQ,MAAM,cAAA,CAAe,MAAA,CAAO,KAAK,CAAC,CAAA;AAC7C,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,oBAAA,CAAqB;AAAA,EACnC,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,OAAOC,YAAA,CAAO,EAAE,OAAA,EAAS,UAAA,EAAY,WAAW,CAAA;AACtD,EAAA,IAAA,CAAK,OAAA,GAAU,EAAE,OAAA,EAAS,UAAA,EAAY,SAAA,EAAU;AAChD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIC,eAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,CAAC,CAAA;AACxC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,aAAsB,SAAS,CAAA;AAAA,EACrC,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AACd,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,SAAA,IAAa,EAAC;AAC1C,IAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA;AACrD,IAAA,MAAM,KAAA,GAAQ,KAAA,IAAS,eAAA,CAAgB,MAAA,EAAQ,KAAK,CAAA;AAGpD,IAAA,KAAA,CACE,KAAA,GACI,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,GACrB,WAAA;AAAA,MACE,KAAK,OAAA,CAAQ,OAAA;AAAA,MACb,MAAA,CAAO,YAAA,CAAa,MAAA,EAAQ,SAAS,CAAC,CAAA;AAAA,MACtC,KAAA,EAAO,GAAA;AAAA,MACP,CAAC,EAAA,KAAO,IAAA,CAAK,OAAA,CAAQ,aAAa,EAAE;AAAA,KACtC,EAEH,IAAA,CAAK,CAAC,EAAA,KAAO;AACZ,MAAA,IAAI,CAAC,SAAA,EAAW,aAAA,CAAc,EAAE,CAAA;AAAA,IAClC,CAAC,CAAA,CACA,KAAA,CAAM,CAACC,MAAAA,KAAU;AAChB,MAAA,IAAI,CAAC,WAAW,QAAA,CAASA,MAAAA,YAAiB,QAAQA,MAAAA,CAAM,OAAA,GAAU,MAAA,CAAOA,MAAK,CAAC,CAAA;AAAA,IACjF,CAAC,CAAA;AACH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,SAAA,EAAW,OAAO,CAAC,CAAA;AAC/B,EAAA,IAAI,KAAA;AACF,IAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAoB,MAAK,OAAA,EACtC,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,OAAG,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBACVA,cAAA,CAAC,QAAA,EAAA,EAAO,OAAA,EAAS,MAAM,UAAA,CAAW,CAAC,KAAA,KAAU,KAAA,GAAQ,CAAC,CAAA,EAAG,QAAA,EAAA,kBAAA,EAAgB;AAAA,KAAA,EAC3E,CAAA;AAEJ,EAAA,IAAI,CAAC,UAAA;AACH,IAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAoB,IAAA,EAAK,UAAS,QAAA,EAAA,gCAAA,EAEjD,CAAA;AAEJ,EAAA,uBACEA,cAAA;AAAA,IAACC,kCAAA;AAAA,IAAA;AAAA,MAEC,OAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAO,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAC,CAAA,eAAA;AAAA,KAAA;AAAA,IAHlC;AAAA,GAIP;AAEJ","file":"chunk-IW7CDJTA.cjs","sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { parseVersionRef } from '@arbidocs/react/artifacts'\nimport { NativeDocxEditor, type NativeDocxAdapter } from './NativeDocxEditor'\n\n/** A workspace document as the comparison needs it: its current version and what it was made from. */\nexport interface NativeDocxComparedDocument {\n external_id: string\n current_version?: number | null\n derived_from?: ReadonlyArray<{\n doc_ext_id: string\n role: string\n version?: number | null\n }> | null\n}\n\nexport interface NativeDocxComparisonProps {\n adapter: NativeDocxAdapter\n baseId: string\n revisedId: string\n title: string\n /** Called once for each redline the comparison saves as a new document (to add it to the lists). */\n onCompared?: (documentId: string) => void | Promise<void>\n /**\n * The workspace's documents, all of them (a redline may be on any page). The unedited redline\n * saved earlier from the same two versions is opened from here instead of saving another.\n */\n documents?: ReadonlyArray<NativeDocxComparedDocument>\n}\n\n/** A `doc-…@v{n}` side names an older version: the endpoint takes its document and version apart. */\nfunction redlineQuery(baseId: string, revisedId: string): URLSearchParams {\n const base = parseVersionRef(baseId)\n const revised = parseVersionRef(revisedId)\n const query = new URLSearchParams({ base_ext_id: base.docId, revised_ext_id: revised.docId })\n if (base.version) query.set('base_version', String(base.version))\n if (revised.version) query.set('revised_version', String(revised.version))\n return query\n}\n\ninterface ComparedSide {\n docId: string\n version: number\n}\n\n/** The two versions compared. A plain id compares the document's current version (from the list). */\nfunction comparedSides(\n documents: ReadonlyArray<NativeDocxComparedDocument>,\n baseId: string,\n revisedId: string\n): { base: ComparedSide; revised: ComparedSide; key: string } | null {\n const side = (ref: string): ComparedSide | null => {\n const { docId, version } = parseVersionRef(ref)\n if (version) return { docId, version }\n const doc = documents.find((d) => d.external_id === docId)\n return doc ? { docId, version: doc.current_version ?? 1 } : null\n }\n const base = side(baseId)\n const revised = side(revisedId)\n if (!base || !revised) return null\n return {\n base,\n revised,\n key: `${base.docId}@v${base.version}>${revised.docId}@v${revised.version}`,\n }\n}\n\n/**\n * Redlines saved in this page's life, by the versions compared, with whether the lists have shown\n * them yet. One the lists never got (adding it failed) is reopened from here; one they showed and\n * no longer do was deleted.\n */\nconst savedThisSession = new Map<string, { id: string; listed: boolean }>()\n\n/**\n * The redline to reopen for these two versions: a document made from both (`redline_base` and\n * `redline_revised`, at the versions compared) that is still unedited (no version saved since it\n * was made, so it shows the real differences), else the one saved earlier in this page's life that\n * the lists never got. An edited or deleted one is not reopened: the comparison makes a fresh one.\n */\nfunction reusableRedline(\n documents: ReadonlyArray<NativeDocxComparedDocument>,\n sides: { base: ComparedSide; revised: ComparedSide; key: string }\n): string | undefined {\n const madeFrom = (doc: NativeDocxComparedDocument, role: string, from: ComparedSide) =>\n !!doc.derived_from?.some(\n (link) =>\n link.role === role && link.doc_ext_id === from.docId && link.version === from.version\n )\n const unedited = documents.find(\n (doc) =>\n (doc.current_version ?? 1) === 1 &&\n madeFrom(doc, 'redline_base', sides.base) &&\n madeFrom(doc, 'redline_revised', sides.revised)\n )\n if (unedited) return unedited.external_id\n const saved = savedThisSession.get(sides.key)\n if (!saved) return undefined\n // Listed now (yet not unedited) means edited; listed before and gone means deleted.\n if (saved.listed || documents.some((doc) => doc.external_id === saved.id)) {\n savedThisSession.delete(sides.key)\n return undefined\n }\n return saved.id\n}\n\n/** Note which redlines saved in this page's life the lists now show. */\nfunction noteListed(documents: ReadonlyArray<NativeDocxComparedDocument>): void {\n for (const saved of savedThisSession.values())\n if (!saved.listed && documents.some((doc) => doc.external_id === saved.id)) saved.listed = true\n}\n\n/**\n * Redlines being saved, by request. Another open of the same comparison meanwhile (React\n * StrictMode runs effects twice; reopening the viewer) waits for this one instead of saving a\n * second. Each is kept until its document has been added to the lists, where the next open finds it.\n */\nconst savingRedlines = new Map<string, Promise<string>>()\n\nfunction saveRedline(\n adapter: NativeDocxAdapter,\n query: string,\n sessionKey: string | undefined,\n onSaved: (documentId: string) => void | Promise<void>\n): Promise<string> {\n const saving = savingRedlines.get(query)\n if (saving) return saving\n const saved = adapter\n .request(`/redline?${query}`, { method: 'POST' })\n .then((response) => response.json())\n .then((result: { document_ext_id: string }) => {\n if (!result.document_ext_id) throw new Error('Comparison did not return a Word document.')\n if (sessionKey)\n savedThisSession.set(sessionKey, { id: result.document_ext_id, listed: false })\n return result.document_ext_id\n })\n savingRedlines.set(query, saved)\n void saved\n .then(\n (documentId) => Promise.resolve(onSaved(documentId)).catch(() => {}),\n () => {}\n )\n .finally(() => savingRedlines.delete(query))\n return saved\n}\n\n/** Word comparison through the host's authenticated transport and LibreOffice service. */\nexport function NativeDocxComparison({\n adapter,\n baseId,\n revisedId,\n title,\n onCompared,\n documents,\n}: NativeDocxComparisonProps) {\n const host = useRef({ adapter, onCompared, documents })\n host.current = { adapter, onCompared, documents }\n const [documentId, setDocumentId] = useState('')\n const [error, setError] = useState('')\n const [attempt, setAttempt] = useState(0)\n useEffect(() => {\n if (documents) noteListed(documents)\n }, [documents])\n useEffect(() => {\n let cancelled = false\n setDocumentId('')\n setError('')\n const listed = host.current.documents ?? []\n const sides = comparedSides(listed, baseId, revisedId)\n const saved = sides && reusableRedline(listed, sides)\n // The redline is a document of its own (the Word editor opens documents): reopen the unedited\n // one saved from these versions, else save it once, however often the comparison opens.\n void (\n saved\n ? Promise.resolve(saved)\n : saveRedline(\n host.current.adapter,\n String(redlineQuery(baseId, revisedId)),\n sides?.key,\n (id) => host.current.onCompared?.(id)\n )\n )\n .then((id) => {\n if (!cancelled) setDocumentId(id)\n })\n .catch((error) => {\n if (!cancelled) setError(error instanceof Error ? error.message : String(error))\n })\n return () => {\n cancelled = true\n }\n }, [baseId, revisedId, attempt])\n if (error)\n return (\n <div className=\"native-docx-error\" role=\"alert\">\n <p>{error}</p>\n <button onClick={() => setAttempt((value) => value + 1)}>Retry comparison</button>\n </div>\n )\n if (!documentId)\n return (\n <div className=\"native-docx-error\" role=\"status\">\n Comparing Word documents…\n </div>\n )\n return (\n <NativeDocxEditor\n key={documentId}\n adapter={adapter}\n documentId={documentId}\n title={`${title.replace(/\\.[^.]+$/, '')} (redline).docx`}\n />\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/docx/NativeDocxComparison.tsx"],"names":["parseVersionRef","useRef","useState","useEffect","error","jsxs","jsx","NativeDocxEditor"],"mappings":"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","file":"chunk-COD5ENHK.cjs","sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { parseVersionRef } from '@arbidocs/react/artifacts'\nimport { NativeDocxEditor, type NativeDocxAdapter } from './NativeDocxEditor'\n\n/** A workspace document as the comparison needs it: its current version and what it was made from. */\nexport interface NativeDocxComparedDocument {\n external_id: string\n current_version?: number | null\n derived_from?: ReadonlyArray<{\n doc_ext_id: string\n role: string\n version?: number | null\n }> | null\n}\n\nexport interface NativeDocxComparisonProps {\n adapter: NativeDocxAdapter\n baseId: string\n revisedId: string\n title: string\n /** Called once for each redline the comparison saves as a new document (to add it to the lists). */\n onCompared?: (documentId: string) => void | Promise<void>\n /**\n * The workspace's documents, all of them (a redline may be on any page). The unedited redline\n * saved earlier from the same two versions is opened from here instead of saving another.\n */\n documents?: ReadonlyArray<NativeDocxComparedDocument>\n}\n\n/** A `doc-…@v{n}` side names an older version: the endpoint takes its document and version apart. */\nfunction redlineQuery(baseId: string, revisedId: string): URLSearchParams {\n const base = parseVersionRef(baseId)\n const revised = parseVersionRef(revisedId)\n const query = new URLSearchParams({ base_ext_id: base.docId, revised_ext_id: revised.docId })\n if (base.version) query.set('base_version', String(base.version))\n if (revised.version) query.set('revised_version', String(revised.version))\n return query\n}\n\ninterface ComparedSide {\n docId: string\n version: number\n}\n\n/** The two versions compared. A plain id compares the document's current version (from the list). */\nfunction comparedSides(\n documents: ReadonlyArray<NativeDocxComparedDocument>,\n baseId: string,\n revisedId: string\n): { base: ComparedSide; revised: ComparedSide; key: string } | null {\n const side = (ref: string): ComparedSide | null => {\n const { docId, version } = parseVersionRef(ref)\n if (version) return { docId, version }\n const doc = documents.find((d) => d.external_id === docId)\n return doc ? { docId, version: doc.current_version ?? 1 } : null\n }\n const base = side(baseId)\n const revised = side(revisedId)\n if (!base || !revised) return null\n return {\n base,\n revised,\n key: `${base.docId}@v${base.version}>${revised.docId}@v${revised.version}`,\n }\n}\n\n/**\n * Redlines saved in this page's life, by the versions compared, with whether the lists have shown\n * them yet. One the lists never got (adding it failed) is reopened from here; one they showed and\n * no longer do was deleted.\n */\nconst savedThisSession = new Map<string, { id: string; listed: boolean }>()\n\n/**\n * The redline to reopen for these two versions: a document made from both (`redline_base` and\n * `redline_revised`, at the versions compared) that is still unedited (no version saved since it\n * was made, so it shows the real differences), else the one saved earlier in this page's life that\n * the lists never got. An edited or deleted one is not reopened: the comparison makes a fresh one.\n */\nfunction reusableRedline(\n documents: ReadonlyArray<NativeDocxComparedDocument>,\n sides: { base: ComparedSide; revised: ComparedSide; key: string }\n): string | undefined {\n const madeFrom = (doc: NativeDocxComparedDocument, role: string, from: ComparedSide) =>\n !!doc.derived_from?.some(\n (link) =>\n link.role === role && link.doc_ext_id === from.docId && link.version === from.version\n )\n const unedited = documents.find(\n (doc) =>\n (doc.current_version ?? 1) === 1 &&\n madeFrom(doc, 'redline_base', sides.base) &&\n madeFrom(doc, 'redline_revised', sides.revised)\n )\n if (unedited) return unedited.external_id\n const saved = savedThisSession.get(sides.key)\n if (!saved) return undefined\n // Listed now (yet not unedited) means edited; listed before and gone means deleted.\n if (saved.listed || documents.some((doc) => doc.external_id === saved.id)) {\n savedThisSession.delete(sides.key)\n return undefined\n }\n return saved.id\n}\n\n/** Note which redlines saved in this page's life the lists now show. */\nfunction noteListed(documents: ReadonlyArray<NativeDocxComparedDocument>): void {\n for (const saved of savedThisSession.values())\n if (!saved.listed && documents.some((doc) => doc.external_id === saved.id)) saved.listed = true\n}\n\n/**\n * Redlines being saved, by request. Another open of the same comparison meanwhile (React\n * StrictMode runs effects twice; reopening the viewer) waits for this one instead of saving a\n * second. Each is kept until its document has been added to the lists, where the next open finds it.\n */\nconst savingRedlines = new Map<string, Promise<string>>()\n\nfunction saveRedline(\n adapter: NativeDocxAdapter,\n query: string,\n sessionKey: string | undefined,\n onSaved: (documentId: string) => void | Promise<void>\n): Promise<string> {\n const saving = savingRedlines.get(query)\n if (saving) return saving\n const saved = adapter\n .request(`/redline?${query}`, { method: 'POST' })\n .then((response) => response.json())\n .then((result: { document_ext_id: string }) => {\n if (!result.document_ext_id) throw new Error('Comparison did not return a Word document.')\n if (sessionKey)\n savedThisSession.set(sessionKey, { id: result.document_ext_id, listed: false })\n return result.document_ext_id\n })\n savingRedlines.set(query, saved)\n void saved\n .then(\n (documentId) => Promise.resolve(onSaved(documentId)).catch(() => {}),\n () => {}\n )\n .finally(() => savingRedlines.delete(query))\n return saved\n}\n\n/** Word comparison through the host's authenticated transport and LibreOffice service. */\nexport function NativeDocxComparison({\n adapter,\n baseId,\n revisedId,\n title,\n onCompared,\n documents,\n}: NativeDocxComparisonProps) {\n const host = useRef({ adapter, onCompared, documents })\n host.current = { adapter, onCompared, documents }\n const [documentId, setDocumentId] = useState('')\n const [error, setError] = useState('')\n const [attempt, setAttempt] = useState(0)\n useEffect(() => {\n if (documents) noteListed(documents)\n }, [documents])\n useEffect(() => {\n let cancelled = false\n setDocumentId('')\n setError('')\n const listed = host.current.documents ?? []\n const sides = comparedSides(listed, baseId, revisedId)\n const saved = sides && reusableRedline(listed, sides)\n // The redline is a document of its own (the Word editor opens documents): reopen the unedited\n // one saved from these versions, else save it once, however often the comparison opens.\n void (\n saved\n ? Promise.resolve(saved)\n : saveRedline(\n host.current.adapter,\n String(redlineQuery(baseId, revisedId)),\n sides?.key,\n (id) => host.current.onCompared?.(id)\n )\n )\n .then((id) => {\n if (!cancelled) setDocumentId(id)\n })\n .catch((error) => {\n if (!cancelled) setError(error instanceof Error ? error.message : String(error))\n })\n return () => {\n cancelled = true\n }\n }, [baseId, revisedId, attempt])\n if (error)\n return (\n <div className=\"native-docx-error\" role=\"alert\">\n <p>{error}</p>\n <button onClick={() => setAttempt((value) => value + 1)}>Retry comparison</button>\n </div>\n )\n if (!documentId)\n return (\n <div className=\"native-docx-error\" role=\"status\">\n Comparing Word documents…\n </div>\n )\n return (\n <NativeDocxEditor\n key={documentId}\n adapter={adapter}\n documentId={documentId}\n title={`${title.replace(/\\.[^.]+$/, '')} (redline).docx`}\n />\n )\n}\n"]}
|