@voithos-labs/aragonite 0.10.4 → 0.10.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/a11y-strings.d.ts +11 -5
- package/dist/a11y-strings.js +60 -5
- package/dist/action-contracts.d.ts +242 -155
- package/dist/action-contracts.js +2 -2
- package/dist/active-editor.d.ts +3 -3
- package/dist/active-editor.js +8 -9
- package/dist/ambient/ambient-dom.d.ts +2 -5
- package/dist/ambient/ambient-dom.js +16 -62
- package/dist/assert.js +6 -5
- package/dist/block-component.d.ts +135 -109
- package/dist/block-component.js +30 -22
- package/dist/block-id.d.ts +6 -10
- package/dist/block-id.js +25 -14
- package/dist/bounded-memo.d.ts +5 -5
- package/dist/bounded-memo.js +6 -6
- package/dist/components/BlockDragHandle.svelte +12 -21
- package/dist/components/BlockHost.svelte +56 -134
- package/dist/components/BlockList.svelte +22 -19
- package/dist/components/DecorationOverlay.svelte +9 -10
- package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
- package/dist/components/Editor.svelte +603 -1126
- package/dist/components/Editor.svelte.d.ts +9 -20
- package/dist/components/GapCaret.svelte +26 -59
- package/dist/components/SelectionOverlay.svelte +26 -51
- package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
- package/dist/components/TailInsert.svelte +8 -55
- package/dist/components/TailInsert.svelte.d.ts +4 -6
- package/dist/components/block-content-selector.d.ts +11 -11
- package/dist/components/block-content-selector.js +11 -11
- package/dist/components/block-el-lookup.d.ts +6 -0
- package/dist/components/block-el-lookup.js +27 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
- package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
- package/dist/components/blocks/code/CodeBlock.svelte +255 -276
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
- package/dist/components/blocks/code/CodeBlockRail.svelte +72 -87
- package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
- package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
- package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
- package/dist/components/blocks/code/code-bootstrap.js +29 -34
- package/dist/components/blocks/code/code-context-actions.js +5 -4
- package/dist/components/blocks/code/code-enter.js +2 -2
- package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
- package/dist/components/blocks/code/code-fence-boundary.js +40 -66
- package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
- package/dist/components/blocks/code/code-fence-exit.js +24 -25
- package/dist/components/blocks/code/code-indent.d.ts +2 -2
- package/dist/components/blocks/code/code-indent.js +4 -7
- package/dist/components/blocks/code/code-languages.d.ts +16 -12
- package/dist/components/blocks/code/code-languages.js +57 -39
- package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
- package/dist/components/blocks/code/code-paste-surface.js +9 -18
- package/dist/components/blocks/code/code-renderer.d.ts +21 -5
- package/dist/components/blocks/code/code-renderer.js +90 -125
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
- package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
- package/dist/components/blocks/directive/activate-directives.js +18 -13
- package/dist/components/blocks/editable-leaf.d.ts +50 -74
- package/dist/components/blocks/editable-leaf.js +141 -203
- package/dist/components/blocks/editable-surface.d.ts +96 -100
- package/dist/components/blocks/editable-surface.js +101 -109
- package/dist/components/blocks/list/ListBlock.svelte +45 -90
- package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
- package/dist/components/blocks/list/task-checkbox.js +12 -7
- package/dist/components/blocks/plain-text-backend.d.ts +4 -20
- package/dist/components/blocks/plain-text-backend.js +9 -43
- package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
- package/dist/components/blocks/surface-wiring.svelte.js +15 -34
- package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
- package/dist/components/blocks/table/TableBlock.svelte +100 -165
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
- package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
- package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
- package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
- package/dist/components/blocks/table/cell-pointer.js +49 -71
- package/dist/components/blocks/table/cell-render.d.ts +24 -29
- package/dist/components/blocks/table/cell-render.js +29 -31
- package/dist/components/blocks/table/selected-cells.d.ts +7 -7
- package/dist/components/blocks/table/selected-cells.js +9 -13
- package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
- package/dist/components/blocks/table/table-caret-at-point.js +5 -5
- package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
- package/dist/components/blocks/table/table-cell-paste.js +27 -43
- package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
- package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
- package/dist/components/blocks/table/table-menu-model.js +6 -10
- package/dist/components/blocks/table/table-navigation.js +2 -2
- package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
- package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
- package/dist/components/blocks/text/auto-pair-record.js +51 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +8 -6
- package/dist/components/blocks/text/click-snap-guard.js +10 -7
- package/dist/components/blocks/text/composition-seat.d.ts +17 -14
- package/dist/components/blocks/text/composition-seat.js +11 -11
- package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
- package/dist/components/blocks/text/construct-edge-delete.js +50 -65
- package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
- package/dist/components/blocks/text/construct-reveal.js +13 -14
- package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
- package/dist/components/blocks/text/delimiter-autopair.js +87 -103
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
- package/dist/components/blocks/text/edge-policy-dispatch.js +150 -181
- package/dist/components/blocks/text/edge-seat.d.ts +17 -26
- package/dist/components/blocks/text/edge-seat.js +43 -70
- package/dist/components/blocks/text/link-at-point.d.ts +9 -9
- package/dist/components/blocks/text/link-at-point.js +12 -15
- package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
- package/dist/components/blocks/text/live-join-seam.js +75 -112
- package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
- package/dist/components/blocks/text/live-selection-edit.js +32 -108
- package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
- package/dist/components/blocks/text/live-split-rebalance.js +50 -67
- package/dist/components/blocks/text/marker-completion.d.ts +7 -12
- package/dist/components/blocks/text/marker-completion.js +17 -10
- package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
- package/dist/components/blocks/text/pending-mark-insert.js +30 -49
- package/dist/components/blocks/text/screen-diff.d.ts +5 -15
- package/dist/components/blocks/text/screen-diff.js +5 -19
- package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
- package/dist/components/blocks/text/text-clipboard.js +27 -32
- package/dist/components/blocks/text/text-keydown.d.ts +20 -30
- package/dist/components/blocks/text/text-keydown.js +54 -51
- package/dist/components/blocks/text/text-render.d.ts +25 -35
- package/dist/components/blocks/text/text-render.js +82 -61
- package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
- package/dist/components/blocks/text/widget-adjacency.js +17 -17
- package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
- package/dist/components/blocks/text/widget-interaction.js +212 -199
- package/dist/components/blocks/widget-portal.d.ts +20 -29
- package/dist/components/blocks/widget-portal.js +16 -14
- package/dist/components/built-in-blocks.d.ts +3 -4
- package/dist/components/built-in-blocks.js +17 -18
- package/dist/components/drag-handle.d.ts +12 -35
- package/dist/components/drag-handle.js +22 -68
- package/dist/components/editor-built-ins.d.ts +1 -0
- package/dist/components/editor-built-ins.js +16 -0
- package/dist/components/editor-root-clipboard.d.ts +6 -6
- package/dist/components/editor-root-clipboard.js +16 -27
- package/dist/components/editor-root-document-swap.d.ts +49 -0
- package/dist/components/editor-root-document-swap.js +54 -0
- package/dist/components/editor-root-focus.d.ts +5 -4
- package/dist/components/editor-root-focus.js +51 -22
- package/dist/components/editor-root-focused-surface.d.ts +35 -0
- package/dist/components/editor-root-focused-surface.js +65 -0
- package/dist/components/editor-root-geometry.d.ts +15 -24
- package/dist/components/editor-root-geometry.js +27 -31
- package/dist/components/editor-root-gestures.d.ts +39 -0
- package/dist/components/editor-root-gestures.js +189 -0
- package/dist/components/editor-root-keydown.d.ts +10 -25
- package/dist/components/editor-root-keydown.js +19 -43
- package/dist/components/editor-root-listeners.d.ts +22 -24
- package/dist/components/editor-root-listeners.js +49 -24
- package/dist/components/editor-root-menus.d.ts +51 -0
- package/dist/components/editor-root-menus.js +147 -0
- package/dist/components/editor-root-mode-flip.d.ts +16 -11
- package/dist/components/editor-root-mode-flip.js +36 -34
- package/dist/components/editor-root-scroll-host.d.ts +22 -0
- package/dist/components/editor-root-scroll-host.js +34 -0
- package/dist/components/editor-root-test-surface.d.ts +48 -0
- package/dist/components/editor-root-test-surface.js +6 -0
- package/dist/components/image/ImageOverlayHost.svelte +44 -35
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
- package/dist/components/image/ImageProperties.svelte +37 -41
- package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
- package/dist/components/image/ImageResizeHandles.svelte +14 -26
- package/dist/components/image/image-crop.d.ts +5 -11
- package/dist/components/image/image-crop.js +5 -11
- package/dist/components/image/image-edit-commit.d.ts +19 -16
- package/dist/components/image/image-edit-commit.js +74 -38
- package/dist/components/image/image-resize.d.ts +2 -5
- package/dist/components/image/image-resize.js +3 -6
- package/dist/components/image/image-widget-editing.d.ts +3 -3
- package/dist/components/image/image-widget-editing.js +9 -9
- package/dist/components/image/widget-dom.d.ts +2 -3
- package/dist/components/image/widget-dom.js +19 -24
- package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
- package/dist/components/image/widget-selection-state.svelte.js +26 -19
- package/dist/components/kind-cue.svelte.d.ts +21 -0
- package/dist/components/kind-cue.svelte.js +35 -0
- package/dist/components/link-card/LinkCard.svelte +115 -64
- package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
- package/dist/components/link-card/LinkCardHost.svelte +42 -33
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
- package/dist/components/link-card/link-card-commit.d.ts +16 -19
- package/dist/components/link-card/link-card-commit.js +21 -30
- package/dist/components/link-card/link-card-entry.d.ts +13 -23
- package/dist/components/link-card/link-card-entry.js +16 -24
- package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
- package/dist/components/link-card/link-card-state.svelte.js +2 -2
- package/dist/components/lrd-map-gate.d.ts +4 -11
- package/dist/components/lrd-map-gate.js +5 -11
- package/dist/components/menu/BlockMenu.svelte +20 -81
- package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
- package/dist/components/menu/InlineMenuHost.svelte +191 -0
- package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
- package/dist/components/menu/MenuIcon.svelte +3 -103
- package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
- package/dist/components/menu/SelectionToolbar.svelte +30 -35
- package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
- package/dist/components/menu/clipboard-actions.d.ts +3 -4
- package/dist/components/menu/clipboard-actions.js +3 -4
- package/dist/components/menu/default-context-actions.d.ts +4 -13
- package/dist/components/menu/default-context-actions.js +49 -67
- package/dist/components/menu/flyout-placement.d.ts +2 -2
- package/dist/components/menu/flyout-placement.js +2 -2
- package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
- package/dist/components/menu/menu-presence.svelte.js +19 -0
- package/dist/components/paste-image-arm.d.ts +6 -11
- package/dist/components/paste-image-arm.js +11 -18
- package/dist/components/portal.d.ts +2 -5
- package/dist/components/portal.js +4 -7
- package/dist/core/directive/activate.d.ts +4 -5
- package/dist/core/directive/activate.js +8 -9
- package/dist/core/directive/container-opener.js +13 -12
- package/dist/core/directive/grammar.d.ts +2 -5
- package/dist/core/directive/grammar.js +10 -10
- package/dist/core/directive/kinds.d.ts +4 -7
- package/dist/core/directive/kinds.js +14 -16
- package/dist/core/directive/registry.d.ts +12 -9
- package/dist/core/directive/registry.js +19 -20
- package/dist/core/directive/text-recognizer.d.ts +3 -2
- package/dist/core/directive/text-recognizer.js +5 -9
- package/dist/core/escapable.d.ts +1 -5
- package/dist/core/escapable.js +1 -5
- package/dist/core/inline/backticks.d.ts +3 -4
- package/dist/core/inline/backticks.js +3 -4
- package/dist/core/inline/character-refs.js +2 -1
- package/dist/core/inline/destination-bytes.d.ts +6 -3
- package/dist/core/inline/destination-bytes.js +50 -8
- package/dist/core/inline/entity-widget.d.ts +4 -3
- package/dist/core/inline/entity-widget.js +6 -6
- package/dist/core/inline/format-toggle.d.ts +22 -28
- package/dist/core/inline/format-toggle.js +97 -129
- package/dist/core/inline/html-entities.d.ts +2 -3
- package/dist/core/inline/html-entities.js +2 -3
- package/dist/core/inline/html-tag-grammar.js +6 -2
- package/dist/core/inline/image-dimensions.d.ts +2 -0
- package/dist/core/inline/image-dimensions.js +19 -2
- package/dist/core/inline/image-source-bytes.d.ts +11 -0
- package/dist/core/inline/image-source-bytes.js +71 -0
- package/dist/core/inline/index.d.ts +28 -21
- package/dist/core/inline/index.js +56 -34
- package/dist/core/inline/inline-cache.d.ts +12 -15
- package/dist/core/inline/inline-cache.js +11 -14
- package/dist/core/inline/inline-widgets.d.ts +54 -75
- package/dist/core/inline/inline-widgets.js +54 -62
- package/dist/core/inline/link-destination.d.ts +31 -0
- package/dist/core/inline/link-destination.js +129 -0
- package/dist/core/inline/link-reference-resolver.d.ts +8 -6
- package/dist/core/inline/link-reference-resolver.js +10 -6
- package/dist/core/inline/link-source-bytes.d.ts +31 -0
- package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
- package/dist/core/inline/live-edit/read-back.d.ts +29 -0
- package/dist/core/inline/live-edit/read-back.js +50 -0
- package/dist/core/inline/picture.d.ts +10 -0
- package/dist/core/inline/picture.js +40 -0
- package/dist/core/inline/scan/autolinks.d.ts +7 -8
- package/dist/core/inline/scan/autolinks.js +80 -59
- package/dist/core/inline/scan/brackets.d.ts +2 -2
- package/dist/core/inline/scan/brackets.js +6 -103
- package/dist/core/inline/scan/code-spans.d.ts +4 -0
- package/dist/core/inline/scan/code-spans.js +8 -0
- package/dist/core/inline/scan/emphasis.js +10 -14
- package/dist/core/inline/scan/index.d.ts +3 -1
- package/dist/core/inline/scan/index.js +32 -33
- package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
- package/dist/core/inline/scan/plugin-syntax.js +75 -89
- package/dist/core/inline/scan/scan-state.d.ts +2 -0
- package/dist/core/inline/scan/scan-state.js +1 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
- package/dist/core/inline/scan/simple-nodes.js +2 -5
- package/dist/core/inline/scan/triggers.d.ts +17 -0
- package/dist/core/inline/scan/triggers.js +26 -0
- package/dist/core/inline/scan/url.js +8 -10
- package/dist/core/inline/transparency.d.ts +2 -1
- package/dist/core/inline/transparency.js +31 -15
- package/dist/core/inline/visibility.d.ts +30 -49
- package/dist/core/inline/visibility.js +31 -49
- package/dist/core/inline/walk.d.ts +4 -10
- package/dist/core/inline/walk.js +4 -10
- package/dist/core/inline-render.d.ts +22 -27
- package/dist/core/inline-render.js +51 -60
- package/dist/core/lines.d.ts +67 -26
- package/dist/core/lines.js +164 -33
- package/dist/core/metadata-parity.d.ts +9 -0
- package/dist/core/metadata-parity.js +25 -0
- package/dist/core/node-views.d.ts +7 -6
- package/dist/core/node-views.js +5 -5
- package/dist/core/nodes.d.ts +34 -44
- package/dist/core/nodes.js +4 -12
- package/dist/core/parser.d.ts +27 -34
- package/dist/core/parser.js +53 -67
- package/dist/core/parsers/blockquote.d.ts +5 -8
- package/dist/core/parsers/blockquote.js +11 -10
- package/dist/core/parsers/built-in-openers.d.ts +2 -5
- package/dist/core/parsers/built-in-openers.js +5 -8
- package/dist/core/parsers/fence-syntax.d.ts +36 -7
- package/dist/core/parsers/fence-syntax.js +61 -11
- package/dist/core/parsers/fenced-code.d.ts +16 -0
- package/dist/core/parsers/fenced-code.js +16 -15
- package/dist/core/parsers/heading.d.ts +19 -2
- package/dist/core/parsers/heading.js +50 -2
- package/dist/core/parsers/html-block.d.ts +3 -6
- package/dist/core/parsers/html-block.js +10 -11
- package/dist/core/parsers/indented-code.d.ts +1 -1
- package/dist/core/parsers/indented-code.js +2 -8
- package/dist/core/parsers/link-reference.d.ts +5 -3
- package/dist/core/parsers/link-reference.js +116 -120
- package/dist/core/parsers/list.d.ts +12 -5
- package/dist/core/parsers/list.js +53 -36
- package/dist/core/parsers/paragraph.d.ts +3 -3
- package/dist/core/parsers/paragraph.js +14 -5
- package/dist/core/parsers/table-completion.d.ts +2 -5
- package/dist/core/parsers/table-completion.js +7 -10
- package/dist/core/parsers/table.d.ts +8 -8
- package/dist/core/parsers/table.js +23 -26
- package/dist/core/parsers/thematic-break.js +15 -14
- package/dist/core/paths.d.ts +13 -0
- package/dist/core/paths.js +31 -0
- package/dist/core/terminator-escalation.d.ts +0 -7
- package/dist/core/terminator-escalation.js +5 -8
- package/dist/core/url-policy.d.ts +2 -5
- package/dist/core/url-policy.js +8 -12
- package/dist/cursor/caret-memory.d.ts +34 -0
- package/dist/cursor/caret-memory.js +82 -0
- package/dist/cursor/coordinate-spaces.d.ts +26 -19
- package/dist/cursor/coordinate-spaces.js +32 -20
- package/dist/cursor/dom-walk.d.ts +7 -13
- package/dist/cursor/dom-walk.js +7 -13
- package/dist/cursor/edge-affinity.d.ts +7 -35
- package/dist/cursor/edge-affinity.js +13 -44
- package/dist/cursor/focused-caret.d.ts +6 -8
- package/dist/cursor/focused-caret.js +7 -16
- package/dist/cursor/height-model.d.ts +3 -3
- package/dist/cursor/height-model.js +5 -5
- package/dist/cursor/height-oracle.d.ts +10 -6
- package/dist/cursor/height-oracle.js +26 -74
- package/dist/cursor/observe-resize.d.ts +13 -0
- package/dist/cursor/observe-resize.js +43 -0
- package/dist/cursor/overlay-rects.d.ts +2 -5
- package/dist/cursor/overlay-rects.js +2 -5
- package/dist/cursor/overlay-remeasure.d.ts +6 -7
- package/dist/cursor/overlay-remeasure.js +10 -14
- package/dist/cursor/pending-marks.d.ts +7 -9
- package/dist/cursor/pending-marks.js +6 -27
- package/dist/cursor/point-offset.d.ts +16 -10
- package/dist/cursor/point-offset.js +60 -25
- package/dist/cursor/reveal-source.d.ts +7 -11
- package/dist/cursor/reveal-source.js +10 -18
- package/dist/cursor/scroll-ancestors.d.ts +9 -20
- package/dist/cursor/scroll-ancestors.js +14 -26
- package/dist/cursor/scroll-owner.d.ts +92 -0
- package/dist/cursor/scroll-owner.js +283 -0
- package/dist/cursor/scrollport.d.ts +14 -15
- package/dist/cursor/scrollport.js +7 -13
- package/dist/cursor/sticky-column.d.ts +6 -29
- package/dist/cursor/sticky-column.js +6 -49
- package/dist/cursor/sticky-measure.d.ts +14 -9
- package/dist/cursor/sticky-measure.js +99 -49
- package/dist/cursor/surface-backend.d.ts +41 -0
- package/dist/cursor/surface-backend.js +78 -0
- package/dist/cursor/typography-estimates.d.ts +3 -3
- package/dist/cursor/typography-estimates.js +3 -3
- package/dist/cursor/visual-lines.d.ts +25 -14
- package/dist/cursor/visual-lines.js +45 -46
- package/dist/cursor/widget-edge-snap.d.ts +10 -15
- package/dist/cursor/widget-edge-snap.js +13 -12
- package/dist/cursor/widget-offset.d.ts +110 -104
- package/dist/cursor/widget-offset.js +344 -179
- package/dist/debug/diagnostics-report.d.ts +6 -6
- package/dist/debug/diagnostics-report.js +5 -5
- package/dist/debug/dump-tree.js +2 -2
- package/dist/debug/editor-diagnostics.d.ts +15 -0
- package/dist/debug/editor-diagnostics.js +33 -0
- package/dist/debug/inspect.d.ts +2 -2
- package/dist/debug/inspect.js +4 -4
- package/dist/debug/interaction-trace.d.ts +14 -15
- package/dist/debug/interaction-trace.js +19 -20
- package/dist/debug/operations-log.d.ts +1 -1
- package/dist/debug/operations-log.js +1 -1
- package/dist/decorations/buckets.d.ts +6 -12
- package/dist/decorations/buckets.js +4 -11
- package/dist/decorations/decoration-state.svelte.d.ts +2 -3
- package/dist/decorations/decoration-state.svelte.js +24 -26
- package/dist/decorations/island-dom.d.ts +10 -18
- package/dist/decorations/island-dom.js +25 -50
- package/dist/decorations/reserved-attrs.d.ts +6 -8
- package/dist/decorations/reserved-attrs.js +30 -17
- package/dist/decorations/types.d.ts +6 -7
- package/dist/decorations/types.js +2 -1
- package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
- package/dist/decorations/use-block-decorations.svelte.js +71 -0
- package/dist/decorations/widget-dom.d.ts +3 -3
- package/dist/decorations/widget-dom.js +5 -5
- package/dist/dev-warn.d.ts +5 -2
- package/dist/dev-warn.js +16 -4
- package/dist/editor-actions/ancestry-folds.d.ts +9 -14
- package/dist/editor-actions/ancestry-folds.js +13 -18
- package/dist/editor-actions/block-edit-core.d.ts +49 -22
- package/dist/editor-actions/block-edit-core.js +279 -151
- package/dist/editor-actions/block-edit-scope.d.ts +63 -50
- package/dist/editor-actions/block-edit-scope.js +100 -48
- package/dist/editor-actions/block-edit.d.ts +2 -3
- package/dist/editor-actions/block-edit.js +14 -90
- package/dist/editor-actions/commit/history.d.ts +4 -4
- package/dist/editor-actions/commit/history.js +33 -34
- package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
- package/dist/editor-actions/commit/reading-write-gate.js +56 -0
- package/dist/editor-actions/commit/text-batch.d.ts +7 -11
- package/dist/editor-actions/commit/text-batch.js +6 -7
- package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
- package/dist/editor-actions/commit/undo-controller.js +346 -216
- package/dist/editor-actions/container-block-component.d.ts +32 -51
- package/dist/editor-actions/container-block-component.js +66 -92
- package/dist/editor-actions/container-edit.d.ts +4 -2
- package/dist/editor-actions/container-edit.js +14 -44
- package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
- package/dist/editor-actions/container-exit-overrides.js +19 -21
- package/dist/editor-actions/deps.d.ts +25 -32
- package/dist/editor-actions/enter-completion.d.ts +12 -15
- package/dist/editor-actions/enter-completion.js +49 -51
- package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
- package/dist/editor-actions/focus/focus-dispatch.js +28 -50
- package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
- package/dist/editor-actions/focus/focus-landing.js +15 -14
- package/dist/editor-actions/focus/focus.d.ts +3 -2
- package/dist/editor-actions/focus/focus.js +42 -59
- package/dist/editor-actions/index.d.ts +4 -3
- package/dist/editor-actions/index.js +5 -4
- package/dist/editor-actions/inline-range-commit.d.ts +18 -16
- package/dist/editor-actions/inline-range-commit.js +45 -54
- package/dist/editor-actions/leaf-write.d.ts +11 -0
- package/dist/editor-actions/leaf-write.js +102 -0
- package/dist/editor-actions/list-context.d.ts +9 -10
- package/dist/editor-actions/list-context.js +115 -110
- package/dist/editor-actions/list-overrides.d.ts +13 -5
- package/dist/editor-actions/list-overrides.js +36 -12
- package/dist/editor-actions/merge-fallback.d.ts +10 -16
- package/dist/editor-actions/merge-fallback.js +11 -22
- package/dist/editor-actions/nested/container-actions.d.ts +37 -0
- package/dist/editor-actions/nested/container-actions.js +42 -0
- package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
- package/dist/editor-actions/nested/emptied-container.js +5 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
- package/dist/editor-actions/nested/nested-actions.js +17 -15
- package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
- package/dist/editor-actions/nested/nested-block-edit.js +40 -134
- package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
- package/dist/editor-actions/nested/nested-focus.js +33 -21
- package/dist/editor-actions/paste-coordinator.d.ts +3 -2
- package/dist/editor-actions/paste-coordinator.js +17 -13
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
- package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
- package/dist/editor-actions/plugin/container.d.ts +54 -82
- package/dist/editor-actions/plugin/container.js +105 -188
- package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
- package/dist/editor-actions/plugin/directive-container.js +7 -8
- package/dist/editor-actions/reorder-action.d.ts +7 -12
- package/dist/editor-actions/reorder-action.js +32 -48
- package/dist/editor-actions/reorder-drag.d.ts +12 -8
- package/dist/editor-actions/reorder-drag.js +45 -41
- package/dist/editor-actions/replacement-focus.d.ts +13 -21
- package/dist/editor-actions/replacement-focus.js +32 -33
- package/dist/editor-actions/search-replace.js +71 -67
- package/dist/editor-actions/stored-caret.d.ts +7 -0
- package/dist/editor-actions/stored-caret.js +10 -0
- package/dist/editor-actions/table-context.d.ts +9 -11
- package/dist/editor-actions/table-context.js +70 -93
- package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
- package/dist/editor-actions/unwrap-strategies.js +52 -63
- package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
- package/dist/editor-actions/whole-block-focus-surface.js +43 -53
- package/dist/editor-events.d.ts +25 -29
- package/dist/editor-events.js +17 -28
- package/dist/editor-keys.d.ts +96 -104
- package/dist/editor-keys.js +11 -24
- package/dist/editor-props.d.ts +88 -71
- package/dist/editor-rects.d.ts +23 -34
- package/dist/editor-rects.js +9 -77
- package/dist/env.d.ts +6 -4
- package/dist/env.js +8 -4
- package/dist/index.d.ts +6 -2
- package/dist/index.js +5 -2
- package/dist/inline-menu/inline-menu-session.d.ts +37 -0
- package/dist/inline-menu/inline-menu-session.js +98 -0
- package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
- package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
- package/dist/inline-menu/types.d.ts +77 -0
- package/dist/inline-menu/types.js +7 -0
- package/dist/invariants/child-id-parity.d.ts +23 -0
- package/dist/invariants/child-id-parity.js +39 -0
- package/dist/invariants/commit-paths.d.ts +4 -4
- package/dist/invariants/commit-paths.js +4 -4
- package/dist/invariants/commit-scope.d.ts +4 -4
- package/dist/invariants/commit-scope.js +9 -8
- package/dist/invariants/context-keys.d.ts +2 -5
- package/dist/invariants/context-keys.js +3 -6
- package/dist/invariants/descriptor.d.ts +2 -6
- package/dist/invariants/descriptor.js +2 -6
- package/dist/invariants/inline-transitions.d.ts +9 -16
- package/dist/invariants/inline-transitions.js +10 -18
- package/dist/invariants/install.d.ts +18 -27
- package/dist/invariants/install.js +29 -30
- package/dist/invariants/keeps-a-block.d.ts +7 -0
- package/dist/invariants/keeps-a-block.js +14 -0
- package/dist/invariants/landable-caret.d.ts +5 -7
- package/dist/invariants/landable-caret.js +8 -11
- package/dist/invariants/landing-focus-scroll.d.ts +7 -0
- package/dist/invariants/landing-focus-scroll.js +13 -0
- package/dist/invariants/landing-value.d.ts +13 -0
- package/dist/invariants/landing-value.js +27 -0
- package/dist/invariants/marker-css-parity.d.ts +5 -6
- package/dist/invariants/marker-css-parity.js +11 -12
- package/dist/invariants/measures-in-own-list.d.ts +6 -0
- package/dist/invariants/measures-in-own-list.js +13 -0
- package/dist/invariants/node-shape.d.ts +18 -37
- package/dist/invariants/node-shape.js +123 -79
- package/dist/invariants/open-tail.d.ts +7 -0
- package/dist/invariants/open-tail.js +45 -0
- package/dist/invariants/placement-ends-widget.d.ts +8 -0
- package/dist/invariants/placement-ends-widget.js +13 -0
- package/dist/invariants/registry.d.ts +27 -66
- package/dist/invariants/registry.js +61 -137
- package/dist/invariants/render-fidelity.d.ts +4 -4
- package/dist/invariants/render-fidelity.js +5 -5
- package/dist/invariants/selection-endpoints.d.ts +6 -7
- package/dist/invariants/selection-endpoints.js +18 -16
- package/dist/invariants/single-node-sink.d.ts +4 -5
- package/dist/invariants/single-node-sink.js +4 -5
- package/dist/invariants/snapshot-integrity.d.ts +5 -6
- package/dist/invariants/snapshot-integrity.js +1 -1
- package/dist/invariants/structural-descriptor.d.ts +6 -15
- package/dist/invariants/structural-descriptor.js +6 -15
- package/dist/menu-icons.d.ts +47 -0
- package/dist/menu-icons.js +113 -0
- package/dist/perf/instruments.d.ts +20 -5
- package/dist/perf/instruments.js +35 -15
- package/dist/perf/use-mount-gauge.svelte.js +4 -4
- package/dist/plugin.d.ts +37 -8
- package/dist/plugin.js +100 -77
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
- package/dist/plugins/admonitions/admonition-kind.js +12 -10
- package/dist/plugins/admonitions/convert-document.d.ts +5 -5
- package/dist/plugins/admonitions/convert-document.js +8 -7
- package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
- package/dist/plugins/admonitions/gh-alert.js +21 -22
- package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
- package/dist/plugins/admonitions/github-alert-kind.js +28 -37
- package/dist/plugins/admonitions/index.js +2 -2
- package/dist/plugins/admonitions/kinds.d.ts +1 -1
- package/dist/plugins/admonitions/register.js +11 -2
- package/dist/plugins/details/DetailsBlock.svelte +20 -20
- package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
- package/dist/plugins/details/details-disclosure.svelte.js +6 -7
- package/dist/plugins/details/details-kind.d.ts +6 -7
- package/dist/plugins/details/details-kind.js +44 -59
- package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
- package/dist/plugins/emoji/emoji-recognizer.js +7 -14
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
- package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +3 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
- package/dist/plugins/footnotes/footnote-definition.js +69 -45
- package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
- package/dist/plugins/footnotes/footnote-lookup.js +14 -26
- package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
- package/dist/plugins/footnotes/footnote-numbering.js +22 -31
- package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
- package/dist/plugins/footnotes/footnote-reference.js +8 -13
- package/dist/plugins/footnotes/index.js +2 -3
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
- package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
- package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
- package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/word-char.js +4 -0
- package/dist/plugins/latex/BlockMath.svelte +58 -75
- package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
- package/dist/plugins/latex/MathInline.svelte +10 -9
- package/dist/plugins/latex/flanking.d.ts +1 -0
- package/dist/plugins/latex/flanking.js +3 -0
- package/dist/plugins/latex/index.d.ts +1 -1
- package/dist/plugins/latex/latex-kind.d.ts +4 -4
- package/dist/plugins/latex/latex-kind.js +78 -67
- package/dist/plugins/latex/math-completion.d.ts +1 -1
- package/dist/plugins/latex/math-completion.js +5 -8
- package/dist/plugins/latex/math-layout.d.ts +2 -8
- package/dist/plugins/latex/math-layout.js +0 -9
- package/dist/plugins/latex/math-renderer.d.ts +17 -20
- package/dist/plugins/latex/math-renderer.js +21 -38
- package/dist/plugins/latex/math-source.d.ts +4 -8
- package/dist/plugins/latex/math-source.js +36 -81
- package/dist/plugins/latex/register.d.ts +10 -11
- package/dist/plugins/latex/register.js +24 -10
- package/dist/plugins/latex/renderer.d.ts +9 -10
- package/dist/plugins/latex/renderer.js +9 -24
- package/dist/plugins/mermaid/MermaidBlock.svelte +51 -45
- package/dist/plugins/mermaid/index.js +1 -1
- package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
- package/dist/plugins/mermaid/mermaid-kind.js +30 -47
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
- package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
- package/dist/plugins/mermaid/register.d.ts +3 -3
- package/dist/plugins/mermaid/register.js +5 -5
- package/dist/plugins/mermaid/renderer.d.ts +5 -5
- package/dist/plugins/mermaid/renderer.js +8 -11
- package/dist/plugins/parrot/ParrotBlock.svelte +15 -6
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
- package/dist/plugins/parrot/parrot-plugin.js +3 -3
- package/dist/plugins/slash-commands/filter.d.ts +23 -0
- package/dist/plugins/slash-commands/filter.js +31 -0
- package/dist/plugins/slash-commands/index.d.ts +2 -0
- package/dist/plugins/slash-commands/index.js +2 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
- package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
- package/dist/plugins/slash-commands/slash-source.js +108 -0
- package/dist/plugins/toc/TocBlock.svelte +23 -22
- package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
- package/dist/plugins/toc/heading-outline.d.ts +7 -12
- package/dist/plugins/toc/heading-outline.js +22 -36
- package/dist/plugins/toc/navigation-queue.d.ts +2 -4
- package/dist/plugins/toc/toc-plugin.d.ts +5 -5
- package/dist/plugins/toc/toc-plugin.js +20 -13
- package/dist/presentation-mode.d.ts +15 -23
- package/dist/presentation-mode.js +19 -25
- package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
- package/dist/reactivity/block-list-state.svelte.js +8 -9
- package/dist/reactivity/block-window.svelte.d.ts +12 -6
- package/dist/reactivity/block-window.svelte.js +44 -17
- package/dist/reactivity/child-list.d.ts +34 -0
- package/dist/reactivity/child-list.js +48 -0
- package/dist/reactivity/content-version.svelte.d.ts +4 -7
- package/dist/reactivity/content-version.svelte.js +3 -5
- package/dist/reactivity/hold-across.d.ts +39 -0
- package/dist/reactivity/hold-across.js +57 -0
- package/dist/reactivity/layout-state.svelte.d.ts +27 -0
- package/dist/reactivity/layout-state.svelte.js +51 -0
- package/dist/reactivity/list-tree.d.ts +39 -0
- package/dist/reactivity/list-tree.js +132 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
- package/dist/reactivity/list-windowing.svelte.js +141 -310
- package/dist/reactivity/measure-batch.d.ts +6 -8
- package/dist/reactivity/measure-batch.js +5 -6
- package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
- package/dist/reactivity/publish-ref.svelte.js +21 -85
- package/dist/reactivity/scope-geometry.d.ts +6 -13
- package/dist/reactivity/scope-geometry.js +7 -14
- package/dist/reactivity/state-registry.d.ts +5 -5
- package/dist/reactivity/state-registry.js +11 -15
- package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
- package/dist/reactivity/use-container-windowing.svelte.js +64 -74
- package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
- package/dist/reactivity/use-measured-child.svelte.js +41 -0
- package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
- package/dist/reactivity/use-window-floor.svelte.js +27 -0
- package/dist/reactivity/window-slice.d.ts +4 -4
- package/dist/reactivity/window-slice.js +0 -2
- package/dist/renderer-slot.d.ts +48 -0
- package/dist/renderer-slot.js +85 -0
- package/dist/scan-index.d.ts +4 -4
- package/dist/scan-index.js +4 -4
- package/dist/schema/block-commands.d.ts +69 -54
- package/dist/schema/block-commands.js +91 -104
- package/dist/schema/block-completions.d.ts +16 -19
- package/dist/schema/block-completions.js +25 -32
- package/dist/schema/block-component-registry.d.ts +13 -14
- package/dist/schema/block-component-registry.js +19 -17
- package/dist/schema/block-kind-descriptor.d.ts +234 -168
- package/dist/schema/block-kind-descriptor.js +151 -66
- package/dist/schema/block-openers.d.ts +48 -39
- package/dist/schema/block-openers.js +73 -83
- package/dist/schema/built-in-descriptors.d.ts +3 -5
- package/dist/schema/built-in-descriptors.js +96 -80
- package/dist/schema/child-spans.d.ts +12 -10
- package/dist/schema/child-spans.js +68 -34
- package/dist/schema/closure.d.ts +18 -16
- package/dist/schema/closure.js +24 -14
- package/dist/schema/command-id.d.ts +6 -8
- package/dist/schema/command-id.js +20 -25
- package/dist/schema/commands.d.ts +78 -84
- package/dist/schema/commands.js +152 -117
- package/dist/schema/container-raw.d.ts +51 -11
- package/dist/schema/container-raw.js +143 -14
- package/dist/schema/container-rebuilders.d.ts +17 -15
- package/dist/schema/container-rebuilders.js +30 -22
- package/dist/schema/context-actions.d.ts +25 -13
- package/dist/schema/context-actions.js +32 -17
- package/dist/schema/define-plugin-block.d.ts +8 -6
- package/dist/schema/define-plugin-block.js +6 -4
- package/dist/schema/fenced-code-raw.d.ts +30 -17
- package/dist/schema/fenced-code-raw.js +155 -107
- package/dist/schema/global-commands.d.ts +6 -6
- package/dist/schema/global-commands.js +14 -22
- package/dist/schema/height-estimates.d.ts +31 -0
- package/dist/schema/height-estimates.js +64 -0
- package/dist/schema/inline-construct-policy.d.ts +42 -55
- package/dist/schema/inline-construct-policy.js +36 -35
- package/dist/schema/insert-catalogue.d.ts +30 -0
- package/dist/schema/insert-catalogue.js +95 -0
- package/dist/schema/keybinding-overrides.d.ts +9 -11
- package/dist/schema/keybinding-overrides.js +1 -1
- package/dist/schema/keybindings.d.ts +15 -7
- package/dist/schema/keybindings.js +21 -9
- package/dist/schema/merge-rules.d.ts +5 -7
- package/dist/schema/merge-rules.js +7 -9
- package/dist/schema/opener-priorities.d.ts +4 -4
- package/dist/schema/opener-priorities.js +4 -4
- package/dist/schema/operations.d.ts +8 -10
- package/dist/schema/operations.js +3 -3
- package/dist/schema/page-role.d.ts +14 -0
- package/dist/schema/page-role.js +19 -0
- package/dist/schema/plugin-activation.d.ts +4 -6
- package/dist/schema/plugin-activation.js +12 -10
- package/dist/schema/plugin-editor-context.d.ts +25 -10
- package/dist/schema/plugin-editor-context.js +40 -9
- package/dist/schema/plugin-install.d.ts +49 -17
- package/dist/schema/plugin-install.js +51 -25
- package/dist/schema/plugin-kind.d.ts +12 -8
- package/dist/schema/plugin-kind.js +35 -42
- package/dist/schema/plugin-name.js +3 -3
- package/dist/schema/plugin-registry.d.ts +54 -0
- package/dist/schema/plugin-registry.js +70 -0
- package/dist/schema/reading.d.ts +23 -0
- package/dist/schema/reading.js +7 -0
- package/dist/schema/register-once.d.ts +3 -5
- package/dist/schema/register-once.js +7 -16
- package/dist/schema/registration-checks.d.ts +12 -16
- package/dist/schema/registration-checks.js +35 -51
- package/dist/schema/registration-pairs.d.ts +54 -0
- package/dist/schema/registration-pairs.js +48 -0
- package/dist/schema/registration-pending.d.ts +8 -12
- package/dist/schema/registration-pending.js +9 -9
- package/dist/schema/registry-reset.d.ts +8 -4
- package/dist/schema/registry-reset.js +13 -26
- package/dist/schema/registry-view.d.ts +25 -13
- package/dist/schema/registry-view.js +26 -20
- package/dist/schema/reserved-chords.d.ts +9 -10
- package/dist/schema/reserved-chords.js +63 -80
- package/dist/schema/reserved-chrome.d.ts +12 -11
- package/dist/schema/reserved-chrome.js +15 -11
- package/dist/schema/setext-raw.d.ts +13 -0
- package/dist/schema/setext-raw.js +33 -0
- package/dist/schema/stored-as.d.ts +20 -0
- package/dist/schema/stored-as.js +6 -0
- package/dist/schema/table-cell-raw.d.ts +18 -7
- package/dist/schema/table-cell-raw.js +28 -7
- package/dist/schema/whole-block-unit.d.ts +5 -4
- package/dist/schema/whole-block-unit.js +5 -4
- package/dist/search/document-scan.d.ts +3 -3
- package/dist/search/document-scan.js +2 -2
- package/dist/search/matcher.d.ts +1 -1
- package/dist/search/regex-executor.d.ts +5 -6
- package/dist/search/regex-executor.js +6 -8
- package/dist/search/replace.d.ts +2 -5
- package/dist/search/replace.js +2 -5
- package/dist/search/search-state.svelte.d.ts +5 -5
- package/dist/search/search-state.svelte.js +12 -16
- package/dist/selection/autoscroll.d.ts +6 -9
- package/dist/selection/block-hit-test.d.ts +16 -24
- package/dist/selection/block-hit-test.js +29 -22
- package/dist/selection/caret-doors.d.ts +15 -14
- package/dist/selection/caret-doors.js +37 -26
- package/dist/selection/caret-landing.d.ts +62 -0
- package/dist/selection/caret-landing.js +157 -0
- package/dist/selection/caret-restore.d.ts +17 -10
- package/dist/selection/caret-restore.js +10 -22
- package/dist/selection/caret-target.d.ts +30 -0
- package/dist/selection/caret-target.js +84 -0
- package/dist/selection/char-endpoint-snap.d.ts +6 -10
- package/dist/selection/char-endpoint-snap.js +8 -14
- package/dist/selection/clipboard-text.d.ts +5 -12
- package/dist/selection/clipboard-text.js +69 -172
- package/dist/selection/covered-block.d.ts +6 -8
- package/dist/selection/covered-block.js +8 -19
- package/dist/selection/cross-block/clipboard.d.ts +3 -2
- package/dist/selection/cross-block/clipboard.js +13 -4
- package/dist/selection/cross-block/dispatch.d.ts +47 -43
- package/dist/selection/cross-block/dispatch.js +12 -23
- package/dist/selection/cross-block/format-range.d.ts +18 -21
- package/dist/selection/cross-block/format-range.js +104 -103
- package/dist/selection/cross-block/format-toggle.d.ts +10 -15
- package/dist/selection/cross-block/format-toggle.js +28 -33
- package/dist/selection/cross-block/keydown.d.ts +4 -4
- package/dist/selection/cross-block/keydown.js +92 -125
- package/dist/selection/cross-block/ops.d.ts +19 -34
- package/dist/selection/cross-block/ops.js +110 -95
- package/dist/selection/cross-block/paste.d.ts +2 -3
- package/dist/selection/cross-block/paste.js +59 -96
- package/dist/selection/cross-block/pointer.d.ts +17 -15
- package/dist/selection/cross-block/pointer.js +74 -25
- package/dist/selection/cross-block/type-replace.d.ts +4 -6
- package/dist/selection/cross-block/type-replace.js +51 -134
- package/dist/selection/dead-space-caret.d.ts +19 -30
- package/dist/selection/dead-space-caret.js +70 -88
- package/dist/selection/drag-pointer.d.ts +7 -9
- package/dist/selection/drag-pointer.js +23 -33
- package/dist/selection/gap-caret.d.ts +17 -28
- package/dist/selection/gap-caret.js +14 -26
- package/dist/selection/grid-selection.d.ts +12 -0
- package/dist/selection/grid-selection.js +22 -0
- package/dist/selection/keyboard-extend.d.ts +27 -40
- package/dist/selection/keyboard-extend.js +94 -117
- package/dist/selection/multi-click.d.ts +13 -18
- package/dist/selection/multi-click.js +32 -38
- package/dist/selection/native-bridge.d.ts +29 -39
- package/dist/selection/native-bridge.js +78 -127
- package/dist/selection/nearest-block.d.ts +17 -12
- package/dist/selection/nearest-block.js +37 -18
- package/dist/selection/path-lookup.d.ts +25 -16
- package/dist/selection/path-lookup.js +101 -18
- package/dist/selection/path-math.d.ts +9 -11
- package/dist/selection/path-math.js +5 -7
- package/dist/selection/pointer-gesture.d.ts +5 -5
- package/dist/selection/pointer-gesture.js +5 -5
- package/dist/selection/pointer-session.d.ts +10 -16
- package/dist/selection/pointer-session.js +6 -7
- package/dist/selection/primitives.d.ts +64 -40
- package/dist/selection/primitives.js +57 -67
- package/dist/selection/range-coverage.d.ts +94 -0
- package/dist/selection/range-coverage.js +365 -0
- package/dist/selection/range-delete-ceremony.d.ts +28 -74
- package/dist/selection/range-delete-ceremony.js +100 -141
- package/dist/selection/range-delete-chrome.d.ts +20 -33
- package/dist/selection/range-delete-chrome.js +53 -78
- package/dist/selection/range-delete-table-coverage.d.ts +11 -25
- package/dist/selection/range-delete-table-coverage.js +42 -112
- package/dist/selection/range-delete-table.d.ts +14 -12
- package/dist/selection/range-delete-table.js +106 -310
- package/dist/selection/range-delete.d.ts +18 -23
- package/dist/selection/range-delete.js +83 -123
- package/dist/selection/round-trip-restore.d.ts +18 -0
- package/dist/selection/round-trip-restore.js +19 -0
- package/dist/selection/selection-announcer.d.ts +17 -0
- package/dist/selection/selection-announcer.js +25 -0
- package/dist/selection/selection-description.d.ts +4 -3
- package/dist/selection/selection-description.js +5 -4
- package/dist/selection/selection-drop.d.ts +34 -16
- package/dist/selection/selection-drop.js +159 -95
- package/dist/selection/selection-restore.d.ts +20 -33
- package/dist/selection/selection-restore.js +21 -44
- package/dist/selection/selection-state.svelte.d.ts +50 -42
- package/dist/selection/selection-state.svelte.js +144 -98
- package/dist/selection/shared-keydown.d.ts +22 -27
- package/dist/selection/shared-keydown.js +25 -45
- package/dist/selection/table-endpoint-snap.d.ts +17 -41
- package/dist/selection/table-endpoint-snap.js +54 -80
- package/dist/selection/table-rect-extend.d.ts +3 -6
- package/dist/selection/table-rect-extend.js +19 -14
- package/dist/styles/editor-theme.css +60 -53
- package/dist/styles/editor.css +201 -143
- package/dist/testing/conformance-core.d.ts +50 -18
- package/dist/testing/conformance-core.js +88 -50
- package/dist/testing/container-conformance.d.ts +48 -84
- package/dist/testing/container-conformance.js +159 -285
- package/dist/testing/headless-actions.d.ts +34 -19
- package/dist/testing/headless-actions.js +116 -65
- package/dist/testing/headless-block-list.svelte.d.ts +16 -0
- package/dist/testing/headless-block-list.svelte.js +22 -0
- package/dist/testing/inline-conformance.d.ts +15 -22
- package/dist/testing/inline-conformance.js +131 -148
- package/dist/testing/kind-conformance.d.ts +19 -24
- package/dist/testing/kind-conformance.js +204 -117
- package/dist/testing/kit-reading.d.ts +7 -0
- package/dist/testing/kit-reading.js +16 -0
- package/dist/testing/mount-dom-stubs.d.ts +4 -5
- package/dist/testing/mount-dom-stubs.js +8 -5
- package/dist/testing/parse-convergence.d.ts +10 -10
- package/dist/testing/parse-convergence.js +14 -49
- package/dist/testing.d.ts +13 -9
- package/dist/testing.js +28 -38
- package/dist/tree-operations/blockquote.d.ts +8 -14
- package/dist/tree-operations/blockquote.js +25 -45
- package/dist/tree-operations/chain-rebuild.d.ts +34 -25
- package/dist/tree-operations/chain-rebuild.js +115 -52
- package/dist/tree-operations/children.d.ts +5 -9
- package/dist/tree-operations/children.js +7 -11
- package/dist/tree-operations/cleanup.d.ts +6 -7
- package/dist/tree-operations/cleanup.js +14 -11
- package/dist/tree-operations/clone.js +5 -4
- package/dist/tree-operations/container-lift.d.ts +10 -5
- package/dist/tree-operations/container-lift.js +20 -14
- package/dist/tree-operations/container-offsets.d.ts +22 -0
- package/dist/tree-operations/container-offsets.js +89 -0
- package/dist/tree-operations/content-write.d.ts +52 -29
- package/dist/tree-operations/content-write.js +155 -110
- package/dist/tree-operations/index.d.ts +4 -4
- package/dist/tree-operations/index.js +4 -4
- package/dist/tree-operations/keep-one-block.d.ts +10 -0
- package/dist/tree-operations/keep-one-block.js +19 -0
- package/dist/tree-operations/leaf-range.d.ts +33 -0
- package/dist/tree-operations/leaf-range.js +67 -0
- package/dist/tree-operations/list/empty-check.d.ts +2 -3
- package/dist/tree-operations/list/empty-check.js +4 -4
- package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
- package/dist/tree-operations/list/exit-replacement.js +4 -9
- package/dist/tree-operations/list/item-partition.d.ts +2 -2
- package/dist/tree-operations/list/item-partition.js +2 -2
- package/dist/tree-operations/list/list-builders.d.ts +18 -16
- package/dist/tree-operations/list/list-builders.js +59 -30
- package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
- package/dist/tree-operations/list/ordered-markers.js +7 -16
- package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
- package/dist/tree-operations/list/reconcile-task.js +80 -23
- package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
- package/dist/tree-operations/list/sublist-separator.js +20 -27
- package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
- package/dist/tree-operations/list/task-paragraph.js +54 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
- package/dist/tree-operations/list/unwrap-merge.js +44 -79
- package/dist/tree-operations/node-ops.d.ts +30 -52
- package/dist/tree-operations/node-ops.js +152 -218
- package/dist/tree-operations/node-primitives.d.ts +44 -31
- package/dist/tree-operations/node-primitives.js +84 -60
- package/dist/tree-operations/open-tail.d.ts +25 -0
- package/dist/tree-operations/open-tail.js +100 -0
- package/dist/tree-operations/parse-block.d.ts +15 -2
- package/dist/tree-operations/parse-block.js +19 -4
- package/dist/tree-operations/paste/apply.d.ts +7 -8
- package/dist/tree-operations/paste/apply.js +33 -63
- package/dist/tree-operations/paste/body-write.d.ts +8 -6
- package/dist/tree-operations/paste/body-write.js +13 -14
- package/dist/tree-operations/paste/container-match.d.ts +7 -10
- package/dist/tree-operations/paste/container-match.js +76 -58
- package/dist/tree-operations/paste/container-paste.d.ts +3 -3
- package/dist/tree-operations/paste/container-paste.js +3 -3
- package/dist/tree-operations/paste/dispatch.d.ts +26 -29
- package/dist/tree-operations/paste/dispatch.js +68 -53
- package/dist/tree-operations/paste/focus-target.d.ts +11 -14
- package/dist/tree-operations/paste/focus-target.js +13 -18
- package/dist/tree-operations/paste/hooks.d.ts +7 -12
- package/dist/tree-operations/paste/hooks.js +49 -46
- package/dist/tree-operations/paste/line-ending.d.ts +11 -0
- package/dist/tree-operations/paste/line-ending.js +32 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
- package/dist/tree-operations/paste/list-absorb.js +17 -19
- package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
- package/dist/tree-operations/paste/list-break-out.js +24 -32
- package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
- package/dist/tree-operations/paste/parent-scope.js +9 -16
- package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
- package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
- package/dist/tree-operations/paste/paste-replacement.js +73 -42
- package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
- package/dist/tree-operations/paste/paste-transforms.js +18 -27
- package/dist/tree-operations/paste/replacement-parse.d.ts +9 -7
- package/dist/tree-operations/paste/replacement-parse.js +12 -10
- package/dist/tree-operations/paste/strategy.d.ts +1 -1
- package/dist/tree-operations/paste/strategy.js +1 -1
- package/dist/tree-operations/paste/table-slice.js +15 -10
- package/dist/tree-operations/paste-surfaces.d.ts +18 -29
- package/dist/tree-operations/paste-surfaces.js +14 -10
- package/dist/tree-operations/path-mutate.d.ts +7 -8
- package/dist/tree-operations/path-mutate.js +4 -4
- package/dist/tree-operations/reorder-unit.d.ts +4 -5
- package/dist/tree-operations/reorder-unit.js +5 -6
- package/dist/tree-operations/reorder.d.ts +7 -9
- package/dist/tree-operations/reorder.js +39 -40
- package/dist/tree-operations/settle.d.ts +42 -53
- package/dist/tree-operations/settle.js +241 -162
- package/dist/tree-operations/sharing.d.ts +5 -5
- package/dist/tree-operations/splice-many.d.ts +5 -5
- package/dist/tree-operations/splice-many.js +5 -5
- package/dist/tree-operations/stored-as.d.ts +13 -0
- package/dist/tree-operations/stored-as.js +48 -0
- package/dist/tree-operations/structural-change.d.ts +11 -15
- package/dist/tree-operations/structural-change.js +10 -14
- package/dist/tree-operations/structural-suffix.d.ts +22 -0
- package/dist/tree-operations/structural-suffix.js +61 -0
- package/dist/tree-operations/sub-table-copy.d.ts +7 -0
- package/dist/tree-operations/sub-table-copy.js +40 -36
- package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
- package/dist/tree-operations/table-grid-clipboard.js +11 -36
- package/dist/tree-operations/table-mutations.d.ts +7 -3
- package/dist/tree-operations/table-mutations.js +45 -9
- package/dist/tree-operations/unshare.d.ts +11 -15
- package/dist/tree-operations/unshare.js +15 -17
- package/dist/undo/manager.js +1 -1
- package/dist/undo/types.d.ts +2 -2
- package/docs/guide/consumer-guide.md +327 -205
- package/docs/guide/directives.md +7 -7
- package/docs/guide/plugin-api.md +253 -185
- package/docs/guide/plugin-guide.md +332 -235
- package/docs/guide/plugin-testing.md +96 -82
- package/package.json +12 -16
- package/dist/ambient/ambient-cursor.d.ts +0 -41
- package/dist/ambient/ambient-cursor.js +0 -120
- package/dist/components/blocks/code/code-paste.d.ts +0 -24
- package/dist/components/blocks/code/code-paste.js +0 -21
- package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
- package/dist/components/blocks/table/cell-clipboard.js +0 -67
- package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
- package/dist/components/blocks/text/hidden-suffix.js +0 -15
- package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
- package/dist/components/image/image-source-bytes.d.ts +0 -15
- package/dist/components/image/image-source-bytes.js +0 -80
- package/dist/cursor/content-offsets.d.ts +0 -29
- package/dist/cursor/content-offsets.js +0 -151
- package/dist/cursor/reveal-anchor.d.ts +0 -30
- package/dist/cursor/reveal-anchor.js +0 -31
- package/dist/cursor/scroll-hold.d.ts +0 -10
- package/dist/cursor/scroll-hold.js +0 -22
- package/dist/invariants/split-landing.d.ts +0 -8
- package/dist/invariants/split-landing.js +0 -15
- package/dist/tree-operations/list/terminator.d.ts +0 -17
- package/dist/tree-operations/list/terminator.js +0 -60
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -31
- package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* DOM renderer for
|
|
3
|
-
* raw.slice.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* Which of the spans minted here a mode leaves on screen is `inline/visibility.ts`.
|
|
2
|
+
* DOM renderer for inline node trees. Over a widget-free range the fragment's textContent equals
|
|
3
|
+
* raw.slice. Widgets break that by design, contributing their own text or none and carrying their
|
|
4
|
+
* source bytes on `data-source-*`, so a raw offset is recovered only through the shared DOM
|
|
5
|
+
* traversal (cursor/widget-offset.ts), never by counting textContent (G2.4). Which of the spans
|
|
6
|
+
* built here a mode leaves on screen is `inline/visibility.ts`.
|
|
8
7
|
*/
|
|
9
8
|
import { buildCoreInlineWidget } from './inline/inline-widgets';
|
|
9
|
+
import { codeSpanFence } from './inline/scan/code-spans';
|
|
10
10
|
import { isAllowedHrefScheme } from './url-policy';
|
|
11
|
+
import { firstDisplayLine } from './lines';
|
|
11
12
|
// ── Marker helpers ──────────────────────────────────────────────────────────
|
|
12
13
|
function markerSpan(text) {
|
|
13
14
|
const span = document.createElement('span');
|
|
@@ -15,6 +16,19 @@ function markerSpan(text) {
|
|
|
15
16
|
span.textContent = text;
|
|
16
17
|
return span;
|
|
17
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* A hard break's marker, wrapped in the element the stylesheet draws a return glyph on where the
|
|
21
|
+
* marker's bytes do not show: the wrapper holds no text, so every offset and copy reads the bytes.
|
|
22
|
+
*/
|
|
23
|
+
function hardBreakMark(marker) {
|
|
24
|
+
const mark = document.createElement('span');
|
|
25
|
+
mark.className = 'md-hard-break';
|
|
26
|
+
// Trailing spaces are blank even where they paint, so source mode draws the glyph for them too.
|
|
27
|
+
if (marker.textContent?.startsWith(' '))
|
|
28
|
+
mark.setAttribute('data-trailing-spaces', '');
|
|
29
|
+
mark.appendChild(marker);
|
|
30
|
+
return mark;
|
|
31
|
+
}
|
|
18
32
|
function tagConstruct(el, node, opts) {
|
|
19
33
|
if (opts.tagConstructMarkers) {
|
|
20
34
|
el.setAttribute('data-construct-start', String(node.start));
|
|
@@ -29,8 +43,8 @@ function sourceSpan(raw, node, className) {
|
|
|
29
43
|
span.textContent = raw.slice(node.start, node.end);
|
|
30
44
|
return span;
|
|
31
45
|
}
|
|
32
|
-
/** The one href
|
|
33
|
-
*
|
|
46
|
+
/** The one href path every DOM sink goes through: a consumer's rewrite, then the scheme allowlist.
|
|
47
|
+
* Undefined means render inert. */
|
|
34
48
|
export function resolveHref(opts, url) {
|
|
35
49
|
if (url === undefined)
|
|
36
50
|
return undefined;
|
|
@@ -43,15 +57,9 @@ export function resolveHref(opts, url) {
|
|
|
43
57
|
// ── Inline code ─────────────────────────────────────────────────────────────
|
|
44
58
|
function renderInlineCode(node, raw, opts) {
|
|
45
59
|
const frag = document.createDocumentFragment();
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
// exactly once (G2.4).
|
|
50
|
-
const fenceLimit = node.start + Math.floor((node.end - node.start) / 2);
|
|
51
|
-
let contentStart = node.start;
|
|
52
|
-
while (contentStart < fenceLimit && raw[contentStart] === '`')
|
|
53
|
-
contentStart++;
|
|
54
|
-
const contentEnd = node.end - (contentStart - node.start);
|
|
60
|
+
const fence = codeSpanFence(node);
|
|
61
|
+
const contentStart = node.start + fence;
|
|
62
|
+
const contentEnd = node.end - fence;
|
|
55
63
|
frag.appendChild(tagConstruct(markerSpan(raw.slice(node.start, contentStart)), node, opts));
|
|
56
64
|
const code = document.createElement('code');
|
|
57
65
|
code.className = 'inline-code-content';
|
|
@@ -90,9 +98,8 @@ function openWrapped(node, raw, tag, opts, container) {
|
|
|
90
98
|
};
|
|
91
99
|
}
|
|
92
100
|
// ── Links ────────────────────────────────────────────────────────────────────
|
|
93
|
-
// Markers come from raw.slice
|
|
94
|
-
//
|
|
95
|
-
// does, and a search running past the node would render the NEXT node's source (G2.4).
|
|
101
|
+
// Markers come from raw.slice, since the parsed url/title can differ from the source bytes. Split
|
|
102
|
+
// points clamp to node.end: a plugin-made node need not carry GFM's own link bytes (G2.4).
|
|
96
103
|
function openLink(node, raw, opts, container) {
|
|
97
104
|
const children = node.children ?? [];
|
|
98
105
|
if (children.length === 0) {
|
|
@@ -107,7 +114,7 @@ function openLink(node, raw, opts, container) {
|
|
|
107
114
|
}
|
|
108
115
|
const lastChild = children[children.length - 1];
|
|
109
116
|
// The close marker splits into the text bracket's `]` and the trailing marker. Reference forms
|
|
110
|
-
// get their own `md-ref-label` class so CSS can
|
|
117
|
+
// get their own `md-ref-label` class so CSS can style the label as metadata.
|
|
111
118
|
const closingTextBracket = lastChild.end < node.end && raw[lastChild.end] === ']'
|
|
112
119
|
? raw.slice(lastChild.end, lastChild.end + 1)
|
|
113
120
|
: '';
|
|
@@ -150,11 +157,8 @@ function openLink(node, raw, opts, container) {
|
|
|
150
157
|
};
|
|
151
158
|
}
|
|
152
159
|
// ── Autolinks ────────────────────────────────────────────────────────────────
|
|
153
|
-
/**
|
|
154
|
-
*
|
|
155
|
-
* the bare URL/www/email forms are url text throughout. Read off the raw bytes, never `node.url`:
|
|
156
|
-
* the bare forms synthesize a url (`http://`, `mailto:`) that is not a slice of the source.
|
|
157
|
-
*/
|
|
160
|
+
/** The angle form's `<`/`>` render as markers the mode CSS can hide. Read off the raw bytes, never
|
|
161
|
+
* `node.url`, which a bare form may synthesize (`http://`, `mailto:`). */
|
|
158
162
|
function appendAutolink(node, raw, opts, container) {
|
|
159
163
|
const href = resolveHref(opts, node.url);
|
|
160
164
|
const el = document.createElement(href !== undefined ? 'a' : 'span');
|
|
@@ -180,9 +184,8 @@ function appendImageSource(node, raw, opts, container) {
|
|
|
180
184
|
const altText = node.alt ?? '';
|
|
181
185
|
const altStart = node.start + 2;
|
|
182
186
|
const altEnd = altStart + altText.length;
|
|
183
|
-
// `alt` locates the split and
|
|
184
|
-
//
|
|
185
|
-
// falls back to unmarked source, since a construct nobody can decompose would collapse whole.
|
|
187
|
+
// `alt` only locates the split, and only where it is literally those bytes, since a plugin-made
|
|
188
|
+
// image need not be GFM's; an unlocatable one falls back to unmarked source.
|
|
186
189
|
if (altEnd > node.end || !raw.startsWith(altText, altStart)) {
|
|
187
190
|
container.appendChild(document.createTextNode(raw.slice(node.start, node.end)));
|
|
188
191
|
return;
|
|
@@ -211,16 +214,10 @@ function renderNode(node, raw, opts, container) {
|
|
|
211
214
|
// A text node carries the line ending so textContent equals raw byte-for-byte;
|
|
212
215
|
// a `<br>` would diverge across browsers.
|
|
213
216
|
const breakRaw = raw.slice(node.start, node.end);
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
// slice from the end and drop bytes.
|
|
217
|
-
const lineEndingStart = nlIdx === -1
|
|
218
|
-
? breakRaw.length
|
|
219
|
-
: nlIdx > 0 && breakRaw[nlIdx - 1] === '\r'
|
|
220
|
-
? nlIdx - 1
|
|
221
|
-
: nlIdx;
|
|
217
|
+
// The marker is the break's first line; a node with no line ending is all marker.
|
|
218
|
+
const lineEndingStart = firstDisplayLine(breakRaw).text.length;
|
|
222
219
|
if (lineEndingStart > 0) {
|
|
223
|
-
container.appendChild(markerSpan(breakRaw.slice(0, lineEndingStart)));
|
|
220
|
+
container.appendChild(hardBreakMark(markerSpan(breakRaw.slice(0, lineEndingStart))));
|
|
224
221
|
}
|
|
225
222
|
container.appendChild(document.createTextNode(breakRaw.slice(lineEndingStart)));
|
|
226
223
|
return null;
|
|
@@ -255,10 +252,9 @@ function renderNode(node, raw, opts, container) {
|
|
|
255
252
|
case 'entityReference':
|
|
256
253
|
case 'rawHtml':
|
|
257
254
|
default:
|
|
258
|
-
// An invisible entity
|
|
259
|
-
//
|
|
260
|
-
|
|
261
|
-
container.appendChild(buildCoreInlineWidget(node, raw, opts.buildPortalWidget) ??
|
|
255
|
+
// An invisible entity renders no widget and keeps its literal-source span, as does any
|
|
256
|
+
// kind the registry does not own, so every byte round-trips.
|
|
257
|
+
container.appendChild(buildCoreInlineWidget(node, raw, opts.buildPortalWidget, opts.grammar) ??
|
|
262
258
|
sourceSpan(raw, node, node.kind === 'entityReference'
|
|
263
259
|
? 'md-entity'
|
|
264
260
|
: node.kind === 'rawHtml'
|
|
@@ -267,7 +263,7 @@ function renderNode(node, raw, opts, container) {
|
|
|
267
263
|
return null;
|
|
268
264
|
}
|
|
269
265
|
}
|
|
270
|
-
export function renderInlineNodes(nodes, raw, opts
|
|
266
|
+
export function renderInlineNodes(nodes, raw, opts) {
|
|
271
267
|
// Iterative: nesting depth is input-controlled, so per-level recursion overflows the stack and
|
|
272
268
|
// strands the block in the unhealable fallback. `scanChildren` is iterative for the same reason.
|
|
273
269
|
const root = {
|
|
@@ -288,23 +284,21 @@ export function renderInlineNodes(nodes, raw, opts = {}) {
|
|
|
288
284
|
if (child !== null)
|
|
289
285
|
stack.push(child);
|
|
290
286
|
}
|
|
291
|
-
if (opts.
|
|
292
|
-
paintPendingBreak(nodes, raw, root.content);
|
|
287
|
+
if (opts.pendingBreakAt !== undefined) {
|
|
288
|
+
paintPendingBreak(nodes, raw, opts.pendingBreakAt, root.content);
|
|
289
|
+
}
|
|
293
290
|
return root.content;
|
|
294
291
|
}
|
|
295
|
-
/**
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
*
|
|
299
|
-
|
|
300
|
-
* textContent, so G1.28 holds; the walk seats offset `length` after the first anchor.
|
|
301
|
-
*/
|
|
302
|
-
function paintPendingBreak(nodes, raw, frag) {
|
|
292
|
+
/** The first of a pending hard break's two anchors, where the new line starts. */
|
|
293
|
+
export const PENDING_BREAK_ANCHOR = 'br[data-caret-anchor="break"]';
|
|
294
|
+
/** A `\` ending the block is a hard break the scanner reads as text until its next line exists;
|
|
295
|
+
* a hidden marker plus two `br` anchors show that line without adding text. */
|
|
296
|
+
function paintPendingBreak(nodes, raw, contentEnd, frag) {
|
|
303
297
|
const last = nodes[nodes.length - 1];
|
|
304
298
|
if (!last || last.kind !== 'text' || raw[last.end - 1] !== '\\')
|
|
305
299
|
return;
|
|
306
|
-
|
|
307
|
-
if (
|
|
300
|
+
// Only the block's own structure may follow the backslash: its line ending, or an underline.
|
|
301
|
+
if (last.end !== contentEnd)
|
|
308
302
|
return;
|
|
309
303
|
const tail = frag.lastChild;
|
|
310
304
|
if (!tail || tail.nodeType !== Node.TEXT_NODE || !tail.textContent?.endsWith('\\'))
|
|
@@ -322,11 +316,8 @@ function paintPendingBreak(nodes, raw, frag) {
|
|
|
322
316
|
frag.appendChild(anchor);
|
|
323
317
|
}
|
|
324
318
|
}
|
|
325
|
-
/**
|
|
326
|
-
*
|
|
327
|
-
* matches the last node. Model-layer, touching no DOM: the DOM counterpart is
|
|
328
|
-
* `findDomTextOffsetTarget` in cursor/widget-offset.ts.
|
|
329
|
-
*/
|
|
319
|
+
/** The leaf containing `offset`, preferring the right node at a boundary; `offset === end` matches
|
|
320
|
+
* only the last node. The DOM side is `findDomTextOffsetTarget` in `cursor/widget-offset.ts`. */
|
|
330
321
|
export function findNodeAtOffset(nodes, offset) {
|
|
331
322
|
// Descent never backtracks, the first containing sibling winning its level, so the answer is
|
|
332
323
|
// the deepest containing node.
|
package/dist/core/lines.d.ts
CHANGED
|
@@ -1,33 +1,63 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Line splitting that keeps each line's ending and offsets, and the line-ending rule: a line the
|
|
3
|
+
* editor writes takes the document's ending ({@link documentLineEnding}), and per-line work reads
|
|
4
|
+
* each line's text without its ending ({@link displayLines}). Also GFM's whitespace, the one
|
|
5
|
+
* reading of blank and trimmed text for the parser and the editing code alike.
|
|
6
|
+
*/
|
|
7
|
+
import type { DocumentView } from './node-views';
|
|
8
|
+
export type LineEnding = '\n' | '\r\n';
|
|
9
|
+
export declare function isBlankLine(text: string): boolean;
|
|
10
|
+
/** Whether `text` is blank lines only: spaces, tabs and line endings. The emptiness test for any
|
|
11
|
+
* block's text, never `String.trim()`, which also drops a non-breaking space. */
|
|
12
|
+
export declare function isBlankText(text: string): boolean;
|
|
13
|
+
/** A line ending a pattern admits at the end of a line's text: the document's last line can end
|
|
14
|
+
* in a lone `\r`, which the line splitter leaves in the text, and a plugin may pass an ending. */
|
|
15
|
+
export declare const OPTIONAL_LINE_ENDING = "(?:\\r\\n?|\\n)?";
|
|
16
|
+
/** GFM §2.1's whitespace character: space, tab, LF, VT, FF, CR. Narrower than JS `\s`. */
|
|
17
|
+
export declare const WHITESPACE_CHARS = " \\t\\n\\v\\f\\r";
|
|
18
|
+
export declare const WHITESPACE_CLASS = "[ \\t\\n\\v\\f\\r]";
|
|
19
|
+
export declare const WHITESPACE_RUN: RegExp;
|
|
20
|
+
export declare function isWhitespaceChar(ch: string | undefined): boolean;
|
|
21
|
+
/** `text` without GFM whitespace at either end: what the spec means by "trimmed". */
|
|
22
|
+
export declare function trimWhitespace(text: string): string;
|
|
2
23
|
/** Length of `raw` excluding any trailing line ending (LF or CRLF). */
|
|
3
24
|
export declare function displayLength(raw: string): number;
|
|
4
25
|
export declare function trimTrailingLineEnding(raw: string): string;
|
|
26
|
+
/** The ending `raw` actually carries, empty when it has none: {@link trimTrailingLineEnding}'s
|
|
27
|
+
* complement, for code reattaching a block's own bytes. */
|
|
28
|
+
export declare function ownTrailingLineEnding(raw: string): '' | LineEnding;
|
|
5
29
|
/**
|
|
6
|
-
* The ending `
|
|
7
|
-
*
|
|
8
|
-
* DOCUMENT uses, so a site reattaching a block's own bytes reads this one (G4.20).
|
|
30
|
+
* The ending every line the editor writes into `doc` takes: the document's first line break, else
|
|
31
|
+
* LF. Read afresh on each call, which scans only up to that first break.
|
|
9
32
|
*/
|
|
10
|
-
export declare function
|
|
33
|
+
export declare function documentLineEnding(doc: DocumentView): LineEnding;
|
|
34
|
+
/** The first line break in `text`, or null when it holds none. In a document with one ending,
|
|
35
|
+
* any break in a block's own bytes is the document's. */
|
|
36
|
+
export declare function firstLineEnding(text: string): LineEnding | null;
|
|
37
|
+
/** The ending `raw` closes with, else `fallback`, usually the document's ending: a block with no
|
|
38
|
+
* ending of its own is the document's last line. */
|
|
39
|
+
export declare function trailingLineEnding(raw: string, fallback: LineEnding): LineEnding;
|
|
40
|
+
/** `text` closed with `ending` when its last line is open: a slice cut from a block would
|
|
41
|
+
* otherwise run into whatever follows it once the bytes stand alone. */
|
|
42
|
+
export declare function terminateLine(text: string, ending: LineEnding): string;
|
|
43
|
+
/** Whether the last line of `text` holds only spaces and tabs, its ending aside. */
|
|
44
|
+
export declare function endsInBlankLine(text: string): boolean;
|
|
45
|
+
/** The first half of a UTF-16 surrogate pair, as a code unit (`charCodeAt`). */
|
|
46
|
+
export declare function isHighSurrogate(unit: number): boolean;
|
|
47
|
+
/** The second half of a UTF-16 surrogate pair, as a code unit (`charCodeAt`). */
|
|
48
|
+
export declare function isLowSurrogate(unit: number): boolean;
|
|
11
49
|
/**
|
|
12
|
-
* `offset` moved off the interior of a surrogate pair, back to the pair's
|
|
13
|
-
*
|
|
14
|
-
* surrogate — bytes no UTF-8 encoder round-trips (`TextEncoder` yields U+FFFD) and no inverse
|
|
15
|
-
* gesture restores. Scalars only: a grapheme cluster is a rendering question, and answering it
|
|
16
|
-
* here would move a caret the author placed between two legitimately separate scalars.
|
|
50
|
+
* `offset` moved off the interior of a surrogate pair, back to the pair's start: a cut there
|
|
51
|
+
* leaves a lone surrogate, which no UTF-8 encoder round-trips. Code points only, not graphemes.
|
|
17
52
|
*/
|
|
18
53
|
export declare function snapToScalarBoundary(raw: string, offset: number): number;
|
|
19
|
-
/**
|
|
20
|
-
*
|
|
21
|
-
* here (G4.20), so a CRLF-authored block keeps its ending and an unterminated one gets `\n`.
|
|
22
|
-
*/
|
|
23
|
-
export declare function trailingLineEnding(raw: string): '\n' | '\r\n';
|
|
24
|
-
/**
|
|
25
|
-
* Keep a truncated slice line-terminated, borrowing `sourceRaw`'s own ending (G4.20). A slice
|
|
26
|
-
* whose last line stays open swallows whatever follows it once the bytes stand alone.
|
|
27
|
-
*/
|
|
28
|
-
export declare function terminateLine(text: string, sourceRaw: string): string;
|
|
29
|
-
/** Paste entry points funnel through here so Windows CRLF does not leak into a note. */
|
|
54
|
+
/** Every paste entry point goes through here, so the paste rules read LF whatever the clipboard
|
|
55
|
+
* held; the paste writes the document's own ending back. */
|
|
30
56
|
export declare function normalizeLineEndings(text: string): string;
|
|
57
|
+
/** `text` with every line break written as `ending`: how LF text joins a document's own lines. */
|
|
58
|
+
export declare function withLineEnding(text: string, ending: LineEnding): string;
|
|
59
|
+
/** The line break starting at `offset` in `text`, empty when none starts there. */
|
|
60
|
+
export declare function lineEndingAt(text: string, offset: number): '' | LineEnding;
|
|
31
61
|
export interface ParsedLine {
|
|
32
62
|
raw: string;
|
|
33
63
|
text: string;
|
|
@@ -36,9 +66,20 @@ export interface ParsedLine {
|
|
|
36
66
|
end: number;
|
|
37
67
|
}
|
|
38
68
|
export declare function splitLines(source: string): ParsedLine[];
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
69
|
+
export interface DisplayLine {
|
|
70
|
+
text: string;
|
|
71
|
+
ending: '' | LineEnding;
|
|
72
|
+
}
|
|
73
|
+
/** A block's display as lines, each apart from its ending. A display always has a last line, empty
|
|
74
|
+
* after a final break, and {@link joinDisplayLines} puts the bytes back exactly. */
|
|
75
|
+
export declare function displayLines(display: string): DisplayLine[];
|
|
76
|
+
/** {@link displayLines}' first line, read without splitting the rest of `text`. */
|
|
77
|
+
export declare function firstDisplayLine(text: string): DisplayLine;
|
|
78
|
+
export declare function joinDisplayLines(lines: readonly DisplayLine[]): string;
|
|
79
|
+
/** Columns of leading indentation, a tab advancing to the next multiple of four (GFM §2.2). */
|
|
80
|
+
export declare function indentColumns(text: string): number;
|
|
81
|
+
/** `text` with up to `columns` columns of indentation removed. A tab the cut splits is written as
|
|
82
|
+
* the spaces it spans, since every later reparse reads the child's raw from column zero. */
|
|
83
|
+
export declare function stripIndentColumns(text: string, columns: number): string;
|
|
84
|
+
/** A `ParsedLine[]` rebuilt after a per-line strip, offsets recomputed from the stripped bytes. */
|
|
44
85
|
export declare function remapStrippedLines(lines: ParsedLine[], stripLine: (line: ParsedLine, index: number) => string): ParsedLine[];
|
package/dist/core/lines.js
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Line splitting that keeps each line's ending and offsets, and the line-ending rule: a line the
|
|
3
|
+
* editor writes takes the document's ending ({@link documentLineEnding}), and per-line work reads
|
|
4
|
+
* each line's text without its ending ({@link displayLines}). Also GFM's whitespace, the one
|
|
5
|
+
* reading of blank and trimmed text for the parser and the editing code alike.
|
|
6
|
+
*/
|
|
7
|
+
// ── Markdown whitespace ──────────────────────────────────────────────────────
|
|
8
|
+
/** GFM §2.1: a blank line holds only spaces and tabs; a non-breaking space is content. */
|
|
9
|
+
const NON_BLANK_CHAR = /[^ \t]/;
|
|
10
|
+
export function isBlankLine(text) {
|
|
11
|
+
return !NON_BLANK_CHAR.test(text);
|
|
12
|
+
}
|
|
13
|
+
const BLANK_TEXT = /^(?:[ \t]|\r?\n)*$/;
|
|
14
|
+
/** Whether `text` is blank lines only: spaces, tabs and line endings. The emptiness test for any
|
|
15
|
+
* block's text, never `String.trim()`, which also drops a non-breaking space. */
|
|
16
|
+
export function isBlankText(text) {
|
|
17
|
+
return BLANK_TEXT.test(text);
|
|
18
|
+
}
|
|
19
|
+
/** A line ending a pattern admits at the end of a line's text: the document's last line can end
|
|
20
|
+
* in a lone `\r`, which the line splitter leaves in the text, and a plugin may pass an ending. */
|
|
21
|
+
export const OPTIONAL_LINE_ENDING = '(?:\\r\\n?|\\n)?';
|
|
22
|
+
/** GFM §2.1's whitespace character: space, tab, LF, VT, FF, CR. Narrower than JS `\s`. */
|
|
23
|
+
export const WHITESPACE_CHARS = ' \\t\\n\\v\\f\\r';
|
|
24
|
+
export const WHITESPACE_CLASS = `[${WHITESPACE_CHARS}]`;
|
|
25
|
+
export const WHITESPACE_RUN = new RegExp(`${WHITESPACE_CLASS}+`);
|
|
26
|
+
const WHITESPACE_CHAR = new RegExp(`^${WHITESPACE_CLASS}$`);
|
|
27
|
+
const EDGE_WHITESPACE = new RegExp(`^${WHITESPACE_CLASS}+|${WHITESPACE_CLASS}+$`, 'g');
|
|
28
|
+
export function isWhitespaceChar(ch) {
|
|
29
|
+
return ch !== undefined && WHITESPACE_CHAR.test(ch);
|
|
30
|
+
}
|
|
31
|
+
/** `text` without GFM whitespace at either end: what the spec means by "trimmed". */
|
|
32
|
+
export function trimWhitespace(text) {
|
|
33
|
+
return text.replace(EDGE_WHITESPACE, '');
|
|
34
|
+
}
|
|
2
35
|
/** Length of `raw` excluding any trailing line ending (LF or CRLF). */
|
|
3
36
|
export function displayLength(raw) {
|
|
4
37
|
if (raw.endsWith('\r\n'))
|
|
@@ -10,46 +43,96 @@ export function displayLength(raw) {
|
|
|
10
43
|
export function trimTrailingLineEnding(raw) {
|
|
11
44
|
return raw.slice(0, displayLength(raw));
|
|
12
45
|
}
|
|
13
|
-
/**
|
|
14
|
-
*
|
|
15
|
-
* partitioning `raw`. What {@link trailingLineEnding} answers instead is which ending the
|
|
16
|
-
* DOCUMENT uses, so a site reattaching a block's own bytes reads this one (G4.20).
|
|
17
|
-
*/
|
|
46
|
+
/** The ending `raw` actually carries, empty when it has none: {@link trimTrailingLineEnding}'s
|
|
47
|
+
* complement, for code reattaching a block's own bytes. */
|
|
18
48
|
export function ownTrailingLineEnding(raw) {
|
|
19
49
|
return raw.slice(displayLength(raw));
|
|
20
50
|
}
|
|
51
|
+
// ── The document's line ending ───────────────────────────────────────────────
|
|
21
52
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* surrogate — bytes no UTF-8 encoder round-trips (`TextEncoder` yields U+FFFD) and no inverse
|
|
25
|
-
* gesture restores. Scalars only: a grapheme cluster is a rendering question, and answering it
|
|
26
|
-
* here would move a caret the author placed between two legitimately separate scalars.
|
|
53
|
+
* The ending every line the editor writes into `doc` takes: the document's first line break, else
|
|
54
|
+
* LF. Read afresh on each call, which scans only up to that first break.
|
|
27
55
|
*/
|
|
28
|
-
export function
|
|
29
|
-
|
|
30
|
-
return offset;
|
|
31
|
-
const splitsPair = (raw.charCodeAt(offset - 1) & 0xfc00) === 0xd800 &&
|
|
32
|
-
(raw.charCodeAt(offset) & 0xfc00) === 0xdc00;
|
|
33
|
-
return splitsPair ? offset - 1 : offset;
|
|
56
|
+
export function documentLineEnding(doc) {
|
|
57
|
+
return firstDocumentBreak(doc) ?? '\n';
|
|
34
58
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
59
|
+
function firstDocumentBreak(doc) {
|
|
60
|
+
let before = '';
|
|
61
|
+
for (const chunk of documentChunks(doc)) {
|
|
62
|
+
const at = chunk.indexOf('\n');
|
|
63
|
+
if (at >= 0)
|
|
64
|
+
return (at > 0 ? chunk[at - 1] : before) === '\r' ? '\r\n' : '\n';
|
|
65
|
+
if (chunk !== '')
|
|
66
|
+
before = chunk[chunk.length - 1];
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
function* documentChunks(doc) {
|
|
71
|
+
yield doc.prefix;
|
|
72
|
+
for (const child of doc.children) {
|
|
73
|
+
yield child.leadingTrivia ?? '';
|
|
74
|
+
yield child.raw;
|
|
75
|
+
}
|
|
76
|
+
yield doc.suffix;
|
|
77
|
+
}
|
|
78
|
+
/** The first line break in `text`, or null when it holds none. In a document with one ending,
|
|
79
|
+
* any break in a block's own bytes is the document's. */
|
|
80
|
+
export function firstLineEnding(text) {
|
|
81
|
+
const at = text.indexOf('\n');
|
|
82
|
+
if (at < 0)
|
|
83
|
+
return null;
|
|
84
|
+
return text[at - 1] === '\r' ? '\r\n' : '\n';
|
|
85
|
+
}
|
|
86
|
+
/** The ending `raw` closes with, else `fallback`, usually the document's ending: a block with no
|
|
87
|
+
* ending of its own is the document's last line. */
|
|
88
|
+
export function trailingLineEnding(raw, fallback) {
|
|
89
|
+
return ownTrailingLineEnding(raw) || fallback;
|
|
90
|
+
}
|
|
91
|
+
/** `text` closed with `ending` when its last line is open: a slice cut from a block would
|
|
92
|
+
* otherwise run into whatever follows it once the bytes stand alone. */
|
|
93
|
+
export function terminateLine(text, ending) {
|
|
94
|
+
return text.endsWith('\n') ? text : text + ending;
|
|
95
|
+
}
|
|
96
|
+
/** Whether the last line of `text` holds only spaces and tabs, its ending aside. */
|
|
97
|
+
export function endsInBlankLine(text) {
|
|
98
|
+
const body = trimTrailingLineEnding(text);
|
|
99
|
+
return isBlankLine(body.slice(body.lastIndexOf('\n') + 1));
|
|
100
|
+
}
|
|
101
|
+
// ── Scalars ──────────────────────────────────────────────────────────────────
|
|
102
|
+
/** The first half of a UTF-16 surrogate pair, as a code unit (`charCodeAt`). */
|
|
103
|
+
export function isHighSurrogate(unit) {
|
|
104
|
+
return unit >= 0xd800 && unit <= 0xdbff;
|
|
105
|
+
}
|
|
106
|
+
/** The second half of a UTF-16 surrogate pair, as a code unit (`charCodeAt`). */
|
|
107
|
+
export function isLowSurrogate(unit) {
|
|
108
|
+
return unit >= 0xdc00 && unit <= 0xdfff;
|
|
41
109
|
}
|
|
42
110
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
111
|
+
* `offset` moved off the interior of a surrogate pair, back to the pair's start: a cut there
|
|
112
|
+
* leaves a lone surrogate, which no UTF-8 encoder round-trips. Code points only, not graphemes.
|
|
45
113
|
*/
|
|
46
|
-
export function
|
|
47
|
-
|
|
114
|
+
export function snapToScalarBoundary(raw, offset) {
|
|
115
|
+
if (offset <= 0 || offset >= raw.length)
|
|
116
|
+
return offset;
|
|
117
|
+
const splitsPair = isHighSurrogate(raw.charCodeAt(offset - 1)) && isLowSurrogate(raw.charCodeAt(offset));
|
|
118
|
+
return splitsPair ? offset - 1 : offset;
|
|
48
119
|
}
|
|
49
|
-
|
|
120
|
+
// ── Splitting ────────────────────────────────────────────────────────────────
|
|
121
|
+
/** Every paste entry point goes through here, so the paste rules read LF whatever the clipboard
|
|
122
|
+
* held; the paste writes the document's own ending back. */
|
|
50
123
|
export function normalizeLineEndings(text) {
|
|
51
124
|
return text.replace(/\r\n/g, '\n');
|
|
52
125
|
}
|
|
126
|
+
/** `text` with every line break written as `ending`: how LF text joins a document's own lines. */
|
|
127
|
+
export function withLineEnding(text, ending) {
|
|
128
|
+
return text.replace(/\r?\n/g, ending);
|
|
129
|
+
}
|
|
130
|
+
/** The line break starting at `offset` in `text`, empty when none starts there. */
|
|
131
|
+
export function lineEndingAt(text, offset) {
|
|
132
|
+
if (text[offset] === '\n')
|
|
133
|
+
return '\n';
|
|
134
|
+
return text.startsWith('\r\n', offset) ? '\r\n' : '';
|
|
135
|
+
}
|
|
53
136
|
export function splitLines(source) {
|
|
54
137
|
const lines = [];
|
|
55
138
|
let start = 0;
|
|
@@ -68,11 +151,59 @@ export function splitLines(source) {
|
|
|
68
151
|
}
|
|
69
152
|
return lines;
|
|
70
153
|
}
|
|
71
|
-
/**
|
|
72
|
-
*
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
154
|
+
/** A block's display as lines, each apart from its ending. A display always has a last line, empty
|
|
155
|
+
* after a final break, and {@link joinDisplayLines} puts the bytes back exactly. */
|
|
156
|
+
export function displayLines(display) {
|
|
157
|
+
const lines = splitLines(display).map((line) => ({
|
|
158
|
+
text: line.text,
|
|
159
|
+
ending: line.lineEnding
|
|
160
|
+
}));
|
|
161
|
+
if (display === '' || display.endsWith('\n'))
|
|
162
|
+
lines.push({ text: '', ending: '' });
|
|
163
|
+
return lines;
|
|
164
|
+
}
|
|
165
|
+
/** {@link displayLines}' first line, read without splitting the rest of `text`. */
|
|
166
|
+
export function firstDisplayLine(text) {
|
|
167
|
+
const at = text.indexOf('\n');
|
|
168
|
+
return displayLines(at < 0 ? text : text.slice(0, at + 1))[0];
|
|
169
|
+
}
|
|
170
|
+
export function joinDisplayLines(lines) {
|
|
171
|
+
return lines.map((line) => line.text + line.ending).join('');
|
|
172
|
+
}
|
|
173
|
+
// ── Indentation ──────────────────────────────────────────────────────────────
|
|
174
|
+
/** Columns of leading indentation, a tab advancing to the next multiple of four (GFM §2.2). */
|
|
175
|
+
export function indentColumns(text) {
|
|
176
|
+
let col = 0;
|
|
177
|
+
for (const char of text) {
|
|
178
|
+
if (char === ' ')
|
|
179
|
+
col++;
|
|
180
|
+
else if (char === '\t')
|
|
181
|
+
col += 4 - (col % 4);
|
|
182
|
+
else
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
return col;
|
|
186
|
+
}
|
|
187
|
+
/** `text` with up to `columns` columns of indentation removed. A tab the cut splits is written as
|
|
188
|
+
* the spaces it spans, since every later reparse reads the child's raw from column zero. */
|
|
189
|
+
export function stripIndentColumns(text, columns) {
|
|
190
|
+
const leadLength = text.length - text.replace(/^[ \t]+/, '').length;
|
|
191
|
+
let col = 0;
|
|
192
|
+
let cut = 0;
|
|
193
|
+
while (cut < leadLength) {
|
|
194
|
+
const width = text[cut] === '\t' ? 4 - (col % 4) : 1;
|
|
195
|
+
if (col + width > columns)
|
|
196
|
+
break;
|
|
197
|
+
col += width;
|
|
198
|
+
cut++;
|
|
199
|
+
}
|
|
200
|
+
const straddles = cut < leadLength && col < columns;
|
|
201
|
+
const tabShifts = columns % 4 !== 0 && text.slice(cut, leadLength).includes('\t');
|
|
202
|
+
if (!straddles && !tabShifts)
|
|
203
|
+
return text.slice(cut);
|
|
204
|
+
return ' '.repeat(indentColumns(text) - columns) + text.slice(leadLength);
|
|
205
|
+
}
|
|
206
|
+
/** A `ParsedLine[]` rebuilt after a per-line strip, offsets recomputed from the stripped bytes. */
|
|
76
207
|
export function remapStrippedLines(lines, stripLine) {
|
|
77
208
|
let offset = 0;
|
|
78
209
|
return lines.map((line, index) => {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a node's metadata is what a parse of its own bytes derives, key by key: the one compare
|
|
3
|
+
* behind every check and re-read that holds metadata to its bytes.
|
|
4
|
+
*/
|
|
5
|
+
import type { NodeView } from './node-views';
|
|
6
|
+
/** The first metadata key whose live value differs from the reparse's, described, or null. */
|
|
7
|
+
export declare function describeMetadataDivergence(live: NodeView, reparsed: NodeView): string | null;
|
|
8
|
+
/** A value as a failure message quotes it: strings quoted, everything else as `String` prints it. */
|
|
9
|
+
export declare function showValue(value: unknown): string;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a node's metadata is what a parse of its own bytes derives, key by key: the one compare
|
|
3
|
+
* behind every check and re-read that holds metadata to its bytes.
|
|
4
|
+
*/
|
|
5
|
+
/** The first metadata key whose live value differs from the reparse's, described, or null. */
|
|
6
|
+
export function describeMetadataDivergence(live, reparsed) {
|
|
7
|
+
const liveMeta = (live.metadata ?? {});
|
|
8
|
+
const reMeta = (reparsed.metadata ?? {});
|
|
9
|
+
for (const key of new Set([...Object.keys(liveMeta), ...Object.keys(reMeta)])) {
|
|
10
|
+
if (!valuesEqual(liveMeta[key], reMeta[key])) {
|
|
11
|
+
return `${live.kind}.${key}: live ${showValue(liveMeta[key])} != reparsed ${showValue(reMeta[key])}`;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
/** A value as a failure message quotes it: strings quoted, everything else as `String` prints it. */
|
|
17
|
+
export function showValue(value) {
|
|
18
|
+
return typeof value === 'string' ? JSON.stringify(value) : String(value);
|
|
19
|
+
}
|
|
20
|
+
function valuesEqual(a, b) {
|
|
21
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
22
|
+
return a.length === b.length && a.every((v, i) => v === b[i]);
|
|
23
|
+
}
|
|
24
|
+
return a === b;
|
|
25
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* editor bookkeeping, not round-trip bytes, and stay writable
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* A node shared with an undo snapshot is read-only on its serialized bytes (G1.9), and a view
|
|
3
|
+
* types that: every byte-carrying field is frozen. `childIds`, `childSpans` and `ownerEpoch` are
|
|
4
|
+
* editor bookkeeping, not round-trip bytes, and stay writable. The only casts from a view back to
|
|
5
|
+
* a mutable node are the copy-before-write in `tree-operations/unshare.ts` and the commit
|
|
6
|
+
* sequence's owned views (G4.13); a lint test holds that line everywhere else.
|
|
7
7
|
*/
|
|
8
8
|
import type { CstNode, Document } from './nodes';
|
|
9
9
|
type BytesWritableKey = 'childIds' | 'childSpans' | 'ownerEpoch';
|
|
@@ -15,7 +15,8 @@ export type BytesView<T> = T extends string | number | boolean | bigint | symbol
|
|
|
15
15
|
};
|
|
16
16
|
export type NodeView = BytesView<CstNode>;
|
|
17
17
|
export type DocumentView = BytesView<Document>;
|
|
18
|
-
/** A
|
|
18
|
+
/** A root the copy-before-write in `tree-operations/unshare.ts` accepts: the live document or a
|
|
19
|
+
* caller-owned children wrapper. */
|
|
19
20
|
export type NodeParentView = {
|
|
20
21
|
readonly children: readonly NodeView[];
|
|
21
22
|
};
|
package/dist/core/node-views.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* editor bookkeeping, not round-trip bytes, and stay writable
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* A node shared with an undo snapshot is read-only on its serialized bytes (G1.9), and a view
|
|
3
|
+
* types that: every byte-carrying field is frozen. `childIds`, `childSpans` and `ownerEpoch` are
|
|
4
|
+
* editor bookkeeping, not round-trip bytes, and stay writable. The only casts from a view back to
|
|
5
|
+
* a mutable node are the copy-before-write in `tree-operations/unshare.ts` and the commit
|
|
6
|
+
* sequence's owned views (G4.13); a lint test holds that line everywhere else.
|
|
7
7
|
*/
|
|
8
8
|
export {};
|