@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
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A live rewrite's candidate read back where it will be stored (`docs/design/live-mode.md` § 2):
|
|
3
|
+
* through the position's write rules and read at its slot, as a reload reads it there. Every
|
|
4
|
+
* rewrite that removes bytes reads its candidate through here.
|
|
5
|
+
*/
|
|
6
|
+
import { getContentRange, isProseKind, readInline } from '../index';
|
|
7
|
+
import { CONTENT_VISIBILITY, renderedText } from '../visibility';
|
|
8
|
+
import { isBlankText, ownTrailingLineEnding } from '../../lines';
|
|
9
|
+
/** `bytes` as `store` keeps them: exactly one prose block at the slot, or the inline surface's
|
|
10
|
+
* text. Null where the reload would read anything else. */
|
|
11
|
+
export function readBack(bytes, store) {
|
|
12
|
+
const { resolver, grammar } = store.reading;
|
|
13
|
+
const raw = store.stored(bytes);
|
|
14
|
+
if (store.surface === 'inline') {
|
|
15
|
+
return {
|
|
16
|
+
raw,
|
|
17
|
+
block: null,
|
|
18
|
+
inlines: readInline(raw, 0, raw.length, resolver, grammar),
|
|
19
|
+
lead: ''
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const blocks = store.readSlot(raw)?.children ?? [];
|
|
23
|
+
if (blocks.length !== 1 || !isProseKind(blocks[0].kind))
|
|
24
|
+
return null;
|
|
25
|
+
const block = blocks[0];
|
|
26
|
+
const lead = raw.endsWith(block.raw) ? raw.slice(0, raw.length - block.raw.length) : '';
|
|
27
|
+
if (!isBlankText(lead))
|
|
28
|
+
return null;
|
|
29
|
+
const range = getContentRange(block);
|
|
30
|
+
return {
|
|
31
|
+
raw,
|
|
32
|
+
block,
|
|
33
|
+
inlines: readInline(block.raw, range.start, range.end, resolver, grammar),
|
|
34
|
+
lead
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** The bytes `read.inlines` index into. */
|
|
38
|
+
export const readSource = (read) => read.block?.raw ?? read.raw;
|
|
39
|
+
/** What the reader sees of a read, in the content reading (live-mode.md § 2). */
|
|
40
|
+
export function shownOf(read, store) {
|
|
41
|
+
const render = { grammar: store.reading.grammar };
|
|
42
|
+
return read.lead + renderedText(read.inlines, readSource(read), CONTENT_VISIBILITY, render);
|
|
43
|
+
}
|
|
44
|
+
/** Whether `line` still reads as `node`'s kind where `store` keeps it: always, on an inline
|
|
45
|
+
* surface, which never reads its text as a block. */
|
|
46
|
+
export function keepsKindAt(node, line, store) {
|
|
47
|
+
if (store.surface === 'inline')
|
|
48
|
+
return true;
|
|
49
|
+
return readBack(line + ownTrailingLineEnding(node.raw), store)?.block?.kind === node.kind;
|
|
50
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a paragraph is a picture on the page: it holds images and nothing else a user reads,
|
|
3
|
+
* so it is an object picked up whole rather than prose. Read from the editor's inline parse, so
|
|
4
|
+
* the answer is the one render draws: a reference image counts only once its definition exists.
|
|
5
|
+
*/
|
|
6
|
+
import type { NodeView } from '../node-views';
|
|
7
|
+
import { type InlineReading } from './inline-cache';
|
|
8
|
+
export declare function isImageOnlyParagraph(node: NodeView, reading: InlineReading): boolean;
|
|
9
|
+
/** How many images a paragraph of pictures holds; 0 for any block that is not one. */
|
|
10
|
+
export declare function pictureImageCount(node: NodeView, reading: InlineReading): number;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a paragraph is a picture on the page: it holds images and nothing else a user reads,
|
|
3
|
+
* so it is an object picked up whole rather than prose. Read from the editor's inline parse, so
|
|
4
|
+
* the answer is the one render draws: a reference image counts only once its definition exists.
|
|
5
|
+
*/
|
|
6
|
+
import { isBlankText } from '../lines';
|
|
7
|
+
import { resolvedInlineContent } from './inline-cache';
|
|
8
|
+
import { inlineDescendants } from './walk';
|
|
9
|
+
export function isImageOnlyParagraph(node, reading) {
|
|
10
|
+
return pictureImageCount(node, reading) > 0;
|
|
11
|
+
}
|
|
12
|
+
/** How many images a paragraph of pictures holds; 0 for any block that is not one. */
|
|
13
|
+
export function pictureImageCount(node, reading) {
|
|
14
|
+
// Most paragraphs hold no image at all, and this runs for every block that renders.
|
|
15
|
+
if (node.kind !== 'paragraph' || !node.raw.includes('!['))
|
|
16
|
+
return 0;
|
|
17
|
+
const nodes = resolvedInlineContent(node, reading);
|
|
18
|
+
if (!nodes.every(isPictureOrBlank))
|
|
19
|
+
return 0;
|
|
20
|
+
let images = 0;
|
|
21
|
+
for (const part of inlineDescendants(nodes))
|
|
22
|
+
if (part.kind === 'image')
|
|
23
|
+
images++;
|
|
24
|
+
return images;
|
|
25
|
+
}
|
|
26
|
+
// A linked image is still a picture: the link is where a click on it goes.
|
|
27
|
+
function isPicturePart(node) {
|
|
28
|
+
if (node.kind === 'image')
|
|
29
|
+
return true;
|
|
30
|
+
const children = node.children ?? [];
|
|
31
|
+
return node.kind === 'link' && children.some(isPicturePart) && children.every(isPictureOrBlank);
|
|
32
|
+
}
|
|
33
|
+
function isPictureOrBlank(node) {
|
|
34
|
+
return isPicturePart(node) || isBlank(node);
|
|
35
|
+
}
|
|
36
|
+
function isBlank(node) {
|
|
37
|
+
if (node.kind === 'hardLineBreak')
|
|
38
|
+
return true;
|
|
39
|
+
return node.kind === 'text' && isBlankText(node.text ?? '');
|
|
40
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `<` dispatch (spec autolinks §6.5, then raw HTML §6.6) plus the GFM §6.9 bare/www/email pass
|
|
3
3
|
* over completed text runs. No conformance reference covers the extension: these rules follow
|
|
4
|
-
* the GFM spec text, then cmark-gfm where its prose runs out (
|
|
5
|
-
* from both at `hasValidDomain`: a scheme'd host needs no
|
|
4
|
+
* the GFM spec text, then cmark-gfm where its prose runs out (the email domain and its `mailto:`
|
|
5
|
+
* and `xmpp:` prefixes), and diverge from both at `hasValidDomain`: a scheme'd host needs no
|
|
6
|
+
* period, so `http://localhost` links.
|
|
6
7
|
*/
|
|
7
8
|
import { type ScanContext } from './scan-state';
|
|
8
9
|
/**
|
|
@@ -10,14 +11,12 @@ import { type ScanContext } from './scan-state';
|
|
|
10
11
|
* entity-shaped tail (`&` + alphanumerics + `;`) is excluded with its `&` (spec ex. 626).
|
|
11
12
|
*/
|
|
12
13
|
export declare function trimTrailingPunctuation(raw: string, urlStart: number, urlEnd: number): number;
|
|
13
|
-
/**
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
*/
|
|
17
|
-
export declare function isValidLeadingBoundary(raw: string, pos: number, regionStart: number): boolean;
|
|
14
|
+
/** GFM §6.9: valid at the scan range start or after ASCII whitespace, `*`, `_`, `~` or `(`. Every
|
|
15
|
+
* bare form checks it, as the spec text says; cmark-gfm checks it for `www.` alone. */
|
|
16
|
+
export declare function isValidLeadingBoundary(raw: string, pos: number, scanStart: number): boolean;
|
|
18
17
|
export declare function handleAngle(ctx: ScanContext): void;
|
|
19
18
|
/**
|
|
20
19
|
* Runs before emphasis pairing so a delimiter absorbed into a URL can never pair; consumed
|
|
21
|
-
* delimiters are pruned. Children of already-
|
|
20
|
+
* delimiters are pruned. Children of already-built nodes are scanned too, except a link's.
|
|
22
21
|
*/
|
|
23
22
|
export declare function scanGfmAutolinks(ctx: ScanContext): void;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `<` dispatch (spec autolinks §6.5, then raw HTML §6.6) plus the GFM §6.9 bare/www/email pass
|
|
3
3
|
* over completed text runs. No conformance reference covers the extension: these rules follow
|
|
4
|
-
* the GFM spec text, then cmark-gfm where its prose runs out (
|
|
5
|
-
* from both at `hasValidDomain`: a scheme'd host needs no
|
|
4
|
+
* the GFM spec text, then cmark-gfm where its prose runs out (the email domain and its `mailto:`
|
|
5
|
+
* and `xmpp:` prefixes), and diverge from both at `hasValidDomain`: a scheme'd host needs no
|
|
6
|
+
* period, so `http://localhost` links.
|
|
6
7
|
*/
|
|
8
|
+
import { isWhitespaceChar } from '../../lines';
|
|
7
9
|
import { matchHtmlFormAt } from '../html-tag-grammar';
|
|
8
10
|
import { appendNode } from './scan-state';
|
|
9
11
|
import { percentEncodeUri } from './url';
|
|
@@ -53,12 +55,16 @@ export function trimTrailingPunctuation(raw, urlStart, urlEnd) {
|
|
|
53
55
|
}
|
|
54
56
|
return end;
|
|
55
57
|
}
|
|
58
|
+
/** GFM §6.9: a bare url runs to whitespace or a `<`, before the trims above apply. */
|
|
59
|
+
function urlRunEnd(raw, from, end) {
|
|
60
|
+
let urlEnd = from;
|
|
61
|
+
while (urlEnd < end && raw[urlEnd] !== '<' && !isWhitespaceChar(raw[urlEnd]))
|
|
62
|
+
urlEnd++;
|
|
63
|
+
return urlEnd;
|
|
64
|
+
}
|
|
56
65
|
const HOST_CHAR = /[\p{L}\p{N}_.-]/u;
|
|
57
|
-
/**
|
|
58
|
-
*
|
|
59
|
-
* `www.xxx._yyy.zzz` stays literal while `www._xxx.yyy.zzz` links. cmark-gfm's extra exemption
|
|
60
|
-
* for 10+-dot hosts is an implementation artifact, deliberately not reproduced (file header).
|
|
61
|
-
*/
|
|
66
|
+
/** GFM §6.9: no underscore in a domain's last two dot-separated segments, so `www.xxx._yyy.zzz`
|
|
67
|
+
* stays literal while `www._xxx.yyy.zzz` links; cmark-gfm's 10+-dot exemption is left out. */
|
|
62
68
|
function hasValidDomain(raw, domainStart, limit) {
|
|
63
69
|
let hostEnd = domainStart;
|
|
64
70
|
while (hostEnd < limit && HOST_CHAR.test(raw[hostEnd]))
|
|
@@ -74,15 +80,13 @@ function hasValidDomain(raw, domainStart, limit) {
|
|
|
74
80
|
}
|
|
75
81
|
return true;
|
|
76
82
|
}
|
|
77
|
-
/**
|
|
78
|
-
*
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
export function isValidLeadingBoundary(raw, pos, regionStart) {
|
|
82
|
-
if (pos <= regionStart)
|
|
83
|
+
/** GFM §6.9: valid at the scan range start or after ASCII whitespace, `*`, `_`, `~` or `(`. Every
|
|
84
|
+
* bare form checks it, as the spec text says; cmark-gfm checks it for `www.` alone. */
|
|
85
|
+
export function isValidLeadingBoundary(raw, pos, scanStart) {
|
|
86
|
+
if (pos <= scanStart)
|
|
83
87
|
return true;
|
|
84
88
|
const ch = raw[pos - 1];
|
|
85
|
-
return
|
|
89
|
+
return isWhitespaceChar(ch) || ch === '*' || ch === '_' || ch === '~' || ch === '(';
|
|
86
90
|
}
|
|
87
91
|
// ── `<` handler: spec autolink, then raw HTML tag ───────────────────────────
|
|
88
92
|
// commonmark.js 0.31.2 reEmailAutolink / reAutolink, tried in that order.
|
|
@@ -124,14 +128,14 @@ function matchAngleConstruct(raw, pos, end) {
|
|
|
124
128
|
// ── GFM §6.9 pass over completed text runs ──────────────────────────────────
|
|
125
129
|
/**
|
|
126
130
|
* Runs before emphasis pairing so a delimiter absorbed into a URL can never pair; consumed
|
|
127
|
-
* delimiters are pruned. Children of already-
|
|
131
|
+
* delimiters are pruned. Children of already-built nodes are scanned too, except a link's.
|
|
128
132
|
*/
|
|
129
133
|
export function scanGfmAutolinks(ctx) {
|
|
130
|
-
const matches = spliceBareAutolinks(ctx.raw, ctx.nodes);
|
|
134
|
+
const matches = spliceBareAutolinks(ctx.raw, ctx.start, ctx.nodes, 0);
|
|
131
135
|
if (matches.length > 0) {
|
|
132
136
|
ctx.delimiters = ctx.delimiters.filter((d) => !meetsAMatch(matches, d.node.start, d.node.end));
|
|
133
137
|
}
|
|
134
|
-
scanChildren(ctx.raw, ctx.nodes);
|
|
138
|
+
scanChildren(ctx.raw, ctx.start, ctx.nodes);
|
|
135
139
|
}
|
|
136
140
|
/** Matches are disjoint and ascending; the linear alternative is quadratic on a dense block. */
|
|
137
141
|
function meetsAMatch(matches, start, end) {
|
|
@@ -146,25 +150,29 @@ function meetsAMatch(matches, start, end) {
|
|
|
146
150
|
}
|
|
147
151
|
return lo < matches.length && matches[lo].start < end;
|
|
148
152
|
}
|
|
149
|
-
function scanChildren(raw, nodes) {
|
|
153
|
+
function scanChildren(raw, scanStart, nodes) {
|
|
150
154
|
// Iterative: nesting depth is input-controlled, so per-level recursion overflows the stack.
|
|
151
155
|
const pending = [nodes];
|
|
152
156
|
while (pending.length > 0) {
|
|
153
157
|
for (const node of pending.pop()) {
|
|
158
|
+
// Text inside a link never becomes a nested link, as in cmark-gfm; inline and
|
|
159
|
+
// reference links are both built before this pass, so both skip here.
|
|
160
|
+
if (node.kind === 'link')
|
|
161
|
+
continue;
|
|
154
162
|
if (node.children !== undefined && node.children.length > 0) {
|
|
155
|
-
|
|
163
|
+
// An image's alt sits inside its own open bracket.
|
|
164
|
+
spliceBareAutolinks(raw, scanStart, node.children, node.kind === 'image' ? 1 : 0);
|
|
156
165
|
pending.push(node.children);
|
|
157
166
|
}
|
|
158
167
|
}
|
|
159
168
|
}
|
|
160
169
|
}
|
|
161
|
-
/**
|
|
162
|
-
*
|
|
163
|
-
|
|
164
|
-
*/
|
|
165
|
-
function spliceBareAutolinks(raw, nodes) {
|
|
170
|
+
/** Written back once rather than spliced per run, since spreading ~65k matches as arguments hits
|
|
171
|
+
* V8's argument limit. `openBrackets` counts the `[` still open where `nodes` start. */
|
|
172
|
+
function spliceBareAutolinks(raw, scanStart, nodes, openBrackets) {
|
|
166
173
|
const all = [];
|
|
167
174
|
const rebuilt = [];
|
|
175
|
+
const brackets = { open: openBrackets };
|
|
168
176
|
let i = 0;
|
|
169
177
|
while (i < nodes.length) {
|
|
170
178
|
if (nodes[i].kind !== 'text') {
|
|
@@ -175,7 +183,7 @@ function spliceBareAutolinks(raw, nodes) {
|
|
|
175
183
|
let j = i;
|
|
176
184
|
while (j + 1 < nodes.length && nodes[j + 1].kind === 'text')
|
|
177
185
|
j++;
|
|
178
|
-
const matches = scanRunForBareAutolinks(raw, nodes[i].start, nodes[j].end);
|
|
186
|
+
const matches = scanRunForBareAutolinks(raw, scanStart, nodes[i].start, nodes[j].end, brackets);
|
|
179
187
|
if (matches.length === 0) {
|
|
180
188
|
for (let k = i; k <= j; k++)
|
|
181
189
|
rebuilt.push(nodes[k]);
|
|
@@ -229,20 +237,31 @@ function spliceRun(raw, runNodes, matches) {
|
|
|
229
237
|
}
|
|
230
238
|
return out;
|
|
231
239
|
}
|
|
232
|
-
|
|
240
|
+
/** As in cmark-gfm, the www and url forms match only where no `[` is open, while the email form
|
|
241
|
+
* matches anywhere. `brackets.open` carries that count from one run to the next. */
|
|
242
|
+
function scanRunForBareAutolinks(raw, scanStart, start, end, brackets) {
|
|
233
243
|
const out = [];
|
|
234
244
|
let pos = start;
|
|
245
|
+
// The email form walks backwards from its `@`, so it must stop where the last link ended.
|
|
246
|
+
let claimedEnd = start;
|
|
235
247
|
while (pos < end) {
|
|
236
248
|
const ch = raw[pos];
|
|
237
249
|
let matched = null;
|
|
238
|
-
if (ch === '
|
|
239
|
-
|
|
240
|
-
else if (ch === '
|
|
241
|
-
|
|
250
|
+
if (ch === '[')
|
|
251
|
+
brackets.open++;
|
|
252
|
+
else if (ch === ']')
|
|
253
|
+
brackets.open = Math.max(0, brackets.open - 1);
|
|
242
254
|
else if (ch === '@')
|
|
243
|
-
matched = matchBareEmailAutolink(raw, pos,
|
|
255
|
+
matched = matchBareEmailAutolink(raw, pos, scanStart, end, claimedEnd);
|
|
256
|
+
else if (brackets.open === 0) {
|
|
257
|
+
if (ch === 'h' || ch === 'H')
|
|
258
|
+
matched = matchBareHttpAutolink(raw, pos, scanStart, end);
|
|
259
|
+
else if (ch === 'w' || ch === 'W')
|
|
260
|
+
matched = matchBareWwwAutolink(raw, pos, scanStart, end);
|
|
261
|
+
}
|
|
244
262
|
if (matched !== null) {
|
|
245
263
|
out.push(matched);
|
|
264
|
+
claimedEnd = matched.end;
|
|
246
265
|
pos = matched.end;
|
|
247
266
|
continue;
|
|
248
267
|
}
|
|
@@ -264,15 +283,13 @@ function matchesCI(raw, pos, lit) {
|
|
|
264
283
|
}
|
|
265
284
|
return true;
|
|
266
285
|
}
|
|
267
|
-
function matchBareHttpAutolink(raw, pos,
|
|
268
|
-
if (!isValidLeadingBoundary(raw, pos,
|
|
286
|
+
function matchBareHttpAutolink(raw, pos, scanStart, end) {
|
|
287
|
+
if (!isValidLeadingBoundary(raw, pos, scanStart))
|
|
269
288
|
return null;
|
|
270
289
|
const schemeLen = matchesCI(raw, pos, 'https://') ? 8 : matchesCI(raw, pos, 'http://') ? 7 : 0;
|
|
271
290
|
if (schemeLen === 0)
|
|
272
291
|
return null;
|
|
273
|
-
let urlEnd = pos + schemeLen;
|
|
274
|
-
while (urlEnd < end && !/\s/.test(raw[urlEnd]))
|
|
275
|
-
urlEnd++;
|
|
292
|
+
let urlEnd = urlRunEnd(raw, pos + schemeLen, end);
|
|
276
293
|
if (urlEnd <= pos + schemeLen)
|
|
277
294
|
return null;
|
|
278
295
|
urlEnd = trimTrailingPunctuation(raw, pos, urlEnd);
|
|
@@ -282,19 +299,17 @@ function matchBareHttpAutolink(raw, pos, regionStart, end) {
|
|
|
282
299
|
return null;
|
|
283
300
|
return { kind: 'autolink', start: pos, end: urlEnd, url: raw.slice(pos, urlEnd) };
|
|
284
301
|
}
|
|
285
|
-
function matchBareWwwAutolink(raw, pos,
|
|
286
|
-
if (!isValidLeadingBoundary(raw, pos,
|
|
302
|
+
function matchBareWwwAutolink(raw, pos, scanStart, end) {
|
|
303
|
+
if (!isValidLeadingBoundary(raw, pos, scanStart))
|
|
287
304
|
return null;
|
|
288
305
|
if (!matchesCI(raw, pos, 'www.'))
|
|
289
306
|
return null;
|
|
290
|
-
let urlEnd = pos + 4;
|
|
291
|
-
while (urlEnd < end && !/\s/.test(raw[urlEnd]))
|
|
292
|
-
urlEnd++;
|
|
307
|
+
let urlEnd = urlRunEnd(raw, pos + 4, end);
|
|
293
308
|
if (urlEnd <= pos + 4)
|
|
294
309
|
return null;
|
|
295
310
|
urlEnd = trimTrailingPunctuation(raw, pos, urlEnd);
|
|
296
|
-
// `.` is trailing punctuation, so the trim can
|
|
297
|
-
//
|
|
311
|
+
// `.` is trailing punctuation, so the trim can cut into `www.` and leave a bare `www`, a
|
|
312
|
+
// link to a host the user never wrote; the check below refuses that.
|
|
298
313
|
if (urlEnd <= pos + 4)
|
|
299
314
|
return null;
|
|
300
315
|
if (!hasValidDomain(raw, pos, urlEnd))
|
|
@@ -307,13 +322,9 @@ const EMAIL_LOCAL = /[A-Za-z0-9._+-]/;
|
|
|
307
322
|
const EMAIL_DOMAIN_CHAR = /[A-Za-z0-9_-]/;
|
|
308
323
|
const EMAIL_LABEL_START = /[A-Za-z0-9]/;
|
|
309
324
|
const EMAIL_DOMAIN_END = /[A-Za-z]/;
|
|
310
|
-
/**
|
|
311
|
-
*
|
|
312
|
-
|
|
313
|
-
* must be a LETTER, and a `.` separates labels only when an alphanumeric follows (`a@b._c` and
|
|
314
|
-
* `a@b.c1` stay literal; `a@.b` is accepted). Returns the domain end, or -1.
|
|
315
|
-
*/
|
|
316
|
-
function scanEmailDomain(raw, domainStart, regionEnd) {
|
|
325
|
+
/** GFM §6.9's email domain plus cmark-gfm's rules: it ends in a letter, and a `.` separates labels
|
|
326
|
+
* only before an alphanumeric (`a@b._c` is literal). An xmpp address may hold `/`. -1 if none. */
|
|
327
|
+
function scanEmailDomain(raw, domainStart, regionEnd, allowsResource) {
|
|
317
328
|
let end = domainStart;
|
|
318
329
|
let separators = 0;
|
|
319
330
|
while (end < regionEnd) {
|
|
@@ -323,7 +334,7 @@ function scanEmailDomain(raw, domainStart, regionEnd) {
|
|
|
323
334
|
break;
|
|
324
335
|
separators++;
|
|
325
336
|
}
|
|
326
|
-
else if (!EMAIL_DOMAIN_CHAR.test(ch)) {
|
|
337
|
+
else if (!EMAIL_DOMAIN_CHAR.test(ch) && !(allowsResource && ch === '/')) {
|
|
327
338
|
break;
|
|
328
339
|
}
|
|
329
340
|
end++;
|
|
@@ -333,22 +344,32 @@ function scanEmailDomain(raw, domainStart, regionEnd) {
|
|
|
333
344
|
// The walk stops before any `.` it did not count, so `end - 1` is a domain character.
|
|
334
345
|
return EMAIL_DOMAIN_END.test(raw[end - 1]) ? end : -1;
|
|
335
346
|
}
|
|
336
|
-
|
|
347
|
+
/** The scheme a bare address may carry in front of its local part, matched byte for byte and
|
|
348
|
+
* lowercase only, as cmark-gfm matches it. */
|
|
349
|
+
const EMAIL_PREFIXES = ['mailto:', 'xmpp:'];
|
|
350
|
+
function emailPrefixBefore(raw, localStart, floor) {
|
|
351
|
+
return EMAIL_PREFIXES.find((prefix) => localStart - prefix.length >= floor && raw.startsWith(prefix, localStart - prefix.length));
|
|
352
|
+
}
|
|
353
|
+
/** `claimedEnd` is where the last link in this run ended: no byte before it can join this one. */
|
|
354
|
+
function matchBareEmailAutolink(raw, atPos, scanStart, regionEnd, claimedEnd) {
|
|
337
355
|
let localStart = atPos;
|
|
338
|
-
while (localStart >
|
|
356
|
+
while (localStart > claimedEnd && EMAIL_LOCAL.test(raw[localStart - 1]))
|
|
339
357
|
localStart--;
|
|
340
358
|
if (localStart === atPos)
|
|
341
|
-
return null; // empty local-part
|
|
342
|
-
// The boundary applies at the URL's start, which for email is the local-part start.
|
|
343
|
-
if (!isValidLeadingBoundary(raw, localStart, regionStart))
|
|
344
359
|
return null;
|
|
345
|
-
const
|
|
360
|
+
const prefix = emailPrefixBefore(raw, localStart, claimedEnd);
|
|
361
|
+
const linkStart = localStart - (prefix?.length ?? 0);
|
|
362
|
+
// The boundary applies at the URL's start: the prefix when there is one, else the local part.
|
|
363
|
+
if (!isValidLeadingBoundary(raw, linkStart, scanStart))
|
|
364
|
+
return null;
|
|
365
|
+
const domainEnd = scanEmailDomain(raw, atPos + 1, regionEnd, prefix === 'xmpp:');
|
|
346
366
|
if (domainEnd < 0)
|
|
347
367
|
return null;
|
|
368
|
+
const text = raw.slice(linkStart, domainEnd);
|
|
348
369
|
return {
|
|
349
370
|
kind: 'autolink',
|
|
350
|
-
start:
|
|
371
|
+
start: linkStart,
|
|
351
372
|
end: domainEnd,
|
|
352
|
-
url: `mailto:${
|
|
373
|
+
url: prefix ? text : `mailto:${text}`
|
|
353
374
|
};
|
|
354
375
|
}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Bracket stack for inline and reference links/images (CommonMark §6.3), ported onto the flat
|
|
3
3
|
* working-node list. A failed `]` leaves its brackets literal, except full/collapsed references
|
|
4
4
|
* that miss the resolver: those commit to one opaque `unresolvedReference` node (editor deviation).
|
|
5
|
-
* `url`/`title` are spec-processed
|
|
6
|
-
*
|
|
5
|
+
* `url`/`title` are spec-processed in both forms (a reference form's come from its definition);
|
|
6
|
+
* neither is ever serialized, so offsets stay lossless.
|
|
7
7
|
*/
|
|
8
8
|
import { type ScanContext } from './scan-state';
|
|
9
9
|
export declare function handleOpenBracket(ctx: ScanContext): void;
|
|
@@ -2,15 +2,14 @@
|
|
|
2
2
|
* Bracket stack for inline and reference links/images (CommonMark §6.3), ported onto the flat
|
|
3
3
|
* working-node list. A failed `]` leaves its brackets literal, except full/collapsed references
|
|
4
4
|
* that miss the resolver: those commit to one opaque `unresolvedReference` node (editor deviation).
|
|
5
|
-
* `url`/`title` are spec-processed
|
|
6
|
-
*
|
|
5
|
+
* `url`/`title` are spec-processed in both forms (a reference form's come from its definition);
|
|
6
|
+
* neither is ever serialized, so offsets stay lossless.
|
|
7
7
|
*/
|
|
8
|
-
import { ESCAPABLE_PUNCTUATION } from '../../escapable';
|
|
9
8
|
import { parseImageDimensions } from '../image-dimensions';
|
|
9
|
+
import { parseLinkDestination, parseLinkLabel, parseLinkTitle } from '../link-destination';
|
|
10
10
|
import { normalizeLinkLabel } from '../link-reference-resolver';
|
|
11
11
|
import { processEmphasis } from './emphasis';
|
|
12
12
|
import { appendNode, flushPendingText, mergeAdjacentText } from './scan-state';
|
|
13
|
-
import { processDestination, unescapeSpecString } from './url';
|
|
14
13
|
// ── Scan-time handlers ──────────────────────────────────────────────────────
|
|
15
14
|
export function handleOpenBracket(ctx) {
|
|
16
15
|
pushBracket(ctx, false);
|
|
@@ -139,21 +138,6 @@ function parseReferenceTail(ctx, bracket, labelEnd) {
|
|
|
139
138
|
return null; // shortcut never commits on a miss
|
|
140
139
|
return { label: normalizeLinkLabel(rawLabel), end: afterText, resolved };
|
|
141
140
|
}
|
|
142
|
-
/** CommonMark §6.3 label: at most 999 content chars, no unescaped brackets. */
|
|
143
|
-
function parseLinkLabel(raw, pos, end) {
|
|
144
|
-
if (pos >= end || raw[pos] !== '[')
|
|
145
|
-
return null;
|
|
146
|
-
let i = pos + 1;
|
|
147
|
-
while (i < end && i - pos <= 1000) {
|
|
148
|
-
const ch = raw[i];
|
|
149
|
-
if (ch === ']')
|
|
150
|
-
return i + 1;
|
|
151
|
-
if (ch === '[')
|
|
152
|
-
return null;
|
|
153
|
-
i += ch === '\\' ? 2 : 1;
|
|
154
|
-
}
|
|
155
|
-
return null;
|
|
156
|
-
}
|
|
157
141
|
function emitUnresolvedReference(ctx, bracket, ref) {
|
|
158
142
|
ctx.brackets.pop();
|
|
159
143
|
ctx.delimiters.length = bracket.delimiterFloor;
|
|
@@ -174,14 +158,14 @@ function parseInlineLinkTail(raw, pos, end) {
|
|
|
174
158
|
if (pos >= end || raw[pos] !== '(')
|
|
175
159
|
return null;
|
|
176
160
|
let i = skipSpnl(raw, pos + 1, end);
|
|
177
|
-
const dest =
|
|
161
|
+
const dest = parseLinkDestination(raw, i, end);
|
|
178
162
|
if (dest === null)
|
|
179
163
|
return null;
|
|
180
164
|
i = skipSpnl(raw, dest.end, end);
|
|
181
165
|
// A title needs real whitespace after the destination; a quote abutting it is destination content.
|
|
182
166
|
let title;
|
|
183
167
|
if (i > dest.end) {
|
|
184
|
-
const parsed =
|
|
168
|
+
const parsed = parseLinkTitle(raw, i, end);
|
|
185
169
|
if (parsed !== null) {
|
|
186
170
|
title = parsed.title;
|
|
187
171
|
i = skipSpnl(raw, parsed.end, end);
|
|
@@ -191,7 +175,7 @@ function parseInlineLinkTail(raw, pos, end) {
|
|
|
191
175
|
return null;
|
|
192
176
|
return { url: dest.url, ...(title !== undefined ? { title } : {}), end: i + 1 };
|
|
193
177
|
}
|
|
194
|
-
/**
|
|
178
|
+
/** commonmark.js's optional whitespace: spaces, at most one newline, spaces, but no tab. */
|
|
195
179
|
function skipSpnl(raw, pos, end) {
|
|
196
180
|
while (pos < end && raw[pos] === ' ')
|
|
197
181
|
pos++;
|
|
@@ -202,84 +186,3 @@ function skipSpnl(raw, pos, end) {
|
|
|
202
186
|
}
|
|
203
187
|
return pos;
|
|
204
188
|
}
|
|
205
|
-
function parseDestination(raw, pos, end) {
|
|
206
|
-
if (pos < end && raw[pos] === '<')
|
|
207
|
-
return parseAngleDestination(raw, pos, end);
|
|
208
|
-
return parseBareDestination(raw, pos, end);
|
|
209
|
-
}
|
|
210
|
-
function parseAngleDestination(raw, pos, end) {
|
|
211
|
-
let i = pos + 1;
|
|
212
|
-
while (i < end) {
|
|
213
|
-
const ch = raw[i];
|
|
214
|
-
if (ch === '>')
|
|
215
|
-
return { url: processDestination(raw.slice(pos + 1, i)), end: i + 1 };
|
|
216
|
-
if (ch === '<' || ch === '\n' || ch === '\u0000')
|
|
217
|
-
return null;
|
|
218
|
-
if (ch === '\\') {
|
|
219
|
-
const next = i + 1 < end ? raw[i + 1] : '';
|
|
220
|
-
if (next === '' || next === '\n' || next === '\r' || next === '\u2028' || next === '\u2029') {
|
|
221
|
-
return null;
|
|
222
|
-
}
|
|
223
|
-
i += 2;
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
i++;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return null;
|
|
230
|
-
}
|
|
231
|
-
// The reference's destination terminator set (reWhitespaceChar): other control characters,
|
|
232
|
-
// and U+00A0, are destination content.
|
|
233
|
-
const DESTINATION_TERMINATORS = new Set(' \t\n\u000b\u000c\r');
|
|
234
|
-
/** Bare form: balanced parens, no depth cap. Empty is valid only just before the closing `)`. */
|
|
235
|
-
function parseBareDestination(raw, pos, end) {
|
|
236
|
-
let i = pos;
|
|
237
|
-
let openParens = 0;
|
|
238
|
-
while (i < end) {
|
|
239
|
-
const ch = raw[i];
|
|
240
|
-
if (ch === '\\' && i + 1 < end && ESCAPABLE_PUNCTUATION.has(raw[i + 1])) {
|
|
241
|
-
i += 2;
|
|
242
|
-
}
|
|
243
|
-
else if (ch === '(') {
|
|
244
|
-
openParens++;
|
|
245
|
-
i++;
|
|
246
|
-
}
|
|
247
|
-
else if (ch === ')') {
|
|
248
|
-
if (openParens < 1)
|
|
249
|
-
break;
|
|
250
|
-
openParens--;
|
|
251
|
-
i++;
|
|
252
|
-
}
|
|
253
|
-
else if (DESTINATION_TERMINATORS.has(ch)) {
|
|
254
|
-
break;
|
|
255
|
-
}
|
|
256
|
-
else {
|
|
257
|
-
i++;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
if (i === pos && (i >= end || raw[i] !== ')'))
|
|
261
|
-
return null;
|
|
262
|
-
if (openParens !== 0)
|
|
263
|
-
return null;
|
|
264
|
-
return { url: processDestination(raw.slice(pos, i)), end: i };
|
|
265
|
-
}
|
|
266
|
-
/** Paren titles cannot nest. */
|
|
267
|
-
function parseTitle(raw, pos, end) {
|
|
268
|
-
const marker = raw[pos];
|
|
269
|
-
if (marker !== '"' && marker !== "'" && marker !== '(')
|
|
270
|
-
return null;
|
|
271
|
-
const close = marker === '(' ? ')' : marker;
|
|
272
|
-
let i = pos + 1;
|
|
273
|
-
while (i < end) {
|
|
274
|
-
const ch = raw[i];
|
|
275
|
-
if (ch === close)
|
|
276
|
-
return { title: unescapeSpecString(raw.slice(pos + 1, i)), end: i + 1 };
|
|
277
|
-
if (ch === '\u0000' || (marker === '(' && ch === '('))
|
|
278
|
-
return null;
|
|
279
|
-
if (ch === '\\' && i + 1 < end)
|
|
280
|
-
i += 2;
|
|
281
|
-
else
|
|
282
|
-
i++;
|
|
283
|
-
}
|
|
284
|
-
return null;
|
|
285
|
-
}
|
|
@@ -3,5 +3,9 @@
|
|
|
3
3
|
* plus content; `text` holds raw content bytes, unfolded (display folding is the normalizer's).
|
|
4
4
|
* An unmatched run stays whole in the pending text, so an inner backtick is never retried.
|
|
5
5
|
*/
|
|
6
|
+
import type { InlineNode } from '../../nodes';
|
|
6
7
|
import { type ScanContext } from './scan-state';
|
|
8
|
+
/** The width of each of a code span's two equal delimiter runs, which every caller places the
|
|
9
|
+
* content by; 0 when the bytes outside `text` don't split evenly, so the node is all content. */
|
|
10
|
+
export declare function codeSpanFence(node: InlineNode): number;
|
|
7
11
|
export declare function handleBacktick(ctx: ScanContext): void;
|
|
@@ -5,6 +5,14 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { findBacktickCloser, indexBacktickRuns } from '../backticks';
|
|
7
7
|
import { appendNode } from './scan-state';
|
|
8
|
+
/** The width of each of a code span's two equal delimiter runs, which every caller places the
|
|
9
|
+
* content by; 0 when the bytes outside `text` don't split evenly, so the node is all content. */
|
|
10
|
+
export function codeSpanFence(node) {
|
|
11
|
+
if (node.text === undefined)
|
|
12
|
+
return 0;
|
|
13
|
+
const fence = (node.end - node.start - node.text.length) / 2;
|
|
14
|
+
return Number.isInteger(fence) && fence > 0 ? fence : 0;
|
|
15
|
+
}
|
|
8
16
|
export function handleBacktick(ctx) {
|
|
9
17
|
const { raw, pos, end } = ctx;
|
|
10
18
|
let runEnd = pos;
|