@voithos-labs/aragonite 0.10.3 → 0.10.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/a11y-strings.d.ts +12 -5
- package/dist/a11y-strings.js +61 -5
- package/dist/action-contracts.d.ts +242 -155
- package/dist/action-contracts.js +2 -2
- package/dist/active-editor.d.ts +3 -3
- package/dist/active-editor.js +8 -9
- package/dist/ambient/ambient-dom.d.ts +2 -5
- package/dist/ambient/ambient-dom.js +16 -62
- package/dist/assert.js +6 -5
- package/dist/block-component.d.ts +135 -109
- package/dist/block-component.js +30 -22
- package/dist/block-id.d.ts +6 -10
- package/dist/block-id.js +25 -14
- package/dist/bounded-memo.d.ts +5 -5
- package/dist/bounded-memo.js +6 -6
- package/dist/components/BlockDragHandle.svelte +13 -20
- package/dist/components/BlockHost.svelte +56 -134
- package/dist/components/BlockList.svelte +22 -19
- package/dist/components/DecorationOverlay.svelte +9 -10
- package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
- package/dist/components/Editor.svelte +619 -1089
- package/dist/components/Editor.svelte.d.ts +9 -20
- package/dist/components/GapCaret.svelte +26 -59
- package/dist/components/SelectionOverlay.svelte +36 -67
- package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
- package/dist/components/TailInsert.svelte +8 -55
- package/dist/components/TailInsert.svelte.d.ts +4 -6
- package/dist/components/block-content-selector.d.ts +11 -11
- package/dist/components/block-content-selector.js +11 -11
- package/dist/components/block-el-lookup.d.ts +6 -0
- package/dist/components/block-el-lookup.js +27 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
- package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
- package/dist/components/blocks/code/CodeBlock.svelte +255 -276
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
- package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
- package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
- package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
- package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
- package/dist/components/blocks/code/code-bootstrap.js +35 -28
- package/dist/components/blocks/code/code-context-actions.js +5 -4
- package/dist/components/blocks/code/code-enter.js +2 -2
- package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
- package/dist/components/blocks/code/code-fence-boundary.js +40 -66
- package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
- package/dist/components/blocks/code/code-fence-exit.js +24 -25
- package/dist/components/blocks/code/code-indent.d.ts +2 -2
- package/dist/components/blocks/code/code-indent.js +4 -7
- package/dist/components/blocks/code/code-languages.d.ts +16 -12
- package/dist/components/blocks/code/code-languages.js +58 -32
- package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
- package/dist/components/blocks/code/code-paste-surface.js +9 -18
- package/dist/components/blocks/code/code-renderer.d.ts +21 -5
- package/dist/components/blocks/code/code-renderer.js +90 -125
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
- package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
- package/dist/components/blocks/directive/activate-directives.js +18 -13
- package/dist/components/blocks/editable-leaf.d.ts +50 -74
- package/dist/components/blocks/editable-leaf.js +144 -202
- package/dist/components/blocks/editable-surface.d.ts +96 -100
- package/dist/components/blocks/editable-surface.js +101 -109
- package/dist/components/blocks/list/ListBlock.svelte +46 -90
- package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
- package/dist/components/blocks/list/task-checkbox.js +12 -7
- package/dist/components/blocks/plain-text-backend.d.ts +4 -20
- package/dist/components/blocks/plain-text-backend.js +9 -43
- package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
- package/dist/components/blocks/surface-wiring.svelte.js +15 -34
- package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
- package/dist/components/blocks/table/TableBlock.svelte +100 -165
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
- package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
- package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
- package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
- package/dist/components/blocks/table/cell-pointer.js +49 -71
- package/dist/components/blocks/table/cell-render.d.ts +24 -29
- package/dist/components/blocks/table/cell-render.js +29 -31
- package/dist/components/blocks/table/selected-cells.d.ts +7 -7
- package/dist/components/blocks/table/selected-cells.js +9 -13
- package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
- package/dist/components/blocks/table/table-caret-at-point.js +5 -5
- package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
- package/dist/components/blocks/table/table-cell-paste.js +27 -43
- package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
- package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
- package/dist/components/blocks/table/table-menu-model.js +6 -10
- package/dist/components/blocks/table/table-navigation.js +2 -2
- package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
- package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
- package/dist/components/blocks/text/auto-pair-record.js +51 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
- package/dist/components/blocks/text/click-snap-guard.js +16 -5
- package/dist/components/blocks/text/composition-seat.d.ts +17 -14
- package/dist/components/blocks/text/composition-seat.js +11 -11
- package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
- package/dist/components/blocks/text/construct-edge-delete.js +50 -65
- package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
- package/dist/components/blocks/text/construct-reveal.js +13 -14
- package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
- package/dist/components/blocks/text/delimiter-autopair.js +87 -103
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
- package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
- package/dist/components/blocks/text/edge-seat.d.ts +17 -26
- package/dist/components/blocks/text/edge-seat.js +43 -70
- package/dist/components/blocks/text/link-at-point.d.ts +9 -9
- package/dist/components/blocks/text/link-at-point.js +12 -15
- package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
- package/dist/components/blocks/text/live-join-seam.js +75 -112
- package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
- package/dist/components/blocks/text/live-selection-edit.js +32 -105
- package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
- package/dist/components/blocks/text/live-split-rebalance.js +50 -67
- package/dist/components/blocks/text/marker-completion.d.ts +7 -12
- package/dist/components/blocks/text/marker-completion.js +17 -10
- package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
- package/dist/components/blocks/text/pending-mark-insert.js +30 -49
- package/dist/components/blocks/text/screen-diff.d.ts +5 -15
- package/dist/components/blocks/text/screen-diff.js +5 -19
- package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
- package/dist/components/blocks/text/text-clipboard.js +27 -32
- package/dist/components/blocks/text/text-keydown.d.ts +20 -30
- package/dist/components/blocks/text/text-keydown.js +54 -51
- package/dist/components/blocks/text/text-render.d.ts +25 -35
- package/dist/components/blocks/text/text-render.js +82 -61
- package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
- package/dist/components/blocks/text/widget-adjacency.js +17 -17
- package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
- package/dist/components/blocks/text/widget-interaction.js +243 -208
- package/dist/components/blocks/widget-portal.d.ts +20 -29
- package/dist/components/blocks/widget-portal.js +16 -14
- package/dist/components/built-in-blocks.d.ts +3 -4
- package/dist/components/built-in-blocks.js +17 -18
- package/dist/components/drag-handle.d.ts +13 -30
- package/dist/components/drag-handle.js +25 -63
- package/dist/components/editor-built-ins.d.ts +1 -0
- package/dist/components/editor-built-ins.js +16 -0
- package/dist/components/editor-root-clipboard.d.ts +6 -6
- package/dist/components/editor-root-clipboard.js +16 -27
- package/dist/components/editor-root-document-swap.d.ts +49 -0
- package/dist/components/editor-root-document-swap.js +54 -0
- package/dist/components/editor-root-focus.d.ts +5 -4
- package/dist/components/editor-root-focus.js +51 -22
- package/dist/components/editor-root-focused-surface.d.ts +35 -0
- package/dist/components/editor-root-focused-surface.js +65 -0
- package/dist/components/editor-root-geometry.d.ts +15 -24
- package/dist/components/editor-root-geometry.js +27 -31
- package/dist/components/editor-root-gestures.d.ts +39 -0
- package/dist/components/editor-root-gestures.js +189 -0
- package/dist/components/editor-root-keydown.d.ts +10 -25
- package/dist/components/editor-root-keydown.js +19 -43
- package/dist/components/editor-root-listeners.d.ts +22 -31
- package/dist/components/editor-root-listeners.js +49 -46
- package/dist/components/editor-root-menus.d.ts +51 -0
- package/dist/components/editor-root-menus.js +147 -0
- package/dist/components/editor-root-mode-flip.d.ts +16 -11
- package/dist/components/editor-root-mode-flip.js +36 -34
- package/dist/components/editor-root-scroll-host.d.ts +22 -0
- package/dist/components/editor-root-scroll-host.js +34 -0
- package/dist/components/editor-root-test-surface.d.ts +48 -0
- package/dist/components/editor-root-test-surface.js +6 -0
- package/dist/components/image/ImageOverlayHost.svelte +44 -35
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
- package/dist/components/image/ImageProperties.svelte +37 -41
- package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
- package/dist/components/image/ImageResizeHandles.svelte +26 -30
- package/dist/components/image/image-crop.d.ts +5 -11
- package/dist/components/image/image-crop.js +5 -11
- package/dist/components/image/image-edit-commit.d.ts +19 -16
- package/dist/components/image/image-edit-commit.js +74 -38
- package/dist/components/image/image-resize.d.ts +2 -5
- package/dist/components/image/image-resize.js +3 -6
- package/dist/components/image/image-widget-editing.d.ts +3 -3
- package/dist/components/image/image-widget-editing.js +9 -9
- package/dist/components/image/widget-dom.d.ts +2 -3
- package/dist/components/image/widget-dom.js +19 -24
- package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
- package/dist/components/image/widget-selection-state.svelte.js +26 -19
- package/dist/components/kind-cue.svelte.d.ts +21 -0
- package/dist/components/kind-cue.svelte.js +35 -0
- package/dist/components/link-card/LinkCard.svelte +115 -64
- package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
- package/dist/components/link-card/LinkCardHost.svelte +42 -33
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
- package/dist/components/link-card/link-card-commit.d.ts +16 -19
- package/dist/components/link-card/link-card-commit.js +21 -30
- package/dist/components/link-card/link-card-entry.d.ts +13 -23
- package/dist/components/link-card/link-card-entry.js +16 -24
- package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
- package/dist/components/link-card/link-card-state.svelte.js +2 -2
- package/dist/components/lrd-map-gate.d.ts +4 -11
- package/dist/components/lrd-map-gate.js +5 -11
- package/dist/components/menu/BlockMenu.svelte +20 -81
- package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
- package/dist/components/menu/InlineMenuHost.svelte +191 -0
- package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
- package/dist/components/menu/MenuIcon.svelte +3 -103
- package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
- package/dist/components/menu/SelectionToolbar.svelte +380 -0
- package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
- package/dist/components/menu/clipboard-actions.d.ts +3 -4
- package/dist/components/menu/clipboard-actions.js +3 -4
- package/dist/components/menu/default-context-actions.d.ts +4 -13
- package/dist/components/menu/default-context-actions.js +49 -67
- package/dist/components/menu/flyout-placement.d.ts +2 -2
- package/dist/components/menu/flyout-placement.js +2 -2
- package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
- package/dist/components/menu/menu-presence.svelte.js +19 -0
- package/dist/components/paste-image-arm.d.ts +6 -11
- package/dist/components/paste-image-arm.js +11 -18
- package/dist/components/portal.d.ts +2 -5
- package/dist/components/portal.js +4 -7
- package/dist/core/directive/activate.d.ts +4 -5
- package/dist/core/directive/activate.js +8 -9
- package/dist/core/directive/container-opener.js +13 -12
- package/dist/core/directive/grammar.d.ts +2 -5
- package/dist/core/directive/grammar.js +10 -10
- package/dist/core/directive/kinds.d.ts +4 -7
- package/dist/core/directive/kinds.js +14 -16
- package/dist/core/directive/registry.d.ts +12 -9
- package/dist/core/directive/registry.js +19 -20
- package/dist/core/directive/text-recognizer.d.ts +3 -2
- package/dist/core/directive/text-recognizer.js +5 -9
- package/dist/core/escapable.d.ts +1 -5
- package/dist/core/escapable.js +1 -5
- package/dist/core/inline/backticks.d.ts +3 -4
- package/dist/core/inline/backticks.js +3 -4
- package/dist/core/inline/character-refs.js +2 -1
- package/dist/core/inline/destination-bytes.d.ts +6 -3
- package/dist/core/inline/destination-bytes.js +50 -8
- package/dist/core/inline/entity-widget.d.ts +4 -3
- package/dist/core/inline/entity-widget.js +6 -6
- package/dist/core/inline/format-toggle.d.ts +22 -28
- package/dist/core/inline/format-toggle.js +97 -129
- package/dist/core/inline/html-entities.d.ts +2 -3
- package/dist/core/inline/html-entities.js +2 -3
- package/dist/core/inline/html-tag-grammar.js +6 -2
- package/dist/core/inline/image-dimensions.d.ts +2 -0
- package/dist/core/inline/image-dimensions.js +19 -2
- package/dist/core/inline/image-source-bytes.d.ts +11 -0
- package/dist/core/inline/image-source-bytes.js +71 -0
- package/dist/core/inline/index.d.ts +28 -21
- package/dist/core/inline/index.js +56 -34
- package/dist/core/inline/inline-cache.d.ts +12 -15
- package/dist/core/inline/inline-cache.js +11 -14
- package/dist/core/inline/inline-widgets.d.ts +55 -68
- package/dist/core/inline/inline-widgets.js +55 -58
- package/dist/core/inline/link-destination.d.ts +31 -0
- package/dist/core/inline/link-destination.js +129 -0
- package/dist/core/inline/link-reference-resolver.d.ts +8 -6
- package/dist/core/inline/link-reference-resolver.js +10 -6
- package/dist/core/inline/link-source-bytes.d.ts +31 -0
- package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
- package/dist/core/inline/live-edit/read-back.d.ts +29 -0
- package/dist/core/inline/live-edit/read-back.js +50 -0
- package/dist/core/inline/picture.d.ts +10 -0
- package/dist/core/inline/picture.js +40 -0
- package/dist/core/inline/scan/autolinks.d.ts +7 -8
- package/dist/core/inline/scan/autolinks.js +80 -59
- package/dist/core/inline/scan/brackets.d.ts +2 -2
- package/dist/core/inline/scan/brackets.js +6 -103
- package/dist/core/inline/scan/code-spans.d.ts +4 -0
- package/dist/core/inline/scan/code-spans.js +8 -0
- package/dist/core/inline/scan/emphasis.js +10 -14
- package/dist/core/inline/scan/index.d.ts +3 -1
- package/dist/core/inline/scan/index.js +32 -33
- package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
- package/dist/core/inline/scan/plugin-syntax.js +75 -89
- package/dist/core/inline/scan/scan-state.d.ts +2 -0
- package/dist/core/inline/scan/scan-state.js +1 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
- package/dist/core/inline/scan/simple-nodes.js +2 -5
- package/dist/core/inline/scan/triggers.d.ts +17 -0
- package/dist/core/inline/scan/triggers.js +26 -0
- package/dist/core/inline/scan/url.js +8 -10
- package/dist/core/inline/transparency.d.ts +2 -1
- package/dist/core/inline/transparency.js +33 -17
- package/dist/core/inline/visibility.d.ts +30 -49
- package/dist/core/inline/visibility.js +31 -49
- package/dist/core/inline/walk.d.ts +4 -10
- package/dist/core/inline/walk.js +4 -10
- package/dist/core/inline-render.d.ts +22 -27
- package/dist/core/inline-render.js +51 -60
- package/dist/core/lines.d.ts +67 -26
- package/dist/core/lines.js +164 -33
- package/dist/core/metadata-parity.d.ts +9 -0
- package/dist/core/metadata-parity.js +25 -0
- package/dist/core/node-views.d.ts +7 -6
- package/dist/core/node-views.js +5 -5
- package/dist/core/nodes.d.ts +34 -44
- package/dist/core/nodes.js +4 -12
- package/dist/core/parser.d.ts +27 -34
- package/dist/core/parser.js +53 -67
- package/dist/core/parsers/blockquote.d.ts +5 -8
- package/dist/core/parsers/blockquote.js +11 -10
- package/dist/core/parsers/built-in-openers.d.ts +2 -5
- package/dist/core/parsers/built-in-openers.js +5 -8
- package/dist/core/parsers/fence-syntax.d.ts +36 -7
- package/dist/core/parsers/fence-syntax.js +61 -11
- package/dist/core/parsers/fenced-code.d.ts +16 -0
- package/dist/core/parsers/fenced-code.js +16 -15
- package/dist/core/parsers/heading.d.ts +19 -2
- package/dist/core/parsers/heading.js +50 -2
- package/dist/core/parsers/html-block.d.ts +3 -6
- package/dist/core/parsers/html-block.js +10 -11
- package/dist/core/parsers/indented-code.d.ts +1 -1
- package/dist/core/parsers/indented-code.js +2 -8
- package/dist/core/parsers/link-reference.d.ts +5 -3
- package/dist/core/parsers/link-reference.js +116 -120
- package/dist/core/parsers/list.d.ts +12 -5
- package/dist/core/parsers/list.js +53 -36
- package/dist/core/parsers/paragraph.d.ts +3 -3
- package/dist/core/parsers/paragraph.js +14 -5
- package/dist/core/parsers/table-completion.d.ts +2 -5
- package/dist/core/parsers/table-completion.js +7 -10
- package/dist/core/parsers/table.d.ts +8 -8
- package/dist/core/parsers/table.js +23 -26
- package/dist/core/parsers/thematic-break.js +15 -14
- package/dist/core/paths.d.ts +13 -0
- package/dist/core/paths.js +31 -0
- package/dist/core/terminator-escalation.d.ts +0 -7
- package/dist/core/terminator-escalation.js +5 -8
- package/dist/core/url-policy.d.ts +2 -5
- package/dist/core/url-policy.js +8 -12
- package/dist/cursor/caret-memory.d.ts +34 -0
- package/dist/cursor/caret-memory.js +82 -0
- package/dist/cursor/coordinate-spaces.d.ts +26 -19
- package/dist/cursor/coordinate-spaces.js +32 -20
- package/dist/cursor/dom-walk.d.ts +7 -13
- package/dist/cursor/dom-walk.js +7 -13
- package/dist/cursor/edge-affinity.d.ts +7 -35
- package/dist/cursor/edge-affinity.js +13 -44
- package/dist/cursor/focused-caret.d.ts +6 -8
- package/dist/cursor/focused-caret.js +7 -16
- package/dist/cursor/height-model.d.ts +3 -3
- package/dist/cursor/height-model.js +5 -5
- package/dist/cursor/height-oracle.d.ts +10 -7
- package/dist/cursor/height-oracle.js +26 -75
- package/dist/cursor/observe-resize.d.ts +13 -0
- package/dist/cursor/observe-resize.js +43 -0
- package/dist/cursor/overlay-rects.d.ts +2 -5
- package/dist/cursor/overlay-rects.js +2 -5
- package/dist/cursor/overlay-remeasure.d.ts +6 -7
- package/dist/cursor/overlay-remeasure.js +10 -14
- package/dist/cursor/pending-marks.d.ts +7 -9
- package/dist/cursor/pending-marks.js +6 -27
- package/dist/cursor/point-offset.d.ts +16 -10
- package/dist/cursor/point-offset.js +60 -25
- package/dist/cursor/reveal-source.d.ts +7 -11
- package/dist/cursor/reveal-source.js +10 -18
- package/dist/cursor/scroll-ancestors.d.ts +9 -20
- package/dist/cursor/scroll-ancestors.js +14 -26
- package/dist/cursor/scroll-owner.d.ts +92 -0
- package/dist/cursor/scroll-owner.js +283 -0
- package/dist/cursor/scrollport.d.ts +16 -8
- package/dist/cursor/scrollport.js +28 -5
- package/dist/cursor/sticky-column.d.ts +6 -29
- package/dist/cursor/sticky-column.js +6 -49
- package/dist/cursor/sticky-measure.d.ts +14 -9
- package/dist/cursor/sticky-measure.js +99 -49
- package/dist/cursor/surface-backend.d.ts +41 -0
- package/dist/cursor/surface-backend.js +78 -0
- package/dist/cursor/typography-estimates.d.ts +3 -3
- package/dist/cursor/typography-estimates.js +3 -3
- package/dist/cursor/visual-lines.d.ts +25 -13
- package/dist/cursor/visual-lines.js +72 -28
- package/dist/cursor/widget-edge-snap.d.ts +23 -0
- package/dist/cursor/widget-edge-snap.js +39 -0
- package/dist/cursor/widget-offset.d.ts +111 -102
- package/dist/cursor/widget-offset.js +352 -177
- package/dist/debug/diagnostics-report.d.ts +6 -6
- package/dist/debug/diagnostics-report.js +5 -5
- package/dist/debug/dump-tree.js +2 -2
- package/dist/debug/editor-diagnostics.d.ts +15 -0
- package/dist/debug/editor-diagnostics.js +33 -0
- package/dist/debug/inspect.d.ts +2 -2
- package/dist/debug/inspect.js +4 -4
- package/dist/debug/interaction-trace.d.ts +14 -15
- package/dist/debug/interaction-trace.js +19 -20
- package/dist/debug/operations-log.d.ts +1 -1
- package/dist/debug/operations-log.js +1 -1
- package/dist/decorations/buckets.d.ts +6 -12
- package/dist/decorations/buckets.js +4 -11
- package/dist/decorations/decoration-state.svelte.d.ts +2 -3
- package/dist/decorations/decoration-state.svelte.js +24 -26
- package/dist/decorations/island-dom.d.ts +10 -18
- package/dist/decorations/island-dom.js +25 -50
- package/dist/decorations/reserved-attrs.d.ts +6 -8
- package/dist/decorations/reserved-attrs.js +31 -17
- package/dist/decorations/types.d.ts +6 -7
- package/dist/decorations/types.js +2 -1
- package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
- package/dist/decorations/use-block-decorations.svelte.js +71 -0
- package/dist/decorations/widget-dom.d.ts +3 -3
- package/dist/decorations/widget-dom.js +5 -5
- package/dist/dev-warn.d.ts +5 -2
- package/dist/dev-warn.js +16 -4
- package/dist/editor-actions/ancestry-folds.d.ts +9 -14
- package/dist/editor-actions/ancestry-folds.js +13 -18
- package/dist/editor-actions/block-edit-core.d.ts +49 -22
- package/dist/editor-actions/block-edit-core.js +279 -151
- package/dist/editor-actions/block-edit-scope.d.ts +63 -50
- package/dist/editor-actions/block-edit-scope.js +100 -48
- package/dist/editor-actions/block-edit.d.ts +2 -3
- package/dist/editor-actions/block-edit.js +14 -90
- package/dist/editor-actions/commit/history.d.ts +4 -4
- package/dist/editor-actions/commit/history.js +33 -34
- package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
- package/dist/editor-actions/commit/reading-write-gate.js +56 -0
- package/dist/editor-actions/commit/text-batch.d.ts +7 -11
- package/dist/editor-actions/commit/text-batch.js +6 -7
- package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
- package/dist/editor-actions/commit/undo-controller.js +346 -216
- package/dist/editor-actions/container-block-component.d.ts +32 -51
- package/dist/editor-actions/container-block-component.js +66 -92
- package/dist/editor-actions/container-edit.d.ts +4 -2
- package/dist/editor-actions/container-edit.js +14 -44
- package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
- package/dist/editor-actions/container-exit-overrides.js +19 -21
- package/dist/editor-actions/deps.d.ts +25 -32
- package/dist/editor-actions/enter-completion.d.ts +12 -15
- package/dist/editor-actions/enter-completion.js +49 -51
- package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
- package/dist/editor-actions/focus/focus-dispatch.js +33 -52
- package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
- package/dist/editor-actions/focus/focus-landing.js +29 -14
- package/dist/editor-actions/focus/focus.d.ts +3 -2
- package/dist/editor-actions/focus/focus.js +42 -59
- package/dist/editor-actions/index.d.ts +4 -3
- package/dist/editor-actions/index.js +5 -4
- package/dist/editor-actions/inline-range-commit.d.ts +18 -16
- package/dist/editor-actions/inline-range-commit.js +45 -54
- package/dist/editor-actions/leaf-write.d.ts +11 -0
- package/dist/editor-actions/leaf-write.js +102 -0
- package/dist/editor-actions/list-context.d.ts +9 -10
- package/dist/editor-actions/list-context.js +115 -110
- package/dist/editor-actions/list-overrides.d.ts +13 -5
- package/dist/editor-actions/list-overrides.js +36 -12
- package/dist/editor-actions/merge-fallback.d.ts +10 -16
- package/dist/editor-actions/merge-fallback.js +11 -22
- package/dist/editor-actions/nested/container-actions.d.ts +37 -0
- package/dist/editor-actions/nested/container-actions.js +42 -0
- package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
- package/dist/editor-actions/nested/emptied-container.js +5 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
- package/dist/editor-actions/nested/nested-actions.js +17 -15
- package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
- package/dist/editor-actions/nested/nested-block-edit.js +40 -134
- package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
- package/dist/editor-actions/nested/nested-focus.js +33 -21
- package/dist/editor-actions/paste-coordinator.d.ts +3 -2
- package/dist/editor-actions/paste-coordinator.js +17 -13
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
- package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
- package/dist/editor-actions/plugin/container.d.ts +55 -76
- package/dist/editor-actions/plugin/container.js +105 -186
- package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
- package/dist/editor-actions/plugin/directive-container.js +7 -8
- package/dist/editor-actions/reorder-action.d.ts +7 -12
- package/dist/editor-actions/reorder-action.js +32 -48
- package/dist/editor-actions/reorder-drag.d.ts +12 -8
- package/dist/editor-actions/reorder-drag.js +45 -41
- package/dist/editor-actions/replacement-focus.d.ts +13 -21
- package/dist/editor-actions/replacement-focus.js +32 -33
- package/dist/editor-actions/search-replace.js +71 -67
- package/dist/editor-actions/stored-caret.d.ts +7 -0
- package/dist/editor-actions/stored-caret.js +10 -0
- package/dist/editor-actions/table-context.d.ts +9 -11
- package/dist/editor-actions/table-context.js +70 -93
- package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
- package/dist/editor-actions/unwrap-strategies.js +52 -63
- package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
- package/dist/editor-actions/whole-block-focus-surface.js +43 -53
- package/dist/editor-events.d.ts +25 -29
- package/dist/editor-events.js +17 -28
- package/dist/editor-keys.d.ts +96 -104
- package/dist/editor-keys.js +11 -24
- package/dist/editor-props.d.ts +91 -71
- package/dist/editor-rects.d.ts +23 -34
- package/dist/editor-rects.js +9 -77
- package/dist/env.d.ts +6 -4
- package/dist/env.js +8 -4
- package/dist/index.d.ts +6 -2
- package/dist/index.js +5 -2
- package/dist/inline-menu/inline-menu-session.d.ts +37 -0
- package/dist/inline-menu/inline-menu-session.js +98 -0
- package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
- package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
- package/dist/inline-menu/types.d.ts +77 -0
- package/dist/inline-menu/types.js +7 -0
- package/dist/invariants/child-id-parity.d.ts +23 -0
- package/dist/invariants/child-id-parity.js +39 -0
- package/dist/invariants/commit-paths.d.ts +4 -4
- package/dist/invariants/commit-paths.js +4 -4
- package/dist/invariants/commit-scope.d.ts +4 -4
- package/dist/invariants/commit-scope.js +9 -8
- package/dist/invariants/context-keys.d.ts +2 -5
- package/dist/invariants/context-keys.js +3 -6
- package/dist/invariants/descriptor.d.ts +2 -6
- package/dist/invariants/descriptor.js +2 -6
- package/dist/invariants/inline-transitions.d.ts +9 -16
- package/dist/invariants/inline-transitions.js +10 -18
- package/dist/invariants/install.d.ts +18 -27
- package/dist/invariants/install.js +29 -30
- package/dist/invariants/keeps-a-block.d.ts +7 -0
- package/dist/invariants/keeps-a-block.js +14 -0
- package/dist/invariants/landable-caret.d.ts +5 -7
- package/dist/invariants/landable-caret.js +8 -11
- package/dist/invariants/landing-focus-scroll.d.ts +7 -0
- package/dist/invariants/landing-focus-scroll.js +13 -0
- package/dist/invariants/landing-value.d.ts +13 -0
- package/dist/invariants/landing-value.js +27 -0
- package/dist/invariants/marker-css-parity.d.ts +5 -6
- package/dist/invariants/marker-css-parity.js +11 -12
- package/dist/invariants/measures-in-own-list.d.ts +6 -0
- package/dist/invariants/measures-in-own-list.js +13 -0
- package/dist/invariants/node-shape.d.ts +18 -37
- package/dist/invariants/node-shape.js +123 -79
- package/dist/invariants/open-tail.d.ts +7 -0
- package/dist/invariants/open-tail.js +45 -0
- package/dist/invariants/placement-ends-widget.d.ts +8 -0
- package/dist/invariants/placement-ends-widget.js +13 -0
- package/dist/invariants/registry.d.ts +27 -66
- package/dist/invariants/registry.js +61 -137
- package/dist/invariants/render-fidelity.d.ts +4 -4
- package/dist/invariants/render-fidelity.js +5 -5
- package/dist/invariants/selection-endpoints.d.ts +6 -7
- package/dist/invariants/selection-endpoints.js +18 -16
- package/dist/invariants/single-node-sink.d.ts +4 -5
- package/dist/invariants/single-node-sink.js +4 -5
- package/dist/invariants/snapshot-integrity.d.ts +5 -6
- package/dist/invariants/snapshot-integrity.js +1 -1
- package/dist/invariants/structural-descriptor.d.ts +6 -15
- package/dist/invariants/structural-descriptor.js +6 -15
- package/dist/menu-icons.d.ts +47 -0
- package/dist/menu-icons.js +113 -0
- package/dist/perf/instruments.d.ts +20 -5
- package/dist/perf/instruments.js +35 -15
- package/dist/perf/use-mount-gauge.svelte.js +4 -4
- package/dist/plugin.d.ts +38 -8
- package/dist/plugin.js +102 -74
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
- package/dist/plugins/admonitions/admonition-kind.js +12 -10
- package/dist/plugins/admonitions/convert-document.d.ts +5 -5
- package/dist/plugins/admonitions/convert-document.js +8 -7
- package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
- package/dist/plugins/admonitions/gh-alert.js +21 -22
- package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
- package/dist/plugins/admonitions/github-alert-kind.js +28 -37
- package/dist/plugins/admonitions/index.js +2 -2
- package/dist/plugins/admonitions/kinds.d.ts +1 -1
- package/dist/plugins/admonitions/register.js +11 -2
- package/dist/plugins/details/DetailsBlock.svelte +20 -20
- package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
- package/dist/plugins/details/details-disclosure.svelte.js +6 -7
- package/dist/plugins/details/details-kind.d.ts +6 -7
- package/dist/plugins/details/details-kind.js +44 -59
- package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
- package/dist/plugins/emoji/emoji-recognizer.js +7 -14
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
- package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +3 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
- package/dist/plugins/footnotes/footnote-definition.js +69 -45
- package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
- package/dist/plugins/footnotes/footnote-lookup.js +14 -26
- package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
- package/dist/plugins/footnotes/footnote-numbering.js +22 -31
- package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
- package/dist/plugins/footnotes/footnote-reference.js +8 -13
- package/dist/plugins/footnotes/index.js +2 -3
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
- package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
- package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
- package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/word-char.js +4 -0
- package/dist/plugins/latex/BlockMath.svelte +58 -75
- package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
- package/dist/plugins/latex/MathInline.svelte +10 -9
- package/dist/plugins/latex/flanking.d.ts +1 -0
- package/dist/plugins/latex/flanking.js +3 -0
- package/dist/plugins/latex/index.d.ts +1 -1
- package/dist/plugins/latex/latex-kind.d.ts +4 -4
- package/dist/plugins/latex/latex-kind.js +113 -85
- package/dist/plugins/latex/math-completion.d.ts +1 -1
- package/dist/plugins/latex/math-completion.js +5 -8
- package/dist/plugins/latex/math-layout.d.ts +2 -8
- package/dist/plugins/latex/math-layout.js +0 -9
- package/dist/plugins/latex/math-renderer.d.ts +17 -20
- package/dist/plugins/latex/math-renderer.js +21 -38
- package/dist/plugins/latex/math-source.d.ts +4 -8
- package/dist/plugins/latex/math-source.js +36 -75
- package/dist/plugins/latex/register.d.ts +10 -11
- package/dist/plugins/latex/register.js +24 -10
- package/dist/plugins/latex/renderer.d.ts +9 -10
- package/dist/plugins/latex/renderer.js +9 -24
- package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
- package/dist/plugins/mermaid/index.js +1 -1
- package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
- package/dist/plugins/mermaid/mermaid-kind.js +30 -47
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
- package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
- package/dist/plugins/mermaid/register.d.ts +3 -3
- package/dist/plugins/mermaid/register.js +5 -5
- package/dist/plugins/mermaid/renderer.d.ts +5 -5
- package/dist/plugins/mermaid/renderer.js +8 -11
- package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
- package/dist/plugins/parrot/parrot-plugin.js +3 -3
- package/dist/plugins/slash-commands/filter.d.ts +23 -0
- package/dist/plugins/slash-commands/filter.js +31 -0
- package/dist/plugins/slash-commands/index.d.ts +2 -0
- package/dist/plugins/slash-commands/index.js +2 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
- package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
- package/dist/plugins/slash-commands/slash-source.js +108 -0
- package/dist/plugins/toc/TocBlock.svelte +23 -22
- package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
- package/dist/plugins/toc/heading-outline.d.ts +7 -12
- package/dist/plugins/toc/heading-outline.js +22 -36
- package/dist/plugins/toc/navigation-queue.d.ts +2 -4
- package/dist/plugins/toc/toc-plugin.d.ts +5 -5
- package/dist/plugins/toc/toc-plugin.js +20 -13
- package/dist/presentation-mode.d.ts +15 -23
- package/dist/presentation-mode.js +19 -25
- package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
- package/dist/reactivity/block-list-state.svelte.js +8 -9
- package/dist/reactivity/block-window.svelte.d.ts +12 -6
- package/dist/reactivity/block-window.svelte.js +44 -17
- package/dist/reactivity/child-list.d.ts +34 -0
- package/dist/reactivity/child-list.js +48 -0
- package/dist/reactivity/content-version.svelte.d.ts +4 -7
- package/dist/reactivity/content-version.svelte.js +3 -5
- package/dist/reactivity/hold-across.d.ts +39 -0
- package/dist/reactivity/hold-across.js +57 -0
- package/dist/reactivity/layout-state.svelte.d.ts +27 -0
- package/dist/reactivity/layout-state.svelte.js +51 -0
- package/dist/reactivity/list-tree.d.ts +39 -0
- package/dist/reactivity/list-tree.js +132 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
- package/dist/reactivity/list-windowing.svelte.js +143 -292
- package/dist/reactivity/measure-batch.d.ts +6 -8
- package/dist/reactivity/measure-batch.js +5 -6
- package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
- package/dist/reactivity/publish-ref.svelte.js +21 -85
- package/dist/reactivity/scope-geometry.d.ts +6 -13
- package/dist/reactivity/scope-geometry.js +7 -14
- package/dist/reactivity/state-registry.d.ts +5 -5
- package/dist/reactivity/state-registry.js +11 -15
- package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
- package/dist/reactivity/use-container-windowing.svelte.js +64 -74
- package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
- package/dist/reactivity/use-measured-child.svelte.js +41 -0
- package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
- package/dist/reactivity/use-window-floor.svelte.js +27 -0
- package/dist/reactivity/window-slice.d.ts +4 -4
- package/dist/reactivity/window-slice.js +0 -2
- package/dist/renderer-slot.d.ts +48 -0
- package/dist/renderer-slot.js +85 -0
- package/dist/scan-index.d.ts +4 -4
- package/dist/scan-index.js +4 -4
- package/dist/schema/block-commands.d.ts +69 -54
- package/dist/schema/block-commands.js +91 -104
- package/dist/schema/block-completions.d.ts +16 -19
- package/dist/schema/block-completions.js +25 -32
- package/dist/schema/block-component-registry.d.ts +13 -14
- package/dist/schema/block-component-registry.js +19 -17
- package/dist/schema/block-kind-descriptor.d.ts +234 -168
- package/dist/schema/block-kind-descriptor.js +151 -66
- package/dist/schema/block-openers.d.ts +48 -39
- package/dist/schema/block-openers.js +73 -83
- package/dist/schema/built-in-descriptors.d.ts +3 -5
- package/dist/schema/built-in-descriptors.js +96 -80
- package/dist/schema/child-spans.d.ts +12 -10
- package/dist/schema/child-spans.js +68 -34
- package/dist/schema/closure.d.ts +18 -16
- package/dist/schema/closure.js +24 -14
- package/dist/schema/command-id.d.ts +6 -8
- package/dist/schema/command-id.js +20 -25
- package/dist/schema/commands.d.ts +79 -81
- package/dist/schema/commands.js +156 -116
- package/dist/schema/container-raw.d.ts +51 -11
- package/dist/schema/container-raw.js +143 -14
- package/dist/schema/container-rebuilders.d.ts +17 -15
- package/dist/schema/container-rebuilders.js +30 -22
- package/dist/schema/context-actions.d.ts +25 -13
- package/dist/schema/context-actions.js +32 -17
- package/dist/schema/define-plugin-block.d.ts +8 -6
- package/dist/schema/define-plugin-block.js +6 -4
- package/dist/schema/fenced-code-raw.d.ts +30 -17
- package/dist/schema/fenced-code-raw.js +155 -107
- package/dist/schema/global-commands.d.ts +6 -6
- package/dist/schema/global-commands.js +14 -22
- package/dist/schema/height-estimates.d.ts +31 -0
- package/dist/schema/height-estimates.js +64 -0
- package/dist/schema/inline-construct-policy.d.ts +42 -55
- package/dist/schema/inline-construct-policy.js +36 -35
- package/dist/schema/insert-catalogue.d.ts +30 -0
- package/dist/schema/insert-catalogue.js +95 -0
- package/dist/schema/keybinding-overrides.d.ts +9 -11
- package/dist/schema/keybinding-overrides.js +1 -1
- package/dist/schema/keybindings.d.ts +15 -7
- package/dist/schema/keybindings.js +21 -9
- package/dist/schema/merge-rules.d.ts +5 -7
- package/dist/schema/merge-rules.js +7 -9
- package/dist/schema/opener-priorities.d.ts +4 -4
- package/dist/schema/opener-priorities.js +4 -4
- package/dist/schema/operations.d.ts +9 -11
- package/dist/schema/operations.js +3 -3
- package/dist/schema/page-role.d.ts +14 -0
- package/dist/schema/page-role.js +19 -0
- package/dist/schema/plugin-activation.d.ts +4 -6
- package/dist/schema/plugin-activation.js +12 -10
- package/dist/schema/plugin-editor-context.d.ts +25 -10
- package/dist/schema/plugin-editor-context.js +40 -9
- package/dist/schema/plugin-install.d.ts +49 -17
- package/dist/schema/plugin-install.js +51 -25
- package/dist/schema/plugin-kind.d.ts +12 -8
- package/dist/schema/plugin-kind.js +35 -42
- package/dist/schema/plugin-name.js +3 -3
- package/dist/schema/plugin-registry.d.ts +54 -0
- package/dist/schema/plugin-registry.js +70 -0
- package/dist/schema/reading.d.ts +23 -0
- package/dist/schema/reading.js +7 -0
- package/dist/schema/register-once.d.ts +3 -5
- package/dist/schema/register-once.js +7 -16
- package/dist/schema/registration-checks.d.ts +12 -16
- package/dist/schema/registration-checks.js +35 -51
- package/dist/schema/registration-pairs.d.ts +54 -0
- package/dist/schema/registration-pairs.js +48 -0
- package/dist/schema/registration-pending.d.ts +8 -12
- package/dist/schema/registration-pending.js +9 -9
- package/dist/schema/registry-reset.d.ts +8 -4
- package/dist/schema/registry-reset.js +13 -26
- package/dist/schema/registry-view.d.ts +25 -13
- package/dist/schema/registry-view.js +26 -20
- package/dist/schema/reserved-chords.d.ts +9 -10
- package/dist/schema/reserved-chords.js +73 -78
- package/dist/schema/reserved-chrome.d.ts +12 -11
- package/dist/schema/reserved-chrome.js +15 -11
- package/dist/schema/setext-raw.d.ts +13 -0
- package/dist/schema/setext-raw.js +33 -0
- package/dist/schema/stored-as.d.ts +20 -0
- package/dist/schema/stored-as.js +6 -0
- package/dist/schema/table-cell-raw.d.ts +18 -7
- package/dist/schema/table-cell-raw.js +28 -7
- package/dist/schema/whole-block-unit.d.ts +5 -4
- package/dist/schema/whole-block-unit.js +5 -4
- package/dist/search/document-scan.d.ts +3 -3
- package/dist/search/document-scan.js +2 -2
- package/dist/search/matcher.d.ts +1 -1
- package/dist/search/regex-executor.d.ts +5 -6
- package/dist/search/regex-executor.js +6 -8
- package/dist/search/replace.d.ts +2 -5
- package/dist/search/replace.js +2 -5
- package/dist/search/search-state.svelte.d.ts +5 -5
- package/dist/search/search-state.svelte.js +12 -16
- package/dist/selection/autoscroll.d.ts +6 -9
- package/dist/selection/block-hit-test.d.ts +16 -24
- package/dist/selection/block-hit-test.js +29 -22
- package/dist/selection/caret-doors.d.ts +15 -14
- package/dist/selection/caret-doors.js +37 -26
- package/dist/selection/caret-landing.d.ts +62 -0
- package/dist/selection/caret-landing.js +157 -0
- package/dist/selection/caret-restore.d.ts +17 -10
- package/dist/selection/caret-restore.js +10 -22
- package/dist/selection/caret-target.d.ts +30 -0
- package/dist/selection/caret-target.js +84 -0
- package/dist/selection/char-endpoint-snap.d.ts +6 -10
- package/dist/selection/char-endpoint-snap.js +8 -14
- package/dist/selection/clipboard-text.d.ts +5 -12
- package/dist/selection/clipboard-text.js +69 -172
- package/dist/selection/covered-block.d.ts +6 -8
- package/dist/selection/covered-block.js +8 -19
- package/dist/selection/cross-block/clipboard.d.ts +3 -2
- package/dist/selection/cross-block/clipboard.js +13 -4
- package/dist/selection/cross-block/dispatch.d.ts +47 -43
- package/dist/selection/cross-block/dispatch.js +12 -23
- package/dist/selection/cross-block/format-range.d.ts +18 -21
- package/dist/selection/cross-block/format-range.js +104 -103
- package/dist/selection/cross-block/format-toggle.d.ts +10 -15
- package/dist/selection/cross-block/format-toggle.js +28 -33
- package/dist/selection/cross-block/keydown.d.ts +4 -4
- package/dist/selection/cross-block/keydown.js +93 -152
- package/dist/selection/cross-block/ops.d.ts +19 -34
- package/dist/selection/cross-block/ops.js +110 -95
- package/dist/selection/cross-block/paste.d.ts +2 -3
- package/dist/selection/cross-block/paste.js +61 -104
- package/dist/selection/cross-block/pointer.d.ts +17 -15
- package/dist/selection/cross-block/pointer.js +74 -25
- package/dist/selection/cross-block/type-replace.d.ts +4 -6
- package/dist/selection/cross-block/type-replace.js +53 -146
- package/dist/selection/dead-space-caret.d.ts +20 -28
- package/dist/selection/dead-space-caret.js +79 -87
- package/dist/selection/drag-pointer.d.ts +22 -5
- package/dist/selection/drag-pointer.js +63 -31
- package/dist/selection/gap-caret.d.ts +17 -28
- package/dist/selection/gap-caret.js +14 -26
- package/dist/selection/grid-selection.d.ts +12 -0
- package/dist/selection/grid-selection.js +22 -0
- package/dist/selection/keyboard-extend.d.ts +27 -39
- package/dist/selection/keyboard-extend.js +94 -116
- package/dist/selection/multi-click.d.ts +37 -0
- package/dist/selection/multi-click.js +197 -0
- package/dist/selection/native-bridge.d.ts +30 -37
- package/dist/selection/native-bridge.js +80 -100
- package/dist/selection/nearest-block.d.ts +17 -12
- package/dist/selection/nearest-block.js +37 -18
- package/dist/selection/path-lookup.d.ts +31 -14
- package/dist/selection/path-lookup.js +110 -20
- package/dist/selection/path-math.d.ts +9 -11
- package/dist/selection/path-math.js +5 -7
- package/dist/selection/pointer-gesture.d.ts +9 -0
- package/dist/selection/pointer-gesture.js +11 -0
- package/dist/selection/pointer-session.d.ts +10 -16
- package/dist/selection/pointer-session.js +6 -7
- package/dist/selection/primitives.d.ts +64 -33
- package/dist/selection/primitives.js +61 -53
- package/dist/selection/range-coverage.d.ts +94 -0
- package/dist/selection/range-coverage.js +365 -0
- package/dist/selection/range-delete-ceremony.d.ts +28 -74
- package/dist/selection/range-delete-ceremony.js +100 -141
- package/dist/selection/range-delete-chrome.d.ts +20 -33
- package/dist/selection/range-delete-chrome.js +53 -78
- package/dist/selection/range-delete-table-coverage.d.ts +11 -25
- package/dist/selection/range-delete-table-coverage.js +42 -112
- package/dist/selection/range-delete-table.d.ts +14 -12
- package/dist/selection/range-delete-table.js +106 -310
- package/dist/selection/range-delete.d.ts +18 -19
- package/dist/selection/range-delete.js +83 -123
- package/dist/selection/round-trip-restore.d.ts +18 -0
- package/dist/selection/round-trip-restore.js +19 -0
- package/dist/selection/selection-announcer.d.ts +17 -0
- package/dist/selection/selection-announcer.js +25 -0
- package/dist/selection/selection-description.d.ts +4 -3
- package/dist/selection/selection-description.js +5 -4
- package/dist/selection/selection-drop.d.ts +52 -0
- package/dist/selection/selection-drop.js +317 -0
- package/dist/selection/selection-restore.d.ts +20 -33
- package/dist/selection/selection-restore.js +21 -44
- package/dist/selection/selection-state.svelte.d.ts +50 -42
- package/dist/selection/selection-state.svelte.js +144 -98
- package/dist/selection/shared-keydown.d.ts +22 -27
- package/dist/selection/shared-keydown.js +25 -45
- package/dist/selection/table-endpoint-snap.d.ts +17 -41
- package/dist/selection/table-endpoint-snap.js +54 -80
- package/dist/selection/table-rect-extend.d.ts +3 -6
- package/dist/selection/table-rect-extend.js +19 -14
- package/dist/styles/editor-theme.css +75 -53
- package/dist/styles/editor.css +248 -139
- package/dist/testing/conformance-core.d.ts +50 -18
- package/dist/testing/conformance-core.js +88 -50
- package/dist/testing/container-conformance.d.ts +48 -84
- package/dist/testing/container-conformance.js +159 -285
- package/dist/testing/headless-actions.d.ts +34 -19
- package/dist/testing/headless-actions.js +116 -65
- package/dist/testing/headless-block-list.svelte.d.ts +16 -0
- package/dist/testing/headless-block-list.svelte.js +22 -0
- package/dist/testing/inline-conformance.d.ts +15 -22
- package/dist/testing/inline-conformance.js +131 -148
- package/dist/testing/kind-conformance.d.ts +19 -24
- package/dist/testing/kind-conformance.js +204 -117
- package/dist/testing/kit-reading.d.ts +7 -0
- package/dist/testing/kit-reading.js +16 -0
- package/dist/testing/mount-dom-stubs.d.ts +4 -5
- package/dist/testing/mount-dom-stubs.js +8 -5
- package/dist/testing/parse-convergence.d.ts +10 -10
- package/dist/testing/parse-convergence.js +14 -49
- package/dist/testing.d.ts +13 -9
- package/dist/testing.js +28 -38
- package/dist/tree-operations/blockquote.d.ts +8 -14
- package/dist/tree-operations/blockquote.js +25 -45
- package/dist/tree-operations/chain-rebuild.d.ts +34 -25
- package/dist/tree-operations/chain-rebuild.js +115 -52
- package/dist/tree-operations/children.d.ts +5 -9
- package/dist/tree-operations/children.js +7 -11
- package/dist/tree-operations/cleanup.d.ts +6 -7
- package/dist/tree-operations/cleanup.js +14 -11
- package/dist/tree-operations/clone.js +5 -4
- package/dist/tree-operations/container-lift.d.ts +10 -5
- package/dist/tree-operations/container-lift.js +20 -14
- package/dist/tree-operations/container-offsets.d.ts +22 -0
- package/dist/tree-operations/container-offsets.js +89 -0
- package/dist/tree-operations/content-write.d.ts +52 -29
- package/dist/tree-operations/content-write.js +155 -110
- package/dist/tree-operations/index.d.ts +4 -4
- package/dist/tree-operations/index.js +4 -4
- package/dist/tree-operations/keep-one-block.d.ts +10 -0
- package/dist/tree-operations/keep-one-block.js +19 -0
- package/dist/tree-operations/leaf-range.d.ts +33 -0
- package/dist/tree-operations/leaf-range.js +67 -0
- package/dist/tree-operations/list/empty-check.d.ts +2 -3
- package/dist/tree-operations/list/empty-check.js +4 -4
- package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
- package/dist/tree-operations/list/exit-replacement.js +4 -9
- package/dist/tree-operations/list/item-partition.d.ts +2 -2
- package/dist/tree-operations/list/item-partition.js +2 -2
- package/dist/tree-operations/list/list-builders.d.ts +18 -16
- package/dist/tree-operations/list/list-builders.js +59 -30
- package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
- package/dist/tree-operations/list/ordered-markers.js +7 -16
- package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
- package/dist/tree-operations/list/reconcile-task.js +80 -23
- package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
- package/dist/tree-operations/list/sublist-separator.js +20 -27
- package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
- package/dist/tree-operations/list/task-paragraph.js +54 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
- package/dist/tree-operations/list/unwrap-merge.js +44 -79
- package/dist/tree-operations/node-ops.d.ts +30 -52
- package/dist/tree-operations/node-ops.js +152 -218
- package/dist/tree-operations/node-primitives.d.ts +44 -31
- package/dist/tree-operations/node-primitives.js +84 -60
- package/dist/tree-operations/open-tail.d.ts +25 -0
- package/dist/tree-operations/open-tail.js +100 -0
- package/dist/tree-operations/parse-block.d.ts +15 -2
- package/dist/tree-operations/parse-block.js +19 -4
- package/dist/tree-operations/paste/apply.d.ts +7 -8
- package/dist/tree-operations/paste/apply.js +33 -63
- package/dist/tree-operations/paste/body-write.d.ts +8 -6
- package/dist/tree-operations/paste/body-write.js +13 -14
- package/dist/tree-operations/paste/container-match.d.ts +7 -10
- package/dist/tree-operations/paste/container-match.js +76 -58
- package/dist/tree-operations/paste/container-paste.d.ts +3 -3
- package/dist/tree-operations/paste/container-paste.js +3 -3
- package/dist/tree-operations/paste/dispatch.d.ts +26 -29
- package/dist/tree-operations/paste/dispatch.js +68 -53
- package/dist/tree-operations/paste/focus-target.d.ts +11 -14
- package/dist/tree-operations/paste/focus-target.js +13 -18
- package/dist/tree-operations/paste/hooks.d.ts +7 -12
- package/dist/tree-operations/paste/hooks.js +49 -46
- package/dist/tree-operations/paste/line-ending.d.ts +11 -0
- package/dist/tree-operations/paste/line-ending.js +32 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
- package/dist/tree-operations/paste/list-absorb.js +17 -19
- package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
- package/dist/tree-operations/paste/list-break-out.js +24 -32
- package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
- package/dist/tree-operations/paste/parent-scope.js +9 -16
- package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
- package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
- package/dist/tree-operations/paste/paste-replacement.js +73 -42
- package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
- package/dist/tree-operations/paste/paste-transforms.js +18 -27
- package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
- package/dist/tree-operations/paste/replacement-parse.js +24 -0
- package/dist/tree-operations/paste/strategy.d.ts +1 -1
- package/dist/tree-operations/paste/strategy.js +1 -1
- package/dist/tree-operations/paste/table-slice.js +15 -10
- package/dist/tree-operations/paste-surfaces.d.ts +18 -29
- package/dist/tree-operations/paste-surfaces.js +14 -10
- package/dist/tree-operations/path-mutate.d.ts +7 -8
- package/dist/tree-operations/path-mutate.js +4 -4
- package/dist/tree-operations/reorder-unit.d.ts +4 -5
- package/dist/tree-operations/reorder-unit.js +5 -6
- package/dist/tree-operations/reorder.d.ts +7 -9
- package/dist/tree-operations/reorder.js +39 -40
- package/dist/tree-operations/settle.d.ts +42 -53
- package/dist/tree-operations/settle.js +241 -162
- package/dist/tree-operations/sharing.d.ts +5 -5
- package/dist/tree-operations/splice-many.d.ts +5 -5
- package/dist/tree-operations/splice-many.js +5 -5
- package/dist/tree-operations/stored-as.d.ts +13 -0
- package/dist/tree-operations/stored-as.js +48 -0
- package/dist/tree-operations/structural-change.d.ts +11 -15
- package/dist/tree-operations/structural-change.js +10 -14
- package/dist/tree-operations/structural-suffix.d.ts +22 -0
- package/dist/tree-operations/structural-suffix.js +61 -0
- package/dist/tree-operations/sub-table-copy.d.ts +7 -0
- package/dist/tree-operations/sub-table-copy.js +40 -36
- package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
- package/dist/tree-operations/table-grid-clipboard.js +11 -36
- package/dist/tree-operations/table-mutations.d.ts +7 -3
- package/dist/tree-operations/table-mutations.js +45 -9
- package/dist/tree-operations/unshare.d.ts +11 -15
- package/dist/tree-operations/unshare.js +15 -17
- package/dist/undo/manager.js +1 -1
- package/dist/undo/types.d.ts +2 -2
- package/docs/guide/consumer-guide.md +329 -205
- package/docs/guide/directives.md +7 -7
- package/docs/guide/plugin-api.md +267 -183
- package/docs/guide/plugin-guide.md +341 -235
- package/docs/guide/plugin-testing.md +96 -82
- package/package.json +17 -21
- package/dist/ambient/ambient-cursor.d.ts +0 -41
- package/dist/ambient/ambient-cursor.js +0 -120
- package/dist/components/blocks/code/code-paste.d.ts +0 -24
- package/dist/components/blocks/code/code-paste.js +0 -21
- package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
- package/dist/components/blocks/table/cell-clipboard.js +0 -67
- package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
- package/dist/components/blocks/text/hidden-suffix.js +0 -15
- package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
- package/dist/components/image/image-source-bytes.d.ts +0 -15
- package/dist/components/image/image-source-bytes.js +0 -80
- package/dist/cursor/content-offsets.d.ts +0 -29
- package/dist/cursor/content-offsets.js +0 -151
- package/dist/cursor/reveal-anchor.d.ts +0 -30
- package/dist/cursor/reveal-anchor.js +0 -31
- package/dist/invariants/split-landing.d.ts +0 -8
- package/dist/invariants/split-landing.js +0 -15
- package/dist/selection/double-click-trim.d.ts +0 -17
- package/dist/selection/double-click-trim.js +0 -57
- package/dist/tree-operations/list/terminator.d.ts +0 -17
- package/dist/tree-operations/list/terminator.js +0 -60
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
- package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
|
@@ -1,33 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Per-inline-kind editing policy: how a construct behaves at its edges, whether emptying it
|
|
3
|
-
* unwraps it, how a split treats its markers, whether preview-inline
|
|
4
|
-
* what a format chord writes for it.
|
|
5
|
-
*
|
|
6
|
-
* split rebalancer is a function value patched in from the component layer, so this module keeps
|
|
7
|
-
* no import of it.
|
|
3
|
+
* unwraps it, how a split treats its markers, whether preview-inline may show its markers, and
|
|
4
|
+
* what a format chord writes for it. The rows are data; the live split and join rewrites are
|
|
5
|
+
* functions the component layer registers here.
|
|
8
6
|
*/
|
|
9
7
|
import { type AnyInlineKind } from '../core/nodes';
|
|
10
8
|
import type { NodeView } from '../core/node-views';
|
|
11
|
-
import type {
|
|
9
|
+
import type { Reading } from './reading';
|
|
10
|
+
import type { StoredAs } from './stored-as';
|
|
12
11
|
import type { AnyCommandId } from './command-id';
|
|
13
12
|
/** The constructs a format chord addresses: whichever rows below declare a mark. An alias rather
|
|
14
|
-
* than a union, so a plugin's markable kind needs no edit here
|
|
15
|
-
*
|
|
13
|
+
* than a union, so a plugin's markable kind needs no edit here; membership is the row lookup,
|
|
14
|
+
* done at runtime. */
|
|
16
15
|
export type InlineMarkKind = AnyInlineKind;
|
|
17
16
|
/**
|
|
18
|
-
*
|
|
19
|
-
* kind cannot
|
|
17
|
+
* What a format chord needs in order to write a construct's own delimiters. Present in full or
|
|
18
|
+
* absent, so a kind cannot call itself markable without saying what a mark on it writes.
|
|
20
19
|
*/
|
|
21
20
|
export interface InlineMarkPolicy {
|
|
22
21
|
/** Where the kind sits when one insertion carries several marks: ascending is outermost first,
|
|
23
|
-
* and the order is
|
|
22
|
+
* and the order is this table's, never the order the chords arrived in. */
|
|
24
23
|
nestingRank: number;
|
|
25
24
|
/** The bare run that opens and closes the construct. */
|
|
26
25
|
markerBytes: string;
|
|
27
|
-
/** Wrap `content` for a kind whose delimiters depend on what they enclose
|
|
28
|
-
* its fence
|
|
26
|
+
/** Wrap `content` for a kind whose delimiters depend on what they enclose: a code span makes
|
|
27
|
+
* its fence longer than the longest run inside it. Absent means marker, content, marker. */
|
|
29
28
|
wrapBytes?: (content: string) => string;
|
|
30
|
-
/** The command
|
|
29
|
+
/** The command that toggles this mark. */
|
|
31
30
|
command: AnyCommandId;
|
|
32
31
|
}
|
|
33
32
|
export interface InlineConstructPolicy {
|
|
@@ -35,57 +34,53 @@ export interface InlineConstructPolicy {
|
|
|
35
34
|
autoUnwrapOnEmpty: boolean;
|
|
36
35
|
splitBehavior: 'close-and-reopen' | 'plain';
|
|
37
36
|
revealable: boolean;
|
|
38
|
-
/** Whether the link card
|
|
39
|
-
*
|
|
40
|
-
* destination has its own editor, and an autolink's IS the text on screen. */
|
|
37
|
+
/** Whether the link card edits this construct's destination, the only way in a mode that hides
|
|
38
|
+
* the URL (`docs/design/live-mode.md` § 4.6 The link card). Absent reads as no. */
|
|
41
39
|
cardEditable?: boolean;
|
|
42
40
|
/** Absent for a construct no format chord addresses. */
|
|
43
41
|
mark?: InlineMarkPolicy;
|
|
42
|
+
/**
|
|
43
|
+
* How much of the construct is prose, where a trigger such as `#` may open the inline menu.
|
|
44
|
+
* Absent reads as `'all'`, or `'none'` for an inline widget kind.
|
|
45
|
+
*/
|
|
46
|
+
prose?: InlineProseExtent;
|
|
44
47
|
}
|
|
48
|
+
export type InlineProseExtent = 'none' | 'content' | 'all';
|
|
45
49
|
export declare function registerInlineConstructPolicy(kind: AnyInlineKind, policy: InlineConstructPolicy): void;
|
|
46
50
|
/** Undefined for a kind with no row: absent means "no live-mode construct behavior at all". */
|
|
47
51
|
export declare function getInlineConstructPolicy(kind: AnyInlineKind): InlineConstructPolicy | undefined;
|
|
48
|
-
/** Whether preview-inline
|
|
52
|
+
/** Whether the preview-inline mode may show this kind's markers. */
|
|
49
53
|
export declare function isRevealableInlineKind(kind: AnyInlineKind): boolean;
|
|
50
54
|
/** Whether the link card may address this kind's destination. */
|
|
51
55
|
export declare function isCardEditableInlineKind(kind: AnyInlineKind): boolean;
|
|
52
56
|
export declare function listInlineConstructPolicies(): readonly (InlineConstructPolicy & {
|
|
53
57
|
kind: AnyInlineKind;
|
|
54
58
|
})[];
|
|
55
|
-
/** A kind's mark
|
|
56
|
-
*
|
|
59
|
+
/** A kind's mark policy, or undefined for a kind no chord addresses. The toggle paths check this
|
|
60
|
+
* before writing any delimiter. */
|
|
57
61
|
export declare function getInlineMarkPolicy(kind: AnyInlineKind): InlineMarkPolicy | undefined;
|
|
58
62
|
export interface InlineMark {
|
|
59
63
|
kind: AnyInlineKind;
|
|
60
64
|
mark: InlineMarkPolicy;
|
|
61
65
|
}
|
|
62
|
-
/** Every markable kind, outermost first.
|
|
63
|
-
*
|
|
66
|
+
/** Every markable kind, outermost first. Returning the row with the kind saves each caller a
|
|
67
|
+
* second lookup that could miss. */
|
|
64
68
|
export declare function listInlineMarks(): readonly InlineMark[];
|
|
65
|
-
/** The mark a command toggles, or null
|
|
69
|
+
/** The mark a command toggles, or null when no row names that command. */
|
|
66
70
|
export declare function inlineMarkForCommand(command: string): InlineMark | null;
|
|
67
|
-
/**
|
|
68
|
-
* The link-reference resolver a rewrite parses with, structurally rather than by naming
|
|
69
|
-
* `editor-keys`' type — that would cycle the editor's context module onto every layer this table
|
|
70
|
-
* serves, the reason `inline-cache` states for the same shape. Registration is process-global and
|
|
71
|
-
* the resolver is per-instance, so it rides the CALL, never the registration.
|
|
72
|
-
*/
|
|
73
|
-
export type InlineResolverRef = {
|
|
74
|
-
current?: LinkReferenceResolver;
|
|
75
|
-
signature?: string;
|
|
76
|
-
};
|
|
77
71
|
/**
|
|
78
72
|
* The one live-mode split rewrite, consulting each construct's own `splitBehavior`, so
|
|
79
73
|
* `splitNode` needs neither `parseInline` nor a per-kind dispatch. Null declines the rewrite.
|
|
74
|
+
* Registration is process-wide, so the editor's reading is passed on each call.
|
|
80
75
|
*/
|
|
81
|
-
export type LiveSplitRebalancer = (node: NodeView, offset: number, firstRaw: string, secondRaw: string,
|
|
76
|
+
export type LiveSplitRebalancer = (node: NodeView, offset: number, firstRaw: string, secondRaw: string, reading: Reading) => {
|
|
82
77
|
firstRaw: string;
|
|
83
78
|
secondRaw: string;
|
|
84
79
|
} | null;
|
|
85
80
|
export declare function registerLiveSplitRebalancer(rebalancer: LiveSplitRebalancer): void;
|
|
86
81
|
export declare function getLiveSplitRebalancer(): LiveSplitRebalancer | undefined;
|
|
87
|
-
/** One side of a join: the block
|
|
88
|
-
* block's content
|
|
82
|
+
/** One side of a join: the block it contributed bytes from and the offset they were cut at. A
|
|
83
|
+
* merge cuts at the end of the block's content, a range delete at the selection endpoint. */
|
|
89
84
|
export interface JoinEndpoint {
|
|
90
85
|
node: NodeView;
|
|
91
86
|
offset: number;
|
|
@@ -96,20 +91,15 @@ export interface JoinSeam {
|
|
|
96
91
|
seam: number;
|
|
97
92
|
start: JoinEndpoint;
|
|
98
93
|
end: JoinEndpoint;
|
|
99
|
-
/**
|
|
100
|
-
*
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
*
|
|
104
|
-
|
|
105
|
-
typed?: string;
|
|
106
|
-
/** The container prefix the surviving side is installed under (`- `, `> `). Absent where the
|
|
107
|
-
* surface paints none. A candidate is read back through it: an item's body starting with a
|
|
108
|
-
* space reloads as a WIDER marker than the live tree holds. */
|
|
109
|
-
ambientPrefix?: string;
|
|
94
|
+
/** Text the caller will insert at the join after the cleanup, `''` for a plain delete. The
|
|
95
|
+
* cleanup checks it too, since typed text changes what a surviving delimiter pairs against. */
|
|
96
|
+
typed: string;
|
|
97
|
+
/** Where the joined bytes will be stored, with the editor's reading: the cleanup reads each
|
|
98
|
+
* candidate back there, a list item's marker line or a cell's text included. */
|
|
99
|
+
store: StoredAs;
|
|
110
100
|
}
|
|
111
|
-
/** The bytes a cleanup wrote and where the two sides now meet in them: dropping
|
|
112
|
-
* first side
|
|
101
|
+
/** The bytes a cleanup wrote and where the two sides now meet in them: dropping characters from
|
|
102
|
+
* the first side moves the point the caret lands on. */
|
|
113
103
|
export interface CleanedJoin {
|
|
114
104
|
raw: string;
|
|
115
105
|
seam: number;
|
|
@@ -121,11 +111,8 @@ export interface CleanedJoin {
|
|
|
121
111
|
export type LiveJoinSeamCleaner = (join: JoinSeam) => CleanedJoin | null;
|
|
122
112
|
export declare function registerLiveJoinSeamCleaner(cleaner: LiveJoinSeamCleaner): void;
|
|
123
113
|
export declare function getLiveJoinSeamCleaner(): LiveJoinSeamCleaner | undefined;
|
|
124
|
-
/** Test-only
|
|
125
|
-
*
|
|
126
|
-
export declare function __resetInlineConstructPoliciesForTests(): void;
|
|
127
|
-
/** Test-only, and separate on purpose: only a suite testing the SLOT wants it emptied, and the
|
|
128
|
-
* registry's own reset must not do it as a side effect. */
|
|
114
|
+
/** Test-only, and separate on purpose: only a suite testing this one function wants it cleared,
|
|
115
|
+
* and the registry's own reset must not clear it as a side effect. */
|
|
129
116
|
export declare function __resetLiveSplitRebalancerForTests(): void;
|
|
130
|
-
/** Test-only,
|
|
117
|
+
/** Test-only, the join cleaner's counterpart to {@link __resetLiveSplitRebalancerForTests}. */
|
|
131
118
|
export declare function __resetLiveJoinSeamCleanerForTests(): void;
|
|
@@ -1,66 +1,72 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Per-inline-kind editing policy: how a construct behaves at its edges, whether emptying it
|
|
3
|
-
* unwraps it, how a split treats its markers, whether preview-inline
|
|
4
|
-
* what a format chord writes for it.
|
|
5
|
-
*
|
|
6
|
-
* split rebalancer is a function value patched in from the component layer, so this module keeps
|
|
7
|
-
* no import of it.
|
|
3
|
+
* unwraps it, how a split treats its markers, whether preview-inline may show its markers, and
|
|
4
|
+
* what a format chord writes for it. The rows are data; the live split and join rewrites are
|
|
5
|
+
* functions the component layer registers here.
|
|
8
6
|
*/
|
|
9
7
|
import { isBuiltinInlineKind } from '../core/nodes';
|
|
10
8
|
import { isBuiltinCommandId } from './commands';
|
|
11
|
-
import {
|
|
12
|
-
|
|
9
|
+
import { registerOnce } from './register-once';
|
|
10
|
+
import { everyInstalledPlugin } from './plugin-activation';
|
|
11
|
+
import { createInlineKindRegistry } from './plugin-registry';
|
|
12
|
+
// Read with no editor at hand: a row matters only for a node of its kind, and only an editor
|
|
13
|
+
// that activated the kind's plugin parses one, so the rows answer for every installed plugin.
|
|
14
|
+
const policies = createInlineKindRegistry({
|
|
15
|
+
label: 'registerInlineConstructPolicy',
|
|
16
|
+
isBuiltin: isBuiltinInlineKind
|
|
17
|
+
});
|
|
18
|
+
const policyOf = (kind) => policies.get(kind, everyInstalledPlugin);
|
|
13
19
|
export function registerInlineConstructPolicy(kind, policy) {
|
|
14
20
|
assertMarkCommandMintable(kind, policy.mark);
|
|
15
21
|
assertCardImpliesRevealable(kind, policy);
|
|
16
|
-
|
|
22
|
+
policies.register(kind, policy, `registerInlineConstructPolicy: "${kind}" is already registered. Policies are register-once.`);
|
|
17
23
|
}
|
|
18
|
-
/**
|
|
19
|
-
* row, never an invalid one.
|
|
24
|
+
/** Runs before the register-once check, so it throws in every environment: that check forgives a
|
|
25
|
+
* duplicate row, never an invalid one. */
|
|
20
26
|
function assertMarkCommandMintable(kind, mark) {
|
|
21
27
|
if (!mark || isBuiltinInlineKind(kind) || !isBuiltinCommandId(mark.command))
|
|
22
28
|
return;
|
|
23
|
-
throw new Error(`registerInlineConstructPolicy: "${kind}" claims built-in command "${mark.command}" for its mark
|
|
29
|
+
throw new Error(`registerInlineConstructPolicy: "${kind}" claims built-in command "${mark.command}" for its mark; that id already has a built-in meaning; create a plugin command id for the mark`);
|
|
24
30
|
}
|
|
25
|
-
/** The card
|
|
26
|
-
*
|
|
27
|
-
* to a silent no-op at the click. */
|
|
31
|
+
/** The card opens only on revealable kinds (`link-at-point.ts`), so a row asking for it without
|
|
32
|
+
* `revealable` throws here rather than failing silently at the click. */
|
|
28
33
|
function assertCardImpliesRevealable(kind, policy) {
|
|
29
34
|
if (!policy.cardEditable || policy.revealable)
|
|
30
35
|
return;
|
|
31
|
-
throw new Error(`registerInlineConstructPolicy: "${kind}" declares cardEditable without revealable
|
|
36
|
+
throw new Error(`registerInlineConstructPolicy: "${kind}" declares cardEditable without revealable; the card's open chain reaches only revealable kinds, so the entry point would never open`);
|
|
32
37
|
}
|
|
33
38
|
/** Undefined for a kind with no row: absent means "no live-mode construct behavior at all". */
|
|
34
39
|
export function getInlineConstructPolicy(kind) {
|
|
35
|
-
return
|
|
40
|
+
return policyOf(kind);
|
|
36
41
|
}
|
|
37
|
-
/** Whether preview-inline
|
|
42
|
+
/** Whether the preview-inline mode may show this kind's markers. */
|
|
38
43
|
export function isRevealableInlineKind(kind) {
|
|
39
|
-
return
|
|
44
|
+
return policyOf(kind)?.revealable === true;
|
|
40
45
|
}
|
|
41
46
|
/** Whether the link card may address this kind's destination. */
|
|
42
47
|
export function isCardEditableInlineKind(kind) {
|
|
43
|
-
return
|
|
48
|
+
return policyOf(kind)?.cardEditable === true;
|
|
44
49
|
}
|
|
45
50
|
export function listInlineConstructPolicies() {
|
|
46
|
-
return
|
|
51
|
+
return policies.entries(everyInstalledPlugin).map(([kind, policy]) => ({ kind, ...policy }));
|
|
47
52
|
}
|
|
48
53
|
// ── The mark vocabulary ─────────────────────────────────────────────────────
|
|
49
|
-
/** A kind's mark
|
|
50
|
-
*
|
|
54
|
+
/** A kind's mark policy, or undefined for a kind no chord addresses. The toggle paths check this
|
|
55
|
+
* before writing any delimiter. */
|
|
51
56
|
export function getInlineMarkPolicy(kind) {
|
|
52
|
-
return
|
|
57
|
+
return policyOf(kind)?.mark;
|
|
53
58
|
}
|
|
54
|
-
/** Every markable kind, outermost first.
|
|
55
|
-
*
|
|
59
|
+
/** Every markable kind, outermost first. Returning the row with the kind saves each caller a
|
|
60
|
+
* second lookup that could miss. */
|
|
56
61
|
export function listInlineMarks() {
|
|
57
62
|
const marks = [];
|
|
58
|
-
for (const [kind, policy] of policies)
|
|
63
|
+
for (const [kind, policy] of policies.entries(everyInstalledPlugin)) {
|
|
59
64
|
if (policy.mark)
|
|
60
65
|
marks.push({ kind, mark: policy.mark });
|
|
66
|
+
}
|
|
61
67
|
return marks.sort((a, b) => a.mark.nestingRank - b.mark.nestingRank);
|
|
62
68
|
}
|
|
63
|
-
/** The mark a command toggles, or null
|
|
69
|
+
/** The mark a command toggles, or null when no row names that command. */
|
|
64
70
|
export function inlineMarkForCommand(command) {
|
|
65
71
|
return listInlineMarks().find((entry) => entry.mark.command === command) ?? null;
|
|
66
72
|
}
|
|
@@ -80,17 +86,12 @@ export function registerLiveJoinSeamCleaner(cleaner) {
|
|
|
80
86
|
export function getLiveJoinSeamCleaner() {
|
|
81
87
|
return joinSeamCleaner;
|
|
82
88
|
}
|
|
83
|
-
/** Test-only
|
|
84
|
-
*
|
|
85
|
-
export function __resetInlineConstructPoliciesForTests() {
|
|
86
|
-
deletePluginEntries(policies, isBuiltinInlineKind);
|
|
87
|
-
}
|
|
88
|
-
/** Test-only, and separate on purpose: only a suite testing the SLOT wants it emptied, and the
|
|
89
|
-
* registry's own reset must not do it as a side effect. */
|
|
89
|
+
/** Test-only, and separate on purpose: only a suite testing this one function wants it cleared,
|
|
90
|
+
* and the registry's own reset must not clear it as a side effect. */
|
|
90
91
|
export function __resetLiveSplitRebalancerForTests() {
|
|
91
92
|
splitRebalancer = undefined;
|
|
92
93
|
}
|
|
93
|
-
/** Test-only,
|
|
94
|
+
/** Test-only, the join cleaner's counterpart to {@link __resetLiveSplitRebalancerForTests}. */
|
|
94
95
|
export function __resetLiveJoinSeamCleanerForTests() {
|
|
95
96
|
joinSeamCleaner = undefined;
|
|
96
97
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The blocks a menu can insert: the built-ins, then the entries plugins register, each with the
|
|
3
|
+
* Markdown it inserts. The right-click flyout, `EditorInstance.getInsertCatalogue()` and a plugin's
|
|
4
|
+
* `editor.insertCatalogue` all read this one list, so no two of them can disagree.
|
|
5
|
+
*/
|
|
6
|
+
import { type MenuIconName } from '../menu-icons';
|
|
7
|
+
import type { PluginActivation } from './plugin-activation';
|
|
8
|
+
export interface InsertEntry {
|
|
9
|
+
readonly id: string;
|
|
10
|
+
readonly label: string;
|
|
11
|
+
readonly icon: MenuIconName;
|
|
12
|
+
/** Other words a filter should find the entry by: `todo` for "To-do list". */
|
|
13
|
+
readonly keywords: readonly string[];
|
|
14
|
+
/** Handed to the paste path as is, the way `insertMarkdown` takes it. */
|
|
15
|
+
readonly markdown: string;
|
|
16
|
+
/** The Markdown for the word typed after the entry (`/table 3x4`; the word is never empty),
|
|
17
|
+
* and the dim text saying how it was read. Absent: the entry takes no argument. */
|
|
18
|
+
readonly withArgument?: (argument: string) => {
|
|
19
|
+
markdown: string;
|
|
20
|
+
detail?: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Call from a plugin's `setup`: the entry is listed after the built-ins, and only in editors that
|
|
25
|
+
* activated that plugin. Throws on a taken id or an icon name the menu cannot draw.
|
|
26
|
+
*/
|
|
27
|
+
export declare function registerInsertEntry(entry: InsertEntry): void;
|
|
28
|
+
/** Every entry one editor lists: the built-ins, then each plugin entry `activation` resolves. A
|
|
29
|
+
* fresh frozen list per call. */
|
|
30
|
+
export declare function insertCatalogue(activation: PluginActivation): readonly InsertEntry[];
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The blocks a menu can insert: the built-ins, then the entries plugins register, each with the
|
|
3
|
+
* Markdown it inserts. The right-click flyout, `EditorInstance.getInsertCatalogue()` and a plugin's
|
|
4
|
+
* `editor.insertCatalogue` all read this one list, so no two of them can disagree.
|
|
5
|
+
*/
|
|
6
|
+
import { isMenuIconName } from '../menu-icons';
|
|
7
|
+
import { legalFenceInfo } from './fenced-code-raw';
|
|
8
|
+
import { createPluginRegistry } from './plugin-registry';
|
|
9
|
+
const DEFAULT_TABLE = { columns: 2, rows: 2 };
|
|
10
|
+
const MAX_COLUMNS = 20;
|
|
11
|
+
const MAX_ROWS = 100;
|
|
12
|
+
const TABLE_HINT = 'columns×rows, like 3x4';
|
|
13
|
+
// A heading is not here: it is text turned into a heading, which the selection toolbar offers.
|
|
14
|
+
const BUILT_IN = [
|
|
15
|
+
entry('bullet', 'Bulleted list', 'list', ['bullet', 'unordered', 'ul', 'list'], '- '),
|
|
16
|
+
entry('numbered', 'Numbered list', 'list-ordered', ['number', 'ordered', 'ol', 'list'], '1. '),
|
|
17
|
+
entry('todo', 'To-do list', 'square-check', ['todo', 'td', 'task', 'checkbox', 'list'], '- [ ] '),
|
|
18
|
+
entry('quote', 'Quote', 'text-quote', ['blockquote', 'citation'], '> '),
|
|
19
|
+
entry('divider', 'Divider', 'minus', ['rule', 'separator', 'line'], '---\n'),
|
|
20
|
+
entry('code', 'Code block', 'code', ['fence', 'pre', 'snippet'], codeFence(''), codeArgument),
|
|
21
|
+
entry('table', 'Table', 'table', ['grid'], tableMarkdown(DEFAULT_TABLE), tableArgument)
|
|
22
|
+
];
|
|
23
|
+
const BUILT_IN_IDS = new Set(BUILT_IN.map((e) => e.id));
|
|
24
|
+
// Listed in registration order.
|
|
25
|
+
const fromPlugins = createPluginRegistry({
|
|
26
|
+
label: 'registerInsertEntry',
|
|
27
|
+
isBuiltin: () => false
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* Call from a plugin's `setup`: the entry is listed after the built-ins, and only in editors that
|
|
31
|
+
* activated that plugin. Throws on a taken id or an icon name the menu cannot draw.
|
|
32
|
+
*/
|
|
33
|
+
export function registerInsertEntry(entry) {
|
|
34
|
+
if (!isMenuIconName(entry.icon)) {
|
|
35
|
+
throw new Error(`registerInsertEntry: '${entry.id}' names icon '${entry.icon}', which the menu cannot draw`);
|
|
36
|
+
}
|
|
37
|
+
if (BUILT_IN_IDS.has(entry.id)) {
|
|
38
|
+
throw new Error(`registerInsertEntry: '${entry.id}' is a built-in insert entry`);
|
|
39
|
+
}
|
|
40
|
+
fromPlugins.register(entry.id, freezeEntry(entry), `registerInsertEntry: an insert entry '${entry.id}' is already registered`);
|
|
41
|
+
}
|
|
42
|
+
/** Every entry one editor lists: the built-ins, then each plugin entry `activation` resolves. A
|
|
43
|
+
* fresh frozen list per call. */
|
|
44
|
+
export function insertCatalogue(activation) {
|
|
45
|
+
const listed = fromPlugins.entries(activation).map(([, entry]) => entry);
|
|
46
|
+
return Object.freeze([...BUILT_IN, ...listed]);
|
|
47
|
+
}
|
|
48
|
+
// ── Internal ─────────────────────────────────────────────────────────────────
|
|
49
|
+
function entry(id, label, icon, keywords, markdown, withArgument) {
|
|
50
|
+
return freezeEntry({
|
|
51
|
+
id,
|
|
52
|
+
label,
|
|
53
|
+
icon,
|
|
54
|
+
keywords,
|
|
55
|
+
markdown,
|
|
56
|
+
...(withArgument && { withArgument })
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function freezeEntry(entry) {
|
|
60
|
+
return Object.freeze({ ...entry, keywords: Object.freeze([...entry.keywords]) });
|
|
61
|
+
}
|
|
62
|
+
// ── Arguments ────────────────────────────────────────────────────────────────
|
|
63
|
+
function codeFence(info) {
|
|
64
|
+
return `\`\`\`${info}\n\n\`\`\`\n`;
|
|
65
|
+
}
|
|
66
|
+
// The code block's own info-string rule, so the fence reads as if the language were typed on it.
|
|
67
|
+
function codeArgument(language) {
|
|
68
|
+
const info = legalFenceInfo(language, '`');
|
|
69
|
+
return { markdown: codeFence(info), detail: info || 'no language' };
|
|
70
|
+
}
|
|
71
|
+
/** A malformed size inserts the default table and says how to write one, so Enter always inserts. */
|
|
72
|
+
function tableArgument(argument) {
|
|
73
|
+
const size = parseTableSize(argument);
|
|
74
|
+
if (!size) {
|
|
75
|
+
const hint = `${sizeLabel(DEFAULT_TABLE)} · ${TABLE_HINT}`;
|
|
76
|
+
return { markdown: tableMarkdown(DEFAULT_TABLE), detail: hint };
|
|
77
|
+
}
|
|
78
|
+
return { markdown: tableMarkdown(size), detail: sizeLabel(size) };
|
|
79
|
+
}
|
|
80
|
+
/** `3x4` (or `3X4`, `3×4`) is three columns and four rows; null for anything else. */
|
|
81
|
+
function parseTableSize(argument) {
|
|
82
|
+
const match = /^(\d+)[xX×](\d+)$/.exec(argument);
|
|
83
|
+
if (!match)
|
|
84
|
+
return null;
|
|
85
|
+
const size = { columns: Number(match[1]), rows: Number(match[2]) };
|
|
86
|
+
const fits = size.columns >= 1 && size.columns <= MAX_COLUMNS && size.rows >= 2 && size.rows <= MAX_ROWS;
|
|
87
|
+
return fits ? size : null;
|
|
88
|
+
}
|
|
89
|
+
function tableMarkdown({ columns, rows }) {
|
|
90
|
+
const line = (cell) => `|${` ${cell} |`.repeat(columns)}\n`;
|
|
91
|
+
return line('Column') + line('---') + line('').repeat(rows - 1);
|
|
92
|
+
}
|
|
93
|
+
function sizeLabel({ columns, rows }) {
|
|
94
|
+
return `${columns}×${rows}`;
|
|
95
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Per-instance keybinding overrides: the public override-entry type, the normalized lookup it
|
|
3
|
-
* compiles into, and the primitives the command resolver composes with the built-in tables.
|
|
4
|
-
*
|
|
3
|
+
* compiles into, and the primitives the command resolver composes with the built-in tables. The
|
|
4
|
+
* map reaches the resolver as an argument, never through a context read.
|
|
5
5
|
*/
|
|
6
6
|
import type { AnyBlockKind } from '../core/nodes';
|
|
7
7
|
import { type KeyBinding } from './keybindings';
|
|
@@ -10,17 +10,15 @@ import type { AnyCommandId } from './command-id';
|
|
|
10
10
|
export interface KeybindingOverride {
|
|
11
11
|
/** Chord string in the public format (Mod/Alt/Shift + key). See keybindings.ts. */
|
|
12
12
|
chord: string;
|
|
13
|
-
/** A command to bind (built-in or
|
|
14
|
-
*
|
|
15
|
-
* consumed inside the editor rather than falling through to the browser's own default. */
|
|
13
|
+
/** A command to bind (built-in or plugin id), or `null` to disable the chord. A disabled chord
|
|
14
|
+
* leaves `reservedChords()` but is still consumed, so the browser's own default never runs. */
|
|
16
15
|
command: AnyCommandId | null;
|
|
17
|
-
/**
|
|
18
|
-
*
|
|
19
|
-
* editor-global scope. */
|
|
16
|
+
/** One block kind's keymap, a plugin kind named by its exported (branded) constant. Omit for
|
|
17
|
+
* the editor-global scope. */
|
|
20
18
|
kind?: AnyBlockKind;
|
|
21
19
|
/**
|
|
22
|
-
* Static argument baked into the binding. `unknown`
|
|
23
|
-
*
|
|
20
|
+
* Static argument baked into the binding. `unknown` to match `KeyBinding.arg`: a plugin
|
|
21
|
+
* command's non-number arg survives normalization, and the handler type-guards it.
|
|
24
22
|
*/
|
|
25
23
|
arg?: unknown;
|
|
26
24
|
}
|
|
@@ -35,5 +33,5 @@ export interface KeybindingOverrideMap {
|
|
|
35
33
|
export declare function normalizeKeybindingOverrides(overrides: KeybindingOverride[] | undefined): KeybindingOverrideMap;
|
|
36
34
|
/** Look up a single override for a (scope, chord). undefined when no entry exists. */
|
|
37
35
|
export declare function lookupOverride(overrides: KeybindingOverrideMap | undefined, scope: 'global' | AnyBlockKind, chord: string): OverrideValue | undefined;
|
|
38
|
-
/** Resolve one
|
|
36
|
+
/** Resolve one override scope: a binding (use it), null (disabled), undefined (no entry). */
|
|
39
37
|
export declare function overrideDecision(value: OverrideValue | undefined): KeyBinding | null | undefined;
|
|
@@ -35,7 +35,7 @@ export function lookupOverride(overrides, scope, chord) {
|
|
|
35
35
|
return overrides.global.get(chord);
|
|
36
36
|
return overrides.byKind.get(scope)?.get(chord);
|
|
37
37
|
}
|
|
38
|
-
/** Resolve one
|
|
38
|
+
/** Resolve one override scope: a binding (use it), null (disabled), undefined (no entry). */
|
|
39
39
|
export function overrideDecision(value) {
|
|
40
40
|
if (value === undefined)
|
|
41
41
|
return undefined;
|
|
@@ -8,8 +8,8 @@ export interface KeyBinding {
|
|
|
8
8
|
chord: string;
|
|
9
9
|
command: AnyCommandId;
|
|
10
10
|
/**
|
|
11
|
-
* Static argument baked into the binding, widened so a
|
|
12
|
-
* channel. It reaches the handler as `unknown`, which must type-guard before use.
|
|
11
|
+
* Static argument baked into the binding, widened so a plugin command's argument travels the
|
|
12
|
+
* same channel. It reaches the handler as `unknown`, which must type-guard before use.
|
|
13
13
|
*/
|
|
14
14
|
arg?: unknown;
|
|
15
15
|
}
|
|
@@ -21,14 +21,22 @@ export declare const BARE_MODIFIER_KEYS: readonly string[];
|
|
|
21
21
|
/** A `key` value that is one typed character: one code point, so an astral glyph's two
|
|
22
22
|
* UTF-16 units still count as a single keystroke. */
|
|
23
23
|
export declare function isCharacterKey(key: string): boolean;
|
|
24
|
-
|
|
24
|
+
/** The fields of a keydown a chord is read from; a `KeyboardEvent` is one. */
|
|
25
|
+
export type ChordKeys = Pick<KeyboardEvent, 'key' | 'ctrlKey' | 'metaKey' | 'altKey' | 'shiftKey'>;
|
|
26
|
+
export declare function eventToChord(e: ChordKeys): string | null;
|
|
27
|
+
/** Mod+A, CapsLock or not (CapsLock uppercases the key without a Shift). Select-all is a browser
|
|
28
|
+
* chord rather than a keymap command, so every block asks this one predicate. */
|
|
29
|
+
export declare function isSelectAllChord(e: ChordKeys): boolean;
|
|
30
|
+
/** Whether a key ends a run of select-all keypresses: any chord but Mod+A, not a held modifier. */
|
|
31
|
+
export declare function endsSelectAllRun(e: ChordKeys): boolean;
|
|
25
32
|
export declare function normalizeChord(chord: string): string;
|
|
33
|
+
/** Whether a chord is well-formed: Mod/Alt/Shift modifiers and a non-empty key. */
|
|
34
|
+
export declare function isChordWellFormed(chord: string): boolean;
|
|
26
35
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* warn, throw, or report.
|
|
36
|
+
* Validate then normalize a chord a registration declares, throwing on a malformed one, so a
|
|
37
|
+
* mis-typed `'Ctrl+B'` never collapses to a bare `'B'` that fires on every keypress.
|
|
30
38
|
*/
|
|
31
|
-
export declare function
|
|
39
|
+
export declare function registeredChord(chord: string, entry: string): string;
|
|
32
40
|
/**
|
|
33
41
|
* Validate then normalize a consumer-supplied chord; null (dev-warned) when malformed, guarding
|
|
34
42
|
* the trap where `'Ctrl+B'` drops the unrecognized `Ctrl` and collapses to bare `'B'`.
|
|
@@ -33,6 +33,15 @@ export function eventToChord(e) {
|
|
|
33
33
|
mods.push('Shift');
|
|
34
34
|
return [...mods, normalizeKey(e.key)].join('+');
|
|
35
35
|
}
|
|
36
|
+
/** Mod+A, CapsLock or not (CapsLock uppercases the key without a Shift). Select-all is a browser
|
|
37
|
+
* chord rather than a keymap command, so every block asks this one predicate. */
|
|
38
|
+
export function isSelectAllChord(e) {
|
|
39
|
+
return eventToChord(e) === 'Mod+A';
|
|
40
|
+
}
|
|
41
|
+
/** Whether a key ends a run of select-all keypresses: any chord but Mod+A, not a held modifier. */
|
|
42
|
+
export function endsSelectAllRun(e) {
|
|
43
|
+
return eventToChord(e) !== null && !isSelectAllChord(e);
|
|
44
|
+
}
|
|
36
45
|
export function normalizeChord(chord) {
|
|
37
46
|
const parts = chord.split('+');
|
|
38
47
|
const key = parts.pop() ?? '';
|
|
@@ -41,10 +50,7 @@ export function normalizeChord(chord) {
|
|
|
41
50
|
return [...mods, normalizeKey(key)].join('+');
|
|
42
51
|
}
|
|
43
52
|
const VALID_MODIFIERS = new Set(MOD_ORDER);
|
|
44
|
-
/**
|
|
45
|
-
* Why a chord is malformed, or null when it is well-formed. Shared core of the strict paths;
|
|
46
|
-
* keeping the reason lets `normalizeChordStrict` name it in the warn.
|
|
47
|
-
*/
|
|
53
|
+
/** Why a chord is malformed, or null when it's well-formed; a registration's error names it. */
|
|
48
54
|
function chordDefect(chord) {
|
|
49
55
|
const parts = chord.split('+');
|
|
50
56
|
const key = parts.pop() ?? '';
|
|
@@ -53,14 +59,20 @@ function chordDefect(chord) {
|
|
|
53
59
|
const bad = parts.find((mod) => !VALID_MODIFIERS.has(mod));
|
|
54
60
|
return bad === undefined ? null : `unrecognized modifier "${bad}" (use Mod/Alt/Shift)`;
|
|
55
61
|
}
|
|
56
|
-
/**
|
|
57
|
-
* The well-formedness the strict ingestion paths gate on, so a mis-typed `'Ctrl+B'` can't
|
|
58
|
-
* collapse to a bare `'B'` that fires on every keypress. Pure: the caller decides whether to
|
|
59
|
-
* warn, throw, or report.
|
|
60
|
-
*/
|
|
62
|
+
/** Whether a chord is well-formed: Mod/Alt/Shift modifiers and a non-empty key. */
|
|
61
63
|
export function isChordWellFormed(chord) {
|
|
62
64
|
return chordDefect(chord) === null;
|
|
63
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Validate then normalize a chord a registration declares, throwing on a malformed one, so a
|
|
68
|
+
* mis-typed `'Ctrl+B'` never collapses to a bare `'B'` that fires on every keypress.
|
|
69
|
+
*/
|
|
70
|
+
export function registeredChord(chord, entry) {
|
|
71
|
+
const defect = chordDefect(chord);
|
|
72
|
+
if (defect !== null)
|
|
73
|
+
throw new Error(`${entry}: chord "${chord}" is malformed: ${defect}`);
|
|
74
|
+
return normalizeChord(chord);
|
|
75
|
+
}
|
|
64
76
|
/**
|
|
65
77
|
* Validate then normalize a consumer-supplied chord; null (dev-warned) when malformed, guarding
|
|
66
78
|
* the trap where `'Ctrl+B'` drops the unrecognized `Ctrl` and collapses to bare `'B'`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Merge eligibility and target resolution for Backspace
|
|
3
|
-
* target
|
|
4
|
-
*
|
|
2
|
+
* Merge eligibility and target resolution for Backspace at the start of a block: the role-pair
|
|
3
|
+
* rules and the walk that finds the target. Each kind's `MergeRole` is declared on
|
|
4
|
+
* `BlockKindDescriptor` (`docs/design/editor.md` § Merge eligibility: roles, not pairs).
|
|
5
5
|
*/
|
|
6
6
|
import type { CstNode } from '../core/nodes';
|
|
7
7
|
import { type MergeRole } from './block-kind-descriptor';
|
|
@@ -17,10 +17,8 @@ export interface MergeTarget {
|
|
|
17
17
|
path: number[];
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
|
-
* Descend
|
|
21
|
-
*
|
|
22
|
-
* so the walk descends to the chrome leaf (child 0) instead — its not-mergeable role turns the
|
|
23
|
-
* merge into the caller's focus-move fallback rather than a hidden-body write.
|
|
20
|
+
* Descend through last children to a prose or prose-absorber leaf; null on a not-mergeable leaf or
|
|
21
|
+
* an empty container. A collapsed container stops at its title row, which refuses the merge.
|
|
24
22
|
*/
|
|
25
23
|
export declare function walkToDeepestMergeLeaf(node: CstNode, path: number[]): MergeTarget | null;
|
|
26
24
|
/** The leaf that receives text merged into `prev`; null means the caller moves focus instead. */
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Merge eligibility and target resolution for Backspace
|
|
3
|
-
* target
|
|
4
|
-
*
|
|
2
|
+
* Merge eligibility and target resolution for Backspace at the start of a block: the role-pair
|
|
3
|
+
* rules and the walk that finds the target. Each kind's `MergeRole` is declared on
|
|
4
|
+
* `BlockKindDescriptor` (`docs/design/editor.md` § Merge eligibility: roles, not pairs).
|
|
5
5
|
*/
|
|
6
6
|
import { getBlockKindDescriptor } from './block-kind-descriptor';
|
|
7
|
-
import {
|
|
7
|
+
import { caretChildCount } from './reserved-chrome';
|
|
8
8
|
// ── Merge Eligibility ───────────────────────────────────────────────────────
|
|
9
9
|
/** Can `currKind` merge into `prevKind` on Backspace? Derived from role pairs, never kinds. */
|
|
10
10
|
export function isMergeEligible(prevKind, currKind) {
|
|
@@ -24,10 +24,8 @@ export function getMergeRole(kind) {
|
|
|
24
24
|
return getBlockKindDescriptor(kind).mergeRole;
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
|
-
* Descend
|
|
28
|
-
*
|
|
29
|
-
* so the walk descends to the chrome leaf (child 0) instead — its not-mergeable role turns the
|
|
30
|
-
* merge into the caller's focus-move fallback rather than a hidden-body write.
|
|
27
|
+
* Descend through last children to a prose or prose-absorber leaf; null on a not-mergeable leaf or
|
|
28
|
+
* an empty container. A collapsed container stops at its title row, which refuses the merge.
|
|
31
29
|
*/
|
|
32
30
|
export function walkToDeepestMergeLeaf(node, path) {
|
|
33
31
|
const role = getMergeRole(node.kind);
|
|
@@ -37,7 +35,7 @@ export function walkToDeepestMergeLeaf(node, path) {
|
|
|
37
35
|
if (!node.children || node.children.length === 0) {
|
|
38
36
|
return null;
|
|
39
37
|
}
|
|
40
|
-
const nextIndex =
|
|
38
|
+
const nextIndex = caretChildCount(node) - 1;
|
|
41
39
|
return walkToDeepestMergeLeaf(node.children[nextIndex], [...path, nextIndex]);
|
|
42
40
|
}
|
|
43
41
|
/** The leaf that receives text merged into `prev`; null means the caller moves focus instead. */
|