@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,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clipboard handler bodies for TextEditableBlock; the component keeps the
|
|
3
|
+
* oncopy/oncut/onpaste bindings.
|
|
4
|
+
*/
|
|
5
|
+
import { resolvedInlineContent } from '../../../core/inline/inline-cache';
|
|
6
|
+
import { isInlineWidget } from '../../../core/inline/inline-widgets';
|
|
7
|
+
import { createClipboardHandlers } from '../editable-surface';
|
|
8
|
+
import { pasteDispatch } from '../../../tree-operations/paste/dispatch';
|
|
9
|
+
import { deleteRangeRaw } from './live-selection-edit';
|
|
10
|
+
export function createTextClipboard(deps) {
|
|
11
|
+
function getSelectedTextFromRaw() {
|
|
12
|
+
const offsets = deps.cursor.getRawSelection();
|
|
13
|
+
if (!offsets)
|
|
14
|
+
return '';
|
|
15
|
+
return deps.node.raw.slice(offsets.start, offsets.end);
|
|
16
|
+
}
|
|
17
|
+
// Null unless a widget on THIS block is selected and still present in the parsed
|
|
18
|
+
// inline content. Shared by copy, cut, and paste-over-widget.
|
|
19
|
+
function selectedWidgetOnThisBlock() {
|
|
20
|
+
const selected = deps.widgetSelection.getSelected();
|
|
21
|
+
if (selected === null || !deps.widgetSelection.isSelected(deps.myPath, selected.sourceStart)) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const inline = resolvedInlineContent(deps.node, deps.linkRef).find((n) => isInlineWidget(n, deps.node.raw) && n.start === selected.sourceStart);
|
|
25
|
+
return inline ? { inline, preSelectOffset: selected.preSelectOffset } : null;
|
|
26
|
+
}
|
|
27
|
+
const handlers = createClipboardHandlers({
|
|
28
|
+
stickyColumn: deps.stickyColumn,
|
|
29
|
+
edgeAffinity: deps.edgeAffinity,
|
|
30
|
+
selection: deps.selection,
|
|
31
|
+
getDoc: deps.getDoc,
|
|
32
|
+
crossBlock: deps.crossBlock,
|
|
33
|
+
isReadOnly: deps.isReadOnly,
|
|
34
|
+
caret: deps.caret,
|
|
35
|
+
events: deps.events,
|
|
36
|
+
onPasteImage: deps.onPasteImage,
|
|
37
|
+
foldReveal: deps.foldRevealBeforeMutation,
|
|
38
|
+
// Copy never mutates, so the widget stays selected.
|
|
39
|
+
copyPreHook: (e) => {
|
|
40
|
+
const widget = selectedWidgetOnThisBlock();
|
|
41
|
+
if (widget === null)
|
|
42
|
+
return false;
|
|
43
|
+
e.preventDefault();
|
|
44
|
+
e.clipboardData?.setData('text/plain', deps.node.raw.slice(widget.inline.start, widget.inline.end));
|
|
45
|
+
return true;
|
|
46
|
+
},
|
|
47
|
+
// A selection over an ACTIVE reveal covers uncommitted DOM, so slice the live text
|
|
48
|
+
// rather than the stale `node.raw`; copy must not fold, because folding mutates.
|
|
49
|
+
copyTail: (e) => {
|
|
50
|
+
e.preventDefault();
|
|
51
|
+
if (deps.isRevealing()) {
|
|
52
|
+
const offsets = deps.cursor.getRawSelection();
|
|
53
|
+
e.clipboardData?.setData('text/plain', offsets ? deps.readRevealedText().slice(offsets.start, offsets.end) : '');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
e.clipboardData?.setData('text/plain', getSelectedTextFromRaw());
|
|
57
|
+
},
|
|
58
|
+
// A selected widget: copy its slice, then splice it out as one undoable commit.
|
|
59
|
+
cutPreHook: (e) => {
|
|
60
|
+
const widget = selectedWidgetOnThisBlock();
|
|
61
|
+
if (widget === null)
|
|
62
|
+
return false;
|
|
63
|
+
const { inline, preSelectOffset } = widget;
|
|
64
|
+
e.clipboardData?.setData('text/plain', deps.node.raw.slice(inline.start, inline.end));
|
|
65
|
+
const newRaw = deps.node.raw.slice(0, inline.start) + deps.node.raw.slice(inline.end);
|
|
66
|
+
void deps.blockEdit.updateBlockContent(deps.index, newRaw, preSelectOffset, inline.start);
|
|
67
|
+
deps.widgetSelection.clear();
|
|
68
|
+
return true;
|
|
69
|
+
},
|
|
70
|
+
cutTail: (e) => {
|
|
71
|
+
const selectedText = getSelectedTextFromRaw();
|
|
72
|
+
if (!selectedText)
|
|
73
|
+
return;
|
|
74
|
+
e.clipboardData?.setData('text/plain', selectedText);
|
|
75
|
+
const selOffsets = deps.cursor.getRawSelection();
|
|
76
|
+
if (!selOffsets)
|
|
77
|
+
return;
|
|
78
|
+
// A cut is a delete, so it crosses the same join seam: in live the range can span
|
|
79
|
+
// delimiter runs the reader never saw, and a raw splice would print them.
|
|
80
|
+
const edit = deleteRangeRaw(deps.node, selOffsets, deps.getPresentationMode(), deps.linkRef, deps.getAmbientPrefix());
|
|
81
|
+
void deps.blockEdit.updateBlockContent(deps.index, edit.raw, selOffsets.start);
|
|
82
|
+
deps.setPendingCursor(edit.caret);
|
|
83
|
+
},
|
|
84
|
+
pasteTail: async (pastedText, foldedCaret) => {
|
|
85
|
+
const widget = selectedWidgetOnThisBlock();
|
|
86
|
+
if (widget !== null) {
|
|
87
|
+
const { inline, preSelectOffset } = widget;
|
|
88
|
+
const newRaw = deps.node.raw.slice(0, inline.start) + pastedText + deps.node.raw.slice(inline.end);
|
|
89
|
+
void deps.blockEdit.updateBlockContent(deps.index, newRaw, preSelectOffset, inline.start + pastedText.length);
|
|
90
|
+
deps.widgetSelection.clear();
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
// After a reveal fold the caret sits on the widget's element-level edge, where
|
|
94
|
+
// getRaw can read null; the committed caret is the correct landing offset.
|
|
95
|
+
const offset = deps.cursor.getRaw() ?? foldedCaret ?? 0;
|
|
96
|
+
const selOffsets = deps.cursor.getRawSelection();
|
|
97
|
+
const result = await pasteDispatch({
|
|
98
|
+
pastedText,
|
|
99
|
+
targetPath: deps.myPath,
|
|
100
|
+
offset: selOffsets ? selOffsets.start : offset,
|
|
101
|
+
preDelete: selOffsets ? { start: selOffsets.start, end: selOffsets.end } : undefined
|
|
102
|
+
}, {
|
|
103
|
+
doc: deps.getDoc(),
|
|
104
|
+
blockEdit: deps.blockEdit,
|
|
105
|
+
controller: deps.pasteCoordinator,
|
|
106
|
+
grammar: deps.grammar,
|
|
107
|
+
activePlugins: deps.activePlugins,
|
|
108
|
+
seam: { presentationMode: deps.getPresentationMode(), linkRef: deps.linkRef }
|
|
109
|
+
});
|
|
110
|
+
// Pending, so the caret set and the raw mutation land in one reactive flush.
|
|
111
|
+
if (result.inlineCaretOffset !== undefined) {
|
|
112
|
+
deps.setPendingCursor(result.inlineCaretOffset);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
return {
|
|
117
|
+
...handlers,
|
|
118
|
+
// Routed to the same arms the caret route reaches, so the reading gate, the reveal
|
|
119
|
+
// fold and the sticky reset come along rather than being re-carried here.
|
|
120
|
+
claimRootClipboard(event) {
|
|
121
|
+
if (selectedWidgetOnThisBlock() === null)
|
|
122
|
+
return;
|
|
123
|
+
if (event.type === 'copy')
|
|
124
|
+
handlers.onCopy(event);
|
|
125
|
+
else if (event.type === 'cut')
|
|
126
|
+
void handlers.onCut(event);
|
|
127
|
+
else if (event.type === 'paste')
|
|
128
|
+
void handlers.onPaste(event);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure raw/caret transforms for TextEditableBlock keydown branches — heading-level
|
|
3
|
+
* swap, demotion to prose, hard-break insertion, literal-tab insertion. The component
|
|
4
|
+
* owns the plumbing; these own the string math.
|
|
5
|
+
*/
|
|
6
|
+
import type { ContentRange } from '../../../core/inline';
|
|
7
|
+
export interface TextEditResult {
|
|
8
|
+
newRaw: string;
|
|
9
|
+
caretOffset: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Give up the block's own structural bytes, whichever end the kind keeps them at: a prefix for
|
|
13
|
+
* ATX, an underline line for setext. Both sides read the kind's CONTENT RANGE and nothing else, so
|
|
14
|
+
* a prefix rewrite cannot disagree with the gate that let the press through (` ## x` is a heading
|
|
15
|
+
* whose `#`s a `^#` regex never reaches). Null where the content IS the whole display.
|
|
16
|
+
*/
|
|
17
|
+
export declare function demoteToParagraph(raw: string, content: ContentRange, preEditOffset: number): TextEditResult | null;
|
|
18
|
+
/** Drop everything before `contentStart` — a heading's marker prefix and any spaces that precede
|
|
19
|
+
* it, which sit before every caret the content range admits. */
|
|
20
|
+
export declare function dropStructuralPrefix(raw: string, contentStart: number, preEditOffset: number): TextEditResult;
|
|
21
|
+
/** Drop everything past `contentEnd` but the block's own trailing line ending — the setext
|
|
22
|
+
* underline, which sits after every caret the content range admits. */
|
|
23
|
+
export declare function dropStructuralSuffix(raw: string, contentEnd: number, preEditOffset: number): TextEditResult;
|
|
24
|
+
/**
|
|
25
|
+
* Re-mark the block's CONTENT with an ATX prefix for `level`, replacing whatever structural bytes
|
|
26
|
+
* the current kind keeps — the same content range {@link demoteToParagraph} reads, so an indented
|
|
27
|
+
* ` ## x` or a setext underline is given up rather than left in the new heading's text.
|
|
28
|
+
* `level === 0` IS the demotion, and null there means the content already is the whole display.
|
|
29
|
+
* Idempotent, not a toggle: stripping is reached only by asking for level 0.
|
|
30
|
+
*/
|
|
31
|
+
export declare function cycleHeading(raw: string, content: ContentRange, level: number, preEditOffset: number): TextEditResult | null;
|
|
32
|
+
/**
|
|
33
|
+
* Insert a GFM hard-break (a backslash at end of line) at `offset` within the display.
|
|
34
|
+
* At end-of-display the break's own ending becomes the block's trailing ending, so the
|
|
35
|
+
* break is transitional there until the next keystroke supplies its following line.
|
|
36
|
+
*/
|
|
37
|
+
export declare function insertHardBreak(raw: string, offset: number): TextEditResult;
|
|
38
|
+
/** Insert a literal tab character at `offset` within the display portion. */
|
|
39
|
+
export declare function insertLiteralTab(raw: string, offset: number): TextEditResult;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure raw/caret transforms for TextEditableBlock keydown branches — heading-level
|
|
3
|
+
* swap, demotion to prose, hard-break insertion, literal-tab insertion. The component
|
|
4
|
+
* owns the plumbing; these own the string math.
|
|
5
|
+
*/
|
|
6
|
+
import { displayLength, ownTrailingLineEnding, trailingLineEnding, trimTrailingLineEnding } from '../../../core/lines';
|
|
7
|
+
/**
|
|
8
|
+
* Give up the block's own structural bytes, whichever end the kind keeps them at: a prefix for
|
|
9
|
+
* ATX, an underline line for setext. Both sides read the kind's CONTENT RANGE and nothing else, so
|
|
10
|
+
* a prefix rewrite cannot disagree with the gate that let the press through (` ## x` is a heading
|
|
11
|
+
* whose `#`s a `^#` regex never reaches). Null where the content IS the whole display.
|
|
12
|
+
*/
|
|
13
|
+
export function demoteToParagraph(raw, content, preEditOffset) {
|
|
14
|
+
if (content.start > 0)
|
|
15
|
+
return dropStructuralPrefix(raw, content.start, preEditOffset);
|
|
16
|
+
if (content.end < displayLength(raw))
|
|
17
|
+
return dropStructuralSuffix(raw, content.end, preEditOffset);
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
/** Drop everything before `contentStart` — a heading's marker prefix and any spaces that precede
|
|
21
|
+
* it, which sit before every caret the content range admits. */
|
|
22
|
+
export function dropStructuralPrefix(raw, contentStart, preEditOffset) {
|
|
23
|
+
return {
|
|
24
|
+
newRaw: raw.slice(contentStart),
|
|
25
|
+
caretOffset: Math.max(0, preEditOffset - contentStart)
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Drop everything past `contentEnd` but the block's own trailing line ending — the setext
|
|
29
|
+
* underline, which sits after every caret the content range admits. */
|
|
30
|
+
export function dropStructuralSuffix(raw, contentEnd, preEditOffset) {
|
|
31
|
+
return {
|
|
32
|
+
newRaw: raw.slice(0, contentEnd) + ownTrailingLineEnding(raw),
|
|
33
|
+
caretOffset: Math.min(preEditOffset, contentEnd)
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Re-mark the block's CONTENT with an ATX prefix for `level`, replacing whatever structural bytes
|
|
38
|
+
* the current kind keeps — the same content range {@link demoteToParagraph} reads, so an indented
|
|
39
|
+
* ` ## x` or a setext underline is given up rather than left in the new heading's text.
|
|
40
|
+
* `level === 0` IS the demotion, and null there means the content already is the whole display.
|
|
41
|
+
* Idempotent, not a toggle: stripping is reached only by asking for level 0.
|
|
42
|
+
*/
|
|
43
|
+
export function cycleHeading(raw, content, level, preEditOffset) {
|
|
44
|
+
if (level === 0)
|
|
45
|
+
return demoteToParagraph(raw, content, preEditOffset);
|
|
46
|
+
const prefix = '#'.repeat(level) + ' ';
|
|
47
|
+
const newDisplay = prefix + raw.slice(content.start, content.end);
|
|
48
|
+
const inContent = Math.min(Math.max(preEditOffset, content.start), content.end);
|
|
49
|
+
return {
|
|
50
|
+
newRaw: newDisplay + ownTrailingLineEnding(raw),
|
|
51
|
+
caretOffset: prefix.length + (inContent - content.start)
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Insert a GFM hard-break (a backslash at end of line) at `offset` within the display.
|
|
56
|
+
* At end-of-display the break's own ending becomes the block's trailing ending, so the
|
|
57
|
+
* break is transitional there until the next keystroke supplies its following line.
|
|
58
|
+
*/
|
|
59
|
+
export function insertHardBreak(raw, offset) {
|
|
60
|
+
const display = trimTrailingLineEnding(raw);
|
|
61
|
+
const trailing = ownTrailingLineEnding(raw);
|
|
62
|
+
// The break carries the block's own ending (G4.20): CommonMark reads a backslash
|
|
63
|
+
// before either LF or CRLF as a hard break, so a CRLF block stays CRLF.
|
|
64
|
+
const breakBytes = '\\' + trailingLineEnding(raw);
|
|
65
|
+
const newDisplay = display.slice(0, offset) + breakBytes + display.slice(offset);
|
|
66
|
+
// At end-of-display the inserted ending is itself the trailing ending; reattaching
|
|
67
|
+
// the original would double it into a blank line and break list-item continuation.
|
|
68
|
+
const newRaw = offset >= display.length ? newDisplay : newDisplay + trailing;
|
|
69
|
+
return {
|
|
70
|
+
newRaw,
|
|
71
|
+
caretOffset: Math.min(offset + breakBytes.length, displayLength(newRaw))
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/** Insert a literal tab character at `offset` within the display portion. */
|
|
75
|
+
export function insertLiteralTab(raw, offset) {
|
|
76
|
+
const display = trimTrailingLineEnding(raw);
|
|
77
|
+
const trailing = ownTrailingLineEnding(raw);
|
|
78
|
+
const newDisplay = display.slice(0, offset) + '\t' + display.slice(offset);
|
|
79
|
+
return { newRaw: newDisplay + trailing, caretOffset: offset + 1 };
|
|
80
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOM-build steps for TextEditableBlock's render $effect. The component owns the
|
|
3
|
+
* effect and the `pendingCursorOffset` restore (those writes touch $state); this
|
|
4
|
+
* factory owns the imperative inline-DOM construction and carries a live caret across
|
|
5
|
+
* a decoration-driven rebuild the edit path's pending restore doesn't cover.
|
|
6
|
+
*/
|
|
7
|
+
import type { AmbientPrefix } from '../../../block-component';
|
|
8
|
+
import type { DocumentView, NodeView } from '../../../core/node-views';
|
|
9
|
+
import type { PresentationMode } from '../../../presentation-mode';
|
|
10
|
+
import type { ResolveImageUrl, ResolveLinkUrl } from '../../../editor-keys';
|
|
11
|
+
import type { LinkReferenceResolver } from '../../../core/inline/link-reference-resolver';
|
|
12
|
+
import { type ImageLoadPolicy } from '../../../core/inline-render';
|
|
13
|
+
import type { IndexedDecoration } from '../../../decorations/buckets';
|
|
14
|
+
import type { ReplaceDecoration, WidgetDecoration } from '../../../decorations/types';
|
|
15
|
+
export interface TextRenderDeps {
|
|
16
|
+
get el(): HTMLElement | null;
|
|
17
|
+
get node(): NodeView;
|
|
18
|
+
get ambientPrefix(): AmbientPrefix;
|
|
19
|
+
get ambientPrefixText(): string;
|
|
20
|
+
getDisplayText: () => string;
|
|
21
|
+
resolveImageUrl: ResolveImageUrl;
|
|
22
|
+
resolveLinkUrl: ResolveLinkUrl;
|
|
23
|
+
get imageLoadPolicy(): ImageLoadPolicy;
|
|
24
|
+
/** Effective mode. Read inside the render pass on purpose: the read is the
|
|
25
|
+
* reactive dependency that re-renders every mounted block on a mode flip. */
|
|
26
|
+
get presentationMode(): PresentationMode;
|
|
27
|
+
/** The editor's theme name, forwarded to widgets. NOT a render-key term: this DOM is
|
|
28
|
+
* themed by CSS, so only a widget whose engine paints its own colors reads it. */
|
|
29
|
+
getTheme?: () => string;
|
|
30
|
+
/** Live root document for widgets that derive from it. A getter, so a pooled widget
|
|
31
|
+
* re-reads the current document across edits rather than a mount-time snapshot. */
|
|
32
|
+
getDocument: () => DocumentView | undefined;
|
|
33
|
+
/** The editor's content version, so a widget can memoize a document-wide derivation
|
|
34
|
+
* on it. Absent in a bare harness. */
|
|
35
|
+
getContentVersion?: () => number;
|
|
36
|
+
/** The editor's navigation door, forwarded to widgets whose gesture jumps elsewhere. */
|
|
37
|
+
navigateTo?: (path: number[]) => Promise<boolean>;
|
|
38
|
+
get linkResolver(): LinkReferenceResolver | undefined;
|
|
39
|
+
/** A compact stamp changing exactly when the document's LRD signature does
|
|
40
|
+
* (`link-reference-resolver.ts` mints it), so a reference-bearing block folds this
|
|
41
|
+
* into its render key instead of a signature string that reaches ~MB scale. */
|
|
42
|
+
get linkStamp(): string;
|
|
43
|
+
/** Position-sorted islands. A getter read inside the render pass on purpose: that
|
|
44
|
+
* read is the reactive dependency that re-renders the block on an island change. */
|
|
45
|
+
get islands(): IndexedDecoration<WidgetDecoration | ReplaceDecoration>[];
|
|
46
|
+
brokenUrlCache: Set<string>;
|
|
47
|
+
/** A widget's synchronous mount throw goes to the editor's `error` channel. Absent →
|
|
48
|
+
* unsurfaced; the widget still falls back to its raw source. */
|
|
49
|
+
reportRenderError?: (error: unknown) => void;
|
|
50
|
+
}
|
|
51
|
+
export interface TextRender {
|
|
52
|
+
/**
|
|
53
|
+
* Rebuild the block's children from current node state. Skips work on an unchanged
|
|
54
|
+
* render key unless `forceRebuild` — pass it when a pending cursor restore needs the
|
|
55
|
+
* DOM re-anchored. `carryCaret` re-anchors the caret; the edit path passes false.
|
|
56
|
+
*/
|
|
57
|
+
render(opts?: {
|
|
58
|
+
forceRebuild?: boolean;
|
|
59
|
+
carryCaret?: boolean;
|
|
60
|
+
}): void;
|
|
61
|
+
/** Destroy every pooled widget instance — called when the block unmounts. */
|
|
62
|
+
dispose(): void;
|
|
63
|
+
}
|
|
64
|
+
/** Which renderKey segment(s) differ — the interaction trace's rebuild cause. Pure over
|
|
65
|
+
* the key format, so the recorder never learns the NUL layout. */
|
|
66
|
+
export declare function renderKeySegmentDiff(prev: string, next: string): string;
|
|
67
|
+
export declare function createTextRender(deps: TextRenderDeps): TextRender;
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOM-build steps for TextEditableBlock's render $effect. The component owns the
|
|
3
|
+
* effect and the `pendingCursorOffset` restore (those writes touch $state); this
|
|
4
|
+
* factory owns the imperative inline-DOM construction and carries a live caret across
|
|
5
|
+
* a decoration-driven rebuild the edit path's pending restore doesn't cover.
|
|
6
|
+
*/
|
|
7
|
+
import { buildAmbientSpan } from '../../../ambient/ambient-dom';
|
|
8
|
+
import { computeInlineContent, contentLengthOf, getContentRange, isProseKind } from '../../../core/inline';
|
|
9
|
+
import { renderInlineNodes } from '../../../core/inline-render';
|
|
10
|
+
import { CONTENT_EMPTY_ATTR, holdsOnlyMarkerChrome } from '../../../cursor/widget-offset';
|
|
11
|
+
import { captureFocusedCaretWalkOffset, restoreCaretAtWalkOffset } from '../../../cursor/focused-caret';
|
|
12
|
+
import { applyIslandDecorations, islandRenderKeyPart } from '../../../decorations/island-dom';
|
|
13
|
+
import { mountDecorationWidget } from '../../../decorations/widget-dom';
|
|
14
|
+
import { devWarn } from '../../../dev-warn';
|
|
15
|
+
import { recordIslandRebuild } from '../../../perf/instruments';
|
|
16
|
+
import { isInteractionTraceEnabled, traceRebuild, traceCursorCapture, traceCursorRestore, traceIslandsApplied } from '../../../debug/interaction-trace';
|
|
17
|
+
import { buildImageWidget } from '../../image/widget-dom';
|
|
18
|
+
import { getBlockKindDescriptor } from '../../../schema/block-kind-descriptor';
|
|
19
|
+
import { createSvelteWidgetPool } from '../widget-portal';
|
|
20
|
+
// The NUL-joined parts of a prose renderKey, index-aligned.
|
|
21
|
+
const RENDER_KEY_SEGMENTS = [
|
|
22
|
+
'ambient',
|
|
23
|
+
'raw',
|
|
24
|
+
'ref',
|
|
25
|
+
'imgPolicy',
|
|
26
|
+
'mode',
|
|
27
|
+
'kind',
|
|
28
|
+
'islands'
|
|
29
|
+
];
|
|
30
|
+
/** Which renderKey segment(s) differ — the interaction trace's rebuild cause. Pure over
|
|
31
|
+
* the key format, so the recorder never learns the NUL layout. */
|
|
32
|
+
export function renderKeySegmentDiff(prev, next) {
|
|
33
|
+
const a = prev.split('\0');
|
|
34
|
+
const b = next.split('\0');
|
|
35
|
+
const changed = [];
|
|
36
|
+
for (let i = 0; i < RENDER_KEY_SEGMENTS.length; i++) {
|
|
37
|
+
if ((a[i] ?? '') !== (b[i] ?? ''))
|
|
38
|
+
changed.push(RENDER_KEY_SEGMENTS[i]);
|
|
39
|
+
}
|
|
40
|
+
return changed.join(',') || '(none)';
|
|
41
|
+
}
|
|
42
|
+
export function createTextRender(deps) {
|
|
43
|
+
let lastRenderedKey = '';
|
|
44
|
+
const widgetPool = createSvelteWidgetPool({
|
|
45
|
+
reportError: deps.reportRenderError,
|
|
46
|
+
getPresentationMode: () => deps.presentationMode,
|
|
47
|
+
getTheme: deps.getTheme,
|
|
48
|
+
getDocument: deps.getDocument,
|
|
49
|
+
getContentVersion: deps.getContentVersion,
|
|
50
|
+
navigateTo: deps.navigateTo
|
|
51
|
+
});
|
|
52
|
+
let islandDestroys = [];
|
|
53
|
+
function destroyIslands() {
|
|
54
|
+
for (const destroy of islandDestroys)
|
|
55
|
+
destroy();
|
|
56
|
+
islandDestroys = [];
|
|
57
|
+
}
|
|
58
|
+
function buildPortalWidget(node, raw) {
|
|
59
|
+
return widgetPool.acquire(node.kind, node, raw.slice(node.start, node.end));
|
|
60
|
+
}
|
|
61
|
+
// The dimmed marker portion of the raw — whatever the kind's descriptor excludes
|
|
62
|
+
// from the content range. Kinds that declare none yield ''.
|
|
63
|
+
function getBlockMarkerPrefix() {
|
|
64
|
+
const node = deps.node;
|
|
65
|
+
const range = getContentRange(node);
|
|
66
|
+
return node.raw.slice(0, range.start);
|
|
67
|
+
}
|
|
68
|
+
// The render path computes inline content on the pure path, never the caching
|
|
69
|
+
// accessor: the cache is non-reactive and would skip render-relevant changes (G4.2).
|
|
70
|
+
function buildInlineDOM(content) {
|
|
71
|
+
const node = deps.node;
|
|
72
|
+
const frag = document.createDocumentFragment();
|
|
73
|
+
if (deps.ambientPrefixText) {
|
|
74
|
+
frag.appendChild(buildAmbientSpan(deps.ambientPrefix));
|
|
75
|
+
}
|
|
76
|
+
const blockOwnPrefix = getBlockMarkerPrefix();
|
|
77
|
+
if (blockOwnPrefix) {
|
|
78
|
+
const span = document.createElement('span');
|
|
79
|
+
span.className = 'md-marker';
|
|
80
|
+
span.textContent = blockOwnPrefix;
|
|
81
|
+
frag.appendChild(span);
|
|
82
|
+
}
|
|
83
|
+
const descriptor = getBlockKindDescriptor(node.kind);
|
|
84
|
+
frag.appendChild(renderInlineNodes(content, node.raw, {
|
|
85
|
+
renderImagesAsWidgets: descriptor.renderImagesAsWidgets ?? true,
|
|
86
|
+
resolveImageUrl: deps.resolveImageUrl,
|
|
87
|
+
resolveLinkUrl: deps.resolveLinkUrl,
|
|
88
|
+
imageLoadPolicy: deps.imageLoadPolicy,
|
|
89
|
+
buildImageWidget: (imgNode, imgRaw, imgOpts) => buildImageWidget(imgNode, imgRaw, { ...imgOpts, brokenUrlCache: deps.brokenUrlCache }),
|
|
90
|
+
buildPortalWidget,
|
|
91
|
+
// Attribute-only stamps for the construct-reveal trigger, mode-gated so the
|
|
92
|
+
// other modes' DOM stays byte-identical.
|
|
93
|
+
tagConstructMarkers: deps.presentationMode === 'preview-inline'
|
|
94
|
+
}));
|
|
95
|
+
return frag;
|
|
96
|
+
}
|
|
97
|
+
// No inline pass runs here, so the remainder is a verbatim text node.
|
|
98
|
+
function buildMarkerPrefixDOM(marker, rest) {
|
|
99
|
+
const frag = document.createDocumentFragment();
|
|
100
|
+
const span = document.createElement('span');
|
|
101
|
+
span.className = 'md-marker';
|
|
102
|
+
span.textContent = marker;
|
|
103
|
+
frag.appendChild(span);
|
|
104
|
+
frag.appendChild(document.createTextNode(rest));
|
|
105
|
+
return frag;
|
|
106
|
+
}
|
|
107
|
+
// A `<br>` inside an island belongs to the widget, so it must not satisfy the empty
|
|
108
|
+
// block's caret anchor.
|
|
109
|
+
function ensureBr(el) {
|
|
110
|
+
if (deps.getDisplayText() !== '')
|
|
111
|
+
return;
|
|
112
|
+
const hasAnchorBr = [...el.querySelectorAll('br')].some((br) => !br.closest('[data-decoration-island]'));
|
|
113
|
+
if (!hasAnchorBr)
|
|
114
|
+
el.appendChild(document.createElement('br'));
|
|
115
|
+
}
|
|
116
|
+
function captureCaretIfFocused(el) {
|
|
117
|
+
const walk = captureFocusedCaretWalkOffset(el);
|
|
118
|
+
if (walk !== null)
|
|
119
|
+
traceCursorCapture(walk);
|
|
120
|
+
return walk;
|
|
121
|
+
}
|
|
122
|
+
function restoreCaret(el, walkOffset) {
|
|
123
|
+
restoreCaretAtWalkOffset(el, walkOffset);
|
|
124
|
+
traceCursorRestore(walkOffset);
|
|
125
|
+
}
|
|
126
|
+
function render(opts) {
|
|
127
|
+
const el = deps.el;
|
|
128
|
+
if (!el)
|
|
129
|
+
return;
|
|
130
|
+
const node = deps.node;
|
|
131
|
+
// Gating both the signature dependency and the resolver read on the bracket keeps
|
|
132
|
+
// one LRD edit from re-rendering the whole document.
|
|
133
|
+
const hasRef = node.raw.includes('[');
|
|
134
|
+
const refKeyPart = hasRef ? deps.linkStamp : '';
|
|
135
|
+
// The built widget bakes in imageLoadPolicy, so the key tracks it — but only for
|
|
136
|
+
// blocks with an image, which keeps image-free blocks off the policy dependency.
|
|
137
|
+
const hasImg = node.raw.includes('![');
|
|
138
|
+
const imgKeyPart = hasImg ? deps.imageLoadPolicy : '';
|
|
139
|
+
// Unconditional, unlike the ref/img gating: a mode flip re-renders every mounted
|
|
140
|
+
// block. '' in source keeps the default key byte-identical but for one NUL.
|
|
141
|
+
const mode = deps.presentationMode;
|
|
142
|
+
const modeKeyPart = mode === 'source' ? '' : mode;
|
|
143
|
+
const islands = deps.islands;
|
|
144
|
+
// The kind is a render input, not just a branch selector: two prose kinds can share
|
|
145
|
+
// a raw when the registry gains an opener for bytes already in the document, and
|
|
146
|
+
// the memo would then early-return onto the previous kind's DOM.
|
|
147
|
+
const renderKey = `${deps.ambientPrefixText}\0${node.raw}\0${refKeyPart}\0${imgKeyPart}\0${modeKeyPart}\0${node.kind}${islandRenderKeyPart(islands)}`;
|
|
148
|
+
const forceRebuild = opts?.forceRebuild ?? false;
|
|
149
|
+
const carryCaret = opts?.carryCaret ?? true;
|
|
150
|
+
let carriedCaret = null;
|
|
151
|
+
if (isProseKind(node.kind)) {
|
|
152
|
+
if (renderKey === lastRenderedKey && !forceRebuild)
|
|
153
|
+
return;
|
|
154
|
+
// Detail assembly (the segment diff) allocates, so it stays behind the gate.
|
|
155
|
+
if (isInteractionTraceEnabled())
|
|
156
|
+
traceRebuild(renderKeySegmentDiff(lastRenderedKey, renderKey), forceRebuild);
|
|
157
|
+
const content = computeInlineContent(node, hasRef ? deps.linkResolver : undefined);
|
|
158
|
+
// Edit-path rebuilds skip the capture/restore pair: the SFC's pending restore
|
|
159
|
+
// overwrites the selection right after, so the walk would be dead work.
|
|
160
|
+
const caretWalkOffset = carryCaret ? captureCaretIfFocused(el) : null;
|
|
161
|
+
// Bracketing the rebuild pools portal widgets: the sweep destroys only those the
|
|
162
|
+
// previous DOM held and this build didn't re-acquire. Island widgets are unpooled.
|
|
163
|
+
widgetPool.beginPass();
|
|
164
|
+
destroyIslands();
|
|
165
|
+
el.replaceChildren(buildInlineDOM(content));
|
|
166
|
+
islandDestroys = applyIslandDecorations(el, node.raw, islands, {
|
|
167
|
+
contentLength: contentLengthOf(node),
|
|
168
|
+
ambientLength: deps.ambientPrefixText.length,
|
|
169
|
+
mountWidget: (spec, dec) => mountDecorationWidget(spec, dec, deps.reportRenderError),
|
|
170
|
+
onSkipped: (dec, reason) => devWarn('decorations', `island skipped: ${reason}`, dec)
|
|
171
|
+
});
|
|
172
|
+
if (islands.length > 0) {
|
|
173
|
+
recordIslandRebuild();
|
|
174
|
+
traceIslandsApplied(islands.length);
|
|
175
|
+
}
|
|
176
|
+
widgetPool.sweep();
|
|
177
|
+
carriedCaret = caretWalkOffset;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
// An empty pass sweeps any widget or island stranded by an in-place
|
|
181
|
+
// prose→non-prose kind change, which reuses this same component instance.
|
|
182
|
+
widgetPool.beginPass();
|
|
183
|
+
destroyIslands();
|
|
184
|
+
widgetPool.sweep();
|
|
185
|
+
const display = deps.getDisplayText();
|
|
186
|
+
const markerPrefix = getBlockMarkerPrefix();
|
|
187
|
+
if (markerPrefix) {
|
|
188
|
+
// The line stays one editable coordinate space, so an edit that breaks the
|
|
189
|
+
// fence reparses to the natural kind.
|
|
190
|
+
if (el.textContent !== display || forceRebuild) {
|
|
191
|
+
el.replaceChildren(buildMarkerPrefixDOM(markerPrefix, display.slice(markerPrefix.length)));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else if (el.textContent !== display) {
|
|
195
|
+
el.textContent = display;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Unconditional: after this pass the DOM reflects renderKey even where an arm
|
|
199
|
+
// skipped its write, and a key frozen by a skipped write would let a later render
|
|
200
|
+
// early-return onto stale DOM.
|
|
201
|
+
lastRenderedKey = renderKey;
|
|
202
|
+
ensureBr(el);
|
|
203
|
+
// The stamp decides which spans the walk can land in, so it precedes the caret restore.
|
|
204
|
+
el.toggleAttribute(CONTENT_EMPTY_ATTR, holdsOnlyMarkerChrome(el));
|
|
205
|
+
if (carriedCaret !== null)
|
|
206
|
+
restoreCaret(el, carriedCaret);
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
render,
|
|
210
|
+
dispose: () => {
|
|
211
|
+
destroyIslands();
|
|
212
|
+
widgetPool.dispose();
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure adjacency queries over a prose block's inline content and raw source: which
|
|
3
|
+
* live widget a caret offset touches, the leading/trailing edge widgets, and whether
|
|
4
|
+
* an offset has only whitespace to one side.
|
|
5
|
+
*/
|
|
6
|
+
import type { AnyInlineKind, InlineNode } from '../../../core/nodes';
|
|
7
|
+
export interface WidgetRange {
|
|
8
|
+
start: number;
|
|
9
|
+
end: number;
|
|
10
|
+
}
|
|
11
|
+
export interface WidgetAtCursor extends WidgetRange {
|
|
12
|
+
atRight: boolean;
|
|
13
|
+
kind: AnyInlineKind;
|
|
14
|
+
}
|
|
15
|
+
export type CaretDirection = 'forward' | 'backward';
|
|
16
|
+
/** The live widget the caret sits against, or null. At a boundary two widgets share
|
|
17
|
+
* (A.end === B.start), `direction` breaks the tie: forward enters B's leading edge,
|
|
18
|
+
* backward A's trailing edge. Elsewhere only one match exists and it is inert. */
|
|
19
|
+
export declare function widgetAtCursor(offset: number | null, inlineContent: ReadonlyArray<InlineNode> | undefined, raw: string, direction?: CaretDirection): WidgetAtCursor | null;
|
|
20
|
+
export declare function findWidgetNodeByStart(sourceStart: number, inlineContent: ReadonlyArray<InlineNode> | undefined, raw: string): WidgetRange | null;
|
|
21
|
+
/** First widget reachable from the leading edge, skipping blank text; null once any
|
|
22
|
+
* non-blank, non-widget inline intervenes. */
|
|
23
|
+
export declare function findFirstEdgeWidget(inlines: ReadonlyArray<InlineNode>, raw: string): InlineNode | null;
|
|
24
|
+
/** Trailing-edge counterpart of `findFirstEdgeWidget`. */
|
|
25
|
+
export declare function findLastEdgeWidget(inlines: ReadonlyArray<InlineNode>, raw: string): InlineNode | null;
|
|
26
|
+
export declare function rawHasNoTextBefore(raw: string, offset: number): boolean;
|
|
27
|
+
export declare function rawHasNoTextAfter(raw: string, offset: number): boolean;
|
|
28
|
+
/** The live inline-widget island whose source starts at `start`, or null. The one home
|
|
29
|
+
* for this selector — a typo'd copy would fail silently as a null querySelector. */
|
|
30
|
+
export declare function widgetElByStart(el: HTMLElement, start: number): HTMLElement | null;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure adjacency queries over a prose block's inline content and raw source: which
|
|
3
|
+
* live widget a caret offset touches, the leading/trailing edge widgets, and whether
|
|
4
|
+
* an offset has only whitespace to one side.
|
|
5
|
+
*/
|
|
6
|
+
import { isInlineWidget, flattenInlineWidgets } from '../../../core/inline/inline-widgets';
|
|
7
|
+
/** The live widget the caret sits against, or null. At a boundary two widgets share
|
|
8
|
+
* (A.end === B.start), `direction` breaks the tie: forward enters B's leading edge,
|
|
9
|
+
* backward A's trailing edge. Elsewhere only one match exists and it is inert. */
|
|
10
|
+
export function widgetAtCursor(offset, inlineContent, raw, direction = 'backward') {
|
|
11
|
+
if (offset === null)
|
|
12
|
+
return null;
|
|
13
|
+
let leadingMatch = null;
|
|
14
|
+
let trailingMatch = null;
|
|
15
|
+
// Recurse so a widget nested inside a link (`[![alt][ref]][repo]`) is seen.
|
|
16
|
+
for (const inline of flattenInlineWidgets(inlineContent ?? [], raw)) {
|
|
17
|
+
if (offset === inline.start && !leadingMatch)
|
|
18
|
+
leadingMatch = { start: inline.start, end: inline.end, atRight: false, kind: inline.kind };
|
|
19
|
+
if (offset === inline.end && !trailingMatch)
|
|
20
|
+
trailingMatch = { start: inline.start, end: inline.end, atRight: true, kind: inline.kind };
|
|
21
|
+
}
|
|
22
|
+
if (direction === 'forward')
|
|
23
|
+
return leadingMatch ?? trailingMatch;
|
|
24
|
+
return trailingMatch ?? leadingMatch;
|
|
25
|
+
}
|
|
26
|
+
export function findWidgetNodeByStart(sourceStart, inlineContent, raw) {
|
|
27
|
+
for (const inline of flattenInlineWidgets(inlineContent ?? [], raw)) {
|
|
28
|
+
if (inline.start === sourceStart) {
|
|
29
|
+
return { start: inline.start, end: inline.end };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
/** First widget reachable from the leading edge, skipping blank text; null once any
|
|
35
|
+
* non-blank, non-widget inline intervenes. */
|
|
36
|
+
export function findFirstEdgeWidget(inlines, raw) {
|
|
37
|
+
for (const inline of inlines) {
|
|
38
|
+
if (isInlineWidget(inline, raw))
|
|
39
|
+
return inline;
|
|
40
|
+
if (inline.kind === 'text' && (inline.text ?? '').trim() === '')
|
|
41
|
+
continue;
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
/** Trailing-edge counterpart of `findFirstEdgeWidget`. */
|
|
47
|
+
export function findLastEdgeWidget(inlines, raw) {
|
|
48
|
+
for (let i = inlines.length - 1; i >= 0; i--) {
|
|
49
|
+
const inline = inlines[i];
|
|
50
|
+
if (isInlineWidget(inline, raw))
|
|
51
|
+
return inline;
|
|
52
|
+
if (inline.kind === 'text' && (inline.text ?? '').trim() === '')
|
|
53
|
+
continue;
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
export function rawHasNoTextBefore(raw, offset) {
|
|
59
|
+
return raw.slice(0, offset).trim() === '';
|
|
60
|
+
}
|
|
61
|
+
export function rawHasNoTextAfter(raw, offset) {
|
|
62
|
+
return raw.slice(offset).trim() === '';
|
|
63
|
+
}
|
|
64
|
+
/** The live inline-widget island whose source starts at `start`, or null. The one home
|
|
65
|
+
* for this selector — a typo'd copy would fail silently as a null querySelector. */
|
|
66
|
+
export function widgetElByStart(el, start) {
|
|
67
|
+
return el.querySelector(`[data-inline-widget][data-source-start="${start}"]`);
|
|
68
|
+
}
|