@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,17 @@
|
|
|
1
|
+
import { EditorState, Transaction } from "prosemirror-state";
|
|
2
|
+
import { EditorView } from "prosemirror-view";
|
|
3
|
+
|
|
4
|
+
//#region src/layout-bridge/convert/wrapEditorViewAsSurface.d.ts
|
|
5
|
+
type Surface = {
|
|
6
|
+
/** Identity tag — `"body"` for the body PM, `"hf"` for any HF PM. */kind: "body" | "hf"; /** rId of the source HF part; `null` for the body surface. */
|
|
7
|
+
rId: string | null;
|
|
8
|
+
getState: () => EditorState | null;
|
|
9
|
+
getView: () => EditorView | null;
|
|
10
|
+
focus: () => void;
|
|
11
|
+
isFocused: () => boolean;
|
|
12
|
+
dispatch: (tr: Transaction) => void;
|
|
13
|
+
setSelection: (anchor: number, head?: number) => void;
|
|
14
|
+
};
|
|
15
|
+
declare function wrapEditorViewAsSurface(view: EditorView | null, rId: string): Surface;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { Surface, wrapEditorViewAsSurface };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Selection, TextSelection } from "prosemirror-state";
|
|
2
|
+
//#region src/layout-bridge/convert/wrapEditorViewAsSurface.ts
|
|
3
|
+
/**
|
|
4
|
+
* Surface adapter — gives the pointer pipeline a uniform shape for the body
|
|
5
|
+
* PM and any HF PM, so a single resolved `activeSurface()` can drive click
|
|
6
|
+
* routing / drag-select / focus from one code path.
|
|
7
|
+
*
|
|
8
|
+
* The body PM ref (`HiddenProseMirrorRef`) and the persistent HF PMs (raw
|
|
9
|
+
* `EditorView` from `HiddenHeaderFooterPMs.getView()`) carry different APIs;
|
|
10
|
+
* this adapter projects both onto a small intersection: focus, set selection,
|
|
11
|
+
* get state, dispatch.
|
|
12
|
+
*/
|
|
13
|
+
function wrapEditorViewAsSurface(view, rId) {
|
|
14
|
+
return {
|
|
15
|
+
kind: "hf",
|
|
16
|
+
rId,
|
|
17
|
+
getState: () => view?.state ?? null,
|
|
18
|
+
getView: () => view,
|
|
19
|
+
focus: () => view?.focus(),
|
|
20
|
+
isFocused: () => view?.hasFocus() ?? false,
|
|
21
|
+
dispatch: (tr) => view?.dispatch(tr),
|
|
22
|
+
setSelection(anchor, head) {
|
|
23
|
+
if (!view) return;
|
|
24
|
+
const { state, dispatch } = view;
|
|
25
|
+
const docEnd = state.doc.content.size;
|
|
26
|
+
const clampedAnchor = Math.max(0, Math.min(anchor, docEnd));
|
|
27
|
+
const clampedHead = head === void 0 ? clampedAnchor : Math.max(0, Math.min(head, docEnd));
|
|
28
|
+
const $anchor = state.doc.resolve(clampedAnchor);
|
|
29
|
+
const $head = state.doc.resolve(clampedHead);
|
|
30
|
+
const selection = head === void 0 ? Selection.near($anchor) : TextSelection.between($anchor, $head);
|
|
31
|
+
dispatch(state.tr.setSelection(selection));
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
export { wrapEditorViewAsSurface };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
//#region src/layout-bridge/dom/clickToPositionDom.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* DOM-based Click-to-Position Mapping
|
|
4
|
+
*
|
|
5
|
+
* Uses the browser's actual rendered DOM to find ProseMirror positions.
|
|
6
|
+
* This is more accurate than geometry-based calculation because it uses
|
|
7
|
+
* the browser's own text rendering with document.elementsFromPoint().
|
|
8
|
+
*
|
|
9
|
+
* DOM elements are tagged with data-pm-start and data-pm-end attributes,
|
|
10
|
+
* enabling binary search to find exact character positions.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Find ProseMirror position from a click using DOM-based detection.
|
|
14
|
+
*
|
|
15
|
+
* @param container - The pages container element
|
|
16
|
+
* @param clientX - Client X coordinate from mouse event
|
|
17
|
+
* @param clientY - Client Y coordinate from mouse event
|
|
18
|
+
* @param zoom - Current zoom level (default 1)
|
|
19
|
+
* @returns ProseMirror position, or null if not found
|
|
20
|
+
*/
|
|
21
|
+
declare function clickToPositionDom(container: HTMLElement, clientX: number, clientY: number, zoom?: number): number | null;
|
|
22
|
+
/**
|
|
23
|
+
* Find exact position within a text span. Defers to the
|
|
24
|
+
* browser's own hit-tester (`caretPositionFromPoint` /
|
|
25
|
+
* `caretRangeFromPoint`) — that's what every native text
|
|
26
|
+
* editor uses, and it correctly handles bidi runs, kerning,
|
|
27
|
+
* variable fonts, sub-pixel rendering, and line wrap. Falls
|
|
28
|
+
* back to a per-glyph rect scan when the browser API is
|
|
29
|
+
* unavailable or returns a point outside this span (e.g. the
|
|
30
|
+
* caret API resolved to a sibling text node at the same y).
|
|
31
|
+
*/
|
|
32
|
+
declare function findPositionInSpan(spanEl: HTMLElement, clientX: number, clientY: number): number | null;
|
|
33
|
+
/**
|
|
34
|
+
* Get selection rectangles for a PM range using DOM-based detection.
|
|
35
|
+
*
|
|
36
|
+
* @param container - The pages container element
|
|
37
|
+
* @param from - Start PM position
|
|
38
|
+
* @param to - End PM position
|
|
39
|
+
* @param overlayRect - Bounding rect of the selection overlay
|
|
40
|
+
* @returns Array of selection rectangles in overlay coordinates
|
|
41
|
+
*/
|
|
42
|
+
type DomSelectionRect = {
|
|
43
|
+
x: number;
|
|
44
|
+
y: number;
|
|
45
|
+
width: number;
|
|
46
|
+
height: number;
|
|
47
|
+
pageIndex: number;
|
|
48
|
+
};
|
|
49
|
+
declare function getSelectionRectsFromDom(container: HTMLElement, from: number, to: number, overlayRect: DOMRect): DomSelectionRect[];
|
|
50
|
+
/**
|
|
51
|
+
* Get caret position from DOM for a PM position.
|
|
52
|
+
*
|
|
53
|
+
* @param container - The pages container element
|
|
54
|
+
* @param pmPos - ProseMirror position
|
|
55
|
+
* @param overlayRect - Bounding rect of the selection overlay
|
|
56
|
+
* @returns Caret position in overlay coordinates, or null
|
|
57
|
+
*/
|
|
58
|
+
type DomCaretPosition = {
|
|
59
|
+
x: number;
|
|
60
|
+
y: number;
|
|
61
|
+
height: number;
|
|
62
|
+
pageIndex: number;
|
|
63
|
+
};
|
|
64
|
+
declare function getCaretPositionFromDom(container: HTMLElement, pmPos: number, overlayRect: DOMRect): DomCaretPosition | null;
|
|
65
|
+
//#endregion
|
|
66
|
+
export { DomCaretPosition, DomSelectionRect, clickToPositionDom, findPositionInSpan, getCaretPositionFromDom, getSelectionRectsFromDom };
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { closestHtmlElement, findHtmlElement, htmlQueryAll, queryHtmlElement } from "../../utils/domGuards.js";
|
|
2
|
+
//#region src/layout-bridge/dom/clickToPositionDom.ts
|
|
3
|
+
/**
|
|
4
|
+
* DOM-based Click-to-Position Mapping
|
|
5
|
+
*
|
|
6
|
+
* Uses the browser's actual rendered DOM to find ProseMirror positions.
|
|
7
|
+
* This is more accurate than geometry-based calculation because it uses
|
|
8
|
+
* the browser's own text rendering with document.elementsFromPoint().
|
|
9
|
+
*
|
|
10
|
+
* DOM elements are tagged with data-pm-start and data-pm-end attributes,
|
|
11
|
+
* enabling binary search to find exact character positions.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Find ProseMirror position from a click using DOM-based detection.
|
|
15
|
+
*
|
|
16
|
+
* @param container - The pages container element
|
|
17
|
+
* @param clientX - Client X coordinate from mouse event
|
|
18
|
+
* @param clientY - Client Y coordinate from mouse event
|
|
19
|
+
* @param zoom - Current zoom level (default 1)
|
|
20
|
+
* @returns ProseMirror position, or null if not found
|
|
21
|
+
*/
|
|
22
|
+
function clickToPositionDom(container, clientX, clientY, zoom = 1) {
|
|
23
|
+
const elements = document.elementsFromPoint(clientX, clientY);
|
|
24
|
+
const pageEl = findHtmlElement(elements, (el) => el.classList.contains("layout-page"));
|
|
25
|
+
if (!pageEl) return null;
|
|
26
|
+
const spanEl = findHtmlElement(elements, (el) => el.tagName === "SPAN" && el.dataset["pmStart"] !== void 0 && el.dataset["pmEnd"] !== void 0);
|
|
27
|
+
if (spanEl) return findPositionInSpan(spanEl, clientX, clientY);
|
|
28
|
+
const emptyRun = findHtmlElement(elements, (el) => el.classList.contains("layout-empty-run"));
|
|
29
|
+
if (emptyRun) {
|
|
30
|
+
const paragraph = closestHtmlElement(emptyRun, ".layout-paragraph");
|
|
31
|
+
if (paragraph && paragraph.dataset["pmStart"]) return Number(paragraph.dataset["pmStart"]);
|
|
32
|
+
}
|
|
33
|
+
const paragraphEl = findHtmlElement(elements, (el) => el.classList.contains("layout-paragraph") && el.dataset["pmStart"] !== void 0);
|
|
34
|
+
if (paragraphEl && paragraphEl.dataset["pmStart"]) {
|
|
35
|
+
const nearestPos = findNearestSpanInElement(paragraphEl, clientX, clientY);
|
|
36
|
+
if (nearestPos !== null) return nearestPos;
|
|
37
|
+
return Number(paragraphEl.dataset["pmStart"]);
|
|
38
|
+
}
|
|
39
|
+
const cellEl = findHtmlElement(elements, (el) => el.classList.contains("layout-table-cell"));
|
|
40
|
+
if (cellEl) return findNearestSpanInElement(cellEl, clientX, clientY);
|
|
41
|
+
return findNearestSpan(container, pageEl, clientX, clientY, zoom);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Find exact position within a text span. Defers to the
|
|
45
|
+
* browser's own hit-tester (`caretPositionFromPoint` /
|
|
46
|
+
* `caretRangeFromPoint`) — that's what every native text
|
|
47
|
+
* editor uses, and it correctly handles bidi runs, kerning,
|
|
48
|
+
* variable fonts, sub-pixel rendering, and line wrap. Falls
|
|
49
|
+
* back to a per-glyph rect scan when the browser API is
|
|
50
|
+
* unavailable or returns a point outside this span (e.g. the
|
|
51
|
+
* caret API resolved to a sibling text node at the same y).
|
|
52
|
+
*/
|
|
53
|
+
function findPositionInSpan(spanEl, clientX, clientY) {
|
|
54
|
+
const pmStart = Number(spanEl.dataset["pmStart"]);
|
|
55
|
+
const pmEnd = Number(spanEl.dataset["pmEnd"]);
|
|
56
|
+
if (spanEl.classList.contains("layout-run-tab")) {
|
|
57
|
+
const rect = spanEl.getBoundingClientRect();
|
|
58
|
+
return clientX < (rect.left + rect.right) / 2 ? pmStart : pmEnd;
|
|
59
|
+
}
|
|
60
|
+
const textNode = spanEl.firstChild;
|
|
61
|
+
if (!textNode || textNode.nodeType !== Node.TEXT_NODE) return pmStart;
|
|
62
|
+
const text = textNode;
|
|
63
|
+
const textLength = text.length;
|
|
64
|
+
if (textLength === 0) return pmStart;
|
|
65
|
+
const ownerDoc = spanEl.ownerDocument;
|
|
66
|
+
const native = caretOffsetFromPoint(ownerDoc, text, clientX, clientY);
|
|
67
|
+
if (native !== null) return pmStart + Math.min(native, pmEnd - pmStart);
|
|
68
|
+
const range = ownerDoc.createRange();
|
|
69
|
+
let bestOffset = 0;
|
|
70
|
+
let bestDistance = Number.POSITIVE_INFINITY;
|
|
71
|
+
for (let i = 0; i < textLength; i++) {
|
|
72
|
+
range.setStart(text, i);
|
|
73
|
+
range.setEnd(text, i + 1);
|
|
74
|
+
const rect = range.getBoundingClientRect();
|
|
75
|
+
if (rect.width === 0 && rect.height === 0) continue;
|
|
76
|
+
const midpoint = rect.left + rect.width / 2;
|
|
77
|
+
const distance = Math.abs(clientX - midpoint);
|
|
78
|
+
if (distance < bestDistance) {
|
|
79
|
+
bestDistance = distance;
|
|
80
|
+
bestOffset = clientX < midpoint ? i : i + 1;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return pmStart + Math.min(bestOffset, pmEnd - pmStart);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Resolve `(clientX, clientY)` to a character offset
|
|
87
|
+
* inside `text` using the browser's caret hit-tester.
|
|
88
|
+
* Returns `null` if the API is unavailable or resolved to
|
|
89
|
+
* a different node — callers fall back to a glyph-by-glyph
|
|
90
|
+
* scan in that case.
|
|
91
|
+
*/
|
|
92
|
+
function caretOffsetFromPoint(ownerDoc, text, clientX, clientY) {
|
|
93
|
+
const doc = ownerDoc;
|
|
94
|
+
if (typeof doc.caretPositionFromPoint === "function") {
|
|
95
|
+
const pos = doc.caretPositionFromPoint(clientX, clientY);
|
|
96
|
+
if (pos && pos.offsetNode === text) return pos.offset;
|
|
97
|
+
}
|
|
98
|
+
if (typeof doc.caretRangeFromPoint === "function") {
|
|
99
|
+
const range = doc.caretRangeFromPoint(clientX, clientY);
|
|
100
|
+
if (range && range.startContainer === text) return range.startOffset;
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Find the nearest text span within a specific element (e.g. a table cell).
|
|
106
|
+
* Used when a click lands in empty space within a cell to keep the cursor
|
|
107
|
+
* inside that cell rather than jumping to a different one.
|
|
108
|
+
*/
|
|
109
|
+
function findNearestSpanInElement(element, clientX, clientY) {
|
|
110
|
+
const emptyRun = queryHtmlElement(element, ".layout-empty-run");
|
|
111
|
+
if (emptyRun) {
|
|
112
|
+
if (emptyRun.dataset["pmStart"]) return Number(emptyRun.dataset["pmStart"]);
|
|
113
|
+
const paragraph = closestHtmlElement(emptyRun, ".layout-paragraph");
|
|
114
|
+
if (paragraph && paragraph.dataset["pmStart"]) return Number(paragraph.dataset["pmStart"]);
|
|
115
|
+
}
|
|
116
|
+
const lines = htmlQueryAll(element, ".layout-line");
|
|
117
|
+
let closestLine = null;
|
|
118
|
+
let closestLineDistance = Infinity;
|
|
119
|
+
for (const line of lines) {
|
|
120
|
+
const rect = line.getBoundingClientRect();
|
|
121
|
+
const centerY = (rect.top + rect.bottom) / 2;
|
|
122
|
+
const distance = Math.abs(clientY - centerY);
|
|
123
|
+
if (distance < closestLineDistance) {
|
|
124
|
+
closestLineDistance = distance;
|
|
125
|
+
closestLine = line;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (!closestLine) {
|
|
129
|
+
const paragraph = queryHtmlElement(element, ".layout-paragraph[data-pm-start]");
|
|
130
|
+
if (paragraph?.dataset["pmStart"]) return Number(paragraph.dataset["pmStart"]);
|
|
131
|
+
if (element.dataset["pmStart"]) return Number(element.dataset["pmStart"]);
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
const lineSpans = htmlQueryAll(closestLine, "span[data-pm-start][data-pm-end]");
|
|
135
|
+
if (lineSpans.length === 0) {
|
|
136
|
+
const paragraph = closestHtmlElement(closestLine, ".layout-paragraph");
|
|
137
|
+
if (paragraph?.dataset["pmStart"]) return Number(paragraph.dataset["pmStart"]);
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
let closestSpan = null;
|
|
141
|
+
let closestSpanDistance = Infinity;
|
|
142
|
+
for (const spanEl of lineSpans) {
|
|
143
|
+
const rect = spanEl.getBoundingClientRect();
|
|
144
|
+
if (clientX >= rect.left && clientX <= rect.right) return findPositionInSpan(spanEl, clientX, clientY);
|
|
145
|
+
const distance = clientX < rect.left ? rect.left - clientX : clientX - rect.right;
|
|
146
|
+
if (distance < closestSpanDistance) {
|
|
147
|
+
closestSpanDistance = distance;
|
|
148
|
+
closestSpan = spanEl;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (!closestSpan) return null;
|
|
152
|
+
if (clientX < closestSpan.getBoundingClientRect().left) return Number(closestSpan.dataset["pmStart"]);
|
|
153
|
+
return Number(closestSpan.dataset["pmEnd"]);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Find the nearest text span when click is not directly on text.
|
|
157
|
+
* This handles clicks in margins, between lines, etc.
|
|
158
|
+
*/
|
|
159
|
+
function findNearestSpan(_container, pageEl, clientX, clientY, _zoom) {
|
|
160
|
+
if (htmlQueryAll(pageEl, ".layout-page-content span[data-pm-start][data-pm-end]").length === 0) {
|
|
161
|
+
const firstP = htmlQueryAll(pageEl, ".layout-page-content .layout-paragraph").at(0);
|
|
162
|
+
if (firstP) return Number(firstP.dataset["pmStart"]) || 0;
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
const lines = htmlQueryAll(pageEl, ".layout-page-content .layout-line");
|
|
166
|
+
let closestLine = null;
|
|
167
|
+
let closestLineDistance = Infinity;
|
|
168
|
+
for (const line of lines) {
|
|
169
|
+
const rect = line.getBoundingClientRect();
|
|
170
|
+
const centerY = (rect.top + rect.bottom) / 2;
|
|
171
|
+
const distance = Math.abs(clientY - centerY);
|
|
172
|
+
if (distance < closestLineDistance) {
|
|
173
|
+
closestLineDistance = distance;
|
|
174
|
+
closestLine = line;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (!closestLine) return null;
|
|
178
|
+
const lineSpans = htmlQueryAll(closestLine, "span[data-pm-start][data-pm-end]");
|
|
179
|
+
if (lineSpans.length === 0) {
|
|
180
|
+
const paragraph = closestHtmlElement(closestLine, ".layout-paragraph");
|
|
181
|
+
if (paragraph?.dataset["pmStart"]) return Number(paragraph.dataset["pmStart"]);
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
let closestSpan = null;
|
|
185
|
+
let closestSpanDistance = Infinity;
|
|
186
|
+
for (const spanEl of lineSpans) {
|
|
187
|
+
const rect = spanEl.getBoundingClientRect();
|
|
188
|
+
if (clientX >= rect.left && clientX <= rect.right) return findPositionInSpan(spanEl, clientX, clientY);
|
|
189
|
+
const distance = clientX < rect.left ? rect.left - clientX : clientX - rect.right;
|
|
190
|
+
if (distance < closestSpanDistance) {
|
|
191
|
+
closestSpanDistance = distance;
|
|
192
|
+
closestSpan = spanEl;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (!closestSpan) return null;
|
|
196
|
+
if (clientX < closestSpan.getBoundingClientRect().left) return Number(closestSpan.dataset["pmStart"]);
|
|
197
|
+
return Number(closestSpan.dataset["pmEnd"]);
|
|
198
|
+
}
|
|
199
|
+
function getSelectionRectsFromDom(container, from, to, overlayRect) {
|
|
200
|
+
const rects = [];
|
|
201
|
+
const spans = htmlQueryAll(container, ".layout-page-content span[data-pm-start][data-pm-end]");
|
|
202
|
+
for (const spanEl of spans) {
|
|
203
|
+
const pmStart = Number(spanEl.dataset["pmStart"]);
|
|
204
|
+
if (Number(spanEl.dataset["pmEnd"]) <= from || pmStart >= to) continue;
|
|
205
|
+
const textNode = spanEl.firstChild;
|
|
206
|
+
if (!textNode || textNode.nodeType !== Node.TEXT_NODE) continue;
|
|
207
|
+
const text = textNode;
|
|
208
|
+
const ownerDoc = spanEl.ownerDocument;
|
|
209
|
+
const startChar = Math.max(0, from - pmStart);
|
|
210
|
+
const endChar = Math.min(text.length, to - pmStart);
|
|
211
|
+
if (startChar >= endChar) continue;
|
|
212
|
+
const range = ownerDoc.createRange();
|
|
213
|
+
range.setStart(text, startChar);
|
|
214
|
+
range.setEnd(text, endChar);
|
|
215
|
+
const clientRects = range.getClientRects();
|
|
216
|
+
const pageEl = closestHtmlElement(spanEl, ".layout-page");
|
|
217
|
+
const pageIndex = pageEl ? Number(pageEl.dataset["pageNumber"] || 1) - 1 : 0;
|
|
218
|
+
for (const clientRect of Array.from(clientRects)) rects.push({
|
|
219
|
+
x: clientRect.left - overlayRect.left,
|
|
220
|
+
y: clientRect.top - overlayRect.top,
|
|
221
|
+
width: clientRect.width,
|
|
222
|
+
height: clientRect.height,
|
|
223
|
+
pageIndex
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
return rects;
|
|
227
|
+
}
|
|
228
|
+
function getCaretPositionFromDom(container, pmPos, overlayRect) {
|
|
229
|
+
const spans = htmlQueryAll(container, ".layout-page-content span[data-pm-start][data-pm-end]");
|
|
230
|
+
for (const spanEl of spans) {
|
|
231
|
+
const pmStart = Number(spanEl.dataset["pmStart"]);
|
|
232
|
+
const pmEnd = Number(spanEl.dataset["pmEnd"]);
|
|
233
|
+
if (spanEl.classList.contains("layout-run-tab")) {
|
|
234
|
+
if (pmPos >= pmStart && pmPos < pmEnd) {
|
|
235
|
+
const spanRect = spanEl.getBoundingClientRect();
|
|
236
|
+
const pageEl = closestHtmlElement(spanEl, ".layout-page");
|
|
237
|
+
const pageIndex = pageEl ? Number(pageEl.dataset["pageNumber"] || 1) - 1 : 0;
|
|
238
|
+
const lineEl = closestHtmlElement(spanEl, ".layout-line");
|
|
239
|
+
const lineHeight = lineEl ? lineEl.offsetHeight : 16;
|
|
240
|
+
return {
|
|
241
|
+
x: spanRect.left - overlayRect.left,
|
|
242
|
+
y: spanRect.top - overlayRect.top,
|
|
243
|
+
height: lineHeight,
|
|
244
|
+
pageIndex
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
if (pmPos >= pmStart && pmPos <= pmEnd) {
|
|
250
|
+
const textNode = spanEl.firstChild;
|
|
251
|
+
if (!textNode || textNode.nodeType !== Node.TEXT_NODE) {
|
|
252
|
+
const spanRect = spanEl.getBoundingClientRect();
|
|
253
|
+
const pageEl = closestHtmlElement(spanEl, ".layout-page");
|
|
254
|
+
const pageIndex = pageEl ? Number(pageEl.dataset["pageNumber"] || 1) - 1 : 0;
|
|
255
|
+
const lineEl = closestHtmlElement(spanEl, ".layout-line");
|
|
256
|
+
const lineHeight = lineEl ? lineEl.offsetHeight : 16;
|
|
257
|
+
return {
|
|
258
|
+
x: spanRect.left - overlayRect.left,
|
|
259
|
+
y: spanRect.top - overlayRect.top,
|
|
260
|
+
height: lineHeight,
|
|
261
|
+
pageIndex
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
const text = textNode;
|
|
265
|
+
const charIndex = Math.min(pmPos - pmStart, text.length);
|
|
266
|
+
const range = spanEl.ownerDocument.createRange();
|
|
267
|
+
range.setStart(text, charIndex);
|
|
268
|
+
range.setEnd(text, charIndex);
|
|
269
|
+
const rangeRect = range.getBoundingClientRect();
|
|
270
|
+
const pageEl = closestHtmlElement(spanEl, ".layout-page");
|
|
271
|
+
const pageIndex = pageEl ? Number(pageEl.dataset["pageNumber"] || 1) - 1 : 0;
|
|
272
|
+
const lineEl = closestHtmlElement(spanEl, ".layout-line");
|
|
273
|
+
const lineHeight = lineEl ? lineEl.offsetHeight : 16;
|
|
274
|
+
return {
|
|
275
|
+
x: rangeRect.left - overlayRect.left,
|
|
276
|
+
y: rangeRect.top - overlayRect.top,
|
|
277
|
+
height: rangeRect.height || lineHeight,
|
|
278
|
+
pageIndex
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
const paragraphs = htmlQueryAll(container, ".layout-paragraph");
|
|
283
|
+
for (const pEl of paragraphs) {
|
|
284
|
+
const pStart = Number(pEl.dataset["pmStart"]);
|
|
285
|
+
const pEnd = Number(pEl.dataset["pmEnd"]);
|
|
286
|
+
if (pmPos >= pStart && pmPos <= pEnd) {
|
|
287
|
+
const targetEl = pEl.querySelector(".layout-empty-run") || pEl;
|
|
288
|
+
const rect = targetEl.getBoundingClientRect();
|
|
289
|
+
const pageEl = closestHtmlElement(pEl, ".layout-page");
|
|
290
|
+
const pageIndex = pageEl ? Number(pageEl.dataset["pageNumber"] || 1) - 1 : 0;
|
|
291
|
+
const lineCandidate = targetEl.closest(".layout-line") ?? targetEl;
|
|
292
|
+
const lineHeight = lineCandidate instanceof HTMLElement ? lineCandidate.offsetHeight : 16;
|
|
293
|
+
return {
|
|
294
|
+
x: rect.left - overlayRect.left,
|
|
295
|
+
y: rect.top - overlayRect.top,
|
|
296
|
+
height: lineHeight,
|
|
297
|
+
pageIndex
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return null;
|
|
302
|
+
}
|
|
303
|
+
//#endregion
|
|
304
|
+
export { clickToPositionDom, findPositionInSpan, getCaretPositionFromDom, getSelectionRectsFromDom };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
//#region src/layout-bridge/dom/findBodyPmSpans.d.ts
|
|
2
|
+
declare function findBodyPmSpans(container: ParentNode): HTMLElement[];
|
|
3
|
+
declare function findBodyEmptyRuns(container: ParentNode): HTMLElement[];
|
|
4
|
+
declare function findBodyPmAnchors(container: ParentNode): HTMLElement[];
|
|
5
|
+
declare function findBodyPmAnchor(container: ParentNode, pmStart: number): HTMLElement | null;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { findBodyEmptyRuns, findBodyPmAnchor, findBodyPmAnchors, findBodyPmSpans };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/layout-bridge/dom/findBodyPmSpans.ts
|
|
2
|
+
const BODY_SCOPE = ".layout-page-content";
|
|
3
|
+
function findBodyPmSpans(container) {
|
|
4
|
+
return Array.from(container.querySelectorAll(`${BODY_SCOPE} span[data-pm-start][data-pm-end]`));
|
|
5
|
+
}
|
|
6
|
+
function findBodyEmptyRuns(container) {
|
|
7
|
+
return Array.from(container.querySelectorAll(`${BODY_SCOPE} .layout-empty-run`));
|
|
8
|
+
}
|
|
9
|
+
function findBodyPmAnchors(container) {
|
|
10
|
+
return Array.from(container.querySelectorAll(`${BODY_SCOPE} [data-pm-start]`));
|
|
11
|
+
}
|
|
12
|
+
function findBodyPmAnchor(container, pmStart) {
|
|
13
|
+
if (!Number.isFinite(pmStart)) return null;
|
|
14
|
+
return container.querySelector(`${BODY_SCOPE} [data-pm-start="${String(pmStart)}"]`);
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { findBodyEmptyRuns, findBodyPmAnchor, findBodyPmAnchors, findBodyPmSpans };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
//#region src/layout-bridge/dom/findHfPmSpans.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Slot-scoped sibling of `findBodyPmSpans` — locates `data-pm-start` markers
|
|
4
|
+
* inside a single painted header/footer slot. The pointer pipeline uses these
|
|
5
|
+
* to translate a click coordinate inside `.layout-page-header[data-rid="…"]`
|
|
6
|
+
* (or footer) to a PM position on the matching hidden HF EditorView.
|
|
7
|
+
*
|
|
8
|
+
* Slot identity is the part-relationship id (`rId`) emitted by the painter on
|
|
9
|
+
* the HF DOM node — never the `(hdrFtrType, kind)` tuple (two sections that
|
|
10
|
+
* share a header by rId share both the painted spans and the EditorView).
|
|
11
|
+
*/
|
|
12
|
+
type HfSlotKind = "header" | "footer";
|
|
13
|
+
declare function findHfPmSpans(container: ParentNode, kind: HfSlotKind, rId: string): HTMLElement[];
|
|
14
|
+
declare function findHfPmAnchors(container: ParentNode, kind: HfSlotKind, rId: string): HTMLElement[];
|
|
15
|
+
declare function findHfPmAnchor(container: ParentNode, kind: HfSlotKind, rId: string, pmStart: number): HTMLElement | null;
|
|
16
|
+
/**
|
|
17
|
+
* Locate the span that covers a PM position for caret rendering, including
|
|
18
|
+
* `pmEnd` boundaries. `findHfPmAnchor` only matches `data-pm-start="${pos}"`
|
|
19
|
+
* exactly; when the caret sits at the end of a run / paragraph,
|
|
20
|
+
* `selection.from` equals that span's `data-pm-end` and the exact lookup
|
|
21
|
+
* returns null. This helper falls back to a range scan over the slot's
|
|
22
|
+
* `[data-pm-start][data-pm-end]` spans and reports the edge the caret
|
|
23
|
+
* should hug so the renderer can pick `left` vs `right`.
|
|
24
|
+
*/
|
|
25
|
+
type HfCaretSpanHit = {
|
|
26
|
+
element: HTMLElement; /** Which edge of the span's getBoundingClientRect to anchor the caret to. */
|
|
27
|
+
edge: "left" | "right";
|
|
28
|
+
};
|
|
29
|
+
declare function findHfCaretSpan(container: ParentNode, kind: HfSlotKind, rId: string, pos: number): HfCaretSpanHit | null;
|
|
30
|
+
/**
|
|
31
|
+
* Slot-scoped click-to-position mapper. `clickToPositionDom`'s fallback
|
|
32
|
+
* (`findNearestSpan`) is hardcoded to `.layout-page-content` — body — so when
|
|
33
|
+
* the user clicks HF whitespace (right of the text, between lines, etc.),
|
|
34
|
+
* the body fallback can return a body PM position that the HF dispatch then
|
|
35
|
+
* applies to the HF EditorView (clamped) and the caret leaps to an
|
|
36
|
+
* unrelated HF doc position (Codex #487 P2: 21:02 review).
|
|
37
|
+
*
|
|
38
|
+
* Scope everything to the slot element: try the exact-span lookup via
|
|
39
|
+
* `document.elementsFromPoint` filtered to descendants of `slot`; fall back
|
|
40
|
+
* to nearest-span-in-line + start/end edge math within the same slot.
|
|
41
|
+
*/
|
|
42
|
+
declare function clickToPositionInHfSlot(container: ParentNode, kind: HfSlotKind, rId: string, clientX: number, clientY: number): number | null;
|
|
43
|
+
declare function findHfSlotForTarget(target: Node | null): {
|
|
44
|
+
kind: HfSlotKind;
|
|
45
|
+
rId: string;
|
|
46
|
+
element: HTMLElement;
|
|
47
|
+
} | null;
|
|
48
|
+
/**
|
|
49
|
+
* Resolve only the header/footer KIND of the slot under `target`, whether or
|
|
50
|
+
* not it has an assigned rId yet. `findHfSlotForTarget` matches only a slot
|
|
51
|
+
* that already carries a `data-rid` (an existing HF part); but the painter also
|
|
52
|
+
* renders an EMPTY `.layout-page-header` / `.layout-page-footer` box — the
|
|
53
|
+
* hover-hint and double-click-to-add target — that has no rId. Entering edit
|
|
54
|
+
* mode to *create* a header needs only the kind (the handler mints the part),
|
|
55
|
+
* so this looser resolver matches that empty box too.
|
|
56
|
+
*/
|
|
57
|
+
declare function findHfSlotKindForTarget(target: Node | null): {
|
|
58
|
+
kind: HfSlotKind;
|
|
59
|
+
element: HTMLElement;
|
|
60
|
+
} | null;
|
|
61
|
+
//#endregion
|
|
62
|
+
export { HfCaretSpanHit, HfSlotKind, clickToPositionInHfSlot, findHfCaretSpan, findHfPmAnchor, findHfPmAnchors, findHfPmSpans, findHfSlotForTarget, findHfSlotKindForTarget };
|