@stll/folio-core 0.14.1 → 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 (444) 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/compat/eigenpal.d.ts +2 -1
  17. package/dist/compat/eigenpal.js +2 -1
  18. package/dist/content-controls/errors.d.ts +0 -1
  19. package/dist/content-controls/findContentControls.d.ts +6 -4
  20. package/dist/content-controls/mutateContentControls.d.ts +0 -1
  21. package/dist/controller/activeEditorStory.d.ts +1 -6
  22. package/dist/controller/collaborationModules.d.ts +0 -1
  23. package/dist/controller/contentControlWidgetController.d.ts +0 -1
  24. package/dist/controller/folioEditor.d.ts +2 -2
  25. package/dist/controller/folioEditorEvents.d.ts +5 -3
  26. package/dist/controller/fontReadiness.d.ts +0 -1
  27. package/dist/controller/headerFooterEditorManager.d.ts +1 -5
  28. package/dist/controller/hiddenEditorApi.d.ts +35 -18
  29. package/dist/controller/hiddenEditorManager.d.ts +5 -3
  30. package/dist/controller/latestRequestGate.d.ts +3 -1
  31. package/dist/controller/layoutPipeline.d.ts +1 -1
  32. package/dist/controller/layoutScheduler.d.ts +8 -5
  33. package/dist/controller/layoutSession.d.ts +0 -1
  34. package/dist/controller/noteEditorManager.d.ts +0 -1
  35. package/dist/document-operations.d.ts +5 -12
  36. package/dist/document-stories.d.ts +0 -1
  37. package/dist/docx/blockContentParser.d.ts +0 -1
  38. package/dist/docx/blockContentParser.js +1 -0
  39. package/dist/docx/bookmarkParser.d.ts +5 -3
  40. package/dist/docx/bookmarkPlacement.d.ts +0 -1
  41. package/dist/docx/commentParser.d.ts +0 -1
  42. package/dist/docx/commentRangeIntegrity.d.ts +0 -1
  43. package/dist/docx/commentReferenceNormalization.d.ts +1 -9
  44. package/dist/docx/commentReplyMarkers.d.ts +0 -1
  45. package/dist/docx/compatibility.d.ts +0 -1
  46. package/dist/docx/conformance.d.ts +0 -1
  47. package/dist/docx/corePropertiesParser.d.ts +0 -1
  48. package/dist/docx/documentParser.d.ts +0 -1
  49. package/dist/docx/documentParser.js +3 -1
  50. package/dist/docx/drawingUtils.d.ts +23 -2
  51. package/dist/docx/drawingUtils.js +23 -1
  52. package/dist/docx/encryption/agileDecryption.d.ts +0 -1
  53. package/dist/docx/encryption/cryptoBytes.js +4 -1
  54. package/dist/docx/encryption/openEncryptedDocx.d.ts +5 -2
  55. package/dist/docx/ensureParaIds.d.ts +7 -3
  56. package/dist/docx/fieldParser.d.ts +23 -11
  57. package/dist/docx/fontTableParser.d.ts +0 -1
  58. package/dist/docx/footnoteParser.d.ts +26 -13
  59. package/dist/docx/footnoteParser.js +4 -2
  60. package/dist/docx/groupDrawingParser.d.ts +0 -1
  61. package/dist/docx/headerFooterParser.d.ts +9 -5
  62. package/dist/docx/headerFooterRefParser.d.ts +0 -1
  63. package/dist/docx/headerFooterReferenceNormalization.d.ts +1 -6
  64. package/dist/docx/headerFooterVerbatim.d.ts +2 -2
  65. package/dist/docx/hyperlinkParser.d.ts +0 -1
  66. package/dist/docx/hyperlinkParser.js +1 -9
  67. package/dist/docx/imageParser.d.ts +0 -1
  68. package/dist/docx/imageParser.js +15 -7
  69. package/dist/docx/mathToMathml.d.ts +0 -1
  70. package/dist/docx/metadataPrivacy.d.ts +1 -3
  71. package/dist/docx/modelValidation.d.ts +0 -1
  72. package/dist/docx/newImage.d.ts +11 -0
  73. package/dist/docx/newImage.js +11 -0
  74. package/dist/docx/normalizeBaseDirection.d.ts +0 -1
  75. package/dist/docx/notePropertiesParser.d.ts +0 -1
  76. package/dist/docx/numberingParser.d.ts +10 -6
  77. package/dist/docx/numberingParser.js +4 -2
  78. package/dist/docx/numberingReferenceNormalization.d.ts +1 -9
  79. package/dist/docx/paragraphParser.d.ts +0 -1
  80. package/dist/docx/paragraphParser.js +27 -14
  81. package/dist/docx/paragraphTextBoxEnrichment.d.ts +0 -1
  82. package/dist/docx/paragraphTextBoxEnrichment.js +2 -1
  83. package/dist/docx/paragraphTraversal.d.ts +1 -8
  84. package/dist/docx/parser.d.ts +15 -8
  85. package/dist/docx/parser.js +12 -1
  86. package/dist/docx/parserEnums.d.ts +2 -2
  87. package/dist/docx/parserEnums.js +3 -2
  88. package/dist/docx/relsParser.d.ts +1 -0
  89. package/dist/docx/renderedPageBreakNormalization.d.ts +12 -0
  90. package/dist/docx/renderedPageBreakNormalization.js +59 -0
  91. package/dist/docx/replyToComment.d.ts +2 -2
  92. package/dist/docx/rezip.d.ts +6 -7
  93. package/dist/docx/rezip.js +136 -102
  94. package/dist/docx/runConsolidator.d.ts +0 -1
  95. package/dist/docx/runParser.d.ts +0 -1
  96. package/dist/docx/runParser.js +9 -12
  97. package/dist/docx/sdtProperties.d.ts +0 -1
  98. package/dist/docx/sdtPropertiesPatch.d.ts +0 -1
  99. package/dist/docx/sectionParser.d.ts +0 -1
  100. package/dist/docx/selectiveSave.d.ts +5 -3
  101. package/dist/docx/selectiveSave.js +2 -2
  102. package/dist/docx/selectiveSaveFlags.d.ts +4 -2
  103. package/dist/docx/selectiveXmlPatch.js +20 -8
  104. package/dist/docx/serializer/blockSdtSerializer.d.ts +0 -1
  105. package/dist/docx/serializer/blockSdtSerializer.js +2 -1
  106. package/dist/docx/serializer/borderSerializer.d.ts +0 -1
  107. package/dist/docx/serializer/commentSerializer.d.ts +0 -1
  108. package/dist/docx/serializer/commentSerializer.js +11 -37
  109. package/dist/docx/serializer/documentSerializer.d.ts +0 -1
  110. package/dist/docx/serializer/documentSerializer.js +1 -1
  111. package/dist/docx/serializer/fontTableSerializer.d.ts +0 -1
  112. package/dist/docx/serializer/headerFooterSerializer.d.ts +0 -1
  113. package/dist/docx/serializer/headerFooterSerializer.js +1 -1
  114. package/dist/docx/serializer/noteSerializer.d.ts +0 -1
  115. package/dist/docx/serializer/noteSerializer.js +1 -1
  116. package/dist/docx/serializer/numberingSerializer.d.ts +0 -1
  117. package/dist/docx/serializer/paragraphSerializer.d.ts +0 -1
  118. package/dist/docx/serializer/paragraphSerializer.js +10 -23
  119. package/dist/docx/serializer/runSerializer.d.ts +0 -1
  120. package/dist/docx/serializer/runSerializer.js +37 -22
  121. package/dist/docx/serializer/sectionPropertiesSerializer.d.ts +0 -1
  122. package/dist/docx/serializer/sectionPropertiesSerializer.js +5 -4
  123. package/dist/docx/serializer/settingsSerializer.d.ts +0 -1
  124. package/dist/docx/serializer/stylesSerializer.d.ts +0 -1
  125. package/dist/docx/serializer/tableSerializer.d.ts +0 -1
  126. package/dist/docx/serializer/tableSerializer.js +2 -0
  127. package/dist/docx/serializer/themeSerializer.d.ts +0 -1
  128. package/dist/docx/serializer/xmlUtils.js +10 -1
  129. package/dist/docx/server/applyDocxXmlPatchProposal.d.ts +3 -10
  130. package/dist/docx/server/docxToMarkdown.d.ts +0 -1
  131. package/dist/docx/server/evaluateDocxXmlPatchProposal.d.ts +3 -9
  132. package/dist/docx/server/inspectDocxPackage.d.ts +3 -8
  133. package/dist/docx/server/validateDocxConformance.d.ts +0 -1
  134. package/dist/docx/settingsParser.d.ts +2 -2
  135. package/dist/docx/shapeParser.d.ts +0 -1
  136. package/dist/docx/shapeParser.js +11 -10
  137. package/dist/docx/streamingXmlParser.d.ts +16 -0
  138. package/dist/docx/streamingXmlParser.js +248 -0
  139. package/dist/docx/styleParser.d.ts +0 -1
  140. package/dist/docx/styleParser.js +6 -4
  141. package/dist/docx/tableParser.d.ts +1 -2
  142. package/dist/docx/tableParser.js +3 -6
  143. package/dist/docx/textBoxParser.d.ts +1 -2
  144. package/dist/docx/textBoxParser.js +4 -1
  145. package/dist/docx/textWhitespace.d.ts +4 -0
  146. package/dist/docx/textWhitespace.js +4 -0
  147. package/dist/docx/themeParser.d.ts +0 -1
  148. package/dist/docx/trackedMoveRangeNormalization.d.ts +1 -8
  149. package/dist/docx/unzip.d.ts +6 -3
  150. package/dist/docx/unzip.js +96 -40
  151. package/dist/docx/vmlImageParser.d.ts +0 -1
  152. package/dist/docx/vmlImageParser.js +3 -1
  153. package/dist/docx/watermarkParser.d.ts +0 -1
  154. package/dist/docx/xmlParser.d.ts +21 -8
  155. package/dist/docx/xmlParser.js +126 -43
  156. package/dist/fields/bookmarkPages.d.ts +0 -1
  157. package/dist/fields/bookmarkText.d.ts +0 -1
  158. package/dist/fields/evaluateField.d.ts +5 -3
  159. package/dist/fields/fieldContext.d.ts +11 -5
  160. package/dist/fields/resolveFieldValues.d.ts +4 -3
  161. package/dist/fields/sectionPageCounts.d.ts +0 -1
  162. package/dist/fields/seqValues.d.ts +0 -1
  163. package/dist/fonts/embeddedFontTable.d.ts +5 -2
  164. package/dist/fonts/embeddedFonts.d.ts +15 -7
  165. package/dist/index.d.ts +3 -1
  166. package/dist/index.js +2 -1
  167. package/dist/layout-bridge/cellSelectionHighlight.d.ts +0 -1
  168. package/dist/layout-bridge/convert/footnoteLayout.d.ts +5 -3
  169. package/dist/layout-bridge/convert/headerFooterLayout.d.ts +2 -2
  170. package/dist/layout-bridge/convert/paragraphFrames.d.ts +0 -1
  171. package/dist/layout-bridge/convert/templatePreviewFlow.d.ts +8 -8
  172. package/dist/layout-bridge/convert/toFlowBlocks.d.ts +25 -13
  173. package/dist/layout-bridge/convert/wrapEditorViewAsSurface.d.ts +3 -2
  174. package/dist/layout-bridge/dom/findHfPmSpans.d.ts +2 -1
  175. package/dist/layout-bridge/dom/noteStoryDom.d.ts +0 -1
  176. package/dist/layout-bridge/engine/clickToPosition.d.ts +5 -3
  177. package/dist/layout-bridge/engine/hitTest.d.ts +40 -19
  178. package/dist/layout-bridge/engine/selectionRects.d.ts +16 -8
  179. package/dist/layout-bridge/engine/tableWidthUtils.d.ts +0 -1
  180. package/dist/layout-bridge/headerFooterLayout.d.ts +0 -1
  181. package/dist/layout-bridge/sectionColumns.d.ts +0 -1
  182. package/dist/layout-bridge/tableInsertHover.d.ts +8 -4
  183. package/dist/layout-engine/headerFooterRefs.d.ts +0 -1
  184. package/dist/layout-engine/index.d.ts +0 -1
  185. package/dist/layout-engine/justificationCompatibility.d.ts +0 -1
  186. package/dist/layout-engine/keep-together.d.ts +7 -4
  187. package/dist/layout-engine/layoutInstrumentation.d.ts +0 -1
  188. package/dist/layout-engine/lineFlow.d.ts +0 -1
  189. package/dist/layout-engine/measure/cache.d.ts +0 -1
  190. package/dist/layout-engine/measure/effectiveLineBreakPolicy.d.ts +6 -7
  191. package/dist/layout-engine/measure/floatingTablePosition.d.ts +0 -1
  192. package/dist/layout-engine/measure/floatingZones.d.ts +14 -6
  193. package/dist/layout-engine/measure/font-metrics.worker.d.ts +0 -1
  194. package/dist/layout-engine/measure/lineBreakProvider.d.ts +20 -9
  195. package/dist/layout-engine/measure/lineBreaks.d.ts +0 -1
  196. package/dist/layout-engine/measure/listMarkerWidth.d.ts +0 -1
  197. package/dist/layout-engine/measure/measureBlocks.d.ts +1 -0
  198. package/dist/layout-engine/measure/measureContainer.d.ts +0 -1
  199. package/dist/layout-engine/measure/measureHelpers.d.ts +0 -1
  200. package/dist/layout-engine/measure/measureParagraph.d.ts +3 -2
  201. package/dist/layout-engine/measure/measureParagraph.js +23 -3
  202. package/dist/layout-engine/measure/measureProvider.d.ts +0 -1
  203. package/dist/layout-engine/measure/measureTypes.d.ts +4 -2
  204. package/dist/layout-engine/measure/measureWorker.d.ts +0 -1
  205. package/dist/layout-engine/measure/measureWorkerProtocol.d.ts +0 -1
  206. package/dist/layout-engine/measure/tableCellFloating.d.ts +0 -1
  207. package/dist/layout-engine/measure/tableCellFlow.d.ts +0 -1
  208. package/dist/layout-engine/measure/tableCellGrid.d.ts +0 -1
  209. package/dist/layout-engine/measure/textBoxParagraphLayout.d.ts +0 -1
  210. package/dist/layout-engine/measure/textMeasurementPolicy.d.ts +0 -1
  211. package/dist/layout-engine/paginator.d.ts +66 -33
  212. package/dist/layout-engine/paragraphFragmentRange.d.ts +0 -1
  213. package/dist/layout-engine/paragraphFrame.d.ts +0 -1
  214. package/dist/layout-engine/paragraphSequence.d.ts +0 -1
  215. package/dist/layout-engine/paragraphSpacing.d.ts +1 -5
  216. package/dist/layout-engine/pmPageIndex.d.ts +0 -1
  217. package/dist/layout-engine/renderedBreakReconciliation.d.ts +2 -17
  218. package/dist/layout-engine/section-breaks.d.ts +34 -17
  219. package/dist/layout-engine/tableRowBreak.d.ts +4 -3
  220. package/dist/layout-engine/textBoxFlow.d.ts +0 -1
  221. package/dist/layout-engine/textBoxGroup.d.ts +0 -1
  222. package/dist/layout-engine/types.d.ts +382 -189
  223. package/dist/layout-painter/anchoredImagePosition.d.ts +0 -1
  224. package/dist/layout-painter/borderStroke.d.ts +0 -1
  225. package/dist/layout-painter/imageLayout.d.ts +14 -7
  226. package/dist/layout-painter/index.d.ts +9 -5
  227. package/dist/layout-painter/registry/modules/image.d.ts +0 -1
  228. package/dist/layout-painter/registry/modules/paragraph.d.ts +0 -1
  229. package/dist/layout-painter/registry/modules/table.d.ts +0 -1
  230. package/dist/layout-painter/registry/modules/textBox.d.ts +0 -1
  231. package/dist/layout-painter/registry/modules.d.ts +0 -1
  232. package/dist/layout-painter/registry/registry.d.ts +0 -1
  233. package/dist/layout-painter/registry/types.d.ts +0 -1
  234. package/dist/layout-painter/renderFragment.d.ts +2 -2
  235. package/dist/layout-painter/renderImage.d.ts +0 -1
  236. package/dist/layout-painter/renderPage.d.ts +71 -42
  237. package/dist/layout-painter/renderParagraph.d.ts +28 -14
  238. package/dist/layout-painter/renderParagraph.js +6 -2
  239. package/dist/layout-painter/renderTable.d.ts +0 -1
  240. package/dist/layout-painter/renderTextBox.d.ts +0 -1
  241. package/dist/layout-painter/renderUtils.d.ts +17 -9
  242. package/dist/layout-painter/renderWatermark.d.ts +2 -2
  243. package/dist/layout-painter/sdtBoundary.d.ts +0 -1
  244. package/dist/managers/AutoSaveManager.d.ts +22 -11
  245. package/dist/managers/ClipboardManager.d.ts +0 -1
  246. package/dist/managers/ContextMenuManager.d.ts +5 -8
  247. package/dist/managers/DocumentLoaderManager.d.ts +12 -6
  248. package/dist/managers/EditorModeManager.d.ts +3 -2
  249. package/dist/managers/ErrorManager.d.ts +0 -1
  250. package/dist/managers/FindReplaceManager.d.ts +0 -1
  251. package/dist/managers/HistoryManager.d.ts +19 -9
  252. package/dist/managers/TableSelectionManager.d.ts +0 -1
  253. package/dist/managers/editorShortcuts.d.ts +4 -6
  254. package/dist/markdown/annotations.d.ts +0 -1
  255. package/dist/markdown/fromMarkdown.d.ts +0 -1
  256. package/dist/markdown/fromMarkdown.js +55 -5
  257. package/dist/markdown/images.d.ts +0 -1
  258. package/dist/markdown/index.d.ts +0 -1
  259. package/dist/markdown/internals.d.ts +0 -1
  260. package/dist/markdown/renderBlock.d.ts +0 -1
  261. package/dist/markdown/renderParagraph.d.ts +0 -1
  262. package/dist/markdown/renderRuns.d.ts +0 -1
  263. package/dist/markdown/renderTable.d.ts +0 -1
  264. package/dist/markdown/trailers.d.ts +0 -1
  265. package/dist/markdown/types.d.ts +39 -18
  266. package/dist/model.d.ts +3 -5
  267. package/dist/model.js +2 -2
  268. package/dist/paged-layout/incrementalMeasure.d.ts +1 -10
  269. package/dist/paged-layout/pageText.d.ts +1 -1
  270. package/dist/paged-layout/paragraphFlash.d.ts +0 -1
  271. package/dist/paged-layout/paragraphFlashTypes.d.ts +5 -2
  272. package/dist/paged-layout/rangeProjection.d.ts +10 -5
  273. package/dist/paged-layout/scrollNavigation.d.ts +0 -1
  274. package/dist/paged-layout/scrollPageInfo.d.ts +12 -13
  275. package/dist/paged-layout/scrollToPmPosition.d.ts +0 -1
  276. package/dist/paged-layout/sectionBlockWidths.d.ts +2 -11
  277. package/dist/paged-layout/sectionGeometry.d.ts +0 -1
  278. package/dist/paged-layout/selectionViewportRect.d.ts +0 -1
  279. package/dist/paged-layout/transactionDirtyRange.d.ts +0 -1
  280. package/dist/paged-layout/zoomScrollAnchor.d.ts +2 -12
  281. package/dist/prosemirror/attrs/index.d.ts +2 -2
  282. package/dist/prosemirror/attrs/index.js +5 -0
  283. package/dist/prosemirror/autospacingBase.d.ts +0 -1
  284. package/dist/prosemirror/cellDragSelection.d.ts +6 -4
  285. package/dist/prosemirror/commands/comments.d.ts +6 -4
  286. package/dist/prosemirror/commands/contentControls.d.ts +5 -3
  287. package/dist/prosemirror/commands/contentControlsBlockFill.d.ts +1 -1
  288. package/dist/prosemirror/commands/formatPainter.d.ts +0 -1
  289. package/dist/prosemirror/commands/formatting.d.ts +1 -1
  290. package/dist/prosemirror/commands/hyperlink.d.ts +4 -9
  291. package/dist/prosemirror/commands/image.d.ts +0 -1
  292. package/dist/prosemirror/commands/pageBreak.d.ts +0 -1
  293. package/dist/prosemirror/commands/paragraph.d.ts +0 -1
  294. package/dist/prosemirror/commands/pastePlainText.d.ts +0 -1
  295. package/dist/prosemirror/commands/propertyChangeScope.d.ts +0 -1
  296. package/dist/prosemirror/commands/sectionBreak.d.ts +0 -1
  297. package/dist/prosemirror/commands/table.d.ts +0 -1
  298. package/dist/prosemirror/commands/tableCellMergeResolution.d.ts +0 -1
  299. package/dist/prosemirror/commentIdAllocator.d.ts +2 -2
  300. package/dist/prosemirror/commentOps.d.ts +0 -1
  301. package/dist/prosemirror/conversion/effectiveTableCellFormatting.d.ts +1 -10
  302. package/dist/prosemirror/conversion/fromProseDoc.d.ts +0 -1
  303. package/dist/prosemirror/conversion/fromProseDoc.js +7 -4
  304. package/dist/prosemirror/conversion/runShadingMark.d.ts +0 -1
  305. package/dist/prosemirror/conversion/sdtAttrs.d.ts +0 -1
  306. package/dist/prosemirror/conversion/toProseDoc.d.ts +3 -2
  307. package/dist/prosemirror/conversion/toProseDoc.js +16 -2
  308. package/dist/prosemirror/extensions/ExtensionManager.d.ts +0 -1
  309. package/dist/prosemirror/extensions/StarterKit.d.ts +7 -4
  310. package/dist/prosemirror/extensions/core/DocExtension.d.ts +0 -1
  311. package/dist/prosemirror/extensions/core/HistoryExtension.d.ts +0 -1
  312. package/dist/prosemirror/extensions/core/ParagraphExtension.d.ts +0 -1
  313. package/dist/prosemirror/extensions/core/TextExtension.d.ts +0 -1
  314. package/dist/prosemirror/extensions/create.d.ts +0 -1
  315. package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.d.ts +0 -1
  316. package/dist/prosemirror/extensions/features/BaseKeymapExtension.d.ts +0 -1
  317. package/dist/prosemirror/extensions/features/BidiShortcutExtension.d.ts +0 -1
  318. package/dist/prosemirror/extensions/features/ContentControlWidgetsExtension.d.ts +0 -1
  319. package/dist/prosemirror/extensions/features/DropCursorExtension.d.ts +0 -1
  320. package/dist/prosemirror/extensions/features/EmptyParagraphFormatExtension.d.ts +0 -1
  321. package/dist/prosemirror/extensions/features/GapCursorExtension.d.ts +0 -1
  322. package/dist/prosemirror/extensions/features/ImageDragExtension.d.ts +0 -1
  323. package/dist/prosemirror/extensions/features/ImagePasteExtension.d.ts +0 -1
  324. package/dist/prosemirror/extensions/features/ListExtension.d.ts +0 -1
  325. package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.d.ts +0 -1
  326. package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.d.ts +7 -4
  327. package/dist/prosemirror/extensions/features/PasteCleanupExtension.d.ts +0 -1
  328. package/dist/prosemirror/extensions/features/PasteStyleInlinerExtension.d.ts +0 -1
  329. package/dist/prosemirror/extensions/features/SelectionTrackerExtension.d.ts +0 -1
  330. package/dist/prosemirror/extensions/features/bidiShortcutController.d.ts +3 -1
  331. package/dist/prosemirror/extensions/marks/AllCapsExtension.d.ts +0 -1
  332. package/dist/prosemirror/extensions/marks/BoldExtension.d.ts +0 -1
  333. package/dist/prosemirror/extensions/marks/CharacterSpacingExtension.d.ts +0 -1
  334. package/dist/prosemirror/extensions/marks/CharacterStyleExtension.d.ts +0 -1
  335. package/dist/prosemirror/extensions/marks/CommentExtension.d.ts +0 -1
  336. package/dist/prosemirror/extensions/marks/FontFamilyExtension.d.ts +0 -1
  337. package/dist/prosemirror/extensions/marks/FontFamilyExtension.js +1 -0
  338. package/dist/prosemirror/extensions/marks/FontSizeExtension.d.ts +0 -1
  339. package/dist/prosemirror/extensions/marks/FootnoteRefExtension.d.ts +0 -1
  340. package/dist/prosemirror/extensions/marks/HiddenTextExtension.d.ts +0 -1
  341. package/dist/prosemirror/extensions/marks/HighlightExtension.d.ts +0 -1
  342. package/dist/prosemirror/extensions/marks/HyperlinkExtension.d.ts +0 -1
  343. package/dist/prosemirror/extensions/marks/ItalicExtension.d.ts +0 -1
  344. package/dist/prosemirror/extensions/marks/LanguageExtension.d.ts +0 -1
  345. package/dist/prosemirror/extensions/marks/RtlExtension.d.ts +0 -1
  346. package/dist/prosemirror/extensions/marks/RunFormattingOverrideExtension.d.ts +0 -1
  347. package/dist/prosemirror/extensions/marks/RunShadingExtension.d.ts +0 -1
  348. package/dist/prosemirror/extensions/marks/SmallCapsExtension.d.ts +0 -1
  349. package/dist/prosemirror/extensions/marks/StrikeExtension.d.ts +0 -1
  350. package/dist/prosemirror/extensions/marks/SubscriptExtension.d.ts +0 -1
  351. package/dist/prosemirror/extensions/marks/SuperscriptExtension.d.ts +0 -1
  352. package/dist/prosemirror/extensions/marks/TextColorExtension.d.ts +0 -1
  353. package/dist/prosemirror/extensions/marks/TextEffectExtension.d.ts +0 -1
  354. package/dist/prosemirror/extensions/marks/TextEffectsExtensions.d.ts +0 -1
  355. package/dist/prosemirror/extensions/marks/TrackedChangeExtensions.d.ts +0 -1
  356. package/dist/prosemirror/extensions/marks/UnderlineExtension.d.ts +0 -1
  357. package/dist/prosemirror/extensions/marks/markUtils.d.ts +0 -1
  358. package/dist/prosemirror/extensions/marks/markUtils.js +4 -1
  359. package/dist/prosemirror/extensions/nodes/BlockSdtExtension.d.ts +0 -1
  360. package/dist/prosemirror/extensions/nodes/FieldExtension.d.ts +0 -1
  361. package/dist/prosemirror/extensions/nodes/HardBreakExtension.d.ts +0 -1
  362. package/dist/prosemirror/extensions/nodes/HorizontalRuleExtension.d.ts +0 -1
  363. package/dist/prosemirror/extensions/nodes/ImageExtension.d.ts +0 -1
  364. package/dist/prosemirror/extensions/nodes/ImageExtension.js +2 -0
  365. package/dist/prosemirror/extensions/nodes/MathExtension.d.ts +0 -1
  366. package/dist/prosemirror/extensions/nodes/PageBreakExtension.d.ts +0 -1
  367. package/dist/prosemirror/extensions/nodes/RenderedPageBreakExtension.d.ts +0 -1
  368. package/dist/prosemirror/extensions/nodes/SdtExtension.d.ts +0 -1
  369. package/dist/prosemirror/extensions/nodes/ShapeExtension.d.ts +0 -1
  370. package/dist/prosemirror/extensions/nodes/ShapeExtension.js +2 -0
  371. package/dist/prosemirror/extensions/nodes/TabExtension.d.ts +0 -1
  372. package/dist/prosemirror/extensions/nodes/TableExtension.d.ts +4 -3
  373. package/dist/prosemirror/extensions/nodes/TextBoxAnchorExtension.d.ts +0 -1
  374. package/dist/prosemirror/extensions/nodes/TextBoxExtension.d.ts +53 -27
  375. package/dist/prosemirror/extensions/types.d.ts +0 -1
  376. package/dist/prosemirror/findReplaceSelection.d.ts +5 -3
  377. package/dist/prosemirror/imageCommit.d.ts +0 -1
  378. package/dist/prosemirror/index.d.ts +4 -0
  379. package/dist/prosemirror/insertOperations.d.ts +0 -1
  380. package/dist/prosemirror/paraText.d.ts +0 -1
  381. package/dist/prosemirror/plugins/aiCitationDecorations.d.ts +2 -2
  382. package/dist/prosemirror/plugins/aiSuggestionDecorations.d.ts +0 -1
  383. package/dist/prosemirror/plugins/anonymizationDecorations.d.ts +9 -7
  384. package/dist/prosemirror/plugins/autocompleteSuggestion.d.ts +2 -2
  385. package/dist/prosemirror/plugins/contentControlWidgets.d.ts +4 -7
  386. package/dist/prosemirror/plugins/createDocScanPlugin.d.ts +3 -8
  387. package/dist/prosemirror/plugins/documentStyles.d.ts +0 -1
  388. package/dist/prosemirror/plugins/pmTextScan.d.ts +2 -2
  389. package/dist/prosemirror/plugins/revisionIds.d.ts +0 -1
  390. package/dist/prosemirror/plugins/selectionTracker.d.ts +23 -12
  391. package/dist/prosemirror/plugins/suggestionMode.d.ts +0 -1
  392. package/dist/prosemirror/plugins/templateDirectives.d.ts +10 -8
  393. package/dist/prosemirror/plugins/templatePreviewValues.d.ts +10 -5
  394. package/dist/prosemirror/plugins/templateSlashMenu.d.ts +2 -2
  395. package/dist/prosemirror/queries.d.ts +0 -1
  396. package/dist/prosemirror/schema/index.d.ts +0 -1
  397. package/dist/prosemirror/schema/marks.d.ts +8 -5
  398. package/dist/prosemirror/schema/nodes.d.ts +340 -163
  399. package/dist/prosemirror/selectionState.d.ts +13 -7
  400. package/dist/prosemirror/styles/resolvedStyleAttrs.d.ts +0 -1
  401. package/dist/prosemirror/styles/styleResolver.d.ts +3 -2
  402. package/dist/prosemirror/tableCellMergeRevision.d.ts +0 -1
  403. package/dist/prosemirror/tableResize.d.ts +0 -1
  404. package/dist/prosemirror/textBoxAnchorAttrs.d.ts +0 -1
  405. package/dist/prosemirror/utils/extractTrackedChanges.d.ts +8 -5
  406. package/dist/prosemirror/utils/findParagraphByParaId.d.ts +0 -1
  407. package/dist/prosemirror/utils/tabCalculator.d.ts +18 -7
  408. package/dist/prosemirror/utils/visualLineNavigation.d.ts +0 -1
  409. package/dist/prosemirror/validation.d.ts +0 -1
  410. package/dist/redline.d.ts +16 -8
  411. package/dist/render-dom/BodySelectionOverlay.d.ts +1 -9
  412. package/dist/render-dom/HeaderFooterSelectionOverlay.d.ts +0 -1
  413. package/dist/render-dom/RemoteSelectionOverlay.d.ts +1 -8
  414. package/dist/render-dom/resolveSidebarItemPositions.d.ts +1 -9
  415. package/dist/style-engine/styleEngine.d.ts +21 -11
  416. package/dist/style-sets/extract.d.ts +4 -3
  417. package/dist/style-sets/stellaStyle.d.ts +0 -1
  418. package/dist/style-sets/types.d.ts +0 -1
  419. package/dist/symbols.d.ts +6 -2
  420. package/dist/types/block-id.d.ts +3 -6
  421. package/dist/types/document.d.ts +0 -3
  422. package/dist/types/documentEnumValues.d.ts +2 -1
  423. package/dist/types/documentEnumValues.js +6 -1
  424. package/dist/utils/clipboard.d.ts +17 -8
  425. package/dist/utils/colorResolver.d.ts +9 -5
  426. package/dist/utils/createDocument.d.ts +19 -10
  427. package/dist/utils/documentLoaderBehavior.d.ts +1 -5
  428. package/dist/utils/docxInput.js +1 -0
  429. package/dist/utils/findReplace.d.ts +0 -1
  430. package/dist/utils/fontFamilyMerge.d.ts +0 -1
  431. package/dist/utils/fontResolver.d.ts +10 -4
  432. package/dist/utils/formatToStyle.d.ts +0 -1
  433. package/dist/utils/headerFooter.d.ts +8 -16
  434. package/dist/utils/headingCollector.d.ts +7 -4
  435. package/dist/utils/mergeDocumentContent.d.ts +28 -0
  436. package/dist/utils/mergeDocumentContent.js +145 -0
  437. package/dist/utils/paragraphFormattingMerge.d.ts +0 -1
  438. package/dist/utils/replaceText.d.ts +0 -1
  439. package/dist/utils/rotationBoundingBox.d.ts +0 -1
  440. package/dist/utils/tableOperations.d.ts +0 -1
  441. package/dist/utils/textFormattingMerge.d.ts +0 -1
  442. package/dist/version-comparison.d.ts +12 -6
  443. package/dist/watermark/index.d.ts +0 -1
  444. 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/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.
