@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,567 @@
1
+ import { normalizeHorizontalScalePercent } from "../utils/horizontalScale.js";
2
+ import { mergeTextFormatting } from "../utils/textFormattingMerge.js";
3
+ import { expectCharacterSpacingMarkAttrs, expectCharacterStyleMarkAttrs, expectEmphasisMarkAttrs, expectFontFamilyMarkAttrs, expectFontSizeMarkAttrs, expectHighlightMarkAttrs, expectLanguageMarkAttrs, expectRunFormattingOverrideMarkAttrs, expectRunShadingMarkAttrs, expectStrikeMarkAttrs, expectTextColorMarkAttrs, expectTextEffectMarkAttrs, expectUnderlineMarkAttrs } from "./attrs/index.js";
4
+ import { runShadingAttrsToShading, shadingToRunShadingAttrs } from "./conversion/runShadingMark.js";
5
+ import { applyRunFormattingOverrideAttrs, buildRunFormattingOverrideAttrs } from "./extensions/marks/RunFormattingOverrideExtension.js";
6
+ import { authoredRunFormattingFromAttrs, hasAuthoredRunFormattingProvenance } from "./runFormattingProvenance.js";
7
+ import { paragraphFormattingForRun, resolveEffectiveRunStyleFormatting, suppressParagraphMarkFormatting } from "./runStyleFormatting.js";
8
+ //#region src/prosemirror/runFormattingFromMarks.ts
9
+ const RUN_FORMATTING_VISUAL_GROUPS = {
10
+ bold: "bold",
11
+ boldCs: null,
12
+ italic: "italic",
13
+ italicCs: null,
14
+ underline: "underline",
15
+ strike: "strike",
16
+ doubleStrike: "strike",
17
+ vertAlign: "vertAlign",
18
+ smallCaps: "smallCaps",
19
+ allCaps: "allCaps",
20
+ hidden: "hidden",
21
+ noProof: null,
22
+ color: "color",
23
+ highlight: "highlight",
24
+ shading: "shading",
25
+ fontSize: "fontSize",
26
+ fontSizeCs: null,
27
+ fontFamily: "fontFamily",
28
+ language: "language",
29
+ spacing: "characterSpacing",
30
+ position: "characterSpacing",
31
+ scale: "characterSpacing",
32
+ kerning: "characterSpacing",
33
+ effect: "effect",
34
+ emphasisMark: "emphasisMark",
35
+ emboss: "emboss",
36
+ imprint: "imprint",
37
+ outline: "outline",
38
+ shadow: "shadow",
39
+ rtl: "rtl",
40
+ cs: null,
41
+ styleId: null,
42
+ preserved: null
43
+ };
44
+ const RUN_FORMATTING_FAST_PATH_DISPOSITION = {
45
+ bold: "visual",
46
+ boldCs: "structural",
47
+ italic: "visual",
48
+ italicCs: "structural",
49
+ underline: "visual",
50
+ strike: "visual",
51
+ doubleStrike: "visual",
52
+ vertAlign: "visual",
53
+ smallCaps: "visual",
54
+ allCaps: "visual",
55
+ hidden: "visual",
56
+ noProof: "structural",
57
+ color: "visual",
58
+ highlight: "visual",
59
+ shading: "visual",
60
+ fontSize: "visual",
61
+ fontSizeCs: "structural",
62
+ fontFamily: "visual",
63
+ language: "visual",
64
+ spacing: "visual",
65
+ position: "visual",
66
+ scale: "visual",
67
+ kerning: "visual",
68
+ effect: "visual",
69
+ emphasisMark: "visual",
70
+ emboss: "visual",
71
+ imprint: "visual",
72
+ outline: "visual",
73
+ shadow: "visual",
74
+ rtl: "visual",
75
+ cs: "structural",
76
+ styleId: "character-style",
77
+ preserved: "structural"
78
+ };
79
+ const hasOnlyCarrierlessVisualFormatting = (formatting) => {
80
+ for (const property of Object.keys(formatting)) if (RUN_FORMATTING_FAST_PATH_DISPOSITION[property] !== "visual") return false;
81
+ return true;
82
+ };
83
+ const visibleUnderline = (formatting) => {
84
+ const underline = formatting?.underline;
85
+ return underline?.style === "none" ? void 0 : underline;
86
+ };
87
+ const visibleStrike = (formatting) => {
88
+ if (formatting?.doubleStrike === true) return "double";
89
+ return formatting?.strike === true ? "single" : void 0;
90
+ };
91
+ const visibleColor = (formatting) => formatting?.color?.auto === true ? void 0 : formatting?.color;
92
+ const visibleValue = (value) => value === "none" ? void 0 : value;
93
+ /**
94
+ * Compare the exact presentation encoded by PM run marks without allocating the
95
+ * intermediate maps used by reconciliation. Non-visual authored state is
96
+ * deliberately absent here: the carrierless fast path below excludes every
97
+ * structural carrier before calling this predicate.
98
+ */
99
+ const sameVisualFormatting = (left, right) => {
100
+ if (left?.bold === true !== (right?.bold === true) || left?.italic === true !== (right?.italic === true) || !sameFormattingValue(visibleUnderline(left), visibleUnderline(right)) || visibleStrike(left) !== visibleStrike(right) || !sameFormattingValue(visibleColor(left), visibleColor(right)) || visibleValue(left?.highlight) !== visibleValue(right?.highlight) || (left?.fontSize || void 0) !== (right?.fontSize || void 0) || !sameFormattingValue(left?.fontFamily, right?.fontFamily) || !sameFormattingValue(left?.language, right?.language) || (left?.vertAlign === "superscript" || left?.vertAlign === "subscript" ? left.vertAlign : void 0) !== (right?.vertAlign === "superscript" || right?.vertAlign === "subscript" ? right.vertAlign : void 0) || left?.allCaps === true !== (right?.allCaps === true) || left?.smallCaps === true !== (right?.smallCaps === true) || left?.hidden === true !== (right?.hidden === true) || left?.emboss === true !== (right?.emboss === true) || left?.imprint === true !== (right?.imprint === true) || left?.shadow === true !== (right?.shadow === true) || left?.outline === true !== (right?.outline === true) || left?.rtl === true !== (right?.rtl === true) || (typeof left?.spacing === "number" ? left.spacing : null) !== (typeof right?.spacing === "number" ? right.spacing : null) || (typeof left?.position === "number" ? left.position : null) !== (typeof right?.position === "number" ? right.position : null) || (normalizeHorizontalScalePercent(left?.scale) ?? null) !== (normalizeHorizontalScalePercent(right?.scale) ?? null) || (typeof left?.kerning === "number" ? left.kerning : null) !== (typeof right?.kerning === "number" ? right.kerning : null) || visibleValue(left?.effect) !== visibleValue(right?.effect) || visibleValue(left?.emphasisMark) !== visibleValue(right?.emphasisMark)) return false;
101
+ return sameFormattingValue(shadingToRunShadingAttrs(left?.shading), shadingToRunShadingAttrs(right?.shading));
102
+ };
103
+ const visualFormattingGroups = (formatting) => {
104
+ const groups = /* @__PURE__ */ new Map();
105
+ if (!formatting) return groups;
106
+ if (formatting.bold) groups.set("bold", true);
107
+ if (formatting.italic) groups.set("italic", true);
108
+ if (formatting.underline && formatting.underline.style !== "none") groups.set("underline", {
109
+ style: formatting.underline.style || "single",
110
+ ...formatting.underline.color ? { color: formatting.underline.color } : {}
111
+ });
112
+ if (formatting.strike || formatting.doubleStrike) groups.set("strike", formatting.doubleStrike ? "double" : "single");
113
+ if (formatting.color && !formatting.color.auto) {
114
+ const { rgb, themeColor, themeTint, themeShade } = formatting.color;
115
+ groups.set("color", {
116
+ ...rgb ? { rgb } : {},
117
+ ...themeColor ? { themeColor } : {},
118
+ ...themeTint ? { themeTint } : {},
119
+ ...themeShade ? { themeShade } : {}
120
+ });
121
+ }
122
+ if (formatting.highlight && formatting.highlight !== "none") groups.set("highlight", formatting.highlight);
123
+ const shadingAttrs = shadingToRunShadingAttrs(formatting.shading);
124
+ if (shadingAttrs) groups.set("shading", runShadingAttrsToShading(shadingAttrs));
125
+ if (formatting.fontSize) groups.set("fontSize", formatting.fontSize);
126
+ if (formatting.fontFamily) {
127
+ const { ascii, hAnsi, eastAsia, cs, hint, asciiTheme, hAnsiTheme, eastAsiaTheme, csTheme } = formatting.fontFamily;
128
+ groups.set("fontFamily", {
129
+ ...ascii ? { ascii } : {},
130
+ ...hAnsi ? { hAnsi } : {},
131
+ ...eastAsia ? { eastAsia } : {},
132
+ ...cs ? { cs } : {},
133
+ ...hint ? { hint } : {},
134
+ ...asciiTheme ? { asciiTheme } : {},
135
+ ...hAnsiTheme ? { hAnsiTheme } : {},
136
+ ...eastAsiaTheme ? { eastAsiaTheme } : {},
137
+ ...csTheme ? { csTheme } : {}
138
+ });
139
+ }
140
+ if (formatting.language) {
141
+ const { val, eastAsia, bidi } = formatting.language;
142
+ groups.set("language", {
143
+ ...val ? { val } : {},
144
+ ...eastAsia ? { eastAsia } : {},
145
+ ...bidi ? { bidi } : {}
146
+ });
147
+ }
148
+ if (formatting.vertAlign === "superscript" || formatting.vertAlign === "subscript") groups.set("vertAlign", formatting.vertAlign);
149
+ for (const [property, group] of [
150
+ ["allCaps", "allCaps"],
151
+ ["smallCaps", "smallCaps"],
152
+ ["hidden", "hidden"],
153
+ ["emboss", "emboss"],
154
+ ["imprint", "imprint"],
155
+ ["shadow", "shadow"],
156
+ ["outline", "outline"],
157
+ ["rtl", "rtl"]
158
+ ]) if (formatting[property]) groups.set(group, true);
159
+ const spacing = typeof formatting.spacing === "number" ? formatting.spacing : null;
160
+ const position = typeof formatting.position === "number" ? formatting.position : null;
161
+ const scale = normalizeHorizontalScalePercent(formatting.scale) ?? null;
162
+ const kerning = typeof formatting.kerning === "number" ? formatting.kerning : null;
163
+ if (spacing !== null || position !== null || scale !== null || kerning !== null) groups.set("characterSpacing", {
164
+ spacing,
165
+ position,
166
+ scale,
167
+ kerning
168
+ });
169
+ if (formatting.effect && formatting.effect !== "none") groups.set("effect", formatting.effect);
170
+ if (formatting.emphasisMark && formatting.emphasisMark !== "none") groups.set("emphasisMark", formatting.emphasisMark);
171
+ return groups;
172
+ };
173
+ const expectedRunFormattingOverrideAttrs = (authoredFormatting) => {
174
+ const attrs = buildRunFormattingOverrideAttrs(authoredFormatting, {
175
+ type: "authored-baseline",
176
+ formatting: authoredFormatting
177
+ });
178
+ const hasDirectFormatting = Object.keys(authoredFormatting).some((property) => property !== "styleId");
179
+ if (!attrs && !hasDirectFormatting) return;
180
+ const expected = { ...attrs };
181
+ const directFontProperties = [
182
+ "color",
183
+ "fontFamily",
184
+ "fontSize"
185
+ ].filter((property) => authoredFormatting[property] !== void 0);
186
+ if (directFontProperties.length > 0) expected.directFontProperties = directFontProperties;
187
+ const complexScriptPropertyAbsences = [
188
+ ["bold", "boldCs"],
189
+ ["italic", "italicCs"],
190
+ ["fontSize", "fontSizeCs"]
191
+ ].filter(([ordinary, complex]) => authoredFormatting[ordinary] !== void 0 && authoredFormatting[complex] === void 0).map(([, complex]) => complex);
192
+ if (complexScriptPropertyAbsences.length > 0) expected.complexScriptPropertyAbsences = complexScriptPropertyAbsences;
193
+ return Object.keys(expected).length > 0 ? expected : void 0;
194
+ };
195
+ const changedVisualFormattingGroups = (observedFormatting, expectedFormatting) => {
196
+ const actual = visualFormattingGroups(observedFormatting);
197
+ const expected = visualFormattingGroups(expectedFormatting);
198
+ const changed = /* @__PURE__ */ new Set();
199
+ for (const group of /* @__PURE__ */ new Set([...actual.keys(), ...expected.keys()])) {
200
+ const actualValue = actual.get(group);
201
+ const expectedValue = expected.get(group);
202
+ if (!sameFormattingValue(actualValue, expectedValue)) changed.add(group);
203
+ }
204
+ return changed;
205
+ };
206
+ const VISUAL_BOOLEAN_FORMATTING_PROPERTIES = /* @__PURE__ */ new Set([
207
+ "allCaps",
208
+ "bold",
209
+ "doubleStrike",
210
+ "emboss",
211
+ "hidden",
212
+ "imprint",
213
+ "italic",
214
+ "outline",
215
+ "rtl",
216
+ "shadow",
217
+ "smallCaps",
218
+ "strike"
219
+ ]);
220
+ const fontFamilyDifference = (actual, inherited) => {
221
+ const difference = {};
222
+ for (const property of [
223
+ "ascii",
224
+ "hAnsi",
225
+ "eastAsia",
226
+ "cs",
227
+ "hint",
228
+ "asciiTheme",
229
+ "hAnsiTheme",
230
+ "eastAsiaTheme",
231
+ "csTheme"
232
+ ]) {
233
+ const value = actual[property];
234
+ if (value !== void 0 && value !== inherited?.[property]) Reflect.set(difference, property, value);
235
+ }
236
+ return Object.keys(difference).length > 0 ? difference : void 0;
237
+ };
238
+ const DIRECT_OVERRIDE_FORMATTING_PROPERTIES = [
239
+ "allCaps",
240
+ "bold",
241
+ "boldCs",
242
+ "cs",
243
+ "doubleStrike",
244
+ "emboss",
245
+ "fontSizeCs",
246
+ "hidden",
247
+ "noProof",
248
+ "imprint",
249
+ "italic",
250
+ "italicCs",
251
+ "outline",
252
+ "rtl",
253
+ "shadow",
254
+ "smallCaps",
255
+ "strike",
256
+ "underline"
257
+ ];
258
+ const POSITIVE_OVERRIDE_PROPERTIES_REPRESENTED_BY_VISUAL_MARKS = /* @__PURE__ */ new Set([
259
+ "allCaps",
260
+ "emboss",
261
+ "hidden",
262
+ "imprint",
263
+ "outline",
264
+ "rtl",
265
+ "shadow",
266
+ "smallCaps",
267
+ "strike"
268
+ ]);
269
+ const setFormattingFromOverrideSignal = (formatting, property, value) => {
270
+ Reflect.deleteProperty(formatting, property);
271
+ if (value === void 0) return;
272
+ if (property === "underline") {
273
+ formatting.underline = { style: "none" };
274
+ return;
275
+ }
276
+ Reflect.set(formatting, property, value);
277
+ };
278
+ const sameFormattingValue = (left, right) => {
279
+ if (left === right) return true;
280
+ if (typeof left !== "object" || left === null || typeof right !== "object" || right === null) return false;
281
+ if (Array.isArray(left) || Array.isArray(right)) {
282
+ if (!Array.isArray(left) || !Array.isArray(right) || left.length !== right.length) return false;
283
+ return left.every((value, index) => sameFormattingValue(value, right[index]));
284
+ }
285
+ const leftKeys = Object.keys(left);
286
+ const rightKeys = Object.keys(right);
287
+ if (leftKeys.length !== rightKeys.length) return false;
288
+ return leftKeys.every((key) => Object.prototype.hasOwnProperty.call(right, key) && sameFormattingValue(Reflect.get(left, key), Reflect.get(right, key)));
289
+ };
290
+ const reconcileOverrideSignals = (formatting, current, expected, inheritedFormatting, observedFormatting) => {
291
+ for (const property of DIRECT_OVERRIDE_FORMATTING_PROPERTIES) {
292
+ if (sameFormattingValue(current?.[property], expected?.[property])) continue;
293
+ if (current?.[property] === void 0 && expected?.[property] === true && POSITIVE_OVERRIDE_PROPERTIES_REPRESENTED_BY_VISUAL_MARKS.has(property)) continue;
294
+ if (current && hasAuthoredRunFormattingProvenance(current) && expected?.[property] === void 0 && sameFormattingValue(current[property], inheritedFormatting?.[property])) continue;
295
+ setFormattingFromOverrideSignal(formatting, property, current?.[property]);
296
+ }
297
+ for (const property of [
298
+ "color",
299
+ "fontFamily",
300
+ "fontSize"
301
+ ]) {
302
+ const currentIsDirect = current?.directFontProperties?.includes(property) === true;
303
+ if (currentIsDirect === (expected?.directFontProperties?.includes(property) === true)) continue;
304
+ if (!currentIsDirect) {
305
+ Reflect.deleteProperty(formatting, property);
306
+ continue;
307
+ }
308
+ const observed = observedFormatting[property];
309
+ if (observed !== void 0) Reflect.set(formatting, property, observed);
310
+ }
311
+ for (const property of [
312
+ "boldCs",
313
+ "italicCs",
314
+ "fontSizeCs"
315
+ ]) {
316
+ const currentIsAbsent = current?.complexScriptPropertyAbsences?.includes(property) === true;
317
+ if (currentIsAbsent !== (expected?.complexScriptPropertyAbsences?.includes(property) === true) && currentIsAbsent) Reflect.deleteProperty(formatting, property);
318
+ }
319
+ };
320
+ /**
321
+ * Reconcile source-authored provenance with the current visual mark set at the
322
+ * one save boundary shared by editor commands, raw transactions and compare.
323
+ * Unchanged groups keep exact source state (including equal direct values and
324
+ * otherwise invisible sentinels); changed groups derive the smallest direct
325
+ * override needed relative to the current style cascade.
326
+ */
327
+ const reconcileAuthoredFormatting = ({ authoredFormatting, carrierlessContext, currentOverrideAttrs, inheritedFormatting, observedFormatting }) => {
328
+ const hasAuthoredFormatting = Object.keys(authoredFormatting).length > 0;
329
+ if (carrierlessContext === "ordinary" && currentOverrideAttrs === void 0 && !hasAuthoredFormatting && hasOnlyCarrierlessVisualFormatting(observedFormatting)) {
330
+ if (sameVisualFormatting(observedFormatting, inheritedFormatting)) return authoredFormatting;
331
+ if (observedFormatting.fontFamily === void 0 && sameVisualFormatting(inheritedFormatting, void 0)) return observedFormatting;
332
+ }
333
+ const expectedFormatting = hasAuthoredFormatting ? mergeTextFormatting(inheritedFormatting, authoredFormatting) : inheritedFormatting;
334
+ const changedGroups = changedVisualFormattingGroups(observedFormatting, expectedFormatting);
335
+ const reconciled = { ...authoredFormatting };
336
+ for (const property of Object.keys(RUN_FORMATTING_VISUAL_GROUPS)) {
337
+ const group = RUN_FORMATTING_VISUAL_GROUPS[property];
338
+ if (group === null || !changedGroups.has(group)) continue;
339
+ Reflect.deleteProperty(reconciled, property);
340
+ if (VISUAL_BOOLEAN_FORMATTING_PROPERTIES.has(property)) {
341
+ const observed = observedFormatting[property] === true;
342
+ if (observed !== (inheritedFormatting?.[property] === true)) Reflect.set(reconciled, property, observed);
343
+ continue;
344
+ }
345
+ const observed = observedFormatting[property];
346
+ if (observed === void 0) continue;
347
+ if (property === "fontFamily") {
348
+ const difference = fontFamilyDifference(observed, inheritedFormatting?.fontFamily);
349
+ if (difference) reconciled.fontFamily = difference;
350
+ continue;
351
+ }
352
+ if (!sameFormattingValue(observed, inheritedFormatting?.[property])) Reflect.set(reconciled, property, observed);
353
+ }
354
+ if (currentOverrideAttrs !== void 0) reconcileOverrideSignals(reconciled, currentOverrideAttrs, expectedRunFormattingOverrideAttrs(authoredFormatting), inheritedFormatting, observedFormatting);
355
+ return reconciled;
356
+ };
357
+ const formattingAuthorshipCost = (formatting) => {
358
+ let cost = 0;
359
+ const visit = (value) => {
360
+ if (value === void 0) return;
361
+ if (value === null || typeof value !== "object") {
362
+ cost++;
363
+ return;
364
+ }
365
+ const entries = Object.entries(value);
366
+ if (entries.length === 0) {
367
+ cost++;
368
+ return;
369
+ }
370
+ for (const [, nested] of entries) visit(nested);
371
+ };
372
+ for (const [property, value] of Object.entries(formatting)) if (property !== "styleId") visit(value);
373
+ return cost;
374
+ };
375
+ function marksToTextFormatting(marks, options) {
376
+ const formatting = {};
377
+ let directOverrideFormatting;
378
+ let directFontProperties;
379
+ let characterStyleId;
380
+ let runFormattingOverrideMark;
381
+ let currentOverrideAttrs;
382
+ for (const mark of marks) switch (mark.type.name) {
383
+ case "bold":
384
+ formatting.bold = true;
385
+ break;
386
+ case "italic":
387
+ formatting.italic = true;
388
+ break;
389
+ case "underline": {
390
+ const attrs = expectUnderlineMarkAttrs(mark);
391
+ const uline = { style: attrs.style || "single" };
392
+ if (attrs.color) uline.color = attrs.color;
393
+ formatting.underline = uline;
394
+ break;
395
+ }
396
+ case "strike":
397
+ if (expectStrikeMarkAttrs(mark).double) formatting.doubleStrike = true;
398
+ else formatting.strike = true;
399
+ break;
400
+ case "textColor": {
401
+ const attrs = expectTextColorMarkAttrs(mark);
402
+ const colorVal = {};
403
+ if (attrs.rgb) colorVal.rgb = attrs.rgb;
404
+ if (attrs.themeColor) colorVal.themeColor = attrs.themeColor;
405
+ if (attrs.themeTint) colorVal.themeTint = attrs.themeTint;
406
+ if (attrs.themeShade) colorVal.themeShade = attrs.themeShade;
407
+ formatting.color = colorVal;
408
+ break;
409
+ }
410
+ case "highlight":
411
+ formatting.highlight = expectHighlightMarkAttrs(mark).color;
412
+ break;
413
+ case "runShading":
414
+ formatting.shading = runShadingAttrsToShading(expectRunShadingMarkAttrs(mark));
415
+ break;
416
+ case "fontSize":
417
+ formatting.fontSize = expectFontSizeMarkAttrs(mark).size;
418
+ break;
419
+ case "fontFamily": {
420
+ const attrs = expectFontFamilyMarkAttrs(mark);
421
+ const ff = {};
422
+ if (attrs.ascii) ff.ascii = attrs.ascii;
423
+ if (attrs.hAnsi) ff.hAnsi = attrs.hAnsi;
424
+ if (attrs.eastAsia) ff.eastAsia = attrs.eastAsia;
425
+ if (attrs.hint) ff.hint = attrs.hint;
426
+ if (attrs.cs) ff.cs = attrs.cs;
427
+ if (attrs.asciiTheme) ff.asciiTheme = attrs.asciiTheme;
428
+ if (attrs.hAnsiTheme) ff.hAnsiTheme = attrs.hAnsiTheme;
429
+ if (attrs.eastAsiaTheme) ff.eastAsiaTheme = attrs.eastAsiaTheme;
430
+ if (attrs.csTheme) ff.csTheme = attrs.csTheme;
431
+ formatting.fontFamily = ff;
432
+ break;
433
+ }
434
+ case "language": {
435
+ const attrs = expectLanguageMarkAttrs(mark);
436
+ formatting.language = {
437
+ ...attrs.val ? { val: attrs.val } : {},
438
+ ...attrs.eastAsia ? { eastAsia: attrs.eastAsia } : {},
439
+ ...attrs.bidi ? { bidi: attrs.bidi } : {}
440
+ };
441
+ break;
442
+ }
443
+ case "superscript":
444
+ formatting.vertAlign = "superscript";
445
+ break;
446
+ case "subscript":
447
+ formatting.vertAlign = "subscript";
448
+ break;
449
+ case "allCaps":
450
+ formatting.allCaps = true;
451
+ break;
452
+ case "smallCaps":
453
+ formatting.smallCaps = true;
454
+ break;
455
+ case "characterSpacing": {
456
+ const attrs = expectCharacterSpacingMarkAttrs(mark);
457
+ if (attrs.spacing !== void 0) formatting.spacing = attrs.spacing;
458
+ if (attrs.position !== void 0) formatting.position = attrs.position;
459
+ const horizontalScale = normalizeHorizontalScalePercent(attrs.scale);
460
+ if (horizontalScale !== void 0) formatting.scale = horizontalScale;
461
+ if (attrs.kerning !== void 0) formatting.kerning = attrs.kerning;
462
+ break;
463
+ }
464
+ case "emboss":
465
+ formatting.emboss = true;
466
+ break;
467
+ case "imprint":
468
+ formatting.imprint = true;
469
+ break;
470
+ case "hidden":
471
+ formatting.hidden = true;
472
+ break;
473
+ case "textShadow":
474
+ formatting.shadow = true;
475
+ break;
476
+ case "emphasisMark":
477
+ formatting.emphasisMark = expectEmphasisMarkAttrs(mark).type || "dot";
478
+ break;
479
+ case "textOutline":
480
+ formatting.outline = true;
481
+ break;
482
+ case "rtl":
483
+ formatting.rtl = true;
484
+ break;
485
+ case "textEffect":
486
+ formatting.effect = expectTextEffectMarkAttrs(mark).effect;
487
+ break;
488
+ case "runFormattingOverride":
489
+ runFormattingOverrideMark = mark;
490
+ break;
491
+ case "characterStyle": {
492
+ const attrs = expectCharacterStyleMarkAttrs(mark);
493
+ formatting.styleId = attrs.styleId;
494
+ characterStyleId = attrs.styleId;
495
+ break;
496
+ }
497
+ default: break;
498
+ }
499
+ let authoredFormatting = {};
500
+ if (runFormattingOverrideMark) {
501
+ const overrideAttrs = expectRunFormattingOverrideMarkAttrs(runFormattingOverrideMark);
502
+ currentOverrideAttrs = overrideAttrs;
503
+ directFontProperties = overrideAttrs.directFontProperties;
504
+ directOverrideFormatting = {};
505
+ applyRunFormattingOverrideAttrs(directOverrideFormatting, overrideAttrs);
506
+ for (const property of directFontProperties ?? []) {
507
+ const value = formatting[property];
508
+ if (value !== void 0) Reflect.set(directOverrideFormatting, property, value);
509
+ }
510
+ authoredFormatting = authoredRunFormattingFromAttrs(overrideAttrs) ?? directOverrideFormatting;
511
+ }
512
+ if (characterStyleId !== void 0 && !options?.styleResolver) {
513
+ const conservativeFormatting = mergeTextFormatting(formatting, directOverrideFormatting) ?? {};
514
+ for (const property of currentOverrideAttrs?.complexScriptPropertyAbsences ?? []) Reflect.deleteProperty(conservativeFormatting, property);
515
+ return {
516
+ ...conservativeFormatting,
517
+ styleId: characterStyleId
518
+ };
519
+ }
520
+ const inheritedFormatting = resolveEffectiveRunStyleFormatting({
521
+ marks,
522
+ paragraphFormatting: paragraphFormattingForRun({
523
+ context: {
524
+ baseParagraphFormatting: options?.baseParagraphFormatting,
525
+ paragraphFormatting: options?.inheritedFormatting,
526
+ paragraphMarkFormatting: options?.paragraphMarkFormatting,
527
+ paragraphMarkPrecedesStyle: options?.paragraphMarkPrecedesStyle ?? false
528
+ },
529
+ directFormatting: authoredFormatting,
530
+ marks
531
+ }),
532
+ ...options?.styleResolver !== void 0 ? { styleResolver: options.styleResolver } : {}
533
+ });
534
+ let reconciled = reconcileAuthoredFormatting({
535
+ authoredFormatting,
536
+ carrierlessContext: options?.paragraphMarkFormatting === void 0 ? "ordinary" : "paragraph-mark",
537
+ currentOverrideAttrs,
538
+ inheritedFormatting,
539
+ observedFormatting: formatting
540
+ });
541
+ if (runFormattingOverrideMark === void 0 && characterStyleId === void 0 && options?.paragraphMarkFormatting !== void 0) {
542
+ const suppressedInheritedFormatting = resolveEffectiveRunStyleFormatting({
543
+ marks,
544
+ paragraphFormatting: suppressParagraphMarkFormatting({
545
+ baseFormatting: options.baseParagraphFormatting,
546
+ directFormatting: authoredFormatting,
547
+ paragraphMarkFormatting: options.paragraphMarkFormatting,
548
+ paragraphMarkPrecedesStyle: options.paragraphMarkPrecedesStyle ?? false
549
+ }),
550
+ ...options.styleResolver !== void 0 ? { styleResolver: options.styleResolver } : {}
551
+ });
552
+ const suppressed = reconcileAuthoredFormatting({
553
+ authoredFormatting,
554
+ carrierlessContext: "paragraph-mark",
555
+ currentOverrideAttrs,
556
+ inheritedFormatting: suppressedInheritedFormatting,
557
+ observedFormatting: formatting
558
+ });
559
+ if (formattingAuthorshipCost(suppressed) < formattingAuthorshipCost(reconciled)) reconciled = suppressed;
560
+ }
561
+ return {
562
+ ...reconciled,
563
+ ...characterStyleId !== void 0 ? { styleId: characterStyleId } : {}
564
+ };
565
+ }
566
+ //#endregion
567
+ export { marksToTextFormatting, sameFormattingValue };
@@ -1,5 +1,5 @@
1
- import { Transaction } from "prosemirror-state";
2
1
  import { Mark, Node } from "prosemirror-model";
