@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,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The single DOM Range ↔ raw offset translation point (`docs/design/editor.md`). Atomic
|
|
3
|
+
* inline widgets contribute their raw bytes via data-source-start / data-source-end
|
|
4
|
+
* without contributing to textContent; the walk sums text-node lengths — a leading
|
|
5
|
+
* ambient marker span's text included — plus widget raw lengths, so walk positions are
|
|
6
|
+
* `DomTextOffset` and `ambient/ambient-cursor.ts` owns the ± ambientLength step to raw.
|
|
7
|
+
*/
|
|
8
|
+
import { type VisibilityContext } from '../core/inline/visibility';
|
|
9
|
+
import { type DomTextOffset, type RawOffset } from './coordinate-spaces';
|
|
10
|
+
/** The stamp a block surface writes on its walk container while {@link holdsOnlyMarkerChrome}
|
|
11
|
+
* holds. Both consumers of the hiding rule — this walk and `styles/editor.css` — read it.
|
|
12
|
+
* Written in every mode on purpose: it is a content fact, so a flip never finds it stale. */
|
|
13
|
+
export declare const CONTENT_EMPTY_ATTR = "data-content-empty";
|
|
14
|
+
/** The class the preview-inline reveal trigger stamps and this walk's hiding rule reads. One home,
|
|
15
|
+
* so the stamping and classifying sides cannot drift. */
|
|
16
|
+
export declare const CONSTRUCT_REVEAL_CLASS = "md-construct-reveal";
|
|
17
|
+
/**
|
|
18
|
+
* Walk-space offset of a live `(node, offset)` DOM position. A position inside an atomic
|
|
19
|
+
* widget snaps to that widget's own walk boundary (browsers do rebind carets into these
|
|
20
|
+
* contenteditable=false islands); an unreachable one reads as end-of-walk, so callers that
|
|
21
|
+
* must distinguish "not mine" guard containment first.
|
|
22
|
+
*/
|
|
23
|
+
export declare function domTextOffsetAtNode(container: HTMLElement, node: Node, offset: number): DomTextOffset;
|
|
24
|
+
/** Raw offset of the live selection's focus inside `el` through the walk above, or null when
|
|
25
|
+
* there is no selection or its focus is anchored outside `el`. */
|
|
26
|
+
export declare function selectionFocusWalkOffset(el: HTMLElement, ambientLength: number): RawOffset | null;
|
|
27
|
+
export interface DomPosition {
|
|
28
|
+
node: Node;
|
|
29
|
+
offset: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Walk-space offset → live `(node, offset)` DOM position. The model-layer counterpart is
|
|
33
|
+
* `findNodeAtOffset` in `core/inline-render.ts`. Accepts a detached fragment (island
|
|
34
|
+
* application walks builds in progress) with the same arithmetic as a live block element.
|
|
35
|
+
*/
|
|
36
|
+
export declare function findDomTextOffsetTarget(container: ParentNode, target: DomTextOffset): DomPosition | null;
|
|
37
|
+
/**
|
|
38
|
+
* Atomic inline widgets in `container` intersecting the walk-space range [start, end). A
|
|
39
|
+
* widget adds 0 chars to textContent, so a range inside one yields no client rect and
|
|
40
|
+
* callers that must cover it (search highlight, cross-block selection) take its bounding
|
|
41
|
+
* box. A widget's position is its running walk offset, never a compare of `data-source-*`
|
|
42
|
+
* against the ambient-adjusted argument.
|
|
43
|
+
*/
|
|
44
|
+
export declare function widgetsIntersectingRange(container: HTMLElement, start: DomTextOffset, end: DomTextOffset): HTMLElement[];
|
|
45
|
+
/** Total walk length of `container` — its one-past-end walk position. */
|
|
46
|
+
export declare function containerDomTextLength(container: ParentNode): DomTextOffset;
|
|
47
|
+
/**
|
|
48
|
+
* Walk-space span of the atomic widget strictly containing `offset`, or null when the
|
|
49
|
+
* offset sits in text or exactly on a boundary. Island application snaps replace
|
|
50
|
+
* boundaries outward with this — a text-position range cannot split an atomic widget.
|
|
51
|
+
*/
|
|
52
|
+
export declare function widgetSpanContainingOffset(container: ParentNode, offset: DomTextOffset): {
|
|
53
|
+
start: DomTextOffset;
|
|
54
|
+
end: DomTextOffset;
|
|
55
|
+
} | null;
|
|
56
|
+
/** Raw bytes a DOM subtree stands for: text nodes verbatim, widgets via their source range. */
|
|
57
|
+
export declare function rawTextOfNode(domNode: Node, raw: string): string;
|
|
58
|
+
export declare function createRangeAtDomTextOffsets(container: ParentNode, start: DomTextOffset, end: DomTextOffset): Range | null;
|
|
59
|
+
/**
|
|
60
|
+
* Whether `node` is text the mode CSS paints nothing for — a marker span's own text under a
|
|
61
|
+
* marker-hiding mode with no reveal on it. Detected structurally against the families in
|
|
62
|
+
* `core/inline/visibility.ts`, never by layout: a `getComputedStyle` per keystroke is not
|
|
63
|
+
* affordable, so that vocabulary and `styles/editor.css` move together.
|
|
64
|
+
*/
|
|
65
|
+
export declare function isHiddenMarkerText(node: Node, container: HTMLElement): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Whether `el`'s OWN text is marker text the container's mode paints nothing for — the
|
|
68
|
+
* element-level form of {@link isHiddenMarkerText}, for a walk that treats such a span as
|
|
69
|
+
* opaque instead of descending into it.
|
|
70
|
+
*/
|
|
71
|
+
export declare function isHiddenMarkerRoot(el: Element, container: HTMLElement): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* The DOM-reading twin of `paintsFocusedMarkers`: whether this container's mode paints NO marker
|
|
74
|
+
* in the focused block — neither its own structural prefix (`## `, a fence, a setext underline)
|
|
75
|
+
* nor an inline construct's delimiters. An unstamped container is styled source, which paints.
|
|
76
|
+
*/
|
|
77
|
+
export declare function revealsNoMarkers(container: ParentNode): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* How this container's bytes read on screen: its mode and its content-empty stamp, resolved here
|
|
80
|
+
* so a rewrite seam needs no marker vocabulary of its own. Chrome standing over no content PAINTS
|
|
81
|
+
* (live-mode.md § 4.1), and a seam holding a license over unseen bytes has nothing to claim there.
|
|
82
|
+
* An unmounted surface reads as source, where nothing hides and no rewrite has a run to move.
|
|
83
|
+
*/
|
|
84
|
+
export declare function screenVisibilityOf(container: ParentNode | null): VisibilityContext;
|
|
85
|
+
/**
|
|
86
|
+
* The extreme walk offsets a caret can occupy in `container`: a hidden marker run or the leading
|
|
87
|
+
* ambient island holds no landable position, so the bound moves past it. Block-edge gates read
|
|
88
|
+
* these rather than 0 / walk length, which a mode painting no marker makes unreachable — a gate
|
|
89
|
+
* testing an offset no keystroke can produce is a dead key. An ALL-hidden container (an empty
|
|
90
|
+
* fence) has no landable offset and answers `{len, len}`, making every `offset <= start` gate true.
|
|
91
|
+
*/
|
|
92
|
+
export declare function landableDomTextBounds(container: ParentNode): {
|
|
93
|
+
start: DomTextOffset;
|
|
94
|
+
end: DomTextOffset;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Whether every byte `container` holds is marker chrome, at least one span of it a family the
|
|
98
|
+
* empty-construct override paints. The stamp condition the render path writes as
|
|
99
|
+
* `data-content-empty` and the walk reads back — computed WITHOUT reading the stamp, or each
|
|
100
|
+
* render would flip the previous one's answer. Membership and paintability are separate
|
|
101
|
+
* questions: a reference label is chrome that stays hidden, so it is not content standing behind
|
|
102
|
+
* the stamp, and it is not the paint the stamp promises either.
|
|
103
|
+
*/
|
|
104
|
+
export declare function holdsOnlyMarkerChrome(container: ParentNode): boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Whether the mode paints NOTHING landable here: every walk segment is a hidden marker run, so no
|
|
107
|
+
* caret position has a pixel of its own. `invariants/landable-caret.ts` refuses this shape at the
|
|
108
|
+
* focus seam — an empty container (landable at offset 0) and one fronted by the ambient island are
|
|
109
|
+
* not it.
|
|
110
|
+
*/
|
|
111
|
+
export declare function paintsNoLandableContent(container: ParentNode): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* {@link landableDomTextBounds} in the caret's own raw space, or null where the mode paints its
|
|
114
|
+
* markers and the whole raw span is reachable. The one home every caret gate and caret DOOR
|
|
115
|
+
* reads: the arrow exits, the cross-block collapse, and the block-entry seat all ask the same
|
|
116
|
+
* question and must not answer it three ways.
|
|
117
|
+
*/
|
|
118
|
+
export declare function landableRawBounds(el: HTMLElement, ambientLength: number): {
|
|
119
|
+
start: number;
|
|
120
|
+
end: number;
|
|
121
|
+
} | null;
|
|
122
|
+
/** Clamp a caret offset into `el`'s landable range — identity wherever the markers paint. */
|
|
123
|
+
export declare function clampToLandableRaw(el: HTMLElement, offset: number, ambientLength: number): number;
|
|
124
|
+
/**
|
|
125
|
+
* Whether the first landable position abuts an opaque island (an atomic widget, a decoration
|
|
126
|
+
* island) instead of sitting in text: no text node holds it, so the engine's Home seats the
|
|
127
|
+
* caret past the island and the block's start needs an owned door.
|
|
128
|
+
*/
|
|
129
|
+
export declare function landableStartAbutsIsland(container: ParentNode): boolean;
|
|
130
|
+
/** Whether `node` is an atomic inline widget's element — the island every walk treats as opaque.
|
|
131
|
+
* The attribute rather than the selector: every walk asks this per node. */
|
|
132
|
+
export declare function isAtomicInlineWidget(node: Node): boolean;
|
|
@@ -0,0 +1,543 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The single DOM Range ↔ raw offset translation point (`docs/design/editor.md`). Atomic
|
|
3
|
+
* inline widgets contribute their raw bytes via data-source-start / data-source-end
|
|
4
|
+
* without contributing to textContent; the walk sums text-node lengths — a leading
|
|
5
|
+
* ambient marker span's text included — plus widget raw lengths, so walk positions are
|
|
6
|
+
* `DomTextOffset` and `ambient/ambient-cursor.ts` owns the ± ambientLength step to raw.
|
|
7
|
+
*/
|
|
8
|
+
import { asPresentationMode, hidesMarkers, paintsFocusedMarkers } from '../presentation-mode';
|
|
9
|
+
import { widgetSourceRange } from '../core/inline/inline-widgets';
|
|
10
|
+
import { familyHidesText, familyPaintsAlone, markerFamilyOf, screenVisibility } from '../core/inline/visibility';
|
|
11
|
+
import { asDomTextOffset, toClampedRawOffset } from './coordinate-spaces';
|
|
12
|
+
import { domDescendants } from './dom-walk';
|
|
13
|
+
const WIDGET_ATTR = 'data-inline-widget';
|
|
14
|
+
/** The stamp a block surface writes on its walk container while {@link holdsOnlyMarkerChrome}
|
|
15
|
+
* holds. Both consumers of the hiding rule — this walk and `styles/editor.css` — read it.
|
|
16
|
+
* Written in every mode on purpose: it is a content fact, so a flip never finds it stale. */
|
|
17
|
+
export const CONTENT_EMPTY_ATTR = 'data-content-empty';
|
|
18
|
+
/** The class the preview-inline reveal trigger stamps and this walk's hiding rule reads. One home,
|
|
19
|
+
* so the stamping and classifying sides cannot drift. */
|
|
20
|
+
export const CONSTRUCT_REVEAL_CLASS = 'md-construct-reveal';
|
|
21
|
+
/**
|
|
22
|
+
* Walk-space offset of a live `(node, offset)` DOM position. A position inside an atomic
|
|
23
|
+
* widget snaps to that widget's own walk boundary (browsers do rebind carets into these
|
|
24
|
+
* contenteditable=false islands); an unreachable one reads as end-of-walk, so callers that
|
|
25
|
+
* must distinguish "not mine" guard containment first.
|
|
26
|
+
*/
|
|
27
|
+
export function domTextOffsetAtNode(container, node, offset) {
|
|
28
|
+
// No landmark outside the container: document order against a disconnected tree is
|
|
29
|
+
// implementation-specific, so such a position reads as end-of-walk instead.
|
|
30
|
+
const boundary = container.contains(node) ? positionBoundary(node, offset) : null;
|
|
31
|
+
const mode = markerHidingMode(container);
|
|
32
|
+
let total = 0;
|
|
33
|
+
for (const seg of walkSegments(container, mode)) {
|
|
34
|
+
const segNode = seg.kind === 'text' ? seg.node : seg.el;
|
|
35
|
+
if (seg.kind === 'widget' && seg.el.contains(node)) {
|
|
36
|
+
return asDomTextOffset(offset === 0 ? seg.start : seg.start + seg.len);
|
|
37
|
+
}
|
|
38
|
+
if (segNode === node) {
|
|
39
|
+
const at = seg.start + offset;
|
|
40
|
+
// A hidden run is opaque like a widget: its interior positions all paint at one
|
|
41
|
+
// pixel, so the walk reports the boundary the position leans toward instead.
|
|
42
|
+
if (seg.kind === 'text' && seg.hiddenRoot !== null) {
|
|
43
|
+
return snapOutOfRun(container, at, offset === 0 ? 'before' : 'after', mode);
|
|
44
|
+
}
|
|
45
|
+
return asDomTextOffset(at);
|
|
46
|
+
}
|
|
47
|
+
// An element-level position resolves to a segment's start, which a coalesced run makes
|
|
48
|
+
// as interior as a text position — it leans backward, so it snaps that way.
|
|
49
|
+
if (boundary && startsAtOrAfter(segNode, boundary)) {
|
|
50
|
+
return snapOutOfRun(container, seg.start, 'before', mode);
|
|
51
|
+
}
|
|
52
|
+
total = seg.start + seg.len;
|
|
53
|
+
}
|
|
54
|
+
return asDomTextOffset(total);
|
|
55
|
+
}
|
|
56
|
+
/** Raw offset of the live selection's focus inside `el` through the walk above, or null when
|
|
57
|
+
* there is no selection or its focus is anchored outside `el`. */
|
|
58
|
+
export function selectionFocusWalkOffset(el, ambientLength) {
|
|
59
|
+
const sel = window.getSelection();
|
|
60
|
+
if (!sel || sel.focusNode === null || !el.contains(sel.focusNode))
|
|
61
|
+
return null;
|
|
62
|
+
return toClampedRawOffset(domTextOffsetAtNode(el, sel.focusNode, sel.focusOffset), ambientLength);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Walk-space offset → live `(node, offset)` DOM position. The model-layer counterpart is
|
|
66
|
+
* `findNodeAtOffset` in `core/inline-render.ts`. Accepts a detached fragment (island
|
|
67
|
+
* application walks builds in progress) with the same arithmetic as a live block element.
|
|
68
|
+
*/
|
|
69
|
+
export function findDomTextOffsetTarget(container, target) {
|
|
70
|
+
let last = null;
|
|
71
|
+
for (const seg of landingSegments(container, markerHidingMode(container))) {
|
|
72
|
+
if (seg.kind === 'text') {
|
|
73
|
+
if (seg.start + seg.len >= target)
|
|
74
|
+
return { node: seg.node, offset: target - seg.start };
|
|
75
|
+
last = { node: seg.node, offset: seg.len };
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
// An opaque span holds no landable position, so a target at either boundary resolves
|
|
79
|
+
// beside it. The walk offset is preserved: only the DOM spelling of it changes.
|
|
80
|
+
if (seg.start === target) {
|
|
81
|
+
const before = positionBeside(seg.first, 'before');
|
|
82
|
+
if (before)
|
|
83
|
+
return before;
|
|
84
|
+
}
|
|
85
|
+
const after = positionBeside(seg.last, 'after');
|
|
86
|
+
if (!after)
|
|
87
|
+
continue;
|
|
88
|
+
if (seg.start + seg.len >= target)
|
|
89
|
+
return after;
|
|
90
|
+
last = after;
|
|
91
|
+
}
|
|
92
|
+
return last;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Atomic inline widgets in `container` intersecting the walk-space range [start, end). A
|
|
96
|
+
* widget adds 0 chars to textContent, so a range inside one yields no client rect and
|
|
97
|
+
* callers that must cover it (search highlight, cross-block selection) take its bounding
|
|
98
|
+
* box. A widget's position is its running walk offset, never a compare of `data-source-*`
|
|
99
|
+
* against the ambient-adjusted argument.
|
|
100
|
+
*/
|
|
101
|
+
export function widgetsIntersectingRange(container, start, end) {
|
|
102
|
+
const out = [];
|
|
103
|
+
for (const seg of walkSegments(container, null)) {
|
|
104
|
+
// Half-open overlap; a zero-length widget can't be covered.
|
|
105
|
+
if (seg.kind === 'widget' && seg.len > 0 && seg.start < end && start < seg.start + seg.len) {
|
|
106
|
+
out.push(seg.el);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return out;
|
|
110
|
+
}
|
|
111
|
+
/** Total walk length of `container` — its one-past-end walk position. */
|
|
112
|
+
export function containerDomTextLength(container) {
|
|
113
|
+
let count = 0;
|
|
114
|
+
for (const seg of walkSegments(container, null))
|
|
115
|
+
count += seg.len;
|
|
116
|
+
return asDomTextOffset(count);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Walk-space span of the atomic widget strictly containing `offset`, or null when the
|
|
120
|
+
* offset sits in text or exactly on a boundary. Island application snaps replace
|
|
121
|
+
* boundaries outward with this — a text-position range cannot split an atomic widget.
|
|
122
|
+
*/
|
|
123
|
+
export function widgetSpanContainingOffset(container, offset) {
|
|
124
|
+
for (const seg of walkSegments(container, null)) {
|
|
125
|
+
if (seg.start > offset)
|
|
126
|
+
break;
|
|
127
|
+
if (seg.kind === 'widget' &&
|
|
128
|
+
seg.len > 0 &&
|
|
129
|
+
seg.start < offset &&
|
|
130
|
+
offset < seg.start + seg.len) {
|
|
131
|
+
return { start: asDomTextOffset(seg.start), end: asDomTextOffset(seg.start + seg.len) };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
/** Raw bytes a DOM subtree stands for: text nodes verbatim, widgets via their source range. */
|
|
137
|
+
export function rawTextOfNode(domNode, raw) {
|
|
138
|
+
let out = '';
|
|
139
|
+
for (const node of domDescendants(domNode, isTransparentContainer)) {
|
|
140
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
141
|
+
out += node.textContent ?? '';
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (isAtomicInlineWidget(node)) {
|
|
145
|
+
const range = widgetSourceRange(node);
|
|
146
|
+
if (range)
|
|
147
|
+
out += raw.slice(range.start, range.end);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return out;
|
|
151
|
+
}
|
|
152
|
+
/** A node whose own bytes are its children's: a widget stands for its source range instead, and
|
|
153
|
+
* anything that is neither element nor fragment stands for nothing. */
|
|
154
|
+
const isTransparentContainer = (node) => (node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) &&
|
|
155
|
+
!isAtomicInlineWidget(node);
|
|
156
|
+
export function createRangeAtDomTextOffsets(container, start, end) {
|
|
157
|
+
const range = document.createRange();
|
|
158
|
+
// A detached fragment has no parent for setEndAfter; end inside it instead.
|
|
159
|
+
const setEndAtContainerEnd = () => {
|
|
160
|
+
if (container instanceof Element)
|
|
161
|
+
range.setEndAfter(container);
|
|
162
|
+
else
|
|
163
|
+
range.setEnd(container, container.childNodes.length);
|
|
164
|
+
};
|
|
165
|
+
const startPos = findDomTextOffsetTarget(container, start);
|
|
166
|
+
if (!startPos) {
|
|
167
|
+
range.selectNodeContents(container);
|
|
168
|
+
range.collapse(false);
|
|
169
|
+
return range;
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
range.setStart(startPos.node, startPos.offset);
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
if (start === end) {
|
|
178
|
+
range.collapse(true);
|
|
179
|
+
return range;
|
|
180
|
+
}
|
|
181
|
+
const endPos = findDomTextOffsetTarget(container, end);
|
|
182
|
+
if (endPos) {
|
|
183
|
+
try {
|
|
184
|
+
range.setEnd(endPos.node, endPos.offset);
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
setEndAtContainerEnd();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
setEndAtContainerEnd();
|
|
192
|
+
}
|
|
193
|
+
return range;
|
|
194
|
+
}
|
|
195
|
+
// ── Hidden marker runs ───────────────────────────────────────────────────────
|
|
196
|
+
/**
|
|
197
|
+
* Whether `node` is text the mode CSS paints nothing for — a marker span's own text under a
|
|
198
|
+
* marker-hiding mode with no reveal on it. Detected structurally against the families in
|
|
199
|
+
* `core/inline/visibility.ts`, never by layout: a `getComputedStyle` per keystroke is not
|
|
200
|
+
* affordable, so that vocabulary and `styles/editor.css` move together.
|
|
201
|
+
*/
|
|
202
|
+
export function isHiddenMarkerText(node, container) {
|
|
203
|
+
if (node.nodeType !== Node.TEXT_NODE || !container.contains(node))
|
|
204
|
+
return false;
|
|
205
|
+
const mode = markerHidingMode(container);
|
|
206
|
+
if (mode === null)
|
|
207
|
+
return false;
|
|
208
|
+
const chromePaints = chromeStandsAloneUnder(container, mode);
|
|
209
|
+
for (let el = node.parentElement; el && el !== container; el = el.parentElement) {
|
|
210
|
+
if (hidesOwnText(el, mode, chromePaints))
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Whether `el`'s OWN text is marker text the container's mode paints nothing for — the
|
|
217
|
+
* element-level form of {@link isHiddenMarkerText}, for a walk that treats such a span as
|
|
218
|
+
* opaque instead of descending into it.
|
|
219
|
+
*/
|
|
220
|
+
export function isHiddenMarkerRoot(el, container) {
|
|
221
|
+
if (el === container || !container.contains(el))
|
|
222
|
+
return false;
|
|
223
|
+
const mode = markerHidingMode(container);
|
|
224
|
+
return mode !== null && hidesOwnText(el, mode, chromeStandsAloneUnder(container, mode));
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* The DOM-reading twin of `paintsFocusedMarkers`: whether this container's mode paints NO marker
|
|
228
|
+
* in the focused block — neither its own structural prefix (`## `, a fence, a setext underline)
|
|
229
|
+
* nor an inline construct's delimiters. An unstamped container is styled source, which paints.
|
|
230
|
+
*/
|
|
231
|
+
export function revealsNoMarkers(container) {
|
|
232
|
+
const mode = markerHidingMode(container);
|
|
233
|
+
return mode !== null && !paintsFocusedMarkers(mode);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* How this container's bytes read on screen: its mode and its content-empty stamp, resolved here
|
|
237
|
+
* so a rewrite seam needs no marker vocabulary of its own. Chrome standing over no content PAINTS
|
|
238
|
+
* (live-mode.md § 4.1), and a seam holding a license over unseen bytes has nothing to claim there.
|
|
239
|
+
* An unmounted surface reads as source, where nothing hides and no rewrite has a run to move.
|
|
240
|
+
*/
|
|
241
|
+
export function screenVisibilityOf(container) {
|
|
242
|
+
return screenVisibility(container === null ? 'source' : (markerHidingMode(container) ?? 'source'), { chromePaints: container instanceof Element && container.hasAttribute(CONTENT_EMPTY_ATTR) });
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* The extreme walk offsets a caret can occupy in `container`: a hidden marker run or the leading
|
|
246
|
+
* ambient island holds no landable position, so the bound moves past it. Block-edge gates read
|
|
247
|
+
* these rather than 0 / walk length, which a mode painting no marker makes unreachable — a gate
|
|
248
|
+
* testing an offset no keystroke can produce is a dead key. An ALL-hidden container (an empty
|
|
249
|
+
* fence) has no landable offset and answers `{len, len}`, making every `offset <= start` gate true.
|
|
250
|
+
*/
|
|
251
|
+
export function landableDomTextBounds(container) {
|
|
252
|
+
let start = 0;
|
|
253
|
+
let end = 0;
|
|
254
|
+
let landed = false;
|
|
255
|
+
for (const seg of landingSegments(container, markerHidingMode(container))) {
|
|
256
|
+
if (seg.len === 0)
|
|
257
|
+
continue;
|
|
258
|
+
const stop = seg.start + seg.len;
|
|
259
|
+
// An atomic widget and a decoration island are opaque, not unreachable: the caret may not
|
|
260
|
+
// enter either, but both of their boundaries are positions of their own.
|
|
261
|
+
if (seg.kind === 'opaque' ? seg.hidden : inAmbientIsland(seg.node, container)) {
|
|
262
|
+
if (!landed)
|
|
263
|
+
start = stop;
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
landed = true;
|
|
267
|
+
end = stop;
|
|
268
|
+
}
|
|
269
|
+
return { start: asDomTextOffset(start), end: asDomTextOffset(Math.max(start, end)) };
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Whether every byte `container` holds is marker chrome, at least one span of it a family the
|
|
273
|
+
* empty-construct override paints. The stamp condition the render path writes as
|
|
274
|
+
* `data-content-empty` and the walk reads back — computed WITHOUT reading the stamp, or each
|
|
275
|
+
* render would flip the previous one's answer. Membership and paintability are separate
|
|
276
|
+
* questions: a reference label is chrome that stays hidden, so it is not content standing behind
|
|
277
|
+
* the stamp, and it is not the paint the stamp promises either.
|
|
278
|
+
*/
|
|
279
|
+
export function holdsOnlyMarkerChrome(container) {
|
|
280
|
+
let chrome = false;
|
|
281
|
+
for (const seg of walkSegments(container, null)) {
|
|
282
|
+
if (seg.len === 0)
|
|
283
|
+
continue;
|
|
284
|
+
if (seg.kind === 'widget')
|
|
285
|
+
return false;
|
|
286
|
+
const marker = markerRootOf(seg.node, container);
|
|
287
|
+
if (marker !== null) {
|
|
288
|
+
chrome ||= familyPaintsAlone(marker.family);
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
// The ambient island keeps its box in every mode, so it neither hides the block nor
|
|
292
|
+
// stands in for content: a `- ` with an empty child is landable and needs no stamp.
|
|
293
|
+
if (!inAmbientIsland(seg.node, container))
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
return chrome;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Whether the mode paints NOTHING landable here: every walk segment is a hidden marker run, so no
|
|
300
|
+
* caret position has a pixel of its own. `invariants/landable-caret.ts` refuses this shape at the
|
|
301
|
+
* focus seam — an empty container (landable at offset 0) and one fronted by the ambient island are
|
|
302
|
+
* not it.
|
|
303
|
+
*/
|
|
304
|
+
export function paintsNoLandableContent(container) {
|
|
305
|
+
let hidden = false;
|
|
306
|
+
for (const seg of landingSegments(container, markerHidingMode(container))) {
|
|
307
|
+
if (seg.len === 0)
|
|
308
|
+
continue;
|
|
309
|
+
if (seg.kind !== 'opaque' || !seg.hidden)
|
|
310
|
+
return false;
|
|
311
|
+
hidden = true;
|
|
312
|
+
}
|
|
313
|
+
return hidden;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* {@link landableDomTextBounds} in the caret's own raw space, or null where the mode paints its
|
|
317
|
+
* markers and the whole raw span is reachable. The one home every caret gate and caret DOOR
|
|
318
|
+
* reads: the arrow exits, the cross-block collapse, and the block-entry seat all ask the same
|
|
319
|
+
* question and must not answer it three ways.
|
|
320
|
+
*/
|
|
321
|
+
export function landableRawBounds(el, ambientLength) {
|
|
322
|
+
if (!revealsNoMarkers(el))
|
|
323
|
+
return null;
|
|
324
|
+
const bounds = landableDomTextBounds(el);
|
|
325
|
+
return {
|
|
326
|
+
start: toClampedRawOffset(bounds.start, ambientLength),
|
|
327
|
+
end: toClampedRawOffset(bounds.end, ambientLength)
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
/** Clamp a caret offset into `el`'s landable range — identity wherever the markers paint. */
|
|
331
|
+
export function clampToLandableRaw(el, offset, ambientLength) {
|
|
332
|
+
const bounds = landableRawBounds(el, ambientLength);
|
|
333
|
+
if (!bounds)
|
|
334
|
+
return offset;
|
|
335
|
+
return Math.min(Math.max(offset, bounds.start), bounds.end);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Whether the first landable position abuts an opaque island (an atomic widget, a decoration
|
|
339
|
+
* island) instead of sitting in text: no text node holds it, so the engine's Home seats the
|
|
340
|
+
* caret past the island and the block's start needs an owned door.
|
|
341
|
+
*/
|
|
342
|
+
export function landableStartAbutsIsland(container) {
|
|
343
|
+
for (const seg of landingSegments(container, markerHidingMode(container))) {
|
|
344
|
+
if (seg.len === 0)
|
|
345
|
+
continue;
|
|
346
|
+
if (seg.kind === 'opaque') {
|
|
347
|
+
if (seg.hidden)
|
|
348
|
+
continue;
|
|
349
|
+
return true;
|
|
350
|
+
}
|
|
351
|
+
if (inAmbientIsland(seg.node, container))
|
|
352
|
+
continue;
|
|
353
|
+
return false;
|
|
354
|
+
}
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
/** Whether `node` is an atomic inline widget's element — the island every walk treats as opaque.
|
|
358
|
+
* The attribute rather than the selector: every walk asks this per node. */
|
|
359
|
+
export function isAtomicInlineWidget(node) {
|
|
360
|
+
return node.nodeType === Node.ELEMENT_NODE && node.hasAttribute(WIDGET_ATTR);
|
|
361
|
+
}
|
|
362
|
+
// ── Internal ─────────────────────────────────────────────────────────────────
|
|
363
|
+
const FOCUSED_HOST_SELECTOR = '.block-host[data-focused]';
|
|
364
|
+
/** The editor root's effective mode when it hides markers; null in source mode, which
|
|
365
|
+
* stamps no attribute, and for a detached build with no root to read. */
|
|
366
|
+
function markerHidingMode(container) {
|
|
367
|
+
if (!(container instanceof Element))
|
|
368
|
+
return null;
|
|
369
|
+
const mode = asPresentationMode(container.closest('[data-presentation]')?.getAttribute('data-presentation'));
|
|
370
|
+
return hidesMarkers(mode) ? mode : null;
|
|
371
|
+
}
|
|
372
|
+
/** Nearest ancestor between `node` and `root` whose own text is marker chrome, with the family
|
|
373
|
+
* that decides what the stamped-container override does with it. */
|
|
374
|
+
function markerRootOf(node, root) {
|
|
375
|
+
for (let el = node.parentElement; el && el !== root; el = el.parentElement) {
|
|
376
|
+
const family = markerFamilyOf(el);
|
|
377
|
+
if (family !== null)
|
|
378
|
+
return { el, family };
|
|
379
|
+
}
|
|
380
|
+
return null;
|
|
381
|
+
}
|
|
382
|
+
/** Whether `root` carries the content-empty stamp under a mode that paints it. */
|
|
383
|
+
function chromeStandsAloneUnder(root, mode) {
|
|
384
|
+
if (mode === null || !(root instanceof Element))
|
|
385
|
+
return false;
|
|
386
|
+
return screenVisibility(mode, { chromePaints: root.hasAttribute(CONTENT_EMPTY_ATTR) })
|
|
387
|
+
.chromePaints;
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Whether `node` is inside the leading ambient marker island — a container's `- ` / `1. ` prefix,
|
|
391
|
+
* the one inert island whose far side IS raw 0. Every other opaque island (a widget, a
|
|
392
|
+
* decoration) has a real raw offset on each side, so only this one joins the unreachable prefix.
|
|
393
|
+
*/
|
|
394
|
+
function inAmbientIsland(node, root) {
|
|
395
|
+
for (let el = node.parentElement; el && el !== root; el = el.parentElement) {
|
|
396
|
+
if (el.classList.contains('md-marker') && el.getAttribute('contenteditable') === 'false') {
|
|
397
|
+
return true;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return false;
|
|
401
|
+
}
|
|
402
|
+
function hidesOwnText(el, mode, chromePaints) {
|
|
403
|
+
const family = markerFamilyOf(el);
|
|
404
|
+
// The shared rule first (the stylesheet's `[data-content-empty]` override among it); the
|
|
405
|
+
// reveal arms below are per-span DOM state, which only this side of the model can see.
|
|
406
|
+
if (family === null || !familyHidesText(family, screenVisibility(mode, { chromePaints })))
|
|
407
|
+
return false;
|
|
408
|
+
if (mode !== 'preview-block' && mode !== 'preview-inline')
|
|
409
|
+
return true;
|
|
410
|
+
if (!el.closest(FOCUSED_HOST_SELECTOR))
|
|
411
|
+
return true;
|
|
412
|
+
if (mode === 'preview-block')
|
|
413
|
+
return false;
|
|
414
|
+
// preview-inline's unstamped-reveal arm is scoped to `.md-marker`, so a ref label reveals
|
|
415
|
+
// by class alone; fence lines are whole-block markers and reveal with block focus.
|
|
416
|
+
if (el.classList.contains('md-fence-line'))
|
|
417
|
+
return false;
|
|
418
|
+
if (el.classList.contains('md-ref-label'))
|
|
419
|
+
return !el.classList.contains(CONSTRUCT_REVEAL_CLASS);
|
|
420
|
+
return el.hasAttribute('data-construct-start') && !el.classList.contains(CONSTRUCT_REVEAL_CLASS);
|
|
421
|
+
}
|
|
422
|
+
function snapOutOfRun(container, offset, side, mode) {
|
|
423
|
+
if (mode === null)
|
|
424
|
+
return asDomTextOffset(offset);
|
|
425
|
+
for (const seg of landingSegments(container, mode)) {
|
|
426
|
+
if (seg.start > offset)
|
|
427
|
+
break;
|
|
428
|
+
if (seg.kind === 'opaque' && seg.hidden && seg.start < offset && offset < seg.start + seg.len) {
|
|
429
|
+
return asDomTextOffset(side === 'before' ? seg.start : seg.start + seg.len);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
return asDomTextOffset(offset);
|
|
433
|
+
}
|
|
434
|
+
/** The landable DOM position beside a span the caret may not enter. Prefers an adjacent
|
|
435
|
+
* text node — Chromium drops beforeinput at element-level offsets between two islands. */
|
|
436
|
+
function positionBeside(el, side) {
|
|
437
|
+
const parent = el.parentNode;
|
|
438
|
+
if (!parent)
|
|
439
|
+
return null;
|
|
440
|
+
const sibling = side === 'before' ? el.previousSibling : el.nextSibling;
|
|
441
|
+
if (sibling && sibling.nodeType === Node.TEXT_NODE) {
|
|
442
|
+
return { node: sibling, offset: side === 'before' ? (sibling.textContent?.length ?? 0) : 0 };
|
|
443
|
+
}
|
|
444
|
+
const idx = Array.prototype.indexOf.call(parent.childNodes, el);
|
|
445
|
+
return { node: parent, offset: side === 'before' ? idx : idx + 1 };
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* The classification every walk-space consumer shares: a text node contributes its textContent
|
|
449
|
+
* length, an atomic widget its raw source length (never descended), any other element is
|
|
450
|
+
* transparent. Hidden marker text counts exactly like visible text — hiding is CSS-only so the
|
|
451
|
+
* coordinate space survives it — and carries the span that hides it. Offsets stay plain numbers;
|
|
452
|
+
* consumers mint the `DomTextOffset` brand.
|
|
453
|
+
*/
|
|
454
|
+
function* walkSegments(root, mode) {
|
|
455
|
+
let count = 0;
|
|
456
|
+
// One read per walk, not one `closest` per element: every caller passes the walk container.
|
|
457
|
+
const chromePaints = chromeStandsAloneUnder(root, mode);
|
|
458
|
+
const stack = [];
|
|
459
|
+
// Reversed push, so pop order is source order — which `count` advances along.
|
|
460
|
+
const pushChildren = (parent, hiddenRoot) => {
|
|
461
|
+
const children = parent.childNodes;
|
|
462
|
+
for (let i = children.length - 1; i >= 0; i--)
|
|
463
|
+
stack.push({ node: children[i], hiddenRoot });
|
|
464
|
+
};
|
|
465
|
+
pushChildren(root, null);
|
|
466
|
+
while (stack.length > 0) {
|
|
467
|
+
const { node, hiddenRoot } = stack.pop();
|
|
468
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
469
|
+
const len = node.textContent?.length ?? 0;
|
|
470
|
+
yield { kind: 'text', node, start: count, len, hiddenRoot };
|
|
471
|
+
count += len;
|
|
472
|
+
continue;
|
|
473
|
+
}
|
|
474
|
+
if (node.nodeType !== Node.ELEMENT_NODE)
|
|
475
|
+
continue;
|
|
476
|
+
const el = node;
|
|
477
|
+
if (isAtomicInlineWidget(el)) {
|
|
478
|
+
const len = widgetRawLength(el);
|
|
479
|
+
yield { kind: 'widget', el, start: count, len };
|
|
480
|
+
count += len;
|
|
481
|
+
continue;
|
|
482
|
+
}
|
|
483
|
+
pushChildren(el, hiddenRoot ?? (mode !== null && hidesOwnText(el, mode, chromePaints) ? el : null));
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
/** An opaque span at birth: one element, so it is its own first and last until a run extends it. */
|
|
487
|
+
function opaqueSegment(el, start, len, hidden) {
|
|
488
|
+
return { kind: 'opaque', hidden, first: el, last: el, start, len };
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* The same walk as the caret sees it: landable text, and opaque spans it may not enter —
|
|
492
|
+
* atomic widgets, plus MAXIMAL runs of hidden marker text, coalesced because snapping out of
|
|
493
|
+
* one hidden span into the next would still leave the caret in unpainted text.
|
|
494
|
+
*/
|
|
495
|
+
function* landingSegments(root, mode) {
|
|
496
|
+
let run = null;
|
|
497
|
+
for (const seg of walkSegments(root, mode)) {
|
|
498
|
+
// A zero-contribution node cannot end a run: Chromium leaves empty text nodes between
|
|
499
|
+
// spans, and splitting the run there would mint a landable seam nothing paints.
|
|
500
|
+
if (run && seg.len === 0)
|
|
501
|
+
continue;
|
|
502
|
+
if (seg.kind === 'text' && seg.hiddenRoot !== null) {
|
|
503
|
+
if (run) {
|
|
504
|
+
run.len += seg.len;
|
|
505
|
+
run.last = seg.hiddenRoot;
|
|
506
|
+
}
|
|
507
|
+
else {
|
|
508
|
+
run = opaqueSegment(seg.hiddenRoot, seg.start, seg.len, true);
|
|
509
|
+
}
|
|
510
|
+
continue;
|
|
511
|
+
}
|
|
512
|
+
if (run) {
|
|
513
|
+
yield run;
|
|
514
|
+
run = null;
|
|
515
|
+
}
|
|
516
|
+
if (seg.kind === 'text')
|
|
517
|
+
yield seg;
|
|
518
|
+
else
|
|
519
|
+
yield opaqueSegment(seg.el, seg.start, seg.len, false);
|
|
520
|
+
}
|
|
521
|
+
if (run)
|
|
522
|
+
yield run;
|
|
523
|
+
}
|
|
524
|
+
function positionBoundary(node, offset) {
|
|
525
|
+
if (node.nodeType === Node.TEXT_NODE)
|
|
526
|
+
return null;
|
|
527
|
+
const child = node.childNodes[offset];
|
|
528
|
+
return child ? { node: child, side: 'before' } : { node, side: 'afterContents' };
|
|
529
|
+
}
|
|
530
|
+
function startsAtOrAfter(segNode, boundary) {
|
|
531
|
+
if (segNode === boundary.node)
|
|
532
|
+
return boundary.side === 'before';
|
|
533
|
+
const mask = boundary.node.compareDocumentPosition(segNode);
|
|
534
|
+
if ((mask & Node.DOCUMENT_POSITION_FOLLOWING) === 0)
|
|
535
|
+
return false;
|
|
536
|
+
// A descendant follows the landmark's start but precedes the end of its contents, so
|
|
537
|
+
// only the 'before' side counts it.
|
|
538
|
+
return boundary.side === 'before' || (mask & Node.DOCUMENT_POSITION_CONTAINED_BY) === 0;
|
|
539
|
+
}
|
|
540
|
+
function widgetRawLength(el) {
|
|
541
|
+
const range = widgetSourceRange(el);
|
|
542
|
+
return range ? Math.max(0, range.end - range.start) : 0;
|
|
543
|
+
}
|