@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,228 @@
|
|
|
1
|
+
/** Shared `BlockComponent` shim for container blocks. */
|
|
2
|
+
import { CURSOR_END, CURSOR_EXACT_START, CURSOR_START, FOCUS_LAST_START } from '../block-component';
|
|
3
|
+
import { dispatchFocusByPath, dispatchFocusAtColumn, dispatchGetBlockComponentByPath } from './focus/focus-dispatch';
|
|
4
|
+
import { revealChildOrWait } from '../reactivity/publish-ref.svelte';
|
|
5
|
+
import { runGlobalChordOnKind } from '../schema/commands';
|
|
6
|
+
import { isCharacterKey } from '../schema/keybindings';
|
|
7
|
+
import { displayLength, trimTrailingLineEnding } from '../core/lines';
|
|
8
|
+
import { isVerticallyTransparentNode } from '../core/inline/transparency';
|
|
9
|
+
import { placeCaret } from '../selection/caret-doors';
|
|
10
|
+
import { focusWholeBlockEl, holdsWholeBlockFocus } from './whole-block-focus-surface';
|
|
11
|
+
import { devWarn } from '../dev-warn';
|
|
12
|
+
/**
|
|
13
|
+
* Undo/redo for a block that IS its own focus target: no inner leaf carries the global tier for
|
|
14
|
+
* it, and the editor root declines while focus sits on the block. `true` means consumed —
|
|
15
|
+
* including in reading mode, since bypassing `dispatchKeyCommand` would otherwise hand a read-only
|
|
16
|
+
* document the browser's native undo.
|
|
17
|
+
*/
|
|
18
|
+
export function handleEditorGlobalChord(chord, deps) {
|
|
19
|
+
return runGlobalChordOnKind(chord, deps.getKind(), deps.getKeybindingOverrides(), {
|
|
20
|
+
isReading: deps.isReading(),
|
|
21
|
+
history: deps.history,
|
|
22
|
+
pluginEditor: deps.pluginEditor,
|
|
23
|
+
onCommandError: deps.onCommandError,
|
|
24
|
+
activation: deps.activation
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The four plain-arrow exits out of a block, in the direction the key points. Shared by
|
|
29
|
+
* whole-block focus and the plugin container's `moveFocusOut`, so a surface that reaches its
|
|
30
|
+
* own edge lands the same way the built-ins do. False for any other key.
|
|
31
|
+
*/
|
|
32
|
+
export function focusAcrossBlockEdge(key, deps) {
|
|
33
|
+
const index = deps.getIndex();
|
|
34
|
+
if (key === 'ArrowUp')
|
|
35
|
+
void deps.focus.moveFocus(index - 1, { stickyColumnFrom: 'below' });
|
|
36
|
+
else if (key === 'ArrowLeft')
|
|
37
|
+
void deps.focus.moveFocus(index - 1, 'end');
|
|
38
|
+
else if (key === 'ArrowDown')
|
|
39
|
+
void deps.focus.moveFocus(index + 1, { stickyColumnFrom: 'above' });
|
|
40
|
+
else if (key === 'ArrowRight')
|
|
41
|
+
void deps.focus.moveFocus(index + 1, 'start');
|
|
42
|
+
else
|
|
43
|
+
return false;
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The whole-block-focus key tail shared by ThematicBreakBlock and the plugin container
|
|
48
|
+
* factory, so a new gate lands once instead of at both. Navigation never gates.
|
|
49
|
+
*/
|
|
50
|
+
export function handleWholeBlockKeys(e, deps) {
|
|
51
|
+
// The classification doors, before any branch: skipping them let a column captured
|
|
52
|
+
// outside survive a horizontal traversal through, and the arrival side the exit lands
|
|
53
|
+
// with is the same one an arrow means anywhere. No `measureX` — no caret here.
|
|
54
|
+
deps.stickyColumn.noteKey(e);
|
|
55
|
+
deps.edgeAffinity.note(e);
|
|
56
|
+
if (e.key === 'Enter') {
|
|
57
|
+
e.preventDefault();
|
|
58
|
+
if (!deps.isReading())
|
|
59
|
+
void deps.blockEdit.splitBlock(deps.getIndex(), displayLength(deps.getRaw()));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (e.key === 'Backspace' || e.key === 'Delete') {
|
|
63
|
+
e.preventDefault();
|
|
64
|
+
if (!deps.isReading())
|
|
65
|
+
void deps.blockEdit.deleteBlock(deps.getIndex());
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Mod+C / Mod+X on the block's own markdown: a keydown carries no ClipboardEvent,
|
|
69
|
+
// and preventDefault suppresses the native copy, so writeText is the sole writer.
|
|
70
|
+
if ((e.ctrlKey || e.metaKey) && !e.altKey && !e.shiftKey && (e.key === 'c' || e.key === 'x')) {
|
|
71
|
+
e.preventDefault();
|
|
72
|
+
void copyFocusedWholeBlock(deps, e.key === 'x');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
// A typed character has nowhere to land on a block that IS its own focus target, so it mints
|
|
76
|
+
// the paragraph below carrying it (`editor-actions/block-edit-core.ts :: insertParagraph`).
|
|
77
|
+
if (isCharacterKey(e.key) && !e.isComposing && !e.ctrlKey && !e.metaKey && !e.altKey) {
|
|
78
|
+
e.preventDefault();
|
|
79
|
+
if (!deps.isReading())
|
|
80
|
+
void deps.blockEdit.insertParagraph(deps.getIndex() + 1, e.key);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const plainArrow = !e.altKey && !e.ctrlKey && !e.metaKey;
|
|
84
|
+
if (plainArrow && focusAcrossBlockEdge(e.key, deps))
|
|
85
|
+
e.preventDefault();
|
|
86
|
+
}
|
|
87
|
+
// Copy is a read, so it never gates; cut's delete gates on reading mode and only runs
|
|
88
|
+
// once the write resolves, so a rejected write leaves the block in place.
|
|
89
|
+
async function copyFocusedWholeBlock(deps, cut) {
|
|
90
|
+
try {
|
|
91
|
+
await navigator.clipboard.writeText(trimTrailingLineEnding(deps.getRaw()));
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
devWarn('container-block', 'whole-block clipboard write rejected', err);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (cut && !deps.isReading())
|
|
98
|
+
void deps.blockEdit.deleteBlock(deps.getIndex());
|
|
99
|
+
}
|
|
100
|
+
export function createContainerBlockComponent(deps) {
|
|
101
|
+
const landFocus = (declared) => deps.inputProxy ? deps.inputProxy.focus(declared) : focusWholeBlockEl(declared);
|
|
102
|
+
/**
|
|
103
|
+
* `focus` lands in a child that never forwarded the park door; `parkCaret` skips it,
|
|
104
|
+
* because for an extend a missed park costs a caret and `focus` costs the range.
|
|
105
|
+
*/
|
|
106
|
+
function walkInto(offset, land) {
|
|
107
|
+
// Whole-block focus: any caret entry lands on the block itself, so the element
|
|
108
|
+
// offset carries no meaning.
|
|
109
|
+
const focusEl = deps.getFocusEl?.();
|
|
110
|
+
if (focusEl) {
|
|
111
|
+
landFocus(focusEl);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (deps.nodeChildrenLength === 0)
|
|
115
|
+
return;
|
|
116
|
+
// Collapsed: only the chrome row is mounted, so a walk-in from below clamps to
|
|
117
|
+
// it rather than no-oping on the unmounted last child.
|
|
118
|
+
const last = deps.isCollapsed?.() ? 0 : deps.nodeChildrenLength - 1;
|
|
119
|
+
const entersFirst = offset === 0 || offset === CURSOR_START || offset === CURSOR_EXACT_START;
|
|
120
|
+
const child = entersFirst ? deps.innerBlockRefs[0] : deps.innerBlockRefs[last];
|
|
121
|
+
if (!child)
|
|
122
|
+
return;
|
|
123
|
+
if (offset === FOCUS_LAST_START)
|
|
124
|
+
land(child, FOCUS_LAST_START);
|
|
125
|
+
else if (entersFirst)
|
|
126
|
+
land(child, offset);
|
|
127
|
+
else
|
|
128
|
+
land(child, CURSOR_END);
|
|
129
|
+
}
|
|
130
|
+
function parkCaret(offset) {
|
|
131
|
+
walkInto(offset, (child, at) => child.parkCaret?.(at));
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
get editable() {
|
|
135
|
+
return deps.editable ?? true;
|
|
136
|
+
},
|
|
137
|
+
focusable: true,
|
|
138
|
+
focus: placeCaret(deps.selection, (offset) => walkInto(offset, (child, at) => child.focus(at))),
|
|
139
|
+
parkCaret,
|
|
140
|
+
getCursorOffset() {
|
|
141
|
+
const focusEl = deps.getFocusEl?.();
|
|
142
|
+
if (focusEl)
|
|
143
|
+
return holdsWholeBlockFocus(focusEl, deps.inputProxy?.el()) ? 0 : null;
|
|
144
|
+
for (const ref of deps.innerBlockRefs) {
|
|
145
|
+
const offset = ref?.getCursorOffset();
|
|
146
|
+
if (offset !== null && offset !== undefined)
|
|
147
|
+
return offset;
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
},
|
|
151
|
+
getCursorPosition() {
|
|
152
|
+
for (let i = 0; i < deps.innerBlockRefs.length; i++) {
|
|
153
|
+
const ref = deps.innerBlockRefs[i];
|
|
154
|
+
if (!ref)
|
|
155
|
+
continue;
|
|
156
|
+
const subPos = ref.getCursorPosition?.();
|
|
157
|
+
if (subPos)
|
|
158
|
+
return { path: [i, ...subPos.path], offset: subPos.offset };
|
|
159
|
+
const offset = ref.getCursorOffset();
|
|
160
|
+
if (offset !== null && offset !== undefined)
|
|
161
|
+
return { path: [i], offset };
|
|
162
|
+
}
|
|
163
|
+
return null;
|
|
164
|
+
},
|
|
165
|
+
focusByPath(path, offset) {
|
|
166
|
+
dispatchFocusByPath(deps.innerBlockRefs, path, offset);
|
|
167
|
+
},
|
|
168
|
+
getBlockComponentByPath(path) {
|
|
169
|
+
return dispatchGetBlockComponentByPath(deps.innerBlockRefs, path);
|
|
170
|
+
},
|
|
171
|
+
async revealByPath(path) {
|
|
172
|
+
if (path.length === 0)
|
|
173
|
+
return null;
|
|
174
|
+
const [head, ...rest] = path;
|
|
175
|
+
// Only a body target needs the door opened; the chrome row stays mounted.
|
|
176
|
+
// Awaited because everything below must run against the post-commit window.
|
|
177
|
+
if (head >= 1 && deps.isCollapsed?.())
|
|
178
|
+
await deps.expandCollapsed?.();
|
|
179
|
+
if (deps.revealChild) {
|
|
180
|
+
await revealChildOrWait(head, {
|
|
181
|
+
slots: deps.refSlots,
|
|
182
|
+
childCount: deps.nodeChildrenLength,
|
|
183
|
+
revealChild: deps.revealChild,
|
|
184
|
+
isInWindow: deps.isInWindow
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
const ref = deps.innerBlockRefs[head];
|
|
188
|
+
if (!ref)
|
|
189
|
+
return null;
|
|
190
|
+
if (rest.length === 0)
|
|
191
|
+
return ref;
|
|
192
|
+
return ref.revealByPath
|
|
193
|
+
? ref.revealByPath(rest)
|
|
194
|
+
: (ref.getBlockComponentByPath?.(rest) ?? null);
|
|
195
|
+
},
|
|
196
|
+
focusAtColumn(x, from) {
|
|
197
|
+
// Whole-block focus has no column to land in, so a vertical entry focuses the
|
|
198
|
+
// block itself, mirroring the plain-arrow path.
|
|
199
|
+
const focusEl = deps.getFocusEl?.();
|
|
200
|
+
if (focusEl) {
|
|
201
|
+
landFocus(focusEl);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (deps.nodeChildrenLength === 0)
|
|
205
|
+
return;
|
|
206
|
+
dispatchFocusAtColumn(deps.innerBlockRefs, x, from);
|
|
207
|
+
},
|
|
208
|
+
isVerticallyTransparent() {
|
|
209
|
+
return isVerticallyTransparentNode(deps.node);
|
|
210
|
+
},
|
|
211
|
+
enterEdgeWidget(side) {
|
|
212
|
+
if (deps.nodeChildrenLength === 0)
|
|
213
|
+
return false;
|
|
214
|
+
const edge = side === 'start' ? 0 : deps.nodeChildrenLength - 1;
|
|
215
|
+
return deps.innerBlockRefs[edge]?.enterEdgeWidget?.(side) ?? false;
|
|
216
|
+
},
|
|
217
|
+
measurePartialRects(start, end) {
|
|
218
|
+
// Opaque single-unit: a childless container paints the whole box. A
|
|
219
|
+
// child-bearing one returns nothing — the overlay routes to its children.
|
|
220
|
+
if (deps.nodeChildrenLength > 0)
|
|
221
|
+
return [];
|
|
222
|
+
const box = deps.getBoxEl?.();
|
|
223
|
+
if (!box || end <= start)
|
|
224
|
+
return [];
|
|
225
|
+
return [box.getBoundingClientRect()];
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ContainerEditActions factory: the debounced checkpoint pusher for raw typing
|
|
3
|
+
* outside the commit primitive, the doc-root reactivity nudge, and `commitContainer`.
|
|
4
|
+
*/
|
|
5
|
+
import type { ContainerEditActions } from '../action-contracts';
|
|
6
|
+
import type { EditorActionsDeps, UndoController } from './deps';
|
|
7
|
+
export declare function createContainerEditActions(deps: EditorActionsDeps, controller: UndoController): ContainerEditActions;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ContainerEditActions factory: the debounced checkpoint pusher for raw typing
|
|
3
|
+
* outside the commit primitive, the doc-root reactivity nudge, and `commitContainer`.
|
|
4
|
+
*/
|
|
5
|
+
import { ensureUnsharedPath, rebuildUnsharedChain } from '../tree-operations/unshare';
|
|
6
|
+
import { publishAncestryFolds, publishScopeFold } from './ancestry-folds';
|
|
7
|
+
export function createContainerEditActions(deps, controller) {
|
|
8
|
+
return {
|
|
9
|
+
pushDebouncedCheckpoint(leafPath, offset, batchKey) {
|
|
10
|
+
deps.stickyColumn.reset();
|
|
11
|
+
deps.edgeAffinity.reset();
|
|
12
|
+
controller.pushUndoSnapshotDebounced(leafPath, offset, batchKey);
|
|
13
|
+
},
|
|
14
|
+
armDebouncedPause() {
|
|
15
|
+
controller.armUndoPause();
|
|
16
|
+
},
|
|
17
|
+
nudgeReactivity() {
|
|
18
|
+
// Raw mutations made outside the commit primitive surface through this nudge,
|
|
19
|
+
// so Svelte re-reads doc.children.
|
|
20
|
+
deps.doc.children = [...deps.doc.children];
|
|
21
|
+
},
|
|
22
|
+
withUnsharedSpine(absPath, write) {
|
|
23
|
+
const chain = ensureUnsharedPath(deps.doc, absPath, deps.sharing);
|
|
24
|
+
// Read before the write: it is the one byte-state no level of the rebuild can capture
|
|
25
|
+
// for itself, and the ancestry splice needs it to place the leaf's own region.
|
|
26
|
+
const leafPreviousRaw = chain[chain.length - 1]?.raw;
|
|
27
|
+
const written = write(chain, deps.sharing) ?? { op: 'noop' };
|
|
28
|
+
// Unconditional: this door exists to carry bytes, and a short chain or a `noop`
|
|
29
|
+
// settle says nothing about whether `write` moved any.
|
|
30
|
+
deps.bumpContentVersion();
|
|
31
|
+
// The write's own settle can splice the scope it wrote in, and a short chain means the
|
|
32
|
+
// unshare never reached that scope, so there is nothing to publish against.
|
|
33
|
+
if (chain.length === absPath.length) {
|
|
34
|
+
publishScopeFold(deps, chain[absPath.length - 2], written);
|
|
35
|
+
}
|
|
36
|
+
// The ANCESTRY settle's folds — a container's own slot in its PARENT, not the write's
|
|
37
|
+
// scope published above. Their unwind is discarded on purpose: nothing rolls back at a
|
|
38
|
+
// door that is not a ceremony. Their caret landing (`foldLandingFor`) wants a tick this
|
|
39
|
+
// synchronous door has not got, and no producer reaches one.
|
|
40
|
+
const folds = [];
|
|
41
|
+
const replacements = rebuildUnsharedChain(deps.doc, chain, deps.sharing, folds, deps.grammar, leafPreviousRaw === undefined ? undefined : { path: absPath, leafPreviousRaw });
|
|
42
|
+
publishAncestryFolds(deps, folds);
|
|
43
|
+
return replacements.length > 0;
|
|
44
|
+
},
|
|
45
|
+
commitContainer(args) {
|
|
46
|
+
return controller.commitContainerStructural(args);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Override factory every plugin-seam container shares: the Enter-on-empty-last-child exit.
|
|
3
|
+
* Backspace unwrap (U2) is declaration-driven — the kind's `unwrapRole` selects strategies
|
|
4
|
+
* in `unwrap-strategies.ts`.
|
|
5
|
+
*/
|
|
6
|
+
import type { BlockEditActions } from '../action-contracts';
|
|
7
|
+
import type { NestedActionsBundle, NodeScope } from './nested/nested-actions';
|
|
8
|
+
export interface ContainerExitOverridesDeps {
|
|
9
|
+
scope: NodeScope;
|
|
10
|
+
parentBlockEdit: BlockEditActions;
|
|
11
|
+
}
|
|
12
|
+
export declare function createContainerExitOverrides(deps: ContainerExitOverridesDeps): (defaults: NestedActionsBundle) => {
|
|
13
|
+
blockEdit: {
|
|
14
|
+
splitBlock: (innerIndex: number, offset: number) => Promise<void>;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Override factory every plugin-seam container shares: the Enter-on-empty-last-child exit.
|
|
3
|
+
* Backspace unwrap (U2) is declaration-driven — the kind's `unwrapRole` selects strategies
|
|
4
|
+
* in `unwrap-strategies.ts`.
|
|
5
|
+
*/
|
|
6
|
+
import { displayLength } from '../core/lines';
|
|
7
|
+
import { buildQuoteExitReplacement } from '../tree-operations/blockquote';
|
|
8
|
+
export function createContainerExitOverrides(deps) {
|
|
9
|
+
return (defaults) => ({
|
|
10
|
+
blockEdit: {
|
|
11
|
+
// Enter on an empty trailing paragraph exits the container instead of appending another
|
|
12
|
+
// inner line, and MINTS the blank it lands on: Enter is never down-nav, so a block
|
|
13
|
+
// below is left alone and a nested container is escaped one level per press.
|
|
14
|
+
splitBlock: async (innerIndex, offset) => {
|
|
15
|
+
const { parentBlockEdit } = deps;
|
|
16
|
+
const { node, index } = deps.scope;
|
|
17
|
+
if (!node.children)
|
|
18
|
+
return;
|
|
19
|
+
const child = node.children[innerIndex];
|
|
20
|
+
const isLastChild = innerIndex === node.children.length - 1;
|
|
21
|
+
const isEmpty = child.kind === 'paragraph' && child.raw.trim() === '';
|
|
22
|
+
if (isLastChild && isEmpty) {
|
|
23
|
+
if (node.children.length <= 1) {
|
|
24
|
+
await parentBlockEdit.splitBlock(index, displayLength(node.raw));
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
await parentBlockEdit.replaceBlock(index, buildQuoteExitReplacement(node), {
|
|
28
|
+
replacementIndex: 1,
|
|
29
|
+
offset: 0
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
return defaults.blockEdit.splitBlock(innerIndex, offset);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { BlockComponent } from '../block-component';
|
|
2
|
+
import type { Document } from '../core/nodes';
|
|
3
|
+
import type { StickyColumnState } from '../cursor/sticky-column';
|
|
4
|
+
import type { EdgeAffinityState } from '../cursor/edge-affinity';
|
|
5
|
+
import type { BlockElLookup, PresentationModeGetter } from '../editor-keys';
|
|
6
|
+
import type { SelectionState } from '../selection/selection-state.svelte';
|
|
7
|
+
import type { UndoEntry, UndoManager } from '../undo/types';
|
|
8
|
+
import type { SharingState } from '../tree-operations/sharing';
|
|
9
|
+
import type { EditorEvents } from '../editor-events';
|
|
10
|
+
import type { CommitController } from '../action-contracts';
|
|
11
|
+
import type { GrammarView } from '../schema/block-openers';
|
|
12
|
+
import type { InlineResolverRef } from '../schema/inline-construct-policy';
|
|
13
|
+
import type { RefSlots } from '../reactivity/publish-ref.svelte';
|
|
14
|
+
export interface EditorActionsDeps {
|
|
15
|
+
get doc(): Document;
|
|
16
|
+
get blockIds(): string[];
|
|
17
|
+
get blockRefs(): (BlockComponent | undefined)[];
|
|
18
|
+
/** The top-level scope's slot identity, so the doc-scope adapter reports the same
|
|
19
|
+
* scope the editor's own BlockList publishes into. */
|
|
20
|
+
blockRefSlots: RefSlots<BlockComponent>;
|
|
21
|
+
setDoc(doc: Document): void;
|
|
22
|
+
setBlockIds(ids: string[]): void;
|
|
23
|
+
setBlockRefs(refs: (BlockComponent | undefined)[]): void;
|
|
24
|
+
/** Announce that this door moved the document's bytes
|
|
25
|
+
* (`reactivity/content-version.svelte.ts`). The ceremony owes one call per commit; the
|
|
26
|
+
* writers outside it owe their own, which is the census G4.52 keeps honest. */
|
|
27
|
+
bumpContentVersion(): void;
|
|
28
|
+
undoManager: UndoManager;
|
|
29
|
+
sharing: SharingState;
|
|
30
|
+
stickyColumn: StickyColumnState;
|
|
31
|
+
edgeAffinity: EdgeAffinityState;
|
|
32
|
+
selectionState: SelectionState;
|
|
33
|
+
getBlockElByPath: BlockElLookup;
|
|
34
|
+
/** Scroll an off-window top-level block into the render window and await its
|
|
35
|
+
* mount, then return its component (null if unreachable). Already-mounted
|
|
36
|
+
* targets return synchronously without scrolling. */
|
|
37
|
+
revealPath(path: number[]): Promise<BlockComponent | null>;
|
|
38
|
+
events: EditorEvents;
|
|
39
|
+
/** The instance's block grammar, so a disabled kind's opener stays skipped when
|
|
40
|
+
* the editor re-parses an edited block. Absent = the global grammar. */
|
|
41
|
+
grammar?: GrammarView;
|
|
42
|
+
/** Live EFFECTIVE mode, for the seams that must not act in reading mode. Absent in
|
|
43
|
+
* harnesses, which `isReadingMode` reads as not-reading. */
|
|
44
|
+
getPresentationMode?: PresentationModeGetter;
|
|
45
|
+
/** The instance's link-reference resolver, for the byte rewrites that must parse the reference
|
|
46
|
+
* forms the render path drew. Absent in harnesses, which have no definitions to resolve. */
|
|
47
|
+
linkRef?: InlineResolverRef;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The history-typed members added to the contracts-leaf `CommitController`. They stay here so
|
|
51
|
+
* that leaf keeps no edge to `undo/`.
|
|
52
|
+
*/
|
|
53
|
+
export interface UndoController extends CommitController {
|
|
54
|
+
captureCurrentState(): UndoEntry;
|
|
55
|
+
/** Monotonic stamp of the last history swap. A caret landing captures it before its
|
|
56
|
+
* reveal and declines when it moved: the tree it was aimed at is no longer on screen. */
|
|
57
|
+
historyGeneration(): number;
|
|
58
|
+
/** Announce a swap. The restore road's own call — nothing else may bump it. */
|
|
59
|
+
noteHistorySwap(): void;
|
|
60
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Enter-completion seam: a lone typed line a registered completer claims becomes the
|
|
3
|
+
* structure it opens instead of splitting. `planEnterCompletion` is pure; `withEnterCompletion`
|
|
4
|
+
* is the one place the plan is spent, wrapped around a composed `splitBlock`.
|
|
5
|
+
*/
|
|
6
|
+
import type { BlockEditActions } from '../action-contracts';
|
|
7
|
+
import type { CstNode } from '../core/nodes';
|
|
8
|
+
import type { NodeView } from '../core/node-views';
|
|
9
|
+
export interface EnterCompletion {
|
|
10
|
+
replacement: CstNode[];
|
|
11
|
+
caret: {
|
|
12
|
+
path: number[];
|
|
13
|
+
offset: number;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Wraps a COMPOSED `splitBlock` with the consult, at the two bundle composition sites only. Above
|
|
18
|
+
* the container overrides rather than inside the split body, so a container that replaces
|
|
19
|
+
* `splitBlock` cannot take the completion arm out of its subtree. One press consults once per
|
|
20
|
+
* NODE: the blockquote exit's hop to the parent scope is a second consult, on a different node,
|
|
21
|
+
* and an always-declining one — a container is never a prose line.
|
|
22
|
+
*/
|
|
23
|
+
export declare function withEnterCompletion(blockEdit: BlockEditActions, childAt: (index: number) => NodeView | undefined): BlockEditActions;
|
|
24
|
+
/** The completion a press at `offset` earns, or null when the block or the caret disqualifies it. */
|
|
25
|
+
export declare function planEnterCompletion(node: NodeView | undefined, offset: number): EnterCompletion | null;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Enter-completion seam: a lone typed line a registered completer claims becomes the
|
|
3
|
+
* structure it opens instead of splitting. `planEnterCompletion` is pure; `withEnterCompletion`
|
|
4
|
+
* is the one place the plan is spent, wrapped around a composed `splitBlock`.
|
|
5
|
+
*/
|
|
6
|
+
import { parse } from '../core/parser';
|
|
7
|
+
import { displayLength, splitLines, trailingLineEnding } from '../core/lines';
|
|
8
|
+
import { getBlockKindDescriptor } from '../schema/block-kind-descriptor';
|
|
9
|
+
import { completeTypedLine } from '../schema/block-completions';
|
|
10
|
+
/**
|
|
11
|
+
* Wraps a COMPOSED `splitBlock` with the consult, at the two bundle composition sites only. Above
|
|
12
|
+
* the container overrides rather than inside the split body, so a container that replaces
|
|
13
|
+
* `splitBlock` cannot take the completion arm out of its subtree. One press consults once per
|
|
14
|
+
* NODE: the blockquote exit's hop to the parent scope is a second consult, on a different node,
|
|
15
|
+
* and an always-declining one — a container is never a prose line.
|
|
16
|
+
*/
|
|
17
|
+
export function withEnterCompletion(blockEdit, childAt) {
|
|
18
|
+
return {
|
|
19
|
+
...blockEdit,
|
|
20
|
+
async splitBlock(index, offset) {
|
|
21
|
+
const completion = planEnterCompletion(childAt(index), offset);
|
|
22
|
+
if (!completion) {
|
|
23
|
+
await blockEdit.splitBlock(index, offset);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
// `snapshotOffset` is where the caret WAS, so one undo restores the typed line with the
|
|
27
|
+
// caret at its end rather than in front of it.
|
|
28
|
+
await blockEdit.replaceBlock(index, completion.replacement, { replacementIndex: 0, ...completion.caret }, { snapshotOffset: offset });
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/** The completion a press at `offset` earns, or null when the block or the caret disqualifies it. */
|
|
33
|
+
export function planEnterCompletion(node, offset) {
|
|
34
|
+
if (!node)
|
|
35
|
+
return null;
|
|
36
|
+
const line = wholeTypedLine(node);
|
|
37
|
+
if (line === null || offset !== displayLength(node.raw))
|
|
38
|
+
return null;
|
|
39
|
+
const claim = completeTypedLine(line);
|
|
40
|
+
if (!claim)
|
|
41
|
+
return null;
|
|
42
|
+
// Through the parser rather than a hand-built node, so the mint is exactly what a reload of
|
|
43
|
+
// those bytes produces. Global grammar, as every other structural reparse.
|
|
44
|
+
const lineEnding = trailingLineEnding(node.raw);
|
|
45
|
+
const raw = claim.lines.map((text) => text + lineEnding).join('');
|
|
46
|
+
const replacement = parse(raw, { scope: 'fragment' }).children;
|
|
47
|
+
// A mint that paints nothing would replace the typed line with a delete, or with blank trivia
|
|
48
|
+
// a reload reads as neither. Blank lines parse back as empty paragraphs, so the reading is per
|
|
49
|
+
// node rather than the child count.
|
|
50
|
+
if (replacement.every((node) => node.raw.trim() === ''))
|
|
51
|
+
return null;
|
|
52
|
+
return { replacement, caret: resolveCaret(replacement[0], claim.caret) };
|
|
53
|
+
}
|
|
54
|
+
/** The claim's line/column as a byte offset inside the node its path addresses. Resolved here
|
|
55
|
+
* because the line ending the count depends on is the seam's choice, not the completer's. */
|
|
56
|
+
function resolveCaret(minted, caret) {
|
|
57
|
+
let target = minted;
|
|
58
|
+
for (const index of caret.path)
|
|
59
|
+
target = target?.children?.[index];
|
|
60
|
+
const lines = target ? splitLines(target.raw) : [];
|
|
61
|
+
return { path: caret.path, offset: (lines[caret.line]?.start ?? 0) + caret.column };
|
|
62
|
+
}
|
|
63
|
+
/** The one line this block's raw is, or null when it is not a single line of prose whose every
|
|
64
|
+
* byte is content — a completer must never read a kind's own markers as typed text. */
|
|
65
|
+
function wholeTypedLine(node) {
|
|
66
|
+
const descriptor = getBlockKindDescriptor(node.kind);
|
|
67
|
+
if (descriptor.mergeRole !== 'prose')
|
|
68
|
+
return null;
|
|
69
|
+
const lines = splitLines(node.raw);
|
|
70
|
+
if (lines.length !== 1)
|
|
71
|
+
return null;
|
|
72
|
+
const content = descriptor.getContentRange?.(node);
|
|
73
|
+
if (content && (content.start !== 0 || content.end !== displayLength(node.raw)))
|
|
74
|
+
return null;
|
|
75
|
+
return lines[0].text;
|
|
76
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure dispatchers for container focus — moveFocus, focusByPath, focusAtColumn.
|
|
3
|
+
* No Svelte context or reactivity; inputs are passed in as parameters.
|
|
4
|
+
*/
|
|
5
|
+
import type { FocusActions, MoveFocusOptions } from '../../action-contracts';
|
|
6
|
+
import { type BlockComponent, type FocusPosition, type StickyColumnDirection } from '../../block-component';
|
|
7
|
+
import type { StickyColumnState } from '../../cursor/sticky-column';
|
|
8
|
+
/** What the calling scope contributes to a move beyond the target itself. */
|
|
9
|
+
export interface MoveFocusScope {
|
|
10
|
+
/** Overrides `refs.length` for the upper bound: the two diverge for one render cycle
|
|
11
|
+
* after a structural op, and without it the cursor escapes the container. */
|
|
12
|
+
childCount?: number;
|
|
13
|
+
/** The caller's own options, forwarded verbatim on upward delegation. */
|
|
14
|
+
options?: MoveFocusOptions;
|
|
15
|
+
/** Pre-bound to this scope's own boundaries (`selection/gap-caret.ts`). */
|
|
16
|
+
gapStop?: (boundaryIndex: number) => boolean;
|
|
17
|
+
}
|
|
18
|
+
/** Move focus within a container, or delegate upward when out of range. */
|
|
19
|
+
export declare function dispatchMoveFocus(refs: (BlockComponent | undefined)[], innerIndex: number, position: FocusPosition, stickyColumn: StickyColumnState, parent: {
|
|
20
|
+
focus: FocusActions;
|
|
21
|
+
index: number;
|
|
22
|
+
}, scope?: MoveFocusScope): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Direction a FocusPosition implies for traversal. A bare numeric offset is a
|
|
25
|
+
* targeted landing with no direction, so 0 tells the caller not to skip.
|
|
26
|
+
*/
|
|
27
|
+
export declare function traversalStep(position: FocusPosition): -1 | 0 | 1;
|
|
28
|
+
/**
|
|
29
|
+
* Adjacent-only contract (VR-12, docs/design/virtual-rendering.md): sync, revealing
|
|
30
|
+
* nothing, so an unmounted `refs[first]` silently no-ops. The caller keeps the target
|
|
31
|
+
* within overscan; anything wider routes through the async `revealByPath`/`revealPath`.
|
|
32
|
+
*/
|
|
33
|
+
export declare function dispatchFocusByPath(refs: (BlockComponent | undefined)[], path: number[], offset: number): void;
|
|
34
|
+
/** Null when the path doesn't resolve to a mounted ref. */
|
|
35
|
+
export declare function dispatchGetBlockComponentByPath(refs: (BlockComponent | undefined)[], path: number[]): BlockComponent | null;
|
|
36
|
+
export declare function dispatchFocusAtColumn(refs: (BlockComponent | undefined)[], x: number, from: StickyColumnDirection): void;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure dispatchers for container focus — moveFocus, focusByPath, focusAtColumn.
|
|
3
|
+
* No Svelte context or reactivity; inputs are passed in as parameters.
|
|
4
|
+
*/
|
|
5
|
+
import { CURSOR_END, CURSOR_START } from '../../block-component';
|
|
6
|
+
import { consumeStickyLanding } from './focus-landing';
|
|
7
|
+
/** Move focus within a container, or delegate upward when out of range. */
|
|
8
|
+
export async function dispatchMoveFocus(refs, innerIndex, position, stickyColumn, parent, scope = {}) {
|
|
9
|
+
const { childCount, options, gapStop } = scope;
|
|
10
|
+
// Omit the options arg when unset so the common path stays a two-arg call.
|
|
11
|
+
const delegate = (targetIndex) => options
|
|
12
|
+
? parent.focus.moveFocus(targetIndex, position, options)
|
|
13
|
+
: parent.focus.moveFocus(targetIndex, position);
|
|
14
|
+
const step = traversalStep(position);
|
|
15
|
+
// Ahead of every ref read, so the CST alone decides the boundary and a windowed-out
|
|
16
|
+
// child cannot change the answer. The two scope edges are boundaries like any other:
|
|
17
|
+
// this is also what stops the delegate arms from leaving the container.
|
|
18
|
+
if (gapStop && step !== 0 && !options?.skipGapStop) {
|
|
19
|
+
if (gapStop(step > 0 ? innerIndex : innerIndex + 1))
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (innerIndex < 0) {
|
|
23
|
+
await delegate(parent.index - 1);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const upperBound = childCount ?? refs.length;
|
|
27
|
+
if (innerIndex >= upperBound) {
|
|
28
|
+
await delegate(parent.index + 1);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const block = refs[innerIndex];
|
|
32
|
+
if (!block?.focusable) {
|
|
33
|
+
// A refless or non-focusable child must not dead-end the move — continue in
|
|
34
|
+
// its direction (editor.md § Focus traversal).
|
|
35
|
+
if (step !== 0) {
|
|
36
|
+
await dispatchMoveFocus(refs, innerIndex + step, position, stickyColumn, parent, scope);
|
|
37
|
+
}
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
await consumeStickyLanding(block, innerIndex, position, stickyColumn, (i) => dispatchMoveFocus(refs, i, position, stickyColumn, parent, scope));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Direction a FocusPosition implies for traversal. A bare numeric offset is a
|
|
44
|
+
* targeted landing with no direction, so 0 tells the caller not to skip.
|
|
45
|
+
*/
|
|
46
|
+
export function traversalStep(position) {
|
|
47
|
+
if (typeof position === 'object')
|
|
48
|
+
return position.stickyColumnFrom === 'below' ? -1 : 1;
|
|
49
|
+
if (position === 'start')
|
|
50
|
+
return 1;
|
|
51
|
+
if (position === 'end')
|
|
52
|
+
return -1;
|
|
53
|
+
return 0;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Adjacent-only contract (VR-12, docs/design/virtual-rendering.md): sync, revealing
|
|
57
|
+
* nothing, so an unmounted `refs[first]` silently no-ops. The caller keeps the target
|
|
58
|
+
* within overscan; anything wider routes through the async `revealByPath`/`revealPath`.
|
|
59
|
+
*/
|
|
60
|
+
export function dispatchFocusByPath(refs, path, offset) {
|
|
61
|
+
if (path.length === 0) {
|
|
62
|
+
refs[0]?.focus(offset);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const [first, ...rest] = path;
|
|
66
|
+
const child = refs[first];
|
|
67
|
+
if (!child)
|
|
68
|
+
return;
|
|
69
|
+
if (rest.length === 0) {
|
|
70
|
+
child.focus(offset);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
child.focusByPath?.(rest, offset);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** Null when the path doesn't resolve to a mounted ref. */
|
|
77
|
+
export function dispatchGetBlockComponentByPath(refs, path) {
|
|
78
|
+
if (path.length === 0)
|
|
79
|
+
return null;
|
|
80
|
+
const [first, ...rest] = path;
|
|
81
|
+
const child = refs[first];
|
|
82
|
+
if (!child)
|
|
83
|
+
return null;
|
|
84
|
+
if (rest.length === 0)
|
|
85
|
+
return child;
|
|
86
|
+
return child.getBlockComponentByPath?.(rest) ?? null;
|
|
87
|
+
}
|
|
88
|
+
export function dispatchFocusAtColumn(refs, x, from) {
|
|
89
|
+
if (refs.length === 0)
|
|
90
|
+
return;
|
|
91
|
+
const indices = from === 'above' ? refs.map((_, i) => i) : refs.map((_, i) => refs.length - 1 - i);
|
|
92
|
+
// Skip vertically-transparent refs so an entry from above/below lands on the
|
|
93
|
+
// first/last text-bearing child, not an image-only paragraph.
|
|
94
|
+
for (const i of indices) {
|
|
95
|
+
const ref = refs[i];
|
|
96
|
+
if (!ref?.focusable)
|
|
97
|
+
continue;
|
|
98
|
+
if (ref.isVerticallyTransparent?.())
|
|
99
|
+
continue;
|
|
100
|
+
if (ref.focusAtColumn)
|
|
101
|
+
ref.focusAtColumn(x, from);
|
|
102
|
+
else
|
|
103
|
+
ref.focus(from === 'above' ? CURSOR_START : CURSOR_END);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
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 { type BlockComponent, type FocusPosition } from '../../block-component';
|
|
6
|
+
import type { StickyColumnState } from '../../cursor/sticky-column';
|
|
7
|
+
export declare function consumeStickyLanding(block: BlockComponent, index: number, position: FocusPosition, stickyColumn: StickyColumnState, retryAt: (index: number) => Promise<void> | void): Promise<void>;
|