@stll/folio-core 0.52.0 → 0.53.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 (307) 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 +1519 -105
  4. package/dist/ai-edits/batch-claims.d.ts +130 -0
  5. package/dist/ai-edits/batch-claims.js +244 -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 +71 -7
  14. package/dist/ai-edits/headless.js +381 -41
  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 +1 -1
  26. package/dist/ai-edits/read.js +56 -43
  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/snapshot.d.ts +36 -3
  30. package/dist/ai-edits/snapshot.js +177 -23
  31. package/dist/ai-edits/table-cell-mutations.d.ts +1 -1
  32. package/dist/ai-edits/table-cell-mutations.js +4 -1
  33. package/dist/ai-edits/table-geometry.d.ts +1 -1
  34. package/dist/ai-edits/table-row-column-mutations.d.ts +38 -16
  35. package/dist/ai-edits/table-row-column-mutations.js +61 -26
  36. package/dist/ai-edits/types.d.ts +155 -16
  37. package/dist/compare/compare.d.ts +1 -1
  38. package/dist/compare/compare.js +65 -16
  39. package/dist/compare/content-alignment.js +13 -2
  40. package/dist/compare/content-types.d.ts +7 -0
  41. package/dist/compare/content.d.ts +4 -1
  42. package/dist/compare/content.js +6 -1
  43. package/dist/compare/formatting.js +2 -1
  44. package/dist/compare/inline-atoms.d.ts +21 -4
  45. package/dist/compare/inline-atoms.js +138 -16
  46. package/dist/compare/plan.js +10 -5
  47. package/dist/compare/scenario.js +14 -3
  48. package/dist/compare/section-boundary-properties.js +1 -1
  49. package/dist/compare/types.d.ts +4 -2
  50. package/dist/compare/types.js +2 -1
  51. package/dist/compare/verification.d.ts +1 -1
  52. package/dist/compare/verification.js +15 -3
  53. package/dist/controller/committedLayoutDiff.d.ts +25 -0
  54. package/dist/controller/committedLayoutDiff.js +71 -0
  55. package/dist/controller/contentControlWidgetController.d.ts +1 -1
  56. package/dist/controller/folioEditor.d.ts +1 -1
  57. package/dist/controller/fontReadiness.d.ts +70 -3
  58. package/dist/controller/fontReadiness.js +100 -10
  59. package/dist/controller/headerFooterEditorManager.js +6 -1
  60. package/dist/controller/layoutPipeline.d.ts +12 -10
  61. package/dist/controller/layoutPipeline.js +62 -9
  62. package/dist/controller/layoutRunOptions.d.ts +24 -0
  63. package/dist/controller/layoutRunOptions.js +17 -0
  64. package/dist/controller/layoutScheduler.d.ts +19 -14
  65. package/dist/controller/layoutScheduler.js +15 -12
  66. package/dist/controller/layoutSession.d.ts +26 -2
  67. package/dist/controller/layoutSession.js +1 -1
  68. package/dist/controller/noteEditorManager.js +8 -3
  69. package/dist/document-operations.d.ts +11 -2
  70. package/dist/document-operations.js +230 -21
  71. package/dist/docx/altChunk.d.ts +8 -0
  72. package/dist/docx/altChunk.js +17 -0
  73. package/dist/docx/attributeRemainder.d.ts +1 -1
  74. package/dist/docx/blockContentParser.d.ts +64 -1
  75. package/dist/docx/blockContentParser.js +17 -4
  76. package/dist/docx/blockCustomXmlShell.d.ts +7 -0
  77. package/dist/docx/blockCustomXmlShell.js +14 -0
  78. package/dist/docx/blockPlainText.js +7 -0
  79. package/dist/docx/commentAnchorIndex.js +1 -1
  80. package/dist/docx/commentRangeIntegrity.js +8 -3
  81. package/dist/docx/commentReferenceNormalization.js +1 -1
  82. package/dist/docx/commentReplyMarkers.js +20 -1
  83. package/dist/docx/compatibility.d.ts +1 -1
  84. package/dist/docx/compatibility.js +34 -13
  85. package/dist/docx/containerChildren.gen.d.ts +1 -1
  86. package/dist/docx/containerChildren.gen.js +1 -0
  87. package/dist/docx/documentParser.js +12 -12
  88. package/dist/docx/drawingIdNormalization.d.ts +3 -1
  89. package/dist/docx/drawingIdNormalization.js +6 -1
  90. package/dist/docx/ensureParaIds.js +119 -97
  91. package/dist/docx/footnoteParser.js +8 -4
  92. package/dist/docx/headerFooterParser.js +3 -3
  93. package/dist/docx/headerFooterReferenceNormalization.d.ts +20 -1
  94. package/dist/docx/headerFooterReferenceNormalization.js +52 -27
  95. package/dist/docx/hyperlinkParser.d.ts +1 -1
  96. package/dist/docx/index.d.ts +1 -1
  97. package/dist/docx/listNumberingInstances.d.ts +59 -0
  98. package/dist/docx/listNumberingInstances.js +249 -0
  99. package/dist/docx/normalizeBaseDirection.js +2 -1
  100. package/dist/docx/opaqueCarrier.d.ts +7 -0
  101. package/dist/docx/opaqueCarrier.js +38 -0
  102. package/dist/docx/packageParts.js +4 -1
  103. package/dist/docx/paragraphParser.js +91 -24
  104. package/dist/docx/paragraphPropertySource.d.ts +4 -2
  105. package/dist/docx/paragraphPropertySource.js +7 -1
  106. package/dist/docx/paragraphTraversal.js +1 -0
  107. package/dist/docx/parseWarningMessage.js +4 -1
  108. package/dist/docx/parser.js +173 -20
  109. package/dist/docx/rezip.js +27 -5
  110. package/dist/docx/sdtProperties.js +1 -1
  111. package/dist/docx/sdtPropertiesPatch.js +3 -0
  112. package/dist/docx/selectiveSave.js +16 -9
  113. package/dist/docx/selectiveXmlPatch.js +106 -37
  114. package/dist/docx/serializer/blockCustomXmlSerializer.d.ts +5 -0
  115. package/dist/docx/serializer/blockCustomXmlSerializer.js +4 -0
  116. package/dist/docx/serializer/documentSerializer.js +2 -0
  117. package/dist/docx/serializer/headerFooterSerializer.js +2 -0
  118. package/dist/docx/serializer/noteSerializer.js +3 -1
  119. package/dist/docx/serializer/paragraphSerializer.js +33 -9
  120. package/dist/docx/serializer/tableSerializer.js +25 -38
  121. package/dist/docx/server/createBilingualDocument.js +3 -3
  122. package/dist/docx/tableParser.d.ts +157 -1
  123. package/dist/docx/tableParser.js +89 -10
  124. package/dist/docx/textBoxParser.js +1 -1
  125. package/dist/docx/unzip.d.ts +2 -1
  126. package/dist/docx/unzip.js +1 -1
  127. package/dist/docx/wordprocessingPrefixes.d.ts +78 -0
  128. package/dist/docx/wordprocessingPrefixes.js +286 -0
  129. package/dist/i18n/messages/catalogs.gen.d.ts +136 -0
  130. package/dist/i18n/messages/catalogs.gen.js +153 -17
  131. package/dist/i18n/messages/messages.gen.d.ts +8 -0
  132. package/dist/internal/compare/inline-presentation.d.ts +2 -1
  133. package/dist/internal/compare/inline-presentation.js +11 -10
  134. package/dist/internal/headlessRevisionResolutionGuard.d.ts +2 -8
  135. package/dist/internal/headlessRevisionResolutionGuard.js +2 -11
  136. package/dist/internal/indexedPositionMap.d.ts +11 -0
  137. package/dist/internal/indexedPositionMap.js +42 -0
  138. package/dist/internal/pageBreakRunSourceDescendantIndex.js +2 -1
  139. package/dist/internal/revisionResolutionEdits.d.ts +13 -0
  140. package/dist/internal/revisionResolutionEdits.js +19 -0
  141. package/dist/internal/revisionResolutionInline.d.ts +24 -0
  142. package/dist/internal/{headlessRevisionResolution.js → revisionResolutionInline.js} +61 -43
  143. package/dist/internal/revisionResolutionStep.d.ts +34 -0
  144. package/dist/internal/revisionResolutionStep.js +282 -0
  145. package/dist/internal/revisionResolutionTracking.d.ts +11 -0
  146. package/dist/internal/revisionResolutionTracking.js +124 -0
  147. package/dist/internal/wholeStoryRevisionResolution.d.ts +56 -0
  148. package/dist/internal/wholeStoryRevisionResolution.js +530 -0
  149. package/dist/layout-bridge/convert/markupViewFlow.d.ts +20 -0
  150. package/dist/layout-bridge/convert/markupViewFlow.js +123 -0
  151. package/dist/layout-bridge/convert/tableConversion.js +1 -1
  152. package/dist/layout-bridge/convert/toFlowBlocks.js +10 -1
  153. package/dist/layout-engine/layoutInstrumentation.d.ts +9 -1
  154. package/dist/layout-engine/layoutInstrumentation.js +4 -1
  155. package/dist/layout-engine/measure/cache.d.ts +18 -1
  156. package/dist/layout-engine/measure/cache.js +31 -1
  157. package/dist/layout-engine/measure/font-metrics.worker.js +3 -7
  158. package/dist/layout-engine/measure/measureContainer.js +7 -47
  159. package/dist/layout-engine/measure/measureHelpers.d.ts +6 -1
  160. package/dist/layout-engine/measure/measureHelpers.js +22 -2
  161. package/dist/layout-engine/measure/measureWorker.js +2 -3
  162. package/dist/layout-engine/measure/measureWorkerProtocol.d.ts +6 -7
  163. package/dist/layout-engine/measure/measureWorkerProtocol.js +1 -2
  164. package/dist/layout-engine/types.d.ts +6 -0
  165. package/dist/layout-painter/renderPage.js +1 -0
  166. package/dist/layout-painter/renderParagraph.js +1 -1
  167. package/dist/managers/ContextMenuManager.js +5 -2
  168. package/dist/managers/types.d.ts +3 -0
  169. package/dist/markdown/fromMarkdown.js +2 -1
  170. package/dist/markdown/internals.d.ts +11 -1
  171. package/dist/markdown/internals.js +24 -3
  172. package/dist/markdown/renderBlock.js +39 -9
  173. package/dist/markdown/renderParagraph.d.ts +13 -1
  174. package/dist/markdown/renderParagraph.js +85 -38
  175. package/dist/markdown/renderRuns.js +3 -10
  176. package/dist/markdown/renderTable.js +24 -12
  177. package/dist/markdown/trailers.js +2 -2
  178. package/dist/markdown/types.d.ts +29 -7
  179. package/dist/paged-layout/incrementalMeasure.d.ts +1 -2
  180. package/dist/paged-layout/incrementalMeasure.js +1 -9
  181. package/dist/paged-layout/transactionDirtyRange.d.ts +1 -3
  182. package/dist/paged-layout/transactionDirtyRange.js +29 -41
  183. package/dist/panel-layout.d.ts +83 -0
  184. package/dist/panel-layout.js +96 -0
  185. package/dist/prosemirror/anchoredTextBoxes.d.ts +37 -0
  186. package/dist/prosemirror/anchoredTextBoxes.js +156 -0
  187. package/dist/prosemirror/attrs/index.d.ts +6 -2
  188. package/dist/prosemirror/attrs/index.js +172 -1
  189. package/dist/prosemirror/commands/comments.d.ts +7 -8
  190. package/dist/prosemirror/commands/comments.js +241 -207
  191. package/dist/prosemirror/commands/contentControls.d.ts +1 -1
  192. package/dist/prosemirror/commands/formatPainter.d.ts +1 -1
  193. package/dist/prosemirror/commands/formatting.d.ts +1 -1
  194. package/dist/prosemirror/commands/index.d.ts +2 -2
  195. package/dist/prosemirror/commands/index.js +2 -2
  196. package/dist/prosemirror/commands/paragraph.d.ts +7 -1
  197. package/dist/prosemirror/commands/paragraph.js +9 -1
  198. package/dist/prosemirror/commands/paragraphBookmarkJoin.d.ts +13 -0
  199. package/dist/prosemirror/commands/paragraphBookmarkJoin.js +22 -0
  200. package/dist/prosemirror/commands/pastePlainText.d.ts +1 -1
  201. package/dist/prosemirror/commands/resolveAllTableChanges.d.ts +40 -0
  202. package/dist/prosemirror/commands/resolveAllTableChanges.js +615 -0
  203. package/dist/prosemirror/commands/resolveNodePropertyChangeAttrs.d.ts +15 -0
  204. package/dist/prosemirror/commands/resolveNodePropertyChangeAttrs.js +46 -0
  205. package/dist/prosemirror/commands/resolveParagraphProperties.d.ts +16 -0
  206. package/dist/prosemirror/commands/resolveParagraphProperties.js +59 -0
  207. package/dist/prosemirror/commands/sectionBreak.js +2 -1
  208. package/dist/prosemirror/commands/tableCellMergeResolution.d.ts +8 -2
  209. package/dist/prosemirror/commands/tableCellMergeResolution.js +1 -1
  210. package/dist/prosemirror/contentControlRevisions.d.ts +1 -1
  211. package/dist/prosemirror/conversion/fromProseDoc.js +181 -31
  212. package/dist/prosemirror/conversion/toProseDoc.js +39 -4
  213. package/dist/prosemirror/emptyFieldResultRuns.d.ts +18 -0
  214. package/dist/prosemirror/emptyFieldResultRuns.js +33 -0
  215. package/dist/prosemirror/extensions/ExtensionManager.d.ts +1 -1
  216. package/dist/prosemirror/extensions/ExtensionManager.js +3 -1
  217. package/dist/prosemirror/extensions/StarterKit.js +3 -1
  218. package/dist/prosemirror/extensions/core/DocExtension.js +1 -1
  219. package/dist/prosemirror/extensions/core/ParagraphExtension.js +12 -0
  220. package/dist/prosemirror/extensions/features/BaseKeymapExtension.js +3 -0
  221. package/dist/prosemirror/extensions/features/ListExtension.js +161 -123
  222. package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.d.ts +19 -2
  223. package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.js +33 -20
  224. package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.d.ts +31 -2
  225. package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.js +270 -99
  226. package/dist/prosemirror/extensions/features/PasteCleanupExtension.js +3 -2
  227. package/dist/prosemirror/extensions/features/pasteCleanup.js +2 -1
  228. package/dist/prosemirror/extensions/features/pastedHtmlLists.d.ts +12 -0
  229. package/dist/prosemirror/extensions/features/pastedHtmlLists.js +126 -0
  230. package/dist/prosemirror/extensions/marks/FootnoteRefExtension.js +21 -5
  231. package/dist/prosemirror/extensions/marks/RunIdentityExtension.d.ts +21 -18
  232. package/dist/prosemirror/extensions/marks/RunIdentityExtension.js +37 -17
  233. package/dist/prosemirror/extensions/marks/markUtils.d.ts +7 -2
  234. package/dist/prosemirror/extensions/marks/markUtils.js +8 -2
  235. package/dist/prosemirror/extensions/marks/noteReferenceDeletion.d.ts +10 -0
  236. package/dist/prosemirror/extensions/marks/noteReferenceDeletion.js +35 -0
  237. package/dist/prosemirror/extensions/nodes/BlockCustomXmlExtension.d.ts +6 -0
  238. package/dist/prosemirror/extensions/nodes/BlockCustomXmlExtension.js +52 -0
  239. package/dist/prosemirror/extensions/nodes/FieldExtension.d.ts +3 -3
  240. package/dist/prosemirror/extensions/nodes/FieldExtension.js +50 -15
  241. package/dist/prosemirror/extensions/nodes/PreservedBlockExtension.js +4 -1
  242. package/dist/prosemirror/extensions/nodes/TableExtension.d.ts +1 -1
  243. package/dist/prosemirror/extensions/nodes/TableExtension.js +19 -18
  244. package/dist/prosemirror/extensions/types.d.ts +4 -1
  245. package/dist/prosemirror/findReplaceSelection.js +1 -1
  246. package/dist/prosemirror/index.d.ts +3 -2
  247. package/dist/prosemirror/index.js +3 -2
  248. package/dist/prosemirror/indexedNodeLookup.d.ts +17 -0
  249. package/dist/prosemirror/indexedNodeLookup.js +103 -0
  250. package/dist/prosemirror/listAutoformatMarkers.d.ts +19 -0
  251. package/dist/prosemirror/listAutoformatMarkers.js +98 -0
  252. package/dist/prosemirror/listInstanceReferences.d.ts +12 -0
  253. package/dist/prosemirror/listInstanceReferences.js +72 -0
  254. package/dist/prosemirror/listLabels.d.ts +24 -0
  255. package/dist/prosemirror/listLabels.js +111 -0
  256. package/dist/prosemirror/listNumbering.d.ts +110 -0
  257. package/dist/prosemirror/listNumbering.js +345 -0
  258. package/dist/prosemirror/listRenderingAttrs.d.ts +11 -2
  259. package/dist/prosemirror/listRenderingAttrs.js +8 -1
  260. package/dist/prosemirror/markupViewProjection.d.ts +95 -0
  261. package/dist/prosemirror/markupViewProjection.js +83 -0
  262. package/dist/prosemirror/numberingAttr.d.ts +9 -1
  263. package/dist/prosemirror/numberingAttr.js +9 -1
  264. package/dist/prosemirror/outlineLevelAttr.js +1 -1
  265. package/dist/prosemirror/paragraphIndentation.d.ts +10 -1
  266. package/dist/prosemirror/paragraphIndentation.js +29 -7
  267. package/dist/prosemirror/paragraphMarkJoin.d.ts +19 -0
  268. package/dist/prosemirror/paragraphMarkJoin.js +24 -0
  269. package/dist/prosemirror/plugins/createDocScanPlugin.d.ts +1 -1
  270. package/dist/prosemirror/plugins/documentNumbering.d.ts +27 -1
  271. package/dist/prosemirror/plugins/documentNumbering.js +97 -11
  272. package/dist/prosemirror/plugins/documentStyles.d.ts +10 -1
  273. package/dist/prosemirror/plugins/documentStyles.js +14 -1
  274. package/dist/prosemirror/plugins/suggestionMode.d.ts +16 -2
  275. package/dist/prosemirror/plugins/suggestionMode.js +116 -52
  276. package/dist/prosemirror/plugins/templateDirectives.d.ts +1 -1
  277. package/dist/prosemirror/plugins/transactionInvariants.d.ts +32 -0
  278. package/dist/prosemirror/plugins/transactionInvariants.js +86 -0
  279. package/dist/prosemirror/positionSweep.d.ts +24 -0
  280. package/dist/prosemirror/positionSweep.js +222 -0
  281. package/dist/prosemirror/rebaseParagraphRunFormatting.d.ts +1 -1
  282. package/dist/prosemirror/rejoinRunCarriers.d.ts +1 -1
  283. package/dist/prosemirror/replacedAnnotations.d.ts +33 -1
  284. package/dist/prosemirror/replacedAnnotations.js +170 -1
  285. package/dist/prosemirror/runFormattingInlineCarriers.d.ts +1 -1
  286. package/dist/prosemirror/schema/index.d.ts +2 -2
  287. package/dist/prosemirror/schema/index.js +3 -0
  288. package/dist/prosemirror/schema/nodes.d.ts +42 -11
  289. package/dist/prosemirror/sectionMarkEdits.d.ts +20 -0
  290. package/dist/prosemirror/sectionMarkEdits.js +59 -0
  291. package/dist/prosemirror/storyListNumbering.d.ts +17 -0
  292. package/dist/prosemirror/storyListNumbering.js +102 -0
  293. package/dist/prosemirror/tableGridMutation.d.ts +48 -2
  294. package/dist/prosemirror/tableGridMutation.js +106 -1
  295. package/dist/prosemirror/validation.js +5 -1
  296. package/dist/redline.js +93 -9
  297. package/dist/render-dom/BodySelectionOverlay.d.ts +4 -1
  298. package/dist/render-dom/BodySelectionOverlay.js +3 -2
  299. package/dist/utils/findReplace.js +2 -2
  300. package/dist/utils/mergeDocumentContent.js +1 -1
  301. package/dist/utils/noteReferenceLabels.d.ts +36 -0
  302. package/dist/utils/noteReferenceLabels.js +32 -0
  303. package/dist/utils/replaceText.js +1 -1
  304. package/dist/version-comparison.d.ts +1 -0
  305. package/dist/version-comparison.js +1 -0
  306. package/package.json +3 -2
  307. package/dist/internal/headlessRevisionResolution.d.ts +0 -23
