@voithos-labs/aragonite 0.10.3 → 0.10.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/a11y-strings.d.ts +12 -5
- package/dist/a11y-strings.js +61 -5
- package/dist/action-contracts.d.ts +242 -155
- package/dist/action-contracts.js +2 -2
- package/dist/active-editor.d.ts +3 -3
- package/dist/active-editor.js +8 -9
- package/dist/ambient/ambient-dom.d.ts +2 -5
- package/dist/ambient/ambient-dom.js +16 -62
- package/dist/assert.js +6 -5
- package/dist/block-component.d.ts +135 -109
- package/dist/block-component.js +30 -22
- package/dist/block-id.d.ts +6 -10
- package/dist/block-id.js +25 -14
- package/dist/bounded-memo.d.ts +5 -5
- package/dist/bounded-memo.js +6 -6
- package/dist/components/BlockDragHandle.svelte +13 -20
- package/dist/components/BlockHost.svelte +56 -134
- package/dist/components/BlockList.svelte +22 -19
- package/dist/components/DecorationOverlay.svelte +9 -10
- package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
- package/dist/components/Editor.svelte +619 -1089
- package/dist/components/Editor.svelte.d.ts +9 -20
- package/dist/components/GapCaret.svelte +26 -59
- package/dist/components/SelectionOverlay.svelte +36 -67
- package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
- package/dist/components/TailInsert.svelte +8 -55
- package/dist/components/TailInsert.svelte.d.ts +4 -6
- package/dist/components/block-content-selector.d.ts +11 -11
- package/dist/components/block-content-selector.js +11 -11
- package/dist/components/block-el-lookup.d.ts +6 -0
- package/dist/components/block-el-lookup.js +27 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
- package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
- package/dist/components/blocks/code/CodeBlock.svelte +255 -276
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
- package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
- package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
- package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
- package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
- package/dist/components/blocks/code/code-bootstrap.js +35 -28
- package/dist/components/blocks/code/code-context-actions.js +5 -4
- package/dist/components/blocks/code/code-enter.js +2 -2
- package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
- package/dist/components/blocks/code/code-fence-boundary.js +40 -66
- package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
- package/dist/components/blocks/code/code-fence-exit.js +24 -25
- package/dist/components/blocks/code/code-indent.d.ts +2 -2
- package/dist/components/blocks/code/code-indent.js +4 -7
- package/dist/components/blocks/code/code-languages.d.ts +16 -12
- package/dist/components/blocks/code/code-languages.js +58 -32
- package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
- package/dist/components/blocks/code/code-paste-surface.js +9 -18
- package/dist/components/blocks/code/code-renderer.d.ts +21 -5
- package/dist/components/blocks/code/code-renderer.js +90 -125
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
- package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
- package/dist/components/blocks/directive/activate-directives.js +18 -13
- package/dist/components/blocks/editable-leaf.d.ts +50 -74
- package/dist/components/blocks/editable-leaf.js +144 -202
- package/dist/components/blocks/editable-surface.d.ts +96 -100
- package/dist/components/blocks/editable-surface.js +101 -109
- package/dist/components/blocks/list/ListBlock.svelte +46 -90
- package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
- package/dist/components/blocks/list/task-checkbox.js +12 -7
- package/dist/components/blocks/plain-text-backend.d.ts +4 -20
- package/dist/components/blocks/plain-text-backend.js +9 -43
- package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
- package/dist/components/blocks/surface-wiring.svelte.js +15 -34
- package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
- package/dist/components/blocks/table/TableBlock.svelte +100 -165
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
- package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
- package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
- package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
- package/dist/components/blocks/table/cell-pointer.js +49 -71
- package/dist/components/blocks/table/cell-render.d.ts +24 -29
- package/dist/components/blocks/table/cell-render.js +29 -31
- package/dist/components/blocks/table/selected-cells.d.ts +7 -7
- package/dist/components/blocks/table/selected-cells.js +9 -13
- package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
- package/dist/components/blocks/table/table-caret-at-point.js +5 -5
- package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
- package/dist/components/blocks/table/table-cell-paste.js +27 -43
- package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
- package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
- package/dist/components/blocks/table/table-menu-model.js +6 -10
- package/dist/components/blocks/table/table-navigation.js +2 -2
- package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
- package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
- package/dist/components/blocks/text/auto-pair-record.js +51 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
- package/dist/components/blocks/text/click-snap-guard.js +16 -5
- package/dist/components/blocks/text/composition-seat.d.ts +17 -14
- package/dist/components/blocks/text/composition-seat.js +11 -11
- package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
- package/dist/components/blocks/text/construct-edge-delete.js +50 -65
- package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
- package/dist/components/blocks/text/construct-reveal.js +13 -14
- package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
- package/dist/components/blocks/text/delimiter-autopair.js +87 -103
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
- package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
- package/dist/components/blocks/text/edge-seat.d.ts +17 -26
- package/dist/components/blocks/text/edge-seat.js +43 -70
- package/dist/components/blocks/text/link-at-point.d.ts +9 -9
- package/dist/components/blocks/text/link-at-point.js +12 -15
- package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
- package/dist/components/blocks/text/live-join-seam.js +75 -112
- package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
- package/dist/components/blocks/text/live-selection-edit.js +32 -105
- package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
- package/dist/components/blocks/text/live-split-rebalance.js +50 -67
- package/dist/components/blocks/text/marker-completion.d.ts +7 -12
- package/dist/components/blocks/text/marker-completion.js +17 -10
- package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
- package/dist/components/blocks/text/pending-mark-insert.js +30 -49
- package/dist/components/blocks/text/screen-diff.d.ts +5 -15
- package/dist/components/blocks/text/screen-diff.js +5 -19
- package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
- package/dist/components/blocks/text/text-clipboard.js +27 -32
- package/dist/components/blocks/text/text-keydown.d.ts +20 -30
- package/dist/components/blocks/text/text-keydown.js +54 -51
- package/dist/components/blocks/text/text-render.d.ts +25 -35
- package/dist/components/blocks/text/text-render.js +82 -61
- package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
- package/dist/components/blocks/text/widget-adjacency.js +17 -17
- package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
- package/dist/components/blocks/text/widget-interaction.js +243 -208
- package/dist/components/blocks/widget-portal.d.ts +20 -29
- package/dist/components/blocks/widget-portal.js +16 -14
- package/dist/components/built-in-blocks.d.ts +3 -4
- package/dist/components/built-in-blocks.js +17 -18
- package/dist/components/drag-handle.d.ts +13 -30
- package/dist/components/drag-handle.js +25 -63
- package/dist/components/editor-built-ins.d.ts +1 -0
- package/dist/components/editor-built-ins.js +16 -0
- package/dist/components/editor-root-clipboard.d.ts +6 -6
- package/dist/components/editor-root-clipboard.js +16 -27
- package/dist/components/editor-root-document-swap.d.ts +49 -0
- package/dist/components/editor-root-document-swap.js +54 -0
- package/dist/components/editor-root-focus.d.ts +5 -4
- package/dist/components/editor-root-focus.js +51 -22
- package/dist/components/editor-root-focused-surface.d.ts +35 -0
- package/dist/components/editor-root-focused-surface.js +65 -0
- package/dist/components/editor-root-geometry.d.ts +15 -24
- package/dist/components/editor-root-geometry.js +27 -31
- package/dist/components/editor-root-gestures.d.ts +39 -0
- package/dist/components/editor-root-gestures.js +189 -0
- package/dist/components/editor-root-keydown.d.ts +10 -25
- package/dist/components/editor-root-keydown.js +19 -43
- package/dist/components/editor-root-listeners.d.ts +22 -31
- package/dist/components/editor-root-listeners.js +49 -46
- package/dist/components/editor-root-menus.d.ts +51 -0
- package/dist/components/editor-root-menus.js +147 -0
- package/dist/components/editor-root-mode-flip.d.ts +16 -11
- package/dist/components/editor-root-mode-flip.js +36 -34
- package/dist/components/editor-root-scroll-host.d.ts +22 -0
- package/dist/components/editor-root-scroll-host.js +34 -0
- package/dist/components/editor-root-test-surface.d.ts +48 -0
- package/dist/components/editor-root-test-surface.js +6 -0
- package/dist/components/image/ImageOverlayHost.svelte +44 -35
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
- package/dist/components/image/ImageProperties.svelte +37 -41
- package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
- package/dist/components/image/ImageResizeHandles.svelte +26 -30
- package/dist/components/image/image-crop.d.ts +5 -11
- package/dist/components/image/image-crop.js +5 -11
- package/dist/components/image/image-edit-commit.d.ts +19 -16
- package/dist/components/image/image-edit-commit.js +74 -38
- package/dist/components/image/image-resize.d.ts +2 -5
- package/dist/components/image/image-resize.js +3 -6
- package/dist/components/image/image-widget-editing.d.ts +3 -3
- package/dist/components/image/image-widget-editing.js +9 -9
- package/dist/components/image/widget-dom.d.ts +2 -3
- package/dist/components/image/widget-dom.js +19 -24
- package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
- package/dist/components/image/widget-selection-state.svelte.js +26 -19
- package/dist/components/kind-cue.svelte.d.ts +21 -0
- package/dist/components/kind-cue.svelte.js +35 -0
- package/dist/components/link-card/LinkCard.svelte +115 -64
- package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
- package/dist/components/link-card/LinkCardHost.svelte +42 -33
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
- package/dist/components/link-card/link-card-commit.d.ts +16 -19
- package/dist/components/link-card/link-card-commit.js +21 -30
- package/dist/components/link-card/link-card-entry.d.ts +13 -23
- package/dist/components/link-card/link-card-entry.js +16 -24
- package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
- package/dist/components/link-card/link-card-state.svelte.js +2 -2
- package/dist/components/lrd-map-gate.d.ts +4 -11
- package/dist/components/lrd-map-gate.js +5 -11
- package/dist/components/menu/BlockMenu.svelte +20 -81
- package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
- package/dist/components/menu/InlineMenuHost.svelte +191 -0
- package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
- package/dist/components/menu/MenuIcon.svelte +3 -103
- package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
- package/dist/components/menu/SelectionToolbar.svelte +380 -0
- package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
- package/dist/components/menu/clipboard-actions.d.ts +3 -4
- package/dist/components/menu/clipboard-actions.js +3 -4
- package/dist/components/menu/default-context-actions.d.ts +4 -13
- package/dist/components/menu/default-context-actions.js +49 -67
- package/dist/components/menu/flyout-placement.d.ts +2 -2
- package/dist/components/menu/flyout-placement.js +2 -2
- package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
- package/dist/components/menu/menu-presence.svelte.js +19 -0
- package/dist/components/paste-image-arm.d.ts +6 -11
- package/dist/components/paste-image-arm.js +11 -18
- package/dist/components/portal.d.ts +2 -5
- package/dist/components/portal.js +4 -7
- package/dist/core/directive/activate.d.ts +4 -5
- package/dist/core/directive/activate.js +8 -9
- package/dist/core/directive/container-opener.js +13 -12
- package/dist/core/directive/grammar.d.ts +2 -5
- package/dist/core/directive/grammar.js +10 -10
- package/dist/core/directive/kinds.d.ts +4 -7
- package/dist/core/directive/kinds.js +14 -16
- package/dist/core/directive/registry.d.ts +12 -9
- package/dist/core/directive/registry.js +19 -20
- package/dist/core/directive/text-recognizer.d.ts +3 -2
- package/dist/core/directive/text-recognizer.js +5 -9
- package/dist/core/escapable.d.ts +1 -5
- package/dist/core/escapable.js +1 -5
- package/dist/core/inline/backticks.d.ts +3 -4
- package/dist/core/inline/backticks.js +3 -4
- package/dist/core/inline/character-refs.js +2 -1
- package/dist/core/inline/destination-bytes.d.ts +6 -3
- package/dist/core/inline/destination-bytes.js +50 -8
- package/dist/core/inline/entity-widget.d.ts +4 -3
- package/dist/core/inline/entity-widget.js +6 -6
- package/dist/core/inline/format-toggle.d.ts +22 -28
- package/dist/core/inline/format-toggle.js +97 -129
- package/dist/core/inline/html-entities.d.ts +2 -3
- package/dist/core/inline/html-entities.js +2 -3
- package/dist/core/inline/html-tag-grammar.js +6 -2
- package/dist/core/inline/image-dimensions.d.ts +2 -0
- package/dist/core/inline/image-dimensions.js +19 -2
- package/dist/core/inline/image-source-bytes.d.ts +11 -0
- package/dist/core/inline/image-source-bytes.js +71 -0
- package/dist/core/inline/index.d.ts +28 -21
- package/dist/core/inline/index.js +56 -34
- package/dist/core/inline/inline-cache.d.ts +12 -15
- package/dist/core/inline/inline-cache.js +11 -14
- package/dist/core/inline/inline-widgets.d.ts +55 -68
- package/dist/core/inline/inline-widgets.js +55 -58
- package/dist/core/inline/link-destination.d.ts +31 -0
- package/dist/core/inline/link-destination.js +129 -0
- package/dist/core/inline/link-reference-resolver.d.ts +8 -6
- package/dist/core/inline/link-reference-resolver.js +10 -6
- package/dist/core/inline/link-source-bytes.d.ts +31 -0
- package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
- package/dist/core/inline/live-edit/read-back.d.ts +29 -0
- package/dist/core/inline/live-edit/read-back.js +50 -0
- package/dist/core/inline/picture.d.ts +10 -0
- package/dist/core/inline/picture.js +40 -0
- package/dist/core/inline/scan/autolinks.d.ts +7 -8
- package/dist/core/inline/scan/autolinks.js +80 -59
- package/dist/core/inline/scan/brackets.d.ts +2 -2
- package/dist/core/inline/scan/brackets.js +6 -103
- package/dist/core/inline/scan/code-spans.d.ts +4 -0
- package/dist/core/inline/scan/code-spans.js +8 -0
- package/dist/core/inline/scan/emphasis.js +10 -14
- package/dist/core/inline/scan/index.d.ts +3 -1
- package/dist/core/inline/scan/index.js +32 -33
- package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
- package/dist/core/inline/scan/plugin-syntax.js +75 -89
- package/dist/core/inline/scan/scan-state.d.ts +2 -0
- package/dist/core/inline/scan/scan-state.js +1 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
- package/dist/core/inline/scan/simple-nodes.js +2 -5
- package/dist/core/inline/scan/triggers.d.ts +17 -0
- package/dist/core/inline/scan/triggers.js +26 -0
- package/dist/core/inline/scan/url.js +8 -10
- package/dist/core/inline/transparency.d.ts +2 -1
- package/dist/core/inline/transparency.js +33 -17
- package/dist/core/inline/visibility.d.ts +30 -49
- package/dist/core/inline/visibility.js +31 -49
- package/dist/core/inline/walk.d.ts +4 -10
- package/dist/core/inline/walk.js +4 -10
- package/dist/core/inline-render.d.ts +22 -27
- package/dist/core/inline-render.js +51 -60
- package/dist/core/lines.d.ts +67 -26
- package/dist/core/lines.js +164 -33
- package/dist/core/metadata-parity.d.ts +9 -0
- package/dist/core/metadata-parity.js +25 -0
- package/dist/core/node-views.d.ts +7 -6
- package/dist/core/node-views.js +5 -5
- package/dist/core/nodes.d.ts +34 -44
- package/dist/core/nodes.js +4 -12
- package/dist/core/parser.d.ts +27 -34
- package/dist/core/parser.js +53 -67
- package/dist/core/parsers/blockquote.d.ts +5 -8
- package/dist/core/parsers/blockquote.js +11 -10
- package/dist/core/parsers/built-in-openers.d.ts +2 -5
- package/dist/core/parsers/built-in-openers.js +5 -8
- package/dist/core/parsers/fence-syntax.d.ts +36 -7
- package/dist/core/parsers/fence-syntax.js +61 -11
- package/dist/core/parsers/fenced-code.d.ts +16 -0
- package/dist/core/parsers/fenced-code.js +16 -15
- package/dist/core/parsers/heading.d.ts +19 -2
- package/dist/core/parsers/heading.js +50 -2
- package/dist/core/parsers/html-block.d.ts +3 -6
- package/dist/core/parsers/html-block.js +10 -11
- package/dist/core/parsers/indented-code.d.ts +1 -1
- package/dist/core/parsers/indented-code.js +2 -8
- package/dist/core/parsers/link-reference.d.ts +5 -3
- package/dist/core/parsers/link-reference.js +116 -120
- package/dist/core/parsers/list.d.ts +12 -5
- package/dist/core/parsers/list.js +53 -36
- package/dist/core/parsers/paragraph.d.ts +3 -3
- package/dist/core/parsers/paragraph.js +14 -5
- package/dist/core/parsers/table-completion.d.ts +2 -5
- package/dist/core/parsers/table-completion.js +7 -10
- package/dist/core/parsers/table.d.ts +8 -8
- package/dist/core/parsers/table.js +23 -26
- package/dist/core/parsers/thematic-break.js +15 -14
- package/dist/core/paths.d.ts +13 -0
- package/dist/core/paths.js +31 -0
- package/dist/core/terminator-escalation.d.ts +0 -7
- package/dist/core/terminator-escalation.js +5 -8
- package/dist/core/url-policy.d.ts +2 -5
- package/dist/core/url-policy.js +8 -12
- package/dist/cursor/caret-memory.d.ts +34 -0
- package/dist/cursor/caret-memory.js +82 -0
- package/dist/cursor/coordinate-spaces.d.ts +26 -19
- package/dist/cursor/coordinate-spaces.js +32 -20
- package/dist/cursor/dom-walk.d.ts +7 -13
- package/dist/cursor/dom-walk.js +7 -13
- package/dist/cursor/edge-affinity.d.ts +7 -35
- package/dist/cursor/edge-affinity.js +13 -44
- package/dist/cursor/focused-caret.d.ts +6 -8
- package/dist/cursor/focused-caret.js +7 -16
- package/dist/cursor/height-model.d.ts +3 -3
- package/dist/cursor/height-model.js +5 -5
- package/dist/cursor/height-oracle.d.ts +10 -7
- package/dist/cursor/height-oracle.js +26 -75
- package/dist/cursor/observe-resize.d.ts +13 -0
- package/dist/cursor/observe-resize.js +43 -0
- package/dist/cursor/overlay-rects.d.ts +2 -5
- package/dist/cursor/overlay-rects.js +2 -5
- package/dist/cursor/overlay-remeasure.d.ts +6 -7
- package/dist/cursor/overlay-remeasure.js +10 -14
- package/dist/cursor/pending-marks.d.ts +7 -9
- package/dist/cursor/pending-marks.js +6 -27
- package/dist/cursor/point-offset.d.ts +16 -10
- package/dist/cursor/point-offset.js +60 -25
- package/dist/cursor/reveal-source.d.ts +7 -11
- package/dist/cursor/reveal-source.js +10 -18
- package/dist/cursor/scroll-ancestors.d.ts +9 -20
- package/dist/cursor/scroll-ancestors.js +14 -26
- package/dist/cursor/scroll-owner.d.ts +92 -0
- package/dist/cursor/scroll-owner.js +283 -0
- package/dist/cursor/scrollport.d.ts +16 -8
- package/dist/cursor/scrollport.js +28 -5
- package/dist/cursor/sticky-column.d.ts +6 -29
- package/dist/cursor/sticky-column.js +6 -49
- package/dist/cursor/sticky-measure.d.ts +14 -9
- package/dist/cursor/sticky-measure.js +99 -49
- package/dist/cursor/surface-backend.d.ts +41 -0
- package/dist/cursor/surface-backend.js +78 -0
- package/dist/cursor/typography-estimates.d.ts +3 -3
- package/dist/cursor/typography-estimates.js +3 -3
- package/dist/cursor/visual-lines.d.ts +25 -13
- package/dist/cursor/visual-lines.js +72 -28
- package/dist/cursor/widget-edge-snap.d.ts +23 -0
- package/dist/cursor/widget-edge-snap.js +39 -0
- package/dist/cursor/widget-offset.d.ts +111 -102
- package/dist/cursor/widget-offset.js +352 -177
- package/dist/debug/diagnostics-report.d.ts +6 -6
- package/dist/debug/diagnostics-report.js +5 -5
- package/dist/debug/dump-tree.js +2 -2
- package/dist/debug/editor-diagnostics.d.ts +15 -0
- package/dist/debug/editor-diagnostics.js +33 -0
- package/dist/debug/inspect.d.ts +2 -2
- package/dist/debug/inspect.js +4 -4
- package/dist/debug/interaction-trace.d.ts +14 -15
- package/dist/debug/interaction-trace.js +19 -20
- package/dist/debug/operations-log.d.ts +1 -1
- package/dist/debug/operations-log.js +1 -1
- package/dist/decorations/buckets.d.ts +6 -12
- package/dist/decorations/buckets.js +4 -11
- package/dist/decorations/decoration-state.svelte.d.ts +2 -3
- package/dist/decorations/decoration-state.svelte.js +24 -26
- package/dist/decorations/island-dom.d.ts +10 -18
- package/dist/decorations/island-dom.js +25 -50
- package/dist/decorations/reserved-attrs.d.ts +6 -8
- package/dist/decorations/reserved-attrs.js +31 -17
- package/dist/decorations/types.d.ts +6 -7
- package/dist/decorations/types.js +2 -1
- package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
- package/dist/decorations/use-block-decorations.svelte.js +71 -0
- package/dist/decorations/widget-dom.d.ts +3 -3
- package/dist/decorations/widget-dom.js +5 -5
- package/dist/dev-warn.d.ts +5 -2
- package/dist/dev-warn.js +16 -4
- package/dist/editor-actions/ancestry-folds.d.ts +9 -14
- package/dist/editor-actions/ancestry-folds.js +13 -18
- package/dist/editor-actions/block-edit-core.d.ts +49 -22
- package/dist/editor-actions/block-edit-core.js +279 -151
- package/dist/editor-actions/block-edit-scope.d.ts +63 -50
- package/dist/editor-actions/block-edit-scope.js +100 -48
- package/dist/editor-actions/block-edit.d.ts +2 -3
- package/dist/editor-actions/block-edit.js +14 -90
- package/dist/editor-actions/commit/history.d.ts +4 -4
- package/dist/editor-actions/commit/history.js +33 -34
- package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
- package/dist/editor-actions/commit/reading-write-gate.js +56 -0
- package/dist/editor-actions/commit/text-batch.d.ts +7 -11
- package/dist/editor-actions/commit/text-batch.js +6 -7
- package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
- package/dist/editor-actions/commit/undo-controller.js +346 -216
- package/dist/editor-actions/container-block-component.d.ts +32 -51
- package/dist/editor-actions/container-block-component.js +66 -92
- package/dist/editor-actions/container-edit.d.ts +4 -2
- package/dist/editor-actions/container-edit.js +14 -44
- package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
- package/dist/editor-actions/container-exit-overrides.js +19 -21
- package/dist/editor-actions/deps.d.ts +25 -32
- package/dist/editor-actions/enter-completion.d.ts +12 -15
- package/dist/editor-actions/enter-completion.js +49 -51
- package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
- package/dist/editor-actions/focus/focus-dispatch.js +33 -52
- package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
- package/dist/editor-actions/focus/focus-landing.js +29 -14
- package/dist/editor-actions/focus/focus.d.ts +3 -2
- package/dist/editor-actions/focus/focus.js +42 -59
- package/dist/editor-actions/index.d.ts +4 -3
- package/dist/editor-actions/index.js +5 -4
- package/dist/editor-actions/inline-range-commit.d.ts +18 -16
- package/dist/editor-actions/inline-range-commit.js +45 -54
- package/dist/editor-actions/leaf-write.d.ts +11 -0
- package/dist/editor-actions/leaf-write.js +102 -0
- package/dist/editor-actions/list-context.d.ts +9 -10
- package/dist/editor-actions/list-context.js +115 -110
- package/dist/editor-actions/list-overrides.d.ts +13 -5
- package/dist/editor-actions/list-overrides.js +36 -12
- package/dist/editor-actions/merge-fallback.d.ts +10 -16
- package/dist/editor-actions/merge-fallback.js +11 -22
- package/dist/editor-actions/nested/container-actions.d.ts +37 -0
- package/dist/editor-actions/nested/container-actions.js +42 -0
- package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
- package/dist/editor-actions/nested/emptied-container.js +5 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
- package/dist/editor-actions/nested/nested-actions.js +17 -15
- package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
- package/dist/editor-actions/nested/nested-block-edit.js +40 -134
- package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
- package/dist/editor-actions/nested/nested-focus.js +33 -21
- package/dist/editor-actions/paste-coordinator.d.ts +3 -2
- package/dist/editor-actions/paste-coordinator.js +17 -13
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
- package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
- package/dist/editor-actions/plugin/container.d.ts +55 -76
- package/dist/editor-actions/plugin/container.js +105 -186
- package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
- package/dist/editor-actions/plugin/directive-container.js +7 -8
- package/dist/editor-actions/reorder-action.d.ts +7 -12
- package/dist/editor-actions/reorder-action.js +32 -48
- package/dist/editor-actions/reorder-drag.d.ts +12 -8
- package/dist/editor-actions/reorder-drag.js +45 -41
- package/dist/editor-actions/replacement-focus.d.ts +13 -21
- package/dist/editor-actions/replacement-focus.js +32 -33
- package/dist/editor-actions/search-replace.js +71 -67
- package/dist/editor-actions/stored-caret.d.ts +7 -0
- package/dist/editor-actions/stored-caret.js +10 -0
- package/dist/editor-actions/table-context.d.ts +9 -11
- package/dist/editor-actions/table-context.js +70 -93
- package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
- package/dist/editor-actions/unwrap-strategies.js +52 -63
- package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
- package/dist/editor-actions/whole-block-focus-surface.js +43 -53
- package/dist/editor-events.d.ts +25 -29
- package/dist/editor-events.js +17 -28
- package/dist/editor-keys.d.ts +96 -104
- package/dist/editor-keys.js +11 -24
- package/dist/editor-props.d.ts +91 -71
- package/dist/editor-rects.d.ts +23 -34
- package/dist/editor-rects.js +9 -77
- package/dist/env.d.ts +6 -4
- package/dist/env.js +8 -4
- package/dist/index.d.ts +6 -2
- package/dist/index.js +5 -2
- package/dist/inline-menu/inline-menu-session.d.ts +37 -0
- package/dist/inline-menu/inline-menu-session.js +98 -0
- package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
- package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
- package/dist/inline-menu/types.d.ts +77 -0
- package/dist/inline-menu/types.js +7 -0
- package/dist/invariants/child-id-parity.d.ts +23 -0
- package/dist/invariants/child-id-parity.js +39 -0
- package/dist/invariants/commit-paths.d.ts +4 -4
- package/dist/invariants/commit-paths.js +4 -4
- package/dist/invariants/commit-scope.d.ts +4 -4
- package/dist/invariants/commit-scope.js +9 -8
- package/dist/invariants/context-keys.d.ts +2 -5
- package/dist/invariants/context-keys.js +3 -6
- package/dist/invariants/descriptor.d.ts +2 -6
- package/dist/invariants/descriptor.js +2 -6
- package/dist/invariants/inline-transitions.d.ts +9 -16
- package/dist/invariants/inline-transitions.js +10 -18
- package/dist/invariants/install.d.ts +18 -27
- package/dist/invariants/install.js +29 -30
- package/dist/invariants/keeps-a-block.d.ts +7 -0
- package/dist/invariants/keeps-a-block.js +14 -0
- package/dist/invariants/landable-caret.d.ts +5 -7
- package/dist/invariants/landable-caret.js +8 -11
- package/dist/invariants/landing-focus-scroll.d.ts +7 -0
- package/dist/invariants/landing-focus-scroll.js +13 -0
- package/dist/invariants/landing-value.d.ts +13 -0
- package/dist/invariants/landing-value.js +27 -0
- package/dist/invariants/marker-css-parity.d.ts +5 -6
- package/dist/invariants/marker-css-parity.js +11 -12
- package/dist/invariants/measures-in-own-list.d.ts +6 -0
- package/dist/invariants/measures-in-own-list.js +13 -0
- package/dist/invariants/node-shape.d.ts +18 -37
- package/dist/invariants/node-shape.js +123 -79
- package/dist/invariants/open-tail.d.ts +7 -0
- package/dist/invariants/open-tail.js +45 -0
- package/dist/invariants/placement-ends-widget.d.ts +8 -0
- package/dist/invariants/placement-ends-widget.js +13 -0
- package/dist/invariants/registry.d.ts +27 -66
- package/dist/invariants/registry.js +61 -137
- package/dist/invariants/render-fidelity.d.ts +4 -4
- package/dist/invariants/render-fidelity.js +5 -5
- package/dist/invariants/selection-endpoints.d.ts +6 -7
- package/dist/invariants/selection-endpoints.js +18 -16
- package/dist/invariants/single-node-sink.d.ts +4 -5
- package/dist/invariants/single-node-sink.js +4 -5
- package/dist/invariants/snapshot-integrity.d.ts +5 -6
- package/dist/invariants/snapshot-integrity.js +1 -1
- package/dist/invariants/structural-descriptor.d.ts +6 -15
- package/dist/invariants/structural-descriptor.js +6 -15
- package/dist/menu-icons.d.ts +47 -0
- package/dist/menu-icons.js +113 -0
- package/dist/perf/instruments.d.ts +20 -5
- package/dist/perf/instruments.js +35 -15
- package/dist/perf/use-mount-gauge.svelte.js +4 -4
- package/dist/plugin.d.ts +38 -8
- package/dist/plugin.js +102 -74
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
- package/dist/plugins/admonitions/admonition-kind.js +12 -10
- package/dist/plugins/admonitions/convert-document.d.ts +5 -5
- package/dist/plugins/admonitions/convert-document.js +8 -7
- package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
- package/dist/plugins/admonitions/gh-alert.js +21 -22
- package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
- package/dist/plugins/admonitions/github-alert-kind.js +28 -37
- package/dist/plugins/admonitions/index.js +2 -2
- package/dist/plugins/admonitions/kinds.d.ts +1 -1
- package/dist/plugins/admonitions/register.js +11 -2
- package/dist/plugins/details/DetailsBlock.svelte +20 -20
- package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
- package/dist/plugins/details/details-disclosure.svelte.js +6 -7
- package/dist/plugins/details/details-kind.d.ts +6 -7
- package/dist/plugins/details/details-kind.js +44 -59
- package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
- package/dist/plugins/emoji/emoji-recognizer.js +7 -14
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
- package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +3 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
- package/dist/plugins/footnotes/footnote-definition.js +69 -45
- package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
- package/dist/plugins/footnotes/footnote-lookup.js +14 -26
- package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
- package/dist/plugins/footnotes/footnote-numbering.js +22 -31
- package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
- package/dist/plugins/footnotes/footnote-reference.js +8 -13
- package/dist/plugins/footnotes/index.js +2 -3
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
- package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
- package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
- package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/word-char.js +4 -0
- package/dist/plugins/latex/BlockMath.svelte +58 -75
- package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
- package/dist/plugins/latex/MathInline.svelte +10 -9
- package/dist/plugins/latex/flanking.d.ts +1 -0
- package/dist/plugins/latex/flanking.js +3 -0
- package/dist/plugins/latex/index.d.ts +1 -1
- package/dist/plugins/latex/latex-kind.d.ts +4 -4
- package/dist/plugins/latex/latex-kind.js +113 -85
- package/dist/plugins/latex/math-completion.d.ts +1 -1
- package/dist/plugins/latex/math-completion.js +5 -8
- package/dist/plugins/latex/math-layout.d.ts +2 -8
- package/dist/plugins/latex/math-layout.js +0 -9
- package/dist/plugins/latex/math-renderer.d.ts +17 -20
- package/dist/plugins/latex/math-renderer.js +21 -38
- package/dist/plugins/latex/math-source.d.ts +4 -8
- package/dist/plugins/latex/math-source.js +36 -75
- package/dist/plugins/latex/register.d.ts +10 -11
- package/dist/plugins/latex/register.js +24 -10
- package/dist/plugins/latex/renderer.d.ts +9 -10
- package/dist/plugins/latex/renderer.js +9 -24
- package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
- package/dist/plugins/mermaid/index.js +1 -1
- package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
- package/dist/plugins/mermaid/mermaid-kind.js +30 -47
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
- package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
- package/dist/plugins/mermaid/register.d.ts +3 -3
- package/dist/plugins/mermaid/register.js +5 -5
- package/dist/plugins/mermaid/renderer.d.ts +5 -5
- package/dist/plugins/mermaid/renderer.js +8 -11
- package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
- package/dist/plugins/parrot/parrot-plugin.js +3 -3
- package/dist/plugins/slash-commands/filter.d.ts +23 -0
- package/dist/plugins/slash-commands/filter.js +31 -0
- package/dist/plugins/slash-commands/index.d.ts +2 -0
- package/dist/plugins/slash-commands/index.js +2 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
- package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
- package/dist/plugins/slash-commands/slash-source.js +108 -0
- package/dist/plugins/toc/TocBlock.svelte +23 -22
- package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
- package/dist/plugins/toc/heading-outline.d.ts +7 -12
- package/dist/plugins/toc/heading-outline.js +22 -36
- package/dist/plugins/toc/navigation-queue.d.ts +2 -4
- package/dist/plugins/toc/toc-plugin.d.ts +5 -5
- package/dist/plugins/toc/toc-plugin.js +20 -13
- package/dist/presentation-mode.d.ts +15 -23
- package/dist/presentation-mode.js +19 -25
- package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
- package/dist/reactivity/block-list-state.svelte.js +8 -9
- package/dist/reactivity/block-window.svelte.d.ts +12 -6
- package/dist/reactivity/block-window.svelte.js +44 -17
- package/dist/reactivity/child-list.d.ts +34 -0
- package/dist/reactivity/child-list.js +48 -0
- package/dist/reactivity/content-version.svelte.d.ts +4 -7
- package/dist/reactivity/content-version.svelte.js +3 -5
- package/dist/reactivity/hold-across.d.ts +39 -0
- package/dist/reactivity/hold-across.js +57 -0
- package/dist/reactivity/layout-state.svelte.d.ts +27 -0
- package/dist/reactivity/layout-state.svelte.js +51 -0
- package/dist/reactivity/list-tree.d.ts +39 -0
- package/dist/reactivity/list-tree.js +132 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
- package/dist/reactivity/list-windowing.svelte.js +143 -292
- package/dist/reactivity/measure-batch.d.ts +6 -8
- package/dist/reactivity/measure-batch.js +5 -6
- package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
- package/dist/reactivity/publish-ref.svelte.js +21 -85
- package/dist/reactivity/scope-geometry.d.ts +6 -13
- package/dist/reactivity/scope-geometry.js +7 -14
- package/dist/reactivity/state-registry.d.ts +5 -5
- package/dist/reactivity/state-registry.js +11 -15
- package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
- package/dist/reactivity/use-container-windowing.svelte.js +64 -74
- package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
- package/dist/reactivity/use-measured-child.svelte.js +41 -0
- package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
- package/dist/reactivity/use-window-floor.svelte.js +27 -0
- package/dist/reactivity/window-slice.d.ts +4 -4
- package/dist/reactivity/window-slice.js +0 -2
- package/dist/renderer-slot.d.ts +48 -0
- package/dist/renderer-slot.js +85 -0
- package/dist/scan-index.d.ts +4 -4
- package/dist/scan-index.js +4 -4
- package/dist/schema/block-commands.d.ts +69 -54
- package/dist/schema/block-commands.js +91 -104
- package/dist/schema/block-completions.d.ts +16 -19
- package/dist/schema/block-completions.js +25 -32
- package/dist/schema/block-component-registry.d.ts +13 -14
- package/dist/schema/block-component-registry.js +19 -17
- package/dist/schema/block-kind-descriptor.d.ts +234 -168
- package/dist/schema/block-kind-descriptor.js +151 -66
- package/dist/schema/block-openers.d.ts +48 -39
- package/dist/schema/block-openers.js +73 -83
- package/dist/schema/built-in-descriptors.d.ts +3 -5
- package/dist/schema/built-in-descriptors.js +96 -80
- package/dist/schema/child-spans.d.ts +12 -10
- package/dist/schema/child-spans.js +68 -34
- package/dist/schema/closure.d.ts +18 -16
- package/dist/schema/closure.js +24 -14
- package/dist/schema/command-id.d.ts +6 -8
- package/dist/schema/command-id.js +20 -25
- package/dist/schema/commands.d.ts +79 -81
- package/dist/schema/commands.js +156 -116
- package/dist/schema/container-raw.d.ts +51 -11
- package/dist/schema/container-raw.js +143 -14
- package/dist/schema/container-rebuilders.d.ts +17 -15
- package/dist/schema/container-rebuilders.js +30 -22
- package/dist/schema/context-actions.d.ts +25 -13
- package/dist/schema/context-actions.js +32 -17
- package/dist/schema/define-plugin-block.d.ts +8 -6
- package/dist/schema/define-plugin-block.js +6 -4
- package/dist/schema/fenced-code-raw.d.ts +30 -17
- package/dist/schema/fenced-code-raw.js +155 -107
- package/dist/schema/global-commands.d.ts +6 -6
- package/dist/schema/global-commands.js +14 -22
- package/dist/schema/height-estimates.d.ts +31 -0
- package/dist/schema/height-estimates.js +64 -0
- package/dist/schema/inline-construct-policy.d.ts +42 -55
- package/dist/schema/inline-construct-policy.js +36 -35
- package/dist/schema/insert-catalogue.d.ts +30 -0
- package/dist/schema/insert-catalogue.js +95 -0
- package/dist/schema/keybinding-overrides.d.ts +9 -11
- package/dist/schema/keybinding-overrides.js +1 -1
- package/dist/schema/keybindings.d.ts +15 -7
- package/dist/schema/keybindings.js +21 -9
- package/dist/schema/merge-rules.d.ts +5 -7
- package/dist/schema/merge-rules.js +7 -9
- package/dist/schema/opener-priorities.d.ts +4 -4
- package/dist/schema/opener-priorities.js +4 -4
- package/dist/schema/operations.d.ts +9 -11
- package/dist/schema/operations.js +3 -3
- package/dist/schema/page-role.d.ts +14 -0
- package/dist/schema/page-role.js +19 -0
- package/dist/schema/plugin-activation.d.ts +4 -6
- package/dist/schema/plugin-activation.js +12 -10
- package/dist/schema/plugin-editor-context.d.ts +25 -10
- package/dist/schema/plugin-editor-context.js +40 -9
- package/dist/schema/plugin-install.d.ts +49 -17
- package/dist/schema/plugin-install.js +51 -25
- package/dist/schema/plugin-kind.d.ts +12 -8
- package/dist/schema/plugin-kind.js +35 -42
- package/dist/schema/plugin-name.js +3 -3
- package/dist/schema/plugin-registry.d.ts +54 -0
- package/dist/schema/plugin-registry.js +70 -0
- package/dist/schema/reading.d.ts +23 -0
- package/dist/schema/reading.js +7 -0
- package/dist/schema/register-once.d.ts +3 -5
- package/dist/schema/register-once.js +7 -16
- package/dist/schema/registration-checks.d.ts +12 -16
- package/dist/schema/registration-checks.js +35 -51
- package/dist/schema/registration-pairs.d.ts +54 -0
- package/dist/schema/registration-pairs.js +48 -0
- package/dist/schema/registration-pending.d.ts +8 -12
- package/dist/schema/registration-pending.js +9 -9
- package/dist/schema/registry-reset.d.ts +8 -4
- package/dist/schema/registry-reset.js +13 -26
- package/dist/schema/registry-view.d.ts +25 -13
- package/dist/schema/registry-view.js +26 -20
- package/dist/schema/reserved-chords.d.ts +9 -10
- package/dist/schema/reserved-chords.js +73 -78
- package/dist/schema/reserved-chrome.d.ts +12 -11
- package/dist/schema/reserved-chrome.js +15 -11
- package/dist/schema/setext-raw.d.ts +13 -0
- package/dist/schema/setext-raw.js +33 -0
- package/dist/schema/stored-as.d.ts +20 -0
- package/dist/schema/stored-as.js +6 -0
- package/dist/schema/table-cell-raw.d.ts +18 -7
- package/dist/schema/table-cell-raw.js +28 -7
- package/dist/schema/whole-block-unit.d.ts +5 -4
- package/dist/schema/whole-block-unit.js +5 -4
- package/dist/search/document-scan.d.ts +3 -3
- package/dist/search/document-scan.js +2 -2
- package/dist/search/matcher.d.ts +1 -1
- package/dist/search/regex-executor.d.ts +5 -6
- package/dist/search/regex-executor.js +6 -8
- package/dist/search/replace.d.ts +2 -5
- package/dist/search/replace.js +2 -5
- package/dist/search/search-state.svelte.d.ts +5 -5
- package/dist/search/search-state.svelte.js +12 -16
- package/dist/selection/autoscroll.d.ts +6 -9
- package/dist/selection/block-hit-test.d.ts +16 -24
- package/dist/selection/block-hit-test.js +29 -22
- package/dist/selection/caret-doors.d.ts +15 -14
- package/dist/selection/caret-doors.js +37 -26
- package/dist/selection/caret-landing.d.ts +62 -0
- package/dist/selection/caret-landing.js +157 -0
- package/dist/selection/caret-restore.d.ts +17 -10
- package/dist/selection/caret-restore.js +10 -22
- package/dist/selection/caret-target.d.ts +30 -0
- package/dist/selection/caret-target.js +84 -0
- package/dist/selection/char-endpoint-snap.d.ts +6 -10
- package/dist/selection/char-endpoint-snap.js +8 -14
- package/dist/selection/clipboard-text.d.ts +5 -12
- package/dist/selection/clipboard-text.js +69 -172
- package/dist/selection/covered-block.d.ts +6 -8
- package/dist/selection/covered-block.js +8 -19
- package/dist/selection/cross-block/clipboard.d.ts +3 -2
- package/dist/selection/cross-block/clipboard.js +13 -4
- package/dist/selection/cross-block/dispatch.d.ts +47 -43
- package/dist/selection/cross-block/dispatch.js +12 -23
- package/dist/selection/cross-block/format-range.d.ts +18 -21
- package/dist/selection/cross-block/format-range.js +104 -103
- package/dist/selection/cross-block/format-toggle.d.ts +10 -15
- package/dist/selection/cross-block/format-toggle.js +28 -33
- package/dist/selection/cross-block/keydown.d.ts +4 -4
- package/dist/selection/cross-block/keydown.js +93 -152
- package/dist/selection/cross-block/ops.d.ts +19 -34
- package/dist/selection/cross-block/ops.js +110 -95
- package/dist/selection/cross-block/paste.d.ts +2 -3
- package/dist/selection/cross-block/paste.js +61 -104
- package/dist/selection/cross-block/pointer.d.ts +17 -15
- package/dist/selection/cross-block/pointer.js +74 -25
- package/dist/selection/cross-block/type-replace.d.ts +4 -6
- package/dist/selection/cross-block/type-replace.js +53 -146
- package/dist/selection/dead-space-caret.d.ts +20 -28
- package/dist/selection/dead-space-caret.js +79 -87
- package/dist/selection/drag-pointer.d.ts +22 -5
- package/dist/selection/drag-pointer.js +63 -31
- package/dist/selection/gap-caret.d.ts +17 -28
- package/dist/selection/gap-caret.js +14 -26
- package/dist/selection/grid-selection.d.ts +12 -0
- package/dist/selection/grid-selection.js +22 -0
- package/dist/selection/keyboard-extend.d.ts +27 -39
- package/dist/selection/keyboard-extend.js +94 -116
- package/dist/selection/multi-click.d.ts +37 -0
- package/dist/selection/multi-click.js +197 -0
- package/dist/selection/native-bridge.d.ts +30 -37
- package/dist/selection/native-bridge.js +80 -100
- package/dist/selection/nearest-block.d.ts +17 -12
- package/dist/selection/nearest-block.js +37 -18
- package/dist/selection/path-lookup.d.ts +31 -14
- package/dist/selection/path-lookup.js +110 -20
- package/dist/selection/path-math.d.ts +9 -11
- package/dist/selection/path-math.js +5 -7
- package/dist/selection/pointer-gesture.d.ts +9 -0
- package/dist/selection/pointer-gesture.js +11 -0
- package/dist/selection/pointer-session.d.ts +10 -16
- package/dist/selection/pointer-session.js +6 -7
- package/dist/selection/primitives.d.ts +64 -33
- package/dist/selection/primitives.js +61 -53
- package/dist/selection/range-coverage.d.ts +94 -0
- package/dist/selection/range-coverage.js +365 -0
- package/dist/selection/range-delete-ceremony.d.ts +28 -74
- package/dist/selection/range-delete-ceremony.js +100 -141
- package/dist/selection/range-delete-chrome.d.ts +20 -33
- package/dist/selection/range-delete-chrome.js +53 -78
- package/dist/selection/range-delete-table-coverage.d.ts +11 -25
- package/dist/selection/range-delete-table-coverage.js +42 -112
- package/dist/selection/range-delete-table.d.ts +14 -12
- package/dist/selection/range-delete-table.js +106 -310
- package/dist/selection/range-delete.d.ts +18 -19
- package/dist/selection/range-delete.js +83 -123
- package/dist/selection/round-trip-restore.d.ts +18 -0
- package/dist/selection/round-trip-restore.js +19 -0
- package/dist/selection/selection-announcer.d.ts +17 -0
- package/dist/selection/selection-announcer.js +25 -0
- package/dist/selection/selection-description.d.ts +4 -3
- package/dist/selection/selection-description.js +5 -4
- package/dist/selection/selection-drop.d.ts +52 -0
- package/dist/selection/selection-drop.js +317 -0
- package/dist/selection/selection-restore.d.ts +20 -33
- package/dist/selection/selection-restore.js +21 -44
- package/dist/selection/selection-state.svelte.d.ts +50 -42
- package/dist/selection/selection-state.svelte.js +144 -98
- package/dist/selection/shared-keydown.d.ts +22 -27
- package/dist/selection/shared-keydown.js +25 -45
- package/dist/selection/table-endpoint-snap.d.ts +17 -41
- package/dist/selection/table-endpoint-snap.js +54 -80
- package/dist/selection/table-rect-extend.d.ts +3 -6
- package/dist/selection/table-rect-extend.js +19 -14
- package/dist/styles/editor-theme.css +75 -53
- package/dist/styles/editor.css +248 -139
- package/dist/testing/conformance-core.d.ts +50 -18
- package/dist/testing/conformance-core.js +88 -50
- package/dist/testing/container-conformance.d.ts +48 -84
- package/dist/testing/container-conformance.js +159 -285
- package/dist/testing/headless-actions.d.ts +34 -19
- package/dist/testing/headless-actions.js +116 -65
- package/dist/testing/headless-block-list.svelte.d.ts +16 -0
- package/dist/testing/headless-block-list.svelte.js +22 -0
- package/dist/testing/inline-conformance.d.ts +15 -22
- package/dist/testing/inline-conformance.js +131 -148
- package/dist/testing/kind-conformance.d.ts +19 -24
- package/dist/testing/kind-conformance.js +204 -117
- package/dist/testing/kit-reading.d.ts +7 -0
- package/dist/testing/kit-reading.js +16 -0
- package/dist/testing/mount-dom-stubs.d.ts +4 -5
- package/dist/testing/mount-dom-stubs.js +8 -5
- package/dist/testing/parse-convergence.d.ts +10 -10
- package/dist/testing/parse-convergence.js +14 -49
- package/dist/testing.d.ts +13 -9
- package/dist/testing.js +28 -38
- package/dist/tree-operations/blockquote.d.ts +8 -14
- package/dist/tree-operations/blockquote.js +25 -45
- package/dist/tree-operations/chain-rebuild.d.ts +34 -25
- package/dist/tree-operations/chain-rebuild.js +115 -52
- package/dist/tree-operations/children.d.ts +5 -9
- package/dist/tree-operations/children.js +7 -11
- package/dist/tree-operations/cleanup.d.ts +6 -7
- package/dist/tree-operations/cleanup.js +14 -11
- package/dist/tree-operations/clone.js +5 -4
- package/dist/tree-operations/container-lift.d.ts +10 -5
- package/dist/tree-operations/container-lift.js +20 -14
- package/dist/tree-operations/container-offsets.d.ts +22 -0
- package/dist/tree-operations/container-offsets.js +89 -0
- package/dist/tree-operations/content-write.d.ts +52 -29
- package/dist/tree-operations/content-write.js +155 -110
- package/dist/tree-operations/index.d.ts +4 -4
- package/dist/tree-operations/index.js +4 -4
- package/dist/tree-operations/keep-one-block.d.ts +10 -0
- package/dist/tree-operations/keep-one-block.js +19 -0
- package/dist/tree-operations/leaf-range.d.ts +33 -0
- package/dist/tree-operations/leaf-range.js +67 -0
- package/dist/tree-operations/list/empty-check.d.ts +2 -3
- package/dist/tree-operations/list/empty-check.js +4 -4
- package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
- package/dist/tree-operations/list/exit-replacement.js +4 -9
- package/dist/tree-operations/list/item-partition.d.ts +2 -2
- package/dist/tree-operations/list/item-partition.js +2 -2
- package/dist/tree-operations/list/list-builders.d.ts +18 -16
- package/dist/tree-operations/list/list-builders.js +59 -30
- package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
- package/dist/tree-operations/list/ordered-markers.js +7 -16
- package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
- package/dist/tree-operations/list/reconcile-task.js +80 -23
- package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
- package/dist/tree-operations/list/sublist-separator.js +20 -27
- package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
- package/dist/tree-operations/list/task-paragraph.js +54 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
- package/dist/tree-operations/list/unwrap-merge.js +44 -79
- package/dist/tree-operations/node-ops.d.ts +30 -52
- package/dist/tree-operations/node-ops.js +152 -218
- package/dist/tree-operations/node-primitives.d.ts +44 -31
- package/dist/tree-operations/node-primitives.js +84 -60
- package/dist/tree-operations/open-tail.d.ts +25 -0
- package/dist/tree-operations/open-tail.js +100 -0
- package/dist/tree-operations/parse-block.d.ts +15 -2
- package/dist/tree-operations/parse-block.js +19 -4
- package/dist/tree-operations/paste/apply.d.ts +7 -8
- package/dist/tree-operations/paste/apply.js +33 -63
- package/dist/tree-operations/paste/body-write.d.ts +8 -6
- package/dist/tree-operations/paste/body-write.js +13 -14
- package/dist/tree-operations/paste/container-match.d.ts +7 -10
- package/dist/tree-operations/paste/container-match.js +76 -58
- package/dist/tree-operations/paste/container-paste.d.ts +3 -3
- package/dist/tree-operations/paste/container-paste.js +3 -3
- package/dist/tree-operations/paste/dispatch.d.ts +26 -29
- package/dist/tree-operations/paste/dispatch.js +68 -53
- package/dist/tree-operations/paste/focus-target.d.ts +11 -14
- package/dist/tree-operations/paste/focus-target.js +13 -18
- package/dist/tree-operations/paste/hooks.d.ts +7 -12
- package/dist/tree-operations/paste/hooks.js +49 -46
- package/dist/tree-operations/paste/line-ending.d.ts +11 -0
- package/dist/tree-operations/paste/line-ending.js +32 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
- package/dist/tree-operations/paste/list-absorb.js +17 -19
- package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
- package/dist/tree-operations/paste/list-break-out.js +24 -32
- package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
- package/dist/tree-operations/paste/parent-scope.js +9 -16
- package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
- package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
- package/dist/tree-operations/paste/paste-replacement.js +73 -42
- package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
- package/dist/tree-operations/paste/paste-transforms.js +18 -27
- package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
- package/dist/tree-operations/paste/replacement-parse.js +24 -0
- package/dist/tree-operations/paste/strategy.d.ts +1 -1
- package/dist/tree-operations/paste/strategy.js +1 -1
- package/dist/tree-operations/paste/table-slice.js +15 -10
- package/dist/tree-operations/paste-surfaces.d.ts +18 -29
- package/dist/tree-operations/paste-surfaces.js +14 -10
- package/dist/tree-operations/path-mutate.d.ts +7 -8
- package/dist/tree-operations/path-mutate.js +4 -4
- package/dist/tree-operations/reorder-unit.d.ts +4 -5
- package/dist/tree-operations/reorder-unit.js +5 -6
- package/dist/tree-operations/reorder.d.ts +7 -9
- package/dist/tree-operations/reorder.js +39 -40
- package/dist/tree-operations/settle.d.ts +42 -53
- package/dist/tree-operations/settle.js +241 -162
- package/dist/tree-operations/sharing.d.ts +5 -5
- package/dist/tree-operations/splice-many.d.ts +5 -5
- package/dist/tree-operations/splice-many.js +5 -5
- package/dist/tree-operations/stored-as.d.ts +13 -0
- package/dist/tree-operations/stored-as.js +48 -0
- package/dist/tree-operations/structural-change.d.ts +11 -15
- package/dist/tree-operations/structural-change.js +10 -14
- package/dist/tree-operations/structural-suffix.d.ts +22 -0
- package/dist/tree-operations/structural-suffix.js +61 -0
- package/dist/tree-operations/sub-table-copy.d.ts +7 -0
- package/dist/tree-operations/sub-table-copy.js +40 -36
- package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
- package/dist/tree-operations/table-grid-clipboard.js +11 -36
- package/dist/tree-operations/table-mutations.d.ts +7 -3
- package/dist/tree-operations/table-mutations.js +45 -9
- package/dist/tree-operations/unshare.d.ts +11 -15
- package/dist/tree-operations/unshare.js +15 -17
- package/dist/undo/manager.js +1 -1
- package/dist/undo/types.d.ts +2 -2
- package/docs/guide/consumer-guide.md +329 -205
- package/docs/guide/directives.md +7 -7
- package/docs/guide/plugin-api.md +267 -183
- package/docs/guide/plugin-guide.md +341 -235
- package/docs/guide/plugin-testing.md +96 -82
- package/package.json +17 -21
- package/dist/ambient/ambient-cursor.d.ts +0 -41
- package/dist/ambient/ambient-cursor.js +0 -120
- package/dist/components/blocks/code/code-paste.d.ts +0 -24
- package/dist/components/blocks/code/code-paste.js +0 -21
- package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
- package/dist/components/blocks/table/cell-clipboard.js +0 -67
- package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
- package/dist/components/blocks/text/hidden-suffix.js +0 -15
- package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
- package/dist/components/image/image-source-bytes.d.ts +0 -15
- package/dist/components/image/image-source-bytes.js +0 -80
- package/dist/cursor/content-offsets.d.ts +0 -29
- package/dist/cursor/content-offsets.js +0 -151
- package/dist/cursor/reveal-anchor.d.ts +0 -30
- package/dist/cursor/reveal-anchor.js +0 -31
- package/dist/invariants/split-landing.d.ts +0 -8
- package/dist/invariants/split-landing.js +0 -15
- package/dist/selection/double-click-trim.d.ts +0 -17
- package/dist/selection/double-click-trim.js +0 -57
- package/dist/tree-operations/list/terminator.d.ts +0 -17
- package/dist/tree-operations/list/terminator.js +0 -60
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
- package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
|
@@ -1,14 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Declaring the names plugin kinds take, block and inline, and which plugin declared each: a
|
|
3
|
+
* kind's owner is the plugin whose setup declared it, and it decides where the kind resolves.
|
|
4
|
+
*/
|
|
1
5
|
import { BLOCK_KIND_TABLE, isBuiltinInlineKind } from '../core/nodes';
|
|
2
|
-
import { currentInstallingPlugin, pluginKindOwner, recordPluginKindOwner } from './plugin-install';
|
|
3
6
|
import { isValidPluginName } from './plugin-name';
|
|
4
|
-
import {
|
|
5
|
-
const declaredPluginKinds =
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
import { createPluginRegistry } from './plugin-registry';
|
|
8
|
+
const declaredPluginKinds = createPluginRegistry({
|
|
9
|
+
label: 'declarePluginKind',
|
|
10
|
+
isBuiltin: () => false
|
|
11
|
+
});
|
|
12
|
+
// Names a plugin kind must not take: `document` is `Document.kind` and `global` is the
|
|
13
|
+
// keybinding-override scope, so neither appears in `BLOCK_KIND_TABLE`.
|
|
8
14
|
const RESERVED_KIND_NAMES = new Set(['document', 'global']);
|
|
9
15
|
export function declarePluginKind(name) {
|
|
10
16
|
if (!isValidPluginName(name)) {
|
|
11
|
-
throw new Error(`declarePluginKind: invalid kind name "${name}"
|
|
17
|
+
throw new Error(`declarePluginKind: invalid kind name "${name}"; lowercase first letter, then letters/digits/hyphens`);
|
|
12
18
|
}
|
|
13
19
|
if (name in BLOCK_KIND_TABLE) {
|
|
14
20
|
throw new Error(`declarePluginKind: "${name}" is a built-in BlockKind`);
|
|
@@ -16,71 +22,58 @@ export function declarePluginKind(name) {
|
|
|
16
22
|
if (RESERVED_KIND_NAMES.has(name)) {
|
|
17
23
|
throw new Error(`declarePluginKind: "${name}" is a reserved structural sentinel`);
|
|
18
24
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (devReplacesRegistration())
|
|
23
|
-
return name;
|
|
24
|
-
const owner = pluginKindOwner(name);
|
|
25
|
-
throw new Error(`declarePluginKind: "${name}" was already declared by another plugin` +
|
|
26
|
-
(owner ? ` — first declared by plugin '${owner}'` : ''));
|
|
27
|
-
}
|
|
28
|
-
declaredPluginKinds.add(name);
|
|
29
|
-
const installer = currentInstallingPlugin();
|
|
30
|
-
if (installer)
|
|
31
|
-
recordPluginKindOwner(name, installer);
|
|
25
|
+
const owner = declaredPluginKinds.ownerOf(name);
|
|
26
|
+
declaredPluginKinds.register(name, true, `declarePluginKind: "${name}" was already declared by another plugin` +
|
|
27
|
+
(owner ? ` — first declared by plugin '${owner}'` : ''));
|
|
32
28
|
return name;
|
|
33
29
|
}
|
|
30
|
+
/** The plugin whose setup declared `kind`; null for a built-in or a kind declared outside one. */
|
|
31
|
+
export function pluginKindOwner(kind) {
|
|
32
|
+
return declaredPluginKinds.ownerOf(kind);
|
|
33
|
+
}
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* register against a kind that doesn't exist.
|
|
35
|
+
* The branded kind for a declared name, without an unchecked cast. Throws for an undeclared name,
|
|
36
|
+
* so a typo cannot quietly register against a kind that does not exist.
|
|
38
37
|
*/
|
|
39
38
|
export function declaredPluginKind(name) {
|
|
40
39
|
if (!declaredPluginKinds.has(name)) {
|
|
41
|
-
throw new Error(`declaredPluginKind: "${name}" has not been declared
|
|
40
|
+
throw new Error(`declaredPluginKind: "${name}" has not been declared; call declarePluginKind first`);
|
|
42
41
|
}
|
|
43
42
|
return name;
|
|
44
43
|
}
|
|
45
44
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* throw.
|
|
45
|
+
* A module that may run twice (hot reload, a re-imported registration) asks this first instead of
|
|
46
|
+
* catching {@link declarePluginKind}'s or {@link declaredPluginKind}'s throw.
|
|
49
47
|
*/
|
|
50
48
|
export function isBlockKindDeclared(name) {
|
|
51
49
|
return declaredPluginKinds.has(name);
|
|
52
50
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
51
|
+
const declaredPluginInlineKinds = createPluginRegistry({
|
|
52
|
+
label: 'declarePluginInlineKind',
|
|
53
|
+
isBuiltin: () => false
|
|
54
|
+
});
|
|
57
55
|
export function declarePluginInlineKind(name) {
|
|
58
56
|
if (!isValidPluginName(name)) {
|
|
59
|
-
throw new Error(`declarePluginInlineKind: invalid kind name "${name}"
|
|
57
|
+
throw new Error(`declarePluginInlineKind: invalid kind name "${name}"; lowercase first letter, then letters/digits/hyphens`);
|
|
60
58
|
}
|
|
61
59
|
if (isBuiltinInlineKind(name)) {
|
|
62
60
|
throw new Error(`declarePluginInlineKind: "${name}" is a built-in InlineNodeKind`);
|
|
63
61
|
}
|
|
64
|
-
|
|
65
|
-
// Dev re-eval survival — see declarePluginKind. Production/test keep the throw.
|
|
66
|
-
if (devReplacesRegistration())
|
|
67
|
-
return name;
|
|
68
|
-
throw new Error(`declarePluginInlineKind: "${name}" was already declared by another plugin`);
|
|
69
|
-
}
|
|
70
|
-
declaredPluginInlineKinds.add(name);
|
|
62
|
+
declaredPluginInlineKinds.register(name, true, `declarePluginInlineKind: "${name}" was already declared by another plugin`);
|
|
71
63
|
return name;
|
|
72
64
|
}
|
|
73
65
|
/** The inline mirror of {@link declaredPluginKind}; throws for an undeclared name. */
|
|
74
66
|
export function declaredPluginInlineKind(name) {
|
|
75
67
|
if (!declaredPluginInlineKinds.has(name)) {
|
|
76
|
-
throw new Error(`declaredPluginInlineKind: "${name}" has not been declared
|
|
68
|
+
throw new Error(`declaredPluginInlineKind: "${name}" has not been declared; call declarePluginInlineKind first`);
|
|
77
69
|
}
|
|
78
70
|
return name;
|
|
79
71
|
}
|
|
72
|
+
/** The inline mirror of {@link pluginKindOwner}. */
|
|
73
|
+
export function pluginInlineKindOwner(kind) {
|
|
74
|
+
return declaredPluginInlineKinds.ownerOf(kind);
|
|
75
|
+
}
|
|
80
76
|
/** The inline mirror of {@link isBlockKindDeclared}. */
|
|
81
77
|
export function isInlineKindDeclared(name) {
|
|
82
78
|
return declaredPluginInlineKinds.has(name);
|
|
83
79
|
}
|
|
84
|
-
export function __clearDeclaredPluginInlineKindsForTests() {
|
|
85
|
-
declaredPluginInlineKinds.clear();
|
|
86
|
-
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// The frozen plugin
|
|
2
|
-
//
|
|
3
|
-
// there would close a cycle.
|
|
1
|
+
// The frozen plugin name pattern, shared by `plugin-kind.ts` and `plugin-install.ts`. It sits in
|
|
2
|
+
// its own file with no imports: `plugin-kind` already imports `plugin-install`, so keeping the
|
|
3
|
+
// pattern there would close a cycle.
|
|
4
4
|
const PLUGIN_NAME_PATTERN = /^[a-z][a-zA-Z0-9-]*$/;
|
|
5
5
|
export function isValidPluginName(name) {
|
|
6
6
|
return PLUGIN_NAME_PATTERN.test(name);
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The store every registration a plugin can reach is built on. A registry is register-once (a
|
|
3
|
+
* dev server replaces), answers reads only through an editor's `PluginActivation`, and is cleared
|
|
4
|
+
* by the test reset except for built-ins. An entry answers to the plugin whose setup registered
|
|
5
|
+
* it, except in a kind registry, where a kind a plugin declared takes that plugin instead.
|
|
6
|
+
*/
|
|
7
|
+
import type { AnyBlockKind, AnyInlineKind } from '../core/nodes';
|
|
8
|
+
import { type PluginActivation } from './plugin-activation';
|
|
9
|
+
export interface RegistryRecord<K, V> {
|
|
10
|
+
readonly key: K;
|
|
11
|
+
readonly value: V;
|
|
12
|
+
/** The plugin whose activation the entry answers to. */
|
|
13
|
+
readonly owner: string | null;
|
|
14
|
+
}
|
|
15
|
+
export interface PluginRegistry<K, V> {
|
|
16
|
+
/** Throws on a taken key, `conflict` being the message; a dev server replaces instead. */
|
|
17
|
+
register(key: K, value: V, conflict?: string): void;
|
|
18
|
+
/** `register` for an editor built-in whose key `isBuiltin` can't recognize: owned by no plugin
|
|
19
|
+
* and kept by the test reset. */
|
|
20
|
+
registerCore(key: K, value: V, conflict?: string): void;
|
|
21
|
+
/** Replace a registered key's value in place, keeping its owner and its position. */
|
|
22
|
+
update(key: K, value: V): void;
|
|
23
|
+
/** Registration-time question, blind to activation: is the key taken? */
|
|
24
|
+
has(key: K): boolean;
|
|
25
|
+
ownerOf(key: K): string | null;
|
|
26
|
+
/** The value where `activation` resolves its owner (`resolvesIn`), else undefined. */
|
|
27
|
+
get(key: K, activation: PluginActivation): V | undefined;
|
|
28
|
+
/** Every entry `activation` resolves, in registration order. */
|
|
29
|
+
entries(activation: PluginActivation): [K, V][];
|
|
30
|
+
/** For a read whose key only an already-filtered route can produce, or that must see every
|
|
31
|
+
* entry (a descriptor, a registration check). */
|
|
32
|
+
getIgnoringActivation(key: K): V | undefined;
|
|
33
|
+
/** Every entry with its owner, in registration order, for an index a module derives and
|
|
34
|
+
* filters with `resolvesIn` at its own read. */
|
|
35
|
+
records(): RegistryRecord<K, V>[];
|
|
36
|
+
}
|
|
37
|
+
/** A registry keyed by a block or inline kind. It has no `registerCore`: `isBuiltin` already
|
|
38
|
+
* recognizes a built-in kind, so the reset keeps the entry the editor registered for it. */
|
|
39
|
+
export type KindRegistry<K, V> = Omit<PluginRegistry<K, V>, 'registerCore'>;
|
|
40
|
+
export interface PluginRegistryOptions<K> {
|
|
41
|
+
/** The registering function's name, which starts the default duplicate message. */
|
|
42
|
+
label: string;
|
|
43
|
+
/** A built-in key survives the test reset when no plugin registered it. */
|
|
44
|
+
isBuiltin: (key: K) => boolean;
|
|
45
|
+
/** Runs after every change, the reset included, so a derived cache can drop itself. */
|
|
46
|
+
onChange?: () => void;
|
|
47
|
+
}
|
|
48
|
+
type RefuseKindKey<K> = [K] extends [AnyBlockKind | AnyInlineKind] ? {
|
|
49
|
+
kindKeyNeedsAKindRegistry: never;
|
|
50
|
+
} : unknown;
|
|
51
|
+
export declare function createPluginRegistry<K, V>(options: PluginRegistryOptions<K> & RefuseKindKey<K>): PluginRegistry<K, V>;
|
|
52
|
+
export declare function createBlockKindRegistry<V>(options: PluginRegistryOptions<AnyBlockKind>): KindRegistry<AnyBlockKind, V>;
|
|
53
|
+
export declare function createInlineKindRegistry<V>(options: PluginRegistryOptions<AnyInlineKind>): KindRegistry<AnyInlineKind, V>;
|
|
54
|
+
export {};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { currentInstallingPlugin, registerAsCore } from './plugin-install';
|
|
2
|
+
import { resolvesIn } from './plugin-activation';
|
|
3
|
+
import { registerOnce } from './register-once';
|
|
4
|
+
import { enrollTestReset } from './registry-reset';
|
|
5
|
+
// Last: `plugin-kind` builds its registries at load, so everything they call must be loaded first.
|
|
6
|
+
import { pluginInlineKindOwner, pluginKindOwner } from './plugin-kind';
|
|
7
|
+
export function createPluginRegistry(options) {
|
|
8
|
+
return buildRegistry(options, (_key, registrant) => registrant);
|
|
9
|
+
}
|
|
10
|
+
export function createBlockKindRegistry(options) {
|
|
11
|
+
return buildRegistry(options, (key, registrant) => pluginKindOwner(key) ?? registrant);
|
|
12
|
+
}
|
|
13
|
+
export function createInlineKindRegistry(options) {
|
|
14
|
+
return buildRegistry(options, (key, registrant) => pluginInlineKindOwner(key) ?? registrant);
|
|
15
|
+
}
|
|
16
|
+
// Creating a registry enrolls its reset, so no registry can be left out of the reset.
|
|
17
|
+
function buildRegistry(options, answersTo) {
|
|
18
|
+
const entries = new Map();
|
|
19
|
+
const changed = () => options.onChange?.();
|
|
20
|
+
const owner = (key, entry) => answersTo(key, entry.registrant);
|
|
21
|
+
enrollTestReset(() => {
|
|
22
|
+
for (const [key, entry] of entries) {
|
|
23
|
+
// The editor's own entries survive; a plugin's never do, whichever plugin it answers to.
|
|
24
|
+
const builtin = entry.registrant === null && options.isBuiltin(key);
|
|
25
|
+
if (!entry.core && !builtin)
|
|
26
|
+
entries.delete(key);
|
|
27
|
+
}
|
|
28
|
+
changed();
|
|
29
|
+
});
|
|
30
|
+
const store = (key, value, conflict, core) => {
|
|
31
|
+
const registrant = currentInstallingPlugin();
|
|
32
|
+
registerOnce(entries.has(key), () => {
|
|
33
|
+
entries.set(key, { value, registrant, core });
|
|
34
|
+
changed();
|
|
35
|
+
}, conflict ??
|
|
36
|
+
`${options.label}: "${String(key)}" is already registered. Registrations are register-once.`);
|
|
37
|
+
};
|
|
38
|
+
return {
|
|
39
|
+
register: (key, value, conflict) => store(key, value, conflict, false),
|
|
40
|
+
// The editor's bootstrap and the directive grammar run inside `registerAsCore` too, so one
|
|
41
|
+
// function decides what belongs to no plugin.
|
|
42
|
+
registerCore: (key, value, conflict) => registerAsCore(() => store(key, value, conflict, true)),
|
|
43
|
+
update(key, value) {
|
|
44
|
+
const entry = entries.get(key);
|
|
45
|
+
if (!entry)
|
|
46
|
+
throw new Error(`${options.label}: cannot update "${String(key)}"; it is not registered`);
|
|
47
|
+
entries.set(key, { ...entry, value });
|
|
48
|
+
changed();
|
|
49
|
+
},
|
|
50
|
+
has: (key) => entries.has(key),
|
|
51
|
+
ownerOf(key) {
|
|
52
|
+
const entry = entries.get(key);
|
|
53
|
+
return entry ? owner(key, entry) : null;
|
|
54
|
+
},
|
|
55
|
+
get(key, activation) {
|
|
56
|
+
const entry = entries.get(key);
|
|
57
|
+
return entry && resolvesIn(activation, owner(key, entry)) ? entry.value : undefined;
|
|
58
|
+
},
|
|
59
|
+
entries(activation) {
|
|
60
|
+
const out = [];
|
|
61
|
+
for (const [key, entry] of entries) {
|
|
62
|
+
if (resolvesIn(activation, owner(key, entry)))
|
|
63
|
+
out.push([key, entry.value]);
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
},
|
|
67
|
+
getIgnoringActivation: (key) => entries.get(key)?.value,
|
|
68
|
+
records: () => [...entries].map(([key, entry]) => ({ key, value: entry.value, owner: owner(key, entry) }))
|
|
69
|
+
};
|
|
70
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How one editor reads its own bytes: its grammar, its document's link-reference definitions and
|
|
3
|
+
* its presentation mode. The editor builds one and every internal parse, reparse and join cleanup
|
|
4
|
+
* takes it whole, so no read can pair this editor's bytes with another reading's parts.
|
|
5
|
+
* The resolver and the mode change while the editor lives: read them at use, never copy them.
|
|
6
|
+
*/
|
|
7
|
+
import type { LinkReferenceResolver } from '../core/inline/link-reference-resolver';
|
|
8
|
+
import type { PresentationMode } from '../presentation-mode';
|
|
9
|
+
import type { GrammarView } from './block-openers';
|
|
10
|
+
export interface Reading {
|
|
11
|
+
/** The block and inline syntax this editor switched on, plugins included. */
|
|
12
|
+
readonly grammar: GrammarView;
|
|
13
|
+
/** Resolves reference links against the document's link-reference definitions; rebuilt after
|
|
14
|
+
* each commit, absent with no definitions. */
|
|
15
|
+
readonly resolver: LinkReferenceResolver | undefined;
|
|
16
|
+
/** The definitions' fingerprint, which the inline cache compares. */
|
|
17
|
+
readonly resolverSignature: string;
|
|
18
|
+
/** Bumped with each rebuild of the resolver: a small key for render memos. */
|
|
19
|
+
readonly resolverEpoch: number;
|
|
20
|
+
mode(): PresentationMode;
|
|
21
|
+
/** Whether the caret's block draws no delimiters, where a rewrite may drop bytes nobody saw. */
|
|
22
|
+
hidesDelimitersAtCaret(): boolean;
|
|
23
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How one editor reads its own bytes: its grammar, its document's link-reference definitions and
|
|
3
|
+
* its presentation mode. The editor builds one and every internal parse, reparse and join cleanup
|
|
4
|
+
* takes it whole, so no read can pair this editor's bytes with another reading's parts.
|
|
5
|
+
* The resolver and the mode change while the editor lives: read them at use, never copy them.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
/** True only on a dev server
|
|
1
|
+
/** True only on a dev server, not in production and not in a test run: the one case that replaces. */
|
|
2
2
|
export declare function devReplacesRegistration(): boolean;
|
|
3
3
|
/**
|
|
4
|
-
* `apply`
|
|
5
|
-
* dev
|
|
4
|
+
* `apply` does the registration and its side effects. It runs both on a first registration and on
|
|
5
|
+
* a dev-server replacement, so re-running a plugin with changed content updates everything again.
|
|
6
6
|
*/
|
|
7
7
|
export declare function registerOnce(isDuplicate: boolean, apply: () => void, conflict: string): void;
|
|
8
|
-
/** The test-reset primitive the schema registries share: drop every non-built-in key. */
|
|
9
|
-
export declare function deletePluginEntries<K>(map: Map<K, unknown>, isBuiltin: (key: K) => boolean): void;
|
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Register-once
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* registrar would otherwise 500 every route until restart, so there a duplicate replaces with a
|
|
6
|
-
* note instead.
|
|
2
|
+
* Register-once: a duplicate is an error, and production and test keep the throw
|
|
3
|
+
* (`docs/design/plugin-contract.md` § The registries: global, register-once). On a dev server the
|
|
4
|
+
* throw would break every route until restart, so there a duplicate replaces the entry and warns.
|
|
7
5
|
*/
|
|
8
6
|
import { editorEnv } from '../env';
|
|
9
7
|
import { devWarn } from '../dev-warn';
|
|
10
|
-
/** True only on a dev server
|
|
8
|
+
/** True only on a dev server, not in production and not in a test run: the one case that replaces. */
|
|
11
9
|
export function devReplacesRegistration() {
|
|
12
10
|
return editorEnv.isDev && !editorEnv.isTest;
|
|
13
11
|
}
|
|
14
12
|
/**
|
|
15
|
-
* `apply`
|
|
16
|
-
* dev
|
|
13
|
+
* `apply` does the registration and its side effects. It runs both on a first registration and on
|
|
14
|
+
* a dev-server replacement, so re-running a plugin with changed content updates everything again.
|
|
17
15
|
*/
|
|
18
16
|
export function registerOnce(isDuplicate, apply, conflict) {
|
|
19
17
|
if (isDuplicate) {
|
|
20
18
|
if (devReplacesRegistration()) {
|
|
21
|
-
devWarn('registry', `${conflict}
|
|
19
|
+
devWarn('registry', `${conflict}: dev re-registration replaces (HMR/SSR survival)`);
|
|
22
20
|
apply();
|
|
23
21
|
return;
|
|
24
22
|
}
|
|
@@ -26,10 +24,3 @@ export function registerOnce(isDuplicate, apply, conflict) {
|
|
|
26
24
|
}
|
|
27
25
|
apply();
|
|
28
26
|
}
|
|
29
|
-
/** The test-reset primitive the schema registries share: drop every non-built-in key. */
|
|
30
|
-
export function deletePluginEntries(map, isBuiltin) {
|
|
31
|
-
for (const key of map.keys()) {
|
|
32
|
-
if (!isBuiltin(key))
|
|
33
|
-
map.delete(key);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
@@ -1,32 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* neither calls the other during evaluation, so no cycle observes uninitialized state.
|
|
2
|
+
* Checks that the registrations agree with each other. Registrations made after startup queue up
|
|
3
|
+
* and are checked at the next Editor mount or parser read of the grammar, never part-way through a
|
|
4
|
+
* batch, so a forward reference within one batch warns about nothing. This module and
|
|
5
|
+
* `block-openers` import each other for use inside function bodies only, so the cycle is safe.
|
|
7
6
|
*/
|
|
8
7
|
import { type AnyBlockKind } from '../core/nodes';
|
|
9
8
|
import { type InvariantViolation } from '../assert';
|
|
10
9
|
import { type ClosureCoherenceEntry } from '../invariants/registry';
|
|
11
10
|
import { type BlockKindDescriptor } from './block-kind-descriptor';
|
|
12
|
-
export { hasPendingRegistrationChecks
|
|
13
|
-
/**
|
|
11
|
+
export { hasPendingRegistrationChecks } from './registration-pending';
|
|
12
|
+
/** The same shape as `assertInvariant`, which is the default; tests pass a collector instead. */
|
|
14
13
|
export type RegistrationCheckReport = (tag: string, check: () => InvariantViolation | null) => void;
|
|
15
14
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* The entry the closure coherence check reads (G1.24), exported so the suites build it the same
|
|
16
|
+
* way: a test-local copy missing a field would pass while the rule it tests went unchecked.
|
|
18
17
|
*/
|
|
19
18
|
export declare const closureCoherenceEntry: (kind: AnyBlockKind, d: BlockKindDescriptor) => ClosureCoherenceEntry;
|
|
20
19
|
/**
|
|
21
|
-
* Run the registry
|
|
22
|
-
*
|
|
23
|
-
* full registry (a new opener's priority collision is inherently cross-entry).
|
|
20
|
+
* Run the registry checks. Later calls check only the kinds registered since the last, plus the
|
|
21
|
+
* openers as a whole, since a new opener's priority clash always involves another entry.
|
|
24
22
|
*/
|
|
25
23
|
export declare function flushPendingRegistrationChecks(report?: RegistrationCheckReport): void;
|
|
26
24
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* never loads — running this at the parser's flush would fire on an absence legal there.
|
|
30
|
-
* Table-wide rather than per-registration, so it does not ride the pending-kinds queue.
|
|
25
|
+
* Mount-only, since the policy's functions come from the component layer, which a parse-only test
|
|
26
|
+
* never loads (G1.31). It reads the whole table, so it stays off the queue of pending kinds.
|
|
31
27
|
*/
|
|
32
28
|
export declare function checkInlineConstructPoliciesAtMount(report?: RegistrationCheckReport): void;
|
|
@@ -1,38 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* neither calls the other during evaluation, so no cycle observes uninitialized state.
|
|
2
|
+
* Checks that the registrations agree with each other. Registrations made after startup queue up
|
|
3
|
+
* and are checked at the next Editor mount or parser read of the grammar, never part-way through a
|
|
4
|
+
* batch, so a forward reference within one batch warns about nothing. This module and
|
|
5
|
+
* `block-openers` import each other for use inside function bodies only, so the cycle is safe.
|
|
7
6
|
*/
|
|
8
|
-
import { ALL_BLOCK_KINDS, isBuiltinInlineKind } from '../core/nodes';
|
|
7
|
+
import { ALL_BLOCK_KINDS, isBuiltinBlockKind, isBuiltinInlineKind } from '../core/nodes';
|
|
9
8
|
import { assertInvariant } from '../assert';
|
|
10
|
-
import { checkRegistryCompleteness, checkOpenerRegistry, checkKeymapCoherence, checkReservedChromeCoherence, checkClosureCoherence, checkLateOpenerRegistration, checkMergeRoleVocabulary,
|
|
9
|
+
import { checkRegistryCompleteness, checkOpenerRegistry, checkKeymapCoherence, checkReservedChromeCoherence, checkClosureCoherence, checkLateOpenerRegistration, checkMergeRoleVocabulary, checkDescriptorFieldCoherence, checkInlineConstructPolicy, checkBuiltinPresentationFacts } from '../invariants/registry';
|
|
11
10
|
import { listInlineConstructPolicies } from './inline-construct-policy';
|
|
12
11
|
import { isInlineKindDeclared } from './plugin-kind';
|
|
13
|
-
import { tryGetBlockKindDescriptor, getAllRegisteredKinds, isKnownMergeRole
|
|
14
|
-
import {
|
|
12
|
+
import { tryGetBlockKindDescriptor, getAllRegisteredKinds, isKnownMergeRole } from './block-kind-descriptor';
|
|
13
|
+
import { isBlockComponentRegistered } from './block-component-registry';
|
|
15
14
|
import { listRegisteredOpeners } from './block-openers';
|
|
16
15
|
import { isBuiltinCommandId } from './commands';
|
|
17
16
|
import { isPluginCommandId } from './command-id';
|
|
18
|
-
import { normalizeChord, isChordWellFormed } from './keybindings';
|
|
19
17
|
import { takeRegistrationFlushWork } from './registration-pending';
|
|
20
|
-
export { hasPendingRegistrationChecks
|
|
18
|
+
export { hasPendingRegistrationChecks } from './registration-pending';
|
|
21
19
|
const hasDescriptor = (kind) => tryGetBlockKindDescriptor(kind) !== undefined;
|
|
22
|
-
const hasComponent = (kind) =>
|
|
20
|
+
const hasComponent = (kind) => isBlockComponentRegistered(kind);
|
|
23
21
|
const keymapEntries = (kinds) => kinds.map((kind) => ({ kind, keymap: tryGetBlockKindDescriptor(kind)?.keymap }));
|
|
24
|
-
const reservedChromeEntries = (kinds) => kinds.map((kind) => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
isContainer: d?.isContainer ?? false,
|
|
29
|
-
reservedChromeKind: d?.reservedChrome?.kind
|
|
30
|
-
};
|
|
31
|
-
});
|
|
22
|
+
const reservedChromeEntries = (kinds) => kinds.map((kind) => ({
|
|
23
|
+
kind,
|
|
24
|
+
reservedChromeKind: tryGetBlockKindDescriptor(kind)?.reservedChrome?.kind
|
|
25
|
+
}));
|
|
32
26
|
const viaOf = (cell) => cell.mode === 'implemented' ? cell.via : undefined;
|
|
33
27
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
28
|
+
* The entry the closure coherence check reads (G1.24), exported so the suites build it the same
|
|
29
|
+
* way: a test-local copy missing a field would pass while the rule it tests went unchecked.
|
|
36
30
|
*/
|
|
37
31
|
export const closureCoherenceEntry = (kind, d) => ({
|
|
38
32
|
kind,
|
|
@@ -50,43 +44,36 @@ const closureEntries = (kinds) => kinds
|
|
|
50
44
|
.map((kind) => ({ kind, d: tryGetBlockKindDescriptor(kind) }))
|
|
51
45
|
.filter((e) => e.d !== undefined)
|
|
52
46
|
.map(({ kind, d }) => closureCoherenceEntry(kind, d));
|
|
53
|
-
// Widened to `string` on the way out: the
|
|
54
|
-
//
|
|
47
|
+
// Widened to `string` on the way out: the check exists for the callers the `MergeRole` union
|
|
48
|
+
// cannot constrain, such as a plugin registering through a cast.
|
|
55
49
|
const mergeRoleEntries = (kinds) => kinds.flatMap((kind) => {
|
|
56
50
|
const mergeRole = tryGetBlockKindDescriptor(kind)?.mergeRole;
|
|
57
51
|
return mergeRole === undefined ? [] : [{ kind, mergeRole }];
|
|
58
52
|
});
|
|
59
|
-
const contentStartBackspaceEntries = (kinds) => kinds.map((kind) => {
|
|
60
|
-
const d = tryGetBlockKindDescriptor(kind);
|
|
61
|
-
return {
|
|
62
|
-
kind,
|
|
63
|
-
demotesFirst: d?.contentStartBackspace === 'demote-first',
|
|
64
|
-
declaresContentRange: d?.getContentRange !== undefined
|
|
65
|
-
};
|
|
66
|
-
});
|
|
67
53
|
const descriptorFieldEntries = (kinds, openerKinds) => kinds.flatMap((kind) => {
|
|
68
54
|
const d = tryGetBlockKindDescriptor(kind);
|
|
69
55
|
if (!d)
|
|
70
56
|
return [];
|
|
71
|
-
const firstChildBackspace = d.unwrapRole?.firstChildBackspace;
|
|
72
57
|
return [
|
|
73
58
|
{
|
|
74
59
|
kind,
|
|
75
|
-
declaresWholeBlockFocus: d.blockFocus === 'whole-block',
|
|
76
|
-
supportsInline: d.supportsInline,
|
|
77
|
-
declaresReservedChrome: d.reservedChrome !== undefined,
|
|
78
60
|
contextDependentKind: d.contextDependentKind === true,
|
|
79
|
-
hasOpener: openerKinds.has(kind)
|
|
80
|
-
unwrapLiftsFirstChild: firstChildBackspace !== undefined && liftsFirstChild(firstChildBackspace),
|
|
81
|
-
unwrapKeepsReservedChrome: firstChildBackspace === 'keep-reserved-chrome'
|
|
61
|
+
hasOpener: openerKinds.has(kind)
|
|
82
62
|
}
|
|
83
63
|
];
|
|
84
64
|
});
|
|
65
|
+
const presentationFactEntries = (kinds) => kinds.filter(isBuiltinBlockKind).map((kind) => {
|
|
66
|
+
const d = tryGetBlockKindDescriptor(kind);
|
|
67
|
+
return {
|
|
68
|
+
kind,
|
|
69
|
+
declaresPageRole: d?.pageRole !== undefined,
|
|
70
|
+
declaresEstimateHeight: d?.estimateHeight !== undefined
|
|
71
|
+
};
|
|
72
|
+
});
|
|
85
73
|
const isKnownCommandId = (id) => isBuiltinCommandId(id) || isPluginCommandId(id);
|
|
86
74
|
/**
|
|
87
|
-
* Run the registry
|
|
88
|
-
*
|
|
89
|
-
* full registry (a new opener's priority collision is inherently cross-entry).
|
|
75
|
+
* Run the registry checks. Later calls check only the kinds registered since the last, plus the
|
|
76
|
+
* openers as a whole, since a new opener's priority clash always involves another entry.
|
|
90
77
|
*/
|
|
91
78
|
export function flushPendingRegistrationChecks(report = assertInvariant) {
|
|
92
79
|
const work = takeRegistrationFlushWork();
|
|
@@ -95,27 +82,24 @@ export function flushPendingRegistrationChecks(report = assertInvariant) {
|
|
|
95
82
|
if (work.firstFlush) {
|
|
96
83
|
report('registry-completeness', () => checkRegistryCompleteness(ALL_BLOCK_KINDS, hasDescriptor, hasComponent));
|
|
97
84
|
}
|
|
98
|
-
// The first
|
|
99
|
-
// built-
|
|
100
|
-
// reservedChrome coherence is the plugin-kind bootstrap check instead.
|
|
85
|
+
// The first run covers every registered kind, plugin kinds included; the completeness check
|
|
86
|
+
// alone stays on built-ins, since a plugin kind's component may register later.
|
|
101
87
|
const kinds = work.firstFlush ? getAllRegisteredKinds() : work.kinds;
|
|
102
88
|
report('opener-registry', () => checkOpenerRegistry(listRegisteredOpeners(), hasDescriptor));
|
|
103
|
-
report('keymap-coherence', () => checkKeymapCoherence(keymapEntries(kinds), isKnownCommandId
|
|
89
|
+
report('keymap-coherence', () => checkKeymapCoherence(keymapEntries(kinds), isKnownCommandId));
|
|
104
90
|
report('reserved-chrome-coherence', () => checkReservedChromeCoherence(reservedChromeEntries(kinds), hasDescriptor, hasComponent));
|
|
105
91
|
report('closure-coherence', () => checkClosureCoherence(closureEntries(kinds)));
|
|
106
92
|
report('descriptor-field-coherence', () => checkDescriptorFieldCoherence(descriptorFieldEntries(kinds, new Set(listRegisteredOpeners().map((entry) => entry.kind)))));
|
|
107
93
|
report('merge-role-vocabulary', () => checkMergeRoleVocabulary(mergeRoleEntries(kinds), isKnownMergeRole));
|
|
108
|
-
report('
|
|
94
|
+
report('builtin-presentation-facts', () => checkBuiltinPresentationFacts(presentationFactEntries(kinds)));
|
|
109
95
|
for (const kind of work.lateOpeners) {
|
|
110
96
|
report('late-opener-registration', () => checkLateOpenerRegistration(kind, true));
|
|
111
97
|
}
|
|
112
98
|
}
|
|
113
99
|
const isKnownInlineKind = (kind) => isBuiltinInlineKind(kind) || isInlineKindDeclared(kind);
|
|
114
100
|
/**
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
* never loads — running this at the parser's flush would fire on an absence legal there.
|
|
118
|
-
* Table-wide rather than per-registration, so it does not ride the pending-kinds queue.
|
|
101
|
+
* Mount-only, since the policy's functions come from the component layer, which a parse-only test
|
|
102
|
+
* never loads (G1.31). It reads the whole table, so it stays off the queue of pending kinds.
|
|
119
103
|
*/
|
|
120
104
|
export function checkInlineConstructPoliciesAtMount(report = assertInvariant) {
|
|
121
105
|
report('inline-construct-policy', () => checkInlineConstructPolicy(listInlineConstructPolicies(), isKnownInlineKind, isBuiltinInlineKind, isBuiltinCommandId));
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field pairs a block-kind registration can't mean together. The registration types refuse each
|
|
3
|
+
* one; this table refuses it again at runtime for a caller the types never reach (a cast, plain
|
|
4
|
+
* JavaScript). A new row needs a `@ts-expect-error [id]` pin in `descriptor-groups.types.test.ts`.
|
|
5
|
+
*/
|
|
6
|
+
import type { AnyBlockKind } from '../core/nodes';
|
|
7
|
+
/** The registration fields the pairs read, loose enough to hold what a cast lets through. */
|
|
8
|
+
interface RegistrationFields {
|
|
9
|
+
blockFocus?: string;
|
|
10
|
+
supportsInline?: boolean;
|
|
11
|
+
contentStart?: {
|
|
12
|
+
range?: unknown;
|
|
13
|
+
};
|
|
14
|
+
container?: {
|
|
15
|
+
reservedChrome?: unknown;
|
|
16
|
+
unwrapRole?: {
|
|
17
|
+
firstChildBackspace?: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export declare const INCOHERENT_REGISTRATION_PAIRS: readonly [{
|
|
22
|
+
readonly id: "content-start-without-range";
|
|
23
|
+
readonly fields: "contentStart with no contentStart.range";
|
|
24
|
+
readonly reason: "the content-start Backspace reads the range, so it would never fire";
|
|
25
|
+
readonly holds: (r: RegistrationFields) => boolean;
|
|
26
|
+
}, {
|
|
27
|
+
readonly id: "whole-block-inline";
|
|
28
|
+
readonly fields: "blockFocus: 'whole-block' with supportsInline";
|
|
29
|
+
readonly reason: "a block focused as one unit has no caret positions for inline content to live at";
|
|
30
|
+
readonly holds: (r: RegistrationFields) => boolean;
|
|
31
|
+
}, {
|
|
32
|
+
readonly id: "whole-block-content-start";
|
|
33
|
+
readonly fields: "blockFocus: 'whole-block' with contentStart";
|
|
34
|
+
readonly reason: "no caret enters a block focused as one unit, so there's no content start";
|
|
35
|
+
readonly holds: (r: RegistrationFields) => boolean;
|
|
36
|
+
}, {
|
|
37
|
+
readonly id: "whole-block-title-row";
|
|
38
|
+
readonly fields: "blockFocus: 'whole-block' with container.reservedChrome";
|
|
39
|
+
readonly reason: "a title row means the block is never childless, so whole-block focus never engages";
|
|
40
|
+
readonly holds: (r: RegistrationFields) => boolean;
|
|
41
|
+
}, {
|
|
42
|
+
readonly id: "title-row-first-child-strategy";
|
|
43
|
+
readonly fields: "container.reservedChrome with unwrapRole.firstChildBackspace";
|
|
44
|
+
readonly reason: "Backspace at a title row always keeps it, so declare only middleChildBackspace";
|
|
45
|
+
readonly holds: (r: RegistrationFields) => boolean;
|
|
46
|
+
}, {
|
|
47
|
+
readonly id: "keep-title-row-without-one";
|
|
48
|
+
readonly fields: "firstChildBackspace: 'keep-reserved-chrome' with no container.reservedChrome";
|
|
49
|
+
readonly reason: "child 0 is body, so Backspace at its start would do nothing; declare a lifting one";
|
|
50
|
+
readonly holds: (r: RegistrationFields) => boolean;
|
|
51
|
+
}];
|
|
52
|
+
export type IncoherentPairId = (typeof INCOHERENT_REGISTRATION_PAIRS)[number]['id'];
|
|
53
|
+
export declare function rejectIncoherentPairs(kind: AnyBlockKind, registration: RegistrationFields): void;
|
|
54
|
+
export {};
|