@stll/folio-core 0.0.1-placeholder.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE.md +29 -0
- package/README.md +41 -0
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/ai-edits/apply.d.ts +35 -0
- package/dist/ai-edits/apply.js +683 -0
- package/dist/ai-edits/clean-text.d.ts +28 -0
- package/dist/ai-edits/clean-text.js +23 -0
- package/dist/ai-edits/headless.d.ts +225 -0
- package/dist/ai-edits/headless.js +513 -0
- package/dist/ai-edits/index.d.ts +6 -0
- package/dist/ai-edits/index.js +5 -0
- package/dist/ai-edits/inline-emphasis.d.ts +38 -0
- package/dist/ai-edits/inline-emphasis.js +78 -0
- package/dist/ai-edits/snapshot.d.ts +9 -0
- package/dist/ai-edits/snapshot.js +195 -0
- package/dist/ai-edits/types.d.ts +156 -0
- package/dist/ai-edits/types.js +0 -0
- package/dist/ai-edits/word-diff.d.ts +20 -0
- package/dist/ai-edits/word-diff.js +77 -0
- package/dist/ai-suggestions/apply.d.ts +17 -0
- package/dist/ai-suggestions/apply.js +64 -0
- package/dist/ai-suggestions/conflict.d.ts +22 -0
- package/dist/ai-suggestions/conflict.js +67 -0
- package/dist/ai-suggestions/text-positions.d.ts +21 -0
- package/dist/ai-suggestions/text-positions.js +48 -0
- package/dist/ai-suggestions/types.d.ts +199 -0
- package/dist/ai-suggestions/types.js +59 -0
- package/dist/content-controls/errors.d.ts +52 -0
- package/dist/content-controls/errors.js +36 -0
- package/dist/content-controls/findContentControls.d.ts +55 -0
- package/dist/content-controls/findContentControls.js +75 -0
- package/dist/content-controls/index.d.ts +4 -0
- package/dist/content-controls/index.js +4 -0
- package/dist/content-controls/mutateContentControls.d.ts +51 -0
- package/dist/content-controls/mutateContentControls.js +377 -0
- package/dist/controller/folioEditor.d.ts +21 -0
- package/dist/controller/folioEditor.js +29 -0
- package/dist/controller/folioEditorEvents.d.ts +23 -0
- package/dist/controller/folioEditorEvents.js +24 -0
- package/dist/controller/hiddenEditorApi.d.ts +35 -0
- package/dist/controller/hiddenEditorApi.js +112 -0
- package/dist/controller/hiddenEditorManager.d.ts +93 -0
- package/dist/controller/hiddenEditorManager.js +308 -0
- package/dist/controller/layoutPipeline.d.ts +63 -0
- package/dist/controller/layoutPipeline.js +406 -0
- package/dist/controller/layoutScheduler.d.ts +41 -0
- package/dist/controller/layoutScheduler.js +59 -0
- package/dist/controller/layoutSession.d.ts +24 -0
- package/dist/controller/layoutSession.js +13 -0
- package/dist/docx/blockContentParser.d.ts +13 -0
- package/dist/docx/blockContentParser.js +289 -0
- package/dist/docx/bookmarkParser.d.ts +178 -0
- package/dist/docx/bookmarkParser.js +246 -0
- package/dist/docx/bookmarkPlacement.d.ts +10 -0
- package/dist/docx/bookmarkPlacement.js +50 -0
- package/dist/docx/bulletMarkers.d.ts +4 -0
- package/dist/docx/bulletMarkers.js +42 -0
- package/dist/docx/commentParser.d.ts +34 -0
- package/dist/docx/commentParser.js +127 -0
- package/dist/docx/commentReferenceNormalization.d.ts +25 -0
- package/dist/docx/commentReferenceNormalization.js +97 -0
- package/dist/docx/commentReplyMarkers.d.ts +20 -0
- package/dist/docx/commentReplyMarkers.js +123 -0
- package/dist/docx/compatibility.d.ts +12 -0
- package/dist/docx/compatibility.js +77 -0
- package/dist/docx/documentParser.d.ts +65 -0
- package/dist/docx/documentParser.js +209 -0
- package/dist/docx/drawingUtils.d.ts +56 -0
- package/dist/docx/drawingUtils.js +305 -0
- package/dist/docx/fieldParser.d.ts +228 -0
- package/dist/docx/fieldParser.js +559 -0
- package/dist/docx/footnoteParser.d.ts +109 -0
- package/dist/docx/footnoteParser.js +270 -0
- package/dist/docx/headerFooterParser.d.ts +119 -0
- package/dist/docx/headerFooterParser.js +266 -0
- package/dist/docx/headerFooterRefParser.d.ts +22 -0
- package/dist/docx/headerFooterRefParser.js +52 -0
- package/dist/docx/headerFooterReferenceNormalization.d.ts +19 -0
- package/dist/docx/headerFooterReferenceNormalization.js +64 -0
- package/dist/docx/hyperlinkParser.d.ts +108 -0
- package/dist/docx/hyperlinkParser.js +230 -0
- package/dist/docx/imageParser.d.ts +93 -0
- package/dist/docx/imageParser.js +522 -0
- package/dist/docx/mathToMathml.d.ts +15 -0
- package/dist/docx/mathToMathml.js +357 -0
- package/dist/docx/modelValidation.d.ts +13 -0
- package/dist/docx/modelValidation.js +21 -0
- package/dist/docx/normalizeBaseDirection.d.ts +12 -0
- package/dist/docx/normalizeBaseDirection.js +81 -0
- package/dist/docx/notePropertiesParser.d.ts +16 -0
- package/dist/docx/notePropertiesParser.js +99 -0
- package/dist/docx/numberingParser.d.ts +86 -0
- package/dist/docx/numberingParser.js +735 -0
- package/dist/docx/numberingReferenceNormalization.d.ts +25 -0
- package/dist/docx/numberingReferenceNormalization.js +22 -0
- package/dist/docx/paragraphParser.d.ts +86 -0
- package/dist/docx/paragraphParser.js +1132 -0
- package/dist/docx/paragraphTraversal.d.ts +19 -0
- package/dist/docx/paragraphTraversal.js +76 -0
- package/dist/docx/parser.d.ts +67 -0
- package/dist/docx/parser.js +391 -0
- package/dist/docx/parserEnums.d.ts +45 -0
- package/dist/docx/parserEnums.js +70 -0
- package/dist/docx/relsParser.d.ts +160 -0
- package/dist/docx/relsParser.js +235 -0
- package/dist/docx/replyToComment.d.ts +29 -0
- package/dist/docx/replyToComment.js +73 -0
- package/dist/docx/rezip.d.ts +166 -0
- package/dist/docx/rezip.js +1194 -0
- package/dist/docx/runConsolidator.d.ts +57 -0
- package/dist/docx/runConsolidator.js +224 -0
- package/dist/docx/runParser.d.ts +78 -0
- package/dist/docx/runParser.js +661 -0
- package/dist/docx/sdtProperties.d.ts +15 -0
- package/dist/docx/sdtProperties.js +290 -0
- package/dist/docx/sdtPropertiesPatch.d.ts +16 -0
- package/dist/docx/sdtPropertiesPatch.js +144 -0
- package/dist/docx/sectionParser.d.ts +95 -0
- package/dist/docx/sectionParser.js +534 -0
- package/dist/docx/selectiveSave.d.ts +25 -0
- package/dist/docx/selectiveSave.js +247 -0
- package/dist/docx/selectiveSaveFlags.d.ts +33 -0
- package/dist/docx/selectiveSaveFlags.js +11 -0
- package/dist/docx/selectiveSaveTripwire.d.ts +33 -0
- package/dist/docx/selectiveSaveTripwire.js +79 -0
- package/dist/docx/selectiveXmlPatch.d.ts +103 -0
- package/dist/docx/selectiveXmlPatch.js +493 -0
- package/dist/docx/serializer/blockSdtSerializer.d.ts +6 -0
- package/dist/docx/serializer/blockSdtSerializer.js +88 -0
- package/dist/docx/serializer/borderSerializer.d.ts +25 -0
- package/dist/docx/serializer/borderSerializer.js +44 -0
- package/dist/docx/serializer/commentSerializer.d.ts +31 -0
- package/dist/docx/serializer/commentSerializer.js +184 -0
- package/dist/docx/serializer/documentSerializer.d.ts +65 -0
- package/dist/docx/serializer/documentSerializer.js +199 -0
- package/dist/docx/serializer/headerFooterSerializer.d.ts +12 -0
- package/dist/docx/serializer/headerFooterSerializer.js +84 -0
- package/dist/docx/serializer/noteSerializer.d.ts +19 -0
- package/dist/docx/serializer/noteSerializer.js +70 -0
- package/dist/docx/serializer/numberingSerializer.d.ts +12 -0
- package/dist/docx/serializer/numberingSerializer.js +93 -0
- package/dist/docx/serializer/paragraphSerializer.d.ts +48 -0
- package/dist/docx/serializer/paragraphSerializer.js +559 -0
- package/dist/docx/serializer/runSerializer.d.ts +56 -0
- package/dist/docx/serializer/runSerializer.js +621 -0
- package/dist/docx/serializer/sectionPropertiesSerializer.d.ts +6 -0
- package/dist/docx/serializer/sectionPropertiesSerializer.js +187 -0
- package/dist/docx/serializer/tableSerializer.d.ts +79 -0
- package/dist/docx/serializer/tableSerializer.js +422 -0
- package/dist/docx/serializer/xmlUtils.d.ts +20 -0
- package/dist/docx/serializer/xmlUtils.js +25 -0
- package/dist/docx/settingsParser.d.ts +8 -0
- package/dist/docx/settingsParser.js +36 -0
- package/dist/docx/shapeParser.d.ts +20 -0
- package/dist/docx/shapeParser.js +272 -0
- package/dist/docx/styleParser.d.ts +50 -0
- package/dist/docx/styleParser.js +905 -0
- package/dist/docx/tableParser.d.ts +202 -0
- package/dist/docx/tableParser.js +811 -0
- package/dist/docx/textBoxParser.d.ts +117 -0
- package/dist/docx/textBoxParser.js +262 -0
- package/dist/docx/themeParser.d.ts +77 -0
- package/dist/docx/themeParser.js +330 -0
- package/dist/docx/trackedMoveRangeNormalization.d.ts +22 -0
- package/dist/docx/trackedMoveRangeNormalization.js +100 -0
- package/dist/docx/unzip.d.ts +118 -0
- package/dist/docx/unzip.js +383 -0
- package/dist/docx/vmlImageParser.d.ts +16 -0
- package/dist/docx/vmlImageParser.js +100 -0
- package/dist/docx/watermarkParser.d.ts +45 -0
- package/dist/docx/watermarkParser.js +348 -0
- package/dist/docx/wrapTypes.d.ts +29 -0
- package/dist/docx/wrapTypes.js +48 -0
- package/dist/docx/xmlParser.d.ts +297 -0
- package/dist/docx/xmlParser.js +527 -0
- package/dist/fields/bookmarkPages.d.ts +13 -0
- package/dist/fields/bookmarkPages.js +66 -0
- package/dist/fields/bookmarkText.d.ts +16 -0
- package/dist/fields/bookmarkText.js +61 -0
- package/dist/fields/evaluateField.d.ts +23 -0
- package/dist/fields/evaluateField.js +77 -0
- package/dist/fields/fieldContext.d.ts +21 -0
- package/dist/fields/fieldContext.js +0 -0
- package/dist/fields/resolveFieldValues.d.ts +44 -0
- package/dist/fields/resolveFieldValues.js +204 -0
- package/dist/fields/sectionPageCounts.d.ts +11 -0
- package/dist/fields/sectionPageCounts.js +16 -0
- package/dist/fields/seqValues.d.ts +14 -0
- package/dist/fields/seqValues.js +36 -0
- package/dist/fonts/embeddedFontTable.d.ts +42 -0
- package/dist/fonts/embeddedFontTable.js +80 -0
- package/dist/fonts/embeddedFonts.d.ts +46 -0
- package/dist/fonts/embeddedFonts.js +112 -0
- package/dist/fonts/fontDeobfuscation.d.ts +30 -0
- package/dist/fonts/fontDeobfuscation.js +57 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +23 -0
- package/dist/layout-bridge/convert/footnoteLayout.d.ts +57 -0
- package/dist/layout-bridge/convert/footnoteLayout.js +316 -0
- package/dist/layout-bridge/convert/headerFooterLayout.d.ts +74 -0
- package/dist/layout-bridge/convert/headerFooterLayout.js +432 -0
- package/dist/layout-bridge/convert/templatePreviewFlow.d.ts +36 -0
- package/dist/layout-bridge/convert/templatePreviewFlow.js +176 -0
- package/dist/layout-bridge/convert/toFlowBlocks.d.ts +65 -0
- package/dist/layout-bridge/convert/toFlowBlocks.js +1309 -0
- package/dist/layout-bridge/convert/wrapEditorViewAsSurface.d.ts +17 -0
- package/dist/layout-bridge/convert/wrapEditorViewAsSurface.js +36 -0
- package/dist/layout-bridge/dom/clickToPositionDom.d.ts +66 -0
- package/dist/layout-bridge/dom/clickToPositionDom.js +304 -0
- package/dist/layout-bridge/dom/findBodyPmSpans.d.ts +7 -0
- package/dist/layout-bridge/dom/findBodyPmSpans.js +17 -0
- package/dist/layout-bridge/dom/findHfPmSpans.d.ts +62 -0
- package/dist/layout-bridge/dom/findHfPmSpans.js +197 -0
- package/dist/layout-bridge/engine/clickToPosition.d.ts +66 -0
- package/dist/layout-bridge/engine/clickToPosition.js +403 -0
- package/dist/layout-bridge/engine/hitTest.d.ts +135 -0
- package/dist/layout-bridge/engine/hitTest.js +375 -0
- package/dist/layout-bridge/engine/measuring/index.d.ts +10 -0
- package/dist/layout-bridge/engine/measuring/index.js +9 -0
- package/dist/layout-bridge/engine/selectionRects.d.ts +59 -0
- package/dist/layout-bridge/engine/selectionRects.js +485 -0
- package/dist/layout-bridge/engine/tableWidthUtils.d.ts +7 -0
- package/dist/layout-bridge/engine/tableWidthUtils.js +25 -0
- package/dist/layout-engine/index.d.ts +44 -0
- package/dist/layout-engine/index.js +691 -0
- package/dist/layout-engine/keep-together.d.ts +43 -0
- package/dist/layout-engine/keep-together.js +98 -0
- package/dist/layout-engine/layoutInstrumentation.d.ts +50 -0
- package/dist/layout-engine/layoutInstrumentation.js +43 -0
- package/dist/layout-engine/lineFlow.d.ts +8 -0
- package/dist/layout-engine/lineFlow.js +17 -0
- package/dist/layout-engine/measure/cache.d.ts +93 -0
- package/dist/layout-engine/measure/cache.js +245 -0
- package/dist/layout-engine/measure/clampFloatingWrapMargins.d.ts +20 -0
- package/dist/layout-engine/measure/clampFloatingWrapMargins.js +29 -0
- package/dist/layout-engine/measure/featureFlags.d.ts +44 -0
- package/dist/layout-engine/measure/featureFlags.js +19 -0
- package/dist/layout-engine/measure/floatingZones.d.ts +89 -0
- package/dist/layout-engine/measure/floatingZones.js +152 -0
- package/dist/layout-engine/measure/font-metrics.worker.d.ts +17 -0
- package/dist/layout-engine/measure/font-metrics.worker.js +104 -0
- package/dist/layout-engine/measure/index.d.ts +9 -0
- package/dist/layout-engine/measure/index.js +8 -0
- package/dist/layout-engine/measure/listMarkerWidth.d.ts +40 -0
- package/dist/layout-engine/measure/listMarkerWidth.js +76 -0
- package/dist/layout-engine/measure/measureBlocks.d.ts +25 -0
- package/dist/layout-engine/measure/measureBlocks.js +450 -0
- package/dist/layout-engine/measure/measureContainer.d.ts +24 -0
- package/dist/layout-engine/measure/measureContainer.js +280 -0
- package/dist/layout-engine/measure/measureHelpers.d.ts +82 -0
- package/dist/layout-engine/measure/measureHelpers.js +156 -0
- package/dist/layout-engine/measure/measureParagraph.d.ts +61 -0
- package/dist/layout-engine/measure/measureParagraph.js +724 -0
- package/dist/layout-engine/measure/measureProvider.d.ts +23 -0
- package/dist/layout-engine/measure/measureProvider.js +35 -0
- package/dist/layout-engine/measure/measureTypes.d.ts +61 -0
- package/dist/layout-engine/measure/measureTypes.js +0 -0
- package/dist/layout-engine/measure/measureWorker.d.ts +54 -0
- package/dist/layout-engine/measure/measureWorker.js +249 -0
- package/dist/layout-engine/measure/measureWorkerProtocol.d.ts +88 -0
- package/dist/layout-engine/measure/measureWorkerProtocol.js +20 -0
- package/dist/layout-engine/measure/tableCellFloating.d.ts +26 -0
- package/dist/layout-engine/measure/tableCellFloating.js +99 -0
- package/dist/layout-engine/paginator.d.ts +84 -0
- package/dist/layout-engine/paginator.js +348 -0
- package/dist/layout-engine/paragraphFragmentRange.d.ts +9 -0
- package/dist/layout-engine/paragraphFragmentRange.js +40 -0
- package/dist/layout-engine/section-breaks.d.ts +78 -0
- package/dist/layout-engine/section-breaks.js +182 -0
- package/dist/layout-engine/tableRowBreak.d.ts +23 -0
- package/dist/layout-engine/tableRowBreak.js +147 -0
- package/dist/layout-engine/textBoxFlow.d.ts +50 -0
- package/dist/layout-engine/textBoxFlow.js +160 -0
- package/dist/layout-engine/types.d.ts +1031 -0
- package/dist/layout-engine/types.js +100 -0
- package/dist/layout-painter/documentColors.d.ts +4 -0
- package/dist/layout-painter/documentColors.js +40 -0
- package/dist/layout-painter/index.d.ts +110 -0
- package/dist/layout-painter/index.js +182 -0
- package/dist/layout-painter/registry/modules/image.d.ts +6 -0
- package/dist/layout-painter/registry/modules/image.js +17 -0
- package/dist/layout-painter/registry/modules/paragraph.d.ts +6 -0
- package/dist/layout-painter/registry/modules/paragraph.js +18 -0
- package/dist/layout-painter/registry/modules/table.d.ts +6 -0
- package/dist/layout-painter/registry/modules/table.js +16 -0
- package/dist/layout-painter/registry/modules/textBox.d.ts +6 -0
- package/dist/layout-painter/registry/modules/textBox.js +13 -0
- package/dist/layout-painter/registry/modules.d.ts +6 -0
- package/dist/layout-painter/registry/modules.js +26 -0
- package/dist/layout-painter/registry/registry.d.ts +24 -0
- package/dist/layout-painter/registry/registry.js +53 -0
- package/dist/layout-painter/registry/types.d.ts +61 -0
- package/dist/layout-painter/registry/types.js +0 -0
- package/dist/layout-painter/renderFragment.d.ts +32 -0
- package/dist/layout-painter/renderFragment.js +114 -0
- package/dist/layout-painter/renderImage.d.ts +88 -0
- package/dist/layout-painter/renderImage.js +130 -0
- package/dist/layout-painter/renderPage.d.ts +264 -0
- package/dist/layout-painter/renderPage.js +1795 -0
- package/dist/layout-painter/renderParagraph.d.ts +93 -0
- package/dist/layout-painter/renderParagraph.js +1300 -0
- package/dist/layout-painter/renderTable.d.ts +36 -0
- package/dist/layout-painter/renderTable.js +432 -0
- package/dist/layout-painter/renderTextBox.d.ts +22 -0
- package/dist/layout-painter/renderTextBox.js +67 -0
- package/dist/layout-painter/renderUtils.d.ts +42 -0
- package/dist/layout-painter/renderUtils.js +30 -0
- package/dist/layout-painter/renderWatermark.d.ts +16 -0
- package/dist/layout-painter/renderWatermark.js +61 -0
- package/dist/layout-painter/sdtBoundary.d.ts +6 -0
- package/dist/layout-painter/sdtBoundary.js +28 -0
- package/dist/managers/ContextMenuManager.d.ts +28 -0
- package/dist/managers/ContextMenuManager.js +48 -0
- package/dist/managers/DocumentLoaderManager.d.ts +47 -0
- package/dist/managers/DocumentLoaderManager.js +69 -0
- package/dist/managers/EditorModeManager.d.ts +28 -0
- package/dist/managers/EditorModeManager.js +50 -0
- package/dist/managers/ErrorManager.d.ts +26 -0
- package/dist/managers/ErrorManager.js +85 -0
- package/dist/managers/FindReplaceManager.d.ts +54 -0
- package/dist/managers/FindReplaceManager.js +104 -0
- package/dist/managers/HistoryManager.d.ts +92 -0
- package/dist/managers/HistoryManager.js +193 -0
- package/dist/managers/Subscribable.d.ts +34 -0
- package/dist/managers/Subscribable.js +46 -0
- package/dist/managers/TableSelectionManager.d.ts +74 -0
- package/dist/managers/TableSelectionManager.js +225 -0
- package/dist/managers/editorShortcuts.d.ts +42 -0
- package/dist/managers/editorShortcuts.js +60 -0
- package/dist/managers/types.d.ts +41 -0
- package/dist/managers/types.js +0 -0
- package/dist/markdown/annotations.d.ts +14 -0
- package/dist/markdown/annotations.js +42 -0
- package/dist/markdown/escape.d.ts +36 -0
- package/dist/markdown/escape.js +59 -0
- package/dist/markdown/fromMarkdown.d.ts +11 -0
- package/dist/markdown/fromMarkdown.js +223 -0
- package/dist/markdown/headings.d.ts +13 -0
- package/dist/markdown/headings.js +20 -0
- package/dist/markdown/images.d.ts +13 -0
- package/dist/markdown/images.js +63 -0
- package/dist/markdown/index.d.ts +18 -0
- package/dist/markdown/index.js +33 -0
- package/dist/markdown/internals.d.ts +15 -0
- package/dist/markdown/internals.js +35 -0
- package/dist/markdown/renderBlock.d.ts +7 -0
- package/dist/markdown/renderBlock.js +68 -0
- package/dist/markdown/renderParagraph.d.ts +11 -0
- package/dist/markdown/renderParagraph.js +64 -0
- package/dist/markdown/renderRuns.d.ts +11 -0
- package/dist/markdown/renderRuns.js +265 -0
- package/dist/markdown/renderTable.d.ts +8 -0
- package/dist/markdown/renderTable.js +229 -0
- package/dist/markdown/trailers.d.ts +13 -0
- package/dist/markdown/trailers.js +54 -0
- package/dist/markdown/types.d.ts +118 -0
- package/dist/markdown/types.js +0 -0
- package/dist/model.d.ts +13 -0
- package/dist/model.js +4 -0
- package/dist/paged-layout/LayoutSelectionGate.d.ts +80 -0
- package/dist/paged-layout/LayoutSelectionGate.js +131 -0
- package/dist/paged-layout/headerFooterMargins.d.ts +73 -0
- package/dist/paged-layout/headerFooterMargins.js +120 -0
- package/dist/paged-layout/hiddenEditorScroll.d.ts +4 -0
- package/dist/paged-layout/hiddenEditorScroll.js +4 -0
- package/dist/paged-layout/incrementalMeasure.d.ts +33 -0
- package/dist/paged-layout/incrementalMeasure.js +56 -0
- package/dist/paged-layout/rangeProjection.d.ts +51 -0
- package/dist/paged-layout/rangeProjection.js +153 -0
- package/dist/paged-layout/readOnlyEditAttempt.d.ts +5 -0
- package/dist/paged-layout/readOnlyEditAttempt.js +22 -0
- package/dist/paged-layout/scrollNavigation.d.ts +23 -0
- package/dist/paged-layout/scrollNavigation.js +31 -0
- package/dist/paged-layout/scrollPageInfo.d.ts +41 -0
- package/dist/paged-layout/scrollPageInfo.js +34 -0
- package/dist/paged-layout/scrollToPmPosition.d.ts +17 -0
- package/dist/paged-layout/scrollToPmPosition.js +95 -0
- package/dist/paged-layout/sectionBlockWidths.d.ts +35 -0
- package/dist/paged-layout/sectionBlockWidths.js +52 -0
- package/dist/paged-layout/sectionGeometry.d.ts +21 -0
- package/dist/paged-layout/sectionGeometry.js +36 -0
- package/dist/paged-layout/selectionViewportRect.d.ts +29 -0
- package/dist/paged-layout/selectionViewportRect.js +55 -0
- package/dist/paged-layout/tableColumnResize.d.ts +19 -0
- package/dist/paged-layout/tableColumnResize.js +28 -0
- package/dist/paged-layout/tableInsertButtonGeometry.d.ts +15 -0
- package/dist/paged-layout/tableInsertButtonGeometry.js +15 -0
- package/dist/paged-layout/transactionDirtyRange.d.ts +7 -0
- package/dist/paged-layout/transactionDirtyRange.js +27 -0
- package/dist/paged-layout/zoomScrollAnchor.d.ts +40 -0
- package/dist/paged-layout/zoomScrollAnchor.js +25 -0
- package/dist/prosemirror/attrs/index.d.ts +80 -0
- package/dist/prosemirror/attrs/index.js +1218 -0
- package/dist/prosemirror/autospacingBase.d.ts +11 -0
- package/dist/prosemirror/autospacingBase.js +16 -0
- package/dist/prosemirror/commands/comments.d.ts +93 -0
- package/dist/prosemirror/commands/comments.js +435 -0
- package/dist/prosemirror/commands/contentControls.d.ts +45 -0
- package/dist/prosemirror/commands/contentControls.js +294 -0
- package/dist/prosemirror/commands/contentControlsBlockFill.d.ts +15 -0
- package/dist/prosemirror/commands/contentControlsBlockFill.js +19 -0
- package/dist/prosemirror/commands/formatPainter.d.ts +31 -0
- package/dist/prosemirror/commands/formatPainter.js +130 -0
- package/dist/prosemirror/commands/formatting.d.ts +32 -0
- package/dist/prosemirror/commands/formatting.js +45 -0
- package/dist/prosemirror/commands/hyperlink.d.ts +31 -0
- package/dist/prosemirror/commands/hyperlink.js +79 -0
- package/dist/prosemirror/commands/image.d.ts +59 -0
- package/dist/prosemirror/commands/image.js +219 -0
- package/dist/prosemirror/commands/index.d.ts +13 -0
- package/dist/prosemirror/commands/index.js +13 -0
- package/dist/prosemirror/commands/pageBreak.d.ts +10 -0
- package/dist/prosemirror/commands/pageBreak.js +47 -0
- package/dist/prosemirror/commands/paragraph.d.ts +39 -0
- package/dist/prosemirror/commands/paragraph.js +64 -0
- package/dist/prosemirror/commands/pastePlainText.d.ts +39 -0
- package/dist/prosemirror/commands/pastePlainText.js +67 -0
- package/dist/prosemirror/commands/table.d.ts +83 -0
- package/dist/prosemirror/commands/table.js +105 -0
- package/dist/prosemirror/conversion/fromProseDoc.d.ts +27 -0
- package/dist/prosemirror/conversion/fromProseDoc.js +1550 -0
- package/dist/prosemirror/conversion/index.d.ts +4 -0
- package/dist/prosemirror/conversion/index.js +4 -0
- package/dist/prosemirror/conversion/runShadingMark.d.ts +16 -0
- package/dist/prosemirror/conversion/runShadingMark.js +39 -0
- package/dist/prosemirror/conversion/toProseDoc.d.ts +39 -0
- package/dist/prosemirror/conversion/toProseDoc.js +1404 -0
- package/dist/prosemirror/extensions/ExtensionManager.d.ts +43 -0
- package/dist/prosemirror/extensions/ExtensionManager.js +86 -0
- package/dist/prosemirror/extensions/StarterKit.d.ts +16 -0
- package/dist/prosemirror/extensions/StarterKit.js +132 -0
- package/dist/prosemirror/extensions/core/DocExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/core/DocExtension.js +12 -0
- package/dist/prosemirror/extensions/core/HistoryExtension.d.ts +13 -0
- package/dist/prosemirror/extensions/core/HistoryExtension.js +28 -0
- package/dist/prosemirror/extensions/core/ParagraphExtension.d.ts +25 -0
- package/dist/prosemirror/extensions/core/ParagraphExtension.js +619 -0
- package/dist/prosemirror/extensions/core/TextExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/core/TextExtension.js +12 -0
- package/dist/prosemirror/extensions/create.d.ts +17 -0
- package/dist/prosemirror/extensions/create.js +129 -0
- package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.d.ts +23 -0
- package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.js +106 -0
- package/dist/prosemirror/extensions/features/BaseKeymapExtension.d.ts +8 -0
- package/dist/prosemirror/extensions/features/BaseKeymapExtension.js +172 -0
- package/dist/prosemirror/extensions/features/BidiShortcutExtension.d.ts +16 -0
- package/dist/prosemirror/extensions/features/BidiShortcutExtension.js +38 -0
- package/dist/prosemirror/extensions/features/ContentControlWidgetsExtension.d.ts +16 -0
- package/dist/prosemirror/extensions/features/ContentControlWidgetsExtension.js +21 -0
- package/dist/prosemirror/extensions/features/DropCursorExtension.d.ts +12 -0
- package/dist/prosemirror/extensions/features/DropCursorExtension.js +20 -0
- package/dist/prosemirror/extensions/features/EmptyParagraphFormatExtension.d.ts +8 -0
- package/dist/prosemirror/extensions/features/EmptyParagraphFormatExtension.js +44 -0
- package/dist/prosemirror/extensions/features/GapCursorExtension.d.ts +19 -0
- package/dist/prosemirror/extensions/features/GapCursorExtension.js +24 -0
- package/dist/prosemirror/extensions/features/ImageDragExtension.d.ts +15 -0
- package/dist/prosemirror/extensions/features/ImageDragExtension.js +66 -0
- package/dist/prosemirror/extensions/features/ImagePasteExtension.d.ts +12 -0
- package/dist/prosemirror/extensions/features/ImagePasteExtension.js +91 -0
- package/dist/prosemirror/extensions/features/ListExtension.d.ts +14 -0
- package/dist/prosemirror/extensions/features/ListExtension.js +340 -0
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.js +60 -0
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.d.ts +35 -0
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.js +188 -0
- package/dist/prosemirror/extensions/features/PasteCleanupExtension.d.ts +20 -0
- package/dist/prosemirror/extensions/features/PasteCleanupExtension.js +34 -0
- package/dist/prosemirror/extensions/features/PasteStyleInlinerExtension.d.ts +20 -0
- package/dist/prosemirror/extensions/features/PasteStyleInlinerExtension.js +145 -0
- package/dist/prosemirror/extensions/features/SelectionTrackerExtension.d.ts +10 -0
- package/dist/prosemirror/extensions/features/SelectionTrackerExtension.js +17 -0
- package/dist/prosemirror/extensions/features/bidiShortcutController.d.ts +31 -0
- package/dist/prosemirror/extensions/features/bidiShortcutController.js +27 -0
- package/dist/prosemirror/extensions/features/pasteCleanup.d.ts +31 -0
- package/dist/prosemirror/extensions/features/pasteCleanup.js +159 -0
- package/dist/prosemirror/extensions/marks/AllCapsExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/AllCapsExtension.js +24 -0
- package/dist/prosemirror/extensions/marks/BoldExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/BoldExtension.js +41 -0
- package/dist/prosemirror/extensions/marks/CharacterSpacingExtension.d.ts +14 -0
- package/dist/prosemirror/extensions/marks/CharacterSpacingExtension.js +64 -0
- package/dist/prosemirror/extensions/marks/CharacterStyleExtension.d.ts +23 -0
- package/dist/prosemirror/extensions/marks/CharacterStyleExtension.js +47 -0
- package/dist/prosemirror/extensions/marks/CommentExtension.d.ts +12 -0
- package/dist/prosemirror/extensions/marks/CommentExtension.js +38 -0
- package/dist/prosemirror/extensions/marks/FontFamilyExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/FontFamilyExtension.js +55 -0
- package/dist/prosemirror/extensions/marks/FontSizeExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/FontSizeExtension.js +47 -0
- package/dist/prosemirror/extensions/marks/FootnoteRefExtension.d.ts +11 -0
- package/dist/prosemirror/extensions/marks/FootnoteRefExtension.js +92 -0
- package/dist/prosemirror/extensions/marks/HiddenTextExtension.d.ts +23 -0
- package/dist/prosemirror/extensions/marks/HiddenTextExtension.js +35 -0
- package/dist/prosemirror/extensions/marks/HighlightExtension.d.ts +10 -0
- package/dist/prosemirror/extensions/marks/HighlightExtension.js +115 -0
- package/dist/prosemirror/extensions/marks/HyperlinkExtension.d.ts +13 -0
- package/dist/prosemirror/extensions/marks/HyperlinkExtension.js +146 -0
- package/dist/prosemirror/extensions/marks/ItalicExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/ItalicExtension.js +34 -0
- package/dist/prosemirror/extensions/marks/RtlExtension.d.ts +6 -0
- package/dist/prosemirror/extensions/marks/RtlExtension.js +21 -0
- package/dist/prosemirror/extensions/marks/RunFormattingOverrideExtension.d.ts +11 -0
- package/dist/prosemirror/extensions/marks/RunFormattingOverrideExtension.js +75 -0
- package/dist/prosemirror/extensions/marks/RunShadingExtension.d.ts +6 -0
- package/dist/prosemirror/extensions/marks/RunShadingExtension.js +38 -0
- package/dist/prosemirror/extensions/marks/SmallCapsExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/SmallCapsExtension.js +24 -0
- package/dist/prosemirror/extensions/marks/StrikeExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/StrikeExtension.js +33 -0
- package/dist/prosemirror/extensions/marks/SubscriptExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/SubscriptExtension.js +25 -0
- package/dist/prosemirror/extensions/marks/SuperscriptExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/SuperscriptExtension.js +25 -0
- package/dist/prosemirror/extensions/marks/TextColorExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/TextColorExtension.js +50 -0
- package/dist/prosemirror/extensions/marks/TextEffectExtension.d.ts +6 -0
- package/dist/prosemirror/extensions/marks/TextEffectExtension.js +35 -0
- package/dist/prosemirror/extensions/marks/TextEffectsExtensions.d.ts +31 -0
- package/dist/prosemirror/extensions/marks/TextEffectsExtensions.js +134 -0
- package/dist/prosemirror/extensions/marks/TrackedChangeExtensions.d.ts +22 -0
- package/dist/prosemirror/extensions/marks/TrackedChangeExtensions.js +113 -0
- package/dist/prosemirror/extensions/marks/UnderlineExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/UnderlineExtension.js +60 -0
- package/dist/prosemirror/extensions/marks/markUtils.d.ts +34 -0
- package/dist/prosemirror/extensions/marks/markUtils.js +233 -0
- package/dist/prosemirror/extensions/nodes/BlockSdtExtension.d.ts +22 -0
- package/dist/prosemirror/extensions/nodes/BlockSdtExtension.js +122 -0
- package/dist/prosemirror/extensions/nodes/FieldExtension.d.ts +12 -0
- package/dist/prosemirror/extensions/nodes/FieldExtension.js +87 -0
- package/dist/prosemirror/extensions/nodes/HardBreakExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/nodes/HardBreakExtension.js +38 -0
- package/dist/prosemirror/extensions/nodes/HorizontalRuleExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/nodes/HorizontalRuleExtension.js +18 -0
- package/dist/prosemirror/extensions/nodes/ImageExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/nodes/ImageExtension.js +132 -0
- package/dist/prosemirror/extensions/nodes/MathExtension.d.ts +13 -0
- package/dist/prosemirror/extensions/nodes/MathExtension.js +56 -0
- package/dist/prosemirror/extensions/nodes/PageBreakExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/nodes/PageBreakExtension.js +20 -0
- package/dist/prosemirror/extensions/nodes/SdtExtension.d.ts +12 -0
- package/dist/prosemirror/extensions/nodes/SdtExtension.js +107 -0
- package/dist/prosemirror/extensions/nodes/ShapeExtension.d.ts +30 -0
- package/dist/prosemirror/extensions/nodes/ShapeExtension.js +502 -0
- package/dist/prosemirror/extensions/nodes/TabExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/nodes/TabExtension.js +27 -0
- package/dist/prosemirror/extensions/nodes/TableExtension.d.ts +34 -0
- package/dist/prosemirror/extensions/nodes/TableExtension.js +1972 -0
- package/dist/prosemirror/extensions/nodes/TextBoxExtension.d.ts +34 -0
- package/dist/prosemirror/extensions/nodes/TextBoxExtension.js +150 -0
- package/dist/prosemirror/extensions/types.d.ts +101 -0
- package/dist/prosemirror/extensions/types.js +10 -0
- package/dist/prosemirror/findReplaceSelection.d.ts +23 -0
- package/dist/prosemirror/findReplaceSelection.js +86 -0
- package/dist/prosemirror/index.d.ts +25 -0
- package/dist/prosemirror/index.js +23 -0
- package/dist/prosemirror/insertOperations.d.ts +12 -0
- package/dist/prosemirror/insertOperations.js +19 -0
- package/dist/prosemirror/paragraphDirection.d.ts +42 -0
- package/dist/prosemirror/paragraphDirection.js +33 -0
- package/dist/prosemirror/plugins/aiCitationDecorations.d.ts +40 -0
- package/dist/prosemirror/plugins/aiCitationDecorations.js +90 -0
- package/dist/prosemirror/plugins/aiSuggestionDecorations.d.ts +42 -0
- package/dist/prosemirror/plugins/aiSuggestionDecorations.js +135 -0
- package/dist/prosemirror/plugins/anonymizationDecorations.d.ts +60 -0
- package/dist/prosemirror/plugins/anonymizationDecorations.js +120 -0
- package/dist/prosemirror/plugins/autocompleteSuggestion.d.ts +123 -0
- package/dist/prosemirror/plugins/autocompleteSuggestion.js +283 -0
- package/dist/prosemirror/plugins/contentControlWidgets.d.ts +56 -0
- package/dist/prosemirror/plugins/contentControlWidgets.js +192 -0
- package/dist/prosemirror/plugins/createDocScanPlugin.d.ts +37 -0
- package/dist/prosemirror/plugins/createDocScanPlugin.js +55 -0
- package/dist/prosemirror/plugins/documentStyles.d.ts +18 -0
- package/dist/prosemirror/plugins/documentStyles.js +46 -0
- package/dist/prosemirror/plugins/index.d.ts +3 -0
- package/dist/prosemirror/plugins/index.js +3 -0
- package/dist/prosemirror/plugins/pmTextScan.d.ts +19 -0
- package/dist/prosemirror/plugins/pmTextScan.js +39 -0
- package/dist/prosemirror/plugins/selectionTracker.d.ts +43 -0
- package/dist/prosemirror/plugins/selectionTracker.js +179 -0
- package/dist/prosemirror/plugins/suggestionMode.d.ts +70 -0
- package/dist/prosemirror/plugins/suggestionMode.js +489 -0
- package/dist/prosemirror/plugins/templateDirectives.d.ts +25 -0
- package/dist/prosemirror/plugins/templateDirectives.js +67 -0
- package/dist/prosemirror/plugins/templatePreviewValues.d.ts +49 -0
- package/dist/prosemirror/plugins/templatePreviewValues.js +117 -0
- package/dist/prosemirror/plugins/templateSlashMenu.d.ts +57 -0
- package/dist/prosemirror/plugins/templateSlashMenu.js +184 -0
- package/dist/prosemirror/schema/index.d.ts +15 -0
- package/dist/prosemirror/schema/index.js +20 -0
- package/dist/prosemirror/schema/marks.d.ts +118 -0
- package/dist/prosemirror/schema/marks.js +0 -0
- package/dist/prosemirror/schema/nodes.d.ts +389 -0
- package/dist/prosemirror/schema/nodes.js +0 -0
- package/dist/prosemirror/selectionState.d.ts +23 -0
- package/dist/prosemirror/selectionState.js +111 -0
- package/dist/prosemirror/styles/index.d.ts +2 -0
- package/dist/prosemirror/styles/index.js +2 -0
- package/dist/prosemirror/styles/resolvedStyleAttrs.d.ts +32 -0
- package/dist/prosemirror/styles/resolvedStyleAttrs.js +108 -0
- package/dist/prosemirror/styles/styleResolver.d.ts +94 -0
- package/dist/prosemirror/styles/styleResolver.js +200 -0
- package/dist/prosemirror/utils/findParagraphByParaId.d.ts +26 -0
- package/dist/prosemirror/utils/findParagraphByParaId.js +37 -0
- package/dist/prosemirror/utils/tabCalculator.d.ts +110 -0
- package/dist/prosemirror/utils/tabCalculator.js +137 -0
- package/dist/prosemirror/validation.d.ts +20 -0
- package/dist/prosemirror/validation.js +177 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.js +6 -0
- package/dist/style-engine/index.d.ts +3 -0
- package/dist/style-engine/index.js +2 -0
- package/dist/style-engine/styleEngine.d.ts +67 -0
- package/dist/style-engine/styleEngine.js +70 -0
- package/dist/types/block-id.d.ts +58 -0
- package/dist/types/block-id.js +61 -0
- package/dist/types/colors.d.ts +2 -0
- package/dist/types/colors.js +0 -0
- package/dist/types/content.d.ts +2 -0
- package/dist/types/content.js +0 -0
- package/dist/types/document.d.ts +7 -0
- package/dist/types/document.js +0 -0
- package/dist/types/documentEnumValues.d.ts +89 -0
- package/dist/types/documentEnumValues.js +693 -0
- package/dist/types/formatting.d.ts +2 -0
- package/dist/types/formatting.js +0 -0
- package/dist/types/index.d.ts +107 -0
- package/dist/types/index.js +0 -0
- package/dist/utils/authorColors.d.ts +16 -0
- package/dist/utils/authorColors.js +30 -0
- package/dist/utils/baseDirection.d.ts +23 -0
- package/dist/utils/baseDirection.js +34 -0
- package/dist/utils/clipboard.d.ts +126 -0
- package/dist/utils/clipboard.js +622 -0
- package/dist/utils/colorResolver.d.ts +158 -0
- package/dist/utils/colorResolver.js +557 -0
- package/dist/utils/createDocument.d.ts +50 -0
- package/dist/utils/createDocument.js +262 -0
- package/dist/utils/documentLoaderBehavior.d.ts +22 -0
- package/dist/utils/documentLoaderBehavior.js +14 -0
- package/dist/utils/docxInput.d.ts +22 -0
- package/dist/utils/docxInput.js +16 -0
- package/dist/utils/domGuards.d.ts +59 -0
- package/dist/utils/domGuards.js +82 -0
- package/dist/utils/fontFamilyMerge.d.ts +7 -0
- package/dist/utils/fontFamilyMerge.js +31 -0
- package/dist/utils/fontLoader.d.ts +50 -0
- package/dist/utils/fontLoader.js +177 -0
- package/dist/utils/fontResolver.d.ts +61 -0
- package/dist/utils/fontResolver.js +651 -0
- package/dist/utils/fontWeights.d.ts +4 -0
- package/dist/utils/fontWeights.js +4 -0
- package/dist/utils/formatToStyle.d.ts +103 -0
- package/dist/utils/formatToStyle.js +289 -0
- package/dist/utils/headerFooter.d.ts +74 -0
- package/dist/utils/headerFooter.js +257 -0
- package/dist/utils/headingCollector.d.ts +22 -0
- package/dist/utils/headingCollector.js +36 -0
- package/dist/utils/hexId.d.ts +33 -0
- package/dist/utils/hexId.js +37 -0
- package/dist/utils/imageValidation.d.ts +5 -0
- package/dist/utils/imageValidation.js +31 -0
- package/dist/utils/paragraphFormattingMerge.d.ts +14 -0
- package/dist/utils/paragraphFormattingMerge.js +68 -0
- package/dist/utils/replaceText.d.ts +17 -0
- package/dist/utils/replaceText.js +161 -0
- package/dist/utils/rotationBoundingBox.d.ts +12 -0
- package/dist/utils/rotationBoundingBox.js +36 -0
- package/dist/utils/scriptSegments.d.ts +36 -0
- package/dist/utils/scriptSegments.js +52 -0
- package/dist/utils/tableOperations.d.ts +87 -0
- package/dist/utils/tableOperations.js +259 -0
- package/dist/utils/textFormattingMerge.d.ts +6 -0
- package/dist/utils/textFormattingMerge.js +31 -0
- package/dist/utils/tiffConverter.d.ts +18 -0
- package/dist/utils/tiffConverter.js +83 -0
- package/dist/utils/units.d.ts +99 -0
- package/dist/utils/units.js +139 -0
- package/dist/utils/urlSecurity.d.ts +7 -0
- package/dist/utils/urlSecurity.js +65 -0
- package/dist/watermark/index.d.ts +39 -0
- package/dist/watermark/index.js +149 -0
- package/package.json +122 -2
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Comment } from "../../types/content.js";
|
|
2
|
+
|
|
3
|
+
//#region src/docx/serializer/commentSerializer.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Serialize comments array to comments.xml content. Returns a valid empty
|
|
6
|
+
* `<w:comments/>` document for an empty array so callers can overwrite an
|
|
7
|
+
* existing `word/comments.xml` part when the editor has removed the last
|
|
8
|
+
* comment — leaving the previous file in place would otherwise re-emit
|
|
9
|
+
* the orphaned comment threads on every save.
|
|
10
|
+
*/
|
|
11
|
+
declare function serializeComments(comments: Comment[]): string;
|
|
12
|
+
/**
|
|
13
|
+
* Assign a deterministic `w14:paraId` to the LAST paragraph of every comment
|
|
14
|
+
* that needs a commentsExtended entry (a reply, a reply's parent, or a resolved
|
|
15
|
+
* comment) but has none. A document authored or loaded without comment paraIds
|
|
16
|
+
* would otherwise have no stable key to thread through commentsExtended.xml, and
|
|
17
|
+
* the thread link would be silently dropped. Word-authored ids are preserved;
|
|
18
|
+
* only threaded, id-less paragraphs are filled. Deterministic (content- and
|
|
19
|
+
* id-derived) so repeated saves mint the SAME id. MUST run before serializing
|
|
20
|
+
* BOTH comments.xml and commentsExtended.xml so the two reference the same id.
|
|
21
|
+
*/
|
|
22
|
+
declare function ensureThreadedCommentParaIds(comments: readonly Comment[]): void;
|
|
23
|
+
/**
|
|
24
|
+
* Serialize `commentsExtended.xml` (`w15:commentsEx`) for reply threading and
|
|
25
|
+
* resolved state, or `null` when no comment needs an entry (see
|
|
26
|
+
* {@link buildCommentExtendedEntries}). This is the part that makes Word render
|
|
27
|
+
* a comment as a REPLY rather than a separate top-level thread.
|
|
28
|
+
*/
|
|
29
|
+
declare function serializeCommentsExtended(comments: readonly Comment[]): string | null;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { ensureThreadedCommentParaIds, serializeComments, serializeCommentsExtended };
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { deterministicHexId } from "../../utils/hexId.js";
|
|
2
|
+
import { escapeXml } from "./xmlUtils.js";
|
|
3
|
+
//#region src/docx/serializer/commentSerializer.ts
|
|
4
|
+
/**
|
|
5
|
+
* Comment Serializer
|
|
6
|
+
*
|
|
7
|
+
* Serializes Comment[] to OOXML comments.xml format.
|
|
8
|
+
*/
|
|
9
|
+
function serializeRunContent(run) {
|
|
10
|
+
let xml = "<w:r>";
|
|
11
|
+
const rPr = [];
|
|
12
|
+
if (run.formatting?.bold) rPr.push("<w:b/>");
|
|
13
|
+
if (run.formatting?.italic) rPr.push("<w:i/>");
|
|
14
|
+
if (rPr.length > 0) xml += `<w:rPr>${rPr.join("")}</w:rPr>`;
|
|
15
|
+
for (const c of run.content) if (c.type === "text") {
|
|
16
|
+
const preserveSpace = c.text !== c.text.trim() || c.text.includes(" ");
|
|
17
|
+
xml += preserveSpace ? `<w:t xml:space="preserve">${escapeXml(c.text)}</w:t>` : `<w:t>${escapeXml(c.text)}</w:t>`;
|
|
18
|
+
} else if (c.type === "break") xml += "<w:br/>";
|
|
19
|
+
xml += "</w:r>";
|
|
20
|
+
return xml;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* `w14:paraId` / `w14:textId` open tag for a comment paragraph. Word keys
|
|
24
|
+
* commentsExtended.xml (reply threading) and commentsExtensible.xml (UTC
|
|
25
|
+
* dates) on the paraId of a comment's LAST paragraph, so the id must survive
|
|
26
|
+
* serialization; the parser stores it on `Paragraph.paraId`.
|
|
27
|
+
*/
|
|
28
|
+
function commentParagraphOpenTag(p) {
|
|
29
|
+
const attrs = [];
|
|
30
|
+
if (p.paraId) attrs.push(`w14:paraId="${p.paraId}"`);
|
|
31
|
+
if (p.textId) attrs.push(`w14:textId="${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
|
+
}
|
|
40
|
+
/** Serialize a paragraph, prepending an annotationRef run (required by Word in first paragraph of a comment) */
|
|
41
|
+
function serializeParagraphWithAnnotationRef(p) {
|
|
42
|
+
let xml = commentParagraphOpenTag(p);
|
|
43
|
+
xml += "<w:r><w:rPr><w:rStyle w:val=\"CommentReference\"/></w:rPr><w:annotationRef/></w:r>";
|
|
44
|
+
for (const item of p.content) if (item.type === "run") xml += serializeRunContent(item);
|
|
45
|
+
xml += "</w:p>";
|
|
46
|
+
return xml;
|
|
47
|
+
}
|
|
48
|
+
function serializeComment(comment) {
|
|
49
|
+
const attrs = [`w:id="${comment.id}"`];
|
|
50
|
+
if (comment.author) attrs.push(`w:author="${escapeXml(comment.author)}"`);
|
|
51
|
+
if (comment.initials) attrs.push(`w:initials="${escapeXml(comment.initials)}"`);
|
|
52
|
+
if (comment.date) attrs.push(`w:date="${escapeXml(comment.date)}"`);
|
|
53
|
+
let xml = `<w:comment ${attrs.join(" ")}>`;
|
|
54
|
+
if (comment.content.length > 0) {
|
|
55
|
+
xml += serializeParagraphWithAnnotationRef(comment.content[0]);
|
|
56
|
+
for (let i = 1; i < comment.content.length; i++) xml += serializeParagraph(comment.content[i]);
|
|
57
|
+
} else xml += "<w:p><w:r><w:rPr><w:rStyle w:val=\"CommentReference\"/></w:rPr><w:annotationRef/></w:r></w:p>";
|
|
58
|
+
xml += "</w:comment>";
|
|
59
|
+
return xml;
|
|
60
|
+
}
|
|
61
|
+
const COMMENTS_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<w:comments xmlns:wpc=\"http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\" xmlns:wpg=\"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup\" xmlns:wpi=\"http://schemas.microsoft.com/office/word/2010/wordprocessingInk\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" xmlns:wps=\"http://schemas.microsoft.com/office/word/2010/wordprocessingShape\" mc:Ignorable=\"w14 wp14\">";
|
|
62
|
+
/**
|
|
63
|
+
* Serialize comments array to comments.xml content. Returns a valid empty
|
|
64
|
+
* `<w:comments/>` document for an empty array so callers can overwrite an
|
|
65
|
+
* existing `word/comments.xml` part when the editor has removed the last
|
|
66
|
+
* comment — leaving the previous file in place would otherwise re-emit
|
|
67
|
+
* the orphaned comment threads on every save.
|
|
68
|
+
*/
|
|
69
|
+
function serializeComments(comments) {
|
|
70
|
+
const topLevel = [];
|
|
71
|
+
const replies = [];
|
|
72
|
+
for (const c of comments) {
|
|
73
|
+
const { parentId } = c;
|
|
74
|
+
(parentId === null || parentId === void 0 ? topLevel : replies).push(c);
|
|
75
|
+
}
|
|
76
|
+
let xml = COMMENTS_HEADER;
|
|
77
|
+
for (const comment of topLevel) xml += serializeComment(comment);
|
|
78
|
+
for (const reply of replies) xml += serializeComment(reply);
|
|
79
|
+
xml += "</w:comments>";
|
|
80
|
+
return xml;
|
|
81
|
+
}
|
|
82
|
+
/** The `w14:paraId` Word threads a comment by: its LAST paragraph's paraId. */
|
|
83
|
+
function commentThreadParaId(comment) {
|
|
84
|
+
return comment.content?.at(-1)?.paraId;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* The ids of comments that need a `commentsExtended.xml` entry: a reply, a
|
|
88
|
+
* reply's parent (the thread root), or any comment carrying a resolved state.
|
|
89
|
+
* A plain top-level comment set yields an empty set, so no part is written.
|
|
90
|
+
*/
|
|
91
|
+
function threadedCommentIds(comments) {
|
|
92
|
+
const replyParents = /* @__PURE__ */ new Set();
|
|
93
|
+
for (const comment of comments) if (comment.parentId !== void 0) replyParents.add(comment.parentId);
|
|
94
|
+
const ids = /* @__PURE__ */ new Set();
|
|
95
|
+
for (const comment of comments) if (comment.parentId !== void 0 || replyParents.has(comment.id) || comment.done !== void 0) ids.add(comment.id);
|
|
96
|
+
return ids;
|
|
97
|
+
}
|
|
98
|
+
const commentPlainText = (comment) => {
|
|
99
|
+
let text = "";
|
|
100
|
+
for (const paragraph of comment.content ?? []) for (const item of paragraph.content ?? []) {
|
|
101
|
+
if (item.type !== "run") continue;
|
|
102
|
+
for (const runItem of item.content ?? []) if (runItem.type === "text") text += runItem.text;
|
|
103
|
+
}
|
|
104
|
+
return text;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Assign a deterministic `w14:paraId` to the LAST paragraph of every comment
|
|
108
|
+
* that needs a commentsExtended entry (a reply, a reply's parent, or a resolved
|
|
109
|
+
* comment) but has none. A document authored or loaded without comment paraIds
|
|
110
|
+
* would otherwise have no stable key to thread through commentsExtended.xml, and
|
|
111
|
+
* the thread link would be silently dropped. Word-authored ids are preserved;
|
|
112
|
+
* only threaded, id-less paragraphs are filled. Deterministic (content- and
|
|
113
|
+
* id-derived) so repeated saves mint the SAME id. MUST run before serializing
|
|
114
|
+
* BOTH comments.xml and commentsExtended.xml so the two reference the same id.
|
|
115
|
+
*/
|
|
116
|
+
function ensureThreadedCommentParaIds(comments) {
|
|
117
|
+
const threaded = threadedCommentIds(comments);
|
|
118
|
+
if (threaded.size === 0) return;
|
|
119
|
+
const used = /* @__PURE__ */ new Set();
|
|
120
|
+
for (const comment of comments) for (const paragraph of comment.content ?? []) if (paragraph.paraId) used.add(paragraph.paraId.toUpperCase());
|
|
121
|
+
for (const comment of comments) {
|
|
122
|
+
if (!threaded.has(comment.id)) continue;
|
|
123
|
+
const last = (comment.content ?? []).at(-1);
|
|
124
|
+
if (!last || last.paraId) continue;
|
|
125
|
+
let paraId = deterministicHexId(`comment:${comment.id}:${commentPlainText(comment)}`);
|
|
126
|
+
for (let salt = 1; used.has(paraId.toUpperCase()); salt++) paraId = deterministicHexId(`comment:${comment.id}:${salt}`);
|
|
127
|
+
used.add(paraId.toUpperCase());
|
|
128
|
+
last.paraId = paraId;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Build the `commentsExtended.xml` entries for the comments that participate in
|
|
133
|
+
* a thread or carry a resolved state. Returns `null` when no comment needs an
|
|
134
|
+
* entry (no replies, no parents-of-replies, no `done` state) so callers can
|
|
135
|
+
* leave any existing part untouched — a plain top-level comment set gets no
|
|
136
|
+
* `commentsExtended.xml`, matching how Word omits it.
|
|
137
|
+
*
|
|
138
|
+
* A `w15:commentEx` keys on the comment's LAST paragraph paraId; a reply's
|
|
139
|
+
* `w15:paraIdParent` points at its parent comment's last-paragraph paraId. Ids
|
|
140
|
+
* are guaranteed present by {@link ensureThreadedCommentParaIds}; the `!paraId`
|
|
141
|
+
* skip is a last-ditch safety for a malformed model.
|
|
142
|
+
*/
|
|
143
|
+
function buildCommentExtendedEntries(comments) {
|
|
144
|
+
const threaded = threadedCommentIds(comments);
|
|
145
|
+
if (threaded.size === 0) return null;
|
|
146
|
+
const paraIdByCommentId = /* @__PURE__ */ new Map();
|
|
147
|
+
for (const comment of comments) {
|
|
148
|
+
const paraId = commentThreadParaId(comment);
|
|
149
|
+
if (paraId) paraIdByCommentId.set(comment.id, paraId);
|
|
150
|
+
}
|
|
151
|
+
const entries = [];
|
|
152
|
+
for (const comment of comments) {
|
|
153
|
+
if (!threaded.has(comment.id)) continue;
|
|
154
|
+
const paraId = paraIdByCommentId.get(comment.id);
|
|
155
|
+
if (!paraId) continue;
|
|
156
|
+
const parentParaId = comment.parentId !== void 0 ? paraIdByCommentId.get(comment.parentId) : void 0;
|
|
157
|
+
entries.push({
|
|
158
|
+
paraId,
|
|
159
|
+
...parentParaId !== void 0 ? { paraIdParent: parentParaId } : {},
|
|
160
|
+
done: comment.done ?? false
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return entries.length > 0 ? entries : null;
|
|
164
|
+
}
|
|
165
|
+
const COMMENTS_EXTENDED_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<w15:commentsEx xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:w15=\"http://schemas.microsoft.com/office/word/2012/wordml\" mc:Ignorable=\"w15\">";
|
|
166
|
+
/**
|
|
167
|
+
* Serialize `commentsExtended.xml` (`w15:commentsEx`) for reply threading and
|
|
168
|
+
* resolved state, or `null` when no comment needs an entry (see
|
|
169
|
+
* {@link buildCommentExtendedEntries}). This is the part that makes Word render
|
|
170
|
+
* a comment as a REPLY rather than a separate top-level thread.
|
|
171
|
+
*/
|
|
172
|
+
function serializeCommentsExtended(comments) {
|
|
173
|
+
const entries = buildCommentExtendedEntries(comments);
|
|
174
|
+
if (!entries) return null;
|
|
175
|
+
let xml = COMMENTS_EXTENDED_HEADER;
|
|
176
|
+
for (const entry of entries) {
|
|
177
|
+
const parentAttr = entry.paraIdParent !== void 0 ? ` w15:paraIdParent="${entry.paraIdParent}"` : "";
|
|
178
|
+
xml += `<w15:commentEx w15:paraId="${entry.paraId}"${parentAttr} w15:done="${entry.done ? "1" : "0"}"/>`;
|
|
179
|
+
}
|
|
180
|
+
xml += "</w15:commentsEx>";
|
|
181
|
+
return xml;
|
|
182
|
+
}
|
|
183
|
+
//#endregion
|
|
184
|
+
export { ensureThreadedCommentParaIds, serializeComments, serializeCommentsExtended };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { document_d_exports } from "../../types/document.js";
|
|
2
|
+
|
|
3
|
+
//#region src/docx/serializer/documentSerializer.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Serialize a DocumentBody to document.xml body content
|
|
6
|
+
*
|
|
7
|
+
* @param body - The document body to serialize
|
|
8
|
+
* @returns XML string for the body element (without body tags)
|
|
9
|
+
*/
|
|
10
|
+
declare function serializeDocumentBody(body: document_d_exports.DocumentBody): string;
|
|
11
|
+
/**
|
|
12
|
+
* Serialize a complete Document to valid document.xml
|
|
13
|
+
*
|
|
14
|
+
* @param doc - The document to serialize
|
|
15
|
+
* @returns Complete XML string for document.xml
|
|
16
|
+
*/
|
|
17
|
+
declare function serializeDocument(doc: document_d_exports.Document): string;
|
|
18
|
+
/**
|
|
19
|
+
* Serialize just the document body (useful for partial updates)
|
|
20
|
+
*
|
|
21
|
+
* @param body - The document body to serialize
|
|
22
|
+
* @returns XML string for the w:body element
|
|
23
|
+
*/
|
|
24
|
+
declare function serializeDocumentBodyElement(body: document_d_exports.DocumentBody): string;
|
|
25
|
+
/**
|
|
26
|
+
* Check if document has any content
|
|
27
|
+
*/
|
|
28
|
+
declare function hasDocumentContent(doc: document_d_exports.Document): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Check if document has sections
|
|
31
|
+
*/
|
|
32
|
+
declare function hasDocumentSections(doc: document_d_exports.Document): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Check if document has section properties
|
|
35
|
+
*/
|
|
36
|
+
declare function hasSectionProperties(doc: document_d_exports.Document): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Get document content count (paragraphs + tables)
|
|
39
|
+
*/
|
|
40
|
+
declare function getDocumentContentCount(doc: document_d_exports.Document): number;
|
|
41
|
+
/**
|
|
42
|
+
* Get paragraph count in document
|
|
43
|
+
*/
|
|
44
|
+
declare function getDocumentParagraphCount(doc: document_d_exports.Document): number;
|
|
45
|
+
/**
|
|
46
|
+
* Get table count in document
|
|
47
|
+
*/
|
|
48
|
+
declare function getDocumentTableCount(doc: document_d_exports.Document): number;
|
|
49
|
+
/**
|
|
50
|
+
* Get plain text from document (for comparison/debugging)
|
|
51
|
+
*/
|
|
52
|
+
declare function getDocumentPlainText(doc: document_d_exports.Document): string;
|
|
53
|
+
/**
|
|
54
|
+
* Create an empty document
|
|
55
|
+
*/
|
|
56
|
+
declare function createEmptyDocument(): document_d_exports.Document;
|
|
57
|
+
/**
|
|
58
|
+
* Create a simple document with text content
|
|
59
|
+
*/
|
|
60
|
+
declare function createSimpleDocument(paragraphs: {
|
|
61
|
+
text: string;
|
|
62
|
+
styleId?: string;
|
|
63
|
+
}[]): document_d_exports.Document;
|
|
64
|
+
//#endregion
|
|
65
|
+
export { createEmptyDocument, createSimpleDocument, getDocumentContentCount, getDocumentParagraphCount, getDocumentPlainText, getDocumentTableCount, hasDocumentContent, hasDocumentSections, hasSectionProperties, serializeDocument, serializeDocumentBody, serializeDocumentBodyElement };
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { serializeBlockSdt } from "./blockSdtSerializer.js";
|
|
2
|
+
import { resetAutoIdCounter } from "./runSerializer.js";
|
|
3
|
+
import { serializeSectionProperties } from "./sectionPropertiesSerializer.js";
|
|
4
|
+
import { serializeParagraph } from "./paragraphSerializer.js";
|
|
5
|
+
import { serializeTable } from "./tableSerializer.js";
|
|
6
|
+
//#region src/docx/serializer/documentSerializer.ts
|
|
7
|
+
/**
|
|
8
|
+
* Standard OOXML namespaces for document.xml
|
|
9
|
+
*/
|
|
10
|
+
const NAMESPACES = {
|
|
11
|
+
wpc: "http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas",
|
|
12
|
+
cx: "http://schemas.microsoft.com/office/drawing/2014/chartex",
|
|
13
|
+
cx1: "http://schemas.microsoft.com/office/drawing/2015/9/8/chartex",
|
|
14
|
+
cx2: "http://schemas.microsoft.com/office/drawing/2015/10/21/chartex",
|
|
15
|
+
cx3: "http://schemas.microsoft.com/office/drawing/2016/5/9/chartex",
|
|
16
|
+
cx4: "http://schemas.microsoft.com/office/drawing/2016/5/10/chartex",
|
|
17
|
+
cx5: "http://schemas.microsoft.com/office/drawing/2016/5/11/chartex",
|
|
18
|
+
cx6: "http://schemas.microsoft.com/office/drawing/2016/5/12/chartex",
|
|
19
|
+
cx7: "http://schemas.microsoft.com/office/drawing/2016/5/13/chartex",
|
|
20
|
+
cx8: "http://schemas.microsoft.com/office/drawing/2016/5/14/chartex",
|
|
21
|
+
mc: "http://schemas.openxmlformats.org/markup-compatibility/2006",
|
|
22
|
+
aink: "http://schemas.microsoft.com/office/drawing/2016/ink",
|
|
23
|
+
am3d: "http://schemas.microsoft.com/office/drawing/2017/model3d",
|
|
24
|
+
o: "urn:schemas-microsoft-com:office:office",
|
|
25
|
+
oel: "http://schemas.microsoft.com/office/2019/extlst",
|
|
26
|
+
r: "http://schemas.openxmlformats.org/officeDocument/2006/relationships",
|
|
27
|
+
m: "http://schemas.openxmlformats.org/officeDocument/2006/math",
|
|
28
|
+
v: "urn:schemas-microsoft-com:vml",
|
|
29
|
+
wp14: "http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing",
|
|
30
|
+
wp: "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing",
|
|
31
|
+
w10: "urn:schemas-microsoft-com:office:word",
|
|
32
|
+
w: "http://schemas.openxmlformats.org/wordprocessingml/2006/main",
|
|
33
|
+
w14: "http://schemas.microsoft.com/office/word/2010/wordml",
|
|
34
|
+
w15: "http://schemas.microsoft.com/office/word/2012/wordml",
|
|
35
|
+
w16cex: "http://schemas.microsoft.com/office/word/2018/wordml/cex",
|
|
36
|
+
w16cid: "http://schemas.microsoft.com/office/word/2016/wordml/cid",
|
|
37
|
+
w16: "http://schemas.microsoft.com/office/word/2018/wordml",
|
|
38
|
+
w16sdtdh: "http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash",
|
|
39
|
+
w16se: "http://schemas.microsoft.com/office/word/2015/wordml/symex",
|
|
40
|
+
wpg: "http://schemas.microsoft.com/office/word/2010/wordprocessingGroup",
|
|
41
|
+
wpi: "http://schemas.microsoft.com/office/word/2010/wordprocessingInk",
|
|
42
|
+
wne: "http://schemas.microsoft.com/office/word/2006/wordml",
|
|
43
|
+
wps: "http://schemas.microsoft.com/office/word/2010/wordprocessingShape"
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Build namespace declaration string for document element
|
|
47
|
+
*/
|
|
48
|
+
function buildNamespaceDeclarations() {
|
|
49
|
+
const declared = {
|
|
50
|
+
wpc: NAMESPACES.wpc,
|
|
51
|
+
mc: NAMESPACES.mc,
|
|
52
|
+
o: NAMESPACES.o,
|
|
53
|
+
r: NAMESPACES.r,
|
|
54
|
+
m: NAMESPACES.m,
|
|
55
|
+
v: NAMESPACES.v,
|
|
56
|
+
wp14: NAMESPACES.wp14,
|
|
57
|
+
wp: NAMESPACES.wp,
|
|
58
|
+
w10: NAMESPACES.w10,
|
|
59
|
+
w: NAMESPACES.w,
|
|
60
|
+
w14: NAMESPACES.w14,
|
|
61
|
+
w15: NAMESPACES.w15,
|
|
62
|
+
w16: NAMESPACES.w16,
|
|
63
|
+
w16cex: NAMESPACES.w16cex,
|
|
64
|
+
w16cid: NAMESPACES.w16cid,
|
|
65
|
+
w16sdtdh: NAMESPACES.w16sdtdh,
|
|
66
|
+
w16se: NAMESPACES.w16se,
|
|
67
|
+
wpg: NAMESPACES.wpg,
|
|
68
|
+
wps: NAMESPACES.wps
|
|
69
|
+
};
|
|
70
|
+
return Object.entries(declared).map(([prefix, uri]) => `xmlns:${prefix}="${uri}"`).join(" ");
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Serialize a single block content item (paragraph, table, or block-level SDT).
|
|
74
|
+
*/
|
|
75
|
+
function serializeBlockContent(block) {
|
|
76
|
+
if (block.type === "paragraph") return serializeParagraph(block);
|
|
77
|
+
if (block.type === "table") return serializeTable(block);
|
|
78
|
+
return serializeBlockSdt(block, serializeBlockContent);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Serialize document body content
|
|
82
|
+
*/
|
|
83
|
+
function serializeBodyContent(content) {
|
|
84
|
+
return content.map((block) => serializeBlockContent(block)).join("");
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Serialize a DocumentBody to document.xml body content
|
|
88
|
+
*
|
|
89
|
+
* @param body - The document body to serialize
|
|
90
|
+
* @returns XML string for the body element (without body tags)
|
|
91
|
+
*/
|
|
92
|
+
function serializeDocumentBody(body) {
|
|
93
|
+
const parts = [];
|
|
94
|
+
parts.push(serializeBodyContent(body.content));
|
|
95
|
+
if (body.finalSectionProperties) parts.push(serializeSectionProperties(body.finalSectionProperties));
|
|
96
|
+
return parts.join("");
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Serialize a complete Document to valid document.xml
|
|
100
|
+
*
|
|
101
|
+
* @param doc - The document to serialize
|
|
102
|
+
* @returns Complete XML string for document.xml
|
|
103
|
+
*/
|
|
104
|
+
function serializeDocument(doc) {
|
|
105
|
+
resetAutoIdCounter();
|
|
106
|
+
const parts = [];
|
|
107
|
+
parts.push("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
|
|
108
|
+
const nsDecl = buildNamespaceDeclarations();
|
|
109
|
+
parts.push(`<w:document ${nsDecl} mc:Ignorable="w14 w15 wp14">`);
|
|
110
|
+
parts.push("<w:body>");
|
|
111
|
+
parts.push(serializeDocumentBody(doc.package.document));
|
|
112
|
+
parts.push("</w:body>");
|
|
113
|
+
parts.push("</w:document>");
|
|
114
|
+
return parts.join("");
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Serialize just the document body (useful for partial updates)
|
|
118
|
+
*
|
|
119
|
+
* @param body - The document body to serialize
|
|
120
|
+
* @returns XML string for the w:body element
|
|
121
|
+
*/
|
|
122
|
+
function serializeDocumentBodyElement(body) {
|
|
123
|
+
return `<w:body>${serializeDocumentBody(body)}</w:body>`;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Check if document has any content
|
|
127
|
+
*/
|
|
128
|
+
function hasDocumentContent(doc) {
|
|
129
|
+
return doc.package.document.content.length > 0;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Check if document has sections
|
|
133
|
+
*/
|
|
134
|
+
function hasDocumentSections(doc) {
|
|
135
|
+
return (doc.package.document.sections?.length ?? 0) > 0;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Check if document has section properties
|
|
139
|
+
*/
|
|
140
|
+
function hasSectionProperties(doc) {
|
|
141
|
+
return doc.package.document.finalSectionProperties !== void 0;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get document content count (paragraphs + tables)
|
|
145
|
+
*/
|
|
146
|
+
function getDocumentContentCount(doc) {
|
|
147
|
+
return doc.package.document.content.length;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get paragraph count in document
|
|
151
|
+
*/
|
|
152
|
+
function getDocumentParagraphCount(doc) {
|
|
153
|
+
return doc.package.document.content.filter((b) => b.type === "paragraph").length;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get table count in document
|
|
157
|
+
*/
|
|
158
|
+
function getDocumentTableCount(doc) {
|
|
159
|
+
return doc.package.document.content.filter((b) => b.type === "table").length;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Get plain text from document (for comparison/debugging)
|
|
163
|
+
*/
|
|
164
|
+
function getDocumentPlainText(doc) {
|
|
165
|
+
const texts = [];
|
|
166
|
+
for (const block of doc.package.document.content) if (block.type === "paragraph") {
|
|
167
|
+
for (const content of block.content) if (content.type === "run") {
|
|
168
|
+
for (const item of content.content) if (item.type === "text") texts.push(item.text);
|
|
169
|
+
else if (item.type === "tab") texts.push(" ");
|
|
170
|
+
else if (item.type === "break") texts.push("\n");
|
|
171
|
+
}
|
|
172
|
+
texts.push("\n");
|
|
173
|
+
}
|
|
174
|
+
return texts.join("");
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Create an empty document
|
|
178
|
+
*/
|
|
179
|
+
function createEmptyDocument() {
|
|
180
|
+
return { package: { document: { content: [] } } };
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Create a simple document with text content
|
|
184
|
+
*/
|
|
185
|
+
function createSimpleDocument(paragraphs) {
|
|
186
|
+
return { package: { document: { content: paragraphs.map((p) => ({
|
|
187
|
+
type: "paragraph",
|
|
188
|
+
...p.styleId ? { formatting: { styleId: p.styleId } } : {},
|
|
189
|
+
content: [{
|
|
190
|
+
type: "run",
|
|
191
|
+
content: [{
|
|
192
|
+
type: "text",
|
|
193
|
+
text: p.text
|
|
194
|
+
}]
|
|
195
|
+
}]
|
|
196
|
+
})) } } };
|
|
197
|
+
}
|
|
198
|
+
//#endregion
|
|
199
|
+
export { createEmptyDocument, createSimpleDocument, getDocumentContentCount, getDocumentParagraphCount, getDocumentPlainText, getDocumentTableCount, hasDocumentContent, hasDocumentSections, hasSectionProperties, serializeDocument, serializeDocumentBody, serializeDocumentBodyElement };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { document_d_exports } from "../../types/document.js";
|
|
2
|
+
|
|
3
|
+
//#region src/docx/serializer/headerFooterSerializer.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Serialize a HeaderFooter object to valid OOXML XML
|
|
6
|
+
*
|
|
7
|
+
* @param hf - HeaderFooter object to serialize
|
|
8
|
+
* @returns Complete XML string for header*.xml or footer*.xml
|
|
9
|
+
*/
|
|
10
|
+
declare function serializeHeaderFooter(hf: document_d_exports.HeaderFooter): string;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { serializeHeaderFooter };
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { escapeXml } from "./xmlUtils.js";
|
|
2
|
+
import { serializeBlockSdt } from "./blockSdtSerializer.js";
|
|
3
|
+
import { serializeParagraph } from "./paragraphSerializer.js";
|
|
4
|
+
import { serializeTable } from "./tableSerializer.js";
|
|
5
|
+
//#region src/docx/serializer/headerFooterSerializer.ts
|
|
6
|
+
const NAMESPACES = {
|
|
7
|
+
wpc: "http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas",
|
|
8
|
+
mc: "http://schemas.openxmlformats.org/markup-compatibility/2006",
|
|
9
|
+
o: "urn:schemas-microsoft-com:office:office",
|
|
10
|
+
r: "http://schemas.openxmlformats.org/officeDocument/2006/relationships",
|
|
11
|
+
m: "http://schemas.openxmlformats.org/officeDocument/2006/math",
|
|
12
|
+
v: "urn:schemas-microsoft-com:vml",
|
|
13
|
+
a: "http://schemas.openxmlformats.org/drawingml/2006/main",
|
|
14
|
+
pic: "http://schemas.openxmlformats.org/drawingml/2006/picture",
|
|
15
|
+
wp14: "http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing",
|
|
16
|
+
wp: "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing",
|
|
17
|
+
w10: "urn:schemas-microsoft-com:office:word",
|
|
18
|
+
w: "http://schemas.openxmlformats.org/wordprocessingml/2006/main",
|
|
19
|
+
w14: "http://schemas.microsoft.com/office/word/2010/wordml",
|
|
20
|
+
w15: "http://schemas.microsoft.com/office/word/2012/wordml",
|
|
21
|
+
w16: "http://schemas.microsoft.com/office/word/2018/wordml",
|
|
22
|
+
w16cex: "http://schemas.microsoft.com/office/word/2018/wordml/cex",
|
|
23
|
+
w16cid: "http://schemas.microsoft.com/office/word/2016/wordml/cid",
|
|
24
|
+
w16sdtdh: "http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash",
|
|
25
|
+
w16se: "http://schemas.microsoft.com/office/word/2015/wordml/symex",
|
|
26
|
+
wpg: "http://schemas.microsoft.com/office/word/2010/wordprocessingGroup",
|
|
27
|
+
wps: "http://schemas.microsoft.com/office/word/2010/wordprocessingShape"
|
|
28
|
+
};
|
|
29
|
+
function buildNamespaceDeclarations() {
|
|
30
|
+
return Object.entries(NAMESPACES).map(([prefix, uri]) => `xmlns:${prefix}="${uri}"`).join(" ");
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Serialize a block content item (paragraph, table, or block-level SDT) for
|
|
34
|
+
* header/footer.
|
|
35
|
+
*/
|
|
36
|
+
function serializeBlock(block) {
|
|
37
|
+
if (block.type === "paragraph") return serializeParagraph(block);
|
|
38
|
+
if (block.type === "table") return serializeTable(block);
|
|
39
|
+
return serializeBlockSdt(block, serializeBlock);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Serialize a HeaderFooter object to valid OOXML XML
|
|
43
|
+
*
|
|
44
|
+
* @param hf - HeaderFooter object to serialize
|
|
45
|
+
* @returns Complete XML string for header*.xml or footer*.xml
|
|
46
|
+
*/
|
|
47
|
+
function serializeHeaderFooter(hf) {
|
|
48
|
+
const rootTag = hf.type === "header" ? "w:hdr" : "w:ftr";
|
|
49
|
+
const nsDecl = buildNamespaceDeclarations();
|
|
50
|
+
const watermarkXml = serializeWatermarkParagraph(hf);
|
|
51
|
+
const watermarkInsertIndex = hf.watermarkBlockIndex !== void 0 ? Math.max(0, Math.min(hf.watermarkBlockIndex, hf.content.length)) : 0;
|
|
52
|
+
const blocksXml = hf.content.map((block) => serializeBlock(block));
|
|
53
|
+
let contentXml;
|
|
54
|
+
if (watermarkXml) contentXml = blocksXml.slice(0, watermarkInsertIndex).join("") + watermarkXml + blocksXml.slice(watermarkInsertIndex).join("");
|
|
55
|
+
else contentXml = blocksXml.join("");
|
|
56
|
+
if (!contentXml) contentXml = "<w:p><w:pPr/></w:p>";
|
|
57
|
+
return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<${rootTag} ${nsDecl}>${contentXml}</${rootTag}>`;
|
|
58
|
+
}
|
|
59
|
+
function serializeWatermarkParagraph(hf) {
|
|
60
|
+
if (hf.rawWatermarkXml) return hf.rawWatermarkXml;
|
|
61
|
+
if (hf.watermark) return synthesizeWatermarkParagraph(hf.watermark);
|
|
62
|
+
return "";
|
|
63
|
+
}
|
|
64
|
+
function synthesizeWatermarkParagraph(watermark) {
|
|
65
|
+
if (watermark.kind === "text") return synthesizeTextWatermark(watermark);
|
|
66
|
+
return synthesizePictureWatermark(watermark);
|
|
67
|
+
}
|
|
68
|
+
function synthesizeTextWatermark(watermark) {
|
|
69
|
+
const rotation = watermark.diagonal === false ? 0 : 315;
|
|
70
|
+
const fillcolor = watermark.color && watermark.color !== "auto" ? `#${watermark.color}` : "#C0C0C0";
|
|
71
|
+
const fontFamily = watermark.font ?? "Calibri";
|
|
72
|
+
const text = escapeXml(watermark.text);
|
|
73
|
+
return `<w:p><w:r><w:pict><v:shape id="PowerPlusWaterMarkObject1" type="#_x0000_t136" style="position:absolute;margin-left:0;margin-top:0;width:415pt;height:207pt;rotation:${rotation};z-index:-251658240;mso-position-horizontal:center;mso-position-horizontal-relative:margin;mso-position-vertical:center;mso-position-vertical-relative:margin" fillcolor="${fillcolor}" stroked="f">${watermark.opacity !== void 0 ? `<v:fill opacity="${watermark.opacity}"/>` : ""}<v:textpath style="font-family:"${escapeXml(fontFamily)}";font-size:1pt" string="${text}"/></v:shape></w:pict></w:r></w:p>`;
|
|
74
|
+
}
|
|
75
|
+
const PICTURE_WATERMARK_DEFAULT_WIDTH_PT = 415;
|
|
76
|
+
const PICTURE_WATERMARK_DEFAULT_HEIGHT_PT = 207;
|
|
77
|
+
const PICTURE_WATERMARK_WASHOUT_GAIN = "19661f";
|
|
78
|
+
const PICTURE_WATERMARK_WASHOUT_BLACKLEVEL = "22938f";
|
|
79
|
+
function synthesizePictureWatermark(watermark) {
|
|
80
|
+
const rId = escapeXml(watermark.imageRId);
|
|
81
|
+
return `<w:p><w:r><w:pict><v:shape id="WordPictureWatermark1" type="#_x0000_t75" style="position:absolute;margin-left:0;margin-top:0;width:${watermark.scale === void 0 ? watermark.widthPt ?? PICTURE_WATERMARK_DEFAULT_WIDTH_PT : PICTURE_WATERMARK_DEFAULT_WIDTH_PT * watermark.scale}pt;height:${watermark.scale === void 0 ? watermark.heightPt ?? PICTURE_WATERMARK_DEFAULT_HEIGHT_PT : PICTURE_WATERMARK_DEFAULT_HEIGHT_PT * watermark.scale}pt;z-index:-251658240;mso-position-horizontal:center;mso-position-horizontal-relative:margin;mso-position-vertical:center;mso-position-vertical-relative:margin"><v:imagedata r:id="${rId}" o:title=""${watermark.washout === false ? "" : ` gain="${PICTURE_WATERMARK_WASHOUT_GAIN}" blacklevel="${PICTURE_WATERMARK_WASHOUT_BLACKLEVEL}"`}/></v:shape></w:pict></w:r></w:p>`;
|
|
82
|
+
}
|
|
83
|
+
//#endregion
|
|
84
|
+
export { serializeHeaderFooter };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { document_d_exports } from "../../types/document.js";
|
|
2
|
+
|
|
3
|
+
//#region src/docx/serializer/noteSerializer.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Serialize footnotes to a complete word/footnotes.xml string.
|
|
6
|
+
*
|
|
7
|
+
* @param footnotes - Notes to serialize (the model's normal footnotes).
|
|
8
|
+
* @returns Complete footnotes.xml string.
|
|
9
|
+
*/
|
|
10
|
+
declare function serializeFootnotes(footnotes: readonly document_d_exports.Footnote[]): string;
|
|
11
|
+
/**
|
|
12
|
+
* Serialize endnotes to a complete word/endnotes.xml string.
|
|
13
|
+
*
|
|
14
|
+
* @param endnotes - Notes to serialize (the model's normal endnotes).
|
|
15
|
+
* @returns Complete endnotes.xml string.
|
|
16
|
+
*/
|
|
17
|
+
declare function serializeEndnotes(endnotes: readonly document_d_exports.Endnote[]): string;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { serializeEndnotes, serializeFootnotes };
|