@@ -0,0 +1,37 @@
1
+ import { Node } from "prosemirror-model";
2
+ import { Transaction } from "prosemirror-state";
3
+ //#region src/prosemirror/anchoredTextBoxes.d.ts
4
+ /** The id a text box anchor names, or `undefined` for anything else. */
5
+ declare const textBoxAnchorIdOf: (node: Node) => string | undefined;
6
+ /** The anchor ids of the text boxes drawn in `node`. */
7
+ declare const textBoxAnchorIdsIn: (node: Node) => Set<string>;
8
+ /** The anchor id of a text box block drawn in a paragraph, or `undefined`. */
9
+ declare const anchoredTextBoxId: (node: Node) => string | undefined;
10
+ /**
11
+ * Where the paragraph at `position` ends together with the text boxes drawn
12
+ * in it that follow it: the place for a block inserted after the paragraph.
13
+ */
14
+ declare const endOfParagraphWithItsTextBoxes: (doc: Node, position: number) => number;
15
+ /** Anchor ids `before` holds and `after` does not. */
16
+ declare const droppedTextBoxAnchorIds: (before: Node, after: Node) => Set<string>;
17
+ /**
18
+ * Delete the text box blocks whose anchors are in `anchorIds`. Returns whether
19
+ * any went.
20
+ */
21
+ declare const deleteTextBoxesAnchoredAt: (tr: Transaction, anchorIds: ReadonlySet<string>) => boolean;
22
+ /**
23
+ * Put every text box drawn in the paragraph at `position` right after it,
24
+ * keeping the boxes' order. For a paragraph just split: the boxes follow the
25
+ * second half, and those anchored in the first half move up to it.
26
+ */
27
+ declare const gatherTextBoxesAfterParagraph: (tr: Transaction, position: number) => void;
28
+ /** The anchor ids of the text boxes drawn between `from` and `to`. */
29
+ declare const textBoxAnchorIdsBetween: (doc: Node, from: number, to: number) => Set<string>;
30
+ /**
31
+ * Before the paragraph at `position` joins the one after it: move the text
32
+ * boxes drawn in it, which stand between the two, past that paragraph, where
33
+ * they follow the joined one. Returns whether any moved.
34
+ */
35
+ declare const moveTextBoxesPastNextParagraph: (tr: Transaction, position: number) => boolean;
36
+ //#endregion
37
+ export { anchoredTextBoxId, deleteTextBoxesAnchoredAt, droppedTextBoxAnchorIds, endOfParagraphWithItsTextBoxes, gatherTextBoxesAfterParagraph, moveTextBoxesPastNextParagraph, textBoxAnchorIdOf, textBoxAnchorIdsBetween, textBoxAnchorIdsIn };
@@ -0,0 +1,156 @@
1
+ import { expectTextBoxAttrs } from "./attrs/index.js";
2
+ import "./extensions/nodes/TextBoxAnchorExtension.js";
3
+ import { readTextBoxAnchorAttrs } from "./textBoxAnchorAttrs.js";
4
+ import { Fragment } from "prosemirror-model";
5
+ //#region src/prosemirror/anchoredTextBoxes.ts
6
+ /**
7
+ * A text box and the paragraph it is drawn in.
8
+ *
9
+ * In DOCX a text box is run content: a `w:drawing` in a run of its paragraph.
10
+ * The editor lifts it out into a `textBox` block after that paragraph and
11
+ * leaves a zero-width `textBoxAnchor` where the run was; the save puts the box
12
+ * back at its anchor, wherever the block has ended up. So the anchor, not the
13
+ * block's position, says which paragraph owns the box, and two rules follow:
14
+ *
15
+ * - The box follows its anchor. A paragraph deleted, or its anchor deleted,
16
+ * takes the box with it: a drawing is content of the paragraph it is in.
17
+ * Left behind, the block was saved into whatever paragraph came before it.
18
+ * - The box sits right after its paragraph. The reader lists the box's
19
+ * paragraphs where the block is, and a reopened package puts the block
20
+ * right after the paragraph holding its anchor, so a block written between
21
+ * the two is read in a different order once saved.
22
+ *
23
+ * Only a box placed `inlineWithPrevious` has an anchor: a `standalone` one
24
+ * stands in for a paragraph that held nothing else.
25
+ */
26
+ /**
27
+ * Add the anchor id of `node`, when it is an anchor that names one. An anchor
28
+ * naming none ties no box to its paragraph.
29
+ */
30
+ const collectAnchorId = (node, ids) => {
31
+ const anchorId = textBoxAnchorIdOf(node);
32
+ if (anchorId !== void 0) ids.add(anchorId);
33
+ };
34
+ /** The id a text box anchor names, or `undefined` for anything else. */
35
+ const textBoxAnchorIdOf = (node) => {
36
+ if (node.type.name !== "textBoxAnchor") return;
37
+ const attrs = readTextBoxAnchorAttrs(node);
38
+ return attrs.ok ? attrs.value.anchorId : void 0;
39
+ };
40
+ /** The anchor ids of the text boxes drawn in `node`. */
41
+ const textBoxAnchorIdsIn = (node) => {
42
+ const ids = /* @__PURE__ */ new Set();
43
+ node.descendants((child) => {
44
+ collectAnchorId(child, ids);
45
+ return true;
46
+ });
47
+ return ids;
48
+ };
49
+ /** The anchor id of a text box block drawn in a paragraph, or `undefined`. */
50
+ const anchoredTextBoxId = (node) => {
51
+ if (node.type.name !== "textBox") return;
52
+ const attrs = expectTextBoxAttrs(node);
53
+ return attrs._docxPlacement === "inlineWithPrevious" ? attrs._docxAnchorId : void 0;
54
+ };
55
+ /**
56
+ * Where the paragraph at `position` ends together with the text boxes drawn
57
+ * in it that follow it: the place for a block inserted after the paragraph.
58
+ */
59
+ const endOfParagraphWithItsTextBoxes = (doc, position) => {
60
+ const paragraph = doc.nodeAt(position);
61
+ if (!paragraph) return position;
62
+ let end = position + paragraph.nodeSize;
63
+ const anchors = textBoxAnchorIdsIn(paragraph);
64
+ if (anchors.size === 0) return end;
65
+ const after = doc.resolve(end);
66
+ for (let index = after.index(); index < after.parent.childCount; index += 1) {
67
+ const sibling = after.parent.child(index);
68
+ const anchorId = anchoredTextBoxId(sibling);
69
+ if (anchorId === void 0 || !anchors.has(anchorId)) break;
70
+ end += sibling.nodeSize;
71
+ }
72
+ return end;
73
+ };
74
+ /** Anchor ids `before` holds and `after` does not. */
75
+ const droppedTextBoxAnchorIds = (before, after) => {
76
+ const dropped = textBoxAnchorIdsIn(before);
77
+ if (dropped.size === 0) return dropped;
78
+ for (const anchorId of textBoxAnchorIdsIn(after)) dropped.delete(anchorId);
79
+ return dropped;
80
+ };
81
+ /**
82
+ * Delete the text box blocks whose anchors are in `anchorIds`. Returns whether
83
+ * any went.
84
+ */
85
+ const deleteTextBoxesAnchoredAt = (tr, anchorIds) => {
86
+ if (anchorIds.size === 0) return false;
87
+ const ranges = [];
88
+ tr.doc.descendants((node, position) => {
89
+ const anchorId = anchoredTextBoxId(node);
90
+ if (anchorId !== void 0 && anchorIds.has(anchorId)) {
91
+ ranges.push({
92
+ from: position,
93
+ to: position + node.nodeSize
94
+ });
95
+ return false;
96
+ }
97
+ return !node.isTextblock;
98
+ });
99
+ for (const { from, to } of ranges.toReversed()) tr.delete(from, to);
100
+ return ranges.length > 0;
101
+ };
102
+ /**
103
+ * Put every text box drawn in the paragraph at `position` right after it,
104
+ * keeping the boxes' order. For a paragraph just split: the boxes follow the
105
+ * second half, and those anchored in the first half move up to it.
106
+ */
107
+ const gatherTextBoxesAfterParagraph = (tr, position) => {
108
+ const paragraph = tr.doc.nodeAt(position);
109
+ if (!paragraph) return;
110
+ const anchors = textBoxAnchorIdsIn(paragraph);
111
+ if (anchors.size === 0) return;
112
+ const boxesEnd = endOfParagraphWithItsTextBoxes(tr.doc, position);
113
+ const at = tr.doc.resolve(boxesEnd);
114
+ const moved = [];
115
+ let offset = boxesEnd;
116
+ for (let index = at.index(); index < at.parent.childCount; index += 1) {
117
+ const sibling = at.parent.child(index);
118
+ const anchorId = anchoredTextBoxId(sibling);
119
+ if (anchorId !== void 0 && anchors.has(anchorId)) moved.push({
120
+ node: sibling,
121
+ from: offset
122
+ });
123
+ offset += sibling.nodeSize;
124
+ }
125
+ if (moved.length === 0) return;
126
+ for (const { node, from } of moved.toReversed()) tr.delete(from, from + node.nodeSize);
127
+ tr.insert(boxesEnd, Fragment.fromArray(moved.map(({ node }) => node)));
128
+ };
129
+ /** The anchor ids of the text boxes drawn between `from` and `to`. */
130
+ const textBoxAnchorIdsBetween = (doc, from, to) => {
131
+ const ids = /* @__PURE__ */ new Set();
132
+ doc.nodesBetween(from, to, (node) => {
133
+ collectAnchorId(node, ids);
134
+ return true;
135
+ });
136
+ return ids;
137
+ };
138
+ /**
139
+ * Before the paragraph at `position` joins the one after it: move the text
140
+ * boxes drawn in it, which stand between the two, past that paragraph, where
141
+ * they follow the joined one. Returns whether any moved.
142
+ */
143
+ const moveTextBoxesPastNextParagraph = (tr, position) => {
144
+ const paragraph = tr.doc.nodeAt(position);
145
+ if (!paragraph) return false;
146
+ const paragraphEnd = position + paragraph.nodeSize;
147
+ const boxesEnd = endOfParagraphWithItsTextBoxes(tr.doc, position);
148
+ const next = boxesEnd > paragraphEnd ? tr.doc.nodeAt(boxesEnd) : null;
149
+ if (!next || next.type !== paragraph.type) return false;
150
+ const boxes = tr.doc.slice(paragraphEnd, boxesEnd).content;
151
+ tr.delete(paragraphEnd, boxesEnd);
152
+ tr.insert(paragraphEnd + next.nodeSize, boxes);
153
+ return true;
154
+ };
155
+ //#endregion
156
+ export { anchoredTextBoxId, deleteTextBoxesAnchoredAt, droppedTextBoxAnchorIds, endOfParagraphWithItsTextBoxes, gatherTextBoxesAfterParagraph, moveTextBoxesPastNextParagraph, textBoxAnchorIdOf, textBoxAnchorIdsBetween, textBoxAnchorIdsIn };
@@ -1,5 +1,5 @@
1
1
  import { CharacterSpacingAttrs, CharacterStyleAttrs, CommentAttrs, EmphasisMarkAttrs, FontFamilyAttrs, FontSizeAttrs, FootnoteRefAttrs, HighlightAttrs, HyperlinkAttrs, InlineWrapperAttrs, InlineWrapperLayer, LanguageAttrs, RunFormattingOverrideAttrs, RunIdentityMarkAttrs, RunPropertyChangeMarkAttrs, RunShadingAttrs, StrikeAttrs, TextColorAttrs, TextEffectAttrs, TrackedChangeMarkAttrs, TrackedRevisionAncestor, UnderlineAttrs } from "../schema/marks.js";
