@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,104 +1,99 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* dispatcher.
|
|
2
|
+
* The Backspace unwrap strategies a container's declared `unwrapRole` selects, run from the
|
|
3
|
+
* container's blockEdit (`docs/design/editor.md` § Container unwrap).
|
|
5
4
|
*/
|
|
6
5
|
import { CURSOR_END, CURSOR_START } from '../block-component';
|
|
7
|
-
import { deleteNode as performDelete, unwrapFirstItemFromList,
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { extendDocPath } from '../cursor/coordinate-spaces';
|
|
11
|
-
/** Drop
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
import { deleteNode as performDelete, unwrapFirstItemFromList, liftFirstChild, plainQuote, sameContainer, mergeListItemIntoPrevious, renumberOrderedList, isItemUserEmpty } from '../tree-operations';
|
|
7
|
+
import { removeEmptiedContainer } from './nested/emptied-container';
|
|
8
|
+
import { mergedElsePrevious } from './merge-fallback';
|
|
9
|
+
import { docPathFrom, extendDocPath } from '../cursor/coordinate-spaces';
|
|
10
|
+
/** Drop an empty item and renumber from its index; the caret lands at `landAt`, an item of this
|
|
11
|
+
* list after the delete, at `offset`. */
|
|
12
|
+
async function deleteEmptyItem({ deps, state }, itemIndex, landAt) {
|
|
13
|
+
return deps.parent.containerEdit.commitContainer({
|
|
14
14
|
containerNode: deps.node,
|
|
15
15
|
path: deps.path,
|
|
16
16
|
state,
|
|
17
17
|
snapshot: { path: extendDocPath(deps.path, itemIndex), offset: 0 },
|
|
18
18
|
mutate: (scope) => {
|
|
19
|
-
const change = performDelete(
|
|
19
|
+
const change = performDelete(scope.body, itemIndex, deps.reading.grammar, scope.sharing);
|
|
20
20
|
renumberOrderedList(scope.node, itemIndex, scope.sharing);
|
|
21
21
|
return change;
|
|
22
22
|
},
|
|
23
23
|
op: { kind: 'delete', eventPath: extendDocPath(deps.path, itemIndex) },
|
|
24
|
-
|
|
24
|
+
landing: () => ({ path: extendDocPath(deps.path, landAt.item), offset: landAt.offset })
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
27
|
// ── First-child strategies ──────────────────────────────────────────────────
|
|
28
|
-
/**
|
|
28
|
+
/** Lift the first child out of a quote-shaped container, whose opener goes with it (U2). */
|
|
29
29
|
async function liftFirstChildDroppingOpener({ deps }) {
|
|
30
|
-
|
|
30
|
+
return spliceLift(deps, liftFirstChild(deps.node, plainQuote(deps.reading.grammar)));
|
|
31
31
|
}
|
|
32
|
-
/**
|
|
32
|
+
/** Lift the first child out of a container whose syntax survives, so the rest keeps its kind (U2). */
|
|
33
33
|
async function liftFirstChildAndKeepContainer({ deps }) {
|
|
34
|
-
|
|
34
|
+
return spliceLift(deps, liftFirstChild(deps.node, sameContainer(deps.reading.grammar)));
|
|
35
|
+
}
|
|
36
|
+
/** Leaves the tree alone: child 0 is the container's title row, and a lift would carry it out. */
|
|
37
|
+
async function keepReservedChrome() {
|
|
38
|
+
return false;
|
|
35
39
|
}
|
|
36
|
-
/** Rule U2's declared decline: child 0 is the container's chrome, and a lift would carry it out. */
|
|
37
|
-
async function keepReservedChrome() { }
|
|
38
40
|
async function spliceLift(deps, replacement) {
|
|
39
41
|
if (replacement.length === 0)
|
|
40
|
-
return;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
});
|
|
42
|
+
return false;
|
|
43
|
+
return deps.parent.blockEdit.replaceBlock(deps.index, replacement, { replacementIndex: 0, offset: 0 },
|
|
44
|
+
// The caret sat in a child leaf, which an offset into the container can't name; the live
|
|
45
|
+
// read records it.
|
|
46
|
+
{ snapshotOffset: 0 });
|
|
45
47
|
}
|
|
46
|
-
/**
|
|
48
|
+
/** The first list item: promote if nested, delete if empty, delete the list if it is the only
|
|
49
|
+
* item, else unwrap its first paragraph before the list (U1). */
|
|
47
50
|
async function listItemCascadeFirst(strategy) {
|
|
48
|
-
const { deps
|
|
51
|
+
const { deps } = strategy;
|
|
49
52
|
const node = deps.node;
|
|
50
53
|
const index = deps.index;
|
|
51
54
|
if (!node.children)
|
|
52
|
-
return;
|
|
55
|
+
return false;
|
|
53
56
|
if (deps.parentListContext) {
|
|
54
|
-
|
|
55
|
-
return;
|
|
57
|
+
return deps.parentListContext.promoteNestedItem(deps.parentListContext.getContainingItemIndex(), node, 0);
|
|
56
58
|
}
|
|
57
59
|
const item = node.children[0];
|
|
58
60
|
const firstChildEmpty = isItemUserEmpty(item);
|
|
59
61
|
if (firstChildEmpty && node.children.length > 1) {
|
|
60
|
-
|
|
61
|
-
state.innerBlockRefs[0]?.focus(CURSOR_START);
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
else if (firstChildEmpty && node.children.length === 1) {
|
|
65
|
-
await deps.parent.blockEdit.deleteBlock(index);
|
|
66
|
-
await deps.parent.focus.moveFocus(index - 1, 'end');
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
const replacement = unwrapFirstItemFromList(node);
|
|
70
|
-
if (replacement.length === 0)
|
|
71
|
-
return;
|
|
72
|
-
await deps.parent.blockEdit.replaceBlock(index, replacement, {
|
|
73
|
-
replacementIndex: 0,
|
|
74
|
-
offset: 0
|
|
75
|
-
});
|
|
62
|
+
return deleteEmptyItem(strategy, 0, { item: 0, offset: CURSOR_START });
|
|
76
63
|
}
|
|
64
|
+
if (firstChildEmpty)
|
|
65
|
+
return removeEmptiedContainer(deps, 'Backspace');
|
|
66
|
+
const replacement = unwrapFirstItemFromList(node);
|
|
67
|
+
if (replacement.length === 0)
|
|
68
|
+
return false;
|
|
69
|
+
// The caret sat in the first item, which an offset into the list can't name; the live read
|
|
70
|
+
// records it.
|
|
71
|
+
return deps.parent.blockEdit.replaceBlock(index, replacement, { replacementIndex: 0, offset: 0 }, { snapshotOffset: 0 });
|
|
77
72
|
}
|
|
78
73
|
// ── Middle-child strategies ─────────────────────────────────────────────────
|
|
79
|
-
/**
|
|
74
|
+
/** A middle list item: delete and renumber if empty, else merge into the deepest text above (M1). */
|
|
80
75
|
async function listItemCascadeMiddle(strategy, itemIndex) {
|
|
81
76
|
const { deps, state } = strategy;
|
|
82
77
|
const node = deps.node;
|
|
83
78
|
if (!node.children)
|
|
84
|
-
return;
|
|
79
|
+
return false;
|
|
85
80
|
const item = node.children[itemIndex];
|
|
86
81
|
if (isItemUserEmpty(item)) {
|
|
87
|
-
|
|
88
|
-
state.innerBlockRefs[itemIndex - 1]?.focus(CURSOR_END);
|
|
89
|
-
});
|
|
90
|
-
return;
|
|
82
|
+
return deleteEmptyItem(strategy, itemIndex, { item: itemIndex - 1, offset: CURSOR_END });
|
|
91
83
|
}
|
|
92
|
-
//
|
|
93
|
-
// the merge no target, so the tree stays put and the caret falls back.
|
|
84
|
+
// A previous leaf with no editable text gives the merge no target, so only the caret moves.
|
|
94
85
|
let mergePoint = null;
|
|
95
|
-
|
|
86
|
+
const joinedAt = () => mergePoint && {
|
|
87
|
+
path: docPathFrom([...deps.path, ...mergePoint.targetPath]),
|
|
88
|
+
offset: mergePoint.offset
|
|
89
|
+
};
|
|
90
|
+
return deps.parent.containerEdit.commitContainer({
|
|
96
91
|
containerNode: node,
|
|
97
92
|
path: deps.path,
|
|
98
93
|
state,
|
|
99
94
|
snapshot: { path: extendDocPath(deps.path, itemIndex), offset: 0 },
|
|
100
95
|
mutate: (scope) => {
|
|
101
|
-
const result = mergeListItemIntoPrevious(scope.node, scope.children, itemIndex, scope.sharing, deps.
|
|
96
|
+
const result = mergeListItemIntoPrevious(scope.node, scope.children, itemIndex, scope.sharing, deps.reading);
|
|
102
97
|
mergePoint = result?.mergePoint ?? null;
|
|
103
98
|
return mergePoint ? { op: 'delete', at: itemIndex, count: 1 } : { op: 'noop' };
|
|
104
99
|
},
|
|
@@ -107,15 +102,9 @@ async function listItemCascadeMiddle(strategy, itemIndex) {
|
|
|
107
102
|
detail: { direction: 'prev' },
|
|
108
103
|
eventPath: extendDocPath(deps.path, itemIndex)
|
|
109
104
|
},
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return;
|
|
114
|
-
const [firstPathIdx, ...restPath] = merged.targetPath;
|
|
115
|
-
state.innerBlockRefs[firstPathIdx]?.focusByPath?.(restPath, merged.offset);
|
|
116
|
-
},
|
|
117
|
-
// A no-target merge changes nothing; discard the entry but keep afterTick,
|
|
118
|
-
// which still lands the caret.
|
|
105
|
+
landing: () => mergedElsePrevious(joinedAt(), extendDocPath(deps.path, itemIndex - 1)),
|
|
106
|
+
// A merge with no target changes nothing; discard the undo entry, and the landing still
|
|
107
|
+
// moves the caret.
|
|
119
108
|
discardIfNoop: true
|
|
120
109
|
});
|
|
121
110
|
}
|
|
@@ -1,50 +1,41 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The focus
|
|
3
|
-
* it. Such a block has no
|
|
4
|
-
* the only
|
|
5
|
-
* is that host. It mounts in the block's
|
|
6
|
-
* render swap replaces.
|
|
2
|
+
* The focus element of a block that is focused as a whole, and the hidden editing host beside
|
|
3
|
+
* it. Such a block has no editable element of its own, so `beforeinput` and `compositionend`,
|
|
4
|
+
* the only events AltGr characters and IME composition arrive through, fire nowhere. The
|
|
5
|
+
* proxy is that host. It mounts in the block's box, never in the declared focus element,
|
|
6
|
+
* which a render swap replaces.
|
|
7
7
|
*/
|
|
8
8
|
/** The hidden host looks exactly like a plugin's own editable; this is what tells them apart. */
|
|
9
9
|
export declare const WHOLE_BLOCK_INPUT_ATTR = "data-whole-block-input";
|
|
10
10
|
export declare function isWholeBlockInputProxy(target: EventTarget | null): boolean;
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
13
|
-
* whole-block affordances: Backspace inside an edit textarea edits text. The hidden host is
|
|
14
|
-
* excluded here rather than at each gate, so a later reader cannot forget it.
|
|
15
|
-
*/
|
|
11
|
+
/** A key pressed in a plugin's own text editor belongs to that editor (Backspace in a textarea
|
|
12
|
+
* edits text). The hidden host is excluded here, so no caller can forget it. */
|
|
16
13
|
export declare function isEditableEventTarget(target: EventTarget | null): boolean;
|
|
17
|
-
/**
|
|
18
|
-
*
|
|
19
|
-
* editing host leaves the tab order (editor.md § 8). Applied on every read rather than once at
|
|
20
|
-
* mount: a kind's declared element is whatever its current render state supplies, and the state
|
|
21
|
-
* that appears after mount would otherwise keep its stop. Inverse of `focusWholeBlockEl`, which
|
|
22
|
-
* only ever MINTS focusability on a box that has none.
|
|
23
|
-
*/
|
|
14
|
+
/** The hidden host is the block's one tab stop, so a declared element that is not an editor
|
|
15
|
+
* leaves the tab order. Applied on every read, since a later render state supplies a new one. */
|
|
24
16
|
export declare function demoteDeclaredFromTabOrder(declared: HTMLElement | null): HTMLElement | null;
|
|
25
|
-
/**
|
|
26
|
-
*
|
|
27
|
-
* focusable box, never a silent no-op that strands the caret. The one legitimate null
|
|
28
|
-
* survives — a plugin-owned editable inside the box holding focus.
|
|
29
|
-
*/
|
|
17
|
+
/** A missing declared element falls back to the focusable box, so the caret is never stranded;
|
|
18
|
+
* null only while a plugin-owned editable inside the box holds focus. */
|
|
30
19
|
export declare function composeWholeBlockFocusSurface(getFocusEl: () => HTMLElement | null | undefined, getBoxEl: () => HTMLElement | null | undefined, getKind: () => string): () => HTMLElement | null;
|
|
31
20
|
export declare function focusWholeBlockEl(el: HTMLElement): void;
|
|
32
|
-
/** Whole-block focus sits on the declared
|
|
21
|
+
/** Whole-block focus sits on the declared element or on the hidden host beside it. */
|
|
33
22
|
export declare function holdsWholeBlockFocus(declared: HTMLElement | null | undefined, proxy: HTMLElement | null | undefined): boolean;
|
|
34
23
|
export interface WholeBlockInputProxyDeps {
|
|
35
|
-
/** The
|
|
24
|
+
/** The block's box: stable across the render swaps that replace a declared focus element. */
|
|
36
25
|
getBoxEl: () => HTMLElement | null | undefined;
|
|
37
|
-
/** The kind's declared
|
|
38
|
-
* focus for itself. */
|
|
26
|
+
/** The kind's declared focus element. An editable one is the plugin's own caret host and
|
|
27
|
+
* keeps focus for itself. */
|
|
39
28
|
getFocusEl: () => HTMLElement | null | undefined;
|
|
40
29
|
isReading: () => boolean;
|
|
41
|
-
/**
|
|
30
|
+
/** The block's accessible name: the host is the block's tab stop, so it names the block. */
|
|
31
|
+
getLabel: () => string;
|
|
32
|
+
/** Commit the bytes the host produced: the same paragraph the keydown path creates. */
|
|
42
33
|
mint: (text: string) => void;
|
|
43
34
|
}
|
|
44
35
|
export interface WholeBlockInputProxy {
|
|
45
36
|
/** The mounted host, or null while the block has no box. */
|
|
46
37
|
el(): HTMLElement | null;
|
|
47
|
-
/**
|
|
38
|
+
/** Put DOM focus for a whole-block entry, falling back to `declared` when the plugin owns
|
|
48
39
|
* the caret or the host has not mounted. */
|
|
49
40
|
focus(declared: HTMLElement): void;
|
|
50
41
|
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The focus
|
|
3
|
-
* it. Such a block has no
|
|
4
|
-
* the only
|
|
5
|
-
* is that host. It mounts in the block's
|
|
6
|
-
* render swap replaces.
|
|
2
|
+
* The focus element of a block that is focused as a whole, and the hidden editing host beside
|
|
3
|
+
* it. Such a block has no editable element of its own, so `beforeinput` and `compositionend`,
|
|
4
|
+
* the only events AltGr characters and IME composition arrive through, fire nowhere. The
|
|
5
|
+
* proxy is that host. It mounts in the block's box, never in the declared focus element,
|
|
6
|
+
* which a render swap replaces.
|
|
7
7
|
*/
|
|
8
8
|
import { onMount } from 'svelte';
|
|
9
|
-
import { WHOLE_BLOCK_INPUT_LABEL } from '../a11y-strings';
|
|
10
9
|
import { devWarn } from '../dev-warn';
|
|
11
10
|
// ── Editable-target guards ───────────────────────────────────────────────────
|
|
12
11
|
/** The hidden host looks exactly like a plugin's own editable; this is what tells them apart. */
|
|
@@ -14,11 +13,8 @@ export const WHOLE_BLOCK_INPUT_ATTR = 'data-whole-block-input';
|
|
|
14
13
|
export function isWholeBlockInputProxy(target) {
|
|
15
14
|
return target instanceof Element && target.hasAttribute(WHOLE_BLOCK_INPUT_ATTR);
|
|
16
15
|
}
|
|
17
|
-
/**
|
|
18
|
-
*
|
|
19
|
-
* whole-block affordances: Backspace inside an edit textarea edits text. The hidden host is
|
|
20
|
-
* excluded here rather than at each gate, so a later reader cannot forget it.
|
|
21
|
-
*/
|
|
16
|
+
/** A key pressed in a plugin's own text editor belongs to that editor (Backspace in a textarea
|
|
17
|
+
* edits text). The hidden host is excluded here, so no caller can forget it. */
|
|
22
18
|
export function isEditableEventTarget(target) {
|
|
23
19
|
if (!(target instanceof HTMLElement))
|
|
24
20
|
return false;
|
|
@@ -28,24 +24,16 @@ export function isEditableEventTarget(target) {
|
|
|
28
24
|
return tag === 'TEXTAREA' || tag === 'INPUT' || target.isContentEditable;
|
|
29
25
|
}
|
|
30
26
|
// ── Tab order ────────────────────────────────────────────────────────────────
|
|
31
|
-
/**
|
|
32
|
-
*
|
|
33
|
-
* editing host leaves the tab order (editor.md § 8). Applied on every read rather than once at
|
|
34
|
-
* mount: a kind's declared element is whatever its current render state supplies, and the state
|
|
35
|
-
* that appears after mount would otherwise keep its stop. Inverse of `focusWholeBlockEl`, which
|
|
36
|
-
* only ever MINTS focusability on a box that has none.
|
|
37
|
-
*/
|
|
27
|
+
/** The hidden host is the block's one tab stop, so a declared element that is not an editor
|
|
28
|
+
* leaves the tab order. Applied on every read, since a later render state supplies a new one. */
|
|
38
29
|
export function demoteDeclaredFromTabOrder(declared) {
|
|
39
30
|
if (declared && declared.tabIndex >= 0 && !isEditableEventTarget(declared)) {
|
|
40
31
|
declared.tabIndex = -1;
|
|
41
32
|
}
|
|
42
33
|
return declared;
|
|
43
34
|
}
|
|
44
|
-
/**
|
|
45
|
-
*
|
|
46
|
-
* focusable box, never a silent no-op that strands the caret. The one legitimate null
|
|
47
|
-
* survives — a plugin-owned editable inside the box holding focus.
|
|
48
|
-
*/
|
|
35
|
+
/** A missing declared element falls back to the focusable box, so the caret is never stranded;
|
|
36
|
+
* null only while a plugin-owned editable inside the box holds focus. */
|
|
49
37
|
export function composeWholeBlockFocusSurface(getFocusEl, getBoxEl, getKind) {
|
|
50
38
|
let warned = false;
|
|
51
39
|
return () => {
|
|
@@ -65,15 +53,14 @@ export function composeWholeBlockFocusSurface(getFocusEl, getBoxEl, getKind) {
|
|
|
65
53
|
return box;
|
|
66
54
|
};
|
|
67
55
|
}
|
|
68
|
-
// The
|
|
69
|
-
//
|
|
70
|
-
// it has — this door only ever adds reachability, never removes it.
|
|
56
|
+
// The fallback box is a plain div, focusable only with a tabindex; an element already focusable
|
|
57
|
+
// keeps what it has, so this only ever adds reachability. The caller that moved the caret scrolls.
|
|
71
58
|
export function focusWholeBlockEl(el) {
|
|
72
59
|
if (el.tabIndex < 0 && !el.hasAttribute('tabindex'))
|
|
73
60
|
el.tabIndex = -1;
|
|
74
|
-
el.focus();
|
|
61
|
+
el.focus({ preventScroll: true });
|
|
75
62
|
}
|
|
76
|
-
/** Whole-block focus sits on the declared
|
|
63
|
+
/** Whole-block focus sits on the declared element or on the hidden host beside it. */
|
|
77
64
|
export function holdsWholeBlockFocus(declared, proxy) {
|
|
78
65
|
const active = document.activeElement;
|
|
79
66
|
return !!(declared?.contains(active) || (proxy && proxy === active));
|
|
@@ -81,45 +68,42 @@ export function holdsWholeBlockFocus(declared, proxy) {
|
|
|
81
68
|
export function createWholeBlockInputProxy(deps) {
|
|
82
69
|
let proxy = null;
|
|
83
70
|
let composing = false;
|
|
84
|
-
/** Every read of the declared
|
|
85
|
-
* supplying its own `getFocusEl` (
|
|
71
|
+
/** Every read of the declared element inside the proxy goes through the demotion, so a kind
|
|
72
|
+
* supplying its own `getFocusEl` (without the composed fallback) is held to the rule too. */
|
|
86
73
|
const declaredSurface = () => demoteDeclaredFromTabOrder(deps.getFocusEl() ?? null);
|
|
87
|
-
function mint(text) {
|
|
88
|
-
if (!deps.isReading())
|
|
89
|
-
deps.mint(text);
|
|
90
|
-
}
|
|
91
74
|
function onBeforeInput(event) {
|
|
92
75
|
// The browser owns the host between compositionstart and compositionend (the editor's
|
|
93
|
-
// standing IME
|
|
76
|
+
// standing IME rule); refusing here swallows the composition.
|
|
94
77
|
if (composing)
|
|
95
78
|
return;
|
|
96
79
|
event.preventDefault();
|
|
97
80
|
if (event.inputType === 'insertText' && event.data)
|
|
98
|
-
mint(event.data);
|
|
81
|
+
deps.mint(event.data);
|
|
99
82
|
}
|
|
100
83
|
function onCompositionEnd() {
|
|
101
84
|
composing = false;
|
|
102
85
|
const composed = proxy?.textContent ?? '';
|
|
103
|
-
// A caret host, never
|
|
104
|
-
//
|
|
86
|
+
// A caret host, never something a serializer reads: whatever the IME left belongs to the
|
|
87
|
+
// new paragraph, and the host goes back to empty either way.
|
|
105
88
|
if (proxy)
|
|
106
89
|
proxy.textContent = '';
|
|
107
90
|
if (composed)
|
|
108
|
-
mint(composed);
|
|
91
|
+
deps.mint(composed);
|
|
109
92
|
}
|
|
110
|
-
// A
|
|
111
|
-
// without this hand-off the first character after a click
|
|
93
|
+
// A click or a Tab lands natively on the kind's own element, where no beforeinput fires;
|
|
94
|
+
// without this hand-off the first character after a click goes through keydown again.
|
|
112
95
|
function onFocusIn(event) {
|
|
113
|
-
//
|
|
114
|
-
|
|
115
|
-
|
|
96
|
+
// A Tab lands on the host without passing `focusProxy`, so the name is refreshed here too.
|
|
97
|
+
if (proxy && event.target === proxy)
|
|
98
|
+
syncProxyState();
|
|
99
|
+
// Before the identity test, so focus arriving anywhere in the box takes the current render
|
|
100
|
+
// state's declared element out of the tab order before the next keypress.
|
|
116
101
|
if (!proxy || event.target !== declaredSurface())
|
|
117
102
|
return;
|
|
118
103
|
if (isEditableEventTarget(event.target))
|
|
119
104
|
return;
|
|
120
|
-
// The host's own Shift+Tab
|
|
121
|
-
//
|
|
122
|
-
// click after one leaves the declared surface holding focus and drops IME again.
|
|
105
|
+
// The host's own Shift+Tab passes here on its way out, and bouncing it would trap focus. Any
|
|
106
|
+
// other arrival (a toolbar button too) moves on, or the declared element keeps focus without IME.
|
|
123
107
|
if (event.relatedTarget === proxy)
|
|
124
108
|
return;
|
|
125
109
|
focusProxy();
|
|
@@ -127,9 +111,16 @@ export function createWholeBlockInputProxy(deps) {
|
|
|
127
111
|
function focusProxy() {
|
|
128
112
|
if (!proxy)
|
|
129
113
|
return;
|
|
130
|
-
|
|
114
|
+
syncProxyState();
|
|
115
|
+
proxy.focus({ preventScroll: true });
|
|
116
|
+
}
|
|
117
|
+
// Read per focus, not per mount: reading mode makes the host inert, and a kind's name can
|
|
118
|
+
// change while the block stays mounted.
|
|
119
|
+
function syncProxyState() {
|
|
120
|
+
if (!proxy)
|
|
121
|
+
return;
|
|
131
122
|
proxy.setAttribute('contenteditable', deps.isReading() ? 'false' : 'true');
|
|
132
|
-
proxy.
|
|
123
|
+
proxy.setAttribute('aria-label', deps.getLabel());
|
|
133
124
|
}
|
|
134
125
|
onMount(() => {
|
|
135
126
|
const box = deps.getBoxEl();
|
|
@@ -138,12 +129,11 @@ export function createWholeBlockInputProxy(deps) {
|
|
|
138
129
|
proxy = document.createElement('div');
|
|
139
130
|
proxy.setAttribute(WHOLE_BLOCK_INPUT_ATTR, '');
|
|
140
131
|
proxy.className = 'whole-block-input';
|
|
141
|
-
proxy.setAttribute('contenteditable', deps.isReading() ? 'false' : 'true');
|
|
142
132
|
proxy.setAttribute('role', 'textbox');
|
|
143
|
-
|
|
133
|
+
syncProxyState();
|
|
144
134
|
proxy.spellcheck = false;
|
|
145
|
-
// The block's tab stop, because focus belongs here: a declared
|
|
146
|
-
// order is a second stop
|
|
135
|
+
// The block's tab stop, because focus belongs here: a declared element left in the tab
|
|
136
|
+
// order is a second stop Shift+Tab lands on, where no input can arrive.
|
|
147
137
|
proxy.tabIndex = 0;
|
|
148
138
|
declaredSurface();
|
|
149
139
|
proxy.addEventListener('beforeinput', onBeforeInput);
|
package/dist/editor-events.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* and
|
|
4
|
-
*
|
|
2
|
+
* The event subscription object reached through `getEvents()`. Events fire synchronously
|
|
3
|
+
* and a handler must not mutate the document; an `edit` event fires after its change is
|
|
4
|
+
* written to state, so its handler sees the updated document.
|
|
5
5
|
*/
|
|
6
6
|
import type { AnyBlockKind } from './core/nodes';
|
|
7
7
|
import type { PresentationMode } from './presentation-mode';
|
|
8
8
|
import type { EditorSelection } from './selection/primitives';
|
|
9
9
|
import type { OpDescriptor, OperationDetailMap, OperationKind } from './schema/operations';
|
|
10
|
-
/** Derived per
|
|
10
|
+
/** Derived per operation from `OperationDetailMap`; see `schema/operations.ts`. */
|
|
11
11
|
export type EditEvent = {
|
|
12
12
|
[K in OperationKind]: undefined extends OperationDetailMap[K] ? {
|
|
13
13
|
op: K;
|
|
@@ -21,20 +21,19 @@ export type EditEvent = {
|
|
|
21
21
|
timestamp: number;
|
|
22
22
|
};
|
|
23
23
|
}[OperationKind];
|
|
24
|
-
/** The cast is sound by construction: both types
|
|
25
|
-
*
|
|
24
|
+
/** The cast is sound by construction: both types come from `OperationDetailMap`, which
|
|
25
|
+
* TypeScript cannot narrow as a correlated union. */
|
|
26
26
|
export declare function toEditEvent(op: OpDescriptor, path: number[], timestamp: number): EditEvent;
|
|
27
27
|
export type SelectionChangeEvent = EditorSelection | null;
|
|
28
28
|
export interface EditorError {
|
|
29
29
|
/**
|
|
30
|
-
* `clipboard` is a failure
|
|
30
|
+
* `clipboard` is a failure while pasting: the channel a host needs in order to release
|
|
31
31
|
* an asset `onPasteImage` already imported for it.
|
|
32
32
|
*/
|
|
33
33
|
origin: 'subscriber' | 'render' | 'commit' | 'command' | 'decoration' | 'clipboard' | 'link';
|
|
34
34
|
error: unknown;
|
|
35
|
-
/** Origin-specific: `path` for render, `op`+`path` for commit, `kind`+`command`
|
|
36
|
-
*
|
|
37
|
-
* paste's start path for clipboard when it was aimed at a range. */
|
|
35
|
+
/** Origin-specific: `path` for render, `op`+`path` for commit, `kind`+`command` (+`plugin`) for a
|
|
36
|
+
* command, `source` for decoration, `url` for link, the aimed-at start path for clipboard. */
|
|
38
37
|
context?: {
|
|
39
38
|
path?: number[];
|
|
40
39
|
op?: OperationKind;
|
|
@@ -49,43 +48,40 @@ export interface EditorEventMap {
|
|
|
49
48
|
edit: EditEvent;
|
|
50
49
|
selectionChange: SelectionChangeEvent;
|
|
51
50
|
error: EditorError;
|
|
52
|
-
/** The
|
|
51
|
+
/** The mode in effect after a `presentationMode` prop change (never fired at mount). */
|
|
53
52
|
presentationModeChange: PresentationMode;
|
|
54
53
|
/** The theme name after a `theme` prop change (never fired at mount), for a plugin
|
|
55
54
|
* that paints its own colors and so cannot pick the change up from CSS. */
|
|
56
55
|
themeChange: string;
|
|
57
|
-
/** `true` when an editor-owned menu
|
|
58
|
-
* so host
|
|
56
|
+
/** `true` when an editor-owned menu or popover opens while none was, `false` when the last one
|
|
57
|
+
* closes, so a host's own controls over the selection can step aside rather than stack. */
|
|
59
58
|
menuChange: boolean;
|
|
59
|
+
/** A `source` prop write replaced the whole document. Fires once the new tree, its selection
|
|
60
|
+
* and its link references are in place; an `edit` never fires for it. */
|
|
61
|
+
sourceSwap: SourceSwapEvent;
|
|
62
|
+
}
|
|
63
|
+
/** `generation` counts whole-document replacements since mount, starting at 1. */
|
|
64
|
+
export interface SourceSwapEvent {
|
|
65
|
+
generation: number;
|
|
60
66
|
}
|
|
61
67
|
export interface EditorEvents {
|
|
62
68
|
on<K extends keyof EditorEventMap>(event: K, handler: (payload: EditorEventMap[K]) => void): () => void;
|
|
63
|
-
/** Internal emit
|
|
69
|
+
/** Internal emit; not exported from `index.ts`. */
|
|
64
70
|
emit<K extends keyof EditorEventMap>(event: K, payload: EditorEventMap[K]): void;
|
|
65
71
|
}
|
|
66
72
|
export declare function createEditorEvents(): EditorEvents;
|
|
67
|
-
/**
|
|
68
|
-
* Route a contained command throw to the `error` channel, attributing the command and
|
|
69
|
-
* its owning plugin; no-ops when no events surface is present. A direct `plugin` wins
|
|
70
|
-
* over the kind lookup, so a global command's own owner is never clobbered by one.
|
|
71
|
-
*/
|
|
73
|
+
/** Report a thrown command to the `error` channel with the plugin that registered it. */
|
|
72
74
|
export declare function emitCommandError(events: EditorEvents | undefined, report: {
|
|
73
75
|
kind?: AnyBlockKind;
|
|
74
76
|
command: string;
|
|
75
77
|
plugin?: string;
|
|
76
78
|
error: unknown;
|
|
77
79
|
}): void;
|
|
78
|
-
/**
|
|
79
|
-
*
|
|
80
|
-
* which a host may want to log or surface. Fires for the DEFAULT activation only — a consumer
|
|
81
|
-
* supplying `onLinkActivate` owns its own policy.
|
|
82
|
-
*/
|
|
80
|
+
/** Report a link the scheme allowlist refused to the `error` channel. Default activation only: a
|
|
81
|
+
* consumer supplying `onLinkActivate` owns its own policy. */
|
|
83
82
|
export declare function emitBlockedLinkError(events: EditorEvents | undefined, url: string): void;
|
|
84
|
-
/**
|
|
85
|
-
*
|
|
86
|
-
* range the paste was aimed at and is OMITTED where there is none to name — `[]` would
|
|
87
|
-
* report the document root, which holds no caret.
|
|
88
|
-
*/
|
|
83
|
+
/** Report a clipboard failure to the `error` channel. `path` is left out when the paste aimed at
|
|
84
|
+
* no range, since `[]` would name the document root, which holds no caret. */
|
|
89
85
|
export declare function emitClipboardError(events: EditorEvents, report: {
|
|
90
86
|
error: unknown;
|
|
91
87
|
path?: number[];
|
package/dist/editor-events.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* and
|
|
4
|
-
*
|
|
2
|
+
* The event subscription object reached through `getEvents()`. Events fire synchronously
|
|
3
|
+
* and a handler must not mutate the document; an `edit` event fires after its change is
|
|
4
|
+
* written to state, so its handler sees the updated document.
|
|
5
5
|
*/
|
|
6
6
|
import { devWarn } from './dev-warn';
|
|
7
7
|
import { editorEnv } from './env';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* TS cannot narrow as a correlated union. */
|
|
8
|
+
/** The cast is sound by construction: both types come from `OperationDetailMap`, which
|
|
9
|
+
* TypeScript cannot narrow as a correlated union. */
|
|
11
10
|
export function toEditEvent(op, path, timestamp) {
|
|
12
11
|
return { op: op.kind, path, detail: op.detail, timestamp };
|
|
13
12
|
}
|
|
@@ -33,8 +32,8 @@ export function createEditorEvents() {
|
|
|
33
32
|
handler(payload);
|
|
34
33
|
}
|
|
35
34
|
catch (err) {
|
|
36
|
-
//
|
|
37
|
-
//
|
|
35
|
+
// An error-channel subscriber that throws is reported rather than re-emitted,
|
|
36
|
+
// which would loop. Anything the channel cannot report fails a gate instead.
|
|
38
37
|
if (event !== 'error' && handlers.error?.size) {
|
|
39
38
|
emit('error', { origin: 'subscriber', error: err });
|
|
40
39
|
}
|
|
@@ -42,8 +41,8 @@ export function createEditorEvents() {
|
|
|
42
41
|
devWarn('events', `${event} subscriber threw`, err);
|
|
43
42
|
}
|
|
44
43
|
else {
|
|
45
|
-
// devWarn is silent in production, and
|
|
46
|
-
// consumer's own handler threw, which an unguarded call would have
|
|
44
|
+
// `devWarn` is silent in production, and swallowing here would hide an exception
|
|
45
|
+
// the consumer's own handler threw, which an unguarded call would have shown.
|
|
47
46
|
console.error(`[aragonite] ${event} subscriber threw`, err);
|
|
48
47
|
}
|
|
49
48
|
}
|
|
@@ -52,13 +51,9 @@ export function createEditorEvents() {
|
|
|
52
51
|
return { on, emit };
|
|
53
52
|
}
|
|
54
53
|
// ── Contained-failure routing ──────────────────────────────────────────────
|
|
55
|
-
// One
|
|
56
|
-
//
|
|
57
|
-
/**
|
|
58
|
-
* Route a contained command throw to the `error` channel, attributing the command and
|
|
59
|
-
* its owning plugin; no-ops when no events surface is present. A direct `plugin` wins
|
|
60
|
-
* over the kind lookup, so a global command's own owner is never clobbered by one.
|
|
61
|
-
*/
|
|
54
|
+
// One builder per origin that has more than one emission site, kept here so the code that
|
|
55
|
+
// owns the channel owns the payload shape too.
|
|
56
|
+
/** Report a thrown command to the `error` channel with the plugin that registered it. */
|
|
62
57
|
export function emitCommandError(events, report) {
|
|
63
58
|
events?.emit('error', {
|
|
64
59
|
origin: 'command',
|
|
@@ -66,15 +61,12 @@ export function emitCommandError(events, report) {
|
|
|
66
61
|
context: {
|
|
67
62
|
kind: report.kind,
|
|
68
63
|
command: report.command,
|
|
69
|
-
plugin: report.plugin
|
|
64
|
+
plugin: report.plugin
|
|
70
65
|
}
|
|
71
66
|
});
|
|
72
67
|
}
|
|
73
|
-
/**
|
|
74
|
-
*
|
|
75
|
-
* which a host may want to log or surface. Fires for the DEFAULT activation only — a consumer
|
|
76
|
-
* supplying `onLinkActivate` owns its own policy.
|
|
77
|
-
*/
|
|
68
|
+
/** Report a link the scheme allowlist refused to the `error` channel. Default activation only: a
|
|
69
|
+
* consumer supplying `onLinkActivate` owns its own policy. */
|
|
78
70
|
export function emitBlockedLinkError(events, url) {
|
|
79
71
|
events?.emit('error', {
|
|
80
72
|
origin: 'link',
|
|
@@ -82,11 +74,8 @@ export function emitBlockedLinkError(events, url) {
|
|
|
82
74
|
context: { url }
|
|
83
75
|
});
|
|
84
76
|
}
|
|
85
|
-
/**
|
|
86
|
-
*
|
|
87
|
-
* range the paste was aimed at and is OMITTED where there is none to name — `[]` would
|
|
88
|
-
* report the document root, which holds no caret.
|
|
89
|
-
*/
|
|
77
|
+
/** Report a clipboard failure to the `error` channel. `path` is left out when the paste aimed at
|
|
78
|
+
* no range, since `[]` would name the document root, which holds no caret. */
|
|
90
79
|
export function emitClipboardError(events, report) {
|
|
91
80
|
events.emit('error', {
|
|
92
81
|
origin: 'clipboard',
|