@@ -1,13 +1,13 @@
1
1
  import { DocxArchiveOptions } from "./boundedArchive.js";
2
2
  import { FOLIO_DOCX_XML_PATCH_PROPOSAL_PROFILE, FolioDocxPreparedXmlReplacement, FolioDocxXmlPatchProposalEvaluation, FolioDocxXmlPatchProposalLimits } from "./evaluateDocxXmlPatchProposal.js";
3
3
  import { FOLIO_DOCX_CONFORMANCE_PROFILE, FolioDocxConformanceReport } from "./validateDocxConformance.js";
4
-
5
4
  //#region src/docx/server/applyDocxXmlPatchProposal.d.ts
6
5
  declare const FOLIO_DOCX_XML_PATCH_APPLICATION_VERSION: 1;
7
6
  declare const FOLIO_DOCX_XML_PATCH_APPLICATION_PROFILE: "folio-xml-patch-application-v1";
8
7
  type ApplyDocxXmlPatchProposalArgs = {
9
8
  readonly bytes: ArrayBuffer | Uint8Array;
10
- readonly proposal: unknown; /** Exact package paths authorized by the server-side caller. */
9
+ readonly proposal: unknown;
10
+ /** Exact package paths authorized by the server-side caller. */
11
11
  readonly allowedParts: readonly string[];
12
12
  readonly validationProfile: typeof FOLIO_DOCX_CONFORMANCE_PROFILE;
13
13
  readonly archive?: DocxArchiveOptions;
@@ -75,13 +75,6 @@ declare const FolioDocxXmlPatchApplicationError_base: import("better-result").Ta
75
75
  }>;
