@voithos-labs/aragonite 0.10.1
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 +661 -0
- package/README.md +365 -0
- package/THIRD-PARTY-NOTICES.md +102 -0
- package/dist/a11y-strings.d.ts +46 -0
- package/dist/a11y-strings.js +62 -0
- package/dist/action-contracts.d.ts +301 -0
- package/dist/action-contracts.js +5 -0
- package/dist/active-editor.d.ts +16 -0
- package/dist/active-editor.js +67 -0
- package/dist/ambient/ambient-cursor.d.ts +41 -0
- package/dist/ambient/ambient-cursor.js +120 -0
- package/dist/ambient/ambient-dom.d.ts +9 -0
- package/dist/ambient/ambient-dom.js +102 -0
- package/dist/assert.d.ts +6 -0
- package/dist/assert.js +17 -0
- package/dist/block-component.d.ts +274 -0
- package/dist/block-component.js +43 -0
- package/dist/block-id.d.ts +14 -0
- package/dist/block-id.js +34 -0
- package/dist/bounded-memo.d.ts +14 -0
- package/dist/bounded-memo.js +32 -0
- package/dist/components/BlockDragHandle.svelte +66 -0
- package/dist/components/BlockDragHandle.svelte.d.ts +18 -0
- package/dist/components/BlockHost.svelte +328 -0
- package/dist/components/BlockHost.svelte.d.ts +15 -0
- package/dist/components/BlockList.svelte +114 -0
- package/dist/components/BlockList.svelte.d.ts +16 -0
- package/dist/components/DecorationOverlay.svelte +156 -0
- package/dist/components/DecorationOverlay.svelte.d.ts +14 -0
- package/dist/components/Editor.svelte +1849 -0
- package/dist/components/Editor.svelte.d.ts +49 -0
- package/dist/components/GapCaret.svelte +226 -0
- package/dist/components/GapCaret.svelte.d.ts +9 -0
- package/dist/components/SearchBar.svelte +243 -0
- package/dist/components/SearchBar.svelte.d.ts +7 -0
- package/dist/components/SelectionOverlay.svelte +171 -0
- package/dist/components/SelectionOverlay.svelte.d.ts +14 -0
- package/dist/components/block-content-selector.d.ts +12 -0
- package/dist/components/block-content-selector.js +12 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +32 -0
- package/dist/components/blocks/BlockquoteBlock.svelte.d.ts +11 -0
- package/dist/components/blocks/ThematicBreakBlock.svelte +156 -0
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +17 -0
- package/dist/components/blocks/code/CodeBlock.svelte +726 -0
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +23 -0
- package/dist/components/blocks/code/CodeLanguageChip.svelte +127 -0
- package/dist/components/blocks/code/CodeLanguageChip.svelte.d.ts +14 -0
- package/dist/components/blocks/code/code-beforeinput.d.ts +30 -0
- package/dist/components/blocks/code/code-beforeinput.js +40 -0
- package/dist/components/blocks/code/code-bootstrap.d.ts +8 -0
- package/dist/components/blocks/code/code-bootstrap.js +54 -0
- package/dist/components/blocks/code/code-editing.d.ts +28 -0
- package/dist/components/blocks/code/code-editing.js +79 -0
- package/dist/components/blocks/code/code-enter.d.ts +22 -0
- package/dist/components/blocks/code/code-enter.js +19 -0
- package/dist/components/blocks/code/code-fence-boundary.d.ts +77 -0
- package/dist/components/blocks/code/code-fence-boundary.js +169 -0
- package/dist/components/blocks/code/code-fence-exit.d.ts +24 -0
- package/dist/components/blocks/code/code-fence-exit.js +36 -0
- package/dist/components/blocks/code/code-indent.d.ts +14 -0
- package/dist/components/blocks/code/code-indent.js +87 -0
- package/dist/components/blocks/code/code-languages.d.ts +15 -0
- package/dist/components/blocks/code/code-languages.js +30 -0
- package/dist/components/blocks/code/code-paste-surface.d.ts +6 -0
- package/dist/components/blocks/code/code-paste-surface.js +29 -0
- package/dist/components/blocks/code/code-paste.d.ts +24 -0
- package/dist/components/blocks/code/code-paste.js +21 -0
- package/dist/components/blocks/code/code-renderer.d.ts +18 -0
- package/dist/components/blocks/code/code-renderer.js +249 -0
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +51 -0
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte.d.ts +11 -0
- package/dist/components/blocks/directive/activate-directives.d.ts +7 -0
- package/dist/components/blocks/directive/activate-directives.js +23 -0
- package/dist/components/blocks/editable-leaf.d.ts +126 -0
- package/dist/components/blocks/editable-leaf.js +410 -0
- package/dist/components/blocks/editable-surface.d.ts +209 -0
- package/dist/components/blocks/editable-surface.js +331 -0
- package/dist/components/blocks/list/ListBlock.svelte +162 -0
- package/dist/components/blocks/list/ListBlock.svelte.d.ts +11 -0
- package/dist/components/blocks/list/ListItemBlock.svelte +324 -0
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +14 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +3 -0
- package/dist/components/blocks/list/task-checkbox.js +33 -0
- package/dist/components/blocks/plain-text-backend.d.ts +21 -0
- package/dist/components/blocks/plain-text-backend.js +47 -0
- package/dist/components/blocks/surface-wiring.svelte.d.ts +18 -0
- package/dist/components/blocks/surface-wiring.svelte.js +68 -0
- package/dist/components/blocks/table/TableActionMenu.svelte +267 -0
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +15 -0
- package/dist/components/blocks/table/TableBlock.svelte +765 -0
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +30 -0
- package/dist/components/blocks/table/TableCellBlock.svelte +1075 -0
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +30 -0
- package/dist/components/blocks/table/TableGrip.svelte +91 -0
- package/dist/components/blocks/table/TableGrip.svelte.d.ts +8 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +233 -0
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +34 -0
- package/dist/components/blocks/table/cell-clipboard.d.ts +23 -0
- package/dist/components/blocks/table/cell-clipboard.js +34 -0
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +37 -0
- package/dist/components/blocks/table/cell-keydown-plan.js +66 -0
- package/dist/components/blocks/table/cell-pointer.d.ts +58 -0
- package/dist/components/blocks/table/cell-pointer.js +153 -0
- package/dist/components/blocks/table/cell-render.d.ts +51 -0
- package/dist/components/blocks/table/cell-render.js +98 -0
- package/dist/components/blocks/table/cell-table-commands.d.ts +12 -0
- package/dist/components/blocks/table/cell-table-commands.js +21 -0
- package/dist/components/blocks/table/cell-x-mapping.d.ts +6 -0
- package/dist/components/blocks/table/cell-x-mapping.js +16 -0
- package/dist/components/blocks/table/selected-cells.d.ts +19 -0
- package/dist/components/blocks/table/selected-cells.js +35 -0
- package/dist/components/blocks/table/table-caret-at-point.d.ts +8 -0
- package/dist/components/blocks/table/table-caret-at-point.js +35 -0
- package/dist/components/blocks/table/table-cell-paste.d.ts +16 -0
- package/dist/components/blocks/table/table-cell-paste.js +75 -0
- package/dist/components/blocks/table/table-drag-hit-test.d.ts +5 -0
- package/dist/components/blocks/table/table-drag-hit-test.js +20 -0
- package/dist/components/blocks/table/table-drop-target.d.ts +1 -0
- package/dist/components/blocks/table/table-drop-target.js +16 -0
- package/dist/components/blocks/table/table-menu-model.d.ts +52 -0
- package/dist/components/blocks/table/table-menu-model.js +78 -0
- package/dist/components/blocks/table/table-navigation.d.ts +8 -0
- package/dist/components/blocks/table/table-navigation.js +22 -0
- package/dist/components/blocks/table/table-reorder-drag.d.ts +78 -0
- package/dist/components/blocks/table/table-reorder-drag.js +97 -0
- package/dist/components/blocks/text/TextEditableBlock.svelte +1012 -0
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +33 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +8 -0
- package/dist/components/blocks/text/click-snap-guard.js +19 -0
- package/dist/components/blocks/text/composition-seat.d.ts +50 -0
- package/dist/components/blocks/text/composition-seat.js +65 -0
- package/dist/components/blocks/text/construct-edge-delete.d.ts +47 -0
- package/dist/components/blocks/text/construct-edge-delete.js +164 -0
- package/dist/components/blocks/text/construct-reveal.d.ts +39 -0
- package/dist/components/blocks/text/construct-reveal.js +164 -0
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +91 -0
- package/dist/components/blocks/text/edge-policy-dispatch.js +457 -0
- package/dist/components/blocks/text/edge-seat.d.ts +42 -0
- package/dist/components/blocks/text/edge-seat.js +197 -0
- package/dist/components/blocks/text/hidden-suffix.d.ts +10 -0
- package/dist/components/blocks/text/hidden-suffix.js +15 -0
- package/dist/components/blocks/text/link-at-point.d.ts +33 -0
- package/dist/components/blocks/text/link-at-point.js +47 -0
- package/dist/components/blocks/text/link-source-bytes.d.ts +37 -0
- package/dist/components/blocks/text/link-source-bytes.js +161 -0
- package/dist/components/blocks/text/live-join-seam.d.ts +15 -0
- package/dist/components/blocks/text/live-join-seam.js +327 -0
- package/dist/components/blocks/text/live-selection-edit.d.ts +68 -0
- package/dist/components/blocks/text/live-selection-edit.js +120 -0
- package/dist/components/blocks/text/live-split-rebalance.d.ts +56 -0
- package/dist/components/blocks/text/live-split-rebalance.js +239 -0
- package/dist/components/blocks/text/marker-completion.d.ts +18 -0
- package/dist/components/blocks/text/marker-completion.js +29 -0
- package/dist/components/blocks/text/pending-mark-insert.d.ts +37 -0
- package/dist/components/blocks/text/pending-mark-insert.js +188 -0
- package/dist/components/blocks/text/screen-diff.d.ts +20 -0
- package/dist/components/blocks/text/screen-diff.js +39 -0
- package/dist/components/blocks/text/text-clipboard.d.ts +70 -0
- package/dist/components/blocks/text/text-clipboard.js +131 -0
- package/dist/components/blocks/text/text-keydown.d.ts +39 -0
- package/dist/components/blocks/text/text-keydown.js +80 -0
- package/dist/components/blocks/text/text-render.d.ts +67 -0
- package/dist/components/blocks/text/text-render.js +215 -0
- package/dist/components/blocks/text/widget-adjacency.d.ts +30 -0
- package/dist/components/blocks/text/widget-adjacency.js +68 -0
- package/dist/components/blocks/text/widget-interaction.d.ts +90 -0
- package/dist/components/blocks/text/widget-interaction.js +591 -0
- package/dist/components/blocks/widget-portal.d.ts +54 -0
- package/dist/components/blocks/widget-portal.js +136 -0
- package/dist/components/built-in-blocks.d.ts +7 -0
- package/dist/components/built-in-blocks.js +77 -0
- package/dist/components/editor-root-clipboard.d.ts +29 -0
- package/dist/components/editor-root-clipboard.js +105 -0
- package/dist/components/editor-root-keydown.d.ts +47 -0
- package/dist/components/editor-root-keydown.js +88 -0
- package/dist/components/editor-root-listeners.d.ts +44 -0
- package/dist/components/editor-root-listeners.js +112 -0
- package/dist/components/image/ImageOverlayHost.svelte +115 -0
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +20 -0
- package/dist/components/image/ImageProperties.svelte +153 -0
- package/dist/components/image/ImageProperties.svelte.d.ts +14 -0
- package/dist/components/image/ImageResizeHandles.svelte +188 -0
- package/dist/components/image/ImageResizeHandles.svelte.d.ts +10 -0
- package/dist/components/image/image-edit-commit.d.ts +38 -0
- package/dist/components/image/image-edit-commit.js +159 -0
- package/dist/components/image/image-resize.d.ts +11 -0
- package/dist/components/image/image-resize.js +38 -0
- package/dist/components/image/image-source-bytes.d.ts +15 -0
- package/dist/components/image/image-source-bytes.js +73 -0
- package/dist/components/image/image-widget-editing.d.ts +7 -0
- package/dist/components/image/image-widget-editing.js +41 -0
- package/dist/components/image/widget-dom.d.ts +11 -0
- package/dist/components/image/widget-dom.js +110 -0
- package/dist/components/image/widget-selection-state.svelte.d.ts +18 -0
- package/dist/components/image/widget-selection-state.svelte.js +26 -0
- package/dist/components/link-card/LinkCard.svelte +190 -0
- package/dist/components/link-card/LinkCard.svelte.d.ts +18 -0
- package/dist/components/link-card/LinkCardHost.svelte +181 -0
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +25 -0
- package/dist/components/link-card/link-card-commit.d.ts +50 -0
- package/dist/components/link-card/link-card-commit.js +134 -0
- package/dist/components/link-card/link-card-entry.d.ts +39 -0
- package/dist/components/link-card/link-card-entry.js +51 -0
- package/dist/components/link-card/link-card-state.svelte.d.ts +44 -0
- package/dist/components/link-card/link-card-state.svelte.js +46 -0
- package/dist/components/lrd-map-gate.d.ts +18 -0
- package/dist/components/lrd-map-gate.js +22 -0
- package/dist/components/paste-image-arm.d.ts +29 -0
- package/dist/components/paste-image-arm.js +61 -0
- package/dist/components/portal.d.ts +11 -0
- package/dist/components/portal.js +29 -0
- package/dist/core/directive/activate.d.ts +8 -0
- package/dist/core/directive/activate.js +25 -0
- package/dist/core/directive/container-opener.d.ts +7 -0
- package/dist/core/directive/container-opener.js +162 -0
- package/dist/core/directive/grammar.d.ts +50 -0
- package/dist/core/directive/grammar.js +88 -0
- package/dist/core/directive/kinds.d.ts +31 -0
- package/dist/core/directive/kinds.js +137 -0
- package/dist/core/directive/registry.d.ts +39 -0
- package/dist/core/directive/registry.js +49 -0
- package/dist/core/directive/text-recognizer.d.ts +8 -0
- package/dist/core/directive/text-recognizer.js +87 -0
- package/dist/core/escapable.d.ts +6 -0
- package/dist/core/escapable.js +6 -0
- package/dist/core/inline/backticks.d.ts +16 -0
- package/dist/core/inline/backticks.js +62 -0
- package/dist/core/inline/character-refs.d.ts +7 -0
- package/dist/core/inline/character-refs.js +70 -0
- package/dist/core/inline/destination-bytes.d.ts +7 -0
- package/dist/core/inline/destination-bytes.js +14 -0
- package/dist/core/inline/entity-widget.d.ts +11 -0
- package/dist/core/inline/entity-widget.js +21 -0
- package/dist/core/inline/format-toggle.d.ts +50 -0
- package/dist/core/inline/format-toggle.js +533 -0
- package/dist/core/inline/html-entities.d.ts +8 -0
- package/dist/core/inline/html-entities.js +2134 -0
- package/dist/core/inline/html-tag-grammar.d.ts +16 -0
- package/dist/core/inline/html-tag-grammar.js +58 -0
- package/dist/core/inline/image-dimensions.d.ts +6 -0
- package/dist/core/inline/image-dimensions.js +42 -0
- package/dist/core/inline/index.d.ts +42 -0
- package/dist/core/inline/index.js +77 -0
- package/dist/core/inline/inline-cache.d.ts +20 -0
- package/dist/core/inline/inline-cache.js +28 -0
- package/dist/core/inline/inline-widgets.d.ts +124 -0
- package/dist/core/inline/inline-widgets.js +131 -0
- package/dist/core/inline/link-reference-resolver.d.ts +21 -0
- package/dist/core/inline/link-reference-resolver.js +46 -0
- package/dist/core/inline/raw-html-widget.d.ts +10 -0
- package/dist/core/inline/raw-html-widget.js +22 -0
- package/dist/core/inline/scan/autolinks.d.ts +23 -0
- package/dist/core/inline/scan/autolinks.js +354 -0
- package/dist/core/inline/scan/brackets.d.ts +11 -0
- package/dist/core/inline/scan/brackets.js +284 -0
- package/dist/core/inline/scan/code-spans.d.ts +7 -0
- package/dist/core/inline/scan/code-spans.js +27 -0
- package/dist/core/inline/scan/emphasis.d.ts +10 -0
- package/dist/core/inline/scan/emphasis.js +276 -0
- package/dist/core/inline/scan/index.d.ts +7 -0
- package/dist/core/inline/scan/index.js +176 -0
- package/dist/core/inline/scan/plugin-syntax.d.ts +62 -0
- package/dist/core/inline/scan/plugin-syntax.js +150 -0
- package/dist/core/inline/scan/scan-state.d.ts +47 -0
- package/dist/core/inline/scan/scan-state.js +48 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +14 -0
- package/dist/core/inline/scan/simple-nodes.js +53 -0
- package/dist/core/inline/scan/url.d.ts +12 -0
- package/dist/core/inline/scan/url.js +82 -0
- package/dist/core/inline/transparency.d.ts +8 -0
- package/dist/core/inline/transparency.js +39 -0
- package/dist/core/inline/visibility.d.ts +81 -0
- package/dist/core/inline/visibility.js +144 -0
- package/dist/core/inline/walk.d.ts +14 -0
- package/dist/core/inline/walk.js +29 -0
- package/dist/core/inline-render.d.ts +48 -0
- package/dist/core/inline-render.js +322 -0
- package/dist/core/lines.d.ts +44 -0
- package/dist/core/lines.js +91 -0
- package/dist/core/node-views.d.ts +22 -0
- package/dist/core/node-views.js +8 -0
- package/dist/core/nodes.d.ts +297 -0
- package/dist/core/nodes.js +83 -0
- package/dist/core/parser.d.ts +68 -0
- package/dist/core/parser.js +189 -0
- package/dist/core/parsers/blockquote.d.ts +17 -0
- package/dist/core/parsers/blockquote.js +69 -0
- package/dist/core/parsers/built-in-openers.d.ts +8 -0
- package/dist/core/parsers/built-in-openers.js +124 -0
- package/dist/core/parsers/fence-syntax.d.ts +24 -0
- package/dist/core/parsers/fence-syntax.js +44 -0
- package/dist/core/parsers/fenced-code.d.ts +7 -0
- package/dist/core/parsers/fenced-code.js +29 -0
- package/dist/core/parsers/heading.d.ts +3 -0
- package/dist/core/parsers/heading.js +6 -0
- package/dist/core/parsers/html-block.d.ts +17 -0
- package/dist/core/parsers/html-block.js +94 -0
- package/dist/core/parsers/indented-code.d.ts +4 -0
- package/dist/core/parsers/indented-code.js +41 -0
- package/dist/core/parsers/link-reference.d.ts +7 -0
- package/dist/core/parsers/link-reference.js +152 -0
- package/dist/core/parsers/list.d.ts +19 -0
- package/dist/core/parsers/list.js +133 -0
- package/dist/core/parsers/paragraph.d.ts +10 -0
- package/dist/core/parsers/paragraph.js +42 -0
- package/dist/core/parsers/table-completion.d.ts +13 -0
- package/dist/core/parsers/table-completion.js +48 -0
- package/dist/core/parsers/table.d.ts +18 -0
- package/dist/core/parsers/table.js +110 -0
- package/dist/core/parsers/thematic-break.d.ts +1 -0
- package/dist/core/parsers/thematic-break.js +19 -0
- package/dist/core/serializer.d.ts +15 -0
- package/dist/core/serializer.js +11 -0
- package/dist/core/terminator-escalation.d.ts +8 -0
- package/dist/core/terminator-escalation.js +18 -0
- package/dist/core/url-policy.d.ts +14 -0
- package/dist/core/url-policy.js +44 -0
- package/dist/cursor/content-offsets.d.ts +29 -0
- package/dist/cursor/content-offsets.js +151 -0
- package/dist/cursor/coordinate-spaces.d.ts +65 -0
- package/dist/cursor/coordinate-spaces.js +66 -0
- package/dist/cursor/dom-walk.d.ts +18 -0
- package/dist/cursor/dom-walk.js +31 -0
- package/dist/cursor/edge-affinity.d.ts +44 -0
- package/dist/cursor/edge-affinity.js +60 -0
- package/dist/cursor/focused-caret.d.ts +10 -0
- package/dist/cursor/focused-caret.js +24 -0
- package/dist/cursor/height-model.d.ts +24 -0
- package/dist/cursor/height-model.js +72 -0
- package/dist/cursor/height-oracle.d.ts +24 -0
- package/dist/cursor/height-oracle.js +94 -0
- package/dist/cursor/overlay-rects.d.ts +8 -0
- package/dist/cursor/overlay-rects.js +19 -0
- package/dist/cursor/overlay-remeasure.d.ts +17 -0
- package/dist/cursor/overlay-remeasure.js +31 -0
- package/dist/cursor/pending-marks.d.ts +24 -0
- package/dist/cursor/pending-marks.js +36 -0
- package/dist/cursor/point-offset.d.ts +21 -0
- package/dist/cursor/point-offset.js +48 -0
- package/dist/cursor/reveal-anchor.d.ts +30 -0
- package/dist/cursor/reveal-anchor.js +31 -0
- package/dist/cursor/reveal-source.d.ts +35 -0
- package/dist/cursor/reveal-source.js +51 -0
- package/dist/cursor/scroll-ancestors.d.ts +28 -0
- package/dist/cursor/scroll-ancestors.js +89 -0
- package/dist/cursor/scrollport.d.ts +20 -0
- package/dist/cursor/scrollport.js +41 -0
- package/dist/cursor/sticky-column.d.ts +35 -0
- package/dist/cursor/sticky-column.js +64 -0
- package/dist/cursor/sticky-measure.d.ts +16 -0
- package/dist/cursor/sticky-measure.js +97 -0
- package/dist/cursor/typography-estimates.d.ts +21 -0
- package/dist/cursor/typography-estimates.js +21 -0
- package/dist/cursor/visual-lines.d.ts +25 -0
- package/dist/cursor/visual-lines.js +125 -0
- package/dist/cursor/widget-offset.d.ts +132 -0
- package/dist/cursor/widget-offset.js +543 -0
- package/dist/debug/diagnostics-report.d.ts +17 -0
- package/dist/debug/diagnostics-report.js +25 -0
- package/dist/debug/dump-tree.d.ts +6 -0
- package/dist/debug/dump-tree.js +114 -0
- package/dist/debug/inspect.d.ts +19 -0
- package/dist/debug/inspect.js +116 -0
- package/dist/debug/interaction-trace.d.ts +39 -0
- package/dist/debug/interaction-trace.js +105 -0
- package/dist/debug/operations-log.d.ts +14 -0
- package/dist/debug/operations-log.js +30 -0
- package/dist/decorations/buckets.d.ts +40 -0
- package/dist/decorations/buckets.js +87 -0
- package/dist/decorations/decoration-state.svelte.d.ts +20 -0
- package/dist/decorations/decoration-state.svelte.js +195 -0
- package/dist/decorations/island-dom.d.ts +35 -0
- package/dist/decorations/island-dom.js +148 -0
- package/dist/decorations/reserved-attrs.d.ts +12 -0
- package/dist/decorations/reserved-attrs.js +47 -0
- package/dist/decorations/types.d.ts +68 -0
- package/dist/decorations/types.js +5 -0
- package/dist/decorations/widget-dom.d.ts +15 -0
- package/dist/decorations/widget-dom.js +35 -0
- package/dist/dev-warn.d.ts +13 -0
- package/dist/dev-warn.js +28 -0
- package/dist/editor-actions/ancestry-folds.d.ts +32 -0
- package/dist/editor-actions/ancestry-folds.js +106 -0
- package/dist/editor-actions/block-edit-core.d.ts +29 -0
- package/dist/editor-actions/block-edit-core.js +277 -0
- package/dist/editor-actions/block-edit-scope.d.ts +79 -0
- package/dist/editor-actions/block-edit-scope.js +76 -0
- package/dist/editor-actions/block-edit.d.ts +8 -0
- package/dist/editor-actions/block-edit.js +111 -0
- package/dist/editor-actions/commit/history.d.ts +9 -0
- package/dist/editor-actions/commit/history.js +77 -0
- package/dist/editor-actions/commit/text-batch.d.ts +34 -0
- package/dist/editor-actions/commit/text-batch.js +61 -0
- package/dist/editor-actions/commit/undo-controller.d.ts +7 -0
- package/dist/editor-actions/commit/undo-controller.js +570 -0
- package/dist/editor-actions/container-block-component.d.ts +85 -0
- package/dist/editor-actions/container-block-component.js +228 -0
- package/dist/editor-actions/container-edit.d.ts +7 -0
- package/dist/editor-actions/container-edit.js +49 -0
- package/dist/editor-actions/container-exit-overrides.d.ts +16 -0
- package/dist/editor-actions/container-exit-overrides.js +38 -0
- package/dist/editor-actions/deps.d.ts +60 -0
- package/dist/editor-actions/deps.js +1 -0
- package/dist/editor-actions/enter-completion.d.ts +25 -0
- package/dist/editor-actions/enter-completion.js +76 -0
- package/dist/editor-actions/focus/focus-dispatch.d.ts +36 -0
- package/dist/editor-actions/focus/focus-dispatch.js +106 -0
- package/dist/editor-actions/focus/focus-landing.d.ts +7 -0
- package/dist/editor-actions/focus/focus-landing.js +39 -0
- package/dist/editor-actions/focus/focus.d.ts +7 -0
- package/dist/editor-actions/focus/focus.js +74 -0
- package/dist/editor-actions/index.d.ts +15 -0
- package/dist/editor-actions/index.js +19 -0
- package/dist/editor-actions/inline-range-commit.d.ts +20 -0
- package/dist/editor-actions/inline-range-commit.js +63 -0
- package/dist/editor-actions/list-context.d.ts +25 -0
- package/dist/editor-actions/list-context.js +285 -0
- package/dist/editor-actions/list-overrides.d.ts +13 -0
- package/dist/editor-actions/list-overrides.js +26 -0
- package/dist/editor-actions/merge-fallback.d.ts +19 -0
- package/dist/editor-actions/merge-fallback.js +27 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +65 -0
- package/dist/editor-actions/nested/nested-actions.js +59 -0
- package/dist/editor-actions/nested/nested-block-edit.d.ts +10 -0
- package/dist/editor-actions/nested/nested-block-edit.js +181 -0
- package/dist/editor-actions/nested/nested-focus.d.ts +9 -0
- package/dist/editor-actions/nested/nested-focus.js +30 -0
- package/dist/editor-actions/paste-coordinator.d.ts +4 -0
- package/dist/editor-actions/paste-coordinator.js +20 -0
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +25 -0
- package/dist/editor-actions/plugin/chrome-leaf.js +80 -0
- package/dist/editor-actions/plugin/container.d.ts +137 -0
- package/dist/editor-actions/plugin/container.js +351 -0
- package/dist/editor-actions/plugin/directive-container.d.ts +13 -0
- package/dist/editor-actions/plugin/directive-container.js +31 -0
- package/dist/editor-actions/reorder-action.d.ts +17 -0
- package/dist/editor-actions/reorder-action.js +104 -0
- package/dist/editor-actions/reorder-drag.d.ts +34 -0
- package/dist/editor-actions/reorder-drag.js +152 -0
- package/dist/editor-actions/replacement-focus.d.ts +27 -0
- package/dist/editor-actions/replacement-focus.js +60 -0
- package/dist/editor-actions/search-replace.d.ts +6 -0
- package/dist/editor-actions/search-replace.js +145 -0
- package/dist/editor-actions/table-context.d.ts +34 -0
- package/dist/editor-actions/table-context.js +292 -0
- package/dist/editor-actions/unwrap-strategies.d.ts +14 -0
- package/dist/editor-actions/unwrap-strategies.js +131 -0
- package/dist/editor-actions/whole-block-focus-surface.d.ts +51 -0
- package/dist/editor-actions/whole-block-focus-surface.js +171 -0
- package/dist/editor-events.d.ts +89 -0
- package/dist/editor-events.js +96 -0
- package/dist/editor-keys.d.ts +197 -0
- package/dist/editor-keys.js +40 -0
- package/dist/editor-props.d.ts +164 -0
- package/dist/editor-props.js +1 -0
- package/dist/editor-rects.d.ts +58 -0
- package/dist/editor-rects.js +114 -0
- package/dist/env.d.ts +12 -0
- package/dist/env.js +20 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +19 -0
- package/dist/invariants/commit-paths.d.ts +10 -0
- package/dist/invariants/commit-paths.js +25 -0
- package/dist/invariants/commit-scope.d.ts +9 -0
- package/dist/invariants/commit-scope.js +16 -0
- package/dist/invariants/context-keys.d.ts +7 -0
- package/dist/invariants/context-keys.js +14 -0
- package/dist/invariants/descriptor.d.ts +10 -0
- package/dist/invariants/descriptor.js +24 -0
- package/dist/invariants/inline-transitions.d.ts +23 -0
- package/dist/invariants/inline-transitions.js +52 -0
- package/dist/invariants/install.d.ts +36 -0
- package/dist/invariants/install.js +66 -0
- package/dist/invariants/landable-caret.d.ts +12 -0
- package/dist/invariants/landable-caret.js +31 -0
- package/dist/invariants/marker-css-parity.d.ts +10 -0
- package/dist/invariants/marker-css-parity.js +87 -0
- package/dist/invariants/node-shape.d.ts +44 -0
- package/dist/invariants/node-shape.js +258 -0
- package/dist/invariants/registry.d.ts +126 -0
- package/dist/invariants/registry.js +349 -0
- package/dist/invariants/render-fidelity.d.ts +8 -0
- package/dist/invariants/render-fidelity.js +33 -0
- package/dist/invariants/selection-endpoints.d.ts +19 -0
- package/dist/invariants/selection-endpoints.js +78 -0
- package/dist/invariants/single-node-sink.d.ts +9 -0
- package/dist/invariants/single-node-sink.js +16 -0
- package/dist/invariants/snapshot-integrity.d.ts +17 -0
- package/dist/invariants/snapshot-integrity.js +24 -0
- package/dist/invariants/split-landing.d.ts +8 -0
- package/dist/invariants/split-landing.js +15 -0
- package/dist/invariants/structural-descriptor.d.ts +21 -0
- package/dist/invariants/structural-descriptor.js +50 -0
- package/dist/perf/instruments.d.ts +49 -0
- package/dist/perf/instruments.js +154 -0
- package/dist/perf/use-mount-gauge.svelte.d.ts +1 -0
- package/dist/perf/use-mount-gauge.svelte.js +15 -0
- package/dist/plugin.d.ts +102 -0
- package/dist/plugin.js +156 -0
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +144 -0
- package/dist/plugins/admonitions/AdmonitionBlock.svelte.d.ts +11 -0
- package/dist/plugins/admonitions/admonition-kind.d.ts +8 -0
- package/dist/plugins/admonitions/admonition-kind.js +97 -0
- package/dist/plugins/admonitions/convert-document.d.ts +11 -0
- package/dist/plugins/admonitions/convert-document.js +39 -0
- package/dist/plugins/admonitions/gh-alert.d.ts +13 -0
- package/dist/plugins/admonitions/gh-alert.js +83 -0
- package/dist/plugins/admonitions/github-alert-kind.d.ts +12 -0
- package/dist/plugins/admonitions/github-alert-kind.js +125 -0
- package/dist/plugins/admonitions/index.d.ts +6 -0
- package/dist/plugins/admonitions/index.js +8 -0
- package/dist/plugins/admonitions/kinds.d.ts +26 -0
- package/dist/plugins/admonitions/kinds.js +18 -0
- package/dist/plugins/admonitions/register.d.ts +7 -0
- package/dist/plugins/admonitions/register.js +12 -0
- package/dist/plugins/details/DetailsBlock.svelte +129 -0
- package/dist/plugins/details/DetailsBlock.svelte.d.ts +11 -0
- package/dist/plugins/details/details-disclosure.svelte.d.ts +17 -0
- package/dist/plugins/details/details-disclosure.svelte.js +24 -0
- package/dist/plugins/details/details-kind.d.ts +25 -0
- package/dist/plugins/details/details-kind.js +237 -0
- package/dist/plugins/details/index.d.ts +2 -0
- package/dist/plugins/details/index.js +2 -0
- package/dist/plugins/details/register.d.ts +6 -0
- package/dist/plugins/details/register.js +15 -0
- package/dist/plugins/emoji/emoji-plugin.d.ts +2 -0
- package/dist/plugins/emoji/emoji-plugin.js +10 -0
- package/dist/plugins/emoji/emoji-recognizer.d.ts +18 -0
- package/dist/plugins/emoji/emoji-recognizer.js +63 -0
- package/dist/plugins/emoji/emoji-table.d.ts +1 -0
- package/dist/plugins/emoji/emoji-table.js +1919 -0
- package/dist/plugins/emoji/index.d.ts +3 -0
- package/dist/plugins/emoji/index.js +4 -0
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +103 -0
- package/dist/plugins/footnotes/FootnoteDefinition.svelte.d.ts +13 -0
- package/dist/plugins/footnotes/FootnoteReference.svelte +50 -0
- package/dist/plugins/footnotes/FootnoteReference.svelte.d.ts +4 -0
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +4 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +14 -0
- package/dist/plugins/footnotes/footnote-definition.js +147 -0
- package/dist/plugins/footnotes/footnote-lookup.d.ts +9 -0
- package/dist/plugins/footnotes/footnote-lookup.js +33 -0
- package/dist/plugins/footnotes/footnote-numbering.d.ts +23 -0
- package/dist/plugins/footnotes/footnote-numbering.js +78 -0
- package/dist/plugins/footnotes/footnote-reference.d.ts +7 -0
- package/dist/plugins/footnotes/footnote-reference.js +54 -0
- package/dist/plugins/footnotes/footnotes-plugin.d.ts +7 -0
- package/dist/plugins/footnotes/footnotes-plugin.js +17 -0
- package/dist/plugins/footnotes/index.d.ts +5 -0
- package/dist/plugins/footnotes/index.js +6 -0
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +17 -0
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +31 -0
- package/dist/plugins/highlight-occurrences/index.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/index.js +1 -0
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +26 -0
- package/dist/plugins/highlight-occurrences/occurrence-source.js +54 -0
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +33 -0
- package/dist/plugins/highlight-occurrences/occurrences.js +108 -0
- package/dist/plugins/latex/BlockMath.svelte +119 -0
- package/dist/plugins/latex/BlockMath.svelte.d.ts +21 -0
- package/dist/plugins/latex/MathInline.svelte +28 -0
- package/dist/plugins/latex/MathInline.svelte.d.ts +4 -0
- package/dist/plugins/latex/index.d.ts +3 -0
- package/dist/plugins/latex/index.js +4 -0
- package/dist/plugins/latex/latex-kind.d.ts +17 -0
- package/dist/plugins/latex/latex-kind.js +224 -0
- package/dist/plugins/latex/math-completion.d.ts +10 -0
- package/dist/plugins/latex/math-completion.js +19 -0
- package/dist/plugins/latex/math-renderer.d.ts +26 -0
- package/dist/plugins/latex/math-renderer.js +42 -0
- package/dist/plugins/latex/register.d.ts +10 -0
- package/dist/plugins/latex/register.js +23 -0
- package/dist/plugins/latex/renderer.d.ts +13 -0
- package/dist/plugins/latex/renderer.js +34 -0
- package/dist/plugins/mermaid/MermaidBlock.svelte +572 -0
- package/dist/plugins/mermaid/MermaidBlock.svelte.d.ts +11 -0
- package/dist/plugins/mermaid/index.d.ts +3 -0
- package/dist/plugins/mermaid/index.js +3 -0
- package/dist/plugins/mermaid/mermaid-kind.d.ts +38 -0
- package/dist/plugins/mermaid/mermaid-kind.js +176 -0
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +28 -0
- package/dist/plugins/mermaid/mermaid-renderer.js +35 -0
- package/dist/plugins/mermaid/register.d.ts +10 -0
- package/dist/plugins/mermaid/register.js +20 -0
- package/dist/plugins/mermaid/renderer.d.ts +11 -0
- package/dist/plugins/mermaid/renderer.js +53 -0
- package/dist/plugins/parrot/ParrotBlock.svelte +342 -0
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +21 -0
- package/dist/plugins/parrot/index.d.ts +1 -0
- package/dist/plugins/parrot/index.js +2 -0
- package/dist/plugins/parrot/parrot-plugin.d.ts +3 -0
- package/dist/plugins/parrot/parrot-plugin.js +49 -0
- package/dist/plugins/toc/TocBlock.svelte +218 -0
- package/dist/plugins/toc/TocBlock.svelte.d.ts +24 -0
- package/dist/plugins/toc/heading-outline.d.ts +28 -0
- package/dist/plugins/toc/heading-outline.js +65 -0
- package/dist/plugins/toc/index.d.ts +2 -0
- package/dist/plugins/toc/index.js +2 -0
- package/dist/plugins/toc/navigation-queue.d.ts +12 -0
- package/dist/plugins/toc/navigation-queue.js +21 -0
- package/dist/plugins/toc/toc-plugin.d.ts +16 -0
- package/dist/plugins/toc/toc-plugin.js +71 -0
- package/dist/presentation-mode.d.ts +32 -0
- package/dist/presentation-mode.js +50 -0
- package/dist/reactivity/block-list-state.svelte.d.ts +22 -0
- package/dist/reactivity/block-list-state.svelte.js +46 -0
- package/dist/reactivity/block-window.svelte.d.ts +41 -0
- package/dist/reactivity/block-window.svelte.js +93 -0
- package/dist/reactivity/content-version.svelte.d.ts +14 -0
- package/dist/reactivity/content-version.svelte.js +16 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +100 -0
- package/dist/reactivity/list-windowing.svelte.js +402 -0
- package/dist/reactivity/measure-batch.d.ts +15 -0
- package/dist/reactivity/measure-batch.js +18 -0
- package/dist/reactivity/publish-ref.svelte.d.ts +54 -0
- package/dist/reactivity/publish-ref.svelte.js +128 -0
- package/dist/reactivity/scope-geometry.d.ts +18 -0
- package/dist/reactivity/scope-geometry.js +29 -0
- package/dist/reactivity/state-registry.d.ts +10 -0
- package/dist/reactivity/state-registry.js +44 -0
- package/dist/reactivity/use-container-windowing.svelte.d.ts +35 -0
- package/dist/reactivity/use-container-windowing.svelte.js +95 -0
- package/dist/reactivity/window-slice.d.ts +11 -0
- package/dist/reactivity/window-slice.js +9 -0
- package/dist/scan-index.d.ts +11 -0
- package/dist/scan-index.js +27 -0
- package/dist/schema/block-commands.d.ts +105 -0
- package/dist/schema/block-commands.js +179 -0
- package/dist/schema/block-completions.d.ts +33 -0
- package/dist/schema/block-completions.js +49 -0
- package/dist/schema/block-component-registry.d.ts +33 -0
- package/dist/schema/block-component-registry.js +33 -0
- package/dist/schema/block-kind-descriptor.d.ts +281 -0
- package/dist/schema/block-kind-descriptor.js +187 -0
- package/dist/schema/block-openers.d.ts +94 -0
- package/dist/schema/block-openers.js +150 -0
- package/dist/schema/built-in-descriptors.d.ts +8 -0
- package/dist/schema/built-in-descriptors.js +560 -0
- package/dist/schema/child-spans.d.ts +25 -0
- package/dist/schema/child-spans.js +161 -0
- package/dist/schema/closure.d.ts +39 -0
- package/dist/schema/closure.js +55 -0
- package/dist/schema/command-id.d.ts +20 -0
- package/dist/schema/command-id.js +42 -0
- package/dist/schema/commands.d.ts +147 -0
- package/dist/schema/commands.js +294 -0
- package/dist/schema/container-raw.d.ts +21 -0
- package/dist/schema/container-raw.js +43 -0
- package/dist/schema/container-rebuilders.d.ts +32 -0
- package/dist/schema/container-rebuilders.js +95 -0
- package/dist/schema/define-plugin-block.d.ts +15 -0
- package/dist/schema/define-plugin-block.js +18 -0
- package/dist/schema/fenced-code-raw.d.ts +43 -0
- package/dist/schema/fenced-code-raw.js +220 -0
- package/dist/schema/global-commands.d.ts +11 -0
- package/dist/schema/global-commands.js +40 -0
- package/dist/schema/inline-construct-policy.d.ts +131 -0
- package/dist/schema/inline-construct-policy.js +96 -0
- package/dist/schema/keybinding-overrides.d.ts +39 -0
- package/dist/schema/keybinding-overrides.js +43 -0
- package/dist/schema/keybindings.d.ts +36 -0
- package/dist/schema/keybindings.js +75 -0
- package/dist/schema/merge-rules.d.ts +28 -0
- package/dist/schema/merge-rules.js +57 -0
- package/dist/schema/opener-priorities.d.ts +16 -0
- package/dist/schema/opener-priorities.js +16 -0
- package/dist/schema/operations.d.ts +110 -0
- package/dist/schema/operations.js +6 -0
- package/dist/schema/plugin-activation.d.ts +13 -0
- package/dist/schema/plugin-activation.js +18 -0
- package/dist/schema/plugin-editor-context.d.ts +33 -0
- package/dist/schema/plugin-editor-context.js +65 -0
- package/dist/schema/plugin-install.d.ts +58 -0
- package/dist/schema/plugin-install.js +132 -0
- package/dist/schema/plugin-kind.d.ts +21 -0
- package/dist/schema/plugin-kind.js +86 -0
- package/dist/schema/plugin-name.d.ts +1 -0
- package/dist/schema/plugin-name.js +7 -0
- package/dist/schema/register-once.d.ts +9 -0
- package/dist/schema/register-once.js +35 -0
- package/dist/schema/registration-checks.d.ts +32 -0
- package/dist/schema/registration-checks.js +122 -0
- package/dist/schema/registration-pending.d.ts +28 -0
- package/dist/schema/registration-pending.js +48 -0
- package/dist/schema/registry-reset.d.ts +7 -0
- package/dist/schema/registry-reset.js +30 -0
- package/dist/schema/registry-view.d.ts +30 -0
- package/dist/schema/registry-view.js +39 -0
- package/dist/schema/reserved-chords.d.ts +35 -0
- package/dist/schema/reserved-chords.js +313 -0
- package/dist/schema/reserved-chrome.d.ts +23 -0
- package/dist/schema/reserved-chrome.js +33 -0
- package/dist/schema/table-cell-raw.d.ts +14 -0
- package/dist/schema/table-cell-raw.js +30 -0
- package/dist/schema/whole-block-unit.d.ts +8 -0
- package/dist/schema/whole-block-unit.js +12 -0
- package/dist/search/document-scan.d.ts +22 -0
- package/dist/search/document-scan.js +39 -0
- package/dist/search/matcher.d.ts +31 -0
- package/dist/search/matcher.js +70 -0
- package/dist/search/regex-executor.d.ts +41 -0
- package/dist/search/regex-executor.js +165 -0
- package/dist/search/replace.d.ts +15 -0
- package/dist/search/replace.js +29 -0
- package/dist/search/search-state.svelte.d.ts +59 -0
- package/dist/search/search-state.svelte.js +231 -0
- package/dist/selection/autoscroll.d.ts +26 -0
- package/dist/selection/autoscroll.js +91 -0
- package/dist/selection/block-hit-test.d.ts +37 -0
- package/dist/selection/block-hit-test.js +59 -0
- package/dist/selection/caret-doors.d.ts +20 -0
- package/dist/selection/caret-doors.js +44 -0
- package/dist/selection/caret-restore.d.ts +15 -0
- package/dist/selection/caret-restore.js +32 -0
- package/dist/selection/char-endpoint-snap.d.ts +15 -0
- package/dist/selection/char-endpoint-snap.js +39 -0
- package/dist/selection/clipboard-text.d.ts +13 -0
- package/dist/selection/clipboard-text.js +314 -0
- package/dist/selection/cross-block/clipboard.d.ts +14 -0
- package/dist/selection/cross-block/clipboard.js +20 -0
- package/dist/selection/cross-block/dispatch.d.ts +78 -0
- package/dist/selection/cross-block/dispatch.js +57 -0
- package/dist/selection/cross-block/format-range.d.ts +38 -0
- package/dist/selection/cross-block/format-range.js +193 -0
- package/dist/selection/cross-block/format-toggle.d.ts +27 -0
- package/dist/selection/cross-block/format-toggle.js +109 -0
- package/dist/selection/cross-block/keydown.d.ts +11 -0
- package/dist/selection/cross-block/keydown.js +339 -0
- package/dist/selection/cross-block/ops.d.ts +56 -0
- package/dist/selection/cross-block/ops.js +210 -0
- package/dist/selection/cross-block/paste.d.ts +8 -0
- package/dist/selection/cross-block/paste.js +156 -0
- package/dist/selection/cross-block/pointer.d.ts +19 -0
- package/dist/selection/cross-block/pointer.js +80 -0
- package/dist/selection/cross-block/type-replace.d.ts +10 -0
- package/dist/selection/cross-block/type-replace.js +129 -0
- package/dist/selection/dead-space-caret.d.ts +39 -0
- package/dist/selection/dead-space-caret.js +173 -0
- package/dist/selection/drag-pointer.d.ts +22 -0
- package/dist/selection/drag-pointer.js +89 -0
- package/dist/selection/gap-caret.d.ts +47 -0
- package/dist/selection/gap-caret.js +72 -0
- package/dist/selection/keyboard-extend.d.ts +43 -0
- package/dist/selection/keyboard-extend.js +257 -0
- package/dist/selection/native-bridge.d.ts +47 -0
- package/dist/selection/native-bridge.js +204 -0
- package/dist/selection/nearest-block.d.ts +43 -0
- package/dist/selection/nearest-block.js +73 -0
- package/dist/selection/path-lookup.d.ts +32 -0
- package/dist/selection/path-lookup.js +132 -0
- package/dist/selection/path-math.d.ts +35 -0
- package/dist/selection/path-math.js +90 -0
- package/dist/selection/pointer-session.d.ts +43 -0
- package/dist/selection/pointer-session.js +111 -0
- package/dist/selection/primitives.d.ts +75 -0
- package/dist/selection/primitives.js +91 -0
- package/dist/selection/range-delete-ceremony.d.ts +85 -0
- package/dist/selection/range-delete-ceremony.js +197 -0
- package/dist/selection/range-delete-chrome.d.ts +39 -0
- package/dist/selection/range-delete-chrome.js +105 -0
- package/dist/selection/range-delete-table-coverage.d.ts +28 -0
- package/dist/selection/range-delete-table-coverage.js +168 -0
- package/dist/selection/range-delete-table.d.ts +16 -0
- package/dist/selection/range-delete-table.js +347 -0
- package/dist/selection/range-delete.d.ts +33 -0
- package/dist/selection/range-delete.js +121 -0
- package/dist/selection/selection-description.d.ts +7 -0
- package/dist/selection/selection-description.js +18 -0
- package/dist/selection/selection-restore.d.ts +46 -0
- package/dist/selection/selection-restore.js +66 -0
- package/dist/selection/selection-state.svelte.d.ts +72 -0
- package/dist/selection/selection-state.svelte.js +247 -0
- package/dist/selection/shared-keydown.d.ts +61 -0
- package/dist/selection/shared-keydown.js +150 -0
- package/dist/selection/table-endpoint-snap.d.ts +55 -0
- package/dist/selection/table-endpoint-snap.js +143 -0
- package/dist/selection/table-rect-extend.d.ts +23 -0
- package/dist/selection/table-rect-extend.js +46 -0
- package/dist/selection/widget-range-paint.d.ts +12 -0
- package/dist/selection/widget-range-paint.js +44 -0
- package/dist/styles/editor-theme.css +151 -0
- package/dist/styles/editor.css +585 -0
- package/dist/testing/conformance-core.d.ts +45 -0
- package/dist/testing/conformance-core.js +105 -0
- package/dist/testing/container-conformance.d.ts +137 -0
- package/dist/testing/container-conformance.js +533 -0
- package/dist/testing/headless-actions.d.ts +37 -0
- package/dist/testing/headless-actions.js +118 -0
- package/dist/testing/inline-conformance.d.ts +50 -0
- package/dist/testing/inline-conformance.js +442 -0
- package/dist/testing/kind-conformance.d.ts +54 -0
- package/dist/testing/kind-conformance.js +325 -0
- package/dist/testing/mount-dom-stubs.d.ts +8 -0
- package/dist/testing/mount-dom-stubs.js +19 -0
- package/dist/testing/parse-convergence.d.ts +14 -0
- package/dist/testing/parse-convergence.js +81 -0
- package/dist/testing.d.ts +20 -0
- package/dist/testing.js +61 -0
- package/dist/tree-operations/blockquote.d.ts +18 -0
- package/dist/tree-operations/blockquote.js +59 -0
- package/dist/tree-operations/children.d.ts +17 -0
- package/dist/tree-operations/children.js +56 -0
- package/dist/tree-operations/cleanup.d.ts +10 -0
- package/dist/tree-operations/cleanup.js +25 -0
- package/dist/tree-operations/clone.d.ts +5 -0
- package/dist/tree-operations/clone.js +43 -0
- package/dist/tree-operations/container-lift.d.ts +9 -0
- package/dist/tree-operations/container-lift.js +29 -0
- package/dist/tree-operations/index.d.ts +16 -0
- package/dist/tree-operations/index.js +14 -0
- package/dist/tree-operations/list/empty-check.d.ts +7 -0
- package/dist/tree-operations/list/empty-check.js +19 -0
- package/dist/tree-operations/list/exit-replacement.d.ts +13 -0
- package/dist/tree-operations/list/exit-replacement.js +49 -0
- package/dist/tree-operations/list/item-partition.d.ts +13 -0
- package/dist/tree-operations/list/item-partition.js +33 -0
- package/dist/tree-operations/list/list-builders.d.ts +44 -0
- package/dist/tree-operations/list/list-builders.js +129 -0
- package/dist/tree-operations/list/ordered-markers.d.ts +36 -0
- package/dist/tree-operations/list/ordered-markers.js +114 -0
- package/dist/tree-operations/list/reconcile-task.d.ts +12 -0
- package/dist/tree-operations/list/reconcile-task.js +47 -0
- package/dist/tree-operations/list/sublist-separator.d.ts +13 -0
- package/dist/tree-operations/list/sublist-separator.js +34 -0
- package/dist/tree-operations/list/terminator.d.ts +17 -0
- package/dist/tree-operations/list/terminator.js +60 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +29 -0
- package/dist/tree-operations/list/unwrap-merge.js +202 -0
- package/dist/tree-operations/node-ops.d.ts +296 -0
- package/dist/tree-operations/node-ops.js +1428 -0
- package/dist/tree-operations/parse-block.d.ts +3 -0
- package/dist/tree-operations/parse-block.js +8 -0
- package/dist/tree-operations/paste/apply.d.ts +12 -0
- package/dist/tree-operations/paste/apply.js +75 -0
- package/dist/tree-operations/paste/body-write.d.ts +19 -0
- package/dist/tree-operations/paste/body-write.js +53 -0
- package/dist/tree-operations/paste/container-match.d.ts +32 -0
- package/dist/tree-operations/paste/container-match.js +238 -0
- package/dist/tree-operations/paste/container-paste.d.ts +10 -0
- package/dist/tree-operations/paste/container-paste.js +27 -0
- package/dist/tree-operations/paste/dispatch.d.ts +61 -0
- package/dist/tree-operations/paste/dispatch.js +138 -0
- package/dist/tree-operations/paste/find-enclosing-list.d.ts +8 -0
- package/dist/tree-operations/paste/find-enclosing-list.js +30 -0
- package/dist/tree-operations/paste/focus-target.d.ts +27 -0
- package/dist/tree-operations/paste/focus-target.js +40 -0
- package/dist/tree-operations/paste/hooks.d.ts +17 -0
- package/dist/tree-operations/paste/hooks.js +80 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +29 -0
- package/dist/tree-operations/paste/list-absorb.js +106 -0
- package/dist/tree-operations/paste/list-break-out.d.ts +42 -0
- package/dist/tree-operations/paste/list-break-out.js +136 -0
- package/dist/tree-operations/paste/parent-scope.d.ts +17 -0
- package/dist/tree-operations/paste/parent-scope.js +35 -0
- package/dist/tree-operations/paste/paste-deps.d.ts +20 -0
- package/dist/tree-operations/paste/paste-deps.js +6 -0
- package/dist/tree-operations/paste/paste-replacement.d.ts +8 -0
- package/dist/tree-operations/paste/paste-replacement.js +60 -0
- package/dist/tree-operations/paste/paste-transforms.d.ts +25 -0
- package/dist/tree-operations/paste/paste-transforms.js +72 -0
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +29 -0
- package/dist/tree-operations/paste/replace-block-at-parent.js +75 -0
- package/dist/tree-operations/paste/strategy.d.ts +9 -0
- package/dist/tree-operations/paste/strategy.js +20 -0
- package/dist/tree-operations/paste/table-slice.d.ts +10 -0
- package/dist/tree-operations/paste/table-slice.js +39 -0
- package/dist/tree-operations/paste-surfaces.d.ts +61 -0
- package/dist/tree-operations/paste-surfaces.js +15 -0
- package/dist/tree-operations/path-mutate.d.ts +12 -0
- package/dist/tree-operations/path-mutate.js +20 -0
- package/dist/tree-operations/reorder-unit.d.ts +17 -0
- package/dist/tree-operations/reorder-unit.js +37 -0
- package/dist/tree-operations/reorder.d.ts +13 -0
- package/dist/tree-operations/reorder.js +57 -0
- package/dist/tree-operations/sharing.d.ts +18 -0
- package/dist/tree-operations/sharing.js +14 -0
- package/dist/tree-operations/splice-many.d.ts +9 -0
- package/dist/tree-operations/splice-many.js +22 -0
- package/dist/tree-operations/structural-change.d.ts +65 -0
- package/dist/tree-operations/structural-change.js +117 -0
- package/dist/tree-operations/sub-table-copy.d.ts +6 -0
- package/dist/tree-operations/sub-table-copy.js +43 -0
- package/dist/tree-operations/table-mutations.d.ts +17 -0
- package/dist/tree-operations/table-mutations.js +101 -0
- package/dist/tree-operations/unshare.d.ts +101 -0
- package/dist/tree-operations/unshare.js +248 -0
- package/dist/undo/manager.d.ts +2 -0
- package/dist/undo/manager.js +50 -0
- package/dist/undo/types.d.ts +44 -0
- package/dist/undo/types.js +7 -0
- package/docs/guide/consumer-guide.md +1098 -0
- package/docs/guide/directives.md +223 -0
- package/docs/guide/plugin-api.md +329 -0
- package/docs/guide/plugin-guide/conspiracy.gif +0 -0
- package/docs/guide/plugin-guide/parrot-frames.md +209 -0
- package/docs/guide/plugin-guide/parrot.gif +0 -0
- package/docs/guide/plugin-guide.md +1693 -0
- package/docs/guide/plugin-testing.md +463 -0
- package/package.json +238 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-block paste: delete the active range inside a single undo snapshot, dispatch the paste
|
|
3
|
+
* onto the collapsed caret, then restore the caret via DOM, since the originating block may be
|
|
4
|
+
* gone and pendingCursor with it.
|
|
5
|
+
*/
|
|
6
|
+
import { tableCellCount } from '../table-endpoint-snap';
|
|
7
|
+
import { CURSOR_END } from '../../block-component';
|
|
8
|
+
import { normalizeLineEndings } from '../../core/lines';
|
|
9
|
+
import { performCrossBlockDelete } from './ops';
|
|
10
|
+
import { charOffsetOf } from '../primitives';
|
|
11
|
+
import { focusCollapsedCaret } from '../native-bridge';
|
|
12
|
+
import { pasteDispatch } from '../../tree-operations/paste/dispatch';
|
|
13
|
+
import { applyPasteTransforms } from '../../tree-operations/paste/paste-transforms';
|
|
14
|
+
import { parse } from '../../core/parser';
|
|
15
|
+
import { blockNodeAt, isBlockNode, nodeAt } from '../../tree-operations/node-ops';
|
|
16
|
+
import { pathsEqual } from '../path-math';
|
|
17
|
+
import { replaceBlockAtParent } from '../../tree-operations/paste/replace-block-at-parent';
|
|
18
|
+
import { ensureEditableContainers, normalizeReplacementTrivia } from '../../tree-operations';
|
|
19
|
+
import { emitClipboardError } from '../../editor-events';
|
|
20
|
+
export async function handleCrossBlockPaste(ctx, mutCtx, e, replacement) {
|
|
21
|
+
if (!ctx.selection.isCrossBlock)
|
|
22
|
+
return false;
|
|
23
|
+
ctx.stickyColumn.reset();
|
|
24
|
+
ctx.edgeAffinity.reset();
|
|
25
|
+
ctx.selection.resetSelectAllCount();
|
|
26
|
+
e?.preventDefault();
|
|
27
|
+
// `!== undefined`, not `??`: a caller supplying its own payload must never reach the
|
|
28
|
+
// clipboard read, and `??` would make that depend on callers never passing ''.
|
|
29
|
+
const pasted = replacement !== undefined
|
|
30
|
+
? replacement
|
|
31
|
+
: normalizeLineEndings(e?.clipboardData?.getData('text/plain') ?? '');
|
|
32
|
+
if (!pasted)
|
|
33
|
+
return true;
|
|
34
|
+
const doc = ctx.getDoc();
|
|
35
|
+
// Whole-table selection (Ctrl+A 2nd press inside a cell): replace the table block at the
|
|
36
|
+
// parent position, single undo. The sub-rectangle path only clears cells, leaving the table.
|
|
37
|
+
if (isWholeTableSelection(ctx.selection, doc)) {
|
|
38
|
+
await replaceTableWithPaste(ctx, mutCtx, pasted);
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
// Read before the delete collapses the selection: the only coordinate an error report on the
|
|
42
|
+
// declined branch below could still name.
|
|
43
|
+
const rangeStartPath = ctx.selection.start?.path.slice();
|
|
44
|
+
// One snapshot covers the whole delete-then-paste so Ctrl+Z doesn't leave an intermediate
|
|
45
|
+
// "selection-deleted but blocks-not-inserted" state.
|
|
46
|
+
mutCtx.pushUndoSnapshot();
|
|
47
|
+
const caret = await performCrossBlockDelete(mutCtx, {
|
|
48
|
+
undoEntry: 'join',
|
|
49
|
+
skipCaretRestore: true
|
|
50
|
+
});
|
|
51
|
+
// The gesture was consumed (preventDefault above) and there is nowhere to put the payload:
|
|
52
|
+
// another cross-block mutation collapsed the selection while this paste waited it out. Text
|
|
53
|
+
// survives on the clipboard, but a host-imported image does not, so report it.
|
|
54
|
+
if (!caret) {
|
|
55
|
+
emitClipboardError(ctx.events, {
|
|
56
|
+
error: new Error('cross-block paste resolved no caret; nothing inserted'),
|
|
57
|
+
...(rangeStartPath ? { path: rangeStartPath } : {})
|
|
58
|
+
});
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
// No `preDelete`: the range is already gone. `performCrossBlockDelete` above took it through
|
|
62
|
+
// `rangeDelete`, which crosses the join seam itself, so this dispatch inserts at a caret the
|
|
63
|
+
// cleanup already seated — handing it a range would delete a second time.
|
|
64
|
+
const result = await pasteDispatch({
|
|
65
|
+
pastedText: pasted,
|
|
66
|
+
targetPath: caret.path,
|
|
67
|
+
offset: charOffsetOf(caret, 'cross-block-paste:dispatch')
|
|
68
|
+
}, {
|
|
69
|
+
doc,
|
|
70
|
+
blockEdit: ctx.blockEdit,
|
|
71
|
+
controller: ctx.pasteCoordinator,
|
|
72
|
+
undoEntry: 'join',
|
|
73
|
+
grammar: ctx.grammar,
|
|
74
|
+
activePlugins: ctx.activePlugins
|
|
75
|
+
});
|
|
76
|
+
// A settle that absorbed the join above the target moved the caret to a slot this gesture
|
|
77
|
+
// never revealed, so mount it before the landing reads for its element.
|
|
78
|
+
if (result.inlineCaretPath)
|
|
79
|
+
await ctx.revealPath(result.inlineCaretPath);
|
|
80
|
+
await landCaretAfterPaste(ctx, result.inlineCaretPath ?? caret.path, result.inlineCaretOffset);
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Land the caret after a cross-block paste commit. Inline pastes place it via DOM, since
|
|
85
|
+
* pendingCursor may address a block the range delete unmounted; structural pastes rely on
|
|
86
|
+
* pasteDispatch's internal focus and only step in when focus escaped the editor.
|
|
87
|
+
*/
|
|
88
|
+
async function landCaretAfterPaste(ctx, caretPath, inlineCaretOffset) {
|
|
89
|
+
await ctx.afterReactivity();
|
|
90
|
+
if (inlineCaretOffset !== undefined) {
|
|
91
|
+
focusCollapsedCaret(ctx.getBlockElByPath, { path: caretPath, offset: inlineCaretOffset });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const editorRoot = ctx.getEditorRoot();
|
|
95
|
+
if (editorRoot && !editorRoot.contains(document.activeElement)) {
|
|
96
|
+
ctx.getBlockElByPath(caretPath)?.focus();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// ── Whole-table paste ──────────────────────────────────────────────────────
|
|
100
|
+
function isWholeTableSelection(selection, doc) {
|
|
101
|
+
const anchor = selection.anchor;
|
|
102
|
+
const focus = selection.focus;
|
|
103
|
+
if (!anchor || !focus)
|
|
104
|
+
return false;
|
|
105
|
+
if (!pathsEqual(anchor.path, focus.path))
|
|
106
|
+
return false;
|
|
107
|
+
const node = nodeAt(doc, anchor.path);
|
|
108
|
+
if (!node || !isBlockNode(node) || node.kind !== 'table')
|
|
109
|
+
return false;
|
|
110
|
+
const cellCount = tableCellCount(node);
|
|
111
|
+
if (cellCount === 0)
|
|
112
|
+
return false;
|
|
113
|
+
// Same-path intra-table selection: cell offsets are context-established, so read directly.
|
|
114
|
+
const lo = Math.min(anchor.offset, focus.offset);
|
|
115
|
+
const hi = Math.max(anchor.offset, focus.offset);
|
|
116
|
+
return lo === 0 && hi === cellCount - 1;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Replace the selected table block with the pasted content at the table's parent position.
|
|
120
|
+
* Routes through replaceBlockAtParent so the splice lands at the doc/enclosing-container scope
|
|
121
|
+
* rather than the row-level blockEdit TableRowBlock propagates. One snapshot covers the replace.
|
|
122
|
+
*/
|
|
123
|
+
async function replaceTableWithPaste(ctx, mutCtx, pasted) {
|
|
124
|
+
const tablePath = ctx.selection.anchor.path;
|
|
125
|
+
const doc = ctx.getDoc();
|
|
126
|
+
// This route never reaches pasteDispatch, so the paste transforms and the instance grammar
|
|
127
|
+
// ride here too; both rules live in the helper, applied at both sites.
|
|
128
|
+
const parsed = parse(applyPasteTransforms(pasted, ctx.activePlugins), {
|
|
129
|
+
grammar: ctx.grammar,
|
|
130
|
+
scope: 'fragment'
|
|
131
|
+
});
|
|
132
|
+
if (parsed.children.length === 0)
|
|
133
|
+
return;
|
|
134
|
+
const tableNode = blockNodeAt(doc, tablePath);
|
|
135
|
+
if (!tableNode)
|
|
136
|
+
return;
|
|
137
|
+
const replacement = normalizeReplacementTrivia(tableNode, parsed.children);
|
|
138
|
+
for (const node of replacement)
|
|
139
|
+
ensureEditableContainers(node);
|
|
140
|
+
mutCtx.pushUndoSnapshot();
|
|
141
|
+
ctx.selection.collapse();
|
|
142
|
+
await replaceBlockAtParent({
|
|
143
|
+
doc,
|
|
144
|
+
blockPath: tablePath,
|
|
145
|
+
replacement,
|
|
146
|
+
controller: ctx.pasteCoordinator,
|
|
147
|
+
undoEntry: 'join',
|
|
148
|
+
focusReplacementIndex: replacement.length - 1,
|
|
149
|
+
focusOffset: CURSOR_END,
|
|
150
|
+
source: 'cross-block-paste-whole-table',
|
|
151
|
+
...(ctx.grammar ? { grammar: ctx.grammar } : {}),
|
|
152
|
+
// Nothing is reattached behind the clipboard here — the table's whole slot is the target —
|
|
153
|
+
// so the trailing blank rides in unfiltered (`paste/dispatch.ts` states the rule).
|
|
154
|
+
trailingSeparator: parsed.suffix
|
|
155
|
+
});
|
|
156
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pointer half of the cross-block dispatcher: shift-click extension and pointer-drag entry. See
|
|
3
|
+
* dispatch.ts for the composer that wires this together with the keydown half.
|
|
4
|
+
*/
|
|
5
|
+
import type { CrossBlockDispatchContext } from './dispatch';
|
|
6
|
+
import type { SelectionState } from '../selection-state.svelte';
|
|
7
|
+
import type { StickyColumnState } from '../../cursor/sticky-column';
|
|
8
|
+
import type { EdgeAffinityState } from '../../cursor/edge-affinity';
|
|
9
|
+
export interface CrossBlockPointer {
|
|
10
|
+
handlePointerDown(e: PointerEvent): boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function createCrossBlockPointer(ctx: CrossBlockDispatchContext): CrossBlockPointer;
|
|
13
|
+
/**
|
|
14
|
+
* Shared pointerdown preamble for any block that intercepts cross-block input. Resets
|
|
15
|
+
* sticky-column and the select-all counter, and on a non-shift press clears any active
|
|
16
|
+
* cross-block selection so a fresh drag doesn't extend the prior range. The native sibling of
|
|
17
|
+
* `caret-doors.ts`, so it ends the gap caret too.
|
|
18
|
+
*/
|
|
19
|
+
export declare function resetForPointerDown(selection: SelectionState, stickyColumn: StickyColumnState, edgeAffinity: EdgeAffinityState, isShift: boolean): void;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pointer half of the cross-block dispatcher: shift-click extension and pointer-drag entry. See
|
|
3
|
+
* dispatch.ts for the composer that wires this together with the keydown half.
|
|
4
|
+
*/
|
|
5
|
+
import { handleShiftClick } from '../keyboard-extend';
|
|
6
|
+
import { findBlockPathForElement } from '../path-lookup';
|
|
7
|
+
import { clearNativeSelection } from '../native-bridge';
|
|
8
|
+
import { offsetFromViewportPoint } from '../../cursor/point-offset';
|
|
9
|
+
import { installDragListener } from '../drag-pointer';
|
|
10
|
+
import { devWarn } from '../../dev-warn';
|
|
11
|
+
export function createCrossBlockPointer(ctx) {
|
|
12
|
+
return {
|
|
13
|
+
handlePointerDown: (e) => handlePointerDown(ctx, e)
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Shared pointerdown preamble for any block that intercepts cross-block input. Resets
|
|
18
|
+
* sticky-column and the select-all counter, and on a non-shift press clears any active
|
|
19
|
+
* cross-block selection so a fresh drag doesn't extend the prior range. The native sibling of
|
|
20
|
+
* `caret-doors.ts`, so it ends the gap caret too.
|
|
21
|
+
*/
|
|
22
|
+
export function resetForPointerDown(selection, stickyColumn, edgeAffinity, isShift) {
|
|
23
|
+
stickyColumn.reset();
|
|
24
|
+
edgeAffinity.reset();
|
|
25
|
+
selection.resetSelectAllCount();
|
|
26
|
+
// Unconditional, unlike the range arm: the gap is collapsed-only, so a shift-press has no
|
|
27
|
+
// range to grow from it. Silent when no gap is live.
|
|
28
|
+
selection.clearGapCaret();
|
|
29
|
+
if (!isShift && selection.isCrossBlock) {
|
|
30
|
+
selection.clear();
|
|
31
|
+
clearNativeSelection();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// ── Pointer ────────────────────────────────────────────────────────────────
|
|
35
|
+
function handlePointerDown(ctx, e) {
|
|
36
|
+
const el = ctx.getEl();
|
|
37
|
+
if (!el)
|
|
38
|
+
return false;
|
|
39
|
+
const { selection } = ctx;
|
|
40
|
+
const myPath = ctx.getMyPath();
|
|
41
|
+
resetForPointerDown(selection, ctx.stickyColumn, ctx.edgeAffinity, e.shiftKey);
|
|
42
|
+
if (e.shiftKey) {
|
|
43
|
+
const prevActive = document.activeElement;
|
|
44
|
+
const prevFocusEl = prevActive instanceof HTMLElement && prevActive !== el
|
|
45
|
+
? prevActive.closest('[contenteditable]')
|
|
46
|
+
: null;
|
|
47
|
+
const prevFocusPath = findBlockPathForElement(prevActive);
|
|
48
|
+
const handled = handleShiftClick(selection, el, myPath, e.clientX, e.clientY, prevFocusEl, prevFocusPath);
|
|
49
|
+
if (handled) {
|
|
50
|
+
e.preventDefault();
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (!e.shiftKey) {
|
|
55
|
+
const root = ctx.getEditorRoot();
|
|
56
|
+
if (!root)
|
|
57
|
+
return false;
|
|
58
|
+
const offset = offsetFromViewportPoint(el, e.clientX, e.clientY);
|
|
59
|
+
if (offset === null)
|
|
60
|
+
return false;
|
|
61
|
+
// SelectionState normalizes table endpoints on cross-block entry, so the raw block path
|
|
62
|
+
// is a valid anchor here.
|
|
63
|
+
const anchorPoint = { path: myPath.slice(), offset };
|
|
64
|
+
const lifetimeSignal = ctx.getEditorLifetime();
|
|
65
|
+
if (!lifetimeSignal) {
|
|
66
|
+
devWarn('cross-block-dispatch', 'editor lifetime signal unavailable; skipping drag install to avoid document-listener leak on unmount');
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
installDragListener({
|
|
70
|
+
editorRoot: root,
|
|
71
|
+
// The root is the hit-test boundary; what SCROLLS may be an ancestor in
|
|
72
|
+
// host-scroll mode, so the two resolve separately.
|
|
73
|
+
scrollContainer: ctx.getScrollHost() ?? root,
|
|
74
|
+
selection,
|
|
75
|
+
getBlockElByPath: ctx.getBlockElByPath,
|
|
76
|
+
lifetimeSignal
|
|
77
|
+
}, anchorPoint, e);
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-block type-replace: the user typed a character with a cross-block selection active.
|
|
3
|
+
* Delete the range, splice the character into the surviving leaf's raw, re-parse so a marker at
|
|
4
|
+
* offset 0 re-derives the kind (parity with the single-block type path). Routed through
|
|
5
|
+
* commitMultiScope so a kind change mints a fresh node, ids/refs stay synced, and the op is
|
|
6
|
+
* `updateContent`.
|
|
7
|
+
*/
|
|
8
|
+
import type { CrossBlockDispatchContext } from './dispatch';
|
|
9
|
+
import type { CrossBlockMutationContext } from './ops';
|
|
10
|
+
export declare function handleCrossBlockTypeReplace(ctx: CrossBlockDispatchContext, mutCtx: CrossBlockMutationContext, e: InputEvent): Promise<boolean>;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-block type-replace: the user typed a character with a cross-block selection active.
|
|
3
|
+
* Delete the range, splice the character into the surviving leaf's raw, re-parse so a marker at
|
|
4
|
+
* offset 0 re-derives the kind (parity with the single-block type path). Routed through
|
|
5
|
+
* commitMultiScope so a kind change mints a fresh node, ids/refs stay synced, and the op is
|
|
6
|
+
* `updateContent`.
|
|
7
|
+
*/
|
|
8
|
+
import { performCrossBlockDelete } from './ops';
|
|
9
|
+
import { charOffsetOf } from '../primitives';
|
|
10
|
+
import { blockNodeAt, normalizeBodyWrite, updateNodeContent, writeOwnRaw, settledCaretTarget } from '../../tree-operations/node-ops';
|
|
11
|
+
import { focusCollapsedCaret } from '../native-bridge';
|
|
12
|
+
import { ensureUnsharedChild, ensureUnsharedNode, ensureUnsharedPath, rebuildUnsharedChain } from '../../tree-operations/unshare';
|
|
13
|
+
import { stampStructuralChange } from '../../tree-operations/structural-change';
|
|
14
|
+
import { getStateForNode } from '../../reactivity/state-registry';
|
|
15
|
+
import { docPathFrom } from '../../cursor/coordinate-spaces';
|
|
16
|
+
import { devWarn } from '../../dev-warn';
|
|
17
|
+
export async function handleCrossBlockTypeReplace(ctx, mutCtx, e) {
|
|
18
|
+
if (!ctx.selection.isCrossBlock || e.inputType !== 'insertText')
|
|
19
|
+
return false;
|
|
20
|
+
e.preventDefault();
|
|
21
|
+
const typed = e.data ?? '';
|
|
22
|
+
const caret = await performCrossBlockDelete(mutCtx, { skipCaretRestore: true });
|
|
23
|
+
if (!caret)
|
|
24
|
+
return true;
|
|
25
|
+
// All caret placements below target caret.path's top-level block; mount it once here so each
|
|
26
|
+
// (the post-tick landing included) finds a live element.
|
|
27
|
+
await ctx.revealPath(caret.path);
|
|
28
|
+
if (!typed) {
|
|
29
|
+
focusCollapsedCaret(ctx.getBlockElByPath, caret);
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
const doc = ctx.getDoc();
|
|
33
|
+
const targetNode = blockNodeAt(doc, caret.path);
|
|
34
|
+
if (!targetNode) {
|
|
35
|
+
focusCollapsedCaret(ctx.getBlockElByPath, caret);
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
// `updateContent`, not `input`: symmetric with the single-block path's KIND-CHANGING branch
|
|
39
|
+
// (block-edit.ts updateBlockContent). Only that path's kind-stable branch emits the debounced
|
|
40
|
+
// `input`, which consumers read as "kind held" (components/lrd-map-gate.ts runs post-commit
|
|
41
|
+
// and cannot recover a destroyed kind). snapshot: 'skip' keeps the char in the delete's unit.
|
|
42
|
+
const scope = resolveTypedCharScope(ctx, caret.path);
|
|
43
|
+
if (!scope) {
|
|
44
|
+
focusCollapsedCaret(ctx.getBlockElByPath, caret);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
// resolveTypedCharScope returns the leaf's IMMEDIATE parent: every mounted container registers
|
|
48
|
+
// a BlockListState, and the document root stands in for a top-level leaf. The guard below is
|
|
49
|
+
// the enforcement belt — an unregistered ancestor would make `scope` a grandparent and splice
|
|
50
|
+
// the wrong slot, so that case degrades to a raw-only splice instead.
|
|
51
|
+
const leafIndex = caret.path[caret.path.length - 1];
|
|
52
|
+
const scopeIsImmediateParent = scope.path.length === caret.path.length - 1;
|
|
53
|
+
let settled = { change: { op: 'noop' }, textStart: 0 };
|
|
54
|
+
await ctx.controller.commitMultiScope({
|
|
55
|
+
scopes: [scope],
|
|
56
|
+
snapshot: 'skip',
|
|
57
|
+
mutate: ([scopeView]) => {
|
|
58
|
+
const sharing = scopeView.sharing;
|
|
59
|
+
const charOffset = charOffsetOf(caret, 'cross-block-type-replace:slice');
|
|
60
|
+
if (!scopeIsImmediateParent) {
|
|
61
|
+
devWarn('cross-block-type-replace', `scope [${scope.path.join(',')}] is not the immediate parent of leaf [${caret.path.join(',')}]; splicing raw without kind re-derivation`);
|
|
62
|
+
const chain = ensureUnsharedPath(doc, caret.path, sharing);
|
|
63
|
+
const owned = chain[chain.length - 1] ?? ensureUnsharedNode(targetNode, sharing);
|
|
64
|
+
// Degraded, but still a body write: this arm splices raw with no reparse, so the
|
|
65
|
+
// container's rule and the leaf's own are all that stand between a typed `>` or
|
|
66
|
+
// backtick and a terminator line.
|
|
67
|
+
writeOwnRaw(owned, normalizeBodyWrite(chain[chain.length - 2]?.kind, owned.raw.slice(0, charOffset) + typed + owned.raw.slice(charOffset)), ctx.grammar);
|
|
68
|
+
rebuildUnsharedChain(doc, chain, sharing, null, ctx.grammar);
|
|
69
|
+
return [{ op: 'noop' }];
|
|
70
|
+
}
|
|
71
|
+
// Re-parse the spliced leaf inside the commit so a marker at offset 0 re-derives the
|
|
72
|
+
// kind (updateNodeContent mints a fresh node on a kind change). A single character
|
|
73
|
+
// never introduces a blank line, so the multi-block replacement arm is unreachable.
|
|
74
|
+
const owned = ensureUnsharedChild(scopeView.node, leafIndex, sharing);
|
|
75
|
+
const newText = owned.raw.slice(0, charOffset) + typed + owned.raw.slice(charOffset);
|
|
76
|
+
settled = updateNodeContent({ children: scopeView.children, ownerKind: scopeView.node.kind, owner: scopeView.node }, leafIndex, newText, ctx.grammar, sharing);
|
|
77
|
+
stampStructuralChange(scopeView.children, settled.change, sharing);
|
|
78
|
+
return [settled.change];
|
|
79
|
+
},
|
|
80
|
+
op: {
|
|
81
|
+
kind: 'updateContent',
|
|
82
|
+
// `op` is evaluated ahead of `mutate` and the splice only inserts, so the post-commit
|
|
83
|
+
// length is already fixed. Read for the event detail alone.
|
|
84
|
+
detail: { length: targetNode.raw.length + typed.length },
|
|
85
|
+
eventPath: docPathFrom(caret.path)
|
|
86
|
+
},
|
|
87
|
+
afterTick: async () => {
|
|
88
|
+
// A settle that absorbed the join above left the predecessor holding the typed bytes,
|
|
89
|
+
// so the leaf slot the delete resolved is no longer where the caret belongs.
|
|
90
|
+
const siblings = scopeChildrenOf(ctx, scope.path);
|
|
91
|
+
const target = settledCaretTarget(settled, leafIndex, caret.offset + typed.length, siblings);
|
|
92
|
+
const path = [...caret.path.slice(0, -1), target.index];
|
|
93
|
+
// The reveal above mounted the slot the delete resolved; a fold can land the caret on
|
|
94
|
+
// one the render window never held.
|
|
95
|
+
if (target.index !== leafIndex)
|
|
96
|
+
await ctx.revealPath(path);
|
|
97
|
+
focusCollapsedCaret(ctx.getBlockElByPath, { path, offset: target.offset });
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
/** The scope's children, re-read after the commit: the ceremony replaces the node it published. */
|
|
103
|
+
function scopeChildrenOf(ctx, scopePath) {
|
|
104
|
+
const doc = ctx.getDoc();
|
|
105
|
+
if (scopePath.length === 0)
|
|
106
|
+
return doc.children;
|
|
107
|
+
return blockNodeAt(doc, scopePath)?.children ?? [];
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* The smallest commit scope covering the typed-char target: doc scope for a top-level leaf,
|
|
111
|
+
* nearest container ancestor with a registered BlockListState otherwise. Null when none is
|
|
112
|
+
* mounted, and the caller falls back to a direct caret restore.
|
|
113
|
+
*/
|
|
114
|
+
function resolveTypedCharScope(ctx, leafPath) {
|
|
115
|
+
if (leafPath.length === 1) {
|
|
116
|
+
return ctx.controller.getDocScope();
|
|
117
|
+
}
|
|
118
|
+
const doc = ctx.getDoc();
|
|
119
|
+
for (let depth = leafPath.length - 1; depth >= 1; depth--) {
|
|
120
|
+
const ancestorPath = leafPath.slice(0, depth);
|
|
121
|
+
const ancestor = blockNodeAt(doc, ancestorPath);
|
|
122
|
+
if (!ancestor)
|
|
123
|
+
continue;
|
|
124
|
+
const state = getStateForNode(ancestor);
|
|
125
|
+
if (state)
|
|
126
|
+
return { node: ancestor, state, path: ancestorPath };
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Caret placement from a viewport point: the dead-space click (padding beside a block, the area
|
|
3
|
+
* below the last one) and the public `placeCaretAtPoint`, which shares the walk under the gesture
|
|
4
|
+
* guards. A y belonging to no band may name an eligible gap boundary; otherwise the point clamps
|
|
5
|
+
* into the nearest mounted block's box (`nearest-block.ts`) and resolves there, no kind named.
|
|
6
|
+
* Only what is mounted is measured, so "below the last block" resolves against the CST (VR-6).
|
|
7
|
+
*/
|
|
8
|
+
import { type BlockComponent } from '../block-component';
|
|
9
|
+
import { type GapStopScope } from './gap-caret';
|
|
10
|
+
export interface DeadSpaceCaretDeps {
|
|
11
|
+
getBlockComponent(path: number[]): BlockComponent | null;
|
|
12
|
+
/**
|
|
13
|
+
* The shared pointerdown preamble (`cross-block/pointer.ts`), pre-bound to a non-shift press:
|
|
14
|
+
* a dead-space click must end a live cross-block range exactly as a click on a block does.
|
|
15
|
+
*/
|
|
16
|
+
resetSelectionForClick(): void;
|
|
17
|
+
/** The gap-caret arrival's reads; a point landing between two root bands parks there. */
|
|
18
|
+
gapScope: GapStopScope;
|
|
19
|
+
/** The document's own last top-level index, from the CST. The last mounted band is the
|
|
20
|
+
* document's last block only while nothing is windowed out below it. */
|
|
21
|
+
lastBlockIndex(): number;
|
|
22
|
+
/** Reveal (mount) a top-level block and hand back its component — the same road undo's
|
|
23
|
+
* restore uses. */
|
|
24
|
+
revealBlock(index: number): Promise<BlockComponent | null>;
|
|
25
|
+
}
|
|
26
|
+
export interface DeadSpaceCaret {
|
|
27
|
+
/** `root` is the element the installing effect captured, not a live binding. */
|
|
28
|
+
notePress(root: HTMLElement, event: MouseEvent): void;
|
|
29
|
+
/** Returns whether the click was claimed; false leaves every existing click semantic alone. */
|
|
30
|
+
handleClick(root: HTMLElement, event: MouseEvent): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* The landing walk with no gesture discrimination in front of it, for a caller that has
|
|
33
|
+
* already decided to answer the point — the public `placeCaretAtPoint`. Shared rather than
|
|
34
|
+
* reimplemented, so the two can never resolve one point differently. True means the point
|
|
35
|
+
* was claimed; a point past a windowed-out tail claims it and lands after the reveal.
|
|
36
|
+
*/
|
|
37
|
+
placeAtPoint(root: HTMLElement, x: number, y: number): boolean;
|
|
38
|
+
}
|
|
39
|
+
export declare function createDeadSpaceCaret(deps: DeadSpaceCaretDeps): DeadSpaceCaret;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Caret placement from a viewport point: the dead-space click (padding beside a block, the area
|
|
3
|
+
* below the last one) and the public `placeCaretAtPoint`, which shares the walk under the gesture
|
|
4
|
+
* guards. A y belonging to no band may name an eligible gap boundary; otherwise the point clamps
|
|
5
|
+
* into the nearest mounted block's box (`nearest-block.ts`) and resolves there, no kind named.
|
|
6
|
+
* Only what is mounted is measured, so "below the last block" resolves against the CST (VR-6).
|
|
7
|
+
*/
|
|
8
|
+
import { CURSOR_END } from '../block-component';
|
|
9
|
+
import { blockAtPoint } from './block-hit-test';
|
|
10
|
+
import { measureBlocks, nearestBand, probePointIn } from './nearest-block';
|
|
11
|
+
import { placeGapCaret } from './caret-doors';
|
|
12
|
+
import { canGapStop } from './gap-caret';
|
|
13
|
+
import { offsetFromViewportPoint } from '../cursor/point-offset';
|
|
14
|
+
export function createDeadSpaceCaret(deps) {
|
|
15
|
+
// The press half of the gesture, because `click` alone cannot tell a dead-space click from a
|
|
16
|
+
// drag that STARTED on a block and released in the margin: both report dead space as target.
|
|
17
|
+
let pressedOnDeadSpace = false;
|
|
18
|
+
/** The end-of-document gesture when the tail is windowed out: reveal the real last block,
|
|
19
|
+
* then land at its end — which is where the trailing-corner probe below lands when the
|
|
20
|
+
* slice already reaches it. */
|
|
21
|
+
async function landAtDocumentEnd() {
|
|
22
|
+
const index = deps.lastBlockIndex();
|
|
23
|
+
if (index < 0)
|
|
24
|
+
return;
|
|
25
|
+
const component = await deps.revealBlock(index);
|
|
26
|
+
if (!component?.focusable)
|
|
27
|
+
return;
|
|
28
|
+
deps.resetSelectionForClick();
|
|
29
|
+
component.focus(CURSOR_END);
|
|
30
|
+
}
|
|
31
|
+
function placeAtPoint(root, x, y) {
|
|
32
|
+
// One measuring pass for both walks: the boundary question and the band clamp read the
|
|
33
|
+
// same layout, and a second query would force it again inside one click.
|
|
34
|
+
const blocks = measureBlocks(root);
|
|
35
|
+
const boundary = rootBoundaryOutsideBands(blocks, y);
|
|
36
|
+
if (boundary !== null && canGapStop(deps.gapScope, [], boundary)) {
|
|
37
|
+
// The preamble first, as on the block landing below — it clears the gap, so
|
|
38
|
+
// nothing may run between it and the door. The door ends a live range (G2.12).
|
|
39
|
+
deps.resetSelectionForClick();
|
|
40
|
+
placeGapCaret(deps.gapScope.selection, { parentPath: [], index: boundary });
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
const band = nearestBand(blocks.map((b) => b.rect), y);
|
|
44
|
+
if (!band)
|
|
45
|
+
return false;
|
|
46
|
+
// Below the last MOUNTED block is not below the document while a tail is windowed out,
|
|
47
|
+
// and a host's own below-the-editor handler resolves against the whole document — so
|
|
48
|
+
// the two would land a document apart. The reveal road is the only answer available
|
|
49
|
+
// here: the target has no box to probe until it mounts.
|
|
50
|
+
if (band.belowAll && lastMountedTopLevel(blocks) !== deps.lastBlockIndex()) {
|
|
51
|
+
void landAtDocumentEnd();
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
const { x: probeX, y: probeY } = probePointIn(blocks[band.index].rect, x, y, band.belowAll);
|
|
55
|
+
const hit = blockAtPoint(root, probeX, probeY);
|
|
56
|
+
if (!hit)
|
|
57
|
+
return false;
|
|
58
|
+
const landing = landingFor(hit, probeX, probeY);
|
|
59
|
+
if (!landing)
|
|
60
|
+
return false;
|
|
61
|
+
const component = deps.getBlockComponent(hit.path);
|
|
62
|
+
if (!component?.focusable)
|
|
63
|
+
return false;
|
|
64
|
+
// An internal landing needs the deep door; a block declaring the hook without it
|
|
65
|
+
// can't be reached, and declining here keeps the selection intact.
|
|
66
|
+
if (landing.path.length > 0 && !component.focusByPath)
|
|
67
|
+
return false;
|
|
68
|
+
// Only once the landing is known, so a declined point leaves the selection as it
|
|
69
|
+
// found it: a live range stays painted over a caret placed elsewhere, and the next
|
|
70
|
+
// printable key type-replaces the whole of it.
|
|
71
|
+
deps.resetSelectionForClick();
|
|
72
|
+
// Both doors end the live range (`selection/caret-doors.ts`); `focusByPath` reaches
|
|
73
|
+
// the leaf's own `focus`.
|
|
74
|
+
if (landing.path.length === 0)
|
|
75
|
+
component.focus(landing.offset);
|
|
76
|
+
else
|
|
77
|
+
component.focusByPath(landing.path, landing.offset);
|
|
78
|
+
// The probe point is inside the block's box, so the surface answers it exactly as it
|
|
79
|
+
// answers a click there: a landing at an atomic widget's edge has nothing to show for
|
|
80
|
+
// itself until the surface's own snap paints it.
|
|
81
|
+
leafOf(component, landing.path)?.snapCaretToPoint?.(probeX, probeY);
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
notePress(root, event) {
|
|
86
|
+
pressedOnDeadSpace =
|
|
87
|
+
isDeadSpace(root, event.target) &&
|
|
88
|
+
event.button === 0 &&
|
|
89
|
+
// Shift belongs to selection extension, the modifiers to platform commands.
|
|
90
|
+
!(event.shiftKey || event.ctrlKey || event.metaKey || event.altKey);
|
|
91
|
+
},
|
|
92
|
+
handleClick(root, event) {
|
|
93
|
+
const pressed = pressedOnDeadSpace;
|
|
94
|
+
pressedOnDeadSpace = false;
|
|
95
|
+
if (!pressed || !isDeadSpace(root, event.target))
|
|
96
|
+
return false;
|
|
97
|
+
// A drag that ended in the margin leaves a real range behind; collapsing it would
|
|
98
|
+
// throw away what the user just selected. This sees only NATIVE ranges: a cross-block
|
|
99
|
+
// range is overlay-painted with the native selection empty, and is ended below instead.
|
|
100
|
+
const native = root.ownerDocument.defaultView?.getSelection();
|
|
101
|
+
if (native && native.rangeCount > 0 && !native.isCollapsed)
|
|
102
|
+
return false;
|
|
103
|
+
return placeAtPoint(root, event.clientX, event.clientY);
|
|
104
|
+
},
|
|
105
|
+
placeAtPoint
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// ── Internal ───────────────────────────────────────────────────────────────
|
|
109
|
+
/** The last top-level index the slice currently holds; -1 when none is mounted. */
|
|
110
|
+
function lastMountedTopLevel(blocks) {
|
|
111
|
+
for (let i = blocks.length - 1; i >= 0; i--) {
|
|
112
|
+
const path = blocks[i].path;
|
|
113
|
+
if (path?.length === 1)
|
|
114
|
+
return path[0];
|
|
115
|
+
}
|
|
116
|
+
return -1;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The root-level boundary a `y` belonging to NO band names: the editor's leading padding,
|
|
120
|
+
* and the space between two adjacent bands where a layout leaves one. Below the last band
|
|
121
|
+
* is excluded — that y is the end-of-document gesture, and under windowing the last MOUNTED
|
|
122
|
+
* band is not the last block. Indices come off the path attribute for the same reason.
|
|
123
|
+
*/
|
|
124
|
+
function rootBoundaryOutsideBands(blocks, y) {
|
|
125
|
+
const bands = blocks.flatMap((b) => b.path?.length === 1 ? [{ index: b.path[0], top: b.rect.top, bottom: b.rect.bottom }] : []);
|
|
126
|
+
if (bands.length === 0)
|
|
127
|
+
return null;
|
|
128
|
+
// Only when the document's own first block is mounted: above a windowed-out slice the
|
|
129
|
+
// blocks the point sits over are not the ones the boundary would name.
|
|
130
|
+
if (y < bands[0].top)
|
|
131
|
+
return bands[0].index === 0 ? 0 : null;
|
|
132
|
+
for (let i = 1; i < bands.length; i++) {
|
|
133
|
+
const above = bands[i - 1];
|
|
134
|
+
const below = bands[i];
|
|
135
|
+
if (above.index + 1 === below.index && y > above.bottom && y < below.top)
|
|
136
|
+
return below.index;
|
|
137
|
+
}
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
/** The component the landing addresses: this one on a character surface, else the leaf a
|
|
141
|
+
* coordinate-addressed kind's internal path names. */
|
|
142
|
+
function leafOf(component, path) {
|
|
143
|
+
if (path.length === 0)
|
|
144
|
+
return component;
|
|
145
|
+
return component.getBlockComponentByPath?.(path) ?? null;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* The targets that mean "dead space": the root, and any block list inside it. A host that
|
|
149
|
+
* widens or pads `.block-list` moves the whole visible side gutter onto the list, which
|
|
150
|
+
* reports itself rather than the root. Everything else the editor renders has its own
|
|
151
|
+
* identity and is declined here.
|
|
152
|
+
*/
|
|
153
|
+
function isDeadSpace(root, target) {
|
|
154
|
+
if (target === root)
|
|
155
|
+
return true;
|
|
156
|
+
return target instanceof Element && target.classList.contains('block-list');
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Where the caret goes for a resolved hit: an internal child path (empty for a
|
|
160
|
+
* character-addressed surface) plus the offset within that leaf. Null declines the click.
|
|
161
|
+
*/
|
|
162
|
+
function landingFor(hit, probeX, probeY) {
|
|
163
|
+
if (hit.caretTargetAtPoint)
|
|
164
|
+
return hit.caretTargetAtPoint(probeX, probeY);
|
|
165
|
+
// A kind with only the drag hook addresses cells and named no caret landing.
|
|
166
|
+
if (hit.foreignDragHitTest)
|
|
167
|
+
return null;
|
|
168
|
+
// Reading mode flips contenteditable off, and a non-editable leaf has no character position.
|
|
169
|
+
if (!hit.charSurface?.matches('[contenteditable="true"]'))
|
|
170
|
+
return null;
|
|
171
|
+
const offset = offsetFromViewportPoint(hit.charSurface, probeX, probeY);
|
|
172
|
+
return offset === null ? null : { path: [], offset };
|
|
173
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pointer drag lifecycle for cross-block selection. Runs on a shared
|
|
3
|
+
* `createPointerDragSession`, whose document-level listeners deliver events even after the
|
|
4
|
+
* pointer leaves the originating block.
|
|
5
|
+
*/
|
|
6
|
+
import type { UserScrollport } from '../cursor/scroll-ancestors';
|
|
7
|
+
import type { SelectionState } from './selection-state.svelte';
|
|
8
|
+
import type { SelectionPoint } from './primitives';
|
|
9
|
+
import type { BlockElLookup } from '../editor-keys';
|
|
10
|
+
export interface DragContext {
|
|
11
|
+
editorRoot: HTMLElement;
|
|
12
|
+
/** What autoscrolls this drag: an element, or the window (`cursor/scroll-ancestors`). */
|
|
13
|
+
scrollContainer: UserScrollport;
|
|
14
|
+
selection: SelectionState;
|
|
15
|
+
getBlockElByPath: BlockElLookup;
|
|
16
|
+
/** Aborted on editor unmount; forwarded to the session's teardown. */
|
|
17
|
+
lifetimeSignal?: AbortSignal;
|
|
18
|
+
}
|
|
19
|
+
/** Document-level pointer listeners for a cross-block drag started at `down`, plus a disposer. */
|
|
20
|
+
export declare function installDragListener(ctx: DragContext, anchorPoint: SelectionPoint, down: PointerEvent): {
|
|
21
|
+
dispose(): void;
|
|
22
|
+
};
|