@voithos-labs/aragonite 0.10.1
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/LICENSE +661 -0
- package/README.md +365 -0
- package/THIRD-PARTY-NOTICES.md +102 -0
- package/dist/a11y-strings.d.ts +46 -0
- package/dist/a11y-strings.js +62 -0
- package/dist/action-contracts.d.ts +301 -0
- package/dist/action-contracts.js +5 -0
- package/dist/active-editor.d.ts +16 -0
- package/dist/active-editor.js +67 -0
- package/dist/ambient/ambient-cursor.d.ts +41 -0
- package/dist/ambient/ambient-cursor.js +120 -0
- package/dist/ambient/ambient-dom.d.ts +9 -0
- package/dist/ambient/ambient-dom.js +102 -0
- package/dist/assert.d.ts +6 -0
- package/dist/assert.js +17 -0
- package/dist/block-component.d.ts +274 -0
- package/dist/block-component.js +43 -0
- package/dist/block-id.d.ts +14 -0
- package/dist/block-id.js +34 -0
- package/dist/bounded-memo.d.ts +14 -0
- package/dist/bounded-memo.js +32 -0
- package/dist/components/BlockDragHandle.svelte +66 -0
- package/dist/components/BlockDragHandle.svelte.d.ts +18 -0
- package/dist/components/BlockHost.svelte +328 -0
- package/dist/components/BlockHost.svelte.d.ts +15 -0
- package/dist/components/BlockList.svelte +114 -0
- package/dist/components/BlockList.svelte.d.ts +16 -0
- package/dist/components/DecorationOverlay.svelte +156 -0
- package/dist/components/DecorationOverlay.svelte.d.ts +14 -0
- package/dist/components/Editor.svelte +1849 -0
- package/dist/components/Editor.svelte.d.ts +49 -0
- package/dist/components/GapCaret.svelte +226 -0
- package/dist/components/GapCaret.svelte.d.ts +9 -0
- package/dist/components/SearchBar.svelte +243 -0
- package/dist/components/SearchBar.svelte.d.ts +7 -0
- package/dist/components/SelectionOverlay.svelte +171 -0
- package/dist/components/SelectionOverlay.svelte.d.ts +14 -0
- package/dist/components/block-content-selector.d.ts +12 -0
- package/dist/components/block-content-selector.js +12 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +32 -0
- package/dist/components/blocks/BlockquoteBlock.svelte.d.ts +11 -0
- package/dist/components/blocks/ThematicBreakBlock.svelte +156 -0
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +17 -0
- package/dist/components/blocks/code/CodeBlock.svelte +726 -0
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +23 -0
- package/dist/components/blocks/code/CodeLanguageChip.svelte +127 -0
- package/dist/components/blocks/code/CodeLanguageChip.svelte.d.ts +14 -0
- package/dist/components/blocks/code/code-beforeinput.d.ts +30 -0
- package/dist/components/blocks/code/code-beforeinput.js +40 -0
- package/dist/components/blocks/code/code-bootstrap.d.ts +8 -0
- package/dist/components/blocks/code/code-bootstrap.js +54 -0
- package/dist/components/blocks/code/code-editing.d.ts +28 -0
- package/dist/components/blocks/code/code-editing.js +79 -0
- package/dist/components/blocks/code/code-enter.d.ts +22 -0
- package/dist/components/blocks/code/code-enter.js +19 -0
- package/dist/components/blocks/code/code-fence-boundary.d.ts +77 -0
- package/dist/components/blocks/code/code-fence-boundary.js +169 -0
- package/dist/components/blocks/code/code-fence-exit.d.ts +24 -0
- package/dist/components/blocks/code/code-fence-exit.js +36 -0
- package/dist/components/blocks/code/code-indent.d.ts +14 -0
- package/dist/components/blocks/code/code-indent.js +87 -0
- package/dist/components/blocks/code/code-languages.d.ts +15 -0
- package/dist/components/blocks/code/code-languages.js +30 -0
- package/dist/components/blocks/code/code-paste-surface.d.ts +6 -0
- package/dist/components/blocks/code/code-paste-surface.js +29 -0
- package/dist/components/blocks/code/code-paste.d.ts +24 -0
- package/dist/components/blocks/code/code-paste.js +21 -0
- package/dist/components/blocks/code/code-renderer.d.ts +18 -0
- package/dist/components/blocks/code/code-renderer.js +249 -0
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +51 -0
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte.d.ts +11 -0
- package/dist/components/blocks/directive/activate-directives.d.ts +7 -0
- package/dist/components/blocks/directive/activate-directives.js +23 -0
- package/dist/components/blocks/editable-leaf.d.ts +126 -0
- package/dist/components/blocks/editable-leaf.js +410 -0
- package/dist/components/blocks/editable-surface.d.ts +209 -0
- package/dist/components/blocks/editable-surface.js +331 -0
- package/dist/components/blocks/list/ListBlock.svelte +162 -0
- package/dist/components/blocks/list/ListBlock.svelte.d.ts +11 -0
- package/dist/components/blocks/list/ListItemBlock.svelte +324 -0
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +14 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +3 -0
- package/dist/components/blocks/list/task-checkbox.js +33 -0
- package/dist/components/blocks/plain-text-backend.d.ts +21 -0
- package/dist/components/blocks/plain-text-backend.js +47 -0
- package/dist/components/blocks/surface-wiring.svelte.d.ts +18 -0
- package/dist/components/blocks/surface-wiring.svelte.js +68 -0
- package/dist/components/blocks/table/TableActionMenu.svelte +267 -0
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +15 -0
- package/dist/components/blocks/table/TableBlock.svelte +765 -0
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +30 -0
- package/dist/components/blocks/table/TableCellBlock.svelte +1075 -0
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +30 -0
- package/dist/components/blocks/table/TableGrip.svelte +91 -0
- package/dist/components/blocks/table/TableGrip.svelte.d.ts +8 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +233 -0
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +34 -0
- package/dist/components/blocks/table/cell-clipboard.d.ts +23 -0
- package/dist/components/blocks/table/cell-clipboard.js +34 -0
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +37 -0
- package/dist/components/blocks/table/cell-keydown-plan.js +66 -0
- package/dist/components/blocks/table/cell-pointer.d.ts +58 -0
- package/dist/components/blocks/table/cell-pointer.js +153 -0
- package/dist/components/blocks/table/cell-render.d.ts +51 -0
- package/dist/components/blocks/table/cell-render.js +98 -0
- package/dist/components/blocks/table/cell-table-commands.d.ts +12 -0
- package/dist/components/blocks/table/cell-table-commands.js +21 -0
- package/dist/components/blocks/table/cell-x-mapping.d.ts +6 -0
- package/dist/components/blocks/table/cell-x-mapping.js +16 -0
- package/dist/components/blocks/table/selected-cells.d.ts +19 -0
- package/dist/components/blocks/table/selected-cells.js +35 -0
- package/dist/components/blocks/table/table-caret-at-point.d.ts +8 -0
- package/dist/components/blocks/table/table-caret-at-point.js +35 -0
- package/dist/components/blocks/table/table-cell-paste.d.ts +16 -0
- package/dist/components/blocks/table/table-cell-paste.js +75 -0
- package/dist/components/blocks/table/table-drag-hit-test.d.ts +5 -0
- package/dist/components/blocks/table/table-drag-hit-test.js +20 -0
- package/dist/components/blocks/table/table-drop-target.d.ts +1 -0
- package/dist/components/blocks/table/table-drop-target.js +16 -0
- package/dist/components/blocks/table/table-menu-model.d.ts +52 -0
- package/dist/components/blocks/table/table-menu-model.js +78 -0
- package/dist/components/blocks/table/table-navigation.d.ts +8 -0
- package/dist/components/blocks/table/table-navigation.js +22 -0
- package/dist/components/blocks/table/table-reorder-drag.d.ts +78 -0
- package/dist/components/blocks/table/table-reorder-drag.js +97 -0
- package/dist/components/blocks/text/TextEditableBlock.svelte +1012 -0
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +33 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +8 -0
- package/dist/components/blocks/text/click-snap-guard.js +19 -0
- package/dist/components/blocks/text/composition-seat.d.ts +50 -0
- package/dist/components/blocks/text/composition-seat.js +65 -0
- package/dist/components/blocks/text/construct-edge-delete.d.ts +47 -0
- package/dist/components/blocks/text/construct-edge-delete.js +164 -0
- package/dist/components/blocks/text/construct-reveal.d.ts +39 -0
- package/dist/components/blocks/text/construct-reveal.js +164 -0
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +91 -0
- package/dist/components/blocks/text/edge-policy-dispatch.js +457 -0
- package/dist/components/blocks/text/edge-seat.d.ts +42 -0
- package/dist/components/blocks/text/edge-seat.js +197 -0
- package/dist/components/blocks/text/hidden-suffix.d.ts +10 -0
- package/dist/components/blocks/text/hidden-suffix.js +15 -0
- package/dist/components/blocks/text/link-at-point.d.ts +33 -0
- package/dist/components/blocks/text/link-at-point.js +47 -0
- package/dist/components/blocks/text/link-source-bytes.d.ts +37 -0
- package/dist/components/blocks/text/link-source-bytes.js +161 -0
- package/dist/components/blocks/text/live-join-seam.d.ts +15 -0
- package/dist/components/blocks/text/live-join-seam.js +327 -0
- package/dist/components/blocks/text/live-selection-edit.d.ts +68 -0
- package/dist/components/blocks/text/live-selection-edit.js +120 -0
- package/dist/components/blocks/text/live-split-rebalance.d.ts +56 -0
- package/dist/components/blocks/text/live-split-rebalance.js +239 -0
- package/dist/components/blocks/text/marker-completion.d.ts +18 -0
- package/dist/components/blocks/text/marker-completion.js +29 -0
- package/dist/components/blocks/text/pending-mark-insert.d.ts +37 -0
- package/dist/components/blocks/text/pending-mark-insert.js +188 -0
- package/dist/components/blocks/text/screen-diff.d.ts +20 -0
- package/dist/components/blocks/text/screen-diff.js +39 -0
- package/dist/components/blocks/text/text-clipboard.d.ts +70 -0
- package/dist/components/blocks/text/text-clipboard.js +131 -0
- package/dist/components/blocks/text/text-keydown.d.ts +39 -0
- package/dist/components/blocks/text/text-keydown.js +80 -0
- package/dist/components/blocks/text/text-render.d.ts +67 -0
- package/dist/components/blocks/text/text-render.js +215 -0
- package/dist/components/blocks/text/widget-adjacency.d.ts +30 -0
- package/dist/components/blocks/text/widget-adjacency.js +68 -0
- package/dist/components/blocks/text/widget-interaction.d.ts +90 -0
- package/dist/components/blocks/text/widget-interaction.js +591 -0
- package/dist/components/blocks/widget-portal.d.ts +54 -0
- package/dist/components/blocks/widget-portal.js +136 -0
- package/dist/components/built-in-blocks.d.ts +7 -0
- package/dist/components/built-in-blocks.js +77 -0
- package/dist/components/editor-root-clipboard.d.ts +29 -0
- package/dist/components/editor-root-clipboard.js +105 -0
- package/dist/components/editor-root-keydown.d.ts +47 -0
- package/dist/components/editor-root-keydown.js +88 -0
- package/dist/components/editor-root-listeners.d.ts +44 -0
- package/dist/components/editor-root-listeners.js +112 -0
- package/dist/components/image/ImageOverlayHost.svelte +115 -0
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +20 -0
- package/dist/components/image/ImageProperties.svelte +153 -0
- package/dist/components/image/ImageProperties.svelte.d.ts +14 -0
- package/dist/components/image/ImageResizeHandles.svelte +188 -0
- package/dist/components/image/ImageResizeHandles.svelte.d.ts +10 -0
- package/dist/components/image/image-edit-commit.d.ts +38 -0
- package/dist/components/image/image-edit-commit.js +159 -0
- package/dist/components/image/image-resize.d.ts +11 -0
- package/dist/components/image/image-resize.js +38 -0
- package/dist/components/image/image-source-bytes.d.ts +15 -0
- package/dist/components/image/image-source-bytes.js +73 -0
- package/dist/components/image/image-widget-editing.d.ts +7 -0
- package/dist/components/image/image-widget-editing.js +41 -0
- package/dist/components/image/widget-dom.d.ts +11 -0
- package/dist/components/image/widget-dom.js +110 -0
- package/dist/components/image/widget-selection-state.svelte.d.ts +18 -0
- package/dist/components/image/widget-selection-state.svelte.js +26 -0
- package/dist/components/link-card/LinkCard.svelte +190 -0
- package/dist/components/link-card/LinkCard.svelte.d.ts +18 -0
- package/dist/components/link-card/LinkCardHost.svelte +181 -0
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +25 -0
- package/dist/components/link-card/link-card-commit.d.ts +50 -0
- package/dist/components/link-card/link-card-commit.js +134 -0
- package/dist/components/link-card/link-card-entry.d.ts +39 -0
- package/dist/components/link-card/link-card-entry.js +51 -0
- package/dist/components/link-card/link-card-state.svelte.d.ts +44 -0
- package/dist/components/link-card/link-card-state.svelte.js +46 -0
- package/dist/components/lrd-map-gate.d.ts +18 -0
- package/dist/components/lrd-map-gate.js +22 -0
- package/dist/components/paste-image-arm.d.ts +29 -0
- package/dist/components/paste-image-arm.js +61 -0
- package/dist/components/portal.d.ts +11 -0
- package/dist/components/portal.js +29 -0
- package/dist/core/directive/activate.d.ts +8 -0
- package/dist/core/directive/activate.js +25 -0
- package/dist/core/directive/container-opener.d.ts +7 -0
- package/dist/core/directive/container-opener.js +162 -0
- package/dist/core/directive/grammar.d.ts +50 -0
- package/dist/core/directive/grammar.js +88 -0
- package/dist/core/directive/kinds.d.ts +31 -0
- package/dist/core/directive/kinds.js +137 -0
- package/dist/core/directive/registry.d.ts +39 -0
- package/dist/core/directive/registry.js +49 -0
- package/dist/core/directive/text-recognizer.d.ts +8 -0
- package/dist/core/directive/text-recognizer.js +87 -0
- package/dist/core/escapable.d.ts +6 -0
- package/dist/core/escapable.js +6 -0
- package/dist/core/inline/backticks.d.ts +16 -0
- package/dist/core/inline/backticks.js +62 -0
- package/dist/core/inline/character-refs.d.ts +7 -0
- package/dist/core/inline/character-refs.js +70 -0
- package/dist/core/inline/destination-bytes.d.ts +7 -0
- package/dist/core/inline/destination-bytes.js +14 -0
- package/dist/core/inline/entity-widget.d.ts +11 -0
- package/dist/core/inline/entity-widget.js +21 -0
- package/dist/core/inline/format-toggle.d.ts +50 -0
- package/dist/core/inline/format-toggle.js +533 -0
- package/dist/core/inline/html-entities.d.ts +8 -0
- package/dist/core/inline/html-entities.js +2134 -0
- package/dist/core/inline/html-tag-grammar.d.ts +16 -0
- package/dist/core/inline/html-tag-grammar.js +58 -0
- package/dist/core/inline/image-dimensions.d.ts +6 -0
- package/dist/core/inline/image-dimensions.js +42 -0
- package/dist/core/inline/index.d.ts +42 -0
- package/dist/core/inline/index.js +77 -0
- package/dist/core/inline/inline-cache.d.ts +20 -0
- package/dist/core/inline/inline-cache.js +28 -0
- package/dist/core/inline/inline-widgets.d.ts +124 -0
- package/dist/core/inline/inline-widgets.js +131 -0
- package/dist/core/inline/link-reference-resolver.d.ts +21 -0
- package/dist/core/inline/link-reference-resolver.js +46 -0
- package/dist/core/inline/raw-html-widget.d.ts +10 -0
- package/dist/core/inline/raw-html-widget.js +22 -0
- package/dist/core/inline/scan/autolinks.d.ts +23 -0
- package/dist/core/inline/scan/autolinks.js +354 -0
- package/dist/core/inline/scan/brackets.d.ts +11 -0
- package/dist/core/inline/scan/brackets.js +284 -0
- package/dist/core/inline/scan/code-spans.d.ts +7 -0
- package/dist/core/inline/scan/code-spans.js +27 -0
- package/dist/core/inline/scan/emphasis.d.ts +10 -0
- package/dist/core/inline/scan/emphasis.js +276 -0
- package/dist/core/inline/scan/index.d.ts +7 -0
- package/dist/core/inline/scan/index.js +176 -0
- package/dist/core/inline/scan/plugin-syntax.d.ts +62 -0
- package/dist/core/inline/scan/plugin-syntax.js +150 -0
- package/dist/core/inline/scan/scan-state.d.ts +47 -0
- package/dist/core/inline/scan/scan-state.js +48 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +14 -0
- package/dist/core/inline/scan/simple-nodes.js +53 -0
- package/dist/core/inline/scan/url.d.ts +12 -0
- package/dist/core/inline/scan/url.js +82 -0
- package/dist/core/inline/transparency.d.ts +8 -0
- package/dist/core/inline/transparency.js +39 -0
- package/dist/core/inline/visibility.d.ts +81 -0
- package/dist/core/inline/visibility.js +144 -0
- package/dist/core/inline/walk.d.ts +14 -0
- package/dist/core/inline/walk.js +29 -0
- package/dist/core/inline-render.d.ts +48 -0
- package/dist/core/inline-render.js +322 -0
- package/dist/core/lines.d.ts +44 -0
- package/dist/core/lines.js +91 -0
- package/dist/core/node-views.d.ts +22 -0
- package/dist/core/node-views.js +8 -0
- package/dist/core/nodes.d.ts +297 -0
- package/dist/core/nodes.js +83 -0
- package/dist/core/parser.d.ts +68 -0
- package/dist/core/parser.js +189 -0
- package/dist/core/parsers/blockquote.d.ts +17 -0
- package/dist/core/parsers/blockquote.js +69 -0
- package/dist/core/parsers/built-in-openers.d.ts +8 -0
- package/dist/core/parsers/built-in-openers.js +124 -0
- package/dist/core/parsers/fence-syntax.d.ts +24 -0
- package/dist/core/parsers/fence-syntax.js +44 -0
- package/dist/core/parsers/fenced-code.d.ts +7 -0
- package/dist/core/parsers/fenced-code.js +29 -0
- package/dist/core/parsers/heading.d.ts +3 -0
- package/dist/core/parsers/heading.js +6 -0
- package/dist/core/parsers/html-block.d.ts +17 -0
- package/dist/core/parsers/html-block.js +94 -0
- package/dist/core/parsers/indented-code.d.ts +4 -0
- package/dist/core/parsers/indented-code.js +41 -0
- package/dist/core/parsers/link-reference.d.ts +7 -0
- package/dist/core/parsers/link-reference.js +152 -0
- package/dist/core/parsers/list.d.ts +19 -0
- package/dist/core/parsers/list.js +133 -0
- package/dist/core/parsers/paragraph.d.ts +10 -0
- package/dist/core/parsers/paragraph.js +42 -0
- package/dist/core/parsers/table-completion.d.ts +13 -0
- package/dist/core/parsers/table-completion.js +48 -0
- package/dist/core/parsers/table.d.ts +18 -0
- package/dist/core/parsers/table.js +110 -0
- package/dist/core/parsers/thematic-break.d.ts +1 -0
- package/dist/core/parsers/thematic-break.js +19 -0
- package/dist/core/serializer.d.ts +15 -0
- package/dist/core/serializer.js +11 -0
- package/dist/core/terminator-escalation.d.ts +8 -0
- package/dist/core/terminator-escalation.js +18 -0
- package/dist/core/url-policy.d.ts +14 -0
- package/dist/core/url-policy.js +44 -0
- package/dist/cursor/content-offsets.d.ts +29 -0
- package/dist/cursor/content-offsets.js +151 -0
- package/dist/cursor/coordinate-spaces.d.ts +65 -0
- package/dist/cursor/coordinate-spaces.js +66 -0
- package/dist/cursor/dom-walk.d.ts +18 -0
- package/dist/cursor/dom-walk.js +31 -0
- package/dist/cursor/edge-affinity.d.ts +44 -0
- package/dist/cursor/edge-affinity.js +60 -0
- package/dist/cursor/focused-caret.d.ts +10 -0
- package/dist/cursor/focused-caret.js +24 -0
- package/dist/cursor/height-model.d.ts +24 -0
- package/dist/cursor/height-model.js +72 -0
- package/dist/cursor/height-oracle.d.ts +24 -0
- package/dist/cursor/height-oracle.js +94 -0
- package/dist/cursor/overlay-rects.d.ts +8 -0
- package/dist/cursor/overlay-rects.js +19 -0
- package/dist/cursor/overlay-remeasure.d.ts +17 -0
- package/dist/cursor/overlay-remeasure.js +31 -0
- package/dist/cursor/pending-marks.d.ts +24 -0
- package/dist/cursor/pending-marks.js +36 -0
- package/dist/cursor/point-offset.d.ts +21 -0
- package/dist/cursor/point-offset.js +48 -0
- package/dist/cursor/reveal-anchor.d.ts +30 -0
- package/dist/cursor/reveal-anchor.js +31 -0
- package/dist/cursor/reveal-source.d.ts +35 -0
- package/dist/cursor/reveal-source.js +51 -0
- package/dist/cursor/scroll-ancestors.d.ts +28 -0
- package/dist/cursor/scroll-ancestors.js +89 -0
- package/dist/cursor/scrollport.d.ts +20 -0
- package/dist/cursor/scrollport.js +41 -0
- package/dist/cursor/sticky-column.d.ts +35 -0
- package/dist/cursor/sticky-column.js +64 -0
- package/dist/cursor/sticky-measure.d.ts +16 -0
- package/dist/cursor/sticky-measure.js +97 -0
- package/dist/cursor/typography-estimates.d.ts +21 -0
- package/dist/cursor/typography-estimates.js +21 -0
- package/dist/cursor/visual-lines.d.ts +25 -0
- package/dist/cursor/visual-lines.js +125 -0
- package/dist/cursor/widget-offset.d.ts +132 -0
- package/dist/cursor/widget-offset.js +543 -0
- package/dist/debug/diagnostics-report.d.ts +17 -0
- package/dist/debug/diagnostics-report.js +25 -0
- package/dist/debug/dump-tree.d.ts +6 -0
- package/dist/debug/dump-tree.js +114 -0
- package/dist/debug/inspect.d.ts +19 -0
- package/dist/debug/inspect.js +116 -0
- package/dist/debug/interaction-trace.d.ts +39 -0
- package/dist/debug/interaction-trace.js +105 -0
- package/dist/debug/operations-log.d.ts +14 -0
- package/dist/debug/operations-log.js +30 -0
- package/dist/decorations/buckets.d.ts +40 -0
- package/dist/decorations/buckets.js +87 -0
- package/dist/decorations/decoration-state.svelte.d.ts +20 -0
- package/dist/decorations/decoration-state.svelte.js +195 -0
- package/dist/decorations/island-dom.d.ts +35 -0
- package/dist/decorations/island-dom.js +148 -0
- package/dist/decorations/reserved-attrs.d.ts +12 -0
- package/dist/decorations/reserved-attrs.js +47 -0
- package/dist/decorations/types.d.ts +68 -0
- package/dist/decorations/types.js +5 -0
- package/dist/decorations/widget-dom.d.ts +15 -0
- package/dist/decorations/widget-dom.js +35 -0
- package/dist/dev-warn.d.ts +13 -0
- package/dist/dev-warn.js +28 -0
- package/dist/editor-actions/ancestry-folds.d.ts +32 -0
- package/dist/editor-actions/ancestry-folds.js +106 -0
- package/dist/editor-actions/block-edit-core.d.ts +29 -0
- package/dist/editor-actions/block-edit-core.js +277 -0
- package/dist/editor-actions/block-edit-scope.d.ts +79 -0
- package/dist/editor-actions/block-edit-scope.js +76 -0
- package/dist/editor-actions/block-edit.d.ts +8 -0
- package/dist/editor-actions/block-edit.js +111 -0
- package/dist/editor-actions/commit/history.d.ts +9 -0
- package/dist/editor-actions/commit/history.js +77 -0
- package/dist/editor-actions/commit/text-batch.d.ts +34 -0
- package/dist/editor-actions/commit/text-batch.js +61 -0
- package/dist/editor-actions/commit/undo-controller.d.ts +7 -0
- package/dist/editor-actions/commit/undo-controller.js +570 -0
- package/dist/editor-actions/container-block-component.d.ts +85 -0
- package/dist/editor-actions/container-block-component.js +228 -0
- package/dist/editor-actions/container-edit.d.ts +7 -0
- package/dist/editor-actions/container-edit.js +49 -0
- package/dist/editor-actions/container-exit-overrides.d.ts +16 -0
- package/dist/editor-actions/container-exit-overrides.js +38 -0
- package/dist/editor-actions/deps.d.ts +60 -0
- package/dist/editor-actions/deps.js +1 -0
- package/dist/editor-actions/enter-completion.d.ts +25 -0
- package/dist/editor-actions/enter-completion.js +76 -0
- package/dist/editor-actions/focus/focus-dispatch.d.ts +36 -0
- package/dist/editor-actions/focus/focus-dispatch.js +106 -0
- package/dist/editor-actions/focus/focus-landing.d.ts +7 -0
- package/dist/editor-actions/focus/focus-landing.js +39 -0
- package/dist/editor-actions/focus/focus.d.ts +7 -0
- package/dist/editor-actions/focus/focus.js +74 -0
- package/dist/editor-actions/index.d.ts +15 -0
- package/dist/editor-actions/index.js +19 -0
- package/dist/editor-actions/inline-range-commit.d.ts +20 -0
- package/dist/editor-actions/inline-range-commit.js +63 -0
- package/dist/editor-actions/list-context.d.ts +25 -0
- package/dist/editor-actions/list-context.js +285 -0
- package/dist/editor-actions/list-overrides.d.ts +13 -0
- package/dist/editor-actions/list-overrides.js +26 -0
- package/dist/editor-actions/merge-fallback.d.ts +19 -0
- package/dist/editor-actions/merge-fallback.js +27 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +65 -0
- package/dist/editor-actions/nested/nested-actions.js +59 -0
- package/dist/editor-actions/nested/nested-block-edit.d.ts +10 -0
- package/dist/editor-actions/nested/nested-block-edit.js +181 -0
- package/dist/editor-actions/nested/nested-focus.d.ts +9 -0
- package/dist/editor-actions/nested/nested-focus.js +30 -0
- package/dist/editor-actions/paste-coordinator.d.ts +4 -0
- package/dist/editor-actions/paste-coordinator.js +20 -0
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +25 -0
- package/dist/editor-actions/plugin/chrome-leaf.js +80 -0
- package/dist/editor-actions/plugin/container.d.ts +137 -0
- package/dist/editor-actions/plugin/container.js +351 -0
- package/dist/editor-actions/plugin/directive-container.d.ts +13 -0
- package/dist/editor-actions/plugin/directive-container.js +31 -0
- package/dist/editor-actions/reorder-action.d.ts +17 -0
- package/dist/editor-actions/reorder-action.js +104 -0
- package/dist/editor-actions/reorder-drag.d.ts +34 -0
- package/dist/editor-actions/reorder-drag.js +152 -0
- package/dist/editor-actions/replacement-focus.d.ts +27 -0
- package/dist/editor-actions/replacement-focus.js +60 -0
- package/dist/editor-actions/search-replace.d.ts +6 -0
- package/dist/editor-actions/search-replace.js +145 -0
- package/dist/editor-actions/table-context.d.ts +34 -0
- package/dist/editor-actions/table-context.js +292 -0
- package/dist/editor-actions/unwrap-strategies.d.ts +14 -0
- package/dist/editor-actions/unwrap-strategies.js +131 -0
- package/dist/editor-actions/whole-block-focus-surface.d.ts +51 -0
- package/dist/editor-actions/whole-block-focus-surface.js +171 -0
- package/dist/editor-events.d.ts +89 -0
- package/dist/editor-events.js +96 -0
- package/dist/editor-keys.d.ts +197 -0
- package/dist/editor-keys.js +40 -0
- package/dist/editor-props.d.ts +164 -0
- package/dist/editor-props.js +1 -0
- package/dist/editor-rects.d.ts +58 -0
- package/dist/editor-rects.js +114 -0
- package/dist/env.d.ts +12 -0
- package/dist/env.js +20 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +19 -0
- package/dist/invariants/commit-paths.d.ts +10 -0
- package/dist/invariants/commit-paths.js +25 -0
- package/dist/invariants/commit-scope.d.ts +9 -0
- package/dist/invariants/commit-scope.js +16 -0
- package/dist/invariants/context-keys.d.ts +7 -0
- package/dist/invariants/context-keys.js +14 -0
- package/dist/invariants/descriptor.d.ts +10 -0
- package/dist/invariants/descriptor.js +24 -0
- package/dist/invariants/inline-transitions.d.ts +23 -0
- package/dist/invariants/inline-transitions.js +52 -0
- package/dist/invariants/install.d.ts +36 -0
- package/dist/invariants/install.js +66 -0
- package/dist/invariants/landable-caret.d.ts +12 -0
- package/dist/invariants/landable-caret.js +31 -0
- package/dist/invariants/marker-css-parity.d.ts +10 -0
- package/dist/invariants/marker-css-parity.js +87 -0
- package/dist/invariants/node-shape.d.ts +44 -0
- package/dist/invariants/node-shape.js +258 -0
- package/dist/invariants/registry.d.ts +126 -0
- package/dist/invariants/registry.js +349 -0
- package/dist/invariants/render-fidelity.d.ts +8 -0
- package/dist/invariants/render-fidelity.js +33 -0
- package/dist/invariants/selection-endpoints.d.ts +19 -0
- package/dist/invariants/selection-endpoints.js +78 -0
- package/dist/invariants/single-node-sink.d.ts +9 -0
- package/dist/invariants/single-node-sink.js +16 -0
- package/dist/invariants/snapshot-integrity.d.ts +17 -0
- package/dist/invariants/snapshot-integrity.js +24 -0
- package/dist/invariants/split-landing.d.ts +8 -0
- package/dist/invariants/split-landing.js +15 -0
- package/dist/invariants/structural-descriptor.d.ts +21 -0
- package/dist/invariants/structural-descriptor.js +50 -0
- package/dist/perf/instruments.d.ts +49 -0
- package/dist/perf/instruments.js +154 -0
- package/dist/perf/use-mount-gauge.svelte.d.ts +1 -0
- package/dist/perf/use-mount-gauge.svelte.js +15 -0
- package/dist/plugin.d.ts +102 -0
- package/dist/plugin.js +156 -0
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +144 -0
- package/dist/plugins/admonitions/AdmonitionBlock.svelte.d.ts +11 -0
- package/dist/plugins/admonitions/admonition-kind.d.ts +8 -0
- package/dist/plugins/admonitions/admonition-kind.js +97 -0
- package/dist/plugins/admonitions/convert-document.d.ts +11 -0
- package/dist/plugins/admonitions/convert-document.js +39 -0
- package/dist/plugins/admonitions/gh-alert.d.ts +13 -0
- package/dist/plugins/admonitions/gh-alert.js +83 -0
- package/dist/plugins/admonitions/github-alert-kind.d.ts +12 -0
- package/dist/plugins/admonitions/github-alert-kind.js +125 -0
- package/dist/plugins/admonitions/index.d.ts +6 -0
- package/dist/plugins/admonitions/index.js +8 -0
- package/dist/plugins/admonitions/kinds.d.ts +26 -0
- package/dist/plugins/admonitions/kinds.js +18 -0
- package/dist/plugins/admonitions/register.d.ts +7 -0
- package/dist/plugins/admonitions/register.js +12 -0
- package/dist/plugins/details/DetailsBlock.svelte +129 -0
- package/dist/plugins/details/DetailsBlock.svelte.d.ts +11 -0
- package/dist/plugins/details/details-disclosure.svelte.d.ts +17 -0
- package/dist/plugins/details/details-disclosure.svelte.js +24 -0
- package/dist/plugins/details/details-kind.d.ts +25 -0
- package/dist/plugins/details/details-kind.js +237 -0
- package/dist/plugins/details/index.d.ts +2 -0
- package/dist/plugins/details/index.js +2 -0
- package/dist/plugins/details/register.d.ts +6 -0
- package/dist/plugins/details/register.js +15 -0
- package/dist/plugins/emoji/emoji-plugin.d.ts +2 -0
- package/dist/plugins/emoji/emoji-plugin.js +10 -0
- package/dist/plugins/emoji/emoji-recognizer.d.ts +18 -0
- package/dist/plugins/emoji/emoji-recognizer.js +63 -0
- package/dist/plugins/emoji/emoji-table.d.ts +1 -0
- package/dist/plugins/emoji/emoji-table.js +1919 -0
- package/dist/plugins/emoji/index.d.ts +3 -0
- package/dist/plugins/emoji/index.js +4 -0
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +103 -0
- package/dist/plugins/footnotes/FootnoteDefinition.svelte.d.ts +13 -0
- package/dist/plugins/footnotes/FootnoteReference.svelte +50 -0
- package/dist/plugins/footnotes/FootnoteReference.svelte.d.ts +4 -0
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +4 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +14 -0
- package/dist/plugins/footnotes/footnote-definition.js +147 -0
- package/dist/plugins/footnotes/footnote-lookup.d.ts +9 -0
- package/dist/plugins/footnotes/footnote-lookup.js +33 -0
- package/dist/plugins/footnotes/footnote-numbering.d.ts +23 -0
- package/dist/plugins/footnotes/footnote-numbering.js +78 -0
- package/dist/plugins/footnotes/footnote-reference.d.ts +7 -0
- package/dist/plugins/footnotes/footnote-reference.js +54 -0
- package/dist/plugins/footnotes/footnotes-plugin.d.ts +7 -0
- package/dist/plugins/footnotes/footnotes-plugin.js +17 -0
- package/dist/plugins/footnotes/index.d.ts +5 -0
- package/dist/plugins/footnotes/index.js +6 -0
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +17 -0
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +31 -0
- package/dist/plugins/highlight-occurrences/index.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/index.js +1 -0
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +26 -0
- package/dist/plugins/highlight-occurrences/occurrence-source.js +54 -0
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +33 -0
- package/dist/plugins/highlight-occurrences/occurrences.js +108 -0
- package/dist/plugins/latex/BlockMath.svelte +119 -0
- package/dist/plugins/latex/BlockMath.svelte.d.ts +21 -0
- package/dist/plugins/latex/MathInline.svelte +28 -0
- package/dist/plugins/latex/MathInline.svelte.d.ts +4 -0
- package/dist/plugins/latex/index.d.ts +3 -0
- package/dist/plugins/latex/index.js +4 -0
- package/dist/plugins/latex/latex-kind.d.ts +17 -0
- package/dist/plugins/latex/latex-kind.js +224 -0
- package/dist/plugins/latex/math-completion.d.ts +10 -0
- package/dist/plugins/latex/math-completion.js +19 -0
- package/dist/plugins/latex/math-renderer.d.ts +26 -0
- package/dist/plugins/latex/math-renderer.js +42 -0
- package/dist/plugins/latex/register.d.ts +10 -0
- package/dist/plugins/latex/register.js +23 -0
- package/dist/plugins/latex/renderer.d.ts +13 -0
- package/dist/plugins/latex/renderer.js +34 -0
- package/dist/plugins/mermaid/MermaidBlock.svelte +572 -0
- package/dist/plugins/mermaid/MermaidBlock.svelte.d.ts +11 -0
- package/dist/plugins/mermaid/index.d.ts +3 -0
- package/dist/plugins/mermaid/index.js +3 -0
- package/dist/plugins/mermaid/mermaid-kind.d.ts +38 -0
- package/dist/plugins/mermaid/mermaid-kind.js +176 -0
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +28 -0
- package/dist/plugins/mermaid/mermaid-renderer.js +35 -0
- package/dist/plugins/mermaid/register.d.ts +10 -0
- package/dist/plugins/mermaid/register.js +20 -0
- package/dist/plugins/mermaid/renderer.d.ts +11 -0
- package/dist/plugins/mermaid/renderer.js +53 -0
- package/dist/plugins/parrot/ParrotBlock.svelte +342 -0
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +21 -0
- package/dist/plugins/parrot/index.d.ts +1 -0
- package/dist/plugins/parrot/index.js +2 -0
- package/dist/plugins/parrot/parrot-plugin.d.ts +3 -0
- package/dist/plugins/parrot/parrot-plugin.js +49 -0
- package/dist/plugins/toc/TocBlock.svelte +218 -0
- package/dist/plugins/toc/TocBlock.svelte.d.ts +24 -0
- package/dist/plugins/toc/heading-outline.d.ts +28 -0
- package/dist/plugins/toc/heading-outline.js +65 -0
- package/dist/plugins/toc/index.d.ts +2 -0
- package/dist/plugins/toc/index.js +2 -0
- package/dist/plugins/toc/navigation-queue.d.ts +12 -0
- package/dist/plugins/toc/navigation-queue.js +21 -0
- package/dist/plugins/toc/toc-plugin.d.ts +16 -0
- package/dist/plugins/toc/toc-plugin.js +71 -0
- package/dist/presentation-mode.d.ts +32 -0
- package/dist/presentation-mode.js +50 -0
- package/dist/reactivity/block-list-state.svelte.d.ts +22 -0
- package/dist/reactivity/block-list-state.svelte.js +46 -0
- package/dist/reactivity/block-window.svelte.d.ts +41 -0
- package/dist/reactivity/block-window.svelte.js +93 -0
- package/dist/reactivity/content-version.svelte.d.ts +14 -0
- package/dist/reactivity/content-version.svelte.js +16 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +100 -0
- package/dist/reactivity/list-windowing.svelte.js +402 -0
- package/dist/reactivity/measure-batch.d.ts +15 -0
- package/dist/reactivity/measure-batch.js +18 -0
- package/dist/reactivity/publish-ref.svelte.d.ts +54 -0
- package/dist/reactivity/publish-ref.svelte.js +128 -0
- package/dist/reactivity/scope-geometry.d.ts +18 -0
- package/dist/reactivity/scope-geometry.js +29 -0
- package/dist/reactivity/state-registry.d.ts +10 -0
- package/dist/reactivity/state-registry.js +44 -0
- package/dist/reactivity/use-container-windowing.svelte.d.ts +35 -0
- package/dist/reactivity/use-container-windowing.svelte.js +95 -0
- package/dist/reactivity/window-slice.d.ts +11 -0
- package/dist/reactivity/window-slice.js +9 -0
- package/dist/scan-index.d.ts +11 -0
- package/dist/scan-index.js +27 -0
- package/dist/schema/block-commands.d.ts +105 -0
- package/dist/schema/block-commands.js +179 -0
- package/dist/schema/block-completions.d.ts +33 -0
- package/dist/schema/block-completions.js +49 -0
- package/dist/schema/block-component-registry.d.ts +33 -0
- package/dist/schema/block-component-registry.js +33 -0
- package/dist/schema/block-kind-descriptor.d.ts +281 -0
- package/dist/schema/block-kind-descriptor.js +187 -0
- package/dist/schema/block-openers.d.ts +94 -0
- package/dist/schema/block-openers.js +150 -0
- package/dist/schema/built-in-descriptors.d.ts +8 -0
- package/dist/schema/built-in-descriptors.js +560 -0
- package/dist/schema/child-spans.d.ts +25 -0
- package/dist/schema/child-spans.js +161 -0
- package/dist/schema/closure.d.ts +39 -0
- package/dist/schema/closure.js +55 -0
- package/dist/schema/command-id.d.ts +20 -0
- package/dist/schema/command-id.js +42 -0
- package/dist/schema/commands.d.ts +147 -0
- package/dist/schema/commands.js +294 -0
- package/dist/schema/container-raw.d.ts +21 -0
- package/dist/schema/container-raw.js +43 -0
- package/dist/schema/container-rebuilders.d.ts +32 -0
- package/dist/schema/container-rebuilders.js +95 -0
- package/dist/schema/define-plugin-block.d.ts +15 -0
- package/dist/schema/define-plugin-block.js +18 -0
- package/dist/schema/fenced-code-raw.d.ts +43 -0
- package/dist/schema/fenced-code-raw.js +220 -0
- package/dist/schema/global-commands.d.ts +11 -0
- package/dist/schema/global-commands.js +40 -0
- package/dist/schema/inline-construct-policy.d.ts +131 -0
- package/dist/schema/inline-construct-policy.js +96 -0
- package/dist/schema/keybinding-overrides.d.ts +39 -0
- package/dist/schema/keybinding-overrides.js +43 -0
- package/dist/schema/keybindings.d.ts +36 -0
- package/dist/schema/keybindings.js +75 -0
- package/dist/schema/merge-rules.d.ts +28 -0
- package/dist/schema/merge-rules.js +57 -0
- package/dist/schema/opener-priorities.d.ts +16 -0
- package/dist/schema/opener-priorities.js +16 -0
- package/dist/schema/operations.d.ts +110 -0
- package/dist/schema/operations.js +6 -0
- package/dist/schema/plugin-activation.d.ts +13 -0
- package/dist/schema/plugin-activation.js +18 -0
- package/dist/schema/plugin-editor-context.d.ts +33 -0
- package/dist/schema/plugin-editor-context.js +65 -0
- package/dist/schema/plugin-install.d.ts +58 -0
- package/dist/schema/plugin-install.js +132 -0
- package/dist/schema/plugin-kind.d.ts +21 -0
- package/dist/schema/plugin-kind.js +86 -0
- package/dist/schema/plugin-name.d.ts +1 -0
- package/dist/schema/plugin-name.js +7 -0
- package/dist/schema/register-once.d.ts +9 -0
- package/dist/schema/register-once.js +35 -0
- package/dist/schema/registration-checks.d.ts +32 -0
- package/dist/schema/registration-checks.js +122 -0
- package/dist/schema/registration-pending.d.ts +28 -0
- package/dist/schema/registration-pending.js +48 -0
- package/dist/schema/registry-reset.d.ts +7 -0
- package/dist/schema/registry-reset.js +30 -0
- package/dist/schema/registry-view.d.ts +30 -0
- package/dist/schema/registry-view.js +39 -0
- package/dist/schema/reserved-chords.d.ts +35 -0
- package/dist/schema/reserved-chords.js +313 -0
- package/dist/schema/reserved-chrome.d.ts +23 -0
- package/dist/schema/reserved-chrome.js +33 -0
- package/dist/schema/table-cell-raw.d.ts +14 -0
- package/dist/schema/table-cell-raw.js +30 -0
- package/dist/schema/whole-block-unit.d.ts +8 -0
- package/dist/schema/whole-block-unit.js +12 -0
- package/dist/search/document-scan.d.ts +22 -0
- package/dist/search/document-scan.js +39 -0
- package/dist/search/matcher.d.ts +31 -0
- package/dist/search/matcher.js +70 -0
- package/dist/search/regex-executor.d.ts +41 -0
- package/dist/search/regex-executor.js +165 -0
- package/dist/search/replace.d.ts +15 -0
- package/dist/search/replace.js +29 -0
- package/dist/search/search-state.svelte.d.ts +59 -0
- package/dist/search/search-state.svelte.js +231 -0
- package/dist/selection/autoscroll.d.ts +26 -0
- package/dist/selection/autoscroll.js +91 -0
- package/dist/selection/block-hit-test.d.ts +37 -0
- package/dist/selection/block-hit-test.js +59 -0
- package/dist/selection/caret-doors.d.ts +20 -0
- package/dist/selection/caret-doors.js +44 -0
- package/dist/selection/caret-restore.d.ts +15 -0
- package/dist/selection/caret-restore.js +32 -0
- package/dist/selection/char-endpoint-snap.d.ts +15 -0
- package/dist/selection/char-endpoint-snap.js +39 -0
- package/dist/selection/clipboard-text.d.ts +13 -0
- package/dist/selection/clipboard-text.js +314 -0
- package/dist/selection/cross-block/clipboard.d.ts +14 -0
- package/dist/selection/cross-block/clipboard.js +20 -0
- package/dist/selection/cross-block/dispatch.d.ts +78 -0
- package/dist/selection/cross-block/dispatch.js +57 -0
- package/dist/selection/cross-block/format-range.d.ts +38 -0
- package/dist/selection/cross-block/format-range.js +193 -0
- package/dist/selection/cross-block/format-toggle.d.ts +27 -0
- package/dist/selection/cross-block/format-toggle.js +109 -0
- package/dist/selection/cross-block/keydown.d.ts +11 -0
- package/dist/selection/cross-block/keydown.js +339 -0
- package/dist/selection/cross-block/ops.d.ts +56 -0
- package/dist/selection/cross-block/ops.js +210 -0
- package/dist/selection/cross-block/paste.d.ts +8 -0
- package/dist/selection/cross-block/paste.js +156 -0
- package/dist/selection/cross-block/pointer.d.ts +19 -0
- package/dist/selection/cross-block/pointer.js +80 -0
- package/dist/selection/cross-block/type-replace.d.ts +10 -0
- package/dist/selection/cross-block/type-replace.js +129 -0
- package/dist/selection/dead-space-caret.d.ts +39 -0
- package/dist/selection/dead-space-caret.js +173 -0
- package/dist/selection/drag-pointer.d.ts +22 -0
- package/dist/selection/drag-pointer.js +89 -0
- package/dist/selection/gap-caret.d.ts +47 -0
- package/dist/selection/gap-caret.js +72 -0
- package/dist/selection/keyboard-extend.d.ts +43 -0
- package/dist/selection/keyboard-extend.js +257 -0
- package/dist/selection/native-bridge.d.ts +47 -0
- package/dist/selection/native-bridge.js +204 -0
- package/dist/selection/nearest-block.d.ts +43 -0
- package/dist/selection/nearest-block.js +73 -0
- package/dist/selection/path-lookup.d.ts +32 -0
- package/dist/selection/path-lookup.js +132 -0
- package/dist/selection/path-math.d.ts +35 -0
- package/dist/selection/path-math.js +90 -0
- package/dist/selection/pointer-session.d.ts +43 -0
- package/dist/selection/pointer-session.js +111 -0
- package/dist/selection/primitives.d.ts +75 -0
- package/dist/selection/primitives.js +91 -0
- package/dist/selection/range-delete-ceremony.d.ts +85 -0
- package/dist/selection/range-delete-ceremony.js +197 -0
- package/dist/selection/range-delete-chrome.d.ts +39 -0
- package/dist/selection/range-delete-chrome.js +105 -0
- package/dist/selection/range-delete-table-coverage.d.ts +28 -0
- package/dist/selection/range-delete-table-coverage.js +168 -0
- package/dist/selection/range-delete-table.d.ts +16 -0
- package/dist/selection/range-delete-table.js +347 -0
- package/dist/selection/range-delete.d.ts +33 -0
- package/dist/selection/range-delete.js +121 -0
- package/dist/selection/selection-description.d.ts +7 -0
- package/dist/selection/selection-description.js +18 -0
- package/dist/selection/selection-restore.d.ts +46 -0
- package/dist/selection/selection-restore.js +66 -0
- package/dist/selection/selection-state.svelte.d.ts +72 -0
- package/dist/selection/selection-state.svelte.js +247 -0
- package/dist/selection/shared-keydown.d.ts +61 -0
- package/dist/selection/shared-keydown.js +150 -0
- package/dist/selection/table-endpoint-snap.d.ts +55 -0
- package/dist/selection/table-endpoint-snap.js +143 -0
- package/dist/selection/table-rect-extend.d.ts +23 -0
- package/dist/selection/table-rect-extend.js +46 -0
- package/dist/selection/widget-range-paint.d.ts +12 -0
- package/dist/selection/widget-range-paint.js +44 -0
- package/dist/styles/editor-theme.css +151 -0
- package/dist/styles/editor.css +585 -0
- package/dist/testing/conformance-core.d.ts +45 -0
- package/dist/testing/conformance-core.js +105 -0
- package/dist/testing/container-conformance.d.ts +137 -0
- package/dist/testing/container-conformance.js +533 -0
- package/dist/testing/headless-actions.d.ts +37 -0
- package/dist/testing/headless-actions.js +118 -0
- package/dist/testing/inline-conformance.d.ts +50 -0
- package/dist/testing/inline-conformance.js +442 -0
- package/dist/testing/kind-conformance.d.ts +54 -0
- package/dist/testing/kind-conformance.js +325 -0
- package/dist/testing/mount-dom-stubs.d.ts +8 -0
- package/dist/testing/mount-dom-stubs.js +19 -0
- package/dist/testing/parse-convergence.d.ts +14 -0
- package/dist/testing/parse-convergence.js +81 -0
- package/dist/testing.d.ts +20 -0
- package/dist/testing.js +61 -0
- package/dist/tree-operations/blockquote.d.ts +18 -0
- package/dist/tree-operations/blockquote.js +59 -0
- package/dist/tree-operations/children.d.ts +17 -0
- package/dist/tree-operations/children.js +56 -0
- package/dist/tree-operations/cleanup.d.ts +10 -0
- package/dist/tree-operations/cleanup.js +25 -0
- package/dist/tree-operations/clone.d.ts +5 -0
- package/dist/tree-operations/clone.js +43 -0
- package/dist/tree-operations/container-lift.d.ts +9 -0
- package/dist/tree-operations/container-lift.js +29 -0
- package/dist/tree-operations/index.d.ts +16 -0
- package/dist/tree-operations/index.js +14 -0
- package/dist/tree-operations/list/empty-check.d.ts +7 -0
- package/dist/tree-operations/list/empty-check.js +19 -0
- package/dist/tree-operations/list/exit-replacement.d.ts +13 -0
- package/dist/tree-operations/list/exit-replacement.js +49 -0
- package/dist/tree-operations/list/item-partition.d.ts +13 -0
- package/dist/tree-operations/list/item-partition.js +33 -0
- package/dist/tree-operations/list/list-builders.d.ts +44 -0
- package/dist/tree-operations/list/list-builders.js +129 -0
- package/dist/tree-operations/list/ordered-markers.d.ts +36 -0
- package/dist/tree-operations/list/ordered-markers.js +114 -0
- package/dist/tree-operations/list/reconcile-task.d.ts +12 -0
- package/dist/tree-operations/list/reconcile-task.js +47 -0
- package/dist/tree-operations/list/sublist-separator.d.ts +13 -0
- package/dist/tree-operations/list/sublist-separator.js +34 -0
- package/dist/tree-operations/list/terminator.d.ts +17 -0
- package/dist/tree-operations/list/terminator.js +60 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +29 -0
- package/dist/tree-operations/list/unwrap-merge.js +202 -0
- package/dist/tree-operations/node-ops.d.ts +296 -0
- package/dist/tree-operations/node-ops.js +1428 -0
- package/dist/tree-operations/parse-block.d.ts +3 -0
- package/dist/tree-operations/parse-block.js +8 -0
- package/dist/tree-operations/paste/apply.d.ts +12 -0
- package/dist/tree-operations/paste/apply.js +75 -0
- package/dist/tree-operations/paste/body-write.d.ts +19 -0
- package/dist/tree-operations/paste/body-write.js +53 -0
- package/dist/tree-operations/paste/container-match.d.ts +32 -0
- package/dist/tree-operations/paste/container-match.js +238 -0
- package/dist/tree-operations/paste/container-paste.d.ts +10 -0
- package/dist/tree-operations/paste/container-paste.js +27 -0
- package/dist/tree-operations/paste/dispatch.d.ts +61 -0
- package/dist/tree-operations/paste/dispatch.js +138 -0
- package/dist/tree-operations/paste/find-enclosing-list.d.ts +8 -0
- package/dist/tree-operations/paste/find-enclosing-list.js +30 -0
- package/dist/tree-operations/paste/focus-target.d.ts +27 -0
- package/dist/tree-operations/paste/focus-target.js +40 -0
- package/dist/tree-operations/paste/hooks.d.ts +17 -0
- package/dist/tree-operations/paste/hooks.js +80 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +29 -0
- package/dist/tree-operations/paste/list-absorb.js +106 -0
- package/dist/tree-operations/paste/list-break-out.d.ts +42 -0
- package/dist/tree-operations/paste/list-break-out.js +136 -0
- package/dist/tree-operations/paste/parent-scope.d.ts +17 -0
- package/dist/tree-operations/paste/parent-scope.js +35 -0
- package/dist/tree-operations/paste/paste-deps.d.ts +20 -0
- package/dist/tree-operations/paste/paste-deps.js +6 -0
- package/dist/tree-operations/paste/paste-replacement.d.ts +8 -0
- package/dist/tree-operations/paste/paste-replacement.js +60 -0
- package/dist/tree-operations/paste/paste-transforms.d.ts +25 -0
- package/dist/tree-operations/paste/paste-transforms.js +72 -0
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +29 -0
- package/dist/tree-operations/paste/replace-block-at-parent.js +75 -0
- package/dist/tree-operations/paste/strategy.d.ts +9 -0
- package/dist/tree-operations/paste/strategy.js +20 -0
- package/dist/tree-operations/paste/table-slice.d.ts +10 -0
- package/dist/tree-operations/paste/table-slice.js +39 -0
- package/dist/tree-operations/paste-surfaces.d.ts +61 -0
- package/dist/tree-operations/paste-surfaces.js +15 -0
- package/dist/tree-operations/path-mutate.d.ts +12 -0
- package/dist/tree-operations/path-mutate.js +20 -0
- package/dist/tree-operations/reorder-unit.d.ts +17 -0
- package/dist/tree-operations/reorder-unit.js +37 -0
- package/dist/tree-operations/reorder.d.ts +13 -0
- package/dist/tree-operations/reorder.js +57 -0
- package/dist/tree-operations/sharing.d.ts +18 -0
- package/dist/tree-operations/sharing.js +14 -0
- package/dist/tree-operations/splice-many.d.ts +9 -0
- package/dist/tree-operations/splice-many.js +22 -0
- package/dist/tree-operations/structural-change.d.ts +65 -0
- package/dist/tree-operations/structural-change.js +117 -0
- package/dist/tree-operations/sub-table-copy.d.ts +6 -0
- package/dist/tree-operations/sub-table-copy.js +43 -0
- package/dist/tree-operations/table-mutations.d.ts +17 -0
- package/dist/tree-operations/table-mutations.js +101 -0
- package/dist/tree-operations/unshare.d.ts +101 -0
- package/dist/tree-operations/unshare.js +248 -0
- package/dist/undo/manager.d.ts +2 -0
- package/dist/undo/manager.js +50 -0
- package/dist/undo/types.d.ts +44 -0
- package/dist/undo/types.js +7 -0
- package/docs/guide/consumer-guide.md +1098 -0
- package/docs/guide/directives.md +223 -0
- package/docs/guide/plugin-api.md +329 -0
- package/docs/guide/plugin-guide/conspiracy.gif +0 -0
- package/docs/guide/plugin-guide/parrot-frames.md +209 -0
- package/docs/guide/plugin-guide/parrot.gif +0 -0
- package/docs/guide/plugin-guide.md +1693 -0
- package/docs/guide/plugin-testing.md +463 -0
- package/package.json +238 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared cross-block landing tail for the focus dispatchers. Sticky-X null handling
|
|
3
|
+
* lives here, so `focusAtColumn` receivers always get a finite x.
|
|
4
|
+
*/
|
|
5
|
+
import { CURSOR_END, CURSOR_START } from '../../block-component';
|
|
6
|
+
export async function consumeStickyLanding(block, index, position, stickyColumn, retryAt) {
|
|
7
|
+
const isStickyMove = typeof position === 'object' && 'stickyColumnFrom' in position;
|
|
8
|
+
// Widget-only blocks contribute no column landing, so ArrowUp/Down passes through.
|
|
9
|
+
// Horizontal moves still stop at the widget edge.
|
|
10
|
+
if (isStickyMove && block.isVerticallyTransparent?.()) {
|
|
11
|
+
const direction = position.stickyColumnFrom === 'below' ? -1 : 1;
|
|
12
|
+
await retryAt(index + direction);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
// Enter an edge widget rather than dropping a no-op caret at its boundary, so the
|
|
16
|
+
// arrow key produces one visible step.
|
|
17
|
+
if (position === 'start' && block.enterEdgeWidget?.('start'))
|
|
18
|
+
return;
|
|
19
|
+
if (position === 'end' && block.enterEdgeWidget?.('end'))
|
|
20
|
+
return;
|
|
21
|
+
if (isStickyMove) {
|
|
22
|
+
const x = stickyColumn.get();
|
|
23
|
+
const from = position.stickyColumnFrom;
|
|
24
|
+
if (x !== null && block.focusAtColumn) {
|
|
25
|
+
block.focusAtColumn(x, from);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
block.focus(from === 'above' ? CURSOR_START : CURSOR_END);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// An ARRIVAL says "the start"/"the end" and the door seats it on a landable offset; a numeric
|
|
32
|
+
// position is a caller who knows its byte (a split's continuation) and is passed through.
|
|
33
|
+
if (typeof position === 'number')
|
|
34
|
+
block.focus(position);
|
|
35
|
+
else if (position === 'start')
|
|
36
|
+
block.focus(CURSOR_START);
|
|
37
|
+
else
|
|
38
|
+
block.focus(CURSOR_END);
|
|
39
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FocusActions factory: cursor movement across blocks, sticky-column-aware
|
|
3
|
+
* vertical traversal, and trailing-paragraph creation past document end.
|
|
4
|
+
*/
|
|
5
|
+
import type { FocusActions } from '../../action-contracts';
|
|
6
|
+
import type { EditorActionsDeps, UndoController } from '../deps';
|
|
7
|
+
export declare function createFocusActions(deps: EditorActionsDeps, controller: UndoController): FocusActions;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FocusActions factory: cursor movement across blocks, sticky-column-aware
|
|
3
|
+
* vertical traversal, and trailing-paragraph creation past document end.
|
|
4
|
+
*/
|
|
5
|
+
import { emptyParagraph } from '../../tree-operations';
|
|
6
|
+
import { trailingLineEnding } from '../../core/lines';
|
|
7
|
+
import { traversalStep } from './focus-dispatch';
|
|
8
|
+
import { consumeStickyLanding } from './focus-landing';
|
|
9
|
+
import { docPathFrom } from '../../cursor/coordinate-spaces';
|
|
10
|
+
import { tryGapStop } from '../../selection/gap-caret';
|
|
11
|
+
export function createFocusActions(deps, controller) {
|
|
12
|
+
const gapScope = {
|
|
13
|
+
getDoc: () => deps.doc,
|
|
14
|
+
selection: deps.selectionState,
|
|
15
|
+
getPresentationMode: deps.getPresentationMode
|
|
16
|
+
};
|
|
17
|
+
const gapStopAt = (parentPath, boundaryIndex) => tryGapStop(gapScope, parentPath, boundaryIndex);
|
|
18
|
+
return {
|
|
19
|
+
revealPath: deps.revealPath,
|
|
20
|
+
tryGapStop: gapStopAt,
|
|
21
|
+
async moveFocus(blockIndex, position, options) {
|
|
22
|
+
const step = traversalStep(position);
|
|
23
|
+
const stopsAtGaps = step !== 0 && !options?.skipGapStop;
|
|
24
|
+
// The boundary a directional move crosses is the greater of the two adjacent
|
|
25
|
+
// indices. Out-of-range boundaries and the root's trailing one decline in
|
|
26
|
+
// `gapEligibleAt`, so the arms below keep their behavior unguarded.
|
|
27
|
+
if (stopsAtGaps && gapStopAt([], step > 0 ? blockIndex : blockIndex + 1))
|
|
28
|
+
return;
|
|
29
|
+
if (blockIndex < 0)
|
|
30
|
+
return;
|
|
31
|
+
if (blockIndex >= deps.doc.children.length) {
|
|
32
|
+
if (options?.append === false)
|
|
33
|
+
return;
|
|
34
|
+
// Past the last block — appended through the commit primitive so it participates in
|
|
35
|
+
// undo history and edit events. The separating blank line and the paragraph's own
|
|
36
|
+
// are both line endings, so both take the document's (G4.20).
|
|
37
|
+
const lastBlock = deps.doc.children[deps.doc.children.length - 1];
|
|
38
|
+
const lineEnding = trailingLineEnding(lastBlock?.raw ?? '\n');
|
|
39
|
+
const newBlock = emptyParagraph(lineEnding, lineEnding);
|
|
40
|
+
// The appended slot (one past the end) is the coordinate for both the
|
|
41
|
+
// event and the restore fallback — it names the block this op creates.
|
|
42
|
+
const appendPath = docPathFrom([deps.doc.children.length]);
|
|
43
|
+
await controller.commitStructural({
|
|
44
|
+
snapshot: { path: appendPath, offset: 0 },
|
|
45
|
+
mutate: (children) => {
|
|
46
|
+
const at = children.length;
|
|
47
|
+
children.push(newBlock);
|
|
48
|
+
return { op: 'insert', at, count: 1 };
|
|
49
|
+
},
|
|
50
|
+
op: { kind: 'appendBlock', eventPath: appendPath },
|
|
51
|
+
afterTick: () => {
|
|
52
|
+
const lastIdx = deps.doc.children.length - 1;
|
|
53
|
+
deps.blockRefs[lastIdx]?.focus(0);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const block = await deps.revealPath([blockIndex]);
|
|
59
|
+
if (!block?.focusable) {
|
|
60
|
+
// A refless or non-focusable block must not dead-end the move — skip it in
|
|
61
|
+
// the move's direction (editor.md § Focus traversal).
|
|
62
|
+
if (step !== 0)
|
|
63
|
+
await this.moveFocus(blockIndex + step, position, options);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// A landing AT a block's end is a seat at an extreme, not a step onto it, so the side
|
|
67
|
+
// it means is construct-relative (docs/design/live-mode.md § 4.2). Without this the
|
|
68
|
+
// first byte typed after a structural landing joins the closer it landed inside.
|
|
69
|
+
if (position === 'end')
|
|
70
|
+
deps.edgeAffinity.noteExtreme();
|
|
71
|
+
await consumeStickyLanding(block, blockIndex, position, deps.stickyColumn, (i) => this.moveFocus(i, position, options));
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor-root action bundle factory. Composes the undo controller plus four
|
|
3
|
+
* sub-interface bundles for Editor.svelte to wire into Svelte context.
|
|
4
|
+
*/
|
|
5
|
+
import type { BlockEditActions, ContainerEditActions, FocusActions, HistoryActions } from '../action-contracts';
|
|
6
|
+
import type { EditorActionsDeps, UndoController } from './deps';
|
|
7
|
+
export interface EditorActionsBundle {
|
|
8
|
+
blockEdit: BlockEditActions;
|
|
9
|
+
focus: FocusActions;
|
|
10
|
+
history: HistoryActions;
|
|
11
|
+
containerEdit: ContainerEditActions;
|
|
12
|
+
controller: UndoController;
|
|
13
|
+
}
|
|
14
|
+
export declare function createEditorActions(deps: EditorActionsDeps): EditorActionsBundle;
|
|
15
|
+
export type { EditorActionsDeps } from './deps';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor-root action bundle factory. Composes the undo controller plus four
|
|
3
|
+
* sub-interface bundles for Editor.svelte to wire into Svelte context.
|
|
4
|
+
*/
|
|
5
|
+
import { createUndoController } from './commit/undo-controller';
|
|
6
|
+
import { createBlockEditActions } from './block-edit';
|
|
7
|
+
import { createFocusActions } from './focus/focus';
|
|
8
|
+
import { createHistoryActions } from './commit/history';
|
|
9
|
+
import { createContainerEditActions } from './container-edit';
|
|
10
|
+
export function createEditorActions(deps) {
|
|
11
|
+
const controller = createUndoController(deps);
|
|
12
|
+
return {
|
|
13
|
+
blockEdit: createBlockEditActions(deps, controller),
|
|
14
|
+
focus: createFocusActions(deps, controller),
|
|
15
|
+
history: createHistoryActions(deps, controller),
|
|
16
|
+
containerEdit: createContainerEditActions(deps, controller),
|
|
17
|
+
controller
|
|
18
|
+
};
|
|
19
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rewrite a byte range inside one leaf's raw as a single undo entry. The anchored inline editors
|
|
3
|
+
* (image properties, link card) all reach their bytes this way, so the scope choice — top-level
|
|
4
|
+
* vs container ceremony — and the no-op discard live here rather than at each popover.
|
|
5
|
+
*/
|
|
6
|
+
import type { Document } from '../core/nodes';
|
|
7
|
+
import type { GrammarView } from '../schema/block-openers';
|
|
8
|
+
import type { UndoController } from './deps';
|
|
9
|
+
export interface InlineRangeCommitDeps {
|
|
10
|
+
getDoc: () => Document;
|
|
11
|
+
controller: UndoController;
|
|
12
|
+
/** The instance's grammar, for the leaf's own raw-write rule. Absent = the global grammar. */
|
|
13
|
+
grammar?: GrammarView;
|
|
14
|
+
}
|
|
15
|
+
export interface InlineRangeCommit {
|
|
16
|
+
/** Splice `bytes` over `[start, end)` of the leaf at `path`; `caretAfter` is the raw offset the
|
|
17
|
+
* entry's snapshot restores. A splice that changes no byte commits nothing. */
|
|
18
|
+
commitInlineRange(path: number[], start: number, end: number, bytes: string, caretAfter: number): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export declare function createInlineRangeCommit(deps: InlineRangeCommitDeps): InlineRangeCommit;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rewrite a byte range inside one leaf's raw as a single undo entry. The anchored inline editors
|
|
3
|
+
* (image properties, link card) all reach their bytes this way, so the scope choice — top-level
|
|
4
|
+
* vs container ceremony — and the no-op discard live here rather than at each popover.
|
|
5
|
+
*/
|
|
6
|
+
import { docPathFrom } from '../cursor/coordinate-spaces';
|
|
7
|
+
import { expectStateForNode } from '../reactivity/state-registry';
|
|
8
|
+
import { isBlockNode, nodeAt, normalizeOwnRaw, writeOwnRaw } from '../tree-operations/node-ops';
|
|
9
|
+
import { ensureUnsharedChild, ensureUnsharedPath } from '../tree-operations/unshare';
|
|
10
|
+
export function createInlineRangeCommit(deps) {
|
|
11
|
+
async function commitInlineRange(path, start, end, bytes, caretAfter) {
|
|
12
|
+
if (path.length === 0)
|
|
13
|
+
return;
|
|
14
|
+
const leaf = nodeAt(deps.getDoc(), path);
|
|
15
|
+
if (leaf === null || !isBlockNode(leaf))
|
|
16
|
+
return;
|
|
17
|
+
const newRaw = leaf.raw.slice(0, start) + bytes + leaf.raw.slice(end);
|
|
18
|
+
// Compared against the bytes the KIND would actually land (G4.28), so a splice a cell's
|
|
19
|
+
// pipe escape normalizes away adds no undo entry — the dismiss-after-resize shape.
|
|
20
|
+
const legal = normalizeOwnRaw(leaf, newRaw);
|
|
21
|
+
if (legal === leaf.raw)
|
|
22
|
+
return;
|
|
23
|
+
const { controller } = deps;
|
|
24
|
+
const snapshot = { path: docPathFrom(path), offset: caretAfter };
|
|
25
|
+
const leafIdx = path[path.length - 1];
|
|
26
|
+
const op = {
|
|
27
|
+
kind: 'updateContent',
|
|
28
|
+
detail: { length: legal.length },
|
|
29
|
+
eventPath: docPathFrom(path)
|
|
30
|
+
};
|
|
31
|
+
const writeRaw = (node) => {
|
|
32
|
+
writeOwnRaw(node, newRaw, deps.grammar);
|
|
33
|
+
};
|
|
34
|
+
if (path.length === 1) {
|
|
35
|
+
await controller.commitStructural({
|
|
36
|
+
snapshot,
|
|
37
|
+
mutate: (children) => {
|
|
38
|
+
const [owned] = ensureUnsharedPath({ children }, [leafIdx], controller.sharing);
|
|
39
|
+
writeRaw(owned);
|
|
40
|
+
return { op: 'noop' };
|
|
41
|
+
},
|
|
42
|
+
op
|
|
43
|
+
});
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// path.length > 1, so the parent is a container node, never the root.
|
|
47
|
+
const container = nodeAt(deps.getDoc(), path.slice(0, -1));
|
|
48
|
+
if (container === null || !isBlockNode(container))
|
|
49
|
+
return;
|
|
50
|
+
await controller.commitContainerStructural({
|
|
51
|
+
containerNode: container,
|
|
52
|
+
path: path.slice(0, -1),
|
|
53
|
+
state: expectStateForNode(container),
|
|
54
|
+
snapshot,
|
|
55
|
+
mutate: (scope) => {
|
|
56
|
+
writeRaw(ensureUnsharedChild(scope.node, leafIdx, scope.sharing));
|
|
57
|
+
return { op: 'noop' };
|
|
58
|
+
},
|
|
59
|
+
op
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return { commitInlineRange };
|
|
63
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ListContext bundle a ListBlock provides to its child ListItemBlocks. Every
|
|
3
|
+
* mutation routes through `commitMultiScope`, whose owned scope views are the only
|
|
4
|
+
* legal write targets — never the pre-commit `deps.scope.node` captures.
|
|
5
|
+
*/
|
|
6
|
+
import type { BlockEditActions, FocusActions, ListContext } from '../action-contracts';
|
|
7
|
+
import type { PresentationModeGetter } from '../editor-keys';
|
|
8
|
+
import type { InlineResolverRef } from '../schema/inline-construct-policy';
|
|
9
|
+
import type { UndoController } from './deps';
|
|
10
|
+
import type { BlockListState } from '../reactivity/block-list-state.svelte';
|
|
11
|
+
import type { NodeScope } from './nested/nested-actions';
|
|
12
|
+
export interface ListContextDeps {
|
|
13
|
+
scope: NodeScope;
|
|
14
|
+
state: BlockListState;
|
|
15
|
+
parentBlockEdit: BlockEditActions;
|
|
16
|
+
parentFocus: FocusActions;
|
|
17
|
+
parentListContext: ListContext | undefined;
|
|
18
|
+
controller: UndoController;
|
|
19
|
+
/** Live EFFECTIVE mode, for the mid-item split's byte rebalance. Nullable rather than
|
|
20
|
+
* optional so the one composing container answers. */
|
|
21
|
+
getPresentationMode: PresentationModeGetter | undefined;
|
|
22
|
+
/** The instance's link-reference resolver, required-nullable beside the mode. */
|
|
23
|
+
linkRef: InlineResolverRef | undefined;
|
|
24
|
+
}
|
|
25
|
+
export declare function createListContext(deps: ListContextDeps): ListContext;
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ListContext bundle a ListBlock provides to its child ListItemBlocks. Every
|
|
3
|
+
* mutation routes through `commitMultiScope`, whose owned scope views are the only
|
|
4
|
+
* legal write targets — never the pre-commit `deps.scope.node` captures.
|
|
5
|
+
*/
|
|
6
|
+
import { CURSOR_EXACT_START, CURSOR_START, FOCUS_LAST_START } from '../block-component';
|
|
7
|
+
import { metadataOf } from '../core/nodes';
|
|
8
|
+
import { trailingLineEnding } from '../core/lines';
|
|
9
|
+
import { extendDocPath, docPathFrom } from '../cursor/coordinate-spaces';
|
|
10
|
+
import { replacePreservingFirst, stampStructuralChange } from '../tree-operations/structural-change';
|
|
11
|
+
import { splitNode as performSplit, assertSplitLanding, emptyParagraph } from '../tree-operations';
|
|
12
|
+
import { ensureUnsharedChild } from '../tree-operations/unshare';
|
|
13
|
+
import { rebuildListRaw } from '../schema/container-rebuilders';
|
|
14
|
+
import { renumberOrderedList, normalizeItemMarkerToList, bumpOrderedMarker } from '../tree-operations/list/ordered-markers';
|
|
15
|
+
import { buildListItem, buildListShell } from '../tree-operations/list/list-builders';
|
|
16
|
+
import { buildExitReplacement } from '../tree-operations/list/exit-replacement';
|
|
17
|
+
import { settleSublistSeparator } from '../tree-operations/list/sublist-separator';
|
|
18
|
+
import { expectStateForNode } from '../reactivity/state-registry';
|
|
19
|
+
/** The Enter-minted follower: the previous item's marker bumped, its task-ness inherited unchecked. */
|
|
20
|
+
function mintFollowerItem(prevMeta, children) {
|
|
21
|
+
const inheritTask = prevMeta?.taskItem === true;
|
|
22
|
+
return buildListItem({
|
|
23
|
+
marker: bumpOrderedMarker(prevMeta?.marker ?? '- '),
|
|
24
|
+
taskItem: inheritTask,
|
|
25
|
+
taskChecked: false,
|
|
26
|
+
taskMarker: inheritTask ? '[ ] ' : null
|
|
27
|
+
}, children);
|
|
28
|
+
}
|
|
29
|
+
export function createListContext(deps) {
|
|
30
|
+
return {
|
|
31
|
+
async indentItem(itemIndex) {
|
|
32
|
+
const node = deps.scope.node;
|
|
33
|
+
if (!node.children || itemIndex === 0)
|
|
34
|
+
return;
|
|
35
|
+
const prevItem = node.children[itemIndex - 1];
|
|
36
|
+
if (!prevItem.children)
|
|
37
|
+
return;
|
|
38
|
+
const ordered = metadataOf(node, 'list').ordered;
|
|
39
|
+
const existingNestedIdx = prevItem.children.findIndex((c) => c.kind === 'list' && metadataOf(c, 'list').ordered === ordered);
|
|
40
|
+
const existingNestedList = existingNestedIdx === -1 ? undefined : prevItem.children[existingNestedIdx];
|
|
41
|
+
// One predicate, one destination: a matching sublist adopts the item whether or not it
|
|
42
|
+
// holds any yet, so the scope push and the mutate branch cannot disagree about the seat.
|
|
43
|
+
const destination = existingNestedList
|
|
44
|
+
? {
|
|
45
|
+
node: existingNestedList,
|
|
46
|
+
state: expectStateForNode(existingNestedList),
|
|
47
|
+
path: [...deps.scope.path, itemIndex - 1, existingNestedIdx]
|
|
48
|
+
}
|
|
49
|
+
: {
|
|
50
|
+
node: prevItem,
|
|
51
|
+
state: expectStateForNode(prevItem),
|
|
52
|
+
path: [...deps.scope.path, itemIndex - 1]
|
|
53
|
+
};
|
|
54
|
+
await deps.controller.commitMultiScope({
|
|
55
|
+
scopes: [{ node, state: deps.state, path: deps.scope.path }, destination],
|
|
56
|
+
snapshot: { path: extendDocPath(deps.scope.path, itemIndex), offset: 0 },
|
|
57
|
+
mutate: ([outerScope, destScope]) => {
|
|
58
|
+
const sharing = outerScope.sharing;
|
|
59
|
+
const [movedItem] = outerScope.children.splice(itemIndex, 1);
|
|
60
|
+
let destList;
|
|
61
|
+
if (existingNestedList) {
|
|
62
|
+
destList = destScope.node;
|
|
63
|
+
destScope.children.push(movedItem);
|
|
64
|
+
// Adopt the destination sublist's marker style, matching paste-absorb.
|
|
65
|
+
// A fresh shell (the else branch) has no convention to adopt.
|
|
66
|
+
const moved = ensureUnsharedChild(destList, destScope.children.length - 1, sharing);
|
|
67
|
+
normalizeItemMarkerToList(moved, destList);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const shell = buildListShell(ordered, [movedItem]);
|
|
71
|
+
sharing.stamp(shell);
|
|
72
|
+
destScope.children.push(shell);
|
|
73
|
+
// Write-then-re-read (tree-operations/unshare.ts): the writes below go
|
|
74
|
+
// through the tree-held value, not the shell the proxy has now observed.
|
|
75
|
+
destList = destScope.children[destScope.children.length - 1];
|
|
76
|
+
}
|
|
77
|
+
// Renumber writes the moved item's marker — sharing unshares it.
|
|
78
|
+
renumberOrderedList(destList, 0, sharing);
|
|
79
|
+
rebuildListRaw(destList);
|
|
80
|
+
// After the rebuild: the separator question is asked of the sublist's own bytes.
|
|
81
|
+
settleSublistSeparator(destScope.children, destScope.children.length - 1);
|
|
82
|
+
renumberOrderedList(outerScope.node, itemIndex, sharing);
|
|
83
|
+
return [
|
|
84
|
+
{ op: 'delete', at: itemIndex, count: 1 },
|
|
85
|
+
{ op: 'insert', at: destScope.children.length - 1, count: 1 }
|
|
86
|
+
];
|
|
87
|
+
},
|
|
88
|
+
op: {
|
|
89
|
+
kind: 'replaceBlock',
|
|
90
|
+
detail: { action: 'indentItem', itemIndex },
|
|
91
|
+
eventPath: docPathFrom(deps.scope.path)
|
|
92
|
+
},
|
|
93
|
+
afterTick: () => {
|
|
94
|
+
deps.state.innerBlockRefs[itemIndex - 1]?.focus(FOCUS_LAST_START);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
async unindentItem(itemIndex) {
|
|
99
|
+
if (!deps.parentListContext || !deps.scope.node.children)
|
|
100
|
+
return;
|
|
101
|
+
await deps.parentListContext.promoteNestedItem(deps.parentListContext.getContainingItemIndex(), deps.scope.node, itemIndex);
|
|
102
|
+
},
|
|
103
|
+
async insertItemAfter(itemIndex, newItem) {
|
|
104
|
+
const node = deps.scope.node;
|
|
105
|
+
if (!node.children)
|
|
106
|
+
return;
|
|
107
|
+
if (!newItem) {
|
|
108
|
+
const prevItem = node.children[itemIndex];
|
|
109
|
+
newItem = mintFollowerItem(prevItem ? metadataOf(prevItem, 'listItem') : undefined,
|
|
110
|
+
// The new item's body IS a line ending, so it takes the list's (G4.20);
|
|
111
|
+
// rebuildListItemRaw derives the item's raw from it.
|
|
112
|
+
[emptyParagraph('', trailingLineEnding(node.raw))]);
|
|
113
|
+
}
|
|
114
|
+
await deps.controller.commitMultiScope({
|
|
115
|
+
scopes: [{ node, state: deps.state, path: deps.scope.path }],
|
|
116
|
+
snapshot: { path: docPathFrom(deps.scope.path), offset: 0 },
|
|
117
|
+
mutate: ([scope]) => {
|
|
118
|
+
const sharing = scope.sharing;
|
|
119
|
+
sharing.stamp(newItem);
|
|
120
|
+
scope.children.splice(itemIndex + 1, 0, newItem);
|
|
121
|
+
renumberOrderedList(scope.node, itemIndex + 1, sharing);
|
|
122
|
+
return [{ op: 'insert', at: itemIndex + 1, count: 1 }];
|
|
123
|
+
},
|
|
124
|
+
op: {
|
|
125
|
+
kind: 'appendBlock',
|
|
126
|
+
detail: { itemIndex },
|
|
127
|
+
eventPath: docPathFrom(deps.scope.path)
|
|
128
|
+
},
|
|
129
|
+
afterTick: () => {
|
|
130
|
+
deps.state.innerBlockRefs[itemIndex + 1]?.focus(0);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
},
|
|
134
|
+
async splitItemAtOffset(itemIndex, innerIndex, offset) {
|
|
135
|
+
const outerList = deps.scope.node;
|
|
136
|
+
if (!outerList.children)
|
|
137
|
+
return;
|
|
138
|
+
const item = outerList.children[itemIndex];
|
|
139
|
+
if (!item.children)
|
|
140
|
+
return;
|
|
141
|
+
const itemState = expectStateForNode(item);
|
|
142
|
+
// Both scopes in one commit, so mid-item Enter is a single undo entry.
|
|
143
|
+
await deps.controller.commitMultiScope({
|
|
144
|
+
scopes: [
|
|
145
|
+
{ node: outerList, state: deps.state, path: deps.scope.path },
|
|
146
|
+
{ node: item, state: itemState, path: [...deps.scope.path, itemIndex] }
|
|
147
|
+
],
|
|
148
|
+
// The true pre-edit caret: `offset` sits inside the split leaf.
|
|
149
|
+
snapshot: { path: docPathFrom([...deps.scope.path, itemIndex, innerIndex]), offset },
|
|
150
|
+
mutate: ([outerScope, itemScope]) => {
|
|
151
|
+
const sharing = outerScope.sharing;
|
|
152
|
+
const itemChildren = itemScope.children;
|
|
153
|
+
// The descriptor must report everything removed from innerIndex onward,
|
|
154
|
+
// not just the child that was split.
|
|
155
|
+
const preSpliceLen = itemChildren.length;
|
|
156
|
+
const split = performSplit({ children: itemChildren, ownerKind: itemScope.node.kind, owner: itemScope.node }, innerIndex, offset, sharing, deps.getPresentationMode?.(), deps.linkRef);
|
|
157
|
+
stampStructuralChange(itemChildren, split.change, sharing);
|
|
158
|
+
// The primitive's landing index, not `innerIndex + 1`: a plural first half
|
|
159
|
+
// stays with this item, and G1.34 holds the splice to it.
|
|
160
|
+
const landing = split.secondHalfIndex;
|
|
161
|
+
assertSplitLanding(split, landing);
|
|
162
|
+
const secondHalf = itemChildren.splice(landing);
|
|
163
|
+
if (secondHalf.length > 0) {
|
|
164
|
+
secondHalf[0].leadingTrivia = '';
|
|
165
|
+
}
|
|
166
|
+
const newItem = mintFollowerItem(metadataOf(itemScope.node, 'listItem'), secondHalf);
|
|
167
|
+
sharing.stamp(newItem);
|
|
168
|
+
outerScope.children.splice(itemIndex + 1, 0, newItem);
|
|
169
|
+
renumberOrderedList(outerScope.node, itemIndex + 1, sharing);
|
|
170
|
+
// Net item change: [innerIndex .. preSpliceLen) replaced by the first half's
|
|
171
|
+
// blocks — plural when the cut bytes reparse to more than one.
|
|
172
|
+
return [
|
|
173
|
+
{ op: 'insert', at: itemIndex + 1, count: 1 },
|
|
174
|
+
replacePreservingFirst(innerIndex, preSpliceLen - innerIndex, landing - innerIndex)
|
|
175
|
+
];
|
|
176
|
+
},
|
|
177
|
+
op: {
|
|
178
|
+
kind: 'split',
|
|
179
|
+
detail: { at: offset, itemIndex, innerIndex },
|
|
180
|
+
eventPath: docPathFrom(deps.scope.path)
|
|
181
|
+
},
|
|
182
|
+
afterTick: () => {
|
|
183
|
+
deps.state.innerBlockRefs[itemIndex + 1]?.focus(CURSOR_EXACT_START);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
},
|
|
187
|
+
async promoteNestedItem(parentItemIdx, nestedListNode, nestedItemIdx) {
|
|
188
|
+
const node = deps.scope.node;
|
|
189
|
+
if (!node.children || !nestedListNode.children)
|
|
190
|
+
return;
|
|
191
|
+
const parentItem = node.children[parentItemIdx];
|
|
192
|
+
if (!parentItem?.children)
|
|
193
|
+
return;
|
|
194
|
+
const nestedIdxInParent = parentItem.children.indexOf(nestedListNode);
|
|
195
|
+
if (nestedIdxInParent === -1)
|
|
196
|
+
return;
|
|
197
|
+
// Removing the last item empties the nested list, which needs a third scope
|
|
198
|
+
// to splice the now-empty list out of parentItem's children.
|
|
199
|
+
const nestedListWillEmpty = nestedListNode.children.length === 1;
|
|
200
|
+
const scopes = [
|
|
201
|
+
{ node, state: deps.state, path: deps.scope.path },
|
|
202
|
+
{
|
|
203
|
+
node: nestedListNode,
|
|
204
|
+
state: expectStateForNode(nestedListNode),
|
|
205
|
+
path: [...deps.scope.path, parentItemIdx, nestedIdxInParent]
|
|
206
|
+
}
|
|
207
|
+
];
|
|
208
|
+
let parentItemScopeIdx = -1;
|
|
209
|
+
if (nestedListWillEmpty) {
|
|
210
|
+
parentItemScopeIdx = scopes.length;
|
|
211
|
+
scopes.push({
|
|
212
|
+
node: parentItem,
|
|
213
|
+
state: expectStateForNode(parentItem),
|
|
214
|
+
path: [...deps.scope.path, parentItemIdx]
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
await deps.controller.commitMultiScope({
|
|
218
|
+
scopes,
|
|
219
|
+
// The promoted item's pre-move path (its nested-list slot).
|
|
220
|
+
snapshot: {
|
|
221
|
+
path: docPathFrom([...deps.scope.path, parentItemIdx, nestedIdxInParent, nestedItemIdx]),
|
|
222
|
+
offset: 0
|
|
223
|
+
},
|
|
224
|
+
mutate: (scopeViews) => {
|
|
225
|
+
const outerScope = scopeViews[0];
|
|
226
|
+
const nestedScope = scopeViews[1];
|
|
227
|
+
const sharing = outerScope.sharing;
|
|
228
|
+
// The promoted item is moved AND written (marker normalization,
|
|
229
|
+
// renumber), so own it before it leaves the nested list.
|
|
230
|
+
const item = ensureUnsharedChild(nestedScope.node, nestedItemIdx, sharing);
|
|
231
|
+
nestedScope.children.splice(nestedItemIdx, 1);
|
|
232
|
+
const changes = new Array(scopes.length);
|
|
233
|
+
changes[1] = { op: 'delete', at: nestedItemIdx, count: 1 };
|
|
234
|
+
if (nestedListWillEmpty && parentItemScopeIdx !== -1) {
|
|
235
|
+
const parentItemChildren = scopeViews[parentItemScopeIdx].children;
|
|
236
|
+
const nestedIdx = parentItemChildren.indexOf(nestedScope.node);
|
|
237
|
+
if (nestedIdx !== -1) {
|
|
238
|
+
parentItemChildren.splice(nestedIdx, 1);
|
|
239
|
+
changes[parentItemScopeIdx] = { op: 'delete', at: nestedIdx, count: 1 };
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
changes[parentItemScopeIdx] = { op: 'noop' };
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (!nestedListWillEmpty) {
|
|
246
|
+
renumberOrderedList(nestedScope.node, 0, sharing);
|
|
247
|
+
}
|
|
248
|
+
normalizeItemMarkerToList(item, outerScope.node);
|
|
249
|
+
outerScope.children.splice(parentItemIdx + 1, 0, item);
|
|
250
|
+
changes[0] = { op: 'insert', at: parentItemIdx + 1, count: 1 };
|
|
251
|
+
renumberOrderedList(outerScope.node, parentItemIdx + 1, sharing);
|
|
252
|
+
return changes;
|
|
253
|
+
},
|
|
254
|
+
op: {
|
|
255
|
+
kind: 'replaceBlock',
|
|
256
|
+
detail: { action: 'promoteNestedItem', parentItemIdx, nestedItemIdx },
|
|
257
|
+
eventPath: docPathFrom(deps.scope.path)
|
|
258
|
+
},
|
|
259
|
+
afterTick: () => {
|
|
260
|
+
deps.state.innerBlockRefs[parentItemIdx + 1]?.focus(CURSOR_START);
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
},
|
|
264
|
+
getContainingItemIndex() {
|
|
265
|
+
// Top-level list — only nested lists return a meaningful value here.
|
|
266
|
+
return -1;
|
|
267
|
+
},
|
|
268
|
+
async exitListAtItem(itemIndex) {
|
|
269
|
+
const node = deps.scope.node;
|
|
270
|
+
if (!node.children)
|
|
271
|
+
return;
|
|
272
|
+
// Nested list: one Enter outdents one level (Shift+Tab semantics). Only the
|
|
273
|
+
// outermost list escapes straight to a paragraph.
|
|
274
|
+
if (deps.parentListContext) {
|
|
275
|
+
await deps.parentListContext.promoteNestedItem(deps.parentListContext.getContainingItemIndex(), node, itemIndex);
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
const replacement = buildExitReplacement(node, itemIndex);
|
|
279
|
+
await deps.parentBlockEdit.replaceBlock(deps.scope.index, replacement.blocks, {
|
|
280
|
+
replacementIndex: replacement.paragraphIndex,
|
|
281
|
+
offset: 0
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Override factory for ListBlock: item-level no-ops and last-item forward-merge
|
|
3
|
+
* delegation. Item delete and replace fall through to the shared block-edit core.
|
|
4
|
+
* Backspace unwrap (U1/M1) is declaration-driven — the list's `unwrapRole` selects
|
|
5
|
+
* strategies in `unwrap-strategies.ts`.
|
|
6
|
+
*/
|
|
7
|
+
import type { BlockEditActions } from '../action-contracts';
|
|
8
|
+
import type { NestedActionsOverrideFactory, NodeScope } from './nested/nested-actions';
|
|
9
|
+
export interface ListOverridesDeps {
|
|
10
|
+
scope: NodeScope;
|
|
11
|
+
parentBlockEdit: BlockEditActions;
|
|
12
|
+
}
|
|
13
|
+
export declare function createListOverrides(deps: ListOverridesDeps): NestedActionsOverrideFactory;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Override factory for ListBlock: item-level no-ops and last-item forward-merge
|
|
3
|
+
* delegation. Item delete and replace fall through to the shared block-edit core.
|
|
4
|
+
* Backspace unwrap (U1/M1) is declaration-driven — the list's `unwrapRole` selects
|
|
5
|
+
* strategies in `unwrap-strategies.ts`.
|
|
6
|
+
*/
|
|
7
|
+
export function createListOverrides(deps) {
|
|
8
|
+
return () => ({
|
|
9
|
+
blockEdit: {
|
|
10
|
+
// Items split through the ITEM's own bundle; nothing calls the list's, and the shared
|
|
11
|
+
// core would run a prose split on a `listItem` if anything ever did.
|
|
12
|
+
splitBlock: async () => { },
|
|
13
|
+
updateBlockContent: () => { },
|
|
14
|
+
// Items are structural peers, not text-mergeable. Only the LAST item delegates
|
|
15
|
+
// upward, so the following block merges into this list's deepest leaf.
|
|
16
|
+
mergeWithNext: async (itemIndex) => {
|
|
17
|
+
const node = deps.scope.node;
|
|
18
|
+
if (!node.children)
|
|
19
|
+
return;
|
|
20
|
+
if (itemIndex >= node.children.length - 1) {
|
|
21
|
+
await deps.parentBlockEdit.mergeWithNext(deps.scope.index);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single owner of the interior-merge fallbacks, both directions: the cross-sibling merge
|
|
3
|
+
* (`block-edit-core`), the within-list M1 merge (`unwrap-strategies.listItemCascadeMiddle`).
|
|
4
|
+
* A merge that does not happen still moves the caret across the boundary the user pressed at.
|
|
5
|
+
*/
|
|
6
|
+
import { type BlockComponent } from '../block-component';
|
|
7
|
+
import type { StructuralChange } from '../tree-operations/structural-change';
|
|
8
|
+
/**
|
|
9
|
+
* A null result means the previous block exposed no reachable text leaf, or the join was
|
|
10
|
+
* refused, so nothing merged: land the caret at its end instead. The nullable input makes
|
|
11
|
+
* ignoring the no-merge case a compile error.
|
|
12
|
+
*/
|
|
13
|
+
export declare function mergedElseFocusPrevious<T>(result: T | null, previous: BlockComponent | undefined): T | null;
|
|
14
|
+
/**
|
|
15
|
+
* The forward twin, over the door's own change: `noop` means the join was refused (its bytes
|
|
16
|
+
* read as several blocks, and one slot installs one node), so the caret crosses into the block
|
|
17
|
+
* that stayed. Returns whether the merge happened, so the caller's landing asks the same question.
|
|
18
|
+
*/
|
|
19
|
+
export declare function mergedElseFocusNext(change: StructuralChange, next: BlockComponent | undefined): boolean;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single owner of the interior-merge fallbacks, both directions: the cross-sibling merge
|
|
3
|
+
* (`block-edit-core`), the within-list M1 merge (`unwrap-strategies.listItemCascadeMiddle`).
|
|
4
|
+
* A merge that does not happen still moves the caret across the boundary the user pressed at.
|
|
5
|
+
*/
|
|
6
|
+
import { CURSOR_END, CURSOR_START } from '../block-component';
|
|
7
|
+
/**
|
|
8
|
+
* A null result means the previous block exposed no reachable text leaf, or the join was
|
|
9
|
+
* refused, so nothing merged: land the caret at its end instead. The nullable input makes
|
|
10
|
+
* ignoring the no-merge case a compile error.
|
|
11
|
+
*/
|
|
12
|
+
export function mergedElseFocusPrevious(result, previous) {
|
|
13
|
+
if (result === null)
|
|
14
|
+
previous?.focus(CURSOR_END);
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The forward twin, over the door's own change: `noop` means the join was refused (its bytes
|
|
19
|
+
* read as several blocks, and one slot installs one node), so the caret crosses into the block
|
|
20
|
+
* that stayed. Returns whether the merge happened, so the caller's landing asks the same question.
|
|
21
|
+
*/
|
|
22
|
+
export function mergedElseFocusNext(change, next) {
|
|
23
|
+
if (change.op !== 'noop')
|
|
24
|
+
return true;
|
|
25
|
+
next?.focus(CURSOR_START);
|
|
26
|
+
return false;
|
|
27
|
+
}
|