@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,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Single entry point for paste: parse the clipboard, pick inline
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* block's `pendingCursorOffset` may address a block the range delete is about to unmount.
|
|
2
|
+
* Single entry point for paste: parse the clipboard, pick inline or structural, and route through
|
|
3
|
+
* the target kind's `PasteSurface` (its paste handlers), whose inline and structural results this
|
|
4
|
+
* module applies; a scoped-structural handler owns its whole mutation, focus included. A
|
|
5
|
+
* cross-block paste focuses through the DOM, since its range delete may unmount the origin block.
|
|
7
6
|
*/
|
|
8
|
-
import {
|
|
7
|
+
import { readBlocks } from '../../core/parser';
|
|
9
8
|
import { isBlockNode, nodeAt } from '../node-primitives';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
9
|
+
import { docPathFrom } from '../../cursor/coordinate-spaces';
|
|
10
|
+
import { replaceRangeInLeaf } from '../leaf-range';
|
|
11
|
+
import { documentLineEnding, trailingLineEnding, trimTrailingLineEnding, withLineEnding } from '../../core/lines';
|
|
12
|
+
import { getPasteSurface, isPasteSurfaceRegistered } from '../paste-surfaces';
|
|
13
13
|
import { isReservedChromeChild } from '../../schema/reserved-chrome';
|
|
14
14
|
import { applyInlineResult, applyStructuralResult } from './apply';
|
|
15
15
|
import { normalizeClipboardForBody } from './body-write';
|
|
@@ -19,69 +19,84 @@ import { devWarn } from '../../dev-warn';
|
|
|
19
19
|
import { applyListAbsorb, findListAbsorb } from './list-absorb';
|
|
20
20
|
import { applyListBreakOut, findListBreakOut } from './list-break-out';
|
|
21
21
|
import { applyPasteTransforms } from './paste-transforms';
|
|
22
|
+
import { inlineResultInEnding } from './line-ending';
|
|
22
23
|
import { contentBlocks, pickPasteStrategy } from './strategy';
|
|
24
|
+
import { childSlotAt } from '../list/task-paragraph';
|
|
25
|
+
import { storedAsAt } from '../stored-as';
|
|
23
26
|
/** Execute a paste at the specified target position. */
|
|
24
27
|
export async function pasteDispatch(input, ctx) {
|
|
25
28
|
if (!input.pastedText)
|
|
26
29
|
return {};
|
|
27
30
|
// Once, before any branch below reads the text; a transform that empties it is an
|
|
28
31
|
// empty paste.
|
|
29
|
-
const
|
|
32
|
+
const { activePlugins } = ctx;
|
|
33
|
+
const { reading } = ctx;
|
|
34
|
+
// The hooks read the LF text; every line the paste writes takes the document's own ending.
|
|
35
|
+
const ending = documentLineEnding(ctx.doc);
|
|
36
|
+
const transformed = applyPasteTransforms(input.pastedText, activePlugins);
|
|
30
37
|
if (!transformed)
|
|
31
38
|
return {};
|
|
32
39
|
// Ahead of the fragment parse, so the strategy pick and every landed kind follow the
|
|
33
40
|
// bytes a bodyWrite-declaring ancestor will actually accept.
|
|
34
41
|
const pastedText = normalizeClipboardForBody(ctx.doc, input.targetPath, transformed);
|
|
35
|
-
const parsed = parse(pastedText, { grammar: ctx.grammar, scope: 'fragment' });
|
|
36
|
-
if (parsed.children.length === 0)
|
|
37
|
-
return {};
|
|
38
42
|
const targetNode = nodeAt(ctx.doc, input.targetPath);
|
|
39
43
|
if (!targetNode)
|
|
40
44
|
return {};
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
|
|
45
|
+
// Undo's caret for every commit below but a scoped-structural surface's own: where the paste
|
|
46
|
+
// began, never where it lands.
|
|
47
|
+
const start = {
|
|
48
|
+
path: docPathFrom(input.targetPath),
|
|
49
|
+
offset: input.caretBefore ?? input.preDelete?.start ?? input.offset
|
|
50
|
+
};
|
|
51
|
+
const store = storedAsAt(ctx.doc, input.targetPath, reading);
|
|
52
|
+
const parsed = readBlocks(withLineEnding(pastedText, ending), {
|
|
53
|
+
grammar: reading.grammar,
|
|
54
|
+
scope: 'fragment'
|
|
55
|
+
});
|
|
56
|
+
if (parsed.children.length === 0)
|
|
57
|
+
return {};
|
|
58
|
+
// A reserved title child serializes on one line, so paste there is forced inline before any
|
|
59
|
+
// container route could split it; the trim drops only the spaces the flattening made.
|
|
44
60
|
const chromeParent = nodeAt(ctx.doc, input.targetPath.slice(0, -1));
|
|
45
61
|
if (chromeParent &&
|
|
46
62
|
isBlockNode(chromeParent) &&
|
|
47
63
|
isReservedChromeChild(chromeParent, input.targetPath[input.targetPath.length - 1])) {
|
|
48
64
|
const flattened = pastedText.replace(/(\r?\n)+/g, ' ').trim();
|
|
49
|
-
const hook = getPasteSurface(targetNode.kind)?.onInlinePaste ?? defaultInlineHook;
|
|
50
|
-
const result = hook(targetNode, input.offset, flattened, input.preDelete,
|
|
51
|
-
const landing = await applyInlineResult(input.targetPath, result, ctx);
|
|
65
|
+
const hook = getPasteSurface(targetNode.kind, activePlugins)?.onInlinePaste ?? defaultInlineHook;
|
|
66
|
+
const result = hook(targetNode, input.offset, flattened, input.preDelete, store, ending);
|
|
67
|
+
const landing = await applyInlineResult(input.targetPath, result, ctx, start);
|
|
52
68
|
return inlineCaretResult(result.caretOffset, landing);
|
|
53
69
|
}
|
|
54
|
-
// The delete half the container
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
const unwrap = findContainerMatchingUnwrap(ctx.doc, input.targetPath, target.offset, parsed, ctx.undoEntry === 'join', target.raw);
|
|
70
|
+
// The delete half, applied before the container finders, which decide on the target's bytes and
|
|
71
|
+
// never cut the range themselves; the hook routes cut their own, kind rules included.
|
|
72
|
+
const target = targetAfterPreDelete(targetNode, input, store, ending);
|
|
73
|
+
const unwrap = findContainerMatchingUnwrap(ctx.doc, input.targetPath, target.offset, parsed, ctx.crossBlock === true, target.raw);
|
|
59
74
|
if (unwrap) {
|
|
60
|
-
await applyContainerMatchingPaste(unwrap, ctx);
|
|
75
|
+
await applyContainerMatchingPaste(unwrap, ctx, start);
|
|
61
76
|
return {};
|
|
62
77
|
}
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
// does not.
|
|
78
|
+
// For a single-block non-empty target: absorb when `matchesAncestor` accepts the enclosing
|
|
79
|
+
// container, break out when it does not.
|
|
66
80
|
const absorb = findListAbsorb(ctx.doc, input.targetPath, parsed, target.offset, target.raw);
|
|
67
81
|
if (absorb) {
|
|
68
|
-
await applyListAbsorb(absorb, parsed.children[0], ctx);
|
|
82
|
+
await applyListAbsorb(absorb, parsed.children[0], ctx, start);
|
|
69
83
|
return {};
|
|
70
84
|
}
|
|
71
85
|
const breakOut = findListBreakOut(ctx.doc, input.targetPath, parsed, target.offset, target.raw);
|
|
72
86
|
if (breakOut) {
|
|
73
|
-
await applyListBreakOut(breakOut, parsed.children, ctx);
|
|
87
|
+
await applyListBreakOut(breakOut, parsed.children, ctx, start);
|
|
74
88
|
return {};
|
|
75
89
|
}
|
|
76
|
-
const surface = getPasteSurface(targetNode.kind);
|
|
77
|
-
|
|
90
|
+
const surface = getPasteSurface(targetNode.kind, activePlugins);
|
|
91
|
+
// A plugin's surface this editor left out is no gap to warn about: the default hooks are meant.
|
|
92
|
+
if (surface === undefined && !isPasteSurfaceRegistered(targetNode.kind)) {
|
|
78
93
|
devWarn('paste-dispatch', 'no paste surface registered for this kind; falling through to default hooks. Register ' +
|
|
79
94
|
'via registerPasteSurface() if the kind has its own paste semantics', targetNode.kind);
|
|
80
95
|
}
|
|
81
96
|
const blocks = surface?.blankEdgesArePackaging ? contentBlocks(parsed.children) : parsed.children;
|
|
82
97
|
const clipboardStrategy = pickPasteStrategy(blocks);
|
|
83
|
-
// A
|
|
84
|
-
// markdown stays verbatim.
|
|
98
|
+
// A kind whose paste handlers omit both structural hooks (code blocks) forces paste inline,
|
|
99
|
+
// so its markdown stays verbatim.
|
|
85
100
|
const surfaceForcesInline = surface !== undefined &&
|
|
86
101
|
surface.onStructuralPaste === undefined &&
|
|
87
102
|
surface.onScopedStructuralPaste === undefined;
|
|
@@ -91,49 +106,49 @@ export async function pasteDispatch(input, ctx) {
|
|
|
91
106
|
doc: ctx.doc,
|
|
92
107
|
targetPath: input.targetPath,
|
|
93
108
|
blocks: blocks.slice(),
|
|
94
|
-
controller: ctx.controller
|
|
95
|
-
undoEntry: ctx.undoEntry ?? 'own',
|
|
96
|
-
grammar: ctx.grammar
|
|
109
|
+
controller: ctx.controller
|
|
97
110
|
});
|
|
98
111
|
return {};
|
|
99
112
|
}
|
|
100
113
|
if (strategy === 'inline') {
|
|
101
114
|
const hook = surface?.onInlinePaste ?? defaultInlineHook;
|
|
102
|
-
const result = hook(targetNode, input.offset, pastedText, input.preDelete,
|
|
103
|
-
const landing = await applyInlineResult(input.targetPath, result, ctx);
|
|
115
|
+
const result = inlineResultInEnding(targetNode.raw, hook(targetNode, input.offset, pastedText, input.preDelete, store, ending), ending);
|
|
116
|
+
const landing = await applyInlineResult(input.targetPath, result, ctx, start);
|
|
104
117
|
return inlineCaretResult(result.caretOffset, landing);
|
|
105
118
|
}
|
|
106
119
|
const hook = surface?.onStructuralPaste ?? defaultStructuralHook;
|
|
107
|
-
const
|
|
108
|
-
|
|
120
|
+
const slot = childSlotAt(ctx.doc, input.targetPath);
|
|
121
|
+
const result = hook(targetNode, input.offset, blocks.slice(), input.preDelete, store, ending, slot);
|
|
122
|
+
await applyStructuralResult(input.targetPath, result, ctx, start, trailingSeparatorOf(parsed, result, surface));
|
|
109
123
|
return {};
|
|
110
124
|
}
|
|
111
|
-
/** The target's bytes and caret as the paste's delete half leaves them
|
|
112
|
-
|
|
125
|
+
/** The target's bytes and caret as the paste's delete half leaves them: what a Delete over the range
|
|
126
|
+
* writes, since the container routes put their blocks after it. */
|
|
127
|
+
function targetAfterPreDelete(node, input, store, lineEnding) {
|
|
113
128
|
if (!input.preDelete)
|
|
114
129
|
return { raw: node.raw, offset: input.offset };
|
|
115
|
-
const cut =
|
|
116
|
-
return {
|
|
130
|
+
const cut = replaceRangeInLeaf(node, input.preDelete, '', store);
|
|
131
|
+
return {
|
|
132
|
+
raw: trimTrailingLineEnding(cut.raw) + trailingLineEnding(node.raw, lineEnding),
|
|
133
|
+
offset: cut.caret
|
|
134
|
+
};
|
|
117
135
|
}
|
|
118
136
|
/**
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
* — so consuming children alone made one route keep the copied separation and its twin lose it.
|
|
122
|
-
* Spent only where the splice leaves nothing behind the pasted blocks; a residue or a follower
|
|
123
|
-
* already carries a separator of its own, and a packaging surface declines the whole question.
|
|
137
|
+
* The clipboard's trailing blank line (`suffix`), which the inline route pastes verbatim too;
|
|
138
|
+
* landed only where no residue follows the pasted blocks and the kind keeps blank edges.
|
|
124
139
|
*/
|
|
125
140
|
function trailingSeparatorOf(parsed, result, surface) {
|
|
126
141
|
if (surface?.blankEdgesArePackaging)
|
|
127
142
|
return '';
|
|
128
|
-
// `focusReplacementIndex`
|
|
143
|
+
// `focusReplacementIndex` is the last pasted node (`paste/focus-target.ts`), so anything past
|
|
129
144
|
// it is reattached residue.
|
|
130
145
|
return result.focusReplacementIndex === result.replacement.length - 1 ? parsed.suffix : '';
|
|
131
146
|
}
|
|
132
|
-
/** The hook's own caret offset, overridden by the
|
|
147
|
+
/** The hook's own caret offset, overridden by where the caret ended up when a merge moved it. */
|
|
133
148
|
function inlineCaretResult(caretOffset, landing) {
|
|
134
149
|
if (!landing)
|
|
135
150
|
return { inlineCaretOffset: caretOffset };
|
|
136
151
|
return { inlineCaretOffset: landing.offset, inlineCaretPath: landing.path };
|
|
137
152
|
}
|
|
138
153
|
export { pickPasteStrategy } from './strategy';
|
|
139
|
-
export { defaultInlineHook, defaultStructuralHook
|
|
154
|
+
export { defaultInlineHook, defaultStructuralHook } from './hooks';
|
|
@@ -1,27 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The caret a `[prefix?, ...pasted, residue?]` replacement lands, on both sides of the
|
|
3
|
-
*
|
|
4
|
-
* offset
|
|
2
|
+
* The caret a `[prefix?, ...pasted, residue?]` replacement lands, on both sides of the separator
|
|
3
|
+
* fix-up: which node the paste aims at, the position the fix-up's merges keep updated for it,
|
|
4
|
+
* and the leaf and offset the caret can actually sit at there.
|
|
5
5
|
*/
|
|
6
6
|
import type { CstNode } from '../../core/nodes';
|
|
7
7
|
import type { NodeView } from '../../core/node-views';
|
|
8
8
|
import type { TrackedPosition } from '../settle';
|
|
9
|
+
import { type LeafPosition } from '../container-offsets';
|
|
9
10
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* node; a route that reattaches it inside the last pasted leaf lands at a char offset in a
|
|
13
|
-
* different coordinate space.
|
|
11
|
+
* The last pasted node's index, shared so every structural route skips a residue node the same
|
|
12
|
+
* way; a residue reattached inside the last pasted leaf is not a node and isn't counted.
|
|
14
13
|
*/
|
|
15
14
|
export declare function focusIndexBeforeResidue(replacementLength: number, hasResidue: boolean): number;
|
|
16
15
|
/**
|
|
17
|
-
* The
|
|
18
|
-
*
|
|
19
|
-
* would clamp to whatever the fold reattached behind it, which is the bug it exists to prevent.
|
|
16
|
+
* The end of the pasted bytes, for the fix-up's merges to keep updated. `CURSOR_END` resolves to
|
|
17
|
+
* the node's display end here, or the tracker would clamp it past whatever a merge reattached.
|
|
20
18
|
*/
|
|
21
19
|
export declare function trackedPasteCaret(replacement: readonly CstNode[], at: number, focusIndex: number, focusOffset: number): TrackedPosition;
|
|
22
20
|
/**
|
|
23
|
-
* The offset
|
|
24
|
-
*
|
|
25
|
-
* address no caret seat. Anything the caller named itself stands as given.
|
|
21
|
+
* The leaf and offset holding the tracked byte inside the landed block. An offset the caller named
|
|
22
|
+
* stands as given, and a block whose bytes map to no leaf (a table) takes the caret at its end.
|
|
26
23
|
*/
|
|
27
|
-
export declare function
|
|
24
|
+
export declare function landedPastePosition(landed: NodeView | undefined, tracked: TrackedPosition, focusOffset: number): LeafPosition;
|
|
@@ -1,24 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The caret a `[prefix?, ...pasted, residue?]` replacement lands, on both sides of the
|
|
3
|
-
*
|
|
4
|
-
* offset
|
|
2
|
+
* The caret a `[prefix?, ...pasted, residue?]` replacement lands, on both sides of the separator
|
|
3
|
+
* fix-up: which node the paste aims at, the position the fix-up's merges keep updated for it,
|
|
4
|
+
* and the leaf and offset the caret can actually sit at there.
|
|
5
5
|
*/
|
|
6
6
|
import { CURSOR_END } from '../../block-component';
|
|
7
7
|
import { trimTrailingLineEnding } from '../../core/lines';
|
|
8
|
-
import {
|
|
8
|
+
import { leafAtRawOffset } from '../container-offsets';
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* node; a route that reattaches it inside the last pasted leaf lands at a char offset in a
|
|
13
|
-
* different coordinate space.
|
|
10
|
+
* The last pasted node's index, shared so every structural route skips a residue node the same
|
|
11
|
+
* way; a residue reattached inside the last pasted leaf is not a node and isn't counted.
|
|
14
12
|
*/
|
|
15
13
|
export function focusIndexBeforeResidue(replacementLength, hasResidue) {
|
|
16
14
|
return hasResidue && replacementLength >= 2 ? replacementLength - 2 : replacementLength - 1;
|
|
17
15
|
}
|
|
18
16
|
/**
|
|
19
|
-
* The
|
|
20
|
-
*
|
|
21
|
-
* would clamp to whatever the fold reattached behind it, which is the bug it exists to prevent.
|
|
17
|
+
* The end of the pasted bytes, for the fix-up's merges to keep updated. `CURSOR_END` resolves to
|
|
18
|
+
* the node's display end here, or the tracker would clamp it past whatever a merge reattached.
|
|
22
19
|
*/
|
|
23
20
|
export function trackedPasteCaret(replacement, at, focusIndex, focusOffset) {
|
|
24
21
|
const displayEnd = trimTrailingLineEnding(replacement[focusIndex]?.raw ?? '').length;
|
|
@@ -28,13 +25,11 @@ export function trackedPasteCaret(replacement, at, focusIndex, focusOffset) {
|
|
|
28
25
|
};
|
|
29
26
|
}
|
|
30
27
|
/**
|
|
31
|
-
* The offset
|
|
32
|
-
*
|
|
33
|
-
* address no caret seat. Anything the caller named itself stands as given.
|
|
28
|
+
* The leaf and offset holding the tracked byte inside the landed block. An offset the caller named
|
|
29
|
+
* stands as given, and a block whose bytes map to no leaf (a table) takes the caret at its end.
|
|
34
30
|
*/
|
|
35
|
-
export function
|
|
31
|
+
export function landedPastePosition(landed, tracked, focusOffset) {
|
|
36
32
|
if (focusOffset !== CURSOR_END)
|
|
37
|
-
return focusOffset;
|
|
38
|
-
|
|
39
|
-
return leaf ? tracked.offset : CURSOR_END;
|
|
33
|
+
return { path: [], offset: focusOffset };
|
|
34
|
+
return (landed && leafAtRawOffset(landed, tracked.offset)) ?? { path: [], offset: CURSOR_END };
|
|
40
35
|
}
|
|
@@ -3,15 +3,10 @@
|
|
|
3
3
|
* for every built-in kind whose descriptor advertises `supportsInline`.
|
|
4
4
|
*/
|
|
5
5
|
import { type CstNode } from '../../core/nodes';
|
|
6
|
-
import { type
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* already resolved — a seam cleanup moves both, and re-deriving them here would disagree.
|
|
14
|
-
*/
|
|
15
|
-
export declare function pastedContentFocusIndex(display: string, offset: number, replacementLength: number): number;
|
|
16
|
-
/** Test-only: produce a default text surface descriptor. */
|
|
17
|
-
export declare function __getDefaultTextSurface(kind: PasteSurface['kind']): PasteSurface;
|
|
6
|
+
import { type LineEnding } from '../../core/lines';
|
|
7
|
+
import type { ChildSlot } from '../list/task-paragraph';
|
|
8
|
+
import { type PasteRange, type InlinePasteResult, type StructuralPasteResult } from '../paste-surfaces';
|
|
9
|
+
import type { StoredAs } from '../../schema/stored-as';
|
|
10
|
+
/** The pasted text over the selection, or at the caret, written as typing it there would be. */
|
|
11
|
+
export declare function defaultInlineHook(node: CstNode, offset: number, text: string, preDelete: PasteRange | undefined, store: StoredAs, lineEnding: LineEnding): InlinePasteResult;
|
|
12
|
+
export declare function defaultStructuralHook(node: CstNode, offset: number, blocks: CstNode[], preDelete: PasteRange | undefined, store: StoredAs, lineEnding: LineEnding, slot: ChildSlot): StructuralPasteResult;
|
|
@@ -6,54 +6,65 @@ import { CURSOR_END } from '../../block-component';
|
|
|
6
6
|
import { isBuiltinBlockKind } from '../../core/nodes';
|
|
7
7
|
import { trailingLineEnding, trimTrailingLineEnding } from '../../core/lines';
|
|
8
8
|
import { buildPastedReplacement } from './paste-replacement';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { replaceRangeInLeaf } from '../leaf-range';
|
|
10
|
+
import { getContentRange, readInline } from '../../core/inline';
|
|
11
|
+
import { CONTENT_VISIBILITY, visibleRuns } from '../../core/inline/visibility';
|
|
11
12
|
import { getAllRegisteredKinds, tryGetBlockKindDescriptor } from '../../schema/block-kind-descriptor';
|
|
12
13
|
import { registerPasteSurface } from '../paste-surfaces';
|
|
13
14
|
// Registered by their own component instead of the loop below. One registrar per kind, so
|
|
14
15
|
// correctness doesn't hinge on module load order.
|
|
15
16
|
const BESPOKE_SURFACE_KINDS = new Set(['tableCell']);
|
|
16
|
-
/**
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return cutRangeFromDisplay(node, display, preDelete, seam?.presentationMode, seam?.linkRef);
|
|
25
|
-
}
|
|
26
|
-
export function defaultInlineHook(node, offset, text, preDelete, seam) {
|
|
27
|
-
const display = trimTrailingLineEnding(node.raw);
|
|
28
|
-
const lineEnding = trailingLineEnding(node.raw);
|
|
29
|
-
const { display: effectiveDisplay, offset: effectiveOffset } = applyPreDelete(node, display, preDelete, offset, seam);
|
|
30
|
-
const newDisplay = effectiveDisplay.slice(0, effectiveOffset) + text + effectiveDisplay.slice(effectiveOffset);
|
|
31
|
-
return {
|
|
32
|
-
newRaw: newDisplay + lineEnding,
|
|
33
|
-
caretOffset: effectiveOffset + text.length
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
export function defaultStructuralHook(node, offset, blocks, preDelete, seam) {
|
|
37
|
-
const display = trimTrailingLineEnding(node.raw);
|
|
38
|
-
const cut = applyPreDelete(node, display, preDelete, offset, seam);
|
|
39
|
-
// Compare the BYTES rather than the range: a cleanup can drop more than the selection did,
|
|
40
|
-
// and an empty range leaves them equal, which is exactly when the original node stands.
|
|
41
|
-
const synthLeaf = cut.display === display ? node : { ...node, raw: cut.display + trailingLineEnding(node.raw) };
|
|
42
|
-
const replacement = buildPastedReplacement(synthLeaf, cut.offset, blocks);
|
|
17
|
+
/** The pasted text over the selection, or at the caret, written as typing it there would be. */
|
|
18
|
+
export function defaultInlineHook(node, offset, text, preDelete, store, lineEnding) {
|
|
19
|
+
const range = preDelete ?? { start: offset, end: offset };
|
|
20
|
+
const bare = dropClosingLineEnding(text);
|
|
21
|
+
const probe = replaceRangeInLeaf(node, range, bare, store);
|
|
22
|
+
const edit = bare === text || endsVisibleLine(node, probe, store)
|
|
23
|
+
? probe
|
|
24
|
+
: replaceRangeInLeaf(node, range, text, store);
|
|
43
25
|
return {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
focusOffset: CURSOR_END
|
|
26
|
+
newRaw: trimTrailingLineEnding(edit.raw) + trailingLineEnding(node.raw, lineEnding),
|
|
27
|
+
caretOffset: edit.caret
|
|
47
28
|
};
|
|
48
29
|
}
|
|
49
30
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* so the pasted content ends one node earlier. Takes the display and offset the delete half
|
|
53
|
-
* already resolved — a seam cleanup moves both, and re-deriving them here would disagree.
|
|
31
|
+
* `text` without the ending of its last line, which against a line end would leave a blank line
|
|
32
|
+
* in the paragraph; a whole blank last line stays, since the clipboard carried it as a block.
|
|
54
33
|
*/
|
|
55
|
-
|
|
56
|
-
|
|
34
|
+
function dropClosingLineEnding(text) {
|
|
35
|
+
const closing = /\r?\n$/.exec(text);
|
|
36
|
+
if (!closing)
|
|
37
|
+
return text;
|
|
38
|
+
const rest = text.slice(0, closing.index);
|
|
39
|
+
return rest === '' || /\r?\n$/.test(rest) ? text : rest;
|
|
40
|
+
}
|
|
41
|
+
/** Whether nothing the user sees follows the caret on its line: a delimiter run the reading
|
|
42
|
+
* hides there, such as a bold word's closer, still ends the line. */
|
|
43
|
+
function endsVisibleLine(node, edit, store) {
|
|
44
|
+
const after = trimTrailingLineEnding(edit.raw).slice(edit.caret);
|
|
45
|
+
if (after === '' || /^\r?\n/.test(after))
|
|
46
|
+
return true;
|
|
47
|
+
if (!store.reading.hidesDelimitersAtCaret())
|
|
48
|
+
return false;
|
|
49
|
+
const lineEnd = edit.caret + (/\r?\n/.exec(after)?.index ?? after.length);
|
|
50
|
+
const content = getContentRange({ ...node, raw: edit.raw });
|
|
51
|
+
const { resolver, grammar } = store.reading;
|
|
52
|
+
const inlines = readInline(edit.raw, content.start, content.end, resolver, grammar);
|
|
53
|
+
return !visibleRuns(inlines, edit.raw, CONTENT_VISIBILITY, { grammar }).some((run) => run.visible && run.text !== '' && run.end > edit.caret && run.start < lineEnd);
|
|
54
|
+
}
|
|
55
|
+
export function defaultStructuralHook(node, offset, blocks, preDelete, store, lineEnding, slot) {
|
|
56
|
+
// The blocks go in after the cut, as a split does, so the cut takes no text of its own.
|
|
57
|
+
const cut = preDelete && replaceRangeInLeaf(node, preDelete, '', store);
|
|
58
|
+
const display = cut && trimTrailingLineEnding(cut.raw);
|
|
59
|
+
// Compare the bytes rather than the range: a cleanup can drop more than the selection did,
|
|
60
|
+
// and an empty range leaves them equal, which is exactly when the original node stands.
|
|
61
|
+
const synthLeaf = !cut || display === trimTrailingLineEnding(node.raw)
|
|
62
|
+
? node
|
|
63
|
+
: { ...node, raw: display + trailingLineEnding(node.raw, lineEnding) };
|
|
64
|
+
const { nodes, lastPastedIndex } = buildPastedReplacement(synthLeaf, cut ? cut.caret : offset, blocks, lineEnding, store.reading.grammar, slot);
|
|
65
|
+
// The caret lands where the pasted bytes end, which the fix-up tracks when it merges the
|
|
66
|
+
// residue into the last pasted block.
|
|
67
|
+
return { replacement: nodes, focusReplacementIndex: lastPastedIndex, focusOffset: CURSOR_END };
|
|
57
68
|
}
|
|
58
69
|
// Built-in kinds are all registered by the time this top level runs; a plugin kind
|
|
59
70
|
// registering later must register its own paste surface.
|
|
@@ -70,11 +81,3 @@ for (const kind of getAllRegisteredKinds()) {
|
|
|
70
81
|
});
|
|
71
82
|
}
|
|
72
83
|
}
|
|
73
|
-
/** Test-only: produce a default text surface descriptor. */
|
|
74
|
-
export function __getDefaultTextSurface(kind) {
|
|
75
|
-
return {
|
|
76
|
-
kind,
|
|
77
|
-
onInlinePaste: defaultInlineHook,
|
|
78
|
-
onStructuralPaste: defaultStructuralHook
|
|
79
|
-
};
|
|
80
|
-
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pasted line breaks written in the document's own ending. The clipboard reaches the paste
|
|
3
|
+
* transforms and hooks as LF, so an inline hook's result is rewritten here on its way in.
|
|
4
|
+
*/
|
|
5
|
+
import type { LineEnding } from '../../core/lines';
|
|
6
|
+
import type { InlinePasteResult } from '../paste-surfaces';
|
|
7
|
+
/**
|
|
8
|
+
* An inline hook's result with the breaks it spliced in written as `ending`; only the bytes
|
|
9
|
+
* between the unchanged head and tail are the paste's, so the block's own endings stay.
|
|
10
|
+
*/
|
|
11
|
+
export declare function inlineResultInEnding(before: string, result: InlinePasteResult, ending: LineEnding): InlinePasteResult;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pasted line breaks written in the document's own ending. The clipboard reaches the paste
|
|
3
|
+
* transforms and hooks as LF, so an inline hook's result is rewritten here on its way in.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* An inline hook's result with the breaks it spliced in written as `ending`; only the bytes
|
|
7
|
+
* between the unchanged head and tail are the paste's, so the block's own endings stay.
|
|
8
|
+
*/
|
|
9
|
+
export function inlineResultInEnding(before, result, ending) {
|
|
10
|
+
if (ending === '\n')
|
|
11
|
+
return result;
|
|
12
|
+
const after = result.newRaw;
|
|
13
|
+
let head = 0;
|
|
14
|
+
while (head < before.length && before[head] === after[head])
|
|
15
|
+
head++;
|
|
16
|
+
let tail = 0;
|
|
17
|
+
while (tail < before.length - head &&
|
|
18
|
+
tail < after.length - head &&
|
|
19
|
+
before[before.length - 1 - tail] === after[after.length - 1 - tail]) {
|
|
20
|
+
tail++;
|
|
21
|
+
}
|
|
22
|
+
const end = after.length - tail;
|
|
23
|
+
let lengthened = 0;
|
|
24
|
+
const newRaw = after.replace(/(?<!\r)\n/g, (lf, at) => {
|
|
25
|
+
if (at < head || at >= end)
|
|
26
|
+
return lf;
|
|
27
|
+
if (at < result.caretOffset)
|
|
28
|
+
lengthened++;
|
|
29
|
+
return ending;
|
|
30
|
+
});
|
|
31
|
+
return { newRaw, caretOffset: result.caretOffset + lengthened };
|
|
32
|
+
}
|
|
@@ -1,29 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Paste absorb: a same-type list pasted into a non-empty list item
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* after `findContainerMatchingUnwrap` and would otherwise fall through to the default
|
|
6
|
-
* structural paste; mismatched types go to `list-break-out` instead.
|
|
2
|
+
* Paste absorb: a same-type list pasted into a non-empty list item lands as siblings of the target
|
|
3
|
+
* item, markers restyled to the enclosing list's, as most markdown editors do. Runs after
|
|
4
|
+
* `findContainerMatchingUnwrap`; a mismatched type goes to `list-break-out` instead.
|
|
7
5
|
*/
|
|
8
6
|
import type { CstNode, Document } from '../../core/nodes';
|
|
9
7
|
import type { PasteDispatchContext } from './dispatch';
|
|
8
|
+
import type { CommitSnapshotArg } from '../../action-contracts';
|
|
10
9
|
export interface ListAbsorb {
|
|
11
10
|
listPath: number[];
|
|
12
11
|
itemIndex: number;
|
|
13
12
|
innerIndex: number;
|
|
14
13
|
offset: number;
|
|
15
|
-
/** The target leaf's bytes
|
|
14
|
+
/** The target leaf's bytes after the paste's delete half. */
|
|
16
15
|
targetRaw?: string;
|
|
17
16
|
}
|
|
18
17
|
/**
|
|
19
|
-
* The absorb plan
|
|
20
|
-
*
|
|
21
|
-
* ancestor, targeting a direct leaf of the listItem. Mismatched types fall through to
|
|
22
|
-
* `findListBreakOut`.
|
|
18
|
+
* The absorb plan when a single top block declaring `containerPaste.siblingAbsorb` matches the
|
|
19
|
+
* nearest list and the target is a direct leaf of its item; null otherwise.
|
|
23
20
|
*/
|
|
24
21
|
export declare function findListAbsorb(doc: Document, targetPath: number[], parsed: Document, offset: number, targetRaw?: string): ListAbsorb | null;
|
|
25
22
|
/**
|
|
26
23
|
* Split the target item at the caret, splice the pasted items between the halves,
|
|
27
24
|
* normalize markers, renumber. One undo entry on the list's scope.
|
|
28
25
|
*/
|
|
29
|
-
export declare function applyListAbsorb(plan: ListAbsorb, pastedList: CstNode, ctx: PasteDispatchContext): Promise<void>;
|
|
26
|
+
export declare function applyListAbsorb(plan: ListAbsorb, pastedList: CstNode, ctx: PasteDispatchContext, start: CommitSnapshotArg): Promise<void>;
|
|
@@ -1,28 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Paste absorb: a same-type list pasted into a non-empty list item
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* after `findContainerMatchingUnwrap` and would otherwise fall through to the default
|
|
6
|
-
* structural paste; mismatched types go to `list-break-out` instead.
|
|
2
|
+
* Paste absorb: a same-type list pasted into a non-empty list item lands as siblings of the target
|
|
3
|
+
* item, markers restyled to the enclosing list's, as most markdown editors do. Runs after
|
|
4
|
+
* `findContainerMatchingUnwrap`; a mismatched type goes to `list-break-out` instead.
|
|
7
5
|
*/
|
|
8
6
|
import { CURSOR_END } from '../../block-component';
|
|
9
7
|
import { metadataOf } from '../../core/nodes';
|
|
8
|
+
import { documentLineEnding } from '../../core/lines';
|
|
10
9
|
import { nodeAt, ensureEditableContainers } from '../node-primitives';
|
|
11
10
|
import { cloneNode } from '../clone';
|
|
12
11
|
import { containerPasteFor } from './container-paste';
|
|
13
12
|
import { stampStructuralChange } from '../structural-change';
|
|
14
13
|
import { renumberOrderedList, templatePastedItemMarkers } from '../list/ordered-markers';
|
|
15
|
-
import {
|
|
14
|
+
import { spliceMany } from '../splice-many';
|
|
16
15
|
import { containerScopeState } from './parent-scope';
|
|
17
16
|
import { buildSplitItems } from '../list/list-builders';
|
|
18
17
|
import { findEnclosingListForPaste } from './find-enclosing-list';
|
|
19
18
|
import { focusIndexBeforeResidue } from './focus-target';
|
|
20
19
|
import { docPathFrom } from '../../cursor/coordinate-spaces';
|
|
21
20
|
/**
|
|
22
|
-
* The absorb plan
|
|
23
|
-
*
|
|
24
|
-
* ancestor, targeting a direct leaf of the listItem. Mismatched types fall through to
|
|
25
|
-
* `findListBreakOut`.
|
|
21
|
+
* The absorb plan when a single top block declaring `containerPaste.siblingAbsorb` matches the
|
|
22
|
+
* nearest list and the target is a direct leaf of its item; null otherwise.
|
|
26
23
|
*/
|
|
27
24
|
export function findListAbsorb(doc, targetPath, parsed, offset, targetRaw) {
|
|
28
25
|
if (parsed.children.length !== 1)
|
|
@@ -48,7 +45,7 @@ export function findListAbsorb(doc, targetPath, parsed, offset, targetRaw) {
|
|
|
48
45
|
* Split the target item at the caret, splice the pasted items between the halves,
|
|
49
46
|
* normalize markers, renumber. One undo entry on the list's scope.
|
|
50
47
|
*/
|
|
51
|
-
export async function applyListAbsorb(plan, pastedList, ctx) {
|
|
48
|
+
export async function applyListAbsorb(plan, pastedList, ctx, start) {
|
|
52
49
|
const outer = nodeAt(ctx.doc, plan.listPath);
|
|
53
50
|
if (!outer?.children)
|
|
54
51
|
return;
|
|
@@ -58,7 +55,8 @@ export async function applyListAbsorb(plan, pastedList, ctx) {
|
|
|
58
55
|
return;
|
|
59
56
|
if (!item.children[plan.innerIndex])
|
|
60
57
|
return;
|
|
61
|
-
const
|
|
58
|
+
const lineEnding = documentLineEnding(ctx.doc);
|
|
59
|
+
const { leadingItem, trailingItem } = buildSplitItems(item, plan.innerIndex, plan.offset, lineEnding, plan.targetRaw, ctx.reading.grammar);
|
|
62
60
|
const pastedItems = (pastedList.children ?? []).map((c) => cloneNode(c));
|
|
63
61
|
const replacement = [];
|
|
64
62
|
if (leadingItem)
|
|
@@ -68,16 +66,16 @@ export async function applyListAbsorb(plan, pastedList, ctx) {
|
|
|
68
66
|
if (trailingItem)
|
|
69
67
|
replacement.push(trailingItem);
|
|
70
68
|
for (const node of replacement)
|
|
71
|
-
ensureEditableContainers(node);
|
|
69
|
+
ensureEditableContainers(node, lineEnding);
|
|
72
70
|
const outerOrdered = metadataOf(outer, 'list')?.ordered ?? false;
|
|
73
71
|
templatePastedItemMarkers(replacement, outer, plan.itemIndex);
|
|
74
72
|
await ctx.controller.commitMultiScope({
|
|
75
73
|
scopes: [{ node: outer, state: outerState, path: plan.listPath }],
|
|
76
|
-
snapshot:
|
|
74
|
+
snapshot: start,
|
|
77
75
|
mutate: ([scopeView]) => {
|
|
78
76
|
const sharing = scopeView.sharing;
|
|
79
|
-
|
|
80
|
-
// Only items
|
|
77
|
+
spliceMany(scopeView.children, plan.itemIndex, 1, replacement);
|
|
78
|
+
// Only items after the replacement region: their proxies already exist, so marker
|
|
81
79
|
// mutations propagate to the DOM.
|
|
82
80
|
const afterReplacementIdx = plan.itemIndex + replacement.length;
|
|
83
81
|
if (outerOrdered && afterReplacementIdx < scopeView.children.length) {
|
|
@@ -97,10 +95,10 @@ export async function applyListAbsorb(plan, pastedList, ctx) {
|
|
|
97
95
|
detail: { source: 'list-absorb', listPath: plan.listPath },
|
|
98
96
|
eventPath: docPathFrom(plan.listPath)
|
|
99
97
|
},
|
|
100
|
-
|
|
101
|
-
// The shared structural-paste
|
|
98
|
+
landing: () => {
|
|
99
|
+
// The shared structural-paste caret rule: last pasted item, before the residue.
|
|
102
100
|
const lastPastedIdx = plan.itemIndex + focusIndexBeforeResidue(replacement.length, trailingItem !== null);
|
|
103
|
-
return
|
|
101
|
+
return { path: docPathFrom([...plan.listPath, lastPastedIdx]), offset: CURSOR_END };
|
|
104
102
|
}
|
|
105
103
|
});
|
|
106
104
|
}
|