@arbidocs/blocks 0.5.125 → 0.5.126

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/dist/{ClippingMediaViewer-ZFEX5A3U.cjs → ClippingMediaViewer-47BAXNLO.cjs} +10 -11
  2. package/dist/ClippingMediaViewer-47BAXNLO.cjs.map +1 -0
  3. package/dist/{ClippingPdfViewer-3LRTEPHV.cjs → ClippingPdfViewer-D5BYHEAH.cjs} +16 -14
  4. package/dist/ClippingPdfViewer-D5BYHEAH.cjs.map +1 -0
  5. package/dist/{ConnectedCallDock-XJOYVVAH.cjs → ConnectedCallDock-733O5M36.cjs} +11 -11
  6. package/dist/{ConnectedCallDock-XJOYVVAH.cjs.map → ConnectedCallDock-733O5M36.cjs.map} +1 -1
  7. package/dist/{ConnectedCallRoom-CUDYAPQK.cjs → ConnectedCallRoom-TAUGSRGV.cjs} +11 -11
  8. package/dist/{ConnectedCallRoom-CUDYAPQK.cjs.map → ConnectedCallRoom-TAUGSRGV.cjs.map} +1 -1
  9. package/dist/{ConnectedNativeDocxComparison-7QQ55JIO.cjs → ConnectedNativeDocxComparison-HDE522YC.cjs} +12 -12
  10. package/dist/{ConnectedNativeDocxComparison-7QQ55JIO.cjs.map → ConnectedNativeDocxComparison-HDE522YC.cjs.map} +1 -1
  11. package/dist/{ConnectedPresentation-L32JPRFI.cjs → ConnectedPresentation-SI3L77J4.cjs} +36 -37
  12. package/dist/ConnectedPresentation-SI3L77J4.cjs.map +1 -0
  13. package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs → ConnectedProductionSetDialog-LHB4VQWC.cjs} +3 -3
  14. package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs.map → ConnectedProductionSetDialog-LHB4VQWC.cjs.map} +1 -1
  15. package/dist/{ConnectedSlidesTab-P7GGNUTO.cjs → ConnectedSlidesTab-JSPU6EY5.cjs} +39 -45
  16. package/dist/ConnectedSlidesTab-JSPU6EY5.cjs.map +1 -0
  17. package/dist/{ConnectedStreamedWordArtifact-7NJ3N52V.cjs → ConnectedStreamedWordArtifact-4FHPOAFZ.cjs} +12 -12
  18. package/dist/{ConnectedStreamedWordArtifact-7NJ3N52V.cjs.map → ConnectedStreamedWordArtifact-4FHPOAFZ.cjs.map} +1 -1
  19. package/dist/{DocumentReviewCard-BFPOFQXI.cjs → DocumentReviewCard-BDNXP3D4.cjs} +16 -16
  20. package/dist/{DocumentReviewCard-BFPOFQXI.cjs.map → DocumentReviewCard-BDNXP3D4.cjs.map} +1 -1
  21. package/dist/{FilesViewerDialog-MHUVEZ7M.cjs → FilesViewerDialog-WQRNSKWM.cjs} +32 -33
  22. package/dist/FilesViewerDialog-WQRNSKWM.cjs.map +1 -0
  23. package/dist/{NativeDocxEditor-SIRYPMBN.cjs → NativeDocxEditor-SUDULUN3.cjs} +6 -6
  24. package/dist/{NativeDocxEditor-SIRYPMBN.cjs.map → NativeDocxEditor-SUDULUN3.cjs.map} +1 -1
  25. package/dist/{SpotlightStrip-ED22UYTM.cjs → SpotlightStrip-QQ2WUI32.cjs} +28 -29
  26. package/dist/SpotlightStrip-QQ2WUI32.cjs.map +1 -0
  27. package/dist/{WorkspaceTableView-MIFYXV3G.cjs → WorkspaceTableView-3XYAV4BV.cjs} +8 -8
  28. package/dist/{WorkspaceTableView-MIFYXV3G.cjs.map → WorkspaceTableView-3XYAV4BV.cjs.map} +1 -1
  29. package/dist/agents/index.cjs +215 -215
  30. package/dist/ai-IEIR7SC2.cjs +4 -4
  31. package/dist/auth/index.cjs +1 -1
  32. package/dist/calls/index.cjs +4 -4
  33. package/dist/chat/index.cjs +6 -6
  34. package/dist/{chunk-ZZZITHGK.cjs → chunk-26SFI2BH.cjs} +16 -3
  35. package/dist/chunk-26SFI2BH.cjs.map +1 -0
  36. package/dist/{chunk-CQ2RJYE2.cjs → chunk-3IH55CDE.cjs} +3 -3
  37. package/dist/{chunk-CQ2RJYE2.cjs.map → chunk-3IH55CDE.cjs.map} +1 -1
  38. package/dist/{chunk-NG2EE7HR.cjs → chunk-463QM764.cjs} +3 -3
  39. package/dist/{chunk-NG2EE7HR.cjs.map → chunk-463QM764.cjs.map} +1 -1
  40. package/dist/{chunk-7RJZIPLE.cjs → chunk-4KEQ62SL.cjs} +33 -33
  41. package/dist/{chunk-7RJZIPLE.cjs.map → chunk-4KEQ62SL.cjs.map} +1 -1
  42. package/dist/{chunk-AS6QZETU.cjs → chunk-5QERK4PK.cjs} +35 -35
  43. package/dist/{chunk-AS6QZETU.cjs.map → chunk-5QERK4PK.cjs.map} +1 -1
  44. package/dist/{chunk-UA7HOLAZ.cjs → chunk-6B4CCDDB.cjs} +5 -5
  45. package/dist/{chunk-UA7HOLAZ.cjs.map → chunk-6B4CCDDB.cjs.map} +1 -1
  46. package/dist/{chunk-AISYXX4M.cjs → chunk-7NLO7ASW.cjs} +4 -4
  47. package/dist/{chunk-AISYXX4M.cjs.map → chunk-7NLO7ASW.cjs.map} +1 -1
  48. package/dist/{chunk-QIK7E6VF.cjs → chunk-7PN3YENO.cjs} +4 -4
  49. package/dist/{chunk-QIK7E6VF.cjs.map → chunk-7PN3YENO.cjs.map} +1 -1
  50. package/dist/{chunk-JY7UUZQG.cjs → chunk-7Q46YAX4.cjs} +74 -71
  51. package/dist/chunk-7Q46YAX4.cjs.map +1 -0
  52. package/dist/{chunk-J3FFSEKO.cjs → chunk-ADDQKZ5I.cjs} +4 -4
  53. package/dist/{chunk-J3FFSEKO.cjs.map → chunk-ADDQKZ5I.cjs.map} +1 -1
  54. package/dist/{chunk-L6HTZIBD.cjs → chunk-ALK3PUUB.cjs} +3 -3
  55. package/dist/{chunk-L6HTZIBD.cjs.map → chunk-ALK3PUUB.cjs.map} +1 -1
  56. package/dist/{chunk-3ZZZO4F7.cjs → chunk-BY3QA3S5.cjs} +9 -9
  57. package/dist/{chunk-3ZZZO4F7.cjs.map → chunk-BY3QA3S5.cjs.map} +1 -1
  58. package/dist/{chunk-BLIO3B7Z.cjs → chunk-CMPHJRVV.cjs} +3 -3
  59. package/dist/{chunk-BLIO3B7Z.cjs.map → chunk-CMPHJRVV.cjs.map} +1 -1
  60. package/dist/{chunk-3UP32FM3.cjs → chunk-CQQQIZU4.cjs} +5 -5
  61. package/dist/{chunk-3UP32FM3.cjs.map → chunk-CQQQIZU4.cjs.map} +1 -1
  62. package/dist/{chunk-YOEP3I4V.cjs → chunk-E3L5DB5F.cjs} +5 -5
  63. package/dist/{chunk-YOEP3I4V.cjs.map → chunk-E3L5DB5F.cjs.map} +1 -1
  64. package/dist/{chunk-6JMW3IJ2.cjs → chunk-FB3JXSQT.cjs} +103 -100
  65. package/dist/chunk-FB3JXSQT.cjs.map +1 -0
  66. package/dist/{chunk-YVO6Z5BS.cjs → chunk-FGOJBOZX.cjs} +10 -10
  67. package/dist/{chunk-YVO6Z5BS.cjs.map → chunk-FGOJBOZX.cjs.map} +1 -1
  68. package/dist/{chunk-2K6IMIVL.cjs → chunk-GNZAH6UI.cjs} +3 -3
  69. package/dist/{chunk-2K6IMIVL.cjs.map → chunk-GNZAH6UI.cjs.map} +1 -1
  70. package/dist/{chunk-B3R62764.cjs → chunk-I4X72WUT.cjs} +6 -6
  71. package/dist/{chunk-B3R62764.cjs.map → chunk-I4X72WUT.cjs.map} +1 -1
  72. package/dist/{chunk-ORNLCBNE.cjs → chunk-JVEDKKNO.cjs} +43 -4
  73. package/dist/chunk-JVEDKKNO.cjs.map +1 -0
  74. package/dist/{chunk-UUENH4BJ.cjs → chunk-KXIRVKCJ.cjs} +3 -3
  75. package/dist/{chunk-UUENH4BJ.cjs.map → chunk-KXIRVKCJ.cjs.map} +1 -1
  76. package/dist/{chunk-PWBRE7JA.cjs → chunk-LOB2ATS5.cjs} +24 -11
  77. package/dist/chunk-LOB2ATS5.cjs.map +1 -0
  78. package/dist/{chunk-ENOPKX7E.cjs → chunk-LXM5QXII.cjs} +3 -3
  79. package/dist/{chunk-ENOPKX7E.cjs.map → chunk-LXM5QXII.cjs.map} +1 -1
  80. package/dist/{chunk-PSB64T43.cjs → chunk-MLA2BJ2Y.cjs} +28 -28
  81. package/dist/{chunk-PSB64T43.cjs.map → chunk-MLA2BJ2Y.cjs.map} +1 -1
  82. package/dist/chunk-OALQGO5C.cjs +18 -0
  83. package/dist/{chunk-IRGRMJPP.cjs.map → chunk-OALQGO5C.cjs.map} +1 -1
  84. package/dist/{chunk-OGK377NL.cjs → chunk-OHHKBURG.cjs} +33 -33
  85. package/dist/{chunk-OGK377NL.cjs.map → chunk-OHHKBURG.cjs.map} +1 -1
  86. package/dist/{chunk-GAMRVB3I.cjs → chunk-Q6N5D3R5.cjs} +32 -7
  87. package/dist/chunk-Q6N5D3R5.cjs.map +1 -0
  88. package/dist/{chunk-4LP5MJGQ.cjs → chunk-QG2U2JGX.cjs} +4 -4
  89. package/dist/{chunk-4LP5MJGQ.cjs.map → chunk-QG2U2JGX.cjs.map} +1 -1
  90. package/dist/{chunk-MVXHTAJ4.cjs → chunk-QWVUBTW3.cjs} +9 -9
  91. package/dist/{chunk-MVXHTAJ4.cjs.map → chunk-QWVUBTW3.cjs.map} +1 -1
  92. package/dist/{chunk-OHWHYVKG.cjs → chunk-T73BHNQX.cjs} +3 -3
  93. package/dist/{chunk-OHWHYVKG.cjs.map → chunk-T73BHNQX.cjs.map} +1 -1
  94. package/dist/{chunk-ADPRIBSH.cjs → chunk-X7ALF4MP.cjs} +7 -7
  95. package/dist/{chunk-ADPRIBSH.cjs.map → chunk-X7ALF4MP.cjs.map} +1 -1
  96. package/dist/{chunk-PVJ5ODDB.cjs → chunk-XNB27POJ.cjs} +4 -4
  97. package/dist/{chunk-PVJ5ODDB.cjs.map → chunk-XNB27POJ.cjs.map} +1 -1
  98. package/dist/{chunk-TSFNLY3K.cjs → chunk-ZCU72Q76.cjs} +192 -166
  99. package/dist/chunk-ZCU72Q76.cjs.map +1 -0
  100. package/dist/connect/docx.cjs +16 -16
  101. package/dist/connect/index.cjs +1062 -1027
  102. package/dist/connect/index.cjs.map +1 -1
  103. package/dist/connect/viewer.cjs +25 -26
  104. package/dist/connection/ai.d.ts +1 -0
  105. package/dist/connection/docx/ConnectedNativeDocxEditor.js +4 -5
  106. package/dist/connection/docx/ConnectedNativeDocxEditor.js.map +2 -2
  107. package/dist/connection/docx/save-native-version.d.ts +3 -0
  108. package/dist/connection/docx/save-native-version.js +19 -0
  109. package/dist/connection/docx/save-native-version.js.map +7 -0
  110. package/dist/connection/presentation/ClippingPdfViewer.js +8 -5
  111. package/dist/connection/presentation/ClippingPdfViewer.js.map +2 -2
  112. package/dist/connection/presentation/ConnectedSlidesTab.js +8 -13
  113. package/dist/connection/presentation/ConnectedSlidesTab.js.map +2 -2
  114. package/dist/connection/presentation/usePresentationController.js +24 -15
  115. package/dist/connection/presentation/usePresentationController.js.map +2 -2
  116. package/dist/connection/presentation/usePresentationFiles.d.ts +2 -1
  117. package/dist/connection/presentation/usePresentationFiles.js +15 -6
  118. package/dist/connection/presentation/usePresentationFiles.js.map +2 -2
  119. package/dist/connection/search/ConnectedSearchPage.d.ts +0 -11
  120. package/dist/connection/search/ConnectedSearchPage.js +3 -0
  121. package/dist/connection/search/ConnectedSearchPage.js.map +2 -2
  122. package/dist/connection/search/SearchResultRows.js +75 -43
  123. package/dist/connection/search/SearchResultRows.js.map +2 -2
  124. package/dist/connection/viewer/CleanViewControl.d.ts +3 -1
  125. package/dist/connection/viewer/CleanViewControl.js +5 -1
  126. package/dist/connection/viewer/CleanViewControl.js.map +2 -2
  127. package/dist/connection/viewer/ConnectedDocumentViewer.js +1 -1
  128. package/dist/connection/viewer/ConnectedDocumentViewer.js.map +2 -2
  129. package/dist/connection/viewer/useCleanView.d.ts +1 -1
  130. package/dist/connection/viewer/useCleanView.js +2 -2
  131. package/dist/connection/viewer/useCleanView.js.map +2 -2
  132. package/dist/connection/viewer/useViewedDocument.d.ts +1 -0
  133. package/dist/document-tools/index.cjs +20 -20
  134. package/dist/docx/NativeDocxEditor.d.ts +2 -1
  135. package/dist/docx/NativeDocxEditor.js +30 -5
  136. package/dist/docx/NativeDocxEditor.js.map +2 -2
  137. package/dist/docx/index.cjs +38 -38
  138. package/dist/embed/index.cjs +19 -19
  139. package/dist/facts/index.cjs +64 -64
  140. package/dist/files/index.cjs +223 -223
  141. package/dist/index.cjs +523 -523
  142. package/dist/presentation/ClipCaptureOverlay.js +14 -1
  143. package/dist/presentation/ClipCaptureOverlay.js.map +2 -2
  144. package/dist/presentation/ClipImage.js +7 -4
  145. package/dist/presentation/ClipImage.js.map +2 -2
  146. package/dist/presentation/ClipTray.js +11 -7
  147. package/dist/presentation/ClipTray.js.map +2 -2
  148. package/dist/presentation/SlidesEditor.js +6 -2
  149. package/dist/presentation/SlidesEditor.js.map +2 -2
  150. package/dist/presentation/store.d.ts +2 -0
  151. package/dist/presentation/store.js +15 -0
  152. package/dist/presentation/store.js.map +3 -3
  153. package/dist/settings/index.cjs +146 -146
  154. package/dist/site/index.cjs +6 -6
  155. package/dist/studio/index.cjs +10 -10
  156. package/dist/workflow-canvas/index.cjs +33 -33
  157. package/node_modules/@arbidocs/coedit/package.json +1 -1
  158. package/package.json +5 -5
  159. package/dist/ClippingMediaViewer-ZFEX5A3U.cjs.map +0 -1
  160. package/dist/ClippingPdfViewer-3LRTEPHV.cjs.map +0 -1
  161. package/dist/ConnectedPresentation-L32JPRFI.cjs.map +0 -1
  162. package/dist/ConnectedSlidesTab-P7GGNUTO.cjs.map +0 -1
  163. package/dist/FilesViewerDialog-MHUVEZ7M.cjs.map +0 -1
  164. package/dist/SpotlightStrip-ED22UYTM.cjs.map +0 -1
  165. package/dist/chunk-6JMW3IJ2.cjs.map +0 -1
  166. package/dist/chunk-GAMRVB3I.cjs.map +0 -1
  167. package/dist/chunk-GFUOCGY6.cjs +0 -32
  168. package/dist/chunk-GFUOCGY6.cjs.map +0 -1
  169. package/dist/chunk-IRGRMJPP.cjs +0 -18
  170. package/dist/chunk-JY7UUZQG.cjs.map +0 -1
  171. package/dist/chunk-ORNLCBNE.cjs.map +0 -1
  172. package/dist/chunk-PWBRE7JA.cjs.map +0 -1
  173. package/dist/chunk-TSFNLY3K.cjs.map +0 -1
  174. package/dist/chunk-ZZZITHGK.cjs.map +0 -1