76
76
  declare class FolioDocxXmlPatchApplicationError extends FolioDocxXmlPatchApplicationError_base {}
77
77
  /** Apply a guarded XML proposal and return output only after full profile validation. */
78
- declare const applyDocxXmlPatchProposal: ({
79
- bytes,
80
- proposal: rawProposal,
81
- allowedParts,
82
- validationProfile,
83
- archive,
84
- limits
85
- }: ApplyDocxXmlPatchProposalArgs) => Promise<FolioDocxXmlPatchApplication>;
78
+ declare const applyDocxXmlPatchProposal: ({ bytes, proposal: rawProposal, allowedParts, validationProfile, archive, limits }: ApplyDocxXmlPatchProposalArgs) => Promise<FolioDocxXmlPatchApplication>;
86
79
  //#endregion
87
80
  export { ApplyDocxXmlPatchProposalArgs, FOLIO_DOCX_XML_PATCH_APPLICATION_PROFILE, FOLIO_DOCX_XML_PATCH_APPLICATION_VERSION, FolioDocxXmlPatchApplication, FolioDocxXmlPatchApplicationError, FolioDocxXmlPatchApplicationReceipt, UnsupportedFolioDocxXmlPatchApplicationProfileError, applyDocxXmlPatchProposal };
@@ -1,5 +1,4 @@
1
1
  import { MarkdownOptions } from "../../markdown/types.js";
