@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
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor-root pointer gestures: clicks in priority order (the link card, link activation, the
|
|
3
|
+
* caret for empty space, a block's own box), the margin drag the browser cannot start from a
|
|
4
|
+
* non-editable element, multi-click selection, and where a right-click leaves the caret.
|
|
5
|
+
*/
|
|
6
|
+
import { placeContextPress, resetForPointerDown } from '../selection/cross-block/pointer';
|
|
7
|
+
import { createDeadSpaceCaret } from '../selection/dead-space-caret';
|
|
8
|
+
import { installDragListener } from '../selection/drag-pointer';
|
|
9
|
+
import { installMultiClickSelect } from '../selection/multi-click';
|
|
10
|
+
import { findSurfacePathForElement } from '../selection/path-lookup';
|
|
11
|
+
import { claimsPointerGesture } from '../selection/pointer-gesture';
|
|
12
|
+
import { isBlockNode, nodeAt } from '../tree-operations/node-primitives';
|
|
13
|
+
import { widgetSourceRange } from '../core/inline/inline-widgets';
|
|
14
|
+
import { LINK_ELEMENT_SELECTOR, resolveLinkAtPoint } from './blocks/text/link-at-point';
|
|
15
|
+
import { onRoot, removeAll } from './editor-root-listeners';
|
|
16
|
+
// Empty space and a block's non-editable parts (a rendered equation, a diagram, a whole-block
|
|
17
|
+
// input proxy) grow no native selection, so the editor runs the drag from there.
|
|
18
|
+
const NOT_A_DRAG_START = '[contenteditable="true"]:not([data-whole-block-input]), ' +
|
|
19
|
+
'button:not(.editor-tail-row), input, textarea, select, a, summary, [role="checkbox"], ' +
|
|
20
|
+
'.code-rail, .table-add-zone, .md-menu, .block-drag-handle';
|
|
21
|
+
const DRAG_SLOP_PX = 3;
|
|
22
|
+
export function createRootGestures(deps) {
|
|
23
|
+
const deadSpaceCaret = createDeadSpaceCaret({
|
|
24
|
+
getBlockComponent: (path) => deps.getBlockComponent(path),
|
|
25
|
+
resetSelectionForClick: () => resetForPointerDown(deps.selection, deps.caretMemory, false),
|
|
26
|
+
gapScope: {
|
|
27
|
+
getDoc: deps.getDoc,
|
|
28
|
+
selection: deps.selection,
|
|
29
|
+
getPresentationMode: deps.reading.mode
|
|
30
|
+
},
|
|
31
|
+
lastBlockIndex: () => deps.getDoc().children.length - 1,
|
|
32
|
+
land: (pos) => deps.land(pos)
|
|
33
|
+
});
|
|
34
|
+
function pressesSelectedWidget(target) {
|
|
35
|
+
const el = target instanceof Element ? target.closest('[data-inline-widget][data-source-start]') : null;
|
|
36
|
+
const source = el && widgetSourceRange(el);
|
|
37
|
+
const path = el && findSurfacePathForElement(el);
|
|
38
|
+
return source !== null && path != null && deps.widgetSelection.isSelected(path, source.start);
|
|
39
|
+
}
|
|
40
|
+
function dragStartsHere(root, target) {
|
|
41
|
+
if (claimsPointerGesture(target))
|
|
42
|
+
return false;
|
|
43
|
+
if (deadSpaceCaret.isDeadSpaceTarget(root, target))
|
|
44
|
+
return true;
|
|
45
|
+
if (!(target instanceof Element) || !root.contains(target))
|
|
46
|
+
return false;
|
|
47
|
+
return target.closest(NOT_A_DRAG_START) === null;
|
|
48
|
+
}
|
|
49
|
+
/** Open the card on the link `el` renders, or report that nothing there is one. The caret
|
|
50
|
+
* has already landed from mousedown, which is the one the card state snapshots. */
|
|
51
|
+
function openLinkCard(el) {
|
|
52
|
+
const path = findSurfacePathForElement(el);
|
|
53
|
+
if (!path)
|
|
54
|
+
return false;
|
|
55
|
+
const block = nodeAt(deps.getDoc(), path);
|
|
56
|
+
if (block === null || !isBlockNode(block))
|
|
57
|
+
return false;
|
|
58
|
+
const contentEl = deps.getBlockElByPath(path);
|
|
59
|
+
if (!contentEl)
|
|
60
|
+
return false;
|
|
61
|
+
const hit = resolveLinkAtPoint({ contentEl, block, path, reading: deps.reading });
|
|
62
|
+
if (!hit)
|
|
63
|
+
return false;
|
|
64
|
+
return deps.linkCard.open(hit.target);
|
|
65
|
+
}
|
|
66
|
+
function blurEditingSurface(root) {
|
|
67
|
+
const active = document.activeElement;
|
|
68
|
+
if (active instanceof HTMLElement && root.contains(active) && active !== root)
|
|
69
|
+
active.blur();
|
|
70
|
+
}
|
|
71
|
+
function install(root) {
|
|
72
|
+
// Per install: rebinding the root starts with no click in progress.
|
|
73
|
+
let marginDrag = false;
|
|
74
|
+
let marginDown = { x: 0, y: 0 };
|
|
75
|
+
let marginSession = null;
|
|
76
|
+
const handleAnchorClick = (anchor, e) => {
|
|
77
|
+
// The host's own header follows the page's link behaviour, not click-to-edit.
|
|
78
|
+
if (deps.isHostChrome(anchor))
|
|
79
|
+
return;
|
|
80
|
+
const href = anchor.getAttribute('href');
|
|
81
|
+
if (!href)
|
|
82
|
+
return;
|
|
83
|
+
// Always suppressed: cursor placement comes from mousedown. Reading mode has no caret
|
|
84
|
+
// for a plain click to place, so there links behave as in a rendered document.
|
|
85
|
+
e.preventDefault();
|
|
86
|
+
if (e.ctrlKey || e.metaKey || deps.reading.mode() === 'reading')
|
|
87
|
+
deps.activateLink(href, e);
|
|
88
|
+
};
|
|
89
|
+
const handleClick = (e) => {
|
|
90
|
+
const target = e.target;
|
|
91
|
+
// Ahead of the link branch: a link with a blocked scheme renders as a plain span, and
|
|
92
|
+
// it is exactly the link a user opens the card to fix. Mod-click still activates, below.
|
|
93
|
+
if (deps.reading.mode() === 'live' && !e.ctrlKey && !e.metaKey) {
|
|
94
|
+
const linkEl = target?.closest(LINK_ELEMENT_SELECTOR);
|
|
95
|
+
if (linkEl && !deps.isHostChrome(linkEl) && openLinkCard(linkEl)) {
|
|
96
|
+
e.preventDefault();
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const anchor = target?.closest('a[href]');
|
|
101
|
+
if (anchor) {
|
|
102
|
+
handleAnchorClick(anchor, e);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// A double or triple click places no caret: the multi-click select painted its range.
|
|
106
|
+
if (e.detail >= 2) {
|
|
107
|
+
marginDrag = false;
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const pressed = marginDrag;
|
|
111
|
+
const dragged = pressed &&
|
|
112
|
+
(Math.abs(e.clientX - marginDown.x) > DRAG_SLOP_PX ||
|
|
113
|
+
Math.abs(e.clientY - marginDown.y) > DRAG_SLOP_PX);
|
|
114
|
+
marginDrag = false;
|
|
115
|
+
if (dragged)
|
|
116
|
+
return;
|
|
117
|
+
if (deadSpaceCaret.handleClick(root, e))
|
|
118
|
+
return;
|
|
119
|
+
// A still click on a block's own box (padding beside a table, a rule, a closed
|
|
120
|
+
// equation's face) places the caret in that block, as empty space does.
|
|
121
|
+
if (pressed && !deadSpaceCaret.isDeadSpaceTarget(root, e.target)) {
|
|
122
|
+
if (deadSpaceCaret.placeAtPoint(root, e.clientX, e.clientY))
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
// A click on nothing still ends the edit in progress, since the margin click suppressed
|
|
126
|
+
// the browser's own blur.
|
|
127
|
+
if (pressed)
|
|
128
|
+
blurEditingSurface(root);
|
|
129
|
+
};
|
|
130
|
+
// Starts where a click would put the caret; mousedown's default is suppressed so no native
|
|
131
|
+
// selection fights the drag, and `click` still fires.
|
|
132
|
+
const startMarginDrag = (e) => {
|
|
133
|
+
marginDrag = false;
|
|
134
|
+
marginDown = { x: e.clientX, y: e.clientY };
|
|
135
|
+
if (e.button !== 0 || e.shiftKey || e.ctrlKey || e.metaKey || e.altKey)
|
|
136
|
+
return;
|
|
137
|
+
if (deps.reading.mode() === 'reading' || !dragStartsHere(root, e.target))
|
|
138
|
+
return;
|
|
139
|
+
const anchor = deadSpaceCaret.anchorAtPoint(root, e.clientX, e.clientY);
|
|
140
|
+
if (!anchor)
|
|
141
|
+
return;
|
|
142
|
+
marginDrag = true;
|
|
143
|
+
resetForPointerDown(deps.selection, deps.caretMemory, false);
|
|
144
|
+
// A block that runs its own drag from a nearby click (a table's cell rectangle) takes
|
|
145
|
+
// it; the generic drag is for blocks that have none.
|
|
146
|
+
if (!('offset' in anchor)) {
|
|
147
|
+
const component = deps.getBlockComponent(anchor.path);
|
|
148
|
+
if (component?.startDragAtPoint?.(e.clientX, e.clientY, e))
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
marginSession = installDragListener({
|
|
152
|
+
editorRoot: root,
|
|
153
|
+
scrollContainer: deps.getScrollHost() ?? root,
|
|
154
|
+
selection: deps.selection,
|
|
155
|
+
getBlockElByPath: deps.getBlockElByPath,
|
|
156
|
+
lifetimeSignal: deps.getLifetime(),
|
|
157
|
+
paintSameBlock: () => true
|
|
158
|
+
}, anchor, e);
|
|
159
|
+
};
|
|
160
|
+
const handleMouseDown = (e) => {
|
|
161
|
+
deadSpaceCaret.notePress(root, e);
|
|
162
|
+
// The second click of a run belongs to the multi-click select, which runs its own drag.
|
|
163
|
+
if (marginDrag && e.detail >= 2) {
|
|
164
|
+
marginSession?.dispose();
|
|
165
|
+
marginSession = null;
|
|
166
|
+
marginDrag = false;
|
|
167
|
+
}
|
|
168
|
+
if (marginDrag)
|
|
169
|
+
e.preventDefault();
|
|
170
|
+
};
|
|
171
|
+
return removeAll(onRoot(root, 'click', handleClick), installMultiClickSelect({
|
|
172
|
+
editorRoot: root,
|
|
173
|
+
selection: deps.selection,
|
|
174
|
+
getBlockElByPath: deps.getBlockElByPath,
|
|
175
|
+
getScrollContainer: () => deps.getScrollHost() ?? root,
|
|
176
|
+
lifetimeSignal: deps.getLifetime(),
|
|
177
|
+
marginBlockAt: (target, x, y) => deps.reading.mode() !== 'reading' && dragStartsHere(root, target)
|
|
178
|
+
? deadSpaceCaret.blockPathNearPoint(root, x, y)
|
|
179
|
+
: null,
|
|
180
|
+
pressesSelectedWidget
|
|
181
|
+
}), onRoot(root, 'pointerdown', startMarginDrag), onRoot(root, 'mousedown', handleMouseDown), onRoot(root, 'contextmenu', (e) => placeContextPress(deps.selection, e), {
|
|
182
|
+
capture: true
|
|
183
|
+
}));
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
install,
|
|
187
|
+
placeCaretAtPoint: (root, x, y) => deadSpaceCaret.placeAtPoint(root, x, y)
|
|
188
|
+
};
|
|
189
|
+
}
|
|
@@ -1,42 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Editor-root chord routing
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Arm order is load-bearing (pinned by `test/components/editor-root-keydown.test.ts`): search /
|
|
6
|
-
* Escape runs FIRST because the global-chord arm's focus gate is an unconditional
|
|
7
|
-
* early return, which would swallow a Mod+F pressed with the caret inside a block.
|
|
2
|
+
* Editor-root chord routing for keystrokes no mounted block handled. Search and Escape run
|
|
3
|
+
* first: the global-chord branch returns early on its focus check, which would swallow a Mod+F
|
|
4
|
+
* pressed inside a block (`test/components/editor-root-keydown.test.ts` pins the order).
|
|
8
5
|
*/
|
|
9
|
-
import type { PluginEditorLookup } from '../editor-keys';
|
|
10
|
-
import type { PluginActivation } from '../schema/plugin-activation';
|
|
11
|
-
import type { PresentationMode } from '../presentation-mode';
|
|
12
6
|
import type { SearchState } from '../search/search-state.svelte';
|
|
13
7
|
import type { CrossBlockHandlers } from '../selection/cross-block/dispatch';
|
|
14
|
-
import type {
|
|
15
|
-
import type { KeybindingOverrideMap } from '../schema/keybinding-overrides';
|
|
16
|
-
import { type GlobalCommandContext } from '../schema/commands';
|
|
8
|
+
import type { CommandDispatchContext } from '../schema/block-commands';
|
|
17
9
|
export interface EditorRootKeydownDeps {
|
|
18
|
-
/** Getters, never values:
|
|
19
|
-
* override map at construction time. */
|
|
10
|
+
/** Getters, never values: capturing them would freeze the flags at construction time. */
|
|
20
11
|
get searchBarEnabled(): boolean;
|
|
21
|
-
get mode(): PresentationMode;
|
|
22
12
|
/** One predicate, so the root Mod+H and the bar's chevron cannot diverge on when
|
|
23
13
|
* the replace row may open. */
|
|
24
14
|
get canReplace(): boolean;
|
|
25
|
-
get keybindingOverrides(): KeybindingOverrideMap;
|
|
26
15
|
get isCrossBlock(): boolean;
|
|
27
16
|
search: SearchState;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
/** The plugins this instance activated, so the root claims only its own plugins'
|
|
31
|
-
* chords. `undefined` = every installed plugin. */
|
|
32
|
-
activation: PluginActivation | undefined;
|
|
33
|
-
onCommandError: CommandErrorSink;
|
|
17
|
+
/** The editor's command dispatch, which takes only this instance's plugins' chords. */
|
|
18
|
+
commands: CommandDispatchContext;
|
|
34
19
|
crossBlock: Pick<CrossBlockHandlers, 'handleKeyDown' | 'insertText'>;
|
|
35
|
-
/** True for nodes in the host's
|
|
20
|
+
/** True for nodes in the host's own header: they sit inside `root.contains`
|
|
36
21
|
* without being the editor's own content. */
|
|
37
22
|
isHostChrome(node: Node | null): boolean;
|
|
38
|
-
/** Snapshot the pre-search
|
|
39
|
-
|
|
23
|
+
/** Snapshot the pre-search selection; the bar's close handler restores it. */
|
|
24
|
+
saveSearchCaret(): void;
|
|
40
25
|
setReplaceExpanded(expanded: boolean): void;
|
|
41
26
|
}
|
|
42
27
|
export interface EditorRootKeydown {
|
|
@@ -1,34 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Editor-root chord routing
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Arm order is load-bearing (pinned by `test/components/editor-root-keydown.test.ts`): search /
|
|
6
|
-
* Escape runs FIRST because the global-chord arm's focus gate is an unconditional
|
|
7
|
-
* early return, which would swallow a Mod+F pressed with the caret inside a block.
|
|
2
|
+
* Editor-root chord routing for keystrokes no mounted block handled. Search and Escape run
|
|
3
|
+
* first: the global-chord branch returns early on its focus check, which would swallow a Mod+F
|
|
4
|
+
* pressed inside a block (`test/components/editor-root-keydown.test.ts` pins the order).
|
|
8
5
|
*/
|
|
9
6
|
import { claimsBodyChord, isForeignTextEntry } from '../active-editor';
|
|
10
7
|
import { isReservedUiChord, runGlobalChord } from '../schema/commands';
|
|
11
8
|
import { eventToChord, isCharacterKey } from '../schema/keybindings';
|
|
12
9
|
export function createEditorRootKeydown(deps) {
|
|
13
|
-
/**
|
|
14
|
-
*
|
|
15
|
-
* claims. `claimsBodyChord` gives a lone editor Find/Replace page-wide while
|
|
16
|
-
* keeping a second mounted editor from stealing it. A foreign text-entry surface
|
|
17
|
-
* owns page-global Find while the user types in it, so the editor yields there.
|
|
18
|
-
*/
|
|
10
|
+
/** Search and Escape, with focus in this editor or a search chord this instance holds; a text
|
|
11
|
+
* field outside every editor keeps page-wide Find while the user types in it. */
|
|
19
12
|
function handleSearchChords(event, root, chord, active) {
|
|
20
13
|
if (!(root.contains(active) || (claimsBodyChord(root) && !isForeignTextEntry(active))))
|
|
21
14
|
return false;
|
|
22
15
|
if (deps.searchBarEnabled && chord && isReservedUiChord(chord)) {
|
|
23
16
|
event.preventDefault();
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (!deps.search.isOpen) {
|
|
30
|
-
deps.saveSearchRange(selection && selection.rangeCount ? selection.getRangeAt(0).cloneRange() : null);
|
|
31
|
-
}
|
|
17
|
+
// Read before open(), whose focus collapses the selection; the !isOpen check keeps a
|
|
18
|
+
// repeat Mod+F from overwriting the saved caret.
|
|
19
|
+
const selected = window.getSelection()?.toString() ?? '';
|
|
20
|
+
if (!deps.search.isOpen)
|
|
21
|
+
deps.saveSearchCaret();
|
|
32
22
|
deps.setReplaceExpanded(chord === 'Mod+H' && deps.canReplace);
|
|
33
23
|
deps.search.open();
|
|
34
24
|
if (selected)
|
|
@@ -42,12 +32,8 @@ export function createEditorRootKeydown(deps) {
|
|
|
42
32
|
}
|
|
43
33
|
return false;
|
|
44
34
|
}
|
|
45
|
-
/**
|
|
46
|
-
*
|
|
47
|
-
* unlike the search chords, these collide with a focused outside element's native behavior (a
|
|
48
|
-
* text input owns Mod+Z). The gap caret's proxy is focused DOM of its own and resolves the same
|
|
49
|
-
* chords at the target (`GapCaret.svelte`), so this arm stays out of its way.
|
|
50
|
-
*/
|
|
35
|
+
/** Undo, redo, plugin-global chords and cross-block motion need no element focused, since an
|
|
36
|
+
* outside one may own them (a text input owns Mod+Z); the gap caret handles its own. */
|
|
51
37
|
function ownsWindowedOutCaret(root, active) {
|
|
52
38
|
const noElementFocused = active === null || active === root.ownerDocument.body;
|
|
53
39
|
return active === root || (noElementFocused && claimsBodyChord(root));
|
|
@@ -58,34 +44,24 @@ export function createEditorRootKeydown(deps) {
|
|
|
58
44
|
// every other chord-dispatch site.
|
|
59
45
|
const chord = eventToChord(event);
|
|
60
46
|
const active = root.ownerDocument.activeElement;
|
|
61
|
-
//
|
|
62
|
-
//
|
|
63
|
-
// it means "outside every mounted editor" and the slot is inside one.
|
|
47
|
+
// The host's header owns its keystrokes; `isForeignTextEntry` cannot tell, since the
|
|
48
|
+
// header is inside the editor.
|
|
64
49
|
if (deps.isHostChrome(active))
|
|
65
50
|
return;
|
|
66
51
|
if (handleSearchChords(event, root, chord, active))
|
|
67
52
|
return;
|
|
68
53
|
if (!ownsWindowedOutCaret(root, active))
|
|
69
54
|
return;
|
|
70
|
-
// No block is focused here, so resolve
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
if (chord &&
|
|
74
|
-
runGlobalChord(chord, deps.keybindingOverrides, {
|
|
75
|
-
isReading: deps.mode === 'reading',
|
|
76
|
-
history: deps.history,
|
|
77
|
-
pluginEditor: deps.pluginEditor,
|
|
78
|
-
activation: deps.activation,
|
|
79
|
-
onCommandError: deps.onCommandError
|
|
80
|
-
})) {
|
|
55
|
+
// No block is focused here, so resolve globally, overrides included, or a consumer's
|
|
56
|
+
// global rebind would be dead in this one place.
|
|
57
|
+
if (chord && runGlobalChord(chord, deps.commands)) {
|
|
81
58
|
event.preventDefault();
|
|
82
59
|
return;
|
|
83
60
|
}
|
|
84
61
|
if (!deps.isCrossBlock)
|
|
85
62
|
return;
|
|
86
|
-
//
|
|
87
|
-
//
|
|
88
|
-
// Composition still belongs to the browser, and a chorded key is not text.
|
|
63
|
+
// With nothing editable focused, no `beforeinput` fires for a typed character, so it
|
|
64
|
+
// comes in here; composition and chorded keys are left alone.
|
|
89
65
|
if (isCharacterKey(event.key) && !event.isComposing && !event.ctrlKey && !event.metaKey) {
|
|
90
66
|
event.preventDefault();
|
|
91
67
|
void deps.crossBlock.insertText(event.key);
|
|
@@ -1,48 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* getters; each installing `$effect` stays in `Editor.svelte` as a guard plus one install
|
|
5
|
-
* call, returning the teardown. `onRoot`/`removeAll` capture that add/remove pair once.
|
|
2
|
+
* The editor root's document and window listeners, each installed by one call that returns its
|
|
3
|
+
* teardown. `onRoot` and `removeAll` keep every add paired with its remove.
|
|
6
4
|
*/
|
|
5
|
+
import type { SelectionState } from '../selection/selection-state.svelte';
|
|
7
6
|
export declare function onRoot<E extends Event>(target: EventTarget, type: string, handler: (event: E) => void, options?: {
|
|
8
7
|
capture?: boolean;
|
|
9
8
|
passive?: boolean;
|
|
10
9
|
}): () => void;
|
|
11
10
|
export declare function removeAll(...removers: (() => void)[]): () => void;
|
|
12
|
-
/**
|
|
13
|
-
*
|
|
14
|
-
* off `data-mod-active`. Reset on blur and visibility loss, or a modifier released
|
|
15
|
-
* while the page is unfocused sticks the cursor on.
|
|
16
|
-
*/
|
|
11
|
+
/** Only Ctrl/Cmd+click activates a link, so CSS shows the pointer off `data-mod-active`; reset on
|
|
12
|
+
* blur and visibility loss, so a key released while unfocused cannot stick it. */
|
|
17
13
|
export declare function installModActiveTracker(root: HTMLElement): () => void;
|
|
14
|
+
/** The user's input in `root` ends the open undo step, so typing while a plugin's commit waits
|
|
15
|
+
* gets its own entry; window capture ends it before the root's handlers open the next. */
|
|
16
|
+
export declare function installUndoStepEnd(root: HTMLElement, endStep: () => void): () => void;
|
|
17
|
+
/** A block stays held in place until the user's next gesture on the scroll container; not
|
|
18
|
+
* `scroll`, which a programmatic correction fires too. */
|
|
19
|
+
export declare function installRevealAnchorRelease(port: EventTarget, release: () => void): () => void;
|
|
18
20
|
export interface SelectionChangeBridgeDeps {
|
|
19
21
|
/** The element the installing effect captured, not a live binding. */
|
|
20
22
|
root: HTMLElement;
|
|
21
|
-
/**
|
|
23
|
+
/** A live check, never captured: the host's header can mount after install. */
|
|
22
24
|
isHostChrome(node: Node | null): boolean;
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
+
/** Announces this editor's current selection, and does nothing when it is the one
|
|
26
|
+
* subscribers were already told about. */
|
|
27
|
+
announceIfMoved(): void;
|
|
28
|
+
/** Read for an inline widget selected whole, which owns the keys while it is. */
|
|
29
|
+
selection: Pick<SelectionState, 'widget'>;
|
|
25
30
|
}
|
|
26
|
-
/**
|
|
27
|
-
*
|
|
28
|
-
* bridge subscribers miss every intra-block move. Scoped to `root` to avoid noise
|
|
29
|
-
* from selections elsewhere on the page.
|
|
30
|
-
*/
|
|
31
|
+
/** Announces caret motion the editor did not make (a click, a move within one block), and drops
|
|
32
|
+
* a caret that appears while an inline widget is selected whole. */
|
|
31
33
|
export declare function installSelectionChangeBridge(deps: SelectionChangeBridgeDeps): () => void;
|
|
32
|
-
/**
|
|
33
|
-
*
|
|
34
|
-
* survive unfocused while the editor's own read goes null, so the channel announces it. Judged
|
|
35
|
-
* after the flush, never at focusout: a structural commit unmounts the focused surface and
|
|
36
|
-
* lands focus again after its own tick, and a departure that came back is no departure.
|
|
37
|
-
*/
|
|
34
|
+
/** Announces losing focus, a selection change no browser event reports; decided after the
|
|
35
|
+
* flush, since a structural commit refocuses its block a tick later. */
|
|
38
36
|
export declare function installEditorBlurAnnouncer(deps: {
|
|
39
37
|
root: HTMLElement;
|
|
40
|
-
|
|
38
|
+
announce: () => void;
|
|
41
39
|
}): () => void;
|
|
42
|
-
/**
|
|
43
|
-
* Windows Chromium's double-click takes the space after the word, so the word is selected on
|
|
44
|
-
* the SECOND press, trimmed, with the native selection suppressed; the dblclick trim is the
|
|
45
|
-
* fallback. A press on an inline widget is that widget's own gesture (a footnote's double-click
|
|
46
|
-
* takes its whole token), so the root leaves it to the widget.
|
|
47
|
-
*/
|
|
48
|
-
export declare function installDoubleClickWordSelect(root: HTMLElement): () => void;
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* getters; each installing `$effect` stays in `Editor.svelte` as a guard plus one install
|
|
5
|
-
* call, returning the teardown. `onRoot`/`removeAll` capture that add/remove pair once.
|
|
2
|
+
* The editor root's document and window listeners, each installed by one call that returns its
|
|
3
|
+
* teardown. `onRoot` and `removeAll` keep every add paired with its remove.
|
|
6
4
|
*/
|
|
7
5
|
import { tick } from 'svelte';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
6
|
+
import { findSurfacePathForElement } from '../selection/path-lookup';
|
|
7
|
+
import { BARE_MODIFIER_KEYS } from '../schema/keybindings';
|
|
10
8
|
// ── Listener plumbing ───────────────────────────────────────────────
|
|
11
9
|
// Typed off `Event`, not the per-target event maps: those names are type-only,
|
|
12
10
|
// and `target` ranges over every EventTarget the root effects listen on.
|
|
@@ -21,11 +19,8 @@ export function removeAll(...removers) {
|
|
|
21
19
|
return () => removers.forEach((remove) => remove());
|
|
22
20
|
}
|
|
23
21
|
// ── Install bundles ─────────────────────────────────────────────────
|
|
24
|
-
/**
|
|
25
|
-
*
|
|
26
|
-
* off `data-mod-active`. Reset on blur and visibility loss, or a modifier released
|
|
27
|
-
* while the page is unfocused sticks the cursor on.
|
|
28
|
-
*/
|
|
22
|
+
/** Only Ctrl/Cmd+click activates a link, so CSS shows the pointer off `data-mod-active`; reset on
|
|
23
|
+
* blur and visibility loss, so a key released while unfocused cannot stick it. */
|
|
29
24
|
export function installModActiveTracker(root) {
|
|
30
25
|
// Track the last reflected state so ordinary typing never touches the DOM,
|
|
31
26
|
// keeping the attribute write off the keystroke hot path (perf:check).
|
|
@@ -47,11 +42,30 @@ export function installModActiveTracker(root) {
|
|
|
47
42
|
};
|
|
48
43
|
return removeAll(onRoot(document, 'keydown', onKey), onRoot(document, 'keyup', onKey), onRoot(window, 'blur', reset), onRoot(document, 'visibilitychange', onVisibility));
|
|
49
44
|
}
|
|
50
|
-
/**
|
|
51
|
-
*
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
45
|
+
/** The user's input in `root` ends the open undo step, so typing while a plugin's commit waits
|
|
46
|
+
* gets its own entry; window capture ends it before the root's handlers open the next. */
|
|
47
|
+
export function installUndoStepEnd(root, endStep) {
|
|
48
|
+
const win = root.ownerDocument.defaultView;
|
|
49
|
+
if (!win)
|
|
50
|
+
return () => { };
|
|
51
|
+
const handler = (e) => {
|
|
52
|
+
if (!(e.target instanceof Node) || !root.contains(e.target))
|
|
53
|
+
return;
|
|
54
|
+
// A held Shift or Ctrl is not input yet; the key it modifies is.
|
|
55
|
+
if (e instanceof KeyboardEvent && BARE_MODIFIER_KEYS.includes(e.key))
|
|
56
|
+
return;
|
|
57
|
+
endStep();
|
|
58
|
+
};
|
|
59
|
+
const removers = ['keydown', 'beforeinput', 'paste', 'cut', 'drop'].map((type) => onRoot(win, type, handler, { capture: true }));
|
|
60
|
+
return () => removers.forEach((remove) => remove());
|
|
61
|
+
}
|
|
62
|
+
/** A block stays held in place until the user's next gesture on the scroll container; not
|
|
63
|
+
* `scroll`, which a programmatic correction fires too. */
|
|
64
|
+
export function installRevealAnchorRelease(port, release) {
|
|
65
|
+
return removeAll(onRoot(port, 'keydown', release), onRoot(port, 'pointerdown', release), onRoot(port, 'wheel', release, { passive: true }));
|
|
66
|
+
}
|
|
67
|
+
/** Announces caret motion the editor did not make (a click, a move within one block), and drops
|
|
68
|
+
* a caret that appears while an inline widget is selected whole. */
|
|
55
69
|
export function installSelectionChangeBridge(deps) {
|
|
56
70
|
const handler = () => {
|
|
57
71
|
const sel = window.getSelection();
|
|
@@ -60,20 +74,29 @@ export function installSelectionChangeBridge(deps) {
|
|
|
60
74
|
const anchorNode = sel.anchorNode;
|
|
61
75
|
if (!anchorNode || !deps.root.contains(anchorNode))
|
|
62
76
|
return;
|
|
63
|
-
// A selection in host
|
|
77
|
+
// A selection in the host's header is not a document selection: announcing there
|
|
64
78
|
// reports this editor's own unchanged selection on every header caret move.
|
|
65
79
|
if (deps.isHostChrome(anchorNode))
|
|
66
80
|
return;
|
|
67
|
-
|
|
81
|
+
// The paragraph keeps focus while its widget is selected, and the browser puts a caret at
|
|
82
|
+
// its start on any mouse input. A drag's range and a caret in a popover field stay.
|
|
83
|
+
if (sel.isCollapsed && deps.selection.widget !== null && inBlockSurface(anchorNode)) {
|
|
84
|
+
sel.removeAllRanges();
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
deps.announceIfMoved();
|
|
68
88
|
};
|
|
69
|
-
return onRoot(document, 'selectionchange', handler)
|
|
89
|
+
return removeAll(onRoot(document, 'selectionchange', handler),
|
|
90
|
+
// The browser reports a click's caret on a later task, which a byte typed straight after
|
|
91
|
+
// beats. On `document` so the block's own click handling refines the caret first.
|
|
92
|
+
onRoot(document, 'click', handler));
|
|
70
93
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
*/
|
|
94
|
+
function inBlockSurface(node) {
|
|
95
|
+
const el = node instanceof Element ? node : node.parentElement;
|
|
96
|
+
return findSurfacePathForElement(el) !== null;
|
|
97
|
+
}
|
|
98
|
+
/** Announces losing focus, a selection change no browser event reports; decided after the
|
|
99
|
+
* flush, since a structural commit refocuses its block a tick later. */
|
|
77
100
|
export function installEditorBlurAnnouncer(deps) {
|
|
78
101
|
let pending = false;
|
|
79
102
|
const handler = (event) => {
|
|
@@ -86,28 +109,8 @@ export function installEditorBlurAnnouncer(deps) {
|
|
|
86
109
|
const active = document.activeElement;
|
|
87
110
|
if (active instanceof Node && deps.root.contains(active))
|
|
88
111
|
return;
|
|
89
|
-
deps.
|
|
112
|
+
deps.announce();
|
|
90
113
|
});
|
|
91
114
|
};
|
|
92
115
|
return onRoot(deps.root, 'focusout', handler);
|
|
93
116
|
}
|
|
94
|
-
/**
|
|
95
|
-
* Windows Chromium's double-click takes the space after the word, so the word is selected on
|
|
96
|
-
* the SECOND press, trimmed, with the native selection suppressed; the dblclick trim is the
|
|
97
|
-
* fallback. A press on an inline widget is that widget's own gesture (a footnote's double-click
|
|
98
|
-
* takes its whole token), so the root leaves it to the widget.
|
|
99
|
-
*/
|
|
100
|
-
export function installDoubleClickWordSelect(root) {
|
|
101
|
-
const onSecondPress = (e) => {
|
|
102
|
-
if (e.detail !== 2 || e.button !== 0 || e.shiftKey || e.ctrlKey || e.metaKey)
|
|
103
|
-
return;
|
|
104
|
-
if (!isEditableEventTarget(e.target) || pressesInlineWidget(e.target))
|
|
105
|
-
return;
|
|
106
|
-
if (selectWordAtPoint(root.ownerDocument, e.clientX, e.clientY))
|
|
107
|
-
e.preventDefault();
|
|
108
|
-
};
|
|
109
|
-
return removeAll(onRoot(root, 'mousedown', onSecondPress), onRoot(root, 'dblclick', () => trimDoubleClickSelection(root.ownerDocument)));
|
|
110
|
-
}
|
|
111
|
-
function pressesInlineWidget(target) {
|
|
112
|
-
return target instanceof Element && target.closest('[data-inline-widget]') !== null;
|
|
113
|
-
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor-root menus: the block context menu (a right-click on a block runs its kind's registered
|
|
3
|
+
* actions; prose and a selection get the clipboard rows, and prose an insert flyout). The open
|
|
4
|
+
* menu is `$state` in `Editor.svelte`, written through `setMenu`; a menu takes no focus, so
|
|
5
|
+
* the caret it acts on stays exactly where it is.
|
|
6
|
+
*/
|
|
7
|
+
import type { BlockEditActions } from '../action-contracts';
|
|
8
|
+
import type { DocumentGetter } from '../editor-keys';
|
|
9
|
+
import type { InsertMarkdownOptions } from '../editor-props';
|
|
10
|
+
import type { PresentationMode } from '../presentation-mode';
|
|
11
|
+
import type { PluginActivation } from '../schema/plugin-activation';
|
|
12
|
+
import type { InsertEntry } from '../schema/insert-catalogue';
|
|
13
|
+
import type { MenuEntry } from './menu/BlockMenu.svelte';
|
|
14
|
+
import type { Reading } from '../schema/reading';
|
|
15
|
+
export interface BlockMenuModel {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
anchor: () => {
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
};
|
|
22
|
+
items: MenuEntry[];
|
|
23
|
+
label: string;
|
|
24
|
+
pick: (id: string) => void;
|
|
25
|
+
}
|
|
26
|
+
export interface RootMenusDeps {
|
|
27
|
+
/** Getters, never values: the root binds after construction and the mode moves. */
|
|
28
|
+
get editorEl(): HTMLElement | undefined;
|
|
29
|
+
get mode(): PresentationMode;
|
|
30
|
+
getDoc: DocumentGetter;
|
|
31
|
+
isHostChrome(node: Node | null): boolean;
|
|
32
|
+
blockEdit: Pick<BlockEditActions, 'deleteBlock'>;
|
|
33
|
+
/** Rewrite top-level block `index` as one undo entry, apart from any typing before it. */
|
|
34
|
+
replaceRaw(index: number, raw: string): Promise<void>;
|
|
35
|
+
/** Where a click on empty space puts the caret, so a right-click on prose acts at the
|
|
36
|
+
* pointer. */
|
|
37
|
+
placeCaretAtPoint(x: number, y: number): boolean;
|
|
38
|
+
/** The public insert entry point; a flyout row inserts `below` the block the caret is in. */
|
|
39
|
+
insertMarkdown(md: string, options?: InsertMarkdownOptions): Promise<boolean>;
|
|
40
|
+
/** The insert entries this editor lists, read fresh per menu. */
|
|
41
|
+
insertCatalogue(): readonly InsertEntry[];
|
|
42
|
+
/** The plugins this editor lists, whose block actions and paste transforms the menu offers. */
|
|
43
|
+
activation: PluginActivation;
|
|
44
|
+
/** The editor's reading, which tells a paragraph of pictures from prose. */
|
|
45
|
+
reading: Reading;
|
|
46
|
+
setMenu(menu: BlockMenuModel | null): void;
|
|
47
|
+
}
|
|
48
|
+
export interface RootMenus {
|
|
49
|
+
onRootContextMenu(event: MouseEvent): void;
|
|
50
|
+
}
|
|
51
|
+
export declare function createRootMenus(deps: RootMenusDeps): RootMenus;
|