@voithos-labs/aragonite 0.10.1
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/LICENSE +661 -0
- package/README.md +365 -0
- package/THIRD-PARTY-NOTICES.md +102 -0
- package/dist/a11y-strings.d.ts +46 -0
- package/dist/a11y-strings.js +62 -0
- package/dist/action-contracts.d.ts +301 -0
- package/dist/action-contracts.js +5 -0
- package/dist/active-editor.d.ts +16 -0
- package/dist/active-editor.js +67 -0
- package/dist/ambient/ambient-cursor.d.ts +41 -0
- package/dist/ambient/ambient-cursor.js +120 -0
- package/dist/ambient/ambient-dom.d.ts +9 -0
- package/dist/ambient/ambient-dom.js +102 -0
- package/dist/assert.d.ts +6 -0
- package/dist/assert.js +17 -0
- package/dist/block-component.d.ts +274 -0
- package/dist/block-component.js +43 -0
- package/dist/block-id.d.ts +14 -0
- package/dist/block-id.js +34 -0
- package/dist/bounded-memo.d.ts +14 -0
- package/dist/bounded-memo.js +32 -0
- package/dist/components/BlockDragHandle.svelte +66 -0
- package/dist/components/BlockDragHandle.svelte.d.ts +18 -0
- package/dist/components/BlockHost.svelte +328 -0
- package/dist/components/BlockHost.svelte.d.ts +15 -0
- package/dist/components/BlockList.svelte +114 -0
- package/dist/components/BlockList.svelte.d.ts +16 -0
- package/dist/components/DecorationOverlay.svelte +156 -0
- package/dist/components/DecorationOverlay.svelte.d.ts +14 -0
- package/dist/components/Editor.svelte +1849 -0
- package/dist/components/Editor.svelte.d.ts +49 -0
- package/dist/components/GapCaret.svelte +226 -0
- package/dist/components/GapCaret.svelte.d.ts +9 -0
- package/dist/components/SearchBar.svelte +243 -0
- package/dist/components/SearchBar.svelte.d.ts +7 -0
- package/dist/components/SelectionOverlay.svelte +171 -0
- package/dist/components/SelectionOverlay.svelte.d.ts +14 -0
- package/dist/components/block-content-selector.d.ts +12 -0
- package/dist/components/block-content-selector.js +12 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +32 -0
- package/dist/components/blocks/BlockquoteBlock.svelte.d.ts +11 -0
- package/dist/components/blocks/ThematicBreakBlock.svelte +156 -0
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +17 -0
- package/dist/components/blocks/code/CodeBlock.svelte +726 -0
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +23 -0
- package/dist/components/blocks/code/CodeLanguageChip.svelte +127 -0
- package/dist/components/blocks/code/CodeLanguageChip.svelte.d.ts +14 -0
- package/dist/components/blocks/code/code-beforeinput.d.ts +30 -0
- package/dist/components/blocks/code/code-beforeinput.js +40 -0
- package/dist/components/blocks/code/code-bootstrap.d.ts +8 -0
- package/dist/components/blocks/code/code-bootstrap.js +54 -0
- package/dist/components/blocks/code/code-editing.d.ts +28 -0
- package/dist/components/blocks/code/code-editing.js +79 -0
- package/dist/components/blocks/code/code-enter.d.ts +22 -0
- package/dist/components/blocks/code/code-enter.js +19 -0
- package/dist/components/blocks/code/code-fence-boundary.d.ts +77 -0
- package/dist/components/blocks/code/code-fence-boundary.js +169 -0
- package/dist/components/blocks/code/code-fence-exit.d.ts +24 -0
- package/dist/components/blocks/code/code-fence-exit.js +36 -0
- package/dist/components/blocks/code/code-indent.d.ts +14 -0
- package/dist/components/blocks/code/code-indent.js +87 -0
- package/dist/components/blocks/code/code-languages.d.ts +15 -0
- package/dist/components/blocks/code/code-languages.js +30 -0
- package/dist/components/blocks/code/code-paste-surface.d.ts +6 -0
- package/dist/components/blocks/code/code-paste-surface.js +29 -0
- package/dist/components/blocks/code/code-paste.d.ts +24 -0
- package/dist/components/blocks/code/code-paste.js +21 -0
- package/dist/components/blocks/code/code-renderer.d.ts +18 -0
- package/dist/components/blocks/code/code-renderer.js +249 -0
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +51 -0
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte.d.ts +11 -0
- package/dist/components/blocks/directive/activate-directives.d.ts +7 -0
- package/dist/components/blocks/directive/activate-directives.js +23 -0
- package/dist/components/blocks/editable-leaf.d.ts +126 -0
- package/dist/components/blocks/editable-leaf.js +410 -0
- package/dist/components/blocks/editable-surface.d.ts +209 -0
- package/dist/components/blocks/editable-surface.js +331 -0
- package/dist/components/blocks/list/ListBlock.svelte +162 -0
- package/dist/components/blocks/list/ListBlock.svelte.d.ts +11 -0
- package/dist/components/blocks/list/ListItemBlock.svelte +324 -0
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +14 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +3 -0
- package/dist/components/blocks/list/task-checkbox.js +33 -0
- package/dist/components/blocks/plain-text-backend.d.ts +21 -0
- package/dist/components/blocks/plain-text-backend.js +47 -0
- package/dist/components/blocks/surface-wiring.svelte.d.ts +18 -0
- package/dist/components/blocks/surface-wiring.svelte.js +68 -0
- package/dist/components/blocks/table/TableActionMenu.svelte +267 -0
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +15 -0
- package/dist/components/blocks/table/TableBlock.svelte +765 -0
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +30 -0
- package/dist/components/blocks/table/TableCellBlock.svelte +1075 -0
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +30 -0
- package/dist/components/blocks/table/TableGrip.svelte +91 -0
- package/dist/components/blocks/table/TableGrip.svelte.d.ts +8 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +233 -0
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +34 -0
- package/dist/components/blocks/table/cell-clipboard.d.ts +23 -0
- package/dist/components/blocks/table/cell-clipboard.js +34 -0
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +37 -0
- package/dist/components/blocks/table/cell-keydown-plan.js +66 -0
- package/dist/components/blocks/table/cell-pointer.d.ts +58 -0
- package/dist/components/blocks/table/cell-pointer.js +153 -0
- package/dist/components/blocks/table/cell-render.d.ts +51 -0
- package/dist/components/blocks/table/cell-render.js +98 -0
- package/dist/components/blocks/table/cell-table-commands.d.ts +12 -0
- package/dist/components/blocks/table/cell-table-commands.js +21 -0
- package/dist/components/blocks/table/cell-x-mapping.d.ts +6 -0
- package/dist/components/blocks/table/cell-x-mapping.js +16 -0
- package/dist/components/blocks/table/selected-cells.d.ts +19 -0
- package/dist/components/blocks/table/selected-cells.js +35 -0
- package/dist/components/blocks/table/table-caret-at-point.d.ts +8 -0
- package/dist/components/blocks/table/table-caret-at-point.js +35 -0
- package/dist/components/blocks/table/table-cell-paste.d.ts +16 -0
- package/dist/components/blocks/table/table-cell-paste.js +75 -0
- package/dist/components/blocks/table/table-drag-hit-test.d.ts +5 -0
- package/dist/components/blocks/table/table-drag-hit-test.js +20 -0
- package/dist/components/blocks/table/table-drop-target.d.ts +1 -0
- package/dist/components/blocks/table/table-drop-target.js +16 -0
- package/dist/components/blocks/table/table-menu-model.d.ts +52 -0
- package/dist/components/blocks/table/table-menu-model.js +78 -0
- package/dist/components/blocks/table/table-navigation.d.ts +8 -0
- package/dist/components/blocks/table/table-navigation.js +22 -0
- package/dist/components/blocks/table/table-reorder-drag.d.ts +78 -0
- package/dist/components/blocks/table/table-reorder-drag.js +97 -0
- package/dist/components/blocks/text/TextEditableBlock.svelte +1012 -0
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +33 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +8 -0
- package/dist/components/blocks/text/click-snap-guard.js +19 -0
- package/dist/components/blocks/text/composition-seat.d.ts +50 -0
- package/dist/components/blocks/text/composition-seat.js +65 -0
- package/dist/components/blocks/text/construct-edge-delete.d.ts +47 -0
- package/dist/components/blocks/text/construct-edge-delete.js +164 -0
- package/dist/components/blocks/text/construct-reveal.d.ts +39 -0
- package/dist/components/blocks/text/construct-reveal.js +164 -0
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +91 -0
- package/dist/components/blocks/text/edge-policy-dispatch.js +457 -0
- package/dist/components/blocks/text/edge-seat.d.ts +42 -0
- package/dist/components/blocks/text/edge-seat.js +197 -0
- package/dist/components/blocks/text/hidden-suffix.d.ts +10 -0
- package/dist/components/blocks/text/hidden-suffix.js +15 -0
- package/dist/components/blocks/text/link-at-point.d.ts +33 -0
- package/dist/components/blocks/text/link-at-point.js +47 -0
- package/dist/components/blocks/text/link-source-bytes.d.ts +37 -0
- package/dist/components/blocks/text/link-source-bytes.js +161 -0
- package/dist/components/blocks/text/live-join-seam.d.ts +15 -0
- package/dist/components/blocks/text/live-join-seam.js +327 -0
- package/dist/components/blocks/text/live-selection-edit.d.ts +68 -0
- package/dist/components/blocks/text/live-selection-edit.js +120 -0
- package/dist/components/blocks/text/live-split-rebalance.d.ts +56 -0
- package/dist/components/blocks/text/live-split-rebalance.js +239 -0
- package/dist/components/blocks/text/marker-completion.d.ts +18 -0
- package/dist/components/blocks/text/marker-completion.js +29 -0
- package/dist/components/blocks/text/pending-mark-insert.d.ts +37 -0
- package/dist/components/blocks/text/pending-mark-insert.js +188 -0
- package/dist/components/blocks/text/screen-diff.d.ts +20 -0
- package/dist/components/blocks/text/screen-diff.js +39 -0
- package/dist/components/blocks/text/text-clipboard.d.ts +70 -0
- package/dist/components/blocks/text/text-clipboard.js +131 -0
- package/dist/components/blocks/text/text-keydown.d.ts +39 -0
- package/dist/components/blocks/text/text-keydown.js +80 -0
- package/dist/components/blocks/text/text-render.d.ts +67 -0
- package/dist/components/blocks/text/text-render.js +215 -0
- package/dist/components/blocks/text/widget-adjacency.d.ts +30 -0
- package/dist/components/blocks/text/widget-adjacency.js +68 -0
- package/dist/components/blocks/text/widget-interaction.d.ts +90 -0
- package/dist/components/blocks/text/widget-interaction.js +591 -0
- package/dist/components/blocks/widget-portal.d.ts +54 -0
- package/dist/components/blocks/widget-portal.js +136 -0
- package/dist/components/built-in-blocks.d.ts +7 -0
- package/dist/components/built-in-blocks.js +77 -0
- package/dist/components/editor-root-clipboard.d.ts +29 -0
- package/dist/components/editor-root-clipboard.js +105 -0
- package/dist/components/editor-root-keydown.d.ts +47 -0
- package/dist/components/editor-root-keydown.js +88 -0
- package/dist/components/editor-root-listeners.d.ts +44 -0
- package/dist/components/editor-root-listeners.js +112 -0
- package/dist/components/image/ImageOverlayHost.svelte +115 -0
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +20 -0
- package/dist/components/image/ImageProperties.svelte +153 -0
- package/dist/components/image/ImageProperties.svelte.d.ts +14 -0
- package/dist/components/image/ImageResizeHandles.svelte +188 -0
- package/dist/components/image/ImageResizeHandles.svelte.d.ts +10 -0
- package/dist/components/image/image-edit-commit.d.ts +38 -0
- package/dist/components/image/image-edit-commit.js +159 -0
- package/dist/components/image/image-resize.d.ts +11 -0
- package/dist/components/image/image-resize.js +38 -0
- package/dist/components/image/image-source-bytes.d.ts +15 -0
- package/dist/components/image/image-source-bytes.js +73 -0
- package/dist/components/image/image-widget-editing.d.ts +7 -0
- package/dist/components/image/image-widget-editing.js +41 -0
- package/dist/components/image/widget-dom.d.ts +11 -0
- package/dist/components/image/widget-dom.js +110 -0
- package/dist/components/image/widget-selection-state.svelte.d.ts +18 -0
- package/dist/components/image/widget-selection-state.svelte.js +26 -0
- package/dist/components/link-card/LinkCard.svelte +190 -0
- package/dist/components/link-card/LinkCard.svelte.d.ts +18 -0
- package/dist/components/link-card/LinkCardHost.svelte +181 -0
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +25 -0
- package/dist/components/link-card/link-card-commit.d.ts +50 -0
- package/dist/components/link-card/link-card-commit.js +134 -0
- package/dist/components/link-card/link-card-entry.d.ts +39 -0
- package/dist/components/link-card/link-card-entry.js +51 -0
- package/dist/components/link-card/link-card-state.svelte.d.ts +44 -0
- package/dist/components/link-card/link-card-state.svelte.js +46 -0
- package/dist/components/lrd-map-gate.d.ts +18 -0
- package/dist/components/lrd-map-gate.js +22 -0
- package/dist/components/paste-image-arm.d.ts +29 -0
- package/dist/components/paste-image-arm.js +61 -0
- package/dist/components/portal.d.ts +11 -0
- package/dist/components/portal.js +29 -0
- package/dist/core/directive/activate.d.ts +8 -0
- package/dist/core/directive/activate.js +25 -0
- package/dist/core/directive/container-opener.d.ts +7 -0
- package/dist/core/directive/container-opener.js +162 -0
- package/dist/core/directive/grammar.d.ts +50 -0
- package/dist/core/directive/grammar.js +88 -0
- package/dist/core/directive/kinds.d.ts +31 -0
- package/dist/core/directive/kinds.js +137 -0
- package/dist/core/directive/registry.d.ts +39 -0
- package/dist/core/directive/registry.js +49 -0
- package/dist/core/directive/text-recognizer.d.ts +8 -0
- package/dist/core/directive/text-recognizer.js +87 -0
- package/dist/core/escapable.d.ts +6 -0
- package/dist/core/escapable.js +6 -0
- package/dist/core/inline/backticks.d.ts +16 -0
- package/dist/core/inline/backticks.js +62 -0
- package/dist/core/inline/character-refs.d.ts +7 -0
- package/dist/core/inline/character-refs.js +70 -0
- package/dist/core/inline/destination-bytes.d.ts +7 -0
- package/dist/core/inline/destination-bytes.js +14 -0
- package/dist/core/inline/entity-widget.d.ts +11 -0
- package/dist/core/inline/entity-widget.js +21 -0
- package/dist/core/inline/format-toggle.d.ts +50 -0
- package/dist/core/inline/format-toggle.js +533 -0
- package/dist/core/inline/html-entities.d.ts +8 -0
- package/dist/core/inline/html-entities.js +2134 -0
- package/dist/core/inline/html-tag-grammar.d.ts +16 -0
- package/dist/core/inline/html-tag-grammar.js +58 -0
- package/dist/core/inline/image-dimensions.d.ts +6 -0
- package/dist/core/inline/image-dimensions.js +42 -0
- package/dist/core/inline/index.d.ts +42 -0
- package/dist/core/inline/index.js +77 -0
- package/dist/core/inline/inline-cache.d.ts +20 -0
- package/dist/core/inline/inline-cache.js +28 -0
- package/dist/core/inline/inline-widgets.d.ts +124 -0
- package/dist/core/inline/inline-widgets.js +131 -0
- package/dist/core/inline/link-reference-resolver.d.ts +21 -0
- package/dist/core/inline/link-reference-resolver.js +46 -0
- package/dist/core/inline/raw-html-widget.d.ts +10 -0
- package/dist/core/inline/raw-html-widget.js +22 -0
- package/dist/core/inline/scan/autolinks.d.ts +23 -0
- package/dist/core/inline/scan/autolinks.js +354 -0
- package/dist/core/inline/scan/brackets.d.ts +11 -0
- package/dist/core/inline/scan/brackets.js +284 -0
- package/dist/core/inline/scan/code-spans.d.ts +7 -0
- package/dist/core/inline/scan/code-spans.js +27 -0
- package/dist/core/inline/scan/emphasis.d.ts +10 -0
- package/dist/core/inline/scan/emphasis.js +276 -0
- package/dist/core/inline/scan/index.d.ts +7 -0
- package/dist/core/inline/scan/index.js +176 -0
- package/dist/core/inline/scan/plugin-syntax.d.ts +62 -0
- package/dist/core/inline/scan/plugin-syntax.js +150 -0
- package/dist/core/inline/scan/scan-state.d.ts +47 -0
- package/dist/core/inline/scan/scan-state.js +48 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +14 -0
- package/dist/core/inline/scan/simple-nodes.js +53 -0
- package/dist/core/inline/scan/url.d.ts +12 -0
- package/dist/core/inline/scan/url.js +82 -0
- package/dist/core/inline/transparency.d.ts +8 -0
- package/dist/core/inline/transparency.js +39 -0
- package/dist/core/inline/visibility.d.ts +81 -0
- package/dist/core/inline/visibility.js +144 -0
- package/dist/core/inline/walk.d.ts +14 -0
- package/dist/core/inline/walk.js +29 -0
- package/dist/core/inline-render.d.ts +48 -0
- package/dist/core/inline-render.js +322 -0
- package/dist/core/lines.d.ts +44 -0
- package/dist/core/lines.js +91 -0
- package/dist/core/node-views.d.ts +22 -0
- package/dist/core/node-views.js +8 -0
- package/dist/core/nodes.d.ts +297 -0
- package/dist/core/nodes.js +83 -0
- package/dist/core/parser.d.ts +68 -0
- package/dist/core/parser.js +189 -0
- package/dist/core/parsers/blockquote.d.ts +17 -0
- package/dist/core/parsers/blockquote.js +69 -0
- package/dist/core/parsers/built-in-openers.d.ts +8 -0
- package/dist/core/parsers/built-in-openers.js +124 -0
- package/dist/core/parsers/fence-syntax.d.ts +24 -0
- package/dist/core/parsers/fence-syntax.js +44 -0
- package/dist/core/parsers/fenced-code.d.ts +7 -0
- package/dist/core/parsers/fenced-code.js +29 -0
- package/dist/core/parsers/heading.d.ts +3 -0
- package/dist/core/parsers/heading.js +6 -0
- package/dist/core/parsers/html-block.d.ts +17 -0
- package/dist/core/parsers/html-block.js +94 -0
- package/dist/core/parsers/indented-code.d.ts +4 -0
- package/dist/core/parsers/indented-code.js +41 -0
- package/dist/core/parsers/link-reference.d.ts +7 -0
- package/dist/core/parsers/link-reference.js +152 -0
- package/dist/core/parsers/list.d.ts +19 -0
- package/dist/core/parsers/list.js +133 -0
- package/dist/core/parsers/paragraph.d.ts +10 -0
- package/dist/core/parsers/paragraph.js +42 -0
- package/dist/core/parsers/table-completion.d.ts +13 -0
- package/dist/core/parsers/table-completion.js +48 -0
- package/dist/core/parsers/table.d.ts +18 -0
- package/dist/core/parsers/table.js +110 -0
- package/dist/core/parsers/thematic-break.d.ts +1 -0
- package/dist/core/parsers/thematic-break.js +19 -0
- package/dist/core/serializer.d.ts +15 -0
- package/dist/core/serializer.js +11 -0
- package/dist/core/terminator-escalation.d.ts +8 -0
- package/dist/core/terminator-escalation.js +18 -0
- package/dist/core/url-policy.d.ts +14 -0
- package/dist/core/url-policy.js +44 -0
- package/dist/cursor/content-offsets.d.ts +29 -0
- package/dist/cursor/content-offsets.js +151 -0
- package/dist/cursor/coordinate-spaces.d.ts +65 -0
- package/dist/cursor/coordinate-spaces.js +66 -0
- package/dist/cursor/dom-walk.d.ts +18 -0
- package/dist/cursor/dom-walk.js +31 -0
- package/dist/cursor/edge-affinity.d.ts +44 -0
- package/dist/cursor/edge-affinity.js +60 -0
- package/dist/cursor/focused-caret.d.ts +10 -0
- package/dist/cursor/focused-caret.js +24 -0
- package/dist/cursor/height-model.d.ts +24 -0
- package/dist/cursor/height-model.js +72 -0
- package/dist/cursor/height-oracle.d.ts +24 -0
- package/dist/cursor/height-oracle.js +94 -0
- package/dist/cursor/overlay-rects.d.ts +8 -0
- package/dist/cursor/overlay-rects.js +19 -0
- package/dist/cursor/overlay-remeasure.d.ts +17 -0
- package/dist/cursor/overlay-remeasure.js +31 -0
- package/dist/cursor/pending-marks.d.ts +24 -0
- package/dist/cursor/pending-marks.js +36 -0
- package/dist/cursor/point-offset.d.ts +21 -0
- package/dist/cursor/point-offset.js +48 -0
- package/dist/cursor/reveal-anchor.d.ts +30 -0
- package/dist/cursor/reveal-anchor.js +31 -0
- package/dist/cursor/reveal-source.d.ts +35 -0
- package/dist/cursor/reveal-source.js +51 -0
- package/dist/cursor/scroll-ancestors.d.ts +28 -0
- package/dist/cursor/scroll-ancestors.js +89 -0
- package/dist/cursor/scrollport.d.ts +20 -0
- package/dist/cursor/scrollport.js +41 -0
- package/dist/cursor/sticky-column.d.ts +35 -0
- package/dist/cursor/sticky-column.js +64 -0
- package/dist/cursor/sticky-measure.d.ts +16 -0
- package/dist/cursor/sticky-measure.js +97 -0
- package/dist/cursor/typography-estimates.d.ts +21 -0
- package/dist/cursor/typography-estimates.js +21 -0
- package/dist/cursor/visual-lines.d.ts +25 -0
- package/dist/cursor/visual-lines.js +125 -0
- package/dist/cursor/widget-offset.d.ts +132 -0
- package/dist/cursor/widget-offset.js +543 -0
- package/dist/debug/diagnostics-report.d.ts +17 -0
- package/dist/debug/diagnostics-report.js +25 -0
- package/dist/debug/dump-tree.d.ts +6 -0
- package/dist/debug/dump-tree.js +114 -0
- package/dist/debug/inspect.d.ts +19 -0
- package/dist/debug/inspect.js +116 -0
- package/dist/debug/interaction-trace.d.ts +39 -0
- package/dist/debug/interaction-trace.js +105 -0
- package/dist/debug/operations-log.d.ts +14 -0
- package/dist/debug/operations-log.js +30 -0
- package/dist/decorations/buckets.d.ts +40 -0
- package/dist/decorations/buckets.js +87 -0
- package/dist/decorations/decoration-state.svelte.d.ts +20 -0
- package/dist/decorations/decoration-state.svelte.js +195 -0
- package/dist/decorations/island-dom.d.ts +35 -0
- package/dist/decorations/island-dom.js +148 -0
- package/dist/decorations/reserved-attrs.d.ts +12 -0
- package/dist/decorations/reserved-attrs.js +47 -0
- package/dist/decorations/types.d.ts +68 -0
- package/dist/decorations/types.js +5 -0
- package/dist/decorations/widget-dom.d.ts +15 -0
- package/dist/decorations/widget-dom.js +35 -0
- package/dist/dev-warn.d.ts +13 -0
- package/dist/dev-warn.js +28 -0
- package/dist/editor-actions/ancestry-folds.d.ts +32 -0
- package/dist/editor-actions/ancestry-folds.js +106 -0
- package/dist/editor-actions/block-edit-core.d.ts +29 -0
- package/dist/editor-actions/block-edit-core.js +277 -0
- package/dist/editor-actions/block-edit-scope.d.ts +79 -0
- package/dist/editor-actions/block-edit-scope.js +76 -0
- package/dist/editor-actions/block-edit.d.ts +8 -0
- package/dist/editor-actions/block-edit.js +111 -0
- package/dist/editor-actions/commit/history.d.ts +9 -0
- package/dist/editor-actions/commit/history.js +77 -0
- package/dist/editor-actions/commit/text-batch.d.ts +34 -0
- package/dist/editor-actions/commit/text-batch.js +61 -0
- package/dist/editor-actions/commit/undo-controller.d.ts +7 -0
- package/dist/editor-actions/commit/undo-controller.js +570 -0
- package/dist/editor-actions/container-block-component.d.ts +85 -0
- package/dist/editor-actions/container-block-component.js +228 -0
- package/dist/editor-actions/container-edit.d.ts +7 -0
- package/dist/editor-actions/container-edit.js +49 -0
- package/dist/editor-actions/container-exit-overrides.d.ts +16 -0
- package/dist/editor-actions/container-exit-overrides.js +38 -0
- package/dist/editor-actions/deps.d.ts +60 -0
- package/dist/editor-actions/deps.js +1 -0
- package/dist/editor-actions/enter-completion.d.ts +25 -0
- package/dist/editor-actions/enter-completion.js +76 -0
- package/dist/editor-actions/focus/focus-dispatch.d.ts +36 -0
- package/dist/editor-actions/focus/focus-dispatch.js +106 -0
- package/dist/editor-actions/focus/focus-landing.d.ts +7 -0
- package/dist/editor-actions/focus/focus-landing.js +39 -0
- package/dist/editor-actions/focus/focus.d.ts +7 -0
- package/dist/editor-actions/focus/focus.js +74 -0
- package/dist/editor-actions/index.d.ts +15 -0
- package/dist/editor-actions/index.js +19 -0
- package/dist/editor-actions/inline-range-commit.d.ts +20 -0
- package/dist/editor-actions/inline-range-commit.js +63 -0
- package/dist/editor-actions/list-context.d.ts +25 -0
- package/dist/editor-actions/list-context.js +285 -0
- package/dist/editor-actions/list-overrides.d.ts +13 -0
- package/dist/editor-actions/list-overrides.js +26 -0
- package/dist/editor-actions/merge-fallback.d.ts +19 -0
- package/dist/editor-actions/merge-fallback.js +27 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +65 -0
- package/dist/editor-actions/nested/nested-actions.js +59 -0
- package/dist/editor-actions/nested/nested-block-edit.d.ts +10 -0
- package/dist/editor-actions/nested/nested-block-edit.js +181 -0
- package/dist/editor-actions/nested/nested-focus.d.ts +9 -0
- package/dist/editor-actions/nested/nested-focus.js +30 -0
- package/dist/editor-actions/paste-coordinator.d.ts +4 -0
- package/dist/editor-actions/paste-coordinator.js +20 -0
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +25 -0
- package/dist/editor-actions/plugin/chrome-leaf.js +80 -0
- package/dist/editor-actions/plugin/container.d.ts +137 -0
- package/dist/editor-actions/plugin/container.js +351 -0
- package/dist/editor-actions/plugin/directive-container.d.ts +13 -0
- package/dist/editor-actions/plugin/directive-container.js +31 -0
- package/dist/editor-actions/reorder-action.d.ts +17 -0
- package/dist/editor-actions/reorder-action.js +104 -0
- package/dist/editor-actions/reorder-drag.d.ts +34 -0
- package/dist/editor-actions/reorder-drag.js +152 -0
- package/dist/editor-actions/replacement-focus.d.ts +27 -0
- package/dist/editor-actions/replacement-focus.js +60 -0
- package/dist/editor-actions/search-replace.d.ts +6 -0
- package/dist/editor-actions/search-replace.js +145 -0
- package/dist/editor-actions/table-context.d.ts +34 -0
- package/dist/editor-actions/table-context.js +292 -0
- package/dist/editor-actions/unwrap-strategies.d.ts +14 -0
- package/dist/editor-actions/unwrap-strategies.js +131 -0
- package/dist/editor-actions/whole-block-focus-surface.d.ts +51 -0
- package/dist/editor-actions/whole-block-focus-surface.js +171 -0
- package/dist/editor-events.d.ts +89 -0
- package/dist/editor-events.js +96 -0
- package/dist/editor-keys.d.ts +197 -0
- package/dist/editor-keys.js +40 -0
- package/dist/editor-props.d.ts +164 -0
- package/dist/editor-props.js +1 -0
- package/dist/editor-rects.d.ts +58 -0
- package/dist/editor-rects.js +114 -0
- package/dist/env.d.ts +12 -0
- package/dist/env.js +20 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +19 -0
- package/dist/invariants/commit-paths.d.ts +10 -0
- package/dist/invariants/commit-paths.js +25 -0
- package/dist/invariants/commit-scope.d.ts +9 -0
- package/dist/invariants/commit-scope.js +16 -0
- package/dist/invariants/context-keys.d.ts +7 -0
- package/dist/invariants/context-keys.js +14 -0
- package/dist/invariants/descriptor.d.ts +10 -0
- package/dist/invariants/descriptor.js +24 -0
- package/dist/invariants/inline-transitions.d.ts +23 -0
- package/dist/invariants/inline-transitions.js +52 -0
- package/dist/invariants/install.d.ts +36 -0
- package/dist/invariants/install.js +66 -0
- package/dist/invariants/landable-caret.d.ts +12 -0
- package/dist/invariants/landable-caret.js +31 -0
- package/dist/invariants/marker-css-parity.d.ts +10 -0
- package/dist/invariants/marker-css-parity.js +87 -0
- package/dist/invariants/node-shape.d.ts +44 -0
- package/dist/invariants/node-shape.js +258 -0
- package/dist/invariants/registry.d.ts +126 -0
- package/dist/invariants/registry.js +349 -0
- package/dist/invariants/render-fidelity.d.ts +8 -0
- package/dist/invariants/render-fidelity.js +33 -0
- package/dist/invariants/selection-endpoints.d.ts +19 -0
- package/dist/invariants/selection-endpoints.js +78 -0
- package/dist/invariants/single-node-sink.d.ts +9 -0
- package/dist/invariants/single-node-sink.js +16 -0
- package/dist/invariants/snapshot-integrity.d.ts +17 -0
- package/dist/invariants/snapshot-integrity.js +24 -0
- package/dist/invariants/split-landing.d.ts +8 -0
- package/dist/invariants/split-landing.js +15 -0
- package/dist/invariants/structural-descriptor.d.ts +21 -0
- package/dist/invariants/structural-descriptor.js +50 -0
- package/dist/perf/instruments.d.ts +49 -0
- package/dist/perf/instruments.js +154 -0
- package/dist/perf/use-mount-gauge.svelte.d.ts +1 -0
- package/dist/perf/use-mount-gauge.svelte.js +15 -0
- package/dist/plugin.d.ts +102 -0
- package/dist/plugin.js +156 -0
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +144 -0
- package/dist/plugins/admonitions/AdmonitionBlock.svelte.d.ts +11 -0
- package/dist/plugins/admonitions/admonition-kind.d.ts +8 -0
- package/dist/plugins/admonitions/admonition-kind.js +97 -0
- package/dist/plugins/admonitions/convert-document.d.ts +11 -0
- package/dist/plugins/admonitions/convert-document.js +39 -0
- package/dist/plugins/admonitions/gh-alert.d.ts +13 -0
- package/dist/plugins/admonitions/gh-alert.js +83 -0
- package/dist/plugins/admonitions/github-alert-kind.d.ts +12 -0
- package/dist/plugins/admonitions/github-alert-kind.js +125 -0
- package/dist/plugins/admonitions/index.d.ts +6 -0
- package/dist/plugins/admonitions/index.js +8 -0
- package/dist/plugins/admonitions/kinds.d.ts +26 -0
- package/dist/plugins/admonitions/kinds.js +18 -0
- package/dist/plugins/admonitions/register.d.ts +7 -0
- package/dist/plugins/admonitions/register.js +12 -0
- package/dist/plugins/details/DetailsBlock.svelte +129 -0
- package/dist/plugins/details/DetailsBlock.svelte.d.ts +11 -0
- package/dist/plugins/details/details-disclosure.svelte.d.ts +17 -0
- package/dist/plugins/details/details-disclosure.svelte.js +24 -0
- package/dist/plugins/details/details-kind.d.ts +25 -0
- package/dist/plugins/details/details-kind.js +237 -0
- package/dist/plugins/details/index.d.ts +2 -0
- package/dist/plugins/details/index.js +2 -0
- package/dist/plugins/details/register.d.ts +6 -0
- package/dist/plugins/details/register.js +15 -0
- package/dist/plugins/emoji/emoji-plugin.d.ts +2 -0
- package/dist/plugins/emoji/emoji-plugin.js +10 -0
- package/dist/plugins/emoji/emoji-recognizer.d.ts +18 -0
- package/dist/plugins/emoji/emoji-recognizer.js +63 -0
- package/dist/plugins/emoji/emoji-table.d.ts +1 -0
- package/dist/plugins/emoji/emoji-table.js +1919 -0
- package/dist/plugins/emoji/index.d.ts +3 -0
- package/dist/plugins/emoji/index.js +4 -0
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +103 -0
- package/dist/plugins/footnotes/FootnoteDefinition.svelte.d.ts +13 -0
- package/dist/plugins/footnotes/FootnoteReference.svelte +50 -0
- package/dist/plugins/footnotes/FootnoteReference.svelte.d.ts +4 -0
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +4 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +14 -0
- package/dist/plugins/footnotes/footnote-definition.js +147 -0
- package/dist/plugins/footnotes/footnote-lookup.d.ts +9 -0
- package/dist/plugins/footnotes/footnote-lookup.js +33 -0
- package/dist/plugins/footnotes/footnote-numbering.d.ts +23 -0
- package/dist/plugins/footnotes/footnote-numbering.js +78 -0
- package/dist/plugins/footnotes/footnote-reference.d.ts +7 -0
- package/dist/plugins/footnotes/footnote-reference.js +54 -0
- package/dist/plugins/footnotes/footnotes-plugin.d.ts +7 -0
- package/dist/plugins/footnotes/footnotes-plugin.js +17 -0
- package/dist/plugins/footnotes/index.d.ts +5 -0
- package/dist/plugins/footnotes/index.js +6 -0
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +17 -0
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +31 -0
- package/dist/plugins/highlight-occurrences/index.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/index.js +1 -0
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +26 -0
- package/dist/plugins/highlight-occurrences/occurrence-source.js +54 -0
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +33 -0
- package/dist/plugins/highlight-occurrences/occurrences.js +108 -0
- package/dist/plugins/latex/BlockMath.svelte +119 -0
- package/dist/plugins/latex/BlockMath.svelte.d.ts +21 -0
- package/dist/plugins/latex/MathInline.svelte +28 -0
- package/dist/plugins/latex/MathInline.svelte.d.ts +4 -0
- package/dist/plugins/latex/index.d.ts +3 -0
- package/dist/plugins/latex/index.js +4 -0
- package/dist/plugins/latex/latex-kind.d.ts +17 -0
- package/dist/plugins/latex/latex-kind.js +224 -0
- package/dist/plugins/latex/math-completion.d.ts +10 -0
- package/dist/plugins/latex/math-completion.js +19 -0
- package/dist/plugins/latex/math-renderer.d.ts +26 -0
- package/dist/plugins/latex/math-renderer.js +42 -0
- package/dist/plugins/latex/register.d.ts +10 -0
- package/dist/plugins/latex/register.js +23 -0
- package/dist/plugins/latex/renderer.d.ts +13 -0
- package/dist/plugins/latex/renderer.js +34 -0
- package/dist/plugins/mermaid/MermaidBlock.svelte +572 -0
- package/dist/plugins/mermaid/MermaidBlock.svelte.d.ts +11 -0
- package/dist/plugins/mermaid/index.d.ts +3 -0
- package/dist/plugins/mermaid/index.js +3 -0
- package/dist/plugins/mermaid/mermaid-kind.d.ts +38 -0
- package/dist/plugins/mermaid/mermaid-kind.js +176 -0
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +28 -0
- package/dist/plugins/mermaid/mermaid-renderer.js +35 -0
- package/dist/plugins/mermaid/register.d.ts +10 -0
- package/dist/plugins/mermaid/register.js +20 -0
- package/dist/plugins/mermaid/renderer.d.ts +11 -0
- package/dist/plugins/mermaid/renderer.js +53 -0
- package/dist/plugins/parrot/ParrotBlock.svelte +342 -0
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +21 -0
- package/dist/plugins/parrot/index.d.ts +1 -0
- package/dist/plugins/parrot/index.js +2 -0
- package/dist/plugins/parrot/parrot-plugin.d.ts +3 -0
- package/dist/plugins/parrot/parrot-plugin.js +49 -0
- package/dist/plugins/toc/TocBlock.svelte +218 -0
- package/dist/plugins/toc/TocBlock.svelte.d.ts +24 -0
- package/dist/plugins/toc/heading-outline.d.ts +28 -0
- package/dist/plugins/toc/heading-outline.js +65 -0
- package/dist/plugins/toc/index.d.ts +2 -0
- package/dist/plugins/toc/index.js +2 -0
- package/dist/plugins/toc/navigation-queue.d.ts +12 -0
- package/dist/plugins/toc/navigation-queue.js +21 -0
- package/dist/plugins/toc/toc-plugin.d.ts +16 -0
- package/dist/plugins/toc/toc-plugin.js +71 -0
- package/dist/presentation-mode.d.ts +32 -0
- package/dist/presentation-mode.js +50 -0
- package/dist/reactivity/block-list-state.svelte.d.ts +22 -0
- package/dist/reactivity/block-list-state.svelte.js +46 -0
- package/dist/reactivity/block-window.svelte.d.ts +41 -0
- package/dist/reactivity/block-window.svelte.js +93 -0
- package/dist/reactivity/content-version.svelte.d.ts +14 -0
- package/dist/reactivity/content-version.svelte.js +16 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +100 -0
- package/dist/reactivity/list-windowing.svelte.js +402 -0
- package/dist/reactivity/measure-batch.d.ts +15 -0
- package/dist/reactivity/measure-batch.js +18 -0
- package/dist/reactivity/publish-ref.svelte.d.ts +54 -0
- package/dist/reactivity/publish-ref.svelte.js +128 -0
- package/dist/reactivity/scope-geometry.d.ts +18 -0
- package/dist/reactivity/scope-geometry.js +29 -0
- package/dist/reactivity/state-registry.d.ts +10 -0
- package/dist/reactivity/state-registry.js +44 -0
- package/dist/reactivity/use-container-windowing.svelte.d.ts +35 -0
- package/dist/reactivity/use-container-windowing.svelte.js +95 -0
- package/dist/reactivity/window-slice.d.ts +11 -0
- package/dist/reactivity/window-slice.js +9 -0
- package/dist/scan-index.d.ts +11 -0
- package/dist/scan-index.js +27 -0
- package/dist/schema/block-commands.d.ts +105 -0
- package/dist/schema/block-commands.js +179 -0
- package/dist/schema/block-completions.d.ts +33 -0
- package/dist/schema/block-completions.js +49 -0
- package/dist/schema/block-component-registry.d.ts +33 -0
- package/dist/schema/block-component-registry.js +33 -0
- package/dist/schema/block-kind-descriptor.d.ts +281 -0
- package/dist/schema/block-kind-descriptor.js +187 -0
- package/dist/schema/block-openers.d.ts +94 -0
- package/dist/schema/block-openers.js +150 -0
- package/dist/schema/built-in-descriptors.d.ts +8 -0
- package/dist/schema/built-in-descriptors.js +560 -0
- package/dist/schema/child-spans.d.ts +25 -0
- package/dist/schema/child-spans.js +161 -0
- package/dist/schema/closure.d.ts +39 -0
- package/dist/schema/closure.js +55 -0
- package/dist/schema/command-id.d.ts +20 -0
- package/dist/schema/command-id.js +42 -0
- package/dist/schema/commands.d.ts +147 -0
- package/dist/schema/commands.js +294 -0
- package/dist/schema/container-raw.d.ts +21 -0
- package/dist/schema/container-raw.js +43 -0
- package/dist/schema/container-rebuilders.d.ts +32 -0
- package/dist/schema/container-rebuilders.js +95 -0
- package/dist/schema/define-plugin-block.d.ts +15 -0
- package/dist/schema/define-plugin-block.js +18 -0
- package/dist/schema/fenced-code-raw.d.ts +43 -0
- package/dist/schema/fenced-code-raw.js +220 -0
- package/dist/schema/global-commands.d.ts +11 -0
- package/dist/schema/global-commands.js +40 -0
- package/dist/schema/inline-construct-policy.d.ts +131 -0
- package/dist/schema/inline-construct-policy.js +96 -0
- package/dist/schema/keybinding-overrides.d.ts +39 -0
- package/dist/schema/keybinding-overrides.js +43 -0
- package/dist/schema/keybindings.d.ts +36 -0
- package/dist/schema/keybindings.js +75 -0
- package/dist/schema/merge-rules.d.ts +28 -0
- package/dist/schema/merge-rules.js +57 -0
- package/dist/schema/opener-priorities.d.ts +16 -0
- package/dist/schema/opener-priorities.js +16 -0
- package/dist/schema/operations.d.ts +110 -0
- package/dist/schema/operations.js +6 -0
- package/dist/schema/plugin-activation.d.ts +13 -0
- package/dist/schema/plugin-activation.js +18 -0
- package/dist/schema/plugin-editor-context.d.ts +33 -0
- package/dist/schema/plugin-editor-context.js +65 -0
- package/dist/schema/plugin-install.d.ts +58 -0
- package/dist/schema/plugin-install.js +132 -0
- package/dist/schema/plugin-kind.d.ts +21 -0
- package/dist/schema/plugin-kind.js +86 -0
- package/dist/schema/plugin-name.d.ts +1 -0
- package/dist/schema/plugin-name.js +7 -0
- package/dist/schema/register-once.d.ts +9 -0
- package/dist/schema/register-once.js +35 -0
- package/dist/schema/registration-checks.d.ts +32 -0
- package/dist/schema/registration-checks.js +122 -0
- package/dist/schema/registration-pending.d.ts +28 -0
- package/dist/schema/registration-pending.js +48 -0
- package/dist/schema/registry-reset.d.ts +7 -0
- package/dist/schema/registry-reset.js +30 -0
- package/dist/schema/registry-view.d.ts +30 -0
- package/dist/schema/registry-view.js +39 -0
- package/dist/schema/reserved-chords.d.ts +35 -0
- package/dist/schema/reserved-chords.js +313 -0
- package/dist/schema/reserved-chrome.d.ts +23 -0
- package/dist/schema/reserved-chrome.js +33 -0
- package/dist/schema/table-cell-raw.d.ts +14 -0
- package/dist/schema/table-cell-raw.js +30 -0
- package/dist/schema/whole-block-unit.d.ts +8 -0
- package/dist/schema/whole-block-unit.js +12 -0
- package/dist/search/document-scan.d.ts +22 -0
- package/dist/search/document-scan.js +39 -0
- package/dist/search/matcher.d.ts +31 -0
- package/dist/search/matcher.js +70 -0
- package/dist/search/regex-executor.d.ts +41 -0
- package/dist/search/regex-executor.js +165 -0
- package/dist/search/replace.d.ts +15 -0
- package/dist/search/replace.js +29 -0
- package/dist/search/search-state.svelte.d.ts +59 -0
- package/dist/search/search-state.svelte.js +231 -0
- package/dist/selection/autoscroll.d.ts +26 -0
- package/dist/selection/autoscroll.js +91 -0
- package/dist/selection/block-hit-test.d.ts +37 -0
- package/dist/selection/block-hit-test.js +59 -0
- package/dist/selection/caret-doors.d.ts +20 -0
- package/dist/selection/caret-doors.js +44 -0
- package/dist/selection/caret-restore.d.ts +15 -0
- package/dist/selection/caret-restore.js +32 -0
- package/dist/selection/char-endpoint-snap.d.ts +15 -0
- package/dist/selection/char-endpoint-snap.js +39 -0
- package/dist/selection/clipboard-text.d.ts +13 -0
- package/dist/selection/clipboard-text.js +314 -0
- package/dist/selection/cross-block/clipboard.d.ts +14 -0
- package/dist/selection/cross-block/clipboard.js +20 -0
- package/dist/selection/cross-block/dispatch.d.ts +78 -0
- package/dist/selection/cross-block/dispatch.js +57 -0
- package/dist/selection/cross-block/format-range.d.ts +38 -0
- package/dist/selection/cross-block/format-range.js +193 -0
- package/dist/selection/cross-block/format-toggle.d.ts +27 -0
- package/dist/selection/cross-block/format-toggle.js +109 -0
- package/dist/selection/cross-block/keydown.d.ts +11 -0
- package/dist/selection/cross-block/keydown.js +339 -0
- package/dist/selection/cross-block/ops.d.ts +56 -0
- package/dist/selection/cross-block/ops.js +210 -0
- package/dist/selection/cross-block/paste.d.ts +8 -0
- package/dist/selection/cross-block/paste.js +156 -0
- package/dist/selection/cross-block/pointer.d.ts +19 -0
- package/dist/selection/cross-block/pointer.js +80 -0
- package/dist/selection/cross-block/type-replace.d.ts +10 -0
- package/dist/selection/cross-block/type-replace.js +129 -0
- package/dist/selection/dead-space-caret.d.ts +39 -0
- package/dist/selection/dead-space-caret.js +173 -0
- package/dist/selection/drag-pointer.d.ts +22 -0
- package/dist/selection/drag-pointer.js +89 -0
- package/dist/selection/gap-caret.d.ts +47 -0
- package/dist/selection/gap-caret.js +72 -0
- package/dist/selection/keyboard-extend.d.ts +43 -0
- package/dist/selection/keyboard-extend.js +257 -0
- package/dist/selection/native-bridge.d.ts +47 -0
- package/dist/selection/native-bridge.js +204 -0
- package/dist/selection/nearest-block.d.ts +43 -0
- package/dist/selection/nearest-block.js +73 -0
- package/dist/selection/path-lookup.d.ts +32 -0
- package/dist/selection/path-lookup.js +132 -0
- package/dist/selection/path-math.d.ts +35 -0
- package/dist/selection/path-math.js +90 -0
- package/dist/selection/pointer-session.d.ts +43 -0
- package/dist/selection/pointer-session.js +111 -0
- package/dist/selection/primitives.d.ts +75 -0
- package/dist/selection/primitives.js +91 -0
- package/dist/selection/range-delete-ceremony.d.ts +85 -0
- package/dist/selection/range-delete-ceremony.js +197 -0
- package/dist/selection/range-delete-chrome.d.ts +39 -0
- package/dist/selection/range-delete-chrome.js +105 -0
- package/dist/selection/range-delete-table-coverage.d.ts +28 -0
- package/dist/selection/range-delete-table-coverage.js +168 -0
- package/dist/selection/range-delete-table.d.ts +16 -0
- package/dist/selection/range-delete-table.js +347 -0
- package/dist/selection/range-delete.d.ts +33 -0
- package/dist/selection/range-delete.js +121 -0
- package/dist/selection/selection-description.d.ts +7 -0
- package/dist/selection/selection-description.js +18 -0
- package/dist/selection/selection-restore.d.ts +46 -0
- package/dist/selection/selection-restore.js +66 -0
- package/dist/selection/selection-state.svelte.d.ts +72 -0
- package/dist/selection/selection-state.svelte.js +247 -0
- package/dist/selection/shared-keydown.d.ts +61 -0
- package/dist/selection/shared-keydown.js +150 -0
- package/dist/selection/table-endpoint-snap.d.ts +55 -0
- package/dist/selection/table-endpoint-snap.js +143 -0
- package/dist/selection/table-rect-extend.d.ts +23 -0
- package/dist/selection/table-rect-extend.js +46 -0
- package/dist/selection/widget-range-paint.d.ts +12 -0
- package/dist/selection/widget-range-paint.js +44 -0
- package/dist/styles/editor-theme.css +151 -0
- package/dist/styles/editor.css +585 -0
- package/dist/testing/conformance-core.d.ts +45 -0
- package/dist/testing/conformance-core.js +105 -0
- package/dist/testing/container-conformance.d.ts +137 -0
- package/dist/testing/container-conformance.js +533 -0
- package/dist/testing/headless-actions.d.ts +37 -0
- package/dist/testing/headless-actions.js +118 -0
- package/dist/testing/inline-conformance.d.ts +50 -0
- package/dist/testing/inline-conformance.js +442 -0
- package/dist/testing/kind-conformance.d.ts +54 -0
- package/dist/testing/kind-conformance.js +325 -0
- package/dist/testing/mount-dom-stubs.d.ts +8 -0
- package/dist/testing/mount-dom-stubs.js +19 -0
- package/dist/testing/parse-convergence.d.ts +14 -0
- package/dist/testing/parse-convergence.js +81 -0
- package/dist/testing.d.ts +20 -0
- package/dist/testing.js +61 -0
- package/dist/tree-operations/blockquote.d.ts +18 -0
- package/dist/tree-operations/blockquote.js +59 -0
- package/dist/tree-operations/children.d.ts +17 -0
- package/dist/tree-operations/children.js +56 -0
- package/dist/tree-operations/cleanup.d.ts +10 -0
- package/dist/tree-operations/cleanup.js +25 -0
- package/dist/tree-operations/clone.d.ts +5 -0
- package/dist/tree-operations/clone.js +43 -0
- package/dist/tree-operations/container-lift.d.ts +9 -0
- package/dist/tree-operations/container-lift.js +29 -0
- package/dist/tree-operations/index.d.ts +16 -0
- package/dist/tree-operations/index.js +14 -0
- package/dist/tree-operations/list/empty-check.d.ts +7 -0
- package/dist/tree-operations/list/empty-check.js +19 -0
- package/dist/tree-operations/list/exit-replacement.d.ts +13 -0
- package/dist/tree-operations/list/exit-replacement.js +49 -0
- package/dist/tree-operations/list/item-partition.d.ts +13 -0
- package/dist/tree-operations/list/item-partition.js +33 -0
- package/dist/tree-operations/list/list-builders.d.ts +44 -0
- package/dist/tree-operations/list/list-builders.js +129 -0
- package/dist/tree-operations/list/ordered-markers.d.ts +36 -0
- package/dist/tree-operations/list/ordered-markers.js +114 -0
- package/dist/tree-operations/list/reconcile-task.d.ts +12 -0
- package/dist/tree-operations/list/reconcile-task.js +47 -0
- package/dist/tree-operations/list/sublist-separator.d.ts +13 -0
- package/dist/tree-operations/list/sublist-separator.js +34 -0
- package/dist/tree-operations/list/terminator.d.ts +17 -0
- package/dist/tree-operations/list/terminator.js +60 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +29 -0
- package/dist/tree-operations/list/unwrap-merge.js +202 -0
- package/dist/tree-operations/node-ops.d.ts +296 -0
- package/dist/tree-operations/node-ops.js +1428 -0
- package/dist/tree-operations/parse-block.d.ts +3 -0
- package/dist/tree-operations/parse-block.js +8 -0
- package/dist/tree-operations/paste/apply.d.ts +12 -0
- package/dist/tree-operations/paste/apply.js +75 -0
- package/dist/tree-operations/paste/body-write.d.ts +19 -0
- package/dist/tree-operations/paste/body-write.js +53 -0
- package/dist/tree-operations/paste/container-match.d.ts +32 -0
- package/dist/tree-operations/paste/container-match.js +238 -0
- package/dist/tree-operations/paste/container-paste.d.ts +10 -0
- package/dist/tree-operations/paste/container-paste.js +27 -0
- package/dist/tree-operations/paste/dispatch.d.ts +61 -0
- package/dist/tree-operations/paste/dispatch.js +138 -0
- package/dist/tree-operations/paste/find-enclosing-list.d.ts +8 -0
- package/dist/tree-operations/paste/find-enclosing-list.js +30 -0
- package/dist/tree-operations/paste/focus-target.d.ts +27 -0
- package/dist/tree-operations/paste/focus-target.js +40 -0
- package/dist/tree-operations/paste/hooks.d.ts +17 -0
- package/dist/tree-operations/paste/hooks.js +80 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +29 -0
- package/dist/tree-operations/paste/list-absorb.js +106 -0
- package/dist/tree-operations/paste/list-break-out.d.ts +42 -0
- package/dist/tree-operations/paste/list-break-out.js +136 -0
- package/dist/tree-operations/paste/parent-scope.d.ts +17 -0
- package/dist/tree-operations/paste/parent-scope.js +35 -0
- package/dist/tree-operations/paste/paste-deps.d.ts +20 -0
- package/dist/tree-operations/paste/paste-deps.js +6 -0
- package/dist/tree-operations/paste/paste-replacement.d.ts +8 -0
- package/dist/tree-operations/paste/paste-replacement.js +60 -0
- package/dist/tree-operations/paste/paste-transforms.d.ts +25 -0
- package/dist/tree-operations/paste/paste-transforms.js +72 -0
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +29 -0
- package/dist/tree-operations/paste/replace-block-at-parent.js +75 -0
- package/dist/tree-operations/paste/strategy.d.ts +9 -0
- package/dist/tree-operations/paste/strategy.js +20 -0
- package/dist/tree-operations/paste/table-slice.d.ts +10 -0
- package/dist/tree-operations/paste/table-slice.js +39 -0
- package/dist/tree-operations/paste-surfaces.d.ts +61 -0
- package/dist/tree-operations/paste-surfaces.js +15 -0
- package/dist/tree-operations/path-mutate.d.ts +12 -0
- package/dist/tree-operations/path-mutate.js +20 -0
- package/dist/tree-operations/reorder-unit.d.ts +17 -0
- package/dist/tree-operations/reorder-unit.js +37 -0
- package/dist/tree-operations/reorder.d.ts +13 -0
- package/dist/tree-operations/reorder.js +57 -0
- package/dist/tree-operations/sharing.d.ts +18 -0
- package/dist/tree-operations/sharing.js +14 -0
- package/dist/tree-operations/splice-many.d.ts +9 -0
- package/dist/tree-operations/splice-many.js +22 -0
- package/dist/tree-operations/structural-change.d.ts +65 -0
- package/dist/tree-operations/structural-change.js +117 -0
- package/dist/tree-operations/sub-table-copy.d.ts +6 -0
- package/dist/tree-operations/sub-table-copy.js +43 -0
- package/dist/tree-operations/table-mutations.d.ts +17 -0
- package/dist/tree-operations/table-mutations.js +101 -0
- package/dist/tree-operations/unshare.d.ts +101 -0
- package/dist/tree-operations/unshare.js +248 -0
- package/dist/undo/manager.d.ts +2 -0
- package/dist/undo/manager.js +50 -0
- package/dist/undo/types.d.ts +44 -0
- package/dist/undo/types.js +7 -0
- package/docs/guide/consumer-guide.md +1098 -0
- package/docs/guide/directives.md +223 -0
- package/docs/guide/plugin-api.md +329 -0
- package/docs/guide/plugin-guide/conspiracy.gif +0 -0
- package/docs/guide/plugin-guide/parrot-frames.md +209 -0
- package/docs/guide/plugin-guide/parrot.gif +0 -0
- package/docs/guide/plugin-guide.md +1693 -0
- package/docs/guide/plugin-testing.md +463 -0
- package/package.json +238 -0
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One windowing wiring unit per BlockList-bearing scope (the editor root and every
|
|
3
|
+
* activated nested container). Composes the height oracle, a per-scope Fenwick model, and
|
|
4
|
+
* `createBlockWindow`; maps the single editor scrollport into this scope's coordinate
|
|
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`.
|
|
7
|
+
*/
|
|
8
|
+
import { tick, untrack } from 'svelte';
|
|
9
|
+
import { HeightModel } from '../cursor/height-model';
|
|
10
|
+
import { createBlockWindow } from './block-window.svelte';
|
|
11
|
+
import { estimateWidth, effectiveViewportHeight, listTopWithinContent } from './scope-geometry';
|
|
12
|
+
import { runMeasureBatch } from './measure-batch';
|
|
13
|
+
/**
|
|
14
|
+
* Resize-gate decision (pure, unit-tested). Keyed on the height DIFFERING from what is
|
|
15
|
+
* recorded, never on which callback delivered it: a cached remount can report the grown
|
|
16
|
+
* size in the very first callback, so a callback-order heuristic would drop it.
|
|
17
|
+
* `recorded === undefined` means the batched mount pass hasn't measured this block yet —
|
|
18
|
+
* defer to it rather than racing a lone read in on a fling-dirtied layout.
|
|
19
|
+
*/
|
|
20
|
+
export function shouldRemeasureOnResize(recorded, observed) {
|
|
21
|
+
if (observed <= 0 || recorded === undefined)
|
|
22
|
+
return false;
|
|
23
|
+
return Math.abs(recorded - observed) >= 1;
|
|
24
|
+
}
|
|
25
|
+
// One shared result backs every collapsed scope — frozen so a consumer mutating
|
|
26
|
+
// its window cannot silently corrupt sibling scopes through the singleton.
|
|
27
|
+
const collapsedWindow = Object.freeze({
|
|
28
|
+
active: true,
|
|
29
|
+
start: 0,
|
|
30
|
+
end: 1,
|
|
31
|
+
topSpacerPx: 0,
|
|
32
|
+
bottomSpacerPx: 0
|
|
33
|
+
});
|
|
34
|
+
// This scope's list top within the port's scroll content — the offset mapping port scrollTop
|
|
35
|
+
// into this scope's local range, real at every depth because spacers preserve the geometry
|
|
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`).
|
|
38
|
+
function listTopInPort(port, listEl) {
|
|
39
|
+
return listTopWithinContent(listEl.getBoundingClientRect().top, port.viewportTop(), port.scrollTop());
|
|
40
|
+
}
|
|
41
|
+
export function createListWindowing(deps) {
|
|
42
|
+
// The id list index-aligned with the CURRENT `model`. Snapshotted, not read live: a
|
|
43
|
+
// structural rebuild needs the OLD ordering to remap the anchor by id, and by then
|
|
44
|
+
// `getChildIds()` already reflects the new children. Copied — it is spliced in place.
|
|
45
|
+
let modelChildIds = [];
|
|
46
|
+
function buildModel() {
|
|
47
|
+
const width = estimateWidth(deps.getListEl(), deps.getPort()?.contentWidth() ?? 0);
|
|
48
|
+
const children = deps.getChildren();
|
|
49
|
+
// Indexed, and off the snapshot: `map` pays a `has` trap beside every `get`, once per child.
|
|
50
|
+
modelChildIds = deps.getChildIds().slice();
|
|
51
|
+
const count = children.length;
|
|
52
|
+
const heights = new Array(count);
|
|
53
|
+
for (let i = 0; i < count; i++) {
|
|
54
|
+
heights[i] = deps.oracle.height(modelChildIds[i], children[i], width);
|
|
55
|
+
}
|
|
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; the batch effect 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
|
+
// Hold the anchor block's screen position across a height mutation that would otherwise
|
|
127
|
+
// slide the visible content (VR-2) — native `overflow-anchor` is off wherever this runs, so
|
|
128
|
+
// nothing else holds the line. The delta comes from the Fenwick model, not
|
|
129
|
+
// `getBoundingClientRect`: a model write only marks `$state` dirty, so a DOM read here
|
|
130
|
+
// would see pre-flush layout and a ~0 delta.
|
|
131
|
+
function correctAnchor(mutate) {
|
|
132
|
+
if (skipWhileHostAnchors(mutate))
|
|
133
|
+
return;
|
|
134
|
+
if (reassertRevealAnchor(mutate))
|
|
135
|
+
return;
|
|
136
|
+
const port = deps.getPort();
|
|
137
|
+
const anchorIndex = model.indexAtOffset(localScrollTop());
|
|
138
|
+
const before = model.offsetOf(anchorIndex);
|
|
139
|
+
mutate();
|
|
140
|
+
const delta = model.offsetOf(anchorIndex) - before;
|
|
141
|
+
if (delta !== 0 && port)
|
|
142
|
+
port.setScrollTop(port.scrollTop() + delta);
|
|
143
|
+
}
|
|
144
|
+
// The structural-rebuild variant of correctAnchor. A count change shifts every index
|
|
145
|
+
// above it, so the numeric form would measure a DIFFERENT block at index N and mis-correct
|
|
146
|
+
// by ~one anchor-block height (VR-2 jump on an above-fold edit). Remap by stable id
|
|
147
|
+
// instead, captured against the OLD ordering in `modelChildIds`; a deleted anchor has no
|
|
148
|
+
// surviving block to hold the line, so skip.
|
|
149
|
+
function correctAnchorByStableId(mutate) {
|
|
150
|
+
if (skipWhileHostAnchors(mutate))
|
|
151
|
+
return;
|
|
152
|
+
if (reassertRevealAnchor(mutate))
|
|
153
|
+
return;
|
|
154
|
+
const port = deps.getPort();
|
|
155
|
+
const lst = localScrollTop();
|
|
156
|
+
const anchorIndex = model.indexAtOffset(lst);
|
|
157
|
+
const before = model.offsetOf(anchorIndex);
|
|
158
|
+
const anchorId = modelChildIds[anchorIndex];
|
|
159
|
+
mutate();
|
|
160
|
+
// At lst === 0 the top-of-viewport block belongs to an ancestor scope, so there is no
|
|
161
|
+
// local anchor: a nonzero delta could only come from the anchor being relocated
|
|
162
|
+
// within this scope, and following it would shift the shared scrollTop spuriously.
|
|
163
|
+
// The numeric form needs no such guard — its offsetOf(same index) is 0 here anyway.
|
|
164
|
+
if (lst === 0)
|
|
165
|
+
return;
|
|
166
|
+
const newIndex = anchorId !== undefined ? modelChildIds.indexOf(anchorId) : -1;
|
|
167
|
+
if (newIndex === -1)
|
|
168
|
+
return;
|
|
169
|
+
const delta = model.offsetOf(newIndex) - before;
|
|
170
|
+
if (delta !== 0 && port)
|
|
171
|
+
port.setScrollTop(port.scrollTop() + delta);
|
|
172
|
+
}
|
|
173
|
+
let lastWidthVersion = deps.getWidthVersion();
|
|
174
|
+
// Rebuild on any structural child change or an editor WIDTH change, never per keystroke.
|
|
175
|
+
// Keying on the id SEQUENCE rather than its length is load-bearing: a reorder leaving the count
|
|
176
|
+
// unchanged would skip the rebuild. `untrack` keeps the effect from subscribing to every child's
|
|
177
|
+
// raw via the oracle; the reseed's wholesale offset shift anchor-corrects by stable id.
|
|
178
|
+
$effect(() => {
|
|
179
|
+
const ids = deps.getChildIds();
|
|
180
|
+
for (let i = 0; i < ids.length; i++)
|
|
181
|
+
void ids[i];
|
|
182
|
+
void deps.getPort();
|
|
183
|
+
const widthVersion = deps.getWidthVersion();
|
|
184
|
+
untrack(() => {
|
|
185
|
+
const widthChanged = widthVersion !== lastWidthVersion;
|
|
186
|
+
lastWidthVersion = widthVersion;
|
|
187
|
+
// ONE correction across ONE model transition: a delta taken between the reseed and
|
|
188
|
+
// the re-measure compares measured-before against all-estimate-after, and lands the
|
|
189
|
+
// anchor a block off wherever the poisoned model names a different top child (#188).
|
|
190
|
+
// Width only — re-measuring on a structural edit costs a reflow per split.
|
|
191
|
+
correctAnchorByStableId(() => {
|
|
192
|
+
model = buildModel();
|
|
193
|
+
heightVersion++;
|
|
194
|
+
if (widthChanged)
|
|
195
|
+
remeasureMounted();
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
// Map the port's scrollTop into this scope's local range.
|
|
200
|
+
function localScrollTop() {
|
|
201
|
+
const port = deps.getPort();
|
|
202
|
+
const listEl = deps.getListEl();
|
|
203
|
+
if (!port || !listEl)
|
|
204
|
+
return 0;
|
|
205
|
+
return Math.max(0, port.scrollTop() - listTopInPort(port, listEl));
|
|
206
|
+
}
|
|
207
|
+
// Each scope windows against its OWN slice of the viewport: against the full port
|
|
208
|
+
// height, N stacked active scopes would each mount a viewport's worth of blocks. Falls
|
|
209
|
+
// back to the full height when the list is unmounted. Read only by the window derived,
|
|
210
|
+
// which is why the height version belongs here and not in `revealTargetScrollTop`.
|
|
211
|
+
function scopeViewportHeight() {
|
|
212
|
+
void deps.getViewportHeightVersion();
|
|
213
|
+
const port = deps.getPort();
|
|
214
|
+
const listEl = deps.getListEl();
|
|
215
|
+
if (!port)
|
|
216
|
+
return 0;
|
|
217
|
+
if (!listEl)
|
|
218
|
+
return port.viewportHeight();
|
|
219
|
+
const listRect = listEl.getBoundingClientRect();
|
|
220
|
+
return effectiveViewportHeight(port.viewportTop(), port.viewportHeight(), listRect.top, listRect.height);
|
|
221
|
+
}
|
|
222
|
+
// This scope's pin: the focused path's index at this scope's depth, iff the focus path
|
|
223
|
+
// descends through this scope.
|
|
224
|
+
function pinnedIndex() {
|
|
225
|
+
const fp = deps.getFocusPath();
|
|
226
|
+
const pp = deps.getParentPath();
|
|
227
|
+
if (!fp || fp.length <= pp.length)
|
|
228
|
+
return null;
|
|
229
|
+
for (let i = 0; i < pp.length; i++)
|
|
230
|
+
if (fp[i] !== pp[i])
|
|
231
|
+
return null;
|
|
232
|
+
return fp[pp.length];
|
|
233
|
+
}
|
|
234
|
+
const win = createBlockWindow({
|
|
235
|
+
getModel: () => {
|
|
236
|
+
void heightVersion;
|
|
237
|
+
return model;
|
|
238
|
+
},
|
|
239
|
+
getPort: deps.getPort,
|
|
240
|
+
getLocalScrollTop: localScrollTop,
|
|
241
|
+
getViewportHeight: scopeViewportHeight,
|
|
242
|
+
getPinnedIndex: pinnedIndex,
|
|
243
|
+
overscan: deps.overscan,
|
|
244
|
+
pinExtensionCap: deps.pinExtensionCap,
|
|
245
|
+
activateAbovePx: deps.activateAbovePx,
|
|
246
|
+
deactivateBelowPx: deps.deactivateBelowPx
|
|
247
|
+
});
|
|
248
|
+
// The collapse clamp substituted at the returned surface. While collapsed this doesn't
|
|
249
|
+
// read `win.result`, so the bypassed math (and the hysteresis tracking) never observes
|
|
250
|
+
// the clamp.
|
|
251
|
+
const effectiveWindow = $derived.by(() => (deps.isCollapsed?.() ? collapsedWindow : win.result));
|
|
252
|
+
// Children measuring in resize the spacers, so the box height the parent measured at
|
|
253
|
+
// this container's mount goes stale. BOX height, not `model.total()`, so it matches what
|
|
254
|
+
// this container's own BlockHost measured — otherwise two writers fight over the slot.
|
|
255
|
+
// Gated on the box actually moving: ungated, the rect read and the upward write chain up
|
|
256
|
+
// the scopes inside the observer's own delivery frame, raising the RO loop warning (#189).
|
|
257
|
+
let reportedSelfHeight = 0;
|
|
258
|
+
$effect(() => {
|
|
259
|
+
void heightVersion;
|
|
260
|
+
const el = deps.getOwnEl?.();
|
|
261
|
+
if (!el || !deps.reportSelfHeight)
|
|
262
|
+
return;
|
|
263
|
+
const h = el.getBoundingClientRect().height;
|
|
264
|
+
if (h > 0 && Math.abs(h - reportedSelfHeight) >= 1) {
|
|
265
|
+
reportedSelfHeight = h;
|
|
266
|
+
deps.reportSelfHeight(h);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
// The batched measure pass for NEWLY-MOUNTED children, keyed on the EFFECTIVE window: the
|
|
270
|
+
// raw result can be identical across a collapse expand, stranding remounted children in
|
|
271
|
+
// `pending` until the next scroll. Registration deliberately does NOT bump reactive
|
|
272
|
+
// state — the mount that registers a child already moved the window, so a per-child
|
|
273
|
+
// trigger would re-enter this effect O(children) times and trip the update-depth guard.
|
|
274
|
+
$effect(() => {
|
|
275
|
+
void effectiveWindow;
|
|
276
|
+
untrack(() => flushMeasurements());
|
|
277
|
+
});
|
|
278
|
+
// The UNCORRECTED batch: the caller owns the anchor correction, because nesting a second
|
|
279
|
+
// one inside an outer `mutate` double-counts the delta.
|
|
280
|
+
function drainMeasurements() {
|
|
281
|
+
if (pending.size === 0)
|
|
282
|
+
return;
|
|
283
|
+
const entries = [];
|
|
284
|
+
for (const id of pending) {
|
|
285
|
+
const child = registry.get(id);
|
|
286
|
+
if (child)
|
|
287
|
+
entries.push(child);
|
|
288
|
+
}
|
|
289
|
+
pending.clear();
|
|
290
|
+
runMeasureBatch(entries);
|
|
291
|
+
}
|
|
292
|
+
// A width rebuild reseeds every slot from the new-width estimate, but mounted blocks hold
|
|
293
|
+
// real heights and their measure effects key on `node.raw`, not width.
|
|
294
|
+
function remeasureMounted() {
|
|
295
|
+
for (const id of registry.keys())
|
|
296
|
+
pending.add(id);
|
|
297
|
+
drainMeasurements();
|
|
298
|
+
}
|
|
299
|
+
function flushMeasurements() {
|
|
300
|
+
if (pending.size === 0)
|
|
301
|
+
return;
|
|
302
|
+
// The batch writes above-viewport slots too, so the anchor correction keeps the
|
|
303
|
+
// top-of-viewport block fixed.
|
|
304
|
+
correctAnchor(drainMeasurements);
|
|
305
|
+
}
|
|
306
|
+
// Read the height BEFORE correctAnchor so no DOM read follows the model write. The write
|
|
307
|
+
// is convergence-guarded (`recordMeasuredChild` no-ops once the height settles), so a
|
|
308
|
+
// redundant call can't spin the reactive graph.
|
|
309
|
+
function measureOne(id) {
|
|
310
|
+
const child = registry.get(id);
|
|
311
|
+
if (!child)
|
|
312
|
+
return;
|
|
313
|
+
const h = child.readHeight();
|
|
314
|
+
if (h > 0)
|
|
315
|
+
correctAnchor(() => child.applyHeight(h));
|
|
316
|
+
}
|
|
317
|
+
return {
|
|
318
|
+
get window() {
|
|
319
|
+
return effectiveWindow;
|
|
320
|
+
},
|
|
321
|
+
// PASSIVE — no scrollTop correction; anchor stability rides estimate quality plus
|
|
322
|
+
// the spacers.
|
|
323
|
+
recordMeasuredChild(index, id, height) {
|
|
324
|
+
deps.oracle.recordMeasured(id, height);
|
|
325
|
+
if (index < model.size && model.heightOf(index) !== height) {
|
|
326
|
+
model.setHeight(index, height);
|
|
327
|
+
heightVersion++;
|
|
328
|
+
}
|
|
329
|
+
},
|
|
330
|
+
// List items aren't BlockHosts and have no other oracle writer, so without this write
|
|
331
|
+
// a parent rebuild would reseed their slots from estimates and the viewport jumps.
|
|
332
|
+
// Idempotent for hosted children. `modelChildIds`, not the live list, for the same
|
|
333
|
+
// reason `recordMeasuredChild` takes its id from the caller: both write a model
|
|
334
|
+
// indexed by the snapshot.
|
|
335
|
+
setChildSubtotal(index, total) {
|
|
336
|
+
const id = modelChildIds[index];
|
|
337
|
+
if (id !== undefined)
|
|
338
|
+
deps.oracle.recordMeasured(id, total);
|
|
339
|
+
if (index >= model.size || model.heightOf(index) === total)
|
|
340
|
+
return;
|
|
341
|
+
const write = () => {
|
|
342
|
+
model.setHeight(index, total);
|
|
343
|
+
heightVersion++;
|
|
344
|
+
};
|
|
345
|
+
// Correction-free unless a reveal claim is live — the claim is the gate, so the
|
|
346
|
+
// no-cascade rule stands for every other write. Without it, growth INSIDE the
|
|
347
|
+
// target's own container pushes a resolved target down by its full height (#32).
|
|
348
|
+
if (!skipWhileHostAnchors(write) && !reassertRevealAnchor(write))
|
|
349
|
+
write();
|
|
350
|
+
},
|
|
351
|
+
// Enroll without touching reactive state: the mount that registers this child already
|
|
352
|
+
// moved the window, which re-runs the batch effect to drain `pending`.
|
|
353
|
+
registerChild(id, child) {
|
|
354
|
+
registry.set(id, child);
|
|
355
|
+
pending.add(id);
|
|
356
|
+
return () => {
|
|
357
|
+
registry.delete(id);
|
|
358
|
+
pending.delete(id);
|
|
359
|
+
};
|
|
360
|
+
},
|
|
361
|
+
// Ungated: raw changed, so the height almost certainly did too.
|
|
362
|
+
measureChildNow(id) {
|
|
363
|
+
measureOne(id);
|
|
364
|
+
},
|
|
365
|
+
// ResizeObserver path for async growth. The gate reads the oracle's recorded height
|
|
366
|
+
// (O(1), no DOM), so the no-op mount resize a fling fires for every newly-mounted
|
|
367
|
+
// block returns without a rect read on the spacer-dirtied layout (VR-4).
|
|
368
|
+
measureChildOnResize(id, observedHeight) {
|
|
369
|
+
if (shouldRemeasureOnResize(deps.oracle.measured(id), observedHeight))
|
|
370
|
+
measureOne(id);
|
|
371
|
+
},
|
|
372
|
+
revealHoldsScroll() {
|
|
373
|
+
const targetScrollTop = revealTargetScrollTop();
|
|
374
|
+
const port = deps.getPort();
|
|
375
|
+
// Sub-pixel tolerance: the settle's own refinement lands a fraction of a device
|
|
376
|
+
// pixel off the model-derived position, and a strict compare would re-admit the delta.
|
|
377
|
+
return (targetScrollTop !== null && !!port && Math.abs(port.scrollTop() - targetScrollTop) <= 1);
|
|
378
|
+
},
|
|
379
|
+
async revealChild(index) {
|
|
380
|
+
// A clamped-out body child can never mount, so degrade instead of scroll-and-wait.
|
|
381
|
+
if (index >= 1 && deps.isCollapsed?.())
|
|
382
|
+
return;
|
|
383
|
+
const port = deps.getPort();
|
|
384
|
+
const listEl = deps.getListEl();
|
|
385
|
+
if (!port || !listEl)
|
|
386
|
+
return;
|
|
387
|
+
port.setScrollTop(listTopInPort(port, listEl) + model.offsetOf(index));
|
|
388
|
+
win.syncScrollTop();
|
|
389
|
+
await tick();
|
|
390
|
+
},
|
|
391
|
+
isInWindow(index) {
|
|
392
|
+
// The EFFECTIVE result, mandatorily: the unclamped inactive window answers true
|
|
393
|
+
// for every index, so a reveal into a collapsed body would await a mount that can
|
|
394
|
+
// never come (VR-5).
|
|
395
|
+
const { start, end } = effectiveWindow;
|
|
396
|
+
return index >= start && index < end;
|
|
397
|
+
},
|
|
398
|
+
dispose() {
|
|
399
|
+
win.dispose();
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-all-then-write height measurement: a rect read right after a layout-dirtying height
|
|
3
|
+
* write forces a synchronous reflow PER block, so the pass splits into a pure read phase
|
|
4
|
+
* and a pure write phase and costs at most one reflow. Kept free of DOM and reactive state
|
|
5
|
+
* so the ordering is unit-testable with spies.
|
|
6
|
+
*/
|
|
7
|
+
export interface MeasureEntry {
|
|
8
|
+
/** Read this entry's DOM height (a layout read). */
|
|
9
|
+
readHeight: () => number;
|
|
10
|
+
/** Write the measured height into the model (a layout-dirtying write). */
|
|
11
|
+
applyHeight: (height: number) => void;
|
|
12
|
+
}
|
|
13
|
+
/** Read every entry's height, THEN apply every write. Heights <= 0 (unlaid-out /
|
|
14
|
+
* jsdom) are skipped on write — the read still happens so the phase split holds. */
|
|
15
|
+
export declare function runMeasureBatch(entries: Iterable<MeasureEntry>): void;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-all-then-write height measurement: a rect read right after a layout-dirtying height
|
|
3
|
+
* write forces a synchronous reflow PER block, so the pass splits into a pure read phase
|
|
4
|
+
* and a pure write phase and costs at most one reflow. Kept free of DOM and reactive state
|
|
5
|
+
* so the ordering is unit-testable with spies.
|
|
6
|
+
*/
|
|
7
|
+
/** Read every entry's height, THEN apply every write. Heights <= 0 (unlaid-out /
|
|
8
|
+
* jsdom) are skipped on write — the read still happens so the phase split holds. */
|
|
9
|
+
export function runMeasureBatch(entries) {
|
|
10
|
+
const measured = [];
|
|
11
|
+
for (const entry of entries) {
|
|
12
|
+
const height = entry.readHeight();
|
|
13
|
+
if (height > 0)
|
|
14
|
+
measured.push({ applyHeight: entry.applyHeight, height });
|
|
15
|
+
}
|
|
16
|
+
for (const { applyHeight, height } of measured)
|
|
17
|
+
applyHeight(height);
|
|
18
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A scope's ref-slot array, reached only through the accessors its owner mints. Object
|
|
3
|
+
* identity IS the scope: the mount registry keys on it, so a mount in one scope cannot wake
|
|
4
|
+
* a waiter in another (a nested level, a sibling container, a second editor instance).
|
|
5
|
+
* Neither accessor is reactive: every owner mints the slots over a plain array, so a `get`
|
|
6
|
+
* registers no dependency and a `set` wakes no effect; `whenRefMounted` is how a caller waits.
|
|
7
|
+
*/
|
|
8
|
+
export interface RefSlots<T> {
|
|
9
|
+
set(index: number, ref: T | undefined): void;
|
|
10
|
+
get(index: number): T | undefined;
|
|
11
|
+
}
|
|
12
|
+
/** Mints a scope over its ref array. Takes the array itself, not a getter, so a scope
|
|
13
|
+
* cannot be re-aimed at a replacement: Svelte pins a teardown's reads to pre-flush values,
|
|
14
|
+
* so a swapped array takes each cleanup's clear with it and strands the dead ref in the
|
|
15
|
+
* live one. Publish a new set of contents with `replaceRefs`. */
|
|
16
|
+
export declare function refSlotsOver<T>(refs: (T | undefined)[]): RefSlots<T>;
|
|
17
|
+
/** Publishes a whole slot array in place, the only sanctioned way to replace a scope's
|
|
18
|
+
* contents wholesale (see `refSlotsOver` for why identity is load-bearing). */
|
|
19
|
+
export declare function replaceRefs<T>(target: (T | undefined)[], values: readonly (T | undefined)[]): void;
|
|
20
|
+
/**
|
|
21
|
+
* Replaces `bind:this={refs[i]}` in a keyed each — Svelte 5's `bind:this` doesn't re-target
|
|
22
|
+
* when the iteration index shifts. Cleanup is conditional because effect-cleanup order
|
|
23
|
+
* across siblings isn't guaranteed, and an unconditional clear stomps a neighbor's slot.
|
|
24
|
+
* `el` is the ref's own box, which is what makes `isSlotDetached` answerable.
|
|
25
|
+
*/
|
|
26
|
+
export declare function publishRefSlot<T>(slots: RefSlots<T>, index: number, ref: T | undefined, el?: Element | null): () => void;
|
|
27
|
+
export interface RevealChildOptions<T> {
|
|
28
|
+
/** This scope's ref slots: the read/drop surface, and the mount-wait's scope key. */
|
|
29
|
+
readonly slots: RefSlots<T>;
|
|
30
|
+
/** This scope's child count; an index at or past it can never mount (size lag). */
|
|
31
|
+
readonly childCount: number;
|
|
32
|
+
/** Scroll this scope so child `index` enters its window; resolves after a tick. */
|
|
33
|
+
readonly revealChild: (index: number) => Promise<void>;
|
|
34
|
+
/** True iff `index` is inside the scope's CURRENT mounted window, read AFTER `revealChild`
|
|
35
|
+
* resolved (VR-5's termination guarantee). Optional only for a scope that does not window:
|
|
36
|
+
* every production reveal supplies it, so the bounded re-wait below is the harness
|
|
37
|
+
* fallback, not a live path. */
|
|
38
|
+
readonly isInWindow?: (index: number) => boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Bring child `index` into its window before a caller reads its ref: drop a detached ref,
|
|
42
|
+
* scroll it in, and await its mount. Shared by the canonical container reveal and TableBlock's
|
|
43
|
+
* hand-rolled one, so the "is this slot a live mount" gate has one home. Termination (VR-5): only
|
|
44
|
+
* a mount at this index in THIS scope wakes the wait, so a windowing caller proves membership
|
|
45
|
+
* first and a non-windowing one races each wait against a tick, rather than parking forever.
|
|
46
|
+
*/
|
|
47
|
+
export declare function revealChildOrWait<T>(index: number, opts: RevealChildOptions<T>): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Resolve when slot `index` of `slots` is (or becomes) populated. Event-driven, woken by
|
|
50
|
+
* `publishRefSlot` on a real mount, never a timer (Design Rule #2 / G4.4). A wake can still
|
|
51
|
+
* be spurious within one scope: a mount that unpublishes in the same flush leaves the slot
|
|
52
|
+
* empty, so the caller re-checks.
|
|
53
|
+
*/
|
|
54
|
+
export declare function whenRefMounted<T>(slots: RefSlots<T>, index: number): Promise<void>;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { tick, untrack } from 'svelte';
|
|
2
|
+
/** Mints a scope over its ref array. Takes the array itself, not a getter, so a scope
|
|
3
|
+
* cannot be re-aimed at a replacement: Svelte pins a teardown's reads to pre-flush values,
|
|
4
|
+
* so a swapped array takes each cleanup's clear with it and strands the dead ref in the
|
|
5
|
+
* live one. Publish a new set of contents with `replaceRefs`. */
|
|
6
|
+
export function refSlotsOver(refs) {
|
|
7
|
+
return {
|
|
8
|
+
set: (index, ref) => {
|
|
9
|
+
refs[index] = ref;
|
|
10
|
+
},
|
|
11
|
+
get: (index) => refs[index]
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** Publishes a whole slot array in place, the only sanctioned way to replace a scope's
|
|
15
|
+
* contents wholesale (see `refSlotsOver` for why identity is load-bearing). */
|
|
16
|
+
export function replaceRefs(target, values) {
|
|
17
|
+
target.length = values.length;
|
|
18
|
+
for (let i = 0; i < values.length; i++)
|
|
19
|
+
target[i] = values[i];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Replaces `bind:this={refs[i]}` in a keyed each — Svelte 5's `bind:this` doesn't re-target
|
|
23
|
+
* when the iteration index shifts. Cleanup is conditional because effect-cleanup order
|
|
24
|
+
* across siblings isn't guaranteed, and an unconditional clear stomps a neighbor's slot.
|
|
25
|
+
* `el` is the ref's own box, which is what makes `isSlotDetached` answerable.
|
|
26
|
+
*/
|
|
27
|
+
export function publishRefSlot(slots, index, ref, el) {
|
|
28
|
+
slots.set(index, ref);
|
|
29
|
+
if (el && typeof ref === 'object' && ref !== null)
|
|
30
|
+
publishedElements.set(ref, el);
|
|
31
|
+
// The cleanup's identity check compares against what the slot actually holds, not the raw
|
|
32
|
+
// ref; untracked, since publishers run inside effects and would self-invalidate.
|
|
33
|
+
const publishedRef = untrack(() => slots.get(index));
|
|
34
|
+
if (publishedRef !== undefined)
|
|
35
|
+
resolveMountWaiters(slots, index);
|
|
36
|
+
return () => {
|
|
37
|
+
if (slots.get(index) === publishedRef) {
|
|
38
|
+
slots.set(index, undefined);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// ── Mount attachment ─────────────────────────────────────────────────────────
|
|
43
|
+
// Keyed on ref identity, not on (slots, index): a wholesale `replaceRefs` re-seats a saved
|
|
44
|
+
// ref no publisher will run for again, and only the ref itself still knows its box. Weak,
|
|
45
|
+
// so the entry dies with the ref rather than outliving the scope.
|
|
46
|
+
const publishedElements = new WeakMap();
|
|
47
|
+
/**
|
|
48
|
+
* True when the slot's ref is a mount that already left the DOM. The one home for the
|
|
49
|
+
* question every reveal asks before trusting a filled slot — and it is an ATTACHMENT
|
|
50
|
+
* question, never a window-membership one: a programmatic scroll moves the slice a flush
|
|
51
|
+
* before the DOM follows, so "off-window" clears refs whose components are still mounted
|
|
52
|
+
* and which nothing re-publishes. A ref with no recorded box degrades to live.
|
|
53
|
+
*/
|
|
54
|
+
function isSlotDetached(slots, index) {
|
|
55
|
+
const ref = slots.get(index);
|
|
56
|
+
if (typeof ref !== 'object' || ref === null)
|
|
57
|
+
return false;
|
|
58
|
+
const el = publishedElements.get(ref);
|
|
59
|
+
return el !== undefined && !el.isConnected;
|
|
60
|
+
}
|
|
61
|
+
/** Each wait races a tick, so a scope with no membership oracle would spin forever on a
|
|
62
|
+
* child that never publishes. This bounds those turns. */
|
|
63
|
+
const MAX_MOUNT_REWAITS = 64;
|
|
64
|
+
/**
|
|
65
|
+
* Bring child `index` into its window before a caller reads its ref: drop a detached ref,
|
|
66
|
+
* scroll it in, and await its mount. Shared by the canonical container reveal and TableBlock's
|
|
67
|
+
* hand-rolled one, so the "is this slot a live mount" gate has one home. Termination (VR-5): only
|
|
68
|
+
* a mount at this index in THIS scope wakes the wait, so a windowing caller proves membership
|
|
69
|
+
* first and a non-windowing one races each wait against a tick, rather than parking forever.
|
|
70
|
+
*/
|
|
71
|
+
export async function revealChildOrWait(index, opts) {
|
|
72
|
+
const detached = isSlotDetached(opts.slots, index);
|
|
73
|
+
if (index >= opts.childCount || (!detached && opts.slots.get(index)))
|
|
74
|
+
return;
|
|
75
|
+
if (detached)
|
|
76
|
+
opts.slots.set(index, undefined);
|
|
77
|
+
await opts.revealChild(index);
|
|
78
|
+
if (opts.slots.get(index))
|
|
79
|
+
return;
|
|
80
|
+
if (opts.isInWindow) {
|
|
81
|
+
// Provably outside the recomputed window → the mount can't fire; degrade now.
|
|
82
|
+
if (!opts.isInWindow(index))
|
|
83
|
+
return;
|
|
84
|
+
// In-window, the mount flush is at most one tick away; still unpublished after it
|
|
85
|
+
// means a failed-render boundary left bind:this unset, waking no waiter.
|
|
86
|
+
await tick();
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Membership unknowable: bounded mount-wait, each raced against a tick so a child that
|
|
90
|
+
// never publishes degrades within the cap instead of parking forever.
|
|
91
|
+
let rewaits = 0;
|
|
92
|
+
while (!opts.slots.get(index) && rewaits++ < MAX_MOUNT_REWAITS) {
|
|
93
|
+
await Promise.race([whenRefMounted(opts.slots, index), tick()]);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// ── Mount-await registry ─────────────────────────────────────────────────────
|
|
97
|
+
const mountWaiters = new WeakMap();
|
|
98
|
+
/**
|
|
99
|
+
* Resolve when slot `index` of `slots` is (or becomes) populated. Event-driven, woken by
|
|
100
|
+
* `publishRefSlot` on a real mount, never a timer (Design Rule #2 / G4.4). A wake can still
|
|
101
|
+
* be spurious within one scope: a mount that unpublishes in the same flush leaves the slot
|
|
102
|
+
* empty, so the caller re-checks.
|
|
103
|
+
*/
|
|
104
|
+
export function whenRefMounted(slots, index) {
|
|
105
|
+
if (slots.get(index) !== undefined)
|
|
106
|
+
return Promise.resolve();
|
|
107
|
+
return new Promise((resolve) => {
|
|
108
|
+
let byIndex = mountWaiters.get(slots);
|
|
109
|
+
if (!byIndex) {
|
|
110
|
+
byIndex = new Map();
|
|
111
|
+
mountWaiters.set(slots, byIndex);
|
|
112
|
+
}
|
|
113
|
+
const list = byIndex.get(index);
|
|
114
|
+
if (list)
|
|
115
|
+
list.push(resolve);
|
|
116
|
+
else
|
|
117
|
+
byIndex.set(index, [resolve]);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function resolveMountWaiters(slots, index) {
|
|
121
|
+
const byIndex = mountWaiters.get(slots);
|
|
122
|
+
const list = byIndex?.get(index);
|
|
123
|
+
if (!byIndex || !list)
|
|
124
|
+
return;
|
|
125
|
+
byIndex.delete(index);
|
|
126
|
+
for (const resolve of list)
|
|
127
|
+
resolve();
|
|
128
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** This scope's own content element, not the scrollport: nested content lays out narrower and
|
|
2
|
+
* the oracle's line-wrap is monotonic in width, so the port width undercounts at depth. Falls
|
|
3
|
+
* back to the port, then a constant, when neither is measurable. */
|
|
4
|
+
export declare function estimateWidth(listEl: {
|
|
5
|
+
clientWidth: number;
|
|
6
|
+
} | null, portWidth: number): number;
|
|
7
|
+
/**
|
|
8
|
+
* This scope's list top in the scrollport's CONTENT space — the offset mapping port scrollTop
|
|
9
|
+
* into the scope's local range. The two port terms are distinct and both load-bearing: an editor
|
|
10
|
+
* embedded partway down a page-scrolled shell has a nonzero scroll AND page chrome above it, and
|
|
11
|
+
* conflating them slices the window a band off.
|
|
12
|
+
*/
|
|
13
|
+
export declare function listTopWithinContent(listTop: number, viewportTop: number, scrollTop: number): number;
|
|
14
|
+
/** The intersection of the port's viewport with this scope's own box. Each nested scope
|
|
15
|
+
* occupies only part of the viewport, so windowing against the full port height would
|
|
16
|
+
* mount O(viewport × active-scope-count) blocks. The viewport arrives as top + client
|
|
17
|
+
* height so the intersection excludes the scrollbar/border. */
|
|
18
|
+
export declare function effectiveViewportHeight(viewportTop: number, viewportHeight: number, scopeTop: number, scopeHeight: number): number;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure per-scope geometry for windowing, isolated from the reactive wiring in
|
|
3
|
+
* `list-windowing.svelte.ts` so it can be unit-tested without mounting a component.
|
|
4
|
+
*/
|
|
5
|
+
import { FALLBACK_CONTENT_WIDTH } from '../cursor/typography-estimates';
|
|
6
|
+
/** This scope's own content element, not the scrollport: nested content lays out narrower and
|
|
7
|
+
* the oracle's line-wrap is monotonic in width, so the port width undercounts at depth. Falls
|
|
8
|
+
* back to the port, then a constant, when neither is measurable. */
|
|
9
|
+
export function estimateWidth(listEl, portWidth) {
|
|
10
|
+
return listEl?.clientWidth || portWidth || FALLBACK_CONTENT_WIDTH;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* This scope's list top in the scrollport's CONTENT space — the offset mapping port scrollTop
|
|
14
|
+
* into the scope's local range. The two port terms are distinct and both load-bearing: an editor
|
|
15
|
+
* embedded partway down a page-scrolled shell has a nonzero scroll AND page chrome above it, and
|
|
16
|
+
* conflating them slices the window a band off.
|
|
17
|
+
*/
|
|
18
|
+
export function listTopWithinContent(listTop, viewportTop, scrollTop) {
|
|
19
|
+
return listTop - viewportTop + scrollTop;
|
|
20
|
+
}
|
|
21
|
+
/** The intersection of the port's viewport with this scope's own box. Each nested scope
|
|
22
|
+
* occupies only part of the viewport, so windowing against the full port height would
|
|
23
|
+
* mount O(viewport × active-scope-count) blocks. The viewport arrives as top + client
|
|
24
|
+
* height so the intersection excludes the scrollbar/border. */
|
|
25
|
+
export function effectiveViewportHeight(viewportTop, viewportHeight, scopeTop, scopeHeight) {
|
|
26
|
+
const top = Math.max(viewportTop, scopeTop);
|
|
27
|
+
const bottom = Math.min(viewportTop + viewportHeight, scopeTop + scopeHeight);
|
|
28
|
+
return Math.max(0, bottom - top);
|
|
29
|
+
}
|