2
-
3
2
  //#region src/docx/server/docxToMarkdown.d.ts
4
3
  /**
5
4
  * Convert a DOCX file to markdown in a single server-safe call.
@@ -1,5 +1,4 @@
1
1
  import { DocxArchiveOptions } from "./boundedArchive.js";
2
-
3
2
  //#region src/docx/server/evaluateDocxXmlPatchProposal.d.ts
4
3
  declare const FOLIO_DOCX_XML_PATCH_PROPOSAL_VERSION: 1;
5
4
  declare const FOLIO_DOCX_XML_PATCH_PROPOSAL_PROFILE: "folio-xml-patch-proposal-v1";
@@ -26,7 +25,8 @@ type FolioDocxXmlPatchProposalLimits = {
26
25
  };
27
26
  type EvaluateDocxXmlPatchProposalArgs = {
28
27
  readonly bytes: ArrayBuffer | Uint8Array;
29
- readonly proposal: unknown; /** Exact package paths authorized by the server-side caller. */
28
+ readonly proposal: unknown;
29
+ /** Exact package paths authorized by the server-side caller. */
30
30
  readonly allowedParts: readonly string[];
31
31
  readonly archive?: DocxArchiveOptions;
32
32
  readonly limits?: FolioDocxXmlPatchProposalLimits;
