@voithos-labs/aragonite 0.10.3 → 0.10.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/a11y-strings.d.ts +12 -5
- package/dist/a11y-strings.js +61 -5
- package/dist/action-contracts.d.ts +242 -155
- package/dist/action-contracts.js +2 -2
- package/dist/active-editor.d.ts +3 -3
- package/dist/active-editor.js +8 -9
- package/dist/ambient/ambient-dom.d.ts +2 -5
- package/dist/ambient/ambient-dom.js +16 -62
- package/dist/assert.js +6 -5
- package/dist/block-component.d.ts +135 -109
- package/dist/block-component.js +30 -22
- package/dist/block-id.d.ts +6 -10
- package/dist/block-id.js +25 -14
- package/dist/bounded-memo.d.ts +5 -5
- package/dist/bounded-memo.js +6 -6
- package/dist/components/BlockDragHandle.svelte +13 -20
- package/dist/components/BlockHost.svelte +56 -134
- package/dist/components/BlockList.svelte +22 -19
- package/dist/components/DecorationOverlay.svelte +9 -10
- package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
- package/dist/components/Editor.svelte +619 -1089
- package/dist/components/Editor.svelte.d.ts +9 -20
- package/dist/components/GapCaret.svelte +26 -59
- package/dist/components/SelectionOverlay.svelte +36 -67
- package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
- package/dist/components/TailInsert.svelte +8 -55
- package/dist/components/TailInsert.svelte.d.ts +4 -6
- package/dist/components/block-content-selector.d.ts +11 -11
- package/dist/components/block-content-selector.js +11 -11
- package/dist/components/block-el-lookup.d.ts +6 -0
- package/dist/components/block-el-lookup.js +27 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
- package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
- package/dist/components/blocks/code/CodeBlock.svelte +255 -276
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
- package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
- package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
- package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
- package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
- package/dist/components/blocks/code/code-bootstrap.js +35 -28
- package/dist/components/blocks/code/code-context-actions.js +5 -4
- package/dist/components/blocks/code/code-enter.js +2 -2
- package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
- package/dist/components/blocks/code/code-fence-boundary.js +40 -66
- package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
- package/dist/components/blocks/code/code-fence-exit.js +24 -25
- package/dist/components/blocks/code/code-indent.d.ts +2 -2
- package/dist/components/blocks/code/code-indent.js +4 -7
- package/dist/components/blocks/code/code-languages.d.ts +16 -12
- package/dist/components/blocks/code/code-languages.js +58 -32
- package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
- package/dist/components/blocks/code/code-paste-surface.js +9 -18
- package/dist/components/blocks/code/code-renderer.d.ts +21 -5
- package/dist/components/blocks/code/code-renderer.js +90 -125
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
- package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
- package/dist/components/blocks/directive/activate-directives.js +18 -13
- package/dist/components/blocks/editable-leaf.d.ts +50 -74
- package/dist/components/blocks/editable-leaf.js +144 -202
- package/dist/components/blocks/editable-surface.d.ts +96 -100
- package/dist/components/blocks/editable-surface.js +101 -109
- package/dist/components/blocks/list/ListBlock.svelte +46 -90
- package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
- package/dist/components/blocks/list/task-checkbox.js +12 -7
- package/dist/components/blocks/plain-text-backend.d.ts +4 -20
- package/dist/components/blocks/plain-text-backend.js +9 -43
- package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
- package/dist/components/blocks/surface-wiring.svelte.js +15 -34
- package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
- package/dist/components/blocks/table/TableBlock.svelte +100 -165
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
- package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
- package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
- package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
- package/dist/components/blocks/table/cell-pointer.js +49 -71
- package/dist/components/blocks/table/cell-render.d.ts +24 -29
- package/dist/components/blocks/table/cell-render.js +29 -31
- package/dist/components/blocks/table/selected-cells.d.ts +7 -7
- package/dist/components/blocks/table/selected-cells.js +9 -13
- package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
- package/dist/components/blocks/table/table-caret-at-point.js +5 -5
- package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
- package/dist/components/blocks/table/table-cell-paste.js +27 -43
- package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
- package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
- package/dist/components/blocks/table/table-menu-model.js +6 -10
- package/dist/components/blocks/table/table-navigation.js +2 -2
- package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
- package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
- package/dist/components/blocks/text/auto-pair-record.js +51 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
- package/dist/components/blocks/text/click-snap-guard.js +16 -5
- package/dist/components/blocks/text/composition-seat.d.ts +17 -14
- package/dist/components/blocks/text/composition-seat.js +11 -11
- package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
- package/dist/components/blocks/text/construct-edge-delete.js +50 -65
- package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
- package/dist/components/blocks/text/construct-reveal.js +13 -14
- package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
- package/dist/components/blocks/text/delimiter-autopair.js +87 -103
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
- package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
- package/dist/components/blocks/text/edge-seat.d.ts +17 -26
- package/dist/components/blocks/text/edge-seat.js +43 -70
- package/dist/components/blocks/text/link-at-point.d.ts +9 -9
- package/dist/components/blocks/text/link-at-point.js +12 -15
- package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
- package/dist/components/blocks/text/live-join-seam.js +75 -112
- package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
- package/dist/components/blocks/text/live-selection-edit.js +32 -105
- package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
- package/dist/components/blocks/text/live-split-rebalance.js +50 -67
- package/dist/components/blocks/text/marker-completion.d.ts +7 -12
- package/dist/components/blocks/text/marker-completion.js +17 -10
- package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
- package/dist/components/blocks/text/pending-mark-insert.js +30 -49
- package/dist/components/blocks/text/screen-diff.d.ts +5 -15
- package/dist/components/blocks/text/screen-diff.js +5 -19
- package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
- package/dist/components/blocks/text/text-clipboard.js +27 -32
- package/dist/components/blocks/text/text-keydown.d.ts +20 -30
- package/dist/components/blocks/text/text-keydown.js +54 -51
- package/dist/components/blocks/text/text-render.d.ts +25 -35
- package/dist/components/blocks/text/text-render.js +82 -61
- package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
- package/dist/components/blocks/text/widget-adjacency.js +17 -17
- package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
- package/dist/components/blocks/text/widget-interaction.js +243 -208
- package/dist/components/blocks/widget-portal.d.ts +20 -29
- package/dist/components/blocks/widget-portal.js +16 -14
- package/dist/components/built-in-blocks.d.ts +3 -4
- package/dist/components/built-in-blocks.js +17 -18
- package/dist/components/drag-handle.d.ts +13 -30
- package/dist/components/drag-handle.js +25 -63
- package/dist/components/editor-built-ins.d.ts +1 -0
- package/dist/components/editor-built-ins.js +16 -0
- package/dist/components/editor-root-clipboard.d.ts +6 -6
- package/dist/components/editor-root-clipboard.js +16 -27
- package/dist/components/editor-root-document-swap.d.ts +49 -0
- package/dist/components/editor-root-document-swap.js +54 -0
- package/dist/components/editor-root-focus.d.ts +5 -4
- package/dist/components/editor-root-focus.js +51 -22
- package/dist/components/editor-root-focused-surface.d.ts +35 -0
- package/dist/components/editor-root-focused-surface.js +65 -0
- package/dist/components/editor-root-geometry.d.ts +15 -24
- package/dist/components/editor-root-geometry.js +27 -31
- package/dist/components/editor-root-gestures.d.ts +39 -0
- package/dist/components/editor-root-gestures.js +189 -0
- package/dist/components/editor-root-keydown.d.ts +10 -25
- package/dist/components/editor-root-keydown.js +19 -43
- package/dist/components/editor-root-listeners.d.ts +22 -31
- package/dist/components/editor-root-listeners.js +49 -46
- package/dist/components/editor-root-menus.d.ts +51 -0
- package/dist/components/editor-root-menus.js +147 -0
- package/dist/components/editor-root-mode-flip.d.ts +16 -11
- package/dist/components/editor-root-mode-flip.js +36 -34
- package/dist/components/editor-root-scroll-host.d.ts +22 -0
- package/dist/components/editor-root-scroll-host.js +34 -0
- package/dist/components/editor-root-test-surface.d.ts +48 -0
- package/dist/components/editor-root-test-surface.js +6 -0
- package/dist/components/image/ImageOverlayHost.svelte +44 -35
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
- package/dist/components/image/ImageProperties.svelte +37 -41
- package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
- package/dist/components/image/ImageResizeHandles.svelte +26 -30
- package/dist/components/image/image-crop.d.ts +5 -11
- package/dist/components/image/image-crop.js +5 -11
- package/dist/components/image/image-edit-commit.d.ts +19 -16
- package/dist/components/image/image-edit-commit.js +74 -38
- package/dist/components/image/image-resize.d.ts +2 -5
- package/dist/components/image/image-resize.js +3 -6
- package/dist/components/image/image-widget-editing.d.ts +3 -3
- package/dist/components/image/image-widget-editing.js +9 -9
- package/dist/components/image/widget-dom.d.ts +2 -3
- package/dist/components/image/widget-dom.js +19 -24
- package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
- package/dist/components/image/widget-selection-state.svelte.js +26 -19
- package/dist/components/kind-cue.svelte.d.ts +21 -0
- package/dist/components/kind-cue.svelte.js +35 -0
- package/dist/components/link-card/LinkCard.svelte +115 -64
- package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
- package/dist/components/link-card/LinkCardHost.svelte +42 -33
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
- package/dist/components/link-card/link-card-commit.d.ts +16 -19
- package/dist/components/link-card/link-card-commit.js +21 -30
- package/dist/components/link-card/link-card-entry.d.ts +13 -23
- package/dist/components/link-card/link-card-entry.js +16 -24
- package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
- package/dist/components/link-card/link-card-state.svelte.js +2 -2
- package/dist/components/lrd-map-gate.d.ts +4 -11
- package/dist/components/lrd-map-gate.js +5 -11
- package/dist/components/menu/BlockMenu.svelte +20 -81
- package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
- package/dist/components/menu/InlineMenuHost.svelte +191 -0
- package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
- package/dist/components/menu/MenuIcon.svelte +3 -103
- package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
- package/dist/components/menu/SelectionToolbar.svelte +380 -0
- package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
- package/dist/components/menu/clipboard-actions.d.ts +3 -4
- package/dist/components/menu/clipboard-actions.js +3 -4
- package/dist/components/menu/default-context-actions.d.ts +4 -13
- package/dist/components/menu/default-context-actions.js +49 -67
- package/dist/components/menu/flyout-placement.d.ts +2 -2
- package/dist/components/menu/flyout-placement.js +2 -2
- package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
- package/dist/components/menu/menu-presence.svelte.js +19 -0
- package/dist/components/paste-image-arm.d.ts +6 -11
- package/dist/components/paste-image-arm.js +11 -18
- package/dist/components/portal.d.ts +2 -5
- package/dist/components/portal.js +4 -7
- package/dist/core/directive/activate.d.ts +4 -5
- package/dist/core/directive/activate.js +8 -9
- package/dist/core/directive/container-opener.js +13 -12
- package/dist/core/directive/grammar.d.ts +2 -5
- package/dist/core/directive/grammar.js +10 -10
- package/dist/core/directive/kinds.d.ts +4 -7
- package/dist/core/directive/kinds.js +14 -16
- package/dist/core/directive/registry.d.ts +12 -9
- package/dist/core/directive/registry.js +19 -20
- package/dist/core/directive/text-recognizer.d.ts +3 -2
- package/dist/core/directive/text-recognizer.js +5 -9
- package/dist/core/escapable.d.ts +1 -5
- package/dist/core/escapable.js +1 -5
- package/dist/core/inline/backticks.d.ts +3 -4
- package/dist/core/inline/backticks.js +3 -4
- package/dist/core/inline/character-refs.js +2 -1
- package/dist/core/inline/destination-bytes.d.ts +6 -3
- package/dist/core/inline/destination-bytes.js +50 -8
- package/dist/core/inline/entity-widget.d.ts +4 -3
- package/dist/core/inline/entity-widget.js +6 -6
- package/dist/core/inline/format-toggle.d.ts +22 -28
- package/dist/core/inline/format-toggle.js +97 -129
- package/dist/core/inline/html-entities.d.ts +2 -3
- package/dist/core/inline/html-entities.js +2 -3
- package/dist/core/inline/html-tag-grammar.js +6 -2
- package/dist/core/inline/image-dimensions.d.ts +2 -0
- package/dist/core/inline/image-dimensions.js +19 -2
- package/dist/core/inline/image-source-bytes.d.ts +11 -0
- package/dist/core/inline/image-source-bytes.js +71 -0
- package/dist/core/inline/index.d.ts +28 -21
- package/dist/core/inline/index.js +56 -34
- package/dist/core/inline/inline-cache.d.ts +12 -15
- package/dist/core/inline/inline-cache.js +11 -14
- package/dist/core/inline/inline-widgets.d.ts +55 -68
- package/dist/core/inline/inline-widgets.js +55 -58
- package/dist/core/inline/link-destination.d.ts +31 -0
- package/dist/core/inline/link-destination.js +129 -0
- package/dist/core/inline/link-reference-resolver.d.ts +8 -6
- package/dist/core/inline/link-reference-resolver.js +10 -6
- package/dist/core/inline/link-source-bytes.d.ts +31 -0
- package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
- package/dist/core/inline/live-edit/read-back.d.ts +29 -0
- package/dist/core/inline/live-edit/read-back.js +50 -0
- package/dist/core/inline/picture.d.ts +10 -0
- package/dist/core/inline/picture.js +40 -0
- package/dist/core/inline/scan/autolinks.d.ts +7 -8
- package/dist/core/inline/scan/autolinks.js +80 -59
- package/dist/core/inline/scan/brackets.d.ts +2 -2
- package/dist/core/inline/scan/brackets.js +6 -103
- package/dist/core/inline/scan/code-spans.d.ts +4 -0
- package/dist/core/inline/scan/code-spans.js +8 -0
- package/dist/core/inline/scan/emphasis.js +10 -14
- package/dist/core/inline/scan/index.d.ts +3 -1
- package/dist/core/inline/scan/index.js +32 -33
- package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
- package/dist/core/inline/scan/plugin-syntax.js +75 -89
- package/dist/core/inline/scan/scan-state.d.ts +2 -0
- package/dist/core/inline/scan/scan-state.js +1 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
- package/dist/core/inline/scan/simple-nodes.js +2 -5
- package/dist/core/inline/scan/triggers.d.ts +17 -0
- package/dist/core/inline/scan/triggers.js +26 -0
- package/dist/core/inline/scan/url.js +8 -10
- package/dist/core/inline/transparency.d.ts +2 -1
- package/dist/core/inline/transparency.js +33 -17
- package/dist/core/inline/visibility.d.ts +30 -49
- package/dist/core/inline/visibility.js +31 -49
- package/dist/core/inline/walk.d.ts +4 -10
- package/dist/core/inline/walk.js +4 -10
- package/dist/core/inline-render.d.ts +22 -27
- package/dist/core/inline-render.js +51 -60
- package/dist/core/lines.d.ts +67 -26
- package/dist/core/lines.js +164 -33
- package/dist/core/metadata-parity.d.ts +9 -0
- package/dist/core/metadata-parity.js +25 -0
- package/dist/core/node-views.d.ts +7 -6
- package/dist/core/node-views.js +5 -5
- package/dist/core/nodes.d.ts +34 -44
- package/dist/core/nodes.js +4 -12
- package/dist/core/parser.d.ts +27 -34
- package/dist/core/parser.js +53 -67
- package/dist/core/parsers/blockquote.d.ts +5 -8
- package/dist/core/parsers/blockquote.js +11 -10
- package/dist/core/parsers/built-in-openers.d.ts +2 -5
- package/dist/core/parsers/built-in-openers.js +5 -8
- package/dist/core/parsers/fence-syntax.d.ts +36 -7
- package/dist/core/parsers/fence-syntax.js +61 -11
- package/dist/core/parsers/fenced-code.d.ts +16 -0
- package/dist/core/parsers/fenced-code.js +16 -15
- package/dist/core/parsers/heading.d.ts +19 -2
- package/dist/core/parsers/heading.js +50 -2
- package/dist/core/parsers/html-block.d.ts +3 -6
- package/dist/core/parsers/html-block.js +10 -11
- package/dist/core/parsers/indented-code.d.ts +1 -1
- package/dist/core/parsers/indented-code.js +2 -8
- package/dist/core/parsers/link-reference.d.ts +5 -3
- package/dist/core/parsers/link-reference.js +116 -120
- package/dist/core/parsers/list.d.ts +12 -5
- package/dist/core/parsers/list.js +53 -36
- package/dist/core/parsers/paragraph.d.ts +3 -3
- package/dist/core/parsers/paragraph.js +14 -5
- package/dist/core/parsers/table-completion.d.ts +2 -5
- package/dist/core/parsers/table-completion.js +7 -10
- package/dist/core/parsers/table.d.ts +8 -8
- package/dist/core/parsers/table.js +23 -26
- package/dist/core/parsers/thematic-break.js +15 -14
- package/dist/core/paths.d.ts +13 -0
- package/dist/core/paths.js +31 -0
- package/dist/core/terminator-escalation.d.ts +0 -7
- package/dist/core/terminator-escalation.js +5 -8
- package/dist/core/url-policy.d.ts +2 -5
- package/dist/core/url-policy.js +8 -12
- package/dist/cursor/caret-memory.d.ts +34 -0
- package/dist/cursor/caret-memory.js +82 -0
- package/dist/cursor/coordinate-spaces.d.ts +26 -19
- package/dist/cursor/coordinate-spaces.js +32 -20
- package/dist/cursor/dom-walk.d.ts +7 -13
- package/dist/cursor/dom-walk.js +7 -13
- package/dist/cursor/edge-affinity.d.ts +7 -35
- package/dist/cursor/edge-affinity.js +13 -44
- package/dist/cursor/focused-caret.d.ts +6 -8
- package/dist/cursor/focused-caret.js +7 -16
- package/dist/cursor/height-model.d.ts +3 -3
- package/dist/cursor/height-model.js +5 -5
- package/dist/cursor/height-oracle.d.ts +10 -7
- package/dist/cursor/height-oracle.js +26 -75
- package/dist/cursor/observe-resize.d.ts +13 -0
- package/dist/cursor/observe-resize.js +43 -0
- package/dist/cursor/overlay-rects.d.ts +2 -5
- package/dist/cursor/overlay-rects.js +2 -5
- package/dist/cursor/overlay-remeasure.d.ts +6 -7
- package/dist/cursor/overlay-remeasure.js +10 -14
- package/dist/cursor/pending-marks.d.ts +7 -9
- package/dist/cursor/pending-marks.js +6 -27
- package/dist/cursor/point-offset.d.ts +16 -10
- package/dist/cursor/point-offset.js +60 -25
- package/dist/cursor/reveal-source.d.ts +7 -11
- package/dist/cursor/reveal-source.js +10 -18
- package/dist/cursor/scroll-ancestors.d.ts +9 -20
- package/dist/cursor/scroll-ancestors.js +14 -26
- package/dist/cursor/scroll-owner.d.ts +92 -0
- package/dist/cursor/scroll-owner.js +283 -0
- package/dist/cursor/scrollport.d.ts +16 -8
- package/dist/cursor/scrollport.js +28 -5
- package/dist/cursor/sticky-column.d.ts +6 -29
- package/dist/cursor/sticky-column.js +6 -49
- package/dist/cursor/sticky-measure.d.ts +14 -9
- package/dist/cursor/sticky-measure.js +99 -49
- package/dist/cursor/surface-backend.d.ts +41 -0
- package/dist/cursor/surface-backend.js +78 -0
- package/dist/cursor/typography-estimates.d.ts +3 -3
- package/dist/cursor/typography-estimates.js +3 -3
- package/dist/cursor/visual-lines.d.ts +25 -13
- package/dist/cursor/visual-lines.js +72 -28
- package/dist/cursor/widget-edge-snap.d.ts +23 -0
- package/dist/cursor/widget-edge-snap.js +39 -0
- package/dist/cursor/widget-offset.d.ts +111 -102
- package/dist/cursor/widget-offset.js +352 -177
- package/dist/debug/diagnostics-report.d.ts +6 -6
- package/dist/debug/diagnostics-report.js +5 -5
- package/dist/debug/dump-tree.js +2 -2
- package/dist/debug/editor-diagnostics.d.ts +15 -0
- package/dist/debug/editor-diagnostics.js +33 -0
- package/dist/debug/inspect.d.ts +2 -2
- package/dist/debug/inspect.js +4 -4
- package/dist/debug/interaction-trace.d.ts +14 -15
- package/dist/debug/interaction-trace.js +19 -20
- package/dist/debug/operations-log.d.ts +1 -1
- package/dist/debug/operations-log.js +1 -1
- package/dist/decorations/buckets.d.ts +6 -12
- package/dist/decorations/buckets.js +4 -11
- package/dist/decorations/decoration-state.svelte.d.ts +2 -3
- package/dist/decorations/decoration-state.svelte.js +24 -26
- package/dist/decorations/island-dom.d.ts +10 -18
- package/dist/decorations/island-dom.js +25 -50
- package/dist/decorations/reserved-attrs.d.ts +6 -8
- package/dist/decorations/reserved-attrs.js +31 -17
- package/dist/decorations/types.d.ts +6 -7
- package/dist/decorations/types.js +2 -1
- package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
- package/dist/decorations/use-block-decorations.svelte.js +71 -0
- package/dist/decorations/widget-dom.d.ts +3 -3
- package/dist/decorations/widget-dom.js +5 -5
- package/dist/dev-warn.d.ts +5 -2
- package/dist/dev-warn.js +16 -4
- package/dist/editor-actions/ancestry-folds.d.ts +9 -14
- package/dist/editor-actions/ancestry-folds.js +13 -18
- package/dist/editor-actions/block-edit-core.d.ts +49 -22
- package/dist/editor-actions/block-edit-core.js +279 -151
- package/dist/editor-actions/block-edit-scope.d.ts +63 -50
- package/dist/editor-actions/block-edit-scope.js +100 -48
- package/dist/editor-actions/block-edit.d.ts +2 -3
- package/dist/editor-actions/block-edit.js +14 -90
- package/dist/editor-actions/commit/history.d.ts +4 -4
- package/dist/editor-actions/commit/history.js +33 -34
- package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
- package/dist/editor-actions/commit/reading-write-gate.js +56 -0
- package/dist/editor-actions/commit/text-batch.d.ts +7 -11
- package/dist/editor-actions/commit/text-batch.js +6 -7
- package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
- package/dist/editor-actions/commit/undo-controller.js +346 -216
- package/dist/editor-actions/container-block-component.d.ts +32 -51
- package/dist/editor-actions/container-block-component.js +66 -92
- package/dist/editor-actions/container-edit.d.ts +4 -2
- package/dist/editor-actions/container-edit.js +14 -44
- package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
- package/dist/editor-actions/container-exit-overrides.js +19 -21
- package/dist/editor-actions/deps.d.ts +25 -32
- package/dist/editor-actions/enter-completion.d.ts +12 -15
- package/dist/editor-actions/enter-completion.js +49 -51
- package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
- package/dist/editor-actions/focus/focus-dispatch.js +33 -52
- package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
- package/dist/editor-actions/focus/focus-landing.js +29 -14
- package/dist/editor-actions/focus/focus.d.ts +3 -2
- package/dist/editor-actions/focus/focus.js +42 -59
- package/dist/editor-actions/index.d.ts +4 -3
- package/dist/editor-actions/index.js +5 -4
- package/dist/editor-actions/inline-range-commit.d.ts +18 -16
- package/dist/editor-actions/inline-range-commit.js +45 -54
- package/dist/editor-actions/leaf-write.d.ts +11 -0
- package/dist/editor-actions/leaf-write.js +102 -0
- package/dist/editor-actions/list-context.d.ts +9 -10
- package/dist/editor-actions/list-context.js +115 -110
- package/dist/editor-actions/list-overrides.d.ts +13 -5
- package/dist/editor-actions/list-overrides.js +36 -12
- package/dist/editor-actions/merge-fallback.d.ts +10 -16
- package/dist/editor-actions/merge-fallback.js +11 -22
- package/dist/editor-actions/nested/container-actions.d.ts +37 -0
- package/dist/editor-actions/nested/container-actions.js +42 -0
- package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
- package/dist/editor-actions/nested/emptied-container.js +5 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
- package/dist/editor-actions/nested/nested-actions.js +17 -15
- package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
- package/dist/editor-actions/nested/nested-block-edit.js +40 -134
- package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
- package/dist/editor-actions/nested/nested-focus.js +33 -21
- package/dist/editor-actions/paste-coordinator.d.ts +3 -2
- package/dist/editor-actions/paste-coordinator.js +17 -13
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
- package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
- package/dist/editor-actions/plugin/container.d.ts +55 -76
- package/dist/editor-actions/plugin/container.js +105 -186
- package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
- package/dist/editor-actions/plugin/directive-container.js +7 -8
- package/dist/editor-actions/reorder-action.d.ts +7 -12
- package/dist/editor-actions/reorder-action.js +32 -48
- package/dist/editor-actions/reorder-drag.d.ts +12 -8
- package/dist/editor-actions/reorder-drag.js +45 -41
- package/dist/editor-actions/replacement-focus.d.ts +13 -21
- package/dist/editor-actions/replacement-focus.js +32 -33
- package/dist/editor-actions/search-replace.js +71 -67
- package/dist/editor-actions/stored-caret.d.ts +7 -0
- package/dist/editor-actions/stored-caret.js +10 -0
- package/dist/editor-actions/table-context.d.ts +9 -11
- package/dist/editor-actions/table-context.js +70 -93
- package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
- package/dist/editor-actions/unwrap-strategies.js +52 -63
- package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
- package/dist/editor-actions/whole-block-focus-surface.js +43 -53
- package/dist/editor-events.d.ts +25 -29
- package/dist/editor-events.js +17 -28
- package/dist/editor-keys.d.ts +96 -104
- package/dist/editor-keys.js +11 -24
- package/dist/editor-props.d.ts +91 -71
- package/dist/editor-rects.d.ts +23 -34
- package/dist/editor-rects.js +9 -77
- package/dist/env.d.ts +6 -4
- package/dist/env.js +8 -4
- package/dist/index.d.ts +6 -2
- package/dist/index.js +5 -2
- package/dist/inline-menu/inline-menu-session.d.ts +37 -0
- package/dist/inline-menu/inline-menu-session.js +98 -0
- package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
- package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
- package/dist/inline-menu/types.d.ts +77 -0
- package/dist/inline-menu/types.js +7 -0
- package/dist/invariants/child-id-parity.d.ts +23 -0
- package/dist/invariants/child-id-parity.js +39 -0
- package/dist/invariants/commit-paths.d.ts +4 -4
- package/dist/invariants/commit-paths.js +4 -4
- package/dist/invariants/commit-scope.d.ts +4 -4
- package/dist/invariants/commit-scope.js +9 -8
- package/dist/invariants/context-keys.d.ts +2 -5
- package/dist/invariants/context-keys.js +3 -6
- package/dist/invariants/descriptor.d.ts +2 -6
- package/dist/invariants/descriptor.js +2 -6
- package/dist/invariants/inline-transitions.d.ts +9 -16
- package/dist/invariants/inline-transitions.js +10 -18
- package/dist/invariants/install.d.ts +18 -27
- package/dist/invariants/install.js +29 -30
- package/dist/invariants/keeps-a-block.d.ts +7 -0
- package/dist/invariants/keeps-a-block.js +14 -0
- package/dist/invariants/landable-caret.d.ts +5 -7
- package/dist/invariants/landable-caret.js +8 -11
- package/dist/invariants/landing-focus-scroll.d.ts +7 -0
- package/dist/invariants/landing-focus-scroll.js +13 -0
- package/dist/invariants/landing-value.d.ts +13 -0
- package/dist/invariants/landing-value.js +27 -0
- package/dist/invariants/marker-css-parity.d.ts +5 -6
- package/dist/invariants/marker-css-parity.js +11 -12
- package/dist/invariants/measures-in-own-list.d.ts +6 -0
- package/dist/invariants/measures-in-own-list.js +13 -0
- package/dist/invariants/node-shape.d.ts +18 -37
- package/dist/invariants/node-shape.js +123 -79
- package/dist/invariants/open-tail.d.ts +7 -0
- package/dist/invariants/open-tail.js +45 -0
- package/dist/invariants/placement-ends-widget.d.ts +8 -0
- package/dist/invariants/placement-ends-widget.js +13 -0
- package/dist/invariants/registry.d.ts +27 -66
- package/dist/invariants/registry.js +61 -137
- package/dist/invariants/render-fidelity.d.ts +4 -4
- package/dist/invariants/render-fidelity.js +5 -5
- package/dist/invariants/selection-endpoints.d.ts +6 -7
- package/dist/invariants/selection-endpoints.js +18 -16
- package/dist/invariants/single-node-sink.d.ts +4 -5
- package/dist/invariants/single-node-sink.js +4 -5
- package/dist/invariants/snapshot-integrity.d.ts +5 -6
- package/dist/invariants/snapshot-integrity.js +1 -1
- package/dist/invariants/structural-descriptor.d.ts +6 -15
- package/dist/invariants/structural-descriptor.js +6 -15
- package/dist/menu-icons.d.ts +47 -0
- package/dist/menu-icons.js +113 -0
- package/dist/perf/instruments.d.ts +20 -5
- package/dist/perf/instruments.js +35 -15
- package/dist/perf/use-mount-gauge.svelte.js +4 -4
- package/dist/plugin.d.ts +38 -8
- package/dist/plugin.js +102 -74
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
- package/dist/plugins/admonitions/admonition-kind.js +12 -10
- package/dist/plugins/admonitions/convert-document.d.ts +5 -5
- package/dist/plugins/admonitions/convert-document.js +8 -7
- package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
- package/dist/plugins/admonitions/gh-alert.js +21 -22
- package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
- package/dist/plugins/admonitions/github-alert-kind.js +28 -37
- package/dist/plugins/admonitions/index.js +2 -2
- package/dist/plugins/admonitions/kinds.d.ts +1 -1
- package/dist/plugins/admonitions/register.js +11 -2
- package/dist/plugins/details/DetailsBlock.svelte +20 -20
- package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
- package/dist/plugins/details/details-disclosure.svelte.js +6 -7
- package/dist/plugins/details/details-kind.d.ts +6 -7
- package/dist/plugins/details/details-kind.js +44 -59
- package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
- package/dist/plugins/emoji/emoji-recognizer.js +7 -14
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
- package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +3 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
- package/dist/plugins/footnotes/footnote-definition.js +69 -45
- package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
- package/dist/plugins/footnotes/footnote-lookup.js +14 -26
- package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
- package/dist/plugins/footnotes/footnote-numbering.js +22 -31
- package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
- package/dist/plugins/footnotes/footnote-reference.js +8 -13
- package/dist/plugins/footnotes/index.js +2 -3
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
- package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
- package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
- package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/word-char.js +4 -0
- package/dist/plugins/latex/BlockMath.svelte +58 -75
- package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
- package/dist/plugins/latex/MathInline.svelte +10 -9
- package/dist/plugins/latex/flanking.d.ts +1 -0
- package/dist/plugins/latex/flanking.js +3 -0
- package/dist/plugins/latex/index.d.ts +1 -1
- package/dist/plugins/latex/latex-kind.d.ts +4 -4
- package/dist/plugins/latex/latex-kind.js +113 -85
- package/dist/plugins/latex/math-completion.d.ts +1 -1
- package/dist/plugins/latex/math-completion.js +5 -8
- package/dist/plugins/latex/math-layout.d.ts +2 -8
- package/dist/plugins/latex/math-layout.js +0 -9
- package/dist/plugins/latex/math-renderer.d.ts +17 -20
- package/dist/plugins/latex/math-renderer.js +21 -38
- package/dist/plugins/latex/math-source.d.ts +4 -8
- package/dist/plugins/latex/math-source.js +36 -75
- package/dist/plugins/latex/register.d.ts +10 -11
- package/dist/plugins/latex/register.js +24 -10
- package/dist/plugins/latex/renderer.d.ts +9 -10
- package/dist/plugins/latex/renderer.js +9 -24
- package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
- package/dist/plugins/mermaid/index.js +1 -1
- package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
- package/dist/plugins/mermaid/mermaid-kind.js +30 -47
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
- package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
- package/dist/plugins/mermaid/register.d.ts +3 -3
- package/dist/plugins/mermaid/register.js +5 -5
- package/dist/plugins/mermaid/renderer.d.ts +5 -5
- package/dist/plugins/mermaid/renderer.js +8 -11
- package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
- package/dist/plugins/parrot/parrot-plugin.js +3 -3
- package/dist/plugins/slash-commands/filter.d.ts +23 -0
- package/dist/plugins/slash-commands/filter.js +31 -0
- package/dist/plugins/slash-commands/index.d.ts +2 -0
- package/dist/plugins/slash-commands/index.js +2 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
- package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
- package/dist/plugins/slash-commands/slash-source.js +108 -0
- package/dist/plugins/toc/TocBlock.svelte +23 -22
- package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
- package/dist/plugins/toc/heading-outline.d.ts +7 -12
- package/dist/plugins/toc/heading-outline.js +22 -36
- package/dist/plugins/toc/navigation-queue.d.ts +2 -4
- package/dist/plugins/toc/toc-plugin.d.ts +5 -5
- package/dist/plugins/toc/toc-plugin.js +20 -13
- package/dist/presentation-mode.d.ts +15 -23
- package/dist/presentation-mode.js +19 -25
- package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
- package/dist/reactivity/block-list-state.svelte.js +8 -9
- package/dist/reactivity/block-window.svelte.d.ts +12 -6
- package/dist/reactivity/block-window.svelte.js +44 -17
- package/dist/reactivity/child-list.d.ts +34 -0
- package/dist/reactivity/child-list.js +48 -0
- package/dist/reactivity/content-version.svelte.d.ts +4 -7
- package/dist/reactivity/content-version.svelte.js +3 -5
- package/dist/reactivity/hold-across.d.ts +39 -0
- package/dist/reactivity/hold-across.js +57 -0
- package/dist/reactivity/layout-state.svelte.d.ts +27 -0
- package/dist/reactivity/layout-state.svelte.js +51 -0
- package/dist/reactivity/list-tree.d.ts +39 -0
- package/dist/reactivity/list-tree.js +132 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
- package/dist/reactivity/list-windowing.svelte.js +143 -292
- package/dist/reactivity/measure-batch.d.ts +6 -8
- package/dist/reactivity/measure-batch.js +5 -6
- package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
- package/dist/reactivity/publish-ref.svelte.js +21 -85
- package/dist/reactivity/scope-geometry.d.ts +6 -13
- package/dist/reactivity/scope-geometry.js +7 -14
- package/dist/reactivity/state-registry.d.ts +5 -5
- package/dist/reactivity/state-registry.js +11 -15
- package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
- package/dist/reactivity/use-container-windowing.svelte.js +64 -74
- package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
- package/dist/reactivity/use-measured-child.svelte.js +41 -0
- package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
- package/dist/reactivity/use-window-floor.svelte.js +27 -0
- package/dist/reactivity/window-slice.d.ts +4 -4
- package/dist/reactivity/window-slice.js +0 -2
- package/dist/renderer-slot.d.ts +48 -0
- package/dist/renderer-slot.js +85 -0
- package/dist/scan-index.d.ts +4 -4
- package/dist/scan-index.js +4 -4
- package/dist/schema/block-commands.d.ts +69 -54
- package/dist/schema/block-commands.js +91 -104
- package/dist/schema/block-completions.d.ts +16 -19
- package/dist/schema/block-completions.js +25 -32
- package/dist/schema/block-component-registry.d.ts +13 -14
- package/dist/schema/block-component-registry.js +19 -17
- package/dist/schema/block-kind-descriptor.d.ts +234 -168
- package/dist/schema/block-kind-descriptor.js +151 -66
- package/dist/schema/block-openers.d.ts +48 -39
- package/dist/schema/block-openers.js +73 -83
- package/dist/schema/built-in-descriptors.d.ts +3 -5
- package/dist/schema/built-in-descriptors.js +96 -80
- package/dist/schema/child-spans.d.ts +12 -10
- package/dist/schema/child-spans.js +68 -34
- package/dist/schema/closure.d.ts +18 -16
- package/dist/schema/closure.js +24 -14
- package/dist/schema/command-id.d.ts +6 -8
- package/dist/schema/command-id.js +20 -25
- package/dist/schema/commands.d.ts +79 -81
- package/dist/schema/commands.js +156 -116
- package/dist/schema/container-raw.d.ts +51 -11
- package/dist/schema/container-raw.js +143 -14
- package/dist/schema/container-rebuilders.d.ts +17 -15
- package/dist/schema/container-rebuilders.js +30 -22
- package/dist/schema/context-actions.d.ts +25 -13
- package/dist/schema/context-actions.js +32 -17
- package/dist/schema/define-plugin-block.d.ts +8 -6
- package/dist/schema/define-plugin-block.js +6 -4
- package/dist/schema/fenced-code-raw.d.ts +30 -17
- package/dist/schema/fenced-code-raw.js +155 -107
- package/dist/schema/global-commands.d.ts +6 -6
- package/dist/schema/global-commands.js +14 -22
- package/dist/schema/height-estimates.d.ts +31 -0
- package/dist/schema/height-estimates.js +64 -0
- package/dist/schema/inline-construct-policy.d.ts +42 -55
- package/dist/schema/inline-construct-policy.js +36 -35
- package/dist/schema/insert-catalogue.d.ts +30 -0
- package/dist/schema/insert-catalogue.js +95 -0
- package/dist/schema/keybinding-overrides.d.ts +9 -11
- package/dist/schema/keybinding-overrides.js +1 -1
- package/dist/schema/keybindings.d.ts +15 -7
- package/dist/schema/keybindings.js +21 -9
- package/dist/schema/merge-rules.d.ts +5 -7
- package/dist/schema/merge-rules.js +7 -9
- package/dist/schema/opener-priorities.d.ts +4 -4
- package/dist/schema/opener-priorities.js +4 -4
- package/dist/schema/operations.d.ts +9 -11
- package/dist/schema/operations.js +3 -3
- package/dist/schema/page-role.d.ts +14 -0
- package/dist/schema/page-role.js +19 -0
- package/dist/schema/plugin-activation.d.ts +4 -6
- package/dist/schema/plugin-activation.js +12 -10
- package/dist/schema/plugin-editor-context.d.ts +25 -10
- package/dist/schema/plugin-editor-context.js +40 -9
- package/dist/schema/plugin-install.d.ts +49 -17
- package/dist/schema/plugin-install.js +51 -25
- package/dist/schema/plugin-kind.d.ts +12 -8
- package/dist/schema/plugin-kind.js +35 -42
- package/dist/schema/plugin-name.js +3 -3
- package/dist/schema/plugin-registry.d.ts +54 -0
- package/dist/schema/plugin-registry.js +70 -0
- package/dist/schema/reading.d.ts +23 -0
- package/dist/schema/reading.js +7 -0
- package/dist/schema/register-once.d.ts +3 -5
- package/dist/schema/register-once.js +7 -16
- package/dist/schema/registration-checks.d.ts +12 -16
- package/dist/schema/registration-checks.js +35 -51
- package/dist/schema/registration-pairs.d.ts +54 -0
- package/dist/schema/registration-pairs.js +48 -0
- package/dist/schema/registration-pending.d.ts +8 -12
- package/dist/schema/registration-pending.js +9 -9
- package/dist/schema/registry-reset.d.ts +8 -4
- package/dist/schema/registry-reset.js +13 -26
- package/dist/schema/registry-view.d.ts +25 -13
- package/dist/schema/registry-view.js +26 -20
- package/dist/schema/reserved-chords.d.ts +9 -10
- package/dist/schema/reserved-chords.js +73 -78
- package/dist/schema/reserved-chrome.d.ts +12 -11
- package/dist/schema/reserved-chrome.js +15 -11
- package/dist/schema/setext-raw.d.ts +13 -0
- package/dist/schema/setext-raw.js +33 -0
- package/dist/schema/stored-as.d.ts +20 -0
- package/dist/schema/stored-as.js +6 -0
- package/dist/schema/table-cell-raw.d.ts +18 -7
- package/dist/schema/table-cell-raw.js +28 -7
- package/dist/schema/whole-block-unit.d.ts +5 -4
- package/dist/schema/whole-block-unit.js +5 -4
- package/dist/search/document-scan.d.ts +3 -3
- package/dist/search/document-scan.js +2 -2
- package/dist/search/matcher.d.ts +1 -1
- package/dist/search/regex-executor.d.ts +5 -6
- package/dist/search/regex-executor.js +6 -8
- package/dist/search/replace.d.ts +2 -5
- package/dist/search/replace.js +2 -5
- package/dist/search/search-state.svelte.d.ts +5 -5
- package/dist/search/search-state.svelte.js +12 -16
- package/dist/selection/autoscroll.d.ts +6 -9
- package/dist/selection/block-hit-test.d.ts +16 -24
- package/dist/selection/block-hit-test.js +29 -22
- package/dist/selection/caret-doors.d.ts +15 -14
- package/dist/selection/caret-doors.js +37 -26
- package/dist/selection/caret-landing.d.ts +62 -0
- package/dist/selection/caret-landing.js +157 -0
- package/dist/selection/caret-restore.d.ts +17 -10
- package/dist/selection/caret-restore.js +10 -22
- package/dist/selection/caret-target.d.ts +30 -0
- package/dist/selection/caret-target.js +84 -0
- package/dist/selection/char-endpoint-snap.d.ts +6 -10
- package/dist/selection/char-endpoint-snap.js +8 -14
- package/dist/selection/clipboard-text.d.ts +5 -12
- package/dist/selection/clipboard-text.js +69 -172
- package/dist/selection/covered-block.d.ts +6 -8
- package/dist/selection/covered-block.js +8 -19
- package/dist/selection/cross-block/clipboard.d.ts +3 -2
- package/dist/selection/cross-block/clipboard.js +13 -4
- package/dist/selection/cross-block/dispatch.d.ts +47 -43
- package/dist/selection/cross-block/dispatch.js +12 -23
- package/dist/selection/cross-block/format-range.d.ts +18 -21
- package/dist/selection/cross-block/format-range.js +104 -103
- package/dist/selection/cross-block/format-toggle.d.ts +10 -15
- package/dist/selection/cross-block/format-toggle.js +28 -33
- package/dist/selection/cross-block/keydown.d.ts +4 -4
- package/dist/selection/cross-block/keydown.js +93 -152
- package/dist/selection/cross-block/ops.d.ts +19 -34
- package/dist/selection/cross-block/ops.js +110 -95
- package/dist/selection/cross-block/paste.d.ts +2 -3
- package/dist/selection/cross-block/paste.js +61 -104
- package/dist/selection/cross-block/pointer.d.ts +17 -15
- package/dist/selection/cross-block/pointer.js +74 -25
- package/dist/selection/cross-block/type-replace.d.ts +4 -6
- package/dist/selection/cross-block/type-replace.js +53 -146
- package/dist/selection/dead-space-caret.d.ts +20 -28
- package/dist/selection/dead-space-caret.js +79 -87
- package/dist/selection/drag-pointer.d.ts +22 -5
- package/dist/selection/drag-pointer.js +63 -31
- package/dist/selection/gap-caret.d.ts +17 -28
- package/dist/selection/gap-caret.js +14 -26
- package/dist/selection/grid-selection.d.ts +12 -0
- package/dist/selection/grid-selection.js +22 -0
- package/dist/selection/keyboard-extend.d.ts +27 -39
- package/dist/selection/keyboard-extend.js +94 -116
- package/dist/selection/multi-click.d.ts +37 -0
- package/dist/selection/multi-click.js +197 -0
- package/dist/selection/native-bridge.d.ts +30 -37
- package/dist/selection/native-bridge.js +80 -100
- package/dist/selection/nearest-block.d.ts +17 -12
- package/dist/selection/nearest-block.js +37 -18
- package/dist/selection/path-lookup.d.ts +31 -14
- package/dist/selection/path-lookup.js +110 -20
- package/dist/selection/path-math.d.ts +9 -11
- package/dist/selection/path-math.js +5 -7
- package/dist/selection/pointer-gesture.d.ts +9 -0
- package/dist/selection/pointer-gesture.js +11 -0
- package/dist/selection/pointer-session.d.ts +10 -16
- package/dist/selection/pointer-session.js +6 -7
- package/dist/selection/primitives.d.ts +64 -33
- package/dist/selection/primitives.js +61 -53
- package/dist/selection/range-coverage.d.ts +94 -0
- package/dist/selection/range-coverage.js +365 -0
- package/dist/selection/range-delete-ceremony.d.ts +28 -74
- package/dist/selection/range-delete-ceremony.js +100 -141
- package/dist/selection/range-delete-chrome.d.ts +20 -33
- package/dist/selection/range-delete-chrome.js +53 -78
- package/dist/selection/range-delete-table-coverage.d.ts +11 -25
- package/dist/selection/range-delete-table-coverage.js +42 -112
- package/dist/selection/range-delete-table.d.ts +14 -12
- package/dist/selection/range-delete-table.js +106 -310
- package/dist/selection/range-delete.d.ts +18 -19
- package/dist/selection/range-delete.js +83 -123
- package/dist/selection/round-trip-restore.d.ts +18 -0
- package/dist/selection/round-trip-restore.js +19 -0
- package/dist/selection/selection-announcer.d.ts +17 -0
- package/dist/selection/selection-announcer.js +25 -0
- package/dist/selection/selection-description.d.ts +4 -3
- package/dist/selection/selection-description.js +5 -4
- package/dist/selection/selection-drop.d.ts +52 -0
- package/dist/selection/selection-drop.js +317 -0
- package/dist/selection/selection-restore.d.ts +20 -33
- package/dist/selection/selection-restore.js +21 -44
- package/dist/selection/selection-state.svelte.d.ts +50 -42
- package/dist/selection/selection-state.svelte.js +144 -98
- package/dist/selection/shared-keydown.d.ts +22 -27
- package/dist/selection/shared-keydown.js +25 -45
- package/dist/selection/table-endpoint-snap.d.ts +17 -41
- package/dist/selection/table-endpoint-snap.js +54 -80
- package/dist/selection/table-rect-extend.d.ts +3 -6
- package/dist/selection/table-rect-extend.js +19 -14
- package/dist/styles/editor-theme.css +75 -53
- package/dist/styles/editor.css +248 -139
- package/dist/testing/conformance-core.d.ts +50 -18
- package/dist/testing/conformance-core.js +88 -50
- package/dist/testing/container-conformance.d.ts +48 -84
- package/dist/testing/container-conformance.js +159 -285
- package/dist/testing/headless-actions.d.ts +34 -19
- package/dist/testing/headless-actions.js +116 -65
- package/dist/testing/headless-block-list.svelte.d.ts +16 -0
- package/dist/testing/headless-block-list.svelte.js +22 -0
- package/dist/testing/inline-conformance.d.ts +15 -22
- package/dist/testing/inline-conformance.js +131 -148
- package/dist/testing/kind-conformance.d.ts +19 -24
- package/dist/testing/kind-conformance.js +204 -117
- package/dist/testing/kit-reading.d.ts +7 -0
- package/dist/testing/kit-reading.js +16 -0
- package/dist/testing/mount-dom-stubs.d.ts +4 -5
- package/dist/testing/mount-dom-stubs.js +8 -5
- package/dist/testing/parse-convergence.d.ts +10 -10
- package/dist/testing/parse-convergence.js +14 -49
- package/dist/testing.d.ts +13 -9
- package/dist/testing.js +28 -38
- package/dist/tree-operations/blockquote.d.ts +8 -14
- package/dist/tree-operations/blockquote.js +25 -45
- package/dist/tree-operations/chain-rebuild.d.ts +34 -25
- package/dist/tree-operations/chain-rebuild.js +115 -52
- package/dist/tree-operations/children.d.ts +5 -9
- package/dist/tree-operations/children.js +7 -11
- package/dist/tree-operations/cleanup.d.ts +6 -7
- package/dist/tree-operations/cleanup.js +14 -11
- package/dist/tree-operations/clone.js +5 -4
- package/dist/tree-operations/container-lift.d.ts +10 -5
- package/dist/tree-operations/container-lift.js +20 -14
- package/dist/tree-operations/container-offsets.d.ts +22 -0
- package/dist/tree-operations/container-offsets.js +89 -0
- package/dist/tree-operations/content-write.d.ts +52 -29
- package/dist/tree-operations/content-write.js +155 -110
- package/dist/tree-operations/index.d.ts +4 -4
- package/dist/tree-operations/index.js +4 -4
- package/dist/tree-operations/keep-one-block.d.ts +10 -0
- package/dist/tree-operations/keep-one-block.js +19 -0
- package/dist/tree-operations/leaf-range.d.ts +33 -0
- package/dist/tree-operations/leaf-range.js +67 -0
- package/dist/tree-operations/list/empty-check.d.ts +2 -3
- package/dist/tree-operations/list/empty-check.js +4 -4
- package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
- package/dist/tree-operations/list/exit-replacement.js +4 -9
- package/dist/tree-operations/list/item-partition.d.ts +2 -2
- package/dist/tree-operations/list/item-partition.js +2 -2
- package/dist/tree-operations/list/list-builders.d.ts +18 -16
- package/dist/tree-operations/list/list-builders.js +59 -30
- package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
- package/dist/tree-operations/list/ordered-markers.js +7 -16
- package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
- package/dist/tree-operations/list/reconcile-task.js +80 -23
- package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
- package/dist/tree-operations/list/sublist-separator.js +20 -27
- package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
- package/dist/tree-operations/list/task-paragraph.js +54 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
- package/dist/tree-operations/list/unwrap-merge.js +44 -79
- package/dist/tree-operations/node-ops.d.ts +30 -52
- package/dist/tree-operations/node-ops.js +152 -218
- package/dist/tree-operations/node-primitives.d.ts +44 -31
- package/dist/tree-operations/node-primitives.js +84 -60
- package/dist/tree-operations/open-tail.d.ts +25 -0
- package/dist/tree-operations/open-tail.js +100 -0
- package/dist/tree-operations/parse-block.d.ts +15 -2
- package/dist/tree-operations/parse-block.js +19 -4
- package/dist/tree-operations/paste/apply.d.ts +7 -8
- package/dist/tree-operations/paste/apply.js +33 -63
- package/dist/tree-operations/paste/body-write.d.ts +8 -6
- package/dist/tree-operations/paste/body-write.js +13 -14
- package/dist/tree-operations/paste/container-match.d.ts +7 -10
- package/dist/tree-operations/paste/container-match.js +76 -58
- package/dist/tree-operations/paste/container-paste.d.ts +3 -3
- package/dist/tree-operations/paste/container-paste.js +3 -3
- package/dist/tree-operations/paste/dispatch.d.ts +26 -29
- package/dist/tree-operations/paste/dispatch.js +68 -53
- package/dist/tree-operations/paste/focus-target.d.ts +11 -14
- package/dist/tree-operations/paste/focus-target.js +13 -18
- package/dist/tree-operations/paste/hooks.d.ts +7 -12
- package/dist/tree-operations/paste/hooks.js +49 -46
- package/dist/tree-operations/paste/line-ending.d.ts +11 -0
- package/dist/tree-operations/paste/line-ending.js +32 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
- package/dist/tree-operations/paste/list-absorb.js +17 -19
- package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
- package/dist/tree-operations/paste/list-break-out.js +24 -32
- package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
- package/dist/tree-operations/paste/parent-scope.js +9 -16
- package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
- package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
- package/dist/tree-operations/paste/paste-replacement.js +73 -42
- package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
- package/dist/tree-operations/paste/paste-transforms.js +18 -27
- package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
- package/dist/tree-operations/paste/replacement-parse.js +24 -0
- package/dist/tree-operations/paste/strategy.d.ts +1 -1
- package/dist/tree-operations/paste/strategy.js +1 -1
- package/dist/tree-operations/paste/table-slice.js +15 -10
- package/dist/tree-operations/paste-surfaces.d.ts +18 -29
- package/dist/tree-operations/paste-surfaces.js +14 -10
- package/dist/tree-operations/path-mutate.d.ts +7 -8
- package/dist/tree-operations/path-mutate.js +4 -4
- package/dist/tree-operations/reorder-unit.d.ts +4 -5
- package/dist/tree-operations/reorder-unit.js +5 -6
- package/dist/tree-operations/reorder.d.ts +7 -9
- package/dist/tree-operations/reorder.js +39 -40
- package/dist/tree-operations/settle.d.ts +42 -53
- package/dist/tree-operations/settle.js +241 -162
- package/dist/tree-operations/sharing.d.ts +5 -5
- package/dist/tree-operations/splice-many.d.ts +5 -5
- package/dist/tree-operations/splice-many.js +5 -5
- package/dist/tree-operations/stored-as.d.ts +13 -0
- package/dist/tree-operations/stored-as.js +48 -0
- package/dist/tree-operations/structural-change.d.ts +11 -15
- package/dist/tree-operations/structural-change.js +10 -14
- package/dist/tree-operations/structural-suffix.d.ts +22 -0
- package/dist/tree-operations/structural-suffix.js +61 -0
- package/dist/tree-operations/sub-table-copy.d.ts +7 -0
- package/dist/tree-operations/sub-table-copy.js +40 -36
- package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
- package/dist/tree-operations/table-grid-clipboard.js +11 -36
- package/dist/tree-operations/table-mutations.d.ts +7 -3
- package/dist/tree-operations/table-mutations.js +45 -9
- package/dist/tree-operations/unshare.d.ts +11 -15
- package/dist/tree-operations/unshare.js +15 -17
- package/dist/undo/manager.js +1 -1
- package/dist/undo/types.d.ts +2 -2
- package/docs/guide/consumer-guide.md +329 -205
- package/docs/guide/directives.md +7 -7
- package/docs/guide/plugin-api.md +267 -183
- package/docs/guide/plugin-guide.md +341 -235
- package/docs/guide/plugin-testing.md +96 -82
- package/package.json +17 -21
- package/dist/ambient/ambient-cursor.d.ts +0 -41
- package/dist/ambient/ambient-cursor.js +0 -120
- package/dist/components/blocks/code/code-paste.d.ts +0 -24
- package/dist/components/blocks/code/code-paste.js +0 -21
- package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
- package/dist/components/blocks/table/cell-clipboard.js +0 -67
- package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
- package/dist/components/blocks/text/hidden-suffix.js +0 -15
- package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
- package/dist/components/image/image-source-bytes.d.ts +0 -15
- package/dist/components/image/image-source-bytes.js +0 -80
- package/dist/cursor/content-offsets.d.ts +0 -29
- package/dist/cursor/content-offsets.js +0 -151
- package/dist/cursor/reveal-anchor.d.ts +0 -30
- package/dist/cursor/reveal-anchor.js +0 -31
- package/dist/invariants/split-landing.d.ts +0 -8
- package/dist/invariants/split-landing.js +0 -15
- package/dist/selection/double-click-trim.d.ts +0 -17
- package/dist/selection/double-click-trim.js +0 -57
- package/dist/tree-operations/list/terminator.d.ts +0 -17
- package/dist/tree-operations/list/terminator.js +0 -60
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
- package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ambient-aware cursor I/O for prose contenteditable surfaces: raw ↔ DOM offset
|
|
3
|
-
* translation that respects the leading ambient marker span a container block contributes
|
|
4
|
-
* to its first prose child. Zero-ambient surfaces are first-class consumers —
|
|
5
|
-
* `getAmbientLength: () => 0` reduces this to plain widget-aware translation.
|
|
6
|
-
*/
|
|
7
|
-
import { asRawOffset, toClampedRawOffset, toDomTextOffset } from '../cursor/coordinate-spaces';
|
|
8
|
-
import { domTextOffsetAtNode, findDomTextOffsetTarget } from '../cursor/widget-offset';
|
|
9
|
-
import { ambientSpanOf, placeCaretAfterAmbientSpan } from './ambient-dom';
|
|
10
|
-
export function createAmbientCursorIO(deps) {
|
|
11
|
-
function snapTargetRaw() {
|
|
12
|
-
const target = deps.getSnapTarget?.() ?? null;
|
|
13
|
-
return target === null ? null : asRawOffset(target);
|
|
14
|
-
}
|
|
15
|
-
function readLiveRange() {
|
|
16
|
-
const el = deps.getEl();
|
|
17
|
-
if (!el || document.activeElement !== el)
|
|
18
|
-
return { state: 'inactive' };
|
|
19
|
-
const sel = window.getSelection();
|
|
20
|
-
if (!sel || sel.rangeCount === 0)
|
|
21
|
-
return { state: 'dropped' };
|
|
22
|
-
const ambient = ambientSpanOf(el);
|
|
23
|
-
return {
|
|
24
|
-
state: 'live',
|
|
25
|
-
el,
|
|
26
|
-
range: sel.getRangeAt(0),
|
|
27
|
-
collapsed: sel.isCollapsed,
|
|
28
|
-
inAmbient: (node) => ambient !== null && ambient.contains(node)
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
function getRaw() {
|
|
32
|
-
const live = readLiveRange();
|
|
33
|
-
if (live.state === 'inactive')
|
|
34
|
-
return null;
|
|
35
|
-
// Dropped (Chromium loses element-level carets past atomic widgets) or rebounded
|
|
36
|
-
// into a contenteditable=false island: the snap target carries the user's intent.
|
|
37
|
-
if (live.state === 'dropped')
|
|
38
|
-
return snapTargetRaw();
|
|
39
|
-
if (live.inAmbient(live.range.startContainer))
|
|
40
|
-
return snapTargetRaw();
|
|
41
|
-
const content = domTextOffsetAtNode(live.el, live.range.startContainer, live.range.startOffset);
|
|
42
|
-
return toClampedRawOffset(content, deps.getAmbientLength());
|
|
43
|
-
}
|
|
44
|
-
function setToAmbientBoundary() {
|
|
45
|
-
const el = deps.getEl();
|
|
46
|
-
if (el)
|
|
47
|
-
placeCaretAfterAmbientSpan(el);
|
|
48
|
-
}
|
|
49
|
-
function setRaw(offset) {
|
|
50
|
-
const el = deps.getEl();
|
|
51
|
-
if (!el)
|
|
52
|
-
return;
|
|
53
|
-
const ambientLength = deps.getAmbientLength();
|
|
54
|
-
// Walking to position ambientLength lands inside the marker island, where Chromium
|
|
55
|
-
// bounces the caret out in front of the span. Use a sibling boundary instead.
|
|
56
|
-
if (ambientLength > 0 && offset <= 0) {
|
|
57
|
-
setToAmbientBoundary();
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
const target = toDomTextOffset(offset, ambientLength);
|
|
61
|
-
const pos = findDomTextOffsetTarget(el, target);
|
|
62
|
-
if (!pos)
|
|
63
|
-
return;
|
|
64
|
-
// The walker's last-text-node fallback can land inside the marker text, where the
|
|
65
|
-
// contenteditable="false" island traps the caret.
|
|
66
|
-
const ambient = ambientSpanOf(el);
|
|
67
|
-
if (ambient && ambient.contains(pos.node)) {
|
|
68
|
-
setToAmbientBoundary();
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
const range = document.createRange();
|
|
72
|
-
try {
|
|
73
|
-
range.setStart(pos.node, pos.offset);
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
range.collapse(true);
|
|
79
|
-
const sel = window.getSelection();
|
|
80
|
-
sel?.removeAllRanges();
|
|
81
|
-
sel?.addRange(range);
|
|
82
|
-
}
|
|
83
|
-
function clampOutOfAmbient() {
|
|
84
|
-
// Liveness before the ambient read, as every other method here does it: the length is an
|
|
85
|
-
// owner-bound derived at the call site, and a surface unmounted mid-dispatch is a dead owner.
|
|
86
|
-
const live = readLiveRange();
|
|
87
|
-
if (live.state !== 'live' || !live.collapsed)
|
|
88
|
-
return;
|
|
89
|
-
const ambientLength = deps.getAmbientLength();
|
|
90
|
-
if (ambientLength === 0)
|
|
91
|
-
return;
|
|
92
|
-
const content = domTextOffsetAtNode(live.el, live.range.startContainer, live.range.startOffset);
|
|
93
|
-
if (content >= ambientLength)
|
|
94
|
-
return;
|
|
95
|
-
setToAmbientBoundary();
|
|
96
|
-
}
|
|
97
|
-
function getRawSelection() {
|
|
98
|
-
const live = readLiveRange();
|
|
99
|
-
if (live.state !== 'live' || live.collapsed)
|
|
100
|
-
return null;
|
|
101
|
-
// No snap-target fallback here, unlike `getRaw`: a single caret intent cannot stand
|
|
102
|
-
// in for one end of a pair, and the clamp below already maps the marker interior to
|
|
103
|
-
// raw 0 — the right boundary for a drag that began inside the marker.
|
|
104
|
-
return rawEndpointsOf(live.el, live.range, deps.getAmbientLength());
|
|
105
|
-
}
|
|
106
|
-
function rawRangeOf(range) {
|
|
107
|
-
const el = deps.getEl();
|
|
108
|
-
if (!el || !el.contains(range.startContainer) || !el.contains(range.endContainer))
|
|
109
|
-
return null;
|
|
110
|
-
return rawEndpointsOf(el, range, deps.getAmbientLength());
|
|
111
|
-
}
|
|
112
|
-
return { getRaw, setRaw, getRawSelection, rawRangeOf, clampOutOfAmbient, setToAmbientBoundary };
|
|
113
|
-
}
|
|
114
|
-
// ── Internal ────────────────────────────────────────────────────────────────
|
|
115
|
-
function rawEndpointsOf(el, range, ambientLength) {
|
|
116
|
-
return {
|
|
117
|
-
start: toClampedRawOffset(domTextOffsetAtNode(el, range.startContainer, range.startOffset), ambientLength),
|
|
118
|
-
end: toClampedRawOffset(domTextOffsetAtNode(el, range.endContainer, range.endOffset), ambientLength)
|
|
119
|
-
};
|
|
120
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure paste pipeline for fenced code blocks: splice the text in, then hand the
|
|
3
|
-
* result to the write seam every route shares (`schema/fenced-code-raw.ts`).
|
|
4
|
-
*/
|
|
5
|
-
export interface CodePasteInput {
|
|
6
|
-
display: string;
|
|
7
|
-
selection: {
|
|
8
|
-
start: number;
|
|
9
|
-
end: number;
|
|
10
|
-
};
|
|
11
|
-
pasted: string;
|
|
12
|
-
fenceMarker: '`' | '~';
|
|
13
|
-
fenceLength: number;
|
|
14
|
-
closed: boolean;
|
|
15
|
-
}
|
|
16
|
-
export interface CodePasteResult {
|
|
17
|
-
text: string;
|
|
18
|
-
cursor: number;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* A paste is literal content, so a run it lands — or forms against the bytes already
|
|
22
|
-
* there — grows the fence instead of terminating the block.
|
|
23
|
-
*/
|
|
24
|
-
export declare function computeCodePaste(input: CodePasteInput): CodePasteResult;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure paste pipeline for fenced code blocks: splice the text in, then hand the
|
|
3
|
-
* result to the write seam every route shares (`schema/fenced-code-raw.ts`).
|
|
4
|
-
*/
|
|
5
|
-
import { reconcileFenceWrite } from '../../../schema/fenced-code-raw';
|
|
6
|
-
// ── Public API ──────────────────────────────────────────────────────────────
|
|
7
|
-
/**
|
|
8
|
-
* A paste is literal content, so a run it lands — or forms against the bytes already
|
|
9
|
-
* there — grows the fence instead of terminating the block.
|
|
10
|
-
*/
|
|
11
|
-
export function computeCodePaste(input) {
|
|
12
|
-
const { display, selection, pasted, fenceMarker, fenceLength, closed } = input;
|
|
13
|
-
const { start, end } = selection;
|
|
14
|
-
const written = reconcileFenceWrite({
|
|
15
|
-
display: display.slice(0, start) + pasted + display.slice(end),
|
|
16
|
-
caret: start + pasted.length,
|
|
17
|
-
fence: { marker: fenceMarker, length: fenceLength, closed },
|
|
18
|
-
mode: 'literal'
|
|
19
|
-
});
|
|
20
|
-
return { text: written.display, cursor: written.caret };
|
|
21
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure clipboard payload for an intra-table multi-cell rectangle; the component
|
|
3
|
-
* owns the live ClipboardEvent wiring.
|
|
4
|
-
*/
|
|
5
|
-
import type { DocumentGetter } from '../../../editor-keys';
|
|
6
|
-
import type { SelectionState } from '../../../selection/selection-state.svelte';
|
|
7
|
-
export interface CellClipboardDeps {
|
|
8
|
-
selection: SelectionState;
|
|
9
|
-
getDoc: DocumentGetter;
|
|
10
|
-
}
|
|
11
|
-
export interface IntraTableRect {
|
|
12
|
-
tablePath: number[];
|
|
13
|
-
anchorCellIdx: number;
|
|
14
|
-
focusCellIdx: number;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Both endpoints share the table path, so each `offset` is a row-major cell index
|
|
18
|
-
* (unflagged — see `selection/primitives` on context-established cell offsets). Callers
|
|
19
|
-
* compare `tablePath` against their own; the rectangle belongs to at most one table.
|
|
20
|
-
*/
|
|
21
|
-
export declare function intraTableRect(selection: SelectionState): IntraTableRect | null;
|
|
22
|
-
/** The GFM sub-table for the current selection, or null when it isn't a rectangle. */
|
|
23
|
-
export declare function intraTableRectPayload(deps: CellClipboardDeps): string | null;
|
|
24
|
-
/** The rectangle's bounds in row/column terms, or null when the selection isn't one. */
|
|
25
|
-
export declare function intraTableRectBounds(deps: CellClipboardDeps): {
|
|
26
|
-
tablePath: number[];
|
|
27
|
-
top: number;
|
|
28
|
-
left: number;
|
|
29
|
-
rows: number;
|
|
30
|
-
cols: number;
|
|
31
|
-
} | null;
|
|
32
|
-
/** The rectangle's cell texts as a grid (pipes unescaped), for the spreadsheet formats. */
|
|
33
|
-
export declare function intraTableRectGrid(deps: CellClipboardDeps): string[][] | null;
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure clipboard payload for an intra-table multi-cell rectangle; the component
|
|
3
|
-
* owns the live ClipboardEvent wiring.
|
|
4
|
-
*/
|
|
5
|
-
import { metadataOf } from '../../../core/nodes';
|
|
6
|
-
import { isBlockNode, nodeAt } from '../../../tree-operations/node-primitives';
|
|
7
|
-
import { pathsEqual } from '../../../selection/path-math';
|
|
8
|
-
import { cellRowCol } from '../../../cursor/coordinate-spaces';
|
|
9
|
-
import { copyRectangleAsSubTable } from '../../../tree-operations/sub-table-copy';
|
|
10
|
-
import { rectangleGrid } from '../../../tree-operations/table-grid-clipboard';
|
|
11
|
-
/**
|
|
12
|
-
* Both endpoints share the table path, so each `offset` is a row-major cell index
|
|
13
|
-
* (unflagged — see `selection/primitives` on context-established cell offsets). Callers
|
|
14
|
-
* compare `tablePath` against their own; the rectangle belongs to at most one table.
|
|
15
|
-
*/
|
|
16
|
-
export function intraTableRect(selection) {
|
|
17
|
-
const { anchor, focus } = selection;
|
|
18
|
-
if (!selection.isCustomRendered || !anchor || !focus || !pathsEqual(anchor.path, focus.path)) {
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
return { tablePath: anchor.path, anchorCellIdx: anchor.offset, focusCellIdx: focus.offset };
|
|
22
|
-
}
|
|
23
|
-
/** The GFM sub-table for the current selection, or null when it isn't a rectangle. */
|
|
24
|
-
export function intraTableRectPayload(deps) {
|
|
25
|
-
const rect = intraTableRect(deps.selection);
|
|
26
|
-
if (!rect)
|
|
27
|
-
return null;
|
|
28
|
-
const tableNode = nodeAt(deps.getDoc(), rect.tablePath);
|
|
29
|
-
if (!tableNode || !isBlockNode(tableNode) || tableNode.kind !== 'table')
|
|
30
|
-
return null;
|
|
31
|
-
const colCount = metadataOf(tableNode, 'table').columnCount;
|
|
32
|
-
const a = cellRowCol(rect.anchorCellIdx, colCount);
|
|
33
|
-
const b = cellRowCol(rect.focusCellIdx, colCount);
|
|
34
|
-
return copyRectangleAsSubTable(tableNode, { rowIdx: a.row, colIdx: a.col }, { rowIdx: b.row, colIdx: b.col });
|
|
35
|
-
}
|
|
36
|
-
/** The rectangle's bounds in row/column terms, or null when the selection isn't one. */
|
|
37
|
-
export function intraTableRectBounds(deps) {
|
|
38
|
-
const rect = intraTableRect(deps.selection);
|
|
39
|
-
if (!rect)
|
|
40
|
-
return null;
|
|
41
|
-
const tableNode = nodeAt(deps.getDoc(), rect.tablePath);
|
|
42
|
-
if (!tableNode || !isBlockNode(tableNode) || tableNode.kind !== 'table')
|
|
43
|
-
return null;
|
|
44
|
-
const colCount = metadataOf(tableNode, 'table').columnCount;
|
|
45
|
-
const a = cellRowCol(rect.anchorCellIdx, colCount);
|
|
46
|
-
const b = cellRowCol(rect.focusCellIdx, colCount);
|
|
47
|
-
const top = Math.min(a.row, b.row);
|
|
48
|
-
const left = Math.min(a.col, b.col);
|
|
49
|
-
return {
|
|
50
|
-
tablePath: rect.tablePath,
|
|
51
|
-
top,
|
|
52
|
-
left,
|
|
53
|
-
rows: Math.max(a.row, b.row) - top + 1,
|
|
54
|
-
cols: Math.max(a.col, b.col) - left + 1
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
/** The rectangle's cell texts as a grid (pipes unescaped), for the spreadsheet formats. */
|
|
58
|
-
export function intraTableRectGrid(deps) {
|
|
59
|
-
const bounds = intraTableRectBounds(deps);
|
|
60
|
-
if (!bounds)
|
|
61
|
-
return null;
|
|
62
|
-
const tableNode = nodeAt(deps.getDoc(), bounds.tablePath);
|
|
63
|
-
if (!tableNode || !isBlockNode(tableNode))
|
|
64
|
-
return null;
|
|
65
|
-
const { top, left, rows, cols } = bounds;
|
|
66
|
-
return rectangleGrid(tableNode, { rowIdx: top, colIdx: left }, { rowIdx: top + rows - 1, colIdx: left + cols - 1 });
|
|
67
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Whether a block keeps structure PAST its content that the surface paints nothing for — today the
|
|
3
|
-
* setext underline. A merge past it concatenates it into view (`Title\n===` + `next` reparses to a
|
|
4
|
-
* paragraph showing `===next`), so the keydown dispatch consumes the press and the command arm
|
|
5
|
-
* declines it — one home, since the two ask from different coordinate sources (live-mode.md § 4.5).
|
|
6
|
-
*/
|
|
7
|
-
import type { NodeView } from '../../../core/node-views';
|
|
8
|
-
/** `displayLength` is the caller's, not this module's: the component reads the DOM while a widget
|
|
9
|
-
* reveal is open, where `node.raw` is stale by construction. */
|
|
10
|
-
export declare function hidesStructuralSuffix(el: HTMLElement | null, node: NodeView, displayLength: number): boolean;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Whether a block keeps structure PAST its content that the surface paints nothing for — today the
|
|
3
|
-
* setext underline. A merge past it concatenates it into view (`Title\n===` + `next` reparses to a
|
|
4
|
-
* paragraph showing `===next`), so the keydown dispatch consumes the press and the command arm
|
|
5
|
-
* declines it — one home, since the two ask from different coordinate sources (live-mode.md § 4.5).
|
|
6
|
-
*/
|
|
7
|
-
import { getContentRange } from '../../../core/inline';
|
|
8
|
-
import { revealsNoMarkers } from '../../../cursor/widget-offset';
|
|
9
|
-
/** `displayLength` is the caller's, not this module's: the component reads the DOM while a widget
|
|
10
|
-
* reveal is open, where `node.raw` is stale by construction. */
|
|
11
|
-
export function hidesStructuralSuffix(el, node, displayLength) {
|
|
12
|
-
if (!el || !revealsNoMarkers(el))
|
|
13
|
-
return false;
|
|
14
|
-
return getContentRange(node).end < displayLength;
|
|
15
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Where a link edit becomes bytes: the seam every link write path calls (G4.34), and under it the
|
|
3
|
-
* GFM branch. A candidate is written only once the RENDER PATH says the reader sees exactly what
|
|
4
|
-
* they saw before — a destination that breaks its own construct surfaces as literal source, which
|
|
5
|
-
* a private walk over the parse cannot see.
|
|
6
|
-
*/
|
|
7
|
-
import type { LinkReferenceResolver } from '../../../core/inline/link-reference-resolver';
|
|
8
|
-
import type { InlineNode } from '../../../core/nodes';
|
|
9
|
-
export interface LinkFields {
|
|
10
|
-
/** RAW inner bytes of the link text. Never re-escaped: the text holds whole nested constructs,
|
|
11
|
-
* and re-emitting them from the parse would rewrite bytes the user never touched. */
|
|
12
|
-
text: string;
|
|
13
|
-
url: string;
|
|
14
|
-
title?: string;
|
|
15
|
-
/** Reference forms only: the raw tail after the text's `]` (`[ref]`, `[]`, or empty for the
|
|
16
|
-
* shortcut form). Present preserves the reference; absent inlines the destination. */
|
|
17
|
-
reference?: string;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Bytes to splice over `link`'s range, or `null` when the edit must be declined. **Every link
|
|
21
|
-
* write path goes through here** (G4.34): a node an inline rung claimed carries no `rewriteLink`
|
|
22
|
-
* hook, so emitting built-in grammar over its bytes would destroy the author's syntax.
|
|
23
|
-
*/
|
|
24
|
-
export declare function buildLinkEditBytes(link: InlineNode, display: string, fields: LinkFields, resolver?: LinkReferenceResolver): string | null;
|
|
25
|
-
/** Bytes that unwrap `link` to the text the reader already sees — remove-link. An autolink has no
|
|
26
|
-
* brackets to drop, so its removal is the same escape rewrite a re-linking text needs. */
|
|
27
|
-
export declare function buildLinkUnwrapBytes(link: InlineNode, display: string, resolver?: LinkReferenceResolver): string | null;
|
|
28
|
-
/** Bytes that mint `[text](url)` over `[start, end)` — the card's create half. Declines an empty
|
|
29
|
-
* destination, a range crossing another construct's bytes, and any candidate the render check
|
|
30
|
-
* refuses (a neighbouring `!` would turn the wrap into an image). */
|
|
31
|
-
export declare function buildLinkWrapBytes(display: string, start: number, end: number, url: string, resolver?: LinkReferenceResolver): string | null;
|
|
32
|
-
/** True when `[start, end)` holds only bytes safe to become link text. Wrapping inside or across
|
|
33
|
-
* another construct is a policy question create does not answer — it declines. */
|
|
34
|
-
export declare function canWrapRangeAsLink(display: string, start: number, end: number, resolver?: LinkReferenceResolver): boolean;
|
|
35
|
-
/** The fields the card edits, read off the source bytes: `url`/`title` are decoded on the node,
|
|
36
|
-
* but the text and the reference tail must survive as the author wrote them. */
|
|
37
|
-
export declare function linkFieldsFromInline(link: InlineNode, display: string): LinkFields;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { ImageFields, InlineNode } from '../../core/nodes';
|
|
2
|
-
/**
|
|
3
|
-
* Bytes to splice over `image`'s range, or `null` when the edit must be declined. **Every image
|
|
4
|
-
* write path goes through here** (G4.21): a node an inline rung claimed re-serializes through that
|
|
5
|
-
* rung's `rewriteImage` hook, since built-in grammar over another syntax's bytes destroys them.
|
|
6
|
-
* Plugin-side contract: docs/design/plugin-contract.md § Inline authoring.
|
|
7
|
-
*/
|
|
8
|
-
export declare function buildImageEditBytes(image: InlineNode, blockRaw: string, fields: ImageFields): string | null;
|
|
9
|
-
/** Omits optional keys the node doesn't carry, so a rebuild writes back only what the
|
|
10
|
-
* source held. Byte-exactness is not the claim (the GFM serializer canonicalizes);
|
|
11
|
-
* idempotence on the alt is, so repeated resizes never grow the escapes. */
|
|
12
|
-
export declare function imageFieldsFromInline(image: InlineNode): ImageFields;
|
|
13
|
-
/** The built-in grammar's inverse. Reach it through `buildImageEditBytes`, the only
|
|
14
|
-
* caller entitled to decide these bytes are GFM's to write. */
|
|
15
|
-
export declare function buildImageSourceBytes(fields: ImageFields): string;
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
// Where an image edit becomes bytes: the claim dispatcher every write path calls, and
|
|
2
|
-
// under it the GFM branch. The two live together because G4.21 requires the image
|
|
3
|
-
// serializer to be named in exactly one module.
|
|
4
|
-
import { encodeDestination, escapeTitle } from '../../core/inline/destination-bytes';
|
|
5
|
-
import { devWarn } from '../../dev-warn';
|
|
6
|
-
// ── The write seam ──────────────────────────────────────────────────────────
|
|
7
|
-
/**
|
|
8
|
-
* Bytes to splice over `image`'s range, or `null` when the edit must be declined. **Every image
|
|
9
|
-
* write path goes through here** (G4.21): a node an inline rung claimed re-serializes through that
|
|
10
|
-
* rung's `rewriteImage` hook, since built-in grammar over another syntax's bytes destroys them.
|
|
11
|
-
* Plugin-side contract: docs/design/plugin-contract.md § Inline authoring.
|
|
12
|
-
*/
|
|
13
|
-
export function buildImageEditBytes(image, blockRaw, fields) {
|
|
14
|
-
const claim = image.syntaxClaim;
|
|
15
|
-
if (!claim)
|
|
16
|
-
return buildImageSourceBytes(fields);
|
|
17
|
-
const bytes = claim.rewriteImage?.(blockRaw.slice(image.start, image.end), fields) ?? null;
|
|
18
|
-
if (bytes === null) {
|
|
19
|
-
devWarn('image-edit', `declined: the "${claim.prefix}" inline rung owns these bytes and ` +
|
|
20
|
-
`${claim.rewriteImage ? 'its rewriteImage hook cannot represent this edit' : 'registered no rewriteImage hook'}`, fields);
|
|
21
|
-
}
|
|
22
|
-
return bytes;
|
|
23
|
-
}
|
|
24
|
-
/** Omits optional keys the node doesn't carry, so a rebuild writes back only what the
|
|
25
|
-
* source held. Byte-exactness is not the claim (the GFM serializer canonicalizes);
|
|
26
|
-
* idempotence on the alt is, so repeated resizes never grow the escapes. */
|
|
27
|
-
export function imageFieldsFromInline(image) {
|
|
28
|
-
return {
|
|
29
|
-
alt: image.alt ?? '',
|
|
30
|
-
url: image.url ?? '',
|
|
31
|
-
...(image.title !== undefined ? { title: image.title } : {}),
|
|
32
|
-
...(image.width !== undefined ? { width: image.width } : {}),
|
|
33
|
-
...(image.height !== undefined ? { height: image.height } : {}),
|
|
34
|
-
...(image.crop !== undefined ? { crop: image.crop } : {}),
|
|
35
|
-
...(image.label !== undefined ? { label: image.label } : {})
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
// ── The GFM serializer ──────────────────────────────────────────────────────
|
|
39
|
-
/** The built-in grammar's inverse. Reach it through `buildImageEditBytes`, the only
|
|
40
|
-
* caller entitled to decide these bytes are GFM's to write. */
|
|
41
|
-
export function buildImageSourceBytes(fields) {
|
|
42
|
-
const dimSuffix = buildDimSuffix(fields.width, fields.height, fields.crop);
|
|
43
|
-
const altSegment = escapeAlt(fields.alt) + dimSuffix;
|
|
44
|
-
// Reference form: the dimension hint rides in the alt, and url/title are not
|
|
45
|
-
// written — they belong to the LRD.
|
|
46
|
-
if (fields.label !== undefined) {
|
|
47
|
-
return `![${altSegment}][${fields.label}]`;
|
|
48
|
-
}
|
|
49
|
-
const titleSegment = fields.title !== undefined ? ` "${escapeTitle(fields.title)}"` : '';
|
|
50
|
-
return `}${titleSegment})`;
|
|
51
|
-
}
|
|
52
|
-
function buildDimSuffix(width, height, crop) {
|
|
53
|
-
if (width === undefined)
|
|
54
|
-
return '';
|
|
55
|
-
if (height === undefined)
|
|
56
|
-
return `|${width}`;
|
|
57
|
-
return `|${width}x${height}${crop ? buildCropTail(crop) : ''}`;
|
|
58
|
-
}
|
|
59
|
-
/** Whole percents; the zoom only when it is one worth writing, trimmed to what it needs. */
|
|
60
|
-
function buildCropTail(crop) {
|
|
61
|
-
const z = Math.round(crop.z * 100) / 100;
|
|
62
|
-
const zoom = z === 1 ? '' : `,${String(z)}`;
|
|
63
|
-
return `@${Math.round(crop.x)},${Math.round(crop.y)}${zoom}`;
|
|
64
|
-
}
|
|
65
|
-
// Alt sits inside `[...]`, where an unescaped bracket closes the scan early. Unlike
|
|
66
|
-
// `title` and `url` it carries RAW label bytes, so a blanket escape doubles every
|
|
67
|
-
// backslash per commit; passing any backslash PAIR through untouched keeps it idempotent.
|
|
68
|
-
function escapeAlt(alt) {
|
|
69
|
-
let out = '';
|
|
70
|
-
for (let i = 0; i < alt.length; i++) {
|
|
71
|
-
const ch = alt[i];
|
|
72
|
-
if (ch === '\\' && i + 1 < alt.length) {
|
|
73
|
-
out += ch + alt[i + 1];
|
|
74
|
-
i++;
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
out += ch === '[' || ch === ']' || ch === '\\' ? '\\' + ch : ch;
|
|
78
|
-
}
|
|
79
|
-
return out;
|
|
80
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cursor / range / selection helpers for contenteditable text surfaces. Offsets count DOM
|
|
3
|
-
* text characters ambient-inclusively (`Range.toString()` does not skip
|
|
4
|
-
* contenteditable=false islands), so they are `DomTextOffset`. An offset inside a span the
|
|
5
|
-
* cursor may not enter — an atomic inline widget, or marker text the mode hides — snaps to
|
|
6
|
-
* that span's leading or trailing edge.
|
|
7
|
-
*/
|
|
8
|
-
import { type DomTextOffset } from './coordinate-spaces';
|
|
9
|
-
export declare function createRangeFromOffsets(container: HTMLElement, start: DomTextOffset, end: DomTextOffset): Range | null;
|
|
10
|
-
export declare function setCursorOffset(container: HTMLElement, offset: DomTextOffset): void;
|
|
11
|
-
/** The range START (anchor for forward selections); the moving endpoint during Shift+Arrow
|
|
12
|
-
* extension is `getSelectionFocusOffset`. */
|
|
13
|
-
export declare function getCursorOffset(container: HTMLElement): DomTextOffset | null;
|
|
14
|
-
/** The moving endpoint of the selection, distinct from the anchor once extended. */
|
|
15
|
-
export declare function getSelectionFocusOffset(container: HTMLElement): DomTextOffset | null;
|
|
16
|
-
export declare function getSelectionOffsets(container: HTMLElement): {
|
|
17
|
-
start: DomTextOffset;
|
|
18
|
-
end: DomTextOffset;
|
|
19
|
-
} | null;
|
|
20
|
-
/**
|
|
21
|
-
* Offsets for an arbitrary range inside `container` — an InputEvent's `getTargetRanges()`
|
|
22
|
-
* pending-edit range is not the live selection (a word delete at a collapsed caret reports
|
|
23
|
-
* the whole word). Null when either endpoint sits outside the container.
|
|
24
|
-
*/
|
|
25
|
-
export declare function getRangeOffsets(container: HTMLElement, range: AbstractRange): {
|
|
26
|
-
start: DomTextOffset;
|
|
27
|
-
end: DomTextOffset;
|
|
28
|
-
} | null;
|
|
29
|
-
export declare function hasSelection(): boolean;
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cursor / range / selection helpers for contenteditable text surfaces. Offsets count DOM
|
|
3
|
-
* text characters ambient-inclusively (`Range.toString()` does not skip
|
|
4
|
-
* contenteditable=false islands), so they are `DomTextOffset`. An offset inside a span the
|
|
5
|
-
* cursor may not enter — an atomic inline widget, or marker text the mode hides — snaps to
|
|
6
|
-
* that span's leading or trailing edge.
|
|
7
|
-
*/
|
|
8
|
-
import { asDomTextOffset } from './coordinate-spaces';
|
|
9
|
-
import { domDescendants } from './dom-walk';
|
|
10
|
-
import { isAtomicInlineWidget, isHiddenMarkerRoot } from './widget-offset';
|
|
11
|
-
/**
|
|
12
|
-
* Length of a span the cursor may not enter, or null when it is transparent. Atomic widgets
|
|
13
|
-
* and marker text the mode paints nothing for are both opaque: an offset inside either has
|
|
14
|
-
* no position to seat, and hiding is classified at its one home, never re-derived here.
|
|
15
|
-
*/
|
|
16
|
-
function opaqueSpanLength(node, container) {
|
|
17
|
-
if (node.nodeType !== Node.ELEMENT_NODE)
|
|
18
|
-
return null;
|
|
19
|
-
const el = node;
|
|
20
|
-
if (!isAtomicInlineWidget(el) && !isHiddenMarkerRoot(el, container))
|
|
21
|
-
return null;
|
|
22
|
-
return el.textContent?.length ?? 0;
|
|
23
|
-
}
|
|
24
|
-
export function createRangeFromOffsets(container, start, end) {
|
|
25
|
-
const range = document.createRange();
|
|
26
|
-
let charCount = 0;
|
|
27
|
-
let startSet = false;
|
|
28
|
-
let endFound = false;
|
|
29
|
-
// One classification per node, though the walk and the body below both ask: the read is a
|
|
30
|
-
// `contains` plus a `closest` per element, and a caret seat spends this walk on every step.
|
|
31
|
-
const opaque = new Map();
|
|
32
|
-
const opaqueLengthOf = (node) => {
|
|
33
|
-
if (!opaque.has(node))
|
|
34
|
-
opaque.set(node, opaqueSpanLength(node, container));
|
|
35
|
-
return opaque.get(node) ?? null;
|
|
36
|
-
};
|
|
37
|
-
for (const node of domDescendants(container, (node) => opaqueLengthOf(node) === null)) {
|
|
38
|
-
// The cursor never lands inside an opaque span: snap to the nearer edge.
|
|
39
|
-
const opaqueLen = opaqueLengthOf(node);
|
|
40
|
-
if (opaqueLen !== null) {
|
|
41
|
-
if (!startSet && start <= charCount + opaqueLen) {
|
|
42
|
-
if (start <= charCount)
|
|
43
|
-
range.setStartBefore(node);
|
|
44
|
-
else
|
|
45
|
-
range.setStartAfter(node);
|
|
46
|
-
startSet = true;
|
|
47
|
-
}
|
|
48
|
-
if (startSet && end <= charCount + opaqueLen) {
|
|
49
|
-
if (end <= charCount)
|
|
50
|
-
range.setEndBefore(node);
|
|
51
|
-
else
|
|
52
|
-
range.setEndAfter(node);
|
|
53
|
-
endFound = true;
|
|
54
|
-
break;
|
|
55
|
-
}
|
|
56
|
-
charCount += opaqueLen;
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
if (node.nodeType === Node.TEXT_NODE) {
|
|
60
|
-
const len = node.textContent?.length ?? 0;
|
|
61
|
-
if (!startSet && charCount + len >= start) {
|
|
62
|
-
range.setStart(node, start - charCount);
|
|
63
|
-
startSet = true;
|
|
64
|
-
}
|
|
65
|
-
if (startSet && charCount + len >= end) {
|
|
66
|
-
range.setEnd(node, end - charCount);
|
|
67
|
-
endFound = true;
|
|
68
|
-
break;
|
|
69
|
-
}
|
|
70
|
-
charCount += len;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
if (!startSet) {
|
|
74
|
-
range.selectNodeContents(container);
|
|
75
|
-
range.collapse(false);
|
|
76
|
-
}
|
|
77
|
-
else if (!endFound) {
|
|
78
|
-
range.setEndAfter(container);
|
|
79
|
-
}
|
|
80
|
-
return range;
|
|
81
|
-
}
|
|
82
|
-
export function setCursorOffset(container, offset) {
|
|
83
|
-
const range = createRangeFromOffsets(container, offset, offset);
|
|
84
|
-
if (!range)
|
|
85
|
-
return;
|
|
86
|
-
const sel = window.getSelection();
|
|
87
|
-
sel?.removeAllRanges();
|
|
88
|
-
sel?.addRange(range);
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* The one "DOM (node, offset) → content-offset" read here. `Selection.toString()` skips
|
|
92
|
-
* text inside contenteditable=false islands and is unreliable across them; `Range.toString()`
|
|
93
|
-
* on a prefix range does not skip, so all readers funnel through this.
|
|
94
|
-
*/
|
|
95
|
-
function nodeOffsetToContent(container, node, offset) {
|
|
96
|
-
const preRange = document.createRange();
|
|
97
|
-
preRange.selectNodeContents(container);
|
|
98
|
-
try {
|
|
99
|
-
preRange.setEnd(node, offset);
|
|
100
|
-
}
|
|
101
|
-
catch {
|
|
102
|
-
return asDomTextOffset(0);
|
|
103
|
-
}
|
|
104
|
-
return asDomTextOffset(preRange.toString().length);
|
|
105
|
-
}
|
|
106
|
-
/** The range START (anchor for forward selections); the moving endpoint during Shift+Arrow
|
|
107
|
-
* extension is `getSelectionFocusOffset`. */
|
|
108
|
-
export function getCursorOffset(container) {
|
|
109
|
-
if (document.activeElement !== container)
|
|
110
|
-
return null;
|
|
111
|
-
const sel = window.getSelection();
|
|
112
|
-
if (!sel || sel.rangeCount === 0)
|
|
113
|
-
return null;
|
|
114
|
-
const range = sel.getRangeAt(0);
|
|
115
|
-
return nodeOffsetToContent(container, range.startContainer, range.startOffset);
|
|
116
|
-
}
|
|
117
|
-
/** The moving endpoint of the selection, distinct from the anchor once extended. */
|
|
118
|
-
export function getSelectionFocusOffset(container) {
|
|
119
|
-
if (document.activeElement !== container)
|
|
120
|
-
return null;
|
|
121
|
-
const sel = window.getSelection();
|
|
122
|
-
if (!sel || sel.focusNode === null)
|
|
123
|
-
return null;
|
|
124
|
-
if (!container.contains(sel.focusNode))
|
|
125
|
-
return null;
|
|
126
|
-
return nodeOffsetToContent(container, sel.focusNode, sel.focusOffset);
|
|
127
|
-
}
|
|
128
|
-
export function getSelectionOffsets(container) {
|
|
129
|
-
const sel = window.getSelection();
|
|
130
|
-
if (!sel || sel.isCollapsed)
|
|
131
|
-
return null;
|
|
132
|
-
return getRangeOffsets(container, sel.getRangeAt(0));
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Offsets for an arbitrary range inside `container` — an InputEvent's `getTargetRanges()`
|
|
136
|
-
* pending-edit range is not the live selection (a word delete at a collapsed caret reports
|
|
137
|
-
* the whole word). Null when either endpoint sits outside the container.
|
|
138
|
-
*/
|
|
139
|
-
export function getRangeOffsets(container, range) {
|
|
140
|
-
if (!container.contains(range.startContainer) || !container.contains(range.endContainer)) {
|
|
141
|
-
return null;
|
|
142
|
-
}
|
|
143
|
-
return {
|
|
144
|
-
start: nodeOffsetToContent(container, range.startContainer, range.startOffset),
|
|
145
|
-
end: nodeOffsetToContent(container, range.endContainer, range.endOffset)
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
export function hasSelection() {
|
|
149
|
-
const sel = window.getSelection();
|
|
150
|
-
return Boolean(sel && !sel.isCollapsed);
|
|
151
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Reveal-target anchor. While a reveal is in flight the top-level windowing scope's
|
|
3
|
-
* `correctAnchor` re-asserts the target's screen position at its requested `block`
|
|
4
|
-
* placement instead of anchoring the top-of-viewport block, so image-decode churn
|
|
5
|
-
* above it can't shrink the document and clamp the scroll off it. One slot with
|
|
6
|
-
* per-call ownership; a plain closed-over value, never reactive `$state`.
|
|
7
|
-
*/
|
|
8
|
-
export type RevealBlock = 'nearest' | 'center';
|
|
9
|
-
export interface RevealTarget {
|
|
10
|
-
/** The full path the reveal was asked for, not a top-level narrowing. */
|
|
11
|
-
path: number[];
|
|
12
|
-
block: RevealBlock;
|
|
13
|
-
}
|
|
14
|
-
/** One `scrollTo`'s hold on the slot. */
|
|
15
|
-
export interface RevealClaim {
|
|
16
|
-
/** Drop the pin, iff this claim still holds it — a superseded claimant's release is a no-op. */
|
|
17
|
-
release(): void;
|
|
18
|
-
/** True once a LATER claim was minted — the only signal that another reveal owns the
|
|
19
|
-
* viewport. An empty slot (a user or self release) is not one, and is no reason for a
|
|
20
|
-
* reveal in flight to abandon what it was asked to do. */
|
|
21
|
-
isSuperseded(): boolean;
|
|
22
|
-
}
|
|
23
|
-
export interface RevealAnchorState {
|
|
24
|
-
get(): RevealTarget | null;
|
|
25
|
-
/** Take the slot, superseding whoever held it. */
|
|
26
|
-
claim(path: readonly number[], block?: RevealBlock): RevealClaim;
|
|
27
|
-
/** Drop the pin whoever holds it — the user-intent release. */
|
|
28
|
-
releaseAll(): void;
|
|
29
|
-
}
|
|
30
|
-
export declare function createRevealAnchorState(): RevealAnchorState;
|