@stll/folio-core 0.45.0 → 0.47.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 (451) hide show
  1. package/dist/ai-edits/apply.js +85 -43
  2. package/dist/ai-edits/headless.js +2 -2
  3. package/dist/ai-edits/read.d.ts +1 -0
  4. package/dist/ai-edits/read.js +1 -0
  5. package/dist/ai-edits/snapshot.js +32 -27
  6. package/dist/ai-edits/table-cell-mutations.js +15 -7
  7. package/dist/ai-edits/table-geometry.js +21 -18
  8. package/dist/ai-edits/table-template.js +2 -2
  9. package/dist/compare/compare.js +2 -5
  10. package/dist/compare/content-alignment.js +108 -12
  11. package/dist/compare/content-types.d.ts +8 -2
  12. package/dist/compare/content.js +2 -11
  13. package/dist/compare/plan.js +7 -4
  14. package/dist/compare/scenario.js +2 -5
  15. package/dist/compare/section-boundary-properties.js +1 -2
  16. package/dist/compare/types.d.ts +9 -1
  17. package/dist/compare/types.js +12 -1
  18. package/dist/compat/eigenpal.d.ts +2 -1
  19. package/dist/compat/eigenpal.js +2 -1
  20. package/dist/content-controls/checkboxDisplay.d.ts +17 -0
  21. package/dist/content-controls/checkboxDisplay.js +46 -0
  22. package/dist/content-controls/findContentControls.js +3 -1
  23. package/dist/content-controls/mutateContentControls.js +57 -43
  24. package/dist/controller/contentControlWidgetController.d.ts +1 -0
  25. package/dist/controller/contentControlWidgetController.js +3 -0
  26. package/dist/controller/hiddenEditorApi.js +3 -1
  27. package/dist/controller/hiddenEditorManager.d.ts +1 -1
  28. package/dist/controller/hiddenEditorManager.js +6 -3
  29. package/dist/controller/layoutPipeline.js +8 -3
  30. package/dist/display-list/build/buildDisplayList.js +20 -1
  31. package/dist/display-list/build/imagePrimitives.d.ts +4 -4
  32. package/dist/display-list/build/imagePrimitives.js +38 -18
  33. package/dist/display-list/build/pageBorderPrimitives.js +2 -1
  34. package/dist/display-list/build/paragraphPrimitives.js +113 -14
  35. package/dist/display-list/build/previewPrimitives.d.ts +10 -0
  36. package/dist/display-list/build/previewPrimitives.js +89 -0
  37. package/dist/display-list/build/strokes.d.ts +177 -8
  38. package/dist/display-list/build/strokes.js +167 -47
  39. package/dist/display-list/build/tablePrimitives.js +4 -2
  40. package/dist/display-list/build/textBoxPrimitives.js +6 -4
  41. package/dist/display-list/build/textDecorations.d.ts +15 -1
  42. package/dist/display-list/build/textDecorations.js +15 -1
  43. package/dist/display-list/dom/renderDisplayListToDom.js +11 -21
  44. package/dist/display-list/primitives.d.ts +13 -2
  45. package/dist/display-list/primitives.js +36 -1
  46. package/dist/display-list/types.d.ts +17 -0
  47. package/dist/document-operations.js +2 -1
  48. package/dist/docx/attributeRemainder.d.ts +76 -0
  49. package/dist/docx/attributeRemainder.js +111 -0
  50. package/dist/docx/blockContentParser.d.ts +3 -1
  51. package/dist/docx/blockContentParser.js +102 -106
  52. package/dist/docx/blockPlainText.d.ts +3 -4
  53. package/dist/docx/blockPlainText.js +3 -0
  54. package/dist/docx/borderParser.js +26 -11
  55. package/dist/docx/builtInStyles.d.ts +8 -16
  56. package/dist/docx/builtInStyles.js +54 -17
  57. package/dist/docx/commentAnchorIndex.d.ts +30 -0
  58. package/dist/docx/commentAnchorIndex.js +50 -0
  59. package/dist/docx/commentParser.d.ts +1 -1
  60. package/dist/docx/commentParser.js +56 -39
  61. package/dist/docx/commentRangeIntegrity.d.ts +16 -1
  62. package/dist/docx/commentRangeIntegrity.js +42 -1
  63. package/dist/docx/commentRangeJoin.d.ts +9 -0
  64. package/dist/docx/commentRangeJoin.js +33 -0
  65. package/dist/docx/commentReferenceCompletion.d.ts +9 -0
  66. package/dist/docx/commentReferenceCompletion.js +47 -0
  67. package/dist/docx/commentReferenceNormalization.js +3 -1
  68. package/dist/docx/commentReplyMarkers.js +11 -19
  69. package/dist/docx/compatibility.js +56 -41
  70. package/dist/docx/containerChildren.d.ts +208 -0
  71. package/dist/docx/containerChildren.gen.d.ts +43 -0
  72. package/dist/docx/containerChildren.gen.js +263 -0
  73. package/dist/docx/containerChildren.js +153 -0
  74. package/dist/docx/diagramPreview.d.ts +14 -2
  75. package/dist/docx/diagramPreview.js +81 -169
  76. package/dist/docx/documentParser.d.ts +1 -1
  77. package/dist/docx/documentParser.js +7 -4
  78. package/dist/docx/drawingAnchor.d.ts +87 -0
  79. package/dist/docx/drawingAnchor.js +201 -0
  80. package/dist/docx/drawingUtils.d.ts +43 -38
  81. package/dist/docx/drawingUtils.js +205 -118
  82. package/dist/docx/ensureParaIds.js +17 -7
  83. package/dist/docx/fieldParser.d.ts +1 -1
  84. package/dist/docx/fieldParser.js +4 -4
  85. package/dist/docx/fieldState.d.ts +26 -0
  86. package/dist/docx/fieldState.js +53 -0
  87. package/dist/docx/fontTableParser.js +102 -41
  88. package/dist/docx/footnoteParser.d.ts +1 -1
  89. package/dist/docx/footnoteParser.js +10 -6
  90. package/dist/docx/graphicFrameLocks.d.ts +16 -4
  91. package/dist/docx/graphicFrameLocks.js +19 -6
  92. package/dist/docx/groupDrawingParser.js +4 -3
  93. package/dist/docx/headerFooterParser.js +1 -1
  94. package/dist/docx/headerFooterReferenceNormalization.js +1 -0
  95. package/dist/docx/hyperlinkParser.d.ts +66 -9
  96. package/dist/docx/hyperlinkParser.js +153 -26
  97. package/dist/docx/imageParser.js +160 -115
  98. package/dist/docx/index.d.ts +2 -1
  99. package/dist/docx/index.js +2 -1
  100. package/dist/docx/inlineContentRemovals.d.ts +28 -0
  101. package/dist/docx/inlineContentRemovals.js +46 -0
  102. package/dist/docx/inlineWrapperContent.d.ts +166 -0
  103. package/dist/docx/inlineWrapperContent.js +165 -0
  104. package/dist/docx/inlineWrapperParser.d.ts +11 -0
  105. package/dist/docx/inlineWrapperParser.js +60 -0
  106. package/dist/docx/nonVisualDrawingProps.d.ts +5 -13
  107. package/dist/docx/normalizeBaseDirection.js +12 -1
  108. package/dist/docx/numberingParser.d.ts +25 -2
  109. package/dist/docx/numberingParser.js +264 -361
  110. package/dist/docx/numberingReference.d.ts +9 -16
  111. package/dist/docx/numberingReference.js +17 -16
  112. package/dist/docx/numberingReferenceNormalization.js +7 -7
  113. package/dist/docx/ooxmlCounterFormatter.d.ts +1 -1
  114. package/dist/docx/ooxmlCounterFormatter.js +4 -1
  115. package/dist/docx/paraIdAttribute.d.ts +111 -0
  116. package/dist/docx/paraIdAttribute.js +142 -0
  117. package/dist/docx/paragraphParser.d.ts +10 -25
  118. package/dist/docx/paragraphParser.js +421 -496
  119. package/dist/docx/paragraphProperties.d.ts +23 -0
  120. package/dist/docx/paragraphProperties.js +279 -0
  121. package/dist/docx/paragraphPropertySource.js +7 -1
  122. package/dist/docx/paragraphTextBoxEnrichment.d.ts +3 -2
  123. package/dist/docx/paragraphTextBoxEnrichment.js +20 -59
  124. package/dist/docx/paragraphTraversal.d.ts +14 -10
  125. package/dist/docx/paragraphTraversal.js +53 -52
  126. package/dist/docx/parseWarningMessage.js +5 -1
  127. package/dist/docx/parserEnums.d.ts +6 -8
  128. package/dist/docx/parserEnums.js +4 -6
  129. package/dist/docx/preservedRunContent.d.ts +32 -0
  130. package/dist/docx/preservedRunContent.js +96 -0
  131. package/dist/docx/previewBudget.d.ts +44 -23
  132. package/dist/docx/previewBudget.js +61 -30
  133. package/dist/docx/propertyElementAttributes.d.ts +178 -0
  134. package/dist/docx/propertyElementAttributes.js +114 -0
  135. package/dist/docx/renderedPageBreakNormalization.js +4 -6
  136. package/dist/docx/rezip.d.ts +28 -2
  137. package/dist/docx/rezip.js +152 -27
  138. package/dist/docx/runConsolidator.d.ts +42 -2
  139. package/dist/docx/runConsolidator.js +60 -6
  140. package/dist/docx/runParser.d.ts +55 -19
  141. package/dist/docx/runParser.js +394 -306
  142. package/dist/docx/runPayload.d.ts +5 -0
  143. package/dist/docx/runPayload.js +4 -0
  144. package/dist/docx/sdtProperties.d.ts +39 -5
  145. package/dist/docx/sdtProperties.js +205 -84
  146. package/dist/docx/sdtPropertiesPatch.d.ts +5 -9
  147. package/dist/docx/sdtPropertiesPatch.js +68 -112
  148. package/dist/docx/sectionParser.d.ts +1 -2
  149. package/dist/docx/sectionParser.js +241 -238
  150. package/dist/docx/selectiveSave.js +3 -2
  151. package/dist/docx/selectiveXmlPatch.d.ts +66 -3
  152. package/dist/docx/selectiveXmlPatch.js +276 -133
  153. package/dist/docx/serializer/blockSdtSerializer.js +2 -96
  154. package/dist/docx/serializer/borderSerializer.d.ts +5 -5
  155. package/dist/docx/serializer/borderSerializer.js +12 -10
  156. package/dist/docx/serializer/commentSerializer.js +5 -7
  157. package/dist/docx/serializer/documentSerializer.js +11 -11
  158. package/dist/docx/serializer/fontTableSerializer.js +31 -3
  159. package/dist/docx/serializer/headerFooterSerializer.js +10 -9
  160. package/dist/docx/serializer/markupRangeAttributes.d.ts +9 -1
  161. package/dist/docx/serializer/markupRangeAttributes.js +9 -1
  162. package/dist/docx/serializer/noteSerializer.js +11 -8
  163. package/dist/docx/serializer/numberingSerializer.d.ts +1 -6
  164. package/dist/docx/serializer/numberingSerializer.js +81 -79
  165. package/dist/docx/serializer/paragraphSerializer.d.ts +1 -9
  166. package/dist/docx/serializer/paragraphSerializer.js +156 -236
  167. package/dist/docx/serializer/runSerializer.d.ts +1 -5
  168. package/dist/docx/serializer/runSerializer.js +134 -75
  169. package/dist/docx/serializer/sdtPropertiesSerializer.d.ts +26 -0
  170. package/dist/docx/serializer/sdtPropertiesSerializer.js +111 -0
  171. package/dist/docx/serializer/sectionPropertiesSerializer.js +42 -49
  172. package/dist/docx/serializer/settingsSerializer.js +6 -4
  173. package/dist/docx/serializer/stylesSerializer.js +8 -11
  174. package/dist/docx/serializer/tableSerializer.js +283 -105
  175. package/dist/docx/serializer/textFormattingSerializer.d.ts +28 -4
  176. package/dist/docx/serializer/textFormattingSerializer.js +111 -101
  177. package/dist/docx/serializer/xmlUtils.d.ts +1 -1
  178. package/dist/docx/serializer/xmlUtils.js +1 -1
  179. package/dist/docx/server/createBilingualDocument.js +20 -16
  180. package/dist/docx/server/materializeYjsDocx.d.ts +1 -1
  181. package/dist/docx/server/materializeYjsDocx.js +9 -1
  182. package/dist/docx/server/migrateYjsAttrSchema.d.ts +55 -0
  183. package/dist/docx/server/migrateYjsAttrSchema.js +95 -0
  184. package/dist/docx/settingsParser.js +7 -4
  185. package/dist/docx/shadingParser.d.ts +2 -1
  186. package/dist/docx/shadingParser.js +43 -7
  187. package/dist/docx/shapeParser.js +13 -8
  188. package/dist/docx/strictNames.d.ts +11 -0
  189. package/dist/docx/strictNames.gen.d.ts +45 -0
  190. package/dist/docx/strictNames.gen.js +50 -0
  191. package/dist/docx/strictNames.js +43 -0
  192. package/dist/docx/strictValueEncodings.gen.js +133 -131
  193. package/dist/docx/styleParser.js +17 -349
  194. package/dist/docx/tableParser.d.ts +11 -2
  195. package/dist/docx/tableParser.js +665 -220
  196. package/dist/docx/textBoxParser.d.ts +28 -3
  197. package/dist/docx/textBoxParser.js +69 -9
  198. package/dist/docx/themeColorAttribute.d.ts +13 -0
  199. package/dist/docx/themeColorAttribute.js +24 -0
  200. package/dist/docx/trackedMoveRangeNormalization.js +2 -1
  201. package/dist/docx/unzip.js +5 -4
  202. package/dist/docx/vmlImageParser.d.ts +30 -5
  203. package/dist/docx/vmlImageParser.js +91 -32
  204. package/dist/docx/vmlPreview.js +2 -2
  205. package/dist/docx/wrapPolygon.d.ts +30 -0
  206. package/dist/docx/wrapPolygon.js +70 -0
  207. package/dist/docx/xmlEncoding.d.ts +5 -0
  208. package/dist/docx/xmlEncoding.js +12 -0
  209. package/dist/docx/xmlParser.d.ts +23 -1
  210. package/dist/docx/xmlParser.js +31 -2
  211. package/dist/fonts/embeddedFonts.js +3 -3
  212. package/dist/headless-layout.js +12 -1
  213. package/dist/i18n/messages/catalogs.gen.d.ts +68 -0
  214. package/dist/i18n/messages/catalogs.gen.js +102 -34
  215. package/dist/i18n/messages/messages.gen.d.ts +4 -0
  216. package/dist/index.d.ts +2 -1
  217. package/dist/index.js +2 -1
  218. package/dist/internal/headlessRevisionResolution.js +9 -0
  219. package/dist/internal/pageBreakRunSourceDescendantIndex.js +7 -2
  220. package/dist/internal/paragraphFormattingSerialization.d.ts +20 -9
  221. package/dist/internal/paragraphFormattingSerialization.js +118 -83
  222. package/dist/layout-bridge/convert/footnoteLayout.d.ts +1 -0
  223. package/dist/layout-bridge/convert/footnoteLayout.js +1 -0
  224. package/dist/layout-bridge/convert/headerFooterLayout.d.ts +1 -0
  225. package/dist/layout-bridge/convert/headerFooterLayout.js +2 -0
  226. package/dist/layout-bridge/convert/toFlowBlocks.d.ts +17 -12
  227. package/dist/layout-bridge/convert/toFlowBlocks.js +267 -101
  228. package/dist/layout-engine/index.d.ts +2 -2
  229. package/dist/layout-engine/index.js +53 -17
  230. package/dist/layout-engine/measure/measureBlocks.d.ts +3 -0
  231. package/dist/layout-engine/measure/measureBlocks.js +6 -10
  232. package/dist/layout-engine/measure/tableCellFloating.d.ts +2 -0
  233. package/dist/layout-engine/measure/tableCellFloating.js +2 -0
  234. package/dist/layout-engine/measure/tableCellGrid.js +2 -1
  235. package/dist/layout-engine/measure/tableFragmentBorderGeometry.js +2 -1
  236. package/dist/layout-engine/measure/tableInlinePlacement.js +2 -5
  237. package/dist/layout-engine/paragraphSequence.js +3 -2
  238. package/dist/layout-engine/renderedBreakReconciliation.js +2 -1
  239. package/dist/layout-engine/section-breaks.d.ts +49 -2
  240. package/dist/layout-engine/section-breaks.js +55 -4
  241. package/dist/layout-engine/types.d.ts +69 -17
  242. package/dist/layout-engine/types.js +16 -1
  243. package/dist/layout-painter/borderStroke.d.ts +18 -4
  244. package/dist/layout-painter/renderImage.d.ts +5 -1
  245. package/dist/layout-painter/renderImage.js +10 -3
  246. package/dist/layout-painter/renderPage.d.ts +2 -0
  247. package/dist/layout-painter/renderPage.js +10 -4
  248. package/dist/layout-painter/renderParagraph.d.ts +14 -1
  249. package/dist/layout-painter/renderParagraph.js +34 -28
  250. package/dist/layout-painter/renderTable.d.ts +4 -1
  251. package/dist/layout-painter/renderTable.js +22 -22
  252. package/dist/layout-painter/renderTextBox.js +5 -3
  253. package/dist/managers/autoSaveCodec.d.ts +9 -1
  254. package/dist/managers/autoSaveCodec.js +12 -4
  255. package/dist/markdown/renderBlock.js +3 -0
  256. package/dist/markdown/renderRuns.d.ts +1 -1
  257. package/dist/markdown/renderRuns.js +34 -6
  258. package/dist/markdown/renderTable.js +24 -6
  259. package/dist/markdown/trailers.js +4 -1
  260. package/dist/model.d.ts +3 -3
  261. package/dist/model.js +2 -2
  262. package/dist/paged-layout/sectionBlockWidths.d.ts +3 -0
  263. package/dist/paged-layout/sectionBlockWidths.js +26 -4
  264. package/dist/pdf/images.js +142 -6
  265. package/dist/prosemirror/attrs/index.d.ts +34 -5
  266. package/dist/prosemirror/attrs/index.js +639 -48
  267. package/dist/prosemirror/authoredTransformAttrs.d.ts +28 -0
  268. package/dist/prosemirror/authoredTransformAttrs.js +64 -0
  269. package/dist/prosemirror/bookmarkBoundaryAttrs.d.ts +9 -1
  270. package/dist/prosemirror/bookmarkBoundaryAttrs.js +22 -3
  271. package/dist/prosemirror/commands/comments.js +68 -53
  272. package/dist/prosemirror/commands/contentControls.js +33 -20
  273. package/dist/prosemirror/commands/image.d.ts +10 -3
  274. package/dist/prosemirror/commands/image.js +46 -29
  275. package/dist/prosemirror/commands/pageBreak.js +1 -1
  276. package/dist/prosemirror/commands/paragraph.d.ts +2 -1
  277. package/dist/prosemirror/commands/propertyChangeScope.d.ts +12 -4
  278. package/dist/prosemirror/commands/propertyChangeScope.js +22 -4
  279. package/dist/prosemirror/commands/sectionBreak.d.ts +33 -1
  280. package/dist/prosemirror/commands/sectionBreak.js +187 -11
  281. package/dist/prosemirror/commentReferenceAttrs.d.ts +8 -0
  282. package/dist/prosemirror/commentReferenceAttrs.js +33 -0
  283. package/dist/prosemirror/commentReferenceIntegrity.d.ts +47 -0
  284. package/dist/prosemirror/commentReferenceIntegrity.js +43 -0
  285. package/dist/prosemirror/conversion/fromProseDoc.d.ts +17 -12
  286. package/dist/prosemirror/conversion/fromProseDoc.js +553 -207
  287. package/dist/prosemirror/conversion/index.d.ts +2 -2
  288. package/dist/prosemirror/conversion/preservedSinkCarriers.d.ts +39 -0
  289. package/dist/prosemirror/conversion/preservedSinkCarriers.js +19 -0
  290. package/dist/prosemirror/conversion/runShadingMark.js +14 -1
  291. package/dist/prosemirror/conversion/sdtAttrs.d.ts +10 -1
  292. package/dist/prosemirror/conversion/sdtAttrs.js +19 -5
  293. package/dist/prosemirror/conversion/toProseDoc.d.ts +7 -9
  294. package/dist/prosemirror/conversion/toProseDoc.js +801 -411
  295. package/dist/prosemirror/emptyRangeAnchor.d.ts +53 -0
  296. package/dist/prosemirror/emptyRangeAnchor.js +158 -0
  297. package/dist/prosemirror/extensions/StarterKit.js +14 -58
  298. package/dist/prosemirror/extensions/core/DocExtension.js +1 -1
  299. package/dist/prosemirror/extensions/core/ParagraphExtension.js +21 -16
  300. package/dist/prosemirror/extensions/features/BaseKeymapExtension.js +48 -29
  301. package/dist/prosemirror/extensions/features/EmptyParagraphFormatExtension.js +3 -1
  302. package/dist/prosemirror/extensions/features/ImagePasteExtension.js +5 -3
  303. package/dist/prosemirror/extensions/features/ListExtension.js +43 -24
  304. package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.js +1 -0
  305. package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.js +4 -3
  306. package/dist/prosemirror/extensions/features/PasteCleanupExtension.d.ts +3 -3
  307. package/dist/prosemirror/extensions/features/PasteCleanupExtension.js +5 -5
  308. package/dist/prosemirror/extensions/features/pasteCleanup.d.ts +3 -1
  309. package/dist/prosemirror/extensions/features/pasteCleanup.js +56 -2
  310. package/dist/prosemirror/extensions/features/pastedHeadingStyles.js +5 -4
  311. package/dist/prosemirror/extensions/markRegistry.d.ts +65 -0
  312. package/dist/prosemirror/extensions/markRegistry.js +138 -0
  313. package/dist/prosemirror/extensions/marks/InlineWrapperExtension.d.ts +18 -0
  314. package/dist/prosemirror/extensions/marks/InlineWrapperExtension.js +77 -0
  315. package/dist/prosemirror/extensions/marks/RunIdentityExtension.d.ts +26 -0
  316. package/dist/prosemirror/extensions/marks/RunIdentityExtension.js +134 -0
  317. package/dist/prosemirror/extensions/marks/TrackedChangeExtensions.js +2 -1
  318. package/dist/prosemirror/extensions/marks/UnderlineExtension.js +12 -18
  319. package/dist/prosemirror/extensions/marks/markUtils.d.ts +2 -1
  320. package/dist/prosemirror/extensions/marks/markUtils.js +49 -5
  321. package/dist/prosemirror/extensions/nodes/BlockBookmarkBoundaryExtension.d.ts +29 -0
  322. package/dist/prosemirror/extensions/nodes/BlockBookmarkBoundaryExtension.js +46 -0
  323. package/dist/prosemirror/extensions/nodes/BlockSdtExtension.d.ts +4 -3
  324. package/dist/prosemirror/extensions/nodes/BlockSdtExtension.js +18 -13
  325. package/dist/prosemirror/extensions/nodes/BookmarkBoundaryExtension.js +28 -53
  326. package/dist/prosemirror/extensions/nodes/CommentReferenceExtension.d.ts +11 -0
  327. package/dist/prosemirror/extensions/nodes/CommentReferenceExtension.js +97 -0
  328. package/dist/prosemirror/extensions/nodes/FieldExtension.js +9 -7
  329. package/dist/prosemirror/extensions/nodes/ImageExtension.js +24 -1
  330. package/dist/prosemirror/extensions/nodes/MoveRangeBoundaryExtension.d.ts +11 -0
  331. package/dist/prosemirror/extensions/nodes/MoveRangeBoundaryExtension.js +43 -0
  332. package/dist/prosemirror/extensions/nodes/PreservedBlockExtension.d.ts +32 -0
  333. package/dist/prosemirror/extensions/nodes/PreservedBlockExtension.js +67 -0
  334. package/dist/prosemirror/extensions/nodes/PreservedXmlExtension.d.ts +16 -0
  335. package/dist/prosemirror/extensions/nodes/PreservedXmlExtension.js +60 -0
  336. package/dist/prosemirror/extensions/nodes/RangeAnchorExtension.d.ts +13 -0
  337. package/dist/prosemirror/extensions/nodes/RangeAnchorExtension.js +65 -0
  338. package/dist/prosemirror/extensions/nodes/SdtExtension.d.ts +3 -1
  339. package/dist/prosemirror/extensions/nodes/SdtExtension.js +22 -16
  340. package/dist/prosemirror/extensions/nodes/ShapeExtension.js +7 -0
  341. package/dist/prosemirror/extensions/nodes/TableExtension.js +142 -123
  342. package/dist/prosemirror/extensions/nodes/TextBoxExtension.js +9 -1
  343. package/dist/prosemirror/extensions/nodes/bookmarkBoundaryDom.d.ts +23 -0
  344. package/dist/prosemirror/extensions/nodes/bookmarkBoundaryDom.js +57 -0
  345. package/dist/prosemirror/extensions/types.d.ts +12 -3
  346. package/dist/prosemirror/index.d.ts +4 -2
  347. package/dist/prosemirror/index.js +2 -1
  348. package/dist/prosemirror/inlineWrapperStack.d.ts +39 -0
  349. package/dist/prosemirror/inlineWrapperStack.js +92 -0
  350. package/dist/prosemirror/listMarker.d.ts +2 -2
  351. package/dist/prosemirror/listMarker.js +7 -8
  352. package/dist/prosemirror/listRenderingAttrs.js +11 -1
  353. package/dist/prosemirror/listState.d.ts +62 -0
  354. package/dist/prosemirror/listState.js +49 -0
  355. package/dist/prosemirror/moveRangeBoundaryAttrs.d.ts +13 -0
  356. package/dist/prosemirror/moveRangeBoundaryAttrs.js +114 -0
  357. package/dist/prosemirror/numberedRefFields.js +4 -4
  358. package/dist/prosemirror/numberingAttr.d.ts +55 -0
  359. package/dist/prosemirror/numberingAttr.js +74 -0
  360. package/dist/prosemirror/outlineLevelAttr.d.ts +29 -0
  361. package/dist/prosemirror/outlineLevelAttr.js +42 -0
  362. package/dist/prosemirror/pageBreakRunProjection.d.ts +17 -7
  363. package/dist/prosemirror/pageBreakRunProjection.js +19 -9
  364. package/dist/prosemirror/paragraphFormattingProvenance.d.ts +9 -0
  365. package/dist/prosemirror/paragraphFormattingProvenance.js +4 -1
  366. package/dist/prosemirror/plugins/selectionTracker.d.ts +3 -6
  367. package/dist/prosemirror/plugins/selectionTracker.js +3 -10
  368. package/dist/prosemirror/rangeAnchorAttrs.d.ts +14 -0
  369. package/dist/prosemirror/rangeAnchorAttrs.js +101 -0
  370. package/dist/prosemirror/replacedAnnotations.d.ts +59 -0
  371. package/dist/prosemirror/replacedAnnotations.js +183 -0
  372. package/dist/prosemirror/revisionCarriers.d.ts +86 -2
  373. package/dist/prosemirror/revisionCarriers.js +86 -60
  374. package/dist/prosemirror/runFormattingInlineCarriers.d.ts +5 -1
  375. package/dist/prosemirror/runFormattingInlineCarriers.js +7 -1
  376. package/dist/prosemirror/runIdentity.d.ts +28 -0
  377. package/dist/prosemirror/runIdentity.js +36 -0
  378. package/dist/prosemirror/runStyleFormatting.js +1 -1
  379. package/dist/prosemirror/schema/index.d.ts +3 -3
  380. package/dist/prosemirror/schema/marks.d.ts +47 -4
  381. package/dist/prosemirror/schema/nodes.d.ts +309 -26
  382. package/dist/prosemirror/schema/nodes.js +16 -1
  383. package/dist/prosemirror/sectionCarrier.d.ts +37 -0
  384. package/dist/prosemirror/sectionCarrier.js +40 -0
  385. package/dist/prosemirror/selectionState.d.ts +3 -0
  386. package/dist/prosemirror/selectionState.js +4 -1
  387. package/dist/prosemirror/styles/resolvedStyleAttrs.d.ts +5 -4
  388. package/dist/prosemirror/styles/resolvedStyleAttrs.js +15 -13
  389. package/dist/prosemirror/tableResize.js +5 -6
  390. package/dist/prosemirror/trackedRunInlineAtoms.d.ts +4 -0
  391. package/dist/prosemirror/trackedRunInlineAtoms.js +4 -0
  392. package/dist/prosemirror/utils/extractTrackedChanges.d.ts +10 -11
  393. package/dist/prosemirror/utils/extractTrackedChanges.js +109 -92
  394. package/dist/prosemirror/validation.js +31 -6
  395. package/dist/prosemirror/yjsDocumentMetadata.d.ts +73 -0
  396. package/dist/prosemirror/yjsDocumentMetadata.js +592 -0
  397. package/dist/prosemirror/zeroWidthAnchors.js +6 -0
  398. package/dist/render-dom/commentAnchorAttributes.d.ts +37 -0
  399. package/dist/render-dom/commentAnchorAttributes.js +54 -0
  400. package/dist/server.d.ts +3 -1
  401. package/dist/server.js +3 -1
  402. package/dist/style-sets/extract.js +4 -4
  403. package/dist/style-sets/stellaStyle.js +36 -23
  404. package/dist/types/colors.d.ts +2 -2
  405. package/dist/types/content.d.ts +2 -2
  406. package/dist/types/documentEnumValues.d.ts +53 -26
  407. package/dist/types/documentEnumValues.js +72 -174
  408. package/dist/types/formatting.d.ts +2 -2
  409. package/dist/types/index.d.ts +9 -2
  410. package/dist/utils/borderCss.d.ts +246 -0
  411. package/dist/utils/borderCss.js +325 -0
  412. package/dist/utils/clipboard.d.ts +9 -1
  413. package/dist/utils/clipboard.js +27 -1
  414. package/dist/utils/colorResolver.d.ts +4 -3
  415. package/dist/utils/colorResolver.js +45 -76
  416. package/dist/utils/createDocument.js +24 -6
  417. package/dist/utils/findReplace.js +52 -10
  418. package/dist/utils/formatToStyle.d.ts +84 -2
  419. package/dist/utils/formatToStyle.js +133 -52
  420. package/dist/utils/headingCollector.js +3 -2
  421. package/dist/utils/imageLuminance.d.ts +15 -0
  422. package/dist/utils/imageLuminance.js +32 -0
  423. package/dist/utils/mergeDocumentContent.js +12 -20
  424. package/dist/utils/paragraphFormattingMerge.js +27 -6
  425. package/dist/utils/replaceText.js +1 -0
  426. package/dist/utils/tableOperations.d.ts +5 -3
  427. package/dist/utils/tableOperations.js +14 -1
  428. package/dist/utils/tablePlacement.d.ts +7 -0
  429. package/dist/utils/tablePlacement.js +14 -0
  430. package/dist/utils/textDirectionFlow.d.ts +15 -0
  431. package/dist/utils/textDirectionFlow.js +38 -0
  432. package/dist/utils/textFormattingMerge.js +16 -4
  433. package/package.json +10 -10
  434. package/dist/ai-edits/__fixtures__/paragraphs.d.ts +0 -17
  435. package/dist/ai-edits/__fixtures__/paragraphs.js +0 -33
  436. package/dist/compare/__fixtures__/body-sequence.d.ts +0 -119
  437. package/dist/compare/__fixtures__/body-sequence.js +0 -225
  438. package/dist/compare/__fixtures__/nested-table.d.ts +0 -16
  439. package/dist/compare/__fixtures__/nested-table.js +0 -50
  440. package/dist/compare/__fixtures__/numbered-list.d.ts +0 -34
  441. package/dist/compare/__fixtures__/numbered-list.js +0 -85
  442. package/dist/docx/blockRangeMarkers.d.ts +0 -36
  443. package/dist/docx/blockRangeMarkers.js +0 -59
  444. package/dist/docx/bookmarkPlacement.d.ts +0 -9
  445. package/dist/docx/bookmarkPlacement.js +0 -50
  446. package/dist/fonts/embeddedFontTable.d.ts +0 -45
  447. package/dist/fonts/embeddedFontTable.js +0 -80
  448. package/dist/prosemirror/extensions/marks/PageBreakRunOwnerExtension.d.ts +0 -13
  449. package/dist/prosemirror/extensions/marks/PageBreakRunOwnerExtension.js +0 -39
  450. package/dist/prosemirror/yjsParagraphSourceContract.d.ts +0 -9
  451. package/dist/prosemirror/yjsParagraphSourceContract.js +0 -26