@@ -74,12 +74,6 @@ declare const InvalidFolioDocxXmlPatchProposalOptionsError_base: import("better-
74
74
  }>;
75
75
  declare class InvalidFolioDocxXmlPatchProposalOptionsError extends InvalidFolioDocxXmlPatchProposalOptionsError_base {}
76
76
  declare const parseFolioDocxXmlPatchProposal: (value: unknown) => FolioDocxXmlPatchProposal;
77
- declare const evaluateDocxXmlPatchProposal: ({
78
- bytes,
79
- proposal: rawProposal,
80
- allowedParts,
81
- archive,
82
- limits: rawLimits
83
- }: EvaluateDocxXmlPatchProposalArgs) => Promise<FolioDocxXmlPatchProposalEvaluation>;
77
+ declare const evaluateDocxXmlPatchProposal: ({ bytes, proposal: rawProposal, allowedParts, archive, limits: rawLimits }: EvaluateDocxXmlPatchProposalArgs) => Promise<FolioDocxXmlPatchProposalEvaluation>;
84
78
  //#endregion
85
79
  export { EvaluateDocxXmlPatchProposalArgs, FOLIO_DOCX_XML_PATCH_PROPOSAL_DEFAULTS, FOLIO_DOCX_XML_PATCH_PROPOSAL_ISSUE_CODES, FOLIO_DOCX_XML_PATCH_PROPOSAL_PROFILE, FOLIO_DOCX_XML_PATCH_PROPOSAL_VERSION, FolioDocxPreparedXmlReplacement, FolioDocxXmlPatchProposal, FolioDocxXmlPatchProposalEvaluation, FolioDocxXmlPatchProposalIssue, FolioDocxXmlPatchProposalIssueCode, FolioDocxXmlPatchProposalLimits, FolioDocxXmlReplacement, InvalidFolioDocxXmlPatchProposalError, InvalidFolioDocxXmlPatchProposalOptionsError, evaluateDocxXmlPatchProposal, parseFolioDocxXmlPatchProposal };
