@arbidocs/blocks 0.5.114 → 0.5.115
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-2KXEQENS.cjs → ConnectedCallDock-WER7R222.cjs} +21 -21
- package/dist/{ConnectedCallDock-2KXEQENS.cjs.map → ConnectedCallDock-WER7R222.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-MU3NPNXF.cjs → ConnectedCallRoom-T7OBQTYP.cjs} +14 -14
- package/dist/{ConnectedCallRoom-MU3NPNXF.cjs.map → ConnectedCallRoom-T7OBQTYP.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-VH3I65H6.cjs → ConnectedNativeDocxComparison-YXMYJWXY.cjs} +19 -19
- package/dist/{ConnectedNativeDocxComparison-VH3I65H6.cjs.map → ConnectedNativeDocxComparison-YXMYJWXY.cjs.map} +1 -1
- package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs → ConnectedProductionSetDialog-LHB4VQWC.cjs} +3 -3
- package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs.map → ConnectedProductionSetDialog-LHB4VQWC.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-KQSHCA75.cjs → ConnectedStreamedWordArtifact-2RTCHVPI.cjs} +19 -19
- package/dist/{ConnectedStreamedWordArtifact-KQSHCA75.cjs.map → ConnectedStreamedWordArtifact-2RTCHVPI.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-OCPFVMLD.cjs → DocumentReviewCard-ZSBZBGFK.cjs} +15 -15
- package/dist/{DocumentReviewCard-OCPFVMLD.cjs.map → DocumentReviewCard-ZSBZBGFK.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-BAGOEMXW.cjs → FilesViewerDialog-I5QIHQZT.cjs} +44 -44
- package/dist/{FilesViewerDialog-BAGOEMXW.cjs.map → FilesViewerDialog-I5QIHQZT.cjs.map} +1 -1
- package/dist/{NativeDocxEditor-EJEIJDOC.cjs → NativeDocxEditor-H6TAEVGY.cjs} +6 -6
- package/dist/{NativeDocxEditor-EJEIJDOC.cjs.map → NativeDocxEditor-H6TAEVGY.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-IMAZICIZ.cjs → WorkspaceTableView-J3C6VH4T.cjs} +8 -8
- package/dist/{WorkspaceTableView-IMAZICIZ.cjs.map → WorkspaceTableView-J3C6VH4T.cjs.map} +1 -1
- package/dist/agents/index.cjs +297 -297
- package/dist/{ai-7U4B4CVF.cjs → ai-IM4A23YT.cjs} +24 -24
- package/dist/ai-IM4A23YT.cjs.map +1 -0
- package/dist/calls/index.cjs +121 -121
- package/dist/chat/DraftingDocChip.d.ts +3 -1
- package/dist/chat/DraftingDocChip.js +7 -4
- package/dist/chat/DraftingDocChip.js.map +2 -2
- package/dist/chat/index.cjs +37 -37
- package/dist/{chunk-AHT6DQNI.cjs → chunk-24EDG4PC.cjs} +50 -50
- package/dist/{chunk-AHT6DQNI.cjs.map → chunk-24EDG4PC.cjs.map} +1 -1
- package/dist/{chunk-Q6DQGGP4.cjs → chunk-325GVZE6.cjs} +3 -3
- package/dist/{chunk-Q6DQGGP4.cjs.map → chunk-325GVZE6.cjs.map} +1 -1
- package/dist/{chunk-HM5L4SBC.cjs → chunk-3A7QWUAW.cjs} +3 -3
- package/dist/{chunk-HM5L4SBC.cjs.map → chunk-3A7QWUAW.cjs.map} +1 -1
- package/dist/{chunk-ET3NVY27.cjs → chunk-42TURFHF.cjs} +5 -5
- package/dist/{chunk-ET3NVY27.cjs.map → chunk-42TURFHF.cjs.map} +1 -1
- package/dist/{chunk-LFRNBT2I.cjs → chunk-557MJ4IH.cjs} +20 -20
- package/dist/{chunk-LFRNBT2I.cjs.map → chunk-557MJ4IH.cjs.map} +1 -1
- package/dist/{chunk-JSQQV23D.cjs → chunk-6UTKM5AB.cjs} +3 -3
- package/dist/{chunk-JSQQV23D.cjs.map → chunk-6UTKM5AB.cjs.map} +1 -1
- package/dist/{chunk-H5OLHP2U.cjs → chunk-7OPOPYV6.cjs} +3 -3
- package/dist/{chunk-H5OLHP2U.cjs.map → chunk-7OPOPYV6.cjs.map} +1 -1
- package/dist/{chunk-MGQSLMTC.cjs → chunk-A3T3IC3K.cjs} +57 -57
- package/dist/{chunk-MGQSLMTC.cjs.map → chunk-A3T3IC3K.cjs.map} +1 -1
- package/dist/{chunk-WW6LXQY6.cjs → chunk-B3LZITVF.cjs} +12 -12
- package/dist/{chunk-WW6LXQY6.cjs.map → chunk-B3LZITVF.cjs.map} +1 -1
- package/dist/{chunk-V5IMYLYK.cjs → chunk-BQ5RIWWT.cjs} +3 -3
- package/dist/{chunk-V5IMYLYK.cjs.map → chunk-BQ5RIWWT.cjs.map} +1 -1
- package/dist/chunk-CIHERNDO.cjs +18 -0
- package/dist/{chunk-ZZA756I4.cjs.map → chunk-CIHERNDO.cjs.map} +1 -1
- package/dist/{chunk-MC4F2URI.cjs → chunk-CPG7II4E.cjs} +28 -28
- package/dist/{chunk-MC4F2URI.cjs.map → chunk-CPG7II4E.cjs.map} +1 -1
- package/dist/{chunk-7XT5B2DZ.cjs → chunk-CPR6EHG7.cjs} +47 -47
- package/dist/{chunk-7XT5B2DZ.cjs.map → chunk-CPR6EHG7.cjs.map} +1 -1
- package/dist/{chunk-3U36VYMD.cjs → chunk-DDIW4HLU.cjs} +27 -27
- package/dist/{chunk-3U36VYMD.cjs.map → chunk-DDIW4HLU.cjs.map} +1 -1
- package/dist/{chunk-INEPPS4H.cjs → chunk-IW7CDJTA.cjs} +4 -4
- package/dist/{chunk-INEPPS4H.cjs.map → chunk-IW7CDJTA.cjs.map} +1 -1
- package/dist/{chunk-IFOGBMAE.cjs → chunk-KLMNCBLY.cjs} +9 -6
- package/dist/chunk-KLMNCBLY.cjs.map +1 -0
- package/dist/{chunk-TDN33HSK.cjs → chunk-KTQOGT2L.cjs} +6 -6
- package/dist/{chunk-TDN33HSK.cjs.map → chunk-KTQOGT2L.cjs.map} +1 -1
- package/dist/{chunk-UUENH4BJ.cjs → chunk-KXIRVKCJ.cjs} +3 -3
- package/dist/{chunk-UUENH4BJ.cjs.map → chunk-KXIRVKCJ.cjs.map} +1 -1
- package/dist/{chunk-4ED7CNOX.cjs → chunk-M6IKVKU5.cjs} +40 -3
- package/dist/chunk-M6IKVKU5.cjs.map +1 -0
- package/dist/{chunk-XKDUPU7B.cjs → chunk-NJCK6V6U.cjs} +4 -4
- package/dist/{chunk-XKDUPU7B.cjs.map → chunk-NJCK6V6U.cjs.map} +1 -1
- package/dist/{chunk-5QUL5BZO.cjs → chunk-NNUK5ZM7.cjs} +4 -4
- package/dist/{chunk-5QUL5BZO.cjs.map → chunk-NNUK5ZM7.cjs.map} +1 -1
- package/dist/{chunk-4NPCDS2X.cjs → chunk-NY3YUCOW.cjs} +3 -3
- package/dist/{chunk-4NPCDS2X.cjs.map → chunk-NY3YUCOW.cjs.map} +1 -1
- package/dist/{chunk-6DCIZA3X.cjs → chunk-OEREKAAP.cjs} +75 -75
- package/dist/{chunk-6DCIZA3X.cjs.map → chunk-OEREKAAP.cjs.map} +1 -1
- package/dist/{chunk-3ODEWSRO.cjs → chunk-P77YTTJ3.cjs} +4 -4
- package/dist/{chunk-3ODEWSRO.cjs.map → chunk-P77YTTJ3.cjs.map} +1 -1
- package/dist/{chunk-LYTIQQQ2.cjs → chunk-R7CJEIA5.cjs} +3 -3
- package/dist/{chunk-LYTIQQQ2.cjs.map → chunk-R7CJEIA5.cjs.map} +1 -1
- package/dist/{chunk-2W5E62EY.cjs → chunk-SGYSDABK.cjs} +6 -6
- package/dist/{chunk-2W5E62EY.cjs.map → chunk-SGYSDABK.cjs.map} +1 -1
- package/dist/{chunk-UNDQYTRF.cjs → chunk-T23UTIRI.cjs} +6 -6
- package/dist/{chunk-UNDQYTRF.cjs.map → chunk-T23UTIRI.cjs.map} +1 -1
- package/dist/{chunk-E4BLRF2L.cjs → chunk-TDO5UWXF.cjs} +5 -5
- package/dist/{chunk-E4BLRF2L.cjs.map → chunk-TDO5UWXF.cjs.map} +1 -1
- package/dist/{chunk-4IOYQLKG.cjs → chunk-TP5PGWIO.cjs} +3 -3
- package/dist/{chunk-4IOYQLKG.cjs.map → chunk-TP5PGWIO.cjs.map} +1 -1
- package/dist/{chunk-7X3FS5HQ.cjs → chunk-TT4IF52H.cjs} +35 -35
- package/dist/{chunk-7X3FS5HQ.cjs.map → chunk-TT4IF52H.cjs.map} +1 -1
- package/dist/{chunk-GQXPNIRE.cjs → chunk-WAV762GP.cjs} +6 -6
- package/dist/{chunk-GQXPNIRE.cjs.map → chunk-WAV762GP.cjs.map} +1 -1
- package/dist/{chunk-436I7PQL.cjs → chunk-WR2SF44W.cjs} +9 -9
- package/dist/{chunk-436I7PQL.cjs.map → chunk-WR2SF44W.cjs.map} +1 -1
- package/dist/{chunk-MZ2KZXNU.cjs → chunk-WXUU3COI.cjs} +3 -3
- package/dist/{chunk-MZ2KZXNU.cjs.map → chunk-WXUU3COI.cjs.map} +1 -1
- package/dist/{chunk-NHHEMBXQ.cjs → chunk-X5LANJDZ.cjs} +12 -12
- package/dist/{chunk-NHHEMBXQ.cjs.map → chunk-X5LANJDZ.cjs.map} +1 -1
- package/dist/{chunk-BW5MF464.cjs → chunk-XKVPSOKP.cjs} +4 -4
- package/dist/{chunk-BW5MF464.cjs.map → chunk-XKVPSOKP.cjs.map} +1 -1
- package/dist/{chunk-57EE6CMW.cjs → chunk-Y24V6HPR.cjs} +15 -15
- package/dist/{chunk-57EE6CMW.cjs.map → chunk-Y24V6HPR.cjs.map} +1 -1
- package/dist/{chunk-7TEUGFIL.cjs → chunk-YGXOKB5Z.cjs} +4 -4
- package/dist/{chunk-7TEUGFIL.cjs.map → chunk-YGXOKB5Z.cjs.map} +1 -1
- package/dist/{chunk-3R6YHJ3G.cjs → chunk-ZTXQIIFV.cjs} +6 -6
- package/dist/{chunk-3R6YHJ3G.cjs.map → chunk-ZTXQIIFV.cjs.map} +1 -1
- package/dist/connect/docx.cjs +23 -23
- package/dist/connect/index.cjs +1231 -1069
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/viewer.cjs +33 -33
- package/dist/connection/conversation/ConnectedConversation.js +143 -55
- package/dist/connection/conversation/ConnectedConversation.js.map +2 -2
- package/dist/connection/conversation/ConversationSendButton.d.ts +1 -0
- package/dist/connection/conversation/ConversationSendButton.js +3 -2
- package/dist/connection/conversation/ConversationSendButton.js.map +2 -2
- package/dist/connection/conversation/DocumentTargetNotice.d.ts +7 -0
- package/dist/connection/conversation/DocumentTargetNotice.js +45 -0
- package/dist/connection/conversation/DocumentTargetNotice.js.map +7 -0
- package/dist/connection/conversation/documentSwitch.d.ts +9 -0
- package/dist/connection/conversation/documentSwitch.js +40 -0
- package/dist/connection/conversation/documentSwitch.js.map +7 -0
- package/dist/dashboards/index.cjs +1 -1
- package/dist/docx/NativeDocxEditor.js +3 -1
- package/dist/docx/NativeDocxEditor.js.map +2 -2
- package/dist/docx/index.cjs +38 -38
- package/dist/docx/signatures/SignatureFields.d.ts +2 -0
- package/dist/docx/signatures/SignatureFields.js +40 -2
- 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 +1731 -1731
- package/dist/settings/index.cjs +147 -147
- package/dist/shell/index.cjs +90 -90
- package/dist/site/index.cjs +5 -5
- package/dist/studio/index.cjs +27 -27
- package/dist/styles.css +1 -1
- package/dist/workflow-canvas/index.cjs +54 -54
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ai-7U4B4CVF.cjs.map +0 -1
- package/dist/chunk-4ED7CNOX.cjs.map +0 -1
- package/dist/chunk-IFOGBMAE.cjs.map +0 -1
- package/dist/chunk-ZZA756I4.cjs +0 -18
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/connection/conversation/ConversationSendButton.tsx"],
|
|
4
|
-
"sourcesContent": ["import { memo } from 'react'\nimport { assistantLabels, selectDraft, useArbiSessionState } from '@arbidocs/react'\nimport { hasMessageBody, useAssistantName } from '@arbidocs/react/shell'\nimport { ComposerSend } from '../../chat/Composer'\n\nexport interface ConversationSendButtonProps {\n onClick: () => void\n /** The thread ends in a question with no answer: an empty composer offers to retry it. */\n hasOrphanedMessage: boolean\n}\n\n/**\n * The composer's send button. It subscribes to the draft itself, so the conversation does not\n * re-render on every keystroke.\n *\n * Only an empty draft disables it. A failed send never does: the alert above the composer offers\n * Retry, and a new message must still go out (it replies past the failed turn).\n */\nexport const ConversationSendButton = memo(function ConversationSendButton({\n onClick,\n hasOrphanedMessage,\n}: ConversationSendButtonProps) {\n const draftMessage = useArbiSessionState(selectDraft)\n // The assistant's name alone (a shared thread's starting draft) is not a message.\n const assistantName = useAssistantName()\n const recipients = assistantLabels(assistantName)\n\n // Show retry icon when orphaned and no draft, send icon otherwise\n const showRetryIcon = hasOrphanedMessage && draftMessage === ''\n\n return (\n <ComposerSend\n onSend={onClick}\n isRetry={showRetryIcon}\n disabled={!showRetryIcon && !hasMessageBody(draftMessage, recipients)}\n />\n )\n})\n"],
|
|
5
|
-
"mappings": ";
|
|
4
|
+
"sourcesContent": ["import { memo } from 'react'\nimport { assistantLabels, selectDraft, useArbiSessionState } from '@arbidocs/react'\nimport { hasMessageBody, useAssistantName } from '@arbidocs/react/shell'\nimport { ComposerSend } from '../../chat/Composer'\n\nexport interface ConversationSendButtonProps {\n onClick: () => void\n /** The thread ends in a question with no answer: an empty composer offers to retry it. */\n hasOrphanedMessage: boolean\n disabled?: boolean\n}\n\n/**\n * The composer's send button. It subscribes to the draft itself, so the conversation does not\n * re-render on every keystroke.\n *\n * Only an empty draft disables it. A failed send never does: the alert above the composer offers\n * Retry, and a new message must still go out (it replies past the failed turn).\n */\nexport const ConversationSendButton = memo(function ConversationSendButton({\n onClick,\n hasOrphanedMessage,\n disabled = false,\n}: ConversationSendButtonProps) {\n const draftMessage = useArbiSessionState(selectDraft)\n // The assistant's name alone (a shared thread's starting draft) is not a message.\n const assistantName = useAssistantName()\n const recipients = assistantLabels(assistantName)\n\n // Show retry icon when orphaned and no draft, send icon otherwise\n const showRetryIcon = hasOrphanedMessage && draftMessage === ''\n\n return (\n <ComposerSend\n onSend={onClick}\n isRetry={showRetryIcon}\n disabled={disabled || (!showRetryIcon && !hasMessageBody(draftMessage, recipients))}\n />\n )\n})\n"],
|
|
5
|
+
"mappings": ";AAiCI;AAjCJ,SAAS,YAAY;AACrB,SAAS,iBAAiB,aAAa,2BAA2B;AAClE,SAAS,gBAAgB,wBAAwB;AACjD,SAAS,oBAAoB;AAgBtB,MAAM,yBAAyB,KAAK,SAASA,wBAAuB;AAAA,EACzE;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAgC;AAC9B,QAAM,eAAe,oBAAoB,WAAW;AAEpD,QAAM,gBAAgB,iBAAiB;AACvC,QAAM,aAAa,gBAAgB,aAAa;AAGhD,QAAM,gBAAgB,sBAAsB,iBAAiB;AAE7D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,UAAU,YAAa,CAAC,iBAAiB,CAAC,eAAe,cAAc,UAAU;AAAA;AAAA,EACnF;AAEJ,CAAC;",
|
|
6
6
|
"names": ["ConversationSendButton"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Clarify which document a turn will edit when the viewer shows another document. */
|
|
2
|
+
export declare function DocumentTargetNotice({ target, visible, onSwitch, disabled, }: {
|
|
3
|
+
target: string;
|
|
4
|
+
visible: string;
|
|
5
|
+
onSwitch?: () => void;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
function DocumentTargetNotice({
|
|
4
|
+
target,
|
|
5
|
+
visible,
|
|
6
|
+
onSwitch,
|
|
7
|
+
disabled = false
|
|
8
|
+
}) {
|
|
9
|
+
return /* @__PURE__ */ jsxs(
|
|
10
|
+
"div",
|
|
11
|
+
{
|
|
12
|
+
className: "mx-3 mb-2 rounded-md border border-amber-400/50 bg-amber-50 p-2 text-sm text-foreground dark:bg-amber-950",
|
|
13
|
+
role: "note",
|
|
14
|
+
children: [
|
|
15
|
+
/* @__PURE__ */ jsxs("p", { children: [
|
|
16
|
+
"This thread will edit ",
|
|
17
|
+
/* @__PURE__ */ jsx("strong", { children: target }),
|
|
18
|
+
". The viewer shows ",
|
|
19
|
+
/* @__PURE__ */ jsx("strong", { children: visible }),
|
|
20
|
+
"."
|
|
21
|
+
] }),
|
|
22
|
+
onSwitch ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
23
|
+
/* @__PURE__ */ jsx("p", { children: "Switching changes the thread\u2019s document for everyone in the thread." }),
|
|
24
|
+
/* @__PURE__ */ jsxs(
|
|
25
|
+
"button",
|
|
26
|
+
{
|
|
27
|
+
type: "button",
|
|
28
|
+
className: "mt-1 underline disabled:opacity-50",
|
|
29
|
+
onClick: onSwitch,
|
|
30
|
+
disabled,
|
|
31
|
+
children: [
|
|
32
|
+
"Switch this thread to ",
|
|
33
|
+
visible
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
)
|
|
37
|
+
] }) : /* @__PURE__ */ jsx("p", { children: "The visible document is unavailable; it cannot be attached here." })
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
export {
|
|
43
|
+
DocumentTargetNotice
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=DocumentTargetNotice.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/connection/conversation/DocumentTargetNotice.tsx"],
|
|
4
|
+
"sourcesContent": ["/** Clarify which document a turn will edit when the viewer shows another document. */\nexport function DocumentTargetNotice({\n target,\n visible,\n onSwitch,\n disabled = false,\n}: {\n target: string\n visible: string\n onSwitch?: () => void\n disabled?: boolean\n}) {\n return (\n <div\n className=\"mx-3 mb-2 rounded-md border border-amber-400/50 bg-amber-50 p-2 text-sm text-foreground dark:bg-amber-950\"\n role=\"note\"\n >\n <p>\n This thread will edit <strong>{target}</strong>. The viewer shows <strong>{visible}</strong>\n .\n </p>\n {onSwitch ? (\n <>\n <p>Switching changes the thread\u2019s document for everyone in the thread.</p>\n <button\n type=\"button\"\n className=\"mt-1 underline disabled:opacity-50\"\n onClick={onSwitch}\n disabled={disabled}\n >\n Switch this thread to {visible}\n </button>\n </>\n ) : (\n <p>The visible document is unavailable; it cannot be attached here.</p>\n )}\n </div>\n )\n}\n"],
|
|
5
|
+
"mappings": ";AAiBM,SAKE,UAJsB,KADxB;AAhBC,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAKG;AACD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MAEL;AAAA,6BAAC,OAAE;AAAA;AAAA,UACqB,oBAAC,YAAQ,kBAAO;AAAA,UAAS;AAAA,UAAmB,oBAAC,YAAQ,mBAAQ;AAAA,UAAS;AAAA,WAE9F;AAAA,QACC,WACC,iCACE;AAAA,8BAAC,OAAE,sFAAmE;AAAA,UACtE;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS;AAAA,cACT;AAAA,cACD;AAAA;AAAA,gBACwB;AAAA;AAAA;AAAA,UACzB;AAAA,WACF,IAEA,oBAAC,OAAE,8EAAgE;AAAA;AAAA;AAAA,EAEvE;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Guard a send until an explicit thread-document switch has settled. */
|
|
2
|
+
export declare function createDocumentSwitchGuard(): {
|
|
3
|
+
isPending: () => boolean;
|
|
4
|
+
hasFailed: () => boolean;
|
|
5
|
+
acknowledgeFailure: () => void;
|
|
6
|
+
switch(bind: () => Promise<boolean>, onPending: (pending: boolean) => void): Promise<boolean>;
|
|
7
|
+
};
|
|
8
|
+
/** Only the initiating conversation may receive the result of its pending switch. */
|
|
9
|
+
export declare function switchInScope(guard: ReturnType<typeof createDocumentSwitchGuard>, bind: () => Promise<boolean>, isCurrent: () => boolean, onPending: (pending: boolean) => void, onFailure: () => void): Promise<void>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
function createDocumentSwitchGuard() {
|
|
3
|
+
let pending = false;
|
|
4
|
+
let failed = false;
|
|
5
|
+
return {
|
|
6
|
+
isPending: () => pending,
|
|
7
|
+
hasFailed: () => failed,
|
|
8
|
+
acknowledgeFailure: () => {
|
|
9
|
+
failed = false;
|
|
10
|
+
},
|
|
11
|
+
async switch(bind, onPending) {
|
|
12
|
+
if (pending) return false;
|
|
13
|
+
pending = true;
|
|
14
|
+
failed = false;
|
|
15
|
+
onPending(true);
|
|
16
|
+
try {
|
|
17
|
+
const ok = await bind();
|
|
18
|
+
failed = !ok;
|
|
19
|
+
return ok;
|
|
20
|
+
} catch (error) {
|
|
21
|
+
failed = true;
|
|
22
|
+
throw error;
|
|
23
|
+
} finally {
|
|
24
|
+
pending = false;
|
|
25
|
+
onPending(false);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async function switchInScope(guard, bind, isCurrent, onPending, onFailure) {
|
|
31
|
+
const ok = await guard.switch(bind, (pending) => {
|
|
32
|
+
if (isCurrent()) onPending(pending);
|
|
33
|
+
});
|
|
34
|
+
if (!ok && isCurrent()) onFailure();
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
createDocumentSwitchGuard,
|
|
38
|
+
switchInScope
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=documentSwitch.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/connection/conversation/documentSwitch.ts"],
|
|
4
|
+
"sourcesContent": ["/** Guard a send until an explicit thread-document switch has settled. */\nexport function createDocumentSwitchGuard() {\n let pending = false\n let failed = false\n return {\n isPending: () => pending,\n hasFailed: () => failed,\n acknowledgeFailure: () => {\n failed = false\n },\n async switch(bind: () => Promise<boolean>, onPending: (pending: boolean) => void) {\n if (pending) return false\n pending = true\n failed = false\n onPending(true)\n try {\n const ok = await bind()\n failed = !ok\n return ok\n } catch (error) {\n failed = true\n throw error\n } finally {\n pending = false\n onPending(false)\n }\n },\n }\n}\n\n/** Only the initiating conversation may receive the result of its pending switch. */\nexport async function switchInScope(\n guard: ReturnType<typeof createDocumentSwitchGuard>,\n bind: () => Promise<boolean>,\n isCurrent: () => boolean,\n onPending: (pending: boolean) => void,\n onFailure: () => void\n) {\n const ok = await guard.switch(bind, (pending) => {\n if (isCurrent()) onPending(pending)\n })\n if (!ok && isCurrent()) onFailure()\n}\n"],
|
|
5
|
+
"mappings": ";AACO,SAAS,4BAA4B;AAC1C,MAAI,UAAU;AACd,MAAI,SAAS;AACb,SAAO;AAAA,IACL,WAAW,MAAM;AAAA,IACjB,WAAW,MAAM;AAAA,IACjB,oBAAoB,MAAM;AACxB,eAAS;AAAA,IACX;AAAA,IACA,MAAM,OAAO,MAA8B,WAAuC;AAChF,UAAI,QAAS,QAAO;AACpB,gBAAU;AACV,eAAS;AACT,gBAAU,IAAI;AACd,UAAI;AACF,cAAM,KAAK,MAAM,KAAK;AACtB,iBAAS,CAAC;AACV,eAAO;AAAA,MACT,SAAS,OAAO;AACd,iBAAS;AACT,cAAM;AAAA,MACR,UAAE;AACA,kBAAU;AACV,kBAAU,KAAK;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AACF;AAGA,eAAsB,cACpB,OACA,MACA,WACA,WACA,WACA;AACA,QAAM,KAAK,MAAM,MAAM,OAAO,MAAM,CAAC,YAAY;AAC/C,QAAI,UAAU,EAAG,WAAU,OAAO;AAAA,EACpC,CAAC;AACD,MAAI,CAAC,MAAM,UAAU,EAAG,WAAU;AACpC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -10,8 +10,8 @@ require('../chunk-ZU2B2RZK.cjs');
|
|
|
10
10
|
var chunkNSD37OF5_cjs = require('../chunk-NSD37OF5.cjs');
|
|
11
11
|
var chunkOEJQFPWO_cjs = require('../chunk-OEJQFPWO.cjs');
|
|
12
12
|
require('../chunk-JV5TVUOU.cjs');
|
|
13
|
-
require('../chunk-IPSHAMO2.cjs');
|
|
14
13
|
var chunkZW6FPIFC_cjs = require('../chunk-ZW6FPIFC.cjs');
|
|
14
|
+
require('../chunk-IPSHAMO2.cjs');
|
|
15
15
|
var chunkTKHCIHE2_cjs = require('../chunk-TKHCIHE2.cjs');
|
|
16
16
|
require('../chunk-JDFBEGQO.cjs');
|
|
17
17
|
require('../chunk-ULWRNGGE.cjs');
|
|
@@ -58,6 +58,7 @@ import {
|
|
|
58
58
|
import { QuickParts } from "./template/QuickParts.js";
|
|
59
59
|
import {
|
|
60
60
|
MySignatureContextItems,
|
|
61
|
+
SignatureFieldContextItem,
|
|
61
62
|
MySignatureMenu,
|
|
62
63
|
SignatureFieldMenu,
|
|
63
64
|
SignatureFieldsProvider
|
|
@@ -726,7 +727,8 @@ function NativeDocxEditor({
|
|
|
726
727
|
/* @__PURE__ */ jsx(DocxEditor.HyperLink, {}),
|
|
727
728
|
/* @__PURE__ */ jsxs(DocxEditor.ContextMenu, { children: [
|
|
728
729
|
/* @__PURE__ */ jsx(DocxContextMenuExtras, {}),
|
|
729
|
-
/* @__PURE__ */ jsx(MySignatureContextItems, {})
|
|
730
|
+
/* @__PURE__ */ jsx(MySignatureContextItems, {}),
|
|
731
|
+
/* @__PURE__ */ jsx(SignatureFieldContextItem, {})
|
|
730
732
|
] })
|
|
731
733
|
] }),
|
|
732
734
|
!compact && /* @__PURE__ */ jsx(DocxEditor.PageNumber, {})
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/docx/NativeDocxEditor.tsx"],
|
|
4
|
-
"sourcesContent": ["import { normalizeDocxExport } from './export'\nimport { WordDraftStream } from './streamWordDocument'\nimport {\n DocxMentions,\n DocxCommentActivity,\n type DocxMention,\n type DocxAgentCommentRequest,\n type DocxMentionDelivery,\n type DocxAgentRunStatus,\n} from './DocxMentions'\nimport * as Y from 'yjs'\nimport type { DocumentHandle } from '@docx-editor.dev/core'\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport {\n DocxEditor,\n useChromeTranslate,\n useDocxEditor,\n type FontConfiguration,\n} from '@docx-editor.dev/react'\nimport { collaborationModule, DOCUMENT_COLLABORATION_VERSIONS } from '@arbidocs/coedit'\nimport { awaitMatchingEditor } from './coedit-update'\nimport type { DocxCollaborationSession } from '@arbidocs/coedit'\nimport {\n createHocuspocusCollaboration,\n type HocuspocusCollaborationRoom,\n} from '@arbidocs/coedit/hocuspocus'\nimport { DocxEditorReview, reviewModule } from './review'\nimport { AgentUndo, AgentUndoRoom } from './AgentUndo'\nimport type { EditorModule } from '@docx-editor.dev/core'\nimport type { Editor } from '@docx-editor.dev/core'\nimport {\n Download,\n Save,\n RefreshCw,\n WifiOff,\n Check,\n Type,\n Pilcrow,\n UsersRound,\n BookA,\n} from 'lucide-react'\nimport { DefinedTermsProvider, useDefinedTerms } from './definitions/DefinedTerms'\nimport { RibbonMenu } from './RibbonMenu'\nimport { RibbonItem, RibbonOverflow } from './RibbonOverflow'\nimport { StyleGallery } from './StyleGallery'\nimport { NoteButtons, WordShortcuts } from './WordReferences'\nimport type { DefinitionSource } from '../tags/definitions'\nimport { CrossReferencesProvider, type DocxReferencesAdapter } from './references/CrossReferences'\nimport {\n CrossReferenceButton,\n DocxContextMenuExtras,\n UpdateCrossReferencesButton,\n} from './references/EditorMenus'\nimport { runBeforeSave } from './beforeSave'\nimport { LayoutTabContent, LAYOUT_TAB, useContextualTabs } from './layout/LayoutTabs'\nimport {\n GenerateImageButton,\n useGenerateImageTarget,\n type DocxImageGeneration,\n} from './layout/GenerateImage'\nimport { TableTabKeys } from './layout/TableKeys'\nimport { newFromTemplate } from '@arbidocs/coedit/template'\nimport {\n HouseTemplateProvider,\n resolveHouseTemplate,\n templateFileName,\n type HouseTemplateHost,\n} from './template/HouseTemplate'\nimport { QuickParts } from './template/QuickParts'\nimport {\n MySignatureContextItems,\n MySignatureMenu,\n SignatureFieldMenu,\n SignatureFieldsProvider,\n type DocxSavedSignature,\n type DocxSigner,\n} from './signatures/SignatureFields'\nimport { HouseTemplatePanel } from './template/HouseTemplatePanel'\nimport { DocxAuthorContext } from './structural/useTrackedOrNoted'\n\nimport { contentPath } from './content-path'\n\nexport { contentPath }\n\n/** Host integration: no application store, router, or authentication singleton is required. */\nexport interface NativeDocxAdapter {\n request: (path: string, options?: RequestInit) => Promise<Response>\n open: (documentId: string) => Promise<{\n room_id: string\n token: string\n websocket_path: string\n can_edit: boolean\n identity: { actorId: string; name: string; role: 'human' | 'agent' }\n filename: string\n }>\n /** Save the live room as the document's next version (same document id). */\n save: (\n documentId: string,\n state?: string\n ) => Promise<{ document_ext_id: string; version?: number; unchanged?: boolean }>\n loadFonts: () => Promise<FontConfiguration>\n baseUrl?: string\n author?: string\n subscribeTokenChanges?: (listener: () => void) => () => void\n onDirtyChange?: (dirty: boolean) => void\n onVersionSaved?: (documentId: string) => void | Promise<void>\n notify?: (message: string, kind: 'success' | 'error') => void\n mentions?: readonly DocxMention[]\n requestAgent?: (\n documentId: string,\n request: DocxAgentCommentRequest\n ) => Promise<DocxMentionDelivery | void>\n getAgentStatus?: (responseId: string) => Promise<DocxAgentRunStatus>\n /**\n * The workspace's definitions: facts labelled \"Definitions\". Present: the Insert tab offers\n * Defined term, and typing `@@` in the body opens the term type-ahead.\n */\n definitions?: () => Promise<DefinitionSource[]>\n /**\n * References to the workspace's other documents. Present: Insert cross-reference also offers a\n * passage of another document, inserted as a link that opens it there.\n */\n references?: DocxReferencesAdapter\n /** The platform's image generation. Present: the Insert tab offers Generate image. */\n imageGeneration?: DocxImageGeneration\n /**\n * The workspace's house template. Present: a blank note starts from it (its styles, numbering,\n * page setup, headers and footers), Insert offers its Quick Parts, and the Design tab and the\n * style box show where the document's styles differ from it.\n */\n houseTemplate?: HouseTemplateHost\n /** Workspace members who may sign. Present: Insert offers Signature field (or anyone by email). */\n signatureSigners?: readonly DocxSigner[]\n /** One's saved signature. Present: Insert offers My signature (an informal one, as a picture). */\n savedSignature?: DocxSavedSignature\n}\n\nexport interface NativeDocxEditorProps {\n adapter: NativeDocxAdapter\n documentId: string\n title: string\n draftContent?: string\n initialCommentId?: string\n /** Immutable history/compare snapshots must not join the live editing room. */\n snapshot?: boolean\n onSaved?: (id: string) => void\n /**\n * Read-only preview of generated Markdown. The server stores the DOCX itself; when the\n * stream ends the caller swaps this preview for the stored document.\n */\n stream?: {\n content: string\n busy: boolean\n error?: string | null\n }\n /**\n * Embedded as a body field (an email draft): a small formatting toolbar instead of the ribbon, no\n * page furniture or save bar (the host saves), and the person types directly; others' edits (ARBI's)\n * still arrive as tracked changes to accept or reject.\n */\n compact?: boolean\n /** Receives a reader of the live room's state, so the host's save can include the latest keystrokes. */\n stateRef?: React.MutableRefObject<(() => string | undefined) | null>\n}\ninterface Ready {\n document: DocumentHandle | Uint8Array\n modules: readonly EditorModule[]\n fonts: FontConfiguration\n room?: HocuspocusCollaborationRoom\n canEdit: boolean\n author: string\n filename: string\n}\n// Local unsaved notes survive tab switches. Persisted artifacts use server state.\nconst drafts = new Map<string, ArrayBuffer>()\nconst stateBytes = (room: HocuspocusCollaborationRoom) => Y.encodeStateAsUpdate(room.ydoc)\nconst encodeState = (room: HocuspocusCollaborationRoom) => {\n let binary = ''\n for (const byte of stateBytes(room)) binary += String.fromCharCode(byte)\n return btoa(binary)\n}\nfunction covered(room: HocuspocusCollaborationRoom, vector: string, receipt: string) {\n const decode = (value: string) => Uint8Array.from(atob(value), (c) => c.charCodeAt(0))\n const server = Y.decodeStateVector(decode(vector)),\n local = Y.decodeStateVector(Y.encodeStateVector(room.ydoc))\n for (const [client, clock] of local) if ((server.get(client) || 0) < clock) return false\n const deleted = Y.decodeUpdate(stateBytes(room)).ds.clients\n const saved = Y.decodeUpdate(decode(receipt)).ds.clients\n for (const [client, ranges] of deleted)\n for (const range of ranges) {\n if (\n !(saved.get(client) || []).some(\n (s) => s.clock <= range.clock && s.clock + s.len >= range.clock + range.len\n )\n )\n return false\n }\n return true\n}\nclass EditorBoundary extends React.Component<{ children: React.ReactNode }, { error?: Error }> {\n state: { error?: Error } = {}\n static getDerivedStateFromError(error: Error) {\n return { error }\n }\n render() {\n return this.state.error ? (\n <div role=\"alert\" className=\"native-docx-error\">\n Could not render this Word document: {this.state.error.message}\n </div>\n ) : (\n this.props.children\n )\n }\n}\n/**\n * The room writes below the editor's input buffer, so it gets the editor's pending-input flush: it\n * lands queued typing before a peer's change and lays that change out at once, which is when the\n * editor carries its caret (otherwise a fast keystroke lands where the caret was before the change).\n */\nfunction RoomInputBinding({ session }: { session?: DocxCollaborationSession }) {\n const editor = useDocxEditor()\n useEffect(() => {\n if (!editor || !session) return\n return session.bindEditorInput(() => editor.surface?.flushPendingInput())\n }, [editor, session])\n return null\n}\n\nexport function DocxParticipants({ session }: { session?: DocxCollaborationSession }) {\n const [people, setPeople] = useState<readonly { actorId: string; name: string }[]>([])\n useEffect(() => {\n if (!session) return\n setPeople(session.participants())\n return session.subscribeParticipants(setPeople)\n }, [session])\n return (\n <div className=\"native-docx-presence\" aria-label=\"People viewing this document\">\n {people.map((p) => (\n <span className=\"native-docx-avatar\" key={p.actorId} title={p.name}>\n {p.name\n .split(' ')\n .map((s) => s[0])\n .slice(0, 2)\n .join('')}\n </span>\n ))}\n </div>\n )\n}\n\n/** Insert tab: a defined term at the caret (when definitions are offered). */\nfunction DefinedTermButtons() {\n const terms = useDefinedTerms()\n if (!terms) return null\n return (\n <button\n type=\"button\"\n className=\"native-docx-ribbon-trigger\"\n aria-label={terms.labels.insert}\n title={`${terms.labels.insert} (type @@)`}\n data-testid=\"docx-insert-defined-term\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={(event) => terms.openPicker(event.currentTarget)}\n >\n <BookA size={16} />\n </button>\n )\n}\n\nconst DOCUMENT_STATES = {\n 'co-editing': {\n label: 'Co-editing',\n title: 'Edits sync live with everyone who has this document open',\n },\n 'read-only': {\n label: 'Read-only',\n title: 'This copy cannot be edited: an earlier version, or the last saved copy',\n },\n draft: { label: 'Private draft', title: 'Only you can see this until you save it' },\n} as const\n\n/** Which document is on screen: shared live, read-only, or a draft only its author sees. */\nfunction DocumentStateBadge({ state }: { state?: keyof typeof DOCUMENT_STATES }) {\n if (!state) return null\n const { label, title } = DOCUMENT_STATES[state]\n return (\n <span data-state={state} title={title}>\n {label}\n </span>\n )\n}\n\nexport function DocxRibbon({\n onSave,\n badge,\n imageGeneration,\n}: {\n onSave: () => void\n /** Insert \u203A Generate image, when the host can generate images. */\n imageGeneration?: DocxImageGeneration\n /** A short state label at the end of the row, such as \"Co-editing\". */\n badge?: React.ReactNode\n}) {\n const [selected, setTab] = useState('Home')\n const contextual = useContextualTabs(selected)\n useGenerateImageTarget()\n const tab = contextual.shown\n const t = useChromeTranslate()\n return (\n <div className=\"native-docx-ribbon\">\n <select aria-label=\"Ribbon tab\" value={tab} onChange={(event) => setTab(event.target.value)}>\n <option>Home</option>\n <option>Insert</option>\n <option>Design</option>\n <option>{LAYOUT_TAB}</option>\n <option>References</option>\n <option>Review</option>\n {contextual.tabs.map((name) => (\n <option key={name}>{name}</option>\n ))}\n </select>\n <DocxEditor.Toolbar t={t} preset={false} onSave={onSave}>\n <DocxEditor.Toolbar.Undo />\n <DocxEditor.Toolbar.Redo />\n <DocxEditor.Toolbar.Save />\n {/* Undo, Redo and Save stay put, like Word's Quick Access Toolbar; the tab's own\n controls collapse into its More menu when the ribbon is too narrow for them. */}\n <RibbonOverflow tab={tab}>\n {tab === 'Home' && (\n <>\n <RibbonItem id=\"home-style\" label=\"Styles\" priority={80}>\n <StyleGallery />\n </RibbonItem>\n <RibbonItem id=\"home-bold\" label=\"Bold\" priority={100}>\n <DocxEditor.Toolbar.Bold />\n </RibbonItem>\n <RibbonItem id=\"home-italic\" label=\"Italic\" priority={95}>\n <DocxEditor.Toolbar.Italic />\n </RibbonItem>\n <RibbonItem id=\"home-underline\" label=\"Underline\" priority={90}>\n <DocxEditor.Toolbar.Underline />\n </RibbonItem>\n <RibbonItem id=\"home-font\" label=\"Font\" priority={60}>\n <RibbonMenu label=\"Font\" icon={<Type size={16} />}>\n <DocxEditor.Toolbar.FontFamily />\n <DocxEditor.Toolbar.FontSize />\n <DocxEditor.Toolbar.FontColor />\n <DocxEditor.Toolbar.Highlight />\n </RibbonMenu>\n </RibbonItem>\n <RibbonItem id=\"home-more-formatting\" label=\"More formatting\" priority={50}>\n <RibbonMenu label=\"More formatting\" icon={<Pilcrow size={16} />}>\n <DocxEditor.Toolbar.Alignment />\n <DocxEditor.Toolbar.BulletList />\n <DocxEditor.Toolbar.NumberedList />\n <DocxEditor.Toolbar.LineSpacing />\n <DocxEditor.Toolbar.Indent />\n <DocxEditor.Toolbar.Outdent />\n <DocxEditor.Toolbar.Strike />\n <DocxEditor.Toolbar.ClearFormatting />\n </RibbonMenu>\n </RibbonItem>\n </>\n )}\n {tab === 'Insert' && (\n <>\n <RibbonItem id=\"insert-table\" label=\"Table\">\n <DocxEditor.Toolbar.TableInsert />\n </RibbonItem>\n <RibbonItem id=\"insert-picture\" label=\"Picture\">\n <DocxEditor.Toolbar.ImageInsert />\n </RibbonItem>\n {imageGeneration && (\n <RibbonItem id=\"insert-generate-image\" label=\"Generate image\">\n <GenerateImageButton generation={imageGeneration} />\n </RibbonItem>\n )}\n <RibbonItem id=\"insert-page-break\" label=\"Page break\">\n <DocxEditor.Toolbar.Button slotId=\"insert.pageBreak\" />\n </RibbonItem>\n <RibbonItem id=\"insert-link\" label=\"Link\">\n <DocxEditor.Toolbar.Link />\n </RibbonItem>\n <RibbonItem id=\"insert-defined-term\" label=\"Defined term\">\n <DefinedTermButtons />\n </RibbonItem>\n <RibbonItem id=\"insert-quick-parts\" label=\"Quick Parts\">\n <QuickParts />\n </RibbonItem>\n <RibbonItem id=\"insert-signature-field\" label=\"Signature field\">\n <SignatureFieldMenu />\n </RibbonItem>\n <RibbonItem id=\"insert-my-signature\" label=\"My signature\">\n <MySignatureMenu />\n </RibbonItem>\n <RibbonItem id=\"insert-cross-reference\" label=\"Cross-reference\">\n <CrossReferenceButton />\n </RibbonItem>\n </>\n )}\n <LayoutTabContent tab={tab} />\n {tab === 'Design' && (\n <RibbonItem id=\"design-house-template\" label=\"House template\">\n <HouseTemplatePanel />\n </RibbonItem>\n )}\n {tab === 'References' && (\n <>\n <NoteButtons />\n <RibbonItem id=\"references-cross-reference\" label=\"Cross-reference\">\n <CrossReferenceButton />\n </RibbonItem>\n <RibbonItem id=\"references-update-cross-references\" label=\"Update cross-references\">\n <UpdateCrossReferencesButton />\n </RibbonItem>\n </>\n )}\n {tab === 'Review' && (\n <>\n <RibbonItem id=\"review-editing-mode\" label=\"Editing mode\" priority={10}>\n <DocxEditor.Toolbar.EditingMode />\n </RibbonItem>\n <RibbonItem id=\"review-comments\" label=\"Comments\">\n <DocxEditor.Toolbar.Comments />\n </RibbonItem>\n <RibbonItem id=\"review-options\" label=\"Review options\">\n <RibbonMenu label=\"Review options\" icon={<UsersRound size={16} />}>\n <DocxEditor.Toolbar.Reviewers />\n </RibbonMenu>\n </RibbonItem>\n </>\n )}\n </RibbonOverflow>\n {/* The toolbar provides its table chrome context only to a direct table-chrome child: this\n hidden one keeps it mounted for the Table tab's borders and shading. */}\n <DocxEditor.Toolbar.TableCellFill hidden />\n </DocxEditor.Toolbar>\n {badge && (\n <span className=\"native-docx-ribbon-badge\" data-testid=\"docx-ribbon-badge\">\n {badge}\n </span>\n )}\n </div>\n )\n}\n\n/** The compact editor's formatting: what an email needs. */\nfunction CompactToolbar() {\n const t = useChromeTranslate()\n return (\n <DocxEditor.Toolbar t={t} preset={false}>\n <DocxEditor.Toolbar.Undo />\n <DocxEditor.Toolbar.Redo />\n <DocxEditor.Toolbar.Bold />\n <DocxEditor.Toolbar.Italic />\n <DocxEditor.Toolbar.Underline />\n <DocxEditor.Toolbar.BulletList />\n <DocxEditor.Toolbar.NumberedList />\n <DocxEditor.Toolbar.Link />\n </DocxEditor.Toolbar>\n )\n}\n\nconst fixedZoomMode = { type: 'fixed' } as const\n/** The zoom menu's levels, in percent, beside Fit width. */\nconst ZOOM_LEVELS = [50, 75, 100, 125, 150, 200]\n\nexport function NativeDocxEditor({\n documentId,\n title,\n draftContent,\n initialCommentId,\n snapshot = false,\n onSaved,\n stream,\n adapter,\n compact = false,\n stateRef,\n}: NativeDocxEditorProps) {\n const [ready, setReady] = useState<Ready>(),\n [error, setError] = useState(''),\n [retry, setRetry] = useState(0)\n const [status, setStatus] = useState('Connecting\u2026'),\n [dirty, setDirty] = useState(false),\n [saving, setSaving] = useState(false),\n [offline, setOffline] = useState(false)\n const revision = useRef(0)\n const stageRef = useRef<HTMLDivElement>(null),\n fitCleanup = useRef<(() => void) | undefined>(undefined),\n refit = useRef<(() => void) | undefined>(undefined)\n // Fit width until the reader picks a zoom (the zoom menu, or Ctrl +/-/0), then keep theirs until\n // they pick Fit width again. `fitted` is the zoom the fit last applied: any other zoom is theirs.\n const fitting = useRef(true),\n fitted = useRef<number | undefined>(undefined)\n const [fitWidth, setFitWidth] = useState(true),\n [zoomPercent, setZoomPercent] = useState(100)\n const ref = useRef<Editor | null>(null),\n dirtyRef = useRef(false),\n draftTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const isDraft = draftContent !== undefined\n const streamRef = useRef(stream)\n streamRef.current = stream\n const streamWriter = useRef<WordDraftStream | null>(null)\n const streamFinished = useRef(false)\n const streamTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const [streamAttempt, setStreamAttempt] = useState(0)\n function updateStream() {\n const current = streamRef.current\n if (!current || !streamWriter.current || streamFinished.current) return\n try {\n streamWriter.current.update(current.content, !current.busy)\n setStatus(\n current.busy\n ? 'Generating \u00B7 editing is locked'\n : current.error\n ? 'Generation stopped \u00B7 draft retained'\n : 'Opening the saved document\u2026'\n )\n if (!current.busy && !current.error) streamFinished.current = true\n } catch (failure) {\n setError(\n failure instanceof Error ? failure.message : 'Could not import the generated document.'\n )\n }\n }\n useEffect(() => {\n if (!streamRef.current) return\n if (!streamRef.current.busy) {\n clearTimeout(streamTimer.current)\n streamTimer.current = undefined\n updateStream()\n } else if (!streamTimer.current) {\n streamTimer.current = setTimeout(() => {\n streamTimer.current = undefined\n updateStream()\n }, 120)\n }\n }, [stream?.content, stream?.busy, stream?.error, streamAttempt])\n useEffect(() => () => clearTimeout(streamTimer.current), [])\n useEffect(() => {\n let cancelled = false\n let room: HocuspocusCollaborationRoom | undefined\n const cleanups: (() => void)[] = []\n setReady(undefined)\n setError('')\n setStatus('Connecting\u2026')\n setDirty(false)\n dirtyRef.current = false\n // A refusal for another room format: \"Updating\u2026\" while the matching editor or server arrives.\n const updating = (reason: string | undefined): boolean => {\n const cancel = awaitMatchingEditor(reason, () => setRetry((x) => x + 1))\n if (!cancel) return false\n cleanups.push(cancel)\n setError('')\n setStatus('Updating\u2026')\n return true\n }\n async function start() {\n const fonts = await adapter.loadFonts()\n if (isDraft || snapshot) {\n const data = isDraft\n ? (!streamRef.current && drafts.get(documentId)) ||\n (draftContent === '' && adapter.houseTemplate\n ? await (async () => {\n // A blank note starts from the house template, as File \u203A New from it does.\n const template = await resolveHouseTemplate(adapter.houseTemplate)\n return newFromTemplate(template.bytes, {\n attachedTemplate: templateFileName(template),\n })\n })()\n : await (\n await adapter.request('/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ content: draftContent }),\n })\n ).arrayBuffer())\n : await (await adapter.request(contentPath(documentId))).arrayBuffer()\n if (!cancelled) {\n setReady({\n document: new Uint8Array(data),\n fonts,\n modules: [reviewModule()],\n canEdit: !snapshot,\n author: adapter.author || 'You',\n filename: title,\n })\n setStatus(snapshot ? 'Saved version \u00B7 read only' : 'Unsaved note')\n }\n return\n }\n const session = await adapter.open(documentId)\n const ws = new URL(session.websocket_path, adapter.baseUrl || location.origin)\n ws.protocol = ws.protocol === 'https:' ? 'wss:' : 'ws:'\n let initial = true\n room = await createHocuspocusCollaboration({\n url: ws.toString(),\n roomId: session.room_id,\n identity: session.identity,\n offlineEditing: true,\n token: async () => {\n const next = initial ? session : await adapter.open(documentId)\n initial = false\n if (!cancelled)\n setReady((previous) => (previous ? { ...previous, canEdit: next.can_edit } : previous))\n return JSON.stringify({\n capability: next.token,\n versions: DOCUMENT_COLLABORATION_VERSIONS,\n })\n },\n })\n if (cancelled) {\n room.destroy()\n return\n }\n const current = room\n cleanups.push(\n current.session.subscribeStatus((s, _reason, detail) => {\n const disconnected = s === 'disconnected'\n setOffline(disconnected)\n if (s === 'error') {\n if (updating(detail)) return\n setError(\n detail ||\n 'The collaboration session failed. Export your local document before reconnecting.'\n )\n setStatus('Connection failed')\n } else if (disconnected) setStatus('Offline \u00B7 edits buffered locally')\n else if (s === 'ready') {\n setError('')\n setStatus(dirtyRef.current ? 'Saving changes\u2026' : 'Connected')\n }\n })\n )\n const stateless = ({ payload }: { payload: string }) => {\n try {\n const message = JSON.parse(payload) as {\n type: string\n message?: string\n hash?: string\n vector?: string\n receipt?: string\n }\n if (message.type === 'persisted') {\n if (\n !cancelled &&\n message.vector &&\n message.receipt &&\n covered(current, message.vector, message.receipt)\n ) {\n dirtyRef.current = false\n setDirty(false)\n setStatus('All changes saved')\n }\n }\n if (message.type === 'pending') setStatus('Saving changes\u2026')\n if (message.type === 'save-error') setStatus(message.message || 'Autosave failed')\n } catch {\n /* Ignore unrelated provider messages. */\n }\n }\n current.provider.on('stateless', stateless)\n cleanups.push(() => current.provider.off('stateless', stateless))\n if (adapter.subscribeTokenChanges)\n cleanups.push(\n adapter.subscribeTokenChanges(() => {\n void current.provider\n .sendToken()\n .catch(() => setStatus('Could not renew the collaboration session'))\n })\n )\n const refresh = setInterval(\n () => {\n void current.provider\n .sendToken()\n .catch(() => setStatus('Could not renew the collaboration session'))\n },\n 5 * 60 * 1000\n )\n cleanups.push(() => clearInterval(refresh))\n setReady({\n document: current.document,\n fonts,\n modules: [reviewModule(), collaborationModule({ session: current.session })],\n room: current,\n canEdit: session.can_edit,\n author: session.identity.name,\n filename: session.filename,\n })\n setStatus(session.can_edit ? 'All changes saved' : 'Read only \u00B7 live')\n }\n void start().catch((e) => {\n const message = e instanceof Error ? e.message : String(e)\n if (!cancelled && !updating(message)) setError(message)\n })\n return () => {\n cancelled = true\n cleanups.forEach((f) => f())\n clearTimeout(draftTimer.current)\n fitCleanup.current?.()\n room?.destroy()\n }\n }, [documentId, isDraft, snapshot, retry]) // draftContent seeds once, never remount on typing.\n useEffect(() => {\n if (!stateRef) return\n const room = ready?.room\n stateRef.current = () => (room ? encodeState(room) : undefined)\n return () => {\n stateRef.current = null\n }\n }, [stateRef, ready?.room])\n useEffect(() => {\n adapter.onDirtyChange?.(dirty)\n const beforeUnload = (e: BeforeUnloadEvent) => {\n if (dirtyRef.current) e.preventDefault()\n }\n window.addEventListener('beforeunload', beforeUnload)\n return () => {\n window.removeEventListener('beforeunload', beforeUnload)\n adapter.onDirtyChange?.(false)\n }\n }, [dirty])\n async function exportDocument() {\n runBeforeSave(ref.current)\n const data = await ref.current?.save()\n if (!data) return\n const url = URL.createObjectURL(\n new Blob([normalizeDocxExport(data)], {\n type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n })\n )\n const a = document.createElement('a')\n a.href = url\n a.download = title.replace(/\\.[^.]+$/, '') + '.docx'\n a.click()\n setTimeout(() => URL.revokeObjectURL(url), 5000)\n }\n useLayoutEffect(() => {\n const editor = ref.current\n return () => {\n if (isDraft && editor && dirtyRef.current)\n void editor\n .save()\n .then((bytes) => {\n if (bytes) drafts.set(documentId, bytes)\n })\n .catch(() => {})\n }\n }, [documentId, isDraft, ready])\n async function saveVersion() {\n if (!ready || saving || stream) return\n setSaving(true)\n runBeforeSave(ref.current)\n const atRevision = revision.current\n try {\n const result = isDraft\n ? await (async () => {\n const bytes = await ref.current?.save()\n if (!bytes) throw new Error('The editor is not ready.')\n return (\n await adapter.request(`/notes?${new URLSearchParams({ title })}`, {\n method: 'POST',\n headers: {\n 'Content-Type':\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n },\n body: bytes,\n })\n ).json() as Promise<{ document_ext_id: string }>\n })()\n : await adapter.save(documentId, ready.room ? encodeState(ready.room) : undefined)\n if (revision.current === atRevision) {\n dirtyRef.current = false\n setDirty(false)\n drafts.delete(documentId)\n }\n await Promise.resolve(adapter.onVersionSaved?.(result.document_ext_id)).catch(() => {\n /* The saved document remains accessible by its ID. */\n })\n onSaved?.(result.document_ext_id)\n adapter.notify?.(isDraft ? 'Word note saved' : 'DOCX version saved', 'success')\n } catch (e) {\n adapter.notify?.(e instanceof Error ? e.message : 'Could not save this document.', 'error')\n setStatus('Save failed \u00B7 your draft is retained')\n } finally {\n setSaving(false)\n }\n }\n function editorReady(editor: Editor) {\n ref.current = editor\n if (streamRef.current) {\n streamWriter.current = new WordDraftStream(editor)\n updateStream()\n }\n fitCleanup.current?.()\n fitted.current = undefined\n const viewport = stageRef.current?.querySelector<HTMLElement>('.native-docx-viewport')\n if (!viewport) return\n let surface: Element | null = null\n const fit = () => {\n // The page itself: laid out after the editor is ready, and resized by every zoom.\n const page = viewport.querySelector('.docx-paginated-surface')\n if (page && page !== surface) resize.observe((surface = page))\n const current = editor.getZoom()\n // A zoom the fit did not apply is the reader's: stop fitting until they pick Fit width again.\n if (\n fitting.current &&\n fitted.current !== undefined &&\n Math.abs(current - fitted.current) > 0.001\n )\n fitting.current = false\n setFitWidth(fitting.current)\n setZoomPercent(Math.round(current * 100))\n if (!fitting.current) return\n const pageWidth = editor.getPageGeometry()[0]?.box.width\n if (!pageWidth) return\n const style = getComputedStyle(viewport)\n const available =\n viewport.clientWidth - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight)\n // The page fills the viewer, its padding the only gutter. Compact (an email body) never\n // magnifies: its text stays the size the email is read at.\n const zoom = Math.max(0.1, Math.min(compact ? 1 : 5, available / pageWidth))\n if (Math.abs(current - zoom) > 0.001) editor.setZoom(zoom)\n fitted.current = editor.getZoom()\n setZoomPercent(Math.round(fitted.current * 100))\n }\n refit.current = fit\n const resize = new ResizeObserver(fit)\n const chrome = new MutationObserver(fit)\n resize.observe(viewport)\n chrome.observe(viewport, {\n attributes: true,\n attributeFilter: ['style', 'data-review-pane', 'data-review-margin'],\n })\n // Where the page mounts, to start watching it if it is laid out after the editor is ready.\n const mount = viewport.querySelector('.docx-content-mount')\n if (mount) chrome.observe(mount, { childList: true })\n if (!fitting.current) editor.setZoom(zoomPercent / 100)\n fit()\n fitCleanup.current = () => {\n resize.disconnect()\n chrome.disconnect()\n refit.current = undefined\n }\n }\n function pickZoom(value: string) {\n const editor = ref.current\n if (!editor) return\n if (value === 'fit') {\n fitting.current = true\n fitted.current = undefined\n refit.current?.()\n return\n }\n fitting.current = false\n setFitWidth(false)\n setZoomPercent(Number(value))\n editor.setZoom(Number(value) / 100)\n }\n function changed() {\n if (snapshot) return\n revision.current += 1\n dirtyRef.current = true\n setDirty(true)\n setStatus(\n isDraft ? 'Unsaved note' : offline ? 'Offline \u00B7 edits buffered locally' : 'Saving changes\u2026'\n )\n if (isDraft) {\n clearTimeout(draftTimer.current)\n draftTimer.current = setTimeout(() => {\n void ref.current?.save().then((bytes) => {\n if (bytes) drafts.set(documentId, bytes)\n })\n }, 200)\n }\n }\n return (\n <section\n className={compact ? 'native-docx-viewer native-docx-compact' : 'native-docx-viewer'}\n data-testid=\"native-docx-editor\"\n aria-busy={!!stream?.busy}\n data-generation-state={\n stream ? (stream.busy ? 'generating' : stream.error ? 'stopped' : 'generated') : 'ready'\n }\n >\n {offline && (\n <div className=\"native-docx-notice\">\n Changes are buffered in this browser. Keep this tab open until the connection returns, or\n download your DOCX.\n </div>\n )}\n {error && (\n <div className=\"native-docx-notice\" data-error=\"true\" role=\"alert\">\n {error}{' '}\n <button\n disabled={!stream && dirty}\n title={dirty ? 'Download your unsaved DOCX before reopening the editor' : undefined}\n onClick={() =>\n stream ? (setError(''), setStreamAttempt((x) => x + 1)) : setRetry((x) => x + 1)\n }\n >\n <RefreshCw size={12} />\n Retry\n </button>\n </div>\n )}\n {!ready && !error && (\n <div className=\"native-docx-error\" role=\"status\">\n Opening Word document\u2026\n </div>\n )}\n {ready && (\n <div className=\"native-docx-body docx-editor\">\n <EditorBoundary key={retry}>\n <DocxEditor.Root\n document={ready.document}\n modules={ready.modules}\n fonts={ready.fonts}\n mode={\n stream || (isDraft && ready.canEdit && !snapshot) || (compact && ready.canEdit)\n ? 'edit'\n : !ready.canEdit || snapshot\n ? 'view'\n : 'suggesting'\n }\n reviewDisplayMode=\"all-markup\"\n zoomMode={fixedZoomMode}\n author={ready.author}\n onReady={editorReady}\n onChange={(change) => {\n if (change.source !== 'load') changed()\n }}\n onFontError={(e) => setError(e.message)}\n >\n <DocxAuthorContext.Provider value={ready.author}>\n <DefinedTermsProvider\n load={adapter.definitions}\n editable={!stream && !snapshot && ready.canEdit}\n notify={adapter.notify}\n >\n <HouseTemplateProvider\n enabled={!stream}\n host={adapter.houseTemplate}\n documentId={isDraft || snapshot ? undefined : documentId}\n editable={!stream && !snapshot && ready.canEdit}\n notify={adapter.notify}\n >\n <CrossReferencesProvider\n editable={!stream && !snapshot && ready.canEdit}\n references={adapter.references}\n documentId={documentId}\n notify={adapter.notify}\n >\n <SignatureFieldsProvider\n signers={adapter.signatureSigners}\n mySignature={adapter.savedSignature}\n editable={!stream && !snapshot && ready.canEdit}\n notify={adapter.notify}\n >\n <DocxEditor.RevisionMarkup\n insertions={{ mark: 'underline', color: 'blue' }}\n deletions={{ mark: 'strikethrough', color: 'red' }}\n movedFrom={{ mark: 'doubleStrikethrough', color: 'green' }}\n movedTo={{ mark: 'doubleUnderline', color: 'green' }}\n trackMoves\n />\n {compact && !stream && <CompactToolbar />}\n {!compact && !stream && (\n <DocxRibbon\n onSave={() => void saveVersion()}\n imageGeneration={\n adapter.imageGeneration && {\n notify: adapter.notify,\n ...adapter.imageGeneration,\n }\n }\n badge={\n // The document's state, in place of a title row above the ribbon.\n <DocumentStateBadge\n state={\n snapshot || !ready.canEdit\n ? 'read-only'\n : ready.room\n ? 'co-editing'\n : isDraft\n ? 'draft'\n : undefined\n }\n />\n }\n />\n )}\n {!stream && <WordShortcuts scope={stageRef} />}\n {!stream && <TableTabKeys scope={stageRef} />}\n <div\n className=\"native-docx-stage\"\n ref={stageRef}\n onMouseDownCapture={(event) => {\n if (event.button === 2 && ref.current?.getSelectionPlacement())\n event.preventDefault()\n }}\n >\n <DocxEditor.Viewport className=\"native-docx-viewport\">\n <DocxEditor.Content />\n <DocxMentions\n initialCommentId={initialCommentId}\n mentions={adapter.mentions}\n notify={adapter.notify}\n getAgentStatus={adapter.getAgentStatus}\n requestAgent={\n adapter.requestAgent\n ? (request) => adapter.requestAgent!(documentId, request)\n : undefined\n }\n >\n <RoomInputBinding session={ready.room?.session} />\n <AgentUndoRoom.Provider value={ready.room?.ydoc ?? null}>\n <DocxEditorReview>\n {() => (\n <DocxEditorReview.Card>\n <DocxCommentActivity />\n <AgentUndo />\n </DocxEditorReview.Card>\n )}\n </DocxEditorReview>\n </AgentUndoRoom.Provider>\n </DocxMentions>\n {!compact && <DocxEditor.HeaderFooterChrome />}\n {!compact && <DocxEditor.NotesChrome />}\n <DocxEditor.Equation />\n <DocxEditor.HyperLink />\n <DocxEditor.ContextMenu>\n <DocxContextMenuExtras />\n <MySignatureContextItems />\n </DocxEditor.ContextMenu>\n </DocxEditor.Viewport>\n {!compact && <DocxEditor.PageNumber />}\n </div>\n </SignatureFieldsProvider>\n </CrossReferencesProvider>\n </HouseTemplateProvider>\n </DefinedTermsProvider>\n </DocxAuthorContext.Provider>\n </DocxEditor.Root>\n </EditorBoundary>\n </div>\n )}\n <div className=\"native-docx-actions\">\n <span className=\"native-docx-status\" role=\"status\">\n {offline ? <WifiOff size={14} /> : !dirty && ready ? <Check size={14} /> : null}\n {status}\n </span>\n <DocxParticipants session={ready?.room?.session} />\n {!compact && (\n <select\n className=\"native-docx-zoom\"\n aria-label=\"Zoom\"\n data-testid=\"native-docx-zoom\"\n disabled={!ready}\n value={fitWidth ? 'fit' : String(zoomPercent)}\n onChange={(event) => pickZoom(event.target.value)}\n >\n <option value=\"fit\">Fit width</option>\n {[...new Set([...ZOOM_LEVELS, ...(fitWidth ? [] : [zoomPercent])])]\n .sort((a, b) => a - b)\n .map((level) => (\n <option key={level} value={String(level)}>\n {level}%\n </option>\n ))}\n </select>\n )}\n {!compact && (\n <button\n onClick={() => void exportDocument()}\n disabled={!ready}\n aria-label=\"Download DOCX\"\n >\n <Download size={14} />\n DOCX\n </button>\n )}\n {!compact && !snapshot && !stream && ready?.canEdit && (\n <button\n className=\"native-docx-save\"\n onClick={() => void saveVersion()}\n disabled={!ready || saving || offline}\n data-testid=\"native-docx-save\"\n >\n <Save size={14} />\n {saving ? 'Saving\u2026' : isDraft ? 'Save note' : 'Save version'}\n </button>\n )}\n </div>\n </section>\n )\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { normalizeDocxExport } from './export'\nimport { WordDraftStream } from './streamWordDocument'\nimport {\n DocxMentions,\n DocxCommentActivity,\n type DocxMention,\n type DocxAgentCommentRequest,\n type DocxMentionDelivery,\n type DocxAgentRunStatus,\n} from './DocxMentions'\nimport * as Y from 'yjs'\nimport type { DocumentHandle } from '@docx-editor.dev/core'\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport {\n DocxEditor,\n useChromeTranslate,\n useDocxEditor,\n type FontConfiguration,\n} from '@docx-editor.dev/react'\nimport { collaborationModule, DOCUMENT_COLLABORATION_VERSIONS } from '@arbidocs/coedit'\nimport { awaitMatchingEditor } from './coedit-update'\nimport type { DocxCollaborationSession } from '@arbidocs/coedit'\nimport {\n createHocuspocusCollaboration,\n type HocuspocusCollaborationRoom,\n} from '@arbidocs/coedit/hocuspocus'\nimport { DocxEditorReview, reviewModule } from './review'\nimport { AgentUndo, AgentUndoRoom } from './AgentUndo'\nimport type { EditorModule } from '@docx-editor.dev/core'\nimport type { Editor } from '@docx-editor.dev/core'\nimport {\n Download,\n Save,\n RefreshCw,\n WifiOff,\n Check,\n Type,\n Pilcrow,\n UsersRound,\n BookA,\n} from 'lucide-react'\nimport { DefinedTermsProvider, useDefinedTerms } from './definitions/DefinedTerms'\nimport { RibbonMenu } from './RibbonMenu'\nimport { RibbonItem, RibbonOverflow } from './RibbonOverflow'\nimport { StyleGallery } from './StyleGallery'\nimport { NoteButtons, WordShortcuts } from './WordReferences'\nimport type { DefinitionSource } from '../tags/definitions'\nimport { CrossReferencesProvider, type DocxReferencesAdapter } from './references/CrossReferences'\nimport {\n CrossReferenceButton,\n DocxContextMenuExtras,\n UpdateCrossReferencesButton,\n} from './references/EditorMenus'\nimport { runBeforeSave } from './beforeSave'\nimport { LayoutTabContent, LAYOUT_TAB, useContextualTabs } from './layout/LayoutTabs'\nimport {\n GenerateImageButton,\n useGenerateImageTarget,\n type DocxImageGeneration,\n} from './layout/GenerateImage'\nimport { TableTabKeys } from './layout/TableKeys'\nimport { newFromTemplate } from '@arbidocs/coedit/template'\nimport {\n HouseTemplateProvider,\n resolveHouseTemplate,\n templateFileName,\n type HouseTemplateHost,\n} from './template/HouseTemplate'\nimport { QuickParts } from './template/QuickParts'\nimport {\n MySignatureContextItems,\n SignatureFieldContextItem,\n MySignatureMenu,\n SignatureFieldMenu,\n SignatureFieldsProvider,\n type DocxSavedSignature,\n type DocxSigner,\n} from './signatures/SignatureFields'\nimport { HouseTemplatePanel } from './template/HouseTemplatePanel'\nimport { DocxAuthorContext } from './structural/useTrackedOrNoted'\n\nimport { contentPath } from './content-path'\n\nexport { contentPath }\n\n/** Host integration: no application store, router, or authentication singleton is required. */\nexport interface NativeDocxAdapter {\n request: (path: string, options?: RequestInit) => Promise<Response>\n open: (documentId: string) => Promise<{\n room_id: string\n token: string\n websocket_path: string\n can_edit: boolean\n identity: { actorId: string; name: string; role: 'human' | 'agent' }\n filename: string\n }>\n /** Save the live room as the document's next version (same document id). */\n save: (\n documentId: string,\n state?: string\n ) => Promise<{ document_ext_id: string; version?: number; unchanged?: boolean }>\n loadFonts: () => Promise<FontConfiguration>\n baseUrl?: string\n author?: string\n subscribeTokenChanges?: (listener: () => void) => () => void\n onDirtyChange?: (dirty: boolean) => void\n onVersionSaved?: (documentId: string) => void | Promise<void>\n notify?: (message: string, kind: 'success' | 'error') => void\n mentions?: readonly DocxMention[]\n requestAgent?: (\n documentId: string,\n request: DocxAgentCommentRequest\n ) => Promise<DocxMentionDelivery | void>\n getAgentStatus?: (responseId: string) => Promise<DocxAgentRunStatus>\n /**\n * The workspace's definitions: facts labelled \"Definitions\". Present: the Insert tab offers\n * Defined term, and typing `@@` in the body opens the term type-ahead.\n */\n definitions?: () => Promise<DefinitionSource[]>\n /**\n * References to the workspace's other documents. Present: Insert cross-reference also offers a\n * passage of another document, inserted as a link that opens it there.\n */\n references?: DocxReferencesAdapter\n /** The platform's image generation. Present: the Insert tab offers Generate image. */\n imageGeneration?: DocxImageGeneration\n /**\n * The workspace's house template. Present: a blank note starts from it (its styles, numbering,\n * page setup, headers and footers), Insert offers its Quick Parts, and the Design tab and the\n * style box show where the document's styles differ from it.\n */\n houseTemplate?: HouseTemplateHost\n /** Workspace members who may sign. Present: Insert offers Signature field (or anyone by email). */\n signatureSigners?: readonly DocxSigner[]\n /** One's saved signature. Present: Insert offers My signature (an informal one, as a picture). */\n savedSignature?: DocxSavedSignature\n}\n\nexport interface NativeDocxEditorProps {\n adapter: NativeDocxAdapter\n documentId: string\n title: string\n draftContent?: string\n initialCommentId?: string\n /** Immutable history/compare snapshots must not join the live editing room. */\n snapshot?: boolean\n onSaved?: (id: string) => void\n /**\n * Read-only preview of generated Markdown. The server stores the DOCX itself; when the\n * stream ends the caller swaps this preview for the stored document.\n */\n stream?: {\n content: string\n busy: boolean\n error?: string | null\n }\n /**\n * Embedded as a body field (an email draft): a small formatting toolbar instead of the ribbon, no\n * page furniture or save bar (the host saves), and the person types directly; others' edits (ARBI's)\n * still arrive as tracked changes to accept or reject.\n */\n compact?: boolean\n /** Receives a reader of the live room's state, so the host's save can include the latest keystrokes. */\n stateRef?: React.MutableRefObject<(() => string | undefined) | null>\n}\ninterface Ready {\n document: DocumentHandle | Uint8Array\n modules: readonly EditorModule[]\n fonts: FontConfiguration\n room?: HocuspocusCollaborationRoom\n canEdit: boolean\n author: string\n filename: string\n}\n// Local unsaved notes survive tab switches. Persisted artifacts use server state.\nconst drafts = new Map<string, ArrayBuffer>()\nconst stateBytes = (room: HocuspocusCollaborationRoom) => Y.encodeStateAsUpdate(room.ydoc)\nconst encodeState = (room: HocuspocusCollaborationRoom) => {\n let binary = ''\n for (const byte of stateBytes(room)) binary += String.fromCharCode(byte)\n return btoa(binary)\n}\nfunction covered(room: HocuspocusCollaborationRoom, vector: string, receipt: string) {\n const decode = (value: string) => Uint8Array.from(atob(value), (c) => c.charCodeAt(0))\n const server = Y.decodeStateVector(decode(vector)),\n local = Y.decodeStateVector(Y.encodeStateVector(room.ydoc))\n for (const [client, clock] of local) if ((server.get(client) || 0) < clock) return false\n const deleted = Y.decodeUpdate(stateBytes(room)).ds.clients\n const saved = Y.decodeUpdate(decode(receipt)).ds.clients\n for (const [client, ranges] of deleted)\n for (const range of ranges) {\n if (\n !(saved.get(client) || []).some(\n (s) => s.clock <= range.clock && s.clock + s.len >= range.clock + range.len\n )\n )\n return false\n }\n return true\n}\nclass EditorBoundary extends React.Component<{ children: React.ReactNode }, { error?: Error }> {\n state: { error?: Error } = {}\n static getDerivedStateFromError(error: Error) {\n return { error }\n }\n render() {\n return this.state.error ? (\n <div role=\"alert\" className=\"native-docx-error\">\n Could not render this Word document: {this.state.error.message}\n </div>\n ) : (\n this.props.children\n )\n }\n}\n/**\n * The room writes below the editor's input buffer, so it gets the editor's pending-input flush: it\n * lands queued typing before a peer's change and lays that change out at once, which is when the\n * editor carries its caret (otherwise a fast keystroke lands where the caret was before the change).\n */\nfunction RoomInputBinding({ session }: { session?: DocxCollaborationSession }) {\n const editor = useDocxEditor()\n useEffect(() => {\n if (!editor || !session) return\n return session.bindEditorInput(() => editor.surface?.flushPendingInput())\n }, [editor, session])\n return null\n}\n\nexport function DocxParticipants({ session }: { session?: DocxCollaborationSession }) {\n const [people, setPeople] = useState<readonly { actorId: string; name: string }[]>([])\n useEffect(() => {\n if (!session) return\n setPeople(session.participants())\n return session.subscribeParticipants(setPeople)\n }, [session])\n return (\n <div className=\"native-docx-presence\" aria-label=\"People viewing this document\">\n {people.map((p) => (\n <span className=\"native-docx-avatar\" key={p.actorId} title={p.name}>\n {p.name\n .split(' ')\n .map((s) => s[0])\n .slice(0, 2)\n .join('')}\n </span>\n ))}\n </div>\n )\n}\n\n/** Insert tab: a defined term at the caret (when definitions are offered). */\nfunction DefinedTermButtons() {\n const terms = useDefinedTerms()\n if (!terms) return null\n return (\n <button\n type=\"button\"\n className=\"native-docx-ribbon-trigger\"\n aria-label={terms.labels.insert}\n title={`${terms.labels.insert} (type @@)`}\n data-testid=\"docx-insert-defined-term\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={(event) => terms.openPicker(event.currentTarget)}\n >\n <BookA size={16} />\n </button>\n )\n}\n\nconst DOCUMENT_STATES = {\n 'co-editing': {\n label: 'Co-editing',\n title: 'Edits sync live with everyone who has this document open',\n },\n 'read-only': {\n label: 'Read-only',\n title: 'This copy cannot be edited: an earlier version, or the last saved copy',\n },\n draft: { label: 'Private draft', title: 'Only you can see this until you save it' },\n} as const\n\n/** Which document is on screen: shared live, read-only, or a draft only its author sees. */\nfunction DocumentStateBadge({ state }: { state?: keyof typeof DOCUMENT_STATES }) {\n if (!state) return null\n const { label, title } = DOCUMENT_STATES[state]\n return (\n <span data-state={state} title={title}>\n {label}\n </span>\n )\n}\n\nexport function DocxRibbon({\n onSave,\n badge,\n imageGeneration,\n}: {\n onSave: () => void\n /** Insert \u203A Generate image, when the host can generate images. */\n imageGeneration?: DocxImageGeneration\n /** A short state label at the end of the row, such as \"Co-editing\". */\n badge?: React.ReactNode\n}) {\n const [selected, setTab] = useState('Home')\n const contextual = useContextualTabs(selected)\n useGenerateImageTarget()\n const tab = contextual.shown\n const t = useChromeTranslate()\n return (\n <div className=\"native-docx-ribbon\">\n <select aria-label=\"Ribbon tab\" value={tab} onChange={(event) => setTab(event.target.value)}>\n <option>Home</option>\n <option>Insert</option>\n <option>Design</option>\n <option>{LAYOUT_TAB}</option>\n <option>References</option>\n <option>Review</option>\n {contextual.tabs.map((name) => (\n <option key={name}>{name}</option>\n ))}\n </select>\n <DocxEditor.Toolbar t={t} preset={false} onSave={onSave}>\n <DocxEditor.Toolbar.Undo />\n <DocxEditor.Toolbar.Redo />\n <DocxEditor.Toolbar.Save />\n {/* Undo, Redo and Save stay put, like Word's Quick Access Toolbar; the tab's own\n controls collapse into its More menu when the ribbon is too narrow for them. */}\n <RibbonOverflow tab={tab}>\n {tab === 'Home' && (\n <>\n <RibbonItem id=\"home-style\" label=\"Styles\" priority={80}>\n <StyleGallery />\n </RibbonItem>\n <RibbonItem id=\"home-bold\" label=\"Bold\" priority={100}>\n <DocxEditor.Toolbar.Bold />\n </RibbonItem>\n <RibbonItem id=\"home-italic\" label=\"Italic\" priority={95}>\n <DocxEditor.Toolbar.Italic />\n </RibbonItem>\n <RibbonItem id=\"home-underline\" label=\"Underline\" priority={90}>\n <DocxEditor.Toolbar.Underline />\n </RibbonItem>\n <RibbonItem id=\"home-font\" label=\"Font\" priority={60}>\n <RibbonMenu label=\"Font\" icon={<Type size={16} />}>\n <DocxEditor.Toolbar.FontFamily />\n <DocxEditor.Toolbar.FontSize />\n <DocxEditor.Toolbar.FontColor />\n <DocxEditor.Toolbar.Highlight />\n </RibbonMenu>\n </RibbonItem>\n <RibbonItem id=\"home-more-formatting\" label=\"More formatting\" priority={50}>\n <RibbonMenu label=\"More formatting\" icon={<Pilcrow size={16} />}>\n <DocxEditor.Toolbar.Alignment />\n <DocxEditor.Toolbar.BulletList />\n <DocxEditor.Toolbar.NumberedList />\n <DocxEditor.Toolbar.LineSpacing />\n <DocxEditor.Toolbar.Indent />\n <DocxEditor.Toolbar.Outdent />\n <DocxEditor.Toolbar.Strike />\n <DocxEditor.Toolbar.ClearFormatting />\n </RibbonMenu>\n </RibbonItem>\n </>\n )}\n {tab === 'Insert' && (\n <>\n <RibbonItem id=\"insert-table\" label=\"Table\">\n <DocxEditor.Toolbar.TableInsert />\n </RibbonItem>\n <RibbonItem id=\"insert-picture\" label=\"Picture\">\n <DocxEditor.Toolbar.ImageInsert />\n </RibbonItem>\n {imageGeneration && (\n <RibbonItem id=\"insert-generate-image\" label=\"Generate image\">\n <GenerateImageButton generation={imageGeneration} />\n </RibbonItem>\n )}\n <RibbonItem id=\"insert-page-break\" label=\"Page break\">\n <DocxEditor.Toolbar.Button slotId=\"insert.pageBreak\" />\n </RibbonItem>\n <RibbonItem id=\"insert-link\" label=\"Link\">\n <DocxEditor.Toolbar.Link />\n </RibbonItem>\n <RibbonItem id=\"insert-defined-term\" label=\"Defined term\">\n <DefinedTermButtons />\n </RibbonItem>\n <RibbonItem id=\"insert-quick-parts\" label=\"Quick Parts\">\n <QuickParts />\n </RibbonItem>\n <RibbonItem id=\"insert-signature-field\" label=\"Signature field\">\n <SignatureFieldMenu />\n </RibbonItem>\n <RibbonItem id=\"insert-my-signature\" label=\"My signature\">\n <MySignatureMenu />\n </RibbonItem>\n <RibbonItem id=\"insert-cross-reference\" label=\"Cross-reference\">\n <CrossReferenceButton />\n </RibbonItem>\n </>\n )}\n <LayoutTabContent tab={tab} />\n {tab === 'Design' && (\n <RibbonItem id=\"design-house-template\" label=\"House template\">\n <HouseTemplatePanel />\n </RibbonItem>\n )}\n {tab === 'References' && (\n <>\n <NoteButtons />\n <RibbonItem id=\"references-cross-reference\" label=\"Cross-reference\">\n <CrossReferenceButton />\n </RibbonItem>\n <RibbonItem id=\"references-update-cross-references\" label=\"Update cross-references\">\n <UpdateCrossReferencesButton />\n </RibbonItem>\n </>\n )}\n {tab === 'Review' && (\n <>\n <RibbonItem id=\"review-editing-mode\" label=\"Editing mode\" priority={10}>\n <DocxEditor.Toolbar.EditingMode />\n </RibbonItem>\n <RibbonItem id=\"review-comments\" label=\"Comments\">\n <DocxEditor.Toolbar.Comments />\n </RibbonItem>\n <RibbonItem id=\"review-options\" label=\"Review options\">\n <RibbonMenu label=\"Review options\" icon={<UsersRound size={16} />}>\n <DocxEditor.Toolbar.Reviewers />\n </RibbonMenu>\n </RibbonItem>\n </>\n )}\n </RibbonOverflow>\n {/* The toolbar provides its table chrome context only to a direct table-chrome child: this\n hidden one keeps it mounted for the Table tab's borders and shading. */}\n <DocxEditor.Toolbar.TableCellFill hidden />\n </DocxEditor.Toolbar>\n {badge && (\n <span className=\"native-docx-ribbon-badge\" data-testid=\"docx-ribbon-badge\">\n {badge}\n </span>\n )}\n </div>\n )\n}\n\n/** The compact editor's formatting: what an email needs. */\nfunction CompactToolbar() {\n const t = useChromeTranslate()\n return (\n <DocxEditor.Toolbar t={t} preset={false}>\n <DocxEditor.Toolbar.Undo />\n <DocxEditor.Toolbar.Redo />\n <DocxEditor.Toolbar.Bold />\n <DocxEditor.Toolbar.Italic />\n <DocxEditor.Toolbar.Underline />\n <DocxEditor.Toolbar.BulletList />\n <DocxEditor.Toolbar.NumberedList />\n <DocxEditor.Toolbar.Link />\n </DocxEditor.Toolbar>\n )\n}\n\nconst fixedZoomMode = { type: 'fixed' } as const\n/** The zoom menu's levels, in percent, beside Fit width. */\nconst ZOOM_LEVELS = [50, 75, 100, 125, 150, 200]\n\nexport function NativeDocxEditor({\n documentId,\n title,\n draftContent,\n initialCommentId,\n snapshot = false,\n onSaved,\n stream,\n adapter,\n compact = false,\n stateRef,\n}: NativeDocxEditorProps) {\n const [ready, setReady] = useState<Ready>(),\n [error, setError] = useState(''),\n [retry, setRetry] = useState(0)\n const [status, setStatus] = useState('Connecting\u2026'),\n [dirty, setDirty] = useState(false),\n [saving, setSaving] = useState(false),\n [offline, setOffline] = useState(false)\n const revision = useRef(0)\n const stageRef = useRef<HTMLDivElement>(null),\n fitCleanup = useRef<(() => void) | undefined>(undefined),\n refit = useRef<(() => void) | undefined>(undefined)\n // Fit width until the reader picks a zoom (the zoom menu, or Ctrl +/-/0), then keep theirs until\n // they pick Fit width again. `fitted` is the zoom the fit last applied: any other zoom is theirs.\n const fitting = useRef(true),\n fitted = useRef<number | undefined>(undefined)\n const [fitWidth, setFitWidth] = useState(true),\n [zoomPercent, setZoomPercent] = useState(100)\n const ref = useRef<Editor | null>(null),\n dirtyRef = useRef(false),\n draftTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const isDraft = draftContent !== undefined\n const streamRef = useRef(stream)\n streamRef.current = stream\n const streamWriter = useRef<WordDraftStream | null>(null)\n const streamFinished = useRef(false)\n const streamTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const [streamAttempt, setStreamAttempt] = useState(0)\n function updateStream() {\n const current = streamRef.current\n if (!current || !streamWriter.current || streamFinished.current) return\n try {\n streamWriter.current.update(current.content, !current.busy)\n setStatus(\n current.busy\n ? 'Generating \u00B7 editing is locked'\n : current.error\n ? 'Generation stopped \u00B7 draft retained'\n : 'Opening the saved document\u2026'\n )\n if (!current.busy && !current.error) streamFinished.current = true\n } catch (failure) {\n setError(\n failure instanceof Error ? failure.message : 'Could not import the generated document.'\n )\n }\n }\n useEffect(() => {\n if (!streamRef.current) return\n if (!streamRef.current.busy) {\n clearTimeout(streamTimer.current)\n streamTimer.current = undefined\n updateStream()\n } else if (!streamTimer.current) {\n streamTimer.current = setTimeout(() => {\n streamTimer.current = undefined\n updateStream()\n }, 120)\n }\n }, [stream?.content, stream?.busy, stream?.error, streamAttempt])\n useEffect(() => () => clearTimeout(streamTimer.current), [])\n useEffect(() => {\n let cancelled = false\n let room: HocuspocusCollaborationRoom | undefined\n const cleanups: (() => void)[] = []\n setReady(undefined)\n setError('')\n setStatus('Connecting\u2026')\n setDirty(false)\n dirtyRef.current = false\n // A refusal for another room format: \"Updating\u2026\" while the matching editor or server arrives.\n const updating = (reason: string | undefined): boolean => {\n const cancel = awaitMatchingEditor(reason, () => setRetry((x) => x + 1))\n if (!cancel) return false\n cleanups.push(cancel)\n setError('')\n setStatus('Updating\u2026')\n return true\n }\n async function start() {\n const fonts = await adapter.loadFonts()\n if (isDraft || snapshot) {\n const data = isDraft\n ? (!streamRef.current && drafts.get(documentId)) ||\n (draftContent === '' && adapter.houseTemplate\n ? await (async () => {\n // A blank note starts from the house template, as File \u203A New from it does.\n const template = await resolveHouseTemplate(adapter.houseTemplate)\n return newFromTemplate(template.bytes, {\n attachedTemplate: templateFileName(template),\n })\n })()\n : await (\n await adapter.request('/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ content: draftContent }),\n })\n ).arrayBuffer())\n : await (await adapter.request(contentPath(documentId))).arrayBuffer()\n if (!cancelled) {\n setReady({\n document: new Uint8Array(data),\n fonts,\n modules: [reviewModule()],\n canEdit: !snapshot,\n author: adapter.author || 'You',\n filename: title,\n })\n setStatus(snapshot ? 'Saved version \u00B7 read only' : 'Unsaved note')\n }\n return\n }\n const session = await adapter.open(documentId)\n const ws = new URL(session.websocket_path, adapter.baseUrl || location.origin)\n ws.protocol = ws.protocol === 'https:' ? 'wss:' : 'ws:'\n let initial = true\n room = await createHocuspocusCollaboration({\n url: ws.toString(),\n roomId: session.room_id,\n identity: session.identity,\n offlineEditing: true,\n token: async () => {\n const next = initial ? session : await adapter.open(documentId)\n initial = false\n if (!cancelled)\n setReady((previous) => (previous ? { ...previous, canEdit: next.can_edit } : previous))\n return JSON.stringify({\n capability: next.token,\n versions: DOCUMENT_COLLABORATION_VERSIONS,\n })\n },\n })\n if (cancelled) {\n room.destroy()\n return\n }\n const current = room\n cleanups.push(\n current.session.subscribeStatus((s, _reason, detail) => {\n const disconnected = s === 'disconnected'\n setOffline(disconnected)\n if (s === 'error') {\n if (updating(detail)) return\n setError(\n detail ||\n 'The collaboration session failed. Export your local document before reconnecting.'\n )\n setStatus('Connection failed')\n } else if (disconnected) setStatus('Offline \u00B7 edits buffered locally')\n else if (s === 'ready') {\n setError('')\n setStatus(dirtyRef.current ? 'Saving changes\u2026' : 'Connected')\n }\n })\n )\n const stateless = ({ payload }: { payload: string }) => {\n try {\n const message = JSON.parse(payload) as {\n type: string\n message?: string\n hash?: string\n vector?: string\n receipt?: string\n }\n if (message.type === 'persisted') {\n if (\n !cancelled &&\n message.vector &&\n message.receipt &&\n covered(current, message.vector, message.receipt)\n ) {\n dirtyRef.current = false\n setDirty(false)\n setStatus('All changes saved')\n }\n }\n if (message.type === 'pending') setStatus('Saving changes\u2026')\n if (message.type === 'save-error') setStatus(message.message || 'Autosave failed')\n } catch {\n /* Ignore unrelated provider messages. */\n }\n }\n current.provider.on('stateless', stateless)\n cleanups.push(() => current.provider.off('stateless', stateless))\n if (adapter.subscribeTokenChanges)\n cleanups.push(\n adapter.subscribeTokenChanges(() => {\n void current.provider\n .sendToken()\n .catch(() => setStatus('Could not renew the collaboration session'))\n })\n )\n const refresh = setInterval(\n () => {\n void current.provider\n .sendToken()\n .catch(() => setStatus('Could not renew the collaboration session'))\n },\n 5 * 60 * 1000\n )\n cleanups.push(() => clearInterval(refresh))\n setReady({\n document: current.document,\n fonts,\n modules: [reviewModule(), collaborationModule({ session: current.session })],\n room: current,\n canEdit: session.can_edit,\n author: session.identity.name,\n filename: session.filename,\n })\n setStatus(session.can_edit ? 'All changes saved' : 'Read only \u00B7 live')\n }\n void start().catch((e) => {\n const message = e instanceof Error ? e.message : String(e)\n if (!cancelled && !updating(message)) setError(message)\n })\n return () => {\n cancelled = true\n cleanups.forEach((f) => f())\n clearTimeout(draftTimer.current)\n fitCleanup.current?.()\n room?.destroy()\n }\n }, [documentId, isDraft, snapshot, retry]) // draftContent seeds once, never remount on typing.\n useEffect(() => {\n if (!stateRef) return\n const room = ready?.room\n stateRef.current = () => (room ? encodeState(room) : undefined)\n return () => {\n stateRef.current = null\n }\n }, [stateRef, ready?.room])\n useEffect(() => {\n adapter.onDirtyChange?.(dirty)\n const beforeUnload = (e: BeforeUnloadEvent) => {\n if (dirtyRef.current) e.preventDefault()\n }\n window.addEventListener('beforeunload', beforeUnload)\n return () => {\n window.removeEventListener('beforeunload', beforeUnload)\n adapter.onDirtyChange?.(false)\n }\n }, [dirty])\n async function exportDocument() {\n runBeforeSave(ref.current)\n const data = await ref.current?.save()\n if (!data) return\n const url = URL.createObjectURL(\n new Blob([normalizeDocxExport(data)], {\n type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n })\n )\n const a = document.createElement('a')\n a.href = url\n a.download = title.replace(/\\.[^.]+$/, '') + '.docx'\n a.click()\n setTimeout(() => URL.revokeObjectURL(url), 5000)\n }\n useLayoutEffect(() => {\n const editor = ref.current\n return () => {\n if (isDraft && editor && dirtyRef.current)\n void editor\n .save()\n .then((bytes) => {\n if (bytes) drafts.set(documentId, bytes)\n })\n .catch(() => {})\n }\n }, [documentId, isDraft, ready])\n async function saveVersion() {\n if (!ready || saving || stream) return\n setSaving(true)\n runBeforeSave(ref.current)\n const atRevision = revision.current\n try {\n const result = isDraft\n ? await (async () => {\n const bytes = await ref.current?.save()\n if (!bytes) throw new Error('The editor is not ready.')\n return (\n await adapter.request(`/notes?${new URLSearchParams({ title })}`, {\n method: 'POST',\n headers: {\n 'Content-Type':\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n },\n body: bytes,\n })\n ).json() as Promise<{ document_ext_id: string }>\n })()\n : await adapter.save(documentId, ready.room ? encodeState(ready.room) : undefined)\n if (revision.current === atRevision) {\n dirtyRef.current = false\n setDirty(false)\n drafts.delete(documentId)\n }\n await Promise.resolve(adapter.onVersionSaved?.(result.document_ext_id)).catch(() => {\n /* The saved document remains accessible by its ID. */\n })\n onSaved?.(result.document_ext_id)\n adapter.notify?.(isDraft ? 'Word note saved' : 'DOCX version saved', 'success')\n } catch (e) {\n adapter.notify?.(e instanceof Error ? e.message : 'Could not save this document.', 'error')\n setStatus('Save failed \u00B7 your draft is retained')\n } finally {\n setSaving(false)\n }\n }\n function editorReady(editor: Editor) {\n ref.current = editor\n if (streamRef.current) {\n streamWriter.current = new WordDraftStream(editor)\n updateStream()\n }\n fitCleanup.current?.()\n fitted.current = undefined\n const viewport = stageRef.current?.querySelector<HTMLElement>('.native-docx-viewport')\n if (!viewport) return\n let surface: Element | null = null\n const fit = () => {\n // The page itself: laid out after the editor is ready, and resized by every zoom.\n const page = viewport.querySelector('.docx-paginated-surface')\n if (page && page !== surface) resize.observe((surface = page))\n const current = editor.getZoom()\n // A zoom the fit did not apply is the reader's: stop fitting until they pick Fit width again.\n if (\n fitting.current &&\n fitted.current !== undefined &&\n Math.abs(current - fitted.current) > 0.001\n )\n fitting.current = false\n setFitWidth(fitting.current)\n setZoomPercent(Math.round(current * 100))\n if (!fitting.current) return\n const pageWidth = editor.getPageGeometry()[0]?.box.width\n if (!pageWidth) return\n const style = getComputedStyle(viewport)\n const available =\n viewport.clientWidth - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight)\n // The page fills the viewer, its padding the only gutter. Compact (an email body) never\n // magnifies: its text stays the size the email is read at.\n const zoom = Math.max(0.1, Math.min(compact ? 1 : 5, available / pageWidth))\n if (Math.abs(current - zoom) > 0.001) editor.setZoom(zoom)\n fitted.current = editor.getZoom()\n setZoomPercent(Math.round(fitted.current * 100))\n }\n refit.current = fit\n const resize = new ResizeObserver(fit)\n const chrome = new MutationObserver(fit)\n resize.observe(viewport)\n chrome.observe(viewport, {\n attributes: true,\n attributeFilter: ['style', 'data-review-pane', 'data-review-margin'],\n })\n // Where the page mounts, to start watching it if it is laid out after the editor is ready.\n const mount = viewport.querySelector('.docx-content-mount')\n if (mount) chrome.observe(mount, { childList: true })\n if (!fitting.current) editor.setZoom(zoomPercent / 100)\n fit()\n fitCleanup.current = () => {\n resize.disconnect()\n chrome.disconnect()\n refit.current = undefined\n }\n }\n function pickZoom(value: string) {\n const editor = ref.current\n if (!editor) return\n if (value === 'fit') {\n fitting.current = true\n fitted.current = undefined\n refit.current?.()\n return\n }\n fitting.current = false\n setFitWidth(false)\n setZoomPercent(Number(value))\n editor.setZoom(Number(value) / 100)\n }\n function changed() {\n if (snapshot) return\n revision.current += 1\n dirtyRef.current = true\n setDirty(true)\n setStatus(\n isDraft ? 'Unsaved note' : offline ? 'Offline \u00B7 edits buffered locally' : 'Saving changes\u2026'\n )\n if (isDraft) {\n clearTimeout(draftTimer.current)\n draftTimer.current = setTimeout(() => {\n void ref.current?.save().then((bytes) => {\n if (bytes) drafts.set(documentId, bytes)\n })\n }, 200)\n }\n }\n return (\n <section\n className={compact ? 'native-docx-viewer native-docx-compact' : 'native-docx-viewer'}\n data-testid=\"native-docx-editor\"\n aria-busy={!!stream?.busy}\n data-generation-state={\n stream ? (stream.busy ? 'generating' : stream.error ? 'stopped' : 'generated') : 'ready'\n }\n >\n {offline && (\n <div className=\"native-docx-notice\">\n Changes are buffered in this browser. Keep this tab open until the connection returns, or\n download your DOCX.\n </div>\n )}\n {error && (\n <div className=\"native-docx-notice\" data-error=\"true\" role=\"alert\">\n {error}{' '}\n <button\n disabled={!stream && dirty}\n title={dirty ? 'Download your unsaved DOCX before reopening the editor' : undefined}\n onClick={() =>\n stream ? (setError(''), setStreamAttempt((x) => x + 1)) : setRetry((x) => x + 1)\n }\n >\n <RefreshCw size={12} />\n Retry\n </button>\n </div>\n )}\n {!ready && !error && (\n <div className=\"native-docx-error\" role=\"status\">\n Opening Word document\u2026\n </div>\n )}\n {ready && (\n <div className=\"native-docx-body docx-editor\">\n <EditorBoundary key={retry}>\n <DocxEditor.Root\n document={ready.document}\n modules={ready.modules}\n fonts={ready.fonts}\n mode={\n stream || (isDraft && ready.canEdit && !snapshot) || (compact && ready.canEdit)\n ? 'edit'\n : !ready.canEdit || snapshot\n ? 'view'\n : 'suggesting'\n }\n reviewDisplayMode=\"all-markup\"\n zoomMode={fixedZoomMode}\n author={ready.author}\n onReady={editorReady}\n onChange={(change) => {\n if (change.source !== 'load') changed()\n }}\n onFontError={(e) => setError(e.message)}\n >\n <DocxAuthorContext.Provider value={ready.author}>\n <DefinedTermsProvider\n load={adapter.definitions}\n editable={!stream && !snapshot && ready.canEdit}\n notify={adapter.notify}\n >\n <HouseTemplateProvider\n enabled={!stream}\n host={adapter.houseTemplate}\n documentId={isDraft || snapshot ? undefined : documentId}\n editable={!stream && !snapshot && ready.canEdit}\n notify={adapter.notify}\n >\n <CrossReferencesProvider\n editable={!stream && !snapshot && ready.canEdit}\n references={adapter.references}\n documentId={documentId}\n notify={adapter.notify}\n >\n <SignatureFieldsProvider\n signers={adapter.signatureSigners}\n mySignature={adapter.savedSignature}\n editable={!stream && !snapshot && ready.canEdit}\n notify={adapter.notify}\n >\n <DocxEditor.RevisionMarkup\n insertions={{ mark: 'underline', color: 'blue' }}\n deletions={{ mark: 'strikethrough', color: 'red' }}\n movedFrom={{ mark: 'doubleStrikethrough', color: 'green' }}\n movedTo={{ mark: 'doubleUnderline', color: 'green' }}\n trackMoves\n />\n {compact && !stream && <CompactToolbar />}\n {!compact && !stream && (\n <DocxRibbon\n onSave={() => void saveVersion()}\n imageGeneration={\n adapter.imageGeneration && {\n notify: adapter.notify,\n ...adapter.imageGeneration,\n }\n }\n badge={\n // The document's state, in place of a title row above the ribbon.\n <DocumentStateBadge\n state={\n snapshot || !ready.canEdit\n ? 'read-only'\n : ready.room\n ? 'co-editing'\n : isDraft\n ? 'draft'\n : undefined\n }\n />\n }\n />\n )}\n {!stream && <WordShortcuts scope={stageRef} />}\n {!stream && <TableTabKeys scope={stageRef} />}\n <div\n className=\"native-docx-stage\"\n ref={stageRef}\n onMouseDownCapture={(event) => {\n if (event.button === 2 && ref.current?.getSelectionPlacement())\n event.preventDefault()\n }}\n >\n <DocxEditor.Viewport className=\"native-docx-viewport\">\n <DocxEditor.Content />\n <DocxMentions\n initialCommentId={initialCommentId}\n mentions={adapter.mentions}\n notify={adapter.notify}\n getAgentStatus={adapter.getAgentStatus}\n requestAgent={\n adapter.requestAgent\n ? (request) => adapter.requestAgent!(documentId, request)\n : undefined\n }\n >\n <RoomInputBinding session={ready.room?.session} />\n <AgentUndoRoom.Provider value={ready.room?.ydoc ?? null}>\n <DocxEditorReview>\n {() => (\n <DocxEditorReview.Card>\n <DocxCommentActivity />\n <AgentUndo />\n </DocxEditorReview.Card>\n )}\n </DocxEditorReview>\n </AgentUndoRoom.Provider>\n </DocxMentions>\n {!compact && <DocxEditor.HeaderFooterChrome />}\n {!compact && <DocxEditor.NotesChrome />}\n <DocxEditor.Equation />\n <DocxEditor.HyperLink />\n <DocxEditor.ContextMenu>\n <DocxContextMenuExtras />\n <MySignatureContextItems />\n <SignatureFieldContextItem />\n </DocxEditor.ContextMenu>\n </DocxEditor.Viewport>\n {!compact && <DocxEditor.PageNumber />}\n </div>\n </SignatureFieldsProvider>\n </CrossReferencesProvider>\n </HouseTemplateProvider>\n </DefinedTermsProvider>\n </DocxAuthorContext.Provider>\n </DocxEditor.Root>\n </EditorBoundary>\n </div>\n )}\n <div className=\"native-docx-actions\">\n <span className=\"native-docx-status\" role=\"status\">\n {offline ? <WifiOff size={14} /> : !dirty && ready ? <Check size={14} /> : null}\n {status}\n </span>\n <DocxParticipants session={ready?.room?.session} />\n {!compact && (\n <select\n className=\"native-docx-zoom\"\n aria-label=\"Zoom\"\n data-testid=\"native-docx-zoom\"\n disabled={!ready}\n value={fitWidth ? 'fit' : String(zoomPercent)}\n onChange={(event) => pickZoom(event.target.value)}\n >\n <option value=\"fit\">Fit width</option>\n {[...new Set([...ZOOM_LEVELS, ...(fitWidth ? [] : [zoomPercent])])]\n .sort((a, b) => a - b)\n .map((level) => (\n <option key={level} value={String(level)}>\n {level}%\n </option>\n ))}\n </select>\n )}\n {!compact && (\n <button\n onClick={() => void exportDocument()}\n disabled={!ready}\n aria-label=\"Download DOCX\"\n >\n <Download size={14} />\n DOCX\n </button>\n )}\n {!compact && !snapshot && !stream && ready?.canEdit && (\n <button\n className=\"native-docx-save\"\n onClick={() => void saveVersion()}\n disabled={!ready || saving || offline}\n data-testid=\"native-docx-save\"\n >\n <Save size={14} />\n {saving ? 'Saving\u2026' : isDraft ? 'Save note' : 'Save version'}\n </button>\n )}\n </div>\n </section>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|