@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,29 @@
1
+ import { document_d_exports } from "../types/document.js";
2
+ import { Node } from "prosemirror-model";
3
+ import { ValidateDocumentModelIssue } from "@stll/docx-core";
4
+ //#region src/ai-edits/result-validation.d.ts
5
+ /** What the story's package knows that the story itself does not. */
6
+ type FolioOperationResultValidationContext = {
7
+ /**
8
+ * The document's numbering definitions; `null` when the story states none,
9
+ * `undefined` when it cannot say (no numbering plugin), which leaves
10
+ * numbering references unchecked.
11
+ */
12
+ numbering: document_d_exports.NumberingDefinitions | null | undefined;
13
+ /** Comment ids the batch allocated; the host holds the comments themselves. */
14
+ createdCommentIds: readonly number[];
15
+ /**
16
+ * The author the host stamps on those comments, when the batch names one;
17
+ * the host writes the batch's author, so a blank one fails there too.
18
+ */
19
+ commentAuthor?: string;
20
+ };
21
+ /**
22
+ * The save-validator errors the batch introduced: errors in the changed window
23
+ * of `after` that the same window of `before` did not already report. Empty
24
+ * when the result is as saveable as the story it started from.
25
+ */
26
+ declare const findIntroducedModelErrors: (before: Node, after: Node, context: FolioOperationResultValidationContext) => ValidateDocumentModelIssue[];
27
+ declare const describeModelError: ({ path, message }: ValidateDocumentModelIssue) => string;
28
+ //#endregion
29
+ export { FolioOperationResultValidationContext, describeModelError, findIntroducedModelErrors };
@@ -0,0 +1,164 @@
1
+ import { validateFolioDocumentModel } from "../docx/modelValidation.js";
2
+ import { proseDocToBlocks } from "../prosemirror/conversion/fromProseDoc.js";
3
+ import { sectionPropertiesOf } from "../prosemirror/sectionCarrier.js";
4
+ import { anchoredCommentIdsInProseDoc } from "./comment-lifecycle.js";
5
+ import { Fragment } from "prosemirror-model";
6
+ //#region src/ai-edits/result-validation.ts
7
+ /**
8
+ * The check an operation batch's result passes before it is committed.
9
+ *
10
+ * An operation that reaches the document is a promise that the document can
11
+ * still be saved: the batch reports it as applied, issues a receipt and an
12
+ * undo handle, and the next thing the caller does may be `save()`. The model
13
+ * validator the save runs (`validateFolioDocumentModel`, the one
14
+ * `repackDocx` asserts) is therefore the judge here too, run on what the
15
+ * batch produced, while the batch can still be refused.
16
+ *
17
+ * Two constraints shape it:
18
+ *
19
+ * - Cost. Converting a whole story back to the model and validating it costs
20
+ * about as much as the apply itself on a long document. A batch only
21
+ * changes the top-level blocks it touched, and ProseMirror keeps every
22
+ * untouched child node by identity, so only the window between the first
23
+ * and the last changed child is converted and validated.
24
+ * - Blame. The apply layer holds the story, not the package: comments, notes
25
+ * and header/footer parts are the host's. A window can therefore report an
26
+ * error the batch did not cause (a comment the package defines, a range the
27
+ * window cuts). Only an error the same window did not already have before
28
+ * the batch counts; an error the document already carried is the
29
+ * document's, and refusing every later edit near it would help no one.
30
+ */
31
+ /**
32
+ * The top-level children that differ between two versions of one story,
33
+ * found by node identity from both ends. `null` when every child is shared.
34
+ */
35
+ const changedTopLevelWindow = (before, after) => {
36
+ if (before === after) return null;
37
+ const beforeCount = before.childCount;
38
+ const afterCount = after.childCount;
39
+ let from = 0;
40
+ while (from < beforeCount && from < afterCount && before.child(from) === after.child(from)) from += 1;
41
+ let beforeTo = beforeCount;
42
+ let afterTo = afterCount;
43
+ while (beforeTo > from && afterTo > from && before.child(beforeTo - 1) === after.child(afterTo - 1)) {
44
+ beforeTo -= 1;
45
+ afterTo -= 1;
46
+ }
47
+ if (from === beforeTo && from === afterTo) return null;
48
+ return {
49
+ from,
50
+ beforeTo,
51
+ afterTo
52
+ };
53
+ };
54
+ const TOP_LEVEL_PATH = /^package\.document\.content\[(\d+)\]/u;
55
+ /** Rebase a window-relative block path onto the story's own block index. */
56
+ const rebasePath = (path, offset) => path.replace(TOP_LEVEL_PATH, (_match, index) => `package.document.content[${String(Number(index) + offset)}]`);
57
+ const syntheticComment = (id, author) => ({
58
+ id,
59
+ author,
60
+ content: []
61
+ });
62
+ /** A story can identify its existing references even though the host owns the parts. */
63
+ const knownSectionParts = (doc) => {
64
+ const headers = /* @__PURE__ */ new Map();
65
+ const footers = /* @__PURE__ */ new Map();
66
+ doc.descendants((node) => {
67
+ if (node.type.name !== "paragraph") return true;
68
+ const section = sectionPropertiesOf(node);
69
+ for (const { rId, type } of section?.headerReferences ?? []) headers.set(rId, {
70
+ type: "header",
71
+ hdrFtrType: type,
72
+ content: []
73
+ });
74
+ for (const { rId, type } of section?.footerReferences ?? []) footers.set(rId, {
75
+ type: "footer",
76
+ hdrFtrType: type,
77
+ content: []
78
+ });
79
+ return false;
80
+ });
81
+ return {
82
+ headers,
83
+ footers
84
+ };
85
+ };
86
+ const windowErrors = ({ doc, from, to, context, knownParts, knownCommentIds }) => {
87
+ if (to <= from) return [];
88
+ const children = [];
89
+ for (let index = from; index < to; index += 1) children.push(doc.child(index));
90
+ let content;
91
+ try {
92
+ content = proseDocToBlocks(doc.copy(Fragment.fromArray(children)), []);
93
+ } catch (error) {
94
+ return [{
95
+ path: `package.document.content[${String(from)}]`,
96
+ message: `The content cannot be converted for saving: ${error instanceof Error ? error.message : String(error)}`,
97
+ severity: "error"
98
+ }];
99
+ }
100
+ return validateFolioDocumentModel({ package: {
101
+ document: {
102
+ content,
103
+ comments: [...[...knownCommentIds ?? []].map((id) => syntheticComment(id, "")), ...context.createdCommentIds.filter((id) => !knownCommentIds?.has(id)).map((id) => syntheticComment(id, context.commentAuthor ?? ""))]
104
+ },
105
+ ...context.numbering !== null && context.numbering !== void 0 && { numbering: context.numbering },
106
+ ...knownParts && {
107
+ headers: knownParts.headers,
108
+ footers: knownParts.footers
109
+ }
110
+ } }).issues.filter((issue) => issue.severity === "error" && !(context.numbering === void 0 && issue.path.endsWith(".numPr.numId"))).map(({ path, message, severity }) => ({
111
+ path: rebasePath(path, from),
112
+ message,
113
+ severity
114
+ }));
115
+ };
116
+ /**
117
+ * The save-validator errors the batch introduced: errors in the changed window
118
+ * of `after` that the same window of `before` did not already report. Empty
119
+ * when the result is as saveable as the story it started from.
120
+ */
121
+ const findIntroducedModelErrors = (before, after, context) => {
122
+ const window = changedTopLevelWindow(before, after);
123
+ if (window === null) return [];
124
+ let afterErrors = windowErrors({
125
+ doc: after,
126
+ from: window.from,
127
+ to: window.afterTo,
128
+ context
129
+ });
130
+ let parts;
131
+ if (afterErrors.some(({ message }) => message.startsWith("Section references missing "))) parts = knownSectionParts(before);
132
+ let knownCommentIds;
133
+ if (afterErrors.some(({ message }) => /^Comment \d+ is referenced but not present/u.test(message))) knownCommentIds = anchoredCommentIdsInProseDoc(before);
134
+ if (parts || knownCommentIds) afterErrors = windowErrors({
135
+ doc: after,
136
+ from: window.from,
137
+ to: window.afterTo,
138
+ context,
139
+ ...parts !== void 0 && { knownParts: parts },
140
+ ...knownCommentIds !== void 0 && { knownCommentIds }
141
+ });
142
+ if (afterErrors.length === 0) return afterErrors;
143
+ const known = /* @__PURE__ */ new Map();
144
+ for (const { message } of windowErrors({
145
+ doc: before,
146
+ from: window.from,
147
+ to: window.beforeTo,
148
+ context: {
149
+ ...context,
150
+ createdCommentIds: []
151
+ },
152
+ ...parts !== void 0 && { knownParts: parts },
153
+ ...knownCommentIds !== void 0 && { knownCommentIds }
154
+ })) known.set(message, (known.get(message) ?? 0) + 1);
155
+ return afterErrors.filter(({ message }) => {
156
+ const remaining = known.get(message) ?? 0;
157
+ if (remaining === 0) return true;
158
+ known.set(message, remaining - 1);
159
+ return false;
160
+ });
161
+ };
162
+ const describeModelError = ({ path, message }) => `The result would not save: ${path}: ${message}`;
163
+ //#endregion
164
+ export { describeModelError, findIntroducedModelErrors };
@@ -0,0 +1,17 @@
1
+ import { Transaction } from "prosemirror-state";
2
+ //#region src/ai-edits/revisionStretches.d.ts
3
+ type SeparateRevisionStretchesOptions = {
4
+ tr: Transaction;
5
+ revisionSeed: number;
6
+ };
7
+ type SeparatedRevisionStretches = {
8
+ nextRevisionId: number;
9
+ /** Each fresh id, with the revision whose stretch it now names. */
10
+ minted: {
11
+ revisionId: number;
12
+ from: number;
13
+ }[];
14
+ };
15
+ declare const separateRevisionStretches: ({ tr, revisionSeed }: SeparateRevisionStretchesOptions) => SeparatedRevisionStretches;
16
+ //#endregion
17
+ export { SeparatedRevisionStretches, separateRevisionStretches };
@@ -0,0 +1,80 @@
1
+ import { expectTrackedChangeMarkAttrs } from "../prosemirror/attrs/index.js";
2
+ //#region src/ai-edits/revisionStretches.ts
3
+ const INLINE_REVISION_MARKS = /* @__PURE__ */ new Set(["insertion", "deletion"]);
4
+ const separateRevisionStretches = ({ tr, revisionSeed }) => {
5
+ let nextRevisionId = revisionSeed;
6
+ const minted = [];
7
+ const retargets = [];
8
+ let stretches = /* @__PURE__ */ new Map();
9
+ tr.doc.descendants((node, pos) => {
10
+ if (node.isTextblock) {
11
+ stretches = /* @__PURE__ */ new Map();
12
+ return true;
13
+ }
14
+ if (!node.isInline || !(node.isLeaf || node.isText)) return true;
15
+ const layersOf = (mark) => {
16
+ const attrs = expectTrackedChangeMarkAttrs(mark);
17
+ return [...(attrs._docxRevisionAncestors ?? []).flatMap((ancestor) => ancestor.type === "insertion" || ancestor.type === "deletion" ? [{
18
+ kind: ancestor.type,
19
+ revisionId: ancestor.revisionId
20
+ }] : []), {
21
+ kind: mark.type.name,
22
+ revisionId: attrs.revisionId
23
+ }];
24
+ };
25
+ const revisionMarks = node.marks.filter((mark) => INLINE_REVISION_MARKS.has(mark.type.name) && expectTrackedChangeMarkAttrs(mark).moveKind === void 0);
26
+ const carried = new Set(revisionMarks.flatMap((mark) => layersOf(mark).map(({ kind, revisionId }) => `${kind}:${String(revisionId)}`)));
27
+ if (node.type.name !== "commentReference") {
28
+ for (const [key, stretch] of stretches) if (!carried.has(key)) stretch.interrupted = true;
29
+ }
30
+ for (const mark of revisionMarks) {
31
+ const ids = /* @__PURE__ */ new Map();
32
+ for (const { kind, revisionId } of layersOf(mark)) {
33
+ const key = `${kind}:${String(revisionId)}`;
34
+ let stretch = stretches.get(key);
35
+ if (!stretch) {
36
+ stretch = {
37
+ id: revisionId,
38
+ interrupted: false
39
+ };
40
+ stretches.set(key, stretch);
41
+ } else if (stretch.interrupted) {
42
+ const fresh = nextRevisionId++;
43
+ minted.push({
44
+ revisionId: fresh,
45
+ from: revisionId
46
+ });
47
+ stretch = {
48
+ id: fresh,
49
+ interrupted: false
50
+ };
51
+ stretches.set(key, stretch);
52
+ }
53
+ if (stretch.id !== revisionId) ids.set(revisionId, stretch.id);
54
+ }
55
+ if (ids.size > 0) retargets.push({
56
+ from: pos,
57
+ to: pos + node.nodeSize,
58
+ mark,
59
+ ids
60
+ });
61
+ }
62
+ return true;
63
+ });
64
+ for (const { from, to, mark, ids } of retargets) {
65
+ const attrs = expectTrackedChangeMarkAttrs(mark);
66
+ const ancestors = attrs._docxRevisionAncestors;
67
+ tr.removeMark(from, to, mark);
68
+ tr.addMark(from, to, mark.type.create({
69
+ ...mark.attrs,
70
+ revisionId: ids.get(attrs.revisionId) ?? attrs.revisionId,
71
+ ...ancestors && { _docxRevisionAncestors: ancestors.map((ancestor) => Object.assign(structuredClone(ancestor), { revisionId: ids.get(ancestor.revisionId) ?? ancestor.revisionId })) }
72
+ }));
73
+ }
74
+ return {
75
+ nextRevisionId,
76
+ minted
77
+ };
78
+ };
79
+ //#endregion
80
+ export { separateRevisionStretches };
@@ -1,4 +1,5 @@
1
1
  import { FolioAIBlock, FolioAIBlockStructuralBoundary, FolioAIEditSnapshot, FolioAITextRangeHandle } from "./types.js";