@@ -1,4 +1,4 @@
1
- import { BlockId, BorderStyle, CellBorderSpec, CellBorders, ColumnBreakBlock, ColumnBreakMeasure, ColumnLayout, DEFAULT_TEXTBOX_MARGINS, DEFAULT_TEXTBOX_WIDTH, DocumentPosition, FOOTNOTE_ENTRY_MARGIN_BOTTOM, FOOTNOTE_FALLBACK_LINE_HEIGHT, FOOTNOTE_SEPARATOR_HEIGHT, FieldRun, FloatingTablePosition, FlowBlock, FootnoteContent, Fragment, FragmentBase, HeaderFooterContent, HeaderFooterContentHeights, HeaderFooterLayout, HitTestResult, HyperlinkInfo, ImageBlock, ImageFragment, ImageMeasure, ImageRun, ImageRunPosition, Layout, LayoutOptions, LineBreakRun, ListMarkerFormatting, ListNumPr, MathRun, Measure, MeasuredLine, Page, PageBreakBlock, PageBreakMeasure, PageHeaderFooterRefs, PageMargins, ParagraphAttrs, ParagraphBlock, ParagraphBorders, ParagraphFragment, ParagraphIndent, ParagraphMeasure, ParagraphSpacing, RenderedPageBreakRun, Run, RunFormatting, SdtGroup, SectionBreakBlock, SectionBreakMeasure, SectionPageNumbering, TabAlignment, TabRun, TabStop, TableBlock, TableCell, TableCellMeasure, TableFragment, TableMeasure, TableRow, TableRowMeasure, TextBoxBlock, TextBoxFlowAttrs, TextBoxFragment, TextBoxMeasure, TextRun, floatingTextBoxReservesBand, floatingTextBoxWrapsText, getTableRowLeadingWidth, isFloatingImageRun, isFloatingTextBoxBlock, isTextWrappingFloatingImageRun, resolveTableCellPadding, resolveTableWidthPx, tableColumnsArePinned } from "./types.js";
1
+ import { BlockId, BorderStyle, CellBorderSpec, CellBorders, ColumnBreakBlock, ColumnBreakMeasure, ColumnLayout, DEFAULT_TEXTBOX_MARGINS, DEFAULT_TEXTBOX_WIDTH, DocumentPosition, FOOTNOTE_ENTRY_MARGIN_BOTTOM, FOOTNOTE_FALLBACK_LINE_HEIGHT, FOOTNOTE_SEPARATOR_HEIGHT, FieldRun, FloatingTablePosition, FlowBlock, FootnoteContent, Fragment, FragmentBase, HeaderFooterContent, HeaderFooterContentHeights, HeaderFooterLayout, HitTestResult, HyperlinkInfo, ImageBlock, ImageFragment, ImageMeasure, ImageRun, ImageRunPosition, Layout, LayoutOptions, LineBreakRun, ListMarkerFormatting, MathRun, Measure, MeasuredLine, Page, PageBreakBlock, PageBreakMeasure, PageHeaderFooterRefs, PageMargins, ParagraphAttrs, ParagraphBlock, ParagraphBorders, ParagraphFragment, ParagraphIndent, ParagraphMeasure, ParagraphSpacing, RenderedPageBreakRun, Run, RunFormatting, SdtGroup, SectionBreakBlock, SectionBreakMeasure, SectionPageNumbering, TabAlignment, TabRun, TabStop, TableBlock, TableCell, TableCellMeasure, TableFragment, TableMeasure, TableRow, TableRowMeasure, TextBoxBlock, TextBoxFlowAttrs, TextBoxFragment, TextBoxMeasure, TextRun, floatingTextBoxReservesBand, floatingTextBoxWrapsText, getTableRowLeadingWidth, isFloatingImageRun, isFloatingTextBoxBlock, isListNumPr, isTextWrappingFloatingImageRun, resolveTableCellPadding, resolveTableWidthPx, tableColumnsArePinned } from "./types.js";
2
2
  import { PageState, Paginator, PaginatorOptions, createPaginator } from "./paginator.js";
