@voithos-labs/aragonite 0.10.3 → 0.10.7
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/README.md +2 -2
- package/dist/a11y-strings.d.ts +12 -5
- package/dist/a11y-strings.js +61 -5
- package/dist/action-contracts.d.ts +242 -155
- package/dist/action-contracts.js +2 -2
- package/dist/active-editor.d.ts +3 -3
- package/dist/active-editor.js +8 -9
- package/dist/ambient/ambient-dom.d.ts +2 -5
- package/dist/ambient/ambient-dom.js +16 -62
- package/dist/assert.js +6 -5
- package/dist/block-component.d.ts +135 -109
- package/dist/block-component.js +30 -22
- package/dist/block-id.d.ts +6 -10
- package/dist/block-id.js +25 -14
- package/dist/bounded-memo.d.ts +5 -5
- package/dist/bounded-memo.js +6 -6
- package/dist/components/BlockDragHandle.svelte +13 -20
- package/dist/components/BlockHost.svelte +56 -134
- package/dist/components/BlockList.svelte +22 -19
- package/dist/components/DecorationOverlay.svelte +9 -10
- package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
- package/dist/components/Editor.svelte +619 -1089
- package/dist/components/Editor.svelte.d.ts +9 -20
- package/dist/components/GapCaret.svelte +26 -59
- package/dist/components/SelectionOverlay.svelte +36 -67
- package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
- package/dist/components/TailInsert.svelte +8 -55
- package/dist/components/TailInsert.svelte.d.ts +4 -6
- package/dist/components/block-content-selector.d.ts +11 -11
- package/dist/components/block-content-selector.js +11 -11
- package/dist/components/block-el-lookup.d.ts +6 -0
- package/dist/components/block-el-lookup.js +27 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
- package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
- package/dist/components/blocks/code/CodeBlock.svelte +255 -276
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
- package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
- package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
- package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
- package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
- package/dist/components/blocks/code/code-bootstrap.js +35 -28
- package/dist/components/blocks/code/code-context-actions.js +5 -4
- package/dist/components/blocks/code/code-enter.js +2 -2
- package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
- package/dist/components/blocks/code/code-fence-boundary.js +40 -66
- package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
- package/dist/components/blocks/code/code-fence-exit.js +24 -25
- package/dist/components/blocks/code/code-indent.d.ts +2 -2
- package/dist/components/blocks/code/code-indent.js +4 -7
- package/dist/components/blocks/code/code-languages.d.ts +16 -12
- package/dist/components/blocks/code/code-languages.js +58 -32
- package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
- package/dist/components/blocks/code/code-paste-surface.js +9 -18
- package/dist/components/blocks/code/code-renderer.d.ts +21 -5
- package/dist/components/blocks/code/code-renderer.js +90 -125
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
- package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
- package/dist/components/blocks/directive/activate-directives.js +18 -13
- package/dist/components/blocks/editable-leaf.d.ts +50 -74
- package/dist/components/blocks/editable-leaf.js +144 -202
- package/dist/components/blocks/editable-surface.d.ts +96 -100
- package/dist/components/blocks/editable-surface.js +101 -109
- package/dist/components/blocks/list/ListBlock.svelte +46 -90
- package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
- package/dist/components/blocks/list/task-checkbox.js +12 -7
- package/dist/components/blocks/plain-text-backend.d.ts +4 -20
- package/dist/components/blocks/plain-text-backend.js +9 -43
- package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
- package/dist/components/blocks/surface-wiring.svelte.js +15 -34
- package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
- package/dist/components/blocks/table/TableBlock.svelte +100 -165
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
- package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
- package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
- package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
- package/dist/components/blocks/table/cell-pointer.js +49 -71
- package/dist/components/blocks/table/cell-render.d.ts +24 -29
- package/dist/components/blocks/table/cell-render.js +29 -31
- package/dist/components/blocks/table/selected-cells.d.ts +7 -7
- package/dist/components/blocks/table/selected-cells.js +9 -13
- package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
- package/dist/components/blocks/table/table-caret-at-point.js +5 -5
- package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
- package/dist/components/blocks/table/table-cell-paste.js +27 -43
- package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
- package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
- package/dist/components/blocks/table/table-menu-model.js +6 -10
- package/dist/components/blocks/table/table-navigation.js +2 -2
- package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
- package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
- package/dist/components/blocks/text/auto-pair-record.js +51 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
- package/dist/components/blocks/text/click-snap-guard.js +16 -5
- package/dist/components/blocks/text/composition-seat.d.ts +17 -14
- package/dist/components/blocks/text/composition-seat.js +11 -11
- package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
- package/dist/components/blocks/text/construct-edge-delete.js +50 -65
- package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
- package/dist/components/blocks/text/construct-reveal.js +13 -14
- package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
- package/dist/components/blocks/text/delimiter-autopair.js +87 -103
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
- package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
- package/dist/components/blocks/text/edge-seat.d.ts +17 -26
- package/dist/components/blocks/text/edge-seat.js +43 -70
- package/dist/components/blocks/text/link-at-point.d.ts +9 -9
- package/dist/components/blocks/text/link-at-point.js +12 -15
- package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
- package/dist/components/blocks/text/live-join-seam.js +75 -112
- package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
- package/dist/components/blocks/text/live-selection-edit.js +32 -105
- package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
- package/dist/components/blocks/text/live-split-rebalance.js +50 -67
- package/dist/components/blocks/text/marker-completion.d.ts +7 -12
- package/dist/components/blocks/text/marker-completion.js +17 -10
- package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
- package/dist/components/blocks/text/pending-mark-insert.js +30 -49
- package/dist/components/blocks/text/screen-diff.d.ts +5 -15
- package/dist/components/blocks/text/screen-diff.js +5 -19
- package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
- package/dist/components/blocks/text/text-clipboard.js +27 -32
- package/dist/components/blocks/text/text-keydown.d.ts +20 -30
- package/dist/components/blocks/text/text-keydown.js +54 -51
- package/dist/components/blocks/text/text-render.d.ts +25 -35
- package/dist/components/blocks/text/text-render.js +82 -61
- package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
- package/dist/components/blocks/text/widget-adjacency.js +17 -17
- package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
- package/dist/components/blocks/text/widget-interaction.js +243 -208
- package/dist/components/blocks/widget-portal.d.ts +20 -29
- package/dist/components/blocks/widget-portal.js +16 -14
- package/dist/components/built-in-blocks.d.ts +3 -4
- package/dist/components/built-in-blocks.js +17 -18
- package/dist/components/drag-handle.d.ts +13 -30
- package/dist/components/drag-handle.js +25 -63
- package/dist/components/editor-built-ins.d.ts +1 -0
- package/dist/components/editor-built-ins.js +16 -0
- package/dist/components/editor-root-clipboard.d.ts +6 -6
- package/dist/components/editor-root-clipboard.js +16 -27
- package/dist/components/editor-root-document-swap.d.ts +49 -0
- package/dist/components/editor-root-document-swap.js +54 -0
- package/dist/components/editor-root-focus.d.ts +5 -4
- package/dist/components/editor-root-focus.js +51 -22
- package/dist/components/editor-root-focused-surface.d.ts +35 -0
- package/dist/components/editor-root-focused-surface.js +65 -0
- package/dist/components/editor-root-geometry.d.ts +15 -24
- package/dist/components/editor-root-geometry.js +27 -31
- package/dist/components/editor-root-gestures.d.ts +39 -0
- package/dist/components/editor-root-gestures.js +189 -0
- package/dist/components/editor-root-keydown.d.ts +10 -25
- package/dist/components/editor-root-keydown.js +19 -43
- package/dist/components/editor-root-listeners.d.ts +22 -31
- package/dist/components/editor-root-listeners.js +49 -46
- package/dist/components/editor-root-menus.d.ts +51 -0
- package/dist/components/editor-root-menus.js +147 -0
- package/dist/components/editor-root-mode-flip.d.ts +16 -11
- package/dist/components/editor-root-mode-flip.js +36 -34
- package/dist/components/editor-root-scroll-host.d.ts +22 -0
- package/dist/components/editor-root-scroll-host.js +34 -0
- package/dist/components/editor-root-test-surface.d.ts +48 -0
- package/dist/components/editor-root-test-surface.js +6 -0
- package/dist/components/image/ImageOverlayHost.svelte +44 -35
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
- package/dist/components/image/ImageProperties.svelte +37 -41
- package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
- package/dist/components/image/ImageResizeHandles.svelte +26 -30
- package/dist/components/image/image-crop.d.ts +5 -11
- package/dist/components/image/image-crop.js +5 -11
- package/dist/components/image/image-edit-commit.d.ts +19 -16
- package/dist/components/image/image-edit-commit.js +74 -38
- package/dist/components/image/image-resize.d.ts +2 -5
- package/dist/components/image/image-resize.js +3 -6
- package/dist/components/image/image-widget-editing.d.ts +3 -3
- package/dist/components/image/image-widget-editing.js +9 -9
- package/dist/components/image/widget-dom.d.ts +2 -3
- package/dist/components/image/widget-dom.js +19 -24
- package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
- package/dist/components/image/widget-selection-state.svelte.js +26 -19
- package/dist/components/kind-cue.svelte.d.ts +21 -0
- package/dist/components/kind-cue.svelte.js +35 -0
- package/dist/components/link-card/LinkCard.svelte +115 -64
- package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
- package/dist/components/link-card/LinkCardHost.svelte +42 -33
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
- package/dist/components/link-card/link-card-commit.d.ts +16 -19
- package/dist/components/link-card/link-card-commit.js +21 -30
- package/dist/components/link-card/link-card-entry.d.ts +13 -23
- package/dist/components/link-card/link-card-entry.js +16 -24
- package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
- package/dist/components/link-card/link-card-state.svelte.js +2 -2
- package/dist/components/lrd-map-gate.d.ts +4 -11
- package/dist/components/lrd-map-gate.js +5 -11
- package/dist/components/menu/BlockMenu.svelte +20 -81
- package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
- package/dist/components/menu/InlineMenuHost.svelte +191 -0
- package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
- package/dist/components/menu/MenuIcon.svelte +3 -103
- package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
- package/dist/components/menu/SelectionToolbar.svelte +380 -0
- package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
- package/dist/components/menu/clipboard-actions.d.ts +3 -4
- package/dist/components/menu/clipboard-actions.js +3 -4
- package/dist/components/menu/default-context-actions.d.ts +4 -13
- package/dist/components/menu/default-context-actions.js +49 -67
- package/dist/components/menu/flyout-placement.d.ts +2 -2
- package/dist/components/menu/flyout-placement.js +2 -2
- package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
- package/dist/components/menu/menu-presence.svelte.js +19 -0
- package/dist/components/paste-image-arm.d.ts +6 -11
- package/dist/components/paste-image-arm.js +11 -18
- package/dist/components/portal.d.ts +2 -5
- package/dist/components/portal.js +4 -7
- package/dist/core/directive/activate.d.ts +4 -5
- package/dist/core/directive/activate.js +8 -9
- package/dist/core/directive/container-opener.js +13 -12
- package/dist/core/directive/grammar.d.ts +2 -5
- package/dist/core/directive/grammar.js +10 -10
- package/dist/core/directive/kinds.d.ts +4 -7
- package/dist/core/directive/kinds.js +14 -16
- package/dist/core/directive/registry.d.ts +12 -9
- package/dist/core/directive/registry.js +19 -20
- package/dist/core/directive/text-recognizer.d.ts +3 -2
- package/dist/core/directive/text-recognizer.js +5 -9
- package/dist/core/escapable.d.ts +1 -5
- package/dist/core/escapable.js +1 -5
- package/dist/core/inline/backticks.d.ts +3 -4
- package/dist/core/inline/backticks.js +3 -4
- package/dist/core/inline/character-refs.js +2 -1
- package/dist/core/inline/destination-bytes.d.ts +6 -3
- package/dist/core/inline/destination-bytes.js +50 -8
- package/dist/core/inline/entity-widget.d.ts +4 -3
- package/dist/core/inline/entity-widget.js +6 -6
- package/dist/core/inline/format-toggle.d.ts +22 -28
- package/dist/core/inline/format-toggle.js +97 -129
- package/dist/core/inline/html-entities.d.ts +2 -3
- package/dist/core/inline/html-entities.js +2 -3
- package/dist/core/inline/html-tag-grammar.js +6 -2
- package/dist/core/inline/image-dimensions.d.ts +2 -0
- package/dist/core/inline/image-dimensions.js +19 -2
- package/dist/core/inline/image-source-bytes.d.ts +11 -0
- package/dist/core/inline/image-source-bytes.js +71 -0
- package/dist/core/inline/index.d.ts +28 -21
- package/dist/core/inline/index.js +56 -34
- package/dist/core/inline/inline-cache.d.ts +12 -15
- package/dist/core/inline/inline-cache.js +11 -14
- package/dist/core/inline/inline-widgets.d.ts +55 -68
- package/dist/core/inline/inline-widgets.js +55 -58
- package/dist/core/inline/link-destination.d.ts +31 -0
- package/dist/core/inline/link-destination.js +129 -0
- package/dist/core/inline/link-reference-resolver.d.ts +8 -6
- package/dist/core/inline/link-reference-resolver.js +10 -6
- package/dist/core/inline/link-source-bytes.d.ts +31 -0
- package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
- package/dist/core/inline/live-edit/read-back.d.ts +29 -0
- package/dist/core/inline/live-edit/read-back.js +50 -0
- package/dist/core/inline/picture.d.ts +10 -0
- package/dist/core/inline/picture.js +40 -0
- package/dist/core/inline/scan/autolinks.d.ts +7 -8
- package/dist/core/inline/scan/autolinks.js +80 -59
- package/dist/core/inline/scan/brackets.d.ts +2 -2
- package/dist/core/inline/scan/brackets.js +6 -103
- package/dist/core/inline/scan/code-spans.d.ts +4 -0
- package/dist/core/inline/scan/code-spans.js +8 -0
- package/dist/core/inline/scan/emphasis.js +10 -14
- package/dist/core/inline/scan/index.d.ts +3 -1
- package/dist/core/inline/scan/index.js +32 -33
- package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
- package/dist/core/inline/scan/plugin-syntax.js +75 -89
- package/dist/core/inline/scan/scan-state.d.ts +2 -0
- package/dist/core/inline/scan/scan-state.js +1 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
- package/dist/core/inline/scan/simple-nodes.js +2 -5
- package/dist/core/inline/scan/triggers.d.ts +17 -0
- package/dist/core/inline/scan/triggers.js +26 -0
- package/dist/core/inline/scan/url.js +8 -10
- package/dist/core/inline/transparency.d.ts +2 -1
- package/dist/core/inline/transparency.js +33 -17
- package/dist/core/inline/visibility.d.ts +30 -49
- package/dist/core/inline/visibility.js +31 -49
- package/dist/core/inline/walk.d.ts +4 -10
- package/dist/core/inline/walk.js +4 -10
- package/dist/core/inline-render.d.ts +22 -27
- package/dist/core/inline-render.js +51 -60
- package/dist/core/lines.d.ts +67 -26
- package/dist/core/lines.js +164 -33
- package/dist/core/metadata-parity.d.ts +9 -0
- package/dist/core/metadata-parity.js +25 -0
- package/dist/core/node-views.d.ts +7 -6
- package/dist/core/node-views.js +5 -5
- package/dist/core/nodes.d.ts +34 -44
- package/dist/core/nodes.js +4 -12
- package/dist/core/parser.d.ts +27 -34
- package/dist/core/parser.js +53 -67
- package/dist/core/parsers/blockquote.d.ts +5 -8
- package/dist/core/parsers/blockquote.js +11 -10
- package/dist/core/parsers/built-in-openers.d.ts +2 -5
- package/dist/core/parsers/built-in-openers.js +5 -8
- package/dist/core/parsers/fence-syntax.d.ts +36 -7
- package/dist/core/parsers/fence-syntax.js +61 -11
- package/dist/core/parsers/fenced-code.d.ts +16 -0
- package/dist/core/parsers/fenced-code.js +16 -15
- package/dist/core/parsers/heading.d.ts +19 -2
- package/dist/core/parsers/heading.js +50 -2
- package/dist/core/parsers/html-block.d.ts +3 -6
- package/dist/core/parsers/html-block.js +10 -11
- package/dist/core/parsers/indented-code.d.ts +1 -1
- package/dist/core/parsers/indented-code.js +2 -8
- package/dist/core/parsers/link-reference.d.ts +5 -3
- package/dist/core/parsers/link-reference.js +116 -120
- package/dist/core/parsers/list.d.ts +12 -5
- package/dist/core/parsers/list.js +53 -36
- package/dist/core/parsers/paragraph.d.ts +3 -3
- package/dist/core/parsers/paragraph.js +14 -5
- package/dist/core/parsers/table-completion.d.ts +2 -5
- package/dist/core/parsers/table-completion.js +7 -10
- package/dist/core/parsers/table.d.ts +8 -8
- package/dist/core/parsers/table.js +23 -26
- package/dist/core/parsers/thematic-break.js +15 -14
- package/dist/core/paths.d.ts +13 -0
- package/dist/core/paths.js +31 -0
- package/dist/core/terminator-escalation.d.ts +0 -7
- package/dist/core/terminator-escalation.js +5 -8
- package/dist/core/url-policy.d.ts +2 -5
- package/dist/core/url-policy.js +8 -12
- package/dist/cursor/caret-memory.d.ts +34 -0
- package/dist/cursor/caret-memory.js +82 -0
- package/dist/cursor/coordinate-spaces.d.ts +26 -19
- package/dist/cursor/coordinate-spaces.js +32 -20
- package/dist/cursor/dom-walk.d.ts +7 -13
- package/dist/cursor/dom-walk.js +7 -13
- package/dist/cursor/edge-affinity.d.ts +7 -35
- package/dist/cursor/edge-affinity.js +13 -44
- package/dist/cursor/focused-caret.d.ts +6 -8
- package/dist/cursor/focused-caret.js +7 -16
- package/dist/cursor/height-model.d.ts +3 -3
- package/dist/cursor/height-model.js +5 -5
- package/dist/cursor/height-oracle.d.ts +10 -7
- package/dist/cursor/height-oracle.js +26 -75
- package/dist/cursor/observe-resize.d.ts +13 -0
- package/dist/cursor/observe-resize.js +43 -0
- package/dist/cursor/overlay-rects.d.ts +2 -5
- package/dist/cursor/overlay-rects.js +2 -5
- package/dist/cursor/overlay-remeasure.d.ts +6 -7
- package/dist/cursor/overlay-remeasure.js +10 -14
- package/dist/cursor/pending-marks.d.ts +7 -9
- package/dist/cursor/pending-marks.js +6 -27
- package/dist/cursor/point-offset.d.ts +16 -10
- package/dist/cursor/point-offset.js +60 -25
- package/dist/cursor/reveal-source.d.ts +7 -11
- package/dist/cursor/reveal-source.js +10 -18
- package/dist/cursor/scroll-ancestors.d.ts +9 -20
- package/dist/cursor/scroll-ancestors.js +14 -26
- package/dist/cursor/scroll-owner.d.ts +92 -0
- package/dist/cursor/scroll-owner.js +283 -0
- package/dist/cursor/scrollport.d.ts +16 -8
- package/dist/cursor/scrollport.js +28 -5
- package/dist/cursor/sticky-column.d.ts +6 -29
- package/dist/cursor/sticky-column.js +6 -49
- package/dist/cursor/sticky-measure.d.ts +14 -9
- package/dist/cursor/sticky-measure.js +99 -49
- package/dist/cursor/surface-backend.d.ts +41 -0
- package/dist/cursor/surface-backend.js +78 -0
- package/dist/cursor/typography-estimates.d.ts +3 -3
- package/dist/cursor/typography-estimates.js +3 -3
- package/dist/cursor/visual-lines.d.ts +25 -13
- package/dist/cursor/visual-lines.js +72 -28
- package/dist/cursor/widget-edge-snap.d.ts +23 -0
- package/dist/cursor/widget-edge-snap.js +39 -0
- package/dist/cursor/widget-offset.d.ts +111 -102
- package/dist/cursor/widget-offset.js +352 -177
- package/dist/debug/diagnostics-report.d.ts +6 -6
- package/dist/debug/diagnostics-report.js +5 -5
- package/dist/debug/dump-tree.js +2 -2
- package/dist/debug/editor-diagnostics.d.ts +15 -0
- package/dist/debug/editor-diagnostics.js +33 -0
- package/dist/debug/inspect.d.ts +2 -2
- package/dist/debug/inspect.js +4 -4
- package/dist/debug/interaction-trace.d.ts +14 -15
- package/dist/debug/interaction-trace.js +19 -20
- package/dist/debug/operations-log.d.ts +1 -1
- package/dist/debug/operations-log.js +1 -1
- package/dist/decorations/buckets.d.ts +6 -12
- package/dist/decorations/buckets.js +4 -11
- package/dist/decorations/decoration-state.svelte.d.ts +2 -3
- package/dist/decorations/decoration-state.svelte.js +24 -26
- package/dist/decorations/island-dom.d.ts +10 -18
- package/dist/decorations/island-dom.js +25 -50
- package/dist/decorations/reserved-attrs.d.ts +6 -8
- package/dist/decorations/reserved-attrs.js +31 -17
- package/dist/decorations/types.d.ts +6 -7
- package/dist/decorations/types.js +2 -1
- package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
- package/dist/decorations/use-block-decorations.svelte.js +71 -0
- package/dist/decorations/widget-dom.d.ts +3 -3
- package/dist/decorations/widget-dom.js +5 -5
- package/dist/dev-warn.d.ts +5 -2
- package/dist/dev-warn.js +16 -4
- package/dist/editor-actions/ancestry-folds.d.ts +9 -14
- package/dist/editor-actions/ancestry-folds.js +13 -18
- package/dist/editor-actions/block-edit-core.d.ts +49 -22
- package/dist/editor-actions/block-edit-core.js +279 -151
- package/dist/editor-actions/block-edit-scope.d.ts +63 -50
- package/dist/editor-actions/block-edit-scope.js +100 -48
- package/dist/editor-actions/block-edit.d.ts +2 -3
- package/dist/editor-actions/block-edit.js +14 -90
- package/dist/editor-actions/commit/history.d.ts +4 -4
- package/dist/editor-actions/commit/history.js +33 -34
- package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
- package/dist/editor-actions/commit/reading-write-gate.js +56 -0
- package/dist/editor-actions/commit/text-batch.d.ts +7 -11
- package/dist/editor-actions/commit/text-batch.js +6 -7
- package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
- package/dist/editor-actions/commit/undo-controller.js +346 -216
- package/dist/editor-actions/container-block-component.d.ts +32 -51
- package/dist/editor-actions/container-block-component.js +66 -92
- package/dist/editor-actions/container-edit.d.ts +4 -2
- package/dist/editor-actions/container-edit.js +14 -44
- package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
- package/dist/editor-actions/container-exit-overrides.js +19 -21
- package/dist/editor-actions/deps.d.ts +25 -32
- package/dist/editor-actions/enter-completion.d.ts +12 -15
- package/dist/editor-actions/enter-completion.js +49 -51
- package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
- package/dist/editor-actions/focus/focus-dispatch.js +33 -52
- package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
- package/dist/editor-actions/focus/focus-landing.js +29 -14
- package/dist/editor-actions/focus/focus.d.ts +3 -2
- package/dist/editor-actions/focus/focus.js +42 -59
- package/dist/editor-actions/index.d.ts +4 -3
- package/dist/editor-actions/index.js +5 -4
- package/dist/editor-actions/inline-range-commit.d.ts +18 -16
- package/dist/editor-actions/inline-range-commit.js +45 -54
- package/dist/editor-actions/leaf-write.d.ts +11 -0
- package/dist/editor-actions/leaf-write.js +102 -0
- package/dist/editor-actions/list-context.d.ts +9 -10
- package/dist/editor-actions/list-context.js +115 -110
- package/dist/editor-actions/list-overrides.d.ts +13 -5
- package/dist/editor-actions/list-overrides.js +36 -12
- package/dist/editor-actions/merge-fallback.d.ts +10 -16
- package/dist/editor-actions/merge-fallback.js +11 -22
- package/dist/editor-actions/nested/container-actions.d.ts +37 -0
- package/dist/editor-actions/nested/container-actions.js +42 -0
- package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
- package/dist/editor-actions/nested/emptied-container.js +5 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
- package/dist/editor-actions/nested/nested-actions.js +17 -15
- package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
- package/dist/editor-actions/nested/nested-block-edit.js +40 -134
- package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
- package/dist/editor-actions/nested/nested-focus.js +33 -21
- package/dist/editor-actions/paste-coordinator.d.ts +3 -2
- package/dist/editor-actions/paste-coordinator.js +17 -13
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
- package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
- package/dist/editor-actions/plugin/container.d.ts +55 -76
- package/dist/editor-actions/plugin/container.js +105 -186
- package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
- package/dist/editor-actions/plugin/directive-container.js +7 -8
- package/dist/editor-actions/reorder-action.d.ts +7 -12
- package/dist/editor-actions/reorder-action.js +32 -48
- package/dist/editor-actions/reorder-drag.d.ts +12 -8
- package/dist/editor-actions/reorder-drag.js +45 -41
- package/dist/editor-actions/replacement-focus.d.ts +13 -21
- package/dist/editor-actions/replacement-focus.js +32 -33
- package/dist/editor-actions/search-replace.js +71 -67
- package/dist/editor-actions/stored-caret.d.ts +7 -0
- package/dist/editor-actions/stored-caret.js +10 -0
- package/dist/editor-actions/table-context.d.ts +9 -11
- package/dist/editor-actions/table-context.js +70 -93
- package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
- package/dist/editor-actions/unwrap-strategies.js +52 -63
- package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
- package/dist/editor-actions/whole-block-focus-surface.js +43 -53
- package/dist/editor-events.d.ts +25 -29
- package/dist/editor-events.js +17 -28
- package/dist/editor-keys.d.ts +96 -104
- package/dist/editor-keys.js +11 -24
- package/dist/editor-props.d.ts +91 -71
- package/dist/editor-rects.d.ts +23 -34
- package/dist/editor-rects.js +9 -77
- package/dist/env.d.ts +6 -4
- package/dist/env.js +8 -4
- package/dist/index.d.ts +6 -2
- package/dist/index.js +5 -2
- package/dist/inline-menu/inline-menu-session.d.ts +37 -0
- package/dist/inline-menu/inline-menu-session.js +98 -0
- package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
- package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
- package/dist/inline-menu/types.d.ts +77 -0
- package/dist/inline-menu/types.js +7 -0
- package/dist/invariants/child-id-parity.d.ts +23 -0
- package/dist/invariants/child-id-parity.js +39 -0
- package/dist/invariants/commit-paths.d.ts +4 -4
- package/dist/invariants/commit-paths.js +4 -4
- package/dist/invariants/commit-scope.d.ts +4 -4
- package/dist/invariants/commit-scope.js +9 -8
- package/dist/invariants/context-keys.d.ts +2 -5
- package/dist/invariants/context-keys.js +3 -6
- package/dist/invariants/descriptor.d.ts +2 -6
- package/dist/invariants/descriptor.js +2 -6
- package/dist/invariants/inline-transitions.d.ts +9 -16
- package/dist/invariants/inline-transitions.js +10 -18
- package/dist/invariants/install.d.ts +18 -27
- package/dist/invariants/install.js +29 -30
- package/dist/invariants/keeps-a-block.d.ts +7 -0
- package/dist/invariants/keeps-a-block.js +14 -0
- package/dist/invariants/landable-caret.d.ts +5 -7
- package/dist/invariants/landable-caret.js +8 -11
- package/dist/invariants/landing-focus-scroll.d.ts +7 -0
- package/dist/invariants/landing-focus-scroll.js +13 -0
- package/dist/invariants/landing-value.d.ts +13 -0
- package/dist/invariants/landing-value.js +27 -0
- package/dist/invariants/marker-css-parity.d.ts +5 -6
- package/dist/invariants/marker-css-parity.js +11 -12
- package/dist/invariants/measures-in-own-list.d.ts +6 -0
- package/dist/invariants/measures-in-own-list.js +13 -0
- package/dist/invariants/node-shape.d.ts +18 -37
- package/dist/invariants/node-shape.js +123 -79
- package/dist/invariants/open-tail.d.ts +7 -0
- package/dist/invariants/open-tail.js +45 -0
- package/dist/invariants/placement-ends-widget.d.ts +8 -0
- package/dist/invariants/placement-ends-widget.js +13 -0
- package/dist/invariants/registry.d.ts +27 -66
- package/dist/invariants/registry.js +61 -137
- package/dist/invariants/render-fidelity.d.ts +4 -4
- package/dist/invariants/render-fidelity.js +5 -5
- package/dist/invariants/selection-endpoints.d.ts +6 -7
- package/dist/invariants/selection-endpoints.js +18 -16
- package/dist/invariants/single-node-sink.d.ts +4 -5
- package/dist/invariants/single-node-sink.js +4 -5
- package/dist/invariants/snapshot-integrity.d.ts +5 -6
- package/dist/invariants/snapshot-integrity.js +1 -1
- package/dist/invariants/structural-descriptor.d.ts +6 -15
- package/dist/invariants/structural-descriptor.js +6 -15
- package/dist/menu-icons.d.ts +47 -0
- package/dist/menu-icons.js +113 -0
- package/dist/perf/instruments.d.ts +20 -5
- package/dist/perf/instruments.js +35 -15
- package/dist/perf/use-mount-gauge.svelte.js +4 -4
- package/dist/plugin.d.ts +38 -8
- package/dist/plugin.js +102 -74
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
- package/dist/plugins/admonitions/admonition-kind.js +12 -10
- package/dist/plugins/admonitions/convert-document.d.ts +5 -5
- package/dist/plugins/admonitions/convert-document.js +8 -7
- package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
- package/dist/plugins/admonitions/gh-alert.js +21 -22
- package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
- package/dist/plugins/admonitions/github-alert-kind.js +28 -37
- package/dist/plugins/admonitions/index.js +2 -2
- package/dist/plugins/admonitions/kinds.d.ts +1 -1
- package/dist/plugins/admonitions/register.js +11 -2
- package/dist/plugins/details/DetailsBlock.svelte +20 -20
- package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
- package/dist/plugins/details/details-disclosure.svelte.js +6 -7
- package/dist/plugins/details/details-kind.d.ts +6 -7
- package/dist/plugins/details/details-kind.js +44 -59
- package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
- package/dist/plugins/emoji/emoji-recognizer.js +7 -14
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
- package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +3 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
- package/dist/plugins/footnotes/footnote-definition.js +69 -45
- package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
- package/dist/plugins/footnotes/footnote-lookup.js +14 -26
- package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
- package/dist/plugins/footnotes/footnote-numbering.js +22 -31
- package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
- package/dist/plugins/footnotes/footnote-reference.js +8 -13
- package/dist/plugins/footnotes/index.js +2 -3
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
- package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
- package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
- package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/word-char.js +4 -0
- package/dist/plugins/latex/BlockMath.svelte +58 -75
- package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
- package/dist/plugins/latex/MathInline.svelte +10 -9
- package/dist/plugins/latex/flanking.d.ts +1 -0
- package/dist/plugins/latex/flanking.js +3 -0
- package/dist/plugins/latex/index.d.ts +1 -1
- package/dist/plugins/latex/latex-kind.d.ts +4 -4
- package/dist/plugins/latex/latex-kind.js +113 -85
- package/dist/plugins/latex/math-completion.d.ts +1 -1
- package/dist/plugins/latex/math-completion.js +5 -8
- package/dist/plugins/latex/math-layout.d.ts +2 -8
- package/dist/plugins/latex/math-layout.js +0 -9
- package/dist/plugins/latex/math-renderer.d.ts +17 -20
- package/dist/plugins/latex/math-renderer.js +21 -38
- package/dist/plugins/latex/math-source.d.ts +4 -8
- package/dist/plugins/latex/math-source.js +36 -75
- package/dist/plugins/latex/register.d.ts +10 -11
- package/dist/plugins/latex/register.js +24 -10
- package/dist/plugins/latex/renderer.d.ts +9 -10
- package/dist/plugins/latex/renderer.js +9 -24
- package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
- package/dist/plugins/mermaid/index.js +1 -1
- package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
- package/dist/plugins/mermaid/mermaid-kind.js +30 -47
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
- package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
- package/dist/plugins/mermaid/register.d.ts +3 -3
- package/dist/plugins/mermaid/register.js +5 -5
- package/dist/plugins/mermaid/renderer.d.ts +5 -5
- package/dist/plugins/mermaid/renderer.js +8 -11
- package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
- package/dist/plugins/parrot/parrot-plugin.js +3 -3
- package/dist/plugins/slash-commands/filter.d.ts +23 -0
- package/dist/plugins/slash-commands/filter.js +31 -0
- package/dist/plugins/slash-commands/index.d.ts +2 -0
- package/dist/plugins/slash-commands/index.js +2 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
- package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
- package/dist/plugins/slash-commands/slash-source.js +108 -0
- package/dist/plugins/toc/TocBlock.svelte +23 -22
- package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
- package/dist/plugins/toc/heading-outline.d.ts +7 -12
- package/dist/plugins/toc/heading-outline.js +22 -36
- package/dist/plugins/toc/navigation-queue.d.ts +2 -4
- package/dist/plugins/toc/toc-plugin.d.ts +5 -5
- package/dist/plugins/toc/toc-plugin.js +20 -13
- package/dist/presentation-mode.d.ts +15 -23
- package/dist/presentation-mode.js +19 -25
- package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
- package/dist/reactivity/block-list-state.svelte.js +8 -9
- package/dist/reactivity/block-window.svelte.d.ts +12 -6
- package/dist/reactivity/block-window.svelte.js +44 -17
- package/dist/reactivity/child-list.d.ts +34 -0
- package/dist/reactivity/child-list.js +48 -0
- package/dist/reactivity/content-version.svelte.d.ts +4 -7
- package/dist/reactivity/content-version.svelte.js +3 -5
- package/dist/reactivity/hold-across.d.ts +39 -0
- package/dist/reactivity/hold-across.js +57 -0
- package/dist/reactivity/layout-state.svelte.d.ts +27 -0
- package/dist/reactivity/layout-state.svelte.js +51 -0
- package/dist/reactivity/list-tree.d.ts +39 -0
- package/dist/reactivity/list-tree.js +132 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
- package/dist/reactivity/list-windowing.svelte.js +143 -292
- package/dist/reactivity/measure-batch.d.ts +6 -8
- package/dist/reactivity/measure-batch.js +5 -6
- package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
- package/dist/reactivity/publish-ref.svelte.js +21 -85
- package/dist/reactivity/scope-geometry.d.ts +6 -13
- package/dist/reactivity/scope-geometry.js +7 -14
- package/dist/reactivity/state-registry.d.ts +5 -5
- package/dist/reactivity/state-registry.js +11 -15
- package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
- package/dist/reactivity/use-container-windowing.svelte.js +64 -74
- package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
- package/dist/reactivity/use-measured-child.svelte.js +41 -0
- package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
- package/dist/reactivity/use-window-floor.svelte.js +27 -0
- package/dist/reactivity/window-slice.d.ts +4 -4
- package/dist/reactivity/window-slice.js +0 -2
- package/dist/renderer-slot.d.ts +48 -0
- package/dist/renderer-slot.js +85 -0
- package/dist/scan-index.d.ts +4 -4
- package/dist/scan-index.js +4 -4
- package/dist/schema/block-commands.d.ts +69 -54
- package/dist/schema/block-commands.js +91 -104
- package/dist/schema/block-completions.d.ts +16 -19
- package/dist/schema/block-completions.js +25 -32
- package/dist/schema/block-component-registry.d.ts +13 -14
- package/dist/schema/block-component-registry.js +19 -17
- package/dist/schema/block-kind-descriptor.d.ts +234 -168
- package/dist/schema/block-kind-descriptor.js +151 -66
- package/dist/schema/block-openers.d.ts +48 -39
- package/dist/schema/block-openers.js +73 -83
- package/dist/schema/built-in-descriptors.d.ts +3 -5
- package/dist/schema/built-in-descriptors.js +96 -80
- package/dist/schema/child-spans.d.ts +12 -10
- package/dist/schema/child-spans.js +68 -34
- package/dist/schema/closure.d.ts +18 -16
- package/dist/schema/closure.js +24 -14
- package/dist/schema/command-id.d.ts +6 -8
- package/dist/schema/command-id.js +20 -25
- package/dist/schema/commands.d.ts +79 -81
- package/dist/schema/commands.js +156 -116
- package/dist/schema/container-raw.d.ts +51 -11
- package/dist/schema/container-raw.js +143 -14
- package/dist/schema/container-rebuilders.d.ts +17 -15
- package/dist/schema/container-rebuilders.js +30 -22
- package/dist/schema/context-actions.d.ts +25 -13
- package/dist/schema/context-actions.js +32 -17
- package/dist/schema/define-plugin-block.d.ts +8 -6
- package/dist/schema/define-plugin-block.js +6 -4
- package/dist/schema/fenced-code-raw.d.ts +30 -17
- package/dist/schema/fenced-code-raw.js +155 -107
- package/dist/schema/global-commands.d.ts +6 -6
- package/dist/schema/global-commands.js +14 -22
- package/dist/schema/height-estimates.d.ts +31 -0
- package/dist/schema/height-estimates.js +64 -0
- package/dist/schema/inline-construct-policy.d.ts +42 -55
- package/dist/schema/inline-construct-policy.js +36 -35
- package/dist/schema/insert-catalogue.d.ts +30 -0
- package/dist/schema/insert-catalogue.js +95 -0
- package/dist/schema/keybinding-overrides.d.ts +9 -11
- package/dist/schema/keybinding-overrides.js +1 -1
- package/dist/schema/keybindings.d.ts +15 -7
- package/dist/schema/keybindings.js +21 -9
- package/dist/schema/merge-rules.d.ts +5 -7
- package/dist/schema/merge-rules.js +7 -9
- package/dist/schema/opener-priorities.d.ts +4 -4
- package/dist/schema/opener-priorities.js +4 -4
- package/dist/schema/operations.d.ts +9 -11
- package/dist/schema/operations.js +3 -3
- package/dist/schema/page-role.d.ts +14 -0
- package/dist/schema/page-role.js +19 -0
- package/dist/schema/plugin-activation.d.ts +4 -6
- package/dist/schema/plugin-activation.js +12 -10
- package/dist/schema/plugin-editor-context.d.ts +25 -10
- package/dist/schema/plugin-editor-context.js +40 -9
- package/dist/schema/plugin-install.d.ts +49 -17
- package/dist/schema/plugin-install.js +51 -25
- package/dist/schema/plugin-kind.d.ts +12 -8
- package/dist/schema/plugin-kind.js +35 -42
- package/dist/schema/plugin-name.js +3 -3
- package/dist/schema/plugin-registry.d.ts +54 -0
- package/dist/schema/plugin-registry.js +70 -0
- package/dist/schema/reading.d.ts +23 -0
- package/dist/schema/reading.js +7 -0
- package/dist/schema/register-once.d.ts +3 -5
- package/dist/schema/register-once.js +7 -16
- package/dist/schema/registration-checks.d.ts +12 -16
- package/dist/schema/registration-checks.js +35 -51
- package/dist/schema/registration-pairs.d.ts +54 -0
- package/dist/schema/registration-pairs.js +48 -0
- package/dist/schema/registration-pending.d.ts +8 -12
- package/dist/schema/registration-pending.js +9 -9
- package/dist/schema/registry-reset.d.ts +8 -4
- package/dist/schema/registry-reset.js +13 -26
- package/dist/schema/registry-view.d.ts +25 -13
- package/dist/schema/registry-view.js +26 -20
- package/dist/schema/reserved-chords.d.ts +9 -10
- package/dist/schema/reserved-chords.js +73 -78
- package/dist/schema/reserved-chrome.d.ts +12 -11
- package/dist/schema/reserved-chrome.js +15 -11
- package/dist/schema/setext-raw.d.ts +13 -0
- package/dist/schema/setext-raw.js +33 -0
- package/dist/schema/stored-as.d.ts +20 -0
- package/dist/schema/stored-as.js +6 -0
- package/dist/schema/table-cell-raw.d.ts +18 -7
- package/dist/schema/table-cell-raw.js +28 -7
- package/dist/schema/whole-block-unit.d.ts +5 -4
- package/dist/schema/whole-block-unit.js +5 -4
- package/dist/search/document-scan.d.ts +3 -3
- package/dist/search/document-scan.js +2 -2
- package/dist/search/matcher.d.ts +1 -1
- package/dist/search/regex-executor.d.ts +5 -6
- package/dist/search/regex-executor.js +6 -8
- package/dist/search/replace.d.ts +2 -5
- package/dist/search/replace.js +2 -5
- package/dist/search/search-state.svelte.d.ts +5 -5
- package/dist/search/search-state.svelte.js +12 -16
- package/dist/selection/autoscroll.d.ts +6 -9
- package/dist/selection/block-hit-test.d.ts +16 -24
- package/dist/selection/block-hit-test.js +29 -22
- package/dist/selection/caret-doors.d.ts +15 -14
- package/dist/selection/caret-doors.js +37 -26
- package/dist/selection/caret-landing.d.ts +62 -0
- package/dist/selection/caret-landing.js +157 -0
- package/dist/selection/caret-restore.d.ts +17 -10
- package/dist/selection/caret-restore.js +10 -22
- package/dist/selection/caret-target.d.ts +30 -0
- package/dist/selection/caret-target.js +84 -0
- package/dist/selection/char-endpoint-snap.d.ts +6 -10
- package/dist/selection/char-endpoint-snap.js +8 -14
- package/dist/selection/clipboard-text.d.ts +5 -12
- package/dist/selection/clipboard-text.js +69 -172
- package/dist/selection/covered-block.d.ts +6 -8
- package/dist/selection/covered-block.js +8 -19
- package/dist/selection/cross-block/clipboard.d.ts +3 -2
- package/dist/selection/cross-block/clipboard.js +13 -4
- package/dist/selection/cross-block/dispatch.d.ts +47 -43
- package/dist/selection/cross-block/dispatch.js +12 -23
- package/dist/selection/cross-block/format-range.d.ts +18 -21
- package/dist/selection/cross-block/format-range.js +104 -103
- package/dist/selection/cross-block/format-toggle.d.ts +10 -15
- package/dist/selection/cross-block/format-toggle.js +28 -33
- package/dist/selection/cross-block/keydown.d.ts +4 -4
- package/dist/selection/cross-block/keydown.js +93 -152
- package/dist/selection/cross-block/ops.d.ts +19 -34
- package/dist/selection/cross-block/ops.js +110 -95
- package/dist/selection/cross-block/paste.d.ts +2 -3
- package/dist/selection/cross-block/paste.js +61 -104
- package/dist/selection/cross-block/pointer.d.ts +17 -15
- package/dist/selection/cross-block/pointer.js +74 -25
- package/dist/selection/cross-block/type-replace.d.ts +4 -6
- package/dist/selection/cross-block/type-replace.js +53 -146
- package/dist/selection/dead-space-caret.d.ts +20 -28
- package/dist/selection/dead-space-caret.js +79 -87
- package/dist/selection/drag-pointer.d.ts +22 -5
- package/dist/selection/drag-pointer.js +63 -31
- package/dist/selection/gap-caret.d.ts +17 -28
- package/dist/selection/gap-caret.js +14 -26
- package/dist/selection/grid-selection.d.ts +12 -0
- package/dist/selection/grid-selection.js +22 -0
- package/dist/selection/keyboard-extend.d.ts +27 -39
- package/dist/selection/keyboard-extend.js +94 -116
- package/dist/selection/multi-click.d.ts +37 -0
- package/dist/selection/multi-click.js +197 -0
- package/dist/selection/native-bridge.d.ts +30 -37
- package/dist/selection/native-bridge.js +80 -100
- package/dist/selection/nearest-block.d.ts +17 -12
- package/dist/selection/nearest-block.js +37 -18
- package/dist/selection/path-lookup.d.ts +31 -14
- package/dist/selection/path-lookup.js +110 -20
- package/dist/selection/path-math.d.ts +9 -11
- package/dist/selection/path-math.js +5 -7
- package/dist/selection/pointer-gesture.d.ts +9 -0
- package/dist/selection/pointer-gesture.js +11 -0
- package/dist/selection/pointer-session.d.ts +10 -16
- package/dist/selection/pointer-session.js +6 -7
- package/dist/selection/primitives.d.ts +64 -33
- package/dist/selection/primitives.js +61 -53
- package/dist/selection/range-coverage.d.ts +94 -0
- package/dist/selection/range-coverage.js +365 -0
- package/dist/selection/range-delete-ceremony.d.ts +28 -74
- package/dist/selection/range-delete-ceremony.js +100 -141
- package/dist/selection/range-delete-chrome.d.ts +20 -33
- package/dist/selection/range-delete-chrome.js +53 -78
- package/dist/selection/range-delete-table-coverage.d.ts +11 -25
- package/dist/selection/range-delete-table-coverage.js +42 -112
- package/dist/selection/range-delete-table.d.ts +14 -12
- package/dist/selection/range-delete-table.js +106 -310
- package/dist/selection/range-delete.d.ts +18 -19
- package/dist/selection/range-delete.js +83 -123
- package/dist/selection/round-trip-restore.d.ts +18 -0
- package/dist/selection/round-trip-restore.js +19 -0
- package/dist/selection/selection-announcer.d.ts +17 -0
- package/dist/selection/selection-announcer.js +25 -0
- package/dist/selection/selection-description.d.ts +4 -3
- package/dist/selection/selection-description.js +5 -4
- package/dist/selection/selection-drop.d.ts +52 -0
- package/dist/selection/selection-drop.js +317 -0
- package/dist/selection/selection-restore.d.ts +20 -33
- package/dist/selection/selection-restore.js +21 -44
- package/dist/selection/selection-state.svelte.d.ts +50 -42
- package/dist/selection/selection-state.svelte.js +144 -98
- package/dist/selection/shared-keydown.d.ts +22 -27
- package/dist/selection/shared-keydown.js +25 -45
- package/dist/selection/table-endpoint-snap.d.ts +17 -41
- package/dist/selection/table-endpoint-snap.js +54 -80
- package/dist/selection/table-rect-extend.d.ts +3 -6
- package/dist/selection/table-rect-extend.js +19 -14
- package/dist/styles/editor-theme.css +75 -53
- package/dist/styles/editor.css +248 -139
- package/dist/testing/conformance-core.d.ts +50 -18
- package/dist/testing/conformance-core.js +88 -50
- package/dist/testing/container-conformance.d.ts +48 -84
- package/dist/testing/container-conformance.js +159 -285
- package/dist/testing/headless-actions.d.ts +34 -19
- package/dist/testing/headless-actions.js +116 -65
- package/dist/testing/headless-block-list.svelte.d.ts +16 -0
- package/dist/testing/headless-block-list.svelte.js +22 -0
- package/dist/testing/inline-conformance.d.ts +15 -22
- package/dist/testing/inline-conformance.js +131 -148
- package/dist/testing/kind-conformance.d.ts +19 -24
- package/dist/testing/kind-conformance.js +204 -117
- package/dist/testing/kit-reading.d.ts +7 -0
- package/dist/testing/kit-reading.js +16 -0
- package/dist/testing/mount-dom-stubs.d.ts +4 -5
- package/dist/testing/mount-dom-stubs.js +8 -5
- package/dist/testing/parse-convergence.d.ts +10 -10
- package/dist/testing/parse-convergence.js +14 -49
- package/dist/testing.d.ts +13 -9
- package/dist/testing.js +28 -38
- package/dist/tree-operations/blockquote.d.ts +8 -14
- package/dist/tree-operations/blockquote.js +25 -45
- package/dist/tree-operations/chain-rebuild.d.ts +34 -25
- package/dist/tree-operations/chain-rebuild.js +115 -52
- package/dist/tree-operations/children.d.ts +5 -9
- package/dist/tree-operations/children.js +7 -11
- package/dist/tree-operations/cleanup.d.ts +6 -7
- package/dist/tree-operations/cleanup.js +14 -11
- package/dist/tree-operations/clone.js +5 -4
- package/dist/tree-operations/container-lift.d.ts +10 -5
- package/dist/tree-operations/container-lift.js +20 -14
- package/dist/tree-operations/container-offsets.d.ts +22 -0
- package/dist/tree-operations/container-offsets.js +89 -0
- package/dist/tree-operations/content-write.d.ts +52 -29
- package/dist/tree-operations/content-write.js +155 -110
- package/dist/tree-operations/index.d.ts +4 -4
- package/dist/tree-operations/index.js +4 -4
- package/dist/tree-operations/keep-one-block.d.ts +10 -0
- package/dist/tree-operations/keep-one-block.js +19 -0
- package/dist/tree-operations/leaf-range.d.ts +33 -0
- package/dist/tree-operations/leaf-range.js +67 -0
- package/dist/tree-operations/list/empty-check.d.ts +2 -3
- package/dist/tree-operations/list/empty-check.js +4 -4
- package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
- package/dist/tree-operations/list/exit-replacement.js +4 -9
- package/dist/tree-operations/list/item-partition.d.ts +2 -2
- package/dist/tree-operations/list/item-partition.js +2 -2
- package/dist/tree-operations/list/list-builders.d.ts +18 -16
- package/dist/tree-operations/list/list-builders.js +59 -30
- package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
- package/dist/tree-operations/list/ordered-markers.js +7 -16
- package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
- package/dist/tree-operations/list/reconcile-task.js +80 -23
- package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
- package/dist/tree-operations/list/sublist-separator.js +20 -27
- package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
- package/dist/tree-operations/list/task-paragraph.js +54 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
- package/dist/tree-operations/list/unwrap-merge.js +44 -79
- package/dist/tree-operations/node-ops.d.ts +30 -52
- package/dist/tree-operations/node-ops.js +152 -218
- package/dist/tree-operations/node-primitives.d.ts +44 -31
- package/dist/tree-operations/node-primitives.js +84 -60
- package/dist/tree-operations/open-tail.d.ts +25 -0
- package/dist/tree-operations/open-tail.js +100 -0
- package/dist/tree-operations/parse-block.d.ts +15 -2
- package/dist/tree-operations/parse-block.js +19 -4
- package/dist/tree-operations/paste/apply.d.ts +7 -8
- package/dist/tree-operations/paste/apply.js +33 -63
- package/dist/tree-operations/paste/body-write.d.ts +8 -6
- package/dist/tree-operations/paste/body-write.js +13 -14
- package/dist/tree-operations/paste/container-match.d.ts +7 -10
- package/dist/tree-operations/paste/container-match.js +76 -58
- package/dist/tree-operations/paste/container-paste.d.ts +3 -3
- package/dist/tree-operations/paste/container-paste.js +3 -3
- package/dist/tree-operations/paste/dispatch.d.ts +26 -29
- package/dist/tree-operations/paste/dispatch.js +68 -53
- package/dist/tree-operations/paste/focus-target.d.ts +11 -14
- package/dist/tree-operations/paste/focus-target.js +13 -18
- package/dist/tree-operations/paste/hooks.d.ts +7 -12
- package/dist/tree-operations/paste/hooks.js +49 -46
- package/dist/tree-operations/paste/line-ending.d.ts +11 -0
- package/dist/tree-operations/paste/line-ending.js +32 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
- package/dist/tree-operations/paste/list-absorb.js +17 -19
- package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
- package/dist/tree-operations/paste/list-break-out.js +24 -32
- package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
- package/dist/tree-operations/paste/parent-scope.js +9 -16
- package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
- package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
- package/dist/tree-operations/paste/paste-replacement.js +73 -42
- package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
- package/dist/tree-operations/paste/paste-transforms.js +18 -27
- package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
- package/dist/tree-operations/paste/replacement-parse.js +24 -0
- package/dist/tree-operations/paste/strategy.d.ts +1 -1
- package/dist/tree-operations/paste/strategy.js +1 -1
- package/dist/tree-operations/paste/table-slice.js +15 -10
- package/dist/tree-operations/paste-surfaces.d.ts +18 -29
- package/dist/tree-operations/paste-surfaces.js +14 -10
- package/dist/tree-operations/path-mutate.d.ts +7 -8
- package/dist/tree-operations/path-mutate.js +4 -4
- package/dist/tree-operations/reorder-unit.d.ts +4 -5
- package/dist/tree-operations/reorder-unit.js +5 -6
- package/dist/tree-operations/reorder.d.ts +7 -9
- package/dist/tree-operations/reorder.js +39 -40
- package/dist/tree-operations/settle.d.ts +42 -53
- package/dist/tree-operations/settle.js +241 -162
- package/dist/tree-operations/sharing.d.ts +5 -5
- package/dist/tree-operations/splice-many.d.ts +5 -5
- package/dist/tree-operations/splice-many.js +5 -5
- package/dist/tree-operations/stored-as.d.ts +13 -0
- package/dist/tree-operations/stored-as.js +48 -0
- package/dist/tree-operations/structural-change.d.ts +11 -15
- package/dist/tree-operations/structural-change.js +10 -14
- package/dist/tree-operations/structural-suffix.d.ts +22 -0
- package/dist/tree-operations/structural-suffix.js +61 -0
- package/dist/tree-operations/sub-table-copy.d.ts +7 -0
- package/dist/tree-operations/sub-table-copy.js +40 -36
- package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
- package/dist/tree-operations/table-grid-clipboard.js +11 -36
- package/dist/tree-operations/table-mutations.d.ts +7 -3
- package/dist/tree-operations/table-mutations.js +45 -9
- package/dist/tree-operations/unshare.d.ts +11 -15
- package/dist/tree-operations/unshare.js +15 -17
- package/dist/undo/manager.js +1 -1
- package/dist/undo/types.d.ts +2 -2
- package/docs/guide/consumer-guide.md +329 -205
- package/docs/guide/directives.md +7 -7
- package/docs/guide/plugin-api.md +267 -183
- package/docs/guide/plugin-guide.md +341 -235
- package/docs/guide/plugin-testing.md +96 -82
- package/package.json +17 -21
- package/dist/ambient/ambient-cursor.d.ts +0 -41
- package/dist/ambient/ambient-cursor.js +0 -120
- package/dist/components/blocks/code/code-paste.d.ts +0 -24
- package/dist/components/blocks/code/code-paste.js +0 -21
- package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
- package/dist/components/blocks/table/cell-clipboard.js +0 -67
- package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
- package/dist/components/blocks/text/hidden-suffix.js +0 -15
- package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
- package/dist/components/image/image-source-bytes.d.ts +0 -15
- package/dist/components/image/image-source-bytes.js +0 -80
- package/dist/cursor/content-offsets.d.ts +0 -29
- package/dist/cursor/content-offsets.js +0 -151
- package/dist/cursor/reveal-anchor.d.ts +0 -30
- package/dist/cursor/reveal-anchor.js +0 -31
- package/dist/invariants/split-landing.d.ts +0 -8
- package/dist/invariants/split-landing.js +0 -15
- package/dist/selection/double-click-trim.d.ts +0 -17
- package/dist/selection/double-click-trim.js +0 -57
- package/dist/tree-operations/list/terminator.d.ts +0 -17
- package/dist/tree-operations/list/terminator.js +0 -60
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
- package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dragging a selection and dropping it, as one undo entry over two raw writes (the cut, then
|
|
3
|
+
* the insert). The browser's own drag is two separate edits, which undo would take in two steps.
|
|
4
|
+
*/
|
|
5
|
+
import { emitClipboardError } from '../editor-events';
|
|
6
|
+
import { rawOffsetAt, rawRangeToDomRange } from '../cursor/widget-offset';
|
|
7
|
+
import { documentLineEnding, trailingLineEnding, trimTrailingLineEnding } from '../core/lines';
|
|
8
|
+
import { blockContentElAt } from '../components/block-el-lookup';
|
|
9
|
+
import { blockNodeAt, emptyParagraph, normalizeOwnRaw, writeOwnRaw } from '../tree-operations/node-primitives';
|
|
10
|
+
import { cloneNode } from '../tree-operations/clone';
|
|
11
|
+
import { replaceRangeInLeaf } from '../tree-operations/leaf-range';
|
|
12
|
+
import { rebuildAncestryRaw } from '../schema/container-raw';
|
|
13
|
+
import { applyPasteTransforms } from '../tree-operations/paste/paste-transforms';
|
|
14
|
+
import { parseReplacement } from '../tree-operations/paste/replacement-parse';
|
|
15
|
+
import { slotReaderAt } from '../tree-operations/list/task-paragraph';
|
|
16
|
+
import { blockNearPoint } from './nearest-block';
|
|
17
|
+
import { findSurfaceForElement } from './path-lookup';
|
|
18
|
+
import { charOffsetOf } from './primitives';
|
|
19
|
+
import { storedAsAt } from '../tree-operations/stored-as';
|
|
20
|
+
import { docPathFrom } from '../cursor/coordinate-spaces';
|
|
21
|
+
/** A drag of the editor's selection in a shape the drop can't move (leaving its element, empty,
|
|
22
|
+
* holding a line break); the drop cancels it rather than handing it back to the browser. */
|
|
23
|
+
const DECLINED = 'declined';
|
|
24
|
+
// ── Public entry ───────────────────────────────────────────────────────────
|
|
25
|
+
export function installSelectionDrop(deps) {
|
|
26
|
+
let source = null;
|
|
27
|
+
// Where the painted caret stands. A drag fires `dragover` over and over at one position,
|
|
28
|
+
// and only a move to a different drop point has a new caret to draw.
|
|
29
|
+
let caretAt = null;
|
|
30
|
+
function hideCaret() {
|
|
31
|
+
if (!caretAt)
|
|
32
|
+
return;
|
|
33
|
+
caretAt = null;
|
|
34
|
+
deps.setDropCaret(null);
|
|
35
|
+
}
|
|
36
|
+
/** The caret saying where a release would land: cancelling the browser's drop takes its own
|
|
37
|
+
* caret away, so the editor's stands where the drop would land and declines where it does. */
|
|
38
|
+
function drawCaretAt(clientX, clientY, copy) {
|
|
39
|
+
const from = source;
|
|
40
|
+
if (!from || from === DECLINED || deps.isReadOnly())
|
|
41
|
+
return hideCaret();
|
|
42
|
+
const target = dropTarget(deps, clientX, clientY);
|
|
43
|
+
if (!target)
|
|
44
|
+
return hideCaret();
|
|
45
|
+
// The same refusal `dropOffsetAfterCut` makes once the cut has shrunk the block, tested
|
|
46
|
+
// here before the cut: a move has nowhere to put bytes inside the range it took them from.
|
|
47
|
+
const inside = pathsEqual(target.path, from.path) && insideRange(target.offset, from.start, from.end);
|
|
48
|
+
if (inside && !copy) {
|
|
49
|
+
return hideCaret();
|
|
50
|
+
}
|
|
51
|
+
if (caretAt && caretAt.offset === target.offset && pathsEqual(caretAt.path, target.path)) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const rect = dropCaretRect(deps.editorRoot, target.path, target.offset);
|
|
55
|
+
if (!rect)
|
|
56
|
+
return hideCaret();
|
|
57
|
+
caretAt = target;
|
|
58
|
+
deps.setDropCaret(rect);
|
|
59
|
+
}
|
|
60
|
+
const onDragStart = (e) => {
|
|
61
|
+
source = readSelectionSource(deps, e.target);
|
|
62
|
+
};
|
|
63
|
+
const onDragEnd = () => {
|
|
64
|
+
source = null;
|
|
65
|
+
hideCaret();
|
|
66
|
+
};
|
|
67
|
+
// The editor is the drop target for every drag recognised here, declined ones included: the
|
|
68
|
+
// drop handler below must run to cancel the browser's pair of native edits.
|
|
69
|
+
const onDragOver = (e) => {
|
|
70
|
+
if (!source)
|
|
71
|
+
return;
|
|
72
|
+
e.preventDefault();
|
|
73
|
+
drawCaretAt(e.clientX, e.clientY, isCopyDrag(e));
|
|
74
|
+
};
|
|
75
|
+
// `dragleave` also fires for every child the pointer crosses, so the caret goes only once
|
|
76
|
+
// the point is outside the editor's own box.
|
|
77
|
+
const onDragLeave = (e) => {
|
|
78
|
+
if (source && !isInside(deps.editorRoot, e.clientX, e.clientY))
|
|
79
|
+
hideCaret();
|
|
80
|
+
};
|
|
81
|
+
const onDrop = (e) => {
|
|
82
|
+
const from = source;
|
|
83
|
+
source = null;
|
|
84
|
+
hideCaret();
|
|
85
|
+
if (!from)
|
|
86
|
+
return;
|
|
87
|
+
// Before every decline below, not after: the browser's two edits land separately and its
|
|
88
|
+
// undo is not the editor's, so a declined shape changes nothing rather than half of it.
|
|
89
|
+
e.preventDefault();
|
|
90
|
+
if (from === DECLINED || deps.isReadOnly())
|
|
91
|
+
return;
|
|
92
|
+
const target = dropTarget(deps, e.clientX, e.clientY);
|
|
93
|
+
if (!target)
|
|
94
|
+
return;
|
|
95
|
+
void runDrop(deps, from, target, isCopyDrag(e)).catch((error) => {
|
|
96
|
+
// A throw between the two writes leaves half the move applied; the host hears about it on
|
|
97
|
+
// the same channel paste errors use.
|
|
98
|
+
emitClipboardError(deps.events, { error, path: from.path });
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
deps.editorRoot.addEventListener('dragstart', onDragStart);
|
|
102
|
+
deps.editorRoot.addEventListener('dragend', onDragEnd);
|
|
103
|
+
deps.editorRoot.addEventListener('dragover', onDragOver);
|
|
104
|
+
deps.editorRoot.addEventListener('dragleave', onDragLeave);
|
|
105
|
+
deps.editorRoot.addEventListener('drop', onDrop);
|
|
106
|
+
return () => {
|
|
107
|
+
// A reinstall mid-drag hands the new listeners no caret to clear, so it goes here.
|
|
108
|
+
hideCaret();
|
|
109
|
+
deps.editorRoot.removeEventListener('dragstart', onDragStart);
|
|
110
|
+
deps.editorRoot.removeEventListener('dragend', onDragEnd);
|
|
111
|
+
deps.editorRoot.removeEventListener('dragover', onDragOver);
|
|
112
|
+
deps.editorRoot.removeEventListener('dragleave', onDragLeave);
|
|
113
|
+
deps.editorRoot.removeEventListener('drop', onDrop);
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/** Ctrl, or Alt (Option, macOS's copy key for a drag): the release copies instead of moving. */
|
|
117
|
+
function isCopyDrag(e) {
|
|
118
|
+
return e.ctrlKey || e.altKey;
|
|
119
|
+
}
|
|
120
|
+
/** Where `target` ends up after a splice of `delta` blocks at `at` inside `parent`: what the
|
|
121
|
+
* drop's second write addresses once the first write's reparse changed the block count. */
|
|
122
|
+
export function shiftPathAfterSplice(target, parent, at, delta) {
|
|
123
|
+
if (delta === 0 || target.length <= parent.length)
|
|
124
|
+
return target;
|
|
125
|
+
for (let i = 0; i < parent.length; i++)
|
|
126
|
+
if (target[i] !== parent[i])
|
|
127
|
+
return target;
|
|
128
|
+
if (target[parent.length] <= at)
|
|
129
|
+
return target;
|
|
130
|
+
const shifted = target.slice();
|
|
131
|
+
shifted[parent.length] += delta;
|
|
132
|
+
return shifted;
|
|
133
|
+
}
|
|
134
|
+
/** Where a drop at `offset` lands once `[start, end)` has left the same block, which shrank by
|
|
135
|
+
* `shrunkBy` bytes after the join cleanup. Null inside the range. */
|
|
136
|
+
export function dropOffsetAfterCut(offset, start, end, shrunkBy) {
|
|
137
|
+
if (insideRange(offset, start, end))
|
|
138
|
+
return null;
|
|
139
|
+
return offset <= start ? offset : Math.max(0, offset - shrunkBy);
|
|
140
|
+
}
|
|
141
|
+
// ── Reading the gesture ────────────────────────────────────────────────────
|
|
142
|
+
/** The native range the drag carries, in raw offsets: null leaves the drag to the browser, and
|
|
143
|
+
* {@link DECLINED} is the editor's selection in a shape the drop cancels. */
|
|
144
|
+
function readSelectionSource(deps, dragged) {
|
|
145
|
+
const sel = window.getSelection();
|
|
146
|
+
if (!sel || sel.isCollapsed || sel.rangeCount === 0)
|
|
147
|
+
return null;
|
|
148
|
+
const range = sel.getRangeAt(0);
|
|
149
|
+
// An element that is draggable on its own (a rendered link, an image) is not this gesture,
|
|
150
|
+
// even with a range painted elsewhere: a selection drag starts on a node the range covers.
|
|
151
|
+
if (!(dragged instanceof Node) || !range.intersectsNode(dragged))
|
|
152
|
+
return null;
|
|
153
|
+
const surface = surfaceOf(range.startContainer);
|
|
154
|
+
if (!surface || !deps.editorRoot.contains(surface))
|
|
155
|
+
return null;
|
|
156
|
+
// From here the drag is the editor's selection, so every remaining shape is declined.
|
|
157
|
+
if (!surface.contains(range.endContainer))
|
|
158
|
+
return DECLINED;
|
|
159
|
+
const found = findSurfaceForElement(surface);
|
|
160
|
+
if (!found)
|
|
161
|
+
return DECLINED;
|
|
162
|
+
const start = rawOffsetAt(surface, range.startContainer, range.startOffset);
|
|
163
|
+
const end = rawOffsetAt(surface, range.endContainer, range.endOffset);
|
|
164
|
+
if (start >= end)
|
|
165
|
+
return DECLINED;
|
|
166
|
+
const text = movedText(deps, { ...found, start, end });
|
|
167
|
+
return text === null ? DECLINED : { ...found, start, end, text };
|
|
168
|
+
}
|
|
169
|
+
/** The block and offset a drop point addresses, as a single-click caret would land. Null where
|
|
170
|
+
* the point names no character position (a whole-block unit, a table cell). */
|
|
171
|
+
function dropTarget(deps, clientX, clientY) {
|
|
172
|
+
const near = blockNearPoint(deps.editorRoot, clientX, clientY);
|
|
173
|
+
const point = near?.endpointHere();
|
|
174
|
+
if (!point || !('offset' in point) || point.cellCoordinate)
|
|
175
|
+
return null;
|
|
176
|
+
return blockNodeAt(deps.getDoc(), point.path) ? { path: point.path, offset: point.offset } : null;
|
|
177
|
+
}
|
|
178
|
+
/** Viewport rect of the caret at `offset` in the block at `path`. A block whose offset names no
|
|
179
|
+
* text position falls back to its own box, and an unmounted one to null. */
|
|
180
|
+
function dropCaretRect(root, path, offset) {
|
|
181
|
+
const el = blockContentElAt(root, path);
|
|
182
|
+
if (!el)
|
|
183
|
+
return null;
|
|
184
|
+
const at = charOffsetOf({ path, offset }, 'selection-drop:caret');
|
|
185
|
+
const rect = rawRangeToDomRange(el, at, at)?.getBoundingClientRect();
|
|
186
|
+
if (rect && rect.height > 0)
|
|
187
|
+
return { left: rect.left, top: rect.top, height: rect.height };
|
|
188
|
+
const box = el.getBoundingClientRect();
|
|
189
|
+
return box.height > 0 ? { left: box.left, top: box.top, height: box.height } : null;
|
|
190
|
+
}
|
|
191
|
+
function isInside(el, clientX, clientY) {
|
|
192
|
+
const box = el.getBoundingClientRect();
|
|
193
|
+
return clientX >= box.left && clientX <= box.right && clientY >= box.top && clientY <= box.bottom;
|
|
194
|
+
}
|
|
195
|
+
/** The source element's bytes for the range, after the paste transforms. Null for text this
|
|
196
|
+
* module does not handle: a line break needs the structural paste path. */
|
|
197
|
+
function movedText(deps, from) {
|
|
198
|
+
const node = blockNodeAt(deps.getDoc(), from.path);
|
|
199
|
+
if (!node)
|
|
200
|
+
return null;
|
|
201
|
+
const raw = trimTrailingLineEnding(node.raw).slice(from.start, from.end);
|
|
202
|
+
const text = applyPasteTransforms(raw, deps.activePlugins);
|
|
203
|
+
return text && !/[\r\n]/.test(text) ? text : null;
|
|
204
|
+
}
|
|
205
|
+
// ── The commit ─────────────────────────────────────────────────────────────
|
|
206
|
+
export function runDrop(deps, from, to, copy) {
|
|
207
|
+
// One entry for the cut and the insert, and none when neither lands.
|
|
208
|
+
return deps.controller.undoStep({ path: docPathFrom(from.path), offset: from.start }, () => moveOrCopy(deps, from, to, copy));
|
|
209
|
+
}
|
|
210
|
+
async function moveOrCopy(deps, from, to, copy) {
|
|
211
|
+
const text = from.text;
|
|
212
|
+
if (copy) {
|
|
213
|
+
await writeBlockRaw(deps, to.path, insert(to.offset, text), to.offset + text.length);
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const cut = cutFrom(deps, from);
|
|
217
|
+
if (!cut)
|
|
218
|
+
return;
|
|
219
|
+
if (pathsEqual(cut.path, to.path)) {
|
|
220
|
+
const offset = dropOffsetAfterCut(to.offset, from.start, from.end, cut.shrunkBy);
|
|
221
|
+
if (offset === null)
|
|
222
|
+
return;
|
|
223
|
+
const merged = spliceAt(cut.raw, offset, text);
|
|
224
|
+
await writeBlockRaw(deps, cut.path, () => merged, offset + text.length);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
// A table's `focus` takes a cell, never a character offset, so the temporary caret the second
|
|
228
|
+
// write moves away from is its first cell (G1.29).
|
|
229
|
+
const sourceCaret = from.inCell ? 0 : from.start;
|
|
230
|
+
const spliced = await writeBlockRaw(deps, cut.path, () => cut.raw, sourceCaret);
|
|
231
|
+
// An insert after a cut that never landed would turn the move into a copy.
|
|
232
|
+
if (spliced === null)
|
|
233
|
+
return;
|
|
234
|
+
const at = cut.path[cut.path.length - 1];
|
|
235
|
+
const target = shiftPathAfterSplice(to.path, cut.path.slice(0, -1), at, spliced);
|
|
236
|
+
await writeBlockRaw(deps, target, insert(to.offset, text), to.offset + text.length);
|
|
237
|
+
}
|
|
238
|
+
function insert(offset, text) {
|
|
239
|
+
return (raw) => spliceAt(raw, offset, text);
|
|
240
|
+
}
|
|
241
|
+
/** The source element's display bytes with the dragged range gone, cut as any in-leaf edit is so
|
|
242
|
+
* a live-mode join cleans up after itself. */
|
|
243
|
+
function cutFrom(deps, from) {
|
|
244
|
+
const node = blockNodeAt(deps.getDoc(), from.path);
|
|
245
|
+
if (!node)
|
|
246
|
+
return null;
|
|
247
|
+
if (from.inCell)
|
|
248
|
+
return cutFromCell(deps, from, node);
|
|
249
|
+
const before = trimTrailingLineEnding(node.raw);
|
|
250
|
+
const store = storedAsAt(deps.getDoc(), from.path, deps.reading);
|
|
251
|
+
const edit = replaceRangeInLeaf(node, { start: from.start, end: from.end }, '', store);
|
|
252
|
+
const raw = trimTrailingLineEnding(edit.raw);
|
|
253
|
+
return { path: from.path, raw, shrunkBy: before.length - raw.length };
|
|
254
|
+
}
|
|
255
|
+
/** A cell's bytes are joined into its row, so the table is the block the cut rewrites: the cell's
|
|
256
|
+
* own cut on a copy, then the kind's escaping and the ancestor rebuild around it. */
|
|
257
|
+
function cutFromCell(deps, from, cell) {
|
|
258
|
+
const tablePath = from.path.slice(0, -2);
|
|
259
|
+
// The cell path is resolved from a DOM selector contract, so the kind is read, not assumed.
|
|
260
|
+
const table = blockNodeAt(deps.getDoc(), tablePath);
|
|
261
|
+
if (!table || table.kind !== 'table')
|
|
262
|
+
return null;
|
|
263
|
+
const store = storedAsAt(deps.getDoc(), from.path, deps.reading);
|
|
264
|
+
const cut = replaceRangeInLeaf(cell, { start: from.start, end: from.end }, '', store);
|
|
265
|
+
const rebuilt = cloneNode(table);
|
|
266
|
+
const inner = from.path.slice(-2);
|
|
267
|
+
const [rowIdx, colIdx] = inner;
|
|
268
|
+
const written = rebuilt.children?.[rowIdx]?.children?.[colIdx];
|
|
269
|
+
if (!written)
|
|
270
|
+
return null;
|
|
271
|
+
writeOwnRaw(written, trimTrailingLineEnding(cut.raw), documentLineEnding(deps.getDoc()), deps.reading.grammar);
|
|
272
|
+
rebuildAncestryRaw(rebuilt, inner, deps.reading.grammar);
|
|
273
|
+
const raw = trimTrailingLineEnding(rebuilt.raw);
|
|
274
|
+
return { path: tablePath, raw, shrunkBy: trimTrailingLineEnding(table.raw).length - raw.length };
|
|
275
|
+
}
|
|
276
|
+
/** Replaces the block at `path` with the reparse of `rewrite`'s bytes. Returns the change in block
|
|
277
|
+
* count at that position, so a second write's path stays right, or null when nothing landed. */
|
|
278
|
+
async function writeBlockRaw(deps, path, rewrite, caret) {
|
|
279
|
+
const doc = deps.getDoc();
|
|
280
|
+
const node = blockNodeAt(doc, path);
|
|
281
|
+
if (!node)
|
|
282
|
+
return null;
|
|
283
|
+
// The bytes are built outside the block's own element, so the kind's write rule runs here.
|
|
284
|
+
const lineEnding = documentLineEnding(doc);
|
|
285
|
+
const written = normalizeOwnRaw(node, rewrite(trimTrailingLineEnding(node.raw)), lineEnding);
|
|
286
|
+
// A block emptied by the cut keeps its position as a blank paragraph: no splice, so the
|
|
287
|
+
// second write's path is still the one resolved at the drop.
|
|
288
|
+
const read = slotReaderAt(doc, path, deps.reading.grammar);
|
|
289
|
+
const parsed = parseReplacement(node, written, lineEnding, read, () => [
|
|
290
|
+
emptyParagraph(node.leadingTrivia ?? '', trailingLineEnding(node.raw, lineEnding))
|
|
291
|
+
]);
|
|
292
|
+
if (!parsed)
|
|
293
|
+
return null;
|
|
294
|
+
const landed = await deps.coordinator.replaceBlock(path, parsed.replacement, { replacementIndex: parsed.replacement.length - 1, offset: caret },
|
|
295
|
+
// The drop's undo step records the selection, so this offset is never read.
|
|
296
|
+
{ source: 'selection-drop', snapshotOffset: 0 });
|
|
297
|
+
// The count that landed, not the parse's: a container's body rule can rewrite the list.
|
|
298
|
+
return landed === null ? null : landed - 1;
|
|
299
|
+
}
|
|
300
|
+
// ── Small helpers ──────────────────────────────────────────────────────────
|
|
301
|
+
function spliceAt(raw, offset, text) {
|
|
302
|
+
const at = Math.max(0, Math.min(offset, raw.length));
|
|
303
|
+
return raw.slice(0, at) + text + raw.slice(at);
|
|
304
|
+
}
|
|
305
|
+
/** Strictly between `start` and `end`: a position the dragged range itself covers. */
|
|
306
|
+
function insideRange(offset, start, end) {
|
|
307
|
+
return offset > start && offset < end;
|
|
308
|
+
}
|
|
309
|
+
function pathsEqual(a, b) {
|
|
310
|
+
return a.length === b.length && a.every((v, i) => v === b[i]);
|
|
311
|
+
}
|
|
312
|
+
function surfaceOf(node) {
|
|
313
|
+
let el = node instanceof HTMLElement ? node : node.parentElement;
|
|
314
|
+
while (el && el.contentEditable !== 'true')
|
|
315
|
+
el = el.parentElement;
|
|
316
|
+
return el;
|
|
317
|
+
}
|
|
@@ -1,46 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* can't be carried by only one. A gap caret takes {@link restoreGapCaret}, the same road minus
|
|
6
|
-
* the endpoint pair.
|
|
2
|
+
* The checks a stored selection passes before it goes back onto the live editor: each endpoint
|
|
3
|
+
* resolved against the current tree and clamped into its block. `caret-landing.ts :: restore` puts
|
|
4
|
+
* every stored selection back, a gap caret through {@link restoreGapCaret}.
|
|
7
5
|
*/
|
|
8
6
|
import type { DocumentView } from '../core/node-views';
|
|
9
|
-
import type {
|
|
10
|
-
import
|
|
7
|
+
import type { BlockComponent } from '../block-component';
|
|
8
|
+
import { type SelectionPoint } from './primitives';
|
|
11
9
|
import { type GapCaretPosition } from './gap-caret';
|
|
12
10
|
import type { SelectionState } from './selection-state.svelte';
|
|
11
|
+
import type { CaretMemory } from '../cursor/caret-memory';
|
|
13
12
|
/**
|
|
14
13
|
* `unresolvable` is decided before anything happens and is the only outcome that leaves the
|
|
15
|
-
* editor untouched. `unplaced` is everything short of both halves landing; the
|
|
16
|
-
* the
|
|
14
|
+
* editor untouched. `unplaced` is everything short of both halves landing; the mount and, on
|
|
15
|
+
* the overlay route, the cross-block state write have already run.
|
|
17
16
|
*/
|
|
18
17
|
export type SelectionRestoreOutcome = 'applied' | 'unresolvable' | 'unplaced';
|
|
19
|
-
export interface
|
|
18
|
+
export interface GapCaretRestoreDeps {
|
|
20
19
|
getDoc(): DocumentView;
|
|
21
20
|
selectionState: SelectionState;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
/** Mounts the block at `path`: the caret landing's `mount`. */
|
|
22
|
+
mount(path: number[]): Promise<BlockComponent | null>;
|
|
23
|
+
/** Brings the mounted block into view as the restore's reveal policy says. */
|
|
24
|
+
reveal(path: number[]): Promise<void>;
|
|
25
|
+
/** Cleared on each restore, since a placed caret did not arrive by a key. */
|
|
26
|
+
caretMemory: Pick<CaretMemory, 'forget'>;
|
|
26
27
|
}
|
|
27
|
-
/**
|
|
28
|
-
*
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
*/
|
|
32
|
-
export declare function restoreSelection(selection: EditorSelection, deps: SelectionRestoreDeps): Promise<SelectionRestoreOutcome>;
|
|
33
|
-
/**
|
|
34
|
-
* Restore a gap caret. The scope check is `gapEligibleAt`'s, not a full eligibility gate:
|
|
35
|
-
* the tree being restored is the one the gap was minted against, so `gapEdges` cannot have
|
|
36
|
-
* changed under it, but the PATH can now name something no BlockList renders.
|
|
37
|
-
*/
|
|
38
|
-
export declare function restoreGapCaret(pos: GapCaretPosition, deps: SelectionRestoreDeps): Promise<SelectionRestoreOutcome>;
|
|
39
|
-
/**
|
|
40
|
-
* Clamp an endpoint into its block's addressable range, or null when its path no longer
|
|
41
|
-
* resolves to a block (the document root included). The NODE KIND picks the coordinate space,
|
|
42
|
-
* not the `cellCoordinate` flag: an intra-table endpoint is unflagged (see
|
|
43
|
-
* {@link SelectionPoint}) yet still carries a cell index. The char-space bound is `raw`, which
|
|
44
|
-
* on a marker-bearing kind runs past the content end; the DOM walk lands such an offset there.
|
|
45
|
-
*/
|
|
28
|
+
/** Restores a gap caret with only the child-list check: the tree is the one the gap was made
|
|
29
|
+
* against, so its `gapEdges` hold, but the path may name something no BlockList renders. */
|
|
30
|
+
export declare function restoreGapCaret(pos: GapCaretPosition, deps: GapCaretRestoreDeps): Promise<SelectionRestoreOutcome>;
|
|
31
|
+
/** Clamps an endpoint into its block's whole `raw`, markers included, or null when its path names
|
|
32
|
+
* no block. An offset on a table path comes back flagged as a cell index, even a plain one. */
|
|
46
33
|
export declare function resolveSelectionPoint(doc: DocumentView, point: SelectionPoint): SelectionPoint | null;
|
|
@@ -1,66 +1,43 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* can't be carried by only one. A gap caret takes {@link restoreGapCaret}, the same road minus
|
|
6
|
-
* the endpoint pair.
|
|
2
|
+
* The checks a stored selection passes before it goes back onto the live editor: each endpoint
|
|
3
|
+
* resolved against the current tree and clamped into its block. `caret-landing.ts :: restore` puts
|
|
4
|
+
* every stored selection back, a gap caret through {@link restoreGapCaret}.
|
|
7
5
|
*/
|
|
8
6
|
import { isBlockNode, nodeAt } from '../tree-operations/node-primitives';
|
|
9
|
-
import {
|
|
7
|
+
import { cellPoint } from './primitives';
|
|
10
8
|
import { placeGapCaret } from './caret-doors';
|
|
11
9
|
import { gapScopeChildren } from './gap-caret';
|
|
12
|
-
import {
|
|
13
|
-
/**
|
|
14
|
-
*
|
|
15
|
-
* declined before the reveal, so a dead snapshot cannot move the viewport or disturb a live
|
|
16
|
-
* selection. What a decline does about the on-screen selection is the caller's policy.
|
|
17
|
-
*/
|
|
18
|
-
export async function restoreSelection(selection, deps) {
|
|
19
|
-
const doc = deps.getDoc();
|
|
20
|
-
const anchor = resolveSelectionPoint(doc, selection.anchor);
|
|
21
|
-
const focus = resolveSelectionPoint(doc, selection.focus);
|
|
22
|
-
if (!anchor || !focus)
|
|
23
|
-
return 'unresolvable';
|
|
24
|
-
// Reveal exactly what the applier parks the caret at: a cell-coordinate focus parks in its
|
|
25
|
-
// deep [table, row, col] cell, and table rows window too.
|
|
26
|
-
const revealed = await deps.revealTarget(deps.selectionState.cellLandingFor(focus).path);
|
|
27
|
-
const placed = applySelectionToDom({ anchor, focus }, deps.selectionState, deps.getBlockElByPath);
|
|
28
|
-
return revealed && placed ? 'applied' : 'unplaced';
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Restore a gap caret. The scope check is `gapEligibleAt`'s, not a full eligibility gate:
|
|
32
|
-
* the tree being restored is the one the gap was minted against, so `gapEdges` cannot have
|
|
33
|
-
* changed under it, but the PATH can now name something no BlockList renders.
|
|
34
|
-
*/
|
|
10
|
+
import { clampCellIndex, countsCells } from '../schema/block-kind-descriptor';
|
|
11
|
+
/** Restores a gap caret with only the child-list check: the tree is the one the gap was made
|
|
12
|
+
* against, so its `gapEdges` hold, but the path may name something no BlockList renders. */
|
|
35
13
|
export async function restoreGapCaret(pos, deps) {
|
|
36
14
|
const children = gapScopeChildren(deps.getDoc(), pos.parentPath);
|
|
37
15
|
if (!children)
|
|
38
16
|
return 'unresolvable';
|
|
17
|
+
deps.caretMemory.forget();
|
|
39
18
|
const index = Math.min(Math.max(pos.index, 0), children.length);
|
|
40
19
|
// The boundary itself mounts nothing; what must be on screen is the block it sits
|
|
41
20
|
// against, so the gap's own BlockList is inside a live window when it renders.
|
|
42
21
|
const neighbour = index < children.length ? index : index - 1;
|
|
43
|
-
const
|
|
22
|
+
const neighbourPath = [...pos.parentPath, neighbour];
|
|
23
|
+
const mounted = (await deps.mount(neighbourPath)) !== null;
|
|
24
|
+
if (mounted)
|
|
25
|
+
await deps.reveal(neighbourPath);
|
|
44
26
|
placeGapCaret(deps.selectionState, { parentPath: pos.parentPath, index });
|
|
45
|
-
return
|
|
27
|
+
return mounted ? 'applied' : 'unplaced';
|
|
46
28
|
}
|
|
47
|
-
/**
|
|
48
|
-
*
|
|
49
|
-
* resolves to a block (the document root included). The NODE KIND picks the coordinate space,
|
|
50
|
-
* not the `cellCoordinate` flag: an intra-table endpoint is unflagged (see
|
|
51
|
-
* {@link SelectionPoint}) yet still carries a cell index. The char-space bound is `raw`, which
|
|
52
|
-
* on a marker-bearing kind runs past the content end; the DOM walk lands such an offset there.
|
|
53
|
-
*/
|
|
29
|
+
/** Clamps an endpoint into its block's whole `raw`, markers included, or null when its path names
|
|
30
|
+
* no block. An offset on a table path comes back flagged as a cell index, even a plain one. */
|
|
54
31
|
export function resolveSelectionPoint(doc, point) {
|
|
55
32
|
const node = nodeAt(doc, point.path);
|
|
56
33
|
if (node === null || !isBlockNode(node))
|
|
57
34
|
return null;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
35
|
+
const cells = countsCells(node);
|
|
36
|
+
const offset = cells
|
|
37
|
+
? clampCellIndex(node, point.offset)
|
|
38
|
+
: Math.min(Math.max(point.offset, 0), node.raw.length);
|
|
62
39
|
// Path copied so a restored endpoint never aliases the caller's snapshot.
|
|
63
|
-
return point.cellCoordinate
|
|
64
|
-
?
|
|
40
|
+
return cells || point.cellCoordinate
|
|
41
|
+
? cellPoint(point.path, offset)
|
|
65
42
|
: { path: point.path.slice(), offset };
|
|
66
43
|
}
|
|
@@ -1,32 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Reactive state for the editor
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Reactive state for the selections the editor owns: a cross-block range, a gap caret
|
|
3
|
+
* (`gap-caret.ts`), or an inline widget selected whole. At most one is live, since every mutator
|
|
4
|
+
* writes all three through one private writer; all are null while the browser's own selection
|
|
5
|
+
* rules. Transitions: `docs/design/editor.md` § Cross-block selection.
|
|
6
6
|
*/
|
|
7
7
|
import type { DocumentView } from '../core/node-views';
|
|
8
8
|
import type { GapCaretPosition } from './gap-caret';
|
|
9
|
-
import type { SelectionEndpoint, SelectionPoint } from './primitives';
|
|
9
|
+
import type { SelectedWidgetRange, SelectionEndpoint, SelectionPoint, WidgetTarget } from './primitives';
|
|
10
10
|
export interface SelectionStateOptions {
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
*
|
|
18
|
-
* without it `isCustomRendered` cannot see intra-table rects and mirrors `isCrossBlock`.
|
|
19
|
-
*/
|
|
11
|
+
/** Fires after any mutation, or once at the end of a {@link SelectionState.batch} that held
|
|
12
|
+
* one; `placementOnly` says a caret placement was all the flush held. */
|
|
13
|
+
onChange?: (change: {
|
|
14
|
+
placementOnly: boolean;
|
|
15
|
+
}) => void;
|
|
16
|
+
/** Document accessor. Absent in harnesses that only exercise cross-block semantics, where no
|
|
17
|
+
* point is normalized and a table endpoint is stored as written. */
|
|
20
18
|
getDoc?: () => DocumentView;
|
|
19
|
+
/** The live span of the widget a selection holds, or null once none starts there. Absent, a
|
|
20
|
+
* selected widget has no range and reports the offset it was entered at. */
|
|
21
|
+
widgetSpan?: (target: WidgetTarget) => {
|
|
22
|
+
start: number;
|
|
23
|
+
end: number;
|
|
24
|
+
} | null;
|
|
21
25
|
}
|
|
22
26
|
export declare function createSelectionState(options?: SelectionStateOptions): SelectionState;
|
|
27
|
+
export type RestoreRoute = 'collapsed' | 'single-block' | 'whole-block' | 'custom';
|
|
23
28
|
export interface SelectionState {
|
|
24
29
|
readonly anchor: SelectionPoint | null;
|
|
25
30
|
readonly focus: SelectionPoint | null;
|
|
26
31
|
readonly isCrossBlock: boolean;
|
|
27
32
|
/**
|
|
28
33
|
* True when the overlay paints instead of the native browser highlight: every
|
|
29
|
-
* cross-block selection, plus
|
|
34
|
+
* cross-block selection, plus a rectangle of two or more cells inside one table.
|
|
30
35
|
*/
|
|
31
36
|
readonly isCustomRendered: boolean;
|
|
32
37
|
readonly start: SelectionPoint | null;
|
|
@@ -34,45 +39,48 @@ export interface SelectionState {
|
|
|
34
39
|
readonly selectAllCount: number;
|
|
35
40
|
/** The third mode: a collapsed caret in a between-blocks boundary (`gap-caret.ts`). */
|
|
36
41
|
readonly gapCaret: GapCaretPosition | null;
|
|
37
|
-
/**
|
|
38
|
-
*
|
|
39
|
-
* dragged inside it. The stored pair spans the block's bytes on a shared path, which the
|
|
40
|
-
* same-path guard would otherwise refuse, so the overlay reads this to paint it as a unit.
|
|
41
|
-
*/
|
|
42
|
+
/** One block taken whole as the range (a drag inside a leaf with no text, such as an equation),
|
|
43
|
+
* which the same-path check would otherwise refuse; the overlay paints it as a unit. */
|
|
42
44
|
readonly wholeUnitPath: number[] | null;
|
|
45
|
+
/** The inline widget selected whole, or null. Copied out, like `gapCaret`. */
|
|
46
|
+
readonly widget: WidgetTarget | null;
|
|
47
|
+
/** The selected widget's span read from the live document, since its own commits move its
|
|
48
|
+
* end; null with no widget selected, or once no widget starts at its byte. */
|
|
49
|
+
widgetRange(): SelectedWidgetRange | null;
|
|
50
|
+
/** The caret a selected widget stands for: the edge of its span it was entered from. */
|
|
51
|
+
widgetCaret(): SelectionPoint | null;
|
|
43
52
|
enterCrossBlock(anchor: SelectionEndpoint, focus: SelectionEndpoint): void;
|
|
44
53
|
extendFocus(point: SelectionEndpoint): void;
|
|
45
54
|
collapse(): void;
|
|
46
55
|
clear(): void;
|
|
56
|
+
/** Drops whatever is live without notifying, for a document swap: it addresses the outgoing
|
|
57
|
+
* tree, and the restore that follows announces the new selection. */
|
|
58
|
+
dropForDocumentSwap(): void;
|
|
47
59
|
setGapCaret(pos: GapCaretPosition): void;
|
|
48
60
|
clearGapCaret(): void;
|
|
61
|
+
/** Selects a widget whole and announces it. A widget ending by itself announces nothing: the
|
|
62
|
+
* caret that replaces it announces itself. */
|
|
63
|
+
selectWidget(target: WidgetTarget): void;
|
|
64
|
+
/** Moves a selected widget by `delta` bytes when it sits in `path` at or past `editEnd`: an
|
|
65
|
+
* edit to another widget earlier in the block moved its bytes, not its identity. Silent. */
|
|
66
|
+
followWidgetEdit(path: readonly number[], editEnd: number, delta: number): void;
|
|
49
67
|
incrementSelectAllCount(): void;
|
|
50
68
|
resetSelectAllCount(): void;
|
|
51
|
-
/**
|
|
52
|
-
*
|
|
53
|
-
* back through `getSelection()`, which also answers for a NATIVE caret the restore road
|
|
54
|
-
* lands and for a document a `source` swap replaced under it — neither of which moves a
|
|
55
|
-
* field the mutators above guard on. Coalesces inside a {@link SelectionState.batch}.
|
|
56
|
-
*/
|
|
69
|
+
/** Notifies for a change no mutator above sees (a caret the editor placed, a restore, a source
|
|
70
|
+
* swap), since subscribers read back through `getSelection()`. Coalesces inside a batch. */
|
|
57
71
|
announceSelection(): void;
|
|
58
72
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
* caret must wrap both: subscribers read the editor back on notify, so a notify between
|
|
62
|
-
* the two reports a caret the DOM half has not moved yet.
|
|
73
|
+
* Notifies for a caret placement. The flush says whether a placement was all it held, so a
|
|
74
|
+
* listener can drop one that put the caret where it already was.
|
|
63
75
|
*/
|
|
76
|
+
announcePlacement(): void;
|
|
77
|
+
/** Holds the change notification until `mutate` returns, then fires once; nests, and flushes on
|
|
78
|
+
* a throw. Wrap a state write and its caret placement so no notify lands between the two. */
|
|
64
79
|
batch(mutate: () => void): void;
|
|
65
|
-
/**
|
|
66
|
-
*
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
*/
|
|
70
|
-
restoreRoute(anchor: SelectionPoint, focus: SelectionPoint): 'collapsed' | 'single-block' | 'custom';
|
|
71
|
-
/**
|
|
72
|
-
* Where a caret lands for `point`: an endpoint inside a table addresses the table block by
|
|
73
|
-
* cell INDEX, so its landing is the cell's own deep `[table,row,col]` leaf at offset 0.
|
|
74
|
-
* Any other point lands as itself. Every reveal and every park goes through here, so no
|
|
75
|
-
* caller can seat a cell index as a char offset on the table wrapper.
|
|
76
|
-
*/
|
|
80
|
+
/** Classifies a pair `resolveSelectionPoint` returned, for a DOM restore, touching no state. A
|
|
81
|
+
* same-path pair over a block with no character position is that block held whole. */
|
|
82
|
+
restoreRoute(anchor: SelectionPoint, focus: SelectionPoint): RestoreRoute;
|
|
83
|
+
/** Where a caret lands for `point`: a cell endpoint in its cell's `[table, row, col]` leaf at
|
|
84
|
+
* offset 0, any other point as itself. Every mount and caret placement goes through here. */
|
|
77
85
|
cellLandingFor(point: SelectionPoint): SelectionPoint;
|
|
78
86
|
}
|