@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.
- 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/compat/eigenpal.d.ts +2 -1
- package/dist/compat/eigenpal.js +2 -1
- 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 +3 -1
- package/dist/index.js +2 -1
- 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/fromMarkdown.js +55 -5
- 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 +28 -0
- package/dist/utils/mergeDocumentContent.js +145 -0
- 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
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
//#region src/docx/streamingXmlParser.ts
|
|
2
|
+
const BUILT_IN_ENTITIES = {
|
|
3
|
+
amp: "&",
|
|
4
|
+
apos: "'",
|
|
5
|
+
gt: ">",
|
|
6
|
+
lt: "<",
|
|
7
|
+
quot: "\""
|
|
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
|
+
const parseStreamingXml = (xml) => {
|
|
15
|
+
const root = { elements: [] };
|
|
16
|
+
const stack = [];
|
|
17
|
+
let cursor = 0;
|
|
18
|
+
let mergeAdjacentText = false;
|
|
19
|
+
while (cursor < xml.length) {
|
|
20
|
+
const open = xml.indexOf("<", cursor);
|
|
21
|
+
if (open === -1) {
|
|
22
|
+
if (!appendText(xml.slice(cursor), stack, mergeAdjacentText)) return { status: "unsupported" };
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
if (open > cursor && !appendText(xml.slice(cursor, open), stack, mergeAdjacentText)) return { status: "unsupported" };
|
|
26
|
+
if (open > cursor) mergeAdjacentText = true;
|
|
27
|
+
if (xml.startsWith("<!--", open)) {
|
|
28
|
+
const close = xml.indexOf("-->", open + 4);
|
|
29
|
+
if (close === -1) return { status: "unsupported" };
|
|
30
|
+
cursor = close + 3;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (xml.startsWith("<![CDATA[", open)) {
|
|
34
|
+
const close = xml.indexOf("]]>", open + 9);
|
|
35
|
+
if (close === -1 || !appendRawText(normalizeLineEndings(xml.slice(open + 9, close)), stack)) return { status: "unsupported" };
|
|
36
|
+
cursor = close + 3;
|
|
37
|
+
mergeAdjacentText = false;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (xml.startsWith("<?", open)) {
|
|
41
|
+
const close = xml.indexOf("?>", open + 2);
|
|
42
|
+
if (close === -1) return { status: "unsupported" };
|
|
43
|
+
cursor = close + 2;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (xml.startsWith("<!", open)) return { status: "unsupported" };
|
|
47
|
+
const close = findTagClose(xml, open + 1);
|
|
48
|
+
if (close === -1) return { status: "unsupported" };
|
|
49
|
+
if (xml.charCodeAt(open + 1) === 47) {
|
|
50
|
+
const name = xml.slice(open + 2, close).trim();
|
|
51
|
+
const frame = stack.pop();
|
|
52
|
+
if (!frame || frame.name !== name) return { status: "unsupported" };
|
|
53
|
+
cursor = close + 1;
|
|
54
|
+
mergeAdjacentText = false;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const parsedTag = parseOpenTag(xml, open + 1, close);
|
|
58
|
+
if (parsedTag.status === "unsupported") return parsedTag;
|
|
59
|
+
const parent = stack.at(-1)?.element ?? root;
|
|
60
|
+
appendElement(parent, parsedTag.element);
|
|
61
|
+
if (!parsedTag.selfClosing) {
|
|
62
|
+
if (stack.length >= 100) return { status: "unsupported" };
|
|
63
|
+
stack.push({
|
|
64
|
+
element: parsedTag.element,
|
|
65
|
+
name: parsedTag.name
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
cursor = close + 1;
|
|
69
|
+
mergeAdjacentText = false;
|
|
70
|
+
}
|
|
71
|
+
if (stack.length > 0) return { status: "unsupported" };
|
|
72
|
+
return {
|
|
73
|
+
status: "parsed",
|
|
74
|
+
value: root
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
const parseOpenTag = (xml, start, close) => {
|
|
78
|
+
let cursor = skipWhitespace(xml, start, close);
|
|
79
|
+
const nameStart = cursor;
|
|
80
|
+
cursor = scanName(xml, cursor, close);
|
|
81
|
+
if (cursor === nameStart) return { status: "unsupported" };
|
|
82
|
+
const name = xml.slice(nameStart, cursor);
|
|
83
|
+
if (isUnsafePropertyName(name)) return { status: "unsupported" };
|
|
84
|
+
let attributes;
|
|
85
|
+
let selfClosing = false;
|
|
86
|
+
while (cursor < close) {
|
|
87
|
+
cursor = skipWhitespace(xml, cursor, close);
|
|
88
|
+
if (cursor >= close) break;
|
|
89
|
+
if (xml.charCodeAt(cursor) === 47) {
|
|
90
|
+
selfClosing = true;
|
|
91
|
+
cursor = skipWhitespace(xml, cursor + 1, close);
|
|
92
|
+
if (cursor !== close) return { status: "unsupported" };
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
const attributeNameStart = cursor;
|
|
96
|
+
cursor = scanName(xml, cursor, close);
|
|
97
|
+
if (cursor === attributeNameStart) return { status: "unsupported" };
|
|
98
|
+
const attributeName = xml.slice(attributeNameStart, cursor);
|
|
99
|
+
if (isUnsafePropertyName(attributeName)) return { status: "unsupported" };
|
|
100
|
+
cursor = skipWhitespace(xml, cursor, close);
|
|
101
|
+
if (xml.charCodeAt(cursor) !== 61) return { status: "unsupported" };
|
|
102
|
+
cursor = skipWhitespace(xml, cursor + 1, close);
|
|
103
|
+
const quote = xml.charCodeAt(cursor);
|
|
104
|
+
if (quote !== 34 && quote !== 39) return { status: "unsupported" };
|
|
105
|
+
const valueStart = cursor + 1;
|
|
106
|
+
cursor = xml.indexOf(quote === 34 ? "\"" : "'", valueStart);
|
|
107
|
+
if (cursor === -1 || cursor > close) return { status: "unsupported" };
|
|
108
|
+
const decoded = decodeXmlEntities(normalizeLineEndings(xml.slice(valueStart, cursor)));
|
|
109
|
+
if (decoded === null) return { status: "unsupported" };
|
|
110
|
+
attributes ??= {};
|
|
111
|
+
attributes[attributeName] = decoded;
|
|
112
|
+
cursor += 1;
|
|
113
|
+
}
|
|
114
|
+
const element = {
|
|
115
|
+
type: "element",
|
|
116
|
+
name
|
|
117
|
+
};
|
|
118
|
+
if (attributes) element.attributes = attributes;
|
|
119
|
+
return {
|
|
120
|
+
status: "parsed",
|
|
121
|
+
element,
|
|
122
|
+
name,
|
|
123
|
+
selfClosing
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
const appendElement = (parent, child) => {
|
|
127
|
+
parent.elements ??= [];
|
|
128
|
+
parent.elements.push(child);
|
|
129
|
+
};
|
|
130
|
+
const appendText = (text, stack, mergeAdjacentText) => {
|
|
131
|
+
if (text.length === 0) return true;
|
|
132
|
+
const decoded = decodeXmlEntities(normalizeLineEndings(text));
|
|
133
|
+
if (decoded === null) return false;
|
|
134
|
+
const parent = stack.at(-1)?.element;
|
|
135
|
+
const previous = mergeAdjacentText ? parent?.elements?.at(-1) : void 0;
|
|
136
|
+
if (previous?.type === "text" && typeof previous.text === "string") {
|
|
137
|
+
previous.text += decoded;
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
return appendRawText(decoded, stack);
|
|
141
|
+
};
|
|
142
|
+
const appendRawText = (text, stack) => {
|
|
143
|
+
const parent = stack.at(-1)?.element;
|
|
144
|
+
if (!parent) return text.trim().length === 0;
|
|
145
|
+
appendElement(parent, {
|
|
146
|
+
type: "text",
|
|
147
|
+
text
|
|
148
|
+
});
|
|
149
|
+
return true;
|
|
150
|
+
};
|
|
151
|
+
const findTagClose = (xml, start) => {
|
|
152
|
+
let quote = 0;
|
|
153
|
+
for (let cursor = start; cursor < xml.length; cursor += 1) {
|
|
154
|
+
const code = xml.charCodeAt(cursor);
|
|
155
|
+
if (quote !== 0) {
|
|
156
|
+
if (code === quote) quote = 0;
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
if (code === 34 || code === 39) {
|
|
160
|
+
quote = code;
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
if (code === 62) return cursor;
|
|
164
|
+
}
|
|
165
|
+
return -1;
|
|
166
|
+
};
|
|
167
|
+
const skipWhitespace = (xml, start, limit) => {
|
|
168
|
+
let cursor = start;
|
|
169
|
+
while (cursor < limit) {
|
|
170
|
+
const code = xml.charCodeAt(cursor);
|
|
171
|
+
if (code !== 9 && code !== 10 && code !== 13 && code !== 32) break;
|
|
172
|
+
cursor += 1;
|
|
173
|
+
}
|
|
174
|
+
return cursor;
|
|
175
|
+
};
|
|
176
|
+
const scanName = (xml, start, limit) => {
|
|
177
|
+
let cursor = start;
|
|
178
|
+
while (cursor < limit) {
|
|
179
|
+
const code = xml.charCodeAt(cursor);
|
|
180
|
+
if (code === 9 || code === 10 || code === 13 || code === 32 || code === 47 || code === 61 || code === 62) break;
|
|
181
|
+
cursor += 1;
|
|
182
|
+
}
|
|
183
|
+
return cursor;
|
|
184
|
+
};
|
|
185
|
+
const decodeXmlEntities = (value) => {
|
|
186
|
+
const firstEntity = value.indexOf("&");
|
|
187
|
+
if (firstEntity === -1) return value;
|
|
188
|
+
const parts = [];
|
|
189
|
+
let cursor = 0;
|
|
190
|
+
let entityStart = firstEntity;
|
|
191
|
+
while (entityStart !== -1) {
|
|
192
|
+
parts.push(value.slice(cursor, entityStart));
|
|
193
|
+
const entityEnd = value.indexOf(";", entityStart + 1);
|
|
194
|
+
if (entityEnd === -1) return null;
|
|
195
|
+
const entity = value.slice(entityStart + 1, entityEnd);
|
|
196
|
+
const decoded = decodeXmlEntity(entity);
|
|
197
|
+
if (decoded === null) return null;
|
|
198
|
+
parts.push(decoded);
|
|
199
|
+
cursor = entityEnd + 1;
|
|
200
|
+
entityStart = value.indexOf("&", cursor);
|
|
201
|
+
}
|
|
202
|
+
parts.push(value.slice(cursor));
|
|
203
|
+
return parts.join("");
|
|
204
|
+
};
|
|
205
|
+
const normalizeLineEndings = (value) => {
|
|
206
|
+
if (!value.includes("\r")) return value;
|
|
207
|
+
return value.replaceAll("\r\n", "\n").replaceAll("\r", "\n");
|
|
208
|
+
};
|
|
209
|
+
const decodeXmlEntity = (entity) => {
|
|
210
|
+
switch (entity) {
|
|
211
|
+
case "amp": return BUILT_IN_ENTITIES.amp;
|
|
212
|
+
case "apos": return BUILT_IN_ENTITIES.apos;
|
|
213
|
+
case "gt": return BUILT_IN_ENTITIES.gt;
|
|
214
|
+
case "lt": return BUILT_IN_ENTITIES.lt;
|
|
215
|
+
case "quot": return BUILT_IN_ENTITIES.quot;
|
|
216
|
+
}
|
|
217
|
+
if (entity.charCodeAt(0) !== 35) return null;
|
|
218
|
+
const hexadecimal = entity.charCodeAt(1) === 120 || entity.charCodeAt(1) === 88;
|
|
219
|
+
const digits = entity.slice(hexadecimal ? 2 : 1);
|
|
220
|
+
if (digits.length === 0 || !hasOnlyDigits(digits, hexadecimal)) return null;
|
|
221
|
+
const codePoint = Number.parseInt(digits, hexadecimal ? 16 : 10);
|
|
222
|
+
if (!Number.isInteger(codePoint) || codePoint <= 0 || codePoint > 1114111 || codePoint >= 55296 && codePoint <= 57343) return null;
|
|
223
|
+
return String.fromCodePoint(codePoint);
|
|
224
|
+
};
|
|
225
|
+
const hasOnlyDigits = (value, hexadecimal) => {
|
|
226
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
227
|
+
const code = value.charCodeAt(index);
|
|
228
|
+
if (!(code >= 48 && code <= 57) && !(hexadecimal && code >= 97 && code <= 102) && !(hexadecimal && code >= 65 && code <= 70)) return false;
|
|
229
|
+
}
|
|
230
|
+
return true;
|
|
231
|
+
};
|
|
232
|
+
const isUnsafePropertyName = (name) => {
|
|
233
|
+
switch (name) {
|
|
234
|
+
case "__defineGetter__":
|
|
235
|
+
case "__defineSetter__":
|
|
236
|
+
case "__lookupGetter__":
|
|
237
|
+
case "__lookupSetter__":
|
|
238
|
+
case "__proto__":
|
|
239
|
+
case "constructor":
|
|
240
|
+
case "hasOwnProperty":
|
|
241
|
+
case "prototype":
|
|
242
|
+
case "toString":
|
|
243
|
+
case "valueOf": return true;
|
|
244
|
+
default: return false;
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
//#endregion
|
|
248
|
+
export { parseStreamingXml };
|
package/dist/docx/styleParser.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BorderStyleSchema, ConditionalStyleTypeSchema, EmphasisMarkSchema, FontThemeSchema, HighlightColorSchema, LineSpacingRuleSchema, ParagraphAlignmentSchema, ShadingPatternSchema, StyleTypeSchema, TabLeaderSchema, TabStopAlignmentSchema, TableCellTextDirectionSchema, TableRowHeightRuleSchema, TableWidthTypeSchema, TextEffectSchema, ThemeColorSlotSchema, UnderlineStyleSchema, narrowEnum } from "./parserEnums.js";
|
|
2
|
-
import { findChild, findChildren, getAttribute, getLocalName, parseBooleanElement, parseNumericAttribute, parseTableMeasurementValue, parseXmlDocument } from "./xmlParser.js";
|
|
1
|
+
import { BorderStyleSchema, ConditionalStyleTypeSchema, EmphasisMarkSchema, FontHintSchema, FontThemeSchema, HighlightColorSchema, LineSpacingRuleSchema, ParagraphAlignmentSchema, ShadingPatternSchema, StyleTypeSchema, TabLeaderSchema, TabStopAlignmentSchema, TableCellTextDirectionSchema, TableRowHeightRuleSchema, TableWidthTypeSchema, TextEffectSchema, ThemeColorSlotSchema, UnderlineStyleSchema, narrowEnum } from "./parserEnums.js";
|
|
2
|
+
import { findChild, findChildren, getAttribute, getLocalName, parseBooleanElement, parseNumberingLevelAttribute, parseNumericAttribute, parseTableMeasurementValue, parseXmlDocument } from "./xmlParser.js";
|
|
3
3
|
import { mergeTextFormatting } from "../utils/textFormattingMerge.js";
|
|
4
4
|
import { mergeParagraphFormatting } from "../utils/paragraphFormattingMerge.js";
|
|
5
5
|
import { resolveThemeFontRef } from "./themeParser.js";
|
|
@@ -76,6 +76,8 @@ function parseRunProperties(rPr, theme) {
|
|
|
76
76
|
if (eastAsia) fontFamily.eastAsia = eastAsia;
|
|
77
77
|
const csFont = getAttribute(rFonts, "w", "cs");
|
|
78
78
|
if (csFont) fontFamily.cs = csFont;
|
|
79
|
+
const hint = narrowEnum(getAttribute(rFonts, "w", "hint"), FontHintSchema);
|
|
80
|
+
if (hint) fontFamily.hint = hint;
|
|
79
81
|
const asciiTheme = narrowEnum(getAttribute(rFonts, "w", "asciiTheme"), FontThemeSchema);
|
|
80
82
|
if (asciiTheme) {
|
|
81
83
|
fontFamily.asciiTheme = asciiTheme;
|
|
@@ -244,7 +246,7 @@ function parseTabStops(tabs) {
|
|
|
244
246
|
alignment
|
|
245
247
|
};
|
|
246
248
|
const leader = narrowEnum(getAttribute(tab, "w", "leader"), TabLeaderSchema);
|
|
247
|
-
if (leader) tabStop.leader = leader;
|
|
249
|
+
if (leader && leader !== "none") tabStop.leader = leader;
|
|
248
250
|
result.push(tabStop);
|
|
249
251
|
}
|
|
250
252
|
}
|
|
@@ -342,7 +344,7 @@ function parseParagraphProperties(pPr, theme) {
|
|
|
342
344
|
if (val !== void 0) formatting.numPr.numId = val;
|
|
343
345
|
}
|
|
344
346
|
if (ilvl) {
|
|
345
|
-
const val =
|
|
347
|
+
const val = parseNumberingLevelAttribute(ilvl);
|
|
346
348
|
if (val !== void 0) formatting.numPr.ilvl = val;
|
|
347
349
|
}
|
|
348
350
|
}
|
|
@@ -2,7 +2,6 @@ import { document_d_exports } from "../types/document.js";
|
|
|
2
2
|
import { NumberingMap } from "./numberingParser.js";
|
|
3
3
|
import { StyleMap } from "./styleParser.js";
|
|
4
4
|
import { XmlElement } from "./xmlParser.js";
|
|
5
|
-
|
|
6
5
|
//#region src/docx/tableParser.d.ts
|
|
7
6
|
/**
|
|
8
7
|
* Sanity cap on `w:gridSpan` (and the derived table column count). Word's
|
|
@@ -139,7 +138,7 @@ declare function parseTableGrid(tblGridElement: XmlElement | null): number[] | u
|
|
|
139
138
|
declare function parseTable(tblElement: XmlElement, styles: StyleMap | null, theme: document_d_exports.Theme | null, numbering: NumberingMap | null, rels: document_d_exports.RelationshipMap | null, media: Map<string, document_d_exports.MediaFile> | null, options?: {
|
|
140
139
|
inHeaderFooter?: boolean;
|
|
141
140
|
rootXmlns?: Record<string, string>;
|
|
142
|
-
}): document_d_exports.Table;
|
|
141
|
+
}): document_d_exports.Table | undefined;
|
|
143
142
|
/**
|
|
144
143
|
* Get the number of columns in a table
|
|
145
144
|
*
|
package/dist/docx/tableParser.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BorderStyleSchema, FloatingTableXSpecSchema, FloatingTableYSpecSchema, ShadingPatternSchema, TableCellTextDirectionSchema, ThemeColorSlotSchema, narrowEnum } from "./parserEnums.js";
|
|
2
|
-
import { findChild, findChildByLocalName, findChildren, getAttribute, getChildElements, mergeXmlnsDeclarations, parseBooleanElement, parseNumericAttribute, parseTableMeasurementValue } from "./xmlParser.js";
|
|
2
|
+
import { findChild, findChildByLocalName, findChildren, getAttribute, getChildElements, getLocalName, mergeXmlnsDeclarations, parseBooleanElement, parseNumericAttribute, parseTableMeasurementValue } from "./xmlParser.js";
|
|
3
3
|
import { parseBookmarkEnd, parseBookmarkStart } from "./bookmarkParser.js";
|
|
4
4
|
import { parseParagraph } from "./paragraphParser.js";
|
|
5
5
|
import { appendBookmarkMarkerToLastParagraphInBlocks, appendBookmarkMarkerToLastParagraphInCells, prependBookmarkMarkersToFirstParagraphInBlocks, prependBookmarkMarkersToFirstParagraphInCell } from "./bookmarkPlacement.js";
|
|
@@ -536,6 +536,7 @@ function parseCellContent(tcElement, styles, theme, numbering, rels, media, opti
|
|
|
536
536
|
}
|
|
537
537
|
if (localName === "tbl") {
|
|
538
538
|
const table = parseTable(child, styles, theme, numbering, rels, media, options);
|
|
539
|
+
if (!table) return;
|
|
539
540
|
if (prependBookmarkMarkersToFirstParagraphInBlocks([table], pendingBookmarkMarkers)) pendingBookmarkMarkers.length = 0;
|
|
540
541
|
content.push(table);
|
|
541
542
|
return;
|
|
@@ -635,11 +636,6 @@ function parseTableRow(trElement, styles, theme, numbering, rels, media, options
|
|
|
635
636
|
if (pendingBookmarkMarkers.length > 0) appendBookmarkMarkersToLastCell(row, pendingBookmarkMarkers);
|
|
636
637
|
return row;
|
|
637
638
|
}
|
|
638
|
-
function getLocalName(name) {
|
|
639
|
-
if (!name) return "";
|
|
640
|
-
const colonIndex = name.indexOf(":");
|
|
641
|
-
return colonIndex === -1 ? name : name.slice(colonIndex + 1);
|
|
642
|
-
}
|
|
643
639
|
function parseBookmarkMarker(child, localName) {
|
|
644
640
|
if (localName === "bookmarkStart") return parseBookmarkStart(child);
|
|
645
641
|
return parseBookmarkEnd(child);
|
|
@@ -751,6 +747,7 @@ function parseTable(tblElement, styles, theme, numbering, rels, media, options)
|
|
|
751
747
|
for (const sdtChild of getChildElements(sdtContent)) parseTableChild(sdtChild);
|
|
752
748
|
};
|
|
753
749
|
for (const child of getChildElements(tblElement)) parseTableChild(child);
|
|
750
|
+
if (table.rows.length === 0) return;
|
|
754
751
|
inferImplicitSingleCellRowSpans(table, rowsWithGridOffsets);
|
|
755
752
|
return table;
|
|
756
753
|
}
|
|
@@ -2,7 +2,6 @@ import { document_d_exports } from "../types/document.js";
|
|
|
2
2
|
import { NumberingMap } from "./numberingParser.js";
|
|
3
3
|
import { StyleMap } from "./styleParser.js";
|
|
4
4
|
import { XmlElement } from "./xmlParser.js";
|
|
5
|
-
|
|
6
5
|
//#region src/docx/textBoxParser.d.ts
|
|
7
6
|
/**
|
|
8
7
|
* Extract raw paragraph elements from w:txbxContent
|
|
@@ -19,7 +18,7 @@ type ParagraphParserFn = (node: XmlElement, styles: StyleMap | null, theme: docu
|
|
|
19
18
|
/**
|
|
20
19
|
* Type for the table parser function to avoid circular imports
|
|
21
20
|
*/
|
|
22
|
-
type TableParserFn = (node: XmlElement, styles: StyleMap | null, theme: document_d_exports.Theme | null, numbering: NumberingMap | null, rels: document_d_exports.RelationshipMap | null, media: Map<string, document_d_exports.MediaFile> | null) => document_d_exports.Table;
|
|
21
|
+
type TableParserFn = (node: XmlElement, styles: StyleMap | null, theme: document_d_exports.Theme | null, numbering: NumberingMap | null, rels: document_d_exports.RelationshipMap | null, media: Map<string, document_d_exports.MediaFile> | null) => document_d_exports.Table | undefined;
|
|
23
22
|
/**
|
|
24
23
|
* Parse text box content with provided parser functions
|
|
25
24
|
* This avoids circular dependencies by accepting parser functions as parameters
|
|
@@ -55,7 +55,10 @@ function parseTextBoxContent(txbxContent, parseParagraph, parseTable, styles, th
|
|
|
55
55
|
if (localName === "p") {
|
|
56
56
|
const paragraph = parseParagraph(child, styles, theme, numbering, rels, media);
|
|
57
57
|
blocks.push(paragraph);
|
|
58
|
-
} else if (localName === "tbl" && parseTable)
|
|
58
|
+
} else if (localName === "tbl" && parseTable) {
|
|
59
|
+
const table = parseTable(child, styles, theme, numbering, rels, media);
|
|
60
|
+
if (table) blocks.push(table);
|
|
61
|
+
}
|
|
59
62
|
}
|
|
60
63
|
return blocks;
|
|
61
64
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { document_d_exports } from "../types/document.js";
|
|
2
|
-
|
|
3
2
|
//#region src/docx/trackedMoveRangeNormalization.d.ts
|
|
4
3
|
type NormalizeTrackedMoveRangesInput = {
|
|
5
4
|
documentBody: document_d_exports.DocumentBody;
|
|
@@ -11,12 +10,6 @@ type NormalizeTrackedMoveRangesInput = {
|
|
|
11
10
|
type NormalizeTrackedMoveRangesResult = {
|
|
12
11
|
removedUnbalancedMoveRangeMarkers: number;
|
|
13
12
|
};
|
|
14
|
-
declare const normalizeTrackedMoveRanges: ({
|
|
15
|
-
documentBody,
|
|
16
|
-
headers,
|
|
17
|
-
footers,
|
|
18
|
-
footnotes,
|
|
19
|
-
endnotes
|
|
20
|
-
}: NormalizeTrackedMoveRangesInput) => NormalizeTrackedMoveRangesResult;
|
|
13
|
+
declare const normalizeTrackedMoveRanges: ({ documentBody, headers, footers, footnotes, endnotes }: NormalizeTrackedMoveRangesInput) => NormalizeTrackedMoveRangesResult;
|
|
21
14
|
//#endregion
|
|
22
15
|
export { normalizeTrackedMoveRanges };
|
package/dist/docx/unzip.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import JSZip from "jszip";
|
|
2
|
-
|
|
3
2
|
//#region src/docx/unzip.d.ts
|
|
4
3
|
declare class DocxSecurityError extends Error {
|
|
5
4
|
constructor(message: string);
|
|
@@ -14,7 +13,10 @@ type DocxUnzipLimits = {
|
|
|
14
13
|
allowedMediaMimeTypes: ReadonlySet<string>;
|
|
15
14
|
};
|
|
16
15
|
type DocxUnzipOptions = Partial<Omit<DocxUnzipLimits, "allowedMediaMimeTypes">> & {
|
|
17
|
-
allowedMediaMimeTypes?: Iterable<string>;
|
|
16
|
+
allowedMediaMimeTypes?: Iterable<string>;
|
|
17
|
+
/** Extract every XML part into allXml instead of only parts used by the parser. */
|
|
18
|
+
extractAllXml?: boolean;
|
|
19
|
+
/** Password for Agile-encrypted .docx files (Office 2010+). */
|
|
18
20
|
password?: string | undefined;
|
|
19
21
|
};
|
|
20
22
|
/**
|
|
@@ -46,7 +48,8 @@ type RawDocxContent = {
|
|
|
46
48
|
allXml: Map<string, string>;
|
|
47
49
|
originalZip: JSZip;
|
|
48
50
|
originalBuffer: ArrayBuffer;
|
|
49
|
-
warnings: string[];
|
|
51
|
+
warnings: string[];
|
|
52
|
+
/** True when the input was a password-protected CFB container. */
|
|
50
53
|
wasEncrypted: boolean;
|
|
51
54
|
};
|
|
52
55
|
/**
|
package/dist/docx/unzip.js
CHANGED
|
@@ -59,6 +59,27 @@ const DEFAULT_UNZIP_LIMITS = {
|
|
|
59
59
|
maxTotalUncompressedBytes: 250 * MEBIBYTE,
|
|
60
60
|
allowedMediaMimeTypes: DEFAULT_ALLOWED_MEDIA_MIME_TYPES
|
|
61
61
|
};
|
|
62
|
+
const PARSED_XML_PARTS = /* @__PURE__ */ new Set([
|
|
63
|
+
"[content_types].xml",
|
|
64
|
+
"_rels/.rels",
|
|
65
|
+
"docprops/app.xml",
|
|
66
|
+
"docprops/core.xml",
|
|
67
|
+
"docprops/custom.xml",
|
|
68
|
+
"word/_rels/document.xml.rels",
|
|
69
|
+
"word/_rels/fonttable.xml.rels",
|
|
70
|
+
"word/comments.xml",
|
|
71
|
+
"word/commentsextended.xml",
|
|
72
|
+
"word/commentsextensible.xml",
|
|
73
|
+
"word/document.xml",
|
|
74
|
+
"word/endnotes.xml",
|
|
75
|
+
"word/fonttable.xml",
|
|
76
|
+
"word/footnotes.xml",
|
|
77
|
+
"word/numbering.xml",
|
|
78
|
+
"word/settings.xml",
|
|
79
|
+
"word/styles.xml",
|
|
80
|
+
"word/theme/theme1.xml"
|
|
81
|
+
]);
|
|
82
|
+
const shouldExtractXmlPart = (path) => PARSED_XML_PARTS.has(path) || path.startsWith("word/");
|
|
62
83
|
const ZIP_END_OF_CENTRAL_DIRECTORY_SIGNATURE = 101010256;
|
|
63
84
|
const ZIP_CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE = 33639248;
|
|
64
85
|
const ZIP_END_OF_CENTRAL_DIRECTORY_SIZE = 22;
|
|
@@ -73,9 +94,10 @@ const ZIP_CENTRAL_DIRECTORY_FILE_HEADER_SIZE = 46;
|
|
|
73
94
|
async function unzipDocx(buffer, options = {}) {
|
|
74
95
|
const limits = createUnzipLimits(options);
|
|
75
96
|
if (buffer.byteLength > limits.maxInputBytes) throw new DocxSecurityError("DOCX file exceeds the maximum allowed size");
|
|
76
|
-
const
|
|
97
|
+
const containerType = detectDocxContainerType(buffer);
|
|
98
|
+
const zipBuffer = containerType === DOCX_CONTAINER_TYPES.ZIP ? buffer : await openDocxBuffer(buffer, { password: options.password });
|
|
77
99
|
if (zipBuffer.byteLength > limits.maxInputBytes) throw new DocxSecurityError("DOCX file exceeds the maximum allowed size");
|
|
78
|
-
const wasEncrypted =
|
|
100
|
+
const wasEncrypted = containerType === DOCX_CONTAINER_TYPES.CFB;
|
|
79
101
|
const loaded = await loadDocxZip(zipBuffer, limits.maxFiles);
|
|
80
102
|
if (loaded.buffer.byteLength > limits.maxInputBytes) throw new DocxSecurityError("DOCX file exceeds the maximum allowed size");
|
|
81
103
|
const { zip } = loaded;
|
|
@@ -111,6 +133,7 @@ async function unzipDocx(buffer, options = {}) {
|
|
|
111
133
|
wasEncrypted
|
|
112
134
|
};
|
|
113
135
|
let totalUncompressedBytes = 0;
|
|
136
|
+
const extractionTasks = [];
|
|
114
137
|
for (const [path, file] of entries) {
|
|
115
138
|
if (!isSafeDocxPath(path)) throw new DocxSecurityError("DOCX file contains an unsafe entry path");
|
|
116
139
|
if (!isPreservableDocxEntry(path)) continue;
|
|
@@ -122,34 +145,16 @@ async function unzipDocx(buffer, options = {}) {
|
|
|
122
145
|
}
|
|
123
146
|
if (lowerPath.endsWith(".xml") || lowerPath.endsWith(".rels")) {
|
|
124
147
|
assertEntrySize(path, declaredSize, limits.maxXmlBytes);
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
else if (lowerPath === "word/footnotes.xml") content.footnotesXml = xmlContent;
|
|
136
|
-
else if (lowerPath === "word/endnotes.xml") content.endnotesXml = xmlContent;
|
|
137
|
-
else if (lowerPath === "word/comments.xml") content.commentsXml = xmlContent;
|
|
138
|
-
else if (lowerPath === "word/commentsextensible.xml") content.commentsExtensibleXml = xmlContent;
|
|
139
|
-
else if (lowerPath === "word/commentsextended.xml") content.commentsExtendedXml = xmlContent;
|
|
140
|
-
else if (lowerPath === "word/_rels/document.xml.rels") content.documentRels = xmlContent;
|
|
141
|
-
else if (lowerPath === "_rels/.rels") content.packageRels = xmlContent;
|
|
142
|
-
else if (lowerPath === "[content_types].xml") content.contentTypesXml = xmlContent;
|
|
143
|
-
else if (lowerPath === "docprops/core.xml") content.corePropsXml = xmlContent;
|
|
144
|
-
else if (lowerPath === "docprops/app.xml") content.appPropsXml = xmlContent;
|
|
145
|
-
else if (lowerPath === "docprops/custom.xml") content.customPropsXml = xmlContent;
|
|
146
|
-
else if (/^word\/header[^/]*\.xml$/u.test(lowerPath)) {
|
|
147
|
-
const filename = path.split("/").pop() || path;
|
|
148
|
-
content.headers.set(filename, xmlContent);
|
|
149
|
-
} else if (/^word\/footer[^/]*\.xml$/u.test(lowerPath)) {
|
|
150
|
-
const filename = path.split("/").pop() || path;
|
|
151
|
-
content.footers.set(filename, xmlContent);
|
|
152
|
-
}
|
|
148
|
+
if (options.extractAllXml === false && !shouldExtractXmlPart(lowerPath)) continue;
|
|
149
|
+
extractionTasks.push(file.async("text").then((xmlContent) => {
|
|
150
|
+
assertExtractedSize(path, xmlContent.length, limits.maxXmlBytes);
|
|
151
|
+
return {
|
|
152
|
+
type: "xml",
|
|
153
|
+
path,
|
|
154
|
+
lowerPath,
|
|
155
|
+
content: xmlContent
|
|
156
|
+
};
|
|
157
|
+
}));
|
|
153
158
|
} else if (lowerPath.startsWith("word/media/")) {
|
|
154
159
|
const mimeType = getMediaMimeType(path);
|
|
155
160
|
if (!limits.allowedMediaMimeTypes.has(mimeType)) continue;
|
|
@@ -157,22 +162,73 @@ async function unzipDocx(buffer, options = {}) {
|
|
|
157
162
|
content.warnings.push(`Skipped oversized media file: ${path}; original entry preserved for round-trip.`);
|
|
158
163
|
continue;
|
|
159
164
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
165
|
+
extractionTasks.push(file.async("arraybuffer").then((binaryContent) => {
|
|
166
|
+
if (binaryContent.byteLength > limits.maxMediaBytes) {
|
|
167
|
+
content.warnings.push(`Skipped oversized media file: ${path}; original entry preserved for round-trip.`);
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
if (!isMediaContentAllowed(binaryContent, mimeType)) return null;
|
|
171
|
+
return {
|
|
172
|
+
type: "media",
|
|
173
|
+
path,
|
|
174
|
+
mimeType,
|
|
175
|
+
content: binaryContent
|
|
176
|
+
};
|
|
177
|
+
}));
|
|
167
178
|
} else if (lowerPath.startsWith("word/fonts/")) {
|
|
168
179
|
if (isEntryTooLarge(declaredSize, limits.maxFontBytes)) continue;
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
180
|
+
extractionTasks.push(file.async("arraybuffer").then((binaryContent) => {
|
|
181
|
+
if (binaryContent.byteLength > limits.maxFontBytes) return null;
|
|
182
|
+
return {
|
|
183
|
+
type: "font",
|
|
184
|
+
path,
|
|
185
|
+
content: binaryContent
|
|
186
|
+
};
|
|
187
|
+
}));
|
|
172
188
|
}
|
|
173
189
|
}
|
|
190
|
+
for (const extracted of await Promise.all(extractionTasks)) {
|
|
191
|
+
if (!extracted) continue;
|
|
192
|
+
if (extracted.type === "xml") {
|
|
193
|
+
assignXmlContent(content, extracted);
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
if (extracted.type === "media") {
|
|
197
|
+
content.media.set(extracted.path, extracted.content);
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
content.fonts.set(extracted.path, extracted.content);
|
|
201
|
+
}
|
|
174
202
|
return content;
|
|
175
203
|
}
|
|
204
|
+
function assignXmlContent(content, { path, lowerPath, content: xmlContent }) {
|
|
205
|
+
content.allXml.set(path, xmlContent);
|
|
206
|
+
if (lowerPath === "word/document.xml") content.documentXml = xmlContent;
|
|
207
|
+
else if (lowerPath === "word/styles.xml") content.stylesXml = xmlContent;
|
|
208
|
+
else if (lowerPath === "word/theme/theme1.xml") content.themeXml = xmlContent;
|
|
209
|
+
else if (lowerPath === "word/numbering.xml") content.numberingXml = xmlContent;
|
|
210
|
+
else if (lowerPath === "word/fonttable.xml") content.fontTableXml = xmlContent;
|
|
211
|
+
else if (lowerPath === "word/settings.xml") content.settingsXml = xmlContent;
|
|
212
|
+
else if (lowerPath === "word/websettings.xml") content.webSettingsXml = xmlContent;
|
|
213
|
+
else if (lowerPath === "word/footnotes.xml") content.footnotesXml = xmlContent;
|
|
214
|
+
else if (lowerPath === "word/endnotes.xml") content.endnotesXml = xmlContent;
|
|
215
|
+
else if (lowerPath === "word/comments.xml") content.commentsXml = xmlContent;
|
|
216
|
+
else if (lowerPath === "word/commentsextensible.xml") content.commentsExtensibleXml = xmlContent;
|
|
217
|
+
else if (lowerPath === "word/commentsextended.xml") content.commentsExtendedXml = xmlContent;
|
|
218
|
+
else if (lowerPath === "word/_rels/document.xml.rels") content.documentRels = xmlContent;
|
|
219
|
+
else if (lowerPath === "_rels/.rels") content.packageRels = xmlContent;
|
|
220
|
+
else if (lowerPath === "[content_types].xml") content.contentTypesXml = xmlContent;
|
|
221
|
+
else if (lowerPath === "docprops/core.xml") content.corePropsXml = xmlContent;
|
|
222
|
+
else if (lowerPath === "docprops/app.xml") content.appPropsXml = xmlContent;
|
|
223
|
+
else if (lowerPath === "docprops/custom.xml") content.customPropsXml = xmlContent;
|
|
224
|
+
else if (/^word\/header[^/]*\.xml$/u.test(lowerPath)) {
|
|
225
|
+
const filename = path.split("/").pop() || path;
|
|
226
|
+
content.headers.set(filename, xmlContent);
|
|
227
|
+
} else if (/^word\/footer[^/]*\.xml$/u.test(lowerPath)) {
|
|
228
|
+
const filename = path.split("/").pop() || path;
|
|
229
|
+
content.footers.set(filename, xmlContent);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
176
232
|
async function loadDocxZip(buffer, maxFiles) {
|
|
177
233
|
try {
|
|
178
234
|
return {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { cloneWithXmlnsDeclarations, elementToXml, findAllDeep, findChild, getAttribute, getChildElements, getLocalName } from "./xmlParser.js";
|
|
1
|
+
import { cloneWithXmlnsDeclarations, elementToXml, findAllDeep, findChild, findDeep, getAttribute, getChildElements, getLocalName } from "./xmlParser.js";
|
|
2
2
|
import { pixelsToEmu } from "../utils/units.js";
|
|
3
3
|
import { sanitizeImageSrc } from "../utils/sanitizeImageSrc.js";
|
|
4
4
|
import { resolveImageData } from "./imageParser.js";
|
|
@@ -136,6 +136,7 @@ const previewImage = (pictElement, svg, widthPx, heightPx, style, rootXmlns) =>
|
|
|
136
136
|
};
|
|
137
137
|
};
|
|
138
138
|
const parseStandaloneShapePreview = (pictElement, shape, rootXmlns) => {
|
|
139
|
+
if (findDeep(shape, "v", "textbox")) return null;
|
|
139
140
|
const style = parseStyleAttr(getAttribute(shape, null, "style"));
|
|
140
141
|
const widthPx = cssLengthToPx(style["width"]);
|
|
141
142
|
const heightPx = cssLengthToPx(style["height"]);
|
|
@@ -159,6 +160,7 @@ const parseGroupPreview = (pictElement, group, rootXmlns) => {
|
|
|
159
160
|
if (size.first <= 0 || size.second <= 0) return null;
|
|
160
161
|
const content = getChildElements(group).slice(0, MAX_VML_PREVIEW_SHAPES).map((child) => {
|
|
161
162
|
const localName = getLocalName(child.name ?? "");
|
|
163
|
+
if (findDeep(child, "v", "textbox")) return "";
|
|
162
164
|
if (localName === "line") {
|
|
163
165
|
const from = coordinatePair(getAttribute(child, null, "from"));
|
|
164
166
|
const to = coordinatePair(getAttribute(child, null, "to"));
|