@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,236 +1,101 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* One windowing
|
|
3
|
-
*
|
|
4
|
-
* `
|
|
5
|
-
* range by DOM measurement, and reports this scope's own box height upward so ancestor
|
|
6
|
-
* spacers stay correct. See `docs/design/virtual-rendering.md`.
|
|
2
|
+
* One windowing unit per block list, the editor root or a nested container: its height table
|
|
3
|
+
* and mounted range, read against the editor's one scroll container in this list's coordinates.
|
|
4
|
+
* See `docs/design/virtual-rendering.md` § Nesting.
|
|
7
5
|
*/
|
|
8
6
|
import { tick, untrack } from 'svelte';
|
|
9
7
|
import { HeightModel } from '../cursor/height-model';
|
|
10
8
|
import { createBlockWindow } from './block-window.svelte';
|
|
11
9
|
import { estimateWidth, effectiveViewportHeight, listTopWithinContent } from './scope-geometry';
|
|
12
10
|
import { runMeasureBatch } from './measure-batch';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*
|
|
17
|
-
* `recorded === undefined` means the scope has applied no height for this block yet —
|
|
18
|
-
* defer to the batched pass rather than racing a lone read in on a fling-dirtied layout.
|
|
19
|
-
*/
|
|
11
|
+
import { focusedIndexIn } from './hold-across';
|
|
12
|
+
import { recordHeightTableBuild } from '../perf/instruments';
|
|
13
|
+
/** Whether a resize is worth re-measuring: only when the height differs from the one this list
|
|
14
|
+
* applied. With none applied yet, the batched pass owns the first measure. */
|
|
20
15
|
export function shouldRemeasureOnResize(recorded, observed) {
|
|
21
16
|
if (observed <= 0 || recorded === undefined)
|
|
22
17
|
return false;
|
|
23
18
|
return Math.abs(recorded - observed) >= 1;
|
|
24
19
|
}
|
|
25
|
-
// One shared result backs every collapsed
|
|
26
|
-
//
|
|
20
|
+
// One shared result backs every collapsed list, frozen so a consumer that mutates its
|
|
21
|
+
// window cannot quietly corrupt other lists through the shared object.
|
|
27
22
|
const collapsedWindow = Object.freeze({
|
|
28
23
|
active: true,
|
|
29
24
|
start: 0,
|
|
30
25
|
end: 1,
|
|
31
26
|
topSpacerPx: 0,
|
|
32
|
-
bottomSpacerPx: 0
|
|
27
|
+
bottomSpacerPx: 0,
|
|
28
|
+
floorPx: 0
|
|
33
29
|
});
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
// above the list. One home: a divergence between its consumers below would be a
|
|
37
|
-
// coordinate-mapping bug. The arithmetic itself is pure (`scope-geometry`).
|
|
30
|
+
// The box a nested list's parent measures: a container's block host, or a list item's own box.
|
|
31
|
+
const MEASURED_BOX = '.block-host, .list-item-block';
|
|
38
32
|
function listTopInPort(port, listEl) {
|
|
39
33
|
return listTopWithinContent(listEl.getBoundingClientRect().top, port.viewportTop(), port.scrollTop());
|
|
40
34
|
}
|
|
35
|
+
/** The heights a table holds, keyed by id, for the next build to keep. */
|
|
36
|
+
function heightsById(table) {
|
|
37
|
+
const carried = new Map();
|
|
38
|
+
const known = Math.min(table.ids.length, table.model.size);
|
|
39
|
+
for (let i = 0; i < known; i++)
|
|
40
|
+
carried.set(table.ids[i], table.model.heightOf(i));
|
|
41
|
+
return carried;
|
|
42
|
+
}
|
|
41
43
|
export function createListWindowing(deps) {
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
*
|
|
48
|
-
function
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
carried.set(modelChildIds[i], model.heightOf(i));
|
|
53
|
-
return carried;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* A surviving block keeps the height the model measured (VR-15); `carried` is null only
|
|
57
|
-
* where a width or type-scale change has earned a reseed from the oracle. The cache behind
|
|
58
|
-
* those heights can be gone (a mode flip drops it, and a block whose box never moved reports
|
|
59
|
-
* no resize to put it back), so reseeding a structural rebuild would trade a whole document
|
|
60
|
-
* of measurements for estimates and scroll the reader by the difference.
|
|
61
|
-
*/
|
|
62
|
-
function buildModel(carried) {
|
|
63
|
-
const width = estimateWidth(deps.getListEl(), deps.getPort()?.contentWidth() ?? 0);
|
|
44
|
+
// One batched pass per list, not an effect per child, which would interleave each layout read
|
|
45
|
+
// with the previous write and reflow once per mounted block. `pending` awaits a first measure.
|
|
46
|
+
const registry = new Map();
|
|
47
|
+
const pending = new Set();
|
|
48
|
+
/** A block that survives a rebuild keeps its measured height (`carried`), or the user scrolls by
|
|
49
|
+
* the estimate error (VR-15). Null once a width or font-size change has made them wrong. */
|
|
50
|
+
function buildTable(carried, widthVersion) {
|
|
51
|
+
const listEl = deps.getListEl();
|
|
52
|
+
const width = estimateWidth(listEl, deps.getPort()?.contentWidth() ?? 0);
|
|
53
|
+
recordHeightTableBuild(deps.getParentPath(), width);
|
|
64
54
|
const children = deps.getChildren();
|
|
65
55
|
// Indexed, and off the snapshot: `map` pays a `has` trap beside every `get`, once per child.
|
|
66
|
-
|
|
56
|
+
const ids = deps.getChildIds().slice();
|
|
67
57
|
const count = children.length;
|
|
68
58
|
const heights = new Array(count);
|
|
69
59
|
for (let i = 0; i < count; i++) {
|
|
70
|
-
const id =
|
|
60
|
+
const id = ids[i];
|
|
71
61
|
heights[i] =
|
|
72
62
|
deps.oracle.measured(id) ?? carried?.get(id) ?? deps.oracle.estimate(children[i], width);
|
|
73
63
|
}
|
|
74
|
-
return new HeightModel(heights);
|
|
75
|
-
}
|
|
76
|
-
let model = $state(buildModel(null));
|
|
77
|
-
let heightVersion = $state(0);
|
|
78
|
-
// One scope-owned batched pass rather than a per-child effect, which would interleave a
|
|
79
|
-
// layout read with the prior child's write → one forced reflow per mounted block on a
|
|
80
|
-
// fling. `pending` holds ids awaiting their first measure; registration drains it.
|
|
81
|
-
const registry = new Map();
|
|
82
|
-
const pending = new Set();
|
|
83
|
-
/**
|
|
84
|
-
* The scrollTop putting the active reveal target at its requested placement, or null
|
|
85
|
-
* when no reveal is in flight. The one definition of "where the target belongs",
|
|
86
|
-
* shared by the writer that moves there and the predicate that asks if we already are.
|
|
87
|
-
* The ancestor's offset comes from the Fenwick model, never `getBoundingClientRect`: a
|
|
88
|
-
* model write only marks `$state` dirty, so a DOM read here would see pre-flush layout.
|
|
89
|
-
*/
|
|
90
|
-
function revealTargetScrollTop() {
|
|
91
|
-
const port = deps.getPort();
|
|
92
|
-
const listEl = deps.getListEl();
|
|
93
|
-
const reveal = deps.getRevealAnchorTarget?.() ?? null;
|
|
94
|
-
if (reveal == null || reveal.index >= model.size || !port || !listEl)
|
|
95
|
-
return null;
|
|
96
|
-
const targetTop = listTopInPort(port, listEl) + model.offsetOf(reveal.index) + reveal.innerOffset;
|
|
97
|
-
// Center off the PORT's own height, NOT `scopeViewportHeight()`: the port's is stable
|
|
98
|
-
// through the shrink, whereas the scope-intersection reads listEl geometry mid-mutate
|
|
99
|
-
// and would center off a transiently-tiny viewport.
|
|
100
|
-
const targetHeight = reveal.height ?? model.heightOf(reveal.index);
|
|
101
|
-
return reveal.block === 'center'
|
|
102
|
-
? targetTop - Math.max(0, (port.viewportHeight() - targetHeight) / 2)
|
|
103
|
-
: targetTop;
|
|
104
|
-
}
|
|
105
|
-
function placeRevealTarget() {
|
|
106
|
-
const targetScrollTop = revealTargetScrollTop();
|
|
107
|
-
const port = deps.getPort();
|
|
108
|
-
if (targetScrollTop === null || !port)
|
|
109
|
-
return false;
|
|
110
|
-
port.setScrollTop(targetScrollTop);
|
|
111
|
-
// A programmatic scrollTop write fires no `scroll` event, so the window's derived
|
|
112
|
-
// scrollTop would stay stale and leave the target windowed OUT at the very position
|
|
113
|
-
// we just scrolled it to.
|
|
114
|
-
win.syncScrollTop();
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Runs the mutation and writes no scroll while the HOST's native anchoring holds the reader
|
|
119
|
-
* (host mode below the windowing budget). It outranks even the reveal claim, which would
|
|
120
|
-
* otherwise re-assert an absolute position the browser is already holding — two writers,
|
|
121
|
-
* one scroll position, double the correction.
|
|
122
|
-
*/
|
|
123
|
-
function skipWhileHostAnchors(mutate) {
|
|
124
|
-
if (deps.correctsScroll())
|
|
125
|
-
return false;
|
|
126
|
-
mutate();
|
|
127
|
-
return true;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* The reveal claim outranks either anchor rule: the target's absolute position is
|
|
131
|
-
* re-asserted after the mutation, overriding the browser's auto-clamp (which drags
|
|
132
|
-
* scrollTop off the target as undecoded off-window images measure ~0). Delta
|
|
133
|
-
* compensation can't win — the clamp outpaces it. Returns true when it ran the
|
|
134
|
-
* mutation and owns the scroll position; shared because BOTH correctors need it.
|
|
135
|
-
*/
|
|
136
|
-
function reassertRevealAnchor(mutate) {
|
|
137
|
-
const reveal = deps.getRevealAnchorTarget?.() ?? null;
|
|
138
|
-
if (reveal == null || reveal.index >= model.size || !deps.getPort())
|
|
139
|
-
return false;
|
|
140
|
-
mutate();
|
|
141
|
-
placeRevealTarget();
|
|
142
|
-
return true;
|
|
64
|
+
return { model: new HeightModel(heights), ids, widthVersion, atListWidth: listEl !== null };
|
|
143
65
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
* revealed before it; anchored on the viewport top, both slide the clicked block out from
|
|
149
|
-
* under the pointer. Anchoring on the focused block holds its start offset instead, so it
|
|
150
|
-
* stays put and only the content after it reflows.
|
|
151
|
-
*/
|
|
152
|
-
function anchorIndexFor(topIndex) {
|
|
153
|
-
const pinned = pinnedIndex();
|
|
154
|
-
if (pinned === null || pinned < topIndex || pinned >= model.size)
|
|
155
|
-
return topIndex;
|
|
156
|
-
return pinned;
|
|
157
|
-
}
|
|
158
|
-
// Hold the anchor block's screen position across a height mutation that would otherwise
|
|
159
|
-
// slide the visible content (VR-2) — native `overflow-anchor` is off wherever this runs, so
|
|
160
|
-
// nothing else holds the line. The delta comes from the Fenwick model, not
|
|
161
|
-
// `getBoundingClientRect`: a model write only marks `$state` dirty, so a DOM read here
|
|
162
|
-
// would see pre-flush layout and a ~0 delta.
|
|
163
|
-
function correctAnchor(mutate) {
|
|
164
|
-
if (skipWhileHostAnchors(mutate))
|
|
165
|
-
return;
|
|
166
|
-
if (reassertRevealAnchor(mutate))
|
|
167
|
-
return;
|
|
168
|
-
const port = deps.getPort();
|
|
169
|
-
const anchorIndex = anchorIndexFor(model.indexAtOffset(localScrollTop()));
|
|
170
|
-
const before = model.offsetOf(anchorIndex);
|
|
171
|
-
mutate();
|
|
172
|
-
const delta = model.offsetOf(anchorIndex) - before;
|
|
173
|
-
if (delta !== 0 && port)
|
|
174
|
-
port.scrollBy(delta);
|
|
175
|
-
}
|
|
176
|
-
// The structural-rebuild variant of correctAnchor. A count change shifts every index
|
|
177
|
-
// above it, so the numeric form would measure a DIFFERENT block at index N and mis-correct
|
|
178
|
-
// by ~one anchor-block height (VR-2 jump on an above-fold edit). Remap by stable id
|
|
179
|
-
// instead, captured against the OLD ordering in `modelChildIds`; a deleted anchor has no
|
|
180
|
-
// surviving block to hold the line, so skip.
|
|
181
|
-
function correctAnchorByStableId(mutate) {
|
|
182
|
-
if (skipWhileHostAnchors(mutate))
|
|
183
|
-
return;
|
|
184
|
-
if (reassertRevealAnchor(mutate))
|
|
185
|
-
return;
|
|
186
|
-
const port = deps.getPort();
|
|
187
|
-
const lst = localScrollTop();
|
|
188
|
-
const anchorIndex = model.indexAtOffset(lst);
|
|
189
|
-
const before = model.offsetOf(anchorIndex);
|
|
190
|
-
const anchorId = modelChildIds[anchorIndex];
|
|
191
|
-
mutate();
|
|
192
|
-
// At lst === 0 the top-of-viewport block belongs to an ancestor scope, so there is no
|
|
193
|
-
// local anchor: a nonzero delta could only come from the anchor being relocated
|
|
194
|
-
// within this scope, and following it would shift the shared scrollTop spuriously.
|
|
195
|
-
// The numeric form needs no such guard — its offsetOf(same index) is 0 here anyway.
|
|
196
|
-
if (lst === 0)
|
|
197
|
-
return;
|
|
198
|
-
const newIndex = anchorId !== undefined ? modelChildIds.indexOf(anchorId) : -1;
|
|
199
|
-
if (newIndex === -1)
|
|
200
|
-
return;
|
|
201
|
-
const delta = model.offsetOf(newIndex) - before;
|
|
202
|
-
if (delta !== 0 && port)
|
|
203
|
-
port.scrollBy(delta);
|
|
204
|
-
}
|
|
205
|
-
let lastWidthVersion = deps.getWidthVersion();
|
|
206
|
-
// Rebuild on any structural child change or an editor WIDTH change, never per keystroke.
|
|
207
|
-
// Keying on the id SEQUENCE rather than its length is load-bearing: a reorder leaving the count
|
|
208
|
-
// unchanged would skip the rebuild. `untrack` keeps the effect from subscribing to every child's
|
|
209
|
-
// raw via the oracle; the reseed's wholesale offset shift anchor-corrects by stable id.
|
|
210
|
-
$effect(() => {
|
|
66
|
+
// A derived, so new children window from their own table (VR-14); it tracks ids, not estimates,
|
|
67
|
+
// and the list element, so the first table, built before the element exists, is redone (VR-3).
|
|
68
|
+
let latestTable = null;
|
|
69
|
+
const table = $derived.by(() => {
|
|
211
70
|
const ids = deps.getChildIds();
|
|
212
71
|
for (let i = 0; i < ids.length; i++)
|
|
213
72
|
void ids[i];
|
|
214
73
|
void deps.getPort();
|
|
74
|
+
void deps.getListEl();
|
|
215
75
|
const widthVersion = deps.getWidthVersion();
|
|
76
|
+
return untrack(() => {
|
|
77
|
+
const previous = latestTable;
|
|
78
|
+
if (previous !== null)
|
|
79
|
+
deps.scroll.beginRound();
|
|
80
|
+
const keepsHeights = previous !== null && previous.widthVersion === widthVersion && previous.atListWidth;
|
|
81
|
+
latestTable = buildTable(keepsHeights ? heightsById(previous) : null, widthVersion);
|
|
82
|
+
return latestTable;
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
let heightVersion = $state(0);
|
|
86
|
+
// Built now, so the tree has a table to count from before anything reads the window.
|
|
87
|
+
untrack(() => table);
|
|
88
|
+
// Width changes only: re-measuring on a structural edit costs a reflow.
|
|
89
|
+
let measuredWidth = untrack(() => table.widthVersion);
|
|
90
|
+
$effect(() => {
|
|
91
|
+
const next = table;
|
|
216
92
|
untrack(() => {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
// anchor a block off wherever the poisoned model names a different top child (#188).
|
|
222
|
-
// Width only — re-measuring on a structural edit costs a reflow per split.
|
|
223
|
-
// Read off the OLD model, so the carry is taken before the rebuild replaces it.
|
|
224
|
-
const carried = widthChanged ? null : heightsById();
|
|
225
|
-
correctAnchorByStableId(() => {
|
|
226
|
-
model = buildModel(carried);
|
|
227
|
-
heightVersion++;
|
|
228
|
-
if (widthChanged)
|
|
229
|
-
remeasureMounted();
|
|
230
|
-
});
|
|
93
|
+
if (next.widthVersion === measuredWidth)
|
|
94
|
+
return;
|
|
95
|
+
measuredWidth = next.widthVersion;
|
|
96
|
+
remeasureMounted();
|
|
231
97
|
});
|
|
232
98
|
});
|
|
233
|
-
// Map the port's scrollTop into this scope's local range.
|
|
234
99
|
function localScrollTop() {
|
|
235
100
|
const port = deps.getPort();
|
|
236
101
|
const listEl = deps.getListEl();
|
|
@@ -238,10 +103,8 @@ export function createListWindowing(deps) {
|
|
|
238
103
|
return 0;
|
|
239
104
|
return Math.max(0, port.scrollTop() - listTopInPort(port, listEl));
|
|
240
105
|
}
|
|
241
|
-
// Each
|
|
242
|
-
//
|
|
243
|
-
// back to the full height when the list is unmounted. Read only by the window derived,
|
|
244
|
-
// which is why the height version belongs here and not in `revealTargetScrollTop`.
|
|
106
|
+
// Each list windows against its own slice of the viewport, or N stacked lists would each
|
|
107
|
+
// mount a viewport's worth of blocks. The full height stands in while the list is unmounted.
|
|
245
108
|
function scopeViewportHeight() {
|
|
246
109
|
void deps.getViewportHeightVersion();
|
|
247
110
|
const port = deps.getPort();
|
|
@@ -253,68 +116,33 @@ export function createListWindowing(deps) {
|
|
|
253
116
|
const listRect = listEl.getBoundingClientRect();
|
|
254
117
|
return effectiveViewportHeight(port.viewportTop(), port.viewportHeight(), listRect.top, listRect.height);
|
|
255
118
|
}
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
function pinnedIndex() {
|
|
259
|
-
const fp = deps.getFocusPath();
|
|
260
|
-
const pp = deps.getParentPath();
|
|
261
|
-
if (!fp || fp.length <= pp.length)
|
|
262
|
-
return null;
|
|
263
|
-
for (let i = 0; i < pp.length; i++)
|
|
264
|
-
if (fp[i] !== pp[i])
|
|
265
|
-
return null;
|
|
266
|
-
return fp[pp.length];
|
|
119
|
+
function focusedIndex() {
|
|
120
|
+
return focusedIndexIn(deps.getFocusPath(), deps.getParentPath());
|
|
267
121
|
}
|
|
268
122
|
const win = createBlockWindow({
|
|
269
123
|
getModel: () => {
|
|
270
124
|
void heightVersion;
|
|
271
|
-
return model;
|
|
125
|
+
return table.model;
|
|
272
126
|
},
|
|
273
127
|
getPort: deps.getPort,
|
|
274
128
|
getLocalScrollTop: localScrollTop,
|
|
275
129
|
getViewportHeight: scopeViewportHeight,
|
|
276
|
-
getPinnedIndex:
|
|
130
|
+
getPinnedIndex: focusedIndex,
|
|
131
|
+
holdsRange: deps.scroll.roundOpen,
|
|
277
132
|
overscan: deps.overscan,
|
|
278
133
|
pinExtensionCap: deps.pinExtensionCap,
|
|
279
134
|
activateAbovePx: deps.activateAbovePx,
|
|
280
135
|
deactivateBelowPx: deps.deactivateBelowPx
|
|
281
136
|
});
|
|
282
|
-
//
|
|
283
|
-
// read `win.result`, so the bypassed math (and the hysteresis tracking) never observes
|
|
137
|
+
// While collapsed `win.result` goes unread, so the window math and its hysteresis never see
|
|
284
138
|
// the clamp.
|
|
285
139
|
const effectiveWindow = $derived.by(() => (deps.isCollapsed?.() ? collapsedWindow : win.result));
|
|
286
|
-
//
|
|
287
|
-
//
|
|
288
|
-
// this container's own BlockHost measured — otherwise two writers fight over the slot.
|
|
289
|
-
// Gated on the box actually moving: ungated, the rect read and the upward write chain up
|
|
290
|
-
// the scopes inside the observer's own delivery frame, raising the RO loop warning (#189).
|
|
291
|
-
let reportedSelfHeight = 0;
|
|
292
|
-
$effect(() => {
|
|
293
|
-
void heightVersion;
|
|
294
|
-
const el = deps.getOwnEl?.();
|
|
295
|
-
const report = deps.reportSelfHeight;
|
|
296
|
-
if (!el || !report)
|
|
297
|
-
return;
|
|
298
|
-
// After the flush, like the batch: at this effect's first run the children are unrendered.
|
|
299
|
-
let live = true;
|
|
300
|
-
void tick().then(() => {
|
|
301
|
-
if (!live)
|
|
302
|
-
return;
|
|
303
|
-
const h = el.getBoundingClientRect().height;
|
|
304
|
-
if (h > 0 && Math.abs(h - reportedSelfHeight) >= 1) {
|
|
305
|
-
reportedSelfHeight = h;
|
|
306
|
-
report(h);
|
|
307
|
-
}
|
|
308
|
-
});
|
|
309
|
-
return () => {
|
|
310
|
-
live = false;
|
|
311
|
-
};
|
|
312
|
-
});
|
|
313
|
-
// The UNCORRECTED batch: the caller owns the anchor correction, because nesting a second
|
|
314
|
-
// one inside an outer `mutate` double-counts the delta.
|
|
140
|
+
// A mount batch is a round even when nothing it measures moves, so a held placement is put back
|
|
141
|
+
// after whatever scrolled the blocks into mounting.
|
|
315
142
|
function drainMeasurements() {
|
|
316
143
|
if (pending.size === 0)
|
|
317
144
|
return;
|
|
145
|
+
deps.scroll.beginRound();
|
|
318
146
|
const entries = [];
|
|
319
147
|
for (const id of pending) {
|
|
320
148
|
const child = registry.get(id);
|
|
@@ -324,122 +152,125 @@ export function createListWindowing(deps) {
|
|
|
324
152
|
pending.clear();
|
|
325
153
|
runMeasureBatch(entries);
|
|
326
154
|
}
|
|
327
|
-
// A width rebuild
|
|
328
|
-
//
|
|
155
|
+
// A width rebuild re-estimates every entry at the new width, but mounted blocks have real
|
|
156
|
+
// heights and their measure effects depend on `node.raw`, not width.
|
|
329
157
|
function remeasureMounted() {
|
|
330
158
|
for (const id of registry.keys())
|
|
331
159
|
pending.add(id);
|
|
332
160
|
drainMeasurements();
|
|
333
161
|
}
|
|
334
|
-
|
|
335
|
-
|
|
162
|
+
// The one write of a child's height into this table. An index that now holds another block
|
|
163
|
+
// keeps its height; the next build reads this id's measurement.
|
|
164
|
+
function applyMeasured(index, id, height) {
|
|
165
|
+
deps.oracle.recordMeasured(id, height);
|
|
166
|
+
// A height the table already holds moves nothing, so a keystroke that doesn't re-wrap opens
|
|
167
|
+
// no round.
|
|
168
|
+
if (table.ids[index] !== id || table.model.heightOf(index) === height)
|
|
336
169
|
return;
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
170
|
+
deps.scroll.beginRound();
|
|
171
|
+
table.model.setHeight(index, height);
|
|
172
|
+
heightVersion++;
|
|
340
173
|
}
|
|
341
|
-
// Read the
|
|
342
|
-
// is
|
|
343
|
-
// redundant call can't spin the reactive graph.
|
|
174
|
+
// Read before the write so no DOM read follows it; a repeated call writes nothing once the
|
|
175
|
+
// height is stable, so it cannot spin the reactive graph.
|
|
344
176
|
function measureOne(id) {
|
|
345
177
|
const child = registry.get(id);
|
|
346
178
|
if (!child)
|
|
347
179
|
return;
|
|
348
180
|
const h = child.readHeight();
|
|
349
181
|
if (h > 0)
|
|
350
|
-
|
|
182
|
+
child.applyHeight(h);
|
|
183
|
+
}
|
|
184
|
+
// A nested list's path reads its container's window, which a round opening inside the root
|
|
185
|
+
// table's build can't read again, so the tree reads the path as of the last flush.
|
|
186
|
+
let knownPath = untrack(deps.getParentPath);
|
|
187
|
+
$effect.pre(() => {
|
|
188
|
+
knownPath = deps.getParentPath();
|
|
189
|
+
});
|
|
190
|
+
const level = {
|
|
191
|
+
path: () => knownPath,
|
|
192
|
+
built: () => latestTable ?? table,
|
|
193
|
+
current: () => table,
|
|
194
|
+
contentTop: () => {
|
|
195
|
+
const port = deps.getPort();
|
|
196
|
+
const listEl = deps.getListEl();
|
|
197
|
+
return port && listEl ? listTopInPort(port, listEl) : null;
|
|
198
|
+
},
|
|
199
|
+
top: () => {
|
|
200
|
+
const port = deps.getPort();
|
|
201
|
+
const listEl = deps.getListEl();
|
|
202
|
+
if (!port || !listEl)
|
|
203
|
+
return null;
|
|
204
|
+
if (knownPath.length === 0)
|
|
205
|
+
return listTopInPort(port, listEl);
|
|
206
|
+
const box = listEl.closest(MEASURED_BOX);
|
|
207
|
+
return box ? listEl.getBoundingClientRect().top - box.getBoundingClientRect().top : null;
|
|
208
|
+
},
|
|
209
|
+
isInWindow
|
|
210
|
+
};
|
|
211
|
+
function isInWindow(index) {
|
|
212
|
+
// The effective window: with windowing off, `win.result` covers every index, so a scroll
|
|
213
|
+
// into a collapsed body would wait on a mount that never comes (VR-5).
|
|
214
|
+
const { start, end } = effectiveWindow;
|
|
215
|
+
return index >= start && index < end;
|
|
351
216
|
}
|
|
352
217
|
return {
|
|
353
218
|
get window() {
|
|
354
219
|
return effectiveWindow;
|
|
355
220
|
},
|
|
356
|
-
|
|
357
|
-
// the spacers.
|
|
358
|
-
recordMeasuredChild(index, id, height) {
|
|
359
|
-
deps.oracle.recordMeasured(id, height);
|
|
360
|
-
if (index < model.size && model.heightOf(index) !== height) {
|
|
361
|
-
model.setHeight(index, height);
|
|
362
|
-
heightVersion++;
|
|
363
|
-
}
|
|
364
|
-
},
|
|
365
|
-
// List items aren't BlockHosts and have no other oracle writer, so without this write
|
|
366
|
-
// a parent rebuild would reseed their slots from estimates and the viewport jumps.
|
|
367
|
-
// Idempotent for hosted children. `modelChildIds`, not the live list, for the same
|
|
368
|
-
// reason `recordMeasuredChild` takes its id from the caller: both write a model
|
|
369
|
-
// indexed by the snapshot.
|
|
370
|
-
setChildSubtotal(index, total) {
|
|
371
|
-
const id = modelChildIds[index];
|
|
372
|
-
if (id !== undefined)
|
|
373
|
-
deps.oracle.recordMeasured(id, total);
|
|
374
|
-
if (index >= model.size || model.heightOf(index) === total)
|
|
375
|
-
return;
|
|
376
|
-
const write = () => {
|
|
377
|
-
model.setHeight(index, total);
|
|
378
|
-
heightVersion++;
|
|
379
|
-
};
|
|
380
|
-
// Correction-free unless a reveal claim is live — the claim is the gate, so the
|
|
381
|
-
// no-cascade rule stands for every other write. Without it, growth INSIDE the
|
|
382
|
-
// target's own container pushes a resolved target down by its full height (#32).
|
|
383
|
-
if (!skipWhileHostAnchors(write) && !reassertRevealAnchor(write))
|
|
384
|
-
write();
|
|
385
|
-
},
|
|
221
|
+
level,
|
|
386
222
|
// Read after the flush that mounted the child, not inside it: content can land later in
|
|
387
|
-
// that flush (an inline widget's root
|
|
388
|
-
// a scroll correction the observer undoes a frame later. Still ahead of paint.
|
|
223
|
+
// that flush (an inline widget's root), and measuring an empty block costs a correction.
|
|
389
224
|
registerChild(id, child) {
|
|
390
225
|
const entry = {
|
|
391
226
|
readHeight: child.readHeight,
|
|
392
227
|
applyHeight: (h) => {
|
|
393
228
|
entry.applied = h;
|
|
394
|
-
child.
|
|
229
|
+
applyMeasured(child.index, id, h);
|
|
395
230
|
},
|
|
396
|
-
applied: undefined
|
|
231
|
+
applied: undefined,
|
|
232
|
+
index: child.index
|
|
397
233
|
};
|
|
398
234
|
registry.set(id, entry);
|
|
399
235
|
pending.add(id);
|
|
400
|
-
|
|
236
|
+
deps.scroll.measureSoon(drainMeasurements);
|
|
401
237
|
return () => {
|
|
402
238
|
registry.delete(id);
|
|
403
239
|
pending.delete(id);
|
|
404
240
|
};
|
|
405
241
|
},
|
|
406
|
-
//
|
|
242
|
+
// No check first: the raw changed, so the height almost certainly did too.
|
|
407
243
|
measureChildNow(id) {
|
|
408
244
|
measureOne(id);
|
|
409
245
|
},
|
|
410
|
-
//
|
|
411
|
-
//
|
|
412
|
-
// block returns without a rect read on the spacer-dirtied layout (VR-4).
|
|
246
|
+
// For growth that arrives later. The check reads the last applied height, not the DOM, so
|
|
247
|
+
// the no-op resize of each freshly mounted block skips a rect read (VR-4).
|
|
413
248
|
measureChildOnResize(id, observedHeight) {
|
|
414
249
|
if (shouldRemeasureOnResize(registry.get(id)?.applied, observedHeight))
|
|
415
250
|
measureOne(id);
|
|
416
251
|
},
|
|
417
|
-
|
|
418
|
-
const targetScrollTop = revealTargetScrollTop();
|
|
252
|
+
targetTopOf(index) {
|
|
419
253
|
const port = deps.getPort();
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
254
|
+
const listEl = deps.getListEl();
|
|
255
|
+
if (index >= table.model.size || !port || !listEl)
|
|
256
|
+
return null;
|
|
257
|
+
return {
|
|
258
|
+
top: listTopInPort(port, listEl) + table.model.offsetOf(index),
|
|
259
|
+
height: table.model.heightOf(index)
|
|
260
|
+
};
|
|
261
|
+
},
|
|
262
|
+
syncScrollTop() {
|
|
263
|
+
win.syncScrollTop();
|
|
423
264
|
},
|
|
424
265
|
async revealChild(index) {
|
|
425
|
-
// A
|
|
266
|
+
// A body child of a collapsed list can never mount, so give up rather than wait.
|
|
426
267
|
if (index >= 1 && deps.isCollapsed?.())
|
|
427
268
|
return;
|
|
428
|
-
|
|
429
|
-
const listEl = deps.getListEl();
|
|
430
|
-
if (!port || !listEl)
|
|
431
|
-
return;
|
|
432
|
-
port.setScrollTop(listTopInPort(port, listEl) + model.offsetOf(index));
|
|
269
|
+
deps.scroll.scrollToMount([...deps.getParentPath(), index]);
|
|
433
270
|
win.syncScrollTop();
|
|
434
271
|
await tick();
|
|
435
272
|
},
|
|
436
|
-
isInWindow
|
|
437
|
-
// The EFFECTIVE result, mandatorily: the unclamped inactive window answers true
|
|
438
|
-
// for every index, so a reveal into a collapsed body would await a mount that can
|
|
439
|
-
// never come (VR-5).
|
|
440
|
-
const { start, end } = effectiveWindow;
|
|
441
|
-
return index >= start && index < end;
|
|
442
|
-
},
|
|
273
|
+
isInWindow,
|
|
443
274
|
dispose() {
|
|
444
275
|
win.dispose();
|
|
445
276
|
}
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Read
|
|
3
|
-
*
|
|
4
|
-
* and a
|
|
5
|
-
*
|
|
2
|
+
* Read every height, then write every height: a rect read right after a height write that
|
|
3
|
+
* dirties layout forces one synchronous reflow per block, so the pass splits into a read phase
|
|
4
|
+
* and a write phase and costs at most one reflow. Kept free of DOM and reactive state so the
|
|
5
|
+
* ordering can be unit-tested with spies.
|
|
6
6
|
*/
|
|
7
7
|
export interface MeasureEntry {
|
|
8
|
-
/** Read this entry's DOM height (a layout read). */
|
|
9
8
|
readHeight: () => number;
|
|
10
|
-
/**
|
|
9
|
+
/** Writes the measured height into the height table, which can dirty layout. */
|
|
11
10
|
applyHeight: (height: number) => void;
|
|
12
11
|
}
|
|
13
|
-
/**
|
|
14
|
-
* jsdom) are skipped on write — the read still happens so the phase split holds. */
|
|
12
|
+
/** A height of 0 or less (not laid out, or under jsdom) is never written. */
|
|
15
13
|
export declare function runMeasureBatch(entries: Iterable<MeasureEntry>): void;
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Read
|
|
3
|
-
*
|
|
4
|
-
* and a
|
|
5
|
-
*
|
|
2
|
+
* Read every height, then write every height: a rect read right after a height write that
|
|
3
|
+
* dirties layout forces one synchronous reflow per block, so the pass splits into a read phase
|
|
4
|
+
* and a write phase and costs at most one reflow. Kept free of DOM and reactive state so the
|
|
5
|
+
* ordering can be unit-tested with spies.
|
|
6
6
|
*/
|
|
7
|
-
/**
|
|
8
|
-
* jsdom) are skipped on write — the read still happens so the phase split holds. */
|
|
7
|
+
/** A height of 0 or less (not laid out, or under jsdom) is never written. */
|
|
9
8
|
export function runMeasureBatch(entries) {
|
|
10
9
|
const measured = [];
|
|
11
10
|
for (const entry of entries) {
|