@voithos-labs/aragonite 0.10.3 → 0.10.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/a11y-strings.d.ts +12 -5
- package/dist/a11y-strings.js +61 -5
- package/dist/action-contracts.d.ts +242 -155
- package/dist/action-contracts.js +2 -2
- package/dist/active-editor.d.ts +3 -3
- package/dist/active-editor.js +8 -9
- package/dist/ambient/ambient-dom.d.ts +2 -5
- package/dist/ambient/ambient-dom.js +16 -62
- package/dist/assert.js +6 -5
- package/dist/block-component.d.ts +135 -109
- package/dist/block-component.js +30 -22
- package/dist/block-id.d.ts +6 -10
- package/dist/block-id.js +25 -14
- package/dist/bounded-memo.d.ts +5 -5
- package/dist/bounded-memo.js +6 -6
- package/dist/components/BlockDragHandle.svelte +13 -20
- package/dist/components/BlockHost.svelte +56 -134
- package/dist/components/BlockList.svelte +22 -19
- package/dist/components/DecorationOverlay.svelte +9 -10
- package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
- package/dist/components/Editor.svelte +619 -1089
- package/dist/components/Editor.svelte.d.ts +9 -20
- package/dist/components/GapCaret.svelte +26 -59
- package/dist/components/SelectionOverlay.svelte +36 -67
- package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
- package/dist/components/TailInsert.svelte +8 -55
- package/dist/components/TailInsert.svelte.d.ts +4 -6
- package/dist/components/block-content-selector.d.ts +11 -11
- package/dist/components/block-content-selector.js +11 -11
- package/dist/components/block-el-lookup.d.ts +6 -0
- package/dist/components/block-el-lookup.js +27 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
- package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
- package/dist/components/blocks/code/CodeBlock.svelte +255 -276
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
- package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
- package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
- package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
- package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
- package/dist/components/blocks/code/code-bootstrap.js +35 -28
- package/dist/components/blocks/code/code-context-actions.js +5 -4
- package/dist/components/blocks/code/code-enter.js +2 -2
- package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
- package/dist/components/blocks/code/code-fence-boundary.js +40 -66
- package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
- package/dist/components/blocks/code/code-fence-exit.js +24 -25
- package/dist/components/blocks/code/code-indent.d.ts +2 -2
- package/dist/components/blocks/code/code-indent.js +4 -7
- package/dist/components/blocks/code/code-languages.d.ts +16 -12
- package/dist/components/blocks/code/code-languages.js +58 -32
- package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
- package/dist/components/blocks/code/code-paste-surface.js +9 -18
- package/dist/components/blocks/code/code-renderer.d.ts +21 -5
- package/dist/components/blocks/code/code-renderer.js +90 -125
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
- package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
- package/dist/components/blocks/directive/activate-directives.js +18 -13
- package/dist/components/blocks/editable-leaf.d.ts +50 -74
- package/dist/components/blocks/editable-leaf.js +144 -202
- package/dist/components/blocks/editable-surface.d.ts +96 -100
- package/dist/components/blocks/editable-surface.js +101 -109
- package/dist/components/blocks/list/ListBlock.svelte +46 -90
- package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
- package/dist/components/blocks/list/task-checkbox.js +12 -7
- package/dist/components/blocks/plain-text-backend.d.ts +4 -20
- package/dist/components/blocks/plain-text-backend.js +9 -43
- package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
- package/dist/components/blocks/surface-wiring.svelte.js +15 -34
- package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
- package/dist/components/blocks/table/TableBlock.svelte +100 -165
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
- package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
- package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
- package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
- package/dist/components/blocks/table/cell-pointer.js +49 -71
- package/dist/components/blocks/table/cell-render.d.ts +24 -29
- package/dist/components/blocks/table/cell-render.js +29 -31
- package/dist/components/blocks/table/selected-cells.d.ts +7 -7
- package/dist/components/blocks/table/selected-cells.js +9 -13
- package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
- package/dist/components/blocks/table/table-caret-at-point.js +5 -5
- package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
- package/dist/components/blocks/table/table-cell-paste.js +27 -43
- package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
- package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
- package/dist/components/blocks/table/table-menu-model.js +6 -10
- package/dist/components/blocks/table/table-navigation.js +2 -2
- package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
- package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
- package/dist/components/blocks/text/auto-pair-record.js +51 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
- package/dist/components/blocks/text/click-snap-guard.js +16 -5
- package/dist/components/blocks/text/composition-seat.d.ts +17 -14
- package/dist/components/blocks/text/composition-seat.js +11 -11
- package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
- package/dist/components/blocks/text/construct-edge-delete.js +50 -65
- package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
- package/dist/components/blocks/text/construct-reveal.js +13 -14
- package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
- package/dist/components/blocks/text/delimiter-autopair.js +87 -103
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
- package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
- package/dist/components/blocks/text/edge-seat.d.ts +17 -26
- package/dist/components/blocks/text/edge-seat.js +43 -70
- package/dist/components/blocks/text/link-at-point.d.ts +9 -9
- package/dist/components/blocks/text/link-at-point.js +12 -15
- package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
- package/dist/components/blocks/text/live-join-seam.js +75 -112
- package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
- package/dist/components/blocks/text/live-selection-edit.js +32 -105
- package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
- package/dist/components/blocks/text/live-split-rebalance.js +50 -67
- package/dist/components/blocks/text/marker-completion.d.ts +7 -12
- package/dist/components/blocks/text/marker-completion.js +17 -10
- package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
- package/dist/components/blocks/text/pending-mark-insert.js +30 -49
- package/dist/components/blocks/text/screen-diff.d.ts +5 -15
- package/dist/components/blocks/text/screen-diff.js +5 -19
- package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
- package/dist/components/blocks/text/text-clipboard.js +27 -32
- package/dist/components/blocks/text/text-keydown.d.ts +20 -30
- package/dist/components/blocks/text/text-keydown.js +54 -51
- package/dist/components/blocks/text/text-render.d.ts +25 -35
- package/dist/components/blocks/text/text-render.js +82 -61
- package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
- package/dist/components/blocks/text/widget-adjacency.js +17 -17
- package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
- package/dist/components/blocks/text/widget-interaction.js +243 -208
- package/dist/components/blocks/widget-portal.d.ts +20 -29
- package/dist/components/blocks/widget-portal.js +16 -14
- package/dist/components/built-in-blocks.d.ts +3 -4
- package/dist/components/built-in-blocks.js +17 -18
- package/dist/components/drag-handle.d.ts +13 -30
- package/dist/components/drag-handle.js +25 -63
- package/dist/components/editor-built-ins.d.ts +1 -0
- package/dist/components/editor-built-ins.js +16 -0
- package/dist/components/editor-root-clipboard.d.ts +6 -6
- package/dist/components/editor-root-clipboard.js +16 -27
- package/dist/components/editor-root-document-swap.d.ts +49 -0
- package/dist/components/editor-root-document-swap.js +54 -0
- package/dist/components/editor-root-focus.d.ts +5 -4
- package/dist/components/editor-root-focus.js +51 -22
- package/dist/components/editor-root-focused-surface.d.ts +35 -0
- package/dist/components/editor-root-focused-surface.js +65 -0
- package/dist/components/editor-root-geometry.d.ts +15 -24
- package/dist/components/editor-root-geometry.js +27 -31
- package/dist/components/editor-root-gestures.d.ts +39 -0
- package/dist/components/editor-root-gestures.js +189 -0
- package/dist/components/editor-root-keydown.d.ts +10 -25
- package/dist/components/editor-root-keydown.js +19 -43
- package/dist/components/editor-root-listeners.d.ts +22 -31
- package/dist/components/editor-root-listeners.js +49 -46
- package/dist/components/editor-root-menus.d.ts +51 -0
- package/dist/components/editor-root-menus.js +147 -0
- package/dist/components/editor-root-mode-flip.d.ts +16 -11
- package/dist/components/editor-root-mode-flip.js +36 -34
- package/dist/components/editor-root-scroll-host.d.ts +22 -0
- package/dist/components/editor-root-scroll-host.js +34 -0
- package/dist/components/editor-root-test-surface.d.ts +48 -0
- package/dist/components/editor-root-test-surface.js +6 -0
- package/dist/components/image/ImageOverlayHost.svelte +44 -35
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
- package/dist/components/image/ImageProperties.svelte +37 -41
- package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
- package/dist/components/image/ImageResizeHandles.svelte +26 -30
- package/dist/components/image/image-crop.d.ts +5 -11
- package/dist/components/image/image-crop.js +5 -11
- package/dist/components/image/image-edit-commit.d.ts +19 -16
- package/dist/components/image/image-edit-commit.js +74 -38
- package/dist/components/image/image-resize.d.ts +2 -5
- package/dist/components/image/image-resize.js +3 -6
- package/dist/components/image/image-widget-editing.d.ts +3 -3
- package/dist/components/image/image-widget-editing.js +9 -9
- package/dist/components/image/widget-dom.d.ts +2 -3
- package/dist/components/image/widget-dom.js +19 -24
- package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
- package/dist/components/image/widget-selection-state.svelte.js +26 -19
- package/dist/components/kind-cue.svelte.d.ts +21 -0
- package/dist/components/kind-cue.svelte.js +35 -0
- package/dist/components/link-card/LinkCard.svelte +115 -64
- package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
- package/dist/components/link-card/LinkCardHost.svelte +42 -33
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
- package/dist/components/link-card/link-card-commit.d.ts +16 -19
- package/dist/components/link-card/link-card-commit.js +21 -30
- package/dist/components/link-card/link-card-entry.d.ts +13 -23
- package/dist/components/link-card/link-card-entry.js +16 -24
- package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
- package/dist/components/link-card/link-card-state.svelte.js +2 -2
- package/dist/components/lrd-map-gate.d.ts +4 -11
- package/dist/components/lrd-map-gate.js +5 -11
- package/dist/components/menu/BlockMenu.svelte +20 -81
- package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
- package/dist/components/menu/InlineMenuHost.svelte +191 -0
- package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
- package/dist/components/menu/MenuIcon.svelte +3 -103
- package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
- package/dist/components/menu/SelectionToolbar.svelte +380 -0
- package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
- package/dist/components/menu/clipboard-actions.d.ts +3 -4
- package/dist/components/menu/clipboard-actions.js +3 -4
- package/dist/components/menu/default-context-actions.d.ts +4 -13
- package/dist/components/menu/default-context-actions.js +49 -67
- package/dist/components/menu/flyout-placement.d.ts +2 -2
- package/dist/components/menu/flyout-placement.js +2 -2
- package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
- package/dist/components/menu/menu-presence.svelte.js +19 -0
- package/dist/components/paste-image-arm.d.ts +6 -11
- package/dist/components/paste-image-arm.js +11 -18
- package/dist/components/portal.d.ts +2 -5
- package/dist/components/portal.js +4 -7
- package/dist/core/directive/activate.d.ts +4 -5
- package/dist/core/directive/activate.js +8 -9
- package/dist/core/directive/container-opener.js +13 -12
- package/dist/core/directive/grammar.d.ts +2 -5
- package/dist/core/directive/grammar.js +10 -10
- package/dist/core/directive/kinds.d.ts +4 -7
- package/dist/core/directive/kinds.js +14 -16
- package/dist/core/directive/registry.d.ts +12 -9
- package/dist/core/directive/registry.js +19 -20
- package/dist/core/directive/text-recognizer.d.ts +3 -2
- package/dist/core/directive/text-recognizer.js +5 -9
- package/dist/core/escapable.d.ts +1 -5
- package/dist/core/escapable.js +1 -5
- package/dist/core/inline/backticks.d.ts +3 -4
- package/dist/core/inline/backticks.js +3 -4
- package/dist/core/inline/character-refs.js +2 -1
- package/dist/core/inline/destination-bytes.d.ts +6 -3
- package/dist/core/inline/destination-bytes.js +50 -8
- package/dist/core/inline/entity-widget.d.ts +4 -3
- package/dist/core/inline/entity-widget.js +6 -6
- package/dist/core/inline/format-toggle.d.ts +22 -28
- package/dist/core/inline/format-toggle.js +97 -129
- package/dist/core/inline/html-entities.d.ts +2 -3
- package/dist/core/inline/html-entities.js +2 -3
- package/dist/core/inline/html-tag-grammar.js +6 -2
- package/dist/core/inline/image-dimensions.d.ts +2 -0
- package/dist/core/inline/image-dimensions.js +19 -2
- package/dist/core/inline/image-source-bytes.d.ts +11 -0
- package/dist/core/inline/image-source-bytes.js +71 -0
- package/dist/core/inline/index.d.ts +28 -21
- package/dist/core/inline/index.js +56 -34
- package/dist/core/inline/inline-cache.d.ts +12 -15
- package/dist/core/inline/inline-cache.js +11 -14
- package/dist/core/inline/inline-widgets.d.ts +55 -68
- package/dist/core/inline/inline-widgets.js +55 -58
- package/dist/core/inline/link-destination.d.ts +31 -0
- package/dist/core/inline/link-destination.js +129 -0
- package/dist/core/inline/link-reference-resolver.d.ts +8 -6
- package/dist/core/inline/link-reference-resolver.js +10 -6
- package/dist/core/inline/link-source-bytes.d.ts +31 -0
- package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
- package/dist/core/inline/live-edit/read-back.d.ts +29 -0
- package/dist/core/inline/live-edit/read-back.js +50 -0
- package/dist/core/inline/picture.d.ts +10 -0
- package/dist/core/inline/picture.js +40 -0
- package/dist/core/inline/scan/autolinks.d.ts +7 -8
- package/dist/core/inline/scan/autolinks.js +80 -59
- package/dist/core/inline/scan/brackets.d.ts +2 -2
- package/dist/core/inline/scan/brackets.js +6 -103
- package/dist/core/inline/scan/code-spans.d.ts +4 -0
- package/dist/core/inline/scan/code-spans.js +8 -0
- package/dist/core/inline/scan/emphasis.js +10 -14
- package/dist/core/inline/scan/index.d.ts +3 -1
- package/dist/core/inline/scan/index.js +32 -33
- package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
- package/dist/core/inline/scan/plugin-syntax.js +75 -89
- package/dist/core/inline/scan/scan-state.d.ts +2 -0
- package/dist/core/inline/scan/scan-state.js +1 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
- package/dist/core/inline/scan/simple-nodes.js +2 -5
- package/dist/core/inline/scan/triggers.d.ts +17 -0
- package/dist/core/inline/scan/triggers.js +26 -0
- package/dist/core/inline/scan/url.js +8 -10
- package/dist/core/inline/transparency.d.ts +2 -1
- package/dist/core/inline/transparency.js +33 -17
- package/dist/core/inline/visibility.d.ts +30 -49
- package/dist/core/inline/visibility.js +31 -49
- package/dist/core/inline/walk.d.ts +4 -10
- package/dist/core/inline/walk.js +4 -10
- package/dist/core/inline-render.d.ts +22 -27
- package/dist/core/inline-render.js +51 -60
- package/dist/core/lines.d.ts +67 -26
- package/dist/core/lines.js +164 -33
- package/dist/core/metadata-parity.d.ts +9 -0
- package/dist/core/metadata-parity.js +25 -0
- package/dist/core/node-views.d.ts +7 -6
- package/dist/core/node-views.js +5 -5
- package/dist/core/nodes.d.ts +34 -44
- package/dist/core/nodes.js +4 -12
- package/dist/core/parser.d.ts +27 -34
- package/dist/core/parser.js +53 -67
- package/dist/core/parsers/blockquote.d.ts +5 -8
- package/dist/core/parsers/blockquote.js +11 -10
- package/dist/core/parsers/built-in-openers.d.ts +2 -5
- package/dist/core/parsers/built-in-openers.js +5 -8
- package/dist/core/parsers/fence-syntax.d.ts +36 -7
- package/dist/core/parsers/fence-syntax.js +61 -11
- package/dist/core/parsers/fenced-code.d.ts +16 -0
- package/dist/core/parsers/fenced-code.js +16 -15
- package/dist/core/parsers/heading.d.ts +19 -2
- package/dist/core/parsers/heading.js +50 -2
- package/dist/core/parsers/html-block.d.ts +3 -6
- package/dist/core/parsers/html-block.js +10 -11
- package/dist/core/parsers/indented-code.d.ts +1 -1
- package/dist/core/parsers/indented-code.js +2 -8
- package/dist/core/parsers/link-reference.d.ts +5 -3
- package/dist/core/parsers/link-reference.js +116 -120
- package/dist/core/parsers/list.d.ts +12 -5
- package/dist/core/parsers/list.js +53 -36
- package/dist/core/parsers/paragraph.d.ts +3 -3
- package/dist/core/parsers/paragraph.js +14 -5
- package/dist/core/parsers/table-completion.d.ts +2 -5
- package/dist/core/parsers/table-completion.js +7 -10
- package/dist/core/parsers/table.d.ts +8 -8
- package/dist/core/parsers/table.js +23 -26
- package/dist/core/parsers/thematic-break.js +15 -14
- package/dist/core/paths.d.ts +13 -0
- package/dist/core/paths.js +31 -0
- package/dist/core/terminator-escalation.d.ts +0 -7
- package/dist/core/terminator-escalation.js +5 -8
- package/dist/core/url-policy.d.ts +2 -5
- package/dist/core/url-policy.js +8 -12
- package/dist/cursor/caret-memory.d.ts +34 -0
- package/dist/cursor/caret-memory.js +82 -0
- package/dist/cursor/coordinate-spaces.d.ts +26 -19
- package/dist/cursor/coordinate-spaces.js +32 -20
- package/dist/cursor/dom-walk.d.ts +7 -13
- package/dist/cursor/dom-walk.js +7 -13
- package/dist/cursor/edge-affinity.d.ts +7 -35
- package/dist/cursor/edge-affinity.js +13 -44
- package/dist/cursor/focused-caret.d.ts +6 -8
- package/dist/cursor/focused-caret.js +7 -16
- package/dist/cursor/height-model.d.ts +3 -3
- package/dist/cursor/height-model.js +5 -5
- package/dist/cursor/height-oracle.d.ts +10 -7
- package/dist/cursor/height-oracle.js +26 -75
- package/dist/cursor/observe-resize.d.ts +13 -0
- package/dist/cursor/observe-resize.js +43 -0
- package/dist/cursor/overlay-rects.d.ts +2 -5
- package/dist/cursor/overlay-rects.js +2 -5
- package/dist/cursor/overlay-remeasure.d.ts +6 -7
- package/dist/cursor/overlay-remeasure.js +10 -14
- package/dist/cursor/pending-marks.d.ts +7 -9
- package/dist/cursor/pending-marks.js +6 -27
- package/dist/cursor/point-offset.d.ts +16 -10
- package/dist/cursor/point-offset.js +60 -25
- package/dist/cursor/reveal-source.d.ts +7 -11
- package/dist/cursor/reveal-source.js +10 -18
- package/dist/cursor/scroll-ancestors.d.ts +9 -20
- package/dist/cursor/scroll-ancestors.js +14 -26
- package/dist/cursor/scroll-owner.d.ts +92 -0
- package/dist/cursor/scroll-owner.js +283 -0
- package/dist/cursor/scrollport.d.ts +16 -8
- package/dist/cursor/scrollport.js +28 -5
- package/dist/cursor/sticky-column.d.ts +6 -29
- package/dist/cursor/sticky-column.js +6 -49
- package/dist/cursor/sticky-measure.d.ts +14 -9
- package/dist/cursor/sticky-measure.js +99 -49
- package/dist/cursor/surface-backend.d.ts +41 -0
- package/dist/cursor/surface-backend.js +78 -0
- package/dist/cursor/typography-estimates.d.ts +3 -3
- package/dist/cursor/typography-estimates.js +3 -3
- package/dist/cursor/visual-lines.d.ts +25 -13
- package/dist/cursor/visual-lines.js +72 -28
- package/dist/cursor/widget-edge-snap.d.ts +23 -0
- package/dist/cursor/widget-edge-snap.js +39 -0
- package/dist/cursor/widget-offset.d.ts +111 -102
- package/dist/cursor/widget-offset.js +352 -177
- package/dist/debug/diagnostics-report.d.ts +6 -6
- package/dist/debug/diagnostics-report.js +5 -5
- package/dist/debug/dump-tree.js +2 -2
- package/dist/debug/editor-diagnostics.d.ts +15 -0
- package/dist/debug/editor-diagnostics.js +33 -0
- package/dist/debug/inspect.d.ts +2 -2
- package/dist/debug/inspect.js +4 -4
- package/dist/debug/interaction-trace.d.ts +14 -15
- package/dist/debug/interaction-trace.js +19 -20
- package/dist/debug/operations-log.d.ts +1 -1
- package/dist/debug/operations-log.js +1 -1
- package/dist/decorations/buckets.d.ts +6 -12
- package/dist/decorations/buckets.js +4 -11
- package/dist/decorations/decoration-state.svelte.d.ts +2 -3
- package/dist/decorations/decoration-state.svelte.js +24 -26
- package/dist/decorations/island-dom.d.ts +10 -18
- package/dist/decorations/island-dom.js +25 -50
- package/dist/decorations/reserved-attrs.d.ts +6 -8
- package/dist/decorations/reserved-attrs.js +31 -17
- package/dist/decorations/types.d.ts +6 -7
- package/dist/decorations/types.js +2 -1
- package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
- package/dist/decorations/use-block-decorations.svelte.js +71 -0
- package/dist/decorations/widget-dom.d.ts +3 -3
- package/dist/decorations/widget-dom.js +5 -5
- package/dist/dev-warn.d.ts +5 -2
- package/dist/dev-warn.js +16 -4
- package/dist/editor-actions/ancestry-folds.d.ts +9 -14
- package/dist/editor-actions/ancestry-folds.js +13 -18
- package/dist/editor-actions/block-edit-core.d.ts +49 -22
- package/dist/editor-actions/block-edit-core.js +279 -151
- package/dist/editor-actions/block-edit-scope.d.ts +63 -50
- package/dist/editor-actions/block-edit-scope.js +100 -48
- package/dist/editor-actions/block-edit.d.ts +2 -3
- package/dist/editor-actions/block-edit.js +14 -90
- package/dist/editor-actions/commit/history.d.ts +4 -4
- package/dist/editor-actions/commit/history.js +33 -34
- package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
- package/dist/editor-actions/commit/reading-write-gate.js +56 -0
- package/dist/editor-actions/commit/text-batch.d.ts +7 -11
- package/dist/editor-actions/commit/text-batch.js +6 -7
- package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
- package/dist/editor-actions/commit/undo-controller.js +346 -216
- package/dist/editor-actions/container-block-component.d.ts +32 -51
- package/dist/editor-actions/container-block-component.js +66 -92
- package/dist/editor-actions/container-edit.d.ts +4 -2
- package/dist/editor-actions/container-edit.js +14 -44
- package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
- package/dist/editor-actions/container-exit-overrides.js +19 -21
- package/dist/editor-actions/deps.d.ts +25 -32
- package/dist/editor-actions/enter-completion.d.ts +12 -15
- package/dist/editor-actions/enter-completion.js +49 -51
- package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
- package/dist/editor-actions/focus/focus-dispatch.js +33 -52
- package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
- package/dist/editor-actions/focus/focus-landing.js +29 -14
- package/dist/editor-actions/focus/focus.d.ts +3 -2
- package/dist/editor-actions/focus/focus.js +42 -59
- package/dist/editor-actions/index.d.ts +4 -3
- package/dist/editor-actions/index.js +5 -4
- package/dist/editor-actions/inline-range-commit.d.ts +18 -16
- package/dist/editor-actions/inline-range-commit.js +45 -54
- package/dist/editor-actions/leaf-write.d.ts +11 -0
- package/dist/editor-actions/leaf-write.js +102 -0
- package/dist/editor-actions/list-context.d.ts +9 -10
- package/dist/editor-actions/list-context.js +115 -110
- package/dist/editor-actions/list-overrides.d.ts +13 -5
- package/dist/editor-actions/list-overrides.js +36 -12
- package/dist/editor-actions/merge-fallback.d.ts +10 -16
- package/dist/editor-actions/merge-fallback.js +11 -22
- package/dist/editor-actions/nested/container-actions.d.ts +37 -0
- package/dist/editor-actions/nested/container-actions.js +42 -0
- package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
- package/dist/editor-actions/nested/emptied-container.js +5 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
- package/dist/editor-actions/nested/nested-actions.js +17 -15
- package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
- package/dist/editor-actions/nested/nested-block-edit.js +40 -134
- package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
- package/dist/editor-actions/nested/nested-focus.js +33 -21
- package/dist/editor-actions/paste-coordinator.d.ts +3 -2
- package/dist/editor-actions/paste-coordinator.js +17 -13
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
- package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
- package/dist/editor-actions/plugin/container.d.ts +55 -76
- package/dist/editor-actions/plugin/container.js +105 -186
- package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
- package/dist/editor-actions/plugin/directive-container.js +7 -8
- package/dist/editor-actions/reorder-action.d.ts +7 -12
- package/dist/editor-actions/reorder-action.js +32 -48
- package/dist/editor-actions/reorder-drag.d.ts +12 -8
- package/dist/editor-actions/reorder-drag.js +45 -41
- package/dist/editor-actions/replacement-focus.d.ts +13 -21
- package/dist/editor-actions/replacement-focus.js +32 -33
- package/dist/editor-actions/search-replace.js +71 -67
- package/dist/editor-actions/stored-caret.d.ts +7 -0
- package/dist/editor-actions/stored-caret.js +10 -0
- package/dist/editor-actions/table-context.d.ts +9 -11
- package/dist/editor-actions/table-context.js +70 -93
- package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
- package/dist/editor-actions/unwrap-strategies.js +52 -63
- package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
- package/dist/editor-actions/whole-block-focus-surface.js +43 -53
- package/dist/editor-events.d.ts +25 -29
- package/dist/editor-events.js +17 -28
- package/dist/editor-keys.d.ts +96 -104
- package/dist/editor-keys.js +11 -24
- package/dist/editor-props.d.ts +91 -71
- package/dist/editor-rects.d.ts +23 -34
- package/dist/editor-rects.js +9 -77
- package/dist/env.d.ts +6 -4
- package/dist/env.js +8 -4
- package/dist/index.d.ts +6 -2
- package/dist/index.js +5 -2
- package/dist/inline-menu/inline-menu-session.d.ts +37 -0
- package/dist/inline-menu/inline-menu-session.js +98 -0
- package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
- package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
- package/dist/inline-menu/types.d.ts +77 -0
- package/dist/inline-menu/types.js +7 -0
- package/dist/invariants/child-id-parity.d.ts +23 -0
- package/dist/invariants/child-id-parity.js +39 -0
- package/dist/invariants/commit-paths.d.ts +4 -4
- package/dist/invariants/commit-paths.js +4 -4
- package/dist/invariants/commit-scope.d.ts +4 -4
- package/dist/invariants/commit-scope.js +9 -8
- package/dist/invariants/context-keys.d.ts +2 -5
- package/dist/invariants/context-keys.js +3 -6
- package/dist/invariants/descriptor.d.ts +2 -6
- package/dist/invariants/descriptor.js +2 -6
- package/dist/invariants/inline-transitions.d.ts +9 -16
- package/dist/invariants/inline-transitions.js +10 -18
- package/dist/invariants/install.d.ts +18 -27
- package/dist/invariants/install.js +29 -30
- package/dist/invariants/keeps-a-block.d.ts +7 -0
- package/dist/invariants/keeps-a-block.js +14 -0
- package/dist/invariants/landable-caret.d.ts +5 -7
- package/dist/invariants/landable-caret.js +8 -11
- package/dist/invariants/landing-focus-scroll.d.ts +7 -0
- package/dist/invariants/landing-focus-scroll.js +13 -0
- package/dist/invariants/landing-value.d.ts +13 -0
- package/dist/invariants/landing-value.js +27 -0
- package/dist/invariants/marker-css-parity.d.ts +5 -6
- package/dist/invariants/marker-css-parity.js +11 -12
- package/dist/invariants/measures-in-own-list.d.ts +6 -0
- package/dist/invariants/measures-in-own-list.js +13 -0
- package/dist/invariants/node-shape.d.ts +18 -37
- package/dist/invariants/node-shape.js +123 -79
- package/dist/invariants/open-tail.d.ts +7 -0
- package/dist/invariants/open-tail.js +45 -0
- package/dist/invariants/placement-ends-widget.d.ts +8 -0
- package/dist/invariants/placement-ends-widget.js +13 -0
- package/dist/invariants/registry.d.ts +27 -66
- package/dist/invariants/registry.js +61 -137
- package/dist/invariants/render-fidelity.d.ts +4 -4
- package/dist/invariants/render-fidelity.js +5 -5
- package/dist/invariants/selection-endpoints.d.ts +6 -7
- package/dist/invariants/selection-endpoints.js +18 -16
- package/dist/invariants/single-node-sink.d.ts +4 -5
- package/dist/invariants/single-node-sink.js +4 -5
- package/dist/invariants/snapshot-integrity.d.ts +5 -6
- package/dist/invariants/snapshot-integrity.js +1 -1
- package/dist/invariants/structural-descriptor.d.ts +6 -15
- package/dist/invariants/structural-descriptor.js +6 -15
- package/dist/menu-icons.d.ts +47 -0
- package/dist/menu-icons.js +113 -0
- package/dist/perf/instruments.d.ts +20 -5
- package/dist/perf/instruments.js +35 -15
- package/dist/perf/use-mount-gauge.svelte.js +4 -4
- package/dist/plugin.d.ts +38 -8
- package/dist/plugin.js +102 -74
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
- package/dist/plugins/admonitions/admonition-kind.js +12 -10
- package/dist/plugins/admonitions/convert-document.d.ts +5 -5
- package/dist/plugins/admonitions/convert-document.js +8 -7
- package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
- package/dist/plugins/admonitions/gh-alert.js +21 -22
- package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
- package/dist/plugins/admonitions/github-alert-kind.js +28 -37
- package/dist/plugins/admonitions/index.js +2 -2
- package/dist/plugins/admonitions/kinds.d.ts +1 -1
- package/dist/plugins/admonitions/register.js +11 -2
- package/dist/plugins/details/DetailsBlock.svelte +20 -20
- package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
- package/dist/plugins/details/details-disclosure.svelte.js +6 -7
- package/dist/plugins/details/details-kind.d.ts +6 -7
- package/dist/plugins/details/details-kind.js +44 -59
- package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
- package/dist/plugins/emoji/emoji-recognizer.js +7 -14
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
- package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +3 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
- package/dist/plugins/footnotes/footnote-definition.js +69 -45
- package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
- package/dist/plugins/footnotes/footnote-lookup.js +14 -26
- package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
- package/dist/plugins/footnotes/footnote-numbering.js +22 -31
- package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
- package/dist/plugins/footnotes/footnote-reference.js +8 -13
- package/dist/plugins/footnotes/index.js +2 -3
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
- package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
- package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
- package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/word-char.js +4 -0
- package/dist/plugins/latex/BlockMath.svelte +58 -75
- package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
- package/dist/plugins/latex/MathInline.svelte +10 -9
- package/dist/plugins/latex/flanking.d.ts +1 -0
- package/dist/plugins/latex/flanking.js +3 -0
- package/dist/plugins/latex/index.d.ts +1 -1
- package/dist/plugins/latex/latex-kind.d.ts +4 -4
- package/dist/plugins/latex/latex-kind.js +113 -85
- package/dist/plugins/latex/math-completion.d.ts +1 -1
- package/dist/plugins/latex/math-completion.js +5 -8
- package/dist/plugins/latex/math-layout.d.ts +2 -8
- package/dist/plugins/latex/math-layout.js +0 -9
- package/dist/plugins/latex/math-renderer.d.ts +17 -20
- package/dist/plugins/latex/math-renderer.js +21 -38
- package/dist/plugins/latex/math-source.d.ts +4 -8
- package/dist/plugins/latex/math-source.js +36 -75
- package/dist/plugins/latex/register.d.ts +10 -11
- package/dist/plugins/latex/register.js +24 -10
- package/dist/plugins/latex/renderer.d.ts +9 -10
- package/dist/plugins/latex/renderer.js +9 -24
- package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
- package/dist/plugins/mermaid/index.js +1 -1
- package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
- package/dist/plugins/mermaid/mermaid-kind.js +30 -47
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
- package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
- package/dist/plugins/mermaid/register.d.ts +3 -3
- package/dist/plugins/mermaid/register.js +5 -5
- package/dist/plugins/mermaid/renderer.d.ts +5 -5
- package/dist/plugins/mermaid/renderer.js +8 -11
- package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
- package/dist/plugins/parrot/parrot-plugin.js +3 -3
- package/dist/plugins/slash-commands/filter.d.ts +23 -0
- package/dist/plugins/slash-commands/filter.js +31 -0
- package/dist/plugins/slash-commands/index.d.ts +2 -0
- package/dist/plugins/slash-commands/index.js +2 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
- package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
- package/dist/plugins/slash-commands/slash-source.js +108 -0
- package/dist/plugins/toc/TocBlock.svelte +23 -22
- package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
- package/dist/plugins/toc/heading-outline.d.ts +7 -12
- package/dist/plugins/toc/heading-outline.js +22 -36
- package/dist/plugins/toc/navigation-queue.d.ts +2 -4
- package/dist/plugins/toc/toc-plugin.d.ts +5 -5
- package/dist/plugins/toc/toc-plugin.js +20 -13
- package/dist/presentation-mode.d.ts +15 -23
- package/dist/presentation-mode.js +19 -25
- package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
- package/dist/reactivity/block-list-state.svelte.js +8 -9
- package/dist/reactivity/block-window.svelte.d.ts +12 -6
- package/dist/reactivity/block-window.svelte.js +44 -17
- package/dist/reactivity/child-list.d.ts +34 -0
- package/dist/reactivity/child-list.js +48 -0
- package/dist/reactivity/content-version.svelte.d.ts +4 -7
- package/dist/reactivity/content-version.svelte.js +3 -5
- package/dist/reactivity/hold-across.d.ts +39 -0
- package/dist/reactivity/hold-across.js +57 -0
- package/dist/reactivity/layout-state.svelte.d.ts +27 -0
- package/dist/reactivity/layout-state.svelte.js +51 -0
- package/dist/reactivity/list-tree.d.ts +39 -0
- package/dist/reactivity/list-tree.js +132 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
- package/dist/reactivity/list-windowing.svelte.js +143 -292
- package/dist/reactivity/measure-batch.d.ts +6 -8
- package/dist/reactivity/measure-batch.js +5 -6
- package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
- package/dist/reactivity/publish-ref.svelte.js +21 -85
- package/dist/reactivity/scope-geometry.d.ts +6 -13
- package/dist/reactivity/scope-geometry.js +7 -14
- package/dist/reactivity/state-registry.d.ts +5 -5
- package/dist/reactivity/state-registry.js +11 -15
- package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
- package/dist/reactivity/use-container-windowing.svelte.js +64 -74
- package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
- package/dist/reactivity/use-measured-child.svelte.js +41 -0
- package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
- package/dist/reactivity/use-window-floor.svelte.js +27 -0
- package/dist/reactivity/window-slice.d.ts +4 -4
- package/dist/reactivity/window-slice.js +0 -2
- package/dist/renderer-slot.d.ts +48 -0
- package/dist/renderer-slot.js +85 -0
- package/dist/scan-index.d.ts +4 -4
- package/dist/scan-index.js +4 -4
- package/dist/schema/block-commands.d.ts +69 -54
- package/dist/schema/block-commands.js +91 -104
- package/dist/schema/block-completions.d.ts +16 -19
- package/dist/schema/block-completions.js +25 -32
- package/dist/schema/block-component-registry.d.ts +13 -14
- package/dist/schema/block-component-registry.js +19 -17
- package/dist/schema/block-kind-descriptor.d.ts +234 -168
- package/dist/schema/block-kind-descriptor.js +151 -66
- package/dist/schema/block-openers.d.ts +48 -39
- package/dist/schema/block-openers.js +73 -83
- package/dist/schema/built-in-descriptors.d.ts +3 -5
- package/dist/schema/built-in-descriptors.js +96 -80
- package/dist/schema/child-spans.d.ts +12 -10
- package/dist/schema/child-spans.js +68 -34
- package/dist/schema/closure.d.ts +18 -16
- package/dist/schema/closure.js +24 -14
- package/dist/schema/command-id.d.ts +6 -8
- package/dist/schema/command-id.js +20 -25
- package/dist/schema/commands.d.ts +79 -81
- package/dist/schema/commands.js +156 -116
- package/dist/schema/container-raw.d.ts +51 -11
- package/dist/schema/container-raw.js +143 -14
- package/dist/schema/container-rebuilders.d.ts +17 -15
- package/dist/schema/container-rebuilders.js +30 -22
- package/dist/schema/context-actions.d.ts +25 -13
- package/dist/schema/context-actions.js +32 -17
- package/dist/schema/define-plugin-block.d.ts +8 -6
- package/dist/schema/define-plugin-block.js +6 -4
- package/dist/schema/fenced-code-raw.d.ts +30 -17
- package/dist/schema/fenced-code-raw.js +155 -107
- package/dist/schema/global-commands.d.ts +6 -6
- package/dist/schema/global-commands.js +14 -22
- package/dist/schema/height-estimates.d.ts +31 -0
- package/dist/schema/height-estimates.js +64 -0
- package/dist/schema/inline-construct-policy.d.ts +42 -55
- package/dist/schema/inline-construct-policy.js +36 -35
- package/dist/schema/insert-catalogue.d.ts +30 -0
- package/dist/schema/insert-catalogue.js +95 -0
- package/dist/schema/keybinding-overrides.d.ts +9 -11
- package/dist/schema/keybinding-overrides.js +1 -1
- package/dist/schema/keybindings.d.ts +15 -7
- package/dist/schema/keybindings.js +21 -9
- package/dist/schema/merge-rules.d.ts +5 -7
- package/dist/schema/merge-rules.js +7 -9
- package/dist/schema/opener-priorities.d.ts +4 -4
- package/dist/schema/opener-priorities.js +4 -4
- package/dist/schema/operations.d.ts +9 -11
- package/dist/schema/operations.js +3 -3
- package/dist/schema/page-role.d.ts +14 -0
- package/dist/schema/page-role.js +19 -0
- package/dist/schema/plugin-activation.d.ts +4 -6
- package/dist/schema/plugin-activation.js +12 -10
- package/dist/schema/plugin-editor-context.d.ts +25 -10
- package/dist/schema/plugin-editor-context.js +40 -9
- package/dist/schema/plugin-install.d.ts +49 -17
- package/dist/schema/plugin-install.js +51 -25
- package/dist/schema/plugin-kind.d.ts +12 -8
- package/dist/schema/plugin-kind.js +35 -42
- package/dist/schema/plugin-name.js +3 -3
- package/dist/schema/plugin-registry.d.ts +54 -0
- package/dist/schema/plugin-registry.js +70 -0
- package/dist/schema/reading.d.ts +23 -0
- package/dist/schema/reading.js +7 -0
- package/dist/schema/register-once.d.ts +3 -5
- package/dist/schema/register-once.js +7 -16
- package/dist/schema/registration-checks.d.ts +12 -16
- package/dist/schema/registration-checks.js +35 -51
- package/dist/schema/registration-pairs.d.ts +54 -0
- package/dist/schema/registration-pairs.js +48 -0
- package/dist/schema/registration-pending.d.ts +8 -12
- package/dist/schema/registration-pending.js +9 -9
- package/dist/schema/registry-reset.d.ts +8 -4
- package/dist/schema/registry-reset.js +13 -26
- package/dist/schema/registry-view.d.ts +25 -13
- package/dist/schema/registry-view.js +26 -20
- package/dist/schema/reserved-chords.d.ts +9 -10
- package/dist/schema/reserved-chords.js +73 -78
- package/dist/schema/reserved-chrome.d.ts +12 -11
- package/dist/schema/reserved-chrome.js +15 -11
- package/dist/schema/setext-raw.d.ts +13 -0
- package/dist/schema/setext-raw.js +33 -0
- package/dist/schema/stored-as.d.ts +20 -0
- package/dist/schema/stored-as.js +6 -0
- package/dist/schema/table-cell-raw.d.ts +18 -7
- package/dist/schema/table-cell-raw.js +28 -7
- package/dist/schema/whole-block-unit.d.ts +5 -4
- package/dist/schema/whole-block-unit.js +5 -4
- package/dist/search/document-scan.d.ts +3 -3
- package/dist/search/document-scan.js +2 -2
- package/dist/search/matcher.d.ts +1 -1
- package/dist/search/regex-executor.d.ts +5 -6
- package/dist/search/regex-executor.js +6 -8
- package/dist/search/replace.d.ts +2 -5
- package/dist/search/replace.js +2 -5
- package/dist/search/search-state.svelte.d.ts +5 -5
- package/dist/search/search-state.svelte.js +12 -16
- package/dist/selection/autoscroll.d.ts +6 -9
- package/dist/selection/block-hit-test.d.ts +16 -24
- package/dist/selection/block-hit-test.js +29 -22
- package/dist/selection/caret-doors.d.ts +15 -14
- package/dist/selection/caret-doors.js +37 -26
- package/dist/selection/caret-landing.d.ts +62 -0
- package/dist/selection/caret-landing.js +157 -0
- package/dist/selection/caret-restore.d.ts +17 -10
- package/dist/selection/caret-restore.js +10 -22
- package/dist/selection/caret-target.d.ts +30 -0
- package/dist/selection/caret-target.js +84 -0
- package/dist/selection/char-endpoint-snap.d.ts +6 -10
- package/dist/selection/char-endpoint-snap.js +8 -14
- package/dist/selection/clipboard-text.d.ts +5 -12
- package/dist/selection/clipboard-text.js +69 -172
- package/dist/selection/covered-block.d.ts +6 -8
- package/dist/selection/covered-block.js +8 -19
- package/dist/selection/cross-block/clipboard.d.ts +3 -2
- package/dist/selection/cross-block/clipboard.js +13 -4
- package/dist/selection/cross-block/dispatch.d.ts +47 -43
- package/dist/selection/cross-block/dispatch.js +12 -23
- package/dist/selection/cross-block/format-range.d.ts +18 -21
- package/dist/selection/cross-block/format-range.js +104 -103
- package/dist/selection/cross-block/format-toggle.d.ts +10 -15
- package/dist/selection/cross-block/format-toggle.js +28 -33
- package/dist/selection/cross-block/keydown.d.ts +4 -4
- package/dist/selection/cross-block/keydown.js +93 -152
- package/dist/selection/cross-block/ops.d.ts +19 -34
- package/dist/selection/cross-block/ops.js +110 -95
- package/dist/selection/cross-block/paste.d.ts +2 -3
- package/dist/selection/cross-block/paste.js +61 -104
- package/dist/selection/cross-block/pointer.d.ts +17 -15
- package/dist/selection/cross-block/pointer.js +74 -25
- package/dist/selection/cross-block/type-replace.d.ts +4 -6
- package/dist/selection/cross-block/type-replace.js +53 -146
- package/dist/selection/dead-space-caret.d.ts +20 -28
- package/dist/selection/dead-space-caret.js +79 -87
- package/dist/selection/drag-pointer.d.ts +22 -5
- package/dist/selection/drag-pointer.js +63 -31
- package/dist/selection/gap-caret.d.ts +17 -28
- package/dist/selection/gap-caret.js +14 -26
- package/dist/selection/grid-selection.d.ts +12 -0
- package/dist/selection/grid-selection.js +22 -0
- package/dist/selection/keyboard-extend.d.ts +27 -39
- package/dist/selection/keyboard-extend.js +94 -116
- package/dist/selection/multi-click.d.ts +37 -0
- package/dist/selection/multi-click.js +197 -0
- package/dist/selection/native-bridge.d.ts +30 -37
- package/dist/selection/native-bridge.js +80 -100
- package/dist/selection/nearest-block.d.ts +17 -12
- package/dist/selection/nearest-block.js +37 -18
- package/dist/selection/path-lookup.d.ts +31 -14
- package/dist/selection/path-lookup.js +110 -20
- package/dist/selection/path-math.d.ts +9 -11
- package/dist/selection/path-math.js +5 -7
- package/dist/selection/pointer-gesture.d.ts +9 -0
- package/dist/selection/pointer-gesture.js +11 -0
- package/dist/selection/pointer-session.d.ts +10 -16
- package/dist/selection/pointer-session.js +6 -7
- package/dist/selection/primitives.d.ts +64 -33
- package/dist/selection/primitives.js +61 -53
- package/dist/selection/range-coverage.d.ts +94 -0
- package/dist/selection/range-coverage.js +365 -0
- package/dist/selection/range-delete-ceremony.d.ts +28 -74
- package/dist/selection/range-delete-ceremony.js +100 -141
- package/dist/selection/range-delete-chrome.d.ts +20 -33
- package/dist/selection/range-delete-chrome.js +53 -78
- package/dist/selection/range-delete-table-coverage.d.ts +11 -25
- package/dist/selection/range-delete-table-coverage.js +42 -112
- package/dist/selection/range-delete-table.d.ts +14 -12
- package/dist/selection/range-delete-table.js +106 -310
- package/dist/selection/range-delete.d.ts +18 -19
- package/dist/selection/range-delete.js +83 -123
- package/dist/selection/round-trip-restore.d.ts +18 -0
- package/dist/selection/round-trip-restore.js +19 -0
- package/dist/selection/selection-announcer.d.ts +17 -0
- package/dist/selection/selection-announcer.js +25 -0
- package/dist/selection/selection-description.d.ts +4 -3
- package/dist/selection/selection-description.js +5 -4
- package/dist/selection/selection-drop.d.ts +52 -0
- package/dist/selection/selection-drop.js +317 -0
- package/dist/selection/selection-restore.d.ts +20 -33
- package/dist/selection/selection-restore.js +21 -44
- package/dist/selection/selection-state.svelte.d.ts +50 -42
- package/dist/selection/selection-state.svelte.js +144 -98
- package/dist/selection/shared-keydown.d.ts +22 -27
- package/dist/selection/shared-keydown.js +25 -45
- package/dist/selection/table-endpoint-snap.d.ts +17 -41
- package/dist/selection/table-endpoint-snap.js +54 -80
- package/dist/selection/table-rect-extend.d.ts +3 -6
- package/dist/selection/table-rect-extend.js +19 -14
- package/dist/styles/editor-theme.css +75 -53
- package/dist/styles/editor.css +248 -139
- package/dist/testing/conformance-core.d.ts +50 -18
- package/dist/testing/conformance-core.js +88 -50
- package/dist/testing/container-conformance.d.ts +48 -84
- package/dist/testing/container-conformance.js +159 -285
- package/dist/testing/headless-actions.d.ts +34 -19
- package/dist/testing/headless-actions.js +116 -65
- package/dist/testing/headless-block-list.svelte.d.ts +16 -0
- package/dist/testing/headless-block-list.svelte.js +22 -0
- package/dist/testing/inline-conformance.d.ts +15 -22
- package/dist/testing/inline-conformance.js +131 -148
- package/dist/testing/kind-conformance.d.ts +19 -24
- package/dist/testing/kind-conformance.js +204 -117
- package/dist/testing/kit-reading.d.ts +7 -0
- package/dist/testing/kit-reading.js +16 -0
- package/dist/testing/mount-dom-stubs.d.ts +4 -5
- package/dist/testing/mount-dom-stubs.js +8 -5
- package/dist/testing/parse-convergence.d.ts +10 -10
- package/dist/testing/parse-convergence.js +14 -49
- package/dist/testing.d.ts +13 -9
- package/dist/testing.js +28 -38
- package/dist/tree-operations/blockquote.d.ts +8 -14
- package/dist/tree-operations/blockquote.js +25 -45
- package/dist/tree-operations/chain-rebuild.d.ts +34 -25
- package/dist/tree-operations/chain-rebuild.js +115 -52
- package/dist/tree-operations/children.d.ts +5 -9
- package/dist/tree-operations/children.js +7 -11
- package/dist/tree-operations/cleanup.d.ts +6 -7
- package/dist/tree-operations/cleanup.js +14 -11
- package/dist/tree-operations/clone.js +5 -4
- package/dist/tree-operations/container-lift.d.ts +10 -5
- package/dist/tree-operations/container-lift.js +20 -14
- package/dist/tree-operations/container-offsets.d.ts +22 -0
- package/dist/tree-operations/container-offsets.js +89 -0
- package/dist/tree-operations/content-write.d.ts +52 -29
- package/dist/tree-operations/content-write.js +155 -110
- package/dist/tree-operations/index.d.ts +4 -4
- package/dist/tree-operations/index.js +4 -4
- package/dist/tree-operations/keep-one-block.d.ts +10 -0
- package/dist/tree-operations/keep-one-block.js +19 -0
- package/dist/tree-operations/leaf-range.d.ts +33 -0
- package/dist/tree-operations/leaf-range.js +67 -0
- package/dist/tree-operations/list/empty-check.d.ts +2 -3
- package/dist/tree-operations/list/empty-check.js +4 -4
- package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
- package/dist/tree-operations/list/exit-replacement.js +4 -9
- package/dist/tree-operations/list/item-partition.d.ts +2 -2
- package/dist/tree-operations/list/item-partition.js +2 -2
- package/dist/tree-operations/list/list-builders.d.ts +18 -16
- package/dist/tree-operations/list/list-builders.js +59 -30
- package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
- package/dist/tree-operations/list/ordered-markers.js +7 -16
- package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
- package/dist/tree-operations/list/reconcile-task.js +80 -23
- package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
- package/dist/tree-operations/list/sublist-separator.js +20 -27
- package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
- package/dist/tree-operations/list/task-paragraph.js +54 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
- package/dist/tree-operations/list/unwrap-merge.js +44 -79
- package/dist/tree-operations/node-ops.d.ts +30 -52
- package/dist/tree-operations/node-ops.js +152 -218
- package/dist/tree-operations/node-primitives.d.ts +44 -31
- package/dist/tree-operations/node-primitives.js +84 -60
- package/dist/tree-operations/open-tail.d.ts +25 -0
- package/dist/tree-operations/open-tail.js +100 -0
- package/dist/tree-operations/parse-block.d.ts +15 -2
- package/dist/tree-operations/parse-block.js +19 -4
- package/dist/tree-operations/paste/apply.d.ts +7 -8
- package/dist/tree-operations/paste/apply.js +33 -63
- package/dist/tree-operations/paste/body-write.d.ts +8 -6
- package/dist/tree-operations/paste/body-write.js +13 -14
- package/dist/tree-operations/paste/container-match.d.ts +7 -10
- package/dist/tree-operations/paste/container-match.js +76 -58
- package/dist/tree-operations/paste/container-paste.d.ts +3 -3
- package/dist/tree-operations/paste/container-paste.js +3 -3
- package/dist/tree-operations/paste/dispatch.d.ts +26 -29
- package/dist/tree-operations/paste/dispatch.js +68 -53
- package/dist/tree-operations/paste/focus-target.d.ts +11 -14
- package/dist/tree-operations/paste/focus-target.js +13 -18
- package/dist/tree-operations/paste/hooks.d.ts +7 -12
- package/dist/tree-operations/paste/hooks.js +49 -46
- package/dist/tree-operations/paste/line-ending.d.ts +11 -0
- package/dist/tree-operations/paste/line-ending.js +32 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
- package/dist/tree-operations/paste/list-absorb.js +17 -19
- package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
- package/dist/tree-operations/paste/list-break-out.js +24 -32
- package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
- package/dist/tree-operations/paste/parent-scope.js +9 -16
- package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
- package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
- package/dist/tree-operations/paste/paste-replacement.js +73 -42
- package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
- package/dist/tree-operations/paste/paste-transforms.js +18 -27
- package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
- package/dist/tree-operations/paste/replacement-parse.js +24 -0
- package/dist/tree-operations/paste/strategy.d.ts +1 -1
- package/dist/tree-operations/paste/strategy.js +1 -1
- package/dist/tree-operations/paste/table-slice.js +15 -10
- package/dist/tree-operations/paste-surfaces.d.ts +18 -29
- package/dist/tree-operations/paste-surfaces.js +14 -10
- package/dist/tree-operations/path-mutate.d.ts +7 -8
- package/dist/tree-operations/path-mutate.js +4 -4
- package/dist/tree-operations/reorder-unit.d.ts +4 -5
- package/dist/tree-operations/reorder-unit.js +5 -6
- package/dist/tree-operations/reorder.d.ts +7 -9
- package/dist/tree-operations/reorder.js +39 -40
- package/dist/tree-operations/settle.d.ts +42 -53
- package/dist/tree-operations/settle.js +241 -162
- package/dist/tree-operations/sharing.d.ts +5 -5
- package/dist/tree-operations/splice-many.d.ts +5 -5
- package/dist/tree-operations/splice-many.js +5 -5
- package/dist/tree-operations/stored-as.d.ts +13 -0
- package/dist/tree-operations/stored-as.js +48 -0
- package/dist/tree-operations/structural-change.d.ts +11 -15
- package/dist/tree-operations/structural-change.js +10 -14
- package/dist/tree-operations/structural-suffix.d.ts +22 -0
- package/dist/tree-operations/structural-suffix.js +61 -0
- package/dist/tree-operations/sub-table-copy.d.ts +7 -0
- package/dist/tree-operations/sub-table-copy.js +40 -36
- package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
- package/dist/tree-operations/table-grid-clipboard.js +11 -36
- package/dist/tree-operations/table-mutations.d.ts +7 -3
- package/dist/tree-operations/table-mutations.js +45 -9
- package/dist/tree-operations/unshare.d.ts +11 -15
- package/dist/tree-operations/unshare.js +15 -17
- package/dist/undo/manager.js +1 -1
- package/dist/undo/types.d.ts +2 -2
- package/docs/guide/consumer-guide.md +329 -205
- package/docs/guide/directives.md +7 -7
- package/docs/guide/plugin-api.md +267 -183
- package/docs/guide/plugin-guide.md +341 -235
- package/docs/guide/plugin-testing.md +96 -82
- package/package.json +17 -21
- package/dist/ambient/ambient-cursor.d.ts +0 -41
- package/dist/ambient/ambient-cursor.js +0 -120
- package/dist/components/blocks/code/code-paste.d.ts +0 -24
- package/dist/components/blocks/code/code-paste.js +0 -21
- package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
- package/dist/components/blocks/table/cell-clipboard.js +0 -67
- package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
- package/dist/components/blocks/text/hidden-suffix.js +0 -15
- package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
- package/dist/components/image/image-source-bytes.d.ts +0 -15
- package/dist/components/image/image-source-bytes.js +0 -80
- package/dist/cursor/content-offsets.d.ts +0 -29
- package/dist/cursor/content-offsets.js +0 -151
- package/dist/cursor/reveal-anchor.d.ts +0 -30
- package/dist/cursor/reveal-anchor.js +0 -31
- package/dist/invariants/split-landing.d.ts +0 -8
- package/dist/invariants/split-landing.js +0 -15
- package/dist/selection/double-click-trim.d.ts +0 -17
- package/dist/selection/double-click-trim.js +0 -57
- package/dist/tree-operations/list/terminator.d.ts +0 -17
- package/dist/tree-operations/list/terminator.js +0 -60
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
- package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* for the image, whose per-instance builder is injected per render.
|
|
2
|
+
* The one registry of which inline kinds render as live widgets (non-editable spans marked
|
|
3
|
+
* `[data-inline-widget]`) and how each is recognized. DOM building has three routes: a
|
|
4
|
+
* `buildWidget` for core-built widgets, a `component` mounted through the injected portal
|
|
5
|
+
* builder, or neither for the image, whose builder is injected per render.
|
|
7
6
|
*/
|
|
7
|
+
import { isBuiltinInlineKind } from '../nodes';
|
|
8
8
|
import { isLiveHtmlTag, buildLiveHtmlWidget } from './raw-html-widget';
|
|
9
9
|
import { entityRendersGlyph, buildEntityWidget } from './entity-widget';
|
|
10
|
-
import {
|
|
10
|
+
import { createInlineKindRegistry } from '../../schema/plugin-registry';
|
|
11
11
|
import { inlineDescendants } from './walk';
|
|
12
12
|
/**
|
|
13
|
-
* The
|
|
14
|
-
*
|
|
13
|
+
* The widget shell every core builder shares. Its `data-*` attributes are the only handle the
|
|
14
|
+
* DOM-to-offset traversal has, so the shell is created here once and builders add only the body.
|
|
15
15
|
*/
|
|
16
16
|
export function mintWidgetShell(className, node) {
|
|
17
17
|
const shell = document.createElement('span');
|
|
@@ -22,8 +22,8 @@ export function mintWidgetShell(className, node) {
|
|
|
22
22
|
shell.setAttribute('contenteditable', 'false');
|
|
23
23
|
return shell;
|
|
24
24
|
}
|
|
25
|
-
/** The raw byte range a shell carries, or null when the attributes are absent or malformed
|
|
26
|
-
* {@link mintWidgetShell}'s inverse,
|
|
25
|
+
/** The raw byte range a shell carries, or null when the attributes are absent or malformed:
|
|
26
|
+
* {@link mintWidgetShell}'s inverse, kept beside it so the two move together. */
|
|
27
27
|
export function widgetSourceRange(el) {
|
|
28
28
|
const start = parseInt(el.getAttribute('data-source-start') ?? '', 10);
|
|
29
29
|
const end = parseInt(el.getAttribute('data-source-end') ?? '', 10);
|
|
@@ -31,12 +31,8 @@ export function widgetSourceRange(el) {
|
|
|
31
31
|
return null;
|
|
32
32
|
return { start, end };
|
|
33
33
|
}
|
|
34
|
-
/**
|
|
35
|
-
*
|
|
36
|
-
* widget deciding whether to act: a Ctrl/Cmd chord while editing, a plain click in reading
|
|
37
|
-
* mode, where there is no caret for a plain click to place. The link click's rule
|
|
38
|
-
* (`Editor.svelte`), applied to widgets.
|
|
39
|
-
*/
|
|
34
|
+
/** Shared by the editable element deciding whether to show the source and the widget deciding
|
|
35
|
+
* whether to act. Reading mode has no caret to place, so a plain click activates, as for links. */
|
|
40
36
|
export function isWidgetActivationClick(modified, mode) {
|
|
41
37
|
return modified || mode === 'reading';
|
|
42
38
|
}
|
|
@@ -44,59 +40,69 @@ export function isWidgetActivationClick(modified, mode) {
|
|
|
44
40
|
* against the type's own members rather than a copy that ages out of step with it. */
|
|
45
41
|
export const DELETE_GRANULARITIES = ['atomic', 'select-then-delete'];
|
|
46
42
|
export const ON_EDGE_POLICIES = ['select', 'step-over'];
|
|
47
|
-
const registry =
|
|
43
|
+
const registry = createInlineKindRegistry({
|
|
44
|
+
label: 'registerInlineWidgetKind',
|
|
45
|
+
isBuiltin: isBuiltinInlineKind
|
|
46
|
+
});
|
|
47
|
+
/** The kind's descriptor under an editor's grammar: absent where the editor left out the plugin
|
|
48
|
+
* the entry answers to, so a node of that kind renders as its source. */
|
|
49
|
+
function widgetOf(kind, grammar) {
|
|
50
|
+
return registry.get(kind, grammar.activation);
|
|
51
|
+
}
|
|
48
52
|
export function registerInlineWidgetKind(kind, descriptor) {
|
|
49
53
|
if (descriptor.component && descriptor.buildWidget) {
|
|
50
|
-
throw new Error(`registerInlineWidgetKind: "${kind}" declares both a component and a buildWidget
|
|
54
|
+
throw new Error(`registerInlineWidgetKind: "${kind}" declares both a component and a buildWidget; ` +
|
|
51
55
|
`a widget kind renders through exactly one. Drop one.`);
|
|
52
56
|
}
|
|
53
|
-
|
|
57
|
+
registry.register(kind, descriptor, `registerInlineWidgetKind: "${kind}" is already registered. Inline-widget kinds are ` +
|
|
54
58
|
`register-once — a re-registration would clobber a built-in (image/rawHtml).`);
|
|
55
59
|
}
|
|
56
|
-
/**
|
|
57
|
-
*
|
|
58
|
-
* (components/built-in-blocks.ts) attaches behavior here that would otherwise make a core
|
|
59
|
-
* registration import a downstream layer. Throws for an unregistered kind.
|
|
60
|
-
*/
|
|
60
|
+
/** Lets the editor layer (`components/built-in-blocks.ts`) attach editing behavior without a core
|
|
61
|
+
* registration importing it. Throws for an unregistered kind. */
|
|
61
62
|
export function augmentInlineWidgetKind(kind, editing) {
|
|
62
|
-
const descriptor = registry.
|
|
63
|
+
const descriptor = registry.getIgnoringActivation(kind);
|
|
63
64
|
if (!descriptor) {
|
|
64
|
-
throw new Error(`augmentInlineWidgetKind: "${kind}" is not registered
|
|
65
|
+
throw new Error(`augmentInlineWidgetKind: "${kind}" is not registered; register the widget kind before ` +
|
|
65
66
|
`augmenting its editing policy.`);
|
|
66
67
|
}
|
|
67
68
|
descriptor.editing = { ...descriptor.editing, ...editing };
|
|
68
69
|
}
|
|
70
|
+
// Each lookup below takes the editor's grammar, which leaves out the plugins it did not list.
|
|
71
|
+
/** Whether the kind renders as a widget under the editor's grammar, whatever one node's bytes. */
|
|
72
|
+
export function isInlineWidgetKind(kind, grammar) {
|
|
73
|
+
return widgetOf(kind, grammar) !== undefined;
|
|
74
|
+
}
|
|
69
75
|
/** Kind-level recognition, independent of per-block render policy (renderImagesAsWidgets). */
|
|
70
|
-
export function isInlineWidget(node, raw) {
|
|
71
|
-
const descriptor =
|
|
76
|
+
export function isInlineWidget(node, raw, grammar) {
|
|
77
|
+
const descriptor = widgetOf(node.kind, grammar);
|
|
72
78
|
return descriptor ? descriptor.isWidget(node, raw) : false;
|
|
73
79
|
}
|
|
74
|
-
export function getInlineWidgetEditing(kind) {
|
|
75
|
-
return
|
|
80
|
+
export function getInlineWidgetEditing(kind, grammar) {
|
|
81
|
+
return widgetOf(kind, grammar)?.editing;
|
|
76
82
|
}
|
|
77
|
-
|
|
78
|
-
|
|
83
|
+
/** A kind the caret treats as one character: it steps over in one keypress, has a column of its
|
|
84
|
+
* own, and a click on its glyph names an edge rather than selecting the widget whole. */
|
|
85
|
+
export function isCharacterLikeWidget(kind, grammar) {
|
|
86
|
+
return getInlineWidgetEditing(kind, grammar)?.onEdge === 'step-over';
|
|
79
87
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
*/
|
|
85
|
-
export function flattenInlineWidgets(nodes, raw) {
|
|
88
|
+
export function getInlineWidgetComponent(kind, grammar) {
|
|
89
|
+
return widgetOf(kind, grammar)?.component;
|
|
90
|
+
}
|
|
91
|
+
/** Descends into non-widget parents (the `image` inside `[![alt][ref]][repo]`) but never into a
|
|
92
|
+
* widget, whose children are atomic. `raw` is the enclosing block's source. */
|
|
93
|
+
export function flattenInlineWidgets(nodes, raw, grammar) {
|
|
86
94
|
const out = [];
|
|
87
|
-
|
|
88
|
-
|
|
95
|
+
const isWidget = (node) => isInlineWidget(node, raw, grammar);
|
|
96
|
+
for (const node of inlineDescendants(nodes, (parent) => !isWidget(parent))) {
|
|
97
|
+
if (isWidget(node))
|
|
89
98
|
out.push(node);
|
|
90
99
|
}
|
|
91
100
|
return out;
|
|
92
101
|
}
|
|
93
|
-
/**
|
|
94
|
-
*
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
*/
|
|
98
|
-
export function buildCoreInlineWidget(node, raw, buildPortalWidget) {
|
|
99
|
-
const descriptor = registry.get(node.kind);
|
|
102
|
+
/** A `component` kind mounts through the injected `buildPortalWidget`, keeping `core/` free of
|
|
103
|
+
* Svelte. Null for a non-widget, an image (built per render), or a missing or failed portal. */
|
|
104
|
+
export function buildCoreInlineWidget(node, raw, buildPortalWidget, grammar) {
|
|
105
|
+
const descriptor = widgetOf(node.kind, grammar);
|
|
100
106
|
if (!descriptor || !descriptor.isWidget(node, raw))
|
|
101
107
|
return null;
|
|
102
108
|
if (descriptor.component)
|
|
@@ -113,19 +119,10 @@ registerInlineWidgetKind('rawHtml', {
|
|
|
113
119
|
isWidget: (node, raw) => isLiveHtmlTag(raw.slice(node.start, node.end)),
|
|
114
120
|
buildWidget: (node) => buildLiveHtmlWidget(node)
|
|
115
121
|
});
|
|
116
|
-
//
|
|
117
|
-
//
|
|
122
|
+
// Only an entity that draws a glyph becomes a widget: an invisible one keeps its literal-source
|
|
123
|
+
// span, or the caret would step over something it cannot see.
|
|
118
124
|
registerInlineWidgetKind('entityReference', {
|
|
119
125
|
isWidget: (node) => entityRendersGlyph(node.decoded),
|
|
120
126
|
buildWidget: (node) => buildEntityWidget(node),
|
|
121
127
|
editing: { deleteGranularity: 'atomic', onEdge: 'step-over' }
|
|
122
128
|
});
|
|
123
|
-
// Must stay below the built-in registrations: it snapshots what the test reset may not drop.
|
|
124
|
-
const BUILTIN_INLINE_WIDGET_KINDS = new Set(registry.keys());
|
|
125
|
-
/** Test-only. Removes every plugin-registered inline-widget kind; built-ins survive. */
|
|
126
|
-
export function __resetInlineWidgetsForTests() {
|
|
127
|
-
for (const kind of registry.keys()) {
|
|
128
|
-
if (!BUILTIN_INLINE_WIDGET_KINDS.has(kind))
|
|
129
|
-
registry.delete(kind);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The link label, destination and title grammar (CommonMark §6.3), read by inline and reference
|
|
3
|
+
* links and by link reference definitions (§4.7) alike. Each function returns where its span ends
|
|
4
|
+
* and, for a destination or title, the value the spec derives from it; the whitespace between the
|
|
5
|
+
* parts is each caller's rule. The inverse writer is `destination-bytes.ts`.
|
|
6
|
+
*/
|
|
7
|
+
export interface LinkDestination {
|
|
8
|
+
/** Escapes and entities resolved, then percent-encoded. */
|
|
9
|
+
url: string;
|
|
10
|
+
end: number;
|
|
11
|
+
}
|
|
12
|
+
export interface LinkTitle {
|
|
13
|
+
/** Escapes and entities resolved. */
|
|
14
|
+
title: string;
|
|
15
|
+
end: number;
|
|
16
|
+
}
|
|
17
|
+
/** A scan that reached `end` inside an open label or title; more text may still close it. */
|
|
18
|
+
export declare const SPAN_OPEN = -2;
|
|
19
|
+
/** The offset just past the label's `]`, or null. */
|
|
20
|
+
export declare function parseLinkLabel(raw: string, pos: number, end: number): number | null;
|
|
21
|
+
/** Where the label opening at `pos` ends: past its `]`, `SPAN_OPEN`, or negative for no label (over
|
|
22
|
+
* 999 characters, or an unescaped `[`). `from` resumes an open scan at the `end` it stopped on. */
|
|
23
|
+
export declare function scanLinkLabel(raw: string, pos: number, end: number, from: number): number;
|
|
24
|
+
/** A bare destination is empty only just before a `)`, which only an inline link can close on. */
|
|
25
|
+
export declare function parseLinkDestination(raw: string, pos: number, end: number): LinkDestination | null;
|
|
26
|
+
export declare function parseLinkTitle(raw: string, pos: number, end: number): LinkTitle | null;
|
|
27
|
+
/** Where the title opening at `pos` ends: past its closer, `SPAN_OPEN`, or negative for no title.
|
|
28
|
+
* `from` resumes an open scan at the `end` it stopped on. */
|
|
29
|
+
export declare function scanLinkTitle(raw: string, pos: number, end: number, from: number): number;
|
|
30
|
+
/** The value of the title spanning `pos` to `titleEnd`, a span `scanLinkTitle` accepted. */
|
|
31
|
+
export declare function linkTitleValue(raw: string, pos: number, titleEnd: number): string;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The link label, destination and title grammar (CommonMark §6.3), read by inline and reference
|
|
3
|
+
* links and by link reference definitions (§4.7) alike. Each function returns where its span ends
|
|
4
|
+
* and, for a destination or title, the value the spec derives from it; the whitespace between the
|
|
5
|
+
* parts is each caller's rule. The inverse writer is `destination-bytes.ts`.
|
|
6
|
+
*/
|
|
7
|
+
import { ESCAPABLE_PUNCTUATION } from '../escapable';
|
|
8
|
+
import { processDestination, unescapeSpecString } from './scan/url';
|
|
9
|
+
/** A scan that reached `end` inside an open label or title; more text may still close it. */
|
|
10
|
+
export const SPAN_OPEN = -2;
|
|
11
|
+
const NOT_A_SPAN = -1;
|
|
12
|
+
// ── Labels ──────────────────────────────────────────────────────────────────
|
|
13
|
+
/** The offset just past the label's `]`, or null. */
|
|
14
|
+
export function parseLinkLabel(raw, pos, end) {
|
|
15
|
+
const labelEnd = scanLinkLabel(raw, pos, end, pos + 1);
|
|
16
|
+
return labelEnd < 0 ? null : labelEnd;
|
|
17
|
+
}
|
|
18
|
+
/** Where the label opening at `pos` ends: past its `]`, `SPAN_OPEN`, or negative for no label (over
|
|
19
|
+
* 999 characters, or an unescaped `[`). `from` resumes an open scan at the `end` it stopped on. */
|
|
20
|
+
export function scanLinkLabel(raw, pos, end, from) {
|
|
21
|
+
if (raw[pos] !== '[')
|
|
22
|
+
return NOT_A_SPAN;
|
|
23
|
+
let i = from;
|
|
24
|
+
while (i < end) {
|
|
25
|
+
if (i - pos > 1000)
|
|
26
|
+
return NOT_A_SPAN;
|
|
27
|
+
const ch = raw[i];
|
|
28
|
+
if (ch === ']')
|
|
29
|
+
return i + 1;
|
|
30
|
+
if (ch === '[')
|
|
31
|
+
return NOT_A_SPAN;
|
|
32
|
+
i += ch === '\\' ? 2 : 1;
|
|
33
|
+
}
|
|
34
|
+
return i - pos > 1000 ? NOT_A_SPAN : SPAN_OPEN;
|
|
35
|
+
}
|
|
36
|
+
// ── Destinations ────────────────────────────────────────────────────────────
|
|
37
|
+
/** A bare destination is empty only just before a `)`, which only an inline link can close on. */
|
|
38
|
+
export function parseLinkDestination(raw, pos, end) {
|
|
39
|
+
if (pos < end && raw[pos] === '<')
|
|
40
|
+
return parseAngleDestination(raw, pos, end);
|
|
41
|
+
return parseBareDestination(raw, pos, end);
|
|
42
|
+
}
|
|
43
|
+
function parseAngleDestination(raw, pos, end) {
|
|
44
|
+
let i = pos + 1;
|
|
45
|
+
while (i < end) {
|
|
46
|
+
const ch = raw[i];
|
|
47
|
+
if (ch === '>')
|
|
48
|
+
return { url: processDestination(raw.slice(pos + 1, i)), end: i + 1 };
|
|
49
|
+
if (ch === '<' || ch === '\n' || ch === '\u0000')
|
|
50
|
+
return null;
|
|
51
|
+
if (ch === '\\') {
|
|
52
|
+
// A backslash escapes no line terminator, JavaScript's four included.
|
|
53
|
+
const next = i + 1 < end ? raw[i + 1] : '';
|
|
54
|
+
if (next === '' || next === '\n' || next === '\r' || next === '\u2028' || next === '\u2029') {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
i += 2;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
i++;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
// commonmark.js's terminator set: other control characters, and U+00A0, are destination content.
|
|
66
|
+
const DESTINATION_TERMINATORS = new Set(' \t\n\u000b\u000c\r');
|
|
67
|
+
/** Parentheses must balance, at any depth. */
|
|
68
|
+
function parseBareDestination(raw, pos, end) {
|
|
69
|
+
let i = pos;
|
|
70
|
+
let openParens = 0;
|
|
71
|
+
while (i < end) {
|
|
72
|
+
const ch = raw[i];
|
|
73
|
+
if (ch === '\\' && i + 1 < end && ESCAPABLE_PUNCTUATION.has(raw[i + 1])) {
|
|
74
|
+
i += 2;
|
|
75
|
+
}
|
|
76
|
+
else if (ch === '(') {
|
|
77
|
+
openParens++;
|
|
78
|
+
i++;
|
|
79
|
+
}
|
|
80
|
+
else if (ch === ')') {
|
|
81
|
+
if (openParens < 1)
|
|
82
|
+
break;
|
|
83
|
+
openParens--;
|
|
84
|
+
i++;
|
|
85
|
+
}
|
|
86
|
+
else if (DESTINATION_TERMINATORS.has(ch)) {
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
i++;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (i === pos && (i >= end || raw[i] !== ')'))
|
|
94
|
+
return null;
|
|
95
|
+
if (openParens !== 0)
|
|
96
|
+
return null;
|
|
97
|
+
return { url: processDestination(raw.slice(pos, i)), end: i };
|
|
98
|
+
}
|
|
99
|
+
// ── Titles ──────────────────────────────────────────────────────────────────
|
|
100
|
+
export function parseLinkTitle(raw, pos, end) {
|
|
101
|
+
const titleEnd = scanLinkTitle(raw, pos, end, pos + 1);
|
|
102
|
+
return titleEnd < 0 ? null : { title: linkTitleValue(raw, pos, titleEnd), end: titleEnd };
|
|
103
|
+
}
|
|
104
|
+
/** Where the title opening at `pos` ends: past its closer, `SPAN_OPEN`, or negative for no title.
|
|
105
|
+
* `from` resumes an open scan at the `end` it stopped on. */
|
|
106
|
+
export function scanLinkTitle(raw, pos, end, from) {
|
|
107
|
+
const marker = raw[pos];
|
|
108
|
+
if (marker !== '"' && marker !== "'" && marker !== '(')
|
|
109
|
+
return NOT_A_SPAN;
|
|
110
|
+
const close = marker === '(' ? ')' : marker;
|
|
111
|
+
let i = from;
|
|
112
|
+
while (i < end) {
|
|
113
|
+
const ch = raw[i];
|
|
114
|
+
if (ch === close)
|
|
115
|
+
return i + 1;
|
|
116
|
+
// A paren title cannot nest.
|
|
117
|
+
if (ch === '\u0000' || (marker === '(' && ch === '('))
|
|
118
|
+
return NOT_A_SPAN;
|
|
119
|
+
if (ch === '\\' && i + 1 < end)
|
|
120
|
+
i += 2;
|
|
121
|
+
else
|
|
122
|
+
i++;
|
|
123
|
+
}
|
|
124
|
+
return SPAN_OPEN;
|
|
125
|
+
}
|
|
126
|
+
/** The value of the title spanning `pos` to `titleEnd`, a span `scanLinkTitle` accepted. */
|
|
127
|
+
export function linkTitleValue(raw, pos, titleEnd) {
|
|
128
|
+
return unescapeSpecString(raw.slice(pos + 1, titleEnd - 1));
|
|
129
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** Link label matching (GFM §6.6) and the resolver built from a document's link reference
|
|
2
|
+
* definitions. */
|
|
2
3
|
import type { CstNode } from '../nodes';
|
|
3
|
-
/**
|
|
4
|
+
/** GFM §6.6 label normalization, lowercasing rather than full Unicode case folding. Whitespace
|
|
5
|
+
* is §2.1's ASCII set, so `[a<NBSP>b]` and `[a b]` are different labels. */
|
|
4
6
|
export declare function normalizeLinkLabel(raw: string): string;
|
|
5
7
|
export type ResolvedReference = Readonly<{
|
|
6
8
|
url: string;
|
|
@@ -11,11 +13,11 @@ export interface LinkReferenceMap {
|
|
|
11
13
|
/** Takes a non-normalized label. */
|
|
12
14
|
resolve: LinkReferenceResolver;
|
|
13
15
|
/**
|
|
14
|
-
* Stable snapshot of the
|
|
15
|
-
* on
|
|
16
|
-
* epoch instead, never this string: it reaches ~MB scale in reference-heavy documents.
|
|
16
|
+
* Stable snapshot of the definition set, which the lazy inline cache keys on. The render path
|
|
17
|
+
* keys on a small counter instead: this string reaches megabytes in reference-heavy documents.
|
|
17
18
|
*/
|
|
18
19
|
readonly signature: string;
|
|
19
20
|
}
|
|
20
|
-
/** Collects
|
|
21
|
+
/** Collects link reference definitions nested in containers too; a label's first definition
|
|
22
|
+
* wins (§4.7). */
|
|
21
23
|
export declare function buildLinkReferenceMap(nodes: CstNode[]): LinkReferenceMap;
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** Link label matching (GFM §6.6) and the resolver built from a document's link reference
|
|
2
|
+
* definitions. */
|
|
2
3
|
import { metadataOf } from '../nodes';
|
|
3
|
-
|
|
4
|
+
import { trimWhitespace, WHITESPACE_RUN } from '../lines';
|
|
5
|
+
/** GFM §6.6 label normalization, lowercasing rather than full Unicode case folding. Whitespace
|
|
6
|
+
* is §2.1's ASCII set, so `[a<NBSP>b]` and `[a b]` are different labels. */
|
|
4
7
|
export function normalizeLinkLabel(raw) {
|
|
5
|
-
return raw.
|
|
8
|
+
return trimWhitespace(raw).split(WHITESPACE_RUN).join(' ').toLowerCase();
|
|
6
9
|
}
|
|
7
|
-
/** Collects
|
|
10
|
+
/** Collects link reference definitions nested in containers too; a label's first definition
|
|
11
|
+
* wins (§4.7). */
|
|
8
12
|
export function buildLinkReferenceMap(nodes) {
|
|
9
13
|
const entries = new Map();
|
|
10
14
|
collectLinkReferences(nodes, entries);
|
|
@@ -21,7 +25,7 @@ export function buildLinkReferenceMap(nodes) {
|
|
|
21
25
|
}
|
|
22
26
|
function collectLinkReferences(nodes, entries) {
|
|
23
27
|
const stack = [];
|
|
24
|
-
// Reversed push, so pop order is document order
|
|
28
|
+
// Reversed push, so pop order is document order and the first definition wins.
|
|
25
29
|
const push = (level) => {
|
|
26
30
|
for (let i = level.length - 1; i >= 0; i--)
|
|
27
31
|
stack.push(level[i]);
|
|
@@ -35,7 +39,7 @@ function collectLinkReferences(nodes, entries) {
|
|
|
35
39
|
continue;
|
|
36
40
|
const key = normalizeLinkLabel(meta.label);
|
|
37
41
|
if (entries.has(key))
|
|
38
|
-
continue;
|
|
42
|
+
continue;
|
|
39
43
|
entries.set(key, meta.title !== undefined
|
|
40
44
|
? Object.freeze({ url: meta.url, title: meta.title })
|
|
41
45
|
: Object.freeze({ url: meta.url }));
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a link edit becomes bytes: the functions every link write goes through, and under them
|
|
3
|
+
* the GFM serializer. A candidate is written only when the rendered text stays the same, since a
|
|
4
|
+
* destination that breaks its own construct shows up as literal source.
|
|
5
|
+
*/
|
|
6
|
+
import type { Reading } from '../../schema/reading';
|
|
7
|
+
import type { InlineNode } from '../nodes';
|
|
8
|
+
export interface LinkFields {
|
|
9
|
+
/** The link text's inner bytes, verbatim. Never re-escaped: the text can hold whole nested
|
|
10
|
+
* constructs, and rewriting them from the parse would change bytes the user never touched. */
|
|
11
|
+
text: string;
|
|
12
|
+
url: string;
|
|
13
|
+
title?: string;
|
|
14
|
+
/** Reference forms only: the raw tail after the text's `]` (`[ref]`, `[]`, or empty for the
|
|
15
|
+
* shortcut form). Present preserves the reference; absent inlines the destination. */
|
|
16
|
+
reference?: string;
|
|
17
|
+
}
|
|
18
|
+
/** Bytes to splice over `link`'s range, or null when the edit is refused, as on a node a plugin's
|
|
19
|
+
* inline syntax owns: built-in grammar written over it would destroy that syntax. */
|
|
20
|
+
export declare function buildLinkEditBytes(link: InlineNode, display: string, fields: LinkFields, reading: Reading): string | null;
|
|
21
|
+
/** Bytes that unwrap `link` to the text the user already sees (remove link). An autolink has no
|
|
22
|
+
* brackets, so its unwrap escapes the byte that would link it again. */
|
|
23
|
+
export declare function buildLinkUnwrapBytes(link: InlineNode, display: string, reading: Reading): string | null;
|
|
24
|
+
/** Bytes that write `[text](url)` over `[start, end)`, or null for an empty url, a range crossing
|
|
25
|
+
* another construct, or a wrap that changes the render (a `!` before it makes an image). */
|
|
26
|
+
export declare function buildLinkWrapBytes(display: string, start: number, end: number, url: string, reading: Reading): string | null;
|
|
27
|
+
/** True when `[start, end)` holds only plain text, so a wrap crosses no other construct. */
|
|
28
|
+
export declare function canWrapRangeAsLink(display: string, start: number, end: number, reading: Reading): boolean;
|
|
29
|
+
/** The fields the link editor edits: `url` and `title` decoded off the node, the text and the
|
|
30
|
+
* reference tail as the author wrote them. */
|
|
31
|
+
export declare function linkFieldsFromInline(link: InlineNode, display: string): LinkFields;
|
|
@@ -1,54 +1,48 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Where a link edit becomes bytes: the
|
|
3
|
-
* GFM
|
|
4
|
-
*
|
|
5
|
-
* a private walk over the parse cannot see.
|
|
2
|
+
* Where a link edit becomes bytes: the functions every link write goes through, and under them
|
|
3
|
+
* the GFM serializer. A candidate is written only when the rendered text stays the same, since a
|
|
4
|
+
* destination that breaks its own construct shows up as literal source.
|
|
6
5
|
*/
|
|
7
|
-
import { inlineDescendants,
|
|
8
|
-
import { encodeDestination, escapeTitle } from '
|
|
9
|
-
import { CONTENT_VISIBILITY, renderedText } from '
|
|
10
|
-
import { devWarn } from '
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
13
|
-
|
|
14
|
-
* hook, so emitting built-in grammar over its bytes would destroy the author's syntax.
|
|
15
|
-
*/
|
|
16
|
-
export function buildLinkEditBytes(link, display, fields, resolver) {
|
|
6
|
+
import { inlineDescendants, readInline } from './index';
|
|
7
|
+
import { encodeDestination, escapeTitle } from './destination-bytes';
|
|
8
|
+
import { CONTENT_VISIBILITY, renderedText } from './visibility';
|
|
9
|
+
import { devWarn } from '../../dev-warn';
|
|
10
|
+
/** Bytes to splice over `link`'s range, or null when the edit is refused, as on a node a plugin's
|
|
11
|
+
* inline syntax owns: built-in grammar written over it would destroy that syntax. */
|
|
12
|
+
export function buildLinkEditBytes(link, display, fields, reading) {
|
|
17
13
|
if (declineClaimed(link, 'edit'))
|
|
18
14
|
return null;
|
|
19
|
-
return verified(buildLinkSourceBytes(fields), link.start, link.end, display,
|
|
15
|
+
return verified(buildLinkSourceBytes(fields), link.start, link.end, display, reading);
|
|
20
16
|
}
|
|
21
|
-
/** Bytes that unwrap `link` to the text the
|
|
22
|
-
* brackets
|
|
23
|
-
export function buildLinkUnwrapBytes(link, display,
|
|
17
|
+
/** Bytes that unwrap `link` to the text the user already sees (remove link). An autolink has no
|
|
18
|
+
* brackets, so its unwrap escapes the byte that would link it again. */
|
|
19
|
+
export function buildLinkUnwrapBytes(link, display, reading) {
|
|
24
20
|
if (declineClaimed(link, 'remove'))
|
|
25
21
|
return null;
|
|
26
22
|
const [textStart, textEnd] = textRange(link, display);
|
|
27
23
|
const plain = display.slice(textStart, textEnd);
|
|
28
|
-
return verified(escapeRelinkingText(plain, link, display,
|
|
24
|
+
return verified(escapeRelinkingText(plain, link, display, reading), link.start, link.end, display, reading);
|
|
29
25
|
}
|
|
30
|
-
/** Bytes that
|
|
31
|
-
*
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if (url.trim() === '' || !canWrapRangeAsLink(display, start, end, resolver))
|
|
26
|
+
/** Bytes that write `[text](url)` over `[start, end)`, or null for an empty url, a range crossing
|
|
27
|
+
* another construct, or a wrap that changes the render (a `!` before it makes an image). */
|
|
28
|
+
export function buildLinkWrapBytes(display, start, end, url, reading) {
|
|
29
|
+
if (url.trim() === '' || !canWrapRangeAsLink(display, start, end, reading))
|
|
35
30
|
return null;
|
|
36
31
|
// A bare bracket would close the construct early; an existing `\x` pair passes through whole.
|
|
37
32
|
const text = display
|
|
38
33
|
.slice(start, end)
|
|
39
34
|
.replace(/\\[\s\S]|[[\]]/g, (m) => (m.length === 2 ? m : '\\' + m));
|
|
40
|
-
return verified(`[${text}](${encodeDestination(url)})`, start, end, display,
|
|
35
|
+
return verified(`[${text}](${encodeDestination(url)})`, start, end, display, reading);
|
|
41
36
|
}
|
|
42
37
|
const WRAP_SAFE_KINDS = new Set(['text', 'escape', 'entityReference']);
|
|
43
|
-
/** True when `[start, end)` holds only
|
|
44
|
-
|
|
45
|
-
export function canWrapRangeAsLink(display, start, end, resolver) {
|
|
38
|
+
/** True when `[start, end)` holds only plain text, so a wrap crosses no other construct. */
|
|
39
|
+
export function canWrapRangeAsLink(display, start, end, reading) {
|
|
46
40
|
if (start >= end || end > display.length)
|
|
47
41
|
return false;
|
|
48
|
-
return flattenInline(
|
|
42
|
+
return flattenInline(readInline(display, 0, display.length, reading.resolver, reading.grammar)).every((n) => WRAP_SAFE_KINDS.has(n.kind) || n.end <= start || n.start >= end);
|
|
49
43
|
}
|
|
50
|
-
/** The fields the
|
|
51
|
-
*
|
|
44
|
+
/** The fields the link editor edits: `url` and `title` decoded off the node, the text and the
|
|
45
|
+
* reference tail as the author wrote them. */
|
|
52
46
|
export function linkFieldsFromInline(link, display) {
|
|
53
47
|
const [textStart, textEnd] = textRange(link, display);
|
|
54
48
|
return {
|
|
@@ -59,8 +53,8 @@ export function linkFieldsFromInline(link, display) {
|
|
|
59
53
|
};
|
|
60
54
|
}
|
|
61
55
|
// ── The GFM serializer ──────────────────────────────────────────────────────
|
|
62
|
-
/** The built-in grammar's inverse
|
|
63
|
-
*
|
|
56
|
+
/** The built-in grammar's inverse, called only by the functions above, which decide whether the
|
|
57
|
+
* bytes are GFM's to write. */
|
|
64
58
|
function buildLinkSourceBytes(fields) {
|
|
65
59
|
if (fields.reference !== undefined)
|
|
66
60
|
return `[${fields.text}]${fields.reference}`;
|
|
@@ -72,23 +66,21 @@ function declineClaimed(link, what) {
|
|
|
72
66
|
const claim = link.syntaxClaim;
|
|
73
67
|
if (!claim)
|
|
74
68
|
return false;
|
|
75
|
-
devWarn('link-edit', `${what} declined: the "${claim.prefix}" inline
|
|
69
|
+
devWarn('link-edit', `${what} declined: the "${claim.prefix}" inline syntax handler owns these bytes and registered no link rewriter`);
|
|
76
70
|
return true;
|
|
77
71
|
}
|
|
78
|
-
/** What
|
|
79
|
-
*
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
function visibleText(raw, resolver) {
|
|
83
|
-
return renderedText(parseInline(raw, 0, raw.length, resolver), raw, CONTENT_VISIBILITY);
|
|
72
|
+
/** What the user sees for `raw` in the content reading: the link editor may edit a destination
|
|
73
|
+
* whose markers are on screen, which the block's own reading would count as a visible change. */
|
|
74
|
+
function visibleText(raw, reading) {
|
|
75
|
+
return renderedText(readInline(raw, 0, raw.length, reading.resolver, reading.grammar), raw, CONTENT_VISIBILITY, { grammar: reading.grammar });
|
|
84
76
|
}
|
|
85
|
-
/** A candidate
|
|
86
|
-
* untouched
|
|
87
|
-
function verified(candidate, start, end, display,
|
|
77
|
+
/** A candidate becomes bytes only if splicing it over `[start, end)` leaves the visible text
|
|
78
|
+
* untouched: the write moves bytes nobody saw, so any visible change means the construct broke. */
|
|
79
|
+
function verified(candidate, start, end, display, reading) {
|
|
88
80
|
if (candidate === null)
|
|
89
81
|
return null;
|
|
90
|
-
const before = visibleText(display,
|
|
91
|
-
const after = visibleText(spliced(candidate, start, end, display),
|
|
82
|
+
const before = visibleText(display, reading);
|
|
83
|
+
const after = visibleText(spliced(candidate, start, end, display), reading);
|
|
92
84
|
return before === after ? candidate : null;
|
|
93
85
|
}
|
|
94
86
|
function spliced(candidate, start, end, display) {
|
|
@@ -114,16 +106,13 @@ const TRIGGER_ESCAPE = [
|
|
|
114
106
|
[/^www\./i, '.'],
|
|
115
107
|
[/^[^@]*@/, '@']
|
|
116
108
|
];
|
|
117
|
-
/**
|
|
118
|
-
*
|
|
119
|
-
|
|
120
|
-
* without changing one character the reader sees.
|
|
121
|
-
*/
|
|
122
|
-
function escapeRelinkingText(text, link, display, resolver) {
|
|
109
|
+
/** Escapes the byte that makes unwrapped text a bare autolink again (`[www.x.com](u)`), so a
|
|
110
|
+
* removed link stays removed and no visible character changes. */
|
|
111
|
+
function escapeRelinkingText(text, link, display, reading) {
|
|
123
112
|
let candidate = text;
|
|
124
113
|
// One pass per surviving autolink; the text is finite and each pass kills one match.
|
|
125
114
|
for (let guard = 0; guard <= text.length; guard++) {
|
|
126
|
-
const offender = relinkedRange(candidate, link, display,
|
|
115
|
+
const offender = relinkedRange(candidate, link, display, reading);
|
|
127
116
|
if (offender === null)
|
|
128
117
|
return candidate;
|
|
129
118
|
const escaped = escapeTrigger(candidate, offender);
|
|
@@ -134,10 +123,10 @@ function escapeRelinkingText(text, link, display, resolver) {
|
|
|
134
123
|
return null;
|
|
135
124
|
}
|
|
136
125
|
/** The candidate-relative range of the first link the splice re-created, or null when clean. */
|
|
137
|
-
function relinkedRange(candidate, link, display,
|
|
126
|
+
function relinkedRange(candidate, link, display, reading) {
|
|
138
127
|
const raw = spliced(candidate, link.start, link.end, display);
|
|
139
128
|
const end = link.start + candidate.length;
|
|
140
|
-
const found = flattenInline(
|
|
129
|
+
const found = flattenInline(readInline(raw, 0, raw.length, reading.resolver, reading.grammar)).find((n) => (n.kind === 'link' || n.kind === 'autolink') && n.start < end && n.end > link.start);
|
|
141
130
|
if (!found)
|
|
142
131
|
return null;
|
|
143
132
|
// An offender reaching outside the spliced range is the surrounding text linking with it,
|
|
@@ -0,0 +1,29 @@
|
|
|
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 type { CstNode, InlineNode } from '../../nodes';
|
|
7
|
+
import type { NodeView } from '../../node-views';
|
|
8
|
+
import type { StoredAs } from '../../../schema/stored-as';
|
|
9
|
+
export interface ReadBack {
|
|
10
|
+
/** The bytes the position stores. */
|
|
11
|
+
raw: string;
|
|
12
|
+
/** The one prose block they read as, or null on an inline surface. */
|
|
13
|
+
block: CstNode | null;
|
|
14
|
+
/** The inline tree, in the block's raw coordinates, or the stored bytes' on an inline surface. */
|
|
15
|
+
inlines: InlineNode[];
|
|
16
|
+
/** Leading space the reload moves into the container's marker (`- ` read as `- `): off the
|
|
17
|
+
* block, but still drawn, as the marker's width. */
|
|
18
|
+
lead: string;
|
|
19
|
+
}
|
|
20
|
+
/** `bytes` as `store` keeps them: exactly one prose block at the slot, or the inline surface's
|
|
21
|
+
* text. Null where the reload would read anything else. */
|
|
22
|
+
export declare function readBack(bytes: string, store: StoredAs): ReadBack | null;
|
|
23
|
+
/** The bytes `read.inlines` index into. */
|
|
24
|
+
export declare const readSource: (read: ReadBack) => string;
|
|
25
|
+
/** What the reader sees of a read, in the content reading (live-mode.md § 2). */
|
|
26
|
+
export declare function shownOf(read: ReadBack, store: StoredAs): string;
|
|
27
|
+
/** Whether `line` still reads as `node`'s kind where `store` keeps it: always, on an inline
|
|
28
|
+
* surface, which never reads its text as a block. */
|
|
29
|
+
export declare function keepsKindAt(node: NodeView, line: string, store: StoredAs): boolean;
|