@stll/folio-core 0.15.0 → 0.15.1

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 (439) hide show
  1. package/dist/ai-edits/apply.d.ts +2 -2
  2. package/dist/ai-edits/blockRange.d.ts +3 -17
  3. package/dist/ai-edits/clean-text.d.ts +0 -1
  4. package/dist/ai-edits/headless.d.ts +23 -19
  5. package/dist/ai-edits/read.d.ts +8 -5
  6. package/dist/ai-edits/scoped-reading.d.ts +0 -1
  7. package/dist/ai-edits/snapshot.d.ts +1 -7
  8. package/dist/ai-edits/table-cell-mutations.d.ts +4 -31
  9. package/dist/ai-edits/table-row-column-mutations.d.ts +9 -39
  10. package/dist/ai-edits/table-targets.d.ts +0 -1
  11. package/dist/ai-edits/types.d.ts +32 -17
  12. package/dist/ai-suggestions/apply.d.ts +0 -1
  13. package/dist/ai-suggestions/conflict.d.ts +0 -1
  14. package/dist/ai-suggestions/text-positions.d.ts +2 -2
  15. package/dist/ai-suggestions/types.d.ts +27 -13
  16. package/dist/content-controls/errors.d.ts +0 -1
  17. package/dist/content-controls/findContentControls.d.ts +6 -4
  18. package/dist/content-controls/mutateContentControls.d.ts +0 -1
  19. package/dist/controller/activeEditorStory.d.ts +1 -6
  20. package/dist/controller/collaborationModules.d.ts +0 -1
  21. package/dist/controller/contentControlWidgetController.d.ts +0 -1
  22. package/dist/controller/folioEditor.d.ts +2 -2
  23. package/dist/controller/folioEditorEvents.d.ts +5 -3
  24. package/dist/controller/fontReadiness.d.ts +0 -1
  25. package/dist/controller/headerFooterEditorManager.d.ts +1 -5
  26. package/dist/controller/hiddenEditorApi.d.ts +35 -18
  27. package/dist/controller/hiddenEditorManager.d.ts +5 -3
  28. package/dist/controller/latestRequestGate.d.ts +3 -1
  29. package/dist/controller/layoutPipeline.d.ts +1 -1
  30. package/dist/controller/layoutScheduler.d.ts +8 -5
  31. package/dist/controller/layoutSession.d.ts +0 -1
  32. package/dist/controller/noteEditorManager.d.ts +0 -1
  33. package/dist/document-operations.d.ts +5 -12
  34. package/dist/document-stories.d.ts +0 -1
  35. package/dist/docx/blockContentParser.d.ts +0 -1
  36. package/dist/docx/blockContentParser.js +1 -0
  37. package/dist/docx/bookmarkParser.d.ts +5 -3
  38. package/dist/docx/bookmarkPlacement.d.ts +0 -1
  39. package/dist/docx/commentParser.d.ts +0 -1
  40. package/dist/docx/commentRangeIntegrity.d.ts +0 -1
  41. package/dist/docx/commentReferenceNormalization.d.ts +1 -9
  42. package/dist/docx/commentReplyMarkers.d.ts +0 -1
  43. package/dist/docx/compatibility.d.ts +0 -1
  44. package/dist/docx/conformance.d.ts +0 -1
  45. package/dist/docx/corePropertiesParser.d.ts +0 -1
  46. package/dist/docx/documentParser.d.ts +0 -1
  47. package/dist/docx/documentParser.js +3 -1
  48. package/dist/docx/drawingUtils.d.ts +23 -2
  49. package/dist/docx/drawingUtils.js +23 -1
  50. package/dist/docx/encryption/agileDecryption.d.ts +0 -1
  51. package/dist/docx/encryption/cryptoBytes.js +4 -1
  52. package/dist/docx/encryption/openEncryptedDocx.d.ts +5 -2
  53. package/dist/docx/ensureParaIds.d.ts +7 -3
  54. package/dist/docx/fieldParser.d.ts +23 -11
  55. package/dist/docx/fontTableParser.d.ts +0 -1
  56. package/dist/docx/footnoteParser.d.ts +26 -13
  57. package/dist/docx/footnoteParser.js +4 -2
  58. package/dist/docx/groupDrawingParser.d.ts +0 -1
  59. package/dist/docx/headerFooterParser.d.ts +9 -5
  60. package/dist/docx/headerFooterRefParser.d.ts +0 -1
  61. package/dist/docx/headerFooterReferenceNormalization.d.ts +1 -6
  62. package/dist/docx/headerFooterVerbatim.d.ts +2 -2
  63. package/dist/docx/hyperlinkParser.d.ts +0 -1
  64. package/dist/docx/hyperlinkParser.js +1 -9
  65. package/dist/docx/imageParser.d.ts +0 -1
  66. package/dist/docx/imageParser.js +15 -7
  67. package/dist/docx/mathToMathml.d.ts +0 -1
  68. package/dist/docx/metadataPrivacy.d.ts +1 -3
  69. package/dist/docx/modelValidation.d.ts +0 -1
  70. package/dist/docx/newImage.d.ts +11 -0
  71. package/dist/docx/newImage.js +11 -0
  72. package/dist/docx/normalizeBaseDirection.d.ts +0 -1
  73. package/dist/docx/notePropertiesParser.d.ts +0 -1
  74. package/dist/docx/numberingParser.d.ts +10 -6
  75. package/dist/docx/numberingParser.js +4 -2
  76. package/dist/docx/numberingReferenceNormalization.d.ts +1 -9
  77. package/dist/docx/paragraphParser.d.ts +0 -1
  78. package/dist/docx/paragraphParser.js +27 -14
  79. package/dist/docx/paragraphTextBoxEnrichment.d.ts +0 -1
  80. package/dist/docx/paragraphTextBoxEnrichment.js +2 -1
  81. package/dist/docx/paragraphTraversal.d.ts +1 -8
  82. package/dist/docx/parser.d.ts +15 -8
  83. package/dist/docx/parser.js +12 -1
  84. package/dist/docx/parserEnums.d.ts +2 -2
  85. package/dist/docx/parserEnums.js +3 -2
  86. package/dist/docx/relsParser.d.ts +1 -0
  87. package/dist/docx/renderedPageBreakNormalization.d.ts +12 -0
  88. package/dist/docx/renderedPageBreakNormalization.js +59 -0
  89. package/dist/docx/replyToComment.d.ts +2 -2
  90. package/dist/docx/rezip.d.ts +6 -7
  91. package/dist/docx/rezip.js +136 -102
  92. package/dist/docx/runConsolidator.d.ts +0 -1
  93. package/dist/docx/runParser.d.ts +0 -1
  94. package/dist/docx/runParser.js +9 -12
  95. package/dist/docx/sdtProperties.d.ts +0 -1
  96. package/dist/docx/sdtPropertiesPatch.d.ts +0 -1
  97. package/dist/docx/sectionParser.d.ts +0 -1
  98. package/dist/docx/selectiveSave.d.ts +5 -3
  99. package/dist/docx/selectiveSave.js +2 -2
  100. package/dist/docx/selectiveSaveFlags.d.ts +4 -2
  101. package/dist/docx/selectiveXmlPatch.js +20 -8
  102. package/dist/docx/serializer/blockSdtSerializer.d.ts +0 -1
  103. package/dist/docx/serializer/blockSdtSerializer.js +2 -1
  104. package/dist/docx/serializer/borderSerializer.d.ts +0 -1
  105. package/dist/docx/serializer/commentSerializer.d.ts +0 -1
  106. package/dist/docx/serializer/commentSerializer.js +11 -37
  107. package/dist/docx/serializer/documentSerializer.d.ts +0 -1
  108. package/dist/docx/serializer/documentSerializer.js +1 -1
  109. package/dist/docx/serializer/fontTableSerializer.d.ts +0 -1
  110. package/dist/docx/serializer/headerFooterSerializer.d.ts +0 -1
  111. package/dist/docx/serializer/headerFooterSerializer.js +1 -1
  112. package/dist/docx/serializer/noteSerializer.d.ts +0 -1
  113. package/dist/docx/serializer/noteSerializer.js +1 -1
  114. package/dist/docx/serializer/numberingSerializer.d.ts +0 -1
  115. package/dist/docx/serializer/paragraphSerializer.d.ts +0 -1
  116. package/dist/docx/serializer/paragraphSerializer.js +10 -23
  117. package/dist/docx/serializer/runSerializer.d.ts +0 -1
  118. package/dist/docx/serializer/runSerializer.js +37 -22
  119. package/dist/docx/serializer/sectionPropertiesSerializer.d.ts +0 -1
  120. package/dist/docx/serializer/sectionPropertiesSerializer.js +5 -4
  121. package/dist/docx/serializer/settingsSerializer.d.ts +0 -1
  122. package/dist/docx/serializer/stylesSerializer.d.ts +0 -1
  123. package/dist/docx/serializer/tableSerializer.d.ts +0 -1
  124. package/dist/docx/serializer/tableSerializer.js +2 -0
  125. package/dist/docx/serializer/themeSerializer.d.ts +0 -1
  126. package/dist/docx/serializer/xmlUtils.js +10 -1
  127. package/dist/docx/server/applyDocxXmlPatchProposal.d.ts +3 -10
  128. package/dist/docx/server/docxToMarkdown.d.ts +0 -1
  129. package/dist/docx/server/evaluateDocxXmlPatchProposal.d.ts +3 -9
  130. package/dist/docx/server/inspectDocxPackage.d.ts +3 -8
  131. package/dist/docx/server/validateDocxConformance.d.ts +0 -1
  132. package/dist/docx/settingsParser.d.ts +2 -2
  133. package/dist/docx/shapeParser.d.ts +0 -1
  134. package/dist/docx/shapeParser.js +11 -10
  135. package/dist/docx/streamingXmlParser.d.ts +16 -0
  136. package/dist/docx/streamingXmlParser.js +248 -0
  137. package/dist/docx/styleParser.d.ts +0 -1
  138. package/dist/docx/styleParser.js +6 -4
  139. package/dist/docx/tableParser.d.ts +1 -2
  140. package/dist/docx/tableParser.js +3 -6
  141. package/dist/docx/textBoxParser.d.ts +1 -2
  142. package/dist/docx/textBoxParser.js +4 -1
  143. package/dist/docx/textWhitespace.d.ts +4 -0
  144. package/dist/docx/textWhitespace.js +4 -0
  145. package/dist/docx/themeParser.d.ts +0 -1
  146. package/dist/docx/trackedMoveRangeNormalization.d.ts +1 -8
  147. package/dist/docx/unzip.d.ts +6 -3
  148. package/dist/docx/unzip.js +96 -40
  149. package/dist/docx/vmlImageParser.d.ts +0 -1
  150. package/dist/docx/vmlImageParser.js +3 -1
  151. package/dist/docx/watermarkParser.d.ts +0 -1
  152. package/dist/docx/xmlParser.d.ts +21 -8
  153. package/dist/docx/xmlParser.js +126 -43
  154. package/dist/fields/bookmarkPages.d.ts +0 -1
  155. package/dist/fields/bookmarkText.d.ts +0 -1
  156. package/dist/fields/evaluateField.d.ts +5 -3
  157. package/dist/fields/fieldContext.d.ts +11 -5
  158. package/dist/fields/resolveFieldValues.d.ts +4 -3
  159. package/dist/fields/sectionPageCounts.d.ts +0 -1
  160. package/dist/fields/seqValues.d.ts +0 -1
  161. package/dist/fonts/embeddedFontTable.d.ts +5 -2
  162. package/dist/fonts/embeddedFonts.d.ts +15 -7
  163. package/dist/index.d.ts +1 -0
  164. package/dist/layout-bridge/cellSelectionHighlight.d.ts +0 -1
  165. package/dist/layout-bridge/convert/footnoteLayout.d.ts +5 -3
  166. package/dist/layout-bridge/convert/headerFooterLayout.d.ts +2 -2
  167. package/dist/layout-bridge/convert/paragraphFrames.d.ts +0 -1
  168. package/dist/layout-bridge/convert/templatePreviewFlow.d.ts +8 -8
  169. package/dist/layout-bridge/convert/toFlowBlocks.d.ts +25 -13
  170. package/dist/layout-bridge/convert/wrapEditorViewAsSurface.d.ts +3 -2
  171. package/dist/layout-bridge/dom/findHfPmSpans.d.ts +2 -1
  172. package/dist/layout-bridge/dom/noteStoryDom.d.ts +0 -1
  173. package/dist/layout-bridge/engine/clickToPosition.d.ts +5 -3
  174. package/dist/layout-bridge/engine/hitTest.d.ts +40 -19
  175. package/dist/layout-bridge/engine/selectionRects.d.ts +16 -8
  176. package/dist/layout-bridge/engine/tableWidthUtils.d.ts +0 -1
  177. package/dist/layout-bridge/headerFooterLayout.d.ts +0 -1
  178. package/dist/layout-bridge/sectionColumns.d.ts +0 -1
  179. package/dist/layout-bridge/tableInsertHover.d.ts +8 -4
  180. package/dist/layout-engine/headerFooterRefs.d.ts +0 -1
  181. package/dist/layout-engine/index.d.ts +0 -1
  182. package/dist/layout-engine/justificationCompatibility.d.ts +0 -1
  183. package/dist/layout-engine/keep-together.d.ts +7 -4
  184. package/dist/layout-engine/layoutInstrumentation.d.ts +0 -1
  185. package/dist/layout-engine/lineFlow.d.ts +0 -1
  186. package/dist/layout-engine/measure/cache.d.ts +0 -1
  187. package/dist/layout-engine/measure/effectiveLineBreakPolicy.d.ts +6 -7
  188. package/dist/layout-engine/measure/floatingTablePosition.d.ts +0 -1
  189. package/dist/layout-engine/measure/floatingZones.d.ts +14 -6
  190. package/dist/layout-engine/measure/font-metrics.worker.d.ts +0 -1
  191. package/dist/layout-engine/measure/lineBreakProvider.d.ts +20 -9
  192. package/dist/layout-engine/measure/lineBreaks.d.ts +0 -1
  193. package/dist/layout-engine/measure/listMarkerWidth.d.ts +0 -1
  194. package/dist/layout-engine/measure/measureBlocks.d.ts +1 -0
  195. package/dist/layout-engine/measure/measureContainer.d.ts +0 -1
  196. package/dist/layout-engine/measure/measureHelpers.d.ts +0 -1
  197. package/dist/layout-engine/measure/measureParagraph.d.ts +3 -2
  198. package/dist/layout-engine/measure/measureParagraph.js +23 -3
  199. package/dist/layout-engine/measure/measureProvider.d.ts +0 -1
  200. package/dist/layout-engine/measure/measureTypes.d.ts +4 -2
  201. package/dist/layout-engine/measure/measureWorker.d.ts +0 -1
  202. package/dist/layout-engine/measure/measureWorkerProtocol.d.ts +0 -1
  203. package/dist/layout-engine/measure/tableCellFloating.d.ts +0 -1
  204. package/dist/layout-engine/measure/tableCellFlow.d.ts +0 -1
  205. package/dist/layout-engine/measure/tableCellGrid.d.ts +0 -1
  206. package/dist/layout-engine/measure/textBoxParagraphLayout.d.ts +0 -1
  207. package/dist/layout-engine/measure/textMeasurementPolicy.d.ts +0 -1
  208. package/dist/layout-engine/paginator.d.ts +66 -33
  209. package/dist/layout-engine/paragraphFragmentRange.d.ts +0 -1
  210. package/dist/layout-engine/paragraphFrame.d.ts +0 -1
  211. package/dist/layout-engine/paragraphSequence.d.ts +0 -1
  212. package/dist/layout-engine/paragraphSpacing.d.ts +1 -5
  213. package/dist/layout-engine/pmPageIndex.d.ts +0 -1
  214. package/dist/layout-engine/renderedBreakReconciliation.d.ts +2 -17
  215. package/dist/layout-engine/section-breaks.d.ts +34 -17
  216. package/dist/layout-engine/tableRowBreak.d.ts +4 -3
  217. package/dist/layout-engine/textBoxFlow.d.ts +0 -1
  218. package/dist/layout-engine/textBoxGroup.d.ts +0 -1
  219. package/dist/layout-engine/types.d.ts +382 -189
  220. package/dist/layout-painter/anchoredImagePosition.d.ts +0 -1
  221. package/dist/layout-painter/borderStroke.d.ts +0 -1
  222. package/dist/layout-painter/imageLayout.d.ts +14 -7
  223. package/dist/layout-painter/index.d.ts +9 -5
  224. package/dist/layout-painter/registry/modules/image.d.ts +0 -1
  225. package/dist/layout-painter/registry/modules/paragraph.d.ts +0 -1
  226. package/dist/layout-painter/registry/modules/table.d.ts +0 -1
  227. package/dist/layout-painter/registry/modules/textBox.d.ts +0 -1
  228. package/dist/layout-painter/registry/modules.d.ts +0 -1
  229. package/dist/layout-painter/registry/registry.d.ts +0 -1
  230. package/dist/layout-painter/registry/types.d.ts +0 -1
  231. package/dist/layout-painter/renderFragment.d.ts +2 -2
  232. package/dist/layout-painter/renderImage.d.ts +0 -1
  233. package/dist/layout-painter/renderPage.d.ts +71 -42
  234. package/dist/layout-painter/renderParagraph.d.ts +28 -14
  235. package/dist/layout-painter/renderParagraph.js +6 -2
  236. package/dist/layout-painter/renderTable.d.ts +0 -1
  237. package/dist/layout-painter/renderTextBox.d.ts +0 -1
  238. package/dist/layout-painter/renderUtils.d.ts +17 -9
  239. package/dist/layout-painter/renderWatermark.d.ts +2 -2
  240. package/dist/layout-painter/sdtBoundary.d.ts +0 -1
  241. package/dist/managers/AutoSaveManager.d.ts +22 -11
  242. package/dist/managers/ClipboardManager.d.ts +0 -1
  243. package/dist/managers/ContextMenuManager.d.ts +5 -8
  244. package/dist/managers/DocumentLoaderManager.d.ts +12 -6
  245. package/dist/managers/EditorModeManager.d.ts +3 -2
  246. package/dist/managers/ErrorManager.d.ts +0 -1
  247. package/dist/managers/FindReplaceManager.d.ts +0 -1
  248. package/dist/managers/HistoryManager.d.ts +19 -9
  249. package/dist/managers/TableSelectionManager.d.ts +0 -1
  250. package/dist/managers/editorShortcuts.d.ts +4 -6
  251. package/dist/markdown/annotations.d.ts +0 -1
  252. package/dist/markdown/fromMarkdown.d.ts +0 -1
  253. package/dist/markdown/images.d.ts +0 -1
  254. package/dist/markdown/index.d.ts +0 -1
  255. package/dist/markdown/internals.d.ts +0 -1
  256. package/dist/markdown/renderBlock.d.ts +0 -1
  257. package/dist/markdown/renderParagraph.d.ts +0 -1
  258. package/dist/markdown/renderRuns.d.ts +0 -1
  259. package/dist/markdown/renderTable.d.ts +0 -1
  260. package/dist/markdown/trailers.d.ts +0 -1
  261. package/dist/markdown/types.d.ts +39 -18
  262. package/dist/model.d.ts +3 -5
  263. package/dist/model.js +2 -2
  264. package/dist/paged-layout/incrementalMeasure.d.ts +1 -10
  265. package/dist/paged-layout/pageText.d.ts +1 -1
  266. package/dist/paged-layout/paragraphFlash.d.ts +0 -1
  267. package/dist/paged-layout/paragraphFlashTypes.d.ts +5 -2
  268. package/dist/paged-layout/rangeProjection.d.ts +10 -5
  269. package/dist/paged-layout/scrollNavigation.d.ts +0 -1
  270. package/dist/paged-layout/scrollPageInfo.d.ts +12 -13
  271. package/dist/paged-layout/scrollToPmPosition.d.ts +0 -1
  272. package/dist/paged-layout/sectionBlockWidths.d.ts +2 -11
  273. package/dist/paged-layout/sectionGeometry.d.ts +0 -1
  274. package/dist/paged-layout/selectionViewportRect.d.ts +0 -1
  275. package/dist/paged-layout/transactionDirtyRange.d.ts +0 -1
  276. package/dist/paged-layout/zoomScrollAnchor.d.ts +2 -12
  277. package/dist/prosemirror/attrs/index.d.ts +2 -2
  278. package/dist/prosemirror/attrs/index.js +5 -0
  279. package/dist/prosemirror/autospacingBase.d.ts +0 -1
  280. package/dist/prosemirror/cellDragSelection.d.ts +6 -4
  281. package/dist/prosemirror/commands/comments.d.ts +6 -4
  282. package/dist/prosemirror/commands/contentControls.d.ts +5 -3
  283. package/dist/prosemirror/commands/contentControlsBlockFill.d.ts +1 -1
  284. package/dist/prosemirror/commands/formatPainter.d.ts +0 -1
  285. package/dist/prosemirror/commands/formatting.d.ts +1 -1
  286. package/dist/prosemirror/commands/hyperlink.d.ts +4 -9
  287. package/dist/prosemirror/commands/image.d.ts +0 -1
  288. package/dist/prosemirror/commands/pageBreak.d.ts +0 -1
  289. package/dist/prosemirror/commands/paragraph.d.ts +0 -1
  290. package/dist/prosemirror/commands/pastePlainText.d.ts +0 -1
  291. package/dist/prosemirror/commands/propertyChangeScope.d.ts +0 -1
  292. package/dist/prosemirror/commands/sectionBreak.d.ts +0 -1
  293. package/dist/prosemirror/commands/table.d.ts +0 -1
  294. package/dist/prosemirror/commands/tableCellMergeResolution.d.ts +0 -1
  295. package/dist/prosemirror/commentIdAllocator.d.ts +2 -2
  296. package/dist/prosemirror/commentOps.d.ts +0 -1
  297. package/dist/prosemirror/conversion/effectiveTableCellFormatting.d.ts +1 -10
  298. package/dist/prosemirror/conversion/fromProseDoc.d.ts +0 -1
  299. package/dist/prosemirror/conversion/fromProseDoc.js +7 -4
  300. package/dist/prosemirror/conversion/runShadingMark.d.ts +0 -1
  301. package/dist/prosemirror/conversion/sdtAttrs.d.ts +0 -1
  302. package/dist/prosemirror/conversion/toProseDoc.d.ts +3 -2
  303. package/dist/prosemirror/conversion/toProseDoc.js +16 -2
  304. package/dist/prosemirror/extensions/ExtensionManager.d.ts +0 -1
  305. package/dist/prosemirror/extensions/StarterKit.d.ts +7 -4
  306. package/dist/prosemirror/extensions/core/DocExtension.d.ts +0 -1
  307. package/dist/prosemirror/extensions/core/HistoryExtension.d.ts +0 -1
  308. package/dist/prosemirror/extensions/core/ParagraphExtension.d.ts +0 -1
  309. package/dist/prosemirror/extensions/core/TextExtension.d.ts +0 -1
  310. package/dist/prosemirror/extensions/create.d.ts +0 -1
  311. package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.d.ts +0 -1
  312. package/dist/prosemirror/extensions/features/BaseKeymapExtension.d.ts +0 -1
  313. package/dist/prosemirror/extensions/features/BidiShortcutExtension.d.ts +0 -1
  314. package/dist/prosemirror/extensions/features/ContentControlWidgetsExtension.d.ts +0 -1
  315. package/dist/prosemirror/extensions/features/DropCursorExtension.d.ts +0 -1
  316. package/dist/prosemirror/extensions/features/EmptyParagraphFormatExtension.d.ts +0 -1
  317. package/dist/prosemirror/extensions/features/GapCursorExtension.d.ts +0 -1
  318. package/dist/prosemirror/extensions/features/ImageDragExtension.d.ts +0 -1
  319. package/dist/prosemirror/extensions/features/ImagePasteExtension.d.ts +0 -1
  320. package/dist/prosemirror/extensions/features/ListExtension.d.ts +0 -1
  321. package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.d.ts +0 -1
  322. package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.d.ts +7 -4
  323. package/dist/prosemirror/extensions/features/PasteCleanupExtension.d.ts +0 -1
  324. package/dist/prosemirror/extensions/features/PasteStyleInlinerExtension.d.ts +0 -1
  325. package/dist/prosemirror/extensions/features/SelectionTrackerExtension.d.ts +0 -1
  326. package/dist/prosemirror/extensions/features/bidiShortcutController.d.ts +3 -1
  327. package/dist/prosemirror/extensions/marks/AllCapsExtension.d.ts +0 -1
  328. package/dist/prosemirror/extensions/marks/BoldExtension.d.ts +0 -1
  329. package/dist/prosemirror/extensions/marks/CharacterSpacingExtension.d.ts +0 -1
  330. package/dist/prosemirror/extensions/marks/CharacterStyleExtension.d.ts +0 -1
  331. package/dist/prosemirror/extensions/marks/CommentExtension.d.ts +0 -1
  332. package/dist/prosemirror/extensions/marks/FontFamilyExtension.d.ts +0 -1
  333. package/dist/prosemirror/extensions/marks/FontFamilyExtension.js +1 -0
  334. package/dist/prosemirror/extensions/marks/FontSizeExtension.d.ts +0 -1
  335. package/dist/prosemirror/extensions/marks/FootnoteRefExtension.d.ts +0 -1
  336. package/dist/prosemirror/extensions/marks/HiddenTextExtension.d.ts +0 -1
  337. package/dist/prosemirror/extensions/marks/HighlightExtension.d.ts +0 -1
  338. package/dist/prosemirror/extensions/marks/HyperlinkExtension.d.ts +0 -1
  339. package/dist/prosemirror/extensions/marks/ItalicExtension.d.ts +0 -1
  340. package/dist/prosemirror/extensions/marks/LanguageExtension.d.ts +0 -1
  341. package/dist/prosemirror/extensions/marks/RtlExtension.d.ts +0 -1
  342. package/dist/prosemirror/extensions/marks/RunFormattingOverrideExtension.d.ts +0 -1
  343. package/dist/prosemirror/extensions/marks/RunShadingExtension.d.ts +0 -1
  344. package/dist/prosemirror/extensions/marks/SmallCapsExtension.d.ts +0 -1
  345. package/dist/prosemirror/extensions/marks/StrikeExtension.d.ts +0 -1
  346. package/dist/prosemirror/extensions/marks/SubscriptExtension.d.ts +0 -1
  347. package/dist/prosemirror/extensions/marks/SuperscriptExtension.d.ts +0 -1
  348. package/dist/prosemirror/extensions/marks/TextColorExtension.d.ts +0 -1
  349. package/dist/prosemirror/extensions/marks/TextEffectExtension.d.ts +0 -1
  350. package/dist/prosemirror/extensions/marks/TextEffectsExtensions.d.ts +0 -1
  351. package/dist/prosemirror/extensions/marks/TrackedChangeExtensions.d.ts +0 -1
  352. package/dist/prosemirror/extensions/marks/UnderlineExtension.d.ts +0 -1
  353. package/dist/prosemirror/extensions/marks/markUtils.d.ts +0 -1
  354. package/dist/prosemirror/extensions/marks/markUtils.js +4 -1
  355. package/dist/prosemirror/extensions/nodes/BlockSdtExtension.d.ts +0 -1
  356. package/dist/prosemirror/extensions/nodes/FieldExtension.d.ts +0 -1
  357. package/dist/prosemirror/extensions/nodes/HardBreakExtension.d.ts +0 -1
  358. package/dist/prosemirror/extensions/nodes/HorizontalRuleExtension.d.ts +0 -1
  359. package/dist/prosemirror/extensions/nodes/ImageExtension.d.ts +0 -1
  360. package/dist/prosemirror/extensions/nodes/ImageExtension.js +2 -0
  361. package/dist/prosemirror/extensions/nodes/MathExtension.d.ts +0 -1
  362. package/dist/prosemirror/extensions/nodes/PageBreakExtension.d.ts +0 -1
  363. package/dist/prosemirror/extensions/nodes/RenderedPageBreakExtension.d.ts +0 -1
  364. package/dist/prosemirror/extensions/nodes/SdtExtension.d.ts +0 -1
  365. package/dist/prosemirror/extensions/nodes/ShapeExtension.d.ts +0 -1
  366. package/dist/prosemirror/extensions/nodes/ShapeExtension.js +2 -0
  367. package/dist/prosemirror/extensions/nodes/TabExtension.d.ts +0 -1
  368. package/dist/prosemirror/extensions/nodes/TableExtension.d.ts +4 -3
  369. package/dist/prosemirror/extensions/nodes/TextBoxAnchorExtension.d.ts +0 -1
  370. package/dist/prosemirror/extensions/nodes/TextBoxExtension.d.ts +53 -27
  371. package/dist/prosemirror/extensions/types.d.ts +0 -1
  372. package/dist/prosemirror/findReplaceSelection.d.ts +5 -3
  373. package/dist/prosemirror/imageCommit.d.ts +0 -1
  374. package/dist/prosemirror/index.d.ts +4 -0
  375. package/dist/prosemirror/insertOperations.d.ts +0 -1
  376. package/dist/prosemirror/paraText.d.ts +0 -1
  377. package/dist/prosemirror/plugins/aiCitationDecorations.d.ts +2 -2
  378. package/dist/prosemirror/plugins/aiSuggestionDecorations.d.ts +0 -1
  379. package/dist/prosemirror/plugins/anonymizationDecorations.d.ts +9 -7
  380. package/dist/prosemirror/plugins/autocompleteSuggestion.d.ts +2 -2
  381. package/dist/prosemirror/plugins/contentControlWidgets.d.ts +4 -7
  382. package/dist/prosemirror/plugins/createDocScanPlugin.d.ts +3 -8
  383. package/dist/prosemirror/plugins/documentStyles.d.ts +0 -1
  384. package/dist/prosemirror/plugins/pmTextScan.d.ts +2 -2
  385. package/dist/prosemirror/plugins/revisionIds.d.ts +0 -1
  386. package/dist/prosemirror/plugins/selectionTracker.d.ts +23 -12
  387. package/dist/prosemirror/plugins/suggestionMode.d.ts +0 -1
  388. package/dist/prosemirror/plugins/templateDirectives.d.ts +10 -8
  389. package/dist/prosemirror/plugins/templatePreviewValues.d.ts +10 -5
  390. package/dist/prosemirror/plugins/templateSlashMenu.d.ts +2 -2
  391. package/dist/prosemirror/queries.d.ts +0 -1
  392. package/dist/prosemirror/schema/index.d.ts +0 -1
  393. package/dist/prosemirror/schema/marks.d.ts +8 -5
  394. package/dist/prosemirror/schema/nodes.d.ts +340 -163
  395. package/dist/prosemirror/selectionState.d.ts +13 -7
  396. package/dist/prosemirror/styles/resolvedStyleAttrs.d.ts +0 -1
  397. package/dist/prosemirror/styles/styleResolver.d.ts +3 -2
  398. package/dist/prosemirror/tableCellMergeRevision.d.ts +0 -1
  399. package/dist/prosemirror/tableResize.d.ts +0 -1
  400. package/dist/prosemirror/textBoxAnchorAttrs.d.ts +0 -1
  401. package/dist/prosemirror/utils/extractTrackedChanges.d.ts +8 -5
  402. package/dist/prosemirror/utils/findParagraphByParaId.d.ts +0 -1
  403. package/dist/prosemirror/utils/tabCalculator.d.ts +18 -7
  404. package/dist/prosemirror/utils/visualLineNavigation.d.ts +0 -1
  405. package/dist/prosemirror/validation.d.ts +0 -1
  406. package/dist/redline.d.ts +16 -8
  407. package/dist/render-dom/BodySelectionOverlay.d.ts +1 -9
  408. package/dist/render-dom/HeaderFooterSelectionOverlay.d.ts +0 -1
  409. package/dist/render-dom/RemoteSelectionOverlay.d.ts +1 -8
  410. package/dist/render-dom/resolveSidebarItemPositions.d.ts +1 -9
  411. package/dist/style-engine/styleEngine.d.ts +21 -11
  412. package/dist/style-sets/extract.d.ts +4 -3
  413. package/dist/style-sets/stellaStyle.d.ts +0 -1
  414. package/dist/style-sets/types.d.ts +0 -1
  415. package/dist/symbols.d.ts +6 -2
  416. package/dist/types/block-id.d.ts +3 -6
  417. package/dist/types/document.d.ts +0 -3
  418. package/dist/types/documentEnumValues.d.ts +2 -1
  419. package/dist/types/documentEnumValues.js +6 -1
  420. package/dist/utils/clipboard.d.ts +17 -8
  421. package/dist/utils/colorResolver.d.ts +9 -5
  422. package/dist/utils/createDocument.d.ts +19 -10
  423. package/dist/utils/documentLoaderBehavior.d.ts +1 -5
  424. package/dist/utils/docxInput.js +1 -0
  425. package/dist/utils/findReplace.d.ts +0 -1
  426. package/dist/utils/fontFamilyMerge.d.ts +0 -1
  427. package/dist/utils/fontResolver.d.ts +10 -4
  428. package/dist/utils/formatToStyle.d.ts +0 -1
  429. package/dist/utils/headerFooter.d.ts +8 -16
  430. package/dist/utils/headingCollector.d.ts +7 -4
  431. package/dist/utils/mergeDocumentContent.d.ts +0 -1
  432. package/dist/utils/paragraphFormattingMerge.d.ts +0 -1
  433. package/dist/utils/replaceText.d.ts +0 -1
  434. package/dist/utils/rotationBoundingBox.d.ts +0 -1
  435. package/dist/utils/tableOperations.d.ts +0 -1
  436. package/dist/utils/textFormattingMerge.d.ts +0 -1
  437. package/dist/version-comparison.d.ts +12 -6
  438. package/dist/watermark/index.d.ts +0 -1
  439. package/package.json +3 -3
