@coco-vexel/coco-office-editor 0.0.0-stage → 1.0.0

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 (57) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +510 -2
  3. package/THIRD_PARTY_NOTICES.md +212 -0
  4. package/dist/index.cjs +26401 -0
  5. package/dist/index.cjs.map +1 -0
  6. package/dist/index.d.cts +12 -0
  7. package/dist/index.d.ts +12 -0
  8. package/dist/index.js +26192 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/model-DB6aN6uJ.d.cts +321 -0
  11. package/dist/model-DB6aN6uJ.d.ts +321 -0
  12. package/dist/native-B6B649CC.d.ts +1111 -0
  13. package/dist/native-Ct9nN06K.d.cts +1111 -0
  14. package/dist/ppt-native.cjs +5334 -0
  15. package/dist/ppt-native.cjs.map +1 -0
  16. package/dist/ppt-native.d.cts +2 -0
  17. package/dist/ppt-native.d.ts +2 -0
  18. package/dist/ppt-native.js +5332 -0
  19. package/dist/ppt-native.js.map +1 -0
  20. package/dist/ppt.cjs +5426 -0
  21. package/dist/ppt.cjs.map +1 -0
  22. package/dist/ppt.d.cts +306 -0
  23. package/dist/ppt.d.ts +306 -0
  24. package/dist/ppt.js +5410 -0
  25. package/dist/ppt.js.map +1 -0
  26. package/dist/spreadsheet.cjs +4276 -0
  27. package/dist/spreadsheet.cjs.map +1 -0
  28. package/dist/spreadsheet.d.cts +676 -0
  29. package/dist/spreadsheet.d.ts +676 -0
  30. package/dist/spreadsheet.js +4213 -0
  31. package/dist/spreadsheet.js.map +1 -0
  32. package/dist/word-editing.cjs +812 -0
  33. package/dist/word-editing.cjs.map +1 -0
  34. package/dist/word-editing.d.cts +149 -0
  35. package/dist/word-editing.d.ts +149 -0
  36. package/dist/word-editing.js +803 -0
  37. package/dist/word-editing.js.map +1 -0
  38. package/dist/word-native.cjs +13400 -0
  39. package/dist/word-native.cjs.map +1 -0
  40. package/dist/word-native.d.cts +4 -0
  41. package/dist/word-native.d.ts +4 -0
  42. package/dist/word-native.js +13293 -0
  43. package/dist/word-native.js.map +1 -0
  44. package/dist/word-prosemirror.cjs +489 -0
  45. package/dist/word-prosemirror.cjs.map +1 -0
  46. package/dist/word-prosemirror.d.cts +21 -0
  47. package/dist/word-prosemirror.d.ts +21 -0
  48. package/dist/word-prosemirror.js +483 -0
  49. package/dist/word-prosemirror.js.map +1 -0
  50. package/dist/word.cjs +16764 -0
  51. package/dist/word.cjs.map +1 -0
  52. package/dist/word.d.cts +84 -0
  53. package/dist/word.d.ts +84 -0
  54. package/dist/word.js +16632 -0
  55. package/dist/word.js.map +1 -0
  56. package/package.json +106 -3
  57. package/src/styles/editor.css +1507 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/generated/editor-styles.ts","../src/word/native-model.ts","../src/word/native-numbering.ts","../src/word/native-commands.ts","../src/word/style-resolver.ts","../src/word/native-renderer.ts","../src/word/native-selection.ts","../src/word/native-command-state.ts","../src/word/native-search.ts","../src/word/runtime-events.ts","../src/word/native-clipboard.ts","../src/word/native-table-pagination.ts","../src/word/ooxml-patch.ts","../src/word/native.ts"],"names":["targetRow","first","mergedBlocks","mergedParagraphs","cell","_a","sectionBreakType","nextSectionIndex","targetBody","page","twipsToPt","selectedImage","_b","_c","_d","_e","location","inlineLength","document","buildIndices","resolved","paragraph","partPath","markDirty","W_NS","createXmlPart","setPart","relationship","W14_NS","createBinaryPart","getPart","wrapper","position","selected","changed","commentsPart","commentsDom","comment","options","revision","root","input","preservedSelection","cursor","beforeParagraph","selectedTextRanges","insertedImage","operation","beforeParagraphs","target","escapeHtmlAttribute","text","current","range","next","point","nativeSelection","paraId","_f","currentSelection"],"mappings":"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","file":"word-native.cjs","sourcesContent":["export default \".coco-word-editor {\\n background: #f4f5f7;\\n color: #202124;\\n font-family:\\n Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", sans-serif;\\n width: 100%;\\n height: 100%;\\n overflow: hidden;\\n}\\n\\n.coco-word-shell {\\n display: grid;\\n grid-template-columns: minmax(0, 1fr) 280px;\\n gap: 16px;\\n width: 100%;\\n height: 100%;\\n min-width: 0;\\n min-height: 0;\\n padding: 16px;\\n box-sizing: border-box;\\n overflow: hidden;\\n}\\n\\n.coco-word-document-scroll {\\n min-width: 0;\\n min-height: 0;\\n overflow: auto;\\n scrollbar-gutter: stable;\\n}\\n\\n.coco-word-devbar {\\n position: sticky;\\n top: 0;\\n z-index: 2;\\n display: flex;\\n gap: 10px;\\n align-items: center;\\n width: min(100%, 860px);\\n margin: 0 auto 12px;\\n padding: 8px 0;\\n background: #f4f5f7;\\n color: #52525b;\\n font-size: 12px;\\n}\\n\\n.coco-word-devbar select {\\n min-width: 280px;\\n max-width: 520px;\\n height: 30px;\\n border: 1px solid #c7cbd4;\\n background: #ffffff;\\n color: #202124;\\n}\\n\\n.coco-word-toolbar {\\n position: sticky;\\n top: 46px;\\n z-index: 2;\\n display: flex;\\n flex-wrap: wrap;\\n gap: 6px;\\n align-items: center;\\n width: min(100%, 860px);\\n margin: 0 auto 12px;\\n padding: 8px;\\n box-sizing: border-box;\\n background: #ffffff;\\n border: 1px solid #d8dbe2;\\n color: #202124;\\n font-size: 12px;\\n}\\n\\n.coco-word-toolbar button,\\n.coco-word-toolbar select,\\n.coco-word-toolbar input {\\n height: 30px;\\n border: 1px solid #c7cbd4;\\n background: #ffffff;\\n color: #202124;\\n}\\n\\n.coco-word-toolbar button {\\n min-width: 32px;\\n padding: 0 9px;\\n cursor: pointer;\\n}\\n\\n.coco-word-toolbar button:hover {\\n background: #edf2ff;\\n border-color: #8aa6e8;\\n}\\n\\n.coco-word-toolbar button.is-active {\\n background: #dbe7ff;\\n border-color: #5b7fc7;\\n}\\n\\n.coco-word-toolbar button.is-mixed,\\n.coco-word-toolbar input.is-mixed {\\n border-style: dashed;\\n border-color: #5b7fc7;\\n}\\n\\n.coco-word-toolbar button:disabled,\\n.coco-word-toolbar select:disabled,\\n.coco-word-toolbar input:disabled {\\n cursor: default;\\n opacity: 0.45;\\n}\\n\\n.coco-word-toolbar label {\\n display: inline-flex;\\n gap: 6px;\\n align-items: center;\\n}\\n\\n.coco-word-toolbar input[type=\\\"color\\\"] {\\n width: 36px;\\n padding: 2px;\\n}\\n\\n.coco-word-image-size-input {\\n width: 58px;\\n padding: 0 4px;\\n}\\n\\n.coco-word-table-size-input {\\n width: 42px;\\n}\\n\\n.coco-word-hyperlink {\\n color: #0563c1;\\n cursor: text;\\n text-decoration: underline;\\n}\\n\\n.coco-word-native-editor-host.is-hyperlink-navigation-mode .coco-word-hyperlink {\\n cursor: pointer;\\n}\\n\\n.coco-word-hyperlink-input {\\n min-width: 160px;\\n width: 190px;\\n}\\n\\n.coco-word-highlight-icon {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n min-width: 15px;\\n height: 21px;\\n box-sizing: border-box;\\n border-bottom: 4px solid var(--coco-highlight-color, #ffff00);\\n font-weight: 700;\\n}\\n\\n.coco-word-toolbar-divider {\\n width: 1px;\\n height: 22px;\\n margin: 0 4px;\\n background: #d8dbe2;\\n}\\n\\n.coco-word-searchbar {\\n position: sticky;\\n top: 46px;\\n z-index: 3;\\n display: flex;\\n flex-wrap: wrap;\\n gap: 6px;\\n align-items: center;\\n width: min(100%, 860px);\\n margin: -6px auto 12px;\\n padding: 8px;\\n box-sizing: border-box;\\n border: 1px solid #c7cbd4;\\n background: #ffffff;\\n box-shadow: 0 4px 12px rgb(15 23 42 / 10%);\\n font-size: 12px;\\n}\\n\\n.coco-word-searchbar[hidden] {\\n display: none;\\n}\\n\\n.coco-word-searchbar input[type=\\\"search\\\"],\\n.coco-word-searchbar input[type=\\\"text\\\"] {\\n width: 180px;\\n height: 30px;\\n padding: 0 8px;\\n border: 1px solid #c7cbd4;\\n}\\n\\n.coco-word-searchbar button {\\n min-width: 32px;\\n height: 30px;\\n padding: 0 8px;\\n border: 1px solid #c7cbd4;\\n background: #ffffff;\\n}\\n\\n.coco-word-searchbar label {\\n display: inline-flex;\\n gap: 4px;\\n align-items: center;\\n height: 30px;\\n}\\n\\n#wordSearchCount {\\n min-width: 52px;\\n color: #52525b;\\n text-align: center;\\n}\\n\\n.coco-word-page {\\n width: min(100%, 794px);\\n min-height: calc(100% - 32px);\\n margin: 0 auto;\\n padding: 96px;\\n box-sizing: border-box;\\n background: #ffffff;\\n border: 1px solid #d8dbe2;\\n box-shadow: 0 10px 24px rgba(15, 23, 42, 0.08);\\n}\\n\\n.coco-word-page .ProseMirror {\\n outline: none;\\n font-size: 16px;\\n line-height: 1.75;\\n}\\n\\n.coco-word-pages {\\n width: 100%;\\n min-height: calc(100% - 32px);\\n}\\n\\ncoco-word-native-document {\\n display: flex;\\n flex-direction: column;\\n align-items: stretch;\\n box-sizing: border-box;\\n outline: none;\\n color: #000000;\\n font-family: SimSun, \\\"Songti SC\\\", \\\"Noto Serif CJK SC\\\", serif;\\n font-size: 10.5pt;\\n line-height: normal;\\n}\\n\\ncoco-word-native-document.has-annotation-rail {\\n padding-right: 260px;\\n}\\n\\ncoco-word-native-document.is-paginated {\\n display: grid;\\n justify-items: center;\\n gap: 18px;\\n}\\n\\ncoco-word-native-page {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n box-sizing: border-box;\\n max-width: 100%;\\n background: #ffffff;\\n border: 1px solid #d8dbe2;\\n box-shadow: 0 10px 24px rgba(15, 23, 42, 0.08);\\n}\\n\\ncoco-word-native-page-body {\\n position: relative;\\n z-index: 1;\\n display: flex;\\n flex-direction: column;\\n align-items: stretch;\\n flex: 1 1 auto;\\n min-height: 0;\\n}\\n\\ncoco-word-native-page-body > * {\\n flex-shrink: 0;\\n}\\n\\ncoco-word-native-document.uses-natural-paragraph-flow coco-word-native-page-body {\\n display: flow-root;\\n}\\n\\ncoco-word-native-document.uses-natural-paragraph-flow coco-word-native-page-body > * {\\n display: block;\\n}\\n\\n.coco-word-native-page-behind-layer,\\n.coco-word-native-page-overlay {\\n position: absolute;\\n inset: 0;\\n pointer-events: none;\\n}\\n\\n.coco-word-native-page-behind-layer {\\n z-index: 0;\\n}\\n\\n.coco-word-native-page-overlay {\\n z-index: 3;\\n}\\n\\n.coco-word-native-page-behind-layer > .is-page-layer-anchor,\\n.coco-word-native-page-overlay > .is-page-layer-anchor {\\n position: absolute;\\n left: var(--coco-word-anchor-left, 0);\\n top: var(--coco-word-anchor-top, 0);\\n max-width: none;\\n margin: 0;\\n pointer-events: auto;\\n}\\n\\n.coco-word-native-page-behind-layer > .is-page-layer-anchor {\\n pointer-events: none;\\n}\\n\\n.coco-word-native-page-behind-layer > .is-page-layer-anchor[data-position-horizontal-relative-from=\\\"page\\\"],\\n.coco-word-native-page-overlay > .is-page-layer-anchor[data-position-horizontal-relative-from=\\\"page\\\"] {\\n left: calc(var(--coco-word-anchor-left, 0) - var(--coco-word-page-margin-left, 0));\\n}\\n\\n.coco-word-native-page-behind-layer > .is-page-layer-anchor[data-position-vertical-relative-from=\\\"page\\\"],\\n.coco-word-native-page-overlay > .is-page-layer-anchor[data-position-vertical-relative-from=\\\"page\\\"] {\\n top: calc(var(--coco-word-anchor-top, 0) - var(--coco-word-page-margin-top, 0));\\n}\\n\\n.coco-word-native-page-behind-layer > .is-page-layer-anchor.is-anchor-right,\\n.coco-word-native-page-overlay > .is-page-layer-anchor.is-anchor-right {\\n right: 0;\\n left: auto;\\n}\\n\\n.coco-word-native-page-behind-layer > .is-page-layer-anchor.is-anchor-center,\\n.coco-word-native-page-overlay > .is-page-layer-anchor.is-anchor-center {\\n left: 50%;\\n transform: translateX(-50%);\\n}\\n\\n.coco-word-native-comment-layer {\\n position: absolute;\\n top: 0;\\n right: -240px;\\n z-index: 2;\\n width: 220px;\\n pointer-events: none;\\n}\\n\\n.coco-word-native-comment-bubble {\\n position: absolute;\\n top: var(--coco-word-comment-top, 0px);\\n box-sizing: border-box;\\n width: 220px;\\n min-height: 0;\\n padding: 6px 8px;\\n border: 1px solid #e6d7a1;\\n border-left: 3px solid #d6a72c;\\n border-radius: 4px;\\n background: #fffdf2;\\n box-shadow: 0 5px 16px rgba(72, 55, 8, 0.1);\\n color: #332d1b;\\n font-family: Calibri, Arial, sans-serif;\\n pointer-events: auto;\\n}\\n\\n.coco-word-native-comment-bubble.coco-word-native-comment-reply {\\n border-left-color: #6b7fd7;\\n background: #f5f7ff;\\n color: #26345f;\\n}\\n\\n.coco-word-native-comment-bubble.is-selected {\\n outline: 2px solid #b7791f;\\n outline-offset: 1px;\\n}\\n\\n.coco-word-native-comment-meta {\\n margin: 0 24px 3px 0;\\n overflow: hidden;\\n color: #76601f;\\n font-size: 9px;\\n font-weight: 700;\\n line-height: 1.3;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n\\n.coco-word-comment-reply {\\n box-shadow: inset 0 -2px 0 #7184df;\\n}\\n\\n.coco-word-native-comment-body {\\n display: -webkit-box;\\n overflow: hidden;\\n font-size: 11px;\\n line-height: 1.2;\\n -webkit-box-orient: vertical;\\n -webkit-line-clamp: 2;\\n}\\n\\n.coco-word-native-comment-actions {\\n position: absolute;\\n top: 6px;\\n right: 8px;\\n}\\n\\n.coco-word-native-comment-menu-button {\\n width: 22px;\\n height: 20px;\\n padding: 0 0 4px;\\n border: 0;\\n border-radius: 3px;\\n background: transparent;\\n color: #76601f;\\n cursor: pointer;\\n font: 700 16px/16px Arial, sans-serif;\\n}\\n\\n.coco-word-native-comment-menu-button:hover,\\n.coco-word-native-comment-menu-button:focus-visible {\\n background: #f3e8bd;\\n outline: none;\\n}\\n\\n.coco-word-native-comment-menu {\\n position: absolute;\\n top: 27px;\\n right: 0;\\n z-index: 4;\\n min-width: 76px;\\n padding: 4px;\\n border: 1px solid #e0d2a2;\\n border-radius: 4px;\\n background: #fff;\\n box-shadow: 0 5px 14px rgba(72, 55, 8, 0.16);\\n}\\n\\n.coco-word-native-comment-menu-item {\\n display: block;\\n width: 100%;\\n padding: 5px 9px;\\n border: 0;\\n background: transparent;\\n color: #51451f;\\n cursor: pointer;\\n font: 12px/1.3 Calibri, Arial, sans-serif;\\n text-align: left;\\n}\\n\\n.coco-word-native-comment-menu-item:hover,\\n.coco-word-native-comment-menu-item:focus-visible {\\n border-radius: 2px;\\n background: #f7f0d6;\\n outline: none;\\n}\\n\\n.coco-word-native-revision-layer {\\n position: absolute;\\n top: 0;\\n right: -240px;\\n z-index: 3;\\n width: 220px;\\n pointer-events: none;\\n}\\n\\n.coco-word-native-revision-bubble {\\n position: absolute;\\n top: var(--coco-word-revision-top, 0px);\\n box-sizing: border-box;\\n width: 220px;\\n min-height: 0;\\n padding: 6px 8px;\\n border: 1px solid #86b7fe;\\n border-left: 3px solid #2563eb;\\n background: #eff6ff;\\n box-shadow: 0 4px 12px rgba(37, 99, 235, 0.12);\\n color: #1e3a8a;\\n font-family: Calibri, Arial, sans-serif;\\n pointer-events: auto;\\n}\\n\\n.coco-word-native-revision-group {\\n position: absolute;\\n top: var(--coco-word-revision-top, 0px);\\n z-index: 0;\\n width: 220px;\\n pointer-events: auto;\\n}\\n\\n.coco-word-native-revision-group.is-expanded {\\n z-index: 6;\\n}\\n\\n.coco-word-native-revision-group-toggle {\\n display: grid;\\n grid-template-columns: minmax(0, 1fr) auto;\\n gap: 2px 8px;\\n align-items: center;\\n width: 220px;\\n min-height: 44px;\\n padding: 6px 8px;\\n border: 1px solid #93b7eb;\\n border-left: 3px solid #2563eb;\\n border-radius: 4px;\\n background: #eff6ff;\\n box-shadow: 0 4px 12px rgb(37 99 235 / 12%);\\n color: #334155;\\n cursor: pointer;\\n font: 10px/1.25 Calibri, Arial, sans-serif;\\n text-align: left;\\n}\\n\\n.coco-word-native-revision-group-toggle strong {\\n overflow: hidden;\\n color: #1e3a8a;\\n font-size: 11px;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n\\n.coco-word-native-revision-group-affordance {\\n grid-row: 1 / span 2;\\n grid-column: 2;\\n color: #2563eb;\\n}\\n\\n.coco-word-native-revision-group-list {\\n position: absolute;\\n top: calc(100% + 4px);\\n right: 0;\\n display: grid;\\n gap: 6px;\\n width: 228px;\\n max-height: min(360px, 60vh);\\n padding: 4px;\\n overflow-y: auto;\\n box-sizing: border-box;\\n border: 1px solid #93b7eb;\\n border-radius: 4px;\\n background: #f8fbff;\\n box-shadow: 0 10px 24px rgb(30 64 175 / 20%);\\n}\\n\\n.coco-word-native-revision-group-list[hidden] {\\n display: none;\\n}\\n\\n.coco-word-native-revision-group-list > .coco-word-native-revision-bubble {\\n position: relative;\\n top: auto;\\n width: 100%;\\n}\\n\\n.coco-word-native-revision-bubble.is-delete {\\n border-color: #fca5a5;\\n border-left-color: #dc2626;\\n background: #fff1f2;\\n color: #991b1b;\\n}\\n\\n.coco-word-native-revision-bubble.is-selected {\\n z-index: 1;\\n outline: 2px solid #1d4ed8;\\n outline-offset: 2px;\\n box-shadow: 0 0 0 4px rgba(29, 78, 216, 0.16), 0 6px 16px rgba(30, 64, 175, 0.2);\\n}\\n\\n.coco-word-native-revision-bubble.is-delete.is-selected {\\n outline-color: #b91c1c;\\n box-shadow: 0 0 0 4px rgba(185, 28, 28, 0.14), 0 6px 16px rgba(127, 29, 29, 0.18);\\n}\\n\\n.coco-word-native-revision-header {\\n display: flex;\\n justify-content: flex-start;\\n min-height: 13px;\\n padding-right: 52px;\\n margin-bottom: 3px;\\n}\\n\\n.coco-word-native-revision-meta {\\n overflow: hidden;\\n color: #64748b;\\n font-size: 9px;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n\\n.coco-word-native-revision-content {\\n display: -webkit-box;\\n overflow: hidden;\\n margin-bottom: 4px;\\n color: #334155;\\n font-size: 11px;\\n line-height: 1.2;\\n word-break: break-all;\\n -webkit-box-orient: vertical;\\n -webkit-line-clamp: 2;\\n}\\n\\n.coco-word-native-revision-actions {\\n display: none;\\n position: absolute;\\n top: 6px;\\n right: 8px;\\n z-index: 2;\\n pointer-events: auto;\\n gap: 4px;\\n}\\n\\n.coco-word-native-revision-bubble.is-selected .coco-word-native-revision-actions {\\n display: flex;\\n}\\n\\n.coco-word-native-revision-bubble button {\\n position: relative;\\n z-index: 1;\\n display: inline-grid;\\n width: 22px;\\n height: 20px;\\n padding: 0;\\n border: 1px solid #94a3b8;\\n border-radius: 2px;\\n background: #fff;\\n color: inherit;\\n cursor: pointer;\\n font-size: 14px;\\n line-height: 1;\\n place-items: center;\\n pointer-events: auto;\\n}\\n\\n.coco-word-native-revision-bubble button:hover {\\n filter: brightness(0.96);\\n}\\n\\n.coco-word-native-revision-bubble button.is-accept {\\n color: #15803d;\\n}\\n\\n.coco-word-native-revision-bubble button.is-reject {\\n color: #b91c1c;\\n}\\n\\ncoco-word-native-story {\\n display: block;\\n margin: 0 0 18pt;\\n padding: 0 0 8pt;\\n border-bottom: 1px solid #d6d9df;\\n color: #42464d;\\n}\\n\\ncoco-word-native-page > coco-word-native-story {\\n position: absolute;\\n z-index: 1;\\n right: var(--coco-word-page-margin-right, 0);\\n left: var(--coco-word-page-margin-left, 0);\\n margin: 0;\\n padding: 0;\\n border: 0;\\n color: inherit;\\n}\\n\\ncoco-word-native-page > coco-word-native-story[data-story-kind=\\\"header\\\"] {\\n top: var(--coco-word-header-distance, 0);\\n}\\n\\ncoco-word-native-page > coco-word-native-story[data-story-kind=\\\"footer\\\"] {\\n bottom: var(--coco-word-footer-distance, 0);\\n}\\n\\ncoco-word-native-story.is-empty {\\n display: none;\\n}\\n\\ncoco-word-native-story[data-story-kind=\\\"footer\\\"] {\\n margin: 18pt 0 0;\\n padding: 8pt 0 0;\\n border-top: 1px solid #d6d9df;\\n border-bottom: 0;\\n}\\n\\ncoco-word-native-page > coco-word-native-story[data-story-kind=\\\"footer\\\"] {\\n margin: 0;\\n padding: 0;\\n border: 0;\\n}\\n\\ncoco-word-native-story coco-word-native-p {\\n margin-bottom: 4pt;\\n}\\n\\ncoco-word-native-page > coco-word-native-story coco-word-native-p {\\n margin-bottom: 0;\\n}\\n\\ncoco-word-native-p {\\n position: relative;\\n display: block;\\n min-height: 1.4em;\\n margin: 0;\\n outline: none;\\n white-space: pre-wrap;\\n overflow-wrap: anywhere;\\n word-break: break-word;\\n box-sizing: border-box;\\n}\\n\\ncoco-word-native-p.is-flow-empty {\\n min-height: 0;\\n height: 0;\\n line-height: 0;\\n margin: 0;\\n padding: 0;\\n}\\n\\ncoco-word-native-p:focus {\\n background: #fffdf2;\\n}\\n\\ncoco-word-native-p.has-tab-stops {\\n text-align: initial;\\n}\\n\\n.coco-word-tab-row {\\n display: grid;\\n grid-template-columns: minmax(0, 1fr) auto;\\n align-items: baseline;\\n width: 100%;\\n column-gap: 12pt;\\n}\\n\\n.coco-word-tab-row.has-leader-dot,\\n.coco-word-tab-row.has-leader-hyphen,\\n.coco-word-tab-row.has-leader-underscore,\\n.coco-word-tab-row.has-leader-heavy,\\n.coco-word-tab-row.has-leader-middleDot {\\n column-gap: 4pt;\\n line-height: 2;\\n}\\n\\n.coco-word-tab-row.is-three-part-tab {\\n grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);\\n}\\n\\n.coco-word-tab-segment {\\n min-width: 0;\\n}\\n\\n.coco-word-tab-segment.is-segment-0 {\\n text-align: left;\\n}\\n\\n.coco-word-tab-row.is-right-tab[class*=\\\"has-leader-\\\"] .coco-word-tab-segment.is-segment-0 {\\n display: flex;\\n align-items: baseline;\\n white-space: nowrap;\\n}\\n\\n.coco-word-tab-row.is-right-tab[class*=\\\"has-leader-\\\"] .coco-word-tab-segment.is-segment-0::after {\\n content: \\\"\\\";\\n flex: 1 1 auto;\\n min-width: 12pt;\\n margin: 0 3pt;\\n border-bottom: 1px dotted currentColor;\\n transform: translateY(-0.25em);\\n}\\n\\n.coco-word-tab-row.is-right-tab.has-leader-hyphen .coco-word-tab-segment.is-segment-0::after {\\n border-bottom-style: dashed;\\n}\\n\\n.coco-word-tab-row.is-right-tab.has-leader-underscore .coco-word-tab-segment.is-segment-0::after,\\n.coco-word-tab-row.is-right-tab.has-leader-heavy .coco-word-tab-segment.is-segment-0::after {\\n border-bottom-style: solid;\\n}\\n\\n.coco-word-tab-row.is-right-tab.has-leader-heavy .coco-word-tab-segment.is-segment-0::after {\\n border-bottom-width: 2px;\\n}\\n\\n.coco-word-tab-segment.is-segment-1 {\\n text-align: center;\\n}\\n\\n.coco-word-tab-row.is-right-tab .coco-word-tab-segment.is-segment-1,\\n.coco-word-tab-segment.is-segment-2 {\\n text-align: right;\\n white-space: nowrap;\\n}\\n\\n.coco-word-tab-marker {\\n display: none;\\n}\\n\\ncoco-word-native-p[data-numbering=\\\"true\\\"] {\\n margin-left: 2.8em;\\n padding-right: 0.5em;\\n text-indent: -2.8em;\\n}\\n\\ncoco-word-native-p[data-numbering=\\\"true\\\"]::before {\\n content: attr(data-numbering-label) \\\" \\\";\\n display: inline-block;\\n width: 2.4em;\\n text-indent: 0;\\n white-space: nowrap;\\n}\\n\\ncoco-word-native-p[data-keep-lines=\\\"true\\\"] {\\n break-inside: avoid;\\n}\\n\\ncoco-word-native-p[data-keep-next=\\\"true\\\"] {\\n break-after: avoid;\\n}\\n\\ncoco-word-native-table {\\n display: block;\\n width: 100%;\\n min-width: 0;\\n box-sizing: border-box;\\n margin: 0;\\n max-width: 100%;\\n overflow: auto;\\n scrollbar-gutter: stable;\\n --coco-word-doc-grid-line-height: 1em;\\n white-space: pre-wrap;\\n}\\n\\ncoco-word-native-table table {\\n box-sizing: border-box;\\n min-width: 100%;\\n max-width: none;\\n margin: 0;\\n border-collapse: collapse;\\n table-layout: fixed;\\n}\\n\\ncoco-word-native-table tbody {\\n display: table-row-group;\\n}\\n\\ncoco-word-native-table tr[data-height-rule=\\\"exact\\\"] {\\n height: var(--coco-word-row-height);\\n}\\n\\ncoco-word-native-table tr[data-height-rule=\\\"atLeast\\\"] {\\n height: var(--coco-word-row-height);\\n}\\n\\ncoco-word-native-table td {\\n min-width: 48px;\\n padding: 0 5.4pt;\\n border: var(--coco-word-table-border, 0);\\n box-sizing: border-box;\\n line-height: normal;\\n vertical-align: top;\\n}\\n\\ncoco-word-native-table td coco-word-native-p {\\n min-height: 1.2em;\\n margin: 0;\\n}\\n\\ncoco-word-native-table td coco-word-native-p:last-child {\\n margin-bottom: 0;\\n}\\n\\ncoco-word-native-document.uses-compact-latin-tables coco-word-native-table td coco-word-native-p {\\n font-size: 13px !important;\\n line-height: 1.08 !important;\\n}\\n\\ncoco-word-native-table td coco-word-native-table {\\n margin: 0;\\n}\\n\\ncoco-word-native-p img {\\n display: inline-block;\\n max-width: 100%;\\n height: auto;\\n vertical-align: baseline;\\n}\\n\\ncoco-word-native-p img.coco-word-anchor-image.is-float-right {\\n float: right;\\n max-width: 55%;\\n margin: 0 0 10pt 14pt;\\n}\\n\\ncoco-word-native-p img.coco-word-anchor-image.is-float-left {\\n float: left;\\n max-width: 55%;\\n margin: 0 14pt 10pt 0;\\n}\\n\\ncoco-word-native-p img.coco-word-anchor-image.is-top-bottom {\\n display: block;\\n clear: both;\\n margin: 10pt auto;\\n}\\n\\ncoco-word-native-p img.coco-word-anchor-image.is-overlay-like {\\n position: relative;\\n left: var(--coco-word-anchor-left, 0);\\n top: var(--coco-word-anchor-top, 0);\\n display: block;\\n margin: 8pt 0;\\n}\\n\\ncoco-word-native-p img.coco-word-anchor-image.is-absolute-anchor {\\n position: absolute;\\n left: var(--coco-word-anchor-left, 0);\\n top: var(--coco-word-anchor-top, 0);\\n max-width: none;\\n margin: 0;\\n pointer-events: auto;\\n}\\n\\ncoco-word-native-p img.coco-word-anchor-image.is-paragraph-relative-anchor,\\ncoco-word-native-drawing.coco-word-anchor-drawing.is-paragraph-relative-anchor {\\n max-width: 100%;\\n}\\n\\ncoco-word-native-p img.coco-word-anchor-image.is-column-relative-anchor,\\ncoco-word-native-drawing.coco-word-anchor-drawing.is-column-relative-anchor {\\n max-width: min(100%, var(--coco-word-column-width, 100%));\\n}\\n\\ncoco-word-native-p img.coco-word-anchor-image.is-absolute-anchor.is-anchor-right {\\n right: 0;\\n left: auto;\\n}\\n\\ncoco-word-native-p img.coco-word-anchor-image.is-absolute-anchor.is-anchor-center {\\n left: 50%;\\n transform: translateX(-50%);\\n}\\n\\ncoco-word-native-p img.coco-word-anchor-image.is-centered {\\n display: block;\\n clear: both;\\n margin-right: auto;\\n margin-left: auto;\\n}\\n\\ncoco-word-native-p img.coco-word-anchor-image.is-behind-text {\\n z-index: 0;\\n}\\n\\ncoco-word-native-p img.coco-word-anchor-image.is-in-front-of-text {\\n z-index: 2;\\n}\\n\\ncoco-word-native-drawing {\\n display: inline-flex;\\n box-sizing: border-box;\\n max-width: calc(100% - 4pt);\\n min-width: 1px;\\n min-height: 1px;\\n margin: 0 2pt;\\n padding: 2pt 4pt;\\n vertical-align: baseline;\\n white-space: pre-wrap;\\n}\\n\\ncoco-word-native-drawing.has-border {\\n border: 1px solid #d4d4d8;\\n}\\n\\ncoco-word-native-drawing.is-empty {\\n display: none !important;\\n}\\n\\ncoco-word-native-drawing.has-fill {\\n background: #ffffff;\\n}\\n\\ncoco-word-native-drawing.is-line-or-connector {\\n display: block;\\n max-width: 100%;\\n min-height: 0;\\n margin: 0;\\n padding: 0;\\n border: 0;\\n background: transparent;\\n}\\n\\ncoco-word-native-drawing.is-line-or-connector.is-horizontal-line {\\n height: 0;\\n border-top: 1px solid #111827;\\n}\\n\\ncoco-word-native-drawing.is-line-or-connector.is-vertical-line {\\n width: 0;\\n border-left: 1px solid #111827;\\n}\\n\\ncoco-word-native-drawing .coco-word-native-drawing-text {\\n display: block;\\n width: 100%;\\n}\\n\\ncoco-word-native-drawing .coco-word-native-drawing-paragraph {\\n display: block;\\n min-height: 1.2em;\\n margin: 0;\\n}\\n\\ncoco-word-native-drawing.coco-word-anchor-drawing.is-float-right {\\n float: right;\\n max-width: 55%;\\n margin: 0 0 10pt 14pt;\\n}\\n\\ncoco-word-native-drawing.coco-word-anchor-drawing.is-float-left {\\n float: left;\\n max-width: 55%;\\n margin: 0 14pt 10pt 0;\\n}\\n\\ncoco-word-native-drawing.coco-word-anchor-drawing.is-top-bottom {\\n display: flex;\\n clear: both;\\n margin: 10pt auto;\\n}\\n\\ncoco-word-native-drawing.coco-word-anchor-drawing.is-overlay-like {\\n position: relative;\\n left: var(--coco-word-anchor-left, 0);\\n top: var(--coco-word-anchor-top, 0);\\n display: flex;\\n margin: 8pt 0;\\n}\\n\\ncoco-word-native-drawing.coco-word-anchor-drawing.is-absolute-anchor {\\n position: absolute;\\n left: var(--coco-word-anchor-left, 0);\\n top: var(--coco-word-anchor-top, 0);\\n max-width: none;\\n margin: 0;\\n pointer-events: auto;\\n}\\n\\ncoco-word-native-drawing.coco-word-anchor-drawing.is-paragraph-relative-anchor {\\n max-width: 100%;\\n}\\n\\ncoco-word-native-drawing.coco-word-anchor-drawing.is-column-relative-anchor {\\n max-width: min(100%, var(--coco-word-column-width, 100%));\\n}\\n\\ncoco-word-native-drawing.coco-word-anchor-drawing.is-absolute-anchor.is-anchor-right {\\n right: 0;\\n left: auto;\\n}\\n\\ncoco-word-native-drawing.coco-word-anchor-drawing.is-absolute-anchor.is-anchor-center {\\n left: 50%;\\n transform: translateX(-50%);\\n}\\n\\ncoco-word-native-drawing.coco-word-anchor-drawing.is-centered {\\n display: flex;\\n clear: both;\\n margin-right: auto;\\n margin-left: auto;\\n}\\n\\ncoco-word-native-drawing.coco-word-anchor-drawing.is-behind-text {\\n z-index: 0;\\n}\\n\\ncoco-word-native-drawing.coco-word-anchor-drawing.is-in-front-of-text {\\n z-index: 2;\\n}\\n\\ncoco-word-native-p img.is-selected {\\n outline: 2px solid #2563eb;\\n outline-offset: 2px;\\n}\\n\\ncoco-word-native-table td.is-cell-range-selected {\\n position: relative;\\n box-shadow: inset 0 0 0 9999px rgb(37 99 235 / 14%);\\n}\\n\\ncoco-word-native-table td.is-cell-range-selected::after {\\n position: absolute;\\n z-index: 3;\\n inset: -1px;\\n border: 1px solid #2563eb;\\n pointer-events: none;\\n content: \\\"\\\";\\n}\\n\\ncoco-word-native-table td.is-cell-range-anchor::after,\\ncoco-word-native-table td.is-cell-range-focus::after {\\n border-width: 2px;\\n}\\n\\n.coco-word-native-editor-host {\\n position: relative;\\n user-select: text;\\n -webkit-user-select: text;\\n}\\n\\n.coco-word-native-editor-host coco-word-native-document,\\n.coco-word-native-editor-host coco-word-native-page,\\n.coco-word-native-editor-host coco-word-native-page-body,\\n.coco-word-native-editor-host coco-word-native-story,\\n.coco-word-native-editor-host coco-word-native-p {\\n user-select: text;\\n -webkit-user-select: text;\\n}\\n\\n.coco-word-image-resize-handle {\\n position: absolute;\\n z-index: 20;\\n box-sizing: border-box;\\n width: 12px;\\n height: 12px;\\n min-width: 12px;\\n min-height: 12px;\\n padding: 0;\\n border: 2px solid #ffffff;\\n border-radius: 2px;\\n background: #2563eb;\\n box-shadow: 0 0 0 1px #1d4ed8;\\n cursor: nwse-resize;\\n touch-action: none;\\n}\\n\\n.coco-word-page-break {\\n display: block;\\n position: relative;\\n height: 28px;\\n margin: 8px 0;\\n border-top: 1px dashed #b8bdc7;\\n}\\n\\n.coco-word-page-break::after {\\n content: \\\"Page break\\\";\\n position: absolute;\\n top: -9px;\\n left: 50%;\\n padding: 0 6px;\\n background: #ffffff;\\n color: #777d88;\\n font-size: 10px;\\n line-height: 16px;\\n transform: translateX(-50%);\\n}\\n\\ncoco-word-native-document.is-paginated .coco-word-page-break {\\n display: none;\\n}\\n\\n.coco-word-page p {\\n margin: 0 0 12px;\\n}\\n\\n.coco-word-page p[data-style-id=\\\"Title\\\"] {\\n margin: 0 0 24px;\\n padding-bottom: 10px;\\n border-bottom: 2px solid #4472c4;\\n color: #17365d;\\n font-size: 30pt;\\n line-height: 1.18;\\n}\\n\\n.coco-word-page p[data-style-id=\\\"Heading1\\\"] {\\n margin-top: 26px;\\n margin-bottom: 10px;\\n color: #365f91;\\n font-size: 16pt;\\n font-weight: 700;\\n line-height: 1.25;\\n}\\n\\n.coco-word-page p[data-style-id=\\\"Heading2\\\"] {\\n margin-top: 20px;\\n margin-bottom: 8px;\\n color: #4f81bd;\\n font-size: 14pt;\\n font-weight: 700;\\n line-height: 1.3;\\n}\\n\\n.coco-word-page img {\\n display: inline-block;\\n max-width: 100%;\\n height: auto;\\n vertical-align: baseline;\\n}\\n\\n.coco-word-table-scroll {\\n overflow-x: auto;\\n max-width: 100%;\\n margin: 12px 0;\\n}\\n\\n.coco-word-page table {\\n margin: 0;\\n border-collapse: collapse;\\n table-layout: fixed;\\n}\\n\\n.coco-word-page tbody {\\n display: table-row-group;\\n}\\n\\n.coco-word-page td {\\n min-width: 48px;\\n padding: 0 5.4pt;\\n border: var(--coco-word-table-border, 1px solid #d4d4d8);\\n box-sizing: border-box;\\n line-height: normal;\\n}\\n\\n.coco-word-page td p {\\n margin: 0 0 6px;\\n}\\n\\n.coco-word-page td p:last-child {\\n margin-bottom: 0;\\n}\\n\\n.coco-word-comment {\\n background: #fff1a8;\\n border-bottom: 2px solid #e4b100;\\n}\\n\\n.coco-word-revision-insert {\\n background: #dcfce7;\\n color: #166534;\\n text-decoration: underline;\\n}\\n\\n.coco-word-revision-delete {\\n background: #fee2e2;\\n color: #991b1b;\\n text-decoration: line-through;\\n}\\n\\nimg.coco-word-revision-delete {\\n outline: 2px solid #dc2626;\\n opacity: 0.72;\\n}\\n\\nimg.coco-word-revision-insert {\\n outline: 2px solid #16a34a;\\n}\\n\\nimg.coco-word-revision-format {\\n outline: 2px dashed #7c3aed;\\n outline-offset: 2px;\\n}\\n\\ncoco-word-native-table.coco-word-revision-insert {\\n outline: 2px solid #2563eb;\\n outline-offset: 2px;\\n}\\n\\ncoco-word-native-table.coco-word-revision-delete {\\n outline: 2px solid #dc2626;\\n outline-offset: 2px;\\n opacity: 0.78;\\n}\\n\\n.coco-word-inspector {\\n min-width: 0;\\n min-height: 0;\\n overflow: auto;\\n padding: 14px;\\n background: #ffffff;\\n border: 1px solid #d8dbe2;\\n}\\n\\n@media (max-width: 1399px) {\\n .coco-word-shell {\\n grid-template-columns: minmax(0, 1fr);\\n }\\n\\n .coco-word-inspector {\\n display: none;\\n }\\n}\\n\\n.coco-word-inspector h2 {\\n margin: 0 0 12px;\\n font-size: 15px;\\n}\\n\\n.coco-word-inspector h2:not(:first-child) {\\n margin-top: 18px;\\n}\\n\\n.coco-word-acceptance {\\n display: grid;\\n gap: 10px;\\n margin-bottom: 14px;\\n font-size: 12px;\\n}\\n\\n.coco-word-acceptance-status {\\n display: inline-flex;\\n align-items: center;\\n width: fit-content;\\n height: 24px;\\n padding: 0 8px;\\n border: 1px solid #b7c7af;\\n background: #eff8ea;\\n color: #245917;\\n font-weight: 700;\\n}\\n\\n.coco-word-acceptance-status.is-warn {\\n border-color: #e3c66d;\\n background: #fff8df;\\n color: #775400;\\n}\\n\\n.coco-word-acceptance-grid {\\n display: grid;\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n gap: 6px;\\n}\\n\\n.coco-word-acceptance-metric {\\n min-width: 0;\\n padding: 7px;\\n border: 1px solid #e1e4ea;\\n background: #fafafa;\\n}\\n\\n.coco-word-acceptance-metric span {\\n display: block;\\n color: #5f6368;\\n font-size: 11px;\\n}\\n\\n.coco-word-acceptance-metric strong {\\n display: block;\\n margin-top: 3px;\\n color: #202124;\\n font-size: 12px;\\n font-weight: 700;\\n overflow-wrap: anywhere;\\n}\\n\\n.coco-word-acceptance-metric.is-good {\\n border-color: #c8dac2;\\n background: #f5fbf2;\\n}\\n\\n.coco-word-acceptance-metric.is-warn {\\n border-color: #efd77f;\\n background: #fff9e8;\\n}\\n\\n.coco-word-acceptance-section {\\n color: #3f4247;\\n font-size: 12px;\\n font-weight: 700;\\n}\\n\\n.coco-word-acceptance ul {\\n margin: 0;\\n padding-left: 18px;\\n color: #775400;\\n}\\n\\n.coco-word-acceptance-empty {\\n color: #5f6368;\\n}\\n\\n.coco-word-inspector pre {\\n margin: 0;\\n white-space: pre-wrap;\\n word-break: break-word;\\n font-size: 12px;\\n line-height: 1.5;\\n}\\n\\n.coco-word-context-menu {\\n position: fixed;\\n z-index: 10000;\\n display: flex;\\n min-width: 188px;\\n max-height: calc(100vh - 8px);\\n padding: 4px;\\n overflow-y: auto;\\n flex-direction: column;\\n background: #ffffff;\\n border: 1px solid #c8c8c8;\\n border-radius: 4px;\\n box-shadow: 0 8px 24px rgb(0 0 0 / 16%);\\n color: #202124;\\n font: 13px/1.35 Arial, \\\"Microsoft YaHei\\\", sans-serif;\\n}\\n\\n.coco-word-context-menu-item {\\n min-height: 30px;\\n padding: 5px 10px;\\n border: 0;\\n border-radius: 3px;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n letter-spacing: 0;\\n text-align: left;\\n white-space: nowrap;\\n cursor: default;\\n}\\n\\n.coco-word-context-menu-item:hover:not(:disabled),\\n.coco-word-context-menu-item:focus-visible:not(:disabled) {\\n background: #e8f0fe;\\n outline: none;\\n}\\n\\n.coco-word-context-menu-item:disabled {\\n color: #9aa0a6;\\n}\\n\\n.coco-word-context-menu-separator {\\n height: 1px;\\n margin: 4px 6px;\\n background: #dadce0;\\n}\\n\\n.coco-word-dialog-backdrop {\\n position: fixed;\\n inset: 0;\\n z-index: 11000;\\n display: grid;\\n place-items: center;\\n padding: 20px;\\n box-sizing: border-box;\\n background: rgb(15 23 42 / 28%);\\n}\\n\\n.coco-word-dialog {\\n width: min(420px, 100%);\\n padding: 20px;\\n box-sizing: border-box;\\n background: #ffffff;\\n border: 1px solid #c7cbd4;\\n box-shadow: 0 12px 32px rgb(15 23 42 / 22%);\\n}\\n\\n.coco-word-dialog h2 {\\n margin: 0 0 14px;\\n color: #202124;\\n font-size: 17px;\\n font-weight: 600;\\n}\\n\\n.coco-word-dialog-input {\\n display: block;\\n width: 100%;\\n min-height: 96px;\\n padding: 9px 10px;\\n box-sizing: border-box;\\n border: 1px solid #c7cbd4;\\n color: #202124;\\n font: 14px/1.5 Arial, \\\"Microsoft YaHei\\\", sans-serif;\\n resize: vertical;\\n}\\n\\n.coco-word-dialog-input:focus {\\n outline: 2px solid rgb(59 91 219 / 22%);\\n border-color: #3b5bdb;\\n}\\n\\n.coco-word-dialog-actions {\\n display: flex;\\n justify-content: flex-end;\\n gap: 8px;\\n margin-top: 16px;\\n}\\n\\n.coco-word-dialog-button {\\n min-width: 72px;\\n min-height: 34px;\\n padding: 6px 14px;\\n border: 1px solid #c7cbd4;\\n background: #ffffff;\\n color: #202124;\\n font: 14px Arial, \\\"Microsoft YaHei\\\", sans-serif;\\n cursor: pointer;\\n}\\n\\n.coco-word-dialog-button.is-primary {\\n border-color: #3158c9;\\n background: #3158c9;\\n color: #ffffff;\\n}\\n\\n.coco-word-dialog-button:hover {\\n filter: brightness(0.96);\\n}\\n\";\n","import type {\n EditorBlockView,\n EditorDocumentView,\n EditorDocumentDefaults,\n EditorDrawingSegment,\n EditorFieldSegment,\n EditorPageLayout,\n EditorImageSegment,\n EditorRevisionSegment,\n EditorHeaderFooterStoryView,\n EditorHyperlink,\n EditorCommentSpan,\n EditorParagraphFormat,\n EditorParagraphView,\n EditorRunFormat,\n EditorTableBorders,\n EditorTableCellView,\n EditorTableView,\n EditorTextSegment,\n} from './model.js';\n\nexport interface NativeWordTextNode {\n kind: 'text';\n text: string;\n format: EditorRunFormat | null;\n marks?: NativeWordTextMark[];\n formatRevision?: NativeWordFormatRevisionMark;\n hyperlink?: EditorHyperlink;\n}\n\nexport type NativeWordTextMark = NativeWordCommentMark | NativeWordRevisionMark;\n\nexport interface NativeWordFormatRevisionMark {\n kind: 'format';\n revisionId: string;\n beforeFormat: EditorRunFormat | null;\n author?: string;\n date?: string;\n}\n\nexport interface NativeWordCommentMark {\n kind: 'comment';\n id: string;\n commentId: number;\n parentCommentId?: number;\n author: string;\n date: string;\n body: string;\n}\n\nexport interface NativeWordRevisionMark {\n kind: 'revision';\n id: string;\n revisionId: string;\n revisionKind: EditorRevisionSegment['revisionKind'];\n author?: string;\n date?: string;\n}\n\nexport interface NativeWordImageNode {\n kind: 'image';\n drawingId: string;\n src: string;\n revision?: NativeWordRevisionMark;\n formatRevision?: {\n kind: 'format';\n revisionId: string;\n beforeWidth?: number;\n beforeHeight?: number;\n afterWidth?: number;\n afterHeight?: number;\n author?: string;\n date?: string;\n };\n width?: number;\n height?: number;\n anchoringMode?: EditorImageSegment['anchoringMode'];\n wrap?: EditorImageSegment['wrap'];\n position?: EditorImageSegment['position'];\n}\n\nexport interface NativeWordDrawingNode {\n kind: 'drawing';\n drawingId: string;\n drawingKind: EditorDrawingSegment['drawingKind'];\n text?: string;\n width?: number;\n height?: number;\n anchoringMode?: EditorDrawingSegment['anchoringMode'];\n wrap?: EditorDrawingSegment['wrap'];\n position?: EditorDrawingSegment['position'];\n hasBorder?: boolean;\n hasFill?: boolean;\n isLineOrConnector?: boolean;\n innerTextAlign?: string;\n paragraphs?: NativeWordParagraphNode[];\n}\n\nexport interface NativeWordPageBreakNode {\n kind: 'pageBreak';\n}\n\nexport interface NativeWordFieldNode {\n kind: 'field';\n fieldKind: EditorFieldSegment['fieldKind'];\n instruction: string;\n cachedText?: string;\n format: EditorRunFormat | null;\n}\n\nexport type NativeWordInlineNode =\n | NativeWordTextNode\n | NativeWordImageNode\n | NativeWordDrawingNode\n | NativeWordFieldNode\n | NativeWordPageBreakNode;\n\nexport interface NativeWordParagraphNode {\n kind: 'paragraph';\n paraId: string;\n story: string;\n styleId: string | null;\n format: EditorParagraphFormat | null;\n content: NativeWordInlineNode[];\n}\n\nexport interface NativeWordTableNode {\n kind: 'table';\n tableId: string;\n revision?: NativeWordRevisionMark;\n tableStyleId?: string;\n columnWidths: number[];\n layout?: EditorTableView['layout'];\n borders?: EditorTableBorders;\n rows: NativeWordTableRowNode[];\n}\n\nexport interface NativeWordTableRowNode {\n height?: {\n val: number;\n hRule: 'auto' | 'atLeast' | 'exact';\n };\n isHeader?: boolean;\n cantSplit?: boolean;\n cells: NativeWordTableCellNode[];\n}\n\nexport interface NativeWordTableCellNode {\n blocks: NativeWordBlockNode[];\n paragraphs: NativeWordParagraphNode[];\n gridSpan: number;\n rowSpan?: number;\n vMerge?: EditorTableCellView['vMerge'];\n width?: number;\n margin?: EditorTableCellView['margin'];\n borders?: EditorTableCellView['borders'];\n shading?: EditorTableCellView['shading'];\n verticalAlignment?: EditorTableCellView['verticalAlignment'];\n noWrap?: EditorTableCellView['noWrap'];\n}\n\nexport type NativeWordBlockNode = NativeWordParagraphNode | NativeWordTableNode;\n\nexport interface NativeWordDocument {\n kind: 'word';\n defaults?: EditorDocumentDefaults;\n pageLayout?: EditorPageLayout;\n sections: EditorDocumentView['sections'];\n headers: NativeWordHeaderFooterStory[];\n footers: NativeWordHeaderFooterStory[];\n blocks: NativeWordBlockNode[];\n}\n\nexport interface NativeWordHeaderFooterStory {\n kind: EditorHeaderFooterStoryView['kind'];\n partName: string;\n blocks: NativeWordBlockNode[];\n}\n\nexport interface NativeParagraphLocation {\n paragraph: NativeWordParagraphNode;\n previous: NativeWordParagraphNode | null;\n container: NativeWordBlockNode[];\n index: number;\n insertAfter(paragraph: NativeWordParagraphNode): void;\n remove(): void;\n}\n\nexport interface NativeTableCellLocation {\n table: NativeWordTableNode;\n container: NativeWordBlockNode[];\n tableIndex: number;\n row: NativeWordTableRowNode;\n rowIndex: number;\n cell: NativeWordTableCellNode;\n cellIndex: number;\n columnIndex: number;\n}\n\nexport interface NativeTableLocation {\n table: NativeWordTableNode;\n container: NativeWordBlockNode[];\n tableIndex: number;\n}\n\nexport function createNativeWordDocument(view: EditorDocumentView): NativeWordDocument {\n return {\n kind: 'word',\n ...(view.defaults ? { defaults: view.defaults } : {}),\n ...(view.pageLayout ? { pageLayout: view.pageLayout } : {}),\n sections: view.sections,\n headers: view.headers.map(nativeHeaderFooterStoryFromEditorStory),\n footers: view.footers.map(nativeHeaderFooterStoryFromEditorStory),\n blocks: view.blocks.map((block) => nativeBlockFromEditorBlock(block)),\n };\n}\n\nexport function findNativeParagraph(\n doc: NativeWordDocument,\n paraId: string,\n): NativeWordParagraphNode | null {\n return findNativeParagraphLocation(doc, paraId)?.paragraph ?? null;\n}\n\nexport function previousNativeParagraphId(doc: NativeWordDocument, paraId: string): string | null {\n const location = findNativeParagraphLocation(doc, paraId);\n return location?.previous?.paraId ?? null;\n}\n\nexport function findNativeParagraphLocation(\n doc: NativeWordDocument,\n paraId: string,\n): NativeParagraphLocation | null {\n return (\n findNativeParagraphLocationInBlocks(doc.blocks, paraId) ??\n doc.headers.reduce<NativeParagraphLocation | null>(\n (found, story) => found ?? findNativeParagraphLocationInBlocks(story.blocks, paraId),\n null,\n ) ??\n doc.footers.reduce<NativeParagraphLocation | null>(\n (found, story) => found ?? findNativeParagraphLocationInBlocks(story.blocks, paraId),\n null,\n )\n );\n}\n\nexport function findNativeTableCellLocation(\n doc: NativeWordDocument,\n paraId: string,\n): NativeTableCellLocation | null {\n return (\n findNativeTableCellLocationInBlocks(doc.blocks, paraId) ??\n doc.headers.reduce<NativeTableCellLocation | null>(\n (found, story) => found ?? findNativeTableCellLocationInBlocks(story.blocks, paraId),\n null,\n ) ??\n doc.footers.reduce<NativeTableCellLocation | null>(\n (found, story) => found ?? findNativeTableCellLocationInBlocks(story.blocks, paraId),\n null,\n )\n );\n}\n\nexport function findNativeTableLocation(\n doc: NativeWordDocument,\n tableId: string,\n): NativeTableLocation | null {\n return (\n findNativeTableLocationInBlocks(doc.blocks, tableId) ??\n doc.headers.reduce<NativeTableLocation | null>(\n (found, story) => found ?? findNativeTableLocationInBlocks(story.blocks, tableId),\n null,\n ) ??\n doc.footers.reduce<NativeTableLocation | null>(\n (found, story) => found ?? findNativeTableLocationInBlocks(story.blocks, tableId),\n null,\n )\n );\n}\n\nfunction findNativeTableLocationInBlocks(\n blocks: NativeWordBlockNode[],\n tableId: string,\n): NativeTableLocation | null {\n for (let tableIndex = 0; tableIndex < blocks.length; tableIndex += 1) {\n const block = blocks[tableIndex];\n if (block?.kind !== 'table') continue;\n if (block.tableId === tableId) return { table: block, container: blocks, tableIndex };\n for (const row of block.rows) {\n for (const cell of row.cells) {\n const nested = findNativeTableLocationInBlocks(cell.blocks, tableId);\n if (nested) return nested;\n }\n }\n }\n return null;\n}\n\nfunction findNativeTableCellLocationInBlocks(\n blocks: NativeWordBlockNode[],\n paraId: string,\n): NativeTableCellLocation | null {\n for (let tableIndex = 0; tableIndex < blocks.length; tableIndex += 1) {\n const table = blocks[tableIndex];\n if (table?.kind !== 'table') continue;\n for (let rowIndex = 0; rowIndex < table.rows.length; rowIndex += 1) {\n const row = table.rows[rowIndex]!;\n let columnIndex = 0;\n for (let cellIndex = 0; cellIndex < row.cells.length; cellIndex += 1) {\n const cell = row.cells[cellIndex]!;\n const nested = findNativeTableCellLocationInBlocks(cell.blocks, paraId);\n if (nested) return nested;\n if (cell.blocks.some((block) => block.kind === 'paragraph' && block.paraId === paraId)) {\n return { table, container: blocks, tableIndex, row, rowIndex, cell, cellIndex, columnIndex };\n }\n columnIndex += Math.max(1, cell.gridSpan);\n }\n }\n }\n return null;\n}\n\nfunction findNativeParagraphLocationInBlocks(\n blocks: NativeWordBlockNode[],\n paraId: string,\n): NativeParagraphLocation | null {\n for (let index = 0; index < blocks.length; index += 1) {\n const block = blocks[index];\n if (block?.kind === 'paragraph' && block.paraId === paraId) {\n const previousBlock = blocks[index - 1];\n return {\n paragraph: block,\n previous: previousBlock?.kind === 'paragraph' ? previousBlock : null,\n container: blocks,\n index,\n insertAfter(paragraph) {\n blocks.splice(index + 1, 0, paragraph);\n },\n remove() {\n blocks.splice(index, 1);\n },\n };\n }\n if (block?.kind === 'table') {\n const tableLocation = findTableParagraphLocation(block, paraId);\n if (tableLocation) return tableLocation;\n }\n }\n return null;\n}\n\nexport function allNativeParagraphs(doc: NativeWordDocument): NativeWordParagraphNode[] {\n return [\n ...collectNativeParagraphsFromBlocks(doc.blocks),\n ...doc.headers.flatMap((story) => collectNativeParagraphsFromBlocks(story.blocks)),\n ...doc.footers.flatMap((story) => collectNativeParagraphsFromBlocks(story.blocks)),\n ];\n}\n\nfunction collectNativeParagraphsFromBlocks(blocks: NativeWordBlockNode[]): NativeWordParagraphNode[] {\n return blocks.flatMap((block) => {\n if (block.kind === 'paragraph') return [block];\n return block.rows.flatMap((row) => row.cells.flatMap((cell) => collectNativeParagraphsFromBlocks(cell.blocks)));\n });\n}\n\nexport function nativeParagraphText(paragraph: NativeWordParagraphNode): string {\n return paragraph.content\n .map((child) => {\n if (child.kind === 'text') return child.text;\n if (child.kind === 'field') return child.cachedText ?? '\\uFFFC';\n if (child.kind === 'drawing' && child.text) return child.text;\n return '\\uFFFC';\n })\n .join('');\n}\n\nexport function createNativeParaId(doc: NativeWordDocument): string {\n const seen = new Set(allNativeParagraphs(doc).map((paragraph) => paragraph.paraId).filter(Boolean));\n let paraId = '';\n do {\n paraId = Math.floor(Math.random() * 0xffffffff)\n .toString(16)\n .toUpperCase()\n .padStart(8, '0');\n } while (!paraId || seen.has(paraId));\n return paraId;\n}\n\nfunction nativeBlockFromEditorBlock(block: EditorBlockView): NativeWordBlockNode {\n if (block.type === 'table') {\n return {\n kind: 'table',\n tableId: block.tableId,\n ...(block.tableStyleId ? { tableStyleId: block.tableStyleId } : {}),\n columnWidths: block.columnWidths,\n ...(block.layout ? { layout: block.layout } : {}),\n ...(block.borders ? { borders: block.borders } : {}),\n rows: block.rows.map((row) => ({\n ...(row.height ? { height: row.height } : {}),\n ...(row.isHeader ? { isHeader: true } : {}),\n ...(row.cantSplit ? { cantSplit: true } : {}),\n cells: row.cells.map((cell) => nativeTableCellFromEditorCell(cell)),\n })),\n };\n }\n return nativeParagraphFromEditorParagraph(block);\n}\n\nfunction nativeHeaderFooterStoryFromEditorStory(\n story: EditorHeaderFooterStoryView,\n): NativeWordHeaderFooterStory {\n return {\n kind: story.kind,\n partName: story.partName,\n blocks: story.blocks.map((block) => nativeBlockFromEditorBlock(block)),\n };\n}\n\nfunction nativeTableCellFromEditorCell(cell: EditorTableCellView): NativeWordTableCellNode {\n const cellBlocks = cell.blocks ?? cell.paragraphs;\n const blocks = cellBlocks.map((block) => nativeBlockFromEditorBlock(block));\n const nativeCell: NativeWordTableCellNode = {\n gridSpan: cell.gridSpan,\n blocks,\n paragraphs: collectNativeParagraphsFromBlocks(blocks),\n };\n if (cell.rowSpan !== undefined) nativeCell.rowSpan = cell.rowSpan;\n if (cell.vMerge !== undefined) nativeCell.vMerge = cell.vMerge;\n if (cell.width !== undefined) nativeCell.width = cell.width;\n if (cell.margin !== undefined) nativeCell.margin = cell.margin;\n if (cell.borders !== undefined) nativeCell.borders = cell.borders;\n if (cell.shading !== undefined) nativeCell.shading = cell.shading;\n if (cell.verticalAlignment !== undefined) nativeCell.verticalAlignment = cell.verticalAlignment;\n if (cell.noWrap !== undefined) nativeCell.noWrap = cell.noWrap;\n return nativeCell;\n}\n\nfunction nativeParagraphFromEditorParagraph(paragraph: EditorParagraphView): NativeWordParagraphNode {\n const commentSpans = paragraph.spans.filter((span): span is EditorCommentSpan => span.kind === 'comment');\n return {\n kind: 'paragraph',\n paraId: paragraph.paraId,\n story: paragraph.story,\n styleId: paragraph.styleId ?? null,\n format: paragraph.format ?? null,\n content: paragraph.segments.flatMap((segment): NativeWordInlineNode[] => {\n if (segment.kind === 'text') return textNodeFromSegment(segment, commentSpans);\n if (segment.kind === 'revision') return textNodeFromRevisionSegment(segment);\n if (segment.kind === 'field') return fieldNodeFromSegment(segment);\n if (segment.kind === 'image') return imageNodeFromSegment(segment);\n if (segment.kind === 'drawing') return drawingNodeFromSegment(segment);\n if (segment.kind === 'placeholder' && segment.placeholderKind === 'pageBreak') {\n return [{ kind: 'pageBreak' }];\n }\n return [];\n }),\n };\n}\n\nfunction fieldNodeFromSegment(segment: EditorFieldSegment): NativeWordFieldNode[] {\n return [\n {\n kind: 'field',\n fieldKind: segment.fieldKind,\n instruction: segment.instruction,\n ...(segment.cachedText !== undefined ? { cachedText: segment.cachedText } : {}),\n format: segment.format ?? null,\n },\n ];\n}\n\nfunction textNodeFromRevisionSegment(segment: EditorRevisionSegment): NativeWordTextNode[] {\n if (segment.text.length === 0) return [];\n return [\n {\n kind: 'text',\n text: segment.text,\n format: segment.format ?? null,\n marks: [\n {\n kind: 'revision',\n id: `revision:${segment.revisionId}`,\n revisionId: segment.revisionId,\n revisionKind: segment.revisionKind,\n author: segment.author,\n date: segment.date,\n },\n ],\n },\n ];\n}\n\nfunction textNodeFromSegment(\n segment: EditorTextSegment,\n commentSpans: EditorCommentSpan[],\n): NativeWordTextNode[] {\n if (segment.text.length === 0) return [];\n const nodes: NativeWordTextNode[] = [];\n let cursor = segment.from;\n for (const span of commentSpans) {\n const from = Math.max(segment.from, span.from);\n const to = Math.min(segment.to, span.to);\n if (to <= from) continue;\n if (from > cursor) {\n nodes.push({\n kind: 'text',\n text: segment.text.slice(cursor - segment.from, from - segment.from),\n format: segment.format ?? null,\n ...(segment.hyperlink ? { hyperlink: { ...segment.hyperlink } } : {}),\n });\n }\n nodes.push({\n kind: 'text',\n text: segment.text.slice(from - segment.from, to - segment.from),\n format: segment.format ?? null,\n ...(segment.hyperlink ? { hyperlink: { ...segment.hyperlink } } : {}),\n marks: [\n {\n kind: 'comment',\n id: span.id,\n commentId: span.commentId,\n author: span.author,\n date: span.date,\n body: span.body,\n },\n ],\n });\n cursor = to;\n }\n if (cursor < segment.to) {\n nodes.push({\n kind: 'text',\n text: segment.text.slice(cursor - segment.from),\n format: segment.format ?? null,\n ...(segment.hyperlink ? { hyperlink: { ...segment.hyperlink } } : {}),\n });\n }\n return nodes;\n}\n\nfunction imageNodeFromSegment(segment: EditorImageSegment): NativeWordImageNode[] {\n return [\n {\n kind: 'image',\n drawingId: segment.drawingId,\n src: segment.src,\n ...(segment.width !== undefined ? { width: segment.width } : {}),\n ...(segment.height !== undefined ? { height: segment.height } : {}),\n ...(segment.anchoringMode !== undefined ? { anchoringMode: segment.anchoringMode } : {}),\n ...(segment.wrap !== undefined ? { wrap: segment.wrap } : {}),\n ...(segment.position !== undefined ? { position: segment.position } : {}),\n },\n ];\n}\n\nfunction drawingNodeFromSegment(segment: EditorDrawingSegment): NativeWordDrawingNode[] {\n const node: NativeWordDrawingNode = {\n kind: 'drawing',\n drawingId: segment.drawingId,\n drawingKind: segment.drawingKind,\n };\n if (segment.text !== undefined) node.text = segment.text;\n if (segment.width !== undefined) node.width = segment.width;\n if (segment.height !== undefined) node.height = segment.height;\n if (segment.anchoringMode !== undefined) node.anchoringMode = segment.anchoringMode;\n if (segment.wrap !== undefined) node.wrap = segment.wrap;\n if (segment.position !== undefined) node.position = segment.position;\n if (segment.hasBorder !== undefined) node.hasBorder = segment.hasBorder;\n if (segment.hasFill !== undefined) node.hasFill = segment.hasFill;\n if (segment.isLineOrConnector !== undefined) node.isLineOrConnector = segment.isLineOrConnector;\n if (segment.innerTextAlign !== undefined) node.innerTextAlign = segment.innerTextAlign;\n if (segment.paragraphs && segment.paragraphs.length > 0) {\n node.paragraphs = segment.paragraphs.map((paragraph) => nativeParagraphFromEditorParagraph(paragraph));\n }\n return [node];\n}\n\nfunction findTableParagraphLocation(\n table: NativeWordTableNode,\n paraId: string,\n): NativeParagraphLocation | null {\n for (const row of table.rows) {\n for (const cell of row.cells) {\n const paragraphIndex = cell.paragraphs.findIndex((paragraph) => paragraph.paraId === paraId);\n const blockIndex = cell.blocks.findIndex((block) => block.kind === 'paragraph' && block.paraId === paraId);\n if (paragraphIndex >= 0 && blockIndex >= 0) {\n return {\n paragraph: cell.paragraphs[paragraphIndex]!,\n previous: cell.paragraphs[paragraphIndex - 1] ?? null,\n container: cell.blocks,\n index: blockIndex,\n insertAfter(paragraph) {\n cell.paragraphs.splice(paragraphIndex + 1, 0, paragraph);\n cell.blocks.splice(blockIndex + 1, 0, paragraph);\n },\n remove() {\n cell.paragraphs.splice(paragraphIndex, 1);\n cell.blocks.splice(blockIndex, 1);\n },\n };\n }\n }\n }\n return null;\n}\n","import type { EditorNumberingFormat } from './model.js';\nimport {\n allNativeParagraphs,\n findNativeParagraphLocation,\n type NativeWordDocument,\n type NativeWordParagraphNode,\n} from './native-model.js';\n\nexport type NativeWordListType = 'bullet' | 'numbered';\n\nexport function nativeListType(numbering: EditorNumberingFormat | undefined): NativeWordListType | null {\n if (!numbering) return null;\n return numbering.numFmt === 'bullet' ? 'bullet' : 'numbered';\n}\n\nexport function createNativeListNumbering(\n doc: NativeWordDocument,\n type: NativeWordListType,\n ilvl = 0,\n): EditorNumberingFormat {\n const level = clampListLevel(ilvl);\n return {\n numId: createNativeNumId(doc, type),\n ilvl: level,\n numFmt: type === 'bullet' ? 'bullet' : numberingFormatForLevel(level),\n lvlText: type === 'bullet' ? bulletForLevel(level) : `%${level + 1}.`,\n start: 1,\n };\n}\n\nexport function nativeNumberingAtLevel(\n numbering: EditorNumberingFormat,\n ilvl: number,\n): EditorNumberingFormat {\n const level = clampListLevel(ilvl);\n const type = nativeListType(numbering) ?? 'numbered';\n return {\n ...numbering,\n ilvl: level,\n numFmt: type === 'bullet' ? 'bullet' : numberingFormatForLevel(level),\n lvlText: type === 'bullet' ? bulletForLevel(level) : `%${level + 1}.`,\n start: numbering.start ?? 1,\n };\n}\n\nexport function refreshNativeNumberingLabels(doc: NativeWordDocument): void {\n const counters = new Map<string, number>();\n for (const paragraph of allNativeParagraphs(doc)) {\n const numbering = paragraph.format?.numbering;\n if (!paragraph.format?.hasNumbering || !numbering) continue;\n const key = `${paragraph.story}:${numbering.numId}:${numbering.ilvl}`;\n if (nativeListType(numbering) === 'bullet') {\n numbering.label = normalizeBulletLabel(numbering.lvlText);\n continue;\n }\n const current = (counters.get(key) ?? ((numbering.start ?? 1) - 1)) + 1;\n counters.set(key, current);\n numbering.label = formatNumberingLabel(current, numbering.numFmt, numbering.lvlText);\n }\n}\n\nexport function nativeListIndent(ilvl: number): { left: number; firstLine: number } {\n const level = clampListLevel(ilvl);\n return { left: (level + 1) * 720, firstLine: -360 };\n}\n\nexport function adjacentNativeListNumbering(\n doc: NativeWordDocument,\n paraIds: string[],\n type: NativeWordListType,\n): EditorNumberingFormat | null {\n const selected = new Set(paraIds);\n for (const paraId of paraIds) {\n const location = findNativeParagraphLocation(doc, paraId);\n if (!location) continue;\n const candidates = [location.container[location.index - 1], location.container[location.index + 1]];\n for (const candidate of candidates) {\n if (candidate?.kind !== 'paragraph' || selected.has(candidate.paraId)) continue;\n const numbering = reusableNativeNumbering(candidate, type);\n if (numbering) return { ...numbering };\n }\n }\n return null;\n}\n\nfunction createNativeNumId(doc: NativeWordDocument, type: NativeWordListType): string {\n const used = new Set(\n allNativeParagraphs(doc)\n .map((paragraph) => paragraph.format?.numbering?.numId)\n .filter((value): value is string => !!value),\n );\n let suffix = 1;\n let candidate = '';\n do {\n candidate = `coco-${type}-${suffix}`;\n suffix += 1;\n } while (used.has(candidate));\n return candidate;\n}\n\nfunction reusableNativeNumbering(\n paragraph: NativeWordParagraphNode,\n type: NativeWordListType,\n): EditorNumberingFormat | null {\n const numbering = paragraph.format?.hasNumbering ? paragraph.format.numbering : undefined;\n if (!numbering || nativeListType(numbering) !== type) return null;\n return numbering.numId.startsWith(`coco-${type}-`) ? numbering : null;\n}\n\nfunction clampListLevel(ilvl: number): number {\n return Math.max(0, Math.min(8, Math.round(ilvl)));\n}\n\nfunction bulletForLevel(ilvl: number): string {\n return ['•', '◦', '▪'][ilvl % 3]!;\n}\n\nfunction numberingFormatForLevel(ilvl: number): string {\n return ['decimal', 'lowerLetter', 'lowerRoman'][ilvl % 3]!;\n}\n\nfunction normalizeBulletLabel(lvlText: string | undefined): string {\n const label = lvlText?.replace(/%\\d+/g, '').trim();\n return label || '•';\n}\n\nfunction formatNumberingLabel(value: number, numFmt: string | undefined, lvlText: string | undefined): string {\n const formatted =\n numFmt === 'lowerLetter'\n ? alphaLabel(value, false)\n : numFmt === 'upperLetter'\n ? alphaLabel(value, true)\n : numFmt === 'lowerRoman'\n ? romanLabel(value).toLowerCase()\n : numFmt === 'upperRoman'\n ? romanLabel(value)\n : String(value);\n return lvlText ? lvlText.replace(/%\\d+/g, formatted) : `${formatted}.`;\n}\n\nfunction alphaLabel(value: number, upper: boolean): string {\n let remaining = Math.max(1, value);\n let label = '';\n while (remaining > 0) {\n remaining -= 1;\n label = String.fromCharCode((upper ? 65 : 97) + (remaining % 26)) + label;\n remaining = Math.floor(remaining / 26);\n }\n return label;\n}\n\nfunction romanLabel(value: number): string {\n let remaining = Math.max(1, Math.min(3999, value));\n let label = '';\n const tokens: Array<[number, string]> = [\n [1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'], [100, 'C'], [90, 'XC'],\n [50, 'L'], [40, 'XL'], [10, 'X'], [9, 'IX'], [5, 'V'], [4, 'IV'], [1, 'I'],\n ];\n for (const [amount, token] of tokens) {\n while (remaining >= amount) {\n label += token;\n remaining -= amount;\n }\n }\n return label;\n}\n","import {\n createNativeParaId,\n allNativeParagraphs,\n findNativeParagraph,\n findNativeParagraphLocation,\n findNativeTableCellLocation,\n findNativeTableLocation,\n nativeParagraphText,\n type NativeWordDocument,\n type NativeWordBlockNode,\n type NativeWordInlineNode,\n type NativeWordParagraphNode,\n type NativeWordTableCellNode,\n type NativeWordTableNode,\n type NativeWordTableRowNode,\n} from './native-model.js';\nimport type { EditorHyperlink, EditorNumberingFormat, EditorParagraphFormat, EditorRunFormat, EditorTableBorders } from './model.js';\nimport { nativeListIndent } from './native-numbering.js';\n\nexport type NativeWordChange =\n | {\n kind: 'text';\n op: 'insert' | 'delete' | 'replace';\n paraId: string;\n offset: number;\n text: string;\n deletedText?: string;\n }\n | {\n kind: 'block';\n op: 'split' | 'merge';\n paraId: string;\n newParaId?: string;\n offset?: number;\n }\n | {\n kind: 'structure';\n op: 'delete-range';\n startParaId: string;\n endParaId: string;\n deletedBlockIds: string[];\n }\n | {\n kind: 'structure';\n op: 'insert-range';\n paraId: string;\n insertedBlockIds: string[];\n }\n | {\n kind: 'image';\n op: 'insert' | 'delete' | 'resize' | 'accept' | 'reject';\n paraId: string;\n offset: number;\n drawingId: string;\n src?: string;\n width?: number;\n height?: number;\n revisionId?: string;\n revisionKind?: 'insert' | 'delete' | 'format';\n }\n | {\n kind: 'format';\n op: 'run' | 'accept' | 'reject';\n paraId: string;\n from: number;\n to: number;\n format: Partial<EditorRunFormat>;\n clear?: boolean;\n revisionId?: string;\n revisionKind?: 'format';\n beforeFormat?: Partial<EditorRunFormat> | null;\n }\n | {\n kind: 'format';\n op: 'paragraph';\n paraId: string;\n format: Partial<EditorParagraphFormat>;\n }\n | {\n kind: 'list';\n paraId: string;\n numbering: EditorNumberingFormat | null;\n }\n | {\n kind: 'hyperlink';\n op: 'set' | 'remove';\n paraId: string;\n from: number;\n to: number;\n hyperlink?: EditorHyperlink;\n }\n | {\n kind: 'annotation';\n op: 'insert' | 'delete' | 'update';\n paraId: string;\n from: number;\n to: number;\n commentId: number;\n body?: string;\n parentCommentId?: number;\n }\n | {\n kind: 'revision';\n op: 'insert' | 'delete' | 'accept' | 'reject';\n paraId: string;\n from: number;\n to: number;\n revisionId: string;\n revisionKind: 'insert' | 'delete';\n }\n | {\n kind: 'page-break';\n op: 'insert' | 'delete';\n paraId: string;\n offset: number;\n }\n | {\n kind: 'table';\n op: 'insert-table' | 'delete-table' | 'insert-row' | 'delete-row' | 'insert-column' | 'delete-column' | 'merge-cells' | 'split-cell' | 'format-cell' | 'clear-cell' | 'replace-cell';\n tableId: string;\n rowIndex: number;\n columnIndex: number;\n endColumnIndex?: number;\n endRowIndex?: number;\n format?: {\n backgroundColor?: string | null;\n verticalAlignment?: NativeWordTableCellNode['verticalAlignment'] | null;\n borderColor?: string | null;\n };\n text?: string;\n cellSnapshot?: NativeWordTableCellNode;\n revisionId?: string;\n revisionKind?: 'insert' | 'delete';\n revisionAction?: 'accept' | 'reject';\n beforeTable?: NativeWordTableNode;\n anchorParaId?: string;\n anchorOffset?: number;\n tableSnapshot?: NativeWordTableNode;\n };\n\nexport interface NativePlainTextReplacement {\n changes: NativeWordChange[];\n cursor: { paraId: string; offset: number };\n paragraphIds: string[];\n}\n\nexport interface NativeBlockRangeReplacement {\n changes: NativeWordChange[];\n cursor: { paraId: string; offset: number };\n container: NativeWordBlockNode[];\n startIndex: number;\n beforeBlocks: NativeWordBlockNode[];\n afterBlocks: NativeWordBlockNode[];\n}\n\nexport interface NativeTableEditResult {\n change: NativeWordChange;\n cursor: { paraId: string; offset: number };\n}\n\nexport interface NativeTableCellPoint {\n rowIndex: number;\n columnIndex: number;\n}\n\nexport interface NativeTableCellRange {\n anchor: NativeTableCellPoint;\n focus: NativeTableCellPoint;\n}\n\nexport interface NativeTableRangeEditResult {\n changes: NativeWordChange[];\n cursor: { paraId: string; offset: number };\n}\n\nexport interface NativeTableClipboardCell {\n blocks: NativeWordBlockNode[];\n format: {\n margin?: NativeWordTableCellNode['margin'];\n borders?: NativeWordTableCellNode['borders'];\n shading?: NativeWordTableCellNode['shading'];\n verticalAlignment?: NativeWordTableCellNode['verticalAlignment'];\n noWrap?: NativeWordTableCellNode['noWrap'];\n };\n}\n\nexport type NativeTableStructureOperation =\n | { kind: 'insert-row'; position: 'before' | 'after' }\n | { kind: 'delete-row' }\n | { kind: 'insert-column'; position: 'before' | 'after' }\n | { kind: 'delete-column' };\n\nexport interface NativeTableCellFormatPatch {\n backgroundColor?: string | null;\n verticalAlignment?: NativeWordTableCellNode['verticalAlignment'] | null;\n borderColor?: string | null;\n}\n\nexport function cloneNativeWordBlocks(blocks: readonly NativeWordBlockNode[]): NativeWordBlockNode[] {\n return cloneNativeBlocks(blocks);\n}\n\nexport function nativeTableSupportsStructuralEditing(table: NativeWordTableNode): boolean {\n if (table.rows.length === 0) return false;\n const columnCount = table.rows[0]?.cells.length ?? 0;\n return columnCount > 0 && table.rows.every(\n (row) =>\n row.cells.length === columnCount &&\n row.cells.every(\n (cell) =>\n cell.gridSpan === 1 &&\n (cell.rowSpan === undefined || cell.rowSpan === 1) &&\n cell.vMerge == null,\n ),\n );\n}\n\nexport function nativeInsertTable(\n doc: NativeWordDocument,\n paraId: string,\n offset: number,\n rowCount: number,\n columnCount: number,\n createParaId: () => string = () => createNativeParaId(doc),\n createTableId: () => string = () => freshNativeTableId(doc),\n): NativeBlockRangeReplacement | null {\n const location = findNativeParagraphLocation(doc, paraId);\n if (!location || location.container !== doc.blocks) return null;\n const rows = Math.max(1, Math.min(20, Math.trunc(rowCount)));\n const columns = Math.max(1, Math.min(20, Math.trunc(columnCount)));\n if (!Number.isFinite(rowCount) || !Number.isFinite(columnCount)) return null;\n\n const paragraph = location.paragraph;\n const beforeBlocks = cloneNativeBlocks([paragraph]);\n const splitOffset = Math.max(0, Math.min(offset, nativeParagraphText(paragraph).length));\n const split = splitInlineContentAt(paragraph.content, splitOffset);\n paragraph.content = split.before;\n const trailingParagraph: NativeWordParagraphNode = {\n kind: 'paragraph',\n paraId: createParaId(),\n story: paragraph.story,\n styleId: paragraph.styleId,\n format: paragraph.format ? cloneJson(paragraph.format) : null,\n content: split.after,\n };\n const tableId = createTableId();\n const availableWidth = Math.max(\n 1440,\n (doc.pageLayout?.width ?? 11906) -\n (doc.pageLayout?.margin.left ?? 1440) -\n (doc.pageLayout?.margin.right ?? 1440),\n );\n const columnWidth = Math.max(360, Math.floor(availableWidth / columns));\n const table: NativeWordTableNode = {\n kind: 'table',\n tableId,\n columnWidths: Array.from({ length: columns }, () => columnWidth),\n layout: { width: columnWidth * columns, widthType: 'dxa', alignment: 'left' },\n borders: visibleCellBorders('000000'),\n rows: Array.from({ length: rows }, () => ({\n cells: Array.from({ length: columns }, () => {\n const cellParagraph: NativeWordParagraphNode = {\n kind: 'paragraph',\n paraId: createParaId(),\n story: paragraph.story,\n styleId: null,\n format: null,\n content: [{ kind: 'text', text: '', format: null }],\n };\n return {\n gridSpan: 1,\n width: columnWidth,\n borders: visibleCellBorders('000000'),\n blocks: [cellParagraph],\n paragraphs: [cellParagraph],\n };\n }),\n })),\n };\n const replacement: NativeWordBlockNode[] = [paragraph, table, trailingParagraph];\n location.container.splice(location.index, 1, ...replacement);\n return {\n changes: [{ kind: 'table', op: 'insert-table', tableId, rowIndex: 0, columnIndex: 0 }],\n cursor: { paraId: table.rows[0]!.cells[0]!.paragraphs[0]!.paraId, offset: 0 },\n container: location.container,\n startIndex: location.index,\n beforeBlocks,\n afterBlocks: cloneNativeBlocks(replacement),\n };\n}\n\nexport function nativeDeleteTable(\n doc: NativeWordDocument,\n tableId: string,\n createParaId: () => string = () => createNativeParaId(doc),\n): NativeBlockRangeReplacement | null {\n const location = findNativeTableLocation(doc, tableId);\n if (!location || location.container !== doc.blocks) return null;\n const firstParagraph = location.table.rows[0]?.cells[0]?.paragraphs[0];\n const paragraph: NativeWordParagraphNode = {\n kind: 'paragraph',\n paraId: createParaId(),\n story: firstParagraph?.story ?? 'word/document.xml',\n styleId: null,\n format: null,\n content: [{ kind: 'text', text: '', format: null }],\n };\n const beforeBlocks = cloneNativeBlocks([location.table]);\n location.container.splice(location.tableIndex, 1, paragraph);\n return {\n changes: [{ kind: 'table', op: 'delete-table', tableId, rowIndex: 0, columnIndex: 0 }],\n cursor: { paraId: paragraph.paraId, offset: 0 },\n container: location.container,\n startIndex: location.tableIndex,\n beforeBlocks,\n afterBlocks: cloneNativeBlocks([paragraph]),\n };\n}\n\nexport function nativeEditTableStructure(\n doc: NativeWordDocument,\n paraId: string,\n operation: NativeTableStructureOperation,\n createParaId: () => string = () => createNativeParaId(doc),\n): NativeTableEditResult | null {\n const location = findNativeTableCellLocation(doc, paraId);\n if (!location || !nativeTableSupportsStructuralEditing(location.table)) return null;\n const { table, rowIndex, cellIndex } = location;\n if (operation.kind === 'insert-row') {\n const insertAt = rowIndex + (operation.position === 'after' ? 1 : 0);\n const row = blankTableRow(location.row, createParaId);\n table.rows.splice(insertAt, 0, row);\n return {\n change: { kind: 'table', op: 'insert-row', tableId: table.tableId, rowIndex: insertAt, columnIndex: cellIndex },\n cursor: { paraId: firstCellParagraph(row.cells[cellIndex] ?? row.cells[0]!).paraId, offset: 0 },\n };\n }\n if (operation.kind === 'delete-row') {\n if (table.rows.length <= 1) return null;\n table.rows.splice(rowIndex, 1);\n const nextRow = table.rows[Math.min(rowIndex, table.rows.length - 1)]!;\n return {\n change: { kind: 'table', op: 'delete-row', tableId: table.tableId, rowIndex, columnIndex: cellIndex },\n cursor: { paraId: firstCellParagraph(nextRow.cells[Math.min(cellIndex, nextRow.cells.length - 1)]!).paraId, offset: 0 },\n };\n }\n if (operation.kind === 'insert-column') {\n const insertAt = cellIndex + (operation.position === 'after' ? 1 : 0);\n for (const row of table.rows) {\n const template = row.cells[Math.min(cellIndex, row.cells.length - 1)]!;\n row.cells.splice(insertAt, 0, blankTableCell(template, createParaId));\n }\n const width = table.columnWidths[Math.min(cellIndex, table.columnWidths.length - 1)] ?? 0;\n table.columnWidths.splice(insertAt, 0, width);\n const targetRow = table.rows[rowIndex]!;\n return {\n change: { kind: 'table', op: 'insert-column', tableId: table.tableId, rowIndex, columnIndex: insertAt },\n cursor: { paraId: firstCellParagraph(targetRow.cells[insertAt]!).paraId, offset: 0 },\n };\n }\n if (table.rows[0]!.cells.length <= 1) return null;\n for (const row of table.rows) row.cells.splice(cellIndex, 1);\n if (cellIndex < table.columnWidths.length) table.columnWidths.splice(cellIndex, 1);\n const targetRow = table.rows[rowIndex]!;\n const nextCell = targetRow.cells[Math.min(cellIndex, targetRow.cells.length - 1)]!;\n return {\n change: { kind: 'table', op: 'delete-column', tableId: table.tableId, rowIndex, columnIndex: cellIndex },\n cursor: { paraId: firstCellParagraph(nextCell).paraId, offset: 0 },\n };\n}\n\nexport function nativeSetTableCellFormat(\n doc: NativeWordDocument,\n paraId: string,\n patch: NativeTableCellFormatPatch,\n): NativeTableEditResult | null {\n const location = findNativeTableCellLocation(doc, paraId);\n if (!location) return null;\n const before = JSON.stringify({\n shading: location.cell.shading,\n verticalAlignment: location.cell.verticalAlignment,\n borders: location.cell.borders,\n });\n const changeFormat: NonNullable<Extract<NativeWordChange, { kind: 'table' }>['format']> = {};\n if (patch.backgroundColor !== undefined) {\n const color = normalizeTableColor(patch.backgroundColor);\n if (patch.backgroundColor !== null && !color) return null;\n if (color) location.cell.shading = { fill: color, val: 'clear' };\n else delete location.cell.shading;\n changeFormat.backgroundColor = color ? `#${color}` : null;\n }\n if (patch.verticalAlignment !== undefined) {\n if (patch.verticalAlignment) location.cell.verticalAlignment = patch.verticalAlignment;\n else delete location.cell.verticalAlignment;\n changeFormat.verticalAlignment = patch.verticalAlignment ?? null;\n }\n if (patch.borderColor !== undefined) {\n const color = normalizeTableColor(patch.borderColor);\n if (patch.borderColor !== null && !color) return null;\n location.cell.borders = color ? visibleCellBorders(color) : hiddenCellBorders();\n changeFormat.borderColor = color ? `#${color}` : null;\n }\n const after = JSON.stringify({\n shading: location.cell.shading,\n verticalAlignment: location.cell.verticalAlignment,\n borders: location.cell.borders,\n });\n if (before === after) return null;\n return {\n change: {\n kind: 'table',\n op: 'format-cell',\n tableId: location.table.tableId,\n rowIndex: location.rowIndex,\n columnIndex: location.columnIndex,\n format: changeFormat,\n },\n cursor: { paraId, offset: 0 },\n };\n}\n\nexport function nativeTableCellsInRange(\n table: NativeWordTableNode,\n range: NativeTableCellRange,\n): Array<{ cell: NativeWordTableCellNode; rowIndex: number; columnIndex: number }> {\n const startRow = Math.max(0, Math.min(range.anchor.rowIndex, range.focus.rowIndex));\n const endRow = Math.min(table.rows.length - 1, Math.max(range.anchor.rowIndex, range.focus.rowIndex));\n const startColumn = Math.max(0, Math.min(range.anchor.columnIndex, range.focus.columnIndex));\n const endColumn = Math.max(range.anchor.columnIndex, range.focus.columnIndex);\n const cells: Array<{ cell: NativeWordTableCellNode; rowIndex: number; columnIndex: number }> = [];\n for (let rowIndex = startRow; rowIndex <= endRow; rowIndex += 1) {\n const row = table.rows[rowIndex];\n if (!row) continue;\n let columnIndex = 0;\n for (const cell of row.cells) {\n const span = Math.max(1, cell.gridSpan);\n const cellEnd = columnIndex + span - 1;\n if (columnIndex <= endColumn && cellEnd >= startColumn) cells.push({ cell, rowIndex, columnIndex });\n columnIndex += span;\n }\n }\n return cells;\n}\n\nexport function nativeMergeTableCells(\n doc: NativeWordDocument,\n tableId: string,\n range: NativeTableCellRange,\n): { change: NativeWordChange; cursor: { paraId: string; offset: number } } | null {\n const location = findNativeTableLocation(doc, tableId);\n if (!location) return null;\n const startRow = Math.min(range.anchor.rowIndex, range.focus.rowIndex);\n const endRow = Math.max(range.anchor.rowIndex, range.focus.rowIndex);\n const startColumn = Math.min(range.anchor.columnIndex, range.focus.columnIndex);\n const endColumn = Math.max(range.anchor.columnIndex, range.focus.columnIndex);\n if (startRow < 0 || startRow >= location.table.rows.length || endRow >= location.table.rows.length) return null;\n if (startRow !== endRow && startColumn !== endColumn) return null;\n const row = location.table.rows[startRow];\n if (!row) return null;\n if (startRow !== endRow) {\n const selected = location.table.rows.slice(startRow, endRow + 1).map((candidate) => candidate.cells[startColumn]);\n if (selected.some((cell) => !cell || cell.gridSpan !== 1 || cell.vMerge != null)) return null;\n const selectedCells = selected as NativeWordTableCellNode[];\n const first = selectedCells[0]!;\n const mergedBlocks = selectedCells.flatMap((cell) => cell.blocks.map(cloneJson));\n const mergedParagraphs = mergedBlocks.flatMap((block) => block.kind === 'paragraph' ? [block] : collectParagraphs([block]));\n first.blocks = mergedBlocks;\n first.paragraphs = mergedParagraphs;\n first.rowSpan = selectedCells.length;\n first.vMerge = 'restart';\n for (const cell of selectedCells.slice(1)) {\n const paragraph = cell!.paragraphs[0];\n if (paragraph) paragraph.content = [{ kind: 'text', text: '', format: null }];\n cell!.blocks = paragraph ? [paragraph] : [];\n cell!.paragraphs = paragraph ? [paragraph] : [];\n cell!.rowSpan = undefined;\n cell!.vMerge = 'continue';\n }\n return {\n change: { kind: 'table', op: 'merge-cells', tableId, rowIndex: startRow, columnIndex: startColumn, endRowIndex: endRow },\n cursor: { paraId: first.paragraphs[0]!.paraId, offset: 0 },\n };\n }\n if (startColumn === endColumn) return null;\n const cells = nativeTableCellsInRange(location.table, range)\n .filter((item) => item.rowIndex === startRow);\n if (cells.length < 2 || cells.some((item) => item.cell.gridSpan !== 1 || item.cell.vMerge != null)) return null;\n const first = cells[0]!;\n const last = cells[cells.length - 1]!;\n if (first.columnIndex !== startColumn || last.columnIndex !== endColumn || cells.length !== endColumn - startColumn + 1) return null;\n const mergedBlocks = cells.flatMap(({ cell }) => cell.blocks.map(cloneJson));\n const mergedParagraphs = mergedBlocks.flatMap((block) => block.kind === 'paragraph' ? [block] : collectParagraphs([block]));\n first.cell.blocks = mergedBlocks;\n first.cell.paragraphs = mergedParagraphs;\n first.cell.gridSpan = cells.length;\n const firstIndex = row.cells.indexOf(first.cell);\n if (firstIndex < 0) return null;\n row.cells.splice(firstIndex, cells.length, first.cell);\n return {\n change: {\n kind: 'table',\n op: 'merge-cells',\n tableId,\n rowIndex: startRow,\n columnIndex: startColumn,\n endColumnIndex: endColumn,\n },\n cursor: { paraId: first.cell.paragraphs[0]!.paraId, offset: 0 },\n };\n}\n\nexport function nativeSplitTableCell(\n doc: NativeWordDocument,\n tableId: string,\n rowIndex: number,\n columnIndex: number,\n createParaId: () => string = () => createNativeParaId(doc),\n): { change: NativeWordChange; cursor: { paraId: string; offset: number } } | null {\n const location = findNativeTableLocation(doc, tableId);\n const row = location?.table.rows[rowIndex];\n if (!location || !row) return null;\n let logicalColumn = 0;\n const cellIndex = row.cells.findIndex((cell) => {\n const matches = logicalColumn === columnIndex;\n logicalColumn += Math.max(1, cell.gridSpan);\n return matches;\n });\n const cell = cellIndex >= 0 ? row.cells[cellIndex] : null;\n if (!cell) return null;\n if (cell.vMerge === 'restart' && (cell.rowSpan ?? 1) > 1) {\n const endRowIndex = rowIndex + (cell.rowSpan ?? 1) - 1;\n if (endRowIndex >= location.table.rows.length) return null;\n const selected = location.table.rows.slice(rowIndex, endRowIndex + 1).map((candidate) => candidate.cells[columnIndex]);\n if (selected.length !== cell.rowSpan || selected.some((candidate, index) => {\n if (!candidate || candidate.gridSpan !== 1) return true;\n return index === 0 ? candidate.vMerge !== 'restart' : candidate.vMerge !== 'continue';\n })) return null;\n cell.rowSpan = undefined;\n cell.vMerge = undefined;\n for (const candidate of selected.slice(1)) {\n candidate!.rowSpan = undefined;\n candidate!.vMerge = undefined;\n }\n return {\n change: { kind: 'table', op: 'split-cell', tableId, rowIndex, columnIndex, endRowIndex },\n cursor: { paraId: cell.paragraphs[0]!.paraId, offset: 0 },\n };\n }\n if (cell.gridSpan <= 1 || cell.vMerge != null || cell.rowSpan && cell.rowSpan > 1) return null;\n const span = cell.gridSpan;\n cell.gridSpan = 1;\n const blanks = Array.from({ length: span - 1 }, () => blankTableCell(cell, createParaId));\n row.cells.splice(cellIndex + 1, 0, ...blanks);\n return {\n change: { kind: 'table', op: 'split-cell', tableId, rowIndex, columnIndex },\n cursor: { paraId: cell.paragraphs[0]!.paraId, offset: 0 },\n };\n}\n\nexport function nativeSetTableCellRangeFormat(\n doc: NativeWordDocument,\n tableId: string,\n range: NativeTableCellRange,\n patch: NativeTableCellFormatPatch,\n): NativeTableRangeEditResult | null {\n const location = findNativeTableLocation(doc, tableId);\n if (!location) return null;\n const changes: NativeWordChange[] = [];\n let cursor: { paraId: string; offset: number } | null = null;\n for (const { cell } of nativeTableCellsInRange(location.table, range)) {\n const paraId = firstCellParagraph(cell).paraId;\n cursor ??= { paraId, offset: 0 };\n const result = nativeSetTableCellFormat(doc, paraId, patch);\n if (result) changes.push(result.change);\n }\n return cursor && changes.length > 0 ? { changes, cursor } : null;\n}\n\nexport function nativeClearTableCellRange(\n doc: NativeWordDocument,\n tableId: string,\n range: NativeTableCellRange,\n): NativeTableRangeEditResult | null {\n const location = findNativeTableLocation(doc, tableId);\n if (!location) return null;\n const changes: NativeWordChange[] = [];\n let cursor: { paraId: string; offset: number } | null = null;\n for (const { cell, rowIndex, columnIndex } of nativeTableCellsInRange(location.table, range)) {\n const paragraph = firstCellParagraph(cell);\n cursor ??= { paraId: paragraph.paraId, offset: 0 };\n const alreadyEmpty = cell.blocks.length === 1 && paragraph.content.length === 1 &&\n paragraph.content[0]?.kind === 'text' && paragraph.content[0].text.length === 0;\n if (alreadyEmpty) continue;\n paragraph.content = [{ kind: 'text', text: '', format: null }];\n cell.blocks = [paragraph];\n cell.paragraphs = [paragraph];\n changes.push({\n kind: 'table',\n op: 'clear-cell',\n tableId,\n rowIndex,\n columnIndex,\n });\n }\n return cursor && changes.length > 0 ? { changes, cursor } : null;\n}\n\nexport function nativeReplaceTableCellRangeText(\n doc: NativeWordDocument,\n tableId: string,\n anchor: NativeTableCellPoint,\n values: readonly (readonly string[])[],\n): NativeTableRangeEditResult | null {\n const location = findNativeTableLocation(doc, tableId);\n if (!location || values.length === 0 || values.every((row) => row.length === 0)) return null;\n const rowCount = values.length;\n const columnCount = Math.max(0, ...values.map((row) => row.length));\n const range = {\n anchor,\n focus: {\n rowIndex: anchor.rowIndex + rowCount - 1,\n columnIndex: anchor.columnIndex + columnCount - 1,\n },\n };\n const changes: NativeWordChange[] = [];\n let cursor: { paraId: string; offset: number } | null = null;\n for (const { cell, rowIndex, columnIndex } of nativeTableCellsInRange(location.table, range)) {\n const value = values[rowIndex - anchor.rowIndex]?.[columnIndex - anchor.columnIndex];\n if (value === undefined) continue;\n const paragraph = firstCellParagraph(cell);\n cursor ??= { paraId: paragraph.paraId, offset: value.length };\n const existing = cell.paragraphs.map((candidate) => nativeParagraphText(candidate)).join('\\n');\n if (existing === value && cell.blocks.length === 1) continue;\n const format = paragraph.content.find((child) => child.kind === 'text')?.format ?? null;\n paragraph.content = [{ kind: 'text', text: value, format: format ? cloneJson(format) : null }];\n cell.blocks = [paragraph];\n cell.paragraphs = [paragraph];\n changes.push({ kind: 'table', op: 'replace-cell', tableId, rowIndex, columnIndex, text: value });\n }\n return cursor && changes.length > 0 ? { changes, cursor } : null;\n}\n\nexport function nativeReplaceTableCellRangeContent(\n doc: NativeWordDocument,\n tableId: string,\n anchor: NativeTableCellPoint,\n values: readonly (readonly (NativeTableClipboardCell | null)[])[],\n): NativeTableRangeEditResult | null {\n const location = findNativeTableLocation(doc, tableId);\n if (!location || values.length === 0 || values.every((row) => row.length === 0)) return null;\n const columnCount = Math.max(0, ...values.map((row) => row.length));\n const range = {\n anchor,\n focus: {\n rowIndex: anchor.rowIndex + values.length - 1,\n columnIndex: anchor.columnIndex + columnCount - 1,\n },\n };\n const changes: NativeWordChange[] = [];\n let cursor: { paraId: string; offset: number } | null = null;\n for (const { cell, rowIndex, columnIndex } of nativeTableCellsInRange(location.table, range)) {\n const value = values[rowIndex - anchor.rowIndex]?.[columnIndex - anchor.columnIndex];\n if (!value) continue;\n const blocks = cloneClipboardBlocksWithFreshIds(doc, value.blocks);\n const paragraphs = collectParagraphs(blocks);\n if (paragraphs.length === 0) continue;\n cell.blocks = blocks;\n cell.paragraphs = paragraphs;\n assignOptionalCellFormat(cell, 'margin', value.format.margin);\n assignOptionalCellFormat(cell, 'borders', value.format.borders);\n assignOptionalCellFormat(cell, 'shading', value.format.shading);\n assignOptionalCellFormat(cell, 'verticalAlignment', value.format.verticalAlignment);\n assignOptionalCellFormat(cell, 'noWrap', value.format.noWrap);\n cursor ??= { paraId: paragraphs[0]!.paraId, offset: nativeParagraphText(paragraphs[0]!).length };\n changes.push({ kind: 'table', op: 'replace-cell', tableId, rowIndex, columnIndex, cellSnapshot: cloneJson(cell) });\n }\n return cursor && changes.length > 0 ? { changes, cursor } : null;\n}\n\nfunction assignOptionalCellFormat<Key extends 'margin' | 'borders' | 'shading' | 'verticalAlignment' | 'noWrap'>(\n cell: NativeWordTableCellNode,\n key: Key,\n value: NativeWordTableCellNode[Key],\n): void {\n if (value === undefined) delete cell[key];\n else cell[key] = cloneJson(value) as NativeWordTableCellNode[Key];\n}\n\nfunction normalizeTableColor(color: string | null): string | null {\n if (color === null) return null;\n const normalized = color.trim().replace(/^#/, '').toUpperCase();\n return /^[0-9A-F]{6}$/.test(normalized) ? normalized : null;\n}\n\nfunction visibleCellBorders(color: string): EditorTableBorders {\n const border = { val: 'single', color, size: 4 };\n return { top: { ...border }, right: { ...border }, bottom: { ...border }, left: { ...border } };\n}\n\nfunction hiddenCellBorders(): EditorTableBorders {\n const border = { val: 'nil' };\n return { top: { ...border }, right: { ...border }, bottom: { ...border }, left: { ...border } };\n}\n\nfunction blankTableRow(template: NativeWordTableRowNode, createParaId: () => string): NativeWordTableRowNode {\n const { cells, ...format } = template;\n return { ...cloneJson(format), cells: cells.map((cell) => blankTableCell(cell, createParaId)) };\n}\n\nfunction blankTableCell(template: NativeWordTableCellNode, createParaId: () => string): NativeWordTableCellNode {\n const { blocks: _blocks, paragraphs: _paragraphs, ...format } = template;\n const source = firstCellParagraph(template);\n const paragraph: NativeWordParagraphNode = {\n kind: 'paragraph',\n paraId: createParaId(),\n story: source.story,\n styleId: source.styleId,\n format: source.format ? cloneJson(source.format) : null,\n content: [{ kind: 'text', text: '', format: null }],\n };\n return { ...cloneJson(format), gridSpan: 1, blocks: [paragraph], paragraphs: [paragraph] };\n}\n\nfunction firstCellParagraph(cell: NativeWordTableCellNode): NativeWordParagraphNode {\n const paragraph = cell.paragraphs[0];\n if (!paragraph) throw new Error('Native table cell must contain at least one paragraph');\n return paragraph;\n}\n\nfunction cloneJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nexport function nativeInsertText(\n doc: NativeWordDocument,\n paraId: string,\n offset: number,\n text: string,\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n if (!paragraph || text.length === 0) return null;\n paragraph.content = insertInlineText(paragraph.content, offset, text);\n return { kind: 'text', op: 'insert', paraId, offset, text };\n}\n\nexport function nativeInsertImage(\n doc: NativeWordDocument,\n paraId: string,\n offset: number,\n src: string,\n options: { drawingId?: string; width?: number; height?: number } = {},\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n if (!paragraph || !src) return null;\n const drawingId = options.drawingId ?? createNativeDrawingId(doc);\n const width = positiveImageDimension(options.width);\n const height = positiveImageDimension(options.height);\n const split = splitInlineContentAt(paragraph.content, offset);\n paragraph.content = normalizeTextNodes([\n ...split.before,\n { kind: 'image', drawingId, src, ...(width ? { width } : {}), ...(height ? { height } : {}) },\n ...split.after,\n ]);\n return {\n kind: 'image',\n op: 'insert',\n paraId,\n offset,\n drawingId,\n src,\n ...(width ? { width } : {}),\n ...(height ? { height } : {}),\n };\n}\n\nexport function nativeInsertPageBreak(\n doc: NativeWordDocument,\n paraId: string,\n offset: number,\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n if (!paragraph) return null;\n const boundedOffset = Math.max(0, Math.min(offset, nativeParagraphText(paragraph).length));\n const split = splitInlineContentAt(paragraph.content, boundedOffset);\n paragraph.content = normalizeTextNodes([...split.before, { kind: 'pageBreak' }, ...split.after]);\n return { kind: 'page-break', op: 'insert', paraId, offset: boundedOffset };\n}\n\nexport function nativePageBreakAt(doc: NativeWordDocument, paraId: string, offset: number): boolean {\n const paragraph = findNativeParagraph(doc, paraId);\n if (!paragraph || offset < 0) return false;\n let position = 0;\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n if (offset >= position && offset < position + length) return child.kind === 'pageBreak';\n position += length;\n }\n return false;\n}\n\nexport function nativeRangeContainsPageBreak(\n doc: NativeWordDocument,\n paraId: string,\n from: number,\n to: number,\n): boolean {\n const paragraph = findNativeParagraph(doc, paraId);\n const range = normalizedRange(from, to);\n if (!paragraph || range.from === range.to) return false;\n let position = 0;\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n if (child.kind === 'pageBreak' && range.from < position + length && range.to > position) return true;\n position += length;\n }\n return false;\n}\n\nexport function nativeSetImageSize(\n doc: NativeWordDocument,\n paraId: string,\n drawingId: string,\n size: { width: number; height: number },\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n const image = paragraph?.content.find(\n (child): child is Extract<NativeWordInlineNode, { kind: 'image' }> =>\n child.kind === 'image' && child.drawingId === drawingId,\n );\n const width = positiveImageDimension(size.width);\n const height = positiveImageDimension(size.height);\n if (!paragraph || !image || !width || !height) return null;\n if (image.width === width && image.height === height) return null;\n image.width = width;\n image.height = height;\n let offset = 0;\n for (const child of paragraph.content) {\n if (child === image) break;\n offset += inlineLength(child);\n }\n return { kind: 'image', op: 'resize', paraId, offset, drawingId, width, height };\n}\n\nexport function nativeDeleteBackward(\n doc: NativeWordDocument,\n paraId: string,\n offset: number,\n): NativeWordChange | null {\n const location = findNativeParagraphLocation(doc, paraId);\n if (!location) return null;\n const { paragraph } = location;\n\n if (offset > 0) {\n return deleteInlineBackward(paragraph, offset);\n }\n\n const previous = location.previous;\n if (!previous) return null;\n previous.content = normalizeTextNodes([...previous.content, ...paragraph.content]);\n location.remove();\n return { kind: 'block', op: 'merge', paraId: previous.paraId };\n}\n\nexport function nativeDeleteForward(\n doc: NativeWordDocument,\n paraId: string,\n offset: number,\n): NativeWordChange | null {\n const location = findNativeParagraphLocation(doc, paraId);\n if (!location) return null;\n const { paragraph } = location;\n if (offset < inlineContentLength(paragraph.content)) return deleteInlineAt(paragraph, offset);\n const next = location.container[location.index + 1];\n if (next?.kind !== 'paragraph') return null;\n paragraph.content = normalizeTextNodes([...paragraph.content, ...next.content]);\n location.container.splice(location.index + 1, 1);\n return { kind: 'block', op: 'merge', paraId: paragraph.paraId };\n}\n\nexport function nativeDeleteRange(\n doc: NativeWordDocument,\n paraId: string,\n from: number,\n to: number,\n): NativeWordChange[] {\n const paragraph = findNativeParagraph(doc, paraId);\n const range = normalizedRange(from, to);\n if (!paragraph || range.from === range.to) return [];\n const result = deleteInlineRange(paragraph, range.from, range.to);\n paragraph.content = result.content;\n return result.changes;\n}\n\nexport function nativeDeleteTextRangeAcrossParagraphs(\n doc: NativeWordDocument,\n anchor: { paraId: string; offset: number },\n focus: { paraId: string; offset: number },\n): NativeWordChange[] {\n if (anchor.paraId === focus.paraId) return nativeDeleteRange(doc, anchor.paraId, anchor.offset, focus.offset);\n const anchorLocation = findNativeParagraphLocation(doc, anchor.paraId);\n const focusLocation = findNativeParagraphLocation(doc, focus.paraId);\n if (!anchorLocation || !focusLocation) return [];\n if (anchorLocation.container !== focusLocation.container) return [];\n\n const range =\n anchorLocation.index < focusLocation.index\n ? {\n start: anchorLocation,\n end: focusLocation,\n startOffset: anchor.offset,\n endOffset: focus.offset,\n }\n : {\n start: focusLocation,\n end: anchorLocation,\n startOffset: focus.offset,\n endOffset: anchor.offset,\n };\n\n if (\n range.start.paragraph.content.some((child) => child.kind !== 'text') ||\n range.end.paragraph.content.some((child) => child.kind !== 'text')\n ) {\n return [];\n }\n if (range.start.container.slice(range.start.index, range.end.index + 1).some((block) => block.kind !== 'paragraph')) {\n return [];\n }\n for (let index = range.start.index + 1; index < range.end.index; index += 1) {\n const block = range.start.container[index];\n if (block?.kind !== 'paragraph' || block.content.some((child) => child.kind !== 'text')) return [];\n }\n\n const changes: NativeWordChange[] = [];\n const startText = nativeParagraphText(range.start.paragraph);\n const endText = nativeParagraphText(range.end.paragraph);\n const deleteStartOffset = Math.max(0, Math.min(range.startOffset, startText.length));\n const deleteEndOffset = Math.max(0, Math.min(range.endOffset, endText.length));\n const mergedText = `${startText.slice(0, deleteStartOffset)}${endText.slice(deleteEndOffset)}`;\n\n const removedParagraphs = range.end.index - range.start.index;\n for (let index = range.end.index; index > range.start.index; index -= 1) {\n const block = range.start.container[index];\n if (block?.kind !== 'paragraph') continue;\n if (block === range.end.paragraph && deleteEndOffset < endText.length) {\n changes.push({\n kind: 'text',\n op: 'delete',\n paraId: block.paraId,\n offset: 0,\n text: endText.slice(0, deleteEndOffset),\n });\n } else {\n const text = nativeParagraphText(block);\n if (text.length > 0) {\n changes.push({ kind: 'text', op: 'delete', paraId: block.paraId, offset: 0, text });\n }\n }\n findNativeParagraphLocation(doc, block.paraId)?.remove();\n }\n\n if (deleteStartOffset < startText.length) {\n changes.push({\n kind: 'text',\n op: 'delete',\n paraId: range.start.paragraph.paraId,\n offset: deleteStartOffset,\n text: startText.slice(deleteStartOffset),\n });\n }\n for (let index = 0; index < removedParagraphs; index += 1) {\n changes.push({ kind: 'block', op: 'merge', paraId: range.start.paragraph.paraId });\n }\n\n range.start.paragraph.content = mergedText.length > 0 ? [{ kind: 'text', text: mergedText, format: inferRunFormatAt(range.start.paragraph.content, deleteStartOffset) }] : [];\n return changes;\n}\n\nexport function nativeReplaceBlockRangeAcrossParagraphs(\n doc: NativeWordDocument,\n anchor: { paraId: string; offset: number },\n focus: { paraId: string; offset: number },\n text: string,\n): NativeBlockRangeReplacement | null {\n const anchorLocation = findNativeParagraphLocation(doc, anchor.paraId);\n const focusLocation = findNativeParagraphLocation(doc, focus.paraId);\n if (!anchorLocation || !focusLocation || anchorLocation.container !== doc.blocks || focusLocation.container !== doc.blocks) {\n return null;\n }\n const ordered =\n anchorLocation.index < focusLocation.index ||\n (anchorLocation.index === focusLocation.index && anchor.offset <= focus.offset)\n ? { start: anchorLocation, end: focusLocation, startOffset: anchor.offset, endOffset: focus.offset }\n : { start: focusLocation, end: anchorLocation, startOffset: focus.offset, endOffset: anchor.offset };\n if (ordered.start.index === ordered.end.index) return null;\n if (\n ordered.start.paragraph.content.some((child) => child.kind !== 'text') ||\n ordered.end.paragraph.content.some((child) => child.kind !== 'text')\n ) {\n return null;\n }\n const selectedBlocks = doc.blocks.slice(ordered.start.index, ordered.end.index + 1);\n if (!selectedBlocks.slice(1, -1).some((block) => block.kind === 'table' || block.content.some((child) => child.kind !== 'text'))) {\n return null;\n }\n\n const beforeBlocks = cloneNativeBlocks(selectedBlocks);\n const startTextLength = nativeParagraphText(ordered.start.paragraph).length;\n const endTextLength = nativeParagraphText(ordered.end.paragraph).length;\n const startOffset = Math.max(0, Math.min(ordered.startOffset, startTextLength));\n const endOffset = Math.max(0, Math.min(ordered.endOffset, endTextLength));\n const changes = [\n ...nativeDeleteRange(doc, ordered.end.paragraph.paraId, 0, endOffset),\n ...nativeDeleteRange(doc, ordered.start.paragraph.paraId, startOffset, startTextLength),\n ];\n ordered.start.paragraph.content = normalizeTextNodes([\n ...ordered.start.paragraph.content,\n ...ordered.end.paragraph.content,\n ]);\n doc.blocks.splice(ordered.start.index + 1, ordered.end.index - ordered.start.index);\n if (text.length > 0) {\n const insertion = nativeInsertText(doc, ordered.start.paragraph.paraId, startOffset, text);\n if (insertion) changes.push(insertion);\n }\n changes.push({\n kind: 'structure',\n op: 'delete-range',\n startParaId: ordered.start.paragraph.paraId,\n endParaId: ordered.end.paragraph.paraId,\n deletedBlockIds: selectedBlocks.slice(1).map(nativeBlockId),\n });\n return {\n changes,\n cursor: { paraId: ordered.start.paragraph.paraId, offset: startOffset + text.length },\n container: doc.blocks,\n startIndex: ordered.start.index,\n beforeBlocks,\n afterBlocks: cloneNativeBlocks([ordered.start.paragraph]),\n };\n}\n\nexport function nativeCopyBlockRange(\n doc: NativeWordDocument,\n anchor: { paraId: string; offset: number },\n focus: { paraId: string; offset: number },\n): NativeWordBlockNode[] | null {\n const ordered = orderedTopLevelBlockRange(doc, anchor, focus);\n if (!ordered || (ordered.blocks.length < 2 && !rangeContainsComplexBlock(ordered.blocks))) return null;\n const blocks = cloneNativeBlocks(ordered.blocks);\n const start = blocks[0];\n const end = blocks[blocks.length - 1];\n if (start?.kind !== 'paragraph' || end?.kind !== 'paragraph') return null;\n start.content = splitInlineContentAt(start.content, ordered.startOffset).after;\n end.content = splitInlineContentAt(end.content, ordered.endOffset).before;\n return blocks;\n}\n\nexport function nativeReplaceRangeWithBlocks(\n doc: NativeWordDocument,\n anchor: { paraId: string; offset: number },\n focus: { paraId: string; offset: number },\n clipboardBlocks: readonly NativeWordBlockNode[],\n): NativeBlockRangeReplacement | null {\n if (anchor.paraId !== focus.paraId || clipboardBlocks.length === 0) return null;\n const location = findNativeParagraphLocation(doc, anchor.paraId);\n if (!location || location.container !== doc.blocks) return null;\n const firstClipboard = clipboardBlocks[0];\n const lastClipboard = clipboardBlocks[clipboardBlocks.length - 1];\n if (firstClipboard?.kind !== 'paragraph' || lastClipboard?.kind !== 'paragraph') return null;\n\n const beforeBlocks = cloneNativeBlocks([location.paragraph]);\n const targetLength = nativeParagraphText(location.paragraph).length;\n const from = Math.max(0, Math.min(anchor.offset, focus.offset, targetLength));\n const to = Math.max(from, Math.min(Math.max(anchor.offset, focus.offset), targetLength));\n const targetStart = splitInlineContentAt(location.paragraph.content, from).before;\n const targetEnd = splitInlineContentAt(location.paragraph.content, to).after;\n const inserted = cloneClipboardBlocksWithFreshIds(doc, clipboardBlocks);\n const first = inserted[0];\n const last = inserted[inserted.length - 1];\n if (first?.kind !== 'paragraph' || last?.kind !== 'paragraph') return null;\n\n const replacesEmptyParagraph = targetStart.length === 0 && targetEnd.length === 0;\n if (replacesEmptyParagraph) {\n location.paragraph.styleId = first.styleId;\n location.paragraph.format = first.format ? cloneJson(first.format) : null;\n }\n location.paragraph.content = normalizeTextNodes([...targetStart, ...first.content]);\n let cursor = {\n paraId: location.paragraph.paraId,\n offset: inlineContentLength(location.paragraph.content),\n };\n const replacement: NativeWordBlockNode[] = [location.paragraph];\n if (inserted.length === 1) {\n location.paragraph.content = normalizeTextNodes([...location.paragraph.content, ...targetEnd]);\n } else {\n last.content = normalizeTextNodes([...last.content, ...targetEnd]);\n replacement.push(...inserted.slice(1));\n cursor = { paraId: last.paraId, offset: inlineContentLength(last.content) - inlineContentLength(targetEnd) };\n }\n doc.blocks.splice(location.index, 1, ...replacement);\n const afterBlocks = cloneNativeBlocks(replacement);\n const change: NativeWordChange = {\n kind: 'structure',\n op: 'insert-range',\n paraId: location.paragraph.paraId,\n insertedBlockIds: replacement.slice(1).map(nativeBlockId),\n };\n return {\n changes: [change],\n cursor,\n container: doc.blocks,\n startIndex: location.index,\n beforeBlocks,\n afterBlocks,\n };\n}\n\nexport function nativeReplaceRange(\n doc: NativeWordDocument,\n paraId: string,\n from: number,\n to: number,\n text: string,\n): NativeWordChange[] {\n const range = normalizedRange(from, to);\n const changes = nativeDeleteRange(doc, paraId, range.from, range.to);\n const insert = nativeInsertText(doc, paraId, range.from, text);\n return insert ? [...changes, insert] : changes;\n}\n\nexport function nativeReplaceTextRangeAcrossParagraphs(\n doc: NativeWordDocument,\n anchor: { paraId: string; offset: number },\n focus: { paraId: string; offset: number },\n text: string,\n): NativeWordChange[] {\n if (anchor.paraId === focus.paraId) {\n return nativeReplaceRange(doc, anchor.paraId, anchor.offset, focus.offset, text);\n }\n const anchorLocation = findNativeParagraphLocation(doc, anchor.paraId);\n const focusLocation = findNativeParagraphLocation(doc, focus.paraId);\n if (!anchorLocation || !focusLocation || anchorLocation.container !== focusLocation.container) return [];\n const start = anchorLocation.index < focusLocation.index ? anchor : focus;\n const changes = nativeDeleteTextRangeAcrossParagraphs(doc, anchor, focus);\n if (changes.length === 0 || text.length === 0) return changes;\n const insert = nativeInsertText(doc, start.paraId, start.offset, text);\n return insert ? [...changes, insert] : changes;\n}\n\nexport function nativeReplaceTextRangeWithParagraphs(\n doc: NativeWordDocument,\n anchor: { paraId: string; offset: number },\n focus: { paraId: string; offset: number },\n text: string,\n): NativePlainTextReplacement | null {\n const anchorLocation = findNativeParagraphLocation(doc, anchor.paraId);\n const focusLocation = findNativeParagraphLocation(doc, focus.paraId);\n if (!anchorLocation || !focusLocation || anchorLocation.container !== focusLocation.container) return null;\n const start =\n anchorLocation.index < focusLocation.index ||\n (anchorLocation.index === focusLocation.index && anchor.offset <= focus.offset)\n ? anchor\n : focus;\n const changes = nativeDeleteTextRangeAcrossParagraphs(doc, anchor, focus);\n const paragraph = findNativeParagraph(doc, start.paraId);\n if (!paragraph || paragraph.content.some((child) => child.kind !== 'text')) return null;\n\n const lines = text.replace(/\\r\\n?/g, '\\n').split('\\n');\n const paragraphIds = [start.paraId];\n let currentParaId = start.paraId;\n let insertOffset = Math.max(0, Math.min(start.offset, nativeParagraphText(paragraph).length));\n const firstInsert = nativeInsertText(doc, currentParaId, insertOffset, lines[0] ?? '');\n if (firstInsert) changes.push(firstInsert);\n\n for (let index = 1; index < lines.length; index += 1) {\n const nextParaId = createNativeParaId(doc);\n const split = nativeSplitParagraph(doc, currentParaId, insertOffset + (lines[index - 1]?.length ?? 0), nextParaId);\n if (!split) return null;\n changes.push(split);\n paragraphIds.push(nextParaId);\n currentParaId = nextParaId;\n insertOffset = 0;\n const insert = nativeInsertText(doc, currentParaId, 0, lines[index] ?? '');\n if (insert) changes.push(insert);\n }\n\n return {\n changes,\n cursor: {\n paraId: currentParaId,\n offset: lines.length === 1\n ? insertOffset + (lines[0]?.length ?? 0)\n : (lines[lines.length - 1]?.length ?? 0),\n },\n paragraphIds,\n };\n}\n\nexport function nativeSetRunFormat(\n doc: NativeWordDocument,\n paraId: string,\n from: number,\n to: number,\n format: Partial<EditorRunFormat>,\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n const range = normalizedRange(from, to);\n if (!paragraph || range.from === range.to) return null;\n let position = 0;\n let changed = false;\n const next: NativeWordInlineNode[] = [];\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n if (child.kind !== 'text' || position + length <= range.from || position >= range.to) {\n next.push(child);\n position += length;\n continue;\n }\n const localFrom = Math.max(0, range.from - position);\n const localTo = Math.min(length, range.to - position);\n if (localFrom > 0) next.push({ ...child, text: child.text.slice(0, localFrom) });\n if (localTo > localFrom) {\n next.push({\n ...child,\n text: child.text.slice(localFrom, localTo),\n format: { ...(child.format ?? {}), ...format },\n });\n changed = true;\n }\n if (localTo < length) next.push({ ...child, text: child.text.slice(localTo) });\n position += length;\n }\n if (!changed) return null;\n paragraph.content = normalizeTextNodes(next);\n return { kind: 'format', op: 'run', paraId, from: range.from, to: range.to, format };\n}\n\nexport function nativeAddComment(\n doc: NativeWordDocument,\n paraId: string,\n from: number,\n to: number,\n comment: { commentId: number; author: string; date: string; body: string; parentCommentId?: number; preserveExistingComments?: boolean },\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n const range = normalizedRange(from, to);\n if (!paragraph || range.from === range.to) return null;\n let position = 0;\n let changed = false;\n const next: NativeWordInlineNode[] = [];\n const mark = {\n kind: 'comment' as const,\n id: `comment:${comment.commentId}`,\n commentId: comment.commentId,\n ...(comment.parentCommentId !== undefined ? { parentCommentId: comment.parentCommentId } : {}),\n author: comment.author,\n date: comment.date,\n body: comment.body,\n };\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n if (child.kind !== 'text' || position + length <= range.from || position >= range.to) {\n next.push(child);\n position += length;\n continue;\n }\n const localFrom = Math.max(0, range.from - position);\n const localTo = Math.min(length, range.to - position);\n if (localFrom > 0) next.push({ ...child, text: child.text.slice(0, localFrom) });\n if (localTo > localFrom) {\n const text = child.text.slice(localFrom, localTo);\n if (comment.preserveExistingComments && child.marks?.some((item) => item.kind === 'comment')) {\n next.push({ ...child, text });\n next.push({ ...child, text, marks: [mark, ...(child.marks ?? [])] });\n } else {\n const marks = (child.marks ?? []).filter((item) => item.kind !== 'comment');\n next.push({ ...child, text, marks: [...marks, mark] });\n }\n changed = true;\n }\n if (localTo < length) next.push({ ...child, text: child.text.slice(localTo) });\n position += length;\n }\n if (!changed) return null;\n paragraph.content = normalizeTextNodes(next);\n return {\n kind: 'annotation', op: 'insert', paraId, from: range.from, to: range.to,\n commentId: comment.commentId, body: comment.body, parentCommentId: comment.parentCommentId,\n };\n}\n\nexport function nativeUpdateComment(\n doc: NativeWordDocument,\n commentId: number,\n body: string,\n): NativeWordChange[] {\n const changes: NativeWordChange[] = [];\n for (const paragraph of allNativeParagraphs(doc)) {\n let position = 0;\n let from: number | null = null;\n let to: number | null = null;\n let changed = false;\n const content = paragraph.content.map((child) => {\n const length = inlineLength(child);\n if (child.kind !== 'text') {\n position += length;\n return child;\n }\n const comment = child.marks?.find((mark) => mark.kind === 'comment' && mark.commentId === commentId);\n if (!comment) {\n position += length;\n return child;\n }\n from = from === null ? position : from;\n to = position + length;\n changed = true;\n position += length;\n return {\n ...child,\n marks: child.marks?.map((mark) => mark.kind === 'comment' && mark.commentId === commentId\n ? { ...mark, body }\n : mark),\n };\n });\n if (!changed || from === null || to === null) continue;\n paragraph.content = normalizeTextNodes(content);\n changes.push({ kind: 'annotation', op: 'update', paraId: paragraph.paraId, from, to, commentId, body });\n }\n return changes;\n}\n\nexport function nativeDeleteComment(doc: NativeWordDocument, commentId: number): NativeWordChange[] {\n const changes: NativeWordChange[] = [];\n for (const paragraph of allNativeParagraphs(doc)) {\n let position = 0;\n let from: number | null = null;\n let to: number | null = null;\n let changed = false;\n const content = paragraph.content.map((child) => {\n const length = inlineLength(child);\n if (child.kind !== 'text') {\n position += length;\n return child;\n }\n const hasComment = child.marks?.some((mark) => mark.kind === 'comment' && mark.commentId === commentId) ?? false;\n if (!hasComment) {\n position += length;\n return child;\n }\n from = from === null ? position : from;\n to = position + length;\n changed = true;\n position += length;\n const marks = child.marks?.filter((mark) => !(mark.kind === 'comment' && mark.commentId === commentId));\n return marks && marks.length > 0 ? { ...child, marks } : { ...child, marks: undefined };\n });\n if (!changed || from === null || to === null) continue;\n paragraph.content = normalizeTextNodes(content);\n changes.push({ kind: 'annotation', op: 'delete', paraId: paragraph.paraId, from, to, commentId });\n }\n return changes;\n}\n\nexport function nativeAddRevision(\n doc: NativeWordDocument,\n paraId: string,\n from: number,\n to: number,\n revision: { revisionId: string; revisionKind: 'insert' | 'delete'; author: string; date: string },\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n const range = normalizedRange(from, to);\n if (!paragraph || range.from === range.to) return null;\n let position = 0;\n let changed = false;\n const next: NativeWordInlineNode[] = [];\n const mark = {\n kind: 'revision' as const,\n id: `revision:${revision.revisionId}`,\n revisionId: revision.revisionId,\n revisionKind: revision.revisionKind,\n author: revision.author,\n date: revision.date,\n };\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n if (child.kind !== 'text' || position + length <= range.from || position >= range.to) {\n next.push(child);\n position += length;\n continue;\n }\n const localFrom = Math.max(0, range.from - position);\n const localTo = Math.min(length, range.to - position);\n if (localFrom > 0) next.push({ ...child, text: child.text.slice(0, localFrom) });\n if (localTo > localFrom) {\n const existingRevision = (child.marks ?? []).find(\n (item) => item.kind === 'revision',\n );\n // A pending insertion that is deleted in the same editing session has\n // no net document change. Remove it instead of turning it into a\n // deletion revision; the surrounding transaction still preserves undo.\n if (!(revision.revisionKind === 'delete' && existingRevision?.revisionKind === 'insert')) {\n const marks = (child.marks ?? []).filter((item) => item.kind !== 'revision');\n next.push({ ...child, text: child.text.slice(localFrom, localTo), marks: [...marks, mark] });\n }\n changed = true;\n }\n if (localTo < length) next.push({ ...child, text: child.text.slice(localTo) });\n position += length;\n }\n if (!changed) return null;\n paragraph.content = normalizeTextNodes(next);\n return {\n kind: 'revision',\n op: revision.revisionKind,\n paraId,\n from: range.from,\n to: range.to,\n revisionId: revision.revisionId,\n revisionKind: revision.revisionKind,\n };\n}\n\nexport function nativeResolveRevision(\n doc: NativeWordDocument,\n paraId: string,\n from: number,\n to: number,\n operation: 'accept' | 'reject',\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n const range = normalizedRange(from, to);\n if (!paragraph || range.from === range.to) return null;\n let position = 0;\n let changed = false;\n let revisionId = '';\n let revisionKind: 'insert' | 'delete' = 'insert';\n const next: NativeWordInlineNode[] = [];\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n if (child.kind !== 'text' || position + length <= range.from || position >= range.to) {\n next.push(child);\n position += length;\n continue;\n }\n const localFrom = Math.max(0, range.from - position);\n const localTo = Math.min(length, range.to - position);\n if (localFrom > 0) next.push({ ...child, text: child.text.slice(0, localFrom) });\n if (localTo > localFrom) {\n const selectedText = child.text.slice(localFrom, localTo);\n const revision = (child.marks ?? []).find((mark) => mark.kind === 'revision');\n if (!revision) {\n next.push({ ...child, text: selectedText });\n } else {\n changed = true;\n revisionId = revision.revisionId ?? revision.id.replace(/^revision:/, '');\n revisionKind = revision.revisionKind ?? 'insert';\n const keepText = operation === 'accept'\n ? revisionKind === 'insert'\n : revisionKind === 'delete';\n if (keepText) {\n next.push({\n ...child,\n text: selectedText,\n marks: (child.marks ?? []).filter((mark) => mark.kind !== 'revision'),\n });\n }\n }\n }\n if (localTo < length) next.push({ ...child, text: child.text.slice(localTo) });\n position += length;\n }\n if (!changed) return null;\n paragraph.content = normalizeTextNodes(next);\n return {\n kind: 'revision',\n op: operation,\n paraId,\n from: range.from,\n to: range.to,\n revisionId,\n revisionKind,\n };\n}\n\nexport function nativeResolveFormatRevision(\n doc: NativeWordDocument,\n paraId: string,\n from: number,\n to: number,\n operation: 'accept' | 'reject',\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n const range = normalizedRange(from, to);\n if (!paragraph || range.from === range.to) return null;\n let position = 0;\n let changed = false;\n let revisionId = '';\n const next: NativeWordInlineNode[] = [];\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n if (child.kind !== 'text' || position + length <= range.from || position >= range.to) {\n next.push(child);\n position += length;\n continue;\n }\n const localFrom = Math.max(0, range.from - position);\n const localTo = Math.min(length, range.to - position);\n if (localFrom > 0) next.push({ ...child, text: child.text.slice(0, localFrom) });\n if (localTo > localFrom) {\n const mark = child.formatRevision;\n if (!mark) next.push({ ...child, text: child.text.slice(localFrom, localTo) });\n else {\n revisionId = mark.revisionId;\n changed = true;\n next.push({\n ...child,\n text: child.text.slice(localFrom, localTo),\n format: operation === 'reject' ? (mark.beforeFormat ? { ...mark.beforeFormat } : null) : child.format,\n formatRevision: undefined,\n });\n }\n }\n if (localTo < length) next.push({ ...child, text: child.text.slice(localTo) });\n position += length;\n }\n if (!changed) return null;\n paragraph.content = normalizeTextNodes(next);\n return { kind: 'format', op: operation, paraId, from: range.from, to: range.to, format: {}, revisionId, revisionKind: 'format' };\n}\n\nexport function nativeSetHyperlink(\n doc: NativeWordDocument,\n paraId: string,\n from: number,\n to: number,\n hyperlink: EditorHyperlink | null,\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n const range = normalizedRange(from, to);\n if (!paragraph || range.from === range.to) return null;\n const normalized = hyperlink ? normalizeHyperlink(hyperlink) : null;\n if (hyperlink && !normalized) return null;\n let position = 0;\n let changed = false;\n const next: NativeWordInlineNode[] = [];\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n if (child.kind !== 'text' || position + length <= range.from || position >= range.to) {\n next.push(child);\n position += length;\n continue;\n }\n const localFrom = Math.max(0, range.from - position);\n const localTo = Math.min(length, range.to - position);\n if (localFrom > 0) next.push({ ...child, text: child.text.slice(0, localFrom) });\n if (localTo > localFrom) {\n const selected = { ...child, text: child.text.slice(localFrom, localTo) };\n if (normalized) selected.hyperlink = { ...normalized };\n else delete selected.hyperlink;\n next.push(selected);\n if (!sameJson(child.hyperlink ?? null, normalized)) changed = true;\n }\n if (localTo < length) next.push({ ...child, text: child.text.slice(localTo) });\n position += length;\n }\n if (!changed) return null;\n paragraph.content = normalizeTextNodes(next);\n return {\n kind: 'hyperlink',\n op: normalized ? 'set' : 'remove',\n paraId,\n from: range.from,\n to: range.to,\n ...(normalized ? { hyperlink: normalized } : {}),\n };\n}\n\nexport function nativeSetParagraphFormat(\n doc: NativeWordDocument,\n paraId: string,\n format: Partial<EditorParagraphFormat>,\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n if (!paragraph) return null;\n const current = paragraph.format ?? {};\n paragraph.format = { ...current, ...format };\n if (format.indent) paragraph.format.indent = { ...(current.indent ?? {}), ...format.indent };\n if (format.spacing) paragraph.format.spacing = { ...(current.spacing ?? {}), ...format.spacing };\n return { kind: 'format', op: 'paragraph', paraId, format };\n}\n\nexport function nativeClearRunFormat(\n doc: NativeWordDocument,\n paraId: string,\n from: number,\n to: number,\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n const range = normalizedRange(from, to);\n if (!paragraph || range.from === range.to) return null;\n let position = 0;\n let changed = false;\n const next: NativeWordInlineNode[] = [];\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n if (child.kind !== 'text' || position + length <= range.from || position >= range.to) {\n next.push(child);\n position += length;\n continue;\n }\n const localFrom = Math.max(0, range.from - position);\n const localTo = Math.min(length, range.to - position);\n if (localFrom > 0) next.push({ ...child, text: child.text.slice(0, localFrom) });\n if (localTo > localFrom) {\n next.push({ ...child, text: child.text.slice(localFrom, localTo), format: null });\n if (child.format && Object.keys(child.format).length > 0) changed = true;\n }\n if (localTo < length) next.push({ ...child, text: child.text.slice(localTo) });\n position += length;\n }\n if (!changed) return null;\n paragraph.content = normalizeTextNodes(next);\n return { kind: 'format', op: 'run', paraId, from: range.from, to: range.to, format: {}, clear: true };\n}\n\nexport function nativeSetParagraphList(\n doc: NativeWordDocument,\n paraId: string,\n numbering: EditorNumberingFormat | null,\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n if (!paragraph) return null;\n const current = paragraph.format ?? {};\n if (numbering) {\n paragraph.format = {\n ...current,\n hasNumbering: true,\n numbering: { ...numbering },\n indent: { ...(current.indent ?? {}), ...nativeListIndent(numbering.ilvl) },\n };\n } else {\n const next: EditorParagraphFormat = {\n ...current,\n hasNumbering: false,\n indent: { ...(current.indent ?? {}), left: 0, firstLine: 0 },\n };\n delete next.numbering;\n paragraph.format = next;\n }\n return { kind: 'list', paraId, numbering: numbering ? { ...numbering } : null };\n}\n\nexport function nativeTextRangeIsBold(doc: NativeWordDocument, paraId: string, from: number, to: number): boolean {\n const paragraph = findNativeParagraph(doc, paraId);\n const range = normalizedRange(from, to);\n if (!paragraph || range.from === range.to) return false;\n let position = 0;\n let hasText = false;\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n const overlaps = child.kind === 'text' && position + length > range.from && position < range.to;\n if (overlaps) {\n hasText = true;\n if (child.format?.bold !== true) return false;\n }\n position += length;\n }\n return hasText;\n}\n\nexport function nativeDeleteImage(\n doc: NativeWordDocument,\n paraId: string,\n drawingId: string,\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n if (!paragraph) return null;\n let offset = 0;\n const next: NativeWordInlineNode[] = [];\n let change: NativeWordChange | null = null;\n for (const child of paragraph.content) {\n if (!change && child.kind === 'image' && child.drawingId === drawingId) {\n change = { kind: 'image', op: 'delete', paraId, offset, drawingId };\n } else {\n next.push(child);\n }\n offset += inlineLength(child);\n }\n if (!change) return null;\n paragraph.content = normalizeTextNodes(next);\n return change;\n}\n\nexport function nativeAddFormatRevision(\n doc: NativeWordDocument,\n paraId: string,\n from: number,\n to: number,\n beforeParagraph: NativeWordParagraphNode,\n revision: { revisionId: string; author?: string; date?: string },\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n const range = normalizedRange(from, to);\n if (!paragraph || range.from === range.to) return null;\n let position = 0;\n let changed = false;\n const next: NativeWordInlineNode[] = [];\n const formatAt = (offset: number): EditorRunFormat | null => {\n let beforePosition = 0;\n for (const child of beforeParagraph.content) {\n const length = inlineLength(child);\n if (child.kind === 'text' && offset >= beforePosition && offset < beforePosition + length) {\n return child.format ? { ...child.format } : null;\n }\n beforePosition += length;\n }\n return null;\n };\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n if (child.kind !== 'text' || position + length <= range.from || position >= range.to) {\n next.push(child);\n position += length;\n continue;\n }\n const localFrom = Math.max(0, range.from - position);\n const localTo = Math.min(length, range.to - position);\n if (localFrom > 0) next.push({ ...child, text: child.text.slice(0, localFrom) });\n if (localTo > localFrom) {\n next.push({\n ...child,\n text: child.text.slice(localFrom, localTo),\n formatRevision: child.formatRevision ?? {\n kind: 'format',\n revisionId: revision.revisionId,\n beforeFormat: formatAt(position + localFrom),\n author: revision.author,\n date: revision.date,\n },\n });\n changed = true;\n }\n if (localTo < length) next.push({ ...child, text: child.text.slice(localTo) });\n position += length;\n }\n if (!changed) return null;\n paragraph.content = normalizeTextNodes(next);\n return {\n kind: 'format',\n op: 'run',\n paraId,\n from: range.from,\n to: range.to,\n format: {},\n revisionId: revision.revisionId,\n revisionKind: 'format',\n beforeFormat: formatAt(range.from),\n };\n}\n\nexport function nativeResolveImageRevision(\n doc: NativeWordDocument,\n paraId: string,\n drawingId: string,\n operation: 'accept' | 'reject',\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n if (!paragraph) return null;\n let offset = 0;\n for (let index = 0; index < paragraph.content.length; index += 1) {\n const child = paragraph.content[index];\n if (child?.kind !== 'image' || child.drawingId !== drawingId) {\n offset += child ? inlineLength(child) : 0;\n continue;\n }\n const revision = child.revision;\n if (!revision) return null;\n if ((revision.revisionKind === 'delete' && operation === 'accept') ||\n (revision.revisionKind === 'insert' && operation === 'reject')) {\n paragraph.content.splice(index, 1);\n } else {\n child.revision = undefined;\n }\n paragraph.content = normalizeTextNodes(paragraph.content);\n return {\n kind: 'image',\n op: operation,\n paraId,\n offset,\n drawingId,\n revisionId: revision.revisionId,\n revisionKind: revision.revisionKind,\n };\n }\n return null;\n}\n\nexport function nativeResolveImageFormatRevision(\n doc: NativeWordDocument,\n paraId: string,\n drawingId: string,\n operation: 'accept' | 'reject',\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n if (!paragraph) return null;\n let offset = 0;\n for (const child of paragraph.content) {\n if (child.kind !== 'image' || child.drawingId !== drawingId) {\n offset += inlineLength(child);\n continue;\n }\n const revision = child.formatRevision;\n if (!revision) return null;\n if (operation === 'reject') {\n child.width = revision.beforeWidth;\n child.height = revision.beforeHeight;\n }\n const revisionId = revision.revisionId;\n child.formatRevision = undefined;\n return {\n kind: 'image',\n op: operation,\n paraId,\n offset,\n drawingId,\n revisionId,\n revisionKind: 'format',\n };\n }\n return null;\n}\n\nexport function nativeSplitParagraph(\n doc: NativeWordDocument,\n paraId: string,\n offset: number,\n newParaId = createNativeParaId(doc),\n): NativeWordChange | null {\n const location = findNativeParagraphLocation(doc, paraId);\n if (!location) return null;\n const { paragraph } = location;\n\n const split = splitInlineContentAt(paragraph.content, offset);\n paragraph.content = split.before;\n location.insertAfter({\n kind: 'paragraph',\n paraId: newParaId,\n story: paragraph.story,\n styleId: paragraph.styleId,\n format: paragraph.format ? JSON.parse(JSON.stringify(paragraph.format)) : null,\n content: split.after,\n });\n return { kind: 'block', op: 'split', paraId, newParaId, offset };\n}\n\nexport function nativeSyncParagraphText(\n doc: NativeWordDocument,\n paraId: string,\n nextText: string,\n): NativeWordChange | null {\n const paragraph = findNativeParagraph(doc, paraId);\n if (!paragraph || paragraph.content.some((child) => child.kind !== 'text')) return null;\n\n const previousText = nativeParagraphText(paragraph);\n if (previousText === nextText) return null;\n\n const diff = textDiff(previousText, nextText);\n let nextContent = paragraph.content;\n if (diff.deletedText.length > 0) {\n nextContent = deleteInlineTextRange(nextContent, diff.offset, diff.deletedText.length);\n }\n if (diff.insertedText.length > 0) {\n nextContent = insertInlineText(nextContent, diff.offset, diff.insertedText, inferRunFormatAt(paragraph.content, diff.offset));\n }\n paragraph.content = nextContent;\n if (diff.deletedText.length === 0) {\n return { kind: 'text', op: 'insert', paraId, offset: diff.offset, text: diff.insertedText };\n }\n if (diff.insertedText.length === 0) {\n return { kind: 'text', op: 'delete', paraId, offset: diff.offset, text: diff.deletedText };\n }\n return {\n kind: 'text',\n op: 'replace',\n paraId,\n offset: diff.offset,\n text: diff.insertedText,\n deletedText: diff.deletedText,\n };\n}\n\nfunction insertInlineText(\n content: NativeWordInlineNode[],\n offset: number,\n text: string,\n fallbackFormat: EditorRunFormat | null = null,\n): NativeWordInlineNode[] {\n const next: NativeWordInlineNode[] = [];\n let position = 0;\n let inserted = false;\n for (const child of content) {\n const length = inlineLength(child);\n if (!inserted && offset <= position + length) {\n if (child.kind === 'text') {\n const localOffset = Math.max(0, offset - position);\n next.push({\n ...child,\n text: `${child.text.slice(0, localOffset)}${text}${child.text.slice(localOffset)}`,\n });\n } else if (offset <= position) {\n next.push({ kind: 'text', text, format: fallbackFormat }, child);\n } else {\n next.push(child, { kind: 'text', text, format: fallbackFormat });\n }\n inserted = true;\n } else {\n next.push(child);\n }\n position += length;\n }\n if (!inserted) next.push({ kind: 'text', text, format: fallbackFormat });\n return normalizeTextNodes(next);\n}\n\nfunction deleteInlineTextRange(content: NativeWordInlineNode[], offset: number, length: number): NativeWordInlineNode[] {\n if (length <= 0) return content;\n const next: NativeWordInlineNode[] = [];\n let position = 0;\n const end = offset + length;\n for (const child of content) {\n const childLength = inlineLength(child);\n const childEnd = position + childLength;\n if (child.kind !== 'text' || childEnd <= offset || position >= end) {\n next.push(child);\n } else {\n const keepBefore = Math.max(0, offset - position);\n const keepAfter = Math.max(0, childEnd - end);\n const text = `${child.text.slice(0, keepBefore)}${child.text.slice(child.text.length - keepAfter)}`;\n if (text.length > 0) next.push({ ...child, text });\n }\n position = childEnd;\n }\n return normalizeTextNodes(next);\n}\n\nfunction deleteInlineBackward(paragraph: NativeWordParagraphNode, offset: number): NativeWordChange | null {\n return deleteInlineAt(paragraph, offset - 1);\n}\n\nfunction createNativeDrawingId(doc: NativeWordDocument): string {\n const used = new Set(\n allNativeParagraphs(doc).flatMap((paragraph) =>\n paragraph.content\n .filter((child) => child.kind === 'image' || child.kind === 'drawing')\n .map((child) => child.drawingId),\n ),\n );\n let suffix = 1;\n while (used.has(`coco-clipboard-${suffix}`)) suffix += 1;\n return `coco-clipboard-${suffix}`;\n}\n\nfunction deleteInlineAt(paragraph: NativeWordParagraphNode, deleteOffset: number): NativeWordChange | null {\n if (deleteOffset < 0) return null;\n const next: NativeWordInlineNode[] = [];\n let position = 0;\n let change: NativeWordChange | null = null;\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n if (!change && deleteOffset >= position && deleteOffset < position + length) {\n if (child.kind === 'image') {\n change = {\n kind: 'image',\n op: 'delete',\n paraId: paragraph.paraId,\n offset: deleteOffset,\n drawingId: child.drawingId,\n };\n } else if (child.kind === 'pageBreak') {\n change = { kind: 'page-break', op: 'delete', paraId: paragraph.paraId, offset: deleteOffset };\n } else if (child.kind === 'text') {\n const localOffset = deleteOffset - position;\n const deleted = child.text.slice(localOffset, localOffset + 1);\n const text = `${child.text.slice(0, localOffset)}${child.text.slice(localOffset + 1)}`;\n if (text.length > 0) next.push({ ...child, text });\n change = { kind: 'text', op: 'delete', paraId: paragraph.paraId, offset: deleteOffset, text: deleted };\n } else {\n next.push(child);\n }\n } else {\n next.push(child);\n }\n position += length;\n }\n if (!change) return null;\n paragraph.content = normalizeTextNodes(next);\n return change;\n}\n\nfunction deleteInlineRange(\n paragraph: NativeWordParagraphNode,\n from: number,\n to: number,\n): {\n content: NativeWordInlineNode[];\n changes: NativeWordChange[];\n} {\n const next: NativeWordInlineNode[] = [];\n const changes: NativeWordChange[] = [];\n let position = 0;\n\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n const end = position + length;\n const overlaps = from < end && to > position;\n if (!overlaps) {\n next.push(child);\n position = end;\n continue;\n }\n\n if (child.kind === 'text') {\n const localFrom = Math.max(0, from - position);\n const localTo = Math.min(child.text.length, to - position);\n const deleted = child.text.slice(localFrom, localTo);\n const kept = `${child.text.slice(0, localFrom)}${child.text.slice(localTo)}`;\n if (kept.length > 0) {\n next.push({ ...child, text: kept });\n }\n if (deleted.length > 0) {\n changes.push({\n kind: 'text',\n op: 'delete',\n paraId: paragraph.paraId,\n offset: position + localFrom,\n text: deleted,\n });\n }\n } else if (child.kind === 'image') {\n changes.push({\n kind: 'image',\n op: 'delete',\n paraId: paragraph.paraId,\n offset: position,\n drawingId: child.drawingId,\n });\n } else if (child.kind === 'pageBreak') {\n changes.push({\n kind: 'page-break',\n op: 'delete',\n paraId: paragraph.paraId,\n offset: position,\n });\n } else {\n next.push(child);\n }\n\n position = end;\n }\n\n return {\n content: normalizeTextNodes(next),\n changes: changes.sort((left, right) => changeOffset(right) - changeOffset(left)),\n };\n}\n\nfunction splitInlineContentAt(content: NativeWordInlineNode[], offset: number): {\n before: NativeWordInlineNode[];\n after: NativeWordInlineNode[];\n} {\n const before: NativeWordInlineNode[] = [];\n const after: NativeWordInlineNode[] = [];\n let position = 0;\n let split = false;\n for (const child of content) {\n const length = inlineLength(child);\n if (!split && offset <= position + length) {\n if (child.kind === 'text') {\n const localOffset = Math.max(0, offset - position);\n if (localOffset > 0) before.push({ ...child, text: child.text.slice(0, localOffset) });\n if (localOffset < child.text.length) after.push({ ...child, text: child.text.slice(localOffset) });\n } else if (offset <= position) {\n after.push(child);\n } else {\n before.push(child);\n }\n split = true;\n } else if (split) {\n after.push(child);\n } else {\n before.push(child);\n }\n position += length;\n }\n return {\n before: normalizeTextNodes(before),\n after: normalizeTextNodes(after),\n };\n}\n\nfunction inlineLength(child: NativeWordInlineNode): number {\n return child.kind === 'text' ? child.text.length : 1;\n}\n\nfunction positiveImageDimension(value: number | undefined): number | undefined {\n if (!Number.isFinite(value) || value === undefined || value <= 0) return undefined;\n return Math.max(1, Math.round(value * 100) / 100);\n}\n\nfunction normalizedRange(from: number, to: number): { from: number; to: number } {\n const start = Math.max(0, Math.min(from, to));\n const end = Math.max(0, Math.max(from, to));\n return { from: start, to: end };\n}\n\nfunction changeOffset(change: NativeWordChange): number {\n return 'offset' in change && typeof change.offset === 'number' ? change.offset : 0;\n}\n\nfunction normalizeTextNodes(content: NativeWordInlineNode[]): NativeWordInlineNode[] {\n const next: NativeWordInlineNode[] = [];\n for (const child of content) {\n if (child.kind === 'text') {\n if (child.text.length === 0) continue;\n const previous = next[next.length - 1];\n if (\n previous?.kind === 'text' &&\n sameRunFormat(previous.format, child.format) &&\n sameJson(previous.hyperlink ?? null, child.hyperlink ?? null) &&\n sameJson(previous.marks ?? null, child.marks ?? null)\n ) {\n previous.text += child.text;\n } else {\n next.push({ ...child });\n }\n } else {\n next.push(child);\n }\n }\n return next;\n}\n\nfunction cloneNativeBlocks(blocks: readonly NativeWordBlockNode[]): NativeWordBlockNode[] {\n const cloned = JSON.parse(JSON.stringify(blocks)) as NativeWordBlockNode[];\n synchronizeTableParagraphAliases(cloned);\n return cloned;\n}\n\nfunction nativeBlockId(block: NativeWordBlockNode): string {\n return block.kind === 'paragraph' ? block.paraId : block.tableId;\n}\n\nfunction orderedTopLevelBlockRange(\n doc: NativeWordDocument,\n anchor: { paraId: string; offset: number },\n focus: { paraId: string; offset: number },\n): {\n blocks: NativeWordBlockNode[];\n startOffset: number;\n endOffset: number;\n} | null {\n const anchorLocation = findNativeParagraphLocation(doc, anchor.paraId);\n const focusLocation = findNativeParagraphLocation(doc, focus.paraId);\n if (!anchorLocation || !focusLocation || anchorLocation.container !== doc.blocks || focusLocation.container !== doc.blocks) {\n return null;\n }\n const ordered =\n anchorLocation.index < focusLocation.index ||\n (anchorLocation.index === focusLocation.index && anchor.offset <= focus.offset)\n ? { start: anchorLocation, end: focusLocation, startOffset: anchor.offset, endOffset: focus.offset }\n : { start: focusLocation, end: anchorLocation, startOffset: focus.offset, endOffset: anchor.offset };\n if (ordered.start.index === ordered.end.index) return null;\n if (\n ordered.start.paragraph.content.some((child) => child.kind !== 'text') ||\n ordered.end.paragraph.content.some((child) => child.kind !== 'text')\n ) {\n return null;\n }\n return {\n blocks: doc.blocks.slice(ordered.start.index, ordered.end.index + 1),\n startOffset: Math.max(0, Math.min(ordered.startOffset, nativeParagraphText(ordered.start.paragraph).length)),\n endOffset: Math.max(0, Math.min(ordered.endOffset, nativeParagraphText(ordered.end.paragraph).length)),\n };\n}\n\nfunction rangeContainsComplexBlock(blocks: readonly NativeWordBlockNode[]): boolean {\n return blocks.slice(1, -1).some(\n (block) => block.kind === 'table' || block.content.some((child) => child.kind !== 'text'),\n );\n}\n\nfunction cloneClipboardBlocksWithFreshIds(\n doc: NativeWordDocument,\n blocks: readonly NativeWordBlockNode[],\n): NativeWordBlockNode[] {\n const cloned = cloneNativeBlocks(blocks);\n const usedParaIds = new Set(allNativeParagraphs(doc).map((paragraph) => paragraph.paraId));\n const usedDrawingIds = new Set<string>();\n const usedTableIds = new Set<string>();\n visitNativeBlocks(doc.blocks, (block) => {\n if (block.kind === 'table') usedTableIds.add(block.tableId);\n else {\n for (const child of block.content) {\n if (child.kind === 'image' || child.kind === 'drawing') usedDrawingIds.add(child.drawingId);\n }\n }\n });\n let nextParaId = Date.now() >>> 0;\n const freshParaId = () => {\n let paraId = '';\n do {\n nextParaId = (nextParaId + 1) >>> 0;\n paraId = nextParaId.toString(16).toUpperCase().padStart(8, '0');\n } while (usedParaIds.has(paraId));\n usedParaIds.add(paraId);\n return paraId;\n };\n const freshNamedId = (used: Set<string>, prefix: string) => {\n let suffix = 1;\n while (used.has(`${prefix}-${suffix}`)) suffix += 1;\n const id = `${prefix}-${suffix}`;\n used.add(id);\n return id;\n };\n visitNativeBlocks(cloned, (block) => {\n if (block.kind === 'table') {\n block.tableId = freshNamedId(usedTableIds, 'coco-clipboard-table');\n return;\n }\n block.paraId = freshParaId();\n for (const child of block.content) {\n if (child.kind === 'image' || child.kind === 'drawing') {\n child.drawingId = freshNamedId(usedDrawingIds, 'coco-clipboard-drawing');\n }\n if (child.kind === 'drawing' && child.paragraphs) {\n for (const paragraph of child.paragraphs) paragraph.paraId = freshParaId();\n }\n }\n });\n synchronizeTableParagraphAliases(cloned);\n return cloned;\n}\n\nfunction freshNativeTableId(doc: NativeWordDocument): string {\n const used = new Set<string>();\n for (const blocks of [doc.blocks, ...doc.headers.map((story) => story.blocks), ...doc.footers.map((story) => story.blocks)]) {\n visitNativeBlocks(blocks, (block) => {\n if (block.kind === 'table') used.add(block.tableId);\n });\n }\n let suffix = 1;\n while (used.has(`coco-table-${suffix}`)) suffix += 1;\n return `coco-table-${suffix}`;\n}\n\nfunction visitNativeBlocks(\n blocks: readonly NativeWordBlockNode[],\n visitor: (block: NativeWordBlockNode) => void,\n): void {\n for (const block of blocks) {\n visitor(block);\n if (block.kind !== 'table') continue;\n for (const row of block.rows) {\n for (const cell of row.cells) visitNativeBlocks(cell.blocks, visitor);\n }\n }\n}\n\nfunction synchronizeTableParagraphAliases(blocks: NativeWordBlockNode[]): void {\n for (const block of blocks) {\n if (block.kind !== 'table') continue;\n for (const row of block.rows) {\n for (const cell of row.cells) {\n synchronizeTableParagraphAliases(cell.blocks);\n cell.paragraphs = collectParagraphs(cell.blocks);\n }\n }\n }\n}\n\nfunction collectParagraphs(blocks: readonly NativeWordBlockNode[]): NativeWordParagraphNode[] {\n return blocks.flatMap((block) =>\n block.kind === 'paragraph'\n ? [block]\n : block.rows.flatMap((row) => row.cells.flatMap((cell) => collectParagraphs(cell.blocks))),\n );\n}\n\nfunction inlineContentLength(content: readonly NativeWordInlineNode[]): number {\n return content.reduce((length, child) => length + inlineLength(child), 0);\n}\n\nfunction sameRunFormat(a: EditorRunFormat | null, b: EditorRunFormat | null): boolean {\n return JSON.stringify(a ?? null) === JSON.stringify(b ?? null);\n}\n\nfunction normalizeHyperlink(hyperlink: EditorHyperlink): EditorHyperlink | null {\n const target = hyperlink.target?.trim();\n const anchor = hyperlink.anchor?.trim().replace(/^#/, '');\n const tooltip = hyperlink.tooltip?.trim();\n if (!target && !anchor) return null;\n return {\n ...(target ? { target } : {}),\n ...(anchor ? { anchor } : {}),\n ...(tooltip ? { tooltip } : {}),\n };\n}\n\nfunction sameJson(left: unknown, right: unknown): boolean {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction inferRunFormatAt(content: NativeWordInlineNode[], offset: number): EditorRunFormat | null {\n let position = 0;\n let previousTextFormat: EditorRunFormat | null = null;\n for (const child of content) {\n const length = inlineLength(child);\n if (child.kind === 'text') {\n if (offset >= position && offset <= position + length) return child.format;\n previousTextFormat = child.format;\n }\n position += length;\n }\n return previousTextFormat;\n}\n\nfunction textDiff(previousText: string, nextText: string): {\n offset: number;\n deletedText: string;\n insertedText: string;\n} {\n let start = 0;\n while (\n start < previousText.length &&\n start < nextText.length &&\n previousText.charCodeAt(start) === nextText.charCodeAt(start)\n ) {\n start += 1;\n }\n\n let previousEnd = previousText.length;\n let nextEnd = nextText.length;\n while (\n previousEnd > start &&\n nextEnd > start &&\n previousText.charCodeAt(previousEnd - 1) === nextText.charCodeAt(nextEnd - 1)\n ) {\n previousEnd -= 1;\n nextEnd -= 1;\n }\n\n return {\n offset: start,\n deletedText: previousText.slice(start, previousEnd),\n insertedText: nextText.slice(start, nextEnd),\n };\n}\n","import type { EditorParagraphFormat, EditorRunFormat, EditorTableBorder, EditorTableCellView } from './model.js';\n\nexport interface ResolvedStyle {\n declarations: Record<string, string>;\n cssText: string;\n}\n\nexport function resolveParagraphStyle(format: EditorParagraphFormat | undefined | null): ResolvedStyle {\n const declarations: Record<string, string> = {};\n if (!format) return resolved(declarations);\n\n applyOutlineDefaults(format, declarations);\n if (format.alignment) declarations['text-align'] = alignmentToCss(format.alignment);\n if (format.indent?.left !== undefined && shouldEmitLeftIndent(format)) {\n declarations['margin-left'] = twipsToPt(format.indent.left);\n }\n if (format.indent?.right !== undefined) declarations['margin-right'] = twipsToPt(format.indent.right);\n if (format.indent?.firstLine !== undefined) declarations['text-indent'] = twipsToPt(format.indent.firstLine);\n if (format.spacing?.before !== undefined) declarations['margin-top'] = twipsToPt(format.spacing.before);\n if (format.spacing?.after !== undefined) declarations['margin-bottom'] = twipsToPt(format.spacing.after);\n const lineHeight = lineHeightToCss(format.spacing?.line, format.spacing?.lineRule, format.snapToGrid);\n if (lineHeight) declarations['line-height'] = lineHeight;\n if (format.fontSize !== undefined) declarations['font-size'] = `${format.fontSize}pt`;\n if (format.fontFamily !== undefined) declarations['font-family'] = fontFamilyToCss(format.fontFamily);\n if (format.characterSpacing !== undefined) declarations['letter-spacing'] = twipsToPt(format.characterSpacing);\n if (format.bold !== undefined) declarations['font-weight'] = format.bold ? '700' : '400';\n // `format.color` comes from paragraph-mark properties (`w:pPr/w:rPr`).\n // It is not the character color for the paragraph text; run-level color is\n // applied by the inline renderer instead.\n const backgroundColor = shadingToCss(format.shading) ?? highlightToCss(format.highlight);\n if (backgroundColor) declarations['background-color'] = backgroundColor;\n applyParagraphBorders(format, declarations);\n return resolved(declarations);\n}\n\nfunction shouldEmitLeftIndent(format: EditorParagraphFormat): boolean {\n return !(format.numbering && format.indent?.left === 0 && format.indent.firstLine === undefined);\n}\n\nfunction applyOutlineDefaults(\n format: EditorParagraphFormat,\n declarations: Record<string, string>,\n): void {\n if (format.outlineLevel === undefined) return;\n if (format.outlineLevel === 0) {\n declarations['font-size'] = '16pt';\n declarations['font-weight'] = '700';\n declarations['line-height'] = '1.28';\n } else if (format.outlineLevel === 1) {\n declarations['font-size'] = '14pt';\n declarations['font-weight'] = '700';\n declarations['line-height'] = '1.3';\n } else if (format.outlineLevel === 2) {\n declarations['font-size'] = '12pt';\n declarations['font-weight'] = '700';\n declarations['line-height'] = '1.35';\n }\n}\n\nexport function resolveRunStyle(format: EditorRunFormat | undefined | null): ResolvedStyle {\n const declarations: Record<string, string> = {};\n if (!format) return resolved(declarations);\n\n if (format.bold !== undefined) declarations['font-weight'] = format.bold ? '700' : '400';\n if (format.italic !== undefined) declarations['font-style'] = format.italic ? 'italic' : 'normal';\n applyTextDecoration(format, declarations);\n if (format.caps) declarations['text-transform'] = 'uppercase';\n if (format.smallCaps) declarations['font-variant-caps'] = 'small-caps';\n if (format.fontSize !== undefined) declarations['font-size'] = `${format.fontSize}pt`;\n if (format.fontFamily !== undefined) declarations['font-family'] = fontFamilyToCss(format.fontFamily);\n if (format.characterSpacing !== undefined) declarations['letter-spacing'] = twipsToPt(format.characterSpacing);\n if (format.verticalAlign) {\n declarations['vertical-align'] = runVerticalAlignToCss(format.verticalAlign);\n if (format.verticalAlign !== 'baseline' && format.fontSize === undefined) declarations['font-size'] = 'smaller';\n }\n const color = colorToCss(format.color);\n if (color) declarations.color = color;\n const backgroundColor = highlightToCss(format.highlight) ?? shadingToCss(format.shading);\n if (backgroundColor) declarations['background-color'] = backgroundColor;\n return resolved(declarations);\n}\n\nexport function resolveTableCellStyle(cell: Pick<EditorTableCellView, 'margin' | 'borders' | 'shading' | 'verticalAlignment' | 'noWrap' | 'width'>): ResolvedStyle {\n const declarations: Record<string, string> = {};\n if (cell.width !== undefined && cell.width > 0) declarations.width = twipsToPt(cell.width);\n if (cell.margin) {\n if (cell.margin.top !== undefined) declarations['padding-top'] = twipsToPt(cell.margin.top);\n if (cell.margin.right !== undefined) declarations['padding-right'] = twipsToPt(cell.margin.right);\n if (cell.margin.bottom !== undefined) declarations['padding-bottom'] = twipsToPt(cell.margin.bottom);\n if (cell.margin.left !== undefined) declarations['padding-left'] = twipsToPt(cell.margin.left);\n }\n const fill = colorToCss(cell.shading?.fill);\n if (fill) declarations['background-color'] = fill;\n if (cell.verticalAlignment) {\n declarations['vertical-align'] = tableCellVerticalAlignmentToCss(cell.verticalAlignment);\n }\n if (cell.noWrap) declarations['white-space'] = 'nowrap';\n if (cell.borders) {\n applyTableCellBorder(declarations, 'top', cell.borders.top);\n applyTableCellBorder(declarations, 'right', cell.borders.right);\n applyTableCellBorder(declarations, 'bottom', cell.borders.bottom);\n applyTableCellBorder(declarations, 'left', cell.borders.left);\n }\n return resolved(declarations);\n}\n\nexport function colorToCss(color: string | undefined): string | null {\n if (!color || color === 'auto') return null;\n return /^[0-9a-f]{6}$/i.test(color) ? `#${color}` : null;\n}\n\nfunction shadingToCss(shading: { fill?: string; val?: string } | undefined): string | null {\n if (!shading || shading.val === 'nil' || shading.val === 'clear' && !shading.fill) return null;\n return colorToCss(shading.fill);\n}\n\nfunction highlightToCss(highlight: string | undefined): string | null {\n if (!highlight || highlight === 'none') return null;\n const named: Record<string, string> = {\n black: '#000000',\n blue: '#0000ff',\n cyan: '#00ffff',\n green: '#00ff00',\n magenta: '#ff00ff',\n red: '#ff0000',\n yellow: '#ffff00',\n white: '#ffffff',\n darkBlue: '#000080',\n darkCyan: '#008080',\n darkGreen: '#008000',\n darkMagenta: '#800080',\n darkRed: '#800000',\n darkYellow: '#808000',\n darkGray: '#808080',\n lightGray: '#c0c0c0',\n };\n return named[highlight] ?? colorToCss(highlight);\n}\n\nfunction resolved(declarations: Record<string, string>): ResolvedStyle {\n return {\n declarations,\n cssText: Object.entries(declarations)\n .map(([property, value]) => `${property}: ${value}`)\n .join('; '),\n };\n}\n\nfunction alignmentToCss(alignment: NonNullable<EditorParagraphFormat['alignment']>): string {\n if (alignment === 'both' || alignment === 'distribute') return 'justify';\n return alignment;\n}\n\nfunction tableCellVerticalAlignmentToCss(\n alignment: NonNullable<EditorTableCellView['verticalAlignment']>,\n): string {\n if (alignment === 'center' || alignment === 'both') return 'middle';\n return alignment;\n}\n\nfunction applyTextDecoration(format: EditorRunFormat, declarations: Record<string, string>): void {\n const lines: string[] = [];\n if (format.underline) lines.push('underline');\n if (format.strike || format.doubleStrike) lines.push('line-through');\n if (lines.length > 0) {\n declarations['text-decoration-line'] = lines.join(' ');\n if (format.doubleStrike) declarations['text-decoration-style'] = 'double';\n return;\n }\n if (format.underline === false || format.strike === false || format.doubleStrike === false) {\n declarations['text-decoration-line'] = 'none';\n }\n}\n\nfunction runVerticalAlignToCss(alignment: NonNullable<EditorRunFormat['verticalAlign']>): string {\n if (alignment === 'superscript') return 'super';\n if (alignment === 'subscript') return 'sub';\n return 'baseline';\n}\n\nfunction applyParagraphBorders(format: EditorParagraphFormat, declarations: Record<string, string>): void {\n const borders = format.borders ?? (format.borderBottom ? { bottom: format.borderBottom } : undefined);\n if (!borders) return;\n applyParagraphBorder(declarations, 'top', borders.top);\n applyParagraphBorder(declarations, 'right', borders.right);\n applyParagraphBorder(declarations, 'bottom', borders.bottom ?? borders.between);\n applyParagraphBorder(declarations, 'left', borders.left ?? borders.bar);\n}\n\nfunction applyParagraphBorder(\n declarations: Record<string, string>,\n side: 'top' | 'right' | 'bottom' | 'left',\n border: EditorParagraphFormat['borderBottom'] | undefined,\n): void {\n const css = borderToCss(border);\n if (!css) return;\n declarations[`border-${side}`] = css;\n declarations[`padding-${side}`] = border?.space !== undefined ? `${border.space}pt` : '4pt';\n}\n\nfunction borderToCss(border: EditorParagraphFormat['borderBottom']): string | null {\n if (!border || border.val === 'none' || border.val === 'nil') return null;\n const color = colorToCss(border.color) ?? '#000000';\n const widthPt = border.size !== undefined ? Math.max(0.75, border.size / 8) : 0.75;\n const style = border.val === 'double' ? 'double' : 'solid';\n return `${widthPt}pt ${style} ${color}`;\n}\n\nfunction applyTableCellBorder(\n declarations: Record<string, string>,\n side: 'top' | 'right' | 'bottom' | 'left',\n border: EditorTableBorder | undefined,\n): void {\n if (!border) return;\n const css = tableBorderToCss(border);\n declarations[`border-${side}`] = css ?? '0';\n}\n\nfunction tableBorderToCss(border: EditorTableBorder): string | null {\n if (border.val === 'none' || border.val === 'nil') return null;\n const color = colorToCss(border.color) ?? '#000000';\n const widthPt = border.size !== undefined ? Math.max(0.5, border.size / 8) : 0.75;\n const style = border.val === 'double' ? 'double' : 'solid';\n return `${widthPt}pt ${style} ${color}`;\n}\n\nfunction lineHeightToCss(\n line: number | undefined,\n lineRule: 'auto' | 'exact' | 'atLeast' | undefined,\n snapToGrid: boolean | undefined,\n): string | null {\n if (line === undefined) return null;\n if (lineRule === 'exact' || lineRule === 'atLeast') return twipsToPt(line);\n if (snapToGrid !== true) return String(line / 240);\n return `calc(var(--coco-word-doc-grid-line-height, 1em) * ${line / 240})`;\n}\n\nfunction twipsToPt(twips: number): string {\n return `${twips / 20}pt`;\n}\n\nfunction fontFamilyToCss(fontFamily: string): string {\n const families = fontFamily\n .split(',')\n .map((family) => family.trim())\n .filter((family) => family.length > 0);\n const quotedFamilies = families.map((family) => `\"${family.replace(/\"/g, '\\\\\"')}\"`);\n return [...quotedFamilies, 'SimSun', '\"Songti SC\"', '\"Noto Serif CJK SC\"', 'serif'].join(', ');\n}\n","import type {\n NativeWordBlockNode,\n NativeWordDocument,\n NativeWordDrawingNode,\n NativeWordFieldNode,\n NativeWordHeaderFooterStory,\n NativeWordImageNode,\n NativeWordParagraphNode,\n NativeWordTableCellNode,\n NativeWordTableNode,\n} from './native-model.js';\nimport type { EditorTableBorders } from './model.js';\nimport { resolveParagraphStyle, resolveRunStyle, resolveTableCellStyle } from './style-resolver.js';\n\nexport interface NativeAnchorLayoutMetadata {\n classNames: string[];\n dataset: Record<string, string>;\n styleProperties: Record<string, string>;\n}\n\ninterface NativeRenderOptions {\n implicitGridForParagraphs?: boolean;\n implicitGridLinePitch?: number;\n}\n\nconst NATIVE_ANNOTATION_RAIL_WIDTH_PX = 260;\n\nexport function defineNativeWordElements(): void {\n defineElement('coco-word-native-document');\n defineElement('coco-word-native-page');\n defineElement('coco-word-native-page-body');\n defineElement('coco-word-native-story');\n defineElement('coco-word-native-p');\n defineElement('coco-word-native-drawing');\n defineElement('coco-word-native-table');\n}\n\nexport function renderNativeDocument(doc: NativeWordDocument): HTMLElement {\n const root = document.createElement('coco-word-native-document');\n root.contentEditable = 'true';\n root.spellcheck = false;\n if (shouldUseNaturalParagraphFlow(doc)) root.classList.add('uses-natural-paragraph-flow');\n if (shouldUseCompactLatinTables(doc)) root.classList.add('uses-compact-latin-tables');\n if (shouldSplitRowspanTableGroups(doc)) root.classList.add('uses-rowspan-table-group-splitting');\n const defaultRunStyle = resolveRunStyle(doc.defaults?.run).cssText;\n if (defaultRunStyle.length > 0) root.setAttribute('style', defaultRunStyle);\n for (const story of doc.headers) root.appendChild(renderNativeHeaderFooterStory(story));\n const implicitGridLinePitch = documentGridLinePitch(doc);\n let implicitGridForParagraphs = implicitGridLinePitch !== undefined && nativeDocumentHasCjkText(doc);\n for (const block of doc.blocks) {\n root.appendChild(renderNativeBlock(block, { implicitGridForParagraphs, implicitGridLinePitch }));\n if (nativeBlockHasSnapToGridDisabled(block)) implicitGridForParagraphs = false;\n }\n for (const story of doc.footers) root.appendChild(renderNativeHeaderFooterStory(story));\n const hasAnnotations = root.querySelector(\n '.coco-word-comment, .coco-word-revision-insert, .coco-word-revision-delete, .coco-word-revision-format, [data-revision-id]',\n ) !== null;\n if (hasAnnotations) {\n root.classList.add('has-annotation-rail');\n if (doc.pageLayout?.width !== undefined) {\n root.style.minWidth = `${twipsToPxNumber(doc.pageLayout.width) + NATIVE_ANNOTATION_RAIL_WIDTH_PX}px`;\n }\n }\n return root;\n}\n\nfunction shouldUseNaturalParagraphFlow(doc: NativeWordDocument): boolean {\n if (doc.blocks.length > 300) return false;\n const layouts = [doc.pageLayout, ...doc.sections.map((section) => section.pageLayout)].filter(\n (layout): layout is NonNullable<NativeWordDocument['pageLayout']> => layout !== undefined,\n );\n if (layouts.length === 0) return false;\n if (layouts.every((layout) => layout.docGrid === undefined)) return true;\n return !nativeDocumentHasCjkText(doc);\n}\n\nfunction documentGridLinePitch(doc: NativeWordDocument): number | undefined {\n const layouts = [doc.pageLayout, ...doc.sections.map((section) => section.pageLayout)].filter(\n (layout): layout is NonNullable<NativeWordDocument['pageLayout']> => layout !== undefined,\n );\n return layouts.find((layout) => layout.docGrid?.linePitch !== undefined)?.docGrid?.linePitch;\n}\n\nfunction shouldUseCompactLatinTables(doc: NativeWordDocument): boolean {\n return doc.blocks.some((block) => block.kind === 'table') && !nativeDocumentHasCjkText(doc);\n}\n\nfunction shouldSplitRowspanTableGroups(doc: NativeWordDocument): boolean {\n const tables = doc.blocks.filter((block) => block.kind === 'table');\n if (tables.length < 10) return false;\n return nativeDocumentImageCount(doc) <= 5;\n}\n\nfunction nativeDocumentImageCount(doc: NativeWordDocument): number {\n return doc.blocks.reduce((count, block) => count + nativeBlockImageCount(block), 0);\n}\n\nfunction nativeBlockImageCount(block: NativeWordBlockNode): number {\n if (block.kind === 'paragraph') {\n return block.content.filter((child) => child.kind === 'image' || child.kind === 'drawing').length;\n }\n return block.rows.reduce(\n (count, row) =>\n count + row.cells.reduce((cellCount, cell) => cellCount + cell.blocks.reduce((sum, child) => sum + nativeBlockImageCount(child), 0), 0),\n 0,\n );\n}\n\nfunction nativeDocumentHasCjkText(doc: NativeWordDocument): boolean {\n let cjk = 0;\n let total = 0;\n for (const block of doc.blocks.slice(0, 160)) {\n for (const text of nativeBlockTextSamples(block)) {\n for (const char of text) {\n if (/\\s/.test(char)) continue;\n total++;\n if (/[\\u3400-\\u9FFF\\uF900-\\uFAFF]/.test(char)) cjk++;\n }\n }\n if (total >= 1200) break;\n }\n return cjk >= 24 && cjk / Math.max(total, 1) >= 0.08;\n}\n\nfunction nativeBlockTextSamples(block: NativeWordBlockNode): string[] {\n if (block.kind === 'paragraph') {\n return block.content.filter((child) => child.kind === 'text').map((child) => child.text);\n }\n const text: string[] = [];\n for (const row of block.rows) {\n for (const cell of row.cells) {\n for (const paragraph of cell.paragraphs) {\n text.push(...paragraph.content.filter((child) => child.kind === 'text').map((child) => child.text));\n }\n }\n }\n return text;\n}\n\nexport function paginateNativeDocument(root: HTMLElement, doc: NativeWordDocument): void {\n const defaultLayout = doc.pageLayout;\n if (!defaultLayout || root.dataset.paginated === 'true') return;\n root.dataset.paginated = 'true';\n root.classList.add('is-paginated');\n const originalChildren = Array.from(root.children);\n const headerTemplates = originalChildren.filter(\n (child) =>\n child instanceof HTMLElement &&\n child.tagName.toLowerCase() === 'coco-word-native-story' &&\n child.dataset.storyKind === 'header',\n ) as HTMLElement[];\n const footerTemplates = originalChildren.filter(\n (child) =>\n child instanceof HTMLElement &&\n child.tagName.toLowerCase() === 'coco-word-native-story' &&\n child.dataset.storyKind === 'footer',\n ) as HTMLElement[];\n const bodyBlocks = originalChildren.filter(\n (child) =>\n child instanceof HTMLElement &&\n !(child.tagName.toLowerCase() === 'coco-word-native-story'),\n ) as HTMLElement[];\n root.replaceChildren();\n\n const sectionPageCounts = new Map<number, number>();\n let currentSectionIndex = 0;\n let currentPageLayout = pageLayoutForSection(doc, currentSectionIndex, defaultLayout);\n const createPage = (sectionIndex = currentSectionIndex) => {\n const sectionPageNumber = (sectionPageCounts.get(sectionIndex) ?? 0) + 1;\n sectionPageCounts.set(sectionIndex, sectionPageNumber);\n currentSectionIndex = sectionIndex;\n currentPageLayout = pageLayoutForSection(doc, sectionIndex, defaultLayout);\n return appendNativePage(\n root,\n doc,\n currentPageLayout,\n headerTemplates,\n footerTemplates,\n root.children.length + 1,\n sectionIndex,\n sectionPageNumber,\n );\n };\n let page = createPage();\n let body = page.querySelector<HTMLElement>('coco-word-native-page-body')!;\n const bodyLimit = () =>\n Math.max(120, Math.round(body.getBoundingClientRect().height) || contentHeightForLayout(currentPageLayout));\n const nextPage = () => {\n page = createPage();\n body = page.querySelector<HTMLElement>('coco-word-native-page-body')!;\n return body;\n };\n const moveEmptyPageToSection = (sectionIndex: number) => {\n if (sectionIndex === currentSectionIndex || body.children.length > 0) return;\n const oldCount = sectionPageCounts.get(currentSectionIndex) ?? 0;\n if (oldCount > 1) sectionPageCounts.set(currentSectionIndex, oldCount - 1);\n else sectionPageCounts.delete(currentSectionIndex);\n const sectionPageNumber = (sectionPageCounts.get(sectionIndex) ?? 0) + 1;\n sectionPageCounts.set(sectionIndex, sectionPageNumber);\n currentSectionIndex = sectionIndex;\n currentPageLayout = pageLayoutForSection(doc, sectionIndex, defaultLayout);\n refreshNativePageChrome(\n page,\n doc,\n currentPageLayout,\n headerTemplates,\n footerTemplates,\n Number(page.dataset.pageNumber ?? '1'),\n sectionIndex,\n sectionPageNumber,\n );\n };\n const appendBlock = (block: HTMLElement, isFinalBodyBlock: boolean) => {\n const blockSectionIndex = sectionIndexForBlock(block, doc) ?? currentSectionIndex;\n if (body.children.length === 0) {\n moveEmptyPageToSection(blockSectionIndex);\n }\n if (shouldStartBlockOnNewPage(block) && body.children.length > 0) {\n nextPage();\n moveEmptyPageToSection(blockSectionIndex);\n }\n body.appendChild(block);\n const promotesToEmptyFlow = nativeBlockPromotesToEmptyFlow(block);\n if (promotesToEmptyFlow) promotePageRelativeAnchors(page);\n const hasForcedPageBreak = block.querySelector('.coco-word-page-break') !== null;\n if (body.scrollHeight > bodyLimit()) {\n const keepWithPrevious = previousKeepNextBlock(body, block);\n if (keepWithPrevious) {\n if (block.matches('coco-word-native-table')) {\n body.removeChild(block);\n const split = splitNativeTableAcrossPages(block, body, bodyLimit, nextPage);\n if (split) {\n if (!promotesToEmptyFlow) promotePageRelativeAnchors(page);\n const sectionBreakType = sectionBreakTypeAfterBlock(block, doc);\n const nextSectionIndex = sectionIndexAfterBlock(block, doc);\n if (nextSectionIndex !== null) currentSectionIndex = nextSectionIndex;\n if (hasForcedPageBreak || sectionBreakType) advanceAfterForcedBreak(nextPage, sectionBreakType);\n return;\n }\n body.appendChild(block);\n }\n body.removeChild(block);\n body.removeChild(keepWithPrevious);\n nextPage();\n moveEmptyPageToSection(blockSectionIndex);\n body.appendChild(keepWithPrevious);\n body.appendChild(block);\n if (block.matches('coco-word-native-table') && body.scrollHeight > bodyLimit()) {\n body.removeChild(block);\n if (!splitNativeTableAcrossPages(block, body, bodyLimit, nextPage)) {\n body.appendChild(block);\n }\n }\n } else {\n body.removeChild(block);\n const splitParagraphTail = splitNativeParagraphToFitCurrentPage(block, body, bodyLimit);\n if (splitParagraphTail) {\n nextPage();\n moveEmptyPageToSection(blockSectionIndex);\n body.appendChild(splitParagraphTail);\n } else {\n const split = splitNativeTableAcrossPages(block, body, bodyLimit, nextPage);\n if (!split) {\n nextPage();\n moveEmptyPageToSection(blockSectionIndex);\n body.appendChild(block);\n }\n }\n }\n } else if (block.matches('coco-word-native-table')) {\n splitNativeTableTailForBottomReserve(block, body, bodyLimit, nextPage, isFinalBodyBlock);\n }\n if (!promotesToEmptyFlow) promotePageRelativeAnchors(page);\n const sectionBreakType = sectionBreakTypeAfterBlock(block, doc);\n const nextSectionIndex = sectionIndexAfterBlock(block, doc);\n if (nextSectionIndex !== null) currentSectionIndex = nextSectionIndex;\n if (hasForcedPageBreak || sectionBreakType) advanceAfterForcedBreak(nextPage, sectionBreakType);\n };\n for (let index = 0; index < bodyBlocks.length; index += 1) {\n appendBlock(bodyBlocks[index]!, index === bodyBlocks.length - 1);\n }\n compactTrailingEmptyFlowPages(root);\n compactEmptyNativePages(root);\n renumberNativePages(root);\n refreshNativePageFields(root, doc);\n refreshNativePageCommentBubbles(root);\n}\n\nexport function reflowNativeDocumentFromParagraph(\n root: HTMLElement,\n doc: NativeWordDocument,\n paraId: string,\n): boolean {\n const paragraph = root.querySelector<HTMLElement>(\n `coco-word-native-page-body coco-word-native-p[data-para-id=\"${paraId}\"]`,\n );\n const startPage = paragraph?.closest<HTMLElement>('coco-word-native-page');\n if (!paragraph || !startPage || !doc.pageLayout) return false;\n\n let pages = directNativePages(root);\n let startIndex = pages.indexOf(startPage);\n if (startIndex < 0) return false;\n const templates = collectIncrementalStoryTemplates(root);\n let changed = false;\n let pageCountChanged = false;\n\n for (let index = startIndex; index < pages.length; index += 1) {\n const page = pages[index]!;\n const body = nativePageBody(page);\n if (!body) continue;\n while (nativePageBodyOverflows(body)) {\n if (moveTrailingIncrementalTableRows(root, doc, page, pages[index + 1], templates)) {\n pages = directNativePages(root);\n changed = true;\n continue;\n }\n const moving = trailingIncrementalBlockGroup(body);\n if (moving.length === 0 || moving.length >= body.children.length) break;\n let nextPage = pages[index + 1];\n if (!nextPage || cannotReceivePreviousPageContent(page, nextPage, doc)) {\n nextPage = insertIncrementalNativePage(root, doc, page, nextPage, templates);\n pages = directNativePages(root);\n pageCountChanged = true;\n }\n const nextBody = nativePageBody(nextPage);\n if (!nextBody) break;\n for (const block of [...moving].reverse()) nextBody.insertBefore(block, nextBody.firstChild);\n changed = true;\n }\n }\n\n pages = directNativePages(root);\n startIndex = Math.max(0, Math.min(startIndex, Math.max(0, pages.length - 1)) - 1);\n for (let index = startIndex; index < pages.length - 1; index += 1) {\n const page = pages[index]!;\n const nextPage = pages[index + 1]!;\n const body = nativePageBody(page);\n const nextBody = nativePageBody(nextPage);\n if (!body || !nextBody || cannotReceivePreviousPageContent(page, nextPage, doc)) continue;\n while (backfillIncrementalTableRows(body, nextBody)) changed = true;\n while (true) {\n const candidates = leadingIncrementalBlockGroup(nextBody);\n if (candidates.length === 0 || !canBackfillIncrementalBlock(body, candidates[0]!, doc)) break;\n for (const candidate of candidates) body.appendChild(candidate);\n if (nativePageBodyOverflows(body, 8)) {\n for (const candidate of [...candidates].reverse()) nextBody.insertBefore(candidate, nextBody.firstChild);\n if (candidates.length > 1) {\n const first = candidates[0]!;\n body.appendChild(first);\n if (!nativePageBodyOverflows(body, 8)) {\n changed = true;\n continue;\n }\n nextBody.insertBefore(first, nextBody.firstChild);\n }\n break;\n }\n changed = true;\n }\n if (isEmptyNativePage(nextPage)) {\n nextPage.remove();\n pages = directNativePages(root);\n index -= 1;\n pageCountChanged = true;\n }\n }\n\n if (!changed) return false;\n compactTrailingEmptyFlowPages(root);\n compactEmptyNativePages(root);\n renumberNativePages(root);\n if (pageCountChanged) refreshIncrementalPageChrome(root, doc, templates);\n refreshNativePageFields(root, doc);\n refreshNativePageCommentBubbles(root);\n return true;\n}\n\nexport interface NativeDocumentReflowMeasurement {\n overflowPx: number;\n canBackfillPrevious: boolean;\n canBackfillNext: boolean;\n}\n\nexport function measureNativeDocumentReflowFromParagraph(\n root: HTMLElement,\n doc: NativeWordDocument,\n paraId: string,\n): NativeDocumentReflowMeasurement {\n const empty = { overflowPx: 0, canBackfillPrevious: false, canBackfillNext: false };\n const paragraph = root.querySelector<HTMLElement>(\n `coco-word-native-page-body coco-word-native-p[data-para-id=\"${paraId}\"]`,\n );\n const page = paragraph?.closest<HTMLElement>('coco-word-native-page');\n const pages = directNativePages(root);\n const pageIndex = page ? pages.indexOf(page) : -1;\n if (!paragraph || !page || pageIndex < 0) return empty;\n const body = nativePageBody(page);\n if (!body) return empty;\n const limit = Math.max(120, Math.round(body.getBoundingClientRect().height));\n const overflowPx = Math.max(0, body.scrollHeight - limit);\n\n const previousPage = pages[pageIndex - 1];\n const previousBody = previousPage ? nativePageBody(previousPage) : null;\n const canBackfillPrevious = !!(\n previousPage &&\n previousBody &&\n leadingIncrementalBlockGroup(body).some((block) => blockContainsParagraph(block, paraId)) &&\n nativePagePairCanBackfill(previousPage, page, previousBody, body, doc)\n );\n\n const nextPage = pages[pageIndex + 1];\n const nextBody = nextPage ? nativePageBody(nextPage) : null;\n const canBackfillNext = !!(\n nextPage &&\n nextBody &&\n nativePagePairCanBackfill(page, nextPage, body, nextBody, doc)\n );\n return { overflowPx, canBackfillPrevious, canBackfillNext };\n}\n\nfunction nativePagePairCanBackfill(\n page: HTMLElement,\n nextPage: HTMLElement,\n body: HTMLElement,\n nextBody: HTMLElement,\n doc: NativeWordDocument,\n): boolean {\n if (cannotReceivePreviousPageContent(page, nextPage, doc)) return false;\n const available = Math.max(0, Math.round(body.getBoundingClientRect().height) - nativeBodyContentBottom(body));\n if (available <= 0) return false;\n\n const sourceTable = body.lastElementChild;\n const targetTable = nextBody.firstElementChild;\n if (\n sourceTable instanceof HTMLElement &&\n targetTable instanceof HTMLElement &&\n sourceTable.matches('coco-word-native-table') &&\n targetTable.matches('coco-word-native-table') &&\n sourceTable.dataset.tableId === targetTable.dataset.tableId\n ) {\n const targetRows = Array.from(\n targetTable.querySelectorAll<HTMLTableRowElement>(':scope > table > tbody > tr'),\n ).filter((row) => row.dataset.repeatedHeader !== 'true');\n const rowGroup = groupTableRowsForPagination(targetRows)[0];\n if (rowGroup && !tableRowGroupStartsWithHeader(rowGroup) && tableRowGroupHeight(rowGroup) <= available + 8) {\n return true;\n }\n }\n\n const candidates = leadingIncrementalBlockGroup(nextBody);\n if (candidates.length === 0 || !canBackfillIncrementalBlock(body, candidates[0]!, doc)) return false;\n return incrementalBlockGroupHeight(candidates) <= available + 8;\n}\n\nfunction incrementalBlockGroupHeight(blocks: HTMLElement[]): number {\n return blocks.reduce((height, block) => {\n const style = window.getComputedStyle(block);\n const marginTop = Number.parseFloat(style.marginTop) || 0;\n const marginBottom = Number.parseFloat(style.marginBottom) || 0;\n return height + block.getBoundingClientRect().height + marginTop + marginBottom;\n }, 0);\n}\n\nexport function rebuildNativeTableFragmentsFromParagraph(\n root: HTMLElement,\n doc: NativeWordDocument,\n paraId: string,\n): boolean {\n const paragraph = root.querySelector<HTMLElement>(\n `coco-word-native-page-body coco-word-native-p[data-para-id=\"${paraId}\"]`,\n );\n const startPage = paragraph?.closest<HTMLElement>('coco-word-native-page');\n const pages = directNativePages(root);\n const startPageIndex = startPage ? pages.indexOf(startPage) : -1;\n if (startPageIndex < 0) return false;\n\n let rebuilt = false;\n for (const block of doc.blocks) {\n if (block.kind !== 'table') continue;\n const fragments = Array.from(\n root.querySelectorAll<HTMLElement>(`coco-word-native-table[data-table-id=\"${block.tableId}\"]`),\n );\n const first = fragments[0];\n const firstPage = first?.closest<HTMLElement>('coco-word-native-page');\n if (!first || !firstPage || pages.indexOf(firstPage) < startPageIndex) continue;\n first.replaceWith(renderNativeTable(block));\n for (const fragment of fragments.slice(1)) fragment.remove();\n rebuilt = true;\n }\n return rebuilt;\n}\n\nfunction directNativePages(root: HTMLElement): HTMLElement[] {\n return Array.from(root.children).filter(\n (child): child is HTMLElement =>\n child instanceof HTMLElement && child.tagName.toLowerCase() === 'coco-word-native-page',\n );\n}\n\nfunction nativePageBody(page: HTMLElement): HTMLElement | null {\n return page.querySelector<HTMLElement>(':scope > coco-word-native-page-body');\n}\n\nfunction nativePageBodyOverflows(body: HTMLElement, tolerance = 1): boolean {\n const limit = Math.max(120, Math.round(body.getBoundingClientRect().height));\n return body.scrollHeight > limit + tolerance;\n}\n\nfunction trailingIncrementalBlockGroup(body: HTMLElement): HTMLElement[] {\n const last = body.lastElementChild;\n if (!(last instanceof HTMLElement)) return [];\n const moving = [last];\n const previous = last.previousElementSibling;\n if (previous instanceof HTMLElement && previous.matches('coco-word-native-p[data-keep-next=\"true\"]')) {\n moving.unshift(previous);\n }\n return moving;\n}\n\nfunction leadingIncrementalBlockGroup(body: HTMLElement): HTMLElement[] {\n const first = body.firstElementChild;\n if (!(first instanceof HTMLElement)) return [];\n const moving = [first];\n const next = first.nextElementSibling;\n if (first.matches('coco-word-native-p[data-keep-next=\"true\"]') && next instanceof HTMLElement) moving.push(next);\n return moving;\n}\n\nfunction moveTrailingIncrementalTableRows(\n root: HTMLElement,\n doc: NativeWordDocument,\n page: HTMLElement,\n existingNextPage: HTMLElement | undefined,\n templates: { headers: HTMLElement[]; footers: HTMLElement[] },\n): boolean {\n const body = nativePageBody(page);\n const sourceBlock = body?.lastElementChild;\n if (!(sourceBlock instanceof HTMLElement) || !sourceBlock.matches('coco-word-native-table')) return false;\n const sourceTable = sourceBlock.querySelector<HTMLTableElement>(':scope > table');\n const sourceBody = sourceTable?.querySelector<HTMLTableSectionElement>(':scope > tbody');\n if (!sourceTable || !sourceBody) return false;\n const rows = Array.from(sourceBody.children).filter(isTableRow);\n const dataRows = rows.filter((row) => row.dataset.repeatedHeader !== 'true');\n const groups = groupTableRowsForPagination(dataRows);\n if (groups.length < 2) return false;\n const moving = groups[groups.length - 1]!;\n if (tableRowGroupStartsWithHeader(moving)) return false;\n\n let nextPage = existingNextPage;\n if (!nextPage || cannotReceivePreviousPageContent(page, nextPage, doc)) {\n nextPage = insertIncrementalNativePage(root, doc, page, nextPage, templates);\n }\n const nextBody = nativePageBody(nextPage);\n if (!nextBody) return false;\n const tableId = sourceBlock.dataset.tableId;\n let targetBlock = Array.from(nextBody.children).find(\n (child): child is HTMLElement =>\n child instanceof HTMLElement &&\n child.matches('coco-word-native-table') &&\n child.dataset.tableId === tableId,\n );\n if (!targetBlock) {\n targetBlock = createNativeTableChunk(sourceBlock, sourceTable);\n nextBody.insertBefore(targetBlock, nextBody.firstChild);\n const targetBody = targetBlock.querySelector<HTMLTableSectionElement>(':scope > table > tbody');\n if (targetBody) appendClonedTableHeaderRows(targetBody, tableHeaderRowsForIncrementalTable(root, tableId));\n }\n const targetBody = targetBlock.querySelector<HTMLTableSectionElement>(':scope > table > tbody');\n if (!targetBody) return false;\n const insertionPoint = Array.from(targetBody.children).find(\n (row) => row instanceof HTMLTableRowElement && row.dataset.repeatedHeader !== 'true',\n );\n removeTableRowGroup(sourceBody, moving);\n for (const row of moving) targetBody.insertBefore(row, insertionPoint ?? null);\n return true;\n}\n\nfunction backfillIncrementalTableRows(body: HTMLElement, nextBody: HTMLElement): boolean {\n const sourceBlock = body.lastElementChild;\n const targetBlock = nextBody.firstElementChild;\n if (\n !(sourceBlock instanceof HTMLElement) ||\n !(targetBlock instanceof HTMLElement) ||\n !sourceBlock.matches('coco-word-native-table') ||\n !targetBlock.matches('coco-word-native-table') ||\n sourceBlock.dataset.tableId !== targetBlock.dataset.tableId\n ) {\n return false;\n }\n const sourceBody = sourceBlock.querySelector<HTMLTableSectionElement>(':scope > table > tbody');\n const targetBody = targetBlock.querySelector<HTMLTableSectionElement>(':scope > table > tbody');\n if (!sourceBody || !targetBody) return false;\n const dataRows = Array.from(targetBody.children)\n .filter(isTableRow)\n .filter((row) => row.dataset.repeatedHeader !== 'true');\n const moving = groupTableRowsForPagination(dataRows)[0];\n if (!moving || tableRowGroupStartsWithHeader(moving)) return false;\n const restoreBefore = moving[moving.length - 1]?.nextElementSibling ?? null;\n appendTableRowGroup(sourceBody, moving);\n if (nativePageBodyOverflows(body, 8)) {\n for (const row of moving) targetBody.insertBefore(row, restoreBefore);\n return false;\n }\n if (targetBody.querySelector('tr:not([data-repeated-header=\"true\"])') === null) targetBlock.remove();\n return true;\n}\n\nfunction tableHeaderRowsForIncrementalTable(root: HTMLElement, tableId: string | undefined): HTMLTableRowElement[] {\n if (!tableId) return [];\n const table = Array.from(root.querySelectorAll<HTMLElement>('coco-word-native-table')).find(\n (candidate) => candidate.dataset.tableId === tableId && candidate.querySelector('tr[data-repeat-header=\"true\"]'),\n );\n return table ? Array.from(table.querySelectorAll<HTMLTableRowElement>('tr[data-repeat-header=\"true\"]')) : [];\n}\n\nfunction cannotReceivePreviousPageContent(\n page: HTMLElement,\n nextPage: HTMLElement,\n doc: NativeWordDocument,\n): boolean {\n if (page.dataset.sectionIndex !== nextPage.dataset.sectionIndex) return true;\n const body = nativePageBody(page);\n const nextBody = nativePageBody(nextPage);\n const last = body?.lastElementChild;\n const first = nextBody?.firstElementChild;\n if (first instanceof HTMLElement && shouldStartBlockOnNewPage(first)) return true;\n if (!(last instanceof HTMLElement)) return false;\n if (last.querySelector('.coco-word-page-break')) return true;\n const breakType = sectionBreakTypeAfterBlock(last, doc);\n return breakType !== null && breakType !== 'continuous' && breakType !== 'nextColumn';\n}\n\nfunction canBackfillIncrementalBlock(body: HTMLElement, candidate: HTMLElement, doc: NativeWordDocument): boolean {\n if (shouldStartBlockOnNewPage(candidate)) return false;\n const last = body.lastElementChild;\n if (!(last instanceof HTMLElement)) return true;\n if (last.querySelector('.coco-word-page-break')) return false;\n const breakType = sectionBreakTypeAfterBlock(last, doc);\n return breakType === null || breakType === 'continuous' || breakType === 'nextColumn';\n}\n\nfunction collectIncrementalStoryTemplates(root: HTMLElement): { headers: HTMLElement[]; footers: HTMLElement[] } {\n const seen = new Set<string>();\n const headers: HTMLElement[] = [];\n const footers: HTMLElement[] = [];\n for (const story of Array.from(root.querySelectorAll<HTMLElement>(':scope > coco-word-native-page > coco-word-native-story'))) {\n const kind = story.dataset.storyKind;\n const key = `${kind ?? ''}:${story.dataset.partName ?? ''}`;\n if (seen.has(key)) continue;\n seen.add(key);\n if (kind === 'header') headers.push(story);\n if (kind === 'footer') footers.push(story);\n }\n return { headers, footers };\n}\n\nfunction insertIncrementalNativePage(\n root: HTMLElement,\n doc: NativeWordDocument,\n sourcePage: HTMLElement,\n beforePage: HTMLElement | undefined,\n templates: { headers: HTMLElement[]; footers: HTMLElement[] },\n): HTMLElement {\n const pages = directNativePages(root);\n const sourceIndex = pages.indexOf(sourcePage);\n const sectionIndex = parseNonNegativeInt(sourcePage.dataset.sectionIndex, 0);\n const sectionPageNumber =\n pages.slice(0, sourceIndex + 1).filter((page) => parseNonNegativeInt(page.dataset.sectionIndex, 0) === sectionIndex)\n .length + 1;\n const page = appendNativePage(\n root,\n doc,\n pageLayoutForSection(doc, sectionIndex, doc.pageLayout!),\n templates.headers,\n templates.footers,\n sourceIndex + 2,\n sectionIndex,\n sectionPageNumber,\n );\n if (beforePage) root.insertBefore(page, beforePage);\n return page;\n}\n\nfunction refreshIncrementalPageChrome(\n root: HTMLElement,\n doc: NativeWordDocument,\n templates: { headers: HTMLElement[]; footers: HTMLElement[] },\n): void {\n for (const page of directNativePages(root)) {\n const pageNumber = parseNonNegativeInt(page.dataset.pageNumber, 1);\n const sectionIndex = parseNonNegativeInt(page.dataset.sectionIndex, 0);\n const sectionPageNumber = parseNonNegativeInt(page.dataset.sectionPageNumber, 1);\n refreshNativePageChrome(\n page,\n doc,\n pageLayoutForSection(doc, sectionIndex, doc.pageLayout!),\n templates.headers,\n templates.footers,\n pageNumber,\n sectionIndex,\n sectionPageNumber,\n );\n }\n}\n\nfunction shouldStartBlockOnNewPage(block: HTMLElement): boolean {\n return block.matches('coco-word-native-p[data-page-break-before=\"true\"]');\n}\n\nfunction previousKeepNextBlock(body: HTMLElement, block: HTMLElement): HTMLElement | null {\n const previous = block.previousElementSibling;\n if (!(previous instanceof HTMLElement)) return null;\n if (!previous.matches('coco-word-native-p[data-keep-next=\"true\"]')) return null;\n return previous.previousElementSibling instanceof HTMLElement ? previous : null;\n}\n\nfunction sectionBreakTypeAfterBlock(\n block: HTMLElement,\n doc: NativeWordDocument,\n): NonNullable<NativeWordDocument['sections'][number]['type']> | 'nextPage' | null {\n if (!block.matches('coco-word-native-p[data-section-break=\"true\"]')) return null;\n const paraId = block.dataset.paraId;\n if (!paraId) return 'nextPage';\n const section = doc.sections.find((item) => item.lastParaId === paraId);\n return section?.type ?? 'nextPage';\n}\n\nfunction sectionIndexAfterBlock(block: HTMLElement, doc: NativeWordDocument): number | null {\n const section = doc.sections.find((item) => item.lastParaId && blockContainsParagraph(block, item.lastParaId));\n if (!section) return null;\n return Math.min(section.sectionIndex + 1, Math.max(0, doc.sections.length - 1));\n}\n\nfunction sectionIndexForBlock(block: HTMLElement, doc: NativeWordDocument): number | null {\n if (doc.sections.length === 0) return null;\n const paraIds = paragraphIdsInBlock(block);\n if (paraIds.length === 0) return null;\n const directFirstMatch = doc.sections.find((section) => paraIds.includes(section.firstParaId));\n if (directFirstMatch) return directFirstMatch.sectionIndex;\n const directLastMatch = doc.sections.find((section) => paraIds.includes(section.lastParaId));\n if (directLastMatch) return directLastMatch.sectionIndex;\n return null;\n}\n\nfunction blockContainsParagraph(block: HTMLElement, paraId: string): boolean {\n return paragraphIdsInBlock(block).includes(paraId);\n}\n\nfunction paragraphIdsInBlock(block: HTMLElement): string[] {\n if (block.matches('coco-word-native-p')) {\n const paraId = block.dataset.paraId;\n return paraId ? [paraId] : [];\n }\n return Array.from(block.querySelectorAll<HTMLElement>('coco-word-native-p'))\n .map((paragraph) => paragraph.dataset.paraId)\n .filter((paraId): paraId is string => paraId !== undefined && paraId.length > 0);\n}\n\nfunction advanceAfterForcedBreak(\n nextPage: () => HTMLElement,\n sectionBreakType: NonNullable<NativeWordDocument['sections'][number]['type']> | 'nextPage' | null,\n): void {\n if (sectionBreakType === 'continuous' || sectionBreakType === 'nextColumn') return;\n const nextBody = nextPage();\n const page = nextBody.closest('coco-word-native-page');\n const pageNumber = Number(page?.getAttribute('data-page-number') ?? '0');\n if (sectionBreakType === 'oddPage' && pageNumber % 2 === 0) nextPage();\n if (sectionBreakType === 'evenPage' && pageNumber % 2 === 1) nextPage();\n}\n\n/**\n * Keep ordinary paragraphs flowing across pages. Word's widow control only\n * limits orphan lines; it does not make a paragraph an indivisible block.\n */\nfunction splitNativeParagraphToFitCurrentPage(\n block: HTMLElement,\n body: HTMLElement,\n bodyLimit: () => number,\n): HTMLElement | null {\n if (!block.matches('coco-word-native-p')) return null;\n if (block.dataset.keepLines === 'true' || block.dataset.pageBreakBefore === 'true') return null;\n if (\n block.querySelector(\n 'img, coco-word-native-drawing, coco-word-native-table, .coco-word-page-break, .coco-word-tab-row',\n )\n ) {\n return null;\n }\n\n const total = textLengthOfNode(block);\n if (total < 2) return null;\n\n let best: { head: HTMLElement; tail: HTMLElement } | null = null;\n let low = 1;\n let high = total - 1;\n while (low <= high) {\n const offset = Math.floor((low + high) / 2);\n const split = splitElementByTextOffset(block, offset);\n if (!split || textLengthOfNode(split.head) === 0 || textLengthOfNode(split.tail) === 0) {\n high = offset - 1;\n continue;\n }\n body.appendChild(split.head);\n if (body.scrollHeight <= bodyLimit()) {\n if (best?.head.parentElement === body) body.removeChild(best.head);\n best = split;\n low = offset + 1;\n } else {\n body.removeChild(split.head);\n high = offset - 1;\n }\n }\n\n if (!best || best.head.parentElement !== body) return null;\n return best.tail;\n}\n\nfunction splitNativeTableAcrossPages(\n block: HTMLElement,\n currentBody: HTMLElement,\n bodyLimit: () => number,\n nextPage: () => HTMLElement,\n): boolean {\n if (block.tagName.toLowerCase() !== 'coco-word-native-table') return false;\n const table = block.querySelector(':scope > table');\n const sourceBody = table?.querySelector(':scope > tbody');\n const rows = sourceBody ? Array.from(sourceBody.children).filter(isTableRow) : [];\n const rowGroups = groupTableRowsForPagination(rows);\n if (!table || rowGroups.length < 2) return false;\n let targetBody = currentBody;\n let chunk = createNativeTableChunk(block, table);\n let chunkBody = chunk.querySelector('tbody') as HTMLTableSectionElement;\n const headerRows = rows.filter((row) => row.dataset.repeatHeader === 'true');\n const maxDataGroupsPerChunk = maxTableDataGroupsPerChunk(rowGroups, headerRows);\n let dataGroupsInChunk = 0;\n targetBody.appendChild(chunk);\n for (const group of rowGroups) {\n const startsWithHeader = tableRowGroupStartsWithHeader(group);\n if (!startsWithHeader && dataGroupsInChunk >= maxDataGroupsPerChunk) {\n targetBody = nextPage();\n chunk = createNativeTableChunk(block, table);\n chunkBody = chunk.querySelector('tbody') as HTMLTableSectionElement;\n targetBody.appendChild(chunk);\n appendClonedTableHeaderRows(chunkBody, headerRows);\n dataGroupsInChunk = 0;\n }\n appendTableRowGroup(chunkBody, group);\n if (!startsWithHeader) dataGroupsInChunk += 1;\n if (targetBody.children.length <= 1 && chunkBody.children.length <= group.length) continue;\n if (targetBody.scrollHeight <= bodyLimit()) continue;\n removeTableRowGroup(chunkBody, group);\n if (!startsWithHeader) dataGroupsInChunk = Math.max(0, dataGroupsInChunk - 1);\n const rowSplitTail = splitTableRowGroupByRowsToFitCurrentPage(chunkBody, group, targetBody, bodyLimit());\n const splitTail = rowSplitTail ?? splitTableRowGroupByBlocksToFitCurrentPage(chunkBody, group, targetBody, bodyLimit());\n const textSplitTail = splitTail ?? splitTableRowGroupByTextToFitCurrentPage(chunkBody, group, targetBody, bodyLimit());\n if (textSplitTail) {\n if (!startsWithHeader) dataGroupsInChunk += 1;\n targetBody = nextPage();\n chunk = createNativeTableChunk(block, table);\n chunkBody = chunk.querySelector('tbody') as HTMLTableSectionElement;\n targetBody.appendChild(chunk);\n dataGroupsInChunk = 0;\n appendClonedTableHeaderRows(chunkBody, headerRows);\n appendTableRowGroup(chunkBody, textSplitTail);\n if (!startsWithHeader) dataGroupsInChunk = 1;\n continue;\n }\n if (chunkBody.children.length === 0) targetBody.removeChild(chunk);\n targetBody = nextPage();\n chunk = createNativeTableChunk(block, table);\n chunkBody = chunk.querySelector('tbody') as HTMLTableSectionElement;\n targetBody.appendChild(chunk);\n dataGroupsInChunk = 0;\n if (!startsWithHeader) appendClonedTableHeaderRows(chunkBody, headerRows);\n appendTableRowGroup(chunkBody, group);\n if (!startsWithHeader) dataGroupsInChunk = 1;\n }\n return true;\n}\n\nfunction maxTableDataGroupsPerChunk(\n rowGroups: HTMLTableRowElement[][],\n headerRows: HTMLTableRowElement[],\n): number {\n const dataGroupCount = rowGroups.filter((group) => !tableRowGroupStartsWithHeader(group)).length;\n if (headerRows.length === 0 || dataGroupCount < 30) return Number.POSITIVE_INFINITY;\n return 8;\n}\n\nfunction splitNativeTableTailForBottomReserve(\n block: HTMLElement,\n currentBody: HTMLElement,\n bodyLimit: () => number,\n nextPage: () => HTMLElement,\n isFinalBodyBlock: boolean,\n): boolean {\n const limit = bodyLimit();\n const remaining = limit - nativeBodyContentBottom(currentBody);\n const reserve = tableBottomReservePx(block, limit);\n if (remaining >= reserve) return false;\n if (isFinalBodyBlock && isShortFlexFilledTablePage(currentBody, limit)) return false;\n const table = block.querySelector(':scope > table');\n const sourceBody = table?.querySelector<HTMLTableSectionElement>(':scope > tbody');\n const rows = sourceBody ? Array.from(sourceBody.children).filter(isTableRow) : [];\n const rowGroups = groupTableRowsForPagination(rows);\n if (!table || !sourceBody || rowGroups.length < 4) return false;\n\n const headerRows = rows.filter((row) => row.dataset.repeatHeader === 'true');\n const initialRemaining = remaining;\n let recoveredHeight = 0;\n const movedGroups: HTMLTableRowElement[][] = [];\n while (rowGroups.length > 1 && initialRemaining + recoveredHeight < reserve) {\n const group = rowGroups.pop();\n if (!group || tableRowGroupStartsWithHeader(group)) break;\n recoveredHeight += tableRowGroupHeight(group);\n removeTableRowGroup(sourceBody, group);\n movedGroups.unshift(group);\n }\n if (movedGroups.length === 0) return false;\n\n const targetBody = nextPage();\n const chunk = createNativeTableChunk(block, table);\n const chunkBody = chunk.querySelector('tbody') as HTMLTableSectionElement;\n targetBody.appendChild(chunk);\n if (!tableRowGroupStartsWithHeader(movedGroups[0] ?? [])) appendClonedTableHeaderRows(chunkBody, headerRows);\n for (const group of movedGroups) appendTableRowGroup(chunkBody, group);\n return true;\n}\n\nfunction tableRowGroupHeight(group: HTMLTableRowElement[]): number {\n return group.reduce((height, row) => height + row.getBoundingClientRect().height, 0);\n}\n\nfunction splitTableRowGroupByRowsToFitCurrentPage(\n target: HTMLTableSectionElement,\n group: HTMLTableRowElement[],\n targetBody: HTMLElement,\n limit: number,\n): HTMLTableRowElement[] | null {\n if (!target.closest('coco-word-native-document.uses-rowspan-table-group-splitting')) return null;\n if (group.length < 2) return null;\n if (group.some((row) => row.dataset.repeatHeader === 'true' || row.dataset.cantSplit === 'true')) return null;\n\n let best: { head: HTMLTableRowElement[]; tail: HTMLTableRowElement[] } | null = null;\n for (let splitIndex = 1; splitIndex < group.length; splitIndex += 1) {\n const split = splitTableRowGroupAtIndex(group, splitIndex);\n if (!split) continue;\n if (best) removeTableRowGroup(target, best.head);\n for (const row of split.head) target.appendChild(row);\n if (targetBody.scrollHeight <= limit) {\n best = split;\n } else {\n removeTableRowGroup(target, split.head);\n if (best) appendTableRowGroup(target, best.head);\n break;\n }\n }\n if (!best) return null;\n return best.tail;\n}\n\nfunction splitTableRowGroupAtIndex(\n group: HTMLTableRowElement[],\n splitIndex: number,\n): { head: HTMLTableRowElement[]; tail: HTMLTableRowElement[] } | null {\n if (splitIndex <= 0 || splitIndex >= group.length) return null;\n const slots = tableRowGroupCellSlots(group);\n const head = group.slice(0, splitIndex).map((row) => row.cloneNode(true) as HTMLTableRowElement);\n const tail = group.slice(splitIndex).map((row) => row.cloneNode(true) as HTMLTableRowElement);\n const continuations = slots.filter((slot) => slot.row < splitIndex && slot.row + slot.rowSpan > splitIndex);\n if (continuations.length === 0) return null;\n\n for (const slot of continuations) {\n const headRow = head[slot.row];\n const headCell = headRow?.cells[slot.cellIndex];\n if (headCell) headCell.rowSpan = splitIndex - slot.row;\n\n const continuation = slot.cell.cloneNode(false) as HTMLTableCellElement;\n continuation.rowSpan = slot.row + slot.rowSpan - splitIndex;\n continuation.colSpan = slot.colSpan;\n continuation.dataset.rowFragmentContinuation = 'true';\n continuation.classList.add('is-rowspan-continuation');\n insertTableCellAtColumn(tail[0]!, continuation, slot.column, slots, splitIndex);\n }\n return { head, tail };\n}\n\ninterface TableCellSlot {\n row: number;\n cellIndex: number;\n column: number;\n colSpan: number;\n rowSpan: number;\n cell: HTMLTableCellElement;\n}\n\nfunction tableRowGroupCellSlots(group: HTMLTableRowElement[]): TableCellSlot[] {\n const slots: TableCellSlot[] = [];\n const activeSpans: number[] = [];\n for (let rowIndex = 0; rowIndex < group.length; rowIndex += 1) {\n const row = group[rowIndex]!;\n let column = 0;\n for (let cellIndex = 0; cellIndex < row.cells.length; cellIndex += 1) {\n while ((activeSpans[column] ?? 0) > rowIndex) column += 1;\n const cell = row.cells[cellIndex]!;\n const colSpan = Math.max(1, cell.colSpan);\n const rowSpan = Math.max(1, cell.rowSpan);\n slots.push({ row: rowIndex, cellIndex, column, colSpan, rowSpan, cell });\n for (let offset = 0; offset < colSpan; offset += 1) {\n activeSpans[column + offset] = Math.max(activeSpans[column + offset] ?? 0, rowIndex + rowSpan);\n }\n column += colSpan;\n }\n }\n return slots;\n}\n\nfunction insertTableCellAtColumn(\n row: HTMLTableRowElement,\n cell: HTMLTableCellElement,\n column: number,\n slots: TableCellSlot[],\n sourceRowIndex: number,\n): void {\n const rowSlots = slots\n .filter((slot) => slot.row === sourceRowIndex)\n .sort((a, b) => a.column - b.column);\n const beforeSlot = rowSlots.find((slot) => slot.column > column);\n const beforeCell = beforeSlot ? row.cells[beforeSlot.cellIndex] : null;\n row.insertBefore(cell, beforeCell ?? null);\n}\n\nfunction splitTableRowGroupByBlocksToFitCurrentPage(\n target: HTMLTableSectionElement,\n group: HTMLTableRowElement[],\n targetBody: HTMLElement,\n limit: number,\n): HTMLTableRowElement[] | null {\n if (group.length !== 1) return null;\n const row = group[0]!;\n if (!canSplitTableRowByBlocks(row)) return null;\n\n let best: { head: HTMLTableRowElement; tail: HTMLTableRowElement } | null = null;\n let low = 0;\n let high = 1;\n for (let attempt = 0; attempt < 8; attempt += 1) {\n const ratio = (low + high) / 2;\n const split = splitTableRowByBlockRatio(row, ratio);\n if (!split) {\n high = ratio;\n continue;\n }\n target.appendChild(split.head);\n if (targetBody.scrollHeight <= limit) {\n if (best?.head.parentElement === target) target.removeChild(best.head);\n best = split;\n low = ratio;\n } else {\n target.removeChild(split.head);\n high = ratio;\n }\n }\n if (!best || best.head.parentElement !== target) return null;\n return [best.tail];\n}\n\nfunction splitTableRowGroupByTextToFitCurrentPage(\n target: HTMLTableSectionElement,\n group: HTMLTableRowElement[],\n targetBody: HTMLElement,\n limit: number,\n): HTMLTableRowElement[] | null {\n if (group.length !== 1) return null;\n const row = group[0]!;\n if (!canSplitTableRowByText(row)) return null;\n\n let best: { head: HTMLTableRowElement; tail: HTMLTableRowElement } | null = null;\n let low = 0;\n let high = 1;\n for (let attempt = 0; attempt < 9; attempt += 1) {\n const ratio = (low + high) / 2;\n const split = splitTableRowByTextRatio(row, ratio);\n if (!split) {\n high = ratio;\n continue;\n }\n target.appendChild(split.head);\n if (targetBody.scrollHeight <= limit) {\n if (best?.head.parentElement === target) target.removeChild(best.head);\n best = split;\n low = ratio;\n } else {\n target.removeChild(split.head);\n high = ratio;\n }\n }\n if (!best || best.head.parentElement !== target) return null;\n return [best.tail];\n}\n\nfunction canSplitTableRowByText(row: HTMLTableRowElement): boolean {\n if (row.dataset.repeatHeader === 'true' || row.dataset.cantSplit === 'true') return false;\n if (Array.from(row.cells).some((cell) => cell.rowSpan > 1 || cell.colSpan > 1)) return false;\n const cells = Array.from(row.cells);\n if (cells.some((cell) => tableCellHasHardSplitContent(cell))) return false;\n if (tableRowAllowsStaticCellSplits(row)) return cells.some((cell) => canSplitTableCellByText(cell));\n return cells.every((cell) => canSplitTableCellByText(cell));\n}\n\nfunction splitTableRowByTextRatio(\n row: HTMLTableRowElement,\n ratio: number,\n): { head: HTMLTableRowElement; tail: HTMLTableRowElement } | null {\n const head = cloneTableRowForTextSplit(row);\n const tail = cloneTableRowForTextSplit(row);\n for (const cell of Array.from(row.cells)) {\n const split = splitTableCellByTextRatio(cell, ratio);\n if (!split) return null;\n head.appendChild(split.head);\n tail.appendChild(split.tail);\n }\n return { head, tail };\n}\n\nfunction splitTableCellByTextRatio(\n cell: HTMLTableCellElement,\n ratio: number,\n): { head: HTMLTableCellElement; tail: HTMLTableCellElement } | null {\n if (!canSplitTableCellByText(cell)) return splitStaticTableCell(cell);\n const paragraph = Array.from(cell.children).find(\n (child): child is HTMLElement => child instanceof HTMLElement && child.tagName.toLowerCase() === 'coco-word-native-p',\n );\n if (!paragraph) return null;\n const textLength = textLengthOfNode(paragraph);\n const offset = Math.max(1, Math.min(textLength - 1, Math.round(textLength * ratio)));\n const split = splitElementByTextOffset(paragraph, offset);\n if (!split || textLengthOfNode(split.head) === 0 || textLengthOfNode(split.tail) === 0) return null;\n const head = cell.cloneNode(false) as HTMLTableCellElement;\n const tail = cell.cloneNode(false) as HTMLTableCellElement;\n head.appendChild(split.head);\n tail.appendChild(split.tail);\n return { head, tail };\n}\n\nfunction splitElementByTextOffset(element: HTMLElement, offset: number): { head: HTMLElement; tail: HTMLElement } | null {\n const total = textLengthOfNode(element);\n if (!Number.isInteger(offset) || offset <= 0 || offset >= total) return null;\n const head = element.cloneNode(false) as HTMLElement;\n const tail = element.cloneNode(false) as HTMLElement;\n splitChildNodesByTextOffset(Array.from(element.childNodes), offset, head, tail);\n head.dataset.splitFragment = 'head';\n tail.dataset.splitFragment = 'tail';\n return { head, tail };\n}\n\nfunction splitChildNodesByTextOffset(\n nodes: Node[],\n offset: number,\n headParent: Node,\n tailParent: Node,\n): void {\n let remaining = offset;\n for (const node of nodes) {\n const length = textLengthOfNode(node);\n if (length === 0) {\n if (remaining > 0) headParent.appendChild(node.cloneNode(true));\n else tailParent.appendChild(node.cloneNode(true));\n continue;\n }\n if (length <= remaining) {\n headParent.appendChild(node.cloneNode(true));\n remaining -= length;\n continue;\n }\n if (remaining <= 0) {\n tailParent.appendChild(node.cloneNode(true));\n continue;\n }\n splitNodeAcrossParents(node, remaining, headParent, tailParent);\n remaining = 0;\n }\n}\n\nfunction splitNodeAcrossParents(node: Node, offset: number, headParent: Node, tailParent: Node): void {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent ?? '';\n headParent.appendChild(document.createTextNode(text.slice(0, offset)));\n tailParent.appendChild(document.createTextNode(text.slice(offset)));\n return;\n }\n if (!(node instanceof HTMLElement)) return;\n const head = node.cloneNode(false) as HTMLElement;\n const tail = node.cloneNode(false) as HTMLElement;\n splitChildNodesByTextOffset(Array.from(node.childNodes), offset, head, tail);\n if (textLengthOfNode(head) > 0) headParent.appendChild(head);\n if (textLengthOfNode(tail) > 0) tailParent.appendChild(tail);\n}\n\nfunction textLengthOfNode(node: Node): number {\n if (node.nodeType === Node.TEXT_NODE) return node.textContent?.length ?? 0;\n return Array.from(node.childNodes).reduce((length, child) => length + textLengthOfNode(child), 0);\n}\n\nfunction canSplitTableRowByBlocks(row: HTMLTableRowElement): boolean {\n if (row.dataset.repeatHeader === 'true' || row.dataset.cantSplit === 'true') return false;\n if (Array.from(row.cells).some((cell) => cell.rowSpan > 1 || cell.colSpan > 1)) return false;\n const cells = Array.from(row.cells);\n if (cells.some((cell) => tableCellHasHardSplitContent(cell))) return false;\n if (tableRowAllowsStaticCellSplits(row)) return cells.some((cell) => canSplitTableCellByBlocks(cell));\n return cells.every((cell) => canSplitTableCellByBlocks(cell));\n}\n\nfunction splitTableRowByBlockRatio(\n row: HTMLTableRowElement,\n ratio: number,\n): { head: HTMLTableRowElement; tail: HTMLTableRowElement } | null {\n const head = cloneTableRowForBlockSplit(row);\n const tail = cloneTableRowForBlockSplit(row);\n for (const cell of Array.from(row.cells)) {\n const split = splitTableCellByBlockRatio(cell, ratio);\n if (!split) return null;\n head.appendChild(split.head);\n tail.appendChild(split.tail);\n }\n return { head, tail };\n}\n\nfunction splitTableCellByBlockRatio(\n cell: HTMLTableCellElement,\n ratio: number,\n): { head: HTMLTableCellElement; tail: HTMLTableCellElement } | null {\n if (!canSplitTableCellByBlocks(cell)) return splitStaticTableCell(cell);\n const blocks = Array.from(cell.childNodes).filter((node): node is HTMLElement => node instanceof HTMLElement);\n if (blocks.length < 2) return null;\n const pivot = Math.max(1, Math.min(blocks.length - 1, Math.round(blocks.length * ratio)));\n const head = cell.cloneNode(false) as HTMLTableCellElement;\n const tail = cell.cloneNode(false) as HTMLTableCellElement;\n for (let index = 0; index < blocks.length; index += 1) {\n const clone = blocks[index]!.cloneNode(true);\n if (index < pivot) head.appendChild(clone);\n else tail.appendChild(clone);\n }\n return { head, tail };\n}\n\nfunction tableCellHasHardSplitContent(cell: HTMLTableCellElement): boolean {\n return (\n cell.querySelector(\n 'coco-word-native-drawing, coco-word-native-table, .coco-word-native-field, .coco-word-page-break, .coco-word-comment, .coco-word-revision-delete, .coco-word-revision-insert',\n ) !== null\n );\n}\n\nfunction tableRowAllowsStaticCellSplits(row: HTMLTableRowElement): boolean {\n return row.closest('coco-word-native-document')?.classList.contains('uses-natural-paragraph-flow') === true;\n}\n\nfunction canSplitTableCellByBlocks(cell: HTMLTableCellElement): boolean {\n return Array.from(cell.childNodes).filter((node) => node instanceof HTMLElement).length >= 2;\n}\n\nfunction canSplitTableCellByText(cell: HTMLTableCellElement): boolean {\n if (cell.querySelector('img')) return false;\n const blocks = Array.from(cell.children).filter((child): child is HTMLElement => child instanceof HTMLElement);\n return blocks.length === 1 && blocks[0]!.tagName.toLowerCase() === 'coco-word-native-p' && textLengthOfNode(blocks[0]!) > 1;\n}\n\nfunction splitStaticTableCell(cell: HTMLTableCellElement): { head: HTMLTableCellElement; tail: HTMLTableCellElement } {\n const head = cell.cloneNode(true) as HTMLTableCellElement;\n const tail = cell.cloneNode(false) as HTMLTableCellElement;\n tail.dataset.rowFragmentStatic = 'true';\n return { head, tail };\n}\n\nfunction cloneTableRowForBlockSplit(row: HTMLTableRowElement): HTMLTableRowElement {\n const clone = row.cloneNode(false) as HTMLTableRowElement;\n clone.dataset.rowFragment = 'block';\n clone.style.removeProperty('height');\n clone.style.removeProperty('--coco-word-row-height');\n delete clone.dataset.heightRule;\n return clone;\n}\n\nfunction cloneTableRowForTextSplit(row: HTMLTableRowElement): HTMLTableRowElement {\n const clone = row.cloneNode(false) as HTMLTableRowElement;\n clone.dataset.rowFragment = 'text';\n clone.style.removeProperty('height');\n clone.style.removeProperty('--coco-word-row-height');\n delete clone.dataset.heightRule;\n return clone;\n}\n\nfunction isShortFlexFilledTablePage(body: HTMLElement, limit: number): boolean {\n if (body.scrollHeight > limit + 1) return false;\n return nativeBodyContentHeight(body) <= limit * 0.75;\n}\n\nfunction nativeBodyContentHeight(body: HTMLElement): number {\n let height = 0;\n for (const child of Array.from(body.children)) {\n if (!(child instanceof HTMLElement)) continue;\n const rect = child.getBoundingClientRect();\n const style = window.getComputedStyle(child);\n const marginTop = Number.parseFloat(style.marginTop) || 0;\n const marginBottom = Number.parseFloat(style.marginBottom) || 0;\n height += rect.height + marginTop + marginBottom;\n }\n return height;\n}\n\nfunction nativeBodyContentBottom(body: HTMLElement): number {\n const bodyRect = body.getBoundingClientRect();\n let bottom = 0;\n for (const child of Array.from(body.children)) {\n if (!(child instanceof HTMLElement)) continue;\n const rect = child.getBoundingClientRect();\n const style = window.getComputedStyle(child);\n const marginBottom = Number.parseFloat(style.marginBottom) || 0;\n bottom = Math.max(bottom, rect.bottom - bodyRect.top + marginBottom);\n }\n return bottom;\n}\n\nfunction tableBottomReservePx(block: HTMLElement, bodyLimit: number): number {\n if (bodyLimit < 700) return 0;\n const rowCount = block.querySelectorAll('tr').length;\n const minRowsForReserve = block.closest('coco-word-native-document.uses-compact-latin-tables') ? 8 : 4;\n if (rowCount < minRowsForReserve) return 0;\n return 96;\n}\n\nfunction groupTableRowsForPagination(rows: HTMLTableRowElement[]): HTMLTableRowElement[][] {\n const groups: HTMLTableRowElement[][] = [];\n let start = 0;\n let end = 0;\n for (let index = 0; index < rows.length; index++) {\n end = Math.max(end, index);\n for (const cell of Array.from(rows[index]!.cells)) {\n end = Math.max(end, index + Math.max(1, cell.rowSpan) - 1);\n }\n if (index !== end) continue;\n groups.push(rows.slice(start, index + 1));\n start = index + 1;\n }\n if (start < rows.length) groups.push(rows.slice(start));\n return groups;\n}\n\nfunction appendTableRowGroup(target: HTMLTableSectionElement, group: HTMLTableRowElement[]): void {\n for (const row of group) target.appendChild(row);\n const table = target.closest<HTMLElement>('coco-word-native-table');\n if (table) markNativeTableEditable(table);\n}\n\nfunction tableRowGroupStartsWithHeader(group: HTMLTableRowElement[]): boolean {\n return group[0]?.dataset.repeatHeader === 'true';\n}\n\nfunction appendClonedTableHeaderRows(target: HTMLTableSectionElement, headerRows: HTMLTableRowElement[]): void {\n for (const row of headerRows) {\n const clone = row.cloneNode(true) as HTMLTableRowElement;\n clone.dataset.repeatedHeader = 'true';\n target.appendChild(clone);\n }\n const table = target.closest<HTMLElement>('coco-word-native-table');\n if (table) markNativeTableEditable(table);\n}\n\nfunction removeTableRowGroup(target: HTMLTableSectionElement, group: HTMLTableRowElement[]): void {\n for (const row of group) {\n if (row.parentElement === target) target.removeChild(row);\n }\n}\n\nfunction createNativeTableChunk(sourceBlock: HTMLElement, sourceTable: Element): HTMLElement {\n const block = sourceBlock.cloneNode(false) as HTMLElement;\n block.classList.add('is-table-fragment');\n const table = sourceTable.cloneNode(false) as HTMLElement;\n const colgroup = sourceTable.querySelector(':scope > colgroup');\n if (colgroup) table.appendChild(colgroup.cloneNode(true));\n table.appendChild(document.createElement('tbody'));\n block.appendChild(table);\n return block;\n}\n\nfunction markNativeTableEditable(table: HTMLElement): void {\n table.contentEditable = 'true';\n for (const cell of Array.from(table.querySelectorAll<HTMLTableCellElement>('td, th'))) {\n cell.contentEditable = 'true';\n }\n for (const paragraph of Array.from(table.querySelectorAll<HTMLElement>('coco-word-native-p'))) {\n paragraph.contentEditable = 'true';\n if (paragraph.childNodes.length === 0) paragraph.appendChild(document.createTextNode(''));\n }\n}\n\nfunction compactTrailingEmptyFlowPages(root: HTMLElement): void {\n while (true) {\n const pages = Array.from(root.querySelectorAll<HTMLElement>(':scope > coco-word-native-page'));\n if (pages.length < 2) return;\n const page = pages[pages.length - 1]!;\n if (!isEmptyFlowAnchorPage(page)) return;\n const previousPage = pages[pages.length - 2]!;\n const previousBody = previousPage.querySelector<HTMLElement>(':scope > coco-word-native-page-body');\n const body = page.querySelector<HTMLElement>(':scope > coco-word-native-page-body');\n const overlay = page.querySelector<HTMLElement>(':scope > .coco-word-native-page-overlay');\n const behindLayer = page.querySelector<HTMLElement>(':scope > .coco-word-native-page-behind-layer');\n if (!previousBody || !body || (!overlay && !behindLayer)) return;\n if (behindLayer) {\n const previousBehindLayer = ensureNativePageLayer(previousPage, 'behind');\n for (const anchor of Array.from(behindLayer.children)) previousBehindLayer.appendChild(anchor);\n }\n if (overlay) {\n const previousOverlay = ensureNativePageLayer(previousPage, 'front');\n for (const anchor of Array.from(overlay.children)) previousOverlay.appendChild(anchor);\n }\n for (const block of Array.from(body.children)) previousBody.appendChild(block);\n page.remove();\n }\n}\n\nfunction compactEmptyNativePages(root: HTMLElement): void {\n for (const page of Array.from(root.querySelectorAll<HTMLElement>('coco-word-native-page'))) {\n if (isEmptyNativePage(page)) page.remove();\n }\n}\n\nfunction isEmptyNativePage(page: HTMLElement): boolean {\n const body = page.querySelector<HTMLElement>(':scope > coco-word-native-page-body');\n if (!body || body.children.length > 0) return false;\n const pageLayerAnchorCount =\n (page.querySelector<HTMLElement>(':scope > .coco-word-native-page-overlay')?.children.length ?? 0) +\n (page.querySelector<HTMLElement>(':scope > .coco-word-native-page-behind-layer')?.children.length ?? 0);\n return pageLayerAnchorCount === 0;\n}\n\nfunction renumberNativePages(root: HTMLElement): void {\n const sectionPageCounts = new Map<number, number>();\n const pages = Array.from(root.querySelectorAll<HTMLElement>(':scope > coco-word-native-page'));\n pages.forEach((page, index) => {\n const sectionIndex = parseNonNegativeInt(page.dataset.sectionIndex, 0);\n const sectionPageNumber = (sectionPageCounts.get(sectionIndex) ?? 0) + 1;\n sectionPageCounts.set(sectionIndex, sectionPageNumber);\n page.dataset.pageNumber = String(index + 1);\n page.dataset.sectionPageNumber = String(sectionPageNumber);\n });\n}\n\nfunction isEmptyFlowAnchorPage(page: HTMLElement): boolean {\n const body = page.querySelector<HTMLElement>(':scope > coco-word-native-page-body');\n const overlay = page.querySelector<HTMLElement>(':scope > .coco-word-native-page-overlay');\n const behindLayer = page.querySelector<HTMLElement>(':scope > .coco-word-native-page-behind-layer');\n const pageLayerAnchorCount = (overlay?.children.length ?? 0) + (behindLayer?.children.length ?? 0);\n if (!body || pageLayerAnchorCount === 0) return false;\n const blocks = Array.from(body.children).filter((child): child is HTMLElement => child instanceof HTMLElement);\n if (blocks.length === 0) return false;\n return blocks.every(\n (block) =>\n block.matches('coco-word-native-p.is-flow-empty') &&\n (block.textContent ?? '').trim().length === 0 &&\n block.getBoundingClientRect().height <= 1,\n );\n}\n\nfunction isTableRow(node: Element): node is HTMLTableRowElement {\n return node instanceof HTMLTableRowElement;\n}\n\nfunction promotePageRelativeAnchors(page: HTMLElement): void {\n const sourceParagraphs = new Set<HTMLElement>();\n const anchors = Array.from(\n page.querySelectorAll<HTMLElement>(\n ':scope .is-absolute-anchor:not([data-page-layer-anchor=\"true\"])',\n ),\n );\n for (const anchor of anchors) {\n if (!shouldPromoteAnchorToPageLayer(anchor)) continue;\n const sourceParagraph = anchor.closest<HTMLElement>('coco-word-native-p');\n if (sourceParagraph) sourceParagraphs.add(sourceParagraph);\n const sourceStory = anchor.closest<HTMLElement>('coco-word-native-story');\n if (sourceStory?.dataset.storyKind) anchor.dataset.sourceStoryKind = sourceStory.dataset.storyKind;\n if (sourceStory?.dataset.partName) anchor.dataset.sourcePartName = sourceStory.dataset.partName;\n anchor.dataset.pageLayerAnchor = 'true';\n const layerKind = anchor.dataset.wrap === 'behind' ? 'behind' : 'front';\n anchor.dataset.pageLayer = layerKind;\n anchor.classList.add('is-page-layer-anchor');\n ensureNativePageLayer(page, layerKind).appendChild(anchor);\n }\n for (const paragraph of sourceParagraphs) {\n paragraph.classList.toggle('is-flow-empty', !nativeParagraphHasFlowContent(paragraph));\n }\n cleanupEmptyNativePageLayers(page);\n}\n\nfunction ensureNativePageLayer(page: HTMLElement, layer: 'behind' | 'front'): HTMLElement {\n const className = layer === 'behind' ? 'coco-word-native-page-behind-layer' : 'coco-word-native-page-overlay';\n const existing = page.querySelector<HTMLElement>(`:scope > .${className}`);\n if (existing) return existing;\n const el = document.createElement('div');\n el.className = className;\n el.contentEditable = 'false';\n if (layer === 'behind') {\n const firstFlowChild = Array.from(page.children).find((child) => child.tagName.toLowerCase() !== 'coco-word-native-story');\n page.insertBefore(el, firstFlowChild ?? page.firstChild);\n } else {\n page.appendChild(el);\n }\n return el;\n}\n\nfunction cleanupEmptyNativePageLayers(page: HTMLElement): void {\n page.querySelector<HTMLElement>(':scope > .coco-word-native-page-behind-layer:empty')?.remove();\n page.querySelector<HTMLElement>(':scope > .coco-word-native-page-overlay:empty')?.remove();\n}\n\nfunction shouldPromoteAnchorToPageLayer(anchor: HTMLElement): boolean {\n const vertical = anchor.dataset.positionVerticalRelativeFrom;\n const horizontal = anchor.dataset.positionHorizontalRelativeFrom;\n if (vertical) return isPageLayerRelativeFrom(vertical);\n return isPageLayerRelativeFrom(horizontal);\n}\n\nfunction isPageLayerRelativeFrom(value: string | undefined): boolean {\n return value === 'page' || value === 'margin';\n}\n\nfunction nativeBlockPromotesToEmptyFlow(block: HTMLElement): boolean {\n if (!block.matches('coco-word-native-p')) return false;\n if ((block.textContent ?? '').trim().length > 0) return false;\n const children = Array.from(block.children);\n if (children.length === 0) return false;\n return children.every(\n (child) =>\n child instanceof HTMLElement &&\n child.classList.contains('is-absolute-anchor') &&\n shouldPromoteAnchorToPageLayer(child),\n );\n}\n\nfunction nativeParagraphHasFlowContent(paragraph: HTMLElement): boolean {\n if ((paragraph.textContent ?? '').trim().length > 0) return true;\n for (const child of Array.from(paragraph.children)) {\n if (!(child instanceof HTMLElement)) continue;\n if (child.dataset.pageLayerAnchor === 'true' || child.classList.contains('is-page-layer-anchor')) {\n continue;\n }\n if (child.classList.contains('coco-word-tab-marker')) continue;\n return true;\n }\n return false;\n}\n\nfunction appendNativePage(\n root: HTMLElement,\n doc: NativeWordDocument,\n layout: NonNullable<NativeWordDocument['pageLayout']>,\n headerTemplates: HTMLElement[],\n footerTemplates: HTMLElement[],\n pageNumber: number,\n sectionIndex: number,\n sectionPageNumber: number,\n): HTMLElement {\n const page = document.createElement('coco-word-native-page');\n page.dataset.pageNumber = String(pageNumber);\n page.dataset.sectionIndex = String(sectionIndex);\n page.dataset.sectionPageNumber = String(sectionPageNumber);\n const displayPageNumber = displayPageNumberForSection(doc, sectionIndex, pageNumber, sectionPageNumber);\n page.dataset.displayPageNumber = String(displayPageNumber);\n applyNativePageLayout(page, layout);\n for (const header of selectHeaderFooterTemplates(doc, 'header', pageNumber, sectionIndex, sectionPageNumber, headerTemplates)) {\n page.appendChild(cloneNativeHeaderFooterForPage(header, displayPageNumber, sectionPageNumber));\n }\n page.appendChild(document.createElement('coco-word-native-page-body'));\n for (const footer of selectHeaderFooterTemplates(doc, 'footer', pageNumber, sectionIndex, sectionPageNumber, footerTemplates)) {\n page.appendChild(cloneNativeHeaderFooterForPage(footer, displayPageNumber, sectionPageNumber));\n }\n promotePageRelativeAnchors(page);\n root.appendChild(page);\n return page;\n}\n\nfunction refreshNativePageChrome(\n page: HTMLElement,\n doc: NativeWordDocument,\n layout: NonNullable<NativeWordDocument['pageLayout']>,\n headerTemplates: HTMLElement[],\n footerTemplates: HTMLElement[],\n pageNumber: number,\n sectionIndex: number,\n sectionPageNumber: number,\n): void {\n const body = page.querySelector<HTMLElement>('coco-word-native-page-body');\n if (!body) return;\n page.dataset.sectionIndex = String(sectionIndex);\n page.dataset.sectionPageNumber = String(sectionPageNumber);\n const displayPageNumber = displayPageNumberForSection(doc, sectionIndex, pageNumber, sectionPageNumber);\n page.dataset.displayPageNumber = String(displayPageNumber);\n applyNativePageLayout(page, layout);\n page.querySelector<HTMLElement>(':scope > .coco-word-native-page-overlay')?.remove();\n page.querySelector<HTMLElement>(':scope > .coco-word-native-page-behind-layer')?.remove();\n for (const story of Array.from(page.querySelectorAll(':scope > coco-word-native-story'))) {\n page.removeChild(story);\n }\n for (const header of selectHeaderFooterTemplates(doc, 'header', pageNumber, sectionIndex, sectionPageNumber, headerTemplates)) {\n page.insertBefore(cloneNativeHeaderFooterForPage(header, displayPageNumber, sectionPageNumber), body);\n }\n for (const footer of selectHeaderFooterTemplates(doc, 'footer', pageNumber, sectionIndex, sectionPageNumber, footerTemplates)) {\n page.appendChild(cloneNativeHeaderFooterForPage(footer, displayPageNumber, sectionPageNumber));\n }\n promotePageRelativeAnchors(page);\n}\n\nexport function refreshNativePageCommentBubbles(root: HTMLElement): void {\n for (const page of Array.from(root.querySelectorAll<HTMLElement>(':scope > coco-word-native-page'))) {\n page.querySelector<HTMLElement>(':scope > .coco-word-native-comment-layer')?.remove();\n const comments = uniquePageComments(page);\n if (comments.length > 0) {\n const layer = document.createElement('div');\n layer.className = 'coco-word-native-comment-layer';\n layer.contentEditable = 'false';\n page.appendChild(layer);\n comments.sort((a, b) => a.top - b.top || a.commentId - b.commentId).forEach((comment, index) => {\n const bubble = document.createElement('aside');\n bubble.className = 'coco-word-native-comment-bubble';\n bubble.dataset.annotationAnchorTop = String(comment.top);\n bubble.dataset.commentId = String(comment.commentId);\n bubble.dataset.commentBody = comment.body;\n if (comment.parentCommentId !== undefined && Number.isFinite(comment.parentCommentId)) {\n bubble.dataset.parentCommentId = String(comment.parentCommentId);\n bubble.classList.add('coco-word-native-comment-reply');\n }\n if (comment.paraId) bubble.dataset.paraId = comment.paraId;\n if (comment.from !== undefined) bubble.dataset.from = String(comment.from);\n if (comment.to !== undefined) bubble.dataset.to = String(comment.to);\n bubble.style.setProperty('--coco-word-comment-index', String(index));\n\n const meta = document.createElement('div');\n meta.className = 'coco-word-native-comment-meta';\n meta.textContent = [comment.author || `Comment ${comment.commentId}`, comment.date ? formatRevisionDate(comment.date) : '']\n .filter(Boolean)\n .join(' · ');\n if (comment.parentCommentId !== undefined && Number.isFinite(comment.parentCommentId)) {\n meta.textContent = `回复 #${comment.parentCommentId} · ${meta.textContent}`;\n }\n\n const body = document.createElement('div');\n body.className = 'coco-word-native-comment-body';\n body.textContent = comment.body || '(empty comment)';\n\n const actions = document.createElement('div');\n actions.className = 'coco-word-native-comment-actions';\n const menuButton = document.createElement('button');\n menuButton.type = 'button';\n menuButton.className = 'coco-word-native-comment-menu-button';\n menuButton.dataset.commentMenu = 'true';\n menuButton.dataset.commentId = String(comment.commentId);\n menuButton.setAttribute('aria-label', '批注操作');\n menuButton.title = '批注操作';\n menuButton.textContent = '⋯';\n actions.appendChild(menuButton);\n\n const menu = document.createElement('div');\n menu.className = 'coco-word-native-comment-menu';\n menu.hidden = true;\n menu.dataset.commentMenuFor = String(comment.commentId);\n for (const [action, text] of [['reply', '回复'], ['edit', '编辑'], ['delete', '删除']] as const) {\n const button = document.createElement('button');\n button.type = 'button';\n button.className = 'coco-word-native-comment-menu-item';\n button.dataset.commentAction = action;\n button.dataset.commentId = String(comment.commentId);\n button.textContent = text;\n menu.appendChild(button);\n }\n actions.appendChild(menu);\n\n bubble.appendChild(meta);\n bubble.appendChild(body);\n bubble.appendChild(actions);\n layer.appendChild(bubble);\n });\n }\n refreshNativePageRevisionBubbles(page);\n layoutNativePageAnnotationBubbles(page);\n }\n}\n\nfunction refreshNativePageRevisionBubbles(page: HTMLElement): void {\n page.querySelector<HTMLElement>(':scope > .coco-word-native-revision-layer')?.remove();\n const revisions = new Map<string, { id: string; kind: 'insert' | 'delete' | 'format'; author: string; date: string; text: string; top: number; paraId?: string; from?: number; to?: number }>();\n const pageRect = page.getBoundingClientRect();\n for (const mark of Array.from(page.querySelectorAll<HTMLElement>('.coco-word-revision-insert[data-revision-id], .coco-word-revision-delete[data-revision-id], .coco-word-revision-format[data-revision-id], img[data-revision-id], coco-word-native-table[data-revision-id]'))) {\n const id = mark.dataset.revisionId ?? '';\n if (!id) continue;\n const kind = mark.dataset.revisionKind === 'format'\n ? 'format'\n : mark.dataset.revisionKind === 'delete' || mark.classList.contains('coco-word-revision-delete') ? 'delete' : 'insert';\n const rect = mark.getBoundingClientRect();\n const key = `${kind}:${id}`;\n const previous = revisions.get(key);\n const sourceRange = nativeMarkRange(mark);\n revisions.set(key, {\n id,\n kind,\n author: mark.dataset.revisionAuthor ?? '',\n date: mark.dataset.revisionDate ?? '',\n text: `${previous?.text ?? ''}${mark.dataset.revisionText ?? mark.textContent ?? ''}`,\n top: previous?.top ?? Math.max(0, rect.top - pageRect.top),\n paraId: previous?.paraId ?? sourceRange?.paraId,\n from: previous?.from ?? sourceRange?.from,\n to: sourceRange?.to ?? previous?.to,\n });\n }\n if (revisions.size === 0) return;\n const layer = document.createElement('div');\n layer.className = 'coco-word-native-revision-layer';\n layer.contentEditable = 'false';\n page.appendChild(layer);\n const sortedRevisions = Array.from(revisions.values()).sort((a, b) => a.top - b.top || a.id.localeCompare(b.id));\n const groups = new Map<string, typeof sortedRevisions>();\n for (const revision of sortedRevisions) {\n const key = revision.paraId ? `paragraph:${revision.paraId}` : `position:${Math.round(revision.top / 48)}`;\n const group = groups.get(key);\n if (group) group.push(revision);\n else groups.set(key, [revision]);\n }\n\n const createBubble = (revision: (typeof sortedRevisions)[number]) => {\n const bubble = document.createElement('aside');\n bubble.className = `coco-word-native-revision-bubble is-${revision.kind}`;\n bubble.dataset.annotationAnchorTop = String(revision.top);\n bubble.dataset.revisionId = revision.id;\n bubble.dataset.revisionKind = revision.kind;\n if (revision.paraId) bubble.dataset.paraId = revision.paraId;\n if (revision.from !== undefined) bubble.dataset.from = String(revision.from);\n if (revision.to !== undefined) bubble.dataset.to = String(revision.to);\n const header = document.createElement('div');\n header.className = 'coco-word-native-revision-header';\n const meta = document.createElement('span');\n meta.className = 'coco-word-native-revision-meta';\n meta.textContent = [revision.author || 'User', formatRevisionDate(revision.date)].filter(Boolean).join(' · ');\n header.appendChild(meta);\n bubble.appendChild(header);\n const content = document.createElement('div');\n content.className = 'coco-word-native-revision-content';\n content.textContent = revision.text || '(空内容)';\n bubble.appendChild(content);\n const actions = document.createElement('div');\n actions.className = 'coco-word-native-revision-actions';\n for (const [action, text, label] of [['accept', '✓', '接受修订'], ['reject', '×', '拒绝修订']] as const) {\n const button = document.createElement('button');\n button.type = 'button';\n button.dataset.revisionAction = action;\n button.dataset.revisionId = revision.id;\n button.dataset.revisionKind = revision.kind;\n button.textContent = text;\n button.setAttribute('aria-label', label);\n button.title = label;\n button.className = `is-${action}`;\n actions.appendChild(button);\n }\n bubble.appendChild(actions);\n return bubble;\n };\n\n for (const revisionsInGroup of groups.values()) {\n if (revisionsInGroup.length === 1) {\n layer.appendChild(createBubble(revisionsInGroup[0]!));\n continue;\n }\n const group = document.createElement('section');\n group.className = 'coco-word-native-revision-group';\n group.dataset.annotationAnchorTop = String(revisionsInGroup[0]!.top);\n const paraId = revisionsInGroup[0]!.paraId;\n if (paraId) group.dataset.paraId = paraId;\n\n const toggle = document.createElement('button');\n toggle.type = 'button';\n toggle.className = 'coco-word-native-revision-group-toggle';\n toggle.dataset.revisionGroupToggle = 'true';\n toggle.setAttribute('aria-expanded', 'false');\n const title = document.createElement('strong');\n title.textContent = `本段 ${revisionsInGroup.length} 条修订`;\n const counts = revisionsInGroup.reduce((result, revision) => {\n result[revision.kind] += 1;\n return result;\n }, { insert: 0, delete: 0, format: 0 });\n const summary = document.createElement('span');\n summary.textContent = [\n counts.delete ? `${counts.delete} 删` : '',\n counts.insert ? `${counts.insert} 增` : '',\n counts.format ? `${counts.format} 格式` : '',\n ].filter(Boolean).join(' · ');\n const affordance = document.createElement('span');\n affordance.className = 'coco-word-native-revision-group-affordance';\n affordance.textContent = '展开';\n toggle.append(title, summary, affordance);\n\n const list = document.createElement('div');\n list.className = 'coco-word-native-revision-group-list';\n list.hidden = true;\n revisionsInGroup.forEach((revision) => list.appendChild(createBubble(revision)));\n group.append(toggle, list);\n layer.appendChild(group);\n }\n}\n\ninterface NativeAnnotationBubbleLayoutEntry {\n element: HTMLElement;\n anchorTop: number;\n height: number;\n top: number;\n}\n\n/** Keep comments and revisions in one ordered, non-overlapping page rail. */\nexport function layoutNativePageAnnotationBubbles(page: HTMLElement): void {\n const gap = 8;\n const entries: NativeAnnotationBubbleLayoutEntry[] = Array.from(\n page.querySelectorAll<HTMLElement>(\n ':scope > .coco-word-native-comment-layer > .coco-word-native-comment-bubble, :scope > .coco-word-native-revision-layer > .coco-word-native-revision-bubble, :scope > .coco-word-native-revision-layer > .coco-word-native-revision-group',\n ),\n ).map((element) => ({\n element,\n anchorTop: Math.max(0, Number(element.dataset.annotationAnchorTop) || 0),\n height: Math.max(44, Math.ceil(element.getBoundingClientRect().height)),\n top: 0,\n }));\n\n if (entries.length === 0) {\n return;\n }\n\n entries.sort((a, b) => a.anchorTop - b.anchorTop);\n let previousBottom = 0;\n entries.forEach((entry, index) => {\n entry.top = Math.max(entry.anchorTop, index === 0 ? 0 : previousBottom + gap);\n previousBottom = entry.top + entry.height;\n });\n\n const pageHeight = Math.max(0, Math.ceil(page.getBoundingClientRect().height));\n if (pageHeight > 0 && previousBottom > pageHeight) {\n let nextTop = pageHeight;\n for (let index = entries.length - 1; index >= 0; index -= 1) {\n const entry = entries[index]!;\n entry.top = Math.min(entry.top, nextTop - entry.height);\n nextTop = entry.top - gap;\n }\n if (entries[0]!.top < 0) {\n const shift = -entries[0]!.top;\n entries.forEach((entry) => {\n entry.top += shift;\n });\n }\n }\n\n for (const entry of entries) {\n const property = entry.element.classList.contains('coco-word-native-comment-bubble')\n ? '--coco-word-comment-top'\n : '--coco-word-revision-top';\n entry.element.style.setProperty(property, `${Math.round(entry.top)}px`);\n }\n}\n\nfunction formatRevisionDate(value: string): string {\n if (!value) return '';\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return value;\n return date.toLocaleString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' });\n}\n\nfunction uniquePageComments(page: HTMLElement): Array<{ commentId: number; author: string; date: string; body: string; top: number; paraId?: string; from?: number; to?: number; parentCommentId?: number }> {\n const pageRect = page.getBoundingClientRect();\n const comments = new Map<number, { commentId: number; author: string; date: string; body: string; top: number; paraId?: string; from?: number; to?: number; parentCommentId?: number }>();\n for (const mark of Array.from(page.querySelectorAll<HTMLElement>('.coco-word-comment[data-comment-id]'))) {\n const commentId = Number(mark.dataset.commentId);\n if (!Number.isFinite(commentId)) continue;\n const markRect = mark.getBoundingClientRect();\n const sourceRange = nativeMarkRange(mark);\n const previous = comments.get(commentId);\n const sameParagraph = !previous?.paraId || !sourceRange?.paraId || previous.paraId === sourceRange.paraId;\n comments.set(commentId, {\n commentId,\n author: previous?.author ?? mark.dataset.commentAuthor ?? '',\n date: previous?.date ?? mark.dataset.commentDate ?? '',\n body: previous?.body ?? mark.dataset.commentBody ?? '',\n top: previous?.top ?? Math.max(0, markRect.top - pageRect.top),\n parentCommentId: previous?.parentCommentId ?? (mark.dataset.parentCommentId ? Number(mark.dataset.parentCommentId) : undefined),\n paraId: previous?.paraId ?? sourceRange?.paraId,\n from: sameParagraph\n ? Math.min(previous?.from ?? sourceRange?.from ?? Number.POSITIVE_INFINITY, sourceRange?.from ?? Number.POSITIVE_INFINITY)\n : previous?.from ?? sourceRange?.from,\n to: sameParagraph\n ? Math.max(previous?.to ?? sourceRange?.to ?? Number.NEGATIVE_INFINITY, sourceRange?.to ?? Number.NEGATIVE_INFINITY)\n : previous?.to ?? sourceRange?.to,\n });\n }\n return Array.from(comments.values()).map((comment) => ({\n ...comment,\n ...(Number.isFinite(comment.from) ? { from: comment.from } : { from: undefined }),\n ...(Number.isFinite(comment.to) ? { to: comment.to } : { to: undefined }),\n })).sort((a, b) => a.top - b.top || a.commentId - b.commentId);\n}\n\nfunction nativeMarkRange(mark: HTMLElement): { paraId: string; from: number; to: number } | null {\n const paragraph = mark.closest<HTMLElement>('coco-word-native-p[data-para-id]');\n if (!paragraph) return null;\n let offset = 0;\n let found = false;\n const walk = (node: Node): void => {\n if (found) return;\n if (node === mark) {\n found = true;\n return;\n }\n if (node.nodeType === Node.TEXT_NODE) {\n offset += node.textContent?.length ?? 0;\n return;\n }\n if (node instanceof HTMLElement && node.classList.contains('coco-word-comment-widget')) return;\n for (const child of Array.from(node.childNodes)) walk(child);\n };\n walk(paragraph);\n if (!found) return null;\n const length = Array.from(mark.childNodes).reduce((total, child) => total + nativeInlineDomLength(child), 0);\n return { paraId: paragraph.dataset.paraId ?? '', from: offset, to: offset + Math.max(1, length) };\n}\n\nfunction nativeInlineDomLength(node: Node): number {\n if (node.nodeType === Node.TEXT_NODE) return node.textContent?.length ?? 0;\n if (node instanceof HTMLElement && node.classList.contains('coco-word-comment-widget')) return 0;\n if (node instanceof HTMLImageElement || node instanceof HTMLElement && node.matches('coco-word-native-drawing, coco-word-native-table, .coco-word-page-break')) return 1;\n return Array.from(node.childNodes).reduce((total, child) => total + nativeInlineDomLength(child), 0);\n}\n\nfunction pageLayoutForSection(\n doc: NativeWordDocument,\n sectionIndex: number,\n fallback: NonNullable<NativeWordDocument['pageLayout']>,\n): NonNullable<NativeWordDocument['pageLayout']> {\n return doc.sections.find((section) => section.sectionIndex === sectionIndex)?.pageLayout ?? fallback;\n}\n\nfunction displayPageNumberForSection(\n doc: NativeWordDocument,\n sectionIndex: number,\n pageNumber: number,\n sectionPageNumber: number,\n): number {\n const section = doc.sections.find((item) => item.sectionIndex === sectionIndex);\n if (section?.pageNumberStart !== undefined) return section.pageNumberStart + sectionPageNumber - 1;\n return pageNumber;\n}\n\nfunction applyNativePageLayout(\n page: HTMLElement,\n layout: NonNullable<NativeWordDocument['pageLayout']>,\n): void {\n page.style.width = twipsToPx(layout.width);\n page.style.height = twipsToPx(layout.height);\n page.style.paddingTop = twipsToPx(layout.margin.top);\n page.style.paddingRight = twipsToPx(layout.margin.right);\n page.style.paddingBottom = twipsToPx(layout.margin.bottom);\n page.style.paddingLeft = twipsToPx(layout.margin.left);\n page.style.setProperty('--coco-word-page-margin-top', twipsToPx(layout.margin.top));\n page.style.setProperty('--coco-word-page-margin-left', twipsToPx(layout.margin.left));\n page.style.setProperty('--coco-word-page-margin-right', twipsToPx(layout.margin.right));\n page.style.setProperty('--coco-word-page-margin-bottom', twipsToPx(layout.margin.bottom));\n page.style.setProperty('--coco-word-header-distance', twipsToPx(layout.headerDistance ?? Math.round(layout.margin.top / 2)));\n page.style.setProperty('--coco-word-footer-distance', twipsToPx(layout.footerDistance ?? Math.round(layout.margin.bottom / 2)));\n if (layout.docGrid?.linePitch !== undefined && layout.docGrid.linePitch > 0) {\n page.style.setProperty('--coco-word-doc-grid-line-height', twipsToPx(layout.docGrid.linePitch));\n } else {\n page.style.removeProperty('--coco-word-doc-grid-line-height');\n }\n}\n\nfunction contentHeightForLayout(layout: NonNullable<NativeWordDocument['pageLayout']>): number {\n return Math.max(120, twipsToPxNumber(layout.height - layout.margin.top - layout.margin.bottom));\n}\n\nfunction selectHeaderFooterTemplates(\n doc: NativeWordDocument,\n kind: 'header' | 'footer',\n pageNumber: number,\n sectionIndex: number,\n sectionPageNumber: number,\n templates: HTMLElement[],\n): HTMLElement[] {\n if (templates.length <= 1) return templates;\n const section = doc.sections.find((item) => item.sectionIndex === sectionIndex) ?? doc.sections[0];\n const refs = effectiveHeaderFooterRefs(doc, kind, section?.sectionIndex ?? sectionIndex);\n const selectedPartName = selectHeaderFooterPartName(\n refs,\n section?.titlePage === true,\n pageNumber,\n sectionPageNumber,\n );\n if (!selectedPartName && !hasHeaderFooterRefs(doc, kind)) return templates;\n if (selectedPartName) {\n const template = templates.find((story) => story.dataset.partName === selectedPartName);\n return template ? [template] : [];\n }\n const visibleTemplate = templates.find((story) => !story.classList.contains('is-empty'));\n return visibleTemplate ? [visibleTemplate] : [templates[0]!];\n}\n\nfunction effectiveHeaderFooterRefs(\n doc: NativeWordDocument,\n kind: 'header' | 'footer',\n sectionIndex: number,\n): Array<{ type: 'default' | 'first' | 'even'; partName: string }> {\n for (let index = sectionIndex; index >= 0; index--) {\n const section = doc.sections.find((item) => item.sectionIndex === index);\n const refs = kind === 'header' ? section?.headerRefs : section?.footerRefs;\n if (refs && refs.length > 0) return refs;\n }\n return [];\n}\n\nfunction hasHeaderFooterRefs(doc: NativeWordDocument, kind: 'header' | 'footer'): boolean {\n return doc.sections.some((section) =>\n kind === 'header' ? section.headerRefs.length > 0 : section.footerRefs.length > 0,\n );\n}\n\nfunction selectHeaderFooterPartName(\n refs: Array<{ type: 'default' | 'first' | 'even'; partName: string }>,\n titlePage: boolean,\n pageNumber: number,\n sectionPageNumber: number,\n): string | null {\n if (refs.length === 0) return null;\n if (sectionPageNumber === 1 && titlePage) {\n const first = refs.find((ref) => ref.type === 'first');\n if (first) return first.partName;\n }\n if (pageNumber % 2 === 0) {\n const even = refs.find((ref) => ref.type === 'even');\n if (even) return even.partName;\n }\n return refs.find((ref) => ref.type === 'default')?.partName ?? refs[0]!.partName;\n}\n\nfunction renderNativeHeaderFooterStory(story: NativeWordHeaderFooterStory): HTMLElement {\n const el = document.createElement('coco-word-native-story');\n el.setAttribute('data-story-kind', story.kind);\n el.setAttribute('data-part-name', story.partName);\n if (!hasVisibleStoryContent(story)) el.classList.add('is-empty');\n for (const block of story.blocks) el.appendChild(renderNativeBlock(block));\n return el;\n}\n\nfunction cloneNativeHeaderFooterForPage(\n template: HTMLElement,\n pageNumber: number,\n sectionPageNumber: number,\n): HTMLElement {\n const clone = template.cloneNode(true) as HTMLElement;\n for (const field of Array.from(clone.querySelectorAll<HTMLElement>('[data-field-kind]'))) {\n if (field.dataset.fieldKind === 'pageNumber') field.textContent = String(pageNumber);\n field.dataset.pageNumber = String(pageNumber);\n field.dataset.sectionPageNumber = String(sectionPageNumber);\n }\n return clone;\n}\n\nfunction refreshNativePageFields(root: HTMLElement, doc: NativeWordDocument): void {\n const pages = Array.from(root.querySelectorAll<HTMLElement>(':scope > coco-word-native-page'));\n const sectionPageCounts = new Map<number, number>();\n for (const page of pages) {\n const sectionIndex = Number(page.dataset.sectionIndex ?? '0');\n sectionPageCounts.set(sectionIndex, (sectionPageCounts.get(sectionIndex) ?? 0) + 1);\n }\n const displayPageStarts = displayPageStartsForPages(doc, pages, sectionPageCounts);\n for (const page of pages) {\n const pageNumber = parsePositiveInt(page.dataset.pageNumber, 1);\n const sectionIndex = parseNonNegativeInt(page.dataset.sectionIndex, 0);\n const sectionPageNumber = parsePositiveInt(page.dataset.sectionPageNumber, pageNumber);\n const displayPageNumber = (displayPageStarts.get(sectionIndex) ?? pageNumber) + sectionPageNumber - 1;\n const sectionPages = sectionPageCounts.get(sectionIndex) ?? sectionPageNumber;\n page.dataset.displayPageNumber = String(displayPageNumber);\n for (const field of Array.from(page.querySelectorAll<HTMLElement>('[data-field-kind]'))) {\n if (field.dataset.fieldKind === 'pageNumber') field.textContent = String(displayPageNumber);\n else if (field.dataset.fieldKind === 'totalPages') field.textContent = String(pages.length);\n else if (field.dataset.fieldKind === 'sectionPages') field.textContent = String(sectionPages);\n field.dataset.pageNumber = String(displayPageNumber);\n field.dataset.sectionPageNumber = String(sectionPageNumber);\n field.dataset.totalPages = String(pages.length);\n field.dataset.sectionPages = String(sectionPages);\n }\n }\n}\n\nfunction displayPageStartsForPages(\n doc: NativeWordDocument,\n pages: HTMLElement[],\n sectionPageCounts: Map<number, number>,\n): Map<number, number> {\n const sectionOrder: number[] = [];\n const seen = new Set<number>();\n for (const page of pages) {\n const sectionIndex = parseNonNegativeInt(page.dataset.sectionIndex, 0);\n if (seen.has(sectionIndex)) continue;\n seen.add(sectionIndex);\n sectionOrder.push(sectionIndex);\n }\n return resolveNativeSectionPageNumberStarts(doc.sections, sectionOrder, sectionPageCounts);\n}\n\nexport function resolveNativeSectionPageNumberStarts(\n sections: Array<{ sectionIndex: number; pageNumberStart?: number }>,\n sectionOrder: number[],\n sectionPageCounts: Map<number, number>,\n): Map<number, number> {\n const starts = new Map<number, number>();\n let nextPageNumber = 1;\n for (const sectionIndex of sectionOrder) {\n const section = sections.find((item) => item.sectionIndex === sectionIndex);\n const start = section?.pageNumberStart ?? nextPageNumber;\n starts.set(sectionIndex, start);\n nextPageNumber = start + (sectionPageCounts.get(sectionIndex) ?? 0);\n }\n return starts;\n}\n\nfunction parsePositiveInt(value: string | undefined, fallback: number): number {\n const parsed = Number(value);\n return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback;\n}\n\nfunction parseNonNegativeInt(value: string | undefined, fallback: number): number {\n const parsed = Number(value);\n return Number.isInteger(parsed) && parsed >= 0 ? parsed : fallback;\n}\n\nfunction hasVisibleStoryContent(story: NativeWordHeaderFooterStory): boolean {\n return story.blocks.some((block) => {\n if (block.kind === 'table') return block.rows.length > 0;\n return block.content.some((child) => {\n if (child.kind === 'text') return child.text.trim().length > 0;\n if (child.kind === 'field') return true;\n return true;\n });\n });\n}\n\nexport function renderNativeBlock(block: NativeWordBlockNode, options: NativeRenderOptions = {}): HTMLElement {\n return block.kind === 'paragraph' ? renderNativeParagraph(block, options) : renderNativeTable(block);\n}\n\nexport function renderNativeParagraph(paragraph: NativeWordParagraphNode, options: NativeRenderOptions = {}): HTMLElement {\n const el = document.createElement('coco-word-native-p');\n el.setAttribute('data-para-id', paragraph.paraId);\n el.setAttribute('data-story', paragraph.story);\n if (paragraph.styleId) el.setAttribute('data-style-id', paragraph.styleId);\n if (paragraph.format?.outlineLevel !== undefined) {\n el.setAttribute('data-outline-level', String(paragraph.format.outlineLevel));\n }\n if (paragraph.format?.hasNumbering) {\n el.setAttribute('data-numbering', 'true');\n el.setAttribute('data-numbering-label', paragraph.format.numbering?.label ?? '•');\n }\n if (paragraph.format?.pageBreakBefore) el.setAttribute('data-page-break-before', 'true');\n if (paragraph.format?.hasSectionBreak) el.setAttribute('data-section-break', 'true');\n if (paragraph.format?.keepNext) el.setAttribute('data-keep-next', 'true');\n if (paragraph.format?.keepLines) el.setAttribute('data-keep-lines', 'true');\n if (paragraph.format?.widowControl !== undefined) {\n el.setAttribute('data-widow-control', String(paragraph.format.widowControl));\n }\n if (paragraph.format?.snapToGrid !== undefined) {\n el.setAttribute('data-snap-to-grid', String(paragraph.format.snapToGrid));\n }\n const paragraphFormat = paragraphUsesImplicitGrid(paragraph, options)\n ? {\n ...paragraph.format,\n snapToGrid: true,\n spacing: {\n ...(paragraph.format?.spacing ?? {}),\n line: options.implicitGridLinePitch,\n lineRule: 'exact' as const,\n },\n }\n : paragraph.format;\n const paragraphStyle = resolveParagraphStyle(paragraphFormat).cssText;\n if (paragraphStyle.length > 0) el.setAttribute('style', paragraphStyle);\n el.contentEditable = 'inherit';\n el.tabIndex = 0;\n el.setAttribute('role', 'textbox');\n el.spellcheck = false;\n const tabRow = renderTabStopRow(paragraph);\n if (tabRow) {\n el.classList.add('has-tab-stops');\n el.appendChild(tabRow);\n return el;\n }\n for (const child of paragraph.content) {\n if (child.kind === 'text') {\n el.appendChild(renderNativeText(child));\n } else if (child.kind === 'field') {\n el.appendChild(renderNativeField(child));\n } else if (child.kind === 'image') {\n el.appendChild(renderNativeImage(child));\n } else if (child.kind === 'drawing') {\n el.appendChild(renderNativeDrawing(child));\n } else {\n const pageBreak = document.createElement('span');\n pageBreak.className = 'coco-word-page-break';\n pageBreak.contentEditable = 'false';\n pageBreak.setAttribute('data-kind', 'page-break');\n pageBreak.setAttribute('aria-label', 'Page break');\n el.appendChild(pageBreak);\n }\n }\n // Keep an empty paragraph keyboard-focusable, including newly inserted table cells.\n if (el.childNodes.length === 0) el.appendChild(document.createTextNode(''));\n return el;\n}\n\nexport function renderNativeImage(child: NativeWordImageNode): HTMLImageElement {\n const img = document.createElement('img');\n img.src = child.src;\n img.alt = child.drawingId;\n img.dataset.drawingId = child.drawingId;\n if (child.revision) {\n img.classList.add(child.revision.revisionKind === 'delete' ? 'coco-word-revision-delete' : 'coco-word-revision-insert');\n img.dataset.revisionId = child.revision.revisionId;\n img.dataset.revisionKind = child.revision.revisionKind;\n img.dataset.revisionAuthor = child.revision.author ?? '';\n img.dataset.revisionDate = child.revision.date ?? '';\n img.dataset.revisionText = '图片';\n }\n if (child.formatRevision) {\n img.classList.add('coco-word-revision-format');\n img.dataset.revisionId = child.formatRevision.revisionId;\n img.dataset.revisionKind = 'format';\n img.dataset.revisionAuthor = child.formatRevision.author ?? '';\n img.dataset.revisionDate = child.formatRevision.date ?? '';\n img.dataset.revisionText = '图片尺寸';\n }\n if (child.anchoringMode) img.dataset.anchoringMode = child.anchoringMode;\n if (child.wrap) img.dataset.wrap = child.wrap;\n if (child.width) img.style.width = `${child.width}px`;\n if (child.height) img.style.height = `${child.height}px`;\n applyImageLayoutStyle(img, child);\n return img;\n}\n\nfunction paragraphUsesImplicitGrid(paragraph: NativeWordParagraphNode, options: NativeRenderOptions): boolean {\n if (!options.implicitGridForParagraphs) return false;\n if (paragraph.format?.snapToGrid !== undefined) return false;\n // Word's document grid is the default line rhythm when a paragraph does\n // not explicitly opt out or provide its own line spacing.\n return paragraph.format?.spacing?.line === undefined && options.implicitGridLinePitch !== undefined;\n}\n\nfunction nativeBlockHasSnapToGridDisabled(block: NativeWordBlockNode): boolean {\n if (block.kind === 'paragraph') return block.format?.snapToGrid === false;\n return block.rows.some((row) =>\n row.cells.some((cell) => cell.paragraphs.some((paragraph) => paragraph.format?.snapToGrid === false)),\n );\n}\n\nfunction renderTabStopRow(paragraph: NativeWordParagraphNode): HTMLElement | null {\n const tabStops = paragraph.format?.tabStops;\n if (!tabStops || tabStops.length === 0) return null;\n const tabCount = paragraph.content.reduce(\n (count, child) => count + (child.kind === 'text' ? countTabs(child.text) : 0),\n 0,\n );\n if (tabCount !== 1 && tabCount !== 2) return null;\n if (!paragraph.content.every((child) => child.kind === 'text')) return null;\n const rightTab = tabStops.find((stop) => stop.alignment === 'right');\n if (!rightTab) return null;\n const hasLeader = rightTab.leader !== undefined && rightTab.leader !== 'none';\n const textParts = paragraphTabTextParts(paragraph);\n if (!hasLeader && !isCompactTabStopLayout(textParts)) return null;\n\n const row = document.createElement('span');\n row.className = tabCount === 2 ? 'coco-word-tab-row is-three-part-tab' : 'coco-word-tab-row is-right-tab';\n row.style.setProperty('--coco-word-tab-stop', twipsToPt(rightTab.position));\n if (hasLeader) {\n row.classList.add(`has-leader-${rightTab.leader}`);\n row.dataset.tabLeader = rightTab.leader;\n }\n const segments = Array.from({ length: tabCount + 1 }, (_, index) => {\n const segment = document.createElement('span');\n segment.className = `coco-word-tab-segment is-segment-${index}`;\n return segment;\n });\n let targetIndex = 0;\n\n for (const child of paragraph.content) {\n if (child.kind !== 'text') continue;\n const parts = child.text.split('\\t');\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i] ?? '';\n if (part.length > 0) segments[targetIndex]?.appendChild(renderNativeText({ ...child, text: part }));\n if (i < parts.length - 1) targetIndex = Math.min(targetIndex + 1, segments.length - 1);\n }\n }\n\n for (let index = 0; index < segments.length; index++) {\n if (index > 0) {\n const marker = document.createElement('span');\n marker.className = 'coco-word-tab-marker';\n marker.textContent = '\\t';\n row.appendChild(marker);\n }\n row.appendChild(segments[index]!);\n }\n return row;\n}\n\nfunction paragraphTabTextParts(paragraph: NativeWordParagraphNode): string[] {\n const parts = [''];\n for (const child of paragraph.content) {\n if (child.kind !== 'text') continue;\n const chunks = child.text.split('\\t');\n parts[parts.length - 1] += chunks[0] ?? '';\n for (let index = 1; index < chunks.length; index++) {\n parts.push(chunks[index] ?? '');\n }\n }\n return parts;\n}\n\nfunction isCompactTabStopLayout(parts: string[]): boolean {\n if (parts.length < 2 || parts.length > 3) return false;\n return parts.every((part) => part.trim().length <= 32);\n}\n\nfunction countTabs(value: string): number {\n return value.split('\\t').length - 1;\n}\n\nfunction renderNativeDrawing(child: NativeWordDrawingNode): HTMLElement {\n const drawing = document.createElement('coco-word-native-drawing');\n drawing.contentEditable = 'false';\n drawing.dataset.drawingId = child.drawingId;\n drawing.dataset.drawingKind = child.drawingKind;\n if (child.anchoringMode) drawing.dataset.anchoringMode = child.anchoringMode;\n if (child.wrap) drawing.dataset.wrap = child.wrap;\n drawing.classList.add(`is-${child.drawingKind.toLowerCase()}`);\n if (child.hasBorder) drawing.classList.add('has-border');\n if (child.hasFill) drawing.classList.add('has-fill');\n if (child.isLineOrConnector) {\n drawing.classList.add('is-line-or-connector');\n drawing.classList.add(isVerticalLine(child) ? 'is-vertical-line' : 'is-horizontal-line');\n }\n const hasVisibleText =\n (child.text?.trim().length ?? 0) > 0 ||\n (child.paragraphs?.some((paragraph) =>\n paragraph.content.some((node) => node.kind === 'text' && node.text.trim().length > 0),\n ) ??\n false);\n const isEmptyTextBoxPlaceholder =\n child.drawingKind === 'textBox' && !hasVisibleText && !child.hasBorder;\n if (\n isEmptyTextBoxPlaceholder ||\n (!hasVisibleText && !child.hasBorder && !child.hasFill && !child.isLineOrConnector)\n ) {\n drawing.classList.add('is-empty');\n }\n const width = nativeDrawingWidthCss(child);\n if (width) drawing.style.width = width;\n if (child.isLineOrConnector) {\n if (child.height) drawing.style.height = `${child.height}px`;\n } else if (child.height && shouldApplyDrawingMinHeight(child)) {\n drawing.style.minHeight = `${child.height}px`;\n }\n applyDrawingLayoutStyle(drawing, child);\n\n if (child.paragraphs && child.paragraphs.length > 0) {\n for (const paragraph of child.paragraphs) drawing.appendChild(renderNativeDrawingParagraph(paragraph));\n } else if (child.text && child.text.length > 0) {\n const text = document.createElement('span');\n text.className = 'coco-word-native-drawing-text';\n if (child.innerTextAlign) text.style.textAlign = mapDrawingTextAlign(child.innerTextAlign);\n text.textContent = child.text;\n drawing.appendChild(text);\n } else {\n drawing.setAttribute('aria-label', child.drawingKind);\n }\n return drawing;\n}\n\nfunction isVerticalLine(child: NativeWordDrawingNode): boolean {\n return (child.height ?? 0) > Math.max(1, (child.width ?? 0) * 2);\n}\n\nfunction shouldApplyDrawingMinHeight(child: NativeWordDrawingNode): boolean {\n if (child.drawingKind === 'textBox' && !child.hasBorder && !child.hasFill) return false;\n return true;\n}\n\nexport function nativeDrawingWidthCss(\n child: Pick<NativeWordDrawingNode, 'width' | 'anchoringMode' | 'wrap' | 'isLineOrConnector'>,\n): string | undefined {\n if (!child.width) return undefined;\n if (child.anchoringMode === 'anchor' && isAbsoluteAnchorWrap(child.wrap)) return `${child.width}px`;\n const availableWidth = child.isLineOrConnector ? '100%' : 'max(1px, calc(100% - 4pt))';\n return `min(${child.width}px, ${availableWidth})`;\n}\n\nfunction isAbsoluteAnchorWrap(wrap: NativeWordDrawingNode['wrap']): boolean {\n return wrap === 'none' || wrap === 'behind' || wrap === 'inFront';\n}\n\nfunction renderNativeDrawingParagraph(paragraph: NativeWordParagraphNode): HTMLElement {\n const line = document.createElement('div');\n line.className = 'coco-word-native-drawing-paragraph';\n const paragraphStyle = resolveParagraphStyle(paragraph.format).cssText;\n if (paragraphStyle.length > 0) line.setAttribute('style', paragraphStyle);\n for (const child of paragraph.content) {\n if (child.kind === 'text') {\n line.appendChild(renderNativeText(child));\n } else if (child.kind === 'field') {\n line.appendChild(renderNativeField(child));\n } else if (child.kind === 'image' || child.kind === 'drawing') {\n line.appendChild(document.createTextNode(child.kind === 'drawing' && child.text ? child.text : '\\uFFFC'));\n }\n }\n return line;\n}\n\nfunction renderNativeText(child: NativeWordParagraphNode['content'][number]): Node {\n if (child.kind !== 'text') return document.createTextNode('');\n const runStyle = resolveRunStyle(child.format).cssText;\n const commentMark = child.marks?.find((mark) => mark.kind === 'comment');\n const revisionMark = child.marks?.find((mark) => mark.kind === 'revision');\n const formatRevision = child.formatRevision;\n if (!commentMark && !revisionMark && !formatRevision && !child.hyperlink && runStyle.length === 0) return document.createTextNode(child.text);\n\n const span = child.hyperlink ? document.createElement('a') : document.createElement('span');\n if (runStyle.length > 0) span.setAttribute('style', runStyle);\n if (child.hyperlink) {\n const href = safeRenderedHyperlinkHref(child.hyperlink.target, child.hyperlink.anchor);\n span.classList.add('coco-word-hyperlink');\n span.setAttribute('href', href);\n span.dataset.hyperlinkTarget = child.hyperlink.target ?? '';\n span.dataset.hyperlinkAnchor = child.hyperlink.anchor ?? '';\n if (child.hyperlink.tooltip) span.title = child.hyperlink.tooltip;\n if (child.hyperlink.target) {\n span.setAttribute('target', '_blank');\n span.setAttribute('rel', 'noopener noreferrer');\n }\n }\n if (commentMark) {\n span.classList.add('coco-word-comment');\n span.dataset.commentId = String(commentMark.commentId);\n span.dataset.commentAuthor = commentMark.author;\n span.dataset.commentDate = commentMark.date;\n span.dataset.commentBody = commentMark.body;\n if (commentMark.parentCommentId !== undefined) {\n span.dataset.parentCommentId = String(commentMark.parentCommentId);\n span.classList.add('coco-word-comment-reply');\n }\n span.title = commentTitle(commentMark);\n }\n if (revisionMark) {\n span.classList.add(\n revisionMark.revisionKind === 'delete' ? 'coco-word-revision-delete' : 'coco-word-revision-insert',\n );\n span.dataset.revisionId = revisionMark.revisionId ?? '';\n span.dataset.revisionKind = revisionMark.revisionKind;\n span.dataset.revisionAuthor = revisionMark.author ?? '';\n span.dataset.revisionDate = revisionMark.date ?? '';\n span.title = revisionTitle(revisionMark);\n }\n if (formatRevision) {\n span.classList.add('coco-word-revision-format');\n span.dataset.revisionId = formatRevision.revisionId;\n span.dataset.revisionKind = 'format';\n span.dataset.revisionAuthor = formatRevision.author ?? '';\n span.dataset.revisionDate = formatRevision.date ?? '';\n span.title = '格式修订';\n }\n span.appendChild(document.createTextNode(child.text));\n return span;\n}\n\nfunction safeRenderedHyperlinkHref(target: string | undefined, anchor: string | undefined): string {\n if (target && /^(https?:|mailto:|tel:)/i.test(target.trim())) return target.trim();\n if (anchor) return `#${anchor}`;\n return '#';\n}\n\nfunction renderNativeField(child: NativeWordFieldNode): HTMLElement {\n const span = document.createElement('span');\n span.className = 'coco-word-native-field';\n span.dataset.fieldKind = child.fieldKind;\n span.dataset.fieldInstruction = child.instruction;\n const runStyle = resolveRunStyle(child.format).cssText;\n if (runStyle.length > 0) span.setAttribute('style', runStyle);\n span.contentEditable = 'false';\n span.textContent = child.cachedText ?? '';\n return span;\n}\n\nfunction commentTitle(mark: { commentId: number; author?: string; body?: string }): string {\n const author = mark.author ? `${mark.author}: ` : '';\n const body = mark.body?.trim() ?? '';\n return body.length > 0 ? `Comment ${mark.commentId} ${author}${body}` : `Comment ${mark.commentId}`;\n}\n\nfunction revisionTitle(mark: {\n revisionId?: string;\n revisionKind?: 'insert' | 'delete';\n author?: string;\n date?: string;\n}): string {\n const label = mark.revisionKind === 'delete' ? 'Deleted' : 'Inserted';\n const author = mark.author ? ` by ${mark.author}` : '';\n const date = mark.date ? ` on ${mark.date}` : '';\n const id = mark.revisionId ? ` (${mark.revisionId})` : '';\n return `${label}${author}${date}${id}`;\n}\n\nfunction applyDrawingLayoutStyle(el: HTMLElement, child: NativeWordDrawingNode): void {\n if (child.anchoringMode !== 'anchor') return;\n el.classList.add('coco-word-anchor-drawing');\n applyAnchorLayoutStyle(el, child);\n}\n\nfunction applyImageLayoutStyle(img: HTMLImageElement, child: NativeWordImageNode): void {\n if (child.anchoringMode !== 'anchor') return;\n img.classList.add('coco-word-anchor-image');\n applyAnchorLayoutStyle(img, child);\n}\n\nfunction applyAnchorLayoutStyle(\n el: HTMLElement,\n child: Pick<NativeWordImageNode | NativeWordDrawingNode, 'position' | 'wrap'>,\n): void {\n const metadata = nativeAnchorLayoutMetadata(child);\n for (const className of metadata.classNames) el.classList.add(className);\n for (const [name, value] of Object.entries(metadata.dataset)) el.dataset[name] = value;\n for (const [name, value] of Object.entries(metadata.styleProperties)) el.style.setProperty(name, value);\n}\n\nexport function nativeAnchorLayoutMetadata(\n child: Pick<NativeWordImageNode | NativeWordDrawingNode, 'position' | 'wrap'>,\n): NativeAnchorLayoutMetadata {\n const classNames: string[] = [];\n const dataset: Record<string, string> = {};\n const styleProperties: Record<string, string> = {};\n collectAnchorPositionMetadata(child.position, dataset, styleProperties);\n const side = anchorHorizontalSide(child.position);\n const horizontalRelative = child.position?.horizontal?.relativeFrom;\n const verticalRelative = child.position?.vertical?.relativeFrom;\n\n if (child.wrap === 'square' || child.wrap === 'tight' || child.wrap === 'through') {\n if (side === 'left') classNames.push('is-float-left');\n else if (side === 'right') classNames.push('is-float-right');\n else if (side === 'center') classNames.push('is-centered');\n else classNames.push('is-float-right');\n } else if (child.wrap === 'behind' || child.wrap === 'inFront' || child.wrap === 'none') {\n classNames.push('is-overlay-like');\n classNames.push('is-absolute-anchor');\n if (isPageLayerRelativeFrom(verticalRelative)) classNames.push('is-page-relative-anchor');\n else classNames.push('is-paragraph-relative-anchor');\n if (horizontalRelative === 'column') classNames.push('is-column-relative-anchor');\n if (side === 'left') classNames.push('is-anchor-left');\n if (side === 'right') classNames.push('is-anchor-right');\n if (side === 'center') classNames.push('is-anchor-center');\n if (child.wrap === 'behind') classNames.push('is-behind-text');\n if (child.wrap === 'inFront') classNames.push('is-in-front-of-text');\n } else if (child.wrap === 'topAndBottom') {\n classNames.push('is-top-bottom');\n if (side === 'center') classNames.push('is-centered');\n }\n return { classNames, dataset, styleProperties };\n}\n\nfunction collectAnchorPositionMetadata(\n position: NativeWordImageNode['position'] | NativeWordDrawingNode['position'] | undefined,\n dataset: Record<string, string>,\n styleProperties: Record<string, string>,\n): void {\n const horizontal = position?.horizontal;\n const vertical = position?.vertical;\n if (horizontal?.relativeFrom) dataset.positionHorizontalRelativeFrom = horizontal.relativeFrom;\n if (vertical?.relativeFrom) dataset.positionVerticalRelativeFrom = vertical.relativeFrom;\n if (horizontal?.align) dataset.positionHorizontalAlign = horizontal.align;\n if (vertical?.align) dataset.positionVerticalAlign = vertical.align;\n if (horizontal?.posOffset !== undefined) {\n dataset.positionHorizontalOffset = String(horizontal.posOffset);\n styleProperties['--coco-word-anchor-left'] = `${emuToPxNumber(horizontal.posOffset)}px`;\n }\n if (vertical?.posOffset !== undefined) {\n dataset.positionVerticalOffset = String(vertical.posOffset);\n styleProperties['--coco-word-anchor-top'] = `${emuToPxNumber(vertical.posOffset)}px`;\n }\n}\n\nfunction anchorHorizontalSide(\n position: NativeWordImageNode['position'] | NativeWordDrawingNode['position'] | undefined,\n): 'left' | 'right' | 'center' | null {\n const horizontal = position?.horizontal;\n if (!horizontal) return null;\n if (horizontal.align === 'left' || horizontal.align === 'inside') return 'left';\n if (horizontal.align === 'right' || horizontal.align === 'outside') return 'right';\n if (horizontal.align === 'center') return 'center';\n if (horizontal.posOffset === undefined) return null;\n const px = emuToPxNumber(horizontal.posOffset);\n if (px <= 8) return 'left';\n if (px >= 240) return 'right';\n return null;\n}\n\nfunction mapDrawingTextAlign(value: string): string {\n if (value === 'both') return 'justify';\n return value;\n}\n\nexport function renderNativeTable(table: NativeWordTableNode): HTMLElement {\n const el = document.createElement('coco-word-native-table');\n el.setAttribute('data-table-id', table.tableId);\n if (table.revision) {\n el.classList.add(table.revision.revisionKind === 'delete' ? 'coco-word-revision-delete' : 'coco-word-revision-insert');\n el.dataset.revisionId = table.revision.revisionId;\n el.dataset.revisionKind = table.revision.revisionKind;\n el.dataset.revisionAuthor = table.revision.author ?? '';\n el.dataset.revisionDate = table.revision.date ?? '';\n el.dataset.revisionText = '表格结构';\n }\n if (table.tableStyleId) el.setAttribute('data-style-id', table.tableStyleId);\n const tableEl = document.createElement('table');\n const border = tableBorderCss(table);\n if (border) tableEl.style.setProperty('--coco-word-table-border', border);\n applyNativeTableLayout(tableEl, table);\n if (table.columnWidths.some((width) => width > 0)) {\n const colgroup = document.createElement('colgroup');\n let tableWidth = 0;\n for (const width of table.columnWidths) tableWidth += Math.max(0, width);\n for (const width of table.columnWidths) {\n const col = document.createElement('col');\n if (width > 0) {\n col.style.width =\n table.layout?.widthType === 'pct' && tableWidth > 0\n ? `${(width / tableWidth) * 100}%`\n : twipsToPt(width);\n }\n colgroup.appendChild(col);\n }\n tableEl.appendChild(colgroup);\n if (tableWidth > 0 && tableEl.style.width.length === 0) tableEl.style.width = twipsToPt(tableWidth);\n }\n const tbody = document.createElement('tbody');\n const columnCount = nativeTableColumnCount(table);\n for (let rowIndex = 0; rowIndex < table.rows.length; rowIndex += 1) {\n const row = table.rows[rowIndex]!;\n const tr = document.createElement('tr');\n tr.dataset.rowIndex = String(rowIndex);\n if (row.isHeader) tr.dataset.repeatHeader = 'true';\n if (row.cantSplit) tr.dataset.cantSplit = 'true';\n if (row.height && row.height.val > 0) {\n const height = twipsToPt(row.height.val);\n tr.dataset.heightRule = row.height.hRule ?? 'auto';\n tr.style.setProperty('--coco-word-row-height', height);\n if (row.height.hRule === 'exact') {\n tr.style.height = height;\n } else {\n tr.style.height = height;\n }\n }\n let columnIndex = 0;\n for (const cell of row.cells) {\n const gridSpan = Math.max(1, cell.gridSpan);\n const cellColumnIndex = columnIndex;\n columnIndex += gridSpan;\n if (cell.vMerge === 'continue') continue;\n const td = document.createElement('td');\n td.dataset.rowIndex = String(rowIndex);\n td.dataset.cellIndex = String(row.cells.indexOf(cell));\n td.dataset.columnIndex = String(cellColumnIndex);\n if (cell.gridSpan > 1) td.colSpan = cell.gridSpan;\n if (cell.rowSpan && cell.rowSpan > 1) td.rowSpan = cell.rowSpan;\n const cellStyle = resolveTableCellStyle({\n ...cell,\n borders: resolveNativeTableCellBorders(table, cell, {\n rowIndex,\n rowCount: table.rows.length,\n columnIndex: cellColumnIndex,\n columnSpan: gridSpan,\n columnCount,\n }),\n }).cssText;\n if (cellStyle.length > 0) td.setAttribute('style', cellStyle);\n td.contentEditable = 'true';\n for (const block of cell.blocks) {\n const renderedBlock = renderNativeBlock(block);\n for (const paragraph of [\n ...(renderedBlock.matches('coco-word-native-p') ? [renderedBlock] : []),\n ...Array.from(renderedBlock.querySelectorAll<HTMLElement>('coco-word-native-p')),\n ]) {\n paragraph.contentEditable = 'true';\n }\n td.appendChild(renderedBlock);\n }\n tr.appendChild(td);\n }\n tbody.appendChild(tr);\n }\n tableEl.appendChild(tbody);\n el.appendChild(tableEl);\n markNativeTableEditable(el);\n return el;\n}\n\nexport interface NativeTableCellPosition {\n rowIndex: number;\n rowCount: number;\n columnIndex: number;\n columnSpan: number;\n columnCount: number;\n}\n\nfunction nativeTableColumnCount(table: NativeWordTableNode): number {\n const gridColumnCount = table.columnWidths.filter((width) => width > 0).length;\n if (gridColumnCount > 0) return gridColumnCount;\n return Math.max(\n 1,\n ...table.rows.map((row) =>\n row.cells.reduce((sum, cell) => sum + Math.max(1, cell.gridSpan), 0),\n ),\n );\n}\n\nexport function resolveNativeTableCellBorders(\n table: NativeWordTableNode,\n cell: NativeWordTableCellNode,\n position: NativeTableCellPosition,\n): EditorTableBorders | undefined {\n const tableBorders = table.borders;\n if (!tableBorders && !cell.borders) return undefined;\n return {\n ...effectiveTableCellBorders(tableBorders, position),\n ...(cell.borders ?? {}),\n };\n}\n\nfunction effectiveTableCellBorders(\n borders: EditorTableBorders | undefined,\n position: NativeTableCellPosition,\n): EditorTableBorders {\n if (!borders) return {};\n const nil = { val: 'nil' };\n const isFirstRow = position.rowIndex === 0;\n const isLastRow = position.rowIndex >= position.rowCount - 1;\n const isFirstColumn = position.columnIndex === 0;\n const isLastColumn = position.columnIndex + position.columnSpan >= position.columnCount;\n return {\n top: (isFirstRow ? borders.top : borders.insideH) ?? nil,\n right: (isLastColumn ? borders.right : borders.insideV) ?? nil,\n bottom: (isLastRow ? borders.bottom : borders.insideH) ?? nil,\n left: (isFirstColumn ? borders.left : borders.insideV) ?? nil,\n };\n}\n\nfunction applyNativeTableLayout(tableEl: HTMLElement, table: NativeWordTableNode): void {\n const layout = table.layout;\n if (!layout) return;\n\n if (layout.width !== undefined && layout.width > 0) {\n if (layout.widthType === 'pct') tableEl.style.width = `${layout.width / 50}%`;\n else if (layout.widthType !== 'auto') tableEl.style.width = twipsToPt(layout.width);\n }\n\n if (layout.alignment === 'center') {\n tableEl.style.marginLeft = 'auto';\n tableEl.style.marginRight = 'auto';\n } else if (layout.alignment === 'right') {\n tableEl.style.marginLeft = 'auto';\n tableEl.style.marginRight = '0';\n } else if (layout.indent !== undefined && layout.indent > 0) {\n tableEl.style.marginLeft = twipsToPt(layout.indent);\n }\n\n if (layout.cellSpacing !== undefined && layout.cellSpacing > 0) {\n tableEl.style.borderCollapse = 'separate';\n tableEl.style.borderSpacing =\n layout.cellSpacingType === 'pct' ? `${layout.cellSpacing / 50}%` : twipsToPt(layout.cellSpacing);\n }\n}\n\nfunction twipsToPt(twips: number): string {\n return `${twips / 20}pt`;\n}\n\nfunction twipsToPx(twips: number): string {\n return `${twipsToPxNumber(twips)}px`;\n}\n\nfunction twipsToPxNumber(twips: number): number {\n return twips / 15;\n}\n\nfunction emuToPxNumber(emu: number): number {\n return (emu / 914400) * 96;\n}\n\nfunction tableBorderCss(table: NativeWordTableNode): string | null {\n const border =\n table.borders?.insideH ??\n table.borders?.insideV ??\n table.borders?.top ??\n table.borders?.left ??\n table.borders?.bottom ??\n table.borders?.right;\n if (!border || border.val === 'none' || border.val === 'nil') return null;\n const color = border.color && /^[0-9a-f]{6}$/i.test(border.color) ? `#${border.color}` : '#d4d4d8';\n const width = border.size !== undefined ? Math.max(0.5, border.size / 8) : 0.75;\n const style = border.val === 'double' ? 'double' : 'solid';\n return `${width}pt ${style} ${color}`;\n}\n\nfunction defineElement(name: string): void {\n if (customElements.get(name)) return;\n customElements.define(name, class extends HTMLElement {});\n}\n","import type { WordEditorSelection } from './runtime.js';\n\nexport interface NativeCursorPoint {\n paraId: string;\n offset: number;\n}\n\nexport interface NativeSelectedImage {\n paraId: string;\n drawingId: string;\n}\n\nexport function nativeSelection(host: HTMLElement): Selection | null {\n const root = host.getRootNode();\n if (root instanceof ShadowRoot) {\n return (root as ShadowRoot & { getSelection?: () => Selection | null }).getSelection?.() ?? null;\n }\n return host.ownerDocument.getSelection();\n}\n\nexport function currentNativeCursor(host: HTMLElement): NativeCursorPoint | null {\n const selection = nativeSelection(host);\n if (!selection || selection.rangeCount === 0) return null;\n const range = selection.getRangeAt(0);\n const paragraph = parentNativeParagraph(range.startContainer);\n if (!paragraph || !host.contains(paragraph)) return null;\n return {\n paraId: paragraph.dataset.paraId ?? '',\n offset: textOffsetWithin(paragraph, range.startContainer, range.startOffset),\n };\n}\n\nexport function nativeSelectionFromCursor(host: HTMLElement): WordEditorSelection | null {\n const point = currentNativeCursor(host);\n return point ? { kind: 'caret', paraId: point.paraId, offset: point.offset } : null;\n}\n\nexport function currentNativeSelection(host: HTMLElement): WordEditorSelection | null {\n const selection = nativeSelection(host);\n if (!selection || selection.rangeCount === 0) return null;\n if (!selection.anchorNode || !selection.focusNode) return null;\n const anchorParagraph = parentNativeParagraph(selection.anchorNode);\n const focusParagraph = parentNativeParagraph(selection.focusNode);\n if (!anchorParagraph || !focusParagraph || !host.contains(anchorParagraph) || !host.contains(focusParagraph)) {\n return null;\n }\n\n const anchor = {\n paraId: anchorParagraph.dataset.paraId ?? '',\n offset: textOffsetWithin(anchorParagraph, selection.anchorNode, selection.anchorOffset),\n };\n const focus = {\n paraId: focusParagraph.dataset.paraId ?? '',\n offset: textOffsetWithin(focusParagraph, selection.focusNode, selection.focusOffset),\n };\n\n if (selection.isCollapsed) return { kind: 'caret', paraId: anchor.paraId, offset: anchor.offset };\n return { kind: 'text-range', anchor, focus };\n}\n\nexport function nativeCursorFromPoint(host: HTMLElement, x: number, y: number): NativeCursorPoint | null {\n const caret = caretNodeFromPoint(x, y);\n if (!caret) return null;\n const paragraph = parentNativeParagraph(caret.node);\n if (!paragraph || !host.contains(paragraph)) return null;\n return {\n paraId: paragraph.dataset.paraId ?? '',\n offset: textOffsetWithin(paragraph, caret.node, caret.offset),\n };\n}\n\nexport function restoreNativeCursor(host: HTMLElement, cursor: NativeCursorPoint): void {\n const paragraph = host.querySelector<HTMLElement>(`coco-word-native-p[data-para-id=\"${cursor.paraId}\"]`);\n if (!paragraph) return;\n paragraph.focus({ preventScroll: true });\n const range = document.createRange();\n const target = textNodeAt(paragraph, cursor.offset);\n range.setStart(target.node, target.offset);\n range.setEnd(target.node, target.offset);\n const selection = nativeSelection(host);\n if (!selection) return;\n selection.removeAllRanges();\n selection.addRange(range);\n}\n\nexport function restoreNativeTextSelection(\n host: HTMLElement,\n anchor: NativeCursorPoint,\n focus: NativeCursorPoint,\n): void {\n const anchorParagraph = host.querySelector<HTMLElement>(`coco-word-native-p[data-para-id=\"${anchor.paraId}\"]`);\n const focusParagraph = host.querySelector<HTMLElement>(`coco-word-native-p[data-para-id=\"${focus.paraId}\"]`);\n if (!anchorParagraph || !focusParagraph) return;\n const anchorTarget = textNodeAt(anchorParagraph, anchor.offset);\n const focusTarget = textNodeAt(focusParagraph, focus.offset);\n const selection = nativeSelection(host);\n if (!selection) return;\n anchorParagraph.focus({ preventScroll: true });\n selection.removeAllRanges();\n selection.setBaseAndExtent(anchorTarget.node, anchorTarget.offset, focusTarget.node, focusTarget.offset);\n}\n\nexport function restoreNativeElementSelection(host: HTMLElement, element: HTMLElement): boolean {\n const paragraph = parentNativeParagraph(element);\n if (!paragraph || !host.contains(paragraph)) return false;\n const range = document.createRange();\n range.selectNodeContents(element);\n const selection = nativeSelection(host);\n if (!selection) return false;\n paragraph.focus({ preventScroll: true });\n selection.removeAllRanges();\n selection.addRange(range);\n return true;\n}\n\nexport function createNativeTextRange(\n host: HTMLElement,\n paraId: string,\n from: number,\n to: number,\n): Range | null {\n const paragraph = host.querySelector<HTMLElement>(`coco-word-native-p[data-para-id=\"${paraId}\"]`);\n if (!paragraph) return null;\n const start = textNodeAt(paragraph, from);\n const end = textNodeAt(paragraph, to);\n const range = document.createRange();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n}\n\nexport function createNativeSelectionRange(\n host: HTMLElement,\n start: NativeCursorPoint,\n end: NativeCursorPoint,\n): Range | null {\n const startParagraph = host.querySelector<HTMLElement>(`coco-word-native-p[data-para-id=\"${start.paraId}\"]`);\n const endParagraph = host.querySelector<HTMLElement>(`coco-word-native-p[data-para-id=\"${end.paraId}\"]`);\n if (!startParagraph || !endParagraph) return null;\n const startTarget = textNodeAt(startParagraph, start.offset);\n const endTarget = textNodeAt(endParagraph, end.offset);\n const range = document.createRange();\n range.setStart(startTarget.node, startTarget.offset);\n range.setEnd(endTarget.node, endTarget.offset);\n return range;\n}\n\nfunction caretNodeFromPoint(x: number, y: number): { node: Node; offset: number } | null {\n const doc = document as Document & {\n caretPositionFromPoint?: (x: number, y: number) => { offsetNode: Node; offset: number } | null;\n caretRangeFromPoint?: (x: number, y: number) => Range | null;\n };\n const position = doc.caretPositionFromPoint?.(x, y);\n if (position) return { node: position.offsetNode, offset: position.offset };\n const range = doc.caretRangeFromPoint?.(x, y);\n if (range) return { node: range.startContainer, offset: range.startOffset };\n return null;\n}\n\nexport function selectNativeImage(host: HTMLElement, selectedImage: NativeSelectedImage): void {\n clearNativeImageSelection(host);\n const image = host.querySelector<HTMLImageElement>(\n `coco-word-native-p[data-para-id=\"${selectedImage.paraId}\"] img[data-drawing-id=\"${selectedImage.drawingId}\"]`,\n );\n image?.classList.add('is-selected');\n}\n\nexport function clearNativeImageSelection(host: HTMLElement): void {\n host.querySelectorAll('coco-word-native-p img.is-selected').forEach((image) => {\n image.classList.remove('is-selected');\n });\n}\n\nexport function imageOffset(paragraph: HTMLElement, image: HTMLImageElement): number {\n let offset = 0;\n const walker = document.createTreeWalker(paragraph, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT);\n let current = walker.nextNode();\n while (current) {\n if (current === image) return offset;\n if (current.nodeType === Node.TEXT_NODE) {\n offset += current.textContent?.length ?? 0;\n } else if (current instanceof HTMLImageElement) {\n offset += 1;\n }\n current = walker.nextNode();\n }\n return offset;\n}\n\nexport function parentNativeParagraph(node: Node): HTMLElement | null {\n let current: Node | null = node.nodeType === Node.ELEMENT_NODE ? node : node.parentNode;\n while (current) {\n if (current instanceof HTMLElement && current.tagName === 'COCO-WORD-NATIVE-P') return current;\n current = current.parentNode;\n }\n return null;\n}\n\nfunction textOffsetWithin(root: HTMLElement, node: Node, offset: number): number {\n let total = 0;\n let found: number | null = null;\n\n const visit = (current: Node): void => {\n if (found !== null) return;\n if (current === node) {\n if (current.nodeType === Node.TEXT_NODE) {\n found = total + Math.max(0, Math.min(offset, current.textContent?.length ?? 0));\n return;\n }\n const childCount = Math.max(0, Math.min(offset, current.childNodes.length));\n for (let index = 0; index < childCount; index += 1) total += domInlineLength(current.childNodes[index]!);\n found = total;\n return;\n }\n if (current.nodeType === Node.TEXT_NODE) {\n total += current.textContent?.length ?? 0;\n return;\n }\n if (isAtomicInlineElement(current)) {\n total += 1;\n return;\n }\n for (let index = 0; index < current.childNodes.length; index += 1) visit(current.childNodes[index]!);\n };\n\n visit(root);\n return found ?? total;\n}\n\nfunction domInlineLength(node: Node): number {\n if (node.nodeType === Node.TEXT_NODE) return node.textContent?.length ?? 0;\n if (isAtomicInlineElement(node)) return 1;\n let length = 0;\n for (let index = 0; index < node.childNodes.length; index += 1) length += domInlineLength(node.childNodes[index]!);\n return length;\n}\n\nfunction textNodeAt(root: HTMLElement, offset: number): { node: Node; offset: number } {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT);\n let current = walker.nextNode();\n let remaining = offset;\n while (current) {\n if (current.nodeType === Node.TEXT_NODE) {\n const length = current.textContent?.length ?? 0;\n if (remaining <= length) return { node: current, offset: remaining };\n remaining -= length;\n } else if (isAtomicInlineElement(current)) {\n if (remaining === 0) return elementBoundary(current, 'before');\n if (remaining === 1) return elementBoundary(current, 'after');\n remaining -= 1;\n }\n current = walker.nextNode();\n }\n const fallback = document.createTextNode('');\n root.appendChild(fallback);\n return { node: fallback, offset: 0 };\n}\n\nfunction isAtomicInlineElement(node: Node): node is HTMLElement {\n return node instanceof HTMLElement &&\n (node instanceof HTMLImageElement || node.classList.contains('coco-word-page-break'));\n}\n\nfunction elementBoundary(element: HTMLElement, side: 'before' | 'after'): { node: Node; offset: number } {\n const parent = element.parentNode;\n if (!parent) return { node: element, offset: 0 };\n const index = Array.prototype.indexOf.call(parent.childNodes, element) as number;\n return { node: parent, offset: Math.max(0, index + (side === 'after' ? 1 : 0)) };\n}\n","import type { EditorParagraphFormat, EditorRunFormat } from './model.js';\nimport {\n findNativeParagraph,\n findNativeParagraphLocation,\n findNativeTableCellLocation,\n findNativeTableLocation,\n nativeParagraphText,\n type NativeWordDocument,\n type NativeWordImageNode,\n type NativeWordParagraphNode,\n} from './native-model.js';\nimport { nativeTableCellsInRange, nativeTableSupportsStructuralEditing } from './native-commands.js';\nimport type {\n WordEditorCommand,\n WordEditorCommandState,\n WordEditorFormatValue,\n WordEditorHyperlink,\n WordEditorSelection,\n WordEditorSelectionPoint,\n} from './runtime.js';\nimport { nativeListType } from './native-numbering.js';\n\ntype TextRange = { paraId: string; from: number; to: number };\ntype Alignment = Exclude<WordEditorCommandState['paragraphAlignment'], 'mixed' | null>;\n\nexport function getNativeWordCommandState(\n doc: NativeWordDocument,\n selection: WordEditorSelection | null,\n): WordEditorCommandState {\n const runFormats = selectedRunFormats(doc, selection);\n const paragraphs = selectedParagraphs(doc, selection);\n const image = selectedImage(doc, selection);\n const table = selectedTableState(doc, selection);\n return {\n selectionKind: selection?.kind ?? null,\n trackRevisions: false,\n bold: mixedValue(runFormats.map((format) => format.bold ?? false), false) ?? false,\n italic: mixedValue(runFormats.map((format) => format.italic ?? false), false) ?? false,\n underline: mixedValue(runFormats.map((format) => format.underline ?? false), false) ?? false,\n strike: mixedValue(runFormats.map((format) => format.strike ?? false), false) ?? false,\n fontFamily: mixedValue(runFormats.map((format) => format.fontFamily ?? null), null),\n fontSize: mixedValue(runFormats.map((format) => format.fontSize ?? null), null),\n textColor: mixedValue(runFormats.map((format) => normalizeColor(format.color)), null),\n highlightColor: mixedValue(runFormats.map((format) => normalizeHighlight(format.highlight)), null),\n hyperlink: selectedHyperlinkState(doc, selection),\n paragraphAlignment: mixedValue(\n paragraphs.map((paragraph) => normalizeAlignment(paragraph.format?.alignment)),\n null,\n ),\n leftIndent: mixedValue(paragraphs.map((paragraph) => paragraph.format?.indent?.left ?? 0), 0),\n rightIndent: mixedValue(paragraphs.map((paragraph) => paragraph.format?.indent?.right ?? 0), 0),\n firstLineIndent: mixedValue(paragraphs.map((paragraph) => paragraph.format?.indent?.firstLine ?? 0), 0),\n spacingBefore: mixedValue(paragraphs.map((paragraph) => paragraph.format?.spacing?.before ?? 0), 0),\n spacingAfter: mixedValue(paragraphs.map((paragraph) => paragraph.format?.spacing?.after ?? 0), 0),\n lineSpacing: mixedStructuredValue(\n paragraphs.map((paragraph) => {\n const line = paragraph.format?.spacing?.line;\n if (line === undefined) return null;\n return { line, lineRule: paragraph.format?.spacing?.lineRule ?? 'auto' };\n }),\n ),\n listType: mixedValue(\n paragraphs.map((paragraph) =>\n paragraph.format?.hasNumbering ? nativeListType(paragraph.format.numbering) : null,\n ),\n null,\n ),\n listLevel: mixedValue(\n paragraphs.map((paragraph) =>\n paragraph.format?.hasNumbering ? (paragraph.format.numbering?.ilvl ?? 0) : null,\n ),\n null,\n ),\n image: image && selection?.kind === 'object'\n ? {\n objectId: image.drawingId,\n width: image.width ?? null,\n height: image.height ?? null,\n alignment: normalizeAlignment(paragraphs[0]?.format?.alignment),\n }\n : null,\n table,\n };\n}\n\nexport function canDispatchNativeWordCommand(\n doc: NativeWordDocument,\n selection: WordEditorSelection | null,\n command: WordEditorCommand,\n): boolean {\n if (\n command.kind === 'toggle-track-revisions' ||\n command.kind === 'accept-revision' ||\n command.kind === 'reject-revision' ||\n command.kind === 'accept-all-revisions' ||\n command.kind === 'reject-all-revisions'\n ) return true;\n if (!selection) return false;\n if (command.kind === 'insert-image') {\n return (selection.kind === 'caret' || selection.kind === 'text-range') && command.src.trim().length > 0;\n }\n if (command.kind === 'insert-table') {\n if (\n selection.kind !== 'caret' ||\n !Number.isInteger(command.rows) ||\n !Number.isInteger(command.columns) ||\n command.rows < 1 ||\n command.rows > 20 ||\n command.columns < 1 ||\n command.columns > 20\n ) return false;\n return findNativeParagraphLocation(doc, selection.paraId)?.container === doc.blocks;\n }\n if (command.kind === 'delete-table') {\n const table = selectedTableState(doc, selection);\n return !!table && findNativeTableLocation(doc, table.tableId)?.container === doc.blocks;\n }\n if (command.kind === 'set-image-size' || command.kind === 'set-image-alignment') {\n return (\n selection.kind === 'object' &&\n selection.objectKind === 'image' &&\n selection.objectId === command.objectId &&\n !!selectedImage(doc, selection)\n );\n }\n if (\n command.kind === 'insert-table-row' ||\n command.kind === 'delete-table-row' ||\n command.kind === 'insert-table-column' ||\n command.kind === 'delete-table-column'\n ) {\n const table = selectedTableState(doc, selection);\n if (!table?.structuralEditingSupported) return false;\n if (command.kind === 'delete-table-row') return table.rowCount > 1;\n if (command.kind === 'delete-table-column') return table.columnCount > 1;\n return true;\n }\n if (\n command.kind === 'set-table-cell-background' ||\n command.kind === 'set-table-cell-vertical-alignment' ||\n command.kind === 'set-table-cell-borders'\n ) {\n return selectedTableState(doc, selection) !== null;\n }\n if (command.kind === 'merge-table-cells' || command.kind === 'split-table-cell') {\n if (selection.kind !== 'table-cell-range') return false;\n const location = findNativeTableLocation(doc, selection.tableId);\n if (!location) return false;\n const cells = nativeTableCellsInRange(location.table, selection);\n if (command.kind === 'merge-table-cells') {\n if (!nativeTableSupportsStructuralEditing(location.table)) return false;\n const sameRow = selection.anchor.rowIndex === selection.focus.rowIndex;\n return sameRow && cells.length >= 2 && cells.every((item) => item.cell.gridSpan === 1 && item.cell.vMerge == null);\n }\n const cell = cells.length === 1 ? cells[0]!.cell : null;\n return !!cell && (\n (cell.gridSpan > 1 && cell.vMerge == null && (cell.rowSpan ?? 1) === 1) ||\n (cell.vMerge === 'restart' && (cell.rowSpan ?? 1) > 1)\n );\n }\n if (command.kind === 'clear-table-cells') {\n return selection.kind === 'table-cell-range' && selectedTableState(doc, selection) !== null;\n }\n if (command.kind === 'set-hyperlink') {\n return selection.kind === 'text-range' && !!(command.hyperlink.target?.trim() || command.hyperlink.anchor?.trim());\n }\n if (command.kind === 'remove-hyperlink') {\n return selection.kind === 'text-range' && selectedHyperlinkState(doc, selection) !== null;\n }\n if (command.kind === 'insert-text' || command.kind === 'split-paragraph' || command.kind === 'insert-page-break') {\n return selection.kind === 'caret' && !!findNativeParagraph(doc, selection.paraId);\n }\n if (command.kind === 'delete-object') return selection.kind === 'object' && selection.objectKind === command.objectKind;\n if (command.kind === 'replace-range' || command.kind === 'delete-range') {\n return (\n command.anchor.paraId === command.focus.paraId &&\n !!findNativeParagraph(doc, command.anchor.paraId)\n );\n }\n if (\n command.kind === 'toggle-bold' ||\n command.kind === 'toggle-italic' ||\n command.kind === 'toggle-underline' ||\n command.kind === 'toggle-strike' ||\n command.kind === 'set-font-family' ||\n command.kind === 'set-font-size' ||\n command.kind === 'set-text-color' ||\n command.kind === 'set-highlight-color' ||\n command.kind === 'clear-text-format'\n ) {\n return selection.kind === 'text-range' && selectedTextRanges(doc, selection).some((range) => range.to > range.from);\n }\n if (\n command.kind === 'set-paragraph-alignment' ||\n command.kind === 'set-paragraph-indent' ||\n command.kind === 'adjust-paragraph-left-indent' ||\n command.kind === 'set-paragraph-spacing' ||\n command.kind === 'set-paragraph-line-spacing'\n || command.kind === 'toggle-list'\n || command.kind === 'remove-list'\n || command.kind === 'adjust-list-level'\n ) {\n return selectedParagraphs(doc, selection).length > 0;\n }\n if (command.kind === 'delete-backward') {\n return selection.kind === 'caret' || selection.kind === 'object' || selection.kind === 'table-cell-range';\n }\n return command.kind === 'delete-forward' && (selection.kind === 'caret' || selection.kind === 'table-cell-range');\n}\n\nfunction selectedTableState(\n doc: NativeWordDocument,\n selection: WordEditorSelection | null,\n): WordEditorCommandState['table'] {\n if (!selection) return null;\n if (selection.kind === 'table-cell-range') {\n const location = findNativeTableLocation(doc, selection.tableId);\n if (!location) return null;\n const cells = nativeTableCellsInRange(location.table, selection);\n if (cells.length === 0) return null;\n const startRow = Math.min(selection.anchor.rowIndex, selection.focus.rowIndex);\n const endRow = Math.max(selection.anchor.rowIndex, selection.focus.rowIndex);\n const startColumn = Math.min(selection.anchor.columnIndex, selection.focus.columnIndex);\n const endColumn = Math.max(selection.anchor.columnIndex, selection.focus.columnIndex);\n return {\n tableId: location.table.tableId,\n rowIndex: selection.anchor.rowIndex,\n rowCount: location.table.rows.length,\n columnIndex: selection.anchor.columnIndex,\n columnCount: Math.max(0, ...location.table.rows.map((row) =>\n row.cells.reduce((count, cell) => count + Math.max(1, cell.gridSpan), 0))),\n range: { startRow, endRow, startColumn, endColumn, cellCount: cells.length },\n structuralEditingSupported: nativeTableSupportsStructuralEditing(location.table),\n backgroundColor: mixedValue(cells.map(({ cell }) => normalizeColor(cell.shading?.fill)), null),\n verticalAlignment: mixedValue(cells.map(({ cell }) => cell.verticalAlignment ?? null), null),\n borderColor: mixedValue(cells.map(({ cell }) => selectedCellBorderColor(cell.borders)), null),\n bordersVisible: mixedValue(cells.map(({ cell }) => selectedCellBordersVisible(cell.borders)), false),\n };\n }\n const paraId = selection.kind === 'text-range' ? selection.anchor.paraId : selection.paraId;\n const location = findNativeTableCellLocation(doc, paraId);\n if (!location) return null;\n return {\n tableId: location.table.tableId,\n rowIndex: location.rowIndex,\n rowCount: location.table.rows.length,\n columnIndex: location.columnIndex,\n columnCount: location.table.rows[0]?.cells.length ?? 0,\n range: null,\n structuralEditingSupported: nativeTableSupportsStructuralEditing(location.table),\n backgroundColor: normalizeColor(location.cell.shading?.fill),\n verticalAlignment: location.cell.verticalAlignment ?? null,\n borderColor: selectedCellBorderColor(location.cell.borders),\n bordersVisible: selectedCellBordersVisible(location.cell.borders),\n };\n}\n\nfunction selectedCellBorderColor(\n borders: import('./model.js').EditorTableBorders | undefined,\n): string | null {\n const border = [borders?.top, borders?.right, borders?.bottom, borders?.left]\n .find((candidate) => candidate && candidate.val !== 'nil' && candidate.val !== 'none');\n return normalizeColor(border?.color);\n}\n\nfunction selectedCellBordersVisible(\n borders: import('./model.js').EditorTableBorders | undefined,\n): boolean {\n return [borders?.top, borders?.right, borders?.bottom, borders?.left]\n .some((border) => !!border && border.val !== 'nil' && border.val !== 'none');\n}\n\nfunction selectedImage(\n doc: NativeWordDocument,\n selection: WordEditorSelection | null,\n): NativeWordImageNode | null {\n if (selection?.kind !== 'object' || selection.objectKind !== 'image') return null;\n const paragraph = findNativeParagraph(doc, selection.paraId);\n return paragraph?.content.find(\n (child): child is NativeWordImageNode => child.kind === 'image' && child.drawingId === selection.objectId,\n ) ?? null;\n}\n\nfunction selectedRunFormats(doc: NativeWordDocument, selection: WordEditorSelection | null): EditorRunFormat[] {\n if (!selection || selection.kind === 'object' || selection.kind === 'table-cell-range') return [];\n if (selection.kind === 'caret') {\n const paragraph = findNativeParagraph(doc, selection.paraId);\n if (!paragraph) return [];\n const format = runFormatAt(doc, paragraph, selection.offset);\n return format ? [format] : [];\n }\n return selectedTextRanges(doc, selection).flatMap((range) => runFormatsInRange(doc, range));\n}\n\nfunction selectedHyperlinkState(\n doc: NativeWordDocument,\n selection: WordEditorSelection | null,\n): WordEditorCommandState['hyperlink'] {\n if (!selection || selection.kind === 'object' || selection.kind === 'table-cell-range') return null;\n if (selection.kind === 'caret') {\n const paragraph = findNativeParagraph(doc, selection.paraId);\n if (!paragraph) return null;\n let position = 0;\n let previous: NativeWordParagraphNode['content'][number] | null = null;\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n if (child.kind === 'text') {\n if (selection.offset > position && selection.offset <= position + length) return child.hyperlink ?? null;\n if (selection.offset === position) {\n return previous?.kind === 'text'\n ? previous.hyperlink ?? child.hyperlink ?? null\n : child.hyperlink ?? null;\n }\n previous = child;\n }\n position += length;\n }\n return previous?.kind === 'text' ? previous.hyperlink ?? null : null;\n }\n const links: Array<WordEditorHyperlink | null> = selectedTextRanges(doc, selection).flatMap((range) => {\n const paragraph = findNativeParagraph(doc, range.paraId);\n if (!paragraph) return [];\n const values: Array<WordEditorHyperlink | null> = [];\n let position = 0;\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n if (child.kind === 'text' && position + length > range.from && position < range.to) {\n values.push(child.hyperlink ?? null);\n }\n position += length;\n }\n return values;\n });\n return mixedStructuredValue(links);\n}\n\nfunction runFormatsInRange(doc: NativeWordDocument, range: TextRange): EditorRunFormat[] {\n const paragraph = findNativeParagraph(doc, range.paraId);\n if (!paragraph) return [];\n const formats: EditorRunFormat[] = [];\n let position = 0;\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n if (child.kind === 'text' && position + length > range.from && position < range.to) {\n formats.push(effectiveRunFormat(doc, paragraph, child.format));\n }\n position += length;\n }\n return formats;\n}\n\nfunction runFormatAt(\n doc: NativeWordDocument,\n paragraph: NativeWordParagraphNode,\n offset: number,\n): EditorRunFormat | null {\n let position = 0;\n let previous: EditorRunFormat | null = null;\n for (const child of paragraph.content) {\n const length = inlineLength(child);\n if (child.kind === 'text') {\n const format = effectiveRunFormat(doc, paragraph, child.format);\n if (offset > position && offset <= position + length) return format;\n if (offset === position) return previous ?? format;\n previous = format;\n }\n position += length;\n }\n return previous ?? effectiveRunFormat(doc, paragraph, null);\n}\n\nfunction effectiveRunFormat(\n doc: NativeWordDocument,\n paragraph: NativeWordParagraphNode,\n run: EditorRunFormat | null,\n): EditorRunFormat {\n const paragraphRun = paragraph.format as EditorRunFormat | null;\n return { ...(doc.defaults?.run ?? {}), ...(paragraphRun ?? {}), ...(run ?? {}) };\n}\n\nfunction selectedParagraphs(doc: NativeWordDocument, selection: WordEditorSelection | null): NativeWordParagraphNode[] {\n if (!selection) return [];\n if (selection.kind === 'table-cell-range') return [];\n if (selection.kind === 'caret' || selection.kind === 'object') {\n const paragraph = findNativeParagraph(doc, selection.paraId);\n return paragraph ? [paragraph] : [];\n }\n return selectedTextRanges(doc, selection)\n .map((range) => findNativeParagraph(doc, range.paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null);\n}\n\nfunction selectedTextRanges(\n doc: NativeWordDocument,\n selection: Extract<WordEditorSelection, { kind: 'text-range' }>,\n): TextRange[] {\n const ordered = orderedSelection(doc, selection);\n if (!ordered) return [];\n if (ordered.anchor.paraId === ordered.focus.paraId) {\n return [{ paraId: ordered.anchor.paraId, from: ordered.anchor.offset, to: ordered.focus.offset }];\n }\n const start = findNativeParagraphLocation(doc, ordered.anchor.paraId);\n const end = findNativeParagraphLocation(doc, ordered.focus.paraId);\n if (!start || !end || start.container !== end.container) return [];\n const ranges: TextRange[] = [];\n for (let index = start.index; index <= end.index; index += 1) {\n const block = start.container[index];\n if (block?.kind !== 'paragraph') return [];\n ranges.push({\n paraId: block.paraId,\n from: index === start.index ? ordered.anchor.offset : 0,\n to: index === end.index ? ordered.focus.offset : nativeParagraphText(block).length,\n });\n }\n return ranges;\n}\n\nfunction orderedSelection(\n doc: NativeWordDocument,\n selection: Extract<WordEditorSelection, { kind: 'text-range' }>,\n): { anchor: WordEditorSelectionPoint; focus: WordEditorSelectionPoint } | null {\n if (selection.anchor.paraId === selection.focus.paraId) {\n return selection.anchor.offset <= selection.focus.offset\n ? { anchor: selection.anchor, focus: selection.focus }\n : { anchor: selection.focus, focus: selection.anchor };\n }\n const anchor = findNativeParagraphLocation(doc, selection.anchor.paraId);\n const focus = findNativeParagraphLocation(doc, selection.focus.paraId);\n if (!anchor || !focus || anchor.container !== focus.container) return null;\n return anchor.index < focus.index\n ? { anchor: selection.anchor, focus: selection.focus }\n : { anchor: selection.focus, focus: selection.anchor };\n}\n\nfunction inlineLength(child: NativeWordParagraphNode['content'][number]): number {\n if (child.kind === 'text') return child.text.length;\n if (child.kind === 'field') return (child.cachedText ?? '\\uFFFC').length;\n if (child.kind === 'drawing' && child.text) return child.text.length;\n return 1;\n}\n\nfunction mixedValue<T>(values: T[], empty: null): WordEditorFormatValue<T>;\nfunction mixedValue<T>(values: T[], empty: T): T | 'mixed';\nfunction mixedValue<T>(values: T[], empty: T | null): WordEditorFormatValue<T> {\n if (values.length === 0) return empty;\n return values.every((value) => value === values[0]) ? values[0]! : 'mixed';\n}\n\nfunction mixedStructuredValue<T>(values: Array<T | null>): WordEditorFormatValue<T> {\n if (values.length === 0 || values.every((value) => value === null)) return null;\n const first = JSON.stringify(values[0]);\n return values.every((value) => JSON.stringify(value) === first) ? (values[0] ?? null) : 'mixed';\n}\n\nfunction normalizeColor(color: string | undefined): string | null {\n if (!color || color.toLowerCase() === 'auto') return null;\n const value = color.replace(/^#/, '').toUpperCase();\n return /^[0-9A-F]{6}$/.test(value) ? `#${value}` : color;\n}\n\nfunction normalizeHighlight(highlight: string | undefined): string | null {\n if (!highlight || highlight.toLowerCase() === 'none') return null;\n return normalizeColor(highlight) ?? highlight;\n}\n\nfunction normalizeAlignment(alignment: EditorParagraphFormat['alignment']): Alignment {\n if (alignment === 'center' || alignment === 'right' || alignment === 'both') return alignment;\n if (alignment === 'distribute') return 'both';\n return 'left';\n}\n","import {\n nativeParagraphText,\n type NativeWordBlockNode,\n type NativeWordDocument,\n type NativeWordParagraphNode,\n} from './native-model.js';\nimport type { WordEditorSearchMatch, WordEditorSearchOptions } from './runtime.js';\n\nexport function searchNativeWordDocument(\n doc: NativeWordDocument,\n options: WordEditorSearchOptions,\n): WordEditorSearchMatch[] {\n if (options.query.length === 0) return [];\n const flags = options.matchCase ? 'gu' : 'giu';\n const pattern = new RegExp(escapeRegExp(options.query), flags);\n const matches: WordEditorSearchMatch[] = [];\n for (const paragraph of bodyParagraphs(doc.blocks)) {\n const text = nativeParagraphText(paragraph);\n for (const match of text.matchAll(pattern)) {\n const from = match.index;\n const to = from + match[0].length;\n if (options.wholeWord && !isWholeWord(text, from, to)) continue;\n matches.push({\n id: `${paragraph.paraId}:${from}:${to}`,\n paraId: paragraph.paraId,\n from,\n to,\n text: match[0],\n });\n }\n }\n return matches;\n}\n\nexport function bodyParagraphs(blocks: readonly NativeWordBlockNode[]): NativeWordParagraphNode[] {\n return blocks.flatMap((block) => {\n if (block.kind === 'paragraph') return [block];\n return block.rows.flatMap((row) => row.cells.flatMap((cell) => bodyParagraphs(cell.blocks)));\n });\n}\n\nfunction isWholeWord(text: string, from: number, to: number): boolean {\n const before = from > 0 ? text[from - 1]! : '';\n const after = to < text.length ? text[to]! : '';\n return !isWordCharacter(before) && !isWordCharacter(after);\n}\n\nfunction isWordCharacter(value: string): boolean {\n return value.length > 0 && /[\\p{L}\\p{N}_]/u.test(value);\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import type { NativeWordChange } from './native-commands.js';\nimport type { WordEditorChangeEvent } from './runtime.js';\n\nexport function createWordEditorChangeEvent(\n previous: readonly NativeWordChange[],\n current: readonly NativeWordChange[],\n revision: number,\n): WordEditorChangeEvent {\n let commonPrefix = 0;\n while (\n commonPrefix < previous.length &&\n commonPrefix < current.length &&\n previous[commonPrefix] === current[commonPrefix]\n ) {\n commonPrefix += 1;\n }\n return {\n revision,\n changes: current.slice(commonPrefix),\n revertedChanges: previous.slice(commonPrefix),\n totalChangeCount: current.length,\n };\n}\n","import type { EditorHyperlink, EditorRunFormat } from './model.js';\nimport { nativeParagraphText, type NativeWordBlockNode } from './native-model.js';\nimport type { NativeWordListType } from './native-numbering.js';\n\nexport const NATIVE_BLOCK_CLIPBOARD_TYPE = 'application/x-coco-word-blocks+json';\n\nexport interface NativeClipboardRun {\n from: number;\n to: number;\n format: Partial<EditorRunFormat>;\n hyperlink?: EditorHyperlink;\n}\n\nexport interface NativeClipboardParagraph {\n text: string;\n runs: NativeClipboardRun[];\n listType?: NativeWordListType;\n}\n\nexport function parseNativeClipboardHtml(html: string): NativeClipboardParagraph[] {\n const document = new DOMParser().parseFromString(html, 'text/html');\n const candidates = Array.from(document.body.querySelectorAll('p, li, h1, h2, h3, h4, h5, h6')).filter(\n (element) => element.tagName !== 'LI' || !element.querySelector('p'),\n );\n const blocks = candidates.length > 0 ? candidates : [document.body];\n return blocks.map((block) => {\n const paragraph: NativeClipboardParagraph = { text: '', runs: [] };\n const list = block.closest('li');\n if (list) paragraph.listType = list.parentElement?.tagName === 'OL' ? 'numbered' : 'bullet';\n appendClipboardNode(block, {}, paragraph);\n paragraph.text = paragraph.text.replace(/\\u00a0/g, ' ');\n return paragraph;\n });\n}\n\nexport function serializeNativeClipboardHtml(paragraphs: NativeClipboardParagraph[]): string {\n let html = '';\n let activeList: NativeWordListType | null = null;\n for (const paragraph of paragraphs) {\n if (paragraph.listType !== activeList) {\n if (activeList) html += activeList === 'numbered' ? '</ol>' : '</ul>';\n activeList = paragraph.listType ?? null;\n if (activeList) html += activeList === 'numbered' ? '<ol>' : '<ul>';\n }\n const content = serializeClipboardParagraphContent(paragraph);\n html += activeList ? `<li>${content}</li>` : `<p>${content}</p>`;\n }\n if (activeList) html += activeList === 'numbered' ? '</ol>' : '</ul>';\n return html;\n}\n\nexport function serializeNativeBlockClipboard(blocks: readonly NativeWordBlockNode[]): string {\n return JSON.stringify({ version: 1, blocks });\n}\n\nexport function parseNativeBlockClipboard(value: string): NativeWordBlockNode[] | null {\n if (!value || value.length > 20_000_000) return null;\n try {\n const payload = JSON.parse(value) as unknown;\n if (!isRecord(payload) || payload.version !== 1 || !Array.isArray(payload.blocks)) return null;\n if (payload.blocks.length === 0 || payload.blocks.length > 1_000) return null;\n return payload.blocks.every(isNativeClipboardBlock) ? payload.blocks as NativeWordBlockNode[] : null;\n } catch {\n return null;\n }\n}\n\nexport function nativeBlockClipboardText(blocks: readonly NativeWordBlockNode[]): string {\n return blocks.map(nativeClipboardBlockText).join('\\n');\n}\n\nfunction nativeClipboardBlockText(block: NativeWordBlockNode): string {\n if (block.kind === 'paragraph') return nativeParagraphText(block);\n return block.rows\n .map((row) => row.cells.map((cell) => cell.blocks.map(nativeClipboardBlockText).join('\\n')).join('\\t'))\n .join('\\n');\n}\n\nfunction isNativeClipboardBlock(value: unknown): boolean {\n if (!isRecord(value)) return false;\n if (value.kind === 'paragraph') {\n return typeof value.paraId === 'string' && typeof value.story === 'string' && Array.isArray(value.content) &&\n value.content.length <= 100_000 && value.content.every(isNativeClipboardInline);\n }\n if (value.kind !== 'table' || typeof value.tableId !== 'string' || !Array.isArray(value.rows) || value.rows.length > 10_000) {\n return false;\n }\n return value.rows.every((row) =>\n isRecord(row) && Array.isArray(row.cells) && row.cells.length <= 1_000 && row.cells.every((cell) =>\n isRecord(cell) && Array.isArray(cell.blocks) && cell.blocks.length <= 10_000 && cell.blocks.every(isNativeClipboardBlock),\n ),\n );\n}\n\nfunction isNativeClipboardInline(value: unknown): boolean {\n if (!isRecord(value) || typeof value.kind !== 'string') return false;\n if (value.kind === 'text') return typeof value.text === 'string';\n if (value.kind === 'image') return typeof value.drawingId === 'string' && typeof value.src === 'string';\n if (value.kind === 'drawing') return typeof value.drawingId === 'string';\n if (value.kind === 'pageBreak') return true;\n if (value.kind === 'field') return typeof value.fieldKind === 'string' && typeof value.instruction === 'string';\n return false;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction serializeClipboardParagraphContent(paragraph: NativeClipboardParagraph): string {\n let html = '';\n let offset = 0;\n const runs = [...paragraph.runs]\n .map((run) => ({ ...run, from: Math.max(0, run.from), to: Math.min(paragraph.text.length, run.to) }))\n .filter((run) => run.to > run.from)\n .sort((left, right) => left.from - right.from || left.to - right.to);\n for (const run of runs) {\n if (run.from > offset) html += escapeClipboardText(paragraph.text.slice(offset, run.from));\n if (run.from < offset) continue;\n const text = escapeClipboardText(paragraph.text.slice(run.from, run.to));\n const style = clipboardRunStyle(run.format);\n let content = style ? `<span style=\"${escapeHtmlAttribute(style)}\">${text}</span>` : text;\n if (run.hyperlink) {\n const href = run.hyperlink.target ?? `#${run.hyperlink.anchor ?? ''}`;\n const title = run.hyperlink.tooltip ? ` title=\"${escapeHtmlAttribute(run.hyperlink.tooltip)}\"` : '';\n content = `<a href=\"${escapeHtmlAttribute(href)}\"${title}>${content}</a>`;\n }\n html += content;\n offset = run.to;\n }\n if (offset < paragraph.text.length) html += escapeClipboardText(paragraph.text.slice(offset));\n return html || '<br>';\n}\n\nfunction clipboardRunStyle(format: Partial<EditorRunFormat>): string {\n const declarations: string[] = [];\n if (format.bold !== undefined) declarations.push(`font-weight:${format.bold ? '700' : '400'}`);\n if (format.italic !== undefined) declarations.push(`font-style:${format.italic ? 'italic' : 'normal'}`);\n const decorations: string[] = [];\n if (format.underline) decorations.push('underline');\n if (format.strike || format.doubleStrike) decorations.push('line-through');\n if (decorations.length > 0) declarations.push(`text-decoration-line:${decorations.join(' ')}`);\n else if (format.underline === false || format.strike === false || format.doubleStrike === false) {\n declarations.push('text-decoration-line:none');\n }\n if (format.fontFamily) declarations.push(`font-family:${format.fontFamily}`);\n if (format.fontSize !== undefined) declarations.push(`font-size:${format.fontSize}pt`);\n if (format.color) declarations.push(`color:#${format.color.replace(/^#/, '')}`);\n if (format.highlight && format.highlight !== 'none') {\n declarations.push(`background-color:#${format.highlight.replace(/^#/, '')}`);\n }\n if (format.verticalAlign) declarations.push(`vertical-align:${format.verticalAlign}`);\n if (format.caps) declarations.push('text-transform:uppercase');\n if (format.smallCaps) declarations.push('font-variant-caps:small-caps');\n if (format.characterSpacing !== undefined) declarations.push(`letter-spacing:${format.characterSpacing / 20}pt`);\n return declarations.join(';');\n}\n\nfunction escapeClipboardText(value: string): string {\n return escapeHtml(value).replace(/\\r\\n?|\\n/g, '<br>');\n}\n\nfunction escapeHtml(value: string): string {\n return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n\nfunction escapeHtmlAttribute(value: string): string {\n return escapeHtml(value).replace(/\"/g, '&quot;');\n}\n\nfunction appendClipboardNode(\n node: Node,\n inherited: Partial<EditorRunFormat>,\n paragraph: NativeClipboardParagraph,\n inheritedHyperlink?: EditorHyperlink,\n): void {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent ?? '';\n if (!text) return;\n const from = paragraph.text.length;\n paragraph.text += text;\n if (Object.keys(inherited).length > 0 || inheritedHyperlink) {\n paragraph.runs.push({\n from,\n to: paragraph.text.length,\n format: inherited,\n ...(inheritedHyperlink ? { hyperlink: inheritedHyperlink } : {}),\n });\n }\n return;\n }\n if (!(node instanceof HTMLElement)) return;\n if (node.tagName === 'BR') {\n paragraph.text += '\\n';\n return;\n }\n const format = { ...inherited, ...clipboardElementFormat(node) };\n const hyperlink = node.tagName === 'A' ? clipboardElementHyperlink(node) : inheritedHyperlink;\n for (const child of Array.from(node.childNodes)) appendClipboardNode(child, format, paragraph, hyperlink);\n}\n\nfunction clipboardElementHyperlink(element: HTMLElement): EditorHyperlink | undefined {\n const href = element.getAttribute('href')?.trim();\n if (!href) return undefined;\n const tooltip = element.getAttribute('title')?.trim();\n if (href.startsWith('#')) {\n const anchor = href.slice(1);\n return anchor ? { anchor, ...(tooltip ? { tooltip } : {}) } : undefined;\n }\n return { target: href, ...(tooltip ? { tooltip } : {}) };\n}\n\nfunction clipboardElementFormat(element: HTMLElement): Partial<EditorRunFormat> {\n const style = element.style;\n const format: Partial<EditorRunFormat> = {};\n if (element.matches('b, strong') || Number.parseInt(style.fontWeight, 10) >= 600) format.bold = true;\n if (element.matches('i, em') || style.fontStyle === 'italic') format.italic = true;\n const decoration = style.textDecorationLine || style.textDecoration;\n if (element.matches('u') || decoration.includes('underline')) format.underline = true;\n if (element.matches('s, strike, del') || decoration.includes('line-through')) format.strike = true;\n if (style.fontFamily) format.fontFamily = style.fontFamily.replace(/[\"']/g, '');\n const fontSize = cssFontSizePoints(style.fontSize);\n if (fontSize !== null) format.fontSize = fontSize;\n const color = normalizeCssColor(style.color);\n const background = normalizeCssColor(style.backgroundColor);\n if (color) format.color = color;\n if (background) format.highlight = background;\n return format;\n}\n\nfunction normalizeCssColor(value: string): string | null {\n const trimmed = value.trim();\n if (!trimmed || trimmed === 'transparent') return null;\n const hex = /^#([\\da-f]{3}|[\\da-f]{6})$/i.exec(trimmed);\n if (hex) {\n const digits = hex[1]!;\n return (digits.length === 3 ? digits.split('').map((digit) => digit + digit).join('') : digits).toUpperCase();\n }\n const rgb = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i.exec(trimmed);\n if (!rgb) return null;\n return rgb.slice(1, 4).map((part) => Math.max(0, Math.min(255, Number(part))).toString(16).padStart(2, '0')).join('').toUpperCase();\n}\n\nfunction cssFontSizePoints(value: string): number | null {\n const match = /^([\\d.]+)(pt|px)$/i.exec(value.trim());\n if (!match) return null;\n const amount = Number(match[1]);\n if (!Number.isFinite(amount)) return null;\n return match[2]?.toLowerCase() === 'px' ? amount * 0.75 : amount;\n}\n","import type {\n NativeWordBlockNode,\n NativeWordDocument,\n NativeWordInlineNode,\n NativeWordParagraphNode,\n NativeWordTableCellNode,\n NativeWordTableNode,\n NativeWordTableRowNode,\n} from './native-model.js';\n\nexport type NativeTableRowPaginationKind =\n | 'repeat-header'\n | 'keep-together'\n | 'block-fragmentable'\n | 'text-fragmentable'\n | 'unsplittable';\n\nexport type NativeTableRowPaginationRisk =\n | 'cant-split'\n | 'row-span'\n | 'vertical-merge'\n | 'nested-table'\n | 'media'\n | 'field'\n | 'page-break'\n | 'comment'\n | 'revision'\n | 'empty-row';\n\nexport interface NativeTableRowPaginationAnalysis {\n kind: NativeTableRowPaginationKind;\n risks: NativeTableRowPaginationRisk[];\n textLength: number;\n paragraphCount: number;\n}\n\nexport interface NativeTablePaginationSummary {\n tables: number;\n rows: number;\n repeatHeaderRows: number;\n keepTogetherRows: number;\n blockFragmentableRows: number;\n textFragmentableRows: number;\n unsplittableRows: number;\n risks: Record<NativeTableRowPaginationRisk, number>;\n}\n\nexport interface NativeTableRowBlockSplitPlan {\n cellBlockCounts: number[];\n}\n\nexport interface NativeTableRowBlockSplitResult {\n head: NativeWordTableRowNode;\n tail: NativeWordTableRowNode;\n}\n\nexport interface NativeTableRowTextSplitPlan {\n cellTextOffsets: number[];\n}\n\nexport function analyzeNativeTableRowPagination(\n row: NativeWordTableRowNode,\n): NativeTableRowPaginationAnalysis {\n const risks = nativeTableRowPaginationRisks(row);\n const paragraphCount = row.cells.reduce((count, cell) => count + countCellParagraphs(cell), 0);\n const textLength = row.cells.reduce((count, cell) => count + nativeCellTextLength(cell), 0);\n\n if (row.isHeader) return { kind: 'repeat-header', risks, textLength, paragraphCount };\n if (risks.includes('cant-split')) return { kind: 'keep-together', risks, textLength, paragraphCount };\n if (risks.length > 0) return { kind: 'unsplittable', risks, textLength, paragraphCount };\n if (textLength === 0) return { kind: 'keep-together', risks: ['empty-row'], textLength, paragraphCount };\n if (paragraphCount > row.cells.length) {\n return { kind: 'block-fragmentable', risks, textLength, paragraphCount };\n }\n return { kind: 'text-fragmentable', risks, textLength, paragraphCount };\n}\n\nexport function summarizeNativeTablePagination(doc: NativeWordDocument): NativeTablePaginationSummary {\n const summary: NativeTablePaginationSummary = {\n tables: 0,\n rows: 0,\n repeatHeaderRows: 0,\n keepTogetherRows: 0,\n blockFragmentableRows: 0,\n textFragmentableRows: 0,\n unsplittableRows: 0,\n risks: {\n 'cant-split': 0,\n 'row-span': 0,\n 'vertical-merge': 0,\n 'nested-table': 0,\n media: 0,\n field: 0,\n 'page-break': 0,\n comment: 0,\n revision: 0,\n 'empty-row': 0,\n },\n };\n summarizeNativeTablePaginationFromBlocks(doc.blocks, summary);\n for (const story of doc.headers) summarizeNativeTablePaginationFromBlocks(story.blocks, summary);\n for (const story of doc.footers) summarizeNativeTablePaginationFromBlocks(story.blocks, summary);\n return summary;\n}\n\nexport function splitNativeTableRowAtBlockBoundary(\n row: NativeWordTableRowNode,\n plan: NativeTableRowBlockSplitPlan,\n): NativeTableRowBlockSplitResult | null {\n const analysis = analyzeNativeTableRowPagination(row);\n if (analysis.kind !== 'block-fragmentable') return null;\n if (plan.cellBlockCounts.length !== row.cells.length) return null;\n\n const headCells: NativeWordTableCellNode[] = [];\n const tailCells: NativeWordTableCellNode[] = [];\n let hasHeadContent = false;\n let hasTailContent = false;\n for (let index = 0; index < row.cells.length; index += 1) {\n const cell = row.cells[index]!;\n const split = splitNativeTableCellAtBlockBoundary(cell, plan.cellBlockCounts[index]!);\n if (!split) return null;\n headCells.push(split.head);\n tailCells.push(split.tail);\n hasHeadContent ||= split.head.blocks.length > 0;\n hasTailContent ||= split.tail.blocks.length > 0;\n }\n if (!hasHeadContent || !hasTailContent) return null;\n\n return {\n head: { ...row, height: undefined, cells: headCells },\n tail: { ...row, height: undefined, cells: tailCells },\n };\n}\n\nexport function splitNativeTableRowAtTextOffset(\n row: NativeWordTableRowNode,\n plan: NativeTableRowTextSplitPlan,\n): NativeTableRowBlockSplitResult | null {\n const analysis = analyzeNativeTableRowPagination(row);\n if (analysis.kind !== 'text-fragmentable') return null;\n if (plan.cellTextOffsets.length !== row.cells.length) return null;\n\n const headCells: NativeWordTableCellNode[] = [];\n const tailCells: NativeWordTableCellNode[] = [];\n for (let index = 0; index < row.cells.length; index += 1) {\n const split = splitNativeTableCellAtTextOffset(row.cells[index]!, plan.cellTextOffsets[index]!);\n if (!split) return null;\n headCells.push(split.head);\n tailCells.push(split.tail);\n }\n return {\n head: { ...row, height: undefined, cells: headCells },\n tail: { ...row, height: undefined, cells: tailCells },\n };\n}\n\nfunction splitNativeTableCellAtTextOffset(\n cell: NativeWordTableCellNode,\n textOffset: number,\n): { head: NativeWordTableCellNode; tail: NativeWordTableCellNode } | null {\n if (cell.blocks.length !== 1) return null;\n const block = cell.blocks[0];\n if (!block || block.kind !== 'paragraph') return null;\n const split = splitNativeParagraphAtTextOffset(block, textOffset);\n if (!split) return null;\n return {\n head: {\n ...cell,\n blocks: [split.head],\n paragraphs: [split.head],\n },\n tail: {\n ...cell,\n blocks: [split.tail],\n paragraphs: [split.tail],\n },\n };\n}\n\nfunction splitNativeParagraphAtTextOffset(\n paragraph: NativeWordParagraphNode,\n textOffset: number,\n): { head: NativeWordParagraphNode; tail: NativeWordParagraphNode } | null {\n const textLength = paragraph.content.reduce(\n (count, inline) => count + (inline.kind === 'text' ? inline.text.length : 0),\n 0,\n );\n if (!Number.isInteger(textOffset) || textOffset <= 0 || textOffset >= textLength) return null;\n const headContent: NativeWordInlineNode[] = [];\n const tailContent: NativeWordInlineNode[] = [];\n let consumed = 0;\n for (const inline of paragraph.content) {\n if (inline.kind !== 'text') return null;\n const start = consumed;\n const end = consumed + inline.text.length;\n consumed = end;\n if (end <= textOffset) {\n headContent.push(inline);\n continue;\n }\n if (start >= textOffset) {\n tailContent.push(inline);\n continue;\n }\n const localOffset = textOffset - start;\n headContent.push({ ...inline, text: inline.text.slice(0, localOffset) });\n tailContent.push({ ...inline, text: inline.text.slice(localOffset) });\n }\n if (headContent.length === 0 || tailContent.length === 0) return null;\n return {\n head: { ...paragraph, content: headContent },\n tail: { ...paragraph, content: tailContent },\n };\n}\n\nfunction splitNativeTableCellAtBlockBoundary(\n cell: NativeWordTableCellNode,\n headBlockCount: number,\n): { head: NativeWordTableCellNode; tail: NativeWordTableCellNode } | null {\n if (!Number.isInteger(headBlockCount)) return null;\n if (headBlockCount < 0 || headBlockCount > cell.blocks.length) return null;\n const headBlocks = cell.blocks.slice(0, headBlockCount);\n const tailBlocks = cell.blocks.slice(headBlockCount);\n if (headBlocks.length === 0 && tailBlocks.length === 0) return null;\n if (headBlocks.length === 0 || tailBlocks.length === 0) return null;\n return {\n head: {\n ...cell,\n blocks: headBlocks,\n paragraphs: headBlocks.flatMap(nativeParagraphsFromBlock),\n },\n tail: {\n ...cell,\n blocks: tailBlocks,\n paragraphs: tailBlocks.flatMap(nativeParagraphsFromBlock),\n },\n };\n}\n\nfunction summarizeNativeTablePaginationFromBlocks(\n blocks: NativeWordBlockNode[],\n summary: NativeTablePaginationSummary,\n): void {\n for (const block of blocks) {\n if (block.kind !== 'table') continue;\n summarizeNativeTable(block, summary);\n }\n}\n\nfunction summarizeNativeTable(table: NativeWordTableNode, summary: NativeTablePaginationSummary): void {\n summary.tables += 1;\n for (const row of table.rows) {\n summary.rows += 1;\n const analysis = analyzeNativeTableRowPagination(row);\n if (analysis.kind === 'repeat-header') summary.repeatHeaderRows += 1;\n else if (analysis.kind === 'keep-together') summary.keepTogetherRows += 1;\n else if (analysis.kind === 'block-fragmentable') summary.blockFragmentableRows += 1;\n else if (analysis.kind === 'text-fragmentable') summary.textFragmentableRows += 1;\n else summary.unsplittableRows += 1;\n for (const risk of analysis.risks) summary.risks[risk] += 1;\n for (const cell of row.cells) summarizeNativeTablePaginationFromBlocks(cell.blocks, summary);\n }\n}\n\nfunction nativeTableRowPaginationRisks(row: NativeWordTableRowNode): NativeTableRowPaginationRisk[] {\n const risks = new Set<NativeTableRowPaginationRisk>();\n if (row.cantSplit) risks.add('cant-split');\n for (const cell of row.cells) {\n if ((cell.rowSpan ?? 1) > 1) risks.add('row-span');\n if (cell.vMerge === 'restart' || cell.vMerge === 'continue') risks.add('vertical-merge');\n collectCellRisks(cell, risks);\n }\n return [...risks];\n}\n\nfunction collectCellRisks(cell: NativeWordTableCellNode, risks: Set<NativeTableRowPaginationRisk>): void {\n for (const block of cell.blocks) {\n if (block.kind === 'table') {\n risks.add('nested-table');\n continue;\n }\n collectParagraphRisks(block, risks);\n }\n}\n\nfunction collectParagraphRisks(\n paragraph: NativeWordParagraphNode,\n risks: Set<NativeTableRowPaginationRisk>,\n): void {\n for (const inline of paragraph.content) {\n collectInlineRisks(inline, risks);\n }\n}\n\nfunction collectInlineRisks(\n inline: NativeWordInlineNode,\n risks: Set<NativeTableRowPaginationRisk>,\n): void {\n if (inline.kind === 'image' || inline.kind === 'drawing') risks.add('media');\n if (inline.kind === 'field') risks.add('field');\n if (inline.kind === 'pageBreak') risks.add('page-break');\n if (inline.kind !== 'text') return;\n if (inline.marks?.some((mark) => mark.kind === 'comment')) risks.add('comment');\n if (inline.marks?.some((mark) => mark.kind === 'revision')) risks.add('revision');\n}\n\nfunction countCellParagraphs(cell: NativeWordTableCellNode): number {\n return cell.blocks.reduce((count, block) => {\n if (block.kind === 'paragraph') return count + 1;\n return count + block.rows.reduce((rowCount, row) => rowCount + row.cells.reduce(\n (cellCount, nestedCell) => cellCount + countCellParagraphs(nestedCell),\n 0,\n ), 0);\n }, 0);\n}\n\nfunction nativeCellTextLength(cell: NativeWordTableCellNode): number {\n return cell.blocks.reduce((count, block) => count + nativeBlockTextLength(block), 0);\n}\n\nfunction nativeParagraphsFromBlock(block: NativeWordBlockNode): NativeWordParagraphNode[] {\n if (block.kind === 'paragraph') return [block];\n return block.rows.flatMap((row) => row.cells.flatMap((cell) => cell.blocks.flatMap(nativeParagraphsFromBlock)));\n}\n\nfunction nativeBlockTextLength(block: NativeWordBlockNode): number {\n if (block.kind === 'paragraph') {\n return block.content.reduce((count, inline) => count + (inline.kind === 'text' ? inline.text.length : 0), 0);\n }\n return block.rows.reduce(\n (rowCount, row) => rowCount + row.cells.reduce((cellCount, cell) => cellCount + nativeCellTextLength(cell), 0),\n 0,\n );\n}\n","import { createBinaryPart, createXmlPart, getPart, markDirty, setPart, type Package, type Part } from '@coco-vexel/coco-office/pack';\nimport { buildIndices, W14_NS, W_NS, type PackageIndices } from '@coco-vexel/coco-office/word-view';\nimport type { NativeWordChange } from './native-commands.js';\nimport type { NativeWordParagraphNode, NativeWordTableCellNode, NativeWordTableNode } from './native-model.js';\nimport type { EditorRunFormat } from './model.js';\n\nconst XML_NS = 'http://www.w3.org/XML/1998/namespace';\nconst R_NS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nconst PACKAGE_RELS_NS = 'http://schemas.openxmlformats.org/package/2006/relationships';\nconst A_NS = 'http://schemas.openxmlformats.org/drawingml/2006/main';\nconst WP_NS = 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing';\nconst PIC_NS = 'http://schemas.openxmlformats.org/drawingml/2006/picture';\nconst CONTENT_TYPES_NS = 'http://schemas.openxmlformats.org/package/2006/content-types';\nconst COMMENTS_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml';\nconst COMMENTS_EXTENDED_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml';\nconst COMMENTS_EXTENDED_REL_TYPE = 'http://schemas.microsoft.com/office/2011/relationships/commentsExtended';\nconst W15_NS = 'http://schemas.microsoft.com/office/word/2012/wordml';\nconst HYPERLINK_REL_TYPE = `${R_NS}/hyperlink`;\nconst RELS_CONTENT_TYPE = 'application/vnd.openxmlformats-package.relationships+xml';\n\nexport type WordOoxmlPatchKind =\n | 'paragraph-text'\n | 'paragraph-split'\n | 'paragraph-merge'\n | 'paragraph-format'\n | 'format-revision'\n | 'drawing-delete'\n | 'hyperlink'\n | 'table-structure'\n | 'table-insert'\n | 'table-cell-format'\n | 'table-cell-clear'\n | 'table-cell-replace'\n | 'table-cell-replace-rich'\n | 'revision'\n | 'drawing-revision'\n | 'table-delete';\n\nexport type WordOoxmlPatch =\n | {\n kind: 'paragraph-text';\n op: 'insert' | 'delete' | 'replace';\n paraId: string;\n offset: number;\n text: string;\n deletedText?: string;\n }\n | {\n kind: 'paragraph-split';\n paraId: string;\n newParaId: string;\n offset: number;\n }\n | {\n kind: 'paragraph-merge';\n paraId: string;\n }\n | {\n kind: 'paragraph-format';\n paraId: string;\n from: number;\n to: number;\n format: Partial<EditorRunFormat>;\n }\n | {\n kind: 'format-revision';\n op: 'run' | 'accept' | 'reject';\n paraId: string;\n from: number;\n to: number;\n revisionId: string;\n beforeFormat?: Partial<EditorRunFormat> | null;\n }\n | {\n kind: 'drawing-delete';\n paraId: string;\n drawingId: string;\n offset: number;\n }\n | {\n kind: 'drawing-resize';\n paraId: string;\n drawingId: string;\n offset: number;\n width: number;\n height: number;\n }\n | {\n kind: 'drawing-insert';\n paraId: string;\n drawingId: string;\n offset: number;\n src: string;\n width: number;\n height: number;\n }\n | {\n kind: 'drawing-revision';\n op: 'accept' | 'reject';\n paraId: string;\n drawingId: string;\n offset: number;\n revisionId: string;\n revisionKind: 'insert' | 'delete';\n }\n | {\n kind: 'comment';\n op: 'insert' | 'delete' | 'update';\n paraId: string;\n from: number;\n to: number;\n commentId: number;\n body?: string;\n parentCommentId?: number;\n }\n | {\n kind: 'revision';\n op: 'insert' | 'delete' | 'accept' | 'reject';\n paraId: string;\n from: number;\n to: number;\n revisionId: string;\n revisionKind: 'insert' | 'delete';\n }\n | {\n kind: 'hyperlink';\n op: 'set' | 'remove';\n paraId: string;\n from: number;\n to: number;\n hyperlink?: { target?: string; anchor?: string; tooltip?: string };\n }\n | {\n kind: 'table-structure';\n op: 'insert-row' | 'delete-row' | 'insert-column' | 'delete-column' | 'merge-cells' | 'split-cell';\n tableId: string;\n rowIndex: number;\n columnIndex: number;\n endColumnIndex?: number;\n endRowIndex?: number;\n }\n | {\n kind: 'table-cell-replace-rich';\n tableId: string;\n rowIndex: number;\n columnIndex: number;\n cell: NativeWordTableCellNode;\n }\n | {\n kind: 'table-cell-replace';\n tableId: string;\n rowIndex: number;\n columnIndex: number;\n text: string;\n }\n | {\n kind: 'table-cell-clear';\n tableId: string;\n rowIndex: number;\n columnIndex: number;\n }\n | {\n kind: 'table-cell-format';\n tableId: string;\n rowIndex: number;\n columnIndex: number;\n format: {\n backgroundColor?: string | null;\n verticalAlignment?: 'top' | 'center' | 'bottom' | 'both' | null;\n borderColor?: string | null;\n };\n }\n | {\n kind: 'table-insert';\n anchorParaId: string;\n anchorOffset: number;\n table: NativeWordTableNode;\n }\n | {\n kind: 'table-delete';\n tableId: string;\n };\n\nexport interface WordOoxmlPatchPlan {\n target: 'word/document.xml';\n patches: WordOoxmlPatch[];\n unsupported: UnsupportedNativeWordChange[];\n}\n\nexport type ResolvedWordOoxmlPatchTarget =\n | {\n kind: 'paragraph';\n patch: Extract<WordOoxmlPatch, { kind: 'paragraph-text' | 'paragraph-split' | 'paragraph-merge' | 'paragraph-format' | 'format-revision' | 'hyperlink' | 'revision' }>;\n partPath: string;\n paragraph: Element;\n }\n | {\n kind: 'table';\n patch: Extract<WordOoxmlPatch, { kind: 'table-structure' | 'table-insert' | 'table-cell-format' | 'table-cell-clear' | 'table-cell-replace' | 'table-cell-replace-rich' | 'table-delete' }>;\n partPath: string;\n table: Element;\n paragraph?: Element;\n }\n | {\n kind: 'drawing';\n patch: Extract<WordOoxmlPatch, { kind: 'drawing-delete' | 'drawing-resize' | 'drawing-insert' | 'drawing-revision' }>;\n partPath: string;\n drawing: Element;\n paragraph: Element | null;\n }\n | {\n kind: 'comment';\n patch: Extract<WordOoxmlPatch, { kind: 'comment' }>;\n partPath: string;\n paragraph: Element;\n };\n\nexport interface UnresolvedWordOoxmlPatchTarget {\n patch: WordOoxmlPatch;\n reason: string;\n}\n\nexport interface WordOoxmlPatchTargetResolution {\n resolved: ResolvedWordOoxmlPatchTarget[];\n unresolved: UnresolvedWordOoxmlPatchTarget[];\n}\n\nexport interface SkippedWordOoxmlPatch {\n patch: WordOoxmlPatch;\n reason: string;\n}\n\nexport interface WordOoxmlPatchApplyResult {\n applied: WordOoxmlPatch[];\n skipped: SkippedWordOoxmlPatch[];\n unresolved: UnresolvedWordOoxmlPatchTarget[];\n}\n\nexport interface NativeWordChangeApplyResult extends WordOoxmlPatchApplyResult {\n plan: WordOoxmlPatchPlan;\n}\n\nexport interface UnsupportedNativeWordChange {\n change: NativeWordChange;\n reason: string;\n}\n\nexport function planWordOoxmlPatches(changes: readonly NativeWordChange[]): WordOoxmlPatchPlan {\n const patches: WordOoxmlPatch[] = [];\n const unsupported: UnsupportedNativeWordChange[] = [];\n const tableResolution = new Map<string, 'accept' | 'reject'>();\n for (const change of changes) {\n if (change.kind === 'table' && change.revisionId && change.revisionAction) {\n tableResolution.set(change.revisionId, change.revisionAction);\n }\n }\n\n for (const change of changes) {\n if (change.kind === 'table' && change.revisionAction) continue;\n if (change.kind === 'table' && change.revisionId && tableResolution.get(change.revisionId) === 'reject') continue;\n const patch = planWordOoxmlPatch(change, {\n allowTrackedTable: change.kind === 'table' && !!change.revisionId && tableResolution.get(change.revisionId) === 'accept',\n });\n if (patch) {\n patches.push(patch);\n } else {\n unsupported.push({\n change,\n reason: unsupportedReason(change),\n });\n }\n }\n\n return {\n target: 'word/document.xml',\n patches,\n unsupported,\n };\n}\n\nexport function applyNativeWordChangesToPackage(\n pkg: Package,\n changes: readonly NativeWordChange[],\n indices: PackageIndices = buildIndices(pkg),\n): NativeWordChangeApplyResult {\n const plan = planWordOoxmlPatches(changes);\n const applyResult = applyWordOoxmlPatches(pkg, indices, plan.patches);\n return {\n plan,\n ...applyResult,\n };\n}\n\nexport function planWordOoxmlPatch(\n change: NativeWordChange,\n options: { allowTrackedTable?: boolean } = {},\n): WordOoxmlPatch | null {\n if (change.kind === 'text') {\n return {\n kind: 'paragraph-text',\n op: change.op,\n paraId: change.paraId,\n offset: change.offset,\n text: change.text,\n ...(change.deletedText !== undefined ? { deletedText: change.deletedText } : {}),\n };\n }\n\n if (change.kind === 'format' && change.op === 'run' && change.revisionId && change.revisionKind === 'format') {\n return {\n kind: 'format-revision',\n op: 'run',\n paraId: change.paraId,\n from: change.from,\n to: change.to,\n revisionId: change.revisionId,\n ...(change.beforeFormat !== undefined ? { beforeFormat: change.beforeFormat } : {}),\n };\n }\n\n if (change.kind === 'format' && change.op === 'run') {\n return {\n kind: 'paragraph-format',\n paraId: change.paraId,\n from: change.from,\n to: change.to,\n format: change.format,\n };\n }\n\n if (change.kind === 'format' && (change.op === 'accept' || change.op === 'reject') && change.revisionId) {\n return {\n kind: 'format-revision',\n op: change.op,\n paraId: change.paraId,\n from: change.from,\n to: change.to,\n revisionId: change.revisionId,\n };\n }\n\n if (change.kind === 'image' && change.op === 'delete') {\n return {\n kind: 'drawing-delete',\n paraId: change.paraId,\n drawingId: change.drawingId,\n offset: change.offset,\n };\n }\n\n if (change.kind === 'image' && change.op === 'resize' && change.width && change.height) {\n return {\n kind: 'drawing-resize',\n paraId: change.paraId,\n drawingId: change.drawingId,\n offset: change.offset,\n width: change.width,\n height: change.height,\n };\n }\n\n if (change.kind === 'image' && change.op === 'insert' && change.src && change.width && change.height) {\n return {\n kind: 'drawing-insert',\n paraId: change.paraId,\n drawingId: change.drawingId,\n offset: change.offset,\n src: change.src,\n width: change.width,\n height: change.height,\n };\n }\n\n if (change.kind === 'image' && (change.op === 'accept' || change.op === 'reject') && change.revisionId && (change.revisionKind === 'insert' || change.revisionKind === 'delete')) {\n return {\n kind: 'drawing-revision',\n op: change.op,\n paraId: change.paraId,\n drawingId: change.drawingId,\n offset: change.offset,\n revisionId: change.revisionId,\n revisionKind: change.revisionKind,\n };\n }\n\n if (change.kind === 'block' && change.op === 'split' && change.newParaId && change.offset !== undefined) {\n return {\n kind: 'paragraph-split',\n paraId: change.paraId,\n newParaId: change.newParaId,\n offset: change.offset,\n };\n }\n\n if (change.kind === 'block' && change.op === 'merge') {\n return {\n kind: 'paragraph-merge',\n paraId: change.paraId,\n };\n }\n\n if (change.kind === 'hyperlink') {\n if (change.from >= change.to) return null;\n const hyperlink = change.hyperlink;\n if (change.op === 'set' && (!hyperlink?.target || !isExternalHyperlinkTarget(hyperlink.target) || hyperlink.anchor)) {\n return null;\n }\n return {\n kind: 'hyperlink',\n op: change.op,\n paraId: change.paraId,\n from: change.from,\n to: change.to,\n ...(change.op === 'set' && hyperlink ? { hyperlink } : {}),\n };\n }\n\n if (\n change.kind === 'table' &&\n (!change.revisionId || options.allowTrackedTable === true) &&\n change.op !== 'insert-table' &&\n change.op !== 'delete-table' &&\n change.op !== 'format-cell' &&\n change.op !== 'clear-cell' &&\n change.op !== 'replace-cell'\n ) {\n return {\n kind: 'table-structure',\n op: change.op,\n tableId: change.tableId,\n rowIndex: change.rowIndex,\n columnIndex: change.columnIndex,\n ...(change.endColumnIndex !== undefined ? { endColumnIndex: change.endColumnIndex } : {}),\n ...(change.endRowIndex !== undefined ? { endRowIndex: change.endRowIndex } : {}),\n };\n }\n\n if (change.kind === 'table' && change.op === 'insert-table' && change.tableSnapshot && change.anchorParaId) {\n return {\n kind: 'table-insert',\n anchorParaId: change.anchorParaId,\n anchorOffset: change.anchorOffset ?? 0,\n table: change.tableSnapshot,\n };\n }\n\n if (change.kind === 'table' && change.op === 'format-cell' && change.format) {\n return {\n kind: 'table-cell-format',\n tableId: change.tableId,\n rowIndex: change.rowIndex,\n columnIndex: change.columnIndex,\n format: change.format,\n };\n }\n\n if (change.kind === 'table' && change.op === 'clear-cell') {\n return { kind: 'table-cell-clear', tableId: change.tableId, rowIndex: change.rowIndex, columnIndex: change.columnIndex };\n }\n\n if (change.kind === 'table' && change.op === 'replace-cell' && change.text !== undefined) {\n return { kind: 'table-cell-replace', tableId: change.tableId, rowIndex: change.rowIndex, columnIndex: change.columnIndex, text: change.text };\n }\n\n if (change.kind === 'table' && change.op === 'replace-cell' && change.cellSnapshot) {\n if (tableCellSnapshotHasUnsupportedInlineContent(change.cellSnapshot)) return null;\n return { kind: 'table-cell-replace-rich', tableId: change.tableId, rowIndex: change.rowIndex, columnIndex: change.columnIndex, cell: change.cellSnapshot };\n }\n\n\n if (change.kind === 'annotation' && (change.op === 'insert' || change.op === 'delete' || change.op === 'update')) {\n return {\n kind: 'comment',\n op: change.op,\n paraId: change.paraId,\n from: change.from,\n to: change.to,\n commentId: change.commentId,\n ...(change.parentCommentId !== undefined ? { parentCommentId: change.parentCommentId } : {}),\n ...(change.body !== undefined ? { body: change.body } : {}),\n };\n }\n\n if (change.kind === 'revision') {\n return {\n kind: 'revision',\n op: change.op,\n paraId: change.paraId,\n from: change.from,\n to: change.to,\n revisionId: change.revisionId,\n revisionKind: change.revisionKind,\n };\n }\n\n if (change.kind === 'table' && change.op === 'delete-table' && options.allowTrackedTable === true) {\n return { kind: 'table-delete', tableId: change.tableId };\n }\n\n return null;\n}\n\nexport function resolveWordOoxmlPatchTargets(\n pkg: Package,\n indices: PackageIndices,\n patches: readonly WordOoxmlPatch[],\n): WordOoxmlPatchTargetResolution {\n const resolved: ResolvedWordOoxmlPatchTarget[] = [];\n const unresolved: UnresolvedWordOoxmlPatchTarget[] = [];\n\n for (const patch of patches) {\n if (patch.kind === 'drawing-delete' || patch.kind === 'drawing-resize' || patch.kind === 'drawing-revision') {\n let drawing = indices.drawingIdx.get(patch.drawingId);\n if (!drawing && patch.kind === 'drawing-revision') {\n const paragraph = indices.paraIdx.get(patch.paraId.toUpperCase());\n drawing = paragraph ? findDrawingAtParagraphOffset(paragraph, patch.offset) ?? undefined : undefined;\n }\n if (!drawing) {\n unresolved.push({ patch, reason: `drawing not found: ${patch.drawingId}` });\n continue;\n }\n const partPath = partPathForNode(pkg, drawing);\n if (!partPath) {\n unresolved.push({ patch, reason: `drawing part not found: ${patch.drawingId}` });\n continue;\n }\n resolved.push({\n kind: 'drawing',\n patch,\n partPath,\n drawing,\n paragraph: indices.paraIdx.get(patch.paraId.toUpperCase()) ?? null,\n });\n continue;\n }\n\n if (patch.kind === 'drawing-insert') {\n const paragraph = indices.paraIdx.get(patch.paraId.toUpperCase());\n if (!paragraph) {\n unresolved.push({ patch, reason: `paragraph not found: ${patch.paraId}` });\n continue;\n }\n const partPath = partPathForNode(pkg, paragraph);\n if (!partPath) {\n unresolved.push({ patch, reason: `paragraph part not found: ${patch.paraId}` });\n continue;\n }\n resolved.push({ kind: 'drawing', patch, partPath, drawing: paragraph, paragraph });\n continue;\n }\n\n if (patch.kind === 'comment') {\n const paragraph = indices.paraIdx.get(patch.paraId.toUpperCase());\n if (!paragraph) {\n unresolved.push({ patch, reason: `paragraph not found: ${patch.paraId}` });\n continue;\n }\n const partPath = partPathForNode(pkg, paragraph);\n if (!partPath) {\n unresolved.push({ patch, reason: `paragraph part not found: ${patch.paraId}` });\n continue;\n }\n resolved.push({ kind: 'comment', patch, partPath, paragraph });\n continue;\n }\n\n if (patch.kind === 'table-insert') {\n const paragraph = indices.paraIdx.get(patch.anchorParaId.toUpperCase());\n if (!paragraph) {\n unresolved.push({ patch, reason: `anchor paragraph not found: ${patch.anchorParaId}` });\n continue;\n }\n const partPath = partPathForNode(pkg, paragraph);\n if (!partPath) {\n unresolved.push({ patch, reason: `paragraph part not found: ${patch.anchorParaId}` });\n continue;\n }\n resolved.push({ kind: 'table', patch, partPath, table: paragraph, paragraph });\n continue;\n }\n\n if (patch.kind === 'table-structure' || patch.kind === 'table-cell-format' || patch.kind === 'table-cell-clear' || patch.kind === 'table-cell-replace' || patch.kind === 'table-cell-replace-rich' || patch.kind === 'table-delete') {\n const table = indices.tblIdx.get(patch.tableId);\n if (!table) {\n unresolved.push({ patch, reason: `table not found: ${patch.tableId}` });\n continue;\n }\n const partPath = partPathForNode(pkg, table);\n if (!partPath) {\n unresolved.push({ patch, reason: `table part not found: ${patch.tableId}` });\n continue;\n }\n resolved.push({ kind: 'table', patch, partPath, table });\n continue;\n }\n\n const paragraph = indices.paraIdx.get(patch.paraId.toUpperCase());\n if (!paragraph) {\n unresolved.push({ patch, reason: `paragraph not found: ${patch.paraId}` });\n continue;\n }\n const partPath = partPathForNode(pkg, paragraph);\n if (!partPath) {\n unresolved.push({ patch, reason: `paragraph part not found: ${patch.paraId}` });\n continue;\n }\n resolved.push({\n kind: 'paragraph',\n patch,\n partPath,\n paragraph,\n });\n }\n\n return { resolved, unresolved };\n}\n\nexport function applyWordOoxmlPatches(\n pkg: Package,\n indices: PackageIndices,\n patches: readonly WordOoxmlPatch[],\n): WordOoxmlPatchApplyResult {\n const applied: WordOoxmlPatch[] = [];\n const skipped: SkippedWordOoxmlPatch[] = [];\n const unresolved: UnresolvedWordOoxmlPatchTarget[] = [];\n const resolvedRevisionIds = new Set<string>();\n let currentIndices = indices;\n\n for (const patch of patches) {\n const resolution = resolveWordOoxmlPatchTargets(pkg, currentIndices, [patch]);\n if (resolution.unresolved.length > 0) {\n unresolved.push(...resolution.unresolved);\n continue;\n }\n const target = resolution.resolved[0];\n if (!target) continue;\n const part = partForNode(pkg, target.kind === 'paragraph' ? target.paragraph : target.kind === 'drawing' ? target.drawing : target.kind === 'table' ? target.table : target.paragraph);\n if (!part) {\n skipped.push({ patch: target.patch, reason: `part not found: ${target.partPath}` });\n continue;\n }\n\n if (target.kind === 'drawing') {\n if (target.patch.kind === 'drawing-insert') {\n const inserted = insertDrawingIntoParagraph(pkg, target.partPath, target.paragraph ?? target.drawing, target.patch);\n if (!inserted.ok) {\n skipped.push({ patch: target.patch, reason: inserted.reason });\n continue;\n }\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n if (target.patch.kind === 'drawing-revision') {\n const shouldRemove =\n (target.patch.revisionKind === 'insert' && target.patch.op === 'reject') ||\n (target.patch.revisionKind === 'delete' && target.patch.op === 'accept');\n if (shouldRemove) removeDrawing(target.drawing);\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n if (target.patch.kind === 'drawing-resize') {\n const resized = resizeDrawing(target.drawing, target.patch.width, target.patch.height);\n if (!resized.ok) {\n skipped.push({ patch: target.patch, reason: resized.reason });\n continue;\n }\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n removeDrawing(target.drawing);\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n\n if (target.kind === 'table') {\n if (target.patch.kind === 'table-insert') {\n const inserted = createNativeTableElement(target.table.ownerDocument, target.patch.table, pkg, target.partPath);\n target.table.parentNode?.insertBefore(inserted, target.table.nextSibling);\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n if (target.patch.kind === 'table-cell-format') {\n const formatted = applyTableCellFormatPatch(target.table, target.patch);\n if (!formatted.ok) {\n skipped.push({ patch: target.patch, reason: formatted.reason });\n continue;\n }\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n if (target.patch.kind === 'table-cell-clear') {\n const cleared = clearTableCellContent(target.table, target.patch);\n if (!cleared.ok) {\n skipped.push({ patch: target.patch, reason: cleared.reason });\n continue;\n }\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n if (target.patch.kind === 'table-cell-replace') {\n const replaced = replaceTableCellText(target.table, target.patch);\n if (!replaced.ok) {\n skipped.push({ patch: target.patch, reason: replaced.reason });\n continue;\n }\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n if (target.patch.kind === 'table-cell-replace-rich') {\n const replaced = replaceTableCellSnapshot(pkg, target.partPath, target.table, target.patch);\n if (!replaced.ok) {\n skipped.push({ patch: target.patch, reason: replaced.reason });\n continue;\n }\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n if (target.patch.kind === 'table-delete') {\n removeNode(target.table);\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n const appliedTable = applyTableStructurePatch(target.table, target.patch);\n if (!appliedTable.ok) {\n skipped.push({ patch: target.patch, reason: appliedTable.reason });\n continue;\n }\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n\n if (target.kind === 'comment') {\n const comment = applyCommentPatch(pkg, target.partPath, target.paragraph, target.patch);\n if (!comment.ok) {\n skipped.push({ patch: target.patch, reason: comment.reason });\n continue;\n }\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n\n if (target.patch.kind === 'revision') {\n const revision = applyRevisionPatch(target.paragraph, target.patch);\n if (!revision.ok) {\n if (\n (target.patch.op === 'accept' || target.patch.op === 'reject') &&\n revision.reason === `revision not found: ${target.patch.revisionId}` &&\n resolvedRevisionIds.has(target.patch.revisionId)\n ) {\n applied.push(target.patch);\n continue;\n }\n skipped.push({ patch: target.patch, reason: revision.reason });\n continue;\n }\n markDirty(part);\n applied.push(target.patch);\n if (target.patch.op === 'accept' || target.patch.op === 'reject') resolvedRevisionIds.add(target.patch.revisionId);\n currentIndices = buildIndices(pkg);\n continue;\n }\n\n if (target.patch.kind === 'paragraph-format') {\n const formatted = applyParagraphFormatPatch(target.paragraph, target.patch);\n if (!formatted.ok) {\n skipped.push({ patch: target.patch, reason: formatted.reason });\n continue;\n }\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n\n if (target.patch.kind === 'format-revision') {\n const formatted = applyFormatRevisionPatch(target.paragraph, target.patch);\n if (!formatted.ok) {\n skipped.push({ patch: target.patch, reason: formatted.reason });\n continue;\n }\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n\n if (target.patch.kind === 'paragraph-split') {\n const split = splitParagraphElement(target.paragraph, target.patch.offset, target.patch.newParaId);\n if (!split.ok) {\n skipped.push({ patch: target.patch, reason: split.reason });\n continue;\n }\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n\n if (target.patch.kind === 'paragraph-merge') {\n const merge = mergeNextParagraphElement(target.paragraph);\n if (!merge.ok) {\n skipped.push({ patch: target.patch, reason: merge.reason });\n continue;\n }\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n\n if (target.patch.kind === 'hyperlink') {\n const hyperlink = applyParagraphHyperlinkPatch(pkg, target.partPath, target.paragraph, target.patch);\n if (!hyperlink.ok) {\n skipped.push({ patch: target.patch, reason: hyperlink.reason });\n continue;\n }\n markDirty(part);\n applied.push(target.patch);\n currentIndices = buildIndices(pkg);\n continue;\n }\n\n const appliedText = applyParagraphTextPatch(target.paragraph, target.patch);\n if (!appliedText.ok) {\n skipped.push({ patch: target.patch, reason: appliedText.reason });\n continue;\n }\n markDirty(part);\n applied.push(target.patch);\n }\n\n return {\n applied,\n skipped,\n unresolved,\n };\n}\n\nfunction unsupportedReason(change: NativeWordChange): string {\n if (change.kind === 'block' && change.op === 'split') {\n return 'paragraph split change is missing newParaId or offset';\n }\n if (change.kind === 'hyperlink') {\n if (change.op === 'set' && change.hyperlink?.anchor) return 'hyperlink anchors are not yet written back';\n return 'only external http/https hyperlinks can be written back';\n }\n if (change.kind === 'image' && change.op === 'resize') return 'image resize is missing width or height';\n if (change.kind === 'image' && change.op === 'insert') return 'image insert requires data URL, width, and height';\n if (change.kind === 'table') {\n if (change.op === 'replace-cell' && change.cellSnapshot && tableCellSnapshotHasUnsupportedInlineContent(change.cellSnapshot)) {\n return 'table cell rich replacement does not yet write back drawings or hyperlink anchors';\n }\n if (change.revisionId || change.revisionKind) return 'table revision writeback requires an original table structure snapshot';\n return 'table structure change is not supported for DOCX writeback';\n }\n return `unsupported native change: ${change.kind}/${'op' in change ? change.op : 'unknown'}`;\n}\n\nfunction tableCellSnapshotHasUnsupportedInlineContent(cell: NativeWordTableCellNode): boolean {\n return cell.blocks.some((block) =>\n block.kind !== 'paragraph' || block.content.some((child) => child.kind === 'drawing' || (child.kind === 'text' && child.hyperlink !== undefined && !child.hyperlink.target)),\n );\n}\n\nfunction isExternalHyperlinkTarget(target: string): boolean {\n try {\n const protocol = new URL(target).protocol.toLowerCase();\n return protocol === 'http:' || protocol === 'https:';\n } catch {\n return false;\n }\n}\n\nfunction applyParagraphHyperlinkPatch(\n pkg: Package,\n partPath: string,\n paragraph: Element,\n patch: Extract<WordOoxmlPatch, { kind: 'hyperlink' }>,\n): { ok: true } | { ok: false; reason: string } {\n const children = directChildren(paragraph).filter((child) => !(child.namespaceURI === W_NS && child.localName === 'pPr'));\n const totalLength = children.reduce((sum, child) => sum + inlineNodeLength(child), 0);\n if (patch.from < 0 || patch.to > totalLength || patch.from >= patch.to) {\n return { ok: false, reason: `hyperlink range out of range: ${patch.from}:${patch.to}` };\n }\n if (children.some((child) => child.namespaceURI !== W_NS || !['r', 'hyperlink'].includes(child.localName ?? ''))) {\n return { ok: false, reason: 'hyperlink patch only supports text runs and existing hyperlinks' };\n }\n if (children.some((child) => inlineNodeContainsObject(child))) {\n return { ok: false, reason: 'hyperlink patch cannot cross inline objects' };\n }\n\n let relationshipId: string | null = null;\n let relsPart: Part | null = null;\n if (patch.op === 'set') {\n const target = patch.hyperlink?.target;\n if (!target || !isExternalHyperlinkTarget(target)) {\n return { ok: false, reason: 'only external http/https hyperlinks can be written back' };\n }\n const relationship = ensureExternalHyperlinkRelationship(pkg, partPath, target);\n relationshipId = relationship.id;\n relsPart = relationship.part;\n }\n\n const nextChildren: Element[] = [];\n let position = 0;\n const selectedChildren: Element[] = [];\n for (const child of children) {\n const length = inlineNodeLength(child);\n const localFrom = Math.max(0, patch.from - position);\n const localTo = Math.min(length, patch.to - position);\n const intersects = localFrom < localTo;\n if (!intersects) {\n nextChildren.push(child);\n position += length;\n continue;\n }\n if (localFrom > 0) {\n const before = sliceInlineElement(child, 0, localFrom);\n if (before) nextChildren.push(before);\n }\n const selected = sliceInlineElement(child, localFrom, localTo);\n if (selected) selectedChildren.push(...unwrapHyperlinkSlice(selected));\n if (localTo < length) {\n const after = sliceInlineElement(child, localTo, length);\n if (after) nextChildren.push(after);\n }\n position += length;\n }\n\n if (patch.op === 'set') {\n const doc = paragraph.ownerDocument;\n if (!doc || !relationshipId) return { ok: false, reason: 'paragraph has no owner document or relationship' };\n const wrapper = doc.createElementNS(W_NS, 'w:hyperlink');\n wrapper.setAttributeNS(R_NS, 'r:id', relationshipId);\n const tooltip = patch.hyperlink?.tooltip?.trim();\n if (tooltip) wrapper.setAttributeNS(W_NS, 'w:tooltip', tooltip);\n for (const selected of selectedChildren) wrapper.appendChild(selected);\n insertSelectedHyperlink(nextChildren, wrapper, patch);\n } else {\n insertSelectedNodes(nextChildren, selectedChildren, patch);\n }\n\n for (const child of children) removeNode(child);\n for (const child of nextChildren) paragraph.appendChild(child);\n if (relsPart) markDirty(relsPart);\n return { ok: true };\n}\n\nfunction insertSelectedHyperlink(nextChildren: Element[], wrapper: Element, patch: Extract<WordOoxmlPatch, { kind: 'hyperlink' }>): void {\n insertSelectedNodes(nextChildren, [wrapper], patch);\n}\n\nfunction insertSelectedNodes(nextChildren: Element[], selected: Element[], patch: Extract<WordOoxmlPatch, { kind: 'hyperlink' }>): void {\n // Rebuild once so the selected content lands at its original logical offset.\n let cursor = 0;\n let inserted = false;\n const rebuilt: Element[] = [];\n for (const child of nextChildren) {\n if (!inserted && cursor >= patch.from) {\n rebuilt.push(...selected);\n inserted = true;\n }\n rebuilt.push(child);\n cursor += inlineNodeLength(child);\n }\n if (!inserted) rebuilt.push(...selected);\n nextChildren.splice(0, nextChildren.length, ...rebuilt);\n}\n\nfunction sliceInlineElement(element: Element, from: number, to: number): Element | null {\n if (to <= from) return null;\n const clone = element.cloneNode(true) as Element;\n applyTextSlice(clone, from, to);\n return inlineNodeLength(clone) > 0 ? clone : null;\n}\n\nfunction unwrapHyperlinkSlice(element: Element): Element[] {\n if (!(element.namespaceURI === W_NS && element.localName === 'hyperlink')) return [element];\n return directChildren(element).filter((child) => child.namespaceURI === W_NS && child.localName === 'r');\n}\n\nfunction inlineNodeContainsObject(element: Element): boolean {\n return element.getElementsByTagNameNS(W_NS, 'drawing').length > 0 || element.getElementsByTagNameNS(W_NS, 'pict').length > 0;\n}\n\nfunction ensureExternalHyperlinkRelationship(pkg: Package, partPath: string, target: string): { id: string; part: Part } {\n const relsPath = relsPathFor(partPath);\n let part = pkg.parts.get(relsPath);\n if (!part?.xmlDom) {\n const sourceDocument = Array.from(pkg.parts.values()).find((candidate) => candidate.xmlDom)?.xmlDom;\n if (!sourceDocument) throw new Error('cannot create hyperlink relationships without an XML part');\n const dom = sourceDocument.implementation?.createDocument(PACKAGE_RELS_NS, 'Relationships', null) as unknown as Document;\n if (!dom) throw new Error('XML implementation cannot create relationship document');\n part = createXmlPart({ path: relsPath, contentType: RELS_CONTENT_TYPE, xmlDom: dom });\n setPart(pkg, part);\n }\n const relsDom = part.xmlDom;\n if (!relsDom) throw new Error(`relationship part has no XML DOM: ${relsPath}`);\n const relationships = relsDom.getElementsByTagNameNS(PACKAGE_RELS_NS, 'Relationship');\n for (let index = 0; index < relationships.length; index += 1) {\n const relationship = relationships[index];\n if (relationship?.getAttribute('Type') === HYPERLINK_REL_TYPE && relationship.getAttribute('Target') === target) {\n return { id: relationship.getAttribute('Id') ?? '', part };\n }\n }\n const used = new Set<string>();\n for (let index = 0; index < relationships.length; index += 1) {\n const id = relationships[index]?.getAttribute('Id');\n if (id) used.add(id);\n }\n let counter = 1;\n while (used.has(`rId${counter}`)) counter += 1;\n const relationship = relsDom.createElementNS(PACKAGE_RELS_NS, 'Relationship');\n relationship.setAttribute('Id', `rId${counter}`);\n relationship.setAttribute('Type', HYPERLINK_REL_TYPE);\n relationship.setAttribute('Target', target);\n relationship.setAttribute('TargetMode', 'External');\n relsDom.documentElement?.appendChild(relationship);\n return { id: `rId${counter}`, part };\n}\n\nfunction relsPathFor(partPath: string): string {\n const slash = partPath.lastIndexOf('/');\n const dir = slash >= 0 ? partPath.slice(0, slash) : '';\n const file = partPath.slice(slash + 1);\n return dir ? `${dir}/_rels/${file}.rels` : `_rels/${file}.rels`;\n}\n\nfunction createNativeTableElement(document: Document, table: NativeWordTableNode, pkg: Package, partPath: string): Element {\n const create = (name: string): Element => document.createElementNS(W_NS, `w:${name}`);\n const tableElement = create('tbl');\n const properties = create('tblPr');\n const width = create('tblW');\n width.setAttributeNS(W_NS, 'w:w', String(Math.max(0, Math.round(table.layout?.width ?? 0))));\n width.setAttributeNS(W_NS, 'w:type', table.layout?.widthType === 'pct' ? 'pct' : 'dxa');\n properties.appendChild(width);\n const borders = create('tblBorders');\n for (const edge of ['top', 'left', 'bottom', 'right', 'insideH', 'insideV'] as const) {\n const border = create(edge);\n border.setAttributeNS(W_NS, 'w:val', 'single');\n border.setAttributeNS(W_NS, 'w:sz', '4');\n border.setAttributeNS(W_NS, 'w:color', table.borders?.[edge as keyof NonNullable<NativeWordTableNode['borders']>]?.color ?? 'D9D9D9');\n borders.appendChild(border);\n }\n properties.appendChild(borders);\n tableElement.appendChild(properties);\n const grid = create('tblGrid');\n for (const columnWidth of table.columnWidths) {\n const column = create('gridCol');\n column.setAttributeNS(W_NS, 'w:w', String(Math.max(1, Math.round(columnWidth))));\n grid.appendChild(column);\n }\n tableElement.appendChild(grid);\n for (const row of table.rows) {\n const rowElement = create('tr');\n for (const cell of row.cells) {\n rowElement.appendChild(createNativeTableCellElement(document, cell, pkg, partPath));\n }\n tableElement.appendChild(rowElement);\n }\n return tableElement;\n}\n\nfunction createNativeTableCellElement(document: Document, cell: NativeWordTableCellNode, pkg: Package, partPath: string): Element {\n const create = (name: string): Element => document.createElementNS(W_NS, `w:${name}`);\n const cellElement = create('tc');\n const properties = create('tcPr');\n const width = create('tcW');\n width.setAttributeNS(W_NS, 'w:w', String(Math.max(1, Math.round(cell.width ?? 0))));\n width.setAttributeNS(W_NS, 'w:type', 'dxa');\n properties.appendChild(width);\n if (cell.shading?.fill) {\n const shading = create('shd');\n shading.setAttributeNS(W_NS, 'w:val', cell.shading.val ?? 'clear');\n shading.setAttributeNS(W_NS, 'w:fill', cell.shading.fill.replace(/^#/, '').toUpperCase());\n properties.appendChild(shading);\n }\n if (cell.verticalAlignment) {\n const alignment = create('vAlign');\n alignment.setAttributeNS(W_NS, 'w:val', cell.verticalAlignment);\n properties.appendChild(alignment);\n }\n cellElement.appendChild(properties);\n const paragraphs = cell.blocks.filter((block): block is NativeWordParagraphNode => block.kind === 'paragraph');\n const paragraphNodes = paragraphs.length > 0 ? paragraphs : [null];\n for (const block of paragraphNodes) {\n const paragraph = create('p');\n if (block) {\n for (const child of block.content) {\n if (child.kind === 'image') {\n const image = parseImageDataUrl(child.src);\n if (!image) continue;\n const relationship = ensureImageRelationship(pkg, partPath, image.bytes, image.extension, image.contentType);\n paragraph.appendChild(createInlinePicture(document, relationship.id, child.drawingId, child.width ?? 96, child.height ?? 96));\n markDirty(relationship.part);\n markDirty(relationship.mediaPart);\n markContentTypeDirty(pkg, image.extension, image.contentType);\n continue;\n }\n if (child.kind !== 'text') continue;\n const run = create('r');\n if (child.format) {\n const runProperties = create('rPr');\n if (child.format.bold) runProperties.appendChild(create('b'));\n if (child.format.italic) runProperties.appendChild(create('i'));\n if (child.format.underline) {\n const underline = create('u');\n underline.setAttributeNS(W_NS, 'w:val', 'single');\n runProperties.appendChild(underline);\n }\n if (child.format.strike) runProperties.appendChild(create('strike'));\n if (child.format.color) {\n const color = create('color');\n color.setAttributeNS(W_NS, 'w:val', child.format.color.replace(/^#/, '').toUpperCase());\n runProperties.appendChild(color);\n }\n if (child.format.fontSize) {\n const size = create('sz');\n size.setAttributeNS(W_NS, 'w:val', String(Math.round(child.format.fontSize * 2)));\n runProperties.appendChild(size);\n }\n if (child.format.fontFamily) {\n const fonts = create('rFonts');\n for (const attribute of ['ascii', 'hAnsi', 'eastAsia']) fonts.setAttributeNS(W_NS, `w:${attribute}`, child.format.fontFamily);\n runProperties.appendChild(fonts);\n }\n if (runProperties.childNodes.length > 0) run.appendChild(runProperties);\n }\n const text = create('t');\n text.textContent = child.text;\n if (/^\\s|\\s$/.test(child.text)) text.setAttributeNS(XML_NS, 'xml:space', 'preserve');\n run.appendChild(text);\n if (child.hyperlink?.target) {\n const relationship = ensureExternalHyperlinkRelationship(pkg, partPath, child.hyperlink.target);\n const hyperlink = document.createElementNS(W_NS, 'w:hyperlink');\n hyperlink.setAttributeNS(R_NS, 'r:id', relationship.id);\n hyperlink.appendChild(run);\n paragraph.appendChild(hyperlink);\n markDirty(relationship.part);\n } else {\n paragraph.appendChild(run);\n }\n }\n }\n if (!paragraph.firstChild) paragraph.appendChild(create('r'));\n cellElement.appendChild(paragraph);\n }\n return cellElement;\n}\n\nfunction applyTableCellFormatPatch(\n table: Element,\n patch: Extract<WordOoxmlPatch, { kind: 'table-cell-format' }>,\n): { ok: true } | { ok: false; reason: string } {\n const rows = directChildren(table).filter((child) => child.namespaceURI === W_NS && child.localName === 'tr');\n const row = rows[patch.rowIndex];\n if (!row) return { ok: false, reason: `table row out of range: ${patch.rowIndex}` };\n const cells = directChildren(row).filter((child) => child.namespaceURI === W_NS && child.localName === 'tc');\n const cell = cells[patch.columnIndex];\n if (!cell) return { ok: false, reason: `table column out of range: ${patch.columnIndex}` };\n const document = table.ownerDocument;\n let properties = directChildren(cell).find((child) => child.namespaceURI === W_NS && child.localName === 'tcPr');\n if (!properties) {\n properties = document.createElementNS(W_NS, 'w:tcPr');\n cell.insertBefore(properties, cell.firstChild);\n }\n if (patch.format.backgroundColor !== undefined) {\n const existing = directChildren(properties).find((child) => child.namespaceURI === W_NS && child.localName === 'shd');\n if (patch.format.backgroundColor === null) {\n if (existing) removeNode(existing);\n } else {\n const shading = existing ?? document.createElementNS(W_NS, 'w:shd');\n shading.setAttributeNS(W_NS, 'w:val', 'clear');\n shading.setAttributeNS(W_NS, 'w:fill', patch.format.backgroundColor.replace(/^#/, '').toUpperCase());\n if (!existing) properties.appendChild(shading);\n }\n }\n if (patch.format.verticalAlignment !== undefined) {\n const existing = directChildren(properties).find((child) => child.namespaceURI === W_NS && child.localName === 'vAlign');\n if (patch.format.verticalAlignment === null) {\n if (existing) removeNode(existing);\n } else {\n const alignment = existing ?? document.createElementNS(W_NS, 'w:vAlign');\n alignment.setAttributeNS(W_NS, 'w:val', patch.format.verticalAlignment);\n if (!existing) properties.appendChild(alignment);\n }\n }\n if (patch.format.borderColor !== undefined) {\n const existing = directChildren(properties).find((child) => child.namespaceURI === W_NS && child.localName === 'tcBorders');\n const borders = existing ?? document.createElementNS(W_NS, 'w:tcBorders');\n for (const edge of ['top', 'left', 'bottom', 'right', 'insideH', 'insideV'] as const) {\n let border = directChildren(borders).find((child) => child.namespaceURI === W_NS && child.localName === edge);\n if (!border) {\n border = document.createElementNS(W_NS, `w:${edge}`);\n borders.appendChild(border);\n }\n border.setAttributeNS(W_NS, 'w:val', patch.format.borderColor === null ? 'nil' : 'single');\n if (patch.format.borderColor !== null) {\n border.setAttributeNS(W_NS, 'w:sz', '4');\n border.setAttributeNS(W_NS, 'w:color', patch.format.borderColor.replace(/^#/, '').toUpperCase());\n }\n }\n if (!existing) properties.appendChild(borders);\n }\n return { ok: true };\n}\n\nfunction clearTableCellContent(\n table: Element,\n patch: Extract<WordOoxmlPatch, { kind: 'table-cell-clear' }>,\n): { ok: true } | { ok: false; reason: string } {\n const rows = directChildren(table).filter((child) => child.namespaceURI === W_NS && child.localName === 'tr');\n const row = rows[patch.rowIndex];\n if (!row) return { ok: false, reason: `table row out of range: ${patch.rowIndex}` };\n const cells = directChildren(row).filter((child) => child.namespaceURI === W_NS && child.localName === 'tc');\n const cell = cells[patch.columnIndex];\n if (!cell) return { ok: false, reason: `table column out of range: ${patch.columnIndex}` };\n const properties = directChildren(cell).find((child) => child.namespaceURI === W_NS && child.localName === 'tcPr');\n for (const child of directChildren(cell)) {\n if (child !== properties) removeNode(child);\n }\n cell.appendChild(cell.ownerDocument.createElementNS(W_NS, 'w:p'));\n return { ok: true };\n}\n\nfunction replaceTableCellText(\n table: Element,\n patch: Extract<WordOoxmlPatch, { kind: 'table-cell-replace' }>,\n): { ok: true } | { ok: false; reason: string } {\n const rows = directChildren(table).filter((child) => child.namespaceURI === W_NS && child.localName === 'tr');\n const row = rows[patch.rowIndex];\n if (!row) return { ok: false, reason: `table row out of range: ${patch.rowIndex}` };\n const cells = directChildren(row).filter((child) => child.namespaceURI === W_NS && child.localName === 'tc');\n const cell = cells[patch.columnIndex];\n if (!cell) return { ok: false, reason: `table column out of range: ${patch.columnIndex}` };\n const properties = directChildren(cell).find((child) => child.namespaceURI === W_NS && child.localName === 'tcPr');\n const sourceParagraph = directChildren(cell).find((child) => child.namespaceURI === W_NS && child.localName === 'p');\n for (const child of directChildren(cell)) {\n if (child !== properties) removeNode(child);\n }\n const paragraph = cell.ownerDocument.createElementNS(W_NS, 'w:p');\n const pPr = sourceParagraph && directChildren(sourceParagraph).find((child) => child.namespaceURI === W_NS && child.localName === 'pPr');\n if (pPr) paragraph.appendChild(pPr.cloneNode(true));\n const run = cell.ownerDocument.createElementNS(W_NS, 'w:r');\n const text = cell.ownerDocument.createElementNS(W_NS, 'w:t');\n text.textContent = patch.text;\n if (/^\\s|\\s$/.test(patch.text)) text.setAttributeNS(XML_NS, 'xml:space', 'preserve');\n run.appendChild(text);\n paragraph.appendChild(run);\n cell.appendChild(paragraph);\n return { ok: true };\n}\n\nfunction replaceTableCellSnapshot(\n pkg: Package,\n partPath: string,\n table: Element,\n patch: Extract<WordOoxmlPatch, { kind: 'table-cell-replace-rich' }>,\n): { ok: true } | { ok: false; reason: string } {\n const rows = directChildren(table).filter((child) => child.namespaceURI === W_NS && child.localName === 'tr');\n const row = rows[patch.rowIndex];\n if (!row) return { ok: false, reason: `table row out of range: ${patch.rowIndex}` };\n const cells = directChildren(row).filter((child) => child.namespaceURI === W_NS && child.localName === 'tc');\n const target = cells[patch.columnIndex];\n if (!target) return { ok: false, reason: `table column out of range: ${patch.columnIndex}` };\n const generated = createNativeTableCellElement(table.ownerDocument, patch.cell, pkg, partPath);\n for (const child of directChildren(target)) removeNode(child);\n for (const child of directChildren(generated)) target.appendChild(child.cloneNode(true));\n return { ok: true };\n}\n\nfunction applyTableStructurePatch(\n table: Element,\n patch: Extract<WordOoxmlPatch, { kind: 'table-structure' }>,\n): { ok: true } | { ok: false; reason: string } {\n const rows = directChildren(table).filter((child) => child.namespaceURI === W_NS && child.localName === 'tr');\n if (rows.length === 0) return { ok: false, reason: 'table has no rows' };\n if (patch.op === 'insert-row' || patch.op === 'delete-row') {\n if (patch.rowIndex < 0 || patch.rowIndex >= rows.length + (patch.op === 'insert-row' ? 1 : 0)) {\n return { ok: false, reason: `table row out of range: ${patch.rowIndex}` };\n }\n if (patch.op === 'delete-row') {\n if (rows.length <= 1) return { ok: false, reason: 'cannot delete the only table row' };\n removeNode(rows[patch.rowIndex]!);\n return { ok: true };\n }\n const template = rows[Math.min(patch.rowIndex, rows.length - 1)]!;\n const inserted = blankTableRowElement(template);\n table.insertBefore(inserted, rows[patch.rowIndex] ?? null);\n return { ok: true };\n }\n\n const row = rows[patch.rowIndex];\n if (!row) return { ok: false, reason: `table row out of range: ${patch.rowIndex}` };\n const cells = directChildren(row).filter((child) => child.namespaceURI === W_NS && child.localName === 'tc');\n if (patch.op === 'insert-column' || patch.op === 'delete-column') {\n if (cells.length === 0) return { ok: false, reason: 'table row has no cells' };\n if (patch.columnIndex < 0 || patch.columnIndex >= cells.length + (patch.op === 'insert-column' ? 1 : 0)) {\n return { ok: false, reason: `table column out of range: ${patch.columnIndex}` };\n }\n const allRows = rows.map((candidate) => directChildren(candidate).filter((child) => child.namespaceURI === W_NS && child.localName === 'tc'));\n if (allRows.some((candidate) => candidate.length !== cells.length || candidate.some((cell) => cellGridSpan(cell) !== 1 || cellHasVerticalMerge(cell)))) {\n return { ok: false, reason: 'table column structure is not a regular non-merged grid' };\n }\n for (const rowCells of allRows) {\n if (patch.op === 'delete-column') {\n if (rowCells.length <= 1) return { ok: false, reason: 'cannot delete the only table column' };\n removeNode(rowCells[patch.columnIndex]!);\n } else {\n const template = rowCells[Math.min(patch.columnIndex, rowCells.length - 1)]!;\n const inserted = blankTableCellElement(template);\n rowCells[0]!.parentNode?.insertBefore(inserted, rowCells[patch.columnIndex] ?? null);\n }\n }\n updateTableGrid(table, patch.op === 'insert-column' ? 'insert' : 'delete', patch.columnIndex);\n return { ok: true };\n }\n\n if (patch.op === 'merge-cells') {\n if (patch.endRowIndex !== undefined && patch.endRowIndex > patch.rowIndex) {\n if (patch.columnIndex < 0 || patch.endRowIndex >= rows.length) {\n return { ok: false, reason: `vertical merge row out of range: ${patch.rowIndex}:${patch.endRowIndex}` };\n }\n const selected = rows.slice(patch.rowIndex, patch.endRowIndex + 1).map((candidate) =>\n directChildren(candidate).filter((child) => child.namespaceURI === W_NS && child.localName === 'tc')[patch.columnIndex],\n );\n if (selected.some((cell) => !cell || cellGridSpan(cell) !== 1 || cellHasVerticalMerge(cell))) {\n return { ok: false, reason: 'vertical merge requires a regular non-merged column' };\n }\n setCellVerticalMerge(selected[0]!, 'restart');\n for (const cell of selected.slice(1)) {\n setCellVerticalMerge(cell!, 'continue');\n const properties = directChildren(cell!).find((child) => child.namespaceURI === W_NS && child.localName === 'tcPr');\n for (const child of directChildren(cell!)) if (child !== properties) removeNode(child);\n cell!.appendChild(cell!.ownerDocument.createElementNS(W_NS, 'w:p'));\n }\n return { ok: true };\n }\n const endColumnIndex = patch.endColumnIndex ?? patch.columnIndex + 1;\n if (patch.columnIndex < 0 || endColumnIndex >= cells.length || endColumnIndex <= patch.columnIndex) {\n return { ok: false, reason: `merge start column out of range: ${patch.columnIndex}` };\n }\n if (cells.some((cell) => cellGridSpan(cell) !== 1 || cellHasVerticalMerge(cell))) {\n return { ok: false, reason: 'cell merge requires a regular non-merged row' };\n }\n const first = cells[patch.columnIndex]!;\n for (let index = patch.columnIndex + 1; index <= endColumnIndex; index += 1) {\n const cell = cells[index]!;\n appendCellContent(first, cell);\n removeNode(cell);\n }\n setCellGridSpan(first, endColumnIndex - patch.columnIndex + 1);\n return { ok: true };\n }\n\n if (patch.endRowIndex !== undefined && patch.endRowIndex > patch.rowIndex) {\n if (patch.columnIndex < 0 || patch.endRowIndex >= rows.length) {\n return { ok: false, reason: `vertical split row out of range: ${patch.rowIndex}:${patch.endRowIndex}` };\n }\n const selected = rows.slice(patch.rowIndex, patch.endRowIndex + 1).map((candidate) =>\n directChildren(candidate).filter((child) => child.namespaceURI === W_NS && child.localName === 'tc')[patch.columnIndex],\n );\n if (selected.some((candidate, index) => {\n if (!candidate || cellGridSpan(candidate) !== 1) return true;\n const merge = directChildren(candidate).find((child) => child.namespaceURI === W_NS && child.localName === 'tcPr')\n ?.getElementsByTagNameNS(W_NS, 'vMerge')[0];\n const value = merge?.getAttributeNS(W_NS, 'val');\n return index === 0 ? value !== 'restart' : value !== 'continue';\n })) {\n return { ok: false, reason: 'cell is not a vertically merged cell' };\n }\n for (const candidate of selected) removeCellVerticalMerge(candidate!);\n return { ok: true };\n }\n\n const splitRow = rows[patch.rowIndex]!;\n const splitCells = directChildren(splitRow).filter((child) => child.namespaceURI === W_NS && child.localName === 'tc');\n let logicalColumn = 0;\n const cell = splitCells.find((candidate) => {\n const matches = logicalColumn === patch.columnIndex;\n logicalColumn += cellGridSpan(candidate);\n return matches;\n });\n if (!cell) return { ok: false, reason: `split column out of range: ${patch.columnIndex}` };\n if (cellHasVerticalMerge(cell) || cellGridSpan(cell) <= 1) return { ok: false, reason: 'cell is not a horizontally merged cell' };\n const span = cellGridSpan(cell);\n removeCellGridSpan(cell);\n for (let index = 1; index < span; index += 1) {\n const blank = blankTableCellElement(cell);\n splitRow.insertBefore(blank, cell.nextSibling);\n }\n return { ok: true };\n}\n\nfunction setCellVerticalMerge(cell: Element, value: 'restart' | 'continue'): void {\n const document = cell.ownerDocument;\n let properties = directChildren(cell).find((child) => child.namespaceURI === W_NS && child.localName === 'tcPr');\n if (!properties) {\n properties = document.createElementNS(W_NS, 'w:tcPr');\n cell.insertBefore(properties, cell.firstChild);\n }\n const merge = directChildren(properties).find((child) => child.namespaceURI === W_NS && child.localName === 'vMerge')\n ?? document.createElementNS(W_NS, 'w:vMerge');\n merge.setAttributeNS(W_NS, 'w:val', value);\n if (!merge.parentNode) properties.appendChild(merge);\n}\n\nfunction removeCellVerticalMerge(cell: Element): void {\n const properties = directChildren(cell).find((child) => child.namespaceURI === W_NS && child.localName === 'tcPr');\n const merge = properties && directChildren(properties).find((child) => child.namespaceURI === W_NS && child.localName === 'vMerge');\n if (merge) removeNode(merge);\n}\n\nfunction blankTableRowElement(template: Element): Element {\n const clone = template.cloneNode(true) as Element;\n const cells = directChildren(clone).filter((child) => child.namespaceURI === W_NS && child.localName === 'tc');\n for (const cell of cells) {\n const blank = blankTableCellElement(cell);\n replaceNode(cell, blank);\n }\n return clone;\n}\n\nfunction blankTableCellElement(template: Element): Element {\n const doc = template.ownerDocument;\n const blank = doc!.createElementNS(W_NS, 'w:tc');\n const tcPr = directChildren(template).find((child) => child.namespaceURI === W_NS && child.localName === 'tcPr');\n if (tcPr) blank.appendChild(tcPr.cloneNode(true));\n const paragraph = doc!.createElementNS(W_NS, 'w:p');\n const sourceParagraph = directChildren(template).find((child) => child.namespaceURI === W_NS && child.localName === 'p');\n const pPr = sourceParagraph && directChildren(sourceParagraph).find((child) => child.namespaceURI === W_NS && child.localName === 'pPr');\n if (pPr) paragraph.appendChild(pPr.cloneNode(true));\n paragraph.appendChild(doc!.createElementNS(W_NS, 'w:r'));\n blank.appendChild(paragraph);\n return blank;\n}\n\nfunction appendCellContent(target: Element, source: Element): void {\n for (const child of directChildren(source)) {\n if (child.namespaceURI === W_NS && child.localName === 'tcPr') continue;\n target.appendChild(child.cloneNode(true));\n }\n}\n\nfunction cellGridSpan(cell: Element): number {\n const value = directChildren(cell)\n .find((child) => child.namespaceURI === W_NS && child.localName === 'tcPr')\n ?.getElementsByTagNameNS(W_NS, 'gridSpan')[0]\n ?.getAttributeNS(W_NS, 'val');\n const span = Number(value);\n return Number.isFinite(span) && span > 0 ? span : 1;\n}\n\nfunction cellHasVerticalMerge(cell: Element): boolean {\n return directChildren(cell)\n .find((child) => child.namespaceURI === W_NS && child.localName === 'tcPr')\n ?.getElementsByTagNameNS(W_NS, 'vMerge').length\n ? true\n : false;\n}\n\nfunction setCellGridSpan(cell: Element, span: number): void {\n const tcPr = ensureDirectChild(cell, 'tcPr');\n let gridSpan = directChildren(tcPr).find((child) => child.namespaceURI === W_NS && child.localName === 'gridSpan');\n if (!gridSpan) {\n gridSpan = cell.ownerDocument!.createElementNS(W_NS, 'w:gridSpan');\n tcPr.appendChild(gridSpan);\n }\n gridSpan.setAttributeNS(W_NS, 'w:val', String(span));\n}\n\nfunction removeCellGridSpan(cell: Element): void {\n const tcPr = directChildren(cell).find((child) => child.namespaceURI === W_NS && child.localName === 'tcPr');\n const gridSpan = tcPr && directChildren(tcPr).find((child) => child.namespaceURI === W_NS && child.localName === 'gridSpan');\n if (gridSpan) removeNode(gridSpan);\n}\n\nfunction ensureDirectChild(element: Element, localName: string): Element {\n const existing = directChildren(element).find((child) => child.namespaceURI === W_NS && child.localName === localName);\n if (existing) return existing;\n const created = element.ownerDocument!.createElementNS(W_NS, `w:${localName}`);\n element.insertBefore(created, element.firstChild);\n return created;\n}\n\nfunction updateTableGrid(table: Element, operation: 'insert' | 'delete', columnIndex: number): void {\n const grid = directChildren(table).find((child) => child.namespaceURI === W_NS && child.localName === 'tblGrid');\n if (!grid) return;\n const columns = directChildren(grid).filter((child) => child.namespaceURI === W_NS && child.localName === 'gridCol');\n if (operation === 'delete') {\n if (columns.length > 1 && columns[columnIndex]) removeNode(columns[columnIndex]!);\n return;\n }\n const template = columns[Math.min(columnIndex, columns.length - 1)];\n if (!template) return;\n const inserted = template.cloneNode(true) as Element;\n grid.insertBefore(inserted, columns[columnIndex] ?? null);\n}\n\nfunction partPathForNode(pkg: Package, node: Node): string | null {\n return partForNode(pkg, node)?.path ?? null;\n}\n\nfunction partForNode(pkg: Package, node: Node): Part | null {\n const ownerDocument = node.nodeType === 9 ? node : node.ownerDocument;\n if (!ownerDocument) return null;\n for (const part of pkg.parts.values()) {\n if (part.xmlDom === ownerDocument) return part;\n }\n return null;\n}\n\nfunction applyParagraphTextPatch(\n paragraph: Element,\n patch: Extract<WordOoxmlPatch, { kind: 'paragraph-text' }>,\n): { ok: true } | { ok: false; reason: string } {\n if (patch.op === 'insert') {\n return insertParagraphText(paragraph, patch.offset, patch.text);\n }\n if (patch.op === 'delete') {\n return replaceParagraphTextRange(paragraph, patch.offset, patch.text.length, '');\n }\n return replaceParagraphTextRange(paragraph, patch.offset, patch.deletedText?.length ?? 0, patch.text);\n}\n\nfunction insertParagraphText(\n paragraph: Element,\n offset: number,\n text: string,\n): { ok: true } | { ok: false; reason: string } {\n if (text.length === 0) return { ok: true };\n const units = collectParagraphOffsetUnits(paragraph);\n const totalLength = units.reduce((sum, unit) => sum + unit.length, 0);\n if (hasFieldMarkup(paragraph) && offset === totalLength) {\n // Field result runs are cached display values, not editable text. Appending\n // at the logical paragraph end must create a run after the complete field.\n appendTextRun(paragraph, text);\n return { ok: true };\n }\n if (units.every((unit) => unit.kind !== 'text')) {\n if (offset !== 0) return { ok: false, reason: `insert offset out of range: ${offset}` };\n appendTextRun(paragraph, text);\n return { ok: true };\n }\n const location = locateTextNode(units, offset, true);\n if (!location) return { ok: false, reason: `insert offset out of range: ${offset}` };\n if (location.node.localName === 'delText' && location.localOffset === (location.node.textContent?.length ?? 0)) {\n const wrapper = containingRevisionWrapper(location.node, 'del');\n const paragraphParent = wrapper?.parentNode;\n if (wrapper && paragraphParent === paragraph) {\n const doc = paragraph.ownerDocument;\n if (!doc) return { ok: false, reason: 'paragraph has no owner document' };\n const run = doc.createElementNS(W_NS, 'w:r');\n const textNode = doc.createElementNS(W_NS, 'w:t');\n textNode.textContent = text;\n preserveTextSpace(textNode);\n run.appendChild(textNode);\n paragraph.insertBefore(run, wrapper.nextSibling);\n return { ok: true };\n }\n }\n const current = location.node.textContent ?? '';\n location.node.textContent = `${current.slice(0, location.localOffset)}${text}${current.slice(location.localOffset)}`;\n preserveTextSpace(location.node);\n return { ok: true };\n}\n\nfunction replaceParagraphTextRange(\n paragraph: Element,\n offset: number,\n length: number,\n text: string,\n): { ok: true } | { ok: false; reason: string } {\n if (length === 0) return insertParagraphText(paragraph, offset, text);\n const units = collectParagraphOffsetUnits(paragraph);\n const textNodes = units.filter((unit): unit is ParagraphTextOffsetUnit => unit.kind === 'text').map((unit) => unit.node);\n const start = locateTextNode(units, offset, false);\n const end = locateTextNode(units, offset + length, true);\n if (!start || !end) return { ok: false, reason: `text range out of range: ${offset}:${length}` };\n const current = start.node.textContent ?? '';\n if (start.node === end.node) {\n start.node.textContent = `${current.slice(0, start.localOffset)}${text}${current.slice(end.localOffset)}`;\n preserveTextSpace(start.node);\n return { ok: true };\n }\n\n const startIndex = textNodes.indexOf(start.node);\n const endIndex = textNodes.indexOf(end.node);\n if (startIndex < 0 || endIndex < 0 || startIndex > endIndex) {\n return { ok: false, reason: `text range out of range: ${offset}:${length}` };\n }\n const endText = end.node.textContent ?? '';\n start.node.textContent = `${current.slice(0, start.localOffset)}${text}`;\n preserveTextSpace(start.node);\n for (let i = startIndex + 1; i < endIndex; i++) {\n textNodes[i]!.textContent = '';\n }\n end.node.textContent = endText.slice(end.localOffset);\n preserveTextSpace(end.node);\n return { ok: true };\n}\n\ninterface ParagraphTextOffsetUnit {\n kind: 'text';\n node: Element;\n length: number;\n}\n\ninterface ParagraphObjectOffsetUnit {\n kind: 'object';\n node: Element;\n length: 1;\n}\n\ntype ParagraphOffsetUnit = ParagraphTextOffsetUnit | ParagraphObjectOffsetUnit;\n\nfunction collectParagraphOffsetUnits(paragraph: Element): ParagraphOffsetUnit[] {\n const out: ParagraphOffsetUnit[] = [];\n collectParagraphOffsetUnitsFromNode(paragraph, out);\n return out;\n}\n\nfunction hasFieldMarkup(paragraph: Element): boolean {\n return paragraph.getElementsByTagNameNS(W_NS, 'fldChar').length > 0 ||\n paragraph.getElementsByTagNameNS(W_NS, 'instrText').length > 0;\n}\n\nfunction collectTextNodes(paragraph: Element): Element[] {\n return collectParagraphOffsetUnits(paragraph)\n .filter((unit): unit is ParagraphTextOffsetUnit => unit.kind === 'text')\n .map((unit) => unit.node);\n}\n\nfunction collectParagraphOffsetUnitsFromNode(node: Node, out: ParagraphOffsetUnit[]): void {\n if (node.nodeType !== 1) return;\n const element = node as Element;\n if (element.namespaceURI === W_NS && element.localName === 't') {\n out.push({ kind: 'text', node: element, length: element.textContent?.length ?? 0 });\n return;\n }\n if (element.namespaceURI === W_NS && element.localName === 'delText') {\n out.push({ kind: 'text', node: element, length: element.textContent?.length ?? 0 });\n return;\n }\n if (\n (element.namespaceURI === W_NS && element.localName === 'drawing') ||\n (element.namespaceURI === W_NS && element.localName === 'pict')\n ) {\n out.push({ kind: 'object', node: element, length: 1 });\n return;\n }\n for (let index = 0; index < element.childNodes.length; index += 1) {\n const child = element.childNodes[index];\n if (child) collectParagraphOffsetUnitsFromNode(child, out);\n }\n}\n\nfunction containingRevisionWrapper(node: Node, localName: 'ins' | 'del'): Element | null {\n let current: Node | null = node.parentNode;\n while (current && current.nodeType === 1) {\n const element = current as Element;\n if (element.namespaceURI === W_NS && element.localName === localName) return element;\n if (element.namespaceURI === W_NS && element.localName === 'p') return null;\n current = current.parentNode;\n }\n return null;\n}\n\nfunction findDrawingAtParagraphOffset(paragraph: Element, offset: number): Element | null {\n let position = 0;\n const units = collectParagraphOffsetUnits(paragraph);\n for (const unit of units) {\n if (unit.kind === 'object' && offset >= position && offset <= position + unit.length) return unit.node;\n position += unit.length;\n }\n return null;\n}\n\nfunction locateTextNode(\n units: readonly ParagraphOffsetUnit[],\n offset: number,\n allowEnd: boolean,\n): { node: Element; localOffset: number } | null {\n let position = 0;\n for (let index = 0; index < units.length; index += 1) {\n const unit = units[index]!;\n const end = position + unit.length;\n if (unit.kind === 'text') {\n if (offset >= position && (offset < end || (allowEnd && offset === end))) {\n return { node: unit.node, localOffset: offset - position };\n }\n } else if (offset >= position && offset <= end) {\n return nextTextUnit(units, index) ?? previousTextUnit(units, index);\n }\n position = end;\n }\n return null;\n}\n\nfunction nextTextUnit(units: readonly ParagraphOffsetUnit[], fromIndex: number): { node: Element; localOffset: number } | null {\n for (let index = fromIndex + 1; index < units.length; index += 1) {\n const unit = units[index]!;\n if (unit.kind === 'text') return { node: unit.node, localOffset: 0 };\n }\n return null;\n}\n\nfunction previousTextUnit(units: readonly ParagraphOffsetUnit[], fromIndex: number): { node: Element; localOffset: number } | null {\n for (let index = fromIndex - 1; index >= 0; index -= 1) {\n const unit = units[index]!;\n if (unit.kind === 'text') return { node: unit.node, localOffset: unit.length };\n }\n return null;\n}\n\nfunction appendTextRun(paragraph: Element, text: string): void {\n const doc = paragraph.ownerDocument;\n if (!doc) return;\n const run = doc.createElementNS(W_NS, 'w:r');\n const textEl = doc.createElementNS(W_NS, 'w:t');\n textEl.textContent = text;\n preserveTextSpace(textEl);\n run.appendChild(textEl);\n paragraph.appendChild(run);\n}\n\nfunction preserveTextSpace(textEl: Element): void {\n const text = textEl.textContent ?? '';\n if (/^\\s|\\s$|\\s{2,}/.test(text)) {\n textEl.setAttributeNS(XML_NS, 'xml:space', 'preserve');\n }\n}\n\nfunction splitParagraphElement(\n paragraph: Element,\n offset: number,\n newParaId: string,\n): { ok: true } | { ok: false; reason: string } {\n const parent = paragraph.parentNode;\n const doc = paragraph.ownerDocument;\n if (!parent || !doc) return { ok: false, reason: 'paragraph has no parent document' };\n\n const contentChildren = directChildren(paragraph).filter((child) => !(child.namespaceURI === W_NS && child.localName === 'pPr'));\n const totalLength = contentChildren.reduce((sum, child) => sum + inlineNodeLength(child), 0);\n if (offset < 0 || offset > totalLength) return { ok: false, reason: `split offset out of range: ${offset}` };\n\n const afterChildren = splitParagraphContentChildren(doc, contentChildren, offset);\n const newParagraph = doc.createElementNS(W_NS, 'w:p');\n copyParagraphAttributes(paragraph, newParagraph, newParaId);\n const pPr = directChildren(paragraph).find((child) => child.namespaceURI === W_NS && child.localName === 'pPr');\n if (pPr) newParagraph.appendChild(pPr.cloneNode(true));\n for (const child of afterChildren) {\n newParagraph.appendChild(child);\n }\n parent.insertBefore(newParagraph, paragraph.nextSibling);\n return { ok: true };\n}\n\nfunction mergeNextParagraphElement(paragraph: Element): { ok: true } | { ok: false; reason: string } {\n const next = nextSiblingParagraph(paragraph);\n if (!next) return { ok: false, reason: 'next paragraph not found for merge' };\n for (const child of directChildren(next)) {\n if (child.namespaceURI === W_NS && child.localName === 'pPr') continue;\n paragraph.appendChild(child.cloneNode(true));\n }\n removeNode(next);\n return { ok: true };\n}\n\nfunction splitParagraphContentChildren(doc: Document, children: Element[], offset: number): Element[] {\n const after: Element[] = [];\n let position = 0;\n let split = false;\n for (const child of children) {\n const length = inlineNodeLength(child);\n const end = position + length;\n if (split) {\n after.push(child.cloneNode(true) as Element);\n removeNode(child);\n } else if (offset <= position) {\n after.push(child.cloneNode(true) as Element);\n removeNode(child);\n } else if (offset >= end) {\n // Keep child in the original paragraph.\n } else {\n const splitChild = splitElementTextAt(doc, child, offset - position);\n if (splitChild.after) after.push(splitChild.after);\n split = true;\n }\n if (!split && offset === end) split = true;\n position = end;\n }\n return after;\n}\n\nfunction splitElementTextAt(\n _doc: Document,\n element: Element,\n offset: number,\n): { after: Element | null } {\n const beforeClone = element.cloneNode(true) as Element;\n const afterClone = element.cloneNode(true) as Element;\n applyTextSlice(beforeClone, 0, offset);\n applyTextSlice(afterClone, offset, inlineNodeLength(element));\n replaceNode(element, beforeClone);\n return hasTextContent(afterClone) || inlineNodeLength(afterClone) > 0 ? { after: afterClone } : { after: null };\n}\n\nfunction applyTextSlice(element: Element, from: number, to: number): void {\n const textNodes = collectTextNodes(element);\n let position = 0;\n for (const textNode of textNodes) {\n const text = textNode.textContent ?? '';\n const end = position + text.length;\n const localFrom = Math.max(0, from - position);\n const localTo = Math.min(text.length, to - position);\n textNode.textContent = localFrom < localTo ? text.slice(localFrom, localTo) : '';\n preserveTextSpace(textNode);\n position = end;\n }\n}\n\nfunction inlineNodeLength(element: Element): number {\n if (element.namespaceURI === W_NS && element.localName === 'drawing') return 1;\n let length = 0;\n const textNodes = element.getElementsByTagNameNS(W_NS, 't');\n for (let i = 0; i < textNodes.length; i++) {\n length += textNodes[i]?.textContent?.length ?? 0;\n }\n const drawings = element.getElementsByTagNameNS(W_NS, 'drawing');\n length += drawings.length;\n return length;\n}\n\nfunction copyParagraphAttributes(source: Element, target: Element, paraId: string): void {\n for (let i = 0; i < source.attributes.length; i++) {\n const attr = source.attributes[i];\n if (!attr) continue;\n if (attr.namespaceURI === W14_NS && attr.localName === 'paraId') continue;\n target.setAttributeNS(attr.namespaceURI, attr.name, attr.value);\n }\n target.setAttributeNS(W14_NS, 'w14:paraId', paraId);\n}\n\nfunction directChildren(element: Element): Element[] {\n const out: Element[] = [];\n for (let i = 0; i < element.childNodes.length; i++) {\n const child = element.childNodes[i];\n if (child?.nodeType === 1) out.push(child as Element);\n }\n return out;\n}\n\nfunction nextSiblingParagraph(paragraph: Element): Element | null {\n let current = paragraph.nextSibling;\n while (current) {\n if (current.nodeType === 1) {\n const el = current as Element;\n if (el.namespaceURI === W_NS && el.localName === 'p') return el;\n return null;\n }\n current = current.nextSibling;\n }\n return null;\n}\n\nfunction hasTextContent(element: Element): boolean {\n return collectTextNodes(element).some((node) => (node.textContent ?? '').length > 0);\n}\n\nfunction removeNode(node: Node): void {\n node.parentNode?.removeChild(node);\n}\n\nfunction replaceNode(node: Node, replacement: Node): void {\n node.parentNode?.replaceChild(replacement, node);\n}\n\nfunction removeDrawing(drawing: Element): void {\n const parent = drawing.parentNode;\n if (!parent) return;\n if (isElement(parent) && parent.namespaceURI === W_NS && parent.localName === 'r' && isDrawingOnlyRun(parent)) {\n parent.parentNode?.removeChild(parent);\n return;\n }\n parent.removeChild(drawing);\n}\n\nfunction resizeDrawing(drawing: Element, widthPx: number, heightPx: number): { ok: true } | { ok: false; reason: string } {\n if (!Number.isFinite(widthPx) || !Number.isFinite(heightPx) || widthPx <= 0 || heightPx <= 0) {\n return { ok: false, reason: 'image size must be positive finite pixels' };\n }\n const widthEmu = Math.round((widthPx / 96) * 914400);\n const heightEmu = Math.round((heightPx / 96) * 914400);\n const container = directChildren(drawing).find((child) => child.namespaceURI === WP_NS && (child.localName === 'inline' || child.localName === 'anchor'));\n if (!container) return { ok: false, reason: 'drawing has no wp:inline or wp:anchor container' };\n const extent = directChildren(container).find((child) => child.namespaceURI === WP_NS && child.localName === 'extent');\n if (!extent) return { ok: false, reason: 'drawing has no wp:extent' };\n extent.setAttribute('cx', String(widthEmu));\n extent.setAttribute('cy', String(heightEmu));\n const transforms = container.getElementsByTagNameNS(A_NS, 'xfrm');\n for (let index = 0; index < transforms.length; index += 1) {\n const transform = transforms[index];\n const ext = transform && directChildren(transform).find((child) => child.namespaceURI === A_NS && child.localName === 'ext');\n if (!ext) continue;\n ext.setAttribute('cx', String(widthEmu));\n ext.setAttribute('cy', String(heightEmu));\n }\n return { ok: true };\n}\n\nfunction insertDrawingIntoParagraph(\n pkg: Package,\n partPath: string,\n paragraph: Element,\n patch: Extract<WordOoxmlPatch, { kind: 'drawing-insert' }>,\n): { ok: true } | { ok: false; reason: string } {\n const image = parseImageDataUrl(patch.src);\n if (!image) return { ok: false, reason: 'image insert requires a base64 data:image URL' };\n const relationship = ensureImageRelationship(pkg, partPath, image.bytes, image.extension, image.contentType);\n const drawing = createInlinePicture(paragraph.ownerDocument!, relationship.id, patch.drawingId, patch.width, patch.height);\n const children = directChildren(paragraph).filter((child) => !(child.namespaceURI === W_NS && child.localName === 'pPr'));\n const totalLength = children.reduce((sum, child) => sum + inlineNodeLength(child), 0);\n if (patch.offset < 0 || patch.offset > totalLength) return { ok: false, reason: `image insert offset out of range: ${patch.offset}` };\n const next: Element[] = [];\n let position = 0;\n let inserted = false;\n for (const child of children) {\n const length = inlineNodeLength(child);\n if (!inserted && patch.offset <= position) {\n next.push(drawing);\n inserted = true;\n }\n if (!inserted && patch.offset < position + length && child.namespaceURI === W_NS && child.localName === 'r') {\n const before = sliceInlineElement(child, 0, patch.offset - position);\n const after = sliceInlineElement(child, patch.offset - position, length);\n if (before) next.push(before);\n next.push(drawing);\n inserted = true;\n if (after) next.push(after);\n } else {\n next.push(child);\n }\n position += length;\n }\n if (!inserted) next.push(drawing);\n for (const child of children) removeNode(child);\n for (const child of next) paragraph.appendChild(child);\n markDirty(relationship.part);\n markDirty(relationship.mediaPart);\n markContentTypeDirty(pkg, image.extension, image.contentType);\n return { ok: true };\n}\n\nfunction createInlinePicture(document: Document, relationshipId: string, drawingId: string, widthPx: number, heightPx: number): Element {\n const widthEmu = Math.round((widthPx / 96) * 914400);\n const heightEmu = Math.round((heightPx / 96) * 914400);\n const run = document.createElementNS(W_NS, 'w:r');\n const drawing = document.createElementNS(W_NS, 'w:drawing');\n const inline = document.createElementNS(WP_NS, 'wp:inline');\n const extent = document.createElementNS(WP_NS, 'wp:extent');\n extent.setAttribute('cx', String(widthEmu));\n extent.setAttribute('cy', String(heightEmu));\n inline.appendChild(extent);\n const docPr = document.createElementNS(WP_NS, 'wp:docPr');\n docPr.setAttribute('id', String(Math.abs(hashString(drawingId)) + 1));\n docPr.setAttribute('name', `Picture ${drawingId}`);\n inline.appendChild(docPr);\n inline.appendChild(document.createElementNS(WP_NS, 'wp:cNvGraphicFramePr'));\n const graphic = document.createElementNS(A_NS, 'a:graphic');\n const graphicData = document.createElementNS(A_NS, 'a:graphicData');\n graphicData.setAttribute('uri', 'http://schemas.openxmlformats.org/drawingml/2006/picture');\n const picture = document.createElementNS(PIC_NS, 'pic:pic');\n const nvPicPr = document.createElementNS(PIC_NS, 'pic:nvPicPr');\n const cNvPr = document.createElementNS(PIC_NS, 'pic:cNvPr');\n cNvPr.setAttribute('id', '0');\n cNvPr.setAttribute('name', `image-${drawingId}`);\n nvPicPr.appendChild(cNvPr);\n nvPicPr.appendChild(document.createElementNS(PIC_NS, 'pic:cNvPicPr'));\n picture.appendChild(nvPicPr);\n const blipFill = document.createElementNS(PIC_NS, 'pic:blipFill');\n const blip = document.createElementNS(A_NS, 'a:blip');\n blip.setAttributeNS(R_NS, 'r:embed', relationshipId);\n blipFill.appendChild(blip);\n const stretch = document.createElementNS(A_NS, 'a:stretch');\n stretch.appendChild(document.createElementNS(A_NS, 'a:fillRect'));\n blipFill.appendChild(stretch);\n picture.appendChild(blipFill);\n const spPr = document.createElementNS(PIC_NS, 'pic:spPr');\n const transform = document.createElementNS(A_NS, 'a:xfrm');\n const transformExtent = document.createElementNS(A_NS, 'a:ext');\n transformExtent.setAttribute('cx', String(widthEmu));\n transformExtent.setAttribute('cy', String(heightEmu));\n transform.appendChild(document.createElementNS(A_NS, 'a:off'));\n transform.appendChild(transformExtent);\n spPr.appendChild(transform);\n const geometry = document.createElementNS(A_NS, 'a:prstGeom');\n geometry.setAttribute('prst', 'rect');\n geometry.appendChild(document.createElementNS(A_NS, 'a:avLst'));\n spPr.appendChild(geometry);\n picture.appendChild(spPr);\n graphicData.appendChild(picture);\n graphic.appendChild(graphicData);\n inline.appendChild(graphic);\n drawing.appendChild(inline);\n run.appendChild(drawing);\n return run;\n}\n\nfunction parseImageDataUrl(src: string): { bytes: Uint8Array; extension: string; contentType: string } | null {\n const match = /^data:(image\\/(png|jpeg|jpg|gif|bmp|webp));base64,([a-z0-9+/=\\s]+)$/i.exec(src.trim());\n if (!match) return null;\n const contentType = match[1]!.toLowerCase() === 'image/jpg' ? 'image/jpeg' : match[1]!.toLowerCase();\n const extension = contentType === 'image/jpeg' ? 'jpeg' : contentType.slice('image/'.length);\n const binary = atob(match[3]!.replace(/\\s/g, ''));\n return { bytes: Uint8Array.from(binary, (char) => char.charCodeAt(0)), extension, contentType };\n}\n\nfunction ensureImageRelationship(\n pkg: Package,\n partPath: string,\n bytes: Uint8Array,\n extension: string,\n contentType: string,\n): { id: string; part: Part; mediaPart: Part } {\n const relsPath = relsPathFor(partPath);\n let part = pkg.parts.get(relsPath);\n if (!part?.xmlDom) {\n const sourceDocument = Array.from(pkg.parts.values()).find((candidate) => candidate.xmlDom)?.xmlDom;\n if (!sourceDocument) throw new Error('cannot create image relationships without an XML part');\n const dom = sourceDocument.implementation?.createDocument(PACKAGE_RELS_NS, 'Relationships', null) as unknown as Document;\n if (!dom) throw new Error('XML implementation cannot create relationship document');\n part = createXmlPart({ path: relsPath, contentType: RELS_CONTENT_TYPE, xmlDom: dom });\n setPart(pkg, part);\n }\n const relsDom = part.xmlDom;\n if (!relsDom) throw new Error(`relationship part has no XML DOM: ${relsPath}`);\n const relationships = relsDom.getElementsByTagNameNS(PACKAGE_RELS_NS, 'Relationship');\n let idNumber = 1;\n const usedIds = new Set<string>();\n for (let index = 0; index < relationships.length; index += 1) {\n const id = relationships[index]?.getAttribute('Id');\n if (id) usedIds.add(id);\n }\n while (usedIds.has(`rId${idNumber}`)) idNumber += 1;\n let mediaNumber = 1;\n while (pkg.parts.has(`word/media/image${mediaNumber}.${extension}`)) mediaNumber += 1;\n const mediaPath = `word/media/image${mediaNumber}.${extension}`;\n const mediaPart = createBinaryPart({ path: mediaPath, contentType, bytes });\n setPart(pkg, mediaPart);\n const relationship = relsDom.createElementNS(PACKAGE_RELS_NS, 'Relationship');\n relationship.setAttribute('Id', `rId${idNumber}`);\n relationship.setAttribute('Type', `${R_NS}/image`);\n relationship.setAttribute('Target', `media/image${mediaNumber}.${extension}`);\n relsDom.documentElement?.appendChild(relationship);\n return { id: `rId${idNumber}`, part, mediaPart };\n}\n\nfunction markContentTypeDirty(pkg: Package, extension: string, contentType: string): void {\n const part = getPart(pkg, '[Content_Types].xml');\n const dom = part?.xmlDom;\n if (!part || !dom) return;\n const defaults = dom.getElementsByTagNameNS('http://schemas.openxmlformats.org/package/2006/content-types', 'Default');\n for (let index = 0; index < defaults.length; index += 1) {\n if (defaults[index]?.getAttribute('Extension')?.toLowerCase() === extension.toLowerCase()) return;\n }\n const created = dom.createElementNS('http://schemas.openxmlformats.org/package/2006/content-types', 'Default');\n created.setAttribute('Extension', extension);\n created.setAttribute('ContentType', contentType);\n dom.documentElement?.appendChild(created);\n markDirty(part);\n}\n\nfunction hashString(value: string): number {\n let hash = 0;\n for (let index = 0; index < value.length; index += 1) hash = (hash * 31 + value.charCodeAt(index)) | 0;\n return hash;\n}\n\nfunction applyRevisionPatch(\n paragraph: Element,\n patch: Extract<WordOoxmlPatch, { kind: 'revision' }>,\n): { ok: true } | { ok: false; reason: string } {\n if (patch.op === 'accept' || patch.op === 'reject') {\n const localName = patch.revisionKind === 'insert' ? 'ins' : 'del';\n const wrappers = Array.from(paragraph.getElementsByTagNameNS(W_NS, localName));\n const matched = wrappers.filter((wrapper) => wrapper.getAttributeNS(W_NS, 'id') === patch.revisionId);\n if (matched.length === 0) return { ok: false, reason: `revision not found: ${patch.revisionId}` };\n for (const wrapper of matched) {\n const parent = wrapper.parentNode;\n if (!parent) continue;\n const keep = (localName === 'ins' && patch.op === 'accept') || (localName === 'del' && patch.op === 'reject');\n if (!keep) {\n parent.removeChild(wrapper);\n continue;\n }\n const children = Array.from(wrapper.childNodes);\n if (localName === 'del') {\n for (const child of children) {\n if (child.nodeType === 1) convertRevisionDeleteText(child as Element);\n }\n }\n for (const child of children) parent.insertBefore(child, wrapper);\n parent.removeChild(wrapper);\n }\n return { ok: true };\n }\n\n if (patch.from < 0 || patch.to <= patch.from) return { ok: false, reason: 'revision range is empty or invalid' };\n let position = 0;\n let selected: Element[] = [];\n let wrapperIndex = -1;\n const rebuilt: Node[] = [];\n for (const child of Array.from(paragraph.childNodes)) {\n if (child.nodeType !== 1 || (child as Element).namespaceURI !== W_NS) {\n rebuilt.push(child);\n continue;\n }\n const run = child as Element;\n if (run.localName === 'ins' || run.localName === 'del') {\n rebuilt.push(run);\n position += run.textContent?.length ?? 0;\n continue;\n }\n if (run.localName !== 'r') {\n rebuilt.push(run);\n continue;\n }\n const texts = Array.from(run.getElementsByTagNameNS(W_NS, 't'));\n if (texts.length !== 1) return { ok: false, reason: 'revision writeback requires runs with one text node' };\n const text = texts[0]!.textContent ?? '';\n const runStart = position;\n const runEnd = position + text.length;\n position = runEnd;\n if (runEnd <= patch.from || runStart >= patch.to) {\n rebuilt.push(run);\n continue;\n }\n const localFrom = Math.max(0, patch.from - runStart);\n const localTo = Math.min(text.length, patch.to - runStart);\n if (localFrom > 0) rebuilt.push(cloneRevisionRun(run, text.slice(0, localFrom)));\n if (localTo > localFrom) {\n if (wrapperIndex < 0) wrapperIndex = rebuilt.length;\n selected.push(cloneRevisionRun(run, text.slice(localFrom, localTo)));\n }\n if (localTo < text.length) rebuilt.push(cloneRevisionRun(run, text.slice(localTo)));\n }\n if (selected.length === 0 || patch.to > position) return { ok: false, reason: `revision range out of range: ${patch.from}:${patch.to}` };\n const doc = paragraph.ownerDocument;\n if (!doc) return { ok: false, reason: 'revision paragraph has no owner document' };\n const wrapper = doc.createElementNS(W_NS, patch.revisionKind === 'insert' ? 'w:ins' : 'w:del');\n wrapper.setAttributeNS(W_NS, 'w:id', patch.revisionId);\n wrapper.setAttributeNS(W_NS, 'w:author', 'User');\n wrapper.setAttributeNS(W_NS, 'w:date', new Date().toISOString());\n for (const run of selected) {\n if (patch.revisionKind === 'delete') convertRevisionText(run);\n wrapper.appendChild(run);\n }\n rebuilt.splice(wrapperIndex < 0 ? rebuilt.length : wrapperIndex, 0, wrapper);\n mergeAdjacentRevisionWrappers(rebuilt);\n while (paragraph.firstChild) paragraph.removeChild(paragraph.firstChild);\n for (const child of rebuilt) paragraph.appendChild(child);\n return { ok: true };\n}\n\nfunction applyParagraphFormatPatch(\n paragraph: Element,\n patch: Extract<WordOoxmlPatch, { kind: 'paragraph-format' }>,\n): { ok: true } | { ok: false; reason: string } {\n if (patch.from < 0 || patch.to <= patch.from) return { ok: false, reason: 'format range is empty or invalid' };\n const hasRevisionWrappers =\n paragraph.getElementsByTagNameNS(W_NS, 'ins').length > 0 ||\n paragraph.getElementsByTagNameNS(W_NS, 'del').length > 0;\n if (hasRevisionWrappers) {\n // Keep tracked-content containers intact while formatting their descendant runs.\n // Partial runs are deliberately rejected here; splitting them would require\n // rebuilding the surrounding w:ins/w:del structure and risks losing tracking.\n const runs = Array.from(paragraph.getElementsByTagNameNS(W_NS, 'r'));\n let position = 0;\n let selected = 0;\n for (const run of runs) {\n const text = wordRunText(run);\n if (text.length === 0) continue;\n const start = position;\n const end = position + text.length;\n position = end;\n if (end <= patch.from || start >= patch.to) continue;\n if (patch.from > start || patch.to < end) {\n return { ok: false, reason: 'format writeback requires whole runs inside tracked content' };\n }\n applyRunFormat(run, patch.format);\n selected += text.length;\n }\n if (selected === 0 || patch.to > position) return { ok: false, reason: `format range out of range: ${patch.from}:${patch.to}` };\n return { ok: true };\n }\n const rebuilt: Node[] = [];\n let position = 0;\n let selected = 0;\n for (const child of Array.from(paragraph.childNodes)) {\n if (child.nodeType !== 1 || (child as Element).namespaceURI !== W_NS || (child as Element).localName !== 'r') {\n rebuilt.push(child);\n continue;\n }\n const run = child as Element;\n const texts = Array.from(run.getElementsByTagNameNS(W_NS, 't'));\n if (texts.length !== 1) return { ok: false, reason: 'format writeback requires runs with one text node' };\n const text = texts[0]!.textContent ?? '';\n const start = position;\n const end = position + text.length;\n position = end;\n if (end <= patch.from || start >= patch.to) {\n rebuilt.push(run);\n continue;\n }\n const localFrom = Math.max(0, patch.from - start);\n const localTo = Math.min(text.length, patch.to - start);\n if (localFrom > 0) rebuilt.push(cloneRevisionRun(run, text.slice(0, localFrom)));\n if (localTo > localFrom) {\n const formatted = cloneRevisionRun(run, text.slice(localFrom, localTo));\n applyRunFormat(formatted, patch.format);\n rebuilt.push(formatted);\n selected += localTo - localFrom;\n }\n if (localTo < text.length) rebuilt.push(cloneRevisionRun(run, text.slice(localTo)));\n }\n if (selected === 0 || patch.to > position) return { ok: false, reason: `format range out of range: ${patch.from}:${patch.to}` };\n while (paragraph.firstChild) paragraph.removeChild(paragraph.firstChild);\n for (const child of rebuilt) paragraph.appendChild(child);\n return { ok: true };\n}\n\nfunction applyFormatRevisionPatch(\n paragraph: Element,\n patch: Extract<WordOoxmlPatch, { kind: 'format-revision' }>,\n): { ok: true } | { ok: false; reason: string } {\n const runs = Array.from(paragraph.getElementsByTagNameNS(W_NS, 'r'));\n if (patch.op === 'run') {\n if (patch.beforeFormat === undefined) return { ok: false, reason: 'format revision is missing beforeFormat snapshot' };\n let position = 0;\n let changed = 0;\n for (const run of runs) {\n const text = wordRunText(run);\n const start = position;\n const end = position + text.length;\n position = end;\n if (end <= patch.from || start >= patch.to) continue;\n if (patch.from > start || patch.to < end) return { ok: false, reason: 'format revision currently requires whole runs' };\n const rPr = ensureDirectRPr(run);\n removeDirectChildren(rPr, 'rPrChange');\n const change = rPr.ownerDocument!.createElementNS(W_NS, 'w:rPrChange');\n change.setAttributeNS(W_NS, 'w:id', patch.revisionId);\n change.setAttributeNS(W_NS, 'w:author', 'User');\n change.setAttributeNS(W_NS, 'w:date', new Date().toISOString());\n const oldRun = rPr.ownerDocument!.createElementNS(W_NS, 'w:r');\n applyRunFormat(oldRun, patch.beforeFormat ?? {});\n const oldRPr = directChildren(oldRun).find((child) => child.namespaceURI === W_NS && child.localName === 'rPr');\n if (oldRPr) for (const child of Array.from(oldRPr.childNodes)) change.appendChild(child);\n rPr.appendChild(change);\n changed += text.length;\n }\n if (changed === 0 || patch.to > position) return { ok: false, reason: `format revision range not found: ${patch.from}:${patch.to}` };\n return { ok: true };\n }\n\n let changed = 0;\n for (const run of runs) {\n const rPr = directChildren(run).find((child) => child.namespaceURI === W_NS && child.localName === 'rPr');\n const change = rPr && directChildren(rPr).find(\n (child) => child.namespaceURI === W_NS && child.localName === 'rPrChange' && child.getAttributeNS(W_NS, 'id') === patch.revisionId,\n );\n if (!change || !rPr) continue;\n if (patch.op === 'reject') {\n for (const child of Array.from(rPr.childNodes)) {\n if (child !== change) rPr.removeChild(child);\n }\n for (const child of Array.from(change.childNodes)) rPr.appendChild(child.cloneNode(true));\n }\n rPr.removeChild(change);\n changed += 1;\n }\n return changed > 0 ? { ok: true } : { ok: false, reason: `format revision not found: ${patch.revisionId}` };\n}\n\nfunction wordRunText(run: Element): string {\n return Array.from(run.getElementsByTagNameNS(W_NS, 't'))\n .concat(Array.from(run.getElementsByTagNameNS(W_NS, 'delText')))\n .map((node) => node.textContent ?? '')\n .join('');\n}\n\nfunction ensureDirectRPr(run: Element): Element {\n const existing = directChildren(run).find((child) => child.namespaceURI === W_NS && child.localName === 'rPr');\n if (existing) return existing;\n const rPr = run.ownerDocument!.createElementNS(W_NS, 'w:rPr');\n run.insertBefore(rPr, run.firstChild);\n return rPr;\n}\n\nfunction applyRunFormat(run: Element, format: Partial<EditorRunFormat>): void {\n const doc = run.ownerDocument!;\n let rPr = directChildren(run).find((child) => child.namespaceURI === W_NS && child.localName === 'rPr') ?? null;\n if (!rPr) {\n rPr = doc.createElementNS(W_NS, 'w:rPr');\n run.insertBefore(rPr, run.firstChild);\n }\n const booleanProperties: Array<[keyof EditorRunFormat, string]> = [\n ['bold', 'b'], ['italic', 'i'], ['strike', 'strike'], ['doubleStrike', 'dstrike'],\n ['caps', 'caps'], ['smallCaps', 'smallCaps'],\n ];\n for (const [key, localName] of booleanProperties) {\n if (format[key] === undefined) continue;\n removeDirectChildren(rPr, localName);\n if (format[key]) rPr.appendChild(doc.createElementNS(W_NS, `w:${localName}`));\n }\n if (format.underline !== undefined) {\n removeDirectChildren(rPr, 'u');\n if (format.underline) {\n const underline = doc.createElementNS(W_NS, 'w:u');\n underline.setAttribute('val', 'single');\n rPr.appendChild(underline);\n }\n }\n if (format.color !== undefined) {\n removeDirectChildren(rPr, 'color');\n if (format.color) {\n const color = doc.createElementNS(W_NS, 'w:color');\n color.setAttribute('val', format.color.replace(/^#/, '').toUpperCase());\n rPr.appendChild(color);\n }\n }\n if (format.highlight !== undefined || format.shading !== undefined) {\n removeDirectChildren(rPr, 'shd');\n const fill = format.shading?.fill ?? format.highlight;\n if (fill) {\n const shading = doc.createElementNS(W_NS, 'w:shd');\n shading.setAttribute('val', 'clear');\n shading.setAttribute('fill', fill.replace(/^#/, '').toUpperCase());\n rPr.appendChild(shading);\n }\n }\n if (format.fontSize !== undefined) {\n removeDirectChildren(rPr, 'sz');\n const size = doc.createElementNS(W_NS, 'w:sz');\n size.setAttribute('val', String(Math.round(format.fontSize * 2)));\n rPr.appendChild(size);\n }\n if (format.fontFamily !== undefined) {\n removeDirectChildren(rPr, 'rFonts');\n const fonts = doc.createElementNS(W_NS, 'w:rFonts');\n fonts.setAttribute('ascii', format.fontFamily);\n fonts.setAttribute('hAnsi', format.fontFamily);\n fonts.setAttribute('eastAsia', format.fontFamily);\n fonts.setAttribute('cs', format.fontFamily);\n rPr.appendChild(fonts);\n }\n}\n\nfunction removeDirectChildren(parent: Element, localName: string): void {\n for (const child of directChildren(parent)) {\n if (child.namespaceURI === W_NS && child.localName === localName) parent.removeChild(child);\n }\n}\n\nfunction mergeAdjacentRevisionWrappers(nodes: Node[]): void {\n for (let index = 1; index < nodes.length; index += 1) {\n const previous = nodes[index - 1];\n const current = nodes[index];\n if (previous?.nodeType !== 1 || current?.nodeType !== 1) continue;\n const previousElement = previous as Element;\n const currentElement = current as Element;\n if (\n previousElement.namespaceURI !== W_NS || currentElement.namespaceURI !== W_NS ||\n previousElement.localName !== currentElement.localName ||\n (previousElement.localName !== 'ins' && previousElement.localName !== 'del') ||\n previousElement.getAttributeNS(W_NS, 'id') !== currentElement.getAttributeNS(W_NS, 'id')\n ) continue;\n for (const child of Array.from(currentElement.childNodes)) previousElement.appendChild(child);\n nodes.splice(index, 1);\n index -= 1;\n }\n}\n\nfunction cloneRevisionRun(run: Element, text: string): Element {\n const clone = run.cloneNode(true) as Element;\n const textNode = clone.getElementsByTagNameNS(W_NS, 't')[0];\n if (textNode) textNode.textContent = text;\n return clone;\n}\n\nfunction convertRevisionText(run: Element): void {\n const doc = run.ownerDocument!;\n const texts = Array.from(run.getElementsByTagNameNS(W_NS, 't'));\n for (const text of texts) {\n const deleted = doc.createElementNS(W_NS, 'w:delText');\n for (let index = 0; index < text.attributes.length; index += 1) {\n const attribute = text.attributes[index];\n if (attribute) deleted.setAttributeNS(attribute.namespaceURI, attribute.name, attribute.value);\n }\n deleted.textContent = text.textContent;\n text.parentNode?.replaceChild(deleted, text);\n }\n}\n\nfunction convertRevisionDeleteText(root: Element): void {\n const doc = root.ownerDocument!;\n const texts = Array.from(root.getElementsByTagNameNS(W_NS, 'delText'));\n for (const text of texts) {\n const normal = doc.createElementNS(W_NS, 'w:t');\n for (let index = 0; index < text.attributes.length; index += 1) {\n const attribute = text.attributes[index];\n if (attribute) normal.setAttributeNS(attribute.namespaceURI, attribute.name, attribute.value);\n }\n normal.textContent = text.textContent;\n text.parentNode?.replaceChild(normal, text);\n }\n}\n\nfunction applyCommentPatch(\n pkg: Package,\n partPath: string,\n paragraph: Element,\n patch: Extract<WordOoxmlPatch, { kind: 'comment' }>,\n): { ok: true } | { ok: false; reason: string } {\n if (patch.op === 'insert') {\n if (patch.from < 0 || patch.to <= patch.from) return { ok: false, reason: 'comment range is empty or invalid' };\n const totalLength = collectParagraphOffsetUnits(paragraph).reduce((sum, unit) => sum + unit.length, 0);\n if (patch.to > totalLength) return { ok: false, reason: `comment range out of range: ${patch.from}:${patch.to}` };\n ensureCommentsPart(pkg, partPath);\n insertCommentAnchors(paragraph, patch.from, patch.to, patch.commentId);\n const date = new Date().toISOString();\n appendCommentBody(pkg, patch.commentId, patch.body ?? '', 'User', date);\n if (patch.parentCommentId !== undefined) appendExtendedCommentRelation(pkg, patch.commentId, patch.parentCommentId);\n return { ok: true };\n }\n\n if (patch.op === 'update') {\n if (patch.body === undefined) return { ok: false, reason: 'comment update requires body' };\n const commentsPart = pkg.parts.get('word/comments.xml');\n const commentsDom = commentsPart?.xmlDom;\n if (!commentsPart || !commentsDom) return { ok: false, reason: 'comments.xml part not found' };\n const comments = commentsDom.getElementsByTagNameNS(W_NS, 'comment');\n for (let index = 0; index < comments.length; index += 1) {\n const comment = comments[index];\n if (comment?.getAttributeNS(W_NS, 'id') !== String(patch.commentId)) continue;\n const textNodes = comment.getElementsByTagNameNS(W_NS, 't');\n if (textNodes.length === 0) {\n const paragraph = commentsDom.createElementNS(W_NS, 'w:p');\n const run = commentsDom.createElementNS(W_NS, 'w:r');\n const text = commentsDom.createElementNS(W_NS, 'w:t');\n text.textContent = patch.body;\n run.appendChild(text);\n paragraph.appendChild(run);\n comment.appendChild(paragraph);\n } else {\n textNodes[0]!.textContent = patch.body;\n for (let textIndex = textNodes.length - 1; textIndex >= 1; textIndex -= 1) removeNode(textNodes[textIndex]!);\n }\n markDirty(commentsPart);\n return { ok: true };\n }\n return { ok: false, reason: `comment not found: ${patch.commentId}` };\n }\n\n removeCommentAnchors(pkg, patch.commentId);\n removeExtendedCommentRelation(pkg, patch.commentId);\n const commentsPart = pkg.parts.get('word/comments.xml');\n const commentsDom = commentsPart?.xmlDom;\n if (commentsDom) {\n const comments = commentsDom.getElementsByTagNameNS(W_NS, 'comment');\n for (let index = 0; index < comments.length; index += 1) {\n const comment = comments[index];\n if (comment?.getAttributeNS(W_NS, 'id') === String(patch.commentId)) removeNode(comment);\n }\n markDirty(commentsPart!);\n }\n return { ok: true };\n}\n\nfunction ensureCommentsPart(pkg: Package, partPath: string): Part {\n let commentsPart = pkg.parts.get('word/comments.xml');\n if (!commentsPart?.xmlDom) {\n const sourceDocument = Array.from(pkg.parts.values()).find((part) => part.xmlDom)?.xmlDom;\n if (!sourceDocument) throw new Error('cannot create comments.xml without an XML part');\n const dom = sourceDocument.implementation?.createDocument(W_NS, 'w:comments', null) as unknown as Document;\n if (!dom) throw new Error('XML implementation cannot create comments.xml');\n commentsPart = createXmlPart({ path: 'word/comments.xml', contentType: COMMENTS_CONTENT_TYPE, xmlDom: dom });\n setPart(pkg, commentsPart);\n ensureCommentsContentType(pkg);\n }\n ensureCommentsRelationship(pkg, partPath);\n return commentsPart;\n}\n\nfunction ensureCommentsContentType(pkg: Package): void {\n const contentTypes = getPart(pkg, '[Content_Types].xml');\n const dom = contentTypes?.xmlDom;\n if (!contentTypes || !dom) return;\n const overrides = dom.getElementsByTagNameNS(CONTENT_TYPES_NS, 'Override');\n for (let index = 0; index < overrides.length; index += 1) {\n if (overrides[index]?.getAttribute('PartName') === '/word/comments.xml') return;\n }\n const override = dom.createElementNS(CONTENT_TYPES_NS, 'Override');\n override.setAttribute('PartName', '/word/comments.xml');\n override.setAttribute('ContentType', COMMENTS_CONTENT_TYPE);\n dom.documentElement?.appendChild(override);\n markDirty(contentTypes);\n}\n\nfunction ensureCommentsRelationship(pkg: Package, partPath: string): void {\n const relsPath = relsPathFor(partPath);\n let relsPart = pkg.parts.get(relsPath);\n if (!relsPart?.xmlDom) return;\n const dom = relsPart.xmlDom;\n const relationships = dom.getElementsByTagNameNS(PACKAGE_RELS_NS, 'Relationship');\n for (let index = 0; index < relationships.length; index += 1) {\n if (relationships[index]?.getAttribute('Type') === `${R_NS}/comments`) return;\n }\n const used = new Set<string>();\n for (let index = 0; index < relationships.length; index += 1) {\n const id = relationships[index]?.getAttribute('Id');\n if (id) used.add(id);\n }\n let idNumber = 1;\n while (used.has(`rId${idNumber}`)) idNumber += 1;\n const relationship = dom.createElementNS(PACKAGE_RELS_NS, 'Relationship');\n relationship.setAttribute('Id', `rId${idNumber}`);\n relationship.setAttribute('Type', `${R_NS}/comments`);\n relationship.setAttribute('Target', 'comments.xml');\n dom.documentElement?.appendChild(relationship);\n markDirty(relsPart);\n}\n\nfunction appendCommentBody(pkg: Package, commentId: number, body: string, author: string, date: string): void {\n const part = pkg.parts.get('word/comments.xml');\n const dom = part?.xmlDom;\n if (!part || !dom) return;\n const root = dom.documentElement;\n if (!root) return;\n if (Array.from(dom.getElementsByTagNameNS(W_NS, 'comment'))\n .some((comment) => comment.getAttributeNS(W_NS, 'id') === String(commentId))) return;\n const comment = dom.createElementNS(W_NS, 'w:comment');\n comment.setAttributeNS(W_NS, 'w:id', String(commentId));\n comment.setAttributeNS(W_NS, 'w:author', author);\n comment.setAttributeNS(W_NS, 'w:date', date);\n comment.setAttributeNS(W_NS, 'w:initials', author.slice(0, 1));\n const paragraph = dom.createElementNS(W_NS, 'w:p');\n paragraph.setAttributeNS(W14_NS, 'w14:paraId', commentParaId(commentId));\n const run = dom.createElementNS(W_NS, 'w:r');\n const text = dom.createElementNS(W_NS, 'w:t');\n text.textContent = body;\n preserveTextSpace(text);\n run.appendChild(text);\n paragraph.appendChild(run);\n comment.appendChild(paragraph);\n root.appendChild(comment);\n markDirty(part);\n}\n\nfunction appendExtendedCommentRelation(pkg: Package, commentId: number, parentCommentId: number): void {\n const commentsPart = pkg.parts.get('word/comments.xml');\n const commentsDom = commentsPart?.xmlDom;\n if (!commentsDom) return;\n const commentParaIdFor = (id: number): string | null => {\n const comments = commentsDom.getElementsByTagNameNS(W_NS, 'comment');\n for (let index = 0; index < comments.length; index += 1) {\n if (comments[index]?.getAttributeNS(W_NS, 'id') !== String(id)) continue;\n const paragraph = comments[index]?.getElementsByTagNameNS(W_NS, 'p')[0];\n return paragraph?.getAttributeNS(W14_NS, 'paraId') ?? null;\n }\n return null;\n };\n const paraId = commentParaIdFor(commentId);\n const parentParaId = commentParaIdFor(parentCommentId);\n if (!paraId || !parentParaId) return;\n const part = ensureCommentsExtendedPart(pkg, 'word/document.xml');\n const dom = part.xmlDom;\n const root = dom?.documentElement;\n if (!dom || !root) return;\n const existing = Array.from(root.getElementsByTagNameNS(W15_NS, 'commentEx'))\n .some((entry) => entry.getAttributeNS(W15_NS, 'paraId') === paraId);\n if (existing) return;\n const relation = dom.createElementNS(W15_NS, 'w15:commentEx');\n relation.setAttributeNS(W15_NS, 'w15:paraId', paraId);\n relation.setAttributeNS(W15_NS, 'w15:paraIdParent', parentParaId);\n root.appendChild(relation);\n markDirty(part);\n}\n\nfunction commentParaId(commentId: number): string {\n return commentId.toString(16).padStart(8, '0').slice(-8);\n}\n\nfunction removeExtendedCommentRelation(pkg: Package, commentId: number): void {\n const commentsPart = pkg.parts.get('word/comments.xml');\n const commentsDom = commentsPart?.xmlDom;\n const extendedPart = pkg.parts.get('word/commentsExtended.xml');\n const extendedDom = extendedPart?.xmlDom;\n if (!commentsDom || !extendedDom) return;\n const comments = commentsDom.getElementsByTagNameNS(W_NS, 'comment');\n let paraId: string | null = null;\n for (let index = 0; index < comments.length; index += 1) {\n if (comments[index]?.getAttributeNS(W_NS, 'id') !== String(commentId)) continue;\n paraId = comments[index]?.getElementsByTagNameNS(W_NS, 'p')[0]?.getAttributeNS(W14_NS, 'paraId') ?? null;\n break;\n }\n if (!paraId) return;\n const relations = Array.from(extendedDom.getElementsByTagNameNS(W15_NS, 'commentEx'));\n for (const relation of relations) {\n if (relation.getAttributeNS(W15_NS, 'paraId') === paraId || relation.getAttributeNS(W15_NS, 'paraIdParent') === paraId) {\n removeNode(relation);\n markDirty(extendedPart);\n }\n }\n}\n\nfunction ensureCommentsExtendedPart(pkg: Package, partPath: string): Part {\n let part = pkg.parts.get('word/commentsExtended.xml');\n if (!part?.xmlDom) {\n const sourceDocument = pkg.parts.get(partPath)?.xmlDom ?? Array.from(pkg.parts.values()).find((candidate) => candidate.xmlDom)?.xmlDom;\n if (!sourceDocument) throw new Error('cannot create commentsExtended.xml without an XML part');\n const dom = sourceDocument.implementation?.createDocument(W15_NS, 'w15:commentsEx', null) as unknown as Document;\n if (!dom) throw new Error('XML implementation cannot create commentsExtended.xml');\n part = createXmlPart({ path: 'word/commentsExtended.xml', contentType: COMMENTS_EXTENDED_CONTENT_TYPE, xmlDom: dom });\n setPart(pkg, part);\n }\n const contentTypes = getPart(pkg, '[Content_Types].xml');\n if (contentTypes?.xmlDom) {\n const overrides = contentTypes.xmlDom.getElementsByTagNameNS(CONTENT_TYPES_NS, 'Override');\n if (!Array.from(overrides).some((entry) => entry.getAttribute('PartName') === '/word/commentsExtended.xml')) {\n const override = contentTypes.xmlDom.createElementNS(CONTENT_TYPES_NS, 'Override');\n override.setAttribute('PartName', '/word/commentsExtended.xml');\n override.setAttribute('ContentType', COMMENTS_EXTENDED_CONTENT_TYPE);\n contentTypes.xmlDom.documentElement?.appendChild(override);\n markDirty(contentTypes);\n }\n }\n const relsPart = pkg.parts.get(relsPathFor(partPath));\n const relsDom = relsPart?.xmlDom;\n if (relsDom && !Array.from(relsDom.getElementsByTagNameNS(PACKAGE_RELS_NS, 'Relationship'))\n .some((entry) => entry.getAttribute('Type') === COMMENTS_EXTENDED_REL_TYPE)) {\n const relationships = relsDom.getElementsByTagNameNS(PACKAGE_RELS_NS, 'Relationship');\n const used = new Set(Array.from(relationships).map((entry) => entry.getAttribute('Id')).filter(Boolean));\n let idNumber = 1;\n while (used.has(`rId${idNumber}`)) idNumber += 1;\n const relationship = relsDom.createElementNS(PACKAGE_RELS_NS, 'Relationship');\n relationship.setAttribute('Id', `rId${idNumber}`);\n relationship.setAttribute('Type', COMMENTS_EXTENDED_REL_TYPE);\n relationship.setAttribute('Target', 'commentsExtended.xml');\n relsDom.documentElement?.appendChild(relationship);\n markDirty(relsPart!);\n }\n return part;\n}\n\nfunction insertCommentAnchors(paragraph: Element, from: number, to: number, commentId: number): void {\n const document = paragraph.ownerDocument!;\n const start = document.createElementNS(W_NS, 'w:commentRangeStart');\n start.setAttributeNS(W_NS, 'w:id', String(commentId));\n const end = document.createElementNS(W_NS, 'w:commentRangeEnd');\n end.setAttributeNS(W_NS, 'w:id', String(commentId));\n const referenceRun = document.createElementNS(W_NS, 'w:r');\n const reference = document.createElementNS(W_NS, 'w:commentReference');\n reference.setAttributeNS(W_NS, 'w:id', String(commentId));\n referenceRun.appendChild(reference);\n const markers = new Map<number, Element[]>();\n markers.set(from, [start]);\n markers.set(to, [end, referenceRun]);\n const children = directChildren(paragraph).filter((child) => !(child.namespaceURI === W_NS && child.localName === 'pPr'));\n const next: Element[] = [];\n let position = 0;\n for (const child of children) {\n const atStartMarkers = markers.get(position);\n if (atStartMarkers) next.push(...atStartMarkers);\n const length = inlineNodeLength(child);\n const boundaries = [from, to].filter((boundary) => boundary > position && boundary < position + length).sort((a, b) => a - b);\n let local = 0;\n for (const boundary of [...boundaries, position + length]) {\n const piece = sliceInlineElement(child, local, boundary - position);\n if (piece) next.push(piece);\n const absolute = boundary;\n const boundaryMarkers = markers.get(absolute);\n if (boundaryMarkers) next.push(...boundaryMarkers);\n local = boundary - position;\n }\n if (length === 0) next.push(child);\n position += length;\n }\n for (const boundary of [from, to]) {\n if (boundary === position) {\n const boundaryMarkers = markers.get(boundary);\n if (boundaryMarkers) next.push(...boundaryMarkers);\n }\n }\n for (const child of children) removeNode(child);\n for (const child of next) paragraph.appendChild(child);\n}\n\nfunction removeCommentAnchors(pkg: Package, commentId: number): void {\n for (const part of pkg.parts.values()) {\n const dom = part.xmlDom;\n if (!dom) continue;\n for (const localName of ['commentRangeStart', 'commentRangeEnd', 'commentReference']) {\n const nodes = dom.getElementsByTagNameNS(W_NS, localName);\n const matches: Element[] = [];\n for (let index = 0; index < nodes.length; index += 1) {\n const node = nodes[index];\n if (node?.getAttributeNS(W_NS, 'id') === String(commentId)) matches.push(node);\n }\n for (const node of matches) {\n const parent = node.parentNode;\n if (localName === 'commentReference' && parent?.nodeType === 1 && (parent as Element).namespaceURI === W_NS && (parent as Element).localName === 'r') {\n removeNode(parent);\n } else {\n removeNode(node);\n }\n }\n if (matches.length > 0) markDirty(part);\n }\n }\n}\n\nfunction isDrawingOnlyRun(run: Element): boolean {\n for (let i = 0; i < run.childNodes.length; i++) {\n const child = run.childNodes[i];\n if (!child || child.nodeType !== 1) continue;\n const el = child as Element;\n if (el.namespaceURI === W_NS && (el.localName === 'rPr' || el.localName === 'drawing')) continue;\n return false;\n }\n return true;\n}\n\nfunction isElement(node: Node): node is Element {\n return node.nodeType === 1;\n}\n","import type { EditorDocumentView, EditorRunFormat } from './model.js';\nimport defaultEditorStyles from '../generated/editor-styles.js';\nimport {\n allNativeParagraphs,\n createNativeWordDocument,\n findNativeParagraph,\n findNativeParagraphLocation,\n findNativeTableCellLocation,\n findNativeTableLocation,\n nativeParagraphText,\n previousNativeParagraphId,\n type NativeWordBlockNode,\n type NativeWordDocument,\n type NativeWordInlineNode,\n type NativeWordParagraphNode,\n type NativeWordTableCellNode,\n} from './native-model.js';\nimport {\n nativeDeleteBackward,\n nativeDeleteForward,\n nativeDeleteImage,\n nativeDeleteRange,\n nativeDeleteTextRangeAcrossParagraphs,\n nativeClearTableCellRange,\n nativeCopyBlockRange,\n nativeClearRunFormat,\n cloneNativeWordBlocks,\n nativeInsertText,\n nativeInsertImage,\n nativeInsertPageBreak,\n nativePageBreakAt,\n nativeRangeContainsPageBreak,\n nativeEditTableStructure,\n nativeDeleteTable,\n nativeInsertTable,\n nativeReplaceRange,\n nativeReplaceBlockRangeAcrossParagraphs,\n nativeReplaceRangeWithBlocks,\n nativeReplaceTextRangeAcrossParagraphs,\n nativeReplaceTextRangeWithParagraphs,\n nativeReplaceTableCellRangeText,\n nativeReplaceTableCellRangeContent,\n nativeSetParagraphFormat,\n nativeSetParagraphList,\n nativeSetImageSize,\n nativeSetHyperlink,\n nativeAddComment,\n nativeUpdateComment,\n nativeDeleteComment,\n nativeAddRevision,\n nativeResolveRevision,\n nativeResolveImageRevision,\n nativeResolveImageFormatRevision,\n nativeAddFormatRevision,\n nativeResolveFormatRevision,\n nativeSetTableCellFormat,\n nativeSetTableCellRangeFormat,\n nativeTableCellsInRange,\n nativeMergeTableCells,\n nativeSplitTableCell,\n type NativeTableClipboardCell,\n nativeSetRunFormat,\n nativeSplitParagraph,\n nativeSyncParagraphText,\n type NativeWordChange,\n} from './native-commands.js';\nimport {\n defineNativeWordElements,\n measureNativeDocumentReflowFromParagraph,\n paginateNativeDocument,\n rebuildNativeTableFragmentsFromParagraph,\n reflowNativeDocumentFromParagraph,\n renderNativeBlock,\n renderNativeDocument,\n renderNativeImage,\n renderNativeParagraph,\n refreshNativePageCommentBubbles,\n type NativeDocumentReflowMeasurement,\n} from './native-renderer.js';\nimport {\n clearNativeImageSelection,\n createNativeSelectionRange,\n createNativeTextRange,\n currentNativeSelection,\n currentNativeCursor,\n imageOffset,\n nativeCursorFromPoint,\n nativeSelectionFromCursor,\n nativeSelection,\n parentNativeParagraph,\n restoreNativeCursor,\n restoreNativeTextSelection,\n restoreNativeElementSelection,\n selectNativeImage,\n type NativeCursorPoint,\n type NativeSelectedImage,\n} from './native-selection.js';\nimport { canDispatchNativeWordCommand, getNativeWordCommandState } from './native-command-state.js';\nimport { searchNativeWordDocument } from './native-search.js';\nimport { createWordEditorChangeEvent } from './runtime-events.js';\nimport {\n NATIVE_BLOCK_CLIPBOARD_TYPE,\n nativeBlockClipboardText,\n parseNativeBlockClipboard,\n parseNativeClipboardHtml,\n serializeNativeBlockClipboard,\n serializeNativeClipboardHtml,\n type NativeClipboardParagraph,\n} from './native-clipboard.js';\nimport {\n adjacentNativeListNumbering,\n createNativeListNumbering,\n nativeListType,\n nativeNumberingAtLevel,\n refreshNativeNumberingLabels,\n} from './native-numbering.js';\nimport type {\n WordEditorCommand,\n WordEditorChangeEvent,\n WordEditorRuntime,\n WordEditorRuntimeEvent,\n WordEditorRuntimeEventMap,\n WordEditorRuntimeOptions,\n WordEditorSelection,\n WordEditorSelectionChangeEvent,\n WordEditorSearchOptions,\n WordEditorSearchState,\n WordEditorTableCellPoint,\n} from './runtime.js';\n\nexport * from './native-model.js';\nexport * from './native-table-pagination.js';\nexport * from './native-commands.js';\nexport * from './native-renderer.js';\nexport * from './native-selection.js';\nexport * from './native-search.js';\nexport * from './native-command-state.js';\nexport * from './native-numbering.js';\nexport * from './ooxml-patch.js';\n\nexport interface NativeWordEditor extends WordEditorRuntime {}\n\nconst activeNativeWordHostByDocument = new WeakMap<Document, HTMLElement>();\nconst NATIVE_TABLE_CLIPBOARD_TYPE = 'application/x-coco-word-table-cells+json';\nconst NATIVE_IMAGE_CLIPBOARD_TYPE = 'application/x-coco-word-image';\nconst NATIVE_IMAGE_CLIPBOARD_PREFIX = 'coco-image:';\nconst nativeImageClipboardSources = new Map<string, string>();\nlet nextNativeImageClipboardId = 0;\nlet nextNativeSearchHighlightId = 0;\nlet nextNativeCommentId = 0;\n let nextNativeRevisionId = 0;\n\ninterface PendingBrowserRangeDelete {\n range: {\n anchor: { paraId: string; offset: number };\n focus: { paraId: string; offset: number };\n };\n beforeParagraphs: NativeWordParagraphNode[];\n changesStart: number;\n}\n\ninterface BrowserTextTransaction extends PendingBrowserRangeDelete {\n source: 'browser' | 'local';\n patchMode?: 'range' | 'individual';\n skipDeferredRender?: boolean;\n forceFullRender?: boolean;\n deferLayoutReflow?: boolean;\n afterParagraphs: NativeWordParagraphNode[];\n changes: NativeWordChange[];\n beforeSelection?: WordEditorSelection;\n afterSelection?: WordEditorSelection;\n}\n\ninterface BrowserBlockTransaction {\n source: 'local';\n range: PendingBrowserRangeDelete['range'];\n container: NativeWordBlockNode[];\n startIndex: number;\n beforeBlocks: NativeWordBlockNode[];\n afterBlocks: NativeWordBlockNode[];\n changesStart: number;\n changes: NativeWordChange[];\n beforeSelection?: WordEditorSelection;\n afterSelection?: WordEditorSelection;\n}\n\ninterface PendingCompositionTransaction {\n paraId: string;\n beforeParagraph: NativeWordParagraphNode;\n changesStart: number;\n range: PendingBrowserRangeDelete['range'];\n}\n\ninterface NativeContextMenuItem {\n label: string;\n disabled?: boolean;\n separatorBefore?: boolean;\n action(): unknown;\n}\n\ntype BrowserTransaction = BrowserTextTransaction | BrowserBlockTransaction;\n\nexport function renderNativeWordEditor(\n host: HTMLElement,\n initialView: EditorDocumentView,\n options: WordEditorRuntimeOptions = {},\n): NativeWordEditor {\n defineNativeWordElements();\n const outerHost = host;\n let shadowRoot: ShadowRoot | null = null;\n if (options.styleIsolation !== 'none') {\n outerHost.replaceChildren();\n shadowRoot = outerHost.shadowRoot ?? outerHost.attachShadow({ mode: 'open' });\n shadowRoot.replaceChildren();\n const style = outerHost.ownerDocument.createElement('style');\n style.textContent = `\n :host { display: block; position: relative; min-width: 0; min-height: 0; }\n *, *::before, *::after { box-sizing: border-box; }\n button, input, textarea, select { font: inherit; line-height: normal; }\n button { margin: 0; }\n ${options.styleText ?? defaultEditorStyles}`;\n shadowRoot.appendChild(style);\n const surface = outerHost.ownerDocument.createElement('div');\n surface.className = 'coco-word-editor coco-word-native-editor-surface';\n surface.setAttribute('part', 'surface');\n shadowRoot.appendChild(surface);\n outerHost.classList.add('coco-word-editor-host');\n outerHost.style.display = 'block';\n outerHost.style.position = 'relative';\n outerHost.style.minWidth = '0';\n outerHost.style.minHeight = '0';\n host = surface;\n }\n const focusHost = outerHost;\n host.classList.add('coco-word-native-editor-host');\n let sourceView = initialView;\n let doc = createNativeWordDocument(sourceView);\n let destroyed = false;\n const changes: NativeWordChange[] = [];\n let emittedChanges: NativeWordChange[] = [];\n let revision = 0;\n const paragraphIds = new Set(allNativeParagraphs(doc).map((paragraph) => paragraph.paraId));\n let nextParagraphId = Date.now() >>> 0;\n let selectedImage: NativeSelectedImage | null = null;\n let selection: WordEditorSelection | null = null;\n let lastTextSelection: Extract<WordEditorSelection, { kind: 'text-range' }> | null = null;\n let trackRevisions = options.trackRevisions === true;\n let searchState: WordEditorSearchState | null = null;\n let suppressNextEnterBeforeInput = false;\n let clearEnterSuppressionTimer: number | null = null;\n let deferredRenderTimer: number | null = null;\n let deferredReflowTimer: number | null = null;\n let nativeHistorySyncTimer: number | null = null;\n let deferredChangeTimer: number | null = null;\n let deferredSelectionTimer: number | null = null;\n let pendingBrowserRangeDelete: PendingBrowserRangeDelete | null = null;\n let pendingCompositionTransaction: PendingCompositionTransaction | null = null;\n let compositionActive = false;\n let typingLayoutBaseline: { paraId: string; measurement: NativeDocumentReflowMeasurement } | null = null;\n let compositionFinalizeTimer: number | null = null;\n let suppressedBrowserHistoryInput: 'historyUndo' | 'historyRedo' | null = null;\n let browserHistorySuppressionTimer: number | null = null;\n let activeLocalTypingTransaction: BrowserTextTransaction | null = null;\n const browserUndoStack: BrowserTransaction[] = [];\n const browserRedoStack: BrowserTransaction[] = [];\n const pendingImageReflows = new WeakSet<HTMLImageElement>();\n let textDragActive = false;\n let textDragMoved = false;\n let suppressTextClick = false;\n let preserveSelectionOnClick = false;\n let preserveSelectionForExternalInteraction = false;\n const listeners: Record<\n WordEditorRuntimeEvent,\n Set<(payload: WordEditorChangeEvent | WordEditorSelectionChangeEvent) => void>\n > = {\n change: new Set(),\n selectionChange: new Set(),\n };\n\n const emit = <Event extends WordEditorRuntimeEvent>(event: Event, payload: WordEditorRuntimeEventMap[Event]) => {\n for (const listener of listeners[event]) listener(payload);\n };\n\n const activate = () => activeNativeWordHostByDocument.set(document, host);\n\n const getCommandState = (current: WordEditorSelection | null) => ({\n ...getNativeWordCommandState(doc, current),\n trackRevisions,\n });\n\n let imageResizeHandle: HTMLButtonElement | null = null;\n let cancelImageResizeDrag: (() => void) | null = null;\n let contextMenuElement: HTMLDivElement | null = null;\n let tableDragStart: { tableId: string; point: WordEditorTableCellPoint } | null = null;\n let tableDragSelectionActive = false;\n let suppressTableSelectionClick = false;\n const closeContextMenu = () => {\n contextMenuElement?.remove();\n contextMenuElement = null;\n };\n const tableCellTarget = (target: EventTarget | null): {\n tableId: string;\n point: WordEditorTableCellPoint;\n element: HTMLTableCellElement;\n } | null => {\n if (!(target instanceof Element)) return null;\n const cell = target.closest<HTMLTableCellElement>('coco-word-native-table td[data-row-index][data-column-index]');\n const table = cell?.closest<HTMLElement>('coco-word-native-table[data-table-id]');\n const rowIndex = Number(cell?.dataset.rowIndex);\n const columnIndex = Number(cell?.dataset.columnIndex);\n if (!cell || !table || !Number.isInteger(rowIndex) || !Number.isInteger(columnIndex)) return null;\n return { tableId: table.dataset.tableId ?? '', point: { rowIndex, columnIndex }, element: cell };\n };\n const renderTableCellRangeSelection = (current: WordEditorSelection | null) => {\n for (const cell of Array.from(host.querySelectorAll<HTMLTableCellElement>('td.is-cell-range-selected'))) {\n cell.classList.remove('is-cell-range-selected', 'is-cell-range-anchor', 'is-cell-range-focus');\n cell.removeAttribute('aria-selected');\n }\n if (current?.kind !== 'table-cell-range') return;\n const table = Array.from(host.querySelectorAll<HTMLElement>('coco-word-native-table[data-table-id]'))\n .find((candidate) => candidate.dataset.tableId === current.tableId);\n if (!table) return;\n const startRow = Math.min(current.anchor.rowIndex, current.focus.rowIndex);\n const endRow = Math.max(current.anchor.rowIndex, current.focus.rowIndex);\n const startColumn = Math.min(current.anchor.columnIndex, current.focus.columnIndex);\n const endColumn = Math.max(current.anchor.columnIndex, current.focus.columnIndex);\n for (const cell of Array.from(table.querySelectorAll<HTMLTableCellElement>('td[data-row-index][data-column-index]'))) {\n const row = Number(cell.dataset.rowIndex);\n const column = Number(cell.dataset.columnIndex);\n const rowEnd = row + Math.max(1, cell.rowSpan) - 1;\n const columnEnd = column + Math.max(1, cell.colSpan) - 1;\n if (row <= endRow && rowEnd >= startRow && column <= endColumn && columnEnd >= startColumn) {\n cell.classList.add('is-cell-range-selected');\n cell.setAttribute('aria-selected', 'true');\n if (row === current.anchor.rowIndex && column === current.anchor.columnIndex) {\n cell.classList.add('is-cell-range-anchor');\n }\n if (row === current.focus.rowIndex && column === current.focus.columnIndex) {\n cell.classList.add('is-cell-range-focus');\n }\n }\n }\n };\n const searchHighlightId = ++nextNativeSearchHighlightId;\n const searchMatchHighlightName = `coco-word-search-match-${searchHighlightId}`;\n const searchActiveHighlightName = `coco-word-search-active-${searchHighlightId}`;\n const preservedSelectionHighlightName = `coco-word-preserved-selection-${searchHighlightId}`;\n const searchHighlightStyle = document.createElement('style');\n searchHighlightStyle.textContent = `\n ::highlight(${searchMatchHighlightName}) { background-color: rgb(250 204 21 / 42%); }\n ::highlight(${searchActiveHighlightName}) { background-color: rgb(249 115 22 / 68%); color: inherit; }\n ::highlight(${preservedSelectionHighlightName}) { background-color: rgb(0 120 215 / 34%); color: inherit; }\n `;\n (shadowRoot ?? document.head).appendChild(searchHighlightStyle);\n const searchHighlightRegistry = (globalThis.CSS as (typeof CSS & {\n highlights?: { set(name: string, highlight: unknown): void; delete(name: string): void };\n }) | undefined)?.highlights;\n const SearchHighlight = (globalThis as typeof globalThis & {\n Highlight?: new (...ranges: Range[]) => unknown;\n }).Highlight;\n const clearSearchHighlights = () => {\n searchHighlightRegistry?.delete(searchMatchHighlightName);\n searchHighlightRegistry?.delete(searchActiveHighlightName);\n };\n const clearPreservedSelectionHighlight = () => {\n searchHighlightRegistry?.delete(preservedSelectionHighlightName);\n };\n const renderPreservedSelectionHighlight = (force = false) => {\n clearPreservedSelectionHighlight();\n if (\n selection?.kind !== 'text-range' ||\n !force && (document.activeElement === focusHost || host.contains(document.activeElement)) ||\n !searchHighlightRegistry ||\n !SearchHighlight\n ) return;\n const ordered = orderedSelectionRange(doc, selection);\n const range = createNativeSelectionRange(host, ordered.anchor, ordered.focus);\n if (range && !range.collapsed) {\n searchHighlightRegistry.set(preservedSelectionHighlightName, new SearchHighlight(range));\n }\n };\n const renderSearchHighlights = () => {\n clearSearchHighlights();\n if (!searchState || !searchHighlightRegistry || !SearchHighlight) return;\n const regularRanges: Range[] = [];\n let activeRange: Range | null = null;\n searchState.matches.forEach((match, index) => {\n const range = createNativeTextRange(host, match.paraId, match.from, match.to);\n if (!range) return;\n if (index === searchState!.activeIndex) activeRange = range;\n else regularRanges.push(range);\n });\n if (regularRanges.length > 0) {\n searchHighlightRegistry.set(searchMatchHighlightName, new SearchHighlight(...regularRanges));\n }\n if (activeRange) {\n searchHighlightRegistry.set(searchActiveHighlightName, new SearchHighlight(activeRange));\n }\n };\n const searchStateSnapshot = (): WordEditorSearchState | null => searchState\n ? { options: { ...searchState.options }, matches: searchState.matches.map((match) => ({ ...match })), activeIndex: searchState.activeIndex }\n : null;\n const refreshActiveSearch = () => {\n if (!searchState) return;\n const matches = searchNativeWordDocument(doc, searchState.options);\n searchState = {\n options: { ...searchState.options },\n matches,\n activeIndex: matches.length === 0 ? -1 : Math.min(Math.max(0, searchState.activeIndex), matches.length - 1),\n };\n renderSearchHighlights();\n renderPreservedSelectionHighlight();\n };\n const scrollToActiveSearchMatch = () => {\n const match = searchState && searchState.activeIndex >= 0 ? searchState.matches[searchState.activeIndex] : null;\n const paragraph = match\n ? host.querySelector<HTMLElement>(`coco-word-native-p[data-para-id=\"${match.paraId}\"]`)\n : null;\n paragraph?.scrollIntoView({ block: 'center', inline: 'nearest' });\n };\n const search = (options: WordEditorSearchOptions): WordEditorSearchState => {\n const normalized = { query: options.query, matchCase: !!options.matchCase, wholeWord: !!options.wholeWord };\n const matches = searchNativeWordDocument(doc, normalized);\n searchState = { options: normalized, matches, activeIndex: matches.length > 0 ? 0 : -1 };\n renderSearchHighlights();\n scrollToActiveSearchMatch();\n return searchStateSnapshot()!;\n };\n const findNext = (direction: 'forward' | 'backward' = 'forward'): WordEditorSearchState | null => {\n if (!searchState || searchState.matches.length === 0) return searchStateSnapshot();\n const delta = direction === 'backward' ? -1 : 1;\n searchState = {\n ...searchState,\n activeIndex: (searchState.activeIndex + delta + searchState.matches.length) % searchState.matches.length,\n };\n renderSearchHighlights();\n scrollToActiveSearchMatch();\n return searchStateSnapshot();\n };\n const clearSearch = () => {\n searchState = null;\n clearSearchHighlights();\n };\n const removeImageResizeHandle = () => {\n imageResizeHandle?.remove();\n imageResizeHandle = null;\n };\n const positionImageResizeHandle = () => {\n if (!imageResizeHandle || !selectedImage) return;\n const image = host.querySelector<HTMLImageElement>(\n `coco-word-native-p[data-para-id=\"${selectedImage.paraId}\"] img[data-drawing-id=\"${selectedImage.drawingId}\"]`,\n );\n if (!image) {\n removeImageResizeHandle();\n return;\n }\n const hostRect = host.getBoundingClientRect();\n const imageRect = image.getBoundingClientRect();\n imageResizeHandle.style.left = `${imageRect.right - hostRect.left + host.scrollLeft - 6}px`;\n imageResizeHandle.style.top = `${imageRect.bottom - hostRect.top + host.scrollTop - 6}px`;\n };\n const showImageResizeHandle = () => {\n if (!selectedImage) {\n removeImageResizeHandle();\n return;\n }\n selectNativeImage(host, selectedImage);\n const image = host.querySelector<HTMLImageElement>(\n `coco-word-native-p[data-para-id=\"${selectedImage.paraId}\"] img[data-drawing-id=\"${selectedImage.drawingId}\"]`,\n );\n if (!image) return;\n if (!imageResizeHandle?.isConnected) {\n const handle = document.createElement('button');\n handle.type = 'button';\n handle.className = 'coco-word-image-resize-handle';\n handle.title = 'Resize image';\n handle.setAttribute('aria-label', 'Resize image');\n handle.contentEditable = 'false';\n handle.addEventListener('click', (event) => {\n event.preventDefault();\n event.stopPropagation();\n });\n handle.addEventListener('pointerdown', (event) => {\n if (!selectedImage || event.button !== 0) return;\n activate();\n const selected = { ...selectedImage };\n const target = host.querySelector<HTMLImageElement>(\n `coco-word-native-p[data-para-id=\"${selected.paraId}\"] img[data-drawing-id=\"${selected.drawingId}\"]`,\n );\n if (!target) return;\n cancelImageResizeDrag?.();\n event.preventDefault();\n event.stopPropagation();\n handle.setPointerCapture(event.pointerId);\n const rect = target.getBoundingClientRect();\n const startX = event.clientX;\n const startY = event.clientY;\n const startWidth = Math.max(1, rect.width);\n const startHeight = Math.max(1, rect.height);\n const aspectRatio = startWidth / startHeight;\n let width = startWidth;\n let height = startHeight;\n const pointerMove = (moveEvent: PointerEvent) => {\n const deltaX = moveEvent.clientX - startX;\n const deltaY = moveEvent.clientY - startY;\n if (moveEvent.shiftKey) {\n width = Math.max(24, startWidth + deltaX);\n height = Math.max(24, startHeight + deltaY);\n } else {\n const dominantDelta = Math.abs(deltaX) >= Math.abs(deltaY) ? deltaX : deltaY * aspectRatio;\n width = Math.max(24, startWidth + dominantDelta);\n height = Math.max(24, width / aspectRatio);\n }\n target.style.width = `${width}px`;\n target.style.height = `${height}px`;\n positionImageResizeHandle();\n };\n const pointerUp = (upEvent: PointerEvent) => {\n cancelImageResizeDrag?.();\n cancelImageResizeDrag = null;\n if (handle.hasPointerCapture(upEvent.pointerId)) handle.releasePointerCapture(upEvent.pointerId);\n dispatch({\n kind: 'set-image-size',\n objectId: selected.drawingId,\n width: Math.round(width * 100) / 100,\n height: Math.round(height * 100) / 100,\n });\n };\n document.addEventListener('pointermove', pointerMove, true);\n document.addEventListener('pointerup', pointerUp, true);\n document.addEventListener('pointercancel', pointerUp, true);\n cancelImageResizeDrag = () => {\n document.removeEventListener('pointermove', pointerMove, true);\n document.removeEventListener('pointerup', pointerUp, true);\n document.removeEventListener('pointercancel', pointerUp, true);\n };\n });\n host.appendChild(handle);\n imageResizeHandle = handle;\n }\n positionImageResizeHandle();\n };\n\n const repositionSelectedImageHandle = () => positionImageResizeHandle();\n window.addEventListener('resize', repositionSelectedImageHandle);\n document.addEventListener('scroll', repositionSelectedImageHandle, true);\n\n const render = (cursor?: NativeCursorPoint, preservedSelection?: WordEditorSelection) => {\n if (deferredRenderTimer !== null) {\n window.clearTimeout(deferredRenderTimer);\n deferredRenderTimer = null;\n }\n if (deferredReflowTimer !== null) {\n window.clearTimeout(deferredReflowTimer);\n deferredReflowTimer = null;\n }\n refreshNativeNumberingLabels(doc);\n const rendered = renderNativeDocument(doc);\n host.replaceChildren(rendered);\n paginateNativeDocument(rendered, doc);\n observeNativeTableSizes(rendered);\n const tableSelection = preservedSelection?.kind === 'table-cell-range'\n ? preservedSelection\n : selection?.kind === 'table-cell-range'\n ? selection\n : null;\n renderTableCellRangeSelection(tableSelection);\n renderSearchHighlights();\n renderPreservedSelectionHighlight();\n if (selectedImage) showImageResizeHandle();\n if (preservedSelection?.kind === 'text-range') {\n restoreNativeTextSelection(host, preservedSelection.anchor, preservedSelection.focus);\n } else if (cursor) {\n restoreNativeCursor(host, cursor);\n }\n };\n\n const renderParagraph = (paraId: string, cursor?: NativeCursorPoint) => {\n const paragraph = findNativeParagraph(doc, paraId);\n if (!paragraph) {\n render(cursor);\n return;\n }\n const replacements = Array.from(host.querySelectorAll<HTMLElement>(`coco-word-native-p[data-para-id=\"${paraId}\"]`));\n if (replacements.length === 0) {\n render(cursor);\n return;\n }\n for (const current of replacements) {\n current.replaceWith(renderNativeParagraph(paragraph));\n }\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document') ?? host.querySelector<HTMLElement>('coco-word-native-document');\n if (root) refreshNativePageCommentBubbles(root);\n if (selectedImage) showImageResizeHandle();\n if (cursor) restoreNativeCursor(host, cursor);\n };\n\n const scheduleRender = (cursor?: NativeCursorPoint, preservedSelection?: WordEditorSelection) => {\n if (deferredRenderTimer !== null) window.clearTimeout(deferredRenderTimer);\n deferredRenderTimer = window.setTimeout(() => {\n deferredRenderTimer = null;\n render(cursor, preservedSelection);\n }, 450);\n };\n\n const reflowFromParagraph = (\n paraId: string,\n cursor?: NativeCursorPoint,\n preservedSelection?: WordEditorSelection,\n ): boolean => {\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document');\n if (!root) return false;\n const changed = reflowNativeDocumentFromParagraph(root, doc, paraId);\n observeNativeTableSizes(root);\n for (const image of Array.from(\n root.querySelectorAll<HTMLImageElement>(`coco-word-native-p[data-para-id=\"${paraId}\"] img`),\n )) {\n if (image.complete || pendingImageReflows.has(image)) continue;\n pendingImageReflows.add(image);\n image.addEventListener(\n 'load',\n () => {\n pendingImageReflows.delete(image);\n reflowFromParagraph(paraId);\n },\n { once: true },\n );\n }\n if (preservedSelection?.kind === 'text-range') {\n restoreNativeTextSelection(host, preservedSelection.anchor, preservedSelection.focus);\n } else if (cursor) {\n restoreNativeCursor(host, cursor);\n }\n return changed;\n };\n\n const scheduleReflow = (\n paraId: string,\n delay = 180,\n shouldRun?: (root: HTMLElement) => boolean,\n ) => {\n if (compositionActive || pendingCompositionTransaction) return;\n if (deferredReflowTimer !== null) window.clearTimeout(deferredReflowTimer);\n deferredReflowTimer = window.setTimeout(() => {\n deferredReflowTimer = null;\n if (compositionActive || pendingCompositionTransaction) return;\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document') ?? host.querySelector<HTMLElement>('coco-word-native-document');\n if (!root || (shouldRun && !shouldRun(root))) return;\n const current = selection?.kind === 'object' ? selection : currentNativeSelection(host);\n if (current?.kind === 'text-range') {\n reflowFromParagraph(paraId, undefined, current);\n } else if (current?.kind === 'object') {\n reflowFromParagraph(paraId);\n selectedImage = { paraId: current.paraId, drawingId: current.objectId };\n showImageResizeHandle();\n } else {\n const cursor = current?.kind === 'caret' ? current : currentNativeCursor(host);\n reflowFromParagraph(paraId, cursor ?? undefined);\n }\n }, delay);\n };\n\n const scheduleImageLayoutReflow = (paraId: string, delay = 80) => {\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document') ?? host.querySelector<HTMLElement>('coco-word-native-document');\n if (!root) return;\n let waitsForImage = false;\n for (const image of Array.from(\n root.querySelectorAll<HTMLImageElement>(`coco-word-native-p[data-para-id=\"${paraId}\"] img`),\n )) {\n if (image.complete || pendingImageReflows.has(image)) continue;\n waitsForImage = true;\n pendingImageReflows.add(image);\n image.addEventListener(\n 'load',\n () => {\n pendingImageReflows.delete(image);\n scheduleReflow(paraId, 0);\n },\n { once: true },\n );\n image.addEventListener('error', () => pendingImageReflows.delete(image), { once: true });\n }\n scheduleReflow(paraId, waitsForImage ? 800 : delay);\n };\n\n const captureTypingLayoutBaseline = (paraId: string) => {\n if (typingLayoutBaseline?.paraId === paraId) return;\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document') ?? host.querySelector<HTMLElement>('coco-word-native-document');\n if (!root) return;\n typingLayoutBaseline = {\n paraId,\n measurement: measureNativeDocumentReflowFromParagraph(root, doc, paraId),\n };\n };\n\n const scheduleTypingReflow = (paraId: string) => {\n scheduleReflow(paraId, 700, (root) => {\n const baseline = typingLayoutBaseline;\n typingLayoutBaseline = null;\n if (!baseline || baseline.paraId !== paraId) return false;\n const current = measureNativeDocumentReflowFromParagraph(root, doc, paraId);\n return (\n current.overflowPx > Math.max(1, baseline.measurement.overflowPx + 1) ||\n (!baseline.measurement.canBackfillPrevious && current.canBackfillPrevious) ||\n (!baseline.measurement.canBackfillNext && current.canBackfillNext)\n );\n });\n };\n\n const observedTableSizes = new WeakMap<HTMLElement, number>();\n const tableResizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const table = entry.target;\n if (!(table instanceof HTMLElement)) continue;\n const height = Math.round(entry.contentRect.height);\n const previous = observedTableSizes.get(table);\n observedTableSizes.set(table, height);\n if (previous === undefined || Math.abs(previous - height) <= 1) continue;\n const paraId = table.querySelector<HTMLElement>('coco-word-native-p[data-para-id]')?.dataset.paraId;\n if (paraId) {\n const activeElement = document.activeElement;\n if (activeElement && table.contains(activeElement)) {\n const activeParaId = activeElement.closest<HTMLElement>('coco-word-native-p[data-para-id]')?.dataset.paraId;\n scheduleTypingReflow(activeParaId ?? paraId);\n } else {\n scheduleReflow(paraId);\n }\n }\n }\n });\n\n const observeNativeTableSizes = (root: HTMLElement) => {\n for (const table of Array.from(root.querySelectorAll<HTMLElement>('coco-word-native-table'))) {\n if (observedTableSizes.has(table)) continue;\n observedTableSizes.set(table, Math.round(table.getBoundingClientRect().height));\n tableResizeObserver.observe(table);\n }\n };\n\n const notifyChange = (mode: 'immediate' | 'deferred' = 'immediate') => {\n if (destroyed) return;\n const dispatchChange = () => {\n refreshActiveSearch();\n const event = createWordEditorChangeEvent(emittedChanges, changes, ++revision);\n emittedChanges = changes.slice();\n options.onChange?.(event);\n emit('change', event);\n };\n if (mode === 'immediate') {\n if (deferredChangeTimer !== null) {\n window.clearTimeout(deferredChangeTimer);\n deferredChangeTimer = null;\n }\n dispatchChange();\n return;\n }\n if (deferredChangeTimer !== null) window.clearTimeout(deferredChangeTimer);\n deferredChangeTimer = window.setTimeout(() => {\n deferredChangeTimer = null;\n dispatchChange();\n }, 180);\n };\n\n const notifySelectionChange = () => {\n if (destroyed) return;\n if (deferredSelectionTimer !== null) window.clearTimeout(deferredSelectionTimer);\n deferredSelectionTimer = window.setTimeout(() => {\n deferredSelectionTimer = null;\n const current = selection ?? currentNativeSelection(host) ?? nativeSelectionFromCursor(host);\n const event: WordEditorSelectionChangeEvent = {\n selection: current,\n commandState: getCommandState(current),\n };\n options.onSelectionChange?.(event);\n emit('selectionChange', event);\n }, 80);\n };\n\n const suppressBrowserHistoryInput = (inputType: 'historyUndo' | 'historyRedo') => {\n suppressedBrowserHistoryInput = inputType;\n if (browserHistorySuppressionTimer !== null) window.clearTimeout(browserHistorySuppressionTimer);\n browserHistorySuppressionTimer = window.setTimeout(() => {\n suppressedBrowserHistoryInput = null;\n browserHistorySuppressionTimer = null;\n }, 1_000);\n };\n\n const removeNativeImageDom = (paraId: string, drawingId: string, cursor?: NativeCursorPoint) => {\n const images = Array.from(\n host.querySelectorAll<HTMLImageElement>(\n `coco-word-native-p[data-para-id=\"${paraId}\"] img[data-drawing-id=\"${drawingId}\"]`,\n ),\n );\n for (const image of images) image.remove();\n clearNativeImageSelection(host);\n if (cursor) restoreNativeCursor(host, cursor);\n };\n\n const record = (\n change: NativeWordChange | NativeWordChange[] | null,\n cursor?: NativeCursorPoint,\n renderOptions: { localParaId?: string } = {},\n ) => {\n if (Array.isArray(change)) changes.push(...change);\n else if (change) changes.push(change);\n if (change) browserRedoStack.length = 0;\n if (renderOptions.localParaId) {\n renderParagraph(renderOptions.localParaId, cursor);\n scheduleReflow(renderOptions.localParaId);\n } else {\n render(cursor);\n }\n notifyChange();\n };\n\n const canBrowserEditParagraphText = (paraId: string): boolean => {\n const paragraph = findNativeParagraph(doc, paraId);\n return !!paragraph && paragraph.content.every((child) => child.kind === 'text');\n };\n\n const paragraphTextLength = (paraId: string): number => {\n const paragraph = findNativeParagraph(doc, paraId);\n return paragraph ? nativeParagraphText(paragraph).length : 0;\n };\n\n const adjacentRevisionId = (\n paraId: string,\n offset: number,\n revisionKind: 'insert' | 'delete',\n side: 'before' | 'at' | 'after',\n ): string | null => {\n const paragraph = findNativeParagraph(doc, paraId);\n if (!paragraph) return null;\n const target = side === 'before' ? offset - 1 : side === 'after' ? offset + 1 : offset;\n if (target < 0) return null;\n let position = 0;\n for (const child of paragraph.content) {\n const length = child.kind === 'text' ? child.text.length : 1;\n if (target >= position && target < position + length) {\n const mark = child.kind === 'text'\n ? child.marks?.find((item) => item.kind === 'revision' && item.revisionKind === revisionKind)\n : undefined;\n return mark && 'revisionId' in mark ? mark.revisionId ?? null : null;\n }\n position += length;\n }\n return null;\n };\n\n const markBrowserTextChangeAsRevision = (\n paraId: string,\n change: NativeWordChange | null,\n ): NativeWordChange | null => {\n if (!trackRevisions || !change || change.kind !== 'text') return null;\n if ((change.op !== 'insert' && change.op !== 'replace') || change.text.length === 0) return null;\n return nativeAddRevision(doc, paraId, change.offset, change.offset + change.text.length, {\n revisionId: adjacentRevisionId(paraId, change.offset, 'insert', 'before') ?? allocateNativeRevisionId(doc),\n revisionKind: 'insert',\n author: 'User',\n date: new Date().toISOString(),\n });\n };\n\n const editableRangeParagraphs = (\n range: PendingBrowserRangeDelete['range'],\n ): NativeWordParagraphNode[] | null => {\n const anchorLocation = findNativeParagraphLocation(doc, range.anchor.paraId);\n const focusLocation = findNativeParagraphLocation(doc, range.focus.paraId);\n if (!anchorLocation || !focusLocation || anchorLocation.container !== focusLocation.container) return null;\n const from = Math.min(anchorLocation.index, focusLocation.index);\n const to = Math.max(anchorLocation.index, focusLocation.index);\n const paragraphs: NativeWordParagraphNode[] = [];\n for (let index = from; index <= to; index += 1) {\n const block = anchorLocation.container[index];\n if (block?.kind !== 'paragraph' || block.content.some((child) => child.kind !== 'text')) return null;\n paragraphs.push(cloneNativeParagraph(block));\n }\n return paragraphs;\n };\n\n const canBrowserDeleteRangeAcrossParagraphs = (\n range: PendingBrowserRangeDelete['range'],\n ): NativeWordParagraphNode[] | null => {\n const paragraphs = editableRangeParagraphs(range);\n if (!paragraphs) return null;\n return paragraphs.length > 1 ? paragraphs : null;\n };\n\n const captureBrowserRangeDelete = (range: PendingBrowserRangeDelete['range']): boolean => {\n const beforeParagraphs = canBrowserDeleteRangeAcrossParagraphs(range);\n if (!beforeParagraphs) return false;\n pendingBrowserRangeDelete = {\n range,\n beforeParagraphs,\n changesStart: changes.length,\n };\n return true;\n };\n\n const beginTableBrowserTypingTransaction = (\n range: PendingBrowserRangeDelete['range'],\n ): void => {\n const paraId = range.anchor.paraId;\n if (range.focus.paraId !== paraId) return;\n const paragraphEl = host.querySelector<HTMLElement>(`coco-word-native-p[data-para-id=\"${paraId}\"]`);\n const paragraph = findNativeParagraph(doc, paraId);\n if (!paragraphEl?.closest('coco-word-native-table') || !paragraph) return;\n if (activeLocalTypingTransaction?.afterParagraphs[0]?.paraId === paraId) return;\n const beforeParagraph = cloneNativeParagraph(paragraph);\n const transaction: BrowserTextTransaction = {\n source: 'browser',\n patchMode: 'individual',\n skipDeferredRender: true,\n range,\n beforeParagraphs: [beforeParagraph],\n afterParagraphs: [beforeParagraph],\n changesStart: changes.length,\n changes: [],\n };\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = transaction;\n };\n\n const compositionStart = (event: CompositionEvent) => {\n compositionActive = true;\n if (compositionFinalizeTimer !== null) {\n window.clearTimeout(compositionFinalizeTimer);\n compositionFinalizeTimer = null;\n }\n if (pendingCompositionTransaction) finalizeComposition();\n if (deferredRenderTimer !== null) {\n window.clearTimeout(deferredRenderTimer);\n deferredRenderTimer = null;\n }\n if (deferredReflowTimer !== null) {\n window.clearTimeout(deferredReflowTimer);\n deferredReflowTimer = null;\n }\n if (deferredChangeTimer !== null) {\n window.clearTimeout(deferredChangeTimer);\n deferredChangeTimer = null;\n }\n if (deferredSelectionTimer !== null) {\n window.clearTimeout(deferredSelectionTimer);\n deferredSelectionTimer = null;\n }\n const currentSelection = currentNativeSelection(host);\n const targetParagraph = event.target instanceof Node ? parentNativeParagraph(event.target) : null;\n const targetParaId = targetParagraph?.dataset.paraId;\n const currentPoint = currentNativeCursor(host);\n const point = targetParaId\n ? {\n paraId: targetParaId,\n offset: currentPoint?.paraId === targetParaId\n ? currentPoint.offset\n : paragraphTextLength(targetParaId),\n }\n : currentPoint;\n const paragraph = point ? findNativeParagraph(doc, point.paraId) : null;\n if (!point || !paragraph || paragraph.content.some((child) => child.kind !== 'text')) return;\n captureTypingLayoutBaseline(point.paraId);\n activeLocalTypingTransaction = null;\n const range = currentSelection?.kind === 'text-range' &&\n currentSelection.anchor.paraId === point.paraId &&\n currentSelection.focus.paraId === point.paraId\n ? {\n anchor: { ...currentSelection.anchor },\n focus: { ...currentSelection.focus },\n }\n : { anchor: point, focus: point };\n pendingCompositionTransaction = {\n paraId: point.paraId,\n beforeParagraph: cloneNativeParagraph(paragraph),\n changesStart: changes.length,\n range,\n };\n };\n\n const finalizeComposition = () => {\n compositionFinalizeTimer = null;\n const pending = pendingCompositionTransaction;\n pendingCompositionTransaction = null;\n if (!pending) return;\n const paragraph = findNativeParagraph(doc, pending.paraId);\n if (!paragraph) return;\n const paragraphEl = host.querySelector<HTMLElement>(\n `coco-word-native-p[data-para-id=\"${pending.paraId}\"]`,\n );\n if (!paragraphEl) return;\n const change = nativeSyncParagraphText(doc, pending.paraId, paragraphEl.textContent ?? '');\n if (change) changes.push(change);\n const revision = markBrowserTextChangeAsRevision(pending.paraId, change);\n if (revision) changes.push(revision);\n const afterParagraph = cloneNativeParagraph(paragraph);\n if (JSON.stringify(afterParagraph) === JSON.stringify(pending.beforeParagraph)) {\n changes.splice(pending.changesStart);\n return;\n }\n const transaction: BrowserTextTransaction = {\n source: 'browser',\n patchMode: 'individual',\n skipDeferredRender: true,\n range: pending.range,\n beforeParagraphs: [pending.beforeParagraph],\n afterParagraphs: [afterParagraph],\n changesStart: pending.changesStart,\n changes: changes.slice(pending.changesStart),\n };\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n const cursor = currentNativeCursor(host);\n if (cursor) setSelection({ kind: 'caret', ...cursor });\n scheduleTypingReflow(pending.paraId);\n if (revision) renderParagraph(pending.paraId, cursor ?? undefined);\n notifyChange('deferred');\n };\n\n const compositionEnd = () => {\n compositionActive = false;\n if (compositionFinalizeTimer !== null) window.clearTimeout(compositionFinalizeTimer);\n compositionFinalizeTimer = window.setTimeout(finalizeComposition, 80);\n };\n\n const replaceTransactionParagraphs = (\n transaction: BrowserTextTransaction,\n paragraphs: NativeWordParagraphNode[],\n ): boolean => {\n const affectedIds = new Set(\n [...transaction.beforeParagraphs, ...transaction.afterParagraphs].map((paragraph) => paragraph.paraId),\n );\n const firstExistingId = [...transaction.beforeParagraphs, ...transaction.afterParagraphs].find((paragraph) =>\n findNativeParagraph(doc, paragraph.paraId),\n )?.paraId;\n if (!firstExistingId) return false;\n const location = findNativeParagraphLocation(doc, firstExistingId);\n if (!location) return false;\n if (transaction.patchMode === 'individual') {\n for (const paragraph of paragraphs) {\n const paragraphLocation = findNativeParagraphLocation(doc, paragraph.paraId);\n if (!paragraphLocation) return false;\n Object.assign(paragraphLocation.paragraph, cloneNativeParagraph(paragraph));\n }\n return true;\n }\n const existingIds = Array.from(affectedIds).filter((paraId) => findNativeParagraph(doc, paraId));\n if (existingIds.length === 0 || paragraphs.length === 0) return false;\n const firstTarget = cloneNativeParagraph(paragraphs[0]!);\n Object.assign(location.paragraph, firstTarget);\n for (const paraId of existingIds) {\n if (paraId === firstExistingId) continue;\n findNativeParagraphLocation(doc, paraId)?.remove();\n }\n let previousId = firstTarget.paraId;\n for (const paragraph of paragraphs.slice(1)) {\n const previous = findNativeParagraphLocation(doc, previousId);\n if (!previous) return false;\n const next = cloneNativeParagraph(paragraph);\n previous.insertAfter(next);\n previousId = next.paraId;\n }\n return true;\n };\n\n const syncBrowserRangeDelete = (): boolean => {\n if (!pendingBrowserRangeDelete) return false;\n const pending = pendingBrowserRangeDelete;\n pendingBrowserRangeDelete = null;\n const domTexts = pending.beforeParagraphs.map((paragraph) => domParagraphText(host, paragraph.paraId));\n const allParagraphsRemainInDom = domTexts.every((text) => text !== null);\n const transactionChanges: NativeWordChange[] = [];\n\n if (allParagraphsRemainInDom) {\n for (let index = 0; index < pending.beforeParagraphs.length; index += 1) {\n const paragraph = pending.beforeParagraphs[index]!;\n const change = nativeSyncParagraphText(doc, paragraph.paraId, domTexts[index] ?? '');\n if (change) transactionChanges.push(change);\n }\n } else {\n transactionChanges.push(...nativeDeleteTextRangeAcrossParagraphs(doc, pending.range.anchor, pending.range.focus));\n }\n\n if (transactionChanges.length === 0) return false;\n changes.push(...transactionChanges);\n const afterParagraphs = pending.beforeParagraphs\n .map((paragraph) => findNativeParagraph(doc, paragraph.paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null);\n if (afterParagraphs.length > 0) {\n const transaction: BrowserTextTransaction = {\n ...pending,\n source: 'browser',\n afterParagraphs: afterParagraphs.map(cloneNativeParagraph),\n changes: transactionChanges,\n };\n browserUndoStack.push(transaction);\n activeLocalTypingTransaction = null;\n browserRedoStack.length = 0;\n }\n const cursor = currentNativeCursor(host);\n if (cursor) setSelection({ kind: 'caret', paraId: cursor.paraId, offset: cursor.offset });\n reflowFromParagraph(pending.beforeParagraphs[0]!.paraId, cursor ?? undefined);\n notifyChange('deferred');\n return true;\n };\n\n const syncBrowserHistoryUndo = (): boolean => {\n const transaction = browserUndoStack[browserUndoStack.length - 1];\n if (!transaction || isBrowserBlockTransaction(transaction) || !domParagraphsMatch(host, transaction.beforeParagraphs)) {\n return false;\n }\n if (!replaceTransactionParagraphs(transaction, transaction.beforeParagraphs)) return false;\n browserUndoStack.pop();\n browserRedoStack.push(transaction);\n changes.splice(transaction.changesStart);\n const cursor = currentNativeCursor(host);\n if (cursor) setSelection({ kind: 'caret', paraId: cursor.paraId, offset: cursor.offset });\n reflowFromParagraph(transaction.beforeParagraphs[0]!.paraId, cursor ?? undefined);\n notifyChange('deferred');\n return true;\n };\n\n const syncBrowserHistoryRedo = (): boolean => {\n const transaction = browserRedoStack[browserRedoStack.length - 1];\n if (!transaction || isBrowserBlockTransaction(transaction) || !domParagraphsMatch(host, transaction.afterParagraphs)) {\n return false;\n }\n if (!replaceTransactionParagraphs(transaction, transaction.afterParagraphs)) return false;\n browserRedoStack.pop();\n browserUndoStack.push(transaction);\n changes.splice(transaction.changesStart);\n changes.push(...transaction.changes);\n const cursor = currentNativeCursor(host);\n if (cursor) setSelection({ kind: 'caret', paraId: cursor.paraId, offset: cursor.offset });\n reflowFromParagraph(transaction.beforeParagraphs[0]!.paraId, cursor ?? undefined);\n notifyChange('deferred');\n return true;\n };\n\n const patchTransactionDom = (\n transaction: BrowserTextTransaction,\n paragraphs: NativeWordParagraphNode[],\n cursor?: NativeCursorPoint,\n ): boolean => {\n if (transaction.patchMode === 'individual') {\n let patched = false;\n for (const paragraph of paragraphs) {\n const replacements = Array.from(\n host.querySelectorAll<HTMLElement>(`coco-word-native-p[data-para-id=\"${paragraph.paraId}\"]`),\n );\n for (const current of replacements) {\n current.replaceWith(renderNativeParagraph(paragraph));\n patched = true;\n }\n }\n if (cursor) restoreNativeCursor(host, cursor);\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document');\n if (root) refreshNativePageCommentBubbles(root);\n return patched;\n }\n const affectedIds = new Set(\n [...transaction.beforeParagraphs, ...transaction.afterParagraphs].map((paragraph) => paragraph.paraId),\n );\n const affectedEls = Array.from(affectedIds).flatMap((paraId) =>\n Array.from(host.querySelectorAll<HTMLElement>(`coco-word-native-p[data-para-id=\"${paraId}\"]`)),\n );\n const firstParaId = transaction.beforeParagraphs[0]?.paraId;\n const first = affectedEls.find((paragraph) => paragraph.dataset.paraId === firstParaId) ?? affectedEls[0];\n if (!first) return false;\n const rendered = paragraphs.map((paragraph) => renderNativeParagraph(paragraph));\n first.replaceWith(...rendered);\n for (const paragraph of affectedEls) {\n if (paragraph !== first && paragraph.isConnected) paragraph.remove();\n }\n if (cursor) restoreNativeCursor(host, cursor);\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document') ?? host.querySelector<HTMLElement>('coco-word-native-document');\n if (root) refreshNativePageCommentBubbles(root);\n return true;\n };\n\n const replaceBlockTransaction = (\n transaction: BrowserBlockTransaction,\n blocks: NativeWordBlockNode[],\n currentCount: number,\n ): boolean => {\n transaction.container.splice(transaction.startIndex, currentCount, ...cloneNativeWordBlocks(blocks));\n return true;\n };\n\n const patchBlockTransactionDom = (\n transaction: BrowserBlockTransaction,\n blocks: NativeWordBlockNode[],\n cursor?: NativeCursorPoint,\n preservedSelection?: Extract<WordEditorSelection, { kind: 'text-range' }>,\n ): boolean => {\n const affected = [...transaction.beforeBlocks, ...transaction.afterBlocks].flatMap((block) =>\n nativeBlockElements(host, block),\n );\n const firstParaId = transaction.afterBlocks[0]?.kind === 'paragraph'\n ? transaction.afterBlocks[0].paraId\n : transaction.beforeBlocks[0]?.kind === 'paragraph'\n ? transaction.beforeBlocks[0].paraId\n : null;\n const first = firstParaId\n ? host.querySelector<HTMLElement>(`coco-word-native-p[data-para-id=\"${firstParaId}\"]`)\n : affected[0];\n if (!first) return false;\n const rendered = blocks.map((block) => renderNativeBlock(block));\n first.replaceWith(...rendered);\n for (const element of affected) {\n if (element !== first && element.isConnected) element.remove();\n }\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document');\n if (root) observeNativeTableSizes(root);\n if (root) refreshNativePageCommentBubbles(root);\n if (preservedSelection) restoreNativeTextSelection(host, preservedSelection.anchor, preservedSelection.focus);\n else if (cursor) restoreNativeCursor(host, cursor);\n return true;\n };\n\n const selectionSpansPages = (range: PendingBrowserRangeDelete['range']): boolean => {\n const anchor = host.querySelector<HTMLElement>(`coco-word-native-p[data-para-id=\"${range.anchor.paraId}\"]`);\n const focus = host.querySelector<HTMLElement>(`coco-word-native-p[data-para-id=\"${range.focus.paraId}\"]`);\n return !!anchor && !!focus && anchor.closest('coco-word-native-page') !== focus.closest('coco-word-native-page');\n };\n\n const applyLocalRangeReplacement = (range: PendingBrowserRangeDelete['range'], text: string): boolean => {\n const beforeParagraphs = canBrowserDeleteRangeAcrossParagraphs(range);\n if (!beforeParagraphs) return false;\n const pending: PendingBrowserRangeDelete = {\n range,\n beforeParagraphs,\n changesStart: changes.length,\n };\n const transactionChanges = nativeReplaceTextRangeAcrossParagraphs(doc, range.anchor, range.focus, text);\n if (transactionChanges.length === 0) return false;\n const afterParagraphs = beforeParagraphs\n .map((paragraph) => findNativeParagraph(doc, paragraph.paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null)\n .map(cloneNativeParagraph);\n if (afterParagraphs.length === 0) return false;\n const transaction: BrowserTextTransaction = {\n ...pending,\n source: 'local',\n afterParagraphs,\n changes: transactionChanges,\n };\n const cursor = {\n paraId: range.anchor.paraId,\n offset: range.anchor.offset + text.length,\n };\n changes.push(...transactionChanges);\n browserUndoStack.push(transaction);\n activeLocalTypingTransaction = text.length > 0 ? transaction : null;\n browserRedoStack.length = 0;\n if (!patchTransactionDom(transaction, afterParagraphs, cursor)) render(cursor);\n else reflowFromParagraph(beforeParagraphs[0]!.paraId, cursor);\n setSelection({ kind: 'caret', ...cursor });\n notifyChange('deferred');\n return true;\n };\n\n const applyLocalBlockRangeReplacement = (\n range: PendingBrowserRangeDelete['range'],\n text: string,\n ): boolean => {\n const result = nativeReplaceBlockRangeAcrossParagraphs(doc, range.anchor, range.focus, text);\n if (!result) return false;\n const transaction: BrowserBlockTransaction = {\n source: 'local',\n range,\n container: result.container,\n startIndex: result.startIndex,\n beforeBlocks: result.beforeBlocks,\n afterBlocks: result.afterBlocks,\n changesStart: changes.length,\n changes: result.changes,\n };\n changes.push(...result.changes);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n selectedImage = null;\n if (!patchBlockTransactionDom(transaction, result.afterBlocks, result.cursor)) render(result.cursor);\n else {\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document');\n if (root) rebuildNativeTableFragmentsFromParagraph(root, doc, result.cursor.paraId);\n reflowFromParagraph(result.cursor.paraId, result.cursor);\n }\n setSelection({ kind: 'caret', ...result.cursor });\n notifyChange('deferred');\n return true;\n };\n\n const applyLocalClipboardBlocks = (\n range: PendingBrowserRangeDelete['range'],\n blocks: readonly NativeWordBlockNode[],\n ): boolean => {\n const result = nativeReplaceRangeWithBlocks(doc, range.anchor, range.focus, blocks);\n if (!result) return false;\n const transaction: BrowserBlockTransaction = {\n source: 'local',\n range,\n container: result.container,\n startIndex: result.startIndex,\n beforeBlocks: result.beforeBlocks,\n afterBlocks: result.afterBlocks,\n changesStart: changes.length,\n changes: result.changes,\n };\n changes.push(...result.changes);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n selectedImage = null;\n for (const paragraph of allNativeParagraphs(doc)) paragraphIds.add(paragraph.paraId);\n if (!patchBlockTransactionDom(transaction, result.afterBlocks, result.cursor)) render(result.cursor);\n else {\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document');\n if (root) rebuildNativeTableFragmentsFromParagraph(root, doc, result.cursor.paraId);\n reflowFromParagraph(result.cursor.paraId, result.cursor);\n }\n setSelection({ kind: 'caret', ...result.cursor });\n notifyChange('deferred');\n return true;\n };\n\n const applyLocalTableStructureEdit = (\n current: WordEditorSelection,\n command: Extract<\n WordEditorCommand,\n { kind: 'insert-table-row' | 'delete-table-row' | 'insert-table-column' | 'delete-table-column' }\n >,\n ): boolean => {\n const point = current.kind === 'table-cell-range'\n ? (() => {\n const table = findNativeTableLocation(doc, current.tableId)?.table;\n const cell = table ? nativeTableCellsInRange(table, current)[0]?.cell : null;\n const paraId = cell?.paragraphs[0]?.paraId;\n return paraId ? { paraId, offset: 0 } : null;\n })()\n : current.kind === 'text-range'\n ? current.anchor\n : { paraId: current.paraId, offset: current.offset };\n if (!point) return false;\n const location = findNativeTableCellLocation(doc, point.paraId);\n if (!location) return false;\n const beforeTable = cloneNativeWordBlocks([location.table])[0];\n if (!beforeTable || beforeTable.kind !== 'table') return false;\n const operation = command.kind === 'insert-table-row'\n ? { kind: 'insert-row' as const, position: command.position }\n : command.kind === 'delete-table-row'\n ? { kind: 'delete-row' as const }\n : command.kind === 'insert-table-column'\n ? { kind: 'insert-column' as const, position: command.position }\n : { kind: 'delete-column' as const };\n const result = nativeEditTableStructure(doc, point.paraId, operation, createRuntimeParaId);\n if (!result) return false;\n const afterTable = cloneNativeWordBlocks([location.table])[0];\n if (!afterTable || afterTable.kind !== 'table') return false;\n const revisionId = trackRevisions ? allocateNativeRevisionId(doc) : null;\n const revisionKind = command.kind === 'insert-table-row' || command.kind === 'insert-table-column' ? 'insert' : 'delete';\n if (revisionId) {\n location.table.revision = {\n kind: 'revision',\n id: `revision:${revisionId}`,\n revisionId,\n revisionKind,\n author: 'User',\n date: new Date().toISOString(),\n };\n afterTable.revision = { ...location.table.revision };\n if (result.change.kind === 'table') {\n result.change.revisionId = revisionId;\n result.change.revisionKind = revisionKind;\n result.change.beforeTable = beforeTable;\n }\n }\n const afterSelection: WordEditorSelection = { kind: 'caret', ...result.cursor };\n const transaction: BrowserBlockTransaction = {\n source: 'local',\n range: { anchor: point, focus: point },\n container: location.container,\n startIndex: location.tableIndex,\n beforeBlocks: [beforeTable],\n afterBlocks: [afterTable],\n changesStart: changes.length,\n changes: [result.change],\n beforeSelection: current,\n afterSelection,\n };\n changes.push(result.change);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n selectedImage = null;\n if (!patchBlockTransactionDom(transaction, transaction.afterBlocks, result.cursor)) render(result.cursor);\n else {\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document');\n if (root) rebuildNativeTableFragmentsFromParagraph(root, doc, result.cursor.paraId);\n reflowFromParagraph(result.cursor.paraId, result.cursor);\n }\n setSelection(afterSelection);\n notifyChange('deferred');\n return true;\n };\n\n const applyLocalTableCellStructureEdit = (\n current: Extract<WordEditorSelection, { kind: 'table-cell-range' }>,\n command: Extract<WordEditorCommand, { kind: 'merge-table-cells' | 'split-table-cell' }>,\n ): boolean => {\n const location = findNativeTableLocation(doc, current.tableId);\n if (!location) return false;\n const beforeTable = cloneNativeWordBlocks([location.table])[0];\n if (!beforeTable || beforeTable.kind !== 'table') return false;\n const selected = nativeTableCellsInRange(location.table, current);\n const first = selected[0];\n const result = command.kind === 'merge-table-cells'\n ? nativeMergeTableCells(doc, current.tableId, current,)\n : first\n ? nativeSplitTableCell(doc, current.tableId, first.rowIndex, first.columnIndex, createRuntimeParaId)\n : null;\n if (!result) return false;\n const afterTable = cloneNativeWordBlocks([location.table])[0];\n if (!afterTable || afterTable.kind !== 'table') return false;\n const revisionId = trackRevisions ? allocateNativeRevisionId(doc) : null;\n const revisionKind = command.kind === 'merge-table-cells' ? 'insert' : 'delete';\n if (revisionId) {\n location.table.revision = {\n kind: 'revision',\n id: `revision:${revisionId}`,\n revisionId,\n revisionKind,\n author: 'User',\n date: new Date().toISOString(),\n };\n afterTable.revision = { ...location.table.revision };\n if (result.change.kind === 'table') {\n result.change.revisionId = revisionId;\n result.change.revisionKind = revisionKind;\n result.change.beforeTable = beforeTable;\n }\n }\n const transaction: BrowserBlockTransaction = {\n source: 'local',\n range: {\n anchor: { paraId: result.cursor.paraId, offset: result.cursor.offset },\n focus: { paraId: result.cursor.paraId, offset: result.cursor.offset },\n },\n container: location.container,\n startIndex: location.tableIndex,\n beforeBlocks: [beforeTable],\n afterBlocks: [afterTable],\n changesStart: changes.length,\n changes: [result.change],\n beforeSelection: current,\n afterSelection: { kind: 'caret', ...result.cursor },\n };\n changes.push(result.change);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n selectedImage = null;\n if (!patchBlockTransactionDom(transaction, transaction.afterBlocks, result.cursor)) render(result.cursor);\n else {\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document');\n if (root) rebuildNativeTableFragmentsFromParagraph(root, doc, result.cursor.paraId);\n reflowFromParagraph(result.cursor.paraId, result.cursor);\n }\n setSelection({ kind: 'caret', ...result.cursor });\n notifyChange('deferred');\n return true;\n };\n\n const applyLocalTableLifecycleEdit = (\n current: WordEditorSelection,\n command: Extract<WordEditorCommand, { kind: 'insert-table' | 'delete-table' }>,\n ): boolean => {\n const transactionPoint = current.kind === 'text-range'\n ? current.anchor\n : current.kind === 'table-cell-range'\n ? (() => {\n const table = findNativeTableLocation(doc, current.tableId)?.table;\n const paragraph = table ? nativeTableCellsInRange(table, current)[0]?.cell.paragraphs[0] : null;\n return paragraph ? { paraId: paragraph.paraId, offset: 0 } : null;\n })()\n : { paraId: current.paraId, offset: current.offset };\n if (!transactionPoint) return false;\n const result = command.kind === 'insert-table'\n ? current.kind === 'caret'\n ? nativeInsertTable(\n doc,\n current.paraId,\n current.offset,\n command.rows,\n command.columns,\n createRuntimeParaId,\n )\n : null\n : (() => {\n const tableId = getCommandState(current).table?.tableId;\n return tableId ? nativeDeleteTable(doc, tableId, createRuntimeParaId) : null;\n })();\n if (!result) return false;\n const revisionId = trackRevisions ? allocateNativeRevisionId(doc) : null;\n const revisionKind = command.kind === 'insert-table' ? 'insert' : 'delete';\n if (revisionId) {\n const table = result.afterBlocks.find((block) => block.kind === 'table');\n if (table?.kind === 'table') {\n table.revision = {\n kind: 'revision',\n id: `revision:${revisionId}`,\n revisionId,\n revisionKind,\n author: 'User',\n date: new Date().toISOString(),\n };\n result.changes.forEach((change) => {\n if (change.kind === 'table') {\n change.revisionId = revisionId;\n change.revisionKind = revisionKind;\n const beforeTable = result.beforeBlocks.find((block) => block.kind === 'table');\n if (beforeTable?.kind === 'table') change.beforeTable = beforeTable;\n if (change.op === 'insert-table') {\n change.anchorParaId = transactionPoint.paraId;\n change.anchorOffset = transactionPoint.offset;\n const insertedTable = result.afterBlocks.find((block) => block.kind === 'table');\n if (insertedTable?.kind === 'table') change.tableSnapshot = insertedTable;\n }\n }\n });\n }\n }\n for (const change of result.changes) {\n if (change.kind !== 'table' || change.op !== 'insert-table') continue;\n change.anchorParaId = transactionPoint.paraId;\n change.anchorOffset = transactionPoint.offset;\n const insertedTable = result.afterBlocks.find((block) => block.kind === 'table');\n if (insertedTable?.kind === 'table') change.tableSnapshot = insertedTable;\n }\n const afterSelection: WordEditorSelection = { kind: 'caret', ...result.cursor };\n const transaction: BrowserBlockTransaction = {\n source: 'local',\n range: {\n anchor: transactionPoint,\n focus: current.kind === 'text-range' ? current.focus : transactionPoint,\n },\n container: result.container,\n startIndex: result.startIndex,\n beforeBlocks: result.beforeBlocks,\n afterBlocks: result.afterBlocks,\n changesStart: changes.length,\n changes: result.changes,\n beforeSelection: current,\n afterSelection,\n };\n changes.push(...result.changes);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n selectedImage = null;\n for (const paragraph of allNativeParagraphs(doc)) paragraphIds.add(paragraph.paraId);\n if (!patchBlockTransactionDom(transaction, transaction.afterBlocks, result.cursor)) render(result.cursor);\n else {\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document');\n if (root) rebuildNativeTableFragmentsFromParagraph(root, doc, result.cursor.paraId);\n reflowFromParagraph(result.cursor.paraId, result.cursor);\n }\n setSelection(afterSelection);\n notifyChange('deferred');\n return true;\n };\n\n const applyLocalTableCellFormat = (\n current: WordEditorSelection,\n command: Extract<\n WordEditorCommand,\n { kind: 'set-table-cell-background' | 'set-table-cell-vertical-alignment' | 'set-table-cell-borders' }\n >,\n ): boolean => {\n const rangeLocation = current.kind === 'table-cell-range' ? findNativeTableLocation(doc, current.tableId) : null;\n const rangeCell = current.kind === 'table-cell-range' && rangeLocation\n ? nativeTableCellsInRange(rangeLocation.table, current)[0]?.cell\n : null;\n const point = current.kind === 'table-cell-range'\n ? (rangeCell?.paragraphs[0]?.paraId ? { paraId: rangeCell.paragraphs[0].paraId, offset: 0 } : null)\n : current.kind === 'text-range'\n ? current.anchor\n : { paraId: current.paraId, offset: current.offset };\n if (!point) return false;\n const location = rangeLocation ?? findNativeTableCellLocation(doc, point.paraId);\n if (!location) return false;\n const beforeTable = cloneNativeWordBlocks([location.table])[0];\n if (!beforeTable || beforeTable.kind !== 'table') return false;\n const patch = command.kind === 'set-table-cell-background'\n ? { backgroundColor: command.color }\n : command.kind === 'set-table-cell-vertical-alignment'\n ? { verticalAlignment: command.alignment }\n : { borderColor: command.color };\n const result = current.kind === 'table-cell-range'\n ? nativeSetTableCellRangeFormat(doc, current.tableId, current, patch)\n : nativeSetTableCellFormat(doc, point.paraId, patch);\n if (!result) return false;\n const afterTable = cloneNativeWordBlocks([location.table])[0];\n if (!afterTable || afterTable.kind !== 'table') return false;\n const transaction: BrowserBlockTransaction = {\n source: 'local',\n range: { anchor: point, focus: point },\n container: location.container,\n startIndex: location.tableIndex,\n beforeBlocks: [beforeTable],\n afterBlocks: [afterTable],\n changesStart: changes.length,\n changes: 'changes' in result ? result.changes : [result.change],\n beforeSelection: current,\n afterSelection: current,\n };\n changes.push(...transaction.changes);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n const cursor = current.kind === 'caret' ? current : undefined;\n const textSelection = current.kind === 'text-range' ? current : undefined;\n if (!patchBlockTransactionDom(transaction, transaction.afterBlocks, cursor, textSelection)) render(cursor, current);\n else {\n restorePreservedSelection(current);\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document');\n if (root) rebuildNativeTableFragmentsFromParagraph(root, doc, point.paraId);\n reflowFromParagraph(point.paraId, cursor, textSelection);\n restorePreservedSelection(current);\n }\n setSelection(current);\n notifyChange('deferred');\n return true;\n };\n\n const applyLocalTableCellClear = (current: Extract<WordEditorSelection, { kind: 'table-cell-range' }>): boolean => {\n const location = findNativeTableLocation(doc, current.tableId);\n if (!location) return false;\n const beforeTable = cloneNativeWordBlocks([location.table])[0];\n if (!beforeTable || beforeTable.kind !== 'table') return false;\n const result = nativeClearTableCellRange(doc, current.tableId, current);\n if (!result) return false;\n const afterTable = cloneNativeWordBlocks([location.table])[0];\n if (!afterTable || afterTable.kind !== 'table') return false;\n const transaction: BrowserBlockTransaction = {\n source: 'local',\n range: { anchor: result.cursor, focus: result.cursor },\n container: location.container,\n startIndex: location.tableIndex,\n beforeBlocks: [beforeTable],\n afterBlocks: [afterTable],\n changesStart: changes.length,\n changes: result.changes,\n beforeSelection: current,\n afterSelection: current,\n };\n changes.push(...result.changes);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n if (!patchBlockTransactionDom(transaction, transaction.afterBlocks)) render(undefined, current);\n else {\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document');\n if (root) rebuildNativeTableFragmentsFromParagraph(root, doc, result.cursor.paraId);\n reflowFromParagraph(result.cursor.paraId);\n }\n setSelection(current);\n notifyChange('deferred');\n return true;\n };\n\n const applyLocalTableCellPaste = (\n current: Extract<WordEditorSelection, { kind: 'table-cell-range' }>,\n input: {\n text?: readonly (readonly string[])[];\n content?: readonly (readonly (NativeTableClipboardCell | null)[])[];\n },\n ): boolean => {\n const location = findNativeTableLocation(doc, current.tableId);\n if (!location) return false;\n const beforeTable = cloneNativeWordBlocks([location.table])[0];\n if (!beforeTable || beforeTable.kind !== 'table') return false;\n const anchor = {\n rowIndex: Math.min(current.anchor.rowIndex, current.focus.rowIndex),\n columnIndex: Math.min(current.anchor.columnIndex, current.focus.columnIndex),\n };\n const values = input.content ?? input.text ?? [];\n const result = input.content\n ? nativeReplaceTableCellRangeContent(doc, current.tableId, anchor, input.content)\n : nativeReplaceTableCellRangeText(doc, current.tableId, anchor, input.text ?? []);\n if (!result) return false;\n const afterTable = cloneNativeWordBlocks([location.table])[0];\n if (!afterTable || afterTable.kind !== 'table') return false;\n const rowCount = values.length;\n const columnCount = Math.max(1, ...values.map((row) => row.length));\n const afterSelection: WordEditorSelection = {\n kind: 'table-cell-range',\n tableId: current.tableId,\n anchor,\n focus: {\n rowIndex: Math.min(location.table.rows.length - 1, anchor.rowIndex + rowCount - 1),\n columnIndex: anchor.columnIndex + columnCount - 1,\n },\n };\n const transaction: BrowserBlockTransaction = {\n source: 'local',\n range: { anchor: result.cursor, focus: result.cursor },\n container: location.container,\n startIndex: location.tableIndex,\n beforeBlocks: [beforeTable],\n afterBlocks: [afterTable],\n changesStart: changes.length,\n changes: result.changes,\n beforeSelection: current,\n afterSelection,\n };\n changes.push(...result.changes);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n if (!patchBlockTransactionDom(transaction, transaction.afterBlocks)) render(undefined, afterSelection);\n else {\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document');\n if (root) rebuildNativeTableFragmentsFromParagraph(root, doc, result.cursor.paraId);\n reflowFromParagraph(result.cursor.paraId);\n }\n setSelection(afterSelection);\n notifyChange('deferred');\n return true;\n };\n\n const restorePreservedSelection = (preserved: WordEditorSelection | null) => {\n if (!preserved) return;\n if (preserved.kind === 'text-range') {\n restoreNativeTextSelection(host, preserved.anchor, preserved.focus);\n return;\n }\n if (preserved.kind === 'object') {\n selectedImage = { paraId: preserved.paraId, drawingId: preserved.objectId };\n showImageResizeHandle();\n return;\n }\n if (preserved.kind === 'table-cell-range') {\n renderTableCellRangeSelection(preserved);\n return;\n }\n restoreNativeCursor(host, preserved);\n };\n\n const applyBrowserUndoFallback = (): boolean => {\n const transaction = browserUndoStack[browserUndoStack.length - 1];\n if (!transaction) return false;\n if (isBrowserBlockTransaction(transaction)) {\n const preservedSelection: WordEditorSelection = transaction.beforeSelection ?? {\n kind: 'text-range',\n anchor: transaction.range.anchor,\n focus: transaction.range.focus,\n };\n const cursor = preservedSelection.kind === 'caret' ? preservedSelection : undefined;\n const textSelection = preservedSelection.kind === 'text-range' ? preservedSelection : undefined;\n if (!replaceBlockTransaction(transaction, transaction.beforeBlocks, transaction.afterBlocks.length)) return false;\n if (!patchBlockTransactionDom(transaction, transaction.beforeBlocks, cursor, textSelection)) {\n render(cursor, preservedSelection);\n }\n restorePreservedSelection(preservedSelection);\n browserUndoStack.pop();\n browserRedoStack.push(transaction);\n activeLocalTypingTransaction = null;\n changes.splice(transaction.changesStart);\n setSelection(preservedSelection);\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document');\n if (root) rebuildNativeTableFragmentsFromParagraph(root, doc, transaction.range.anchor.paraId);\n const paraId = preservedSelection.kind === 'text-range'\n ? preservedSelection.anchor.paraId\n : preservedSelection.kind === 'table-cell-range'\n ? transaction.range.anchor.paraId\n : preservedSelection.paraId;\n reflowFromParagraph(paraId, cursor, textSelection);\n notifyChange('deferred');\n return true;\n }\n if (\n transaction.source === 'browser' &&\n !transaction.skipDeferredRender &&\n !domParagraphsMatch(host, transaction.afterParagraphs)\n ) return false;\n const cursor = { paraId: transaction.beforeParagraphs[0]!.paraId, offset: transaction.range.anchor.offset };\n if (!replaceTransactionParagraphs(transaction, transaction.beforeParagraphs)) return false;\n const preservedSelection = formatTransactionSelection(transaction, 'before');\n if (transaction.forceFullRender) {\n browserUndoStack.pop();\n browserRedoStack.push(transaction);\n activeLocalTypingTransaction = null;\n changes.splice(transaction.changesStart);\n const restored = preservedSelection ?? { kind: 'caret' as const, ...cursor };\n setSelection(restored);\n render(restored.kind === 'caret' ? restored : undefined, restored);\n restorePreservedSelection(restored);\n notifyChange('deferred');\n return true;\n }\n if (!patchTransactionDom(transaction, transaction.beforeParagraphs, preservedSelection ? undefined : cursor)) return false;\n restorePreservedSelection(preservedSelection);\n browserUndoStack.pop();\n browserRedoStack.push(transaction);\n activeLocalTypingTransaction = null;\n changes.splice(transaction.changesStart);\n setSelection(preservedSelection ?? { kind: 'caret', ...cursor });\n if (transactionRequiresReflow(transaction) || transaction.skipDeferredRender) {\n const paraId = transaction.beforeParagraphs[0]!.paraId;\n if (transaction.deferLayoutReflow) scheduleImageLayoutReflow(paraId);\n else {\n reflowFromParagraph(\n paraId,\n preservedSelection ? undefined : cursor,\n preservedSelection?.kind === 'text-range' ? preservedSelection : undefined,\n );\n }\n restorePreservedSelection(preservedSelection);\n if (!transaction.deferLayoutReflow) scheduleReflow(paraId);\n }\n notifyChange('deferred');\n return true;\n };\n\n const applyBrowserRedoFallback = (): boolean => {\n const transaction = browserRedoStack[browserRedoStack.length - 1];\n if (!transaction) return false;\n if (isBrowserBlockTransaction(transaction)) {\n const preservedSelection: WordEditorSelection = transaction.afterSelection ?? {\n kind: 'caret',\n paraId: transaction.afterBlocks[0]!.kind === 'paragraph'\n ? transaction.afterBlocks[0]!.paraId\n : transaction.range.anchor.paraId,\n offset: transaction.range.anchor.offset,\n };\n const cursor = preservedSelection.kind === 'caret' ? preservedSelection : undefined;\n const textSelection = preservedSelection.kind === 'text-range' ? preservedSelection : undefined;\n if (!replaceBlockTransaction(transaction, transaction.afterBlocks, transaction.beforeBlocks.length)) return false;\n if (!patchBlockTransactionDom(transaction, transaction.afterBlocks, cursor, textSelection)) {\n render(cursor, preservedSelection);\n }\n restorePreservedSelection(preservedSelection);\n browserRedoStack.pop();\n browserUndoStack.push(transaction);\n activeLocalTypingTransaction = null;\n changes.splice(transaction.changesStart);\n changes.push(...transaction.changes);\n setSelection(preservedSelection);\n const paraId = preservedSelection.kind === 'text-range'\n ? preservedSelection.anchor.paraId\n : preservedSelection.kind === 'table-cell-range'\n ? transaction.range.anchor.paraId\n : preservedSelection.paraId;\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document');\n if (root) rebuildNativeTableFragmentsFromParagraph(root, doc, paraId);\n reflowFromParagraph(paraId, cursor, textSelection);\n notifyChange('deferred');\n return true;\n }\n if (\n transaction.source === 'browser' &&\n !transaction.skipDeferredRender &&\n !domParagraphsMatch(host, transaction.beforeParagraphs)\n ) return false;\n const cursor = { paraId: transaction.afterParagraphs[0]!.paraId, offset: transaction.range.anchor.offset };\n if (!replaceTransactionParagraphs(transaction, transaction.afterParagraphs)) return false;\n const preservedSelection = formatTransactionSelection(transaction, 'after');\n if (transaction.forceFullRender) {\n browserRedoStack.pop();\n browserUndoStack.push(transaction);\n activeLocalTypingTransaction = null;\n changes.splice(transaction.changesStart);\n changes.push(...transaction.changes);\n const restored = preservedSelection ?? { kind: 'caret' as const, ...cursor };\n setSelection(restored);\n render(restored.kind === 'caret' ? restored : undefined, restored);\n restorePreservedSelection(restored);\n notifyChange('deferred');\n return true;\n }\n if (!patchTransactionDom(transaction, transaction.afterParagraphs, preservedSelection ? undefined : cursor)) return false;\n restorePreservedSelection(preservedSelection);\n browserRedoStack.pop();\n browserUndoStack.push(transaction);\n activeLocalTypingTransaction = null;\n changes.splice(transaction.changesStart);\n changes.push(...transaction.changes);\n setSelection(preservedSelection ?? { kind: 'caret', ...cursor });\n if (transactionRequiresReflow(transaction) || transaction.skipDeferredRender) {\n const paraId = transaction.beforeParagraphs[0]!.paraId;\n if (transaction.deferLayoutReflow) scheduleImageLayoutReflow(paraId);\n else {\n reflowFromParagraph(\n paraId,\n preservedSelection ? undefined : cursor,\n preservedSelection?.kind === 'text-range' ? preservedSelection : undefined,\n );\n }\n restorePreservedSelection(preservedSelection);\n if (!transaction.deferLayoutReflow) scheduleReflow(paraId);\n }\n notifyChange('deferred');\n return true;\n };\n\n const undo = (): boolean => {\n if (destroyed || browserUndoStack.length === 0) return false;\n activate();\n return applyBrowserUndoFallback();\n };\n\n const redo = (): boolean => {\n if (destroyed || browserRedoStack.length === 0) return false;\n activate();\n return applyBrowserRedoFallback();\n };\n\n const setSelection = (next: WordEditorSelection | null) => {\n if (next) activate();\n if (next?.kind !== 'object') removeImageResizeHandle();\n renderTableCellRangeSelection(next);\n if (sameSelection(selection, next)) {\n renderPreservedSelectionHighlight();\n return;\n }\n selection = next;\n renderPreservedSelectionHighlight();\n notifySelectionChange();\n };\n\n const recordImageDeletion = (\n beforeParagraph: NativeWordParagraphNode | null,\n change: NativeWordChange | null,\n cursor: NativeCursorPoint,\n ): boolean => {\n if (!beforeParagraph || change?.kind !== 'image') return false;\n const afterParagraph = findNativeParagraph(doc, change.paraId);\n if (!afterParagraph) return false;\n const transaction: BrowserTextTransaction = {\n source: 'local',\n patchMode: 'individual',\n deferLayoutReflow: true,\n range: { anchor: cursor, focus: cursor },\n beforeParagraphs: [beforeParagraph],\n afterParagraphs: [cloneNativeParagraph(afterParagraph)],\n changesStart: changes.length,\n changes: [change],\n beforeSelection: {\n kind: 'object',\n paraId: change.paraId,\n objectKind: 'image',\n objectId: change.drawingId,\n offset: change.offset,\n },\n afterSelection: { kind: 'caret', ...cursor },\n };\n changes.push(change);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n removeNativeImageDom(change.paraId, change.drawingId, cursor);\n scheduleImageLayoutReflow(change.paraId);\n selectedImage = null;\n setSelection({ kind: 'caret', ...cursor });\n notifyChange('deferred');\n return true;\n };\n\n const deleteImageWithHistory = (paraId: string, drawingId: string, cursor: NativeCursorPoint): boolean => {\n const paragraph = findNativeParagraph(doc, paraId);\n const image = paragraph?.content.find(\n (child) => child.kind === 'image' && child.drawingId === drawingId,\n );\n if (trackRevisions && paragraph && image?.kind === 'image') {\n const beforeParagraph = cloneNativeParagraph(paragraph);\n const revisionId = allocateNativeRevisionId(doc);\n image.revision = {\n kind: 'revision',\n id: `revision:${revisionId}`,\n revisionId,\n revisionKind: 'delete',\n author: 'User',\n date: new Date().toISOString(),\n };\n return recordFormatting(\n {\n kind: 'object',\n paraId,\n objectKind: 'image',\n objectId: drawingId,\n offset: cursor.offset,\n },\n [beforeParagraph],\n [{ kind: 'image', op: 'delete', paraId, offset: cursor.offset, drawingId, revisionId, revisionKind: 'delete' }],\n true,\n );\n }\n const beforeParagraph = paragraph ? cloneNativeParagraph(paragraph) : null;\n return recordImageDeletion(beforeParagraph, nativeDeleteImage(doc, paraId, drawingId), cursor);\n };\n\n const applyLocalPageBreakEdit = (\n point: NativeCursorPoint,\n operation: 'insert' | 'delete-backward' | 'delete-forward',\n selectionBefore: WordEditorSelection = { kind: 'caret', ...point },\n selectionAfter?: WordEditorSelection,\n ): boolean => {\n const paragraph = findNativeParagraph(doc, point.paraId);\n if (!paragraph) return false;\n const targetOffset = operation === 'delete-backward' ? point.offset - 1 : point.offset;\n if (operation !== 'insert' && !nativePageBreakAt(doc, point.paraId, targetOffset)) return false;\n const beforeParagraph = cloneNativeParagraph(paragraph);\n const change = operation === 'insert'\n ? nativeInsertPageBreak(doc, point.paraId, point.offset)\n : operation === 'delete-backward'\n ? nativeDeleteBackward(doc, point.paraId, point.offset)\n : nativeDeleteForward(doc, point.paraId, point.offset);\n const afterParagraph = findNativeParagraph(doc, point.paraId);\n if (!change || change.kind !== 'page-break' || !afterParagraph) return false;\n const mutationCursor = {\n paraId: point.paraId,\n offset: operation === 'insert'\n ? point.offset + 1\n : operation === 'delete-backward'\n ? Math.max(0, point.offset - 1)\n : point.offset,\n };\n const afterSelection = selectionAfter ?? { kind: 'caret' as const, ...mutationCursor };\n const cursor = afterSelection.kind === 'caret' ? afterSelection : mutationCursor;\n const transaction: BrowserTextTransaction = {\n source: 'local',\n patchMode: 'individual',\n forceFullRender: true,\n range: { anchor: point, focus: point },\n beforeParagraphs: [beforeParagraph],\n afterParagraphs: [cloneNativeParagraph(afterParagraph)],\n changesStart: changes.length,\n changes: [change],\n beforeSelection: selectionBefore,\n afterSelection,\n };\n changes.push(change);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n selectedImage = null;\n render(cursor, afterSelection);\n setSelection(afterSelection);\n notifyChange('deferred');\n return true;\n };\n\n const applyLocalPageBreakRangeDelete = (\n current: Extract<WordEditorSelection, { kind: 'text-range' }>,\n ): boolean => {\n if (current.anchor.paraId !== current.focus.paraId) return false;\n const range = normalizedSelectionRange(current.anchor.offset, current.focus.offset);\n if (!nativeRangeContainsPageBreak(doc, current.anchor.paraId, range.from, range.to)) return false;\n const paragraph = findNativeParagraph(doc, current.anchor.paraId);\n if (!paragraph) return false;\n const beforeParagraph = cloneNativeParagraph(paragraph);\n const rangeChanges = nativeDeleteRange(doc, current.anchor.paraId, range.from, range.to);\n const afterParagraph = findNativeParagraph(doc, current.anchor.paraId);\n if (!afterParagraph || !rangeChanges.some((change) => change.kind === 'page-break')) return false;\n const afterSelection: WordEditorSelection = {\n kind: 'caret',\n paraId: current.anchor.paraId,\n offset: range.from,\n };\n const transaction: BrowserTextTransaction = {\n source: 'local',\n patchMode: 'individual',\n forceFullRender: true,\n range: { anchor: current.anchor, focus: current.focus },\n beforeParagraphs: [beforeParagraph],\n afterParagraphs: [cloneNativeParagraph(afterParagraph)],\n changesStart: changes.length,\n changes: rangeChanges,\n beforeSelection: current,\n afterSelection,\n };\n changes.push(...rangeChanges);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n render(afterSelection, afterSelection);\n setSelection(afterSelection);\n notifyChange('deferred');\n return true;\n };\n\n const deletePageBreakAcrossParagraphBoundary = (\n current: Extract<WordEditorSelection, { kind: 'caret' }>,\n direction: 'backward' | 'forward',\n ): boolean => {\n const location = findNativeParagraphLocation(doc, current.paraId);\n if (!location) return false;\n if (direction === 'backward' && current.offset === 0 && location.previous) {\n const previousLength = nativeParagraphText(location.previous).length;\n if (!nativePageBreakAt(doc, location.previous.paraId, previousLength - 1)) return false;\n return applyLocalPageBreakEdit(\n { paraId: location.previous.paraId, offset: previousLength },\n 'delete-backward',\n current,\n current,\n );\n }\n const nextBlock = location.container[location.index + 1];\n const nextParagraph = nextBlock?.kind === 'paragraph' ? nextBlock : null;\n if (direction === 'forward' && current.offset === nativeParagraphText(location.paragraph).length && nextParagraph) {\n if (!nativePageBreakAt(doc, nextParagraph.paraId, 0)) return false;\n return applyLocalPageBreakEdit(\n { paraId: nextParagraph.paraId, offset: 0 },\n 'delete-forward',\n current,\n current,\n );\n }\n return false;\n };\n\n const applyLocalParagraphTextEdit = (\n range: PendingBrowserRangeDelete['range'],\n beforeSelection: WordEditorSelection,\n afterCursor: NativeCursorPoint,\n mutate: () => NativeWordChange | NativeWordChange[] | null,\n ): boolean => {\n if (range.anchor.paraId !== range.focus.paraId) return false;\n const paragraph = findNativeParagraph(doc, range.anchor.paraId);\n if (!paragraph) return false;\n const beforeParagraph = cloneNativeParagraph(paragraph);\n const result = mutate();\n const editChanges = Array.isArray(result) ? result : result ? [result] : [];\n const afterParagraph = findNativeParagraph(doc, range.anchor.paraId);\n if (editChanges.length === 0 || !afterParagraph) return false;\n const afterSelection: WordEditorSelection = { kind: 'caret', ...afterCursor };\n const transaction: BrowserTextTransaction = {\n source: 'local',\n patchMode: 'individual',\n range,\n beforeParagraphs: [beforeParagraph],\n afterParagraphs: [cloneNativeParagraph(afterParagraph)],\n changesStart: changes.length,\n changes: editChanges,\n beforeSelection,\n afterSelection,\n };\n changes.push(...editChanges);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n if (!patchTransactionDom(transaction, transaction.afterParagraphs, afterCursor)) render(afterCursor);\n else reflowFromParagraph(range.anchor.paraId, afterCursor);\n setSelection(afterSelection);\n notifyChange('deferred');\n return true;\n };\n\n const selectedTextRanges = (\n current: WordEditorSelection | null,\n ): Array<{ paraId: string; from: number; to: number }> => {\n if (current?.kind !== 'text-range') return [];\n const ordered = orderedSelectionRange(doc, current);\n if (ordered.anchor.paraId === ordered.focus.paraId) {\n return [{ paraId: ordered.anchor.paraId, from: ordered.anchor.offset, to: ordered.focus.offset }];\n }\n const start = findNativeParagraphLocation(doc, ordered.anchor.paraId);\n const end = findNativeParagraphLocation(doc, ordered.focus.paraId);\n if (!start || !end || start.container !== end.container) return [];\n const ranges: Array<{ paraId: string; from: number; to: number }> = [];\n for (let index = start.index; index <= end.index; index += 1) {\n const block = start.container[index];\n if (block?.kind !== 'paragraph') return [];\n ranges.push({\n paraId: block.paraId,\n from: index === start.index ? ordered.anchor.offset : 0,\n to: index === end.index ? ordered.focus.offset : nativeParagraphText(block).length,\n });\n }\n return ranges;\n };\n\n const selectedParagraphIds = (current: WordEditorSelection | null): string[] => {\n if (!current) return [];\n if (current.kind === 'caret' || current.kind === 'object') return [current.paraId];\n return selectedTextRanges(current).map((range) => range.paraId);\n };\n\n const clipboardTextForSelection = (current: WordEditorSelection | null): string | null => {\n if (current?.kind !== 'text-range') return null;\n const ranges = selectedTextRanges(current);\n if (ranges.length === 0) return null;\n return ranges\n .map((range) => nativeParagraphText(findNativeParagraph(doc, range.paraId)!).slice(range.from, range.to))\n .join('\\n');\n };\n\n const clipboardParagraphsForSelection = (current: WordEditorSelection | null): NativeClipboardParagraph[] => {\n return selectedTextRanges(current).map((range) => {\n const paragraph = findNativeParagraph(doc, range.paraId)!;\n const text = nativeParagraphText(paragraph).slice(range.from, range.to);\n const runs: NativeClipboardParagraph['runs'] = [];\n let offset = 0;\n for (const child of paragraph.content) {\n const childText = nativeClipboardInlineText(child);\n const childEnd = offset + childText.length;\n const from = Math.max(range.from, offset);\n const to = Math.min(range.to, childEnd);\n const format = child.kind === 'text' || child.kind === 'field' ? child.format : null;\n const hyperlink = child.kind === 'text' ? child.hyperlink : undefined;\n if ((format || hyperlink) && to > from) {\n runs.push({\n from: from - range.from,\n to: to - range.from,\n format: { ...(format ?? {}) },\n ...(hyperlink ? { hyperlink: { ...hyperlink } } : {}),\n });\n }\n offset = childEnd;\n }\n const listType =\n paragraph.format?.hasNumbering && paragraph.format.numbering\n ? nativeListType(paragraph.format.numbering)\n : null;\n return {\n text,\n runs,\n ...(listType ? { listType } : {}),\n };\n });\n };\n\n const applyLocalPlainTextReplacement = (\n range: PendingBrowserRangeDelete['range'],\n text: string,\n richParagraphs?: NativeClipboardParagraph[],\n ): boolean => {\n if (trackRevisions && !richParagraphs && range.anchor.paraId === range.focus.paraId) {\n return dispatch({\n kind: 'replace-range',\n anchor: range.anchor,\n focus: range.focus,\n text,\n });\n }\n if (applyLocalBlockRangeReplacement(range, text)) return true;\n const beforeParagraphs = editableRangeParagraphs(range);\n if (!beforeParagraphs) return false;\n const result = nativeReplaceTextRangeWithParagraphs(doc, range.anchor, range.focus, text);\n if (!result || result.changes.length === 0) return false;\n for (const paraId of result.paragraphIds) paragraphIds.add(paraId);\n let activeList: { type: 'bullet' | 'numbered'; numbering: ReturnType<typeof createNativeListNumbering> } | null = null;\n for (let index = 0; index < (richParagraphs?.length ?? 0); index += 1) {\n const richParagraph = richParagraphs![index]!;\n const paraId = result.paragraphIds[index];\n if (!paraId) break;\n const baseOffset = index === 0 ? range.anchor.offset : 0;\n for (const run of richParagraph.runs) {\n if (Object.keys(run.format).length > 0) {\n const change = nativeSetRunFormat(doc, paraId, baseOffset + run.from, baseOffset + run.to, run.format);\n if (change) result.changes.push(change);\n }\n if (run.hyperlink) {\n const hyperlinkChange = nativeSetHyperlink(\n doc,\n paraId,\n baseOffset + run.from,\n baseOffset + run.to,\n run.hyperlink,\n );\n if (hyperlinkChange) result.changes.push(hyperlinkChange);\n }\n }\n if (richParagraph.listType) {\n if (!activeList || activeList.type !== richParagraph.listType) {\n activeList = { type: richParagraph.listType, numbering: createNativeListNumbering(doc, richParagraph.listType) };\n }\n const change = nativeSetParagraphList(doc, paraId, activeList.numbering);\n if (change) result.changes.push(change);\n } else {\n activeList = null;\n }\n }\n if (trackRevisions) {\n const revisionId = allocateNativeRevisionId(doc);\n const insertedChanges = result.changes\n .filter((change): change is Extract<NativeWordChange, { kind: 'text' }> =>\n change.kind === 'text' && (change.op === 'insert' || change.op === 'replace') && change.text.length > 0,\n )\n .map((change) => nativeAddRevision(doc, change.paraId, change.offset, change.offset + change.text.length, {\n revisionId,\n revisionKind: 'insert',\n author: 'User',\n date: new Date().toISOString(),\n }))\n .filter((change): change is NativeWordChange => change !== null);\n result.changes.push(...insertedChanges);\n }\n refreshNativeNumberingLabels(doc);\n const afterParagraphs = result.paragraphIds\n .map((paraId) => findNativeParagraph(doc, paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null)\n .map(cloneNativeParagraph);\n const transaction: BrowserTextTransaction = {\n source: 'local',\n range,\n beforeParagraphs,\n afterParagraphs,\n changesStart: changes.length,\n changes: result.changes,\n };\n changes.push(...result.changes);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n selectedImage = null;\n if (!patchTransactionDom(transaction, afterParagraphs, result.cursor)) render(result.cursor);\n else reflowFromParagraph(beforeParagraphs[0]!.paraId, result.cursor);\n setSelection({ kind: 'caret', ...result.cursor });\n notifyChange('deferred');\n return true;\n };\n\n const applyLocalImageReplacement = (\n range: PendingBrowserRangeDelete['range'],\n src: string,\n options: { width?: number; height?: number; select?: boolean } = {},\n ): boolean => {\n const beforeParagraphs = editableRangeParagraphs(range);\n if (!beforeParagraphs) return false;\n const replacement = nativeReplaceTextRangeWithParagraphs(doc, range.anchor, range.focus, '');\n if (!replacement) return false;\n for (const paraId of replacement.paragraphIds) paragraphIds.add(paraId);\n const imageChange = nativeInsertImage(doc, replacement.cursor.paraId, replacement.cursor.offset, src, options);\n if (!imageChange || imageChange.kind !== 'image') return false;\n const transactionChanges = [...replacement.changes, imageChange];\n if (trackRevisions) {\n const revisionId = allocateNativeRevisionId(doc);\n const insertedImage = findNativeParagraph(doc, imageChange.paraId)?.content.find(\n (child) => child.kind === 'image' && child.drawingId === imageChange.drawingId,\n );\n if (insertedImage?.kind === 'image') {\n insertedImage.revision = {\n kind: 'revision',\n id: `revision:${revisionId}`,\n revisionId,\n revisionKind: 'insert',\n author: 'User',\n date: new Date().toISOString(),\n };\n transactionChanges.push({\n kind: 'image',\n op: 'insert',\n paraId: imageChange.paraId,\n offset: imageChange.offset,\n drawingId: imageChange.drawingId,\n revisionId,\n revisionKind: 'insert',\n });\n }\n }\n const cursor = { paraId: replacement.cursor.paraId, offset: replacement.cursor.offset + 1 };\n const afterParagraphs = replacement.paragraphIds\n .map((paraId) => findNativeParagraph(doc, paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null)\n .map(cloneNativeParagraph);\n const transaction: BrowserTextTransaction = {\n source: 'local',\n patchMode: 'individual',\n deferLayoutReflow: true,\n range,\n beforeParagraphs,\n afterParagraphs,\n changesStart: changes.length,\n changes: transactionChanges,\n ...(options.select\n ? {\n beforeSelection:\n range.anchor.paraId === range.focus.paraId && range.anchor.offset === range.focus.offset\n ? { kind: 'caret' as const, ...range.anchor }\n : { kind: 'text-range' as const, anchor: range.anchor, focus: range.focus },\n afterSelection: {\n kind: 'object' as const,\n paraId: replacement.cursor.paraId,\n objectKind: 'image' as const,\n objectId: imageChange.drawingId,\n offset: replacement.cursor.offset,\n },\n }\n : {}),\n };\n changes.push(...transactionChanges);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n selectedImage = options.select\n ? { paraId: replacement.cursor.paraId, drawingId: imageChange.drawingId }\n : null;\n activeLocalTypingTransaction = null;\n const insertedImage = findNativeParagraph(doc, imageChange.paraId)?.content.find(\n (child) => child.kind === 'image' && child.drawingId === imageChange.drawingId,\n );\n if (\n !insertedImage ||\n insertedImage.kind !== 'image' ||\n !patchImageReplacementDom(range, insertedImage, cursor)\n ) {\n if (!patchTransactionDom(transaction, afterParagraphs, cursor)) render(cursor);\n }\n scheduleImageLayoutReflow(beforeParagraphs[0]!.paraId);\n if (selectedImage) showImageResizeHandle();\n setSelection(\n selectedImage\n ? {\n kind: 'object',\n paraId: selectedImage.paraId,\n objectKind: 'image',\n objectId: selectedImage.drawingId,\n offset: replacement.cursor.offset,\n }\n : { kind: 'caret', ...cursor },\n );\n notifyChange('deferred');\n return true;\n };\n\n const patchImageReplacementDom = (\n range: PendingBrowserRangeDelete['range'],\n image: Extract<NativeWordInlineNode, { kind: 'image' }>,\n cursor: NativeCursorPoint,\n ): boolean => {\n if (range.anchor.paraId !== range.focus.paraId) return false;\n const domRange = createNativeSelectionRange(host, range.anchor, range.focus);\n if (!domRange) return false;\n const paragraph = host.querySelector<HTMLElement>(\n `coco-word-native-p[data-para-id=\"${range.anchor.paraId}\"]`,\n );\n if (!paragraph || !paragraph.contains(domRange.commonAncestorContainer)) return false;\n domRange.deleteContents();\n domRange.insertNode(renderNativeImage(image));\n restoreNativeCursor(host, cursor);\n return true;\n };\n\n const createRuntimeParaId = (): string => {\n let paraId = '';\n do {\n nextParagraphId = (nextParagraphId + 1) >>> 0;\n paraId = nextParagraphId.toString(16).toUpperCase().padStart(8, '0');\n } while (!paraId || paragraphIds.has(paraId));\n paragraphIds.add(paraId);\n return paraId;\n };\n\n const splitParagraphLocally = (point: NativeCursorPoint, nextParaId = createRuntimeParaId()): boolean => {\n const paragraph = findNativeParagraph(doc, point.paraId);\n if (!paragraph) return false;\n const beforeParagraph = cloneNativeParagraph(paragraph);\n const change = nativeSplitParagraph(doc, point.paraId, point.offset, nextParaId);\n if (!change) return false;\n const afterParagraphs = [point.paraId, nextParaId]\n .map((paraId) => findNativeParagraph(doc, paraId))\n .filter((candidate): candidate is NativeWordParagraphNode => candidate !== null)\n .map(cloneNativeParagraph);\n if (afterParagraphs.length !== 2) return false;\n const cursor = { paraId: nextParaId, offset: 0 };\n const transaction: BrowserTextTransaction = {\n source: 'local',\n skipDeferredRender: true,\n range: { anchor: point, focus: point },\n beforeParagraphs: [beforeParagraph],\n afterParagraphs,\n changesStart: changes.length,\n changes: [change],\n };\n changes.push(change);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n selectedImage = null;\n if (!patchTransactionDom(transaction, afterParagraphs, cursor)) render(cursor);\n else reflowFromParagraph(point.paraId, cursor);\n setSelection({ kind: 'caret', ...cursor });\n notifyChange('deferred');\n return true;\n };\n\n const mergeParagraphBackwardLocally = (point: NativeCursorPoint): boolean => {\n if (point.offset !== 0) return false;\n const location = findNativeParagraphLocation(doc, point.paraId);\n const previous = location?.previous;\n if (!location || !previous) return false;\n const beforeParagraphs = [cloneNativeParagraph(previous), cloneNativeParagraph(location.paragraph)];\n const cursor = { paraId: previous.paraId, offset: nativeParagraphText(previous).length };\n const changesStart = changes.length;\n const change = nativeDeleteBackward(doc, point.paraId, 0);\n const merged = findNativeParagraph(doc, previous.paraId);\n if (!change || change.kind !== 'block' || !merged) return false;\n const transaction: BrowserTextTransaction = {\n source: 'local',\n skipDeferredRender: true,\n range: { anchor: point, focus: point },\n beforeParagraphs,\n afterParagraphs: [cloneNativeParagraph(merged)],\n changesStart,\n changes: [change],\n };\n changes.push(change);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n selectedImage = null;\n if (!patchTransactionDom(transaction, transaction.afterParagraphs, cursor)) render(cursor);\n else reflowFromParagraph(previous.paraId, cursor);\n setSelection({ kind: 'caret', ...cursor });\n notifyChange('deferred');\n return true;\n };\n\n const mergeParagraphForwardLocally = (point: NativeCursorPoint): boolean => {\n const location = findNativeParagraphLocation(doc, point.paraId);\n if (!location || point.offset !== nativeParagraphText(location.paragraph).length) return false;\n const next = location.container[location.index + 1];\n if (next?.kind !== 'paragraph') return false;\n const beforeParagraphs = [cloneNativeParagraph(location.paragraph), cloneNativeParagraph(next)];\n const changesStart = changes.length;\n const change = nativeDeleteForward(doc, point.paraId, point.offset);\n const merged = findNativeParagraph(doc, point.paraId);\n if (!change || change.kind !== 'block' || !merged) return false;\n const transaction: BrowserTextTransaction = {\n source: 'local',\n skipDeferredRender: true,\n range: { anchor: point, focus: point },\n beforeParagraphs,\n afterParagraphs: [cloneNativeParagraph(merged)],\n changesStart,\n changes: [change],\n };\n changes.push(change);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n selectedImage = null;\n if (!patchTransactionDom(transaction, transaction.afterParagraphs, point)) render(point);\n else reflowFromParagraph(point.paraId, point);\n setSelection({ kind: 'caret', ...point });\n notifyChange('deferred');\n return true;\n };\n\n const recordFormatting = (\n current: WordEditorSelection,\n beforeParagraphs: NativeWordParagraphNode[],\n formattingChanges: NativeWordChange[],\n reflow = false,\n ): boolean => {\n if (current.kind === 'table-cell-range') return false;\n if (formattingChanges.length === 0) return false;\n if (beforeParagraphs.length === 0) return false;\n const afterParagraphs = beforeParagraphs\n .map((paragraph) => findNativeParagraph(doc, paragraph.paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null)\n .map(cloneNativeParagraph);\n const range =\n current.kind === 'text-range'\n ? orderedSelectionRange(doc, current)\n : { anchor: { paraId: current.paraId, offset: current.offset }, focus: { paraId: current.paraId, offset: current.offset } };\n const transaction: BrowserTextTransaction = {\n source: 'local',\n patchMode: 'individual',\n range,\n beforeParagraphs,\n afterParagraphs,\n changesStart: changes.length,\n changes: formattingChanges,\n beforeSelection: current,\n afterSelection: current,\n };\n changes.push(...formattingChanges);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n if (!patchTransactionDom(transaction, afterParagraphs)) render();\n const root = host.querySelector<HTMLElement>(':scope > coco-word-native-document');\n if (root) refreshNativePageCommentBubbles(root);\n if (current.kind === 'text-range') restoreNativeTextSelection(host, current.anchor, current.focus);\n else if (current.kind === 'object') {\n selectedImage = { paraId: current.paraId, drawingId: current.objectId };\n showImageResizeHandle();\n } else restoreNativeCursor(host, { paraId: current.paraId, offset: current.offset });\n if (reflow) {\n const cursor = current.kind === 'text-range' ? undefined : { paraId: current.paraId, offset: current.offset };\n reflowFromParagraph(beforeParagraphs[0]!.paraId, cursor, current);\n }\n if (current.kind === 'object' && selectedImage) showImageResizeHandle();\n setSelection(current);\n notifyChange('deferred');\n return true;\n };\n\n const applySearchReplacement = (\n searchMatches: ReadonlyArray<WordEditorSearchState['matches'][number]>,\n replacement: string,\n ): number => {\n if (searchMatches.length === 0) return 0;\n const paraIds = Array.from(new Set(searchMatches.map((match) => match.paraId)));\n const beforeParagraphs = paraIds\n .map((paraId) => findNativeParagraph(doc, paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null)\n .map(cloneNativeParagraph);\n if (beforeParagraphs.length === 0) return 0;\n const changesStart = changes.length;\n const replacementChanges: NativeWordChange[] = [];\n const ordered = [...searchMatches].sort((left, right) =>\n left.paraId === right.paraId ? right.from - left.from : paraIds.indexOf(right.paraId) - paraIds.indexOf(left.paraId));\n for (const match of ordered) {\n replacementChanges.push(...nativeReplaceRange(doc, match.paraId, match.from, match.to, replacement));\n }\n if (replacementChanges.length === 0) return 0;\n const afterParagraphs = beforeParagraphs\n .map((paragraph) => findNativeParagraph(doc, paragraph.paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null)\n .map(cloneNativeParagraph);\n const firstMatch = searchMatches[0]!;\n const transaction: BrowserTextTransaction = {\n source: 'local',\n patchMode: 'individual',\n range: {\n anchor: { paraId: firstMatch.paraId, offset: firstMatch.from },\n focus: { paraId: firstMatch.paraId, offset: firstMatch.to },\n },\n beforeParagraphs,\n afterParagraphs,\n changesStart,\n changes: replacementChanges,\n ...(selection ? { beforeSelection: selection, afterSelection: selection } : {}),\n };\n changes.push(...replacementChanges);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n activeLocalTypingTransaction = null;\n if (!patchTransactionDom(transaction, afterParagraphs)) render(undefined, selection ?? undefined);\n else restorePreservedSelection(selection);\n reflowFromParagraph(firstMatch.paraId);\n notifyChange();\n return searchMatches.length;\n };\n\n const replaceCurrent = (replacement: string): boolean => {\n const match = searchState && searchState.activeIndex >= 0 ? searchState.matches[searchState.activeIndex] : null;\n return match ? applySearchReplacement([match], replacement) > 0 : false;\n };\n\n const replaceAll = (replacement: string): number => {\n return searchState ? applySearchReplacement(searchState.matches, replacement) : 0;\n };\n\n const dispatch = (command: WordEditorCommand): boolean => {\n if (destroyed) return false;\n activate();\n const current = selection ?? currentNativeSelection(host) ?? nativeSelectionFromCursor(host);\n if (command.kind === 'toggle-track-revisions') {\n trackRevisions = !trackRevisions;\n notifySelectionChange();\n return true;\n }\n if (\n command.kind === 'accept-revision' ||\n command.kind === 'reject-revision' ||\n command.kind === 'accept-all-revisions' ||\n command.kind === 'reject-all-revisions'\n ) {\n const revisionId = command.kind === 'accept-revision' || command.kind === 'reject-revision'\n ? command.revisionId\n : undefined;\n const revisionKind = command.kind === 'accept-revision' || command.kind === 'reject-revision'\n ? command.revisionKind\n : undefined;\n const resolveAll = command.kind === 'accept-all-revisions' || command.kind === 'reject-all-revisions';\n const resolvedTableRevisionIds = new Set(\n browserUndoStack.flatMap((transaction) => isBrowserBlockTransaction(transaction)\n ? transaction.changes\n .filter((change): change is Extract<NativeWordChange, { kind: 'table' }> => change.kind === 'table' && Boolean(change.revisionAction && change.revisionId))\n .map((change) => change.revisionId!)\n : []),\n );\n const finishResolution = (handled: boolean): boolean => {\n if (handled && resolveAll) dispatch(command);\n return handled;\n };\n const tableRevisionTransactions = browserUndoStack.filter((transaction): transaction is BrowserBlockTransaction =>\n isBrowserBlockTransaction(transaction) && transaction.changes.some((change) => change.kind === 'table' && !change.revisionAction && Boolean(change.revisionId) && !resolvedTableRevisionIds.has(change.revisionId!)) && transaction.afterBlocks.some((block) => {\n if (block.kind !== 'table' || block.revision?.kind !== 'revision' || resolvedTableRevisionIds.has(block.revision.revisionId)) return false;\n const currentRevisionId = findNativeTableLocation(doc, block.tableId)?.table.revision?.revisionId;\n if (resolveAll) return Boolean(currentRevisionId);\n return currentRevisionId === block.revision.revisionId &&\n block.revision.revisionId === revisionId &&\n (!revisionKind || block.revision.revisionKind === revisionKind);\n }),\n );\n if (tableRevisionTransactions.length > 0) {\n const operation: 'accept' | 'reject' = command.kind === 'accept-revision' || command.kind === 'accept-all-revisions' ? 'accept' : 'reject';\n const tableSources = new Map<string, BrowserBlockTransaction[]>();\n for (const sourceTransaction of tableRevisionTransactions) {\n const markedTable = sourceTransaction.afterBlocks.find((block) => block.kind === 'table' && block.revision?.kind === 'revision');\n if (!markedTable || markedTable.kind !== 'table' || !markedTable.revision) continue;\n const sources = tableSources.get(markedTable.tableId) ?? [];\n sources.push(sourceTransaction);\n tableSources.set(markedTable.tableId, sources);\n }\n for (const [tableId, sources] of tableSources) {\n const sourceTransaction = sources[sources.length - 1];\n if (!sourceTransaction) continue;\n const markedTable = sourceTransaction.afterBlocks.find((block) => block.kind === 'table' && block.revision?.kind === 'revision');\n if (!markedTable || markedTable.kind !== 'table' || !markedTable.revision) continue;\n const location = findNativeTableLocation(doc, tableId);\n if (!location) continue;\n const beforeBlocks = [cloneNativeWordBlocks([location.table])[0]!];\n const resolvedTable = cloneNativeWordBlocks([location.table])[0];\n if (!resolvedTable || resolvedTable.kind !== 'table') continue;\n if (operation === 'accept') {\n resolvedTable.revision = undefined;\n location.table.revision = undefined;\n }\n const afterBlocks = operation === 'accept'\n ? [resolvedTable]\n : cloneNativeWordBlocks(sources[0]?.beforeBlocks ?? sourceTransaction.beforeBlocks);\n if (operation === 'reject') {\n location.container.splice(location.tableIndex, 1, ...cloneNativeWordBlocks(afterBlocks));\n }\n const resolvedChanges = sources.flatMap((source) => source.changes\n .filter((change): change is Extract<NativeWordChange, { kind: 'table' }> => change.kind === 'table')\n .map((change) => ({ ...change, revisionAction: operation })));\n const transaction: BrowserBlockTransaction = {\n source: 'local',\n range: sourceTransaction.range,\n container: location.container,\n startIndex: location.tableIndex,\n beforeBlocks,\n afterBlocks,\n changesStart: changes.length,\n changes: resolvedChanges,\n beforeSelection: current ?? undefined,\n afterSelection: current ?? undefined,\n };\n changes.push(...transaction.changes);\n browserUndoStack.push(transaction);\n browserRedoStack.length = 0;\n if (!patchBlockTransactionDom(transaction, afterBlocks, undefined)) render();\n else reflowFromParagraph(beforeBlocks[0]?.kind === 'paragraph' ? beforeBlocks[0].paraId : location.table.rows[0]?.cells[0]?.paragraphs[0]?.paraId ?? '', undefined);\n notifyChange('deferred');\n }\n return finishResolution(true);\n }\n const imageTargets = allNativeParagraphs(doc).flatMap((paragraph) => {\n let offset = 0;\n const result: Array<{ paraId: string; drawingId: string; offset: number }> = [];\n for (const child of paragraph.content) {\n if (child.kind === 'image' &&\n ((child.revision?.kind === 'revision' && (resolveAll || (child.revision.revisionId === revisionId && (!revisionKind || child.revision.revisionKind === revisionKind)))) ||\n (child.formatRevision && (resolveAll || (child.formatRevision.revisionId === revisionId && (!revisionKind || revisionKind === 'format')))))) {\n result.push({ paraId: paragraph.paraId, drawingId: child.drawingId, offset });\n }\n offset += child.kind === 'text' ? child.text.length : 1;\n }\n return result;\n });\n if (imageTargets.length > 0) {\n const operation = command.kind === 'accept-revision' || command.kind === 'accept-all-revisions' ? 'accept' : 'reject';\n const beforeParagraphs = Array.from(new Set(imageTargets.map((target) => target.paraId)))\n .map((paraId) => findNativeParagraph(doc, paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null)\n .map(cloneNativeParagraph);\n const imageChanges = imageTargets\n .map((target) => {\n const image = findNativeParagraph(doc, target.paraId)?.content.find(\n (child) => child.kind === 'image' && child.drawingId === target.drawingId,\n );\n return image?.kind === 'image' && image.formatRevision\n ? nativeResolveImageFormatRevision(doc, target.paraId, target.drawingId, operation)\n : nativeResolveImageRevision(doc, target.paraId, target.drawingId, operation);\n })\n .filter((change): change is NativeWordChange => change !== null);\n if (imageChanges.length === 0) return false;\n const target = imageTargets[0]!;\n return finishResolution(recordFormatting(\n { kind: 'caret', paraId: target.paraId, offset: target.offset },\n beforeParagraphs,\n imageChanges,\n true,\n ));\n }\n const formatRanges = allNativeParagraphs(doc).flatMap((paragraph) => {\n let offset = 0;\n const result: Array<{ paraId: string; from: number; to: number }> = [];\n for (const child of paragraph.content) {\n const length = child.kind === 'text' ? child.text.length : 1;\n if (child.kind === 'text' && child.formatRevision &&\n (resolveAll || (child.formatRevision.revisionId === revisionId && (!revisionKind || revisionKind === 'format')))) {\n result.push({ paraId: paragraph.paraId, from: offset, to: offset + length });\n }\n offset += length;\n }\n return result;\n });\n if (formatRanges.length > 0) {\n const operation = command.kind === 'accept-revision' || command.kind === 'accept-all-revisions' ? 'accept' : 'reject';\n const beforeParagraphs = Array.from(new Set(formatRanges.map((range) => range.paraId)))\n .map((paraId) => findNativeParagraph(doc, paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null)\n .map(cloneNativeParagraph);\n const formatChanges = formatRanges\n .map((range) => nativeResolveFormatRevision(doc, range.paraId, range.from, range.to, operation))\n .filter((change): change is NativeWordChange => change !== null);\n if (formatChanges.length === 0) return false;\n const first = formatRanges[0]!;\n return finishResolution(recordFormatting(\n { kind: 'caret', paraId: first.paraId, offset: first.from },\n beforeParagraphs,\n formatChanges,\n true,\n ));\n }\n const ranges = resolveAll\n ? allNativeParagraphs(doc).flatMap((paragraph) => {\n const result: Array<{ paraId: string; from: number; to: number }> = [];\n let offset = 0;\n for (const child of paragraph.content) {\n const length = child.kind === 'text' ? child.text.length : 1;\n if (child.kind === 'text' && child.marks?.some((mark) => mark.kind === 'revision')) {\n result.push({ paraId: paragraph.paraId, from: offset, to: offset + length });\n }\n offset += length;\n }\n return result;\n })\n : revisionId\n ? allNativeParagraphs(doc).flatMap((paragraph) => {\n const result: Array<{ paraId: string; from: number; to: number }> = [];\n let offset = 0;\n for (const child of paragraph.content) {\n const length = child.kind === 'text' ? child.text.length : 1;\n if (child.kind === 'text' && child.marks?.some((mark) => mark.kind === 'revision' && mark.revisionId === revisionId && (!revisionKind || mark.revisionKind === revisionKind))) {\n result.push({ paraId: paragraph.paraId, from: offset, to: offset + length });\n }\n offset += length;\n }\n return result;\n })\n : selectedTextRanges(current);\n if (ranges.length === 0) return false;\n if (resolveAll || revisionId) {\n ranges.sort((left, right) => left.paraId === right.paraId\n ? right.from - left.from || right.to - left.to\n : right.paraId.localeCompare(left.paraId));\n }\n const beforeParagraphs = ranges\n .map((range) => findNativeParagraph(doc, range.paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null)\n .map(cloneNativeParagraph);\n const operation = command.kind === 'accept-revision' || command.kind === 'accept-all-revisions' ? 'accept' : 'reject';\n const revisionChanges = ranges\n .map((range) => nativeResolveRevision(doc, range.paraId, range.from, range.to, operation))\n .filter((change): change is NativeWordChange => change !== null);\n if (revisionChanges.length === 0) return false;\n const preservedSelection = current ?? { kind: 'caret' as const, paraId: ranges[0]!.paraId, offset: ranges[0]!.from };\n return finishResolution(recordFormatting(preservedSelection, beforeParagraphs, revisionChanges, false));\n }\n if (command.kind === 'insert-text' && current?.kind === 'caret') {\n const cursor = { paraId: current.paraId, offset: current.offset + command.text.length };\n return applyLocalParagraphTextEdit(\n { anchor: current, focus: current },\n current,\n cursor,\n () => {\n const inserted = nativeInsertText(doc, current.paraId, current.offset, command.text);\n if (!trackRevisions || !inserted || command.text.length === 0) return inserted;\n const marked = nativeAddRevision(doc, current.paraId, current.offset, cursor.offset, {\n revisionId: adjacentRevisionId(current.paraId, current.offset, 'insert', 'before') ?? allocateNativeRevisionId(doc),\n revisionKind: 'insert',\n author: 'User',\n date: new Date().toISOString(),\n });\n return marked ? [inserted, marked] : inserted;\n },\n );\n }\n if (command.kind === 'replace-range' && command.anchor.paraId === command.focus.paraId) {\n const range = normalizedSelectionRange(command.anchor.offset, command.focus.offset);\n const beforeSelection: WordEditorSelection = {\n kind: 'text-range',\n anchor: command.anchor,\n focus: command.focus,\n };\n if (trackRevisions) {\n return applyLocalParagraphTextEdit(\n { anchor: command.anchor, focus: command.focus },\n beforeSelection,\n { paraId: command.anchor.paraId, offset: range.to + command.text.length },\n () => {\n const revisionChanges: NativeWordChange[] = [];\n const deleted = nativeAddRevision(doc, command.anchor.paraId, range.from, range.to, {\n revisionId: allocateNativeRevisionId(doc), revisionKind: 'delete', author: 'User', date: new Date().toISOString(),\n });\n if (deleted) revisionChanges.push(deleted);\n if (command.text.length > 0) {\n const inserted = nativeInsertText(doc, command.anchor.paraId, range.to, command.text);\n if (inserted) revisionChanges.push(inserted);\n const marked = nativeAddRevision(doc, command.anchor.paraId, range.to, range.to + command.text.length, {\n revisionId: allocateNativeRevisionId(doc), revisionKind: 'insert', author: 'User', date: new Date().toISOString(),\n });\n if (marked) revisionChanges.push(marked);\n }\n return revisionChanges;\n },\n );\n }\n return applyLocalParagraphTextEdit(\n { anchor: command.anchor, focus: command.focus },\n beforeSelection,\n { paraId: command.anchor.paraId, offset: range.from + command.text.length },\n () => nativeReplaceRange(doc, command.anchor.paraId, range.from, range.to, command.text),\n );\n }\n if (command.kind === 'delete-range' && trackRevisions) {\n const selectedRange: Extract<WordEditorSelection, { kind: 'text-range' }> = {\n kind: 'text-range',\n anchor: command.anchor,\n focus: command.focus,\n };\n const ranges = selectedTextRanges(selectedRange);\n if (ranges.length === 0) return false;\n const beforeParagraphs = Array.from(new Map(\n ranges\n .map((range) => findNativeParagraph(doc, range.paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null)\n .map((paragraph) => [paragraph.paraId, cloneNativeParagraph(paragraph)] as const),\n ).values());\n const revisionId = allocateNativeRevisionId(doc);\n const deleteChanges = ranges\n .map((range) => nativeAddRevision(doc, range.paraId, range.from, range.to, {\n revisionId,\n revisionKind: 'delete',\n author: 'User',\n date: new Date().toISOString(),\n }))\n .filter((change): change is NativeWordChange => change !== null);\n if (deleteChanges.length === 0) return false;\n const accepted = recordFormatting(selectedRange, beforeParagraphs, deleteChanges, false);\n if (accepted) {\n const ordered = orderedSelectionRange(doc, selectedRange);\n const cursor = { paraId: ordered.anchor.paraId, offset: ordered.anchor.offset };\n restoreNativeCursor(host, cursor);\n setSelection({ kind: 'caret', ...cursor });\n }\n return accepted;\n }\n if (command.kind === 'delete-range' && command.anchor.paraId === command.focus.paraId) {\n const selectedRange: Extract<WordEditorSelection, { kind: 'text-range' }> = {\n kind: 'text-range',\n anchor: command.anchor,\n focus: command.focus,\n };\n if (applyLocalPageBreakRangeDelete(selectedRange)) return true;\n const range = normalizedSelectionRange(command.anchor.offset, command.focus.offset);\n if (trackRevisions) {\n return applyLocalParagraphTextEdit(\n { anchor: command.anchor, focus: command.focus },\n selectedRange,\n { paraId: command.anchor.paraId, offset: range.from },\n () => nativeAddRevision(doc, command.anchor.paraId, range.from, range.to, {\n revisionId: adjacentRevisionId(command.anchor.paraId, range.from, 'delete', 'at') ?? allocateNativeRevisionId(doc), revisionKind: 'delete', author: 'User', date: new Date().toISOString(),\n }),\n );\n }\n return applyLocalParagraphTextEdit(\n { anchor: command.anchor, focus: command.focus },\n selectedRange,\n { paraId: command.anchor.paraId, offset: range.from },\n () => nativeDeleteRange(doc, command.anchor.paraId, range.from, range.to),\n );\n }\n if (command.kind === 'split-paragraph' && current?.kind === 'caret') {\n return splitParagraphLocally({ paraId: current.paraId, offset: current.offset });\n }\n if (command.kind === 'insert-page-break' && current?.kind === 'caret') {\n return applyLocalPageBreakEdit(current, 'insert');\n }\n if (command.kind === 'insert-image' && current && (current.kind === 'caret' || current.kind === 'text-range')) {\n const range = current.kind === 'text-range'\n ? orderedSelectionRange(doc, current)\n : {\n anchor: { paraId: current.paraId, offset: current.offset },\n focus: { paraId: current.paraId, offset: current.offset },\n };\n return applyLocalImageReplacement(range, command.src, {\n ...(command.width ? { width: command.width } : {}),\n ...(command.height ? { height: command.height } : {}),\n select: true,\n });\n }\n if (\n command.kind === 'set-image-size' &&\n current?.kind === 'object' &&\n current.objectKind === 'image' &&\n current.objectId === command.objectId\n ) {\n const paragraph = findNativeParagraph(doc, current.paraId);\n if (!paragraph) return false;\n const beforeParagraph = cloneNativeParagraph(paragraph);\n const beforeImage = paragraph.content.find(\n (child) => child.kind === 'image' && child.drawingId === current.objectId,\n );\n const beforeWidth = beforeImage?.kind === 'image' ? beforeImage.width : undefined;\n const beforeHeight = beforeImage?.kind === 'image' ? beforeImage.height : undefined;\n const change = nativeSetImageSize(doc, current.paraId, current.objectId, {\n width: command.width,\n height: command.height,\n });\n if (trackRevisions && change) {\n const image = paragraph.content.find(\n (child) => child.kind === 'image' && child.drawingId === current.objectId,\n );\n if (image?.kind === 'image') {\n image.formatRevision = {\n kind: 'format',\n revisionId: allocateNativeRevisionId(doc),\n beforeWidth,\n beforeHeight,\n afterWidth: command.width,\n afterHeight: command.height,\n author: 'User',\n date: new Date().toISOString(),\n };\n if (change.kind === 'image') {\n change.revisionId = image.formatRevision.revisionId;\n change.revisionKind = 'format';\n }\n }\n }\n return recordFormatting(current, [beforeParagraph], change ? [change] : [], true);\n }\n if (\n command.kind === 'set-image-alignment' &&\n current?.kind === 'object' &&\n current.objectKind === 'image' &&\n current.objectId === command.objectId\n ) {\n return dispatch({ kind: 'set-paragraph-alignment', alignment: command.alignment });\n }\n if (\n current &&\n (command.kind === 'insert-table' || command.kind === 'delete-table')\n ) {\n return applyLocalTableLifecycleEdit(current, command);\n }\n if (\n current &&\n (command.kind === 'insert-table-row' ||\n command.kind === 'delete-table-row' ||\n command.kind === 'insert-table-column' ||\n command.kind === 'delete-table-column')\n ) {\n return applyLocalTableStructureEdit(current, command);\n }\n if (\n current?.kind === 'table-cell-range' &&\n (command.kind === 'merge-table-cells' || command.kind === 'split-table-cell')\n ) {\n return applyLocalTableCellStructureEdit(current, command);\n }\n if (\n current &&\n (command.kind === 'set-table-cell-background' ||\n command.kind === 'set-table-cell-vertical-alignment' ||\n command.kind === 'set-table-cell-borders')\n ) {\n return applyLocalTableCellFormat(current, command);\n }\n if (command.kind === 'clear-table-cells' && current?.kind === 'table-cell-range') {\n return applyLocalTableCellClear(current);\n }\n if (command.kind === 'delete-backward') {\n if (current?.kind === 'table-cell-range') return applyLocalTableCellClear(current);\n if (current?.kind === 'text-range') {\n if (applyLocalPageBreakRangeDelete(current)) return true;\n if (trackRevisions) return dispatch({ kind: 'delete-range', anchor: current.anchor, focus: current.focus });\n return applyLocalPlainTextReplacement(orderedSelectionRange(doc, current), '');\n }\n if (current?.kind === 'object' && current.objectKind === 'image') {\n const cursor = {\n paraId: current.paraId,\n offset: current.offset,\n };\n return deleteImageWithHistory(current.paraId, current.objectId, cursor);\n }\n if (current?.kind === 'caret') {\n if (trackRevisions && current.offset > 0) {\n const from = current.offset - 1;\n return applyLocalParagraphTextEdit(\n { anchor: current, focus: current },\n current,\n { paraId: current.paraId, offset: from },\n () => nativeAddRevision(doc, current.paraId, from, current.offset, {\n revisionId: adjacentRevisionId(current.paraId, from, 'delete', 'after') ?? allocateNativeRevisionId(doc), revisionKind: 'delete', author: 'User', date: new Date().toISOString(),\n }),\n );\n }\n if (applyLocalPageBreakEdit(current, 'delete-backward')) return true;\n if (deletePageBreakAcrossParagraphBoundary(current, 'backward')) return true;\n if (mergeParagraphBackwardLocally({ paraId: current.paraId, offset: current.offset })) return true;\n const paragraph = findNativeParagraph(doc, current.paraId);\n const beforeParagraph = paragraph ? cloneNativeParagraph(paragraph) : null;\n const change = nativeDeleteBackward(doc, current.paraId, current.offset);\n const cursor = {\n paraId: current.offset > 0 ? current.paraId : previousNativeParagraphId(doc, current.paraId) ?? current.paraId,\n offset: Math.max(0, current.offset - 1),\n };\n if (change?.kind === 'image') {\n recordImageDeletion(beforeParagraph, change, cursor);\n } else {\n record(change, cursor, change?.kind === 'block' ? {} : { localParaId: current.paraId });\n }\n return true;\n }\n }\n if (command.kind === 'delete-forward' && current?.kind === 'table-cell-range') {\n return applyLocalTableCellClear(current);\n }\n if (command.kind === 'delete-forward' && current?.kind === 'text-range') {\n if (applyLocalPageBreakRangeDelete(current)) return true;\n if (trackRevisions) return dispatch({ kind: 'delete-range', anchor: current.anchor, focus: current.focus });\n return applyLocalPlainTextReplacement(orderedSelectionRange(doc, current), '');\n }\n if (command.kind === 'delete-forward' && current?.kind === 'caret') {\n if (trackRevisions && current.offset < paragraphTextLength(current.paraId)) {\n return applyLocalParagraphTextEdit(\n { anchor: current, focus: current },\n current,\n current,\n () => nativeAddRevision(doc, current.paraId, current.offset, current.offset + 1, {\n revisionId: adjacentRevisionId(current.paraId, current.offset, 'delete', 'at') ?? allocateNativeRevisionId(doc), revisionKind: 'delete', author: 'User', date: new Date().toISOString(),\n }),\n );\n }\n if (applyLocalPageBreakEdit(current, 'delete-forward')) return true;\n if (deletePageBreakAcrossParagraphBoundary(current, 'forward')) return true;\n if (mergeParagraphForwardLocally({ paraId: current.paraId, offset: current.offset })) return true;\n const paragraph = findNativeParagraph(doc, current.paraId);\n const beforeParagraph = paragraph ? cloneNativeParagraph(paragraph) : null;\n const change = nativeDeleteForward(doc, current.paraId, current.offset);\n const cursor = {\n paraId: current.paraId,\n offset: current.offset,\n };\n if (change?.kind === 'image') {\n recordImageDeletion(beforeParagraph, change, cursor);\n } else {\n record(change, cursor, { localParaId: current.paraId });\n }\n return true;\n }\n if (command.kind === 'delete-object' && current?.kind === 'object') {\n const cursor = {\n paraId: current.paraId,\n offset: current.offset,\n };\n return deleteImageWithHistory(current.paraId, command.objectId, cursor);\n }\n if (\n (command.kind === 'set-hyperlink' || command.kind === 'remove-hyperlink') &&\n current?.kind === 'text-range'\n ) {\n const ranges = selectedTextRanges(current);\n const beforeParagraphs = ranges\n .map((range) => findNativeParagraph(doc, range.paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null)\n .map(cloneNativeParagraph);\n const hyperlinkChanges = ranges\n .map((range) => nativeSetHyperlink(\n doc,\n range.paraId,\n range.from,\n range.to,\n command.kind === 'set-hyperlink' ? command.hyperlink : null,\n ))\n .filter((change): change is NativeWordChange => change !== null);\n return recordFormatting(current, beforeParagraphs, hyperlinkChanges, false);\n }\n if (command.kind === 'add-comment' && current?.kind === 'text-range') {\n const ranges = selectedTextRanges(current);\n if (ranges.length === 0 || !command.body.trim()) return false;\n const beforeParagraphs = ranges\n .map((range) => findNativeParagraph(doc, range.paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null)\n .map(cloneNativeParagraph);\n const commentId = allocateNativeCommentId(doc);\n const date = command.date ?? new Date().toISOString();\n const commentChanges = ranges\n .map((range) => nativeAddComment(doc, range.paraId, range.from, range.to, {\n commentId,\n author: command.author ?? 'User',\n date,\n body: command.body.trim(),\n }))\n .filter((change): change is NativeWordChange => change !== null);\n const recorded = recordFormatting(current, beforeParagraphs, commentChanges, false);\n if (recorded && commentChanges.length > 1) render();\n return recorded;\n }\n if (command.kind === 'edit-comment' || command.kind === 'delete-comment') {\n if (command.kind === 'edit-comment' && !command.body.trim()) return false;\n const beforeParagraphs = allNativeParagraphs(doc)\n .filter((paragraph) => paragraph.content.some((child) => child.kind === 'text' && child.marks?.some(\n (mark) => mark.kind === 'comment' && mark.commentId === command.commentId,\n )))\n .map(cloneNativeParagraph);\n if (beforeParagraphs.length === 0) return false;\n const commentChanges = command.kind === 'edit-comment'\n ? nativeUpdateComment(doc, command.commentId, command.body.trim())\n : nativeDeleteComment(doc, command.commentId);\n if (commentChanges.length === 0) return false;\n const historySelection = current ?? {\n kind: 'caret' as const,\n paraId: beforeParagraphs[0]!.paraId,\n offset: 0,\n };\n return recordFormatting(historySelection, beforeParagraphs, commentChanges, false);\n }\n if (command.kind === 'reply-comment') {\n const body = command.body.trim();\n if (!body) return false;\n let target: { paragraph: NativeWordParagraphNode; from: number; to: number } | null = null;\n for (const paragraph of allNativeParagraphs(doc)) {\n let position = 0;\n for (const child of paragraph.content) {\n const length = child.kind === 'text' ? child.text.length : 1;\n if (child.kind === 'text' && child.marks?.some((mark) => mark.kind === 'comment' && mark.commentId === command.commentId)) {\n target = { paragraph, from: position, to: position + length };\n break;\n }\n position += length;\n }\n if (target) break;\n }\n if (!target) return false;\n const beforeParagraph = cloneNativeParagraph(target.paragraph);\n const replyId = allocateNativeCommentId(doc);\n const change = nativeAddComment(doc, target.paragraph.paraId, target.from, target.to, {\n commentId: replyId,\n parentCommentId: command.commentId,\n preserveExistingComments: true,\n author: 'User',\n date: new Date().toISOString(),\n body,\n });\n if (!change) return false;\n render();\n return recordFormatting(current ?? { kind: 'caret', paraId: target.paragraph.paraId, offset: target.from }, [beforeParagraph], [change], false);\n }\n if (command.kind === 'add-revision' && current?.kind === 'text-range') {\n const ranges = selectedTextRanges(current);\n if (ranges.length === 0) return false;\n const beforeParagraphs = ranges\n .map((range) => findNativeParagraph(doc, range.paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null)\n .map(cloneNativeParagraph);\n const revisionId = allocateNativeRevisionId(doc);\n const date = command.date ?? new Date().toISOString();\n const revisionChanges = ranges\n .map((range) => nativeAddRevision(doc, range.paraId, range.from, range.to, {\n revisionId,\n revisionKind: command.revisionKind,\n author: command.author ?? 'User',\n date,\n }))\n .filter((change): change is NativeWordChange => change !== null);\n return recordFormatting(current, beforeParagraphs, revisionChanges, false);\n }\n if (\n command.kind === 'toggle-bold' ||\n command.kind === 'toggle-italic' ||\n command.kind === 'toggle-underline' ||\n command.kind === 'toggle-strike' ||\n command.kind === 'set-font-family' ||\n command.kind === 'set-font-size' ||\n command.kind === 'set-text-color' ||\n command.kind === 'set-highlight-color' ||\n command.kind === 'clear-text-format'\n ) {\n const ranges = selectedTextRanges(current);\n if (current?.kind !== 'text-range' || ranges.length === 0) return false;\n const beforeParagraphs = ranges\n .map((range) => findNativeParagraph(doc, range.paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null)\n .map(cloneNativeParagraph);\n const commandState = getCommandState(current);\n let format: Partial<EditorRunFormat> | null = null;\n if (command.kind === 'toggle-bold') format = { bold: commandState.bold !== true };\n if (command.kind === 'toggle-italic') format = { italic: commandState.italic !== true };\n if (command.kind === 'toggle-underline') format = { underline: commandState.underline !== true };\n if (command.kind === 'toggle-strike') format = { strike: commandState.strike !== true };\n if (command.kind === 'set-font-family' && command.fontFamily.trim()) {\n format = { fontFamily: command.fontFamily.trim() };\n }\n if (command.kind === 'set-font-size') format = { fontSize: command.fontSize };\n if (command.kind === 'set-text-color') format = { color: command.color.replace(/^#/, '').toUpperCase() };\n if (command.kind === 'set-highlight-color') {\n format = { highlight: command.color ? command.color.replace(/^#/, '').toUpperCase() : 'none' };\n }\n if (command.kind !== 'clear-text-format' && !format) return false;\n const formattingChanges = ranges\n .map((range) =>\n command.kind === 'clear-text-format'\n ? nativeClearRunFormat(doc, range.paraId, range.from, range.to)\n : nativeSetRunFormat(doc, range.paraId, range.from, range.to, format!),\n )\n .filter((change): change is NativeWordChange => change !== null);\n if (trackRevisions) {\n const revisionId = allocateNativeRevisionId(doc);\n const formatRevisionChanges = ranges\n .map((range) => nativeAddFormatRevision(\n doc,\n range.paraId,\n range.from,\n range.to,\n beforeParagraphs.find((paragraph) => paragraph.paraId === range.paraId)!,\n { revisionId, author: 'User', date: new Date().toISOString() },\n ))\n .filter((change): change is NativeWordChange => change !== null);\n formattingChanges.push(...formatRevisionChanges);\n }\n const reflow =\n command.kind === 'toggle-bold' ||\n command.kind === 'toggle-italic' ||\n command.kind === 'set-font-family' ||\n command.kind === 'set-font-size' ||\n command.kind === 'clear-text-format';\n return recordFormatting(current, beforeParagraphs, formattingChanges, reflow);\n }\n if (\n command.kind === 'set-paragraph-alignment' ||\n command.kind === 'set-paragraph-indent' ||\n command.kind === 'adjust-paragraph-left-indent' ||\n command.kind === 'set-paragraph-spacing' ||\n command.kind === 'set-paragraph-line-spacing'\n ) {\n const paraIds = Array.from(new Set(selectedParagraphIds(current)));\n if (!current || paraIds.length === 0) return false;\n const beforeParagraphs = paraIds\n .map((paraId) => findNativeParagraph(doc, paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null)\n .map(cloneNativeParagraph);\n const formattingChanges = paraIds\n .map((paraId) => {\n const paragraph = findNativeParagraph(doc, paraId);\n if (!paragraph) return null;\n if (command.kind === 'set-paragraph-alignment') {\n return nativeSetParagraphFormat(doc, paraId, { alignment: command.alignment });\n }\n if (command.kind === 'set-paragraph-indent') {\n return nativeSetParagraphFormat(doc, paraId, { indent: sanitizeIndent(command.indent) });\n }\n if (command.kind === 'adjust-paragraph-left-indent') {\n const left = Math.max(0, (paragraph.format?.indent?.left ?? 0) + command.delta);\n return nativeSetParagraphFormat(doc, paraId, { indent: { left } });\n }\n if (command.kind === 'set-paragraph-spacing') {\n return nativeSetParagraphFormat(doc, paraId, { spacing: sanitizeSpacing(command.spacing) });\n }\n return nativeSetParagraphFormat(doc, paraId, {\n spacing: {\n line: Math.max(0, command.line),\n lineRule: command.lineRule,\n },\n });\n })\n .filter((change): change is NativeWordChange => change !== null);\n return recordFormatting(current, beforeParagraphs, formattingChanges, command.kind !== 'set-paragraph-alignment');\n }\n if (command.kind === 'toggle-list' || command.kind === 'remove-list' || command.kind === 'adjust-list-level') {\n const paraIds = Array.from(new Set(selectedParagraphIds(current)));\n if (!current || paraIds.length === 0) return false;\n const paragraphs = paraIds\n .map((paraId) => findNativeParagraph(doc, paraId))\n .filter((paragraph): paragraph is NativeWordParagraphNode => paragraph !== null);\n const beforeParagraphs = paragraphs.map(cloneNativeParagraph);\n const allMatchToggleType =\n command.kind === 'toggle-list' &&\n paragraphs.every(\n (paragraph) =>\n paragraph.format?.hasNumbering && nativeListType(paragraph.format.numbering) === command.listType,\n );\n const newList =\n command.kind === 'toggle-list' && !allMatchToggleType\n ? adjacentNativeListNumbering(doc, paraIds, command.listType) ??\n createNativeListNumbering(doc, command.listType)\n : null;\n const listChanges = paragraphs\n .map((paragraph) => {\n if (command.kind === 'remove-list' || allMatchToggleType) {\n return paragraph.format?.hasNumbering ? nativeSetParagraphList(doc, paragraph.paraId, null) : null;\n }\n if (command.kind === 'toggle-list' && newList) {\n const level = paragraph.format?.numbering?.ilvl ?? 0;\n return nativeSetParagraphList(doc, paragraph.paraId, nativeNumberingAtLevel(newList, level));\n }\n if (command.kind === 'adjust-list-level') {\n const numbering = paragraph.format?.hasNumbering ? paragraph.format.numbering : undefined;\n if (!numbering) return null;\n return nativeSetParagraphList(\n doc,\n paragraph.paraId,\n nativeNumberingAtLevel(numbering, numbering.ilvl + command.delta),\n );\n }\n return null;\n })\n .filter((change): change is NativeWordChange => change !== null);\n refreshNativeNumberingLabels(doc);\n return recordFormatting(current, beforeParagraphs, listChanges, true);\n }\n return false;\n };\n\n interface NativeTableClipboardEntry extends NativeTableClipboardCell {\n text: string;\n }\n\n interface NativeTableClipboardPayload {\n version: 1;\n cells: Array<Array<NativeTableClipboardEntry | null>>;\n }\n\n const tableClipboardPayload = (\n current: Extract<WordEditorSelection, { kind: 'table-cell-range' }>,\n ): NativeTableClipboardPayload | null => {\n const table = findNativeTableLocation(doc, current.tableId)?.table;\n if (!table) return null;\n const startRow = Math.min(current.anchor.rowIndex, current.focus.rowIndex);\n const endRow = Math.max(current.anchor.rowIndex, current.focus.rowIndex);\n const startColumn = Math.min(current.anchor.columnIndex, current.focus.columnIndex);\n const endColumn = Math.max(current.anchor.columnIndex, current.focus.columnIndex);\n const cells: Array<Array<NativeTableClipboardEntry | null>> = Array.from(\n { length: endRow - startRow + 1 },\n () => Array.from({ length: endColumn - startColumn + 1 }, () => null),\n );\n for (const { cell, rowIndex, columnIndex } of nativeTableCellsInRange(table, current)) {\n const row = cells[rowIndex - startRow];\n if (row && columnIndex >= startColumn && columnIndex <= endColumn) {\n row[columnIndex - startColumn] = {\n text: cell.paragraphs.map((paragraph) => nativeParagraphText(paragraph)).join('\\n'),\n blocks: cloneNativeWordBlocks(cell.blocks),\n format: tableClipboardCellFormat(cell),\n };\n }\n }\n return { version: 1, cells };\n };\n\n const tableClipboardCellFormat = (cell: NativeWordTableCellNode): NativeTableClipboardCell['format'] =>\n JSON.parse(JSON.stringify({\n ...(cell.margin ? { margin: cell.margin } : {}),\n ...(cell.borders ? { borders: cell.borders } : {}),\n ...(cell.shading ? { shading: cell.shading } : {}),\n ...(cell.verticalAlignment ? { verticalAlignment: cell.verticalAlignment } : {}),\n ...(cell.noWrap !== undefined ? { noWrap: cell.noWrap } : {}),\n })) as NativeTableClipboardCell['format'];\n\n const tableClipboardText = (payload: NativeTableClipboardPayload): string =>\n payload.cells\n .map((row) => row.map((value) => (value?.text ?? '').replace(/[\\t\\r\\n]+/g, ' ')).join('\\t'))\n .join('\\n');\n\n const parseRichTableClipboard = (event: ClipboardEvent): NativeTableClipboardPayload | null => {\n const internal = event.clipboardData?.getData(NATIVE_TABLE_CLIPBOARD_TYPE) ?? '';\n if (!internal) return null;\n try {\n const parsed = JSON.parse(internal) as Partial<NativeTableClipboardPayload>;\n if (\n parsed.version === 1 &&\n Array.isArray(parsed.cells) &&\n parsed.cells.every((row) => Array.isArray(row) && row.every((value) =>\n value === null || (\n typeof value === 'object' &&\n typeof value.text === 'string' &&\n Array.isArray(value.blocks) &&\n typeof value.format === 'object'\n )))\n ) {\n return parsed as NativeTableClipboardPayload;\n }\n } catch {\n return null;\n }\n return null;\n };\n\n const parseTableClipboardText = (event: ClipboardEvent): string[][] => {\n const text = event.clipboardData?.getData('text/plain') ?? '';\n if (!text) return [];\n const rows = text.replace(/\\r\\n?/g, '\\n').split('\\n');\n if (rows[rows.length - 1] === '') rows.pop();\n return rows.map((row) => row.split('\\t'));\n };\n\n const copy = (event: ClipboardEvent) => {\n if (selectedImage && event.clipboardData) {\n const imageSelection = selectedImage;\n const image = findNativeParagraph(doc, imageSelection.paraId)?.content.find(\n (child) => child.kind === 'image' && child.drawingId === imageSelection.drawingId,\n );\n if (!image || image.kind !== 'image') return;\n event.preventDefault();\n event.clipboardData.setData(NATIVE_IMAGE_CLIPBOARD_TYPE, storeNativeImageClipboardSource(image.src));\n event.clipboardData.setData('text/html', `<img src=\"${escapeHtmlAttribute(image.src)}\">`);\n void copySelectedImageToSystemClipboard(imageSelection).catch((error: unknown) => {\n console.warn('Unable to copy the selected image', error);\n });\n return;\n }\n const current = selection?.kind === 'object' || selection?.kind === 'table-cell-range'\n ? selection\n : currentNativeSelection(host) ?? selection;\n if (current?.kind === 'table-cell-range' && event.clipboardData) {\n const payload = tableClipboardPayload(current);\n if (!payload) return;\n event.preventDefault();\n event.clipboardData.setData(NATIVE_TABLE_CLIPBOARD_TYPE, JSON.stringify(payload));\n event.clipboardData.setData('text/plain', tableClipboardText(payload));\n return;\n }\n if (current?.kind === 'object' && current.objectKind === 'image' && event.clipboardData) {\n const image = findNativeParagraph(doc, current.paraId)?.content.find(\n (child) => child.kind === 'image' && child.drawingId === current.objectId,\n );\n if (!image || image.kind !== 'image') return;\n event.preventDefault();\n event.clipboardData.setData(NATIVE_IMAGE_CLIPBOARD_TYPE, storeNativeImageClipboardSource(image.src));\n event.clipboardData.setData('text/html', `<img src=\"${escapeHtmlAttribute(image.src)}\">`);\n void copySelectedImageToSystemClipboard({ paraId: current.paraId, drawingId: current.objectId }).catch(\n (error: unknown) => {\n console.warn('Unable to copy the selected image', error);\n },\n );\n return;\n }\n if (current?.kind === 'text-range' && event.clipboardData) {\n const range = orderedSelectionRange(doc, current);\n const blocks = nativeCopyBlockRange(doc, range.anchor, range.focus);\n if (blocks) {\n event.preventDefault();\n event.clipboardData.setData(NATIVE_BLOCK_CLIPBOARD_TYPE, serializeNativeBlockClipboard(blocks));\n event.clipboardData.setData('text/plain', nativeBlockClipboardText(blocks));\n return;\n }\n }\n const text = clipboardTextForSelection(current);\n if (text === null || !event.clipboardData) return;\n event.preventDefault();\n event.clipboardData.setData('text/plain', text);\n const richParagraphs = clipboardParagraphsForSelection(current);\n if (richParagraphs.length > 0) {\n event.clipboardData.setData('text/html', serializeNativeClipboardHtml(richParagraphs));\n }\n };\n\n const copySelectedImageToSystemClipboard = async (imageSelection: NativeSelectedImage): Promise<void> => {\n const image = findNativeParagraph(doc, imageSelection.paraId)?.content.find(\n (child) => child.kind === 'image' && child.drawingId === imageSelection.drawingId,\n );\n if (!image || image.kind !== 'image') return;\n const imageBlob = await clipboardPngBlob(image.src);\n await navigator.clipboard.write([new ClipboardItem({ 'image/png': imageBlob })]);\n };\n\n const cut = (event: ClipboardEvent) => {\n if (selectedImage && event.clipboardData) {\n const imageSelection = selectedImage;\n const image = findNativeParagraph(doc, imageSelection.paraId)?.content.find(\n (child) => child.kind === 'image' && child.drawingId === imageSelection.drawingId,\n );\n if (!image || image.kind !== 'image') return;\n event.preventDefault();\n event.clipboardData.setData(NATIVE_IMAGE_CLIPBOARD_TYPE, storeNativeImageClipboardSource(image.src));\n event.clipboardData.setData('text/html', `<img src=\"${escapeHtmlAttribute(image.src)}\">`);\n const paragraphEl = host.querySelector<HTMLElement>(\n `coco-word-native-p[data-para-id=\"${imageSelection.paraId}\"]`,\n );\n const imageEl = host.querySelector<HTMLImageElement>(\n `img[data-drawing-id=\"${imageSelection.drawingId}\"]`,\n );\n if (!paragraphEl || !imageEl) return;\n deleteImageWithHistory(imageSelection.paraId, imageSelection.drawingId, {\n paraId: imageSelection.paraId,\n offset: imageOffset(paragraphEl, imageEl),\n });\n return;\n }\n const current = selection?.kind === 'object' || selection?.kind === 'table-cell-range'\n ? selection\n : currentNativeSelection(host) ?? selection;\n if (current?.kind === 'table-cell-range' && event.clipboardData) {\n const payload = tableClipboardPayload(current);\n if (!payload) return;\n event.preventDefault();\n event.clipboardData.setData(NATIVE_TABLE_CLIPBOARD_TYPE, JSON.stringify(payload));\n event.clipboardData.setData('text/plain', tableClipboardText(payload));\n applyLocalTableCellClear(current);\n return;\n }\n if (current?.kind === 'object' && current.objectKind === 'image' && event.clipboardData) {\n const image = findNativeParagraph(doc, current.paraId)?.content.find(\n (child) => child.kind === 'image' && child.drawingId === current.objectId,\n );\n if (!image || image.kind !== 'image') return;\n event.preventDefault();\n event.clipboardData.setData(NATIVE_IMAGE_CLIPBOARD_TYPE, storeNativeImageClipboardSource(image.src));\n event.clipboardData.setData('text/html', `<img src=\"${escapeHtmlAttribute(image.src)}\">`);\n deleteImageWithHistory(current.paraId, current.objectId, { paraId: current.paraId, offset: current.offset });\n return;\n }\n if (current?.kind === 'text-range' && event.clipboardData) {\n const range = orderedSelectionRange(doc, current);\n const blocks = nativeCopyBlockRange(doc, range.anchor, range.focus);\n if (blocks) {\n event.preventDefault();\n event.clipboardData.setData(NATIVE_BLOCK_CLIPBOARD_TYPE, serializeNativeBlockClipboard(blocks));\n event.clipboardData.setData('text/plain', nativeBlockClipboardText(blocks));\n applyLocalBlockRangeReplacement(range, '');\n return;\n }\n }\n const text = clipboardTextForSelection(current);\n if (text === null || current?.kind !== 'text-range' || !event.clipboardData) return;\n event.preventDefault();\n event.clipboardData.setData('text/plain', text);\n const richParagraphs = clipboardParagraphsForSelection(current);\n if (richParagraphs.length > 0) {\n event.clipboardData.setData('text/html', serializeNativeClipboardHtml(richParagraphs));\n }\n applyLocalPlainTextReplacement(orderedSelectionRange(doc, current), '');\n };\n\n const paste = (event: ClipboardEvent) => {\n const tableSelection = selection?.kind === 'table-cell-range' ? selection : null;\n if (tableSelection) {\n const rich = parseRichTableClipboard(event);\n const text = rich ? [] : parseTableClipboardText(event);\n if (\n (rich && applyLocalTableCellPaste(tableSelection, { content: rich.cells })) ||\n (text.length > 0 && applyLocalTableCellPaste(tableSelection, { text }))\n ) {\n event.preventDefault();\n }\n return;\n }\n const nativeBlocks = parseNativeBlockClipboard(\n event.clipboardData?.getData(NATIVE_BLOCK_CLIPBOARD_TYPE) ?? '',\n );\n if (nativeBlocks) {\n const current = currentNativeSelection(host) ?? selection ?? nativeSelectionFromCursor(host);\n if (!current || current.kind === 'object' || current.kind === 'table-cell-range') return;\n const range = current.kind === 'text-range'\n ? orderedSelectionRange(doc, current)\n : { anchor: { paraId: current.paraId, offset: current.offset }, focus: { paraId: current.paraId, offset: current.offset } };\n if (applyLocalClipboardBlocks(range, nativeBlocks)) {\n event.preventDefault();\n return;\n }\n }\n const nativeImageSrc = resolveNativeImageClipboardSource(\n event.clipboardData?.getData(NATIVE_IMAGE_CLIPBOARD_TYPE) ?? '',\n );\n if (nativeImageSrc) {\n const current = currentNativeSelection(host) ?? selection ?? nativeSelectionFromCursor(host);\n if (!current || current.kind === 'object' || current.kind === 'table-cell-range') return;\n const range = current.kind === 'text-range'\n ? orderedSelectionRange(doc, current)\n : { anchor: { paraId: current.paraId, offset: current.offset }, focus: { paraId: current.paraId, offset: current.offset } };\n event.preventDefault();\n applyLocalImageReplacement(range, nativeImageSrc);\n return;\n }\n const image = Array.from(event.clipboardData?.files ?? []).find((file) => file.type.startsWith('image/'));\n if (image) {\n const current = currentNativeSelection(host) ?? selection ?? nativeSelectionFromCursor(host);\n if (!current || current.kind === 'object' || current.kind === 'table-cell-range') return;\n const range = current.kind === 'text-range'\n ? orderedSelectionRange(doc, current)\n : { anchor: { paraId: current.paraId, offset: current.offset }, focus: { paraId: current.paraId, offset: current.offset } };\n event.preventDefault();\n void blobToDataUrl(image).then((src) => applyLocalImageReplacement(range, src));\n return;\n }\n const html = event.clipboardData?.getData('text/html') ?? '';\n const richParagraphs = html ? parseNativeClipboardHtml(html) : [];\n const text = richParagraphs.length > 0\n ? richParagraphs.map((paragraph) => paragraph.text).join('\\n')\n : event.clipboardData?.getData('text/plain');\n if (text === undefined) return;\n const current = currentNativeSelection(host) ?? selection ?? nativeSelectionFromCursor(host);\n if (!current || current.kind === 'object' || current.kind === 'table-cell-range') return;\n const range =\n current.kind === 'text-range'\n ? orderedSelectionRange(doc, current)\n : { anchor: { paraId: current.paraId, offset: current.offset }, focus: { paraId: current.paraId, offset: current.offset } };\n event.preventDefault();\n applyLocalPlainTextReplacement(range, text, richParagraphs.length > 0 ? richParagraphs : undefined);\n };\n\n const deleteContextSelection = (): boolean => {\n const current = selection ?? currentNativeSelection(host) ?? nativeSelectionFromCursor(host);\n if (current?.kind === 'object' && current.objectKind === 'image') {\n return deleteImageWithHistory(current.paraId, current.objectId, { paraId: current.paraId, offset: current.offset });\n }\n if (current?.kind === 'text-range') {\n return applyLocalPlainTextReplacement(orderedSelectionRange(doc, current), '');\n }\n if (current?.kind === 'table-cell-range') return applyLocalTableCellClear(current);\n return false;\n };\n\n const pasteContextText = async (): Promise<void> => {\n if (typeof navigator.clipboard?.readText !== 'function') return;\n try {\n const text = await navigator.clipboard.readText();\n const current = selection ?? currentNativeSelection(host) ?? nativeSelectionFromCursor(host);\n if (!current || current.kind === 'object') return;\n if (current.kind === 'table-cell-range') {\n const rows = text.replace(/\\r\\n?/g, '\\n').split('\\n').map((row) => row.split('\\t'));\n applyLocalTableCellPaste(current, { text: rows });\n return;\n }\n const range = current.kind === 'text-range'\n ? orderedSelectionRange(doc, current)\n : { anchor: { paraId: current.paraId, offset: current.offset }, focus: { paraId: current.paraId, offset: current.offset } };\n applyLocalPlainTextReplacement(range, text);\n } catch (error) {\n console.warn('Unable to paste from the context menu', error);\n }\n };\n\n const openCommentDialog = (mode: 'add' | 'edit' | 'reply' = 'add', commentId?: number, initialBody = ''): void => {\n const overlay = document.createElement('div');\n overlay.className = 'coco-word-dialog-backdrop';\n const dialog = document.createElement('section');\n dialog.className = 'coco-word-dialog';\n dialog.setAttribute('role', 'dialog');\n dialog.setAttribute('aria-modal', 'true');\n dialog.setAttribute('aria-labelledby', 'coco-word-comment-dialog-title');\n const title = document.createElement('h2');\n title.id = 'coco-word-comment-dialog-title';\n title.textContent = mode === 'edit' ? '编辑批注' : mode === 'reply' ? '回复批注' : '添加批注';\n const textarea = document.createElement('textarea');\n textarea.className = 'coco-word-dialog-input';\n textarea.placeholder = '批注内容';\n textarea.rows = 4;\n textarea.value = initialBody;\n const actions = document.createElement('div');\n actions.className = 'coco-word-dialog-actions';\n const cancel = document.createElement('button');\n cancel.type = 'button';\n cancel.className = 'coco-word-dialog-button is-secondary';\n cancel.textContent = '取消';\n const confirm = document.createElement('button');\n confirm.type = 'button';\n confirm.className = 'coco-word-dialog-button is-primary';\n confirm.textContent = '确定';\n const close = () => overlay.remove();\n cancel.addEventListener('click', close);\n overlay.addEventListener('click', (event) => {\n if (event.target === overlay) close();\n });\n dialog.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') close();\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n confirm.click();\n }\n });\n confirm.addEventListener('click', () => {\n const body = textarea.value.trim();\n if (!body) {\n textarea.focus();\n return;\n }\n if (mode === 'edit' && commentId !== undefined) dispatch({ kind: 'edit-comment', commentId, body });\n else if (mode === 'reply' && commentId !== undefined) dispatch({ kind: 'reply-comment', commentId, body });\n else dispatch({ kind: 'add-comment', body });\n close();\n });\n actions.append(cancel, confirm);\n dialog.append(title, textarea, actions);\n overlay.appendChild(dialog);\n (shadowRoot ?? document.body).appendChild(overlay);\n textarea.focus();\n };\n\n const contextMenuItems = (): NativeContextMenuItem[] => {\n const current = selection ?? currentNativeSelection(host) ?? nativeSelectionFromCursor(host);\n const state = getCommandState(current);\n const hasSelection = current?.kind === 'text-range' || current?.kind === 'object' || current?.kind === 'table-cell-range';\n const items: NativeContextMenuItem[] = [\n {\n label: '剪切',\n disabled: !hasSelection,\n action: () => document.execCommand('cut'),\n },\n { label: '复制', disabled: !hasSelection, action: () => document.execCommand('copy') },\n {\n label: '粘贴为纯文本',\n disabled: current?.kind === 'object' || typeof navigator.clipboard?.readText !== 'function',\n action: pasteContextText,\n },\n { label: '删除', disabled: !hasSelection, action: () => deleteContextSelection() },\n ];\n if (current?.kind === 'text-range') {\n items.push({\n label: '添加批注',\n separatorBefore: true,\n action: openCommentDialog,\n });\n items.push({\n label: '标记为插入修订',\n action: () => dispatch({ kind: 'add-revision', revisionKind: 'insert' }),\n });\n items.push({\n label: '标记为删除修订',\n action: () => dispatch({ kind: 'add-revision', revisionKind: 'delete' }),\n });\n items.push({\n label: state.bold === true ? '取消加粗' : '加粗',\n separatorBefore: true,\n disabled: !canDispatchNativeWordCommand(doc, current, { kind: 'toggle-bold' }),\n action: () => dispatch({ kind: 'toggle-bold' }),\n });\n items.push({ label: '清除文本格式', action: () => dispatch({ kind: 'clear-text-format' }) });\n if (state.hyperlink !== null) {\n items.push({\n label: '移除超链接',\n disabled: !canDispatchNativeWordCommand(doc, current, { kind: 'remove-hyperlink' }),\n action: () => dispatch({ kind: 'remove-hyperlink' }),\n });\n }\n }\n if (current?.kind === 'caret' && canDispatchNativeWordCommand(doc, current, {\n kind: 'insert-table',\n rows: 2,\n columns: 2,\n })) {\n items.push({\n label: '插入 2 × 2 表格',\n separatorBefore: true,\n action: () => dispatch({ kind: 'insert-table', rows: 2, columns: 2 }),\n });\n }\n if (current?.kind === 'object' && current.objectKind === 'image') {\n items.push({\n label: '图片左对齐',\n separatorBefore: true,\n action: () => dispatch({ kind: 'set-image-alignment', objectId: current.objectId, alignment: 'left' }),\n });\n items.push({\n label: '图片居中',\n action: () => dispatch({ kind: 'set-image-alignment', objectId: current.objectId, alignment: 'center' }),\n });\n items.push({\n label: '图片右对齐',\n action: () => dispatch({ kind: 'set-image-alignment', objectId: current.objectId, alignment: 'right' }),\n });\n }\n if (state.table) {\n const range = state.table.range ?? {\n startRow: state.table.rowIndex,\n endRow: state.table.rowIndex,\n startColumn: state.table.columnIndex,\n endColumn: state.table.columnIndex,\n cellCount: 1,\n };\n items.push({\n label: '选择整行',\n separatorBefore: true,\n action: () => setSelection({\n kind: 'table-cell-range',\n tableId: state.table!.tableId,\n anchor: { rowIndex: range.startRow, columnIndex: 0 },\n focus: { rowIndex: range.endRow, columnIndex: Math.max(0, state.table!.columnCount - 1) },\n }),\n });\n items.push({\n label: '选择整列',\n action: () => setSelection({\n kind: 'table-cell-range',\n tableId: state.table!.tableId,\n anchor: { rowIndex: 0, columnIndex: range.startColumn },\n focus: { rowIndex: Math.max(0, state.table!.rowCount - 1), columnIndex: range.endColumn },\n }),\n });\n items.push({\n label: '在上方插入行',\n disabled: !canDispatchNativeWordCommand(doc, current, { kind: 'insert-table-row', position: 'before' }),\n action: () => dispatch({ kind: 'insert-table-row', position: 'before' }),\n });\n items.push({\n label: '在下方插入行',\n disabled: !canDispatchNativeWordCommand(doc, current, { kind: 'insert-table-row', position: 'after' }),\n action: () => dispatch({ kind: 'insert-table-row', position: 'after' }),\n });\n items.push({\n label: '删除当前行',\n disabled: !canDispatchNativeWordCommand(doc, current, { kind: 'delete-table-row' }),\n action: () => dispatch({ kind: 'delete-table-row' }),\n });\n items.push({\n label: '在左侧插入列',\n disabled: !canDispatchNativeWordCommand(doc, current, { kind: 'insert-table-column', position: 'before' }),\n action: () => dispatch({ kind: 'insert-table-column', position: 'before' }),\n });\n items.push({\n label: '在右侧插入列',\n disabled: !canDispatchNativeWordCommand(doc, current, { kind: 'insert-table-column', position: 'after' }),\n action: () => dispatch({ kind: 'insert-table-column', position: 'after' }),\n });\n items.push({\n label: '删除当前列',\n disabled: !canDispatchNativeWordCommand(doc, current, { kind: 'delete-table-column' }),\n action: () => dispatch({ kind: 'delete-table-column' }),\n });\n items.push({\n label: '删除表格',\n separatorBefore: true,\n disabled: !canDispatchNativeWordCommand(doc, current, { kind: 'delete-table' }),\n action: () => dispatch({ kind: 'delete-table' }),\n });\n for (const [label, alignment] of [\n ['单元格顶部对齐', 'top'],\n ['单元格垂直居中', 'center'],\n ['单元格底部对齐', 'bottom'],\n ] as const) {\n items.push({\n label,\n action: () => dispatch({ kind: 'set-table-cell-vertical-alignment', alignment }),\n });\n }\n }\n items.push(\n { label: '撤销', separatorBefore: true, disabled: !browserUndoStack.length, action: () => undo() },\n { label: '重做', disabled: !browserRedoStack.length, action: () => redo() },\n );\n return items;\n };\n\n const selectContextTarget = (event: MouseEvent): WordEditorSelection | null => {\n const target = event.target;\n if (target instanceof HTMLImageElement) {\n const paragraph = parentNativeParagraph(target);\n const paraId = paragraph?.dataset.paraId;\n const drawingId = target.dataset.drawingId;\n if (paragraph && paraId && drawingId) {\n const next: WordEditorSelection = {\n kind: 'object',\n paraId,\n objectKind: 'image',\n objectId: drawingId,\n offset: imageOffset(paragraph, target),\n };\n selectedImage = { paraId, drawingId };\n showImageResizeHandle();\n setSelection(next);\n return next;\n }\n }\n const tableCell = tableCellTarget(target);\n if (tableCell) {\n if (selection?.kind === 'table-cell-range' && selection.tableId === tableCell.tableId) {\n const startRow = Math.min(selection.anchor.rowIndex, selection.focus.rowIndex);\n const endRow = Math.max(selection.anchor.rowIndex, selection.focus.rowIndex);\n const startColumn = Math.min(selection.anchor.columnIndex, selection.focus.columnIndex);\n const endColumn = Math.max(selection.anchor.columnIndex, selection.focus.columnIndex);\n if (\n tableCell.point.rowIndex >= startRow && tableCell.point.rowIndex <= endRow &&\n tableCell.point.columnIndex >= startColumn && tableCell.point.columnIndex <= endColumn\n ) {\n return selection;\n }\n }\n const next: WordEditorSelection = {\n kind: 'table-cell-range',\n tableId: tableCell.tableId,\n anchor: tableCell.point,\n focus: tableCell.point,\n };\n nativeSelection(host)?.removeAllRanges();\n setSelection(next);\n return next;\n }\n const point = nativeCursorFromPoint(host, event.clientX, event.clientY) ?? currentNativeCursor(host);\n if (!point) return selection;\n if (selection?.kind === 'text-range') {\n const ordered = orderedSelectionRange(doc, selection);\n const start = findNativeParagraphLocation(doc, ordered.anchor.paraId);\n const end = findNativeParagraphLocation(doc, ordered.focus.paraId);\n const target = findNativeParagraphLocation(doc, point.paraId);\n if (start && end && target && start.container === end.container && start.container === target.container) {\n const afterStart = target.index > start.index || (target.index === start.index && point.offset >= ordered.anchor.offset);\n const beforeEnd = target.index < end.index || (target.index === end.index && point.offset <= ordered.focus.offset);\n if (afterStart && beforeEnd) return selection;\n }\n }\n selectedImage = null;\n clearNativeImageSelection(host);\n restoreNativeCursor(host, point);\n const next: WordEditorSelection = { kind: 'caret', ...point };\n setSelection(next);\n return next;\n };\n\n const contextMenu = (event: MouseEvent) => {\n if (options.contextMenu === false) return;\n event.preventDefault();\n event.stopPropagation();\n activate();\n closeContextMenu();\n selectContextTarget(event);\n const menu = document.createElement('div');\n menu.className = 'coco-word-context-menu';\n menu.setAttribute('role', 'menu');\n menu.contentEditable = 'false';\n for (const item of contextMenuItems()) {\n if (item.separatorBefore) {\n const separator = document.createElement('div');\n separator.className = 'coco-word-context-menu-separator';\n separator.setAttribute('role', 'separator');\n menu.appendChild(separator);\n }\n const button = document.createElement('button');\n button.type = 'button';\n button.className = 'coco-word-context-menu-item';\n button.textContent = item.label;\n button.disabled = item.disabled ?? false;\n button.setAttribute('role', 'menuitem');\n button.addEventListener('mousedown', (pointerEvent) => pointerEvent.preventDefault());\n button.addEventListener('click', () => {\n const result = item.action();\n closeContextMenu();\n if (result instanceof Promise) {\n void result.catch((error: unknown) => console.warn('Context menu action failed', error));\n }\n });\n menu.appendChild(button);\n }\n (shadowRoot ?? document.body).appendChild(menu);\n contextMenuElement = menu;\n const rect = menu.getBoundingClientRect();\n menu.style.left = `${Math.max(4, Math.min(event.clientX, window.innerWidth - rect.width - 4))}px`;\n menu.style.top = `${Math.max(4, Math.min(event.clientY, window.innerHeight - rect.height - 4))}px`;\n };\n\n const closeContextMenuFromPointer = (event: PointerEvent) => {\n if (contextMenuElement && !contextMenuElement.contains(event.target as Node)) closeContextMenu();\n };\n\n const closeContextMenuFromKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') closeContextMenu();\n };\n\n const beforeInput = (event: InputEvent) => {\n if (event.inputType === suppressedBrowserHistoryInput) {\n event.preventDefault();\n suppressedBrowserHistoryInput = null;\n if (browserHistorySuppressionTimer !== null) window.clearTimeout(browserHistorySuppressionTimer);\n browserHistorySuppressionTimer = null;\n return;\n }\n if (event.inputType === 'historyUndo' && undo()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if (event.inputType === 'historyRedo' && redo()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if (\n event.isComposing ||\n compositionActive ||\n pendingCompositionTransaction ||\n event.inputType === 'insertCompositionText' ||\n event.inputType === 'deleteCompositionText' ||\n event.inputType === 'insertFromComposition'\n ) {\n return;\n }\n if (selectedImage && event.inputType === 'deleteContentBackward') {\n event.preventDefault();\n const point = { paraId: selectedImage.paraId, offset: 0 };\n deleteImageWithHistory(selectedImage.paraId, selectedImage.drawingId, point);\n return;\n }\n const domSelection = currentNativeSelection(host);\n const nativeSelection =\n domSelection?.kind === 'text-range'\n ? domSelection\n : selection?.kind === 'text-range'\n ? selection\n : domSelection;\n if (\n trackRevisions &&\n nativeSelection &&\n (event.inputType === 'insertText' ||\n event.inputType === 'deleteContentBackward' ||\n event.inputType === 'deleteContentForward')\n ) {\n const sameParagraph = nativeSelection.kind === 'caret' ||\n (nativeSelection.kind === 'text-range' && nativeSelection.anchor.paraId === nativeSelection.focus.paraId);\n if (sameParagraph) {\n event.preventDefault();\n if (event.inputType === 'insertText' && event.data) {\n if (nativeSelection.kind === 'caret') dispatch({ kind: 'insert-text', text: event.data });\n else dispatch({ kind: 'replace-range', anchor: nativeSelection.anchor, focus: nativeSelection.focus, text: event.data });\n } else if (event.inputType === 'deleteContentBackward') {\n if (nativeSelection.kind === 'text-range' && nativeSelection.anchor.offset !== nativeSelection.focus.offset) {\n dispatch({ kind: 'delete-range', anchor: nativeSelection.anchor, focus: nativeSelection.focus });\n } else dispatch({ kind: 'delete-backward' });\n } else if (event.inputType === 'deleteContentForward') {\n if (nativeSelection.kind === 'text-range' && nativeSelection.anchor.offset !== nativeSelection.focus.offset) {\n dispatch({ kind: 'delete-range', anchor: nativeSelection.anchor, focus: nativeSelection.focus });\n } else dispatch({ kind: 'delete-forward' });\n }\n return;\n }\n if (\n nativeSelection.kind === 'text-range' &&\n (event.inputType === 'deleteContentBackward' || event.inputType === 'deleteContentForward')\n ) {\n event.preventDefault();\n dispatch({ kind: 'delete-range', anchor: nativeSelection.anchor, focus: nativeSelection.focus });\n return;\n }\n }\n if (nativeSelection?.kind === 'text-range' && nativeSelection.anchor.paraId === nativeSelection.focus.paraId) {\n const range = normalizedSelectionRange(nativeSelection.anchor.offset, nativeSelection.focus.offset);\n if (\n canBrowserEditParagraphText(nativeSelection.anchor.paraId) &&\n ((event.inputType === 'insertText' && event.data) ||\n event.inputType === 'deleteContentBackward' ||\n event.inputType === 'deleteContentForward')\n ) {\n selectedImage = null;\n captureTypingLayoutBaseline(nativeSelection.anchor.paraId);\n beginTableBrowserTypingTransaction({\n anchor: { paraId: nativeSelection.anchor.paraId, offset: range.from },\n focus: { paraId: nativeSelection.focus.paraId, offset: range.to },\n });\n setSelection(nativeSelection);\n return;\n }\n if (event.inputType === 'insertText' && event.data) {\n event.preventDefault();\n selectedImage = null;\n setSelection({ kind: 'caret', paraId: nativeSelection.anchor.paraId, offset: range.from + event.data.length });\n record(nativeReplaceRange(doc, nativeSelection.anchor.paraId, range.from, range.to, event.data), {\n paraId: nativeSelection.anchor.paraId,\n offset: range.from + event.data.length,\n }, { localParaId: nativeSelection.anchor.paraId });\n return;\n }\n if (event.inputType === 'deleteContentBackward' || event.inputType === 'deleteContentForward') {\n event.preventDefault();\n selectedImage = null;\n if (applyLocalPageBreakRangeDelete(nativeSelection)) return;\n setSelection({ kind: 'caret', paraId: nativeSelection.anchor.paraId, offset: range.from });\n record(nativeDeleteRange(doc, nativeSelection.anchor.paraId, range.from, range.to), {\n paraId: nativeSelection.anchor.paraId,\n offset: range.from,\n }, { localParaId: nativeSelection.anchor.paraId });\n return;\n }\n }\n if (nativeSelection?.kind === 'text-range' && nativeSelection.anchor.paraId !== nativeSelection.focus.paraId) {\n const range = orderedSelectionRange(doc, nativeSelection);\n if (event.inputType === 'insertText' && event.data) {\n event.preventDefault();\n selectedImage = null;\n if (applyLocalBlockRangeReplacement(range, event.data)) return;\n applyLocalRangeReplacement(range, event.data);\n return;\n }\n if (event.inputType === 'deleteContentBackward' || event.inputType === 'deleteContentForward') {\n if (applyLocalBlockRangeReplacement(range, '')) {\n event.preventDefault();\n return;\n }\n if (!selectionSpansPages(range) && captureBrowserRangeDelete(range)) {\n selectedImage = null;\n setSelection({ kind: 'caret', paraId: range.anchor.paraId, offset: range.anchor.offset });\n return;\n }\n event.preventDefault();\n selectedImage = null;\n setSelection({ kind: 'caret', paraId: range.anchor.paraId, offset: range.anchor.offset });\n applyLocalRangeReplacement(range, '');\n return;\n }\n event.preventDefault();\n setSelection(nativeSelection);\n return;\n }\n\n const point = nativeSelection?.kind === 'caret' ? nativeSelection : currentNativeCursor(host);\n if (!point) return;\n selectedImage = null;\n setSelection({ kind: 'caret', paraId: point.paraId, offset: point.offset });\n if (event.inputType === 'insertText' && event.data && event.data !== '\\n' && event.data !== '\\r') {\n if (canBrowserEditParagraphText(point.paraId)) {\n captureTypingLayoutBaseline(point.paraId);\n beginTableBrowserTypingTransaction({ anchor: point, focus: point });\n return;\n }\n }\n if (event.inputType === 'deleteContentBackward') {\n if (point.offset > 0 && canBrowserEditParagraphText(point.paraId)) {\n captureTypingLayoutBaseline(point.paraId);\n beginTableBrowserTypingTransaction({ anchor: point, focus: point });\n return;\n }\n }\n if (event.inputType === 'deleteContentForward') {\n if (point.offset < paragraphTextLength(point.paraId) && canBrowserEditParagraphText(point.paraId)) {\n captureTypingLayoutBaseline(point.paraId);\n beginTableBrowserTypingTransaction({ anchor: point, focus: point });\n return;\n }\n }\n if (\n (event.inputType === 'insertText' && (event.data === '\\n' || event.data === '\\r')) ||\n event.inputType === 'insertParagraph'\n ) {\n event.preventDefault();\n if (suppressNextEnterBeforeInput) {\n suppressNextEnterBeforeInput = false;\n if (clearEnterSuppressionTimer !== null) window.clearTimeout(clearEnterSuppressionTimer);\n clearEnterSuppressionTimer = null;\n return;\n }\n splitParagraphLocally(point);\n } else if (event.inputType === 'insertText' && event.data) {\n event.preventDefault();\n record(nativeInsertText(doc, point.paraId, point.offset, event.data), {\n paraId: point.paraId,\n offset: point.offset + event.data.length,\n }, { localParaId: point.paraId });\n } else if (event.inputType === 'deleteContentBackward') {\n event.preventDefault();\n if (applyLocalPageBreakEdit(point, 'delete-backward')) return;\n if (deletePageBreakAcrossParagraphBoundary({ kind: 'caret', ...point }, 'backward')) return;\n if (mergeParagraphBackwardLocally(point)) return;\n const paragraph = findNativeParagraph(doc, point.paraId);\n const beforeParagraph = paragraph ? cloneNativeParagraph(paragraph) : null;\n const change = nativeDeleteBackward(doc, point.paraId, point.offset);\n const cursor = {\n paraId: point.offset > 0 ? point.paraId : previousNativeParagraphId(doc, point.paraId) ?? point.paraId,\n offset: Math.max(0, point.offset - 1),\n };\n if (change?.kind === 'image') {\n recordImageDeletion(beforeParagraph, change, cursor);\n } else {\n record(change, cursor, change?.kind === 'block' ? {} : { localParaId: point.paraId });\n }\n } else if (event.inputType === 'deleteContentForward') {\n event.preventDefault();\n if (applyLocalPageBreakEdit(point, 'delete-forward')) return;\n if (deletePageBreakAcrossParagraphBoundary({ kind: 'caret', ...point }, 'forward')) return;\n if (mergeParagraphForwardLocally(point)) return;\n const paragraph = findNativeParagraph(doc, point.paraId);\n const beforeParagraph = paragraph ? cloneNativeParagraph(paragraph) : null;\n const change = nativeDeleteForward(doc, point.paraId, point.offset);\n const cursor = {\n paraId: point.paraId,\n offset: point.offset,\n };\n if (change?.kind === 'image') {\n recordImageDeletion(beforeParagraph, change, cursor);\n } else {\n record(change, cursor, { localParaId: point.paraId });\n }\n }\n };\n\n const keyDown = (event: KeyboardEvent) => {\n if (destroyed) return;\n if (event.currentTarget === document) {\n if (event.composedPath().includes(host) || activeNativeWordHostByDocument.get(document) !== host) return;\n } else {\n activate();\n }\n if (compositionActive || event.isComposing || event.keyCode === 229) return;\n const isCopy =\n (event.ctrlKey || event.metaKey) && !event.shiftKey && event.key.toLowerCase() === 'c';\n if (\n isCopy &&\n selectedImage &&\n typeof navigator.clipboard?.write === 'function' &&\n typeof ClipboardItem !== 'undefined'\n ) {\n const imageSelection = selectedImage;\n event.preventDefault();\n event.stopPropagation();\n void copySelectedImageToSystemClipboard(imageSelection).catch((error: unknown) => {\n console.warn('Unable to copy the selected image', error);\n });\n return;\n }\n const isUndo = (event.ctrlKey || event.metaKey) && !event.shiftKey && event.key.toLowerCase() === 'z';\n const isRedo =\n ((event.ctrlKey || event.metaKey) && event.shiftKey && event.key.toLowerCase() === 'z') ||\n ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'y');\n if ((isUndo || isRedo) && suppressedBrowserHistoryInput) {\n suppressedBrowserHistoryInput = null;\n if (browserHistorySuppressionTimer !== null) window.clearTimeout(browserHistorySuppressionTimer);\n browserHistorySuppressionTimer = null;\n }\n const historyPoint = isUndo || isRedo ? currentNativeCursor(host) : null;\n const historyParaId = historyPoint?.paraId ?? (selection && 'paraId' in selection ? selection.paraId : null);\n if (isUndo && undo()) {\n suppressBrowserHistoryInput('historyUndo');\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if (isRedo && redo()) {\n suppressBrowserHistoryInput('historyRedo');\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if ((event.ctrlKey || event.metaKey) && !event.shiftKey && event.key === 'Enter') {\n const current = selection ?? currentNativeSelection(host) ?? nativeSelectionFromCursor(host);\n if (current?.kind === 'caret' && dispatch({ kind: 'insert-page-break' })) {\n event.preventDefault();\n event.stopPropagation();\n }\n return;\n }\n if (isUndo || isRedo) {\n if (nativeHistorySyncTimer !== null) window.clearTimeout(nativeHistorySyncTimer);\n tableResizeObserver.disconnect();\n nativeHistorySyncTimer = window.setTimeout(() => {\n nativeHistorySyncTimer = null;\n const cursor = currentNativeCursor(host);\n const paraId = cursor?.paraId ?? historyParaId;\n if (!paraId) return;\n const paragraphEl = host.querySelector<HTMLElement>(`coco-word-native-p[data-para-id=\"${paraId}\"]`);\n const paragraph = findNativeParagraph(doc, paraId);\n if (paragraphEl && paragraph && paragraph.content.every((child) => child.kind === 'text')) {\n const change = nativeSyncParagraphText(doc, paraId, paragraphEl.textContent ?? '');\n if (change) {\n changes.push(change);\n notifyChange('deferred');\n }\n }\n reflowFromParagraph(paraId, cursor ?? undefined);\n }, 120);\n }\n if (selection?.kind === 'table-cell-range') {\n if (event.key === 'Escape') {\n event.preventDefault();\n setSelection(null);\n return;\n }\n if (event.key === 'Enter' || event.key === 'F2') {\n const table = findNativeTableLocation(doc, selection.tableId)?.table;\n const cell = table ? nativeTableCellsInRange(table, selection)[0]?.cell : null;\n const paragraph = cell?.paragraphs[0];\n if (paragraph) {\n event.preventDefault();\n const point = { paraId: paragraph.paraId, offset: nativeParagraphText(paragraph).length };\n restoreNativeCursor(host, point);\n setSelection({ kind: 'caret', ...point });\n }\n return;\n }\n const movement = event.key === 'ArrowLeft'\n ? { row: 0, column: -1 }\n : event.key === 'ArrowRight'\n ? { row: 0, column: 1 }\n : event.key === 'ArrowUp'\n ? { row: -1, column: 0 }\n : event.key === 'ArrowDown'\n ? { row: 1, column: 0 }\n : null;\n if (movement) {\n const table = findNativeTableLocation(doc, selection.tableId)?.table;\n const columnCount = table\n ? Math.max(1, ...table.rows.map((row) => row.cells.reduce((sum, cell) => sum + Math.max(1, cell.gridSpan), 0)))\n : 1;\n const focus = {\n rowIndex: Math.max(0, Math.min((table?.rows.length ?? 1) - 1, selection.focus.rowIndex + movement.row)),\n columnIndex: Math.max(0, Math.min(columnCount - 1, selection.focus.columnIndex + movement.column)),\n };\n event.preventDefault();\n setSelection({\n kind: 'table-cell-range',\n tableId: selection.tableId,\n anchor: event.shiftKey ? selection.anchor : focus,\n focus,\n });\n return;\n }\n }\n if (\n !event.shiftKey &&\n ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End', 'PageUp', 'PageDown'].includes(event.key)\n ) {\n activeLocalTypingTransaction = null;\n }\n if (selectedImage && (event.key === 'Backspace' || event.key === 'Delete')) {\n event.preventDefault();\n const point = { paraId: selectedImage.paraId, offset: 0 };\n deleteImageWithHistory(selectedImage.paraId, selectedImage.drawingId, point);\n return;\n }\n if (selection?.kind === 'table-cell-range' && (event.key === 'Backspace' || event.key === 'Delete')) {\n event.preventDefault();\n event.stopPropagation();\n applyLocalTableCellClear(selection);\n return;\n }\n if (event.key !== 'Enter') return;\n const point = currentNativeCursor(host);\n if (!point) return;\n event.preventDefault();\n event.stopPropagation();\n const paragraph = findNativeParagraph(doc, point.paraId);\n if (\n paragraph?.format?.hasNumbering &&\n paragraph.format.numbering &&\n nativeParagraphText(paragraph).length === 0\n ) {\n selectedImage = null;\n setSelection({ kind: 'caret', paraId: point.paraId, offset: 0 });\n dispatch({ kind: 'remove-list' });\n return;\n }\n selectedImage = null;\n suppressNextEnterBeforeInput = true;\n if (clearEnterSuppressionTimer !== null) window.clearTimeout(clearEnterSuppressionTimer);\n clearEnterSuppressionTimer = window.setTimeout(() => {\n suppressNextEnterBeforeInput = false;\n clearEnterSuppressionTimer = null;\n }, 0);\n splitParagraphLocally(point);\n };\n\n const documentBeforeInput = (event: InputEvent) => {\n if (\n destroyed ||\n event.composedPath().includes(host) ||\n activeNativeWordHostByDocument.get(document) !== host\n ) {\n return;\n }\n if (event.inputType === 'historyUndo' && undo()) {\n event.preventDefault();\n event.stopPropagation();\n } else if (event.inputType === 'historyRedo' && redo()) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n const setRevisionGroupExpanded = (group: HTMLElement, expanded: boolean) => {\n const list = group.querySelector<HTMLElement>(':scope > .coco-word-native-revision-group-list');\n const toggle = group.querySelector<HTMLElement>(':scope > .coco-word-native-revision-group-toggle');\n if (!list || !toggle) return;\n group.classList.toggle('is-expanded', expanded);\n list.hidden = !expanded;\n toggle.setAttribute('aria-expanded', String(expanded));\n const affordance = toggle.querySelector<HTMLElement>('.coco-word-native-revision-group-affordance');\n if (affordance) affordance.textContent = expanded ? '收起' : '展开';\n };\n\n const collapseOtherRevisionGroups = (except?: HTMLElement) => {\n host.querySelectorAll<HTMLElement>('.coco-word-native-revision-group.is-expanded').forEach((group) => {\n if (group !== except) setRevisionGroupExpanded(group, false);\n });\n };\n\n const click = (event: MouseEvent) => {\n const revisionAction = event.composedPath().find((item): item is HTMLButtonElement =>\n item instanceof HTMLButtonElement && item.matches('[data-revision-action][data-revision-id]'),\n ) ?? (event.target instanceof Element\n ? event.target.closest<HTMLButtonElement>('[data-revision-action][data-revision-id]')\n : null);\n if (revisionAction) {\n event.preventDefault();\n event.stopPropagation();\n const revisionId = revisionAction.dataset.revisionId;\n if (revisionId) {\n dispatch({\n kind: revisionAction.dataset.revisionAction === 'accept' ? 'accept-revision' : 'reject-revision',\n revisionId,\n revisionKind: revisionAction.dataset.revisionKind as 'insert' | 'delete' | 'format' | undefined,\n });\n }\n return;\n }\n const revisionGroupToggle = event.composedPath().find((item): item is HTMLButtonElement =>\n item instanceof HTMLButtonElement && item.matches('[data-revision-group-toggle]'),\n ) ?? (event.target instanceof Element\n ? event.target.closest<HTMLButtonElement>('[data-revision-group-toggle]')\n : null);\n if (revisionGroupToggle) {\n event.preventDefault();\n event.stopPropagation();\n const group = revisionGroupToggle.closest<HTMLElement>('.coco-word-native-revision-group');\n const list = group?.querySelector<HTMLElement>(':scope > .coco-word-native-revision-group-list');\n if (!group || !list) return;\n const shouldExpand = list.hidden;\n collapseOtherRevisionGroups(group);\n setRevisionGroupExpanded(group, shouldExpand);\n return;\n }\n const commentMenu = event.composedPath().find((item): item is HTMLButtonElement =>\n item instanceof HTMLButtonElement && item.matches('[data-comment-menu][data-comment-id]'),\n ) ?? (event.target instanceof Element\n ? event.target.closest<HTMLButtonElement>('[data-comment-menu][data-comment-id]')\n : null);\n if (commentMenu) {\n event.preventDefault();\n event.stopPropagation();\n const commentId = commentMenu.dataset.commentId;\n if (!commentId) return;\n const menu = commentMenu.parentElement?.querySelector<HTMLElement>(`[data-comment-menu-for=\"${CSS.escape(commentId)}\"]`);\n if (!menu) return;\n host.querySelectorAll<HTMLElement>('.coco-word-native-comment-menu:not([hidden])').forEach((item) => {\n if (item !== menu) item.hidden = true;\n });\n menu.hidden = !menu.hidden;\n return;\n }\n const commentAction = event.composedPath().find((item): item is HTMLButtonElement =>\n item instanceof HTMLButtonElement && item.matches('[data-comment-action][data-comment-id]'),\n ) ?? (event.target instanceof Element\n ? event.target.closest<HTMLButtonElement>('[data-comment-action][data-comment-id]')\n : null);\n if (commentAction) {\n event.preventDefault();\n event.stopPropagation();\n const commentId = Number(commentAction.dataset.commentId);\n if (!Number.isFinite(commentId)) return;\n const bubble = commentAction.closest<HTMLElement>('.coco-word-native-comment-bubble');\n if (commentAction.dataset.commentAction === 'edit') {\n openCommentDialog('edit', commentId, bubble?.dataset.commentBody ?? '');\n } else if (commentAction.dataset.commentAction === 'reply') {\n openCommentDialog('reply', commentId);\n } else {\n dispatch({ kind: 'delete-comment', commentId });\n }\n return;\n }\n if (suppressTextClick) {\n suppressTextClick = false;\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if (suppressTableSelectionClick) {\n suppressTableSelectionClick = false;\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if (preserveSelectionOnClick) {\n event.preventDefault();\n event.stopPropagation();\n renderPreservedSelectionHighlight(true);\n queueMicrotask(() => {\n preserveSelectionOnClick = false;\n renderPreservedSelectionHighlight(true);\n });\n return;\n }\n activate();\n activeLocalTypingTransaction = null;\n const target = event.target;\n const annotationMark = target instanceof Element\n ? target.closest<HTMLElement>('.coco-word-comment[data-comment-id]')\n : null;\n const revisionMark = target instanceof Element\n ? target.closest<HTMLElement>('.coco-word-revision-insert[data-revision-id], .coco-word-revision-delete[data-revision-id], .coco-word-revision-format[data-revision-id], img[data-revision-id], coco-word-native-table[data-revision-id]')\n : null;\n const annotationBubble = target instanceof Element\n ? target.closest<HTMLElement>('.coco-word-native-comment-bubble, .coco-word-native-revision-bubble')\n : null;\n const annotationTarget = annotationBubble ?? (annotationMark\n ? host.querySelector<HTMLElement>(`.coco-word-native-comment-bubble[data-comment-id=\"${CSS.escape(annotationMark.dataset.commentId ?? '')}\"]`)\n : revisionMark\n ? host.querySelector<HTMLElement>(`.coco-word-native-revision-bubble[data-revision-id=\"${CSS.escape(revisionMark.dataset.revisionId ?? '')}\"][data-revision-kind=\"${CSS.escape(revisionMark.dataset.revisionKind ?? (revisionMark.classList.contains('coco-word-revision-delete') ? 'delete' : 'insert'))}\"]`)\n : null);\n if (annotationTarget) {\n const revisionGroup = annotationTarget.closest<HTMLElement>('.coco-word-native-revision-group');\n if (revisionGroup) {\n collapseOtherRevisionGroups(revisionGroup);\n setRevisionGroupExpanded(revisionGroup, true);\n }\n const paraId = annotationTarget.dataset.paraId;\n const from = Number(annotationTarget.dataset.from);\n const to = Number(annotationTarget.dataset.to);\n if (paraId && Number.isFinite(from) && Number.isFinite(to)) {\n event.preventDefault();\n event.stopPropagation();\n host.querySelectorAll<HTMLElement>('.coco-word-native-comment-bubble.is-selected, .coco-word-native-revision-bubble.is-selected')\n .forEach((bubble) => bubble.classList.remove('is-selected'));\n annotationTarget.classList.add('is-selected');\n const nextSelection: WordEditorSelection = {\n kind: 'text-range',\n anchor: { paraId, offset: from },\n focus: { paraId, offset: Math.max(from + 1, to) },\n };\n setSelection(nextSelection);\n const sourceMark = annotationMark ?? (() => {\n const page = annotationBubble?.closest<HTMLElement>('coco-word-native-page');\n if (!page) return null;\n const kind = annotationTarget.dataset.revisionKind;\n const selector = kind\n ? `.coco-word-revision-insert[data-revision-id=\"${CSS.escape(annotationTarget.dataset.revisionId ?? '')}\"], .coco-word-revision-delete[data-revision-id=\"${CSS.escape(annotationTarget.dataset.revisionId ?? '')}\"], .coco-word-revision-format[data-revision-id=\"${CSS.escape(annotationTarget.dataset.revisionId ?? '')}\"], img[data-revision-id=\"${CSS.escape(annotationTarget.dataset.revisionId ?? '')}\"], coco-word-native-table[data-revision-id=\"${CSS.escape(annotationTarget.dataset.revisionId ?? '')}\"]`\n : `.coco-word-comment[data-comment-id=\"${CSS.escape(annotationTarget.dataset.commentId ?? '')}\"]`;\n return page.querySelector<HTMLElement>(selector);\n })();\n if (!sourceMark || !restoreNativeElementSelection(host, sourceMark)) {\n restoreNativeTextSelection(host, nextSelection.anchor, nextSelection.focus);\n }\n return;\n }\n }\n const tableCell = tableCellTarget(target);\n if (tableCell) {\n event.preventDefault();\n event.stopPropagation();\n selectedImage = null;\n clearNativeImageSelection(host);\n nativeSelection(host)?.removeAllRanges();\n if (\n selection?.kind === 'table-cell-range' &&\n selection.tableId === tableCell.tableId &&\n tableCell.point.rowIndex >= Math.min(selection.anchor.rowIndex, selection.focus.rowIndex) &&\n tableCell.point.rowIndex <= Math.max(selection.anchor.rowIndex, selection.focus.rowIndex) &&\n tableCell.point.columnIndex >= Math.min(selection.anchor.columnIndex, selection.focus.columnIndex) &&\n tableCell.point.columnIndex <= Math.max(selection.anchor.columnIndex, selection.focus.columnIndex)\n ) {\n return;\n }\n setSelection({\n kind: 'table-cell-range',\n tableId: tableCell.tableId,\n anchor: tableCell.point,\n focus: tableCell.point,\n });\n return;\n }\n const hyperlink = target instanceof Element ? target.closest<HTMLAnchorElement>('a.coco-word-hyperlink') : null;\n if (hyperlink) {\n event.preventDefault();\n if ((event.ctrlKey || event.metaKey) && safeExternalHyperlink(hyperlink.dataset.hyperlinkTarget)) {\n window.open(hyperlink.dataset.hyperlinkTarget, '_blank', 'noopener,noreferrer');\n return;\n }\n }\n if (!(target instanceof HTMLImageElement)) {\n const clickedParagraph = target instanceof Node ? parentNativeParagraph(target) : null;\n const currentSelection = currentNativeSelection(host);\n selectedImage = null;\n clearNativeImageSelection(host);\n // Text clicks and drag selection belong to the browser's native\n // contenteditable selection. The selectionchange listener mirrors it to\n // the document model; restoring it here moves the caret to the wrong spot.\n if (clickedParagraph) return;\n if (currentSelection?.kind === 'text-range') {\n setSelection(currentSelection);\n return;\n }\n const point = currentNativeCursor(host);\n if (point) restoreNativeCursor(host, point);\n setSelection(point ? { kind: 'caret', paraId: point.paraId, offset: point.offset } : null);\n return;\n }\n const paragraph = parentNativeParagraph(target);\n const paraId = paragraph?.dataset.paraId;\n const drawingId = target.dataset.drawingId;\n if (!paragraph || !paraId || !drawingId) return;\n paragraph.focus();\n selectedImage = { paraId, drawingId };\n clearNativeImageSelection(host);\n showImageResizeHandle();\n setSelection({ kind: 'object', paraId, objectKind: 'image', objectId: drawingId, offset: imageOffset(paragraph, target) });\n };\n\n const mouseDown = (event: MouseEvent) => {\n if (event.button !== 0) return;\n preserveSelectionForExternalInteraction = false;\n if (event.target instanceof Node && parentNativeParagraph(event.target)) lastTextSelection = null;\n if (event.target instanceof HTMLImageElement) return;\n const pointerTarget = event.target instanceof Element ? event.target : null;\n const clickedParagraph = pointerTarget ? parentNativeParagraph(pointerTarget) : null;\n const clickedDocument = pointerTarget?.closest('coco-word-native-page, coco-word-native-p, coco-word-native-table') !== null;\n const clickedControl = pointerTarget?.closest('button, input, textarea, select, a');\n if (!clickedParagraph && !clickedDocument && !clickedControl && selection?.kind === 'text-range') {\n preserveSelectionOnClick = true;\n renderPreservedSelectionHighlight(true);\n } else {\n preserveSelectionOnClick = false;\n }\n const target = tableCellTarget(event.target);\n if (target) preserveSelectionOnClick = false;\n if (!target) {\n tableDragStart = null;\n textDragActive = true;\n textDragMoved = false;\n return;\n }\n textDragActive = false;\n textDragMoved = false;\n let anchor = target.point;\n if (event.shiftKey) {\n if (selection?.kind === 'table-cell-range' && selection.tableId === target.tableId) {\n anchor = selection.anchor;\n } else if (selection && selection.kind !== 'table-cell-range') {\n const paraId = selection.kind === 'text-range' ? selection.anchor.paraId : selection.paraId;\n const location = findNativeTableCellLocation(doc, paraId);\n if (location?.table.tableId === target.tableId) {\n anchor = { rowIndex: location.rowIndex, columnIndex: location.columnIndex };\n }\n }\n event.preventDefault();\n nativeSelection(host)?.removeAllRanges();\n tableDragStart = { tableId: target.tableId, point: anchor };\n tableDragSelectionActive = true;\n setSelection({ kind: 'table-cell-range', tableId: target.tableId, anchor, focus: target.point });\n return;\n }\n tableDragStart = { tableId: target.tableId, point: target.point };\n tableDragSelectionActive = false;\n };\n\n const mouseMove = (event: MouseEvent) => {\n if (textDragActive && (event.buttons & 1) !== 0) {\n textDragMoved = true;\n return;\n }\n if (!tableDragStart || (event.buttons & 1) === 0) return;\n const target = tableCellTarget(event.target);\n if (!target || target.tableId !== tableDragStart.tableId) return;\n if (\n !tableDragSelectionActive &&\n target.point.rowIndex === tableDragStart.point.rowIndex &&\n target.point.columnIndex === tableDragStart.point.columnIndex\n ) {\n return;\n }\n event.preventDefault();\n nativeSelection(host)?.removeAllRanges();\n tableDragSelectionActive = true;\n setSelection({\n kind: 'table-cell-range',\n tableId: tableDragStart.tableId,\n anchor: tableDragStart.point,\n focus: target.point,\n });\n };\n\n const mouseUp = () => {\n if (textDragActive) {\n const currentSelection = currentNativeSelection(host);\n if (currentSelection?.kind === 'text-range') {\n lastTextSelection = currentSelection;\n setSelection(currentSelection);\n suppressTextClick = true;\n }\n textDragActive = false;\n textDragMoved = false;\n }\n if (tableDragSelectionActive) {\n nativeSelection(host)?.removeAllRanges();\n renderTableCellRangeSelection(selection);\n suppressTableSelectionClick = true;\n tableDragSelectionActive = false;\n tableDragStart = null;\n return;\n }\n tableDragStart = null;\n const currentSelection = currentNativeSelection(host);\n if (currentSelection?.kind === 'text-range') {\n lastTextSelection = currentSelection;\n selectedImage = null;\n clearNativeImageSelection(host);\n setSelection(currentSelection);\n }\n };\n const windowMouseUp = () => {\n if (tableDragStart) mouseUp();\n else if (textDragActive) mouseUp();\n };\n\n const selectionChange = () => {\n if (destroyed) return;\n if (compositionActive || pendingCompositionTransaction) return;\n if (selection?.kind === 'object' && selectedImage) return;\n if (selection?.kind === 'table-cell-range') return;\n if (suppressTextClick && lastTextSelection) {\n setSelection(lastTextSelection);\n renderPreservedSelectionHighlight(true);\n return;\n }\n if (preserveSelectionOnClick) {\n renderPreservedSelectionHighlight(true);\n return;\n }\n if (preserveSelectionForExternalInteraction) {\n renderPreservedSelectionHighlight(true);\n return;\n }\n const activeElement = document.activeElement;\n if (\n activeElement instanceof HTMLElement &&\n activeElement !== document.body &&\n activeElement !== focusHost &&\n !host.contains(activeElement)\n ) {\n renderPreservedSelectionHighlight();\n return;\n }\n clearPreservedSelectionHighlight();\n const current = currentNativeSelection(host) ?? nativeSelectionFromCursor(host);\n if (current?.kind === 'text-range') lastTextSelection = current;\n if (current) {\n activate();\n setSelection(current);\n }\n };\n const documentFocusIn = (event: FocusEvent) => {\n const target = event.target;\n const eventPath = event.composedPath();\n const focusedDocument = eventPath.some(\n (item) => item instanceof Element && item.matches('coco-word-native-page, coco-word-native-p, coco-word-native-table'),\n );\n if (focusedDocument) {\n preserveSelectionForExternalInteraction = false;\n } else if (selection?.kind === 'text-range') {\n preserveSelectionForExternalInteraction = true;\n }\n queueMicrotask(renderPreservedSelectionHighlight);\n };\n const preserveSelectionFromExternalPointer = (event: PointerEvent) => {\n const eventPath = event.composedPath();\n const clickedDocument = eventPath.some(\n (item) => item instanceof Element && item.matches('coco-word-native-page, coco-word-native-p, coco-word-native-table'),\n );\n const clickedRevisionAction = eventPath.some(\n (item) => item instanceof HTMLButtonElement && item.matches('[data-revision-action][data-revision-id], [data-revision-group-toggle]'),\n );\n if (destroyed || event.button !== 0 || clickedDocument || clickedRevisionAction) return;\n const current = lastTextSelection ?? (selection?.kind === 'text-range' ? selection : currentNativeSelection(host));\n if (current?.kind !== 'text-range') return;\n if (selection !== current) setSelection(current);\n preserveSelectionForExternalInteraction = true;\n preserveSelectionOnClick = true;\n // Keep the document selection visible while toolbar/sidebar controls take focus.\n // A click inside a paragraph is intentionally left to the browser's native selection.\n renderPreservedSelectionHighlight(true);\n queueMicrotask(() => renderPreservedSelectionHighlight(true));\n window.setTimeout(() => renderPreservedSelectionHighlight(true), 0);\n };\n const preserveSelectionAfterExternalClick = (event: MouseEvent) => {\n preserveSelectionFromExternalPointer(event as PointerEvent);\n window.setTimeout(() => renderPreservedSelectionHighlight(true), 0);\n };\n const updateHyperlinkNavigationMode = (event: KeyboardEvent) => {\n host.classList.toggle('is-hyperlink-navigation-mode', event.ctrlKey || event.metaKey);\n };\n const clearHyperlinkNavigationMode = () => {\n host.classList.remove('is-hyperlink-navigation-mode');\n };\n\n const input = (event: Event) => {\n const inputEvent = event as InputEvent;\n if (inputEvent.inputType === suppressedBrowserHistoryInput) {\n suppressedBrowserHistoryInput = null;\n if (browserHistorySuppressionTimer !== null) window.clearTimeout(browserHistorySuppressionTimer);\n browserHistorySuppressionTimer = null;\n return;\n }\n if (\n inputEvent.isComposing ||\n compositionActive ||\n inputEvent.inputType === 'insertCompositionText' ||\n inputEvent.inputType === 'deleteCompositionText'\n ) {\n return;\n }\n if (pendingCompositionTransaction) {\n if (compositionFinalizeTimer !== null) window.clearTimeout(compositionFinalizeTimer);\n finalizeComposition();\n return;\n }\n if (syncBrowserRangeDelete()) return;\n if (inputEvent.inputType === 'historyUndo' && syncBrowserHistoryUndo()) return;\n if (inputEvent.inputType === 'historyRedo' && syncBrowserHistoryRedo()) return;\n\n const cursor = currentNativeCursor(host);\n const paragraphEl =\n parentNativeParagraph(event.target as Node) ??\n (cursor ? host.querySelector<HTMLElement>(`coco-word-native-p[data-para-id=\"${cursor.paraId}\"]`) : null);\n if (!paragraphEl || !host.contains(paragraphEl)) return;\n const paraId = paragraphEl.dataset.paraId ?? '';\n const paragraph = findNativeParagraph(doc, paraId);\n if (!paragraph || paragraph.content.some((child) => child.kind !== 'text')) return;\n const change = nativeSyncParagraphText(doc, paraId, paragraphEl.textContent ?? '');\n if (!change) {\n if (inputEvent.inputType === 'historyUndo' || inputEvent.inputType === 'historyRedo') scheduleReflow(paraId);\n return;\n }\n changes.push(change);\n const revision = markBrowserTextChangeAsRevision(paraId, change);\n if (revision) changes.push(revision);\n if (\n activeLocalTypingTransaction &&\n inputEvent.inputType !== 'historyUndo' &&\n inputEvent.inputType !== 'historyRedo' &&\n activeLocalTypingTransaction.afterParagraphs[0]?.paraId === paraId\n ) {\n activeLocalTypingTransaction.changes.push(change);\n activeLocalTypingTransaction.afterParagraphs = [cloneNativeParagraph(paragraph)];\n } else {\n activeLocalTypingTransaction = null;\n }\n browserRedoStack.length = 0;\n scheduleTypingReflow(paraId);\n if (cursor) {\n setSelection({ kind: 'caret', paraId: cursor.paraId, offset: cursor.offset });\n }\n if (revision) renderParagraph(paraId, cursor ?? undefined);\n notifyChange('deferred');\n };\n\n const applyPublicSelection = (next: WordEditorSelection | null): boolean => {\n if (destroyed) return false;\n if (!next) {\n const domSelection = nativeSelection(host);\n if (domSelection && (host.contains(domSelection.anchorNode) || host.contains(domSelection.focusNode))) {\n domSelection.removeAllRanges();\n }\n selectedImage = null;\n clearNativeImageSelection(host);\n setSelection(null);\n return true;\n }\n if (next.kind === 'caret') {\n if (!findNativeParagraph(doc, next.paraId)) return false;\n selectedImage = null;\n clearNativeImageSelection(host);\n restoreNativeCursor(host, next);\n setSelection(next);\n return true;\n }\n if (next.kind === 'text-range') {\n if (!findNativeParagraph(doc, next.anchor.paraId) || !findNativeParagraph(doc, next.focus.paraId)) return false;\n selectedImage = null;\n clearNativeImageSelection(host);\n restoreNativeTextSelection(host, next.anchor, next.focus);\n setSelection(next);\n return true;\n }\n if (next.kind === 'table-cell-range') {\n const table = findNativeTableLocation(doc, next.tableId)?.table;\n if (!table || nativeTableCellsInRange(table, next).length === 0) return false;\n selectedImage = null;\n clearNativeImageSelection(host);\n nativeSelection(host)?.removeAllRanges();\n setSelection(next);\n return true;\n }\n const image = host.querySelector<HTMLImageElement>(\n `coco-word-native-p[data-para-id=\"${next.paraId}\"] img[data-drawing-id=\"${next.objectId}\"]`,\n );\n if (!findNativeParagraph(doc, next.paraId) || !image) return false;\n selectedImage = { paraId: next.paraId, drawingId: next.objectId };\n clearNativeImageSelection(host);\n showImageResizeHandle();\n setSelection(next);\n return true;\n };\n\n const cancelScheduledWork = () => {\n if (deferredRenderTimer !== null) window.clearTimeout(deferredRenderTimer);\n if (deferredReflowTimer !== null) window.clearTimeout(deferredReflowTimer);\n if (nativeHistorySyncTimer !== null) window.clearTimeout(nativeHistorySyncTimer);\n if (deferredChangeTimer !== null) window.clearTimeout(deferredChangeTimer);\n if (deferredSelectionTimer !== null) window.clearTimeout(deferredSelectionTimer);\n if (clearEnterSuppressionTimer !== null) window.clearTimeout(clearEnterSuppressionTimer);\n if (compositionFinalizeTimer !== null) window.clearTimeout(compositionFinalizeTimer);\n if (browserHistorySuppressionTimer !== null) window.clearTimeout(browserHistorySuppressionTimer);\n deferredRenderTimer = null;\n deferredReflowTimer = null;\n nativeHistorySyncTimer = null;\n deferredChangeTimer = null;\n deferredSelectionTimer = null;\n clearEnterSuppressionTimer = null;\n compositionFinalizeTimer = null;\n browserHistorySuppressionTimer = null;\n };\n\n host.addEventListener('beforeinput', beforeInput);\n host.addEventListener('compositionstart', compositionStart);\n host.addEventListener('compositionend', compositionEnd);\n host.addEventListener('copy', copy);\n host.addEventListener('cut', cut);\n host.addEventListener('paste', paste);\n host.addEventListener('keydown', keyDown);\n host.addEventListener('mousedown', mouseDown);\n host.addEventListener('click', click);\n host.addEventListener('mouseup', mouseUp);\n host.addEventListener('input', input);\n host.addEventListener('contextmenu', contextMenu);\n document.addEventListener('keydown', keyDown, true);\n document.addEventListener('beforeinput', documentBeforeInput, true);\n document.addEventListener('selectionchange', selectionChange);\n document.addEventListener('focusin', documentFocusIn);\n document.addEventListener('pointerdown', preserveSelectionFromExternalPointer, true);\n document.addEventListener('pointerup', preserveSelectionFromExternalPointer, true);\n document.addEventListener('click', preserveSelectionAfterExternalClick, true);\n document.addEventListener('keydown', updateHyperlinkNavigationMode, true);\n document.addEventListener('keyup', updateHyperlinkNavigationMode, true);\n document.addEventListener('mousemove', mouseMove);\n document.addEventListener('pointerdown', closeContextMenuFromPointer, true);\n document.addEventListener('keydown', closeContextMenuFromKey, true);\n document.addEventListener('scroll', closeContextMenu, true);\n window.addEventListener('resize', closeContextMenu);\n window.addEventListener('mouseup', windowMouseUp);\n window.addEventListener('blur', clearHyperlinkNavigationMode);\n render();\n\n return {\n kind: 'native-word',\n get destroyed() {\n return destroyed;\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n host.removeEventListener('beforeinput', beforeInput);\n host.removeEventListener('compositionstart', compositionStart);\n host.removeEventListener('compositionend', compositionEnd);\n host.removeEventListener('copy', copy);\n host.removeEventListener('cut', cut);\n host.removeEventListener('paste', paste);\n host.removeEventListener('keydown', keyDown);\n host.removeEventListener('mousedown', mouseDown);\n host.removeEventListener('click', click);\n host.removeEventListener('mouseup', mouseUp);\n host.removeEventListener('input', input);\n host.removeEventListener('contextmenu', contextMenu);\n document.removeEventListener('keydown', keyDown, true);\n document.removeEventListener('beforeinput', documentBeforeInput, true);\n document.removeEventListener('selectionchange', selectionChange);\n document.removeEventListener('focusin', documentFocusIn);\n document.removeEventListener('pointerdown', preserveSelectionFromExternalPointer, true);\n document.removeEventListener('pointerup', preserveSelectionFromExternalPointer, true);\n document.removeEventListener('click', preserveSelectionAfterExternalClick, true);\n document.removeEventListener('keydown', updateHyperlinkNavigationMode, true);\n document.removeEventListener('keyup', updateHyperlinkNavigationMode, true);\n document.removeEventListener('mousemove', mouseMove);\n document.removeEventListener('pointerdown', closeContextMenuFromPointer, true);\n document.removeEventListener('keydown', closeContextMenuFromKey, true);\n document.removeEventListener('scroll', closeContextMenu, true);\n window.removeEventListener('resize', closeContextMenu);\n window.removeEventListener('mouseup', windowMouseUp);\n window.removeEventListener('blur', clearHyperlinkNavigationMode);\n window.removeEventListener('resize', repositionSelectedImageHandle);\n document.removeEventListener('scroll', repositionSelectedImageHandle, true);\n cancelImageResizeDrag?.();\n cancelImageResizeDrag = null;\n closeContextMenu();\n clearSearch();\n clearPreservedSelectionHighlight();\n searchHighlightStyle.remove();\n cancelScheduledWork();\n tableResizeObserver.disconnect();\n if (activeNativeWordHostByDocument.get(document) === host) activeNativeWordHostByDocument.delete(document);\n listeners.change.clear();\n listeners.selectionChange.clear();\n if (shadowRoot) shadowRoot.replaceChildren();\n else host.replaceChildren();\n host.classList.remove('coco-word-native-editor-host');\n host.classList.remove('is-hyperlink-navigation-mode');\n outerHost.classList.remove('coco-word-editor-host');\n },\n loadDocument(nextView) {\n if (destroyed) throw new Error('Cannot load a document into a destroyed Word editor');\n cancelScheduledWork();\n tableResizeObserver.disconnect();\n sourceView = nextView;\n closeContextMenu();\n clearSearch();\n doc = createNativeWordDocument(sourceView);\n changes.length = 0;\n emittedChanges = [];\n paragraphIds.clear();\n for (const paragraph of allNativeParagraphs(doc)) paragraphIds.add(paragraph.paraId);\n nextParagraphId = Date.now() >>> 0;\n selectedImage = null;\n removeImageResizeHandle();\n selection = null;\n pendingBrowserRangeDelete = null;\n pendingCompositionTransaction = null;\n activeLocalTypingTransaction = null;\n compositionActive = false;\n typingLayoutBaseline = null;\n suppressedBrowserHistoryInput = null;\n browserUndoStack.length = 0;\n browserRedoStack.length = 0;\n render();\n notifySelectionChange();\n },\n getSourceView() {\n return sourceView;\n },\n getDocument() {\n return doc;\n },\n getSelection() {\n return selection ?? currentNativeSelection(host) ?? nativeSelectionFromCursor(host);\n },\n setSelection(next) {\n return applyPublicSelection(next);\n },\n focus() {\n if (destroyed) return false;\n const current = selection ?? currentNativeSelection(host) ?? nativeSelectionFromCursor(host);\n if (current) return applyPublicSelection(current);\n const first = allNativeParagraphs(doc)[0];\n return first ? applyPublicSelection({ kind: 'caret', paraId: first.paraId, offset: 0 }) : false;\n },\n async insertImage(source, imageOptions = {}) {\n if (destroyed) return false;\n const src = typeof source === 'string' ? source : await blobToDataUrl(source);\n return dispatch({ kind: 'insert-image', src, ...imageOptions });\n },\n search,\n getSearchState() {\n return searchStateSnapshot();\n },\n findNext,\n replaceCurrent,\n replaceAll,\n clearSearch,\n getCommandState() {\n const current = selection ?? currentNativeSelection(host) ?? nativeSelectionFromCursor(host);\n return getCommandState(current);\n },\n getChanges() {\n return changes.slice();\n },\n canUndo() {\n return !destroyed && browserUndoStack.length > 0;\n },\n canRedo() {\n return !destroyed && browserRedoStack.length > 0;\n },\n undo,\n redo,\n canDispatch(command) {\n if (destroyed) return false;\n const current = selection ?? currentNativeSelection(host) ?? nativeSelectionFromCursor(host);\n return canDispatchNativeWordCommand(doc, current, command);\n },\n dispatch,\n subscribe(event, listener) {\n if (destroyed) return () => {};\n const runtimeListener = listener as (\n payload: WordEditorChangeEvent | WordEditorSelectionChangeEvent,\n ) => void;\n listeners[event].add(runtimeListener);\n return () => listeners[event].delete(runtimeListener);\n },\n };\n}\n\nfunction cloneNativeParagraph(paragraph: NativeWordParagraphNode): NativeWordParagraphNode {\n return {\n ...paragraph,\n format: paragraph.format ? cloneNativeMetadata(paragraph.format) : null,\n content: paragraph.content.map(cloneNativeInline),\n };\n}\n\nfunction cloneNativeInline(child: NativeWordInlineNode): NativeWordInlineNode {\n if (child.kind === 'pageBreak') return { kind: 'pageBreak' };\n if (child.kind === 'text') {\n return {\n ...child,\n format: child.format ? cloneNativeMetadata(child.format) : null,\n ...(child.marks ? { marks: child.marks.map((mark) => ({ ...mark })) } : {}),\n ...(child.hyperlink ? { hyperlink: { ...child.hyperlink } } : {}),\n };\n }\n if (child.kind === 'field') {\n return { ...child, format: child.format ? cloneNativeMetadata(child.format) : null };\n }\n if (child.kind === 'image') {\n return {\n ...child,\n ...(child.position ? { position: cloneNativeMetadata(child.position) } : {}),\n };\n }\n return {\n ...child,\n ...(child.position ? { position: cloneNativeMetadata(child.position) } : {}),\n ...(child.paragraphs ? { paragraphs: child.paragraphs.map(cloneNativeParagraph) } : {}),\n };\n}\n\nfunction cloneNativeMetadata<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction safeExternalHyperlink(value: string | undefined): value is string {\n return !!value && /^(https?:|mailto:|tel:)/i.test(value.trim());\n}\n\nfunction isBrowserBlockTransaction(transaction: BrowserTransaction): transaction is BrowserBlockTransaction {\n return 'beforeBlocks' in transaction;\n}\n\nfunction nativeBlockElements(host: HTMLElement, block: NativeWordBlockNode): HTMLElement[] {\n const selector = block.kind === 'paragraph'\n ? `coco-word-native-p[data-para-id=\"${block.paraId}\"]`\n : `coco-word-native-table[data-table-id=\"${block.tableId}\"]`;\n return Array.from(host.querySelectorAll<HTMLElement>(selector));\n}\n\nfunction allocateNativeCommentId(doc: NativeWordDocument): number {\n let highest = nextNativeCommentId;\n for (const paragraph of allNativeParagraphs(doc)) {\n for (const child of paragraph.content) {\n if (child.kind !== 'text') continue;\n for (const mark of child.marks ?? []) {\n if (mark.kind === 'comment') highest = Math.max(highest, mark.commentId);\n }\n }\n }\n nextNativeCommentId = highest + 1;\n return nextNativeCommentId;\n}\n\nfunction allocateNativeRevisionId(doc: NativeWordDocument): string {\n let highest = nextNativeRevisionId;\n for (const paragraph of allNativeParagraphs(doc)) {\n for (const child of paragraph.content) {\n if (child.kind === 'text') {\n for (const mark of child.marks ?? []) {\n if (mark.kind !== 'revision') continue;\n const numeric = Number(mark.revisionId);\n if (Number.isInteger(numeric)) highest = Math.max(highest, numeric);\n }\n const formatRevision = child.formatRevision;\n const formatNumeric = Number(formatRevision?.revisionId);\n if (Number.isInteger(formatNumeric)) highest = Math.max(highest, formatNumeric);\n } else if (child.kind === 'image') {\n const numeric = Number(child.revision?.revisionId ?? child.formatRevision?.revisionId);\n if (Number.isInteger(numeric)) highest = Math.max(highest, numeric);\n }\n }\n }\n nextNativeRevisionId = highest + 1;\n return String(nextNativeRevisionId);\n}\n\nfunction sameSelection(left: WordEditorSelection | null, right: WordEditorSelection | null): boolean {\n if (left?.kind !== right?.kind) return false;\n if (!left || !right) return left === right;\n if (left.kind === 'caret' && right.kind === 'caret') {\n return left.paraId === right.paraId && left.offset === right.offset;\n }\n if (left.kind === 'object' && right.kind === 'object') {\n return left.paraId === right.paraId && left.objectKind === right.objectKind && left.objectId === right.objectId;\n }\n if (left.kind === 'text-range' && right.kind === 'text-range') {\n return (\n left.anchor.paraId === right.anchor.paraId &&\n left.anchor.offset === right.anchor.offset &&\n left.focus.paraId === right.focus.paraId &&\n left.focus.offset === right.focus.offset\n );\n }\n if (left.kind === 'table-cell-range' && right.kind === 'table-cell-range') {\n return (\n left.tableId === right.tableId &&\n left.anchor.rowIndex === right.anchor.rowIndex &&\n left.anchor.columnIndex === right.anchor.columnIndex &&\n left.focus.rowIndex === right.focus.rowIndex &&\n left.focus.columnIndex === right.focus.columnIndex\n );\n }\n return false;\n}\n\nfunction formatTransactionSelection(\n transaction: BrowserTextTransaction,\n phase: 'before' | 'after',\n): WordEditorSelection | null {\n const explicit = phase === 'before' ? transaction.beforeSelection : transaction.afterSelection;\n if (explicit) return explicit;\n if (!transaction.changes.every((change) => change.kind === 'format' || change.kind === 'list')) return null;\n if (\n transaction.range.anchor.paraId === transaction.range.focus.paraId &&\n transaction.range.anchor.offset === transaction.range.focus.offset\n ) {\n return null;\n }\n return { kind: 'text-range', anchor: transaction.range.anchor, focus: transaction.range.focus };\n}\n\nfunction transactionRequiresReflow(transaction: BrowserTextTransaction): boolean {\n if (transaction.skipDeferredRender) return false;\n return transaction.changes.some((change) => {\n if (change.kind === 'block') return true;\n if (change.kind === 'image') return true;\n if (change.kind === 'page-break') return true;\n if (change.kind === 'list') return true;\n if (change.kind !== 'format') return false;\n if (change.op === 'paragraph') return change.format.alignment === undefined;\n return (\n change.clear === true ||\n change.format.bold !== undefined ||\n change.format.italic !== undefined ||\n change.format.fontFamily !== undefined ||\n change.format.fontSize !== undefined\n );\n });\n}\n\nfunction domParagraphText(host: HTMLElement, paraId: string): string | null {\n return host.querySelector<HTMLElement>(`coco-word-native-p[data-para-id=\"${paraId}\"]`)?.textContent ?? null;\n}\n\nfunction domParagraphsMatch(host: HTMLElement, paragraphs: NativeWordParagraphNode[]): boolean {\n return paragraphs.every((paragraph) => domParagraphText(host, paragraph.paraId) === nativeParagraphText(paragraph));\n}\n\nfunction normalizedSelectionRange(from: number, to: number): { from: number; to: number } {\n return {\n from: Math.max(0, Math.min(from, to)),\n to: Math.max(0, Math.max(from, to)),\n };\n}\n\nfunction blobToDataUrl(file: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.addEventListener('load', () => resolve(String(reader.result ?? '')));\n reader.addEventListener('error', () => reject(reader.error ?? new Error('Unable to read clipboard image')));\n reader.readAsDataURL(file);\n });\n}\n\nfunction storeNativeImageClipboardSource(src: string): string {\n nextNativeImageClipboardId = (nextNativeImageClipboardId + 1) >>> 0;\n const token = `${NATIVE_IMAGE_CLIPBOARD_PREFIX}${Date.now().toString(36)}-${nextNativeImageClipboardId.toString(36)}`;\n nativeImageClipboardSources.set(token, src);\n while (nativeImageClipboardSources.size > 8) {\n const oldest = nativeImageClipboardSources.keys().next().value as string | undefined;\n if (!oldest) break;\n nativeImageClipboardSources.delete(oldest);\n }\n return token;\n}\n\nfunction resolveNativeImageClipboardSource(value: string): string {\n if (!value.startsWith(NATIVE_IMAGE_CLIPBOARD_PREFIX)) return value;\n return nativeImageClipboardSources.get(value) ?? '';\n}\n\nfunction nativeClipboardInlineText(child: NativeWordParagraphNode['content'][number]): string {\n if (child.kind === 'text') return child.text;\n if (child.kind === 'field') return child.cachedText ?? '\\uFFFC';\n if (child.kind === 'drawing' && child.text) return child.text;\n return '\\uFFFC';\n}\n\nasync function clipboardPngBlob(src: string): Promise<Blob> {\n const response = await fetch(src);\n if (!response.ok) throw new Error(`Unable to load clipboard image: ${response.status}`);\n const source = await response.blob();\n if (source.type === 'image/png') return source;\n\n const bitmap = await createImageBitmap(source);\n try {\n const canvas = document.createElement('canvas');\n canvas.width = bitmap.width;\n canvas.height = bitmap.height;\n const context = canvas.getContext('2d');\n if (!context) throw new Error('Unable to create clipboard image canvas');\n context.drawImage(bitmap, 0, 0);\n return await new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (blob) => (blob ? resolve(blob) : reject(new Error('Unable to encode clipboard image'))),\n 'image/png',\n );\n });\n } finally {\n bitmap.close();\n }\n}\n\nfunction escapeHtmlAttribute(value: string): string {\n return value.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;');\n}\n\nfunction sanitizeIndent(indent: { left?: number; right?: number; firstLine?: number }) {\n const result: { left?: number; right?: number; firstLine?: number } = {};\n if (Number.isFinite(indent.left)) result.left = Math.max(0, indent.left!);\n if (Number.isFinite(indent.right)) result.right = Math.max(0, indent.right!);\n if (Number.isFinite(indent.firstLine)) result.firstLine = indent.firstLine!;\n return result;\n}\n\nfunction sanitizeSpacing(spacing: { before?: number; after?: number }) {\n const result: { before?: number; after?: number } = {};\n if (Number.isFinite(spacing.before)) result.before = Math.max(0, spacing.before!);\n if (Number.isFinite(spacing.after)) result.after = Math.max(0, spacing.after!);\n return result;\n}\n\nfunction orderedSelectionRange(doc: NativeWordDocument, selection: Extract<WordEditorSelection, { kind: 'text-range' }>): {\n anchor: { paraId: string; offset: number };\n focus: { paraId: string; offset: number };\n} {\n if (selection.anchor.paraId === selection.focus.paraId && selection.anchor.offset <= selection.focus.offset) {\n return { anchor: selection.anchor, focus: selection.focus };\n }\n if (selection.anchor.paraId !== selection.focus.paraId) {\n const anchorLocation = findNativeParagraphLocation(doc, selection.anchor.paraId);\n const focusLocation = findNativeParagraphLocation(doc, selection.focus.paraId);\n if (anchorLocation && focusLocation && anchorLocation.container === focusLocation.container) {\n return anchorLocation.index <= focusLocation.index\n ? { anchor: selection.anchor, focus: selection.focus }\n : { anchor: selection.focus, focus: selection.anchor };\n }\n }\n return { anchor: selection.focus, focus: selection.anchor };\n}\n"]}