@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,49 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* keystroke; `render-primary`
|
|
5
|
-
*
|
|
6
|
-
* `commitReveal`'s one `updateBlockContent`. Call synchronously during init. Contract:
|
|
7
|
-
* plugin-guide § The editable leaf.
|
|
2
|
+
* What a plugin's block component builds on: the caret, IME, undo and selection behaviour the
|
|
3
|
+
* built-in blocks have, in one factory, so a plugin never touches an editor context key. `plain`
|
|
4
|
+
* commits on every keystroke; `render-primary` shows its source and commits on blur. Call it
|
|
5
|
+
* synchronously during initialisation; the contract is plugin-guide § The editable leaf.
|
|
8
6
|
*/
|
|
9
7
|
import { getContext } from 'svelte';
|
|
10
8
|
import { createAttachmentKey } from 'svelte/attachments';
|
|
11
9
|
import { EDITOR_POLICIES_KEY, EDITOR_SERVICES_KEY } from '../../editor-keys';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
10
|
+
import { asRawOffset } from '../../cursor/coordinate-spaces';
|
|
11
|
+
import { createSurfaceBackend } from '../../cursor/surface-backend';
|
|
14
12
|
import { handleSharedKeydown } from '../../selection/shared-keydown';
|
|
15
|
-
import { createEditableSurface, createClipboardHandlers, consumePendingRestore, withKeydownVerdict } from './editable-surface';
|
|
13
|
+
import { editableSurfaceAttributes, createEditableSurface, createClipboardHandlers, consumePendingRestore, withKeydownVerdict } from './editable-surface';
|
|
16
14
|
import { wireSurfaceContexts } from './surface-wiring.svelte';
|
|
17
|
-
import {
|
|
15
|
+
import { anchorTrailingNewline, plainTextOf } from './plain-text-backend';
|
|
18
16
|
import { CONTENT_EMPTY_ATTR, chromeFreeText, clampToLandableRaw, holdsOnlyMarkerChrome } from '../../cursor/widget-offset';
|
|
19
17
|
import { parkFocusOnEditorRoot } from '../../selection/native-bridge';
|
|
20
18
|
import { assertInvariant } from '../../assert';
|
|
21
19
|
import { checkRenderedTextFidelity } from '../../invariants/render-fidelity';
|
|
22
|
-
import { resolveBinding } from '../../schema/commands';
|
|
23
|
-
import { eventToChord } from '../../schema/keybindings';
|
|
24
20
|
import { resetForPointerDown } from '../../selection/cross-block/pointer';
|
|
25
21
|
import { placeCaret } from '../../selection/caret-doors';
|
|
26
22
|
import { createSourceReveal } from '../../cursor/reveal-source';
|
|
27
23
|
import { traceRevealOpen, traceRevealFold } from '../../debug/interaction-trace';
|
|
28
|
-
import { trimTrailingLineEnding, trailingLineEnding } from '../../core/lines';
|
|
24
|
+
import { documentLineEnding, isBlankText, trimTrailingLineEnding, trailingLineEnding } from '../../core/lines';
|
|
29
25
|
import { tryGetBlockKindDescriptor } from '../../schema/block-kind-descriptor';
|
|
30
|
-
import {} from '../../schema/commands';
|
|
31
26
|
import {} from '../../schema/block-commands';
|
|
32
|
-
import {
|
|
33
|
-
import { reorderRunCommand } from '../../editor-actions/reorder-action';
|
|
27
|
+
import { componentPluginEditor } from '../../schema/block-component-registry';
|
|
34
28
|
import { createTextBatch } from '../../editor-actions/commit/text-batch';
|
|
35
|
-
/**
|
|
36
|
-
*
|
|
37
|
-
|
|
38
|
-
* Every field reads through `deps`' thunks at dispatch, so a node swap or hook rebind is
|
|
39
|
-
* observed live; `pluginEditor` resolves by the kind's recorded owner.
|
|
40
|
-
*/
|
|
41
|
-
export function buildLeafCommandContext(deps, blockEdit, pluginEditor) {
|
|
29
|
+
/** What a plugin block command runs against on a leaf, read through `deps` at dispatch so a
|
|
30
|
+
* node swap is seen; the leaf's counterpart of `buildContainerKindTarget`. */
|
|
31
|
+
export function buildLeafCommandContext(deps, blockEdit) {
|
|
42
32
|
return {
|
|
43
33
|
node: deps.getNode(),
|
|
44
34
|
updateMetadata: (patch) => void blockEdit.updateBlockMetadata(deps.getIndex(), patch),
|
|
45
|
-
hooks: deps.commandHooks?.()
|
|
46
|
-
editor: owningPluginEditor(pluginEditor, deps.getNode().kind)
|
|
35
|
+
hooks: deps.commandHooks?.()
|
|
47
36
|
};
|
|
48
37
|
}
|
|
49
38
|
export function createEditableLeaf(deps) {
|
|
@@ -55,25 +44,25 @@ export function createEditableLeaf(deps) {
|
|
|
55
44
|
// Plain mode's source is always the editable view.
|
|
56
45
|
const isRevealed = mode === 'render-primary' ? deps.isRevealed : () => true;
|
|
57
46
|
const wiring = wireSurfaceContexts();
|
|
58
|
-
const { blockEdit,
|
|
59
|
-
const {
|
|
60
|
-
const {
|
|
61
|
-
const
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
const getOptions = () =>
|
|
47
|
+
const { blockEdit, caretMemory, selection, getDoc, getBlockElByPath, getEditorRoot, events: editorEvents, reading, commands } = wiring.deps;
|
|
48
|
+
const { pluginEditor } = commands;
|
|
49
|
+
const { inlineMenuCombobox } = getContext(EDITOR_SERVICES_KEY);
|
|
50
|
+
const { theme: getTheme, onPasteImage } = getContext(EDITOR_POLICIES_KEY);
|
|
51
|
+
const getPresentationMode = reading.mode;
|
|
52
|
+
const getEditor = () => componentPluginEditor(pluginEditor, deps.getNode().kind);
|
|
53
|
+
const getOptions = () => getEditor()?.options;
|
|
65
54
|
const isReading = () => getPresentationMode() === 'reading';
|
|
66
55
|
let composing = false;
|
|
67
|
-
let preEditOffset = 0;
|
|
68
56
|
let pendingCursor = null;
|
|
69
57
|
/** The bytes the open reveal was measured against; null while folded. */
|
|
70
58
|
let revealedBase = null;
|
|
71
59
|
const sourceText = () => trimTrailingLineEnding(deps.getNode().raw);
|
|
72
|
-
const
|
|
60
|
+
const backend = createSurfaceBackend({ getEl: () => deps.getEl() });
|
|
61
|
+
// A leaf's text is its raw, so a computed caret lands exactly where the edit put it.
|
|
62
|
+
const setCaret = (offset) => backend.setRaw(asRawOffset(offset), { clamp: 'exact' });
|
|
73
63
|
const editableSurface = createEditableSurface({
|
|
74
64
|
...wiring.deps,
|
|
75
65
|
getEl: () => deps.getEl(),
|
|
76
|
-
getAmbientLength: () => 0,
|
|
77
66
|
// render-primary edits are ephemeral (one commit on blur); plain commits per keystroke.
|
|
78
67
|
isInputSuppressed: () => mode === 'render-primary',
|
|
79
68
|
backend,
|
|
@@ -83,33 +72,26 @@ export function createEditableLeaf(deps) {
|
|
|
83
72
|
setComposing: (value) => {
|
|
84
73
|
composing = value;
|
|
85
74
|
},
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
preEditOffset = offset;
|
|
89
|
-
},
|
|
90
|
-
// render-primary never restores a pending caret — focus has already left on
|
|
91
|
-
// commit, and a re-render must not yank it back.
|
|
75
|
+
// render-primary never restores a pending caret: focus has already left on
|
|
76
|
+
// commit, and a re-render must not pull it back.
|
|
92
77
|
setPendingCursor: (offset) => {
|
|
93
78
|
if (mode === 'plain')
|
|
94
79
|
pendingCursor = offset;
|
|
95
80
|
},
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
readText,
|
|
81
|
+
getFocusOffset: backend.getFocusOffset,
|
|
82
|
+
getTextLen: () => plainTextOf(deps.getEl()).length,
|
|
83
|
+
readText: () => plainTextOf(deps.getEl()),
|
|
100
84
|
commitInput: (text, preEdit, saved) => {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
85
|
+
if (mode !== 'plain')
|
|
86
|
+
return;
|
|
87
|
+
const write = blockEdit.updateBlockContent(deps.getIndex(), text + trailingLineEnding(deps.getNode().raw, documentLineEnding(getDoc())), 'authored', preEdit, saved);
|
|
88
|
+
return write.admitted ? write.caret : null;
|
|
89
|
+
},
|
|
90
|
+
handleBeforeInput: onBeforeInput
|
|
107
91
|
});
|
|
108
92
|
const surface = editableSurface.surface;
|
|
109
93
|
const crossBlock = editableSurface.crossBlock;
|
|
110
|
-
//
|
|
111
|
-
// `commitReveal`, never the kernel's Escape-cancel `commit()`, so only `reveal()` is
|
|
112
|
-
// driven here. Plain mode's swap thunks are inert.
|
|
94
|
+
// A leaf commits on blur through `commitReveal`, so only this primitive's `reveal()` is used.
|
|
113
95
|
const revealKernel = createSourceReveal({
|
|
114
96
|
get container() {
|
|
115
97
|
return deps.getEl();
|
|
@@ -123,10 +105,8 @@ export function createEditableLeaf(deps) {
|
|
|
123
105
|
get source() {
|
|
124
106
|
return sourceText();
|
|
125
107
|
},
|
|
126
|
-
getAmbientLength: () => 0,
|
|
127
108
|
isRevealed,
|
|
128
|
-
//
|
|
129
|
-
// already revealed, so it fires once per open.
|
|
109
|
+
// Called only when no source is showing, so it fires once per open.
|
|
130
110
|
showSource: () => {
|
|
131
111
|
traceRevealOpen('leaf');
|
|
132
112
|
revealedBase = sourceText();
|
|
@@ -139,8 +119,7 @@ export function createEditableLeaf(deps) {
|
|
|
139
119
|
deps.setRevealed?.(false);
|
|
140
120
|
}
|
|
141
121
|
});
|
|
142
|
-
// Every open goes through here
|
|
143
|
-
// completed (see `EditableLeafDeps.completeBareSource`) whatever door revealed it.
|
|
122
|
+
// Every open goes through here, so a markers-only source is completed however it was opened.
|
|
144
123
|
async function revealSource(atSourceOffset = 0) {
|
|
145
124
|
await revealKernel.reveal(atSourceOffset);
|
|
146
125
|
const el = deps.getEl();
|
|
@@ -151,20 +130,16 @@ export function createEditableLeaf(deps) {
|
|
|
151
130
|
return;
|
|
152
131
|
paintSource(el, completed.text);
|
|
153
132
|
deps.onSourceEdit?.(completed.text);
|
|
154
|
-
|
|
133
|
+
setCaret(completed.caret);
|
|
155
134
|
}
|
|
156
135
|
// ── Commit ─────────────────────────────────────────────────────────────────
|
|
157
136
|
// Returns the commit's own promise, so a caller that has to act on the committed bytes
|
|
158
137
|
// (a single-line Enter's split) can wait for the write to land.
|
|
159
138
|
function commitSource(edited) {
|
|
160
|
-
|
|
161
|
-
// caret follows the edit position.
|
|
162
|
-
return Promise.resolve(blockEdit.updateBlockContent(deps.getIndex(), edited + trailingLineEnding(deps.getNode().raw), preEditOffset, edited.length));
|
|
139
|
+
return blockEdit.updateBlockContent(deps.getIndex(), edited + trailingLineEnding(deps.getNode().raw, documentLineEnding(getDoc())), 'authored', editableSurface.getPreEditOffset(), edited.length);
|
|
163
140
|
}
|
|
164
|
-
// A blur
|
|
165
|
-
//
|
|
166
|
-
// under the pointer, then folds unless focus came back — else the source stays open with
|
|
167
|
-
// nothing focused in it and no further blur to close it.
|
|
141
|
+
// A blur during a cross-block range is a drag leaving this source; it hides a frame later, once
|
|
142
|
+
// the range has measured its text, unless focus came back.
|
|
168
143
|
let foldFrame = 0;
|
|
169
144
|
function foldAfterRange() {
|
|
170
145
|
if (foldFrame)
|
|
@@ -184,27 +159,29 @@ export function createEditableLeaf(deps) {
|
|
|
184
159
|
foldAfterRange();
|
|
185
160
|
return;
|
|
186
161
|
}
|
|
187
|
-
// Only wired to onFocusOut — the block leaf folds on blur, never Escape-cancel.
|
|
188
162
|
traceRevealFold('blur');
|
|
189
163
|
const edited = deps.getEl()?.textContent ?? sourceText();
|
|
190
164
|
const base = revealedBase;
|
|
191
165
|
revealedBase = null;
|
|
192
|
-
deps.setRevealed(false);
|
|
193
|
-
//
|
|
194
|
-
//
|
|
195
|
-
// destroyed and the blur arrives on the way out, so these bytes belong to a block that is
|
|
196
|
-
// no longer here and writing them corrupts the one that is (#161).
|
|
166
|
+
deps.setRevealed(false);
|
|
167
|
+
// An undo or a `source` swap can put another block at this index before the destroyed
|
|
168
|
+
// component's blur arrives, so write back only over the bytes the source opened on.
|
|
197
169
|
if (base !== null && base !== sourceText())
|
|
198
170
|
return;
|
|
199
171
|
if (edited === sourceText())
|
|
200
|
-
return;
|
|
172
|
+
return;
|
|
201
173
|
await commitSource(edited);
|
|
202
174
|
}
|
|
203
|
-
//
|
|
175
|
+
// Forced, because a cross-block range would put the write off a frame and the command runs now.
|
|
176
|
+
function afterSourceCommit(run) {
|
|
177
|
+
if (mode !== 'render-primary' || !isRevealed())
|
|
178
|
+
return run();
|
|
179
|
+
void commitReveal(true).then(run);
|
|
180
|
+
}
|
|
181
|
+
// ── BlockComponent methods ─────────────────────────────────────────────────
|
|
204
182
|
function parkCaret(offset) {
|
|
205
183
|
if (mode === 'render-primary') {
|
|
206
|
-
// Reading mode
|
|
207
|
-
// and block-level traversal passes over.
|
|
184
|
+
// Reading mode shows no source, so focus does nothing and traversal passes over.
|
|
208
185
|
if (isReading())
|
|
209
186
|
return;
|
|
210
187
|
void revealSource(offset);
|
|
@@ -213,15 +190,12 @@ export function createEditableLeaf(deps) {
|
|
|
213
190
|
surface.parkCaret(offset);
|
|
214
191
|
}
|
|
215
192
|
const focus = placeCaret(selection, parkCaret);
|
|
216
|
-
// Sticky-column entry: mount the source, then land at the column nearest x
|
|
217
|
-
// on the first/last visual line — the code-block traversal contract.
|
|
218
193
|
function focusAtColumn(x, from) {
|
|
219
194
|
void (async () => {
|
|
220
195
|
if (!isRevealed()) {
|
|
221
196
|
if (isReading())
|
|
222
197
|
return;
|
|
223
|
-
//
|
|
224
|
-
// length assert and reveal base; it seats a caret at 0, which the column re-seats.
|
|
198
|
+
// Opens at offset 0; the column lookup below moves the caret.
|
|
225
199
|
await revealSource();
|
|
226
200
|
}
|
|
227
201
|
if (!deps.getEl())
|
|
@@ -229,14 +203,10 @@ export function createEditableLeaf(deps) {
|
|
|
229
203
|
surface.focusAtColumn(x, from);
|
|
230
204
|
})();
|
|
231
205
|
}
|
|
232
|
-
|
|
233
|
-
return reorderRunCommand(id, reorder, deps.getPath);
|
|
234
|
-
}
|
|
235
|
-
const getCommandContext = () => buildLeafCommandContext(deps, blockEdit, pluginEditor);
|
|
206
|
+
const getCommandContext = () => buildLeafCommandContext(deps, blockEdit);
|
|
236
207
|
// ── View sync ──────────────────────────────────────────────────────────────
|
|
237
|
-
//
|
|
238
|
-
//
|
|
239
|
-
// same stamp a code block does, so its markers paint while focused.
|
|
208
|
+
// Every painter's output passes here, so the text check covers them all (G1.28). A markers-only
|
|
209
|
+
// source takes the code block's empty-content attribute, so its markers show while focused.
|
|
240
210
|
function paintSource(el, text) {
|
|
241
211
|
if (deps.renderSource) {
|
|
242
212
|
const painted = deps.renderSource(text);
|
|
@@ -253,10 +223,10 @@ export function createEditableLeaf(deps) {
|
|
|
253
223
|
const el = deps.getEl();
|
|
254
224
|
if (!el || !deps.renderSource || composing)
|
|
255
225
|
return;
|
|
256
|
-
const offset =
|
|
226
|
+
const offset = backend.getRaw();
|
|
257
227
|
paintSource(el, el.textContent ?? '');
|
|
258
228
|
if (offset !== null)
|
|
259
|
-
|
|
229
|
+
setCaret(offset);
|
|
260
230
|
}
|
|
261
231
|
function syncSource() {
|
|
262
232
|
const text = sourceText();
|
|
@@ -269,15 +239,14 @@ export function createEditableLeaf(deps) {
|
|
|
269
239
|
paintSource(el, text);
|
|
270
240
|
// The local entries were taken against bytes an external rewrite just replaced.
|
|
271
241
|
clearSourceHistory();
|
|
272
|
-
// Restore only
|
|
242
|
+
// Restore only while a caret is live: a rewrite from outside (undo, structural
|
|
273
243
|
// replace) must not steal focus.
|
|
274
|
-
consumePendingRestore(el, pending, (offset) =>
|
|
244
|
+
consumePendingRestore(el, pending, (offset) => setCaret(offset));
|
|
275
245
|
}
|
|
276
246
|
}
|
|
277
247
|
let sourceUndo = [];
|
|
278
248
|
let sourceRedo = [];
|
|
279
|
-
// The document's
|
|
280
|
-
// reveal takes one entry there, so it takes one here.
|
|
249
|
+
// The document's keystroke batching, so a burst of typing takes one entry here as it does there.
|
|
281
250
|
let batchBaseText = '';
|
|
282
251
|
const sourceBatch = createTextBatch({
|
|
283
252
|
pushSnapshot: (_leafPath, offset) => {
|
|
@@ -296,17 +265,13 @@ export function createEditableLeaf(deps) {
|
|
|
296
265
|
return;
|
|
297
266
|
// The restored text is what the next keystroke must snapshot, so it opens its own batch.
|
|
298
267
|
sourceBatch.interrupt();
|
|
299
|
-
to.push({ text: el.textContent ?? '', caret:
|
|
268
|
+
to.push({ text: el.textContent ?? '', caret: backend.getRaw() ?? 0 });
|
|
300
269
|
paintSource(el, entry.text);
|
|
301
|
-
|
|
270
|
+
setCaret(entry.caret);
|
|
302
271
|
deps.onSourceEdit?.(entry.text);
|
|
303
272
|
}
|
|
304
|
-
/**
|
|
305
|
-
*
|
|
306
|
-
* each gesture: one character replaced by at most one non-newline character is the shape a
|
|
307
|
-
* keystroke has, and nothing else coalesces. Enter, a paste, a cut and a selection replace
|
|
308
|
-
* each take an entry of their own and end the burst before them.
|
|
309
|
-
*/
|
|
273
|
+
/** Only a keystroke-shaped edit (one character at most, not a newline) joins a typing burst;
|
|
274
|
+
* anything else takes its own undo entry. */
|
|
310
275
|
function recordSourceEdit(text, caret, keystroke) {
|
|
311
276
|
if (!keystroke) {
|
|
312
277
|
sourceBatch.interrupt();
|
|
@@ -317,37 +282,33 @@ export function createEditableLeaf(deps) {
|
|
|
317
282
|
batchBaseText = text;
|
|
318
283
|
sourceBatch.keystroke(deps.getPath(), caret);
|
|
319
284
|
}
|
|
320
|
-
// Splice `insert` over
|
|
321
|
-
//
|
|
322
|
-
// inject <div>/<br> that vanish from textContent.
|
|
285
|
+
// Splice `insert` over [start, end) of the source text and put the caret back: a native Enter,
|
|
286
|
+
// cut or paste would inject <div>/<br> elements that vanish from textContent.
|
|
323
287
|
function spliceSourceText(el, start, end, insert) {
|
|
324
288
|
const text = el.textContent ?? '';
|
|
325
289
|
const keystroke = end - start <= 1 && insert.length <= 1 && insert !== '\n';
|
|
326
290
|
if (deps.renderSource)
|
|
327
|
-
recordSourceEdit(text,
|
|
291
|
+
recordSourceEdit(text, backend.getRaw() ?? start, keystroke);
|
|
328
292
|
const spliced = text.slice(0, start) + insert + text.slice(end);
|
|
329
|
-
//
|
|
330
|
-
//
|
|
293
|
+
// Emptying the body leaves the same markers-only source a bare block arrives as, so this
|
|
294
|
+
// edit applies the same completion that showing the source does.
|
|
331
295
|
const completed = deps.completeBareSource?.(spliced) ?? null;
|
|
332
296
|
const next = completed?.text ?? spliced;
|
|
333
297
|
paintSource(el, next);
|
|
334
298
|
deps.onSourceEdit?.(next);
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
//
|
|
299
|
+
editableSurface.notePreEditOffset(start);
|
|
300
|
+
setCaret(completed?.caret ?? start + insert.length);
|
|
301
|
+
// Started after the edit, so the pause measured is the one the user leaves.
|
|
338
302
|
if (deps.renderSource && keystroke)
|
|
339
303
|
sourceBatch.armPause();
|
|
340
304
|
if (mode === 'plain')
|
|
341
305
|
editableSurface.onInput();
|
|
342
306
|
}
|
|
343
307
|
// ── Clipboard ────────────────────────────────────────────────────────────
|
|
344
|
-
// The leaf's DOM
|
|
345
|
-
//
|
|
346
|
-
// re-parses the whole raw, re-splitting only where the grammar demands. No reveal
|
|
347
|
-
// fold — the render-primary source folds on blur instead.
|
|
308
|
+
// The leaf's DOM text is its raw, so copy writes the visible selection and cut and paste
|
|
309
|
+
// splice verbatim; the commit's reparse splits the block where the grammar demands.
|
|
348
310
|
const clipboard = createClipboardHandlers({
|
|
349
|
-
|
|
350
|
-
edgeAffinity,
|
|
311
|
+
caretMemory,
|
|
351
312
|
selection,
|
|
352
313
|
getDoc,
|
|
353
314
|
crossBlock,
|
|
@@ -359,7 +320,7 @@ export function createEditableLeaf(deps) {
|
|
|
359
320
|
const el = deps.getEl();
|
|
360
321
|
if (!el)
|
|
361
322
|
return;
|
|
362
|
-
const sel =
|
|
323
|
+
const sel = backend.getRawSelection();
|
|
363
324
|
if (!sel || sel.start === sel.end)
|
|
364
325
|
return;
|
|
365
326
|
e.clipboardData?.setData('text/plain', (el.textContent ?? '').slice(sel.start, sel.end));
|
|
@@ -369,26 +330,30 @@ export function createEditableLeaf(deps) {
|
|
|
369
330
|
const el = deps.getEl();
|
|
370
331
|
if (!el)
|
|
371
332
|
return;
|
|
372
|
-
const sel =
|
|
373
|
-
const start = sel ? sel.start : (
|
|
333
|
+
const sel = backend.getRawSelection();
|
|
334
|
+
const start = sel ? sel.start : (backend.getRaw() ?? (el.textContent ?? '').length);
|
|
374
335
|
const end = sel ? sel.end : start;
|
|
375
336
|
spliceSourceText(el, start, end, pastedText);
|
|
376
337
|
}
|
|
377
338
|
});
|
|
378
339
|
/** Resolve a chord at this leaf's kind and report whether it was consumed. Both views spend
|
|
379
340
|
* it: undo belongs to the block whatever half of the swap holds focus. */
|
|
380
|
-
const dispatchChord = (e) => wiring.dispatchChord(e, {
|
|
341
|
+
const dispatchChord = (e) => wiring.dispatchChord(e, {
|
|
342
|
+
kind: deps.getNode().kind,
|
|
343
|
+
getCommandContext,
|
|
344
|
+
getPath: deps.getPath,
|
|
345
|
+
afterSourceCommit
|
|
346
|
+
});
|
|
381
347
|
async function handleKeydown(e) {
|
|
382
348
|
const el = deps.getEl();
|
|
383
349
|
if (composing || !el)
|
|
384
350
|
return;
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
//
|
|
388
|
-
//
|
|
389
|
-
// chord, so a host's rebinding or disable reaches it.
|
|
351
|
+
// Enter commits from here, with no input event to read the caret at.
|
|
352
|
+
editableSurface.notePreEditOffset(backend.getRaw() ?? 0);
|
|
353
|
+
// Undo inside a shown painted source steps through its own edits; the document sees them as
|
|
354
|
+
// one entry written on blur.
|
|
390
355
|
if (deps.renderSource && isRevealed()) {
|
|
391
|
-
const command =
|
|
356
|
+
const command = wiring.resolveChord(e, deps.getNode().kind);
|
|
392
357
|
if (command === 'history.undo' && sourceUndo.length > 0) {
|
|
393
358
|
e.preventDefault();
|
|
394
359
|
restoreSourceEntry(el, sourceUndo, sourceRedo);
|
|
@@ -400,24 +365,19 @@ export function createEditableLeaf(deps) {
|
|
|
400
365
|
return;
|
|
401
366
|
}
|
|
402
367
|
}
|
|
403
|
-
// Backspace in a painted source
|
|
404
|
-
//
|
|
405
|
-
// only steps out (or eats the one blank line) leaves a block the user just asked to be rid
|
|
406
|
-
// of. In every mode — the gate is the byte BEFORE the caret: whitespace, or nothing, so a
|
|
407
|
-
// press that sits right after a visible marker still edits that marker in source mode.
|
|
368
|
+
// Backspace in a markers-only painted source deletes the block, but only with whitespace or
|
|
369
|
+
// nothing before the caret, so a Backspace right after a visible marker still edits it.
|
|
408
370
|
if (e.key === 'Backspace' && !e.shiftKey && !e.ctrlKey && !e.metaKey && !e.altKey) {
|
|
409
|
-
const offset = deps.renderSource ?
|
|
371
|
+
const offset = deps.renderSource ? backend.getRaw() : null;
|
|
410
372
|
const text = el.textContent ?? '';
|
|
411
373
|
if (offset !== null &&
|
|
412
374
|
(offset === 0 || /\s/.test(text[offset - 1] ?? '')) &&
|
|
413
375
|
!hasSelectionIn(el) &&
|
|
414
|
-
chromeFreeText(el)
|
|
376
|
+
isBlankText(chromeFreeText(el))) {
|
|
415
377
|
e.preventDefault();
|
|
416
378
|
revealedBase = null;
|
|
417
379
|
deps.setRevealed?.(false);
|
|
418
|
-
|
|
419
|
-
await blockEdit.deleteBlock(index);
|
|
420
|
-
void focusActions.moveFocus(index - 1, 'end');
|
|
380
|
+
await blockEdit.deleteBlock(deps.getIndex(), 'Backspace');
|
|
421
381
|
return;
|
|
422
382
|
}
|
|
423
383
|
}
|
|
@@ -425,18 +385,17 @@ export function createEditableLeaf(deps) {
|
|
|
425
385
|
return;
|
|
426
386
|
if (dispatchChord(e))
|
|
427
387
|
return;
|
|
428
|
-
// Enter
|
|
429
|
-
//
|
|
430
|
-
// that byte, so it spends the press on the document instead.
|
|
388
|
+
// Enter types a literal newline in a multiline source; a single-line leaf has nowhere to put
|
|
389
|
+
// one, so Enter splits the block instead.
|
|
431
390
|
if (e.key === 'Enter') {
|
|
432
391
|
e.preventDefault();
|
|
433
392
|
if (isReading())
|
|
434
393
|
return;
|
|
435
394
|
// Read before any fold: `setRevealed(false)` unmounts the element the offset lives in.
|
|
436
|
-
const offset =
|
|
395
|
+
const offset = backend.getRaw() ?? (el.textContent ?? '').length;
|
|
437
396
|
if (singleLine) {
|
|
438
|
-
//
|
|
439
|
-
//
|
|
397
|
+
// `commitReveal` decides whether the shown bytes may still be written, and the split
|
|
398
|
+
// reads `node.raw` after it.
|
|
440
399
|
await commitReveal();
|
|
441
400
|
await blockEdit.splitBlock(deps.getIndex(), offset);
|
|
442
401
|
return;
|
|
@@ -444,12 +403,8 @@ export function createEditableLeaf(deps) {
|
|
|
444
403
|
spliceSourceText(el, offset, offset, '\n');
|
|
445
404
|
}
|
|
446
405
|
}
|
|
447
|
-
/**
|
|
448
|
-
*
|
|
449
|
-
* `\n` text node as a placeholder and replaces it on insert (a fresh `$$` block lost the line
|
|
450
|
-
* before its closer), and a native delete has no notion of hidden chrome. The edit range is
|
|
451
|
-
* clamped to the landable span, so nothing reaches a fence line. Composition stays native.
|
|
452
|
-
*/
|
|
406
|
+
/** A painted source applies text edits itself: the browser's insert replaces a lone `\n` text
|
|
407
|
+
* node and its delete cannot see hidden markers. Clamping keeps edits off hidden fence lines. */
|
|
453
408
|
function onBeforeInput(e) {
|
|
454
409
|
if (!deps.renderSource || composing || e.isComposing)
|
|
455
410
|
return;
|
|
@@ -475,21 +430,14 @@ export function createEditableLeaf(deps) {
|
|
|
475
430
|
return;
|
|
476
431
|
}
|
|
477
432
|
const target = e.getTargetRanges()[0];
|
|
478
|
-
const range = target ?
|
|
433
|
+
const range = target ? backend.rawRangeOf(target) : null;
|
|
479
434
|
if (!range)
|
|
480
435
|
return;
|
|
481
436
|
e.preventDefault();
|
|
482
|
-
const start = clampToLandableRaw(el, range.start
|
|
483
|
-
const end = Math.max(start, clampToLandableRaw(el, range.end
|
|
437
|
+
const start = clampToLandableRaw(el, range.start);
|
|
438
|
+
const end = Math.max(start, clampToLandableRaw(el, range.end));
|
|
484
439
|
spliceSourceText(el, start, end, insert);
|
|
485
440
|
}
|
|
486
|
-
function historyCommandFor(e) {
|
|
487
|
-
const chord = eventToChord(e);
|
|
488
|
-
if (!chord)
|
|
489
|
-
return undefined;
|
|
490
|
-
return resolveBinding(chord, deps.getNode().kind, keybindingOverrides(), activePlugins)
|
|
491
|
-
?.command;
|
|
492
|
-
}
|
|
493
441
|
function hasSelectionIn(el) {
|
|
494
442
|
const sel = window.getSelection();
|
|
495
443
|
return Boolean(sel && !sel.isCollapsed && el.contains(sel.anchorNode));
|
|
@@ -497,9 +445,8 @@ export function createEditableLeaf(deps) {
|
|
|
497
445
|
function onPointerDown(e) {
|
|
498
446
|
void crossBlock.handlePointerDown(e);
|
|
499
447
|
}
|
|
500
|
-
// The rendered view and the source are different strings, so only the kind
|
|
501
|
-
// to a source offset
|
|
502
|
-
// reveals at the source start. The host, not the component root, is what the hook is bound to.
|
|
448
|
+
// The rendered view and the source are different strings, so only the kind's
|
|
449
|
+
// `caretTargetAtPoint` can map a point to a source offset; without one the source opens at 0.
|
|
503
450
|
function revealOffsetAt(e) {
|
|
504
451
|
const host = getBlockElByPath(deps.getPath())?.closest('[data-block-path]');
|
|
505
452
|
if (!(host instanceof HTMLElement))
|
|
@@ -507,9 +454,8 @@ export function createEditableLeaf(deps) {
|
|
|
507
454
|
const descriptor = tryGetBlockKindDescriptor(deps.getNode().kind);
|
|
508
455
|
return descriptor?.caretTargetAtPoint?.(host, e.clientX, e.clientY)?.offset ?? 0;
|
|
509
456
|
}
|
|
510
|
-
//
|
|
511
|
-
//
|
|
512
|
-
// handler), and the CLICK — a release that did not move — is what reveals.
|
|
457
|
+
// Pointer-down only records where it landed, so a drag starting on the rendered view stays a
|
|
458
|
+
// selection drag; the click, a release that did not move, shows the source.
|
|
513
459
|
let renderPress = null;
|
|
514
460
|
function onRenderPointerDown(e) {
|
|
515
461
|
renderPress = e.shiftKey || isReading() ? null : { x: e.clientX, y: e.clientY };
|
|
@@ -521,14 +467,13 @@ export function createEditableLeaf(deps) {
|
|
|
521
467
|
return;
|
|
522
468
|
if (Math.abs(e.clientX - press.x) > 3 || Math.abs(e.clientY - press.y) > 3)
|
|
523
469
|
return;
|
|
524
|
-
//
|
|
525
|
-
// crossBlock.handlePointerDown
|
|
526
|
-
|
|
527
|
-
resetForPointerDown(selection, stickyColumn, edgeAffinity, false);
|
|
470
|
+
// Showing the source places a caret, so the pointer-down reset runs; not through
|
|
471
|
+
// `crossBlock.handlePointerDown`, which hit-tests the source text, not the rendered view.
|
|
472
|
+
resetForPointerDown(selection, caretMemory, false);
|
|
528
473
|
void revealSource(revealOffsetAt(e));
|
|
529
474
|
}
|
|
530
|
-
//
|
|
531
|
-
//
|
|
475
|
+
// A shown source owns the key and has already spent the chord, so a spread that stays
|
|
476
|
+
// mounted must not run either handler again on the way up.
|
|
532
477
|
const renderProps = {
|
|
533
478
|
onpointerdown: (e) => {
|
|
534
479
|
if (!isRevealed())
|
|
@@ -543,13 +488,12 @@ export function createEditableLeaf(deps) {
|
|
|
543
488
|
void dispatchChord(e);
|
|
544
489
|
}
|
|
545
490
|
};
|
|
546
|
-
// ── Source
|
|
491
|
+
// ── Source element props ─────────────────────────────────────────────────────
|
|
547
492
|
const surfaceHandlers = {
|
|
548
493
|
tabindex: 0,
|
|
549
|
-
role: 'textbox',
|
|
550
494
|
spellcheck: 'false',
|
|
551
495
|
oninput: editableSurface.onInput,
|
|
552
|
-
onbeforeinput: onBeforeInput,
|
|
496
|
+
onbeforeinput: editableSurface.onBeforeInput,
|
|
553
497
|
onkeydown: withKeydownVerdict(handleKeydown),
|
|
554
498
|
oncopy: clipboard.onCopy,
|
|
555
499
|
oncut: clipboard.onCut,
|
|
@@ -559,43 +503,39 @@ export function createEditableLeaf(deps) {
|
|
|
559
503
|
oncompositionstart: editableSurface.onCompositionStart,
|
|
560
504
|
oncompositionend: editableSurface.onCompositionEnd
|
|
561
505
|
};
|
|
562
|
-
//
|
|
563
|
-
//
|
|
564
|
-
// nothing else moves the raw mid-edit and the mirror cannot clobber an in-flight one. No
|
|
565
|
-
// cleanup, so it never parks focus mid-edit.
|
|
506
|
+
// Mirrors a raw change from outside (undo, a structural replace) into the source; nothing moves
|
|
507
|
+
// a shown render-primary source's raw before blur.
|
|
566
508
|
const syncAttachment = () => {
|
|
567
509
|
syncSource();
|
|
568
510
|
};
|
|
569
|
-
//
|
|
570
|
-
// recompute of the spread never fires the park mid-edit.
|
|
511
|
+
// Its own stable attachment, so recomputing the spread never moves focus mid-edit.
|
|
571
512
|
const parkAttachment = (el) => () => parkFocusOnEditorRoot(el, getEditorRoot());
|
|
572
|
-
//
|
|
573
|
-
//
|
|
574
|
-
const
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
:
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
},
|
|
586
|
-
[createAttachmentKey()]: syncAttachment,
|
|
587
|
-
[createAttachmentKey()]: parkAttachment
|
|
588
|
-
};
|
|
513
|
+
// One key per attachment, taken once: the spread re-reads the bundle as the list under the
|
|
514
|
+
// caret opens and closes, and Svelte re-runs an attachment only when its function changes.
|
|
515
|
+
const syncKey = createAttachmentKey();
|
|
516
|
+
const parkKey = createAttachmentKey();
|
|
517
|
+
// Built on every read, so the combobox attributes follow the list. A render-primary source is
|
|
518
|
+
// never shown in reading mode, so its `contenteditable` stays true.
|
|
519
|
+
const buildSurfaceProps = () => ({
|
|
520
|
+
...surfaceHandlers,
|
|
521
|
+
...editableSurfaceAttributes(deps.getNode(), inlineMenuCombobox(deps.getPath())),
|
|
522
|
+
contenteditable: mode === 'render-primary' || !isReading() ? 'true' : 'false',
|
|
523
|
+
[syncKey]: syncAttachment,
|
|
524
|
+
[parkKey]: parkAttachment
|
|
525
|
+
});
|
|
589
526
|
return {
|
|
590
527
|
get sourceText() {
|
|
591
528
|
return sourceText();
|
|
592
529
|
},
|
|
593
530
|
repaintSource,
|
|
594
|
-
surfaceProps
|
|
531
|
+
get surfaceProps() {
|
|
532
|
+
return buildSurfaceProps();
|
|
533
|
+
},
|
|
595
534
|
renderProps,
|
|
596
535
|
getPresentationMode,
|
|
597
536
|
getTheme,
|
|
598
537
|
getOptions,
|
|
538
|
+
getEditor,
|
|
599
539
|
focus,
|
|
600
540
|
parkCaret,
|
|
601
541
|
focusAtColumn,
|
|
@@ -608,21 +548,19 @@ export function createEditableLeaf(deps) {
|
|
|
608
548
|
measurePartialRects: (startOffset, endOffset) => {
|
|
609
549
|
if (isRevealed())
|
|
610
550
|
return surface.measurePartialRects(startOffset, endOffset);
|
|
611
|
-
//
|
|
612
|
-
// opaque single-unit container shim and cover the rendered block box for any
|
|
613
|
-
// non-empty range (SELECTION_END exceeds every real start, so to-end paints too).
|
|
551
|
+
// A hidden source has no text to measure, so any non-empty range covers the rendered box.
|
|
614
552
|
if (endOffset <= startOffset)
|
|
615
553
|
return [];
|
|
616
554
|
const box = getBlockElByPath(deps.getPath());
|
|
617
555
|
return box ? [box.getBoundingClientRect()] : [];
|
|
618
556
|
},
|
|
619
|
-
runCommand,
|
|
620
557
|
insertMarkdown: clipboard.insertMarkdown,
|
|
621
558
|
reveal: (offset = 0) => {
|
|
622
559
|
if (mode !== 'render-primary')
|
|
623
560
|
return Promise.resolve(surface.focus(offset));
|
|
624
561
|
return isReading() ? Promise.resolve() : revealSource(offset);
|
|
625
562
|
},
|
|
626
|
-
commitSource: (edited) => void commitSource(edited)
|
|
563
|
+
commitSource: (edited) => void commitSource(edited),
|
|
564
|
+
afterSourceCommit
|
|
627
565
|
};
|
|
628
566
|
}
|