@voithos-labs/aragonite 0.10.4 → 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 +11 -5
- package/dist/a11y-strings.js +60 -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 +12 -21
- 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 +603 -1126
- package/dist/components/Editor.svelte.d.ts +9 -20
- package/dist/components/GapCaret.svelte +26 -59
- package/dist/components/SelectionOverlay.svelte +26 -51
- package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
- 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 +72 -87
- 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 +29 -34
- 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 +57 -39
- 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 +141 -203
- 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 +45 -90
- package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -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 +8 -6
- package/dist/components/blocks/text/click-snap-guard.js +10 -7
- 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 +150 -181
- 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 -108
- 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 +212 -199
- 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 +12 -35
- package/dist/components/drag-handle.js +22 -68
- 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 -24
- package/dist/components/editor-root-listeners.js +49 -24
- 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 +14 -26
- 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 +30 -35
- package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
- 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 +54 -75
- package/dist/core/inline/inline-widgets.js +54 -62
- 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 +31 -15
- 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 -6
- package/dist/cursor/height-oracle.js +26 -74
- 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 +14 -15
- package/dist/cursor/scrollport.js +7 -13
- 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 -14
- package/dist/cursor/visual-lines.js +45 -46
- package/dist/cursor/widget-edge-snap.d.ts +10 -15
- package/dist/cursor/widget-edge-snap.js +13 -12
- package/dist/cursor/widget-offset.d.ts +110 -104
- package/dist/cursor/widget-offset.js +344 -179
- 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 +30 -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 +28 -50
- package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
- package/dist/editor-actions/focus/focus-landing.js +15 -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 +54 -82
- package/dist/editor-actions/plugin/container.js +105 -188
- 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 +88 -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 +37 -8
- package/dist/plugin.js +100 -77
- 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 +78 -67
- 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 -81
- 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 +51 -45
- 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 +15 -6
- 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 +141 -310
- 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 +78 -84
- package/dist/schema/commands.js +152 -117
- 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 +8 -10
- 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 +63 -80
- 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 +92 -125
- 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 +59 -96
- 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 +51 -134
- package/dist/selection/dead-space-caret.d.ts +19 -30
- package/dist/selection/dead-space-caret.js +70 -88
- package/dist/selection/drag-pointer.d.ts +7 -9
- package/dist/selection/drag-pointer.js +23 -33
- 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 -40
- package/dist/selection/keyboard-extend.js +94 -117
- package/dist/selection/multi-click.d.ts +13 -18
- package/dist/selection/multi-click.js +32 -38
- package/dist/selection/native-bridge.d.ts +29 -39
- package/dist/selection/native-bridge.js +78 -127
- package/dist/selection/nearest-block.d.ts +17 -12
- package/dist/selection/nearest-block.js +37 -18
- package/dist/selection/path-lookup.d.ts +25 -16
- package/dist/selection/path-lookup.js +101 -18
- package/dist/selection/path-math.d.ts +9 -11
- package/dist/selection/path-math.js +5 -7
- package/dist/selection/pointer-gesture.d.ts +5 -5
- package/dist/selection/pointer-gesture.js +5 -5
- package/dist/selection/pointer-session.d.ts +10 -16
- package/dist/selection/pointer-session.js +6 -7
- package/dist/selection/primitives.d.ts +64 -40
- package/dist/selection/primitives.js +57 -67
- 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 -23
- 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 +34 -16
- package/dist/selection/selection-drop.js +159 -95
- 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 +60 -53
- package/dist/styles/editor.css +201 -143
- 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 +9 -7
- package/dist/tree-operations/paste/replacement-parse.js +12 -10
- 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 +327 -205
- package/docs/guide/directives.md +7 -7
- package/docs/guide/plugin-api.md +253 -185
- package/docs/guide/plugin-guide.md +332 -235
- package/docs/guide/plugin-testing.md +96 -82
- package/package.json +12 -16
- 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/cursor/scroll-hold.d.ts +0 -10
- package/dist/cursor/scroll-hold.js +0 -22
- package/dist/invariants/split-landing.d.ts +0 -8
- package/dist/invariants/split-landing.js +0 -15
- 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 -31
- package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
import type { AnyBlockKind, AnyInlineKind, BlockKind } from '../core/nodes';
|
|
2
2
|
import type { InvariantViolation } from '../assert';
|
|
3
|
-
/**
|
|
4
|
-
*
|
|
5
|
-
* renders inside a parent (see `NO_STANDALONE_COMPONENT`). Returns the first gap.
|
|
6
|
-
*/
|
|
3
|
+
/** G1.2: every BlockKind resolves to a descriptor, and to a component unless it renders inside a
|
|
4
|
+
* parent. Returns the first gap. */
|
|
7
5
|
export declare function checkRegistryCompleteness(kinds: readonly BlockKind[], hasDescriptor: (kind: BlockKind) => boolean, hasComponent: (kind: BlockKind) => boolean): InvariantViolation | null;
|
|
8
|
-
/**
|
|
9
|
-
*
|
|
10
|
-
* and priorities are unique. Equal priorities are deterministic (dispatch falls back to
|
|
11
|
-
* kind name) but usually unintended, so they still warn.
|
|
12
|
-
*/
|
|
6
|
+
/** G1.10: every opener belongs to a registered kind, and no two share a priority. A tie still
|
|
7
|
+
* dispatches by kind name but is almost always a mistake, so it warns. */
|
|
13
8
|
export declare function checkOpenerRegistry(entries: readonly {
|
|
14
9
|
kind: AnyBlockKind;
|
|
15
10
|
priority: number;
|
|
@@ -21,28 +16,18 @@ export interface KeymapCoherenceEntry {
|
|
|
21
16
|
command: string;
|
|
22
17
|
}[];
|
|
23
18
|
}
|
|
24
|
-
/**
|
|
25
|
-
*
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
*
|
|
29
|
-
*/
|
|
30
|
-
export declare function checkKeymapCoherence(entries: readonly KeymapCoherenceEntry[], isKnownCommand: (id: string) => boolean, normalizeChord: (chord: string) => string, isChordWellFormed: (chord: string) => boolean): InvariantViolation | null;
|
|
31
|
-
/**
|
|
32
|
-
* G1.17 — opener registered after the grammar was consumed. Parsed documents never
|
|
33
|
-
* re-parse, so the new kind silently misses every open document.
|
|
34
|
-
*/
|
|
19
|
+
/** G1.11: every binding names a known command, and a kind binds each chord once. Checked at the flush,
|
|
20
|
+
* not at registration, since a plugin can register its kind before the command. */
|
|
21
|
+
export declare function checkKeymapCoherence(entries: readonly KeymapCoherenceEntry[], isKnownCommand: (id: string) => boolean): InvariantViolation | null;
|
|
22
|
+
/** G1.17: an opener registered after the grammar was read. Parsed documents never reparse, so the
|
|
23
|
+
* new kind misses every document already open. */
|
|
35
24
|
export declare function checkLateOpenerRegistration(kind: AnyBlockKind, grammarConsumed: boolean): InvariantViolation | null;
|
|
36
25
|
export interface ReservedChromeCoherenceEntry {
|
|
37
26
|
kind: AnyBlockKind;
|
|
38
|
-
isContainer: boolean;
|
|
39
27
|
reservedChromeKind?: AnyBlockKind;
|
|
40
28
|
}
|
|
41
|
-
/**
|
|
42
|
-
* G1.
|
|
43
|
-
* its chrome kind must resolve to both a descriptor and a component. Validates the
|
|
44
|
-
* registration shape at bootstrap, unlike the per-commit slot check (G1.14).
|
|
45
|
-
*/
|
|
29
|
+
/** G1.18: the title-row kind a container's `reservedChrome` names has a descriptor and a
|
|
30
|
+
* component. G1.14 checks the child itself on every commit. */
|
|
46
31
|
export declare function checkReservedChromeCoherence(entries: readonly ReservedChromeCoherenceEntry[], hasDescriptor: (kind: AnyBlockKind) => boolean, hasComponent: (kind: AnyBlockKind) => boolean): InvariantViolation | null;
|
|
47
32
|
type ClosureCellMode = 'implemented' | 'inherit-default' | 'not-supported';
|
|
48
33
|
export interface ClosureCoherenceEntry {
|
|
@@ -59,12 +44,8 @@ export interface ClosureCoherenceEntry {
|
|
|
59
44
|
declaresReservedChrome: boolean;
|
|
60
45
|
clipboardMode: ClosureCellMode;
|
|
61
46
|
}
|
|
62
|
-
/**
|
|
63
|
-
*
|
|
64
|
-
* rest of its descriptor that a compiler can't reach. Each violation message below states
|
|
65
|
-
* its own rule. The fixture-parses-to-kind check runs in the unit sweep instead — a
|
|
66
|
-
* `parse` import here would close a `schema → core/parser → schema` cycle.
|
|
67
|
-
*/
|
|
47
|
+
/** G1.24: cross-checks between a kind's closure cells and the rest of its descriptor that the
|
|
48
|
+
* compiler cannot reach. The fixture-parse check is in the unit suite, which avoids a cycle. */
|
|
68
49
|
export declare function checkClosureCoherence(entries: readonly ClosureCoherenceEntry[]): InvariantViolation | null;
|
|
69
50
|
export interface InlineConstructPolicyEntry {
|
|
70
51
|
kind: AnyInlineKind;
|
|
@@ -77,50 +58,30 @@ export interface InlineConstructPolicyEntry {
|
|
|
77
58
|
command: string;
|
|
78
59
|
};
|
|
79
60
|
}
|
|
80
|
-
/**
|
|
81
|
-
*
|
|
82
|
-
* marker-rewriting behaviors belong only to kinds whose markers the reveal can address; no two mark
|
|
83
|
-
* rows claim one nesting rank or one command; and no plugin row's mark claims a built-in command id.
|
|
84
|
-
* A mistyped kind is silent, a rewrite on a never-revealed kind edits markers the author cannot see,
|
|
85
|
-
* and a tied or built-in command leaves which meaning answers to each surface's own lookup order.
|
|
86
|
-
*/
|
|
61
|
+
/** G1.31: each inline-policy row names a real kind, gives marker rewrites only to kinds that show
|
|
62
|
+
* their markers, and holds a unique nesting rank and command, never a built-in one. */
|
|
87
63
|
export declare function checkInlineConstructPolicy(entries: readonly InlineConstructPolicyEntry[], isKnownInlineKind: (kind: AnyInlineKind) => boolean, isBuiltinInlineKind: (kind: AnyInlineKind) => boolean, isBuiltinCommandId: (id: string) => boolean): InvariantViolation | null;
|
|
88
64
|
export interface DescriptorFieldEntry {
|
|
89
65
|
kind: AnyBlockKind;
|
|
90
|
-
declaresWholeBlockFocus: boolean;
|
|
91
|
-
supportsInline: boolean;
|
|
92
|
-
declaresReservedChrome: boolean;
|
|
93
66
|
contextDependentKind: boolean;
|
|
94
67
|
hasOpener: boolean;
|
|
95
|
-
unwrapLiftsFirstChild: boolean;
|
|
96
|
-
unwrapKeepsReservedChrome: boolean;
|
|
97
68
|
}
|
|
98
|
-
/**
|
|
99
|
-
*
|
|
100
|
-
* cannot mean together. Each is silently inert rather than loud, so nothing fails until a
|
|
101
|
-
* gesture reaches the kind. G1.24 is the sibling over closure cells; this one reads the
|
|
102
|
-
* declarations alone.
|
|
103
|
-
*/
|
|
69
|
+
/** G1.37: a context-dependent kind registers no opener. The two live in separate registries, so
|
|
70
|
+
* the registration type can't see the pair; it fails silently until a gesture reaches the kind. */
|
|
104
71
|
export declare function checkDescriptorFieldCoherence(entries: readonly DescriptorFieldEntry[]): InvariantViolation | null;
|
|
105
|
-
export interface ContentStartBackspaceEntry {
|
|
106
|
-
kind: AnyBlockKind;
|
|
107
|
-
demotesFirst: boolean;
|
|
108
|
-
declaresContentRange: boolean;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* G1.32 — a kind demoting on Backspace at its content start declares where that content starts.
|
|
112
|
-
* Without the hook the content range IS the whole display, so the arm never fires and the
|
|
113
|
-
* declaration reads as behavior the kind does not have — silent, and only at the keystroke.
|
|
114
|
-
*/
|
|
115
|
-
export declare function checkContentStartBackspace(entries: readonly ContentStartBackspaceEntry[]): InvariantViolation | null;
|
|
116
72
|
export interface MergeRoleEntry {
|
|
117
73
|
kind: AnyBlockKind;
|
|
118
74
|
mergeRole: string;
|
|
119
75
|
}
|
|
120
|
-
/**
|
|
121
|
-
*
|
|
122
|
-
* per-KIND fact, validated once at registration: an unknown role makes the merge
|
|
123
|
-
* dispatcher fall through silently on every gesture that reaches the kind.
|
|
124
|
-
*/
|
|
76
|
+
/** G1.30: every kind declares a known `mergeRole`, checked once at registration, since an unknown
|
|
77
|
+
* role makes the merge dispatcher fall through silently. */
|
|
125
78
|
export declare function checkMergeRoleVocabulary(entries: readonly MergeRoleEntry[], isKnownMergeRole: (role: string) => boolean): InvariantViolation | null;
|
|
79
|
+
export interface PresentationFactEntry {
|
|
80
|
+
kind: AnyBlockKind;
|
|
81
|
+
declaresPageRole: boolean;
|
|
82
|
+
declaresEstimateHeight: boolean;
|
|
83
|
+
}
|
|
84
|
+
/** G1.40: every built-in kind declares how it reads on the page and its likely height; a built-in
|
|
85
|
+
* left on the defaults would take a plugin's guesses unnoticed. */
|
|
86
|
+
export declare function checkBuiltinPresentationFacts(entries: readonly PresentationFactEntry[]): InvariantViolation | null;
|
|
126
87
|
export {};
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* schema
|
|
4
|
-
*
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* `listItem` renders inside its parent `ListBlock`, never via a `BlockHost` kind lookup,
|
|
8
|
-
* so it is the one BlockKind with no component-registry entry by design.
|
|
2
|
+
* The registry checks take every lookup as a parameter, so they stay pure and so this file never
|
|
3
|
+
* imports `schema`: `schema/registration-checks.ts` supplies the real registries, and importing
|
|
4
|
+
* it back would close a cycle.
|
|
9
5
|
*/
|
|
6
|
+
/** `listItem` renders inside its parent `ListBlock`, never through a `BlockHost` lookup, so it is
|
|
7
|
+
* the one kind with no component-registry entry. */
|
|
10
8
|
const NO_STANDALONE_COMPONENT = new Set(['listItem']);
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
13
|
-
* renders inside a parent (see `NO_STANDALONE_COMPONENT`). Returns the first gap.
|
|
14
|
-
*/
|
|
9
|
+
/** G1.2: every BlockKind resolves to a descriptor, and to a component unless it renders inside a
|
|
10
|
+
* parent. Returns the first gap. */
|
|
15
11
|
export function checkRegistryCompleteness(kinds, hasDescriptor, hasComponent) {
|
|
16
12
|
for (const kind of kinds) {
|
|
17
13
|
if (!hasDescriptor(kind)) {
|
|
@@ -31,11 +27,8 @@ export function checkRegistryCompleteness(kinds, hasDescriptor, hasComponent) {
|
|
|
31
27
|
}
|
|
32
28
|
return null;
|
|
33
29
|
}
|
|
34
|
-
/**
|
|
35
|
-
*
|
|
36
|
-
* and priorities are unique. Equal priorities are deterministic (dispatch falls back to
|
|
37
|
-
* kind name) but usually unintended, so they still warn.
|
|
38
|
-
*/
|
|
30
|
+
/** G1.10: every opener belongs to a registered kind, and no two share a priority. A tie still
|
|
31
|
+
* dispatches by kind name but is almost always a mistake, so it warns. */
|
|
39
32
|
export function checkOpenerRegistry(entries, hasDescriptor) {
|
|
40
33
|
const seen = new Map();
|
|
41
34
|
for (const { kind, priority } of entries) {
|
|
@@ -50,7 +43,7 @@ export function checkOpenerRegistry(entries, hasDescriptor) {
|
|
|
50
43
|
if (holder !== undefined) {
|
|
51
44
|
return {
|
|
52
45
|
code: 'opener-registry',
|
|
53
|
-
message: `kinds "${holder}" and "${kind}" share opener priority ${priority}
|
|
46
|
+
message: `kinds "${holder}" and "${kind}" share opener priority ${priority}: order falls back to kind name; give each kind its own priority`,
|
|
54
47
|
detail: { kinds: [holder, kind], priority }
|
|
55
48
|
};
|
|
56
49
|
}
|
|
@@ -58,25 +51,14 @@ export function checkOpenerRegistry(entries, hasDescriptor) {
|
|
|
58
51
|
}
|
|
59
52
|
return null;
|
|
60
53
|
}
|
|
61
|
-
/**
|
|
62
|
-
*
|
|
63
|
-
|
|
64
|
-
* bare `B` that fires on every keypress; duplicates make dispatch order
|
|
65
|
-
* declaration-dependent. Chords are scoped per kind.
|
|
66
|
-
*/
|
|
67
|
-
export function checkKeymapCoherence(entries, isKnownCommand, normalizeChord, isChordWellFormed) {
|
|
54
|
+
/** G1.11: every binding names a known command, and a kind binds each chord once. Checked at the flush,
|
|
55
|
+
* not at registration, since a plugin can register its kind before the command. */
|
|
56
|
+
export function checkKeymapCoherence(entries, isKnownCommand) {
|
|
68
57
|
for (const { kind, keymap } of entries) {
|
|
69
58
|
if (!keymap)
|
|
70
59
|
continue;
|
|
71
60
|
const seenChords = new Set();
|
|
72
61
|
for (const binding of keymap) {
|
|
73
|
-
if (!isChordWellFormed(binding.chord)) {
|
|
74
|
-
return {
|
|
75
|
-
code: 'keymap-coherence',
|
|
76
|
-
message: `kind "${kind}" binds malformed chord "${binding.chord}" — modifiers must be Mod/Alt/Shift and the key non-empty`,
|
|
77
|
-
detail: { kind, chord: binding.chord, issue: 'malformed' }
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
62
|
if (!isKnownCommand(binding.command)) {
|
|
81
63
|
return {
|
|
82
64
|
code: 'keymap-coherence',
|
|
@@ -84,7 +66,7 @@ export function checkKeymapCoherence(entries, isKnownCommand, normalizeChord, is
|
|
|
84
66
|
detail: { kind, chord: binding.chord, command: binding.command }
|
|
85
67
|
};
|
|
86
68
|
}
|
|
87
|
-
const chord =
|
|
69
|
+
const chord = binding.chord;
|
|
88
70
|
if (seenChords.has(chord)) {
|
|
89
71
|
return {
|
|
90
72
|
code: 'keymap-coherence',
|
|
@@ -97,35 +79,23 @@ export function checkKeymapCoherence(entries, isKnownCommand, normalizeChord, is
|
|
|
97
79
|
}
|
|
98
80
|
return null;
|
|
99
81
|
}
|
|
100
|
-
/**
|
|
101
|
-
*
|
|
102
|
-
* re-parse, so the new kind silently misses every open document.
|
|
103
|
-
*/
|
|
82
|
+
/** G1.17: an opener registered after the grammar was read. Parsed documents never reparse, so the
|
|
83
|
+
* new kind misses every document already open. */
|
|
104
84
|
export function checkLateOpenerRegistration(kind, grammarConsumed) {
|
|
105
85
|
if (!grammarConsumed)
|
|
106
86
|
return null;
|
|
107
87
|
return {
|
|
108
88
|
code: 'late-opener-registration',
|
|
109
|
-
message: `opener for "${kind}" registered after documents were parsed
|
|
89
|
+
message: `opener for "${kind}" registered after documents were parsed: already-parsed documents will not re-parse; register plugins before first mount`,
|
|
110
90
|
detail: { kind }
|
|
111
91
|
};
|
|
112
92
|
}
|
|
113
|
-
/**
|
|
114
|
-
* G1.
|
|
115
|
-
* its chrome kind must resolve to both a descriptor and a component. Validates the
|
|
116
|
-
* registration shape at bootstrap, unlike the per-commit slot check (G1.14).
|
|
117
|
-
*/
|
|
93
|
+
/** G1.18: the title-row kind a container's `reservedChrome` names has a descriptor and a
|
|
94
|
+
* component. G1.14 checks the child itself on every commit. */
|
|
118
95
|
export function checkReservedChromeCoherence(entries, hasDescriptor, hasComponent) {
|
|
119
|
-
for (const { kind,
|
|
96
|
+
for (const { kind, reservedChromeKind } of entries) {
|
|
120
97
|
if (reservedChromeKind === undefined)
|
|
121
98
|
continue;
|
|
122
|
-
if (!isContainer) {
|
|
123
|
-
return {
|
|
124
|
-
code: 'reserved-chrome-coherence',
|
|
125
|
-
message: `kind "${kind}" declares reservedChrome but is not a container`,
|
|
126
|
-
detail: { kind, chromeKind: reservedChromeKind, issue: 'not-container' }
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
99
|
if (!hasDescriptor(reservedChromeKind)) {
|
|
130
100
|
return {
|
|
131
101
|
code: 'reserved-chrome-coherence',
|
|
@@ -143,32 +113,25 @@ export function checkReservedChromeCoherence(entries, hasDescriptor, hasComponen
|
|
|
143
113
|
}
|
|
144
114
|
return null;
|
|
145
115
|
}
|
|
146
|
-
/**
|
|
147
|
-
*
|
|
148
|
-
* of the shipped descriptors, and "moves focus" (what an ordinary not-mergeable leaf does
|
|
149
|
-
* at its edge) must stay outside the set.
|
|
150
|
-
*/
|
|
116
|
+
/** Fixed phrases, not a pattern: plugin authors copy them from the shipped descriptors, and
|
|
117
|
+
* "moves focus" (an ordinary leaf's edge) must stay outside the set. */
|
|
151
118
|
const FOCUS_THEN_DELETE_CLAIMS = ['focus-then-delete', 'a second press deletes'];
|
|
152
119
|
const claimsFocusThenDelete = (via) => via !== undefined && FOCUS_THEN_DELETE_CLAIMS.some((phrase) => via.includes(phrase));
|
|
153
|
-
/**
|
|
154
|
-
*
|
|
155
|
-
* rest of its descriptor that a compiler can't reach. Each violation message below states
|
|
156
|
-
* its own rule. The fixture-parses-to-kind check runs in the unit sweep instead — a
|
|
157
|
-
* `parse` import here would close a `schema → core/parser → schema` cycle.
|
|
158
|
-
*/
|
|
120
|
+
/** G1.24: cross-checks between a kind's closure cells and the rest of its descriptor that the
|
|
121
|
+
* compiler cannot reach. The fixture-parse check is in the unit suite, which avoids a cycle. */
|
|
159
122
|
export function checkClosureCoherence(entries) {
|
|
160
123
|
for (const entry of entries) {
|
|
161
124
|
if (entry.hasContainerContract && entry.roundTripMode === 'inherit-default') {
|
|
162
125
|
return {
|
|
163
126
|
code: 'closure-coherence',
|
|
164
|
-
message: `kind "${entry.kind}" declares a container contract but its closure roundTrip is inherit-default
|
|
127
|
+
message: `kind "${entry.kind}" declares a container contract but its closure roundTrip is inherit-default: the container's rebuildRaw is the round-trip mechanism; declare roundTrip: implemented`,
|
|
165
128
|
detail: { kind: entry.kind, column: 'roundTrip' }
|
|
166
129
|
};
|
|
167
130
|
}
|
|
168
131
|
if (entry.notMergeable && entry.mergeBackspaceMode === 'inherit-default') {
|
|
169
132
|
return {
|
|
170
133
|
code: 'closure-coherence',
|
|
171
|
-
message: `kind "${entry.kind}" is not-mergeable but its closure mergeBackspace is inherit-default
|
|
134
|
+
message: `kind "${entry.kind}" is not-mergeable but its closure mergeBackspace is inherit-default: a not-mergeable kind has no default merge to inherit; name the non-merge mechanism (implemented) or mark it not-supported`,
|
|
172
135
|
detail: { kind: entry.kind, column: 'mergeBackspace' }
|
|
173
136
|
};
|
|
174
137
|
}
|
|
@@ -181,7 +144,7 @@ export function checkClosureCoherence(entries) {
|
|
|
181
144
|
if (column !== undefined) {
|
|
182
145
|
return {
|
|
183
146
|
code: 'closure-coherence',
|
|
184
|
-
message: `kind "${entry.kind}" claims the focus-then-delete model in its closure ${column} cell but declares no blockFocus: 'whole-block'
|
|
147
|
+
message: `kind "${entry.kind}" claims the focus-then-delete model in its closure ${column} cell but declares no blockFocus: 'whole-block'; without it the caret-adjacent merge fallback deletes on the first press; declare the field or rewrite the cell to say what the kind actually does`,
|
|
185
148
|
detail: { kind: entry.kind, column }
|
|
186
149
|
};
|
|
187
150
|
}
|
|
@@ -189,20 +152,15 @@ export function checkClosureCoherence(entries) {
|
|
|
189
152
|
if (entry.declaresReservedChrome && entry.clipboardMode === 'inherit-default') {
|
|
190
153
|
return {
|
|
191
154
|
code: 'closure-coherence',
|
|
192
|
-
message: `kind "${entry.kind}" declares reservedChrome but its closure clipboard is inherit-default
|
|
155
|
+
message: `kind "${entry.kind}" declares reservedChrome but its closure clipboard is inherit-default: the chrome bytes live in the container's own opener line, so a slice crossing that boundary has no default semantics; name what a copy produces (implemented) or mark it not-supported`,
|
|
193
156
|
detail: { kind: entry.kind, column: 'clipboard' }
|
|
194
157
|
};
|
|
195
158
|
}
|
|
196
159
|
}
|
|
197
160
|
return null;
|
|
198
161
|
}
|
|
199
|
-
/**
|
|
200
|
-
*
|
|
201
|
-
* marker-rewriting behaviors belong only to kinds whose markers the reveal can address; no two mark
|
|
202
|
-
* rows claim one nesting rank or one command; and no plugin row's mark claims a built-in command id.
|
|
203
|
-
* A mistyped kind is silent, a rewrite on a never-revealed kind edits markers the author cannot see,
|
|
204
|
-
* and a tied or built-in command leaves which meaning answers to each surface's own lookup order.
|
|
205
|
-
*/
|
|
162
|
+
/** G1.31: each inline-policy row names a real kind, gives marker rewrites only to kinds that show
|
|
163
|
+
* their markers, and holds a unique nesting rank and command, never a built-in one. */
|
|
206
164
|
export function checkInlineConstructPolicy(entries, isKnownInlineKind, isBuiltinInlineKind, isBuiltinCommandId) {
|
|
207
165
|
const ranks = new Map();
|
|
208
166
|
const commands = new Map();
|
|
@@ -210,7 +168,7 @@ export function checkInlineConstructPolicy(entries, isKnownInlineKind, isBuiltin
|
|
|
210
168
|
if (!isKnownInlineKind(entry.kind)) {
|
|
211
169
|
return {
|
|
212
170
|
code: 'inline-construct-policy',
|
|
213
|
-
message: `inline-construct policy registered for "${entry.kind}", which is neither a built-in inline kind nor a declared plugin one
|
|
171
|
+
message: `inline-construct policy registered for "${entry.kind}", which is neither a built-in inline kind nor a declared plugin one: the row is unreachable`,
|
|
214
172
|
detail: { kind: entry.kind, issue: 'unknown-kind' }
|
|
215
173
|
};
|
|
216
174
|
}
|
|
@@ -218,13 +176,12 @@ export function checkInlineConstructPolicy(entries, isKnownInlineKind, isBuiltin
|
|
|
218
176
|
const clash = markClashOf(entry.kind, entry.mark, ranks, commands);
|
|
219
177
|
if (clash)
|
|
220
178
|
return clash;
|
|
221
|
-
//
|
|
222
|
-
//
|
|
223
|
-
// table first — and the surfaces do not agree on where in their lookup that is.
|
|
179
|
+
// A built-in command id already means something, so a plugin mark taking one would shadow
|
|
180
|
+
// that meaning wherever the mark table is consulted first.
|
|
224
181
|
if (!isBuiltinInlineKind(entry.kind) && isBuiltinCommandId(entry.mark.command)) {
|
|
225
182
|
return {
|
|
226
183
|
code: 'inline-construct-policy',
|
|
227
|
-
message: `kind "${entry.kind}" claims built-in command "${entry.mark.command}" for its mark
|
|
184
|
+
message: `kind "${entry.kind}" claims built-in command "${entry.mark.command}" for its mark: that id already has a built-in meaning; create a plugin command id for the mark`,
|
|
228
185
|
detail: { kind: entry.kind, command: entry.mark.command, issue: 'builtin-command' }
|
|
229
186
|
};
|
|
230
187
|
}
|
|
@@ -239,7 +196,7 @@ export function checkInlineConstructPolicy(entries, isKnownInlineKind, isBuiltin
|
|
|
239
196
|
if (column !== undefined) {
|
|
240
197
|
return {
|
|
241
198
|
code: 'inline-construct-policy',
|
|
242
|
-
message: `kind "${entry.kind}" is not revealable but its ${column} rewrites markers
|
|
199
|
+
message: `kind "${entry.kind}" is not revealable but its ${column} rewrites markers: a never-revealed construct's markers stay hidden, so the rewrite is invisible; mark the kind revealable or make the behavior atomic`,
|
|
243
200
|
detail: { kind: entry.kind, column }
|
|
244
201
|
};
|
|
245
202
|
}
|
|
@@ -251,7 +208,7 @@ function markClashOf(kind, mark, ranks, commands) {
|
|
|
251
208
|
if (rankHolder !== undefined) {
|
|
252
209
|
return {
|
|
253
210
|
code: 'inline-construct-policy',
|
|
254
|
-
message: `kinds "${rankHolder}" and "${kind}" share mark nesting rank ${mark.nestingRank}
|
|
211
|
+
message: `kinds "${rankHolder}" and "${kind}" share mark nesting rank ${mark.nestingRank}: which one wraps the other would fall to registration order`,
|
|
255
212
|
detail: { kinds: [rankHolder, kind], nestingRank: mark.nestingRank }
|
|
256
213
|
};
|
|
257
214
|
}
|
|
@@ -259,7 +216,7 @@ function markClashOf(kind, mark, ranks, commands) {
|
|
|
259
216
|
if (commandHolder !== undefined) {
|
|
260
217
|
return {
|
|
261
218
|
code: 'inline-construct-policy',
|
|
262
|
-
message: `kinds "${commandHolder}" and "${kind}" both claim command "${mark.command}"
|
|
219
|
+
message: `kinds "${commandHolder}" and "${kind}" both claim command "${mark.command}": one press cannot toggle two marks`,
|
|
263
220
|
detail: { kinds: [commandHolder, kind], command: mark.command }
|
|
264
221
|
};
|
|
265
222
|
}
|
|
@@ -267,74 +224,22 @@ function markClashOf(kind, mark, ranks, commands) {
|
|
|
267
224
|
commands.set(mark.command, kind);
|
|
268
225
|
return null;
|
|
269
226
|
}
|
|
270
|
-
/**
|
|
271
|
-
*
|
|
272
|
-
* cannot mean together. Each is silently inert rather than loud, so nothing fails until a
|
|
273
|
-
* gesture reaches the kind. G1.24 is the sibling over closure cells; this one reads the
|
|
274
|
-
* declarations alone.
|
|
275
|
-
*/
|
|
227
|
+
/** G1.37: a context-dependent kind registers no opener. The two live in separate registries, so
|
|
228
|
+
* the registration type can't see the pair; it fails silently until a gesture reaches the kind. */
|
|
276
229
|
export function checkDescriptorFieldCoherence(entries) {
|
|
277
230
|
for (const entry of entries) {
|
|
278
231
|
if (entry.contextDependentKind && entry.hasOpener) {
|
|
279
232
|
return {
|
|
280
233
|
code: 'descriptor-field-coherence',
|
|
281
|
-
message: `kind "${entry.kind}" declares contextDependentKind but registers an opener
|
|
234
|
+
message: `kind "${entry.kind}" declares contextDependentKind but registers an opener: the field suppresses the reparse that would re-derive the kind, so a kind the parser can recognize stops re-deriving; drop one`,
|
|
282
235
|
detail: { kind: entry.kind, fields: ['contextDependentKind', 'opener'] }
|
|
283
236
|
};
|
|
284
237
|
}
|
|
285
|
-
if (entry.declaresWholeBlockFocus && entry.supportsInline) {
|
|
286
|
-
return {
|
|
287
|
-
code: 'descriptor-field-coherence',
|
|
288
|
-
message: `kind "${entry.kind}" declares blockFocus: 'whole-block' and supportsInline — a whole-block unit's only addressable offsets are 0 and its display length, so inline constructs parsed from its raw have no caret positions to live at`,
|
|
289
|
-
detail: { kind: entry.kind, fields: ['blockFocus', 'supportsInline'] }
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
|
-
if (entry.declaresWholeBlockFocus && entry.declaresReservedChrome) {
|
|
293
|
-
return {
|
|
294
|
-
code: 'descriptor-field-coherence',
|
|
295
|
-
message: `kind "${entry.kind}" declares blockFocus: 'whole-block' and reservedChrome — the chrome slot is always present, so the kind is never childless and the focus-then-delete model it declares can never engage`,
|
|
296
|
-
detail: { kind: entry.kind, fields: ['blockFocus', 'reservedChrome'] }
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
if (entry.declaresReservedChrome && entry.unwrapLiftsFirstChild) {
|
|
300
|
-
return {
|
|
301
|
-
code: 'descriptor-field-coherence',
|
|
302
|
-
message: `kind "${entry.kind}" declares reservedChrome and a lifting firstChildBackspace — child 0 is the chrome row, so Backspace at its start would carry the container's own title out as a sibling block; declare 'keep-reserved-chrome'`,
|
|
303
|
-
detail: { kind: entry.kind, fields: ['reservedChrome', 'firstChildBackspace'] }
|
|
304
|
-
};
|
|
305
|
-
}
|
|
306
|
-
if (entry.unwrapKeepsReservedChrome && !entry.declaresReservedChrome) {
|
|
307
|
-
return {
|
|
308
|
-
code: 'descriptor-field-coherence',
|
|
309
|
-
message: `kind "${entry.kind}" declares firstChildBackspace: 'keep-reserved-chrome' without reservedChrome — child 0 is body, so the declared decline makes Backspace at the body start a dead key; declare a lifting strategy`,
|
|
310
|
-
detail: { kind: entry.kind, fields: ['reservedChrome', 'firstChildBackspace'] }
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
return null;
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* G1.32 — a kind demoting on Backspace at its content start declares where that content starts.
|
|
318
|
-
* Without the hook the content range IS the whole display, so the arm never fires and the
|
|
319
|
-
* declaration reads as behavior the kind does not have — silent, and only at the keystroke.
|
|
320
|
-
*/
|
|
321
|
-
export function checkContentStartBackspace(entries) {
|
|
322
|
-
for (const { kind, demotesFirst, declaresContentRange } of entries) {
|
|
323
|
-
if (!demotesFirst || declaresContentRange)
|
|
324
|
-
continue;
|
|
325
|
-
return {
|
|
326
|
-
code: 'content-start-backspace',
|
|
327
|
-
message: `kind "${kind}" declares contentStartBackspace but no getContentRange — its content starts at raw 0, where the demote arm never fires and the declaration is silently inert`,
|
|
328
|
-
detail: { kind }
|
|
329
|
-
};
|
|
330
238
|
}
|
|
331
239
|
return null;
|
|
332
240
|
}
|
|
333
|
-
/**
|
|
334
|
-
*
|
|
335
|
-
* per-KIND fact, validated once at registration: an unknown role makes the merge
|
|
336
|
-
* dispatcher fall through silently on every gesture that reaches the kind.
|
|
337
|
-
*/
|
|
241
|
+
/** G1.30: every kind declares a known `mergeRole`, checked once at registration, since an unknown
|
|
242
|
+
* role makes the merge dispatcher fall through silently. */
|
|
338
243
|
export function checkMergeRoleVocabulary(entries, isKnownMergeRole) {
|
|
339
244
|
for (const { kind, mergeRole } of entries) {
|
|
340
245
|
if (!isKnownMergeRole(mergeRole)) {
|
|
@@ -347,3 +252,22 @@ export function checkMergeRoleVocabulary(entries, isKnownMergeRole) {
|
|
|
347
252
|
}
|
|
348
253
|
return null;
|
|
349
254
|
}
|
|
255
|
+
/** G1.40: every built-in kind declares how it reads on the page and its likely height; a built-in
|
|
256
|
+
* left on the defaults would take a plugin's guesses unnoticed. */
|
|
257
|
+
export function checkBuiltinPresentationFacts(entries) {
|
|
258
|
+
for (const { kind, declaresPageRole, declaresEstimateHeight } of entries) {
|
|
259
|
+
const missing = !declaresPageRole
|
|
260
|
+
? 'pageRole'
|
|
261
|
+
: !declaresEstimateHeight
|
|
262
|
+
? 'estimateHeight'
|
|
263
|
+
: null;
|
|
264
|
+
if (missing === null)
|
|
265
|
+
continue;
|
|
266
|
+
return {
|
|
267
|
+
code: 'builtin-presentation-facts',
|
|
268
|
+
message: `built-in kind "${kind}" declares no ${missing}; declare it in built-in-descriptors.ts`,
|
|
269
|
+
detail: { kind, missing }
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* G1.28
|
|
3
|
-
* inherits
|
|
4
|
-
* that reads `textContent` back would commit the loss
|
|
5
|
-
*
|
|
2
|
+
* G1.28: the text a block renders still matches its raw bytes. A renderer that passes bytes
|
|
3
|
+
* through an HTML parser inherits whatever that browser normalizes (U+0000, line endings,
|
|
4
|
+
* surrogates), and a gesture that reads `textContent` back would commit the loss. jsdom preserves
|
|
5
|
+
* all of them, so only this runtime check can catch it, never a unit test.
|
|
6
6
|
*/
|
|
7
7
|
import type { InvariantViolation } from '../assert';
|
|
8
8
|
export declare function checkRenderedTextFidelity(rendered: string, expected: string): InvariantViolation | null;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* G1.28
|
|
3
|
-
* inherits
|
|
4
|
-
* that reads `textContent` back would commit the loss
|
|
5
|
-
*
|
|
2
|
+
* G1.28: the text a block renders still matches its raw bytes. A renderer that passes bytes
|
|
3
|
+
* through an HTML parser inherits whatever that browser normalizes (U+0000, line endings,
|
|
4
|
+
* surrogates), and a gesture that reads `textContent` back would commit the loss. jsdom preserves
|
|
5
|
+
* all of them, so only this runtime check can catch it, never a unit test.
|
|
6
6
|
*/
|
|
7
7
|
/** First index at which the strings differ, or -1. */
|
|
8
8
|
function firstDivergence(rendered, expected) {
|
|
@@ -21,7 +21,7 @@ export function checkRenderedTextFidelity(rendered, expected) {
|
|
|
21
21
|
const window = (text) => text.slice(Math.max(0, at - context), at + context);
|
|
22
22
|
return {
|
|
23
23
|
code: 'rendered-text-fidelity',
|
|
24
|
-
message: `rendered text diverges from the block's raw at index ${at}
|
|
24
|
+
message: `rendered text diverges from the block's raw at index ${at}: the HTML parser normalized a byte the CST still holds`,
|
|
25
25
|
detail: {
|
|
26
26
|
at,
|
|
27
27
|
renderedLength: rendered.length,
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* G1.29
|
|
3
|
-
*
|
|
4
|
-
* a
|
|
5
|
-
*
|
|
6
|
-
* pairs are exempt (an intra-table rectangle's focus is unflagged by convention).
|
|
2
|
+
* G1.29: a stored endpoint's offset is read in its own block's coordinates. On a block that counts
|
|
3
|
+
* cells (a table) it is a flagged cell index inside the grid, a rectangle's corners included.
|
|
4
|
+
* Elsewhere it's a character offset inside `[0, displayLength(raw)]`, and inside a kind with no
|
|
5
|
+
* character positions one of those two ends, because anything between them cuts an opaque block.
|
|
7
6
|
*/
|
|
8
7
|
import type { DocumentView } from '../core/node-views';
|
|
9
8
|
import type { InvariantViolation } from '../assert';
|
|
10
9
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* A plain structural point, not `selection/`'s `SelectionPoint`: no check in `invariants/` depends
|
|
11
|
+
* on the selection model, at runtime or in its types.
|
|
13
12
|
*/
|
|
14
13
|
export interface EndpointCoordinate {
|
|
15
14
|
readonly path: readonly number[];
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* G1.29
|
|
3
|
-
*
|
|
4
|
-
* a
|
|
5
|
-
*
|
|
6
|
-
* pairs are exempt (an intra-table rectangle's focus is unflagged by convention).
|
|
2
|
+
* G1.29: a stored endpoint's offset is read in its own block's coordinates. On a block that counts
|
|
3
|
+
* cells (a table) it is a flagged cell index inside the grid, a rectangle's corners included.
|
|
4
|
+
* Elsewhere it's a character offset inside `[0, displayLength(raw)]`, and inside a kind with no
|
|
5
|
+
* character positions one of those two ends, because anything between them cuts an opaque block.
|
|
7
6
|
*/
|
|
8
7
|
import { displayLength } from '../core/lines';
|
|
9
8
|
import { isWholeBlockUnit } from '../schema/whole-block-unit';
|
|
9
|
+
import { countsCells, tableCellCount } from '../schema/block-kind-descriptor';
|
|
10
10
|
function resolve(doc, path) {
|
|
11
11
|
let parent = doc;
|
|
12
12
|
for (const idx of path) {
|
|
@@ -17,12 +17,7 @@ function resolve(doc, path) {
|
|
|
17
17
|
}
|
|
18
18
|
return parent === doc ? null : parent;
|
|
19
19
|
}
|
|
20
|
-
function samePath(a, b) {
|
|
21
|
-
return a.length === b.length && a.every((v, i) => v === b[i]);
|
|
22
|
-
}
|
|
23
20
|
export function checkCrossBlockEndpointCoordinates(doc, anchor, focus) {
|
|
24
|
-
if (samePath(anchor.path, focus.path))
|
|
25
|
-
return null;
|
|
26
21
|
for (const [role, point] of [
|
|
27
22
|
['anchor', anchor],
|
|
28
23
|
['focus', focus]
|
|
@@ -38,11 +33,18 @@ export function checkCrossBlockEndpointCoordinates(doc, anchor, focus) {
|
|
|
38
33
|
}
|
|
39
34
|
return null;
|
|
40
35
|
}
|
|
41
|
-
/** The
|
|
42
|
-
* offset
|
|
36
|
+
/** The same mistake the other way round: a cell index on a block with no cells is read further
|
|
37
|
+
* down as a character offset, so the corruption arrives from the opposite side. */
|
|
43
38
|
function checkCellCoordinate(role, point, node) {
|
|
44
|
-
if (node
|
|
45
|
-
|
|
39
|
+
if (countsCells(node)) {
|
|
40
|
+
if (point.offset >= 0 && point.offset < tableCellCount(node))
|
|
41
|
+
return null;
|
|
42
|
+
return {
|
|
43
|
+
code: 'endpoint-cell-index-out-of-range',
|
|
44
|
+
message: `cross-block ${role} [${point.path.join(',')}] carries cell index ${point.offset}, outside the table's 0..${tableCellCount(node) - 1}`,
|
|
45
|
+
detail: { role, path: [...point.path], offset: point.offset }
|
|
46
|
+
};
|
|
47
|
+
}
|
|
46
48
|
return {
|
|
47
49
|
code: 'endpoint-cell-coordinate-off-table',
|
|
48
50
|
message: `cross-block ${role} [${point.path.join(',')}] carries a cell index (${point.offset}) against a "${node.kind}", which has no cells`,
|
|
@@ -52,7 +54,7 @@ function checkCellCoordinate(role, point, node) {
|
|
|
52
54
|
function checkCharOffset(role, point, node) {
|
|
53
55
|
const detail = { role, path: [...point.path], offset: point.offset };
|
|
54
56
|
const at = `cross-block ${role} [${point.path.join(',')}]`;
|
|
55
|
-
if (node
|
|
57
|
+
if (countsCells(node)) {
|
|
56
58
|
return {
|
|
57
59
|
code: 'endpoint-cell-coordinate',
|
|
58
60
|
message: `${at} addresses a table but carries a character offset (${point.offset})`,
|
|
@@ -70,7 +72,7 @@ function checkCharOffset(role, point, node) {
|
|
|
70
72
|
if (isWholeBlockUnit(node) && point.offset !== 0 && point.offset !== end) {
|
|
71
73
|
return {
|
|
72
74
|
code: 'endpoint-whole-block-offset',
|
|
73
|
-
message: `${at} carries offset ${point.offset} inside "${node.kind}", which has no character positions
|
|
75
|
+
message: `${at} carries offset ${point.offset} inside "${node.kind}", which has no character positions: only 0 and ${end} address it`,
|
|
74
76
|
detail
|
|
75
77
|
};
|
|
76
78
|
}
|