@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,10 @@
|
|
|
1
|
+
/** Resolve a container node (by identity; views accepted) to its BlockListState.
|
|
2
|
+
* WeakMap, so entries collect when the node becomes unreachable. */
|
|
3
|
+
import type { NodeView } from '../core/node-views';
|
|
4
|
+
import type { BlockListState } from './block-list-state.svelte';
|
|
5
|
+
/** Overwrites any existing entry — the new state becomes authoritative on re-mount. */
|
|
6
|
+
export declare function registerBlockListState(node: NodeView, state: BlockListState): void;
|
|
7
|
+
export declare function getStateForNode(node: NodeView): BlockListState | undefined;
|
|
8
|
+
/** Strict variant, for a caller holding a live-tree node whose container must be mounted.
|
|
9
|
+
* `getStateForNode` stays for the ancestor walks where absence is a valid signal. */
|
|
10
|
+
export declare function expectStateForNode(node: NodeView): BlockListState;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** Resolve a container node (by identity; views accepted) to its BlockListState.
|
|
2
|
+
* WeakMap, so entries collect when the node becomes unreachable. */
|
|
3
|
+
import { DEV } from 'esm-env';
|
|
4
|
+
import { tick } from 'svelte';
|
|
5
|
+
import { devWarn } from '../dev-warn';
|
|
6
|
+
const stateRegistry = new WeakMap();
|
|
7
|
+
/** Overwrites any existing entry — the new state becomes authoritative on re-mount. */
|
|
8
|
+
export function registerBlockListState(node, state) {
|
|
9
|
+
const existing = stateRegistry.get(node);
|
|
10
|
+
stateRegistry.set(node, state);
|
|
11
|
+
if (DEV && existing && existing !== state) {
|
|
12
|
+
void reportContestedClaim(node, existing, state);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* A dev signal, not a guarantee. Svelte creates a structural remount's new mount before
|
|
17
|
+
* tearing the old one down, so a claim contested INSIDE a flush says nothing about
|
|
18
|
+
* ownership; re-ask once it settles, when a loser still holding child refs means either a
|
|
19
|
+
* second live owner or a teardown whose clear never reached the live slots.
|
|
20
|
+
*/
|
|
21
|
+
async function reportContestedClaim(node, loser, winner) {
|
|
22
|
+
await tick();
|
|
23
|
+
if (stateRegistry.get(node) !== winner)
|
|
24
|
+
return;
|
|
25
|
+
if (loser.innerBlockRefs.every((ref) => ref === undefined))
|
|
26
|
+
return;
|
|
27
|
+
devWarn('state-registry', `two live components claim the same ${node.kind} — the loser's child refs are orphaned. ` +
|
|
28
|
+
`Either both mounts render this node, or the loser's teardown emptied slots the ` +
|
|
29
|
+
`scope no longer reads.`);
|
|
30
|
+
}
|
|
31
|
+
export function getStateForNode(node) {
|
|
32
|
+
return stateRegistry.get(node);
|
|
33
|
+
}
|
|
34
|
+
/** Strict variant, for a caller holding a live-tree node whose container must be mounted.
|
|
35
|
+
* `getStateForNode` stays for the ancestor walks where absence is a valid signal. */
|
|
36
|
+
export function expectStateForNode(node) {
|
|
37
|
+
const state = stateRegistry.get(node);
|
|
38
|
+
if (!state) {
|
|
39
|
+
throw new Error(`[state-registry] no BlockListState registered for ${node.kind} — ` +
|
|
40
|
+
`caller assumed a mounted container. If this path can visit non-container ` +
|
|
41
|
+
`nodes, use getStateForNode and guard on undefined.`);
|
|
42
|
+
}
|
|
43
|
+
return state;
|
|
44
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type BlockElLookup } from '../editor-keys';
|
|
2
|
+
import type { NodeView } from '../core/node-views';
|
|
3
|
+
import type { RevealTarget } from '../cursor/reveal-anchor';
|
|
4
|
+
import { type ListWindowing, type RevealAnchorPlacement } from './list-windowing.svelte';
|
|
5
|
+
export interface ContainerWindowingOpts {
|
|
6
|
+
/** This container's index in its PARENT scope, for the upward subtotal report. A getter, so
|
|
7
|
+
* reorders report under the current slot. Ignored at the root (no parent sink). */
|
|
8
|
+
getIndex: () => number;
|
|
9
|
+
/** This scope's path; the leaf-channel depth is its length. `[]` at the root. */
|
|
10
|
+
getParentPath: () => number[];
|
|
11
|
+
getChildren: () => readonly NodeView[];
|
|
12
|
+
getChildIds: () => string[];
|
|
13
|
+
/** The content-origin element that scrolls WITH this scope's children. Never the viewport. */
|
|
14
|
+
getListEl: () => HTMLElement | null;
|
|
15
|
+
/** The element the PARENT measures for this scope's height. Omit at the root. */
|
|
16
|
+
getOwnEl?: () => HTMLElement | null;
|
|
17
|
+
/** True when this scope's DIRECT children are `BlockHost`s → shadow the leaf channel.
|
|
18
|
+
* False for direct-`{#each}` scopes (list / table). */
|
|
19
|
+
provideLeafChannel: boolean;
|
|
20
|
+
/** Collapse clamp; see `ListWindowingDeps.isCollapsed`. */
|
|
21
|
+
isCollapsed?: () => boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the reveal target into the ROOT scope's coordinates. The model addresses
|
|
25
|
+
* top-level children only, so a nested target contributes its ancestor's index plus the
|
|
26
|
+
* measured drop down to itself — without which the pin re-asserts the CONTAINER's top and
|
|
27
|
+
* pushes an already-resolved nested target back out of view.
|
|
28
|
+
*/
|
|
29
|
+
export declare function placementOf(target: RevealTarget | null, blockEl: BlockElLookup): RevealAnchorPlacement | null;
|
|
30
|
+
/**
|
|
31
|
+
* One windowing wiring unit per BlockList-bearing or direct-each container scope: reads
|
|
32
|
+
* the windowing contexts, builds `createListWindowing` with the shared constants, and
|
|
33
|
+
* provides the subtotal sink plus the leaf channel. Call synchronously during component init.
|
|
34
|
+
*/
|
|
35
|
+
export declare function useContainerWindowing(opts: ContainerWindowingOpts): ListWindowing;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { getContext, setContext } from 'svelte';
|
|
2
|
+
import { EDITOR_DOC_KEY, EDITOR_SERVICES_KEY, PARENT_SCOPE_SINK_KEY, RECORD_BLOCK_HEIGHT_KEY } from '../editor-keys';
|
|
3
|
+
import { createListWindowing } from './list-windowing.svelte';
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the reveal target into the ROOT scope's coordinates. The model addresses
|
|
6
|
+
* top-level children only, so a nested target contributes its ancestor's index plus the
|
|
7
|
+
* measured drop down to itself — without which the pin re-asserts the CONTAINER's top and
|
|
8
|
+
* pushes an already-resolved nested target back out of view.
|
|
9
|
+
*/
|
|
10
|
+
export function placementOf(target, blockEl) {
|
|
11
|
+
if (!target || target.path.length === 0)
|
|
12
|
+
return null;
|
|
13
|
+
const shallow = { index: target.path[0], block: target.block, innerOffset: 0, height: null };
|
|
14
|
+
if (target.path.length === 1)
|
|
15
|
+
return shallow;
|
|
16
|
+
const ancestorEl = blockEl([shallow.index]);
|
|
17
|
+
const targetEl = blockEl(target.path);
|
|
18
|
+
// The ancestor's top is a DIFFERENT block, honest only while the ancestor itself is
|
|
19
|
+
// windowed out and the model's offset is all that is known. A MOUNTED ancestor missing its
|
|
20
|
+
// target means the reader scrolled past it inside the container: decline, never teleport.
|
|
21
|
+
if (!ancestorEl)
|
|
22
|
+
return shallow;
|
|
23
|
+
if (!targetEl)
|
|
24
|
+
return null;
|
|
25
|
+
const targetRect = targetEl.getBoundingClientRect();
|
|
26
|
+
return {
|
|
27
|
+
index: shallow.index,
|
|
28
|
+
block: target.block,
|
|
29
|
+
innerOffset: targetRect.top - ancestorEl.getBoundingClientRect().top,
|
|
30
|
+
height: targetRect.height
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* One windowing wiring unit per BlockList-bearing or direct-each container scope: reads
|
|
35
|
+
* the windowing contexts, builds `createListWindowing` with the shared constants, and
|
|
36
|
+
* provides the subtotal sink plus the leaf channel. Call synchronously during component init.
|
|
37
|
+
*/
|
|
38
|
+
export function useContainerWindowing(opts) {
|
|
39
|
+
const { heightOracle: oracle, scrollport: getPort, correctsScroll, focusedPath: getFocusPath, widthVersion: getWidthVersion, viewportHeightVersion: getViewportHeightVersion, blockElLookup } = getContext(EDITOR_DOC_KEY);
|
|
40
|
+
const parentSink = getContext(PARENT_SCOPE_SINK_KEY);
|
|
41
|
+
const revealAnchor = getContext(EDITOR_SERVICES_KEY)?.revealAnchor;
|
|
42
|
+
// Single-claimant: nested scopes keep top-of-viewport anchoring, or their deltas would
|
|
43
|
+
// fight over one scrollTop.
|
|
44
|
+
const claimsRevealAnchor = opts.getParentPath().length === 0;
|
|
45
|
+
const windowing = createListWindowing({
|
|
46
|
+
oracle,
|
|
47
|
+
getChildren: opts.getChildren,
|
|
48
|
+
getChildIds: opts.getChildIds,
|
|
49
|
+
getListEl: opts.getListEl,
|
|
50
|
+
getOwnEl: opts.getOwnEl,
|
|
51
|
+
getPort: () => getPort?.() ?? null,
|
|
52
|
+
correctsScroll: () => correctsScroll?.() ?? true,
|
|
53
|
+
getFocusPath: () => getFocusPath?.() ?? null,
|
|
54
|
+
getRevealAnchorTarget: claimsRevealAnchor
|
|
55
|
+
? () => placementOf(revealAnchor?.get() ?? null, blockElLookup)
|
|
56
|
+
: undefined,
|
|
57
|
+
getWidthVersion: () => getWidthVersion?.() ?? 0,
|
|
58
|
+
getViewportHeightVersion: () => getViewportHeightVersion?.() ?? 0,
|
|
59
|
+
getParentPath: opts.getParentPath,
|
|
60
|
+
reportSelfHeight: parentSink
|
|
61
|
+
? (h) => parentSink.setChildSubtotal(opts.getIndex(), h)
|
|
62
|
+
: undefined,
|
|
63
|
+
isCollapsed: opts.isCollapsed,
|
|
64
|
+
// A fling can outrun the deferred window recompute and briefly paint an empty spacer
|
|
65
|
+
// (VR-8). 6 widens the band without breaching the mounted-set ceiling (the < 60 flat
|
|
66
|
+
// e2e bound guards that); a skeleton background covers the residual one-frame gap.
|
|
67
|
+
overscan: 6,
|
|
68
|
+
pinExtensionCap: 100,
|
|
69
|
+
activateAbovePx: 4000,
|
|
70
|
+
deactivateBelowPx: 3000
|
|
71
|
+
});
|
|
72
|
+
if (opts.provideLeafChannel) {
|
|
73
|
+
// Only a DIRECT child measures into this model; a deeper host belongs to its own
|
|
74
|
+
// scope's channel, so register is a no-op here.
|
|
75
|
+
setContext(RECORD_BLOCK_HEIGHT_KEY, {
|
|
76
|
+
register(path, index, id, readHeight) {
|
|
77
|
+
const depth = opts.getParentPath().length;
|
|
78
|
+
if (path.length !== depth + 1)
|
|
79
|
+
return () => { };
|
|
80
|
+
return windowing.registerChild(id, {
|
|
81
|
+
readHeight,
|
|
82
|
+
applyHeight: (h) => windowing.recordMeasuredChild(index, id, h)
|
|
83
|
+
});
|
|
84
|
+
},
|
|
85
|
+
measureNow: windowing.measureChildNow,
|
|
86
|
+
measureOnResize: windowing.measureChildOnResize
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
setContext(PARENT_SCOPE_SINK_KEY, {
|
|
90
|
+
setChildSubtotal: windowing.setChildSubtotal,
|
|
91
|
+
registerRow: (id, readHeight, applyHeight) => windowing.registerChild(id, { readHeight, applyHeight }),
|
|
92
|
+
measureRowNow: windowing.measureChildNow
|
|
93
|
+
});
|
|
94
|
+
return windowing;
|
|
95
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one home for the windowed-slice bounds. A consumer renders `children.slice(start,
|
|
3
|
+
* end)` and MUST key/index each rendered child by its ABSOLUTE index `start + localIndex`,
|
|
4
|
+
* never the local loop index — leaking the local index corrupts paths and structural ops
|
|
5
|
+
* invisibly (`docs/design/virtual-rendering.md`).
|
|
6
|
+
*/
|
|
7
|
+
import type { WindowResult } from './block-window.svelte';
|
|
8
|
+
export declare function sliceWindow(childCount: number, win: WindowResult | undefined): {
|
|
9
|
+
start: number;
|
|
10
|
+
end: number;
|
|
11
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function sliceWindow(childCount, win) {
|
|
2
|
+
if (!win?.active)
|
|
3
|
+
return { start: 0, end: childCount };
|
|
4
|
+
// A window derived from a prior, longer children array can arrive one reactive tick
|
|
5
|
+
// before the slice re-derives against the new length.
|
|
6
|
+
const start = Math.min(win.start, childCount);
|
|
7
|
+
const end = Math.min(win.end, childCount);
|
|
8
|
+
return { start, end: Math.max(start, end) };
|
|
9
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bounded decline for a recognizer whose grammar has no early-stop byte: candidate
|
|
3
|
+
* positions are collected once per block and each consultation is a binary search, so a
|
|
4
|
+
* trigger-dense paragraph costs one scan instead of one per trigger. The index memoizes
|
|
5
|
+
* per raw, bounded (cap 2) rather than weak-keyed because a string cannot key a WeakMap.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* `collect` scans one block's raw left to right into ascending positions; the returned
|
|
9
|
+
* lookup answers the first collected position at or after `from`, or -1 when none remains.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createScanIndex(collect: (raw: string) => Int32Array): (raw: string, from: number) => number;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bounded decline for a recognizer whose grammar has no early-stop byte: candidate
|
|
3
|
+
* positions are collected once per block and each consultation is a binary search, so a
|
|
4
|
+
* trigger-dense paragraph costs one scan instead of one per trigger. The index memoizes
|
|
5
|
+
* per raw, bounded (cap 2) rather than weak-keyed because a string cannot key a WeakMap.
|
|
6
|
+
*/
|
|
7
|
+
import { createBoundedMemo } from './bounded-memo';
|
|
8
|
+
/**
|
|
9
|
+
* `collect` scans one block's raw left to right into ascending positions; the returned
|
|
10
|
+
* lookup answers the first collected position at or after `from`, or -1 when none remains.
|
|
11
|
+
*/
|
|
12
|
+
export function createScanIndex(collect) {
|
|
13
|
+
const positionIndex = createBoundedMemo({ cap: 2 });
|
|
14
|
+
return (raw, from) => {
|
|
15
|
+
const positions = positionIndex(raw, () => collect(raw));
|
|
16
|
+
let lo = 0;
|
|
17
|
+
let hi = positions.length;
|
|
18
|
+
while (lo < hi) {
|
|
19
|
+
const mid = (lo + hi) >>> 1;
|
|
20
|
+
if (positions[mid] < from)
|
|
21
|
+
lo = mid + 1;
|
|
22
|
+
else
|
|
23
|
+
hi = mid;
|
|
24
|
+
}
|
|
25
|
+
return lo < positions.length ? positions[lo] : -1;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `(kind, id) → handler` block-command registry and every dispatch seam over it. A chord
|
|
3
|
+
* (leaf or container bubble), the `runCommand` door and its admissibility read all resolve the
|
|
4
|
+
* same tiers here, so the rules that hold regardless of invocation live at one seam.
|
|
5
|
+
* Register-once, throw-on-duplicate (casebook.md "Registries are code, not state"). Here, not
|
|
6
|
+
* `./commands`: `commands → block-commands → command-id` cycles.
|
|
7
|
+
*/
|
|
8
|
+
import type { AnyBlockKind } from '../core/nodes';
|
|
9
|
+
import type { NodeView } from '../core/node-views';
|
|
10
|
+
import { type AnyCommandId, type PluginCommandId } from './command-id';
|
|
11
|
+
import { type GlobalCommandContext } from './commands';
|
|
12
|
+
import type { KeybindingOverrideMap } from './keybinding-overrides';
|
|
13
|
+
import { type EditorContext } from './plugin-install';
|
|
14
|
+
export interface BlockCommandContext {
|
|
15
|
+
/** Read context — a bytes-readonly view; metadata edits go through `updateMetadata`. */
|
|
16
|
+
node: NodeView;
|
|
17
|
+
arg: unknown;
|
|
18
|
+
updateMetadata(patch: Record<string, unknown>): void;
|
|
19
|
+
/**
|
|
20
|
+
* The mounted component's view-state hooks, which a render-primary plugin casts to its own
|
|
21
|
+
* hooks type. `undefined` when no component is mounted, and a handler must decline
|
|
22
|
+
* gracefully then; the platform never learns the shape (`unknown` by design).
|
|
23
|
+
*/
|
|
24
|
+
hooks?: unknown;
|
|
25
|
+
/** The dispatching instance's per-plugin EditorContext (document/events/options reads).
|
|
26
|
+
* Undefined when the target surface has no instance wiring. */
|
|
27
|
+
editor?: EditorContext;
|
|
28
|
+
}
|
|
29
|
+
export type BlockCommandHandler = (ctx: BlockCommandContext) => boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Register-once check precedes the mint, so a duplicate `(kind, name)` reports as
|
|
32
|
+
* "register-once" rather than as an already-minted collision. The name-validating mint runs
|
|
33
|
+
* inside `apply` before the map write, so an invalid name never leaves an orphaned handler.
|
|
34
|
+
*/
|
|
35
|
+
export declare function registerBlockCommand(kind: AnyBlockKind, name: string, handler: BlockCommandHandler): PluginCommandId;
|
|
36
|
+
export declare function getBlockCommand(kind: AnyBlockKind, id: AnyCommandId): BlockCommandHandler | undefined;
|
|
37
|
+
export declare function __resetBlockCommandsForTests(): void;
|
|
38
|
+
/**
|
|
39
|
+
* The cross-block arm a range command routes to, injected because this schema leaf may not
|
|
40
|
+
* import selection machinery. `canRun` is reachability, not participation: a press whose range
|
|
41
|
+
* reaches no block still consumes the chord and writes nothing.
|
|
42
|
+
*/
|
|
43
|
+
export interface CrossBlockCommandRouter {
|
|
44
|
+
canRun(id: AnyCommandId): boolean;
|
|
45
|
+
run(id: AnyCommandId): boolean;
|
|
46
|
+
isActive(id: AnyCommandId): boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Editor state a command's admissibility reads, whatever invoked it. Getters, never values:
|
|
50
|
+
* they change under a live editor between one dispatch and the next. Every field is required,
|
|
51
|
+
* so a new dispatch site cannot silently skip the reading-mode gate, the range decline, or the
|
|
52
|
+
* cross-block route — `undefined` for the router is the answer a bubble caller gives.
|
|
53
|
+
*/
|
|
54
|
+
export interface CommandGates {
|
|
55
|
+
getPresentationMode: GlobalCommandContext['getPresentationMode'];
|
|
56
|
+
/** True while a cross-block range is painted. */
|
|
57
|
+
isCrossBlockRange(): boolean;
|
|
58
|
+
crossBlockCommands: CrossBlockCommandRouter | undefined;
|
|
59
|
+
}
|
|
60
|
+
/** What leaf dispatch and the `runCommand` door hand the seam: the gates plus the global tier. */
|
|
61
|
+
export type CommandDispatchContext = GlobalCommandContext & CommandGates;
|
|
62
|
+
export interface KindCommandTarget {
|
|
63
|
+
kind: AnyBlockKind;
|
|
64
|
+
runCommand(id: AnyCommandId, arg?: unknown): boolean;
|
|
65
|
+
getCommandContext?(): Omit<BlockCommandContext, 'arg'>;
|
|
66
|
+
/** The id's toggle-state at the surface's own caret or selection — what a toolbar paints
|
|
67
|
+
* pressed. Absent means the surface has no toggle-state to report, which reads inactive. */
|
|
68
|
+
isCommandActive?(id: AnyCommandId): boolean;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* A contained plugin command failure. A block command reports its `kind`; a global command
|
|
72
|
+
* reports its `plugin` and carries no kind. The dispatch seam hands this to the caller's sink,
|
|
73
|
+
* which routes it to the editor's error channel (`origin: 'command'`, `editor-events.ts`) —
|
|
74
|
+
* caller-injected so this schema leaf keeps no edge to the shell owning the event surface.
|
|
75
|
+
*/
|
|
76
|
+
export interface CommandErrorReport {
|
|
77
|
+
kind?: AnyBlockKind;
|
|
78
|
+
command: AnyCommandId;
|
|
79
|
+
plugin?: string;
|
|
80
|
+
error: unknown;
|
|
81
|
+
}
|
|
82
|
+
export type CommandErrorSink = (report: CommandErrorReport) => void;
|
|
83
|
+
/**
|
|
84
|
+
* The door's admissibility read: the gates plus the same tier walk the dispatch spends, never a
|
|
85
|
+
* second derivation of them. Silent by design — a host may ask on every selection change, so an
|
|
86
|
+
* unreachable id spends none of the dispatch's one-time dead-key diagnostics.
|
|
87
|
+
* See `editor-props.ts` for the contract this answers.
|
|
88
|
+
*/
|
|
89
|
+
export declare function canRunCommandById(id: AnyCommandId, target: KindCommandTarget | null, gates: CommandGates): boolean;
|
|
90
|
+
/** The door's pressed-state read, `canRunCommandById`'s sibling: state rather than
|
|
91
|
+
* admissibility, so a disabled affordance may still paint pressed. Whoever would spend the
|
|
92
|
+
* press answers — the cross-block arm over a range, the focused surface at a caret. */
|
|
93
|
+
export declare function isCommandActiveById(id: AnyCommandId, target: KindCommandTarget | null, gates: CommandGates): boolean;
|
|
94
|
+
/** The `EditorInstance.runCommand` door: an id with no keystroke behind it. */
|
|
95
|
+
export declare function runCommandById(id: AnyCommandId, arg: unknown, target: KindCommandTarget | null, ctx: CommandDispatchContext, onCommandError?: CommandErrorSink): boolean;
|
|
96
|
+
/** Leaf-path chord dispatch (the focused editable/chrome surface). */
|
|
97
|
+
export declare function dispatchKeyCommand(chord: string, target: KindCommandTarget, ctx: CommandDispatchContext, overrides?: KeybindingOverrideMap, onCommandError?: CommandErrorSink): boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Container-bubble dispatch. Kind-only, no global tier: undo/redo belong to the focused leaf,
|
|
100
|
+
* and a container bubble re-firing them would double-fire (`resolveKindBinding` in `./commands`).
|
|
101
|
+
* The bubble callers hold no GlobalCommandContext, so they pass the gates directly — and an
|
|
102
|
+
* override that resolves a GLOBAL id here resolves DEAD, declining loudly rather than being
|
|
103
|
+
* dropped by a `runCommand` that has no arm for it.
|
|
104
|
+
*/
|
|
105
|
+
export declare function dispatchKindCommand(chord: string, target: KindCommandTarget, gates: CommandGates, overrides?: KeybindingOverrideMap, onCommandError?: CommandErrorSink): boolean;
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { mintCommandId, __resetMintedCommandIdsForTests } from './command-id';
|
|
2
|
+
import { registerOnce } from './register-once';
|
|
3
|
+
import { resolveBinding, resolveKindBinding, getCommand, warnDeadKeyCommand, isBuiltinCommandId, CROSS_BLOCK_RANGE_COMMAND_IDS, RANGE_DECLINED_COMMAND_IDS } from './commands';
|
|
4
|
+
import { currentInstallingPlugin } from './plugin-install';
|
|
5
|
+
import { isReadingMode } from '../presentation-mode';
|
|
6
|
+
const blockCommands = new Map();
|
|
7
|
+
const compositeKey = (kind, id) => `${kind} ${id}`;
|
|
8
|
+
/**
|
|
9
|
+
* Register-once check precedes the mint, so a duplicate `(kind, name)` reports as
|
|
10
|
+
* "register-once" rather than as an already-minted collision. The name-validating mint runs
|
|
11
|
+
* inside `apply` before the map write, so an invalid name never leaves an orphaned handler.
|
|
12
|
+
*/
|
|
13
|
+
export function registerBlockCommand(kind, name, handler) {
|
|
14
|
+
const key = compositeKey(kind, name);
|
|
15
|
+
let id;
|
|
16
|
+
registerOnce(blockCommands.has(key), () => {
|
|
17
|
+
id = mintCommandId(name, currentInstallingPlugin());
|
|
18
|
+
blockCommands.set(key, handler);
|
|
19
|
+
}, `registerBlockCommand: (${kind}, ${name}) is already registered — block commands are register-once`);
|
|
20
|
+
return id;
|
|
21
|
+
}
|
|
22
|
+
export function getBlockCommand(kind, id) {
|
|
23
|
+
return blockCommands.get(compositeKey(kind, id));
|
|
24
|
+
}
|
|
25
|
+
export function __resetBlockCommandsForTests() {
|
|
26
|
+
blockCommands.clear();
|
|
27
|
+
__resetMintedCommandIdsForTests();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The kind tiers, in dispatch order. A GLOBAL id resolves DEAD here: the leaf path has already
|
|
31
|
+
* run it, and the container bubble deliberately has no global tier, so a container can never
|
|
32
|
+
* re-fire the focused leaf's undo.
|
|
33
|
+
*/
|
|
34
|
+
function resolveBlockLocalCommand(id, target) {
|
|
35
|
+
if (!target)
|
|
36
|
+
return { tier: 'no-surface' };
|
|
37
|
+
if (getCommand(id))
|
|
38
|
+
return { tier: 'dead' };
|
|
39
|
+
const handler = getBlockCommand(target.kind, id);
|
|
40
|
+
// A context is built only where a handler matched, so a built-in id costs nothing extra on the
|
|
41
|
+
// read a host may run per selection change.
|
|
42
|
+
const context = handler ? target.getCommandContext?.() : undefined;
|
|
43
|
+
if (handler && context)
|
|
44
|
+
return { tier: 'minted', target, handler, context };
|
|
45
|
+
return isBuiltinCommandId(id) ? { tier: 'builtin', target } : { tier: 'dead' };
|
|
46
|
+
}
|
|
47
|
+
/** The full walk: global first, then the kind tiers. Both the dispatch and the admissibility
|
|
48
|
+
* read spend this one, so a greyed affordance cannot disagree with the click under it. */
|
|
49
|
+
function resolveCommand(id, target) {
|
|
50
|
+
const globalRun = getCommand(id);
|
|
51
|
+
if (globalRun)
|
|
52
|
+
return { tier: 'global', run: globalRun };
|
|
53
|
+
return resolveBlockLocalCommand(id, target);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Spend a resolved kind tier. Containment is unconditional — the safety guarantee lives here, not
|
|
57
|
+
* at the call sites, so an unwired caller still turns a plugin throw into a no-op, it just doesn't
|
|
58
|
+
* report. A dead id declines loudly rather than reaching a `runCommand` with no arm for it.
|
|
59
|
+
*/
|
|
60
|
+
function runBlockLocalCommand(resolved, id, arg, path, onCommandError) {
|
|
61
|
+
switch (resolved.tier) {
|
|
62
|
+
case 'minted':
|
|
63
|
+
try {
|
|
64
|
+
return resolved.handler({ ...resolved.context, arg });
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
onCommandError?.({ kind: resolved.target.kind, command: id, error });
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
case 'builtin':
|
|
71
|
+
return resolved.target.runCommand(id, arg);
|
|
72
|
+
case 'dead':
|
|
73
|
+
warnDeadKeyCommand(id, path);
|
|
74
|
+
return false;
|
|
75
|
+
case 'no-surface':
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Where an id goes with a range painted. The one-block arms have no host block to take their
|
|
81
|
+
* offsets from, so they either route to the cross-block arm or decline; everything else is
|
|
82
|
+
* range-safe and runs on the focused surface (`RANGE_DECLINED_COMMAND_IDS` in `./commands`).
|
|
83
|
+
*/
|
|
84
|
+
function rangeRouteFor(id, gates) {
|
|
85
|
+
// Called directly, not optionally: a caller without the getter throws rather than skipping.
|
|
86
|
+
if (!gates.isCrossBlockRange())
|
|
87
|
+
return { kind: 'block-local', ranged: false };
|
|
88
|
+
if (RANGE_DECLINED_COMMAND_IDS.has(id))
|
|
89
|
+
return { kind: 'decline' };
|
|
90
|
+
if (!CROSS_BLOCK_RANGE_COMMAND_IDS.has(id))
|
|
91
|
+
return { kind: 'block-local', ranged: true };
|
|
92
|
+
const router = gates.crossBlockCommands;
|
|
93
|
+
return router?.canRun(id) ? { kind: 'cross-block', router } : { kind: 'decline' };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* The gates every entry path owes, whatever resolved the id. Reading mode is inert: the whole
|
|
97
|
+
* vocabulary dead-keys, and navigation never routes through commands, so a reader loses nothing.
|
|
98
|
+
*/
|
|
99
|
+
function commandIsAdmissible(id, gates) {
|
|
100
|
+
if (isReadingMode(gates.getPresentationMode))
|
|
101
|
+
return false;
|
|
102
|
+
return rangeRouteFor(id, gates).kind !== 'decline';
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* The id-keyed seam: chord dispatch enters with a resolved binding, `EditorInstance.runCommand`
|
|
106
|
+
* with the id itself, so both meet the same gates and the same arms. Precedence is the leaf
|
|
107
|
+
* order: global (undo/redo) → minted block command → built-in kind command. A null target means
|
|
108
|
+
* no focused surface, where the global tier still runs and the block-local tiers decline.
|
|
109
|
+
*/
|
|
110
|
+
function runResolvedCommand(id, arg, target, ctx, path, onCommandError) {
|
|
111
|
+
if (isReadingMode(ctx.getPresentationMode))
|
|
112
|
+
return false;
|
|
113
|
+
const route = rangeRouteFor(id, ctx);
|
|
114
|
+
if (route.kind === 'decline')
|
|
115
|
+
return false;
|
|
116
|
+
if (route.kind === 'cross-block')
|
|
117
|
+
return route.router.run(id);
|
|
118
|
+
const resolved = resolveCommand(id, target);
|
|
119
|
+
// Inject the sink so a plugin-global handler's contained throw reports through the same
|
|
120
|
+
// channel as a block command's; the global tier is the only path reaching one.
|
|
121
|
+
if (resolved.tier === 'global')
|
|
122
|
+
return resolved.run({ ...ctx, onCommandError });
|
|
123
|
+
return runBlockLocalCommand(resolved, id, arg, path, onCommandError);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* The door's admissibility read: the gates plus the same tier walk the dispatch spends, never a
|
|
127
|
+
* second derivation of them. Silent by design — a host may ask on every selection change, so an
|
|
128
|
+
* unreachable id spends none of the dispatch's one-time dead-key diagnostics.
|
|
129
|
+
* See `editor-props.ts` for the contract this answers.
|
|
130
|
+
*/
|
|
131
|
+
export function canRunCommandById(id, target, gates) {
|
|
132
|
+
if (isReadingMode(gates.getPresentationMode))
|
|
133
|
+
return false;
|
|
134
|
+
const route = rangeRouteFor(id, gates);
|
|
135
|
+
if (route.kind !== 'block-local')
|
|
136
|
+
return route.kind === 'cross-block';
|
|
137
|
+
const { tier } = resolveCommand(id, target);
|
|
138
|
+
return tier !== 'dead' && tier !== 'no-surface';
|
|
139
|
+
}
|
|
140
|
+
/** The door's pressed-state read, `canRunCommandById`'s sibling: state rather than
|
|
141
|
+
* admissibility, so a disabled affordance may still paint pressed. Whoever would spend the
|
|
142
|
+
* press answers — the cross-block arm over a range, the focused surface at a caret. */
|
|
143
|
+
export function isCommandActiveById(id, target, gates) {
|
|
144
|
+
const route = rangeRouteFor(id, gates);
|
|
145
|
+
if (route.kind === 'cross-block')
|
|
146
|
+
return route.router.isActive(id);
|
|
147
|
+
// A range no arm reads has no pressed state: the focused surface holds a parked caret, whose
|
|
148
|
+
// bytes are not the ones a press would rewrite.
|
|
149
|
+
if (route.kind === 'decline' || route.ranged)
|
|
150
|
+
return false;
|
|
151
|
+
return target?.isCommandActive?.(id) ?? false;
|
|
152
|
+
}
|
|
153
|
+
/** The `EditorInstance.runCommand` door: an id with no keystroke behind it. */
|
|
154
|
+
export function runCommandById(id, arg, target, ctx, onCommandError) {
|
|
155
|
+
return runResolvedCommand(id, arg, target, ctx, 'door', onCommandError);
|
|
156
|
+
}
|
|
157
|
+
/** Leaf-path chord dispatch (the focused editable/chrome surface). */
|
|
158
|
+
export function dispatchKeyCommand(chord, target, ctx, overrides, onCommandError) {
|
|
159
|
+
const binding = resolveBinding(chord, target.kind, overrides, ctx.activation);
|
|
160
|
+
if (!binding)
|
|
161
|
+
return false;
|
|
162
|
+
return runResolvedCommand(binding.command, binding.arg, target, ctx, 'chord', onCommandError);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Container-bubble dispatch. Kind-only, no global tier: undo/redo belong to the focused leaf,
|
|
166
|
+
* and a container bubble re-firing them would double-fire (`resolveKindBinding` in `./commands`).
|
|
167
|
+
* The bubble callers hold no GlobalCommandContext, so they pass the gates directly — and an
|
|
168
|
+
* override that resolves a GLOBAL id here resolves DEAD, declining loudly rather than being
|
|
169
|
+
* dropped by a `runCommand` that has no arm for it.
|
|
170
|
+
*/
|
|
171
|
+
export function dispatchKindCommand(chord, target, gates, overrides, onCommandError) {
|
|
172
|
+
const binding = resolveKindBinding(chord, target.kind, overrides);
|
|
173
|
+
if (!binding)
|
|
174
|
+
return false;
|
|
175
|
+
if (!commandIsAdmissible(binding.command, gates))
|
|
176
|
+
return false;
|
|
177
|
+
const resolved = resolveBlockLocalCommand(binding.command, target);
|
|
178
|
+
return runBlockLocalCommand(resolved, binding.command, binding.arg, 'chord', onCommandError);
|
|
179
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-kind Enter-completion registry, the block-opener registry's sibling: an opener recognizes
|
|
3
|
+
* a line while parsing, a completer recognizes a lone typed line at an Enter press and answers
|
|
4
|
+
* the canonical lines that complete it. Published on `plugin.ts`, so its plugin entries clear
|
|
5
|
+
* through `registry-reset.ts` like every other public register-once seam.
|
|
6
|
+
*/
|
|
7
|
+
import { type AnyBlockKind } from '../core/nodes';
|
|
8
|
+
/**
|
|
9
|
+
* The replacement, as lines WITHOUT endings — the seam attaches the block's own (G4.20) — plus
|
|
10
|
+
* where the caret seats: `path` is child indices inside the minted block, empty for the block,
|
|
11
|
+
* and `line`/`column` address a position inside THAT node. Line-relative rather than a byte
|
|
12
|
+
* offset because the seam picks the line ending after the claim, so only it can count bytes.
|
|
13
|
+
*/
|
|
14
|
+
export interface CompletionResult {
|
|
15
|
+
lines: string[];
|
|
16
|
+
caret: {
|
|
17
|
+
path: number[];
|
|
18
|
+
line: number;
|
|
19
|
+
column: number;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export interface BlockCompleter {
|
|
23
|
+
/** Attempt to complete `line`; null declines, as does a claim whose lines would paint nothing. */
|
|
24
|
+
tryComplete(line: string): CompletionResult | null;
|
|
25
|
+
}
|
|
26
|
+
export declare function registerBlockCompleter(kind: AnyBlockKind, completer: BlockCompleter): void;
|
|
27
|
+
/** The first claim on `line`, or null when no registered completer takes it. */
|
|
28
|
+
export declare function completeTypedLine(line: string): CompletionResult | null;
|
|
29
|
+
/** Whether `kind` already owns a completer — the probe a registrar re-run reads before it
|
|
30
|
+
* registers, so a re-installed plugin never trips the register-once throw. */
|
|
31
|
+
export declare function isBlockCompleterRegistered(kind: string): boolean;
|
|
32
|
+
export declare function __resetBlockCompletersForTests(): void;
|
|
33
|
+
export declare function __removePluginCompletersForTests(): void;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-kind Enter-completion registry, the block-opener registry's sibling: an opener recognizes
|
|
3
|
+
* a line while parsing, a completer recognizes a lone typed line at an Enter press and answers
|
|
4
|
+
* the canonical lines that complete it. Published on `plugin.ts`, so its plugin entries clear
|
|
5
|
+
* through `registry-reset.ts` like every other public register-once seam.
|
|
6
|
+
*/
|
|
7
|
+
import { isBuiltinBlockKind } from '../core/nodes';
|
|
8
|
+
import { deletePluginEntries, registerOnce } from './register-once';
|
|
9
|
+
const completers = new Map();
|
|
10
|
+
let orderedCache = null;
|
|
11
|
+
export function registerBlockCompleter(kind, completer) {
|
|
12
|
+
registerOnce(completers.has(kind), () => {
|
|
13
|
+
completers.set(kind, completer);
|
|
14
|
+
orderedCache = null;
|
|
15
|
+
}, `registerBlockCompleter: "${kind}" is already registered. Completers are register-once.`);
|
|
16
|
+
}
|
|
17
|
+
// Kind-name order, so which completer is consulted first is a pure function of the declarations
|
|
18
|
+
// and never of registration order — the openers' rule, minus a priority no conflict has asked for.
|
|
19
|
+
function ordered() {
|
|
20
|
+
if (!orderedCache) {
|
|
21
|
+
orderedCache = [...completers.entries()]
|
|
22
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
|
|
23
|
+
.map(([, completer]) => completer);
|
|
24
|
+
}
|
|
25
|
+
return orderedCache;
|
|
26
|
+
}
|
|
27
|
+
/** The first claim on `line`, or null when no registered completer takes it. */
|
|
28
|
+
export function completeTypedLine(line) {
|
|
29
|
+
for (const completer of ordered()) {
|
|
30
|
+
const claim = completer.tryComplete(line);
|
|
31
|
+
if (claim)
|
|
32
|
+
return claim;
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
/** Whether `kind` already owns a completer — the probe a registrar re-run reads before it
|
|
37
|
+
* registers, so a re-installed plugin never trips the register-once throw. */
|
|
38
|
+
export function isBlockCompleterRegistered(kind) {
|
|
39
|
+
return completers.has(kind);
|
|
40
|
+
}
|
|
41
|
+
export function __resetBlockCompletersForTests() {
|
|
42
|
+
completers.clear();
|
|
43
|
+
orderedCache = null;
|
|
44
|
+
}
|
|
45
|
+
// The unified schema reset preserves built-ins for tests that merely add plugin kinds.
|
|
46
|
+
export function __removePluginCompletersForTests() {
|
|
47
|
+
deletePluginEntries(completers, isBuiltinBlockKind);
|
|
48
|
+
orderedCache = null;
|
|
49
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime `BlockKind → component` map. BlockHost looks up by kind; plugin
|
|
3
|
+
* kinds register a descriptor plus a component entry.
|
|
4
|
+
*/
|
|
5
|
+
import type { Component } from 'svelte';
|
|
6
|
+
import { type AnyBlockKind } from '../core/nodes';
|
|
7
|
+
import type { NodeView } from '../core/node-views';
|
|
8
|
+
import type { BlockComponentExports, BlockComponentProps } from '../block-component';
|
|
9
|
+
export interface BlockComponentEntry {
|
|
10
|
+
/**
|
|
11
|
+
* Declaring `BlockComponentExports` as the Exports lets BlockHost's `bind:this` type-check
|
|
12
|
+
* against a runtime-picked component, and pins the two shapes a block may publish: the
|
|
13
|
+
* surface itself (a leaf) or a container's single `containerApi`.
|
|
14
|
+
*/
|
|
15
|
+
component: Component<Record<string, unknown>, BlockComponentExports>;
|
|
16
|
+
extraProps?: (node: NodeView) => Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Typed constructor for a registry entry: the component publishes one of the two sanctioned
|
|
20
|
+
* surface shapes, and its props are a subset of what BlockHost passes. A container that forgot
|
|
21
|
+
* its `containerApi` fails here rather than mounting as a block nothing can focus. The internal
|
|
22
|
+
* cast widens contravariant props to the registry's `Record<string, unknown>`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function defineBlockComponent<P extends Partial<BlockComponentProps> & Record<string, unknown>>(component: Component<P, BlockComponentExports>, extraProps?: (node: NodeView) => Record<string, unknown>): BlockComponentEntry;
|
|
25
|
+
export declare function registerBlockComponent(kind: AnyBlockKind, entry: BlockComponentEntry): void;
|
|
26
|
+
export declare function getBlockComponent(kind: AnyBlockKind): BlockComponentEntry | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Probe whether a component is registered — `registerBlockComponent` throws on duplicate, so a
|
|
29
|
+
* plugin registering idempotently (HMR / re-import) guards on this. Takes a plain name.
|
|
30
|
+
*/
|
|
31
|
+
export declare function isBlockComponentRegistered(kind: string): boolean;
|
|
32
|
+
/** Test-only. Removes every non-built-in component entry; built-ins survive. */
|
|
33
|
+
export declare function __removePluginComponentsForTests(): void;
|