@voithos-labs/aragonite 0.10.4 → 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 +11 -5
- package/dist/a11y-strings.js +60 -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 +12 -21
- 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 +603 -1126
- package/dist/components/Editor.svelte.d.ts +9 -20
- package/dist/components/GapCaret.svelte +26 -59
- package/dist/components/SelectionOverlay.svelte +26 -51
- package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
- 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 +72 -87
- 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 +29 -34
- 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 +57 -39
- 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 +141 -203
- 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 +45 -90
- package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -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 +8 -6
- package/dist/components/blocks/text/click-snap-guard.js +10 -7
- 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 +150 -181
- 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 -108
- 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 +212 -199
- 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 +12 -35
- package/dist/components/drag-handle.js +22 -68
- 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 -24
- package/dist/components/editor-root-listeners.js +49 -24
- 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 +14 -26
- 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 +30 -35
- package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
- 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 +54 -75
- package/dist/core/inline/inline-widgets.js +54 -62
- 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 +31 -15
- 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 -6
- package/dist/cursor/height-oracle.js +26 -74
- 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 +14 -15
- package/dist/cursor/scrollport.js +7 -13
- 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 -14
- package/dist/cursor/visual-lines.js +45 -46
- package/dist/cursor/widget-edge-snap.d.ts +10 -15
- package/dist/cursor/widget-edge-snap.js +13 -12
- package/dist/cursor/widget-offset.d.ts +110 -104
- package/dist/cursor/widget-offset.js +344 -179
- 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 +30 -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 +28 -50
- package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
- package/dist/editor-actions/focus/focus-landing.js +15 -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 +54 -82
- package/dist/editor-actions/plugin/container.js +105 -188
- 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 +88 -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 +37 -8
- package/dist/plugin.js +100 -77
- 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 +78 -67
- 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 -81
- 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 +51 -45
- 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 +15 -6
- 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 +141 -310
- 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 +78 -84
- package/dist/schema/commands.js +152 -117
- 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 +8 -10
- 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 +63 -80
- 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 +92 -125
- 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 +59 -96
- 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 +51 -134
- package/dist/selection/dead-space-caret.d.ts +19 -30
- package/dist/selection/dead-space-caret.js +70 -88
- package/dist/selection/drag-pointer.d.ts +7 -9
- package/dist/selection/drag-pointer.js +23 -33
- 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 -40
- package/dist/selection/keyboard-extend.js +94 -117
- package/dist/selection/multi-click.d.ts +13 -18
- package/dist/selection/multi-click.js +32 -38
- package/dist/selection/native-bridge.d.ts +29 -39
- package/dist/selection/native-bridge.js +78 -127
- package/dist/selection/nearest-block.d.ts +17 -12
- package/dist/selection/nearest-block.js +37 -18
- package/dist/selection/path-lookup.d.ts +25 -16
- package/dist/selection/path-lookup.js +101 -18
- package/dist/selection/path-math.d.ts +9 -11
- package/dist/selection/path-math.js +5 -7
- package/dist/selection/pointer-gesture.d.ts +5 -5
- package/dist/selection/pointer-gesture.js +5 -5
- package/dist/selection/pointer-session.d.ts +10 -16
- package/dist/selection/pointer-session.js +6 -7
- package/dist/selection/primitives.d.ts +64 -40
- package/dist/selection/primitives.js +57 -67
- 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 -23
- 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 +34 -16
- package/dist/selection/selection-drop.js +159 -95
- 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 +60 -53
- package/dist/styles/editor.css +201 -143
- 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 +9 -7
- package/dist/tree-operations/paste/replacement-parse.js +12 -10
- 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 +327 -205
- package/docs/guide/directives.md +7 -7
- package/docs/guide/plugin-api.md +253 -185
- package/docs/guide/plugin-guide.md +332 -235
- package/docs/guide/plugin-testing.md +96 -82
- package/package.json +12 -16
- 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/cursor/scroll-hold.d.ts +0 -10
- package/dist/cursor/scroll-hold.js +0 -22
- package/dist/invariants/split-landing.d.ts +0 -8
- package/dist/invariants/split-landing.js +0 -15
- 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 -31
- package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
|
@@ -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,38 +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
|
-
/** The range
|
|
116
|
-
*
|
|
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. */
|
|
117
112
|
function heldRange() {
|
|
118
|
-
|
|
119
|
-
return selection && selection.start < selection.end ? selection : null;
|
|
120
|
-
}
|
|
121
|
-
// ── The seams the arms below defer to ────────────────────────────────────
|
|
122
|
-
/**
|
|
123
|
-
* The rung a range rewrite can be asked about. Past the reading cut a surface revealing no
|
|
124
|
-
* marker is live, the one mode whose seam has unpainted runs to clean; every other rung takes
|
|
125
|
-
* the literal edit the engine would have written.
|
|
126
|
-
*/
|
|
127
|
-
function joinSeamMode(el) {
|
|
128
|
-
return revealsNoMarkers(el) ? 'live' : undefined;
|
|
113
|
+
return deps.getRawSelection();
|
|
129
114
|
}
|
|
115
|
+
// ── The shared helpers the branches below use ────────────────────────────
|
|
130
116
|
/** What the construct-edge rule (live-mode.md § 4.4) does with a destructive key here, or null
|
|
131
|
-
* where the
|
|
117
|
+
* where the block draws its markers and the byte beside the caret is one the user can see. */
|
|
132
118
|
function edgeDeletionAt(el, caret, direction) {
|
|
133
119
|
if (!revealsNoMarkers(el))
|
|
134
120
|
return null;
|
|
@@ -139,32 +125,36 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
139
125
|
direction,
|
|
140
126
|
screen: screenVisibilityOf(el),
|
|
141
127
|
inlines: inlinesOf(deps.node),
|
|
142
|
-
|
|
128
|
+
store: deps.storedAs()
|
|
143
129
|
});
|
|
144
130
|
}
|
|
145
|
-
/** A
|
|
131
|
+
/** A keypress with no safe rewrite writes nothing: the browser's version would show the
|
|
146
132
|
* delimiters the rule was hiding. */
|
|
147
133
|
function applyEdgeDeletion(deletion, caretBefore) {
|
|
148
134
|
if ('swallow' in deletion)
|
|
149
135
|
return;
|
|
150
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);
|
|
151
141
|
}
|
|
152
|
-
/** 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
|
|
153
143
|
* (live-mode.md § 4.2), or null when no run is touched and the caret's own offset stands. */
|
|
154
144
|
function typingSeatAt(el, caret, typed) {
|
|
155
145
|
if (!revealsNoMarkers(el))
|
|
156
146
|
return null;
|
|
157
|
-
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);
|
|
158
148
|
}
|
|
159
|
-
/** A printable byte
|
|
160
|
-
*
|
|
161
|
-
* the seat answers which side of an unpainted run it lands on. */
|
|
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. */
|
|
162
151
|
function writeTypedByte(el, caretOffset, typed, source) {
|
|
163
152
|
const range = heldRange();
|
|
164
|
-
if (range) {
|
|
165
|
-
const edit =
|
|
166
|
-
|
|
167
|
-
|
|
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);
|
|
168
158
|
return;
|
|
169
159
|
}
|
|
170
160
|
const seatedAt = typingSeatAt(el, caretOffset, typed)?.offset ?? caretOffset;
|
|
@@ -180,36 +170,35 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
180
170
|
// Forward keys enter the widget after the caret, backward keys the one before, so
|
|
181
171
|
// a caret between two adjacent widgets enters the one the key is aimed at.
|
|
182
172
|
const direction = e.key === 'ArrowRight' || e.key === 'Delete' ? 'forward' : 'backward';
|
|
183
|
-
const
|
|
173
|
+
const { grammar } = deps.reading;
|
|
174
|
+
const widgetAt = widgetAtCursor(caretOffset, inlinesOf(node), node.raw, direction, grammar);
|
|
184
175
|
if (!widgetAt)
|
|
185
176
|
return false;
|
|
186
|
-
//
|
|
177
|
+
// Past the early return: every keystroke in every prose block reaches the line above, so
|
|
178
|
+
// the work below stays off that path.
|
|
187
179
|
const range = heldRange();
|
|
188
|
-
//
|
|
189
|
-
// a
|
|
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.
|
|
190
182
|
const plainEdgeKey = !e.shiftKey && !hasModifier(e) && !range;
|
|
191
183
|
const enterFromRight = plainEdgeKey && widgetAt.atRight && (e.key === 'ArrowLeft' || e.key === 'Backspace');
|
|
192
184
|
const enterFromLeft = plainEdgeKey && !widgetAt.atRight && (e.key === 'ArrowRight' || e.key === 'Delete');
|
|
193
185
|
if (enterFromRight || enterFromLeft) {
|
|
194
186
|
const isDestructive = e.key === 'Backspace' || e.key === 'Delete';
|
|
195
|
-
const policy = deps.widgetEdgePolicy?.(widgetAt) ?? getInlineWidgetEditing(widgetAt.kind);
|
|
196
|
-
// A step-over widget reads as one character to navigation, so
|
|
197
|
-
//
|
|
198
|
-
// 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.
|
|
199
190
|
if (!isDestructive && policy?.onEdge === 'step-over')
|
|
200
191
|
return false;
|
|
201
192
|
e.preventDefault();
|
|
202
193
|
deps.setSnapTarget(null);
|
|
203
194
|
if (isDestructive && policy?.deleteGranularity === 'atomic' && !deps.isReading()) {
|
|
204
|
-
// One
|
|
205
|
-
// Ctrl+Z lands there.
|
|
206
|
-
|
|
207
|
-
void deps.blockEdit.updateBlockContent(deps.index, newRaw, caretOffset, widgetAt.start);
|
|
208
|
-
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);
|
|
209
198
|
return true;
|
|
210
199
|
}
|
|
211
|
-
// `onEdge: 'select'`, plus the
|
|
212
|
-
//
|
|
200
|
+
// `onEdge: 'select'`, plus the kinds `enterWidget` sends to their source instead of
|
|
201
|
+
// selecting.
|
|
213
202
|
deps.enterWidget(widgetAt, enterFromRight);
|
|
214
203
|
return true;
|
|
215
204
|
}
|
|
@@ -227,7 +216,7 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
227
216
|
}
|
|
228
217
|
return false;
|
|
229
218
|
}
|
|
230
|
-
// ── Decoration
|
|
219
|
+
// ── Decoration widgets ───────────────────────────────────────────────────
|
|
231
220
|
function islandsInDom(el) {
|
|
232
221
|
recordIslandKeyScan();
|
|
233
222
|
const out = [];
|
|
@@ -252,12 +241,12 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
252
241
|
sel.addRange(range);
|
|
253
242
|
}
|
|
254
243
|
function handleIsland(e, caretOffset) {
|
|
255
|
-
// Modifier chords stay
|
|
244
|
+
// Modifier chords stay with the browser; these rules take only the plain edge keys.
|
|
256
245
|
const isDestructive = !hasModifier(e) && (e.key === 'Backspace' || e.key === 'Delete');
|
|
257
246
|
const isTyping = isPlainTypingKey(e);
|
|
258
247
|
if (!isDestructive && !isTyping)
|
|
259
248
|
return false;
|
|
260
|
-
//
|
|
249
|
+
// Blocks with no decoration widgets, the common case, skip the per-keystroke DOM scan.
|
|
261
250
|
if (!deps.hasIslands())
|
|
262
251
|
return false;
|
|
263
252
|
const el = deps.getEl();
|
|
@@ -266,7 +255,7 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
266
255
|
const islands = islandsInDom(el);
|
|
267
256
|
if (islands.length === 0)
|
|
268
257
|
return false;
|
|
269
|
-
// Second
|
|
258
|
+
// Second keypress: the browser selection already wraps a replace widget, so delete its
|
|
270
259
|
// whole hidden range through the CST as one undo entry.
|
|
271
260
|
if (isDestructive) {
|
|
272
261
|
const selection = heldRange();
|
|
@@ -279,15 +268,15 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
279
268
|
editDisplay(selected.start, selected.end, '');
|
|
280
269
|
return true;
|
|
281
270
|
}
|
|
282
|
-
// A different non-empty selection
|
|
271
|
+
// A different non-empty selection: leave it to the normal delete paths.
|
|
283
272
|
return false;
|
|
284
273
|
}
|
|
285
274
|
}
|
|
286
275
|
if (caretOffset === null)
|
|
287
276
|
return false;
|
|
288
277
|
const contentLength = display().length;
|
|
289
|
-
// First
|
|
290
|
-
// 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.
|
|
291
280
|
if (isDestructive) {
|
|
292
281
|
const wantTrailingEdge = e.key === 'Backspace';
|
|
293
282
|
const target = islands.find((i) => islandPolicy(i).onEdge === 'select' &&
|
|
@@ -298,8 +287,8 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
298
287
|
return true;
|
|
299
288
|
}
|
|
300
289
|
}
|
|
301
|
-
// A step-over
|
|
302
|
-
// 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.
|
|
303
292
|
const widget = islands.find((i) => islandPolicy(i).onEdge === 'step-over' && i.start === caretOffset);
|
|
304
293
|
if (!widget)
|
|
305
294
|
return false;
|
|
@@ -310,9 +299,8 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
310
299
|
: null;
|
|
311
300
|
if (direction !== null) {
|
|
312
301
|
e.preventDefault();
|
|
313
|
-
//
|
|
314
|
-
//
|
|
315
|
-
// 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.
|
|
316
304
|
const deletion = edgeDeletionAt(el, caretOffset, direction);
|
|
317
305
|
if (deletion)
|
|
318
306
|
applyEdgeDeletion(deletion, caretOffset);
|
|
@@ -322,9 +310,8 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
322
310
|
editDisplay(caretOffset, caretOffset + 1, '');
|
|
323
311
|
return true;
|
|
324
312
|
}
|
|
325
|
-
//
|
|
326
|
-
//
|
|
327
|
-
// 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.
|
|
328
315
|
if (isTyping && !caretIsInTextContent(el, window.getSelection())) {
|
|
329
316
|
e.preventDefault();
|
|
330
317
|
writeTypedByte(el, caretOffset, e.key, 'island');
|
|
@@ -332,18 +319,19 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
332
319
|
}
|
|
333
320
|
return false;
|
|
334
321
|
}
|
|
335
|
-
// ──
|
|
336
|
-
// A selection reaching into the contenteditable="false"
|
|
337
|
-
// 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.
|
|
338
325
|
function handleAmbient(e) {
|
|
339
326
|
if (e.key !== 'Backspace' && e.key !== 'Delete')
|
|
340
327
|
return false;
|
|
341
|
-
|
|
328
|
+
const range = heldRange();
|
|
329
|
+
if (!range)
|
|
342
330
|
return false;
|
|
343
331
|
const el = deps.getEl();
|
|
344
|
-
if (!el
|
|
332
|
+
if (!el)
|
|
345
333
|
return false;
|
|
346
|
-
const ambient =
|
|
334
|
+
const ambient = markerPrefixOf(el);
|
|
347
335
|
const sel = window.getSelection();
|
|
348
336
|
const touchesAmbient = !!ambient &&
|
|
349
337
|
!!sel &&
|
|
@@ -352,57 +340,35 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
352
340
|
if (!touchesAmbient)
|
|
353
341
|
return false;
|
|
354
342
|
e.preventDefault();
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
//
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
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');
|
|
362
352
|
}
|
|
363
353
|
return true;
|
|
364
354
|
}
|
|
365
|
-
// ── Hidden
|
|
366
|
-
/**
|
|
367
|
-
*
|
|
368
|
-
* would reach concatenates past that suffix, so the press is consumed. The rule itself lives in
|
|
369
|
-
* `hidden-suffix.ts`; the command arm asks the same question from its own coordinates.
|
|
370
|
-
*/
|
|
371
|
-
function handleHiddenSuffixDelete(e, caretOffset) {
|
|
372
|
-
if (e.key !== 'Delete')
|
|
373
|
-
return false;
|
|
374
|
-
if (e.shiftKey || hasModifier(e))
|
|
375
|
-
return false;
|
|
376
|
-
if (caretOffset === null || hasSelectionHelper())
|
|
377
|
-
return false;
|
|
378
|
-
if (caretOffset !== getContentRange(deps.node).end)
|
|
379
|
-
return false;
|
|
380
|
-
if (!hidesStructuralSuffix(deps.getEl(), deps.node, display().length))
|
|
381
|
-
return false;
|
|
382
|
-
e.preventDefault();
|
|
383
|
-
return true;
|
|
384
|
-
}
|
|
385
|
-
// ── Hidden construct edge (the destructive arm) ────────────────────────────
|
|
386
|
-
/**
|
|
387
|
-
* A plain Backspace/Delete against an inline construct's unpainted delimiter run: the rewrite
|
|
388
|
-
* takes the adjacent CONTENT character instead of a byte the reader never saw, plus the
|
|
389
|
-
* delimiters that leaves enclosing nothing (live-mode.md § 4.4).
|
|
390
|
-
*/
|
|
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). */
|
|
391
358
|
function handleConstructEdgeDelete(e, caretOffset) {
|
|
392
359
|
if (e.key !== 'Backspace' && e.key !== 'Delete')
|
|
393
360
|
return false;
|
|
394
361
|
if (e.shiftKey || hasModifier(e))
|
|
395
362
|
return false;
|
|
396
|
-
if (caretOffset === null ||
|
|
363
|
+
if (caretOffset === null || heldRange())
|
|
397
364
|
return false;
|
|
398
365
|
const el = deps.getEl();
|
|
399
366
|
if (!el)
|
|
400
367
|
return false;
|
|
401
|
-
//
|
|
402
|
-
//
|
|
403
|
-
// 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.
|
|
404
370
|
if (e.key === 'Backspace') {
|
|
405
|
-
const bounds = landableRawBounds(el
|
|
371
|
+
const bounds = landableRawBounds(el);
|
|
406
372
|
if (bounds && caretOffset <= bounds.start)
|
|
407
373
|
return false;
|
|
408
374
|
}
|
|
@@ -414,57 +380,57 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
414
380
|
applyEdgeDeletion(deletion, caretOffset);
|
|
415
381
|
return true;
|
|
416
382
|
}
|
|
417
|
-
// ──
|
|
418
|
-
/**
|
|
419
|
-
*
|
|
420
|
-
* `\\` plus the block's ending there, but that ending IS the block's trailing one, so the
|
|
421
|
-
* display stops at the backslash and the caret has nowhere to sit past it. The next
|
|
422
|
-
* printable key is what supplies the following line: it lands AFTER the break rather than
|
|
423
|
-
* between the backslash and its newline, where it would read as content and undo the break.
|
|
424
|
-
*/
|
|
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. */
|
|
425
386
|
function handleTransitionalHardBreak(e, caretOffset) {
|
|
426
387
|
if (deps.isReading())
|
|
427
388
|
return false;
|
|
428
|
-
if (!isPlainTypingKey(e) || caretOffset === null ||
|
|
389
|
+
if (!isPlainTypingKey(e) || caretOffset === null || heldRange())
|
|
429
390
|
return false;
|
|
430
391
|
const d = display();
|
|
431
|
-
|
|
432
|
-
|
|
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('\\'))
|
|
433
404
|
return false;
|
|
434
405
|
// An escaped backslash (`\\\\`) is content, not a break.
|
|
435
|
-
if (
|
|
406
|
+
if (text.endsWith('\\\\'))
|
|
436
407
|
return false;
|
|
437
408
|
// Backslash before ASCII punctuation is an escape (`\|`, `\*`), never a break's backslash.
|
|
438
409
|
if (/^[!-/:-@[-`{-~]$/.test(e.key))
|
|
439
410
|
return false;
|
|
440
|
-
const ending = trailingLineEnding(deps.node.raw);
|
|
411
|
+
const ending = trailingLineEnding(deps.node.raw, deps.getLineEnding());
|
|
441
412
|
e.preventDefault();
|
|
442
413
|
deps.setSnapTarget(null);
|
|
443
|
-
const
|
|
444
|
-
writeDisplay(
|
|
414
|
+
const opened = openHardBreakLine(d, lineEnd, ending, e.key);
|
|
415
|
+
writeDisplay(opened.display, opened.caret, 'transitional-hard-break', caretOffset);
|
|
445
416
|
return true;
|
|
446
417
|
}
|
|
447
|
-
/**
|
|
448
|
-
*
|
|
449
|
-
* instruction about the same bytes, so they outrank the arrival side the seat below reads
|
|
450
|
-
* (live-mode.md § 4.2) and this arm runs first.
|
|
451
|
-
*/
|
|
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). */
|
|
452
420
|
function handlePendingMarks(e, caretOffset) {
|
|
453
|
-
if (
|
|
454
|
-
return false;
|
|
455
|
-
if (!isPlainTypingKey(e) || caretOffset === null || hasSelectionHelper())
|
|
421
|
+
if (!isPlainTypingKey(e) || caretOffset === null || heldRange())
|
|
456
422
|
return false;
|
|
457
|
-
//
|
|
458
|
-
//
|
|
423
|
+
// Only a block that draws no delimiters holds pending marks; switching mode clears them, so
|
|
424
|
+
// nothing is stranded.
|
|
459
425
|
const el = deps.getEl();
|
|
460
426
|
if (!el || !revealsNoMarkers(el))
|
|
461
427
|
return false;
|
|
462
|
-
//
|
|
463
|
-
// 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.
|
|
464
430
|
const marks = deps.pendingMarks.consume();
|
|
465
431
|
if (!marks)
|
|
466
432
|
return false;
|
|
467
|
-
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);
|
|
468
434
|
if (!marked)
|
|
469
435
|
return false;
|
|
470
436
|
e.preventDefault();
|
|
@@ -473,34 +439,32 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
473
439
|
return true;
|
|
474
440
|
}
|
|
475
441
|
// ── Container marker completion ────────────────────────────────────────────
|
|
476
|
-
/**
|
|
477
|
-
*
|
|
478
|
-
* `contentStartSpace`. Consumed, not written: the container's `rebuildRaw` re-emits it the
|
|
479
|
-
* moment content arrives, so inserting it here would double the marker's own space. The
|
|
480
|
-
* claim is once per child; a later space at the same seat is content.
|
|
481
|
-
*/
|
|
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. */
|
|
482
444
|
function handleMarkerCompletion(e, caretOffset) {
|
|
483
445
|
const bareSpace = e.key === ' ' && !e.shiftKey && !hasModifier(e);
|
|
484
|
-
if (!bareSpace || caretOffset === null ||
|
|
446
|
+
if (!bareSpace || caretOffset === null || heldRange())
|
|
485
447
|
return false;
|
|
486
|
-
|
|
448
|
+
const { node, containerParent, index } = deps;
|
|
449
|
+
if (!markerCompletion.claimSpace(node, containerParent, index, caretOffset))
|
|
487
450
|
return false;
|
|
488
451
|
e.preventDefault();
|
|
489
452
|
return true;
|
|
490
453
|
}
|
|
491
|
-
// ── Hidden construct edge (
|
|
492
|
-
/**
|
|
493
|
-
*
|
|
494
|
-
* collapsed caret upstream across a non-rendered run, so the DOM caret cannot carry the answer
|
|
495
|
-
* and the byte is written through the CST at the offset the policy and arrival name.
|
|
496
|
-
*/
|
|
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). */
|
|
497
457
|
function handleConstructSeat(e, caretOffset) {
|
|
498
|
-
if (!isPlainTypingKey(e) || caretOffset === null ||
|
|
458
|
+
if (!isPlainTypingKey(e) || caretOffset === null || heldRange())
|
|
499
459
|
return false;
|
|
500
|
-
// A delimiter typed over its own
|
|
501
|
-
//
|
|
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.
|
|
502
462
|
const content = getContentRange(deps.node);
|
|
503
|
-
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
|
+
});
|
|
504
468
|
if (autoPair?.kind === 'step-over')
|
|
505
469
|
return false;
|
|
506
470
|
const el = deps.getEl();
|
|
@@ -509,11 +473,16 @@ export function createEdgePolicyDispatch(deps) {
|
|
|
509
473
|
return false;
|
|
510
474
|
e.preventDefault();
|
|
511
475
|
deps.setSnapTarget(null);
|
|
512
|
-
// The
|
|
513
|
-
//
|
|
514
|
-
|
|
515
|
-
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
|
+
});
|
|
516
484
|
if (paired && paired.kind !== 'step-over') {
|
|
485
|
+
noteOwnPair(ownPairs, text, paired);
|
|
517
486
|
writeDisplay(paired.text, paired.caret, `seat:${seat.kind}`, caretOffset);
|
|
518
487
|
if (paired.kind === 'close')
|
|
519
488
|
deps.noteOutside?.();
|