@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,294 @@
|
|
|
1
|
+
import { formatDate } from "../../docx/fieldParser.js";
|
|
2
|
+
import { expectBlockSdtAttrs } from "../attrs/index.js";
|
|
3
|
+
import { ContentControlBoundError, ContentControlLockedError, ContentControlTypeError } from "../../content-controls/errors.js";
|
|
4
|
+
import { SUGGESTION_BYPASS_META } from "../plugins/suggestionMode.js";
|
|
5
|
+
//#region src/prosemirror/commands/contentControls.ts
|
|
6
|
+
function nodeMatchesFilter(node, pos, filter) {
|
|
7
|
+
if (node.type.name !== "blockSdt") return false;
|
|
8
|
+
if (filter.pmPos !== void 0 && pos !== filter.pmPos) return false;
|
|
9
|
+
const attrs = node.attrs;
|
|
10
|
+
if (filter.tag !== void 0 && attrs["tag"] !== filter.tag) return false;
|
|
11
|
+
if (filter.alias !== void 0 && attrs["alias"] !== filter.alias) return false;
|
|
12
|
+
if (filter.id !== void 0 && attrs["id"] !== filter.id) return false;
|
|
13
|
+
if (filter.sdtType !== void 0 && attrs["sdtType"] !== filter.sdtType) return false;
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
/** All blockSdt nodes in `doc` matching `filter`. Outer→inner traversal. */
|
|
17
|
+
function findBlockSdtMatches(doc, filter = {}) {
|
|
18
|
+
const matches = [];
|
|
19
|
+
doc.descendants((node, pos, _parent, index) => {
|
|
20
|
+
if (node.type.name !== "blockSdt") return true;
|
|
21
|
+
if (nodeMatchesFilter(node, pos, filter)) matches.push({
|
|
22
|
+
node,
|
|
23
|
+
pos,
|
|
24
|
+
path: [...resolvePath(doc, pos), index]
|
|
25
|
+
});
|
|
26
|
+
return true;
|
|
27
|
+
});
|
|
28
|
+
return matches;
|
|
29
|
+
}
|
|
30
|
+
/** First match or null — convenience for editor-ref callers. */
|
|
31
|
+
function findBlockSdtMatch(doc, filter) {
|
|
32
|
+
for (const match of findBlockSdtMatches(doc, filter)) return match;
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
function resolvePath(doc, pos) {
|
|
36
|
+
const $pos = doc.resolve(pos);
|
|
37
|
+
const path = [];
|
|
38
|
+
for (let depth = 1; depth <= $pos.depth; depth += 1) path.push($pos.index(depth - 1));
|
|
39
|
+
return path;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Project a `blockSdt` PM node's attrs onto the full modeled `SdtProperties`
|
|
43
|
+
* shape so the editor-ref `getContentControls` and lock-error messages
|
|
44
|
+
* surface every field downstream tooling expects (lock, placeholder,
|
|
45
|
+
* dateFormat, listItems, checked, etc.). Raw XML payloads are not exposed —
|
|
46
|
+
* those are for serializer replay, not for callers.
|
|
47
|
+
*/
|
|
48
|
+
function blockSdtAttrsToSdtProperties(node) {
|
|
49
|
+
const attrs = expectBlockSdtAttrs(node);
|
|
50
|
+
const props = { sdtType: attrs.sdtType };
|
|
51
|
+
if (attrs.alias !== void 0) props.alias = attrs.alias;
|
|
52
|
+
if (attrs.tag !== void 0) props.tag = attrs.tag;
|
|
53
|
+
if (typeof attrs.id === "number") props.id = attrs.id;
|
|
54
|
+
if (attrs.lock !== void 0) props.lock = attrs.lock;
|
|
55
|
+
if (attrs.placeholder !== void 0) props.placeholder = attrs.placeholder;
|
|
56
|
+
if (attrs.showingPlaceholder !== void 0) props.showingPlaceholder = attrs.showingPlaceholder;
|
|
57
|
+
if (attrs.dateFormat !== void 0) props.dateFormat = attrs.dateFormat;
|
|
58
|
+
if (attrs.dateValueISO !== void 0) props.dateValueISO = attrs.dateValueISO;
|
|
59
|
+
if (attrs.listItems) {
|
|
60
|
+
const parsed = parseListItemsAttr(attrs.listItems);
|
|
61
|
+
if (parsed) props.listItems = parsed;
|
|
62
|
+
}
|
|
63
|
+
if (typeof attrs.dropdownLastValue === "string") props.dropdownLastValue = attrs.dropdownLastValue;
|
|
64
|
+
if (typeof attrs.checked === "boolean") props.checked = attrs.checked;
|
|
65
|
+
return props;
|
|
66
|
+
}
|
|
67
|
+
function parseListItemsAttr(raw) {
|
|
68
|
+
try {
|
|
69
|
+
const parsed = JSON.parse(raw);
|
|
70
|
+
if (!Array.isArray(parsed)) return null;
|
|
71
|
+
const items = [];
|
|
72
|
+
for (const entry of parsed) if (entry !== null && typeof entry === "object" && "displayText" in entry && "value" in entry && typeof entry.displayText === "string" && typeof entry.value === "string") items.push(entry);
|
|
73
|
+
return items.length > 0 ? items : null;
|
|
74
|
+
} catch {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function attrsToProperties(node) {
|
|
79
|
+
const attrs = node.attrs;
|
|
80
|
+
const props = { sdtType: String(attrs["sdtType"] ?? "richText") };
|
|
81
|
+
if (attrs["alias"]) props.alias = String(attrs["alias"]);
|
|
82
|
+
if (attrs["tag"]) props.tag = String(attrs["tag"]);
|
|
83
|
+
if (typeof attrs["id"] === "number") props.id = attrs["id"];
|
|
84
|
+
return props;
|
|
85
|
+
}
|
|
86
|
+
function throwLockedNode(node, lock) {
|
|
87
|
+
const props = attrsToProperties(node);
|
|
88
|
+
throw new ContentControlLockedError({
|
|
89
|
+
message: `Control "${props.tag ?? props.alias ?? "(unnamed)"}" has w:lock=${lock}.`,
|
|
90
|
+
lock,
|
|
91
|
+
...props.tag !== void 0 ? { tag: props.tag } : {},
|
|
92
|
+
...props.alias !== void 0 ? { alias: props.alias } : {}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Per OOXML §17.5.2.16: `contentLocked` and `sdtContentLocked` block
|
|
97
|
+
* content edits; `sdtLocked` does NOT (it only forbids container
|
|
98
|
+
* removal). Mirrors the headless `ensureContentNotLocked` helper.
|
|
99
|
+
*/
|
|
100
|
+
function ensureContentNotLocked(node, options) {
|
|
101
|
+
if (options.force) return;
|
|
102
|
+
const lock = node.attrs["lock"];
|
|
103
|
+
if (lock === "contentLocked" || lock === "sdtContentLocked") throwLockedNode(node, lock);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Per OOXML §17.5.2.16: `sdtLocked` and `sdtContentLocked` block container
|
|
107
|
+
* removal; `contentLocked` does NOT (it only forbids content edits).
|
|
108
|
+
*/
|
|
109
|
+
function ensureSdtNotLocked(node, options) {
|
|
110
|
+
if (options.force) return;
|
|
111
|
+
const lock = node.attrs["lock"];
|
|
112
|
+
if (lock === "sdtLocked" || lock === "sdtContentLocked") throwLockedNode(node, lock);
|
|
113
|
+
}
|
|
114
|
+
const DATA_BINDING_RE = /<\w+:dataBinding\b(?<attrs>[^>]*)\/?>/iu;
|
|
115
|
+
/**
|
|
116
|
+
* Refuse content mutations on bound SDTs unless force; on force, return
|
|
117
|
+
* the stripped rawPropertiesXml so the caller can persist it on the new
|
|
118
|
+
* node attrs. Mirrors the headless `ensureContentNotBound` helper.
|
|
119
|
+
*/
|
|
120
|
+
function ensureContentNotBound(node, options) {
|
|
121
|
+
const raw = node.attrs["rawPropertiesXml"];
|
|
122
|
+
if (typeof raw !== "string") return { strippedRawPropertiesXml: void 0 };
|
|
123
|
+
const match = DATA_BINDING_RE.exec(raw);
|
|
124
|
+
if (!match) return { strippedRawPropertiesXml: void 0 };
|
|
125
|
+
if (!options.force) {
|
|
126
|
+
const attrs = match.groups?.["attrs"] ?? "";
|
|
127
|
+
const xpathMatch = /\bxpath="(?<xpath>[^"]*)"/iu.exec(attrs);
|
|
128
|
+
const storeMatch = /\bstoreItemID="(?<storeItemID>[^"]*)"/iu.exec(attrs);
|
|
129
|
+
const props = attrsToProperties(node);
|
|
130
|
+
throw new ContentControlBoundError({
|
|
131
|
+
message: `Control "${props.tag ?? props.alias ?? "(unnamed)"}" is bound to ${xpathMatch?.groups?.["xpath"] ?? "(unknown xpath)"}. Word regenerates the body from the bound XML on open; pass { force: true } to strip the binding inline, or remove it explicitly before writing.`,
|
|
132
|
+
xpath: xpathMatch?.groups?.["xpath"] ?? "",
|
|
133
|
+
...storeMatch?.groups?.["storeItemID"] !== void 0 ? { storeItemID: storeMatch.groups["storeItemID"] } : {},
|
|
134
|
+
...props.tag !== void 0 ? { tag: props.tag } : {},
|
|
135
|
+
...props.alias !== void 0 ? { alias: props.alias } : {}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return { strippedRawPropertiesXml: raw.replaceAll(/<\w+:dataBinding\b[^>]*\/?>(?:[\s\S]*?<\/\w+:dataBinding>)?/giu, "") };
|
|
139
|
+
}
|
|
140
|
+
function paragraphFromText(schema, text) {
|
|
141
|
+
if (text.length === 0) return schema.node("paragraph", {}, []);
|
|
142
|
+
return schema.node("paragraph", {}, [schema.text(text)]);
|
|
143
|
+
}
|
|
144
|
+
function replaceBlockSdtChildren(state, match, children, propertyOverrides = {}) {
|
|
145
|
+
const next = state.schema.node("blockSdt", {
|
|
146
|
+
...match.node.attrs,
|
|
147
|
+
showingPlaceholder: false,
|
|
148
|
+
...propertyOverrides
|
|
149
|
+
}, children.length === 0 ? [paragraphFromText(state.schema, "")] : children);
|
|
150
|
+
return state.tr.replaceWith(match.pos, match.pos + match.node.nodeSize, next).setMeta(SUGGESTION_BYPASS_META, true);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Replace a control's children with plain text (one paragraph) or
|
|
154
|
+
* pre-built PM blocks. Returns null when no match is present.
|
|
155
|
+
*/
|
|
156
|
+
function setContentControlContentTr(state, filter, input, options = {}) {
|
|
157
|
+
const match = findBlockSdtMatch(state.doc, filter);
|
|
158
|
+
if (!match) return null;
|
|
159
|
+
ensureContentNotLocked(match.node, options);
|
|
160
|
+
const { strippedRawPropertiesXml } = ensureContentNotBound(match.node, options);
|
|
161
|
+
if (typeof input !== "string") throw new ContentControlTypeError({
|
|
162
|
+
message: "Block-content fill must go through `setContentControlContentBlocksTr` (avoids a schema/plugin import cycle); pass a string here.",
|
|
163
|
+
sdtType: match.node.attrs["sdtType"] ?? "richText",
|
|
164
|
+
reason: "PM-direct path takes string input only"
|
|
165
|
+
});
|
|
166
|
+
return replaceBlockSdtChildren(state, match, [paragraphFromText(state.schema, input)], strippedRawPropertiesXml !== void 0 ? { rawPropertiesXml: strippedRawPropertiesXml } : {});
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Internal helper for the block-content fill variant. Lives in this module
|
|
170
|
+
* so callers reuse the same lock-check and `replaceWith` shape; the
|
|
171
|
+
* conversion-aware `setContentControlContentBlocksTr` in
|
|
172
|
+
* `./contentControlsBlockFill.ts` wraps it.
|
|
173
|
+
*/
|
|
174
|
+
function replaceBlockSdtChildrenForFill(state, filter, children, options = {}) {
|
|
175
|
+
const match = findBlockSdtMatch(state.doc, filter);
|
|
176
|
+
if (!match) return null;
|
|
177
|
+
ensureContentNotLocked(match.node, options);
|
|
178
|
+
const { strippedRawPropertiesXml } = ensureContentNotBound(match.node, options);
|
|
179
|
+
return replaceBlockSdtChildren(state, match, children, strippedRawPropertiesXml !== void 0 ? { rawPropertiesXml: strippedRawPropertiesXml } : {});
|
|
180
|
+
}
|
|
181
|
+
function setContentControlValueTr(state, filter, input, options = {}) {
|
|
182
|
+
const match = findBlockSdtMatch(state.doc, filter);
|
|
183
|
+
if (!match) return null;
|
|
184
|
+
ensureContentNotLocked(match.node, options);
|
|
185
|
+
const { strippedRawPropertiesXml } = ensureContentNotBound(match.node, options);
|
|
186
|
+
const bindingOverride = strippedRawPropertiesXml !== void 0 ? { rawPropertiesXml: strippedRawPropertiesXml } : {};
|
|
187
|
+
const sdtType = match.node.attrs["sdtType"];
|
|
188
|
+
if (input.kind === "dropdown") {
|
|
189
|
+
if (sdtType !== "dropdown" && sdtType !== "comboBox") throw new ContentControlTypeError({
|
|
190
|
+
message: `Cannot set dropdown value on a ${sdtType} control.`,
|
|
191
|
+
sdtType,
|
|
192
|
+
reason: "kind=dropdown requires sdtType=dropdown|comboBox"
|
|
193
|
+
});
|
|
194
|
+
const listItemsAttr = match.node.attrs["listItems"];
|
|
195
|
+
let display = input.value;
|
|
196
|
+
if (typeof listItemsAttr === "string" && listItemsAttr) {
|
|
197
|
+
let items = null;
|
|
198
|
+
try {
|
|
199
|
+
const parsed = JSON.parse(listItemsAttr);
|
|
200
|
+
if (Array.isArray(parsed)) items = parsed;
|
|
201
|
+
} catch {
|
|
202
|
+
items = null;
|
|
203
|
+
}
|
|
204
|
+
const item = items?.find((i) => i.value === input.value);
|
|
205
|
+
if (!item && !options.force && items !== null) throw new ContentControlTypeError({
|
|
206
|
+
message: `Value "${input.value}" not in the control's list items.`,
|
|
207
|
+
sdtType,
|
|
208
|
+
reason: "value not in listItems"
|
|
209
|
+
});
|
|
210
|
+
if (item) display = item.displayText;
|
|
211
|
+
}
|
|
212
|
+
return replaceBlockSdtChildren(state, match, [paragraphFromText(state.schema, display)], {
|
|
213
|
+
dropdownLastValue: input.value,
|
|
214
|
+
...bindingOverride
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
if (input.kind === "checkbox") {
|
|
218
|
+
if (sdtType !== "checkbox") throw new ContentControlTypeError({
|
|
219
|
+
message: `Cannot toggle checkbox on a ${sdtType} control.`,
|
|
220
|
+
sdtType,
|
|
221
|
+
reason: "kind=checkbox requires sdtType=checkbox"
|
|
222
|
+
});
|
|
223
|
+
const glyph = input.checked ? "☒" : "☐";
|
|
224
|
+
return replaceBlockSdtChildren(state, match, [paragraphFromText(state.schema, glyph)], {
|
|
225
|
+
checked: input.checked,
|
|
226
|
+
...bindingOverride
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
if (sdtType !== "date") throw new ContentControlTypeError({
|
|
230
|
+
message: `Cannot set date on a ${sdtType} control.`,
|
|
231
|
+
sdtType,
|
|
232
|
+
reason: "kind=date requires sdtType=date"
|
|
233
|
+
});
|
|
234
|
+
const dateFormatAttr = match.node.attrs["dateFormat"];
|
|
235
|
+
const display = formatDateForBody(input.date, typeof dateFormatAttr === "string" ? dateFormatAttr : void 0);
|
|
236
|
+
return replaceBlockSdtChildren(state, match, [paragraphFromText(state.schema, display)], {
|
|
237
|
+
dateValueISO: input.date,
|
|
238
|
+
...bindingOverride
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
function formatDateForBody(isoDate, dateFormat) {
|
|
242
|
+
if (!dateFormat) return isoDate;
|
|
243
|
+
const parsed = parseSdtDate(isoDate);
|
|
244
|
+
if (!parsed) return isoDate;
|
|
245
|
+
return formatDate(parsed, dateFormat);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* See `formatDateForSdtBody` in the headless helpers for the rationale.
|
|
249
|
+
* Supports date-only (`YYYY-MM-DD`) and date+time
|
|
250
|
+
* (`YYYY-MM-DDTHH:mm[:ss]`) inputs, building a local-time Date so
|
|
251
|
+
* `formatDate`'s accessors return the picked wall-clock components
|
|
252
|
+
* regardless of TZ.
|
|
253
|
+
*/
|
|
254
|
+
const SDT_DATE_RE = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})(?:[Tt](?<hours>\d{2}):(?<minutes>\d{2})(?::(?<seconds>\d{2})(?:\.\d+)?)?)?(?:[Zz]|[+-]\d{2}:?\d{2})?$/u;
|
|
255
|
+
function parseSdtDate(iso) {
|
|
256
|
+
const match = SDT_DATE_RE.exec(iso);
|
|
257
|
+
if (match) {
|
|
258
|
+
const groups = match.groups;
|
|
259
|
+
const year = Number(groups["year"]);
|
|
260
|
+
const month = Number(groups["month"]);
|
|
261
|
+
const day = Number(groups["day"]);
|
|
262
|
+
const hours = groups["hours"] ? Number(groups["hours"]) : 0;
|
|
263
|
+
const minutes = groups["minutes"] ? Number(groups["minutes"]) : 0;
|
|
264
|
+
const seconds = groups["seconds"] ? Number(groups["seconds"]) : 0;
|
|
265
|
+
const candidate = new Date(year, month - 1, day, hours, minutes, seconds);
|
|
266
|
+
if (candidate.getFullYear() !== year || candidate.getMonth() !== month - 1 || candidate.getDate() !== day || candidate.getHours() !== hours || candidate.getMinutes() !== minutes || candidate.getSeconds() !== seconds) return null;
|
|
267
|
+
return candidate;
|
|
268
|
+
}
|
|
269
|
+
const parsed = new Date(iso);
|
|
270
|
+
return Number.isNaN(parsed.getTime()) ? null : parsed;
|
|
271
|
+
}
|
|
272
|
+
function isRepeatingSection(node) {
|
|
273
|
+
const raw = node.attrs["rawPropertiesXml"];
|
|
274
|
+
return typeof raw === "string" && /<\w+:repeatingSection\b/u.test(raw);
|
|
275
|
+
}
|
|
276
|
+
function removeContentControlTr(state, filter, options = {}) {
|
|
277
|
+
const match = findBlockSdtMatch(state.doc, filter);
|
|
278
|
+
if (!match) return null;
|
|
279
|
+
ensureSdtNotLocked(match.node, options);
|
|
280
|
+
if (options.keepContent) {
|
|
281
|
+
if (isRepeatingSection(match.node) && !options.force) throw new ContentControlTypeError({
|
|
282
|
+
message: "Refusing to unwrap a w15:repeatingSection — would orphan its w15 row items.",
|
|
283
|
+
sdtType: match.node.attrs["sdtType"] ?? "richText",
|
|
284
|
+
reason: "repeatingSection unwrap orphans items"
|
|
285
|
+
});
|
|
286
|
+
const children = [];
|
|
287
|
+
for (let i = 0; i < match.node.childCount; i += 1) children.push(match.node.child(i));
|
|
288
|
+
return state.tr.replaceWith(match.pos, match.pos + match.node.nodeSize, children).setMeta(SUGGESTION_BYPASS_META, true);
|
|
289
|
+
}
|
|
290
|
+
if (state.doc.resolve(match.pos).parent.childCount === 1) return state.tr.replaceWith(match.pos, match.pos + match.node.nodeSize, paragraphFromText(state.schema, "")).setMeta(SUGGESTION_BYPASS_META, true);
|
|
291
|
+
return state.tr.delete(match.pos, match.pos + match.node.nodeSize).setMeta(SUGGESTION_BYPASS_META, true);
|
|
292
|
+
}
|
|
293
|
+
//#endregion
|
|
294
|
+
export { blockSdtAttrsToSdtProperties, findBlockSdtMatch, findBlockSdtMatches, removeContentControlTr, replaceBlockSdtChildrenForFill, setContentControlContentTr, setContentControlValueTr };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { document_d_exports } from "../../types/document.js";
|
|
2
|
+
import { ContentControlFilter } from "../../content-controls/findContentControls.js";
|
|
3
|
+
import { EditorState, Transaction } from "prosemirror-state";
|
|
4
|
+
|
|
5
|
+
//#region src/prosemirror/commands/contentControlsBlockFill.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Replace the children of the content control matching `filter` with the
|
|
8
|
+
* PM-converted form of `blocks`. Locked controls throw
|
|
9
|
+
* `ContentControlLockedError` unless `{ force: true }` is passed.
|
|
10
|
+
*/
|
|
11
|
+
declare function setContentControlContentBlocksTr(state: EditorState, filter: ContentControlFilter, blocks: document_d_exports.BlockContent[], options?: {
|
|
12
|
+
force?: boolean;
|
|
13
|
+
}): Transaction | null;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { setContentControlContentBlocksTr };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { replaceBlockSdtChildrenForFill } from "./contentControls.js";
|
|
2
|
+
import { headerFooterToProseDoc } from "../conversion/toProseDoc.js";
|
|
3
|
+
//#region src/prosemirror/commands/contentControlsBlockFill.ts
|
|
4
|
+
function blockContentToPMChildren(blocks) {
|
|
5
|
+
const pmDoc = headerFooterToProseDoc(blocks);
|
|
6
|
+
const out = [];
|
|
7
|
+
for (let i = 0; i < pmDoc.childCount; i += 1) out.push(pmDoc.child(i));
|
|
8
|
+
return out;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Replace the children of the content control matching `filter` with the
|
|
12
|
+
* PM-converted form of `blocks`. Locked controls throw
|
|
13
|
+
* `ContentControlLockedError` unless `{ force: true }` is passed.
|
|
14
|
+
*/
|
|
15
|
+
function setContentControlContentBlocksTr(state, filter, blocks, options = {}) {
|
|
16
|
+
return replaceBlockSdtChildrenForFill(state, filter, blockContentToPMChildren(blocks), options);
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { setContentControlContentBlocksTr };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Command, EditorState } from "prosemirror-state";
|
|
2
|
+
import { Mark } from "prosemirror-model";
|
|
3
|
+
|
|
4
|
+
//#region src/prosemirror/commands/formatPainter.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Character-formatting marks the painter copies. Structural marks — comments,
|
|
7
|
+
* hyperlinks, tracked changes (insertion/deletion), footnote references — are
|
|
8
|
+
* deliberately excluded so painting never moves an anchor, link, or revision.
|
|
9
|
+
* `rtl` (run direction) and `hidden` are excluded too: painting them could flip
|
|
10
|
+
* text direction or hide content, which is surprising for a formatting brush.
|
|
11
|
+
*/
|
|
12
|
+
declare const PAINTABLE_MARK_NAMES: ReadonlySet<string>;
|
|
13
|
+
/**
|
|
14
|
+
* Capture the paintable character marks active over the current selection.
|
|
15
|
+
* Returns the marks (with their attrs) to hand to `applyFormatMarks`. An empty
|
|
16
|
+
* selection reads the stored/insertion marks; a range reads its leading run.
|
|
17
|
+
* Returns an empty array when the source carries no direct character formatting.
|
|
18
|
+
*/
|
|
19
|
+
declare function captureFormatMarks(state: EditorState): Mark[];
|
|
20
|
+
/**
|
|
21
|
+
* Apply captured marks onto the current selection's range: clear every paintable
|
|
22
|
+
* mark type first (replace, not merge — so painting Georgia-12-bold onto
|
|
23
|
+
* Arial-10 leaves only Georgia-12-bold), then lay down the captured marks.
|
|
24
|
+
*
|
|
25
|
+
* Best-effort: a collapsed selection or an empty capture is a no-op (returns
|
|
26
|
+
* false so a keymap binding stays unclaimed and the keystroke passes through).
|
|
27
|
+
* Never throws.
|
|
28
|
+
*/
|
|
29
|
+
declare function applyFormatMarks(marks: readonly Mark[]): Command;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { PAINTABLE_MARK_NAMES, applyFormatMarks, captureFormatMarks };
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
//#region src/prosemirror/commands/formatPainter.ts
|
|
2
|
+
/**
|
|
3
|
+
* Character-formatting marks the painter copies. Structural marks — comments,
|
|
4
|
+
* hyperlinks, tracked changes (insertion/deletion), footnote references — are
|
|
5
|
+
* deliberately excluded so painting never moves an anchor, link, or revision.
|
|
6
|
+
* `rtl` (run direction) and `hidden` are excluded too: painting them could flip
|
|
7
|
+
* text direction or hide content, which is surprising for a formatting brush.
|
|
8
|
+
*/
|
|
9
|
+
const PAINTABLE_MARK_NAMES = /* @__PURE__ */ new Set([
|
|
10
|
+
"bold",
|
|
11
|
+
"italic",
|
|
12
|
+
"underline",
|
|
13
|
+
"strike",
|
|
14
|
+
"textColor",
|
|
15
|
+
"highlight",
|
|
16
|
+
"fontSize",
|
|
17
|
+
"fontFamily",
|
|
18
|
+
"superscript",
|
|
19
|
+
"subscript",
|
|
20
|
+
"allCaps",
|
|
21
|
+
"smallCaps",
|
|
22
|
+
"characterSpacing",
|
|
23
|
+
"runShading",
|
|
24
|
+
"runFormattingOverride",
|
|
25
|
+
"emboss",
|
|
26
|
+
"imprint",
|
|
27
|
+
"textShadow",
|
|
28
|
+
"emphasisMark",
|
|
29
|
+
"textOutline",
|
|
30
|
+
"textEffect",
|
|
31
|
+
"characterStyle"
|
|
32
|
+
]);
|
|
33
|
+
/**
|
|
34
|
+
* Formatting that must never be painted — whether it arrives as its own mark or
|
|
35
|
+
* is smuggled in as a `runFormattingOverride` attr (e.g. `rtl: false`,
|
|
36
|
+
* `hidden: false`). Single source of truth: it gates both the mark-type
|
|
37
|
+
* exclusion and the override-attr filtering below, so an exclusion can't leak
|
|
38
|
+
* back in through the override mark as new override attrs are added.
|
|
39
|
+
*/
|
|
40
|
+
const NON_PAINTABLE_FORMATS = /* @__PURE__ */ new Set(["rtl", "hidden"]);
|
|
41
|
+
/** A mark is paintable when it is in the allowlist and not a hard exclusion. */
|
|
42
|
+
function isPaintableMark(mark) {
|
|
43
|
+
const name = mark.type.name;
|
|
44
|
+
return PAINTABLE_MARK_NAMES.has(name) && !NON_PAINTABLE_FORMATS.has(name);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Strip excluded overrides (`rtl`/`hidden`) from a `runFormattingOverride` mark
|
|
48
|
+
* so they cannot be re-smuggled past the mark-type exclusion. Returns the mark
|
|
49
|
+
* unchanged when it carries no excluded attr, a trimmed mark when it carries a
|
|
50
|
+
* mix, or null when only excluded overrides remain (nothing paintable left).
|
|
51
|
+
*/
|
|
52
|
+
function sanitizeOverrideMark(mark) {
|
|
53
|
+
const kept = {};
|
|
54
|
+
let removedExcluded = false;
|
|
55
|
+
for (const [key, value] of Object.entries(mark.attrs)) {
|
|
56
|
+
if (value === null || value === void 0) continue;
|
|
57
|
+
if (NON_PAINTABLE_FORMATS.has(key)) {
|
|
58
|
+
removedExcluded = true;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
kept[key] = value;
|
|
62
|
+
}
|
|
63
|
+
if (!removedExcluded) return mark;
|
|
64
|
+
if (Object.keys(kept).length === 0) return null;
|
|
65
|
+
return mark.type.create(kept);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Marks of the first text node inside [from, to). A word processor's format
|
|
69
|
+
* brush copies from the start of the source selection, so a mixed selection
|
|
70
|
+
* yields the formatting of its leading run.
|
|
71
|
+
*/
|
|
72
|
+
function firstTextMarks(state, from, to) {
|
|
73
|
+
let marks = null;
|
|
74
|
+
state.doc.nodesBetween(from, to, (node) => {
|
|
75
|
+
if (marks) return false;
|
|
76
|
+
if (node.isText) {
|
|
77
|
+
marks = node.marks;
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
});
|
|
82
|
+
return marks ?? [];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Capture the paintable character marks active over the current selection.
|
|
86
|
+
* Returns the marks (with their attrs) to hand to `applyFormatMarks`. An empty
|
|
87
|
+
* selection reads the stored/insertion marks; a range reads its leading run.
|
|
88
|
+
* Returns an empty array when the source carries no direct character formatting.
|
|
89
|
+
*/
|
|
90
|
+
function captureFormatMarks(state) {
|
|
91
|
+
const { empty, $from, from, to } = state.selection;
|
|
92
|
+
const source = empty ? state.storedMarks ?? $from.marks() : firstTextMarks(state, from, to);
|
|
93
|
+
const captured = [];
|
|
94
|
+
for (const mark of source) {
|
|
95
|
+
if (!isPaintableMark(mark)) continue;
|
|
96
|
+
if (mark.type.name === "runFormattingOverride") {
|
|
97
|
+
const sanitized = sanitizeOverrideMark(mark);
|
|
98
|
+
if (sanitized) captured.push(sanitized);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
captured.push(mark);
|
|
102
|
+
}
|
|
103
|
+
return captured;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Apply captured marks onto the current selection's range: clear every paintable
|
|
107
|
+
* mark type first (replace, not merge — so painting Georgia-12-bold onto
|
|
108
|
+
* Arial-10 leaves only Georgia-12-bold), then lay down the captured marks.
|
|
109
|
+
*
|
|
110
|
+
* Best-effort: a collapsed selection or an empty capture is a no-op (returns
|
|
111
|
+
* false so a keymap binding stays unclaimed and the keystroke passes through).
|
|
112
|
+
* Never throws.
|
|
113
|
+
*/
|
|
114
|
+
function applyFormatMarks(marks) {
|
|
115
|
+
return (state, dispatch) => {
|
|
116
|
+
const { from, to, empty } = state.selection;
|
|
117
|
+
if (empty || marks.length === 0) return false;
|
|
118
|
+
if (!dispatch) return true;
|
|
119
|
+
let tr = state.tr;
|
|
120
|
+
for (const name of PAINTABLE_MARK_NAMES) {
|
|
121
|
+
const markType = state.schema.marks[name];
|
|
122
|
+
if (markType) tr = tr.removeMark(from, to, markType);
|
|
123
|
+
}
|
|
124
|
+
for (const mark of marks) tr = tr.addMark(from, to, mark);
|
|
125
|
+
dispatch(tr.scrollIntoView());
|
|
126
|
+
return true;
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//#endregion
|
|
130
|
+
export { PAINTABLE_MARK_NAMES, applyFormatMarks, captureFormatMarks };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { document_d_exports } from "../../types/document.js";
|
|
2
|
+
import { TextColorAttrs } from "../schema/marks.js";
|
|
3
|
+
import { clearFormatting, createRemoveMarkCommand, createSetMarkCommand, getMarkAttr, isMarkActive } from "../extensions/marks/markUtils.js";
|
|
4
|
+
import { getHyperlinkAttrs, getSelectedText, isHyperlinkActive } from "../extensions/marks/HyperlinkExtension.js";
|
|
5
|
+
import { Command } from "prosemirror-state";
|
|
6
|
+
import { Mark } from "prosemirror-model";
|
|
7
|
+
|
|
8
|
+
//#region src/prosemirror/commands/formatting.d.ts
|
|
9
|
+
/**
|
|
10
|
+
* textFormattingToMarks — wraps markUtils version to use singleton schema
|
|
11
|
+
*/
|
|
12
|
+
declare function textFormattingToMarks(formatting: document_d_exports.TextFormatting): Mark[];
|
|
13
|
+
declare const toggleBold: Command;
|
|
14
|
+
declare const toggleItalic: Command;
|
|
15
|
+
declare const toggleUnderline: Command;
|
|
16
|
+
declare const toggleStrike: Command;
|
|
17
|
+
declare const toggleSuperscript: Command;
|
|
18
|
+
declare const toggleSubscript: Command;
|
|
19
|
+
declare function setTextColor(attrs: TextColorAttrs): Command;
|
|
20
|
+
declare const clearTextColor: Command;
|
|
21
|
+
declare function setHighlight(color: string): Command;
|
|
22
|
+
declare const clearHighlight: Command;
|
|
23
|
+
declare function setFontSize(size: number): Command;
|
|
24
|
+
declare const clearFontSize: Command;
|
|
25
|
+
declare function setFontFamily(fontName: string): Command;
|
|
26
|
+
declare const clearFontFamily: Command;
|
|
27
|
+
declare function setUnderlineStyle(style: string, color?: TextColorAttrs): Command;
|
|
28
|
+
declare function setHyperlink(href: string, tooltip?: string): Command;
|
|
29
|
+
declare const removeHyperlink: Command;
|
|
30
|
+
declare function insertHyperlink(text: string, href: string, tooltip?: string): Command;
|
|
31
|
+
//#endregion
|
|
32
|
+
export { clearFontFamily, clearFontSize, clearFormatting, clearHighlight, clearTextColor, createRemoveMarkCommand, createSetMarkCommand, getHyperlinkAttrs, getMarkAttr, getSelectedText, insertHyperlink, isHyperlinkActive, isMarkActive, removeHyperlink, setFontFamily, setFontSize, setHighlight, setHyperlink, setTextColor, setUnderlineStyle, textFormattingToMarks, toggleBold, toggleItalic, toggleStrike, toggleSubscript, toggleSuperscript, toggleUnderline };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { clearFormatting, createRemoveMarkCommand, createSetMarkCommand, getMarkAttr, isMarkActive, textFormattingToMarks as textFormattingToMarks$1 } from "../extensions/marks/markUtils.js";
|
|
2
|
+
import { getHyperlinkAttrs, getSelectedText, isHyperlinkActive } from "../extensions/marks/HyperlinkExtension.js";
|
|
3
|
+
import { schema, singletonManager } from "../schema/index.js";
|
|
4
|
+
//#region src/prosemirror/commands/formatting.ts
|
|
5
|
+
/**
|
|
6
|
+
* textFormattingToMarks — wraps markUtils version to use singleton schema
|
|
7
|
+
*/
|
|
8
|
+
function textFormattingToMarks(formatting) {
|
|
9
|
+
return textFormattingToMarks$1(formatting, schema);
|
|
10
|
+
}
|
|
11
|
+
const cmds = singletonManager.getCommands();
|
|
12
|
+
const toggleBold = cmds["toggleBold"]();
|
|
13
|
+
const toggleItalic = cmds["toggleItalic"]();
|
|
14
|
+
const toggleUnderline = cmds["toggleUnderline"]();
|
|
15
|
+
const toggleStrike = cmds["toggleStrike"]();
|
|
16
|
+
const toggleSuperscript = cmds["toggleSuperscript"]();
|
|
17
|
+
const toggleSubscript = cmds["toggleSubscript"]();
|
|
18
|
+
function setTextColor(attrs) {
|
|
19
|
+
return cmds["setTextColor"](attrs);
|
|
20
|
+
}
|
|
21
|
+
const clearTextColor = cmds["clearTextColor"]();
|
|
22
|
+
function setHighlight(color) {
|
|
23
|
+
return cmds["setHighlight"](color);
|
|
24
|
+
}
|
|
25
|
+
const clearHighlight = cmds["clearHighlight"]();
|
|
26
|
+
function setFontSize(size) {
|
|
27
|
+
return cmds["setFontSize"](size);
|
|
28
|
+
}
|
|
29
|
+
const clearFontSize = cmds["clearFontSize"]();
|
|
30
|
+
function setFontFamily(fontName) {
|
|
31
|
+
return cmds["setFontFamily"](fontName);
|
|
32
|
+
}
|
|
33
|
+
const clearFontFamily = cmds["clearFontFamily"]();
|
|
34
|
+
function setUnderlineStyle(style, color) {
|
|
35
|
+
return cmds["setUnderlineStyle"](style, color);
|
|
36
|
+
}
|
|
37
|
+
function setHyperlink(href, tooltip) {
|
|
38
|
+
return cmds["setHyperlink"](href, tooltip);
|
|
39
|
+
}
|
|
40
|
+
const removeHyperlink = cmds["removeHyperlink"]();
|
|
41
|
+
function insertHyperlink(text, href, tooltip) {
|
|
42
|
+
return cmds["insertHyperlink"](text, href, tooltip);
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
export { clearFontFamily, clearFontSize, clearFormatting, clearHighlight, clearTextColor, createRemoveMarkCommand, createSetMarkCommand, getHyperlinkAttrs, getMarkAttr, getSelectedText, insertHyperlink, isHyperlinkActive, isMarkActive, removeHyperlink, setFontFamily, setFontSize, setHighlight, setHyperlink, setTextColor, setUnderlineStyle, textFormattingToMarks, toggleBold, toggleItalic, toggleStrike, toggleSubscript, toggleSuperscript, toggleUnderline };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { EditorView } from "prosemirror-view";
|
|
2
|
+
|
|
3
|
+
//#region src/prosemirror/commands/hyperlink.d.ts
|
|
4
|
+
type EditHyperlinkInput = {
|
|
5
|
+
displayText: string;
|
|
6
|
+
href: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Replace the text and href of the hyperlink at the cursor.
|
|
10
|
+
*
|
|
11
|
+
* Returns whether the adapter should close the popup and refocus the editor:
|
|
12
|
+
* true after a successful edit and when the schema has no hyperlink behaviour
|
|
13
|
+
* to act on at the cursor; false only when a hyperlink mark is present but no
|
|
14
|
+
* contiguous range contains the cursor (the original's silent bail).
|
|
15
|
+
*/
|
|
16
|
+
declare const editHyperlinkAtCursor: (view: EditorView, {
|
|
17
|
+
displayText,
|
|
18
|
+
href
|
|
19
|
+
}: EditHyperlinkInput) => boolean;
|
|
20
|
+
type RemoveHyperlinkInput = {
|
|
21
|
+
/** href from the popup, used as a fallback when the cursor reports no mark. */popupHref: string | undefined;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Remove the hyperlink mark from the contiguous run at the cursor. Returns
|
|
25
|
+
* whether a link was actually removed (so the adapter can toast + refocus).
|
|
26
|
+
*/
|
|
27
|
+
declare const removeHyperlinkAtCursor: (view: EditorView, {
|
|
28
|
+
popupHref
|
|
29
|
+
}: RemoveHyperlinkInput) => boolean;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { EditHyperlinkInput, RemoveHyperlinkInput, editHyperlinkAtCursor, removeHyperlinkAtCursor };
|