@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,90 @@
|
|
|
1
|
+
import { Plugin, PluginKey } from "prosemirror-state";
|
|
2
|
+
import { Decoration, DecorationSet } from "prosemirror-view";
|
|
3
|
+
//#region src/prosemirror/plugins/aiCitationDecorations.ts
|
|
4
|
+
const aiCitationDecorationsKey = new PluginKey("aiCitationDecorations");
|
|
5
|
+
const SET_META = "set";
|
|
6
|
+
const ACTIVE_META = "active";
|
|
7
|
+
function buildDecorationSet(doc, citations, activeId) {
|
|
8
|
+
if (citations.length === 0) return DecorationSet.empty;
|
|
9
|
+
const docSize = doc.content.size;
|
|
10
|
+
const decorations = [];
|
|
11
|
+
for (const c of citations) {
|
|
12
|
+
const from = Math.max(0, Math.min(c.from, docSize));
|
|
13
|
+
const to = Math.max(from, Math.min(c.to, docSize));
|
|
14
|
+
if (to === from) continue;
|
|
15
|
+
const isActive = activeId === c.id;
|
|
16
|
+
decorations.push(Decoration.inline(from, to, {
|
|
17
|
+
class: ["folio-ai-citation", isActive ? "folio-ai-citation--active" : ""].filter(Boolean).join(" "),
|
|
18
|
+
"data-folio-ai-citation-id": c.id
|
|
19
|
+
}, {
|
|
20
|
+
inclusiveStart: false,
|
|
21
|
+
inclusiveEnd: false
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
return DecorationSet.create(doc, decorations);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* ProseMirror plugin that renders AI citations as inline highlights.
|
|
28
|
+
* Use {@link setAICitationsMeta} / {@link setActiveCitationMeta} to
|
|
29
|
+
* update which ranges are shown and which one is currently active
|
|
30
|
+
* (e.g., the one the user just clicked).
|
|
31
|
+
*/
|
|
32
|
+
function createAICitationDecorationsPlugin() {
|
|
33
|
+
return new Plugin({
|
|
34
|
+
key: aiCitationDecorationsKey,
|
|
35
|
+
state: {
|
|
36
|
+
init(_, state) {
|
|
37
|
+
return {
|
|
38
|
+
citations: [],
|
|
39
|
+
activeId: null,
|
|
40
|
+
decorationSet: buildDecorationSet(state.doc, [], null)
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
apply(tr, prev, _oldState, newState) {
|
|
44
|
+
const meta = tr.getMeta(aiCitationDecorationsKey);
|
|
45
|
+
if (meta?.type === SET_META) return {
|
|
46
|
+
citations: meta.citations,
|
|
47
|
+
activeId: prev.activeId,
|
|
48
|
+
decorationSet: buildDecorationSet(newState.doc, meta.citations, prev.activeId)
|
|
49
|
+
};
|
|
50
|
+
if (meta?.type === ACTIVE_META) return {
|
|
51
|
+
citations: prev.citations,
|
|
52
|
+
activeId: meta.activeId,
|
|
53
|
+
decorationSet: buildDecorationSet(newState.doc, prev.citations, meta.activeId)
|
|
54
|
+
};
|
|
55
|
+
if (tr.docChanged) {
|
|
56
|
+
const mapped = prev.decorationSet.map(tr.mapping, tr.doc);
|
|
57
|
+
return {
|
|
58
|
+
citations: prev.citations,
|
|
59
|
+
activeId: prev.activeId,
|
|
60
|
+
decorationSet: mapped
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return prev;
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
props: { decorations(state) {
|
|
67
|
+
return aiCitationDecorationsKey.getState(state)?.decorationSet ?? null;
|
|
68
|
+
} }
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function setAICitationsMeta(citations) {
|
|
72
|
+
return {
|
|
73
|
+
key: aiCitationDecorationsKey,
|
|
74
|
+
payload: {
|
|
75
|
+
type: SET_META,
|
|
76
|
+
citations
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function setActiveCitationMeta(activeId) {
|
|
81
|
+
return {
|
|
82
|
+
key: aiCitationDecorationsKey,
|
|
83
|
+
payload: {
|
|
84
|
+
type: ACTIVE_META,
|
|
85
|
+
activeId
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//#endregion
|
|
90
|
+
export { aiCitationDecorationsKey, createAICitationDecorationsPlugin, setAICitationsMeta, setActiveCitationMeta };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { AISuggestion, AISuggestionSeverity } from "../../ai-suggestions/types.js";
|
|
2
|
+
import { Plugin, PluginKey } from "prosemirror-state";
|
|
3
|
+
import { DecorationSet } from "prosemirror-view";
|
|
4
|
+
|
|
5
|
+
//#region src/prosemirror/plugins/aiSuggestionDecorations.d.ts
|
|
6
|
+
declare const aiSuggestionDecorationsKey: PluginKey<AISuggestionDecorationState>;
|
|
7
|
+
declare const SET_META = "set";
|
|
8
|
+
declare const FOCUS_META = "focus";
|
|
9
|
+
type AISuggestionDecorationState = {
|
|
10
|
+
suggestions: AISuggestion[];
|
|
11
|
+
focusedId: string | null;
|
|
12
|
+
decorationSet: DecorationSet;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Severity → CSS modifier class. Shared with the paged editor's
|
|
16
|
+
* suggestion overlay so both renderers stay on the same class names.
|
|
17
|
+
*/
|
|
18
|
+
declare const AI_SUGGESTION_SEVERITY_CLASS: Record<AISuggestionSeverity, string>;
|
|
19
|
+
/**
|
|
20
|
+
* ProseMirror plugin that renders AI suggestions as inline decorations.
|
|
21
|
+
*
|
|
22
|
+
* Use {@link setAISuggestionsMeta} to update the list, and
|
|
23
|
+
* {@link setFocusedSuggestionMeta} to highlight the active one when the
|
|
24
|
+
* user navigates the review panel.
|
|
25
|
+
*/
|
|
26
|
+
declare function createAISuggestionDecorationsPlugin(): Plugin<AISuggestionDecorationState>;
|
|
27
|
+
declare function setAISuggestionsMeta(suggestions: AISuggestion[]): {
|
|
28
|
+
key: PluginKey<AISuggestionDecorationState>;
|
|
29
|
+
payload: {
|
|
30
|
+
type: typeof SET_META;
|
|
31
|
+
suggestions: AISuggestion[];
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
declare function setFocusedSuggestionMeta(focusedId: string | null): {
|
|
35
|
+
key: PluginKey<AISuggestionDecorationState>;
|
|
36
|
+
payload: {
|
|
37
|
+
type: typeof FOCUS_META;
|
|
38
|
+
focusedId: string | null;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
//#endregion
|
|
42
|
+
export { AI_SUGGESTION_SEVERITY_CLASS, aiSuggestionDecorationsKey, createAISuggestionDecorationsPlugin, setAISuggestionsMeta, setFocusedSuggestionMeta };
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { Plugin, PluginKey } from "prosemirror-state";
|
|
2
|
+
import { Decoration, DecorationSet } from "prosemirror-view";
|
|
3
|
+
//#region src/prosemirror/plugins/aiSuggestionDecorations.ts
|
|
4
|
+
const aiSuggestionDecorationsKey = new PluginKey("aiSuggestionDecorations");
|
|
5
|
+
const SET_META = "set";
|
|
6
|
+
const FOCUS_META = "focus";
|
|
7
|
+
/**
|
|
8
|
+
* Severity → CSS modifier class. Shared with the paged editor's
|
|
9
|
+
* suggestion overlay so both renderers stay on the same class names.
|
|
10
|
+
*/
|
|
11
|
+
const AI_SUGGESTION_SEVERITY_CLASS = {
|
|
12
|
+
typo: "folio-ai-suggestion--typo",
|
|
13
|
+
style: "folio-ai-suggestion--style",
|
|
14
|
+
substantive: "folio-ai-suggestion--substantive"
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Lazy DOM factory for the focused suggestion's in-text replacement
|
|
18
|
+
* preview. Returned as a closure so the element is only created when
|
|
19
|
+
* the view draws the widget (keeps the build side-effect free for
|
|
20
|
+
* headless state updates).
|
|
21
|
+
*/
|
|
22
|
+
function buildReplacementWidget(suggestion) {
|
|
23
|
+
return () => {
|
|
24
|
+
const span = document.createElement("span");
|
|
25
|
+
span.className = "folio-ai-suggestion--focused-replacement";
|
|
26
|
+
span.dataset["folioAiSuggestionId"] = suggestion.id;
|
|
27
|
+
span.contentEditable = "false";
|
|
28
|
+
span.textContent = suggestion.suggestedText;
|
|
29
|
+
return span;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function buildDecorationSet(doc, suggestions, focusedId) {
|
|
33
|
+
if (suggestions.length === 0) return DecorationSet.empty;
|
|
34
|
+
const docSize = doc.content.size;
|
|
35
|
+
const decorations = [];
|
|
36
|
+
for (const suggestion of suggestions) {
|
|
37
|
+
if (suggestion.status !== "pending") continue;
|
|
38
|
+
const from = Math.max(0, Math.min(suggestion.range.from, docSize));
|
|
39
|
+
const to = Math.max(from, Math.min(suggestion.range.to, docSize));
|
|
40
|
+
if (to === from) continue;
|
|
41
|
+
const isFocused = focusedId === suggestion.id;
|
|
42
|
+
decorations.push(Decoration.inline(from, to, {
|
|
43
|
+
class: [
|
|
44
|
+
"folio-ai-suggestion",
|
|
45
|
+
AI_SUGGESTION_SEVERITY_CLASS[suggestion.severity],
|
|
46
|
+
isFocused ? "folio-ai-suggestion--focused" : "",
|
|
47
|
+
isFocused ? "folio-ai-suggestion--focused-original" : ""
|
|
48
|
+
].filter(Boolean).join(" "),
|
|
49
|
+
"data-folio-ai-suggestion-id": suggestion.id
|
|
50
|
+
}, {
|
|
51
|
+
inclusiveStart: false,
|
|
52
|
+
inclusiveEnd: false
|
|
53
|
+
}));
|
|
54
|
+
if (isFocused && suggestion.suggestedText.length > 0) decorations.push(Decoration.widget(to, buildReplacementWidget(suggestion), {
|
|
55
|
+
side: 1,
|
|
56
|
+
marks: [],
|
|
57
|
+
ignoreSelection: true,
|
|
58
|
+
key: `folio-ai-suggestion-replacement-${suggestion.id}`
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
return DecorationSet.create(doc, decorations);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* ProseMirror plugin that renders AI suggestions as inline decorations.
|
|
65
|
+
*
|
|
66
|
+
* Use {@link setAISuggestionsMeta} to update the list, and
|
|
67
|
+
* {@link setFocusedSuggestionMeta} to highlight the active one when the
|
|
68
|
+
* user navigates the review panel.
|
|
69
|
+
*/
|
|
70
|
+
function createAISuggestionDecorationsPlugin() {
|
|
71
|
+
return new Plugin({
|
|
72
|
+
key: aiSuggestionDecorationsKey,
|
|
73
|
+
state: {
|
|
74
|
+
init(_, state) {
|
|
75
|
+
return {
|
|
76
|
+
suggestions: [],
|
|
77
|
+
focusedId: null,
|
|
78
|
+
decorationSet: buildDecorationSet(state.doc, [], null)
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
apply(tr, prev, _oldState, newState) {
|
|
82
|
+
const setMeta = tr.getMeta(aiSuggestionDecorationsKey);
|
|
83
|
+
if (setMeta?.type === SET_META) return {
|
|
84
|
+
suggestions: setMeta.suggestions,
|
|
85
|
+
focusedId: prev.focusedId,
|
|
86
|
+
decorationSet: buildDecorationSet(newState.doc, setMeta.suggestions, prev.focusedId)
|
|
87
|
+
};
|
|
88
|
+
if (setMeta?.type === FOCUS_META) return {
|
|
89
|
+
suggestions: prev.suggestions,
|
|
90
|
+
focusedId: setMeta.focusedId,
|
|
91
|
+
decorationSet: buildDecorationSet(newState.doc, prev.suggestions, setMeta.focusedId)
|
|
92
|
+
};
|
|
93
|
+
if (tr.docChanged) {
|
|
94
|
+
if (prev.suggestions.length === 0) return prev;
|
|
95
|
+
const mapped = prev.decorationSet.map(tr.mapping, tr.doc);
|
|
96
|
+
return {
|
|
97
|
+
suggestions: prev.suggestions.map((suggestion) => ({
|
|
98
|
+
...suggestion,
|
|
99
|
+
range: {
|
|
100
|
+
from: tr.mapping.map(suggestion.range.from, 1),
|
|
101
|
+
to: tr.mapping.map(suggestion.range.to, -1)
|
|
102
|
+
}
|
|
103
|
+
})),
|
|
104
|
+
focusedId: prev.focusedId,
|
|
105
|
+
decorationSet: mapped
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
return prev;
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
props: { decorations(state) {
|
|
112
|
+
return aiSuggestionDecorationsKey.getState(state)?.decorationSet ?? null;
|
|
113
|
+
} }
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
function setAISuggestionsMeta(suggestions) {
|
|
117
|
+
return {
|
|
118
|
+
key: aiSuggestionDecorationsKey,
|
|
119
|
+
payload: {
|
|
120
|
+
type: SET_META,
|
|
121
|
+
suggestions
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function setFocusedSuggestionMeta(focusedId) {
|
|
126
|
+
return {
|
|
127
|
+
key: aiSuggestionDecorationsKey,
|
|
128
|
+
payload: {
|
|
129
|
+
type: FOCUS_META,
|
|
130
|
+
focusedId
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
//#endregion
|
|
135
|
+
export { AI_SUGGESTION_SEVERITY_CLASS, aiSuggestionDecorationsKey, createAISuggestionDecorationsPlugin, setAISuggestionsMeta, setFocusedSuggestionMeta };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { EditorState, Plugin, PluginKey } from "prosemirror-state";
|
|
2
|
+
|
|
3
|
+
//#region src/prosemirror/plugins/anonymizationDecorations.d.ts
|
|
4
|
+
type AnonymizationTerm = {
|
|
5
|
+
/** Canonical surface form, displayed in tooltips. */canonical: string; /** Label slug (e.g. "person", "organization"). */
|
|
6
|
+
label: string; /** Optional alternate surface forms also matched verbatim. */
|
|
7
|
+
variants?: readonly string[];
|
|
8
|
+
};
|
|
9
|
+
type AnonymizationMatch = {
|
|
10
|
+
/** Inclusive PM doc position of the match start. */from: number; /** Exclusive PM doc position of the match end. */
|
|
11
|
+
to: number;
|
|
12
|
+
label: string;
|
|
13
|
+
canonical: string;
|
|
14
|
+
};
|
|
15
|
+
declare const SET_META = "set";
|
|
16
|
+
type AnonymizationDecorationState = {
|
|
17
|
+
terms: readonly AnonymizationTerm[];
|
|
18
|
+
matches: readonly AnonymizationMatch[];
|
|
19
|
+
};
|
|
20
|
+
declare const anonymizationDecorationsKey: PluginKey<AnonymizationDecorationState>;
|
|
21
|
+
declare const slugAnonymizationLabel: (label: string) => string;
|
|
22
|
+
/**
|
|
23
|
+
* Plugin that keeps a list of anonymization-term match ranges
|
|
24
|
+
* synced with the document. Host pushes terms via
|
|
25
|
+
* {@link setAnonymizationTermsMeta}; the paged-editor reads
|
|
26
|
+
* the matches and paints the overlay.
|
|
27
|
+
*/
|
|
28
|
+
type AnonymizationPluginOptions = {
|
|
29
|
+
/**
|
|
30
|
+
* Push-side bridge for hosts that need to mirror the current
|
|
31
|
+
* match list outside the PM state tree (e.g. an inspector
|
|
32
|
+
* facet showing a "N highlighted" counter, or per-doc analytics).
|
|
33
|
+
* Called on plugin init, after every transaction that changes
|
|
34
|
+
* the match set, and on plugin teardown (with an empty list).
|
|
35
|
+
* The same list is reachable via `getAnonymizationMatches`;
|
|
36
|
+
* use the callback when you need updates without polling.
|
|
37
|
+
*/
|
|
38
|
+
onMatchesChange?: (matches: readonly AnonymizationMatch[]) => void;
|
|
39
|
+
};
|
|
40
|
+
declare const createAnonymizationDecorationsPlugin: ({
|
|
41
|
+
onMatchesChange
|
|
42
|
+
}?: AnonymizationPluginOptions) => Plugin<AnonymizationDecorationState>;
|
|
43
|
+
declare const setAnonymizationTermsMeta: (terms: readonly AnonymizationTerm[]) => {
|
|
44
|
+
key: PluginKey<AnonymizationDecorationState>;
|
|
45
|
+
payload: {
|
|
46
|
+
type: typeof SET_META;
|
|
47
|
+
terms: readonly AnonymizationTerm[];
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Read the plugin's current match list out of a Folio editor
|
|
52
|
+
* view. Lives inside the same module as the plugin key so a host
|
|
53
|
+
* that imports it via `@stll/folio` gets the *same* key instance
|
|
54
|
+
* as the plugin registration — bypassing the dev-HMR hazard
|
|
55
|
+
* where re-evaluating the plugin module would create a second
|
|
56
|
+
* PluginKey and break key-based lookups.
|
|
57
|
+
*/
|
|
58
|
+
declare const getAnonymizationMatches: (state: EditorState) => readonly AnonymizationMatch[];
|
|
59
|
+
//#endregion
|
|
60
|
+
export { AnonymizationMatch, AnonymizationPluginOptions, AnonymizationTerm, anonymizationDecorationsKey, createAnonymizationDecorationsPlugin, getAnonymizationMatches, setAnonymizationTermsMeta, slugAnonymizationLabel };
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { collectBlockChunks, joinChunks, offsetToDocPos } from "./pmTextScan.js";
|
|
2
|
+
import { Plugin, PluginKey } from "prosemirror-state";
|
|
3
|
+
//#region src/prosemirror/plugins/anonymizationDecorations.ts
|
|
4
|
+
const SET_META = "set";
|
|
5
|
+
const KEY_HOLDER_SYMBOL = Symbol.for("stll.folio.anonymizationDecorationsKey");
|
|
6
|
+
const keyHolder = globalThis;
|
|
7
|
+
const anonymizationDecorationsKey = keyHolder[KEY_HOLDER_SYMBOL] ?? (keyHolder[KEY_HOLDER_SYMBOL] = new PluginKey("anonymizationDecorations"));
|
|
8
|
+
const slugAnonymizationLabel = (label) => label.toLowerCase().replace(/[^a-z0-9]+/gu, "-");
|
|
9
|
+
const buildMatcher = (terms) => {
|
|
10
|
+
const escapeChar = (value) => value.replaceAll(/[\\^$.*+?()[\]{}|]/gu, "\\$&").replaceAll(/\s+/gu, "\\s+");
|
|
11
|
+
const compiled = [];
|
|
12
|
+
const seen = /* @__PURE__ */ new Set();
|
|
13
|
+
for (const term of terms) {
|
|
14
|
+
const surfaces = [term.canonical, ...term.variants ?? []].filter((surface) => surface.length > 0);
|
|
15
|
+
if (surfaces.length === 0) continue;
|
|
16
|
+
surfaces.sort((a, b) => b.length - a.length);
|
|
17
|
+
const key = surfaces.join("|").toLowerCase();
|
|
18
|
+
if (seen.has(key)) continue;
|
|
19
|
+
seen.add(key);
|
|
20
|
+
const alternation = surfaces.map(escapeChar).join("|");
|
|
21
|
+
compiled.push({
|
|
22
|
+
term,
|
|
23
|
+
regex: new RegExp(`(?<![\\p{L}\\p{N}])(?:${alternation})(?![\\p{L}\\p{N}])`, "giu")
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return compiled;
|
|
27
|
+
};
|
|
28
|
+
const buildMatches = (doc, terms) => {
|
|
29
|
+
const compiled = buildMatcher(terms);
|
|
30
|
+
if (compiled.length === 0) return [];
|
|
31
|
+
const matches = [];
|
|
32
|
+
for (const chunks of collectBlockChunks(doc)) {
|
|
33
|
+
const joined = joinChunks(chunks);
|
|
34
|
+
for (const { regex, term } of compiled) {
|
|
35
|
+
regex.lastIndex = 0;
|
|
36
|
+
let match = regex.exec(joined);
|
|
37
|
+
while (match !== null) {
|
|
38
|
+
const from = offsetToDocPos(chunks, match.index);
|
|
39
|
+
const to = offsetToDocPos(chunks, match.index + match[0].length);
|
|
40
|
+
matches.push({
|
|
41
|
+
from,
|
|
42
|
+
to,
|
|
43
|
+
label: term.label,
|
|
44
|
+
canonical: term.canonical
|
|
45
|
+
});
|
|
46
|
+
if (regex.lastIndex === match.index) regex.lastIndex += 1;
|
|
47
|
+
match = regex.exec(joined);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
matches.sort((a, b) => a.from !== b.from ? a.from - b.from : b.to - a.to);
|
|
52
|
+
const result = [];
|
|
53
|
+
let cursor = -1;
|
|
54
|
+
for (const m of matches) {
|
|
55
|
+
if (m.from < cursor) continue;
|
|
56
|
+
result.push(m);
|
|
57
|
+
cursor = m.to;
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
};
|
|
61
|
+
const createAnonymizationDecorationsPlugin = ({ onMatchesChange } = {}) => {
|
|
62
|
+
const spec = {
|
|
63
|
+
key: anonymizationDecorationsKey,
|
|
64
|
+
state: {
|
|
65
|
+
init() {
|
|
66
|
+
return {
|
|
67
|
+
terms: [],
|
|
68
|
+
matches: []
|
|
69
|
+
};
|
|
70
|
+
},
|
|
71
|
+
apply(tr, prev, _oldState, newState) {
|
|
72
|
+
const setMeta = tr.getMeta(anonymizationDecorationsKey);
|
|
73
|
+
if (setMeta?.type === SET_META) return {
|
|
74
|
+
terms: setMeta.terms,
|
|
75
|
+
matches: buildMatches(newState.doc, setMeta.terms)
|
|
76
|
+
};
|
|
77
|
+
if (tr.docChanged) return {
|
|
78
|
+
terms: prev.terms,
|
|
79
|
+
matches: buildMatches(newState.doc, prev.terms)
|
|
80
|
+
};
|
|
81
|
+
return prev;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
if (onMatchesChange) spec.view = (view) => {
|
|
86
|
+
let last = anonymizationDecorationsKey.getState(view.state)?.matches;
|
|
87
|
+
if (last) onMatchesChange(last);
|
|
88
|
+
return {
|
|
89
|
+
update(updatedView) {
|
|
90
|
+
const next = anonymizationDecorationsKey.getState(updatedView.state)?.matches;
|
|
91
|
+
if (next && next !== last) {
|
|
92
|
+
last = next;
|
|
93
|
+
onMatchesChange(next);
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
destroy() {
|
|
97
|
+
onMatchesChange([]);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
return new Plugin(spec);
|
|
102
|
+
};
|
|
103
|
+
const setAnonymizationTermsMeta = (terms) => ({
|
|
104
|
+
key: anonymizationDecorationsKey,
|
|
105
|
+
payload: {
|
|
106
|
+
type: SET_META,
|
|
107
|
+
terms
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
/**
|
|
111
|
+
* Read the plugin's current match list out of a Folio editor
|
|
112
|
+
* view. Lives inside the same module as the plugin key so a host
|
|
113
|
+
* that imports it via `@stll/folio` gets the *same* key instance
|
|
114
|
+
* as the plugin registration — bypassing the dev-HMR hazard
|
|
115
|
+
* where re-evaluating the plugin module would create a second
|
|
116
|
+
* PluginKey and break key-based lookups.
|
|
117
|
+
*/
|
|
118
|
+
const getAnonymizationMatches = (state) => anonymizationDecorationsKey.getState(state)?.matches ?? [];
|
|
119
|
+
//#endregion
|
|
120
|
+
export { anonymizationDecorationsKey, createAnonymizationDecorationsPlugin, getAnonymizationMatches, setAnonymizationTermsMeta, slugAnonymizationLabel };
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { EditorState, Plugin, PluginKey, Transaction } from "prosemirror-state";
|
|
2
|
+
import { DecorationSet } from "prosemirror-view";
|
|
3
|
+
|
|
4
|
+
//#region src/prosemirror/plugins/autocompleteSuggestion.d.ts
|
|
5
|
+
type AutocompleteSuggestionStatus = "idle" | "streaming" | "shown";
|
|
6
|
+
type AutocompleteSuggestionState = {
|
|
7
|
+
status: "idle";
|
|
8
|
+
anchor: null;
|
|
9
|
+
text: "";
|
|
10
|
+
requestId: null;
|
|
11
|
+
} | {
|
|
12
|
+
status: "streaming" | "shown";
|
|
13
|
+
anchor: number;
|
|
14
|
+
text: string;
|
|
15
|
+
requestId: string;
|
|
16
|
+
};
|
|
17
|
+
declare const autocompleteSuggestionKey: PluginKey<AutocompleteSuggestionPluginState>;
|
|
18
|
+
type AutocompleteSuggestionPluginState = {
|
|
19
|
+
suggestion: AutocompleteSuggestionState;
|
|
20
|
+
decorations: DecorationSet;
|
|
21
|
+
};
|
|
22
|
+
type AutocompleteSuggestionPluginOptions = {
|
|
23
|
+
/**
|
|
24
|
+
* When `true`, the plugin paints the ghost text and the
|
|
25
|
+
* "stella" caret as a single inline widget decoration. Use
|
|
26
|
+
* this in standard (non-paged) ProseMirror views where PM
|
|
27
|
+
* decorations reach the visible DOM.
|
|
28
|
+
*
|
|
29
|
+
* When `false` (default), the plugin emits an invisible
|
|
30
|
+
* zero-width anchor widget only; the visible ghost text is
|
|
31
|
+
* painted by {@link AutocompleteCaretOverlay} reading the
|
|
32
|
+
* plugin state from outside the editor. This is the path
|
|
33
|
+
* folio's hidden-PM + paged-painter editor uses.
|
|
34
|
+
*/
|
|
35
|
+
renderInline?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* When `true`, the plugin intercepts keys via
|
|
38
|
+
* `props.handleKeyDown`:
|
|
39
|
+
* - Tab → accept full suggestion (only if shown)
|
|
40
|
+
* - Mod-ArrowRight → accept the next word
|
|
41
|
+
* - Escape → dismiss
|
|
42
|
+
* Handlers return `false` (i.e. don't consume the event) when
|
|
43
|
+
* no suggestion is active, so existing keymap entries — list
|
|
44
|
+
* indentation on Tab, etc. — continue to work unchanged.
|
|
45
|
+
*
|
|
46
|
+
* The plugin must sit early in the editor's plugin array for
|
|
47
|
+
* its `handleKeyDown` to run before competing keymap plugins.
|
|
48
|
+
*/
|
|
49
|
+
keymap?: boolean;
|
|
50
|
+
};
|
|
51
|
+
declare const autocompleteSuggestionPlugin: (options?: AutocompleteSuggestionPluginOptions) => Plugin<AutocompleteSuggestionPluginState>;
|
|
52
|
+
declare const getAutocompleteSuggestion: (state: EditorState) => AutocompleteSuggestionState;
|
|
53
|
+
declare const startAutocompleteSuggestion: (tr: Transaction, anchor: number, requestId: string) => Transaction;
|
|
54
|
+
declare const appendAutocompleteToken: (tr: Transaction, requestId: string, delta: string) => Transaction;
|
|
55
|
+
declare const finishAutocompleteSuggestion: (tr: Transaction, requestId: string) => Transaction;
|
|
56
|
+
declare const clearAutocompleteSuggestion: (tr: Transaction) => Transaction;
|
|
57
|
+
type AcceptAutocompleteResult = {
|
|
58
|
+
accepted: false;
|
|
59
|
+
} | {
|
|
60
|
+
accepted: true;
|
|
61
|
+
from: number;
|
|
62
|
+
to: number;
|
|
63
|
+
text: string;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Commit the current suggestion as a real text insertion at its
|
|
67
|
+
* anchor. Returns metadata so the caller can record the accept
|
|
68
|
+
* event (for telemetry / future training feedback) without
|
|
69
|
+
* re-reading plugin state after the dispatch.
|
|
70
|
+
*
|
|
71
|
+
* Single transaction: insert text + clear suggestion state, so
|
|
72
|
+
* undo restores both the doc and the (now-gone) ghost atomically.
|
|
73
|
+
*/
|
|
74
|
+
declare const acceptAutocompleteSuggestion: (state: EditorState, dispatch?: (tr: Transaction) => void) => AcceptAutocompleteResult;
|
|
75
|
+
/**
|
|
76
|
+
* Consume the next "word" from the suggestion: insert it at the
|
|
77
|
+
* anchor in a single transaction and shrink the remaining ghost
|
|
78
|
+
* text. Lets the user "graze" through a long suggestion one word
|
|
79
|
+
* at a time with ⌘→ / Ctrl→ instead of accept-all-or-discard.
|
|
80
|
+
*
|
|
81
|
+
* A word here is "leading whitespace + the next non-whitespace
|
|
82
|
+
* run + an optional trailing space" — so successive calls eat the
|
|
83
|
+
* suggestion cleanly without leaving stray spaces. When the
|
|
84
|
+
* remaining suggestion is shorter than one word, this falls
|
|
85
|
+
* through to {@link acceptAutocompleteSuggestion}.
|
|
86
|
+
*/
|
|
87
|
+
declare const acceptAutocompleteWord: (state: EditorState, dispatch?: (tr: Transaction) => void) => AcceptAutocompleteResult;
|
|
88
|
+
type AutocompleteTriggerSkipReason = "selection-non-empty" | "midword" | "deadzone" | "empty-doc";
|
|
89
|
+
type AutocompleteTriggerCheck = {
|
|
90
|
+
ok: true;
|
|
91
|
+
} | {
|
|
92
|
+
ok: false;
|
|
93
|
+
reason: AutocompleteTriggerSkipReason;
|
|
94
|
+
detail?: string;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Node type names that should suppress autocomplete entirely. The
|
|
98
|
+
* defaults cover prose-adjacent zones across ProseMirror schemas
|
|
99
|
+
* we encounter in folio + bare playgrounds. Pass a custom list via
|
|
100
|
+
* options to extend (citations, math, frontmatter, etc.).
|
|
101
|
+
*/
|
|
102
|
+
declare const DEFAULT_AUTOCOMPLETE_DEAD_ZONE_NODES: readonly string[];
|
|
103
|
+
type AutocompleteTriggerOptions = {
|
|
104
|
+
/** Additional node type names to treat as dead zones. */extraDeadZoneNodes?: readonly string[];
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Decide whether autocomplete should fire at the current cursor.
|
|
108
|
+
* Designed to be called from a debounced trigger in the host app
|
|
109
|
+
* before sending a request to the model. Returns a structured
|
|
110
|
+
* skip reason rather than a bare boolean so callers (and debug
|
|
111
|
+
* UIs) can explain why no suggestion appeared.
|
|
112
|
+
*
|
|
113
|
+
* Gates applied:
|
|
114
|
+
* - selection must be a collapsed caret (no range selection)
|
|
115
|
+
* - the cursor must not be inside a dead-zone node (heading,
|
|
116
|
+
* code, citation, math, etc.) anywhere in the ancestor chain
|
|
117
|
+
* - the character immediately before the cursor must not be a
|
|
118
|
+
* word-continuation char — if it is, the model would be
|
|
119
|
+
* completing a partial token and almost always misreads intent
|
|
120
|
+
*/
|
|
121
|
+
declare const shouldTriggerAutocomplete: (state: EditorState, options?: AutocompleteTriggerOptions) => AutocompleteTriggerCheck;
|
|
122
|
+
//#endregion
|
|
123
|
+
export { AcceptAutocompleteResult, AutocompleteSuggestionPluginOptions, AutocompleteSuggestionState, AutocompleteSuggestionStatus, AutocompleteTriggerCheck, AutocompleteTriggerOptions, AutocompleteTriggerSkipReason, DEFAULT_AUTOCOMPLETE_DEAD_ZONE_NODES, acceptAutocompleteSuggestion, acceptAutocompleteWord, appendAutocompleteToken, autocompleteSuggestionKey, autocompleteSuggestionPlugin, clearAutocompleteSuggestion, finishAutocompleteSuggestion, getAutocompleteSuggestion, shouldTriggerAutocomplete, startAutocompleteSuggestion };
|