@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
|
@@ -1,34 +1,55 @@
|
|
|
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
|
-
import { nodeAt } from '../tree-operations/node-primitives';
|
|
7
|
+
import { isBlockNode, nodeAt } from '../tree-operations/node-primitives';
|
|
8
8
|
import { isWholeBlockEndpoint, normalize } from './primitives';
|
|
9
|
-
import { cellEndpointDeepPath, normalizeTableEndpoint, snapCrossBlockTableEndpoints } from './table-endpoint-snap';
|
|
9
|
+
import { cellEndpointDeepPath, normalizeTableEndpoint, snapCrossBlockTableEndpoints, wholeTableEndpoint } from './table-endpoint-snap';
|
|
10
10
|
import { normalizeCharEndpoint } from './char-endpoint-snap';
|
|
11
|
-
import { pathsEqual } from './path-math';
|
|
11
|
+
import { comparePaths, pathsEqual } from './path-math';
|
|
12
12
|
import { displayLength } from '../core/lines';
|
|
13
13
|
import { assertInvariant } from '../assert';
|
|
14
14
|
import { checkCrossBlockEndpointCoordinates } from '../invariants/selection-endpoints';
|
|
15
|
+
import { isWholeBlockUnit } from '../schema/whole-block-unit';
|
|
15
16
|
export function createSelectionState(options) {
|
|
16
17
|
return new SelectionStateImpl(options);
|
|
17
18
|
}
|
|
18
19
|
// ── Implementation ──────────────────────────────────────────────────────────
|
|
20
|
+
// Normalization flags both corners of a rectangle, so either flag names the pair's space.
|
|
21
|
+
function isCellPair(a, f) {
|
|
22
|
+
return a.cellCoordinate === true || f.cellCoordinate === true;
|
|
23
|
+
}
|
|
19
24
|
class SelectionStateImpl {
|
|
25
|
+
// Separate cells, so a reader of one kind (the image overlay reads the widget) doesn't re-run
|
|
26
|
+
// on every write of another, such as each move of a drag.
|
|
20
27
|
#anchor = $state(null);
|
|
21
28
|
#focus = $state(null);
|
|
22
29
|
#gapCaret = $state(null);
|
|
23
30
|
#wholeUnit = $state(null);
|
|
31
|
+
#widget = $state(null);
|
|
24
32
|
#selectAllCount = $state(0);
|
|
25
33
|
#onChange;
|
|
26
34
|
#getDoc;
|
|
35
|
+
#widgetSpan;
|
|
27
36
|
#batchDepth = 0;
|
|
28
37
|
#notifyPending = false;
|
|
38
|
+
// False once a notification that is not a caret placement joins the pending flush.
|
|
39
|
+
#placementOnly = true;
|
|
29
40
|
constructor(options) {
|
|
30
41
|
this.#onChange = options?.onChange;
|
|
31
42
|
this.#getDoc = options?.getDoc;
|
|
43
|
+
this.#widgetSpan = options?.widgetSpan;
|
|
44
|
+
}
|
|
45
|
+
// The only writer of the five cells, so no mutator can set one kind without ending the others.
|
|
46
|
+
#claim(next) {
|
|
47
|
+
const range = next && 'range' in next ? next.range : null;
|
|
48
|
+
this.#anchor = range?.anchor ?? null;
|
|
49
|
+
this.#focus = range?.focus ?? null;
|
|
50
|
+
this.#wholeUnit = range?.wholeUnit ?? null;
|
|
51
|
+
this.#gapCaret = next && 'gap' in next ? next.gap : null;
|
|
52
|
+
this.#widget = next && 'widget' in next ? next.widget : null;
|
|
32
53
|
}
|
|
33
54
|
batch(mutate) {
|
|
34
55
|
this.#batchDepth += 1;
|
|
@@ -39,16 +60,23 @@ class SelectionStateImpl {
|
|
|
39
60
|
this.#batchDepth -= 1;
|
|
40
61
|
if (this.#batchDepth === 0 && this.#notifyPending) {
|
|
41
62
|
this.#notifyPending = false;
|
|
42
|
-
this.#
|
|
63
|
+
this.#flush();
|
|
43
64
|
}
|
|
44
65
|
}
|
|
45
66
|
}
|
|
46
|
-
#notify() {
|
|
67
|
+
#notify(fromPlacement = false) {
|
|
68
|
+
if (!fromPlacement)
|
|
69
|
+
this.#placementOnly = false;
|
|
47
70
|
if (this.#batchDepth > 0) {
|
|
48
71
|
this.#notifyPending = true;
|
|
49
72
|
return;
|
|
50
73
|
}
|
|
51
|
-
this.#
|
|
74
|
+
this.#flush();
|
|
75
|
+
}
|
|
76
|
+
#flush() {
|
|
77
|
+
const placementOnly = this.#placementOnly;
|
|
78
|
+
this.#placementOnly = true;
|
|
79
|
+
this.#onChange?.({ placementOnly });
|
|
52
80
|
}
|
|
53
81
|
get anchor() {
|
|
54
82
|
return this.#anchor;
|
|
@@ -68,10 +96,27 @@ class SelectionStateImpl {
|
|
|
68
96
|
get wholeUnitPath() {
|
|
69
97
|
return this.#wholeUnit?.slice() ?? null;
|
|
70
98
|
}
|
|
99
|
+
get widget() {
|
|
100
|
+
const widget = this.#widget;
|
|
101
|
+
return widget && copyWidget(widget);
|
|
102
|
+
}
|
|
103
|
+
widgetRange() {
|
|
104
|
+
const widget = this.#widget;
|
|
105
|
+
const span = widget && this.#widgetSpan?.(copyWidget(widget));
|
|
106
|
+
return widget && span
|
|
107
|
+
? { path: widget.paragraphPath.slice(), start: span.start, end: span.end }
|
|
108
|
+
: null;
|
|
109
|
+
}
|
|
110
|
+
widgetCaret() {
|
|
111
|
+
const widget = this.#widget;
|
|
112
|
+
if (!widget)
|
|
113
|
+
return null;
|
|
114
|
+
const live = this.widgetRange();
|
|
115
|
+
const fromStart = widget.preSelectOffset === widget.sourceStart;
|
|
116
|
+
const offset = live ? (fromStart ? live.start : live.end) : widget.preSelectOffset;
|
|
117
|
+
return { path: widget.paragraphPath.slice(), offset };
|
|
118
|
+
}
|
|
71
119
|
get isCustomRendered() {
|
|
72
|
-
const getDoc = this.#getDoc;
|
|
73
|
-
if (!getDoc)
|
|
74
|
-
return this.isCrossBlock;
|
|
75
120
|
const anchor = this.#anchor;
|
|
76
121
|
const focus = this.#focus;
|
|
77
122
|
if (!anchor || !focus)
|
|
@@ -80,12 +125,8 @@ class SelectionStateImpl {
|
|
|
80
125
|
return true;
|
|
81
126
|
if (!pathsEqual(anchor.path, focus.path))
|
|
82
127
|
return true;
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const node = nodeAt(getDoc(), anchor.path);
|
|
86
|
-
if (!node)
|
|
87
|
-
return false;
|
|
88
|
-
return node.kind === 'table';
|
|
128
|
+
// A same-path pair is one cell (the browser's) or a rectangle of cells (the overlay's).
|
|
129
|
+
return anchor.offset !== focus.offset && isCellPair(anchor, focus);
|
|
89
130
|
}
|
|
90
131
|
get start() {
|
|
91
132
|
return this.#normalizedSnapped()?.start ?? null;
|
|
@@ -108,34 +149,33 @@ class SelectionStateImpl {
|
|
|
108
149
|
return this.#selectAllCount;
|
|
109
150
|
}
|
|
110
151
|
enterCrossBlock(anchor, focus) {
|
|
111
|
-
|
|
112
|
-
//
|
|
113
|
-
// byte span and flagged, since below a same-path pair is refused as prose.
|
|
152
|
+
// Both ends on one block with no text: the block is the range, stored as its full span
|
|
153
|
+
// (a table's first and last cell) and flagged whole, as a same-path pair is refused below.
|
|
114
154
|
if (isWholeBlockEndpoint(anchor) &&
|
|
115
155
|
isWholeBlockEndpoint(focus) &&
|
|
116
156
|
pathsEqual(anchor.path, focus.path)) {
|
|
117
157
|
const path = anchor.path.slice();
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
158
|
+
const doc = this.#getDoc?.();
|
|
159
|
+
const a = (doc && wholeTableEndpoint(doc, path, 'start')) ?? { path, offset: 0 };
|
|
160
|
+
const f = (doc && wholeTableEndpoint(doc, path, 'end')) ?? {
|
|
161
|
+
path: path.slice(),
|
|
162
|
+
offset: this.#byteLengthAt(path)
|
|
163
|
+
};
|
|
164
|
+
this.#assertEndpointCoordinates(a, f);
|
|
165
|
+
this.#claim({ range: { anchor: a, focus: f, wholeUnit: path.slice() } });
|
|
121
166
|
this.#notify();
|
|
122
167
|
return;
|
|
123
168
|
}
|
|
124
|
-
this.#wholeUnit = null;
|
|
125
169
|
const a = this.#normalizePoint(anchor, focus.path);
|
|
126
170
|
const f = this.#normalizePoint(focus, anchor.path);
|
|
127
|
-
// A same-path
|
|
128
|
-
//
|
|
129
|
-
// share the table path but flag a cell coordinate, and the same-offset keyboard seed is
|
|
130
|
-
// kept so its immediate `extendFocus` has an anchor.
|
|
171
|
+
// A same-path text pair is a single-block range the browser owns, refused here where every
|
|
172
|
+
// entry path passes; a cell rectangle and the keyboard's equal-offset first pair are kept.
|
|
131
173
|
if (this.#isSamePathProseRange(a, f)) {
|
|
132
|
-
this.#
|
|
133
|
-
this.#focus = null;
|
|
174
|
+
this.#claim(null);
|
|
134
175
|
}
|
|
135
176
|
else {
|
|
136
177
|
this.#assertEndpointCoordinates(a, f);
|
|
137
|
-
this.#anchor
|
|
138
|
-
this.#focus = f;
|
|
178
|
+
this.#claim({ range: { anchor: a, focus: f, wholeUnit: null } });
|
|
139
179
|
}
|
|
140
180
|
this.#notify();
|
|
141
181
|
}
|
|
@@ -143,105 +183,105 @@ class SelectionStateImpl {
|
|
|
143
183
|
if (!this.#anchor) {
|
|
144
184
|
throw new Error('SelectionState.extendFocus called without an anchor');
|
|
145
185
|
}
|
|
146
|
-
|
|
147
|
-
//
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
// `offset !== offset` guard, unlike #isSamePathProseRange: extendFocus never seeds, so
|
|
157
|
-
// landing exactly on the anchor offset is a collapse that must not be stored either.
|
|
158
|
-
if (pathsEqual(this.#anchor.path, f.path) &&
|
|
159
|
-
!this.#anchor.cellCoordinate &&
|
|
160
|
-
!f.cellCoordinate) {
|
|
161
|
-
this.#anchor = null;
|
|
162
|
-
this.#focus = null;
|
|
186
|
+
// Leaving a whole-block range: its anchor is the block as a whole again, so the side it
|
|
187
|
+
// means (start below the new focus, end above it) is resolved afresh rather than kept at 0.
|
|
188
|
+
const anchor = this.#wholeUnit
|
|
189
|
+
? this.#normalizePoint({ path: this.#wholeUnit, wholeBlock: true }, point.path)
|
|
190
|
+
: this.#anchor;
|
|
191
|
+
const f = this.#normalizePoint(point, anchor.path);
|
|
192
|
+
// A focus back on the anchor's text leaf shrinks to a single-block range, even at the
|
|
193
|
+
// anchor's own offset: `extendFocus` never starts a pair, so landing there is a collapse.
|
|
194
|
+
if (pathsEqual(anchor.path, f.path) && !isCellPair(anchor, f)) {
|
|
195
|
+
this.#claim(null);
|
|
163
196
|
}
|
|
164
197
|
else {
|
|
165
|
-
this.#assertEndpointCoordinates(
|
|
166
|
-
this.#focus
|
|
198
|
+
this.#assertEndpointCoordinates(anchor, f);
|
|
199
|
+
this.#claim({ range: { anchor, focus: f, wholeUnit: null } });
|
|
167
200
|
}
|
|
168
201
|
this.#notify();
|
|
169
202
|
}
|
|
170
|
-
// G1.29 at the storing seam, the belt behind #normalizePoint: both entries carry it because
|
|
171
|
-
// both store an endpoint pair.
|
|
172
203
|
#byteLengthAt(path) {
|
|
173
204
|
const doc = this.#getDoc?.();
|
|
174
205
|
const node = doc ? nodeAt(doc, path) : null;
|
|
175
206
|
return node && 'raw' in node ? displayLength(node.raw) : 0;
|
|
176
207
|
}
|
|
208
|
+
// The endpoint coordinate check backs up `#normalizePoint` at every write of anchor and focus.
|
|
177
209
|
#assertEndpointCoordinates(anchor, focus) {
|
|
178
210
|
const getDoc = this.#getDoc;
|
|
179
211
|
if (!getDoc)
|
|
180
212
|
return;
|
|
181
213
|
assertInvariant('cross-block-endpoint-coordinates', () => checkCrossBlockEndpointCoordinates(getDoc(), anchor, focus));
|
|
182
214
|
}
|
|
183
|
-
// Same
|
|
184
|
-
// Equal-offset pairs are excluded so the keyboard
|
|
215
|
+
// Same text leaf, distinct offsets: the shape that must never enter cross-block state.
|
|
216
|
+
// Equal-offset pairs are excluded so the keyboard's starting pair survives to its extend.
|
|
185
217
|
#isSamePathProseRange(a, f) {
|
|
186
|
-
return
|
|
218
|
+
return pathsEqual(a.path, f.path) && !isCellPair(a, f) && a.offset !== f.offset;
|
|
187
219
|
}
|
|
188
|
-
// The
|
|
189
|
-
//
|
|
190
|
-
// char offset can never be stored outside the space its own block addresses (both funnels'
|
|
191
|
-
// headers). Never normalize at a call site instead. Idempotent; without a doc nothing can be
|
|
192
|
-
// measured, so points pass raw.
|
|
220
|
+
// The one place every entry path normalizes: a table endpoint becomes a flagged cell index and
|
|
221
|
+
// a character offset is clamped into its block. Without a document, points pass through.
|
|
193
222
|
#normalizePoint(point, otherPath) {
|
|
194
223
|
const getDoc = this.#getDoc;
|
|
195
224
|
if (!getDoc) {
|
|
196
225
|
return isWholeBlockEndpoint(point) ? { path: point.path.slice(), offset: 0 } : point;
|
|
197
226
|
}
|
|
198
227
|
const doc = getDoc();
|
|
199
|
-
if (isWholeBlockEndpoint(point))
|
|
200
|
-
|
|
228
|
+
if (isWholeBlockEndpoint(point)) {
|
|
229
|
+
const side = comparePaths(point.path, otherPath) > 0 ? 'end' : 'start';
|
|
230
|
+
return (wholeTableEndpoint(doc, point.path, side) ?? normalizeCharEndpoint(doc, point, otherPath));
|
|
231
|
+
}
|
|
201
232
|
if (point.cellCoordinate)
|
|
202
233
|
return point;
|
|
203
234
|
const snapped = normalizeTableEndpoint(doc, point.path, point.offset);
|
|
204
235
|
return snapped.cellCoordinate ? snapped : normalizeCharEndpoint(doc, snapped, otherPath);
|
|
205
236
|
}
|
|
206
237
|
collapse() {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
this.#
|
|
238
|
+
const announce = this.#hasCaretClaim();
|
|
239
|
+
this.#claim(null);
|
|
240
|
+
if (announce)
|
|
241
|
+
this.#notify();
|
|
242
|
+
}
|
|
243
|
+
dropForDocumentSwap() {
|
|
244
|
+
this.#claim(null);
|
|
214
245
|
}
|
|
215
246
|
clear() {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
this.#anchor = null;
|
|
219
|
-
this.#focus = null;
|
|
220
|
-
this.#gapCaret = null;
|
|
221
|
-
this.#wholeUnit = null;
|
|
247
|
+
const announce = this.#hasCaretClaim() || this.#selectAllCount !== 0;
|
|
248
|
+
this.#claim(null);
|
|
222
249
|
this.#selectAllCount = 0;
|
|
223
|
-
|
|
250
|
+
if (announce)
|
|
251
|
+
this.#notify();
|
|
224
252
|
}
|
|
225
|
-
//
|
|
226
|
-
//
|
|
253
|
+
// A range or a gap caret: what the clears announce ending. A widget is left out, since the
|
|
254
|
+
// caret that replaces it announces itself.
|
|
227
255
|
#hasCaretClaim() {
|
|
228
256
|
return this.#anchor !== null || this.#focus !== null || this.#gapCaret !== null;
|
|
229
257
|
}
|
|
230
|
-
// The
|
|
231
|
-
// copy is what keeps a caller's own position object from writing through.
|
|
258
|
+
// The copy keeps a caller's own position object from writing through.
|
|
232
259
|
setGapCaret(pos) {
|
|
233
|
-
this.#
|
|
234
|
-
this.#focus = null;
|
|
235
|
-
this.#wholeUnit = null;
|
|
236
|
-
this.#gapCaret = { parentPath: pos.parentPath.slice(), index: pos.index };
|
|
260
|
+
this.#claim({ gap: { parentPath: pos.parentPath.slice(), index: pos.index } });
|
|
237
261
|
this.#notify();
|
|
238
262
|
}
|
|
239
263
|
clearGapCaret() {
|
|
240
264
|
if (this.#gapCaret === null)
|
|
241
265
|
return;
|
|
242
|
-
this.#
|
|
266
|
+
this.#claim(null);
|
|
267
|
+
this.#notify();
|
|
268
|
+
}
|
|
269
|
+
selectWidget(target) {
|
|
270
|
+
this.#claim({ widget: copyWidget(target) });
|
|
243
271
|
this.#notify();
|
|
244
272
|
}
|
|
273
|
+
followWidgetEdit(path, editEnd, delta) {
|
|
274
|
+
const widget = this.#widget;
|
|
275
|
+
if (!widget || widget.sourceStart < editEnd || !pathsEqual(widget.paragraphPath, path))
|
|
276
|
+
return;
|
|
277
|
+
this.#claim({
|
|
278
|
+
widget: {
|
|
279
|
+
paragraphPath: widget.paragraphPath.slice(),
|
|
280
|
+
sourceStart: widget.sourceStart + delta,
|
|
281
|
+
preSelectOffset: widget.preSelectOffset + delta
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
}
|
|
245
285
|
incrementSelectAllCount() {
|
|
246
286
|
this.#selectAllCount += 1;
|
|
247
287
|
this.#notify();
|
|
@@ -251,22 +291,16 @@ class SelectionStateImpl {
|
|
|
251
291
|
return 'custom';
|
|
252
292
|
if (anchor.offset === focus.offset)
|
|
253
293
|
return 'collapsed';
|
|
254
|
-
|
|
255
|
-
// under the shared path) paints via the overlay; prose is a native range.
|
|
256
|
-
if (anchor.cellCoordinate || focus.cellCoordinate)
|
|
294
|
+
if (isCellPair(anchor, focus))
|
|
257
295
|
return 'custom';
|
|
258
|
-
const
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
const node = nodeAt(getDoc(), anchor.path);
|
|
262
|
-
return node?.kind === 'table' ? 'custom' : 'single-block';
|
|
296
|
+
const doc = this.#getDoc?.();
|
|
297
|
+
const node = doc ? nodeAt(doc, anchor.path) : null;
|
|
298
|
+
return node && isBlockNode(node) && isWholeBlockUnit(node) ? 'whole-block' : 'single-block';
|
|
263
299
|
}
|
|
264
300
|
cellLandingFor(point) {
|
|
265
301
|
const getDoc = this.#getDoc;
|
|
266
302
|
if (!getDoc)
|
|
267
303
|
return point;
|
|
268
|
-
// Resolution is the door's, on the node kind: a context-established intra-table endpoint
|
|
269
|
-
// is unflagged and still a cell index, and a non-table path answers null.
|
|
270
304
|
const deepPath = cellEndpointDeepPath(getDoc(), point);
|
|
271
305
|
return deepPath ? { path: deepPath, offset: 0 } : point;
|
|
272
306
|
}
|
|
@@ -279,4 +313,16 @@ class SelectionStateImpl {
|
|
|
279
313
|
announceSelection() {
|
|
280
314
|
this.#notify();
|
|
281
315
|
}
|
|
316
|
+
announcePlacement() {
|
|
317
|
+
this.#notify(true);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
// Copied at both ends, as the gap caret is: neither a caller's object nor a reader's copy can
|
|
321
|
+
// write the stored widget without a notification.
|
|
322
|
+
function copyWidget(target) {
|
|
323
|
+
return {
|
|
324
|
+
paragraphPath: target.paragraphPath.slice(),
|
|
325
|
+
sourceStart: target.sourceStart,
|
|
326
|
+
preSelectOffset: target.preSelectOffset
|
|
327
|
+
};
|
|
282
328
|
}
|
|
@@ -1,34 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared keydown prelude for contenteditable blocks: Ctrl+A counter, cross-block dispatch,
|
|
3
|
-
*
|
|
3
|
+
* the caret memory's key note, undo/redo, arrow boundary navigation. Block-specific handlers
|
|
4
4
|
* (Enter, Backspace, Tab, formatting) stay in each component.
|
|
5
5
|
*/
|
|
6
6
|
import type { FocusActions, HistoryActions } from '../action-contracts';
|
|
7
|
-
import type {
|
|
8
|
-
import type {
|
|
9
|
-
import type {
|
|
7
|
+
import type { DocumentGetter } from '../editor-keys';
|
|
8
|
+
import type { CaretMemory } from '../cursor/caret-memory';
|
|
9
|
+
import type { ScrollOwner } from '../cursor/scroll-owner';
|
|
10
10
|
import type { SelectionState } from './selection-state.svelte';
|
|
11
11
|
import type { CrossBlockHandlers } from './cross-block/dispatch';
|
|
12
|
-
import type {
|
|
12
|
+
import type { CommandDispatchContext } from '../schema/block-commands';
|
|
13
|
+
import type { Reading } from '../schema/reading';
|
|
13
14
|
export interface SharedKeydownContext extends LandableBoundsContext {
|
|
14
15
|
getEl(): HTMLElement | null;
|
|
15
|
-
/** Current caret offset in raw-content coordinates (
|
|
16
|
+
/** Current caret offset in raw-content coordinates (the container's marker prefix excluded). */
|
|
16
17
|
getCursorOffset(): number | null;
|
|
17
|
-
/** Shift-selection focus offset in raw-content coordinates (
|
|
18
|
+
/** Shift-selection focus offset in raw-content coordinates (the marker prefix excluded). */
|
|
18
19
|
getFocusOffset(): number | null;
|
|
19
20
|
getIndex(): number;
|
|
20
21
|
getMyPath(): number[];
|
|
21
22
|
getDoc: DocumentGetter;
|
|
22
23
|
crossBlock: CrossBlockHandlers;
|
|
23
24
|
selection: SelectionState;
|
|
24
|
-
|
|
25
|
-
edgeAffinity: EdgeAffinityState;
|
|
25
|
+
caretMemory: CaretMemory;
|
|
26
26
|
history: HistoryActions;
|
|
27
27
|
focus: FocusActions;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
/** Brings the block a Shift+Arrow extends into to the nearest edge. */
|
|
29
|
+
scrollOwner: Pick<ScrollOwner, 'place'>;
|
|
30
|
+
/** The editor's command dispatch: the caret memory reads a chord by its current binding, and
|
|
31
|
+
* the history suppression below takes only this editor's plugin chords. */
|
|
32
|
+
commands: CommandDispatchContext;
|
|
33
|
+
/** How the editor reads its bytes, whose grammar the vertical extension skips leaves by. */
|
|
34
|
+
reading: Reading;
|
|
32
35
|
}
|
|
33
36
|
/** True when the event was fully handled; the caller must skip its block-specific branches. */
|
|
34
37
|
export declare function handleSharedKeydown(e: KeyboardEvent, ctx: SharedKeydownContext): Promise<boolean>;
|
|
@@ -36,25 +39,17 @@ export interface LandableBounds {
|
|
|
36
39
|
start: number;
|
|
37
40
|
end: number;
|
|
38
41
|
}
|
|
39
|
-
/** The reads the bounds need, so a block-edge
|
|
42
|
+
/** The reads the bounds need, so a block-edge check outside this file can ask without building
|
|
40
43
|
* the whole keydown context. */
|
|
41
44
|
export interface LandableBoundsContext {
|
|
42
|
-
/** textContent length in raw-content coordinates (
|
|
45
|
+
/** textContent length in raw-content coordinates (the marker prefix excluded). */
|
|
43
46
|
getTextLen(): number;
|
|
44
|
-
getAmbientLength(): number;
|
|
45
47
|
}
|
|
46
|
-
/**
|
|
47
|
-
*
|
|
48
|
-
* caret lands. A mode that hides a block's own markers with no reveal puts those bytes out of
|
|
49
|
-
* reach, so the exits move in to what the DOM can land — the kind's declared content range is
|
|
50
|
-
* not that bound: paragraph, fenced code and table cell each declare the whole raw and still
|
|
51
|
-
* open or close with a run nothing paints. Every block-edge gate reads this, not 0/length.
|
|
52
|
-
*/
|
|
48
|
+
/** The raw offsets a caret can reach in the block, from the same walk that places it: hidden
|
|
49
|
+
* markers put bytes out of reach, so every block-edge check reads this, not 0 and length. */
|
|
53
50
|
export declare function caretLandableBounds(ctx: LandableBoundsContext, el: HTMLElement): LandableBounds;
|
|
54
|
-
/**
|
|
55
|
-
*
|
|
56
|
-
* paste/type-replace. True when the caller should return early from its own `onBeforeInput`.
|
|
57
|
-
*/
|
|
51
|
+
/** Routes historyUndo/historyRedo through the undo controller and delegates cross-block paste
|
|
52
|
+
* and typing; true when the caller should return early from its own `onBeforeInput`. */
|
|
58
53
|
export declare function handleSharedBeforeInput(e: InputEvent, ctx: {
|
|
59
54
|
history: HistoryActions;
|
|
60
55
|
crossBlock: CrossBlockHandlers;
|
|
@@ -1,41 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared keydown prelude for contenteditable blocks: Ctrl+A counter, cross-block dispatch,
|
|
3
|
-
*
|
|
3
|
+
* the caret memory's key note, undo/redo, arrow boundary navigation. Block-specific handlers
|
|
4
4
|
* (Enter, Backspace, Tab, formatting) stay in each component.
|
|
5
5
|
*/
|
|
6
|
+
import { commandAtBlock } from './cross-block/keydown';
|
|
6
7
|
import { extendFocusToNextBlock, extendFocusToPreviousBlock, scrollFocusBlockIntoView } from './keyboard-extend';
|
|
7
8
|
import { getCurrentCursorEditorRelativeX } from '../cursor/sticky-measure';
|
|
8
9
|
import { landableRawBounds } from '../cursor/widget-offset';
|
|
9
10
|
import { isAtFirstVisualLine, isAtLastVisualLine } from '../cursor/visual-lines';
|
|
10
|
-
import { eventToChord } from '../schema/keybindings';
|
|
11
|
+
import { endsSelectAllRun, eventToChord } from '../schema/keybindings';
|
|
11
12
|
import { isDefaultGlobalChord } from '../schema/commands';
|
|
12
13
|
/** True when the event was fully handled; the caller must skip its block-specific branches. */
|
|
13
14
|
export async function handleSharedKeydown(e, ctx) {
|
|
14
|
-
|
|
15
|
-
// part of the chord, not a separate action.
|
|
16
|
-
const isCtrlA = (e.ctrlKey || e.metaKey) && e.key === 'a' && !e.shiftKey;
|
|
17
|
-
const isBareModifier = e.key === 'Control' ||
|
|
18
|
-
e.key === 'Shift' ||
|
|
19
|
-
e.key === 'Alt' ||
|
|
20
|
-
e.key === 'Meta' ||
|
|
21
|
-
e.key === 'AltGraph' ||
|
|
22
|
-
e.key === 'CapsLock';
|
|
23
|
-
if (!isCtrlA && !isBareModifier) {
|
|
15
|
+
if (endsSelectAllRun(e))
|
|
24
16
|
ctx.selection.resetSelectAllCount();
|
|
25
|
-
}
|
|
26
17
|
if (await ctx.crossBlock.handleKeyDown(e))
|
|
27
18
|
return true;
|
|
28
19
|
const el = ctx.getEl();
|
|
29
20
|
if (!el)
|
|
30
21
|
return false;
|
|
31
|
-
ctx.
|
|
32
|
-
|
|
33
|
-
//
|
|
34
|
-
// beforeinput historyRedo in Chromium/WebView2. The DEFAULT table is the right question here:
|
|
35
|
-
// it names the chords with a native history default, and running the command is the block's
|
|
36
|
-
// own override-aware dispatch, one branch further on.
|
|
22
|
+
ctx.caretMemory.noteKey(e, commandAtBlock(e, ctx), () => getCurrentCursorEditorRelativeX(el));
|
|
23
|
+
// Ctrl+Y fires no `historyRedo` beforeinput in Chromium and WebView2, so every chord with a
|
|
24
|
+
// native history default is suppressed here; the block's own dispatch runs the command.
|
|
37
25
|
const historyChord = eventToChord(e);
|
|
38
|
-
if (historyChord && isDefaultGlobalChord(historyChord, ctx.
|
|
26
|
+
if (historyChord && isDefaultGlobalChord(historyChord, ctx.commands.activation)) {
|
|
39
27
|
e.preventDefault();
|
|
40
28
|
return false;
|
|
41
29
|
}
|
|
@@ -51,13 +39,13 @@ export async function handleSharedKeydown(e, ctx) {
|
|
|
51
39
|
const shiftOffset = e.shiftKey ? ctx.getFocusOffset() : null;
|
|
52
40
|
if (e.key === 'ArrowUp') {
|
|
53
41
|
const offset = shiftOffset ?? ctx.getCursorOffset() ?? 0;
|
|
54
|
-
if (isAtFirstVisualLine(el, offset, bounds()
|
|
42
|
+
if (isAtFirstVisualLine(el, offset, bounds())) {
|
|
55
43
|
// Cross the boundary only when focus is already at the block's first reachable
|
|
56
44
|
// offset, so native Shift+ArrowUp extension has nowhere left to go within it.
|
|
57
45
|
if (e.shiftKey && offset <= bounds().start) {
|
|
58
46
|
e.preventDefault();
|
|
59
|
-
extendFocusToPreviousBlock(ctx.selection, ctx.getDoc(), el, myPath, 'start');
|
|
60
|
-
scrollFocusBlockIntoView(ctx.selection, ctx.
|
|
47
|
+
extendFocusToPreviousBlock(ctx.selection, ctx.getDoc(), ctx.reading.grammar, el, myPath, 'start');
|
|
48
|
+
scrollFocusBlockIntoView(ctx.selection, ctx.scrollOwner);
|
|
61
49
|
return true;
|
|
62
50
|
}
|
|
63
51
|
if (!e.shiftKey && !e.altKey) {
|
|
@@ -69,13 +57,13 @@ export async function handleSharedKeydown(e, ctx) {
|
|
|
69
57
|
}
|
|
70
58
|
if (e.key === 'ArrowDown') {
|
|
71
59
|
const offset = shiftOffset ?? ctx.getCursorOffset() ?? 0;
|
|
72
|
-
if (isAtLastVisualLine(el, offset, bounds()
|
|
60
|
+
if (isAtLastVisualLine(el, offset, bounds())) {
|
|
73
61
|
// Cross the boundary only when focus is already at the block's last reachable
|
|
74
62
|
// offset, so native Shift+ArrowDown extension has nowhere left to go.
|
|
75
63
|
if (e.shiftKey && offset >= bounds().end) {
|
|
76
64
|
e.preventDefault();
|
|
77
|
-
extendFocusToNextBlock(ctx.selection, ctx.getDoc(), el, myPath, 'vertical');
|
|
78
|
-
scrollFocusBlockIntoView(ctx.selection, ctx.
|
|
65
|
+
extendFocusToNextBlock(ctx.selection, ctx.getDoc(), ctx.reading.grammar, el, myPath, 'vertical');
|
|
66
|
+
scrollFocusBlockIntoView(ctx.selection, ctx.scrollOwner);
|
|
79
67
|
return true;
|
|
80
68
|
}
|
|
81
69
|
if (!e.shiftKey && !e.altKey) {
|
|
@@ -86,15 +74,14 @@ export async function handleSharedKeydown(e, ctx) {
|
|
|
86
74
|
}
|
|
87
75
|
}
|
|
88
76
|
if (e.key === 'ArrowLeft') {
|
|
89
|
-
// Shift+Arrow reads focus,
|
|
90
|
-
//
|
|
91
|
-
// contracting toward a non-zero anchor, and misfire for backward selections.
|
|
77
|
+
// Shift+Arrow reads the focus, since `getCursorOffset()` gives the range start: the anchor
|
|
78
|
+
// of a forward selection, which would extend across blocks while the focus contracts.
|
|
92
79
|
const offset = e.shiftKey ? (ctx.getFocusOffset() ?? bounds().start) : ctx.getCursorOffset();
|
|
93
80
|
if (offset !== null && offset <= bounds().start) {
|
|
94
81
|
if (e.shiftKey) {
|
|
95
82
|
e.preventDefault();
|
|
96
|
-
extendFocusToPreviousBlock(ctx.selection, ctx.getDoc(), el, myPath);
|
|
97
|
-
scrollFocusBlockIntoView(ctx.selection, ctx.
|
|
83
|
+
extendFocusToPreviousBlock(ctx.selection, ctx.getDoc(), ctx.reading.grammar, el, myPath);
|
|
84
|
+
scrollFocusBlockIntoView(ctx.selection, ctx.scrollOwner);
|
|
98
85
|
return true;
|
|
99
86
|
}
|
|
100
87
|
e.preventDefault();
|
|
@@ -107,8 +94,8 @@ export async function handleSharedKeydown(e, ctx) {
|
|
|
107
94
|
if (offset !== null && offset >= bounds().end) {
|
|
108
95
|
if (e.shiftKey) {
|
|
109
96
|
e.preventDefault();
|
|
110
|
-
extendFocusToNextBlock(ctx.selection, ctx.getDoc(), el, myPath);
|
|
111
|
-
scrollFocusBlockIntoView(ctx.selection, ctx.
|
|
97
|
+
extendFocusToNextBlock(ctx.selection, ctx.getDoc(), ctx.reading.grammar, el, myPath);
|
|
98
|
+
scrollFocusBlockIntoView(ctx.selection, ctx.scrollOwner);
|
|
112
99
|
return true;
|
|
113
100
|
}
|
|
114
101
|
e.preventDefault();
|
|
@@ -118,21 +105,14 @@ export async function handleSharedKeydown(e, ctx) {
|
|
|
118
105
|
}
|
|
119
106
|
return false;
|
|
120
107
|
}
|
|
121
|
-
/**
|
|
122
|
-
*
|
|
123
|
-
* caret lands. A mode that hides a block's own markers with no reveal puts those bytes out of
|
|
124
|
-
* reach, so the exits move in to what the DOM can land — the kind's declared content range is
|
|
125
|
-
* not that bound: paragraph, fenced code and table cell each declare the whole raw and still
|
|
126
|
-
* open or close with a run nothing paints. Every block-edge gate reads this, not 0/length.
|
|
127
|
-
*/
|
|
108
|
+
/** The raw offsets a caret can reach in the block, from the same walk that places it: hidden
|
|
109
|
+
* markers put bytes out of reach, so every block-edge check reads this, not 0 and length. */
|
|
128
110
|
export function caretLandableBounds(ctx, el) {
|
|
129
|
-
return landableRawBounds(el
|
|
111
|
+
return landableRawBounds(el) ?? { start: 0, end: ctx.getTextLen() };
|
|
130
112
|
}
|
|
131
113
|
// ── Shared beforeinput prelude ─────────────────────────────────────────────
|
|
132
|
-
/**
|
|
133
|
-
*
|
|
134
|
-
* paste/type-replace. True when the caller should return early from its own `onBeforeInput`.
|
|
135
|
-
*/
|
|
114
|
+
/** Routes historyUndo/historyRedo through the undo controller and delegates cross-block paste
|
|
115
|
+
* and typing; true when the caller should return early from its own `onBeforeInput`. */
|
|
136
116
|
export async function handleSharedBeforeInput(e, ctx) {
|
|
137
117
|
if (e.inputType === 'historyUndo') {
|
|
138
118
|
e.preventDefault();
|