@@ -1,5 +1,4 @@
1
1
  import { DocxArchiveOptions } from "./boundedArchive.js";
2
-
3
2
  //#region src/docx/server/inspectDocxPackage.d.ts
4
3
  declare const FOLIO_DOCX_PACKAGE_INSPECTION_VERSION: 1;
5
4
  declare const FOLIO_DOCX_PACKAGE_INSPECTION_DEFAULTS: Readonly<{
@@ -37,7 +36,8 @@ type FolioDocxInspectedXmlPart = {
37
36
  readonly path: string;
38
37
  readonly contentType: string | null;
39
38
  readonly byteLength: number;
40
- readonly sha256: string; /** Untrusted document data; callers must not treat this text as instructions. */
39
+ readonly sha256: string;
40
+ /** Untrusted document data; callers must not treat this text as instructions. */
41
41
  readonly text: string;
42
42
  };
43
43
  type FolioDocxPackageInspection = {
@@ -54,12 +54,7 @@ type ReadRequestedXmlPartsOptions = {
54
54
  maxBytes: number;
55
55
  }) => Promise<Uint8Array | null>;
56
56
  };
57
- declare const readRequestedXmlParts: ({
58
- paths,
59
- partsByPath,
60
- limits,
61
- readEntryUint8
62
- }: ReadRequestedXmlPartsOptions) => Promise<FolioDocxInspectedXmlPart[]>;
57
+ declare const readRequestedXmlParts: ({ paths, partsByPath, limits, readEntryUint8 }: ReadRequestedXmlPartsOptions) => Promise<FolioDocxInspectedXmlPart[]>;
63
58
  /**
64
59
  * Inspect package metadata and only the explicitly requested XML part bodies.
65
60
  * This reports archive contents, not package conformance; use the conformance
@@ -1,6 +1,5 @@
1
1
  import { document_d_exports } from "../../types/document.js";
2
2
  import { DocxArchiveOptions } from "./boundedArchive.js";
3
-
4
3
  //#region src/docx/server/validateDocxConformance.d.ts
5
4
  declare const FOLIO_DOCX_CONFORMANCE_REPORT_VERSION: 1;
6
5
  declare const FOLIO_DOCX_CONFORMANCE_PROFILE: "folio-supported-v1";
@@ -1,8 +1,8 @@
1
1
  import { document_d_exports } from "../types/document.js";
2
-
3
2
  //#region src/docx/settingsParser.d.ts
4
3
  type FolioDocumentSettings = document_d_exports.DocumentSettings & {
5
- /** Swap left/right section margins on even physical pages. */mirrorMargins?: boolean;
4
+ /** Swap left/right section margins on even physical pages. */
5
+ mirrorMargins?: boolean;
6
6
  };
