@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,10 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Paste break-out: lift a pasted list out of an enclosing list rather than nesting it,
|
|
3
|
-
* whenever the two ordered flags disagree
|
|
3
|
+
* whenever the two ordered flags disagree: keeping the pasted list separate preserves its
|
|
4
4
|
* semantic type. Same-type pastes go through `list-absorb`.
|
|
5
5
|
*/
|
|
6
6
|
import type { CstNode, Document } from '../../core/nodes';
|
|
7
|
+
import { type LineEnding } from '../../core/lines';
|
|
7
8
|
import type { PasteDispatchContext } from './dispatch';
|
|
9
|
+
import type { CommitSnapshotArg } from '../../action-contracts';
|
|
10
|
+
import type { GrammarView } from '../../schema/block-openers';
|
|
8
11
|
export interface ListBreakOut {
|
|
9
12
|
/** Path to the nearest enclosing list ancestor. */
|
|
10
13
|
listPath: number[];
|
|
@@ -14,29 +17,27 @@ export interface ListBreakOut {
|
|
|
14
17
|
innerIndex: number;
|
|
15
18
|
/** Caret offset within the target leaf's raw. */
|
|
16
19
|
offset: number;
|
|
17
|
-
/** The target leaf's bytes
|
|
20
|
+
/** The target leaf's bytes after the paste's delete half. */
|
|
18
21
|
targetRaw?: string;
|
|
19
22
|
}
|
|
20
23
|
/**
|
|
21
|
-
* The break-out plan
|
|
22
|
-
*
|
|
23
|
-
* `list-absorb` and must not also trigger here), targeting a direct leaf of the listItem.
|
|
24
|
+
* The break-out plan when a top block declaring `containerPaste.siblingAbsorb` does not match the
|
|
25
|
+
* nearest list and the target is a direct leaf of its item; null otherwise.
|
|
24
26
|
*/
|
|
25
27
|
export declare function findListBreakOut(doc: Document, targetPath: number[], parsed: Document, offset: number, targetRaw?: string): ListBreakOut | null;
|
|
26
28
|
/**
|
|
27
29
|
* Split the enclosing list at the target item and splice the pasted blocks between the
|
|
28
30
|
* halves at the list's parent level, in one multi-scope entry.
|
|
29
31
|
*/
|
|
30
|
-
export declare function applyListBreakOut(plan: ListBreakOut, pastedBlocks: CstNode[], ctx: PasteDispatchContext): Promise<void>;
|
|
32
|
+
export declare function applyListBreakOut(plan: ListBreakOut, pastedBlocks: CstNode[], ctx: PasteDispatchContext, start: CommitSnapshotArg): Promise<void>;
|
|
31
33
|
export interface ListBreakOutReplacement {
|
|
32
|
-
/** `[firstHalfList?, ...pastedBlocks, secondHalfList?]
|
|
34
|
+
/** `[firstHalfList?, ...pastedBlocks, secondHalfList?]`, halves omitted when empty. */
|
|
33
35
|
replacement: CstNode[];
|
|
34
36
|
/** The second-half list (post-caret residue) is present as the last node. */
|
|
35
37
|
hasTrailingResidue: boolean;
|
|
36
38
|
}
|
|
37
39
|
/**
|
|
38
|
-
* Split `list` at `(itemIndex, innerIndex, offset)` and splice `pastedBlocks` between the
|
|
39
|
-
*
|
|
40
|
-
* rather than the residue. Input nodes are cloned, not mutated.
|
|
40
|
+
* Split `list` at `(itemIndex, innerIndex, offset)` and splice `pastedBlocks` between the halves,
|
|
41
|
+
* cloning every input node rather than mutating it.
|
|
41
42
|
*/
|
|
42
|
-
export declare function buildListBreakOutReplacement(list: CstNode, itemIndex: number, innerIndex: number, offset: number, pastedBlocks: CstNode[], targetRaw
|
|
43
|
+
export declare function buildListBreakOutReplacement(list: CstNode, itemIndex: number, innerIndex: number, offset: number, pastedBlocks: CstNode[], ending: LineEnding, targetRaw: string | undefined, grammar: GrammarView): ListBreakOutReplacement;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Paste break-out: lift a pasted list out of an enclosing list rather than nesting it,
|
|
3
|
-
* whenever the two ordered flags disagree
|
|
3
|
+
* whenever the two ordered flags disagree: keeping the pasted list separate preserves its
|
|
4
4
|
* semantic type. Same-type pastes go through `list-absorb`.
|
|
5
5
|
*/
|
|
6
6
|
import { CURSOR_END } from '../../block-component';
|
|
@@ -9,19 +9,16 @@ import { cloneNode } from '../clone';
|
|
|
9
9
|
import { spliceMany } from '../splice-many';
|
|
10
10
|
import { stampStructuralChange } from '../structural-change';
|
|
11
11
|
import { containerPasteFor } from './container-paste';
|
|
12
|
-
import {
|
|
13
|
-
import { newlineTerminateListItems } from '../list/terminator';
|
|
14
|
-
import { trailingLineEnding } from '../../core/lines';
|
|
12
|
+
import { documentLineEnding } from '../../core/lines';
|
|
15
13
|
import { assembleListHalf, buildSplitItems } from '../list/list-builders';
|
|
16
14
|
import { orderedBaseOf } from '../list/ordered-markers';
|
|
17
15
|
import { findEnclosingListForPaste } from './find-enclosing-list';
|
|
18
|
-
import { focusIndexBeforeResidue,
|
|
16
|
+
import { focusIndexBeforeResidue, landedPastePosition, trackedPasteCaret } from './focus-target';
|
|
19
17
|
import { docPathFrom } from '../../cursor/coordinate-spaces';
|
|
20
18
|
import { resolveParentScope } from './parent-scope';
|
|
21
19
|
/**
|
|
22
|
-
* The break-out plan
|
|
23
|
-
*
|
|
24
|
-
* `list-absorb` and must not also trigger here), targeting a direct leaf of the listItem.
|
|
20
|
+
* The break-out plan when a top block declaring `containerPaste.siblingAbsorb` does not match the
|
|
21
|
+
* nearest list and the target is a direct leaf of its item; null otherwise.
|
|
25
22
|
*/
|
|
26
23
|
export function findListBreakOut(doc, targetPath, parsed, offset, targetRaw) {
|
|
27
24
|
if (parsed.children.length === 0)
|
|
@@ -47,25 +44,26 @@ export function findListBreakOut(doc, targetPath, parsed, offset, targetRaw) {
|
|
|
47
44
|
* Split the enclosing list at the target item and splice the pasted blocks between the
|
|
48
45
|
* halves at the list's parent level, in one multi-scope entry.
|
|
49
46
|
*/
|
|
50
|
-
export async function applyListBreakOut(plan, pastedBlocks, ctx) {
|
|
47
|
+
export async function applyListBreakOut(plan, pastedBlocks, ctx, start) {
|
|
51
48
|
const list = nodeAt(ctx.doc, plan.listPath);
|
|
52
49
|
if (!list?.children)
|
|
53
50
|
return;
|
|
54
|
-
const
|
|
51
|
+
const lineEnding = documentLineEnding(ctx.doc);
|
|
52
|
+
const { replacement, hasTrailingResidue } = buildListBreakOutReplacement(list, plan.itemIndex, plan.innerIndex, plan.offset, pastedBlocks, lineEnding, plan.targetRaw, ctx.reading.grammar);
|
|
55
53
|
if (replacement.length === 0)
|
|
56
54
|
return;
|
|
57
55
|
for (const node of replacement)
|
|
58
|
-
ensureEditableContainers(node);
|
|
56
|
+
ensureEditableContainers(node, lineEnding);
|
|
59
57
|
const parentScope = resolveParentScope(ctx.doc, plan.listPath, ctx.controller);
|
|
60
58
|
if (!parentScope)
|
|
61
59
|
return;
|
|
62
60
|
const spliceIndex = plan.listPath[plan.listPath.length - 1];
|
|
63
|
-
// The last pasted block, never the second-half residue list
|
|
64
|
-
// whose
|
|
61
|
+
// The last pasted block, never the second-half residue list, and kept updated through the
|
|
62
|
+
// fix-up, whose merges can move the position out from under a caret chosen here.
|
|
65
63
|
const caret = trackedPasteCaret(replacement, spliceIndex, focusIndexBeforeResidue(replacement.length, hasTrailingResidue), CURSOR_END);
|
|
66
64
|
await ctx.controller.commitMultiScope({
|
|
67
65
|
scopes: [parentScope],
|
|
68
|
-
snapshot:
|
|
66
|
+
snapshot: start,
|
|
69
67
|
mutate: ([scopeView]) => {
|
|
70
68
|
spliceMany(scopeView.children, spliceIndex, 1, replacement);
|
|
71
69
|
const change = {
|
|
@@ -83,25 +81,28 @@ export async function applyListBreakOut(plan, pastedBlocks, ctx) {
|
|
|
83
81
|
eventPath: docPathFrom(plan.listPath)
|
|
84
82
|
},
|
|
85
83
|
trackCaret: [caret],
|
|
86
|
-
|
|
84
|
+
landing: () => {
|
|
87
85
|
const landed = nodeAt(ctx.doc, parentScope.path)?.children?.[caret.index];
|
|
88
|
-
|
|
86
|
+
const at = landedPastePosition(landed, caret, CURSOR_END);
|
|
87
|
+
return {
|
|
88
|
+
path: docPathFrom([...parentScope.path, caret.index, ...at.path]),
|
|
89
|
+
offset: at.offset
|
|
90
|
+
};
|
|
89
91
|
}
|
|
90
92
|
});
|
|
91
93
|
}
|
|
92
94
|
/**
|
|
93
|
-
* Split `list` at `(itemIndex, innerIndex, offset)` and splice `pastedBlocks` between the
|
|
94
|
-
*
|
|
95
|
-
* rather than the residue. Input nodes are cloned, not mutated.
|
|
95
|
+
* Split `list` at `(itemIndex, innerIndex, offset)` and splice `pastedBlocks` between the halves,
|
|
96
|
+
* cloning every input node rather than mutating it.
|
|
96
97
|
*/
|
|
97
|
-
export function buildListBreakOutReplacement(list, itemIndex, innerIndex, offset, pastedBlocks, targetRaw) {
|
|
98
|
+
export function buildListBreakOutReplacement(list, itemIndex, innerIndex, offset, pastedBlocks, ending, targetRaw, grammar) {
|
|
98
99
|
const items = list.children ?? [];
|
|
99
100
|
const item = items[itemIndex];
|
|
100
101
|
if (!item?.children)
|
|
101
102
|
return { replacement: [], hasTrailingResidue: false };
|
|
102
103
|
if (!item.children[innerIndex])
|
|
103
104
|
return { replacement: [], hasTrailingResidue: false };
|
|
104
|
-
const { leadingItem, trailingItem } = buildSplitItems(item, innerIndex, offset, targetRaw);
|
|
105
|
+
const { leadingItem, trailingItem } = buildSplitItems(item, innerIndex, offset, ending, targetRaw, grammar);
|
|
105
106
|
const itemsBefore = items.slice(0, itemIndex).map(cloneNode);
|
|
106
107
|
const itemsAfter = items.slice(itemIndex + 1).map(cloneNode);
|
|
107
108
|
if (itemsAfter[0])
|
|
@@ -115,17 +116,8 @@ export function buildListBreakOutReplacement(list, itemIndex, innerIndex, offset
|
|
|
115
116
|
if (firstHalfItems.length > 0) {
|
|
116
117
|
replacement.push(assembleListHalf(list, firstHalfItems, base));
|
|
117
118
|
}
|
|
118
|
-
for (const block of pastedBlocks)
|
|
119
|
-
|
|
120
|
-
// Normalize the clone's items so its rebuilt raw can't mash into the next block.
|
|
121
|
-
// The ending comes from the list being broken out of — the pasted block lands
|
|
122
|
-
// among its lines.
|
|
123
|
-
if (cloned.kind === 'list' && cloned.children) {
|
|
124
|
-
newlineTerminateListItems(cloned.children, trailingLineEnding(list.raw));
|
|
125
|
-
rebuildListRaw(cloned);
|
|
126
|
-
}
|
|
127
|
-
replacement.push(cloned);
|
|
128
|
-
}
|
|
119
|
+
for (const block of pastedBlocks)
|
|
120
|
+
replacement.push(cloneNode(block));
|
|
129
121
|
const hasTrailingResidue = secondHalfItems.length > 0;
|
|
130
122
|
if (hasTrailingResidue) {
|
|
131
123
|
// Continue numbering across the paste gap: the split item consumes one slot in each
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The commit scope a paste addresses when it
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* container.
|
|
2
|
+
* The commit scope a paste addresses when it splices at a block's parent container, resolved from
|
|
3
|
+
* the path rather than from whatever `blockEdit` is in scope, since a caller holding a nested
|
|
4
|
+
* bundle's `blockEdit` would go through the wrong container.
|
|
6
5
|
*/
|
|
7
|
-
import type {
|
|
6
|
+
import type { Document } from '../../core/nodes';
|
|
7
|
+
import type { NodeView } from '../../core/node-views';
|
|
8
8
|
import type { MultiScopeTarget, PasteCommitCoordinator } from './paste-deps';
|
|
9
9
|
/** Null when `blockPath`'s parent doesn't resolve to a container. */
|
|
10
10
|
export declare function resolveParentScope(doc: Document, blockPath: number[], controller: PasteCommitCoordinator): MultiScopeTarget | null;
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
13
|
-
|
|
14
|
-
* would leave the selection deleted and nothing pasted. The ceremony writes ids to the
|
|
15
|
-
* owned node's `childIds`, so only ref alignment is lost on the stand-in.
|
|
16
|
-
*/
|
|
17
|
-
export declare function containerScopeState(controller: PasteCommitCoordinator, node: CstNode): MultiScopeTarget['state'];
|
|
11
|
+
/** A container's mounted `BlockListState`, or its ids and no refs: unmounted is normal after a
|
|
12
|
+
* gesture's earlier commit, and every caller lands its caret by path, so no ref is missed. */
|
|
13
|
+
export declare function containerScopeState(controller: Pick<PasteCommitCoordinator, 'resolveState'>, node: NodeView): MultiScopeTarget['state'];
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The commit scope a paste addresses when it
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* container.
|
|
2
|
+
* The commit scope a paste addresses when it splices at a block's parent container, resolved from
|
|
3
|
+
* the path rather than from whatever `blockEdit` is in scope, since a caller holding a nested
|
|
4
|
+
* bundle's `blockEdit` would go through the wrong container.
|
|
6
5
|
*/
|
|
7
6
|
import { nodeAt } from '../node-primitives';
|
|
8
|
-
import { devWarn } from '../../dev-warn';
|
|
9
7
|
/** Null when `blockPath`'s parent doesn't resolve to a container. */
|
|
10
8
|
export function resolveParentScope(doc, blockPath, controller) {
|
|
11
9
|
const parentPath = blockPath.slice(0, -1);
|
|
@@ -20,16 +18,11 @@ export function resolveParentScope(doc, blockPath, controller) {
|
|
|
20
18
|
path: parentPath
|
|
21
19
|
};
|
|
22
20
|
}
|
|
23
|
-
/**
|
|
24
|
-
*
|
|
25
|
-
* these routes can be a cross-block paste whose range delete ALREADY committed, so a throw
|
|
26
|
-
* would leave the selection deleted and nothing pasted. The ceremony writes ids to the
|
|
27
|
-
* owned node's `childIds`, so only ref alignment is lost on the stand-in.
|
|
28
|
-
*/
|
|
21
|
+
/** A container's mounted `BlockListState`, or its ids and no refs: unmounted is normal after a
|
|
22
|
+
* gesture's earlier commit, and every caller lands its caret by path, so no ref is missed. */
|
|
29
23
|
export function containerScopeState(controller, node) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return { innerBlockIds: [...(node.childIds ?? [])], innerBlockRefs: [] };
|
|
24
|
+
return (controller.resolveState(node) ?? {
|
|
25
|
+
innerBlockIds: [...(node.childIds ?? [])],
|
|
26
|
+
innerBlockRefs: []
|
|
27
|
+
});
|
|
35
28
|
}
|
|
@@ -3,18 +3,23 @@
|
|
|
3
3
|
* which is what keeps the `tree-operations -> editor-actions` and
|
|
4
4
|
* `tree-operations -> reactivity` back-edges out of the graph.
|
|
5
5
|
*/
|
|
6
|
-
import type { CommitMultiScopeArgs, MultiScopeTarget } from '../../action-contracts';
|
|
6
|
+
import type { CommitMultiScopeArgs, LeafTextOptions, LeafWriteResult, MultiScopeTarget, ReplaceFocus, ReplaceSource } from '../../action-contracts';
|
|
7
7
|
import type { CstNode } from '../../core/nodes';
|
|
8
|
+
import type { NodeView } from '../../core/node-views';
|
|
8
9
|
export type { CommitMultiScopeArgs, MultiScopeTarget };
|
|
9
10
|
export interface PasteCommitCoordinator {
|
|
10
|
-
commitMultiScope<const S extends readonly MultiScopeTarget[]>(args: CommitMultiScopeArgs<S>): Promise<
|
|
11
|
+
commitMultiScope<const S extends readonly MultiScopeTarget[]>(args: CommitMultiScopeArgs<S>): Promise<boolean>;
|
|
11
12
|
getDocScope(): MultiScopeTarget;
|
|
12
13
|
/** Resolve a container node to its mounted reactive state. */
|
|
13
|
-
resolveState(node:
|
|
14
|
-
/**
|
|
15
|
-
*
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
*/
|
|
19
|
-
|
|
14
|
+
resolveState(node: NodeView): MultiScopeTarget['state'] | undefined;
|
|
15
|
+
/** Write `text` into the leaf at `leafPath` as one commit at its parent list, through the write
|
|
16
|
+
* every keystroke takes. */
|
|
17
|
+
commitLeafText(leafPath: number[], text: string, opts: LeafTextOptions): Promise<LeafWriteResult>;
|
|
18
|
+
/** Replace the block at `blockPath` as one commit at its parent list, resolving to how many blocks
|
|
19
|
+
* landed or null; `snapshotOffset` is undo's caret in the block when nothing is focused. */
|
|
20
|
+
replaceBlock(blockPath: number[], replacement: CstNode[], focus: ReplaceFocus, opts: {
|
|
21
|
+
source: ReplaceSource;
|
|
22
|
+
trailingBlank?: boolean;
|
|
23
|
+
snapshotOffset: number;
|
|
24
|
+
}): Promise<number | null>;
|
|
20
25
|
}
|
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Replacement node list for a multi-block paste into a single leaf: the leaf's raw split
|
|
3
|
-
* at the cursor, with the pasted blocks between the slices.
|
|
4
|
-
*
|
|
3
|
+
* at the cursor, with the pasted blocks between the slices. Structural pastes only: routing
|
|
4
|
+
* a single-paragraph clipboard here would split it into three nodes.
|
|
5
5
|
*/
|
|
6
6
|
import type { CstNode } from '../../core/nodes';
|
|
7
7
|
import type { NodeView } from '../../core/node-views';
|
|
8
|
-
|
|
8
|
+
import { type LineEnding } from '../../core/lines';
|
|
9
|
+
import type { GrammarView } from '../../schema/block-openers';
|
|
10
|
+
import { type ChildSlot } from '../list/task-paragraph';
|
|
11
|
+
export interface PastedReplacement {
|
|
12
|
+
nodes: CstNode[];
|
|
13
|
+
/** Index of the last pasted block in `nodes`, where the caret lands. */
|
|
14
|
+
lastPastedIndex: number;
|
|
15
|
+
}
|
|
16
|
+
/** `slot` is where the leaf sits; the leaf's own text around the pasted blocks is read the way a
|
|
17
|
+
* reload reads it at the slot it lands in. */
|
|
18
|
+
export declare function buildPastedReplacement(leaf: NodeView, offset: number, blocks: CstNode[], ending: LineEnding, grammar: GrammarView, slot: ChildSlot): PastedReplacement;
|
|
19
|
+
/** The clipboard's blocks as they land after `prev`; the commit ends the last one's line. */
|
|
20
|
+
export declare function landClipboardBlocks(prev: CstNode | undefined, blocks: readonly CstNode[], lineEnding: '\n' | '\r\n'): CstNode[];
|
|
21
|
+
/**
|
|
22
|
+
* A copy of `block` landing after `prev`, given a blank line where the clipboard gave none, or it
|
|
23
|
+
* would continue `prev` on reload; a blank `prev` already separates it.
|
|
24
|
+
*/
|
|
25
|
+
export declare function landedAfter(prev: CstNode, block: CstNode, lineEnding: '\n' | '\r\n'): CstNode;
|
|
@@ -1,60 +1,91 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Replacement node list for a multi-block paste into a single leaf: the leaf's raw split
|
|
3
|
-
* at the cursor, with the pasted blocks between the slices.
|
|
4
|
-
*
|
|
3
|
+
* at the cursor, with the pasted blocks between the slices. Structural pastes only: routing
|
|
4
|
+
* a single-paragraph clipboard here would split it into three nodes.
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import { isBlankParagraph } from '../../core/parser';
|
|
6
|
+
import { ownTrailingLineEnding, trailingLineEnding } from '../../core/lines';
|
|
7
|
+
import { isBlankParagraph, readBlocks } from '../../core/parser';
|
|
8
8
|
import { ensureEditableContainers } from '../node-primitives';
|
|
9
|
-
import { parseFirstBlock } from '../parse-block';
|
|
10
|
-
|
|
9
|
+
import { parseCutResidue, parseFirstBlock } from '../parse-block';
|
|
10
|
+
import { cutKeepingStructure } from '../structural-suffix';
|
|
11
|
+
import { fragmentReaderAt } from '../list/task-paragraph';
|
|
12
|
+
/** `slot` is where the leaf sits; the leaf's own text around the pasted blocks is read the way a
|
|
13
|
+
* reload reads it at the slot it lands in. */
|
|
14
|
+
export function buildPastedReplacement(leaf, offset, blocks, ending, grammar, slot) {
|
|
11
15
|
if (blocks.length === 0)
|
|
12
|
-
return [];
|
|
16
|
+
return { nodes: [], lastPastedIndex: -1 };
|
|
13
17
|
const leafRaw = leaf.raw;
|
|
14
|
-
const lineEnding = trailingLineEnding(leafRaw);
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
//
|
|
18
|
-
const
|
|
19
|
-
const rawBefore = display.slice(0, cut);
|
|
20
|
-
const rawAfter = display.slice(cut);
|
|
18
|
+
const lineEnding = trailingLineEnding(leafRaw, ending);
|
|
19
|
+
const { head: rawBefore, rest } = cutKeepingStructure(leaf, offset);
|
|
20
|
+
const readAt = (index) => fragmentReaderAt(slot.owner, slot.index + index, grammar);
|
|
21
|
+
// At least one pasted block lands before the residue.
|
|
22
|
+
const residue = parseCutResidue(rest, lineEnding, readAt(1));
|
|
21
23
|
const originalTrivia = leaf.leadingTrivia ?? '';
|
|
22
24
|
const newNodes = [];
|
|
23
|
-
//
|
|
24
|
-
// being forced back to a paragraph.
|
|
25
|
+
// A heading stays one, and a to-do's text stays its paragraph.
|
|
25
26
|
if (rawBefore.length > 0) {
|
|
26
27
|
const beforeRaw = rawBefore + lineEnding;
|
|
27
|
-
const beforeNode = parseFirstBlock(beforeRaw);
|
|
28
|
+
const beforeNode = parseFirstBlock(beforeRaw, readAt(0));
|
|
28
29
|
beforeNode.leadingTrivia = originalTrivia;
|
|
29
|
-
ensureEditableContainers(beforeNode);
|
|
30
|
+
ensureEditableContainers(beforeNode, lineEnding);
|
|
30
31
|
newNodes.push(beforeNode);
|
|
31
32
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
33
|
+
const hasResidue = residue.blocks.length > 0;
|
|
34
|
+
const landed = landClipboardBlocks(newNodes.at(-1), blocks, lineEnding);
|
|
35
|
+
if (newNodes.length === 0)
|
|
36
|
+
landed[0].leadingTrivia = originalTrivia;
|
|
37
|
+
// Appended, never spread: a paste can outnumber an argument list (G4.60).
|
|
38
|
+
for (const node of landed)
|
|
39
|
+
newNodes.push(node);
|
|
40
|
+
const lastPastedIndex = newNodes.length - 1;
|
|
41
|
+
if (hasResidue) {
|
|
42
|
+
const [first, ...rest] = residue.blocks;
|
|
43
|
+
const lastPasted = newNodes[lastPastedIndex];
|
|
44
|
+
// An open last pasted block sits on the cut line, so the rest of that line, blank or just its
|
|
45
|
+
// break, ends it; a closed one is followed by the cut line's break as a blank line.
|
|
46
|
+
const onCutLine = ownTrailingLineEnding(lastPasted.raw) === '';
|
|
47
|
+
const blankTail = !residue.endedLine && rest.length === 0 && isBlankParagraph(first);
|
|
48
|
+
const cutLineEnd = residue.endedLine || (onCutLine && blankTail ? first.raw : lineEnding);
|
|
49
|
+
if (onCutLine)
|
|
50
|
+
newNodes[lastPastedIndex] = endedOnCutLine(lastPasted, cutLineEnd, grammar);
|
|
51
|
+
if (!onCutLine || !blankTail) {
|
|
52
|
+
newNodes.push({ ...first, leadingTrivia: onCutLine ? '' : cutLineEnd });
|
|
43
53
|
}
|
|
44
|
-
|
|
45
|
-
node
|
|
54
|
+
for (const node of rest)
|
|
55
|
+
newNodes.push(node);
|
|
56
|
+
for (let i = lastPastedIndex + 1; i < newNodes.length; i++) {
|
|
57
|
+
ensureEditableContainers(newNodes[i], lineEnding);
|
|
46
58
|
}
|
|
47
|
-
ensureEditableContainers(node);
|
|
48
|
-
newNodes.push(node);
|
|
49
59
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
60
|
+
return { nodes: newNodes, lastPastedIndex };
|
|
61
|
+
}
|
|
62
|
+
/** `node` with the rest of the line it was pasted into, read back as the one block it still is. */
|
|
63
|
+
function endedOnCutLine(node, cutLineEnd, grammar) {
|
|
64
|
+
const lineEnding = trailingLineEnding(cutLineEnd, '\n');
|
|
65
|
+
// The clipboard's own block keeps the kind the clipboard's parse gave it, as every other pasted
|
|
66
|
+
// block does; what that does to a checkbox it lands behind is #624's question.
|
|
67
|
+
const ended = parseFirstBlock(node.raw + cutLineEnd, (text) => readBlocks(text, { grammar, scope: 'fragment' }));
|
|
68
|
+
ended.leadingTrivia = node.leadingTrivia;
|
|
69
|
+
ensureEditableContainers(ended, lineEnding);
|
|
70
|
+
return ended;
|
|
71
|
+
}
|
|
72
|
+
/** The clipboard's blocks as they land after `prev`; the commit ends the last one's line. */
|
|
73
|
+
export function landClipboardBlocks(prev, blocks, lineEnding) {
|
|
74
|
+
const landed = [];
|
|
75
|
+
for (let i = 0; i < blocks.length; i++) {
|
|
76
|
+
// The clipboard's parse already read its own blocks as themselves, so only the join with
|
|
77
|
+
// the text above is new.
|
|
78
|
+
const node = i === 0 && prev ? landedAfter(prev, blocks[i], lineEnding) : { ...blocks[i] };
|
|
79
|
+
ensureEditableContainers(node, lineEnding);
|
|
80
|
+
landed.push(node);
|
|
58
81
|
}
|
|
59
|
-
return
|
|
82
|
+
return landed;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* A copy of `block` landing after `prev`, given a blank line where the clipboard gave none, or it
|
|
86
|
+
* would continue `prev` on reload; a blank `prev` already separates it.
|
|
87
|
+
*/
|
|
88
|
+
export function landedAfter(prev, block, lineEnding) {
|
|
89
|
+
const separated = block.leadingTrivia !== '' || isBlankParagraph(prev);
|
|
90
|
+
return { ...block, leadingTrivia: separated ? block.leadingTrivia : lineEnding };
|
|
60
91
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Content-keyed, pre-parse paste transforms: a plugin registers a named transform that
|
|
3
|
-
* rewrites the raw clipboard text or declines. Register-once, throw-on-duplicate
|
|
3
|
+
* rewrites the raw clipboard text or declines. Register-once, throw-on-duplicate, the
|
|
4
4
|
* `customElements` model shared with `paste-surfaces.ts`.
|
|
5
5
|
*/
|
|
6
6
|
import type { PluginActivation } from '../../schema/plugin-activation';
|
|
@@ -12,14 +12,12 @@ export interface PasteTransform {
|
|
|
12
12
|
}
|
|
13
13
|
export declare function registerPasteTransform(transform: PasteTransform): void;
|
|
14
14
|
/**
|
|
15
|
-
* Non-throwing registration
|
|
15
|
+
* Non-throwing registration check, so an idempotent module (HMR, a re-imported registrar) asks
|
|
16
16
|
* before registering instead of catching the duplicate throw.
|
|
17
17
|
*/
|
|
18
18
|
export declare function isPasteTransformRegistered(name: string): boolean;
|
|
19
19
|
/**
|
|
20
|
-
* Run every transform over `text
|
|
21
|
-
* a null return leaves the running text untouched.
|
|
22
|
-
* instance's plugins; absent = every installed one. A transform no plugin owns always runs.
|
|
20
|
+
* Run every transform `activation` resolves over `text`, its line breaks made LF, in registration
|
|
21
|
+
* order, each seeing the prior's output; a null return leaves the running text untouched.
|
|
23
22
|
*/
|
|
24
|
-
export declare function applyPasteTransforms(text: string, activation
|
|
25
|
-
export declare function __resetPasteTransformsForTests(): void;
|
|
23
|
+
export declare function applyPasteTransforms(text: string, activation: PluginActivation): string;
|
|
@@ -1,35 +1,32 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { registerOnce } from '../../schema/register-once';
|
|
1
|
+
import { createPluginRegistry } from '../../schema/plugin-registry';
|
|
3
2
|
import { devWarn } from '../../dev-warn';
|
|
4
3
|
import { editorEnv } from '../../env';
|
|
5
|
-
|
|
6
|
-
//
|
|
7
|
-
const transforms =
|
|
4
|
+
import { normalizeLineEndings } from '../../core/lines';
|
|
5
|
+
// Registration order is the pipeline order.
|
|
6
|
+
const transforms = createPluginRegistry({
|
|
7
|
+
label: 'registerPasteTransform',
|
|
8
|
+
isBuiltin: () => false
|
|
9
|
+
});
|
|
8
10
|
export function registerPasteTransform(transform) {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
(
|
|
11
|
+
const owner = transforms.ownerOf(transform.name);
|
|
12
|
+
transforms.register(transform.name, transform, `registerPasteTransform: "${transform.name}" is already registered` +
|
|
13
|
+
(owner ? ` by plugin '${owner}'` : '') +
|
|
12
14
|
`. Paste transforms are register-once.`);
|
|
13
15
|
}
|
|
14
16
|
/**
|
|
15
|
-
* Non-throwing registration
|
|
17
|
+
* Non-throwing registration check, so an idempotent module (HMR, a re-imported registrar) asks
|
|
16
18
|
* before registering instead of catching the duplicate throw.
|
|
17
19
|
*/
|
|
18
20
|
export function isPasteTransformRegistered(name) {
|
|
19
21
|
return transforms.has(name);
|
|
20
22
|
}
|
|
21
23
|
/**
|
|
22
|
-
* Run every transform over `text
|
|
23
|
-
* a null return leaves the running text untouched.
|
|
24
|
-
* instance's plugins; absent = every installed one. A transform no plugin owns always runs.
|
|
24
|
+
* Run every transform `activation` resolves over `text`, its line breaks made LF, in registration
|
|
25
|
+
* order, each seeing the prior's output; a null return leaves the running text untouched.
|
|
25
26
|
*/
|
|
26
27
|
export function applyPasteTransforms(text, activation) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
let result = text;
|
|
30
|
-
for (const { transform, owner } of transforms.values()) {
|
|
31
|
-
if (owner !== null && activation && !activation.isActive(owner))
|
|
32
|
-
continue;
|
|
28
|
+
let result = normalizeLineEndings(text);
|
|
29
|
+
for (const [, transform] of transforms.entries(activation)) {
|
|
33
30
|
const next = runContained(transform, result, 'pipeline');
|
|
34
31
|
if (next === null)
|
|
35
32
|
continue;
|
|
@@ -38,15 +35,9 @@ export function applyPasteTransforms(text, activation) {
|
|
|
38
35
|
}
|
|
39
36
|
return result;
|
|
40
37
|
}
|
|
41
|
-
export function __resetPasteTransformsForTests() {
|
|
42
|
-
transforms.clear();
|
|
43
|
-
}
|
|
44
38
|
/**
|
|
45
|
-
* The one
|
|
46
|
-
*
|
|
47
|
-
* selection deleted and nothing pasted; a throw becomes the null a decline returns. The
|
|
48
|
-
* warning names its phase because a probe-time throw read as a decline would send the
|
|
49
|
-
* author debugging a paste that worked.
|
|
39
|
+
* The one place plugin `transform()` code runs. A throw becomes a decline, since on the
|
|
40
|
+
* cross-block route the range delete has already committed and would leave nothing pasted.
|
|
50
41
|
*/
|
|
51
42
|
function runContained(transform, text, phase) {
|
|
52
43
|
try {
|
|
@@ -67,6 +58,6 @@ function warnIfNonIdempotent(transform, result) {
|
|
|
67
58
|
return;
|
|
68
59
|
const again = runContained(transform, result, 'probe');
|
|
69
60
|
if (again !== null && again !== result) {
|
|
70
|
-
devWarn('paste-transform', `transform '${transform.name}' is not idempotent
|
|
61
|
+
devWarn('paste-transform', `transform '${transform.name}' is not idempotent: re-running it on its own output changed the text again`);
|
|
71
62
|
}
|
|
72
63
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bytes a block is replaced by, parsed the one way every replace-at-parent caller needs them:
|
|
3
|
+
* their line breaks in the document's ending, terminated in the original's own ending, else the
|
|
4
|
+
* document's, read the way a reload reads the original's slot, carrying the original's leading
|
|
5
|
+
* blank lines, with editable containers ensured.
|
|
6
|
+
*/
|
|
7
|
+
import type { CstNode } from '../../core/nodes';
|
|
8
|
+
import type { FragmentReader } from '../list/task-paragraph';
|
|
9
|
+
import { type LineEnding } from '../../core/lines';
|
|
10
|
+
export interface ParsedReplacement {
|
|
11
|
+
replacement: CstNode[];
|
|
12
|
+
/** The parse's own trailing blank, for a caller that lands one (`paste/dispatch.ts`). */
|
|
13
|
+
suffix: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* `read` is the original's slot reader (`fragmentReaderAt`). Null where `raw` parses to nothing
|
|
17
|
+
* and the caller named no `fallback`: the block keeps its bytes rather than an empty splice.
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseReplacement(original: CstNode, raw: string, ending: LineEnding, read: FragmentReader, fallback?: () => CstNode[]): ParsedReplacement | null;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bytes a block is replaced by, parsed the one way every replace-at-parent caller needs them:
|
|
3
|
+
* their line breaks in the document's ending, terminated in the original's own ending, else the
|
|
4
|
+
* document's, read the way a reload reads the original's slot, carrying the original's leading
|
|
5
|
+
* blank lines, with editable containers ensured.
|
|
6
|
+
*/
|
|
7
|
+
import { terminateLine, trailingLineEnding, withLineEnding } from '../../core/lines';
|
|
8
|
+
import { ensureEditableContainers, normalizeReplacementTrivia } from '../node-primitives';
|
|
9
|
+
/**
|
|
10
|
+
* `read` is the original's slot reader (`fragmentReaderAt`). Null where `raw` parses to nothing
|
|
11
|
+
* and the caller named no `fallback`: the block keeps its bytes rather than an empty splice.
|
|
12
|
+
*/
|
|
13
|
+
export function parseReplacement(original, raw, ending, read, fallback) {
|
|
14
|
+
const lineEnding = trailingLineEnding(original.raw, ending);
|
|
15
|
+
const bytes = terminateLine(withLineEnding(raw, ending), lineEnding);
|
|
16
|
+
const parsed = read(bytes);
|
|
17
|
+
const children = parsed.children.length > 0 ? parsed.children : fallback?.();
|
|
18
|
+
if (!children || children.length === 0)
|
|
19
|
+
return null;
|
|
20
|
+
const replacement = normalizeReplacementTrivia(original, children);
|
|
21
|
+
for (const node of replacement)
|
|
22
|
+
ensureEditableContainers(node, lineEnding);
|
|
23
|
+
return { replacement, suffix: parsed.suffix };
|
|
24
|
+
}
|
|
@@ -2,7 +2,7 @@ import type { CstNode } from '../../core/nodes';
|
|
|
2
2
|
import type { PasteStrategy } from './dispatch';
|
|
3
3
|
/**
|
|
4
4
|
* The clipboard's content blocks: a blank block at either edge is the copy's packaging, which a
|
|
5
|
-
*
|
|
5
|
+
* kind that holds no blocks skips over. Empty when nothing but packaging came across.
|
|
6
6
|
*/
|
|
7
7
|
export declare function contentBlocks(blocks: readonly CstNode[]): readonly CstNode[];
|
|
8
8
|
/** One paragraph is text any leaf can take inline; anything else is structure. */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isBlankParagraph } from '../../core/parser';
|
|
2
2
|
/**
|
|
3
3
|
* The clipboard's content blocks: a blank block at either edge is the copy's packaging, which a
|
|
4
|
-
*
|
|
4
|
+
* kind that holds no blocks skips over. Empty when nothing but packaging came across.
|
|
5
5
|
*/
|
|
6
6
|
export function contentBlocks(blocks) {
|
|
7
7
|
let start = 0;
|