3
3
  import { KeepNextChain, calculateChainHeight, computeKeepNextChains, getMidChainIndices, hasKeepLines, hasPageBreakBefore } from "./keep-together.js";
4
4
  import { resolveSectionHeaderFooterRefs } from "./headerFooterRefs.js";
@@ -42,4 +42,4 @@ declare function layoutDocument(blocks: FlowBlock[], measures: Measure[], option
42
42
  */
43
43
  declare function getHeaderRowsHeight(measure: TableMeasure, headerRowCount: number): number;
44
44
  //#endregion
45
- export { BlockId, BorderStyle, type BreakDecision, CellBorderSpec, CellBorders, ColumnBreakBlock, ColumnBreakMeasure, ColumnLayout, DEFAULT_TEXTBOX_MARGINS, DEFAULT_TEXTBOX_WIDTH, DocumentPosition, FOOTNOTE_ENTRY_MARGIN_BOTTOM, FOOTNOTE_FALLBACK_LINE_HEIGHT, FOOTNOTE_SEPARATOR_HEIGHT, FieldRun, FloatingTablePosition, FlowBlock, FootnoteContent, Fragment, FragmentBase, HeaderFooterContent, HeaderFooterContentHeights, HeaderFooterLayout, HitTestResult, HyperlinkInfo, ImageBlock, ImageFragment, ImageMeasure, ImageRun, ImageRunPosition, type KeepNextChain, Layout, LayoutOptions, LineBreakRun, ListMarkerFormatting, ListNumPr, MathRun, Measure, MeasuredLine, Page, PageBreakBlock, PageBreakMeasure, PageHeaderFooterRefs, PageMargins, type PageState, type Paginator, type PaginatorOptions, ParagraphAttrs, ParagraphBlock, ParagraphBorders, ParagraphFragment, ParagraphIndent, ParagraphMeasure, ParagraphSpacing, RenderedPageBreakRun, Run, RunFormatting, SdtGroup, SectionBreakBlock, SectionBreakMeasure, SectionLayoutConfig, SectionPageNumbering, type SectionState, TabAlignment, TabRun, TabStop, TableBlock, TableCell, TableCellMeasure, TableFragment, TableMeasure, TableRow, TableRowMeasure, TextBoxBlock, TextBoxFlowAttrs, TextBoxFragment, TextBoxMeasure, TextRun, applyContextualSpacing, applyPendingToActive, assertExhaustiveFlowBlock, calculateChainHeight, collectSectionConfigs, computeKeepNextChains, createInitialSectionState, createPaginator, findPageIndexContainingPmPos, floatingTextBoxReservesBand, floatingTextBoxWrapsText, getEffectiveColumns, getEffectiveMargins, getEffectivePageSize, getHeaderRowsHeight, getMidChainIndices, getTableRowLeadingWidth, hasKeepLines, hasPageBreakBefore, isFloatingImageRun, isFloatingTextBoxBlock, isTextWrappingFloatingImageRun, layoutDocument, resolveSectionHeaderFooterRefs, resolveTableCellPadding, resolveTableWidthPx, scheduleSectionBreak, tableColumnsArePinned };
45
+ export { BlockId, BorderStyle, type BreakDecision, CellBorderSpec, CellBorders, ColumnBreakBlock, ColumnBreakMeasure, ColumnLayout, DEFAULT_TEXTBOX_MARGINS, DEFAULT_TEXTBOX_WIDTH, DocumentPosition, FOOTNOTE_ENTRY_MARGIN_BOTTOM, FOOTNOTE_FALLBACK_LINE_HEIGHT, FOOTNOTE_SEPARATOR_HEIGHT, FieldRun, FloatingTablePosition, FlowBlock, FootnoteContent, Fragment, FragmentBase, HeaderFooterContent, HeaderFooterContentHeights, HeaderFooterLayout, HitTestResult, HyperlinkInfo, ImageBlock, ImageFragment, ImageMeasure, ImageRun, ImageRunPosition, type KeepNextChain, Layout, LayoutOptions, LineBreakRun, ListMarkerFormatting, MathRun, Measure, MeasuredLine, Page, PageBreakBlock, PageBreakMeasure, PageHeaderFooterRefs, PageMargins, type PageState, type Paginator, type PaginatorOptions, ParagraphAttrs, ParagraphBlock, ParagraphBorders, ParagraphFragment, ParagraphIndent, ParagraphMeasure, ParagraphSpacing, RenderedPageBreakRun, Run, RunFormatting, SdtGroup, SectionBreakBlock, SectionBreakMeasure, SectionLayoutConfig, SectionPageNumbering, type SectionState, TabAlignment, TabRun, TabStop, TableBlock, TableCell, TableCellMeasure, TableFragment, TableMeasure, TableRow, TableRowMeasure, TextBoxBlock, TextBoxFlowAttrs, TextBoxFragment, TextBoxMeasure, TextRun, applyContextualSpacing, applyPendingToActive, assertExhaustiveFlowBlock, calculateChainHeight, collectSectionConfigs, computeKeepNextChains, createInitialSectionState, createPaginator, findPageIndexContainingPmPos, floatingTextBoxReservesBand, floatingTextBoxWrapsText, getEffectiveColumns, getEffectiveMargins, getEffectivePageSize, getHeaderRowsHeight, getMidChainIndices, getTableRowLeadingWidth, hasKeepLines, hasPageBreakBefore, isFloatingImageRun, isFloatingTextBoxBlock, isListNumPr, isTextWrappingFloatingImageRun, layoutDocument, resolveSectionHeaderFooterRefs, resolveTableCellPadding, resolveTableWidthPx, scheduleSectionBreak, tableColumnsArePinned };
@@ -10,11 +10,11 @@ import { getParagraphFragmentPmRange } from "./paragraphFragmentRange.js";
10
10
  import { collapseParagraphSpacing, getParagraphSpacingAfter, getParagraphSpacingBefore, isEmptyParagraph, paragraphsShareStyle, resolveEffectiveParagraphSpacingTree } from "./paragraphSpacing.js";
11
11
  import { assertExhaustiveFlowBlock, findPageIndexContainingPmPos } from "./pmPageIndex.js";
12
12
  import { INITIAL_RENDERED_BREAK_STATE, PAGE_ADVANCE, reconcileAfterBlock, reconcileBreakBeforeBlock, recordReflowBoundary } from "./renderedBreakReconciliation.js";
13
- import { applyPendingToActive, createInitialSectionState, getEffectiveColumns, getEffectiveMargins, getEffectivePageSize, normalizeSectionBreakType, scheduleSectionBreak } from "./section-breaks.js";
13
+ import { applyPendingToActive, createInitialSectionState, getEffectiveColumns, getEffectiveMargins, getEffectivePageSize, normalizeSectionBreakType, physicalColumnRegionIsShared, scheduleSectionBreak } from "./section-breaks.js";
14
14
  import { applySectionVerticalAlignment } from "./sectionVerticalAlignment.js";
15
15
  import { buildTableRowBreakInfo, getRowContinuationSkip, snapRowBreak } from "./tableRowBreak.js";
16
16
  import { bandFragmentX, bandTopContentY, isPageFrameRelativeAnchor } from "./textBoxFlow.js";
17
- import { DEFAULT_TEXTBOX_MARGINS, DEFAULT_TEXTBOX_WIDTH, FOOTNOTE_ENTRY_MARGIN_BOTTOM, FOOTNOTE_FALLBACK_LINE_HEIGHT, FOOTNOTE_SEPARATOR_HEIGHT, floatingTextBoxReservesBand, floatingTextBoxWrapsText, getTableRowLeadingWidth, isFloatingImageRun, isFloatingTextBoxBlock, isTextWrappingFloatingImageRun, resolveTableCellPadding, resolveTableWidthPx, tableColumnsArePinned } from "./types.js";
17
+ import { DEFAULT_TEXTBOX_MARGINS, DEFAULT_TEXTBOX_WIDTH, FOOTNOTE_ENTRY_MARGIN_BOTTOM, FOOTNOTE_FALLBACK_LINE_HEIGHT, FOOTNOTE_SEPARATOR_HEIGHT, floatingTextBoxReservesBand, floatingTextBoxWrapsText, getTableRowLeadingWidth, isFloatingImageRun, isFloatingTextBoxBlock, isListNumPr, isTextWrappingFloatingImageRun, resolveTableCellPadding, resolveTableWidthPx, tableColumnsArePinned } from "./types.js";
18
18
  import { panic } from "better-result";
19
19
  //#region src/layout-engine/index.ts
20
20
  /**
@@ -979,13 +979,45 @@ function isPagePinnedBandTextBox(block) {
979
979
  return isPageFrameRelativeAnchor(block.position?.vertical?.relativeTo);
980
980
  }
981
981
  /**
982
+ * Start the next section in the current page region, below the outgoing
983
+ * content.
984
+ *
985
+ * ECMA-376 §17.6.22: a `continuous` break normally keeps the current page
986
+ * geometry and defers the new size/margins to the next natural page break. But
987
+ * a break that changes page size or orientation cannot share a physical sheet
988
+ * with the preceding section, so Word and LibreOffice promote it to a page
989
+ * break (eigenpal/docx-editor#841).
990
+ *
991
+ * Compare against the last laid-out page without materializing one: a break
992
+ * before any content has no sheet to share, so it defers (the first content
993
+ * then opens a page with the new geometry) rather than stranding a blank
994
+ * leading page.
995
+ */
996
+ function startSectionInPlace(paginator, nextSectionConfig, nextSectionIndex) {
997
+ const currentPage = paginator.states.at(-1)?.page;
998
+ const nextSize = nextSectionConfig.pageSize;
999
+ const pageSizeChanges = currentPage != null && (Math.round(nextSize.w) !== Math.round(currentPage.size.w) || Math.round(nextSize.h) !== Math.round(currentPage.size.h));
1000
+ if (nextSectionIndex !== void 0) paginator.startSection({
1001
+ sectionIndex: nextSectionIndex,
1002
+ pageNumbering: nextSectionConfig.pageNumbering,
1003
+ placement: pageSizeChanges ? SECTION_START_PLACEMENT.NEXT_PAGE : SECTION_START_PLACEMENT.CONTINUOUS
1004
+ });
1005
+ if (pageSizeChanges) {
1006
+ paginator.updatePageLayout(nextSize, nextSectionConfig.margins);
1007
+ if (!paginator.retargetCurrentBlankPage()) paginator.forcePageBreak({ coalesceBlankPage: true });
1008
+ return;
1009
+ }
1010
+ paginator.updatePageLayout(nextSize, nextSectionConfig.margins, false);
1011
+ paginator.retargetCurrentBlankPage();
1012
+ }
1013
+ /**
982
1014
  * Handle a section break block.
983
1015
  * @param block - The section break block (current section's properties)
984
1016
  * @param paginator - The paginator instance
985
1017
  * @param nextSectionConfig - Page layout for the NEXT section
986
1018
  * @param nextSectionType - Break type of the NEXT section (how it starts relative to current)
987
1019
  */
988
- function handleSectionBreak(_block, paginator, nextSectionConfig, nextSectionType = "nextPage", nextSectionIndex) {
1020
+ function handleSectionBreak(_block, paginator, nextSectionConfig, nextSectionType, nextSectionIndex) {
989
1021
  switch (nextSectionType) {
990
1022
  case "nextPage":
991
1023
  paginator.updatePageLayout(nextSectionConfig.pageSize, nextSectionConfig.margins);
@@ -1013,27 +1045,31 @@ function handleSectionBreak(_block, paginator, nextSectionConfig, nextSectionTyp
1013
1045
  });
1014
1046
  if (!paginator.retargetCurrentBlankPage()) panic("Odd-page section target must be blank");
1015
1047
  break;
1016
- case "continuous": {
1048
+ case "nextColumn": {
1017
1049
  const currentPage = paginator.states.at(-1)?.page;
1018
- const nextSize = nextSectionConfig.pageSize;
1019
- const pageSizeChanges = currentPage != null && (Math.round(nextSize.w) !== Math.round(currentPage.size.w) || Math.round(nextSize.h) !== Math.round(currentPage.size.h));
1050
+ if (currentPage === void 0 || !physicalColumnRegionIsShared({
1051
+ pageSize: currentPage.size,
1052
+ margins: currentPage.margins,
1053
+ columns: paginator.columns
1054
+ }, nextSectionConfig)) {
1055
+ startSectionInPlace(paginator, nextSectionConfig, nextSectionIndex);
1056
+ break;
1057
+ }
1020
1058
  if (nextSectionIndex !== void 0) paginator.startSection({
1021
1059
  sectionIndex: nextSectionIndex,
1022
1060
  pageNumbering: nextSectionConfig.pageNumbering,
1023
- placement: pageSizeChanges ? SECTION_START_PLACEMENT.NEXT_PAGE : SECTION_START_PLACEMENT.CONTINUOUS
1061
+ placement: SECTION_START_PLACEMENT.CONTINUOUS
1024
1062
  });
1025
- if (pageSizeChanges) {
1026
- paginator.updatePageLayout(nextSize, nextSectionConfig.margins);
1027
- if (!paginator.retargetCurrentBlankPage()) paginator.forcePageBreak({ coalesceBlankPage: true });
1028
- } else {
1029
- paginator.updatePageLayout(nextSize, nextSectionConfig.margins, false);
1030
- paginator.retargetCurrentBlankPage();
1031
- }
1032
- break;
1063
+ paginator.updatePageLayout(nextSectionConfig.pageSize, nextSectionConfig.margins, false);
1064
+ paginator.forceColumnBreak();
1065
+ return;
1033
1066
  }
1034
- default: break;
1067
+ case "continuous":
1068
+ startSectionInPlace(paginator, nextSectionConfig, nextSectionIndex);
1069
+ break;
1070
+ default:
1035
1071
  }
1036
1072
  paginator.updateColumns(nextSectionConfig.columns ?? DEFAULT_COLUMNS);
1037
1073
  }
1038
1074
  //#endregion
1039
- export { DEFAULT_TEXTBOX_MARGINS, DEFAULT_TEXTBOX_WIDTH, FOOTNOTE_ENTRY_MARGIN_BOTTOM, FOOTNOTE_FALLBACK_LINE_HEIGHT, FOOTNOTE_SEPARATOR_HEIGHT, applyContextualSpacing, applyPendingToActive, assertExhaustiveFlowBlock, calculateChainHeight, collectSectionConfigs, computeKeepNextChains, createInitialSectionState, createPaginator, findPageIndexContainingPmPos, floatingTextBoxReservesBand, floatingTextBoxWrapsText, getEffectiveColumns, getEffectiveMargins, getEffectivePageSize, getHeaderRowsHeight, getMidChainIndices, getTableRowLeadingWidth, hasKeepLines, hasPageBreakBefore, isFloatingImageRun, isFloatingTextBoxBlock, isTextWrappingFloatingImageRun, layoutDocument, resolveSectionHeaderFooterRefs, resolveTableCellPadding, resolveTableWidthPx, scheduleSectionBreak, tableColumnsArePinned };
1075
+ export { DEFAULT_TEXTBOX_MARGINS, DEFAULT_TEXTBOX_WIDTH, FOOTNOTE_ENTRY_MARGIN_BOTTOM, FOOTNOTE_FALLBACK_LINE_HEIGHT, FOOTNOTE_SEPARATOR_HEIGHT, applyContextualSpacing, applyPendingToActive, assertExhaustiveFlowBlock, calculateChainHeight, collectSectionConfigs, computeKeepNextChains, createInitialSectionState, createPaginator, findPageIndexContainingPmPos, floatingTextBoxReservesBand, floatingTextBoxWrapsText, getEffectiveColumns, getEffectiveMargins, getEffectivePageSize, getHeaderRowsHeight, getMidChainIndices, getTableRowLeadingWidth, hasKeepLines, hasPageBreakBefore, isFloatingImageRun, isFloatingTextBoxBlock, isListNumPr, isTextWrappingFloatingImageRun, layoutDocument, resolveSectionHeaderFooterRefs, resolveTableCellPadding, resolveTableWidthPx, scheduleSectionBreak, tableColumnsArePinned };
@@ -1,4 +1,5 @@
1
1
  import { FlowBlock, Measure, TableBlock, TableMeasure, TextBoxBlock, TextBoxMeasure } from "../types.js";
2
+ import { SectionStartAdvance } from "../section-breaks.js";
2
3
  import { FloatingImageZone } from "./floatingZones.js";
3
4
  import "./measureParagraph.js";
4
5
  //#region src/layout-engine/measure/measureBlocks.d.ts
@@ -28,6 +29,8 @@ type BandPageGeometry = {
28
29
  columnIndex?: number | number[];
29
30
  /** Authored flow-column count for each block's section. */
30
31
  columnCount?: number | number[];
32
+ /** Resolved paginator transition at each section-break block. */
33
+ sectionAdvances?: readonly (SectionStartAdvance | undefined)[];
31
34
  };
32
35
  /**
33
36
  * Measure a block based on its type.
@@ -1,7 +1,7 @@
1
1
  import { hasPageBreakBefore } from "../keep-together.js";
2
2
  import { recordMeasureBlock, recordMeasureBlockError } from "../layoutInstrumentation.js";
3
3
  import { isParagraphFrameTextBox } from "../paragraphFrame.js";
4
- import { normalizeSectionBreakType } from "../section-breaks.js";
4
+ import { sectionStartAdvanceOf } from "../section-breaks.js";
5
5
  import { bandFragmentX, bandTopContentY, isPageFrameRelativeAnchor } from "../textBoxFlow.js";
6
6
  import { getTextBoxGroupId } from "../textBoxGroup.js";
7
7
  import { DEFAULT_TEXTBOX_MARGINS, floatingTextBoxReservesBand, floatingTextBoxWrapsText, resolveTableCellPadding, resolveTableWidthPx, tableColumnsArePinned } from "../types.js";
@@ -589,12 +589,6 @@ function measureTextBoxBlock(tb, fieldValues) {
589
589
  innerMeasures
590
590
  };
591
591
  }
592
- function isNextPageSectionBreak(block) {
593
- return block.kind === "sectionBreak" && normalizeSectionBreakType(block.type) !== "continuous";
594
- }
595
- function isContinuousSectionBreak(block) {
596
- return block.kind === "sectionBreak" && normalizeSectionBreakType(block.type) === "continuous";
597
- }
598
592
  /**
599
593
  * Measure all blocks with floating image support.
600
594
  *
@@ -657,6 +651,7 @@ function measureBlocks(blocks, contentWidth, marginTop = 0, pageGeometry, fieldV
657
651
  const defaultPhysicalMarginTop = Array.isArray(physicalMarginTopInput) ? physicalMarginTopInput[0] ?? 0 : physicalMarginTopInput;
658
652
  const columnIndexInput = pageGeometry?.columnIndex ?? 0;
659
653
  const columnCountInput = pageGeometry?.columnCount ?? 1;
654
+ const sectionAdvances = pageGeometry?.sectionAdvances;
660
655
  return blocks.map((block, blockIndex) => {
661
656
  recordMeasureBlock(blockIndex, block);
662
657
  const blockWidth = Array.isArray(contentWidth) ? contentWidth[blockIndex] ?? defaultWidth : contentWidth;
@@ -664,13 +659,14 @@ function measureBlocks(blocks, contentWidth, marginTop = 0, pageGeometry, fieldV
664
659
  const blockContentTop = perBlockNumberValue(physicalMarginTopInput, blockIndex, defaultPhysicalMarginTop);
665
660
  const blockColumnIndex = perBlockNumberValue(columnIndexInput, blockIndex, 0);
666
661
  const blockColumnCount = perBlockNumberValue(columnCountInput, blockIndex, 1);
667
- if (block.kind === "pageBreak" || isNextPageSectionBreak(block) || hasPageBreakBefore(block)) {
662
+ const sectionAdvance = sectionAdvances?.[blockIndex] ?? (block.kind === "sectionBreak" ? sectionStartAdvanceOf(block.type) : void 0);
663
+ if (block.kind === "pageBreak" || sectionAdvance === "page" || hasPageBreakBefore(block)) {
668
664
  activeZones = [];
669
665
  activeTablePageRects = [];
670
666
  cumulativeY = 0;
671
667
  pageRelativeY = 0;
672
668
  columnRegionMaxBottom = 0;
673
- } else if (block.kind === "columnBreak") {
669
+ } else if (block.kind === "columnBreak" || sectionAdvance === "column") {
674
670
  if (blockColumnIndex + 1 >= blockColumnCount) {
675
671
  activeZones = [];
676
672
  activeTablePageRects = [];
@@ -708,7 +704,7 @@ function measureBlocks(blocks, contentWidth, marginTop = 0, pageGeometry, fieldV
708
704
  cumulativeY += measure.totalHeight;
709
705
  pageRelativeY += measure.totalHeight;
710
706
  }
711
- if (isContinuousSectionBreak(block)) {
707
+ if (sectionAdvance === "region") {
712
708
  const nextSectionY = Math.max(pageRelativeY, columnRegionMaxBottom);
713
709
  cumulativeY = nextSectionY;
714
710
  pageRelativeY = nextSectionY;
@@ -8,6 +8,8 @@ type TableCellFloatingImage = {
8
8
  alt?: string;
9
9
  transform?: string;
10
10
  opacity?: number;
11
+ brightness?: number;
12
+ contrast?: number;
11
13
  cropTop?: number;
12
14
  cropRight?: number;
13
15
  cropBottom?: number;
@@ -68,6 +68,8 @@ function getTableCellFloatingImages(cell, cellMeasure, contentWidth, resolvePosi
68
68
  ...run.alt !== void 0 ? { alt: run.alt } : {},
69
69
  ...run.transform !== void 0 ? { transform: run.transform } : {},
70
70
  ...run.opacity != null ? { opacity: run.opacity } : {},
71
+ ...run.brightness != null ? { brightness: run.brightness } : {},
72
+ ...run.contrast != null ? { contrast: run.contrast } : {},
71
73
  ...run.cropTop != null ? { cropTop: run.cropTop } : {},
72
74
  ...run.cropRight != null ? { cropRight: run.cropRight } : {},
73
75
  ...run.cropBottom != null ? { cropBottom: run.cropBottom } : {},
@@ -1,3 +1,4 @@
1
+ import { paintsCssBorder } from "../../utils/borderCss.js";
1
2
  //#region src/layout-engine/measure/tableCellGrid.ts
2
3
  const buildTableCellGrid = (rows, columnCount) => {
3
4
  const occupiedColumnsByRow = /* @__PURE__ */ new Map();
@@ -59,7 +60,7 @@ const buildTableCellPlacements = ({ grid, columnWidths, bidi }) => {
59
60
  const getTableCellVerticalBorderHeight = (grid, cell, rowIndex) => {
60
61
  const sourceColumn = cell ? getSourceCellColumn(grid, cell) : void 0;
61
62
  const aboveBottom = (sourceColumn === void 0 ? void 0 : getSourceCellAt(grid, rowIndex - 1, sourceColumn))?.borders?.bottom;
62
- const aboveOwnsEdge = aboveBottom !== void 0 && aboveBottom.style !== "none" && aboveBottom.style !== "nil";
63
+ const aboveOwnsEdge = aboveBottom !== void 0 && paintsCssBorder(aboveBottom.style);
63
64
  return (rowIndex === 0 || !aboveOwnsEdge ? cell?.borders?.top?.width ?? 0 : 0) + (cell?.borders?.bottom?.width ?? 0);
64
65
  };
65
66
  const firstAvailableColumn = (occupiedColumns, startingColumn) => {
@@ -1,6 +1,7 @@
1
+ import { paintsCssBorder } from "../../utils/borderCss.js";
1
2
  import { buildTableCellGrid, buildTableCellPlacements } from "./tableCellGrid.js";
2
3
  //#region src/layout-engine/measure/tableFragmentBorderGeometry.ts
3
- const isVisible = (border) => border !== void 0 && border.style !== "none" && border.style !== "nil";
4
+ const isVisible = (border) => border !== void 0 && paintsCssBorder(border.style);
4
5
  const tableFragmentBottomBorders = ({ fragment, block, measure, placements: suppliedPlacements }) => {
5
6
  if (fragment.continuesOnNext !== true || fragment.bottomClip === void 0) return [];
6
7
  const splitRow = block.rows.at(fragment.toRow - 1);
@@ -1,3 +1,4 @@
1
+ import { resolveTablePlacementAlignment } from "../../utils/tablePlacement.js";
1
2
  import { resolveTableCellPadding } from "../types.js";
2
3
  //#region src/layout-engine/measure/tableInlinePlacement.ts
3
4
  /**
@@ -17,12 +18,8 @@ const resolveTableInlinePlacement = (table, rowJustification) => {
17
18
  const logicalJustification = rowJustification ?? table.justification ?? "left";
18
19
  if (logicalJustification === "center") return { alignment: "center" };
19
20
  const offset = logicalJustification === "left" ? (table.indent ?? 0) - leadingEdgeCompensation(table) : 0;
20
- if (table.bidi !== true) return {
21
- alignment: logicalJustification,
22
- offset
23
- };
24
21
  return {
25
- alignment: logicalJustification === "left" ? "right" : "left",
22
+ alignment: resolveTablePlacementAlignment(logicalJustification, table.bidi === true),
26
23
  offset
27
24
  };
28
25
  };
@@ -1,10 +1,11 @@
1
+ import { sameStatedParagraphNumbering } from "@stll/docx-core/model";
1
2
  //#region src/layout-engine/paragraphSequence.ts
2
3
  const continuesNumberedSequence = (previous, current) => {
3
4
  if (previous?.kind !== "paragraph" || current.kind !== "paragraph") return false;
4
5
  const previousNumPr = previous.attrs?.numPr;
5
6
  const currentNumPr = current.attrs?.numPr;
6
- if (previousNumPr?.numId === void 0 || currentNumPr?.numId === void 0) return false;
7
- return previousNumPr.numId === currentNumPr.numId && previousNumPr.ilvl === currentNumPr.ilvl;
7
+ if (previousNumPr?.kind !== "reference" || currentNumPr?.kind !== "reference") return false;
8
+ return sameStatedParagraphNumbering(previousNumPr, currentNumPr);
8
9
  };
9
10
  const continuesTabbedParagraphSequence = (previous, current) => {
10
11
  if (previous?.kind !== "paragraph" || current.kind !== "paragraph") return false;
@@ -1,3 +1,4 @@
1
+ import { paintsCssBorder } from "../utils/borderCss.js";
1
2
  import { continuesNumberedSequence, continuesTabbedParagraphSequence } from "./paragraphSequence.js";
2
3
  //#region src/layout-engine/renderedBreakReconciliation.ts
3
4
  const INITIAL_RENDERED_BREAK_STATE = { type: "noPageAdvance" };
@@ -98,7 +99,7 @@ const isPaginationEmptyParagraph = (block) => !hasVisibleEmptyParagraphDecoratio
98
99
  const hasVisibleEmptyParagraphDecoration = (block) => {
99
100
  if (block.attrs?.listMarker !== void 0 && block.attrs.listMarker.length > 0 && block.attrs.listMarkerHidden !== true) return true;
100
101
  if (block.attrs?.shading) return true;
101
- return Object.values(block.attrs?.borders ?? {}).some((border) => border !== void 0 && border.style !== "none" && border.style !== "nil" && border.width !== 0);
102
+ return Object.values(block.attrs?.borders ?? {}).some((border) => border !== void 0 && paintsCssBorder(border.style) && border.width !== 0);
102
103
  };
103
104
  const pageHasVisibleBodyContent = (page, blocksById) => {
104
105
  for (const fragment of page.fragments) {
@@ -1,4 +1,5 @@
1
1
  import { ColumnLayout, PageMargins, SectionBreakBlock } from "./types.js";
2
+ import { SectionStart } from "@stll/docx-core/model";
2
3
  //#region src/layout-engine/section-breaks.d.ts
3
4
  /**
4
5
  * State tracking for sections during layout.
@@ -53,8 +54,54 @@ type BreakDecision = {
53
54
  /** Required page parity (even or odd). */
54
55
  requiredParity?: "even" | "odd";
55
56
  };
57
+ /** `w:sectPr` may omit `w:type`; §17.6.22's omitted value is `nextPage`. */
56
58
  declare const DEFAULT_SECTION_BREAK_TYPE = "nextPage";
57
- declare function normalizeSectionBreakType(type: SectionBreakBlock["type"]): "continuous" | "nextPage" | "evenPage" | "oddPage";
59
+ /**
60
+ * The section start a boundary states, with the omitted value resolved.
61
+ *
62
+ * Absence is a reading the specification gives; a value outside
63
+ * `ST_SectionMark` is not, so it panics rather than resolving to the same
64
+ * default and hiding whichever producer invented it.
65
+ */
66
+ declare function normalizeSectionBreakType(sectionStart: SectionBreakBlock["type"]): SectionStart;
67
+ /**
68
+ * What a section start does to the page it begins on.
69
+ *
70
+ * - `page`: it opens a new sheet.
71
+ * - `column`: it begins in the next column of the region it shares with the
72
+ * outgoing section (§17.18.77), and opens a sheet only when that region has
73
+ * no further column.
74
+ * - `region`: it begins in place, below the outgoing content.
75
+ */
76
+ declare const SECTION_START_ADVANCE: {
77
+ readonly nextPage: "page";
78
+ readonly evenPage: "page";
79
+ readonly oddPage: "page";
80
+ readonly nextColumn: "column";
81
+ readonly continuous: "region";
82
+ };
83
+ type SectionStartAdvance = (typeof SECTION_START_ADVANCE)[SectionStart];
84
+ /** The disposition of the section starting at a boundary. Total over `ST_SectionMark`. */
85
+ declare const sectionStartAdvanceOf: (sectionStart: SectionBreakBlock["type"]) => SectionStartAdvance;
86
+ /**
87
+ * Whether a section start can continue into the column region the outgoing
88
+ * section occupies: it needs a further column, and the incoming section has to
89
+ * repeat the geometry rather than redefine it.
90
+ */
91
+ declare const columnRegionIsShared: (active: ColumnLayout, next: ColumnLayout | undefined) => boolean;
92
+ type PhysicalColumnRegion = {
93
+ pageSize: {
94
+ w: number;
95
+ h: number;
96
+ };
97
+ margins: PageMargins;
98
+ columns: ColumnLayout;
99
+ };
100
+ type CandidatePhysicalColumnRegion = Omit<PhysicalColumnRegion, "columns"> & {
101
+ columns?: ColumnLayout;
102
+ };
103
+ /** Whether two sections describe the same physical column region on a sheet. */
104
+ declare const physicalColumnRegionIsShared: (active: PhysicalColumnRegion, next: CandidatePhysicalColumnRegion) => boolean;
58
105
  /**
59
106
  * Create initial section state from default options.
60
107
  */
@@ -94,4 +141,4 @@ declare function getEffectivePageSize(state: SectionState): {
94
141
  */
95
142
  declare function getEffectiveColumns(state: SectionState): ColumnLayout;
96
143
  //#endregion
97
- export { BreakDecision, DEFAULT_SECTION_BREAK_TYPE, SectionState, applyPendingToActive, createInitialSectionState, getEffectiveColumns, getEffectiveMargins, getEffectivePageSize, normalizeSectionBreakType, scheduleSectionBreak };
144
+ export { BreakDecision, DEFAULT_SECTION_BREAK_TYPE, SectionStartAdvance, SectionState, applyPendingToActive, columnRegionIsShared, createInitialSectionState, getEffectiveColumns, getEffectiveMargins, getEffectivePageSize, normalizeSectionBreakType, physicalColumnRegionIsShared, scheduleSectionBreak, sectionStartAdvanceOf };
@@ -1,16 +1,66 @@
1
+ import { panic } from "better-result";
1
2
  //#region src/layout-engine/section-breaks.ts
2
3
  /**
4
+ * Section Breaks - Handle page layout changes at section boundaries
5
+ *
6
+ * Sections in DOCX can have different page sizes, margins, columns, and orientations.
7
+ * This module manages the state transitions between sections during layout.
8
+ */
9
+ /**
3
10
  * Default single-column layout.
4
11
  */
5
12
  const DEFAULT_COLUMNS = {
6
13
  count: 1,
7
14
  gap: 0
8
15
  };
16
+ /** `w:sectPr` may omit `w:type`; §17.6.22's omitted value is `nextPage`. */
9
17
  const DEFAULT_SECTION_BREAK_TYPE = "nextPage";
10
- function normalizeSectionBreakType(type) {
11
- return type ?? "nextPage";
18
+ /**
19
+ * The section start a boundary states, with the omitted value resolved.
20
+ *
21
+ * Absence is a reading the specification gives; a value outside
22
+ * `ST_SectionMark` is not, so it panics rather than resolving to the same
23
+ * default and hiding whichever producer invented it.
24
+ */
25
+ function normalizeSectionBreakType(sectionStart) {
26
+ switch (sectionStart) {
27
+ case void 0: return DEFAULT_SECTION_BREAK_TYPE;
28
+ case "nextPage":
29
+ case "nextColumn":
30
+ case "continuous":
31
+ case "evenPage":
32
+ case "oddPage": return sectionStart;
33
+ default: return panic(`Section break: "${String(sectionStart)}" is not an ST_SectionMark member`);
34
+ }
12
35
  }
13
36
  /**
37
+ * What a section start does to the page it begins on.
38
+ *
39
+ * - `page`: it opens a new sheet.
40
+ * - `column`: it begins in the next column of the region it shares with the
41
+ * outgoing section (§17.18.77), and opens a sheet only when that region has
42
+ * no further column.
43
+ * - `region`: it begins in place, below the outgoing content.
44
+ */
45
+ const SECTION_START_ADVANCE = {
46
+ nextPage: "page",
47
+ evenPage: "page",
48
+ oddPage: "page",
49
+ nextColumn: "column",
50
+ continuous: "region"
51
+ };
52
+ /** The disposition of the section starting at a boundary. Total over `ST_SectionMark`. */
53
+ const sectionStartAdvanceOf = (sectionStart) => SECTION_START_ADVANCE[normalizeSectionBreakType(sectionStart)];
54
+ const sameTrack = (left, right) => left === void 0 || right === void 0 ? left === right : left.length === right.length && left.every((value, index) => value === right[index]);
55
+ /**
56
+ * Whether a section start can continue into the column region the outgoing
57
+ * section occupies: it needs a further column, and the incoming section has to
58
+ * repeat the geometry rather than redefine it.
59
+ */
60
+ const columnRegionIsShared = (active, next) => active.count > 1 && next !== void 0 && next.count === active.count && next.gap === active.gap && sameTrack(active.widths, next.widths) && sameTrack(active.gaps, next.gaps);
61
+ /** Whether two sections describe the same physical column region on a sheet. */
62
+ const physicalColumnRegionIsShared = (active, next) => Math.round(active.pageSize.w) === Math.round(next.pageSize.w) && Math.round(active.pageSize.h) === Math.round(next.pageSize.h) && active.margins.top === next.margins.top && active.margins.right === next.margins.right && active.margins.bottom === next.margins.bottom && active.margins.left === next.margins.left && columnRegionIsShared(active.columns, next.columns);
63
+ /**
14
64
  * Create initial section state from default options.
15
65
  */
16
66
  function createInitialSectionState(margins, pageSize, columns) {
@@ -102,7 +152,8 @@ function scheduleSectionBreak(block, state, _baseMargins) {
102
152
  },
103
153
  state: next
104
154
  };
105
- default:
155
+ case "nextColumn":
156
+ case "continuous":
106
157
  if (columnsChanging) {
107
158
  next.pendingColumns = getColumnConfig();
108
159
  return {
@@ -183,4 +234,4 @@ function getEffectiveColumns(state) {
183
234
  return state.pendingColumns ?? state.activeColumns;
184
235
  }
185
236
  //#endregion
186
- export { DEFAULT_SECTION_BREAK_TYPE, applyPendingToActive, createInitialSectionState, getEffectiveColumns, getEffectiveMargins, getEffectivePageSize, normalizeSectionBreakType, scheduleSectionBreak };
237
+ export { DEFAULT_SECTION_BREAK_TYPE, applyPendingToActive, columnRegionIsShared, createInitialSectionState, getEffectiveColumns, getEffectiveMargins, getEffectivePageSize, normalizeSectionBreakType, physicalColumnRegionIsShared, scheduleSectionBreak, sectionStartAdvanceOf };