@arbidocs/blocks 0.5.114 → 0.5.115

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/dist/{ConnectedCallDock-2KXEQENS.cjs → ConnectedCallDock-WER7R222.cjs} +21 -21
  2. package/dist/{ConnectedCallDock-2KXEQENS.cjs.map → ConnectedCallDock-WER7R222.cjs.map} +1 -1
  3. package/dist/{ConnectedCallRoom-MU3NPNXF.cjs → ConnectedCallRoom-T7OBQTYP.cjs} +14 -14
  4. package/dist/{ConnectedCallRoom-MU3NPNXF.cjs.map → ConnectedCallRoom-T7OBQTYP.cjs.map} +1 -1
  5. package/dist/{ConnectedNativeDocxComparison-VH3I65H6.cjs → ConnectedNativeDocxComparison-YXMYJWXY.cjs} +19 -19
  6. package/dist/{ConnectedNativeDocxComparison-VH3I65H6.cjs.map → ConnectedNativeDocxComparison-YXMYJWXY.cjs.map} +1 -1
  7. package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs → ConnectedProductionSetDialog-LHB4VQWC.cjs} +3 -3
  8. package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs.map → ConnectedProductionSetDialog-LHB4VQWC.cjs.map} +1 -1
  9. package/dist/{ConnectedStreamedWordArtifact-KQSHCA75.cjs → ConnectedStreamedWordArtifact-2RTCHVPI.cjs} +19 -19
  10. package/dist/{ConnectedStreamedWordArtifact-KQSHCA75.cjs.map → ConnectedStreamedWordArtifact-2RTCHVPI.cjs.map} +1 -1
  11. package/dist/{DocumentReviewCard-OCPFVMLD.cjs → DocumentReviewCard-ZSBZBGFK.cjs} +15 -15
  12. package/dist/{DocumentReviewCard-OCPFVMLD.cjs.map → DocumentReviewCard-ZSBZBGFK.cjs.map} +1 -1
  13. package/dist/{FilesViewerDialog-BAGOEMXW.cjs → FilesViewerDialog-I5QIHQZT.cjs} +44 -44
  14. package/dist/{FilesViewerDialog-BAGOEMXW.cjs.map → FilesViewerDialog-I5QIHQZT.cjs.map} +1 -1
  15. package/dist/{NativeDocxEditor-EJEIJDOC.cjs → NativeDocxEditor-H6TAEVGY.cjs} +6 -6
  16. package/dist/{NativeDocxEditor-EJEIJDOC.cjs.map → NativeDocxEditor-H6TAEVGY.cjs.map} +1 -1
  17. package/dist/{WorkspaceTableView-IMAZICIZ.cjs → WorkspaceTableView-J3C6VH4T.cjs} +8 -8
  18. package/dist/{WorkspaceTableView-IMAZICIZ.cjs.map → WorkspaceTableView-J3C6VH4T.cjs.map} +1 -1
  19. package/dist/agents/index.cjs +297 -297
  20. package/dist/{ai-7U4B4CVF.cjs → ai-IM4A23YT.cjs} +24 -24
  21. package/dist/ai-IM4A23YT.cjs.map +1 -0
  22. package/dist/calls/index.cjs +121 -121
  23. package/dist/chat/DraftingDocChip.d.ts +3 -1
  24. package/dist/chat/DraftingDocChip.js +7 -4
  25. package/dist/chat/DraftingDocChip.js.map +2 -2
  26. package/dist/chat/index.cjs +37 -37
  27. package/dist/{chunk-AHT6DQNI.cjs → chunk-24EDG4PC.cjs} +50 -50
  28. package/dist/{chunk-AHT6DQNI.cjs.map → chunk-24EDG4PC.cjs.map} +1 -1
  29. package/dist/{chunk-Q6DQGGP4.cjs → chunk-325GVZE6.cjs} +3 -3
  30. package/dist/{chunk-Q6DQGGP4.cjs.map → chunk-325GVZE6.cjs.map} +1 -1
  31. package/dist/{chunk-HM5L4SBC.cjs → chunk-3A7QWUAW.cjs} +3 -3
  32. package/dist/{chunk-HM5L4SBC.cjs.map → chunk-3A7QWUAW.cjs.map} +1 -1
  33. package/dist/{chunk-ET3NVY27.cjs → chunk-42TURFHF.cjs} +5 -5
  34. package/dist/{chunk-ET3NVY27.cjs.map → chunk-42TURFHF.cjs.map} +1 -1
  35. package/dist/{chunk-LFRNBT2I.cjs → chunk-557MJ4IH.cjs} +20 -20
  36. package/dist/{chunk-LFRNBT2I.cjs.map → chunk-557MJ4IH.cjs.map} +1 -1
  37. package/dist/{chunk-JSQQV23D.cjs → chunk-6UTKM5AB.cjs} +3 -3
  38. package/dist/{chunk-JSQQV23D.cjs.map → chunk-6UTKM5AB.cjs.map} +1 -1
  39. package/dist/{chunk-H5OLHP2U.cjs → chunk-7OPOPYV6.cjs} +3 -3
  40. package/dist/{chunk-H5OLHP2U.cjs.map → chunk-7OPOPYV6.cjs.map} +1 -1
  41. package/dist/{chunk-MGQSLMTC.cjs → chunk-A3T3IC3K.cjs} +57 -57
  42. package/dist/{chunk-MGQSLMTC.cjs.map → chunk-A3T3IC3K.cjs.map} +1 -1
  43. package/dist/{chunk-WW6LXQY6.cjs → chunk-B3LZITVF.cjs} +12 -12
  44. package/dist/{chunk-WW6LXQY6.cjs.map → chunk-B3LZITVF.cjs.map} +1 -1
  45. package/dist/{chunk-V5IMYLYK.cjs → chunk-BQ5RIWWT.cjs} +3 -3
  46. package/dist/{chunk-V5IMYLYK.cjs.map → chunk-BQ5RIWWT.cjs.map} +1 -1
  47. package/dist/chunk-CIHERNDO.cjs +18 -0
  48. package/dist/{chunk-ZZA756I4.cjs.map → chunk-CIHERNDO.cjs.map} +1 -1
  49. package/dist/{chunk-MC4F2URI.cjs → chunk-CPG7II4E.cjs} +28 -28
  50. package/dist/{chunk-MC4F2URI.cjs.map → chunk-CPG7II4E.cjs.map} +1 -1
  51. package/dist/{chunk-7XT5B2DZ.cjs → chunk-CPR6EHG7.cjs} +47 -47
  52. package/dist/{chunk-7XT5B2DZ.cjs.map → chunk-CPR6EHG7.cjs.map} +1 -1
  53. package/dist/{chunk-3U36VYMD.cjs → chunk-DDIW4HLU.cjs} +27 -27
  54. package/dist/{chunk-3U36VYMD.cjs.map → chunk-DDIW4HLU.cjs.map} +1 -1
  55. package/dist/{chunk-INEPPS4H.cjs → chunk-IW7CDJTA.cjs} +4 -4
  56. package/dist/{chunk-INEPPS4H.cjs.map → chunk-IW7CDJTA.cjs.map} +1 -1
  57. package/dist/{chunk-IFOGBMAE.cjs → chunk-KLMNCBLY.cjs} +9 -6
  58. package/dist/chunk-KLMNCBLY.cjs.map +1 -0
  59. package/dist/{chunk-TDN33HSK.cjs → chunk-KTQOGT2L.cjs} +6 -6
  60. package/dist/{chunk-TDN33HSK.cjs.map → chunk-KTQOGT2L.cjs.map} +1 -1
  61. package/dist/{chunk-UUENH4BJ.cjs → chunk-KXIRVKCJ.cjs} +3 -3
  62. package/dist/{chunk-UUENH4BJ.cjs.map → chunk-KXIRVKCJ.cjs.map} +1 -1
  63. package/dist/{chunk-4ED7CNOX.cjs → chunk-M6IKVKU5.cjs} +40 -3
  64. package/dist/chunk-M6IKVKU5.cjs.map +1 -0
  65. package/dist/{chunk-XKDUPU7B.cjs → chunk-NJCK6V6U.cjs} +4 -4
  66. package/dist/{chunk-XKDUPU7B.cjs.map → chunk-NJCK6V6U.cjs.map} +1 -1
  67. package/dist/{chunk-5QUL5BZO.cjs → chunk-NNUK5ZM7.cjs} +4 -4
  68. package/dist/{chunk-5QUL5BZO.cjs.map → chunk-NNUK5ZM7.cjs.map} +1 -1
  69. package/dist/{chunk-4NPCDS2X.cjs → chunk-NY3YUCOW.cjs} +3 -3
  70. package/dist/{chunk-4NPCDS2X.cjs.map → chunk-NY3YUCOW.cjs.map} +1 -1
  71. package/dist/{chunk-6DCIZA3X.cjs → chunk-OEREKAAP.cjs} +75 -75
  72. package/dist/{chunk-6DCIZA3X.cjs.map → chunk-OEREKAAP.cjs.map} +1 -1
  73. package/dist/{chunk-3ODEWSRO.cjs → chunk-P77YTTJ3.cjs} +4 -4
  74. package/dist/{chunk-3ODEWSRO.cjs.map → chunk-P77YTTJ3.cjs.map} +1 -1
  75. package/dist/{chunk-LYTIQQQ2.cjs → chunk-R7CJEIA5.cjs} +3 -3
  76. package/dist/{chunk-LYTIQQQ2.cjs.map → chunk-R7CJEIA5.cjs.map} +1 -1
  77. package/dist/{chunk-2W5E62EY.cjs → chunk-SGYSDABK.cjs} +6 -6
  78. package/dist/{chunk-2W5E62EY.cjs.map → chunk-SGYSDABK.cjs.map} +1 -1
  79. package/dist/{chunk-UNDQYTRF.cjs → chunk-T23UTIRI.cjs} +6 -6
  80. package/dist/{chunk-UNDQYTRF.cjs.map → chunk-T23UTIRI.cjs.map} +1 -1
  81. package/dist/{chunk-E4BLRF2L.cjs → chunk-TDO5UWXF.cjs} +5 -5
  82. package/dist/{chunk-E4BLRF2L.cjs.map → chunk-TDO5UWXF.cjs.map} +1 -1
  83. package/dist/{chunk-4IOYQLKG.cjs → chunk-TP5PGWIO.cjs} +3 -3
  84. package/dist/{chunk-4IOYQLKG.cjs.map → chunk-TP5PGWIO.cjs.map} +1 -1
  85. package/dist/{chunk-7X3FS5HQ.cjs → chunk-TT4IF52H.cjs} +35 -35
  86. package/dist/{chunk-7X3FS5HQ.cjs.map → chunk-TT4IF52H.cjs.map} +1 -1
  87. package/dist/{chunk-GQXPNIRE.cjs → chunk-WAV762GP.cjs} +6 -6
  88. package/dist/{chunk-GQXPNIRE.cjs.map → chunk-WAV762GP.cjs.map} +1 -1
  89. package/dist/{chunk-436I7PQL.cjs → chunk-WR2SF44W.cjs} +9 -9
  90. package/dist/{chunk-436I7PQL.cjs.map → chunk-WR2SF44W.cjs.map} +1 -1
  91. package/dist/{chunk-MZ2KZXNU.cjs → chunk-WXUU3COI.cjs} +3 -3
  92. package/dist/{chunk-MZ2KZXNU.cjs.map → chunk-WXUU3COI.cjs.map} +1 -1
  93. package/dist/{chunk-NHHEMBXQ.cjs → chunk-X5LANJDZ.cjs} +12 -12
  94. package/dist/{chunk-NHHEMBXQ.cjs.map → chunk-X5LANJDZ.cjs.map} +1 -1
  95. package/dist/{chunk-BW5MF464.cjs → chunk-XKVPSOKP.cjs} +4 -4
  96. package/dist/{chunk-BW5MF464.cjs.map → chunk-XKVPSOKP.cjs.map} +1 -1
  97. package/dist/{chunk-57EE6CMW.cjs → chunk-Y24V6HPR.cjs} +15 -15
  98. package/dist/{chunk-57EE6CMW.cjs.map → chunk-Y24V6HPR.cjs.map} +1 -1
  99. package/dist/{chunk-7TEUGFIL.cjs → chunk-YGXOKB5Z.cjs} +4 -4
  100. package/dist/{chunk-7TEUGFIL.cjs.map → chunk-YGXOKB5Z.cjs.map} +1 -1
  101. package/dist/{chunk-3R6YHJ3G.cjs → chunk-ZTXQIIFV.cjs} +6 -6
  102. package/dist/{chunk-3R6YHJ3G.cjs.map → chunk-ZTXQIIFV.cjs.map} +1 -1
  103. package/dist/connect/docx.cjs +23 -23
  104. package/dist/connect/index.cjs +1231 -1069
  105. package/dist/connect/index.cjs.map +1 -1
  106. package/dist/connect/viewer.cjs +33 -33
  107. package/dist/connection/conversation/ConnectedConversation.js +143 -55
  108. package/dist/connection/conversation/ConnectedConversation.js.map +2 -2
  109. package/dist/connection/conversation/ConversationSendButton.d.ts +1 -0
  110. package/dist/connection/conversation/ConversationSendButton.js +3 -2
  111. package/dist/connection/conversation/ConversationSendButton.js.map +2 -2
  112. package/dist/connection/conversation/DocumentTargetNotice.d.ts +7 -0
  113. package/dist/connection/conversation/DocumentTargetNotice.js +45 -0
  114. package/dist/connection/conversation/DocumentTargetNotice.js.map +7 -0
  115. package/dist/connection/conversation/documentSwitch.d.ts +9 -0
  116. package/dist/connection/conversation/documentSwitch.js +40 -0
  117. package/dist/connection/conversation/documentSwitch.js.map +7 -0
  118. package/dist/dashboards/index.cjs +1 -1
  119. package/dist/docx/NativeDocxEditor.js +3 -1
  120. package/dist/docx/NativeDocxEditor.js.map +2 -2
  121. package/dist/docx/index.cjs +38 -38
  122. package/dist/docx/signatures/SignatureFields.d.ts +2 -0
  123. package/dist/docx/signatures/SignatureFields.js +40 -2
  124. package/dist/docx/signatures/SignatureFields.js.map +2 -2
  125. package/dist/embed/index.cjs +38 -38
  126. package/dist/files/index.cjs +224 -224
  127. package/dist/index.cjs +1731 -1731
  128. package/dist/settings/index.cjs +147 -147
  129. package/dist/shell/index.cjs +90 -90
  130. package/dist/site/index.cjs +5 -5
  131. package/dist/studio/index.cjs +27 -27
  132. package/dist/styles.css +1 -1
  133. package/dist/workflow-canvas/index.cjs +54 -54
  134. package/node_modules/@arbidocs/coedit/package.json +1 -1
  135. package/package.json +5 -5
  136. package/dist/ai-7U4B4CVF.cjs.map +0 -1
  137. package/dist/chunk-4ED7CNOX.cjs.map +0 -1
  138. package/dist/chunk-IFOGBMAE.cjs.map +0 -1
  139. package/dist/chunk-ZZA756I4.cjs +0 -18
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/docx/export.ts","../src/docx/streamWordDocument.tsx","../src/docx/review/reviewModule.ts","../src/docx/review/author.ts","../src/docx/review/commentText.ts","../src/docx/review/useReview.ts","../src/docx/review/DocxEditorReview.tsx","../src/docx/mentions.ts","../src/docx/DocxMentions.tsx","../src/docx/coedit-update.ts","../src/docx/definitions/fragment.ts","../src/docx/definitions/port.ts","../src/docx/AgentUndo.tsx","../src/docx/LinkHoverCard.tsx","../src/docx/definitions/DefinedTerms.tsx","../src/docx/RibbonMenu.tsx","../src/docx/overflowPlan.ts","../src/docx/RibbonOverflow.tsx","../src/docx/wordStyles.ts","../src/docx/StyleGallery.tsx","../src/docx/noteStyles.ts","../src/docx/WordReferences.tsx","../src/docx/beforeSave.ts","../src/docx/references/passages.ts","../src/docx/references/port.ts","../src/docx/references/CrossReferences.tsx","../src/docx/references/EditorMenus.tsx","../src/docx/layout/presets.ts","../src/docx/layout/LayoutRibbon.tsx","../src/docx/layout/TableRibbon.tsx","../src/docx/layout/caption.ts","../src/docx/layout/PictureRibbon.tsx","../src/docx/layout/LayoutTabs.tsx","../src/docx/layout/GenerateImage.tsx","../src/docx/layout/TableKeys.tsx","../src/docx/template/QuickParts.tsx","../src/docx/signatures/SignatureFields.tsx","../src/docx/template/HouseTemplatePanel.tsx","../src/docx/NativeDocxEditor.tsx"],"names":["unzipSync","strFromU8","strToU8","document","zipSync","renderToStaticMarkup","jsx","AiMarkdown","splitMarkdownBlocks","revisionItemsOf","collectReviewItems","useDocxEditor","useEditorSnapshot","useMemo","createContext","useContext","ArbiIcon","useAssistantCopy","jsxs","Fragment","useState","SendHorizontal","X","RotateCcw","CircleCheck","Trash2","Check","useRef","useEffect","useLayoutEffect","ReviewRailContext","useCallback","MessageSquarePlus","MessageSquare","PencilLine","ChevronLeft","ChevronRight","ChevronUp","ChevronDown","CheckCheck","extractMentions","Dialog","DialogContent","DialogHeader","DialogTitle","filterMentionCandidates","status","findMentionQuery","createPortal","MentionMenu","formatRefusal","covered","fragmentPackage","readParagraphs","documentStyleIds","stylesUsed","AGENT_UNDO_MAP","useReducer","undoOps","useTrackedOrNoted","groupDefinitions","definitionLabels","filterTermGroups","insertDefinedTerm","definitionOfAnchor","React","listOptionId","cn","Ellipsis","useParagraphStyle","useHouseTemplate","useListKeyNav","fragmentClipboardHtml","useEditorCommand","DocxEditor","Superscript","NotebookText","footnote","endnote","styles","editor","levels","findNode","documentNumbering","paragraphRunsXml","listTargets","useEditorState","refreshCrossReferences","paragraphNumber","REF_BOOKMARK_PREFIX","refResult","markCrossReferenceTarget","insertCrossReferenceField","insertDocumentReference","DialogDescription","Button","DialogFooter","filterTargets","list","Tabs","TabsList","TabsTrigger","TabsContent","Input","FactPassageItem","Link2","RefreshCcw","BookA","Scaling","RectangleHorizontal","RectangleVertical","FileText","SeparatorHorizontal","usePageSetup","Columns2","Settings2","BetweenHorizontalStart","BetweenHorizontalEnd","BetweenVerticalStart","BetweenVerticalEnd","Merge","Split","Heading","AlignVerticalJustifyCenter","AlignVerticalJustifyStart","AlignVerticalJustifyEnd","stylesXml","esc","base64","docxPackage","documentXml","trackInsertion","ok","Captions","RotateCw","FlipHorizontal2","FlipVertical2","normalizeImageBytes","executeImageCommand","useSyncExternalStore","Loader2","Sparkles","Blocks","pngSize","pngBytes","AdoptSignatureDialog","Signature","INFORMAL_SIGNATURE_NOTE","NONE","signatureFieldWrite","isSignerEmail","PenLine","SIGNATURE_FIELD_KINDS","SIGNATURE_FIELD_LABELS","Download","Y","useChromeTranslate","Type","Pilcrow","UsersRound","template","resolveHouseTemplate","newFromTemplate","templateFileName","contentPath","createHocuspocusCollaboration","DOCUMENT_COLLABORATION_VERSIONS","collaborationModule","RefreshCw","DocxAuthorContext","HouseTemplateProvider","WifiOff","Save"],"mappings":"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","file":"chunk-4ED7CNOX.cjs","sourcesContent":["import { strFromU8, strToU8, unzipSync, zipSync } from 'fflate'\n\n/** Repair Word package declarations and duplicate fragment revision IDs on export. */\nexport function normalizeDocxExport(data: ArrayBuffer): ArrayBuffer {\n const files = unzipSync(new Uint8Array(data))\n const part = '[Content_Types].xml'\n const xml = new DOMParser().parseFromString(strFromU8(files[part]), 'application/xml')\n if (xml.getElementsByTagName('parsererror').length) throw new Error('Invalid DOCX content types.')\n const namespace = 'http://schemas.openxmlformats.org/package/2006/content-types'\n const types: Record<string, string> = {\n 'word/comments.xml':\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml',\n 'word/commentsExtended.xml':\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml',\n 'word/commentsIds.xml':\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.commentsIds+xml',\n 'word/commentsExtensible.xml':\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtensible+xml',\n }\n let changed = false\n for (const [name, type] of Object.entries(types)) {\n if (!files[name]) continue\n let override = Array.from(xml.getElementsByTagNameNS(namespace, 'Override')).find(\n (node) => node.getAttribute('PartName') === '/' + name\n )\n if (!override) {\n override = xml.createElementNS(namespace, 'Override')\n override.setAttribute('PartName', '/' + name)\n xml.documentElement.appendChild(override)\n }\n if (override.getAttribute('ContentType') !== type) {\n override.setAttribute('ContentType', type)\n changed = true\n }\n }\n if (changed) files[part] = strToU8(new XMLSerializer().serializeToString(xml))\n const word = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'\n for (const name of Object.keys(files)) {\n if (!/^word\\/(document|header\\d*|footer\\d*|footnotes|endnotes|comments)\\.xml$/.test(name))\n continue\n const document = new DOMParser().parseFromString(strFromU8(files[name]), 'application/xml')\n if (document.getElementsByTagName('parsererror').length)\n throw new Error('Invalid Word document XML.')\n const elements = Array.from(document.getElementsByTagName('*'))\n const used = new Set(\n elements.map((element) => element.getAttributeNS(word, 'id')).filter(Boolean)\n )\n const seen = new Set<string>()\n let next = 1,\n repaired = false\n for (const element of elements) {\n if (\n element.namespaceURI !== word ||\n !['ins', 'del', 'moveFrom', 'moveTo'].includes(element.localName)\n )\n continue\n const id = element.getAttributeNS(word, 'id')\n if (!id) continue\n if (seen.has(id)) {\n while (used.has(String(next))) next++\n const unique = String(next++)\n const attribute = element.getAttributeNodeNS(word, 'id')!\n element.setAttributeNS(word, attribute.name, unique)\n used.add(unique)\n repaired = true\n } else seen.add(id)\n }\n if (repaired) {\n files[name] = strToU8(new XMLSerializer().serializeToString(document))\n changed = true\n }\n }\n if (!changed) return data\n return zipSync(files).slice().buffer as ArrayBuffer\n}\n","import React from 'react'\nimport { renderToStaticMarkup } from 'react-dom/server'\nimport { AiMarkdown, splitMarkdownBlocks } from '@arbidocs/react/ui'\nimport type { Editor } from '@docx-editor.dev/core'\n\n/** Use the existing renderer; remove presentation controls, not Markdown syntax. */\nfunction wordDraftHtml(markdown: string): string {\n const template = document.createElement('template')\n template.innerHTML = renderToStaticMarkup(<AiMarkdown>{markdown}</AiMarkdown>)\n template.content\n .querySelectorAll('button, svg, [data-testid=\"code-block-header\"]')\n .forEach((node) => node.remove())\n // Code labels and copy controls belong to the preview, not the Word document.\n template.content.querySelectorAll('[data-testid=\"markdown-code-block\"]').forEach((node) => {\n const pre = node.querySelector('pre')\n if (pre) node.replaceWith(pre)\n })\n return template.innerHTML\n}\n\nfunction requireEdit(result: ReturnType<Editor['exec']>) {\n if (!result.ok) throw new Error(result.reason)\n}\n\n/** Completed blocks are immutable; only the unfinished block is replaced. */\nexport class WordDraftStream {\n private committed: string[] = []\n private pending?: { start: string; end: string }\n private resetAfterFailure = false\n constructor(private readonly editor: Editor) {}\n\n update(content: string, complete: boolean) {\n const blocks = splitMarkdownBlocks(content)\n const completeCount = complete ? blocks.length : Math.max(0, blocks.length - 1)\n requireEdit(this.editor.setEditingMode('editing'))\n try {\n if (\n this.resetAfterFailure ||\n this.committed.some((block, index) => blocks[index] !== block)\n ) {\n requireEdit(this.editor.exec({ type: 'selectAll' }))\n requireEdit(this.editor.exec({ type: 'deleteText' }))\n this.committed = []\n this.pending = undefined\n this.resetAfterFailure = false\n }\n for (let index = this.committed.length; index < blocks.length; index++) {\n const tail = this.editor.query({ type: 'paragraphs' }).at(-1)\n const start = this.pending?.start || tail?.paraId\n if (!start) throw new Error('The draft insertion paragraph is unavailable.')\n requireEdit(\n this.editor.exec(\n this.pending\n ? {\n type: 'setSelection',\n range: { from: { paraId: start }, to: { paraId: this.pending.end } },\n }\n : { type: 'setSelection', anchor: { paraId: start } }\n )\n )\n const html = wordDraftHtml(blocks[index]) + '<p></p>'\n const element = document.createElement('div')\n element.innerHTML = html\n const startIndex = this.editor\n .query({ type: 'paragraphs' })\n .findIndex((p) => p.paraId === start)\n requireEdit(this.editor.exec({ type: 'paste', html, text: element.textContent || '' }))\n const inserted = this.editor.query({ type: 'paragraphs' }).slice(startIndex)\n let headingIndex = 0\n for (const heading of Array.from(element.querySelectorAll('h1,h2,h3,h4,h5,h6'))) {\n const match = inserted.findIndex(\n (p, i) => i >= headingIndex && p.text === heading.textContent\n )\n if (match >= 0 && inserted[match].paraId) {\n requireEdit(\n this.editor.exec({\n type: 'setSelection',\n anchor: { paraId: inserted[match].paraId! },\n })\n )\n requireEdit(\n this.editor.exec({\n type: 'setParagraphStyle',\n styleId: `Heading${heading.tagName.slice(1)}`,\n })\n )\n headingIndex = match + 1\n }\n }\n const end = this.editor.query({ type: 'paragraphs' }).at(-1)?.paraId\n if (!end) throw new Error('The draft continuation paragraph is unavailable.')\n if (index < completeCount) {\n this.committed.push(blocks[index])\n this.pending = undefined\n } else this.pending = { start, end }\n }\n } catch (error) {\n // A public command can fail after paste succeeded. Rebuild the locked draft\n // on retry rather than appending the same partial block again.\n this.resetAfterFailure = true\n throw error\n } finally {\n requireEdit(this.editor.setEditingMode('viewing'))\n }\n }\n}\n","import type { EditorModule } from '@docx-editor.dev/core'\nimport { collectReviewItems, revisionItemsOf } from '@docx-editor.dev/core/store'\n\ntype Part = Parameters<typeof revisionItemsOf>[0]\ntype PartNode = { id: string; children?: readonly PartNode[] }\n\nfunction findNode(node: PartNode, id: string): PartNode | undefined {\n if (node.id === id) return node\n for (const child of node.children ?? []) {\n const found = findNode(child, id)\n if (found) return found\n }\n return undefined\n}\n\n/** Revisions wholly inside one paragraph, read from a paragraph-scoped view of the part. */\nfunction revisionItemsOfParagraph(part: Part, paragraphId: string) {\n const paragraph = findNode(part.root as unknown as PartNode, paragraphId)\n if (!paragraph) return []\n return revisionItemsOf({ ...part, root: paragraph as unknown as Part['root'] })\n}\n\n/**\n * Comments and tracked changes: the review queue derivation and the markup display modes, both\n * provided by the Apache-2.0 core engine.\n */\nexport function reviewModule(): EditorModule {\n return {\n id: 'review',\n review: {\n displayModes: ['all-markup', 'simple-markup', 'proposed', 'original'],\n collectReviewItems,\n revisionItemsOfParagraph,\n },\n }\n}\n","import type { ReviewEntry } from './useReview'\n\n/**\n * ARBI's own comments. The backend authors them \"ARBI\"; \"Assistant\" is the stored name of each\n * user's managed assistant, which wrote the comments made before that.\n */\nconst ARBI_AUTHORS = new Set(['ARBI', 'Assistant'])\n\nexport function isArbiAuthor(entry: Pick<ReviewEntry, 'author'>): boolean {\n return ARBI_AUTHORS.has((entry.author ?? '').trim())\n}\n\n/**\n * The name a comment or change is shown under: the assistant's under the host's name for it (the\n * stored author stays the backend's \"ARBI\").\n */\nexport function authorName(entry: Pick<ReviewEntry, 'author'>, assistantName = 'ARBI'): string {\n return isArbiAuthor(entry) ? assistantName : entry.author || 'Reviewer'\n}\n","import type { ReviewEntry } from './useReview'\n\ntype Node = {\n readonly kind?: string\n readonly localName?: string\n readonly value?: string\n readonly children?: readonly Node[]\n}\n\n/** Elements whose text is not the comment's words: deleted text, field codes, properties. */\nconst SKIP = new Set(['delText', 'instrText', 'delInstrText', 'pPr', 'rPr'])\n\nfunction inline(node: Node): string {\n if (node.kind === 'textValue') return node.value ?? ''\n if (node.localName && SKIP.has(node.localName)) return ''\n if (node.localName === 'br' || node.localName === 'cr') return '\\n'\n if (node.localName === 'tab') return '\\t'\n return (node.children ?? []).map(inline).join('')\n}\n\n/**\n * A comment's words with its paragraphs on their own lines. The engine's `text` joins a comment's\n * paragraphs with spaces, which flattens the markdown ARBI writes (one paragraph per line) into a\n * run-on line; reading the paragraphs keeps lists and headings intact.\n */\nexport function commentText(entry: ReviewEntry): string {\n if (entry.kind !== 'comment') return entry.text\n const blocks = (entry.item?.comment?.blocks ?? []) as unknown as readonly Node[]\n const text = blocks.map(inline).join('\\n').trim()\n return text || entry.text\n}\n","import { createContext, useContext, useMemo } from 'react'\nimport type { Editor, ExecResult, ReviewItemPlacement } from '@docx-editor.dev/core'\nimport { useDocxEditor, useEditorSnapshot } from '@docx-editor.dev/react'\n\nexport type ReviewEntry = ReviewItemPlacement\n\nexport interface ReviewApi {\n /** False until the editor has mounted. */\n ready: boolean\n /** Every pending decision, in document order. */\n items: readonly ReviewEntry[]\n activeKey: string | null\n paneOpen: boolean\n setPaneOpen(open: boolean): void\n /** Focus a card's range in the document. Returns false when the engine refuses. */\n setActive(key: string | null, options?: { reveal?: false }): boolean\n reply(entry: ReviewEntry, text: string): boolean\n accept(entry: ReviewEntry): boolean\n reject(entry: ReviewEntry): boolean\n resolve(entry: ReviewEntry, resolved: boolean): boolean\n remove(entry: ReviewEntry): boolean\n addComment(text: string): boolean\n /** Move the document caret to the next or previous tracked change, wrapping at the ends. */\n navigate(direction: 'next' | 'previous'): boolean\n /** Accept or reject every change shown, as one undo step. */\n resolveAll(action: 'accept' | 'reject'): boolean\n}\n\nconst NONE: readonly ReviewEntry[] = []\n\nconst ok = (result: ExecResult | undefined): boolean => result?.ok === true\n\nexport function useReview(): ReviewApi {\n const editor = useDocxEditor() as Editor | null\n // Re-render on every editor event so pane state and the active card stay current.\n const version = useEditorSnapshot(editor)\n const revision = editor?.getReviewRevision() ?? 0\n // The queue is re-derived only when the editor's review revision moves.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const items = useMemo(() => (editor ? editor.getReviewItems() : NONE), [editor, revision])\n const paneOpen = editor?.isReviewPaneOpen() ?? false\n const activeKey = items.find((item) => item.isActive)?.key ?? null\n\n return useMemo<ReviewApi>(\n () => ({\n ready: editor !== null,\n items,\n activeKey,\n paneOpen,\n setPaneOpen: (open) => {\n if (editor && editor.isReviewPaneOpen() !== open) editor.exec({ type: 'toggleReviewPane' })\n },\n setActive: (key, options) => ok(editor?.setActiveReviewItem(key, options)),\n reply: (entry, text) => ok(editor?.replyToReviewItem(entry.key, text)),\n accept: (entry) => ok(editor?.acceptReviewItem(entry.key)),\n reject: (entry) => ok(editor?.rejectReviewItem(entry.key)),\n resolve: (entry, resolved) => ok(editor?.setCommentResolved(entry.key, resolved)),\n remove: (entry) => ok(editor?.deleteReviewItem(entry.key)),\n addComment: (text) => ok(editor?.addComment(text)),\n navigate: (direction) => ok(editor?.exec({ type: 'navigateReviewChange', direction })),\n resolveAll: (action) => ok(editor?.exec({ type: 'resolveAllReviewChanges', action })),\n }),\n [editor, items, activeKey, paneOpen, version]\n )\n}\n\nexport const ReviewItemContext = createContext<ReviewEntry | null>(null)\n\n/** The card being rendered. Null outside a card. */\nexport function useReviewItem(): ReviewEntry | null {\n return useContext(ReviewItemContext)\n}\n","import React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport { ReviewRailContext, useDocxEditor } from '@docx-editor.dev/react'\nimport { AiMarkdown, ArbiIcon } from '@arbidocs/react/ui'\nimport { useAssistantCopy } from '@arbidocs/react/shell'\nimport {\n Check,\n CheckCheck,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n CircleCheck,\n MessageSquare,\n MessageSquarePlus,\n PencilLine,\n RotateCcw,\n SendHorizontal,\n Trash2,\n X,\n} from 'lucide-react'\nimport { authorName, isArbiAuthor } from './author'\nimport { commentText } from './commentText'\nimport { ReviewItemContext, useReview, type ReviewEntry } from './useReview'\n\nconst CARD_GAP = 8\n/** Margin symbols closer than this share one symbol, so a busy paragraph stays tappable. */\nconst CLUSTER_GAP = 24\n/** A bubble hangs below its margin symbol (26px) so it never covers the line being edited. */\nconst BUBBLE_DROP = 32\n/**\n * Scroll-area width from which the cards get their own column beside the page, as in Word.\n * Narrower than this the page needs the room, so only margin symbols are shown and a symbol\n * opens its thread in a bubble.\n */\nconst REVIEW_MARGIN_MIN_WIDTH = 900\n\nconst REVISION_LABELS: Record<string, string> = {\n insert: 'Inserted',\n delete: 'Deleted',\n replace: 'Replaced',\n moveFrom: 'Moved from here',\n moveTo: 'Moved to here',\n format: 'Formatted',\n paragraphMark: 'Paragraph break',\n structural: 'Table change',\n}\n\ntype Review = ReturnType<typeof useReview>\ntype Layout = 'margin' | 'compact'\n\nfunction isTopLevel(entry: ReviewEntry): boolean {\n if (entry.kind === 'comment') return !entry.parentId && !entry.parentRevisionId\n if (entry.kind === 'custom') return entry.item.carded\n return true\n}\n\nfunction kindLabel(entry: ReviewEntry): string {\n if (entry.kind === 'revision') return REVISION_LABELS[entry.revisionKind] ?? 'Change'\n if (entry.kind === 'comment') return entry.resolved ? 'Resolved' : 'Comment'\n return 'Note'\n}\n\nfunction parseDate(value: string | undefined): Date | null {\n if (!value) return null\n const date = new Date(value)\n return Number.isNaN(date.getTime()) ? null : date\n}\n\nfunction relativeDate(date: Date): string {\n const seconds = (Date.now() - date.getTime()) / 1000\n if (seconds < 45) return 'just now'\n if (seconds < 45 * 60) return `${Math.round(seconds / 60)}m ago`\n if (seconds < 22 * 3600) return `${Math.round(seconds / 3600)}h ago`\n if (seconds < 7 * 86400) return `${Math.round(seconds / 86400)}d ago`\n const sameYear = date.getFullYear() === new Date().getFullYear()\n return date.toLocaleDateString(undefined, {\n day: 'numeric',\n month: 'short',\n year: sameYear ? undefined : 'numeric',\n })\n}\n\n/** A stable hue per author, so each reviewer keeps one colour across cards and sessions. */\nfunction authorHue(author: string): number {\n let hash = 0\n for (const char of author) hash = (hash * 31 + char.charCodeAt(0)) | 0\n return Math.abs(hash) % 360\n}\n\nfunction Avatar({ entry }: { entry: ReviewEntry }) {\n if (isArbiAuthor(entry))\n return (\n <span className=\"native-docx-review-avatar\" data-arbi=\"\" aria-hidden=\"true\">\n <ArbiIcon size={16} aria-hidden />\n </span>\n )\n return (\n <span\n className=\"native-docx-review-avatar\"\n aria-hidden=\"true\"\n style={{ '--review-author-hue': authorHue(entry.author || '') } as React.CSSProperties}\n >\n {entry.initials}\n </span>\n )\n}\n\nfunction Byline({ entry, children }: { entry: ReviewEntry; children?: React.ReactNode }) {\n const assistantName = useAssistantCopy().name\n const date = parseDate(entry.date)\n return (\n <div className=\"native-docx-review-byline\">\n <Avatar entry={entry} />\n <div className=\"native-docx-review-who\">\n <span className=\"native-docx-review-author\">{authorName(entry, assistantName)}</span>\n <span className=\"native-docx-review-meta\">\n {kindLabel(entry)}\n {date && (\n <>\n {' · '}\n <time\n className=\"native-docx-review-date\"\n dateTime={date.toISOString()}\n title={date.toLocaleString()}\n >\n {relativeDate(date)}\n </time>\n </>\n )}\n </span>\n </div>\n {children}\n </div>\n )\n}\n\n/** The words a change covers, drawn the way the page marks them up. */\nfunction ChangeText({ entry }: { entry: ReviewEntry & { kind: 'revision' } }) {\n const removed = entry.revisionKind === 'replace' ? entry.replacedText : undefined\n const struck = entry.revisionKind === 'delete' || entry.revisionKind === 'moveFrom'\n const added =\n entry.revisionKind === 'insert' || entry.revisionKind === 'moveTo' || removed !== undefined\n return (\n <p className=\"native-docx-review-change\" data-testid=\"review-text\">\n {removed && (\n <>\n <del>{removed}</del>\n <span className=\"native-docx-review-arrow\" aria-hidden=\"true\">\n →\n </span>\n </>\n )}\n {struck ? (\n <del>{entry.text}</del>\n ) : added ? (\n <ins>{entry.text}</ins>\n ) : (\n <span>{entry.text}</span>\n )}\n </p>\n )\n}\n\n/**\n * A comment's words, formatted like every other message in the app (ARBI answers in markdown).\n * The text comes from the .docx, which anyone may have written, so inline HTML stays text.\n */\nfunction CommentText({ text, testId }: { text: string; testId?: string }) {\n return (\n <div className=\"native-docx-review-text\" data-testid={testId}>\n <AiMarkdown className=\"native-docx-review-markdown\" allowHtml={false}>\n {text}\n </AiMarkdown>\n </div>\n )\n}\n\nfunction Reply({ entry }: { entry: ReviewEntry }) {\n return (\n <div className=\"native-docx-review-message\">\n <Byline entry={entry} />\n <CommentText text={commentText(entry)} />\n </div>\n )\n}\n\nfunction ReplyForm({\n entry,\n review,\n onDismiss,\n}: {\n entry: ReviewEntry\n review: Review\n onDismiss: () => void\n}) {\n const [text, setText] = useState('')\n return (\n <form\n className=\"native-docx-review-reply\"\n onClick={(event) => event.stopPropagation()}\n onSubmit={(event) => {\n event.preventDefault()\n const value = text.trim()\n if (value && review.reply(entry, value)) setText('')\n }}\n >\n <input\n data-testid=\"review-reply-input\"\n aria-label=\"Reply\"\n placeholder=\"Reply…\"\n value={text}\n onChange={(event) => setText(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n onDismiss()\n }\n }}\n />\n <button\n type=\"submit\"\n className=\"native-docx-review-icon native-docx-review-send\"\n aria-label=\"Reply\"\n title=\"Reply\"\n disabled={!text.trim()}\n >\n <SendHorizontal size={14} />\n </button>\n <button\n type=\"button\"\n className=\"native-docx-review-icon\"\n data-testid=\"review-reply-cancel\"\n aria-label=\"Cancel\"\n title=\"Cancel\"\n onClick={onDismiss}\n >\n <X size={14} />\n </button>\n </form>\n )\n}\n\nfunction Card({\n entry,\n replies,\n review,\n extra,\n cardRef,\n top,\n onDismiss,\n}: {\n entry: ReviewEntry\n replies: readonly ReviewEntry[]\n review: Review\n extra?: React.ReactNode\n cardRef?: (element: HTMLElement | null) => void\n /** Omitted for a card inside a bubble, which flows instead of sitting at its anchor. */\n top?: number\n onDismiss: () => void\n}) {\n const assistantName = useAssistantCopy().name\n const resolved = entry.kind === 'comment' && entry.resolved\n return (\n <ReviewItemContext.Provider value={entry}>\n <article\n ref={cardRef}\n className=\"native-docx-review-card\"\n tabIndex={0}\n aria-label={`${entry.kind === 'revision' ? 'Change' : 'Comment'} by ${authorName(entry, assistantName)}`}\n onKeyDown={(event) => {\n if (event.target !== event.currentTarget) return\n if ((event.key === 'Enter' || event.key === ' ') && entry.activatable) {\n event.preventDefault()\n review.setActive(entry.key)\n }\n }}\n data-testid=\"review-card\"\n data-kind={entry.kind}\n data-change={entry.kind === 'revision' ? entry.revisionKind : undefined}\n data-active={entry.isActive || undefined}\n data-resolved={resolved || undefined}\n data-floating={top === undefined || undefined}\n style={top === undefined ? undefined : { top }}\n onClick={() => {\n if (entry.activatable && !entry.isActive) review.setActive(entry.key)\n }}\n >\n <Byline entry={entry}>\n {entry.kind === 'comment' && (\n <div className=\"native-docx-review-tools\">\n <button\n type=\"button\"\n className=\"native-docx-review-icon\"\n data-testid=\"review-resolve\"\n aria-label={entry.resolved ? 'Reopen' : 'Resolve'}\n title={entry.resolved ? 'Reopen' : 'Resolve'}\n onClick={(event) => {\n event.stopPropagation()\n review.resolve(entry, !entry.resolved)\n }}\n >\n {entry.resolved ? <RotateCcw size={14} /> : <CircleCheck size={14} />}\n </button>\n <button\n type=\"button\"\n className=\"native-docx-review-icon\"\n data-testid=\"review-delete\"\n aria-label=\"Delete\"\n title=\"Delete\"\n onClick={(event) => {\n event.stopPropagation()\n review.remove(entry)\n }}\n >\n <Trash2 size={14} />\n </button>\n </div>\n )}\n </Byline>\n {entry.kind === 'revision' ? (\n <ChangeText entry={entry} />\n ) : (\n <CommentText text={commentText(entry)} testId=\"review-text\" />\n )}\n {replies.length > 0 && (\n <div className=\"native-docx-review-thread\">\n {replies.map((reply) => (\n <Reply key={reply.key} entry={reply} />\n ))}\n </div>\n )}\n {extra}\n {entry.kind === 'revision' && !entry.readOnly && (\n <div className=\"native-docx-review-decide\">\n <button\n type=\"button\"\n className=\"native-docx-review-accept\"\n data-testid=\"review-accept\"\n onClick={(event) => {\n event.stopPropagation()\n review.accept(entry)\n }}\n >\n <Check size={14} />\n Accept\n </button>\n <button\n type=\"button\"\n className=\"native-docx-review-reject\"\n data-testid=\"review-reject\"\n onClick={(event) => {\n event.stopPropagation()\n review.reject(entry)\n }}\n >\n <X size={14} />\n Reject\n </button>\n </div>\n )}\n {entry.isActive && entry.kind !== 'custom' && (\n <ReplyForm entry={entry} review={review} onDismiss={onDismiss} />\n )}\n </article>\n </ReviewItemContext.Provider>\n )\n}\n\nfunction Draft({\n top,\n onSubmit,\n onCancel,\n formRef,\n}: {\n /** Omitted inside a bubble. */\n top?: number\n formRef?: (element: HTMLElement | null) => void\n onSubmit: (text: string) => void\n onCancel: () => void\n}) {\n const [text, setText] = useState('')\n const input = useRef<HTMLInputElement>(null)\n useEffect(() => input.current?.focus(), [])\n return (\n <form\n ref={formRef}\n className=\"native-docx-review-card native-docx-review-draft\"\n data-testid=\"review-draft\"\n data-floating={top === undefined || undefined}\n style={top === undefined ? undefined : { top }}\n onSubmit={(event) => {\n event.preventDefault()\n if (text.trim()) onSubmit(text.trim())\n }}\n >\n <input\n ref={input}\n data-testid=\"review-draft-input\"\n aria-label=\"Comment\"\n placeholder=\"Add a comment…\"\n value={text}\n onChange={(event) => setText(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n onCancel()\n }\n }}\n />\n <div className=\"native-docx-review-decide\">\n <button type=\"submit\" className=\"native-docx-review-accept\" disabled={!text.trim()}>\n Comment\n </button>\n <button\n type=\"button\"\n className=\"native-docx-review-plain\"\n data-testid=\"review-draft-cancel\"\n onClick={onCancel}\n >\n Cancel\n </button>\n </div>\n </form>\n )\n}\n\n/** The scroll container the rail is drawn in, and its width once laid out (0 until then). */\nfunction useScrollArea(anchor: React.RefObject<HTMLElement | null>, ready: boolean) {\n const [area, setArea] = useState<{ element: HTMLElement | null; width: number }>({\n element: null,\n width: 0,\n })\n useLayoutEffect(() => {\n const element = anchor.current?.closest<HTMLElement>('.docx-editor__scroll-container') ?? null\n const measure = () =>\n setArea((previous) =>\n previous.element === element && previous.width === (element?.clientWidth ?? 0)\n ? previous\n : { element, width: element?.clientWidth ?? 0 }\n )\n measure()\n if (!element || typeof ResizeObserver === 'undefined') return\n const observer = new ResizeObserver(measure)\n observer.observe(element)\n return () => observer.disconnect()\n }, [anchor, ready])\n return area\n}\n\n/**\n * The review rail: one card per comment thread or tracked change, aligned to its place in the page.\n * With room beside the page the cards stand in their own margin column, as in Word; without it only\n * margin symbols are shown, and a symbol opens its thread in a bubble. Everything it shows and every\n * action it takes goes through the editor's own review API.\n */\nfunction DocxEditorReviewRail({\n children,\n}: {\n children?: (entry: ReviewEntry) => React.ReactNode\n}) {\n const editor = useDocxEditor()\n const registry = useContext(ReviewRailContext)\n const review = useReview()\n const [draft, setDraft] = useState<{ anchorY: number } | null>(null)\n const [tops, setTops] = useState<Record<string, number>>({})\n const [showResolved, setShowResolved] = useState(true)\n const elements = useRef(new Map<string, HTMLElement>())\n const anchor = useRef<HTMLDivElement>(null)\n const toolbar = useRef<HTMLDivElement>(null)\n const area = useScrollArea(anchor, review.ready)\n // Unmeasured (first frame, or no layout at all) counts as wide, as the engine's own gutter does.\n const layout: Layout =\n area.width === 0 || area.width >= REVIEW_MARGIN_MIN_WIDTH ? 'margin' : 'compact'\n\n const openDraft = useCallback(() => {\n const placement = editor?.getSelectionPlacement()\n if (!placement) return\n review.setPaneOpen(true)\n setDraft({ anchorY: placement.anchorY })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor, review.setPaneOpen])\n\n useEffect(() => registry?.register(), [registry])\n useEffect(() => registry?.registerCommentDraft(openDraft), [registry, openDraft])\n\n // Each layout starts in its own default: the margin column shown, the bubble closed. Later the\n // reader's own toggles stand until the layout itself changes.\n const shownLayout = useRef<Layout | null>(null)\n useEffect(() => {\n if (!review.ready || area.width === 0 || shownLayout.current === layout) return\n // On a compact screen a new tracked change must not open a bubble by itself.\n editor?.setReviewPaneOptions({ opening: layout === 'margin' ? 'auto' : 'manual' })\n // The engine starts with its pane open; on a first compact frame that would be a bubble nobody\n // asked for. A thread already activated on open (a deep link to a comment) stays shown.\n const deepLinked = shownLayout.current === null && review.activeKey !== null\n shownLayout.current = layout\n if (layout === 'margin') review.setPaneOpen(true)\n else if (!deepLinked) {\n setDraft(null)\n review.setPaneOpen(false)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor, layout, area.width, review.ready, review.setPaneOpen])\n\n const scale = editor?.getRenderScale() ?? 1\n const top = review.items\n .filter(isTopLevel)\n .filter((entry) => entry.anchorY !== null)\n .filter((entry) => showResolved || entry.kind !== 'comment' || !entry.resolved)\n const changes = review.items.filter((entry) => entry.kind === 'revision').length\n const comments = top.filter((entry) => entry.kind === 'comment').length\n const hasResolved = review.items.some((entry) => entry.kind === 'comment' && entry.resolved)\n const repliesOf = useCallback(\n (entry: ReviewEntry) =>\n review.items.filter(\n (other) =>\n other.kind === 'comment' &&\n (other.parentId === entry.id || other.parentRevisionId === entry.id)\n ),\n [review.items]\n )\n const column = layout === 'margin' && review.paneOpen && (top.length > 0 || draft !== null)\n const bubbleOpen = layout === 'compact' && (review.paneOpen || draft !== null)\n\n // The margin column takes its room from the page, which the editor then refits beside it.\n useEffect(() => {\n const element = area.element\n if (!element) return\n if (column) element.setAttribute('data-review-margin', '')\n else element.removeAttribute('data-review-margin')\n return () => element.removeAttribute('data-review-margin')\n }, [area.element, column])\n\n const assistantName = useAssistantCopy().name\n const dismiss = useCallback(() => {\n setDraft(null)\n if (layout === 'compact') review.setPaneOpen(false)\n else review.setActive(null)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [layout, review.setPaneOpen, review.setActive])\n\n // A bubble closes when the reader goes back to the page, or presses Escape.\n useEffect(() => {\n const element = area.element\n if (!element || !bubbleOpen) return\n const close = (event: PointerEvent) => {\n const target = event.target\n if (\n target instanceof Element &&\n target.closest(\n '.native-docx-review-bubble, .native-docx-review-marker, .native-docx-review-add'\n )\n )\n return\n dismiss()\n }\n // Focus may still be on the symbol that opened the bubble, so Escape is heard on the whole area.\n // On the document, after React: a field that handled Escape itself (a mention list) stops it.\n const escape = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || event.defaultPrevented) return\n if (!(event.target instanceof Node) || !element.contains(event.target)) return\n // Handled: one press closes one layer, so the panel holding the document stays open.\n event.preventDefault()\n dismiss()\n }\n const document = element.ownerDocument\n element.addEventListener('pointerdown', close)\n document.addEventListener('keydown', escape)\n return () => {\n element.removeEventListener('pointerdown', close)\n document.removeEventListener('keydown', escape)\n }\n }, [area.element, bubbleOpen, dismiss])\n\n // Stack cards downward from their anchors, below the column's header, so none overlaps the one\n // above it (nor the header).\n useLayoutEffect(() => {\n if (!column) return\n const next: Record<string, number> = {}\n let floor = (toolbar.current?.offsetHeight ?? 0) + CARD_GAP\n const rows: { key: string; y: number }[] = top.map((entry) => ({\n key: entry.key,\n y: (entry.anchorY ?? 0) * scale,\n }))\n if (draft) rows.push({ key: '__draft', y: draft.anchorY * scale })\n rows.sort((a, b) => a.y - b.y)\n for (const row of rows) {\n const y = Math.max(row.y, floor)\n next[row.key] = y\n const height = elements.current.get(row.key)?.offsetHeight ?? 96\n floor = y + height + CARD_GAP\n }\n setTops((previous) => {\n const same =\n Object.keys(next).length === Object.keys(previous).length &&\n Object.entries(next).every(([key, value]) => previous[key] === value)\n return same ? previous : next\n })\n })\n\n if (!review.ready) return <div ref={anchor} className=\"native-docx-review\" />\n\n const selection = editor?.getSelectionPlacement()\n const addComment = selection && (\n <button\n type=\"button\"\n className=\"native-docx-review-add\"\n data-testid=\"review-add-comment\"\n aria-label=\"Add comment\"\n title=\"Add comment\"\n style={{ top: selection.anchorY * scale }}\n onMouseDown={(event) => event.preventDefault()}\n onClick={openDraft}\n >\n <MessageSquarePlus size={14} />\n </button>\n )\n\n if (column) {\n return (\n <div ref={anchor} className=\"native-docx-review\">\n <aside className=\"native-docx-review-pane\" data-testid=\"review-pane\" aria-label=\"Review\">\n {addComment}\n <div ref={toolbar} className=\"native-docx-review-toolbar\" data-testid=\"review-toolbar\">\n <span className=\"native-docx-review-summary\">\n {[\n changes && `${changes} ${changes === 1 ? 'change' : 'changes'}`,\n comments && `${comments} ${comments === 1 ? 'comment' : 'comments'}`,\n ]\n .filter(Boolean)\n .join(' · ') || 'Review'}\n </span>\n {hasResolved && (\n <label className=\"native-docx-review-switch\">\n <input\n type=\"checkbox\"\n data-testid=\"review-show-resolved\"\n checked={showResolved}\n onChange={(event) => setShowResolved(event.target.checked)}\n />\n Resolved\n </label>\n )}\n {changes > 0 && <BulkActions review={review} navigate />}\n </div>\n {draft && (\n <Draft\n top={tops.__draft ?? draft.anchorY * scale}\n formRef={(element) => {\n if (element) elements.current.set('__draft', element)\n }}\n onCancel={() => setDraft(null)}\n onSubmit={(text) => {\n if (review.addComment(text)) setDraft(null)\n }}\n />\n )}\n {top.map((entry) => (\n <Card\n key={entry.key}\n entry={entry}\n replies={repliesOf(entry)}\n review={review}\n extra={children?.(entry)}\n top={tops[entry.key] ?? (entry.anchorY ?? 0) * scale}\n onDismiss={dismiss}\n cardRef={(element) => {\n if (element) elements.current.set(entry.key, element)\n else elements.current.delete(entry.key)\n }}\n />\n ))}\n </aside>\n </div>\n )\n }\n\n // Margin symbols: one per cluster of nearby items, opening the margin (wide) or a bubble (compact).\n const clusters: { y: number; entries: ReviewEntry[] }[] = []\n for (const entry of [...top].sort((a, b) => (a.anchorY ?? 0) - (b.anchorY ?? 0))) {\n const y = (entry.anchorY ?? 0) * scale\n const last = clusters[clusters.length - 1]\n if (last && y - last.y < CLUSTER_GAP) last.entries.push(entry)\n else clusters.push({ y, entries: [entry] })\n }\n const shown = bubbleOpen\n ? draft\n ? null\n : (clusters.find((cluster) => cluster.entries.some((entry) => entry.isActive)) ?? clusters[0])\n : undefined\n const focus = shown?.entries.find((entry) => entry.isActive) ?? shown?.entries[0]\n const position = focus ? top.indexOf(focus) : -1\n const step = (offset: number) => {\n const next = top[position + offset]\n if (next) review.setActive(next.key)\n }\n\n return (\n <div ref={anchor} className=\"native-docx-review\">\n <div className=\"native-docx-review-markers\" data-testid=\"review-markers\">\n {addComment}\n {clusters.map((cluster) => {\n const [first] = cluster.entries\n const comment = cluster.entries.some((entry) => entry.kind === 'comment')\n return (\n <button\n key={first.key}\n type=\"button\"\n className=\"native-docx-review-marker\"\n data-testid=\"review-marker\"\n data-kind={comment ? 'comment' : first.kind}\n data-active={cluster === shown || undefined}\n aria-label={\n cluster.entries.length === 1\n ? `${authorName(first, assistantName)}: ${first.text.slice(0, 60)}`\n : `${cluster.entries.length} comments and changes`\n }\n aria-expanded={layout === 'compact' ? cluster === shown : undefined}\n style={{ top: cluster.y }}\n onClick={() => {\n if (layout === 'compact' && cluster === shown) return dismiss()\n setDraft(null)\n review.setPaneOpen(true)\n review.setActive(first.key)\n }}\n >\n {comment ? <MessageSquare size={13} /> : <PencilLine size={13} />}\n {cluster.entries.length > 1 && (\n <span className=\"native-docx-review-count\">{cluster.entries.length}</span>\n )}\n </button>\n )\n })}\n {bubbleOpen && (draft || shown || top.length === 0) && (\n <div\n className=\"native-docx-review-bubble\"\n data-testid=\"review-bubble\"\n role=\"dialog\"\n data-state=\"open\"\n aria-label=\"Review\"\n style={{\n top: (draft ? draft.anchorY * scale : (shown?.y ?? 0)) + BUBBLE_DROP,\n width: Math.max(220, Math.min(340, area.width - 56)),\n }}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n dismiss()\n }\n }}\n >\n {draft ? (\n <Draft\n onCancel={dismiss}\n onSubmit={(text) => {\n if (review.addComment(text)) setDraft(null)\n }}\n />\n ) : (\n <>\n <div className=\"native-docx-review-bubble-head\">\n {top.length > 1 && position >= 0 && (\n <>\n <button\n type=\"button\"\n className=\"native-docx-review-icon\"\n data-testid=\"review-bubble-previous\"\n aria-label=\"Previous\"\n disabled={position === 0}\n onClick={() => step(-1)}\n >\n <ChevronLeft size={14} />\n </button>\n <span className=\"native-docx-review-summary\">\n {position + 1} of {top.length}\n </span>\n <button\n type=\"button\"\n className=\"native-docx-review-icon\"\n data-testid=\"review-bubble-next\"\n aria-label=\"Next\"\n disabled={position === top.length - 1}\n onClick={() => step(1)}\n >\n <ChevronRight size={14} />\n </button>\n </>\n )}\n <button\n type=\"button\"\n className=\"native-docx-review-icon native-docx-review-close\"\n data-testid=\"review-bubble-close\"\n aria-label=\"Close\"\n onClick={dismiss}\n >\n <X size={14} />\n </button>\n </div>\n {shown?.entries.map((entry) => (\n <Card\n key={entry.key}\n entry={entry}\n replies={repliesOf(entry)}\n review={review}\n extra={children?.(entry)}\n onDismiss={dismiss}\n />\n ))}\n {!shown && (\n <p className=\"native-docx-review-empty\" data-testid=\"review-empty\">\n No comments or changes.\n </p>\n )}\n {changes > 1 && (\n <div className=\"native-docx-review-bubble-foot\">\n <BulkActions review={review} />\n </div>\n )}\n </>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n\nfunction BulkActions({ review, navigate }: { review: Review; navigate?: boolean }) {\n return (\n <div className=\"native-docx-review-bulk\">\n {navigate && (\n <span className=\"native-docx-review-segment\">\n <button\n type=\"button\"\n className=\"native-docx-review-icon\"\n data-testid=\"review-previous\"\n aria-label=\"Previous change\"\n title=\"Previous change\"\n onClick={() => review.navigate('previous')}\n >\n <ChevronUp size={14} />\n </button>\n <button\n type=\"button\"\n className=\"native-docx-review-icon\"\n data-testid=\"review-next\"\n aria-label=\"Next change\"\n title=\"Next change\"\n onClick={() => review.navigate('next')}\n >\n <ChevronDown size={14} />\n </button>\n </span>\n )}\n <button\n type=\"button\"\n className=\"native-docx-review-accept\"\n data-testid=\"review-accept-all\"\n onClick={() => review.resolveAll('accept')}\n >\n <CheckCheck size={14} />\n Accept all\n </button>\n <button\n type=\"button\"\n className=\"native-docx-review-reject\"\n data-testid=\"review-reject-all\"\n onClick={() => review.resolveAll('reject')}\n >\n <X size={14} />\n Reject all\n </button>\n </div>\n )\n}\n\nfunction ReviewCardSlot({ children }: { children?: React.ReactNode }) {\n return <div className=\"native-docx-review-extra\">{children}</div>\n}\n\nexport const DocxEditorReview = Object.assign(DocxEditorReviewRail, { Card: ReviewCardSlot })\n","import { extractMentions, type MentionCandidate } from '@arbidocs/react/shell'\n\nexport interface DocxMention {\n id: string\n name: string\n kind: 'human' | 'agent'\n}\n\n/** The assistant's name when the host names it nothing else, and what earlier comments typed. */\nconst ARBI = 'ARBI'\n\n/**\n * Who a comment can @mention: the assistant (under the host's name for it), then the people and\n * agents. The assistant's id is `arbi` whatever it is called: the request names it by id.\n */\nexport function mentionCandidates(\n mentions: readonly DocxMention[],\n assistantName: string = ARBI\n): MentionCandidate[] {\n return [\n { id: 'arbi', label: assistantName, kind: 'assistant' as const },\n ...mentions\n .filter((person) => person.name.trim())\n .map((person) => ({\n id: person.id,\n label: person.name,\n kind: person.kind === 'agent' ? ('assistant' as const) : ('user' as const),\n })),\n ]\n}\n\n/** The ids a comment @mentions; `@ARBI` still names the assistant under a host's own name. */\nexport function mentionedDocxRecipients(\n text: string,\n mentions: readonly DocxMention[],\n assistantName: string = ARBI\n): string[] {\n const candidates = mentionCandidates(mentions, assistantName)\n if (assistantName !== ARBI) candidates.push({ id: 'arbi', label: ARBI, kind: 'assistant' })\n return [...new Set(extractMentions(text, candidates).map((person) => person.id))]\n}\n","import React, { createContext, useContext, useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { useReview, useReviewItem } from './review'\nimport { authorName, isArbiAuthor } from './review/author'\nimport { commentText } from './review/commentText'\nimport { AiMarkdown, Dialog, DialogContent, DialogHeader, DialogTitle } from '@arbidocs/react/ui'\nimport { MentionMenu } from '../chat/MentionMenu'\nimport { filterMentionCandidates, findMentionQuery, useAssistantCopy } from '@arbidocs/react/shell'\nimport { mentionCandidates, mentionedDocxRecipients, type DocxMention } from './mentions'\nexport type { DocxMention } from './mentions'\n\nexport interface DocxAgentCommentRequest {\n commentId: string\n instruction: string\n requestId: string\n recipientIds: string[]\n}\n\nexport type DocxAgentRunStatus =\n 'queued' | 'in_progress' | 'completed' | 'failed' | 'cancelled' | 'incomplete'\nexport interface DocxMentionDelivery {\n responseIds: string[]\n}\ntype Activity = {\n commentId: string\n label: string\n status: DocxAgentRunStatus | 'delivering' | 'unknown'\n}\nconst ActivityContext = createContext<Record<string, Activity>>({})\n\n/** Extra card content using the upstream review context, including a full-thread reader. */\nexport function DocxCommentActivity() {\n const item = useReviewItem()\n const review = useReview()\n const activity = useContext(ActivityContext)\n const assistant = useAssistantCopy()\n const [reading, setReading] = useState(false)\n if (!item || item.kind !== 'comment') return null\n const commentId = item.parentId || item.item.id\n const thread = review.items.filter(\n (entry) =>\n entry.kind === 'comment' && (entry.item.id === commentId || entry.parentId === commentId)\n )\n const statuses = Object.entries(activity).filter(([, run]) => run.commentId === commentId)\n const labels = {\n delivering: 'Delivering mention…',\n queued: 'Queued…',\n in_progress: 'Working…',\n completed: 'Finished',\n failed: 'Failed',\n cancelled: 'Stopped',\n incomplete: 'Incomplete',\n unknown: 'Status unavailable',\n }\n return (\n <div className=\"native-docx-comment-extra\" data-review-selectable=\"\">\n {statuses.map(([id, run]) => (\n <div\n key={id}\n role=\"status\"\n data-testid=\"docx-comment-agent-status\"\n data-status={run.status}\n className=\"native-docx-comment-activity\"\n >\n {['delivering', 'queued', 'in_progress'].includes(run.status) && (\n <span className=\"native-docx-agent-spinner\" aria-hidden=\"true\" />\n )}\n {run.label}: {labels[run.status]}\n </div>\n ))}\n <button\n type=\"button\"\n data-testid=\"docx-read-full-thread\"\n onClick={(event) => {\n event.stopPropagation()\n setReading(true)\n }}\n >\n Read full thread\n </button>\n <Dialog open={reading} onOpenChange={setReading}>\n <DialogContent\n className=\"max-h-[85dvh] overflow-y-auto\"\n onClick={(event) => event.stopPropagation()}\n >\n <DialogHeader>\n <DialogTitle>Document comment</DialogTitle>\n </DialogHeader>\n {thread.map((entry) => (\n <div key={entry.key} className=\"space-y-1 border-b pb-4 last:border-0\">\n <p className=\"text-sm font-medium\">{authorName(entry, assistant.name)}</p>\n <div data-testid=\"docx-full-comment-text\">\n {/* A .docx comment anyone may have written: markdown formats, inline HTML stays text. */}\n <AiMarkdown allowHtml={false}>{commentText(entry)}</AiMarkdown>\n </div>\n </div>\n ))}\n {statuses.map(([id, run]) => (\n <p key={id} role=\"status\" className=\"text-sm\">\n {run.label}: {labels[run.status]}\n </p>\n ))}\n </DialogContent>\n </Dialog>\n </div>\n )\n}\n\n/** Adds mentions to the upstream comment inputs without replacing its review layout. */\nexport function DocxMentions({\n children,\n mentions = [],\n initialCommentId,\n requestAgent,\n getAgentStatus,\n notify,\n}: {\n children: React.ReactNode\n mentions?: readonly DocxMention[]\n initialCommentId?: string\n requestAgent?: (request: DocxAgentCommentRequest) => Promise<DocxMentionDelivery | void>\n getAgentStatus?: (responseId: string) => Promise<DocxAgentRunStatus>\n notify?: (message: string, kind: 'success' | 'error') => void\n}) {\n const review = useReview()\n const assistant = useAssistantCopy()\n const [activity, setActivity] = useState<Record<string, Activity>>({})\n const root = useRef<HTMLDivElement>(null)\n const [composers, setComposers] = useState<HTMLInputElement[]>([])\n useEffect(() => {\n const element = root.current\n if (!element || !requestAgent) return\n const discover = () => {\n const fields = Array.from(\n element.querySelectorAll<HTMLInputElement>(\n '[data-testid=\"review-draft-input\"], [data-testid=\"review-reply-input\"]'\n )\n ).filter((field) => !field.readOnly && !!field.closest('form'))\n setComposers((previous) =>\n previous.length === fields.length &&\n previous.every((field, index) => field === fields[index])\n ? previous\n : fields\n )\n }\n discover()\n const observer = new MutationObserver(discover)\n observer.observe(element, { childList: true, subtree: true })\n return () => observer.disconnect()\n }, [requestAgent])\n const prefixMention = (field: HTMLInputElement, name = assistant.name) => {\n const value = `@${name} ${field.value}`\n Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set?.call(field, value)\n field.dispatchEvent(new Event('input', { bubbles: true }))\n field.focus()\n field.setSelectionRange(value.length, value.length)\n setSuggestions(null)\n }\n const alive = useRef(true)\n useEffect(() => {\n alive.current = true\n return () => {\n alive.current = false\n }\n }, [])\n const activated = useRef<string | undefined>(undefined)\n useEffect(() => {\n if (!initialCommentId || activated.current === initialCommentId || !review.ready) return\n const target = review.items.find(\n (item) => item.kind === 'comment' && item.item.id === initialCommentId\n )\n if (!target) return\n review.setPaneOpen(true)\n if (review.setActive(target.key)) activated.current = initialCommentId\n }, [initialCommentId, review])\n const input = useRef<HTMLInputElement | null>(null)\n const replyTarget = useRef<{ field: HTMLInputElement; key: string } | null>(null)\n const pending = useRef<{\n ids: Set<string>\n text: string\n requestId: string\n recipientIds: string[]\n } | null>(null)\n const [suggestions, setSuggestions] = useState<{\n query: string\n from: number\n left: number\n top: number\n } | null>(null)\n const [selected, setSelected] = useState(0)\n const candidates = filterMentionCandidates(\n mentionCandidates(mentions, assistant.name),\n suggestions?.query || ''\n ).slice(0, 8)\n\n useEffect(() => {\n const submission = pending.current\n if (!submission || !requestAgent) return\n const created = review.items.find(\n (item) =>\n item.kind === 'comment' &&\n !submission.ids.has(item.item.id) &&\n item.text.trim() === submission.text\n )\n if (!created || created.kind !== 'comment') return\n pending.current = null\n const commentId = created.parentId || created.item.id\n const label = submission.recipientIds.includes('arbi') ? assistant.name : 'Mentioned agent'\n const update = (status: Activity['status']) => {\n if (alive.current)\n setActivity((previous) => ({\n ...previous,\n [submission.requestId]: { commentId, label, status },\n }))\n }\n // Human-only mentions deliver notifications without showing an agent spinner.\n const hasAgent = submission.recipientIds.some(\n (id) =>\n id === 'arbi' || mentions.some((person) => person.id === id && person.kind === 'agent')\n )\n if (hasAgent) update('delivering')\n void requestAgent({\n commentId,\n instruction: submission.text,\n requestId: submission.requestId,\n recipientIds: submission.recipientIds,\n })\n .then(async (delivery) => {\n if (!delivery?.responseIds.length || !getAgentStatus) {\n if (hasAgent) update('unknown')\n return\n }\n update('queued')\n while (alive.current) {\n try {\n const states = await Promise.all(delivery.responseIds.map((id) => getAgentStatus(id)))\n if (!alive.current) return\n const active =\n states.find((status) => status === 'in_progress') ||\n states.find((status) => status === 'queued')\n const status = active || states.find((status) => status !== 'completed') || 'completed'\n update(status)\n if (!active) return\n } catch {\n // A polling failure is not proof that the agent failed.\n update('unknown')\n }\n await new Promise((resolve) => setTimeout(resolve, 2000))\n }\n })\n .catch((error: unknown) => {\n if (hasAgent) update('failed')\n notify?.(\n error instanceof Error ? error.message : 'Could not start the document agent.',\n 'error'\n )\n })\n }, [review.items, requestAgent, getAgentStatus, mentions, notify, assistant.name])\n\n const choose = (name: string) => {\n const field = input.current\n if (!field || !suggestions) return\n const end = field.selectionStart ?? field.value.length\n const value = field.value.slice(0, suggestions.from) + '@' + name + ' ' + field.value.slice(end)\n // The native setter and input event preserve the upstream controlled input's state.\n Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set?.call(field, value)\n field.dispatchEvent(new Event('input', { bubbles: true }))\n field.focus()\n field.setSelectionRange(suggestions.from + name.length + 2, suggestions.from + name.length + 2)\n setSuggestions(null)\n }\n const captureSubmission = (target: EventTarget): boolean => {\n const form = (target as HTMLElement).closest('form')\n const field = form?.querySelector<HTMLInputElement>(\n '[data-testid=\"review-draft-input\"], [data-testid=\"review-reply-input\"]'\n )\n if (!field || field.readOnly || !requestAgent) return false\n const recipientIds = mentionedDocxRecipients(field.value, mentions, assistant.name)\n if (!recipientIds.length) return false\n pending.current = {\n ids: new Set(review.items.filter((i) => i.kind === 'comment').map((i) => i.item.id)),\n text: field.value.trim(),\n requestId: `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,\n recipientIds,\n }\n // The engine may move its caret to an overlapping tracked revision while\n // an input selection changes. Bind a mentioned reply to the card where\n // composition started, rather than whichever range happens to be active.\n const pinned = replyTarget.current\n const thread = pinned\n ? review.items.find((item) => item.key === pinned.key && item.kind === 'comment')\n : undefined\n if (field.dataset.testid === 'review-reply-input' && pinned && !thread) {\n pending.current = null\n notify?.('This comment was removed. Open a current thread before replying.', 'error')\n return true\n }\n if (field.dataset.testid === 'review-reply-input' && thread) {\n if (!review.reply(thread, field.value.trim())) {\n pending.current = null\n notify?.('Could not post this reply. The comment may have been removed.', 'error')\n } else {\n Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set?.call(field, '')\n field.dispatchEvent(new Event('input', { bubbles: true }))\n replyTarget.current = null\n review.setActive(thread.key, { reveal: false })\n }\n return true\n }\n return false\n }\n return (\n <ActivityContext.Provider value={activity}>\n <div\n className=\"native-docx-mentions\"\n ref={root}\n onFocusCapture={(event) => {\n const field = event.target\n if (\n !(field instanceof HTMLInputElement) ||\n field.dataset.testid !== 'review-reply-input' ||\n field.value ||\n !requestAgent\n )\n return\n const target = review.items.find(\n (entry) => entry.key === review.activeKey && entry.kind === 'comment'\n )\n if (!target || target.kind !== 'comment') return\n const commentId = target.parentId || target.item.id\n const replies = review.items.filter(\n (entry) => entry.kind === 'comment' && entry.parentId === commentId\n )\n const last = replies.at(-1) ?? target\n const agent = mentions.find(\n (person) => person.kind === 'agent' && person.name === last.author\n )\n if (agent || isArbiAuthor(last))\n prefixMention(\n field,\n isArbiAuthor(last) ? assistant.name : agent?.name || assistant.name\n )\n }}\n onInputCapture={(event) => {\n const field = event.target\n if (!(field instanceof HTMLInputElement) || !field.dataset.testid?.startsWith('review-'))\n return\n if (!replyTarget.current && review.activeKey)\n replyTarget.current = { field, key: review.activeKey }\n input.current = field\n const before = field.value.slice(0, field.selectionStart ?? field.value.length)\n const match = findMentionQuery(before, before.length)\n if (!match) return setSuggestions(null)\n const rect = field.getBoundingClientRect()\n setSelected(0)\n setSuggestions({\n query: match.query,\n from: match.start,\n left: rect.left,\n top: rect.bottom,\n })\n }}\n onPointerDownCapture={(event) => {\n const target = event.target\n if (\n target instanceof HTMLElement &&\n target.closest('[data-testid=\"review-marker\"], [data-testid=\"review-reply-cancel\"]')\n )\n replyTarget.current = null\n }}\n onSubmitCapture={(event) => {\n if (captureSubmission(event.target)) {\n event.preventDefault()\n event.stopPropagation()\n }\n }}\n onKeyDownCapture={(event) => {\n if (suggestions && candidates.length) {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault()\n event.stopPropagation()\n setSelected(\n (s) =>\n (s + (event.key === 'ArrowDown' ? 1 : candidates.length - 1)) % candidates.length\n )\n return\n }\n if (event.key === 'Enter' || event.key === 'Tab') {\n event.preventDefault()\n event.stopPropagation()\n choose(candidates[selected]?.label || candidates[0].label)\n return\n }\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n setSuggestions(null)\n return\n }\n }\n if (event.key === 'Enter' && captureSubmission(event.target)) {\n event.preventDefault()\n event.stopPropagation()\n }\n }}\n >\n {children}\n {composers\n .filter((field) => field.isConnected && field.closest('form'))\n .map((field, index) =>\n createPortal(\n <button\n type=\"button\"\n className=\"native-docx-include-arbi\"\n data-testid=\"docx-include-arbi\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={(event) => {\n event.stopPropagation()\n if (\n !mentionedDocxRecipients(field.value, mentions, assistant.name).includes('arbi')\n )\n prefixMention(field)\n else field.focus()\n }}\n >\n {assistant.include}\n </button>,\n field.closest('form')!,\n `mention-${index}`\n )\n )}\n {suggestions && candidates.length > 0 && (\n <div\n onPointerDown={(event) => event.stopPropagation()}\n onMouseDown={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n onClick={(event) => event.stopPropagation()}\n style={{\n position: 'fixed',\n left: suggestions.left,\n top: suggestions.top,\n width: 280,\n zIndex: 1000,\n }}\n >\n <MentionMenu\n open\n placement=\"below\"\n items={candidates}\n selectedIndex={selected}\n setSelectedIndex={setSelected}\n onSelect={(person) => choose(person.label)}\n labels={{ list: 'Mention workspace member' }}\n />\n </div>\n )}\n </div>\n </ActivityContext.Provider>\n )\n}\n","import { formatRefusal } from '@arbidocs/coedit'\n\nconst RELOADED_AT = 'arbi-coedit-update-reload'\nconst RELOAD_GAP_MS = 60_000\nconst RETRY_MS = 30_000\n\n/**\n * The collaboration server refused this editor because it runs another room format (frontend and\n * server are deployed as a pair, so this only happens while an update rolls out). A newer server:\n * reload into the matching editor, at most once a minute so a not-yet-updated bundle cannot loop.\n * An older server, or a reload just done: try joining again shortly. Returns a cancel function when\n * the reason was such a refusal, else null.\n */\nexport function awaitMatchingEditor(\n reason: string | undefined,\n retry: () => void\n): (() => void) | null {\n const refusal = formatRefusal(reason)\n if (!refusal) return null\n let reloadedAt = 0\n try {\n reloadedAt = Number(sessionStorage.getItem(RELOADED_AT)) || 0\n } catch {\n /* No session storage: retry instead of reloading. */\n reloadedAt = Date.now()\n }\n if (refusal.serverNewer && Date.now() - reloadedAt > RELOAD_GAP_MS) {\n try {\n sessionStorage.setItem(RELOADED_AT, String(Date.now()))\n } catch {\n /* Reload anyway. */\n }\n window.location.reload()\n return () => {}\n }\n const timer = setTimeout(retry, RETRY_MS)\n return () => clearTimeout(timer)\n}\n","/**\n * Defined-term content as WordprocessingML, and the clipboard HTML that carries it into the editor:\n * shared with the collaboration service (see `@arbidocs/coedit/commands`).\n */\n\nimport { fragmentPackage } from '@arbidocs/coedit/commands'\nimport type { Revision } from '@arbidocs/coedit/template'\n\nexport { definitionParagraphText, stylesUsed } from '@arbidocs/coedit/commands'\n\nfunction base64(bytes: Uint8Array): string {\n let binary = ''\n for (let i = 0; i < bytes.length; i += 0x8000)\n binary += String.fromCharCode(...bytes.subarray(i, i + 0x8000))\n return btoa(binary)\n}\n\n/**\n * Clipboard HTML carrying `body` (paragraph XML) as the editor's own fragment. `covered` says the\n * last paragraph mark is part of it: the paste then ends with a whole paragraph (a block inserted\n * before the caret's paragraph) instead of running into the text after the caret (inline).\n * With a `revision`, the fragment is one tracked insertion by it.\n */\nexport function fragmentHtml(\n body: string,\n covered: boolean,\n options: {\n revision?: Revision | null\n /** Relationships the body refers to (a hyperlink's target). */\n relationships?: string\n /** The character styles to bring (default: every one the body uses). */\n styles?: readonly string[]\n } = {}\n): string {\n return `<div data-docx-fragment=\"${base64(fragmentPackage(body, covered, options))}\" data-docx-fragment-end=\"${\n covered ? 'covered' : 'open'\n }\"></div>`\n}\n","/**\n * The few things the defined-term commands need from a live Word editor, behind an interface so\n * the commands are tested against a small in-memory model rather than the engine.\n */\n\nimport type { DocxEditorInstance } from '@docx-editor.dev/core'\nimport type { Revision } from '@arbidocs/coedit/template'\nimport {\n documentStyleIds,\n readParagraphs,\n type DefinitionsPort,\n type OoxmlNodeLike,\n} from '@arbidocs/coedit/commands'\nimport { fragmentHtml, stylesUsed } from './fragment'\n\n// The paragraph reader is shared with the collaboration service (ARBI's headless tools).\nexport {\n documentStyleIds,\n readParagraphs,\n type DefinitionsPort,\n type DocField,\n type DocMark,\n type DocParagraph,\n type DocPoint,\n type OoxmlNodeLike,\n} from '@arbidocs/coedit/commands'\n\n/**\n * The port over a live editor. Writes go through the editor's own commands and paste; with a\n * `revision`, what it pastes is a tracked insertion by it (see `trackedOrNoted`).\n */\nexport function editorPort(\n editor: DocxEditorInstance,\n revision?: Revision | null\n): DefinitionsPort {\n const surface = () => {\n const s = editor.surface\n if (!s) throw new Error('The document is not open.')\n return s\n }\n return {\n paragraphs: () => readParagraphs(surface().session.part().root as unknown as OoxmlNodeLike),\n caret: () => {\n const selection = surface().state().selection\n if (!selection) return null\n const { anchor, head } = selection\n return anchor.paragraphId === head.paragraphId && anchor.offset === head.offset\n ? { paragraphId: anchor.paragraphId, offset: anchor.offset }\n : null\n },\n setCaret: (point) => surface().setSelection({ anchor: point, head: point }),\n deleteRange: (from, to) => {\n surface().setSelection({ anchor: from, head: to })\n surface().deleteSelection()\n },\n paste: (body, text, covered, relationships) => {\n // Styles the document already defines (a house template's) are used as they are.\n const defined = documentStyleIds(surface().session.stylesRoot() as unknown as OoxmlNodeLike)\n const styles = stylesUsed(body).filter((id) => !defined.has(id))\n return editor.exec({\n type: 'paste',\n text,\n html: fragmentHtml(body, covered, { revision, relationships, styles }),\n }).ok\n },\n splitParagraph: () => surface().splitParagraph(),\n typeText: (text) => surface().insertPlainText(text),\n }\n}\n\n/**\n * Run `fn` with direct editing. The engine pastes rich content (bookmarks, links) only outside\n * Suggesting mode, so a suggesting editor switches for the command and back; a read-only one refuses.\n */\nexport function withDirectEditing<T>(editor: DocxEditorInstance, fn: () => T): T {\n const mode = editor.getEditingMode()\n if (mode === 'viewing') throw new Error('This document is read only.')\n if (mode === 'suggesting') editor.setEditingMode('editing')\n try {\n return fn()\n } finally {\n if (mode === 'suggesting') editor.setEditingMode('suggesting')\n }\n}\n\n/**\n * Keep the caret where a command left it while the collaboration room settles after the command.\n *\n * A paste lands as a package-level write; in a collaboration room the engine then re-installs the\n * document, numbering its paragraph nodes afresh. Keystrokes typed in between would address the\n * old nodes and be lost, so for a moment (until the document has been quiet for `settleMs`, at most\n * `maxMs`) typed characters are held back; then the caret is put back on its paragraph — found by\n * its `w14:paraId`, which survives the re-install — and what was typed goes in there. Any other key\n * or a click ends the wait at once.\n */\nexport function holdCaret(\n editor: DocxEditorInstance,\n { settleMs = 600, maxMs = 2000 }: { settleMs?: number; maxMs?: number } = {}\n): void {\n const surface = editor.surface\n const selection = surface?.state().selection\n if (!surface || !selection) return\n const { offset } = selection.head\n const paraId = surface.session.paraIdOf(selection.head.paragraphId)\n if (!paraId) return\n let typed = ''\n let done = false\n let settle: ReturnType<typeof setTimeout>\n const stop = () => {\n done = true\n offChange()\n clearTimeout(settle)\n clearTimeout(limit)\n window.removeEventListener('keydown', key, true)\n window.removeEventListener('pointerdown', click, true)\n }\n const finish = () => {\n if (done) return\n stop()\n const node = surface.session.nodeIdOf(paraId)\n if (!node) return\n const point = { paragraphId: node, offset }\n surface.setSelection({ anchor: point, head: point })\n if (typed) surface.insertPlainText(typed)\n }\n const key = (event: KeyboardEvent) => {\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n event.preventDefault()\n event.stopPropagation()\n typed += event.key\n return\n }\n finish()\n }\n const click = () => {\n if (typed) finish()\n else stop()\n }\n const quiet = () => {\n clearTimeout(settle)\n settle = setTimeout(finish, settleMs)\n }\n const offChange = editor.on('change', quiet)\n window.addEventListener('keydown', key, true)\n window.addEventListener('pointerdown', click, true)\n settle = setTimeout(finish, settleMs)\n const limit = setTimeout(finish, maxMs)\n}\n\n/**\n * Run `fn` (an edit elsewhere in the document) and put the caret back where it was: on its\n * paragraph, found by its `w14:paraId` (which survives the edits), at the same offset.\n */\nexport function preservingCaret<T>(editor: DocxEditorInstance, fn: () => T): T {\n const surface = editor.surface\n const before = surface?.state().selection?.head\n const paraId = before && surface?.session.paraIdOf(before.paragraphId)\n const result = fn()\n const node = paraId && surface?.session.nodeIdOf(paraId)\n if (before && node) {\n const point = { paragraphId: node, offset: before.offset }\n surface.setSelection({ anchor: point, head: point })\n holdCaret(editor)\n }\n return result\n}\n","/**\n * \"Undo\" on the comment ARBI leaves on a change it applied directly (a style, a format, a table's\n * properties, the page setup, refreshed fields: changes that cannot be tracked). The room keeps\n * what each such change replaced, keyed by its comment id; Undo puts exactly that back, then\n * resolves the comment. The collaboration service's `undo` action does the same from the agent.\n */\nimport { createContext, useContext, useEffect, useReducer, useState } from 'react'\nimport type * as Y from 'yjs'\nimport { useDocxEditor } from '@docx-editor.dev/react'\nimport {\n AGENT_UNDO_MAP,\n undoOps,\n type OoxmlNodeLike,\n type UndoRecord,\n} from '@arbidocs/coedit/commands'\nimport { useReview, useReviewItem } from './review'\nimport { withDirectEditing } from './definitions/port'\n\n/** The collaboration room's document, where the undo records live (none outside a room). */\nexport const AgentUndoRoom = createContext<Y.Doc | null>(null)\n\nexport function AgentUndo() {\n const item = useReviewItem()\n const review = useReview()\n const editor = useDocxEditor()\n const room = useContext(AgentUndoRoom)\n const records = room?.getMap<UndoRecord>(AGENT_UNDO_MAP)\n const [, changed] = useReducer((n: number) => n + 1, 0)\n const [error, setError] = useState('')\n useEffect(() => {\n if (!records) return\n records.observe(changed)\n return () => records.unobserve(changed)\n }, [records])\n if (!item || item.kind !== 'comment' || item.parentId || !records) return null\n const id = item.item.id\n const record = records.get(id)\n if (!record) return null\n const undo = () => {\n const surface = editor?.surface\n if (!editor || !surface) return\n const ops = undoOps(surface.session.part().root as unknown as OoxmlNodeLike, record)\n if (!ops) return setError('What this changed is no longer in the document.')\n let applied = false\n try {\n applied = withDirectEditing(editor, () => surface.applyAutomationOps(() => ops)).committed\n } catch {\n /* read only */\n }\n if (!applied) return setError('This change could not be undone.')\n records.delete(id)\n review.resolve(item, true)\n }\n return (\n <div className=\"native-docx-comment-extra\" data-review-selectable=\"\">\n <button\n type=\"button\"\n data-testid=\"docx-agent-undo\"\n onClick={(event) => {\n event.stopPropagation()\n undo()\n }}\n >\n Undo\n </button>\n {error && (\n <p role=\"status\" className=\"native-docx-comment-activity\">\n {error}\n </p>\n )}\n </div>\n )\n}\n","/**\n * A card over a painted link in the Word editor, for the links a feature inserts: a defined term\n * shows its definition, a cross-reference the text it points at. The link's own tooltip (what Word\n * shows on hover) is held back while the card shows. Typing, clicking or scrolling hides it, since\n * a repaint can replace the link under the pointer without a mouseout.\n */\n\nimport React, { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport interface LinkHoverContent {\n title?: string\n body: string\n footer?: string\n}\n\nexport interface LinkHoverCardProps {\n /** The element the painted pages are inside (the editor). */\n root: Element | null\n /** Whether this card handles a link (by its `href`). */\n matches: (href: string, link: HTMLAnchorElement) => boolean\n /** The card's content for a link, or null to show the link's own tooltip. */\n resolve: (href: string) => LinkHoverContent | null | undefined\n /** Called on the first hover (e.g. to load what `resolve` reads). */\n onFirstHover?: () => void\n testId: string\n}\n\nexport function LinkHoverCard({\n root,\n matches,\n resolve,\n onFirstHover,\n testId,\n}: LinkHoverCardProps) {\n const [card, setCard] = useState<{\n left: number\n top: number\n href: string\n fallback: string\n } | null>(null)\n const hovered = useRef(false)\n const latest = useRef({ matches, onFirstHover })\n latest.current = { matches, onFirstHover }\n useEffect(() => {\n if (!root) return\n const over = (event: Event) => {\n const link = (event.target as Element | null)?.closest?.(\n 'a.docx-hyperlink'\n ) as HTMLAnchorElement | null\n const href = link?.getAttribute('href') ?? ''\n if (!link || !href || !latest.current.matches(href, link)) return\n if (!hovered.current) {\n hovered.current = true\n latest.current.onFirstHover?.()\n }\n const title = link.getAttribute('title')\n if (title) {\n link.dataset.hoverTitle = title\n link.removeAttribute('title')\n }\n const rect = link.getBoundingClientRect()\n setCard({\n left: rect.left,\n top: rect.bottom + 6,\n href,\n fallback: link.dataset.hoverTitle ?? '',\n })\n }\n const out = (event: Event) => {\n const link = (event.target as Element | null)?.closest?.('a.docx-hyperlink')\n if (link && !link.contains((event as MouseEvent).relatedTarget as Node)) setCard(null)\n }\n const hide = () => setCard(null)\n root.addEventListener('mouseover', over)\n root.addEventListener('mouseout', out)\n window.addEventListener('keydown', hide, true)\n window.addEventListener('pointerdown', hide, true)\n window.addEventListener('scroll', hide, true)\n return () => {\n root.removeEventListener('mouseover', over)\n root.removeEventListener('mouseout', out)\n window.removeEventListener('keydown', hide, true)\n window.removeEventListener('pointerdown', hide, true)\n window.removeEventListener('scroll', hide, true)\n }\n }, [root])\n if (!card) return null\n const content = resolve(card.href)\n if (!content && !card.fallback) return null\n return createPortal(\n <div\n role=\"tooltip\"\n className=\"native-docx-link-card rounded-md border border-border bg-popover p-3 text-sm text-popover-foreground shadow-lg\"\n style={{\n position: 'fixed',\n left: Math.max(8, Math.min(card.left, window.innerWidth - 348)),\n top: card.top,\n width: 340,\n zIndex: 1000,\n pointerEvents: 'none',\n }}\n data-testid={testId}\n >\n {content ? (\n <>\n {content.title && <p className=\"font-medium\">{content.title}</p>}\n <p className={content.title ? 'mt-1 text-muted-foreground' : undefined}>{content.body}</p>\n {content.footer && <p className=\"mt-2 text-xs text-muted-foreground\">{content.footer}</p>}\n </>\n ) : (\n <p>{card.fallback}</p>\n )}\n </div>,\n document.body\n )\n}\n","/**\n * Defined terms in the Word editor: a type-ahead of the workspace's definitions (typing `@@` in the\n * body, or Insert › Defined term) and a hover card on an inserted term. Mount\n * `DefinedTermsProvider` inside `DocxEditor.Root`; the ribbon's buttons read it from context.\n */\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { useDocxEditor } from '@docx-editor.dev/react'\nimport { cn } from '@arbidocs/react/ui'\nimport { listOptionId } from '../../lib/useListKeyNav'\nimport {\n definitionLabels,\n filterTermGroups,\n groupDefinitions,\n type DefinedTermGroup,\n type Definition,\n type DefinitionSource,\n} from '../../tags/definitions'\nimport { definitionOfAnchor, insertDefinedTerm } from './commands'\nimport { LinkHoverCard } from '../LinkHoverCard'\nimport { editorPort, holdCaret, withDirectEditing, type DocPoint } from './port'\nimport { useTrackedOrNoted } from '../structural/useTrackedOrNoted'\n\n/** Typing this in the body opens the type-ahead. */\nexport const DEFINED_TERM_TRIGGER = '@@'\n/** `@@` then up to 40 characters of query, at the caret, after a word boundary. */\nconst TRIGGER_QUERY = /(?:^|[\\s([{\"“‘'])@@([^@\\n\\t]{0,40})$/\nconst MAX_GROUPS = 8\n/** Definitions are read again when the picker opens after this long. */\nconst STALE_AFTER_MS = 30_000\n\nexport interface DefinedTermsLabels {\n insert: string\n search: string\n allAgreements: string\n loading: string\n empty: string\n noMatch: string\n hint: string\n preferred: string\n alsoIn: (source: string) => string\n}\n\nexport const DEFAULT_DEFINED_TERMS_LABELS: DefinedTermsLabels = {\n insert: 'Defined term',\n search: 'Search defined terms',\n allAgreements: 'All definitions',\n loading: 'Loading definitions…',\n empty: 'No definitions yet. Label a fact “Definitions” to use it here.',\n noMatch: 'No defined term matches.',\n hint: 'Enter to insert · Esc to close',\n preferred: 'Preferred',\n alsoIn: (source) => `Also defined${source ? ` in ${source}` : ''}`,\n}\n\ninterface DefinedTermsContextValue {\n /** Open the type-ahead at the caret, with a search box. */\n openPicker: (anchor?: HTMLElement | null) => void\n labels: DefinedTermsLabels\n}\n\nconst DefinedTermsContext = createContext<DefinedTermsContextValue | null>(null)\n\n/** The defined-term commands, or `null` where the editor has no definitions to offer. */\nexport const useDefinedTerms = () => useContext(DefinedTermsContext)\n\ninterface PickerState {\n mode: 'typing' | 'search'\n query: string\n left: number\n top: number\n /** Where the term goes (search mode: the caret when the picker opened). */\n caret: DocPoint | null\n}\n\n/** One row of the type-ahead: a definition of a term (the preferred one first in its group). */\ninterface Row {\n group: DefinedTermGroup\n definition: Definition\n variant: boolean\n}\n\nfunction rowsOf(groups: readonly DefinedTermGroup[]): Row[] {\n return groups.flatMap((group) =>\n group.definitions.map((definition, i) => ({ group, definition, variant: i > 0 }))\n )\n}\n\nconst sourceOf = (d: Definition) =>\n [d.source, ...(d.labels ?? []).map((l) => l.name)].filter(Boolean).join(' · ')\n\nexport interface DefinedTermsProviderProps {\n children: React.ReactNode\n /** The workspace's definition facts. Absent: no defined-term features. */\n load?: () => Promise<DefinitionSource[]>\n /** Editing is possible (not a snapshot, a stream or a read-only document). */\n editable: boolean\n notify?: (message: string, kind: 'success' | 'error') => void\n labels?: Partial<DefinedTermsLabels>\n}\n\nexport function DefinedTermsProvider({\n children,\n load,\n editable,\n notify,\n labels,\n}: DefinedTermsProviderProps) {\n const editor = useDocxEditor()\n const track = useTrackedOrNoted()\n const l = useMemo(() => ({ ...DEFAULT_DEFINED_TERMS_LABELS, ...labels }), [labels])\n const [sources, setSources] = useState<DefinitionSource[] | null>(null)\n const loadedAt = useRef(0)\n const loading = useRef<Promise<DefinitionSource[]> | null>(null)\n const [labelId, setLabelId] = useState<string | null>(null)\n const [picker, setPicker] = useState<PickerState | null>(null)\n const [selected, setSelected] = useState(0)\n const marker = useRef<HTMLSpanElement>(null)\n const dismissedAt = useRef<string | null>(null)\n\n const refresh = useCallback(\n (force = false): Promise<DefinitionSource[]> => {\n if (!load) return Promise.resolve([])\n if (!force && sources && Date.now() - loadedAt.current < STALE_AFTER_MS)\n return Promise.resolve(sources)\n if (!loading.current)\n loading.current = load()\n .then((list) => {\n loadedAt.current = Date.now()\n setSources(list)\n return list\n })\n .catch((error: unknown) => {\n notify?.(\n error instanceof Error ? error.message : 'Could not load definitions.',\n 'error'\n )\n // Stop showing \"Loading…\": the picker offers what it had, or nothing.\n setSources((previous) => previous ?? [])\n return sources ?? []\n })\n .finally(() => {\n loading.current = null\n })\n return loading.current\n },\n [load, sources, notify]\n )\n\n const all = useMemo(() => groupDefinitions(sources ?? []).groups, [sources])\n const byId = useMemo(\n () => new Map(all.flatMap((g) => g.definitions).map((d) => [d.id, d] as const)),\n [all]\n )\n const agreements = useMemo(() => definitionLabels(sources ?? []), [sources])\n const groups = useMemo(\n () =>\n picker\n ? filterTermGroups(groupDefinitions(sources ?? [], { labelId }).groups, picker.query).slice(\n 0,\n MAX_GROUPS\n )\n : [],\n [sources, labelId, picker]\n )\n const rows = useMemo(() => rowsOf(groups), [groups])\n useEffect(() => setSelected(0), [picker?.query, labelId])\n\n const container = () => marker.current?.closest('.native-docx-viewer') ?? document.body\n const [viewer, setViewer] = useState<Element | null>(null)\n useEffect(() => setViewer(container()), [])\n const refreshRef = useRef(refresh)\n refreshRef.current = refresh\n const firstHover = useCallback(() => void refreshRef.current(), [])\n const caretRect = () =>\n container().querySelector('.docx-editor-one-surface__caret')?.getBoundingClientRect()\n\n const attempt = useCallback(\n <T,>(fn: () => T): T | undefined => {\n try {\n return fn()\n } catch (error) {\n notify?.(error instanceof Error ? error.message : 'Could not change the document.', 'error')\n return undefined\n }\n },\n [notify]\n )\n const run = useCallback(\n <T,>(fn: () => T): T | undefined =>\n editor ? attempt(() => withDirectEditing(editor, fn)) : undefined,\n [editor, attempt]\n )\n\n /** How many characters the typed `@@query` takes before the caret, read from the document now\n * (the last keystroke may not have reached the picker's query yet). */\n const typedTrigger = (port: ReturnType<typeof editorPort>) => {\n if (picker?.mode !== 'typing') return 0\n const caret = port.caret()\n const paragraph = caret && port.paragraphs().find((p) => p.id === caret.paragraphId)\n const match = paragraph && TRIGGER_QUERY.exec(paragraph.text.slice(0, caret.offset))\n return match ? DEFINED_TERM_TRIGGER.length + match[1].length : 0\n }\n\n const pick = useCallback(\n (row: Row | undefined) => {\n if (!editor || !picker || !row) return\n const port = editorPort(editor)\n // To the caret the search kept, or over the typed `@@query`: the person's own typing, taken\n // out rather than suggested for deletion.\n const placed = run(() => {\n if (picker.mode === 'search' && picker.caret) port.setCaret(picker.caret)\n const caret = port.caret()\n if (!caret) throw new Error('Place the cursor where the term should go.')\n const typed = typedTrigger(port)\n if (typed) port.deleteRange({ ...caret, offset: Math.max(0, caret.offset - typed) }, caret)\n return true\n })\n const result = placed\n ? attempt(\n () =>\n track({\n label: `Inserted defined term: ${row.definition.term}`,\n insert: (revision) =>\n insertDefinedTerm(editorPort(editor, revision), row.definition),\n })?.result\n )\n : undefined\n setPicker(null)\n editor.surface?.focus()\n if (result) holdCaret(editor)\n if (result?.addedDefinition)\n notify?.(`“${row.definition.term}” added to the Definitions section.`, 'success')\n },\n [editor, picker, run, attempt, track, notify]\n )\n\n const openPicker = useCallback(\n (anchor?: HTMLElement | null) => {\n if (!editor || !editable) return\n const caret = editorPort(editor).caret()\n const rect = caretRect() ?? anchor?.getBoundingClientRect()\n void refresh()\n setPicker({\n mode: 'search',\n query: '',\n left: rect?.left ?? 120,\n top: (rect?.bottom ?? 120) + 4,\n caret,\n })\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [editor, editable, refresh]\n )\n\n // Typing `@@` in the body opens the type-ahead; what follows narrows it.\n useEffect(() => {\n if (!editor || !editable || !load) return\n let frame = 0\n const check = () => {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n const port = editorPort(editor)\n const caret = port.caret()\n const paragraph = caret && port.paragraphs().find((p) => p.id === caret.paragraphId)\n const match = paragraph && TRIGGER_QUERY.exec(paragraph.text.slice(0, caret.offset))\n setPicker((current) => {\n if (current?.mode === 'search') return current\n if (!match || !caret) return null\n const key = `${caret.paragraphId}:${caret.offset - match[1].length}`\n if (dismissedAt.current === key) return null\n const rect = caretRect()\n return {\n mode: 'typing',\n query: match[1],\n left: current?.left ?? rect?.left ?? 120,\n top: current?.top ?? (rect?.bottom ?? 120) + 4,\n caret,\n }\n })\n if (match) void refresh()\n })\n }\n const offChange = editor.on('change', check)\n const offSelection = editor.on('selectionChange', check)\n return () => {\n cancelAnimationFrame(frame)\n offChange()\n offSelection()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor, editable, load, refresh])\n\n // While the type-ahead is open from typing, the arrows, Enter, Tab and Esc drive it.\n useEffect(() => {\n if (picker?.mode !== 'typing') return\n const keys = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n dismissedAt.current = picker.caret\n ? `${picker.caret.paragraphId}:${picker.caret.offset - picker.query.length}`\n : null\n setPicker(null)\n } else if (!rows.length) return\n else if (event.key === 'ArrowDown') setSelected((i) => (i + 1) % rows.length)\n else if (event.key === 'ArrowUp') setSelected((i) => (i - 1 + rows.length) % rows.length)\n else if (event.key === 'Enter' || event.key === 'Tab') pick(rows[selected] ?? rows[0])\n else return\n event.preventDefault()\n event.stopPropagation()\n }\n window.addEventListener('keydown', keys, true)\n return () => window.removeEventListener('keydown', keys, true)\n }, [picker, rows, selected, pick])\n\n const value = useMemo<DefinedTermsContextValue | null>(\n () => (load && editable ? { openPicker, labels: l } : null),\n [load, editable, openPicker, l]\n )\n\n return (\n <DefinedTermsContext.Provider value={value}>\n <span ref={marker} hidden />\n {children}\n {load && (\n <LinkHoverCard\n root={viewer}\n matches={(href) => href.startsWith('#_dt_')}\n resolve={(href) => {\n const definition = definitionOfAnchor(href, byId)\n return definition\n ? { title: definition.term, body: definition.meaning, footer: sourceOf(definition) }\n : null\n }}\n onFirstHover={firstHover}\n testId=\"docx-defined-term-card\"\n />\n )}\n {picker &&\n createPortal(\n <DefinedTermMenu\n picker={picker}\n rows={rows}\n loading={sources === null}\n selected={selected}\n setSelected={setSelected}\n agreements={agreements}\n labelId={labelId}\n setLabelId={setLabelId}\n onQuery={(query) => setPicker((p) => (p ? { ...p, query } : p))}\n onPick={pick}\n onClose={() => {\n setPicker(null)\n editor?.surface?.focus()\n }}\n labels={l}\n />,\n document.body\n )}\n </DefinedTermsContext.Provider>\n )\n}\n\nfunction DefinedTermMenu({\n picker,\n rows,\n loading,\n selected,\n setSelected,\n agreements,\n labelId,\n setLabelId,\n onQuery,\n onPick,\n onClose,\n labels: l,\n}: {\n picker: PickerState\n rows: Row[]\n loading: boolean\n selected: number\n setSelected: (i: number) => void\n agreements: { id: string; name: string }[]\n labelId: string | null\n setLabelId: (id: string | null) => void\n onQuery: (q: string) => void\n onPick: (row: Row | undefined) => void\n onClose: () => void\n labels: DefinedTermsLabels\n}) {\n const listboxId = React.useId()\n const element = useRef<HTMLDivElement>(null)\n const search = picker.mode === 'search'\n useEffect(() => {\n const dismiss = (event: PointerEvent) => {\n if (!element.current?.contains(event.target as Node)) onClose()\n }\n document.addEventListener('pointerdown', dismiss)\n return () => document.removeEventListener('pointerdown', dismiss)\n }, [onClose])\n useEffect(() => {\n element.current\n ?.querySelector(`[data-index=\"${selected}\"]`)\n ?.scrollIntoView?.({ block: 'nearest' })\n }, [selected])\n const left = Math.max(8, Math.min(picker.left, window.innerWidth - 368))\n return (\n <div\n ref={element}\n className=\"native-docx-term-menu rounded-md border border-border bg-popover text-popover-foreground shadow-lg\"\n style={{ position: 'fixed', left, top: picker.top, width: 360, zIndex: 1000 }}\n data-testid=\"docx-defined-term-menu\"\n onMouseDown={(event) => {\n if (!(\n event.target instanceof HTMLInputElement || event.target instanceof HTMLSelectElement\n ))\n event.preventDefault()\n }}\n >\n {(search || agreements.length > 0) && (\n <div className=\"flex items-center gap-2 border-b border-border/50 p-2\">\n {search && (\n <input\n autoFocus\n className=\"min-w-0 flex-1 rounded border border-border bg-background px-2 py-1 text-sm\"\n placeholder={l.search}\n aria-label={l.search}\n role=\"combobox\"\n aria-expanded\n aria-controls={listboxId}\n aria-activedescendant={rows.length ? listOptionId(listboxId, selected) : undefined}\n value={picker.query}\n data-testid=\"docx-defined-term-search\"\n onChange={(event) => onQuery(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Escape') onClose()\n else if (!rows.length) return\n else if (event.key === 'ArrowDown') setSelected((selected + 1) % rows.length)\n else if (event.key === 'ArrowUp')\n setSelected((selected - 1 + rows.length) % rows.length)\n else if (event.key === 'Enter') onPick(rows[selected] ?? rows[0])\n else return\n event.preventDefault()\n }}\n />\n )}\n {agreements.length > 0 && (\n <select\n className=\"max-w-[45%] rounded border border-border bg-background px-1 py-1 text-xs\"\n aria-label=\"Narrow to\"\n value={labelId ?? ''}\n data-testid=\"docx-defined-term-label\"\n onChange={(event) => setLabelId(event.target.value || null)}\n >\n <option value=\"\">{l.allAgreements}</option>\n {agreements.map((a) => (\n <option key={a.id} value={a.id}>\n {a.name}\n </option>\n ))}\n </select>\n )}\n </div>\n )}\n <div className=\"border-b border-border/50 px-3 py-1.5 text-xs text-muted-foreground\">\n {l.hint}\n </div>\n <div\n id={listboxId}\n role=\"listbox\"\n aria-label={l.search}\n className=\"scrollbar-subtle max-h-72 overflow-y-auto py-1\"\n >\n {rows.length === 0 && (\n <p className=\"px-3 py-2 text-sm text-muted-foreground\">\n {loading ? l.loading : picker.query ? l.noMatch : l.empty}\n </p>\n )}\n {rows.map((row, index) => (\n <div\n key={row.definition.id}\n id={listOptionId(listboxId, index)}\n role=\"option\"\n aria-selected={index === selected}\n data-index={index}\n data-testid={`docx-defined-term-${row.definition.id}`}\n className={cn(\n 'cursor-pointer px-3 py-1.5 text-sm',\n row.variant && 'pl-6',\n index === selected ? 'bg-accent text-accent-foreground' : 'hover:bg-accent/50'\n )}\n onMouseEnter={() => setSelected(index)}\n onClick={() => onPick(row)}\n >\n <div className=\"flex items-baseline gap-2\">\n <span className={cn('shrink-0', row.variant ? 'text-xs' : 'font-medium')}>\n {row.variant ? l.alsoIn(sourceOf(row.definition)) : row.group.term}\n </span>\n {!row.variant && sourceOf(row.definition) && (\n <span className=\"truncate text-xs text-muted-foreground\">\n {sourceOf(row.definition)}\n </span>\n )}\n {!row.variant && row.group.definitions.length > 1 && row.definition.confirmed && (\n <span className=\"ml-auto shrink-0 rounded bg-muted px-1 text-[10px] uppercase text-muted-foreground\">\n {l.preferred}\n </span>\n )}\n </div>\n <p className=\"line-clamp-2 text-xs text-muted-foreground\">{row.definition.meaning}</p>\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\n\n/**\n * A ribbon button that opens a panel under the ribbon (Font, More formatting, the style gallery).\n * Pressing the trigger never takes the caret out of the document; the panel closes on Escape or a\n * press outside it. `children` may be a function that receives `close`, for panels that close\n * themselves once the user has picked something.\n */\nexport function RibbonMenu({\n label,\n icon,\n children,\n className,\n testId,\n title,\n keepMounted = false,\n popoverClassName,\n}: {\n label: string\n /** Tooltip; defaults to `label`. */\n title?: string\n /** Trigger content: an icon, or a short text label with a `className` that widens it. */\n icon: React.ReactNode\n children: React.ReactNode | ((close: () => void) => React.ReactNode)\n className?: string\n testId?: string\n /** Keep the panel's content mounted (hidden) while closed, so its controls keep their state. */\n keepMounted?: boolean\n popoverClassName?: string\n}) {\n const [open, setOpen] = useState(false)\n const element = useRef<HTMLDivElement>(null)\n useEffect(() => {\n if (!open) return\n const dismiss = (event: PointerEvent) => {\n if (!element.current?.contains(event.target as Node)) setOpen(false)\n }\n const escape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') setOpen(false)\n }\n document.addEventListener('pointerdown', dismiss)\n document.addEventListener('keydown', escape)\n return () => {\n document.removeEventListener('pointerdown', dismiss)\n document.removeEventListener('keydown', escape)\n }\n }, [open])\n return (\n <div className=\"native-docx-ribbon-menu\" ref={element}>\n <button\n type=\"button\"\n className={['native-docx-ribbon-trigger', className].filter(Boolean).join(' ')}\n aria-label={label}\n title={title ?? label}\n aria-expanded={open}\n data-testid={testId}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => setOpen((value) => !value)}\n >\n {icon}\n </button>\n {(open || keepMounted) && (\n <div\n className={['native-docx-ribbon-popover', popoverClassName].filter(Boolean).join(' ')}\n role=\"group\"\n aria-label={label}\n hidden={!open}\n onMouseDown={(event) => {\n if (!(\n event.target instanceof HTMLInputElement || event.target instanceof HTMLSelectElement\n ))\n event.preventDefault()\n }}\n >\n {typeof children === 'function' ? children(() => setOpen(false)) : children}\n </div>\n )}\n </div>\n )\n}\n","/** What a ribbon row collapses into its More menu (see `RibbonOverflow`). */\n\n/** One control as the row measured it, in ribbon order. */\nexport interface OverflowItem {\n id: string\n /** Width in the row, including the gap after it. */\n width: number\n /** Higher stays in the row longer. */\n priority: number\n}\n\n/**\n * The controls to collapse so the rest fit in `available` beside a More trigger `moreWidth`\n * wide: none when everything fits; otherwise the lowest priority first, and among equal\n * priorities the rightmost first.\n */\nexport function planOverflow(\n items: readonly OverflowItem[],\n available: number,\n moreWidth: number\n): Set<string> {\n const collapsed = new Set<string>()\n let used = items.reduce((sum, item) => sum + item.width, 0)\n if (used <= available) return collapsed\n used += moreWidth\n const order = items\n .map((item, index) => ({ item, index }))\n .sort((a, b) => a.item.priority - b.item.priority || b.index - a.index)\n for (const { item } of order) {\n if (used <= available) break\n collapsed.add(item.id)\n used -= item.width\n }\n return collapsed\n}\n","/**\n * A ribbon tab's row of controls that never crowds: what does not fit collapses into a trailing\n * \"…\" (More) menu, as Word's ribbon does. Each control is a `RibbonItem` with a label and a\n * priority; the row measures the controls (ResizeObserver) and collapses the lowest priority\n * first, the rightmost first among equals. A collapsed control is the same component, moved by a\n * portal into its row of the More menu, beside its label, so it keeps working (and keeps its\n * state while the menu is closed).\n */\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { Ellipsis } from 'lucide-react'\nimport { RibbonMenu } from './RibbonMenu'\nimport { planOverflow } from './overflowPlan'\n\ninterface Registered {\n label: string\n priority: number\n element: HTMLElement\n}\n\ninterface OverflowContext {\n collapsed: ReadonlySet<string>\n slots: Readonly<Record<string, HTMLElement>>\n register: (id: string, item: Registered) => () => void\n}\n\nconst Overflow = createContext<OverflowContext | null>(null)\n\n/** Room for the More trigger: its 28 px button and the row's gap. */\nconst MORE_WIDTH = 32\n\nconst sameSet = (a: ReadonlySet<string>, b: ReadonlySet<string>) =>\n a.size === b.size && [...a].every((id) => b.has(id))\n\n/**\n * The row of one ribbon tab. `tab` names the tab shown, so the More menu closes and the row is\n * measured afresh when it changes.\n */\nexport function RibbonOverflow({ tab, children }: { tab: string; children: React.ReactNode }) {\n const row = useRef<HTMLDivElement>(null)\n const items = useRef(new Map<string, Registered>())\n const widths = useRef(new Map<string, number>())\n const [version, setVersion] = useState(0)\n const [collapsed, setCollapsed] = useState<ReadonlySet<string>>(() => new Set())\n const [slots, setSlots] = useState<Record<string, HTMLElement>>({})\n // In ribbon order, with their labels, for the More menu's rows.\n const [menu, setMenu] = useState<readonly { id: string; label: string }[]>([])\n\n const register = useCallback((id: string, item: Registered) => {\n items.current.set(id, item)\n setVersion((v) => v + 1)\n return () => {\n if (items.current.get(id) === item) items.current.delete(id)\n setVersion((v) => v + 1)\n }\n }, [])\n\n const plan = useCallback(() => {\n const element = row.current\n if (!element) return\n const gap = parseFloat(getComputedStyle(element).columnGap) || 0\n const ordered = Array.from(element.querySelectorAll<HTMLElement>('[data-ribbon-item]'))\n .map((node) => node.dataset.ribbonItem!)\n .filter((id) => items.current.has(id))\n const measured = ordered.map((id) => {\n const { element: node, priority } = items.current.get(id)!\n if (!node.hidden) {\n const width = node.getBoundingClientRect().width\n // A control that draws nothing (an action the host does not offer) takes no room.\n widths.current.set(id, width ? width + gap : 0)\n }\n return { id, priority, width: widths.current.get(id) ?? 0 }\n })\n const next = planOverflow(measured, element.clientWidth, MORE_WIDTH)\n setCollapsed((current) => (sameSet(current, next) ? current : next))\n const entries = ordered\n .filter((id) => next.has(id))\n .map((id) => ({ id, label: items.current.get(id)!.label }))\n setMenu((current) =>\n current.length === entries.length &&\n current.every((entry, i) => entry.id === entries[i].id && entry.label === entries[i].label)\n ? current\n : entries\n )\n }, [])\n\n useLayoutEffect(plan, [plan, version, tab, collapsed])\n\n useLayoutEffect(() => {\n const element = row.current\n if (!element) return\n const observer = new ResizeObserver(() => plan())\n observer.observe(element)\n for (const item of items.current.values()) observer.observe(item.element)\n return () => observer.disconnect()\n }, [plan, version])\n\n const slotRef = useCallback(\n (id: string) => (node: HTMLElement | null) =>\n setSlots((current) => {\n if (node ? current[id] === node : !(id in current)) return current\n const next = { ...current }\n if (node) next[id] = node\n else delete next[id]\n return next\n }),\n []\n )\n\n const context = useMemo(() => ({ collapsed, slots, register }), [collapsed, slots, register])\n const shown = menu.filter((entry) => collapsed.has(entry.id))\n\n return (\n <Overflow.Provider value={context}>\n <div className=\"native-docx-ribbon-row\" ref={row} data-testid=\"docx-ribbon-row\">\n {children}\n {shown.length > 0 && (\n <RibbonMenu\n key={tab}\n label=\"More\"\n title=\"More commands\"\n icon={<Ellipsis size={16} />}\n testId=\"docx-ribbon-more\"\n keepMounted\n popoverClassName=\"native-docx-ribbon-more\"\n >\n {(close) => <MoreRows entries={shown} slotRef={slotRef} close={close} />}\n </RibbonMenu>\n )}\n </div>\n </Overflow.Provider>\n )\n}\n\nfunction MoreRows({\n entries,\n slotRef,\n close,\n}: {\n entries: readonly { id: string; label: string }[]\n slotRef: (id: string) => (node: HTMLElement | null) => void\n close: () => void\n}) {\n // One stable ref callback per id, so React does not detach and reattach the slots each render.\n const refs = useRef(new Map<string, (node: HTMLElement | null) => void>())\n const refFor = (id: string) => {\n let ref = refs.current.get(id)\n if (!ref) refs.current.set(id, (ref = slotRef(id)))\n return ref\n }\n // A DOM listener, not a React one: the controls are portalled in, so React would route their\n // clicks through the ribbon row they belong to, not through this list. Capture, because an\n // engine control may stop its click from bubbling.\n const list = useRef<HTMLDivElement>(null)\n const latest = useRef(close)\n latest.current = close\n useEffect(() => {\n const element = list.current\n if (!element) return\n const onClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement\n const row = target.closest<HTMLElement>('.native-docx-ribbon-more-row')\n if (!row) return\n const control = row.querySelector<HTMLElement>('.native-docx-ribbon-more-control')!\n if (!control.contains(target)) {\n // The label is part of the row: it presses the control.\n control.querySelector<HTMLElement>('button:not([disabled])')?.click()\n return\n }\n // A plain command closes the menu, as Word's does; a control that opens its own panel (a\n // gallery, a picker) keeps it open.\n const button = target.closest('button')\n if (\n button &&\n !button.disabled &&\n !control.querySelector('.native-docx-ribbon-popover')?.contains(button) &&\n !button.hasAttribute('aria-expanded') &&\n !button.hasAttribute('aria-haspopup')\n )\n latest.current()\n }\n element.addEventListener('click', onClick, true)\n return () => element.removeEventListener('click', onClick, true)\n }, [])\n return (\n <div className=\"native-docx-ribbon-more-list\" ref={list}>\n {entries.map((entry) => (\n <div className=\"native-docx-ribbon-more-row\" key={entry.id} data-ribbon-more={entry.id}>\n <span className=\"native-docx-ribbon-more-control\" ref={refFor(entry.id)} />\n <span className=\"native-docx-ribbon-more-label\">{entry.label}</span>\n </div>\n ))}\n </div>\n )\n}\n\n/**\n * One control of a ribbon row. `label` names it in the More menu; `priority` (default 0) decides\n * what collapses first. Outside a `RibbonOverflow` it renders its children as they are.\n */\nexport function RibbonItem({\n id,\n label,\n priority = 0,\n children,\n}: {\n id: string\n label: string\n priority?: number\n children: React.ReactNode\n}) {\n const context = useContext(Overflow)\n const element = useRef<HTMLSpanElement>(null)\n const register = context?.register\n useLayoutEffect(() => {\n if (!register || !element.current) return\n return register(id, { label, priority, element: element.current })\n }, [register, id, label, priority])\n if (!context) return <>{children}</>\n const collapsed = context.collapsed.has(id)\n const slot = context.slots[id]\n return (\n <span\n ref={element}\n className=\"native-docx-ribbon-item\"\n data-ribbon-item={id}\n hidden={collapsed || undefined}\n >\n {collapsed ? (slot ? createPortal(children, slot) : null) : children}\n </span>\n )\n}\n","/**\n * Word's paragraph-style vocabulary for the native editor's chrome: finding a built-in style in\n * the document's own list, showing its name the way Word does, and Word's keyboard shortcuts for\n * styles and notes.\n */\n\nimport type { ParagraphStyleOption } from '@docx-editor.dev/react'\nimport type { StyleDivergence } from '@arbidocs/coedit/template'\n\n/** Word's quick picks, by the built-in style names `styles.xml` gives them. */\nexport const QUICK_STYLES = ['Normal', 'Title', 'heading 1', 'heading 2', 'heading 3'] as const\n\n/**\n * The style `name` names, matched the way Word matches built-in names (case-insensitively), with\n * the conventional id (`Heading1` for \"heading 1\") as a fallback for documents that name their\n * styles differently but keep Word's ids.\n */\nexport function findStyle(\n options: readonly ParagraphStyleOption[],\n name: string\n): ParagraphStyleOption | undefined {\n const wanted = name.toLowerCase()\n const id = name.replace(/(^|\\s)(\\w)/g, (_, _s: string, c: string) => c.toUpperCase())\n return (\n options.find((o) => o.name.toLowerCase() === wanted) ??\n options.find((o) => o.styleId.toLowerCase() === id.toLowerCase())\n )\n}\n\n/** A style's name as Word shows it: built-in names are stored lower-case (\"heading 1\"). */\nexport function styleLabel(name: string): string {\n return name === name.toLowerCase() ? name.replace(/(^|\\s)(\\w)/g, (m) => m.toUpperCase()) : name\n}\n\n/**\n * Word's shortcut for a keydown, or null. Ctrl+Alt (Cmd+Option on a Mac) with F, D or 1-3, and\n * Ctrl+Shift+N; read from `code` so a keyboard layout cannot move them.\n */\nexport function wordShortcut(\n event: Pick<KeyboardEvent, 'ctrlKey' | 'metaKey' | 'altKey' | 'shiftKey' | 'code'>\n): 'footnote' | 'endnote' | 'heading 1' | 'heading 2' | 'heading 3' | 'Normal' | null {\n const mod = event.ctrlKey || event.metaKey\n if (!mod) return null\n if (event.altKey && !event.shiftKey) {\n switch (event.code) {\n case 'KeyF':\n return 'footnote'\n case 'KeyD':\n return 'endnote'\n case 'Digit1':\n case 'Numpad1':\n return 'heading 1'\n case 'Digit2':\n case 'Numpad2':\n return 'heading 2'\n case 'Digit3':\n case 'Numpad3':\n return 'heading 3'\n }\n }\n if (event.shiftKey && !event.altKey && event.code === 'KeyN') return 'Normal'\n return null\n}\n\n/** A summary of how the document differs, for a tooltip; null when it matches. */\nexport function divergenceSummary(divergence: StyleDivergence | null): string | null {\n if (!divergence) return null\n const changed = divergence.styles\n .filter((s) => s.kind === 'changed')\n .map((s) => styleLabel(s.name))\n const missing = divergence.styles\n .filter((s) => s.kind === 'missing')\n .map((s) => styleLabel(s.name))\n const parts = [\n divergence.docDefaults ? 'default text formatting' : '',\n changed.length\n ? `${changed.length === 1 ? 'style' : 'styles'} ${changed.slice(0, 6).join(', ')}${changed.length > 6 ? '…' : ''}`\n : '',\n missing.length\n ? `${missing.length} house ${missing.length === 1 ? 'style' : 'styles'} missing`\n : '',\n ].filter(Boolean)\n return parts.length ? `Differs from the house template: ${parts.join('; ')}.` : null\n}\n","/**\n * Word's Styles group for the native editor's Home tab: a box showing the current paragraph's\n * style that opens a gallery of the document's own paragraph styles (from its `styles.xml`, so a\n * firm template's styles appear beside the built-ins), each drawn in its own face, with Normal,\n * Title and Headings 1-3 as quick picks. Applying a style writes `w:pStyle`.\n */\n\nimport React, { useMemo, useState } from 'react'\nimport { useDocxEditor, useParagraphStyle, type ParagraphStyleOption } from '@docx-editor.dev/react'\nimport { ChevronDown } from 'lucide-react'\nimport { listOptionId, useListKeyNav } from '../lib/useListKeyNav'\nimport { RibbonMenu } from './RibbonMenu'\nimport { QUICK_STYLES, divergenceSummary, findStyle, styleLabel } from './wordStyles'\nimport { useHouseTemplate } from './template/HouseTemplate'\n\n/** Show the filter once the list is longer than this. */\nconst FILTER_FROM = 8\n\nfunction previewStyle(option: ParagraphStyleOption): React.CSSProperties {\n const { fontFamily, fontSizePt, bold, italic, color } = option.preview\n return {\n fontFamily: fontFamily ? `\"${fontFamily}\", serif` : undefined,\n // In the face of the style, but within a row: 9-18pt.\n fontSize: fontSizePt ? `${Math.min(18, Math.max(9, fontSizePt))}pt` : undefined,\n fontWeight: bold ? 700 : undefined,\n fontStyle: italic ? 'italic' : undefined,\n color: color ? `#${color}` : undefined,\n }\n}\n\nfunction Gallery({ close }: { close: () => void }) {\n const { value, setValue, options, isEnabled } = useParagraphStyle()\n const editor = useDocxEditor()\n const house = useHouseTemplate()\n const changed = new Set(\n house?.basedOnTemplate\n ? house.divergence?.styles.filter((s) => s.kind === 'changed').map((s) => s.styleId)\n : []\n )\n const [query, setQuery] = useState('')\n const quick = useMemo(\n () =>\n QUICK_STYLES.map((name) => findStyle(options, name)).filter(\n (o): o is ParagraphStyleOption => !!o\n ),\n [options]\n )\n const shown = useMemo(() => {\n const q = query.trim().toLowerCase()\n return q\n ? options.filter(\n (o) => o.name.toLowerCase().includes(q) || o.styleId.toLowerCase().includes(q)\n )\n : options\n }, [options, query])\n const apply = (option: ParagraphStyleOption) => {\n setValue(option.styleId)\n close()\n editor?.surface?.focus()\n }\n const nav = useListKeyNav({\n open: true,\n items: shown,\n onPick: apply,\n onDismiss: close,\n resetKey: query,\n })\n return (\n <div className=\"native-docx-style-gallery\" data-testid=\"docx-style-gallery\">\n {quick.length > 0 && (\n <div className=\"native-docx-style-quick\" role=\"group\" aria-label=\"Quick styles\">\n {quick.map((option) => (\n <button\n key={option.styleId}\n type=\"button\"\n aria-pressed={value === option.styleId}\n disabled={!isEnabled}\n data-style-id={option.styleId}\n title={styleLabel(option.name)}\n onClick={() => apply(option)}\n >\n <span style={previewStyle(option)}>{styleLabel(option.name)}</span>\n </button>\n ))}\n </div>\n )}\n {options.length > FILTER_FROM && (\n <input\n className=\"native-docx-style-filter\"\n placeholder=\"Find a style\"\n aria-label=\"Find a style\"\n value={query}\n autoFocus\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={(event) => {\n nav.handleKeyDown(event)\n }}\n {...nav.comboboxProps}\n />\n )}\n <ul\n className=\"native-docx-style-list\"\n role=\"listbox\"\n id={nav.listboxId}\n aria-label=\"Document styles\"\n >\n {shown.map((option, index) => (\n <li\n key={option.styleId}\n id={listOptionId(nav.listboxId, index)}\n role=\"option\"\n aria-selected={value === option.styleId}\n aria-disabled={!isEnabled}\n data-active={index === nav.selectedIndex || undefined}\n data-style-id={option.styleId}\n onMouseEnter={() => nav.setSelectedIndex(index)}\n onClick={() => isEnabled && apply(option)}\n >\n <span style={previewStyle(option)}>{styleLabel(option.name)}</span>\n {changed.has(option.styleId) && (\n <span\n className=\"native-docx-style-diverged\"\n title=\"Defined differently from the house template\"\n aria-label=\"Defined differently from the house template\"\n />\n )}\n </li>\n ))}\n {shown.length === 0 && <li className=\"native-docx-style-empty\">No matching style</li>}\n </ul>\n </div>\n )\n}\n\n/** The Home tab's style box: the current paragraph style, opening the gallery. */\nexport function StyleGallery() {\n const { value, options } = useParagraphStyle()\n const current = options.find((o) => o.styleId === value)\n const name = current ? styleLabel(current.name) : 'Styles'\n const house = useHouseTemplate()\n // Only a document started from the house template has drifted from it.\n const diverged = house?.basedOnTemplate ? divergenceSummary(house.divergence) : null\n return (\n <RibbonMenu\n label=\"Styles\"\n title={diverged ? `Styles. ${diverged}` : undefined}\n className=\"native-docx-style-trigger\"\n testId=\"docx-style-trigger\"\n icon={\n <>\n <span className=\"native-docx-style-current\" data-testid=\"docx-current-style\">\n {name}\n </span>\n {diverged && (\n <span\n className=\"native-docx-style-diverged\"\n data-testid=\"docx-style-diverged\"\n aria-label={diverged}\n />\n )}\n <ChevronDown size={12} aria-hidden />\n </>\n }\n >\n {(close) => <Gallery close={close} />}\n </RibbonMenu>\n )\n}\n","/**\n * Word's footnote and endnote styles, for documents that do not define them.\n *\n * The engine writes a new note the way Word does — the reference run in the body and the note's\n * own mark both carry `w:rStyle=\"FootnoteReference\"` — but it does not add that style to a\n * document that lacks it. A blank document from the backend has no note styles at all, so the\n * reference and the note number were painted at body size on the baseline, and the note text at\n * body size. Word's normal template defines these styles; a document that has them is left alone.\n */\nimport { strToU8, zipSync } from 'fflate'\nimport { fragmentClipboardHtml } from '@arbidocs/coedit/template'\n\nexport type NoteKind = 'footnote' | 'endnote'\n\n/** A style the note styles need, as Word's normal template defines it. */\ninterface NoteStyle {\n id: string\n type: 'paragraph' | 'character'\n xml: string\n}\n\nconst W = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'\n\nconst DEFAULT_PARAGRAPH_FONT: NoteStyle = {\n id: 'DefaultParagraphFont',\n type: 'character',\n xml: '<w:style w:type=\"character\" w:default=\"1\" w:styleId=\"DefaultParagraphFont\"><w:name w:val=\"Default Paragraph Font\"/><w:uiPriority w:val=\"1\"/><w:semiHidden/><w:unhideWhenUsed/></w:style>',\n}\n\n/** `FootnoteText`, `FootnoteTextChar` and `FootnoteReference` (or the endnote ones). */\nfunction stylesOf(kind: NoteKind): NoteStyle[] {\n const Kind = kind === 'footnote' ? 'Footnote' : 'Endnote'\n const text = `${Kind}Text`\n return [\n {\n id: text,\n type: 'paragraph',\n xml: `<w:style w:type=\"paragraph\" w:styleId=\"${text}\"><w:name w:val=\"${kind} text\"/><w:basedOn w:val=\"Normal\"/><w:link w:val=\"${text}Char\"/><w:uiPriority w:val=\"99\"/><w:semiHidden/><w:unhideWhenUsed/><w:pPr><w:spacing w:after=\"0\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:rPr><w:sz w:val=\"20\"/><w:szCs w:val=\"20\"/></w:rPr></w:style>`,\n },\n {\n id: `${text}Char`,\n type: 'character',\n xml: `<w:style w:type=\"character\" w:customStyle=\"1\" w:styleId=\"${text}Char\"><w:name w:val=\"${Kind} Text Char\"/><w:basedOn w:val=\"DefaultParagraphFont\"/><w:link w:val=\"${text}\"/><w:uiPriority w:val=\"99\"/><w:semiHidden/><w:rPr><w:sz w:val=\"20\"/><w:szCs w:val=\"20\"/></w:rPr></w:style>`,\n },\n {\n id: `${Kind}Reference`,\n type: 'character',\n xml: `<w:style w:type=\"character\" w:styleId=\"${Kind}Reference\"><w:name w:val=\"${kind} reference\"/><w:basedOn w:val=\"DefaultParagraphFont\"/><w:uiPriority w:val=\"99\"/><w:semiHidden/><w:unhideWhenUsed/><w:rPr><w:vertAlign w:val=\"superscript\"/></w:rPr></w:style>`,\n },\n ]\n}\n\n/** A style the document defines, as the engine lists them (`getDocumentStyles`). */\nexport interface DocumentStyle {\n readonly styleId: string\n readonly name: string\n readonly type: string\n}\n\n/** The note text style among `styles`: by Word's built-in name, else by its standard id. */\nexport function noteTextStyle(\n styles: readonly DocumentStyle[],\n kind: NoteKind\n): string | undefined {\n const paragraph = styles.filter((style) => style.type === 'paragraph')\n const id = kind === 'footnote' ? 'FootnoteText' : 'EndnoteText'\n return (\n paragraph.find((style) => style.name.toLowerCase() === `${kind} text`)?.styleId ??\n paragraph.find((style) => style.styleId === id)?.styleId\n )\n}\n\n/**\n * The definitions of the note styles `styles` lacks, in `styles.xml` form ([] when none). The\n * reference style is matched by id, the id the engine writes on the reference; the text style by\n * Word's built-in name too, which a document saved in another language keeps under its own id.\n */\nexport function missingNoteStyles(styles: readonly DocumentStyle[], kind: NoteKind): string[] {\n const has = (type: string, id: string) =>\n styles.some((style) => style.type === type && style.styleId === id)\n const text = noteTextStyle(styles, kind)\n const missing = stylesOf(kind).filter((style) =>\n style.type === 'paragraph' ? !text : !has('character', style.id)\n )\n if (!missing.length) return []\n const base = has('character', DEFAULT_PARAGRAPH_FONT.id) ? [] : [DEFAULT_PARAGRAPH_FONT]\n return [...base, ...missing].map((style) => style.xml)\n}\n\nconst CONTENT_TYPES =\n '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/><Default Extension=\"xml\" ContentType=\"application/xml\"/><Override PartName=\"/word/document.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\"/><Override PartName=\"/word/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\"/></Types>'\n\n/**\n * A fragment that carries only `styles`: one empty, open paragraph, so pasting it at the caret\n * inserts nothing and the editor's paste merges the styles the document lacks (as it does for a\n * Quick Part's).\n */\nexport function stylesOnlyClipboardHtml(styles: readonly string[]): string {\n const fragment = zipSync({\n '[Content_Types].xml': strToU8(CONTENT_TYPES),\n '_rels/.rels': strToU8(\n '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"word/document.xml\"/></Relationships>'\n ),\n 'word/document.xml': strToU8(\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<w:document xmlns:w=\"${W}\"><w:body><w:p/></w:body></w:document>`\n ),\n 'word/_rels/document.xml.rels': strToU8(\n '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rIdStyles\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/></Relationships>'\n ),\n 'word/styles.xml': strToU8(\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<w:styles xmlns:w=\"${W}\">${styles.join('')}</w:styles>`\n ),\n })\n return fragmentClipboardHtml(fragment, false)\n}\n\n/** The editor surface `ensureNoteStyles` needs. */\ninterface NoteStyleEditor {\n can(command: { type: 'insertNote'; noteKind: NoteKind }): { ok: boolean }\n getDocumentStyles(): readonly DocumentStyle[]\n exec(command: { type: 'paste'; text: string; html: string }): { ok: boolean }\n}\n\n/**\n * Before a note is inserted: add Word's note styles the document lacks, so the reference and the\n * note number are superscript and the note text is Word's smaller footnote text. `direct` runs\n * the write untracked, as Word adds styles. Returns the id of the document's note text style\n * (\"footnote text\" / \"endnote text\"), for the new note's paragraph.\n */\nexport function ensureNoteStyles(\n editor: NoteStyleEditor,\n kind: NoteKind,\n direct: <T>(fn: () => T) => T = (fn) => fn()\n): string | undefined {\n if (!editor.can({ type: 'insertNote', noteKind: kind }).ok) return undefined\n const missing = missingNoteStyles(editor.getDocumentStyles(), kind)\n if (missing.length)\n direct(() => editor.exec({ type: 'paste', text: '', html: stylesOnlyClipboardHtml(missing) }))\n return noteTextStyle(editor.getDocumentStyles(), kind)\n}\n","/**\n * Footnotes and endnotes for the native editor's References tab, and Word's keyboard shortcuts\n * for notes and paragraph styles.\n *\n * The engine owns notes end to end: Insert footnote writes a `w:footnoteReference` at the caret\n * and its note in `footnotes.xml` (creating the part on a document that has none), moves the caret\n * into the note so the user types it straight away, numbers notes in document order, and lays\n * them out at the foot of the page, where an existing note is edited in place. What it leaves out\n * is what Word adds around a new note: the note styles in a document that has none (without\n * \"footnote reference\" the reference and the number are painted at body size on the baseline),\n * the note's \"footnote text\" (or \"endnote text\") paragraph style, and the space after its number.\n */\n\nimport React, { useEffect, useRef, type RefObject } from 'react'\nimport {\n DocxEditor,\n useDocxEditor,\n useEditorCommand,\n useParagraphStyle,\n} from '@docx-editor.dev/react'\nimport { NotebookText, Superscript } from 'lucide-react'\nimport { findStyle, wordShortcut } from './wordStyles'\nimport { editorPort, withDirectEditing } from './definitions/port'\nimport { useHouseTemplate } from './template/HouseTemplate'\nimport { ensureNoteStyles } from './noteStyles'\nimport { RibbonItem } from './RibbonOverflow'\n\ntype NoteKind = 'footnote' | 'endnote'\n\n/** Insert a note at the caret, as Word does: the reference, then the caret in the note's text. */\nfunction useInsertNote(kind: NoteKind) {\n const command = useEditorCommand(kind === 'footnote' ? 'insert.footnote' : 'insert.endnote')\n const editor = useDocxEditor()\n const insert = () => {\n // Word's note styles first, where the document has none (a new blank document).\n const text = editor && ensureNoteStyles(editor, kind, (fn) => withDirectEditing(editor, fn))\n // `execute` asks the engine first; the rendered `isEnabled` can trail a caret that has just\n // left a note.\n if (!command.execute()) return false\n if (editor) {\n // Formatting a note that is itself new is not a change to review: Word does not track it.\n if (text)\n withDirectEditing(editor, () => editor.exec({ type: 'setParagraphStyle', styleId: text }))\n // Word types a space after the note's number, so the text does not run into it.\n editor.exec({ type: 'insertText', text: ' ' })\n }\n return true\n }\n return { insert, isEnabled: command.isEnabled, disabledReason: command.disabledReason }\n}\n\nfunction NoteAction({\n kind,\n label,\n shortcut,\n icon,\n}: {\n kind: NoteKind\n label: string\n shortcut: string\n icon: React.ReactNode\n}) {\n const note = useInsertNote(kind)\n return (\n <RibbonItem id={`references-${kind}`} label={label}>\n <DocxEditor.Toolbar.Action\n label={`${label} (${shortcut})`}\n icon={icon}\n disabled={!note.isEnabled}\n disabledReason={note.disabledReason ?? undefined}\n onSelect={() => void note.insert()}\n className={`native-docx-insert-${kind}`}\n />\n </RibbonItem>\n )\n}\n\n/** References tab: Insert footnote, Insert endnote. */\nexport function NoteButtons() {\n return (\n <>\n <NoteAction\n kind=\"footnote\"\n label=\"Insert footnote\"\n shortcut=\"Ctrl+Alt+F\"\n icon={<Superscript size={16} />}\n />\n <NoteAction\n kind=\"endnote\"\n label=\"Insert endnote\"\n shortcut=\"Ctrl+Alt+D\"\n icon={<NotebookText size={16} />}\n />\n </>\n )\n}\n\n/**\n * Binds Word's note and style shortcuts to key presses inside `scope` (the editor's page area),\n * ahead of the editor's own handling. Renders nothing; mount it inside `DocxEditor.Root`.\n */\nexport function WordShortcuts({ scope }: { scope: RefObject<HTMLElement | null> }) {\n const footnote = useInsertNote('footnote')\n const endnote = useInsertNote('endnote')\n const styles = useParagraphStyle()\n const editor = useDocxEditor()\n const levels = useHouseTemplate()?.levels\n const latest = useRef({ footnote, endnote, styles, editor, levels })\n latest.current = { footnote, endnote, styles, editor, levels }\n useEffect(() => {\n const element = scope.current\n if (!element) return\n const onKeyDown = (event: KeyboardEvent) => {\n if (outlineTab(event)) {\n event.preventDefault()\n event.stopPropagation()\n return\n }\n const action = wordShortcut(event)\n if (!action) return\n const { footnote, endnote, styles, editor } = latest.current\n if (action === 'footnote' || action === 'endnote') {\n if (!(action === 'footnote' ? footnote : endnote).insert()) return\n } else {\n const style = findStyle(styles.options, action)\n if (!style) return\n styles.setValue(style.styleId)\n }\n event.preventDefault()\n event.stopPropagation()\n editor?.surface?.focus()\n }\n /**\n * Word's Tab / Shift+Tab at the start of a clause whose numbering is linked to its style\n * (Level 2 → Level 3): the paragraph moves a level by taking the next level's style. The\n * engine's own Tab only indents, which leaves the clause number where it was.\n */\n const outlineTab = (event: KeyboardEvent) => {\n if (event.key !== 'Tab' || event.ctrlKey || event.metaKey || event.altKey) return false\n const { editor, levels, styles } = latest.current\n const current = editor?.getSelectionFormatting()?.styleId\n const link = current ? levels?.[current] : undefined\n const target = event.shiftKey ? link?.previous : link?.next\n if (!target || !editor || editorPort(editor).caret()?.offset !== 0) return false\n styles.setValue(target)\n return true\n }\n element.addEventListener('keydown', onKeyDown, true)\n return () => element.removeEventListener('keydown', onKeyDown, true)\n }, [scope])\n return null\n}\n","/**\n * Work to do on a document just before it is saved or downloaded (e.g. bringing cross-reference\n * results up to date, so the stored .docx reads right in Word). Features register against the\n * editor instance; the widget runs them before Save version and DOCX download.\n */\n\nconst hooks = new WeakMap<object, Set<() => void>>()\n\n/** Run `fn` before each save of `editor`'s document. Answers the unregister function. */\nexport function onBeforeSave(editor: object, fn: () => void): () => void {\n let set = hooks.get(editor)\n if (!set) hooks.set(editor, (set = new Set()))\n set.add(fn)\n return () => set.delete(fn)\n}\n\n/** Run the registered work; one failing does not stop the save. */\nexport function runBeforeSave(editor: object | null | undefined): void {\n if (!editor) return\n for (const fn of hooks.get(editor) ?? [])\n try {\n fn()\n } catch {\n /* The save goes ahead with what the document has. */\n }\n}\n","/**\n * References to another document's passages: what a passage is, the reference text a lawyer would\n * write for it (\"SPA, clause 8.2\", \"Lease, p. 12\"), and the passage text shown on hover.\n */\n\n/** Where a cross-document reference points: a document's passage (its chunk) and page. */\nexport interface DocumentPassageTarget {\n documentId: string\n chunkId: string\n page?: number | null\n}\n\n/** One passage of a document, as the reference picker lists it. */\nexport interface DocumentPassage {\n chunkId: string\n page?: number | null\n /** The passage text (Markdown). */\n text: string\n}\n\n/** A document the reference can point into. */\nexport interface ReferenceDocument {\n id: string\n title: string\n}\n\n/** The document's name as a reference uses it: its own short name if it gives one, no extension. */\nexport function shortTitle(title: string): string {\n const base = title.replace(/\\.[A-Za-z0-9]{1,5}$/, '').trim()\n // `Share Purchase Agreement (\"SPA\")` → SPA\n const defined = /\\(\\s*(?:the\\s+)?[\"“'‘]([^\"”'’]{1,30})[\"”'’]\\s*\\)/i.exec(base)\n return defined ? defined[1] : base\n}\n\n/** The clause number a passage starts with: `8.2` for \"8.2 The Seller…\", `8` for \"## 8. Sale\". */\nexport function passageClause(text: string): string | null {\n const first = text.trim().split('\\n')[0] ?? ''\n const match =\n /^(?:#+\\s*)?(?:\\*\\*)?(?:clause|section|article)?\\s*(\\d+(?:\\.\\d+)*)[.)]?(?:\\*\\*)?\\s+\\S/i.exec(\n first\n )\n return match ? match[1] : null\n}\n\n/** The reference text for a passage: \"SPA, clause 8.2\", else \"SPA, p. 12\", else \"SPA\". */\nexport function referenceText(title: string, passage: Pick<DocumentPassage, 'text' | 'page'>) {\n const name = shortTitle(title)\n const clause = passageClause(passage.text)\n if (clause) return `${name}, clause ${clause}`\n if (passage.page) return `${name}, p. ${passage.page}`\n return name\n}\n\n/** A passage as one line of plain text, for a tooltip or a hover card. */\nexport function passageExcerpt(text: string, max = 280): string {\n const plain = text\n .replace(/[#*_`>|]+/g, ' ')\n .replace(/\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1')\n .replace(/\\s+/g, ' ')\n .trim()\n return plain.length > max ? `${plain.slice(0, max - 1)}…` : plain\n}\n\n/** Passages containing the query (case-insensitive), in document order. */\nexport function filterPassages(passages: readonly DocumentPassage[], query: string) {\n const q = query.trim().toLowerCase()\n return q ? passages.filter((p) => p.text.toLowerCase().includes(q)) : [...passages]\n}\n","/**\n * What the cross-reference commands need beyond the defined-term port: the document's list\n * numbering as the engine resolves it, and a paragraph's runs as WordprocessingML (to wrap a\n * heading's text in a bookmark without losing its formatting).\n */\n\nimport type { DocxEditorInstance } from '@docx-editor.dev/core'\nimport type { Revision } from '@arbidocs/coedit/template'\nimport { documentNumbering, paragraphRunsXml, type ReferencesPort } from '@arbidocs/coedit/commands'\nimport { editorPort, type OoxmlNodeLike } from '../definitions/port'\n\nexport { paragraphRunsXml, type ReferencesPort } from '@arbidocs/coedit/commands'\n\nfunction findNode(node: OoxmlNodeLike, id: string): OoxmlNodeLike | undefined {\n if (node.id === id) return node\n for (const child of node.children ?? []) {\n const found = findNode(child, id)\n if (found) return found\n }\n return undefined\n}\n\n/** The port over a live editor; with a `revision`, what it pastes is a tracked insertion by it. */\nexport function referencesPort(\n editor: DocxEditorInstance,\n revision?: Revision | null\n): ReferencesPort {\n const base = editorPort(editor, revision)\n const session = () => {\n const s = editor.surface?.session\n if (!s) throw new Error('The document is not open.')\n return s\n }\n const root = () => session().part().root as unknown as OoxmlNodeLike\n const numbering = documentNumbering({\n root,\n stylesRoot: () => session().stylesRoot(),\n numberingRoot: () => session().numberingRoot(),\n settingsRoot: () => session().settingsRoot(),\n })\n return {\n ...base,\n listItems: numbering.listItems,\n levelOf: numbering.levelOf,\n runsXml: (paragraphId) => {\n const node = findNode(root(), paragraphId)\n return node ? paragraphRunsXml(node) : null\n },\n }\n}\n","/**\n * Cross-references in the Word editor: the Insert cross-reference dialog (within this document,\n * to a numbered clause or a heading; or to a passage of another document of the workspace), a\n * hover card on an inserted reference showing what it points at, and in-app navigation when a\n * reference to another document is clicked. Mount `CrossReferencesProvider` inside\n * `DocxEditor.Root`; the ribbon and the context menu read it from context.\n */\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react'\nimport { useDocxEditor, useEditorState } from '@docx-editor.dev/react'\nimport type { Revision } from '@arbidocs/coedit/template'\nimport {\n Button,\n cn,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Input,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '@arbidocs/react/ui'\nimport { FactPassageItem } from '../../facts/FactPassages'\nimport { LinkHoverCard } from '../LinkHoverCard'\nimport { holdCaret, preservingCaret, withDirectEditing, type DocPoint } from '../definitions/port'\nimport { onBeforeSave } from '../beforeSave'\nimport { useTrackedOrNoted } from '../structural/useTrackedOrNoted'\nimport {\n insertCrossReferenceField,\n insertDocumentReference,\n markCrossReferenceTarget,\n refreshCrossReferences,\n type RefreshResult,\n REF_BOOKMARK_PREFIX,\n refResult,\n type CrossReferenceMode,\n} from './commands'\nimport { filterTargets, listTargets, paragraphNumber, type CrossReferenceTarget } from './numbering'\nimport {\n filterPassages,\n passageExcerpt,\n referenceText,\n type DocumentPassage,\n type DocumentPassageTarget,\n type ReferenceDocument,\n} from './passages'\nimport { referencesPort } from './port'\n\n/** What the host supplies for references to its other documents. */\nexport interface DocxReferencesAdapter {\n /** The documents a reference can point into (the open one is left out). */\n documents: () => Promise<ReferenceDocument[]>\n /** A document's passages, in document order. */\n passages: (documentId: string) => Promise<DocumentPassage[]>\n /** The address a reference links to (the app's link to that passage, so it works from Word). */\n linkFor: (target: DocumentPassageTarget) => string\n /** The passage a link addresses, or null for any other link. */\n targetOf: (href: string) => DocumentPassageTarget | null\n /** Open the document at that passage, highlighted. */\n open: (target: DocumentPassageTarget) => void\n /** The app's name, for a reference's screen tip (\"… opens in ARBI\"). Default ARBI. */\n appName?: string\n /** The host's document picker, as a slot (receives the chosen document id). */\n renderDocumentPicker?: (\n onSelect: (documentId: string) => void,\n selectedId: string | null\n ) => ReactNode\n}\n\nexport interface CrossReferencesLabels {\n insert: string\n title: string\n description: string\n thisDocument: string\n otherDocument: string\n filterTargets: string\n noTargets: string\n number: string\n text: string\n insertAs: string\n chooseDocument: string\n filterPassages: string\n loadingPassages: string\n noPassages: string\n referenceText: string\n insertButton: string\n cancel: string\n clause: (number: string) => string\n heading: string\n update: string\n updated: string\n updateSummary: (refreshed: number) => string\n brokenTitle: string\n brokenNone: string\n brokenHelp: string\n brokenCard: string\n brokenCardBody: string\n show: string\n close: string\n}\n\nexport const DEFAULT_CROSS_REFERENCES_LABELS: CrossReferencesLabels = {\n insert: 'Insert cross-reference',\n title: 'Insert cross-reference',\n description: 'Refer to a clause of this document, or to a passage of another document.',\n thisDocument: 'This document',\n otherDocument: 'Another document',\n filterTargets: 'Find a clause or heading',\n noTargets: 'This document has no numbered clauses or headings yet.',\n number: 'Paragraph number',\n text: 'Heading text',\n insertAs: 'Insert',\n chooseDocument: 'Choose a document',\n filterPassages: 'Find a passage',\n loadingPassages: 'Loading passages…',\n noPassages: 'No passage matches.',\n referenceText: 'Reference text',\n insertButton: 'Insert',\n cancel: 'Cancel',\n clause: (number) => `Clause ${number}`,\n heading: 'Heading',\n update: 'Update cross-references',\n updated: 'Cross-references updated',\n updateSummary: (refreshed) =>\n refreshed\n ? `${refreshed} cross-reference${refreshed === 1 ? '' : 's'} brought up to date.`\n : 'Every cross-reference is up to date.',\n brokenTitle: 'Broken cross-references',\n brokenNone: 'No cross-reference points at a deleted target.',\n brokenHelp:\n 'Their target was deleted: the last text is kept and marked. Insert the reference again to repair it.',\n brokenCard: 'Broken cross-reference',\n brokenCardBody: 'Its target was deleted. Update cross-references to mark it.',\n show: 'Show',\n close: 'Close',\n}\n\ninterface CrossReferencesContextValue {\n /** Open the Insert cross-reference dialog for the caret. */\n openDialog: () => void\n /** Update every cross-reference and show what changed and what is broken. */\n update: () => void\n labels: CrossReferencesLabels\n}\n\nconst CrossReferencesContext = createContext<CrossReferencesContextValue | null>(null)\n\n/** The cross-reference commands, or `null` where the editor cannot take them. */\nexport const useCrossReferences = () => useContext(CrossReferencesContext)\n\nexport interface CrossReferencesProviderProps {\n children: ReactNode\n /** Editing is possible (not a snapshot, a stream or a read-only document). */\n editable: boolean\n /** References to other documents; absent, only this document's clauses are offered. */\n references?: DocxReferencesAdapter\n /** The open document, left out of the documents to refer to. */\n documentId?: string\n notify?: (message: string, kind: 'success' | 'error') => void\n labels?: Partial<CrossReferencesLabels>\n}\n\nexport function CrossReferencesProvider({\n children,\n editable,\n references,\n documentId,\n notify,\n labels,\n}: CrossReferencesProviderProps) {\n const editor = useDocxEditor()\n const track = useTrackedOrNoted()\n const l = useMemo(() => ({ ...DEFAULT_CROSS_REFERENCES_LABELS, ...labels }), [labels])\n const [dialog, setDialog] = useState<{ caret: DocPoint; targets: CrossReferenceTarget[] } | null>(\n null\n )\n const marker = useRef<HTMLSpanElement>(null)\n const [viewer, setViewer] = useState<Element | null>(null)\n useEffect(() => setViewer(marker.current?.closest('.native-docx-viewer') ?? null), [])\n\n const openDialog = useCallback(() => {\n if (!editor || !editable) return\n try {\n const port = referencesPort(editor)\n const caret = port.caret()\n if (!caret) return notify?.('Place the cursor where the reference should go.', 'error')\n setDialog({ caret, targets: listTargets(port.paragraphs(), port.listItems(), port.levelOf) })\n } catch (error) {\n notify?.(error instanceof Error ? error.message : 'Could not read the document.', 'error')\n }\n }, [editor, editable, notify])\n\n /**\n * Insert a reference: `prepare` (marking its target) as a direct edit, then `insert` through\n * `trackedOrNoted`, so while suggesting the reference itself is one tracked insertion.\n */\n const run = useCallback(\n <T,>(\n label: string,\n prepare: () => T,\n insert: (prepared: T, revision: Revision | null) => void\n ) => {\n if (!editor) return\n try {\n const prepared = withDirectEditing(editor, prepare)\n // From where the reference goes (marking the target moved the caret), so a comment that\n // stands in for an untracked insert covers the reference.\n if (dialog) referencesPort(editor).setCaret(dialog.caret)\n track({ label, insert: (revision) => insert(prepared, revision), inserted: () => true })\n setDialog(null)\n editor.surface?.focus()\n holdCaret(editor)\n } catch (error) {\n notify?.(\n error instanceof Error ? error.message : 'Could not insert the reference.',\n 'error'\n )\n }\n },\n [editor, dialog, track, notify]\n )\n\n // Cross-references whose clause was renumbered are rewritten with the current number: once, as\n // soon as the document has loaded (the editor shows a stale cached number after reopening), and\n // before each save or download (so Word reads the current number too). Never later on a clock:\n // a rewrite in the middle of editing is a direct edit, even of a reference just suggested.\n const loaded = useEditorState((snapshot) => !snapshot.isLoading && !snapshot.isOpening)\n const refreshedOnLoad = useRef<object | null>(null)\n useEffect(() => {\n if (!editor || !editable) return\n const refresh = () => {\n try {\n const port = referencesPort(editor)\n if (!port.paragraphs().some((p) => p.fields?.length)) return\n preservingCaret(editor, () => withDirectEditing(editor, () => refreshCrossReferences(port)))\n } catch {\n /* Nothing to refresh, or the document is not open yet. */\n }\n }\n if (loaded && refreshedOnLoad.current !== editor) {\n refreshedOnLoad.current = editor\n refresh()\n }\n return onBeforeSave(editor, refresh)\n }, [editor, editable, loaded])\n\n const [report, setReport] = useState<RefreshResult | null>(null)\n const update = useCallback(() => {\n if (!editor || !editable) return\n try {\n const result = preservingCaret(editor, () =>\n withDirectEditing(editor, () => refreshCrossReferences(referencesPort(editor)))\n )\n setReport(result)\n } catch (error) {\n notify?.(\n error instanceof Error ? error.message : 'Could not update cross-references.',\n 'error'\n )\n }\n }, [editor, editable, notify])\n\n // Passages of other documents, loaded once each: the dialog lists them, the hover card quotes them.\n const [passages, setPassages] = useState<Record<string, DocumentPassage[] | 'loading'>>({})\n const loadPassages = useCallback(\n (id: string) => {\n if (!references || passages[id]) return\n setPassages((p) => ({ ...p, [id]: 'loading' }))\n references\n .passages(id)\n .then((list) => setPassages((p) => ({ ...p, [id]: list })))\n .catch(() => setPassages((p) => ({ ...p, [id]: [] })))\n },\n [references, passages]\n )\n\n // A reference to another document opens it in the app at the passage, not in a new tab. The\n // editor acts on a link from the pointer events themselves (its link popover), so the whole\n // gesture is taken in the capture phase at the window, before the editor sees it.\n useEffect(() => {\n if (!viewer || !references) return\n const targetOf = (event: Event) => {\n const link = (event.target as Element | null)?.closest?.(\n 'a.docx-hyperlink[data-docx-link-kind=\"external\"]'\n )\n if (!link || !viewer.contains(link)) return null\n const mouse = event as MouseEvent\n if (mouse.button !== 0 || mouse.ctrlKey || mouse.metaKey || mouse.shiftKey) return null\n return references.targetOf(link.getAttribute('href') ?? '')\n }\n const take = (event: Event) => {\n const target = targetOf(event)\n if (!target) return\n event.preventDefault()\n event.stopPropagation()\n if (event.type === 'click') references.open(target)\n }\n const types = ['pointerdown', 'mousedown', 'pointerup', 'mouseup', 'click'] as const\n for (const type of types) window.addEventListener(type, take, true)\n return () => {\n for (const type of types) window.removeEventListener(type, take, true)\n }\n }, [viewer, references])\n\n const value = useMemo<CrossReferencesContextValue | null>(\n () => (editable ? { openDialog, update, labels: l } : null),\n [editable, openDialog, update, l]\n )\n\n /** What an internal `#_Ref…` reference points at: its clause and text. */\n const resolveInternal = (href: string) => {\n if (!editor) return null\n const name = href.replace(/^#/, '')\n try {\n const port = referencesPort(editor)\n const paragraphs = port.paragraphs()\n const target = paragraphs.find((p) => p.bookmarks.includes(name))\n if (!target) return { title: l.brokenCard, body: l.brokenCardBody }\n const number = paragraphNumber(\n paragraphs.map((p) => p.id),\n port.listItems(),\n port.levelOf,\n target.id\n )\n return {\n title: number ? l.clause(number) : l.heading,\n body: passageExcerpt(target.text.replace(//g, '')),\n }\n } catch {\n return null\n }\n }\n\n return (\n <CrossReferencesContext.Provider value={value}>\n <span ref={marker} hidden />\n {children}\n <LinkHoverCard\n root={viewer}\n matches={(href) => href.startsWith(`#${REF_BOOKMARK_PREFIX}`)}\n resolve={resolveInternal}\n testId=\"docx-cross-reference-card\"\n />\n {references && (\n <LinkHoverCard\n root={viewer}\n matches={(href) => !!references.targetOf(href)}\n resolve={(href) => {\n const target = references.targetOf(href)\n if (!target) return null\n const list = passages[target.documentId]\n if (!list) loadPassages(target.documentId)\n const passage = Array.isArray(list)\n ? list.find((p) => p.chunkId === target.chunkId)\n : undefined\n return passage\n ? {\n body: passageExcerpt(passage.text),\n footer: passage.page ? `p. ${passage.page}` : undefined,\n }\n : null\n }}\n testId=\"docx-cross-reference-card\"\n />\n )}\n {dialog && (\n <CrossReferenceDialog\n targets={dialog.targets}\n references={references}\n documentId={documentId}\n passages={passages}\n loadPassages={loadPassages}\n labels={l}\n onCancel={() => setDialog(null)}\n onClosed={() => editor?.surface?.focus()}\n onInsertTarget={(target, mode) =>\n run(\n `Inserted cross-reference: ${refResult(target, mode)}`,\n () => markCrossReferenceTarget(referencesPort(editor!), target, mode),\n (marked, revision) =>\n insertCrossReferenceField(referencesPort(editor!, revision), marked, dialog.caret)\n )\n }\n onInsertPassage={(target, text) =>\n run(\n `Inserted cross-reference: ${text}`,\n () => undefined,\n (_, revision) =>\n insertDocumentReference(\n referencesPort(editor!, revision),\n { text, url: references!.linkFor(target), appName: references!.appName },\n dialog.caret\n )\n )\n }\n />\n )}\n <Dialog open={!!report} onOpenChange={(open) => !open && setReport(null)}>\n <DialogContent\n className=\"max-h-[85dvh] overflow-y-auto\"\n data-testid=\"docx-cross-references-report\"\n >\n <DialogHeader>\n <DialogTitle>{l.updated}</DialogTitle>\n <DialogDescription>{report && l.updateSummary(report.refreshed)}</DialogDescription>\n </DialogHeader>\n {report && (\n <section className=\"space-y-1 text-sm\">\n <h3 className=\"font-medium\">{l.brokenTitle}</h3>\n {report.broken.length ? (\n <>\n <p className=\"text-muted-foreground\">{l.brokenHelp}</p>\n <ul className=\"space-y-1\" data-testid=\"docx-cross-references-broken\">\n {report.broken.map((b) => (\n <li\n key={`${b.paragraphId}:${b.offset}`}\n className=\"flex items-center justify-between gap-2\"\n >\n <span className=\"text-red-text\">{b.text}</span>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => {\n const point = { paragraphId: b.paragraphId, offset: b.offset }\n editor?.surface?.setSelection({ anchor: point, head: point })\n editor?.surface?.revealParagraph(b.paragraphId)\n setReport(null)\n }}\n >\n {l.show}\n </Button>\n </li>\n ))}\n </ul>\n </>\n ) : (\n <p className=\"text-muted-foreground\">{l.brokenNone}</p>\n )}\n </section>\n )}\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => setReport(null)}>\n {l.close}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </CrossReferencesContext.Provider>\n )\n}\n\nexport interface CrossReferenceDialogProps {\n targets: CrossReferenceTarget[]\n references?: DocxReferencesAdapter\n documentId?: string\n passages: Record<string, DocumentPassage[] | 'loading'>\n loadPassages: (documentId: string) => void\n labels?: Partial<CrossReferencesLabels>\n onCancel: () => void\n onInsertTarget: (target: CrossReferenceTarget, mode: CrossReferenceMode) => void\n onInsertPassage: (target: DocumentPassageTarget, text: string) => void\n /** After the dialog has closed: focus goes here (the document), not back to what opened it. */\n onClosed?: () => void\n}\n\n/** The Insert cross-reference dialog: a target of this document, or a passage of another one. */\nexport function CrossReferenceDialog({\n targets,\n references,\n documentId,\n passages,\n loadPassages,\n labels,\n onCancel,\n onInsertTarget,\n onInsertPassage,\n onClosed,\n}: CrossReferenceDialogProps) {\n const l = { ...DEFAULT_CROSS_REFERENCES_LABELS, ...labels }\n const [tab, setTab] = useState<'this' | 'other'>('this')\n // This document.\n const [query, setQuery] = useState('')\n const [chosen, setChosen] = useState<CrossReferenceTarget | null>(null)\n const [mode, setMode] = useState<CrossReferenceMode>('number')\n const shown = useMemo(() => filterTargets(targets, query), [targets, query])\n const effectiveMode: CrossReferenceMode = chosen?.number ? mode : 'text'\n // Another document.\n const [documents, setDocuments] = useState<ReferenceDocument[] | null>(null)\n const [docId, setDocId] = useState<string | null>(null)\n const [passageQuery, setPassageQuery] = useState('')\n const [passage, setPassage] = useState<DocumentPassage | null>(null)\n const [text, setText] = useState('')\n useEffect(() => {\n if (tab !== 'other' || !references || documents) return\n references\n .documents()\n .then((list) => setDocuments(list.filter((d) => d.id !== documentId)))\n .catch(() => setDocuments([]))\n }, [tab, references, documents, documentId])\n const chooseDocument = (id: string) => {\n setDocId(id)\n setPassage(null)\n setText('')\n loadPassages(id)\n }\n const title = documents?.find((d) => d.id === docId)?.title ?? ''\n const list = docId ? passages[docId] : undefined\n const shownPassages = Array.isArray(list) ? filterPassages(list, passageQuery) : []\n\n const canInsert = tab === 'this' ? !!chosen : !!(docId && passage && text.trim())\n const insert = () => {\n if (tab === 'this' && chosen) onInsertTarget(chosen, effectiveMode)\n if (tab === 'other' && docId && passage)\n onInsertPassage(\n { documentId: docId, chunkId: passage.chunkId, page: passage.page ?? null },\n text\n )\n }\n\n return (\n <Dialog open onOpenChange={(open) => !open && onCancel()}>\n <DialogContent\n className=\"max-h-[85dvh] overflow-y-auto\"\n data-testid=\"docx-cross-reference-dialog\"\n onCloseAutoFocus={(event) => {\n if (!onClosed) return\n event.preventDefault()\n onClosed()\n }}\n >\n <DialogHeader>\n <DialogTitle>{l.title}</DialogTitle>\n <DialogDescription>{l.description}</DialogDescription>\n </DialogHeader>\n <Tabs value={tab} onValueChange={(v) => setTab(v as 'this' | 'other')}>\n <TabsList>\n <TabsTrigger value=\"this\" data-testid=\"docx-cross-reference-this\">\n {l.thisDocument}\n </TabsTrigger>\n {references && (\n <TabsTrigger value=\"other\" data-testid=\"docx-cross-reference-other\">\n {l.otherDocument}\n </TabsTrigger>\n )}\n </TabsList>\n <TabsContent value=\"this\" className=\"space-y-3\">\n <Input\n value={query}\n placeholder={l.filterTargets}\n aria-label={l.filterTargets}\n onChange={(e) => setQuery(e.target.value)}\n data-testid=\"docx-cross-reference-filter\"\n />\n <div\n role=\"listbox\"\n aria-label={l.filterTargets}\n className=\"max-h-64 space-y-0.5 overflow-y-auto rounded-md border border-border p-1\"\n >\n {shown.length === 0 && (\n <p className=\"p-2 text-sm text-muted-foreground\">{l.noTargets}</p>\n )}\n {shown.map((t) => (\n <button\n key={t.paragraphId}\n type=\"button\"\n role=\"option\"\n aria-selected={chosen?.paragraphId === t.paragraphId}\n data-testid=\"docx-cross-reference-target\"\n onClick={() => setChosen(t)}\n onDoubleClick={() => onInsertTarget(t, t.number ? mode : 'text')}\n className={cn(\n 'flex w-full items-baseline gap-2 rounded px-2 py-1 text-left text-sm',\n chosen?.paragraphId === t.paragraphId ? 'bg-accent' : 'hover:bg-accent/50'\n )}\n style={{ paddingLeft: 8 + t.level * 16 }}\n >\n <span className=\"shrink-0 font-mono text-xs text-muted-foreground\">\n {t.marker || l.heading}\n </span>\n <span className={cn('truncate', t.heading && 'font-medium')}>{t.text}</span>\n </button>\n ))}\n </div>\n {chosen && (\n <div className=\"flex flex-wrap items-center gap-3 text-sm\">\n <span className=\"text-muted-foreground\">{l.insertAs}</span>\n {chosen.number && (\n <label className=\"flex items-center gap-1\">\n <input\n type=\"radio\"\n name=\"cross-reference-mode\"\n checked={effectiveMode === 'number'}\n onChange={() => setMode('number')}\n />\n {l.number}\n </label>\n )}\n <label className=\"flex items-center gap-1\">\n <input\n type=\"radio\"\n name=\"cross-reference-mode\"\n checked={effectiveMode === 'text'}\n onChange={() => setMode('text')}\n />\n {l.text}\n </label>\n <span\n className=\"ml-auto rounded bg-muted px-2 py-0.5\"\n data-testid=\"docx-cross-reference-preview\"\n >\n {refResult(chosen, effectiveMode)}\n </span>\n </div>\n )}\n </TabsContent>\n {references && (\n <TabsContent value=\"other\" className=\"space-y-3\">\n {references.renderDocumentPicker ? (\n references.renderDocumentPicker(chooseDocument, docId)\n ) : (\n <select\n className=\"h-9 w-full rounded-md border border-border bg-background px-2 text-sm\"\n aria-label={l.chooseDocument}\n value={docId ?? ''}\n onChange={(e) => e.target.value && chooseDocument(e.target.value)}\n data-testid=\"docx-cross-reference-document\"\n >\n <option value=\"\">{l.chooseDocument}</option>\n {(documents ?? []).map((d) => (\n <option key={d.id} value={d.id}>\n {d.title}\n </option>\n ))}\n </select>\n )}\n {docId && (\n <>\n <Input\n value={passageQuery}\n placeholder={l.filterPassages}\n aria-label={l.filterPassages}\n onChange={(e) => setPassageQuery(e.target.value)}\n data-testid=\"docx-cross-reference-passage-filter\"\n />\n <div\n className=\"max-h-64 space-y-1 overflow-y-auto\"\n data-testid=\"docx-cross-reference-passages\"\n >\n {list === 'loading' || list === undefined ? (\n <p className=\"p-2 text-sm text-muted-foreground\">{l.loadingPassages}</p>\n ) : shownPassages.length === 0 ? (\n <p className=\"p-2 text-sm text-muted-foreground\">{l.noPassages}</p>\n ) : (\n shownPassages.map((p, i) => (\n <FactPassageItem\n key={p.chunkId}\n index={i}\n page={p.page}\n excerpt={passageExcerpt(p.text, 200)}\n isViewing={passage?.chunkId === p.chunkId}\n onSelect={() => {\n setPassage(p)\n setText(referenceText(title, p))\n }}\n testId=\"docx-cross-reference-passage\"\n />\n ))\n )}\n </div>\n {passage && (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-muted-foreground\">{l.referenceText}</span>\n <Input\n value={text}\n onChange={(e) => setText(e.target.value)}\n data-testid=\"docx-cross-reference-text\"\n />\n </label>\n )}\n </>\n )}\n </TabsContent>\n )}\n </Tabs>\n <DialogFooter>\n <Button variant=\"outline\" onClick={onCancel}>\n {l.cancel}\n </Button>\n <Button disabled={!canInsert} onClick={insert} data-testid=\"docx-cross-reference-insert\">\n {l.insertButton}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n","/**\n * Where the defined-term and cross-reference commands sit in the editor's chrome: an Insert-tab\n * button, and rows appended to the editor's own right-click menu (its Cut, Copy, Paste… stay).\n */\n\nimport { DocxEditor } from '@docx-editor.dev/react'\nimport { BookA, Link2, RefreshCcw } from 'lucide-react'\nimport { useDefinedTerms } from '../definitions/DefinedTerms'\nimport { useCrossReferences } from './CrossReferences'\n\n/** Insert tab: Insert cross-reference. */\nexport function CrossReferenceButton() {\n const references = useCrossReferences()\n if (!references) return null\n return (\n <button\n type=\"button\"\n className=\"native-docx-ribbon-trigger\"\n aria-label={references.labels.insert}\n title={references.labels.insert}\n data-testid=\"docx-insert-cross-reference\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => references.openDialog()}\n >\n <Link2 size={16} />\n </button>\n )\n}\n\n/** References tab: Update cross-references (numbers brought up to date, broken ones listed). */\nexport function UpdateCrossReferencesButton() {\n const references = useCrossReferences()\n if (!references) return null\n return (\n <button\n type=\"button\"\n className=\"native-docx-ribbon-trigger\"\n aria-label={references.labels.update}\n title={references.labels.update}\n data-testid=\"docx-update-cross-references\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => references.update()}\n >\n <RefreshCcw size={16} />\n </button>\n )\n}\n\n/** Rows for the editor's right-click menu: Insert defined term, Insert cross-reference. */\nexport function DocxContextMenuExtras() {\n const terms = useDefinedTerms()\n const references = useCrossReferences()\n if (!terms && !references) return null\n return (\n <>\n <DocxEditor.ContextMenu.Separator />\n {terms && (\n <DocxEditor.ContextMenu.Item\n label=\"Insert defined term\"\n icon={<BookA size={14} />}\n shortcut=\"@@\"\n onSelect={() => terms.openPicker()}\n />\n )}\n {references && (\n <DocxEditor.ContextMenu.Item\n label={references.labels.insert}\n icon={<Link2 size={14} />}\n onSelect={() => references.openDialog()}\n />\n )}\n </>\n )\n}\n","/**\n * Word's Layout presets — Margins, Size and Orientation — as page-setup updates in twips, the\n * unit `w:pgSz`/`w:pgMar` and the engine's `setPageSetup` use. Pure, so the ribbon's choices and\n * the preset a section already matches are tested without an editor.\n */\n\nimport type { PageSetup } from '@docx-editor.dev/react'\n\nconst TWIPS_PER_INCH = 1440\n\nexport interface MarginPreset {\n id: string\n label: string\n /** Twips. */\n top: number\n right: number\n bottom: number\n left: number\n}\n\n/** Word's Margins gallery (Mirrored is a binding option the engine does not write). */\nexport const MARGIN_PRESETS: readonly MarginPreset[] = [\n { id: 'normal', label: 'Normal', top: 1440, right: 1440, bottom: 1440, left: 1440 },\n { id: 'narrow', label: 'Narrow', top: 720, right: 720, bottom: 720, left: 720 },\n { id: 'moderate', label: 'Moderate', top: 1440, right: 1080, bottom: 1440, left: 1080 },\n { id: 'wide', label: 'Wide', top: 1440, right: 2880, bottom: 1440, left: 2880 },\n]\n\nexport interface PaperSize {\n id: string\n label: string\n /** Portrait width and height, in twips. */\n width: number\n height: number\n}\n\n/** Word's Size gallery: the paper sizes people actually pick. */\nexport const PAPER_SIZES: readonly PaperSize[] = [\n { id: 'letter', label: 'Letter', width: 12240, height: 15840 },\n { id: 'legal', label: 'Legal', width: 12240, height: 20160 },\n { id: 'a4', label: 'A4', width: 11906, height: 16838 },\n { id: 'a5', label: 'A5', width: 8391, height: 11906 },\n { id: 'executive', label: 'Executive', width: 10440, height: 15120 },\n]\n\n/** Word rounds page geometry to whole twips; files written elsewhere drift by a few. */\nconst TOLERANCE = 20\nconst near = (a: number, b: number) => Math.abs(a - b) <= TOLERANCE\n\n/** The margin preset the section matches, if any (the gallery marks it as current). */\nexport function matchMargins(setup: PageSetup | null): string | null {\n if (!setup) return null\n const m = setup.marginsTwips\n return (\n MARGIN_PRESETS.find(\n (p) =>\n near(p.top, m.top) &&\n near(p.right, m.right) &&\n near(p.bottom, m.bottom) &&\n near(p.left, m.left)\n )?.id ?? null\n )\n}\n\n/** The paper size the section matches in either orientation, if any. */\nexport function matchPaper(setup: PageSetup | null): string | null {\n if (!setup) return null\n const short = Math.min(setup.pageWidthTwips, setup.pageHeightTwips)\n const long = Math.max(setup.pageWidthTwips, setup.pageHeightTwips)\n return PAPER_SIZES.find((p) => near(p.width, short) && near(p.height, long))?.id ?? null\n}\n\n/** A paper size's dimensions laid the way the section is turned, so picking a size keeps it. */\nexport function orientedSize(\n paper: PaperSize,\n orientation: PageSetup['orientation'] | undefined\n): { pageWidthTwips: number; pageHeightTwips: number } {\n return orientation === 'landscape'\n ? { pageWidthTwips: paper.height, pageHeightTwips: paper.width }\n : { pageWidthTwips: paper.width, pageHeightTwips: paper.height }\n}\n\n/** `1440` -> `1\"`, `1080` -> `0.75\"`: how the gallery describes a margin. */\nexport function inches(twips: number): string {\n return `${Number((twips / TWIPS_PER_INCH).toFixed(2))}\"`\n}\n\n/** `Letter` -> `8.5\" × 11\"`. */\nexport function paperDescription(paper: PaperSize): string {\n return `${inches(paper.width)} × ${inches(paper.height)}`\n}\n","/**\n * The native editor's Layout tab, laid out like Word's Page Setup group: Margins, Orientation,\n * Size, Columns, Breaks, and the Page Setup dialog for anything the galleries do not offer.\n *\n * Everything goes through the engine's own commands: `setPageSetup` (scoped to the caret's section,\n * as Word's galleries are) for the galleries, the engine's break slots for Breaks, and its packaged\n * Page Setup dialog. Columns are offered but disabled: the engine lays out a document's existing\n * `w:cols`, but has no command that writes them (see the README).\n */\n\nimport React, { useState } from 'react'\nimport {\n DocxEditor,\n useEditorCommand,\n usePageSetup,\n type EditorCommand,\n type PageSetup,\n} from '@docx-editor.dev/react'\nimport {\n Columns2,\n FileText,\n RectangleHorizontal,\n RectangleVertical,\n Scaling,\n SeparatorHorizontal,\n Settings2,\n} from 'lucide-react'\nimport { RibbonMenu } from '../RibbonMenu'\nimport { RibbonItem } from '../RibbonOverflow'\nimport {\n MARGIN_PRESETS,\n PAPER_SIZES,\n inches,\n matchMargins,\n matchPaper,\n orientedSize,\n paperDescription,\n} from './presets'\n\n/** Why Columns is disabled, in the words the tooltip shows. */\nconst COLUMNS_UNSUPPORTED =\n 'Text columns are not available in this editor yet. Documents that already use columns display and save them unchanged.'\n\ninterface Choice {\n id: string\n label: string\n detail?: string\n icon?: React.ReactNode\n disabled?: boolean\n title?: string\n}\n\n/** A ribbon gallery: one column of choices, the current one marked, closing once one is picked. */\nexport function RibbonGallery({\n label,\n choices,\n current,\n onPick,\n close,\n testId,\n}: {\n label: string\n choices: readonly Choice[]\n current?: string | null\n onPick: (id: string) => void\n close: () => void\n testId?: string\n}) {\n return (\n <div className=\"native-docx-gallery\" role=\"menu\" aria-label={label} data-testid={testId}>\n {choices.map((choice) => (\n <button\n key={choice.id}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={current === choice.id}\n disabled={choice.disabled}\n title={choice.title}\n data-choice={choice.id}\n onClick={() => {\n onPick(choice.id)\n close()\n }}\n >\n {choice.icon}\n <span className=\"native-docx-gallery-text\">\n <span className=\"native-docx-gallery-label\">{choice.label}</span>\n {choice.detail && <span className=\"native-docx-gallery-detail\">{choice.detail}</span>}\n </span>\n </button>\n ))}\n </div>\n )\n}\n\nconst marginDetail = (p: (typeof MARGIN_PRESETS)[number]) =>\n `Top ${inches(p.top)} · Bottom ${inches(p.bottom)} · Left ${inches(p.left)} · Right ${inches(p.right)}`\n\nfunction Margins({ setup, apply, openDialog }: PageSetupProps) {\n return (\n <RibbonMenu label=\"Margins\" icon={<Scaling size={16} />} testId=\"docx-layout-margins\">\n {(close) => (\n <>\n <RibbonGallery\n label=\"Margins\"\n current={matchMargins(setup)}\n close={close}\n choices={MARGIN_PRESETS.map((p) => ({\n id: p.id,\n label: p.label,\n detail: marginDetail(p),\n }))}\n onPick={(id) => {\n const p = MARGIN_PRESETS.find((m) => m.id === id)!\n apply({\n marginTopTwips: p.top,\n marginRightTwips: p.right,\n marginBottomTwips: p.bottom,\n marginLeftTwips: p.left,\n scope: 'section',\n })\n }}\n />\n <button\n type=\"button\"\n className=\"native-docx-gallery-more\"\n onClick={() => {\n close()\n openDialog()\n }}\n >\n Custom margins…\n </button>\n </>\n )}\n </RibbonMenu>\n )\n}\n\nfunction Orientation({ setup, apply }: PageSetupProps) {\n return (\n <RibbonMenu\n label=\"Orientation\"\n icon={\n setup?.orientation === 'landscape' ? (\n <RectangleHorizontal size={16} />\n ) : (\n <RectangleVertical size={16} />\n )\n }\n testId=\"docx-layout-orientation\"\n >\n {(close) => (\n <RibbonGallery\n label=\"Orientation\"\n current={setup?.orientation}\n close={close}\n choices={[\n { id: 'portrait', label: 'Portrait', icon: <RectangleVertical size={16} /> },\n { id: 'landscape', label: 'Landscape', icon: <RectangleHorizontal size={16} /> },\n ]}\n onPick={(id) => apply({ orientation: id as PageSetup['orientation'], scope: 'section' })}\n />\n )}\n </RibbonMenu>\n )\n}\n\nfunction Size({ setup, apply, openDialog }: PageSetupProps) {\n return (\n <RibbonMenu label=\"Size\" icon={<FileText size={16} />} testId=\"docx-layout-size\">\n {(close) => (\n <>\n <RibbonGallery\n label=\"Size\"\n current={matchPaper(setup)}\n close={close}\n choices={PAPER_SIZES.map((p) => ({\n id: p.id,\n label: p.label,\n detail: paperDescription(p),\n }))}\n onPick={(id) =>\n apply({\n ...orientedSize(\n PAPER_SIZES.find((p) => p.id === id)!,\n setup?.orientation\n ),\n scope: 'section',\n })\n }\n />\n <button\n type=\"button\"\n className=\"native-docx-gallery-more\"\n onClick={() => {\n close()\n openDialog()\n }}\n >\n More paper sizes…\n </button>\n </>\n )}\n </RibbonMenu>\n )\n}\n\nconst COLUMN_BREAK: EditorCommand = { type: 'insertBreak', kind: 'column' }\n\n/** Word's Breaks gallery, each row the engine's own break slot. */\nfunction Breaks() {\n const page = useEditorCommand('insert.pageBreak')\n const nextPage = useEditorCommand('insert.sectionBreakNextPage')\n const continuous = useEditorCommand('insert.sectionBreakContinuous')\n const column = useEditorCommand(COLUMN_BREAK)\n const rows = [\n { id: 'page', label: 'Page', detail: 'Start the next page here', command: page },\n { id: 'column', label: 'Column', detail: 'Start the next column here', command: column },\n {\n id: 'nextPage',\n label: 'Next Page',\n detail: 'Section break: new section on the next page',\n command: nextPage,\n },\n {\n id: 'continuous',\n label: 'Continuous',\n detail: 'Section break: new section on the same page',\n command: continuous,\n },\n ]\n return (\n <RibbonMenu label=\"Breaks\" icon={<SeparatorHorizontal size={16} />} testId=\"docx-layout-breaks\">\n {(close) => (\n <RibbonGallery\n label=\"Breaks\"\n close={close}\n choices={rows.map((row) => ({\n id: row.id,\n label: row.label,\n detail: row.detail,\n disabled: !row.command.isEnabled,\n title: row.command.disabledReason ?? undefined,\n }))}\n onPick={(id) => void rows.find((row) => row.id === id)?.command.execute()}\n />\n )}\n </RibbonMenu>\n )\n}\n\ninterface PageSetupProps {\n setup: PageSetup | null\n apply: ReturnType<typeof usePageSetup>['apply']\n openDialog: () => void\n}\n\n/** Layout tab: Margins, Orientation, Size, Columns, Breaks, Page Setup. */\nexport function LayoutButtons() {\n const { pageSetup, apply } = usePageSetup()\n const [dialog, setDialog] = useState(false)\n const props: PageSetupProps = { setup: pageSetup, apply, openDialog: () => setDialog(true) }\n return (\n <>\n <RibbonItem id=\"layout-margins\" label=\"Margins\">\n <Margins {...props} />\n </RibbonItem>\n <RibbonItem id=\"layout-orientation\" label=\"Orientation\">\n <Orientation {...props} />\n </RibbonItem>\n <RibbonItem id=\"layout-size\" label=\"Size\">\n <Size {...props} />\n </RibbonItem>\n <RibbonItem id=\"layout-columns\" label=\"Columns\">\n <DocxEditor.Toolbar.Action\n label=\"Columns\"\n icon={<Columns2 size={16} />}\n disabled\n disabledReason={COLUMNS_UNSUPPORTED}\n className=\"native-docx-layout-columns\"\n />\n </RibbonItem>\n <RibbonItem id=\"layout-breaks\" label=\"Breaks\">\n <Breaks />\n </RibbonItem>\n <RibbonItem id=\"layout-page-setup\" label=\"Page Setup…\">\n <DocxEditor.Toolbar.Action\n label=\"Page Setup…\"\n icon={<Settings2 size={16} />}\n onSelect={() => setDialog(true)}\n className=\"native-docx-layout-page-setup\"\n />\n </RibbonItem>\n <DocxEditor.PageSetupDialog open={dialog} onClose={() => setDialog(false)} />\n </>\n )\n}\n","/**\n * The native editor's contextual Table tab — Word's Table Design and Table Layout tabs in one row,\n * offered while the caret is in a table.\n *\n * Rows, columns, deletion and cell alignment are the engine's table commands; borders and shading\n * are its packaged table chrome. Merge, Split and Header Row are bound to the engine's commands\n * too, so they show the engine's own reason while it refuses them and work as soon as it does not.\n */\n\nimport React from 'react'\nimport { DocxEditor, useEditorCommand, type EditorCommand } from '@docx-editor.dev/react'\nimport {\n AlignVerticalJustifyCenter,\n AlignVerticalJustifyEnd,\n AlignVerticalJustifyStart,\n BetweenHorizontalEnd,\n BetweenHorizontalStart,\n BetweenVerticalEnd,\n BetweenVerticalStart,\n Heading,\n Merge,\n Split,\n Trash2,\n} from 'lucide-react'\nimport { RibbonMenu } from '../RibbonMenu'\nimport { RibbonItem } from '../RibbonOverflow'\nimport { RibbonGallery } from './LayoutRibbon'\n\n// Module constants: `useEditorCommand` keys its subscription on the command object.\nconst ROW_ABOVE: EditorCommand = { type: 'insertRow', where: 'above' }\nconst ROW_BELOW: EditorCommand = { type: 'insertRow', where: 'below' }\nconst COLUMN_LEFT: EditorCommand = { type: 'insertColumn', where: 'left' }\nconst COLUMN_RIGHT: EditorCommand = { type: 'insertColumn', where: 'right' }\nconst MERGE: EditorCommand = { type: 'mergeCells' }\nconst SPLIT: EditorCommand = { type: 'splitCell', rows: 1, cols: 2 }\nconst HEADER_ROW: EditorCommand = { type: 'toggleHeaderRow' }\nconst DELETE_ROW: EditorCommand = { type: 'deleteRow' }\nconst DELETE_COLUMN: EditorCommand = { type: 'deleteColumn' }\nconst DELETE_TABLE: EditorCommand = { type: 'deleteTable' }\nconst ALIGN_TOP: EditorCommand = { type: 'setTableCellVerticalAlignment', alignment: 'top' }\nconst ALIGN_CENTER: EditorCommand = { type: 'setTableCellVerticalAlignment', alignment: 'center' }\nconst ALIGN_BOTTOM: EditorCommand = { type: 'setTableCellVerticalAlignment', alignment: 'bottom' }\n\ninterface GalleryRow {\n id: string\n label: string\n icon?: React.ReactNode\n command: EditorCommand\n}\n\n/** One gallery row bound to its command, so the gallery knows what the engine refuses. */\nfunction useRows(rows: readonly GalleryRow[]) {\n // A fixed number of rows per gallery, so the hooks run in the same order every render.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return rows.map((row) => ({ ...row, state: useEditorCommand(row.command) }))\n}\n\nfunction CommandGallery({\n label,\n icon,\n testId,\n rows,\n}: {\n label: string\n icon: React.ReactNode\n testId: string\n rows: readonly GalleryRow[]\n}) {\n const bound = useRows(rows)\n return (\n <RibbonItem id={testId} label={label}>\n <RibbonMenu label={label} icon={icon} testId={testId}>\n {(close) => (\n <RibbonGallery\n label={label}\n close={close}\n choices={bound.map((row) => ({\n id: row.id,\n label: row.label,\n icon: row.icon,\n disabled: !row.state.isEnabled,\n title: row.state.disabledReason ?? undefined,\n }))}\n onPick={(id) => void bound.find((row) => row.id === id)?.state.execute()}\n />\n )}\n </RibbonMenu>\n </RibbonItem>\n )\n}\n\nfunction CommandAction({\n command,\n label,\n icon,\n testId,\n}: {\n command: EditorCommand\n label: string\n icon: React.ReactNode\n testId: string\n}) {\n const state = useEditorCommand(command)\n return (\n <RibbonItem id={`table-${testId}`} label={label}>\n <DocxEditor.Toolbar.Action\n label={label}\n icon={icon}\n active={state.isActive}\n disabled={!state.isEnabled}\n disabledReason={state.disabledReason ?? undefined}\n onSelect={() => void state.execute()}\n className={`native-docx-table-${testId}`}\n />\n </RibbonItem>\n )\n}\n\n/** Table tab: insert and delete rows and columns, merge, split, header row, borders and shading. */\nexport function TableButtons() {\n return (\n <>\n <CommandAction\n command={ROW_ABOVE}\n label=\"Insert row above\"\n icon={<BetweenHorizontalStart size={16} />}\n testId=\"row-above\"\n />\n <CommandAction\n command={ROW_BELOW}\n label=\"Insert row below\"\n icon={<BetweenHorizontalEnd size={16} />}\n testId=\"row-below\"\n />\n <CommandAction\n command={COLUMN_LEFT}\n label=\"Insert column left\"\n icon={<BetweenVerticalStart size={16} />}\n testId=\"column-left\"\n />\n <CommandAction\n command={COLUMN_RIGHT}\n label=\"Insert column right\"\n icon={<BetweenVerticalEnd size={16} />}\n testId=\"column-right\"\n />\n <CommandGallery\n label=\"Delete\"\n icon={<Trash2 size={16} />}\n testId=\"docx-table-delete\"\n rows={[\n { id: 'row', label: 'Delete row', command: DELETE_ROW },\n { id: 'column', label: 'Delete column', command: DELETE_COLUMN },\n { id: 'table', label: 'Delete table', command: DELETE_TABLE },\n ]}\n />\n <CommandAction\n command={MERGE}\n label=\"Merge cells\"\n icon={<Merge size={16} />}\n testId=\"merge\"\n />\n <CommandAction command={SPLIT} label=\"Split cell\" icon={<Split size={16} />} testId=\"split\" />\n <CommandAction\n command={HEADER_ROW}\n label=\"Repeat header row\"\n icon={<Heading size={16} />}\n testId=\"header-row\"\n />\n <CommandGallery\n label=\"Cell alignment\"\n icon={<AlignVerticalJustifyCenter size={16} />}\n testId=\"docx-table-align\"\n rows={[\n {\n id: 'top',\n label: 'Top',\n icon: <AlignVerticalJustifyStart size={16} />,\n command: ALIGN_TOP,\n },\n {\n id: 'center',\n label: 'Center',\n icon: <AlignVerticalJustifyCenter size={16} />,\n command: ALIGN_CENTER,\n },\n {\n id: 'bottom',\n label: 'Bottom',\n icon: <AlignVerticalJustifyEnd size={16} />,\n command: ALIGN_BOTTOM,\n },\n ]}\n />\n {/* The engine's own border and shading chrome, inline: its pickers open their own menus. */}\n <RibbonItem id=\"table-border-target\" label=\"Borders\">\n <DocxEditor.Toolbar.TableBorderTarget />\n </RibbonItem>\n <RibbonItem id=\"table-border-style\" label=\"Border style\">\n <DocxEditor.Toolbar.TableBorderStyle />\n </RibbonItem>\n <RibbonItem id=\"table-border-width\" label=\"Border width\">\n <DocxEditor.Toolbar.TableBorderWidth />\n </RibbonItem>\n <RibbonItem id=\"table-border-color\" label=\"Border color\">\n <DocxEditor.Toolbar.TableBorderColor />\n </RibbonItem>\n <RibbonItem id=\"table-cell-fill\" label=\"Shading\">\n <DocxEditor.Toolbar.TableCellFill />\n </RibbonItem>\n </>\n )\n}\n","/**\n * Word's Insert Caption: a paragraph in the `Caption` style reading `Figure 1: text`, whose\n * number is a `SEQ Figure` field so Word renumbers every caption when fields update.\n *\n * The engine has no caption command, but its paste lands an embedded `.docx` fragment intact —\n * the `w:fldSimple` and the paragraph style, whose definition is merged into the document when\n * the document has none. The number written as the field's result is the next one in reading\n * order at insertion; the engine paints a SEQ field's stored result rather than recomputing it.\n */\n\nimport { trackInsertion, type Revision } from '@arbidocs/coedit/template'\nimport { docxPackage, documentXml, esc, stylesXml } from '../../tags/ooxml'\n\nexport const CAPTION_LABELS = ['Figure', 'Table', 'Equation'] as const\nexport type CaptionLabel = (typeof CAPTION_LABELS)[number]\n\n/** Word's built-in Caption style, for documents that do not define one. */\nconst CAPTION_STYLES = stylesXml(\n '',\n '<w:style w:type=\"paragraph\" w:default=\"1\" w:styleId=\"Normal\"><w:name w:val=\"Normal\"/><w:qFormat/></w:style>' +\n '<w:style w:type=\"paragraph\" w:styleId=\"Caption\"><w:name w:val=\"caption\"/><w:basedOn w:val=\"Normal\"/><w:next w:val=\"Normal\"/><w:uiPriority w:val=\"35\"/><w:unhideWhenUsed/><w:qFormat/><w:pPr><w:spacing w:after=\"200\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:rPr><w:i/><w:iCs/><w:color w:val=\"44546A\"/><w:sz w:val=\"18\"/><w:szCs w:val=\"18\"/></w:rPr></w:style>'\n)\n\ntype Node = {\n id?: string\n localName?: string\n kind?: string\n value?: string\n attributes?: readonly { localName: string; value: string }[]\n children?: readonly Node[]\n}\n\n/** The `SEQ` identifier of a field instruction (`SEQ Figure \\* ARABIC` -> `Figure`). */\nexport function seqIdentifier(instruction: string): string | null {\n const match = /^\\s*SEQ\\s+(\"[^\"]+\"|\\S+)/i.exec(instruction)\n return match ? match[1].replace(/\"/g, '') : null\n}\n\n/**\n * How many `SEQ <label>` fields the tree holds — simple fields and complex `w:instrText` ones — in\n * reading order up to and including the paragraph `throughId` (all of them when absent).\n */\nexport function countSeqFields(root: Node, label: string, throughId?: string): number {\n let count = 0\n let done = false\n const target = label.toLowerCase()\n const visit = (node: Node) => {\n if (done) return\n if (node.localName === 'fldSimple') {\n const instr = node.attributes?.find((a) => a.localName === 'instr')?.value ?? ''\n if (seqIdentifier(instr)?.toLowerCase() === target) count++\n } else if (node.localName === 'instrText') {\n const text = (node.children ?? []).map((c) => c.value ?? '').join('')\n if (seqIdentifier(text)?.toLowerCase() === target) count++\n }\n node.children?.forEach(visit)\n if (throughId && node.id === throughId) done = true\n }\n visit(root)\n return count\n}\n\n/** The caption paragraph: `Label N` with N a SEQ field, then `: text` when there is text. */\nexport function captionParagraphXml(label: string, number: number, text: string): string {\n const run = (value: string) => `<w:r><w:t xml:space=\"preserve\">${esc(value)}</w:t></w:r>`\n const rest = text.trim() ? `: ${text.trim()}` : ''\n return (\n `<w:p><w:pPr><w:pStyle w:val=\"Caption\"/></w:pPr>${run(`${label} `)}` +\n `<w:fldSimple w:instr=\" SEQ ${esc(label)} \\\\* ARABIC \"><w:r><w:t>${number}</w:t></w:r></w:fldSimple>` +\n `${rest ? run(rest) : ''}</w:p>`\n )\n}\n\nfunction base64(bytes: Uint8Array): string {\n let binary = ''\n for (let i = 0; i < bytes.length; i += 0x8000)\n binary += String.fromCharCode(...bytes.subarray(i, i + 0x8000))\n return btoa(binary)\n}\n\n/**\n * Clipboard HTML that pastes the caption as a whole paragraph (the editor's own fragment form),\n * marked as a tracked insertion by `revision` when one is given.\n */\nexport function captionFragmentHtml(\n label: string,\n number: number,\n text: string,\n revision?: Revision | null\n): string {\n const untracked = docxPackage({\n document: documentXml(captionParagraphXml(label, number, text)),\n styles: CAPTION_STYLES,\n title: 'Caption',\n })\n const bytes = revision ? trackInsertion(untracked, revision, true) : untracked\n return `<div data-docx-fragment=\"${base64(bytes)}\" data-docx-fragment-end=\"covered\"></div>`\n}\n","/**\n * The native editor's contextual Picture tab — Word's Picture Format tab — offered while a picture\n * is selected: Wrap Text, Size & Position, Alt Text (the engine's packaged picture chrome), rotate\n * and flip, and Insert Caption.\n */\n\nimport React, { useState } from 'react'\nimport {\n DocxEditor,\n useDocxEditor,\n useEditorCommand,\n type EditorCommand,\n} from '@docx-editor.dev/react'\nimport { Captions, FlipHorizontal2, FlipVertical2, RotateCcw, RotateCw } from 'lucide-react'\nimport { RibbonMenu } from '../RibbonMenu'\nimport { RibbonItem } from '../RibbonOverflow'\nimport { useTrackedOrNoted } from '../structural/useTrackedOrNoted'\nimport { CAPTION_LABELS, captionFragmentHtml, countSeqFields, type CaptionLabel } from './caption'\n\ntype TransformKind = Extract<EditorCommand, { type: 'transformImage' }>['action']\nconst TRANSFORMS = Object.fromEntries(\n (['rotateCW', 'rotateCCW', 'flipH', 'flipV'] as const).map((action) => [\n action,\n { type: 'transformImage', action } as EditorCommand,\n ])\n) as Record<TransformKind, EditorCommand>\n\ntype Editor = NonNullable<ReturnType<typeof useDocxEditor>>\n\nfunction TransformAction({\n action,\n label,\n icon,\n}: {\n action: TransformKind\n label: string\n icon: React.ReactNode\n}) {\n const state = useEditorCommand(TRANSFORMS[action])\n return (\n <RibbonItem id={`picture-${action}`} label={label}>\n <DocxEditor.Toolbar.Action\n label={label}\n icon={icon}\n disabled={!state.isEnabled}\n disabledReason={state.disabledReason ?? undefined}\n onSelect={() => void state.execute()}\n className={`native-docx-picture-${action}`}\n />\n </RibbonItem>\n )\n}\n\n/**\n * Insert a caption paragraph directly after the caret's paragraph (the picture's), numbered after\n * the captions with the same label that come before it. Returns the inserted number, or null when\n * the editor refused.\n */\nfunction insertCaption(\n editor: Editor,\n label: CaptionLabel,\n text: string,\n track: ReturnType<typeof useTrackedOrNoted>\n): number | null {\n const surface = editor.surface\n const selection = surface?.state().selection\n if (!surface || !selection) return null\n const { paragraphId } = selection.head\n const number =\n countSeqFields(\n surface.session.part().root as unknown as Parameters<typeof countSeqFields>[0],\n label,\n paragraphId\n ) + 1\n const ids = surface.session.paragraphIds()\n const next = ids[ids.indexOf(paragraphId) + 1]\n const caption = `${label} ${number}${text.trim() ? `: ${text.trim()}` : ''}`\n // While suggesting, the caption goes in as a tracked insertion (or, failing that, with a comment).\n const outcome = track({\n label: `Inserted caption: ${caption}`,\n inserted: (inserted: number | null) => inserted !== null,\n insert: (revision) => {\n if (next) {\n // A covered paste at the start of the next paragraph lands as whole paragraphs before it.\n surface.setSelection({\n anchor: { paragraphId: next, offset: 0 },\n head: { paragraphId: next, offset: 0 },\n })\n } else {\n // The picture's paragraph ends the document: open a paragraph after it first. Select All\n // ends at the end of the last paragraph, which is the one offset this needs.\n editor.exec({ type: 'selectAll' })\n const end = surface.state().selection?.head\n if (!end) return null\n surface.setSelection({ anchor: end, head: end })\n surface.splitParagraph()\n }\n const ok = editor.exec({\n type: 'paste',\n text: caption,\n html: captionFragmentHtml(label, number, text, revision),\n }).ok\n return ok ? number : null\n },\n })\n return outcome?.result ?? null\n}\n\n/** Word's Insert Caption: a label, the caption text, and Insert. */\nfunction CaptionButton({ defaultLabel = 'Figure' }: { defaultLabel?: CaptionLabel }) {\n const editor = useDocxEditor()\n const track = useTrackedOrNoted()\n const [label, setLabel] = useState<CaptionLabel>(defaultLabel)\n const [text, setText] = useState('')\n const [error, setError] = useState('')\n return (\n <RibbonMenu label=\"Insert caption\" icon={<Captions size={16} />} testId=\"docx-insert-caption\">\n {(close) => (\n <form\n className=\"native-docx-form\"\n onSubmit={(event) => {\n event.preventDefault()\n if (!editor) return\n try {\n if (insertCaption(editor, label, text, track) === null)\n return setError('The caption could not be inserted here.')\n setText('')\n setError('')\n close()\n editor.focus()\n } catch (failure) {\n setError(failure instanceof Error ? failure.message : String(failure))\n }\n }}\n >\n <label>\n Label\n <select\n value={label}\n onChange={(event) => setLabel(event.target.value as CaptionLabel)}\n >\n {CAPTION_LABELS.map((value) => (\n <option key={value}>{value}</option>\n ))}\n </select>\n </label>\n <label>\n Caption\n <input\n autoFocus\n value={text}\n placeholder=\"Optional text after the number\"\n data-testid=\"docx-caption-text\"\n onChange={(event) => setText(event.target.value)}\n />\n </label>\n {error && <p role=\"alert\">{error}</p>}\n <button type=\"submit\" data-testid=\"docx-caption-insert\">\n Insert\n </button>\n </form>\n )}\n </RibbonMenu>\n )\n}\n\n/** Picture tab: Wrap Text, Size & Position, Alt Text, rotate and flip, Insert Caption. */\nexport function PictureButtons() {\n return (\n <>\n <RibbonItem id=\"picture-wrap\" label=\"Wrap text\">\n <DocxEditor.Toolbar.ImageWrap />\n </RibbonItem>\n <RibbonItem id=\"picture-properties\" label=\"Size and position\">\n <DocxEditor.Toolbar.ImageProperties />\n </RibbonItem>\n <RibbonItem id=\"picture-alt-text\" label=\"Alt text\">\n <DocxEditor.Toolbar.ImageAltText />\n </RibbonItem>\n <TransformAction action=\"rotateCW\" label=\"Rotate right 90°\" icon={<RotateCw size={16} />} />\n <TransformAction action=\"rotateCCW\" label=\"Rotate left 90°\" icon={<RotateCcw size={16} />} />\n <TransformAction\n action=\"flipH\"\n label=\"Flip horizontal\"\n icon={<FlipHorizontal2 size={16} />}\n />\n <TransformAction action=\"flipV\" label=\"Flip vertical\" icon={<FlipVertical2 size={16} />} />\n <RibbonItem id=\"picture-caption\" label=\"Insert caption\">\n <CaptionButton />\n </RibbonItem>\n </>\n )\n}\n","/**\n * The ribbon tabs this folder adds: Layout always, and Word's contextual Table and Picture tabs\n * while the caret is in a table or a picture is selected.\n */\n\nimport React from 'react'\nimport { useEditorState } from '@docx-editor.dev/react'\nimport { LayoutButtons } from './LayoutRibbon'\nimport { TableButtons } from './TableRibbon'\nimport { PictureButtons } from './PictureRibbon'\n\nexport const LAYOUT_TAB = 'Layout'\nconst TABLE_TAB = 'Table'\nconst PICTURE_TAB = 'Picture'\n\n/**\n * The contextual tabs available now, and the tab to show: a contextual tab that no longer applies\n * (the caret left the table, the picture was deselected) falls back to Home, as Word's does.\n */\nexport function useContextualTabs(tab: string): { tabs: string[]; shown: string } {\n const inTable = useEditorState((snapshot) => snapshot.table !== null)\n const onPicture = useEditorState((snapshot) => snapshot.image !== null)\n const tabs = [...(inTable ? [TABLE_TAB] : []), ...(onPicture ? [PICTURE_TAB] : [])]\n const contextual = tab === TABLE_TAB || tab === PICTURE_TAB\n return { tabs, shown: contextual && !tabs.includes(tab) ? 'Home' : tab }\n}\n\n/** The body of the Layout, Table or Picture tab; nothing for the other tabs. */\nexport function LayoutTabContent({ tab }: { tab: string }) {\n if (tab === LAYOUT_TAB) return <LayoutButtons />\n if (tab === TABLE_TAB) return <TableButtons />\n if (tab === PICTURE_TAB) return <PictureButtons />\n return null\n}\n","/**\n * Insert › Generate image: a prompt goes to the host's image generation (the platform's `/image`\n * command), and the picture that comes back is inserted where the caret was when Generate was\n * pressed, as an ordinary inline picture whose alt text is the prompt. The engine stores the bytes\n * as the document's own media part, so the picture saves with the DOCX like any inserted one.\n *\n * Generation takes a while. The caret is remembered by the paragraph's `w14:paraId`, which survives\n * a collaboration room re-installing the document meanwhile, and the person may keep writing. The\n * ribbon may even be remounted meanwhile (a new editor instance over the same room): the picture\n * then goes into whichever mounted editor holds that paragraph.\n */\n\nimport React, { useEffect, useRef, useState, useSyncExternalStore } from 'react'\nimport { normalizeImageBytes, useDocxEditor, useEditorState } from '@docx-editor.dev/react'\nimport { executeImageCommand } from '@docx-editor.dev/core/editor'\nimport { Loader2, Sparkles } from 'lucide-react'\nimport { RibbonMenu } from '../RibbonMenu'\n\n/** The host's image generation, as the editor uses it. */\nexport interface DocxImageGeneration {\n /** Generate one image from `prompt` and return its bytes (PNG, JPEG, GIF or WebP). */\n generate: (\n prompt: string,\n options: { aspectRatio?: string; signal?: AbortSignal }\n ) => Promise<Uint8Array>\n /** The aspect ratios the image model accepts; none offers only the model's default. */\n aspectRatios?: readonly { value: string; label: string }[]\n notify?: (message: string, kind: 'success' | 'error') => void\n}\n\ntype Editor = NonNullable<ReturnType<typeof useDocxEditor>>\n\n/** Alt text is the prompt; Word's docPr title is short, so it carries the first line. */\nconst titleOf = (prompt: string) => {\n const line = prompt.trim().split('\\n')[0]\n return line.length > 80 ? `${line.slice(0, 79)}…` : line\n}\n\ninterface Caret {\n paraId: string | null\n paragraphId: string\n offset: number\n}\n\nfunction rememberCaret(editor: Editor): Caret | null {\n const surface = editor.surface\n const head = surface?.state().selection?.head\n if (!surface || !head) return null\n return { paraId: surface.session.paraIdOf(head.paragraphId), ...head }\n}\n\n/** Editors with Generate image mounted, newest last, and how many generations are running. */\nconst mounted: Editor[] = []\nlet running = 0\nconst listeners = new Set<() => void>()\nconst setRunning = (delta: number) => {\n running += delta\n listeners.forEach((listener) => listener())\n}\nconst subscribe = (listener: () => void) => {\n listeners.add(listener)\n return () => void listeners.delete(listener)\n}\n\n/**\n * The editor to insert into: the one the request came from while it is still mounted, else the\n * newest mounted editor whose document holds the remembered paragraph. Null when the document was\n * closed meanwhile.\n */\nexport function insertionTarget(\n origin: Editor,\n caret: Caret | null,\n editors: readonly Editor[] = mounted\n): Editor | null {\n if (editors.includes(origin) && origin.surface) return origin\n const paraId = caret?.paraId\n if (!paraId) return null\n for (let i = editors.length - 1; i >= 0; i--) {\n const session = editors[i].surface?.session\n if (session?.nodeIdOf(paraId)) return editors[i]\n }\n return null\n}\n\nfunction restoreCaret(editor: Editor, caret: Caret | null) {\n const surface = editor.surface\n if (!surface || !caret) return\n const paragraphId = (caret.paraId && surface.session.nodeIdOf(caret.paraId)) || caret.paragraphId\n if (!surface.session.paragraphIds().includes(paragraphId)) return\n const point = { paragraphId, offset: caret.offset }\n surface.setSelection({ anchor: point, head: point })\n}\n\n/** Insert `bytes` at `caret` as an inline picture. Throws with a readable reason on refusal. */\nasync function insertGeneratedImage(\n editor: Editor,\n bytes: Uint8Array,\n prompt: string,\n caret: Caret | null\n) {\n const image = normalizeImageBytes(bytes)\n if (!image.ok) throw new Error('The generated image is not in a format Word can embed.')\n // The insert decodes the image before it commits, and refuses if the selection moved meanwhile\n // (a freshly mounted editor settles its selection late): put the caret back and try again.\n let result: Awaited<ReturnType<typeof executeImageCommand>> | undefined\n for (let attempt = 0; attempt < 3 && !result?.ok; attempt++) {\n // An unfocused page re-applies its own DOM selection over a programmatic one.\n editor.focus()\n restoreCaret(editor, caret)\n result = await executeImageCommand(editor, {\n type: 'insertImage',\n data: image.bytes,\n mime: image.mime,\n widthPoints: image.widthPoints,\n heightPoints: image.heightPoints,\n description: prompt.trim(),\n title: titleOf(prompt),\n })\n if (!result.ok && result.reason !== 'stale drawing selection') break\n }\n if (!result?.ok) throw new Error(result?.reason || 'The picture could not be inserted here.')\n}\n\nconst AUTO = ''\n\n/**\n * Make this ribbon's editor a place a running generation can land. The ribbon calls it whatever its\n * tab: a remounted editor opens on Home, without the Generate image button.\n */\nexport function useGenerateImageTarget() {\n const editor = useDocxEditor()\n // The editor appears without a re-render of its own; its loaded state brings one.\n const loaded = useEditorState((snapshot) => !snapshot.isLoading)\n useEffect(() => {\n if (!editor || !loaded) return\n mounted.push(editor)\n return () => void mounted.splice(mounted.indexOf(editor), 1)\n }, [editor, loaded])\n}\n\nexport function GenerateImageButton({ generation }: { generation: DocxImageGeneration }) {\n const editor = useDocxEditor()\n const [prompt, setPrompt] = useState('')\n const [aspectRatio, setAspectRatio] = useState(AUTO)\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState('')\n const abort = useRef<AbortController | null>(null)\n const close = useRef<() => void>(() => {})\n const editable = useEditorState((snapshot) => snapshot.editable)\n const generating = useSyncExternalStore(subscribe, () => running > 0)\n\n async function run() {\n if (!editor || !prompt.trim() || busy) return\n const caret = rememberCaret(editor)\n const controller = new AbortController()\n abort.current = controller\n setBusy(true)\n setRunning(1)\n setError('')\n try {\n const bytes = await generation.generate(prompt.trim(), {\n aspectRatio: aspectRatio || undefined,\n signal: controller.signal,\n })\n if (controller.signal.aborted) return\n const target = insertionTarget(editor, caret)\n if (!target) throw new Error('The document was closed before the generated image was ready.')\n await insertGeneratedImage(target, bytes, prompt, caret)\n setPrompt('')\n close.current()\n generation.notify?.('Generated image inserted', 'success')\n } catch (failure) {\n if (controller.signal.aborted) return\n const message = failure instanceof Error ? failure.message : String(failure)\n setError(message)\n generation.notify?.(message, 'error')\n } finally {\n abort.current = null\n setRunning(-1)\n setBusy(false)\n }\n }\n\n // A read-only document (a saved version, no edit access) has nowhere to put a picture.\n if (!editable && !generating) return null\n return (\n <RibbonMenu\n label={generating ? 'Generating image…' : 'Generate image'}\n icon={\n generating ? <Loader2 size={16} className=\"native-docx-spin\" /> : <Sparkles size={16} />\n }\n testId=\"docx-generate-image\"\n >\n {(dismiss) => {\n close.current = dismiss\n return (\n <form\n className=\"native-docx-form native-docx-generate-image\"\n onSubmit={(event) => {\n event.preventDefault()\n void run()\n }}\n >\n <label>\n Describe the image\n <textarea\n autoFocus\n rows={3}\n value={prompt}\n disabled={busy}\n placeholder=\"A watercolour of a lighthouse at dawn\"\n data-testid=\"docx-generate-image-prompt\"\n onChange={(event) => setPrompt(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) void run()\n }}\n />\n </label>\n {generation.aspectRatios && generation.aspectRatios.length > 0 && (\n <label>\n Aspect ratio\n <select\n value={aspectRatio}\n disabled={busy}\n onChange={(event) => setAspectRatio(event.target.value)}\n >\n <option value={AUTO}>Auto</option>\n {generation.aspectRatios.map((ratio) => (\n <option key={ratio.value} value={ratio.value}>\n {ratio.label}\n </option>\n ))}\n </select>\n </label>\n )}\n {busy && (\n <p role=\"status\" data-testid=\"docx-generate-image-status\">\n Generating… the picture is inserted where your cursor was. You can keep writing.\n </p>\n )}\n {error && <p role=\"alert\">{error}</p>}\n <div className=\"native-docx-form-actions\">\n {busy ? (\n <button type=\"button\" onClick={() => abort.current?.abort()}>\n Cancel\n </button>\n ) : (\n <button\n type=\"submit\"\n disabled={!prompt.trim()}\n data-testid=\"docx-generate-image-submit\"\n >\n Generate\n </button>\n )}\n </div>\n </form>\n )\n }}\n </RibbonMenu>\n )\n}\n","/**\n * Word's Tab and Shift+Tab in a table: move to the next or previous cell, and Tab in the last cell\n * adds a row. The engine types a tab character into the cell instead, so the keys are bound here,\n * ahead of the editor's own handling, the way `WordShortcuts` binds note and style keys.\n */\n\nimport { useEffect, useRef, type RefObject } from 'react'\nimport { useDocxEditor } from '@docx-editor.dev/react'\n\ntype Node = { id?: string; kind?: string; localName?: string; children?: readonly Node[] }\n\nconst contains = (node: Node, id: string): boolean =>\n node.id === id || (node.children ?? []).some((child) => contains(child, id))\n\n/** The first paragraph of a cell, looking through content controls and the like. */\nfunction firstParagraph(node: Node): string | null {\n for (const child of node.children ?? []) {\n if (child.kind === 'paragraph' && child.id) return child.id\n if (child.localName === 'tbl') continue\n const nested = firstParagraph(child)\n if (nested) return nested\n }\n return null\n}\n\n/**\n * The cells of the innermost table holding `paragraphId`, in reading order (each as its first\n * paragraph), and which of them holds it. Null outside a table.\n */\nexport function tableCells(\n root: Node,\n paragraphId: string\n): { cells: string[]; index: number } | null {\n let table: Node | null = null\n const find = (node: Node) => {\n if (node.localName === 'tbl' && contains(node, paragraphId)) table = node\n for (const child of node.children ?? []) if (contains(child, paragraphId)) find(child)\n }\n find(root)\n if (!table) return null\n const cells: string[] = []\n let index = -1\n const rows = (node: Node): Node[] =>\n (node.children ?? []).flatMap((child) =>\n child.localName === 'tr' ? [child] : child.localName === 'tbl' ? [] : rows(child)\n )\n for (const row of rows(table))\n for (const cell of (row.children ?? []).filter((child) => child.localName === 'tc')) {\n const first = firstParagraph(cell)\n if (!first) continue\n if (contains(cell, paragraphId)) index = cells.length\n cells.push(first)\n }\n return index < 0 ? null : { cells, index }\n}\n\n/** Binds Tab and Shift+Tab in tables inside `scope`. Renders nothing; mount inside `DocxEditor.Root`. */\nexport function TableTabKeys({ scope }: { scope: RefObject<HTMLElement | null> }) {\n const editor = useDocxEditor()\n const latest = useRef(editor)\n latest.current = editor\n useEffect(() => {\n const element = scope.current\n if (!element) return\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab' || event.ctrlKey || event.metaKey || event.altKey) return\n const editor = latest.current\n const surface = editor?.surface\n const head = surface?.state().selection?.head\n if (!editor || !surface || !head) return\n const root = () => surface.session.part().root as unknown as Node\n const table = tableCells(root(), head.paragraphId)\n if (!table) return\n event.preventDefault()\n event.stopPropagation()\n let target = table.cells[table.index + (event.shiftKey ? -1 : 1)]\n if (!target && !event.shiftKey && editor.exec({ type: 'insertRow', where: 'below' }).ok) {\n const grown = tableCells(\n root(),\n surface.state().selection?.head.paragraphId ?? head.paragraphId\n )\n target = grown?.cells[table.cells.length] ?? ''\n }\n if (!target) return\n const point = { paragraphId: target, offset: 0 }\n surface.setSelection({ anchor: point, head: point })\n }\n element.addEventListener('keydown', onKeyDown, true)\n return () => element.removeEventListener('keydown', onKeyDown, true)\n }, [scope])\n return null\n}\n","/**\n * Insert › Quick Parts: the house template's building blocks (execution blocks, document markings,\n * document skeletons) by category, each with a preview of its text; picking one inserts it at the\n * caret with the styles, numbering and pictures it uses.\n */\n\nimport React from 'react'\nimport { Blocks } from 'lucide-react'\nimport { RibbonMenu } from '../RibbonMenu'\nimport { useHouseTemplate } from './HouseTemplate'\n\nexport function QuickParts() {\n const house = useHouseTemplate()\n if (!house || house.blocks.length === 0) return null\n const categories = [...new Set(house.blocks.map((b) => b.category))]\n return (\n <RibbonMenu label=\"Quick Parts\" icon={<Blocks size={16} />} testId=\"docx-quick-parts\">\n {(close) => (\n <div className=\"native-docx-quick-parts\" data-testid=\"docx-quick-parts-panel\">\n {categories.map((category) => (\n <section key={category} aria-label={category}>\n <h3>{category}</h3>\n <ul>\n {house.blocks\n .filter((b) => b.category === category)\n .map((block) => (\n <li key={block.name}>\n <button\n type=\"button\"\n disabled={!house.editable}\n title={block.description || block.name}\n onClick={() => {\n close()\n house.insertBlock(block.name)\n }}\n >\n <span className=\"native-docx-quick-part-name\">{block.name}</span>\n <span className=\"native-docx-quick-part-preview\">{block.text}</span>\n </button>\n </li>\n ))}\n </ul>\n </section>\n ))}\n <p className=\"native-docx-quick-parts-source\">From {house.template.name}</p>\n </div>\n )}\n </RibbonMenu>\n )\n}\n","/**\n * Insert › Signature field: a field where a signature request will ask someone to sign, initial,\n * date or print their name, placed at the caret. The field is a locked chip (\"Signature — Priya\n * Shah\") whose hidden payload names the signer by email; when the version is saved, its PDF\n * carries an invisible anchor there, and Request signatures places the field exactly on it, for\n * that signer. A field with no signer is assigned when the request is made. See\n * `@arbidocs/coedit/commands` (`signatureFieldWrite`).\n *\n * Insert › My signature puts one's own saved signature or initials (Account settings › Your\n * signature, sealed with one's own key) at the cursor as an inline picture, through the editor's\n * picture insert (a tracked insertion while suggesting). Nothing saved yet: the adopt dialog opens\n * first. That is an informal signature; verified signing is Request signatures.\n */\n\nimport React, { createContext, useContext, useState } from 'react'\nimport { Signature, PenLine } from 'lucide-react'\nimport { DocxEditor, useDocxEditor } from '@docx-editor.dev/react'\nimport { executeImageCommand } from '@docx-editor.dev/core/editor'\nimport {\n INFORMAL_SIGNATURE_NOTE,\n pngBytes,\n pngSize,\n type SavedSignature,\n} from '@arbidocs/react/document-tools'\nimport { AdoptSignatureDialog } from '../../document-tools/AdoptSignatureDialog'\nimport {\n SIGNATURE_FIELD_KINDS,\n SIGNATURE_FIELD_LABELS,\n isSignerEmail,\n signatureFieldWrite,\n type SignatureFieldKind,\n type SignatureFieldSpec,\n} from '@arbidocs/coedit/commands'\nimport { RibbonMenu } from '../RibbonMenu'\nimport { withDirectEditing } from '../definitions/port'\n\n/** Someone who may be asked to sign: a workspace member, offered first in the signer picker. */\nexport interface DocxSigner {\n email: string\n name: string\n}\n\n/** One's own saved signature (sealed with one's own key), for Insert › My signature. */\nexport interface DocxSavedSignature {\n load: () => Promise<SavedSignature | null>\n save: (signature: SavedSignature) => Promise<void>\n /** The name the adopt dialog starts from when nothing is saved yet. */\n defaultName: string\n}\n\ninterface SignatureFieldsValue {\n /** Signature fields are offered (a workspace document). */\n fields: boolean\n signers: readonly DocxSigner[]\n editable: boolean\n notify?: (message: string, kind: 'success' | 'error') => void\n mySignature?: DocxSavedSignature\n}\n\nconst SignatureFieldsContext = createContext<SignatureFieldsValue | null>(null)\n\nexport function SignatureFieldsProvider({\n signers,\n editable,\n notify,\n mySignature,\n children,\n}: {\n /** Absent: the Insert tab offers no signature field (not a workspace document). */\n signers?: readonly DocxSigner[]\n editable: boolean\n notify?: (message: string, kind: 'success' | 'error') => void\n /** Present: Insert offers My signature / My initials. */\n mySignature?: DocxSavedSignature\n children: React.ReactNode\n}) {\n return (\n <SignatureFieldsContext.Provider\n value={\n signers || mySignature\n ? { fields: !!signers, signers: signers ?? [], editable, notify, mySignature }\n : null\n }\n >\n {children}\n {mySignature && <MySignatureDialog />}\n </SignatureFieldsContext.Provider>\n )\n}\n\ntype Mark = 'signature' | 'initials'\n\n/** Insert one's saved signature (or initials) at the caret as an inline picture. */\nasync function insertSavedMark(editor: Editor, saved: SavedSignature, mark: Mark) {\n const png = mark === 'signature' ? saved.signature_png : saved.initials_png\n const { width, height } = pngSize(png)\n // A signature about a line and a half high, initials a little smaller; never wider than 200 pt.\n const heightPoints = mark === 'signature' ? 36 : 24\n let widthPoints = (width / Math.max(1, height)) * heightPoints\n let h = heightPoints\n if (widthPoints > 200) {\n h = (heightPoints * 200) / widthPoints\n widthPoints = 200\n }\n editor.focus()\n const result = await executeImageCommand(editor, {\n type: 'insertImage',\n data: pngBytes(png),\n mime: 'image/png',\n widthPoints,\n heightPoints: h,\n description: mark === 'signature' ? `Signature of ${saved.name}` : `Initials of ${saved.name}`,\n title: mark === 'signature' ? 'Signature' : 'Initials',\n })\n if (!result.ok) throw new Error(result.reason || 'The picture could not be inserted here.')\n}\n\n/** Asks for a signature when nothing is saved yet (opened by `useInsertMySignature`). */\nlet openAdopt: ((mark: Mark) => void) | null = null\n\nfunction MySignatureDialog() {\n const context = useContext(SignatureFieldsContext)\n const editor = useDocxEditor()\n const [pending, setPending] = useState<Mark | null>(null)\n openAdopt = setPending\n const mine = context?.mySignature\n if (!mine) return null\n return (\n <AdoptSignatureDialog\n open={!!pending}\n onOpenChange={(open) => !open && setPending(null)}\n mode=\"save\"\n defaultName={mine.defaultName}\n onSave={mine.save}\n onAdopt={async () => {\n const mark = pending\n setPending(null)\n const saved = await mine.load()\n if (editor && saved && mark) {\n try {\n await insertSavedMark(editor, saved, mark)\n } catch (failure) {\n context?.notify?.(failure instanceof Error ? failure.message : String(failure), 'error')\n }\n }\n }}\n />\n )\n}\n\n/** Insert one's saved signature or initials; nothing saved: the adopt dialog first. */\nfunction useInsertMySignature() {\n const context = useContext(SignatureFieldsContext)\n const editor = useDocxEditor()\n const mine = context?.mySignature\n if (!mine || !editor) return null\n return async (mark: Mark) => {\n try {\n const saved = await mine.load()\n if (!saved) return openAdopt?.(mark)\n await insertSavedMark(editor, saved, mark)\n } catch (failure) {\n context?.notify?.(\n failure instanceof Error ? failure.message : 'The signature could not be inserted.',\n 'error'\n )\n }\n }\n}\n\n/** Insert tab: My signature (insert my signature / initials). */\nexport function MySignatureMenu() {\n const insert = useInsertMySignature()\n const context = useContext(SignatureFieldsContext)\n if (!insert) return null\n return (\n <RibbonMenu label=\"My signature\" icon={<Signature size={16} />} testId=\"docx-my-signature\">\n {(close) => (\n <div className=\"native-docx-signature-field\" data-testid=\"docx-my-signature-panel\">\n <button\n type=\"button\"\n disabled={!context?.editable}\n onClick={() => {\n close()\n void insert('signature')\n }}\n data-testid=\"docx-insert-my-signature\"\n >\n Insert my signature\n </button>\n <button\n type=\"button\"\n disabled={!context?.editable}\n onClick={() => {\n close()\n void insert('initials')\n }}\n data-testid=\"docx-insert-my-initials\"\n >\n Insert my initials\n </button>\n <p>{INFORMAL_SIGNATURE_NOTE}</p>\n </div>\n )}\n </RibbonMenu>\n )\n}\n\n/** Right-click menu rows: Insert my signature / Insert my initials. */\nexport function MySignatureContextItems() {\n const insert = useInsertMySignature()\n if (!insert) return null\n return (\n <>\n <DocxEditor.ContextMenu.Separator />\n <DocxEditor.ContextMenu.Item\n label=\"Insert my signature\"\n icon={<Signature size={14} />}\n onSelect={() => void insert('signature')}\n />\n <DocxEditor.ContextMenu.Item\n label=\"Insert my initials\"\n icon={<Signature size={14} />}\n onSelect={() => void insert('initials')}\n />\n </>\n )\n}\n\nconst OTHER = '__other__'\nconst NONE = ''\n\ntype Editor = NonNullable<ReturnType<typeof useDocxEditor>>\n\n/** Insert the field at the caret, directly (a payload cannot be a tracked change). */\nexport function insertSignatureField(editor: Editor, spec: SignatureFieldSpec): string | null {\n const surface = editor.surface\n const selection = surface?.state().selection\n if (!surface || !selection) throw new Error('Place the cursor where the field goes.')\n const { head } = selection\n const { tag, write } = signatureFieldWrite(spec, head)\n const result = withDirectEditing(editor, () => surface.session.insertCustomNode(write))\n if (!result.ok) {\n throw new Error(\n result.reason === 'locked'\n ? 'A field cannot go inside a locked part of the document.'\n : 'The field could not be inserted here.'\n )\n }\n // Go on typing after the field, not before it.\n const after = { paragraphId: head.paragraphId, offset: head.offset + write.text.length }\n try {\n surface.setSelection({ anchor: after, head: after })\n } catch {\n /* the paragraph was renumbered: the caret stays where the engine put it */\n }\n return tag\n}\n\nexport function SignatureFieldMenu() {\n const context = useContext(SignatureFieldsContext)\n const editor = useDocxEditor()\n const [kind, setKind] = useState<SignatureFieldKind>('signature')\n const [who, setWho] = useState<string>(NONE)\n const [email, setEmail] = useState('')\n const [name, setName] = useState('')\n const [required, setRequired] = useState(true)\n const [error, setError] = useState('')\n if (!context?.fields) return null\n const other = who === OTHER\n const chosen = context.signers.find((s) => s.email === who)\n const ready = !other || isSignerEmail(email)\n\n const insert = (close: () => void) => {\n if (!editor || !ready) return\n setError('')\n try {\n insertSignatureField(editor, {\n kind,\n email: other ? email : (chosen?.email ?? null),\n name: other ? name : (chosen?.name ?? null),\n required,\n })\n close()\n setEmail('')\n setName('')\n } catch (failure) {\n setError(failure instanceof Error ? failure.message : 'The field could not be inserted.')\n }\n }\n\n return (\n <RibbonMenu\n label=\"Signature field\"\n icon={<PenLine size={16} />}\n testId=\"docx-signature-field\"\n keepMounted\n >\n {(close) => (\n <form\n className=\"native-docx-signature-field\"\n data-testid=\"docx-signature-field-panel\"\n onSubmit={(event) => {\n event.preventDefault()\n insert(close)\n }}\n >\n <label>\n Field\n <select\n value={kind}\n onChange={(event) => setKind(event.target.value as SignatureFieldKind)}\n data-testid=\"docx-signature-field-kind\"\n >\n {SIGNATURE_FIELD_KINDS.map((k) => (\n <option key={k} value={k}>\n {SIGNATURE_FIELD_LABELS[k]}\n </option>\n ))}\n </select>\n </label>\n <label>\n Signer\n <select\n value={who}\n onChange={(event) => setWho(event.target.value)}\n data-testid=\"docx-signature-field-signer\"\n >\n <option value={NONE}>Choose when sending</option>\n {context.signers.map((s) => (\n <option key={s.email} value={s.email}>\n {s.name || s.email} ({s.email})\n </option>\n ))}\n <option value={OTHER}>Someone else, by email…</option>\n </select>\n </label>\n {other && (\n <>\n <label>\n Email\n <input\n type=\"email\"\n value={email}\n required\n autoComplete=\"off\"\n onChange={(event) => setEmail(event.target.value)}\n data-testid=\"docx-signature-field-email\"\n />\n </label>\n <label>\n Name\n <input\n value={name}\n maxLength={200}\n autoComplete=\"off\"\n onChange={(event) => setName(event.target.value)}\n data-testid=\"docx-signature-field-name\"\n />\n </label>\n </>\n )}\n <label className=\"native-docx-signature-field-check\">\n <input\n type=\"checkbox\"\n checked={required}\n onChange={(event) => setRequired(event.target.checked)}\n />\n Required\n </label>\n {error && <p role=\"alert\">{error}</p>}\n <button\n type=\"submit\"\n disabled={!context.editable || !ready}\n data-testid=\"docx-signature-field-insert\"\n >\n Insert field\n </button>\n </form>\n )}\n </RibbonMenu>\n )\n}\n","/**\n * Design › House template: which template new documents start from, whether this document's\n * styles still match it, and — for a workspace owner — making this document the house template.\n */\n\nimport React from 'react'\nimport { ChevronDown, Download } from 'lucide-react'\nimport { RibbonMenu } from '../RibbonMenu'\nimport { divergenceSummary } from '../wordStyles'\nimport { useHouseTemplate, type HouseTemplateSource } from './HouseTemplate'\n\nconst SOURCE: Record<HouseTemplateSource, string> = {\n workspace: \"This workspace's house template\",\n deployment: 'The house template for all workspaces',\n builtin: 'ARBI’s built-in template (no house template has been set)',\n}\n\nfunction download(bytes: Uint8Array, name: string) {\n const isTemplate = !/\\.docx$/i.test(name)\n const url = URL.createObjectURL(\n new Blob([bytes as Uint8Array<ArrayBuffer>], {\n type: isTemplate\n ? 'application/vnd.openxmlformats-officedocument.wordprocessingml.template'\n : 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n })\n )\n const a = document.createElement('a')\n a.href = url\n a.download = /\\.(dotx|docx)$/i.test(name) ? name : `${name}.dotx`\n a.click()\n setTimeout(() => URL.revokeObjectURL(url), 5000)\n}\n\nexport function HouseTemplatePanel() {\n const house = useHouseTemplate()\n if (!house) return null\n const summary = divergenceSummary(house.divergence)\n return (\n <RibbonMenu\n label=\"House template\"\n className=\"native-docx-style-trigger\"\n testId=\"docx-house-template\"\n icon={\n <>\n <span className=\"native-docx-style-current\">House template</span>\n <ChevronDown size={12} aria-hidden />\n </>\n }\n >\n <div className=\"native-docx-house-template\" data-testid=\"docx-house-template-panel\">\n <p>\n <strong>{house.template.name}</strong>\n <br />\n {SOURCE[house.template.source]}. New documents start from it.\n </p>\n <p data-testid=\"docx-house-template-status\">\n {house.divergence === null\n ? 'Comparing this document’s styles…'\n : !house.basedOnTemplate\n ? 'This document was not started from the house template.'\n : (summary ?? 'This document’s styles match the house template.')}\n </p>\n <div className=\"native-docx-house-template-actions\">\n <button type=\"button\" onClick={() => download(house.template.bytes, house.template.name)}>\n <Download size={14} /> Download template\n </button>\n {house.setAsHouseTemplate && (\n <button\n type=\"button\"\n data-testid=\"docx-set-house-template\"\n onClick={() => void house.setAsHouseTemplate!()}\n >\n Use this document as the house template\n </button>\n )}\n </div>\n </div>\n </RibbonMenu>\n )\n}\n","import { normalizeDocxExport } from './export'\nimport { WordDraftStream } from './streamWordDocument'\nimport {\n DocxMentions,\n DocxCommentActivity,\n type DocxMention,\n type DocxAgentCommentRequest,\n type DocxMentionDelivery,\n type DocxAgentRunStatus,\n} from './DocxMentions'\nimport * as Y from 'yjs'\nimport type { DocumentHandle } from '@docx-editor.dev/core'\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport {\n DocxEditor,\n useChromeTranslate,\n useDocxEditor,\n type FontConfiguration,\n} from '@docx-editor.dev/react'\nimport { collaborationModule, DOCUMENT_COLLABORATION_VERSIONS } from '@arbidocs/coedit'\nimport { awaitMatchingEditor } from './coedit-update'\nimport type { DocxCollaborationSession } from '@arbidocs/coedit'\nimport {\n createHocuspocusCollaboration,\n type HocuspocusCollaborationRoom,\n} from '@arbidocs/coedit/hocuspocus'\nimport { DocxEditorReview, reviewModule } from './review'\nimport { AgentUndo, AgentUndoRoom } from './AgentUndo'\nimport type { EditorModule } from '@docx-editor.dev/core'\nimport type { Editor } from '@docx-editor.dev/core'\nimport {\n Download,\n Save,\n RefreshCw,\n WifiOff,\n Check,\n Type,\n Pilcrow,\n UsersRound,\n BookA,\n} from 'lucide-react'\nimport { DefinedTermsProvider, useDefinedTerms } from './definitions/DefinedTerms'\nimport { RibbonMenu } from './RibbonMenu'\nimport { RibbonItem, RibbonOverflow } from './RibbonOverflow'\nimport { StyleGallery } from './StyleGallery'\nimport { NoteButtons, WordShortcuts } from './WordReferences'\nimport type { DefinitionSource } from '../tags/definitions'\nimport { CrossReferencesProvider, type DocxReferencesAdapter } from './references/CrossReferences'\nimport {\n CrossReferenceButton,\n DocxContextMenuExtras,\n UpdateCrossReferencesButton,\n} from './references/EditorMenus'\nimport { runBeforeSave } from './beforeSave'\nimport { LayoutTabContent, LAYOUT_TAB, useContextualTabs } from './layout/LayoutTabs'\nimport {\n GenerateImageButton,\n useGenerateImageTarget,\n type DocxImageGeneration,\n} from './layout/GenerateImage'\nimport { TableTabKeys } from './layout/TableKeys'\nimport { newFromTemplate } from '@arbidocs/coedit/template'\nimport {\n HouseTemplateProvider,\n resolveHouseTemplate,\n templateFileName,\n type HouseTemplateHost,\n} from './template/HouseTemplate'\nimport { QuickParts } from './template/QuickParts'\nimport {\n MySignatureContextItems,\n MySignatureMenu,\n SignatureFieldMenu,\n SignatureFieldsProvider,\n type DocxSavedSignature,\n type DocxSigner,\n} from './signatures/SignatureFields'\nimport { HouseTemplatePanel } from './template/HouseTemplatePanel'\nimport { DocxAuthorContext } from './structural/useTrackedOrNoted'\n\nimport { contentPath } from './content-path'\n\nexport { contentPath }\n\n/** Host integration: no application store, router, or authentication singleton is required. */\nexport interface NativeDocxAdapter {\n request: (path: string, options?: RequestInit) => Promise<Response>\n open: (documentId: string) => Promise<{\n room_id: string\n token: string\n websocket_path: string\n can_edit: boolean\n identity: { actorId: string; name: string; role: 'human' | 'agent' }\n filename: string\n }>\n /** Save the live room as the document's next version (same document id). */\n save: (\n documentId: string,\n state?: string\n ) => Promise<{ document_ext_id: string; version?: number; unchanged?: boolean }>\n loadFonts: () => Promise<FontConfiguration>\n baseUrl?: string\n author?: string\n subscribeTokenChanges?: (listener: () => void) => () => void\n onDirtyChange?: (dirty: boolean) => void\n onVersionSaved?: (documentId: string) => void | Promise<void>\n notify?: (message: string, kind: 'success' | 'error') => void\n mentions?: readonly DocxMention[]\n requestAgent?: (\n documentId: string,\n request: DocxAgentCommentRequest\n ) => Promise<DocxMentionDelivery | void>\n getAgentStatus?: (responseId: string) => Promise<DocxAgentRunStatus>\n /**\n * The workspace's definitions: facts labelled \"Definitions\". Present: the Insert tab offers\n * Defined term, and typing `@@` in the body opens the term type-ahead.\n */\n definitions?: () => Promise<DefinitionSource[]>\n /**\n * References to the workspace's other documents. Present: Insert cross-reference also offers a\n * passage of another document, inserted as a link that opens it there.\n */\n references?: DocxReferencesAdapter\n /** The platform's image generation. Present: the Insert tab offers Generate image. */\n imageGeneration?: DocxImageGeneration\n /**\n * The workspace's house template. Present: a blank note starts from it (its styles, numbering,\n * page setup, headers and footers), Insert offers its Quick Parts, and the Design tab and the\n * style box show where the document's styles differ from it.\n */\n houseTemplate?: HouseTemplateHost\n /** Workspace members who may sign. Present: Insert offers Signature field (or anyone by email). */\n signatureSigners?: readonly DocxSigner[]\n /** One's saved signature. Present: Insert offers My signature (an informal one, as a picture). */\n savedSignature?: DocxSavedSignature\n}\n\nexport interface NativeDocxEditorProps {\n adapter: NativeDocxAdapter\n documentId: string\n title: string\n draftContent?: string\n initialCommentId?: string\n /** Immutable history/compare snapshots must not join the live editing room. */\n snapshot?: boolean\n onSaved?: (id: string) => void\n /**\n * Read-only preview of generated Markdown. The server stores the DOCX itself; when the\n * stream ends the caller swaps this preview for the stored document.\n */\n stream?: {\n content: string\n busy: boolean\n error?: string | null\n }\n /**\n * Embedded as a body field (an email draft): a small formatting toolbar instead of the ribbon, no\n * page furniture or save bar (the host saves), and the person types directly; others' edits (ARBI's)\n * still arrive as tracked changes to accept or reject.\n */\n compact?: boolean\n /** Receives a reader of the live room's state, so the host's save can include the latest keystrokes. */\n stateRef?: React.MutableRefObject<(() => string | undefined) | null>\n}\ninterface Ready {\n document: DocumentHandle | Uint8Array\n modules: readonly EditorModule[]\n fonts: FontConfiguration\n room?: HocuspocusCollaborationRoom\n canEdit: boolean\n author: string\n filename: string\n}\n// Local unsaved notes survive tab switches. Persisted artifacts use server state.\nconst drafts = new Map<string, ArrayBuffer>()\nconst stateBytes = (room: HocuspocusCollaborationRoom) => Y.encodeStateAsUpdate(room.ydoc)\nconst encodeState = (room: HocuspocusCollaborationRoom) => {\n let binary = ''\n for (const byte of stateBytes(room)) binary += String.fromCharCode(byte)\n return btoa(binary)\n}\nfunction covered(room: HocuspocusCollaborationRoom, vector: string, receipt: string) {\n const decode = (value: string) => Uint8Array.from(atob(value), (c) => c.charCodeAt(0))\n const server = Y.decodeStateVector(decode(vector)),\n local = Y.decodeStateVector(Y.encodeStateVector(room.ydoc))\n for (const [client, clock] of local) if ((server.get(client) || 0) < clock) return false\n const deleted = Y.decodeUpdate(stateBytes(room)).ds.clients\n const saved = Y.decodeUpdate(decode(receipt)).ds.clients\n for (const [client, ranges] of deleted)\n for (const range of ranges) {\n if (\n !(saved.get(client) || []).some(\n (s) => s.clock <= range.clock && s.clock + s.len >= range.clock + range.len\n )\n )\n return false\n }\n return true\n}\nclass EditorBoundary extends React.Component<{ children: React.ReactNode }, { error?: Error }> {\n state: { error?: Error } = {}\n static getDerivedStateFromError(error: Error) {\n return { error }\n }\n render() {\n return this.state.error ? (\n <div role=\"alert\" className=\"native-docx-error\">\n Could not render this Word document: {this.state.error.message}\n </div>\n ) : (\n this.props.children\n )\n }\n}\n/**\n * The room writes below the editor's input buffer, so it gets the editor's pending-input flush: it\n * lands queued typing before a peer's change and lays that change out at once, which is when the\n * editor carries its caret (otherwise a fast keystroke lands where the caret was before the change).\n */\nfunction RoomInputBinding({ session }: { session?: DocxCollaborationSession }) {\n const editor = useDocxEditor()\n useEffect(() => {\n if (!editor || !session) return\n return session.bindEditorInput(() => editor.surface?.flushPendingInput())\n }, [editor, session])\n return null\n}\n\nexport function DocxParticipants({ session }: { session?: DocxCollaborationSession }) {\n const [people, setPeople] = useState<readonly { actorId: string; name: string }[]>([])\n useEffect(() => {\n if (!session) return\n setPeople(session.participants())\n return session.subscribeParticipants(setPeople)\n }, [session])\n return (\n <div className=\"native-docx-presence\" aria-label=\"People viewing this document\">\n {people.map((p) => (\n <span className=\"native-docx-avatar\" key={p.actorId} title={p.name}>\n {p.name\n .split(' ')\n .map((s) => s[0])\n .slice(0, 2)\n .join('')}\n </span>\n ))}\n </div>\n )\n}\n\n/** Insert tab: a defined term at the caret (when definitions are offered). */\nfunction DefinedTermButtons() {\n const terms = useDefinedTerms()\n if (!terms) return null\n return (\n <button\n type=\"button\"\n className=\"native-docx-ribbon-trigger\"\n aria-label={terms.labels.insert}\n title={`${terms.labels.insert} (type @@)`}\n data-testid=\"docx-insert-defined-term\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={(event) => terms.openPicker(event.currentTarget)}\n >\n <BookA size={16} />\n </button>\n )\n}\n\nconst DOCUMENT_STATES = {\n 'co-editing': {\n label: 'Co-editing',\n title: 'Edits sync live with everyone who has this document open',\n },\n 'read-only': {\n label: 'Read-only',\n title: 'This copy cannot be edited: an earlier version, or the last saved copy',\n },\n draft: { label: 'Private draft', title: 'Only you can see this until you save it' },\n} as const\n\n/** Which document is on screen: shared live, read-only, or a draft only its author sees. */\nfunction DocumentStateBadge({ state }: { state?: keyof typeof DOCUMENT_STATES }) {\n if (!state) return null\n const { label, title } = DOCUMENT_STATES[state]\n return (\n <span data-state={state} title={title}>\n {label}\n </span>\n )\n}\n\nexport function DocxRibbon({\n onSave,\n badge,\n imageGeneration,\n}: {\n onSave: () => void\n /** Insert › Generate image, when the host can generate images. */\n imageGeneration?: DocxImageGeneration\n /** A short state label at the end of the row, such as \"Co-editing\". */\n badge?: React.ReactNode\n}) {\n const [selected, setTab] = useState('Home')\n const contextual = useContextualTabs(selected)\n useGenerateImageTarget()\n const tab = contextual.shown\n const t = useChromeTranslate()\n return (\n <div className=\"native-docx-ribbon\">\n <select aria-label=\"Ribbon tab\" value={tab} onChange={(event) => setTab(event.target.value)}>\n <option>Home</option>\n <option>Insert</option>\n <option>Design</option>\n <option>{LAYOUT_TAB}</option>\n <option>References</option>\n <option>Review</option>\n {contextual.tabs.map((name) => (\n <option key={name}>{name}</option>\n ))}\n </select>\n <DocxEditor.Toolbar t={t} preset={false} onSave={onSave}>\n <DocxEditor.Toolbar.Undo />\n <DocxEditor.Toolbar.Redo />\n <DocxEditor.Toolbar.Save />\n {/* Undo, Redo and Save stay put, like Word's Quick Access Toolbar; the tab's own\n controls collapse into its More menu when the ribbon is too narrow for them. */}\n <RibbonOverflow tab={tab}>\n {tab === 'Home' && (\n <>\n <RibbonItem id=\"home-style\" label=\"Styles\" priority={80}>\n <StyleGallery />\n </RibbonItem>\n <RibbonItem id=\"home-bold\" label=\"Bold\" priority={100}>\n <DocxEditor.Toolbar.Bold />\n </RibbonItem>\n <RibbonItem id=\"home-italic\" label=\"Italic\" priority={95}>\n <DocxEditor.Toolbar.Italic />\n </RibbonItem>\n <RibbonItem id=\"home-underline\" label=\"Underline\" priority={90}>\n <DocxEditor.Toolbar.Underline />\n </RibbonItem>\n <RibbonItem id=\"home-font\" label=\"Font\" priority={60}>\n <RibbonMenu label=\"Font\" icon={<Type size={16} />}>\n <DocxEditor.Toolbar.FontFamily />\n <DocxEditor.Toolbar.FontSize />\n <DocxEditor.Toolbar.FontColor />\n <DocxEditor.Toolbar.Highlight />\n </RibbonMenu>\n </RibbonItem>\n <RibbonItem id=\"home-more-formatting\" label=\"More formatting\" priority={50}>\n <RibbonMenu label=\"More formatting\" icon={<Pilcrow size={16} />}>\n <DocxEditor.Toolbar.Alignment />\n <DocxEditor.Toolbar.BulletList />\n <DocxEditor.Toolbar.NumberedList />\n <DocxEditor.Toolbar.LineSpacing />\n <DocxEditor.Toolbar.Indent />\n <DocxEditor.Toolbar.Outdent />\n <DocxEditor.Toolbar.Strike />\n <DocxEditor.Toolbar.ClearFormatting />\n </RibbonMenu>\n </RibbonItem>\n </>\n )}\n {tab === 'Insert' && (\n <>\n <RibbonItem id=\"insert-table\" label=\"Table\">\n <DocxEditor.Toolbar.TableInsert />\n </RibbonItem>\n <RibbonItem id=\"insert-picture\" label=\"Picture\">\n <DocxEditor.Toolbar.ImageInsert />\n </RibbonItem>\n {imageGeneration && (\n <RibbonItem id=\"insert-generate-image\" label=\"Generate image\">\n <GenerateImageButton generation={imageGeneration} />\n </RibbonItem>\n )}\n <RibbonItem id=\"insert-page-break\" label=\"Page break\">\n <DocxEditor.Toolbar.Button slotId=\"insert.pageBreak\" />\n </RibbonItem>\n <RibbonItem id=\"insert-link\" label=\"Link\">\n <DocxEditor.Toolbar.Link />\n </RibbonItem>\n <RibbonItem id=\"insert-defined-term\" label=\"Defined term\">\n <DefinedTermButtons />\n </RibbonItem>\n <RibbonItem id=\"insert-quick-parts\" label=\"Quick Parts\">\n <QuickParts />\n </RibbonItem>\n <RibbonItem id=\"insert-signature-field\" label=\"Signature field\">\n <SignatureFieldMenu />\n </RibbonItem>\n <RibbonItem id=\"insert-my-signature\" label=\"My signature\">\n <MySignatureMenu />\n </RibbonItem>\n <RibbonItem id=\"insert-cross-reference\" label=\"Cross-reference\">\n <CrossReferenceButton />\n </RibbonItem>\n </>\n )}\n <LayoutTabContent tab={tab} />\n {tab === 'Design' && (\n <RibbonItem id=\"design-house-template\" label=\"House template\">\n <HouseTemplatePanel />\n </RibbonItem>\n )}\n {tab === 'References' && (\n <>\n <NoteButtons />\n <RibbonItem id=\"references-cross-reference\" label=\"Cross-reference\">\n <CrossReferenceButton />\n </RibbonItem>\n <RibbonItem id=\"references-update-cross-references\" label=\"Update cross-references\">\n <UpdateCrossReferencesButton />\n </RibbonItem>\n </>\n )}\n {tab === 'Review' && (\n <>\n <RibbonItem id=\"review-editing-mode\" label=\"Editing mode\" priority={10}>\n <DocxEditor.Toolbar.EditingMode />\n </RibbonItem>\n <RibbonItem id=\"review-comments\" label=\"Comments\">\n <DocxEditor.Toolbar.Comments />\n </RibbonItem>\n <RibbonItem id=\"review-options\" label=\"Review options\">\n <RibbonMenu label=\"Review options\" icon={<UsersRound size={16} />}>\n <DocxEditor.Toolbar.Reviewers />\n </RibbonMenu>\n </RibbonItem>\n </>\n )}\n </RibbonOverflow>\n {/* The toolbar provides its table chrome context only to a direct table-chrome child: this\n hidden one keeps it mounted for the Table tab's borders and shading. */}\n <DocxEditor.Toolbar.TableCellFill hidden />\n </DocxEditor.Toolbar>\n {badge && (\n <span className=\"native-docx-ribbon-badge\" data-testid=\"docx-ribbon-badge\">\n {badge}\n </span>\n )}\n </div>\n )\n}\n\n/** The compact editor's formatting: what an email needs. */\nfunction CompactToolbar() {\n const t = useChromeTranslate()\n return (\n <DocxEditor.Toolbar t={t} preset={false}>\n <DocxEditor.Toolbar.Undo />\n <DocxEditor.Toolbar.Redo />\n <DocxEditor.Toolbar.Bold />\n <DocxEditor.Toolbar.Italic />\n <DocxEditor.Toolbar.Underline />\n <DocxEditor.Toolbar.BulletList />\n <DocxEditor.Toolbar.NumberedList />\n <DocxEditor.Toolbar.Link />\n </DocxEditor.Toolbar>\n )\n}\n\nconst fixedZoomMode = { type: 'fixed' } as const\n/** The zoom menu's levels, in percent, beside Fit width. */\nconst ZOOM_LEVELS = [50, 75, 100, 125, 150, 200]\n\nexport function NativeDocxEditor({\n documentId,\n title,\n draftContent,\n initialCommentId,\n snapshot = false,\n onSaved,\n stream,\n adapter,\n compact = false,\n stateRef,\n}: NativeDocxEditorProps) {\n const [ready, setReady] = useState<Ready>(),\n [error, setError] = useState(''),\n [retry, setRetry] = useState(0)\n const [status, setStatus] = useState('Connecting…'),\n [dirty, setDirty] = useState(false),\n [saving, setSaving] = useState(false),\n [offline, setOffline] = useState(false)\n const revision = useRef(0)\n const stageRef = useRef<HTMLDivElement>(null),\n fitCleanup = useRef<(() => void) | undefined>(undefined),\n refit = useRef<(() => void) | undefined>(undefined)\n // Fit width until the reader picks a zoom (the zoom menu, or Ctrl +/-/0), then keep theirs until\n // they pick Fit width again. `fitted` is the zoom the fit last applied: any other zoom is theirs.\n const fitting = useRef(true),\n fitted = useRef<number | undefined>(undefined)\n const [fitWidth, setFitWidth] = useState(true),\n [zoomPercent, setZoomPercent] = useState(100)\n const ref = useRef<Editor | null>(null),\n dirtyRef = useRef(false),\n draftTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const isDraft = draftContent !== undefined\n const streamRef = useRef(stream)\n streamRef.current = stream\n const streamWriter = useRef<WordDraftStream | null>(null)\n const streamFinished = useRef(false)\n const streamTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const [streamAttempt, setStreamAttempt] = useState(0)\n function updateStream() {\n const current = streamRef.current\n if (!current || !streamWriter.current || streamFinished.current) return\n try {\n streamWriter.current.update(current.content, !current.busy)\n setStatus(\n current.busy\n ? 'Generating · editing is locked'\n : current.error\n ? 'Generation stopped · draft retained'\n : 'Opening the saved document…'\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…')\n setDirty(false)\n dirtyRef.current = false\n // A refusal for another room format: \"Updating…\" 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…')\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 › 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 · 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 · edits buffered locally')\n else if (s === 'ready') {\n setError('')\n setStatus(dirtyRef.current ? 'Saving changes…' : '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…')\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 · live')\n }\n void start().catch((e) => {\n const message = e instanceof Error ? e.message : String(e)\n if (!cancelled && !updating(message)) setError(message)\n })\n return () => {\n cancelled = true\n cleanups.forEach((f) => f())\n clearTimeout(draftTimer.current)\n fitCleanup.current?.()\n room?.destroy()\n }\n }, [documentId, isDraft, snapshot, retry]) // draftContent seeds once, never remount on typing.\n useEffect(() => {\n if (!stateRef) return\n const room = ready?.room\n stateRef.current = () => (room ? encodeState(room) : undefined)\n return () => {\n stateRef.current = null\n }\n }, [stateRef, ready?.room])\n useEffect(() => {\n adapter.onDirtyChange?.(dirty)\n const beforeUnload = (e: BeforeUnloadEvent) => {\n if (dirtyRef.current) e.preventDefault()\n }\n window.addEventListener('beforeunload', beforeUnload)\n return () => {\n window.removeEventListener('beforeunload', beforeUnload)\n adapter.onDirtyChange?.(false)\n }\n }, [dirty])\n async function exportDocument() {\n runBeforeSave(ref.current)\n const data = await ref.current?.save()\n if (!data) return\n const url = URL.createObjectURL(\n new Blob([normalizeDocxExport(data)], {\n type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n })\n )\n const a = document.createElement('a')\n a.href = url\n a.download = title.replace(/\\.[^.]+$/, '') + '.docx'\n a.click()\n setTimeout(() => URL.revokeObjectURL(url), 5000)\n }\n useLayoutEffect(() => {\n const editor = ref.current\n return () => {\n if (isDraft && editor && dirtyRef.current)\n void editor\n .save()\n .then((bytes) => {\n if (bytes) drafts.set(documentId, bytes)\n })\n .catch(() => {})\n }\n }, [documentId, isDraft, ready])\n async function saveVersion() {\n if (!ready || saving || stream) return\n setSaving(true)\n runBeforeSave(ref.current)\n const atRevision = revision.current\n try {\n const result = isDraft\n ? await (async () => {\n const bytes = await ref.current?.save()\n if (!bytes) throw new Error('The editor is not ready.')\n return (\n await adapter.request(`/notes?${new URLSearchParams({ title })}`, {\n method: 'POST',\n headers: {\n 'Content-Type':\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n },\n body: bytes,\n })\n ).json() as Promise<{ document_ext_id: string }>\n })()\n : await adapter.save(documentId, ready.room ? encodeState(ready.room) : undefined)\n if (revision.current === atRevision) {\n dirtyRef.current = false\n setDirty(false)\n drafts.delete(documentId)\n }\n await Promise.resolve(adapter.onVersionSaved?.(result.document_ext_id)).catch(() => {\n /* The saved document remains accessible by its ID. */\n })\n onSaved?.(result.document_ext_id)\n adapter.notify?.(isDraft ? 'Word note saved' : 'DOCX version saved', 'success')\n } catch (e) {\n adapter.notify?.(e instanceof Error ? e.message : 'Could not save this document.', 'error')\n setStatus('Save failed · your draft is retained')\n } finally {\n setSaving(false)\n }\n }\n function editorReady(editor: Editor) {\n ref.current = editor\n if (streamRef.current) {\n streamWriter.current = new WordDraftStream(editor)\n updateStream()\n }\n fitCleanup.current?.()\n fitted.current = undefined\n const viewport = stageRef.current?.querySelector<HTMLElement>('.native-docx-viewport')\n if (!viewport) return\n let surface: Element | null = null\n const fit = () => {\n // The page itself: laid out after the editor is ready, and resized by every zoom.\n const page = viewport.querySelector('.docx-paginated-surface')\n if (page && page !== surface) resize.observe((surface = page))\n const current = editor.getZoom()\n // A zoom the fit did not apply is the reader's: stop fitting until they pick Fit width again.\n if (\n fitting.current &&\n fitted.current !== undefined &&\n Math.abs(current - fitted.current) > 0.001\n )\n fitting.current = false\n setFitWidth(fitting.current)\n setZoomPercent(Math.round(current * 100))\n if (!fitting.current) return\n const pageWidth = editor.getPageGeometry()[0]?.box.width\n if (!pageWidth) return\n const style = getComputedStyle(viewport)\n const available =\n viewport.clientWidth - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight)\n // The page fills the viewer, its padding the only gutter. Compact (an email body) never\n // magnifies: its text stays the size the email is read at.\n const zoom = Math.max(0.1, Math.min(compact ? 1 : 5, available / pageWidth))\n if (Math.abs(current - zoom) > 0.001) editor.setZoom(zoom)\n fitted.current = editor.getZoom()\n setZoomPercent(Math.round(fitted.current * 100))\n }\n refit.current = fit\n const resize = new ResizeObserver(fit)\n const chrome = new MutationObserver(fit)\n resize.observe(viewport)\n chrome.observe(viewport, {\n attributes: true,\n attributeFilter: ['style', 'data-review-pane', 'data-review-margin'],\n })\n // Where the page mounts, to start watching it if it is laid out after the editor is ready.\n const mount = viewport.querySelector('.docx-content-mount')\n if (mount) chrome.observe(mount, { childList: true })\n if (!fitting.current) editor.setZoom(zoomPercent / 100)\n fit()\n fitCleanup.current = () => {\n resize.disconnect()\n chrome.disconnect()\n refit.current = undefined\n }\n }\n function pickZoom(value: string) {\n const editor = ref.current\n if (!editor) return\n if (value === 'fit') {\n fitting.current = true\n fitted.current = undefined\n refit.current?.()\n return\n }\n fitting.current = false\n setFitWidth(false)\n setZoomPercent(Number(value))\n editor.setZoom(Number(value) / 100)\n }\n function changed() {\n if (snapshot) return\n revision.current += 1\n dirtyRef.current = true\n setDirty(true)\n setStatus(\n isDraft ? 'Unsaved note' : offline ? 'Offline · edits buffered locally' : 'Saving changes…'\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…\n </div>\n )}\n {ready && (\n <div className=\"native-docx-body docx-editor\">\n <EditorBoundary key={retry}>\n <DocxEditor.Root\n document={ready.document}\n modules={ready.modules}\n fonts={ready.fonts}\n mode={\n stream || (isDraft && ready.canEdit && !snapshot) || (compact && ready.canEdit)\n ? 'edit'\n : !ready.canEdit || snapshot\n ? 'view'\n : 'suggesting'\n }\n reviewDisplayMode=\"all-markup\"\n zoomMode={fixedZoomMode}\n author={ready.author}\n onReady={editorReady}\n onChange={(change) => {\n if (change.source !== 'load') changed()\n }}\n onFontError={(e) => setError(e.message)}\n >\n <DocxAuthorContext.Provider value={ready.author}>\n <DefinedTermsProvider\n load={adapter.definitions}\n editable={!stream && !snapshot && ready.canEdit}\n notify={adapter.notify}\n >\n <HouseTemplateProvider\n enabled={!stream}\n host={adapter.houseTemplate}\n documentId={isDraft || snapshot ? undefined : documentId}\n editable={!stream && !snapshot && ready.canEdit}\n notify={adapter.notify}\n >\n <CrossReferencesProvider\n editable={!stream && !snapshot && ready.canEdit}\n references={adapter.references}\n documentId={documentId}\n notify={adapter.notify}\n >\n <SignatureFieldsProvider\n signers={adapter.signatureSigners}\n mySignature={adapter.savedSignature}\n editable={!stream && !snapshot && ready.canEdit}\n notify={adapter.notify}\n >\n <DocxEditor.RevisionMarkup\n insertions={{ mark: 'underline', color: 'blue' }}\n deletions={{ mark: 'strikethrough', color: 'red' }}\n movedFrom={{ mark: 'doubleStrikethrough', color: 'green' }}\n movedTo={{ mark: 'doubleUnderline', color: 'green' }}\n trackMoves\n />\n {compact && !stream && <CompactToolbar />}\n {!compact && !stream && (\n <DocxRibbon\n onSave={() => void saveVersion()}\n imageGeneration={\n adapter.imageGeneration && {\n notify: adapter.notify,\n ...adapter.imageGeneration,\n }\n }\n badge={\n // The document's state, in place of a title row above the ribbon.\n <DocumentStateBadge\n state={\n snapshot || !ready.canEdit\n ? 'read-only'\n : ready.room\n ? 'co-editing'\n : isDraft\n ? 'draft'\n : undefined\n }\n />\n }\n />\n )}\n {!stream && <WordShortcuts scope={stageRef} />}\n {!stream && <TableTabKeys scope={stageRef} />}\n <div\n className=\"native-docx-stage\"\n ref={stageRef}\n onMouseDownCapture={(event) => {\n if (event.button === 2 && ref.current?.getSelectionPlacement())\n event.preventDefault()\n }}\n >\n <DocxEditor.Viewport className=\"native-docx-viewport\">\n <DocxEditor.Content />\n <DocxMentions\n initialCommentId={initialCommentId}\n mentions={adapter.mentions}\n notify={adapter.notify}\n getAgentStatus={adapter.getAgentStatus}\n requestAgent={\n adapter.requestAgent\n ? (request) => adapter.requestAgent!(documentId, request)\n : undefined\n }\n >\n <RoomInputBinding session={ready.room?.session} />\n <AgentUndoRoom.Provider value={ready.room?.ydoc ?? null}>\n <DocxEditorReview>\n {() => (\n <DocxEditorReview.Card>\n <DocxCommentActivity />\n <AgentUndo />\n </DocxEditorReview.Card>\n )}\n </DocxEditorReview>\n </AgentUndoRoom.Provider>\n </DocxMentions>\n {!compact && <DocxEditor.HeaderFooterChrome />}\n {!compact && <DocxEditor.NotesChrome />}\n <DocxEditor.Equation />\n <DocxEditor.HyperLink />\n <DocxEditor.ContextMenu>\n <DocxContextMenuExtras />\n <MySignatureContextItems />\n </DocxEditor.ContextMenu>\n </DocxEditor.Viewport>\n {!compact && <DocxEditor.PageNumber />}\n </div>\n </SignatureFieldsProvider>\n </CrossReferencesProvider>\n </HouseTemplateProvider>\n </DefinedTermsProvider>\n </DocxAuthorContext.Provider>\n </DocxEditor.Root>\n </EditorBoundary>\n </div>\n )}\n <div className=\"native-docx-actions\">\n <span className=\"native-docx-status\" role=\"status\">\n {offline ? <WifiOff size={14} /> : !dirty && ready ? <Check size={14} /> : null}\n {status}\n </span>\n <DocxParticipants session={ready?.room?.session} />\n {!compact && (\n <select\n className=\"native-docx-zoom\"\n aria-label=\"Zoom\"\n data-testid=\"native-docx-zoom\"\n disabled={!ready}\n value={fitWidth ? 'fit' : String(zoomPercent)}\n onChange={(event) => pickZoom(event.target.value)}\n >\n <option value=\"fit\">Fit width</option>\n {[...new Set([...ZOOM_LEVELS, ...(fitWidth ? [] : [zoomPercent])])]\n .sort((a, b) => a - b)\n .map((level) => (\n <option key={level} value={String(level)}>\n {level}%\n </option>\n ))}\n </select>\n )}\n {!compact && (\n <button\n onClick={() => void exportDocument()}\n disabled={!ready}\n aria-label=\"Download DOCX\"\n >\n <Download size={14} />\n DOCX\n </button>\n )}\n {!compact && !snapshot && !stream && ready?.canEdit && (\n <button\n className=\"native-docx-save\"\n onClick={() => void saveVersion()}\n disabled={!ready || saving || offline}\n data-testid=\"native-docx-save\"\n >\n <Save size={14} />\n {saving ? 'Saving…' : isDraft ? 'Save note' : 'Save version'}\n </button>\n )}\n </div>\n </section>\n )\n}\n"]}