@voithos-labs/aragonite 0.10.3 → 0.10.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/a11y-strings.d.ts +12 -5
- package/dist/a11y-strings.js +61 -5
- package/dist/action-contracts.d.ts +242 -155
- package/dist/action-contracts.js +2 -2
- package/dist/active-editor.d.ts +3 -3
- package/dist/active-editor.js +8 -9
- package/dist/ambient/ambient-dom.d.ts +2 -5
- package/dist/ambient/ambient-dom.js +16 -62
- package/dist/assert.js +6 -5
- package/dist/block-component.d.ts +135 -109
- package/dist/block-component.js +30 -22
- package/dist/block-id.d.ts +6 -10
- package/dist/block-id.js +25 -14
- package/dist/bounded-memo.d.ts +5 -5
- package/dist/bounded-memo.js +6 -6
- package/dist/components/BlockDragHandle.svelte +13 -20
- package/dist/components/BlockHost.svelte +56 -134
- package/dist/components/BlockList.svelte +22 -19
- package/dist/components/DecorationOverlay.svelte +9 -10
- package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
- package/dist/components/Editor.svelte +619 -1089
- package/dist/components/Editor.svelte.d.ts +9 -20
- package/dist/components/GapCaret.svelte +26 -59
- package/dist/components/SelectionOverlay.svelte +36 -67
- package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
- package/dist/components/TailInsert.svelte +8 -55
- package/dist/components/TailInsert.svelte.d.ts +4 -6
- package/dist/components/block-content-selector.d.ts +11 -11
- package/dist/components/block-content-selector.js +11 -11
- package/dist/components/block-el-lookup.d.ts +6 -0
- package/dist/components/block-el-lookup.js +27 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
- package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
- package/dist/components/blocks/code/CodeBlock.svelte +255 -276
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
- package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
- package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
- package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
- package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
- package/dist/components/blocks/code/code-bootstrap.js +35 -28
- package/dist/components/blocks/code/code-context-actions.js +5 -4
- package/dist/components/blocks/code/code-enter.js +2 -2
- package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
- package/dist/components/blocks/code/code-fence-boundary.js +40 -66
- package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
- package/dist/components/blocks/code/code-fence-exit.js +24 -25
- package/dist/components/blocks/code/code-indent.d.ts +2 -2
- package/dist/components/blocks/code/code-indent.js +4 -7
- package/dist/components/blocks/code/code-languages.d.ts +16 -12
- package/dist/components/blocks/code/code-languages.js +58 -32
- package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
- package/dist/components/blocks/code/code-paste-surface.js +9 -18
- package/dist/components/blocks/code/code-renderer.d.ts +21 -5
- package/dist/components/blocks/code/code-renderer.js +90 -125
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
- package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
- package/dist/components/blocks/directive/activate-directives.js +18 -13
- package/dist/components/blocks/editable-leaf.d.ts +50 -74
- package/dist/components/blocks/editable-leaf.js +144 -202
- package/dist/components/blocks/editable-surface.d.ts +96 -100
- package/dist/components/blocks/editable-surface.js +101 -109
- package/dist/components/blocks/list/ListBlock.svelte +46 -90
- package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
- package/dist/components/blocks/list/task-checkbox.js +12 -7
- package/dist/components/blocks/plain-text-backend.d.ts +4 -20
- package/dist/components/blocks/plain-text-backend.js +9 -43
- package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
- package/dist/components/blocks/surface-wiring.svelte.js +15 -34
- package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
- package/dist/components/blocks/table/TableBlock.svelte +100 -165
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
- package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
- package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
- package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
- package/dist/components/blocks/table/cell-pointer.js +49 -71
- package/dist/components/blocks/table/cell-render.d.ts +24 -29
- package/dist/components/blocks/table/cell-render.js +29 -31
- package/dist/components/blocks/table/selected-cells.d.ts +7 -7
- package/dist/components/blocks/table/selected-cells.js +9 -13
- package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
- package/dist/components/blocks/table/table-caret-at-point.js +5 -5
- package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
- package/dist/components/blocks/table/table-cell-paste.js +27 -43
- package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
- package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
- package/dist/components/blocks/table/table-menu-model.js +6 -10
- package/dist/components/blocks/table/table-navigation.js +2 -2
- package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
- package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
- package/dist/components/blocks/text/auto-pair-record.js +51 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
- package/dist/components/blocks/text/click-snap-guard.js +16 -5
- package/dist/components/blocks/text/composition-seat.d.ts +17 -14
- package/dist/components/blocks/text/composition-seat.js +11 -11
- package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
- package/dist/components/blocks/text/construct-edge-delete.js +50 -65
- package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
- package/dist/components/blocks/text/construct-reveal.js +13 -14
- package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
- package/dist/components/blocks/text/delimiter-autopair.js +87 -103
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
- package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
- package/dist/components/blocks/text/edge-seat.d.ts +17 -26
- package/dist/components/blocks/text/edge-seat.js +43 -70
- package/dist/components/blocks/text/link-at-point.d.ts +9 -9
- package/dist/components/blocks/text/link-at-point.js +12 -15
- package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
- package/dist/components/blocks/text/live-join-seam.js +75 -112
- package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
- package/dist/components/blocks/text/live-selection-edit.js +32 -105
- package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
- package/dist/components/blocks/text/live-split-rebalance.js +50 -67
- package/dist/components/blocks/text/marker-completion.d.ts +7 -12
- package/dist/components/blocks/text/marker-completion.js +17 -10
- package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
- package/dist/components/blocks/text/pending-mark-insert.js +30 -49
- package/dist/components/blocks/text/screen-diff.d.ts +5 -15
- package/dist/components/blocks/text/screen-diff.js +5 -19
- package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
- package/dist/components/blocks/text/text-clipboard.js +27 -32
- package/dist/components/blocks/text/text-keydown.d.ts +20 -30
- package/dist/components/blocks/text/text-keydown.js +54 -51
- package/dist/components/blocks/text/text-render.d.ts +25 -35
- package/dist/components/blocks/text/text-render.js +82 -61
- package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
- package/dist/components/blocks/text/widget-adjacency.js +17 -17
- package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
- package/dist/components/blocks/text/widget-interaction.js +243 -208
- package/dist/components/blocks/widget-portal.d.ts +20 -29
- package/dist/components/blocks/widget-portal.js +16 -14
- package/dist/components/built-in-blocks.d.ts +3 -4
- package/dist/components/built-in-blocks.js +17 -18
- package/dist/components/drag-handle.d.ts +13 -30
- package/dist/components/drag-handle.js +25 -63
- package/dist/components/editor-built-ins.d.ts +1 -0
- package/dist/components/editor-built-ins.js +16 -0
- package/dist/components/editor-root-clipboard.d.ts +6 -6
- package/dist/components/editor-root-clipboard.js +16 -27
- package/dist/components/editor-root-document-swap.d.ts +49 -0
- package/dist/components/editor-root-document-swap.js +54 -0
- package/dist/components/editor-root-focus.d.ts +5 -4
- package/dist/components/editor-root-focus.js +51 -22
- package/dist/components/editor-root-focused-surface.d.ts +35 -0
- package/dist/components/editor-root-focused-surface.js +65 -0
- package/dist/components/editor-root-geometry.d.ts +15 -24
- package/dist/components/editor-root-geometry.js +27 -31
- package/dist/components/editor-root-gestures.d.ts +39 -0
- package/dist/components/editor-root-gestures.js +189 -0
- package/dist/components/editor-root-keydown.d.ts +10 -25
- package/dist/components/editor-root-keydown.js +19 -43
- package/dist/components/editor-root-listeners.d.ts +22 -31
- package/dist/components/editor-root-listeners.js +49 -46
- package/dist/components/editor-root-menus.d.ts +51 -0
- package/dist/components/editor-root-menus.js +147 -0
- package/dist/components/editor-root-mode-flip.d.ts +16 -11
- package/dist/components/editor-root-mode-flip.js +36 -34
- package/dist/components/editor-root-scroll-host.d.ts +22 -0
- package/dist/components/editor-root-scroll-host.js +34 -0
- package/dist/components/editor-root-test-surface.d.ts +48 -0
- package/dist/components/editor-root-test-surface.js +6 -0
- package/dist/components/image/ImageOverlayHost.svelte +44 -35
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
- package/dist/components/image/ImageProperties.svelte +37 -41
- package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
- package/dist/components/image/ImageResizeHandles.svelte +26 -30
- package/dist/components/image/image-crop.d.ts +5 -11
- package/dist/components/image/image-crop.js +5 -11
- package/dist/components/image/image-edit-commit.d.ts +19 -16
- package/dist/components/image/image-edit-commit.js +74 -38
- package/dist/components/image/image-resize.d.ts +2 -5
- package/dist/components/image/image-resize.js +3 -6
- package/dist/components/image/image-widget-editing.d.ts +3 -3
- package/dist/components/image/image-widget-editing.js +9 -9
- package/dist/components/image/widget-dom.d.ts +2 -3
- package/dist/components/image/widget-dom.js +19 -24
- package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
- package/dist/components/image/widget-selection-state.svelte.js +26 -19
- package/dist/components/kind-cue.svelte.d.ts +21 -0
- package/dist/components/kind-cue.svelte.js +35 -0
- package/dist/components/link-card/LinkCard.svelte +115 -64
- package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
- package/dist/components/link-card/LinkCardHost.svelte +42 -33
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
- package/dist/components/link-card/link-card-commit.d.ts +16 -19
- package/dist/components/link-card/link-card-commit.js +21 -30
- package/dist/components/link-card/link-card-entry.d.ts +13 -23
- package/dist/components/link-card/link-card-entry.js +16 -24
- package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
- package/dist/components/link-card/link-card-state.svelte.js +2 -2
- package/dist/components/lrd-map-gate.d.ts +4 -11
- package/dist/components/lrd-map-gate.js +5 -11
- package/dist/components/menu/BlockMenu.svelte +20 -81
- package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
- package/dist/components/menu/InlineMenuHost.svelte +191 -0
- package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
- package/dist/components/menu/MenuIcon.svelte +3 -103
- package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
- package/dist/components/menu/SelectionToolbar.svelte +380 -0
- package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
- package/dist/components/menu/clipboard-actions.d.ts +3 -4
- package/dist/components/menu/clipboard-actions.js +3 -4
- package/dist/components/menu/default-context-actions.d.ts +4 -13
- package/dist/components/menu/default-context-actions.js +49 -67
- package/dist/components/menu/flyout-placement.d.ts +2 -2
- package/dist/components/menu/flyout-placement.js +2 -2
- package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
- package/dist/components/menu/menu-presence.svelte.js +19 -0
- package/dist/components/paste-image-arm.d.ts +6 -11
- package/dist/components/paste-image-arm.js +11 -18
- package/dist/components/portal.d.ts +2 -5
- package/dist/components/portal.js +4 -7
- package/dist/core/directive/activate.d.ts +4 -5
- package/dist/core/directive/activate.js +8 -9
- package/dist/core/directive/container-opener.js +13 -12
- package/dist/core/directive/grammar.d.ts +2 -5
- package/dist/core/directive/grammar.js +10 -10
- package/dist/core/directive/kinds.d.ts +4 -7
- package/dist/core/directive/kinds.js +14 -16
- package/dist/core/directive/registry.d.ts +12 -9
- package/dist/core/directive/registry.js +19 -20
- package/dist/core/directive/text-recognizer.d.ts +3 -2
- package/dist/core/directive/text-recognizer.js +5 -9
- package/dist/core/escapable.d.ts +1 -5
- package/dist/core/escapable.js +1 -5
- package/dist/core/inline/backticks.d.ts +3 -4
- package/dist/core/inline/backticks.js +3 -4
- package/dist/core/inline/character-refs.js +2 -1
- package/dist/core/inline/destination-bytes.d.ts +6 -3
- package/dist/core/inline/destination-bytes.js +50 -8
- package/dist/core/inline/entity-widget.d.ts +4 -3
- package/dist/core/inline/entity-widget.js +6 -6
- package/dist/core/inline/format-toggle.d.ts +22 -28
- package/dist/core/inline/format-toggle.js +97 -129
- package/dist/core/inline/html-entities.d.ts +2 -3
- package/dist/core/inline/html-entities.js +2 -3
- package/dist/core/inline/html-tag-grammar.js +6 -2
- package/dist/core/inline/image-dimensions.d.ts +2 -0
- package/dist/core/inline/image-dimensions.js +19 -2
- package/dist/core/inline/image-source-bytes.d.ts +11 -0
- package/dist/core/inline/image-source-bytes.js +71 -0
- package/dist/core/inline/index.d.ts +28 -21
- package/dist/core/inline/index.js +56 -34
- package/dist/core/inline/inline-cache.d.ts +12 -15
- package/dist/core/inline/inline-cache.js +11 -14
- package/dist/core/inline/inline-widgets.d.ts +55 -68
- package/dist/core/inline/inline-widgets.js +55 -58
- package/dist/core/inline/link-destination.d.ts +31 -0
- package/dist/core/inline/link-destination.js +129 -0
- package/dist/core/inline/link-reference-resolver.d.ts +8 -6
- package/dist/core/inline/link-reference-resolver.js +10 -6
- package/dist/core/inline/link-source-bytes.d.ts +31 -0
- package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
- package/dist/core/inline/live-edit/read-back.d.ts +29 -0
- package/dist/core/inline/live-edit/read-back.js +50 -0
- package/dist/core/inline/picture.d.ts +10 -0
- package/dist/core/inline/picture.js +40 -0
- package/dist/core/inline/scan/autolinks.d.ts +7 -8
- package/dist/core/inline/scan/autolinks.js +80 -59
- package/dist/core/inline/scan/brackets.d.ts +2 -2
- package/dist/core/inline/scan/brackets.js +6 -103
- package/dist/core/inline/scan/code-spans.d.ts +4 -0
- package/dist/core/inline/scan/code-spans.js +8 -0
- package/dist/core/inline/scan/emphasis.js +10 -14
- package/dist/core/inline/scan/index.d.ts +3 -1
- package/dist/core/inline/scan/index.js +32 -33
- package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
- package/dist/core/inline/scan/plugin-syntax.js +75 -89
- package/dist/core/inline/scan/scan-state.d.ts +2 -0
- package/dist/core/inline/scan/scan-state.js +1 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
- package/dist/core/inline/scan/simple-nodes.js +2 -5
- package/dist/core/inline/scan/triggers.d.ts +17 -0
- package/dist/core/inline/scan/triggers.js +26 -0
- package/dist/core/inline/scan/url.js +8 -10
- package/dist/core/inline/transparency.d.ts +2 -1
- package/dist/core/inline/transparency.js +33 -17
- package/dist/core/inline/visibility.d.ts +30 -49
- package/dist/core/inline/visibility.js +31 -49
- package/dist/core/inline/walk.d.ts +4 -10
- package/dist/core/inline/walk.js +4 -10
- package/dist/core/inline-render.d.ts +22 -27
- package/dist/core/inline-render.js +51 -60
- package/dist/core/lines.d.ts +67 -26
- package/dist/core/lines.js +164 -33
- package/dist/core/metadata-parity.d.ts +9 -0
- package/dist/core/metadata-parity.js +25 -0
- package/dist/core/node-views.d.ts +7 -6
- package/dist/core/node-views.js +5 -5
- package/dist/core/nodes.d.ts +34 -44
- package/dist/core/nodes.js +4 -12
- package/dist/core/parser.d.ts +27 -34
- package/dist/core/parser.js +53 -67
- package/dist/core/parsers/blockquote.d.ts +5 -8
- package/dist/core/parsers/blockquote.js +11 -10
- package/dist/core/parsers/built-in-openers.d.ts +2 -5
- package/dist/core/parsers/built-in-openers.js +5 -8
- package/dist/core/parsers/fence-syntax.d.ts +36 -7
- package/dist/core/parsers/fence-syntax.js +61 -11
- package/dist/core/parsers/fenced-code.d.ts +16 -0
- package/dist/core/parsers/fenced-code.js +16 -15
- package/dist/core/parsers/heading.d.ts +19 -2
- package/dist/core/parsers/heading.js +50 -2
- package/dist/core/parsers/html-block.d.ts +3 -6
- package/dist/core/parsers/html-block.js +10 -11
- package/dist/core/parsers/indented-code.d.ts +1 -1
- package/dist/core/parsers/indented-code.js +2 -8
- package/dist/core/parsers/link-reference.d.ts +5 -3
- package/dist/core/parsers/link-reference.js +116 -120
- package/dist/core/parsers/list.d.ts +12 -5
- package/dist/core/parsers/list.js +53 -36
- package/dist/core/parsers/paragraph.d.ts +3 -3
- package/dist/core/parsers/paragraph.js +14 -5
- package/dist/core/parsers/table-completion.d.ts +2 -5
- package/dist/core/parsers/table-completion.js +7 -10
- package/dist/core/parsers/table.d.ts +8 -8
- package/dist/core/parsers/table.js +23 -26
- package/dist/core/parsers/thematic-break.js +15 -14
- package/dist/core/paths.d.ts +13 -0
- package/dist/core/paths.js +31 -0
- package/dist/core/terminator-escalation.d.ts +0 -7
- package/dist/core/terminator-escalation.js +5 -8
- package/dist/core/url-policy.d.ts +2 -5
- package/dist/core/url-policy.js +8 -12
- package/dist/cursor/caret-memory.d.ts +34 -0
- package/dist/cursor/caret-memory.js +82 -0
- package/dist/cursor/coordinate-spaces.d.ts +26 -19
- package/dist/cursor/coordinate-spaces.js +32 -20
- package/dist/cursor/dom-walk.d.ts +7 -13
- package/dist/cursor/dom-walk.js +7 -13
- package/dist/cursor/edge-affinity.d.ts +7 -35
- package/dist/cursor/edge-affinity.js +13 -44
- package/dist/cursor/focused-caret.d.ts +6 -8
- package/dist/cursor/focused-caret.js +7 -16
- package/dist/cursor/height-model.d.ts +3 -3
- package/dist/cursor/height-model.js +5 -5
- package/dist/cursor/height-oracle.d.ts +10 -7
- package/dist/cursor/height-oracle.js +26 -75
- package/dist/cursor/observe-resize.d.ts +13 -0
- package/dist/cursor/observe-resize.js +43 -0
- package/dist/cursor/overlay-rects.d.ts +2 -5
- package/dist/cursor/overlay-rects.js +2 -5
- package/dist/cursor/overlay-remeasure.d.ts +6 -7
- package/dist/cursor/overlay-remeasure.js +10 -14
- package/dist/cursor/pending-marks.d.ts +7 -9
- package/dist/cursor/pending-marks.js +6 -27
- package/dist/cursor/point-offset.d.ts +16 -10
- package/dist/cursor/point-offset.js +60 -25
- package/dist/cursor/reveal-source.d.ts +7 -11
- package/dist/cursor/reveal-source.js +10 -18
- package/dist/cursor/scroll-ancestors.d.ts +9 -20
- package/dist/cursor/scroll-ancestors.js +14 -26
- package/dist/cursor/scroll-owner.d.ts +92 -0
- package/dist/cursor/scroll-owner.js +283 -0
- package/dist/cursor/scrollport.d.ts +16 -8
- package/dist/cursor/scrollport.js +28 -5
- package/dist/cursor/sticky-column.d.ts +6 -29
- package/dist/cursor/sticky-column.js +6 -49
- package/dist/cursor/sticky-measure.d.ts +14 -9
- package/dist/cursor/sticky-measure.js +99 -49
- package/dist/cursor/surface-backend.d.ts +41 -0
- package/dist/cursor/surface-backend.js +78 -0
- package/dist/cursor/typography-estimates.d.ts +3 -3
- package/dist/cursor/typography-estimates.js +3 -3
- package/dist/cursor/visual-lines.d.ts +25 -13
- package/dist/cursor/visual-lines.js +72 -28
- package/dist/cursor/widget-edge-snap.d.ts +23 -0
- package/dist/cursor/widget-edge-snap.js +39 -0
- package/dist/cursor/widget-offset.d.ts +111 -102
- package/dist/cursor/widget-offset.js +352 -177
- package/dist/debug/diagnostics-report.d.ts +6 -6
- package/dist/debug/diagnostics-report.js +5 -5
- package/dist/debug/dump-tree.js +2 -2
- package/dist/debug/editor-diagnostics.d.ts +15 -0
- package/dist/debug/editor-diagnostics.js +33 -0
- package/dist/debug/inspect.d.ts +2 -2
- package/dist/debug/inspect.js +4 -4
- package/dist/debug/interaction-trace.d.ts +14 -15
- package/dist/debug/interaction-trace.js +19 -20
- package/dist/debug/operations-log.d.ts +1 -1
- package/dist/debug/operations-log.js +1 -1
- package/dist/decorations/buckets.d.ts +6 -12
- package/dist/decorations/buckets.js +4 -11
- package/dist/decorations/decoration-state.svelte.d.ts +2 -3
- package/dist/decorations/decoration-state.svelte.js +24 -26
- package/dist/decorations/island-dom.d.ts +10 -18
- package/dist/decorations/island-dom.js +25 -50
- package/dist/decorations/reserved-attrs.d.ts +6 -8
- package/dist/decorations/reserved-attrs.js +31 -17
- package/dist/decorations/types.d.ts +6 -7
- package/dist/decorations/types.js +2 -1
- package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
- package/dist/decorations/use-block-decorations.svelte.js +71 -0
- package/dist/decorations/widget-dom.d.ts +3 -3
- package/dist/decorations/widget-dom.js +5 -5
- package/dist/dev-warn.d.ts +5 -2
- package/dist/dev-warn.js +16 -4
- package/dist/editor-actions/ancestry-folds.d.ts +9 -14
- package/dist/editor-actions/ancestry-folds.js +13 -18
- package/dist/editor-actions/block-edit-core.d.ts +49 -22
- package/dist/editor-actions/block-edit-core.js +279 -151
- package/dist/editor-actions/block-edit-scope.d.ts +63 -50
- package/dist/editor-actions/block-edit-scope.js +100 -48
- package/dist/editor-actions/block-edit.d.ts +2 -3
- package/dist/editor-actions/block-edit.js +14 -90
- package/dist/editor-actions/commit/history.d.ts +4 -4
- package/dist/editor-actions/commit/history.js +33 -34
- package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
- package/dist/editor-actions/commit/reading-write-gate.js +56 -0
- package/dist/editor-actions/commit/text-batch.d.ts +7 -11
- package/dist/editor-actions/commit/text-batch.js +6 -7
- package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
- package/dist/editor-actions/commit/undo-controller.js +346 -216
- package/dist/editor-actions/container-block-component.d.ts +32 -51
- package/dist/editor-actions/container-block-component.js +66 -92
- package/dist/editor-actions/container-edit.d.ts +4 -2
- package/dist/editor-actions/container-edit.js +14 -44
- package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
- package/dist/editor-actions/container-exit-overrides.js +19 -21
- package/dist/editor-actions/deps.d.ts +25 -32
- package/dist/editor-actions/enter-completion.d.ts +12 -15
- package/dist/editor-actions/enter-completion.js +49 -51
- package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
- package/dist/editor-actions/focus/focus-dispatch.js +33 -52
- package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
- package/dist/editor-actions/focus/focus-landing.js +29 -14
- package/dist/editor-actions/focus/focus.d.ts +3 -2
- package/dist/editor-actions/focus/focus.js +42 -59
- package/dist/editor-actions/index.d.ts +4 -3
- package/dist/editor-actions/index.js +5 -4
- package/dist/editor-actions/inline-range-commit.d.ts +18 -16
- package/dist/editor-actions/inline-range-commit.js +45 -54
- package/dist/editor-actions/leaf-write.d.ts +11 -0
- package/dist/editor-actions/leaf-write.js +102 -0
- package/dist/editor-actions/list-context.d.ts +9 -10
- package/dist/editor-actions/list-context.js +115 -110
- package/dist/editor-actions/list-overrides.d.ts +13 -5
- package/dist/editor-actions/list-overrides.js +36 -12
- package/dist/editor-actions/merge-fallback.d.ts +10 -16
- package/dist/editor-actions/merge-fallback.js +11 -22
- package/dist/editor-actions/nested/container-actions.d.ts +37 -0
- package/dist/editor-actions/nested/container-actions.js +42 -0
- package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
- package/dist/editor-actions/nested/emptied-container.js +5 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
- package/dist/editor-actions/nested/nested-actions.js +17 -15
- package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
- package/dist/editor-actions/nested/nested-block-edit.js +40 -134
- package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
- package/dist/editor-actions/nested/nested-focus.js +33 -21
- package/dist/editor-actions/paste-coordinator.d.ts +3 -2
- package/dist/editor-actions/paste-coordinator.js +17 -13
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
- package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
- package/dist/editor-actions/plugin/container.d.ts +55 -76
- package/dist/editor-actions/plugin/container.js +105 -186
- package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
- package/dist/editor-actions/plugin/directive-container.js +7 -8
- package/dist/editor-actions/reorder-action.d.ts +7 -12
- package/dist/editor-actions/reorder-action.js +32 -48
- package/dist/editor-actions/reorder-drag.d.ts +12 -8
- package/dist/editor-actions/reorder-drag.js +45 -41
- package/dist/editor-actions/replacement-focus.d.ts +13 -21
- package/dist/editor-actions/replacement-focus.js +32 -33
- package/dist/editor-actions/search-replace.js +71 -67
- package/dist/editor-actions/stored-caret.d.ts +7 -0
- package/dist/editor-actions/stored-caret.js +10 -0
- package/dist/editor-actions/table-context.d.ts +9 -11
- package/dist/editor-actions/table-context.js +70 -93
- package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
- package/dist/editor-actions/unwrap-strategies.js +52 -63
- package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
- package/dist/editor-actions/whole-block-focus-surface.js +43 -53
- package/dist/editor-events.d.ts +25 -29
- package/dist/editor-events.js +17 -28
- package/dist/editor-keys.d.ts +96 -104
- package/dist/editor-keys.js +11 -24
- package/dist/editor-props.d.ts +91 -71
- package/dist/editor-rects.d.ts +23 -34
- package/dist/editor-rects.js +9 -77
- package/dist/env.d.ts +6 -4
- package/dist/env.js +8 -4
- package/dist/index.d.ts +6 -2
- package/dist/index.js +5 -2
- package/dist/inline-menu/inline-menu-session.d.ts +37 -0
- package/dist/inline-menu/inline-menu-session.js +98 -0
- package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
- package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
- package/dist/inline-menu/types.d.ts +77 -0
- package/dist/inline-menu/types.js +7 -0
- package/dist/invariants/child-id-parity.d.ts +23 -0
- package/dist/invariants/child-id-parity.js +39 -0
- package/dist/invariants/commit-paths.d.ts +4 -4
- package/dist/invariants/commit-paths.js +4 -4
- package/dist/invariants/commit-scope.d.ts +4 -4
- package/dist/invariants/commit-scope.js +9 -8
- package/dist/invariants/context-keys.d.ts +2 -5
- package/dist/invariants/context-keys.js +3 -6
- package/dist/invariants/descriptor.d.ts +2 -6
- package/dist/invariants/descriptor.js +2 -6
- package/dist/invariants/inline-transitions.d.ts +9 -16
- package/dist/invariants/inline-transitions.js +10 -18
- package/dist/invariants/install.d.ts +18 -27
- package/dist/invariants/install.js +29 -30
- package/dist/invariants/keeps-a-block.d.ts +7 -0
- package/dist/invariants/keeps-a-block.js +14 -0
- package/dist/invariants/landable-caret.d.ts +5 -7
- package/dist/invariants/landable-caret.js +8 -11
- package/dist/invariants/landing-focus-scroll.d.ts +7 -0
- package/dist/invariants/landing-focus-scroll.js +13 -0
- package/dist/invariants/landing-value.d.ts +13 -0
- package/dist/invariants/landing-value.js +27 -0
- package/dist/invariants/marker-css-parity.d.ts +5 -6
- package/dist/invariants/marker-css-parity.js +11 -12
- package/dist/invariants/measures-in-own-list.d.ts +6 -0
- package/dist/invariants/measures-in-own-list.js +13 -0
- package/dist/invariants/node-shape.d.ts +18 -37
- package/dist/invariants/node-shape.js +123 -79
- package/dist/invariants/open-tail.d.ts +7 -0
- package/dist/invariants/open-tail.js +45 -0
- package/dist/invariants/placement-ends-widget.d.ts +8 -0
- package/dist/invariants/placement-ends-widget.js +13 -0
- package/dist/invariants/registry.d.ts +27 -66
- package/dist/invariants/registry.js +61 -137
- package/dist/invariants/render-fidelity.d.ts +4 -4
- package/dist/invariants/render-fidelity.js +5 -5
- package/dist/invariants/selection-endpoints.d.ts +6 -7
- package/dist/invariants/selection-endpoints.js +18 -16
- package/dist/invariants/single-node-sink.d.ts +4 -5
- package/dist/invariants/single-node-sink.js +4 -5
- package/dist/invariants/snapshot-integrity.d.ts +5 -6
- package/dist/invariants/snapshot-integrity.js +1 -1
- package/dist/invariants/structural-descriptor.d.ts +6 -15
- package/dist/invariants/structural-descriptor.js +6 -15
- package/dist/menu-icons.d.ts +47 -0
- package/dist/menu-icons.js +113 -0
- package/dist/perf/instruments.d.ts +20 -5
- package/dist/perf/instruments.js +35 -15
- package/dist/perf/use-mount-gauge.svelte.js +4 -4
- package/dist/plugin.d.ts +38 -8
- package/dist/plugin.js +102 -74
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
- package/dist/plugins/admonitions/admonition-kind.js +12 -10
- package/dist/plugins/admonitions/convert-document.d.ts +5 -5
- package/dist/plugins/admonitions/convert-document.js +8 -7
- package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
- package/dist/plugins/admonitions/gh-alert.js +21 -22
- package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
- package/dist/plugins/admonitions/github-alert-kind.js +28 -37
- package/dist/plugins/admonitions/index.js +2 -2
- package/dist/plugins/admonitions/kinds.d.ts +1 -1
- package/dist/plugins/admonitions/register.js +11 -2
- package/dist/plugins/details/DetailsBlock.svelte +20 -20
- package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
- package/dist/plugins/details/details-disclosure.svelte.js +6 -7
- package/dist/plugins/details/details-kind.d.ts +6 -7
- package/dist/plugins/details/details-kind.js +44 -59
- package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
- package/dist/plugins/emoji/emoji-recognizer.js +7 -14
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
- package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +3 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
- package/dist/plugins/footnotes/footnote-definition.js +69 -45
- package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
- package/dist/plugins/footnotes/footnote-lookup.js +14 -26
- package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
- package/dist/plugins/footnotes/footnote-numbering.js +22 -31
- package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
- package/dist/plugins/footnotes/footnote-reference.js +8 -13
- package/dist/plugins/footnotes/index.js +2 -3
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
- package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
- package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
- package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/word-char.js +4 -0
- package/dist/plugins/latex/BlockMath.svelte +58 -75
- package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
- package/dist/plugins/latex/MathInline.svelte +10 -9
- package/dist/plugins/latex/flanking.d.ts +1 -0
- package/dist/plugins/latex/flanking.js +3 -0
- package/dist/plugins/latex/index.d.ts +1 -1
- package/dist/plugins/latex/latex-kind.d.ts +4 -4
- package/dist/plugins/latex/latex-kind.js +113 -85
- package/dist/plugins/latex/math-completion.d.ts +1 -1
- package/dist/plugins/latex/math-completion.js +5 -8
- package/dist/plugins/latex/math-layout.d.ts +2 -8
- package/dist/plugins/latex/math-layout.js +0 -9
- package/dist/plugins/latex/math-renderer.d.ts +17 -20
- package/dist/plugins/latex/math-renderer.js +21 -38
- package/dist/plugins/latex/math-source.d.ts +4 -8
- package/dist/plugins/latex/math-source.js +36 -75
- package/dist/plugins/latex/register.d.ts +10 -11
- package/dist/plugins/latex/register.js +24 -10
- package/dist/plugins/latex/renderer.d.ts +9 -10
- package/dist/plugins/latex/renderer.js +9 -24
- package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
- package/dist/plugins/mermaid/index.js +1 -1
- package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
- package/dist/plugins/mermaid/mermaid-kind.js +30 -47
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
- package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
- package/dist/plugins/mermaid/register.d.ts +3 -3
- package/dist/plugins/mermaid/register.js +5 -5
- package/dist/plugins/mermaid/renderer.d.ts +5 -5
- package/dist/plugins/mermaid/renderer.js +8 -11
- package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
- package/dist/plugins/parrot/parrot-plugin.js +3 -3
- package/dist/plugins/slash-commands/filter.d.ts +23 -0
- package/dist/plugins/slash-commands/filter.js +31 -0
- package/dist/plugins/slash-commands/index.d.ts +2 -0
- package/dist/plugins/slash-commands/index.js +2 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
- package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
- package/dist/plugins/slash-commands/slash-source.js +108 -0
- package/dist/plugins/toc/TocBlock.svelte +23 -22
- package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
- package/dist/plugins/toc/heading-outline.d.ts +7 -12
- package/dist/plugins/toc/heading-outline.js +22 -36
- package/dist/plugins/toc/navigation-queue.d.ts +2 -4
- package/dist/plugins/toc/toc-plugin.d.ts +5 -5
- package/dist/plugins/toc/toc-plugin.js +20 -13
- package/dist/presentation-mode.d.ts +15 -23
- package/dist/presentation-mode.js +19 -25
- package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
- package/dist/reactivity/block-list-state.svelte.js +8 -9
- package/dist/reactivity/block-window.svelte.d.ts +12 -6
- package/dist/reactivity/block-window.svelte.js +44 -17
- package/dist/reactivity/child-list.d.ts +34 -0
- package/dist/reactivity/child-list.js +48 -0
- package/dist/reactivity/content-version.svelte.d.ts +4 -7
- package/dist/reactivity/content-version.svelte.js +3 -5
- package/dist/reactivity/hold-across.d.ts +39 -0
- package/dist/reactivity/hold-across.js +57 -0
- package/dist/reactivity/layout-state.svelte.d.ts +27 -0
- package/dist/reactivity/layout-state.svelte.js +51 -0
- package/dist/reactivity/list-tree.d.ts +39 -0
- package/dist/reactivity/list-tree.js +132 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
- package/dist/reactivity/list-windowing.svelte.js +143 -292
- package/dist/reactivity/measure-batch.d.ts +6 -8
- package/dist/reactivity/measure-batch.js +5 -6
- package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
- package/dist/reactivity/publish-ref.svelte.js +21 -85
- package/dist/reactivity/scope-geometry.d.ts +6 -13
- package/dist/reactivity/scope-geometry.js +7 -14
- package/dist/reactivity/state-registry.d.ts +5 -5
- package/dist/reactivity/state-registry.js +11 -15
- package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
- package/dist/reactivity/use-container-windowing.svelte.js +64 -74
- package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
- package/dist/reactivity/use-measured-child.svelte.js +41 -0
- package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
- package/dist/reactivity/use-window-floor.svelte.js +27 -0
- package/dist/reactivity/window-slice.d.ts +4 -4
- package/dist/reactivity/window-slice.js +0 -2
- package/dist/renderer-slot.d.ts +48 -0
- package/dist/renderer-slot.js +85 -0
- package/dist/scan-index.d.ts +4 -4
- package/dist/scan-index.js +4 -4
- package/dist/schema/block-commands.d.ts +69 -54
- package/dist/schema/block-commands.js +91 -104
- package/dist/schema/block-completions.d.ts +16 -19
- package/dist/schema/block-completions.js +25 -32
- package/dist/schema/block-component-registry.d.ts +13 -14
- package/dist/schema/block-component-registry.js +19 -17
- package/dist/schema/block-kind-descriptor.d.ts +234 -168
- package/dist/schema/block-kind-descriptor.js +151 -66
- package/dist/schema/block-openers.d.ts +48 -39
- package/dist/schema/block-openers.js +73 -83
- package/dist/schema/built-in-descriptors.d.ts +3 -5
- package/dist/schema/built-in-descriptors.js +96 -80
- package/dist/schema/child-spans.d.ts +12 -10
- package/dist/schema/child-spans.js +68 -34
- package/dist/schema/closure.d.ts +18 -16
- package/dist/schema/closure.js +24 -14
- package/dist/schema/command-id.d.ts +6 -8
- package/dist/schema/command-id.js +20 -25
- package/dist/schema/commands.d.ts +79 -81
- package/dist/schema/commands.js +156 -116
- package/dist/schema/container-raw.d.ts +51 -11
- package/dist/schema/container-raw.js +143 -14
- package/dist/schema/container-rebuilders.d.ts +17 -15
- package/dist/schema/container-rebuilders.js +30 -22
- package/dist/schema/context-actions.d.ts +25 -13
- package/dist/schema/context-actions.js +32 -17
- package/dist/schema/define-plugin-block.d.ts +8 -6
- package/dist/schema/define-plugin-block.js +6 -4
- package/dist/schema/fenced-code-raw.d.ts +30 -17
- package/dist/schema/fenced-code-raw.js +155 -107
- package/dist/schema/global-commands.d.ts +6 -6
- package/dist/schema/global-commands.js +14 -22
- package/dist/schema/height-estimates.d.ts +31 -0
- package/dist/schema/height-estimates.js +64 -0
- package/dist/schema/inline-construct-policy.d.ts +42 -55
- package/dist/schema/inline-construct-policy.js +36 -35
- package/dist/schema/insert-catalogue.d.ts +30 -0
- package/dist/schema/insert-catalogue.js +95 -0
- package/dist/schema/keybinding-overrides.d.ts +9 -11
- package/dist/schema/keybinding-overrides.js +1 -1
- package/dist/schema/keybindings.d.ts +15 -7
- package/dist/schema/keybindings.js +21 -9
- package/dist/schema/merge-rules.d.ts +5 -7
- package/dist/schema/merge-rules.js +7 -9
- package/dist/schema/opener-priorities.d.ts +4 -4
- package/dist/schema/opener-priorities.js +4 -4
- package/dist/schema/operations.d.ts +9 -11
- package/dist/schema/operations.js +3 -3
- package/dist/schema/page-role.d.ts +14 -0
- package/dist/schema/page-role.js +19 -0
- package/dist/schema/plugin-activation.d.ts +4 -6
- package/dist/schema/plugin-activation.js +12 -10
- package/dist/schema/plugin-editor-context.d.ts +25 -10
- package/dist/schema/plugin-editor-context.js +40 -9
- package/dist/schema/plugin-install.d.ts +49 -17
- package/dist/schema/plugin-install.js +51 -25
- package/dist/schema/plugin-kind.d.ts +12 -8
- package/dist/schema/plugin-kind.js +35 -42
- package/dist/schema/plugin-name.js +3 -3
- package/dist/schema/plugin-registry.d.ts +54 -0
- package/dist/schema/plugin-registry.js +70 -0
- package/dist/schema/reading.d.ts +23 -0
- package/dist/schema/reading.js +7 -0
- package/dist/schema/register-once.d.ts +3 -5
- package/dist/schema/register-once.js +7 -16
- package/dist/schema/registration-checks.d.ts +12 -16
- package/dist/schema/registration-checks.js +35 -51
- package/dist/schema/registration-pairs.d.ts +54 -0
- package/dist/schema/registration-pairs.js +48 -0
- package/dist/schema/registration-pending.d.ts +8 -12
- package/dist/schema/registration-pending.js +9 -9
- package/dist/schema/registry-reset.d.ts +8 -4
- package/dist/schema/registry-reset.js +13 -26
- package/dist/schema/registry-view.d.ts +25 -13
- package/dist/schema/registry-view.js +26 -20
- package/dist/schema/reserved-chords.d.ts +9 -10
- package/dist/schema/reserved-chords.js +73 -78
- package/dist/schema/reserved-chrome.d.ts +12 -11
- package/dist/schema/reserved-chrome.js +15 -11
- package/dist/schema/setext-raw.d.ts +13 -0
- package/dist/schema/setext-raw.js +33 -0
- package/dist/schema/stored-as.d.ts +20 -0
- package/dist/schema/stored-as.js +6 -0
- package/dist/schema/table-cell-raw.d.ts +18 -7
- package/dist/schema/table-cell-raw.js +28 -7
- package/dist/schema/whole-block-unit.d.ts +5 -4
- package/dist/schema/whole-block-unit.js +5 -4
- package/dist/search/document-scan.d.ts +3 -3
- package/dist/search/document-scan.js +2 -2
- package/dist/search/matcher.d.ts +1 -1
- package/dist/search/regex-executor.d.ts +5 -6
- package/dist/search/regex-executor.js +6 -8
- package/dist/search/replace.d.ts +2 -5
- package/dist/search/replace.js +2 -5
- package/dist/search/search-state.svelte.d.ts +5 -5
- package/dist/search/search-state.svelte.js +12 -16
- package/dist/selection/autoscroll.d.ts +6 -9
- package/dist/selection/block-hit-test.d.ts +16 -24
- package/dist/selection/block-hit-test.js +29 -22
- package/dist/selection/caret-doors.d.ts +15 -14
- package/dist/selection/caret-doors.js +37 -26
- package/dist/selection/caret-landing.d.ts +62 -0
- package/dist/selection/caret-landing.js +157 -0
- package/dist/selection/caret-restore.d.ts +17 -10
- package/dist/selection/caret-restore.js +10 -22
- package/dist/selection/caret-target.d.ts +30 -0
- package/dist/selection/caret-target.js +84 -0
- package/dist/selection/char-endpoint-snap.d.ts +6 -10
- package/dist/selection/char-endpoint-snap.js +8 -14
- package/dist/selection/clipboard-text.d.ts +5 -12
- package/dist/selection/clipboard-text.js +69 -172
- package/dist/selection/covered-block.d.ts +6 -8
- package/dist/selection/covered-block.js +8 -19
- package/dist/selection/cross-block/clipboard.d.ts +3 -2
- package/dist/selection/cross-block/clipboard.js +13 -4
- package/dist/selection/cross-block/dispatch.d.ts +47 -43
- package/dist/selection/cross-block/dispatch.js +12 -23
- package/dist/selection/cross-block/format-range.d.ts +18 -21
- package/dist/selection/cross-block/format-range.js +104 -103
- package/dist/selection/cross-block/format-toggle.d.ts +10 -15
- package/dist/selection/cross-block/format-toggle.js +28 -33
- package/dist/selection/cross-block/keydown.d.ts +4 -4
- package/dist/selection/cross-block/keydown.js +93 -152
- package/dist/selection/cross-block/ops.d.ts +19 -34
- package/dist/selection/cross-block/ops.js +110 -95
- package/dist/selection/cross-block/paste.d.ts +2 -3
- package/dist/selection/cross-block/paste.js +61 -104
- package/dist/selection/cross-block/pointer.d.ts +17 -15
- package/dist/selection/cross-block/pointer.js +74 -25
- package/dist/selection/cross-block/type-replace.d.ts +4 -6
- package/dist/selection/cross-block/type-replace.js +53 -146
- package/dist/selection/dead-space-caret.d.ts +20 -28
- package/dist/selection/dead-space-caret.js +79 -87
- package/dist/selection/drag-pointer.d.ts +22 -5
- package/dist/selection/drag-pointer.js +63 -31
- package/dist/selection/gap-caret.d.ts +17 -28
- package/dist/selection/gap-caret.js +14 -26
- package/dist/selection/grid-selection.d.ts +12 -0
- package/dist/selection/grid-selection.js +22 -0
- package/dist/selection/keyboard-extend.d.ts +27 -39
- package/dist/selection/keyboard-extend.js +94 -116
- package/dist/selection/multi-click.d.ts +37 -0
- package/dist/selection/multi-click.js +197 -0
- package/dist/selection/native-bridge.d.ts +30 -37
- package/dist/selection/native-bridge.js +80 -100
- package/dist/selection/nearest-block.d.ts +17 -12
- package/dist/selection/nearest-block.js +37 -18
- package/dist/selection/path-lookup.d.ts +31 -14
- package/dist/selection/path-lookup.js +110 -20
- package/dist/selection/path-math.d.ts +9 -11
- package/dist/selection/path-math.js +5 -7
- package/dist/selection/pointer-gesture.d.ts +9 -0
- package/dist/selection/pointer-gesture.js +11 -0
- package/dist/selection/pointer-session.d.ts +10 -16
- package/dist/selection/pointer-session.js +6 -7
- package/dist/selection/primitives.d.ts +64 -33
- package/dist/selection/primitives.js +61 -53
- package/dist/selection/range-coverage.d.ts +94 -0
- package/dist/selection/range-coverage.js +365 -0
- package/dist/selection/range-delete-ceremony.d.ts +28 -74
- package/dist/selection/range-delete-ceremony.js +100 -141
- package/dist/selection/range-delete-chrome.d.ts +20 -33
- package/dist/selection/range-delete-chrome.js +53 -78
- package/dist/selection/range-delete-table-coverage.d.ts +11 -25
- package/dist/selection/range-delete-table-coverage.js +42 -112
- package/dist/selection/range-delete-table.d.ts +14 -12
- package/dist/selection/range-delete-table.js +106 -310
- package/dist/selection/range-delete.d.ts +18 -19
- package/dist/selection/range-delete.js +83 -123
- package/dist/selection/round-trip-restore.d.ts +18 -0
- package/dist/selection/round-trip-restore.js +19 -0
- package/dist/selection/selection-announcer.d.ts +17 -0
- package/dist/selection/selection-announcer.js +25 -0
- package/dist/selection/selection-description.d.ts +4 -3
- package/dist/selection/selection-description.js +5 -4
- package/dist/selection/selection-drop.d.ts +52 -0
- package/dist/selection/selection-drop.js +317 -0
- package/dist/selection/selection-restore.d.ts +20 -33
- package/dist/selection/selection-restore.js +21 -44
- package/dist/selection/selection-state.svelte.d.ts +50 -42
- package/dist/selection/selection-state.svelte.js +144 -98
- package/dist/selection/shared-keydown.d.ts +22 -27
- package/dist/selection/shared-keydown.js +25 -45
- package/dist/selection/table-endpoint-snap.d.ts +17 -41
- package/dist/selection/table-endpoint-snap.js +54 -80
- package/dist/selection/table-rect-extend.d.ts +3 -6
- package/dist/selection/table-rect-extend.js +19 -14
- package/dist/styles/editor-theme.css +75 -53
- package/dist/styles/editor.css +248 -139
- package/dist/testing/conformance-core.d.ts +50 -18
- package/dist/testing/conformance-core.js +88 -50
- package/dist/testing/container-conformance.d.ts +48 -84
- package/dist/testing/container-conformance.js +159 -285
- package/dist/testing/headless-actions.d.ts +34 -19
- package/dist/testing/headless-actions.js +116 -65
- package/dist/testing/headless-block-list.svelte.d.ts +16 -0
- package/dist/testing/headless-block-list.svelte.js +22 -0
- package/dist/testing/inline-conformance.d.ts +15 -22
- package/dist/testing/inline-conformance.js +131 -148
- package/dist/testing/kind-conformance.d.ts +19 -24
- package/dist/testing/kind-conformance.js +204 -117
- package/dist/testing/kit-reading.d.ts +7 -0
- package/dist/testing/kit-reading.js +16 -0
- package/dist/testing/mount-dom-stubs.d.ts +4 -5
- package/dist/testing/mount-dom-stubs.js +8 -5
- package/dist/testing/parse-convergence.d.ts +10 -10
- package/dist/testing/parse-convergence.js +14 -49
- package/dist/testing.d.ts +13 -9
- package/dist/testing.js +28 -38
- package/dist/tree-operations/blockquote.d.ts +8 -14
- package/dist/tree-operations/blockquote.js +25 -45
- package/dist/tree-operations/chain-rebuild.d.ts +34 -25
- package/dist/tree-operations/chain-rebuild.js +115 -52
- package/dist/tree-operations/children.d.ts +5 -9
- package/dist/tree-operations/children.js +7 -11
- package/dist/tree-operations/cleanup.d.ts +6 -7
- package/dist/tree-operations/cleanup.js +14 -11
- package/dist/tree-operations/clone.js +5 -4
- package/dist/tree-operations/container-lift.d.ts +10 -5
- package/dist/tree-operations/container-lift.js +20 -14
- package/dist/tree-operations/container-offsets.d.ts +22 -0
- package/dist/tree-operations/container-offsets.js +89 -0
- package/dist/tree-operations/content-write.d.ts +52 -29
- package/dist/tree-operations/content-write.js +155 -110
- package/dist/tree-operations/index.d.ts +4 -4
- package/dist/tree-operations/index.js +4 -4
- package/dist/tree-operations/keep-one-block.d.ts +10 -0
- package/dist/tree-operations/keep-one-block.js +19 -0
- package/dist/tree-operations/leaf-range.d.ts +33 -0
- package/dist/tree-operations/leaf-range.js +67 -0
- package/dist/tree-operations/list/empty-check.d.ts +2 -3
- package/dist/tree-operations/list/empty-check.js +4 -4
- package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
- package/dist/tree-operations/list/exit-replacement.js +4 -9
- package/dist/tree-operations/list/item-partition.d.ts +2 -2
- package/dist/tree-operations/list/item-partition.js +2 -2
- package/dist/tree-operations/list/list-builders.d.ts +18 -16
- package/dist/tree-operations/list/list-builders.js +59 -30
- package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
- package/dist/tree-operations/list/ordered-markers.js +7 -16
- package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
- package/dist/tree-operations/list/reconcile-task.js +80 -23
- package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
- package/dist/tree-operations/list/sublist-separator.js +20 -27
- package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
- package/dist/tree-operations/list/task-paragraph.js +54 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
- package/dist/tree-operations/list/unwrap-merge.js +44 -79
- package/dist/tree-operations/node-ops.d.ts +30 -52
- package/dist/tree-operations/node-ops.js +152 -218
- package/dist/tree-operations/node-primitives.d.ts +44 -31
- package/dist/tree-operations/node-primitives.js +84 -60
- package/dist/tree-operations/open-tail.d.ts +25 -0
- package/dist/tree-operations/open-tail.js +100 -0
- package/dist/tree-operations/parse-block.d.ts +15 -2
- package/dist/tree-operations/parse-block.js +19 -4
- package/dist/tree-operations/paste/apply.d.ts +7 -8
- package/dist/tree-operations/paste/apply.js +33 -63
- package/dist/tree-operations/paste/body-write.d.ts +8 -6
- package/dist/tree-operations/paste/body-write.js +13 -14
- package/dist/tree-operations/paste/container-match.d.ts +7 -10
- package/dist/tree-operations/paste/container-match.js +76 -58
- package/dist/tree-operations/paste/container-paste.d.ts +3 -3
- package/dist/tree-operations/paste/container-paste.js +3 -3
- package/dist/tree-operations/paste/dispatch.d.ts +26 -29
- package/dist/tree-operations/paste/dispatch.js +68 -53
- package/dist/tree-operations/paste/focus-target.d.ts +11 -14
- package/dist/tree-operations/paste/focus-target.js +13 -18
- package/dist/tree-operations/paste/hooks.d.ts +7 -12
- package/dist/tree-operations/paste/hooks.js +49 -46
- package/dist/tree-operations/paste/line-ending.d.ts +11 -0
- package/dist/tree-operations/paste/line-ending.js +32 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
- package/dist/tree-operations/paste/list-absorb.js +17 -19
- package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
- package/dist/tree-operations/paste/list-break-out.js +24 -32
- package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
- package/dist/tree-operations/paste/parent-scope.js +9 -16
- package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
- package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
- package/dist/tree-operations/paste/paste-replacement.js +73 -42
- package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
- package/dist/tree-operations/paste/paste-transforms.js +18 -27
- package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
- package/dist/tree-operations/paste/replacement-parse.js +24 -0
- package/dist/tree-operations/paste/strategy.d.ts +1 -1
- package/dist/tree-operations/paste/strategy.js +1 -1
- package/dist/tree-operations/paste/table-slice.js +15 -10
- package/dist/tree-operations/paste-surfaces.d.ts +18 -29
- package/dist/tree-operations/paste-surfaces.js +14 -10
- package/dist/tree-operations/path-mutate.d.ts +7 -8
- package/dist/tree-operations/path-mutate.js +4 -4
- package/dist/tree-operations/reorder-unit.d.ts +4 -5
- package/dist/tree-operations/reorder-unit.js +5 -6
- package/dist/tree-operations/reorder.d.ts +7 -9
- package/dist/tree-operations/reorder.js +39 -40
- package/dist/tree-operations/settle.d.ts +42 -53
- package/dist/tree-operations/settle.js +241 -162
- package/dist/tree-operations/sharing.d.ts +5 -5
- package/dist/tree-operations/splice-many.d.ts +5 -5
- package/dist/tree-operations/splice-many.js +5 -5
- package/dist/tree-operations/stored-as.d.ts +13 -0
- package/dist/tree-operations/stored-as.js +48 -0
- package/dist/tree-operations/structural-change.d.ts +11 -15
- package/dist/tree-operations/structural-change.js +10 -14
- package/dist/tree-operations/structural-suffix.d.ts +22 -0
- package/dist/tree-operations/structural-suffix.js +61 -0
- package/dist/tree-operations/sub-table-copy.d.ts +7 -0
- package/dist/tree-operations/sub-table-copy.js +40 -36
- package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
- package/dist/tree-operations/table-grid-clipboard.js +11 -36
- package/dist/tree-operations/table-mutations.d.ts +7 -3
- package/dist/tree-operations/table-mutations.js +45 -9
- package/dist/tree-operations/unshare.d.ts +11 -15
- package/dist/tree-operations/unshare.js +15 -17
- package/dist/undo/manager.js +1 -1
- package/dist/undo/types.d.ts +2 -2
- package/docs/guide/consumer-guide.md +329 -205
- package/docs/guide/directives.md +7 -7
- package/docs/guide/plugin-api.md +267 -183
- package/docs/guide/plugin-guide.md +341 -235
- package/docs/guide/plugin-testing.md +96 -82
- package/package.json +17 -21
- package/dist/ambient/ambient-cursor.d.ts +0 -41
- package/dist/ambient/ambient-cursor.js +0 -120
- package/dist/components/blocks/code/code-paste.d.ts +0 -24
- package/dist/components/blocks/code/code-paste.js +0 -21
- package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
- package/dist/components/blocks/table/cell-clipboard.js +0 -67
- package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
- package/dist/components/blocks/text/hidden-suffix.js +0 -15
- package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
- package/dist/components/image/image-source-bytes.d.ts +0 -15
- package/dist/components/image/image-source-bytes.js +0 -80
- package/dist/cursor/content-offsets.d.ts +0 -29
- package/dist/cursor/content-offsets.js +0 -151
- package/dist/cursor/reveal-anchor.d.ts +0 -30
- package/dist/cursor/reveal-anchor.js +0 -31
- package/dist/invariants/split-landing.d.ts +0 -8
- package/dist/invariants/split-landing.js +0 -15
- package/dist/selection/double-click-trim.d.ts +0 -17
- package/dist/selection/double-click-trim.js +0 -57
- package/dist/tree-operations/list/terminator.d.ts +0 -17
- package/dist/tree-operations/list/terminator.js +0 -60
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
- package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* every
|
|
2
|
+
* Recomputes the blank-line separators an edit left stale, merges neighbours that would re-read
|
|
3
|
+
* as one block on reload, and deletes a block on top of both (`docs/design/syntax-tree.md` § Blank
|
|
4
|
+
* lines). Every in-place write goes through `sharing`, so no undo snapshot sees it (G1.9), and
|
|
5
|
+
* `lint/separator-write-doors.test.ts` must list every function here that writes a separator.
|
|
6
6
|
*/
|
|
7
|
-
import { isBlankParagraph,
|
|
8
|
-
import {
|
|
7
|
+
import { isBlankParagraph, readBlocks } from '../core/parser';
|
|
8
|
+
import { firstLineEnding, ownTrailingLineEnding, splitLines, trimTrailingLineEnding } from '../core/lines';
|
|
9
|
+
import { tableTakesLine } from '../core/parsers/table';
|
|
9
10
|
import { devWarn } from '../dev-warn';
|
|
10
11
|
import { assignChildIdsDeep } from '../block-id';
|
|
11
12
|
import { tryGetBlockKindDescriptor } from '../schema/block-kind-descriptor';
|
|
@@ -13,14 +14,15 @@ import { dropChildSpans } from '../schema/child-spans';
|
|
|
13
14
|
import { assertInvariant } from '../assert';
|
|
14
15
|
import { checkStructuralDescriptor } from '../invariants/structural-descriptor';
|
|
15
16
|
import { ensureUnsharedChild } from './unshare';
|
|
17
|
+
import { lacksSublistSeparator, settleSublistSeparator } from './list/sublist-separator';
|
|
16
18
|
import { spliceChildren } from './children';
|
|
17
19
|
import { spliceMany } from './splice-many';
|
|
18
20
|
import { applyStructuralChangeToIdsRefs } from './structural-change';
|
|
19
21
|
import { ensureEditableContainers } from './node-primitives';
|
|
20
22
|
// ── Separators ──
|
|
21
23
|
/**
|
|
22
|
-
*
|
|
23
|
-
* where the parser would read the extra line as one more empty paragraph.
|
|
24
|
+
* Drop the separator at `index` where nothing needs one: at the body head, or below a blank
|
|
25
|
+
* block, where the parser would read the extra line as one more empty paragraph.
|
|
24
26
|
*/
|
|
25
27
|
export function clearRedundantSeparator(parent, index, sharing) {
|
|
26
28
|
retireChildSpans(parent);
|
|
@@ -39,8 +41,8 @@ export function clearRedundantSeparator(parent, index, sharing) {
|
|
|
39
41
|
absorbWrapPrefix(parent, bodyStart, index, freed);
|
|
40
42
|
}
|
|
41
43
|
/**
|
|
42
|
-
* A blank block
|
|
43
|
-
* follower's
|
|
44
|
+
* A blank block is itself a blank line, so it and its follower share one separator (G2.13). The
|
|
45
|
+
* follower's is kept, so filling the blank block later still finds the follower separated.
|
|
44
46
|
*/
|
|
45
47
|
export function dropDoubledSeparator(parent, index, sharing) {
|
|
46
48
|
retireChildSpans(parent);
|
|
@@ -54,7 +56,7 @@ export function dropDoubledSeparator(parent, index, sharing) {
|
|
|
54
56
|
}
|
|
55
57
|
/**
|
|
56
58
|
* The separator a block takes back when it stops being blank: its own blank line was what stood
|
|
57
|
-
* between it and a non-blank predecessor. Call
|
|
59
|
+
* between it and a non-blank predecessor. Call when the block is filled.
|
|
58
60
|
*/
|
|
59
61
|
export function restoreSeparatorOnFill(parent, index, sharing) {
|
|
60
62
|
retireChildSpans(parent);
|
|
@@ -64,8 +66,8 @@ export function restoreSeparatorOnFill(parent, index, sharing) {
|
|
|
64
66
|
mintSeparator(parent, index, sharing);
|
|
65
67
|
}
|
|
66
68
|
/**
|
|
67
|
-
* The separator the block
|
|
68
|
-
*
|
|
69
|
+
* The separator the block below a consumed blank line takes back, skipped for a blank block whose
|
|
70
|
+
* follower already holds one, since the two share it (G2.13).
|
|
69
71
|
*/
|
|
70
72
|
export function restoreSeparatorAfterBlank(parent, index, sharing) {
|
|
71
73
|
retireChildSpans(parent);
|
|
@@ -78,9 +80,8 @@ export function restoreSeparatorAfterBlank(parent, index, sharing) {
|
|
|
78
80
|
mintSeparator(parent, index, sharing);
|
|
79
81
|
}
|
|
80
82
|
/**
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
* kept; a mint lands at the run's head, the only slot one may take.
|
|
83
|
+
* A block turned blank joins a run that, with its follower, must carry exactly one separating line;
|
|
84
|
+
* a standing line is kept, and a new one goes at the run's head, the only place one may sit.
|
|
84
85
|
*/
|
|
85
86
|
export function settleSeparatorOnBlank(parent, index, sharing) {
|
|
86
87
|
retireChildSpans(parent);
|
|
@@ -100,13 +101,13 @@ export function settleSeparatorOnBlank(parent, index, sharing) {
|
|
|
100
101
|
if (children[i].leadingTrivia !== '')
|
|
101
102
|
standing.push(i);
|
|
102
103
|
}
|
|
103
|
-
// A
|
|
104
|
-
//
|
|
104
|
+
// A fence line at either end of the run strips one blank line into `innerPrefix`/`innerSuffix`
|
|
105
|
+
// on top of the run's own count when prose sits on the other side; an all-blank body needs none.
|
|
105
106
|
const wrap = bodyWrapOf(parent);
|
|
106
107
|
const slots = wrapSlotsOf(parent);
|
|
107
108
|
const bodyEnd = children.length - 1;
|
|
108
|
-
// A run of two or more that
|
|
109
|
-
//
|
|
109
|
+
// A run of two or more that is the whole body sits against both fence lines, and the reload
|
|
110
|
+
// strips a line into each of `innerPrefix` and `innerSuffix`, so the run supplies both.
|
|
110
111
|
const twoPeelBody = !!slots &&
|
|
111
112
|
wrap?.afterOpenerLine === true &&
|
|
112
113
|
wrap.beforeCloserLine === true &&
|
|
@@ -115,23 +116,24 @@ export function settleSeparatorOnBlank(parent, index, sharing) {
|
|
|
115
116
|
start < end;
|
|
116
117
|
const tailBelowProse = start > bodyStart && end === bodyEnd;
|
|
117
118
|
if (slots && wrap?.beforeCloserLine && (tailBelowProse || twoPeelBody) && !slots.innerSuffix) {
|
|
118
|
-
|
|
119
|
+
// A blank block's bytes are its line ending.
|
|
120
|
+
slots.innerSuffix = ownTrailingLineEnding(children[end].raw);
|
|
119
121
|
}
|
|
120
|
-
// The reverse:
|
|
121
|
-
//
|
|
122
|
+
// The reverse: beside a lone blank block that is the whole body, the closer strips no line of
|
|
123
|
+
// its own apart from the opener's, so the run gives the extra line back.
|
|
122
124
|
const loneBlankBody = start === bodyStart && end === bodyEnd && start === end;
|
|
123
125
|
if (slots && loneBlankBody && slots.innerSuffix && (slots.innerPrefix || standing.length > 0)) {
|
|
124
126
|
slots.innerSuffix = '';
|
|
125
127
|
}
|
|
126
128
|
const headUnderWrap = !!slots && wrap?.afterOpenerLine === true && start === bodyStart && end < bodyEnd;
|
|
127
|
-
// A line already standing
|
|
128
|
-
//
|
|
129
|
+
// A line already standing is the one the reload strips against the opener, so taking another
|
|
130
|
+
// into `innerPrefix` would add a line; a `twoPeelBody` keeps its lines in the wrap fields.
|
|
129
131
|
const takesOpenerPeel = twoPeelBody || (headUnderWrap && standing.length === 0);
|
|
130
132
|
if (slots && takesOpenerPeel && !slots.innerPrefix) {
|
|
131
|
-
slots.innerPrefix =
|
|
133
|
+
slots.innerPrefix = ownTrailingLineEnding(children[start].raw);
|
|
132
134
|
}
|
|
133
|
-
// Under the
|
|
134
|
-
// elsewhere a run with
|
|
135
|
+
// Under the opener the run keeps exactly one stripped line, in `innerPrefix` or standing;
|
|
136
|
+
// elsewhere a run with nothing above it separates nothing, so every line is a block.
|
|
135
137
|
let wanted;
|
|
136
138
|
if (twoPeelBody)
|
|
137
139
|
wanted = 0;
|
|
@@ -151,8 +153,24 @@ export function settleSeparatorOnBlank(parent, index, sharing) {
|
|
|
151
153
|
materializeTailSuffix(parent, sharing);
|
|
152
154
|
}
|
|
153
155
|
/**
|
|
154
|
-
* The
|
|
155
|
-
*
|
|
156
|
+
* The parser keeps a blank line beside a fence line in `innerPrefix`/`innerSuffix` only when body
|
|
157
|
+
* content sits past it, so an emptied body keeps neither, or it reloads with an extra blank block.
|
|
158
|
+
*/
|
|
159
|
+
function dropWrapOfEmptiedBody(parent) {
|
|
160
|
+
const slots = wrapSlotsOf(parent);
|
|
161
|
+
if (!slots || !bodyWrapOf(parent))
|
|
162
|
+
return;
|
|
163
|
+
if ((parent.children?.length ?? 0) > bodyStartIndex(parent))
|
|
164
|
+
return;
|
|
165
|
+
retireChildSpans(parent);
|
|
166
|
+
if (slots.innerPrefix)
|
|
167
|
+
slots.innerPrefix = '';
|
|
168
|
+
if (slots.innerSuffix)
|
|
169
|
+
slots.innerSuffix = '';
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* A tail block that stops being blank gives back the `innerSuffix` line {@link
|
|
173
|
+
* settleSeparatorOnBlank} lent it, or the container emits a line nobody typed.
|
|
156
174
|
*/
|
|
157
175
|
export function releaseWrapPeel(parent, index) {
|
|
158
176
|
retireChildSpans(parent);
|
|
@@ -169,43 +187,64 @@ export function releaseWrapPeel(parent, index) {
|
|
|
169
187
|
slots.innerSuffix = '';
|
|
170
188
|
}
|
|
171
189
|
/**
|
|
172
|
-
*
|
|
173
|
-
*
|
|
174
|
-
* so the settle materializes it. Document-level slot only. Returns the blocks appended.
|
|
190
|
+
* A body's trailing blank line stays in `suffix`/`innerSuffix` only while the tail block is
|
|
191
|
+
* non-blank; under a blank tail the reload reads it as a paragraph, so it becomes a block here.
|
|
175
192
|
*/
|
|
176
193
|
function materializeTailSuffix(parent, sharing) {
|
|
177
194
|
retireChildSpans(parent);
|
|
178
195
|
const children = parent.children;
|
|
179
|
-
const
|
|
180
|
-
|
|
196
|
+
const slot = tailSuffixSlotOf(parent);
|
|
197
|
+
const suffix = slot?.read();
|
|
198
|
+
if (!children || !slot || !suffix)
|
|
181
199
|
return 0;
|
|
182
|
-
// An emptied parent has no tail for the line to
|
|
183
|
-
// content and the reload reads it as the one block there is.
|
|
200
|
+
// An emptied parent has no tail block for the line to attach to, so the line is the body's
|
|
201
|
+
// whole content and the reload reads it as the one block there is.
|
|
184
202
|
if (children.length > 0 && !isBlankParagraph(children[children.length - 1]))
|
|
185
203
|
return 0;
|
|
186
204
|
const minted = { kind: 'paragraph', leadingTrivia: '', raw: suffix };
|
|
187
205
|
if (sharing)
|
|
188
206
|
sharing.stamp(minted);
|
|
189
207
|
children.push(minted);
|
|
190
|
-
|
|
208
|
+
slot.clear();
|
|
191
209
|
return 1;
|
|
192
210
|
}
|
|
193
|
-
// ── The splice settle funnel ──
|
|
194
211
|
/**
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
* the folds for a door landing a caret in the spliced bytes.
|
|
212
|
+
* Where a body keeps its trailing blank line. A closer line strips a line of its own, which
|
|
213
|
+
* {@link settleSeparatorOnBlank} reconciles, so a body under one has no such slot here.
|
|
198
214
|
*/
|
|
199
|
-
function
|
|
215
|
+
function tailSuffixSlotOf(parent) {
|
|
216
|
+
if (parent.suffix !== undefined) {
|
|
217
|
+
return { read: () => parent.suffix ?? '', clear: () => (parent.suffix = '') };
|
|
218
|
+
}
|
|
219
|
+
const owner = ownerNodeOf(parent);
|
|
220
|
+
const wrap = bodyWrapOf(parent);
|
|
221
|
+
if (!owner || wrap?.beforeCloserLine)
|
|
222
|
+
return undefined;
|
|
223
|
+
// An all-blank body under an opener line gives its first line to the opener on reload, which
|
|
224
|
+
// is the one the trailing line would have added.
|
|
225
|
+
const children = parent.children ?? [];
|
|
226
|
+
const openerTakesLine = wrap?.afterOpenerLine === true &&
|
|
227
|
+
!owner.innerPrefix &&
|
|
228
|
+
children.length > 0 &&
|
|
229
|
+
children.every(isBlankParagraph);
|
|
230
|
+
if (openerTakesLine)
|
|
231
|
+
return undefined;
|
|
232
|
+
return { read: () => owner.innerSuffix ?? '', clear: () => (owner.innerSuffix = '') };
|
|
233
|
+
}
|
|
234
|
+
// ── Settling a spliced window ──
|
|
235
|
+
/** Recompute the separators around a splice, then merge neighbours that now read as one block.
|
|
236
|
+
* `removed` is the only record of which blocks were blank; `tracked` follows the merges. */
|
|
237
|
+
function settleSplicedWindow(parent, at, removed, vacated, added, change, grammar, sharing, tracked) {
|
|
200
238
|
if (!parent.children)
|
|
201
239
|
return change;
|
|
202
|
-
//
|
|
203
|
-
// read after it would leave that growth outside the window
|
|
240
|
+
// Read before the branches below: `settleSeparatorOnBlank` can append the tail line as a
|
|
241
|
+
// block, and a count read after it would leave that growth outside the reported window.
|
|
204
242
|
const beforeMint = parent.children.length;
|
|
205
|
-
handDownVacatedSeparator(parent, at,
|
|
243
|
+
handDownVacatedSeparator(parent, at, vacated, sharing);
|
|
206
244
|
clearRedundantSeparator(parent, at, sharing);
|
|
207
245
|
if (removed.some(isBlankParagraph)) {
|
|
208
|
-
// Both ends: the line was
|
|
246
|
+
// Both ends: the removed blank line was this position's own separator and the one the
|
|
247
|
+
// block below stood on.
|
|
209
248
|
restoreSeparatorAfterBlank(parent, at, sharing);
|
|
210
249
|
if (added > 0)
|
|
211
250
|
restoreSeparatorAfterBlank(parent, at + added, sharing);
|
|
@@ -214,18 +253,39 @@ function settleSplicedWindow(parent, at, removed, added, change, sharing, tracke
|
|
|
214
253
|
else {
|
|
215
254
|
settleSeparatorOnBlank(parent, at + Math.max(added - 1, 0), sharing);
|
|
216
255
|
}
|
|
217
|
-
|
|
218
|
-
|
|
256
|
+
settleEmptyMarkerLists(parent, at, added, sharing);
|
|
257
|
+
dropWrapOfEmptiedBody(parent);
|
|
258
|
+
// Unconditional, and only here: a delete window at the tail names no surviving block, and
|
|
259
|
+
// the question is about the parent's last block whatever the window.
|
|
219
260
|
materializeTailSuffix(parent, sharing);
|
|
220
261
|
const widened = widenForTailMint(change, beforeMint, parent.children.length);
|
|
221
|
-
//
|
|
222
|
-
// it. A
|
|
223
|
-
|
|
224
|
-
// A one-
|
|
225
|
-
//
|
|
262
|
+
// Merging neighbours is part of settling, not a rule each caller repeats, so a new caller
|
|
263
|
+
// inherits it. A write that reports `noop` splices no window and is asked nothing.
|
|
264
|
+
const absorbed = absorbWindowSeams(parent, at, added, at, widened, grammar, sharing, tracked,
|
|
265
|
+
// A one-block window names the block whose bytes changed, which lets the join above it be
|
|
266
|
+
// refused on that block's first line alone; a wider window names no single block.
|
|
226
267
|
added === 1 ? at : undefined).change;
|
|
268
|
+
// The parent's trailing line is asked again: a merge can turn the last block blank, and a
|
|
269
|
+
// blank last block is what makes that line a block of its own.
|
|
270
|
+
const beforeTailMint = parent.children.length;
|
|
271
|
+
materializeTailSuffix(parent, sharing);
|
|
272
|
+
return widenForTailMint(absorbed, beforeTailMint, parent.children.length);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* A list landing under a paragraph with an empty first item, or left there by the splice, takes
|
|
276
|
+
* the blank line that keeps it a list; typing writes the same line when it rebuilds the list.
|
|
277
|
+
*/
|
|
278
|
+
function settleEmptyMarkerLists(parent, at, added, sharing) {
|
|
279
|
+
for (let i = at; i <= at + added && i < (parent.children?.length ?? 0); i++) {
|
|
280
|
+
if (!lacksSublistSeparator(parent.children, i))
|
|
281
|
+
continue;
|
|
282
|
+
if (sharing)
|
|
283
|
+
ensureUnsharedChild(parent, i, sharing);
|
|
284
|
+
settleSublistSeparator(parent.children, i);
|
|
285
|
+
}
|
|
227
286
|
}
|
|
228
|
-
/**
|
|
287
|
+
/** The block that takes the vacated position inherits its separator when it has none of its own
|
|
288
|
+
* ({@link deleteNode}'s rule). */
|
|
229
289
|
function handDownVacatedSeparator(parent, at, vacated, sharing) {
|
|
230
290
|
retireChildSpans(parent);
|
|
231
291
|
const heir = parent.children?.[at];
|
|
@@ -235,23 +295,26 @@ function handDownVacatedSeparator(parent, at, vacated, sharing) {
|
|
|
235
295
|
owned.leadingTrivia = vacated;
|
|
236
296
|
}
|
|
237
297
|
/**
|
|
238
|
-
* The commit
|
|
239
|
-
*
|
|
240
|
-
* so a coarse descriptor over an in-place write settles as one.
|
|
298
|
+
* The commit's entry point: recompute the separators around `change`'s window against `before`,
|
|
299
|
+
* the children before the mutation. A node that survives inside the window counts as kept.
|
|
241
300
|
*/
|
|
242
|
-
export function settleSeparator(parent, before, change, sharing, tracked) {
|
|
301
|
+
export function settleSeparator(parent, before, change, grammar, sharing, tracked) {
|
|
243
302
|
const window = splicedWindow(change);
|
|
244
303
|
const children = parent.children;
|
|
245
304
|
if (!window || !children)
|
|
246
305
|
return change;
|
|
247
|
-
//
|
|
248
|
-
//
|
|
306
|
+
// Checked here, before any branch: a window the mutation mis-derived reads `before` out of
|
|
307
|
+
// bounds and hands the branches a negative span, which each would silently clamp.
|
|
249
308
|
assertInvariant('structural-descriptor', () => checkStructuralDescriptor(change, before.length));
|
|
250
309
|
const survivors = new Set(children.slice(window.at, window.at + window.added));
|
|
251
310
|
const removed = before
|
|
252
311
|
.slice(window.at, window.at + window.removed)
|
|
253
312
|
.filter((node) => !survivors.has(node));
|
|
254
|
-
|
|
313
|
+
// Only a block removed from the window's first position leaves a separator behind there; one
|
|
314
|
+
// absorbed below a surviving block (a forward join) takes its separator with it.
|
|
315
|
+
const first = before[window.at];
|
|
316
|
+
const vacated = first && !survivors.has(first) ? first.leadingTrivia : '';
|
|
317
|
+
return settleSplicedWindow(parent, window.at, removed, vacated, window.added, change, grammar, sharing, tracked);
|
|
255
318
|
}
|
|
256
319
|
function splicedWindow(change) {
|
|
257
320
|
switch (change.op) {
|
|
@@ -266,29 +329,28 @@ function splicedWindow(change) {
|
|
|
266
329
|
}
|
|
267
330
|
}
|
|
268
331
|
/**
|
|
269
|
-
*
|
|
270
|
-
* the live tree
|
|
332
|
+
* {@link settleSeparator} for a splice outside a commit scope, into a container found by walking
|
|
333
|
+
* the live tree; `spliceChildren` keeps its `childIds` in step.
|
|
271
334
|
*/
|
|
272
|
-
export function spliceChildrenSettled(parent, at, removeCount, replacement, sharing) {
|
|
335
|
+
export function spliceChildrenSettled(parent, at, removeCount, replacement, grammar, sharing) {
|
|
273
336
|
const children = parent.children;
|
|
274
337
|
if (!children || at < 0 || at > children.length)
|
|
275
338
|
return;
|
|
276
339
|
const removed = children.slice(at, at + removeCount);
|
|
277
340
|
spliceChildren(parent, at, removeCount, replacement);
|
|
278
|
-
// `noop` in
|
|
279
|
-
//
|
|
280
|
-
const settled = settleSplicedWindow(parent, at, removed, replacement.length, { op: 'noop' }, sharing);
|
|
341
|
+
// `noop` goes in so the result describes the fix-up alone: `spliceChildren` already applied
|
|
342
|
+
// this function's own splice to `childIds`, and outside a commit scope nothing else writes them.
|
|
343
|
+
const settled = settleSplicedWindow(parent, at, removed, removed[0]?.leadingTrivia ?? '', replacement.length, { op: 'noop' }, grammar, sharing);
|
|
281
344
|
const ids = parent.childIds;
|
|
282
345
|
if (ids)
|
|
283
346
|
applyStructuralChangeToIdsRefs(settled, ids, new Array(ids.length));
|
|
284
347
|
}
|
|
285
348
|
/**
|
|
286
|
-
*
|
|
287
|
-
*
|
|
288
|
-
* is transparent to a container's continuation, so the window anchors at the nearest non-blank
|
|
289
|
-
* block above the seam, never below `floor`, and cascades.
|
|
349
|
+
* Merge neighbours while their joined bytes reload as fewer blocks or move content into the head;
|
|
350
|
+
* blank lines don't end a container, so the window starts at the nearest non-blank block above.
|
|
290
351
|
*/
|
|
291
|
-
export function absorbSeamReading(parent, seamLeft, floor, sharing, tracked, headProbe, onBeforeSplice) {
|
|
352
|
+
export function absorbSeamReading(parent, seamLeft, floor, grammar, sharing, tracked, headProbe, onBeforeSplice) {
|
|
353
|
+
const read = (bytes) => readBlocks(bytes, { grammar, scope: 'fragment' });
|
|
292
354
|
const children = parent.children;
|
|
293
355
|
if (seamLeft < 0)
|
|
294
356
|
return { at: 0, span: 0, eaten: 0, spliced: false };
|
|
@@ -299,36 +361,46 @@ export function absorbSeamReading(parent, seamLeft, floor, sharing, tracked, hea
|
|
|
299
361
|
let span = seamLeft - at + 1;
|
|
300
362
|
let eaten = 0;
|
|
301
363
|
let spliced = false;
|
|
302
|
-
// Only the first pass: a
|
|
364
|
+
// Only on the first pass: a merge re-divides the window, so the index is stale after one.
|
|
303
365
|
let probe = headProbe;
|
|
304
366
|
for (;;) {
|
|
305
|
-
// The
|
|
306
|
-
//
|
|
367
|
+
// The window's far edge crosses a blank run too: the absorbed content sits on the run's
|
|
368
|
+
// far side (a list continues into indented code across any number of blank lines).
|
|
307
369
|
let right = at + span;
|
|
308
370
|
while (right < children.length && isBlankParagraph(children[right]))
|
|
309
371
|
right++;
|
|
310
372
|
const window = children.slice(at, Math.min(right + 1, children.length));
|
|
311
373
|
if (window.length <= span || window.length < 2)
|
|
312
374
|
break;
|
|
313
|
-
|
|
375
|
+
if (separateTableFollower(parent, right, sharing, grammar))
|
|
376
|
+
break;
|
|
377
|
+
// A context-dependent kind has no standalone reading, so a join touching it cannot be asked.
|
|
314
378
|
if (window.some((node) => tryGetBlockKindDescriptor(node.kind)?.contextDependentKind))
|
|
315
379
|
break;
|
|
316
|
-
if (probe !== undefined && declinesOnHeadLine(window, probe - at))
|
|
380
|
+
if (probe !== undefined && declinesOnHeadLine(window, probe - at, read))
|
|
317
381
|
break;
|
|
318
382
|
probe = undefined;
|
|
319
|
-
const
|
|
383
|
+
const bytes = joinedWindowBytes(window, window.length);
|
|
384
|
+
const reparsed = read(bytes);
|
|
320
385
|
const blocks = reparsed.children;
|
|
321
|
-
|
|
386
|
+
// Content blocks only: the blank lines an absorbed block held come back as blank blocks.
|
|
387
|
+
if (blocks.length === 0 || contentCount(blocks) > contentCount(window))
|
|
322
388
|
break;
|
|
323
|
-
// A
|
|
389
|
+
// A count that did not drop is still a merge when the head took content from the block
|
|
390
|
+
// below: a blank run inside that block stays blank blocks while the rest moves up.
|
|
391
|
+
if (blocks.length >= window.length && !headTookContent(blocks[0], window))
|
|
392
|
+
break;
|
|
393
|
+
// A merge may promote the head beyond what its bytes carry alone (a paragraph under the
|
|
324
394
|
// setext underline below it), so what must survive is the head's own reading, not its kind.
|
|
325
|
-
if (blocks[0].kind !== window[0].kind && !readsAsItselfAlone(window[0]))
|
|
395
|
+
if (blocks[0].kind !== window[0].kind && !readsAsItselfAlone(window[0], read))
|
|
326
396
|
break;
|
|
327
397
|
onBeforeSplice?.();
|
|
328
398
|
absorbFragmentPeel(parent, at + window.length, reparsed.suffix, blocks, sharing);
|
|
329
399
|
blocks[0].leadingTrivia = window[0].leadingTrivia;
|
|
400
|
+
// The window joins two blocks at least, so its bytes hold the document's line ending.
|
|
401
|
+
const lineEnding = firstLineEnding(bytes) ?? '\n';
|
|
330
402
|
for (const block of blocks) {
|
|
331
|
-
ensureEditableContainers(block);
|
|
403
|
+
ensureEditableContainers(block, lineEnding);
|
|
332
404
|
if (sharing)
|
|
333
405
|
sharing.stamp(block);
|
|
334
406
|
assignChildIdsDeep(block);
|
|
@@ -343,20 +415,41 @@ export function absorbSeamReading(parent, seamLeft, floor, sharing, tracked, hea
|
|
|
343
415
|
return { at, span, eaten, spliced };
|
|
344
416
|
}
|
|
345
417
|
/**
|
|
346
|
-
*
|
|
347
|
-
*
|
|
348
|
-
* children a document parse does NOT reproduce declines the seam question.
|
|
418
|
+
* Give a block an edit left right under a table a blank line, or the reload reads its first line
|
|
419
|
+
* as one more row; the edit made the block, so it stays that block.
|
|
349
420
|
*/
|
|
350
|
-
function
|
|
351
|
-
const
|
|
421
|
+
function separateTableFollower(parent, index, sharing, grammar) {
|
|
422
|
+
const follower = parent.children[index];
|
|
423
|
+
if (parent.children[index - 1]?.kind !== 'table' || follower.leadingTrivia !== '')
|
|
424
|
+
return false;
|
|
425
|
+
// All of the follower's lines, not its first alone: an opener can need a later one to open.
|
|
426
|
+
const lines = splitLines(follower.raw);
|
|
427
|
+
if (lines.length === 0)
|
|
428
|
+
return false;
|
|
429
|
+
if (!tableTakesLine(lines, 0, lines.length, grammar))
|
|
430
|
+
return false;
|
|
431
|
+
retireChildSpans(parent);
|
|
432
|
+
mintSeparator(parent, index, sharing);
|
|
433
|
+
return true;
|
|
434
|
+
}
|
|
435
|
+
const contentCount = (nodes) => nodes.filter((node) => !isBlankParagraph(node)).length;
|
|
436
|
+
/** Whether the reparse moved content into the head: more than the separating blank line, or,
|
|
437
|
+
* for a container, that line alone, since its body reads an indented one as its own. */
|
|
438
|
+
function headTookContent(head, window) {
|
|
439
|
+
const grew = head.raw.length - window[0].raw.length;
|
|
440
|
+
return grew > window[1].leadingTrivia.length || (head.children !== undefined && grew > 0);
|
|
441
|
+
}
|
|
442
|
+
/** Whether a block's own bytes read back as that block. A container's children never do (an
|
|
443
|
+
* item's bytes read as a list), which keeps them out of the merge. */
|
|
444
|
+
function readsAsItselfAlone(node, read) {
|
|
445
|
+
const alone = read(node.raw).children;
|
|
352
446
|
return alone.length === 1 && alone[0].kind === node.kind;
|
|
353
447
|
}
|
|
354
448
|
/**
|
|
355
|
-
*
|
|
356
|
-
*
|
|
357
|
-
* block opening here opens in the full join too; a pass falls through to the real parse.
|
|
449
|
+
* A cheap refusal for a window ending in the changed block, parsing only that block's first line:
|
|
450
|
+
* block parsing scans lines left to right, so a block that opens here opens in the full join too.
|
|
358
451
|
*/
|
|
359
|
-
function declinesOnHeadLine(window, member) {
|
|
452
|
+
function declinesOnHeadLine(window, member, read) {
|
|
360
453
|
if (member <= 0 || member !== window.length - 1)
|
|
361
454
|
return false;
|
|
362
455
|
const raw = window[member].raw;
|
|
@@ -364,10 +457,8 @@ function declinesOnHeadLine(window, member) {
|
|
|
364
457
|
const joined = joinedWindowBytes(window, member) +
|
|
365
458
|
window[member].leadingTrivia +
|
|
366
459
|
(nl < 0 ? raw : raw.slice(0, nl + 1));
|
|
367
|
-
return
|
|
460
|
+
return read(joined).children.length >= window.length;
|
|
368
461
|
}
|
|
369
|
-
/** How a fold reads a window: the head's raw, then each of the next `count - 1` members'
|
|
370
|
-
* leading trivia and raw. */
|
|
371
462
|
function joinedWindowBytes(window, count) {
|
|
372
463
|
let joined = window[0].raw;
|
|
373
464
|
for (let i = 1; i < count; i++)
|
|
@@ -375,8 +466,8 @@ function joinedWindowBytes(window, count) {
|
|
|
375
466
|
return joined;
|
|
376
467
|
}
|
|
377
468
|
/**
|
|
378
|
-
* Where a byte position inside the
|
|
379
|
-
* joined bytes, and a position past the window only shifts by
|
|
469
|
+
* Where a byte position inside the merged window ends up: the merge's reparse re-divides the
|
|
470
|
+
* joined bytes, and a position past the window only shifts by the blocks the merge ate.
|
|
380
471
|
*/
|
|
381
472
|
function retrackThroughFold(tracked, at, window, blocks) {
|
|
382
473
|
const member = tracked.index - at;
|
|
@@ -397,11 +488,8 @@ function retrackThroughFold(tracked, at, window, blocks) {
|
|
|
397
488
|
tracked.index = at + landed.index;
|
|
398
489
|
tracked.offset = landed.offset;
|
|
399
490
|
}
|
|
400
|
-
/**
|
|
401
|
-
*
|
|
402
|
-
* local display offset. An offset inside inter-block trivia lands at the next block's start;
|
|
403
|
-
* past-the-end clamps to the last.
|
|
404
|
-
*/
|
|
491
|
+
/** The block a caret offset into the committed bytes falls in, and its offset there. An offset in
|
|
492
|
+
* the blank lines between blocks lands at the next block's start. */
|
|
405
493
|
export function focusTargetInReplacement(nodes, offset) {
|
|
406
494
|
let pos = 0;
|
|
407
495
|
for (let i = 0; i < nodes.length; i++) {
|
|
@@ -415,19 +503,15 @@ export function focusTargetInReplacement(nodes, offset) {
|
|
|
415
503
|
const last = nodes.length - 1;
|
|
416
504
|
return { index: last, offset: trimTrailingLineEnding(nodes[last].raw).length };
|
|
417
505
|
}
|
|
418
|
-
/**
|
|
419
|
-
*
|
|
420
|
-
|
|
421
|
-
* cascades downward. `headProbe` names the one block whose bytes changed, letting each ask
|
|
422
|
-
* decline on its first line alone; dropped once anything folds, since its index has moved.
|
|
423
|
-
*/
|
|
424
|
-
export function absorbWindowSeams(parent, at, added, landing, change, sharing, tracked, headProbe, onBeforeSplice) {
|
|
506
|
+
/** Merge across every join the splice at `at` disturbed, the joins inside the window included,
|
|
507
|
+
* since a move can break a join that was correct. `headProbe` names the one changed block. */
|
|
508
|
+
export function absorbWindowSeams(parent, at, added, landing, change, grammar, sharing, tracked, headProbe, onBeforeSplice) {
|
|
425
509
|
let settled = null;
|
|
426
510
|
let moved = landing;
|
|
427
511
|
let seamLeft = at - 1;
|
|
428
512
|
let last = at + added - 1;
|
|
429
513
|
while (seamLeft <= last) {
|
|
430
|
-
const seam = absorbSeamReading(parent, seamLeft, 0, sharing, tracked, settled ? undefined : headProbe, onBeforeSplice);
|
|
514
|
+
const seam = absorbSeamReading(parent, seamLeft, 0, grammar, sharing, tracked, settled ? undefined : headProbe, onBeforeSplice);
|
|
431
515
|
if (!seam.spliced) {
|
|
432
516
|
seamLeft++;
|
|
433
517
|
continue;
|
|
@@ -441,8 +525,8 @@ export function absorbWindowSeams(parent, at, added, landing, change, sharing, t
|
|
|
441
525
|
return { change, landing: moved };
|
|
442
526
|
return { change: foldAbsorbIntoChange(change, settled), landing: moved };
|
|
443
527
|
}
|
|
444
|
-
/** Two
|
|
445
|
-
* right, so `later` never
|
|
528
|
+
/** Two merges as one window, which is what a change descriptor reports. The walk is left to
|
|
529
|
+
* right, so `later` never starts above `earlier`'s post-splice span. */
|
|
446
530
|
function unionAbsorptions(earlier, later) {
|
|
447
531
|
return {
|
|
448
532
|
at: earlier.at,
|
|
@@ -451,18 +535,15 @@ function unionAbsorptions(earlier, later) {
|
|
|
451
535
|
spliced: true
|
|
452
536
|
};
|
|
453
537
|
}
|
|
454
|
-
/** Where `index` sits once `seam`
|
|
538
|
+
/** Where `index` sits once `seam` merged: a position inside the absorbed span collapses into it. */
|
|
455
539
|
function indexAfterAbsorb(index, seam) {
|
|
456
540
|
if (index < seam.at)
|
|
457
541
|
return index;
|
|
458
542
|
const absorbedTo = seam.at + seam.span + seam.eaten;
|
|
459
543
|
return index >= absorbedTo ? index - seam.eaten : Math.min(index, seam.at + seam.span - 1);
|
|
460
544
|
}
|
|
461
|
-
/**
|
|
462
|
-
*
|
|
463
|
-
* reports: `count` counts pre-write slots, so the union's span converts back across whatever
|
|
464
|
-
* the write itself added or removed.
|
|
465
|
-
*/
|
|
545
|
+
/** The merged window and the write's own as one contiguous change; `count` counts positions
|
|
546
|
+
* before the write, so the span converts back across what the write added or removed. */
|
|
466
547
|
function foldAbsorbIntoChange(change, seam) {
|
|
467
548
|
const absorbedTo = seam.at + seam.span + seam.eaten;
|
|
468
549
|
if (change.op === 'noop') {
|
|
@@ -488,18 +569,15 @@ function foldAbsorbIntoChange(change, seam) {
|
|
|
488
569
|
idMap: composeFoldIdMap(change, seam, { lo, count, newCount, written, removed })
|
|
489
570
|
};
|
|
490
571
|
}
|
|
491
|
-
/**
|
|
492
|
-
*
|
|
493
|
-
* put there, so its id composes through both steps instead of resetting. Slot 0 keeps the head
|
|
494
|
-
* mapping wherever the walk has none, since a fold EXTENDS its head, kind promotion included.
|
|
495
|
-
*/
|
|
572
|
+
/** A position the merge did not re-create keeps its block's id through both steps. Position 0
|
|
573
|
+
* always maps to the head, since a merge extends its head, even when it changes its kind. */
|
|
496
574
|
function composeFoldIdMap(change, seam, window) {
|
|
497
575
|
const idMap = {};
|
|
498
576
|
for (let slot = 0; slot < window.newCount; slot++) {
|
|
499
577
|
const index = window.lo + slot;
|
|
500
578
|
if (index >= seam.at && index < seam.at + seam.span)
|
|
501
579
|
continue;
|
|
502
|
-
// Back through the
|
|
580
|
+
// Back through the merge: a position past the absorbed span sat `eaten` further down before it.
|
|
503
581
|
const spliced = index < seam.at ? index : index + seam.eaten;
|
|
504
582
|
const old = preChangeIndex(change, spliced, window);
|
|
505
583
|
if (old === null)
|
|
@@ -512,7 +590,8 @@ function composeFoldIdMap(change, seam, window) {
|
|
|
512
590
|
idMap[0] = 0;
|
|
513
591
|
return idMap;
|
|
514
592
|
}
|
|
515
|
-
/** Where `spliced` (a post-change index) stood before the change, or null for a
|
|
593
|
+
/** Where `spliced` (a post-change index) stood before the change, or null for a block the change
|
|
594
|
+
* created. */
|
|
516
595
|
function preChangeIndex(change, spliced, window) {
|
|
517
596
|
if (change.op === 'noop')
|
|
518
597
|
return spliced;
|
|
@@ -523,29 +602,31 @@ function preChangeIndex(change, spliced, window) {
|
|
|
523
602
|
const inherited = change.op === 'replace' ? change.idMap?.[spliced - change.at] : undefined;
|
|
524
603
|
return inherited === undefined ? null : change.at + inherited;
|
|
525
604
|
}
|
|
526
|
-
/**
|
|
527
|
-
*
|
|
528
|
-
* last block's raw, the single-slot sink's rule; mid-document it joins the follower's run, where
|
|
529
|
-
* one line separates and every later one is a block of its own (syntax-tree.md § Blank lines).
|
|
530
|
-
*/
|
|
605
|
+
/** The fragment parse's trailing blank run stays in the last block's raw at the parent's tail and
|
|
606
|
+
* joins the follower's run elsewhere (`docs/design/syntax-tree.md` § Blank lines). */
|
|
531
607
|
function absorbFragmentPeel(parent, followerIndex, peel, blocks, sharing) {
|
|
532
608
|
const follower = parent.children[followerIndex];
|
|
533
609
|
if (!follower) {
|
|
534
610
|
blocks[blocks.length - 1].raw += peel;
|
|
535
611
|
return;
|
|
536
612
|
}
|
|
537
|
-
|
|
613
|
+
// Blocks ending blank already hold the run's one separating line, so every line of the
|
|
614
|
+
// follower's own becomes a blank block of the run instead of a second separator.
|
|
615
|
+
const runSeparated = isBlankParagraph(blocks[blocks.length - 1]);
|
|
616
|
+
if (peel === '' && !(runSeparated && follower.leadingTrivia !== ''))
|
|
538
617
|
return;
|
|
539
618
|
const lines = blankLinesOf(peel + follower.leadingTrivia);
|
|
540
619
|
const owned = sharing ? ensureUnsharedChild(parent, followerIndex, sharing) : follower;
|
|
541
|
-
owned.leadingTrivia = lines.length > 1 ? '' : lines[0];
|
|
542
|
-
|
|
543
|
-
|
|
620
|
+
owned.leadingTrivia = lines.length > 1 || runSeparated ? '' : lines[0];
|
|
621
|
+
const first = runSeparated ? 0 : 1;
|
|
622
|
+
for (let i = first; i < lines.length; i++) {
|
|
623
|
+
const trivia = !runSeparated && i === 1 ? lines[0] : '';
|
|
624
|
+
blocks.push({ kind: 'paragraph', leadingTrivia: trivia, raw: lines[i] });
|
|
544
625
|
}
|
|
545
626
|
}
|
|
546
627
|
/** A blank run split back into the lines it is made of, each keeping its own ending. */
|
|
547
628
|
const blankLinesOf = (run) => run.match(/[^\n]*\n|[^\n]+$/g) ?? [];
|
|
548
|
-
/** The
|
|
629
|
+
/** The tail line that became a block, reported inside the caller's one contiguous window. */
|
|
549
630
|
export function widenForTailMint(change, before, after) {
|
|
550
631
|
const grown = after - before;
|
|
551
632
|
if (grown === 0)
|
|
@@ -558,16 +639,18 @@ export function widenForTailMint(change, before, after) {
|
|
|
558
639
|
if (change.op === 'replace' && change.at + change.newCount === before) {
|
|
559
640
|
return { ...change, newCount: change.newCount + grown };
|
|
560
641
|
}
|
|
561
|
-
// A delete that took the tail vacated the
|
|
642
|
+
// A delete that took the tail vacated the position the new block lands in, so the two are
|
|
643
|
+
// one window.
|
|
562
644
|
if (change.op === 'delete' && change.at === before) {
|
|
563
645
|
return { op: 'replace', at: change.at, count: change.count, newCount: grown };
|
|
564
646
|
}
|
|
565
|
-
// The
|
|
566
|
-
// span describes both; the parallel arrays would drift either way this widened it.
|
|
647
|
+
// The new block landed past a window that does not reach the tail, so no single contiguous
|
|
648
|
+
// span describes both; the parallel id arrays would drift either way this widened it.
|
|
567
649
|
devWarn('tree-ops', 'a tail suffix materialized outside the reported window');
|
|
568
650
|
return change;
|
|
569
651
|
}
|
|
570
|
-
/**
|
|
652
|
+
/** Give the block at `index` a blank line where one separates anything; the line reuses the
|
|
653
|
+
* ending of the block above, which is the document's. */
|
|
571
654
|
function mintSeparator(parent, index, sharing) {
|
|
572
655
|
const children = parent.children;
|
|
573
656
|
if (!children || index <= bodyStartIndex(parent))
|
|
@@ -577,49 +660,48 @@ function mintSeparator(parent, index, sharing) {
|
|
|
577
660
|
const owned = sharing
|
|
578
661
|
? ensureUnsharedChild(parent, index, sharing)
|
|
579
662
|
: children[index];
|
|
580
|
-
owned.leadingTrivia =
|
|
663
|
+
owned.leadingTrivia = ownTrailingLineEnding(children[index - 1].raw);
|
|
581
664
|
}
|
|
582
|
-
/**
|
|
665
|
+
/** A container's reserved title child is not a body block, so the body starts past it. */
|
|
583
666
|
function bodyStartIndex(parent) {
|
|
584
667
|
return bodyStartFor(ownerKindNameOf(parent));
|
|
585
668
|
}
|
|
586
|
-
/** The container's declared body wrap, whichever shape names
|
|
669
|
+
/** The owning container's declared body wrap, whichever parent shape names it. */
|
|
587
670
|
function bodyWrapOf(parent) {
|
|
588
671
|
const kind = ownerKindNameOf(parent);
|
|
589
672
|
if (kind === undefined)
|
|
590
673
|
return undefined;
|
|
591
674
|
return tryGetBlockKindDescriptor(kind)?.bodyWrap;
|
|
592
675
|
}
|
|
593
|
-
/** The node
|
|
676
|
+
/** The node holding `innerPrefix`/`innerSuffix`: the owner the caller named, or the parent itself
|
|
677
|
+
* when it is a node. */
|
|
594
678
|
function wrapSlotsOf(parent) {
|
|
595
679
|
return ownerNodeOf(parent);
|
|
596
680
|
}
|
|
597
|
-
/** The container node these children belong to, where the caller
|
|
681
|
+
/** The container node these children belong to, where the caller named one. */
|
|
598
682
|
function ownerNodeOf(parent) {
|
|
599
683
|
return parent.owner ?? ('raw' in parent ? parent : undefined);
|
|
600
684
|
}
|
|
601
685
|
/**
|
|
602
|
-
* Every
|
|
603
|
-
* shape
|
|
686
|
+
* Every separator write here changes bytes the owner's child spans describe without changing the
|
|
687
|
+
* children's shape, so the spans are dropped here and the next rebuild re-derives them.
|
|
604
688
|
*/
|
|
605
689
|
function retireChildSpans(parent) {
|
|
606
690
|
const owner = ownerNodeOf(parent);
|
|
607
691
|
if (owner)
|
|
608
692
|
dropChildSpans(owner);
|
|
609
693
|
}
|
|
610
|
-
/** The kind whose body these children are: the
|
|
611
|
-
function ownerKindNameOf(parent) {
|
|
612
|
-
return '
|
|
694
|
+
/** The kind whose body these children are: the named owner's, or the parent node's own. */
|
|
695
|
+
export function ownerKindNameOf(parent) {
|
|
696
|
+
return 'owner' in parent ? parent.owner?.kind : parent.kind;
|
|
613
697
|
}
|
|
614
698
|
function bodyStartFor(kind) {
|
|
615
699
|
if (kind === undefined)
|
|
616
700
|
return 0;
|
|
617
701
|
return tryGetBlockKindDescriptor(kind)?.reservedChrome ? 1 : 0;
|
|
618
702
|
}
|
|
619
|
-
/**
|
|
620
|
-
*
|
|
621
|
-
* so a separator freed above the body head is that line: hand it over, or the peel eats the head.
|
|
622
|
-
*/
|
|
703
|
+
/** The parser keeps the blank line after a fenced container's opener in `innerPrefix`, so a
|
|
704
|
+
* separator freed at the body head moves there, or the reload takes the head's own line. */
|
|
623
705
|
function absorbWrapPrefix(parent, bodyStart, index, freed) {
|
|
624
706
|
const slots = wrapSlotsOf(parent);
|
|
625
707
|
if (!slots || (slots.innerPrefix ?? '') !== '')
|
|
@@ -631,15 +713,12 @@ function absorbWrapPrefix(parent, bodyStart, index, freed) {
|
|
|
631
713
|
return;
|
|
632
714
|
if (index !== bodyStart && !isBlankParagraph(head))
|
|
633
715
|
return;
|
|
634
|
-
slots.innerPrefix =
|
|
716
|
+
slots.innerPrefix = ownTrailingLineEnding(freed);
|
|
635
717
|
}
|
|
636
718
|
// ── Delete ──
|
|
637
|
-
/**
|
|
638
|
-
*
|
|
639
|
-
|
|
640
|
-
* owner's wrap slots; the successor's trivia is the op's only in-place write.
|
|
641
|
-
*/
|
|
642
|
-
export function deleteNode(parent, blockIndex, sharing) {
|
|
719
|
+
/** Remove the node at `blockIndex`, leaving its successor separated once and no more. Takes
|
|
720
|
+
* {@link BodyParentArg} since the fix-up can move a freed line into the owner's `innerPrefix`. */
|
|
721
|
+
export function deleteNode(parent, blockIndex, grammar, sharing, tracked) {
|
|
643
722
|
if (blockIndex < 0 || blockIndex >= parent.children.length)
|
|
644
723
|
return { op: 'noop' };
|
|
645
724
|
const deleted = parent.children[blockIndex];
|
|
@@ -653,8 +732,8 @@ export function deleteNode(parent, blockIndex, sharing) {
|
|
|
653
732
|
}
|
|
654
733
|
parent.children.splice(blockIndex, 1);
|
|
655
734
|
clearRedundantSeparator(parent, blockIndex, sharing);
|
|
656
|
-
//
|
|
735
|
+
// Both of the survivor's edges: the delete puts it beside a new follower, and a merge that
|
|
657
736
|
// rewrote its bytes can equally have stopped it interrupting the block above.
|
|
658
737
|
const survivor = Math.max(blockIndex - 1, 0);
|
|
659
|
-
return absorbWindowSeams(parent, survivor, blockIndex - survivor, blockIndex, { op: 'delete', at: blockIndex, count: 1 }, sharing).change;
|
|
738
|
+
return absorbWindowSeams(parent, survivor, blockIndex - survivor, blockIndex, { op: 'delete', at: blockIndex, count: 1 }, grammar, sharing, tracked).change;
|
|
660
739
|
}
|