2
- import { BlockSdtAttrs, FieldAttrs, HardBreakAttrs, ImageAttrs, MathAttrs, PageBreakRunAttrs, ParagraphAttrs, PreservedBlockAttrs, PreservedXmlAttrs, SdtAttrs, ShapeAttrs, SymbolAttrs, TabAttrs, TableAttrs, TableCellAttrs, TableRowAttrs, TextBoxAttrs } from "../schema/nodes.js";
2
+ import { BlockCustomXmlAttrs, BlockSdtAttrs, FieldAttrs, HardBreakAttrs, ImageAttrs, MathAttrs, PageBreakRunAttrs, ParagraphAttrs, PreservedBlockAttrs, PreservedXmlAttrs, SdtAttrs, ShapeAttrs, SymbolAttrs, TabAttrs, TableAttrs, TableCellAttrs, TableRowAttrs, TextBoxAttrs } from "../schema/nodes.js";
3
3
  import "../schema/index.js";
4
4
  import { Mark, Node } from "prosemirror-model";
5
5
  //#region src/prosemirror/attrs/index.d.ts
@@ -36,12 +36,16 @@ declare const readTableCellAttrs: (node: Node) => ReadProseMirrorAttrsResult<Tab
36
36
  declare const expectTableCellAttrs: (node: Node) => TableCellAttrs;
