@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,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Double and triple click: the second click of a run selects the word under it, the third the
|
|
3
|
+
* whole block's text, and a drag from either grows by that unit. The editor owns the gesture
|
|
4
|
+
* from the second click so the browser paints nothing of its own: its word rule varies by
|
|
5
|
+
* platform, it walks into non-editable widgets, and a marker here never joins a word.
|
|
6
|
+
*/
|
|
7
|
+
import { asDomTextOffset } from '../cursor/coordinate-spaces';
|
|
8
|
+
import { caretOffsetAtPoint } from '../cursor/point-offset';
|
|
9
|
+
import { containerDomTextLength, maskedWalkText, rawOfWalkOffset, walkOffsetOfRaw } from '../cursor/widget-offset';
|
|
10
|
+
import { isWholeBlockInputProxy } from '../editor-actions/whole-block-focus-surface';
|
|
11
|
+
import { installDragListener } from './drag-pointer';
|
|
12
|
+
import { applySingleBlockRange, applySurfaceContentRange } from './native-bridge';
|
|
13
|
+
import { blockNearPoint } from './nearest-block';
|
|
14
|
+
import { readBlockPath } from './path-lookup';
|
|
15
|
+
// ── The word rule ────────────────────────────────────────────────────────────
|
|
16
|
+
let segmenter;
|
|
17
|
+
function wordSegmenter() {
|
|
18
|
+
if (segmenter === undefined) {
|
|
19
|
+
segmenter =
|
|
20
|
+
typeof Intl.Segmenter === 'function'
|
|
21
|
+
? new Intl.Segmenter(undefined, { granularity: 'word' })
|
|
22
|
+
: null;
|
|
23
|
+
}
|
|
24
|
+
return segmenter;
|
|
25
|
+
}
|
|
26
|
+
/** The segment at `offset`: the word ending there if there is one, else the segment starting
|
|
27
|
+
* there, as the browser takes it. Null on a platform with no segmenter. */
|
|
28
|
+
export function wordSpanAt(text, offset) {
|
|
29
|
+
const seg = wordSegmenter();
|
|
30
|
+
if (!seg || text.length === 0)
|
|
31
|
+
return null;
|
|
32
|
+
const segments = seg.segment(text);
|
|
33
|
+
const at = Math.max(0, Math.min(offset, text.length));
|
|
34
|
+
const left = at > 0 ? segments.containing(at - 1) : undefined;
|
|
35
|
+
const right = at < text.length ? segments.containing(at) : undefined;
|
|
36
|
+
if (left && right && left.index === right.index)
|
|
37
|
+
return spanOf(left);
|
|
38
|
+
if (left?.isWordLike)
|
|
39
|
+
return spanOf(left);
|
|
40
|
+
const pick = right ?? left;
|
|
41
|
+
return pick ? spanOf(pick) : null;
|
|
42
|
+
}
|
|
43
|
+
function spanOf(segment) {
|
|
44
|
+
return { start: segment.index, end: segment.index + segment.segment.length };
|
|
45
|
+
}
|
|
46
|
+
/** The raw span `granularity` takes around a raw offset in `surface`; null where the word rule
|
|
47
|
+
* has nothing to read. */
|
|
48
|
+
export function spanAround(surface, granularity, rawOffset) {
|
|
49
|
+
if (granularity === 'block') {
|
|
50
|
+
return { start: 0, end: rawOfWalkOffset(surface, containerDomTextLength(surface)) };
|
|
51
|
+
}
|
|
52
|
+
const span = wordSpanAt(maskedWalkText(surface), walkOffsetOfRaw(surface, rawOffset));
|
|
53
|
+
if (!span)
|
|
54
|
+
return null;
|
|
55
|
+
return {
|
|
56
|
+
start: rawOfWalkOffset(surface, asDomTextOffset(span.start)),
|
|
57
|
+
end: rawOfWalkOffset(surface, asDomTextOffset(span.end))
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** The unit a click count selects; a run stays at the block unit past three clicks. */
|
|
61
|
+
export function granularityForClickCount(clickCount) {
|
|
62
|
+
if (clickCount === 2)
|
|
63
|
+
return 'word';
|
|
64
|
+
return clickCount >= 3 ? 'block' : null;
|
|
65
|
+
}
|
|
66
|
+
/** Root listeners for the gesture. The mousedown and mouseup are cancelled so the browser paints
|
|
67
|
+
* no caret over the range, but never the pointerdown, which would silence the click. */
|
|
68
|
+
export function installMultiClickSelect(deps) {
|
|
69
|
+
let lastPointerDown = null;
|
|
70
|
+
let claimed = false;
|
|
71
|
+
const onPointerDown = (e) => {
|
|
72
|
+
lastPointerDown = e;
|
|
73
|
+
};
|
|
74
|
+
const onMouseUp = (e) => {
|
|
75
|
+
if (claimed)
|
|
76
|
+
e.preventDefault();
|
|
77
|
+
};
|
|
78
|
+
const onMouseDown = (e) => {
|
|
79
|
+
claimed = false;
|
|
80
|
+
const granularity = granularityForClickCount(e.detail);
|
|
81
|
+
if (!granularity || e.button !== 0 || e.shiftKey || e.ctrlKey || e.metaKey || e.altKey)
|
|
82
|
+
return;
|
|
83
|
+
if (granularity === 'word' && pressesInlineWidget(e.target))
|
|
84
|
+
return;
|
|
85
|
+
// A widget already selected whole took the run with its first click, so no later click of
|
|
86
|
+
// that run is the block's: claiming one would paint a range over an object selection.
|
|
87
|
+
if (deps.pressesSelectedWidget(e.target))
|
|
88
|
+
return;
|
|
89
|
+
const press = pressedSurface(deps, e);
|
|
90
|
+
if (!press)
|
|
91
|
+
return;
|
|
92
|
+
const anchorSpan = selectAtPoint(press.surface, granularity, e.clientX, e.clientY);
|
|
93
|
+
if (!anchorSpan)
|
|
94
|
+
return;
|
|
95
|
+
e.preventDefault();
|
|
96
|
+
claimed = true;
|
|
97
|
+
const anchor = press.anchor ?? blockNearPoint(deps.editorRoot, e.clientX, e.clientY)?.endpointHere();
|
|
98
|
+
if (!anchor || !lastPointerDown)
|
|
99
|
+
return;
|
|
100
|
+
installDragListener({
|
|
101
|
+
editorRoot: deps.editorRoot,
|
|
102
|
+
scrollContainer: deps.getScrollContainer(),
|
|
103
|
+
selection: deps.selection,
|
|
104
|
+
getBlockElByPath: deps.getBlockElByPath,
|
|
105
|
+
lifetimeSignal: deps.lifetimeSignal,
|
|
106
|
+
granularity: createGranularity(deps.getBlockElByPath, press.surface, granularity, anchorSpan)
|
|
107
|
+
}, anchor, lastPointerDown);
|
|
108
|
+
};
|
|
109
|
+
deps.editorRoot.addEventListener('pointerdown', onPointerDown);
|
|
110
|
+
deps.editorRoot.addEventListener('mousedown', onMouseDown);
|
|
111
|
+
deps.editorRoot.addEventListener('mouseup', onMouseUp);
|
|
112
|
+
return () => {
|
|
113
|
+
deps.editorRoot.removeEventListener('pointerdown', onPointerDown);
|
|
114
|
+
deps.editorRoot.removeEventListener('mousedown', onMouseDown);
|
|
115
|
+
deps.editorRoot.removeEventListener('mouseup', onMouseUp);
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/** The editable element a click selects in: the one under it, else the nearest block's, the
|
|
119
|
+
* way a single click in the margin lands there. A block with no text has no word to select. */
|
|
120
|
+
function pressedSurface(deps, e) {
|
|
121
|
+
// Up through a non-editable span inside the editable (a list's `- ` prefix) to the editable.
|
|
122
|
+
const own = surfaceOf(e.target);
|
|
123
|
+
if (own)
|
|
124
|
+
return isWholeBlockInputProxy(own) ? null : { surface: own, anchor: null };
|
|
125
|
+
const path = deps.marginBlockAt(e.target, e.clientX, e.clientY);
|
|
126
|
+
const block = path && deps.getBlockElByPath(path);
|
|
127
|
+
if (!block)
|
|
128
|
+
return null;
|
|
129
|
+
// A container's own box (a quote's gutter) selects in the leaf nearest the click, the way a
|
|
130
|
+
// click beside a line lands in that line.
|
|
131
|
+
const surface = block.contentEditable === 'true' ? block : nearestSurfaceIn(block, e.clientY);
|
|
132
|
+
const surfacePath = surface && pathOfSurface(surface);
|
|
133
|
+
const offset = surface && caretOffsetAtPoint(surface, e.clientX, e.clientY);
|
|
134
|
+
if (!surface)
|
|
135
|
+
return null;
|
|
136
|
+
return { surface, anchor: surfacePath && offset !== null ? { path: surfacePath, offset } : null };
|
|
137
|
+
}
|
|
138
|
+
function nearestSurfaceIn(block, clientY) {
|
|
139
|
+
let best = null;
|
|
140
|
+
let bestDistance = Infinity;
|
|
141
|
+
for (const el of block.querySelectorAll('[contenteditable="true"]')) {
|
|
142
|
+
const rect = el.getBoundingClientRect();
|
|
143
|
+
const distance = clientY < rect.top ? rect.top - clientY : Math.max(0, clientY - rect.bottom);
|
|
144
|
+
if (distance < bestDistance) {
|
|
145
|
+
best = el;
|
|
146
|
+
bestDistance = distance;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return best;
|
|
150
|
+
}
|
|
151
|
+
/** The path of the block this editable element is the text of; null for one addressed some
|
|
152
|
+
* other way (a table's cell), whose drag is not a character drag. */
|
|
153
|
+
function pathOfSurface(surface) {
|
|
154
|
+
const host = surface.closest('[data-block-path]');
|
|
155
|
+
const path = readBlockPath(host);
|
|
156
|
+
if (!path || !host?.contains(surface))
|
|
157
|
+
return null;
|
|
158
|
+
return host.querySelector('[contenteditable="true"]') === surface ? path : null;
|
|
159
|
+
}
|
|
160
|
+
/** Selects the unit's span at the click and returns it, in raw offsets. */
|
|
161
|
+
function selectAtPoint(surface, granularity, clientX, clientY) {
|
|
162
|
+
if (granularity === 'block') {
|
|
163
|
+
applySurfaceContentRange(surface);
|
|
164
|
+
return spanAround(surface, 'block', 0);
|
|
165
|
+
}
|
|
166
|
+
const offset = caretOffsetAtPoint(surface, clientX, clientY);
|
|
167
|
+
const span = offset === null ? null : spanAround(surface, 'word', offset);
|
|
168
|
+
if (!span || span.start === span.end)
|
|
169
|
+
return null;
|
|
170
|
+
applySingleBlockRange(surface, span.start, span.end);
|
|
171
|
+
return span;
|
|
172
|
+
}
|
|
173
|
+
function createGranularity(getBlockElByPath, surface, granularity, anchorSpan) {
|
|
174
|
+
return {
|
|
175
|
+
surface,
|
|
176
|
+
anchorSpan,
|
|
177
|
+
spanAround: (offset) => spanAround(surface, granularity, offset) ?? { start: offset, end: offset },
|
|
178
|
+
expandFocus: (point, side) => {
|
|
179
|
+
const el = point.cellCoordinate ? null : getBlockElByPath(point.path);
|
|
180
|
+
const span = el && spanAround(el, granularity, point.offset);
|
|
181
|
+
if (!span)
|
|
182
|
+
return point;
|
|
183
|
+
return { path: point.path.slice(), offset: side === 'after' ? span.end : span.start };
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/** The second click on an inline widget is that widget's own gesture (a footnote's double-click
|
|
188
|
+
* takes its whole token), so the word level does nothing there. */
|
|
189
|
+
function pressesInlineWidget(target) {
|
|
190
|
+
return target instanceof Element && target.closest('[data-inline-widget]') !== null;
|
|
191
|
+
}
|
|
192
|
+
function surfaceOf(target) {
|
|
193
|
+
let el = target instanceof HTMLElement ? target : null;
|
|
194
|
+
while (el && el.contentEditable !== 'true')
|
|
195
|
+
el = el.parentElement;
|
|
196
|
+
return el;
|
|
197
|
+
}
|
|
@@ -1,47 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* counts toward DOM offsets but not raw.
|
|
2
|
+
* Bridges the browser's Selection API and `SelectionPoint`. Callers provide the elements and
|
|
3
|
+
* paths; nothing here walks the tree. A `SelectionPoint` offset counts raw bytes, and every
|
|
4
|
+
* conversion goes through `cursor/widget-offset.ts`.
|
|
6
5
|
*/
|
|
7
|
-
import type
|
|
6
|
+
import { type SelectionPoint, type EditorSelection } from './primitives';
|
|
8
7
|
import type { SelectionState } from './selection-state.svelte';
|
|
9
8
|
import type { BlockComponent } from '../block-component';
|
|
10
|
-
/**
|
|
11
|
-
* Read the collapsed caret inside `blockEl` into a raw-semantic SelectionPoint.
|
|
12
|
-
* Returns null when the caret isn't inside this element.
|
|
13
|
-
*/
|
|
9
|
+
/** Reads the caret inside `blockEl` as a raw-offset point; null when the caret is elsewhere. */
|
|
14
10
|
export declare function readNativeCaretInBlock(blockEl: HTMLElement, path: number[]): SelectionPoint | null;
|
|
15
|
-
/**
|
|
16
|
-
*
|
|
17
|
-
* ambient length. The park door's twin, so the same landable clamp applies: a caret may not sit
|
|
18
|
-
* past a hidden marker run, whatever offset the caller derived. Only collapsed carets clamp — a
|
|
19
|
-
* selection may COVER such a run, so `applySingleBlockRange` does not. Raw offset 0 under an
|
|
20
|
-
* ambient marker goes AFTER the span: Chromium bounces carets out of its contenteditable="false".
|
|
21
|
-
*/
|
|
11
|
+
/** Places a collapsed native caret at a `SelectionPoint`, clamped as `parkCaret` clamps: never
|
|
12
|
+
* behind a hidden marker run. */
|
|
22
13
|
export declare function applyCollapsedCaret(blockEl: HTMLElement, point: SelectionPoint): void;
|
|
23
|
-
/**
|
|
24
|
-
*
|
|
25
|
-
* Returns whether an element was found; a missing target is a no-op.
|
|
26
|
-
*/
|
|
14
|
+
/** A focused collapsed caret in `point`'s mounted block, scrolled to by the focus call itself: kept
|
|
15
|
+
* for the cross-block delete, typing and paste until they land through the caret landing. */
|
|
27
16
|
export declare function focusCollapsedCaret(getBlockElByPath: (path: number[]) => HTMLElement | null, point: SelectionPoint): boolean;
|
|
28
|
-
|
|
17
|
+
/** Selects an editable element's whole content, past its marker prefix: the first Ctrl+A
|
|
18
|
+
* range and the triple-click one. */
|
|
19
|
+
export declare function applySurfaceContentRange(el: HTMLElement): void;
|
|
20
|
+
/** Selects raw `[anchorOffset, focusOffset]` in one block, backward when the focus comes first. */
|
|
21
|
+
export declare function applySingleBlockRange(blockEl: HTMLElement, anchorOffset: number, focusOffset: number): void;
|
|
29
22
|
export declare function clearNativeSelection(): void;
|
|
30
|
-
/**
|
|
31
|
-
*
|
|
32
|
-
* otherwise fall to <body>. The root is non-editable (`tabindex="-1"`), so focusing it creates
|
|
33
|
-
* no native range to sync. No-op unless this block holds focus and the root is still connected.
|
|
34
|
-
*/
|
|
23
|
+
/** Keeps focus in the editor when a focused block is windowed out, or it would fall to <body>.
|
|
24
|
+
* The root is non-editable, so focusing it creates no native range to sync. */
|
|
35
25
|
export declare function parkFocusOnEditorRoot(blockEl: HTMLElement | null, editorRoot: HTMLElement | null): void;
|
|
36
|
-
/**
|
|
37
|
-
*
|
|
38
|
-
* path (via getCursorPosition) or a shallow one. Null when no block reports a cursor.
|
|
39
|
-
*/
|
|
26
|
+
/** The editor's live selection, for every caller outside a gesture. A selected widget reads as its
|
|
27
|
+
* caret, ahead of the caret the browser briefly puts at its paragraph's start. */
|
|
40
28
|
export declare function readCurrentSelection(selectionState: SelectionState, blockRefs: (BlockComponent | undefined)[]): EditorSelection | null;
|
|
41
|
-
/**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
29
|
+
/** What a restore writes into, beside the selection state. */
|
|
30
|
+
export interface RestoreTarget {
|
|
31
|
+
selectionState: SelectionState;
|
|
32
|
+
getBlockElByPath: (path: number[]) => HTMLElement | null;
|
|
33
|
+
/** Where the caret goes for an endpoint: the leaf a caret can sit in, never a hidden one. */
|
|
34
|
+
caretAt: (point: SelectionPoint) => SelectionPoint;
|
|
35
|
+
/** Takes focus for a block held whole, which has no text for a caret, as a drag leaves it. */
|
|
36
|
+
getEditorRoot: () => HTMLElement | null;
|
|
37
|
+
}
|
|
38
|
+
/** Restores an `EditorSelection` to the DOM in one `SelectionState` batch, so the single
|
|
39
|
+
* notification carries the final selection. False when the target is not mounted. */
|
|
40
|
+
export declare function applySelectionToDom(selection: EditorSelection, target: RestoreTarget): boolean;
|
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* counts toward DOM offsets but not raw.
|
|
2
|
+
* Bridges the browser's Selection API and `SelectionPoint`. Callers provide the elements and
|
|
3
|
+
* paths; nothing here walks the tree. A `SelectionPoint` offset counts raw bytes, and every
|
|
4
|
+
* conversion goes through `cursor/widget-offset.ts`.
|
|
6
5
|
*/
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
6
|
+
import { cellPoint } from './primitives';
|
|
7
|
+
import { assertInvariant } from '../assert';
|
|
8
|
+
import { checkPlacementEndsWidget } from '../invariants/placement-ends-widget';
|
|
9
|
+
import { placeCaretAtRaw, rawOffsetAt, selectRawRange, selectSurfaceContent } from '../cursor/widget-offset';
|
|
10
10
|
// ── Read native → SelectionPoint ────────────────────────────────────────────
|
|
11
|
-
/**
|
|
12
|
-
* Read the collapsed caret inside `blockEl` into a raw-semantic SelectionPoint.
|
|
13
|
-
* Returns null when the caret isn't inside this element.
|
|
14
|
-
*/
|
|
11
|
+
/** Reads the caret inside `blockEl` as a raw-offset point; null when the caret is elsewhere. */
|
|
15
12
|
export function readNativeCaretInBlock(blockEl, path) {
|
|
16
13
|
if (document.activeElement !== blockEl)
|
|
17
14
|
return null;
|
|
@@ -19,43 +16,21 @@ export function readNativeCaretInBlock(blockEl, path) {
|
|
|
19
16
|
if (!sel || sel.rangeCount === 0)
|
|
20
17
|
return null;
|
|
21
18
|
const range = sel.getRangeAt(0);
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
// span. Use the real anchor when it resolves inside this block, else keep range.start.
|
|
19
|
+
// In a backward selection the anchor sits at the range's end, so the range start would be the
|
|
20
|
+
// moving focus; the real anchor is used whenever it lies inside the block.
|
|
25
21
|
const useAnchor = !sel.isCollapsed && sel.anchorNode !== null && blockEl.contains(sel.anchorNode);
|
|
26
22
|
const node = useAnchor ? sel.anchorNode : range.startContainer;
|
|
27
23
|
const nodeOffset = useAnchor ? sel.anchorOffset : range.startOffset;
|
|
28
|
-
|
|
29
|
-
return {
|
|
30
|
-
path: path.slice(),
|
|
31
|
-
offset: toClampedRawOffset(content, ambientLengthOf(blockEl))
|
|
32
|
-
};
|
|
24
|
+
return { path: path.slice(), offset: rawOffsetAt(blockEl, node, nodeOffset) };
|
|
33
25
|
}
|
|
34
26
|
// ── Apply SelectionPoint → native ───────────────────────────────────────────
|
|
35
|
-
/**
|
|
36
|
-
*
|
|
37
|
-
* ambient length. The park door's twin, so the same landable clamp applies: a caret may not sit
|
|
38
|
-
* past a hidden marker run, whatever offset the caller derived. Only collapsed carets clamp — a
|
|
39
|
-
* selection may COVER such a run, so `applySingleBlockRange` does not. Raw offset 0 under an
|
|
40
|
-
* ambient marker goes AFTER the span: Chromium bounces carets out of its contenteditable="false".
|
|
41
|
-
*/
|
|
27
|
+
/** Places a collapsed native caret at a `SelectionPoint`, clamped as `parkCaret` clamps: never
|
|
28
|
+
* behind a hidden marker run. */
|
|
42
29
|
export function applyCollapsedCaret(blockEl, point) {
|
|
43
|
-
|
|
44
|
-
const offset = clampToLandableRaw(blockEl, point.offset, ambient);
|
|
45
|
-
if (ambient > 0 && offset <= 0 && placeCaretAfterAmbientSpan(blockEl))
|
|
46
|
-
return;
|
|
47
|
-
const target = toDomTextOffset(asRawOffset(offset), ambient);
|
|
48
|
-
const range = createRangeAtDomTextOffsets(blockEl, target, target);
|
|
49
|
-
if (!range)
|
|
50
|
-
return;
|
|
51
|
-
const sel = window.getSelection();
|
|
52
|
-
sel?.removeAllRanges();
|
|
53
|
-
sel?.addRange(range);
|
|
30
|
+
placeCaretAtRaw(blockEl, point.offset, { clamp: 'reachable' });
|
|
54
31
|
}
|
|
55
|
-
/**
|
|
56
|
-
*
|
|
57
|
-
* Returns whether an element was found; a missing target is a no-op.
|
|
58
|
-
*/
|
|
32
|
+
/** A focused collapsed caret in `point`'s mounted block, scrolled to by the focus call itself: kept
|
|
33
|
+
* for the cross-block delete, typing and paste until they land through the caret landing. */
|
|
59
34
|
export function focusCollapsedCaret(getBlockElByPath, point) {
|
|
60
35
|
const blockEl = getBlockElByPath(point.path);
|
|
61
36
|
if (!blockEl)
|
|
@@ -64,37 +39,44 @@ export function focusCollapsedCaret(getBlockElByPath, point) {
|
|
|
64
39
|
blockEl.focus();
|
|
65
40
|
return true;
|
|
66
41
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const
|
|
70
|
-
if (!
|
|
71
|
-
return;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
42
|
+
// A restore's caret; the restore's reveal policy decides the scroll.
|
|
43
|
+
function restoreCollapsedCaret(getBlockElByPath, point) {
|
|
44
|
+
const blockEl = getBlockElByPath(point.path);
|
|
45
|
+
if (!blockEl)
|
|
46
|
+
return false;
|
|
47
|
+
applyCollapsedCaret(blockEl, point);
|
|
48
|
+
blockEl.focus({ preventScroll: true });
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
/** Selects an editable element's whole content, past its marker prefix: the first Ctrl+A
|
|
52
|
+
* range and the triple-click one. */
|
|
53
|
+
export function applySurfaceContentRange(el) {
|
|
54
|
+
selectSurfaceContent(el);
|
|
55
|
+
}
|
|
56
|
+
/** Selects raw `[anchorOffset, focusOffset]` in one block, backward when the focus comes first. */
|
|
57
|
+
export function applySingleBlockRange(blockEl, anchorOffset, focusOffset) {
|
|
58
|
+
selectRawRange(blockEl, anchorOffset, focusOffset);
|
|
75
59
|
}
|
|
76
60
|
export function clearNativeSelection() {
|
|
77
61
|
window.getSelection()?.removeAllRanges();
|
|
78
62
|
}
|
|
79
|
-
/**
|
|
80
|
-
*
|
|
81
|
-
* otherwise fall to <body>. The root is non-editable (`tabindex="-1"`), so focusing it creates
|
|
82
|
-
* no native range to sync. No-op unless this block holds focus and the root is still connected.
|
|
83
|
-
*/
|
|
63
|
+
/** Keeps focus in the editor when a focused block is windowed out, or it would fall to <body>.
|
|
64
|
+
* The root is non-editable, so focusing it creates no native range to sync. */
|
|
84
65
|
export function parkFocusOnEditorRoot(blockEl, editorRoot) {
|
|
85
66
|
if (!blockEl || !editorRoot?.isConnected)
|
|
86
67
|
return;
|
|
87
|
-
// preventScroll
|
|
88
|
-
//
|
|
68
|
+
// `preventScroll`: the focus call's own scroll would fight the scroll-into-view that mounts
|
|
69
|
+
// the block.
|
|
89
70
|
if (document.activeElement === blockEl)
|
|
90
71
|
editorRoot.focus({ preventScroll: true });
|
|
91
72
|
}
|
|
92
|
-
// ── Selection read/restore
|
|
93
|
-
/**
|
|
94
|
-
*
|
|
95
|
-
* path (via getCursorPosition) or a shallow one. Null when no block reports a cursor.
|
|
96
|
-
*/
|
|
73
|
+
// ── Selection read/restore ───────────────────────────────────────────────────
|
|
74
|
+
/** The editor's live selection, for every caller outside a gesture. A selected widget reads as its
|
|
75
|
+
* caret, ahead of the caret the browser briefly puts at its paragraph's start. */
|
|
97
76
|
export function readCurrentSelection(selectionState, blockRefs) {
|
|
77
|
+
const widget = selectionState.widgetCaret();
|
|
78
|
+
if (widget)
|
|
79
|
+
return collapsedSelectionAt(widget.path, widget.offset);
|
|
98
80
|
if (selectionState.isCrossBlock && selectionState.anchor && selectionState.focus) {
|
|
99
81
|
return {
|
|
100
82
|
anchor: copySelectionPoint(selectionState.anchor),
|
|
@@ -120,11 +102,8 @@ export function readCurrentSelection(selectionState, blockRefs) {
|
|
|
120
102
|
function collapsedSelectionAt(path, offset) {
|
|
121
103
|
return { anchor: { path: path.slice(), offset }, focus: { path: path.slice(), offset } };
|
|
122
104
|
}
|
|
123
|
-
/**
|
|
124
|
-
*
|
|
125
|
-
* reports a within-block range instead of collapsing it to the caret. Null when collapsed or
|
|
126
|
-
* outside the active block. Offsets convert through that block's ambient length.
|
|
127
|
-
*/
|
|
105
|
+
/** The focused block's native selection as distinct raw offsets, so a within-block range is not
|
|
106
|
+
* reported collapsed to the caret. Null when collapsed or outside the active block. */
|
|
128
107
|
function nativeRangeInFocusedBlock(path) {
|
|
129
108
|
// Node-env callers (undo snapshot capture in unit tests) have no DOM; fall back to the
|
|
130
109
|
// single caret offset rather than touching document/window.
|
|
@@ -138,65 +117,66 @@ function nativeRangeInFocusedBlock(path) {
|
|
|
138
117
|
return null;
|
|
139
118
|
if (!active.contains(sel.anchorNode) || !active.contains(sel.focusNode))
|
|
140
119
|
return null;
|
|
141
|
-
const ambient = ambientLengthOf(active);
|
|
142
|
-
const anchorOffset = toClampedRawOffset(domTextOffsetAtNode(active, sel.anchorNode, sel.anchorOffset), ambient);
|
|
143
|
-
const focusOffset = toClampedRawOffset(domTextOffsetAtNode(active, sel.focusNode, sel.focusOffset), ambient);
|
|
144
120
|
return {
|
|
145
|
-
anchor: { path: path.slice(), offset: anchorOffset },
|
|
146
|
-
focus: { path: path.slice(), offset: focusOffset }
|
|
121
|
+
anchor: { path: path.slice(), offset: rawOffsetAt(active, sel.anchorNode, sel.anchorOffset) },
|
|
122
|
+
focus: { path: path.slice(), offset: rawOffsetAt(active, sel.focusNode, sel.focusOffset) }
|
|
147
123
|
};
|
|
148
124
|
}
|
|
149
|
-
// A restored table endpoint must keep cellCoordinate
|
|
150
|
-
//
|
|
125
|
+
// A restored table endpoint must keep `cellCoordinate`, or it skips the whole-row snap and the
|
|
126
|
+
// collapse into the cell; the two branches keep the union variant intact through undo.
|
|
151
127
|
function copySelectionPoint(point) {
|
|
152
128
|
if (point.cellCoordinate) {
|
|
153
|
-
return
|
|
129
|
+
return cellPoint(point.path, point.offset);
|
|
154
130
|
}
|
|
155
131
|
return { path: point.path.slice(), offset: point.offset };
|
|
156
132
|
}
|
|
157
|
-
/**
|
|
158
|
-
*
|
|
159
|
-
|
|
160
|
-
* write and caret landing run inside ONE SelectionState batch, so the single notification
|
|
161
|
-
* carries the settled selection. False = the target resolved in the model but not in the DOM.
|
|
162
|
-
*/
|
|
163
|
-
export function applySelectionToDom(selection, selectionState, getBlockElByPath) {
|
|
133
|
+
/** Restores an `EditorSelection` to the DOM in one `SelectionState` batch, so the single
|
|
134
|
+
* notification carries the final selection. False when the target is not mounted. */
|
|
135
|
+
export function applySelectionToDom(selection, target) {
|
|
164
136
|
let placed = false;
|
|
165
|
-
selectionState.batch(() => {
|
|
166
|
-
placed = placeRestoredSelection(selection,
|
|
167
|
-
|
|
168
|
-
//
|
|
169
|
-
|
|
137
|
+
target.selectionState.batch(() => {
|
|
138
|
+
placed = placeRestoredSelection(selection, target);
|
|
139
|
+
assertInvariant('placement-ends-widget', () => checkPlacementEndsWidget(target.selectionState.widget));
|
|
140
|
+
// Announced explicitly: a restore onto an already clear state changes no field of the
|
|
141
|
+
// selection state and still moves the caret that subscribers read back.
|
|
142
|
+
target.selectionState.announceSelection();
|
|
170
143
|
});
|
|
171
144
|
return placed;
|
|
172
145
|
}
|
|
173
|
-
function placeRestoredSelection(selection,
|
|
174
|
-
|
|
175
|
-
//
|
|
146
|
+
function placeRestoredSelection(selection, target) {
|
|
147
|
+
const { selectionState, getBlockElByPath } = target;
|
|
148
|
+
// Classify before touching state, so a single-block restore never passes through a transient
|
|
149
|
+
// cross-block state (`enterCrossBlock` then `clear`).
|
|
176
150
|
const route = selectionState.restoreRoute(selection.anchor, selection.focus);
|
|
177
151
|
if (route === 'collapsed') {
|
|
178
152
|
selectionState.clear();
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
153
|
+
return restoreCollapsedCaret(getBlockElByPath, target.caretAt(selection.anchor));
|
|
154
|
+
}
|
|
155
|
+
if (route === 'whole-block') {
|
|
156
|
+
const whole = { path: selection.anchor.path.slice(), wholeBlock: true };
|
|
157
|
+
selectionState.enterCrossBlock(whole, whole);
|
|
158
|
+
clearNativeSelection();
|
|
159
|
+
const root = target.getEditorRoot();
|
|
160
|
+
root?.focus({ preventScroll: true });
|
|
161
|
+
return root !== null;
|
|
183
162
|
}
|
|
184
|
-
// No
|
|
185
|
-
//
|
|
163
|
+
// No cell translation here: a same-path pair inside a table routes to the overlay, so every
|
|
164
|
+
// pair reaching this branch is a character range on a text leaf.
|
|
186
165
|
if (route === 'single-block') {
|
|
187
166
|
selectionState.clear();
|
|
188
167
|
const blockEl = getBlockElByPath(selection.anchor.path);
|
|
189
168
|
if (!blockEl)
|
|
190
169
|
return false;
|
|
191
170
|
applySingleBlockRange(blockEl, selection.anchor.offset, selection.focus.offset);
|
|
192
|
-
blockEl.focus();
|
|
171
|
+
blockEl.focus({ preventScroll: true });
|
|
193
172
|
return true;
|
|
194
173
|
}
|
|
195
|
-
//
|
|
196
|
-
//
|
|
197
|
-
// addresses the table wrapper by cell index, so park in its deep cell instead.
|
|
174
|
+
// The overlay paints the range; a collapsed caret in the focus block (or its cell) gives paste
|
|
175
|
+
// and key events a target, since Chromium otherwise routes paste to <body>.
|
|
198
176
|
selectionState.enterCrossBlock(selection.anchor, selection.focus);
|
|
199
|
-
|
|
177
|
+
// The stored focus, which normalization may have turned into a cell index.
|
|
178
|
+
const focus = selectionState.focus ?? selection.focus;
|
|
179
|
+
if (restoreCollapsedCaret(getBlockElByPath, target.caretAt(focus))) {
|
|
200
180
|
return true;
|
|
201
181
|
}
|
|
202
182
|
clearNativeSelection();
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The mounted block nearest a viewport point, and the endpoint that point addresses. A gesture
|
|
3
|
-
* that must answer
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* Only mounted blocks are measured; a caller answering for a windowed-out tail reconciles itself.
|
|
3
|
+
* that must answer every point (a dead-space click, a drag into the margin) resolves an off-block
|
|
4
|
+
* point here: clamped into the nearest box, then handed down a container to the child level with
|
|
5
|
+
* it. Only mounted blocks are measured; a caller handling an unmounted tail does so itself.
|
|
7
6
|
*/
|
|
7
|
+
import { type BlockHit } from './block-hit-test';
|
|
8
8
|
import type { SelectionEndpoint } from './primitives';
|
|
9
9
|
export interface BlockBand {
|
|
10
10
|
top: number;
|
|
@@ -17,18 +17,14 @@ export interface MeasuredBlock {
|
|
|
17
17
|
}
|
|
18
18
|
/** Document order, since bands may nest and every walk over them depends on it. */
|
|
19
19
|
export declare function measureBlocks(root: HTMLElement): MeasuredBlock[];
|
|
20
|
-
/**
|
|
21
|
-
*
|
|
22
|
-
* gesture, which lands at a trailing corner rather than under its own x. A y in a gap resolves to
|
|
23
|
-
* the nearest band, so no point is left unanswered. Bands arrive in document order and may nest,
|
|
24
|
-
* so containment scans forward, outermost wins.
|
|
25
|
-
*/
|
|
20
|
+
/** The band a `y` belongs to; a y in a gap resolves to the nearest band, so no point is left
|
|
21
|
+
* unanswered. `belowAll` marks a point past the last band, which lands at a trailing corner. */
|
|
26
22
|
export declare function nearestBand(bands: BlockBand[], y: number): {
|
|
27
23
|
index: number;
|
|
28
24
|
belowAll: boolean;
|
|
29
25
|
} | null;
|
|
30
|
-
/** The band
|
|
31
|
-
* trailing corner
|
|
26
|
+
/** The point a band is hit-tested at: {@link clampPointIntoBox}, except that `belowAll` takes the
|
|
27
|
+
* trailing corner (the block's last position) rather than the point's own x. */
|
|
32
28
|
export declare function probePointIn(rect: DOMRect, x: number, y: number, belowAll: boolean): {
|
|
33
29
|
x: number;
|
|
34
30
|
y: number;
|
|
@@ -41,3 +37,12 @@ export interface NearestBlock {
|
|
|
41
37
|
/** The block a point addresses: the one under it, else the nearest one with the point clamped
|
|
42
38
|
* into its box. Null only where nothing is mounted. */
|
|
43
39
|
export declare function blockNearPoint(editorRoot: HTMLElement, clientX: number, clientY: number): NearestBlock | null;
|
|
40
|
+
/** A hit and the point it was hit-tested at. */
|
|
41
|
+
export interface ProbedHit {
|
|
42
|
+
hit: BlockHit;
|
|
43
|
+
x: number;
|
|
44
|
+
y: number;
|
|
45
|
+
}
|
|
46
|
+
/** Hands a point on a container's own box (a quote's gutter, a list's indent) down to the child
|
|
47
|
+
* level with it, at any depth; a container with its own editable row keeps an unmatched point. */
|
|
48
|
+
export declare function descendToLevelChild(root: HTMLElement, probed: ProbedHit, belowAll?: boolean): ProbedHit;
|