@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,32 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* The one place a caret-edge key is decided in a prose block. A plain Backspace, Delete or
|
|
3
|
+
* printable key at a caret edge resolves against a declared policy (the inline construct's beside
|
|
4
|
+
* the caret, or the ancestor container's at the content start), never native editing, which would
|
|
5
|
+
* corrupt the bytes those constructs stand for (G4.12).
|
|
6
6
|
*/
|
|
7
7
|
import { resolvedInlineContent } from '../../../core/inline/inline-cache';
|
|
8
|
-
import { getContentRange } from '../../../core/inline';
|
|
8
|
+
import { getContentRange, sameLineSuffix } from '../../../core/inline';
|
|
9
9
|
import { getInlineWidgetEditing } from '../../../core/inline/inline-widgets';
|
|
10
|
-
import {
|
|
10
|
+
import { trailingLineEnding, trimTrailingLineEnding } from '../../../core/lines';
|
|
11
11
|
import {} from '../../../cursor/coordinate-spaces';
|
|
12
|
-
import {
|
|
13
|
-
import { landableRawBounds, revealsNoMarkers, screenVisibilityOf } from '../../../cursor/widget-offset';
|
|
14
|
-
import { ambientSpanOf } from '../../../ambient/ambient-dom';
|
|
12
|
+
import { hiddenSuffixLength, landableRawBounds, markerPrefixOf, revealsNoMarkers, screenVisibilityOf } from '../../../cursor/widget-offset';
|
|
15
13
|
import { recordIslandKeyScan } from '../../../perf/instruments';
|
|
16
14
|
import { caretIsInTextContent, hasModifier, isPlainTypingKey } from './click-snap-guard';
|
|
17
15
|
import { createMarkerCompletion } from './marker-completion';
|
|
18
16
|
import { resolveEdgeDeletion } from './construct-edge-delete';
|
|
19
|
-
import { hidesStructuralSuffix } from './hidden-suffix';
|
|
20
17
|
import { resolveEdgeSeat } from './edge-seat';
|
|
21
|
-
import {
|
|
18
|
+
import { replaceRangeInLeaf } from '../../../tree-operations/leaf-range';
|
|
19
|
+
import { openHardBreakLine } from './text-keydown';
|
|
22
20
|
import { resolveMarkedInsertion } from './pending-mark-insert';
|
|
23
21
|
import { widgetAtCursor } from './widget-adjacency';
|
|
24
|
-
import { resolveDelimiterAutoPair } from './delimiter-autopair';
|
|
25
|
-
import {
|
|
26
|
-
|
|
27
|
-
export function keepsBlockKind(node, line) {
|
|
28
|
-
return soleProseReparse(line + trailingLineEnding(node.raw))?.block.kind === node.kind;
|
|
29
|
-
}
|
|
22
|
+
import { noteOwnPair, resolveDelimiterAutoPair } from './delimiter-autopair';
|
|
23
|
+
import { keepsKindAt } from '../../../core/inline/live-edit/read-back';
|
|
24
|
+
import { hidesMarkers } from '../../../presentation-mode';
|
|
30
25
|
const REPLACE_ISLAND_POLICY = {
|
|
31
26
|
onEdge: 'select',
|
|
32
27
|
deleteGranularity: 'select-then-delete'
|
|
@@ -52,7 +47,7 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
52
47
|
},
|
|
53
48
|
{
|
|
54
49
|
id: 'reading-mode',
|
|
55
|
-
reason: '
|
|
50
|
+
reason: 'inline widgets and the container’s marker prefix are destructive-only view guards, so reading skips every branch below; the widget branch above still selects, committing nothing',
|
|
56
51
|
cut: true,
|
|
57
52
|
claims: () => deps.isReading()
|
|
58
53
|
},
|
|
@@ -66,13 +61,8 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
66
61
|
reason: 'a selection into the ambient span blocks native delete silently, with no beforeinput',
|
|
67
62
|
claims: handleAmbient
|
|
68
63
|
},
|
|
69
|
-
// The
|
|
70
|
-
// command; the more specific families above still
|
|
71
|
-
{
|
|
72
|
-
id: 'hidden-suffix-delete',
|
|
73
|
-
reason: 'the merge this press would reach concatenates past the block’s own hidden structure',
|
|
74
|
-
claims: handleHiddenSuffixDelete
|
|
75
|
-
},
|
|
64
|
+
// The three below handle only what would otherwise reach native editing or the block-merge
|
|
65
|
+
// command; the more specific families above still take a key aimed at one of theirs.
|
|
76
66
|
{
|
|
77
67
|
id: 'construct-edge-delete',
|
|
78
68
|
reason: 'a destructive key beside an unpainted delimiter run takes content, never a marker',
|
|
@@ -97,32 +87,34 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
97
87
|
return false;
|
|
98
88
|
}
|
|
99
89
|
function inlinesOf(node) {
|
|
100
|
-
return resolvedInlineContent(node, deps.
|
|
90
|
+
return resolvedInlineContent(node, deps.reading);
|
|
101
91
|
}
|
|
102
92
|
function display() {
|
|
103
93
|
return trimTrailingLineEnding(deps.node.raw);
|
|
104
94
|
}
|
|
105
|
-
/** One
|
|
106
|
-
* is the
|
|
95
|
+
/** One rewrite of the displayed text, one CST commit. `caretBefore` anchors the undo entry, so
|
|
96
|
+
* it is the caret before the edit: the rewrite's own start, unless a hidden run moved it. */
|
|
107
97
|
function writeDisplay(next, caretAfter, source, caretBefore) {
|
|
108
|
-
|
|
109
|
-
|
|
98
|
+
const write = deps.blockEdit.updateBlockContent(deps.index, next + trailingLineEnding(deps.node.raw, deps.getLineEnding()), 'authored', caretBefore, caretAfter);
|
|
99
|
+
if (write.admitted)
|
|
100
|
+
deps.setPendingCursor(write.caret, source);
|
|
110
101
|
}
|
|
102
|
+
/** `[start, end)` replaced by `insert` through the in-leaf range replace, the store read at the
|
|
103
|
+
* key. */
|
|
111
104
|
function editDisplay(start, end, insert, source = 'island', caretBefore = start) {
|
|
112
|
-
const
|
|
113
|
-
|
|
105
|
+
const edit = replaceRangeInLeaf(deps.node, { start, end }, insert, deps.storedAs());
|
|
106
|
+
const write = deps.blockEdit.updateBlockContent(deps.index, edit.raw, 'authored', caretBefore, edit.caret);
|
|
107
|
+
if (write.admitted)
|
|
108
|
+
deps.setPendingCursor(write.caret, source);
|
|
114
109
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
* the literal edit the engine would have written.
|
|
120
|
-
*/
|
|
121
|
-
function joinSeamMode(el) {
|
|
122
|
-
return revealsNoMarkers(el) ? 'live' : undefined;
|
|
110
|
+
/** The selected range, or null at a plain caret; every branch reads it here. Empty when both ends
|
|
111
|
+
* clamp into the marker prefix, so a branch that writes bytes checks `end > start` first. */
|
|
112
|
+
function heldRange() {
|
|
113
|
+
return deps.getRawSelection();
|
|
123
114
|
}
|
|
115
|
+
// ── The shared helpers the branches below use ────────────────────────────
|
|
124
116
|
/** What the construct-edge rule (live-mode.md § 4.4) does with a destructive key here, or null
|
|
125
|
-
* where the
|
|
117
|
+
* where the block draws its markers and the byte beside the caret is one the user can see. */
|
|
126
118
|
function edgeDeletionAt(el, caret, direction) {
|
|
127
119
|
if (!revealsNoMarkers(el))
|
|
128
120
|
return null;
|
|
@@ -133,22 +125,40 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
133
125
|
direction,
|
|
134
126
|
screen: screenVisibilityOf(el),
|
|
135
127
|
inlines: inlinesOf(deps.node),
|
|
136
|
-
|
|
128
|
+
store: deps.storedAs()
|
|
137
129
|
});
|
|
138
130
|
}
|
|
139
|
-
/** A
|
|
131
|
+
/** A keypress with no safe rewrite writes nothing: the browser's version would show the
|
|
140
132
|
* delimiters the rule was hiding. */
|
|
141
133
|
function applyEdgeDeletion(deletion, caretBefore) {
|
|
142
134
|
if ('swallow' in deletion)
|
|
143
135
|
return;
|
|
144
136
|
writeDisplay(deletion.raw, deletion.caret, 'construct-delete', caretBefore);
|
|
137
|
+
// Pended after the write, since the write clears pending marks; the caret has not moved, so
|
|
138
|
+
// the format waits for the next insertion (live-mode.md § 4.4).
|
|
139
|
+
for (const kind of deletion.unwrappedMarks)
|
|
140
|
+
deps.pendingMarks.toggle(kind);
|
|
145
141
|
}
|
|
146
|
-
/** Where a printable byte belongs when the caret sits at
|
|
142
|
+
/** Where a printable byte belongs when the caret sits at a hidden delimiter run
|
|
147
143
|
* (live-mode.md § 4.2), or null when no run is touched and the caret's own offset stands. */
|
|
148
144
|
function typingSeatAt(el, caret, typed) {
|
|
149
145
|
if (!revealsNoMarkers(el))
|
|
150
146
|
return null;
|
|
151
|
-
return resolveEdgeSeat(caret, inlinesOf(deps.node), deps.getEdgeAffinity(), deps.node.raw, screenVisibilityOf(el), typed);
|
|
147
|
+
return resolveEdgeSeat(caret, inlinesOf(deps.node), deps.getEdgeAffinity(), deps.node.raw, screenVisibilityOf(el), typed, deps.reading);
|
|
148
|
+
}
|
|
149
|
+
/** A printable byte the browser would drop at an element-level caret. Over a range it replaces
|
|
150
|
+
* through the join rules; at a caret the hidden-run rules pick which side it lands on. */
|
|
151
|
+
function writeTypedByte(el, caretOffset, typed, source) {
|
|
152
|
+
const range = heldRange();
|
|
153
|
+
if (range && range.end > range.start) {
|
|
154
|
+
const edit = replaceRangeInLeaf(deps.node, range, typed, deps.storedAs());
|
|
155
|
+
const write = deps.blockEdit.updateBlockContent(deps.index, edit.raw, 'authored', range.start, edit.caret);
|
|
156
|
+
if (write.admitted)
|
|
157
|
+
deps.setPendingCursor(write.caret, source);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const seatedAt = typingSeatAt(el, caretOffset, typed)?.offset ?? caretOffset;
|
|
161
|
+
editDisplay(seatedAt, seatedAt, typed, source, caretOffset);
|
|
152
162
|
}
|
|
153
163
|
// ── CST inline widget ────────────────────────────────────────────────────
|
|
154
164
|
function handleCstWidget(e, caretOffset) {
|
|
@@ -160,34 +170,35 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
160
170
|
// Forward keys enter the widget after the caret, backward keys the one before, so
|
|
161
171
|
// a caret between two adjacent widgets enters the one the key is aimed at.
|
|
162
172
|
const direction = e.key === 'ArrowRight' || e.key === 'Delete' ? 'forward' : 'backward';
|
|
163
|
-
const
|
|
173
|
+
const { grammar } = deps.reading;
|
|
174
|
+
const widgetAt = widgetAtCursor(caretOffset, inlinesOf(node), node.raw, direction, grammar);
|
|
164
175
|
if (!widgetAt)
|
|
165
176
|
return false;
|
|
166
|
-
//
|
|
167
|
-
//
|
|
168
|
-
const
|
|
177
|
+
// Past the early return: every keystroke in every prose block reaches the line above, so
|
|
178
|
+
// the work below stays off that path.
|
|
179
|
+
const range = heldRange();
|
|
180
|
+
// No modifier, and a collapsed caret: a modifier makes the key a word-scoped platform
|
|
181
|
+
// command, and a selected range is an edit of that range, not an entry into a construct.
|
|
182
|
+
const plainEdgeKey = !e.shiftKey && !hasModifier(e) && !range;
|
|
169
183
|
const enterFromRight = plainEdgeKey && widgetAt.atRight && (e.key === 'ArrowLeft' || e.key === 'Backspace');
|
|
170
184
|
const enterFromLeft = plainEdgeKey && !widgetAt.atRight && (e.key === 'ArrowRight' || e.key === 'Delete');
|
|
171
185
|
if (enterFromRight || enterFromLeft) {
|
|
172
186
|
const isDestructive = e.key === 'Backspace' || e.key === 'Delete';
|
|
173
|
-
const policy = deps.widgetEdgePolicy?.(widgetAt) ?? getInlineWidgetEditing(widgetAt.kind);
|
|
174
|
-
// A step-over widget reads as one character to navigation, so
|
|
175
|
-
//
|
|
176
|
-
// still runs the atomic-delete branch below.
|
|
187
|
+
const policy = deps.widgetEdgePolicy?.(widgetAt) ?? getInlineWidgetEditing(widgetAt.kind, grammar);
|
|
188
|
+
// A step-over widget reads as one character to navigation, so the browser carries the
|
|
189
|
+
// caret across; a destructive key still runs the atomic-delete branch below.
|
|
177
190
|
if (!isDestructive && policy?.onEdge === 'step-over')
|
|
178
191
|
return false;
|
|
179
192
|
e.preventDefault();
|
|
180
193
|
deps.setSnapTarget(null);
|
|
181
194
|
if (isDestructive && policy?.deleteGranularity === 'atomic' && !deps.isReading()) {
|
|
182
|
-
// One
|
|
183
|
-
// Ctrl+Z lands there.
|
|
184
|
-
|
|
185
|
-
void deps.blockEdit.updateBlockContent(deps.index, newRaw, caretOffset, widgetAt.start);
|
|
186
|
-
deps.setPendingCursor(widgetAt.start, 'widget');
|
|
195
|
+
// One keypress takes the whole construct, anchored at the caret before the delete
|
|
196
|
+
// so Ctrl+Z lands there.
|
|
197
|
+
editDisplay(widgetAt.start, widgetAt.end, '', 'widget', caretOffset);
|
|
187
198
|
return true;
|
|
188
199
|
}
|
|
189
|
-
// `onEdge: 'select'`, plus the
|
|
190
|
-
//
|
|
200
|
+
// `onEdge: 'select'`, plus the kinds `enterWidget` sends to their source instead of
|
|
201
|
+
// selecting.
|
|
191
202
|
deps.enterWidget(widgetAt, enterFromRight);
|
|
192
203
|
return true;
|
|
193
204
|
}
|
|
@@ -200,19 +211,12 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
200
211
|
!deps.isReading()) {
|
|
201
212
|
e.preventDefault();
|
|
202
213
|
deps.setSnapTarget(null);
|
|
203
|
-
|
|
204
|
-
// This branch owns only the fact that the engine drops the key beside a widget; which
|
|
205
|
-
// side of an unpainted run the byte belongs on is still the seat's answer.
|
|
206
|
-
const seatedAt = typingSeatAt(el, caretOffset, typed)?.offset ?? caretOffset;
|
|
207
|
-
const newRaw = node.raw.slice(0, seatedAt) + typed + node.raw.slice(seatedAt);
|
|
208
|
-
const postEdit = seatedAt + typed.length;
|
|
209
|
-
void deps.blockEdit.updateBlockContent(deps.index, newRaw, caretOffset, postEdit);
|
|
210
|
-
deps.setPendingCursor(postEdit, 'widget', newRaw);
|
|
214
|
+
writeTypedByte(el, caretOffset, e.key, 'widget');
|
|
211
215
|
return true;
|
|
212
216
|
}
|
|
213
217
|
return false;
|
|
214
218
|
}
|
|
215
|
-
// ── Decoration
|
|
219
|
+
// ── Decoration widgets ───────────────────────────────────────────────────
|
|
216
220
|
function islandsInDom(el) {
|
|
217
221
|
recordIslandKeyScan();
|
|
218
222
|
const out = [];
|
|
@@ -237,12 +241,12 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
237
241
|
sel.addRange(range);
|
|
238
242
|
}
|
|
239
243
|
function handleIsland(e, caretOffset) {
|
|
240
|
-
// Modifier chords stay
|
|
244
|
+
// Modifier chords stay with the browser; these rules take only the plain edge keys.
|
|
241
245
|
const isDestructive = !hasModifier(e) && (e.key === 'Backspace' || e.key === 'Delete');
|
|
242
246
|
const isTyping = isPlainTypingKey(e);
|
|
243
247
|
if (!isDestructive && !isTyping)
|
|
244
248
|
return false;
|
|
245
|
-
//
|
|
249
|
+
// Blocks with no decoration widgets, the common case, skip the per-keystroke DOM scan.
|
|
246
250
|
if (!deps.hasIslands())
|
|
247
251
|
return false;
|
|
248
252
|
const el = deps.getEl();
|
|
@@ -251,11 +255,11 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
251
255
|
const islands = islandsInDom(el);
|
|
252
256
|
if (islands.length === 0)
|
|
253
257
|
return false;
|
|
254
|
-
// Second
|
|
258
|
+
// Second keypress: the browser selection already wraps a replace widget, so delete its
|
|
255
259
|
// whole hidden range through the CST as one undo entry.
|
|
256
260
|
if (isDestructive) {
|
|
257
|
-
const selection =
|
|
258
|
-
if (selection
|
|
261
|
+
const selection = heldRange();
|
|
262
|
+
if (selection) {
|
|
259
263
|
const selected = islands.find((i) => islandPolicy(i).onEdge === 'select' &&
|
|
260
264
|
i.start === selection.start &&
|
|
261
265
|
i.end === selection.end);
|
|
@@ -264,15 +268,15 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
264
268
|
editDisplay(selected.start, selected.end, '');
|
|
265
269
|
return true;
|
|
266
270
|
}
|
|
267
|
-
// A different non-empty selection
|
|
271
|
+
// A different non-empty selection: leave it to the normal delete paths.
|
|
268
272
|
return false;
|
|
269
273
|
}
|
|
270
274
|
}
|
|
271
275
|
if (caretOffset === null)
|
|
272
276
|
return false;
|
|
273
277
|
const contentLength = display().length;
|
|
274
|
-
// First
|
|
275
|
-
// the range it hides has no
|
|
278
|
+
// First keypress: selecting the whole widget is the only visible thing to delete, since
|
|
279
|
+
// the range it hides has no bytes of its own on screen.
|
|
276
280
|
if (isDestructive) {
|
|
277
281
|
const wantTrailingEdge = e.key === 'Backspace';
|
|
278
282
|
const target = islands.find((i) => islandPolicy(i).onEdge === 'select' &&
|
|
@@ -283,8 +287,8 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
283
287
|
return true;
|
|
284
288
|
}
|
|
285
289
|
}
|
|
286
|
-
// A step-over
|
|
287
|
-
// boundary there is none, so fall through and let block merge
|
|
290
|
+
// A step-over widget is transparent to the real byte beside it; at a true block
|
|
291
|
+
// boundary there is none, so fall through and let the block merge run.
|
|
288
292
|
const widget = islands.find((i) => islandPolicy(i).onEdge === 'step-over' && i.start === caretOffset);
|
|
289
293
|
if (!widget)
|
|
290
294
|
return false;
|
|
@@ -295,9 +299,8 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
295
299
|
: null;
|
|
296
300
|
if (direction !== null) {
|
|
297
301
|
e.preventDefault();
|
|
298
|
-
//
|
|
299
|
-
//
|
|
300
|
-
// this arm outranks it, so it asks rather than splices.
|
|
302
|
+
// Beside a hidden delimiter run the construct-edge rule decides which byte a key takes
|
|
303
|
+
// (`docs/design/live-mode.md` § 4.4), and this branch outranks it, so it asks that rule.
|
|
301
304
|
const deletion = edgeDeletionAt(el, caretOffset, direction);
|
|
302
305
|
if (deletion)
|
|
303
306
|
applyEdgeDeletion(deletion, caretOffset);
|
|
@@ -307,28 +310,28 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
307
310
|
editDisplay(caretOffset, caretOffset + 1, '');
|
|
308
311
|
return true;
|
|
309
312
|
}
|
|
310
|
-
//
|
|
311
|
-
//
|
|
312
|
-
// branch in e2e, so it is unit-pinned instead.
|
|
313
|
+
// Some browsers drop printable keys at an element-level caret beside a non-editable widget.
|
|
314
|
+
// Chromium types them, so a unit test, not e2e, covers this branch.
|
|
313
315
|
if (isTyping && !caretIsInTextContent(el, window.getSelection())) {
|
|
314
316
|
e.preventDefault();
|
|
315
|
-
|
|
317
|
+
writeTypedByte(el, caretOffset, e.key, 'island');
|
|
316
318
|
return true;
|
|
317
319
|
}
|
|
318
320
|
return false;
|
|
319
321
|
}
|
|
320
|
-
// ──
|
|
321
|
-
// A selection reaching into the contenteditable="false"
|
|
322
|
-
// Backspace
|
|
322
|
+
// ── Container marker prefix overlap ────────────────────────────────────────
|
|
323
|
+
// A selection reaching into the contenteditable="false" marker prefix blocks the browser's
|
|
324
|
+
// Backspace and Delete silently, with no beforeinput, so delete through the CST instead.
|
|
323
325
|
function handleAmbient(e) {
|
|
324
326
|
if (e.key !== 'Backspace' && e.key !== 'Delete')
|
|
325
327
|
return false;
|
|
326
|
-
|
|
328
|
+
const range = heldRange();
|
|
329
|
+
if (!range)
|
|
327
330
|
return false;
|
|
328
331
|
const el = deps.getEl();
|
|
329
|
-
if (!el
|
|
332
|
+
if (!el)
|
|
330
333
|
return false;
|
|
331
|
-
const ambient =
|
|
334
|
+
const ambient = markerPrefixOf(el);
|
|
332
335
|
const sel = window.getSelection();
|
|
333
336
|
const touchesAmbient = !!ambient &&
|
|
334
337
|
!!sel &&
|
|
@@ -337,57 +340,35 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
337
340
|
if (!touchesAmbient)
|
|
338
341
|
return false;
|
|
339
342
|
e.preventDefault();
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
//
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
deps.
|
|
343
|
+
// A selection holding only the marker prefix covers no content byte, so there is nothing
|
|
344
|
+
// to delete and the press is consumed with no commit.
|
|
345
|
+
if (range.end > range.start) {
|
|
346
|
+
// Handled at keydown, so this branch asks the join rules itself, or a literal splice would
|
|
347
|
+
// print the delimiter runs the cut stranded (`docs/design/live-mode.md` § 4.5).
|
|
348
|
+
const edit = replaceRangeInLeaf(deps.node, range, '', deps.storedAs());
|
|
349
|
+
const write = deps.blockEdit.updateBlockContent(deps.index, edit.raw, 'authored', range.start, edit.caret);
|
|
350
|
+
if (write.admitted)
|
|
351
|
+
deps.setPendingCursor(write.caret, 'ambient-delete');
|
|
347
352
|
}
|
|
348
353
|
return true;
|
|
349
354
|
}
|
|
350
|
-
// ── Hidden
|
|
351
|
-
/**
|
|
352
|
-
*
|
|
353
|
-
* would reach concatenates past that suffix, so the press is consumed. The rule itself lives in
|
|
354
|
-
* `hidden-suffix.ts`; the command arm asks the same question from its own coordinates.
|
|
355
|
-
*/
|
|
356
|
-
function handleHiddenSuffixDelete(e, caretOffset) {
|
|
357
|
-
if (e.key !== 'Delete')
|
|
358
|
-
return false;
|
|
359
|
-
if (e.shiftKey || hasModifier(e))
|
|
360
|
-
return false;
|
|
361
|
-
if (caretOffset === null || hasSelectionHelper())
|
|
362
|
-
return false;
|
|
363
|
-
if (caretOffset !== getContentRange(deps.node).end)
|
|
364
|
-
return false;
|
|
365
|
-
if (!hidesStructuralSuffix(deps.getEl(), deps.node, display().length))
|
|
366
|
-
return false;
|
|
367
|
-
e.preventDefault();
|
|
368
|
-
return true;
|
|
369
|
-
}
|
|
370
|
-
// ── Hidden construct edge (the destructive arm) ────────────────────────────
|
|
371
|
-
/**
|
|
372
|
-
* A plain Backspace/Delete against an inline construct's unpainted delimiter run: the rewrite
|
|
373
|
-
* takes the adjacent CONTENT character instead of a byte the reader never saw, plus the
|
|
374
|
-
* delimiters that leaves enclosing nothing (live-mode.md § 4.4).
|
|
375
|
-
*/
|
|
355
|
+
// ── Hidden construct edge (deleting) ───────────────────────────────────────
|
|
356
|
+
/** A plain Backspace or Delete against a hidden delimiter run takes the neighbouring content
|
|
357
|
+
* character instead of a byte the user never saw (`docs/design/live-mode.md` § 4.4). */
|
|
376
358
|
function handleConstructEdgeDelete(e, caretOffset) {
|
|
377
359
|
if (e.key !== 'Backspace' && e.key !== 'Delete')
|
|
378
360
|
return false;
|
|
379
361
|
if (e.shiftKey || hasModifier(e))
|
|
380
362
|
return false;
|
|
381
|
-
if (caretOffset === null ||
|
|
363
|
+
if (caretOffset === null || heldRange())
|
|
382
364
|
return false;
|
|
383
365
|
const el = deps.getEl();
|
|
384
366
|
if (!el)
|
|
385
367
|
return false;
|
|
386
|
-
//
|
|
387
|
-
//
|
|
388
|
-
// glyph forward.
|
|
368
|
+
// At the first offset the caret can sit at, Backspace is a block gesture (merge, or nothing),
|
|
369
|
+
// not a delete of the first visible character past a hidden run.
|
|
389
370
|
if (e.key === 'Backspace') {
|
|
390
|
-
const bounds = landableRawBounds(el
|
|
371
|
+
const bounds = landableRawBounds(el);
|
|
391
372
|
if (bounds && caretOffset <= bounds.start)
|
|
392
373
|
return false;
|
|
393
374
|
}
|
|
@@ -399,57 +380,57 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
399
380
|
applyEdgeDeletion(deletion, caretOffset);
|
|
400
381
|
return true;
|
|
401
382
|
}
|
|
402
|
-
// ──
|
|
403
|
-
/**
|
|
404
|
-
*
|
|
405
|
-
* `\\` plus the block's ending there, but that ending IS the block's trailing one, so the
|
|
406
|
-
* display stops at the backslash and the caret has nowhere to sit past it. The next
|
|
407
|
-
* printable key is what supplies the following line: it lands AFTER the break rather than
|
|
408
|
-
* between the backslash and its newline, where it would read as content and undo the break.
|
|
409
|
-
*/
|
|
383
|
+
// ── Hard break at the block end, pending marks ─────────────────────────────
|
|
384
|
+
/** A key typed on a hard break at the end of a block's content goes on the new line, not
|
|
385
|
+
* between the backslash and its line ending, where it would undo the break. */
|
|
410
386
|
function handleTransitionalHardBreak(e, caretOffset) {
|
|
411
387
|
if (deps.isReading())
|
|
412
388
|
return false;
|
|
413
|
-
if (!isPlainTypingKey(e) || caretOffset === null ||
|
|
389
|
+
if (!isPlainTypingKey(e) || caretOffset === null || heldRange())
|
|
414
390
|
return false;
|
|
415
391
|
const d = display();
|
|
416
|
-
|
|
417
|
-
|
|
392
|
+
const contentEnd = getContentRange(deps.node).end;
|
|
393
|
+
// A heading's closing run stays on the heading's line, so the new line starts past it.
|
|
394
|
+
const lineEnd = contentEnd + sameLineSuffix(deps.node).length;
|
|
395
|
+
const el = deps.getEl();
|
|
396
|
+
// The caret past the backslash, or where the new line is drawn (`paintPendingBreak`, past
|
|
397
|
+
// the run); a hidden run draws its whole span at that one spot.
|
|
398
|
+
const onBreak = el !== null && hiddenSuffixLength(el) > 0
|
|
399
|
+
? caretOffset >= contentEnd && caretOffset <= lineEnd
|
|
400
|
+
: caretOffset === contentEnd ||
|
|
401
|
+
(hidesMarkers(deps.reading.mode()) && caretOffset === lineEnd);
|
|
402
|
+
const text = d.slice(0, contentEnd);
|
|
403
|
+
if (!onBreak || !text.endsWith('\\'))
|
|
418
404
|
return false;
|
|
419
405
|
// An escaped backslash (`\\\\`) is content, not a break.
|
|
420
|
-
if (
|
|
406
|
+
if (text.endsWith('\\\\'))
|
|
421
407
|
return false;
|
|
422
408
|
// Backslash before ASCII punctuation is an escape (`\|`, `\*`), never a break's backslash.
|
|
423
409
|
if (/^[!-/:-@[-`{-~]$/.test(e.key))
|
|
424
410
|
return false;
|
|
425
|
-
const ending = trailingLineEnding(deps.node.raw);
|
|
411
|
+
const ending = trailingLineEnding(deps.node.raw, deps.getLineEnding());
|
|
426
412
|
e.preventDefault();
|
|
427
413
|
deps.setSnapTarget(null);
|
|
428
|
-
const
|
|
429
|
-
writeDisplay(
|
|
414
|
+
const opened = openHardBreakLine(d, lineEnd, ending, e.key);
|
|
415
|
+
writeDisplay(opened.display, opened.caret, 'transitional-hard-break', caretOffset);
|
|
430
416
|
return true;
|
|
431
417
|
}
|
|
432
|
-
/**
|
|
433
|
-
*
|
|
434
|
-
* instruction about the same bytes, so they outrank the arrival side the seat below reads
|
|
435
|
-
* (live-mode.md § 4.2) and this arm runs first.
|
|
436
|
-
*/
|
|
418
|
+
/** A printable key while a toggle at a collapsed caret has marks pending. The marks are the newer
|
|
419
|
+
* instruction, so they outrank the arrival side (`docs/design/live-mode.md` § 4.3). */
|
|
437
420
|
function handlePendingMarks(e, caretOffset) {
|
|
438
|
-
if (
|
|
439
|
-
return false;
|
|
440
|
-
if (!isPlainTypingKey(e) || caretOffset === null || hasSelectionHelper())
|
|
421
|
+
if (!isPlainTypingKey(e) || caretOffset === null || heldRange())
|
|
441
422
|
return false;
|
|
442
|
-
//
|
|
443
|
-
//
|
|
423
|
+
// Only a block that draws no delimiters holds pending marks; switching mode clears them, so
|
|
424
|
+
// nothing is stranded.
|
|
444
425
|
const el = deps.getEl();
|
|
445
426
|
if (!el || !revealsNoMarkers(el))
|
|
446
427
|
return false;
|
|
447
|
-
//
|
|
448
|
-
// and this is it whether or not the rewrite below finds anything to do.
|
|
428
|
+
// Spent on the conditions above, not on the outcome: one insertion was promised the
|
|
429
|
+
// marks, and this is it whether or not the rewrite below finds anything to do.
|
|
449
430
|
const marks = deps.pendingMarks.consume();
|
|
450
431
|
if (!marks)
|
|
451
432
|
return false;
|
|
452
|
-
const marked = resolveMarkedInsertion(display(), caretOffset, e.key, marks, inlinesOf(deps.node));
|
|
433
|
+
const marked = resolveMarkedInsertion(display(), caretOffset, e.key, marks, inlinesOf(deps.node), deps.reading);
|
|
453
434
|
if (!marked)
|
|
454
435
|
return false;
|
|
455
436
|
e.preventDefault();
|
|
@@ -458,34 +439,32 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
458
439
|
return true;
|
|
459
440
|
}
|
|
460
441
|
// ── Container marker completion ────────────────────────────────────────────
|
|
461
|
-
/**
|
|
462
|
-
*
|
|
463
|
-
* `contentStartSpace`. Consumed, not written: the container's `rebuildRaw` re-emits it the
|
|
464
|
-
* moment content arrives, so inserting it here would double the marker's own space. The
|
|
465
|
-
* claim is once per child; a later space at the same seat is content.
|
|
466
|
-
*/
|
|
442
|
+
/** A bare space at a child's content start, while its container's marker lacks its space, is
|
|
443
|
+
* consumed once: the container's `rebuildRaw` writes it back, so writing it here would double it. */
|
|
467
444
|
function handleMarkerCompletion(e, caretOffset) {
|
|
468
445
|
const bareSpace = e.key === ' ' && !e.shiftKey && !hasModifier(e);
|
|
469
|
-
if (!bareSpace || caretOffset === null ||
|
|
446
|
+
if (!bareSpace || caretOffset === null || heldRange())
|
|
470
447
|
return false;
|
|
471
|
-
|
|
448
|
+
const { node, containerParent, index } = deps;
|
|
449
|
+
if (!markerCompletion.claimSpace(node, containerParent, index, caretOffset))
|
|
472
450
|
return false;
|
|
473
451
|
e.preventDefault();
|
|
474
452
|
return true;
|
|
475
453
|
}
|
|
476
|
-
// ── Hidden construct edge (
|
|
477
|
-
/**
|
|
478
|
-
*
|
|
479
|
-
* collapsed caret upstream across a non-rendered run, so the DOM caret cannot carry the answer
|
|
480
|
-
* and the byte is written through the CST at the offset the policy and arrival name.
|
|
481
|
-
*/
|
|
454
|
+
// ── Hidden construct edge (typing) ─────────────────────────────────────────
|
|
455
|
+
/** A printable key at a hidden delimiter run is written through the CST, since Chromium moves a
|
|
456
|
+
* collapsed caret back across a run it does not render (`docs/design/live-mode.md` § 4.2). */
|
|
482
457
|
function handleConstructSeat(e, caretOffset) {
|
|
483
|
-
if (!isPlainTypingKey(e) || caretOffset === null ||
|
|
458
|
+
if (!isPlainTypingKey(e) || caretOffset === null || heldRange())
|
|
484
459
|
return false;
|
|
485
|
-
// A delimiter typed over its own
|
|
486
|
-
//
|
|
460
|
+
// A delimiter typed over its own closing one is the auto-pair's step-over, handled on
|
|
461
|
+
// beforeinput (delimiter-autopair.ts); placed outside the run it would be typed instead.
|
|
487
462
|
const content = getContentRange(deps.node);
|
|
488
|
-
const
|
|
463
|
+
const { reading, ownPairs } = deps;
|
|
464
|
+
const text = display();
|
|
465
|
+
const autoPair = resolveDelimiterAutoPair(text, content, caretOffset, e.key, reading, {
|
|
466
|
+
ownPair: ownPairs.consult(text, caretOffset)
|
|
467
|
+
});
|
|
489
468
|
if (autoPair?.kind === 'step-over')
|
|
490
469
|
return false;
|
|
491
470
|
const el = deps.getEl();
|
|
@@ -494,11 +473,16 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
494
473
|
return false;
|
|
495
474
|
e.preventDefault();
|
|
496
475
|
deps.setSnapTarget(null);
|
|
497
|
-
// The
|
|
498
|
-
//
|
|
499
|
-
|
|
500
|
-
const paired = resolveDelimiterAutoPair(
|
|
476
|
+
// The hidden-run rules decide where the byte lands; the auto-pair still decides what a delimiter
|
|
477
|
+
// writes there, or it would arrive without its closing partner.
|
|
478
|
+
const store = deps.storedAs();
|
|
479
|
+
const paired = resolveDelimiterAutoPair(text, content, seat.offset, e.key, reading, {
|
|
480
|
+
ownPair: ownPairs.consult(text, seat.offset),
|
|
481
|
+
// Each auto-pair caller asks this itself until the caret-edge key table gives it one caller.
|
|
482
|
+
keepsKind: (line) => keepsKindAt(deps.node, line, store)
|
|
483
|
+
});
|
|
501
484
|
if (paired && paired.kind !== 'step-over') {
|
|
485
|
+
noteOwnPair(ownPairs, text, paired);
|
|
502
486
|
writeDisplay(paired.text, paired.caret, `seat:${seat.kind}`, caretOffset);
|
|
503
487
|
if (paired.kind === 'close')
|
|
504
488
|
deps.noteOutside?.();
|