37
37
  declare const readImageAttrs: (node: Node) => ReadProseMirrorAttrsResult<ImageAttrs>;
38
38
  declare const expectImageAttrs: (node: Node) => ImageAttrs;
39
+ declare const isValidEmptyFieldResultRuns: (value: unknown) => value is NonNullable<FieldAttrs["_docxEmptyResultRuns"]>;
40
+ declare const isValidFieldCode: (value: unknown) => value is NonNullable<FieldAttrs["_docxFieldCode"]>;
39
41
  declare const readFieldAttrs: (node: Node) => ReadProseMirrorAttrsResult<FieldAttrs>;
40
42
  declare const expectFieldAttrs: (node: Node) => FieldAttrs;
41
43
  declare const readMathAttrs: (node: Node) => ReadProseMirrorAttrsResult<MathAttrs>;
42
44
  declare const expectMathAttrs: (node: Node) => MathAttrs;
43
45
  declare const readSdtAttrs: (node: Node) => ReadProseMirrorAttrsResult<SdtAttrs>;
44
46
  declare const expectSdtAttrs: (node: Node) => SdtAttrs;
47
+ declare const readBlockCustomXmlAttrs: (node: Node) => ReadProseMirrorAttrsResult<BlockCustomXmlAttrs>;
48
+ declare const expectBlockCustomXmlAttrs: (node: Node) => BlockCustomXmlAttrs;
45
49
  declare const readBlockSdtAttrs: (node: Node) => ReadProseMirrorAttrsResult<BlockSdtAttrs>;