7
7
  /** OOXML default per §17.6.13 when `w:defaultTabStop` is absent. */
8
8
  declare const DEFAULT_TAB_STOP_TWIPS = 720;
@@ -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/shapeParser.d.ts
5
4
  /**
6
5
  * Parse a `<wps:wsp>` element into a Shape model. Does NOT pick up the
@@ -179,13 +179,10 @@ function colorNeedsRawPreservation(color) {
179
179
  }
180
180
  function fillNeedsRawPreservation(fill) {
181
181
  if (!fill) return false;
182
- if (fill.type === "solid") return colorNeedsRawPreservation(fill.color);
182
+ if (fill.type === "solid") return false;
183
183
  if (fill.type === "gradient") return fill.gradient?.stops.some((stop) => colorNeedsRawPreservation(stop.color)) ?? false;
184
184
  return false;
185
185
  }
186
- function outlineNeedsRawPreservation(outline) {
187
- return colorNeedsRawPreservation(outline?.color);
188
- }
189
186
  /**
190
187
  * Parse a `<wps:wsp>` element into a Shape model. Does NOT pick up the
191
188
  * extent / position / wrap fields — those live on the wrapping
@@ -231,13 +228,17 @@ function parseShapeFromDrawing(drawingEl) {
231
228
  if (!wsp) return null;
232
229
  if (findChildByLocalName(wsp, "txbx") !== null) return null;
233
230
  const spPr = findChildByLocalName(wsp, "spPr");
234
- if (hasUnsupportedGeometry(spPr) || hasUnsupportedRgbColorModifiers(spPr) || hasUnmodeledFill(spPr) || fillNeedsRawPreservation(parseShapeFill(spPr)) || outlineNeedsRawPreservation(parseShapeOutline(spPr))) return null;
231
+ if (hasUnsupportedGeometry(spPr) || hasUnsupportedRgbColorModifiers(spPr) || hasUnmodeledFill(spPr) || fillNeedsRawPreservation(parseShapeFill(spPr))) return null;
235
232
  const shape = parseShape(wsp);
236
233
  const extent = findChildByLocalName(container, "extent");
237
- if (extent) shape.size = {
238
- width: parseNumericAttribute(extent, null, "cx") ?? shape.size.width,
239
- height: parseNumericAttribute(extent, null, "cy") ?? shape.size.height
240
- };
234
+ if (extent) {
235
+ const outerWidth = parseNumericAttribute(extent, null, "cx");
236
+ const outerHeight = parseNumericAttribute(extent, null, "cy");
237
+ shape.size = {
238
+ width: outerWidth !== void 0 && (outerWidth > 0 || shape.size.width === 0) ? outerWidth : shape.size.width,
239
+ height: outerHeight !== void 0 && (outerHeight > 0 || shape.size.height === 0) ? outerHeight : shape.size.height
240
+ };
241
+ }
241
242
  if (container === anchor) {
242
243
  const position = parseAnchorPosition(container);
243
244
  if (position) shape.position = position;
@@ -266,7 +267,7 @@ function shouldPreserveRawShapeDrawing(drawingEl) {
266
267
  if (hasUnsupportedGeometry(spPr)) return true;
267
268
  if (hasUnsupportedRgbColorModifiers(spPr)) return true;
268
269
  if (hasUnmodeledFill(spPr)) return true;
269
- return fillNeedsRawPreservation(parseShapeFill(spPr)) || outlineNeedsRawPreservation(parseShapeOutline(spPr));
270
+ return fillNeedsRawPreservation(parseShapeFill(spPr));
270
271
  }
271
272
  //#endregion
272
273
  export { parseShape, parseShapeFromDrawing, shouldPreserveRawShapeDrawing };
@@ -0,0 +1,16 @@
1
+ import { XmlElement } from "./xmlParser.js";
2
+ //#region src/docx/streamingXmlParser.d.ts
3
+ type ParseXmlResult = {
4
+ status: "parsed";
5
+ value: XmlElement;
6
+ } | {
7
+ status: "unsupported";
8
+ };
9
+ /**
10
+ * Parse ordinary OOXML into Folio's existing element representation in one
11
+ * pass. Unsupported or malformed constructs return a sentinel so callers can
12
+ * retain the general-purpose parser as a compatibility fallback.
13
+ */
14
+ declare const parseStreamingXml: (xml: string) => ParseXmlResult;
15
+ //#endregion
16
+ export { parseStreamingXml };