@beyondwork/docx-react-component 1.0.29 → 1.0.31

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 (383) hide show
  1. package/package.json +65 -96
  2. package/src/README.md +85 -0
  3. package/src/api/README.md +26 -0
  4. package/src/api/public-types.ts +1952 -0
  5. package/src/api/session-state.ts +62 -0
  6. package/src/compare/diff-engine.ts +623 -0
  7. package/src/compare/export-redlines.ts +280 -0
  8. package/src/compare/index.ts +25 -0
  9. package/src/compare/snapshot.ts +97 -0
  10. package/src/component-inventory.md +99 -0
  11. package/src/core/README.md +10 -0
  12. package/src/core/commands/README.md +3 -0
  13. package/{dist/chunk-TJBP2K4T.js → src/core/commands/formatting-commands.ts} +536 -196
  14. package/src/core/commands/image-commands.ts +373 -0
  15. package/src/core/commands/index.ts +1879 -0
  16. package/src/core/commands/list-commands.ts +565 -0
  17. package/src/core/commands/paragraph-layout-commands.ts +339 -0
  18. package/src/core/commands/review-commands.ts +108 -0
  19. package/{dist/core/commands/section-layout-commands.cjs → src/core/commands/section-layout-commands.ts} +340 -137
  20. package/src/core/commands/structural-helpers.ts +309 -0
  21. package/{dist/core/commands/style-commands.cjs → src/core/commands/style-commands.ts} +113 -65
  22. package/src/core/commands/table-structure-commands.ts +854 -0
  23. package/{dist/chunk-UZXBISGO.js → src/core/commands/text-commands.ts} +142 -86
  24. package/src/core/schema/README.md +3 -0
  25. package/src/core/schema/text-schema.ts +516 -0
  26. package/src/core/search/search-text.ts +357 -0
  27. package/src/core/selection/README.md +3 -0
  28. package/src/core/selection/mapping.ts +289 -0
  29. package/src/core/selection/review-anchors.ts +183 -0
  30. package/src/core/state/README.md +3 -0
  31. package/src/core/state/editor-state.ts +892 -0
  32. package/src/core/state/text-transaction.ts +869 -0
  33. package/src/formats/xlsx/io/parse-shared-strings.ts +41 -0
  34. package/src/formats/xlsx/io/parse-sheet.ts +459 -0
  35. package/src/formats/xlsx/io/parse-styles.ts +59 -0
  36. package/src/formats/xlsx/io/parse-workbook.ts +75 -0
  37. package/src/formats/xlsx/io/serialize-shared-strings.ts +72 -0
  38. package/src/formats/xlsx/io/serialize-sheet.ts +333 -0
  39. package/src/formats/xlsx/io/serialize-styles.ts +98 -0
  40. package/src/formats/xlsx/io/serialize-workbook.ts +429 -0
  41. package/src/formats/xlsx/io/xlsx-session.ts +314 -0
  42. package/src/formats/xlsx/model/cell.ts +189 -0
  43. package/src/formats/xlsx/model/sheet.ts +326 -0
  44. package/src/formats/xlsx/model/styles.ts +118 -0
  45. package/src/formats/xlsx/model/workbook.ts +453 -0
  46. package/src/formats/xlsx/runtime/cell-commands.ts +567 -0
  47. package/src/formats/xlsx/runtime/sheet-commands.ts +206 -0
  48. package/src/formats/xlsx/runtime/workbook-runtime.ts +177 -0
  49. package/src/formats/xlsx/runtime/workbook-transaction.ts +822 -0
  50. package/src/index.ts +142 -0
  51. package/src/io/README.md +10 -0
  52. package/src/io/docx-session.ts +3175 -0
  53. package/src/io/export/README.md +3 -0
  54. package/src/io/export/export-session.ts +220 -0
  55. package/src/io/export/minimal-docx.ts +115 -0
  56. package/src/io/export/reattach-preserved-parts.ts +54 -0
  57. package/src/io/export/serialize-comments.ts +947 -0
  58. package/src/io/export/serialize-footnotes.ts +394 -0
  59. package/src/io/export/serialize-headers-footers.ts +368 -0
  60. package/src/io/export/serialize-main-document.ts +1342 -0
  61. package/src/io/export/serialize-numbering.ts +218 -0
  62. package/src/io/export/serialize-revisions.ts +389 -0
  63. package/src/io/export/serialize-runtime-revisions.ts +463 -0
  64. package/src/io/export/serialize-tables.ts +174 -0
  65. package/src/io/export/split-review-boundaries.ts +356 -0
  66. package/src/io/export/split-story-blocks-for-runtime-revisions.ts +252 -0
  67. package/src/io/export/table-properties-xml.ts +318 -0
  68. package/src/io/normalize/README.md +3 -0
  69. package/src/io/normalize/normalize-text.ts +670 -0
  70. package/src/io/ooxml/README.md +3 -0
  71. package/src/io/ooxml/highlight-colors.ts +39 -0
  72. package/src/io/ooxml/numbering-sentinels.ts +44 -0
  73. package/src/io/ooxml/parse-comments.ts +852 -0
  74. package/src/io/ooxml/parse-complex-content.ts +287 -0
  75. package/src/io/ooxml/parse-fields.ts +834 -0
  76. package/src/io/ooxml/parse-footnotes.ts +952 -0
  77. package/src/io/ooxml/parse-headers-footers.ts +1212 -0
  78. package/src/io/ooxml/parse-inline-media.ts +461 -0
  79. package/src/io/ooxml/parse-main-document.ts +2947 -0
  80. package/src/io/ooxml/parse-numbering.ts +747 -0
  81. package/src/io/ooxml/parse-revisions.ts +1045 -0
  82. package/src/io/ooxml/parse-settings.ts +184 -0
  83. package/src/io/ooxml/parse-shapes.ts +296 -0
  84. package/src/io/ooxml/parse-styles.ts +639 -0
  85. package/src/io/ooxml/parse-tables.ts +627 -0
  86. package/src/io/ooxml/parse-theme.ts +346 -0
  87. package/src/io/ooxml/part-manifest.ts +136 -0
  88. package/src/io/ooxml/revision-boundaries.ts +475 -0
  89. package/src/io/ooxml/workflow-payload.ts +544 -0
  90. package/src/io/opc/README.md +3 -0
  91. package/src/io/opc/corrupt-package.ts +166 -0
  92. package/src/io/opc/docx-package.ts +74 -0
  93. package/src/io/opc/package-reader.ts +325 -0
  94. package/src/io/opc/package-writer.ts +273 -0
  95. package/src/io/source-package-provenance.ts +241 -0
  96. package/{dist/chunk-RMH72RZI.js → src/legal/bookmarks.ts} +130 -44
  97. package/src/legal/cross-references.ts +414 -0
  98. package/src/legal/defined-terms.ts +203 -0
  99. package/src/legal/index.ts +32 -0
  100. package/src/legal/signature-blocks.ts +259 -0
  101. package/src/model/README.md +3 -0
  102. package/src/model/canonical-document.ts +2722 -0
  103. package/src/model/cds-1.0.0.ts +212 -0
  104. package/src/model/snapshot.ts +760 -0
  105. package/src/preservation/README.md +3 -0
  106. package/src/preservation/markup-compatibility.ts +48 -0
  107. package/src/preservation/opaque-fragment-store.ts +89 -0
  108. package/src/preservation/opaque-region.ts +233 -0
  109. package/src/preservation/package-preservation.ts +113 -0
  110. package/src/preservation/preserved-part-manifest.ts +56 -0
  111. package/src/preservation/relationship-retention.ts +57 -0
  112. package/src/preservation/store.ts +255 -0
  113. package/src/review/README.md +16 -0
  114. package/src/review/store/README.md +3 -0
  115. package/src/review/store/comment-anchors.ts +70 -0
  116. package/src/review/store/comment-remapping.ts +154 -0
  117. package/src/review/store/comment-store.ts +349 -0
  118. package/src/review/store/comment-thread.ts +109 -0
  119. package/src/review/store/revision-actions.ts +423 -0
  120. package/src/review/store/revision-store.ts +323 -0
  121. package/src/review/store/revision-types.ts +182 -0
  122. package/src/review/store/runtime-comment-store.ts +43 -0
  123. package/src/runtime/README.md +3 -0
  124. package/src/runtime/ai-action-policy.ts +764 -0
  125. package/src/runtime/context-analytics.ts +824 -0
  126. package/src/runtime/document-layout.ts +332 -0
  127. package/src/runtime/document-locations.ts +521 -0
  128. package/src/runtime/document-navigation.ts +616 -0
  129. package/src/runtime/document-outline.ts +440 -0
  130. package/src/runtime/document-runtime.ts +4055 -0
  131. package/src/runtime/document-search.ts +145 -0
  132. package/src/runtime/event-refresh-hints.ts +137 -0
  133. package/src/runtime/numbering-prefix.ts +244 -0
  134. package/src/runtime/page-layout-estimation.ts +305 -0
  135. package/src/runtime/read-only-diagnostics-runtime.ts +241 -0
  136. package/src/runtime/resolved-numbering-geometry.ts +293 -0
  137. package/src/runtime/review-runtime.ts +44 -0
  138. package/src/runtime/revision-runtime.ts +107 -0
  139. package/src/runtime/session-capabilities.ts +192 -0
  140. package/src/runtime/story-context.ts +164 -0
  141. package/src/runtime/story-targeting.ts +162 -0
  142. package/src/runtime/suggestions-snapshot.ts +137 -0
  143. package/src/runtime/surface-projection.ts +1553 -0
  144. package/src/runtime/table-commands.ts +173 -0
  145. package/src/runtime/table-schema.ts +309 -0
  146. package/src/runtime/table-style-resolver.ts +409 -0
  147. package/src/runtime/view-state.ts +493 -0
  148. package/src/runtime/virtualized-rendering.ts +258 -0
  149. package/src/runtime/workflow-markup.ts +393 -0
  150. package/src/ui/README.md +30 -0
  151. package/src/ui/WordReviewEditor.tsx +5268 -0
  152. package/src/ui/browser-export.ts +52 -0
  153. package/src/ui/comments/README.md +3 -0
  154. package/src/ui/compatibility/README.md +3 -0
  155. package/src/ui/editor-command-bag.ts +127 -0
  156. package/src/ui/editor-runtime-boundary.ts +1558 -0
  157. package/src/ui/editor-shell-view.tsx +144 -0
  158. package/src/ui/editor-surface/README.md +3 -0
  159. package/src/ui/editor-surface-controller.tsx +66 -0
  160. package/src/ui/headless/comment-decoration-model.ts +124 -0
  161. package/src/ui/headless/preserve-editor-selection.ts +5 -0
  162. package/src/ui/headless/revision-decoration-model.ts +128 -0
  163. package/src/ui/headless/selection-helpers.ts +54 -0
  164. package/src/ui/headless/selection-tool-context.ts +19 -0
  165. package/src/ui/headless/selection-tool-resolver.ts +752 -0
  166. package/src/ui/headless/selection-tool-types.ts +129 -0
  167. package/src/ui/headless/selection-toolbar-model.ts +11 -0
  168. package/src/ui/headless/use-editor-keyboard.ts +103 -0
  169. package/src/ui/review/README.md +3 -0
  170. package/src/ui/runtime-shortcut-dispatch.ts +365 -0
  171. package/src/ui/runtime-snapshot-selectors.ts +197 -0
  172. package/src/ui/shared/revision-filters.ts +31 -0
  173. package/src/ui/status/README.md +3 -0
  174. package/src/ui/theme/README.md +3 -0
  175. package/src/ui/toolbar/README.md +3 -0
  176. package/src/ui/workflow-surface-blocked-rails.ts +94 -0
  177. package/src/ui-tailwind/chrome/chrome-preset-model.ts +107 -0
  178. package/src/ui-tailwind/chrome/chrome-preset-toolbar.tsx +15 -0
  179. package/src/ui-tailwind/chrome/responsive-chrome.ts +46 -0
  180. package/src/ui-tailwind/chrome/review-queue-bar.tsx +97 -0
  181. package/src/ui-tailwind/chrome/tw-alert-banner.tsx +64 -0
  182. package/src/ui-tailwind/chrome/tw-context-analytics-summary.tsx +122 -0
  183. package/src/ui-tailwind/chrome/tw-image-context-toolbar.tsx +121 -0
  184. package/src/ui-tailwind/chrome/tw-layout-panel.tsx +114 -0
  185. package/src/ui-tailwind/chrome/tw-object-context-toolbar.tsx +30 -0
  186. package/src/ui-tailwind/chrome/tw-page-ruler.tsx +365 -0
  187. package/src/ui-tailwind/chrome/tw-selection-tool-blocked.tsx +23 -0
  188. package/src/ui-tailwind/chrome/tw-selection-tool-comment.tsx +35 -0
  189. package/src/ui-tailwind/chrome/tw-selection-tool-formatting.tsx +37 -0
  190. package/src/ui-tailwind/chrome/tw-selection-tool-host.tsx +303 -0
  191. package/src/ui-tailwind/chrome/tw-selection-tool-structure.tsx +116 -0
  192. package/src/ui-tailwind/chrome/tw-selection-tool-suggestion.tsx +29 -0
  193. package/src/ui-tailwind/chrome/tw-selection-tool-workflow.tsx +27 -0
  194. package/src/ui-tailwind/chrome/tw-selection-toolbar.tsx +186 -0
  195. package/src/ui-tailwind/chrome/tw-suggestion-card.tsx +139 -0
  196. package/src/ui-tailwind/chrome/tw-table-context-toolbar.tsx +250 -0
  197. package/src/ui-tailwind/chrome/tw-unsaved-modal.tsx +58 -0
  198. package/src/ui-tailwind/chrome/use-before-unload.ts +20 -0
  199. package/src/ui-tailwind/editor-surface/perf-probe.ts +179 -0
  200. package/src/ui-tailwind/editor-surface/pm-command-bridge.ts +189 -0
  201. package/src/ui-tailwind/editor-surface/pm-contextual-ui.ts +31 -0
  202. package/src/ui-tailwind/editor-surface/pm-decorations.ts +411 -0
  203. package/src/ui-tailwind/editor-surface/pm-position-map.ts +123 -0
  204. package/src/ui-tailwind/editor-surface/pm-schema.ts +927 -0
  205. package/src/ui-tailwind/editor-surface/pm-state-from-snapshot.ts +567 -0
  206. package/src/ui-tailwind/editor-surface/search-plugin.ts +168 -0
  207. package/src/ui-tailwind/editor-surface/surface-build-keys.ts +63 -0
  208. package/src/ui-tailwind/editor-surface/tw-caret.tsx +12 -0
  209. package/src/ui-tailwind/editor-surface/tw-editor-surface.tsx +150 -0
  210. package/src/ui-tailwind/editor-surface/tw-inline-token.tsx +129 -0
  211. package/src/ui-tailwind/editor-surface/tw-opaque-block.tsx +58 -0
  212. package/src/ui-tailwind/editor-surface/tw-paragraph-block.tsx +151 -0
  213. package/src/ui-tailwind/editor-surface/tw-prosemirror-surface.tsx +1047 -0
  214. package/src/ui-tailwind/editor-surface/tw-segment-view.tsx +111 -0
  215. package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +503 -0
  216. package/src/ui-tailwind/index.ts +62 -0
  217. package/src/ui-tailwind/page-chrome-model.ts +27 -0
  218. package/src/ui-tailwind/review/tw-comment-sidebar.tsx +406 -0
  219. package/src/ui-tailwind/review/tw-health-panel.tsx +149 -0
  220. package/src/ui-tailwind/review/tw-review-rail.tsx +130 -0
  221. package/src/ui-tailwind/review/tw-revision-sidebar.tsx +164 -0
  222. package/src/ui-tailwind/status/tw-status-bar.tsx +65 -0
  223. package/{dist → src}/ui-tailwind/theme/editor-theme.css +58 -40
  224. package/src/ui-tailwind/toolbar/toolbar-layout.ts +47 -0
  225. package/src/ui-tailwind/toolbar/tw-toolbar-icon-button.tsx +52 -0
  226. package/src/ui-tailwind/toolbar/tw-toolbar.tsx +1478 -0
  227. package/src/ui-tailwind/tw-review-workspace.tsx +1587 -0
  228. package/src/validation/README.md +3 -0
  229. package/src/validation/compatibility-engine.ts +878 -0
  230. package/src/validation/compatibility-report.ts +161 -0
  231. package/src/validation/diagnostics.ts +204 -0
  232. package/src/validation/docx-comment-proof.ts +720 -0
  233. package/src/validation/import-diagnostics.ts +128 -0
  234. package/src/validation/low-priority-word-surfaces.ts +373 -0
  235. package/dist/canonical-document-BLEbzL2J.d.cts +0 -844
  236. package/dist/canonical-document-BLEbzL2J.d.ts +0 -844
  237. package/dist/chunk-2FJS5GZM.js +0 -763
  238. package/dist/chunk-2FJS5GZM.js.map +0 -1
  239. package/dist/chunk-2OQBZS3F.js +0 -446
  240. package/dist/chunk-2OQBZS3F.js.map +0 -1
  241. package/dist/chunk-2S7W4KFO.js +0 -127
  242. package/dist/chunk-2S7W4KFO.js.map +0 -1
  243. package/dist/chunk-2TG72QSW.js +0 -3874
  244. package/dist/chunk-2TG72QSW.js.map +0 -1
  245. package/dist/chunk-36QNIZBO.js +0 -532
  246. package/dist/chunk-36QNIZBO.js.map +0 -1
  247. package/dist/chunk-4AQOYAW4.js +0 -3069
  248. package/dist/chunk-4AQOYAW4.js.map +0 -1
  249. package/dist/chunk-4D5EWJ3P.js +0 -77
  250. package/dist/chunk-4D5EWJ3P.js.map +0 -1
  251. package/dist/chunk-5FN54NDH.js +0 -2257
  252. package/dist/chunk-5FN54NDH.js.map +0 -1
  253. package/dist/chunk-BOYGQYRQ.js +0 -7306
  254. package/dist/chunk-BOYGQYRQ.js.map +0 -1
  255. package/dist/chunk-CN3XMECL.js +0 -212
  256. package/dist/chunk-CN3XMECL.js.map +0 -1
  257. package/dist/chunk-EBI3BX6U.js +0 -164
  258. package/dist/chunk-EBI3BX6U.js.map +0 -1
  259. package/dist/chunk-EILUG3VB.js +0 -1275
  260. package/dist/chunk-EILUG3VB.js.map +0 -1
  261. package/dist/chunk-FUDY333O.js +0 -70
  262. package/dist/chunk-FUDY333O.js.map +0 -1
  263. package/dist/chunk-GBVOWFIK.js +0 -1237
  264. package/dist/chunk-GBVOWFIK.js.map +0 -1
  265. package/dist/chunk-H4TQ3H3Y.js +0 -262
  266. package/dist/chunk-H4TQ3H3Y.js.map +0 -1
  267. package/dist/chunk-JGB3IXZO.js +0 -189
  268. package/dist/chunk-JGB3IXZO.js.map +0 -1
  269. package/dist/chunk-KD2QRQPY.js +0 -4342
  270. package/dist/chunk-KD2QRQPY.js.map +0 -1
  271. package/dist/chunk-KLMXQVYK.js +0 -369
  272. package/dist/chunk-KLMXQVYK.js.map +0 -1
  273. package/dist/chunk-KZUG5KFQ.js +0 -214
  274. package/dist/chunk-KZUG5KFQ.js.map +0 -1
  275. package/dist/chunk-QDAQ4CJU.js +0 -345
  276. package/dist/chunk-QDAQ4CJU.js.map +0 -1
  277. package/dist/chunk-RMH72RZI.js.map +0 -1
  278. package/dist/chunk-SWKWQZXM.js +0 -117
  279. package/dist/chunk-SWKWQZXM.js.map +0 -1
  280. package/dist/chunk-TJBP2K4T.js.map +0 -1
  281. package/dist/chunk-TLCEAQDQ.js +0 -542
  282. package/dist/chunk-TLCEAQDQ.js.map +0 -1
  283. package/dist/chunk-UZXBISGO.js.map +0 -1
  284. package/dist/chunk-WGBAKP3Q.js +0 -3220
  285. package/dist/chunk-WGBAKP3Q.js.map +0 -1
  286. package/dist/compare/index.cjs +0 -5475
  287. package/dist/compare/index.cjs.map +0 -1
  288. package/dist/compare/index.d.cts +0 -114
  289. package/dist/compare/index.d.ts +0 -114
  290. package/dist/compare/index.js +0 -731
  291. package/dist/compare/index.js.map +0 -1
  292. package/dist/core/commands/formatting-commands.cjs +0 -828
  293. package/dist/core/commands/formatting-commands.cjs.map +0 -1
  294. package/dist/core/commands/formatting-commands.d.cts +0 -63
  295. package/dist/core/commands/formatting-commands.d.ts +0 -63
  296. package/dist/core/commands/formatting-commands.js +0 -37
  297. package/dist/core/commands/formatting-commands.js.map +0 -1
  298. package/dist/core/commands/image-commands.cjs +0 -2023
  299. package/dist/core/commands/image-commands.cjs.map +0 -1
  300. package/dist/core/commands/image-commands.d.cts +0 -58
  301. package/dist/core/commands/image-commands.d.ts +0 -58
  302. package/dist/core/commands/image-commands.js +0 -18
  303. package/dist/core/commands/image-commands.js.map +0 -1
  304. package/dist/core/commands/section-layout-commands.cjs.map +0 -1
  305. package/dist/core/commands/section-layout-commands.d.cts +0 -62
  306. package/dist/core/commands/section-layout-commands.d.ts +0 -62
  307. package/dist/core/commands/section-layout-commands.js +0 -21
  308. package/dist/core/commands/section-layout-commands.js.map +0 -1
  309. package/dist/core/commands/style-commands.cjs.map +0 -1
  310. package/dist/core/commands/style-commands.d.cts +0 -13
  311. package/dist/core/commands/style-commands.d.ts +0 -13
  312. package/dist/core/commands/style-commands.js +0 -9
  313. package/dist/core/commands/style-commands.js.map +0 -1
  314. package/dist/core/commands/table-structure-commands.cjs +0 -1883
  315. package/dist/core/commands/table-structure-commands.cjs.map +0 -1
  316. package/dist/core/commands/table-structure-commands.d.cts +0 -59
  317. package/dist/core/commands/table-structure-commands.d.ts +0 -59
  318. package/dist/core/commands/table-structure-commands.js +0 -12
  319. package/dist/core/commands/table-structure-commands.js.map +0 -1
  320. package/dist/core/commands/text-commands.cjs +0 -2391
  321. package/dist/core/commands/text-commands.cjs.map +0 -1
  322. package/dist/core/commands/text-commands.d.cts +0 -24
  323. package/dist/core/commands/text-commands.d.ts +0 -24
  324. package/dist/core/commands/text-commands.js +0 -28
  325. package/dist/core/commands/text-commands.js.map +0 -1
  326. package/dist/core/selection/mapping.cjs +0 -200
  327. package/dist/core/selection/mapping.cjs.map +0 -1
  328. package/dist/core/selection/mapping.d.cts +0 -2
  329. package/dist/core/selection/mapping.d.ts +0 -2
  330. package/dist/core/selection/mapping.js +0 -31
  331. package/dist/core/selection/mapping.js.map +0 -1
  332. package/dist/core/state/editor-state.cjs +0 -2278
  333. package/dist/core/state/editor-state.cjs.map +0 -1
  334. package/dist/core/state/editor-state.d.cts +0 -2
  335. package/dist/core/state/editor-state.d.ts +0 -2
  336. package/dist/core/state/editor-state.js +0 -26
  337. package/dist/core/state/editor-state.js.map +0 -1
  338. package/dist/index.cjs +0 -38553
  339. package/dist/index.cjs.map +0 -1
  340. package/dist/index.d.cts +0 -15
  341. package/dist/index.d.ts +0 -15
  342. package/dist/index.js +0 -7856
  343. package/dist/index.js.map +0 -1
  344. package/dist/io/docx-session.cjs +0 -16236
  345. package/dist/io/docx-session.cjs.map +0 -1
  346. package/dist/io/docx-session.d.cts +0 -21
  347. package/dist/io/docx-session.d.ts +0 -21
  348. package/dist/io/docx-session.js +0 -18
  349. package/dist/io/docx-session.js.map +0 -1
  350. package/dist/legal/index.cjs +0 -3900
  351. package/dist/legal/index.cjs.map +0 -1
  352. package/dist/legal/index.d.cts +0 -86
  353. package/dist/legal/index.d.ts +0 -86
  354. package/dist/legal/index.js +0 -616
  355. package/dist/legal/index.js.map +0 -1
  356. package/dist/public-types-7ZL_94cz.d.ts +0 -1573
  357. package/dist/public-types-CeMaDueh.d.cts +0 -1573
  358. package/dist/public-types.cjs +0 -19
  359. package/dist/public-types.cjs.map +0 -1
  360. package/dist/public-types.d.cts +0 -2
  361. package/dist/public-types.d.ts +0 -2
  362. package/dist/public-types.js +0 -1
  363. package/dist/public-types.js.map +0 -1
  364. package/dist/runtime/document-runtime.cjs +0 -11140
  365. package/dist/runtime/document-runtime.cjs.map +0 -1
  366. package/dist/runtime/document-runtime.d.cts +0 -231
  367. package/dist/runtime/document-runtime.d.ts +0 -231
  368. package/dist/runtime/document-runtime.js +0 -21
  369. package/dist/runtime/document-runtime.js.map +0 -1
  370. package/dist/structural-helpers-CilgOVhh.d.cts +0 -10
  371. package/dist/structural-helpers-q0Gd-eBN.d.ts +0 -10
  372. package/dist/ui-tailwind/editor-surface/search-plugin.cjs +0 -313
  373. package/dist/ui-tailwind/editor-surface/search-plugin.cjs.map +0 -1
  374. package/dist/ui-tailwind/editor-surface/search-plugin.d.cts +0 -67
  375. package/dist/ui-tailwind/editor-surface/search-plugin.d.ts +0 -67
  376. package/dist/ui-tailwind/editor-surface/search-plugin.js +0 -23
  377. package/dist/ui-tailwind/editor-surface/search-plugin.js.map +0 -1
  378. package/dist/ui-tailwind/index.cjs +0 -4833
  379. package/dist/ui-tailwind/index.cjs.map +0 -1
  380. package/dist/ui-tailwind/index.d.cts +0 -617
  381. package/dist/ui-tailwind/index.d.ts +0 -617
  382. package/dist/ui-tailwind/index.js +0 -575
  383. package/dist/ui-tailwind/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/api/session-state.ts","../src/review/store/revision-types.ts","../src/review/store/revision-store.ts","../src/validation/compatibility-engine.ts","../src/validation/diagnostics.ts"],"sourcesContent":["import type {\n EditorSessionState,\n PersistedEditorSnapshot,\n} from \"./public-types.ts\";\n\nexport const EDITOR_SESSION_STATE_VERSION = \"editor-session-state/1\" as const;\n\nfunction cloneStructuredValue<T>(value: T): T {\n return structuredClone(value);\n}\n\nexport function createEditorSessionState(\n input: Omit<EditorSessionState, \"sessionVersion\">,\n): EditorSessionState {\n return cloneStructuredValue({\n sessionVersion: EDITOR_SESSION_STATE_VERSION,\n ...input,\n });\n}\n\nexport function editorSessionStateFromPersistedSnapshot(\n snapshot: PersistedEditorSnapshot,\n): EditorSessionState {\n return createEditorSessionState({\n schemaVersion: snapshot.schemaVersion,\n documentId: snapshot.documentId,\n docId: snapshot.docId,\n createdAt: snapshot.createdAt,\n updatedAt: snapshot.updatedAt,\n editorBuild: snapshot.editorBuild,\n canonicalDocument: snapshot.canonicalDocument,\n compatibility: snapshot.compatibility,\n warningLog: snapshot.warningLog,\n protectionSnapshot: snapshot.protectionSnapshot,\n sourcePackage: snapshot.sourcePackage,\n });\n}\n\nexport function persistedSnapshotFromEditorSessionState(\n sessionState: EditorSessionState,\n options: {\n savedAt: string;\n },\n): PersistedEditorSnapshot {\n return cloneStructuredValue({\n snapshotVersion: \"persisted-editor-snapshot/2\",\n schemaVersion: sessionState.schemaVersion,\n documentId: sessionState.documentId,\n docId: sessionState.docId,\n createdAt: sessionState.createdAt,\n updatedAt: sessionState.updatedAt,\n savedAt: options.savedAt,\n editorBuild: sessionState.editorBuild,\n canonicalDocument: sessionState.canonicalDocument,\n compatibility: sessionState.compatibility,\n warningLog: sessionState.warningLog,\n protectionSnapshot: sessionState.protectionSnapshot,\n sourcePackage: sessionState.sourcePackage,\n });\n}\n","import {\n createNodeAnchor,\n createRangeAnchor,\n mapAnchor,\n normalizeRange,\n type Assoc,\n type BoundaryAssoc,\n type DocRange,\n type EditorAnchorProjection,\n type TransactionMapping,\n} from \"../../core/selection/mapping.ts\";\nimport type { RevisionStoryTargetRecord } from \"../../model/canonical-document.ts\";\n\nexport type RevisionAnchor = EditorAnchorProjection;\n\nexport type SupportedRevisionKind = \"insertion\" | \"deletion\" | \"property-change\";\nexport type PreserveOnlyRevisionKind = \"formatting\" | \"move\";\nexport type RevisionKind = SupportedRevisionKind | PreserveOnlyRevisionKind;\n\nexport type RevisionStatus = \"active\" | \"accepted\" | \"rejected\" | \"detached\";\nexport type RevisionActionability = \"actionable\" | \"preserve-only\";\nexport type RevisionAnchorState = \"active\" | \"detached\";\n\nexport interface PropertyChangeData {\n xmlTag: \"pPrChange\" | \"sectPrChange\" | \"tblPrChange\" | \"rPrChange\";\n beforeXml: string;\n}\n\nexport interface MoveData {\n moveId: string;\n direction: \"from\" | \"to\";\n linkedRevisionId?: string;\n}\n\nexport interface RevisionMetadataEnvelope {\n source: \"runtime\" | \"import\";\n storyTarget?: RevisionStoryTargetRecord;\n preserveOnlyReason?: string;\n importedRevisionForm?:\n | \"run-insertion\"\n | \"run-deletion\"\n | \"paragraph-insertion\"\n | \"paragraph-deletion\";\n originalRevisionType?: string;\n ooxmlRevisionId?: string;\n propertyChangeData?: PropertyChangeData;\n moveData?: MoveData;\n}\n\nexport type PropertyChangeRevision = RevisionRecord & {\n kind: \"property-change\";\n metadata: RevisionMetadataEnvelope & { propertyChangeData: PropertyChangeData };\n};\n\nexport type MoveRevision = RevisionRecord & {\n kind: \"move\";\n metadata: RevisionMetadataEnvelope & { moveData: MoveData };\n};\n\nexport interface RevisionRecord {\n revisionId: string;\n kind: RevisionKind;\n anchor: RevisionAnchor;\n authorId: string;\n createdAt: string;\n status: RevisionStatus;\n warningIds: string[];\n metadata: RevisionMetadataEnvelope;\n}\n\nexport interface RevisionAnchorSummary {\n anchor: RevisionAnchor;\n state: RevisionAnchorState;\n range: DocRange;\n}\n\nexport function createRevisionRangeAnchor(\n from: number,\n to = from,\n assoc?: BoundaryAssoc,\n): RevisionAnchor {\n return createRangeAnchor(from, to, assoc);\n}\n\nexport function createRevisionNodeAnchor(at: number, assoc?: Assoc): RevisionAnchor {\n return createNodeAnchor(at, assoc);\n}\n\nexport function remapRevisionAnchor(\n anchor: RevisionAnchor,\n mapping: TransactionMapping,\n): RevisionAnchor {\n return mapAnchor(anchor, mapping);\n}\n\nexport function isDetachedRevisionAnchor(anchor: RevisionAnchor): boolean {\n return anchor.kind === \"detached\";\n}\n\nexport function summarizeRevisionAnchor(anchor: RevisionAnchor): RevisionAnchorSummary {\n if (anchor.kind === \"range\") {\n return {\n anchor,\n state: \"active\",\n range: normalizeRange(anchor.range),\n };\n }\n\n if (anchor.kind === \"node\") {\n return {\n anchor,\n state: \"active\",\n range: {\n from: anchor.at,\n to: anchor.at,\n },\n };\n }\n\n return {\n anchor,\n state: \"detached\",\n range: normalizeRange(anchor.lastKnownRange),\n };\n}\n\nexport function getRevisionActionability(\n revision:\n | RevisionKind\n | Pick<RevisionRecord, \"kind\" | \"metadata\">,\n): RevisionActionability {\n if (\n typeof revision !== \"string\" &&\n typeof revision.metadata.preserveOnlyReason === \"string\" &&\n revision.metadata.preserveOnlyReason.length > 0\n ) {\n return \"preserve-only\";\n }\n\n const kind = typeof revision === \"string\" ? revision : revision.kind;\n switch (kind) {\n case \"insertion\":\n case \"deletion\":\n case \"property-change\":\n return \"actionable\";\n case \"formatting\":\n case \"move\":\n return \"preserve-only\";\n }\n}\n\nexport function isRevisionActionable(\n record: Pick<RevisionRecord, \"kind\" | \"metadata\" | \"status\">,\n): boolean {\n return getRevisionActionability(record) === \"actionable\" && record.status === \"active\";\n}\n\nexport function describeRevisionKind(kind: RevisionKind): string {\n switch (kind) {\n case \"insertion\":\n return \"Insertion\";\n case \"deletion\":\n return \"Deletion\";\n case \"formatting\":\n return \"Formatting change\";\n case \"move\":\n return \"Move\";\n case \"property-change\":\n return \"Property change\";\n }\n}\n","import type { TransactionMapping } from \"../../core/selection/mapping.ts\";\nimport {\n describeRevisionKind,\n getRevisionActionability,\n isDetachedRevisionAnchor,\n isRevisionActionable,\n remapRevisionAnchor,\n summarizeRevisionAnchor,\n type RevisionActionability,\n type RevisionKind,\n type RevisionMetadataEnvelope,\n type RevisionRecord,\n type RevisionStatus,\n} from \"./revision-types.ts\";\n\nexport type { RevisionRecord, RevisionKind, RevisionStatus } from \"./revision-types.ts\";\n\nexport interface RevisionStore {\n version: \"revision-store/1\";\n revisions: Record<string, RevisionRecord>;\n}\n\nexport interface CreateRevisionRecordParams {\n revisionId: string;\n kind: RevisionKind;\n anchor: RevisionRecord[\"anchor\"];\n authorId: string;\n createdAt: string;\n status?: Exclude<RevisionStatus, \"detached\">;\n warningIds?: string[];\n metadata?: Partial<RevisionMetadataEnvelope>;\n}\n\nexport interface RevisionSidebarEntry {\n revisionId: string;\n kind: RevisionKind;\n label: string;\n status: RevisionStatus;\n actionability: RevisionActionability;\n anchorLabel: string;\n createdAt: string;\n authorId: string;\n warningCount: number;\n canAccept: boolean;\n canReject: boolean;\n preserveOnlyReason?: string;\n linkedMoveRevisionId?: string;\n moveDirection?: \"from\" | \"to\";\n}\n\nexport interface RevisionSidebarProjection {\n totalCount: number;\n activeRevisionIds: string[];\n acceptedRevisionIds: string[];\n rejectedRevisionIds: string[];\n detachedRevisionIds: string[];\n actionableRevisionIds: string[];\n preserveOnlyRevisionIds: string[];\n revisions: RevisionSidebarEntry[];\n}\n\nexport function createRevisionStore(\n revisions: Record<string, RevisionRecord> = {},\n): RevisionStore {\n return {\n version: \"revision-store/1\",\n revisions,\n };\n}\n\nexport function createRevisionRecord(\n params: CreateRevisionRecordParams,\n): RevisionRecord {\n return normalizeRevisionRecord({\n revisionId: params.revisionId,\n kind: params.kind,\n anchor: params.anchor,\n authorId: params.authorId,\n createdAt: params.createdAt,\n status: params.status ?? \"active\",\n warningIds: [...(params.warningIds ?? [])],\n metadata: {\n source: params.metadata?.source ?? \"runtime\",\n storyTarget: params.metadata?.storyTarget,\n preserveOnlyReason:\n params.metadata?.preserveOnlyReason ??\n (getRevisionActionability(params.kind) === \"preserve-only\"\n ? \"Imported preserve-only revision.\"\n : undefined),\n importedRevisionForm: params.metadata?.importedRevisionForm,\n originalRevisionType: params.metadata?.originalRevisionType,\n ooxmlRevisionId: params.metadata?.ooxmlRevisionId,\n propertyChangeData: params.metadata?.propertyChangeData,\n moveData: params.metadata?.moveData,\n },\n });\n}\n\nexport function upsertRevisionRecord(\n store: RevisionStore,\n revision: RevisionRecord,\n): RevisionStore {\n return {\n ...store,\n revisions: {\n ...store.revisions,\n [revision.revisionId]: normalizeRevisionRecord(revision),\n },\n };\n}\n\nexport function setRevisionStatus(\n store: RevisionStore,\n revisionId: string,\n status: Exclude<RevisionStatus, \"detached\">,\n): RevisionStore {\n const existing = store.revisions[revisionId];\n if (!existing) {\n return store;\n }\n\n if (existing.status === \"detached\") {\n return store;\n }\n\n if (\n (status === \"accepted\" || status === \"rejected\") &&\n getRevisionActionability(existing) !== \"actionable\"\n ) {\n return store;\n }\n\n return upsertRevisionRecord(store, {\n ...existing,\n status,\n });\n}\n\nexport function setRevisionWarnings(\n store: RevisionStore,\n revisionId: string,\n warningIds: string[],\n): RevisionStore {\n const existing = store.revisions[revisionId];\n if (!existing) {\n return store;\n }\n\n return upsertRevisionRecord(store, {\n ...existing,\n warningIds: [...warningIds],\n });\n}\n\nexport function remapRevisionStore(\n store: RevisionStore,\n mapping: TransactionMapping,\n): RevisionStore {\n return createRevisionStore(\n Object.fromEntries(\n Object.entries(store.revisions).map(([revisionId, revision]) => {\n const anchor = remapRevisionAnchor(revision.anchor, mapping);\n const status =\n anchor.kind === \"detached\"\n ? \"detached\"\n : revision.status === \"accepted\" || revision.status === \"rejected\"\n ? revision.status\n : \"active\";\n\n return [\n revisionId,\n normalizeRevisionRecord({\n ...revision,\n anchor,\n status,\n }),\n ];\n }),\n ),\n );\n}\n\nexport function createRevisionSidebarProjection(\n store: RevisionStore,\n): RevisionSidebarProjection {\n const revisions = Object.values(store.revisions)\n .map(toSidebarEntry)\n .sort(compareRevisionEntries);\n\n return {\n totalCount: revisions.length,\n activeRevisionIds: revisions\n .filter((revision) => revision.status === \"active\")\n .map((revision) => revision.revisionId),\n acceptedRevisionIds: revisions\n .filter((revision) => revision.status === \"accepted\")\n .map((revision) => revision.revisionId),\n rejectedRevisionIds: revisions\n .filter((revision) => revision.status === \"rejected\")\n .map((revision) => revision.revisionId),\n detachedRevisionIds: revisions\n .filter((revision) => revision.status === \"detached\")\n .map((revision) => revision.revisionId),\n actionableRevisionIds: revisions\n .filter((revision) => revision.actionability === \"actionable\")\n .map((revision) => revision.revisionId),\n preserveOnlyRevisionIds: revisions\n .filter((revision) => revision.actionability === \"preserve-only\")\n .map((revision) => revision.revisionId),\n revisions,\n };\n}\n\nfunction toSidebarEntry(revision: RevisionRecord): RevisionSidebarEntry {\n const anchorSummary = summarizeRevisionAnchor(revision.anchor);\n const actionability = getRevisionActionability(revision);\n\n const moveData = revision.metadata.moveData;\n\n return {\n revisionId: revision.revisionId,\n kind: revision.kind,\n label: describeRevisionKind(revision.kind),\n status: revision.status,\n actionability,\n anchorLabel:\n anchorSummary.state === \"detached\"\n ? `Detached ${anchorSummary.range.from}-${anchorSummary.range.to}`\n : `Range ${anchorSummary.range.from}-${anchorSummary.range.to}`,\n createdAt: revision.createdAt,\n authorId: revision.authorId,\n warningCount: revision.warningIds.length,\n canAccept: isRevisionActionable(revision),\n canReject: isRevisionActionable(revision),\n preserveOnlyReason: revision.metadata.preserveOnlyReason,\n linkedMoveRevisionId: moveData?.linkedRevisionId,\n moveDirection: moveData?.direction,\n };\n}\n\nfunction normalizeRevisionRecord(revision: RevisionRecord): RevisionRecord {\n const actionability = getRevisionActionability(revision);\n\n if (isDetachedRevisionAnchor(revision.anchor)) {\n return {\n ...revision,\n status: \"detached\",\n metadata: {\n ...revision.metadata,\n preserveOnlyReason:\n revision.metadata.preserveOnlyReason ??\n (actionability === \"preserve-only\"\n ? \"Imported preserve-only revision.\"\n : undefined),\n },\n };\n }\n\n if (actionability === \"preserve-only\" && revision.status !== \"detached\") {\n return {\n ...revision,\n status: revision.status === \"accepted\" || revision.status === \"rejected\" ? \"active\" : revision.status,\n metadata: {\n ...revision.metadata,\n preserveOnlyReason:\n revision.metadata.preserveOnlyReason ?? \"Imported preserve-only revision.\",\n },\n };\n }\n\n return revision;\n}\n\nfunction compareRevisionEntries(\n left: RevisionSidebarEntry,\n right: RevisionSidebarEntry,\n): number {\n const statusDelta = priorityForStatus(left.status) - priorityForStatus(right.status);\n if (statusDelta !== 0) {\n return statusDelta;\n }\n\n const actionabilityDelta =\n priorityForActionability(left.actionability) - priorityForActionability(right.actionability);\n if (actionabilityDelta !== 0) {\n return actionabilityDelta;\n }\n\n return left.createdAt.localeCompare(right.createdAt);\n}\n\nfunction priorityForStatus(status: RevisionStatus): number {\n switch (status) {\n case \"active\":\n return 0;\n case \"detached\":\n return 1;\n case \"accepted\":\n return 2;\n case \"rejected\":\n return 3;\n }\n}\n\nfunction priorityForActionability(actionability: RevisionActionability): number {\n switch (actionability) {\n case \"actionable\":\n return 0;\n case \"preserve-only\":\n return 1;\n }\n}\n","import { createRangeAnchor } from \"../core/selection/mapping.ts\";\nimport type {\n CanonicalDocumentEnvelope,\n CompatibilityFeatureEntry,\n CompatibilityReport,\n EditorError,\n EditorWarning,\n} from \"../core/state/editor-state.ts\";\nimport type {\n BlockNode,\n DocumentRootNode,\n InlineNode,\n ParagraphNode,\n} from \"../model/canonical-document.ts\";\nimport {\n describeOpaqueFragment,\n listOpaqueFragments,\n listPreservedPackageParts,\n} from \"../preservation/store.ts\";\n\nexport interface BuildCompatibilityReportInput {\n document: CanonicalDocumentEnvelope;\n warnings?: readonly EditorWarning[];\n fatalError?: EditorError;\n generatedAt: string;\n}\n\nexport function buildCompatibilityReport(\n input: BuildCompatibilityReportInput,\n): CompatibilityReport {\n const content = normalizeDocumentRoot(input.document.content);\n const contentFeatures = collectContentFeatures(content);\n if (hasSupportedRuntimeComments(input.document.review.comments)) {\n contentFeatures.push(\n supportedEntry(\n \"comments-single-paragraph\",\n \"Single-paragraph review comments stay mappable through runtime selections.\",\n ),\n );\n }\n const featureEntries: CompatibilityFeatureEntry[] = [\n ...contentFeatures,\n ...collectPreservationFeatures(input.document),\n ];\n const warnings = dedupeWarnings([\n ...(input.warnings ?? []),\n ...collectDiagnosticWarnings(input.document),\n ]);\n const errors = dedupeErrors([\n ...collectDiagnosticErrors(input.document),\n ...(input.fatalError ? [input.fatalError] : []),\n ]);\n\n return {\n reportVersion: \"compatibility-report/1\",\n generatedAt: input.generatedAt,\n blockExport:\n featureEntries.some((entry) => entry.featureClass === \"unsupported-fatal\") ||\n errors.some((error) => error.isFatal),\n featureEntries,\n warnings,\n errors,\n };\n}\n\nfunction hasSupportedRuntimeComments(\n comments: CanonicalDocumentEnvelope[\"review\"][\"comments\"],\n): boolean {\n return Object.values(comments).some((comment) => comment.anchor.kind !== \"detached\");\n}\n\nfunction normalizeDocumentRoot(content: unknown): DocumentRootNode {\n if (content && typeof content === \"object\" && (content as { type?: string }).type === \"doc\") {\n return content as DocumentRootNode;\n }\n\n if (Array.isArray(content)) {\n return {\n type: \"doc\",\n children: content.filter(\n (value): value is DocumentRootNode[\"children\"][number] =>\n Boolean(value) &&\n typeof value === \"object\" &&\n ((value as { type?: string }).type === \"paragraph\" ||\n (value as { type?: string }).type === \"opaque_block\"),\n ),\n };\n }\n\n return {\n type: \"doc\",\n children: [{ type: \"paragraph\", children: [] }],\n };\n}\n\nfunction collectContentFeatures(\n content: DocumentRootNode,\n): CompatibilityFeatureEntry[] {\n const flags = {\n paragraphs: false,\n runs: false,\n whitespace: false,\n headings: false,\n lists: false,\n hyperlinks: false,\n images: false,\n tables: false,\n sections: false,\n contentControls: false,\n };\n\n for (let index = 0; index < content.children.length; index += 1) {\n measureBlock(content.children[index], flags);\n }\n\n const entries: CompatibilityFeatureEntry[] = [];\n if (flags.paragraphs) {\n entries.push(supportedEntry(\"paragraphs\", \"Paragraph structure is editable and round-trippable.\"));\n }\n if (flags.runs) {\n entries.push(supportedEntry(\"runs\", \"Runs and inline text are editable through runtime commands.\"));\n }\n if (flags.whitespace) {\n entries.push(supportedEntry(\"whitespace\", \"Whitespace-sensitive text units stay explicit in the runtime model.\"));\n }\n if (flags.headings) {\n entries.push(supportedEntry(\"headings\", \"Heading styles remain attached to paragraph structure.\"));\n }\n if (flags.lists) {\n entries.push(supportedEntry(\"lists\", \"Numbering metadata stays attached to paragraph blocks.\"));\n }\n if (flags.hyperlinks) {\n entries.push(supportedEntry(\"hyperlinks\", \"Hyperlink relationships are preserved and re-serialized.\"));\n }\n if (flags.images) {\n entries.push(supportedEntry(\"inline-images\", \"Inline image placements stay attached to preserved media parts.\"));\n }\n if (flags.tables) {\n entries.push(\n supportedEntry(\n \"tables\",\n \"Structured tables keep cell topology and common visual properties through runtime editing and export.\",\n ),\n );\n }\n if (flags.sections) {\n entries.push(\n supportedEntry(\n \"sections\",\n \"Section boundaries and page-layout properties remain structured and export-safe.\",\n ),\n );\n }\n if (flags.contentControls) {\n entries.push(\n supportedEntry(\n \"content-controls\",\n \"Common content controls render through structured SDT state and round-trip without flattening to opaque placeholders.\",\n ),\n );\n }\n return entries;\n}\n\nfunction measureBlock(\n block: BlockNode,\n flags: {\n paragraphs: boolean;\n runs: boolean;\n whitespace: boolean;\n headings: boolean;\n lists: boolean;\n hyperlinks: boolean;\n images: boolean;\n tables: boolean;\n sections: boolean;\n contentControls: boolean;\n },\n): number {\n switch (block.type) {\n case \"paragraph\":\n flags.paragraphs = true;\n if (block.styleId?.toLowerCase().startsWith(\"heading\")) {\n flags.headings = true;\n }\n if (block.numbering) {\n flags.lists = true;\n }\n return measureParagraph(block, flags);\n case \"table\":\n flags.tables = true;\n return block.rows.reduce(\n (size, row) =>\n size +\n row.cells.reduce(\n (cellSize, cell) =>\n cellSize + cell.children.reduce((childSize, child) => childSize + measureBlock(child, flags), 0),\n 0,\n ),\n 0,\n );\n case \"sdt\":\n flags.contentControls = true;\n return block.children.reduce((size, child) => size + measureBlock(child, flags), 0);\n case \"custom_xml\":\n return block.children.reduce((size, child) => size + measureBlock(child, flags), 0);\n case \"section_break\":\n flags.sections = true;\n return 1;\n default:\n return 0;\n }\n}\n\nfunction measureParagraph(\n paragraph: ParagraphNode,\n flags: {\n paragraphs: boolean;\n runs: boolean;\n whitespace: boolean;\n hyperlinks: boolean;\n images: boolean;\n tables: boolean;\n sections: boolean;\n contentControls: boolean;\n },\n): number {\n let size = 0;\n const children = Array.isArray(paragraph.children) ? paragraph.children : [];\n\n for (const child of children) {\n size += measureInlineNode(child, flags);\n }\n\n return size;\n}\n\nfunction measureInlineNode(\n node: InlineNode,\n flags: {\n paragraphs: boolean;\n runs: boolean;\n whitespace: boolean;\n hyperlinks: boolean;\n images: boolean;\n tables: boolean;\n sections: boolean;\n contentControls: boolean;\n },\n): number {\n switch (node.type) {\n case \"text\":\n flags.runs = flags.runs || node.text.length > 0;\n flags.whitespace =\n flags.whitespace ||\n /^\\s/u.test(node.text) ||\n /\\s$/u.test(node.text) ||\n node.text.includes(\" \");\n return Array.from(node.text).length;\n case \"tab\":\n case \"hard_break\":\n flags.runs = true;\n flags.whitespace = true;\n return 1;\n case \"hyperlink\":\n flags.runs = true;\n flags.hyperlinks = true;\n return node.children.reduce((size, child) => size + measureInlineNode(child, flags), 0);\n case \"image\":\n flags.images = true;\n flags.runs = true;\n return 1;\n case \"opaque_inline\":\n flags.runs = true;\n return 1;\n case \"column_break\":\n case \"symbol\":\n case \"field\":\n case \"bookmark_start\":\n case \"bookmark_end\":\n case \"footnote_ref\":\n case \"chart_preview\":\n case \"smartart_preview\":\n case \"shape\":\n case \"wordart\":\n case \"vml_shape\":\n default:\n flags.runs = true;\n return 1;\n }\n}\n\nfunction collectPreservationFeatures(\n document: CanonicalDocumentEnvelope,\n): CompatibilityFeatureEntry[] {\n const entries: CompatibilityFeatureEntry[] = [];\n const structuredSubPartPaths = collectStructuredSubPartPaths(document);\n\n entries.push(...collectSubPartFeatures(document));\n\n for (const fragment of listOpaqueFragments(document.preservation as never)) {\n const descriptor = describeOpaqueFragment(fragment);\n entries.push({\n featureEntryId: `feature:${fragment.fragmentId}`,\n featureKey: descriptor.featureKey,\n featureClass: \"preserve-only\",\n message: descriptor.label,\n affectedAnchor: createRangeAnchor(\n fragment.lastKnownRange.from,\n fragment.lastKnownRange.to,\n ),\n details: {\n fragmentId: fragment.fragmentId,\n warningId: fragment.warningId,\n detail: descriptor.detail,\n },\n });\n }\n\n for (const packagePart of listPreservedPackageParts(document.preservation as never)) {\n if (structuredSubPartPaths.has(packagePart.packagePartName)) {\n continue;\n }\n\n entries.push({\n featureEntryId: `feature:package:${packagePart.packagePartName}`,\n featureKey: \"unknown-package-parts\",\n featureClass: \"preserve-only\",\n message: `Preserved package part ${packagePart.packagePartName}.`,\n details: {\n packagePartName: packagePart.packagePartName,\n contentType: packagePart.contentType,\n relationshipIds: packagePart.relationshipIds,\n },\n });\n }\n\n return entries;\n}\n\nfunction collectStructuredSubPartPaths(\n document: CanonicalDocumentEnvelope,\n): ReadonlySet<string> {\n const subParts = document.subParts;\n if (!subParts) {\n return new Set<string>();\n }\n\n const paths = new Set<string>();\n\n for (const header of subParts.headers ?? []) {\n paths.add(header.partPath);\n }\n\n for (const footer of subParts.footers ?? []) {\n paths.add(footer.partPath);\n }\n\n if (subParts.footnoteCollection) {\n paths.add(\"/word/footnotes.xml\");\n paths.add(\"/word/endnotes.xml\");\n }\n\n if (subParts.theme) {\n paths.add(\"/word/theme/theme1.xml\");\n }\n\n return paths;\n}\n\nfunction collectSubPartFeatures(\n document: CanonicalDocumentEnvelope,\n): CompatibilityFeatureEntry[] {\n const subParts = document.subParts;\n if (!subParts) {\n return [];\n }\n\n const entries: CompatibilityFeatureEntry[] = collectLossySubPartFeatures(subParts);\n const hasHeaderFooterContent = (subParts.headers?.length ?? 0) > 0 || (subParts.footers?.length ?? 0) > 0;\n const noteCount =\n Object.keys(subParts.footnoteCollection?.footnotes ?? {}).length +\n Object.keys(subParts.footnoteCollection?.endnotes ?? {}).length;\n\n if (hasHeaderFooterContent && !entries.some((entry) => entry.featureKey === \"headers-footers-lossy\")) {\n entries.push({\n featureEntryId: \"feature:subparts:headers-footers\",\n featureKey: \"headers-footers\",\n featureClass: \"supported-roundtrip\",\n message: \"Headers and footers resolve as structured secondary stories with export-safe ownership.\",\n details: {\n headerCount: subParts.headers?.length ?? 0,\n footerCount: subParts.footers?.length ?? 0,\n },\n });\n }\n\n if (noteCount > 0 && !entries.some((entry) => entry.featureKey === \"notes-lossy\")) {\n entries.push({\n featureEntryId: \"feature:subparts:notes\",\n featureKey: \"notes\",\n featureClass: \"supported-roundtrip\",\n message: \"Footnotes and endnotes resolve as structured secondary stories with export-safe ownership.\",\n details: {\n footnoteCount: Object.keys(subParts.footnoteCollection?.footnotes ?? {}).length,\n endnoteCount: Object.keys(subParts.footnoteCollection?.endnotes ?? {}).length,\n },\n });\n }\n\n if (subParts.theme) {\n entries.push({\n featureEntryId: \"feature:subparts:theme\",\n featureKey: \"unknown-package-parts\",\n featureClass: \"preserve-only\",\n message: \"Theme metadata is preserved through structured sub-part ownership.\",\n details: {\n surface: \"theme-subpart\",\n themeName: subParts.theme.name,\n },\n });\n }\n\n return entries;\n}\n\nfunction collectLossySubPartFeatures(\n subParts: NonNullable<CanonicalDocumentEnvelope[\"subParts\"]>,\n): CompatibilityFeatureEntry[] {\n const entries: CompatibilityFeatureEntry[] = [];\n\n const headerFooterLossy = [\n ...(subParts.headers ?? []).flatMap((header) =>\n collectLossyBlocks(header.blocks, `header:${header.partPath}`),\n ),\n ...(subParts.footers ?? []).flatMap((footer) =>\n collectLossyBlocks(footer.blocks, `footer:${footer.partPath}`),\n ),\n ];\n if (headerFooterLossy.length > 0) {\n entries.push({\n featureEntryId: \"feature:subparts:headers-footers-lossy\",\n featureKey: \"headers-footers-lossy\",\n featureClass: \"unsupported-fatal\",\n message: \"Headers or footers contain content the current sub-part serializer cannot re-emit safely.\",\n details: {\n issues: headerFooterLossy,\n },\n });\n }\n\n const noteLossy = [\n ...Object.values(subParts.footnoteCollection?.footnotes ?? {}).flatMap((note) =>\n collectLossyBlocks(note.blocks, `footnote:${note.noteId}`),\n ),\n ...Object.values(subParts.footnoteCollection?.endnotes ?? {}).flatMap((note) =>\n collectLossyBlocks(note.blocks, `endnote:${note.noteId}`),\n ),\n ];\n if (noteLossy.length > 0) {\n entries.push({\n featureEntryId: \"feature:subparts:notes-lossy\",\n featureKey: \"notes-lossy\",\n featureClass: \"unsupported-fatal\",\n message: \"Footnotes or endnotes contain content the current sub-part serializer cannot re-emit safely.\",\n details: {\n issues: noteLossy,\n },\n });\n }\n\n return entries;\n}\n\nfunction collectLossyBlocks(\n blocks: readonly BlockNode[],\n surface: string,\n): string[] {\n const issues: string[] = [];\n\n for (const block of blocks) {\n if (block.type === \"table\") {\n for (const row of block.rows) {\n for (const cell of row.cells) {\n issues.push(...collectLossyBlocks(cell.children, `${surface}:table-cell`));\n }\n }\n continue;\n }\n\n if (block.type !== \"paragraph\") {\n issues.push(`${surface}:${block.type}`);\n continue;\n }\n\n if (\n block.numbering !== undefined ||\n block.keepNext !== undefined ||\n block.keepLines !== undefined ||\n block.outlineLevel !== undefined ||\n block.pageBreakBefore !== undefined ||\n block.widowControl !== undefined ||\n block.borders !== undefined ||\n block.shading !== undefined ||\n block.bidi !== undefined ||\n block.suppressLineNumbers !== undefined ||\n block.cnfStyle !== undefined\n ) {\n issues.push(`${surface}:paragraph-properties`);\n }\n\n for (const child of block.children) {\n issues.push(...collectLossyInlineContent(child, surface));\n }\n }\n\n return [...new Set(issues)];\n}\n\nfunction collectLossyInlineContent(\n node: InlineNode,\n surface: string,\n): string[] {\n switch (node.type) {\n case \"text\": {\n const allowSecondaryStoryColorMarks =\n surface.startsWith(\"header:\") || surface.startsWith(\"footer:\");\n const unsupportedMarks = (node.marks ?? [])\n .filter(\n (mark) =>\n mark.type !== \"bold\" &&\n mark.type !== \"italic\" &&\n mark.type !== \"underline\" &&\n mark.type !== \"strikethrough\" &&\n mark.type !== \"doubleStrikethrough\" &&\n mark.type !== \"fontFamily\" &&\n mark.type !== \"fontSize\" &&\n mark.type !== \"textColor\" &&\n (!allowSecondaryStoryColorMarks || mark.type !== \"backgroundColor\") &&\n (!allowSecondaryStoryColorMarks || mark.type !== \"highlight\") &&\n mark.type !== \"smallCaps\" &&\n mark.type !== \"allCaps\",\n )\n .map((mark) => `${surface}:mark:${mark.type}`);\n return unsupportedMarks;\n }\n case \"tab\":\n case \"hard_break\":\n case \"footnote_ref\":\n case \"field\":\n case \"bookmark_start\":\n case \"bookmark_end\":\n case \"shape\":\n case \"wordart\":\n case \"vml_shape\":\n case \"chart_preview\":\n case \"smartart_preview\":\n return [];\n default:\n return [`${surface}:${node.type}`];\n }\n}\n\nfunction collectDiagnosticWarnings(\n document: CanonicalDocumentEnvelope,\n): EditorWarning[] {\n const diagnostics = Array.isArray(document.diagnostics?.warnings)\n ? document.diagnostics.warnings\n : [];\n\n return diagnostics.map((warning) => ({\n warningId: warning.warningId,\n code:\n warning.source === \"validation\" || warning.source === \"export\"\n ? \"export_roundtrip_risk\"\n : warning.source === \"preservation\"\n ? \"unsupported_ooxml_preserved\"\n : \"import_normalized\",\n severity: \"warning\",\n message: warning.message,\n source: warning.source,\n }));\n}\n\nfunction collectDiagnosticErrors(\n document: CanonicalDocumentEnvelope,\n): EditorError[] {\n const diagnostics = Array.isArray(document.diagnostics?.errors)\n ? document.diagnostics.errors\n : [];\n\n return diagnostics.map((error) => ({\n errorId: error.diagnosticId,\n code:\n error.code === \"load_failed\"\n ? \"import_failed\"\n : error.code,\n message: error.message,\n isFatal: error.isFatal,\n source: error.source,\n }));\n}\n\nfunction supportedEntry(\n featureKey: CompatibilityFeatureEntry[\"featureKey\"],\n message: string,\n): CompatibilityFeatureEntry {\n return {\n featureEntryId: `feature:${featureKey}`,\n featureKey,\n featureClass: \"supported-roundtrip\",\n message,\n };\n}\n\nfunction dedupeWarnings(warnings: EditorWarning[]): EditorWarning[] {\n const byId = new Map<string, EditorWarning>();\n\n for (const warning of warnings) {\n byId.set(warning.warningId, warning);\n }\n\n return [...byId.values()];\n}\n\nfunction dedupeErrors(errors: EditorError[]): EditorError[] {\n const byId = new Map<string, EditorError>();\n\n for (const error of errors) {\n byId.set(error.errorId, error);\n }\n\n return [...byId.values()];\n}\n","export const COMPATIBILITY_FEATURE_CLASSES = [\n \"supported-roundtrip\",\n \"preserve-only\",\n \"unsupported-fatal\",\n] as const;\n\nexport type CompatibilityFeatureClass =\n (typeof COMPATIBILITY_FEATURE_CLASSES)[number];\n\nexport const EDITOR_WARNING_CODES = [\n \"unsupported_ooxml_preserved\",\n \"unsupported_ooxml_locked\",\n \"import_normalized\",\n \"export_roundtrip_risk\",\n \"comment_anchor_detached\",\n \"revision_anchor_detached\",\n \"large_document_degraded\",\n \"font_substitution\",\n \"image_missing\",\n] as const;\n\nexport type EditorWarningCode = (typeof EDITOR_WARNING_CODES)[number];\n\nexport const EDITOR_WARNING_SOURCES = [\n \"import\",\n \"runtime\",\n \"review\",\n \"preservation\",\n \"validation\",\n \"export\",\n] as const;\n\nexport type EditorWarningSource = (typeof EDITOR_WARNING_SOURCES)[number];\n\nexport const EDITOR_ERROR_CODES = [\n \"import_failed\",\n \"export_failed\",\n \"package_corrupt\",\n \"validation_failed\",\n \"datastore_failed\",\n \"internal_invariant\",\n] as const;\n\nexport type EditorErrorCode = (typeof EDITOR_ERROR_CODES)[number];\n\nexport const EDITOR_ERROR_SOURCES = [\n \"import\",\n \"runtime\",\n \"validation\",\n \"datastore\",\n \"host\",\n \"export\",\n] as const;\n\nexport type EditorErrorSource = (typeof EDITOR_ERROR_SOURCES)[number];\n\nexport type EditorAnchorProjection =\n | {\n kind: \"range\";\n from: number;\n to: number;\n assoc: {\n start: -1 | 1;\n end: -1 | 1;\n };\n }\n | {\n kind: \"node\";\n at: number;\n assoc: -1 | 1;\n }\n | {\n kind: \"detached\";\n lastKnownRange: {\n from: number;\n to: number;\n };\n reason: \"deleted\" | \"invalidatedByStructureChange\" | \"importAmbiguity\";\n };\n\nexport interface EditorWarning {\n warningId: string;\n code: EditorWarningCode;\n severity: \"info\" | \"warning\";\n message: string;\n source: EditorWarningSource;\n affectedAnchor?: EditorAnchorProjection;\n featureEntryId?: string;\n details?: Record<string, unknown>;\n}\n\nexport interface EditorError {\n errorId: string;\n code: EditorErrorCode;\n message: string;\n isFatal: boolean;\n source: EditorErrorSource;\n details?: Record<string, unknown>;\n}\n\nexport interface CompatibilityFeatureEntry<\n FeatureKey extends string = string,\n FeatureClass extends CompatibilityFeatureClass = CompatibilityFeatureClass,\n> {\n featureEntryId: string;\n featureKey: FeatureKey;\n featureClass: FeatureClass;\n message: string;\n affectedAnchor?: EditorAnchorProjection;\n details?: Record<string, unknown>;\n}\n\nexport interface CompatibilityDiagnostics<\n FeatureKey extends string = string,\n FeatureClass extends CompatibilityFeatureClass = CompatibilityFeatureClass,\n> {\n featureEntries: readonly CompatibilityFeatureEntry<FeatureKey, FeatureClass>[];\n warnings: readonly EditorWarning[];\n errors: readonly EditorError[];\n}\n\nconst EXPORT_BLOCKING_ERROR_CODES = new Set<EditorErrorCode>([\n \"import_failed\",\n \"export_failed\",\n \"package_corrupt\",\n \"validation_failed\",\n]);\n\nexport function isCompatibilityFeatureClass(\n value: string,\n): value is CompatibilityFeatureClass {\n return COMPATIBILITY_FEATURE_CLASSES.includes(\n value as CompatibilityFeatureClass,\n );\n}\n\nexport function isEditorWarningCode(value: string): value is EditorWarningCode {\n return EDITOR_WARNING_CODES.includes(value as EditorWarningCode);\n}\n\nexport function isEditorErrorCode(value: string): value is EditorErrorCode {\n return EDITOR_ERROR_CODES.includes(value as EditorErrorCode);\n}\n\nexport function createDiagnostics<\n FeatureKey extends string = string,\n FeatureClass extends CompatibilityFeatureClass = CompatibilityFeatureClass,\n>(\n input: Partial<CompatibilityDiagnostics<FeatureKey, FeatureClass>> = {},\n): CompatibilityDiagnostics<FeatureKey, FeatureClass> {\n return {\n featureEntries: freezeArray(input.featureEntries ?? []),\n warnings: freezeArray(input.warnings ?? []),\n errors: freezeArray(input.errors ?? []),\n };\n}\n\nexport function collectWarningIds(warnings: readonly EditorWarning[]): string[] {\n return warnings.map((warning) => warning.warningId);\n}\n\nexport function summarizeFeatureClasses<\n FeatureKey extends string,\n FeatureClass extends CompatibilityFeatureClass,\n>(\n featureEntries: readonly CompatibilityFeatureEntry<FeatureKey, FeatureClass>[],\n): Record<CompatibilityFeatureClass, number> {\n return featureEntries.reduce<Record<CompatibilityFeatureClass, number>>(\n (counts, entry) => {\n counts[entry.featureClass] += 1;\n return counts;\n },\n {\n \"supported-roundtrip\": 0,\n \"preserve-only\": 0,\n \"unsupported-fatal\": 0,\n },\n );\n}\n\nexport function diagnosticsBlockExport<\n FeatureKey extends string,\n FeatureClass extends CompatibilityFeatureClass,\n>(\n diagnostics: CompatibilityDiagnostics<FeatureKey, FeatureClass>,\n explicitBlockExport = false,\n): boolean {\n if (explicitBlockExport) {\n return true;\n }\n\n return (\n diagnostics.featureEntries.some(\n (entry) => entry.featureClass === \"unsupported-fatal\",\n ) ||\n diagnostics.errors.some(\n (error) => error.isFatal || EXPORT_BLOCKING_ERROR_CODES.has(error.code),\n )\n );\n}\n\nfunction freezeArray<Value>(items: readonly Value[]): readonly Value[] {\n return Object.freeze([...items]);\n}\n"],"mappings":"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","names":[]}
