@voithos-labs/aragonite 0.10.4 → 0.10.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/a11y-strings.d.ts +11 -5
- package/dist/a11y-strings.js +60 -5
- package/dist/action-contracts.d.ts +242 -155
- package/dist/action-contracts.js +2 -2
- package/dist/active-editor.d.ts +3 -3
- package/dist/active-editor.js +8 -9
- package/dist/ambient/ambient-dom.d.ts +2 -5
- package/dist/ambient/ambient-dom.js +16 -62
- package/dist/assert.js +6 -5
- package/dist/block-component.d.ts +135 -109
- package/dist/block-component.js +30 -22
- package/dist/block-id.d.ts +6 -10
- package/dist/block-id.js +25 -14
- package/dist/bounded-memo.d.ts +5 -5
- package/dist/bounded-memo.js +6 -6
- package/dist/components/BlockDragHandle.svelte +12 -21
- package/dist/components/BlockHost.svelte +56 -134
- package/dist/components/BlockList.svelte +22 -19
- package/dist/components/DecorationOverlay.svelte +9 -10
- package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
- package/dist/components/Editor.svelte +603 -1126
- package/dist/components/Editor.svelte.d.ts +9 -20
- package/dist/components/GapCaret.svelte +26 -59
- package/dist/components/SelectionOverlay.svelte +26 -51
- package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
- package/dist/components/TailInsert.svelte +8 -55
- package/dist/components/TailInsert.svelte.d.ts +4 -6
- package/dist/components/block-content-selector.d.ts +11 -11
- package/dist/components/block-content-selector.js +11 -11
- package/dist/components/block-el-lookup.d.ts +6 -0
- package/dist/components/block-el-lookup.js +27 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
- package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
- package/dist/components/blocks/code/CodeBlock.svelte +255 -276
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
- package/dist/components/blocks/code/CodeBlockRail.svelte +72 -87
- package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
- package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
- package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
- package/dist/components/blocks/code/code-bootstrap.js +29 -34
- package/dist/components/blocks/code/code-context-actions.js +5 -4
- package/dist/components/blocks/code/code-enter.js +2 -2
- package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
- package/dist/components/blocks/code/code-fence-boundary.js +40 -66
- package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
- package/dist/components/blocks/code/code-fence-exit.js +24 -25
- package/dist/components/blocks/code/code-indent.d.ts +2 -2
- package/dist/components/blocks/code/code-indent.js +4 -7
- package/dist/components/blocks/code/code-languages.d.ts +16 -12
- package/dist/components/blocks/code/code-languages.js +57 -39
- package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
- package/dist/components/blocks/code/code-paste-surface.js +9 -18
- package/dist/components/blocks/code/code-renderer.d.ts +21 -5
- package/dist/components/blocks/code/code-renderer.js +90 -125
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
- package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
- package/dist/components/blocks/directive/activate-directives.js +18 -13
- package/dist/components/blocks/editable-leaf.d.ts +50 -74
- package/dist/components/blocks/editable-leaf.js +141 -203
- package/dist/components/blocks/editable-surface.d.ts +96 -100
- package/dist/components/blocks/editable-surface.js +101 -109
- package/dist/components/blocks/list/ListBlock.svelte +45 -90
- package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
- package/dist/components/blocks/list/task-checkbox.js +12 -7
- package/dist/components/blocks/plain-text-backend.d.ts +4 -20
- package/dist/components/blocks/plain-text-backend.js +9 -43
- package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
- package/dist/components/blocks/surface-wiring.svelte.js +15 -34
- package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
- package/dist/components/blocks/table/TableBlock.svelte +100 -165
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
- package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
- package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
- package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
- package/dist/components/blocks/table/cell-pointer.js +49 -71
- package/dist/components/blocks/table/cell-render.d.ts +24 -29
- package/dist/components/blocks/table/cell-render.js +29 -31
- package/dist/components/blocks/table/selected-cells.d.ts +7 -7
- package/dist/components/blocks/table/selected-cells.js +9 -13
- package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
- package/dist/components/blocks/table/table-caret-at-point.js +5 -5
- package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
- package/dist/components/blocks/table/table-cell-paste.js +27 -43
- package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
- package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
- package/dist/components/blocks/table/table-menu-model.js +6 -10
- package/dist/components/blocks/table/table-navigation.js +2 -2
- package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
- package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
- package/dist/components/blocks/text/auto-pair-record.js +51 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +8 -6
- package/dist/components/blocks/text/click-snap-guard.js +10 -7
- package/dist/components/blocks/text/composition-seat.d.ts +17 -14
- package/dist/components/blocks/text/composition-seat.js +11 -11
- package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
- package/dist/components/blocks/text/construct-edge-delete.js +50 -65
- package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
- package/dist/components/blocks/text/construct-reveal.js +13 -14
- package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
- package/dist/components/blocks/text/delimiter-autopair.js +87 -103
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
- package/dist/components/blocks/text/edge-policy-dispatch.js +150 -181
- package/dist/components/blocks/text/edge-seat.d.ts +17 -26
- package/dist/components/blocks/text/edge-seat.js +43 -70
- package/dist/components/blocks/text/link-at-point.d.ts +9 -9
- package/dist/components/blocks/text/link-at-point.js +12 -15
- package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
- package/dist/components/blocks/text/live-join-seam.js +75 -112
- package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
- package/dist/components/blocks/text/live-selection-edit.js +32 -108
- package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
- package/dist/components/blocks/text/live-split-rebalance.js +50 -67
- package/dist/components/blocks/text/marker-completion.d.ts +7 -12
- package/dist/components/blocks/text/marker-completion.js +17 -10
- package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
- package/dist/components/blocks/text/pending-mark-insert.js +30 -49
- package/dist/components/blocks/text/screen-diff.d.ts +5 -15
- package/dist/components/blocks/text/screen-diff.js +5 -19
- package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
- package/dist/components/blocks/text/text-clipboard.js +27 -32
- package/dist/components/blocks/text/text-keydown.d.ts +20 -30
- package/dist/components/blocks/text/text-keydown.js +54 -51
- package/dist/components/blocks/text/text-render.d.ts +25 -35
- package/dist/components/blocks/text/text-render.js +82 -61
- package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
- package/dist/components/blocks/text/widget-adjacency.js +17 -17
- package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
- package/dist/components/blocks/text/widget-interaction.js +212 -199
- package/dist/components/blocks/widget-portal.d.ts +20 -29
- package/dist/components/blocks/widget-portal.js +16 -14
- package/dist/components/built-in-blocks.d.ts +3 -4
- package/dist/components/built-in-blocks.js +17 -18
- package/dist/components/drag-handle.d.ts +12 -35
- package/dist/components/drag-handle.js +22 -68
- package/dist/components/editor-built-ins.d.ts +1 -0
- package/dist/components/editor-built-ins.js +16 -0
- package/dist/components/editor-root-clipboard.d.ts +6 -6
- package/dist/components/editor-root-clipboard.js +16 -27
- package/dist/components/editor-root-document-swap.d.ts +49 -0
- package/dist/components/editor-root-document-swap.js +54 -0
- package/dist/components/editor-root-focus.d.ts +5 -4
- package/dist/components/editor-root-focus.js +51 -22
- package/dist/components/editor-root-focused-surface.d.ts +35 -0
- package/dist/components/editor-root-focused-surface.js +65 -0
- package/dist/components/editor-root-geometry.d.ts +15 -24
- package/dist/components/editor-root-geometry.js +27 -31
- package/dist/components/editor-root-gestures.d.ts +39 -0
- package/dist/components/editor-root-gestures.js +189 -0
- package/dist/components/editor-root-keydown.d.ts +10 -25
- package/dist/components/editor-root-keydown.js +19 -43
- package/dist/components/editor-root-listeners.d.ts +22 -24
- package/dist/components/editor-root-listeners.js +49 -24
- package/dist/components/editor-root-menus.d.ts +51 -0
- package/dist/components/editor-root-menus.js +147 -0
- package/dist/components/editor-root-mode-flip.d.ts +16 -11
- package/dist/components/editor-root-mode-flip.js +36 -34
- package/dist/components/editor-root-scroll-host.d.ts +22 -0
- package/dist/components/editor-root-scroll-host.js +34 -0
- package/dist/components/editor-root-test-surface.d.ts +48 -0
- package/dist/components/editor-root-test-surface.js +6 -0
- package/dist/components/image/ImageOverlayHost.svelte +44 -35
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
- package/dist/components/image/ImageProperties.svelte +37 -41
- package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
- package/dist/components/image/ImageResizeHandles.svelte +14 -26
- package/dist/components/image/image-crop.d.ts +5 -11
- package/dist/components/image/image-crop.js +5 -11
- package/dist/components/image/image-edit-commit.d.ts +19 -16
- package/dist/components/image/image-edit-commit.js +74 -38
- package/dist/components/image/image-resize.d.ts +2 -5
- package/dist/components/image/image-resize.js +3 -6
- package/dist/components/image/image-widget-editing.d.ts +3 -3
- package/dist/components/image/image-widget-editing.js +9 -9
- package/dist/components/image/widget-dom.d.ts +2 -3
- package/dist/components/image/widget-dom.js +19 -24
- package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
- package/dist/components/image/widget-selection-state.svelte.js +26 -19
- package/dist/components/kind-cue.svelte.d.ts +21 -0
- package/dist/components/kind-cue.svelte.js +35 -0
- package/dist/components/link-card/LinkCard.svelte +115 -64
- package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
- package/dist/components/link-card/LinkCardHost.svelte +42 -33
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
- package/dist/components/link-card/link-card-commit.d.ts +16 -19
- package/dist/components/link-card/link-card-commit.js +21 -30
- package/dist/components/link-card/link-card-entry.d.ts +13 -23
- package/dist/components/link-card/link-card-entry.js +16 -24
- package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
- package/dist/components/link-card/link-card-state.svelte.js +2 -2
- package/dist/components/lrd-map-gate.d.ts +4 -11
- package/dist/components/lrd-map-gate.js +5 -11
- package/dist/components/menu/BlockMenu.svelte +20 -81
- package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
- package/dist/components/menu/InlineMenuHost.svelte +191 -0
- package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
- package/dist/components/menu/MenuIcon.svelte +3 -103
- package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
- package/dist/components/menu/SelectionToolbar.svelte +30 -35
- package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
- package/dist/components/menu/clipboard-actions.d.ts +3 -4
- package/dist/components/menu/clipboard-actions.js +3 -4
- package/dist/components/menu/default-context-actions.d.ts +4 -13
- package/dist/components/menu/default-context-actions.js +49 -67
- package/dist/components/menu/flyout-placement.d.ts +2 -2
- package/dist/components/menu/flyout-placement.js +2 -2
- package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
- package/dist/components/menu/menu-presence.svelte.js +19 -0
- package/dist/components/paste-image-arm.d.ts +6 -11
- package/dist/components/paste-image-arm.js +11 -18
- package/dist/components/portal.d.ts +2 -5
- package/dist/components/portal.js +4 -7
- package/dist/core/directive/activate.d.ts +4 -5
- package/dist/core/directive/activate.js +8 -9
- package/dist/core/directive/container-opener.js +13 -12
- package/dist/core/directive/grammar.d.ts +2 -5
- package/dist/core/directive/grammar.js +10 -10
- package/dist/core/directive/kinds.d.ts +4 -7
- package/dist/core/directive/kinds.js +14 -16
- package/dist/core/directive/registry.d.ts +12 -9
- package/dist/core/directive/registry.js +19 -20
- package/dist/core/directive/text-recognizer.d.ts +3 -2
- package/dist/core/directive/text-recognizer.js +5 -9
- package/dist/core/escapable.d.ts +1 -5
- package/dist/core/escapable.js +1 -5
- package/dist/core/inline/backticks.d.ts +3 -4
- package/dist/core/inline/backticks.js +3 -4
- package/dist/core/inline/character-refs.js +2 -1
- package/dist/core/inline/destination-bytes.d.ts +6 -3
- package/dist/core/inline/destination-bytes.js +50 -8
- package/dist/core/inline/entity-widget.d.ts +4 -3
- package/dist/core/inline/entity-widget.js +6 -6
- package/dist/core/inline/format-toggle.d.ts +22 -28
- package/dist/core/inline/format-toggle.js +97 -129
- package/dist/core/inline/html-entities.d.ts +2 -3
- package/dist/core/inline/html-entities.js +2 -3
- package/dist/core/inline/html-tag-grammar.js +6 -2
- package/dist/core/inline/image-dimensions.d.ts +2 -0
- package/dist/core/inline/image-dimensions.js +19 -2
- package/dist/core/inline/image-source-bytes.d.ts +11 -0
- package/dist/core/inline/image-source-bytes.js +71 -0
- package/dist/core/inline/index.d.ts +28 -21
- package/dist/core/inline/index.js +56 -34
- package/dist/core/inline/inline-cache.d.ts +12 -15
- package/dist/core/inline/inline-cache.js +11 -14
- package/dist/core/inline/inline-widgets.d.ts +54 -75
- package/dist/core/inline/inline-widgets.js +54 -62
- package/dist/core/inline/link-destination.d.ts +31 -0
- package/dist/core/inline/link-destination.js +129 -0
- package/dist/core/inline/link-reference-resolver.d.ts +8 -6
- package/dist/core/inline/link-reference-resolver.js +10 -6
- package/dist/core/inline/link-source-bytes.d.ts +31 -0
- package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
- package/dist/core/inline/live-edit/read-back.d.ts +29 -0
- package/dist/core/inline/live-edit/read-back.js +50 -0
- package/dist/core/inline/picture.d.ts +10 -0
- package/dist/core/inline/picture.js +40 -0
- package/dist/core/inline/scan/autolinks.d.ts +7 -8
- package/dist/core/inline/scan/autolinks.js +80 -59
- package/dist/core/inline/scan/brackets.d.ts +2 -2
- package/dist/core/inline/scan/brackets.js +6 -103
- package/dist/core/inline/scan/code-spans.d.ts +4 -0
- package/dist/core/inline/scan/code-spans.js +8 -0
- package/dist/core/inline/scan/emphasis.js +10 -14
- package/dist/core/inline/scan/index.d.ts +3 -1
- package/dist/core/inline/scan/index.js +32 -33
- package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
- package/dist/core/inline/scan/plugin-syntax.js +75 -89
- package/dist/core/inline/scan/scan-state.d.ts +2 -0
- package/dist/core/inline/scan/scan-state.js +1 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
- package/dist/core/inline/scan/simple-nodes.js +2 -5
- package/dist/core/inline/scan/triggers.d.ts +17 -0
- package/dist/core/inline/scan/triggers.js +26 -0
- package/dist/core/inline/scan/url.js +8 -10
- package/dist/core/inline/transparency.d.ts +2 -1
- package/dist/core/inline/transparency.js +31 -15
- package/dist/core/inline/visibility.d.ts +30 -49
- package/dist/core/inline/visibility.js +31 -49
- package/dist/core/inline/walk.d.ts +4 -10
- package/dist/core/inline/walk.js +4 -10
- package/dist/core/inline-render.d.ts +22 -27
- package/dist/core/inline-render.js +51 -60
- package/dist/core/lines.d.ts +67 -26
- package/dist/core/lines.js +164 -33
- package/dist/core/metadata-parity.d.ts +9 -0
- package/dist/core/metadata-parity.js +25 -0
- package/dist/core/node-views.d.ts +7 -6
- package/dist/core/node-views.js +5 -5
- package/dist/core/nodes.d.ts +34 -44
- package/dist/core/nodes.js +4 -12
- package/dist/core/parser.d.ts +27 -34
- package/dist/core/parser.js +53 -67
- package/dist/core/parsers/blockquote.d.ts +5 -8
- package/dist/core/parsers/blockquote.js +11 -10
- package/dist/core/parsers/built-in-openers.d.ts +2 -5
- package/dist/core/parsers/built-in-openers.js +5 -8
- package/dist/core/parsers/fence-syntax.d.ts +36 -7
- package/dist/core/parsers/fence-syntax.js +61 -11
- package/dist/core/parsers/fenced-code.d.ts +16 -0
- package/dist/core/parsers/fenced-code.js +16 -15
- package/dist/core/parsers/heading.d.ts +19 -2
- package/dist/core/parsers/heading.js +50 -2
- package/dist/core/parsers/html-block.d.ts +3 -6
- package/dist/core/parsers/html-block.js +10 -11
- package/dist/core/parsers/indented-code.d.ts +1 -1
- package/dist/core/parsers/indented-code.js +2 -8
- package/dist/core/parsers/link-reference.d.ts +5 -3
- package/dist/core/parsers/link-reference.js +116 -120
- package/dist/core/parsers/list.d.ts +12 -5
- package/dist/core/parsers/list.js +53 -36
- package/dist/core/parsers/paragraph.d.ts +3 -3
- package/dist/core/parsers/paragraph.js +14 -5
- package/dist/core/parsers/table-completion.d.ts +2 -5
- package/dist/core/parsers/table-completion.js +7 -10
- package/dist/core/parsers/table.d.ts +8 -8
- package/dist/core/parsers/table.js +23 -26
- package/dist/core/parsers/thematic-break.js +15 -14
- package/dist/core/paths.d.ts +13 -0
- package/dist/core/paths.js +31 -0
- package/dist/core/terminator-escalation.d.ts +0 -7
- package/dist/core/terminator-escalation.js +5 -8
- package/dist/core/url-policy.d.ts +2 -5
- package/dist/core/url-policy.js +8 -12
- package/dist/cursor/caret-memory.d.ts +34 -0
- package/dist/cursor/caret-memory.js +82 -0
- package/dist/cursor/coordinate-spaces.d.ts +26 -19
- package/dist/cursor/coordinate-spaces.js +32 -20
- package/dist/cursor/dom-walk.d.ts +7 -13
- package/dist/cursor/dom-walk.js +7 -13
- package/dist/cursor/edge-affinity.d.ts +7 -35
- package/dist/cursor/edge-affinity.js +13 -44
- package/dist/cursor/focused-caret.d.ts +6 -8
- package/dist/cursor/focused-caret.js +7 -16
- package/dist/cursor/height-model.d.ts +3 -3
- package/dist/cursor/height-model.js +5 -5
- package/dist/cursor/height-oracle.d.ts +10 -6
- package/dist/cursor/height-oracle.js +26 -74
- package/dist/cursor/observe-resize.d.ts +13 -0
- package/dist/cursor/observe-resize.js +43 -0
- package/dist/cursor/overlay-rects.d.ts +2 -5
- package/dist/cursor/overlay-rects.js +2 -5
- package/dist/cursor/overlay-remeasure.d.ts +6 -7
- package/dist/cursor/overlay-remeasure.js +10 -14
- package/dist/cursor/pending-marks.d.ts +7 -9
- package/dist/cursor/pending-marks.js +6 -27
- package/dist/cursor/point-offset.d.ts +16 -10
- package/dist/cursor/point-offset.js +60 -25
- package/dist/cursor/reveal-source.d.ts +7 -11
- package/dist/cursor/reveal-source.js +10 -18
- package/dist/cursor/scroll-ancestors.d.ts +9 -20
- package/dist/cursor/scroll-ancestors.js +14 -26
- package/dist/cursor/scroll-owner.d.ts +92 -0
- package/dist/cursor/scroll-owner.js +283 -0
- package/dist/cursor/scrollport.d.ts +14 -15
- package/dist/cursor/scrollport.js +7 -13
- package/dist/cursor/sticky-column.d.ts +6 -29
- package/dist/cursor/sticky-column.js +6 -49
- package/dist/cursor/sticky-measure.d.ts +14 -9
- package/dist/cursor/sticky-measure.js +99 -49
- package/dist/cursor/surface-backend.d.ts +41 -0
- package/dist/cursor/surface-backend.js +78 -0
- package/dist/cursor/typography-estimates.d.ts +3 -3
- package/dist/cursor/typography-estimates.js +3 -3
- package/dist/cursor/visual-lines.d.ts +25 -14
- package/dist/cursor/visual-lines.js +45 -46
- package/dist/cursor/widget-edge-snap.d.ts +10 -15
- package/dist/cursor/widget-edge-snap.js +13 -12
- package/dist/cursor/widget-offset.d.ts +110 -104
- package/dist/cursor/widget-offset.js +344 -179
- package/dist/debug/diagnostics-report.d.ts +6 -6
- package/dist/debug/diagnostics-report.js +5 -5
- package/dist/debug/dump-tree.js +2 -2
- package/dist/debug/editor-diagnostics.d.ts +15 -0
- package/dist/debug/editor-diagnostics.js +33 -0
- package/dist/debug/inspect.d.ts +2 -2
- package/dist/debug/inspect.js +4 -4
- package/dist/debug/interaction-trace.d.ts +14 -15
- package/dist/debug/interaction-trace.js +19 -20
- package/dist/debug/operations-log.d.ts +1 -1
- package/dist/debug/operations-log.js +1 -1
- package/dist/decorations/buckets.d.ts +6 -12
- package/dist/decorations/buckets.js +4 -11
- package/dist/decorations/decoration-state.svelte.d.ts +2 -3
- package/dist/decorations/decoration-state.svelte.js +24 -26
- package/dist/decorations/island-dom.d.ts +10 -18
- package/dist/decorations/island-dom.js +25 -50
- package/dist/decorations/reserved-attrs.d.ts +6 -8
- package/dist/decorations/reserved-attrs.js +30 -17
- package/dist/decorations/types.d.ts +6 -7
- package/dist/decorations/types.js +2 -1
- package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
- package/dist/decorations/use-block-decorations.svelte.js +71 -0
- package/dist/decorations/widget-dom.d.ts +3 -3
- package/dist/decorations/widget-dom.js +5 -5
- package/dist/dev-warn.d.ts +5 -2
- package/dist/dev-warn.js +16 -4
- package/dist/editor-actions/ancestry-folds.d.ts +9 -14
- package/dist/editor-actions/ancestry-folds.js +13 -18
- package/dist/editor-actions/block-edit-core.d.ts +49 -22
- package/dist/editor-actions/block-edit-core.js +279 -151
- package/dist/editor-actions/block-edit-scope.d.ts +63 -50
- package/dist/editor-actions/block-edit-scope.js +100 -48
- package/dist/editor-actions/block-edit.d.ts +2 -3
- package/dist/editor-actions/block-edit.js +14 -90
- package/dist/editor-actions/commit/history.d.ts +4 -4
- package/dist/editor-actions/commit/history.js +33 -34
- package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
- package/dist/editor-actions/commit/reading-write-gate.js +56 -0
- package/dist/editor-actions/commit/text-batch.d.ts +7 -11
- package/dist/editor-actions/commit/text-batch.js +6 -7
- package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
- package/dist/editor-actions/commit/undo-controller.js +346 -216
- package/dist/editor-actions/container-block-component.d.ts +32 -51
- package/dist/editor-actions/container-block-component.js +66 -92
- package/dist/editor-actions/container-edit.d.ts +4 -2
- package/dist/editor-actions/container-edit.js +14 -44
- package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
- package/dist/editor-actions/container-exit-overrides.js +19 -21
- package/dist/editor-actions/deps.d.ts +25 -32
- package/dist/editor-actions/enter-completion.d.ts +12 -15
- package/dist/editor-actions/enter-completion.js +49 -51
- package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
- package/dist/editor-actions/focus/focus-dispatch.js +28 -50
- package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
- package/dist/editor-actions/focus/focus-landing.js +15 -14
- package/dist/editor-actions/focus/focus.d.ts +3 -2
- package/dist/editor-actions/focus/focus.js +42 -59
- package/dist/editor-actions/index.d.ts +4 -3
- package/dist/editor-actions/index.js +5 -4
- package/dist/editor-actions/inline-range-commit.d.ts +18 -16
- package/dist/editor-actions/inline-range-commit.js +45 -54
- package/dist/editor-actions/leaf-write.d.ts +11 -0
- package/dist/editor-actions/leaf-write.js +102 -0
- package/dist/editor-actions/list-context.d.ts +9 -10
- package/dist/editor-actions/list-context.js +115 -110
- package/dist/editor-actions/list-overrides.d.ts +13 -5
- package/dist/editor-actions/list-overrides.js +36 -12
- package/dist/editor-actions/merge-fallback.d.ts +10 -16
- package/dist/editor-actions/merge-fallback.js +11 -22
- package/dist/editor-actions/nested/container-actions.d.ts +37 -0
- package/dist/editor-actions/nested/container-actions.js +42 -0
- package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
- package/dist/editor-actions/nested/emptied-container.js +5 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
- package/dist/editor-actions/nested/nested-actions.js +17 -15
- package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
- package/dist/editor-actions/nested/nested-block-edit.js +40 -134
- package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
- package/dist/editor-actions/nested/nested-focus.js +33 -21
- package/dist/editor-actions/paste-coordinator.d.ts +3 -2
- package/dist/editor-actions/paste-coordinator.js +17 -13
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
- package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
- package/dist/editor-actions/plugin/container.d.ts +54 -82
- package/dist/editor-actions/plugin/container.js +105 -188
- package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
- package/dist/editor-actions/plugin/directive-container.js +7 -8
- package/dist/editor-actions/reorder-action.d.ts +7 -12
- package/dist/editor-actions/reorder-action.js +32 -48
- package/dist/editor-actions/reorder-drag.d.ts +12 -8
- package/dist/editor-actions/reorder-drag.js +45 -41
- package/dist/editor-actions/replacement-focus.d.ts +13 -21
- package/dist/editor-actions/replacement-focus.js +32 -33
- package/dist/editor-actions/search-replace.js +71 -67
- package/dist/editor-actions/stored-caret.d.ts +7 -0
- package/dist/editor-actions/stored-caret.js +10 -0
- package/dist/editor-actions/table-context.d.ts +9 -11
- package/dist/editor-actions/table-context.js +70 -93
- package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
- package/dist/editor-actions/unwrap-strategies.js +52 -63
- package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
- package/dist/editor-actions/whole-block-focus-surface.js +43 -53
- package/dist/editor-events.d.ts +25 -29
- package/dist/editor-events.js +17 -28
- package/dist/editor-keys.d.ts +96 -104
- package/dist/editor-keys.js +11 -24
- package/dist/editor-props.d.ts +88 -71
- package/dist/editor-rects.d.ts +23 -34
- package/dist/editor-rects.js +9 -77
- package/dist/env.d.ts +6 -4
- package/dist/env.js +8 -4
- package/dist/index.d.ts +6 -2
- package/dist/index.js +5 -2
- package/dist/inline-menu/inline-menu-session.d.ts +37 -0
- package/dist/inline-menu/inline-menu-session.js +98 -0
- package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
- package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
- package/dist/inline-menu/types.d.ts +77 -0
- package/dist/inline-menu/types.js +7 -0
- package/dist/invariants/child-id-parity.d.ts +23 -0
- package/dist/invariants/child-id-parity.js +39 -0
- package/dist/invariants/commit-paths.d.ts +4 -4
- package/dist/invariants/commit-paths.js +4 -4
- package/dist/invariants/commit-scope.d.ts +4 -4
- package/dist/invariants/commit-scope.js +9 -8
- package/dist/invariants/context-keys.d.ts +2 -5
- package/dist/invariants/context-keys.js +3 -6
- package/dist/invariants/descriptor.d.ts +2 -6
- package/dist/invariants/descriptor.js +2 -6
- package/dist/invariants/inline-transitions.d.ts +9 -16
- package/dist/invariants/inline-transitions.js +10 -18
- package/dist/invariants/install.d.ts +18 -27
- package/dist/invariants/install.js +29 -30
- package/dist/invariants/keeps-a-block.d.ts +7 -0
- package/dist/invariants/keeps-a-block.js +14 -0
- package/dist/invariants/landable-caret.d.ts +5 -7
- package/dist/invariants/landable-caret.js +8 -11
- package/dist/invariants/landing-focus-scroll.d.ts +7 -0
- package/dist/invariants/landing-focus-scroll.js +13 -0
- package/dist/invariants/landing-value.d.ts +13 -0
- package/dist/invariants/landing-value.js +27 -0
- package/dist/invariants/marker-css-parity.d.ts +5 -6
- package/dist/invariants/marker-css-parity.js +11 -12
- package/dist/invariants/measures-in-own-list.d.ts +6 -0
- package/dist/invariants/measures-in-own-list.js +13 -0
- package/dist/invariants/node-shape.d.ts +18 -37
- package/dist/invariants/node-shape.js +123 -79
- package/dist/invariants/open-tail.d.ts +7 -0
- package/dist/invariants/open-tail.js +45 -0
- package/dist/invariants/placement-ends-widget.d.ts +8 -0
- package/dist/invariants/placement-ends-widget.js +13 -0
- package/dist/invariants/registry.d.ts +27 -66
- package/dist/invariants/registry.js +61 -137
- package/dist/invariants/render-fidelity.d.ts +4 -4
- package/dist/invariants/render-fidelity.js +5 -5
- package/dist/invariants/selection-endpoints.d.ts +6 -7
- package/dist/invariants/selection-endpoints.js +18 -16
- package/dist/invariants/single-node-sink.d.ts +4 -5
- package/dist/invariants/single-node-sink.js +4 -5
- package/dist/invariants/snapshot-integrity.d.ts +5 -6
- package/dist/invariants/snapshot-integrity.js +1 -1
- package/dist/invariants/structural-descriptor.d.ts +6 -15
- package/dist/invariants/structural-descriptor.js +6 -15
- package/dist/menu-icons.d.ts +47 -0
- package/dist/menu-icons.js +113 -0
- package/dist/perf/instruments.d.ts +20 -5
- package/dist/perf/instruments.js +35 -15
- package/dist/perf/use-mount-gauge.svelte.js +4 -4
- package/dist/plugin.d.ts +37 -8
- package/dist/plugin.js +100 -77
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
- package/dist/plugins/admonitions/admonition-kind.js +12 -10
- package/dist/plugins/admonitions/convert-document.d.ts +5 -5
- package/dist/plugins/admonitions/convert-document.js +8 -7
- package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
- package/dist/plugins/admonitions/gh-alert.js +21 -22
- package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
- package/dist/plugins/admonitions/github-alert-kind.js +28 -37
- package/dist/plugins/admonitions/index.js +2 -2
- package/dist/plugins/admonitions/kinds.d.ts +1 -1
- package/dist/plugins/admonitions/register.js +11 -2
- package/dist/plugins/details/DetailsBlock.svelte +20 -20
- package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
- package/dist/plugins/details/details-disclosure.svelte.js +6 -7
- package/dist/plugins/details/details-kind.d.ts +6 -7
- package/dist/plugins/details/details-kind.js +44 -59
- package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
- package/dist/plugins/emoji/emoji-recognizer.js +7 -14
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
- package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +3 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
- package/dist/plugins/footnotes/footnote-definition.js +69 -45
- package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
- package/dist/plugins/footnotes/footnote-lookup.js +14 -26
- package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
- package/dist/plugins/footnotes/footnote-numbering.js +22 -31
- package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
- package/dist/plugins/footnotes/footnote-reference.js +8 -13
- package/dist/plugins/footnotes/index.js +2 -3
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
- package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
- package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
- package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/word-char.js +4 -0
- package/dist/plugins/latex/BlockMath.svelte +58 -75
- package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
- package/dist/plugins/latex/MathInline.svelte +10 -9
- package/dist/plugins/latex/flanking.d.ts +1 -0
- package/dist/plugins/latex/flanking.js +3 -0
- package/dist/plugins/latex/index.d.ts +1 -1
- package/dist/plugins/latex/latex-kind.d.ts +4 -4
- package/dist/plugins/latex/latex-kind.js +78 -67
- package/dist/plugins/latex/math-completion.d.ts +1 -1
- package/dist/plugins/latex/math-completion.js +5 -8
- package/dist/plugins/latex/math-layout.d.ts +2 -8
- package/dist/plugins/latex/math-layout.js +0 -9
- package/dist/plugins/latex/math-renderer.d.ts +17 -20
- package/dist/plugins/latex/math-renderer.js +21 -38
- package/dist/plugins/latex/math-source.d.ts +4 -8
- package/dist/plugins/latex/math-source.js +36 -81
- package/dist/plugins/latex/register.d.ts +10 -11
- package/dist/plugins/latex/register.js +24 -10
- package/dist/plugins/latex/renderer.d.ts +9 -10
- package/dist/plugins/latex/renderer.js +9 -24
- package/dist/plugins/mermaid/MermaidBlock.svelte +51 -45
- package/dist/plugins/mermaid/index.js +1 -1
- package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
- package/dist/plugins/mermaid/mermaid-kind.js +30 -47
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
- package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
- package/dist/plugins/mermaid/register.d.ts +3 -3
- package/dist/plugins/mermaid/register.js +5 -5
- package/dist/plugins/mermaid/renderer.d.ts +5 -5
- package/dist/plugins/mermaid/renderer.js +8 -11
- package/dist/plugins/parrot/ParrotBlock.svelte +15 -6
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
- package/dist/plugins/parrot/parrot-plugin.js +3 -3
- package/dist/plugins/slash-commands/filter.d.ts +23 -0
- package/dist/plugins/slash-commands/filter.js +31 -0
- package/dist/plugins/slash-commands/index.d.ts +2 -0
- package/dist/plugins/slash-commands/index.js +2 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
- package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
- package/dist/plugins/slash-commands/slash-source.js +108 -0
- package/dist/plugins/toc/TocBlock.svelte +23 -22
- package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
- package/dist/plugins/toc/heading-outline.d.ts +7 -12
- package/dist/plugins/toc/heading-outline.js +22 -36
- package/dist/plugins/toc/navigation-queue.d.ts +2 -4
- package/dist/plugins/toc/toc-plugin.d.ts +5 -5
- package/dist/plugins/toc/toc-plugin.js +20 -13
- package/dist/presentation-mode.d.ts +15 -23
- package/dist/presentation-mode.js +19 -25
- package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
- package/dist/reactivity/block-list-state.svelte.js +8 -9
- package/dist/reactivity/block-window.svelte.d.ts +12 -6
- package/dist/reactivity/block-window.svelte.js +44 -17
- package/dist/reactivity/child-list.d.ts +34 -0
- package/dist/reactivity/child-list.js +48 -0
- package/dist/reactivity/content-version.svelte.d.ts +4 -7
- package/dist/reactivity/content-version.svelte.js +3 -5
- package/dist/reactivity/hold-across.d.ts +39 -0
- package/dist/reactivity/hold-across.js +57 -0
- package/dist/reactivity/layout-state.svelte.d.ts +27 -0
- package/dist/reactivity/layout-state.svelte.js +51 -0
- package/dist/reactivity/list-tree.d.ts +39 -0
- package/dist/reactivity/list-tree.js +132 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
- package/dist/reactivity/list-windowing.svelte.js +141 -310
- package/dist/reactivity/measure-batch.d.ts +6 -8
- package/dist/reactivity/measure-batch.js +5 -6
- package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
- package/dist/reactivity/publish-ref.svelte.js +21 -85
- package/dist/reactivity/scope-geometry.d.ts +6 -13
- package/dist/reactivity/scope-geometry.js +7 -14
- package/dist/reactivity/state-registry.d.ts +5 -5
- package/dist/reactivity/state-registry.js +11 -15
- package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
- package/dist/reactivity/use-container-windowing.svelte.js +64 -74
- package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
- package/dist/reactivity/use-measured-child.svelte.js +41 -0
- package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
- package/dist/reactivity/use-window-floor.svelte.js +27 -0
- package/dist/reactivity/window-slice.d.ts +4 -4
- package/dist/reactivity/window-slice.js +0 -2
- package/dist/renderer-slot.d.ts +48 -0
- package/dist/renderer-slot.js +85 -0
- package/dist/scan-index.d.ts +4 -4
- package/dist/scan-index.js +4 -4
- package/dist/schema/block-commands.d.ts +69 -54
- package/dist/schema/block-commands.js +91 -104
- package/dist/schema/block-completions.d.ts +16 -19
- package/dist/schema/block-completions.js +25 -32
- package/dist/schema/block-component-registry.d.ts +13 -14
- package/dist/schema/block-component-registry.js +19 -17
- package/dist/schema/block-kind-descriptor.d.ts +234 -168
- package/dist/schema/block-kind-descriptor.js +151 -66
- package/dist/schema/block-openers.d.ts +48 -39
- package/dist/schema/block-openers.js +73 -83
- package/dist/schema/built-in-descriptors.d.ts +3 -5
- package/dist/schema/built-in-descriptors.js +96 -80
- package/dist/schema/child-spans.d.ts +12 -10
- package/dist/schema/child-spans.js +68 -34
- package/dist/schema/closure.d.ts +18 -16
- package/dist/schema/closure.js +24 -14
- package/dist/schema/command-id.d.ts +6 -8
- package/dist/schema/command-id.js +20 -25
- package/dist/schema/commands.d.ts +78 -84
- package/dist/schema/commands.js +152 -117
- package/dist/schema/container-raw.d.ts +51 -11
- package/dist/schema/container-raw.js +143 -14
- package/dist/schema/container-rebuilders.d.ts +17 -15
- package/dist/schema/container-rebuilders.js +30 -22
- package/dist/schema/context-actions.d.ts +25 -13
- package/dist/schema/context-actions.js +32 -17
- package/dist/schema/define-plugin-block.d.ts +8 -6
- package/dist/schema/define-plugin-block.js +6 -4
- package/dist/schema/fenced-code-raw.d.ts +30 -17
- package/dist/schema/fenced-code-raw.js +155 -107
- package/dist/schema/global-commands.d.ts +6 -6
- package/dist/schema/global-commands.js +14 -22
- package/dist/schema/height-estimates.d.ts +31 -0
- package/dist/schema/height-estimates.js +64 -0
- package/dist/schema/inline-construct-policy.d.ts +42 -55
- package/dist/schema/inline-construct-policy.js +36 -35
- package/dist/schema/insert-catalogue.d.ts +30 -0
- package/dist/schema/insert-catalogue.js +95 -0
- package/dist/schema/keybinding-overrides.d.ts +9 -11
- package/dist/schema/keybinding-overrides.js +1 -1
- package/dist/schema/keybindings.d.ts +15 -7
- package/dist/schema/keybindings.js +21 -9
- package/dist/schema/merge-rules.d.ts +5 -7
- package/dist/schema/merge-rules.js +7 -9
- package/dist/schema/opener-priorities.d.ts +4 -4
- package/dist/schema/opener-priorities.js +4 -4
- package/dist/schema/operations.d.ts +8 -10
- package/dist/schema/operations.js +3 -3
- package/dist/schema/page-role.d.ts +14 -0
- package/dist/schema/page-role.js +19 -0
- package/dist/schema/plugin-activation.d.ts +4 -6
- package/dist/schema/plugin-activation.js +12 -10
- package/dist/schema/plugin-editor-context.d.ts +25 -10
- package/dist/schema/plugin-editor-context.js +40 -9
- package/dist/schema/plugin-install.d.ts +49 -17
- package/dist/schema/plugin-install.js +51 -25
- package/dist/schema/plugin-kind.d.ts +12 -8
- package/dist/schema/plugin-kind.js +35 -42
- package/dist/schema/plugin-name.js +3 -3
- package/dist/schema/plugin-registry.d.ts +54 -0
- package/dist/schema/plugin-registry.js +70 -0
- package/dist/schema/reading.d.ts +23 -0
- package/dist/schema/reading.js +7 -0
- package/dist/schema/register-once.d.ts +3 -5
- package/dist/schema/register-once.js +7 -16
- package/dist/schema/registration-checks.d.ts +12 -16
- package/dist/schema/registration-checks.js +35 -51
- package/dist/schema/registration-pairs.d.ts +54 -0
- package/dist/schema/registration-pairs.js +48 -0
- package/dist/schema/registration-pending.d.ts +8 -12
- package/dist/schema/registration-pending.js +9 -9
- package/dist/schema/registry-reset.d.ts +8 -4
- package/dist/schema/registry-reset.js +13 -26
- package/dist/schema/registry-view.d.ts +25 -13
- package/dist/schema/registry-view.js +26 -20
- package/dist/schema/reserved-chords.d.ts +9 -10
- package/dist/schema/reserved-chords.js +63 -80
- package/dist/schema/reserved-chrome.d.ts +12 -11
- package/dist/schema/reserved-chrome.js +15 -11
- package/dist/schema/setext-raw.d.ts +13 -0
- package/dist/schema/setext-raw.js +33 -0
- package/dist/schema/stored-as.d.ts +20 -0
- package/dist/schema/stored-as.js +6 -0
- package/dist/schema/table-cell-raw.d.ts +18 -7
- package/dist/schema/table-cell-raw.js +28 -7
- package/dist/schema/whole-block-unit.d.ts +5 -4
- package/dist/schema/whole-block-unit.js +5 -4
- package/dist/search/document-scan.d.ts +3 -3
- package/dist/search/document-scan.js +2 -2
- package/dist/search/matcher.d.ts +1 -1
- package/dist/search/regex-executor.d.ts +5 -6
- package/dist/search/regex-executor.js +6 -8
- package/dist/search/replace.d.ts +2 -5
- package/dist/search/replace.js +2 -5
- package/dist/search/search-state.svelte.d.ts +5 -5
- package/dist/search/search-state.svelte.js +12 -16
- package/dist/selection/autoscroll.d.ts +6 -9
- package/dist/selection/block-hit-test.d.ts +16 -24
- package/dist/selection/block-hit-test.js +29 -22
- package/dist/selection/caret-doors.d.ts +15 -14
- package/dist/selection/caret-doors.js +37 -26
- package/dist/selection/caret-landing.d.ts +62 -0
- package/dist/selection/caret-landing.js +157 -0
- package/dist/selection/caret-restore.d.ts +17 -10
- package/dist/selection/caret-restore.js +10 -22
- package/dist/selection/caret-target.d.ts +30 -0
- package/dist/selection/caret-target.js +84 -0
- package/dist/selection/char-endpoint-snap.d.ts +6 -10
- package/dist/selection/char-endpoint-snap.js +8 -14
- package/dist/selection/clipboard-text.d.ts +5 -12
- package/dist/selection/clipboard-text.js +69 -172
- package/dist/selection/covered-block.d.ts +6 -8
- package/dist/selection/covered-block.js +8 -19
- package/dist/selection/cross-block/clipboard.d.ts +3 -2
- package/dist/selection/cross-block/clipboard.js +13 -4
- package/dist/selection/cross-block/dispatch.d.ts +47 -43
- package/dist/selection/cross-block/dispatch.js +12 -23
- package/dist/selection/cross-block/format-range.d.ts +18 -21
- package/dist/selection/cross-block/format-range.js +104 -103
- package/dist/selection/cross-block/format-toggle.d.ts +10 -15
- package/dist/selection/cross-block/format-toggle.js +28 -33
- package/dist/selection/cross-block/keydown.d.ts +4 -4
- package/dist/selection/cross-block/keydown.js +92 -125
- package/dist/selection/cross-block/ops.d.ts +19 -34
- package/dist/selection/cross-block/ops.js +110 -95
- package/dist/selection/cross-block/paste.d.ts +2 -3
- package/dist/selection/cross-block/paste.js +59 -96
- package/dist/selection/cross-block/pointer.d.ts +17 -15
- package/dist/selection/cross-block/pointer.js +74 -25
- package/dist/selection/cross-block/type-replace.d.ts +4 -6
- package/dist/selection/cross-block/type-replace.js +51 -134
- package/dist/selection/dead-space-caret.d.ts +19 -30
- package/dist/selection/dead-space-caret.js +70 -88
- package/dist/selection/drag-pointer.d.ts +7 -9
- package/dist/selection/drag-pointer.js +23 -33
- package/dist/selection/gap-caret.d.ts +17 -28
- package/dist/selection/gap-caret.js +14 -26
- package/dist/selection/grid-selection.d.ts +12 -0
- package/dist/selection/grid-selection.js +22 -0
- package/dist/selection/keyboard-extend.d.ts +27 -40
- package/dist/selection/keyboard-extend.js +94 -117
- package/dist/selection/multi-click.d.ts +13 -18
- package/dist/selection/multi-click.js +32 -38
- package/dist/selection/native-bridge.d.ts +29 -39
- package/dist/selection/native-bridge.js +78 -127
- package/dist/selection/nearest-block.d.ts +17 -12
- package/dist/selection/nearest-block.js +37 -18
- package/dist/selection/path-lookup.d.ts +25 -16
- package/dist/selection/path-lookup.js +101 -18
- package/dist/selection/path-math.d.ts +9 -11
- package/dist/selection/path-math.js +5 -7
- package/dist/selection/pointer-gesture.d.ts +5 -5
- package/dist/selection/pointer-gesture.js +5 -5
- package/dist/selection/pointer-session.d.ts +10 -16
- package/dist/selection/pointer-session.js +6 -7
- package/dist/selection/primitives.d.ts +64 -40
- package/dist/selection/primitives.js +57 -67
- package/dist/selection/range-coverage.d.ts +94 -0
- package/dist/selection/range-coverage.js +365 -0
- package/dist/selection/range-delete-ceremony.d.ts +28 -74
- package/dist/selection/range-delete-ceremony.js +100 -141
- package/dist/selection/range-delete-chrome.d.ts +20 -33
- package/dist/selection/range-delete-chrome.js +53 -78
- package/dist/selection/range-delete-table-coverage.d.ts +11 -25
- package/dist/selection/range-delete-table-coverage.js +42 -112
- package/dist/selection/range-delete-table.d.ts +14 -12
- package/dist/selection/range-delete-table.js +106 -310
- package/dist/selection/range-delete.d.ts +18 -23
- package/dist/selection/range-delete.js +83 -123
- package/dist/selection/round-trip-restore.d.ts +18 -0
- package/dist/selection/round-trip-restore.js +19 -0
- package/dist/selection/selection-announcer.d.ts +17 -0
- package/dist/selection/selection-announcer.js +25 -0
- package/dist/selection/selection-description.d.ts +4 -3
- package/dist/selection/selection-description.js +5 -4
- package/dist/selection/selection-drop.d.ts +34 -16
- package/dist/selection/selection-drop.js +159 -95
- package/dist/selection/selection-restore.d.ts +20 -33
- package/dist/selection/selection-restore.js +21 -44
- package/dist/selection/selection-state.svelte.d.ts +50 -42
- package/dist/selection/selection-state.svelte.js +144 -98
- package/dist/selection/shared-keydown.d.ts +22 -27
- package/dist/selection/shared-keydown.js +25 -45
- package/dist/selection/table-endpoint-snap.d.ts +17 -41
- package/dist/selection/table-endpoint-snap.js +54 -80
- package/dist/selection/table-rect-extend.d.ts +3 -6
- package/dist/selection/table-rect-extend.js +19 -14
- package/dist/styles/editor-theme.css +60 -53
- package/dist/styles/editor.css +201 -143
- package/dist/testing/conformance-core.d.ts +50 -18
- package/dist/testing/conformance-core.js +88 -50
- package/dist/testing/container-conformance.d.ts +48 -84
- package/dist/testing/container-conformance.js +159 -285
- package/dist/testing/headless-actions.d.ts +34 -19
- package/dist/testing/headless-actions.js +116 -65
- package/dist/testing/headless-block-list.svelte.d.ts +16 -0
- package/dist/testing/headless-block-list.svelte.js +22 -0
- package/dist/testing/inline-conformance.d.ts +15 -22
- package/dist/testing/inline-conformance.js +131 -148
- package/dist/testing/kind-conformance.d.ts +19 -24
- package/dist/testing/kind-conformance.js +204 -117
- package/dist/testing/kit-reading.d.ts +7 -0
- package/dist/testing/kit-reading.js +16 -0
- package/dist/testing/mount-dom-stubs.d.ts +4 -5
- package/dist/testing/mount-dom-stubs.js +8 -5
- package/dist/testing/parse-convergence.d.ts +10 -10
- package/dist/testing/parse-convergence.js +14 -49
- package/dist/testing.d.ts +13 -9
- package/dist/testing.js +28 -38
- package/dist/tree-operations/blockquote.d.ts +8 -14
- package/dist/tree-operations/blockquote.js +25 -45
- package/dist/tree-operations/chain-rebuild.d.ts +34 -25
- package/dist/tree-operations/chain-rebuild.js +115 -52
- package/dist/tree-operations/children.d.ts +5 -9
- package/dist/tree-operations/children.js +7 -11
- package/dist/tree-operations/cleanup.d.ts +6 -7
- package/dist/tree-operations/cleanup.js +14 -11
- package/dist/tree-operations/clone.js +5 -4
- package/dist/tree-operations/container-lift.d.ts +10 -5
- package/dist/tree-operations/container-lift.js +20 -14
- package/dist/tree-operations/container-offsets.d.ts +22 -0
- package/dist/tree-operations/container-offsets.js +89 -0
- package/dist/tree-operations/content-write.d.ts +52 -29
- package/dist/tree-operations/content-write.js +155 -110
- package/dist/tree-operations/index.d.ts +4 -4
- package/dist/tree-operations/index.js +4 -4
- package/dist/tree-operations/keep-one-block.d.ts +10 -0
- package/dist/tree-operations/keep-one-block.js +19 -0
- package/dist/tree-operations/leaf-range.d.ts +33 -0
- package/dist/tree-operations/leaf-range.js +67 -0
- package/dist/tree-operations/list/empty-check.d.ts +2 -3
- package/dist/tree-operations/list/empty-check.js +4 -4
- package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
- package/dist/tree-operations/list/exit-replacement.js +4 -9
- package/dist/tree-operations/list/item-partition.d.ts +2 -2
- package/dist/tree-operations/list/item-partition.js +2 -2
- package/dist/tree-operations/list/list-builders.d.ts +18 -16
- package/dist/tree-operations/list/list-builders.js +59 -30
- package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
- package/dist/tree-operations/list/ordered-markers.js +7 -16
- package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
- package/dist/tree-operations/list/reconcile-task.js +80 -23
- package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
- package/dist/tree-operations/list/sublist-separator.js +20 -27
- package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
- package/dist/tree-operations/list/task-paragraph.js +54 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
- package/dist/tree-operations/list/unwrap-merge.js +44 -79
- package/dist/tree-operations/node-ops.d.ts +30 -52
- package/dist/tree-operations/node-ops.js +152 -218
- package/dist/tree-operations/node-primitives.d.ts +44 -31
- package/dist/tree-operations/node-primitives.js +84 -60
- package/dist/tree-operations/open-tail.d.ts +25 -0
- package/dist/tree-operations/open-tail.js +100 -0
- package/dist/tree-operations/parse-block.d.ts +15 -2
- package/dist/tree-operations/parse-block.js +19 -4
- package/dist/tree-operations/paste/apply.d.ts +7 -8
- package/dist/tree-operations/paste/apply.js +33 -63
- package/dist/tree-operations/paste/body-write.d.ts +8 -6
- package/dist/tree-operations/paste/body-write.js +13 -14
- package/dist/tree-operations/paste/container-match.d.ts +7 -10
- package/dist/tree-operations/paste/container-match.js +76 -58
- package/dist/tree-operations/paste/container-paste.d.ts +3 -3
- package/dist/tree-operations/paste/container-paste.js +3 -3
- package/dist/tree-operations/paste/dispatch.d.ts +26 -29
- package/dist/tree-operations/paste/dispatch.js +68 -53
- package/dist/tree-operations/paste/focus-target.d.ts +11 -14
- package/dist/tree-operations/paste/focus-target.js +13 -18
- package/dist/tree-operations/paste/hooks.d.ts +7 -12
- package/dist/tree-operations/paste/hooks.js +49 -46
- package/dist/tree-operations/paste/line-ending.d.ts +11 -0
- package/dist/tree-operations/paste/line-ending.js +32 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
- package/dist/tree-operations/paste/list-absorb.js +17 -19
- package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
- package/dist/tree-operations/paste/list-break-out.js +24 -32
- package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
- package/dist/tree-operations/paste/parent-scope.js +9 -16
- package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
- package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
- package/dist/tree-operations/paste/paste-replacement.js +73 -42
- package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
- package/dist/tree-operations/paste/paste-transforms.js +18 -27
- package/dist/tree-operations/paste/replacement-parse.d.ts +9 -7
- package/dist/tree-operations/paste/replacement-parse.js +12 -10
- package/dist/tree-operations/paste/strategy.d.ts +1 -1
- package/dist/tree-operations/paste/strategy.js +1 -1
- package/dist/tree-operations/paste/table-slice.js +15 -10
- package/dist/tree-operations/paste-surfaces.d.ts +18 -29
- package/dist/tree-operations/paste-surfaces.js +14 -10
- package/dist/tree-operations/path-mutate.d.ts +7 -8
- package/dist/tree-operations/path-mutate.js +4 -4
- package/dist/tree-operations/reorder-unit.d.ts +4 -5
- package/dist/tree-operations/reorder-unit.js +5 -6
- package/dist/tree-operations/reorder.d.ts +7 -9
- package/dist/tree-operations/reorder.js +39 -40
- package/dist/tree-operations/settle.d.ts +42 -53
- package/dist/tree-operations/settle.js +241 -162
- package/dist/tree-operations/sharing.d.ts +5 -5
- package/dist/tree-operations/splice-many.d.ts +5 -5
- package/dist/tree-operations/splice-many.js +5 -5
- package/dist/tree-operations/stored-as.d.ts +13 -0
- package/dist/tree-operations/stored-as.js +48 -0
- package/dist/tree-operations/structural-change.d.ts +11 -15
- package/dist/tree-operations/structural-change.js +10 -14
- package/dist/tree-operations/structural-suffix.d.ts +22 -0
- package/dist/tree-operations/structural-suffix.js +61 -0
- package/dist/tree-operations/sub-table-copy.d.ts +7 -0
- package/dist/tree-operations/sub-table-copy.js +40 -36
- package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
- package/dist/tree-operations/table-grid-clipboard.js +11 -36
- package/dist/tree-operations/table-mutations.d.ts +7 -3
- package/dist/tree-operations/table-mutations.js +45 -9
- package/dist/tree-operations/unshare.d.ts +11 -15
- package/dist/tree-operations/unshare.js +15 -17
- package/dist/undo/manager.js +1 -1
- package/dist/undo/types.d.ts +2 -2
- package/docs/guide/consumer-guide.md +327 -205
- package/docs/guide/directives.md +7 -7
- package/docs/guide/plugin-api.md +253 -185
- package/docs/guide/plugin-guide.md +332 -235
- package/docs/guide/plugin-testing.md +96 -82
- package/package.json +12 -16
- package/dist/ambient/ambient-cursor.d.ts +0 -41
- package/dist/ambient/ambient-cursor.js +0 -120
- package/dist/components/blocks/code/code-paste.d.ts +0 -24
- package/dist/components/blocks/code/code-paste.js +0 -21
- package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
- package/dist/components/blocks/table/cell-clipboard.js +0 -67
- package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
- package/dist/components/blocks/text/hidden-suffix.js +0 -15
- package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
- package/dist/components/image/image-source-bytes.d.ts +0 -15
- package/dist/components/image/image-source-bytes.js +0 -80
- package/dist/cursor/content-offsets.d.ts +0 -29
- package/dist/cursor/content-offsets.js +0 -151
- package/dist/cursor/reveal-anchor.d.ts +0 -30
- package/dist/cursor/reveal-anchor.js +0 -31
- package/dist/cursor/scroll-hold.d.ts +0 -10
- package/dist/cursor/scroll-hold.js +0 -22
- package/dist/invariants/split-landing.d.ts +0 -8
- package/dist/invariants/split-landing.js +0 -15
- package/dist/tree-operations/list/terminator.d.ts +0 -17
- package/dist/tree-operations/list/terminator.js +0 -60
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -31
- package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
* container's kind re-derived and the
|
|
2
|
+
* The ancestor rebuild: raws re-derived up an owned chain of ancestors innermost first, each
|
|
3
|
+
* container's kind re-derived and the joins at its own position checked on the way out
|
|
4
|
+
* (`docs/design/editor.md` § The container `raw` contract).
|
|
4
5
|
*/
|
|
6
|
+
import { firstLineEnding } from '../core/lines';
|
|
7
|
+
import { assignChildIdsDeep, idsAcrossReread } from '../block-id';
|
|
8
|
+
import { ensureEditableContainers } from './node-primitives';
|
|
9
|
+
import { replacePreservingFirst } from './structural-change';
|
|
10
|
+
import { spliceMany } from './splice-many';
|
|
5
11
|
import { dropChildSpans } from '../schema/child-spans';
|
|
6
|
-
import {
|
|
12
|
+
import { firstLine, followBytes, lastLine } from '../schema/container-raw';
|
|
13
|
+
import { reservedChromeKindOf } from '../schema/reserved-chrome';
|
|
7
14
|
import { perfEnabled, recordRebuildDepth } from '../perf/instruments';
|
|
8
15
|
import { rebuildOwnedContainer, walkUnsharing } from './unshare';
|
|
9
16
|
import { absorbWindowSeams } from './settle';
|
|
10
|
-
import {
|
|
17
|
+
import { installReading } from './content-write';
|
|
11
18
|
import { settleSublistSeparator } from './list/sublist-separator';
|
|
12
19
|
/**
|
|
13
|
-
* Longest prefix of `chain` still attached under `root
|
|
14
|
-
*
|
|
15
|
-
* against its emptied children writes `raw: ''`; ancestors above the detachment still rebuild.
|
|
20
|
+
* Longest prefix of `chain` still attached under `root`: a node spliced out mid-commit would
|
|
21
|
+
* rebuild against its emptied children to `raw: ''`, while the ancestors above it still rebuild.
|
|
16
22
|
*/
|
|
17
23
|
export function attachedChainPrefix(root, chain) {
|
|
18
24
|
let parentChildren = root.children;
|
|
@@ -24,59 +30,124 @@ export function attachedChainPrefix(root, chain) {
|
|
|
24
30
|
return chain;
|
|
25
31
|
}
|
|
26
32
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* Both passes gate on a boundary line of the rebuilt raw moving. `folds` is required-nullable: a
|
|
30
|
-
* fold splices the PARENT's array, so only a caller that reconciles that scope's ids/refs passes
|
|
31
|
-
* a sink.
|
|
33
|
+
* The levels each chain rebuilds when the chains are rebuilt in this order, one per chain: a node
|
|
34
|
+
* several chains hold is left to the last of them, so it's rebuilt once, after everything below it.
|
|
32
35
|
*/
|
|
33
|
-
export function
|
|
36
|
+
export function sharedChainLevels(chains) {
|
|
37
|
+
const lastHolder = new Map();
|
|
38
|
+
chains.forEach((chain, j) => {
|
|
39
|
+
for (const node of chain)
|
|
40
|
+
lastHolder.set(node, j);
|
|
41
|
+
});
|
|
42
|
+
const readsWhole = new Set();
|
|
43
|
+
return chains.map((chain, j) => {
|
|
44
|
+
let floor = chain.length;
|
|
45
|
+
while (floor > 0 && lastHolder.get(chain[floor - 1]) === j)
|
|
46
|
+
floor--;
|
|
47
|
+
return { floor, readsWhole };
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Rebuild raws up an owned chain innermost first, re-deriving kinds and joins where a first or
|
|
52
|
+
* last line moved. Only a caller that reconciles a merged array's ids and refs passes `folds`.
|
|
53
|
+
*/
|
|
54
|
+
export function rebuildUnsharedChain(root, chain, sharing, folds, grammar, hint, shared) {
|
|
34
55
|
const reclassified = [];
|
|
35
|
-
|
|
36
|
-
//
|
|
56
|
+
const floor = shared?.floor ?? 0;
|
|
57
|
+
// The bytes chain[i + 1] held before this pass, known only when the caller named the leaf's
|
|
58
|
+
// own; with no hint, every level re-derives its whole raw.
|
|
37
59
|
let childPreviousRaw;
|
|
38
|
-
|
|
60
|
+
// The level below read as blocks its own position cannot hold, so this level reads whole.
|
|
61
|
+
let spilled = null;
|
|
62
|
+
for (let i = chain.length - 1; i >= floor; i--) {
|
|
39
63
|
const node = chain[i];
|
|
40
64
|
const rawBefore = node.raw;
|
|
41
65
|
const child = chain[i + 1];
|
|
42
|
-
|
|
66
|
+
const changed = child && childPreviousRaw !== undefined
|
|
43
67
|
? childRawChange(node, child, childPreviousRaw, hint?.path[i + 1])
|
|
44
|
-
: undefined
|
|
68
|
+
: undefined;
|
|
69
|
+
rebuildOwnedContainer(node, sharing, changed);
|
|
45
70
|
if (hint)
|
|
46
71
|
childPreviousRaw = i === chain.length - 1 ? hint.leafPreviousRaw : rawBefore;
|
|
47
72
|
const openerMoved = firstLine(rawBefore) !== firstLine(node.raw);
|
|
48
73
|
const closerMoved = lastLine(rawBefore) !== lastLine(node.raw);
|
|
49
|
-
|
|
74
|
+
const whole = spilled !== null || (shared?.readsWhole.has(node) ?? false);
|
|
75
|
+
spilled = null;
|
|
76
|
+
if (!openerMoved && !closerMoved && !whole)
|
|
50
77
|
continue;
|
|
51
78
|
const owner = i === 0 ? null : chain[i - 1];
|
|
52
79
|
const siblings = (owner ?? root).children;
|
|
53
80
|
const index = siblings ? childIndexOf(siblings, node, hint?.path[i]) : -1;
|
|
54
81
|
if (!siblings || index < 0)
|
|
55
82
|
continue;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
83
|
+
const reading = followBytes(node, rawBefore, grammar, {
|
|
84
|
+
titleRowOnly: changed !== undefined && isChromeSlot(node, changed.index),
|
|
85
|
+
whole
|
|
86
|
+
});
|
|
87
|
+
const replacement = installReading({ children: siblings }, index, reading, grammar);
|
|
88
|
+
if (replacement) {
|
|
89
|
+
sharing.stamp(replacement);
|
|
90
|
+
reclassified.push({ siblings, index, previous: node, replacement });
|
|
62
91
|
}
|
|
63
|
-
|
|
64
|
-
|
|
92
|
+
else if (reading.outcome === 'diverged' && reading.blocks.length > 0) {
|
|
93
|
+
spilled = { siblings, index, node, blocks: reading.blocks };
|
|
94
|
+
}
|
|
95
|
+
if (!openerMoved && !closerMoved)
|
|
96
|
+
continue;
|
|
97
|
+
// Before the join check, which then reads the fixed-up bytes: a list rebuilt down to an
|
|
98
|
+
// empty marker must give the paragraph above it a separating line.
|
|
65
99
|
if (openerMoved)
|
|
66
100
|
settleSublistSeparator(siblings, index);
|
|
67
|
-
// After the re-derive: the
|
|
101
|
+
// After the kind re-derive: the join check reads whatever occupies the position now.
|
|
68
102
|
if (folds) {
|
|
69
103
|
const before = folds.length;
|
|
70
|
-
settleSlotSeams({ siblings, owner, depth: i, index, openerMoved, closerMoved }, sharing, folds);
|
|
71
|
-
// A
|
|
104
|
+
settleSlotSeams({ siblings, owner, depth: i, index, openerMoved, closerMoved }, sharing, folds, grammar);
|
|
105
|
+
// A merge re-divided the owner's children, so its child spans describe a shape that
|
|
106
|
+
// is gone.
|
|
72
107
|
if (folds.length > before && owner)
|
|
73
108
|
dropChildSpans(owner);
|
|
74
109
|
}
|
|
75
110
|
}
|
|
76
|
-
if (
|
|
77
|
-
|
|
111
|
+
if (spilled && floor > 0)
|
|
112
|
+
shared.readsWhole.add(chain[floor - 1]);
|
|
113
|
+
else if (spilled && folds)
|
|
114
|
+
spliceSpill(spilled, sharing, folds);
|
|
115
|
+
if (perfEnabled() && chain.length > floor)
|
|
116
|
+
recordRebuildDepth(chain.length - floor);
|
|
78
117
|
return reclassified;
|
|
79
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* The root's children take the blocks a top-level node's bytes read as, one fold the caller
|
|
121
|
+
* publishes: the first block keeps the node's id, the rest are new.
|
|
122
|
+
*/
|
|
123
|
+
function spliceSpill(spill, sharing, folds) {
|
|
124
|
+
const { siblings, index, node, blocks } = spill;
|
|
125
|
+
// A blank tail the parse set aside has no block to hold it, so such bytes stay as they stand.
|
|
126
|
+
if (blocks.map((block) => block.leadingTrivia + block.raw).join('') !== node.raw)
|
|
127
|
+
return;
|
|
128
|
+
const lineEnding = firstLineEnding(node.raw) ?? '\n';
|
|
129
|
+
// The first block keeps the node's id, so its children the re-read left alone keep theirs.
|
|
130
|
+
if (blocks[0].kind === node.kind && blocks[0].children) {
|
|
131
|
+
blocks[0].childIds = idsAcrossReread(node.children ?? [], node.childIds, blocks[0].children);
|
|
132
|
+
}
|
|
133
|
+
for (const block of blocks) {
|
|
134
|
+
ensureEditableContainers(block, lineEnding);
|
|
135
|
+
assignChildIdsDeep(block);
|
|
136
|
+
}
|
|
137
|
+
blocks[0].leadingTrivia = node.leadingTrivia;
|
|
138
|
+
const before = siblings.slice();
|
|
139
|
+
spliceMany(siblings, index, 1, blocks);
|
|
140
|
+
for (let k = 0; k < blocks.length; k++)
|
|
141
|
+
sharing.stamp(siblings[index + k]);
|
|
142
|
+
folds.push({
|
|
143
|
+
depth: 0,
|
|
144
|
+
siblings,
|
|
145
|
+
owner: null,
|
|
146
|
+
change: replacePreservingFirst(index, 1, blocks.length),
|
|
147
|
+
before,
|
|
148
|
+
landing: { index, offset: 0 }
|
|
149
|
+
});
|
|
150
|
+
}
|
|
80
151
|
/**
|
|
81
152
|
* The changed-child hint for `node`, or undefined when `child` cannot be placed in it. The path
|
|
82
153
|
* index is a guess; an identity match is what makes it an answer.
|
|
@@ -88,6 +159,11 @@ function childRawChange(node, child, previousRaw, guess) {
|
|
|
88
159
|
const index = childIndexOf(siblings, child, guess);
|
|
89
160
|
return index < 0 ? undefined : { index, previousRaw };
|
|
90
161
|
}
|
|
162
|
+
/** Whether child `index` is the container's title row, which no metadata comes from. */
|
|
163
|
+
function isChromeSlot(node, index) {
|
|
164
|
+
const chromeKind = reservedChromeKindOf(node.kind);
|
|
165
|
+
return index === 0 && chromeKind !== undefined && node.children?.[0]?.kind === chromeKind;
|
|
166
|
+
}
|
|
91
167
|
/** `indexOf` with a guess first: the scan is O(children) through the `$state` proxy. */
|
|
92
168
|
function childIndexOf(siblings, child, guess) {
|
|
93
169
|
if (guess !== undefined && siblings[guess] === child)
|
|
@@ -95,17 +171,16 @@ function childIndexOf(siblings, child, guess) {
|
|
|
95
171
|
return siblings.indexOf(child);
|
|
96
172
|
}
|
|
97
173
|
/**
|
|
98
|
-
*
|
|
99
|
-
* neighbour
|
|
100
|
-
* name exactly the sides whose line moved.
|
|
174
|
+
* Check the joins at a rebuilt container's position, since its new bytes can stop interrupting
|
|
175
|
+
* a neighbour; the window passed below covers exactly the sides whose line moved.
|
|
101
176
|
*/
|
|
102
|
-
function settleSlotSeams(slot, sharing, folds) {
|
|
177
|
+
function settleSlotSeams(slot, sharing, folds, grammar) {
|
|
103
178
|
const { siblings, index, openerMoved, closerMoved } = slot;
|
|
104
|
-
// The rollback snapshot is captured only once a
|
|
179
|
+
// The rollback snapshot is captured only once a merge is certain, since a copy costs
|
|
105
180
|
// O(children) reactive reads on every keystroke inside a large container.
|
|
106
181
|
let before = null;
|
|
107
182
|
const landing = { index, offset: 0 };
|
|
108
|
-
const settled = absorbWindowSeams({ children: siblings }, openerMoved ? index : index + 1, openerMoved && closerMoved ? 1 : 0, index, { op: 'noop' }, sharing, landing, index, () => {
|
|
183
|
+
const settled = absorbWindowSeams({ children: siblings }, openerMoved ? index : index + 1, openerMoved && closerMoved ? 1 : 0, index, { op: 'noop' }, grammar, sharing, landing, index, () => {
|
|
109
184
|
before ??= siblings.slice();
|
|
110
185
|
});
|
|
111
186
|
if (settled.change.op === 'noop')
|
|
@@ -120,21 +195,9 @@ function settleSlotSeams(slot, sharing, folds) {
|
|
|
120
195
|
landing
|
|
121
196
|
});
|
|
122
197
|
}
|
|
123
|
-
/** The container's opener line. */
|
|
124
|
-
function firstLine(raw) {
|
|
125
|
-
const nl = raw.indexOf('\n');
|
|
126
|
-
return nl < 0 ? raw : raw.slice(0, nl);
|
|
127
|
-
}
|
|
128
|
-
/** The container's closing line: its last line carrying bytes, without the ending. */
|
|
129
|
-
function lastLine(raw) {
|
|
130
|
-
const body = trimTrailingLineEnding(raw);
|
|
131
|
-
const nl = body.lastIndexOf('\n');
|
|
132
|
-
return nl < 0 ? body : body.slice(nl + 1);
|
|
133
|
-
}
|
|
134
198
|
/**
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
* have shifted since the unshare.
|
|
199
|
+
* Copy the ancestors down `path` and rebuild them, tolerating a path cut short by a delete.
|
|
200
|
+
* Prefer `rebuildUnsharedChain` when indices may have shifted since the copy.
|
|
138
201
|
*/
|
|
139
202
|
export function rebuildUnsharedAncestry(root, path, sharing, folds, grammar) {
|
|
140
203
|
const chain = walkUnsharing(root, path, sharing, false);
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* splice would let the parallel id array drift and break Svelte's keyed-each rendering.
|
|
6
|
-
* The same shape change invalidates `childSpans`, so both parallel arrays settle here.
|
|
2
|
+
* Children mutations that keep `childIds` and `childSpans` in step, for writes outside a commit
|
|
3
|
+
* scope (descendants and ancestors found by walking the tree, `node-primitives.ts` header). A
|
|
4
|
+
* hand-rolled splice there would let the id array drift and break Svelte's keyed each.
|
|
7
5
|
*/
|
|
8
6
|
import type { CstNode } from '../core/nodes';
|
|
9
7
|
export declare function pushChild(container: CstNode, child: CstNode): void;
|
|
10
8
|
/**
|
|
11
|
-
* Bring `childIds` back to `children`'s length after an in-place
|
|
12
|
-
*
|
|
13
|
-
* Svelte's keyed each, the identity the swapping branches exist to preserve. No-op when
|
|
14
|
-
* the array is absent; the mounting BlockList backfills it.
|
|
9
|
+
* Bring `childIds` back to `children`'s length after an in-place swap. The surviving prefix keeps
|
|
10
|
+
* its ids, since fresh ones would remount every child under Svelte's keyed each.
|
|
15
11
|
*/
|
|
16
12
|
export declare function resyncChildIds(container: CstNode): void;
|
|
17
13
|
export declare function spliceChildren(container: CstNode, at: number, removeCount: number, items: readonly CstNode[]): void;
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* splice would let the parallel id array drift and break Svelte's keyed-each rendering.
|
|
6
|
-
* The same shape change invalidates `childSpans`, so both parallel arrays settle here.
|
|
2
|
+
* Children mutations that keep `childIds` and `childSpans` in step, for writes outside a commit
|
|
3
|
+
* scope (descendants and ancestors found by walking the tree, `node-primitives.ts` header). A
|
|
4
|
+
* hand-rolled splice there would let the id array drift and break Svelte's keyed each.
|
|
7
5
|
*/
|
|
8
6
|
import { assignIds, generateBlockId } from '../block-id';
|
|
9
7
|
import { dropChildSpans } from '../schema/child-spans';
|
|
@@ -20,10 +18,8 @@ export function pushChild(container, child) {
|
|
|
20
18
|
dropChildSpans(container);
|
|
21
19
|
}
|
|
22
20
|
/**
|
|
23
|
-
* Bring `childIds` back to `children`'s length after an in-place
|
|
24
|
-
*
|
|
25
|
-
* Svelte's keyed each, the identity the swapping branches exist to preserve. No-op when
|
|
26
|
-
* the array is absent; the mounting BlockList backfills it.
|
|
21
|
+
* Bring `childIds` back to `children`'s length after an in-place swap. The surviving prefix keeps
|
|
22
|
+
* its ids, since fresh ones would remount every child under Svelte's keyed each.
|
|
27
23
|
*/
|
|
28
24
|
export function resyncChildIds(container) {
|
|
29
25
|
dropChildSpans(container);
|
|
@@ -45,8 +41,8 @@ export function spliceChildren(container, at, removeCount, items) {
|
|
|
45
41
|
container.children = [];
|
|
46
42
|
// No lazy-init here: containers without childIds get them from the mounting BlockList anyway.
|
|
47
43
|
if (container.childIds) {
|
|
48
|
-
// A replacement's head continues the
|
|
49
|
-
// `replacePreservingFirst`'s rule, which the in-commit
|
|
44
|
+
// A replacement's head continues the position it lands in, so it keeps that position's
|
|
45
|
+
// id: `replacePreservingFirst`'s rule, which the in-commit splice already applies.
|
|
50
46
|
const continues = removeCount > 0 && items.length > 0;
|
|
51
47
|
const ids = items.map((_, i) => i === 0 && continues ? container.childIds[at] : generateBlockId());
|
|
52
48
|
spliceMany(container.childIds, at, removeCount, ids);
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import type { Document } from '../core/nodes';
|
|
1
|
+
import type { CstNode, Document } from '../core/nodes';
|
|
2
|
+
import type { GrammarView } from '../schema/block-openers';
|
|
2
3
|
import type { SharingState } from './sharing';
|
|
3
4
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* empty. Owns its spine — each level is unshared before its child is removed, or the
|
|
8
|
-
* splice lands on a node an undo entry still references (`unshare.ts` header).
|
|
5
|
+
* Remove the containers a delete emptied, walking up from `deletedPath`'s parent (a path below
|
|
6
|
+
* `root`) to the first that still holds a child; `root` itself is never spliced. Walking from the
|
|
7
|
+
* document it can splice the document's own children, so the commit must hold that scope.
|
|
9
8
|
*/
|
|
10
|
-
export declare function cascadeCleanupEmptyAncestors(
|
|
9
|
+
export declare function cascadeCleanupEmptyAncestors(root: CstNode | Document, deletedPath: number[], sharing: SharingState, grammar: GrammarView): void;
|
|
@@ -1,25 +1,28 @@
|
|
|
1
|
+
import { mustHoldChild } from '../schema/block-kind-descriptor';
|
|
1
2
|
import { spliceChildrenSettled } from './settle';
|
|
2
3
|
import { ensureUnsharedPath } from './unshare';
|
|
3
4
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* empty. Owns its spine — each level is unshared before its child is removed, or the
|
|
8
|
-
* splice lands on a node an undo entry still references (`unshare.ts` header).
|
|
5
|
+
* Remove the containers a delete emptied, walking up from `deletedPath`'s parent (a path below
|
|
6
|
+
* `root`) to the first that still holds a child; `root` itself is never spliced. Walking from the
|
|
7
|
+
* document it can splice the document's own children, so the commit must hold that scope.
|
|
9
8
|
*/
|
|
10
|
-
export function cascadeCleanupEmptyAncestors(
|
|
9
|
+
export function cascadeCleanupEmptyAncestors(root, deletedPath, sharing, grammar) {
|
|
10
|
+
if (!root.children)
|
|
11
|
+
return;
|
|
12
|
+
// The same array as the root's, so the walk's copies land in the root.
|
|
13
|
+
const top = { children: root.children };
|
|
11
14
|
let currentPath = deletedPath.slice(0, -1);
|
|
12
|
-
while (currentPath.length >
|
|
15
|
+
while (currentPath.length > 0) {
|
|
13
16
|
const parentPath = currentPath.slice(0, -1);
|
|
14
|
-
const chain = ensureUnsharedPath(
|
|
15
|
-
const parent = chain[chain.length - 1] ??
|
|
17
|
+
const chain = ensureUnsharedPath(top, parentPath, sharing);
|
|
18
|
+
const parent = chain[chain.length - 1] ?? root;
|
|
16
19
|
if (!parent.children)
|
|
17
20
|
break;
|
|
18
21
|
const idx = currentPath[currentPath.length - 1];
|
|
19
22
|
const node = parent.children[idx];
|
|
20
|
-
if (!node || !node.
|
|
23
|
+
if (!node || !mustHoldChild(node.kind) || (node.children?.length ?? 0) > 0)
|
|
21
24
|
break;
|
|
22
|
-
spliceChildrenSettled(parent, idx, 1, [], sharing);
|
|
25
|
+
spliceChildrenSettled(parent, idx, 1, [], grammar, sharing);
|
|
23
26
|
currentPath = parentPath;
|
|
24
27
|
}
|
|
25
28
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { assertInvariant } from '../assert';
|
|
2
2
|
import { checkCloneSafeMetadata } from '../invariants/node-shape';
|
|
3
3
|
// ── Document ────────────────────────────────────────────────────────────────
|
|
4
|
-
// A deep clone of a view is a fully owned mutable tree
|
|
4
|
+
// A deep clone of a view is a fully owned mutable tree, the one clone path `core/node-views.ts`
|
|
5
|
+
// allows.
|
|
5
6
|
export function cloneDocument(doc) {
|
|
6
7
|
return {
|
|
7
8
|
kind: 'document',
|
|
@@ -12,8 +13,8 @@ export function cloneDocument(doc) {
|
|
|
12
13
|
}
|
|
13
14
|
// ── Node ────────────────────────────────────────────────────────────────────
|
|
14
15
|
export function cloneNode(node) {
|
|
15
|
-
// `kind` is a runtime value spanning every
|
|
16
|
-
//
|
|
16
|
+
// `kind` is a runtime value spanning every union member, so no literal member matches; the
|
|
17
|
+
// cast is the generic clone, mirroring `copyNode`'s spread (`unshare.ts`).
|
|
17
18
|
const cloned = {
|
|
18
19
|
kind: node.kind,
|
|
19
20
|
leadingTrivia: node.leadingTrivia,
|
|
@@ -33,7 +34,7 @@ export function cloneNode(node) {
|
|
|
33
34
|
return cloned;
|
|
34
35
|
}
|
|
35
36
|
// Snapshots must share no mutable reference with the live tree, or an in-place splice on
|
|
36
|
-
// live metadata reaches the snapshot. One level deep suffices
|
|
37
|
+
// live metadata reaches the snapshot. One level deep suffices; metadata nests no deeper (G1.6).
|
|
37
38
|
export function cloneMetadata(meta) {
|
|
38
39
|
const out = {};
|
|
39
40
|
for (const [k, v] of Object.entries(meta)) {
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Lift a container's first child out
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* where the opener lives on the first line and the lift drops it.
|
|
2
|
+
* Lift a container's first child out, input untouched: the blank line that stood between that
|
|
3
|
+
* child and the next one now stands between the lifted block and what is left of the container.
|
|
4
|
+
* The caller says how the rest is written back: as the same container, or as a plain quote.
|
|
6
5
|
*/
|
|
7
6
|
import type { CstNode } from '../core/nodes';
|
|
8
7
|
import type { NodeView } from '../core/node-views';
|
|
9
|
-
|
|
8
|
+
import type { GrammarView } from '../schema/block-openers';
|
|
9
|
+
/** The container's remaining children written back as one block; its own raw included. */
|
|
10
|
+
export type RemainderBuilder = (container: NodeView, children: CstNode[]) => CstNode;
|
|
11
|
+
export declare function liftFirstChild(container: NodeView, rebuildRemainder: RemainderBuilder): CstNode[];
|
|
12
|
+
/** The remainder keeps the container's kind, and its `rebuildRaw` re-emits the syntax, so a
|
|
13
|
+
* marker held in metadata survives. */
|
|
14
|
+
export declare function sameContainer(grammar: GrammarView): RemainderBuilder;
|
|
@@ -1,29 +1,35 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Lift a container's first child out
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* where the opener lives on the first line and the lift drops it.
|
|
2
|
+
* Lift a container's first child out, input untouched: the blank line that stood between that
|
|
3
|
+
* child and the next one now stands between the lifted block and what is left of the container.
|
|
4
|
+
* The caller says how the rest is written back: as the same container, or as a plain quote.
|
|
6
5
|
*/
|
|
7
6
|
import { cloneNode } from './clone';
|
|
8
7
|
import { rebuildContainerRaw } from '../schema/container-raw';
|
|
9
8
|
import { assignIds } from '../block-id';
|
|
10
|
-
export function
|
|
9
|
+
export function liftFirstChild(container, rebuildRemainder) {
|
|
11
10
|
const children = container.children;
|
|
12
11
|
if (!children || children.length === 0)
|
|
13
12
|
return [];
|
|
14
13
|
const lifted = cloneNode(children[0]);
|
|
15
|
-
// The container's leading
|
|
14
|
+
// The container's leading blank lines are applied at the caller's splice point.
|
|
16
15
|
lifted.leadingTrivia = '';
|
|
17
16
|
if (children.length === 1)
|
|
18
17
|
return [lifted];
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
// The blank line that stood between the two children inside the container is the one that
|
|
22
|
-
// now stands between the lifted block and the container: conserved, never minted.
|
|
23
|
-
remaining.leadingTrivia = remainingChildren[0].leadingTrivia;
|
|
18
|
+
const remainingChildren = children.slice(1).map(cloneNode);
|
|
19
|
+
const separator = remainingChildren[0].leadingTrivia;
|
|
24
20
|
remainingChildren[0].leadingTrivia = '';
|
|
25
|
-
remaining
|
|
26
|
-
remaining.
|
|
27
|
-
rebuildContainerRaw(remaining);
|
|
21
|
+
const remaining = rebuildRemainder(container, remainingChildren);
|
|
22
|
+
remaining.leadingTrivia = separator;
|
|
28
23
|
return [lifted, remaining];
|
|
29
24
|
}
|
|
25
|
+
/** The remainder keeps the container's kind, and its `rebuildRaw` re-emits the syntax, so a
|
|
26
|
+
* marker held in metadata survives. */
|
|
27
|
+
export function sameContainer(grammar) {
|
|
28
|
+
return (container, children) => {
|
|
29
|
+
const remaining = cloneNode(container);
|
|
30
|
+
remaining.children = children;
|
|
31
|
+
remaining.childIds = assignIds(children);
|
|
32
|
+
rebuildContainerRaw(remaining, grammar);
|
|
33
|
+
return remaining;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps between a byte offset in a block's `raw` and a caret position in one of its leaves, for a
|
|
3
|
+
* fix-up that tracks the caret through a merge. A container's raw re-prefixes its children's lines
|
|
4
|
+
* (`> `, an item's indent), so the map goes line by line; only a `'strip'` container's is known.
|
|
5
|
+
*/
|
|
6
|
+
import type { NodeView } from '../core/node-views';
|
|
7
|
+
export interface LeafPosition {
|
|
8
|
+
/** Child indices from the node down to the leaf; empty when the node is the leaf. */
|
|
9
|
+
path: number[];
|
|
10
|
+
/** Offset into the leaf's raw, within its displayed text. */
|
|
11
|
+
offset: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The leaf and offset `rawOffset` addresses inside `node`; null when a container on the way is
|
|
15
|
+
* not a strip container, whose bytes this module can't map to its children.
|
|
16
|
+
*/
|
|
17
|
+
export declare function leafAtRawOffset(node: NodeView, rawOffset: number): LeafPosition | null;
|
|
18
|
+
/**
|
|
19
|
+
* The offset into `node`'s raw that the position `offset` in the leaf at `path` sits at: the
|
|
20
|
+
* inverse of {@link leafAtRawOffset}, with the same refusal.
|
|
21
|
+
*/
|
|
22
|
+
export declare function rawOffsetOfLeaf(node: NodeView, path: readonly number[], offset: number): number | null;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps between a byte offset in a block's `raw` and a caret position in one of its leaves, for a
|
|
3
|
+
* fix-up that tracks the caret through a merge. A container's raw re-prefixes its children's lines
|
|
4
|
+
* (`> `, an item's indent), so the map goes line by line; only a `'strip'` container's is known.
|
|
5
|
+
*/
|
|
6
|
+
import { displayLength, splitLines } from '../core/lines';
|
|
7
|
+
import { tryGetBlockKindDescriptor } from '../schema/block-kind-descriptor';
|
|
8
|
+
// ── Public API ───────────────────────────────────────────────────────────────
|
|
9
|
+
/**
|
|
10
|
+
* The leaf and offset `rawOffset` addresses inside `node`; null when a container on the way is
|
|
11
|
+
* not a strip container, whose bytes this module can't map to its children.
|
|
12
|
+
*/
|
|
13
|
+
export function leafAtRawOffset(node, rawOffset) {
|
|
14
|
+
const descriptor = tryGetBlockKindDescriptor(node.kind);
|
|
15
|
+
if (!descriptor?.isContainer || !node.children?.length) {
|
|
16
|
+
return { path: [], offset: Math.min(Math.max(rawOffset, 0), displayLength(node.raw)) };
|
|
17
|
+
}
|
|
18
|
+
if (descriptor.containerContract !== 'strip')
|
|
19
|
+
return null;
|
|
20
|
+
const inner = bodyOffsetOf(node, rawOffset) - (node.innerPrefix ?? '').length;
|
|
21
|
+
const children = node.children;
|
|
22
|
+
let at = 0;
|
|
23
|
+
for (let i = 0; i < children.length; i++) {
|
|
24
|
+
const start = at + children[i].leadingTrivia.length;
|
|
25
|
+
const end = start + displayLength(children[i].raw);
|
|
26
|
+
if (inner <= end || i === children.length - 1) {
|
|
27
|
+
const leaf = leafAtRawOffset(children[i], Math.max(inner - start, 0));
|
|
28
|
+
return leaf && { path: [i, ...leaf.path], offset: leaf.offset };
|
|
29
|
+
}
|
|
30
|
+
at = start + children[i].raw.length;
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The offset into `node`'s raw that the position `offset` in the leaf at `path` sits at: the
|
|
36
|
+
* inverse of {@link leafAtRawOffset}, with the same refusal.
|
|
37
|
+
*/
|
|
38
|
+
export function rawOffsetOfLeaf(node, path, offset) {
|
|
39
|
+
if (path.length === 0)
|
|
40
|
+
return offset;
|
|
41
|
+
const descriptor = tryGetBlockKindDescriptor(node.kind);
|
|
42
|
+
const children = node.children;
|
|
43
|
+
if (descriptor?.containerContract !== 'strip' || !children?.[path[0]])
|
|
44
|
+
return null;
|
|
45
|
+
const inChild = rawOffsetOfLeaf(children[path[0]], path.slice(1), offset);
|
|
46
|
+
if (inChild === null)
|
|
47
|
+
return null;
|
|
48
|
+
let inner = (node.innerPrefix ?? '').length;
|
|
49
|
+
for (let i = 0; i < path[0]; i++)
|
|
50
|
+
inner += children[i].leadingTrivia.length + children[i].raw.length;
|
|
51
|
+
inner += children[path[0]].leadingTrivia.length + inChild;
|
|
52
|
+
return rawOffsetOfBody(node, inner);
|
|
53
|
+
}
|
|
54
|
+
function lineTable(node) {
|
|
55
|
+
const body = (node.innerPrefix ?? '') +
|
|
56
|
+
(node.children ?? []).map((child) => child.leadingTrivia + child.raw).join('') +
|
|
57
|
+
(node.innerSuffix ?? '');
|
|
58
|
+
const raw = splitLines(node.raw);
|
|
59
|
+
const bodyLines = splitLines(body);
|
|
60
|
+
return { raw, body: bodyLines, shift: Math.max(raw.length - bodyLines.length, 0) };
|
|
61
|
+
}
|
|
62
|
+
/** How many bytes the container writes in front of a body line: the raw line's extra length. */
|
|
63
|
+
const prefixLength = (raw, body) => Math.max(raw.text.length - body.text.length, 0);
|
|
64
|
+
function bodyOffsetOf(node, rawOffset) {
|
|
65
|
+
const { raw, body, shift } = lineTable(node);
|
|
66
|
+
const r = lineHolding(raw, rawOffset);
|
|
67
|
+
const b = r - shift;
|
|
68
|
+
if (b < 0 || !body[b])
|
|
69
|
+
return b < 0 ? 0 : (body.at(-1)?.end ?? 0);
|
|
70
|
+
const column = Math.min(rawOffset - raw[r].start, raw[r].text.length);
|
|
71
|
+
const inBody = Math.min(Math.max(column - prefixLength(raw[r], body[b]), 0), body[b].text.length);
|
|
72
|
+
return body[b].start + inBody;
|
|
73
|
+
}
|
|
74
|
+
function rawOffsetOfBody(node, bodyOffset) {
|
|
75
|
+
const { raw, body, shift } = lineTable(node);
|
|
76
|
+
const b = lineHolding(body, bodyOffset);
|
|
77
|
+
const r = b + shift;
|
|
78
|
+
if (!raw[r] || !body[b])
|
|
79
|
+
return raw.at(-1)?.end ?? 0;
|
|
80
|
+
const column = Math.min(bodyOffset - body[b].start, body[b].text.length);
|
|
81
|
+
return raw[r].start + Math.min(prefixLength(raw[r], body[b]) + column, raw[r].text.length);
|
|
82
|
+
}
|
|
83
|
+
/** The index of the line `offset` falls on; an offset on a line's ending counts as that line. */
|
|
84
|
+
function lineHolding(lines, offset) {
|
|
85
|
+
for (let i = 0; i < lines.length; i++)
|
|
86
|
+
if (offset < lines[i].end)
|
|
87
|
+
return i;
|
|
88
|
+
return Math.max(lines.length - 1, 0);
|
|
89
|
+
}
|