2
+ import { Transaction } from "prosemirror-state";
3
3
  //#region src/prosemirror/runFormattingInlineCarriers.d.ts
4
4
  type RunFormattingInlineAtomDisposition = "break-run" | "field-run" | "not-a-run" | "page-break-carrier" | "preserved-xml-run" | "structured-field" | "symbol-run" | "tab-run" | "text-run";
5
5
  /**
@@ -1,10 +1,9 @@
1
1
  import { mergeTextFormatting } from "../utils/textFormattingMerge.js";
2
2
  import { expectCharacterStyleMarkAttrs } from "./attrs/index.js";
3
- import { marksToTextFormatting } from "./conversion/fromProseDoc.js";
4
3
  import { textFormattingToMarks } from "./extensions/marks/markUtils.js";
4
+ import { marksToTextFormatting } from "./runFormattingFromMarks.js";
5
5
  import { RUN_FORMATTING_MARK_NAMES } from "./runFormattingMarkNames.js";
6
6
  import { getParagraphMarkSuppressionOverrides, hasDirectRunFormatting, paragraphFormattingForRun, resolveEffectiveRunStyleFormatting } from "./runStyleFormatting.js";
7
- import { schema } from "./schema/index.js";
8
7
  import { Mark } from "prosemirror-model";
9
8
  //#region src/prosemirror/runFormattingReconciliation.ts
10
9
  /** Read authored run properties without confusing inherited visuals for direct formatting. */