2
+ import { NoteReferenceLabels } from "./note-references.js";
2
3
  import { CleanBlockText } from "./clean-text.js";
3
4
  import { RunStyleResolver } from "../prosemirror/runStyleFormatting.js";
4
5
  import { Node } from "prosemirror-model";
@@ -67,10 +68,12 @@ declare const isFolioAIContentBlock: ({ text }: Pick<FolioAIBlock, "text">) => b
67
68
  declare const trailingBodyBlockId: ({ blocks }: FolioAIEditSnapshot) => string | null;
68
69
  declare const hashFolioAIBlockText: (text: string) => string;
69
70
  /**
70
- * Canonical public projection of the clean view's zero-width structure.
71
+ * Canonical public projection of the clean view's inline structure.
71
72
  *
72
73
  * A field boundary stays internal: it marks text the reader already sees, so it
73
- * belongs to range resolution rather than to a block's published structure.
74
+ * belongs to range resolution rather than to a block's published structure. A
75
+ * note reference is published: its marker reads like text, and a reader has to
76
+ * be able to tell it is not.
74
77
  */
75
78
  declare const projectFolioAIBlockStructuralBoundaries: ({ structuralBoundaries }: Pick<CleanBlockText, "structuralBoundaries">) => readonly FolioAIBlockStructuralBoundary[];