46
50
  declare const expectBlockSdtAttrs: (node: Node) => BlockSdtAttrs;
47
51
  declare const readShapeAttrs: (node: Node) => ReadProseMirrorAttrsResult<ShapeAttrs>;
@@ -119,4 +123,4 @@ declare const mergeTableRowAttrs: (node: Node, patch: NodeAttrPatch<TableRowAttr
119
123
  */
120
124
  declare const mergeTableCellAttrs: (node: Node, patch: NodeAttrPatch<TableCellAttrs>) => TableCellAttrs;
121
125
  //#endregion
122
- export { ProseMirrorAttrIssue, ReadProseMirrorAttrsResult, expectBlockSdtAttrs, expectCharacterSpacingMarkAttrs, expectCharacterStyleMarkAttrs, expectCommentMarkAttrs, expectEmphasisMarkAttrs, expectFieldAttrs, expectFontFamilyMarkAttrs, expectFontSizeMarkAttrs, expectFootnoteRefMarkAttrs, expectHardBreakAttrs, expectHighlightMarkAttrs, expectHyperlinkMarkAttrs, expectImageAttrs, expectInlineWrapperMarkAttrs, expectLanguageMarkAttrs, expectMathAttrs, expectPageBreakRunAttrs, expectParagraphAttrs, expectPreservedBlockAttrs, expectPreservedXmlAttrs, expectRunFormattingOverrideMarkAttrs, expectRunIdentityMarkAttrs, expectRunPropertyChangeMarkAttrs, expectRunShadingMarkAttrs, expectSdtAttrs, expectShapeAttrs, expectStrikeMarkAttrs, expectSymbolAttrs, expectTabAttrs, expectTableAttrs, expectTableCellAttrs, expectTableRowAttrs, expectTextBoxAttrs, expectTextColorMarkAttrs, expectTextEffectMarkAttrs, expectTrackedChangeMarkAttrs, expectUnderlineMarkAttrs, isTrackedRevisionAncestorArray, mergeImageAttrs, mergeParagraphAttrs, mergeTableAttrs, mergeTableCellAttrs, mergeTableRowAttrs, readBlockSdtAttrs, readCharacterSpacingMarkAttrs, readCharacterStyleMarkAttrs, readCommentMarkAttrs, readEmphasisMarkAttrs, readFieldAttrs, readFontFamilyMarkAttrs, readFontSizeMarkAttrs, readFootnoteRefMarkAttrs, readHardBreakAttrs, readHighlightMarkAttrs, readHyperlinkMarkAttrs, readImageAttrs, readInlineWrapperMarkAttrs, readInlineWrapperStack, readLanguageMarkAttrs, readMathAttrs, readPageBreakRunAttrs, readParagraphAttrs, readPreservedBlockAttrs, readPreservedXmlAttrs, readRunFormattingOverrideMarkAttrs, readRunIdentityMarkAttrs, readRunPropertyChangeMarkAttrs, readRunShadingMarkAttrs, readSdtAttrs, readShapeAttrs, readStrikeMarkAttrs, readSymbolAttrs, readTabAttrs, readTableAttrs, readTableCellAttrs, readTableRowAttrs, readTextBoxAttrs, readTextColorMarkAttrs, readTextEffectMarkAttrs, readTrackedChangeMarkAttrs, readUnderlineMarkAttrs };
126
+ export { ProseMirrorAttrIssue, ReadProseMirrorAttrsResult, expectBlockCustomXmlAttrs, expectBlockSdtAttrs, expectCharacterSpacingMarkAttrs, expectCharacterStyleMarkAttrs, expectCommentMarkAttrs, expectEmphasisMarkAttrs, expectFieldAttrs, expectFontFamilyMarkAttrs, expectFontSizeMarkAttrs, expectFootnoteRefMarkAttrs, expectHardBreakAttrs, expectHighlightMarkAttrs, expectHyperlinkMarkAttrs, expectImageAttrs, expectInlineWrapperMarkAttrs, expectLanguageMarkAttrs, expectMathAttrs, expectPageBreakRunAttrs, expectParagraphAttrs, expectPreservedBlockAttrs, expectPreservedXmlAttrs, expectRunFormattingOverrideMarkAttrs, expectRunIdentityMarkAttrs, expectRunPropertyChangeMarkAttrs, expectRunShadingMarkAttrs, expectSdtAttrs, expectShapeAttrs, expectStrikeMarkAttrs, expectSymbolAttrs, expectTabAttrs, expectTableAttrs, expectTableCellAttrs, expectTableRowAttrs, expectTextBoxAttrs, expectTextColorMarkAttrs, expectTextEffectMarkAttrs, expectTrackedChangeMarkAttrs, expectUnderlineMarkAttrs, isTrackedRevisionAncestorArray, isValidEmptyFieldResultRuns, isValidFieldCode, mergeImageAttrs, mergeParagraphAttrs, mergeTableAttrs, mergeTableCellAttrs, mergeTableRowAttrs, readBlockCustomXmlAttrs, readBlockSdtAttrs, readCharacterSpacingMarkAttrs, readCharacterStyleMarkAttrs, readCommentMarkAttrs, readEmphasisMarkAttrs, readFieldAttrs, readFontFamilyMarkAttrs, readFontSizeMarkAttrs, readFootnoteRefMarkAttrs, readHardBreakAttrs, readHighlightMarkAttrs, readHyperlinkMarkAttrs, readImageAttrs, readInlineWrapperMarkAttrs, readInlineWrapperStack, readLanguageMarkAttrs, readMathAttrs, readPageBreakRunAttrs, readParagraphAttrs, readPreservedBlockAttrs, readPreservedXmlAttrs, readRunFormattingOverrideMarkAttrs, readRunIdentityMarkAttrs, readRunPropertyChangeMarkAttrs, readRunShadingMarkAttrs, readSdtAttrs, readShapeAttrs, readStrikeMarkAttrs, readSymbolAttrs, readTabAttrs, readTableAttrs, readTableCellAttrs, readTableRowAttrs, readTextBoxAttrs, readTextColorMarkAttrs, readTextEffectMarkAttrs, readTrackedChangeMarkAttrs, readUnderlineMarkAttrs };
@@ -374,6 +374,7 @@ const readPreservedBlockAttrs = (node) => {
374
374
  const issues = [];
375
375
  expectNodeType(node, "preservedBlock", issues);
376
376
  requiredString(attrs, "xml", "preservedBlock.attrs.xml", issues);
377
+ optionalString(attrs, "readerText", "preservedBlock.attrs.readerText", issues);
377
378
  return attrsResult(attrs, issues);
378
379
  };
379
380
  const expectPreservedBlockAttrs = (node) => expectCachedNodeAttrs(node, preservedBlockAttrsCache, readPreservedBlockAttrs, "preservedBlock attrs");
@@ -402,6 +403,7 @@ const readTableAttrsUncached = (node) => {
402
403
  optionalRecord(attrs, "_originalFormatting", "table.attrs._originalFormatting", issues);
403
404
  optionalPositionedBookmarks(attrs, "table.attrs._bookmarks", issues);
404
405
  optionalTablePreservedMarkup(attrs, "_preserved", "table.attrs._preserved", issues);
406
+ optionalTableContentCarriers(attrs, "carrierStack", "table.attrs.carrierStack", issues);
405
407
  return attrsResult(attrs, issues);
406
408
  };
407
409
  const readTableAttrs = memoizeNodeAttrsReader(readTableAttrsUncached);
@@ -426,6 +428,7 @@ const readTableRowAttrsUncached = (node) => {
426
428
  optionalPreservedAttributes(attrs, "_preservedAttributes", "tableRow.attrs._preservedAttributes", issues);
427
429
  optionalPositionedBookmarks(attrs, "tableRow.attrs._bookmarks", issues);
428
430
  optionalContentControls(attrs, "tableRow.attrs.contentControls", issues);
431
+ optionalTableContentCarriers(attrs, "carrierStack", "tableRow.attrs.carrierStack", issues);
429
432
  optionalTablePreservedMarkup(attrs, "_preserved", "tableRow.attrs._preserved", issues);
430
433
  return attrsResult(attrs, issues);
431
434
  };
@@ -461,6 +464,7 @@ const readTableCellAttrs = (node) => {
461
464
  optionalRecord(attrs, "_originalFormatting", "tableCell.attrs._originalFormatting", issues);
462
465
  optionalTableCellRevision(attrs, issues);
463
466
  optionalContentControls(attrs, "tableCell.attrs.contentControls", issues);
467
+ optionalTableContentCarriers(attrs, "carrierStack", "tableCell.attrs.carrierStack", issues);
464
468
  optionalBoolean(attrs, "_preserveVMergeRestart", "tableCell.attrs._preserveVMergeRestart", issues);
465
469
  return attrsResult(attrs, issues);
466
470
  };
@@ -529,6 +533,81 @@ const readImageAttrs = (node) => {
529
533
  return attrsResult(attrs, issues);
530
534
  };
531
535
  const expectImageAttrs = (node) => expectCachedNodeAttrs(node, imageAttrsCache, readImageAttrs, "image attrs");
536
+ const validateEmptyFieldResultRuns = (value, issues) => {
537
+ if (!Array.isArray(value) || value.length === 0) {
538
+ issues.push({
539
+ path: "field.attrs._docxEmptyResultRuns",
540
+ message: "Expected a nonempty array of empty runs."
541
+ });
542
+ return;
543
+ }
544
+ for (const [index, run] of value.entries()) {
545
+ const path = `field.attrs._docxEmptyResultRuns[${index}]`;
546
+ if (!isRecord(run) || run["type"] !== "run") {
547
+ issues.push({
548
+ path,
549
+ message: "Expected a run."
550
+ });
551
+ continue;
552
+ }
553
+ const content = run["content"];
554
+ if (!Array.isArray(content) || !content.every((item) => isRecord(item) && item["type"] === "text" && item["text"] === "")) issues.push({
555
+ path: `${path}.content`,
556
+ message: "Expected only empty text."
557
+ });
558
+ const formatting = run["formatting"];
559
+ if (formatting !== void 0) if (!isRecord(formatting)) issues.push({
560
+ path: `${path}.formatting`,
561
+ message: "Expected formatting object."
562
+ });
563
+ else validateTextFormatting(formatting, `${path}.formatting`, issues);
564
+ optionalPropertyChanges(run, "propertyChanges", `${path}.propertyChanges`, issues, ["runPropertyChange"]);
565
+ optionalPreservedAttributes(run, "preservedAttributes", `${path}.preservedAttributes`, issues);
566
+ }
567
+ };
568
+ const isValidEmptyFieldResultRuns = (value) => {
569
+ const issues = [];
570
+ validateEmptyFieldResultRuns(value, issues);
571
+ return issues.length === 0;
572
+ };
573
+ const isFieldCodeContent = (value) => {
574
+ if (!isRecord(value)) return false;
575
+ switch (value["type"]) {
576
+ case "text":
577
+ case "instrText": return typeof value["text"] === "string";
578
+ case "fieldChar": return value["charType"] === "begin" || value["charType"] === "separate" || value["charType"] === "end";
579
+ case "preservedXml": return typeof value["xml"] === "string" && isSafePreservedChildXml(value["xml"]) && typeof value["text"] === "string";
580
+ case "symbol": return typeof value["font"] === "string" && typeof value["char"] === "string";
581
+ case "footnoteRef":
582
+ case "endnoteRef": return typeof value["id"] === "number";
583
+ case "drawing": return isRecord(value["image"]);
584
+ case "shape": return isRecord(value["shape"]);
585
+ case "tab":
586
+ case "break":
587
+ case "softHyphen":
588
+ case "noBreakHyphen":
589
+ case "renderedPageBreak": return true;
590
+ default: return false;
591
+ }
592
+ };
593
+ const isValidFieldCode = (value) => {
594
+ if (!isRecord(value) || typeof value["instruction"] !== "string") return false;
595
+ const runs = value["runs"];
596
+ if (!Array.isArray(runs) || runs.length === 0) return false;
597
+ const issues = [];
598
+ for (const [index, run] of runs.entries()) {
599
+ if (!isRecord(run) || run["type"] !== "run" || !Array.isArray(run["content"])) return false;
600
+ if (!run["content"].every(isFieldCodeContent)) return false;
601
+ const path = `field.attrs._docxFieldCode.runs[${index}]`;
602
+ if (run["formatting"] !== void 0) {
603
+ if (!isRecord(run["formatting"])) return false;
604
+ validateTextFormatting(run["formatting"], `${path}.formatting`, issues);
605
+ }
606
+ optionalPropertyChanges(run, "propertyChanges", `${path}.propertyChanges`, issues, ["runPropertyChange"]);
607
+ optionalPreservedAttributes(run, "preservedAttributes", `${path}.preservedAttributes`, issues);
608
+ }
609
+ return issues.length === 0;
610
+ };
532
611
  const readFieldAttrs = (node) => {
533
612
  const attrs = attrsRecord(node.attrs);
534
613
  const issues = [];
@@ -541,6 +620,34 @@ const readFieldAttrs = (node) => {
541
620
  optionalBoolean(attrs, "fldLock", "field.attrs.fldLock", issues);
542
621
  optionalBoolean(attrs, "dirty", "field.attrs.dirty", issues);
543
622
  optionalBoolean(attrs, "fieldResultIsFallback", "field.attrs.fieldResultIsFallback", issues);
623
+ optionalString(attrs, "formFieldDataXml", "field.attrs.formFieldDataXml", issues);
624
+ if (attrs["fieldKind"] === "simple") {
625
+ if (attrs["fieldResultIsFallback"] !== void 0 && attrs["fieldResultIsFallback"] !== null) issues.push({
626
+ path: "field.attrs.fieldResultIsFallback",
627
+ message: "Simple fields cannot have a synthesized complex-field result."
628
+ });
629
+ if (attrs["formFieldDataXml"] !== void 0 && attrs["formFieldDataXml"] !== null) issues.push({
630
+ path: "field.attrs.formFieldDataXml",
631
+ message: "Simple fields cannot carry complex-field form data."
632
+ });
633
+ }
634
+ const emptyResultRuns = attrs["_docxEmptyResultRuns"];
635
+ if (emptyResultRuns !== void 0 && emptyResultRuns !== null) validateEmptyFieldResultRuns(emptyResultRuns, issues);
636
+ const fieldCode = attrs["_docxFieldCode"];
637
+ if (fieldCode !== void 0 && fieldCode !== null && !isValidFieldCode(fieldCode)) issues.push({
638
+ path: "field.attrs._docxFieldCode",
639
+ message: "Expected source field code runs."
640
+ });
641
+ if (attrs["fieldKind"] === "simple") {
642
+ if (fieldCode !== void 0 && fieldCode !== null) issues.push({
643
+ path: "field.attrs._docxFieldCode",
644
+ message: "Simple fields cannot carry complex-field code runs."
645
+ });
646
+ if (attrs["fieldResultIsFallback"] !== void 0 && attrs["fieldResultIsFallback"] !== null) issues.push({
647
+ path: "field.attrs.fieldResultIsFallback",
648
+ message: "Simple fields cannot have a synthesized complex-field result."
649
+ });
650
+ }
544
651
  return attrsResult(attrs, issues);
545
652
  };
546
653
  const expectFieldAttrs = (node) => expectCachedNodeAttrs(node, fieldAttrsCache, readFieldAttrs, "field attrs");
@@ -563,6 +670,17 @@ const readSdtAttrs = (node) => {
563
670
  };
564
671
  const expectSdtAttrs = (node) => expectCachedNodeAttrs(node, sdtAttrsCache, readSdtAttrs, "sdt attrs");
565
672
  const blockSdtAttrsCache = /* @__PURE__ */ new WeakMap();
673
+ const blockCustomXmlAttrsCache = /* @__PURE__ */ new WeakMap();
674
+ const readBlockCustomXmlAttrs = (node) => {
675
+ const attrs = attrsRecord(node.attrs);
676
+ const issues = [];
677
+ expectNodeType(node, "blockCustomXml", issues);
678
+ requiredString(attrs, "openingXml", "blockCustomXml.attrs.openingXml", issues);
679
+ requiredString(attrs, "closingXml", "blockCustomXml.attrs.closingXml", issues);
680
+ optionalBoolean(attrs, "_originallyEmpty", "blockCustomXml.attrs._originallyEmpty", issues);
681
+ return attrsResult(attrs, issues);
682
+ };
683
+ const expectBlockCustomXmlAttrs = (node) => expectCachedNodeAttrs(node, blockCustomXmlAttrsCache, readBlockCustomXmlAttrs, "blockCustomXml attrs");
566
684
  const readBlockSdtAttrs = (node) => {
567
685
  const attrs = attrsRecord(node.attrs);
568
686
  const issues = [];
@@ -1724,6 +1842,57 @@ const optionalContentControls = (attrs, path, issues) => {
1724
1842
  requiredString(entry, "sdtType", `${entryPath}.sdtType`, issues);
1725
1843
  }
1726
1844
  };
1845
+ const optionalTableContentCarriers = (attrs, key, path, issues) => {
1846
+ const value = attrs[key];
1847
+ if (value === void 0 || value === null) return;
1848
+ if (!Array.isArray(value)) {
1849
+ issues.push({
1850
+ path,
1851
+ message: "Expected an array."
1852
+ });
1853
+ return;
1854
+ }
1855
+ for (const [index, carrier] of value.entries()) {
1856
+ const carrierPath = `${path}[${index}]`;
1857
+ if (!isRecord(carrier)) {
1858
+ issues.push({
1859
+ path: carrierPath,
1860
+ message: "Expected an object."
1861
+ });
1862
+ continue;
1863
+ }
1864
+ if (carrier["type"] === "customXml") {
1865
+ const wrapper = carrier["wrapper"];
1866
+ if (!isRecord(wrapper)) {
1867
+ issues.push({
1868
+ path: `${carrierPath}.wrapper`,
1869
+ message: "Expected an object."
1870
+ });
1871
+ continue;
1872
+ }
1873
+ requiredNumber(wrapper, "id", `${carrierPath}.wrapper.id`, issues);
1874
+ requiredString(wrapper, "openingXml", `${carrierPath}.wrapper.openingXml`, issues);
1875
+ requiredString(wrapper, "closingXml", `${carrierPath}.wrapper.closingXml`, issues);
1876
+ continue;
1877
+ }
1878
+ if (carrier["type"] === "sdt") {
1879
+ const properties = carrier["properties"];
1880
+ if (!isRecord(properties)) {
1881
+ issues.push({
1882
+ path: `${carrierPath}.properties`,
1883
+ message: "Expected an object."
1884
+ });
1885
+ continue;
1886
+ }
1887
+ requiredString(properties, "sdtType", `${carrierPath}.properties.sdtType`, issues);
1888
+ continue;
1889
+ }
1890
+ issues.push({
1891
+ path: `${carrierPath}.type`,
1892
+ message: "Expected \"customXml\" or \"sdt\"."
1893
+ });
1894
+ }
1895
+ };
1727
1896
  /** A table sink entry may itself sit inside a row- or cell-level control. */
1728
1897
  const optionalTablePreservedMarkup = (attrs, key, path, issues) => {
1729
1898
  optionalPreservedMarkup(attrs, key, path, issues);
@@ -1821,6 +1990,7 @@ const optionalPreservedMarkup = (attrs, key, path, issues) => {
1821
1990
  }
1822
1991
  requiredNumber(entry, "index", `${entryPath}.index`, issues);
1823
1992
  requiredString(entry, "xml", `${entryPath}.xml`, issues);
1993
+ optionalTableContentCarriers(entry, "carrierStack", `${entryPath}.carrierStack`, issues);
1824
1994
  const xml = entry["xml"];
1825
1995
  if (typeof xml === "string" && !isSafePreservedChildXml(xml)) issues.push({
1826
1996
  path: `${entryPath}.xml`,
@@ -1855,6 +2025,7 @@ const optionalPositionedBookmarks = (attrs, path, issues) => {
1855
2025
  continue;
1856
2026
  }
1857
2027
  validateNonNegativeSafeInteger(entry["index"], `${entryPath}.index`, issues);
2028
+ optionalTableContentCarriers(entry, "carrierStack", `${entryPath}.carrierStack`, issues);
1858
2029
  const marker = entry["marker"];
1859
2030
  if (!isRecord(marker)) {
1860
2031
  issues.push({
@@ -2839,4 +3010,4 @@ const optionalEmptyHyperlinkArray = (value, issues) => {
2839
3010
  }
2840
3011
  };
2841
3012
  //#endregion
2842
- export { expectBlockSdtAttrs, expectCharacterSpacingMarkAttrs, expectCharacterStyleMarkAttrs, expectCommentMarkAttrs, expectEmphasisMarkAttrs, expectFieldAttrs, expectFontFamilyMarkAttrs, expectFontSizeMarkAttrs, expectFootnoteRefMarkAttrs, expectHardBreakAttrs, expectHighlightMarkAttrs, expectHyperlinkMarkAttrs, expectImageAttrs, expectInlineWrapperMarkAttrs, expectLanguageMarkAttrs, expectMathAttrs, expectPageBreakRunAttrs, expectParagraphAttrs, expectPreservedBlockAttrs, expectPreservedXmlAttrs, expectRunFormattingOverrideMarkAttrs, expectRunIdentityMarkAttrs, expectRunPropertyChangeMarkAttrs, expectRunShadingMarkAttrs, expectSdtAttrs, expectShapeAttrs, expectStrikeMarkAttrs, expectSymbolAttrs, expectTabAttrs, expectTableAttrs, expectTableCellAttrs, expectTableRowAttrs, expectTextBoxAttrs, expectTextColorMarkAttrs, expectTextEffectMarkAttrs, expectTrackedChangeMarkAttrs, expectUnderlineMarkAttrs, isTrackedRevisionAncestorArray, mergeImageAttrs, mergeParagraphAttrs, mergeTableAttrs, mergeTableCellAttrs, mergeTableRowAttrs, readBlockSdtAttrs, readCharacterSpacingMarkAttrs, readCharacterStyleMarkAttrs, readCommentMarkAttrs, readEmphasisMarkAttrs, readFieldAttrs, readFontFamilyMarkAttrs, readFontSizeMarkAttrs, readFootnoteRefMarkAttrs, readHardBreakAttrs, readHighlightMarkAttrs, readHyperlinkMarkAttrs, readImageAttrs, readInlineWrapperMarkAttrs, readInlineWrapperStack, readLanguageMarkAttrs, readMathAttrs, readPageBreakRunAttrs, readParagraphAttrs, readPreservedBlockAttrs, readPreservedXmlAttrs, readRunFormattingOverrideMarkAttrs, readRunIdentityMarkAttrs, readRunPropertyChangeMarkAttrs, readRunShadingMarkAttrs, readSdtAttrs, readShapeAttrs, readStrikeMarkAttrs, readSymbolAttrs, readTabAttrs, readTableAttrs, readTableCellAttrs, readTableRowAttrs, readTextBoxAttrs, readTextColorMarkAttrs, readTextEffectMarkAttrs, readTrackedChangeMarkAttrs, readUnderlineMarkAttrs };
3013
+ export { expectBlockCustomXmlAttrs, expectBlockSdtAttrs, expectCharacterSpacingMarkAttrs, expectCharacterStyleMarkAttrs, expectCommentMarkAttrs, expectEmphasisMarkAttrs, expectFieldAttrs, expectFontFamilyMarkAttrs, expectFontSizeMarkAttrs, expectFootnoteRefMarkAttrs, expectHardBreakAttrs, expectHighlightMarkAttrs, expectHyperlinkMarkAttrs, expectImageAttrs, expectInlineWrapperMarkAttrs, expectLanguageMarkAttrs, expectMathAttrs, expectPageBreakRunAttrs, expectParagraphAttrs, expectPreservedBlockAttrs, expectPreservedXmlAttrs, expectRunFormattingOverrideMarkAttrs, expectRunIdentityMarkAttrs, expectRunPropertyChangeMarkAttrs, expectRunShadingMarkAttrs, expectSdtAttrs, expectShapeAttrs, expectStrikeMarkAttrs, expectSymbolAttrs, expectTabAttrs, expectTableAttrs, expectTableCellAttrs, expectTableRowAttrs, expectTextBoxAttrs, expectTextColorMarkAttrs, expectTextEffectMarkAttrs, expectTrackedChangeMarkAttrs, expectUnderlineMarkAttrs, isTrackedRevisionAncestorArray, isValidEmptyFieldResultRuns, isValidFieldCode, mergeImageAttrs, mergeParagraphAttrs, mergeTableAttrs, mergeTableCellAttrs, mergeTableRowAttrs, readBlockCustomXmlAttrs, readBlockSdtAttrs, readCharacterSpacingMarkAttrs, readCharacterStyleMarkAttrs, readCommentMarkAttrs, readEmphasisMarkAttrs, readFieldAttrs, readFontFamilyMarkAttrs, readFontSizeMarkAttrs, readFootnoteRefMarkAttrs, readHardBreakAttrs, readHighlightMarkAttrs, readHyperlinkMarkAttrs, readImageAttrs, readInlineWrapperMarkAttrs, readInlineWrapperStack, readLanguageMarkAttrs, readMathAttrs, readPageBreakRunAttrs, readParagraphAttrs, readPreservedBlockAttrs, readPreservedXmlAttrs, readRunFormattingOverrideMarkAttrs, readRunIdentityMarkAttrs, readRunPropertyChangeMarkAttrs, readRunShadingMarkAttrs, readSdtAttrs, readShapeAttrs, readStrikeMarkAttrs, readSymbolAttrs, readTabAttrs, readTableAttrs, readTableCellAttrs, readTableRowAttrs, readTextBoxAttrs, readTextColorMarkAttrs, readTextEffectMarkAttrs, readTrackedChangeMarkAttrs, readUnderlineMarkAttrs };
@@ -32,7 +32,8 @@ declare function acceptChange(from: number, to: number): Command;
32
32
  */
33
33
  declare function rejectChange(from: number, to: number): Command;
34
34
  /**
35
- * Accept all tracked changes in the document.
35
+ * Accept all tracked changes in the document. Returns `false` while pending
36
+ * suggestions are present because this command cannot restage them.
36
37
  */
37
38
  declare function acceptAllChanges(): Command;
38
39
  /**
@@ -42,15 +43,11 @@ declare function rejectAllChanges(): Command;
42
43
  /**
43
44
  * Resolve a complete state synchronously for a headless reader or writer.
44
45
  *
45
- * @internal The replacement transaction is consumed here and never exposed:
46
- * it is deliberately not an editor command and must not be transported or
47
- * mapped through concurrent edits.
46
+ * Uses the same single-step resolver as the interactive editor command.
48
47
  */
49
48
  declare function resolveAllChangesInHeadlessState(state: EditorState, mode: ResolveMode): EditorState;
50
49
  /**
51
- * Resolve through the editor command path when a caller must map a position in
52
- * the reviewed document back to the tracked source. The bulk resolver is
53
- * faster, but deliberately replaces inline content without retaining mapping.
50
+ * Resolve a story and retain its position map for callers addressing the tracked source.
54
51
  */
55
52
  declare const resolveAllChangesInHeadlessStateWithMapping: (state: EditorState, mode: ResolveMode) => {
56
53
  state: EditorState;
@@ -109,6 +106,8 @@ type FolioSuggestion = {
109
106
  * accepting it applies (tracked vs direct).
110
107
  */
111
108
  declare function getSuggestions(state: EditorState): FolioSuggestion[];
109
+ /** The suggestion a revision belongs to, or `null` for an ordinary tracked change. */
110
+ declare function suggestionIdOfRevision(state: EditorState, revisionId: number): string | null;
112
111
  /**
113
112
  * The document range covering every mark belonging to `suggestionId`, plus the
114
113
  * revision ids those marks carry. Returns null when the suggestion is absent
@@ -184,4 +183,4 @@ declare function findNextChange(state: EditorState, startPos: number): ChangeRan
184
183
  */
185
184
  declare function findPreviousChange(state: EditorState, startPos: number): ChangeRange | null;
186
185
  //#endregion
187
- export { AcceptSuggestionOptions, FolioSuggestion, ParagraphBoundaryChange, SuggestionAppliedAs, SuggestionKind, acceptAIEditRevision, acceptAllChanges, acceptAllSuggestions, acceptChange, acceptSuggestion, addCommentMark, findAIEditRevisionRange, findChangeAtPosition, findNextChange, findParagraphBoundaryChangeAtPosition, findPreviousChange, findSuggestionRange, getSuggestions, rejectAIEditRevision, rejectAllChanges, rejectAllSuggestions, rejectChange, rejectSuggestion, removeCommentMark, resolveAllChangesInHeadlessState, resolveAllChangesInHeadlessStateWithMapping };
186
+ export { AcceptSuggestionOptions, FolioSuggestion, ParagraphBoundaryChange, SuggestionAppliedAs, SuggestionKind, acceptAIEditRevision, acceptAllChanges, acceptAllSuggestions, acceptChange, acceptSuggestion, addCommentMark, findAIEditRevisionRange, findChangeAtPosition, findNextChange, findParagraphBoundaryChangeAtPosition, findPreviousChange, findSuggestionRange, getSuggestions, rejectAIEditRevision, rejectAllChanges, rejectAllSuggestions, rejectChange, rejectSuggestion, removeCommentMark, resolveAllChangesInHeadlessState, resolveAllChangesInHeadlessStateWithMapping, suggestionIdOfRevision };