@@ -1,5 +1,4 @@
1
1
  import { document_d_exports } from "../types/document.js";
2
-
3
2
  //#region src/docx/sdtPropertiesPatch.d.ts
4
3
  /**
5
4
  * Rewrite the relevant child elements of `<w:sdtPr>` so the modeled
@@ -1,6 +1,5 @@
1
1
  import { document_d_exports } from "../types/document.js";
2
2
  import { XmlElement } from "./xmlParser.js";
3
-
4
3
  //#region src/docx/sectionParser.d.ts
5
4
  declare function getUnserializedSectionPropertyChildNames(props: document_d_exports.SectionProperties): readonly string[] | undefined;
6
5
  /**
@@ -1,9 +1,11 @@
1
1
  import { document_d_exports } from "../types/document.js";
2
-
3
2
  //#region src/docx/selectiveSave.d.ts
4
3
  type SelectiveSaveOptions = {
5
- /** Changed paragraph IDs to selectively patch */changedParaIds: Set<string>; /** Whether structural changes occurred (paragraph add/delete) */
6
- structuralChange: boolean; /** Whether any changes affected paragraphs without paraId */
4
+ /** Changed paragraph IDs to selectively patch */
5
+ changedParaIds: Set<string>;
6
+ /** Whether structural changes occurred (paragraph add/delete) */
7
+ structuralChange: boolean;
8
+ /** Whether any changes affected paragraphs without paraId */
7
9
  hasUntrackedChanges: boolean;
