@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,188 @@
|
|
|
1
|
+
import { createExtension } from "../create.js";
|
|
2
|
+
import { Plugin, PluginKey } from "prosemirror-state";
|
|
3
|
+
import { AddMarkStep, AddNodeMarkStep, RemoveMarkStep, RemoveNodeMarkStep } from "prosemirror-transform";
|
|
4
|
+
//#region src/prosemirror/extensions/features/ParagraphChangeTrackerExtension.ts
|
|
5
|
+
/**
|
|
6
|
+
* Paragraph Change Tracker Extension
|
|
7
|
+
*
|
|
8
|
+
* Watches ProseMirror transactions and records which paragraph IDs (paraId)
|
|
9
|
+
* were modified. Also detects structural changes (paragraphs added/deleted).
|
|
10
|
+
* Used by the selective save system to patch only changed paragraphs in document.xml.
|
|
11
|
+
*/
|
|
12
|
+
const paragraphChangeTrackerKey = new PluginKey("paragraphChangeTracker");
|
|
13
|
+
const CLEAR_META = "clear";
|
|
14
|
+
const IGNORE_META = "ignore";
|
|
15
|
+
/**
|
|
16
|
+
* Count paragraph nodes in a ProseMirror document
|
|
17
|
+
*/
|
|
18
|
+
function countParagraphs(doc) {
|
|
19
|
+
let count = 0;
|
|
20
|
+
doc.descendants((node) => {
|
|
21
|
+
if (node.type.name === "paragraph") count++;
|
|
22
|
+
});
|
|
23
|
+
return count;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Collect paraIds of all paragraphs that overlap with the given range
|
|
27
|
+
*/
|
|
28
|
+
function collectAffectedParaIds(doc, from, to) {
|
|
29
|
+
const ids = /* @__PURE__ */ new Set();
|
|
30
|
+
let hasUntracked = false;
|
|
31
|
+
doc.nodesBetween(from, to, (node) => {
|
|
32
|
+
if (node.type.name === "paragraph") {
|
|
33
|
+
const paraId = node.attrs["paraId"];
|
|
34
|
+
if (paraId) ids.add(paraId);
|
|
35
|
+
else hasUntracked = true;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
ids,
|
|
40
|
+
hasUntracked
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* AddMarkStep / RemoveMarkStep inherit Step.getMap() → StepMap.empty, so we use
|
|
45
|
+
* their from/to to find affected paragraphs.
|
|
46
|
+
* Node mark steps use a single position before the target node.
|
|
47
|
+
*/
|
|
48
|
+
function collectAffectedParaIdsFromMarkLikeStep(doc, from, to) {
|
|
49
|
+
const lo = Math.min(from, to);
|
|
50
|
+
const hi = Math.max(from, to);
|
|
51
|
+
const primary = collectAffectedParaIds(doc, lo, hi > lo ? hi : lo + 1);
|
|
52
|
+
if (primary.ids.size > 0 || primary.hasUntracked) return primary;
|
|
53
|
+
try {
|
|
54
|
+
const $p = doc.resolve(lo);
|
|
55
|
+
for (let d = $p.depth; d >= 0; d--) {
|
|
56
|
+
const n = $p.node(d);
|
|
57
|
+
if (n.type.name === "paragraph") {
|
|
58
|
+
const paraId = n.attrs["paraId"];
|
|
59
|
+
if (paraId) return {
|
|
60
|
+
ids: /* @__PURE__ */ new Set([paraId]),
|
|
61
|
+
hasUntracked: false
|
|
62
|
+
};
|
|
63
|
+
return {
|
|
64
|
+
ids: /* @__PURE__ */ new Set(),
|
|
65
|
+
hasUntracked: true
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
} catch {}
|
|
70
|
+
return {
|
|
71
|
+
ids: /* @__PURE__ */ new Set(),
|
|
72
|
+
hasUntracked: false
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function mapStepPosition(remap, pos, assoc) {
|
|
76
|
+
return remap.map(pos, assoc);
|
|
77
|
+
}
|
|
78
|
+
function createParagraphChangeTrackerPlugin() {
|
|
79
|
+
return new Plugin({
|
|
80
|
+
key: paragraphChangeTrackerKey,
|
|
81
|
+
state: {
|
|
82
|
+
init(_config, state) {
|
|
83
|
+
return {
|
|
84
|
+
changedParaIds: /* @__PURE__ */ new Set(),
|
|
85
|
+
structuralChange: false,
|
|
86
|
+
hasUntrackedChanges: false,
|
|
87
|
+
paragraphCount: countParagraphs(state.doc)
|
|
88
|
+
};
|
|
89
|
+
},
|
|
90
|
+
apply(tr, prevState) {
|
|
91
|
+
const meta = tr.getMeta(paragraphChangeTrackerKey);
|
|
92
|
+
if (meta === CLEAR_META) return {
|
|
93
|
+
changedParaIds: /* @__PURE__ */ new Set(),
|
|
94
|
+
structuralChange: false,
|
|
95
|
+
hasUntrackedChanges: false,
|
|
96
|
+
paragraphCount: prevState.paragraphCount
|
|
97
|
+
};
|
|
98
|
+
if (meta === IGNORE_META) return {
|
|
99
|
+
...prevState,
|
|
100
|
+
paragraphCount: tr.docChanged ? countParagraphs(tr.doc) : prevState.paragraphCount
|
|
101
|
+
};
|
|
102
|
+
if (!tr.docChanged) return prevState;
|
|
103
|
+
const newCount = countParagraphs(tr.doc);
|
|
104
|
+
const newState = {
|
|
105
|
+
changedParaIds: new Set(prevState.changedParaIds),
|
|
106
|
+
structuralChange: prevState.structuralChange,
|
|
107
|
+
hasUntrackedChanges: prevState.hasUntrackedChanges,
|
|
108
|
+
paragraphCount: newCount
|
|
109
|
+
};
|
|
110
|
+
if (prevState.paragraphCount !== newCount) newState.structuralChange = true;
|
|
111
|
+
for (let stepIndex = 0; stepIndex < tr.steps.length; stepIndex++) {
|
|
112
|
+
const step = tr.steps[stepIndex];
|
|
113
|
+
const remap = tr.mapping.slice(stepIndex + 1);
|
|
114
|
+
if (step instanceof AddMarkStep || step instanceof RemoveMarkStep) {
|
|
115
|
+
const from = mapStepPosition(remap, step.from, 1);
|
|
116
|
+
const to = mapStepPosition(remap, step.to, -1);
|
|
117
|
+
if (to <= from) continue;
|
|
118
|
+
const { ids, hasUntracked } = collectAffectedParaIdsFromMarkLikeStep(tr.doc, from, to);
|
|
119
|
+
for (const id of ids) newState.changedParaIds.add(id);
|
|
120
|
+
if (hasUntracked) newState.hasUntrackedChanges = true;
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (step instanceof AddNodeMarkStep || step instanceof RemoveNodeMarkStep) {
|
|
124
|
+
const pos = mapStepPosition(remap, step.pos, 1);
|
|
125
|
+
const node = tr.doc.nodeAt(pos);
|
|
126
|
+
if (!node) continue;
|
|
127
|
+
const end = pos + node.nodeSize;
|
|
128
|
+
const { ids, hasUntracked } = collectAffectedParaIds(tr.doc, pos, end);
|
|
129
|
+
for (const id of ids) newState.changedParaIds.add(id);
|
|
130
|
+
if (hasUntracked) newState.hasUntrackedChanges = true;
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
step.getMap().forEach((_oldStart, _oldEnd, newStart, newEnd) => {
|
|
134
|
+
const from = mapStepPosition(remap, newStart, 1);
|
|
135
|
+
const to = mapStepPosition(remap, newEnd, -1);
|
|
136
|
+
if (to < from) return;
|
|
137
|
+
const { ids, hasUntracked } = collectAffectedParaIds(tr.doc, from, to);
|
|
138
|
+
for (const id of ids) newState.changedParaIds.add(id);
|
|
139
|
+
if (hasUntracked) newState.hasUntrackedChanges = true;
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return newState;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get the change tracker state from an EditorState
|
|
149
|
+
*/
|
|
150
|
+
function getChangeTrackerState(state) {
|
|
151
|
+
return paragraphChangeTrackerKey.getState(state);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get the set of changed paragraph IDs from an EditorState
|
|
155
|
+
*/
|
|
156
|
+
function getChangedParagraphIds(state) {
|
|
157
|
+
return getChangeTrackerState(state)?.changedParaIds ?? /* @__PURE__ */ new Set();
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Check if structural changes (paragraph add/delete) occurred
|
|
161
|
+
*/
|
|
162
|
+
function hasStructuralChanges(state) {
|
|
163
|
+
return getChangeTrackerState(state)?.structuralChange ?? false;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Check if any changes affected paragraphs without paraId
|
|
167
|
+
*/
|
|
168
|
+
function hasUntrackedChanges(state) {
|
|
169
|
+
return getChangeTrackerState(state)?.hasUntrackedChanges ?? false;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Create a transaction that clears the change tracker
|
|
173
|
+
*/
|
|
174
|
+
function clearTrackedChanges(state) {
|
|
175
|
+
return state.tr.setMeta(paragraphChangeTrackerKey, CLEAR_META);
|
|
176
|
+
}
|
|
177
|
+
function ignoreTrackedChanges(tr) {
|
|
178
|
+
return tr.setMeta(paragraphChangeTrackerKey, IGNORE_META);
|
|
179
|
+
}
|
|
180
|
+
const ParagraphChangeTrackerExtension = createExtension({
|
|
181
|
+
name: "paragraphChangeTracker",
|
|
182
|
+
defaultOptions: {},
|
|
183
|
+
onSchemaReady() {
|
|
184
|
+
return { plugins: [createParagraphChangeTrackerPlugin()] };
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
//#endregion
|
|
188
|
+
export { ParagraphChangeTrackerExtension, clearTrackedChanges, getChangeTrackerState, getChangedParagraphIds, hasStructuralChanges, hasUntrackedChanges, ignoreTrackedChanges, paragraphChangeTrackerKey };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Extension } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/prosemirror/extensions/features/PasteCleanupExtension.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Paste Cleanup Extension
|
|
6
|
+
*
|
|
7
|
+
* Wires two paste-handling behaviors into the editor:
|
|
8
|
+
*
|
|
9
|
+
* 1. `transformPastedHTML` — strips Office/web producer cruft from pasted HTML
|
|
10
|
+
* (see {@link cleanPastedHtml}) before the schema parser reads it. Runs at
|
|
11
|
+
* `Highest` priority so the cleanup happens before the style inliner and the
|
|
12
|
+
* default clipboard parser; ProseMirror chains every plugin's
|
|
13
|
+
* `transformPastedHTML`, so this cooperates with the inliner rather than
|
|
14
|
+
* replacing it, and `<style>` blocks are left intact for it to resolve.
|
|
15
|
+
* 2. `Mod-Alt-v` — "paste without formatting", inserting clipboard text with
|
|
16
|
+
* the source formatting stripped (see {@link pasteWithoutFormatting}).
|
|
17
|
+
*/
|
|
18
|
+
declare const PasteCleanupExtension: (options?: Partial<Record<string, unknown>> | undefined) => Extension;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { PasteCleanupExtension };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Priority } from "../types.js";
|
|
2
|
+
import { createExtension } from "../create.js";
|
|
3
|
+
import { pasteWithoutFormatting } from "../../commands/pastePlainText.js";
|
|
4
|
+
import { cleanPastedHtml } from "./pasteCleanup.js";
|
|
5
|
+
import { Plugin } from "prosemirror-state";
|
|
6
|
+
//#region src/prosemirror/extensions/features/PasteCleanupExtension.ts
|
|
7
|
+
/**
|
|
8
|
+
* Paste Cleanup Extension
|
|
9
|
+
*
|
|
10
|
+
* Wires two paste-handling behaviors into the editor:
|
|
11
|
+
*
|
|
12
|
+
* 1. `transformPastedHTML` — strips Office/web producer cruft from pasted HTML
|
|
13
|
+
* (see {@link cleanPastedHtml}) before the schema parser reads it. Runs at
|
|
14
|
+
* `Highest` priority so the cleanup happens before the style inliner and the
|
|
15
|
+
* default clipboard parser; ProseMirror chains every plugin's
|
|
16
|
+
* `transformPastedHTML`, so this cooperates with the inliner rather than
|
|
17
|
+
* replacing it, and `<style>` blocks are left intact for it to resolve.
|
|
18
|
+
* 2. `Mod-Alt-v` — "paste without formatting", inserting clipboard text with
|
|
19
|
+
* the source formatting stripped (see {@link pasteWithoutFormatting}).
|
|
20
|
+
*/
|
|
21
|
+
const PasteCleanupExtension = createExtension({
|
|
22
|
+
name: "pasteCleanup",
|
|
23
|
+
priority: Priority.Highest,
|
|
24
|
+
onSchemaReady() {
|
|
25
|
+
return {
|
|
26
|
+
plugins: [new Plugin({ props: { transformPastedHTML(html) {
|
|
27
|
+
return cleanPastedHtml(html);
|
|
28
|
+
} } })],
|
|
29
|
+
keyboardShortcuts: { "Mod-Alt-v": pasteWithoutFormatting }
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
//#endregion
|
|
34
|
+
export { PasteCleanupExtension };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Extension } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/prosemirror/extensions/features/PasteStyleInlinerExtension.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Paste Style Inliner Extension
|
|
6
|
+
*
|
|
7
|
+
* When pasting from apps like Google Docs that use class-based CSS
|
|
8
|
+
* (e.g. `<style>.c5 { margin-top: 12pt }</style>`) instead of inline styles,
|
|
9
|
+
* ProseMirror's parseDOM can't read the styles because elements aren't attached
|
|
10
|
+
* to the live document during parsing.
|
|
11
|
+
*
|
|
12
|
+
* This extension provides a `transformPastedHTML` hook that:
|
|
13
|
+
* 1. Parses the pasted HTML string
|
|
14
|
+
* 2. Extracts all `<style>` rules
|
|
15
|
+
* 3. Inlines them onto matching elements
|
|
16
|
+
* 4. Returns the modified HTML so parseDOM can read inline styles
|
|
17
|
+
*/
|
|
18
|
+
declare const PasteStyleInlinerExtension: (options?: Partial<Record<string, unknown>> | undefined) => Extension;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { PasteStyleInlinerExtension };
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { Priority } from "../types.js";
|
|
2
|
+
import { createExtension } from "../create.js";
|
|
3
|
+
import { Plugin } from "prosemirror-state";
|
|
4
|
+
//#region src/prosemirror/extensions/features/PasteStyleInlinerExtension.ts
|
|
5
|
+
/**
|
|
6
|
+
* Paste Style Inliner Extension
|
|
7
|
+
*
|
|
8
|
+
* When pasting from apps like Google Docs that use class-based CSS
|
|
9
|
+
* (e.g. `<style>.c5 { margin-top: 12pt }</style>`) instead of inline styles,
|
|
10
|
+
* ProseMirror's parseDOM can't read the styles because elements aren't attached
|
|
11
|
+
* to the live document during parsing.
|
|
12
|
+
*
|
|
13
|
+
* This extension provides a `transformPastedHTML` hook that:
|
|
14
|
+
* 1. Parses the pasted HTML string
|
|
15
|
+
* 2. Extracts all `<style>` rules
|
|
16
|
+
* 3. Inlines them onto matching elements
|
|
17
|
+
* 4. Returns the modified HTML so parseDOM can read inline styles
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Parse a CSS rule's style declarations into a Record<property, value>.
|
|
21
|
+
*/
|
|
22
|
+
function parseStyleDeclarations(cssText) {
|
|
23
|
+
const result = {};
|
|
24
|
+
const declarations = cssText.split(";");
|
|
25
|
+
for (const decl of declarations) {
|
|
26
|
+
const trimmed = decl.trim();
|
|
27
|
+
if (!trimmed) continue;
|
|
28
|
+
const colonIdx = trimmed.indexOf(":");
|
|
29
|
+
if (colonIdx === -1) continue;
|
|
30
|
+
const prop = trimmed.slice(0, colonIdx).trim();
|
|
31
|
+
const value = trimmed.slice(colonIdx + 1).trim();
|
|
32
|
+
if (prop && value) result[prop] = value;
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Merge style declarations onto an element's existing inline style.
|
|
38
|
+
* Existing inline styles take precedence (they were explicitly set by the app).
|
|
39
|
+
*/
|
|
40
|
+
function mergeStylesOntoElement(element, declarations) {
|
|
41
|
+
const existingDeclarations = parseStyleDeclarations(element.getAttribute("style") || "");
|
|
42
|
+
for (const [prop, value] of Object.entries(declarations)) if (!(prop in existingDeclarations)) element.style.setProperty(prop, value);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Extract CSS rules from `<style>` elements and inline them onto matching elements.
|
|
46
|
+
*
|
|
47
|
+
* Uses the browser's CSSStyleSheet API to properly parse CSS rules,
|
|
48
|
+
* handling complex selectors, specificity, etc.
|
|
49
|
+
*/
|
|
50
|
+
function inlineStylesFromStyleBlocks(doc) {
|
|
51
|
+
const styleElements = doc.querySelectorAll("style");
|
|
52
|
+
if (styleElements.length === 0) return;
|
|
53
|
+
const rulesWithSelectors = [];
|
|
54
|
+
for (const styleEl of styleElements) {
|
|
55
|
+
const cssText = styleEl.textContent || "";
|
|
56
|
+
if (!cssText.trim()) continue;
|
|
57
|
+
try {
|
|
58
|
+
const tempStyle = doc.createElement("style");
|
|
59
|
+
tempStyle.textContent = cssText;
|
|
60
|
+
doc.head.append(tempStyle);
|
|
61
|
+
const sheet = tempStyle.sheet;
|
|
62
|
+
if (sheet) {
|
|
63
|
+
for (const rule of sheet.cssRules) if (rule instanceof CSSStyleRule) {
|
|
64
|
+
const declarations = {};
|
|
65
|
+
const style = rule.style;
|
|
66
|
+
for (const prop of style) declarations[prop] = style.getPropertyValue(prop);
|
|
67
|
+
if (Object.keys(declarations).length > 0) rulesWithSelectors.push({
|
|
68
|
+
selector: rule.selectorText,
|
|
69
|
+
declarations
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
tempStyle.remove();
|
|
74
|
+
} catch {
|
|
75
|
+
let searchFrom = 0;
|
|
76
|
+
while (searchFrom < cssText.length) {
|
|
77
|
+
const open = cssText.indexOf("{", searchFrom);
|
|
78
|
+
if (open === -1) break;
|
|
79
|
+
const close = cssText.indexOf("}", open + 1);
|
|
80
|
+
if (close === -1) break;
|
|
81
|
+
const selector = cssText.slice(searchFrom, open).trim();
|
|
82
|
+
const declarations = parseStyleDeclarations(cssText.slice(open + 1, close));
|
|
83
|
+
if (Object.keys(declarations).length > 0) rulesWithSelectors.push({
|
|
84
|
+
selector,
|
|
85
|
+
declarations
|
|
86
|
+
});
|
|
87
|
+
searchFrom = close + 1;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (rulesWithSelectors.length === 0) return;
|
|
92
|
+
for (const { selector, declarations } of rulesWithSelectors) try {
|
|
93
|
+
const matchingElements = doc.body.querySelectorAll(selector);
|
|
94
|
+
for (const el of matchingElements) if (el instanceof HTMLElement) mergeStylesOntoElement(el, declarations);
|
|
95
|
+
} catch {}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Google Docs wraps ALL clipboard content in a structural <b> tag:
|
|
99
|
+
* <b id="docs-internal-guid-XXXXX" style="font-weight:normal;">...content...</b>
|
|
100
|
+
*
|
|
101
|
+
* This is NOT a bold formatting tag — it is a container for Google Docs' internal
|
|
102
|
+
* tracking GUID. The actual bold status is on <span> elements via font-weight CSS.
|
|
103
|
+
*
|
|
104
|
+
* This function detects such wrappers and replaces them with their child nodes,
|
|
105
|
+
* preventing ProseMirror's BoldExtension parseDOM from applying bold to all content.
|
|
106
|
+
*/
|
|
107
|
+
function unwrapGoogleDocsStructuralB(doc) {
|
|
108
|
+
const structuralBs = doc.body.querySelectorAll("b[id^=\"docs-internal-guid-\"]");
|
|
109
|
+
for (const b of structuralBs) {
|
|
110
|
+
if (!b.parentNode) continue;
|
|
111
|
+
while (b.firstChild) b.before(b.firstChild);
|
|
112
|
+
b.remove();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Transform pasted HTML by inlining class-based CSS and unwrapping Google Docs wrappers.
|
|
117
|
+
*/
|
|
118
|
+
function transformPastedHTML(html) {
|
|
119
|
+
const hasStyleBlock = html.includes("<style");
|
|
120
|
+
const hasGoogleDocsWrapper = html.includes("docs-internal-guid-");
|
|
121
|
+
if (!hasStyleBlock && !hasGoogleDocsWrapper) return html;
|
|
122
|
+
try {
|
|
123
|
+
const doc = new DOMParser().parseFromString(html, "text/html");
|
|
124
|
+
if (hasStyleBlock) {
|
|
125
|
+
inlineStylesFromStyleBlocks(doc);
|
|
126
|
+
const styleElements = doc.querySelectorAll("style");
|
|
127
|
+
for (const el of styleElements) el.remove();
|
|
128
|
+
}
|
|
129
|
+
if (hasGoogleDocsWrapper) unwrapGoogleDocsStructuralB(doc);
|
|
130
|
+
return doc.body.innerHTML;
|
|
131
|
+
} catch {
|
|
132
|
+
return html;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const PasteStyleInlinerExtension = createExtension({
|
|
136
|
+
name: "pasteStyleInliner",
|
|
137
|
+
priority: Priority.High,
|
|
138
|
+
onSchemaReady() {
|
|
139
|
+
return { plugins: [new Plugin({ props: { transformPastedHTML(html) {
|
|
140
|
+
return transformPastedHTML(html);
|
|
141
|
+
} } })] };
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
//#endregion
|
|
145
|
+
export { PasteStyleInlinerExtension };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Extension } from "../types.js";
|
|
2
|
+
import { SelectionChangeCallback } from "../../plugins/selectionTracker.js";
|
|
3
|
+
|
|
4
|
+
//#region src/prosemirror/extensions/features/SelectionTrackerExtension.d.ts
|
|
5
|
+
type SelectionTrackerOptions = {
|
|
6
|
+
onSelectionChange?: SelectionChangeCallback;
|
|
7
|
+
};
|
|
8
|
+
declare const SelectionTrackerExtension: (options?: Partial<SelectionTrackerOptions> | undefined) => Extension;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { SelectionTrackerExtension };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createExtension } from "../create.js";
|
|
2
|
+
import { createSelectionTrackerPlugin, extractSelectionContext } from "../../plugins/selectionTracker.js";
|
|
3
|
+
const SelectionTrackerExtension = createExtension({
|
|
4
|
+
name: "selectionTracker",
|
|
5
|
+
defaultOptions: {},
|
|
6
|
+
onSchemaReady(_ctx, options) {
|
|
7
|
+
return {
|
|
8
|
+
plugins: [createSelectionTrackerPlugin(options.onSelectionChange)],
|
|
9
|
+
commands: { extractSelectionContext: () => (state, _dispatch) => {
|
|
10
|
+
extractSelectionContext(state);
|
|
11
|
+
return true;
|
|
12
|
+
} }
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
//#endregion
|
|
17
|
+
export { SelectionTrackerExtension };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//#region src/prosemirror/extensions/features/bidiShortcutController.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Bidi shortcut controller — framework-agnostic state machine for the
|
|
4
|
+
* Ctrl/Cmd+Shift direction shortcut, split out from the plugin wiring (which
|
|
5
|
+
* reaches the singleton schema) so it can be imported and unit-tested without
|
|
6
|
+
* triggering schema initialization.
|
|
7
|
+
*
|
|
8
|
+
* The direction change is armed on the Shift keydown (while Ctrl/Cmd is held)
|
|
9
|
+
* but only applied on the Shift keyup, and is cancelled if any other key is
|
|
10
|
+
* pressed in between. That deferral is what keeps the shortcut from hijacking
|
|
11
|
+
* longer chords that also start with Ctrl/Cmd+Shift — most importantly the redo
|
|
12
|
+
* chord Ctrl/Cmd+Shift+Z: firing the direction change on the Shift keydown would
|
|
13
|
+
* record a paragraph-attribute transaction that wipes the editor's redo stack
|
|
14
|
+
* before the "Z" ever arrives, so redo would silently restore nothing.
|
|
15
|
+
*/
|
|
16
|
+
/** Paragraph base-direction a bidi shortcut applies. */
|
|
17
|
+
type BidiDirection = "ltr" | "rtl";
|
|
18
|
+
/** Minimal keyboard-event shape the bidi controller reads. */
|
|
19
|
+
type BidiKeyEvent = {
|
|
20
|
+
key: string;
|
|
21
|
+
code: string;
|
|
22
|
+
metaKey: boolean;
|
|
23
|
+
ctrlKey: boolean;
|
|
24
|
+
};
|
|
25
|
+
type BidiShortcutController = {
|
|
26
|
+
/** Track a keydown: arm on Ctrl/Cmd+Shift, cancel on any other key. */handleKeyDown: (event: BidiKeyEvent) => void; /** On Shift keyup, return the armed direction (and disarm), else null. */
|
|
27
|
+
handleKeyUp: (event: BidiKeyEvent) => BidiDirection | null;
|
|
28
|
+
};
|
|
29
|
+
declare const createBidiShortcutController: () => BidiShortcutController;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { BidiDirection, BidiKeyEvent, BidiShortcutController, createBidiShortcutController };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region src/prosemirror/extensions/features/bidiShortcutController.ts
|
|
2
|
+
const createBidiShortcutController = () => {
|
|
3
|
+
let armed = null;
|
|
4
|
+
return {
|
|
5
|
+
handleKeyDown(event) {
|
|
6
|
+
if (event.key !== "Shift") {
|
|
7
|
+
armed = null;
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (!(event.metaKey || event.ctrlKey)) {
|
|
11
|
+
armed = null;
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
if (event.code === "ShiftLeft") armed = "ltr";
|
|
15
|
+
else if (event.code === "ShiftRight") armed = "rtl";
|
|
16
|
+
else armed = null;
|
|
17
|
+
},
|
|
18
|
+
handleKeyUp(event) {
|
|
19
|
+
if (event.key !== "Shift") return null;
|
|
20
|
+
const direction = armed;
|
|
21
|
+
armed = null;
|
|
22
|
+
return direction;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
//#endregion
|
|
27
|
+
export { createBidiShortcutController };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//#region src/prosemirror/extensions/features/pasteCleanup.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Office / web paste cleanup
|
|
4
|
+
*
|
|
5
|
+
* Content pasted from word processors and web pages arrives wrapped in a large
|
|
6
|
+
* amount of producer-specific cruft: conditional comments, XML processing
|
|
7
|
+
* instructions, namespaced markup (`<o:p>`, `<w:sdt>`, smart tags), `mso-*`
|
|
8
|
+
* style declarations, and empty spans. None of it maps to the editor schema,
|
|
9
|
+
* and some of it confuses the browser HTML parser that ProseMirror's clipboard
|
|
10
|
+
* pipeline relies on. Producer class names (`MsoNormal`, ...) are deliberately
|
|
11
|
+
* kept so the downstream style inliner can match `<style>` rules against them.
|
|
12
|
+
*
|
|
13
|
+
* `cleanPastedHtml` normalizes the raw clipboard HTML string into something the
|
|
14
|
+
* schema's `parseDOM` rules can read cleanly. It is a pure string transform so
|
|
15
|
+
* it runs in the editor and in tests without a DOM, and it is deliberately
|
|
16
|
+
* conservative: it strips producer metadata but never rewrites visible text
|
|
17
|
+
* (curly quotes, non-Latin scripts, and whitespace between words are left
|
|
18
|
+
* untouched, since this editor targets an international, typography-sensitive
|
|
19
|
+
* audience).
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Strip Office/web producer cruft from a raw clipboard HTML string.
|
|
23
|
+
*
|
|
24
|
+
* Best-effort and non-throwing: any unexpected failure returns the original
|
|
25
|
+
* markup so a paste degrades to the browser default rather than losing content.
|
|
26
|
+
* `<style>` blocks are intentionally left in place for the downstream style
|
|
27
|
+
* inliner, which resolves class-based CSS before the schema parser runs.
|
|
28
|
+
*/
|
|
29
|
+
declare function cleanPastedHtml(html: string): string;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { cleanPastedHtml };
|