@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,75 +1,124 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
* write
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* fence shape, which is why the pass takes a node. An authored open fence is exempt.
|
|
2
|
+
* The rule for writing a fenced block's bytes, declared on the kind as `rawWrite`: it restores or
|
|
3
|
+
* drops fence lines a write broke, grows the marker runs past a body line that would close them,
|
|
4
|
+
* and keeps backticks out of a backtick fence's info string, moving the caret with every byte. A
|
|
5
|
+
* fence the user is still typing (open, `authored`) is left alone.
|
|
7
6
|
*/
|
|
8
7
|
import { metadataOf } from '../core/nodes';
|
|
9
|
-
import { trailingLineEnding, trimTrailingLineEnding } from '../core/lines';
|
|
10
|
-
import { escalatedFenceLength, matchFenceClose, matchFenceOpen } from '../core/parsers/fence-syntax';
|
|
8
|
+
import { displayLines, firstDisplayLine, firstLineEnding, joinDisplayLines, ownTrailingLineEnding, trailingLineEnding, trimTrailingLineEnding } from '../core/lines';
|
|
9
|
+
import { escalatedFenceLength, fenceAnatomy, fenceRunLength, matchFenceClose, matchFenceOpen } from '../core/parsers/fence-syntax';
|
|
11
10
|
// ── Public API ──────────────────────────────────────────────────────────────
|
|
12
11
|
export function fenceShapeOf(node) {
|
|
13
12
|
const meta = metadataOf(node, 'fencedCode');
|
|
14
13
|
return { marker: meta.fenceMarker, length: meta.fenceLength, closed: meta.closed };
|
|
15
14
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
/** The fence write rule for a kind whose fence shape `shapeOf` reads off the block. */
|
|
16
|
+
export function fenceRawWrite(shapeOf) {
|
|
17
|
+
return {
|
|
18
|
+
normalize: (raw, ctx) => reconcileFenceRaw(raw, 0, shapeOf(ctx.node), ctx).raw,
|
|
19
|
+
mapOffset: (raw, offset, ctx) => reconcileFenceRaw(raw, offset, shapeOf(ctx.node), ctx).offset
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/** The built-in code block's rule, sized by its parsed metadata. */
|
|
23
|
+
export const fencedCodeWrite = fenceRawWrite(fenceShapeOf);
|
|
24
|
+
/**
|
|
25
|
+
* The shape of a fenced block that keeps no fence metadata, read off its own opener line. A
|
|
26
|
+
* plugin kind declares its rule as `fenceRawWrite(fenceShapeOfRaw)`.
|
|
27
|
+
*/
|
|
28
|
+
export function fenceShapeOfRaw(node) {
|
|
29
|
+
const anatomy = fenceAnatomy(node.raw);
|
|
30
|
+
return anatomy
|
|
31
|
+
? { marker: anatomy.marker, length: anatomy.length, closed: anatomy.closed }
|
|
32
|
+
: { marker: '`', length: 3, closed: false };
|
|
22
33
|
}
|
|
23
34
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* typing the block's own syntax. The fence lines reconcile first, so ESCALATE measures a
|
|
27
|
-
* body that ends where the closer does.
|
|
35
|
+
* The display text of a fenced block made legal, the caret carried along. The fence lines are
|
|
36
|
+
* fixed before the runs grow, so growing measures a body that ends where the closer does.
|
|
28
37
|
*/
|
|
29
|
-
export function
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
display:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
+
export function reconcileFenceWrite(input) {
|
|
39
|
+
const { mode, ending } = input;
|
|
40
|
+
if (!input.fence.closed && mode === 'authored') {
|
|
41
|
+
return { display: input.display, caret: input.caret };
|
|
42
|
+
}
|
|
43
|
+
const widened = widenedCloser(input);
|
|
44
|
+
const fence = widened?.fence ?? writtenFence(input.display, input.fence, mode);
|
|
45
|
+
const unglued = separateGluedCloser({ ...input, ...widened?.written, fence });
|
|
46
|
+
const lines = reconcileFenceLines(unglued, fence, ending);
|
|
47
|
+
const sanitized = sanitizeInfoString({ ...input, ...lines, fence });
|
|
48
|
+
return escalateFenceRuns({ ...input, ...sanitized, fence });
|
|
38
49
|
}
|
|
39
50
|
/**
|
|
40
|
-
* The bytes with `info` written onto the
|
|
41
|
-
*
|
|
42
|
-
* line 0 does not read as this block's opener at all.
|
|
51
|
+
* The bytes with `info` written onto the opener line, everything else byte-identical. Null when
|
|
52
|
+
* line 0 does not read as this block's opener.
|
|
43
53
|
*/
|
|
44
54
|
export function writeFenceInfo(display, info, fence) {
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
const opener = splitOpener(line, fence);
|
|
55
|
+
const first = firstDisplayLine(display);
|
|
56
|
+
const opener = splitOpener(first.text, fence);
|
|
48
57
|
if (!opener)
|
|
49
58
|
return null;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
59
|
+
return (display.slice(0, opener.runEnd) +
|
|
60
|
+
legalFenceInfo(info, fence.marker) +
|
|
61
|
+
display.slice(first.text.length));
|
|
53
62
|
}
|
|
54
|
-
// ── Internal ────────────────────────────────────────────────────────────────
|
|
55
63
|
/**
|
|
56
|
-
*
|
|
57
|
-
* and
|
|
58
|
-
* reparses as a four-tilde run its own closer no longer closes. Dropped rather than declined,
|
|
59
|
-
* the rule the typed and pasted routes already share.
|
|
64
|
+
* `info` less what an info string may not hold: a line break, a backtick under a backtick fence,
|
|
65
|
+
* and a leading run of the fence's own marker, which would lengthen the fence (`~~~` plus `~x`).
|
|
60
66
|
*/
|
|
61
|
-
function
|
|
67
|
+
export function legalFenceInfo(info, marker) {
|
|
62
68
|
const oneLine = info.replace(/[\r\n]/g, '');
|
|
63
|
-
const kept =
|
|
69
|
+
const kept = marker === '`' ? oneLine.replaceAll('`', '') : oneLine;
|
|
64
70
|
let start = 0;
|
|
65
|
-
while (kept[start] ===
|
|
71
|
+
while (kept[start] === marker)
|
|
66
72
|
start++;
|
|
67
73
|
return kept.slice(start);
|
|
68
74
|
}
|
|
75
|
+
// ── Internal ────────────────────────────────────────────────────────────────
|
|
76
|
+
/**
|
|
77
|
+
* A whole `raw` through the rule, with an offset into it carried along. The trailing line ending
|
|
78
|
+
* is the written one, else the block's own: an unterminated last block stays unterminated.
|
|
79
|
+
*/
|
|
80
|
+
function reconcileFenceRaw(raw, offset, fence, ctx) {
|
|
81
|
+
const ending = trailingLineEnding(ctx.node.raw, ctx.lineEnding);
|
|
82
|
+
const display = trimTrailingLineEnding(raw);
|
|
83
|
+
const tail = ownTrailingLineEnding(raw) || ownTrailingLineEnding(ctx.node.raw);
|
|
84
|
+
const caret = Math.min(offset, display.length);
|
|
85
|
+
const written = reconcileFenceWrite({ display, caret, fence, mode: ctx.mode, ending });
|
|
86
|
+
const intoTail = Math.min(Math.max(offset - display.length, 0), tail.length);
|
|
87
|
+
return { raw: written.display + tail, offset: written.caret + intoTail };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* The fence the written bytes carry: a literal write is read as the grammar reads it, so a replace
|
|
91
|
+
* that resized the opener run resizes the fence; typing keeps the block's own run.
|
|
92
|
+
*/
|
|
93
|
+
function writtenFence(display, fence, mode) {
|
|
94
|
+
if (mode === 'authored')
|
|
95
|
+
return fence;
|
|
96
|
+
const anatomy = fenceAnatomy(firstDisplayLine(display).text, { marker: fence.marker, length: 3 });
|
|
97
|
+
return anatomy ? { ...fence, length: anatomy.length } : fence;
|
|
98
|
+
}
|
|
69
99
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
100
|
+
* A marker typed or pasted onto the opener's run lengthens the fence, so the closer grows to match:
|
|
101
|
+
* a closer shorter than its opener closes nothing, and the fence would take every block below.
|
|
72
102
|
*/
|
|
103
|
+
function widenedCloser(input) {
|
|
104
|
+
const { display, caret, fence } = input;
|
|
105
|
+
const lines = displayLines(display);
|
|
106
|
+
const opener = fenceAnatomy(lines[0].text, fence);
|
|
107
|
+
const closerIndex = lastCloserIndex(lines, fence);
|
|
108
|
+
if (!opener || opener.length === fence.length || closerIndex < 1)
|
|
109
|
+
return null;
|
|
110
|
+
const closer = lines[closerIndex].text;
|
|
111
|
+
const grow = Math.max(opener.length - fenceRunLength(closer, fence.marker), 0);
|
|
112
|
+
const at = lineStartOffset(display, closerIndex) + /^ */.exec(closer)[0].length;
|
|
113
|
+
return {
|
|
114
|
+
written: {
|
|
115
|
+
display: display.slice(0, at) + fence.marker.repeat(grow) + display.slice(at),
|
|
116
|
+
caret: caret > at ? caret + grow : caret
|
|
117
|
+
},
|
|
118
|
+
fence: { ...fence, length: opener.length }
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/** Split at the fence's known run length, so a marker past it reads as info string. */
|
|
73
122
|
function splitOpener(line, fence) {
|
|
74
123
|
const indent = /^ {0,3}/.exec(line)[0];
|
|
75
124
|
const runEnd = indent.length + fence.length;
|
|
@@ -78,83 +127,88 @@ function splitOpener(line, fence) {
|
|
|
78
127
|
return { indent, info: line.slice(runEnd), runEnd };
|
|
79
128
|
}
|
|
80
129
|
/**
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
* a missing closer comes back; without it a surviving closer is machinery the write stranded and
|
|
84
|
-
* goes. The arms split on {@link ownOpener}, so exactly one can fire.
|
|
130
|
+
* A fence left open swallows every block below it, so a write that removed one fence line gets its
|
|
131
|
+
* closer back (its own opener still on line 0) or loses the closer it stranded.
|
|
85
132
|
*/
|
|
86
|
-
function reconcileFenceLines(
|
|
133
|
+
function reconcileFenceLines(written, fence, blockEnding) {
|
|
87
134
|
if (!fence.closed)
|
|
88
|
-
return
|
|
89
|
-
const lines = display
|
|
135
|
+
return written;
|
|
136
|
+
const lines = displayLines(written.display);
|
|
90
137
|
const opener = ownOpener(lines, fence);
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
138
|
+
if (!opener)
|
|
139
|
+
return droppedStrandedCloser(lines, fence, written.caret) ?? written;
|
|
140
|
+
const restored = restoredCloser(lines, fence, opener, blockEnding);
|
|
141
|
+
// The closer goes in after every written byte, so no offset moves.
|
|
142
|
+
return restored === null ? written : { display: restored, caret: written.caret };
|
|
95
143
|
}
|
|
96
144
|
/**
|
|
97
|
-
* Line 0 read as the block's
|
|
98
|
-
*
|
|
99
|
-
* and no metadata claims a block to size a fence to.
|
|
145
|
+
* Line 0 read as the block's own opener, at the run {@link writtenFence} sized. A write whose
|
|
146
|
+
* only line reads as this fence's closer is not one: an opener never doubles as a closer.
|
|
100
147
|
*/
|
|
101
148
|
function ownOpener(lines, fence) {
|
|
102
|
-
const opener = splitOpener(lines[0], fence);
|
|
103
|
-
if (!opener
|
|
149
|
+
const opener = splitOpener(lines[0].text, fence);
|
|
150
|
+
if (!opener)
|
|
104
151
|
return null;
|
|
105
|
-
if (lines.length === 1 && matchFenceClose(lines[0], fence.marker, fence.length))
|
|
152
|
+
if (lines.length === 1 && matchFenceClose(lines[0].text, fence.marker, fence.length))
|
|
106
153
|
return null;
|
|
107
154
|
return opener;
|
|
108
155
|
}
|
|
109
156
|
/**
|
|
110
|
-
*
|
|
111
|
-
* is the
|
|
157
|
+
* Puts back the closer a truncating write dropped, or null when one is still there. The line
|
|
158
|
+
* ending is the block's, not the written slice's, which may have none.
|
|
112
159
|
*/
|
|
113
160
|
function restoredCloser(lines, fence, opener, blockEnding) {
|
|
114
161
|
if (lastCloserIndex(lines, fence) !== -1)
|
|
115
162
|
return null;
|
|
116
|
-
|
|
163
|
+
const closer = opener.indent + fence.marker.repeat(fence.length);
|
|
164
|
+
return joinDisplayLines(lines) + blockEnding + closer;
|
|
117
165
|
}
|
|
118
166
|
/**
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
* below. Null when there is none, or when an opener above could CLOSE on the run:
|
|
122
|
-
* same marker, run no longer than the closer's — a foreign-marker or longer-run open line is
|
|
123
|
-
* body text the run never terminated.
|
|
167
|
+
* Drops the closer a write stranded by removing the opener, since as text it would open a fence
|
|
168
|
+
* below. Null when there is none, or a line above opens a same-marker run it would close.
|
|
124
169
|
*/
|
|
125
|
-
function droppedStrandedCloser(lines, fence) {
|
|
170
|
+
function droppedStrandedCloser(lines, fence, caret) {
|
|
126
171
|
const closer = lastCloserIndex(lines, fence, 0);
|
|
127
172
|
if (closer === -1)
|
|
128
173
|
return null;
|
|
129
|
-
const run = /^ {0,3}([`~]+)/.exec(lines[closer])[1].length;
|
|
174
|
+
const run = /^ {0,3}([`~]+)/.exec(lines[closer].text)[1].length;
|
|
130
175
|
const claimed = (line) => {
|
|
131
|
-
const open = matchFenceOpen(line);
|
|
176
|
+
const open = matchFenceOpen(line.text);
|
|
132
177
|
return open !== null && open.marker === fence.marker && open.length <= run;
|
|
133
178
|
};
|
|
134
179
|
if (lines.slice(0, closer).some(claimed))
|
|
135
180
|
return null;
|
|
136
|
-
return withoutLine(lines, closer);
|
|
181
|
+
return withoutLine(lines, closer, caret);
|
|
137
182
|
}
|
|
138
|
-
/**
|
|
139
|
-
|
|
183
|
+
/**
|
|
184
|
+
* The lines with one removed; dropping the last line takes the ending above it too. A caret inside
|
|
185
|
+
* the removed span lands where the span was.
|
|
186
|
+
*/
|
|
187
|
+
function withoutLine(lines, index, caret) {
|
|
188
|
+
let from = lineStartOffset(joinDisplayLines(lines), index);
|
|
189
|
+
let to = from + lines[index].text.length + lines[index].ending.length;
|
|
140
190
|
const kept = lines.slice(0, index).concat(lines.slice(index + 1));
|
|
141
191
|
if (index === lines.length - 1 && kept.length > 0) {
|
|
142
|
-
|
|
192
|
+
const above = kept[kept.length - 1];
|
|
193
|
+
from -= above.ending.length;
|
|
194
|
+
to = from + above.ending.length + lines[index].text.length;
|
|
195
|
+
kept[kept.length - 1] = { ...above, ending: '' };
|
|
143
196
|
}
|
|
144
|
-
|
|
197
|
+
const moved = caret <= from ? caret : Math.max(from, caret - (to - from));
|
|
198
|
+
return { display: joinDisplayLines(kept), caret: moved };
|
|
145
199
|
}
|
|
146
200
|
function sanitizeInfoString(input) {
|
|
147
201
|
const { display, caret, fence } = input;
|
|
148
202
|
if (fence.marker !== '`')
|
|
149
203
|
return { display, caret };
|
|
150
|
-
const
|
|
151
|
-
const opener = splitOpener(
|
|
204
|
+
const first = firstDisplayLine(display);
|
|
205
|
+
const opener = splitOpener(first.text, fence);
|
|
152
206
|
if (!opener || !opener.info.includes('`'))
|
|
153
207
|
return { display, caret };
|
|
154
208
|
const kept = opener.info.replaceAll('`', '');
|
|
155
209
|
const dropped = countDroppedBefore(opener.info, opener.runEnd, caret);
|
|
156
210
|
return {
|
|
157
|
-
display: opener.indent + fence.marker.repeat(fence.length) + kept + display.slice(
|
|
211
|
+
display: opener.indent + fence.marker.repeat(fence.length) + kept + display.slice(first.text.length),
|
|
158
212
|
caret: caret - dropped
|
|
159
213
|
};
|
|
160
214
|
}
|
|
@@ -168,38 +222,35 @@ function countDroppedBefore(info, infoStart, caret) {
|
|
|
168
222
|
return dropped;
|
|
169
223
|
}
|
|
170
224
|
/**
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
* and the first character typed there arrives ahead of the closer run: ```` ```\nAB``` ````,
|
|
174
|
-
* which no longer reads as closed and shows the run as body text. The fence says it is closed
|
|
175
|
-
* and the display no longer carries a closer line, so the write broke it; the missing line
|
|
176
|
-
* ending is what puts it back.
|
|
225
|
+
* Separate a closer the write ran into: text typed at the start of an empty fence's closer line
|
|
226
|
+
* lands in front of the run (```` ```\nAB``` ````), so a line ending goes back before the run.
|
|
177
227
|
*/
|
|
178
228
|
function separateGluedCloser(input) {
|
|
179
229
|
const { display, caret, fence } = input;
|
|
180
230
|
if (!fence.closed)
|
|
181
231
|
return { display, caret };
|
|
182
|
-
const lines = display
|
|
232
|
+
const lines = displayLines(display);
|
|
183
233
|
// A closer still on its own line needs nothing; so does a display too short to hold one.
|
|
184
234
|
if (lines.length < 2 || lastCloserIndex(lines, fence) >= 1)
|
|
185
235
|
return { display, caret };
|
|
186
|
-
const run = new RegExp(`[${fence.marker}]{${fence.length},}[ \t]*$`).exec(lines[lines.length - 1]);
|
|
187
|
-
// `index === 0` is a bare run
|
|
236
|
+
const run = new RegExp(`[${fence.marker}]{${fence.length},}[ \t]*$`).exec(lines[lines.length - 1].text);
|
|
237
|
+
// `index === 0` is a bare run another rule handles, not one the write ran into.
|
|
188
238
|
if (!run || run.index === 0)
|
|
189
239
|
return { display, caret };
|
|
190
240
|
const at = display.length - run[0].length;
|
|
191
|
-
|
|
241
|
+
// Two lines at least, so the display holds the ending the new line takes.
|
|
242
|
+
const ending = firstLineEnding(display) ?? '\n';
|
|
192
243
|
return {
|
|
193
244
|
display: display.slice(0, at) + ending + display.slice(at),
|
|
194
|
-
// The caret sits at the typed text
|
|
195
|
-
// stays put, and only a caret already inside the closer run
|
|
245
|
+
// The caret sits at the end of the typed text, exactly where the line ending goes in: it
|
|
246
|
+
// stays put, and only a caret already inside the closer run moves.
|
|
196
247
|
caret: caret > at ? caret + ending.length : caret
|
|
197
248
|
};
|
|
198
249
|
}
|
|
199
250
|
function escalateFenceRuns(input) {
|
|
200
251
|
const { display, caret, fence } = input;
|
|
201
|
-
const lines = display
|
|
202
|
-
const opener = splitOpener(lines[0], fence);
|
|
252
|
+
const lines = displayLines(display);
|
|
253
|
+
const opener = splitOpener(lines[0].text, fence);
|
|
203
254
|
if (!opener || lines.length < 2)
|
|
204
255
|
return { display, caret };
|
|
205
256
|
// An open fence has no closer line, so a literal write measures everything below
|
|
@@ -208,19 +259,20 @@ function escalateFenceRuns(input) {
|
|
|
208
259
|
if (fence.closed && closerIndex < 1)
|
|
209
260
|
return { display, caret };
|
|
210
261
|
const bodyEnd = closerIndex === -1 ? lines.length : closerIndex;
|
|
211
|
-
const body = lines.slice(1, bodyEnd)
|
|
262
|
+
const body = joinDisplayLines(lines.slice(1, bodyEnd));
|
|
212
263
|
const grown = escalatedFenceLength(body, fence.marker, fence.length);
|
|
213
264
|
const delta = grown - fence.length;
|
|
214
265
|
if (delta === 0)
|
|
215
266
|
return { display, caret };
|
|
216
267
|
const run = fence.marker.repeat(grown);
|
|
217
|
-
lines[0] = opener.indent + run + opener.info;
|
|
268
|
+
lines[0] = { ...lines[0], text: opener.indent + run + opener.info };
|
|
218
269
|
let closerRunStart = -1;
|
|
219
270
|
if (closerIndex !== -1) {
|
|
220
|
-
const
|
|
221
|
-
const
|
|
271
|
+
const closerText = lines[closerIndex].text;
|
|
272
|
+
const closerIndent = /^ {0,3}/.exec(closerText)[0];
|
|
273
|
+
const tail = closerText.slice(closerIndent.length).replace(/^[`~]+/, '');
|
|
222
274
|
closerRunStart = lineStartOffset(display, closerIndex) + closerIndent.length;
|
|
223
|
-
lines[closerIndex] = closerIndent + run + tail;
|
|
275
|
+
lines[closerIndex] = { ...lines[closerIndex], text: closerIndent + run + tail };
|
|
224
276
|
}
|
|
225
277
|
// The run grows in place, so a caret past an insertion point moves with it.
|
|
226
278
|
let moved = caret;
|
|
@@ -228,20 +280,16 @@ function escalateFenceRuns(input) {
|
|
|
228
280
|
moved += delta;
|
|
229
281
|
if (closerRunStart !== -1 && caret > closerRunStart)
|
|
230
282
|
moved += delta;
|
|
231
|
-
return { display: lines
|
|
283
|
+
return { display: joinDisplayLines(lines), caret: moved };
|
|
232
284
|
}
|
|
233
|
-
/** Last line reading as this fence's closer at or after `from`; line 0 is the opener's
|
|
285
|
+
/** Last line reading as this fence's closer at or after `from`; line 0 is the opener's line. */
|
|
234
286
|
function lastCloserIndex(lines, fence, from = 1) {
|
|
235
287
|
for (let i = lines.length - 1; i >= from; i--) {
|
|
236
|
-
if (matchFenceClose(lines[i], fence.marker, fence.length))
|
|
288
|
+
if (matchFenceClose(lines[i].text, fence.marker, fence.length))
|
|
237
289
|
return i;
|
|
238
290
|
}
|
|
239
291
|
return -1;
|
|
240
292
|
}
|
|
241
|
-
function firstLineEnd(display) {
|
|
242
|
-
const index = display.indexOf('\n');
|
|
243
|
-
return index === -1 ? display.length : index;
|
|
244
|
-
}
|
|
245
293
|
function lineStartOffset(display, lineIndex) {
|
|
246
294
|
let offset = 0;
|
|
247
295
|
for (let i = 0; i < lineIndex; i++)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Plugin-facing global commands:
|
|
3
|
-
* the dispatching
|
|
4
|
-
* (last in precedence). Beside block-commands
|
|
5
|
-
* commands
|
|
2
|
+
* Plugin-facing global commands: create a process-wide command id, register a handler that
|
|
3
|
+
* receives the dispatching editor's `EditorContext` and the dispatch's argument, and optionally
|
|
4
|
+
* bind a chord among the plugin-global chords (last in precedence). Beside `block-commands`, not
|
|
5
|
+
* in `commands.ts`, so `commands → command-id` stays one-directional.
|
|
6
6
|
*/
|
|
7
7
|
import { type PluginCommandId } from './command-id';
|
|
8
|
-
import type
|
|
9
|
-
export declare function registerGlobalCommand(name: string, handler: (editor: EditorContext) => boolean, opts?: {
|
|
8
|
+
import { type EditorContext } from './plugin-install';
|
|
9
|
+
export declare function registerGlobalCommand(name: string, handler: (editor: EditorContext, arg?: unknown) => boolean, opts?: {
|
|
10
10
|
chord?: string;
|
|
11
11
|
}): PluginCommandId;
|
|
@@ -1,40 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Plugin-facing global commands:
|
|
3
|
-
* the dispatching
|
|
4
|
-
* (last in precedence). Beside block-commands
|
|
5
|
-
* commands
|
|
2
|
+
* Plugin-facing global commands: create a process-wide command id, register a handler that
|
|
3
|
+
* receives the dispatching editor's `EditorContext` and the dispatch's argument, and optionally
|
|
4
|
+
* bind a chord among the plugin-global chords (last in precedence). Beside `block-commands`, not
|
|
5
|
+
* in `commands.ts`, so `commands → command-id` stays one-directional.
|
|
6
6
|
*/
|
|
7
7
|
import { mintCommandId } from './command-id';
|
|
8
|
-
import { registerCommand, registerPluginGlobalBinding, assertPluginGlobalChordAvailable, warnDeadKeyCommand } from './commands';
|
|
9
|
-
import {
|
|
8
|
+
import { registerCommand, registerPluginGlobalBinding, assertPluginGlobalChordAvailable, globalCommandOwner, runPluginCommand, warnDeadKeyCommand } from './commands';
|
|
9
|
+
import { pluginEditorFor } from './plugin-install';
|
|
10
10
|
export function registerGlobalCommand(name, handler, opts) {
|
|
11
|
-
// Validate the chord
|
|
11
|
+
// Validate the chord before creating the id: a collision must not leave a created name and a
|
|
12
12
|
// registered handler behind a failed registration.
|
|
13
13
|
if (opts?.chord)
|
|
14
14
|
assertPluginGlobalChordAvailable(opts.chord, name);
|
|
15
|
-
const
|
|
16
|
-
// Owner-attributed: it is what lets a plugin re-mint its own name, and what names the prior
|
|
17
|
-
// owner in a cross-plugin collision.
|
|
18
|
-
const id = mintCommandId(name, owner);
|
|
15
|
+
const id = mintCommandId(name);
|
|
19
16
|
registerCommand(id, (ctx) => {
|
|
20
17
|
if (!ctx.pluginEditor) {
|
|
21
18
|
warnDeadKeyCommand(id, 'plugin-global');
|
|
22
19
|
return false;
|
|
23
20
|
}
|
|
24
|
-
|
|
25
|
-
//
|
|
26
|
-
|
|
21
|
+
const owner = globalCommandOwner(id);
|
|
22
|
+
// A global handler takes a context it can't run without, so a missing one declines, and
|
|
23
|
+
// that is inert rather than dead; a block handler runs with `ctx.editor` undefined instead.
|
|
24
|
+
const editor = pluginEditorFor(ctx.pluginEditor, owner);
|
|
27
25
|
if (!editor)
|
|
28
26
|
return false;
|
|
29
|
-
|
|
30
|
-
return handler(editor);
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
ctx.onCommandError?.({ command: id, plugin: owner ?? undefined, error });
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
27
|
+
return runPluginCommand(owner, { command: id }, ctx.onCommandError, () => handler(editor, ctx.arg));
|
|
36
28
|
});
|
|
37
29
|
if (opts?.chord)
|
|
38
|
-
registerPluginGlobalBinding({ chord: opts.chord, command: id }
|
|
30
|
+
registerPluginGlobalBinding({ chord: opts.chord, command: id });
|
|
39
31
|
return id;
|
|
40
32
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The height guesses windowing uses before a block has been measured, one per shape of block, for
|
|
3
|
+
* the descriptors' `estimateHeight`. Each returns the content height; the estimator adds the
|
|
4
|
+
* block's frame. All are O(1) in the tree: they read `raw` and a child count, never a subtree.
|
|
5
|
+
*/
|
|
6
|
+
import type { NodeView } from '../core/node-views';
|
|
7
|
+
/** What an estimate reads besides the block: the editor's width and its type metrics, in px. */
|
|
8
|
+
export interface HeightEstimateEnv {
|
|
9
|
+
width: number;
|
|
10
|
+
/** One wrapped line of prose. */
|
|
11
|
+
lineHeight: number;
|
|
12
|
+
/** One source line of code. */
|
|
13
|
+
codeLineHeight: number;
|
|
14
|
+
/** An average character, for how many fit on a line. */
|
|
15
|
+
avgCharWidth: number;
|
|
16
|
+
/** A block's margin and padding, which the estimator adds once per block. */
|
|
17
|
+
blockChrome: number;
|
|
18
|
+
/** The floor for an image whose alt carries no height. */
|
|
19
|
+
imageBlockMinHeight: number;
|
|
20
|
+
}
|
|
21
|
+
/** Wrapped text, or the images it holds when they stand taller than it. */
|
|
22
|
+
export declare function proseEstimate(node: NodeView, env: HeightEstimateEnv): number;
|
|
23
|
+
/** One line, whatever the bytes: a divider. */
|
|
24
|
+
export declare function singleLineEstimate(_node: NodeView, env: HeightEstimateEnv): number;
|
|
25
|
+
/** One code line per source line: code does not wrap. */
|
|
26
|
+
export declare function sourceLinesEstimate(node: NodeView, env: HeightEstimateEnv): number;
|
|
27
|
+
/**
|
|
28
|
+
* A grid takes the larger of its rows and its source wrapped; any other container the larger of a
|
|
29
|
+
* line per child and its text wrapped, since the first ignores wrapping and the second margins.
|
|
30
|
+
*/
|
|
31
|
+
export declare function containerEstimate(node: NodeView, env: HeightEstimateEnv): number;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The height guesses windowing uses before a block has been measured, one per shape of block, for
|
|
3
|
+
* the descriptors' `estimateHeight`. Each returns the content height; the estimator adds the
|
|
4
|
+
* block's frame. All are O(1) in the tree: they read `raw` and a child count, never a subtree.
|
|
5
|
+
*/
|
|
6
|
+
import { parseImageDimensions } from '../core/inline/image-dimensions';
|
|
7
|
+
import { isGridKind } from './block-kind-descriptor';
|
|
8
|
+
const NEWLINE = 10;
|
|
9
|
+
// Any image form, capturing the alt, whose `|WxH` hint sizes the rendered image.
|
|
10
|
+
const IMAGE_ALT = /!\[([^\]]*)\]/g;
|
|
11
|
+
function wrappedLines(length, env) {
|
|
12
|
+
const perLine = Math.max(1, Math.floor(env.width / env.avgCharWidth));
|
|
13
|
+
return Math.max(1, Math.ceil(length / perLine));
|
|
14
|
+
}
|
|
15
|
+
function sourceLines(raw) {
|
|
16
|
+
let n = 1;
|
|
17
|
+
// Code units, not `raw[i]`: the indexed read creates a one-character string per byte.
|
|
18
|
+
for (let i = 0; i < raw.length; i++)
|
|
19
|
+
if (raw.charCodeAt(i) === NEWLINE)
|
|
20
|
+
n++;
|
|
21
|
+
if (raw.endsWith('\n'))
|
|
22
|
+
n--;
|
|
23
|
+
return Math.max(1, n);
|
|
24
|
+
}
|
|
25
|
+
// An image's hinted height, else the floor: an unsized image is not knowable until it decodes.
|
|
26
|
+
function imageHeights(raw, env) {
|
|
27
|
+
let total = 0;
|
|
28
|
+
IMAGE_ALT.lastIndex = 0;
|
|
29
|
+
let m;
|
|
30
|
+
while ((m = IMAGE_ALT.exec(raw)) !== null) {
|
|
31
|
+
total += parseImageDimensions(m[1]).height ?? env.imageBlockMinHeight;
|
|
32
|
+
}
|
|
33
|
+
return total;
|
|
34
|
+
}
|
|
35
|
+
// ── Estimates ───────────────────────────────────────────────────────────────
|
|
36
|
+
/** Wrapped text, or the images it holds when they stand taller than it. */
|
|
37
|
+
export function proseEstimate(node, env) {
|
|
38
|
+
const text = wrappedLines(node.raw.length, env) * env.lineHeight;
|
|
39
|
+
// The substring test first: most prose holds no image, and the alt scan is the costly part.
|
|
40
|
+
if (!node.raw.includes('!['))
|
|
41
|
+
return text;
|
|
42
|
+
// The image heights, the floor included, size the whole block, frame and all.
|
|
43
|
+
return Math.max(text, imageHeights(node.raw, env) - env.blockChrome);
|
|
44
|
+
}
|
|
45
|
+
/** One line, whatever the bytes: a divider. */
|
|
46
|
+
export function singleLineEstimate(_node, env) {
|
|
47
|
+
return env.lineHeight;
|
|
48
|
+
}
|
|
49
|
+
/** One code line per source line: code does not wrap. */
|
|
50
|
+
export function sourceLinesEstimate(node, env) {
|
|
51
|
+
return sourceLines(node.raw) * env.codeLineHeight;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A grid takes the larger of its rows and its source wrapped; any other container the larger of a
|
|
55
|
+
* line per child and its text wrapped, since the first ignores wrapping and the second margins.
|
|
56
|
+
*/
|
|
57
|
+
export function containerEstimate(node, env) {
|
|
58
|
+
const wrapped = wrappedLines(node.raw.length, env) * env.lineHeight;
|
|
59
|
+
if (isGridKind(node.kind)) {
|
|
60
|
+
return Math.max(sourceLines(node.raw) * env.lineHeight, wrapped);
|
|
61
|
+
}
|
|
62
|
+
const children = Math.max(1, node.children?.length ?? 1);
|
|
63
|
+
return Math.max(children * (env.lineHeight + env.blockChrome) - env.blockChrome, wrapped);
|
|
64
|
+
}
|