@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.
- package/dist/ai-edits/apply.d.ts +2 -2
- package/dist/ai-edits/blockRange.d.ts +3 -17
- package/dist/ai-edits/clean-text.d.ts +0 -1
- package/dist/ai-edits/headless.d.ts +23 -19
- package/dist/ai-edits/read.d.ts +8 -5
- package/dist/ai-edits/scoped-reading.d.ts +0 -1
- package/dist/ai-edits/snapshot.d.ts +1 -7
- package/dist/ai-edits/table-cell-mutations.d.ts +4 -31
- package/dist/ai-edits/table-row-column-mutations.d.ts +9 -39
- package/dist/ai-edits/table-targets.d.ts +0 -1
- package/dist/ai-edits/types.d.ts +32 -17
- package/dist/ai-suggestions/apply.d.ts +0 -1
- package/dist/ai-suggestions/conflict.d.ts +0 -1
- package/dist/ai-suggestions/text-positions.d.ts +2 -2
- package/dist/ai-suggestions/types.d.ts +27 -13
- package/dist/content-controls/errors.d.ts +0 -1
- package/dist/content-controls/findContentControls.d.ts +6 -4
- package/dist/content-controls/mutateContentControls.d.ts +0 -1
- package/dist/controller/activeEditorStory.d.ts +1 -6
- package/dist/controller/collaborationModules.d.ts +0 -1
- package/dist/controller/contentControlWidgetController.d.ts +0 -1
- package/dist/controller/folioEditor.d.ts +2 -2
- package/dist/controller/folioEditorEvents.d.ts +5 -3
- package/dist/controller/fontReadiness.d.ts +0 -1
- package/dist/controller/headerFooterEditorManager.d.ts +1 -5
- package/dist/controller/hiddenEditorApi.d.ts +35 -18
- package/dist/controller/hiddenEditorManager.d.ts +5 -3
- package/dist/controller/latestRequestGate.d.ts +3 -1
- package/dist/controller/layoutPipeline.d.ts +1 -1
- package/dist/controller/layoutScheduler.d.ts +8 -5
- package/dist/controller/layoutSession.d.ts +0 -1
- package/dist/controller/noteEditorManager.d.ts +0 -1
- package/dist/document-operations.d.ts +5 -12
- package/dist/document-stories.d.ts +0 -1
- package/dist/docx/blockContentParser.d.ts +0 -1
- package/dist/docx/blockContentParser.js +1 -0
- package/dist/docx/bookmarkParser.d.ts +5 -3
- package/dist/docx/bookmarkPlacement.d.ts +0 -1
- package/dist/docx/commentParser.d.ts +0 -1
- package/dist/docx/commentRangeIntegrity.d.ts +0 -1
- package/dist/docx/commentReferenceNormalization.d.ts +1 -9
- package/dist/docx/commentReplyMarkers.d.ts +0 -1
- package/dist/docx/compatibility.d.ts +0 -1
- package/dist/docx/conformance.d.ts +0 -1
- package/dist/docx/corePropertiesParser.d.ts +0 -1
- package/dist/docx/documentParser.d.ts +0 -1
- package/dist/docx/documentParser.js +3 -1
- package/dist/docx/drawingUtils.d.ts +23 -2
- package/dist/docx/drawingUtils.js +23 -1
- package/dist/docx/encryption/agileDecryption.d.ts +0 -1
- package/dist/docx/encryption/cryptoBytes.js +4 -1
- package/dist/docx/encryption/openEncryptedDocx.d.ts +5 -2
- package/dist/docx/ensureParaIds.d.ts +7 -3
- package/dist/docx/fieldParser.d.ts +23 -11
- package/dist/docx/fontTableParser.d.ts +0 -1
- package/dist/docx/footnoteParser.d.ts +26 -13
- package/dist/docx/footnoteParser.js +4 -2
- package/dist/docx/groupDrawingParser.d.ts +0 -1
- package/dist/docx/headerFooterParser.d.ts +9 -5
- package/dist/docx/headerFooterRefParser.d.ts +0 -1
- package/dist/docx/headerFooterReferenceNormalization.d.ts +1 -6
- package/dist/docx/headerFooterVerbatim.d.ts +2 -2
- package/dist/docx/hyperlinkParser.d.ts +0 -1
- package/dist/docx/hyperlinkParser.js +1 -9
- package/dist/docx/imageParser.d.ts +0 -1
- package/dist/docx/imageParser.js +15 -7
- package/dist/docx/mathToMathml.d.ts +0 -1
- package/dist/docx/metadataPrivacy.d.ts +1 -3
- package/dist/docx/modelValidation.d.ts +0 -1
- package/dist/docx/newImage.d.ts +11 -0
- package/dist/docx/newImage.js +11 -0
- package/dist/docx/normalizeBaseDirection.d.ts +0 -1
- package/dist/docx/notePropertiesParser.d.ts +0 -1
- package/dist/docx/numberingParser.d.ts +10 -6
- package/dist/docx/numberingParser.js +4 -2
- package/dist/docx/numberingReferenceNormalization.d.ts +1 -9
- package/dist/docx/paragraphParser.d.ts +0 -1
- package/dist/docx/paragraphParser.js +27 -14
- package/dist/docx/paragraphTextBoxEnrichment.d.ts +0 -1
- package/dist/docx/paragraphTextBoxEnrichment.js +2 -1
- package/dist/docx/paragraphTraversal.d.ts +1 -8
- package/dist/docx/parser.d.ts +15 -8
- package/dist/docx/parser.js +12 -1
- package/dist/docx/parserEnums.d.ts +2 -2
- package/dist/docx/parserEnums.js +3 -2
- package/dist/docx/relsParser.d.ts +1 -0
- package/dist/docx/renderedPageBreakNormalization.d.ts +12 -0
- package/dist/docx/renderedPageBreakNormalization.js +59 -0
- package/dist/docx/replyToComment.d.ts +2 -2
- package/dist/docx/rezip.d.ts +6 -7
- package/dist/docx/rezip.js +136 -102
- package/dist/docx/runConsolidator.d.ts +0 -1
- package/dist/docx/runParser.d.ts +0 -1
- package/dist/docx/runParser.js +9 -12
- package/dist/docx/sdtProperties.d.ts +0 -1
- package/dist/docx/sdtPropertiesPatch.d.ts +0 -1
- package/dist/docx/sectionParser.d.ts +0 -1
- package/dist/docx/selectiveSave.d.ts +5 -3
- package/dist/docx/selectiveSave.js +2 -2
- package/dist/docx/selectiveSaveFlags.d.ts +4 -2
- package/dist/docx/selectiveXmlPatch.js +20 -8
- package/dist/docx/serializer/blockSdtSerializer.d.ts +0 -1
- package/dist/docx/serializer/blockSdtSerializer.js +2 -1
- package/dist/docx/serializer/borderSerializer.d.ts +0 -1
- package/dist/docx/serializer/commentSerializer.d.ts +0 -1
- package/dist/docx/serializer/commentSerializer.js +11 -37
- package/dist/docx/serializer/documentSerializer.d.ts +0 -1
- package/dist/docx/serializer/documentSerializer.js +1 -1
- package/dist/docx/serializer/fontTableSerializer.d.ts +0 -1
- package/dist/docx/serializer/headerFooterSerializer.d.ts +0 -1
- package/dist/docx/serializer/headerFooterSerializer.js +1 -1
- package/dist/docx/serializer/noteSerializer.d.ts +0 -1
- package/dist/docx/serializer/noteSerializer.js +1 -1
- package/dist/docx/serializer/numberingSerializer.d.ts +0 -1
- package/dist/docx/serializer/paragraphSerializer.d.ts +0 -1
- package/dist/docx/serializer/paragraphSerializer.js +10 -23
- package/dist/docx/serializer/runSerializer.d.ts +0 -1
- package/dist/docx/serializer/runSerializer.js +37 -22
- package/dist/docx/serializer/sectionPropertiesSerializer.d.ts +0 -1
- package/dist/docx/serializer/sectionPropertiesSerializer.js +5 -4
- package/dist/docx/serializer/settingsSerializer.d.ts +0 -1
- package/dist/docx/serializer/stylesSerializer.d.ts +0 -1
- package/dist/docx/serializer/tableSerializer.d.ts +0 -1
- package/dist/docx/serializer/tableSerializer.js +2 -0
- package/dist/docx/serializer/themeSerializer.d.ts +0 -1
- package/dist/docx/serializer/xmlUtils.js +10 -1
- package/dist/docx/server/applyDocxXmlPatchProposal.d.ts +3 -10
- package/dist/docx/server/docxToMarkdown.d.ts +0 -1
- package/dist/docx/server/evaluateDocxXmlPatchProposal.d.ts +3 -9
- package/dist/docx/server/inspectDocxPackage.d.ts +3 -8
- package/dist/docx/server/validateDocxConformance.d.ts +0 -1
- package/dist/docx/settingsParser.d.ts +2 -2
- package/dist/docx/shapeParser.d.ts +0 -1
- package/dist/docx/shapeParser.js +11 -10
- package/dist/docx/streamingXmlParser.d.ts +16 -0
- package/dist/docx/streamingXmlParser.js +248 -0
- package/dist/docx/styleParser.d.ts +0 -1
- package/dist/docx/styleParser.js +6 -4
- package/dist/docx/tableParser.d.ts +1 -2
- package/dist/docx/tableParser.js +3 -6
- package/dist/docx/textBoxParser.d.ts +1 -2
- package/dist/docx/textBoxParser.js +4 -1
- package/dist/docx/textWhitespace.d.ts +4 -0
- package/dist/docx/textWhitespace.js +4 -0
- package/dist/docx/themeParser.d.ts +0 -1
- package/dist/docx/trackedMoveRangeNormalization.d.ts +1 -8
- package/dist/docx/unzip.d.ts +6 -3
- package/dist/docx/unzip.js +96 -40
- package/dist/docx/vmlImageParser.d.ts +0 -1
- package/dist/docx/vmlImageParser.js +3 -1
- package/dist/docx/watermarkParser.d.ts +0 -1
- package/dist/docx/xmlParser.d.ts +21 -8
- package/dist/docx/xmlParser.js +126 -43
- package/dist/fields/bookmarkPages.d.ts +0 -1
- package/dist/fields/bookmarkText.d.ts +0 -1
- package/dist/fields/evaluateField.d.ts +5 -3
- package/dist/fields/fieldContext.d.ts +11 -5
- package/dist/fields/resolveFieldValues.d.ts +4 -3
- package/dist/fields/sectionPageCounts.d.ts +0 -1
- package/dist/fields/seqValues.d.ts +0 -1
- package/dist/fonts/embeddedFontTable.d.ts +5 -2
- package/dist/fonts/embeddedFonts.d.ts +15 -7
- package/dist/index.d.ts +1 -0
- package/dist/layout-bridge/cellSelectionHighlight.d.ts +0 -1
- package/dist/layout-bridge/convert/footnoteLayout.d.ts +5 -3
- package/dist/layout-bridge/convert/headerFooterLayout.d.ts +2 -2
- package/dist/layout-bridge/convert/paragraphFrames.d.ts +0 -1
- package/dist/layout-bridge/convert/templatePreviewFlow.d.ts +8 -8
- package/dist/layout-bridge/convert/toFlowBlocks.d.ts +25 -13
- package/dist/layout-bridge/convert/wrapEditorViewAsSurface.d.ts +3 -2
- package/dist/layout-bridge/dom/findHfPmSpans.d.ts +2 -1
- package/dist/layout-bridge/dom/noteStoryDom.d.ts +0 -1
- package/dist/layout-bridge/engine/clickToPosition.d.ts +5 -3
- package/dist/layout-bridge/engine/hitTest.d.ts +40 -19
- package/dist/layout-bridge/engine/selectionRects.d.ts +16 -8
- package/dist/layout-bridge/engine/tableWidthUtils.d.ts +0 -1
- package/dist/layout-bridge/headerFooterLayout.d.ts +0 -1
- package/dist/layout-bridge/sectionColumns.d.ts +0 -1
- package/dist/layout-bridge/tableInsertHover.d.ts +8 -4
- package/dist/layout-engine/headerFooterRefs.d.ts +0 -1
- package/dist/layout-engine/index.d.ts +0 -1
- package/dist/layout-engine/justificationCompatibility.d.ts +0 -1
- package/dist/layout-engine/keep-together.d.ts +7 -4
- package/dist/layout-engine/layoutInstrumentation.d.ts +0 -1
- package/dist/layout-engine/lineFlow.d.ts +0 -1
- package/dist/layout-engine/measure/cache.d.ts +0 -1
- package/dist/layout-engine/measure/effectiveLineBreakPolicy.d.ts +6 -7
- package/dist/layout-engine/measure/floatingTablePosition.d.ts +0 -1
- package/dist/layout-engine/measure/floatingZones.d.ts +14 -6
- package/dist/layout-engine/measure/font-metrics.worker.d.ts +0 -1
- package/dist/layout-engine/measure/lineBreakProvider.d.ts +20 -9
- package/dist/layout-engine/measure/lineBreaks.d.ts +0 -1
- package/dist/layout-engine/measure/listMarkerWidth.d.ts +0 -1
- package/dist/layout-engine/measure/measureBlocks.d.ts +1 -0
- package/dist/layout-engine/measure/measureContainer.d.ts +0 -1
- package/dist/layout-engine/measure/measureHelpers.d.ts +0 -1
- package/dist/layout-engine/measure/measureParagraph.d.ts +3 -2
- package/dist/layout-engine/measure/measureParagraph.js +23 -3
- package/dist/layout-engine/measure/measureProvider.d.ts +0 -1
- package/dist/layout-engine/measure/measureTypes.d.ts +4 -2
- package/dist/layout-engine/measure/measureWorker.d.ts +0 -1
- package/dist/layout-engine/measure/measureWorkerProtocol.d.ts +0 -1
- package/dist/layout-engine/measure/tableCellFloating.d.ts +0 -1
- package/dist/layout-engine/measure/tableCellFlow.d.ts +0 -1
- package/dist/layout-engine/measure/tableCellGrid.d.ts +0 -1
- package/dist/layout-engine/measure/textBoxParagraphLayout.d.ts +0 -1
- package/dist/layout-engine/measure/textMeasurementPolicy.d.ts +0 -1
- package/dist/layout-engine/paginator.d.ts +66 -33
- package/dist/layout-engine/paragraphFragmentRange.d.ts +0 -1
- package/dist/layout-engine/paragraphFrame.d.ts +0 -1
- package/dist/layout-engine/paragraphSequence.d.ts +0 -1
- package/dist/layout-engine/paragraphSpacing.d.ts +1 -5
- package/dist/layout-engine/pmPageIndex.d.ts +0 -1
- package/dist/layout-engine/renderedBreakReconciliation.d.ts +2 -17
- package/dist/layout-engine/section-breaks.d.ts +34 -17
- package/dist/layout-engine/tableRowBreak.d.ts +4 -3
- package/dist/layout-engine/textBoxFlow.d.ts +0 -1
- package/dist/layout-engine/textBoxGroup.d.ts +0 -1
- package/dist/layout-engine/types.d.ts +382 -189
- package/dist/layout-painter/anchoredImagePosition.d.ts +0 -1
- package/dist/layout-painter/borderStroke.d.ts +0 -1
- package/dist/layout-painter/imageLayout.d.ts +14 -7
- package/dist/layout-painter/index.d.ts +9 -5
- package/dist/layout-painter/registry/modules/image.d.ts +0 -1
- package/dist/layout-painter/registry/modules/paragraph.d.ts +0 -1
- package/dist/layout-painter/registry/modules/table.d.ts +0 -1
- package/dist/layout-painter/registry/modules/textBox.d.ts +0 -1
- package/dist/layout-painter/registry/modules.d.ts +0 -1
- package/dist/layout-painter/registry/registry.d.ts +0 -1
- package/dist/layout-painter/registry/types.d.ts +0 -1
- package/dist/layout-painter/renderFragment.d.ts +2 -2
- package/dist/layout-painter/renderImage.d.ts +0 -1
- package/dist/layout-painter/renderPage.d.ts +71 -42
- package/dist/layout-painter/renderParagraph.d.ts +28 -14
- package/dist/layout-painter/renderParagraph.js +6 -2
- package/dist/layout-painter/renderTable.d.ts +0 -1
- package/dist/layout-painter/renderTextBox.d.ts +0 -1
- package/dist/layout-painter/renderUtils.d.ts +17 -9
- package/dist/layout-painter/renderWatermark.d.ts +2 -2
- package/dist/layout-painter/sdtBoundary.d.ts +0 -1
- package/dist/managers/AutoSaveManager.d.ts +22 -11
- package/dist/managers/ClipboardManager.d.ts +0 -1
- package/dist/managers/ContextMenuManager.d.ts +5 -8
- package/dist/managers/DocumentLoaderManager.d.ts +12 -6
- package/dist/managers/EditorModeManager.d.ts +3 -2
- package/dist/managers/ErrorManager.d.ts +0 -1
- package/dist/managers/FindReplaceManager.d.ts +0 -1
- package/dist/managers/HistoryManager.d.ts +19 -9
- package/dist/managers/TableSelectionManager.d.ts +0 -1
- package/dist/managers/editorShortcuts.d.ts +4 -6
- package/dist/markdown/annotations.d.ts +0 -1
- package/dist/markdown/fromMarkdown.d.ts +0 -1
- package/dist/markdown/images.d.ts +0 -1
- package/dist/markdown/index.d.ts +0 -1
- package/dist/markdown/internals.d.ts +0 -1
- package/dist/markdown/renderBlock.d.ts +0 -1
- package/dist/markdown/renderParagraph.d.ts +0 -1
- package/dist/markdown/renderRuns.d.ts +0 -1
- package/dist/markdown/renderTable.d.ts +0 -1
- package/dist/markdown/trailers.d.ts +0 -1
- package/dist/markdown/types.d.ts +39 -18
- package/dist/model.d.ts +3 -5
- package/dist/model.js +2 -2
- package/dist/paged-layout/incrementalMeasure.d.ts +1 -10
- package/dist/paged-layout/pageText.d.ts +1 -1
- package/dist/paged-layout/paragraphFlash.d.ts +0 -1
- package/dist/paged-layout/paragraphFlashTypes.d.ts +5 -2
- package/dist/paged-layout/rangeProjection.d.ts +10 -5
- package/dist/paged-layout/scrollNavigation.d.ts +0 -1
- package/dist/paged-layout/scrollPageInfo.d.ts +12 -13
- package/dist/paged-layout/scrollToPmPosition.d.ts +0 -1
- package/dist/paged-layout/sectionBlockWidths.d.ts +2 -11
- package/dist/paged-layout/sectionGeometry.d.ts +0 -1
- package/dist/paged-layout/selectionViewportRect.d.ts +0 -1
- package/dist/paged-layout/transactionDirtyRange.d.ts +0 -1
- package/dist/paged-layout/zoomScrollAnchor.d.ts +2 -12
- package/dist/prosemirror/attrs/index.d.ts +2 -2
- package/dist/prosemirror/attrs/index.js +5 -0
- package/dist/prosemirror/autospacingBase.d.ts +0 -1
- package/dist/prosemirror/cellDragSelection.d.ts +6 -4
- package/dist/prosemirror/commands/comments.d.ts +6 -4
- package/dist/prosemirror/commands/contentControls.d.ts +5 -3
- package/dist/prosemirror/commands/contentControlsBlockFill.d.ts +1 -1
- package/dist/prosemirror/commands/formatPainter.d.ts +0 -1
- package/dist/prosemirror/commands/formatting.d.ts +1 -1
- package/dist/prosemirror/commands/hyperlink.d.ts +4 -9
- package/dist/prosemirror/commands/image.d.ts +0 -1
- package/dist/prosemirror/commands/pageBreak.d.ts +0 -1
- package/dist/prosemirror/commands/paragraph.d.ts +0 -1
- package/dist/prosemirror/commands/pastePlainText.d.ts +0 -1
- package/dist/prosemirror/commands/propertyChangeScope.d.ts +0 -1
- package/dist/prosemirror/commands/sectionBreak.d.ts +0 -1
- package/dist/prosemirror/commands/table.d.ts +0 -1
- package/dist/prosemirror/commands/tableCellMergeResolution.d.ts +0 -1
- package/dist/prosemirror/commentIdAllocator.d.ts +2 -2
- package/dist/prosemirror/commentOps.d.ts +0 -1
- package/dist/prosemirror/conversion/effectiveTableCellFormatting.d.ts +1 -10
- package/dist/prosemirror/conversion/fromProseDoc.d.ts +0 -1
- package/dist/prosemirror/conversion/fromProseDoc.js +7 -4
- package/dist/prosemirror/conversion/runShadingMark.d.ts +0 -1
- package/dist/prosemirror/conversion/sdtAttrs.d.ts +0 -1
- package/dist/prosemirror/conversion/toProseDoc.d.ts +3 -2
- package/dist/prosemirror/conversion/toProseDoc.js +16 -2
- package/dist/prosemirror/extensions/ExtensionManager.d.ts +0 -1
- package/dist/prosemirror/extensions/StarterKit.d.ts +7 -4
- package/dist/prosemirror/extensions/core/DocExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/core/HistoryExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/core/ParagraphExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/core/TextExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/create.d.ts +0 -1
- package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/features/BaseKeymapExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/features/BidiShortcutExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/features/ContentControlWidgetsExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/features/DropCursorExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/features/EmptyParagraphFormatExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/features/GapCursorExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/features/ImageDragExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/features/ImagePasteExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/features/ListExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.d.ts +7 -4
- package/dist/prosemirror/extensions/features/PasteCleanupExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/features/PasteStyleInlinerExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/features/SelectionTrackerExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/features/bidiShortcutController.d.ts +3 -1
- package/dist/prosemirror/extensions/marks/AllCapsExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/BoldExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/CharacterSpacingExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/CharacterStyleExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/CommentExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/FontFamilyExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/FontFamilyExtension.js +1 -0
- package/dist/prosemirror/extensions/marks/FontSizeExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/FootnoteRefExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/HiddenTextExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/HighlightExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/HyperlinkExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/ItalicExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/LanguageExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/RtlExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/RunFormattingOverrideExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/RunShadingExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/SmallCapsExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/StrikeExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/SubscriptExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/SuperscriptExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/TextColorExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/TextEffectExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/TextEffectsExtensions.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/TrackedChangeExtensions.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/UnderlineExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/markUtils.d.ts +0 -1
- package/dist/prosemirror/extensions/marks/markUtils.js +4 -1
- package/dist/prosemirror/extensions/nodes/BlockSdtExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/nodes/FieldExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/nodes/HardBreakExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/nodes/HorizontalRuleExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/nodes/ImageExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/nodes/ImageExtension.js +2 -0
- package/dist/prosemirror/extensions/nodes/MathExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/nodes/PageBreakExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/nodes/RenderedPageBreakExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/nodes/SdtExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/nodes/ShapeExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/nodes/ShapeExtension.js +2 -0
- package/dist/prosemirror/extensions/nodes/TabExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/nodes/TableExtension.d.ts +4 -3
- package/dist/prosemirror/extensions/nodes/TextBoxAnchorExtension.d.ts +0 -1
- package/dist/prosemirror/extensions/nodes/TextBoxExtension.d.ts +53 -27
- package/dist/prosemirror/extensions/types.d.ts +0 -1
- package/dist/prosemirror/findReplaceSelection.d.ts +5 -3
- package/dist/prosemirror/imageCommit.d.ts +0 -1
- package/dist/prosemirror/index.d.ts +4 -0
- package/dist/prosemirror/insertOperations.d.ts +0 -1
- package/dist/prosemirror/paraText.d.ts +0 -1
- package/dist/prosemirror/plugins/aiCitationDecorations.d.ts +2 -2
- package/dist/prosemirror/plugins/aiSuggestionDecorations.d.ts +0 -1
- package/dist/prosemirror/plugins/anonymizationDecorations.d.ts +9 -7
- package/dist/prosemirror/plugins/autocompleteSuggestion.d.ts +2 -2
- package/dist/prosemirror/plugins/contentControlWidgets.d.ts +4 -7
- package/dist/prosemirror/plugins/createDocScanPlugin.d.ts +3 -8
- package/dist/prosemirror/plugins/documentStyles.d.ts +0 -1
- package/dist/prosemirror/plugins/pmTextScan.d.ts +2 -2
- package/dist/prosemirror/plugins/revisionIds.d.ts +0 -1
- package/dist/prosemirror/plugins/selectionTracker.d.ts +23 -12
- package/dist/prosemirror/plugins/suggestionMode.d.ts +0 -1
- package/dist/prosemirror/plugins/templateDirectives.d.ts +10 -8
- package/dist/prosemirror/plugins/templatePreviewValues.d.ts +10 -5
- package/dist/prosemirror/plugins/templateSlashMenu.d.ts +2 -2
- package/dist/prosemirror/queries.d.ts +0 -1
- package/dist/prosemirror/schema/index.d.ts +0 -1
- package/dist/prosemirror/schema/marks.d.ts +8 -5
- package/dist/prosemirror/schema/nodes.d.ts +340 -163
- package/dist/prosemirror/selectionState.d.ts +13 -7
- package/dist/prosemirror/styles/resolvedStyleAttrs.d.ts +0 -1
- package/dist/prosemirror/styles/styleResolver.d.ts +3 -2
- package/dist/prosemirror/tableCellMergeRevision.d.ts +0 -1
- package/dist/prosemirror/tableResize.d.ts +0 -1
- package/dist/prosemirror/textBoxAnchorAttrs.d.ts +0 -1
- package/dist/prosemirror/utils/extractTrackedChanges.d.ts +8 -5
- package/dist/prosemirror/utils/findParagraphByParaId.d.ts +0 -1
- package/dist/prosemirror/utils/tabCalculator.d.ts +18 -7
- package/dist/prosemirror/utils/visualLineNavigation.d.ts +0 -1
- package/dist/prosemirror/validation.d.ts +0 -1
- package/dist/redline.d.ts +16 -8
- package/dist/render-dom/BodySelectionOverlay.d.ts +1 -9
- package/dist/render-dom/HeaderFooterSelectionOverlay.d.ts +0 -1
- package/dist/render-dom/RemoteSelectionOverlay.d.ts +1 -8
- package/dist/render-dom/resolveSidebarItemPositions.d.ts +1 -9
- package/dist/style-engine/styleEngine.d.ts +21 -11
- package/dist/style-sets/extract.d.ts +4 -3
- package/dist/style-sets/stellaStyle.d.ts +0 -1
- package/dist/style-sets/types.d.ts +0 -1
- package/dist/symbols.d.ts +6 -2
- package/dist/types/block-id.d.ts +3 -6
- package/dist/types/document.d.ts +0 -3
- package/dist/types/documentEnumValues.d.ts +2 -1
- package/dist/types/documentEnumValues.js +6 -1
- package/dist/utils/clipboard.d.ts +17 -8
- package/dist/utils/colorResolver.d.ts +9 -5
- package/dist/utils/createDocument.d.ts +19 -10
- package/dist/utils/documentLoaderBehavior.d.ts +1 -5
- package/dist/utils/docxInput.js +1 -0
- package/dist/utils/findReplace.d.ts +0 -1
- package/dist/utils/fontFamilyMerge.d.ts +0 -1
- package/dist/utils/fontResolver.d.ts +10 -4
- package/dist/utils/formatToStyle.d.ts +0 -1
- package/dist/utils/headerFooter.d.ts +8 -16
- package/dist/utils/headingCollector.d.ts +7 -4
- package/dist/utils/mergeDocumentContent.d.ts +0 -1
- package/dist/utils/paragraphFormattingMerge.d.ts +0 -1
- package/dist/utils/replaceText.d.ts +0 -1
- package/dist/utils/rotationBoundingBox.d.ts +0 -1
- package/dist/utils/tableOperations.d.ts +0 -1
- package/dist/utils/textFormattingMerge.d.ts +0 -1
- package/dist/version-comparison.d.ts +12 -6
- package/dist/watermark/index.d.ts +0 -1
- package/package.json +3 -3
|
@@ -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 */
|
|
6
|
-
|
|
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(
|
|
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). */
|
|
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;
|
|
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
|
|
371
|
-
|
|
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
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
const
|
|
388
|
-
|
|
389
|
-
if (
|
|
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("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll("\"", """);
|
|
@@ -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,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
|
-
|
|
10
|
-
|
|
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(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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,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,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,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/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
|
-
|
|
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
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
const
|
|
259
|
-
|
|
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,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 ||
|
|
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="${
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
414
|
+
`<wp:inline${wrapDistanceAttrs}>`,
|
|
395
415
|
`<wp:extent cx="${intAttr(cx)}" cy="${intAttr(cy)}"/>`,
|
|
396
416
|
effectExtentEl,
|
|
397
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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)}"/>`,
|
|
@@ -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
|
|
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 (
|
|
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
|
|
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
|
-
|
|
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"),
|
|
@@ -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)}"/>`);
|
|
@@ -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
|
-
|
|
9
|
+
if (!XML_SPECIAL_CHARACTER_PATTERN.test(text)) return text;
|
|
10
|
+
return text.replace(XML_SPECIAL_CHARACTER_GLOBAL_PATTERN, (character) => {
|
|
11
|
+
if (character === "&") return "&";
|
|
12
|
+
if (character === "<") return "<";
|
|
13
|
+
if (character === ">") return ">";
|
|
14
|
+
if (character === "\"") return """;
|
|
15
|
+
return "'";
|
|
16
|
+
});
|
|
8
17
|
}
|
|
9
18
|
/**
|
|
10
19
|
* Format a numeric value as an integer XML attribute.
|