@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,216 +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
|
-
|
|
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);
|
|
48
54
|
const children = deps.getChildren();
|
|
49
55
|
// Indexed, and off the snapshot: `map` pays a `has` trap beside every `get`, once per child.
|
|
50
|
-
|
|
56
|
+
const ids = deps.getChildIds().slice();
|
|
51
57
|
const count = children.length;
|
|
52
58
|
const heights = new Array(count);
|
|
53
59
|
for (let i = 0; i < count; i++) {
|
|
54
|
-
|
|
60
|
+
const id = ids[i];
|
|
61
|
+
heights[i] =
|
|
62
|
+
deps.oracle.measured(id) ?? carried?.get(id) ?? deps.oracle.estimate(children[i], width);
|
|
55
63
|
}
|
|
56
|
-
return new HeightModel(heights);
|
|
57
|
-
}
|
|
58
|
-
let model = $state(buildModel());
|
|
59
|
-
let heightVersion = $state(0);
|
|
60
|
-
// One scope-owned batched pass rather than a per-child effect, which would interleave a
|
|
61
|
-
// layout read with the prior child's write → one forced reflow per mounted block on a
|
|
62
|
-
// fling. `pending` holds ids awaiting their first measure; registration drains it.
|
|
63
|
-
const registry = new Map();
|
|
64
|
-
const pending = new Set();
|
|
65
|
-
/**
|
|
66
|
-
* The scrollTop putting the active reveal target at its requested placement, or null
|
|
67
|
-
* when no reveal is in flight. The one definition of "where the target belongs",
|
|
68
|
-
* shared by the writer that moves there and the predicate that asks if we already are.
|
|
69
|
-
* The ancestor's offset comes from the Fenwick model, never `getBoundingClientRect`: a
|
|
70
|
-
* model write only marks `$state` dirty, so a DOM read here would see pre-flush layout.
|
|
71
|
-
*/
|
|
72
|
-
function revealTargetScrollTop() {
|
|
73
|
-
const port = deps.getPort();
|
|
74
|
-
const listEl = deps.getListEl();
|
|
75
|
-
const reveal = deps.getRevealAnchorTarget?.() ?? null;
|
|
76
|
-
if (reveal == null || reveal.index >= model.size || !port || !listEl)
|
|
77
|
-
return null;
|
|
78
|
-
const targetTop = listTopInPort(port, listEl) + model.offsetOf(reveal.index) + reveal.innerOffset;
|
|
79
|
-
// Center off the PORT's own height, NOT `scopeViewportHeight()`: the port's is stable
|
|
80
|
-
// through the shrink, whereas the scope-intersection reads listEl geometry mid-mutate
|
|
81
|
-
// and would center off a transiently-tiny viewport.
|
|
82
|
-
const targetHeight = reveal.height ?? model.heightOf(reveal.index);
|
|
83
|
-
return reveal.block === 'center'
|
|
84
|
-
? targetTop - Math.max(0, (port.viewportHeight() - targetHeight) / 2)
|
|
85
|
-
: targetTop;
|
|
86
|
-
}
|
|
87
|
-
function placeRevealTarget() {
|
|
88
|
-
const targetScrollTop = revealTargetScrollTop();
|
|
89
|
-
const port = deps.getPort();
|
|
90
|
-
if (targetScrollTop === null || !port)
|
|
91
|
-
return false;
|
|
92
|
-
port.setScrollTop(targetScrollTop);
|
|
93
|
-
// A programmatic scrollTop write fires no `scroll` event, so the window's derived
|
|
94
|
-
// scrollTop would stay stale and leave the target windowed OUT at the very position
|
|
95
|
-
// we just scrolled it to.
|
|
96
|
-
win.syncScrollTop();
|
|
97
|
-
return true;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Runs the mutation and writes no scroll while the HOST's native anchoring holds the reader
|
|
101
|
-
* (host mode below the windowing budget). It outranks even the reveal claim, which would
|
|
102
|
-
* otherwise re-assert an absolute position the browser is already holding — two writers,
|
|
103
|
-
* one scroll position, double the correction.
|
|
104
|
-
*/
|
|
105
|
-
function skipWhileHostAnchors(mutate) {
|
|
106
|
-
if (deps.correctsScroll())
|
|
107
|
-
return false;
|
|
108
|
-
mutate();
|
|
109
|
-
return true;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* The reveal claim outranks either anchor rule: the target's absolute position is
|
|
113
|
-
* re-asserted after the mutation, overriding the browser's auto-clamp (which drags
|
|
114
|
-
* scrollTop off the target as undecoded off-window images measure ~0). Delta
|
|
115
|
-
* compensation can't win — the clamp outpaces it. Returns true when it ran the
|
|
116
|
-
* mutation and owns the scroll position; shared because BOTH correctors need it.
|
|
117
|
-
*/
|
|
118
|
-
function reassertRevealAnchor(mutate) {
|
|
119
|
-
const reveal = deps.getRevealAnchorTarget?.() ?? null;
|
|
120
|
-
if (reveal == null || reveal.index >= model.size || !deps.getPort())
|
|
121
|
-
return false;
|
|
122
|
-
mutate();
|
|
123
|
-
placeRevealTarget();
|
|
124
|
-
return true;
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Which block this correction holds still: the top-of-viewport one by default, the FOCUSED
|
|
128
|
-
* one when it sits at or below the fold. Clicking a construct that reveals its source (a
|
|
129
|
-
* math block, a paragraph holding inline math) resizes that block and folds whichever was
|
|
130
|
-
* revealed before it; anchored on the viewport top, both slide the clicked block out from
|
|
131
|
-
* under the pointer. Anchoring on the focused block holds its start offset instead, so it
|
|
132
|
-
* stays put and only the content after it reflows.
|
|
133
|
-
*/
|
|
134
|
-
function anchorIndexFor(topIndex) {
|
|
135
|
-
const pinned = pinnedIndex();
|
|
136
|
-
if (pinned === null || pinned < topIndex || pinned >= model.size)
|
|
137
|
-
return topIndex;
|
|
138
|
-
return pinned;
|
|
64
|
+
return { model: new HeightModel(heights), ids, widthVersion, atListWidth: listEl !== null };
|
|
139
65
|
}
|
|
140
|
-
//
|
|
141
|
-
//
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
// would see pre-flush layout and a ~0 delta.
|
|
145
|
-
function correctAnchor(mutate) {
|
|
146
|
-
if (skipWhileHostAnchors(mutate))
|
|
147
|
-
return;
|
|
148
|
-
if (reassertRevealAnchor(mutate))
|
|
149
|
-
return;
|
|
150
|
-
const port = deps.getPort();
|
|
151
|
-
const anchorIndex = anchorIndexFor(model.indexAtOffset(localScrollTop()));
|
|
152
|
-
const before = model.offsetOf(anchorIndex);
|
|
153
|
-
mutate();
|
|
154
|
-
const delta = model.offsetOf(anchorIndex) - before;
|
|
155
|
-
if (delta !== 0 && port)
|
|
156
|
-
port.setScrollTop(port.scrollTop() + delta);
|
|
157
|
-
}
|
|
158
|
-
// The structural-rebuild variant of correctAnchor. A count change shifts every index
|
|
159
|
-
// above it, so the numeric form would measure a DIFFERENT block at index N and mis-correct
|
|
160
|
-
// by ~one anchor-block height (VR-2 jump on an above-fold edit). Remap by stable id
|
|
161
|
-
// instead, captured against the OLD ordering in `modelChildIds`; a deleted anchor has no
|
|
162
|
-
// surviving block to hold the line, so skip.
|
|
163
|
-
function correctAnchorByStableId(mutate) {
|
|
164
|
-
if (skipWhileHostAnchors(mutate))
|
|
165
|
-
return;
|
|
166
|
-
if (reassertRevealAnchor(mutate))
|
|
167
|
-
return;
|
|
168
|
-
const port = deps.getPort();
|
|
169
|
-
const lst = localScrollTop();
|
|
170
|
-
const anchorIndex = model.indexAtOffset(lst);
|
|
171
|
-
const before = model.offsetOf(anchorIndex);
|
|
172
|
-
const anchorId = modelChildIds[anchorIndex];
|
|
173
|
-
mutate();
|
|
174
|
-
// At lst === 0 the top-of-viewport block belongs to an ancestor scope, so there is no
|
|
175
|
-
// local anchor: a nonzero delta could only come from the anchor being relocated
|
|
176
|
-
// within this scope, and following it would shift the shared scrollTop spuriously.
|
|
177
|
-
// The numeric form needs no such guard — its offsetOf(same index) is 0 here anyway.
|
|
178
|
-
if (lst === 0)
|
|
179
|
-
return;
|
|
180
|
-
const newIndex = anchorId !== undefined ? modelChildIds.indexOf(anchorId) : -1;
|
|
181
|
-
if (newIndex === -1)
|
|
182
|
-
return;
|
|
183
|
-
const delta = model.offsetOf(newIndex) - before;
|
|
184
|
-
if (delta !== 0 && port)
|
|
185
|
-
port.setScrollTop(port.scrollTop() + delta);
|
|
186
|
-
}
|
|
187
|
-
let lastWidthVersion = deps.getWidthVersion();
|
|
188
|
-
// Rebuild on any structural child change or an editor WIDTH change, never per keystroke.
|
|
189
|
-
// Keying on the id SEQUENCE rather than its length is load-bearing: a reorder leaving the count
|
|
190
|
-
// unchanged would skip the rebuild. `untrack` keeps the effect from subscribing to every child's
|
|
191
|
-
// raw via the oracle; the reseed's wholesale offset shift anchor-corrects by stable id.
|
|
192
|
-
$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(() => {
|
|
193
70
|
const ids = deps.getChildIds();
|
|
194
71
|
for (let i = 0; i < ids.length; i++)
|
|
195
72
|
void ids[i];
|
|
196
73
|
void deps.getPort();
|
|
74
|
+
void deps.getListEl();
|
|
197
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;
|
|
198
92
|
untrack(() => {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
// anchor a block off wherever the poisoned model names a different top child (#188).
|
|
204
|
-
// Width only — re-measuring on a structural edit costs a reflow per split.
|
|
205
|
-
correctAnchorByStableId(() => {
|
|
206
|
-
model = buildModel();
|
|
207
|
-
heightVersion++;
|
|
208
|
-
if (widthChanged)
|
|
209
|
-
remeasureMounted();
|
|
210
|
-
});
|
|
93
|
+
if (next.widthVersion === measuredWidth)
|
|
94
|
+
return;
|
|
95
|
+
measuredWidth = next.widthVersion;
|
|
96
|
+
remeasureMounted();
|
|
211
97
|
});
|
|
212
98
|
});
|
|
213
|
-
// Map the port's scrollTop into this scope's local range.
|
|
214
99
|
function localScrollTop() {
|
|
215
100
|
const port = deps.getPort();
|
|
216
101
|
const listEl = deps.getListEl();
|
|
@@ -218,10 +103,8 @@ export function createListWindowing(deps) {
|
|
|
218
103
|
return 0;
|
|
219
104
|
return Math.max(0, port.scrollTop() - listTopInPort(port, listEl));
|
|
220
105
|
}
|
|
221
|
-
// Each
|
|
222
|
-
//
|
|
223
|
-
// back to the full height when the list is unmounted. Read only by the window derived,
|
|
224
|
-
// 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.
|
|
225
108
|
function scopeViewportHeight() {
|
|
226
109
|
void deps.getViewportHeightVersion();
|
|
227
110
|
const port = deps.getPort();
|
|
@@ -233,68 +116,33 @@ export function createListWindowing(deps) {
|
|
|
233
116
|
const listRect = listEl.getBoundingClientRect();
|
|
234
117
|
return effectiveViewportHeight(port.viewportTop(), port.viewportHeight(), listRect.top, listRect.height);
|
|
235
118
|
}
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
function pinnedIndex() {
|
|
239
|
-
const fp = deps.getFocusPath();
|
|
240
|
-
const pp = deps.getParentPath();
|
|
241
|
-
if (!fp || fp.length <= pp.length)
|
|
242
|
-
return null;
|
|
243
|
-
for (let i = 0; i < pp.length; i++)
|
|
244
|
-
if (fp[i] !== pp[i])
|
|
245
|
-
return null;
|
|
246
|
-
return fp[pp.length];
|
|
119
|
+
function focusedIndex() {
|
|
120
|
+
return focusedIndexIn(deps.getFocusPath(), deps.getParentPath());
|
|
247
121
|
}
|
|
248
122
|
const win = createBlockWindow({
|
|
249
123
|
getModel: () => {
|
|
250
124
|
void heightVersion;
|
|
251
|
-
return model;
|
|
125
|
+
return table.model;
|
|
252
126
|
},
|
|
253
127
|
getPort: deps.getPort,
|
|
254
128
|
getLocalScrollTop: localScrollTop,
|
|
255
129
|
getViewportHeight: scopeViewportHeight,
|
|
256
|
-
getPinnedIndex:
|
|
130
|
+
getPinnedIndex: focusedIndex,
|
|
131
|
+
holdsRange: deps.scroll.roundOpen,
|
|
257
132
|
overscan: deps.overscan,
|
|
258
133
|
pinExtensionCap: deps.pinExtensionCap,
|
|
259
134
|
activateAbovePx: deps.activateAbovePx,
|
|
260
135
|
deactivateBelowPx: deps.deactivateBelowPx
|
|
261
136
|
});
|
|
262
|
-
//
|
|
263
|
-
// 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
|
|
264
138
|
// the clamp.
|
|
265
139
|
const effectiveWindow = $derived.by(() => (deps.isCollapsed?.() ? collapsedWindow : win.result));
|
|
266
|
-
//
|
|
267
|
-
//
|
|
268
|
-
// this container's own BlockHost measured — otherwise two writers fight over the slot.
|
|
269
|
-
// Gated on the box actually moving: ungated, the rect read and the upward write chain up
|
|
270
|
-
// the scopes inside the observer's own delivery frame, raising the RO loop warning (#189).
|
|
271
|
-
let reportedSelfHeight = 0;
|
|
272
|
-
$effect(() => {
|
|
273
|
-
void heightVersion;
|
|
274
|
-
const el = deps.getOwnEl?.();
|
|
275
|
-
const report = deps.reportSelfHeight;
|
|
276
|
-
if (!el || !report)
|
|
277
|
-
return;
|
|
278
|
-
// After the flush, like the batch: at this effect's first run the children are unrendered.
|
|
279
|
-
let live = true;
|
|
280
|
-
void tick().then(() => {
|
|
281
|
-
if (!live)
|
|
282
|
-
return;
|
|
283
|
-
const h = el.getBoundingClientRect().height;
|
|
284
|
-
if (h > 0 && Math.abs(h - reportedSelfHeight) >= 1) {
|
|
285
|
-
reportedSelfHeight = h;
|
|
286
|
-
report(h);
|
|
287
|
-
}
|
|
288
|
-
});
|
|
289
|
-
return () => {
|
|
290
|
-
live = false;
|
|
291
|
-
};
|
|
292
|
-
});
|
|
293
|
-
// The UNCORRECTED batch: the caller owns the anchor correction, because nesting a second
|
|
294
|
-
// 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.
|
|
295
142
|
function drainMeasurements() {
|
|
296
143
|
if (pending.size === 0)
|
|
297
144
|
return;
|
|
145
|
+
deps.scroll.beginRound();
|
|
298
146
|
const entries = [];
|
|
299
147
|
for (const id of pending) {
|
|
300
148
|
const child = registry.get(id);
|
|
@@ -304,122 +152,125 @@ export function createListWindowing(deps) {
|
|
|
304
152
|
pending.clear();
|
|
305
153
|
runMeasureBatch(entries);
|
|
306
154
|
}
|
|
307
|
-
// A width rebuild
|
|
308
|
-
//
|
|
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.
|
|
309
157
|
function remeasureMounted() {
|
|
310
158
|
for (const id of registry.keys())
|
|
311
159
|
pending.add(id);
|
|
312
160
|
drainMeasurements();
|
|
313
161
|
}
|
|
314
|
-
|
|
315
|
-
|
|
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)
|
|
316
169
|
return;
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
170
|
+
deps.scroll.beginRound();
|
|
171
|
+
table.model.setHeight(index, height);
|
|
172
|
+
heightVersion++;
|
|
320
173
|
}
|
|
321
|
-
// Read the
|
|
322
|
-
// is
|
|
323
|
-
// 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.
|
|
324
176
|
function measureOne(id) {
|
|
325
177
|
const child = registry.get(id);
|
|
326
178
|
if (!child)
|
|
327
179
|
return;
|
|
328
180
|
const h = child.readHeight();
|
|
329
181
|
if (h > 0)
|
|
330
|
-
|
|
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;
|
|
331
216
|
}
|
|
332
217
|
return {
|
|
333
218
|
get window() {
|
|
334
219
|
return effectiveWindow;
|
|
335
220
|
},
|
|
336
|
-
|
|
337
|
-
// the spacers.
|
|
338
|
-
recordMeasuredChild(index, id, height) {
|
|
339
|
-
deps.oracle.recordMeasured(id, height);
|
|
340
|
-
if (index < model.size && model.heightOf(index) !== height) {
|
|
341
|
-
model.setHeight(index, height);
|
|
342
|
-
heightVersion++;
|
|
343
|
-
}
|
|
344
|
-
},
|
|
345
|
-
// List items aren't BlockHosts and have no other oracle writer, so without this write
|
|
346
|
-
// a parent rebuild would reseed their slots from estimates and the viewport jumps.
|
|
347
|
-
// Idempotent for hosted children. `modelChildIds`, not the live list, for the same
|
|
348
|
-
// reason `recordMeasuredChild` takes its id from the caller: both write a model
|
|
349
|
-
// indexed by the snapshot.
|
|
350
|
-
setChildSubtotal(index, total) {
|
|
351
|
-
const id = modelChildIds[index];
|
|
352
|
-
if (id !== undefined)
|
|
353
|
-
deps.oracle.recordMeasured(id, total);
|
|
354
|
-
if (index >= model.size || model.heightOf(index) === total)
|
|
355
|
-
return;
|
|
356
|
-
const write = () => {
|
|
357
|
-
model.setHeight(index, total);
|
|
358
|
-
heightVersion++;
|
|
359
|
-
};
|
|
360
|
-
// Correction-free unless a reveal claim is live — the claim is the gate, so the
|
|
361
|
-
// no-cascade rule stands for every other write. Without it, growth INSIDE the
|
|
362
|
-
// target's own container pushes a resolved target down by its full height (#32).
|
|
363
|
-
if (!skipWhileHostAnchors(write) && !reassertRevealAnchor(write))
|
|
364
|
-
write();
|
|
365
|
-
},
|
|
221
|
+
level,
|
|
366
222
|
// Read after the flush that mounted the child, not inside it: content can land later in
|
|
367
|
-
// that flush (an inline widget's root
|
|
368
|
-
// 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.
|
|
369
224
|
registerChild(id, child) {
|
|
370
225
|
const entry = {
|
|
371
226
|
readHeight: child.readHeight,
|
|
372
227
|
applyHeight: (h) => {
|
|
373
228
|
entry.applied = h;
|
|
374
|
-
child.
|
|
229
|
+
applyMeasured(child.index, id, h);
|
|
375
230
|
},
|
|
376
|
-
applied: undefined
|
|
231
|
+
applied: undefined,
|
|
232
|
+
index: child.index
|
|
377
233
|
};
|
|
378
234
|
registry.set(id, entry);
|
|
379
235
|
pending.add(id);
|
|
380
|
-
|
|
236
|
+
deps.scroll.measureSoon(drainMeasurements);
|
|
381
237
|
return () => {
|
|
382
238
|
registry.delete(id);
|
|
383
239
|
pending.delete(id);
|
|
384
240
|
};
|
|
385
241
|
},
|
|
386
|
-
//
|
|
242
|
+
// No check first: the raw changed, so the height almost certainly did too.
|
|
387
243
|
measureChildNow(id) {
|
|
388
244
|
measureOne(id);
|
|
389
245
|
},
|
|
390
|
-
//
|
|
391
|
-
//
|
|
392
|
-
// 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).
|
|
393
248
|
measureChildOnResize(id, observedHeight) {
|
|
394
249
|
if (shouldRemeasureOnResize(registry.get(id)?.applied, observedHeight))
|
|
395
250
|
measureOne(id);
|
|
396
251
|
},
|
|
397
|
-
|
|
398
|
-
const targetScrollTop = revealTargetScrollTop();
|
|
252
|
+
targetTopOf(index) {
|
|
399
253
|
const port = deps.getPort();
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
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();
|
|
403
264
|
},
|
|
404
265
|
async revealChild(index) {
|
|
405
|
-
// A
|
|
266
|
+
// A body child of a collapsed list can never mount, so give up rather than wait.
|
|
406
267
|
if (index >= 1 && deps.isCollapsed?.())
|
|
407
268
|
return;
|
|
408
|
-
|
|
409
|
-
const listEl = deps.getListEl();
|
|
410
|
-
if (!port || !listEl)
|
|
411
|
-
return;
|
|
412
|
-
port.setScrollTop(listTopInPort(port, listEl) + model.offsetOf(index));
|
|
269
|
+
deps.scroll.scrollToMount([...deps.getParentPath(), index]);
|
|
413
270
|
win.syncScrollTop();
|
|
414
271
|
await tick();
|
|
415
272
|
},
|
|
416
|
-
isInWindow
|
|
417
|
-
// The EFFECTIVE result, mandatorily: the unclamped inactive window answers true
|
|
418
|
-
// for every index, so a reveal into a collapsed body would await a mount that can
|
|
419
|
-
// never come (VR-5).
|
|
420
|
-
const { start, end } = effectiveWindow;
|
|
421
|
-
return index >= start && index < end;
|
|
422
|
-
},
|
|
273
|
+
isInWindow,
|
|
423
274
|
dispose() {
|
|
424
275
|
win.dispose();
|
|
425
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) {
|