@@ -1,446 +0,0 @@
1
- // src/core/commands/section-layout-commands.ts
2
- function insertSectionBreak(document, snapshot, breakType, _context) {
3
- const cloned = structuredClone(document);
4
- const surface = snapshot.surface;
5
- if (!surface) {
6
- return noopResult(document, snapshot.selection);
7
- }
8
- const position = snapshot.selection.head;
9
- const blockIndex = resolveBlockIndexForPosition(surface.blocks, position);
10
- if (blockIndex < 0) {
11
- return noopResult(document, snapshot.selection);
12
- }
13
- const sectionTarget = resolveSectionTarget(cloned, surface.blocks, position);
14
- const inheritedProperties = cloneSectionProperties(sectionTarget?.properties);
15
- const sectionBreak = {
16
- type: "section_break",
17
- sectionProperties: {
18
- ...inheritedProperties,
19
- sectionType: breakType
20
- }
21
- };
22
- cloned.content.children.splice(blockIndex + 1, 0, sectionBreak);
23
- cloned.updatedAt = _context.timestamp;
24
- return {
25
- document: cloned,
26
- selection: snapshot.selection,
27
- changed: true
28
- };
29
- }
30
- function insertSectionBreakAfterSectionIndex(document, sectionIndex, breakType, context) {
31
- const cloned = structuredClone(document);
32
- const insertionIndex = findSectionInsertionIndex(cloned, sectionIndex);
33
- if (insertionIndex < 0) {
34
- return noopResult(document, createSelectionSnapshot(0, 0));
35
- }
36
- const inheritedProperties = cloneSectionProperties(
37
- getSectionPropertiesAtIndex(cloned, sectionIndex)
38
- );
39
- const sectionBreak = {
40
- type: "section_break",
41
- sectionProperties: {
42
- ...inheritedProperties,
43
- sectionType: breakType
44
- }
45
- };
46
- cloned.content.children.splice(insertionIndex, 0, sectionBreak);
47
- cloned.updatedAt = context.timestamp;
48
- return {
49
- document: cloned,
50
- selection: createSelectionSnapshot(0, 0),
51
- changed: true
52
- };
53
- }
54
- function deleteSectionBreak(document, snapshot, _context) {
55
- const cloned = structuredClone(document);
56
- const breakIndex = findNearestSectionBreak(cloned, snapshot);
57
- if (breakIndex < 0) {
58
- return noopResult(document, snapshot.selection);
59
- }
60
- const breakNode = cloned.content.children[breakIndex];
61
- if (!breakNode || breakNode.type !== "section_break") {
62
- return noopResult(document, snapshot.selection);
63
- }
64
- cloned.content.children.splice(breakIndex, 1);
65
- cloned.updatedAt = _context.timestamp;
66
- return {
67
- document: cloned,
68
- selection: snapshot.selection,
69
- changed: true
70
- };
71
- }
72
- function deleteSectionBreakAtSectionIndex(document, sectionIndex, context) {
73
- if (sectionIndex <= 0) {
74
- return noopResult(document, createSelectionSnapshot(0, 0));
75
- }
76
- const cloned = structuredClone(document);
77
- const breakIndex = findSectionBreakNodeIndexForSection(cloned, sectionIndex);
78
- if (breakIndex < 0) {
79
- return noopResult(document, createSelectionSnapshot(0, 0));
80
- }
81
- cloned.content.children.splice(breakIndex, 1);
82
- cloned.updatedAt = context.timestamp;
83
- return {
84
- document: cloned,
85
- selection: createSelectionSnapshot(0, 0),
86
- changed: true
87
- };
88
- }
89
- function updateSectionLayout(document, snapshot, patch, _context) {
90
- const cloned = structuredClone(document);
91
- const surface = snapshot.surface;
92
- if (!surface) {
93
- return noopResult(document, snapshot.selection);
94
- }
95
- const position = snapshot.selection.head;
96
- const sectionTarget = resolveSectionTarget(cloned, surface.blocks, position);
97
- if (!sectionTarget) {
98
- return noopResult(document, snapshot.selection);
99
- }
100
- const existing = sectionTarget.properties ?? {};
101
- const updated = applySectionLayoutPatch(existing, patch);
102
- if (sectionTarget.kind === "inline") {
103
- const breakNode = cloned.content.children[sectionTarget.blockIndex];
104
- if (breakNode && breakNode.type === "section_break") {
105
- breakNode.sectionProperties = updated;
106
- delete breakNode.sectionPropertiesXml;
107
- delete breakNode.propertiesXml;
108
- }
109
- } else {
110
- if (!cloned.subParts) {
111
- return noopResult(document, snapshot.selection);
112
- }
113
- cloned.subParts.finalSectionProperties = updated;
114
- }
115
- cloned.updatedAt = _context.timestamp;
116
- return {
117
- document: cloned,
118
- selection: snapshot.selection,
119
- changed: true
120
- };
121
- }
122
- function updateSectionLayoutAtSectionIndex(document, sectionIndex, patch, context) {
123
- const cloned = structuredClone(document);
124
- const target = resolveSectionPropertiesOwner(cloned, sectionIndex);
125
- if (!target) {
126
- return noopResult(document, createSelectionSnapshot(0, 0));
127
- }
128
- const updated = applySectionLayoutPatch(target.properties ?? {}, patch);
129
- if (target.kind === "inline") {
130
- const breakNode = cloned.content.children[target.blockIndex];
131
- if (breakNode && breakNode.type === "section_break") {
132
- breakNode.sectionProperties = updated;
133
- delete breakNode.sectionPropertiesXml;
134
- delete breakNode.propertiesXml;
135
- }
136
- } else {
137
- cloned.subParts = {
138
- ...cloned.subParts ?? {
139
- headers: [],
140
- footers: []
141
- },
142
- finalSectionProperties: updated
143
- };
144
- }
145
- cloned.updatedAt = context.timestamp;
146
- return {
147
- document: cloned,
148
- selection: createSelectionSnapshot(0, 0),
149
- changed: true
150
- };
151
- }
152
- function setSectionPageNumberingAtSectionIndex(document, sectionIndex, pageNumbering, context) {
153
- const cloned = structuredClone(document);
154
- const target = resolveSectionPropertiesOwner(cloned, sectionIndex);
155
- if (!target) {
156
- return noopResult(document, createSelectionSnapshot(0, 0));
157
- }
158
- const nextProperties = cloneSectionProperties(target.properties);
159
- if (pageNumbering === null) {
160
- delete nextProperties.pageNumbering;
161
- } else {
162
- nextProperties.pageNumbering = {
163
- ...target.properties?.pageNumbering ?? {},
164
- ...pageNumbering
165
- };
166
- }
167
- if (target.kind === "inline") {
168
- const breakNode = cloned.content.children[target.blockIndex];
169
- if (breakNode && breakNode.type === "section_break") {
170
- breakNode.sectionProperties = nextProperties;
171
- delete breakNode.sectionPropertiesXml;
172
- delete breakNode.propertiesXml;
173
- }
174
- } else {
175
- cloned.subParts = {
176
- ...cloned.subParts ?? {
177
- headers: [],
178
- footers: []
179
- },
180
- finalSectionProperties: nextProperties
181
- };
182
- }
183
- cloned.updatedAt = context.timestamp;
184
- return {
185
- document: cloned,
186
- selection: createSelectionSnapshot(0, 0),
187
- changed: true
188
- };
189
- }
190
- function setHeaderFooterLinkAtSectionIndex(document, sectionIndex, patch, context) {
191
- const cloned = structuredClone(document);
192
- const target = resolveSectionPropertiesOwner(cloned, sectionIndex);
193
- if (!target) {
194
- return noopResult(document, createSelectionSnapshot(0, 0));
195
- }
196
- const referencesKey = patch.kind === "header" ? "headerReferences" : "footerReferences";
197
- const currentProperties = cloneSectionProperties(target.properties);
198
- const currentReferences = [...currentProperties?.[referencesKey] ?? []];
199
- const nextReferences = currentReferences.filter((entry) => entry.variant !== patch.variant);
200
- if (!patch.linkToPrevious) {
201
- const relationshipId = normalizeRelationshipId(patch.relationshipId) ?? resolveInheritedRelationshipId(cloned, sectionIndex, patch.kind, patch.variant);
202
- if (!relationshipId) {
203
- return noopResult(document, createSelectionSnapshot(0, 0));
204
- }
205
- nextReferences.push({
206
- variant: patch.variant,
207
- relationshipId
208
- });
209
- }
210
- const nextProperties = {
211
- ...currentProperties ?? {},
212
- [referencesKey]: nextReferences.length > 0 ? nextReferences : void 0
213
- };
214
- if (target.kind === "inline") {
215
- const breakNode = cloned.content.children[target.blockIndex];
216
- if (breakNode && breakNode.type === "section_break") {
217
- breakNode.sectionProperties = nextProperties;
218
- delete breakNode.sectionPropertiesXml;
219
- delete breakNode.propertiesXml;
220
- }
221
- } else {
222
- cloned.subParts = {
223
- ...cloned.subParts ?? {
224
- headers: [],
225
- footers: []
226
- },
227
- finalSectionProperties: nextProperties
228
- };
229
- }
230
- cloned.updatedAt = context.timestamp;
231
- return {
232
- document: cloned,
233
- selection: createSelectionSnapshot(0, 0),
234
- changed: true
235
- };
236
- }
237
- function noopResult(document, selection) {
238
- return { document, selection, changed: false };
239
- }
240
- function createSelectionSnapshot(anchor, head) {
241
- return {
242
- anchor,
243
- head,
244
- isCollapsed: anchor === head,
245
- activeRange: {
246
- kind: "range",
247
- from: Math.min(anchor, head),
248
- to: Math.max(anchor, head),
249
- assoc: {
250
- start: -1,
251
- end: 1
252
- }
253
- }
254
- };
255
- }
256
- function resolveBlockIndexForPosition(blocks, position) {
257
- for (let i = blocks.length - 1; i >= 0; i--) {
258
- const block = blocks[i];
259
- if (block && position >= block.from) {
260
- return i;
261
- }
262
- }
263
- return blocks.length > 0 ? 0 : -1;
264
- }
265
- function findSectionBreakNodeIndexForSection(document, sectionIndex) {
266
- if (sectionIndex <= 0) {
267
- return -1;
268
- }
269
- let currentSection = 0;
270
- for (let index = 0; index < document.content.children.length; index += 1) {
271
- const block = document.content.children[index];
272
- if (block?.type !== "section_break") {
273
- continue;
274
- }
275
- currentSection += 1;
276
- if (currentSection === sectionIndex) {
277
- return index;
278
- }
279
- }
280
- return -1;
281
- }
282
- function findSectionInsertionIndex(document, sectionIndex) {
283
- let currentSection = 0;
284
- for (let index = 0; index < document.content.children.length; index += 1) {
285
- const block = document.content.children[index];
286
- if (block?.type !== "section_break") {
287
- continue;
288
- }
289
- if (currentSection === sectionIndex) {
290
- return index;
291
- }
292
- currentSection += 1;
293
- }
294
- return sectionIndex === currentSection ? document.content.children.length : -1;
295
- }
296
- function getSectionPropertiesAtIndex(document, sectionIndex) {
297
- const target = resolveSectionPropertiesOwner(document, sectionIndex);
298
- return target?.properties;
299
- }
300
- function resolveSectionPropertiesOwner(document, sectionIndex) {
301
- if (sectionIndex < 0) {
302
- return null;
303
- }
304
- let currentSection = 0;
305
- for (let index = 0; index < document.content.children.length; index += 1) {
306
- const block = document.content.children[index];
307
- if (block?.type !== "section_break") {
308
- continue;
309
- }
310
- if (currentSection === sectionIndex) {
311
- return {
312
- kind: "inline",
313
- blockIndex: index,
314
- properties: block.sectionProperties
315
- };
316
- }
317
- currentSection += 1;
318
- }
319
- return currentSection === sectionIndex ? {
320
- kind: "final",
321
- blockIndex: document.content.children.length - 1,
322
- properties: document.subParts?.finalSectionProperties
323
- } : null;
324
- }
325
- function normalizeRelationshipId(value) {
326
- if (typeof value !== "string") {
327
- return void 0;
328
- }
329
- const trimmed = value.trim();
330
- return trimmed.length > 0 ? trimmed : void 0;
331
- }
332
- function resolveInheritedRelationshipId(document, sectionIndex, kind, variant) {
333
- for (let candidateIndex = sectionIndex - 1; candidateIndex >= 0; candidateIndex -= 1) {
334
- const properties = getSectionPropertiesAtIndex(document, candidateIndex);
335
- const references = kind === "header" ? properties?.headerReferences : properties?.footerReferences;
336
- const directMatch = references?.find((entry) => entry.variant === variant);
337
- if (directMatch?.relationshipId) {
338
- return directMatch.relationshipId;
339
- }
340
- }
341
- const documents = kind === "header" ? document.subParts?.headers ?? [] : document.subParts?.footers ?? [];
342
- return documents.find((entry) => entry.variant === variant)?.relationshipId;
343
- }
344
- function resolveSectionTarget(document, blocks, position) {
345
- const blockIndex = resolveBlockIndexForPosition(blocks, position);
346
- if (blockIndex < 0) {
347
- return null;
348
- }
349
- for (let i = blockIndex; i < document.content.children.length; i++) {
350
- const block = document.content.children[i];
351
- if (block && block.type === "section_break") {
352
- return {
353
- kind: "inline",
354
- blockIndex: i,
355
- properties: block.sectionProperties
356
- };
357
- }
358
- }
359
- return {
360
- kind: "final",
361
- blockIndex: document.content.children.length - 1,
362
- properties: document.subParts?.finalSectionProperties
363
- };
364
- }
365
- function findNearestSectionBreak(document, snapshot) {
366
- const surface = snapshot.surface;
367
- if (!surface) {
368
- return -1;
369
- }
370
- const position = snapshot.selection.head;
371
- let bestIndex = -1;
372
- let bestDistance = Number.POSITIVE_INFINITY;
373
- for (let i = 0; i < document.content.children.length; i++) {
374
- const block = document.content.children[i];
375
- if (!block || block.type !== "section_break") {
376
- continue;
377
- }
378
- const surfaceBlock = surface.blocks[i];
379
- if (!surfaceBlock) {
380
- continue;
381
- }
382
- const distance = Math.min(
383
- Math.abs(position - surfaceBlock.from),
384
- Math.abs(position - surfaceBlock.to)
385
- );
386
- if (distance < bestDistance) {
387
- bestDistance = distance;
388
- bestIndex = i;
389
- }
390
- }
391
- return bestIndex;
392
- }
393
- function applySectionLayoutPatch(existing, patch) {
394
- const result = { ...existing };
395
- if (patch.pageSize) {
396
- result.pageSize = {
397
- ...existing.pageSize ?? { width: 12240, height: 15840 },
398
- ...patch.pageSize
399
- };
400
- }
401
- if (patch.pageMargins) {
402
- result.pageMargins = {
403
- ...existing.pageMargins ?? {
404
- top: 1440,
405
- right: 1440,
406
- bottom: 1440,
407
- left: 1440
408
- },
409
- ...patch.pageMargins
410
- };
411
- }
412
- if (patch.columns) {
413
- result.columns = {
414
- ...existing.columns ?? {},
415
- ...patch.columns
416
- };
417
- }
418
- if (patch.pageNumbering) {
419
- result.pageNumbering = {
420
- ...existing.pageNumbering ?? {},
421
- ...patch.pageNumbering
422
- };
423
- }
424
- if (patch.titlePage !== void 0) {
425
- result.titlePage = patch.titlePage;
426
- }
427
- if (patch.sectionType !== void 0) {
428
- result.sectionType = patch.sectionType;
429
- }
430
- return result;
431
- }
432
- function cloneSectionProperties(properties) {
433
- return properties ? structuredClone(properties) : {};
434
- }
435
-
436
- export {
437
- insertSectionBreak,
438
- insertSectionBreakAfterSectionIndex,
439
- deleteSectionBreak,
440
- deleteSectionBreakAtSectionIndex,
441
- updateSectionLayout,
442
- updateSectionLayoutAtSectionIndex,
443
- setSectionPageNumberingAtSectionIndex,
444
- setHeaderFooterLinkAtSectionIndex
445
- };
446
- //# sourceMappingURL=chunk-2OQBZS3F.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/commands/section-layout-commands.ts"],"sourcesContent":["/**\n * Section layout authoring commands.\n *\n * Supports inserting and deleting section breaks, bounded section layout\n * updates (page size, margins, gutter, orientation, columns, first-page /\n * odd-even variants, page-numbering restart / format), and section break\n * deletion with following-section merge semantics.\n *\n * All mutations are command-backed and export-safe.\n */\nimport type {\n RuntimeRenderSnapshot,\n SelectionSnapshot,\n} from \"../../api/public-types\";\nimport type {\n CanonicalDocument as CanonicalDocumentEnvelope,\n ColumnProperties,\n PageMargins,\n PageNumbering,\n PageSize,\n SectionBreakNode,\n SectionProperties,\n} from \"../../model/canonical-document.ts\";\n\n// ---- Public types ----\n\nexport interface SectionLayoutCommandContext {\n timestamp: string;\n}\n\nexport interface SectionLayoutMutationResult {\n document: CanonicalDocumentEnvelope;\n selection: SelectionSnapshot;\n changed: boolean;\n}\n\nexport type SectionBreakType =\n | \"nextPage\"\n | \"continuous\"\n | \"evenPage\"\n | \"oddPage\"\n | \"nextColumn\";\n\nexport interface SectionLayoutPatch {\n pageSize?: Partial<PageSize>;\n pageMargins?: Partial<PageMargins>;\n columns?: Partial<ColumnProperties>;\n pageNumbering?: Partial<PageNumbering>;\n titlePage?: boolean;\n sectionType?: SectionBreakType;\n}\n\nexport interface SectionLinkPatch {\n kind: \"header\" | \"footer\";\n variant: \"default\" | \"first\" | \"even\";\n linkToPrevious: boolean;\n relationshipId?: string | null;\n}\n\n// ---- Insert section break ----\n\n/**\n * Insert a section break at the current selection position.\n * The new section inherits properties from the section that contained the\n * insertion point (the *following* section keeps its own properties).\n */\nexport function insertSectionBreak(\n document: CanonicalDocumentEnvelope,\n snapshot: RuntimeRenderSnapshot,\n breakType: SectionBreakType,\n _context: SectionLayoutCommandContext,\n): SectionLayoutMutationResult {\n const cloned = structuredClone(document) as CanonicalDocumentEnvelope;\n const surface = snapshot.surface;\n\n if (!surface) {\n return noopResult(document, snapshot.selection);\n }\n\n const position = snapshot.selection.head;\n const blockIndex = resolveBlockIndexForPosition(surface.blocks, position);\n\n if (blockIndex < 0) {\n return noopResult(document, snapshot.selection);\n }\n\n const sectionTarget = resolveSectionTarget(cloned, surface.blocks, position);\n const inheritedProperties = cloneSectionProperties(sectionTarget?.properties);\n const sectionBreak: SectionBreakNode = {\n type: \"section_break\",\n sectionProperties: {\n ...inheritedProperties,\n sectionType: breakType,\n },\n };\n\n cloned.content.children.splice(blockIndex + 1, 0, sectionBreak);\n cloned.updatedAt = _context.timestamp;\n\n return {\n document: cloned,\n selection: snapshot.selection,\n changed: true,\n };\n}\n\nexport function insertSectionBreakAfterSectionIndex(\n document: CanonicalDocumentEnvelope,\n sectionIndex: number,\n breakType: SectionBreakType,\n context: SectionLayoutCommandContext,\n): SectionLayoutMutationResult {\n const cloned = structuredClone(document) as CanonicalDocumentEnvelope;\n const insertionIndex = findSectionInsertionIndex(cloned, sectionIndex);\n if (insertionIndex < 0) {\n return noopResult(document, createSelectionSnapshot(0, 0));\n }\n\n const inheritedProperties = cloneSectionProperties(\n getSectionPropertiesAtIndex(cloned, sectionIndex),\n );\n const sectionBreak: SectionBreakNode = {\n type: \"section_break\",\n sectionProperties: {\n ...inheritedProperties,\n sectionType: breakType,\n },\n };\n\n cloned.content.children.splice(insertionIndex, 0, sectionBreak);\n cloned.updatedAt = context.timestamp;\n\n return {\n document: cloned,\n selection: createSelectionSnapshot(0, 0),\n changed: true,\n };\n}\n\n// ---- Delete section break ----\n\n/**\n * Delete the section break at or nearest to the current selection position.\n * On deletion the *following* section's formatting and header/footer linkage\n * are adopted (Word merge semantics).\n */\nexport function deleteSectionBreak(\n document: CanonicalDocumentEnvelope,\n snapshot: RuntimeRenderSnapshot,\n _context: SectionLayoutCommandContext,\n): SectionLayoutMutationResult {\n const cloned = structuredClone(document) as CanonicalDocumentEnvelope;\n\n const breakIndex = findNearestSectionBreak(cloned, snapshot);\n if (breakIndex < 0) {\n return noopResult(document, snapshot.selection);\n }\n\n const breakNode = cloned.content.children[breakIndex];\n if (!breakNode || breakNode.type !== \"section_break\") {\n return noopResult(document, snapshot.selection);\n }\n\n // Remove the section break node\n cloned.content.children.splice(breakIndex, 1);\n\n cloned.updatedAt = _context.timestamp;\n\n return {\n document: cloned,\n selection: snapshot.selection,\n changed: true,\n };\n}\n\nexport function deleteSectionBreakAtSectionIndex(\n document: CanonicalDocumentEnvelope,\n sectionIndex: number,\n context: SectionLayoutCommandContext,\n): SectionLayoutMutationResult {\n if (sectionIndex <= 0) {\n return noopResult(document, createSelectionSnapshot(0, 0));\n }\n\n const cloned = structuredClone(document) as CanonicalDocumentEnvelope;\n const breakIndex = findSectionBreakNodeIndexForSection(cloned, sectionIndex);\n if (breakIndex < 0) {\n return noopResult(document, createSelectionSnapshot(0, 0));\n }\n\n cloned.content.children.splice(breakIndex, 1);\n cloned.updatedAt = context.timestamp;\n\n return {\n document: cloned,\n selection: createSelectionSnapshot(0, 0),\n changed: true,\n };\n}\n\n// ---- Update section layout ----\n\n/**\n * Apply a bounded layout patch to the section containing the current selection.\n * Supports: page size, margins, gutter, orientation, columns,\n * first-page / odd-even variants, page-numbering restart / format.\n */\nexport function updateSectionLayout(\n document: CanonicalDocumentEnvelope,\n snapshot: RuntimeRenderSnapshot,\n patch: SectionLayoutPatch,\n _context: SectionLayoutCommandContext,\n): SectionLayoutMutationResult {\n const cloned = structuredClone(document) as CanonicalDocumentEnvelope;\n const surface = snapshot.surface;\n\n if (!surface) {\n return noopResult(document, snapshot.selection);\n }\n\n const position = snapshot.selection.head;\n const sectionTarget = resolveSectionTarget(cloned, surface.blocks, position);\n\n if (!sectionTarget) {\n return noopResult(document, snapshot.selection);\n }\n\n const existing = sectionTarget.properties ?? {};\n const updated = applySectionLayoutPatch(existing, patch);\n\n if (sectionTarget.kind === \"inline\") {\n const breakNode = cloned.content.children[sectionTarget.blockIndex];\n if (breakNode && breakNode.type === \"section_break\") {\n breakNode.sectionProperties = updated;\n // Clear raw XML so the structured properties are used on export\n delete breakNode.sectionPropertiesXml;\n delete breakNode.propertiesXml;\n }\n } else {\n // Final section: update subParts.finalSectionProperties\n if (!cloned.subParts) {\n return noopResult(document, snapshot.selection);\n }\n cloned.subParts.finalSectionProperties = updated;\n }\n\n cloned.updatedAt = _context.timestamp;\n\n return {\n document: cloned,\n selection: snapshot.selection,\n changed: true,\n };\n}\n\nexport function updateSectionLayoutAtSectionIndex(\n document: CanonicalDocumentEnvelope,\n sectionIndex: number,\n patch: SectionLayoutPatch,\n context: SectionLayoutCommandContext,\n): SectionLayoutMutationResult {\n const cloned = structuredClone(document) as CanonicalDocumentEnvelope;\n const target = resolveSectionPropertiesOwner(cloned, sectionIndex);\n if (!target) {\n return noopResult(document, createSelectionSnapshot(0, 0));\n }\n\n const updated = applySectionLayoutPatch(target.properties ?? {}, patch);\n if (target.kind === \"inline\") {\n const breakNode = cloned.content.children[target.blockIndex];\n if (breakNode && breakNode.type === \"section_break\") {\n breakNode.sectionProperties = updated;\n delete breakNode.sectionPropertiesXml;\n delete breakNode.propertiesXml;\n }\n } else {\n cloned.subParts = {\n ...(cloned.subParts ?? {\n headers: [],\n footers: [],\n }),\n finalSectionProperties: updated,\n };\n }\n\n cloned.updatedAt = context.timestamp;\n return {\n document: cloned,\n selection: createSelectionSnapshot(0, 0),\n changed: true,\n };\n}\n\nexport function setSectionPageNumberingAtSectionIndex(\n document: CanonicalDocumentEnvelope,\n sectionIndex: number,\n pageNumbering: Partial<PageNumbering> | null,\n context: SectionLayoutCommandContext,\n): SectionLayoutMutationResult {\n const cloned = structuredClone(document) as CanonicalDocumentEnvelope;\n const target = resolveSectionPropertiesOwner(cloned, sectionIndex);\n if (!target) {\n return noopResult(document, createSelectionSnapshot(0, 0));\n }\n\n const nextProperties = cloneSectionProperties(target.properties);\n if (pageNumbering === null) {\n delete nextProperties.pageNumbering;\n } else {\n nextProperties.pageNumbering = {\n ...(target.properties?.pageNumbering ?? {}),\n ...pageNumbering,\n };\n }\n\n if (target.kind === \"inline\") {\n const breakNode = cloned.content.children[target.blockIndex];\n if (breakNode && breakNode.type === \"section_break\") {\n breakNode.sectionProperties = nextProperties;\n delete breakNode.sectionPropertiesXml;\n delete breakNode.propertiesXml;\n }\n } else {\n cloned.subParts = {\n ...(cloned.subParts ?? {\n headers: [],\n footers: [],\n }),\n finalSectionProperties: nextProperties,\n };\n }\n\n cloned.updatedAt = context.timestamp;\n return {\n document: cloned,\n selection: createSelectionSnapshot(0, 0),\n changed: true,\n };\n}\n\nexport function setHeaderFooterLinkAtSectionIndex(\n document: CanonicalDocumentEnvelope,\n sectionIndex: number,\n patch: SectionLinkPatch,\n context: SectionLayoutCommandContext,\n): SectionLayoutMutationResult {\n const cloned = structuredClone(document) as CanonicalDocumentEnvelope;\n const target = resolveSectionPropertiesOwner(cloned, sectionIndex);\n if (!target) {\n return noopResult(document, createSelectionSnapshot(0, 0));\n }\n\n const referencesKey =\n patch.kind === \"header\" ? \"headerReferences\" : \"footerReferences\";\n const currentProperties = cloneSectionProperties(target.properties);\n const currentReferences = [...(currentProperties?.[referencesKey] ?? [])];\n const nextReferences = currentReferences.filter((entry) => entry.variant !== patch.variant);\n\n if (!patch.linkToPrevious) {\n const relationshipId =\n normalizeRelationshipId(patch.relationshipId) ??\n resolveInheritedRelationshipId(cloned, sectionIndex, patch.kind, patch.variant);\n if (!relationshipId) {\n return noopResult(document, createSelectionSnapshot(0, 0));\n }\n\n nextReferences.push({\n variant: patch.variant,\n relationshipId,\n });\n }\n\n const nextProperties = {\n ...(currentProperties ?? {}),\n [referencesKey]: nextReferences.length > 0 ? nextReferences : undefined,\n };\n\n if (target.kind === \"inline\") {\n const breakNode = cloned.content.children[target.blockIndex];\n if (breakNode && breakNode.type === \"section_break\") {\n breakNode.sectionProperties = nextProperties;\n delete breakNode.sectionPropertiesXml;\n delete breakNode.propertiesXml;\n }\n } else {\n cloned.subParts = {\n ...(cloned.subParts ?? {\n headers: [],\n footers: [],\n }),\n finalSectionProperties: nextProperties,\n };\n }\n\n cloned.updatedAt = context.timestamp;\n return {\n document: cloned,\n selection: createSelectionSnapshot(0, 0),\n changed: true,\n };\n}\n\n// ---- Helpers ----\n\nfunction noopResult(\n document: CanonicalDocumentEnvelope,\n selection: SelectionSnapshot,\n): SectionLayoutMutationResult {\n return { document, selection, changed: false };\n}\n\nfunction createSelectionSnapshot(anchor: number, head: number): SelectionSnapshot {\n return {\n anchor,\n head,\n isCollapsed: anchor === head,\n activeRange: {\n kind: \"range\",\n from: Math.min(anchor, head),\n to: Math.max(anchor, head),\n assoc: {\n start: -1,\n end: 1,\n },\n },\n };\n}\n\nfunction resolveBlockIndexForPosition(\n blocks: ReadonlyArray<{ from: number; to: number }>,\n position: number,\n): number {\n for (let i = blocks.length - 1; i >= 0; i--) {\n const block = blocks[i];\n if (block && position >= block.from) {\n return i;\n }\n }\n return blocks.length > 0 ? 0 : -1;\n}\n\ninterface SectionTarget {\n kind: \"inline\" | \"final\";\n blockIndex: number;\n properties?: SectionProperties;\n}\n\nfunction findSectionBreakNodeIndexForSection(\n document: CanonicalDocumentEnvelope,\n sectionIndex: number,\n): number {\n if (sectionIndex <= 0) {\n return -1;\n }\n\n let currentSection = 0;\n for (let index = 0; index < document.content.children.length; index += 1) {\n const block = document.content.children[index];\n if (block?.type !== \"section_break\") {\n continue;\n }\n currentSection += 1;\n if (currentSection === sectionIndex) {\n return index;\n }\n }\n\n return -1;\n}\n\nfunction findSectionInsertionIndex(\n document: CanonicalDocumentEnvelope,\n sectionIndex: number,\n): number {\n let currentSection = 0;\n for (let index = 0; index < document.content.children.length; index += 1) {\n const block = document.content.children[index];\n if (block?.type !== \"section_break\") {\n continue;\n }\n if (currentSection === sectionIndex) {\n return index;\n }\n currentSection += 1;\n }\n\n return sectionIndex === currentSection ? document.content.children.length : -1;\n}\n\nfunction getSectionPropertiesAtIndex(\n document: CanonicalDocumentEnvelope,\n sectionIndex: number,\n): SectionProperties | undefined {\n const target = resolveSectionPropertiesOwner(document, sectionIndex);\n return target?.properties;\n}\n\nfunction resolveSectionPropertiesOwner(\n document: CanonicalDocumentEnvelope,\n sectionIndex: number,\n): SectionTarget | null {\n if (sectionIndex < 0) {\n return null;\n }\n\n let currentSection = 0;\n for (let index = 0; index < document.content.children.length; index += 1) {\n const block = document.content.children[index];\n if (block?.type !== \"section_break\") {\n continue;\n }\n if (currentSection === sectionIndex) {\n return {\n kind: \"inline\",\n blockIndex: index,\n properties: block.sectionProperties,\n };\n }\n currentSection += 1;\n }\n\n return currentSection === sectionIndex\n ? {\n kind: \"final\",\n blockIndex: document.content.children.length - 1,\n properties: document.subParts?.finalSectionProperties,\n }\n : null;\n}\n\nfunction normalizeRelationshipId(value: string | null | undefined): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction resolveInheritedRelationshipId(\n document: CanonicalDocumentEnvelope,\n sectionIndex: number,\n kind: \"header\" | \"footer\",\n variant: \"default\" | \"first\" | \"even\",\n): string | undefined {\n for (let candidateIndex = sectionIndex - 1; candidateIndex >= 0; candidateIndex -= 1) {\n const properties = getSectionPropertiesAtIndex(document, candidateIndex);\n const references =\n kind === \"header\" ? properties?.headerReferences : properties?.footerReferences;\n const directMatch = references?.find((entry) => entry.variant === variant);\n if (directMatch?.relationshipId) {\n return directMatch.relationshipId;\n }\n }\n\n const documents = kind === \"header\"\n ? document.subParts?.headers ?? []\n : document.subParts?.footers ?? [];\n return documents.find((entry) => entry.variant === variant)?.relationshipId;\n}\n\nfunction resolveSectionTarget(\n document: CanonicalDocumentEnvelope,\n blocks: ReadonlyArray<{ from: number; to: number }>,\n position: number,\n): SectionTarget | null {\n const blockIndex = resolveBlockIndexForPosition(blocks, position);\n if (blockIndex < 0) {\n return null;\n }\n\n // Walk forward from the resolved block to find the next section break\n for (let i = blockIndex; i < document.content.children.length; i++) {\n const block = document.content.children[i];\n if (block && block.type === \"section_break\") {\n return {\n kind: \"inline\",\n blockIndex: i,\n properties: block.sectionProperties,\n };\n }\n }\n\n // No section break found; this is the final section\n return {\n kind: \"final\",\n blockIndex: document.content.children.length - 1,\n properties: document.subParts?.finalSectionProperties,\n };\n}\n\nfunction findNearestSectionBreak(\n document: CanonicalDocumentEnvelope,\n snapshot: RuntimeRenderSnapshot,\n): number {\n const surface = snapshot.surface;\n if (!surface) {\n return -1;\n }\n\n const position = snapshot.selection.head;\n let bestIndex = -1;\n let bestDistance = Number.POSITIVE_INFINITY;\n\n for (let i = 0; i < document.content.children.length; i++) {\n const block = document.content.children[i];\n if (!block || block.type !== \"section_break\") {\n continue;\n }\n const surfaceBlock = surface.blocks[i];\n if (!surfaceBlock) {\n continue;\n }\n const distance = Math.min(\n Math.abs(position - surfaceBlock.from),\n Math.abs(position - surfaceBlock.to),\n );\n if (distance < bestDistance) {\n bestDistance = distance;\n bestIndex = i;\n }\n }\n\n return bestIndex;\n}\n\nfunction applySectionLayoutPatch(\n existing: SectionProperties,\n patch: SectionLayoutPatch,\n): SectionProperties {\n const result: SectionProperties = { ...existing };\n\n if (patch.pageSize) {\n result.pageSize = {\n ...(existing.pageSize ?? { width: 12240, height: 15840 }),\n ...patch.pageSize,\n };\n }\n\n if (patch.pageMargins) {\n result.pageMargins = {\n ...(existing.pageMargins ?? {\n top: 1440,\n right: 1440,\n bottom: 1440,\n left: 1440,\n }),\n ...patch.pageMargins,\n };\n }\n\n if (patch.columns) {\n result.columns = {\n ...(existing.columns ?? {}),\n ...patch.columns,\n };\n }\n\n if (patch.pageNumbering) {\n result.pageNumbering = {\n ...(existing.pageNumbering ?? {}),\n ...patch.pageNumbering,\n };\n }\n\n if (patch.titlePage !== undefined) {\n result.titlePage = patch.titlePage;\n }\n\n if (patch.sectionType !== undefined) {\n result.sectionType = patch.sectionType;\n }\n\n return result;\n}\n\nfunction cloneSectionProperties(\n properties: SectionProperties | undefined,\n): SectionProperties {\n return properties ? structuredClone(properties) : {};\n}\n"],"mappings":"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","names":[]}