8
10
  /**
9
11
  * Maximum allowed `originalBuffer.byteLength` for the selective path. Above
@@ -5,6 +5,7 @@ import { validateFolioDocumentModel } from "./modelValidation.js";
5
5
  import { isPreservableDocxEntry } from "./unzip.js";
6
6
  import { hasUnsynthesizedReplyRanges } from "./commentReplyMarkers.js";
7
7
  import { withoutOrphanCommentRanges } from "./commentRangeIntegrity.js";
8
+ import { isNewDataUrlDrawing } from "./newImage.js";
8
9
  import { buildPatchedDocumentXml, buildPatchedNoteXml, buildPatchedNumberingXml, collectChangedNumberingDefs, collectParaIds } from "./selectiveXmlPatch.js";
9
10
  import { ensureThreadedCommentParaIds, serializeComments, serializeCommentsExtended } from "./serializer/commentSerializer.js";
10
11
  import { serializeDocument } from "./serializer/documentSerializer.js";
@@ -13,14 +14,13 @@ import { serializeNumberingXml } from "./serializer/numberingSerializer.js";
13
14
  import { COMMENTS_CONTENT_TYPE, COMMENTS_EXTENDED_PART_LOWER, addCommentsExtendedOverride, addCommentsExtendedRelationship, applyUpdatesToZip, collectHeaderFooterUpdates, findMaxRId, hasModelDrivenPictureWatermark, hasUnmaterializedHeaderFooter, updateCoreProperties } from "./rezip.js";
14
15
  import "./selectiveSaveFlags.js";
15
16
  //#region src/docx/selectiveSave.ts
16
- const SYNTHETIC_IMAGE_RID_PREFIX = "rId_img_";
17
17
  /**
18
18
  * Check if document content has new images (data: URL without rId) or
19
19
  * new hyperlinks (href without rId). Combined into a single traversal
20
20
  * to avoid walking the block tree twice.
21
21
  */
