@stll/folio-core 0.52.0 → 0.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/README.md +23 -0
  2. package/dist/ai-edits/apply.d.ts +26 -1
  3. package/dist/ai-edits/apply.js +1779 -141
  4. package/dist/ai-edits/batch-claims.d.ts +145 -0
  5. package/dist/ai-edits/batch-claims.js +275 -0
  6. package/dist/ai-edits/blockRange.js +9 -3
  7. package/dist/ai-edits/character-boundaries.d.ts +43 -0
  8. package/dist/ai-edits/character-boundaries.js +95 -0
  9. package/dist/ai-edits/clean-text.d.ts +33 -3
  10. package/dist/ai-edits/clean-text.js +52 -6
  11. package/dist/ai-edits/comment-lifecycle.d.ts +18 -0
  12. package/dist/ai-edits/comment-lifecycle.js +52 -0
  13. package/dist/ai-edits/headless.d.ts +91 -7
  14. package/dist/ai-edits/headless.js +520 -51
  15. package/dist/ai-edits/index.d.ts +2 -1
  16. package/dist/ai-edits/index.js +2 -1
  17. package/dist/ai-edits/minimal-replacement.d.ts +21 -6
  18. package/dist/ai-edits/minimal-replacement.js +134 -15
  19. package/dist/ai-edits/newListNumbering.d.ts +23 -0
  20. package/dist/ai-edits/newListNumbering.js +94 -0
  21. package/dist/ai-edits/note-references.d.ts +96 -0
  22. package/dist/ai-edits/note-references.js +139 -0
  23. package/dist/ai-edits/pending-suggestions.d.ts +79 -0
  24. package/dist/ai-edits/pending-suggestions.js +306 -0
  25. package/dist/ai-edits/read.d.ts +6 -4
  26. package/dist/ai-edits/read.js +113 -50
  27. package/dist/ai-edits/result-validation.d.ts +29 -0
  28. package/dist/ai-edits/result-validation.js +164 -0
  29. package/dist/ai-edits/revisionStretches.d.ts +17 -0
  30. package/dist/ai-edits/revisionStretches.js +80 -0
  31. package/dist/ai-edits/snapshot.d.ts +36 -3
  32. package/dist/ai-edits/snapshot.js +180 -25
  33. package/dist/ai-edits/table-cell-mutations.d.ts +4 -2
  34. package/dist/ai-edits/table-cell-mutations.js +6 -2
  35. package/dist/ai-edits/table-geometry.d.ts +1 -1
  36. package/dist/ai-edits/table-row-column-mutations.d.ts +44 -17
  37. package/dist/ai-edits/table-row-column-mutations.js +86 -34
  38. package/dist/ai-edits/types.d.ts +155 -16
  39. package/dist/compare/compare.d.ts +1 -1
  40. package/dist/compare/compare.js +65 -16
  41. package/dist/compare/content-alignment.d.ts +5 -1
  42. package/dist/compare/content-alignment.js +52 -34
  43. package/dist/compare/content-types.d.ts +7 -0
  44. package/dist/compare/content.d.ts +4 -1
  45. package/dist/compare/content.js +6 -1
  46. package/dist/compare/formatting.js +2 -1
  47. package/dist/compare/inline-atoms.d.ts +21 -4
  48. package/dist/compare/inline-atoms.js +138 -16
  49. package/dist/compare/inline-provenance.js +1 -1
  50. package/dist/compare/plan.js +10 -5
  51. package/dist/compare/scenario.js +14 -3
  52. package/dist/compare/section-boundary-properties.js +1 -1
  53. package/dist/compare/types.d.ts +4 -2
  54. package/dist/compare/types.js +2 -1
  55. package/dist/compare/verification.d.ts +1 -1
  56. package/dist/compare/verification.js +15 -3
  57. package/dist/controller/committedLayoutDiff.d.ts +25 -0
  58. package/dist/controller/committedLayoutDiff.js +71 -0
  59. package/dist/controller/contentControlWidgetController.d.ts +1 -1
  60. package/dist/controller/folioEditor.d.ts +1 -1
  61. package/dist/controller/fontReadiness.d.ts +70 -3
  62. package/dist/controller/fontReadiness.js +100 -10
  63. package/dist/controller/headerFooterEditorManager.js +6 -1
  64. package/dist/controller/layoutPipeline.d.ts +12 -10
  65. package/dist/controller/layoutPipeline.js +65 -11
  66. package/dist/controller/layoutRunOptions.d.ts +24 -0
  67. package/dist/controller/layoutRunOptions.js +17 -0
  68. package/dist/controller/layoutScheduler.d.ts +19 -14
  69. package/dist/controller/layoutScheduler.js +15 -12
  70. package/dist/controller/layoutSession.d.ts +26 -2
  71. package/dist/controller/layoutSession.js +1 -1
  72. package/dist/controller/noteEditorManager.js +8 -3
  73. package/dist/document-operations.d.ts +11 -2
  74. package/dist/document-operations.js +230 -21
  75. package/dist/docx/altChunk.d.ts +8 -0
  76. package/dist/docx/altChunk.js +17 -0
  77. package/dist/docx/archiveInflation.d.ts +127 -0
  78. package/dist/docx/archiveInflation.js +181 -0
  79. package/dist/docx/attributeRemainder.d.ts +1 -1
  80. package/dist/docx/blockContentParser.d.ts +64 -1
  81. package/dist/docx/blockContentParser.js +17 -4
  82. package/dist/docx/blockCustomXmlShell.d.ts +7 -0
  83. package/dist/docx/blockCustomXmlShell.js +14 -0
  84. package/dist/docx/blockPlainText.js +7 -0
  85. package/dist/docx/commentAnchorIndex.js +1 -1
  86. package/dist/docx/commentRangeIntegrity.js +8 -3
  87. package/dist/docx/commentReferenceNormalization.js +1 -1
  88. package/dist/docx/commentReplyMarkers.js +20 -1
  89. package/dist/docx/compatibility.d.ts +1 -1
  90. package/dist/docx/compatibility.js +34 -13
  91. package/dist/docx/containerChildren.gen.d.ts +1 -1
  92. package/dist/docx/containerChildren.gen.js +1 -0
  93. package/dist/docx/documentParser.js +12 -12
  94. package/dist/docx/drawingIdNormalization.d.ts +3 -1
  95. package/dist/docx/drawingIdNormalization.js +6 -1
  96. package/dist/docx/ensureParaIds.js +119 -97
  97. package/dist/docx/footnoteParser.js +8 -4
  98. package/dist/docx/headerFooterParser.js +3 -3
  99. package/dist/docx/headerFooterReferenceNormalization.d.ts +20 -1
  100. package/dist/docx/headerFooterReferenceNormalization.js +52 -27
  101. package/dist/docx/hyperlinkParser.d.ts +1 -1
  102. package/dist/docx/index.d.ts +1 -1
  103. package/dist/docx/listNumberingInstances.d.ts +59 -0
  104. package/dist/docx/listNumberingInstances.js +249 -0
  105. package/dist/docx/metadataPrivacy.js +24 -1
  106. package/dist/docx/normalizeBaseDirection.js +2 -1
  107. package/dist/docx/noteReferenceMark.d.ts +15 -0
  108. package/dist/docx/noteReferenceMark.js +48 -0
  109. package/dist/docx/opaqueCarrier.d.ts +7 -0
  110. package/dist/docx/opaqueCarrier.js +38 -0
  111. package/dist/docx/packageParts.js +4 -1
  112. package/dist/docx/paragraphParser.js +96 -27
  113. package/dist/docx/paragraphPropertySource.d.ts +4 -2
  114. package/dist/docx/paragraphPropertySource.js +10 -2
  115. package/dist/docx/paragraphTraversal.js +1 -0
  116. package/dist/docx/parseWarningMessage.js +4 -1
  117. package/dist/docx/parser.js +175 -22
  118. package/dist/docx/rezip.js +31 -7
  119. package/dist/docx/sdtProperties.js +1 -1
  120. package/dist/docx/sdtPropertiesPatch.js +3 -0
  121. package/dist/docx/selectiveSave.js +16 -9
  122. package/dist/docx/selectiveXmlPatch.d.ts +3 -1
  123. package/dist/docx/selectiveXmlPatch.js +186 -39
  124. package/dist/docx/serializer/blockCustomXmlSerializer.d.ts +5 -0
  125. package/dist/docx/serializer/blockCustomXmlSerializer.js +4 -0
  126. package/dist/docx/serializer/documentSerializer.js +2 -0
  127. package/dist/docx/serializer/headerFooterSerializer.js +2 -0
  128. package/dist/docx/serializer/noteSerializer.js +3 -1
  129. package/dist/docx/serializer/paragraphSerializer.js +33 -9
  130. package/dist/docx/serializer/tableSerializer.js +25 -38
  131. package/dist/docx/server/boundedArchive.d.ts +8 -13
  132. package/dist/docx/server/boundedArchive.js +70 -59
  133. package/dist/docx/server/createBilingualDocument.js +3 -3
  134. package/dist/docx/server/extractDocxText.d.ts +8 -2
  135. package/dist/docx/server/extractDocxText.js +2 -2
  136. package/dist/docx/server/validateDocxConformance.d.ts +1 -1
  137. package/dist/docx/server/validateDocxConformance.js +1 -0
  138. package/dist/docx/tableParser.d.ts +157 -1
  139. package/dist/docx/tableParser.js +89 -10
  140. package/dist/docx/textBoxParser.js +1 -1
  141. package/dist/docx/unzip.d.ts +20 -2
  142. package/dist/docx/unzip.js +136 -25
  143. package/dist/docx/wordprocessingPrefixes.d.ts +78 -0
  144. package/dist/docx/wordprocessingPrefixes.js +286 -0
  145. package/dist/fonts/embeddedFonts.js +1 -1
  146. package/dist/i18n/messages/catalogs.gen.d.ts +170 -34
  147. package/dist/i18n/messages/catalogs.gen.js +187 -51
  148. package/dist/i18n/messages/messages.gen.d.ts +10 -2
  149. package/dist/internal/compare/inline-presentation.d.ts +2 -1
  150. package/dist/internal/compare/inline-presentation.js +11 -10
  151. package/dist/internal/headlessRevisionResolutionGuard.d.ts +2 -8
  152. package/dist/internal/headlessRevisionResolutionGuard.js +2 -11
  153. package/dist/internal/indexedPositionMap.d.ts +11 -0
  154. package/dist/internal/indexedPositionMap.js +42 -0
  155. package/dist/internal/pageBreakRunSourceDescendantIndex.js +2 -1
  156. package/dist/internal/revisionResolutionEdits.d.ts +13 -0
  157. package/dist/internal/revisionResolutionEdits.js +19 -0
  158. package/dist/internal/revisionResolutionInline.d.ts +24 -0
  159. package/dist/internal/{headlessRevisionResolution.js → revisionResolutionInline.js} +61 -43
  160. package/dist/internal/revisionResolutionStep.d.ts +34 -0
  161. package/dist/internal/revisionResolutionStep.js +282 -0
  162. package/dist/internal/revisionResolutionTracking.d.ts +11 -0
  163. package/dist/internal/revisionResolutionTracking.js +124 -0
  164. package/dist/internal/wholeStoryRevisionResolution.d.ts +56 -0
  165. package/dist/internal/wholeStoryRevisionResolution.js +600 -0
  166. package/dist/layout-bridge/convert/markupViewFlow.d.ts +20 -0
  167. package/dist/layout-bridge/convert/markupViewFlow.js +123 -0
  168. package/dist/layout-bridge/convert/tableConversion.js +1 -1
  169. package/dist/layout-bridge/convert/toFlowBlocks.js +10 -1
  170. package/dist/layout-engine/layoutInstrumentation.d.ts +9 -1
  171. package/dist/layout-engine/layoutInstrumentation.js +4 -1
  172. package/dist/layout-engine/measure/cache.d.ts +18 -1
  173. package/dist/layout-engine/measure/cache.js +31 -1
  174. package/dist/layout-engine/measure/font-metrics.worker.js +3 -7
  175. package/dist/layout-engine/measure/measureContainer.js +7 -47
  176. package/dist/layout-engine/measure/measureHelpers.d.ts +6 -1
  177. package/dist/layout-engine/measure/measureHelpers.js +22 -2
  178. package/dist/layout-engine/measure/measureParagraph.js +2 -2
  179. package/dist/layout-engine/measure/measureWorker.js +2 -3
  180. package/dist/layout-engine/measure/measureWorkerProtocol.d.ts +6 -7
  181. package/dist/layout-engine/measure/measureWorkerProtocol.js +1 -2
  182. package/dist/layout-engine/measure/paragraphMeasureShared.d.ts +12 -1
  183. package/dist/layout-engine/measure/paragraphMeasureShared.js +14 -1
  184. package/dist/layout-engine/types.d.ts +6 -0
  185. package/dist/layout-painter/renderPage.js +1 -0
  186. package/dist/layout-painter/renderParagraph.js +1 -1
  187. package/dist/managers/ContextMenuManager.js +5 -2
  188. package/dist/managers/types.d.ts +3 -0
  189. package/dist/markdown/escape.d.ts +2 -2
  190. package/dist/markdown/escape.js +4 -5
  191. package/dist/markdown/fromMarkdown.js +2 -1
  192. package/dist/markdown/internals.d.ts +11 -1
  193. package/dist/markdown/internals.js +24 -3
  194. package/dist/markdown/renderBlock.js +121 -25
  195. package/dist/markdown/renderParagraph.d.ts +13 -1
  196. package/dist/markdown/renderParagraph.js +85 -38
  197. package/dist/markdown/renderRuns.d.ts +10 -1
  198. package/dist/markdown/renderRuns.js +323 -69
  199. package/dist/markdown/renderTable.js +24 -12
  200. package/dist/markdown/trailers.js +2 -2
  201. package/dist/markdown/types.d.ts +29 -7
  202. package/dist/paged-layout/incrementalMeasure.d.ts +1 -2
  203. package/dist/paged-layout/incrementalMeasure.js +1 -9
  204. package/dist/paged-layout/transactionDirtyRange.d.ts +1 -3
  205. package/dist/paged-layout/transactionDirtyRange.js +29 -41
  206. package/dist/panel-layout.d.ts +83 -0
  207. package/dist/panel-layout.js +96 -0
  208. package/dist/prosemirror/anchoredTextBoxes.d.ts +37 -0
  209. package/dist/prosemirror/anchoredTextBoxes.js +156 -0
  210. package/dist/prosemirror/attrs/index.d.ts +6 -2
  211. package/dist/prosemirror/attrs/index.js +172 -1
  212. package/dist/prosemirror/clearRunColor.d.ts +6 -0
  213. package/dist/prosemirror/clearRunColor.js +46 -0
  214. package/dist/prosemirror/commands/comments.d.ts +7 -8
  215. package/dist/prosemirror/commands/comments.js +281 -212
  216. package/dist/prosemirror/commands/contentControls.d.ts +1 -1
  217. package/dist/prosemirror/commands/formatPainter.d.ts +1 -1
  218. package/dist/prosemirror/commands/formatPainter.js +1 -1
  219. package/dist/prosemirror/commands/formatting.d.ts +1 -1
  220. package/dist/prosemirror/commands/hyperlink.js +2 -1
  221. package/dist/prosemirror/commands/index.d.ts +2 -2
  222. package/dist/prosemirror/commands/index.js +2 -2
  223. package/dist/prosemirror/commands/paragraph.d.ts +7 -1
  224. package/dist/prosemirror/commands/paragraph.js +9 -1
  225. package/dist/prosemirror/commands/paragraphBookmarkJoin.d.ts +13 -0
  226. package/dist/prosemirror/commands/paragraphBookmarkJoin.js +22 -0
  227. package/dist/prosemirror/commands/pastePlainText.d.ts +1 -1
  228. package/dist/prosemirror/commands/propertyChangeScope.d.ts +3 -2
  229. package/dist/prosemirror/commands/propertyChangeScope.js +24 -3
  230. package/dist/prosemirror/commands/resolveAllTableChanges.d.ts +40 -0
  231. package/dist/prosemirror/commands/resolveAllTableChanges.js +620 -0
  232. package/dist/prosemirror/commands/resolveNodePropertyChangeAttrs.d.ts +15 -0
  233. package/dist/prosemirror/commands/resolveNodePropertyChangeAttrs.js +46 -0
  234. package/dist/prosemirror/commands/resolveParagraphProperties.d.ts +16 -0
  235. package/dist/prosemirror/commands/resolveParagraphProperties.js +73 -0
  236. package/dist/prosemirror/commands/sectionBreak.js +2 -1
  237. package/dist/prosemirror/commands/tableCellMergeResolution.d.ts +15 -2
  238. package/dist/prosemirror/commands/tableCellMergeResolution.js +23 -7
  239. package/dist/prosemirror/containerFinalParagraph.d.ts +11 -5
  240. package/dist/prosemirror/containerFinalParagraph.js +7 -6
  241. package/dist/prosemirror/contentControlRevisions.d.ts +1 -1
  242. package/dist/prosemirror/conversion/fromProseDoc.d.ts +2 -13
  243. package/dist/prosemirror/conversion/fromProseDoc.js +177 -605
  244. package/dist/prosemirror/conversion/toProseDoc.d.ts +4 -11
  245. package/dist/prosemirror/conversion/toProseDoc.js +70 -154
  246. package/dist/prosemirror/documentSchema.d.ts +8 -0
  247. package/dist/prosemirror/documentSchema.js +18 -0
  248. package/dist/prosemirror/emptyFieldResultRuns.d.ts +18 -0
  249. package/dist/prosemirror/emptyFieldResultRuns.js +33 -0
  250. package/dist/prosemirror/extensions/ExtensionManager.d.ts +1 -1
  251. package/dist/prosemirror/extensions/ExtensionManager.js +3 -1
  252. package/dist/prosemirror/extensions/StarterKit.js +5 -1
  253. package/dist/prosemirror/extensions/core/DocExtension.js +1 -1
  254. package/dist/prosemirror/extensions/core/ParagraphExtension.js +116 -63
  255. package/dist/prosemirror/extensions/features/BaseKeymapExtension.js +4 -1
  256. package/dist/prosemirror/extensions/features/EmptyParagraphFormatExtension.js +24 -3
  257. package/dist/prosemirror/extensions/features/JoinedRunStyleExtension.d.ts +20 -0
  258. package/dist/prosemirror/extensions/features/JoinedRunStyleExtension.js +43 -0
  259. package/dist/prosemirror/extensions/features/ListExtension.js +167 -128
  260. package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.d.ts +19 -2
  261. package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.js +33 -20
  262. package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.d.ts +31 -2
  263. package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.js +270 -99
  264. package/dist/prosemirror/extensions/features/PasteCleanupExtension.js +3 -2
  265. package/dist/prosemirror/extensions/features/pasteCleanup.js +2 -1
  266. package/dist/prosemirror/extensions/features/pastedHeadingStyles.js +1 -1
  267. package/dist/prosemirror/extensions/features/pastedHtmlLists.d.ts +12 -0
  268. package/dist/prosemirror/extensions/features/pastedHtmlLists.js +124 -0
  269. package/dist/prosemirror/extensions/marks/FootnoteRefExtension.js +33 -11
  270. package/dist/prosemirror/extensions/marks/HyperlinkExtension.js +8 -4
  271. package/dist/prosemirror/extensions/marks/RunIdentityExtension.d.ts +21 -18
  272. package/dist/prosemirror/extensions/marks/RunIdentityExtension.js +37 -17
  273. package/dist/prosemirror/extensions/marks/StrikeExtension.js +2 -2
  274. package/dist/prosemirror/extensions/marks/SubscriptExtension.js +2 -2
  275. package/dist/prosemirror/extensions/marks/SuperscriptExtension.js +2 -2
  276. package/dist/prosemirror/extensions/marks/TextColorExtension.js +4 -3
  277. package/dist/prosemirror/extensions/marks/markUtils.d.ts +15 -8
  278. package/dist/prosemirror/extensions/marks/markUtils.js +25 -10
  279. package/dist/prosemirror/extensions/marks/noteReferenceDeletion.d.ts +12 -0
  280. package/dist/prosemirror/extensions/marks/noteReferenceDeletion.js +46 -0
  281. package/dist/prosemirror/extensions/nodes/BlockCustomXmlExtension.d.ts +6 -0
  282. package/dist/prosemirror/extensions/nodes/BlockCustomXmlExtension.js +52 -0
  283. package/dist/prosemirror/extensions/nodes/CommentReferenceExtension.js +2 -2
  284. package/dist/prosemirror/extensions/nodes/FieldExtension.d.ts +3 -3
  285. package/dist/prosemirror/extensions/nodes/FieldExtension.js +50 -15
  286. package/dist/prosemirror/extensions/nodes/HardBreakExtension.js +5 -3
  287. package/dist/prosemirror/extensions/nodes/PreservedBlockExtension.js +4 -1
  288. package/dist/prosemirror/extensions/nodes/TableExtension.d.ts +1 -1
  289. package/dist/prosemirror/extensions/nodes/TableExtension.js +121 -226
  290. package/dist/prosemirror/extensions/types.d.ts +11 -1
  291. package/dist/prosemirror/findReplaceSelection.js +1 -1
  292. package/dist/prosemirror/hyperlinkRemoval.d.ts +9 -0
  293. package/dist/prosemirror/hyperlinkRemoval.js +129 -0
  294. package/dist/prosemirror/index.d.ts +5 -3
  295. package/dist/prosemirror/index.js +5 -3
  296. package/dist/prosemirror/indexedNodeLookup.d.ts +17 -0
  297. package/dist/prosemirror/indexedNodeLookup.js +103 -0
  298. package/dist/prosemirror/listAutoformatMarkers.d.ts +19 -0
  299. package/dist/prosemirror/listAutoformatMarkers.js +98 -0
  300. package/dist/prosemirror/listInstanceReferences.d.ts +12 -0
  301. package/dist/prosemirror/listInstanceReferences.js +72 -0
  302. package/dist/prosemirror/listLabels.d.ts +24 -0
  303. package/dist/prosemirror/listLabels.js +111 -0
  304. package/dist/prosemirror/listNumbering.d.ts +92 -0
  305. package/dist/prosemirror/listNumbering.js +330 -0
  306. package/dist/prosemirror/listRendering.d.ts +27 -0
  307. package/dist/prosemirror/listRendering.js +27 -0
  308. package/dist/prosemirror/listRenderingAttrs.d.ts +11 -2
  309. package/dist/prosemirror/listRenderingAttrs.js +8 -1
  310. package/dist/prosemirror/markupViewNotes.d.ts +8 -0
  311. package/dist/prosemirror/markupViewNotes.js +49 -0
  312. package/dist/prosemirror/markupViewProjection.d.ts +97 -0
  313. package/dist/prosemirror/markupViewProjection.js +88 -0
  314. package/dist/prosemirror/noteReferenceReview.d.ts +77 -0
  315. package/dist/prosemirror/noteReferenceReview.js +332 -0
  316. package/dist/prosemirror/numberingAttr.d.ts +9 -1
  317. package/dist/prosemirror/numberingAttr.js +9 -1
  318. package/dist/prosemirror/outlineLevelAttr.js +1 -1
  319. package/dist/prosemirror/paragraphIndentation.d.ts +10 -1
  320. package/dist/prosemirror/paragraphIndentation.js +32 -7
  321. package/dist/prosemirror/paragraphMarkJoin.d.ts +21 -0
  322. package/dist/prosemirror/paragraphMarkJoin.js +26 -0
  323. package/dist/prosemirror/paragraphPropertyCarry.d.ts +64 -0
  324. package/dist/prosemirror/paragraphPropertyCarry.js +158 -0
  325. package/dist/prosemirror/plugins/createDocScanPlugin.d.ts +1 -1
  326. package/dist/prosemirror/plugins/documentNumbering.d.ts +27 -1
  327. package/dist/prosemirror/plugins/documentNumbering.js +97 -11
  328. package/dist/prosemirror/plugins/documentStyleState.d.ts +26 -0
  329. package/dist/prosemirror/plugins/documentStyleState.js +32 -0
  330. package/dist/prosemirror/plugins/documentStyles.d.ts +3 -13
  331. package/dist/prosemirror/plugins/documentStyles.js +67 -17
  332. package/dist/prosemirror/plugins/index.d.ts +2 -1
  333. package/dist/prosemirror/plugins/index.js +2 -1
  334. package/dist/prosemirror/plugins/paragraphStyleResolution.d.ts +15 -0
  335. package/dist/prosemirror/plugins/paragraphStyleResolution.js +230 -0
  336. package/dist/prosemirror/plugins/suggestionMode.d.ts +27 -3
  337. package/dist/prosemirror/plugins/suggestionMode.js +490 -63
  338. package/dist/prosemirror/plugins/templateDirectives.d.ts +1 -1
  339. package/dist/prosemirror/plugins/transactionInvariants.d.ts +32 -0
  340. package/dist/prosemirror/plugins/transactionInvariants.js +86 -0
  341. package/dist/prosemirror/positionSweep.d.ts +24 -0
  342. package/dist/prosemirror/positionSweep.js +222 -0
  343. package/dist/prosemirror/rebaseParagraphRunFormatting.d.ts +23 -3
  344. package/dist/prosemirror/rebaseParagraphRunFormatting.js +39 -13
  345. package/dist/prosemirror/rebaseParagraphRuns.d.ts +36 -0
  346. package/dist/prosemirror/rebaseParagraphRuns.js +99 -0
  347. package/dist/prosemirror/rejoinRunCarriers.d.ts +1 -1
  348. package/dist/prosemirror/replacedAnnotations.d.ts +33 -1
  349. package/dist/prosemirror/replacedAnnotations.js +170 -1
  350. package/dist/prosemirror/runFormattingFromMarks.d.ts +18 -0
  351. package/dist/prosemirror/runFormattingFromMarks.js +567 -0
  352. package/dist/prosemirror/runFormattingInlineCarriers.d.ts +1 -1
  353. package/dist/prosemirror/runFormattingReconciliation.js +10 -9
  354. package/dist/prosemirror/schema/index.d.ts +2 -2
  355. package/dist/prosemirror/schema/index.js +3 -0
  356. package/dist/prosemirror/schema/nodes.d.ts +44 -11
  357. package/dist/prosemirror/sectionMarkEdits.d.ts +20 -0
  358. package/dist/prosemirror/sectionMarkEdits.js +59 -0
  359. package/dist/prosemirror/storyListNumbering.d.ts +17 -0
  360. package/dist/prosemirror/storyListNumbering.js +102 -0
  361. package/dist/prosemirror/styles/paragraphStyleCascade.d.ts +59 -0
  362. package/dist/prosemirror/styles/paragraphStyleCascade.js +145 -0
  363. package/dist/prosemirror/styles/resolvedStyleAttrs.d.ts +21 -2
  364. package/dist/prosemirror/styles/resolvedStyleAttrs.js +38 -1
  365. package/dist/prosemirror/styles/tableStyleRegions.d.ts +31 -0
  366. package/dist/prosemirror/styles/tableStyleRegions.js +55 -0
  367. package/dist/prosemirror/tableCellPaste.d.ts +74 -0
  368. package/dist/prosemirror/tableCellPaste.js +525 -0
  369. package/dist/prosemirror/tableGridMutation.d.ts +87 -2
  370. package/dist/prosemirror/tableGridMutation.js +255 -2
  371. package/dist/prosemirror/tableRunIn.d.ts +51 -0
  372. package/dist/prosemirror/tableRunIn.js +165 -0
  373. package/dist/prosemirror/textInput.js +11 -2
  374. package/dist/prosemirror/trackedRevisionPath.d.ts +17 -0
  375. package/dist/prosemirror/trackedRevisionPath.js +32 -0
  376. package/dist/prosemirror/validation.js +5 -1
  377. package/dist/redline.js +93 -9
  378. package/dist/render-dom/BodySelectionOverlay.d.ts +4 -1
  379. package/dist/render-dom/BodySelectionOverlay.js +3 -2
  380. package/dist/server.d.ts +2 -2
  381. package/dist/utils/findReplace.js +2 -2
  382. package/dist/utils/mergeDocumentContent.js +1 -1
  383. package/dist/utils/noteReferenceLabels.d.ts +36 -0
  384. package/dist/utils/noteReferenceLabels.js +32 -0
  385. package/dist/utils/replaceText.js +1 -1
  386. package/dist/version-comparison.d.ts +1 -0
  387. package/dist/version-comparison.js +1 -0
  388. package/package.json +6 -5
  389. package/dist/internal/headlessRevisionResolution.d.ts +0 -23