@@ -492,7 +492,13 @@ function NativeDocxEditor({
492
492
  });
493
493
  };
494
494
  }, [documentId, isDraft, ready]);
495
- async function saveVersion() {
495
+ const [editRevision, setEditRevision] = useState(0);
496
+ const [checkpoint, setCheckpoint] = useState(null);
497
+ useEffect(() => {
498
+ setEditRevision(0);
499
+ setCheckpoint(null);
500
+ }, [documentId]);
501
+ async function saveVersion(autosave = false) {
496
502
  if (!ready || savingRef.current || stream) return false;
497
503
  if (snapshot || !ready.canEdit) return true;
498
504
  if (offline) return false;
@@ -513,7 +519,7 @@ function NativeDocxEditor({
513
519
  },
514
520
  body: bytes
515
521
  })).json();
516
- })() : await adapter.save(documentId, ready.room ? encodeState(ready.room) : void 0);
522
+ })() : await adapter.save(documentId, ready.room ? encodeState(ready.room) : void 0, autosave);
517
523
  if (revision.current === atRevision) {
518
524
  dirtyRef.current = false;
519
525
  setDirty(false);
@@ -527,7 +533,8 @@ function NativeDocxEditor({
527
533
  adapter.notify?.("The document changed while saving. Please try again.", "error");
528
534
  return false;
529
535
  }
530
- adapter.notify?.(isDraft ? "Word note saved" : "DOCX version saved", "success");
536
+ setCheckpoint({ version: savedVersion, autosave: autosave && !isDraft, revision: atRevision });
537
+ if (!autosave) adapter.notify?.(isDraft ? "Word note saved" : "DOCX version saved", "success");
531
538
  return savedVersion ?? true;
532
539
  } catch (e) {
533
540
  adapter.notify?.(e instanceof Error ? e.message : "Could not save this document.", "error");
@@ -540,11 +547,28 @@ function NativeDocxEditor({
540
547
  }
541
548
  useEffect(() => {
542
549
  if (!saveRef) return;
543
- saveRef.current = saveVersion;
550
+ saveRef.current = () => saveVersion();
544
551
  return () => {
545
552
  saveRef.current = null;
546
553
  };
547
554
  });
555
+ const latestSaveVersion = useRef(saveVersion);
556
+ latestSaveVersion.current = saveVersion;
557
+ useEffect(() => {
558
+ if (!editRevision || compact || snapshot || offline || stream) return;
559
+ const timer = setTimeout(() => {
560
+ void latestSaveVersion.current(true);
561
+ }, 2500);
562
+ return () => clearTimeout(timer);
563
+ }, [editRevision, documentId, compact, snapshot, offline, stream]);
564
+ useEffect(() => {
565
+ if (compact || snapshot) return;
566
+ return adapter.registerTurnFlush?.(documentId, async () => {
567
+ if (!ready?.canEdit) return;
568
+ if (!await saveVersion())
569
+ throw new Error("The Word document could not be saved before this turn.");
570
+ });
571
+ });
548
572
  function editorReady(editor) {
549
573
  ref.current = editor;
550
574
  if (streamRef.current) {
@@ -609,6 +633,7 @@ function NativeDocxEditor({
609
633
  function changed() {
610
634
  if (snapshot) return;
611
635
  revision.current += 1;
636
+ setEditRevision(revision.current);
612
637
  dirtyRef.current = true;
613
638
  setDirty(true);
614
639
  setStatus(
@@ -788,7 +813,7 @@ function NativeDocxEditor({
788
813
  /* @__PURE__ */ jsxs("div", { className: "native-docx-actions", children: [
789
814
  /* @__PURE__ */ jsxs("span", { className: "native-docx-status", role: "status", children: [
790
815
  offline ? /* @__PURE__ */ jsx(WifiOff, { size: 14 }) : !dirty && ready ? /* @__PURE__ */ jsx(Check, { size: 14 }) : null,
791
- status
816
+ checkpoint?.autosave && checkpoint.revision === editRevision ? `v${checkpoint.version} \xB7 Autosaved` : status
792
817
  ] }),
793
818
  /* @__PURE__ */ jsx(DocxParticipants, { session: ready?.room?.session }),
794
819
  !compact && /* @__PURE__ */ jsxs(
@@ -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 { DocxCommandMenu } from './DocxCommandMenu'\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, version?: number) => 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 /** Save the current live room before leaving the editor; false means the caller must stay. */\n saveRef?: React.MutableRefObject<(() => Promise<boolean | number>) | 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({\n session,\n flushRef,\n}: {\n session?: DocxCollaborationSession\n flushRef: React.MutableRefObject<(() => void) | null>\n}) {\n const editor = useDocxEditor()\n useEffect(() => {\n if (!editor) return\n const flush = () => editor.surface?.flushPendingInput()\n flushRef.current = flush\n const unbind = session?.bindEditorInput(flush)\n return () => {\n if (flushRef.current === flush) flushRef.current = null\n unbind?.()\n }\n }, [editor, session, flushRef])\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 saveRef,\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 savingRef = useRef(false)\n const flushInputRef = useRef<(() => void) | null>(null)\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 || savingRef.current || stream) return false\n if (snapshot || !ready.canEdit) return true\n if (offline) return false\n savingRef.current = true\n setSaving(true)\n try {\n if (!flushInputRef.current) throw new Error('The editor is not ready to save yet.')\n flushInputRef.current()\n runBeforeSave(ref.current)\n const atRevision = revision.current\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 const savedVersion =\n 'version' in result && typeof result.version === 'number' ? result.version : undefined\n if (!isDraft && !savedVersion) throw new Error('Could not confirm the saved version.')\n await adapter.onVersionSaved?.(result.document_ext_id, savedVersion)\n onSaved?.(result.document_ext_id)\n if (revision.current !== atRevision) {\n adapter.notify?.('The document changed while saving. Please try again.', 'error')\n return false\n }\n adapter.notify?.(isDraft ? 'Word note saved' : 'DOCX version saved', 'success')\n return savedVersion ?? true\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 return false\n } finally {\n savingRef.current = false\n setSaving(false)\n }\n }\n useEffect(() => {\n if (!saveRef) return\n saveRef.current = saveVersion\n return () => {\n saveRef.current = null\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 <DocxCommandMenu\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\n session={ready.room?.session}\n flushRef={flushInputRef}\n />\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": ";AAkNM,SAuIM,UA3FJ,KA5CF;AAlNN,SAAS,2BAA2B;AACpC,SAAS,uBAAuB;AAChC;AAAA,EACE;AAAA,EACA;AAAA,OAKK;AACP,YAAY,OAAO;AAEnB,OAAO,SAAS,WAAW,iBAAiB,QAAQ,gBAAgB;AACpE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,qBAAqB,uCAAuC;AACrE,SAAS,2BAA2B;AAEpC;AAAA,EACE;AAAA,OAEK;AACP,SAAS,kBAAkB,oBAAoB;AAC/C,SAAS,WAAW,qBAAqB;AAGzC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB,uBAAuB;AACtD,SAAS,kBAAkB;AAC3B,SAAS,uBAAuB;AAChC,SAAS,YAAY,sBAAsB;AAC3C,SAAS,oBAAoB;AAC7B,SAAS,aAAa,qBAAqB;AAE3C,SAAS,+BAA2D;AACpE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB,YAAY,yBAAyB;AAChE;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAS,oBAAoB;AAC7B,SAAS,uBAAuB;AAChC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,kBAAkB;AAC3B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,0BAA0B;AACnC,SAAS,yBAAyB;AAElC,SAAS,mBAAmB;AAgG5B,MAAM,SAAS,oBAAI,IAAyB;AAC5C,MAAM,aAAa,CAAC,SAAsC,EAAE,oBAAoB,KAAK,IAAI;AACzF,MAAM,cAAc,CAAC,SAAsC;AACzD,MAAI,SAAS;AACb,aAAW,QAAQ,WAAW,IAAI,EAAG,WAAU,OAAO,aAAa,IAAI;AACvE,SAAO,KAAK,MAAM;AACpB;AACA,SAAS,QAAQ,MAAmC,QAAgB,SAAiB;AACnF,QAAM,SAAS,CAAC,UAAkB,WAAW,KAAK,KAAK,KAAK,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACrF,QAAM,SAAS,EAAE,kBAAkB,OAAO,MAAM,CAAC,GAC/C,QAAQ,EAAE,kBAAkB,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAC5D,aAAW,CAAC,QAAQ,KAAK,KAAK,MAAO,MAAK,OAAO,IAAI,MAAM,KAAK,KAAK,MAAO,QAAO;AACnF,QAAM,UAAU,EAAE,aAAa,WAAW,IAAI,CAAC,EAAE,GAAG;AACpD,QAAM,QAAQ,EAAE,aAAa,OAAO,OAAO,CAAC,EAAE,GAAG;AACjD,aAAW,CAAC,QAAQ,MAAM,KAAK;AAC7B,eAAW,SAAS,QAAQ;AAC1B,UACE,EAAE,MAAM,IAAI,MAAM,KAAK,CAAC,GAAG;AAAA,QACzB,CAAC,MAAM,EAAE,SAAS,MAAM,SAAS,EAAE,QAAQ,EAAE,OAAO,MAAM,QAAQ,MAAM;AAAA,MAC1E;AAEA,eAAO;AAAA,IACX;AACF,SAAO;AACT;AACA,MAAM,uBAAuB,MAAM,UAA4D;AAAA,EAC7F,QAA2B,CAAC;AAAA,EAC5B,OAAO,yBAAyB,OAAc;AAC5C,WAAO,EAAE,MAAM;AAAA,EACjB;AAAA,EACA,SAAS;AACP,WAAO,KAAK,MAAM,QAChB,qBAAC,SAAI,MAAK,SAAQ,WAAU,qBAAoB;AAAA;AAAA,MACR,KAAK,MAAM,MAAM;AAAA,OACzD,IAEA,KAAK,MAAM;AAAA,EAEf;AACF;AAMA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AACF,GAGG;AACD,QAAM,SAAS,cAAc;AAC7B,YAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AACb,UAAM,QAAQ,MAAM,OAAO,SAAS,kBAAkB;AACtD,aAAS,UAAU;AACnB,UAAM,SAAS,SAAS,gBAAgB,KAAK;AAC7C,WAAO,MAAM;AACX,UAAI,SAAS,YAAY,MAAO,UAAS,UAAU;AACnD,eAAS;AAAA,IACX;AAAA,EACF,GAAG,CAAC,QAAQ,SAAS,QAAQ,CAAC;AAC9B,SAAO;AACT;AAEO,SAAS,iBAAiB,EAAE,QAAQ,GAA2C;AACpF,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAuD,CAAC,CAAC;AACrF,YAAU,MAAM;AACd,QAAI,CAAC,QAAS;AACd,cAAU,QAAQ,aAAa,CAAC;AAChC,WAAO,QAAQ,sBAAsB,SAAS;AAAA,EAChD,GAAG,CAAC,OAAO,CAAC;AACZ,SACE,oBAAC,SAAI,WAAU,wBAAuB,cAAW,gCAC9C,iBAAO,IAAI,CAAC,MACX,oBAAC,UAAK,WAAU,sBAAqC,OAAO,EAAE,MAC3D,YAAE,KACA,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EACf,MAAM,GAAG,CAAC,EACV,KAAK,EAAE,KAL8B,EAAE,OAM5C,CACD,GACH;AAEJ;AAGA,SAAS,qBAAqB;AAC5B,QAAM,QAAQ,gBAAgB;AAC9B,MAAI,CAAC,MAAO,QAAO;AACnB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MACV,cAAY,MAAM,OAAO;AAAA,MACzB,OAAO,GAAG,MAAM,OAAO,MAAM;AAAA,MAC7B,eAAY;AAAA,MACZ,aAAa,CAAC,UAAU,MAAM,eAAe;AAAA,MAC7C,SAAS,CAAC,UAAU,MAAM,WAAW,MAAM,aAAa;AAAA,MAExD,8BAAC,SAAM,MAAM,IAAI;AAAA;AAAA,EACnB;AAEJ;AAEA,MAAM,kBAAkB;AAAA,EACtB,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,OAAO,EAAE,OAAO,iBAAiB,OAAO,0CAA0C;AACpF;AAGA,SAAS,mBAAmB,EAAE,MAAM,GAA6C;AAC/E,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,EAAE,OAAO,MAAM,IAAI,gBAAgB,KAAK;AAC9C,SACE,oBAAC,UAAK,cAAY,OAAO,OACtB,iBACH;AAEJ;AAEO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,CAAC,UAAU,MAAM,IAAI,SAAS,MAAM;AAC1C,QAAM,aAAa,kBAAkB,QAAQ;AAC7C,yBAAuB;AACvB,QAAM,MAAM,WAAW;AACvB,QAAM,IAAI,mBAAmB;AAC7B,SACE,qBAAC,SAAI,WAAU,sBACb;AAAA,yBAAC,YAAO,cAAW,cAAa,OAAO,KAAK,UAAU,CAAC,UAAU,OAAO,MAAM,OAAO,KAAK,GACxF;AAAA,0BAAC,YAAO,kBAAI;AAAA,MACZ,oBAAC,YAAO,oBAAM;AAAA,MACd,oBAAC,YAAO,oBAAM;AAAA,MACd,oBAAC,YAAQ,sBAAW;AAAA,MACpB,oBAAC,YAAO,wBAAU;AAAA,MAClB,oBAAC,YAAO,oBAAM;AAAA,MACb,WAAW,KAAK,IAAI,CAAC,SACpB,oBAAC,YAAmB,kBAAP,IAAY,CAC1B;AAAA,OACH;AAAA,IACA,qBAAC,WAAW,SAAX,EAAmB,GAAM,QAAQ,OAAO,QACvC;AAAA,0BAAC,WAAW,QAAQ,MAAnB,EAAwB;AAAA,MACzB,oBAAC,WAAW,QAAQ,MAAnB,EAAwB;AAAA,MACzB,oBAAC,WAAW,QAAQ,MAAnB,EAAwB;AAAA,MAGzB,qBAAC,kBAAe,KACb;AAAA,gBAAQ,UACP,iCACE;AAAA,8BAAC,cAAW,IAAG,cAAa,OAAM,UAAS,UAAU,IACnD,8BAAC,gBAAa,GAChB;AAAA,UACA,oBAAC,cAAW,IAAG,aAAY,OAAM,QAAO,UAAU,KAChD,8BAAC,WAAW,QAAQ,MAAnB,EAAwB,GAC3B;AAAA,UACA,oBAAC,cAAW,IAAG,eAAc,OAAM,UAAS,UAAU,IACpD,8BAAC,WAAW,QAAQ,QAAnB,EAA0B,GAC7B;AAAA,UACA,oBAAC,cAAW,IAAG,kBAAiB,OAAM,aAAY,UAAU,IAC1D,8BAAC,WAAW,QAAQ,WAAnB,EAA6B,GAChC;AAAA,UACA,oBAAC,cAAW,IAAG,aAAY,OAAM,QAAO,UAAU,IAChD,+BAAC,cAAW,OAAM,QAAO,MAAM,oBAAC,QAAK,MAAM,IAAI,GAC7C;AAAA,gCAAC,WAAW,QAAQ,YAAnB,EAA8B;AAAA,YAC/B,oBAAC,WAAW,QAAQ,UAAnB,EAA4B;AAAA,YAC7B,oBAAC,WAAW,QAAQ,WAAnB,EAA6B;AAAA,YAC9B,oBAAC,WAAW,QAAQ,WAAnB,EAA6B;AAAA,aAChC,GACF;AAAA,UACA,oBAAC,cAAW,IAAG,wBAAuB,OAAM,mBAAkB,UAAU,IACtE,+BAAC,cAAW,OAAM,mBAAkB,MAAM,oBAAC,WAAQ,MAAM,IAAI,GAC3D;AAAA,gCAAC,WAAW,QAAQ,WAAnB,EAA6B;AAAA,YAC9B,oBAAC,WAAW,QAAQ,YAAnB,EAA8B;AAAA,YAC/B,oBAAC,WAAW,QAAQ,cAAnB,EAAgC;AAAA,YACjC,oBAAC,WAAW,QAAQ,aAAnB,EAA+B;AAAA,YAChC,oBAAC,WAAW,QAAQ,QAAnB,EAA0B;AAAA,YAC3B,oBAAC,WAAW,QAAQ,SAAnB,EAA2B;AAAA,YAC5B,oBAAC,WAAW,QAAQ,QAAnB,EAA0B;AAAA,YAC3B,oBAAC,WAAW,QAAQ,iBAAnB,EAAmC;AAAA,aACtC,GACF;AAAA,WACF;AAAA,QAED,QAAQ,YACP,iCACE;AAAA,8BAAC,cAAW,IAAG,gBAAe,OAAM,SAClC,8BAAC,WAAW,QAAQ,aAAnB,EAA+B,GAClC;AAAA,UACA,oBAAC,cAAW,IAAG,kBAAiB,OAAM,WACpC,8BAAC,WAAW,QAAQ,aAAnB,EAA+B,GAClC;AAAA,UACC,mBACC,oBAAC,cAAW,IAAG,yBAAwB,OAAM,kBAC3C,8BAAC,uBAAoB,YAAY,iBAAiB,GACpD;AAAA,UAEF,oBAAC,cAAW,IAAG,qBAAoB,OAAM,cACvC,8BAAC,WAAW,QAAQ,QAAnB,EAA0B,QAAO,oBAAmB,GACvD;AAAA,UACA,oBAAC,cAAW,IAAG,eAAc,OAAM,QACjC,8BAAC,WAAW,QAAQ,MAAnB,EAAwB,GAC3B;AAAA,UACA,oBAAC,cAAW,IAAG,uBAAsB,OAAM,gBACzC,8BAAC,sBAAmB,GACtB;AAAA,UACA,oBAAC,cAAW,IAAG,sBAAqB,OAAM,eACxC,8BAAC,cAAW,GACd;AAAA,UACA,oBAAC,cAAW,IAAG,0BAAyB,OAAM,mBAC5C,8BAAC,sBAAmB,GACtB;AAAA,UACA,oBAAC,cAAW,IAAG,uBAAsB,OAAM,gBACzC,8BAAC,mBAAgB,GACnB;AAAA,UACA,oBAAC,cAAW,IAAG,0BAAyB,OAAM,mBAC5C,8BAAC,wBAAqB,GACxB;AAAA,WACF;AAAA,QAEF,oBAAC,oBAAiB,KAAU;AAAA,QAC3B,QAAQ,YACP,oBAAC,cAAW,IAAG,yBAAwB,OAAM,kBAC3C,8BAAC,sBAAmB,GACtB;AAAA,QAED,QAAQ,gBACP,iCACE;AAAA,8BAAC,eAAY;AAAA,UACb,oBAAC,cAAW,IAAG,8BAA6B,OAAM,mBAChD,8BAAC,wBAAqB,GACxB;AAAA,UACA,oBAAC,cAAW,IAAG,sCAAqC,OAAM,2BACxD,8BAAC,+BAA4B,GAC/B;AAAA,WACF;AAAA,QAED,QAAQ,YACP,iCACE;AAAA,8BAAC,cAAW,IAAG,uBAAsB,OAAM,gBAAe,UAAU,IAClE,8BAAC,WAAW,QAAQ,aAAnB,EAA+B,GAClC;AAAA,UACA,oBAAC,cAAW,IAAG,mBAAkB,OAAM,YACrC,8BAAC,WAAW,QAAQ,UAAnB,EAA4B,GAC/B;AAAA,UACA,oBAAC,cAAW,IAAG,kBAAiB,OAAM,kBACpC,8BAAC,cAAW,OAAM,kBAAiB,MAAM,oBAAC,cAAW,MAAM,IAAI,GAC7D,8BAAC,WAAW,QAAQ,WAAnB,EAA6B,GAChC,GACF;AAAA,WACF;AAAA,SAEJ;AAAA,MAGA,oBAAC,WAAW,QAAQ,eAAnB,EAAiC,QAAM,MAAC;AAAA,OAC3C;AAAA,IACC,SACC,oBAAC,UAAK,WAAU,4BAA2B,eAAY,qBACpD,iBACH;AAAA,KAEJ;AAEJ;AAGA,SAAS,iBAAiB;AACxB,QAAM,IAAI,mBAAmB;AAC7B,SACE,qBAAC,WAAW,SAAX,EAAmB,GAAM,QAAQ,OAChC;AAAA,wBAAC,WAAW,QAAQ,MAAnB,EAAwB;AAAA,IACzB,oBAAC,WAAW,QAAQ,MAAnB,EAAwB;AAAA,IACzB,oBAAC,WAAW,QAAQ,MAAnB,EAAwB;AAAA,IACzB,oBAAC,WAAW,QAAQ,QAAnB,EAA0B;AAAA,IAC3B,oBAAC,WAAW,QAAQ,WAAnB,EAA6B;AAAA,IAC9B,oBAAC,WAAW,QAAQ,YAAnB,EAA8B;AAAA,IAC/B,oBAAC,WAAW,QAAQ,cAAnB,EAAgC;AAAA,IACjC,oBAAC,WAAW,QAAQ,MAAnB,EAAwB;AAAA,KAC3B;AAEJ;AAEA,MAAM,gBAAgB,EAAE,MAAM,QAAQ;AAEtC,MAAM,cAAc,CAAC,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG;AAExC,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAgB,GACxC,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE,GAC/B,CAAC,OAAO,QAAQ,IAAI,SAAS,CAAC;AAChC,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,kBAAa,GAChD,CAAC,OAAO,QAAQ,IAAI,SAAS,KAAK,GAClC,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK,GACpC,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AACxC,QAAM,WAAW,OAAO,CAAC;AACzB,QAAM,YAAY,OAAO,KAAK;AAC9B,QAAM,gBAAgB,OAA4B,IAAI;AACtD,QAAM,WAAW,OAAuB,IAAI,GAC1C,aAAa,OAAiC,MAAS,GACvD,QAAQ,OAAiC,MAAS;AAGpD,QAAM,UAAU,OAAO,IAAI,GACzB,SAAS,OAA2B,MAAS;AAC/C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,IAAI,GAC3C,CAAC,aAAa,cAAc,IAAI,SAAS,GAAG;AAC9C,QAAM,MAAM,OAAsB,IAAI,GACpC,WAAW,OAAO,KAAK,GACvB,aAAa,OAAkD,MAAS;AAC1E,QAAM,UAAU,iBAAiB;AACjC,QAAM,YAAY,OAAO,MAAM;AAC/B,YAAU,UAAU;AACpB,QAAM,eAAe,OAA+B,IAAI;AACxD,QAAM,iBAAiB,OAAO,KAAK;AACnC,QAAM,cAAc,OAAkD,MAAS;AAC/E,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,CAAC;AACpD,WAAS,eAAe;AACtB,UAAM,UAAU,UAAU;AAC1B,QAAI,CAAC,WAAW,CAAC,aAAa,WAAW,eAAe,QAAS;AACjE,QAAI;AACF,mBAAa,QAAQ,OAAO,QAAQ,SAAS,CAAC,QAAQ,IAAI;AAC1D;AAAA,QACE,QAAQ,OACJ,sCACA,QAAQ,QACN,2CACA;AAAA,MACR;AACA,UAAI,CAAC,QAAQ,QAAQ,CAAC,QAAQ,MAAO,gBAAe,UAAU;AAAA,IAChE,SAAS,SAAS;AAChB;AAAA,QACE,mBAAmB,QAAQ,QAAQ,UAAU;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AACA,YAAU,MAAM;AACd,QAAI,CAAC,UAAU,QAAS;AACxB,QAAI,CAAC,UAAU,QAAQ,MAAM;AAC3B,mBAAa,YAAY,OAAO;AAChC,kBAAY,UAAU;AACtB,mBAAa;AAAA,IACf,WAAW,CAAC,YAAY,SAAS;AAC/B,kBAAY,UAAU,WAAW,MAAM;AACrC,oBAAY,UAAU;AACtB,qBAAa;AAAA,MACf,GAAG,GAAG;AAAA,IACR;AAAA,EACF,GAAG,CAAC,QAAQ,SAAS,QAAQ,MAAM,QAAQ,OAAO,aAAa,CAAC;AAChE,YAAU,MAAM,MAAM,aAAa,YAAY,OAAO,GAAG,CAAC,CAAC;AAC3D,YAAU,MAAM;AACd,QAAI,YAAY;AAChB,QAAI;AACJ,UAAM,WAA2B,CAAC;AAClC,aAAS,MAAS;AAClB,aAAS,EAAE;AACX,cAAU,kBAAa;AACvB,aAAS,KAAK;AACd,aAAS,UAAU;AAEnB,UAAM,WAAW,CAAC,WAAwC;AACxD,YAAM,SAAS,oBAAoB,QAAQ,MAAM,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;AACvE,UAAI,CAAC,OAAQ,QAAO;AACpB,eAAS,KAAK,MAAM;AACpB,eAAS,EAAE;AACX,gBAAU,gBAAW;AACrB,aAAO;AAAA,IACT;AACA,mBAAe,QAAQ;AACrB,YAAM,QAAQ,MAAM,QAAQ,UAAU;AACtC,UAAI,WAAW,UAAU;AACvB,cAAM,OAAO,UACR,CAAC,UAAU,WAAW,OAAO,IAAI,UAAU,MAC3C,iBAAiB,MAAM,QAAQ,gBAC5B,OAAO,YAAY;AAEjB,gBAAM,WAAW,MAAM,qBAAqB,QAAQ,aAAa;AACjE,iBAAO,gBAAgB,SAAS,OAAO;AAAA,YACrC,kBAAkB,iBAAiB,QAAQ;AAAA,UAC7C,CAAC;AAAA,QACH,GAAG,IACH,OACE,MAAM,QAAQ,QAAQ,YAAY;AAAA,UAChC,QAAQ;AAAA,UACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,UAC9C,MAAM,KAAK,UAAU,EAAE,SAAS,aAAa,CAAC;AAAA,QAChD,CAAC,GACD,YAAY,KAClB,OAAO,MAAM,QAAQ,QAAQ,YAAY,UAAU,CAAC,GAAG,YAAY;AACvE,YAAI,CAAC,WAAW;AACd,mBAAS;AAAA,YACP,UAAU,IAAI,WAAW,IAAI;AAAA,YAC7B;AAAA,YACA,SAAS,CAAC,aAAa,CAAC;AAAA,YACxB,SAAS,CAAC;AAAA,YACV,QAAQ,QAAQ,UAAU;AAAA,YAC1B,UAAU;AAAA,UACZ,CAAC;AACD,oBAAU,WAAW,iCAA8B,cAAc;AAAA,QACnE;AACA;AAAA,MACF;AACA,YAAM,UAAU,MAAM,QAAQ,KAAK,UAAU;AAC7C,YAAM,KAAK,IAAI,IAAI,QAAQ,gBAAgB,QAAQ,WAAW,SAAS,MAAM;AAC7E,SAAG,WAAW,GAAG,aAAa,WAAW,SAAS;AAClD,UAAI,UAAU;AACd,aAAO,MAAM,8BAA8B;AAAA,QACzC,KAAK,GAAG,SAAS;AAAA,QACjB,QAAQ,QAAQ;AAAA,QAChB,UAAU,QAAQ;AAAA,QAClB,gBAAgB;AAAA,QAChB,OAAO,YAAY;AACjB,gBAAM,OAAO,UAAU,UAAU,MAAM,QAAQ,KAAK,UAAU;AAC9D,oBAAU;AACV,cAAI,CAAC;AACH,qBAAS,CAAC,aAAc,WAAW,EAAE,GAAG,UAAU,SAAS,KAAK,SAAS,IAAI,QAAS;AACxF,iBAAO,KAAK,UAAU;AAAA,YACpB,YAAY,KAAK;AAAA,YACjB,UAAU;AAAA,UACZ,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AACD,UAAI,WAAW;AACb,aAAK,QAAQ;AACb;AAAA,MACF;AACA,YAAM,UAAU;AAChB,eAAS;AAAA,QACP,QAAQ,QAAQ,gBAAgB,CAAC,GAAG,SAAS,WAAW;AACtD,gBAAM,eAAe,MAAM;AAC3B,qBAAW,YAAY;AACvB,cAAI,MAAM,SAAS;AACjB,gBAAI,SAAS,MAAM,EAAG;AACtB;AAAA,cACE,UACE;AAAA,YACJ;AACA,sBAAU,mBAAmB;AAAA,UAC/B,WAAW,aAAc,WAAU,qCAAkC;AAAA,mBAC5D,MAAM,SAAS;AACtB,qBAAS,EAAE;AACX,sBAAU,SAAS,UAAU,yBAAoB,WAAW;AAAA,UAC9D;AAAA,QACF,CAAC;AAAA,MACH;AACA,YAAM,YAAY,CAAC,EAAE,QAAQ,MAA2B;AACtD,YAAI;AACF,gBAAM,UAAU,KAAK,MAAM,OAAO;AAOlC,cAAI,QAAQ,SAAS,aAAa;AAChC,gBACE,CAAC,aACD,QAAQ,UACR,QAAQ,WACR,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,OAAO,GAChD;AACA,uBAAS,UAAU;AACnB,uBAAS,KAAK;AACd,wBAAU,mBAAmB;AAAA,YAC/B;AAAA,UACF;AACA,cAAI,QAAQ,SAAS,UAAW,WAAU,sBAAiB;AAC3D,cAAI,QAAQ,SAAS,aAAc,WAAU,QAAQ,WAAW,iBAAiB;AAAA,QACnF,QAAQ;AAAA,QAER;AAAA,MACF;AACA,cAAQ,SAAS,GAAG,aAAa,SAAS;AAC1C,eAAS,KAAK,MAAM,QAAQ,SAAS,IAAI,aAAa,SAAS,CAAC;AAChE,UAAI,QAAQ;AACV,iBAAS;AAAA,UACP,QAAQ,sBAAsB,MAAM;AAClC,iBAAK,QAAQ,SACV,UAAU,EACV,MAAM,MAAM,UAAU,2CAA2C,CAAC;AAAA,UACvE,CAAC;AAAA,QACH;AACF,YAAM,UAAU;AAAA,QACd,MAAM;AACJ,eAAK,QAAQ,SACV,UAAU,EACV,MAAM,MAAM,UAAU,2CAA2C,CAAC;AAAA,QACvE;AAAA,QACA,IAAI,KAAK;AAAA,MACX;AACA,eAAS,KAAK,MAAM,cAAc,OAAO,CAAC;AAC1C,eAAS;AAAA,QACP,UAAU,QAAQ;AAAA,QAClB;AAAA,QACA,SAAS,CAAC,aAAa,GAAG,oBAAoB,EAAE,SAAS,QAAQ,QAAQ,CAAC,CAAC;AAAA,QAC3E,MAAM;AAAA,QACN,SAAS,QAAQ;AAAA,QACjB,QAAQ,QAAQ,SAAS;AAAA,QACzB,UAAU,QAAQ;AAAA,MACpB,CAAC;AACD,gBAAU,QAAQ,WAAW,sBAAsB,qBAAkB;AAAA,IACvE;AACA,SAAK,MAAM,EAAE,MAAM,CAAC,MAAM;AACxB,YAAM,UAAU,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AACzD,UAAI,CAAC,aAAa,CAAC,SAAS,OAAO,EAAG,UAAS,OAAO;AAAA,IACxD,CAAC;AACD,WAAO,MAAM;AACX,kBAAY;AACZ,eAAS,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC3B,mBAAa,WAAW,OAAO;AAC/B,iBAAW,UAAU;AACrB,YAAM,QAAQ;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,YAAY,SAAS,UAAU,KAAK,CAAC;AACzC,YAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,UAAM,OAAO,OAAO;AACpB,aAAS,UAAU,MAAO,OAAO,YAAY,IAAI,IAAI;AACrD,WAAO,MAAM;AACX,eAAS,UAAU;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,UAAU,OAAO,IAAI,CAAC;AAC1B,YAAU,MAAM;AACd,YAAQ,gBAAgB,KAAK;AAC7B,UAAM,eAAe,CAAC,MAAyB;AAC7C,UAAI,SAAS,QAAS,GAAE,eAAe;AAAA,IACzC;AACA,WAAO,iBAAiB,gBAAgB,YAAY;AACpD,WAAO,MAAM;AACX,aAAO,oBAAoB,gBAAgB,YAAY;AACvD,cAAQ,gBAAgB,KAAK;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AACV,iBAAe,iBAAiB;AAC9B,kBAAc,IAAI,OAAO;AACzB,UAAM,OAAO,MAAM,IAAI,SAAS,KAAK;AACrC,QAAI,CAAC,KAAM;AACX,UAAM,MAAM,IAAI;AAAA,MACd,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,GAAG;AAAA,QACpC,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AACA,UAAM,IAAI,SAAS,cAAc,GAAG;AACpC,MAAE,OAAO;AACT,MAAE,WAAW,MAAM,QAAQ,YAAY,EAAE,IAAI;AAC7C,MAAE,MAAM;AACR,eAAW,MAAM,IAAI,gBAAgB,GAAG,GAAG,GAAI;AAAA,EACjD;AACA,kBAAgB,MAAM;AACpB,UAAM,SAAS,IAAI;AACnB,WAAO,MAAM;AACX,UAAI,WAAW,UAAU,SAAS;AAChC,aAAK,OACF,KAAK,EACL,KAAK,CAAC,UAAU;AACf,cAAI,MAAO,QAAO,IAAI,YAAY,KAAK;AAAA,QACzC,CAAC,EACA,MAAM,MAAM;AAAA,QAAC,CAAC;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,YAAY,SAAS,KAAK,CAAC;AAC/B,iBAAe,cAAc;AAC3B,QAAI,CAAC,SAAS,UAAU,WAAW,OAAQ,QAAO;AAClD,QAAI,YAAY,CAAC,MAAM,QAAS,QAAO;AACvC,QAAI,QAAS,QAAO;AACpB,cAAU,UAAU;AACpB,cAAU,IAAI;AACd,QAAI;AACF,UAAI,CAAC,cAAc,QAAS,OAAM,IAAI,MAAM,sCAAsC;AAClF,oBAAc,QAAQ;AACtB,oBAAc,IAAI,OAAO;AACzB,YAAM,aAAa,SAAS;AAC5B,YAAM,SAAS,UACX,OAAO,YAAY;AACjB,cAAM,QAAQ,MAAM,IAAI,SAAS,KAAK;AACtC,YAAI,CAAC,MAAO,OAAM,IAAI,MAAM,0BAA0B;AACtD,gBACE,MAAM,QAAQ,QAAQ,UAAU,IAAI,gBAAgB,EAAE,MAAM,CAAC,CAAC,IAAI;AAAA,UAChE,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,gBACE;AAAA,UACJ;AAAA,UACA,MAAM;AAAA,QACR,CAAC,GACD,KAAK;AAAA,MACT,GAAG,IACH,MAAM,QAAQ,KAAK,YAAY,MAAM,OAAO,YAAY,MAAM,IAAI,IAAI,MAAS;AACnF,UAAI,SAAS,YAAY,YAAY;AACnC,iBAAS,UAAU;AACnB,iBAAS,KAAK;AACd,eAAO,OAAO,UAAU;AAAA,MAC1B;AACA,YAAM,eACJ,aAAa,UAAU,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU;AAC/E,UAAI,CAAC,WAAW,CAAC,aAAc,OAAM,IAAI,MAAM,sCAAsC;AACrF,YAAM,QAAQ,iBAAiB,OAAO,iBAAiB,YAAY;AACnE,gBAAU,OAAO,eAAe;AAChC,UAAI,SAAS,YAAY,YAAY;AACnC,gBAAQ,SAAS,wDAAwD,OAAO;AAChF,eAAO;AAAA,MACT;AACA,cAAQ,SAAS,UAAU,oBAAoB,sBAAsB,SAAS;AAC9E,aAAO,gBAAgB;AAAA,IACzB,SAAS,GAAG;AACV,cAAQ,SAAS,aAAa,QAAQ,EAAE,UAAU,iCAAiC,OAAO;AAC1F,gBAAU,yCAAsC;AAChD,aAAO;AAAA,IACT,UAAE;AACA,gBAAU,UAAU;AACpB,gBAAU,KAAK;AAAA,IACjB;AAAA,EACF;AACA,YAAU,MAAM;AACd,QAAI,CAAC,QAAS;AACd,YAAQ,UAAU;AAClB,WAAO,MAAM;AACX,cAAQ,UAAU;AAAA,IACpB;AAAA,EACF,CAAC;AACD,WAAS,YAAY,QAAgB;AACnC,QAAI,UAAU;AACd,QAAI,UAAU,SAAS;AACrB,mBAAa,UAAU,IAAI,gBAAgB,MAAM;AACjD,mBAAa;AAAA,IACf;AACA,eAAW,UAAU;AACrB,WAAO,UAAU;AACjB,UAAM,WAAW,SAAS,SAAS,cAA2B,uBAAuB;AACrF,QAAI,CAAC,SAAU;AACf,QAAI,UAA0B;AAC9B,UAAM,MAAM,MAAM;AAEhB,YAAM,OAAO,SAAS,cAAc,yBAAyB;AAC7D,UAAI,QAAQ,SAAS,QAAS,QAAO,QAAS,UAAU,IAAK;AAC7D,YAAM,UAAU,OAAO,QAAQ;AAE/B,UACE,QAAQ,WACR,OAAO,YAAY,UACnB,KAAK,IAAI,UAAU,OAAO,OAAO,IAAI;AAErC,gBAAQ,UAAU;AACpB,kBAAY,QAAQ,OAAO;AAC3B,qBAAe,KAAK,MAAM,UAAU,GAAG,CAAC;AACxC,UAAI,CAAC,QAAQ,QAAS;AACtB,YAAM,YAAY,OAAO,gBAAgB,EAAE,CAAC,GAAG,IAAI;AACnD,UAAI,CAAC,UAAW;AAChB,YAAM,QAAQ,iBAAiB,QAAQ;AACvC,YAAM,YACJ,SAAS,cAAc,WAAW,MAAM,WAAW,IAAI,WAAW,MAAM,YAAY;AAGtF,YAAM,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,UAAU,IAAI,GAAG,YAAY,SAAS,CAAC;AAC3E,UAAI,KAAK,IAAI,UAAU,IAAI,IAAI,KAAO,QAAO,QAAQ,IAAI;AACzD,aAAO,UAAU,OAAO,QAAQ;AAChC,qBAAe,KAAK,MAAM,OAAO,UAAU,GAAG,CAAC;AAAA,IACjD;AACA,UAAM,UAAU;AAChB,UAAM,SAAS,IAAI,eAAe,GAAG;AACrC,UAAM,SAAS,IAAI,iBAAiB,GAAG;AACvC,WAAO,QAAQ,QAAQ;AACvB,WAAO,QAAQ,UAAU;AAAA,MACvB,YAAY;AAAA,MACZ,iBAAiB,CAAC,SAAS,oBAAoB,oBAAoB;AAAA,IACrE,CAAC;AAED,UAAM,QAAQ,SAAS,cAAc,qBAAqB;AAC1D,QAAI,MAAO,QAAO,QAAQ,OAAO,EAAE,WAAW,KAAK,CAAC;AACpD,QAAI,CAAC,QAAQ,QAAS,QAAO,QAAQ,cAAc,GAAG;AACtD,QAAI;AACJ,eAAW,UAAU,MAAM;AACzB,aAAO,WAAW;AAClB,aAAO,WAAW;AAClB,YAAM,UAAU;AAAA,IAClB;AAAA,EACF;AACA,WAAS,SAAS,OAAe;AAC/B,UAAM,SAAS,IAAI;AACnB,QAAI,CAAC,OAAQ;AACb,QAAI,UAAU,OAAO;AACnB,cAAQ,UAAU;AAClB,aAAO,UAAU;AACjB,YAAM,UAAU;AAChB;AAAA,IACF;AACA,YAAQ,UAAU;AAClB,gBAAY,KAAK;AACjB,mBAAe,OAAO,KAAK,CAAC;AAC5B,WAAO,QAAQ,OAAO,KAAK,IAAI,GAAG;AAAA,EACpC;AACA,WAAS,UAAU;AACjB,QAAI,SAAU;AACd,aAAS,WAAW;AACpB,aAAS,UAAU;AACnB,aAAS,IAAI;AACb;AAAA,MACE,UAAU,iBAAiB,UAAU,wCAAqC;AAAA,IAC5E;AACA,QAAI,SAAS;AACX,mBAAa,WAAW,OAAO;AAC/B,iBAAW,UAAU,WAAW,MAAM;AACpC,aAAK,IAAI,SAAS,KAAK,EAAE,KAAK,CAAC,UAAU;AACvC,cAAI,MAAO,QAAO,IAAI,YAAY,KAAK;AAAA,QACzC,CAAC;AAAA,MACH,GAAG,GAAG;AAAA,IACR;AAAA,EACF;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,UAAU,2CAA2C;AAAA,MAChE,eAAY;AAAA,MACZ,aAAW,CAAC,CAAC,QAAQ;AAAA,MACrB,yBACE,SAAU,OAAO,OAAO,eAAe,OAAO,QAAQ,YAAY,cAAe;AAAA,MAGlF;AAAA,mBACC,oBAAC,SAAI,WAAU,sBAAqB,2HAGpC;AAAA,QAED,SACC,qBAAC,SAAI,WAAU,sBAAqB,cAAW,QAAO,MAAK,SACxD;AAAA;AAAA,UAAO;AAAA,UACR;AAAA,YAAC;AAAA;AAAA,cACC,UAAU,CAAC,UAAU;AAAA,cACrB,OAAO,QAAQ,2DAA2D;AAAA,cAC1E,SAAS,MACP,UAAU,SAAS,EAAE,GAAG,iBAAiB,CAAC,MAAM,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC;AAAA,cAGjF;AAAA,oCAAC,aAAU,MAAM,IAAI;AAAA,gBAAE;AAAA;AAAA;AAAA,UAEzB;AAAA,WACF;AAAA,QAED,CAAC,SAAS,CAAC,SACV,oBAAC,SAAI,WAAU,qBAAoB,MAAK,UAAS,yCAEjD;AAAA,QAED,SACC,oBAAC,SAAI,WAAU,gCACb,8BAAC,kBACC;AAAA,UAAC,WAAW;AAAA,UAAX;AAAA,YACC,UAAU,MAAM;AAAA,YAChB,SAAS,MAAM;AAAA,YACf,OAAO,MAAM;AAAA,YACb,MACE,UAAW,WAAW,MAAM,WAAW,CAAC,YAAc,WAAW,MAAM,UACnE,SACA,CAAC,MAAM,WAAW,WAChB,SACA;AAAA,YAER,mBAAkB;AAAA,YAClB,UAAU;AAAA,YACV,QAAQ,MAAM;AAAA,YACd,SAAS;AAAA,YACT,UAAU,CAAC,WAAW;AACpB,kBAAI,OAAO,WAAW,OAAQ,SAAQ;AAAA,YACxC;AAAA,YACA,aAAa,CAAC,MAAM,SAAS,EAAE,OAAO;AAAA,YAEtC,8BAAC,kBAAkB,UAAlB,EAA2B,OAAO,MAAM,QACvC;AAAA,cAAC;AAAA;AAAA,gBACC,MAAM,QAAQ;AAAA,gBACd,UAAU,CAAC,UAAU,CAAC,YAAY,MAAM;AAAA,gBACxC,QAAQ,QAAQ;AAAA,gBAEhB;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAS,CAAC;AAAA,oBACV,MAAM,QAAQ;AAAA,oBACd,YAAY,WAAW,WAAW,SAAY;AAAA,oBAC9C,UAAU,CAAC,UAAU,CAAC,YAAY,MAAM;AAAA,oBACxC,QAAQ,QAAQ;AAAA,oBAEhB;AAAA,sBAAC;AAAA;AAAA,wBACC,UAAU,CAAC,UAAU,CAAC,YAAY,MAAM;AAAA,wBACxC,YAAY,QAAQ;AAAA,wBACpB;AAAA,wBACA,QAAQ,QAAQ;AAAA,wBAEhB;AAAA,0BAAC;AAAA;AAAA,4BACC,SAAS,QAAQ;AAAA,4BACjB,aAAa,QAAQ;AAAA,4BACrB,UAAU,CAAC,UAAU,CAAC,YAAY,MAAM;AAAA,4BACxC,QAAQ,QAAQ;AAAA,4BAEhB;AAAA;AAAA,gCAAC,WAAW;AAAA,gCAAX;AAAA,kCACC,YAAY,EAAE,MAAM,aAAa,OAAO,OAAO;AAAA,kCAC/C,WAAW,EAAE,MAAM,iBAAiB,OAAO,MAAM;AAAA,kCACjD,WAAW,EAAE,MAAM,uBAAuB,OAAO,QAAQ;AAAA,kCACzD,SAAS,EAAE,MAAM,mBAAmB,OAAO,QAAQ;AAAA,kCACnD,YAAU;AAAA;AAAA,8BACZ;AAAA,8BACC,WAAW,CAAC,UAAU,oBAAC,kBAAe;AAAA,8BACtC,CAAC,WAAW,CAAC,UACZ;AAAA,gCAAC;AAAA;AAAA,kCACC,QAAQ,MAAM,KAAK,YAAY;AAAA,kCAC/B,iBACE,QAAQ,mBAAmB;AAAA,oCACzB,QAAQ,QAAQ;AAAA,oCAChB,GAAG,QAAQ;AAAA,kCACb;AAAA,kCAEF;AAAA;AAAA,oCAEE;AAAA,sCAAC;AAAA;AAAA,wCACC,OACE,YAAY,CAAC,MAAM,UACf,cACA,MAAM,OACJ,eACA,UACE,UACA;AAAA;AAAA,oCAEZ;AAAA;AAAA;AAAA,8BAEJ;AAAA,8BAED,CAAC,UAAU,oBAAC,iBAAc,OAAO,UAAU;AAAA,8BAC3C,CAAC,UAAU,oBAAC,gBAAa,OAAO,UAAU;AAAA,8BAC3C;AAAA,gCAAC;AAAA;AAAA,kCACC,WAAU;AAAA,kCACV,KAAK;AAAA,kCACL,oBAAoB,CAAC,UAAU;AAC7B,wCAAI,MAAM,WAAW,KAAK,IAAI,SAAS,sBAAsB;AAC3D,4CAAM,eAAe;AAAA,kCACzB;AAAA,kCAEA;AAAA,yDAAC,WAAW,UAAX,EAAoB,WAAU,wBAC7B;AAAA,0DAAC,WAAW,SAAX,EAAmB;AAAA,sCACpB;AAAA,wCAAC;AAAA;AAAA,0CACC;AAAA,0CACA,UAAU,QAAQ;AAAA,0CAClB,QAAQ,QAAQ;AAAA,0CAChB,gBAAgB,QAAQ;AAAA,0CACxB,cACE,QAAQ,eACJ,CAAC,YAAY,QAAQ,aAAc,YAAY,OAAO,IACtD;AAAA,0CAGN;AAAA;AAAA,8CAAC;AAAA;AAAA,gDACC,SAAS,MAAM,MAAM;AAAA,gDACrB,UAAU;AAAA;AAAA,4CACZ;AAAA,4CACA,oBAAC,cAAc,UAAd,EAAuB,OAAO,MAAM,MAAM,QAAQ,MACjD,8BAAC,oBACE,gBACC,qBAAC,iBAAiB,MAAjB,EACC;AAAA,kEAAC,uBAAoB;AAAA,8CACrB,oBAAC,aAAU;AAAA,+CACb,GAEJ,GACF;AAAA;AAAA;AAAA,sCACF;AAAA,sCACC,CAAC,WAAW,oBAAC,WAAW,oBAAX,EAA8B;AAAA,sCAC3C,CAAC,WAAW,oBAAC,WAAW,aAAX,EAAuB;AAAA,sCACrC,oBAAC,WAAW,UAAX,EAAoB;AAAA,sCACrB,oBAAC,WAAW,WAAX,EAAqB;AAAA,sCACtB,qBAAC,WAAW,aAAX,EACC;AAAA,4DAAC,yBAAsB;AAAA,wCACvB,oBAAC,2BAAwB;AAAA,wCACzB,oBAAC,6BAA0B;AAAA,yCAC7B;AAAA,uCACF;AAAA,oCACC,CAAC,WAAW,oBAAC,WAAW,YAAX,EAAsB;AAAA;AAAA;AAAA,8BACtC;AAAA;AAAA;AAAA,wBACF;AAAA;AAAA,oBACF;AAAA;AAAA,gBACF;AAAA;AAAA,YACF,GACF;AAAA;AAAA,QACF,KAtImB,KAuIrB,GACF;AAAA,QAEF,qBAAC,SAAI,WAAU,uBACb;AAAA,+BAAC,UAAK,WAAU,sBAAqB,MAAK,UACvC;AAAA,sBAAU,oBAAC,WAAQ,MAAM,IAAI,IAAK,CAAC,SAAS,QAAQ,oBAAC,SAAM,MAAM,IAAI,IAAK;AAAA,YAC1E;AAAA,aACH;AAAA,UACA,oBAAC,oBAAiB,SAAS,OAAO,MAAM,SAAS;AAAA,UAChD,CAAC,WACA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,cAAW;AAAA,cACX,eAAY;AAAA,cACZ,UAAU,CAAC;AAAA,cACX,OAAO,WAAW,QAAQ,OAAO,WAAW;AAAA,cAC5C,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA,cAEhD;AAAA,oCAAC,YAAO,OAAM,OAAM,uBAAS;AAAA,gBAC5B,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,aAAa,GAAI,WAAW,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC,CAAC,EAC/D,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,EACpB,IAAI,CAAC,UACJ,qBAAC,YAAmB,OAAO,OAAO,KAAK,GACpC;AAAA;AAAA,kBAAM;AAAA,qBADI,KAEb,CACD;AAAA;AAAA;AAAA,UACL;AAAA,UAED,CAAC,WACA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,MAAM,KAAK,eAAe;AAAA,cACnC,UAAU,CAAC;AAAA,cACX,cAAW;AAAA,cAEX;AAAA,oCAAC,YAAS,MAAM,IAAI;AAAA,gBAAE;AAAA;AAAA;AAAA,UAExB;AAAA,UAED,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,OAAO,WAC1C;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS,MAAM,KAAK,YAAY;AAAA,cAChC,UAAU,CAAC,SAAS,UAAU;AAAA,cAC9B,eAAY;AAAA,cAEZ;AAAA,oCAAC,QAAK,MAAM,IAAI;AAAA,gBACf,SAAS,iBAAY,UAAU,cAAc;AAAA;AAAA;AAAA,UAChD;AAAA,WAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;",
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 { DocxCommandMenu } from './DocxCommandMenu'\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 autosave?: boolean\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 registerTurnFlush?: (documentId: string, flush: () => Promise<void>) => () => void\n onDirtyChange?: (dirty: boolean) => void\n onVersionSaved?: (documentId: string, version?: number) => 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 /** Save the current live room before leaving the editor; false means the caller must stay. */\n saveRef?: React.MutableRefObject<(() => Promise<boolean | number>) | 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({\n session,\n flushRef,\n}: {\n session?: DocxCollaborationSession\n flushRef: React.MutableRefObject<(() => void) | null>\n}) {\n const editor = useDocxEditor()\n useEffect(() => {\n if (!editor) return\n const flush = () => editor.surface?.flushPendingInput()\n flushRef.current = flush\n const unbind = session?.bindEditorInput(flush)\n return () => {\n if (flushRef.current === flush) flushRef.current = null\n unbind?.()\n }\n }, [editor, session, flushRef])\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 saveRef,\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 savingRef = useRef(false)\n const flushInputRef = useRef<(() => void) | null>(null)\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 const [editRevision, setEditRevision] = useState(0)\n const [checkpoint, setCheckpoint] = useState<{\n version?: number\n autosave: boolean\n revision: number\n } | null>(null)\n useEffect(() => {\n setEditRevision(0)\n setCheckpoint(null)\n }, [documentId])\n async function saveVersion(autosave = false) {\n if (!ready || savingRef.current || stream) return false\n if (snapshot || !ready.canEdit) return true\n if (offline) return false\n savingRef.current = true\n setSaving(true)\n try {\n if (!flushInputRef.current) throw new Error('The editor is not ready to save yet.')\n flushInputRef.current()\n runBeforeSave(ref.current)\n const atRevision = revision.current\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, autosave)\n if (revision.current === atRevision) {\n dirtyRef.current = false\n setDirty(false)\n drafts.delete(documentId)\n }\n const savedVersion =\n 'version' in result && typeof result.version === 'number' ? result.version : undefined\n if (!isDraft && !savedVersion) throw new Error('Could not confirm the saved version.')\n await adapter.onVersionSaved?.(result.document_ext_id, savedVersion)\n onSaved?.(result.document_ext_id)\n if (revision.current !== atRevision) {\n adapter.notify?.('The document changed while saving. Please try again.', 'error')\n return false\n }\n setCheckpoint({ version: savedVersion, autosave: autosave && !isDraft, revision: atRevision })\n if (!autosave) adapter.notify?.(isDraft ? 'Word note saved' : 'DOCX version saved', 'success')\n return savedVersion ?? true\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 return false\n } finally {\n savingRef.current = false\n setSaving(false)\n }\n }\n useEffect(() => {\n if (!saveRef) return\n saveRef.current = () => saveVersion()\n return () => {\n saveRef.current = null\n }\n })\n const latestSaveVersion = useRef(saveVersion)\n latestSaveVersion.current = saveVersion\n useEffect(() => {\n if (!editRevision || compact || snapshot || offline || stream) return\n const timer = setTimeout(() => {\n void latestSaveVersion.current(true)\n }, 2500)\n return () => clearTimeout(timer)\n }, [editRevision, documentId, compact, snapshot, offline, stream])\n useEffect(() => {\n if (compact || snapshot) return\n return adapter.registerTurnFlush?.(documentId, async () => {\n if (!ready?.canEdit) return\n if (!(await saveVersion()))\n throw new Error('The Word document could not be saved before this turn.')\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 setEditRevision(revision.current)\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 <DocxCommandMenu\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\n session={ready.room?.session}\n flushRef={flushInputRef}\n />\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 {checkpoint?.autosave && checkpoint.revision === editRevision\n ? `v${checkpoint.version} \u00B7 Autosaved`\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
  }
@@ -2,9 +2,9 @@
2
2
  'use strict';
3
3
 
4
4
  var chunk2BOTSU23_cjs = require('../chunk-2BOTSU23.cjs');
5
- var chunkUA7HOLAZ_cjs = require('../chunk-UA7HOLAZ.cjs');
6
- var chunkPVJ5ODDB_cjs = require('../chunk-PVJ5ODDB.cjs');
7
- var chunkGAMRVB3I_cjs = require('../chunk-GAMRVB3I.cjs');
5
+ var chunk6B4CCDDB_cjs = require('../chunk-6B4CCDDB.cjs');
6
+ var chunkXNB27POJ_cjs = require('../chunk-XNB27POJ.cjs');
7
+ var chunkQ6N5D3R5_cjs = require('../chunk-Q6N5D3R5.cjs');
8
8
  var chunkGA5ZO4YA_cjs = require('../chunk-GA5ZO4YA.cjs');
9
9
  var chunkVG5XNE4H_cjs = require('../chunk-VG5XNE4H.cjs');
10
10
  require('../chunk-DDWLMYRO.cjs');
@@ -27,143 +27,143 @@ Object.defineProperty(exports, "loadDocxFonts", {
27
27
  });
28
28
  Object.defineProperty(exports, "StreamedWordArtifact", {
29
29
  enumerable: true,
30
- get: function () { return chunkUA7HOLAZ_cjs.StreamedWordArtifact; }
30
+ get: function () { return chunk6B4CCDDB_cjs.StreamedWordArtifact; }
31
31
  });
32
32
  Object.defineProperty(exports, "NativeDocxComparison", {
33
33
  enumerable: true,
34
- get: function () { return chunkPVJ5ODDB_cjs.NativeDocxComparison; }
34
+ get: function () { return chunkXNB27POJ_cjs.NativeDocxComparison; }
35
35
  });
36
36
  Object.defineProperty(exports, "CrossReferencesProvider", {
37
37
  enumerable: true,
38
- get: function () { return chunkGAMRVB3I_cjs.CrossReferencesProvider; }
38
+ get: function () { return chunkQ6N5D3R5_cjs.CrossReferencesProvider; }
39
39
  });
40
40
  Object.defineProperty(exports, "DEFAULT_CROSS_REFERENCES_LABELS", {
41
41
  enumerable: true,
42
- get: function () { return chunkGAMRVB3I_cjs.DEFAULT_CROSS_REFERENCES_LABELS; }
42
+ get: function () { return chunkQ6N5D3R5_cjs.DEFAULT_CROSS_REFERENCES_LABELS; }
43
43
  });
44
44
  Object.defineProperty(exports, "DEFAULT_DEFINED_TERMS_LABELS", {
45
45
  enumerable: true,
46
- get: function () { return chunkGAMRVB3I_cjs.DEFAULT_DEFINED_TERMS_LABELS; }
46
+ get: function () { return chunkQ6N5D3R5_cjs.DEFAULT_DEFINED_TERMS_LABELS; }
47
47
  });
48
48
  Object.defineProperty(exports, "DEFINED_TERM_TRIGGER", {
49
49
  enumerable: true,
50
- get: function () { return chunkGAMRVB3I_cjs.DEFINED_TERM_TRIGGER; }
50
+ get: function () { return chunkQ6N5D3R5_cjs.DEFINED_TERM_TRIGGER; }
51
51
  });
52
52
  Object.defineProperty(exports, "DefinedTermsProvider", {
53
53
  enumerable: true,
54
- get: function () { return chunkGAMRVB3I_cjs.DefinedTermsProvider; }
54
+ get: function () { return chunkQ6N5D3R5_cjs.DefinedTermsProvider; }
55
55
  });
56
56
  Object.defineProperty(exports, "DocxCommentActivity", {
57
57
  enumerable: true,
58
- get: function () { return chunkGAMRVB3I_cjs.DocxCommentActivity; }
58
+ get: function () { return chunkQ6N5D3R5_cjs.DocxCommentActivity; }
59
59
  });
60
60
  Object.defineProperty(exports, "DocxEditorReview", {
61
61
  enumerable: true,
62
- get: function () { return chunkGAMRVB3I_cjs.DocxEditorReview; }
62
+ get: function () { return chunkQ6N5D3R5_cjs.DocxEditorReview; }
63
63
  });
64
64
  Object.defineProperty(exports, "DocxMentions", {
65
65
  enumerable: true,
66
- get: function () { return chunkGAMRVB3I_cjs.DocxMentions; }
66
+ get: function () { return chunkQ6N5D3R5_cjs.DocxMentions; }
67
67
  });
68
68
  Object.defineProperty(exports, "DocxParticipants", {
69
69
  enumerable: true,
70
- get: function () { return chunkGAMRVB3I_cjs.DocxParticipants; }
70
+ get: function () { return chunkQ6N5D3R5_cjs.DocxParticipants; }
71
71
  });
72
72
  Object.defineProperty(exports, "DocxRibbon", {
73
73
  enumerable: true,
74
- get: function () { return chunkGAMRVB3I_cjs.DocxRibbon; }
74
+ get: function () { return chunkQ6N5D3R5_cjs.DocxRibbon; }
75
75
  });
76
76
  Object.defineProperty(exports, "GenerateImageButton", {
77
77
  enumerable: true,
78
- get: function () { return chunkGAMRVB3I_cjs.GenerateImageButton; }
78
+ get: function () { return chunkQ6N5D3R5_cjs.GenerateImageButton; }
79
79
  });
80
80
  Object.defineProperty(exports, "LinkHoverCard", {
81
81
  enumerable: true,
82
- get: function () { return chunkGAMRVB3I_cjs.LinkHoverCard; }
82
+ get: function () { return chunkQ6N5D3R5_cjs.LinkHoverCard; }
83
83
  });
84
84
  Object.defineProperty(exports, "NativeDocxEditor", {
85
85
  enumerable: true,
86
- get: function () { return chunkGAMRVB3I_cjs.NativeDocxEditor; }
86
+ get: function () { return chunkQ6N5D3R5_cjs.NativeDocxEditor; }
87
87
  });
88
88
  Object.defineProperty(exports, "SignatureFieldMenu", {
89
89
  enumerable: true,
90
- get: function () { return chunkGAMRVB3I_cjs.SignatureFieldMenu; }
90
+ get: function () { return chunkQ6N5D3R5_cjs.SignatureFieldMenu; }
91
91
  });
92
92
  Object.defineProperty(exports, "SignatureFieldsProvider", {
93
93
  enumerable: true,
94
- get: function () { return chunkGAMRVB3I_cjs.SignatureFieldsProvider; }
94
+ get: function () { return chunkQ6N5D3R5_cjs.SignatureFieldsProvider; }
95
95
  });
96
96
  Object.defineProperty(exports, "editorPort", {
97
97
  enumerable: true,
98
- get: function () { return chunkGAMRVB3I_cjs.editorPort; }
98
+ get: function () { return chunkQ6N5D3R5_cjs.editorPort; }
99
99
  });
100
100
  Object.defineProperty(exports, "findDefinitionsSection", {
101
101
  enumerable: true,
102
- get: function () { return chunkGAMRVB3I_cjs.findDefinitionsSection; }
102
+ get: function () { return chunkQ6N5D3R5_cjs.findDefinitionsSection; }
103
103
  });
104
104
  Object.defineProperty(exports, "insertCrossReference", {
105
105
  enumerable: true,
106
- get: function () { return chunkGAMRVB3I_cjs.insertCrossReference; }
106
+ get: function () { return chunkQ6N5D3R5_cjs.insertCrossReference; }
107
107
  });
108
108
  Object.defineProperty(exports, "insertDefinedTerm", {
109
109
  enumerable: true,
110
- get: function () { return chunkGAMRVB3I_cjs.insertDefinedTerm; }
110
+ get: function () { return chunkQ6N5D3R5_cjs.insertDefinedTerm; }
111
111
  });
112
112
  Object.defineProperty(exports, "insertDocumentReference", {
113
113
  enumerable: true,
114
- get: function () { return chunkGAMRVB3I_cjs.insertDocumentReference; }
114
+ get: function () { return chunkQ6N5D3R5_cjs.insertDocumentReference; }
115
115
  });
116
116
  Object.defineProperty(exports, "insertSignatureField", {
117
117
  enumerable: true,
118
- get: function () { return chunkGAMRVB3I_cjs.insertSignatureField; }
118
+ get: function () { return chunkQ6N5D3R5_cjs.insertSignatureField; }
119
119
  });
120
120
  Object.defineProperty(exports, "listTargets", {
121
121
  enumerable: true,
122
- get: function () { return chunkGAMRVB3I_cjs.listTargets; }
122
+ get: function () { return chunkQ6N5D3R5_cjs.listTargets; }
123
123
  });
124
124
  Object.defineProperty(exports, "normalizeDocxExport", {
125
125
  enumerable: true,
126
- get: function () { return chunkGAMRVB3I_cjs.normalizeDocxExport; }
126
+ get: function () { return chunkQ6N5D3R5_cjs.normalizeDocxExport; }
127
127
  });
128
128
  Object.defineProperty(exports, "paragraphNumber", {
129
129
  enumerable: true,
130
- get: function () { return chunkGAMRVB3I_cjs.paragraphNumber; }
130
+ get: function () { return chunkQ6N5D3R5_cjs.paragraphNumber; }
131
131
  });
132
132
  Object.defineProperty(exports, "referenceText", {
133
133
  enumerable: true,
134
- get: function () { return chunkGAMRVB3I_cjs.referenceText; }
134
+ get: function () { return chunkQ6N5D3R5_cjs.referenceText; }
135
135
  });
136
136
  Object.defineProperty(exports, "referencesPort", {
137
137
  enumerable: true,
138
- get: function () { return chunkGAMRVB3I_cjs.referencesPort; }
138
+ get: function () { return chunkQ6N5D3R5_cjs.referencesPort; }
139
139
  });
140
140
  Object.defineProperty(exports, "reviewModule", {
141
141
  enumerable: true,
142
- get: function () { return chunkGAMRVB3I_cjs.reviewModule; }
142
+ get: function () { return chunkQ6N5D3R5_cjs.reviewModule; }
143
143
  });
144
144
  Object.defineProperty(exports, "shortTitle", {
145
145
  enumerable: true,
146
- get: function () { return chunkGAMRVB3I_cjs.shortTitle; }
146
+ get: function () { return chunkQ6N5D3R5_cjs.shortTitle; }
147
147
  });
148
148
  Object.defineProperty(exports, "useCrossReferences", {
149
149
  enumerable: true,
150
- get: function () { return chunkGAMRVB3I_cjs.useCrossReferences; }
150
+ get: function () { return chunkQ6N5D3R5_cjs.useCrossReferences; }
151
151
  });
152
152
  Object.defineProperty(exports, "useDefinedTerms", {
153
153
  enumerable: true,
154
- get: function () { return chunkGAMRVB3I_cjs.useDefinedTerms; }
154
+ get: function () { return chunkQ6N5D3R5_cjs.useDefinedTerms; }
155
155
  });
156
156
  Object.defineProperty(exports, "useReview", {
157
157
  enumerable: true,
158
- get: function () { return chunkGAMRVB3I_cjs.useReview; }
158
+ get: function () { return chunkQ6N5D3R5_cjs.useReview; }
159
159
  });
160
160
  Object.defineProperty(exports, "useReviewItem", {
161
161
  enumerable: true,
162
- get: function () { return chunkGAMRVB3I_cjs.useReviewItem; }
162
+ get: function () { return chunkQ6N5D3R5_cjs.useReviewItem; }
163
163
  });
164
164
  Object.defineProperty(exports, "withDirectEditing", {
165
165
  enumerable: true,
166
- get: function () { return chunkGAMRVB3I_cjs.withDirectEditing; }
166
+ get: function () { return chunkQ6N5D3R5_cjs.withDirectEditing; }
167
167
  });
168
168
  Object.defineProperty(exports, "DocxAuthorContext", {
169
169
  enumerable: true,