22
22
  function hasNewImagesOrHyperlinks(blocks) {
23
- const runHasNewImage = (run) => run.content.some((c) => c.type === "drawing" && c.image?.src?.startsWith("data:") === true && (!c.image.rId || c.image.rId.startsWith(SYNTHETIC_IMAGE_RID_PREFIX)));
23
+ const runHasNewImage = (run) => run.content.some(isNewDataUrlDrawing);
24
24
  for (const block of blocks) if (block.type === "paragraph") {
25
25
  for (const item of block.content) if (item.type === "run") {
26
26
  if (runHasNewImage(item)) return true;
@@ -13,13 +13,15 @@
13
13
  * the dominant cost.
14
14
  */
15
15
  type FolioSelectiveSaveFlags = {
16
- /** Enable the selective save path. Default: false (full repack only). */selectiveSave?: boolean;
16
+ /** Enable the selective save path. Default: false (full repack only). */
17
+ selectiveSave?: boolean;
17
18
  /**
18
19
  * Run selective save and full repack on every save, compare bytes, and emit
19
20
  * a `TripwireResult` via `onSelectiveSaveTripwire`. Independent of
20
21
  * `selectiveSave`: the tripwire always observes both paths.
21
22
  */
22
- selectiveSaveTripwire?: boolean; /** Maximum original buffer size, in bytes, for which selective save is allowed. */
23
+ selectiveSaveTripwire?: boolean;
24
+ /** Maximum original buffer size, in bytes, for which selective save is allowed. */
23
25
  selectiveSaveMaxBytes?: number;
24
26
  };
25
27
  declare const DEFAULT_SELECTIVE_SAVE_MAX_BYTES: number;
@@ -367,8 +367,20 @@ function findNumberingElementOffsets(xml, kind, id) {
367
367
  function extractNumberingElementXml(xml, kind, id) {
368
368
  return extractElementByIdAttr(xml, NUMBERING_OPEN_LITERAL[kind], NUMBERING_CLOSE_TAG[kind], NUMBERING_ID_ATTR[kind], id);
369
369
  }
370
- function collectNumberingElementIds(xml, kind) {
371
- return collectElementIds(xml, NUMBERING_OPEN_LITERAL[kind], NUMBERING_ID_ATTR[kind]);
370
+ function buildNumberingElementOffsetIndex(xml, kind) {
371
+ const index = /* @__PURE__ */ new Map();
372
+ const openLiteral = NUMBERING_OPEN_LITERAL[kind];
373
+ const pattern = new RegExp(`${escapeRegExp(openLiteral)}[\\s][^>]*?${escapeRegExp(NUMBERING_ID_ATTR[kind])}="(?<id>[^"]+)"`, "gu");
374
+ let match;
375
+ while ((match = pattern.exec(xml)) !== null) {
376
+ const id = match.groups["id"];
377
+ if (index.has(id)) {
378
+ index.set(id, null);
379
+ continue;
380
+ }
381
+ index.set(id, scanElementRange(xml, match.index, openLiteral, NUMBERING_CLOSE_TAG[kind]));
382
+ }
383
+ return index;
372
384
  }
373
385
  const SYNTHETIC_NUM_FMT_PATTERN = /<w:numFmt w:val="decimalZero(?<width>[345])"\/>/u;
374
386
  /**
@@ -381,12 +393,12 @@ const SYNTHETIC_NUM_FMT_PATTERN = /<w:numFmt w:val="decimalZero(?<width>[345])"\
381
393
  function collectChangedNumberingDefs(baselineXml, currentXml) {
382
394
  const changedForKind = (kind) => {
383
395
  const changed = /* @__PURE__ */ new Set();
384
- const baselineIds = collectNumberingElementIds(baselineXml, kind);
385
- for (const [id, count] of collectNumberingElementIds(currentXml, kind)) {
386
- if (count !== 1 || baselineIds.get(id) !== 1) continue;
387
- const before = extractNumberingElementXml(baselineXml, kind, id);
388
- const after = extractNumberingElementXml(currentXml, kind, id);
389
- if (before !== null && after !== null && before !== after) changed.add(id);
396
+ const baselineIndex = buildNumberingElementOffsetIndex(baselineXml, kind);
397
+ const currentIndex = buildNumberingElementOffsetIndex(currentXml, kind);
398
+ for (const [id, afterRange] of currentIndex) {
399
+ const beforeRange = baselineIndex.get(id);
400
+ if (!beforeRange || !afterRange) continue;
401
+ if (baselineXml.slice(beforeRange.start, beforeRange.end) !== currentXml.slice(afterRange.start, afterRange.end)) changed.add(id);
390
402
  }
391
403
  return changed;
392
404
  };
@@ -1,5 +1,4 @@
1
1
  import { document_d_exports } from "../../types/document.js";
2
-
3
2
  //#region src/docx/serializer/blockSdtSerializer.d.ts
4
3
  declare function serializeBlockSdt(blockSdt: document_d_exports.BlockSdt, serializeChild: (block: document_d_exports.BlockContent) => string): string;
5
4
  //#endregion
@@ -1,5 +1,5 @@
1
- import { isSingleWellFormedElement } from "./xmlUtils.js";
2
1
  import { reconcileRawSdtPr } from "../sdtPropertiesPatch.js";
2
+ import { isSingleWellFormedElement } from "./xmlUtils.js";
3
3
  //#region src/docx/serializer/blockSdtSerializer.ts
4
4
  function escapeXmlAttr(value) {
5
5
  return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;");
@@ -52,6 +52,7 @@ function extractDropdownLastValue(blockSdt) {
52
52
  if (blockSdt.properties.sdtType !== "dropdown" && blockSdt.properties.sdtType !== "comboBox") return;
53
53
  const modeled = blockSdt.properties.dropdownLastValue;
54
54
  if (modeled !== void 0) return modeled;
55
+ if (blockSdt.properties.rawPropertiesXml !== void 0) return;
55
56
  const firstBlock = blockSdt.content[0];
56
57
  if (!firstBlock || firstBlock.type !== "paragraph") return;
57
58
  const parts = [];
@@ -1,5 +1,4 @@
1
1
  import { document_d_exports } from "../../types/document.js";
2
-
3
2
  //#region src/docx/serializer/borderSerializer.d.ts
4
3
  /**
5
4
  * Serialize a single border element (`<w:top .../>`, `<w:left .../>`, ...).
@@ -1,5 +1,4 @@
1
1
  import { Comment } from "../../types/content.js";
2
-
3
2
  //#region src/docx/serializer/commentSerializer.d.ts
4
3
  /**
5
4
  * Serialize comments array to comments.xml content. Returns a valid empty
@@ -1,49 +1,23 @@
1
1
  import { deterministicHexId } from "../../utils/hexId.js";
2
2
  import { escapeXml } from "./xmlUtils.js";
3
+ import { serializeParagraph } from "./paragraphSerializer.js";
3
4
  //#region src/docx/serializer/commentSerializer.ts
4
5
  /**
5
6
  * Comment Serializer
6
7
  *
7
8
  * Serializes Comment[] to OOXML comments.xml format.
8
9
  */
9
- function serializeRunContent(run) {
10
- let xml = "<w:r>";
11
- const rPr = [];
12
- if (run.formatting?.bold) rPr.push("<w:b/>");
13
- if (run.formatting?.italic) rPr.push("<w:i/>");
14
- if (rPr.length > 0) xml += `<w:rPr>${rPr.join("")}</w:rPr>`;
15
- for (const c of run.content) if (c.type === "text") {
16
- const preserveSpace = c.text !== c.text.trim() || c.text.includes(" ");
17
- xml += preserveSpace ? `<w:t xml:space="preserve">${escapeXml(c.text)}</w:t>` : `<w:t>${escapeXml(c.text)}</w:t>`;
18
- } else if (c.type === "break") xml += "<w:br/>";
19
- xml += "</w:r>";
20
- return xml;
21
- }
22
- /**
23
- * `w14:paraId` / `w14:textId` open tag for a comment paragraph. Word keys
24
- * commentsExtended.xml (reply threading) and commentsExtensible.xml (UTC
25
- * dates) on the paraId of a comment's LAST paragraph, so the id must survive
26
- * serialization; the parser stores it on `Paragraph.paraId`.
27
- */
28
- function commentParagraphOpenTag(p) {
29
- const attrs = [];
30
- if (p.paraId) attrs.push(`w14:paraId="${escapeXml(p.paraId)}"`);
31
- if (p.textId) attrs.push(`w14:textId="${escapeXml(p.textId)}"`);
32
- return attrs.length > 0 ? `<w:p ${attrs.join(" ")}>` : "<w:p>";
33
- }
34
- function serializeParagraph(p) {
35
- let xml = commentParagraphOpenTag(p);
36
- for (const item of p.content) if (item.type === "run") xml += serializeRunContent(item);
37
- xml += "</w:p>";
38
- return xml;
39
- }
10
+ const ANNOTATION_REFERENCE_XML = "<w:r><w:rPr><w:rStyle w:val=\"CommentReference\"/></w:rPr><w:annotationRef/></w:r>";
11
+ const PARAGRAPH_PROPERTIES_END = "</w:pPr>";
40
12
  /** Serialize a paragraph, prepending an annotationRef run (required by Word in first paragraph of a comment) */
41
- function serializeParagraphWithAnnotationRef(p) {
42
- let xml = commentParagraphOpenTag(p);
43
- xml += "<w:r><w:rPr><w:rStyle w:val=\"CommentReference\"/></w:rPr><w:annotationRef/></w:r>";
44
- for (const item of p.content) if (item.type === "run") xml += serializeRunContent(item);
45
- xml += "</w:p>";
46
- return xml;
13
+ function serializeParagraphWithAnnotationRef(paragraph) {
14
+ const xml = serializeParagraph(paragraph);
15
+ const propertiesEnd = xml.indexOf(PARAGRAPH_PROPERTIES_END);
16
+ if (propertiesEnd !== -1) {
17
+ const contentStart = propertiesEnd + 8;
18
+ return `${xml.slice(0, contentStart)}${ANNOTATION_REFERENCE_XML}${xml.slice(contentStart)}`;
19
+ }
20
+ return xml.replace(/^<w:p(?=[\s>])[^>]*>/u, (openingTag) => `${openingTag}${ANNOTATION_REFERENCE_XML}`);
47
21
  }
48
22
  function serializeComment(comment) {
49
23
  const attrs = [`w:id="${comment.id}"`, `w:author="${escapeXml(comment.author)}"`];
@@ -1,5 +1,4 @@
1
1
  import { document_d_exports } from "../../types/document.js";
2
-
3
2
  //#region src/docx/serializer/documentSerializer.d.ts
4
3
  /**
5
4
  * Serialize a DocumentBody to document.xml body content
@@ -1,8 +1,8 @@
1
- import { serializeBlockSdt } from "./blockSdtSerializer.js";
2
1
  import { serializeTable } from "./tableSerializer.js";
3
2
  import { resetAutoIdCounter } from "./runSerializer.js";
4
3
  import { serializeSectionProperties } from "./sectionPropertiesSerializer.js";
5
4
  import { serializeParagraph } from "./paragraphSerializer.js";
5
+ import { serializeBlockSdt } from "./blockSdtSerializer.js";
6
6
  //#region src/docx/serializer/documentSerializer.ts
7
7
  /**
8
8
  * Standard OOXML namespaces for document.xml
@@ -1,5 +1,4 @@
1
1
  import { document_d_exports } from "../../types/document.js";
2
-
3
2
  //#region src/docx/serializer/fontTableSerializer.d.ts
4
3
  declare const serializeFontTableXml: (fontTable: document_d_exports.FontTable) => string;
5
4
  //#endregion
@@ -1,5 +1,4 @@
1
1
  import { document_d_exports } from "../../types/document.js";
2
-
3
2
  //#region src/docx/serializer/headerFooterSerializer.d.ts
4
3
  /**
5
4
  * Serialize a HeaderFooter object to valid OOXML XML
@@ -1,8 +1,8 @@
1
1
  import { canReplayHeaderFooterVerbatim, getHeaderFooterVerbatimXml } from "../headerFooterVerbatim.js";
2
2
  import { escapeXml } from "./xmlUtils.js";
3
- import { serializeBlockSdt } from "./blockSdtSerializer.js";
4
3
  import { serializeTable } from "./tableSerializer.js";
5
4
  import { serializeParagraph } from "./paragraphSerializer.js";
5
+ import { serializeBlockSdt } from "./blockSdtSerializer.js";
6
6
  //#region src/docx/serializer/headerFooterSerializer.ts
7
7
  const NAMESPACES = {
8
8
  wpc: "http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas",
@@ -1,5 +1,4 @@
1
1
  import { document_d_exports } from "../../types/document.js";
2
-
3
2
  //#region src/docx/serializer/noteSerializer.d.ts
4
3
  /**
5
4
  * Serialize footnotes to a complete word/footnotes.xml string.
@@ -1,6 +1,6 @@
1
- import { serializeBlockSdt } from "./blockSdtSerializer.js";
2
1
  import { serializeTable } from "./tableSerializer.js";
3
2
  import { serializeParagraph } from "./paragraphSerializer.js";
3
+ import { serializeBlockSdt } from "./blockSdtSerializer.js";
4
4
  //#region src/docx/serializer/noteSerializer.ts
5
5
  const NAMESPACES = {
6
6
  wpc: "http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas",
@@ -1,5 +1,4 @@
1
1
  import { document_d_exports } from "../../types/document.js";
2
-
3
2
  //#region src/docx/serializer/numberingSerializer.d.ts
4
3
  /**
5
4
  * Serialize {@link NumberingDefinitions} to a complete `word/numbering.xml`
@@ -1,5 +1,4 @@
1
1
  import { document_d_exports } from "../../types/document.js";
2
-
3
2
  //#region src/docx/serializer/paragraphSerializer.d.ts
4
3
  declare function serializeParagraphFormatting(formatting: document_d_exports.ParagraphFormatting | undefined, propertyChanges?: document_d_exports.ParagraphPropertyChange[], pPrMark?: document_d_exports.ParagraphMarkChange): string;
5
4
  /**
@@ -1,7 +1,7 @@
1
1
  import { numPrEqual } from "../numberingParser.js";
2
2
  import { isValidHexColor } from "../../utils/colorResolver.js";
3
- import { escapeXml, intAttr, isSingleWellFormedElement } from "./xmlUtils.js";
4
3
  import { reconcileRawSdtPr } from "../sdtPropertiesPatch.js";
4
+ import { escapeXml, intAttr, isSingleWellFormedElement } from "./xmlUtils.js";
5
5
  import { serializeBorder } from "./borderSerializer.js";
6
6
  import { serializeRun, serializeTextFormatting } from "./runSerializer.js";
7
7
  import { serializeSectionProperties } from "./sectionPropertiesSerializer.js";
@@ -90,10 +90,8 @@ function serializeIndentation(formatting) {
90
90
  const attrs = [];
91
91
  if (formatting.indentLeft !== void 0) attrs.push(`w:left="${intAttr(formatting.indentLeft)}"`);
92
92
  if (formatting.indentRight !== void 0) attrs.push(`w:right="${intAttr(formatting.indentRight)}"`);
93
- if (formatting.indentFirstLine !== void 0) {
94
- if (formatting.hangingIndent) attrs.push(`w:hanging="${intAttr(Math.abs(formatting.indentFirstLine))}"`);
95
- else if (formatting.indentFirstLine !== 0) attrs.push(`w:firstLine="${intAttr(formatting.indentFirstLine)}"`);
96
- }
93
+ if (formatting.indentFirstLine !== void 0) if (formatting.hangingIndent) attrs.push(`w:hanging="${intAttr(Math.abs(formatting.indentFirstLine))}"`);
94
+ else attrs.push(`w:firstLine="${intAttr(formatting.indentFirstLine)}"`);
97
95
  if (attrs.length === 0) return "";
98
96
  return `<w:ind ${attrs.join(" ")}/>`;
99
97
  }
@@ -246,24 +244,13 @@ function serializeBookmarkStart(bookmark) {
246
244
  function serializeBookmarkEnd(bookmark) {
247
245
  return `<w:bookmarkEnd w:id="${bookmark.id}"/>`;
248
246
  }
249
- /**
250
- * Serialize a simple field as a complex field (fldChar begin/separate/end).
251
- * Complex field format is more widely supported by OOXML consumers
252
- * (Google Docs, Apple Pages) than w:fldSimple.
253
- */
247
+ /** Serialize a simple field without changing its authored OOXML field form. */
254
248
  function serializeSimpleField(field) {
255
- const parts = [];
256
- const firstRun = field.content.find((c) => c.type === "run");
257
- const rPrXml = firstRun?.formatting ? serializeTextFormatting(firstRun.formatting) : "";
258
- const beginAttrs = ["w:fldCharType=\"begin\""];
259
- if (field.fldLock) beginAttrs.push("w:fldLock=\"true\"");
260
- parts.push(`<w:r>${rPrXml}<w:fldChar ${beginAttrs.join(" ")}/></w:r>`);
261
- const spaceAttr = field.instruction.startsWith(" ") || field.instruction.endsWith(" ") || field.instruction.includes(" ") ? " xml:space=\"preserve\"" : "";
262
- parts.push(`<w:r>${rPrXml}<w:instrText${spaceAttr}>${escapeXml(field.instruction)}</w:instrText></w:r>`);
263
- parts.push(`<w:r>${rPrXml}<w:fldChar w:fldCharType="separate"/></w:r>`);
264
- for (const item of field.content) if (item.type === "run") parts.push(serializeRun(item));
265
- parts.push(`<w:r>${rPrXml}<w:fldChar w:fldCharType="end"/></w:r>`);
266
- return parts.join("");
249
+ const attrs = [`w:instr="${escapeXml(field.instruction)}"`];
250
+ if (field.fldLock) attrs.push("w:fldLock=\"true\"");
251
+ if (field.dirty) attrs.push("w:dirty=\"true\"");
252
+ const contentXml = field.content.map((item) => item.type === "run" ? serializeRun(item) : serializeHyperlink(item)).join("");
253
+ return `<w:fldSimple ${attrs.join(" ")}>${contentXml}</w:fldSimple>`;
267
254
  }
268
255
  /**
269
256
  * Serialize a complex field
@@ -278,7 +265,7 @@ function serializeComplexField(field) {
278
265
  if (field.fldLock) beginAttrs.push("w:fldLock=\"true\"");
279
266
  parts.push(`<w:r>${rPrXml}<w:fldChar ${beginAttrs.join(" ")}/></w:r>`);
280
267
  if (field.fieldCode.length > 0) parts.push(...field.fieldCode.map((run) => serializeRun(run)));
281
- else {
268
+ else if (field.instruction.length > 0) {
282
269
  const spaceAttr = field.instruction.startsWith(" ") || field.instruction.endsWith(" ") || field.instruction.includes(" ") ? " xml:space=\"preserve\"" : "";
283
270
  parts.push(`<w:r>${rPrXml}<w:instrText${spaceAttr}>${escapeXml(field.instruction)}</w:instrText></w:r>`);
284
271
  }
@@ -1,5 +1,4 @@
1
1
  import { document_d_exports } from "../../types/document.js";
2
-
3
2
  //#region src/docx/serializer/runSerializer.d.ts
4
3
  /**
5
4
  * Reset the auto-incrementing ID counter. Call before each serialization pass
@@ -1,5 +1,7 @@
1
1
  import { HIGHLIGHT_COLOR_VALUES } from "../../types/documentEnumValues.js";
2
+ import { THEME_COLOR_TO_DRAWING_SCHEME } from "../drawingUtils.js";
2
3
  import { isValidHexColor } from "../../utils/colorResolver.js";
4
+ import { requiresXmlSpacePreserve } from "../textWhitespace.js";
3
5
  import { escapeXml, intAttr } from "./xmlUtils.js";
4
6
  import { serializeTable } from "./tableSerializer.js";
5
7
  import { serializeParagraph } from "./paragraphSerializer.js";
@@ -82,6 +84,7 @@ function serializeTextFormatting(formatting) {
82
84
  if (formatting.fontFamily.hAnsi) fontAttrs.push(`w:hAnsi="${escapeXml(formatting.fontFamily.hAnsi)}"`);
83
85
  if (formatting.fontFamily.eastAsia) fontAttrs.push(`w:eastAsia="${escapeXml(formatting.fontFamily.eastAsia)}"`);
84
86
  if (formatting.fontFamily.cs) fontAttrs.push(`w:cs="${escapeXml(formatting.fontFamily.cs)}"`);
87
+ if (formatting.fontFamily.hint) fontAttrs.push(`w:hint="${escapeXml(formatting.fontFamily.hint)}"`);
85
88
  if (formatting.fontFamily.asciiTheme) fontAttrs.push(`w:asciiTheme="${formatting.fontFamily.asciiTheme}"`);
86
89
  if (formatting.fontFamily.hAnsiTheme) fontAttrs.push(`w:hAnsiTheme="${formatting.fontFamily.hAnsiTheme}"`);
87
90
  if (formatting.fontFamily.eastAsiaTheme) fontAttrs.push(`w:eastAsiaTheme="${formatting.fontFamily.eastAsiaTheme}"`);
@@ -183,7 +186,7 @@ function serializeRunProperties(formatting, propertyChanges) {
183
186
  * Serialize text content (w:t)
184
187
  */
185
188
  function serializeTextContent(content) {
186
- return `<w:t${content.preserveSpace || content.text.startsWith(" ") || content.text.endsWith(" ") || content.text.includes(" ") ? " xml:space=\"preserve\"" : ""}>${escapeXml(content.text)}</w:t>`;
189
+ return `<w:t${content.preserveSpace || requiresXmlSpacePreserve(content.text) ? " xml:space=\"preserve\"" : ""}>${escapeXml(content.text)}</w:t>`;
187
190
  }
188
191
  /**
189
192
  * Serialize tab content (w:tab)
@@ -250,7 +253,7 @@ function serializeDrawingColor(color) {
250
253
  if (!color) return "";
251
254
  if (color.rgb && isValidHexColor(color.rgb)) return `<a:srgbClr val="${escapeXml(color.rgb.replace("#", ""))}"/>`;
252
255
  if (color.themeColor) {
253
- let clr = `<a:schemeClr val="${escapeXml(color.themeColor)}"`;
256
+ let clr = `<a:schemeClr val="${THEME_COLOR_TO_DRAWING_SCHEME[color.themeColor]}"`;
254
257
  if (color.themeTint) clr += `><a:tint val="${escapeXml(color.themeTint)}"/></a:schemeClr>`;
255
258
  else if (color.themeShade) clr += `><a:shade val="${escapeXml(color.themeShade)}"/></a:schemeClr>`;
256
259
  else clr += `/>`;
@@ -260,7 +263,8 @@ function serializeDrawingColor(color) {
260
263
  }
261
264
  /** Serialize shape fill to DrawingML */
262
265
  function serializeFill(fill) {
263
- if (!fill || fill.type === "none") return "<a:noFill/>";
266
+ if (!fill) return "";
267
+ if (fill.type === "none") return "<a:noFill/>";
264
268
  if (fill.type === "solid" && fill.color) return `<a:solidFill>${serializeDrawingColor(fill.color)}</a:solidFill>`;
265
269
  if (fill.type === "gradient" && fill.gradient) {
266
270
  const g = fill.gradient;
@@ -287,7 +291,7 @@ function serializeOutline(outline) {
287
291
  if (outline.cap) attrs.push(`cap="${serializeLineCap(outline.cap)}"`);
288
292
  const parts = [];
289
293
  if (outline.color) parts.push(`<a:solidFill>${serializeDrawingColor(outline.color)}</a:solidFill>`);
290
- if (outline.style && outline.style !== "solid") parts.push(`<a:prstDash val="${outline.style}"/>`);
294
+ if (outline.style) parts.push(`<a:prstDash val="${outline.style}"/>`);
291
295
  if (outline.join === "bevel") parts.push("<a:bevel/>");
292
296
  else if (outline.join === "round") parts.push("<a:round/>");
293
297
  else if (outline.join === "miter") parts.push("<a:miter/>");
@@ -370,6 +374,18 @@ function serializePicGraphic(image, sharedId) {
370
374
  ].join("");
371
375
  }
372
376
  /**
377
+ * Serialize only authored wrap-distance attributes. OOXML defaults omitted
378
+ * values to zero, but preserving absence keeps untouched models stable.
379
+ */
380
+ function serializeWrapDistanceAttrs(wrap) {
381
+ const attrs = [];
382
+ if (wrap?.distT !== void 0) attrs.push(`distT="${intAttr(wrap.distT)}"`);
383
+ if (wrap?.distB !== void 0) attrs.push(`distB="${intAttr(wrap.distB)}"`);
384
+ if (wrap?.distL !== void 0) attrs.push(`distL="${intAttr(wrap.distL)}"`);
385
+ if (wrap?.distR !== void 0) attrs.push(`distR="${intAttr(wrap.distR)}"`);
386
+ return attrs.length > 0 ? ` ${attrs.join(" ")}` : "";
387
+ }
388
+ /**
373
389
  * Serialize drawing/image content (w:drawing) to full DrawingML XML
374
390
  */
375
391
  function serializeDrawingContent(content) {
@@ -377,24 +393,28 @@ function serializeDrawingContent(content) {
377
393
  const isFloating = image.wrap.type !== "inline";
378
394
  const cx = image.size.width;
379
395
  const cy = image.size.height;
380
- const distT = image.wrap.distT ?? 0;
381
- const distB = image.wrap.distB ?? 0;
382
- const distL = image.wrap.distL ?? 0;
383
- const distR = image.wrap.distR ?? 0;
396
+ const wrapDistanceAttrs = serializeWrapDistanceAttrs(image.wrap);
384
397
  const effL = image.padding?.left ?? 0;
385
398
  const effT = image.padding?.top ?? 0;
386
399
  const effR = image.padding?.right ?? 0;
387
400
  const effB = image.padding?.bottom ?? 0;
388
401
  const effectExtentEl = `<wp:effectExtent l="${intAttr(effL)}" t="${intAttr(effT)}" r="${intAttr(effR)}" b="${intAttr(effB)}"/>`;
389
402
  const docPrId = getUniqueId(image.id);
390
- const docPrName = image.title || image.filename || `Picture ${docPrId}`;
403
+ const docPrName = image.docPrName ?? image.filename ?? `Picture ${docPrId}`;
404
+ const docPrDescription = image.alt !== void 0 ? ` descr="${escapeXml(image.alt)}"` : "";
405
+ const docPrTitle = image.title !== void 0 ? ` title="${escapeXml(image.title)}"` : "";
406
+ const hlinkClick = image.hlinkRId ? `<a:hlinkClick r:id="${escapeXml(image.hlinkRId)}"/>` : "";
407
+ const inlineDocPrAttrs = `id="${docPrId}" name="${escapeXml(docPrName)}"${docPrDescription}${docPrTitle}${image.decorative ? " hidden=\"1\"" : ""}`;
408
+ const inlineDocPr = hlinkClick ? `<wp:docPr ${inlineDocPrAttrs}>${hlinkClick}</wp:docPr>` : `<wp:docPr ${inlineDocPrAttrs}/>`;
409
+ const anchorDocPrAttrs = `id="${docPrId}" name="${escapeXml(docPrName)}"${docPrDescription}${docPrTitle}`;
410
+ const anchorDocPr = hlinkClick ? `<wp:docPr ${anchorDocPrAttrs}>${hlinkClick}</wp:docPr>` : `<wp:docPr ${anchorDocPrAttrs}/>`;
391
411
  const graphic = serializePicGraphic(image, docPrId);
392
412
  if (!isFloating) return [
393
413
  "<w:drawing>",
394
- `<wp:inline distT="${intAttr(distT)}" distB="${intAttr(distB)}" distL="${intAttr(distL)}" distR="${intAttr(distR)}">`,
414
+ `<wp:inline${wrapDistanceAttrs}>`,
395
415
  `<wp:extent cx="${intAttr(cx)}" cy="${intAttr(cy)}"/>`,
396
416
  effectExtentEl,
397
- `<wp:docPr id="${docPrId}" name="${escapeXml(docPrName)}"${image.alt ? ` descr="${escapeXml(image.alt)}"` : ""}${image.decorative ? " hidden=\"1\"" : ""}/>`,
417
+ inlineDocPr,
398
418
  "<wp:cNvGraphicFramePr><a:graphicFrameLocks xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" noChangeAspect=\"1\"/></wp:cNvGraphicFramePr>",
399
419
  graphic,
400
420
  "</wp:inline>",
@@ -403,17 +423,15 @@ function serializeDrawingContent(content) {
403
423
  const behindDoc = image.wrap.type === "behind" ? "1" : "0";
404
424
  const position = image.position ? serializePosition(image.position) : "<wp:positionH relativeFrom=\"column\"><wp:posOffset>0</wp:posOffset></wp:positionH><wp:positionV relativeFrom=\"paragraph\"><wp:posOffset>0</wp:posOffset></wp:positionV>";
405
425
  const wrap = serializeWrap(image.wrap);
406
- const layoutInCellAttr = image.layoutInCell === false ? "0" : "1";
407
- const allowOverlapAttr = image.allowOverlap === false ? "0" : "1";
408
426
  return [
409
427
  "<w:drawing>",
410
- `<wp:anchor distT="${intAttr(distT)}" distB="${intAttr(distB)}" distL="${intAttr(distL)}" distR="${intAttr(distR)}" simplePos="0" relativeHeight="251658240" behindDoc="${behindDoc}" locked="0" layoutInCell="${layoutInCellAttr}" allowOverlap="${allowOverlapAttr}">`,
428
+ `<wp:anchor${wrapDistanceAttrs} simplePos="0" relativeHeight="251658240" behindDoc="${behindDoc}" locked="0" layoutInCell="${image.layoutInCell === false ? "0" : "1"}" allowOverlap="${image.allowOverlap === false ? "0" : "1"}">`,
411
429
  "<wp:simplePos x=\"0\" y=\"0\"/>",
412
430
  position,
413
431
  `<wp:extent cx="${intAttr(cx)}" cy="${intAttr(cy)}"/>`,
414
432
  effectExtentEl,
415
433
  wrap,
416
- `<wp:docPr id="${docPrId}" name="${escapeXml(docPrName)}"${image.alt ? ` descr="${escapeXml(image.alt)}"` : ""}/>`,
434
+ anchorDocPr,
417
435
  "<wp:cNvGraphicFramePr><a:graphicFrameLocks xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" noChangeAspect=\"1\"/></wp:cNvGraphicFramePr>",
418
436
  graphic,
419
437
  "</wp:anchor>",
@@ -433,12 +451,9 @@ function serializeShapeContent(content) {
433
451
  const cy = shape.size.height;
434
452
  const isTextBox = shape.shapeType === "textBox";
435
453
  const isFloating = shape.wrap && shape.wrap.type !== "inline";
436
- const distT = shape.wrap?.distT ?? 0;
437
- const distB = shape.wrap?.distB ?? 0;
438
- const distL = shape.wrap?.distL ?? 0;
439
- const distR = shape.wrap?.distR ?? 0;
454
+ const wrapDistances = serializeWrapDistanceAttrs(shape.wrap);
440
455
  const docPrId = getUniqueId(shape.id);
441
- const docPrName = shape.name || (isTextBox ? `TextBox ${docPrId}` : `Shape ${docPrId}`);
456
+ const docPrName = shape.name ?? (isTextBox ? `TextBox ${docPrId}` : `Shape ${docPrId}`);
442
457
  let xfrmAttrs = "";
443
458
  if (shape.transform?.rotation) xfrmAttrs += ` rot="${Math.round(shape.transform.rotation * 6e4)}"`;
444
459
  if (shape.transform?.flipH) xfrmAttrs += " flipH=\"1\"";
@@ -494,7 +509,7 @@ function serializeShapeContent(content) {
494
509
  ].join("");
495
510
  if (!isFloating) return [
496
511
  "<w:drawing>",
497
- `<wp:inline distT="${intAttr(distT)}" distB="${intAttr(distB)}" distL="${intAttr(distL)}" distR="${intAttr(distR)}">`,
512
+ `<wp:inline${wrapDistances}>`,
498
513
  `<wp:extent cx="${intAttr(cx)}" cy="${intAttr(cy)}"/>`,
499
514
  "<wp:effectExtent l=\"0\" t=\"0\" r=\"0\" b=\"0\"/>",
500
515
  `<wp:docPr id="${docPrId}" name="${escapeXml(docPrName)}"/>`,
@@ -509,7 +524,7 @@ function serializeShapeContent(content) {
509
524
  const wrap = serializeWrap(shape.wrap);
510
525
  return [
511
526
  "<w:drawing>",
512
- `<wp:anchor distT="${intAttr(distT)}" distB="${intAttr(distB)}" distL="${intAttr(distL)}" distR="${intAttr(distR)}" simplePos="0" relativeHeight="251658240" behindDoc="${behindDoc}" locked="0" layoutInCell="1" allowOverlap="1">`,
527
+ `<wp:anchor${wrapDistances} simplePos="0" relativeHeight="251658240" behindDoc="${behindDoc}" locked="0" layoutInCell="1" allowOverlap="1">`,
513
528
  "<wp:simplePos x=\"0\" y=\"0\"/>",
514
529
  position,
515
530
  `<wp:extent cx="${intAttr(cx)}" cy="${intAttr(cy)}"/>`,
@@ -1,5 +1,4 @@
1
1
  import { document_d_exports } from "../../types/document.js";
2
-
3
2
  //#region src/docx/serializer/sectionPropertiesSerializer.d.ts
4
3
  declare function serializeSectionProperties(props: document_d_exports.SectionProperties | undefined): string;
5
4
  //#endregion
@@ -30,7 +30,7 @@ function serializePageSize(props) {
30
30
  const attrs = [];
31
31
  if (props.pageWidth !== void 0) attrs.push(`w:w="${intAttr(props.pageWidth)}"`);
32
32
  if (props.pageHeight !== void 0) attrs.push(`w:h="${intAttr(props.pageHeight)}"`);
33
- if (props.orientation === "landscape") attrs.push("w:orient=\"landscape\"");
33
+ if (props.orientation !== void 0) attrs.push(`w:orient="${props.orientation}"`);
34
34
  return attrs.length > 0 ? `<w:pgSz ${attrs.join(" ")}/>` : "";
35
35
  }
36
36
  function serializePageMargins(props) {
@@ -51,9 +51,9 @@ function serializePaperSource(props) {
51
51
  return attrs.length > 0 ? `<w:paperSrc ${attrs.join(" ")}/>` : "";
52
52
  }
53
53
  function serializeColumns(props) {
54
- if (!props.columnCount && !props.columns?.length && props.columnSpace === void 0) return "";
54
+ if (props.columnCount === void 0 && !props.columns?.length && props.columnSpace === void 0) return "";
55
55
  const attrs = [];
56
- if (props.columnCount !== void 0 && props.columnCount > 1) attrs.push(`w:num="${intAttr(props.columnCount)}"`);
56
+ if (props.columnCount !== void 0 && props.columnCount >= 1) attrs.push(`w:num="${intAttr(props.columnCount)}"`);
57
57
  if (props.columnSpace !== void 0) attrs.push(`w:space="${intAttr(props.columnSpace)}"`);
58
58
  if (props.equalWidth !== void 0) attrs.push(`w:equalWidth="${props.equalWidth ? "1" : "0"}"`);
59
59
  if (props.separator) attrs.push("w:sep=\"1\"");
@@ -170,7 +170,8 @@ function serializeSectionProperties(props) {
170
170
  if (props.verticalAlign) parts.push(`<w:vAlign w:val="${props.verticalAlign}"/>`);
171
171
  if (props.textDirection) parts.push(`<w:textDirection w:val="${props.textDirection}"/>`);
172
172
  if (props.titlePg) parts.push("<w:titlePg/>");
173
- if (props.bidi) parts.push("<w:bidi/>");
173
+ const bidiXml = serializeOnOffElement(props.bidi, "bidi");
174
+ if (bidiXml) parts.push(bidiXml);
174
175
  for (const xml of [
175
176
  serializeOnOffElement(props.formProtection, "formProt"),
176
177
  serializeOnOffElement(props.noEndnote, "noEndnote"),
@@ -1,5 +1,4 @@
1
1
  import { document_d_exports } from "../../types/document.js";
2
-
3
2
  //#region src/docx/serializer/settingsSerializer.d.ts
4
3
  declare const serializeSettingsXml: (settings: document_d_exports.DocumentSettings) => string;
5
4
  //#endregion
@@ -1,5 +1,4 @@
1
1
  import { document_d_exports } from "../../types/document.js";
2
-
3
2
  //#region src/docx/serializer/stylesSerializer.d.ts
4
3
  declare const serializeStylesXml: (definitions: document_d_exports.StyleDefinitions) => string;
5
4
  //#endregion
@@ -1,5 +1,4 @@
1
1
  import { document_d_exports } from "../../types/document.js";
2
-
3
2
  //#region src/docx/serializer/tableSerializer.d.ts
4
3
  type ParagraphSerializer = (paragraph: document_d_exports.Paragraph) => string;
5
4
  /**
@@ -172,6 +172,8 @@ function serializeTablePropertyChange(change) {
172
172
  function serializeTableRowFormatting(formatting, propertyChanges, structuralChange) {
173
173
  const parts = [];
174
174
  if (formatting) {
175
+ const cnfStyleXml = serializeConditionalFormatStyle(formatting.conditionalFormat);
176
+ if (cnfStyleXml) parts.push(cnfStyleXml);
175
177
  if (formatting.gridBefore) parts.push(`<w:gridBefore w:val="${intAttr(formatting.gridBefore)}"/>`);
176
178
  if (formatting.widthBefore) parts.push(`<w:wBefore w:w="${intAttr(formatting.widthBefore.value)}" w:type="${formatting.widthBefore.type}"/>`);
177
179
  if (formatting.gridAfter) parts.push(`<w:gridAfter w:val="${intAttr(formatting.gridAfter)}"/>`);
@@ -1,5 +1,4 @@
1
1
  import { document_d_exports } from "../../types/document.js";
2
-
3
2
  //#region src/docx/serializer/themeSerializer.d.ts
4
3
  declare const serializeThemeXml: (theme: document_d_exports.Theme) => string;
5
4
  //#endregion
@@ -3,8 +3,17 @@ import { getLocalName, parseXml } from "../xmlParser.js";
3
3
  /**
4
4
  * Shared XML utility functions for serializers.
5
5
  */
6
+ const XML_SPECIAL_CHARACTER_PATTERN = /[&<>"']/u;
7
+ const XML_SPECIAL_CHARACTER_GLOBAL_PATTERN = /[&<>"']/gu;
6
8
  function escapeXml(text) {
7
- return text.replace(/&/gu, "&amp;").replace(/</gu, "&lt;").replace(/>/gu, "&gt;").replace(/"/gu, "&quot;").replace(/'/gu, "&apos;");
9
+ if (!XML_SPECIAL_CHARACTER_PATTERN.test(text)) return text;
10
+ return text.replace(XML_SPECIAL_CHARACTER_GLOBAL_PATTERN, (character) => {
11
+ if (character === "&") return "&amp;";
12
+ if (character === "<") return "&lt;";
13
+ if (character === ">") return "&gt;";
14
+ if (character === "\"") return "&quot;";
15
+ return "&apos;";
16
+ });
8
17
  }
9
18
  /**
10
19
  * Format a numeric value as an integer XML attribute.