@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,35 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The live-mode join rewrite (live-mode.md § 4.5):
|
|
3
|
-
* truncation left unpaired and the closer/opener pair a split's inverse
|
|
4
|
-
* are dropped here and nowhere else, and only once the joined
|
|
5
|
-
*
|
|
2
|
+
* The live-mode join rewrite (live-mode.md § 4.5): joining two blocks literally would show the
|
|
3
|
+
* delimiter runs a truncation left unpaired, and the closer/opener pair a split's inverse pushes
|
|
4
|
+
* together around nothing. Both are dropped here and nowhere else, and only once the joined bytes,
|
|
5
|
+
* read back where they will be stored, show what the two sides showed.
|
|
6
6
|
*/
|
|
7
|
-
import { constructContentRange, getContentRange, inlineDescendants, isProseKind,
|
|
7
|
+
import { constructContentRange, getContentRange, inlineDescendants, isProseKind, readInline } from '../../../core/inline';
|
|
8
8
|
import { CONTENT_VISIBILITY, paintsOnlyChrome, renderedText } from '../../../core/inline/visibility';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { readBack, readSource, shownOf } from '../../../core/inline/live-edit/read-back';
|
|
10
|
+
import { isBlankText, trimTrailingLineEnding } from '../../../core/lines';
|
|
11
11
|
import { getInlineConstructPolicy } from '../../../schema/inline-construct-policy';
|
|
12
|
-
import { soleProseReparse } from './screen-diff';
|
|
13
12
|
// ── The rewrite ──────────────────────────────────────────────────────────────
|
|
14
13
|
export const cleanLiveJoinSeam = (join) => {
|
|
15
|
-
const
|
|
16
|
-
const left = readSide(join.start, 'before',
|
|
17
|
-
const right = readSide(join.end, 'after',
|
|
14
|
+
const { typed, store } = join;
|
|
15
|
+
const left = readSide(join.start, 'before', store.reading);
|
|
16
|
+
const right = readSide(join.end, 'after', store.reading);
|
|
18
17
|
if (left === null || right === null)
|
|
19
18
|
return null;
|
|
20
|
-
// Nothing
|
|
21
|
-
// Backspace between two
|
|
19
|
+
// Nothing sits at the join, so the plain concatenation is already the answer, and an ordinary
|
|
20
|
+
// Backspace between two paragraphs pays for no parse.
|
|
22
21
|
if (!standsOnSeam(left) && !standsOnSeam(right))
|
|
23
22
|
return null;
|
|
24
23
|
if (!anchorsOnMerged(join, left, right))
|
|
25
24
|
return null;
|
|
26
|
-
// The caller splices `typed` at the
|
|
25
|
+
// The caller splices `typed` at the join once this returns, so the bytes checked below are the
|
|
27
26
|
// bytes written: a typed run changes the flanking a kept delimiter pairs against.
|
|
28
|
-
const typed = join.typed ?? '';
|
|
29
27
|
const shown = shownAfterJoin(left, right, typed);
|
|
30
28
|
const pairs = abuttingPairSpans(join, left, right);
|
|
31
|
-
//
|
|
32
|
-
//
|
|
29
|
+
// Two readings, least destructive first: keep the runs the two sides can still pair across the
|
|
30
|
+
// join, else drop every stranded one.
|
|
33
31
|
const readings = [unpairedSpans(join, left, right), everyDanglingSpan(join, left, right)];
|
|
34
32
|
const spanSets = readings.map((dangling) => [...dangling, ...pairs]);
|
|
35
33
|
const candidates = (sameSpans(spanSets[0], spanSets[1]) ? [spanSets[0]] : spanSets).map((spans) => {
|
|
@@ -39,61 +37,58 @@ export const cleanLiveJoinSeam = (join) => {
|
|
|
39
37
|
spans,
|
|
40
38
|
raw,
|
|
41
39
|
seam,
|
|
42
|
-
read: readCandidate(raw.slice(0, seam) + typed + raw.slice(seam),
|
|
40
|
+
read: readCandidate(raw.slice(0, seam) + typed + raw.slice(seam), store)
|
|
43
41
|
};
|
|
44
42
|
});
|
|
45
|
-
//
|
|
46
|
-
//
|
|
43
|
+
// A pair left over nothing also passes the screen check, so among the readings that pass, the
|
|
44
|
+
// one leaving the fewest such pairs wins (`docs/design/live-mode.md` § 4.1).
|
|
47
45
|
const floor = Math.min(...candidates.map(({ read }) => read?.residue ?? Infinity));
|
|
48
46
|
for (const { raw: candidate, seam, read } of candidates) {
|
|
49
47
|
if (read === null || read.visible !== shown || read.residue > floor)
|
|
50
48
|
continue;
|
|
51
|
-
// A candidate that changed nothing
|
|
52
|
-
// caller off a rewrite path it does not need.
|
|
49
|
+
// A candidate that changed nothing is the plain concatenation: refusing says so, and keeps
|
|
50
|
+
// the caller off a rewrite path it does not need.
|
|
53
51
|
if (candidate === join.mergedRaw)
|
|
54
52
|
return null;
|
|
55
|
-
// The split half's
|
|
56
|
-
// nothing and
|
|
53
|
+
// The split half's trailing-whitespace rule, applied to the join: a survivor that is only
|
|
54
|
+
// whitespace draws nothing and reparses as a blank line, not the block that was written.
|
|
57
55
|
const display = trimTrailingLineEnding(candidate);
|
|
58
|
-
if (display !== '' && display
|
|
56
|
+
if (display !== '' && isBlankText(display)) {
|
|
59
57
|
return { raw: candidate.slice(display.length), seam: 0 };
|
|
60
58
|
}
|
|
61
59
|
return { raw: candidate, seam };
|
|
62
60
|
}
|
|
63
61
|
return null;
|
|
64
62
|
};
|
|
65
|
-
/** Every byte a reading drops
|
|
63
|
+
/** Every byte a reading drops before the join moves the caret with it. */
|
|
66
64
|
const droppedBefore = (spans, seam) => spans
|
|
67
65
|
.filter((span) => span.end <= seam)
|
|
68
66
|
.reduce((total, span) => total + span.end - span.start, 0);
|
|
69
67
|
const standsOnSeam = (side) => side.dangling.length > 0 || side.touching.length > 0;
|
|
70
68
|
const sameSpans = (a, b) => a.length === b.length && a.every((span, i) => span.start === b[i].start && span.end === b[i].end);
|
|
71
|
-
/**
|
|
72
|
-
*
|
|
73
|
-
|
|
74
|
-
* through a family that declares no close-and-reopen, whose bytes mean nothing apart.
|
|
75
|
-
*/
|
|
76
|
-
function readSide(endpoint, keep, resolver) {
|
|
69
|
+
/** One endpoint's surviving bytes and the constructs its cut leaves at the join. Null for a
|
|
70
|
+
* non-prose kind, an offset outside the content, or a cut through a family that cannot reopen. */
|
|
71
|
+
function readSide(endpoint, keep, reading) {
|
|
77
72
|
const { node, offset } = endpoint;
|
|
78
73
|
if (!isProseKind(node.kind))
|
|
79
74
|
return null;
|
|
80
75
|
const content = getContentRange(node);
|
|
81
76
|
if (offset < content.start || offset > content.end)
|
|
82
77
|
return null;
|
|
83
|
-
const inlines =
|
|
84
|
-
//
|
|
85
|
-
// cut is bytes the
|
|
86
|
-
if (paintsOnlyChrome(inlines, node.raw))
|
|
78
|
+
const inlines = readInline(node.raw, content.start, content.end, reading.resolver, reading.grammar);
|
|
79
|
+
// Markers standing over nothing are all on screen (live-mode.md § 4.1), so a run that survives
|
|
80
|
+
// this cut is bytes the user saw, not a stranded one: the plain concatenation stands.
|
|
81
|
+
if (paintsOnlyChrome(inlines, node.raw, { grammar: reading.grammar }))
|
|
87
82
|
return null;
|
|
88
83
|
const { ranged, atomic } = classifyConstructs(inlines);
|
|
89
84
|
// Neither an atomic construct's interior nor the middle of a delimiter run leaves halves any
|
|
90
|
-
// reading
|
|
85
|
+
// reading can repair. A live-mode caret cannot land there; a plugin's can.
|
|
91
86
|
if (atomic.some((span) => offset > span.start && offset < span.end))
|
|
92
87
|
return null;
|
|
93
88
|
if (ranged.some((c) => splitsARun(c, offset)))
|
|
94
89
|
return null;
|
|
95
|
-
//
|
|
96
|
-
// construct's content start leaves its opener behind
|
|
90
|
+
// What matters is whether the partner delimiter survives, not whether the cut lies inside the
|
|
91
|
+
// content range: a cut at a construct's content start leaves its opener behind too.
|
|
97
92
|
const dangling = ranged.filter((c) => keep === 'before'
|
|
98
93
|
? c.content.start <= offset && offset < c.node.end
|
|
99
94
|
: c.node.start < offset && offset <= c.content.end);
|
|
@@ -101,6 +96,7 @@ function readSide(endpoint, keep, resolver) {
|
|
|
101
96
|
return null;
|
|
102
97
|
return {
|
|
103
98
|
raw: node.raw,
|
|
99
|
+
grammar: reading.grammar,
|
|
104
100
|
content,
|
|
105
101
|
cut: offset,
|
|
106
102
|
inlines,
|
|
@@ -108,11 +104,11 @@ function readSide(endpoint, keep, resolver) {
|
|
|
108
104
|
touching: touchingChain(ranged, offset, keep)
|
|
109
105
|
};
|
|
110
106
|
}
|
|
111
|
-
/** Text is content, not a construct, and nothing under it is one either
|
|
112
|
-
*
|
|
107
|
+
/** Text is content, not a construct, and nothing under it is one either. The two scans below
|
|
108
|
+
* share this test when they descend. */
|
|
113
109
|
const isConstruct = (node) => node.kind !== 'text';
|
|
114
|
-
/** Constructs with a content range (outermost first) apart from those without one, whose
|
|
115
|
-
* the
|
|
110
|
+
/** Constructs with a content range (outermost first), kept apart from those without one, whose
|
|
111
|
+
* bytes the join can only step around. */
|
|
116
112
|
function classifyConstructs(inlines) {
|
|
117
113
|
const ranged = [];
|
|
118
114
|
const atomic = [];
|
|
@@ -129,15 +125,12 @@ function classifyConstructs(inlines) {
|
|
|
129
125
|
return { ranged, atomic };
|
|
130
126
|
}
|
|
131
127
|
const splitsARun = (c, at) => (at > c.node.start && at < c.content.start) || (at > c.content.end && at < c.node.end);
|
|
132
|
-
/** Whether the family
|
|
128
|
+
/** Whether the family can be cut and rejoined (`docs/design/live-mode.md` § 4.4). */
|
|
133
129
|
function isRejoinable(kind) {
|
|
134
130
|
return getInlineConstructPolicy(kind)?.splitBehavior === 'close-and-reopen';
|
|
135
131
|
}
|
|
136
|
-
/**
|
|
137
|
-
*
|
|
138
|
-
* first: `**a *b***` cut at its end gives the strong, then the emphasis its closer wraps. This is
|
|
139
|
-
* the shape `live-split-rebalance` writes, read back.
|
|
140
|
-
*/
|
|
132
|
+
/** The nested chain of closers ending at `cut` (or openers starting there), outermost first:
|
|
133
|
+
* `**a *b***` cut at its end gives the strong emphasis, then the emphasis. */
|
|
141
134
|
function touchingChain(constructs, cut, keep) {
|
|
142
135
|
const chain = [];
|
|
143
136
|
let at = cut;
|
|
@@ -149,30 +142,27 @@ function touchingChain(constructs, cut, keep) {
|
|
|
149
142
|
at = keep === 'before' ? link.content.end : link.content.start;
|
|
150
143
|
}
|
|
151
144
|
}
|
|
152
|
-
/** Whether the merged bytes are still the two sides' bytes end to end
|
|
153
|
-
*
|
|
145
|
+
/** Whether the merged bytes are still the two sides' bytes end to end. Anything that rewrote
|
|
146
|
+
* either side moves every offset below, so the cleanup does nothing instead. */
|
|
154
147
|
function anchorsOnMerged(join, left, right) {
|
|
155
148
|
return (join.mergedRaw.slice(0, join.seam) === left.raw.slice(0, left.cut) &&
|
|
156
149
|
join.mergedRaw.startsWith(right.raw.slice(right.cut, right.content.end), join.seam));
|
|
157
150
|
}
|
|
158
151
|
// ── The spans a join may drop ────────────────────────────────────────────────
|
|
159
|
-
/** A left-side span is already in merged coordinates; a right-side one shifts by the
|
|
152
|
+
/** A left-side span is already in merged coordinates; a right-side one shifts by the join. */
|
|
160
153
|
const rightSpan = (join, right, span) => ({
|
|
161
154
|
start: join.seam + span.start - right.cut,
|
|
162
155
|
end: join.seam + span.end - right.cut
|
|
163
156
|
});
|
|
164
157
|
const openerRun = (c) => ({ start: c.node.start, end: c.content.start });
|
|
165
158
|
const closerRun = (c) => ({ start: c.content.end, end: c.node.end });
|
|
166
|
-
/** Whether two constructs are written with the same delimiters
|
|
167
|
-
* are one construct's two halves", which
|
|
159
|
+
/** Whether two constructs are written with the same delimiters: the byte-level test for "these
|
|
160
|
+
* are one construct's two halves", which matching kinds alone cannot make (`__a__` vs `**a**`). */
|
|
168
161
|
const sameDelimiters = (left, lc, right, rc) => left.raw.slice(lc.node.start, lc.content.start) ===
|
|
169
162
|
right.raw.slice(rc.node.start, rc.content.start) &&
|
|
170
163
|
left.raw.slice(lc.content.end, lc.node.end) === right.raw.slice(rc.content.end, rc.node.end);
|
|
171
|
-
/**
|
|
172
|
-
*
|
|
173
|
-
* chain and the right's closer chain, minus the leading pairs whose kinds line up — those two
|
|
174
|
-
* halves make one construct across the seam, which is what the reader had.
|
|
175
|
-
*/
|
|
164
|
+
/** The runs a truncation stranded that the join does not rejoin: the left's openers and the right's
|
|
165
|
+
* closers, minus the leading pairs whose kinds line up and so make one construct again. */
|
|
176
166
|
function unpairedSpans(join, left, right) {
|
|
177
167
|
let paired = 0;
|
|
178
168
|
while (paired < left.dangling.length &&
|
|
@@ -192,11 +182,8 @@ function everyDanglingSpan(join, left, right) {
|
|
|
192
182
|
...right.dangling.map((c) => rightSpan(join, right, closerRun(c)))
|
|
193
183
|
];
|
|
194
184
|
}
|
|
195
|
-
/**
|
|
196
|
-
*
|
|
197
|
-
* written with the same bytes, enclosing nothing between them. Whole chain or nothing — dropping
|
|
198
|
-
* an outer pair while an inner one stays would leave both halves' runs unbalanced.
|
|
199
|
-
*/
|
|
185
|
+
/** The closer/opener chain a split's inverse brings back to back around nothing, same kinds and
|
|
186
|
+
* bytes. Dropped whole or not at all, since a partial drop leaves the runs unbalanced. */
|
|
200
187
|
function abuttingPairSpans(join, left, right) {
|
|
201
188
|
const closing = left.touching;
|
|
202
189
|
const opening = right.touching;
|
|
@@ -228,26 +215,18 @@ function withoutSpans(raw, spans) {
|
|
|
228
215
|
return out + raw.slice(at);
|
|
229
216
|
}
|
|
230
217
|
// ── Verification ─────────────────────────────────────────────────────────────
|
|
231
|
-
/**
|
|
232
|
-
*
|
|
233
|
-
* pre-join parse, never off the joined halves — either of those bakes the defect this checks for
|
|
234
|
-
* into its own expectation.
|
|
235
|
-
*/
|
|
218
|
+
/** What the user must still see, read off each side's parse from before the join: reading the
|
|
219
|
+
* joined halves would bake the fault this checks for into the expectation. */
|
|
236
220
|
const shownAfterJoin = (left, right, typed) => visibleSide(left, 'before') + typed + visibleSide(right, 'after');
|
|
237
|
-
/**
|
|
238
|
-
*
|
|
239
|
-
* marker span dropped. The clip decides only WHERE the bytes stop; a construct the cut crosses
|
|
240
|
-
* contributes its content, since its delimiter runs paint nothing either way — which `readSide`
|
|
241
|
-
* has already established by declining a side whose chrome paints.
|
|
242
|
-
*/
|
|
221
|
+
/** What the user sees of one side, asked of the render with every marker dropped. A construct the
|
|
222
|
+
* cut crosses still gives its content, since `readSide` refused any side whose markers paint. */
|
|
243
223
|
function visibleSide(side, keep) {
|
|
244
|
-
return renderedText(clipNodes(side.inlines, side.cut, keep), side.raw, CONTENT_VISIBILITY
|
|
224
|
+
return renderedText(clipNodes(side.inlines, side.cut, keep), side.raw, CONTENT_VISIBILITY, {
|
|
225
|
+
grammar: side.grammar
|
|
226
|
+
});
|
|
245
227
|
}
|
|
246
|
-
/**
|
|
247
|
-
*
|
|
248
|
-
* clipped children. Exported for the depth pin, which has to reach the rebuild with a tree no
|
|
249
|
-
* side this deep could be rendered at.
|
|
250
|
-
*/
|
|
228
|
+
/** The `keep` side of `level`, rebuilt: a construct the cut crosses is replaced by its clipped
|
|
229
|
+
* children. Exported for the depth test. */
|
|
251
230
|
export function clipNodes(level, cut, keep) {
|
|
252
231
|
const before = keep === 'before';
|
|
253
232
|
// A crossed construct is emitted as its children, in its own place, so the pre-order's
|
|
@@ -271,7 +250,7 @@ export function clipNodes(level, cut, keep) {
|
|
|
271
250
|
if (node.children && node.children.length > 0)
|
|
272
251
|
continue;
|
|
273
252
|
// A code span carries its content as bytes rather than children, so the surviving part of
|
|
274
|
-
// it is that byte range read as text
|
|
253
|
+
// it is that byte range read as text, which is exactly what the span shows.
|
|
275
254
|
const start = before ? content.start : Math.max(content.start, cut);
|
|
276
255
|
const end = before ? Math.min(content.end, cut) : content.end;
|
|
277
256
|
if (end > start)
|
|
@@ -279,46 +258,30 @@ export function clipNodes(level, cut, keep) {
|
|
|
279
258
|
}
|
|
280
259
|
return out;
|
|
281
260
|
}
|
|
282
|
-
/**
|
|
283
|
-
*
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
function readCandidate(raw, resolver, join) {
|
|
288
|
-
if (!keepsContainerMarker(join.ambientPrefix ?? '', raw))
|
|
289
|
-
return null;
|
|
290
|
-
const sole = soleProseReparse(raw, resolver);
|
|
291
|
-
if (sole === null)
|
|
261
|
+
/** The candidate read back where it will be stored: what it shows, and how many unwrapping
|
|
262
|
+
* constructs stand over nothing. Null where that position would not keep it as one prose block. */
|
|
263
|
+
function readCandidate(raw, store) {
|
|
264
|
+
const read = readBack(raw, store);
|
|
265
|
+
if (read === null)
|
|
292
266
|
return null;
|
|
293
|
-
const {
|
|
267
|
+
const { inlines } = read;
|
|
268
|
+
const source = readSource(read);
|
|
269
|
+
const render = { grammar: store.reading.grammar };
|
|
294
270
|
return {
|
|
295
|
-
visible:
|
|
296
|
-
//
|
|
297
|
-
residue: paintsOnlyChrome(
|
|
271
|
+
visible: shownOf(read, store),
|
|
272
|
+
// Markers over nothing are all on screen (§ 4.1), so a block that shows them hides no pair.
|
|
273
|
+
residue: paintsOnlyChrome(inlines, source, render) ? 0 : countResidue(inlines, source, render)
|
|
298
274
|
};
|
|
299
275
|
}
|
|
300
|
-
/**
|
|
301
|
-
* Whether the container still reads its own marker off the candidate. The item's marker is not in
|
|
302
|
-
* these bytes but absorbs from them, so a body the cut left starting with a space reloads under a
|
|
303
|
-
* WIDER marker than the live tree holds — the load/save cycle would then change the tree.
|
|
304
|
-
*/
|
|
305
|
-
function keepsContainerMarker(prefix, raw) {
|
|
306
|
-
if (prefix === '')
|
|
307
|
-
return true;
|
|
308
|
-
const blocks = parse(prefix + raw, { scope: 'fragment' }).children;
|
|
309
|
-
if (blocks.length !== 1)
|
|
310
|
-
return false;
|
|
311
|
-
return blocks[0].marker === prefix;
|
|
312
|
-
}
|
|
313
|
-
/** Constructs the reader would meet as nothing at all: no painted byte, and a row that unwraps
|
|
276
|
+
/** Constructs the user would meet as nothing at all: no visible byte, and a policy that unwraps
|
|
314
277
|
* them when emptied rather than leaving delimiters over nothing. */
|
|
315
|
-
function countResidue(nodes, raw) {
|
|
278
|
+
function countResidue(nodes, raw, render) {
|
|
316
279
|
let found = 0;
|
|
317
280
|
for (const node of inlineDescendants(nodes, isConstruct)) {
|
|
318
281
|
if (node.kind === 'text')
|
|
319
282
|
continue;
|
|
320
283
|
if (node.end > node.start &&
|
|
321
|
-
renderedText([node], raw, CONTENT_VISIBILITY) === '' &&
|
|
284
|
+
renderedText([node], raw, CONTENT_VISIBILITY, render) === '' &&
|
|
322
285
|
getInlineConstructPolicy(node.kind)?.autoUnwrapOnEmpty === true) {
|
|
323
286
|
found++;
|
|
324
287
|
}
|
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* What a
|
|
3
|
-
* user never saw
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* cannot reach the bytes by being absent from a list.
|
|
2
|
+
* What a browser range edit writes in live mode, read off the `beforeinput` event. The range can
|
|
3
|
+
* span delimiter runs the user never saw, which contenteditable would take literally, so the edit
|
|
4
|
+
* goes through `replaceRangeInLeaf` (`docs/design/live-mode.md` § 4.5). Every prose block routes
|
|
5
|
+
* its `beforeinput` through {@link resolveLiveRangeEdit}.
|
|
7
6
|
*/
|
|
8
7
|
import type { NodeView } from '../../../core/node-views';
|
|
9
|
-
import type {
|
|
10
|
-
|
|
11
|
-
export interface SelectionEdit {
|
|
12
|
-
/** The block's whole bytes after the edit, trailing line ending included. */
|
|
13
|
-
raw: string;
|
|
14
|
-
caret: number;
|
|
15
|
-
}
|
|
16
|
-
/** The raw-offset readers a native ranged edit needs from its surface. */
|
|
8
|
+
import type { StoredAs } from '../../../schema/stored-as';
|
|
9
|
+
/** The raw-offset lookups a browser range edit needs from the block. */
|
|
17
10
|
export interface LiveEditCursor {
|
|
18
11
|
rawRangeOf(range: AbstractRange): {
|
|
19
12
|
start: number;
|
|
@@ -24,8 +17,8 @@ export interface LiveEditCursor {
|
|
|
24
17
|
end: number;
|
|
25
18
|
} | null;
|
|
26
19
|
}
|
|
27
|
-
/** Rewrite the block's bytes, or
|
|
28
|
-
*
|
|
20
|
+
/** Rewrite the block's bytes, or consume the key and write nothing: an input handled here whose
|
|
21
|
+
* payload cannot be read writes nothing, since the browser would splice the hidden runs. */
|
|
29
22
|
export type LiveRangeEdit = LiveRangeRewrite | {
|
|
30
23
|
kind: 'swallow';
|
|
31
24
|
};
|
|
@@ -38,31 +31,9 @@ export interface LiveRangeRewrite {
|
|
|
38
31
|
raw: string;
|
|
39
32
|
caret: number;
|
|
40
33
|
}
|
|
41
|
-
/**
|
|
42
|
-
*
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
*/
|
|
46
|
-
export declare function
|
|
47
|
-
/**
|
|
48
|
-
* The whole surface arm around {@link resolveLiveRangeEdit}: stand down while a source reveal has
|
|
49
|
-
* outrun the CST, resolve, preventDefault what the seam owns, then swallow or hand the rewrite to
|
|
50
|
-
* the surface's own `commit`. Shared so a new precondition lands on every surface at once.
|
|
51
|
-
*/
|
|
52
|
-
export declare function applyLiveRangeEdit(e: InputEvent, node: NodeView, cursor: LiveEditCursor, presentationMode: PresentationMode | undefined, linkRef: InlineResolverRef | undefined, ambientPrefix: string, isRevealing: () => boolean, commit: (edit: LiveRangeRewrite) => void): boolean;
|
|
53
|
-
/**
|
|
54
|
-
* The bytes replacing `[start, end)` with `typed`, or null when the seam had nothing to clean.
|
|
55
|
-
* Exported for the callers that already hold a range of their own (the composition commit, the
|
|
56
|
-
* gesture fuzzer) rather than an event to read one off.
|
|
57
|
-
*/
|
|
58
|
-
export declare function resolveSelectionEdit(node: NodeView, selection: {
|
|
59
|
-
start: number;
|
|
60
|
-
end: number;
|
|
61
|
-
}, typed: string, presentationMode: PresentationMode | undefined, linkRef: InlineResolverRef | undefined, ambientPrefix?: string): SelectionEdit | null;
|
|
62
|
-
/** The rewrite of `[start, end)` to `typed` a gesture the surface consumed installs, where a
|
|
63
|
-
* delete is the empty one. The seam's cleaned bytes where it has them, else the literal display
|
|
64
|
-
* splice with the caret past the insert: the fallback's one home, so no arm can drift. */
|
|
65
|
-
export declare function replaceRangeRaw(node: NodeView, range: {
|
|
66
|
-
start: number;
|
|
67
|
-
end: number;
|
|
68
|
-
}, typed: string, presentationMode: PresentationMode | undefined, linkRef: InlineResolverRef | undefined, ambientPrefix: string): SelectionEdit;
|
|
34
|
+
/** What a prose block does with a `beforeinput` in live mode. Null where there is nothing to clean,
|
|
35
|
+
* so the browser keeps its own edit and its grapheme and IME behavior. */
|
|
36
|
+
export declare function resolveLiveRangeEdit(e: InputEvent, node: NodeView, cursor: LiveEditCursor, store: StoredAs): LiveRangeEdit | null;
|
|
37
|
+
/** The wrapper every block runs around {@link resolveLiveRangeEdit}, shared so a new precondition
|
|
38
|
+
* reaches every block. Does nothing while a shown source has outrun the CST. */
|
|
39
|
+
export declare function applyLiveRangeEdit(e: InputEvent, node: NodeView, cursor: LiveEditCursor, store: StoredAs, isRevealing: () => boolean, commit: (edit: LiveRangeRewrite) => void): boolean;
|
|
@@ -1,42 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* What a
|
|
3
|
-
* user never saw
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* cannot reach the bytes by being absent from a list.
|
|
2
|
+
* What a browser range edit writes in live mode, read off the `beforeinput` event. The range can
|
|
3
|
+
* span delimiter runs the user never saw, which contenteditable would take literally, so the edit
|
|
4
|
+
* goes through `replaceRangeInLeaf` (`docs/design/live-mode.md` § 4.5). Every prose block routes
|
|
5
|
+
* its `beforeinput` through {@link resolveLiveRangeEdit}.
|
|
7
6
|
*/
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* leaving it native keeps its grapheme and IME behavior.
|
|
14
|
-
*/
|
|
15
|
-
export function resolveLiveRangeEdit(e, node, cursor, presentationMode, linkRef, ambientPrefix = '') {
|
|
16
|
-
if (presentationMode !== 'live' || !rewritesTargetRange(e))
|
|
7
|
+
import { replaceRangeInLeaf } from '../../../tree-operations/leaf-range';
|
|
8
|
+
/** What a prose block does with a `beforeinput` in live mode. Null where there is nothing to clean,
|
|
9
|
+
* so the browser keeps its own edit and its grapheme and IME behavior. */
|
|
10
|
+
export function resolveLiveRangeEdit(e, node, cursor, store) {
|
|
11
|
+
if (!store.reading.hidesDelimitersAtCaret() || !rewritesTargetRange(e))
|
|
17
12
|
return null;
|
|
18
|
-
const
|
|
19
|
-
if (!
|
|
13
|
+
const target = pendingEditRange(e, cursor);
|
|
14
|
+
if (!target)
|
|
20
15
|
return null;
|
|
21
16
|
const insert = replacementText(e);
|
|
22
|
-
if (
|
|
23
|
-
return parkedCaretInsertion(node, cursor,
|
|
24
|
-
|
|
25
|
-
|
|
17
|
+
if (target.start === target.end) {
|
|
18
|
+
return parkedCaretInsertion(node, cursor, target.start, insert, store);
|
|
19
|
+
}
|
|
20
|
+
const edit = replaceRangeInLeaf(node, target, insert ?? '', store);
|
|
21
|
+
if (edit.matchesBrowserEdit)
|
|
26
22
|
return null;
|
|
27
23
|
return insert === null
|
|
28
24
|
? { kind: 'swallow' }
|
|
29
|
-
: { kind: 'rewrite', range, raw: edit.raw, caret: edit.caret };
|
|
25
|
+
: { kind: 'rewrite', range: edit.range, raw: edit.raw, caret: edit.caret };
|
|
30
26
|
}
|
|
31
|
-
/**
|
|
32
|
-
* A
|
|
33
|
-
|
|
34
|
-
* parked it, past that run (after a `)` just typed). A target behind the caret is that
|
|
35
|
-
* canonicalization, and the byte belongs where the caret is, the side the keydown seat settled. A
|
|
36
|
-
* target at or past the caret is the engine landing the byte itself, which a split's reopened run
|
|
37
|
-
* relies on: parked at its start, the byte goes inside.
|
|
38
|
-
*/
|
|
39
|
-
function parkedCaretInsertion(node, cursor, engineTarget, insert) {
|
|
27
|
+
/** A collapsed insertion Chromium aimed back across a hidden run (just after a typed `)`) goes where
|
|
28
|
+
* the caret is. A target at or past the caret stands, since a split's reopened run relies on it. */
|
|
29
|
+
function parkedCaretInsertion(node, cursor, engineTarget, insert, store) {
|
|
40
30
|
if (!insert)
|
|
41
31
|
return null;
|
|
42
32
|
const selection = window.getSelection();
|
|
@@ -45,23 +35,15 @@ function parkedCaretInsertion(node, cursor, engineTarget, insert) {
|
|
|
45
35
|
const caret = cursor.rawRangeOf(selection.getRangeAt(0))?.start ?? null;
|
|
46
36
|
if (caret === null || engineTarget >= caret)
|
|
47
37
|
return null;
|
|
48
|
-
const
|
|
49
|
-
return {
|
|
50
|
-
kind: 'rewrite',
|
|
51
|
-
range: { start: caret, end: caret },
|
|
52
|
-
raw: display.slice(0, caret) + insert + display.slice(caret) + trailingLineEnding(node.raw),
|
|
53
|
-
caret: caret + insert.length
|
|
54
|
-
};
|
|
38
|
+
const edit = replaceRangeInLeaf(node, { start: caret, end: caret }, insert, store);
|
|
39
|
+
return { kind: 'rewrite', range: edit.range, raw: edit.raw, caret: edit.caret };
|
|
55
40
|
}
|
|
56
|
-
/**
|
|
57
|
-
*
|
|
58
|
-
|
|
59
|
-
* the surface's own `commit`. Shared so a new precondition lands on every surface at once.
|
|
60
|
-
*/
|
|
61
|
-
export function applyLiveRangeEdit(e, node, cursor, presentationMode, linkRef, ambientPrefix, isRevealing, commit) {
|
|
41
|
+
/** The wrapper every block runs around {@link resolveLiveRangeEdit}, shared so a new precondition
|
|
42
|
+
* reaches every block. Does nothing while a shown source has outrun the CST. */
|
|
43
|
+
export function applyLiveRangeEdit(e, node, cursor, store, isRevealing, commit) {
|
|
62
44
|
if (isRevealing())
|
|
63
45
|
return false;
|
|
64
|
-
const edit = resolveLiveRangeEdit(e, node, cursor,
|
|
46
|
+
const edit = resolveLiveRangeEdit(e, node, cursor, store);
|
|
65
47
|
if (!edit)
|
|
66
48
|
return false;
|
|
67
49
|
e.preventDefault();
|
|
@@ -69,72 +51,15 @@ export function applyLiveRangeEdit(e, node, cursor, presentationMode, linkRef, a
|
|
|
69
51
|
commit(edit);
|
|
70
52
|
return true;
|
|
71
53
|
}
|
|
72
|
-
/**
|
|
73
|
-
* The bytes replacing `[start, end)` with `typed`, or null when the seam had nothing to clean.
|
|
74
|
-
* Exported for the callers that already hold a range of their own (the composition commit, the
|
|
75
|
-
* gesture fuzzer) rather than an event to read one off.
|
|
76
|
-
*/
|
|
77
|
-
export function resolveSelectionEdit(node, selection, typed, presentationMode, linkRef, ambientPrefix = '') {
|
|
78
|
-
// Both ends off any scalar interior before the slice: a half-pair here is unrecoverable
|
|
79
|
-
// bytes, not a recoverable edit. Snapping the same direction cannot invert the range.
|
|
80
|
-
const start = snapToScalarBoundary(node.raw, selection.start);
|
|
81
|
-
const end = snapToScalarBoundary(node.raw, selection.end);
|
|
82
|
-
if (start >= end)
|
|
83
|
-
return null;
|
|
84
|
-
const mergedRaw = node.raw.slice(0, start) + node.raw.slice(end);
|
|
85
|
-
// `typed` rides the seam rather than being spliced past it: the bytes the cleanup verifies have
|
|
86
|
-
// to be the bytes this returns, or the flanking it checked is not the flanking that ships.
|
|
87
|
-
const joined = cleanJoinedRaw({
|
|
88
|
-
mergedRaw,
|
|
89
|
-
seam: start,
|
|
90
|
-
start: { node, offset: start },
|
|
91
|
-
end: { node, offset: end },
|
|
92
|
-
linkRef,
|
|
93
|
-
typed,
|
|
94
|
-
ambientPrefix
|
|
95
|
-
}, presentationMode);
|
|
96
|
-
if (joined.raw === mergedRaw)
|
|
97
|
-
return null;
|
|
98
|
-
// The insert lands where the two sides now meet — the paste-at-a-cleaned-seam rule: cleanup
|
|
99
|
-
// runs in the DELETE half, and the commit's own re-parse settles what the new bytes make of it.
|
|
100
|
-
return {
|
|
101
|
-
raw: joined.raw.slice(0, joined.seam) + typed + joined.raw.slice(joined.seam),
|
|
102
|
-
caret: joined.seam + typed.length
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
/** The rewrite of `[start, end)` to `typed` a gesture the surface consumed installs, where a
|
|
106
|
-
* delete is the empty one. The seam's cleaned bytes where it has them, else the literal display
|
|
107
|
-
* splice with the caret past the insert: the fallback's one home, so no arm can drift. */
|
|
108
|
-
export function replaceRangeRaw(node, range, typed, presentationMode, linkRef, ambientPrefix) {
|
|
109
|
-
const cleaned = resolveSelectionEdit(node, range, typed, presentationMode, linkRef, ambientPrefix);
|
|
110
|
-
if (cleaned)
|
|
111
|
-
return cleaned;
|
|
112
|
-
const display = trimTrailingLineEnding(node.raw);
|
|
113
|
-
return {
|
|
114
|
-
raw: display.slice(0, range.start) +
|
|
115
|
-
typed +
|
|
116
|
-
display.slice(range.end) +
|
|
117
|
-
trailingLineEnding(node.raw),
|
|
118
|
-
caret: range.start + typed.length
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
54
|
// ── Reading the event ────────────────────────────────────────────────────────
|
|
122
|
-
/**
|
|
123
|
-
*
|
|
124
|
-
* delete at a COLLAPSED caret reports the run, not the caret — and is feature-detected because
|
|
125
|
-
* jsdom implements no such method.
|
|
126
|
-
*/
|
|
55
|
+
/** The range the pending edit will rewrite, from `getTargetRanges()`, since a word delete reports
|
|
56
|
+
* the run rather than the caret. Feature-detected because jsdom has no such method. */
|
|
127
57
|
function pendingEditRange(e, cursor) {
|
|
128
58
|
const targets = typeof e.getTargetRanges === 'function' ? e.getTargetRanges() : [];
|
|
129
59
|
return targets.length > 0 ? cursor.rawRangeOf(targets[0]) : cursor.getRawSelection();
|
|
130
60
|
}
|
|
131
|
-
/**
|
|
132
|
-
*
|
|
133
|
-
* forward, backward — plus the two that replace it with text. Paste and composition carry seams of
|
|
134
|
-
* their own; composing is excluded by the NAME and by the flag rather than by listing the two
|
|
135
|
-
* delete types today's engines spell, since `composition-seat.ts` owns that window end to end and a
|
|
136
|
-
* second resolution here writes the block twice.
|
|
137
|
-
*/
|
|
61
|
+
/** The inputs that rewrite the range they target. Composition is excluded by name and flag, since
|
|
62
|
+
* `composition-seat.ts` handles it start to finish and a second write here would double it. */
|
|
138
63
|
function rewritesTargetRange(e) {
|
|
139
64
|
if (e.isComposing || /composition/i.test(e.inputType))
|
|
140
65
|
return false;
|
|
@@ -142,9 +67,8 @@ function rewritesTargetRange(e) {
|
|
|
142
67
|
e.inputType === 'insertText' ||
|
|
143
68
|
e.inputType === 'insertReplacementText');
|
|
144
69
|
}
|
|
145
|
-
/** What an input writes over its range, or null for
|
|
146
|
-
*
|
|
147
|
-
* swallowed press is sounder than turning a replacement into a delete. */
|
|
70
|
+
/** What an input writes over its range, or null for `dataTransfer` text, which would skip the paste
|
|
71
|
+
* transforms (G4.11); consuming the key beats turning a replacement into a delete. */
|
|
148
72
|
function replacementText(e) {
|
|
149
73
|
return e.inputType.startsWith('delete') ? '' : e.data;
|
|
150
74
|
}
|