@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,44 +1,31 @@
|
|
|
1
|
-
/** Cross-block keyboard extension and collapse
|
|
1
|
+
/** Cross-block keyboard extension and collapse: `SelectionState` writes plus the native caret. */
|
|
2
2
|
import type { SelectionState } from './selection-state.svelte';
|
|
3
|
+
import type { SelectedWidgetHandle, SelectedWidgetRange, SelectionPoint } from './primitives';
|
|
3
4
|
import type { Document } from '../core/nodes';
|
|
4
|
-
import type {
|
|
5
|
+
import type { GrammarView } from '../schema/block-openers';
|
|
6
|
+
import type { CaretLanding } from './caret-landing';
|
|
5
7
|
import type { BlockElLookup } from '../editor-keys';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
*
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
*
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
* paragraph is selectable in one step.
|
|
24
|
-
*/
|
|
25
|
-
export declare function extendFocusToNextBlock(selection: SelectionState, doc: Document, currentBlockEl: HTMLElement, currentBlockPath: number[], axis?: 'horizontal' | 'vertical', getBlockElByPath?: BlockElLookup): boolean;
|
|
26
|
-
/**
|
|
27
|
-
* Extend focus to the previous leaf (Shift+ArrowUp / Shift+ArrowLeft). `side` = 'end' for
|
|
28
|
-
* ArrowLeft (cross the boundary by one char), 'start' for ArrowUp (select the whole previous
|
|
29
|
-
* line, matching native). The vertical path skips vertically-transparent leaves.
|
|
30
|
-
*/
|
|
31
|
-
export declare function extendFocusToPreviousBlock(selection: SelectionState, doc: Document, currentBlockEl: HTMLElement, currentBlockPath: number[], side?: 'start' | 'end', getBlockElByPath?: BlockElLookup): boolean;
|
|
32
|
-
/**
|
|
33
|
-
* Extend focus to the document edge (Mod+Shift+Home / Mod+Shift+End). A transparent edge
|
|
34
|
-
* leaf is bypassed for the nearest text-bearing one, matching the cross-block extension path.
|
|
35
|
-
*/
|
|
36
|
-
export declare function extendFocusToDocEdge(selection: SelectionState, doc: Document, currentBlockEl: HTMLElement, currentBlockPath: number[], to: 'start' | 'end', getBlockElByPath?: BlockElLookup): boolean;
|
|
37
|
-
/** Select the entire document as a cross-block range (second Ctrl+A press). */
|
|
8
|
+
import type { ScrollOwner } from '../cursor/scroll-owner';
|
|
9
|
+
/** Collapses a cross-block range to its start or end and puts the caret back there as a stored
|
|
10
|
+
* byte, brought into view, mounting a windowed-out target and never opening a closed body. */
|
|
11
|
+
export declare function collapseCrossBlock(selection: SelectionState, to: 'start' | 'end', doc: Document, restore: CaretLanding['restore']): Promise<void>;
|
|
12
|
+
/** Scrolls the focus block into view if mounted, without mounting it: a document-edge extend
|
|
13
|
+
* mounts its endpoint first, and one Shift+Arrow step lands beside the mounted range. */
|
|
14
|
+
export declare function scrollFocusBlockIntoView(selection: SelectionState, scroll: Pick<ScrollOwner, 'place'>): void;
|
|
15
|
+
/** Extends focus to the next leaf a caret can reach. The vertical axis skips leaves the caret
|
|
16
|
+
* passes over (an image-only paragraph); the horizontal stops on each, so it stays selectable. */
|
|
17
|
+
export declare function extendFocusToNextBlock(selection: SelectionState, doc: Document, grammar: GrammarView, currentBlockEl: HTMLElement, currentBlockPath: number[], axis?: 'horizontal' | 'vertical', getBlockElByPath?: BlockElLookup): boolean;
|
|
18
|
+
/** Extends focus to the previous leaf: `'end'` crosses the boundary by one character, `'start'`
|
|
19
|
+
* takes the whole previous line as native ArrowUp does, skipping leaves the caret passes over. */
|
|
20
|
+
export declare function extendFocusToPreviousBlock(selection: SelectionState, doc: Document, grammar: GrammarView, currentBlockEl: HTMLElement, currentBlockPath: number[], side?: 'start' | 'end', getBlockElByPath?: BlockElLookup): boolean;
|
|
21
|
+
/** Extends focus to the document edge; a transparent edge leaf is bypassed for the nearest
|
|
22
|
+
* text-bearing one, as the one-step extension does. */
|
|
23
|
+
export declare function extendFocusToDocEdge(selection: SelectionState, doc: Document, grammar: GrammarView, currentBlockEl: HTMLElement, currentBlockPath: number[], to: 'start' | 'end', getBlockElByPath?: BlockElLookup): boolean;
|
|
24
|
+
/** Selects the entire document as a cross-block range (the second Ctrl+A). */
|
|
38
25
|
export declare function selectWholeDocument(selection: SelectionState, doc: Document, getBlockElByPath?: (path: number[]) => HTMLElement | null): boolean;
|
|
39
|
-
/**
|
|
40
|
-
*
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
*/
|
|
44
|
-
export declare function
|
|
26
|
+
/** Shift+click on a block: extends the range, grows one from an image selected whole, or enters
|
|
27
|
+
* cross-block mode from the last caret. False for a same-block click, left to the browser. */
|
|
28
|
+
export declare function handleShiftClick(selection: SelectionState, clickedBlockEl: HTMLElement, clickedBlockPath: number[], clickedX: number, clickedY: number, previouslyFocusedBlockEl: HTMLElement | null, previouslyFocusedBlockPath: number[] | null, selectedWidget: SelectedWidgetHandle): boolean;
|
|
29
|
+
/** The edge of a selected widget a shift-click grows from: the one away from the click, so the
|
|
30
|
+
* range covers the widget and everything up to the click. */
|
|
31
|
+
export declare function widgetShiftAnchor(widget: SelectedWidgetRange, press: SelectionPoint): SelectionPoint;
|
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
/** Cross-block keyboard extension and collapse
|
|
1
|
+
/** Cross-block keyboard extension and collapse: `SelectionState` writes plus the native caret. */
|
|
2
2
|
import { isVerticallyTransparentNode } from '../core/inline/transparency';
|
|
3
|
-
import { readNativeCaretInBlock, applyCollapsedCaret,
|
|
3
|
+
import { readNativeCaretInBlock, applyCollapsedCaret, applySingleBlockRange, clearNativeSelection } from './native-bridge';
|
|
4
4
|
import { offsetFromViewportPoint } from '../cursor/point-offset';
|
|
5
|
-
import {
|
|
5
|
+
import { firstPath, lastPath, firstCaretLeaf, lastCaretLeaf, nextCaretPath, previousCaretPath, findCellPathForElement } from './path-lookup';
|
|
6
6
|
import { nodeAt } from '../tree-operations/node-primitives';
|
|
7
|
-
import { comparePaths,
|
|
7
|
+
import { comparePaths, pathsEqual } from './path-math';
|
|
8
8
|
import { displayLength } from '../core/lines';
|
|
9
9
|
// ── Enter / Collapse / Scroll ──────────────────────────────────────────────
|
|
10
|
-
/**
|
|
11
|
-
*
|
|
12
|
-
* native caret as both anchor and focus; the caller immediately extendFocus()es to the target.
|
|
13
|
-
*/
|
|
10
|
+
/** Enters cross-block mode on a Shift+Arrow leaving a block, with the native caret as both
|
|
11
|
+
* anchor and focus; the caller extends the focus right after. */
|
|
14
12
|
function enterCrossBlockFromKeyboard(selection, currentBlockEl, currentBlockPath) {
|
|
15
13
|
const anchorPoint = readNativeCaretInBlock(currentBlockEl, currentBlockPath);
|
|
16
14
|
if (!anchorPoint)
|
|
@@ -19,52 +17,37 @@ function enterCrossBlockFromKeyboard(selection, currentBlockEl, currentBlockPath
|
|
|
19
17
|
path: anchorPoint.path.slice(),
|
|
20
18
|
offset: anchorPoint.offset
|
|
21
19
|
});
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
// no text position gets no caret, which is why components/editor-root-clipboard.ts exists.
|
|
20
|
+
// A collapsed caret stays in the focus block, or Chromium sends clipboard events to <body>;
|
|
21
|
+
// an endpoint with no text position gets none, and `editor-root-clipboard.ts` covers it.
|
|
25
22
|
applyCollapsedCaret(currentBlockEl, anchorPoint);
|
|
26
23
|
return true;
|
|
27
24
|
}
|
|
28
|
-
/**
|
|
29
|
-
*
|
|
30
|
-
|
|
31
|
-
* offset, so the caret lands at the cell's edge via the cell ref.
|
|
32
|
-
*/
|
|
33
|
-
export async function collapseCrossBlock(selection, to, doc, getBlockElByPath, revealPath) {
|
|
25
|
+
/** Collapses a cross-block range to its start or end and puts the caret back there as a stored
|
|
26
|
+
* byte, brought into view, mounting a windowed-out target and never opening a closed body. */
|
|
27
|
+
export async function collapseCrossBlock(selection, to, doc, restore) {
|
|
34
28
|
const target = to === 'start' ? selection.start : selection.end;
|
|
35
29
|
if (!target)
|
|
36
30
|
return;
|
|
37
31
|
selection.collapse();
|
|
38
32
|
clearNativeSelection();
|
|
39
|
-
//
|
|
40
|
-
//
|
|
41
|
-
// ceremony, and the byte typed at the arrival would join the construct the cell opens with
|
|
42
|
-
// rather than land in front of it. Only the END side overrides the landing's own offset.
|
|
33
|
+
// A cell target takes the text-leaf caret path: the cell's own `focus` skips the collapse
|
|
34
|
+
// steps, and a byte typed there would join the construct the cell opens with.
|
|
43
35
|
const landing = selection.cellLandingFor(target);
|
|
44
36
|
const point = to === 'end' && !pathsEqual(landing.path, target.path)
|
|
45
37
|
? { path: landing.path, offset: leafOffsetEnd(doc, landing.path) }
|
|
46
38
|
: landing;
|
|
47
|
-
|
|
48
|
-
await revealPath(landing.path);
|
|
49
|
-
focusCollapsedCaret(getBlockElByPath, point);
|
|
39
|
+
await restore({ anchor: point, focus: point }, { reveal: 'into-view' });
|
|
50
40
|
}
|
|
51
|
-
/**
|
|
52
|
-
*
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if (!selection.focus)
|
|
58
|
-
return;
|
|
59
|
-
const blockEl = getBlockElByPath(selection.focus.path);
|
|
60
|
-
blockEl?.scrollIntoView({ block: 'nearest', inline: 'nearest' });
|
|
41
|
+
/** Scrolls the focus block into view if mounted, without mounting it: a document-edge extend
|
|
42
|
+
* mounts its endpoint first, and one Shift+Arrow step lands beside the mounted range. */
|
|
43
|
+
export function scrollFocusBlockIntoView(selection, scroll) {
|
|
44
|
+
if (selection.focus) {
|
|
45
|
+
void scroll.place(selection.focus.path, { block: 'nearest', hold: false }).scroll();
|
|
46
|
+
}
|
|
61
47
|
}
|
|
62
48
|
// ── Keyboard Extension ─────────────────────────────────────────────────────
|
|
63
|
-
/**
|
|
64
|
-
*
|
|
65
|
-
* when the seam collapses (focus contracted back onto the anchor's prose leaf). Keyboard entry
|
|
66
|
-
* parks only a collapsed caret, so the range must be re-established here to stay visible.
|
|
67
|
-
*/
|
|
49
|
+
/** Moves the cross-block focus to `target`, or re-creates the range natively when the focus is
|
|
50
|
+
* back on the anchor's block, since keyboard entry left only a collapsed caret there. */
|
|
68
51
|
function extendFocusOrRestore(selection, target, offset, getBlockElByPath) {
|
|
69
52
|
const anchor = selection.anchor;
|
|
70
53
|
selection.extendFocus({ path: target, offset });
|
|
@@ -76,17 +59,12 @@ function extendFocusOrRestore(selection, target, offset, getBlockElByPath) {
|
|
|
76
59
|
blockEl.focus();
|
|
77
60
|
applySingleBlockRange(blockEl, Math.min(anchor.offset, offset), Math.max(anchor.offset, offset));
|
|
78
61
|
}
|
|
79
|
-
/**
|
|
80
|
-
*
|
|
81
|
-
|
|
82
|
-
* 'vertical' skips vertically-transparent leaves — a range covers one either way, so unlike a
|
|
83
|
-
* collapsed caret it needs no object stop; 'horizontal' lands unconditionally so an image-only
|
|
84
|
-
* paragraph is selectable in one step.
|
|
85
|
-
*/
|
|
86
|
-
export function extendFocusToNextBlock(selection, doc, currentBlockEl, currentBlockPath, axis = 'horizontal', getBlockElByPath) {
|
|
62
|
+
/** Extends focus to the next leaf a caret can reach. The vertical axis skips leaves the caret
|
|
63
|
+
* passes over (an image-only paragraph); the horizontal stops on each, so it stays selectable. */
|
|
64
|
+
export function extendFocusToNextBlock(selection, doc, grammar, currentBlockEl, currentBlockPath, axis = 'horizontal', getBlockElByPath) {
|
|
87
65
|
const leafTarget = axis === 'vertical'
|
|
88
|
-
? firstNonTransparentLeafAfter(doc, currentBlockPath)
|
|
89
|
-
:
|
|
66
|
+
? firstNonTransparentLeafAfter(doc, grammar, currentBlockPath)
|
|
67
|
+
: nextCaretPath(doc, currentBlockPath);
|
|
90
68
|
if (!leafTarget)
|
|
91
69
|
return false;
|
|
92
70
|
if (!selection.isCrossBlock) {
|
|
@@ -96,15 +74,12 @@ export function extendFocusToNextBlock(selection, doc, currentBlockEl, currentBl
|
|
|
96
74
|
extendFocusOrRestore(selection, leafTarget, 0, getBlockElByPath);
|
|
97
75
|
return true;
|
|
98
76
|
}
|
|
99
|
-
/**
|
|
100
|
-
*
|
|
101
|
-
|
|
102
|
-
* line, matching native). The vertical path skips vertically-transparent leaves.
|
|
103
|
-
*/
|
|
104
|
-
export function extendFocusToPreviousBlock(selection, doc, currentBlockEl, currentBlockPath, side = 'end', getBlockElByPath) {
|
|
77
|
+
/** Extends focus to the previous leaf: `'end'` crosses the boundary by one character, `'start'`
|
|
78
|
+
* takes the whole previous line as native ArrowUp does, skipping leaves the caret passes over. */
|
|
79
|
+
export function extendFocusToPreviousBlock(selection, doc, grammar, currentBlockEl, currentBlockPath, side = 'end', getBlockElByPath) {
|
|
105
80
|
const leafTarget = side === 'start'
|
|
106
|
-
? lastNonTransparentLeafBefore(doc, currentBlockPath)
|
|
107
|
-
:
|
|
81
|
+
? lastNonTransparentLeafBefore(doc, grammar, currentBlockPath)
|
|
82
|
+
: previousCaretPath(doc, currentBlockPath);
|
|
108
83
|
if (!leafTarget)
|
|
109
84
|
return false;
|
|
110
85
|
if (!selection.isCrossBlock) {
|
|
@@ -115,18 +90,16 @@ export function extendFocusToPreviousBlock(selection, doc, currentBlockEl, curre
|
|
|
115
90
|
extendFocusOrRestore(selection, leafTarget, offset, getBlockElByPath);
|
|
116
91
|
return true;
|
|
117
92
|
}
|
|
118
|
-
/**
|
|
119
|
-
*
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
export function extendFocusToDocEdge(selection, doc, currentBlockEl, currentBlockPath, to, getBlockElByPath) {
|
|
123
|
-
const edge = to === 'start' ? firstPath(doc) : lastPath(doc);
|
|
93
|
+
/** Extends focus to the document edge; a transparent edge leaf is bypassed for the nearest
|
|
94
|
+
* text-bearing one, as the one-step extension does. */
|
|
95
|
+
export function extendFocusToDocEdge(selection, doc, grammar, currentBlockEl, currentBlockPath, to, getBlockElByPath) {
|
|
96
|
+
const edge = to === 'start' ? firstCaretLeaf(doc, [0]) : lastCaretLeaf(doc, [doc.children.length - 1]);
|
|
124
97
|
if (!edge)
|
|
125
98
|
return false;
|
|
126
|
-
const target = isTransparent(doc, edge)
|
|
99
|
+
const target = isTransparent(doc, grammar, edge)
|
|
127
100
|
? to === 'start'
|
|
128
|
-
? firstNonTransparentLeafFrom(doc, edge)
|
|
129
|
-
: lastNonTransparentLeafFrom(doc, edge)
|
|
101
|
+
? firstNonTransparentLeafFrom(doc, grammar, edge)
|
|
102
|
+
: lastNonTransparentLeafFrom(doc, grammar, edge)
|
|
130
103
|
: edge;
|
|
131
104
|
if (!target)
|
|
132
105
|
return false;
|
|
@@ -138,16 +111,18 @@ export function extendFocusToDocEdge(selection, doc, currentBlockEl, currentBloc
|
|
|
138
111
|
extendFocusOrRestore(selection, target, offset, getBlockElByPath);
|
|
139
112
|
return true;
|
|
140
113
|
}
|
|
141
|
-
/**
|
|
114
|
+
/** Selects the entire document as a cross-block range (the second Ctrl+A). */
|
|
142
115
|
export function selectWholeDocument(selection, doc, getBlockElByPath) {
|
|
116
|
+
// Not the caret-reachable order: the range has to cover a closed container's hidden body, so
|
|
117
|
+
// that a delete or a copy of the whole document takes it too.
|
|
143
118
|
const first = firstPath(doc);
|
|
144
119
|
const last = lastPath(doc);
|
|
145
120
|
if (!first || !last)
|
|
146
121
|
return false;
|
|
147
122
|
const lastOffset = leafOffsetEnd(doc, last);
|
|
148
123
|
selection.enterCrossBlock({ path: first, offset: 0 }, { path: last, offset: lastOffset });
|
|
149
|
-
// A
|
|
150
|
-
//
|
|
124
|
+
// A one-block document has no cross-block range to paint and `enterCrossBlock` refuses it,
|
|
125
|
+
// so select natively; otherwise a second Ctrl+A would deselect.
|
|
151
126
|
if (!selection.isCustomRendered) {
|
|
152
127
|
selection.collapse();
|
|
153
128
|
const blockEl = getBlockElByPath?.(first);
|
|
@@ -157,8 +132,8 @@ export function selectWholeDocument(selection, doc, getBlockElByPath) {
|
|
|
157
132
|
}
|
|
158
133
|
return true;
|
|
159
134
|
}
|
|
160
|
-
//
|
|
161
|
-
// table block, whose wrapper holds no caret, so
|
|
135
|
+
// A collapsed caret for paste dispatch, as in `enterCrossBlockFromKeyboard`. A table focus
|
|
136
|
+
// names the table block, whose wrapper holds no caret, so the caret goes in the cell.
|
|
162
137
|
const focus = selection.focus;
|
|
163
138
|
const parkPoint = focus && selection.cellLandingFor(focus);
|
|
164
139
|
const focusBlockEl = parkPoint ? getBlockElByPath?.(parkPoint.path) : null;
|
|
@@ -169,12 +144,14 @@ export function selectWholeDocument(selection, doc, getBlockElByPath) {
|
|
|
169
144
|
return true;
|
|
170
145
|
}
|
|
171
146
|
// ── Shift+Click ────────────────────────────────────────────────────────────
|
|
172
|
-
/**
|
|
173
|
-
*
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
147
|
+
/** Shift+click on a block: extends the range, grows one from an image selected whole, or enters
|
|
148
|
+
* cross-block mode from the last caret. False for a same-block click, left to the browser. */
|
|
149
|
+
export function handleShiftClick(selection, clickedBlockEl, clickedBlockPath, clickedX, clickedY, previouslyFocusedBlockEl, previouslyFocusedBlockPath, selectedWidget) {
|
|
150
|
+
// While an image is selected whole there is no caret to grow from, so the image is the
|
|
151
|
+
// anchor; the click ends that selection either way, as a range and it never coexist.
|
|
152
|
+
const widget = selectedWidget.range();
|
|
153
|
+
if (widget)
|
|
154
|
+
selectedWidget.clear();
|
|
178
155
|
const clickOffset = offsetFromViewportPoint(clickedBlockEl, clickedX, clickedY);
|
|
179
156
|
if (clickOffset === null)
|
|
180
157
|
return false;
|
|
@@ -183,71 +160,71 @@ export function handleShiftClick(selection, clickedBlockEl, clickedBlockPath, cl
|
|
|
183
160
|
selection.extendFocus(focusPoint);
|
|
184
161
|
return true;
|
|
185
162
|
}
|
|
163
|
+
if (widget) {
|
|
164
|
+
const anchor = widgetShiftAnchor(widget, focusPoint);
|
|
165
|
+
if (comparePaths(anchor.path, focusPoint.path) === 0) {
|
|
166
|
+
applySingleBlockRange(clickedBlockEl, anchor.offset, focusPoint.offset);
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
selection.enterCrossBlock(anchor, focusPoint);
|
|
170
|
+
applyCollapsedCaret(clickedBlockEl, focusPoint);
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
186
173
|
if (!previouslyFocusedBlockEl || !previouslyFocusedBlockPath)
|
|
187
174
|
return false;
|
|
188
|
-
//
|
|
189
|
-
//
|
|
190
|
-
// tell that from a cell index, so deepen to the cell here and let the seam convert.
|
|
175
|
+
// Nothing below a table carries a path, so a caret in a cell would read as the table's path
|
|
176
|
+
// with a character offset, which the endpoint snap can't tell from a cell index.
|
|
191
177
|
const anchorPath = findCellPathForElement(previouslyFocusedBlockEl) ?? previouslyFocusedBlockPath;
|
|
192
178
|
const anchor = readNativeCaretInBlock(previouslyFocusedBlockEl, anchorPath);
|
|
193
179
|
if (!anchor)
|
|
194
180
|
return false;
|
|
195
|
-
// Same
|
|
181
|
+
// Same block: the browser's own shift-click already made the range.
|
|
196
182
|
if (comparePaths(anchor.path, focusPoint.path) === 0)
|
|
197
183
|
return false;
|
|
198
184
|
selection.enterCrossBlock(anchor, focusPoint);
|
|
199
|
-
//
|
|
185
|
+
// A collapsed caret for paste dispatch (see `enterCrossBlockFromKeyboard`); the click's
|
|
186
|
+
// default is not relied on.
|
|
200
187
|
applyCollapsedCaret(clickedBlockEl, focusPoint);
|
|
201
188
|
return true;
|
|
202
189
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
function
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
}
|
|
209
|
-
/** Last leaf reachable from `fromPath` going backward (descend or step). */
|
|
210
|
-
function lastLeafBefore(doc, fromPath) {
|
|
211
|
-
// previousPath is doc-order (ancestor-before-descendant), so a first-child leaf's "previous"
|
|
212
|
-
// is its own container, and descending into that ancestor's LAST leaf would move the walk
|
|
213
|
-
// forward. Skip ancestors until a genuinely preceding subtree is reached.
|
|
214
|
-
let prev = previousPath(doc, fromPath);
|
|
215
|
-
while (prev && isStrictAncestorOf(prev, fromPath))
|
|
216
|
-
prev = previousPath(doc, prev);
|
|
217
|
-
return prev ? lastLeafAtOrBefore(doc, prev) : null;
|
|
190
|
+
/** The edge of a selected widget a shift-click grows from: the one away from the click, so the
|
|
191
|
+
* range covers the widget and everything up to the click. */
|
|
192
|
+
export function widgetShiftAnchor(widget, press) {
|
|
193
|
+
const order = comparePaths(press.path, widget.path);
|
|
194
|
+
const pressAfter = order > 0 || (order === 0 && press.offset > widget.start);
|
|
195
|
+
return { path: widget.path.slice(), offset: pressAfter ? widget.start : widget.end };
|
|
218
196
|
}
|
|
219
|
-
|
|
197
|
+
// ── Internal ───────────────────────────────────────────────────────────────
|
|
198
|
+
function isTransparent(doc, grammar, path) {
|
|
220
199
|
const node = nodeAt(doc, path);
|
|
221
200
|
// nodeAt returns the Document for an empty path; narrow it out (Document has no `raw`).
|
|
222
|
-
return node !== null && 'raw' in node && isVerticallyTransparentNode(node);
|
|
201
|
+
return node !== null && 'raw' in node && isVerticallyTransparentNode(node, grammar);
|
|
223
202
|
}
|
|
224
|
-
function firstNonTransparentLeafAfter(doc, fromPath) {
|
|
225
|
-
let leaf =
|
|
226
|
-
while (leaf && isTransparent(doc, leaf)) {
|
|
227
|
-
leaf =
|
|
203
|
+
function firstNonTransparentLeafAfter(doc, grammar, fromPath) {
|
|
204
|
+
let leaf = nextCaretPath(doc, fromPath);
|
|
205
|
+
while (leaf && isTransparent(doc, grammar, leaf)) {
|
|
206
|
+
leaf = nextCaretPath(doc, leaf);
|
|
228
207
|
}
|
|
229
208
|
return leaf;
|
|
230
209
|
}
|
|
231
|
-
function lastNonTransparentLeafBefore(doc, fromPath) {
|
|
232
|
-
let leaf =
|
|
233
|
-
while (leaf && isTransparent(doc, leaf)) {
|
|
234
|
-
leaf =
|
|
210
|
+
function lastNonTransparentLeafBefore(doc, grammar, fromPath) {
|
|
211
|
+
let leaf = previousCaretPath(doc, fromPath);
|
|
212
|
+
while (leaf && isTransparent(doc, grammar, leaf)) {
|
|
213
|
+
leaf = previousCaretPath(doc, leaf);
|
|
235
214
|
}
|
|
236
215
|
return leaf;
|
|
237
216
|
}
|
|
238
|
-
/**
|
|
239
|
-
*
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
function firstNonTransparentLeafFrom(doc, startPath) {
|
|
243
|
-
if (!isTransparent(doc, startPath))
|
|
217
|
+
/** Starts at the edge leaf itself and steps inward, unlike `nextCaretPath` and
|
|
218
|
+
* `previousCaretPath`, which step away from their start. */
|
|
219
|
+
function firstNonTransparentLeafFrom(doc, grammar, startPath) {
|
|
220
|
+
if (!isTransparent(doc, grammar, startPath))
|
|
244
221
|
return startPath;
|
|
245
|
-
return firstNonTransparentLeafAfter(doc, startPath);
|
|
222
|
+
return firstNonTransparentLeafAfter(doc, grammar, startPath);
|
|
246
223
|
}
|
|
247
|
-
function lastNonTransparentLeafFrom(doc, startPath) {
|
|
248
|
-
if (!isTransparent(doc, startPath))
|
|
224
|
+
function lastNonTransparentLeafFrom(doc, grammar, startPath) {
|
|
225
|
+
if (!isTransparent(doc, grammar, startPath))
|
|
249
226
|
return startPath;
|
|
250
|
-
return lastNonTransparentLeafBefore(doc, startPath);
|
|
227
|
+
return lastNonTransparentLeafBefore(doc, grammar, startPath);
|
|
251
228
|
}
|
|
252
229
|
function leafOffsetEnd(doc, path) {
|
|
253
230
|
const node = nodeAt(doc, path);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* the second
|
|
5
|
-
*
|
|
2
|
+
* Double and triple click: the second click of a run selects the word under it, the third the
|
|
3
|
+
* whole block's text, and a drag from either grows by that unit. The editor owns the gesture
|
|
4
|
+
* from the second click so the browser paints nothing of its own: its word rule varies by
|
|
5
|
+
* platform, it walks into non-editable widgets, and a marker here never joins a word.
|
|
6
6
|
*/
|
|
7
7
|
import type { UserScrollport } from '../cursor/scroll-ancestors';
|
|
8
8
|
import type { BlockElLookup } from '../editor-keys';
|
|
@@ -12,16 +12,13 @@ export interface Span {
|
|
|
12
12
|
start: number;
|
|
13
13
|
end: number;
|
|
14
14
|
}
|
|
15
|
-
/**
|
|
16
|
-
*
|
|
17
|
-
* the segment starting there (whitespace or punctuation, as the engine would take). Null on
|
|
18
|
-
* empty text, or on a platform with no segmenter.
|
|
19
|
-
*/
|
|
15
|
+
/** The segment at `offset`: the word ending there if there is one, else the segment starting
|
|
16
|
+
* there, as the browser takes it. Null on a platform with no segmenter. */
|
|
20
17
|
export declare function wordSpanAt(text: string, offset: number): Span | null;
|
|
21
18
|
/** The raw span `granularity` takes around a raw offset in `surface`; null where the word rule
|
|
22
19
|
* has nothing to read. */
|
|
23
20
|
export declare function spanAround(surface: HTMLElement, granularity: ClickGranularity, rawOffset: number): Span | null;
|
|
24
|
-
/** The
|
|
21
|
+
/** The unit a click count selects; a run stays at the block unit past three clicks. */
|
|
25
22
|
export declare function granularityForClickCount(clickCount: number): ClickGranularity | null;
|
|
26
23
|
export interface MultiClickDeps {
|
|
27
24
|
editorRoot: HTMLElement;
|
|
@@ -29,14 +26,12 @@ export interface MultiClickDeps {
|
|
|
29
26
|
getBlockElByPath: BlockElLookup;
|
|
30
27
|
getScrollContainer(): UserScrollport;
|
|
31
28
|
lifetimeSignal?: AbortSignal;
|
|
32
|
-
/** A
|
|
33
|
-
* nearest block, as a single click there does; null
|
|
29
|
+
/** A click outside every editable element (the margin, a container's own box) names the
|
|
30
|
+
* nearest block, as a single click there does; null when the click is on a button or handle. */
|
|
34
31
|
marginBlockAt(target: EventTarget | null, clientX: number, clientY: number): number[] | null;
|
|
32
|
+
/** Whether the click landed on an inline widget the editor already holds selected whole. */
|
|
33
|
+
pressesSelectedWidget(target: EventTarget | null): boolean;
|
|
35
34
|
}
|
|
36
|
-
/**
|
|
37
|
-
*
|
|
38
|
-
* and the drag rides the pointerdown of the same press, so both are heard. The mousedown is
|
|
39
|
-
* cancelled, never the pointerdown (that would silence the click), and so is the mouseup: the
|
|
40
|
-
* browser's release seats a caret at a press that landed off a glyph, over the range just painted.
|
|
41
|
-
*/
|
|
35
|
+
/** Root listeners for the gesture. The mousedown and mouseup are cancelled so the browser paints
|
|
36
|
+
* no caret over the range, but never the pointerdown, which would silence the click. */
|
|
42
37
|
export declare function installMultiClickSelect(deps: MultiClickDeps): () => void;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* the second
|
|
5
|
-
*
|
|
2
|
+
* Double and triple click: the second click of a run selects the word under it, the third the
|
|
3
|
+
* whole block's text, and a drag from either grows by that unit. The editor owns the gesture
|
|
4
|
+
* from the second click so the browser paints nothing of its own: its word rule varies by
|
|
5
|
+
* platform, it walks into non-editable widgets, and a marker here never joins a word.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
8
|
-
import { asDomTextOffset, asRawOffset, toClampedRawOffset, toDomTextOffset } from '../cursor/coordinate-spaces';
|
|
7
|
+
import { asDomTextOffset } from '../cursor/coordinate-spaces';
|
|
9
8
|
import { caretOffsetAtPoint } from '../cursor/point-offset';
|
|
10
|
-
import { containerDomTextLength, maskedWalkText } from '../cursor/widget-offset';
|
|
9
|
+
import { containerDomTextLength, maskedWalkText, rawOfWalkOffset, walkOffsetOfRaw } from '../cursor/widget-offset';
|
|
11
10
|
import { isWholeBlockInputProxy } from '../editor-actions/whole-block-focus-surface';
|
|
12
11
|
import { installDragListener } from './drag-pointer';
|
|
13
12
|
import { applySingleBlockRange, applySurfaceContentRange } from './native-bridge';
|
|
14
13
|
import { blockNearPoint } from './nearest-block';
|
|
14
|
+
import { readBlockPath } from './path-lookup';
|
|
15
15
|
// ── The word rule ────────────────────────────────────────────────────────────
|
|
16
16
|
let segmenter;
|
|
17
17
|
function wordSegmenter() {
|
|
@@ -23,11 +23,8 @@ function wordSegmenter() {
|
|
|
23
23
|
}
|
|
24
24
|
return segmenter;
|
|
25
25
|
}
|
|
26
|
-
/**
|
|
27
|
-
*
|
|
28
|
-
* the segment starting there (whitespace or punctuation, as the engine would take). Null on
|
|
29
|
-
* empty text, or on a platform with no segmenter.
|
|
30
|
-
*/
|
|
26
|
+
/** The segment at `offset`: the word ending there if there is one, else the segment starting
|
|
27
|
+
* there, as the browser takes it. Null on a platform with no segmenter. */
|
|
31
28
|
export function wordSpanAt(text, offset) {
|
|
32
29
|
const seg = wordSegmenter();
|
|
33
30
|
if (!seg || text.length === 0)
|
|
@@ -49,31 +46,25 @@ function spanOf(segment) {
|
|
|
49
46
|
/** The raw span `granularity` takes around a raw offset in `surface`; null where the word rule
|
|
50
47
|
* has nothing to read. */
|
|
51
48
|
export function spanAround(surface, granularity, rawOffset) {
|
|
52
|
-
const ambient = ambientLengthOf(surface);
|
|
53
49
|
if (granularity === 'block') {
|
|
54
|
-
return { start: 0, end:
|
|
50
|
+
return { start: 0, end: rawOfWalkOffset(surface, containerDomTextLength(surface)) };
|
|
55
51
|
}
|
|
56
|
-
const
|
|
57
|
-
const span = wordSpanAt(maskedWalkText(surface), walk);
|
|
52
|
+
const span = wordSpanAt(maskedWalkText(surface), walkOffsetOfRaw(surface, rawOffset));
|
|
58
53
|
if (!span)
|
|
59
54
|
return null;
|
|
60
55
|
return {
|
|
61
|
-
start:
|
|
62
|
-
end:
|
|
56
|
+
start: rawOfWalkOffset(surface, asDomTextOffset(span.start)),
|
|
57
|
+
end: rawOfWalkOffset(surface, asDomTextOffset(span.end))
|
|
63
58
|
};
|
|
64
59
|
}
|
|
65
|
-
/** The
|
|
60
|
+
/** The unit a click count selects; a run stays at the block unit past three clicks. */
|
|
66
61
|
export function granularityForClickCount(clickCount) {
|
|
67
62
|
if (clickCount === 2)
|
|
68
63
|
return 'word';
|
|
69
64
|
return clickCount >= 3 ? 'block' : null;
|
|
70
65
|
}
|
|
71
|
-
/**
|
|
72
|
-
*
|
|
73
|
-
* and the drag rides the pointerdown of the same press, so both are heard. The mousedown is
|
|
74
|
-
* cancelled, never the pointerdown (that would silence the click), and so is the mouseup: the
|
|
75
|
-
* browser's release seats a caret at a press that landed off a glyph, over the range just painted.
|
|
76
|
-
*/
|
|
66
|
+
/** Root listeners for the gesture. The mousedown and mouseup are cancelled so the browser paints
|
|
67
|
+
* no caret over the range, but never the pointerdown, which would silence the click. */
|
|
77
68
|
export function installMultiClickSelect(deps) {
|
|
78
69
|
let lastPointerDown = null;
|
|
79
70
|
let claimed = false;
|
|
@@ -89,7 +80,11 @@ export function installMultiClickSelect(deps) {
|
|
|
89
80
|
const granularity = granularityForClickCount(e.detail);
|
|
90
81
|
if (!granularity || e.button !== 0 || e.shiftKey || e.ctrlKey || e.metaKey || e.altKey)
|
|
91
82
|
return;
|
|
92
|
-
if (pressesInlineWidget(e.target))
|
|
83
|
+
if (granularity === 'word' && pressesInlineWidget(e.target))
|
|
84
|
+
return;
|
|
85
|
+
// A widget already selected whole took the run with its first click, so no later click of
|
|
86
|
+
// that run is the block's: claiming one would paint a range over an object selection.
|
|
87
|
+
if (deps.pressesSelectedWidget(e.target))
|
|
93
88
|
return;
|
|
94
89
|
const press = pressedSurface(deps, e);
|
|
95
90
|
if (!press)
|
|
@@ -120,10 +115,10 @@ export function installMultiClickSelect(deps) {
|
|
|
120
115
|
deps.editorRoot.removeEventListener('mouseup', onMouseUp);
|
|
121
116
|
};
|
|
122
117
|
}
|
|
123
|
-
/** The
|
|
124
|
-
* single click in the margin lands there. A block with no text
|
|
118
|
+
/** The editable element a click selects in: the one under it, else the nearest block's, the
|
|
119
|
+
* way a single click in the margin lands there. A block with no text has no word to select. */
|
|
125
120
|
function pressedSurface(deps, e) {
|
|
126
|
-
// Up through
|
|
121
|
+
// Up through a non-editable span inside the editable (a list's `- ` prefix) to the editable.
|
|
127
122
|
const own = surfaceOf(e.target);
|
|
128
123
|
if (own)
|
|
129
124
|
return isWholeBlockInputProxy(own) ? null : { surface: own, anchor: null };
|
|
@@ -131,7 +126,7 @@ function pressedSurface(deps, e) {
|
|
|
131
126
|
const block = path && deps.getBlockElByPath(path);
|
|
132
127
|
if (!block)
|
|
133
128
|
return null;
|
|
134
|
-
// A container's own box (a quote's gutter) selects in the leaf nearest the
|
|
129
|
+
// A container's own box (a quote's gutter) selects in the leaf nearest the click, the way a
|
|
135
130
|
// click beside a line lands in that line.
|
|
136
131
|
const surface = block.contentEditable === 'true' ? block : nearestSurfaceIn(block, e.clientY);
|
|
137
132
|
const surfacePath = surface && pathOfSurface(surface);
|
|
@@ -153,17 +148,16 @@ function nearestSurfaceIn(block, clientY) {
|
|
|
153
148
|
}
|
|
154
149
|
return best;
|
|
155
150
|
}
|
|
156
|
-
/** The path of the block
|
|
157
|
-
* way (a table's cell), whose drag is not a
|
|
151
|
+
/** The path of the block this editable element is the text of; null for one addressed some
|
|
152
|
+
* other way (a table's cell), whose drag is not a character drag. */
|
|
158
153
|
function pathOfSurface(surface) {
|
|
159
154
|
const host = surface.closest('[data-block-path]');
|
|
160
|
-
const
|
|
161
|
-
if (!
|
|
155
|
+
const path = readBlockPath(host);
|
|
156
|
+
if (!path || !host?.contains(surface))
|
|
162
157
|
return null;
|
|
163
|
-
const path = JSON.parse(raw);
|
|
164
158
|
return host.querySelector('[contenteditable="true"]') === surface ? path : null;
|
|
165
159
|
}
|
|
166
|
-
/**
|
|
160
|
+
/** Selects the unit's span at the click and returns it, in raw offsets. */
|
|
167
161
|
function selectAtPoint(surface, granularity, clientX, clientY) {
|
|
168
162
|
if (granularity === 'block') {
|
|
169
163
|
applySurfaceContentRange(surface);
|
|
@@ -190,8 +184,8 @@ function createGranularity(getBlockElByPath, surface, granularity, anchorSpan) {
|
|
|
190
184
|
}
|
|
191
185
|
};
|
|
192
186
|
}
|
|
193
|
-
/**
|
|
194
|
-
* its whole token), so the
|
|
187
|
+
/** The second click on an inline widget is that widget's own gesture (a footnote's double-click
|
|
188
|
+
* takes its whole token), so the word level does nothing there. */
|
|
195
189
|
function pressesInlineWidget(target) {
|
|
196
190
|
return target instanceof Element && target.closest('[data-inline-widget]') !== null;
|
|
197
191
|
}
|