@voithos-labs/aragonite 0.10.3 → 0.10.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/a11y-strings.d.ts +12 -5
- package/dist/a11y-strings.js +61 -5
- package/dist/action-contracts.d.ts +242 -155
- package/dist/action-contracts.js +2 -2
- package/dist/active-editor.d.ts +3 -3
- package/dist/active-editor.js +8 -9
- package/dist/ambient/ambient-dom.d.ts +2 -5
- package/dist/ambient/ambient-dom.js +16 -62
- package/dist/assert.js +6 -5
- package/dist/block-component.d.ts +135 -109
- package/dist/block-component.js +30 -22
- package/dist/block-id.d.ts +6 -10
- package/dist/block-id.js +25 -14
- package/dist/bounded-memo.d.ts +5 -5
- package/dist/bounded-memo.js +6 -6
- package/dist/components/BlockDragHandle.svelte +13 -20
- package/dist/components/BlockHost.svelte +56 -134
- package/dist/components/BlockList.svelte +22 -19
- package/dist/components/DecorationOverlay.svelte +9 -10
- package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
- package/dist/components/Editor.svelte +619 -1089
- package/dist/components/Editor.svelte.d.ts +9 -20
- package/dist/components/GapCaret.svelte +26 -59
- package/dist/components/SelectionOverlay.svelte +36 -67
- package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
- package/dist/components/TailInsert.svelte +8 -55
- package/dist/components/TailInsert.svelte.d.ts +4 -6
- package/dist/components/block-content-selector.d.ts +11 -11
- package/dist/components/block-content-selector.js +11 -11
- package/dist/components/block-el-lookup.d.ts +6 -0
- package/dist/components/block-el-lookup.js +27 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
- package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
- package/dist/components/blocks/code/CodeBlock.svelte +255 -276
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
- package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
- package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
- package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
- package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
- package/dist/components/blocks/code/code-bootstrap.js +35 -28
- package/dist/components/blocks/code/code-context-actions.js +5 -4
- package/dist/components/blocks/code/code-enter.js +2 -2
- package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
- package/dist/components/blocks/code/code-fence-boundary.js +40 -66
- package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
- package/dist/components/blocks/code/code-fence-exit.js +24 -25
- package/dist/components/blocks/code/code-indent.d.ts +2 -2
- package/dist/components/blocks/code/code-indent.js +4 -7
- package/dist/components/blocks/code/code-languages.d.ts +16 -12
- package/dist/components/blocks/code/code-languages.js +58 -32
- package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
- package/dist/components/blocks/code/code-paste-surface.js +9 -18
- package/dist/components/blocks/code/code-renderer.d.ts +21 -5
- package/dist/components/blocks/code/code-renderer.js +90 -125
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
- package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
- package/dist/components/blocks/directive/activate-directives.js +18 -13
- package/dist/components/blocks/editable-leaf.d.ts +50 -74
- package/dist/components/blocks/editable-leaf.js +144 -202
- package/dist/components/blocks/editable-surface.d.ts +96 -100
- package/dist/components/blocks/editable-surface.js +101 -109
- package/dist/components/blocks/list/ListBlock.svelte +46 -90
- package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
- package/dist/components/blocks/list/task-checkbox.js +12 -7
- package/dist/components/blocks/plain-text-backend.d.ts +4 -20
- package/dist/components/blocks/plain-text-backend.js +9 -43
- package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
- package/dist/components/blocks/surface-wiring.svelte.js +15 -34
- package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
- package/dist/components/blocks/table/TableBlock.svelte +100 -165
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
- package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
- package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
- package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
- package/dist/components/blocks/table/cell-pointer.js +49 -71
- package/dist/components/blocks/table/cell-render.d.ts +24 -29
- package/dist/components/blocks/table/cell-render.js +29 -31
- package/dist/components/blocks/table/selected-cells.d.ts +7 -7
- package/dist/components/blocks/table/selected-cells.js +9 -13
- package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
- package/dist/components/blocks/table/table-caret-at-point.js +5 -5
- package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
- package/dist/components/blocks/table/table-cell-paste.js +27 -43
- package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
- package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
- package/dist/components/blocks/table/table-menu-model.js +6 -10
- package/dist/components/blocks/table/table-navigation.js +2 -2
- package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
- package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
- package/dist/components/blocks/text/auto-pair-record.js +51 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
- package/dist/components/blocks/text/click-snap-guard.js +16 -5
- package/dist/components/blocks/text/composition-seat.d.ts +17 -14
- package/dist/components/blocks/text/composition-seat.js +11 -11
- package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
- package/dist/components/blocks/text/construct-edge-delete.js +50 -65
- package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
- package/dist/components/blocks/text/construct-reveal.js +13 -14
- package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
- package/dist/components/blocks/text/delimiter-autopair.js +87 -103
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
- package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
- package/dist/components/blocks/text/edge-seat.d.ts +17 -26
- package/dist/components/blocks/text/edge-seat.js +43 -70
- package/dist/components/blocks/text/link-at-point.d.ts +9 -9
- package/dist/components/blocks/text/link-at-point.js +12 -15
- package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
- package/dist/components/blocks/text/live-join-seam.js +75 -112
- package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
- package/dist/components/blocks/text/live-selection-edit.js +32 -105
- package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
- package/dist/components/blocks/text/live-split-rebalance.js +50 -67
- package/dist/components/blocks/text/marker-completion.d.ts +7 -12
- package/dist/components/blocks/text/marker-completion.js +17 -10
- package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
- package/dist/components/blocks/text/pending-mark-insert.js +30 -49
- package/dist/components/blocks/text/screen-diff.d.ts +5 -15
- package/dist/components/blocks/text/screen-diff.js +5 -19
- package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
- package/dist/components/blocks/text/text-clipboard.js +27 -32
- package/dist/components/blocks/text/text-keydown.d.ts +20 -30
- package/dist/components/blocks/text/text-keydown.js +54 -51
- package/dist/components/blocks/text/text-render.d.ts +25 -35
- package/dist/components/blocks/text/text-render.js +82 -61
- package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
- package/dist/components/blocks/text/widget-adjacency.js +17 -17
- package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
- package/dist/components/blocks/text/widget-interaction.js +243 -208
- package/dist/components/blocks/widget-portal.d.ts +20 -29
- package/dist/components/blocks/widget-portal.js +16 -14
- package/dist/components/built-in-blocks.d.ts +3 -4
- package/dist/components/built-in-blocks.js +17 -18
- package/dist/components/drag-handle.d.ts +13 -30
- package/dist/components/drag-handle.js +25 -63
- package/dist/components/editor-built-ins.d.ts +1 -0
- package/dist/components/editor-built-ins.js +16 -0
- package/dist/components/editor-root-clipboard.d.ts +6 -6
- package/dist/components/editor-root-clipboard.js +16 -27
- package/dist/components/editor-root-document-swap.d.ts +49 -0
- package/dist/components/editor-root-document-swap.js +54 -0
- package/dist/components/editor-root-focus.d.ts +5 -4
- package/dist/components/editor-root-focus.js +51 -22
- package/dist/components/editor-root-focused-surface.d.ts +35 -0
- package/dist/components/editor-root-focused-surface.js +65 -0
- package/dist/components/editor-root-geometry.d.ts +15 -24
- package/dist/components/editor-root-geometry.js +27 -31
- package/dist/components/editor-root-gestures.d.ts +39 -0
- package/dist/components/editor-root-gestures.js +189 -0
- package/dist/components/editor-root-keydown.d.ts +10 -25
- package/dist/components/editor-root-keydown.js +19 -43
- package/dist/components/editor-root-listeners.d.ts +22 -31
- package/dist/components/editor-root-listeners.js +49 -46
- package/dist/components/editor-root-menus.d.ts +51 -0
- package/dist/components/editor-root-menus.js +147 -0
- package/dist/components/editor-root-mode-flip.d.ts +16 -11
- package/dist/components/editor-root-mode-flip.js +36 -34
- package/dist/components/editor-root-scroll-host.d.ts +22 -0
- package/dist/components/editor-root-scroll-host.js +34 -0
- package/dist/components/editor-root-test-surface.d.ts +48 -0
- package/dist/components/editor-root-test-surface.js +6 -0
- package/dist/components/image/ImageOverlayHost.svelte +44 -35
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
- package/dist/components/image/ImageProperties.svelte +37 -41
- package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
- package/dist/components/image/ImageResizeHandles.svelte +26 -30
- package/dist/components/image/image-crop.d.ts +5 -11
- package/dist/components/image/image-crop.js +5 -11
- package/dist/components/image/image-edit-commit.d.ts +19 -16
- package/dist/components/image/image-edit-commit.js +74 -38
- package/dist/components/image/image-resize.d.ts +2 -5
- package/dist/components/image/image-resize.js +3 -6
- package/dist/components/image/image-widget-editing.d.ts +3 -3
- package/dist/components/image/image-widget-editing.js +9 -9
- package/dist/components/image/widget-dom.d.ts +2 -3
- package/dist/components/image/widget-dom.js +19 -24
- package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
- package/dist/components/image/widget-selection-state.svelte.js +26 -19
- package/dist/components/kind-cue.svelte.d.ts +21 -0
- package/dist/components/kind-cue.svelte.js +35 -0
- package/dist/components/link-card/LinkCard.svelte +115 -64
- package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
- package/dist/components/link-card/LinkCardHost.svelte +42 -33
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
- package/dist/components/link-card/link-card-commit.d.ts +16 -19
- package/dist/components/link-card/link-card-commit.js +21 -30
- package/dist/components/link-card/link-card-entry.d.ts +13 -23
- package/dist/components/link-card/link-card-entry.js +16 -24
- package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
- package/dist/components/link-card/link-card-state.svelte.js +2 -2
- package/dist/components/lrd-map-gate.d.ts +4 -11
- package/dist/components/lrd-map-gate.js +5 -11
- package/dist/components/menu/BlockMenu.svelte +20 -81
- package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
- package/dist/components/menu/InlineMenuHost.svelte +191 -0
- package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
- package/dist/components/menu/MenuIcon.svelte +3 -103
- package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
- package/dist/components/menu/SelectionToolbar.svelte +380 -0
- package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
- package/dist/components/menu/clipboard-actions.d.ts +3 -4
- package/dist/components/menu/clipboard-actions.js +3 -4
- package/dist/components/menu/default-context-actions.d.ts +4 -13
- package/dist/components/menu/default-context-actions.js +49 -67
- package/dist/components/menu/flyout-placement.d.ts +2 -2
- package/dist/components/menu/flyout-placement.js +2 -2
- package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
- package/dist/components/menu/menu-presence.svelte.js +19 -0
- package/dist/components/paste-image-arm.d.ts +6 -11
- package/dist/components/paste-image-arm.js +11 -18
- package/dist/components/portal.d.ts +2 -5
- package/dist/components/portal.js +4 -7
- package/dist/core/directive/activate.d.ts +4 -5
- package/dist/core/directive/activate.js +8 -9
- package/dist/core/directive/container-opener.js +13 -12
- package/dist/core/directive/grammar.d.ts +2 -5
- package/dist/core/directive/grammar.js +10 -10
- package/dist/core/directive/kinds.d.ts +4 -7
- package/dist/core/directive/kinds.js +14 -16
- package/dist/core/directive/registry.d.ts +12 -9
- package/dist/core/directive/registry.js +19 -20
- package/dist/core/directive/text-recognizer.d.ts +3 -2
- package/dist/core/directive/text-recognizer.js +5 -9
- package/dist/core/escapable.d.ts +1 -5
- package/dist/core/escapable.js +1 -5
- package/dist/core/inline/backticks.d.ts +3 -4
- package/dist/core/inline/backticks.js +3 -4
- package/dist/core/inline/character-refs.js +2 -1
- package/dist/core/inline/destination-bytes.d.ts +6 -3
- package/dist/core/inline/destination-bytes.js +50 -8
- package/dist/core/inline/entity-widget.d.ts +4 -3
- package/dist/core/inline/entity-widget.js +6 -6
- package/dist/core/inline/format-toggle.d.ts +22 -28
- package/dist/core/inline/format-toggle.js +97 -129
- package/dist/core/inline/html-entities.d.ts +2 -3
- package/dist/core/inline/html-entities.js +2 -3
- package/dist/core/inline/html-tag-grammar.js +6 -2
- package/dist/core/inline/image-dimensions.d.ts +2 -0
- package/dist/core/inline/image-dimensions.js +19 -2
- package/dist/core/inline/image-source-bytes.d.ts +11 -0
- package/dist/core/inline/image-source-bytes.js +71 -0
- package/dist/core/inline/index.d.ts +28 -21
- package/dist/core/inline/index.js +56 -34
- package/dist/core/inline/inline-cache.d.ts +12 -15
- package/dist/core/inline/inline-cache.js +11 -14
- package/dist/core/inline/inline-widgets.d.ts +55 -68
- package/dist/core/inline/inline-widgets.js +55 -58
- package/dist/core/inline/link-destination.d.ts +31 -0
- package/dist/core/inline/link-destination.js +129 -0
- package/dist/core/inline/link-reference-resolver.d.ts +8 -6
- package/dist/core/inline/link-reference-resolver.js +10 -6
- package/dist/core/inline/link-source-bytes.d.ts +31 -0
- package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
- package/dist/core/inline/live-edit/read-back.d.ts +29 -0
- package/dist/core/inline/live-edit/read-back.js +50 -0
- package/dist/core/inline/picture.d.ts +10 -0
- package/dist/core/inline/picture.js +40 -0
- package/dist/core/inline/scan/autolinks.d.ts +7 -8
- package/dist/core/inline/scan/autolinks.js +80 -59
- package/dist/core/inline/scan/brackets.d.ts +2 -2
- package/dist/core/inline/scan/brackets.js +6 -103
- package/dist/core/inline/scan/code-spans.d.ts +4 -0
- package/dist/core/inline/scan/code-spans.js +8 -0
- package/dist/core/inline/scan/emphasis.js +10 -14
- package/dist/core/inline/scan/index.d.ts +3 -1
- package/dist/core/inline/scan/index.js +32 -33
- package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
- package/dist/core/inline/scan/plugin-syntax.js +75 -89
- package/dist/core/inline/scan/scan-state.d.ts +2 -0
- package/dist/core/inline/scan/scan-state.js +1 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
- package/dist/core/inline/scan/simple-nodes.js +2 -5
- package/dist/core/inline/scan/triggers.d.ts +17 -0
- package/dist/core/inline/scan/triggers.js +26 -0
- package/dist/core/inline/scan/url.js +8 -10
- package/dist/core/inline/transparency.d.ts +2 -1
- package/dist/core/inline/transparency.js +33 -17
- package/dist/core/inline/visibility.d.ts +30 -49
- package/dist/core/inline/visibility.js +31 -49
- package/dist/core/inline/walk.d.ts +4 -10
- package/dist/core/inline/walk.js +4 -10
- package/dist/core/inline-render.d.ts +22 -27
- package/dist/core/inline-render.js +51 -60
- package/dist/core/lines.d.ts +67 -26
- package/dist/core/lines.js +164 -33
- package/dist/core/metadata-parity.d.ts +9 -0
- package/dist/core/metadata-parity.js +25 -0
- package/dist/core/node-views.d.ts +7 -6
- package/dist/core/node-views.js +5 -5
- package/dist/core/nodes.d.ts +34 -44
- package/dist/core/nodes.js +4 -12
- package/dist/core/parser.d.ts +27 -34
- package/dist/core/parser.js +53 -67
- package/dist/core/parsers/blockquote.d.ts +5 -8
- package/dist/core/parsers/blockquote.js +11 -10
- package/dist/core/parsers/built-in-openers.d.ts +2 -5
- package/dist/core/parsers/built-in-openers.js +5 -8
- package/dist/core/parsers/fence-syntax.d.ts +36 -7
- package/dist/core/parsers/fence-syntax.js +61 -11
- package/dist/core/parsers/fenced-code.d.ts +16 -0
- package/dist/core/parsers/fenced-code.js +16 -15
- package/dist/core/parsers/heading.d.ts +19 -2
- package/dist/core/parsers/heading.js +50 -2
- package/dist/core/parsers/html-block.d.ts +3 -6
- package/dist/core/parsers/html-block.js +10 -11
- package/dist/core/parsers/indented-code.d.ts +1 -1
- package/dist/core/parsers/indented-code.js +2 -8
- package/dist/core/parsers/link-reference.d.ts +5 -3
- package/dist/core/parsers/link-reference.js +116 -120
- package/dist/core/parsers/list.d.ts +12 -5
- package/dist/core/parsers/list.js +53 -36
- package/dist/core/parsers/paragraph.d.ts +3 -3
- package/dist/core/parsers/paragraph.js +14 -5
- package/dist/core/parsers/table-completion.d.ts +2 -5
- package/dist/core/parsers/table-completion.js +7 -10
- package/dist/core/parsers/table.d.ts +8 -8
- package/dist/core/parsers/table.js +23 -26
- package/dist/core/parsers/thematic-break.js +15 -14
- package/dist/core/paths.d.ts +13 -0
- package/dist/core/paths.js +31 -0
- package/dist/core/terminator-escalation.d.ts +0 -7
- package/dist/core/terminator-escalation.js +5 -8
- package/dist/core/url-policy.d.ts +2 -5
- package/dist/core/url-policy.js +8 -12
- package/dist/cursor/caret-memory.d.ts +34 -0
- package/dist/cursor/caret-memory.js +82 -0
- package/dist/cursor/coordinate-spaces.d.ts +26 -19
- package/dist/cursor/coordinate-spaces.js +32 -20
- package/dist/cursor/dom-walk.d.ts +7 -13
- package/dist/cursor/dom-walk.js +7 -13
- package/dist/cursor/edge-affinity.d.ts +7 -35
- package/dist/cursor/edge-affinity.js +13 -44
- package/dist/cursor/focused-caret.d.ts +6 -8
- package/dist/cursor/focused-caret.js +7 -16
- package/dist/cursor/height-model.d.ts +3 -3
- package/dist/cursor/height-model.js +5 -5
- package/dist/cursor/height-oracle.d.ts +10 -7
- package/dist/cursor/height-oracle.js +26 -75
- package/dist/cursor/observe-resize.d.ts +13 -0
- package/dist/cursor/observe-resize.js +43 -0
- package/dist/cursor/overlay-rects.d.ts +2 -5
- package/dist/cursor/overlay-rects.js +2 -5
- package/dist/cursor/overlay-remeasure.d.ts +6 -7
- package/dist/cursor/overlay-remeasure.js +10 -14
- package/dist/cursor/pending-marks.d.ts +7 -9
- package/dist/cursor/pending-marks.js +6 -27
- package/dist/cursor/point-offset.d.ts +16 -10
- package/dist/cursor/point-offset.js +60 -25
- package/dist/cursor/reveal-source.d.ts +7 -11
- package/dist/cursor/reveal-source.js +10 -18
- package/dist/cursor/scroll-ancestors.d.ts +9 -20
- package/dist/cursor/scroll-ancestors.js +14 -26
- package/dist/cursor/scroll-owner.d.ts +92 -0
- package/dist/cursor/scroll-owner.js +283 -0
- package/dist/cursor/scrollport.d.ts +16 -8
- package/dist/cursor/scrollport.js +28 -5
- package/dist/cursor/sticky-column.d.ts +6 -29
- package/dist/cursor/sticky-column.js +6 -49
- package/dist/cursor/sticky-measure.d.ts +14 -9
- package/dist/cursor/sticky-measure.js +99 -49
- package/dist/cursor/surface-backend.d.ts +41 -0
- package/dist/cursor/surface-backend.js +78 -0
- package/dist/cursor/typography-estimates.d.ts +3 -3
- package/dist/cursor/typography-estimates.js +3 -3
- package/dist/cursor/visual-lines.d.ts +25 -13
- package/dist/cursor/visual-lines.js +72 -28
- package/dist/cursor/widget-edge-snap.d.ts +23 -0
- package/dist/cursor/widget-edge-snap.js +39 -0
- package/dist/cursor/widget-offset.d.ts +111 -102
- package/dist/cursor/widget-offset.js +352 -177
- package/dist/debug/diagnostics-report.d.ts +6 -6
- package/dist/debug/diagnostics-report.js +5 -5
- package/dist/debug/dump-tree.js +2 -2
- package/dist/debug/editor-diagnostics.d.ts +15 -0
- package/dist/debug/editor-diagnostics.js +33 -0
- package/dist/debug/inspect.d.ts +2 -2
- package/dist/debug/inspect.js +4 -4
- package/dist/debug/interaction-trace.d.ts +14 -15
- package/dist/debug/interaction-trace.js +19 -20
- package/dist/debug/operations-log.d.ts +1 -1
- package/dist/debug/operations-log.js +1 -1
- package/dist/decorations/buckets.d.ts +6 -12
- package/dist/decorations/buckets.js +4 -11
- package/dist/decorations/decoration-state.svelte.d.ts +2 -3
- package/dist/decorations/decoration-state.svelte.js +24 -26
- package/dist/decorations/island-dom.d.ts +10 -18
- package/dist/decorations/island-dom.js +25 -50
- package/dist/decorations/reserved-attrs.d.ts +6 -8
- package/dist/decorations/reserved-attrs.js +31 -17
- package/dist/decorations/types.d.ts +6 -7
- package/dist/decorations/types.js +2 -1
- package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
- package/dist/decorations/use-block-decorations.svelte.js +71 -0
- package/dist/decorations/widget-dom.d.ts +3 -3
- package/dist/decorations/widget-dom.js +5 -5
- package/dist/dev-warn.d.ts +5 -2
- package/dist/dev-warn.js +16 -4
- package/dist/editor-actions/ancestry-folds.d.ts +9 -14
- package/dist/editor-actions/ancestry-folds.js +13 -18
- package/dist/editor-actions/block-edit-core.d.ts +49 -22
- package/dist/editor-actions/block-edit-core.js +279 -151
- package/dist/editor-actions/block-edit-scope.d.ts +63 -50
- package/dist/editor-actions/block-edit-scope.js +100 -48
- package/dist/editor-actions/block-edit.d.ts +2 -3
- package/dist/editor-actions/block-edit.js +14 -90
- package/dist/editor-actions/commit/history.d.ts +4 -4
- package/dist/editor-actions/commit/history.js +33 -34
- package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
- package/dist/editor-actions/commit/reading-write-gate.js +56 -0
- package/dist/editor-actions/commit/text-batch.d.ts +7 -11
- package/dist/editor-actions/commit/text-batch.js +6 -7
- package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
- package/dist/editor-actions/commit/undo-controller.js +346 -216
- package/dist/editor-actions/container-block-component.d.ts +32 -51
- package/dist/editor-actions/container-block-component.js +66 -92
- package/dist/editor-actions/container-edit.d.ts +4 -2
- package/dist/editor-actions/container-edit.js +14 -44
- package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
- package/dist/editor-actions/container-exit-overrides.js +19 -21
- package/dist/editor-actions/deps.d.ts +25 -32
- package/dist/editor-actions/enter-completion.d.ts +12 -15
- package/dist/editor-actions/enter-completion.js +49 -51
- package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
- package/dist/editor-actions/focus/focus-dispatch.js +33 -52
- package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
- package/dist/editor-actions/focus/focus-landing.js +29 -14
- package/dist/editor-actions/focus/focus.d.ts +3 -2
- package/dist/editor-actions/focus/focus.js +42 -59
- package/dist/editor-actions/index.d.ts +4 -3
- package/dist/editor-actions/index.js +5 -4
- package/dist/editor-actions/inline-range-commit.d.ts +18 -16
- package/dist/editor-actions/inline-range-commit.js +45 -54
- package/dist/editor-actions/leaf-write.d.ts +11 -0
- package/dist/editor-actions/leaf-write.js +102 -0
- package/dist/editor-actions/list-context.d.ts +9 -10
- package/dist/editor-actions/list-context.js +115 -110
- package/dist/editor-actions/list-overrides.d.ts +13 -5
- package/dist/editor-actions/list-overrides.js +36 -12
- package/dist/editor-actions/merge-fallback.d.ts +10 -16
- package/dist/editor-actions/merge-fallback.js +11 -22
- package/dist/editor-actions/nested/container-actions.d.ts +37 -0
- package/dist/editor-actions/nested/container-actions.js +42 -0
- package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
- package/dist/editor-actions/nested/emptied-container.js +5 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
- package/dist/editor-actions/nested/nested-actions.js +17 -15
- package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
- package/dist/editor-actions/nested/nested-block-edit.js +40 -134
- package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
- package/dist/editor-actions/nested/nested-focus.js +33 -21
- package/dist/editor-actions/paste-coordinator.d.ts +3 -2
- package/dist/editor-actions/paste-coordinator.js +17 -13
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
- package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
- package/dist/editor-actions/plugin/container.d.ts +55 -76
- package/dist/editor-actions/plugin/container.js +105 -186
- package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
- package/dist/editor-actions/plugin/directive-container.js +7 -8
- package/dist/editor-actions/reorder-action.d.ts +7 -12
- package/dist/editor-actions/reorder-action.js +32 -48
- package/dist/editor-actions/reorder-drag.d.ts +12 -8
- package/dist/editor-actions/reorder-drag.js +45 -41
- package/dist/editor-actions/replacement-focus.d.ts +13 -21
- package/dist/editor-actions/replacement-focus.js +32 -33
- package/dist/editor-actions/search-replace.js +71 -67
- package/dist/editor-actions/stored-caret.d.ts +7 -0
- package/dist/editor-actions/stored-caret.js +10 -0
- package/dist/editor-actions/table-context.d.ts +9 -11
- package/dist/editor-actions/table-context.js +70 -93
- package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
- package/dist/editor-actions/unwrap-strategies.js +52 -63
- package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
- package/dist/editor-actions/whole-block-focus-surface.js +43 -53
- package/dist/editor-events.d.ts +25 -29
- package/dist/editor-events.js +17 -28
- package/dist/editor-keys.d.ts +96 -104
- package/dist/editor-keys.js +11 -24
- package/dist/editor-props.d.ts +91 -71
- package/dist/editor-rects.d.ts +23 -34
- package/dist/editor-rects.js +9 -77
- package/dist/env.d.ts +6 -4
- package/dist/env.js +8 -4
- package/dist/index.d.ts +6 -2
- package/dist/index.js +5 -2
- package/dist/inline-menu/inline-menu-session.d.ts +37 -0
- package/dist/inline-menu/inline-menu-session.js +98 -0
- package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
- package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
- package/dist/inline-menu/types.d.ts +77 -0
- package/dist/inline-menu/types.js +7 -0
- package/dist/invariants/child-id-parity.d.ts +23 -0
- package/dist/invariants/child-id-parity.js +39 -0
- package/dist/invariants/commit-paths.d.ts +4 -4
- package/dist/invariants/commit-paths.js +4 -4
- package/dist/invariants/commit-scope.d.ts +4 -4
- package/dist/invariants/commit-scope.js +9 -8
- package/dist/invariants/context-keys.d.ts +2 -5
- package/dist/invariants/context-keys.js +3 -6
- package/dist/invariants/descriptor.d.ts +2 -6
- package/dist/invariants/descriptor.js +2 -6
- package/dist/invariants/inline-transitions.d.ts +9 -16
- package/dist/invariants/inline-transitions.js +10 -18
- package/dist/invariants/install.d.ts +18 -27
- package/dist/invariants/install.js +29 -30
- package/dist/invariants/keeps-a-block.d.ts +7 -0
- package/dist/invariants/keeps-a-block.js +14 -0
- package/dist/invariants/landable-caret.d.ts +5 -7
- package/dist/invariants/landable-caret.js +8 -11
- package/dist/invariants/landing-focus-scroll.d.ts +7 -0
- package/dist/invariants/landing-focus-scroll.js +13 -0
- package/dist/invariants/landing-value.d.ts +13 -0
- package/dist/invariants/landing-value.js +27 -0
- package/dist/invariants/marker-css-parity.d.ts +5 -6
- package/dist/invariants/marker-css-parity.js +11 -12
- package/dist/invariants/measures-in-own-list.d.ts +6 -0
- package/dist/invariants/measures-in-own-list.js +13 -0
- package/dist/invariants/node-shape.d.ts +18 -37
- package/dist/invariants/node-shape.js +123 -79
- package/dist/invariants/open-tail.d.ts +7 -0
- package/dist/invariants/open-tail.js +45 -0
- package/dist/invariants/placement-ends-widget.d.ts +8 -0
- package/dist/invariants/placement-ends-widget.js +13 -0
- package/dist/invariants/registry.d.ts +27 -66
- package/dist/invariants/registry.js +61 -137
- package/dist/invariants/render-fidelity.d.ts +4 -4
- package/dist/invariants/render-fidelity.js +5 -5
- package/dist/invariants/selection-endpoints.d.ts +6 -7
- package/dist/invariants/selection-endpoints.js +18 -16
- package/dist/invariants/single-node-sink.d.ts +4 -5
- package/dist/invariants/single-node-sink.js +4 -5
- package/dist/invariants/snapshot-integrity.d.ts +5 -6
- package/dist/invariants/snapshot-integrity.js +1 -1
- package/dist/invariants/structural-descriptor.d.ts +6 -15
- package/dist/invariants/structural-descriptor.js +6 -15
- package/dist/menu-icons.d.ts +47 -0
- package/dist/menu-icons.js +113 -0
- package/dist/perf/instruments.d.ts +20 -5
- package/dist/perf/instruments.js +35 -15
- package/dist/perf/use-mount-gauge.svelte.js +4 -4
- package/dist/plugin.d.ts +38 -8
- package/dist/plugin.js +102 -74
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
- package/dist/plugins/admonitions/admonition-kind.js +12 -10
- package/dist/plugins/admonitions/convert-document.d.ts +5 -5
- package/dist/plugins/admonitions/convert-document.js +8 -7
- package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
- package/dist/plugins/admonitions/gh-alert.js +21 -22
- package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
- package/dist/plugins/admonitions/github-alert-kind.js +28 -37
- package/dist/plugins/admonitions/index.js +2 -2
- package/dist/plugins/admonitions/kinds.d.ts +1 -1
- package/dist/plugins/admonitions/register.js +11 -2
- package/dist/plugins/details/DetailsBlock.svelte +20 -20
- package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
- package/dist/plugins/details/details-disclosure.svelte.js +6 -7
- package/dist/plugins/details/details-kind.d.ts +6 -7
- package/dist/plugins/details/details-kind.js +44 -59
- package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
- package/dist/plugins/emoji/emoji-recognizer.js +7 -14
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
- package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +3 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
- package/dist/plugins/footnotes/footnote-definition.js +69 -45
- package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
- package/dist/plugins/footnotes/footnote-lookup.js +14 -26
- package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
- package/dist/plugins/footnotes/footnote-numbering.js +22 -31
- package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
- package/dist/plugins/footnotes/footnote-reference.js +8 -13
- package/dist/plugins/footnotes/index.js +2 -3
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
- package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
- package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
- package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/word-char.js +4 -0
- package/dist/plugins/latex/BlockMath.svelte +58 -75
- package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
- package/dist/plugins/latex/MathInline.svelte +10 -9
- package/dist/plugins/latex/flanking.d.ts +1 -0
- package/dist/plugins/latex/flanking.js +3 -0
- package/dist/plugins/latex/index.d.ts +1 -1
- package/dist/plugins/latex/latex-kind.d.ts +4 -4
- package/dist/plugins/latex/latex-kind.js +113 -85
- package/dist/plugins/latex/math-completion.d.ts +1 -1
- package/dist/plugins/latex/math-completion.js +5 -8
- package/dist/plugins/latex/math-layout.d.ts +2 -8
- package/dist/plugins/latex/math-layout.js +0 -9
- package/dist/plugins/latex/math-renderer.d.ts +17 -20
- package/dist/plugins/latex/math-renderer.js +21 -38
- package/dist/plugins/latex/math-source.d.ts +4 -8
- package/dist/plugins/latex/math-source.js +36 -75
- package/dist/plugins/latex/register.d.ts +10 -11
- package/dist/plugins/latex/register.js +24 -10
- package/dist/plugins/latex/renderer.d.ts +9 -10
- package/dist/plugins/latex/renderer.js +9 -24
- package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
- package/dist/plugins/mermaid/index.js +1 -1
- package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
- package/dist/plugins/mermaid/mermaid-kind.js +30 -47
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
- package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
- package/dist/plugins/mermaid/register.d.ts +3 -3
- package/dist/plugins/mermaid/register.js +5 -5
- package/dist/plugins/mermaid/renderer.d.ts +5 -5
- package/dist/plugins/mermaid/renderer.js +8 -11
- package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
- package/dist/plugins/parrot/parrot-plugin.js +3 -3
- package/dist/plugins/slash-commands/filter.d.ts +23 -0
- package/dist/plugins/slash-commands/filter.js +31 -0
- package/dist/plugins/slash-commands/index.d.ts +2 -0
- package/dist/plugins/slash-commands/index.js +2 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
- package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
- package/dist/plugins/slash-commands/slash-source.js +108 -0
- package/dist/plugins/toc/TocBlock.svelte +23 -22
- package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
- package/dist/plugins/toc/heading-outline.d.ts +7 -12
- package/dist/plugins/toc/heading-outline.js +22 -36
- package/dist/plugins/toc/navigation-queue.d.ts +2 -4
- package/dist/plugins/toc/toc-plugin.d.ts +5 -5
- package/dist/plugins/toc/toc-plugin.js +20 -13
- package/dist/presentation-mode.d.ts +15 -23
- package/dist/presentation-mode.js +19 -25
- package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
- package/dist/reactivity/block-list-state.svelte.js +8 -9
- package/dist/reactivity/block-window.svelte.d.ts +12 -6
- package/dist/reactivity/block-window.svelte.js +44 -17
- package/dist/reactivity/child-list.d.ts +34 -0
- package/dist/reactivity/child-list.js +48 -0
- package/dist/reactivity/content-version.svelte.d.ts +4 -7
- package/dist/reactivity/content-version.svelte.js +3 -5
- package/dist/reactivity/hold-across.d.ts +39 -0
- package/dist/reactivity/hold-across.js +57 -0
- package/dist/reactivity/layout-state.svelte.d.ts +27 -0
- package/dist/reactivity/layout-state.svelte.js +51 -0
- package/dist/reactivity/list-tree.d.ts +39 -0
- package/dist/reactivity/list-tree.js +132 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
- package/dist/reactivity/list-windowing.svelte.js +143 -292
- package/dist/reactivity/measure-batch.d.ts +6 -8
- package/dist/reactivity/measure-batch.js +5 -6
- package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
- package/dist/reactivity/publish-ref.svelte.js +21 -85
- package/dist/reactivity/scope-geometry.d.ts +6 -13
- package/dist/reactivity/scope-geometry.js +7 -14
- package/dist/reactivity/state-registry.d.ts +5 -5
- package/dist/reactivity/state-registry.js +11 -15
- package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
- package/dist/reactivity/use-container-windowing.svelte.js +64 -74
- package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
- package/dist/reactivity/use-measured-child.svelte.js +41 -0
- package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
- package/dist/reactivity/use-window-floor.svelte.js +27 -0
- package/dist/reactivity/window-slice.d.ts +4 -4
- package/dist/reactivity/window-slice.js +0 -2
- package/dist/renderer-slot.d.ts +48 -0
- package/dist/renderer-slot.js +85 -0
- package/dist/scan-index.d.ts +4 -4
- package/dist/scan-index.js +4 -4
- package/dist/schema/block-commands.d.ts +69 -54
- package/dist/schema/block-commands.js +91 -104
- package/dist/schema/block-completions.d.ts +16 -19
- package/dist/schema/block-completions.js +25 -32
- package/dist/schema/block-component-registry.d.ts +13 -14
- package/dist/schema/block-component-registry.js +19 -17
- package/dist/schema/block-kind-descriptor.d.ts +234 -168
- package/dist/schema/block-kind-descriptor.js +151 -66
- package/dist/schema/block-openers.d.ts +48 -39
- package/dist/schema/block-openers.js +73 -83
- package/dist/schema/built-in-descriptors.d.ts +3 -5
- package/dist/schema/built-in-descriptors.js +96 -80
- package/dist/schema/child-spans.d.ts +12 -10
- package/dist/schema/child-spans.js +68 -34
- package/dist/schema/closure.d.ts +18 -16
- package/dist/schema/closure.js +24 -14
- package/dist/schema/command-id.d.ts +6 -8
- package/dist/schema/command-id.js +20 -25
- package/dist/schema/commands.d.ts +79 -81
- package/dist/schema/commands.js +156 -116
- package/dist/schema/container-raw.d.ts +51 -11
- package/dist/schema/container-raw.js +143 -14
- package/dist/schema/container-rebuilders.d.ts +17 -15
- package/dist/schema/container-rebuilders.js +30 -22
- package/dist/schema/context-actions.d.ts +25 -13
- package/dist/schema/context-actions.js +32 -17
- package/dist/schema/define-plugin-block.d.ts +8 -6
- package/dist/schema/define-plugin-block.js +6 -4
- package/dist/schema/fenced-code-raw.d.ts +30 -17
- package/dist/schema/fenced-code-raw.js +155 -107
- package/dist/schema/global-commands.d.ts +6 -6
- package/dist/schema/global-commands.js +14 -22
- package/dist/schema/height-estimates.d.ts +31 -0
- package/dist/schema/height-estimates.js +64 -0
- package/dist/schema/inline-construct-policy.d.ts +42 -55
- package/dist/schema/inline-construct-policy.js +36 -35
- package/dist/schema/insert-catalogue.d.ts +30 -0
- package/dist/schema/insert-catalogue.js +95 -0
- package/dist/schema/keybinding-overrides.d.ts +9 -11
- package/dist/schema/keybinding-overrides.js +1 -1
- package/dist/schema/keybindings.d.ts +15 -7
- package/dist/schema/keybindings.js +21 -9
- package/dist/schema/merge-rules.d.ts +5 -7
- package/dist/schema/merge-rules.js +7 -9
- package/dist/schema/opener-priorities.d.ts +4 -4
- package/dist/schema/opener-priorities.js +4 -4
- package/dist/schema/operations.d.ts +9 -11
- package/dist/schema/operations.js +3 -3
- package/dist/schema/page-role.d.ts +14 -0
- package/dist/schema/page-role.js +19 -0
- package/dist/schema/plugin-activation.d.ts +4 -6
- package/dist/schema/plugin-activation.js +12 -10
- package/dist/schema/plugin-editor-context.d.ts +25 -10
- package/dist/schema/plugin-editor-context.js +40 -9
- package/dist/schema/plugin-install.d.ts +49 -17
- package/dist/schema/plugin-install.js +51 -25
- package/dist/schema/plugin-kind.d.ts +12 -8
- package/dist/schema/plugin-kind.js +35 -42
- package/dist/schema/plugin-name.js +3 -3
- package/dist/schema/plugin-registry.d.ts +54 -0
- package/dist/schema/plugin-registry.js +70 -0
- package/dist/schema/reading.d.ts +23 -0
- package/dist/schema/reading.js +7 -0
- package/dist/schema/register-once.d.ts +3 -5
- package/dist/schema/register-once.js +7 -16
- package/dist/schema/registration-checks.d.ts +12 -16
- package/dist/schema/registration-checks.js +35 -51
- package/dist/schema/registration-pairs.d.ts +54 -0
- package/dist/schema/registration-pairs.js +48 -0
- package/dist/schema/registration-pending.d.ts +8 -12
- package/dist/schema/registration-pending.js +9 -9
- package/dist/schema/registry-reset.d.ts +8 -4
- package/dist/schema/registry-reset.js +13 -26
- package/dist/schema/registry-view.d.ts +25 -13
- package/dist/schema/registry-view.js +26 -20
- package/dist/schema/reserved-chords.d.ts +9 -10
- package/dist/schema/reserved-chords.js +73 -78
- package/dist/schema/reserved-chrome.d.ts +12 -11
- package/dist/schema/reserved-chrome.js +15 -11
- package/dist/schema/setext-raw.d.ts +13 -0
- package/dist/schema/setext-raw.js +33 -0
- package/dist/schema/stored-as.d.ts +20 -0
- package/dist/schema/stored-as.js +6 -0
- package/dist/schema/table-cell-raw.d.ts +18 -7
- package/dist/schema/table-cell-raw.js +28 -7
- package/dist/schema/whole-block-unit.d.ts +5 -4
- package/dist/schema/whole-block-unit.js +5 -4
- package/dist/search/document-scan.d.ts +3 -3
- package/dist/search/document-scan.js +2 -2
- package/dist/search/matcher.d.ts +1 -1
- package/dist/search/regex-executor.d.ts +5 -6
- package/dist/search/regex-executor.js +6 -8
- package/dist/search/replace.d.ts +2 -5
- package/dist/search/replace.js +2 -5
- package/dist/search/search-state.svelte.d.ts +5 -5
- package/dist/search/search-state.svelte.js +12 -16
- package/dist/selection/autoscroll.d.ts +6 -9
- package/dist/selection/block-hit-test.d.ts +16 -24
- package/dist/selection/block-hit-test.js +29 -22
- package/dist/selection/caret-doors.d.ts +15 -14
- package/dist/selection/caret-doors.js +37 -26
- package/dist/selection/caret-landing.d.ts +62 -0
- package/dist/selection/caret-landing.js +157 -0
- package/dist/selection/caret-restore.d.ts +17 -10
- package/dist/selection/caret-restore.js +10 -22
- package/dist/selection/caret-target.d.ts +30 -0
- package/dist/selection/caret-target.js +84 -0
- package/dist/selection/char-endpoint-snap.d.ts +6 -10
- package/dist/selection/char-endpoint-snap.js +8 -14
- package/dist/selection/clipboard-text.d.ts +5 -12
- package/dist/selection/clipboard-text.js +69 -172
- package/dist/selection/covered-block.d.ts +6 -8
- package/dist/selection/covered-block.js +8 -19
- package/dist/selection/cross-block/clipboard.d.ts +3 -2
- package/dist/selection/cross-block/clipboard.js +13 -4
- package/dist/selection/cross-block/dispatch.d.ts +47 -43
- package/dist/selection/cross-block/dispatch.js +12 -23
- package/dist/selection/cross-block/format-range.d.ts +18 -21
- package/dist/selection/cross-block/format-range.js +104 -103
- package/dist/selection/cross-block/format-toggle.d.ts +10 -15
- package/dist/selection/cross-block/format-toggle.js +28 -33
- package/dist/selection/cross-block/keydown.d.ts +4 -4
- package/dist/selection/cross-block/keydown.js +93 -152
- package/dist/selection/cross-block/ops.d.ts +19 -34
- package/dist/selection/cross-block/ops.js +110 -95
- package/dist/selection/cross-block/paste.d.ts +2 -3
- package/dist/selection/cross-block/paste.js +61 -104
- package/dist/selection/cross-block/pointer.d.ts +17 -15
- package/dist/selection/cross-block/pointer.js +74 -25
- package/dist/selection/cross-block/type-replace.d.ts +4 -6
- package/dist/selection/cross-block/type-replace.js +53 -146
- package/dist/selection/dead-space-caret.d.ts +20 -28
- package/dist/selection/dead-space-caret.js +79 -87
- package/dist/selection/drag-pointer.d.ts +22 -5
- package/dist/selection/drag-pointer.js +63 -31
- package/dist/selection/gap-caret.d.ts +17 -28
- package/dist/selection/gap-caret.js +14 -26
- package/dist/selection/grid-selection.d.ts +12 -0
- package/dist/selection/grid-selection.js +22 -0
- package/dist/selection/keyboard-extend.d.ts +27 -39
- package/dist/selection/keyboard-extend.js +94 -116
- package/dist/selection/multi-click.d.ts +37 -0
- package/dist/selection/multi-click.js +197 -0
- package/dist/selection/native-bridge.d.ts +30 -37
- package/dist/selection/native-bridge.js +80 -100
- package/dist/selection/nearest-block.d.ts +17 -12
- package/dist/selection/nearest-block.js +37 -18
- package/dist/selection/path-lookup.d.ts +31 -14
- package/dist/selection/path-lookup.js +110 -20
- package/dist/selection/path-math.d.ts +9 -11
- package/dist/selection/path-math.js +5 -7
- package/dist/selection/pointer-gesture.d.ts +9 -0
- package/dist/selection/pointer-gesture.js +11 -0
- package/dist/selection/pointer-session.d.ts +10 -16
- package/dist/selection/pointer-session.js +6 -7
- package/dist/selection/primitives.d.ts +64 -33
- package/dist/selection/primitives.js +61 -53
- package/dist/selection/range-coverage.d.ts +94 -0
- package/dist/selection/range-coverage.js +365 -0
- package/dist/selection/range-delete-ceremony.d.ts +28 -74
- package/dist/selection/range-delete-ceremony.js +100 -141
- package/dist/selection/range-delete-chrome.d.ts +20 -33
- package/dist/selection/range-delete-chrome.js +53 -78
- package/dist/selection/range-delete-table-coverage.d.ts +11 -25
- package/dist/selection/range-delete-table-coverage.js +42 -112
- package/dist/selection/range-delete-table.d.ts +14 -12
- package/dist/selection/range-delete-table.js +106 -310
- package/dist/selection/range-delete.d.ts +18 -19
- package/dist/selection/range-delete.js +83 -123
- package/dist/selection/round-trip-restore.d.ts +18 -0
- package/dist/selection/round-trip-restore.js +19 -0
- package/dist/selection/selection-announcer.d.ts +17 -0
- package/dist/selection/selection-announcer.js +25 -0
- package/dist/selection/selection-description.d.ts +4 -3
- package/dist/selection/selection-description.js +5 -4
- package/dist/selection/selection-drop.d.ts +52 -0
- package/dist/selection/selection-drop.js +317 -0
- package/dist/selection/selection-restore.d.ts +20 -33
- package/dist/selection/selection-restore.js +21 -44
- package/dist/selection/selection-state.svelte.d.ts +50 -42
- package/dist/selection/selection-state.svelte.js +144 -98
- package/dist/selection/shared-keydown.d.ts +22 -27
- package/dist/selection/shared-keydown.js +25 -45
- package/dist/selection/table-endpoint-snap.d.ts +17 -41
- package/dist/selection/table-endpoint-snap.js +54 -80
- package/dist/selection/table-rect-extend.d.ts +3 -6
- package/dist/selection/table-rect-extend.js +19 -14
- package/dist/styles/editor-theme.css +75 -53
- package/dist/styles/editor.css +248 -139
- package/dist/testing/conformance-core.d.ts +50 -18
- package/dist/testing/conformance-core.js +88 -50
- package/dist/testing/container-conformance.d.ts +48 -84
- package/dist/testing/container-conformance.js +159 -285
- package/dist/testing/headless-actions.d.ts +34 -19
- package/dist/testing/headless-actions.js +116 -65
- package/dist/testing/headless-block-list.svelte.d.ts +16 -0
- package/dist/testing/headless-block-list.svelte.js +22 -0
- package/dist/testing/inline-conformance.d.ts +15 -22
- package/dist/testing/inline-conformance.js +131 -148
- package/dist/testing/kind-conformance.d.ts +19 -24
- package/dist/testing/kind-conformance.js +204 -117
- package/dist/testing/kit-reading.d.ts +7 -0
- package/dist/testing/kit-reading.js +16 -0
- package/dist/testing/mount-dom-stubs.d.ts +4 -5
- package/dist/testing/mount-dom-stubs.js +8 -5
- package/dist/testing/parse-convergence.d.ts +10 -10
- package/dist/testing/parse-convergence.js +14 -49
- package/dist/testing.d.ts +13 -9
- package/dist/testing.js +28 -38
- package/dist/tree-operations/blockquote.d.ts +8 -14
- package/dist/tree-operations/blockquote.js +25 -45
- package/dist/tree-operations/chain-rebuild.d.ts +34 -25
- package/dist/tree-operations/chain-rebuild.js +115 -52
- package/dist/tree-operations/children.d.ts +5 -9
- package/dist/tree-operations/children.js +7 -11
- package/dist/tree-operations/cleanup.d.ts +6 -7
- package/dist/tree-operations/cleanup.js +14 -11
- package/dist/tree-operations/clone.js +5 -4
- package/dist/tree-operations/container-lift.d.ts +10 -5
- package/dist/tree-operations/container-lift.js +20 -14
- package/dist/tree-operations/container-offsets.d.ts +22 -0
- package/dist/tree-operations/container-offsets.js +89 -0
- package/dist/tree-operations/content-write.d.ts +52 -29
- package/dist/tree-operations/content-write.js +155 -110
- package/dist/tree-operations/index.d.ts +4 -4
- package/dist/tree-operations/index.js +4 -4
- package/dist/tree-operations/keep-one-block.d.ts +10 -0
- package/dist/tree-operations/keep-one-block.js +19 -0
- package/dist/tree-operations/leaf-range.d.ts +33 -0
- package/dist/tree-operations/leaf-range.js +67 -0
- package/dist/tree-operations/list/empty-check.d.ts +2 -3
- package/dist/tree-operations/list/empty-check.js +4 -4
- package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
- package/dist/tree-operations/list/exit-replacement.js +4 -9
- package/dist/tree-operations/list/item-partition.d.ts +2 -2
- package/dist/tree-operations/list/item-partition.js +2 -2
- package/dist/tree-operations/list/list-builders.d.ts +18 -16
- package/dist/tree-operations/list/list-builders.js +59 -30
- package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
- package/dist/tree-operations/list/ordered-markers.js +7 -16
- package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
- package/dist/tree-operations/list/reconcile-task.js +80 -23
- package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
- package/dist/tree-operations/list/sublist-separator.js +20 -27
- package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
- package/dist/tree-operations/list/task-paragraph.js +54 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
- package/dist/tree-operations/list/unwrap-merge.js +44 -79
- package/dist/tree-operations/node-ops.d.ts +30 -52
- package/dist/tree-operations/node-ops.js +152 -218
- package/dist/tree-operations/node-primitives.d.ts +44 -31
- package/dist/tree-operations/node-primitives.js +84 -60
- package/dist/tree-operations/open-tail.d.ts +25 -0
- package/dist/tree-operations/open-tail.js +100 -0
- package/dist/tree-operations/parse-block.d.ts +15 -2
- package/dist/tree-operations/parse-block.js +19 -4
- package/dist/tree-operations/paste/apply.d.ts +7 -8
- package/dist/tree-operations/paste/apply.js +33 -63
- package/dist/tree-operations/paste/body-write.d.ts +8 -6
- package/dist/tree-operations/paste/body-write.js +13 -14
- package/dist/tree-operations/paste/container-match.d.ts +7 -10
- package/dist/tree-operations/paste/container-match.js +76 -58
- package/dist/tree-operations/paste/container-paste.d.ts +3 -3
- package/dist/tree-operations/paste/container-paste.js +3 -3
- package/dist/tree-operations/paste/dispatch.d.ts +26 -29
- package/dist/tree-operations/paste/dispatch.js +68 -53
- package/dist/tree-operations/paste/focus-target.d.ts +11 -14
- package/dist/tree-operations/paste/focus-target.js +13 -18
- package/dist/tree-operations/paste/hooks.d.ts +7 -12
- package/dist/tree-operations/paste/hooks.js +49 -46
- package/dist/tree-operations/paste/line-ending.d.ts +11 -0
- package/dist/tree-operations/paste/line-ending.js +32 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
- package/dist/tree-operations/paste/list-absorb.js +17 -19
- package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
- package/dist/tree-operations/paste/list-break-out.js +24 -32
- package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
- package/dist/tree-operations/paste/parent-scope.js +9 -16
- package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
- package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
- package/dist/tree-operations/paste/paste-replacement.js +73 -42
- package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
- package/dist/tree-operations/paste/paste-transforms.js +18 -27
- package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
- package/dist/tree-operations/paste/replacement-parse.js +24 -0
- package/dist/tree-operations/paste/strategy.d.ts +1 -1
- package/dist/tree-operations/paste/strategy.js +1 -1
- package/dist/tree-operations/paste/table-slice.js +15 -10
- package/dist/tree-operations/paste-surfaces.d.ts +18 -29
- package/dist/tree-operations/paste-surfaces.js +14 -10
- package/dist/tree-operations/path-mutate.d.ts +7 -8
- package/dist/tree-operations/path-mutate.js +4 -4
- package/dist/tree-operations/reorder-unit.d.ts +4 -5
- package/dist/tree-operations/reorder-unit.js +5 -6
- package/dist/tree-operations/reorder.d.ts +7 -9
- package/dist/tree-operations/reorder.js +39 -40
- package/dist/tree-operations/settle.d.ts +42 -53
- package/dist/tree-operations/settle.js +241 -162
- package/dist/tree-operations/sharing.d.ts +5 -5
- package/dist/tree-operations/splice-many.d.ts +5 -5
- package/dist/tree-operations/splice-many.js +5 -5
- package/dist/tree-operations/stored-as.d.ts +13 -0
- package/dist/tree-operations/stored-as.js +48 -0
- package/dist/tree-operations/structural-change.d.ts +11 -15
- package/dist/tree-operations/structural-change.js +10 -14
- package/dist/tree-operations/structural-suffix.d.ts +22 -0
- package/dist/tree-operations/structural-suffix.js +61 -0
- package/dist/tree-operations/sub-table-copy.d.ts +7 -0
- package/dist/tree-operations/sub-table-copy.js +40 -36
- package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
- package/dist/tree-operations/table-grid-clipboard.js +11 -36
- package/dist/tree-operations/table-mutations.d.ts +7 -3
- package/dist/tree-operations/table-mutations.js +45 -9
- package/dist/tree-operations/unshare.d.ts +11 -15
- package/dist/tree-operations/unshare.js +15 -17
- package/dist/undo/manager.js +1 -1
- package/dist/undo/types.d.ts +2 -2
- package/docs/guide/consumer-guide.md +329 -205
- package/docs/guide/directives.md +7 -7
- package/docs/guide/plugin-api.md +267 -183
- package/docs/guide/plugin-guide.md +341 -235
- package/docs/guide/plugin-testing.md +96 -82
- package/package.json +17 -21
- package/dist/ambient/ambient-cursor.d.ts +0 -41
- package/dist/ambient/ambient-cursor.js +0 -120
- package/dist/components/blocks/code/code-paste.d.ts +0 -24
- package/dist/components/blocks/code/code-paste.js +0 -21
- package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
- package/dist/components/blocks/table/cell-clipboard.js +0 -67
- package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
- package/dist/components/blocks/text/hidden-suffix.js +0 -15
- package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
- package/dist/components/image/image-source-bytes.d.ts +0 -15
- package/dist/components/image/image-source-bytes.js +0 -80
- package/dist/cursor/content-offsets.d.ts +0 -29
- package/dist/cursor/content-offsets.js +0 -151
- package/dist/cursor/reveal-anchor.d.ts +0 -30
- package/dist/cursor/reveal-anchor.js +0 -31
- package/dist/invariants/split-landing.d.ts +0 -8
- package/dist/invariants/split-landing.js +0 -15
- package/dist/selection/double-click-trim.d.ts +0 -17
- package/dist/selection/double-click-trim.js +0 -57
- package/dist/tree-operations/list/terminator.d.ts +0 -17
- package/dist/tree-operations/list/terminator.js +0 -60
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
- package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* A container's inner
|
|
3
|
-
*
|
|
4
|
-
* apply `StructuralChange`
|
|
2
|
+
* A container's inner block list: where its keyed-each ids come from and where its child
|
|
3
|
+
* component refs are stored. Structural changes go through the commit calls on
|
|
4
|
+
* `UndoController`, which apply a `StructuralChange` to keep ids and refs lined up with the
|
|
5
|
+
* children.
|
|
5
6
|
*/
|
|
6
7
|
import { assignIds } from '../block-id';
|
|
7
8
|
import { registerBlockListState } from './state-registry';
|
|
8
9
|
import { refSlotsOver } from './publish-ref.svelte';
|
|
9
|
-
/** `getNode` must be a live getter
|
|
10
|
-
*
|
|
11
|
-
* the bytes-view carve-out. */
|
|
10
|
+
/** `getNode` must be a live getter: a node passed by value goes stale when undo swaps in a deep
|
|
11
|
+
* clone. A view is enough, since `childIds` is the only field written. */
|
|
12
12
|
export function createBlockListState(getNode) {
|
|
13
13
|
const initialNode = getNode();
|
|
14
14
|
if (!initialNode.childIds) {
|
|
@@ -34,9 +34,8 @@ export function createBlockListState(getNode) {
|
|
|
34
34
|
node.childIds = assignIds(node.children ?? []);
|
|
35
35
|
}
|
|
36
36
|
registerBlockListState(node, state);
|
|
37
|
-
// A parent
|
|
38
|
-
//
|
|
39
|
-
// the array, and refs length must track children exactly, so reconcile it here.
|
|
37
|
+
// A replacement in the parent list can reuse this instance with fewer children, and ref
|
|
38
|
+
// cleanup empties entries without shrinking the array; the refs must match the children.
|
|
40
39
|
const childCount = node.children?.length ?? 0;
|
|
41
40
|
if (innerBlockRefs.length > childCount) {
|
|
42
41
|
innerBlockRefs.length = childCount;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { HeightModel } from '../cursor/height-model';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ScrollportReader } from '../cursor/scrollport';
|
|
3
3
|
export interface WindowInputs {
|
|
4
4
|
scrollTop: number;
|
|
5
5
|
viewportHeight: number;
|
|
@@ -16,15 +16,22 @@ export interface WindowResult {
|
|
|
16
16
|
end: number;
|
|
17
17
|
topSpacerPx: number;
|
|
18
18
|
bottomSpacerPx: number;
|
|
19
|
+
/** The table's height for the whole list, which `useWindowFloor` holds the list's box at while
|
|
20
|
+
* the window changes; 0 when not windowing. */
|
|
21
|
+
floorPx: number;
|
|
19
22
|
}
|
|
20
23
|
export declare function computeWindow(model: HeightModel, input: WindowInputs): WindowResult;
|
|
21
24
|
export interface BlockWindowDeps {
|
|
22
25
|
getModel: () => HeightModel;
|
|
23
|
-
getPort: () =>
|
|
24
|
-
/**
|
|
26
|
+
getPort: () => ScrollportReader | null;
|
|
27
|
+
/** Convert the scroll container's `scrollTop` into this list's own range. Unchanged at the
|
|
28
|
+
* top level. */
|
|
25
29
|
getLocalScrollTop: () => number;
|
|
26
30
|
getViewportHeight: () => number;
|
|
27
31
|
getPinnedIndex: () => number | null;
|
|
32
|
+
/** True while a height change's scroll correction is still to come: the range then keeps the
|
|
33
|
+
* blocks it has as well, since the scroll doesn't match the table yet. */
|
|
34
|
+
holdsRange: () => boolean;
|
|
28
35
|
overscan: number;
|
|
29
36
|
pinExtensionCap: number;
|
|
30
37
|
activateAbovePx: number;
|
|
@@ -32,9 +39,8 @@ export interface BlockWindowDeps {
|
|
|
32
39
|
}
|
|
33
40
|
export interface BlockWindow {
|
|
34
41
|
readonly result: WindowResult;
|
|
35
|
-
/**
|
|
36
|
-
*
|
|
37
|
-
* listener wouldn't update the derived in time for a deterministic reveal. */
|
|
42
|
+
/** A scripted `scrollTop` write fires no `scroll` event, so a scroll into view calls this to
|
|
43
|
+
* update the window before reading it. */
|
|
38
44
|
syncScrollTop(): void;
|
|
39
45
|
dispose(): void;
|
|
40
46
|
}
|
|
@@ -1,28 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Window math for virtual rendering
|
|
3
|
-
* scroll
|
|
4
|
-
*
|
|
5
|
-
* activation state. `createBlockWindow` wires live getters and a scroll listener to it.
|
|
2
|
+
* Window math for virtual rendering: which blocks to mount, and the spacer heights that keep the
|
|
3
|
+
* browser's scroll geometry. `computeWindow` is pure; `createBlockWindow` wires live getters and
|
|
4
|
+
* a scroll listener to it.
|
|
6
5
|
*/
|
|
7
6
|
import { untrack } from 'svelte';
|
|
8
7
|
export function computeWindow(model, input) {
|
|
9
8
|
const n = model.size;
|
|
10
9
|
const total = model.total();
|
|
11
|
-
// The one
|
|
12
|
-
// height, so who owns the scroll changes which
|
|
10
|
+
// The one place windowing turns on or off: a list decides purely on its own estimated
|
|
11
|
+
// height, so who owns the scroll changes which container is read and nothing else.
|
|
13
12
|
const active = input.active ? total >= input.deactivateBelowPx : total >= input.activateAbovePx;
|
|
14
13
|
if (!active || n === 0) {
|
|
15
|
-
return { active: false, start: 0, end: n, topSpacerPx: 0, bottomSpacerPx: 0 };
|
|
14
|
+
return { active: false, start: 0, end: n, topSpacerPx: 0, bottomSpacerPx: 0, floorPx: 0 };
|
|
16
15
|
}
|
|
17
16
|
const firstVisible = model.indexAtOffset(input.scrollTop);
|
|
18
|
-
//
|
|
19
|
-
// exactly on the bottom edge isn't visible.
|
|
17
|
+
// Check the last on-screen pixel: the viewport range is half-open, so a block whose top
|
|
18
|
+
// sits exactly on the bottom edge isn't visible.
|
|
20
19
|
const lastVisible = model.indexAtOffset(input.scrollTop + input.viewportHeight - 1);
|
|
21
20
|
let start = Math.max(0, firstVisible - input.overscan);
|
|
22
21
|
let end = Math.min(n, lastVisible + 1 + input.overscan);
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
// doesn't mount thousands. Beyond the cap it blurs.
|
|
22
|
+
// Growing the range to the caret block keeps its DOM node, so focus and IME survive a scroll;
|
|
23
|
+
// capped so a caret left far away doesn't mount thousands of blocks (it loses focus instead).
|
|
26
24
|
const pin = input.pinnedIndex;
|
|
27
25
|
if (pin !== null && pin >= 0 && pin < n) {
|
|
28
26
|
if (pin < start && start - pin <= input.pinExtensionCap)
|
|
@@ -35,7 +33,21 @@ export function computeWindow(model, input) {
|
|
|
35
33
|
start,
|
|
36
34
|
end,
|
|
37
35
|
topSpacerPx: model.offsetOf(start),
|
|
38
|
-
bottomSpacerPx: total - model.offsetOf(end)
|
|
36
|
+
bottomSpacerPx: total - model.offsetOf(end),
|
|
37
|
+
floorPx: total
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** `next` widened to keep `shown`'s blocks too, with the spacers the table now gives them. */
|
|
41
|
+
function widened(model, next, shown) {
|
|
42
|
+
const end = Math.min(Math.max(next.end, shown.end), model.size);
|
|
43
|
+
const start = Math.min(next.start, shown.start, end);
|
|
44
|
+
return {
|
|
45
|
+
active: true,
|
|
46
|
+
start,
|
|
47
|
+
end,
|
|
48
|
+
topSpacerPx: model.offsetOf(start),
|
|
49
|
+
bottomSpacerPx: model.total() - model.offsetOf(end),
|
|
50
|
+
floorPx: model.total()
|
|
39
51
|
};
|
|
40
52
|
}
|
|
41
53
|
export function createBlockWindow(deps) {
|
|
@@ -56,8 +68,11 @@ export function createBlockWindow(deps) {
|
|
|
56
68
|
unsubscribe = null;
|
|
57
69
|
};
|
|
58
70
|
});
|
|
71
|
+
// Plain, not state: the range last shown, and the scroll it was worked out at.
|
|
72
|
+
let last = null;
|
|
59
73
|
const result = $derived.by(() => {
|
|
60
|
-
|
|
74
|
+
const model = deps.getModel();
|
|
75
|
+
const next = computeWindow(model, {
|
|
61
76
|
scrollTop,
|
|
62
77
|
viewportHeight: deps.getViewportHeight(),
|
|
63
78
|
overscan: deps.overscan,
|
|
@@ -67,10 +82,22 @@ export function createBlockWindow(deps) {
|
|
|
67
82
|
activateAbovePx: deps.activateAbovePx,
|
|
68
83
|
deactivateBelowPx: deps.deactivateBelowPx
|
|
69
84
|
});
|
|
85
|
+
// Unmounting the blocks at the top before the correction lands would remount them fresh; a
|
|
86
|
+
// range the new one doesn't touch is a jump elsewhere, and goes.
|
|
87
|
+
const shown = last?.scrollTop === scrollTop ? last.result : null;
|
|
88
|
+
const kept = shown &&
|
|
89
|
+
shown.active &&
|
|
90
|
+
next.active &&
|
|
91
|
+
next.start <= shown.end &&
|
|
92
|
+
shown.start <= next.end &&
|
|
93
|
+
deps.holdsRange()
|
|
94
|
+
? widened(model, next, shown)
|
|
95
|
+
: next;
|
|
96
|
+
last = { result: kept, scrollTop };
|
|
97
|
+
return kept;
|
|
70
98
|
});
|
|
71
|
-
// Hysteresis
|
|
72
|
-
//
|
|
73
|
-
// converges: once `active` equals `result.active` the guard writes nothing.
|
|
99
|
+
// Hysteresis: `result` reads `active` and this effect writes it, so the write is untracked
|
|
100
|
+
// and skipped when unchanged, or the effect would depend on its own write.
|
|
74
101
|
$effect(() => {
|
|
75
102
|
const next = result.active;
|
|
76
103
|
untrack(() => {
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One block list's children as a walk down the tree reads them, and the two walks: `descendTo`
|
|
3
|
+
* scrolls each level's child into the mounted range, `componentAt` reads only what is mounted.
|
|
4
|
+
* The editor root, every container, the table and each table row publish one.
|
|
5
|
+
*/
|
|
6
|
+
import type { BlockComponent } from '../block-component';
|
|
7
|
+
import { type RefSlots } from './publish-ref.svelte';
|
|
8
|
+
/** One mounted child list, as the descent reads it. Every field is read live. */
|
|
9
|
+
export interface ChildList {
|
|
10
|
+
count(): number;
|
|
11
|
+
readonly refs: RefSlots<BlockComponent>;
|
|
12
|
+
/** Required, so a list that cannot say whether a child is in range cannot exist. */
|
|
13
|
+
readonly windowing: {
|
|
14
|
+
/** Scrolls this list so child `index` is inside the mounted range; resolves after a tick. */
|
|
15
|
+
revealChild(index: number): Promise<void>;
|
|
16
|
+
/** Whether `index` is inside the mounted range. */
|
|
17
|
+
isInWindow(index: number): boolean;
|
|
18
|
+
};
|
|
19
|
+
/** Scrolls child `index` into this list's own scroller on another axis (a table's columns). */
|
|
20
|
+
bringChildIntoView?(index: number): void;
|
|
21
|
+
/** True while only the title row (child 0) is mounted. */
|
|
22
|
+
isCollapsed?(): boolean;
|
|
23
|
+
/** Opens a collapsed body as an undoable commit, for a descent asked to open one. */
|
|
24
|
+
openCollapsed?(): Promise<boolean>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Mounts each level of `path` below `root` and returns the component at its end, or null when
|
|
28
|
+
* a level can't mount. A path into a collapsed body stops there unless `openCollapsed` is set.
|
|
29
|
+
*/
|
|
30
|
+
export declare function descendTo(root: ChildList, path: readonly number[], opts?: {
|
|
31
|
+
openCollapsed?: boolean;
|
|
32
|
+
}): Promise<BlockComponent | null>;
|
|
33
|
+
/** The mounted component at `path`, or null; never mounts anything. */
|
|
34
|
+
export declare function componentAt(root: ChildList, path: readonly number[]): BlockComponent | null;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { revealChildOrWait } from './publish-ref.svelte';
|
|
2
|
+
/**
|
|
3
|
+
* Mounts each level of `path` below `root` and returns the component at its end, or null when
|
|
4
|
+
* a level can't mount. A path into a collapsed body stops there unless `openCollapsed` is set.
|
|
5
|
+
*/
|
|
6
|
+
export async function descendTo(root, path, opts = {}) {
|
|
7
|
+
let list = root;
|
|
8
|
+
for (let depth = 0; depth < path.length; depth++) {
|
|
9
|
+
const index = path[depth];
|
|
10
|
+
// Only a body child is hidden; the title row stays mounted while collapsed.
|
|
11
|
+
if (index >= 1 && list.isCollapsed?.()) {
|
|
12
|
+
if (!opts.openCollapsed || !list.openCollapsed)
|
|
13
|
+
return null;
|
|
14
|
+
await list.openCollapsed();
|
|
15
|
+
}
|
|
16
|
+
const { windowing } = list;
|
|
17
|
+
await revealChildOrWait(index, {
|
|
18
|
+
slots: list.refs,
|
|
19
|
+
childCount: list.count(),
|
|
20
|
+
revealChild: (i) => windowing.revealChild(i),
|
|
21
|
+
isInWindow: (i) => windowing.isInWindow(i)
|
|
22
|
+
});
|
|
23
|
+
const ref = list.refs.get(index);
|
|
24
|
+
if (!ref)
|
|
25
|
+
return null;
|
|
26
|
+
list.bringChildIntoView?.(index);
|
|
27
|
+
if (depth === path.length - 1)
|
|
28
|
+
return ref;
|
|
29
|
+
const next = ref.childList?.();
|
|
30
|
+
if (!next)
|
|
31
|
+
return null;
|
|
32
|
+
list = next;
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
/** The mounted component at `path`, or null; never mounts anything. */
|
|
37
|
+
export function componentAt(root, path) {
|
|
38
|
+
let list = root;
|
|
39
|
+
for (let depth = 0; depth < path.length && list; depth++) {
|
|
40
|
+
const ref = list.refs.get(path[depth]);
|
|
41
|
+
if (!ref)
|
|
42
|
+
return null;
|
|
43
|
+
if (depth === path.length - 1)
|
|
44
|
+
return ref;
|
|
45
|
+
list = ref.childList?.();
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* A number
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* censused (G4.52): the commit ceremony announces every structural write at its publish, and the
|
|
6
|
-
* writers outside it announce their own.
|
|
2
|
+
* A number bumped whenever the document's bytes change, so a whole-document `$derived` can
|
|
3
|
+
* memoize over a `$state` document that is mutated in place and never changes identity.
|
|
4
|
+
* Every place that writes bytes must bump it; a commit does so for each structural write (G4.52).
|
|
7
5
|
*/
|
|
8
6
|
export interface ContentVersion {
|
|
9
|
-
/** The current key, stable until a door bumps it. */
|
|
10
7
|
read(): number;
|
|
11
|
-
/**
|
|
8
|
+
/** Call after changing the document's serialized bytes. */
|
|
12
9
|
bump(): void;
|
|
13
10
|
}
|
|
14
11
|
export declare function createContentVersion(): ContentVersion;
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* A number
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* censused (G4.52): the commit ceremony announces every structural write at its publish, and the
|
|
6
|
-
* writers outside it announce their own.
|
|
2
|
+
* A number bumped whenever the document's bytes change, so a whole-document `$derived` can
|
|
3
|
+
* memoize over a `$state` document that is mutated in place and never changes identity.
|
|
4
|
+
* Every place that writes bytes must bump it; a commit does so for each structural write (G4.52).
|
|
7
5
|
*/
|
|
8
6
|
export function createContentVersion() {
|
|
9
7
|
let version = $state(0);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which block stays still across a measure round, picked level by level down the document's
|
|
3
|
+
* block lists before the round, and where it is once the round's changes have landed. See
|
|
4
|
+
* `docs/design/virtual-rendering.md` § Keeping the page still while heights change.
|
|
5
|
+
*/
|
|
6
|
+
import type { HeightModel } from '../cursor/height-model';
|
|
7
|
+
/** A list's block heights, with the ids they were built from lined up by index. */
|
|
8
|
+
export interface HeightTable {
|
|
9
|
+
readonly model: HeightModel;
|
|
10
|
+
/** A snapshot, so a round finds its held block by id in the order from before a change. */
|
|
11
|
+
readonly ids: readonly string[];
|
|
12
|
+
}
|
|
13
|
+
declare const picked: unique symbol;
|
|
14
|
+
declare const measured: unique symbol;
|
|
15
|
+
/** The block a list keeps still, with its index in the table it was picked from. Only
|
|
16
|
+
* `heldBlock` makes one. */
|
|
17
|
+
export type HeldBlock = {
|
|
18
|
+
readonly id: string;
|
|
19
|
+
readonly index: number;
|
|
20
|
+
/** Picked because the caret is in it, which a change that moves it cancels. */
|
|
21
|
+
readonly focused: boolean;
|
|
22
|
+
readonly [picked]: true;
|
|
23
|
+
};
|
|
24
|
+
/** How far the held block's top moved across a round. Only `heldDelta` makes one, so a
|
|
25
|
+
* correction can't use a distance worked out some other way. */
|
|
26
|
+
export type HeldDelta = number & {
|
|
27
|
+
readonly [measured]: true;
|
|
28
|
+
};
|
|
29
|
+
/** The focused block's index among the children of the list at `listPath`, or null when the
|
|
30
|
+
* focus path doesn't run through that list. */
|
|
31
|
+
export declare function focusedIndexIn(focusPath: readonly number[] | null, listPath: readonly number[]): number | null;
|
|
32
|
+
/** The focused block when it sits at or below `localTop`, else the block at the top, else none. */
|
|
33
|
+
export declare function heldBlock(table: HeightTable, localTop: number, focusedIndex: number | null): HeldBlock | null;
|
|
34
|
+
/** Where `held` sits in `after`, or -1 when the change removed it, or moved the caret's block
|
|
35
|
+
* (a reorder moves its block on a still page, so that block isn't held). */
|
|
36
|
+
export declare function heldIndexIn(held: HeldBlock, before: HeightTable, after: HeightTable): number;
|
|
37
|
+
/** The distance a round corrects by: the held block's offset after it minus before. */
|
|
38
|
+
export declare function heldDelta(before: number, after: number): HeldDelta;
|
|
39
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { recordNeighbourPass } from '../perf/instruments';
|
|
2
|
+
/** The focused block's index among the children of the list at `listPath`, or null when the
|
|
3
|
+
* focus path doesn't run through that list. */
|
|
4
|
+
export function focusedIndexIn(focusPath, listPath) {
|
|
5
|
+
if (!focusPath || focusPath.length <= listPath.length)
|
|
6
|
+
return null;
|
|
7
|
+
for (let i = 0; i < listPath.length; i++)
|
|
8
|
+
if (focusPath[i] !== listPath[i])
|
|
9
|
+
return null;
|
|
10
|
+
return focusPath[listPath.length];
|
|
11
|
+
}
|
|
12
|
+
/** The focused block when it sits at or below `localTop`, else the block at the top, else none. */
|
|
13
|
+
export function heldBlock(table, localTop, focusedIndex) {
|
|
14
|
+
// Past the end the viewport's top is below this list, so the pick stays with its container.
|
|
15
|
+
if (table.model.size === 0 || localTop >= table.model.total())
|
|
16
|
+
return null;
|
|
17
|
+
const topIndex = table.model.indexAtOffset(localTop);
|
|
18
|
+
const focused = focusedIndex ?? -1;
|
|
19
|
+
if (focused >= topIndex && focused < table.ids.length)
|
|
20
|
+
return pick(table, focused, true);
|
|
21
|
+
// At 0 the viewport's top is above this list, in its container's chrome or further up.
|
|
22
|
+
return localTop === 0 ? null : pick(table, topIndex, false);
|
|
23
|
+
}
|
|
24
|
+
/** Where `held` sits in `after`, or -1 when the change removed it, or moved the caret's block
|
|
25
|
+
* (a reorder moves its block on a still page, so that block isn't held). */
|
|
26
|
+
export function heldIndexIn(held, before, after) {
|
|
27
|
+
if (after === before)
|
|
28
|
+
return held.index;
|
|
29
|
+
const index = after.ids.indexOf(held.id);
|
|
30
|
+
if (index === -1 || !held.focused)
|
|
31
|
+
return index;
|
|
32
|
+
return movedAcross(before, after, held.index, index) ? -1 : index;
|
|
33
|
+
}
|
|
34
|
+
/** The distance a round corrects by: the held block's offset after it minus before. */
|
|
35
|
+
export function heldDelta(before, after) {
|
|
36
|
+
return (after - before);
|
|
37
|
+
}
|
|
38
|
+
function pick(table, index, focused) {
|
|
39
|
+
return { id: table.ids[index], index, focused };
|
|
40
|
+
}
|
|
41
|
+
// A block whose surviving neighbours changed was moved by the edit.
|
|
42
|
+
function movedAcross(before, after, index, afterIndex) {
|
|
43
|
+
recordNeighbourPass();
|
|
44
|
+
const inAfter = new Set(after.ids);
|
|
45
|
+
const inBefore = new Set(before.ids);
|
|
46
|
+
return (survivingNeighbour(before.ids, index, -1, inAfter) !==
|
|
47
|
+
survivingNeighbour(after.ids, afterIndex, -1, inBefore) ||
|
|
48
|
+
survivingNeighbour(before.ids, index, 1, inAfter) !==
|
|
49
|
+
survivingNeighbour(after.ids, afterIndex, 1, inBefore));
|
|
50
|
+
}
|
|
51
|
+
function survivingNeighbour(ids, index, step, survivors) {
|
|
52
|
+
for (let i = index + step; i >= 0 && i < ids.length; i += step) {
|
|
53
|
+
if (survivors.has(ids[i]))
|
|
54
|
+
return ids[i];
|
|
55
|
+
}
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the editor's heights were measured for: the type scale, the width version the block lists
|
|
3
|
+
* rebuild their tables off, and the viewport-height version, which only changes how many blocks
|
|
4
|
+
* fit. Layout state builds the height estimator and hands out its reads alone, so it's the one
|
|
5
|
+
* place measured heights can be thrown away (G4.98): a route reports what changed.
|
|
6
|
+
*/
|
|
7
|
+
import { type MeasuredHeightOracle } from '../cursor/height-oracle';
|
|
8
|
+
export interface LayoutState {
|
|
9
|
+
/** The editor's height estimator, without the drop. */
|
|
10
|
+
heightOracle: Omit<MeasuredHeightOracle, 'dropMeasured'>;
|
|
11
|
+
/** The host's font scale against `HEIGHT_ESTIMATES`. A plain read, since the height estimates
|
|
12
|
+
* read it on the keystroke path and the width version already signals the rebuild. */
|
|
13
|
+
typeScale(): number;
|
|
14
|
+
widthVersion(): number;
|
|
15
|
+
viewportHeightVersion(): number;
|
|
16
|
+
/** A document swap or a mode switch: the measured heights belong to a view that's gone. The
|
|
17
|
+
* width version stays, since a rebuild would lose the block held in place. */
|
|
18
|
+
forgetMeasuredHeights(): void;
|
|
19
|
+
/** A width change re-wraps every block: the measured heights go, and every list re-estimates
|
|
20
|
+
* its table. */
|
|
21
|
+
rebuildForNewGeometry(): void;
|
|
22
|
+
/** A new font scale is a geometry change too. */
|
|
23
|
+
setTypeScale(next: number): void;
|
|
24
|
+
/** The scroll container's height changed; that re-wraps nothing, so every height stays. */
|
|
25
|
+
noteViewportHeight(): void;
|
|
26
|
+
}
|
|
27
|
+
export declare function createLayoutState(): LayoutState;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the editor's heights were measured for: the type scale, the width version the block lists
|
|
3
|
+
* rebuild their tables off, and the viewport-height version, which only changes how many blocks
|
|
4
|
+
* fit. Layout state builds the height estimator and hands out its reads alone, so it's the one
|
|
5
|
+
* place measured heights can be thrown away (G4.98): a route reports what changed.
|
|
6
|
+
*/
|
|
7
|
+
import { createHeightOracle } from '../cursor/height-oracle';
|
|
8
|
+
import { HEIGHT_ESTIMATES } from '../cursor/typography-estimates';
|
|
9
|
+
export function createLayoutState() {
|
|
10
|
+
let typeScale = 1;
|
|
11
|
+
let widthVersion = $state(0);
|
|
12
|
+
let viewportHeightVersion = $state(0);
|
|
13
|
+
// Only font-relative terms scale; getters, so a scale change needs no new height estimator.
|
|
14
|
+
const oracle = createHeightOracle({
|
|
15
|
+
get lineHeight() {
|
|
16
|
+
return HEIGHT_ESTIMATES.proseLineHeight * typeScale;
|
|
17
|
+
},
|
|
18
|
+
get codeLineHeight() {
|
|
19
|
+
return HEIGHT_ESTIMATES.codeLineHeight * typeScale;
|
|
20
|
+
},
|
|
21
|
+
get avgCharWidth() {
|
|
22
|
+
return HEIGHT_ESTIMATES.avgCharWidth * typeScale;
|
|
23
|
+
},
|
|
24
|
+
blockChrome: HEIGHT_ESTIMATES.blockChrome,
|
|
25
|
+
imageBlockMinHeight: HEIGHT_ESTIMATES.imageBlockMinHeight
|
|
26
|
+
});
|
|
27
|
+
function rebuildForNewGeometry() {
|
|
28
|
+
oracle.dropMeasured();
|
|
29
|
+
widthVersion++;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
heightOracle: {
|
|
33
|
+
estimate: oracle.estimate,
|
|
34
|
+
measured: oracle.measured,
|
|
35
|
+
recordMeasured: oracle.recordMeasured,
|
|
36
|
+
measuredIds: oracle.measuredIds
|
|
37
|
+
},
|
|
38
|
+
typeScale: () => typeScale,
|
|
39
|
+
widthVersion: () => widthVersion,
|
|
40
|
+
viewportHeightVersion: () => viewportHeightVersion,
|
|
41
|
+
forgetMeasuredHeights: () => oracle.dropMeasured(),
|
|
42
|
+
rebuildForNewGeometry,
|
|
43
|
+
setTypeScale(next) {
|
|
44
|
+
typeScale = next;
|
|
45
|
+
rebuildForNewGeometry();
|
|
46
|
+
},
|
|
47
|
+
noteViewportHeight: () => {
|
|
48
|
+
viewportHeightVersion++;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every mounted block list of one editor, so the scroll owner can read the document through their
|
|
3
|
+
* height tables: where a block sits, and which one block to keep still across a measure round.
|
|
4
|
+
* See `docs/design/virtual-rendering.md` § Keeping the page still while heights change.
|
|
5
|
+
*/
|
|
6
|
+
import type { TargetTop } from '../cursor/scroll-owner';
|
|
7
|
+
import { type HeightTable, type HeldDelta } from './hold-across';
|
|
8
|
+
/** One block list as the tree reads it. */
|
|
9
|
+
export interface ListLevel {
|
|
10
|
+
path(): readonly number[];
|
|
11
|
+
/** The table as last built, read without building one: what a round opening in the middle of
|
|
12
|
+
* a change counts from. */
|
|
13
|
+
built(): HeightTable;
|
|
14
|
+
/** The table as it reads now, rebuilt first if the list's blocks changed. */
|
|
15
|
+
current(): HeightTable;
|
|
16
|
+
/** The root list's top in the scroll content, a nested list's top below the top of the box its
|
|
17
|
+
* parent measures; null before it mounts. */
|
|
18
|
+
top(): number | null;
|
|
19
|
+
/** This list's top in the scroll content, off its element; null before it mounts. */
|
|
20
|
+
contentTop(): number | null;
|
|
21
|
+
isInWindow(index: number): boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface ListTreeDeps {
|
|
24
|
+
getScrollTop: () => number | null;
|
|
25
|
+
getFocusPath: () => readonly number[] | null;
|
|
26
|
+
}
|
|
27
|
+
export interface ListTree {
|
|
28
|
+
add(level: ListLevel): () => void;
|
|
29
|
+
/** Where the block at `path` sits in the scroll content, from the tables along its path; null
|
|
30
|
+
* when a mounted container has windowed it out. */
|
|
31
|
+
resolve(path: readonly number[]): TargetTop | null;
|
|
32
|
+
/** Where to scroll so the list holding `path` mounts that block: the list's top plus its table's
|
|
33
|
+
* offset of the block. */
|
|
34
|
+
mountTop(path: readonly number[]): number | null;
|
|
35
|
+
/** Picks the block to keep still from the tables and the scroll as they stand; the returned
|
|
36
|
+
* read says how far that block has moved since. Null with nothing to hold. */
|
|
37
|
+
holdForRound(): (() => HeldDelta) | null;
|
|
38
|
+
}
|
|
39
|
+
export declare function createListTree(deps: ListTreeDeps): ListTree;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { focusedIndexIn, heldBlock, heldDelta, heldIndexIn } from './hold-across';
|
|
2
|
+
export function createListTree(deps) {
|
|
3
|
+
const levels = new Set();
|
|
4
|
+
function levelAt(path) {
|
|
5
|
+
for (const level of levels) {
|
|
6
|
+
const at = level.path();
|
|
7
|
+
if (at.length === path.length && at.every((index, i) => index === path[i]))
|
|
8
|
+
return level;
|
|
9
|
+
}
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
/** The one walk down a path: the offset below the root list's top at each level it reaches,
|
|
13
|
+
* mounted containers' chrome included; null past a table's end, or a windowed-out block. */
|
|
14
|
+
function walk(path, read, inWindowOnly) {
|
|
15
|
+
let level = levelAt([]);
|
|
16
|
+
if (!level)
|
|
17
|
+
return null;
|
|
18
|
+
const offsets = [];
|
|
19
|
+
let offset = 0;
|
|
20
|
+
let height = 0;
|
|
21
|
+
for (let depth = 0; depth < path.length; depth++) {
|
|
22
|
+
const { model } = read(level);
|
|
23
|
+
const index = path[depth];
|
|
24
|
+
if (index >= model.size)
|
|
25
|
+
return null;
|
|
26
|
+
offset += model.offsetOf(index);
|
|
27
|
+
height = model.heightOf(index);
|
|
28
|
+
offsets.push(offset);
|
|
29
|
+
if (depth === path.length - 1)
|
|
30
|
+
break;
|
|
31
|
+
const inner = levelAt(path.slice(0, depth + 1));
|
|
32
|
+
const chrome = inner?.top() ?? null;
|
|
33
|
+
// An unmounted container stands in with its own top.
|
|
34
|
+
if (!inner || chrome === null)
|
|
35
|
+
break;
|
|
36
|
+
// The user scrolled past the target inside a mounted container: decline, not jump.
|
|
37
|
+
if (inWindowOnly && !inner.isInWindow(path[depth + 1]))
|
|
38
|
+
return null;
|
|
39
|
+
offset += chrome;
|
|
40
|
+
level = inner;
|
|
41
|
+
}
|
|
42
|
+
return { offsets, height };
|
|
43
|
+
}
|
|
44
|
+
/** The held block at each level, from the viewport's top down, preferring the caret's block. */
|
|
45
|
+
function descend(localTop, focus) {
|
|
46
|
+
const steps = [];
|
|
47
|
+
let level = levelAt([]);
|
|
48
|
+
let top = localTop;
|
|
49
|
+
while (level) {
|
|
50
|
+
const table = level.built();
|
|
51
|
+
const held = heldBlock(table, top, focusedIndexIn(focus, level.path()));
|
|
52
|
+
if (!held)
|
|
53
|
+
break;
|
|
54
|
+
steps.push({ level, held, table });
|
|
55
|
+
const inner = levelAt([...level.path(), held.index]);
|
|
56
|
+
const chrome = inner?.top() ?? null;
|
|
57
|
+
if (!inner || chrome === null)
|
|
58
|
+
break;
|
|
59
|
+
top = Math.max(0, top - table.model.offsetOf(held.index) - chrome);
|
|
60
|
+
level = inner;
|
|
61
|
+
}
|
|
62
|
+
return steps;
|
|
63
|
+
}
|
|
64
|
+
/** The held path as indices now, cut at the first level whose block the change removed; empty
|
|
65
|
+
* when the caret's block was moved, so the round falls back to the block at the top. */
|
|
66
|
+
function pathNow(steps) {
|
|
67
|
+
const path = [];
|
|
68
|
+
for (const { level, held, table } of steps) {
|
|
69
|
+
// A list the round's change unmounted stands in with its container, as in `walk`.
|
|
70
|
+
if (!levels.has(level))
|
|
71
|
+
return path;
|
|
72
|
+
const index = heldIndexIn(held, table, level.current());
|
|
73
|
+
if (index === -1)
|
|
74
|
+
return held.focused ? [] : path;
|
|
75
|
+
path.push(index);
|
|
76
|
+
}
|
|
77
|
+
return path;
|
|
78
|
+
}
|
|
79
|
+
function holdForRound() {
|
|
80
|
+
const scrollTop = deps.getScrollTop();
|
|
81
|
+
const rootTop = levelAt([])?.top() ?? null;
|
|
82
|
+
if (scrollTop === null || rootTop === null)
|
|
83
|
+
return null;
|
|
84
|
+
const localTop = Math.max(0, scrollTop - rootTop);
|
|
85
|
+
const focus = deps.getFocusPath();
|
|
86
|
+
const candidates = [descend(localTop, focus)];
|
|
87
|
+
if (candidates[0].some((step) => step.held.focused))
|
|
88
|
+
candidates.push(descend(localTop, null));
|
|
89
|
+
const before = candidates.map((steps) => walk(steps.map((step) => step.held.index), (level) => level.built(), false)?.offsets ?? []);
|
|
90
|
+
if (before.every((offsets) => offsets.length === 0))
|
|
91
|
+
return null;
|
|
92
|
+
function movedSince() {
|
|
93
|
+
let from = 0;
|
|
94
|
+
let to = 0;
|
|
95
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
96
|
+
const path = pathNow(candidates[i]);
|
|
97
|
+
const after = path.length > 0 ? walk(path, (level) => level.current(), false) : null;
|
|
98
|
+
if (!after)
|
|
99
|
+
continue;
|
|
100
|
+
from = before[i][path.length - 1];
|
|
101
|
+
to = after.offsets[path.length - 1];
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
return heldDelta(from, to);
|
|
105
|
+
}
|
|
106
|
+
return movedSince;
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
add(level) {
|
|
110
|
+
levels.add(level);
|
|
111
|
+
return () => levels.delete(level);
|
|
112
|
+
},
|
|
113
|
+
resolve(path) {
|
|
114
|
+
const rootTop = levelAt([])?.top() ?? null;
|
|
115
|
+
if (rootTop === null || path.length === 0)
|
|
116
|
+
return null;
|
|
117
|
+
const at = walk(path, (level) => level.current(), true);
|
|
118
|
+
if (!at)
|
|
119
|
+
return null;
|
|
120
|
+
return { top: rootTop + at.offsets[at.offsets.length - 1], height: at.height };
|
|
121
|
+
},
|
|
122
|
+
mountTop(path) {
|
|
123
|
+
const level = levelAt(path.slice(0, -1));
|
|
124
|
+
const top = level?.contentTop() ?? null;
|
|
125
|
+
const index = path[path.length - 1];
|
|
126
|
+
if (!level || top === null || index === undefined)
|
|
127
|
+
return null;
|
|
128
|
+
return top + level.current().model.offsetOf(index);
|
|
129
|
+
},
|
|
130
|
+
holdForRound
|
|
131
|
+
};
|
|
132
|
+
}
|