@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
|
@@ -19,18 +19,20 @@ export function registerDirectiveOpeners() {
|
|
|
19
19
|
const container = declaredPluginKind(DIRECTIVE_CONTAINER);
|
|
20
20
|
const leaf = declaredPluginKind(DIRECTIVE_LEAF);
|
|
21
21
|
registerBlockOpener(container, {
|
|
22
|
-
//
|
|
23
|
-
// with it. A colon fence collides with no built-in matcher; it only needs
|
|
22
|
+
// Derived from the built-in priorities, never a bare integer, so renumbering a built-in
|
|
23
|
+
// moves this with it. A colon fence collides with no built-in matcher; it only needs a gap.
|
|
24
24
|
priority: OPENER_PRIORITIES.blockquote + 5,
|
|
25
25
|
interruptsParagraph: (line) => matchDirectiveOpener(line) !== null,
|
|
26
26
|
tryOpen(ctx) {
|
|
27
27
|
const fence = matchDirectiveOpener(ctx.line.text);
|
|
28
28
|
if (!fence)
|
|
29
29
|
return null;
|
|
30
|
-
|
|
30
|
+
// A one-line leaf at the end of the source takes the source's first break, else LF.
|
|
31
|
+
const sourceEnding = (ctx.lines[0]?.lineEnding || '\n');
|
|
32
|
+
const lineEnding = trailingLineEnding(ctx.line.raw, sourceEnding);
|
|
31
33
|
if (fence.tier === 'leaf') {
|
|
32
|
-
const def = resolveDirective('leaf', fence.name);
|
|
33
|
-
const factory = resolveBlockDirectiveFactory('leaf', fence.name);
|
|
34
|
+
const def = resolveDirective('leaf', fence.name, ctx.grammar);
|
|
35
|
+
const factory = resolveBlockDirectiveFactory('leaf', fence.name, ctx.grammar);
|
|
34
36
|
if (factory) {
|
|
35
37
|
const parsed = {
|
|
36
38
|
fence,
|
|
@@ -62,12 +64,13 @@ export function registerDirectiveOpeners() {
|
|
|
62
64
|
// body stays inside this parse entry, so it inherits its scope.
|
|
63
65
|
const body = parseContainerBody(bodyText, DIRECTIVE_BODY_WRAP, {
|
|
64
66
|
scope: ctx.isDocumentParse ? 'document' : 'fragment',
|
|
65
|
-
depth: ctx.depth + 1
|
|
67
|
+
depth: ctx.depth + 1,
|
|
68
|
+
grammar: ctx.grammar
|
|
66
69
|
});
|
|
67
|
-
// isDirectiveCloser guarantees an all-colon line, so its length
|
|
70
|
+
// isDirectiveCloser guarantees an all-colon line, so its length is the colon count.
|
|
68
71
|
const closerColonCount = closerLine.text.length;
|
|
69
72
|
const closerNewline = closerLine.raw.endsWith('\n');
|
|
70
|
-
const factory = resolveBlockDirectiveFactory('container', fence.name);
|
|
73
|
+
const factory = resolveBlockDirectiveFactory('container', fence.name, ctx.grammar);
|
|
71
74
|
if (factory) {
|
|
72
75
|
const parsed = {
|
|
73
76
|
fence,
|
|
@@ -126,10 +129,8 @@ function closerIndex(lines) {
|
|
|
126
129
|
closerIndexCache.set(lines, index);
|
|
127
130
|
return index;
|
|
128
131
|
}
|
|
129
|
-
/**
|
|
130
|
-
*
|
|
131
|
-
* hold 0 and an opener runs at least two colons, so they never match.
|
|
132
|
-
*/
|
|
132
|
+
/** First closer index at or after `from` with a run of at least `min` colons, or -1. Padding
|
|
133
|
+
* leaves hold 0, and an opener runs at least two colons, so they never match. */
|
|
133
134
|
function firstCloserAtLeast(index, from, min) {
|
|
134
135
|
const descend = (node, lo, hi) => {
|
|
135
136
|
if (hi <= from || index.maxCounts[node] < min)
|
|
@@ -15,11 +15,8 @@ export interface DirectiveFence {
|
|
|
15
15
|
}
|
|
16
16
|
export declare function matchDirectiveOpener(lineText: string): DirectiveFence | null;
|
|
17
17
|
export declare function isDirectiveCloser(lineText: string, openColonCount: number): boolean;
|
|
18
|
-
/**
|
|
19
|
-
*
|
|
20
|
-
* `minimum`. Without it a body line reproducing the terminator reads as the container's own
|
|
21
|
-
* closer and ejects everything below it on reparse.
|
|
22
|
-
*/
|
|
18
|
+
/** The colon count needed to wrap `body`: one past its longest whole-line colon run, never below
|
|
19
|
+
* `minimum`, so no body line reads as the container's closer on reparse. */
|
|
23
20
|
export declare function escalatedColonCount(body: string, minimum: number): number;
|
|
24
21
|
export declare function serializeDirective(parts: {
|
|
25
22
|
colonCount: number;
|
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
* Byte round-trip is the master invariant: `serializeDirective` reproduces the opener colons,
|
|
4
4
|
* the verbatim `info` (leading separator included), the body wrap, and a matched closer exactly.
|
|
5
5
|
*/
|
|
6
|
+
import { WHITESPACE_CHARS, WHITESPACE_CLASS } from '../lines';
|
|
6
7
|
import { escalateTerminatorRun } from '../terminator-escalation';
|
|
7
|
-
|
|
8
|
+
// The `s` flag lets the info string run to the line's end over a line separator (U+2028),
|
|
9
|
+
// which the line splitter keeps inside a line.
|
|
10
|
+
const OPENER = /^(:{2,})([A-Za-z][A-Za-z0-9-]*)(.*)$/s;
|
|
8
11
|
export function matchDirectiveOpener(lineText) {
|
|
9
12
|
const match = OPENER.exec(lineText);
|
|
10
13
|
if (!match)
|
|
@@ -26,11 +29,8 @@ export function isDirectiveCloser(lineText, openColonCount) {
|
|
|
26
29
|
count++;
|
|
27
30
|
return count >= openColonCount && count === lineText.length;
|
|
28
31
|
}
|
|
29
|
-
/**
|
|
30
|
-
*
|
|
31
|
-
* `minimum`. Without it a body line reproducing the terminator reads as the container's own
|
|
32
|
-
* closer and ejects everything below it on reparse.
|
|
33
|
-
*/
|
|
32
|
+
/** The colon count needed to wrap `body`: one past its longest whole-line colon run, never below
|
|
33
|
+
* `minimum`, so no body line reads as the container's closer on reparse. */
|
|
34
34
|
export function escalatedColonCount(body, minimum) {
|
|
35
35
|
// A closer line is colons end to end, so its own length IS the run.
|
|
36
36
|
return escalateTerminatorRun(body, minimum, (text, required) => isDirectiveCloser(text, required) ? text.length : null);
|
|
@@ -39,18 +39,18 @@ export function escalatedColonCount(body, minimum) {
|
|
|
39
39
|
export function serializeDirective(parts) {
|
|
40
40
|
const lineEnding = parts.lineEnding ?? '\n';
|
|
41
41
|
const inner = `${parts.innerPrefix}${parts.body}${parts.innerSuffix}`;
|
|
42
|
-
//
|
|
43
|
-
//
|
|
42
|
+
// Escalated from the body on every emit, so the fence holds before the editor re-reads the
|
|
43
|
+
// metadata; `colonCount` is a floor, not a target.
|
|
44
44
|
const colonCount = escalatedColonCount(inner, parts.colonCount);
|
|
45
45
|
const opener = ':'.repeat(colonCount);
|
|
46
46
|
const closer = ':'.repeat(Math.max(colonCount, parts.closerColonCount ?? colonCount));
|
|
47
47
|
const closerEnd = (parts.closerNewline ?? true) ? (parts.closerLineEnding ?? lineEnding) : '';
|
|
48
48
|
return `${opener}${parts.name}${parts.info}${lineEnding}${inner}${closer}${closerEnd}`;
|
|
49
49
|
}
|
|
50
|
-
const LABEL =
|
|
50
|
+
const LABEL = new RegExp(`^${WHITESPACE_CLASS}*\\[([^\\]]*)\\]`);
|
|
51
51
|
const BRACES = /\{([^}]*)\}/;
|
|
52
52
|
// Quoted segments fold in, so `title="a b"` stays one token instead of splitting on its space.
|
|
53
|
-
const ATTR_TOKEN =
|
|
53
|
+
const ATTR_TOKEN = new RegExp(`(?:[^${WHITESPACE_CHARS}"]+|"[^"]*")+`, 'g');
|
|
54
54
|
/**
|
|
55
55
|
* Opt-in `info -> structure` reader for a leading `[label]` and a `{#id .class key=val}` block.
|
|
56
56
|
* One-way: there is no inverse serializer, and the verbatim `info` stays the round-trip truth.
|
|
@@ -9,7 +9,7 @@ import type { ContainerBodyWrap } from '../parser';
|
|
|
9
9
|
export declare const DIRECTIVE_CONTAINER = "directiveContainer";
|
|
10
10
|
export declare const DIRECTIVE_LEAF = "directiveLeaf";
|
|
11
11
|
export declare const DIRECTIVE_TEXT = "directiveText";
|
|
12
|
-
/** The `:::` opener and closer bracket every directive body, whatever kind the name
|
|
12
|
+
/** The `:::` opener and closer bracket every directive body, whatever kind the name maps to. */
|
|
13
13
|
export declare const DIRECTIVE_BODY_WRAP: ContainerBodyWrap;
|
|
14
14
|
/** Fence bytes a container node round-trips through `rebuildDirectiveContainerRaw`. */
|
|
15
15
|
export interface DirectiveContainerMetadata {
|
|
@@ -18,14 +18,11 @@ export interface DirectiveContainerMetadata {
|
|
|
18
18
|
info: string;
|
|
19
19
|
closerColonCount: number;
|
|
20
20
|
closerNewline: boolean;
|
|
21
|
-
/** Authored line ending for the opener and closer
|
|
21
|
+
/** Authored line ending for the opener and closer fence lines. */
|
|
22
22
|
lineEnding: string;
|
|
23
23
|
}
|
|
24
24
|
export declare function registerDirectiveKinds(): void;
|
|
25
|
-
/**
|
|
26
|
-
*
|
|
27
|
-
* opts into `revealSource`, so focus swaps the island for editable source and blur/Enter commits
|
|
28
|
-
* (the shared reveal primitive in widget-interaction.ts). Idempotent for HMR.
|
|
29
|
-
*/
|
|
25
|
+
/** The `:` recognizer gives this kind to the span it delimits. The widget opts into `revealSource`,
|
|
26
|
+
* so focus swaps it for its editable source. Idempotent for HMR. */
|
|
30
27
|
export declare function registerDirectiveTextKind(): void;
|
|
31
28
|
export declare function rebuildDirectiveContainerRaw(node: CstNode): void;
|
|
@@ -8,14 +8,14 @@ import { declarePluginKind, declarePluginInlineKind, isInlineKindDeclared } from
|
|
|
8
8
|
import { registerBlockKind, isBlockKindRegistered } from '../../schema/block-kind-descriptor';
|
|
9
9
|
import { containerClosure } from '../../schema/closure';
|
|
10
10
|
import { getPluginMetadata } from '../nodes';
|
|
11
|
-
import { displayLength,
|
|
11
|
+
import { displayLength, ownTrailingLineEnding, trimTrailingLineEnding } from '../lines';
|
|
12
12
|
import { concatChildren as serializeChildren } from '../serializer';
|
|
13
13
|
import { registerInlineWidgetKind, mintWidgetShell } from '../inline/inline-widgets';
|
|
14
14
|
import { matchDirectiveOpener, serializeDirective } from './grammar';
|
|
15
15
|
export const DIRECTIVE_CONTAINER = 'directiveContainer';
|
|
16
16
|
export const DIRECTIVE_LEAF = 'directiveLeaf';
|
|
17
17
|
export const DIRECTIVE_TEXT = 'directiveText';
|
|
18
|
-
/** The `:::` opener and closer bracket every directive body, whatever kind the name
|
|
18
|
+
/** The `:::` opener and closer bracket every directive body, whatever kind the name maps to. */
|
|
19
19
|
export const DIRECTIVE_BODY_WRAP = {
|
|
20
20
|
afterOpenerLine: true,
|
|
21
21
|
beforeCloserLine: true
|
|
@@ -24,10 +24,11 @@ export function registerDirectiveKinds() {
|
|
|
24
24
|
if (isBlockKindRegistered(DIRECTIVE_CONTAINER))
|
|
25
25
|
return; // idempotent for HMR / re-import
|
|
26
26
|
registerBlockKind(declarePluginKind(DIRECTIVE_CONTAINER), {
|
|
27
|
+
label: 'Directive',
|
|
27
28
|
mergeRole: 'container',
|
|
28
29
|
editable: true,
|
|
29
30
|
supportsInline: false,
|
|
30
|
-
//
|
|
31
|
+
// An opaque container has no text of its own at either edge, so both take the gap caret.
|
|
31
32
|
gapEdges: 'both',
|
|
32
33
|
container: {
|
|
33
34
|
contract: 'opaque',
|
|
@@ -51,11 +52,12 @@ export function registerDirectiveKinds() {
|
|
|
51
52
|
})
|
|
52
53
|
});
|
|
53
54
|
registerBlockKind(declarePluginKind(DIRECTIVE_LEAF), {
|
|
55
|
+
label: 'Directive',
|
|
54
56
|
gapEdges: 'none',
|
|
55
57
|
mergeRole: 'not-mergeable',
|
|
56
58
|
editable: true,
|
|
57
59
|
supportsInline: false,
|
|
58
|
-
|
|
60
|
+
contentStart: { range: directiveLeafContentRange },
|
|
59
61
|
keymap: DIRECTIVE_LEAF_KEYMAP,
|
|
60
62
|
conformanceFixture: '::spoiler\n',
|
|
61
63
|
closure: {
|
|
@@ -78,11 +80,8 @@ export function registerDirectiveKinds() {
|
|
|
78
80
|
});
|
|
79
81
|
}
|
|
80
82
|
// ── Text tier: inline `:name[label]{attrs}` ────────────────────────────────────
|
|
81
|
-
/**
|
|
82
|
-
*
|
|
83
|
-
* opts into `revealSource`, so focus swaps the island for editable source and blur/Enter commits
|
|
84
|
-
* (the shared reveal primitive in widget-interaction.ts). Idempotent for HMR.
|
|
85
|
-
*/
|
|
83
|
+
/** The `:` recognizer gives this kind to the span it delimits. The widget opts into `revealSource`,
|
|
84
|
+
* so focus swaps it for its editable source. Idempotent for HMR. */
|
|
86
85
|
export function registerDirectiveTextKind() {
|
|
87
86
|
if (isInlineKindDeclared(DIRECTIVE_TEXT))
|
|
88
87
|
return;
|
|
@@ -99,8 +98,8 @@ function buildDirectiveTextWidget(node, raw) {
|
|
|
99
98
|
shell.textContent = raw.slice(node.start, node.end);
|
|
100
99
|
return shell;
|
|
101
100
|
}
|
|
102
|
-
// Enter opens a paragraph sibling
|
|
103
|
-
//
|
|
101
|
+
// Enter opens a paragraph sibling, since a leaf never holds a line break; Backspace and Delete at
|
|
102
|
+
// an edge move focus without joining, as for any block that doesn't merge.
|
|
104
103
|
const DIRECTIVE_LEAF_KEYMAP = [
|
|
105
104
|
{ chord: 'Enter', command: 'block.split' },
|
|
106
105
|
{ chord: 'Tab', command: 'block.insertTab' },
|
|
@@ -109,8 +108,8 @@ const DIRECTIVE_LEAF_KEYMAP = [
|
|
|
109
108
|
{ chord: 'Alt+ArrowUp', command: 'block.moveUp' },
|
|
110
109
|
{ chord: 'Alt+ArrowDown', command: 'block.moveDown' }
|
|
111
110
|
];
|
|
112
|
-
// The `::name` fence is a dimmed marker prefix,
|
|
113
|
-
//
|
|
111
|
+
// The `::name` fence is a dimmed marker prefix, like a heading's. A raw that stops opening a fence
|
|
112
|
+
// reparses to a paragraph first, so the null branch is only a fallback.
|
|
114
113
|
function directiveLeafContentRange(node) {
|
|
115
114
|
const fence = matchDirectiveOpener(trimTrailingLineEnding(node.raw));
|
|
116
115
|
const start = fence ? fence.colonCount + fence.name.length : 0;
|
|
@@ -130,8 +129,7 @@ export function rebuildDirectiveContainerRaw(node) {
|
|
|
130
129
|
closerColonCount: meta.closerColonCount,
|
|
131
130
|
closerNewline: meta.closerNewline,
|
|
132
131
|
lineEnding: meta.lineEnding,
|
|
133
|
-
// The
|
|
134
|
-
|
|
135
|
-
closerLineEnding: trailingLineEnding(node.raw)
|
|
132
|
+
// The closer is the raw's last line, so its ending is the raw's own, else the opener's.
|
|
133
|
+
closerLineEnding: ownTrailingLineEnding(node.raw) || undefined
|
|
136
134
|
});
|
|
137
135
|
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Name-to-kind registry for the directive
|
|
3
|
-
* `(tier, name)` here, then delegates to `fromDirective` or
|
|
2
|
+
* Name-to-kind registry for the directive syntax: the shared opener resolves a fence's
|
|
3
|
+
* `(tier, name)` (tier: container, leaf or text) here, then delegates to `fromDirective` or
|
|
4
|
+
* builds a lossless generic node.
|
|
4
5
|
* Register-once with no unregister, the `customElements` model the schema registries follow.
|
|
5
6
|
* Tier scopes the key, so a container and a leaf may share a name.
|
|
6
7
|
*/
|
|
7
8
|
import type { DirectiveTier, DirectiveFence } from './grammar';
|
|
8
9
|
import type { AnyBlockKind, PluginInlineKind, CstNode, InlineNode, Document } from '../nodes';
|
|
10
|
+
import type { GrammarView } from '../../schema/block-openers';
|
|
9
11
|
export interface ParsedDirective {
|
|
10
12
|
fence: DirectiveFence;
|
|
11
13
|
body?: Document;
|
|
@@ -15,7 +17,7 @@ export interface ParsedDirective {
|
|
|
15
17
|
raw: string;
|
|
16
18
|
closerColonCount: number;
|
|
17
19
|
closerNewline: boolean;
|
|
18
|
-
/** Opener line ending; a factory stores it so a rebuild
|
|
20
|
+
/** Opener line ending; a factory stores it so a rebuild keeps CRLF fence lines. */
|
|
19
21
|
lineEnding: string;
|
|
20
22
|
}
|
|
21
23
|
export interface DirectiveDefinition {
|
|
@@ -24,16 +26,17 @@ export interface DirectiveDefinition {
|
|
|
24
26
|
fromDirective?(parsed: ParsedDirective): CstNode | InlineNode;
|
|
25
27
|
}
|
|
26
28
|
export declare function registerDirective(tier: DirectiveTier, name: string, def: DirectiveDefinition): void;
|
|
27
|
-
|
|
29
|
+
/** The name's definition under an editor's grammar; a name its plugin registered is absent where
|
|
30
|
+
* the editor left that plugin out, so the fence reads as the generic directive. */
|
|
31
|
+
export declare function resolveDirective(tier: DirectiveTier, name: string, grammar: GrammarView): DirectiveDefinition | undefined;
|
|
28
32
|
/**
|
|
29
|
-
* Pre-narrowed:
|
|
30
|
-
*
|
|
33
|
+
* Pre-narrowed: registration guarantees a block node for these tiers, so the union narrowing
|
|
34
|
+
* happens here once instead of a cast per opener call site.
|
|
31
35
|
*/
|
|
32
|
-
export declare function resolveBlockDirectiveFactory(tier: 'leaf' | 'container', name: string): ((parsed: ParsedDirective) => CstNode) | undefined;
|
|
36
|
+
export declare function resolveBlockDirectiveFactory(tier: 'leaf' | 'container', name: string, grammar: GrammarView): ((parsed: ParsedDirective) => CstNode) | undefined;
|
|
33
37
|
export declare function isDirectiveRegistered(tier: DirectiveTier, name: string): boolean;
|
|
34
38
|
/**
|
|
35
39
|
* What "does this kind have a recognizer" must ask: a directive kind owns no opener of its own,
|
|
36
|
-
* so
|
|
40
|
+
* so checking the opener registry alone reads every directive kind as unrecognizable.
|
|
37
41
|
*/
|
|
38
42
|
export declare function isDirectiveKind(kind: AnyBlockKind | PluginInlineKind): boolean;
|
|
39
|
-
export declare function __resetDirectiveRegistryForTests(): void;
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Name-to-kind registry for the directive
|
|
3
|
-
* `(tier, name)` here, then delegates to `fromDirective` or
|
|
2
|
+
* Name-to-kind registry for the directive syntax: the shared opener resolves a fence's
|
|
3
|
+
* `(tier, name)` (tier: container, leaf or text) here, then delegates to `fromDirective` or
|
|
4
|
+
* builds a lossless generic node.
|
|
4
5
|
* Register-once with no unregister, the `customElements` model the schema registries follow.
|
|
5
6
|
* Tier scopes the key, so a container and a leaf may share a name.
|
|
6
7
|
*/
|
|
7
|
-
import {
|
|
8
|
-
const definitions =
|
|
8
|
+
import { createPluginRegistry } from '../../schema/plugin-registry';
|
|
9
|
+
const definitions = createPluginRegistry({
|
|
10
|
+
label: 'registerDirective',
|
|
11
|
+
isBuiltin: () => false
|
|
12
|
+
});
|
|
9
13
|
const keyOf = (tier, name) => `${tier}:${name}`;
|
|
10
14
|
export function registerDirective(tier, name, def) {
|
|
11
15
|
// Fail loud at registration so a tier/factory mismatch can't silently no-op at dispatch.
|
|
@@ -17,17 +21,19 @@ export function registerDirective(tier, name, def) {
|
|
|
17
21
|
throw new Error(`registerDirective: text "${name}" is kind-only; fromDirective is not used for inline nodes.`);
|
|
18
22
|
}
|
|
19
23
|
const key = keyOf(tier, name);
|
|
20
|
-
|
|
24
|
+
definitions.register(key, def, `registerDirective: "${key}" is already registered. Directives are register-once.`);
|
|
21
25
|
}
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
/** The name's definition under an editor's grammar; a name its plugin registered is absent where
|
|
27
|
+
* the editor left that plugin out, so the fence reads as the generic directive. */
|
|
28
|
+
export function resolveDirective(tier, name, grammar) {
|
|
29
|
+
return definitions.get(keyOf(tier, name), grammar.activation);
|
|
24
30
|
}
|
|
25
31
|
/**
|
|
26
|
-
* Pre-narrowed:
|
|
27
|
-
*
|
|
32
|
+
* Pre-narrowed: registration guarantees a block node for these tiers, so the union narrowing
|
|
33
|
+
* happens here once instead of a cast per opener call site.
|
|
28
34
|
*/
|
|
29
|
-
export function resolveBlockDirectiveFactory(tier, name) {
|
|
30
|
-
const factory =
|
|
35
|
+
export function resolveBlockDirectiveFactory(tier, name, grammar) {
|
|
36
|
+
const factory = resolveDirective(tier, name, grammar)?.fromDirective;
|
|
31
37
|
return factory;
|
|
32
38
|
}
|
|
33
39
|
export function isDirectiveRegistered(tier, name) {
|
|
@@ -35,15 +41,8 @@ export function isDirectiveRegistered(tier, name) {
|
|
|
35
41
|
}
|
|
36
42
|
/**
|
|
37
43
|
* What "does this kind have a recognizer" must ask: a directive kind owns no opener of its own,
|
|
38
|
-
* so
|
|
44
|
+
* so checking the opener registry alone reads every directive kind as unrecognizable.
|
|
39
45
|
*/
|
|
40
46
|
export function isDirectiveKind(kind) {
|
|
41
|
-
|
|
42
|
-
if (def.kind === kind)
|
|
43
|
-
return true;
|
|
44
|
-
}
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
export function __resetDirectiveRegistryForTests() {
|
|
48
|
-
definitions.clear();
|
|
47
|
+
return definitions.records().some(({ value }) => value.kind === kind);
|
|
49
48
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Inline text-directive recognizer for `:name[label]{attrs}`. It
|
|
2
|
+
* Inline text-directive recognizer for `:name[label]{attrs}`. It owns the whole span: returning
|
|
3
3
|
* `end` past the `[label]{attrs}` keeps the scanner's bracket stack from competing for the inner
|
|
4
4
|
* `[label]`. Conservative by construction, declining unless `[` or `{` follows the name, so
|
|
5
5
|
* `:smile:`, `10:30`, and `://` stay literal. Meaning is parsed elsewhere (`grammar.ts`).
|
|
6
6
|
*/
|
|
7
7
|
import type { InlineNode, PluginInlineKind } from '../nodes';
|
|
8
|
-
|
|
8
|
+
import type { GrammarView } from '../../schema/block-openers';
|
|
9
|
+
export declare function recognizeTextDirective(raw: string, pos: number, end: number, kind: PluginInlineKind, grammar: GrammarView): InlineNode | null;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Inline text-directive recognizer for `:name[label]{attrs}`. It
|
|
2
|
+
* Inline text-directive recognizer for `:name[label]{attrs}`. It owns the whole span: returning
|
|
3
3
|
* `end` past the `[label]{attrs}` keeps the scanner's bracket stack from competing for the inner
|
|
4
4
|
* `[label]`. Conservative by construction, declining unless `[` or `{` follows the name, so
|
|
5
5
|
* `:smile:`, `10:30`, and `://` stay literal. Meaning is parsed elsewhere (`grammar.ts`).
|
|
@@ -8,12 +8,8 @@ import { createBoundedMemo } from '../../bounded-memo';
|
|
|
8
8
|
import { resolveDirective } from './registry';
|
|
9
9
|
const isNameStart = (code) => (code >= 0x41 && code <= 0x5a) || (code >= 0x61 && code <= 0x7a); // A-Z a-z
|
|
10
10
|
const isNameChar = (code) => isNameStart(code) || (code >= 0x30 && code <= 0x39) || code === 0x2d; // + 0-9 -
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
13
|
-
* starts pays a full block scan each. Matching is prefix-determined, so one stack pass answers
|
|
14
|
-
* every consultation and the caller's `end` filters the result. Bounded rather than weak-keyed
|
|
15
|
-
* because a string cannot key a WeakMap; two entries cover a block's own scan.
|
|
16
|
-
*/
|
|
11
|
+
/** Balanced-run matches per block raw, so a paragraph with many `:name[` starts pays one scan:
|
|
12
|
+
* matching is prefix-determined, and the caller's `end` filters the result. */
|
|
17
13
|
const balancedRuns = createBoundedMemo({ cap: 2 });
|
|
18
14
|
function matchBalancedRuns(raw) {
|
|
19
15
|
const label = new Map();
|
|
@@ -50,7 +46,7 @@ function consumeBalanced(raw, open, end, openCh) {
|
|
|
50
46
|
const close = (openCh === '[' ? runs.label : runs.attrs).get(open);
|
|
51
47
|
return close !== undefined && close <= end ? close : -1;
|
|
52
48
|
}
|
|
53
|
-
export function recognizeTextDirective(raw, pos, end, kind) {
|
|
49
|
+
export function recognizeTextDirective(raw, pos, end, kind, grammar) {
|
|
54
50
|
// `://` is a scheme separator (http://, mailto:), never a directive.
|
|
55
51
|
if (raw[pos + 1] === '/' && raw[pos + 2] === '/')
|
|
56
52
|
return null;
|
|
@@ -82,6 +78,6 @@ export function recognizeTextDirective(raw, pos, end, kind) {
|
|
|
82
78
|
}
|
|
83
79
|
// Sibling-path parity with the block opener: a registered name resolves to the plugin's own
|
|
84
80
|
// inline kind, an unregistered one keeps the generic `kind`.
|
|
85
|
-
const def = resolveDirective('text', raw.slice(pos + 1, nameEnd));
|
|
81
|
+
const def = resolveDirective('text', raw.slice(pos + 1, nameEnd), grammar);
|
|
86
82
|
return { kind: (def?.kind ?? kind), start: pos, end: i };
|
|
87
83
|
}
|
package/dist/core/escapable.d.ts
CHANGED
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CommonMark's 32 escapable ASCII punctuation characters (§2.4). A core leaf because both the
|
|
3
|
-
* inline scanner and the block-level link-reference parser (§4.7) need it, and neither should
|
|
4
|
-
* import the other's directory to reach a lexical constant.
|
|
5
|
-
*/
|
|
1
|
+
/** CommonMark's escapable ASCII punctuation (§2.4), shared by the inline and block parsers. */
|
|
6
2
|
export declare const ESCAPABLE_PUNCTUATION: Set<string>;
|
package/dist/core/escapable.js
CHANGED
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CommonMark's 32 escapable ASCII punctuation characters (§2.4). A core leaf because both the
|
|
3
|
-
* inline scanner and the block-level link-reference parser (§4.7) need it, and neither should
|
|
4
|
-
* import the other's directory to reach a lexical constant.
|
|
5
|
-
*/
|
|
1
|
+
/** CommonMark's escapable ASCII punctuation (§2.4), shared by the inline and block parsers. */
|
|
6
2
|
export const ESCAPABLE_PUNCTUATION = new Set('!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~');
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Backtick-run indexing for code spans (CommonMark §6.1): a run of N backticks closes with the
|
|
3
3
|
* next run of exactly N. Indexed once, then binary-searched per opener, because a per-opener
|
|
4
|
-
* forward rescan to EOF turns a run
|
|
4
|
+
* forward rescan to EOF turns a sequence of growing run lengths quadratic.
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* without which the fence and that byte merge into one longer run and the span closes elsewhere.
|
|
7
|
+
* The fence runs one backtick past the longest run inside, so nothing inside closes it; content
|
|
8
|
+
* with a backtick at an edge gets a space pad, or that backtick would merge into the fence.
|
|
10
9
|
*/
|
|
11
10
|
export declare function wrapAsCodeSpan(content: string): string;
|
|
12
11
|
/** Run start positions by run length, ascending within each length. */
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Backtick-run indexing for code spans (CommonMark §6.1): a run of N backticks closes with the
|
|
3
3
|
* next run of exactly N. Indexed once, then binary-searched per opener, because a per-opener
|
|
4
|
-
* forward rescan to EOF turns a run
|
|
4
|
+
* forward rescan to EOF turns a sequence of growing run lengths quadratic.
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* without which the fence and that byte merge into one longer run and the span closes elsewhere.
|
|
7
|
+
* The fence runs one backtick past the longest run inside, so nothing inside closes it; content
|
|
8
|
+
* with a backtick at an edge gets a space pad, or that backtick would merge into the fence.
|
|
10
9
|
*/
|
|
11
10
|
export function wrapAsCodeSpan(content) {
|
|
12
11
|
const fence = '`'.repeat(longestBacktickRun(content) + 1);
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Per spec, zero, out-of-range, and surrogate code points decode to U+FFFD.
|
|
4
4
|
*/
|
|
5
5
|
import { HTML5_NAMED_ENTITIES } from './html-entities';
|
|
6
|
+
import { isHighSurrogate, isLowSurrogate } from '../lines';
|
|
6
7
|
const REPLACEMENT = '�';
|
|
7
8
|
// The longest body that can decode (`CounterClockwiseContourIntegral`). Capping the `;` search
|
|
8
9
|
// keeps `&`-floods linear, where an unbounded indexOf rescans the region per candidate.
|
|
@@ -62,7 +63,7 @@ function decodeNumeric(body) {
|
|
|
62
63
|
return REPLACEMENT;
|
|
63
64
|
if (codePoint > 0x10ffff)
|
|
64
65
|
return REPLACEMENT;
|
|
65
|
-
if (codePoint
|
|
66
|
+
if (isHighSurrogate(codePoint) || isLowSurrogate(codePoint))
|
|
66
67
|
return REPLACEMENT;
|
|
67
68
|
// The C1 range decodes verbatim, no cp1252 remap: a divergence from an HTML5 reference here
|
|
68
69
|
// is deliberate, following CommonMark §2.5's letter.
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
* title.
|
|
4
|
-
*
|
|
2
|
+
* The inverse of `link-destination.ts` for the two fields every bracketed construct hides: a
|
|
3
|
+
* destination and a title. Reading the written bytes gives the value back, so the image and link
|
|
4
|
+
* write paths cannot change a url or title the user did not edit.
|
|
5
5
|
*/
|
|
6
|
+
/** A bare destination (CommonMark §6.3) for `url`, its parentheses escaped only when they don't
|
|
7
|
+
* all balance. */
|
|
6
8
|
export declare function encodeDestination(url: string): string;
|
|
9
|
+
/** A title's bytes for the double-quoted form. */
|
|
7
10
|
export declare function escapeTitle(title: string): string;
|
|
@@ -1,14 +1,56 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
* title.
|
|
4
|
-
*
|
|
2
|
+
* The inverse of `link-destination.ts` for the two fields every bracketed construct hides: a
|
|
3
|
+
* destination and a title. Reading the written bytes gives the value back, so the image and link
|
|
4
|
+
* write paths cannot change a url or title the user did not edit.
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
//
|
|
8
|
-
|
|
6
|
+
import { matchCharacterReference } from './character-refs';
|
|
7
|
+
// ── Destinations ────────────────────────────────────────────────────────────
|
|
8
|
+
/** A bare destination (CommonMark §6.3) for `url`, its parentheses escaped only when they don't
|
|
9
|
+
* all balance. */
|
|
9
10
|
export function encodeDestination(url) {
|
|
10
|
-
|
|
11
|
+
const escapeParens = !parensBalance(url);
|
|
12
|
+
let out = '';
|
|
13
|
+
for (let i = 0; i < url.length; i++) {
|
|
14
|
+
const ch = url[i];
|
|
15
|
+
if (DESTINATION_ENCODED.has(ch))
|
|
16
|
+
out += percentEncoded(ch);
|
|
17
|
+
else if ((ch === '(' || ch === ')') && escapeParens)
|
|
18
|
+
out += '\\' + ch;
|
|
19
|
+
else
|
|
20
|
+
out += escapedAmpersand(url, i) + ch;
|
|
21
|
+
}
|
|
22
|
+
return out;
|
|
11
23
|
}
|
|
24
|
+
// The destination parser percent-encodes these anyway, so encoding them changes no value; left
|
|
25
|
+
// raw, each would end the destination, open the angle form, or escape the next byte.
|
|
26
|
+
const DESTINATION_ENCODED = new Set(' \t\r\n\u000b\u000c"<>\\');
|
|
27
|
+
function percentEncoded(ch) {
|
|
28
|
+
return '%' + ch.charCodeAt(0).toString(16).toUpperCase().padStart(2, '0');
|
|
29
|
+
}
|
|
30
|
+
function parensBalance(url) {
|
|
31
|
+
let depth = 0;
|
|
32
|
+
for (const ch of url) {
|
|
33
|
+
if (ch === '(')
|
|
34
|
+
depth++;
|
|
35
|
+
else if (ch === ')' && --depth < 0)
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return depth === 0;
|
|
39
|
+
}
|
|
40
|
+
// ── Titles ──────────────────────────────────────────────────────────────────
|
|
41
|
+
/** A title's bytes for the double-quoted form. */
|
|
12
42
|
export function escapeTitle(title) {
|
|
13
|
-
|
|
43
|
+
let out = '';
|
|
44
|
+
for (let i = 0; i < title.length; i++) {
|
|
45
|
+
const ch = title[i];
|
|
46
|
+
out += ch === '\\' || ch === '"' ? '\\' + ch : escapedAmpersand(title, i) + ch;
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
// ── Shared ──────────────────────────────────────────────────────────────────
|
|
51
|
+
/** The backslash an `&` needs when the text after it would read as a character reference. */
|
|
52
|
+
function escapedAmpersand(text, at) {
|
|
53
|
+
if (text[at] !== '&')
|
|
54
|
+
return '';
|
|
55
|
+
return matchCharacterReference(text, at, text.length)?.decoded !== undefined ? '\\' : '';
|
|
14
56
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Visibility
|
|
2
|
+
* Visibility check and DOM builder for the decoded-entity inline widget. A character reference
|
|
3
3
|
* renders as an atomic widget showing its decoded glyph, but only when that glyph is visible:
|
|
4
4
|
* an entity decoding to nothing drawable (` `, `​`) keeps its literal
|
|
5
|
-
* source span, because
|
|
5
|
+
* source span, because the caret would get stuck on an invisible widget.
|
|
6
6
|
*/
|
|
7
7
|
import type { InlineNode } from '../nodes';
|
|
8
8
|
/** True when the decoded value draws at least one glyph, so it earns a widget. */
|
|
9
9
|
export declare function entityRendersGlyph(decoded: string | undefined): boolean;
|
|
10
|
-
/**
|
|
10
|
+
/** The source bytes live on the shell's `data-source-*`, so the DOM-to-offset traversal reads
|
|
11
|
+
* `©` rather than the glyph. */
|
|
11
12
|
export declare function buildEntityWidget(node: InlineNode): HTMLSpanElement;
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Visibility
|
|
2
|
+
* Visibility check and DOM builder for the decoded-entity inline widget. A character reference
|
|
3
3
|
* renders as an atomic widget showing its decoded glyph, but only when that glyph is visible:
|
|
4
4
|
* an entity decoding to nothing drawable (` `, `​`) keeps its literal
|
|
5
|
-
* source span, because
|
|
5
|
+
* source span, because the caret would get stuck on an invisible widget.
|
|
6
6
|
*/
|
|
7
7
|
import { mintWidgetShell } from './inline-widgets';
|
|
8
|
-
// Zero-advance categories only
|
|
9
|
-
//
|
|
10
|
-
// stay widgets. The empty string (a non-decoding node) is invisible by the same test.
|
|
8
|
+
// Zero-advance categories only: a lone combining mark (`Mn`/`Me`, `́`) has nothing to
|
|
9
|
+
// combine with and draws nothing, while a spacing mark (`Mc`) has real width and stays a widget.
|
|
11
10
|
const RENDERS_NO_GLYPH = /^[\p{Cc}\p{Cf}\p{Zs}\p{Zl}\p{Zp}\p{Mn}\p{Me}]*$/u;
|
|
12
11
|
/** True when the decoded value draws at least one glyph, so it earns a widget. */
|
|
13
12
|
export function entityRendersGlyph(decoded) {
|
|
14
13
|
return decoded !== undefined && !RENDERS_NO_GLYPH.test(decoded);
|
|
15
14
|
}
|
|
16
|
-
/**
|
|
15
|
+
/** The source bytes live on the shell's `data-source-*`, so the DOM-to-offset traversal reads
|
|
16
|
+
* `©` rather than the glyph. */
|
|
17
17
|
export function buildEntityWidget(node) {
|
|
18
18
|
const shell = mintWidgetShell('md-entity-widget', node);
|
|
19
19
|
shell.textContent = node.decoded ?? '';
|