@voithos-labs/aragonite 0.10.1
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/LICENSE +661 -0
- package/README.md +365 -0
- package/THIRD-PARTY-NOTICES.md +102 -0
- package/dist/a11y-strings.d.ts +46 -0
- package/dist/a11y-strings.js +62 -0
- package/dist/action-contracts.d.ts +301 -0
- package/dist/action-contracts.js +5 -0
- package/dist/active-editor.d.ts +16 -0
- package/dist/active-editor.js +67 -0
- package/dist/ambient/ambient-cursor.d.ts +41 -0
- package/dist/ambient/ambient-cursor.js +120 -0
- package/dist/ambient/ambient-dom.d.ts +9 -0
- package/dist/ambient/ambient-dom.js +102 -0
- package/dist/assert.d.ts +6 -0
- package/dist/assert.js +17 -0
- package/dist/block-component.d.ts +274 -0
- package/dist/block-component.js +43 -0
- package/dist/block-id.d.ts +14 -0
- package/dist/block-id.js +34 -0
- package/dist/bounded-memo.d.ts +14 -0
- package/dist/bounded-memo.js +32 -0
- package/dist/components/BlockDragHandle.svelte +66 -0
- package/dist/components/BlockDragHandle.svelte.d.ts +18 -0
- package/dist/components/BlockHost.svelte +328 -0
- package/dist/components/BlockHost.svelte.d.ts +15 -0
- package/dist/components/BlockList.svelte +114 -0
- package/dist/components/BlockList.svelte.d.ts +16 -0
- package/dist/components/DecorationOverlay.svelte +156 -0
- package/dist/components/DecorationOverlay.svelte.d.ts +14 -0
- package/dist/components/Editor.svelte +1849 -0
- package/dist/components/Editor.svelte.d.ts +49 -0
- package/dist/components/GapCaret.svelte +226 -0
- package/dist/components/GapCaret.svelte.d.ts +9 -0
- package/dist/components/SearchBar.svelte +243 -0
- package/dist/components/SearchBar.svelte.d.ts +7 -0
- package/dist/components/SelectionOverlay.svelte +171 -0
- package/dist/components/SelectionOverlay.svelte.d.ts +14 -0
- package/dist/components/block-content-selector.d.ts +12 -0
- package/dist/components/block-content-selector.js +12 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +32 -0
- package/dist/components/blocks/BlockquoteBlock.svelte.d.ts +11 -0
- package/dist/components/blocks/ThematicBreakBlock.svelte +156 -0
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +17 -0
- package/dist/components/blocks/code/CodeBlock.svelte +726 -0
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +23 -0
- package/dist/components/blocks/code/CodeLanguageChip.svelte +127 -0
- package/dist/components/blocks/code/CodeLanguageChip.svelte.d.ts +14 -0
- package/dist/components/blocks/code/code-beforeinput.d.ts +30 -0
- package/dist/components/blocks/code/code-beforeinput.js +40 -0
- package/dist/components/blocks/code/code-bootstrap.d.ts +8 -0
- package/dist/components/blocks/code/code-bootstrap.js +54 -0
- package/dist/components/blocks/code/code-editing.d.ts +28 -0
- package/dist/components/blocks/code/code-editing.js +79 -0
- package/dist/components/blocks/code/code-enter.d.ts +22 -0
- package/dist/components/blocks/code/code-enter.js +19 -0
- package/dist/components/blocks/code/code-fence-boundary.d.ts +77 -0
- package/dist/components/blocks/code/code-fence-boundary.js +169 -0
- package/dist/components/blocks/code/code-fence-exit.d.ts +24 -0
- package/dist/components/blocks/code/code-fence-exit.js +36 -0
- package/dist/components/blocks/code/code-indent.d.ts +14 -0
- package/dist/components/blocks/code/code-indent.js +87 -0
- package/dist/components/blocks/code/code-languages.d.ts +15 -0
- package/dist/components/blocks/code/code-languages.js +30 -0
- package/dist/components/blocks/code/code-paste-surface.d.ts +6 -0
- package/dist/components/blocks/code/code-paste-surface.js +29 -0
- package/dist/components/blocks/code/code-paste.d.ts +24 -0
- package/dist/components/blocks/code/code-paste.js +21 -0
- package/dist/components/blocks/code/code-renderer.d.ts +18 -0
- package/dist/components/blocks/code/code-renderer.js +249 -0
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +51 -0
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte.d.ts +11 -0
- package/dist/components/blocks/directive/activate-directives.d.ts +7 -0
- package/dist/components/blocks/directive/activate-directives.js +23 -0
- package/dist/components/blocks/editable-leaf.d.ts +126 -0
- package/dist/components/blocks/editable-leaf.js +410 -0
- package/dist/components/blocks/editable-surface.d.ts +209 -0
- package/dist/components/blocks/editable-surface.js +331 -0
- package/dist/components/blocks/list/ListBlock.svelte +162 -0
- package/dist/components/blocks/list/ListBlock.svelte.d.ts +11 -0
- package/dist/components/blocks/list/ListItemBlock.svelte +324 -0
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +14 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +3 -0
- package/dist/components/blocks/list/task-checkbox.js +33 -0
- package/dist/components/blocks/plain-text-backend.d.ts +21 -0
- package/dist/components/blocks/plain-text-backend.js +47 -0
- package/dist/components/blocks/surface-wiring.svelte.d.ts +18 -0
- package/dist/components/blocks/surface-wiring.svelte.js +68 -0
- package/dist/components/blocks/table/TableActionMenu.svelte +267 -0
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +15 -0
- package/dist/components/blocks/table/TableBlock.svelte +765 -0
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +30 -0
- package/dist/components/blocks/table/TableCellBlock.svelte +1075 -0
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +30 -0
- package/dist/components/blocks/table/TableGrip.svelte +91 -0
- package/dist/components/blocks/table/TableGrip.svelte.d.ts +8 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +233 -0
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +34 -0
- package/dist/components/blocks/table/cell-clipboard.d.ts +23 -0
- package/dist/components/blocks/table/cell-clipboard.js +34 -0
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +37 -0
- package/dist/components/blocks/table/cell-keydown-plan.js +66 -0
- package/dist/components/blocks/table/cell-pointer.d.ts +58 -0
- package/dist/components/blocks/table/cell-pointer.js +153 -0
- package/dist/components/blocks/table/cell-render.d.ts +51 -0
- package/dist/components/blocks/table/cell-render.js +98 -0
- package/dist/components/blocks/table/cell-table-commands.d.ts +12 -0
- package/dist/components/blocks/table/cell-table-commands.js +21 -0
- package/dist/components/blocks/table/cell-x-mapping.d.ts +6 -0
- package/dist/components/blocks/table/cell-x-mapping.js +16 -0
- package/dist/components/blocks/table/selected-cells.d.ts +19 -0
- package/dist/components/blocks/table/selected-cells.js +35 -0
- package/dist/components/blocks/table/table-caret-at-point.d.ts +8 -0
- package/dist/components/blocks/table/table-caret-at-point.js +35 -0
- package/dist/components/blocks/table/table-cell-paste.d.ts +16 -0
- package/dist/components/blocks/table/table-cell-paste.js +75 -0
- package/dist/components/blocks/table/table-drag-hit-test.d.ts +5 -0
- package/dist/components/blocks/table/table-drag-hit-test.js +20 -0
- package/dist/components/blocks/table/table-drop-target.d.ts +1 -0
- package/dist/components/blocks/table/table-drop-target.js +16 -0
- package/dist/components/blocks/table/table-menu-model.d.ts +52 -0
- package/dist/components/blocks/table/table-menu-model.js +78 -0
- package/dist/components/blocks/table/table-navigation.d.ts +8 -0
- package/dist/components/blocks/table/table-navigation.js +22 -0
- package/dist/components/blocks/table/table-reorder-drag.d.ts +78 -0
- package/dist/components/blocks/table/table-reorder-drag.js +97 -0
- package/dist/components/blocks/text/TextEditableBlock.svelte +1012 -0
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +33 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +8 -0
- package/dist/components/blocks/text/click-snap-guard.js +19 -0
- package/dist/components/blocks/text/composition-seat.d.ts +50 -0
- package/dist/components/blocks/text/composition-seat.js +65 -0
- package/dist/components/blocks/text/construct-edge-delete.d.ts +47 -0
- package/dist/components/blocks/text/construct-edge-delete.js +164 -0
- package/dist/components/blocks/text/construct-reveal.d.ts +39 -0
- package/dist/components/blocks/text/construct-reveal.js +164 -0
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +91 -0
- package/dist/components/blocks/text/edge-policy-dispatch.js +457 -0
- package/dist/components/blocks/text/edge-seat.d.ts +42 -0
- package/dist/components/blocks/text/edge-seat.js +197 -0
- package/dist/components/blocks/text/hidden-suffix.d.ts +10 -0
- package/dist/components/blocks/text/hidden-suffix.js +15 -0
- package/dist/components/blocks/text/link-at-point.d.ts +33 -0
- package/dist/components/blocks/text/link-at-point.js +47 -0
- package/dist/components/blocks/text/link-source-bytes.d.ts +37 -0
- package/dist/components/blocks/text/link-source-bytes.js +161 -0
- package/dist/components/blocks/text/live-join-seam.d.ts +15 -0
- package/dist/components/blocks/text/live-join-seam.js +327 -0
- package/dist/components/blocks/text/live-selection-edit.d.ts +68 -0
- package/dist/components/blocks/text/live-selection-edit.js +120 -0
- package/dist/components/blocks/text/live-split-rebalance.d.ts +56 -0
- package/dist/components/blocks/text/live-split-rebalance.js +239 -0
- package/dist/components/blocks/text/marker-completion.d.ts +18 -0
- package/dist/components/blocks/text/marker-completion.js +29 -0
- package/dist/components/blocks/text/pending-mark-insert.d.ts +37 -0
- package/dist/components/blocks/text/pending-mark-insert.js +188 -0
- package/dist/components/blocks/text/screen-diff.d.ts +20 -0
- package/dist/components/blocks/text/screen-diff.js +39 -0
- package/dist/components/blocks/text/text-clipboard.d.ts +70 -0
- package/dist/components/blocks/text/text-clipboard.js +131 -0
- package/dist/components/blocks/text/text-keydown.d.ts +39 -0
- package/dist/components/blocks/text/text-keydown.js +80 -0
- package/dist/components/blocks/text/text-render.d.ts +67 -0
- package/dist/components/blocks/text/text-render.js +215 -0
- package/dist/components/blocks/text/widget-adjacency.d.ts +30 -0
- package/dist/components/blocks/text/widget-adjacency.js +68 -0
- package/dist/components/blocks/text/widget-interaction.d.ts +90 -0
- package/dist/components/blocks/text/widget-interaction.js +591 -0
- package/dist/components/blocks/widget-portal.d.ts +54 -0
- package/dist/components/blocks/widget-portal.js +136 -0
- package/dist/components/built-in-blocks.d.ts +7 -0
- package/dist/components/built-in-blocks.js +77 -0
- package/dist/components/editor-root-clipboard.d.ts +29 -0
- package/dist/components/editor-root-clipboard.js +105 -0
- package/dist/components/editor-root-keydown.d.ts +47 -0
- package/dist/components/editor-root-keydown.js +88 -0
- package/dist/components/editor-root-listeners.d.ts +44 -0
- package/dist/components/editor-root-listeners.js +112 -0
- package/dist/components/image/ImageOverlayHost.svelte +115 -0
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +20 -0
- package/dist/components/image/ImageProperties.svelte +153 -0
- package/dist/components/image/ImageProperties.svelte.d.ts +14 -0
- package/dist/components/image/ImageResizeHandles.svelte +188 -0
- package/dist/components/image/ImageResizeHandles.svelte.d.ts +10 -0
- package/dist/components/image/image-edit-commit.d.ts +38 -0
- package/dist/components/image/image-edit-commit.js +159 -0
- package/dist/components/image/image-resize.d.ts +11 -0
- package/dist/components/image/image-resize.js +38 -0
- package/dist/components/image/image-source-bytes.d.ts +15 -0
- package/dist/components/image/image-source-bytes.js +73 -0
- package/dist/components/image/image-widget-editing.d.ts +7 -0
- package/dist/components/image/image-widget-editing.js +41 -0
- package/dist/components/image/widget-dom.d.ts +11 -0
- package/dist/components/image/widget-dom.js +110 -0
- package/dist/components/image/widget-selection-state.svelte.d.ts +18 -0
- package/dist/components/image/widget-selection-state.svelte.js +26 -0
- package/dist/components/link-card/LinkCard.svelte +190 -0
- package/dist/components/link-card/LinkCard.svelte.d.ts +18 -0
- package/dist/components/link-card/LinkCardHost.svelte +181 -0
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +25 -0
- package/dist/components/link-card/link-card-commit.d.ts +50 -0
- package/dist/components/link-card/link-card-commit.js +134 -0
- package/dist/components/link-card/link-card-entry.d.ts +39 -0
- package/dist/components/link-card/link-card-entry.js +51 -0
- package/dist/components/link-card/link-card-state.svelte.d.ts +44 -0
- package/dist/components/link-card/link-card-state.svelte.js +46 -0
- package/dist/components/lrd-map-gate.d.ts +18 -0
- package/dist/components/lrd-map-gate.js +22 -0
- package/dist/components/paste-image-arm.d.ts +29 -0
- package/dist/components/paste-image-arm.js +61 -0
- package/dist/components/portal.d.ts +11 -0
- package/dist/components/portal.js +29 -0
- package/dist/core/directive/activate.d.ts +8 -0
- package/dist/core/directive/activate.js +25 -0
- package/dist/core/directive/container-opener.d.ts +7 -0
- package/dist/core/directive/container-opener.js +162 -0
- package/dist/core/directive/grammar.d.ts +50 -0
- package/dist/core/directive/grammar.js +88 -0
- package/dist/core/directive/kinds.d.ts +31 -0
- package/dist/core/directive/kinds.js +137 -0
- package/dist/core/directive/registry.d.ts +39 -0
- package/dist/core/directive/registry.js +49 -0
- package/dist/core/directive/text-recognizer.d.ts +8 -0
- package/dist/core/directive/text-recognizer.js +87 -0
- package/dist/core/escapable.d.ts +6 -0
- package/dist/core/escapable.js +6 -0
- package/dist/core/inline/backticks.d.ts +16 -0
- package/dist/core/inline/backticks.js +62 -0
- package/dist/core/inline/character-refs.d.ts +7 -0
- package/dist/core/inline/character-refs.js +70 -0
- package/dist/core/inline/destination-bytes.d.ts +7 -0
- package/dist/core/inline/destination-bytes.js +14 -0
- package/dist/core/inline/entity-widget.d.ts +11 -0
- package/dist/core/inline/entity-widget.js +21 -0
- package/dist/core/inline/format-toggle.d.ts +50 -0
- package/dist/core/inline/format-toggle.js +533 -0
- package/dist/core/inline/html-entities.d.ts +8 -0
- package/dist/core/inline/html-entities.js +2134 -0
- package/dist/core/inline/html-tag-grammar.d.ts +16 -0
- package/dist/core/inline/html-tag-grammar.js +58 -0
- package/dist/core/inline/image-dimensions.d.ts +6 -0
- package/dist/core/inline/image-dimensions.js +42 -0
- package/dist/core/inline/index.d.ts +42 -0
- package/dist/core/inline/index.js +77 -0
- package/dist/core/inline/inline-cache.d.ts +20 -0
- package/dist/core/inline/inline-cache.js +28 -0
- package/dist/core/inline/inline-widgets.d.ts +124 -0
- package/dist/core/inline/inline-widgets.js +131 -0
- package/dist/core/inline/link-reference-resolver.d.ts +21 -0
- package/dist/core/inline/link-reference-resolver.js +46 -0
- package/dist/core/inline/raw-html-widget.d.ts +10 -0
- package/dist/core/inline/raw-html-widget.js +22 -0
- package/dist/core/inline/scan/autolinks.d.ts +23 -0
- package/dist/core/inline/scan/autolinks.js +354 -0
- package/dist/core/inline/scan/brackets.d.ts +11 -0
- package/dist/core/inline/scan/brackets.js +284 -0
- package/dist/core/inline/scan/code-spans.d.ts +7 -0
- package/dist/core/inline/scan/code-spans.js +27 -0
- package/dist/core/inline/scan/emphasis.d.ts +10 -0
- package/dist/core/inline/scan/emphasis.js +276 -0
- package/dist/core/inline/scan/index.d.ts +7 -0
- package/dist/core/inline/scan/index.js +176 -0
- package/dist/core/inline/scan/plugin-syntax.d.ts +62 -0
- package/dist/core/inline/scan/plugin-syntax.js +150 -0
- package/dist/core/inline/scan/scan-state.d.ts +47 -0
- package/dist/core/inline/scan/scan-state.js +48 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +14 -0
- package/dist/core/inline/scan/simple-nodes.js +53 -0
- package/dist/core/inline/scan/url.d.ts +12 -0
- package/dist/core/inline/scan/url.js +82 -0
- package/dist/core/inline/transparency.d.ts +8 -0
- package/dist/core/inline/transparency.js +39 -0
- package/dist/core/inline/visibility.d.ts +81 -0
- package/dist/core/inline/visibility.js +144 -0
- package/dist/core/inline/walk.d.ts +14 -0
- package/dist/core/inline/walk.js +29 -0
- package/dist/core/inline-render.d.ts +48 -0
- package/dist/core/inline-render.js +322 -0
- package/dist/core/lines.d.ts +44 -0
- package/dist/core/lines.js +91 -0
- package/dist/core/node-views.d.ts +22 -0
- package/dist/core/node-views.js +8 -0
- package/dist/core/nodes.d.ts +297 -0
- package/dist/core/nodes.js +83 -0
- package/dist/core/parser.d.ts +68 -0
- package/dist/core/parser.js +189 -0
- package/dist/core/parsers/blockquote.d.ts +17 -0
- package/dist/core/parsers/blockquote.js +69 -0
- package/dist/core/parsers/built-in-openers.d.ts +8 -0
- package/dist/core/parsers/built-in-openers.js +124 -0
- package/dist/core/parsers/fence-syntax.d.ts +24 -0
- package/dist/core/parsers/fence-syntax.js +44 -0
- package/dist/core/parsers/fenced-code.d.ts +7 -0
- package/dist/core/parsers/fenced-code.js +29 -0
- package/dist/core/parsers/heading.d.ts +3 -0
- package/dist/core/parsers/heading.js +6 -0
- package/dist/core/parsers/html-block.d.ts +17 -0
- package/dist/core/parsers/html-block.js +94 -0
- package/dist/core/parsers/indented-code.d.ts +4 -0
- package/dist/core/parsers/indented-code.js +41 -0
- package/dist/core/parsers/link-reference.d.ts +7 -0
- package/dist/core/parsers/link-reference.js +152 -0
- package/dist/core/parsers/list.d.ts +19 -0
- package/dist/core/parsers/list.js +133 -0
- package/dist/core/parsers/paragraph.d.ts +10 -0
- package/dist/core/parsers/paragraph.js +42 -0
- package/dist/core/parsers/table-completion.d.ts +13 -0
- package/dist/core/parsers/table-completion.js +48 -0
- package/dist/core/parsers/table.d.ts +18 -0
- package/dist/core/parsers/table.js +110 -0
- package/dist/core/parsers/thematic-break.d.ts +1 -0
- package/dist/core/parsers/thematic-break.js +19 -0
- package/dist/core/serializer.d.ts +15 -0
- package/dist/core/serializer.js +11 -0
- package/dist/core/terminator-escalation.d.ts +8 -0
- package/dist/core/terminator-escalation.js +18 -0
- package/dist/core/url-policy.d.ts +14 -0
- package/dist/core/url-policy.js +44 -0
- package/dist/cursor/content-offsets.d.ts +29 -0
- package/dist/cursor/content-offsets.js +151 -0
- package/dist/cursor/coordinate-spaces.d.ts +65 -0
- package/dist/cursor/coordinate-spaces.js +66 -0
- package/dist/cursor/dom-walk.d.ts +18 -0
- package/dist/cursor/dom-walk.js +31 -0
- package/dist/cursor/edge-affinity.d.ts +44 -0
- package/dist/cursor/edge-affinity.js +60 -0
- package/dist/cursor/focused-caret.d.ts +10 -0
- package/dist/cursor/focused-caret.js +24 -0
- package/dist/cursor/height-model.d.ts +24 -0
- package/dist/cursor/height-model.js +72 -0
- package/dist/cursor/height-oracle.d.ts +24 -0
- package/dist/cursor/height-oracle.js +94 -0
- package/dist/cursor/overlay-rects.d.ts +8 -0
- package/dist/cursor/overlay-rects.js +19 -0
- package/dist/cursor/overlay-remeasure.d.ts +17 -0
- package/dist/cursor/overlay-remeasure.js +31 -0
- package/dist/cursor/pending-marks.d.ts +24 -0
- package/dist/cursor/pending-marks.js +36 -0
- package/dist/cursor/point-offset.d.ts +21 -0
- package/dist/cursor/point-offset.js +48 -0
- package/dist/cursor/reveal-anchor.d.ts +30 -0
- package/dist/cursor/reveal-anchor.js +31 -0
- package/dist/cursor/reveal-source.d.ts +35 -0
- package/dist/cursor/reveal-source.js +51 -0
- package/dist/cursor/scroll-ancestors.d.ts +28 -0
- package/dist/cursor/scroll-ancestors.js +89 -0
- package/dist/cursor/scrollport.d.ts +20 -0
- package/dist/cursor/scrollport.js +41 -0
- package/dist/cursor/sticky-column.d.ts +35 -0
- package/dist/cursor/sticky-column.js +64 -0
- package/dist/cursor/sticky-measure.d.ts +16 -0
- package/dist/cursor/sticky-measure.js +97 -0
- package/dist/cursor/typography-estimates.d.ts +21 -0
- package/dist/cursor/typography-estimates.js +21 -0
- package/dist/cursor/visual-lines.d.ts +25 -0
- package/dist/cursor/visual-lines.js +125 -0
- package/dist/cursor/widget-offset.d.ts +132 -0
- package/dist/cursor/widget-offset.js +543 -0
- package/dist/debug/diagnostics-report.d.ts +17 -0
- package/dist/debug/diagnostics-report.js +25 -0
- package/dist/debug/dump-tree.d.ts +6 -0
- package/dist/debug/dump-tree.js +114 -0
- package/dist/debug/inspect.d.ts +19 -0
- package/dist/debug/inspect.js +116 -0
- package/dist/debug/interaction-trace.d.ts +39 -0
- package/dist/debug/interaction-trace.js +105 -0
- package/dist/debug/operations-log.d.ts +14 -0
- package/dist/debug/operations-log.js +30 -0
- package/dist/decorations/buckets.d.ts +40 -0
- package/dist/decorations/buckets.js +87 -0
- package/dist/decorations/decoration-state.svelte.d.ts +20 -0
- package/dist/decorations/decoration-state.svelte.js +195 -0
- package/dist/decorations/island-dom.d.ts +35 -0
- package/dist/decorations/island-dom.js +148 -0
- package/dist/decorations/reserved-attrs.d.ts +12 -0
- package/dist/decorations/reserved-attrs.js +47 -0
- package/dist/decorations/types.d.ts +68 -0
- package/dist/decorations/types.js +5 -0
- package/dist/decorations/widget-dom.d.ts +15 -0
- package/dist/decorations/widget-dom.js +35 -0
- package/dist/dev-warn.d.ts +13 -0
- package/dist/dev-warn.js +28 -0
- package/dist/editor-actions/ancestry-folds.d.ts +32 -0
- package/dist/editor-actions/ancestry-folds.js +106 -0
- package/dist/editor-actions/block-edit-core.d.ts +29 -0
- package/dist/editor-actions/block-edit-core.js +277 -0
- package/dist/editor-actions/block-edit-scope.d.ts +79 -0
- package/dist/editor-actions/block-edit-scope.js +76 -0
- package/dist/editor-actions/block-edit.d.ts +8 -0
- package/dist/editor-actions/block-edit.js +111 -0
- package/dist/editor-actions/commit/history.d.ts +9 -0
- package/dist/editor-actions/commit/history.js +77 -0
- package/dist/editor-actions/commit/text-batch.d.ts +34 -0
- package/dist/editor-actions/commit/text-batch.js +61 -0
- package/dist/editor-actions/commit/undo-controller.d.ts +7 -0
- package/dist/editor-actions/commit/undo-controller.js +570 -0
- package/dist/editor-actions/container-block-component.d.ts +85 -0
- package/dist/editor-actions/container-block-component.js +228 -0
- package/dist/editor-actions/container-edit.d.ts +7 -0
- package/dist/editor-actions/container-edit.js +49 -0
- package/dist/editor-actions/container-exit-overrides.d.ts +16 -0
- package/dist/editor-actions/container-exit-overrides.js +38 -0
- package/dist/editor-actions/deps.d.ts +60 -0
- package/dist/editor-actions/deps.js +1 -0
- package/dist/editor-actions/enter-completion.d.ts +25 -0
- package/dist/editor-actions/enter-completion.js +76 -0
- package/dist/editor-actions/focus/focus-dispatch.d.ts +36 -0
- package/dist/editor-actions/focus/focus-dispatch.js +106 -0
- package/dist/editor-actions/focus/focus-landing.d.ts +7 -0
- package/dist/editor-actions/focus/focus-landing.js +39 -0
- package/dist/editor-actions/focus/focus.d.ts +7 -0
- package/dist/editor-actions/focus/focus.js +74 -0
- package/dist/editor-actions/index.d.ts +15 -0
- package/dist/editor-actions/index.js +19 -0
- package/dist/editor-actions/inline-range-commit.d.ts +20 -0
- package/dist/editor-actions/inline-range-commit.js +63 -0
- package/dist/editor-actions/list-context.d.ts +25 -0
- package/dist/editor-actions/list-context.js +285 -0
- package/dist/editor-actions/list-overrides.d.ts +13 -0
- package/dist/editor-actions/list-overrides.js +26 -0
- package/dist/editor-actions/merge-fallback.d.ts +19 -0
- package/dist/editor-actions/merge-fallback.js +27 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +65 -0
- package/dist/editor-actions/nested/nested-actions.js +59 -0
- package/dist/editor-actions/nested/nested-block-edit.d.ts +10 -0
- package/dist/editor-actions/nested/nested-block-edit.js +181 -0
- package/dist/editor-actions/nested/nested-focus.d.ts +9 -0
- package/dist/editor-actions/nested/nested-focus.js +30 -0
- package/dist/editor-actions/paste-coordinator.d.ts +4 -0
- package/dist/editor-actions/paste-coordinator.js +20 -0
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +25 -0
- package/dist/editor-actions/plugin/chrome-leaf.js +80 -0
- package/dist/editor-actions/plugin/container.d.ts +137 -0
- package/dist/editor-actions/plugin/container.js +351 -0
- package/dist/editor-actions/plugin/directive-container.d.ts +13 -0
- package/dist/editor-actions/plugin/directive-container.js +31 -0
- package/dist/editor-actions/reorder-action.d.ts +17 -0
- package/dist/editor-actions/reorder-action.js +104 -0
- package/dist/editor-actions/reorder-drag.d.ts +34 -0
- package/dist/editor-actions/reorder-drag.js +152 -0
- package/dist/editor-actions/replacement-focus.d.ts +27 -0
- package/dist/editor-actions/replacement-focus.js +60 -0
- package/dist/editor-actions/search-replace.d.ts +6 -0
- package/dist/editor-actions/search-replace.js +145 -0
- package/dist/editor-actions/table-context.d.ts +34 -0
- package/dist/editor-actions/table-context.js +292 -0
- package/dist/editor-actions/unwrap-strategies.d.ts +14 -0
- package/dist/editor-actions/unwrap-strategies.js +131 -0
- package/dist/editor-actions/whole-block-focus-surface.d.ts +51 -0
- package/dist/editor-actions/whole-block-focus-surface.js +171 -0
- package/dist/editor-events.d.ts +89 -0
- package/dist/editor-events.js +96 -0
- package/dist/editor-keys.d.ts +197 -0
- package/dist/editor-keys.js +40 -0
- package/dist/editor-props.d.ts +164 -0
- package/dist/editor-props.js +1 -0
- package/dist/editor-rects.d.ts +58 -0
- package/dist/editor-rects.js +114 -0
- package/dist/env.d.ts +12 -0
- package/dist/env.js +20 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +19 -0
- package/dist/invariants/commit-paths.d.ts +10 -0
- package/dist/invariants/commit-paths.js +25 -0
- package/dist/invariants/commit-scope.d.ts +9 -0
- package/dist/invariants/commit-scope.js +16 -0
- package/dist/invariants/context-keys.d.ts +7 -0
- package/dist/invariants/context-keys.js +14 -0
- package/dist/invariants/descriptor.d.ts +10 -0
- package/dist/invariants/descriptor.js +24 -0
- package/dist/invariants/inline-transitions.d.ts +23 -0
- package/dist/invariants/inline-transitions.js +52 -0
- package/dist/invariants/install.d.ts +36 -0
- package/dist/invariants/install.js +66 -0
- package/dist/invariants/landable-caret.d.ts +12 -0
- package/dist/invariants/landable-caret.js +31 -0
- package/dist/invariants/marker-css-parity.d.ts +10 -0
- package/dist/invariants/marker-css-parity.js +87 -0
- package/dist/invariants/node-shape.d.ts +44 -0
- package/dist/invariants/node-shape.js +258 -0
- package/dist/invariants/registry.d.ts +126 -0
- package/dist/invariants/registry.js +349 -0
- package/dist/invariants/render-fidelity.d.ts +8 -0
- package/dist/invariants/render-fidelity.js +33 -0
- package/dist/invariants/selection-endpoints.d.ts +19 -0
- package/dist/invariants/selection-endpoints.js +78 -0
- package/dist/invariants/single-node-sink.d.ts +9 -0
- package/dist/invariants/single-node-sink.js +16 -0
- package/dist/invariants/snapshot-integrity.d.ts +17 -0
- package/dist/invariants/snapshot-integrity.js +24 -0
- package/dist/invariants/split-landing.d.ts +8 -0
- package/dist/invariants/split-landing.js +15 -0
- package/dist/invariants/structural-descriptor.d.ts +21 -0
- package/dist/invariants/structural-descriptor.js +50 -0
- package/dist/perf/instruments.d.ts +49 -0
- package/dist/perf/instruments.js +154 -0
- package/dist/perf/use-mount-gauge.svelte.d.ts +1 -0
- package/dist/perf/use-mount-gauge.svelte.js +15 -0
- package/dist/plugin.d.ts +102 -0
- package/dist/plugin.js +156 -0
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +144 -0
- package/dist/plugins/admonitions/AdmonitionBlock.svelte.d.ts +11 -0
- package/dist/plugins/admonitions/admonition-kind.d.ts +8 -0
- package/dist/plugins/admonitions/admonition-kind.js +97 -0
- package/dist/plugins/admonitions/convert-document.d.ts +11 -0
- package/dist/plugins/admonitions/convert-document.js +39 -0
- package/dist/plugins/admonitions/gh-alert.d.ts +13 -0
- package/dist/plugins/admonitions/gh-alert.js +83 -0
- package/dist/plugins/admonitions/github-alert-kind.d.ts +12 -0
- package/dist/plugins/admonitions/github-alert-kind.js +125 -0
- package/dist/plugins/admonitions/index.d.ts +6 -0
- package/dist/plugins/admonitions/index.js +8 -0
- package/dist/plugins/admonitions/kinds.d.ts +26 -0
- package/dist/plugins/admonitions/kinds.js +18 -0
- package/dist/plugins/admonitions/register.d.ts +7 -0
- package/dist/plugins/admonitions/register.js +12 -0
- package/dist/plugins/details/DetailsBlock.svelte +129 -0
- package/dist/plugins/details/DetailsBlock.svelte.d.ts +11 -0
- package/dist/plugins/details/details-disclosure.svelte.d.ts +17 -0
- package/dist/plugins/details/details-disclosure.svelte.js +24 -0
- package/dist/plugins/details/details-kind.d.ts +25 -0
- package/dist/plugins/details/details-kind.js +237 -0
- package/dist/plugins/details/index.d.ts +2 -0
- package/dist/plugins/details/index.js +2 -0
- package/dist/plugins/details/register.d.ts +6 -0
- package/dist/plugins/details/register.js +15 -0
- package/dist/plugins/emoji/emoji-plugin.d.ts +2 -0
- package/dist/plugins/emoji/emoji-plugin.js +10 -0
- package/dist/plugins/emoji/emoji-recognizer.d.ts +18 -0
- package/dist/plugins/emoji/emoji-recognizer.js +63 -0
- package/dist/plugins/emoji/emoji-table.d.ts +1 -0
- package/dist/plugins/emoji/emoji-table.js +1919 -0
- package/dist/plugins/emoji/index.d.ts +3 -0
- package/dist/plugins/emoji/index.js +4 -0
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +103 -0
- package/dist/plugins/footnotes/FootnoteDefinition.svelte.d.ts +13 -0
- package/dist/plugins/footnotes/FootnoteReference.svelte +50 -0
- package/dist/plugins/footnotes/FootnoteReference.svelte.d.ts +4 -0
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +4 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +14 -0
- package/dist/plugins/footnotes/footnote-definition.js +147 -0
- package/dist/plugins/footnotes/footnote-lookup.d.ts +9 -0
- package/dist/plugins/footnotes/footnote-lookup.js +33 -0
- package/dist/plugins/footnotes/footnote-numbering.d.ts +23 -0
- package/dist/plugins/footnotes/footnote-numbering.js +78 -0
- package/dist/plugins/footnotes/footnote-reference.d.ts +7 -0
- package/dist/plugins/footnotes/footnote-reference.js +54 -0
- package/dist/plugins/footnotes/footnotes-plugin.d.ts +7 -0
- package/dist/plugins/footnotes/footnotes-plugin.js +17 -0
- package/dist/plugins/footnotes/index.d.ts +5 -0
- package/dist/plugins/footnotes/index.js +6 -0
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +17 -0
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +31 -0
- package/dist/plugins/highlight-occurrences/index.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/index.js +1 -0
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +26 -0
- package/dist/plugins/highlight-occurrences/occurrence-source.js +54 -0
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +33 -0
- package/dist/plugins/highlight-occurrences/occurrences.js +108 -0
- package/dist/plugins/latex/BlockMath.svelte +119 -0
- package/dist/plugins/latex/BlockMath.svelte.d.ts +21 -0
- package/dist/plugins/latex/MathInline.svelte +28 -0
- package/dist/plugins/latex/MathInline.svelte.d.ts +4 -0
- package/dist/plugins/latex/index.d.ts +3 -0
- package/dist/plugins/latex/index.js +4 -0
- package/dist/plugins/latex/latex-kind.d.ts +17 -0
- package/dist/plugins/latex/latex-kind.js +224 -0
- package/dist/plugins/latex/math-completion.d.ts +10 -0
- package/dist/plugins/latex/math-completion.js +19 -0
- package/dist/plugins/latex/math-renderer.d.ts +26 -0
- package/dist/plugins/latex/math-renderer.js +42 -0
- package/dist/plugins/latex/register.d.ts +10 -0
- package/dist/plugins/latex/register.js +23 -0
- package/dist/plugins/latex/renderer.d.ts +13 -0
- package/dist/plugins/latex/renderer.js +34 -0
- package/dist/plugins/mermaid/MermaidBlock.svelte +572 -0
- package/dist/plugins/mermaid/MermaidBlock.svelte.d.ts +11 -0
- package/dist/plugins/mermaid/index.d.ts +3 -0
- package/dist/plugins/mermaid/index.js +3 -0
- package/dist/plugins/mermaid/mermaid-kind.d.ts +38 -0
- package/dist/plugins/mermaid/mermaid-kind.js +176 -0
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +28 -0
- package/dist/plugins/mermaid/mermaid-renderer.js +35 -0
- package/dist/plugins/mermaid/register.d.ts +10 -0
- package/dist/plugins/mermaid/register.js +20 -0
- package/dist/plugins/mermaid/renderer.d.ts +11 -0
- package/dist/plugins/mermaid/renderer.js +53 -0
- package/dist/plugins/parrot/ParrotBlock.svelte +342 -0
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +21 -0
- package/dist/plugins/parrot/index.d.ts +1 -0
- package/dist/plugins/parrot/index.js +2 -0
- package/dist/plugins/parrot/parrot-plugin.d.ts +3 -0
- package/dist/plugins/parrot/parrot-plugin.js +49 -0
- package/dist/plugins/toc/TocBlock.svelte +218 -0
- package/dist/plugins/toc/TocBlock.svelte.d.ts +24 -0
- package/dist/plugins/toc/heading-outline.d.ts +28 -0
- package/dist/plugins/toc/heading-outline.js +65 -0
- package/dist/plugins/toc/index.d.ts +2 -0
- package/dist/plugins/toc/index.js +2 -0
- package/dist/plugins/toc/navigation-queue.d.ts +12 -0
- package/dist/plugins/toc/navigation-queue.js +21 -0
- package/dist/plugins/toc/toc-plugin.d.ts +16 -0
- package/dist/plugins/toc/toc-plugin.js +71 -0
- package/dist/presentation-mode.d.ts +32 -0
- package/dist/presentation-mode.js +50 -0
- package/dist/reactivity/block-list-state.svelte.d.ts +22 -0
- package/dist/reactivity/block-list-state.svelte.js +46 -0
- package/dist/reactivity/block-window.svelte.d.ts +41 -0
- package/dist/reactivity/block-window.svelte.js +93 -0
- package/dist/reactivity/content-version.svelte.d.ts +14 -0
- package/dist/reactivity/content-version.svelte.js +16 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +100 -0
- package/dist/reactivity/list-windowing.svelte.js +402 -0
- package/dist/reactivity/measure-batch.d.ts +15 -0
- package/dist/reactivity/measure-batch.js +18 -0
- package/dist/reactivity/publish-ref.svelte.d.ts +54 -0
- package/dist/reactivity/publish-ref.svelte.js +128 -0
- package/dist/reactivity/scope-geometry.d.ts +18 -0
- package/dist/reactivity/scope-geometry.js +29 -0
- package/dist/reactivity/state-registry.d.ts +10 -0
- package/dist/reactivity/state-registry.js +44 -0
- package/dist/reactivity/use-container-windowing.svelte.d.ts +35 -0
- package/dist/reactivity/use-container-windowing.svelte.js +95 -0
- package/dist/reactivity/window-slice.d.ts +11 -0
- package/dist/reactivity/window-slice.js +9 -0
- package/dist/scan-index.d.ts +11 -0
- package/dist/scan-index.js +27 -0
- package/dist/schema/block-commands.d.ts +105 -0
- package/dist/schema/block-commands.js +179 -0
- package/dist/schema/block-completions.d.ts +33 -0
- package/dist/schema/block-completions.js +49 -0
- package/dist/schema/block-component-registry.d.ts +33 -0
- package/dist/schema/block-component-registry.js +33 -0
- package/dist/schema/block-kind-descriptor.d.ts +281 -0
- package/dist/schema/block-kind-descriptor.js +187 -0
- package/dist/schema/block-openers.d.ts +94 -0
- package/dist/schema/block-openers.js +150 -0
- package/dist/schema/built-in-descriptors.d.ts +8 -0
- package/dist/schema/built-in-descriptors.js +560 -0
- package/dist/schema/child-spans.d.ts +25 -0
- package/dist/schema/child-spans.js +161 -0
- package/dist/schema/closure.d.ts +39 -0
- package/dist/schema/closure.js +55 -0
- package/dist/schema/command-id.d.ts +20 -0
- package/dist/schema/command-id.js +42 -0
- package/dist/schema/commands.d.ts +147 -0
- package/dist/schema/commands.js +294 -0
- package/dist/schema/container-raw.d.ts +21 -0
- package/dist/schema/container-raw.js +43 -0
- package/dist/schema/container-rebuilders.d.ts +32 -0
- package/dist/schema/container-rebuilders.js +95 -0
- package/dist/schema/define-plugin-block.d.ts +15 -0
- package/dist/schema/define-plugin-block.js +18 -0
- package/dist/schema/fenced-code-raw.d.ts +43 -0
- package/dist/schema/fenced-code-raw.js +220 -0
- package/dist/schema/global-commands.d.ts +11 -0
- package/dist/schema/global-commands.js +40 -0
- package/dist/schema/inline-construct-policy.d.ts +131 -0
- package/dist/schema/inline-construct-policy.js +96 -0
- package/dist/schema/keybinding-overrides.d.ts +39 -0
- package/dist/schema/keybinding-overrides.js +43 -0
- package/dist/schema/keybindings.d.ts +36 -0
- package/dist/schema/keybindings.js +75 -0
- package/dist/schema/merge-rules.d.ts +28 -0
- package/dist/schema/merge-rules.js +57 -0
- package/dist/schema/opener-priorities.d.ts +16 -0
- package/dist/schema/opener-priorities.js +16 -0
- package/dist/schema/operations.d.ts +110 -0
- package/dist/schema/operations.js +6 -0
- package/dist/schema/plugin-activation.d.ts +13 -0
- package/dist/schema/plugin-activation.js +18 -0
- package/dist/schema/plugin-editor-context.d.ts +33 -0
- package/dist/schema/plugin-editor-context.js +65 -0
- package/dist/schema/plugin-install.d.ts +58 -0
- package/dist/schema/plugin-install.js +132 -0
- package/dist/schema/plugin-kind.d.ts +21 -0
- package/dist/schema/plugin-kind.js +86 -0
- package/dist/schema/plugin-name.d.ts +1 -0
- package/dist/schema/plugin-name.js +7 -0
- package/dist/schema/register-once.d.ts +9 -0
- package/dist/schema/register-once.js +35 -0
- package/dist/schema/registration-checks.d.ts +32 -0
- package/dist/schema/registration-checks.js +122 -0
- package/dist/schema/registration-pending.d.ts +28 -0
- package/dist/schema/registration-pending.js +48 -0
- package/dist/schema/registry-reset.d.ts +7 -0
- package/dist/schema/registry-reset.js +30 -0
- package/dist/schema/registry-view.d.ts +30 -0
- package/dist/schema/registry-view.js +39 -0
- package/dist/schema/reserved-chords.d.ts +35 -0
- package/dist/schema/reserved-chords.js +313 -0
- package/dist/schema/reserved-chrome.d.ts +23 -0
- package/dist/schema/reserved-chrome.js +33 -0
- package/dist/schema/table-cell-raw.d.ts +14 -0
- package/dist/schema/table-cell-raw.js +30 -0
- package/dist/schema/whole-block-unit.d.ts +8 -0
- package/dist/schema/whole-block-unit.js +12 -0
- package/dist/search/document-scan.d.ts +22 -0
- package/dist/search/document-scan.js +39 -0
- package/dist/search/matcher.d.ts +31 -0
- package/dist/search/matcher.js +70 -0
- package/dist/search/regex-executor.d.ts +41 -0
- package/dist/search/regex-executor.js +165 -0
- package/dist/search/replace.d.ts +15 -0
- package/dist/search/replace.js +29 -0
- package/dist/search/search-state.svelte.d.ts +59 -0
- package/dist/search/search-state.svelte.js +231 -0
- package/dist/selection/autoscroll.d.ts +26 -0
- package/dist/selection/autoscroll.js +91 -0
- package/dist/selection/block-hit-test.d.ts +37 -0
- package/dist/selection/block-hit-test.js +59 -0
- package/dist/selection/caret-doors.d.ts +20 -0
- package/dist/selection/caret-doors.js +44 -0
- package/dist/selection/caret-restore.d.ts +15 -0
- package/dist/selection/caret-restore.js +32 -0
- package/dist/selection/char-endpoint-snap.d.ts +15 -0
- package/dist/selection/char-endpoint-snap.js +39 -0
- package/dist/selection/clipboard-text.d.ts +13 -0
- package/dist/selection/clipboard-text.js +314 -0
- package/dist/selection/cross-block/clipboard.d.ts +14 -0
- package/dist/selection/cross-block/clipboard.js +20 -0
- package/dist/selection/cross-block/dispatch.d.ts +78 -0
- package/dist/selection/cross-block/dispatch.js +57 -0
- package/dist/selection/cross-block/format-range.d.ts +38 -0
- package/dist/selection/cross-block/format-range.js +193 -0
- package/dist/selection/cross-block/format-toggle.d.ts +27 -0
- package/dist/selection/cross-block/format-toggle.js +109 -0
- package/dist/selection/cross-block/keydown.d.ts +11 -0
- package/dist/selection/cross-block/keydown.js +339 -0
- package/dist/selection/cross-block/ops.d.ts +56 -0
- package/dist/selection/cross-block/ops.js +210 -0
- package/dist/selection/cross-block/paste.d.ts +8 -0
- package/dist/selection/cross-block/paste.js +156 -0
- package/dist/selection/cross-block/pointer.d.ts +19 -0
- package/dist/selection/cross-block/pointer.js +80 -0
- package/dist/selection/cross-block/type-replace.d.ts +10 -0
- package/dist/selection/cross-block/type-replace.js +129 -0
- package/dist/selection/dead-space-caret.d.ts +39 -0
- package/dist/selection/dead-space-caret.js +173 -0
- package/dist/selection/drag-pointer.d.ts +22 -0
- package/dist/selection/drag-pointer.js +89 -0
- package/dist/selection/gap-caret.d.ts +47 -0
- package/dist/selection/gap-caret.js +72 -0
- package/dist/selection/keyboard-extend.d.ts +43 -0
- package/dist/selection/keyboard-extend.js +257 -0
- package/dist/selection/native-bridge.d.ts +47 -0
- package/dist/selection/native-bridge.js +204 -0
- package/dist/selection/nearest-block.d.ts +43 -0
- package/dist/selection/nearest-block.js +73 -0
- package/dist/selection/path-lookup.d.ts +32 -0
- package/dist/selection/path-lookup.js +132 -0
- package/dist/selection/path-math.d.ts +35 -0
- package/dist/selection/path-math.js +90 -0
- package/dist/selection/pointer-session.d.ts +43 -0
- package/dist/selection/pointer-session.js +111 -0
- package/dist/selection/primitives.d.ts +75 -0
- package/dist/selection/primitives.js +91 -0
- package/dist/selection/range-delete-ceremony.d.ts +85 -0
- package/dist/selection/range-delete-ceremony.js +197 -0
- package/dist/selection/range-delete-chrome.d.ts +39 -0
- package/dist/selection/range-delete-chrome.js +105 -0
- package/dist/selection/range-delete-table-coverage.d.ts +28 -0
- package/dist/selection/range-delete-table-coverage.js +168 -0
- package/dist/selection/range-delete-table.d.ts +16 -0
- package/dist/selection/range-delete-table.js +347 -0
- package/dist/selection/range-delete.d.ts +33 -0
- package/dist/selection/range-delete.js +121 -0
- package/dist/selection/selection-description.d.ts +7 -0
- package/dist/selection/selection-description.js +18 -0
- package/dist/selection/selection-restore.d.ts +46 -0
- package/dist/selection/selection-restore.js +66 -0
- package/dist/selection/selection-state.svelte.d.ts +72 -0
- package/dist/selection/selection-state.svelte.js +247 -0
- package/dist/selection/shared-keydown.d.ts +61 -0
- package/dist/selection/shared-keydown.js +150 -0
- package/dist/selection/table-endpoint-snap.d.ts +55 -0
- package/dist/selection/table-endpoint-snap.js +143 -0
- package/dist/selection/table-rect-extend.d.ts +23 -0
- package/dist/selection/table-rect-extend.js +46 -0
- package/dist/selection/widget-range-paint.d.ts +12 -0
- package/dist/selection/widget-range-paint.js +44 -0
- package/dist/styles/editor-theme.css +151 -0
- package/dist/styles/editor.css +585 -0
- package/dist/testing/conformance-core.d.ts +45 -0
- package/dist/testing/conformance-core.js +105 -0
- package/dist/testing/container-conformance.d.ts +137 -0
- package/dist/testing/container-conformance.js +533 -0
- package/dist/testing/headless-actions.d.ts +37 -0
- package/dist/testing/headless-actions.js +118 -0
- package/dist/testing/inline-conformance.d.ts +50 -0
- package/dist/testing/inline-conformance.js +442 -0
- package/dist/testing/kind-conformance.d.ts +54 -0
- package/dist/testing/kind-conformance.js +325 -0
- package/dist/testing/mount-dom-stubs.d.ts +8 -0
- package/dist/testing/mount-dom-stubs.js +19 -0
- package/dist/testing/parse-convergence.d.ts +14 -0
- package/dist/testing/parse-convergence.js +81 -0
- package/dist/testing.d.ts +20 -0
- package/dist/testing.js +61 -0
- package/dist/tree-operations/blockquote.d.ts +18 -0
- package/dist/tree-operations/blockquote.js +59 -0
- package/dist/tree-operations/children.d.ts +17 -0
- package/dist/tree-operations/children.js +56 -0
- package/dist/tree-operations/cleanup.d.ts +10 -0
- package/dist/tree-operations/cleanup.js +25 -0
- package/dist/tree-operations/clone.d.ts +5 -0
- package/dist/tree-operations/clone.js +43 -0
- package/dist/tree-operations/container-lift.d.ts +9 -0
- package/dist/tree-operations/container-lift.js +29 -0
- package/dist/tree-operations/index.d.ts +16 -0
- package/dist/tree-operations/index.js +14 -0
- package/dist/tree-operations/list/empty-check.d.ts +7 -0
- package/dist/tree-operations/list/empty-check.js +19 -0
- package/dist/tree-operations/list/exit-replacement.d.ts +13 -0
- package/dist/tree-operations/list/exit-replacement.js +49 -0
- package/dist/tree-operations/list/item-partition.d.ts +13 -0
- package/dist/tree-operations/list/item-partition.js +33 -0
- package/dist/tree-operations/list/list-builders.d.ts +44 -0
- package/dist/tree-operations/list/list-builders.js +129 -0
- package/dist/tree-operations/list/ordered-markers.d.ts +36 -0
- package/dist/tree-operations/list/ordered-markers.js +114 -0
- package/dist/tree-operations/list/reconcile-task.d.ts +12 -0
- package/dist/tree-operations/list/reconcile-task.js +47 -0
- package/dist/tree-operations/list/sublist-separator.d.ts +13 -0
- package/dist/tree-operations/list/sublist-separator.js +34 -0
- package/dist/tree-operations/list/terminator.d.ts +17 -0
- package/dist/tree-operations/list/terminator.js +60 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +29 -0
- package/dist/tree-operations/list/unwrap-merge.js +202 -0
- package/dist/tree-operations/node-ops.d.ts +296 -0
- package/dist/tree-operations/node-ops.js +1428 -0
- package/dist/tree-operations/parse-block.d.ts +3 -0
- package/dist/tree-operations/parse-block.js +8 -0
- package/dist/tree-operations/paste/apply.d.ts +12 -0
- package/dist/tree-operations/paste/apply.js +75 -0
- package/dist/tree-operations/paste/body-write.d.ts +19 -0
- package/dist/tree-operations/paste/body-write.js +53 -0
- package/dist/tree-operations/paste/container-match.d.ts +32 -0
- package/dist/tree-operations/paste/container-match.js +238 -0
- package/dist/tree-operations/paste/container-paste.d.ts +10 -0
- package/dist/tree-operations/paste/container-paste.js +27 -0
- package/dist/tree-operations/paste/dispatch.d.ts +61 -0
- package/dist/tree-operations/paste/dispatch.js +138 -0
- package/dist/tree-operations/paste/find-enclosing-list.d.ts +8 -0
- package/dist/tree-operations/paste/find-enclosing-list.js +30 -0
- package/dist/tree-operations/paste/focus-target.d.ts +27 -0
- package/dist/tree-operations/paste/focus-target.js +40 -0
- package/dist/tree-operations/paste/hooks.d.ts +17 -0
- package/dist/tree-operations/paste/hooks.js +80 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +29 -0
- package/dist/tree-operations/paste/list-absorb.js +106 -0
- package/dist/tree-operations/paste/list-break-out.d.ts +42 -0
- package/dist/tree-operations/paste/list-break-out.js +136 -0
- package/dist/tree-operations/paste/parent-scope.d.ts +17 -0
- package/dist/tree-operations/paste/parent-scope.js +35 -0
- package/dist/tree-operations/paste/paste-deps.d.ts +20 -0
- package/dist/tree-operations/paste/paste-deps.js +6 -0
- package/dist/tree-operations/paste/paste-replacement.d.ts +8 -0
- package/dist/tree-operations/paste/paste-replacement.js +60 -0
- package/dist/tree-operations/paste/paste-transforms.d.ts +25 -0
- package/dist/tree-operations/paste/paste-transforms.js +72 -0
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +29 -0
- package/dist/tree-operations/paste/replace-block-at-parent.js +75 -0
- package/dist/tree-operations/paste/strategy.d.ts +9 -0
- package/dist/tree-operations/paste/strategy.js +20 -0
- package/dist/tree-operations/paste/table-slice.d.ts +10 -0
- package/dist/tree-operations/paste/table-slice.js +39 -0
- package/dist/tree-operations/paste-surfaces.d.ts +61 -0
- package/dist/tree-operations/paste-surfaces.js +15 -0
- package/dist/tree-operations/path-mutate.d.ts +12 -0
- package/dist/tree-operations/path-mutate.js +20 -0
- package/dist/tree-operations/reorder-unit.d.ts +17 -0
- package/dist/tree-operations/reorder-unit.js +37 -0
- package/dist/tree-operations/reorder.d.ts +13 -0
- package/dist/tree-operations/reorder.js +57 -0
- package/dist/tree-operations/sharing.d.ts +18 -0
- package/dist/tree-operations/sharing.js +14 -0
- package/dist/tree-operations/splice-many.d.ts +9 -0
- package/dist/tree-operations/splice-many.js +22 -0
- package/dist/tree-operations/structural-change.d.ts +65 -0
- package/dist/tree-operations/structural-change.js +117 -0
- package/dist/tree-operations/sub-table-copy.d.ts +6 -0
- package/dist/tree-operations/sub-table-copy.js +43 -0
- package/dist/tree-operations/table-mutations.d.ts +17 -0
- package/dist/tree-operations/table-mutations.js +101 -0
- package/dist/tree-operations/unshare.d.ts +101 -0
- package/dist/tree-operations/unshare.js +248 -0
- package/dist/undo/manager.d.ts +2 -0
- package/dist/undo/manager.js +50 -0
- package/dist/undo/types.d.ts +44 -0
- package/dist/undo/types.js +7 -0
- package/docs/guide/consumer-guide.md +1098 -0
- package/docs/guide/directives.md +223 -0
- package/docs/guide/plugin-api.md +329 -0
- package/docs/guide/plugin-guide/conspiracy.gif +0 -0
- package/docs/guide/plugin-guide/parrot-frames.md +209 -0
- package/docs/guide/plugin-guide/parrot.gif +0 -0
- package/docs/guide/plugin-guide.md +1693 -0
- package/docs/guide/plugin-testing.md +463 -0
- package/package.json +238 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure fence grammar for the `:::name` directive primitive, framework-free and CST-free.
|
|
3
|
+
* Byte round-trip is the master invariant: `serializeDirective` reproduces the opener colons,
|
|
4
|
+
* the verbatim `info` (leading separator included), the body wrap, and a matched closer exactly.
|
|
5
|
+
*/
|
|
6
|
+
import { escalateTerminatorRun } from '../terminator-escalation';
|
|
7
|
+
const OPENER = /^(:{2,})([A-Za-z][A-Za-z0-9-]*)(.*)$/;
|
|
8
|
+
export function matchDirectiveOpener(lineText) {
|
|
9
|
+
const match = OPENER.exec(lineText);
|
|
10
|
+
if (!match)
|
|
11
|
+
return null;
|
|
12
|
+
const colonCount = match[1].length;
|
|
13
|
+
return {
|
|
14
|
+
tier: colonCount === 2 ? 'leaf' : 'container',
|
|
15
|
+
colonCount,
|
|
16
|
+
name: match[2],
|
|
17
|
+
info: match[3]
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const COLON = 0x3a;
|
|
21
|
+
// Char-scan, not `new RegExp` per call: this runs inside the parser's per-line loop and
|
|
22
|
+
// must not allocate.
|
|
23
|
+
export function isDirectiveCloser(lineText, openColonCount) {
|
|
24
|
+
let count = 0;
|
|
25
|
+
while (count < lineText.length && lineText.charCodeAt(count) === COLON)
|
|
26
|
+
count++;
|
|
27
|
+
return count >= openColonCount && count === lineText.length;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The colon count needed to wrap `body`: one past its longest whole-line colon run, never below
|
|
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
|
+
*/
|
|
34
|
+
export function escalatedColonCount(body, minimum) {
|
|
35
|
+
// A closer line is colons end to end, so its own length IS the run.
|
|
36
|
+
return escalateTerminatorRun(body, minimum, (text, required) => isDirectiveCloser(text, required) ? text.length : null);
|
|
37
|
+
}
|
|
38
|
+
// ── Serialize ─────────────────────────────────────────────────────────────────
|
|
39
|
+
export function serializeDirective(parts) {
|
|
40
|
+
const lineEnding = parts.lineEnding ?? '\n';
|
|
41
|
+
const inner = `${parts.innerPrefix}${parts.body}${parts.innerSuffix}`;
|
|
42
|
+
// Re-derived on every emit rather than latched into metadata, so two emits over the same
|
|
43
|
+
// state always agree (G1.13). `colonCount` is a floor, not a target.
|
|
44
|
+
const colonCount = escalatedColonCount(inner, parts.colonCount);
|
|
45
|
+
const opener = ':'.repeat(colonCount);
|
|
46
|
+
const closer = ':'.repeat(Math.max(colonCount, parts.closerColonCount ?? colonCount));
|
|
47
|
+
const closerEnd = (parts.closerNewline ?? true) ? (parts.closerLineEnding ?? lineEnding) : '';
|
|
48
|
+
return `${opener}${parts.name}${parts.info}${lineEnding}${inner}${closer}${closerEnd}`;
|
|
49
|
+
}
|
|
50
|
+
const LABEL = /^\s*\[([^\]]*)\]/;
|
|
51
|
+
const BRACES = /\{([^}]*)\}/;
|
|
52
|
+
// Quoted segments fold in, so `title="a b"` stays one token instead of splitting on its space.
|
|
53
|
+
const ATTR_TOKEN = /(?:[^\s"]+|"[^"]*")+/g;
|
|
54
|
+
/**
|
|
55
|
+
* Opt-in `info -> structure` reader for a leading `[label]` and a `{#id .class key=val}` block.
|
|
56
|
+
* One-way: there is no inverse serializer, and the verbatim `info` stays the round-trip truth.
|
|
57
|
+
*/
|
|
58
|
+
export function parseDirectiveAttributes(info) {
|
|
59
|
+
const attributes = { classes: [], properties: {} };
|
|
60
|
+
let rest = info;
|
|
61
|
+
const labelMatch = LABEL.exec(info);
|
|
62
|
+
if (labelMatch) {
|
|
63
|
+
attributes.label = labelMatch[1];
|
|
64
|
+
rest = info.slice(labelMatch[0].length);
|
|
65
|
+
}
|
|
66
|
+
const braceMatch = BRACES.exec(rest);
|
|
67
|
+
if (!braceMatch)
|
|
68
|
+
return attributes;
|
|
69
|
+
for (const token of braceMatch[1].match(ATTR_TOKEN) ?? []) {
|
|
70
|
+
if (token.startsWith('#')) {
|
|
71
|
+
attributes.id = token.slice(1);
|
|
72
|
+
}
|
|
73
|
+
else if (token.startsWith('.')) {
|
|
74
|
+
attributes.classes.push(token.slice(1));
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
const eq = token.indexOf('=');
|
|
78
|
+
if (eq > 0) {
|
|
79
|
+
const value = token.slice(eq + 1);
|
|
80
|
+
attributes.properties[token.slice(0, eq)] = unquote(value);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return attributes;
|
|
85
|
+
}
|
|
86
|
+
function unquote(value) {
|
|
87
|
+
return value.startsWith('"') && value.endsWith('"') ? value.slice(1, -1) : value;
|
|
88
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic fallback kinds for the `:::name` directive primitive, so `:::anything` stays lossless
|
|
3
|
+
* with no plugin installed. The container is `'opaque'`: its fence lives in the node's own
|
|
4
|
+
* `raw`, not in a child, making `rebuildDirectiveContainerRaw` the single reconstruction path.
|
|
5
|
+
* Imports stay core-relative because the `$lib/plugin` barrel would cycle back through core.
|
|
6
|
+
*/
|
|
7
|
+
import { type CstNode } from '../nodes';
|
|
8
|
+
import type { ContainerBodyWrap } from '../parser';
|
|
9
|
+
export declare const DIRECTIVE_CONTAINER = "directiveContainer";
|
|
10
|
+
export declare const DIRECTIVE_LEAF = "directiveLeaf";
|
|
11
|
+
export declare const DIRECTIVE_TEXT = "directiveText";
|
|
12
|
+
/** The `:::` opener and closer bracket every directive body, whatever kind the name mints. */
|
|
13
|
+
export declare const DIRECTIVE_BODY_WRAP: ContainerBodyWrap;
|
|
14
|
+
/** Fence bytes a container node round-trips through `rebuildDirectiveContainerRaw`. */
|
|
15
|
+
export interface DirectiveContainerMetadata {
|
|
16
|
+
name: string;
|
|
17
|
+
colonCount: number;
|
|
18
|
+
info: string;
|
|
19
|
+
closerColonCount: number;
|
|
20
|
+
closerNewline: boolean;
|
|
21
|
+
/** Authored line ending for the opener and closer chrome lines. */
|
|
22
|
+
lineEnding: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function registerDirectiveKinds(): void;
|
|
25
|
+
/**
|
|
26
|
+
* The `:` recognizer (text-recognizer.ts) stamps this kind on the span it delimits. The widget
|
|
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
|
+
*/
|
|
30
|
+
export declare function registerDirectiveTextKind(): void;
|
|
31
|
+
export declare function rebuildDirectiveContainerRaw(node: CstNode): void;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic fallback kinds for the `:::name` directive primitive, so `:::anything` stays lossless
|
|
3
|
+
* with no plugin installed. The container is `'opaque'`: its fence lives in the node's own
|
|
4
|
+
* `raw`, not in a child, making `rebuildDirectiveContainerRaw` the single reconstruction path.
|
|
5
|
+
* Imports stay core-relative because the `$lib/plugin` barrel would cycle back through core.
|
|
6
|
+
*/
|
|
7
|
+
import { declarePluginKind, declarePluginInlineKind, isInlineKindDeclared } from '../../schema/plugin-kind';
|
|
8
|
+
import { registerBlockKind, isBlockKindRegistered } from '../../schema/block-kind-descriptor';
|
|
9
|
+
import { containerClosure } from '../../schema/closure';
|
|
10
|
+
import { getPluginMetadata } from '../nodes';
|
|
11
|
+
import { displayLength, trimTrailingLineEnding, trailingLineEnding } from '../lines';
|
|
12
|
+
import { concatChildren as serializeChildren } from '../serializer';
|
|
13
|
+
import { registerInlineWidgetKind, mintWidgetShell } from '../inline/inline-widgets';
|
|
14
|
+
import { matchDirectiveOpener, serializeDirective } from './grammar';
|
|
15
|
+
export const DIRECTIVE_CONTAINER = 'directiveContainer';
|
|
16
|
+
export const DIRECTIVE_LEAF = 'directiveLeaf';
|
|
17
|
+
export const DIRECTIVE_TEXT = 'directiveText';
|
|
18
|
+
/** The `:::` opener and closer bracket every directive body, whatever kind the name mints. */
|
|
19
|
+
export const DIRECTIVE_BODY_WRAP = {
|
|
20
|
+
afterOpenerLine: true,
|
|
21
|
+
beforeCloserLine: true
|
|
22
|
+
};
|
|
23
|
+
export function registerDirectiveKinds() {
|
|
24
|
+
if (isBlockKindRegistered(DIRECTIVE_CONTAINER))
|
|
25
|
+
return; // idempotent for HMR / re-import
|
|
26
|
+
registerBlockKind(declarePluginKind(DIRECTIVE_CONTAINER), {
|
|
27
|
+
mergeRole: 'container',
|
|
28
|
+
editable: true,
|
|
29
|
+
supportsInline: false,
|
|
30
|
+
// Opaque tier rule: no textual escape hatch at either edge, so both take the gap caret.
|
|
31
|
+
gapEdges: 'both',
|
|
32
|
+
container: {
|
|
33
|
+
contract: 'opaque',
|
|
34
|
+
rebuildRaw: rebuildDirectiveContainerRaw,
|
|
35
|
+
bodyWrap: DIRECTIVE_BODY_WRAP,
|
|
36
|
+
unwrapRole: {
|
|
37
|
+
firstChildBackspace: 'lift-first-child-keep-container',
|
|
38
|
+
middleChildBackspace: 'default-merge'
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
conformanceFixture: ':::spoiler\n\nhidden\n\n:::\n',
|
|
42
|
+
closure: containerClosure({
|
|
43
|
+
roundTripVia: 'container contract=opaque — rebuildDirectiveContainerRaw',
|
|
44
|
+
focus: { mode: 'implemented', via: 'focus walks into the first body child' },
|
|
45
|
+
mergeBackspace: {
|
|
46
|
+
mode: 'implemented',
|
|
47
|
+
via: 'mergeRole=container + unwrapRole (lift-first-child-keep-container; default-merge) — Backspace at the body start lifts the first block out and the fences close over the rest'
|
|
48
|
+
},
|
|
49
|
+
undo: { mode: 'inherit-default' },
|
|
50
|
+
simOracle: { mode: 'implemented', via: 'directive e2e under the [invariant:] watcher' }
|
|
51
|
+
})
|
|
52
|
+
});
|
|
53
|
+
registerBlockKind(declarePluginKind(DIRECTIVE_LEAF), {
|
|
54
|
+
gapEdges: 'none',
|
|
55
|
+
mergeRole: 'not-mergeable',
|
|
56
|
+
editable: true,
|
|
57
|
+
supportsInline: false,
|
|
58
|
+
getContentRange: directiveLeafContentRange,
|
|
59
|
+
keymap: DIRECTIVE_LEAF_KEYMAP,
|
|
60
|
+
conformanceFixture: '::spoiler\n',
|
|
61
|
+
closure: {
|
|
62
|
+
roundTrip: { mode: 'inherit-default' },
|
|
63
|
+
focus: { mode: 'implemented', via: 'native caret in the raw-editable contenteditable' },
|
|
64
|
+
mergeBackspace: {
|
|
65
|
+
mode: 'implemented',
|
|
66
|
+
via: 'not-mergeable — Backspace moves focus (mergePrev walk), never concatenates'
|
|
67
|
+
},
|
|
68
|
+
selectionPaint: { mode: 'implemented', via: 'measurePartialRects (raw offsets)' },
|
|
69
|
+
searchPaint: {
|
|
70
|
+
mode: 'implemented',
|
|
71
|
+
via: 'content-range raw scanned (::name marker skipped); marks'
|
|
72
|
+
},
|
|
73
|
+
reorder: { mode: 'implemented', via: 'Alt+Arrow block.move keymap' },
|
|
74
|
+
undo: { mode: 'inherit-default' },
|
|
75
|
+
clipboard: { mode: 'inherit-default' },
|
|
76
|
+
simOracle: { mode: 'implemented', via: 'directive e2e under the [invariant:] watcher' }
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// ── Text tier: inline `:name[label]{attrs}` ────────────────────────────────────
|
|
81
|
+
/**
|
|
82
|
+
* The `:` recognizer (text-recognizer.ts) stamps this kind on the span it delimits. The widget
|
|
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
|
+
*/
|
|
86
|
+
export function registerDirectiveTextKind() {
|
|
87
|
+
if (isInlineKindDeclared(DIRECTIVE_TEXT))
|
|
88
|
+
return;
|
|
89
|
+
const kind = declarePluginInlineKind(DIRECTIVE_TEXT);
|
|
90
|
+
registerInlineWidgetKind(kind, {
|
|
91
|
+
isWidget: () => true,
|
|
92
|
+
buildWidget: buildDirectiveTextWidget,
|
|
93
|
+
editing: { revealSource: true }
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/** Renders the verbatim `:name[...]` source dimmed inside the shared widget shell. */
|
|
97
|
+
function buildDirectiveTextWidget(node, raw) {
|
|
98
|
+
const shell = mintWidgetShell('directive-text-widget', node);
|
|
99
|
+
shell.textContent = raw.slice(node.start, node.end);
|
|
100
|
+
return shell;
|
|
101
|
+
}
|
|
102
|
+
// Enter opens a paragraph sibling: a leaf never holds an in-line break, so the split reparses
|
|
103
|
+
// its empty tail. Backspace/Delete take the not-mergeable walk, moving focus without joining.
|
|
104
|
+
const DIRECTIVE_LEAF_KEYMAP = [
|
|
105
|
+
{ chord: 'Enter', command: 'block.split' },
|
|
106
|
+
{ chord: 'Tab', command: 'block.insertTab' },
|
|
107
|
+
{ chord: 'Backspace', command: 'block.mergePrev' },
|
|
108
|
+
{ chord: 'Delete', command: 'block.mergeNext' },
|
|
109
|
+
{ chord: 'Alt+ArrowUp', command: 'block.moveUp' },
|
|
110
|
+
{ chord: 'Alt+ArrowDown', command: 'block.moveDown' }
|
|
111
|
+
];
|
|
112
|
+
// The `::name` fence is a dimmed marker prefix, on the heading marker-range mechanism. A raw
|
|
113
|
+
// that no longer opens a fence reparses to a paragraph first, so the null branch is a floor.
|
|
114
|
+
function directiveLeafContentRange(node) {
|
|
115
|
+
const fence = matchDirectiveOpener(trimTrailingLineEnding(node.raw));
|
|
116
|
+
const start = fence ? fence.colonCount + fence.name.length : 0;
|
|
117
|
+
return { start, end: displayLength(node.raw) };
|
|
118
|
+
}
|
|
119
|
+
export function rebuildDirectiveContainerRaw(node) {
|
|
120
|
+
const meta = getPluginMetadata(node);
|
|
121
|
+
if (!meta)
|
|
122
|
+
return;
|
|
123
|
+
node.raw = serializeDirective({
|
|
124
|
+
colonCount: meta.colonCount,
|
|
125
|
+
name: meta.name,
|
|
126
|
+
info: meta.info,
|
|
127
|
+
innerPrefix: node.innerPrefix ?? '',
|
|
128
|
+
body: serializeChildren(node.children ?? []),
|
|
129
|
+
innerSuffix: node.innerSuffix ?? '',
|
|
130
|
+
closerColonCount: meta.closerColonCount,
|
|
131
|
+
closerNewline: meta.closerNewline,
|
|
132
|
+
lineEnding: meta.lineEnding,
|
|
133
|
+
// The parse side threads only the opener ending, so a mixed-ending directive recovers
|
|
134
|
+
// the closer's from the current raw, whose last line it is.
|
|
135
|
+
closerLineEnding: trailingLineEnding(node.raw)
|
|
136
|
+
});
|
|
137
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Name-to-kind registry for the directive primitive: the shared opener resolves a fence's
|
|
3
|
+
* `(tier, name)` here, then delegates to `fromDirective` or builds a lossless generic node.
|
|
4
|
+
* Register-once with no unregister, the `customElements` model the schema registries follow.
|
|
5
|
+
* Tier scopes the key, so a container and a leaf may share a name.
|
|
6
|
+
*/
|
|
7
|
+
import type { DirectiveTier, DirectiveFence } from './grammar';
|
|
8
|
+
import type { AnyBlockKind, PluginInlineKind, CstNode, InlineNode, Document } from '../nodes';
|
|
9
|
+
export interface ParsedDirective {
|
|
10
|
+
fence: DirectiveFence;
|
|
11
|
+
body?: Document;
|
|
12
|
+
/** Passed through so a factory node serializes intact. */
|
|
13
|
+
leadingTrivia: string;
|
|
14
|
+
/** The exact consumed slice (opener + body + closer); a factory sets `node.raw` to this. */
|
|
15
|
+
raw: string;
|
|
16
|
+
closerColonCount: number;
|
|
17
|
+
closerNewline: boolean;
|
|
18
|
+
/** Opener line ending; a factory stores it so a rebuild reproduces CRLF chrome lines. */
|
|
19
|
+
lineEnding: string;
|
|
20
|
+
}
|
|
21
|
+
export interface DirectiveDefinition {
|
|
22
|
+
kind: AnyBlockKind | PluginInlineKind;
|
|
23
|
+
/** Omit to let the opener build a generic lossless node. */
|
|
24
|
+
fromDirective?(parsed: ParsedDirective): CstNode | InlineNode;
|
|
25
|
+
}
|
|
26
|
+
export declare function registerDirective(tier: DirectiveTier, name: string, def: DirectiveDefinition): void;
|
|
27
|
+
export declare function resolveDirective(tier: DirectiveTier, name: string): DirectiveDefinition | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Pre-narrowed: the registration contract above guarantees a block node for these tiers, so the
|
|
30
|
+
* union narrowing lives at this choke point instead of a cast per opener call site.
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveBlockDirectiveFactory(tier: 'leaf' | 'container', name: string): ((parsed: ParsedDirective) => CstNode) | undefined;
|
|
33
|
+
export declare function isDirectiveRegistered(tier: DirectiveTier, name: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* What "does this kind have a recognizer" must ask: a directive kind owns no opener of its own,
|
|
36
|
+
* so an opener-registry probe alone reads the whole directive tier as unrecognizable.
|
|
37
|
+
*/
|
|
38
|
+
export declare function isDirectiveKind(kind: AnyBlockKind | PluginInlineKind): boolean;
|
|
39
|
+
export declare function __resetDirectiveRegistryForTests(): void;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Name-to-kind registry for the directive primitive: the shared opener resolves a fence's
|
|
3
|
+
* `(tier, name)` here, then delegates to `fromDirective` or builds a lossless generic node.
|
|
4
|
+
* Register-once with no unregister, the `customElements` model the schema registries follow.
|
|
5
|
+
* Tier scopes the key, so a container and a leaf may share a name.
|
|
6
|
+
*/
|
|
7
|
+
import { registerOnce } from '../../schema/register-once';
|
|
8
|
+
const definitions = new Map();
|
|
9
|
+
const keyOf = (tier, name) => `${tier}:${name}`;
|
|
10
|
+
export function registerDirective(tier, name, def) {
|
|
11
|
+
// Fail loud at registration so a tier/factory mismatch can't silently no-op at dispatch.
|
|
12
|
+
if (tier === 'container' && !def.fromDirective) {
|
|
13
|
+
throw new Error(`registerDirective: container "${name}" requires a fromDirective factory ` +
|
|
14
|
+
`(a kind-only container would orphan the generic rebuild path).`);
|
|
15
|
+
}
|
|
16
|
+
if (tier === 'text' && def.fromDirective) {
|
|
17
|
+
throw new Error(`registerDirective: text "${name}" is kind-only; fromDirective is not used for inline nodes.`);
|
|
18
|
+
}
|
|
19
|
+
const key = keyOf(tier, name);
|
|
20
|
+
registerOnce(definitions.has(key), () => definitions.set(key, def), `registerDirective: "${key}" is already registered. Directives are register-once.`);
|
|
21
|
+
}
|
|
22
|
+
export function resolveDirective(tier, name) {
|
|
23
|
+
return definitions.get(keyOf(tier, name));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Pre-narrowed: the registration contract above guarantees a block node for these tiers, so the
|
|
27
|
+
* union narrowing lives at this choke point instead of a cast per opener call site.
|
|
28
|
+
*/
|
|
29
|
+
export function resolveBlockDirectiveFactory(tier, name) {
|
|
30
|
+
const factory = definitions.get(keyOf(tier, name))?.fromDirective;
|
|
31
|
+
return factory;
|
|
32
|
+
}
|
|
33
|
+
export function isDirectiveRegistered(tier, name) {
|
|
34
|
+
return definitions.has(keyOf(tier, name));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* What "does this kind have a recognizer" must ask: a directive kind owns no opener of its own,
|
|
38
|
+
* so an opener-registry probe alone reads the whole directive tier as unrecognizable.
|
|
39
|
+
*/
|
|
40
|
+
export function isDirectiveKind(kind) {
|
|
41
|
+
for (const def of definitions.values()) {
|
|
42
|
+
if (def.kind === kind)
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
export function __resetDirectiveRegistryForTests() {
|
|
48
|
+
definitions.clear();
|
|
49
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline text-directive recognizer for `:name[label]{attrs}`. It OWNS the whole span: returning
|
|
3
|
+
* `end` past the `[label]{attrs}` keeps the scanner's bracket stack from competing for the inner
|
|
4
|
+
* `[label]`. Conservative by construction, declining unless `[` or `{` follows the name, so
|
|
5
|
+
* `:smile:`, `10:30`, and `://` stay literal. Meaning is parsed elsewhere (`grammar.ts`).
|
|
6
|
+
*/
|
|
7
|
+
import type { InlineNode, PluginInlineKind } from '../nodes';
|
|
8
|
+
export declare function recognizeTextDirective(raw: string, pos: number, end: number, kind: PluginInlineKind): InlineNode | null;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline text-directive recognizer for `:name[label]{attrs}`. It OWNS the whole span: returning
|
|
3
|
+
* `end` past the `[label]{attrs}` keeps the scanner's bracket stack from competing for the inner
|
|
4
|
+
* `[label]`. Conservative by construction, declining unless `[` or `{` follows the name, so
|
|
5
|
+
* `:smile:`, `10:30`, and `://` stay literal. Meaning is parsed elsewhere (`grammar.ts`).
|
|
6
|
+
*/
|
|
7
|
+
import { createBoundedMemo } from '../../bounded-memo';
|
|
8
|
+
import { resolveDirective } from './registry';
|
|
9
|
+
const isNameStart = (code) => (code >= 0x41 && code <= 0x5a) || (code >= 0x61 && code <= 0x7a); // A-Z a-z
|
|
10
|
+
const isNameChar = (code) => isNameStart(code) || (code >= 0x30 && code <= 0x39) || code === 0x2d; // + 0-9 -
|
|
11
|
+
/**
|
|
12
|
+
* Balanced-run matches for one block's raw. Without the memo, a paragraph carrying many `:name[`
|
|
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
|
+
*/
|
|
17
|
+
const balancedRuns = createBoundedMemo({ cap: 2 });
|
|
18
|
+
function matchBalancedRuns(raw) {
|
|
19
|
+
const label = new Map();
|
|
20
|
+
const attrs = new Map();
|
|
21
|
+
const labelOpens = [];
|
|
22
|
+
const attrsOpens = [];
|
|
23
|
+
for (let i = 0; i < raw.length; i++) {
|
|
24
|
+
switch (raw[i]) {
|
|
25
|
+
case '[':
|
|
26
|
+
labelOpens.push(i);
|
|
27
|
+
break;
|
|
28
|
+
case ']': {
|
|
29
|
+
const open = labelOpens.pop();
|
|
30
|
+
if (open !== undefined)
|
|
31
|
+
label.set(open, i + 1);
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
case '{':
|
|
35
|
+
attrsOpens.push(i);
|
|
36
|
+
break;
|
|
37
|
+
case '}': {
|
|
38
|
+
const open = attrsOpens.pop();
|
|
39
|
+
if (open !== undefined)
|
|
40
|
+
attrs.set(open, i + 1);
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return { label, attrs };
|
|
46
|
+
}
|
|
47
|
+
/** -1 when the run reaches `end` unbalanced. Nesting counts by depth, so `[a[b]c]` is one run. */
|
|
48
|
+
function consumeBalanced(raw, open, end, openCh) {
|
|
49
|
+
const runs = balancedRuns(raw, () => matchBalancedRuns(raw));
|
|
50
|
+
const close = (openCh === '[' ? runs.label : runs.attrs).get(open);
|
|
51
|
+
return close !== undefined && close <= end ? close : -1;
|
|
52
|
+
}
|
|
53
|
+
export function recognizeTextDirective(raw, pos, end, kind) {
|
|
54
|
+
// `://` is a scheme separator (http://, mailto:), never a directive.
|
|
55
|
+
if (raw[pos + 1] === '/' && raw[pos + 2] === '/')
|
|
56
|
+
return null;
|
|
57
|
+
let i = pos + 1;
|
|
58
|
+
if (i >= end || !isNameStart(raw.charCodeAt(i)))
|
|
59
|
+
return null;
|
|
60
|
+
i++;
|
|
61
|
+
while (i < end && isNameChar(raw.charCodeAt(i)))
|
|
62
|
+
i++;
|
|
63
|
+
const nameEnd = i;
|
|
64
|
+
// The conservative gate: a bare `:name` stays literal unless `[` or `{` follows immediately.
|
|
65
|
+
if (i >= end)
|
|
66
|
+
return null;
|
|
67
|
+
const gate = raw[i];
|
|
68
|
+
if (gate !== '[' && gate !== '{')
|
|
69
|
+
return null;
|
|
70
|
+
if (gate === '[') {
|
|
71
|
+
const labelEnd = consumeBalanced(raw, i, end, '[');
|
|
72
|
+
if (labelEnd < 0)
|
|
73
|
+
return null;
|
|
74
|
+
i = labelEnd;
|
|
75
|
+
}
|
|
76
|
+
// Mandatory under the `{` gate, optional after a label: the same run either way.
|
|
77
|
+
if (i < end && raw[i] === '{') {
|
|
78
|
+
const attrsEnd = consumeBalanced(raw, i, end, '{');
|
|
79
|
+
if (attrsEnd < 0)
|
|
80
|
+
return null;
|
|
81
|
+
i = attrsEnd;
|
|
82
|
+
}
|
|
83
|
+
// Sibling-path parity with the block opener: a registered name resolves to the plugin's own
|
|
84
|
+
// inline kind, an unregistered one keeps the generic `kind`.
|
|
85
|
+
const def = resolveDirective('text', raw.slice(pos + 1, nameEnd));
|
|
86
|
+
return { kind: (def?.kind ?? kind), start: pos, end: i };
|
|
87
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
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
|
+
*/
|
|
6
|
+
export declare const ESCAPABLE_PUNCTUATION: Set<string>;
|
|
@@ -0,0 +1,6 @@
|
|
|
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
|
+
*/
|
|
6
|
+
export const ESCAPABLE_PUNCTUATION = new Set('!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~');
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backtick-run indexing for code spans (CommonMark §6.1): a run of N backticks closes with the
|
|
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-length ladder quadratic.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Wrap `content` as a code span. The fence runs one backtick past the longest run it encloses, so
|
|
8
|
+
* nothing inside can close it; content touching a backtick at either edge takes a space pad too,
|
|
9
|
+
* without which the fence and that byte merge into one longer run and the span closes elsewhere.
|
|
10
|
+
*/
|
|
11
|
+
export declare function wrapAsCodeSpan(content: string): string;
|
|
12
|
+
/** Run start positions by run length, ascending within each length. */
|
|
13
|
+
export type BacktickRunIndex = Map<number, number[]>;
|
|
14
|
+
export declare function indexBacktickRuns(raw: string, from: number, end: number): BacktickRunIndex;
|
|
15
|
+
/** First run of exactly `tickLen` starting after `openerStart`, or -1 when nothing closes it. */
|
|
16
|
+
export declare function findBacktickCloser(index: BacktickRunIndex, tickLen: number, openerStart: number): number;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backtick-run indexing for code spans (CommonMark §6.1): a run of N backticks closes with the
|
|
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-length ladder quadratic.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Wrap `content` as a code span. The fence runs one backtick past the longest run it encloses, so
|
|
8
|
+
* nothing inside can close it; content touching a backtick at either edge takes a space pad too,
|
|
9
|
+
* without which the fence and that byte merge into one longer run and the span closes elsewhere.
|
|
10
|
+
*/
|
|
11
|
+
export function wrapAsCodeSpan(content) {
|
|
12
|
+
const fence = '`'.repeat(longestBacktickRun(content) + 1);
|
|
13
|
+
const pad = content.startsWith('`') || content.endsWith('`') ? ' ' : '';
|
|
14
|
+
return fence + pad + content + pad + fence;
|
|
15
|
+
}
|
|
16
|
+
function longestBacktickRun(text) {
|
|
17
|
+
let longest = 0;
|
|
18
|
+
let run = 0;
|
|
19
|
+
for (const char of text) {
|
|
20
|
+
run = char === '`' ? run + 1 : 0;
|
|
21
|
+
if (run > longest)
|
|
22
|
+
longest = run;
|
|
23
|
+
}
|
|
24
|
+
return longest;
|
|
25
|
+
}
|
|
26
|
+
export function indexBacktickRuns(raw, from, end) {
|
|
27
|
+
const runs = new Map();
|
|
28
|
+
let i = from;
|
|
29
|
+
while (i < end) {
|
|
30
|
+
if (raw[i] !== '`') {
|
|
31
|
+
i++;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const start = i;
|
|
35
|
+
do {
|
|
36
|
+
i++;
|
|
37
|
+
} while (i < end && raw[i] === '`');
|
|
38
|
+
const len = i - start;
|
|
39
|
+
const positions = runs.get(len);
|
|
40
|
+
if (positions)
|
|
41
|
+
positions.push(start);
|
|
42
|
+
else
|
|
43
|
+
runs.set(len, [start]);
|
|
44
|
+
}
|
|
45
|
+
return runs;
|
|
46
|
+
}
|
|
47
|
+
/** First run of exactly `tickLen` starting after `openerStart`, or -1 when nothing closes it. */
|
|
48
|
+
export function findBacktickCloser(index, tickLen, openerStart) {
|
|
49
|
+
const positions = index.get(tickLen);
|
|
50
|
+
if (!positions)
|
|
51
|
+
return -1;
|
|
52
|
+
let lo = 0;
|
|
53
|
+
let hi = positions.length;
|
|
54
|
+
while (lo < hi) {
|
|
55
|
+
const mid = (lo + hi) >>> 1;
|
|
56
|
+
if (positions[mid] <= openerStart)
|
|
57
|
+
lo = mid + 1;
|
|
58
|
+
else
|
|
59
|
+
hi = mid;
|
|
60
|
+
}
|
|
61
|
+
return lo < positions.length ? positions[lo] : -1;
|
|
62
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CommonMark §2.5 entity and numeric character references: named (`©`), decimal, hex.
|
|
3
|
+
* Per spec, zero, out-of-range, and surrogate code points decode to U+FFFD.
|
|
4
|
+
*/
|
|
5
|
+
import type { InlineNode } from '../nodes';
|
|
6
|
+
/** Match one character reference; `pos` must point at an `&`. */
|
|
7
|
+
export declare function matchCharacterReference(raw: string, pos: number, end: number): InlineNode | null;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CommonMark §2.5 entity and numeric character references: named (`©`), decimal, hex.
|
|
3
|
+
* Per spec, zero, out-of-range, and surrogate code points decode to U+FFFD.
|
|
4
|
+
*/
|
|
5
|
+
import { HTML5_NAMED_ENTITIES } from './html-entities';
|
|
6
|
+
const REPLACEMENT = '�';
|
|
7
|
+
// The longest body that can decode (`CounterClockwiseContourIntegral`). Capping the `;` search
|
|
8
|
+
// keeps `&`-floods linear, where an unbounded indexOf rescans the region per candidate.
|
|
9
|
+
const MAX_REFERENCE_BODY = 31;
|
|
10
|
+
/** Match one character reference; `pos` must point at an `&`. */
|
|
11
|
+
export function matchCharacterReference(raw, pos, end) {
|
|
12
|
+
const searchEnd = Math.min(end, pos + MAX_REFERENCE_BODY + 2);
|
|
13
|
+
let semi = -1;
|
|
14
|
+
for (let i = pos + 1; i < searchEnd; i++) {
|
|
15
|
+
if (raw[i] === ';') {
|
|
16
|
+
semi = i;
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (semi === -1)
|
|
21
|
+
return null;
|
|
22
|
+
const body = raw.slice(pos + 1, semi);
|
|
23
|
+
if (body.length === 0)
|
|
24
|
+
return null;
|
|
25
|
+
let decoded;
|
|
26
|
+
if (body[0] === '#') {
|
|
27
|
+
decoded = decodeNumeric(body);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
decoded = Object.hasOwn(HTML5_NAMED_ENTITIES, body) ? HTML5_NAMED_ENTITIES[body] : null;
|
|
31
|
+
}
|
|
32
|
+
if (decoded === null)
|
|
33
|
+
return null;
|
|
34
|
+
return {
|
|
35
|
+
kind: 'entityReference',
|
|
36
|
+
start: pos,
|
|
37
|
+
end: semi + 1,
|
|
38
|
+
decoded
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function decodeNumeric(body) {
|
|
42
|
+
if (body.length < 2)
|
|
43
|
+
return null;
|
|
44
|
+
const isHex = body[1] === 'x' || body[1] === 'X';
|
|
45
|
+
const digits = body.slice(isHex ? 2 : 1);
|
|
46
|
+
if (digits.length === 0)
|
|
47
|
+
return null;
|
|
48
|
+
if (isHex) {
|
|
49
|
+
if (digits.length > 6)
|
|
50
|
+
return null;
|
|
51
|
+
if (!/^[0-9A-Fa-f]+$/.test(digits))
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
if (digits.length > 7)
|
|
56
|
+
return null;
|
|
57
|
+
if (!/^[0-9]+$/.test(digits))
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const codePoint = parseInt(digits, isHex ? 16 : 10);
|
|
61
|
+
if (codePoint === 0)
|
|
62
|
+
return REPLACEMENT;
|
|
63
|
+
if (codePoint > 0x10ffff)
|
|
64
|
+
return REPLACEMENT;
|
|
65
|
+
if (codePoint >= 0xd800 && codePoint <= 0xdfff)
|
|
66
|
+
return REPLACEMENT;
|
|
67
|
+
// The C1 range decodes verbatim, no cp1252 remap: a divergence from an HTML5 reference here
|
|
68
|
+
// is deliberate, following CommonMark §2.5's letter.
|
|
69
|
+
return String.fromCodePoint(codePoint);
|
|
70
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The scan's inverse for the two fields every bracketed construct hides: a destination and a
|
|
3
|
+
* title. One home so the image and link write seams cannot drift apart on what needs escaping —
|
|
4
|
+
* the sibling-path shape that put an unencoded space in one seam and not the other.
|
|
5
|
+
*/
|
|
6
|
+
export declare function encodeDestination(url: string): string;
|
|
7
|
+
export declare function escapeTitle(title: string): string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The scan's inverse for the two fields every bracketed construct hides: a destination and a
|
|
3
|
+
* title. One home so the image and link write seams cannot drift apart on what needs escaping —
|
|
4
|
+
* the sibling-path shape that put an unencoded space in one seam and not the other.
|
|
5
|
+
*/
|
|
6
|
+
// Bare destinations end at whitespace/`"`/`'` and carry parens only in balanced pairs
|
|
7
|
+
// (CommonMark §6.3); a trailing backslash would escape the closer instead. Idempotent: an
|
|
8
|
+
// encoded URL has no literal stop-char left.
|
|
9
|
+
export function encodeDestination(url) {
|
|
10
|
+
return url.replace(/[ \t\r\n()"'\\]/g, (c) => '%' + c.charCodeAt(0).toString(16).toUpperCase().padStart(2, '0'));
|
|
11
|
+
}
|
|
12
|
+
export function escapeTitle(title) {
|
|
13
|
+
return title.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
14
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Visibility gate and DOM builder for the decoded-entity inline widget. A character reference
|
|
3
|
+
* renders as an atomic widget showing its decoded glyph, but only when that glyph is visible:
|
|
4
|
+
* an entity decoding to nothing drawable (` `, `​`) keeps its literal
|
|
5
|
+
* source span, because an invisible atomic island is a caret trap.
|
|
6
|
+
*/
|
|
7
|
+
import type { InlineNode } from '../nodes';
|
|
8
|
+
/** True when the decoded value draws at least one glyph, so it earns a widget. */
|
|
9
|
+
export declare function entityRendersGlyph(decoded: string | undefined): boolean;
|
|
10
|
+
/** Source bytes ride the shell's `data-source-*`, so the raw-aware walk reads back `©`. */
|
|
11
|
+
export declare function buildEntityWidget(node: InlineNode): HTMLSpanElement;
|