@@ -33,16 +32,18 @@ const reconcileRunFormattingMarks = ({ authoredFormatting, context, node, styleR
33
32
  context,
34
33
  directFormatting: authoredFormatting
35
34
  });
36
- const formattingMarks = textFormattingToMarks(mergeTextFormatting(resolveEffectiveRunStyleFormatting({
35
+ const effectiveFormatting = mergeTextFormatting(resolveEffectiveRunStyleFormatting({
37
36
  marks: styleResolutionMarks,
38
37
  paragraphFormatting,
39
38
  ...styleResolver !== void 0 ? { styleResolver } : {}
40
- }), authoredFormatting), schema, {
41
- overrideFormatting: mergeTextFormatting(getParagraphMarkSuppressionOverrides({
42
- directFormatting: authoredFormatting,
43
- paragraphMarkFormatting: context.paragraphMarkFormatting,
44
- suppressedFormatting: paragraphFormatting
45
- }), authoredFormatting),
39
+ }), authoredFormatting);
40
+ const overrideFormatting = mergeTextFormatting(getParagraphMarkSuppressionOverrides({
41
+ directFormatting: authoredFormatting,
42
+ paragraphMarkFormatting: context.paragraphMarkFormatting,
43
+ suppressedFormatting: paragraphFormatting
44
+ }), authoredFormatting);
45
+ const formattingMarks = textFormattingToMarks(effectiveFormatting, node.type.schema, {
46
+ overrideFormatting,
46
47
  directFormatting: authoredFormatting
47
48
  });
48
49
  return Mark.setFrom([
@@ -1,5 +1,5 @@
1
1
  import { CharacterSpacingAttrs, CharacterStyleAttrs, CommentAttrs, EmphasisMarkAttrs, FontFamilyAttrs, FontSizeAttrs, FootnoteRefAttrs, HighlightAttrs, HyperlinkAttrs, InlineWrapperAttrs, InlineWrapperKind, InlineWrapperLayer, LanguageAttrs, RunFormattingOverrideAttrs, RunIdentityMarkAttrs, RunPropertyChangeMarkAttrs, RunShadingAttrs, StrikeAttrs, TextColorAttrs, TextEffectAttrs, TrackedChangeMarkAttrs, TrackedRevisionAncestor, UnderlineAttrs } from "./marks.js";
2
- import { BlockSdtAttrs, BookmarkBoundaryAttrs, FieldAttrs, HardBreakAttrs, ImageAttrs, ImagePositionAttrs, MathAttrs, PageBreakRunAttrs, ParagraphAttrs, ParagraphPropertyChangeAttrs, PreservedBlockAttrs, PreservedXmlAttrs, PreservedXmlLevel, SdtAttrs, ShapeAttrs, SymbolAttrs, TabAttrs, TableAttrs, TableCellAttrs, TableRowAttrs, TextBoxAttrs } from "./nodes.js";
2
+ import { BlockCustomXmlAttrs, BlockSdtAttrs, BookmarkBoundaryAttrs, FieldAttrs, HardBreakAttrs, ImageAttrs, ImagePositionAttrs, MathAttrs, PageBreakRunAttrs, ParagraphAttrs, ParagraphPropertyChangeAttrs, PreservedBlockAttrs, PreservedXmlAttrs, PreservedXmlLevel, SdtAttrs, ShapeAttrs, SymbolAttrs, TabAttrs, TableAttrs, TableCellAttrs, TableRowAttrs, TextBoxAttrs } from "./nodes.js";
3
3
  import { ExtensionManager } from "../extensions/ExtensionManager.js";
4
4
  //#region src/prosemirror/schema/index.d.ts
5
5
  declare const singletonManager: ExtensionManager;
@@ -11,4 +11,4 @@ type DocxSchema = typeof schema;
11
11
  type DocxNode = ReturnType<typeof schema.node>;
12
12
  type DocxMark = ReturnType<typeof schema.mark>;
13
13
  //#endregion
14
- export { type BlockSdtAttrs, type BookmarkBoundaryAttrs, type CharacterSpacingAttrs, type CharacterStyleAttrs, type CommentAttrs, DocxMark, DocxNode, DocxSchema, type EmphasisMarkAttrs, type FieldAttrs, type FontFamilyAttrs, type FontSizeAttrs, type FootnoteRefAttrs, type HardBreakAttrs, type HighlightAttrs, type HyperlinkAttrs, type ImageAttrs, type ImagePositionAttrs, type InlineWrapperAttrs, type InlineWrapperKind, type InlineWrapperLayer, type LanguageAttrs, type MathAttrs, type PageBreakRunAttrs, type ParagraphAttrs, type ParagraphPropertyChangeAttrs, type PreservedBlockAttrs, type PreservedXmlAttrs, type PreservedXmlLevel, type RunFormattingOverrideAttrs, type RunIdentityMarkAttrs, type RunPropertyChangeMarkAttrs, type RunShadingAttrs, type SdtAttrs, type ShapeAttrs, type StrikeAttrs, type SymbolAttrs, type TabAttrs, type TableAttrs, type TableCellAttrs, type TableRowAttrs, type TextBoxAttrs, type TextColorAttrs, type TextEffectAttrs, type TrackedChangeMarkAttrs, type TrackedRevisionAncestor, type UnderlineAttrs, schema, singletonManager };
14
+ export { type BlockCustomXmlAttrs, type BlockSdtAttrs, type BookmarkBoundaryAttrs, type CharacterSpacingAttrs, type CharacterStyleAttrs, type CommentAttrs, DocxMark, DocxNode, DocxSchema, type EmphasisMarkAttrs, type FieldAttrs, type FontFamilyAttrs, type FontSizeAttrs, type FootnoteRefAttrs, type HardBreakAttrs, type HighlightAttrs, type HyperlinkAttrs, type ImageAttrs, type ImagePositionAttrs, type InlineWrapperAttrs, type InlineWrapperKind, type InlineWrapperLayer, type LanguageAttrs, type MathAttrs, type PageBreakRunAttrs, type ParagraphAttrs, type ParagraphPropertyChangeAttrs, type PreservedBlockAttrs, type PreservedXmlAttrs, type PreservedXmlLevel, type RunFormattingOverrideAttrs, type RunIdentityMarkAttrs, type RunPropertyChangeMarkAttrs, type RunShadingAttrs, type SdtAttrs, type ShapeAttrs, type StrikeAttrs, type SymbolAttrs, type TabAttrs, type TableAttrs, type TableCellAttrs, type TableRowAttrs, type TextBoxAttrs, type TextColorAttrs, type TextEffectAttrs, type TrackedChangeMarkAttrs, type TrackedRevisionAncestor, type UnderlineAttrs, schema, singletonManager };
@@ -53,6 +53,9 @@ const requiredCommands = completeCommandNames([
53
53
  "increaseListLevel",
54
54
  "decreaseListLevel",
55
55
  "removeList",
56
+ "restartNumbering",
57
+ "continueNumbering",
58
+ "setNumberingValue",
56
59
  "setSpaceBefore",
57
60
  "setSpaceAfter",
58
61
  "applyStyle",