@@ -0,0 +1,600 @@
1
+ import { getProseParagraphPropertySourceToken, recreateProseNodeWithParagraphPropertySource } from "../docx/paragraphPropertySource.js";
2
+ import { anchoredTextBoxId, droppedTextBoxAnchorIds } from "../prosemirror/anchoredTextBoxes.js";
3
+ import { expectParagraphAttrs } from "../prosemirror/attrs/index.js";
4
+ import { inlineBookmarksOf } from "../prosemirror/commands/paragraphBookmarkJoin.js";
5
+ import { resolveAllTableChanges } from "../prosemirror/commands/resolveAllTableChanges.js";
6
+ import { resolveAllNodePropertyChangeAttrs } from "../prosemirror/commands/resolveNodePropertyChangeAttrs.js";
7
+ import { resolveParagraphChangeAttrs } from "../prosemirror/commands/resolveParagraphProperties.js";
8
+ import { rebaseParagraphRunContent } from "../prosemirror/rebaseParagraphRuns.js";
9
+ import { expandRunFormattingCarrier } from "../prosemirror/runFormattingInlineCarriers.js";
10
+ import { readAuthoredRunFormatting, reconcileRunFormattingMarks } from "../prosemirror/runFormattingReconciliation.js";
11
+ import { paragraphRunStyleContext } from "../prosemirror/runStyleFormatting.js";
12
+ import { runParagraphsIntoTables, runsIntoFollowingTable } from "../prosemirror/tableRunIn.js";
13
+ import { holdsNoContent } from "../prosemirror/zeroWidthAnchors.js";
14
+ import { recordNodeResolution } from "./revisionResolutionEdits.js";
15
+ import { resolveInlineRevisions } from "./revisionResolutionInline.js";
16
+ import { composeRevisionResolutionMaps } from "./revisionResolutionStep.js";
17
+ import { REVIEW_CARRIERS } from "@stll/docx-core/model";
18
+ import { Fragment, Slice } from "prosemirror-model";
19
+ import { Mapping, ReplaceStep, StepMap, Transform } from "prosemirror-transform";
20
+ //#region src/internal/wholeStoryRevisionResolution.ts
21
+ const resolveProperties = ({ doc, mode, styleResolver, numbering, steps, changedRanges }) => {
22
+ let structural = false;
23
+ let runsIntoTable = false;
24
+ const walk = (node, position) => {
25
+ if (node.isText) return node;
26
+ if (!runsIntoTable && !node.isTextblock) {
27
+ for (let index = 0; index + 1 < node.childCount; index++) if (runsIntoFollowingTable(node.child(index), node.child(index + 1), mode)) {
28
+ runsIntoTable = true;
29
+ break;
30
+ }
31
+ }
32
+ const nextAttrs = node.type.name === "paragraph" ? resolveParagraphChangeAttrs({
33
+ node,
34
+ mode,
35
+ boundaryCovered: true,
36
+ revisionSet: null,
37
+ styleResolver,
38
+ numbering
39
+ }) : null;
40
+ let resolved = node;
41
+ if (nextAttrs) resolved = recreateProseNodeWithParagraphPropertySource(node, { attrs: nextAttrs });
42
+ else if (node.type.name !== "paragraph") resolved = resolveAllNodePropertyChangeAttrs(node, mode);
43
+ if (resolved !== node) {
44
+ if (node.type.name === "paragraph") changedRanges.push({
45
+ from: position,
46
+ to: position + node.nodeSize
47
+ });
48
+ structural ||= node.type.name !== "paragraph";
49
+ }
50
+ if (position >= 0) recordNodeResolution({
51
+ before: node,
52
+ after: resolved,
53
+ position,
54
+ steps
55
+ });
56
+ const rebased = /* @__PURE__ */ new Map();
57
+ if (node.type.name === "paragraph" && styleResolver && nextAttrs && nextAttrs["styleId"] !== node.attrs["styleId"]) {
58
+ const previousContext = paragraphRunStyleContext(node, styleResolver);
59
+ const nextContext = paragraphRunStyleContext(resolved, styleResolver);
60
+ node.descendants((inline, pos) => {
61
+ if (!inline.isInline) return true;
62
+ const carrier = expandRunFormattingCarrier(inline, pos);
63
+ if (!carrier) return !inline.isAtom;
64
+ for (const { node: representation } of carrier.representations) {
65
+ if (mode === "reject" && representation.marks.some(({ type }) => type.name === "deletion") && representation.marks.some(({ type }) => type.name === "runFormattingOverride")) continue;
66
+ const marks = reconcileRunFormattingMarks({
67
+ authoredFormatting: readAuthoredRunFormatting({
68
+ context: previousContext,
69
+ marks: representation.marks,
70
+ styleResolver
71
+ }),
72
+ context: nextContext,
73
+ node: representation,
74
+ styleResolver
75
+ });
76
+ rebased.set(representation, representation.mark(marks));
77
+ }
78
+ return false;
79
+ });
80
+ }
81
+ const children = [];
82
+ let changed = false;
83
+ const visitChild = (child, childPosition) => {
84
+ const replacement = rebased.get(child) ?? child;
85
+ if (rebased.size === 0) return walk(replacement, childPosition);
86
+ recordNodeResolution({
87
+ before: child,
88
+ after: replacement,
89
+ position: childPosition,
90
+ steps
91
+ });
92
+ if (replacement.isLeaf) return replacement;
93
+ const nested = [];
94
+ replacement.forEach((inner, offset) => nested.push(visitChild(inner, childPosition + 1 + offset)));
95
+ return recreateProseNodeWithParagraphPropertySource(replacement, { content: nested });
96
+ };
97
+ resolved.forEach((child, offset) => {
98
+ const result = visitChild(child, position + 1 + offset);
99
+ children.push(result);
100
+ changed ||= result !== child;
101
+ });
102
+ return changed ? recreateProseNodeWithParagraphPropertySource(resolved, { content: children }) : resolved;
103
+ };
104
+ return {
105
+ resolved: walk(doc, -1),
106
+ structural,
107
+ runsIntoTable
108
+ };
109
+ };
110
+ const structuralReplacementMap = ({ replacements, tables, bookmarkJoins, origin }) => {
111
+ const tablesByPosition = new Map(tables.map((table) => [table.position, table]));
112
+ const bookmarkJoinsByPosition = new Map(bookmarkJoins.map((join) => [join.from, join]));
113
+ const ranges = [];
114
+ const mapFor = ({ from, to, slice }) => {
115
+ const table = tablesByPosition.get(from);
116
+ if (table && table.sourceNodeSize === to - from) {
117
+ const tableRanges = [];
118
+ table.positionMap.forEach((oldStart, oldEnd, newStart, newEnd) => {
119
+ tableRanges.push(from - origin + oldStart, oldEnd - oldStart, newEnd - newStart);
120
+ });
121
+ return new StepMap(tableRanges);
122
+ }
123
+ const bookmarkJoin = bookmarkJoinsByPosition.get(from);
124
+ if (bookmarkJoin?.to === to) {
125
+ const joinRanges = [];
126
+ bookmarkJoin.positionMap.forEach((oldStart, oldEnd, newStart, newEnd) => {
127
+ joinRanges.push(from - origin + oldStart, oldEnd - oldStart, newEnd - newStart);
128
+ });
129
+ return new StepMap(joinRanges);
130
+ }
131
+ return new StepMap([
132
+ from - origin,
133
+ to - from,
134
+ slice.size
135
+ ]);
136
+ };
137
+ const isDeletion = ({ from, to, slice }) => slice.size === 0 && !tablesByPosition.has(from) && to > from;
138
+ const groupMap = (group) => {
139
+ if (group.every(isDeletion)) {
140
+ const first = group.at(0);
141
+ if (!first) return StepMap.empty;
142
+ let end = first.to;
143
+ for (const replacement of group.slice(1)) end += replacement.to - replacement.from;
144
+ return new StepMap([
145
+ first.from - origin,
146
+ end - first.from,
147
+ 0
148
+ ]);
149
+ }
150
+ let maps = group.toReversed().map(mapFor);
151
+ while (maps.length > 1) {
152
+ const combined = [];
153
+ for (let index = 0; index < maps.length; index += 2) {
154
+ const first = maps.at(index);
155
+ const second = maps.at(index + 1);
156
+ if (!first) break;
157
+ combined.push(second ? composeRevisionResolutionMaps(first, second) : first);
158
+ }
159
+ maps = combined;
160
+ }
161
+ return maps.at(0) ?? StepMap.empty;
162
+ };
163
+ let group = [];
164
+ let influenceEnd = -1;
165
+ const flush = () => {
166
+ groupMap(group).forEach((oldStart, oldEnd, newStart, newEnd) => {
167
+ const last = ranges.length - 3;
168
+ const previousStart = ranges.at(last);
169
+ const previousOldSize = ranges.at(last + 1);
170
+ const previousNewSize = ranges.at(last + 2);
171
+ const newSize = newEnd - newStart;
172
+ if (last >= 0 && previousStart !== void 0 && previousOldSize !== void 0 && previousNewSize !== void 0 && (previousNewSize === 0 || newSize === 0) && previousStart + previousOldSize === oldStart) {
173
+ ranges[last + 1] = previousOldSize + oldEnd - oldStart;
174
+ ranges[last + 2] = previousNewSize + newSize;
175
+ return;
176
+ }
177
+ ranges.push(oldStart, oldEnd - oldStart, newSize);
178
+ });
179
+ };
180
+ for (const replacement of replacements) {
181
+ if (group.length > 0 && replacement.from >= influenceEnd) {
182
+ flush();
183
+ group = [];
184
+ }
185
+ if (group.length === 0) {
186
+ group.push(replacement);
187
+ influenceEnd = replacement.to;
188
+ continue;
189
+ }
190
+ group.push(replacement);
191
+ influenceEnd += replacement.to - replacement.from;
192
+ }
193
+ if (group.length > 0) flush();
194
+ return new StepMap(ranges);
195
+ };
196
+ const removedEndpoint = (node, context) => {
197
+ const properties = expectParagraphAttrs(node)._sectionProperties;
198
+ if (properties === void 0) return;
199
+ context.removedEndpointCount++;
200
+ for (const { type, rId } of properties?.headerReferences ?? []) context.removedReferences.push({
201
+ part: "header",
202
+ type,
203
+ relationshipId: rId
204
+ });
205
+ for (const { type, rId } of properties?.footerReferences ?? []) context.removedReferences.push({
206
+ part: "footer",
207
+ type,
208
+ relationshipId: rId
209
+ });
210
+ };
211
+ const resolveStructure = ({ node, position, context }) => {
212
+ if (node.isLeaf) return node;
213
+ const textBoxAnchor = anchoredTextBoxId(node);
214
+ if (textBoxAnchor !== void 0 && context.droppedTextBoxAnchors.has(textBoxAnchor)) {
215
+ context.structural = true;
216
+ return null;
217
+ }
218
+ const structuralStart = {
219
+ steps: context.steps.length,
220
+ deleted: context.deleted.length,
221
+ replacements: context.replacements.length,
222
+ tableRanges: context.tableRanges.length,
223
+ bookmarkJoins: context.bookmarkJoins.length
224
+ };
225
+ const entries = [];
226
+ node.forEach((child, offset) => entries.push({
227
+ node: resolveStructure({
228
+ node: child,
229
+ position: position + 1 + offset,
230
+ context
231
+ }),
232
+ original: child,
233
+ position: position + 1 + offset
234
+ }));
235
+ const reversed = [];
236
+ let chain = null;
237
+ let pendingBookmarks = [];
238
+ let followingContainerChild = false;
239
+ const flush = () => {
240
+ if (!chain) return;
241
+ let final = chain.node;
242
+ if (chain.chunks.length > 1) {
243
+ const children = [];
244
+ for (let index = chain.chunks.length - 1; index >= 0; index--) {
245
+ const chunk = chain.chunks[index];
246
+ if (!chunk) continue;
247
+ let content = chunk.type === "paragraph" ? chunk.source.content : chunk.content;
248
+ if (chunk.type === "paragraph" && chunk.position !== chain.formattingOwnerPosition) content = rebaseParagraphRunContent({
249
+ paragraph: chunk.source,
250
+ target: chain.node,
251
+ position: chunk.position,
252
+ styleResolver: context.styleResolver,
253
+ onRebased: ({ before, after, position: runPosition }) => recordNodeResolution({
254
+ before,
255
+ after,
256
+ position: runPosition,
257
+ steps: context.steps
258
+ })
259
+ });
260
+ content.forEach((child) => children.push(child));
261
+ }
262
+ final = recreateProseNodeWithParagraphPropertySource(chain.node, { content: Fragment.fromArray(children) });
263
+ }
264
+ if (!chain.before.sameMarkup(final)) context.changedRanges.push({
265
+ from: chain.position,
266
+ to: chain.position + chain.before.nodeSize
267
+ });
268
+ recordNodeResolution({
269
+ before: chain.before,
270
+ after: final,
271
+ position: chain.position,
272
+ steps: context.steps
273
+ });
274
+ for (const { closing, bookmarks } of chain.joinBoundaries) {
275
+ if (bookmarks.size === 0) {
276
+ context.deleted.push({
277
+ from: closing,
278
+ to: closing + 2
279
+ });
280
+ continue;
281
+ }
282
+ const to = closing + bookmarks.size + 2;
283
+ context.replacements.push({
284
+ from: closing,
285
+ to,
286
+ slice: new Slice(bookmarks, 0, 0)
287
+ });
288
+ context.bookmarkJoins.push({
289
+ from: closing,
290
+ to,
291
+ positionMap: new StepMap([
292
+ 0,
293
+ 1,
294
+ 0,
295
+ bookmarks.size + 1,
296
+ 1,
297
+ 0
298
+ ])
299
+ });
300
+ }
301
+ reversed.push(chain.chunks.length === 1 && final.eq(chain.before) ? chain.before : final);
302
+ chain = null;
303
+ };
304
+ const flushBookmarks = () => {
305
+ flush();
306
+ for (const bookmark of pendingBookmarks) reversed.push(bookmark);
307
+ pendingBookmarks = [];
308
+ };
309
+ for (let index = entries.length - 1; index >= 0; index--) {
310
+ const entry = entries[index];
311
+ if (!entry) continue;
312
+ let paragraph = entry.node;
313
+ if (paragraph === null) {
314
+ const filler = index + reversed.length + pendingBookmarks.length + (chain ? 1 : 0) > 0 ? null : node.type.schema.nodes["paragraph"]?.createAndFill();
315
+ context.replacements.push({
316
+ from: entry.position,
317
+ to: entry.position + entry.original.nodeSize,
318
+ slice: filler ? new Slice(Fragment.from(filler), 0, 0) : Slice.empty
319
+ });
320
+ if (!filler) continue;
321
+ paragraph = filler;
322
+ }
323
+ if (paragraph.type.name !== "paragraph") {
324
+ if (paragraph.type.name === "blockBookmarkBoundary") {
325
+ pendingBookmarks.push(paragraph);
326
+ continue;
327
+ }
328
+ flushBookmarks();
329
+ reversed.push(paragraph);
330
+ followingContainerChild ||= paragraph.type.spec["tableRole"] === "table";
331
+ continue;
332
+ }
333
+ const marker = expectParagraphAttrs(paragraph).pPrMark;
334
+ const markWasAdded = marker?.kind === "ins" || marker?.kind === "moveTo";
335
+ const joins = marker && markWasAdded !== (context.mode === "accept");
336
+ if (joins && chain) {
337
+ const boundaries = pendingBookmarks.toReversed();
338
+ let bookmarks = Fragment.empty;
339
+ if (boundaries.length > 0) {
340
+ const inline = inlineBookmarksOf(boundaries);
341
+ if (!inline) {
342
+ context.failed = true;
343
+ return null;
344
+ }
345
+ bookmarks = Fragment.fromArray(inline);
346
+ chain.chunks.push({
347
+ type: "bookmarks",
348
+ content: bookmarks
349
+ });
350
+ pendingBookmarks = [];
351
+ }
352
+ const displacedToken = getProseParagraphPropertySourceToken(paragraph);
353
+ const selectedToken = getProseParagraphPropertySourceToken(chain.node);
354
+ context.transfers.push({
355
+ displacedToken: typeof displacedToken === "string" ? displacedToken : null,
356
+ selectedToken: typeof selectedToken === "string" ? selectedToken : null
357
+ });
358
+ chain.chunks.push({
359
+ type: "paragraph",
360
+ source: paragraph,
361
+ position: entry.position
362
+ });
363
+ chain.position = entry.position;
364
+ chain.before = paragraph;
365
+ chain.joinBoundaries.push({
366
+ closing: entry.position + paragraph.nodeSize - 1,
367
+ bookmarks
368
+ });
369
+ removedEndpoint(paragraph, context);
370
+ continue;
371
+ }
372
+ flushBookmarks();
373
+ if (joins && holdsNoContent(paragraph) && (markWasAdded || followingContainerChild) && index + reversed.length + 1 > 1) {
374
+ context.deleted.push({
375
+ from: entry.position,
376
+ to: entry.position + paragraph.nodeSize
377
+ });
378
+ removedEndpoint(paragraph, context);
379
+ continue;
380
+ }
381
+ const resolved = marker ? recreateProseNodeWithParagraphPropertySource(paragraph, { attrs: {
382
+ ...paragraph.attrs,
383
+ pPrMark: null
384
+ } }) : paragraph;
385
+ chain = {
386
+ node: resolved,
387
+ formattingOwnerPosition: entry.position,
388
+ chunks: [{
389
+ type: "paragraph",
390
+ source: resolved,
391
+ position: entry.position
392
+ }],
393
+ position: entry.position,
394
+ before: paragraph,
395
+ joinBoundaries: []
396
+ };
397
+ followingContainerChild = true;
398
+ }
399
+ flushBookmarks();
400
+ reversed.reverse();
401
+ if (node.type.name === "doc") {
402
+ const carrier = reversed.at(-1);
403
+ if (carrier?.type.name === "paragraph" && carrier.attrs["reviewCarrier"] === REVIEW_CARRIERS.TERMINAL_TABLE) {
404
+ const table = reversed.findLast((child) => child.type.name === "table");
405
+ let pending = false;
406
+ table?.descendants((child) => {
407
+ pending ||= child.type.name === "tableRow" && child.attrs["trDel"] !== null && typeof child.attrs["trDel"] === "object" || child.type.name !== "tableRow" && child.marks.some((mark) => mark.type.name === "deletion");
408
+ return !pending;
409
+ });
410
+ const entry = entries.at(-1);
411
+ if (!pending && entry) if (context.mode === "accept") {
412
+ const cleared = recreateProseNodeWithParagraphPropertySource(carrier, { attrs: {
413
+ ...carrier.attrs,
414
+ reviewCarrier: void 0
415
+ } });
416
+ recordNodeResolution({
417
+ before: carrier,
418
+ after: cleared,
419
+ position: entry.position,
420
+ steps: context.steps
421
+ });
422
+ context.changedRanges.push({
423
+ from: entry.position,
424
+ to: entry.position + carrier.nodeSize
425
+ });
426
+ reversed[reversed.length - 1] = cleared;
427
+ } else if (reversed.length > 1) {
428
+ reversed.pop();
429
+ context.deleted.push({
430
+ from: entry.position,
431
+ to: entry.position + carrier.nodeSize
432
+ });
433
+ } else {
434
+ const filler = node.type.schema.nodes["paragraph"]?.createAndFill();
435
+ if (filler) {
436
+ reversed[0] = filler;
437
+ context.replacements.push({
438
+ from: entry.position,
439
+ to: entry.position + carrier.nodeSize,
440
+ slice: new Slice(Fragment.from(filler), 0, 0)
441
+ });
442
+ }
443
+ }
444
+ }
445
+ }
446
+ const rebuilt = reversed.length === node.childCount && reversed.every((child, index) => child === node.child(index)) ? node : recreateProseNodeWithParagraphPropertySource(node, { content: reversed });
447
+ if (node.type.spec["tableRole"] !== "table") return rebuilt;
448
+ const tableResult = resolveAllTableChanges({
449
+ table: rebuilt,
450
+ mode: context.mode
451
+ });
452
+ context.structural ||= tableResult.structural;
453
+ context.failed ||= tableResult.failed;
454
+ const final = tableResult.node;
455
+ if (final) {
456
+ const inside = [...context.replacements.slice(structuralStart.replacements), ...context.deleted.slice(structuralStart.deleted).map(({ from, to }) => ({
457
+ from,
458
+ to,
459
+ slice: Slice.empty
460
+ }))].sort((a, b) => a.from - b.from);
461
+ const inputMap = structuralReplacementMap({
462
+ replacements: inside,
463
+ tables: context.tableRanges.slice(structuralStart.tableRanges),
464
+ bookmarkJoins: context.bookmarkJoins.slice(structuralStart.bookmarkJoins),
465
+ origin: position
466
+ });
467
+ const positionMap = composeRevisionResolutionMaps(inputMap, tableResult.positionMap);
468
+ context.tableRanges.push({
469
+ node: final,
470
+ inputNode: rebuilt,
471
+ sourceNodeSize: node.nodeSize,
472
+ position,
473
+ inputMap,
474
+ positionMap,
475
+ ranges: tableResult.changedParagraphRanges,
476
+ paragraphOffsets: tableResult.paragraphOffsets
477
+ });
478
+ }
479
+ context.steps.length = structuralStart.steps;
480
+ context.deleted.length = structuralStart.deleted;
481
+ context.replacements.length = structuralStart.replacements;
482
+ context.bookmarkJoins.length = structuralStart.bookmarkJoins;
483
+ if (final && !node.eq(final)) context.replacements.push({
484
+ from: position,
485
+ to: position + node.nodeSize,
486
+ slice: new Slice(Fragment.from(final), 0, 0)
487
+ });
488
+ return final;
489
+ };
490
+ const resolveWholeStory = ({ doc, mode, styleResolver, numbering }) => {
491
+ const { runsIntoTable, ...direct } = resolveStoryRevisions({
492
+ doc,
493
+ mode,
494
+ styleResolver,
495
+ numbering
496
+ });
497
+ if (!runsIntoTable) return direct;
498
+ const runIn = new Transform(doc);
499
+ const { targets, maps, transfers } = runParagraphsIntoTables(runIn, mode, styleResolver);
500
+ if (!runIn.docChanged) return direct;
501
+ const { runsIntoTable: _rerun, ...result } = resolveStoryRevisions({
502
+ doc: runIn.doc,
503
+ mode,
504
+ styleResolver,
505
+ numbering
506
+ });
507
+ for (const { position, step } of targets) {
508
+ const from = runIn.mapping.slice(step).map(position);
509
+ const target = runIn.doc.nodeAt(from);
510
+ if (target) result.changedRanges.push({
511
+ from,
512
+ to: from + target.nodeSize
513
+ });
514
+ }
515
+ let runInMap = StepMap.empty;
516
+ for (const map of maps) runInMap = composeRevisionResolutionMaps(runInMap, map);
517
+ const positionMap = composeRevisionResolutionMaps(runInMap, result.positionMap);
518
+ return {
519
+ ...result,
520
+ steps: [...runIn.steps, ...result.steps],
521
+ positionMap,
522
+ mapping: new Mapping([positionMap]),
523
+ transfers: [...transfers, ...result.transfers]
524
+ };
525
+ };
526
+ const resolveStoryRevisions = ({ doc, mode, styleResolver, numbering }) => {
527
+ const steps = [];
528
+ const propertyRanges = [];
529
+ const propertyResult = resolveProperties({
530
+ doc,
531
+ mode,
532
+ styleResolver,
533
+ numbering,
534
+ steps,
535
+ changedRanges: propertyRanges
536
+ });
537
+ const properties = propertyResult.resolved;
538
+ const inline = resolveInlineRevisions({
539
+ doc: properties,
540
+ mode,
541
+ styleResolver,
542
+ keepType: doc.type.schema.marks[mode === "accept" ? "insertion" : "deletion"],
543
+ removeType: doc.type.schema.marks[mode === "accept" ? "deletion" : "insertion"]
544
+ });
545
+ const context = {
546
+ mode,
547
+ styleResolver,
548
+ steps: [],
549
+ changedRanges: [],
550
+ deleted: [],
551
+ replacements: [],
552
+ transfers: [],
553
+ tableRanges: [],
554
+ bookmarkJoins: [],
555
+ structural: propertyResult.structural,
556
+ failed: false,
557
+ removedEndpointCount: 0,
558
+ removedReferences: [],
559
+ droppedTextBoxAnchors: inline ? droppedTextBoxAnchorIds(properties, inline.resolved) : /* @__PURE__ */ new Set()
560
+ };
561
+ const resolved = resolveStructure({
562
+ node: inline?.resolved ?? properties,
563
+ position: -1,
564
+ context
565
+ }) ?? doc;
566
+ if (inline) steps.push(...inline.steps);
567
+ steps.push(...context.steps);
568
+ const replacements = [...context.replacements, ...context.deleted.map(({ from, to }) => ({
569
+ from,
570
+ to,
571
+ slice: Slice.empty
572
+ }))].sort((a, b) => a.from - b.from);
573
+ const structuralMap = structuralReplacementMap({
574
+ replacements,
575
+ tables: context.tableRanges,
576
+ bookmarkJoins: context.bookmarkJoins,
577
+ origin: 0
578
+ });
579
+ for (const { from, to, slice } of replacements.toReversed()) steps.push(new ReplaceStep(from, to, slice));
580
+ const positionMap = composeRevisionResolutionMaps(inline?.positionMap ?? StepMap.empty, structuralMap);
581
+ return {
582
+ resolved,
583
+ mapping: new Mapping([positionMap]),
584
+ positionMap,
585
+ steps,
586
+ changedRanges: [...propertyRanges, ...inline?.ranges ?? []],
587
+ inlineMap: inline?.positionMap ?? StepMap.empty,
588
+ tableRanges: context.tableRanges,
589
+ transfers: context.transfers,
590
+ structuralRanges: context.changedRanges,
591
+ structuralMap,
592
+ structural: context.structural,
593
+ failed: context.failed,
594
+ removedEndpointCount: context.removedEndpointCount,
595
+ removedReferences: context.removedReferences,
596
+ runsIntoTable: propertyResult.runsIntoTable
597
+ };
598
+ };
599
+ //#endregion
600
+ export { resolveWholeStory };
@@ -0,0 +1,20 @@
1
+ import { FlowBlock } from "../../layout-engine/types.js";
2
+ import { StepMap } from "prosemirror-transform";
3
+ //#region src/layout-bridge/convert/markupViewFlow.d.ts
4
+ type PositionRange = {
5
+ from: number;
6
+ to: number;
7
+ };
8
+ type MarkupViewFlowOptions = {
9
+ /** Authored (editor) positions to the positions the blocks were built with. */
10
+ positionMap: StepMap;
11
+ /** Ranges, in the blocks' positions, whose paragraphs show a change bar. */
12
+ changeBarRanges: readonly PositionRange[];
13
+ };
14
+ /**
15
+ * Re-address blocks built from a view projection in editor positions, and mark
16
+ * the paragraphs the view flags with a change bar.
17
+ */
18
+ declare function remapMarkupViewBlocks(blocks: readonly FlowBlock[], { positionMap, changeBarRanges }: MarkupViewFlowOptions): FlowBlock[];
19
+ //#endregion
20
+ export { MarkupViewFlowOptions, remapMarkupViewBlocks };