@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,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline-widget interaction for TextEditableBlock: the offset math and the handler
|
|
3
|
+
* bodies that branch off keydown/click. Each keydown sub-handler returns whether it
|
|
4
|
+
* consumed the event, so the component can interleave them with the shared pipeline.
|
|
5
|
+
*/
|
|
6
|
+
import type { BlockEditActions, FocusActions } from '../../../action-contracts';
|
|
7
|
+
import type { AnyInlineKind } from '../../../core/nodes';
|
|
8
|
+
import type { NodeView } from '../../../core/node-views';
|
|
9
|
+
import type { PresentationMode } from '../../../presentation-mode';
|
|
10
|
+
import type { LinkReferenceResolverRef } from '../../../editor-keys';
|
|
11
|
+
import type { WidgetSelectionState } from '../../image/widget-selection-state.svelte';
|
|
12
|
+
import type { AmbientCursorIO } from '../../../ambient/ambient-cursor';
|
|
13
|
+
import type { RevealFold } from '../editable-surface';
|
|
14
|
+
export interface WidgetInteractionDeps {
|
|
15
|
+
get node(): NodeView;
|
|
16
|
+
get index(): number;
|
|
17
|
+
get myPath(): number[];
|
|
18
|
+
getEl: () => HTMLElement | null;
|
|
19
|
+
getAmbientLength: () => number;
|
|
20
|
+
getEditorContentWidth: () => number;
|
|
21
|
+
cursor: AmbientCursorIO;
|
|
22
|
+
widgetSelection: WidgetSelectionState;
|
|
23
|
+
blockEdit: BlockEditActions;
|
|
24
|
+
focusActions: FocusActions;
|
|
25
|
+
setSnapTarget: (offset: number | null) => void;
|
|
26
|
+
/** Park a caret for the post-render restore. `writtenText` is the text that offset
|
|
27
|
+
* addresses: a kind whose write sink rewrites bytes moves the offset, and only that
|
|
28
|
+
* text can map it. */
|
|
29
|
+
setPendingCursor: (offset: number | null, writtenText?: string) => void;
|
|
30
|
+
/** The block's live DOM as raw text, read on reveal commit to pick up the ephemeral
|
|
31
|
+
* source edit that never went through the CST. */
|
|
32
|
+
readRawText: () => string;
|
|
33
|
+
/** Mirrors reveal-active into the component, so `onInput` and IME compositionend
|
|
34
|
+
* suppress the per-keystroke CST commit while source is shown. */
|
|
35
|
+
setRevealing: (value: boolean) => void;
|
|
36
|
+
/** Folding a revealed source mid-selection would strand an endpoint anchored in it. */
|
|
37
|
+
isCrossBlock: () => boolean;
|
|
38
|
+
/** Effective mode; reading gates reveal-open and the widget edit arms. Optional so
|
|
39
|
+
* bare harnesses read as 'source'. */
|
|
40
|
+
getPresentationMode?: () => PresentationMode;
|
|
41
|
+
get linkRef(): LinkReferenceResolverRef | undefined;
|
|
42
|
+
}
|
|
43
|
+
/** The click a widget gesture reads off: the same event the widget's own handler sees. */
|
|
44
|
+
export interface WidgetPress {
|
|
45
|
+
/** Ctrl/Cmd at the CLICK: with it, a widget claiming the activation click keeps the gesture. */
|
|
46
|
+
modified?: boolean;
|
|
47
|
+
/** `MouseEvent.detail`; two or more is a double-click, which takes the token it just revealed. */
|
|
48
|
+
clickCount?: number;
|
|
49
|
+
}
|
|
50
|
+
export interface WidgetInteraction {
|
|
51
|
+
/** Block holds only image/blank inline content, so vertical arrow traversal skips
|
|
52
|
+
* it: the widgets carry no column meaning. */
|
|
53
|
+
isVerticallyTransparent(): boolean;
|
|
54
|
+
/** Keydown while a widget is selected. Every key is consumed in that state, so a
|
|
55
|
+
* true return must not fall through to the shared pipeline. */
|
|
56
|
+
handleSelectedWidgetKeydown(e: KeyboardEvent): Promise<boolean>;
|
|
57
|
+
/** Shift+Arrow into a widget; extends the native selection to the far boundary. */
|
|
58
|
+
handleShiftArrowIntoWidget(e: KeyboardEvent): boolean;
|
|
59
|
+
/** Enter a widget at a caret edge — the reveal-vs-select policy split. The caret-edge
|
|
60
|
+
* dispatch classifies the edge and calls this. */
|
|
61
|
+
enterWidget(widget: {
|
|
62
|
+
start: number;
|
|
63
|
+
end: number;
|
|
64
|
+
kind: AnyInlineKind;
|
|
65
|
+
}, fromTrailingEdge: boolean): void;
|
|
66
|
+
/** Cross-block edge landing: a reveal-capable widget at the near edge opens its
|
|
67
|
+
* source, any other is selected. Returns whether an edge widget was entered. */
|
|
68
|
+
enterEdgeWidget(side: 'start' | 'end'): boolean;
|
|
69
|
+
/** Snap a click that landed outside any text node to the nearest widget edge, or open a
|
|
70
|
+
* reveal-source widget it hit. */
|
|
71
|
+
snapClickToWidgetEdge(clickX: number | null, clickY: number | null, press?: WidgetPress): void;
|
|
72
|
+
/** A reveal-source widget currently shows its editable `$…$` source. */
|
|
73
|
+
isRevealing(): boolean;
|
|
74
|
+
/** Escape (cancel to rendered) while source is shown. Enter is deliberately NOT
|
|
75
|
+
* claimed: it is the block's split command, and the command seam folds first. */
|
|
76
|
+
handleRevealingKeydown(e: KeyboardEvent): Promise<boolean>;
|
|
77
|
+
/** Commit the revealed source when focus leaves the block. */
|
|
78
|
+
commitRevealOnBlur(): void;
|
|
79
|
+
/** Fold an active reveal before ANY mutation of the block, so the mutation runs
|
|
80
|
+
* against a CST matching the swapped DOM. Null if none was open; otherwise the
|
|
81
|
+
* committed caret and a write completion the caller MUST await before mutating. */
|
|
82
|
+
foldRevealBeforeMutation(caretAfter?: number): RevealFold | null;
|
|
83
|
+
/** Fold when the caret escapes a revealed source but stays inside the block; blur
|
|
84
|
+
* owns the focus-leaving fold. */
|
|
85
|
+
foldRevealIfSelectionEscaped(): void;
|
|
86
|
+
/** The point sits on a reveal-source widget — pointerdown preventDefaults the
|
|
87
|
+
* browser's caret task so nothing races the reveal's own placement. */
|
|
88
|
+
isPointOnRevealWidget(x: number, y: number): boolean;
|
|
89
|
+
}
|
|
90
|
+
export declare function createWidgetInteraction(deps: WidgetInteractionDeps): WidgetInteraction;
|
|
@@ -0,0 +1,591 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline-widget interaction for TextEditableBlock: the offset math and the handler
|
|
3
|
+
* bodies that branch off keydown/click. Each keydown sub-handler returns whether it
|
|
4
|
+
* consumed the event, so the component can interleave them with the shared pipeline.
|
|
5
|
+
*/
|
|
6
|
+
import { tick } from 'svelte';
|
|
7
|
+
import { resolvedInlineContent } from '../../../core/inline/inline-cache';
|
|
8
|
+
import { isInlineWidget, flattenInlineWidgets, getInlineWidgetEditing, isWidgetActivationClick } from '../../../core/inline/inline-widgets';
|
|
9
|
+
import { isVerticallyTransparentNode } from '../../../core/inline/transparency';
|
|
10
|
+
import { trimTrailingLineEnding, trailingLineEnding } from '../../../core/lines';
|
|
11
|
+
import { asRawOffset, toClampedRawOffset, toDomTextOffset } from '../../../cursor/coordinate-spaces';
|
|
12
|
+
import { domTextOffsetAtNode, createRangeAtDomTextOffsets, selectionFocusWalkOffset } from '../../../cursor/widget-offset';
|
|
13
|
+
import { createSourceReveal } from '../../../cursor/reveal-source';
|
|
14
|
+
import { traceRevealOpen, traceRevealFold } from '../../../debug/interaction-trace';
|
|
15
|
+
import { assertInvariant } from '../../../assert';
|
|
16
|
+
import { caretIsInTextContent, hasModifier, isPlainTypingKey } from './click-snap-guard';
|
|
17
|
+
import { findWidgetNodeByStart, findFirstEdgeWidget, findLastEdgeWidget, rawHasNoTextBefore, rawHasNoTextAfter, widgetElByStart } from './widget-adjacency';
|
|
18
|
+
export function createWidgetInteraction(deps) {
|
|
19
|
+
const isReading = () => deps.getPresentationMode?.() === 'reading';
|
|
20
|
+
// Resolver-aware so widget detection matches the render path's view; a mismatch
|
|
21
|
+
// around reference-style image widgets breaks cursor and clipboard offsets.
|
|
22
|
+
function inlinesOf(node) {
|
|
23
|
+
return resolvedInlineContent(node, deps.linkRef);
|
|
24
|
+
}
|
|
25
|
+
let revealState = null;
|
|
26
|
+
// Outside the record because they must survive `resetReveal` for the kernel's async
|
|
27
|
+
// restore. Identity is load-bearing: two byte-identical widgets share a reuse-pool key,
|
|
28
|
+
// so a lookup can return the OTHER instance and `replaceWith` would MOVE it.
|
|
29
|
+
let activeSourceNode = null;
|
|
30
|
+
let revealedWidget = null;
|
|
31
|
+
// Every fold entry is module-private and pre-guarded by all of its callers, so a fold
|
|
32
|
+
// with no active reveal means a new caller skipped the guard or a flag leaked (G1.26).
|
|
33
|
+
function assertFoldTargetsActiveReveal(entry) {
|
|
34
|
+
assertInvariant('reveal-transition', () => revealState
|
|
35
|
+
? null
|
|
36
|
+
: { code: 'fold-without-reveal', message: `${entry} with no active reveal` });
|
|
37
|
+
}
|
|
38
|
+
function restoreRenderedWidget() {
|
|
39
|
+
if (activeSourceNode === null || revealedWidget === null)
|
|
40
|
+
return;
|
|
41
|
+
activeSourceNode.replaceWith(revealedWidget);
|
|
42
|
+
activeSourceNode = null;
|
|
43
|
+
revealedWidget = null;
|
|
44
|
+
}
|
|
45
|
+
// The one canonical teardown. Widget restoration is a SEPARATE step, so the swap
|
|
46
|
+
// handles are left untouched: cancel resets the record before awaiting the kernel
|
|
47
|
+
// restore that still needs them.
|
|
48
|
+
function resetReveal() {
|
|
49
|
+
revealState = null;
|
|
50
|
+
deps.setRevealing(false);
|
|
51
|
+
}
|
|
52
|
+
async function startReveal(widget, caretBefore, atSourceOffset = 0) {
|
|
53
|
+
// Every reveal entry converges here, so this is the one reading-mode gate needed.
|
|
54
|
+
if (isReading())
|
|
55
|
+
return;
|
|
56
|
+
// The settle window spans only microtasks plus the synchronous focus dispatch, so
|
|
57
|
+
// no user gesture lands inside it — a re-entry is a call from the chain itself (G1.26).
|
|
58
|
+
assertInvariant('reveal-transition', () => revealState?.settling
|
|
59
|
+
? {
|
|
60
|
+
code: 'start-during-settle',
|
|
61
|
+
message: 'startReveal re-entered inside the reveal settle window'
|
|
62
|
+
}
|
|
63
|
+
: null);
|
|
64
|
+
if (revealState)
|
|
65
|
+
return;
|
|
66
|
+
traceRevealOpen('inline');
|
|
67
|
+
const start = widget.start;
|
|
68
|
+
const end = widget.end;
|
|
69
|
+
const source = deps.node.raw.slice(start, end);
|
|
70
|
+
// The imperative span-swap IS the mechanism: the opaque island becomes a text node.
|
|
71
|
+
const kernel = createSourceReveal({
|
|
72
|
+
get container() {
|
|
73
|
+
return deps.getEl();
|
|
74
|
+
},
|
|
75
|
+
get sourceStart() {
|
|
76
|
+
return start;
|
|
77
|
+
},
|
|
78
|
+
get sourceEnd() {
|
|
79
|
+
return end;
|
|
80
|
+
},
|
|
81
|
+
get source() {
|
|
82
|
+
return source;
|
|
83
|
+
},
|
|
84
|
+
getAmbientLength: deps.getAmbientLength,
|
|
85
|
+
isRevealed: () => activeSourceNode !== null,
|
|
86
|
+
showSource: () => {
|
|
87
|
+
const container = deps.getEl();
|
|
88
|
+
if (!container)
|
|
89
|
+
return;
|
|
90
|
+
const widget = widgetElByStart(container, start);
|
|
91
|
+
if (!widget)
|
|
92
|
+
return;
|
|
93
|
+
revealedWidget = widget;
|
|
94
|
+
activeSourceNode = document.createTextNode(source);
|
|
95
|
+
widget.replaceWith(activeSourceNode);
|
|
96
|
+
},
|
|
97
|
+
// Re-inserts the exact element the swap detached, still current because the edit
|
|
98
|
+
// was discarded. The persist path re-renders reactively instead.
|
|
99
|
+
showRendered: restoreRenderedWidget
|
|
100
|
+
});
|
|
101
|
+
revealState = {
|
|
102
|
+
kernel,
|
|
103
|
+
widgetEnd: end,
|
|
104
|
+
caretBefore,
|
|
105
|
+
originalDisplay: trimTrailingLineEnding(deps.node.raw),
|
|
106
|
+
settling: true
|
|
107
|
+
};
|
|
108
|
+
deps.widgetSelection.clear();
|
|
109
|
+
deps.setRevealing(true);
|
|
110
|
+
try {
|
|
111
|
+
await kernel.reveal(atSourceOffset);
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
// `finally`, not a plain clear: a wedged-true flag would disable the escape fold
|
|
115
|
+
// for the rest of the block's life. Guarded — a fold mid-await already nulled it.
|
|
116
|
+
if (revealState)
|
|
117
|
+
revealState.settling = false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Persist the ephemeral source edit, or fold back untouched. The caret lands on the
|
|
121
|
+
// source node's LIVE trailing edge, so a concurrent prose edit shifts it correctly.
|
|
122
|
+
// ALWAYS folds: a null read as "nothing to wait for" would let a seam splice stale bytes.
|
|
123
|
+
function commitReveal(reason = 'commit', caretOverride) {
|
|
124
|
+
assertFoldTargetsActiveReveal('commitReveal');
|
|
125
|
+
if (!revealState)
|
|
126
|
+
return null;
|
|
127
|
+
// Aliased before any call: TS drops the null-narrowing of a closure-reassigned
|
|
128
|
+
// `let` across an intervening call.
|
|
129
|
+
const active = revealState;
|
|
130
|
+
traceRevealFold(reason);
|
|
131
|
+
const el = deps.getEl();
|
|
132
|
+
const sourceNode = activeSourceNode;
|
|
133
|
+
const editedDisplay = deps.readRawText();
|
|
134
|
+
const caretAfter = caretOverride ??
|
|
135
|
+
(el && sourceNode
|
|
136
|
+
? toClampedRawOffset(domTextOffsetAtNode(el, sourceNode, sourceNode.length), deps.getAmbientLength())
|
|
137
|
+
: active.widgetEnd);
|
|
138
|
+
const { caretBefore, originalDisplay } = active;
|
|
139
|
+
// The reactive re-render rebuilds the island, so drop the swap handles without a
|
|
140
|
+
// DOM restore, then run the canonical teardown.
|
|
141
|
+
activeSourceNode = null;
|
|
142
|
+
revealedWidget = null;
|
|
143
|
+
resetReveal();
|
|
144
|
+
// No edit: fold without touching the CST. A zero-diff write still pushes a dead
|
|
145
|
+
// undo entry, so the user's next Ctrl+Z would revert nothing instead of their
|
|
146
|
+
// prior action. The pending-cursor set alone re-renders from the untouched CST.
|
|
147
|
+
if (editedDisplay === originalDisplay) {
|
|
148
|
+
deps.setPendingCursor(caretAfter);
|
|
149
|
+
return { caret: caretAfter, settled: tick() };
|
|
150
|
+
}
|
|
151
|
+
const write = deps.blockEdit.updateBlockContent(deps.index, editedDisplay + trailingLineEnding(deps.node.raw), caretBefore, caretAfter);
|
|
152
|
+
deps.setPendingCursor(caretAfter, editedDisplay);
|
|
153
|
+
return { caret: caretAfter, settled: settleWrite(write) };
|
|
154
|
+
}
|
|
155
|
+
// "Settled" for every fold caller: the write landed AND the render it forced flushed.
|
|
156
|
+
// A rejection is absorbed — the commit ceremony rethrows only in DEV, so forwarding
|
|
157
|
+
// would let a DEV-only throw cancel the gesture the seam is holding open.
|
|
158
|
+
async function settleWrite(write) {
|
|
159
|
+
try {
|
|
160
|
+
await write;
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
// reported at the commit seam
|
|
164
|
+
}
|
|
165
|
+
await tick();
|
|
166
|
+
}
|
|
167
|
+
// Discard the ephemeral edit and rebuild the original widget from the untouched raw:
|
|
168
|
+
// a CST-free view toggle, so no undo entry.
|
|
169
|
+
async function cancelReveal() {
|
|
170
|
+
assertFoldTargetsActiveReveal('cancelReveal');
|
|
171
|
+
if (!revealState)
|
|
172
|
+
return;
|
|
173
|
+
const active = revealState;
|
|
174
|
+
traceRevealFold('cancel');
|
|
175
|
+
const { kernel } = active;
|
|
176
|
+
// Reset BEFORE the await so the record reads idle across the kernel's restore:
|
|
177
|
+
// `replaceWith` fires selectionchange, and a live record would let the escape-fold
|
|
178
|
+
// re-enter mid-swap. The restore reads the swap handles kept outside the record.
|
|
179
|
+
resetReveal();
|
|
180
|
+
await kernel.commit();
|
|
181
|
+
}
|
|
182
|
+
// Click-away fold for an UNEDITED reveal: no caret is written, because the escaping
|
|
183
|
+
// click owns the caret and the commit path's trailing-edge landing would hijack it.
|
|
184
|
+
function foldRevealNoEdit(reason = 'no-edit') {
|
|
185
|
+
assertFoldTargetsActiveReveal('foldRevealNoEdit');
|
|
186
|
+
if (!revealState)
|
|
187
|
+
return;
|
|
188
|
+
traceRevealFold(reason);
|
|
189
|
+
resetReveal();
|
|
190
|
+
restoreRenderedWidget();
|
|
191
|
+
}
|
|
192
|
+
// Containment is decided by RAW OFFSET through the canonical walk, boundary-inclusive:
|
|
193
|
+
// a caret at the source's edge may anchor in the ADJACENT text node, the browser's
|
|
194
|
+
// choice, and node identity would misread that as an escape.
|
|
195
|
+
function selectionEscapedSource() {
|
|
196
|
+
if (!revealState || !activeSourceNode || revealState.settling)
|
|
197
|
+
return false;
|
|
198
|
+
if (deps.isCrossBlock())
|
|
199
|
+
return false;
|
|
200
|
+
const el = deps.getEl();
|
|
201
|
+
const sel = window.getSelection();
|
|
202
|
+
if (!el || !sel || sel.rangeCount === 0)
|
|
203
|
+
return false;
|
|
204
|
+
const { anchorNode, focusNode } = sel;
|
|
205
|
+
if (!anchorNode || !focusNode)
|
|
206
|
+
return false;
|
|
207
|
+
if (!el.contains(anchorNode) || !el.contains(focusNode))
|
|
208
|
+
return false;
|
|
209
|
+
if (activeSourceNode.contains(anchorNode) || activeSourceNode.contains(focusNode))
|
|
210
|
+
return false;
|
|
211
|
+
const ambient = deps.getAmbientLength();
|
|
212
|
+
const sourceStart = toClampedRawOffset(domTextOffsetAtNode(el, activeSourceNode, 0), ambient);
|
|
213
|
+
const sourceEnd = sourceStart + activeSourceNode.length;
|
|
214
|
+
const anchorOff = toClampedRawOffset(domTextOffsetAtNode(el, anchorNode, sel.anchorOffset), ambient);
|
|
215
|
+
const focusOff = toClampedRawOffset(domTextOffsetAtNode(el, focusNode, sel.focusOffset), ambient);
|
|
216
|
+
const inSource = (o) => o >= sourceStart && o <= sourceEnd;
|
|
217
|
+
return !inSource(anchorOff) && !inSource(focusOff);
|
|
218
|
+
}
|
|
219
|
+
// An escape must SURVIVE A TICK to fold: cross-block entry clears the native selection
|
|
220
|
+
// before its flag flips, manufacturing a transient escape-shaped state that re-verifying
|
|
221
|
+
// rejects. The latch survives the very exit it triggers, so `resetReveal` never clears it.
|
|
222
|
+
let foldCheckQueued = false;
|
|
223
|
+
function foldRevealIfSelectionEscaped() {
|
|
224
|
+
if (foldCheckQueued || !selectionEscapedSource())
|
|
225
|
+
return;
|
|
226
|
+
foldCheckQueued = true;
|
|
227
|
+
void (async () => {
|
|
228
|
+
try {
|
|
229
|
+
await tick();
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
foldCheckQueued = false;
|
|
233
|
+
}
|
|
234
|
+
if (!selectionEscapedSource() || !revealState)
|
|
235
|
+
return;
|
|
236
|
+
const active = revealState;
|
|
237
|
+
if (deps.readRawText() === active.originalDisplay) {
|
|
238
|
+
foldRevealNoEdit('selection-escape');
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
commitReveal('selection-escape');
|
|
242
|
+
})();
|
|
243
|
+
}
|
|
244
|
+
// The ONE hit test the pointerdown probe, the click dispatch, and the post-fold
|
|
245
|
+
// re-resolve share.
|
|
246
|
+
function hitTestRevealWidget(el, x, y) {
|
|
247
|
+
for (const inline of inlinesOf(deps.node)) {
|
|
248
|
+
if (!isInlineWidget(inline, deps.node.raw))
|
|
249
|
+
continue;
|
|
250
|
+
if (!getInlineWidgetEditing(inline.kind)?.revealSource)
|
|
251
|
+
continue;
|
|
252
|
+
const widget = widgetElByStart(el, inline.start);
|
|
253
|
+
if (!widget)
|
|
254
|
+
continue;
|
|
255
|
+
const rect = widget.getBoundingClientRect();
|
|
256
|
+
if (x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom) {
|
|
257
|
+
return { inline };
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
function isPointOnRevealWidget(x, y) {
|
|
263
|
+
const el = deps.getEl();
|
|
264
|
+
return el !== null && hitTestRevealWidget(el, x, y) !== null;
|
|
265
|
+
}
|
|
266
|
+
// The whole-token select belongs to the double-click that OPENED a reveal, and nothing in
|
|
267
|
+
// the second click's own shape tells it apart from a later one inside the same source.
|
|
268
|
+
let revealOpenedByLastClick = false;
|
|
269
|
+
// Order is the whole point: resolve the target BEFORE folding, because the fold shifts
|
|
270
|
+
// layout and the click point only means something against pre-fold geometry, then
|
|
271
|
+
// re-locate by OFFSET, because an edited commit shifts raw positions by its delta.
|
|
272
|
+
async function revealFromClick(clickX, clickY) {
|
|
273
|
+
const el = deps.getEl();
|
|
274
|
+
if (!el)
|
|
275
|
+
return;
|
|
276
|
+
const hit = hitTestRevealWidget(el, clickX, clickY);
|
|
277
|
+
if (!hit)
|
|
278
|
+
return;
|
|
279
|
+
let targetStart = hit.inline.start;
|
|
280
|
+
if (revealState) {
|
|
281
|
+
const active = revealState;
|
|
282
|
+
const revealedStart = activeSourceNode === null
|
|
283
|
+
? Number.POSITIVE_INFINITY
|
|
284
|
+
: toClampedRawOffset(domTextOffsetAtNode(el, activeSourceNode, 0), deps.getAmbientLength());
|
|
285
|
+
const rawBefore = deps.node.raw.length;
|
|
286
|
+
if (deps.readRawText() === active.originalDisplay) {
|
|
287
|
+
foldRevealNoEdit();
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
await commitReveal()?.settled;
|
|
291
|
+
if (revealedStart < targetStart)
|
|
292
|
+
targetStart += deps.node.raw.length - rawBefore;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
const target = inlinesOf(deps.node).find((n) => n.start === targetStart &&
|
|
296
|
+
isInlineWidget(n, deps.node.raw) &&
|
|
297
|
+
getInlineWidgetEditing(n.kind)?.revealSource);
|
|
298
|
+
if (!target)
|
|
299
|
+
return;
|
|
300
|
+
el.focus();
|
|
301
|
+
revealOpenedByLastClick = true;
|
|
302
|
+
// A click can't map to a source glyph — land at the leading edge (offset 0).
|
|
303
|
+
void startReveal(target, target.start, 0);
|
|
304
|
+
}
|
|
305
|
+
/** Take the whole revealed token; declines unless the native selection sits inside it. */
|
|
306
|
+
function selectRevealedSource() {
|
|
307
|
+
const source = activeSourceNode;
|
|
308
|
+
if (!revealState || !source)
|
|
309
|
+
return false;
|
|
310
|
+
const selection = window.getSelection();
|
|
311
|
+
if (!selection || !selection.anchorNode || !source.contains(selection.anchorNode))
|
|
312
|
+
return false;
|
|
313
|
+
const range = document.createRange();
|
|
314
|
+
range.selectNodeContents(source);
|
|
315
|
+
selection.removeAllRanges();
|
|
316
|
+
selection.addRange(range);
|
|
317
|
+
return true;
|
|
318
|
+
}
|
|
319
|
+
function isRevealing() {
|
|
320
|
+
return revealState !== null;
|
|
321
|
+
}
|
|
322
|
+
// Escape is the only key the reveal claims. Enter deliberately isn't: it is the block's
|
|
323
|
+
// split command everywhere else, and the command seam folds the reveal before it
|
|
324
|
+
// mutates, so one Enter both commits the edit and splits.
|
|
325
|
+
async function handleRevealingKeydown(e) {
|
|
326
|
+
if (!revealState)
|
|
327
|
+
return false;
|
|
328
|
+
if (e.key === 'Escape') {
|
|
329
|
+
e.preventDefault();
|
|
330
|
+
await cancelReveal();
|
|
331
|
+
return true;
|
|
332
|
+
}
|
|
333
|
+
return false;
|
|
334
|
+
}
|
|
335
|
+
// The one fold that stands down mid-cross-block: a sweeping selection keeps the source
|
|
336
|
+
// revealed so its rects measure real text and no endpoint anchored in it is stranded
|
|
337
|
+
// (the escape fold carries the same rule in `selectionEscapedSource`).
|
|
338
|
+
function commitRevealOnBlur() {
|
|
339
|
+
if (revealState && !deps.isCrossBlock())
|
|
340
|
+
commitReveal('blur');
|
|
341
|
+
}
|
|
342
|
+
// A mutation runs the CST pipeline against `node.raw`, which a live reveal has outrun,
|
|
343
|
+
// so it must fold first. Returns the committed caret — a folded caret on an
|
|
344
|
+
// element-level edge would land the paste at offset 0 — and the write's completion.
|
|
345
|
+
function foldRevealBeforeMutation(caretAfter) {
|
|
346
|
+
if (!revealState)
|
|
347
|
+
return null;
|
|
348
|
+
return commitReveal('commit', caretAfter);
|
|
349
|
+
}
|
|
350
|
+
function isVerticallyTransparent() {
|
|
351
|
+
// Resolver-free, matching the off-window keyboard-extend path, so the vertical-skip
|
|
352
|
+
// decision is uniform everywhere. Other widget reads stay resolver-aware.
|
|
353
|
+
return isVerticallyTransparentNode(deps.node);
|
|
354
|
+
}
|
|
355
|
+
async function handleSelectedWidgetKeydown(e) {
|
|
356
|
+
const node = deps.node;
|
|
357
|
+
const selectedWidget = deps.widgetSelection.getSelected();
|
|
358
|
+
if (selectedWidget === null)
|
|
359
|
+
return false;
|
|
360
|
+
const widget = findWidgetNodeByStart(selectedWidget.sourceStart, inlinesOf(node), node.raw);
|
|
361
|
+
const widgetIsHere = widget !== null && deps.widgetSelection.isSelected(deps.myPath, selectedWidget.sourceStart);
|
|
362
|
+
if (!widgetIsHere)
|
|
363
|
+
return false;
|
|
364
|
+
// The kind's editing policy claims custom keys first. Flattened so the nested image
|
|
365
|
+
// of `[![alt][ref]][repo]` is the resolved widget.
|
|
366
|
+
const inline = flattenInlineWidgets(inlinesOf(node), node.raw).find((n) => n.start === widget.start);
|
|
367
|
+
if (inline) {
|
|
368
|
+
const policy = getInlineWidgetEditing(inline.kind);
|
|
369
|
+
const consumed = policy?.onSelectedKey?.(e, {
|
|
370
|
+
node,
|
|
371
|
+
inline,
|
|
372
|
+
widgetStart: widget.start,
|
|
373
|
+
widgetEnd: widget.end,
|
|
374
|
+
index: deps.index,
|
|
375
|
+
preSelectOffset: selectedWidget.preSelectOffset,
|
|
376
|
+
editorContentWidth: deps.getEditorContentWidth(),
|
|
377
|
+
presentationMode: deps.getPresentationMode?.() ?? 'source',
|
|
378
|
+
updateContent: (newRaw, caretBefore, caretAfter) => void deps.blockEdit.updateBlockContent(deps.index, newRaw, caretBefore, caretAfter)
|
|
379
|
+
});
|
|
380
|
+
if (consumed)
|
|
381
|
+
return true;
|
|
382
|
+
}
|
|
383
|
+
// Declining hands the chord to the keymap dispatch, which sits AFTER this handler and
|
|
384
|
+
// owns undo/redo. Arrows are the exception: selecting cleared the native range, so a
|
|
385
|
+
// shared-pipeline arm would read offset 0 and move focus to a block that isn't there.
|
|
386
|
+
if (hasModifier(e)) {
|
|
387
|
+
if (!e.key.startsWith('Arrow'))
|
|
388
|
+
return false;
|
|
389
|
+
e.preventDefault();
|
|
390
|
+
return true;
|
|
391
|
+
}
|
|
392
|
+
// Swallowed even by a kind that claims no Shift+Arrow: stepping out is reserved
|
|
393
|
+
// for plain Arrow.
|
|
394
|
+
if (e.shiftKey && (e.key === 'ArrowLeft' || e.key === 'ArrowRight')) {
|
|
395
|
+
e.preventDefault();
|
|
396
|
+
return true;
|
|
397
|
+
}
|
|
398
|
+
if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
|
|
399
|
+
e.preventDefault();
|
|
400
|
+
const left = e.key === 'ArrowLeft';
|
|
401
|
+
const blankSide = left
|
|
402
|
+
? rawHasNoTextBefore(node.raw, widget.start)
|
|
403
|
+
: rawHasNoTextAfter(node.raw, widget.end);
|
|
404
|
+
if (blankSide) {
|
|
405
|
+
deps.widgetSelection.clear();
|
|
406
|
+
await deps.focusActions.moveFocus(deps.index + (left ? -1 : 1), left ? 'end' : 'start');
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
deps.cursor.setRaw(asRawOffset(left ? widget.start : widget.end));
|
|
410
|
+
deps.widgetSelection.clear();
|
|
411
|
+
}
|
|
412
|
+
return true;
|
|
413
|
+
}
|
|
414
|
+
// Reading mode still swallows — a selected widget owns its keys — but commits nothing.
|
|
415
|
+
// Undo anchored at the pre-select caret, so Ctrl+Z restores the caret where the user
|
|
416
|
+
// actually was when selection took over.
|
|
417
|
+
const spliceWidget = (text) => {
|
|
418
|
+
if (isReading())
|
|
419
|
+
return;
|
|
420
|
+
const newRaw = node.raw.slice(0, widget.start) + text + node.raw.slice(widget.end);
|
|
421
|
+
void deps.blockEdit.updateBlockContent(deps.index, newRaw, selectedWidget.preSelectOffset, widget.start + text.length);
|
|
422
|
+
deps.widgetSelection.clear();
|
|
423
|
+
};
|
|
424
|
+
if (e.key === 'Backspace' || e.key === 'Delete') {
|
|
425
|
+
e.preventDefault();
|
|
426
|
+
spliceWidget('');
|
|
427
|
+
return true;
|
|
428
|
+
}
|
|
429
|
+
if (e.key === 'Escape') {
|
|
430
|
+
e.preventDefault();
|
|
431
|
+
deps.cursor.setRaw(asRawOffset(widget.end));
|
|
432
|
+
deps.widgetSelection.clear();
|
|
433
|
+
return true;
|
|
434
|
+
}
|
|
435
|
+
if (isPlainTypingKey(e)) {
|
|
436
|
+
e.preventDefault();
|
|
437
|
+
spliceWidget(e.key);
|
|
438
|
+
return true;
|
|
439
|
+
}
|
|
440
|
+
// Every remaining key is swallowed, so navigation can't leak into the shared pipeline
|
|
441
|
+
// mid-selection. preventDefault too: reporting the key consumed stops only THIS
|
|
442
|
+
// editor's chain, and the browser's default would still mutate behind the CST.
|
|
443
|
+
e.preventDefault();
|
|
444
|
+
return true;
|
|
445
|
+
}
|
|
446
|
+
function handleShiftArrowIntoWidget(e) {
|
|
447
|
+
// While source is revealed the CST still reports an atomic island, but the DOM is
|
|
448
|
+
// editable text: let native selection run over it, not past a phantom widget.
|
|
449
|
+
if (revealState)
|
|
450
|
+
return false;
|
|
451
|
+
const el = deps.getEl();
|
|
452
|
+
if (!el)
|
|
453
|
+
return false;
|
|
454
|
+
if (!e.shiftKey || (e.key !== 'ArrowRight' && e.key !== 'ArrowLeft'))
|
|
455
|
+
return false;
|
|
456
|
+
const widgetExt = widgetExtensionTarget(e.key);
|
|
457
|
+
if (widgetExt === null)
|
|
458
|
+
return false;
|
|
459
|
+
e.preventDefault();
|
|
460
|
+
extendSelectionToRaw(widgetExt);
|
|
461
|
+
return true;
|
|
462
|
+
}
|
|
463
|
+
// The ONE seam the reveal-vs-select policy split lives at, shared by within-block caret
|
|
464
|
+
// entry and cross-block edge landing. `fromTrailingEdge` fixes both the reveal caret
|
|
465
|
+
// target and the undo / pre-select anchor.
|
|
466
|
+
function enterWidget(widget, fromTrailingEdge) {
|
|
467
|
+
const enteredOffset = fromTrailingEdge ? widget.end : widget.start;
|
|
468
|
+
if (getInlineWidgetEditing(widget.kind)?.revealSource) {
|
|
469
|
+
const atSourceOffset = fromTrailingEdge ? widget.end - widget.start : 0;
|
|
470
|
+
void startReveal(widget, enteredOffset, atSourceOffset);
|
|
471
|
+
}
|
|
472
|
+
else {
|
|
473
|
+
deps.widgetSelection.select({
|
|
474
|
+
paragraphPath: deps.myPath,
|
|
475
|
+
sourceStart: widget.start,
|
|
476
|
+
preSelectOffset: enteredOffset
|
|
477
|
+
});
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
function enterEdgeWidget(side) {
|
|
481
|
+
const inlines = inlinesOf(deps.node);
|
|
482
|
+
if (inlines.length === 0)
|
|
483
|
+
return false;
|
|
484
|
+
const target = side === 'start'
|
|
485
|
+
? findFirstEdgeWidget(inlines, deps.node.raw)
|
|
486
|
+
: findLastEdgeWidget(inlines, deps.node.raw);
|
|
487
|
+
if (!target)
|
|
488
|
+
return false;
|
|
489
|
+
// Focus the contenteditable so subsequent keys route to this block's handler.
|
|
490
|
+
deps.getEl()?.focus();
|
|
491
|
+
enterWidget(target, side === 'end');
|
|
492
|
+
return true;
|
|
493
|
+
}
|
|
494
|
+
function snapClickToWidgetEdge(clickX, clickY, press = {}) {
|
|
495
|
+
deps.setSnapTarget(null);
|
|
496
|
+
const doubleClick = (press.clickCount ?? 1) >= 2;
|
|
497
|
+
// Every double-click opens with a click of its own, so the opening click is where the
|
|
498
|
+
// flag is armed and the flag from any earlier gesture is dropped.
|
|
499
|
+
if (!doubleClick)
|
|
500
|
+
revealOpenedByLastClick = false;
|
|
501
|
+
const el = deps.getEl();
|
|
502
|
+
if (!el || clickX === null)
|
|
503
|
+
return;
|
|
504
|
+
// The point-in-rect test runs BEFORE the text-node guard below, so a column-aligned
|
|
505
|
+
// click on real text on another visual line falls through to the caret path.
|
|
506
|
+
if (clickY !== null) {
|
|
507
|
+
const hit = hitTestRevealWidget(el, clickX, clickY);
|
|
508
|
+
if (hit) {
|
|
509
|
+
// Returns rather than falls through: the edge-snap below would focus this block and
|
|
510
|
+
// place a caret, stealing back what the widget's own navigation just landed.
|
|
511
|
+
if (getInlineWidgetEditing(hit.inline.kind)?.claimsActivationClick &&
|
|
512
|
+
isWidgetActivationClick(press.modified ?? false, deps.getPresentationMode?.() ?? 'source')) {
|
|
513
|
+
return;
|
|
514
|
+
}
|
|
515
|
+
void revealFromClick(clickX, clickY);
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
// The first click of a double-click already revealed, so the second lands in the source
|
|
520
|
+
// text and the browser's word rule takes `[` or `$` as a word of its own.
|
|
521
|
+
if (doubleClick && revealOpenedByLastClick && selectRevealedSource())
|
|
522
|
+
return;
|
|
523
|
+
// A click in a real text node keeps the native caret; a synthetic overlay would compete.
|
|
524
|
+
if (caretIsInTextContent(el, window.getSelection()))
|
|
525
|
+
return;
|
|
526
|
+
for (const inline of inlinesOf(deps.node)) {
|
|
527
|
+
if (!isInlineWidget(inline, deps.node.raw))
|
|
528
|
+
continue;
|
|
529
|
+
const widget = widgetElByStart(el, inline.start);
|
|
530
|
+
if (!widget)
|
|
531
|
+
continue;
|
|
532
|
+
const rect = widget.getBoundingClientRect();
|
|
533
|
+
const snapTo = clickX > rect.right ? inline.end : clickX < rect.left ? inline.start : null;
|
|
534
|
+
if (snapTo === null)
|
|
535
|
+
continue;
|
|
536
|
+
el.focus();
|
|
537
|
+
deps.cursor.setRaw(asRawOffset(snapTo));
|
|
538
|
+
// `setRaw`'s walker may have landed in a trailing text node, where native renders.
|
|
539
|
+
if (!caretIsInTextContent(el, window.getSelection())) {
|
|
540
|
+
deps.setSnapTarget(snapTo);
|
|
541
|
+
}
|
|
542
|
+
return;
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
function widgetExtensionTarget(key) {
|
|
546
|
+
const el = deps.getEl();
|
|
547
|
+
if (!el)
|
|
548
|
+
return null;
|
|
549
|
+
const focus = selectionFocusWalkOffset(el, deps.getAmbientLength());
|
|
550
|
+
if (focus === null)
|
|
551
|
+
return null;
|
|
552
|
+
for (const inline of inlinesOf(deps.node)) {
|
|
553
|
+
if (!isInlineWidget(inline, deps.node.raw))
|
|
554
|
+
continue;
|
|
555
|
+
if (key === 'ArrowRight' && focus >= inline.start && focus < inline.end) {
|
|
556
|
+
return inline.end;
|
|
557
|
+
}
|
|
558
|
+
if (key === 'ArrowLeft' && focus > inline.start && focus <= inline.end) {
|
|
559
|
+
return inline.start;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
return null;
|
|
563
|
+
}
|
|
564
|
+
function extendSelectionToRaw(rawOffset) {
|
|
565
|
+
const el = deps.getEl();
|
|
566
|
+
if (!el)
|
|
567
|
+
return;
|
|
568
|
+
const sel = window.getSelection();
|
|
569
|
+
if (!sel || sel.rangeCount === 0)
|
|
570
|
+
return;
|
|
571
|
+
const target = toDomTextOffset(asRawOffset(rawOffset), deps.getAmbientLength());
|
|
572
|
+
const range = createRangeAtDomTextOffsets(el, target, target);
|
|
573
|
+
if (!range)
|
|
574
|
+
return;
|
|
575
|
+
sel.extend(range.endContainer, range.endOffset);
|
|
576
|
+
}
|
|
577
|
+
return {
|
|
578
|
+
isVerticallyTransparent,
|
|
579
|
+
handleSelectedWidgetKeydown,
|
|
580
|
+
handleShiftArrowIntoWidget,
|
|
581
|
+
enterWidget,
|
|
582
|
+
enterEdgeWidget,
|
|
583
|
+
snapClickToWidgetEdge,
|
|
584
|
+
isRevealing,
|
|
585
|
+
handleRevealingKeydown,
|
|
586
|
+
commitRevealOnBlur,
|
|
587
|
+
foldRevealBeforeMutation,
|
|
588
|
+
foldRevealIfSelectionEscaped,
|
|
589
|
+
isPointOnRevealWidget
|
|
590
|
+
};
|
|
591
|
+
}
|