76
79
  /** Stable precondition fingerprint for a block's zero-width structure. */
@@ -90,6 +93,36 @@ declare const createFolioAITextRangeHandle: ({ blockId, text, startOffset, endOf
90
93
  * whole subtree, so a table nested inside a hidden row is hidden with it.
91
94
  */
92
95
  declare const isHiddenTableRow: (node: Node) => boolean;
96
+ /**
97
+ * The marker every footnote/endnote reference of a story reads as: numbered in
98
+ * reading order over the blocks {@link createFolioAIEditSnapshot} reads (a
99
+ * hidden row's references are as absent as its text), so the applier, the
100
+ * range resolvers and the snapshot all read the same text.
101
+ *
102
+ * The story is numbered on the first label asked for, not here: a reader
103
+ * whose walk meets no reference (most documents, and every revision-stats
104
+ * read) never pays for a second walk of the story.
105
+ */
106
+ declare const collectNoteReferenceLabels: (doc: Node) => NoteReferenceLabels;
107
+ /**
108
+ * @internal The markers a comparison reads a revised story's references as:
109
+ * each note the base story references keeps the base's marker, and a note
110
+ * only the revised story references is numbered after them.
111
+ *
112
+ * Each story's own reading-order numbering would renumber every later marker
113
+ * of the revised story as soon as a reference is added or removed before it,
114
+ * and a text comparison would then read a reference both stories keep as an
115
+ * edit of it. Numbering the revised story on from the base keeps a kept
116
+ * reference's marker identical, and makes a reference the comparison brings
117
+ * write the marker the base story (which the edits resolve against) gives it.
118
+ */
119
+ declare const alignedNoteReferenceLabels: (base: Node, revised: Node) => NoteReferenceLabels;
120
+ /**
121
+ * @internal The same snapshot with every note reference read through `labels`
122
+ * rather than the story's own numbering. Only the text and structural
123
+ * boundaries can change: block ids, anchors and the source document do not.
124
+ */
125
+ declare const relabelFolioAIEditSnapshotNoteReferences: (snapshot: FolioAIEditSnapshot, labels: NoteReferenceLabels) => FolioAIEditSnapshot;
93
126
  /** One table of a story, numbered the way {@link createFolioAIEditSnapshot} numbers it. */
94
127
  type FolioStoryTable = {
95
128
  /** Document-order index over every table, nested ones included. */
@@ -110,4 +143,4 @@ declare const createFolioAIEditSnapshot: (doc: Node) => FolioAIEditSnapshot;
110
143
  /** @internal Use for an EditorState that owns the document's style resolver. */
111
144
  declare const createFolioAIEditSnapshotWithStyleResolver: (doc: Node, styleResolver: RunStyleResolver | null) => FolioAIEditSnapshot;
112
145
  //#endregion
113
- export { FolioStoryTable, createFolioAIEditSnapshot, createFolioAIEditSnapshotWithStyleResolver, createFolioAITextRangeHandle, detachFolioAIEditSnapshotExternalHyperlinks, folioStoryTables, hashFolioAIBlockStructuralBoundaries, hashFolioAIBlockText, isFolioAIContentBlock, isHiddenTableRow, normalizeFolioAIBlockText, numberingReferenceKeysOf, projectFolioAIBlockStructuralBoundaries, remapFolioAIEditSnapshotNumberingReferences, remapFolioAIEditSnapshotStyleReferences, sourceDocumentOf, storyTablesOf, styleResolverOf, trailingBodyBlockId };
146
+ export { FolioStoryTable, alignedNoteReferenceLabels, collectNoteReferenceLabels, createFolioAIEditSnapshot, createFolioAIEditSnapshotWithStyleResolver, createFolioAITextRangeHandle, detachFolioAIEditSnapshotExternalHyperlinks, folioStoryTables, hashFolioAIBlockStructuralBoundaries, hashFolioAIBlockText, isFolioAIContentBlock, isHiddenTableRow, normalizeFolioAIBlockText, numberingReferenceKeysOf, projectFolioAIBlockStructuralBoundaries, relabelFolioAIEditSnapshotNoteReferences, remapFolioAIEditSnapshotNumberingReferences, remapFolioAIEditSnapshotStyleReferences, sourceDocumentOf, storyTablesOf, styleResolverOf, trailingBodyBlockId };