@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
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replacing a range of one leaf, and joining two leaves, the way in-leaf edits and merges
|
|
3
|
+
* write them: cut back to the painted text, off any surrogate pair, and in live mode with the
|
|
4
|
+
* delimiter runs the join strands dropped, typed text included (`docs/design/live-mode.md` § 4.5).
|
|
5
|
+
*/
|
|
6
|
+
import { ownTrailingLineEnding, snapToScalarBoundary, trimTrailingLineEnding } from '../core/lines';
|
|
7
|
+
import { getLiveJoinSeamCleaner } from '../schema/inline-construct-policy';
|
|
8
|
+
import { normalizeOwnRaw } from './node-primitives';
|
|
9
|
+
import { cutBeforeSuffix, joinKeepingSuffix } from './structural-suffix';
|
|
10
|
+
/** `[start, end)` of `node` replaced by `typed`, the join cleaned against where `store` keeps it. */
|
|
11
|
+
export function replaceRangeInLeaf(node, range, typed, store) {
|
|
12
|
+
// Only a drawn range can reach bytes the user never saw; a caret insert goes where the caret is.
|
|
13
|
+
const painted = range.start !== range.end && store.reading.hidesDelimitersAtCaret()
|
|
14
|
+
? { start: cutBeforeSuffix(node, range.start), end: cutBeforeSuffix(node, range.end) }
|
|
15
|
+
: range;
|
|
16
|
+
const start = snapToScalarBoundary(node.raw, painted.start);
|
|
17
|
+
// An inverted range replaces nothing: the text goes in at its start.
|
|
18
|
+
const end = Math.max(start, snapToScalarBoundary(node.raw, painted.end));
|
|
19
|
+
if (start < end) {
|
|
20
|
+
const join = cleanJoin({ node, offset: start }, { node, offset: end }, typed, store, same);
|
|
21
|
+
if (join.cleaned) {
|
|
22
|
+
const { raw, seam } = withTyped(join.joined, typed);
|
|
23
|
+
return { raw, caret: seam + typed.length, range: { start, end }, matchesBrowserEdit: false };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const display = trimTrailingLineEnding(node.raw);
|
|
27
|
+
return {
|
|
28
|
+
raw: display.slice(0, start) + typed + display.slice(end) + ownTrailingLineEnding(node.raw),
|
|
29
|
+
caret: start + typed.length,
|
|
30
|
+
range: { start, end },
|
|
31
|
+
matchesBrowserEdit: start === range.start && end === range.end
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/** The bytes `head` up to its offset and `tail` from its offset make with `typed` between them,
|
|
35
|
+
* `seam` where `typed` starts. `tail`'s bytes take its kind's write rule, in `lineEnding`. */
|
|
36
|
+
export function joinLeaves(head, tail, typed, store, lineEnding) {
|
|
37
|
+
const writeTail = (bytes) => normalizeOwnRaw(tail.node, bytes, lineEnding);
|
|
38
|
+
return withTyped(cleanJoin(head, tail, typed, store, writeTail).joined, typed);
|
|
39
|
+
}
|
|
40
|
+
/** `join.mergedRaw` minus the delimiter runs the join left unpaired, where the reading hides
|
|
41
|
+
* delimiters. */
|
|
42
|
+
export function cleanJoinedRaw(join) {
|
|
43
|
+
const literal = { raw: join.mergedRaw, seam: join.seam };
|
|
44
|
+
if (!join.store.reading.hidesDelimitersAtCaret())
|
|
45
|
+
return literal;
|
|
46
|
+
return getLiveJoinSeamCleaner()?.(join) ?? literal;
|
|
47
|
+
}
|
|
48
|
+
// ── The join ─────────────────────────────────────────────────────────────────
|
|
49
|
+
function cleanJoin(head, tail, typed, store, writeTail) {
|
|
50
|
+
const merged = joinKeepingSuffix(head.node, head.offset, tail.node, tail.offset, writeTail);
|
|
51
|
+
const joined = cleanJoinedRaw({
|
|
52
|
+
mergedRaw: merged.raw,
|
|
53
|
+
seam: merged.start,
|
|
54
|
+
start: { node: head.node, offset: merged.start },
|
|
55
|
+
end: { node: tail.node, offset: merged.end },
|
|
56
|
+
typed,
|
|
57
|
+
store
|
|
58
|
+
});
|
|
59
|
+
return { joined, cleaned: joined.raw !== merged.raw };
|
|
60
|
+
}
|
|
61
|
+
/** The tail of a range inside one leaf: that leaf's write rule runs once, when the bytes are
|
|
62
|
+
* installed. */
|
|
63
|
+
const same = (bytes) => bytes;
|
|
64
|
+
const withTyped = (join, typed) => ({
|
|
65
|
+
raw: join.raw.slice(0, join.seam) + typed + join.raw.slice(join.seam),
|
|
66
|
+
seam: join.seam
|
|
67
|
+
});
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { NodeView } from '../../core/node-views';
|
|
2
2
|
/**
|
|
3
|
-
* A list item is
|
|
4
|
-
*
|
|
5
|
-
* the first paragraph happens to be empty.
|
|
3
|
+
* A list item is empty to the user when every leaf's raw is blank; checking only the first child
|
|
4
|
+
* would drop trailing content under an empty first paragraph.
|
|
6
5
|
*/
|
|
7
6
|
export declare function isItemUserEmpty(item: NodeView): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { isBlankText } from '../../core/lines';
|
|
1
2
|
/**
|
|
2
|
-
* A list item is
|
|
3
|
-
*
|
|
4
|
-
* the first paragraph happens to be empty.
|
|
3
|
+
* A list item is empty to the user when every leaf's raw is blank; checking only the first child
|
|
4
|
+
* would drop trailing content under an empty first paragraph.
|
|
5
5
|
*/
|
|
6
6
|
export function isItemUserEmpty(item) {
|
|
7
7
|
if (!item.children || item.children.length === 0)
|
|
@@ -11,7 +11,7 @@ export function isItemUserEmpty(item) {
|
|
|
11
11
|
if (!isItemUserEmpty(child))
|
|
12
12
|
return false;
|
|
13
13
|
}
|
|
14
|
-
else if ((child.raw ?? '')
|
|
14
|
+
else if (!isBlankText(child.raw ?? '')) {
|
|
15
15
|
return false;
|
|
16
16
|
}
|
|
17
17
|
}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import type { CstNode } from '../../core/nodes';
|
|
2
2
|
import type { NodeView } from '../../core/node-views';
|
|
3
|
+
import type { LineEnding } from '../../core/lines';
|
|
3
4
|
/**
|
|
4
|
-
* The
|
|
5
|
-
* `
|
|
6
|
-
* nested items rejoin the surviving halves; everything else lifts as a top-level block.
|
|
7
|
-
* `paragraphIndex` is the exit paragraph's slot, the caller's focus target. Input is not
|
|
8
|
-
* mutated.
|
|
5
|
+
* The replacement when an item exits its list: the list's halves around a fresh exit paragraph at
|
|
6
|
+
* `paragraphIndex`, the item's same-type nested items rejoining the halves and the rest lifted.
|
|
9
7
|
*/
|
|
10
|
-
export declare function buildExitReplacement(list: NodeView, itemIndex: number): {
|
|
8
|
+
export declare function buildExitReplacement(list: NodeView, itemIndex: number, lineEnding: LineEnding): {
|
|
11
9
|
blocks: CstNode[];
|
|
12
10
|
paragraphIndex: number;
|
|
13
11
|
};
|
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
import { metadataOf } from '../../core/nodes';
|
|
2
|
-
import { trailingLineEnding } from '../../core/lines';
|
|
3
2
|
import { cloneNode } from '../clone';
|
|
4
3
|
import { emptyParagraph } from '../node-primitives';
|
|
5
4
|
import { assembleListHalf } from './list-builders';
|
|
6
5
|
import { partitionItemChildren } from './item-partition';
|
|
7
6
|
import { orderedBaseOf } from './ordered-markers';
|
|
8
7
|
/**
|
|
9
|
-
* The
|
|
10
|
-
* `
|
|
11
|
-
* nested items rejoin the surviving halves; everything else lifts as a top-level block.
|
|
12
|
-
* `paragraphIndex` is the exit paragraph's slot, the caller's focus target. Input is not
|
|
13
|
-
* mutated.
|
|
8
|
+
* The replacement when an item exits its list: the list's halves around a fresh exit paragraph at
|
|
9
|
+
* `paragraphIndex`, the item's same-type nested items rejoining the halves and the rest lifted.
|
|
14
10
|
*/
|
|
15
|
-
export function buildExitReplacement(list, itemIndex) {
|
|
11
|
+
export function buildExitReplacement(list, itemIndex, lineEnding) {
|
|
16
12
|
const items = list.children ?? [];
|
|
17
13
|
const exitedItem = items[itemIndex];
|
|
18
14
|
const parentOrdered = metadataOf(list, 'list')?.ordered ?? false;
|
|
@@ -24,8 +20,7 @@ export function buildExitReplacement(list, itemIndex) {
|
|
|
24
20
|
const wasFirstItem = itemIndex === 0;
|
|
25
21
|
const firstHalfItems = wasFirstItem ? [] : [...before, ...promotedItems];
|
|
26
22
|
const secondHalfItems = wasFirstItem ? [...promotedItems, ...after] : after;
|
|
27
|
-
// Every byte this op
|
|
28
|
-
const lineEnding = trailingLineEnding(list.raw);
|
|
23
|
+
// Every byte this op creates is a line ending, the document's.
|
|
29
24
|
const exitParagraph = emptyParagraph('', lineEnding);
|
|
30
25
|
// Preserve the original list's starting number across the split.
|
|
31
26
|
const base = orderedBaseOf(items[0]);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
* matches the parent gives its items to the parent level, everything else lifts out as a
|
|
2
|
+
* The partition the first-item unwrap and the empty-item exit share: a nested list whose
|
|
3
|
+
* `ordered` matches the parent gives its items to the parent level, everything else lifts out as a
|
|
4
4
|
* sibling block. Output is fully owned; the input is not mutated.
|
|
5
5
|
*/
|
|
6
6
|
import type { CstNode } from '../../core/nodes';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
* matches the parent gives its items to the parent level, everything else lifts out as a
|
|
2
|
+
* The partition the first-item unwrap and the empty-item exit share: a nested list whose
|
|
3
|
+
* `ordered` matches the parent gives its items to the parent level, everything else lifts out as a
|
|
4
4
|
* sibling block. Output is fully owned; the input is not mutated.
|
|
5
5
|
*/
|
|
6
6
|
import { metadataOf } from '../../core/nodes';
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
/** Constructors for list and listItem CST nodes. */
|
|
2
2
|
import type { CstNode, ListItemMetadata } from '../../core/nodes';
|
|
3
3
|
import type { NodeView } from '../../core/node-views';
|
|
4
|
+
import { type LineEnding } from '../../core/lines';
|
|
5
|
+
import { type FragmentReader } from './task-paragraph';
|
|
6
|
+
import type { GrammarView } from '../../schema/block-openers';
|
|
4
7
|
/**
|
|
5
8
|
* A list node carrying `items`, mirroring `template`'s metadata and affixes and
|
|
6
9
|
* renumbering ordered markers from `startNumber`. Items are mutated in place.
|
|
7
10
|
*/
|
|
8
11
|
export declare function assembleListHalf(template: NodeView, items: CstNode[], startNumber: number): CstNode;
|
|
9
12
|
/**
|
|
10
|
-
* A listItem mirroring `template`'s metadata/affixes. `children` are placed verbatim
|
|
11
|
-
* clone before passing if they are still referenced from the source tree.
|
|
13
|
+
* A listItem mirroring `template`'s metadata/affixes. `children` are placed verbatim, so
|
|
14
|
+
* clone them before passing if they are still referenced from the source tree.
|
|
12
15
|
*/
|
|
13
16
|
export declare function buildListItemWithContent(template: NodeView, children: CstNode[]): CstNode;
|
|
14
17
|
/**
|
|
@@ -17,28 +20,27 @@ export declare function buildListItemWithContent(template: NodeView, children: C
|
|
|
17
20
|
*/
|
|
18
21
|
export declare function buildListItem(metadata: ListItemMetadata, children: CstNode[]): CstNode;
|
|
19
22
|
/**
|
|
20
|
-
* A bare list shell
|
|
21
|
-
*
|
|
22
|
-
* moved items are unshared before being written (`unshare.ts`).
|
|
23
|
+
* A bare list shell that neither renumbers nor rebuilds raw; a live-tree caller does both through
|
|
24
|
+
* `sharing`, so the moved items are copied before being written.
|
|
23
25
|
*/
|
|
24
26
|
export declare function buildListShell(ordered: boolean, children: CstNode[]): CstNode;
|
|
25
27
|
/**
|
|
26
|
-
*
|
|
27
|
-
* leading
|
|
28
|
-
* double-space markers after a word-boundary split. Null on an empty side. `raw` overrides
|
|
29
|
-
* the leaf's own bytes, which a paste that ran a delete half first supplies.
|
|
28
|
+
* Split a leaf's raw at `offset` for a paste, each half read as its landing slot reads it, the
|
|
29
|
+
* trailing half losing one leading space or tab so the new marker's space isn't doubled.
|
|
30
30
|
*/
|
|
31
|
-
export declare function splitLeafForPaste(leaf: CstNode, offset: number, raw
|
|
31
|
+
export declare function splitLeafForPaste(leaf: CstNode, offset: number, ending: LineEnding, raw: string | undefined, read: {
|
|
32
|
+
leading: FragmentReader;
|
|
33
|
+
trailing: FragmentReader;
|
|
34
|
+
}): {
|
|
32
35
|
leadingNode: CstNode | null;
|
|
33
|
-
|
|
34
|
-
lineEnding:
|
|
36
|
+
trailingNodes: CstNode[];
|
|
37
|
+
lineEnding: LineEnding;
|
|
35
38
|
};
|
|
36
39
|
/**
|
|
37
|
-
* The
|
|
38
|
-
*
|
|
39
|
-
* boundary. `targetRaw` overrides the target leaf's bytes, as in `splitLeafForPaste`.
|
|
40
|
+
* The items replacing `item` when a paste splits it at `(innerIndex, offset)`; either is null when
|
|
41
|
+
* the caret sits flush against a boundary.
|
|
40
42
|
*/
|
|
41
|
-
export declare function buildSplitItems(item: CstNode, innerIndex: number, offset: number, targetRaw
|
|
43
|
+
export declare function buildSplitItems(item: CstNode, innerIndex: number, offset: number, ending: LineEnding, targetRaw: string | undefined, grammar: GrammarView): {
|
|
42
44
|
leadingItem: CstNode | null;
|
|
43
45
|
trailingItem: CstNode | null;
|
|
44
46
|
};
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
/** Constructors for list and listItem CST nodes. */
|
|
2
|
-
import {
|
|
2
|
+
import { trailingLineEnding } from '../../core/lines';
|
|
3
3
|
import { rebuildListItemRaw, rebuildListRaw } from '../../schema/container-rebuilders';
|
|
4
4
|
import { cloneMetadata, cloneNode } from '../clone';
|
|
5
|
-
import { parseFirstBlock } from '../parse-block';
|
|
5
|
+
import { parseCutResidue, parseFirstBlock } from '../parse-block';
|
|
6
|
+
import { cutKeepingStructure } from '../structural-suffix';
|
|
6
7
|
import { renumberOrderedListFrom } from './ordered-markers';
|
|
7
8
|
import { assignIds } from '../../block-id';
|
|
9
|
+
import { readBlocks } from '../../core/parser';
|
|
10
|
+
import { emptyParagraph } from '../node-primitives';
|
|
11
|
+
import { fragmentReaderAt } from './task-paragraph';
|
|
8
12
|
// ── List / item construction ─────────────────────────────────────────────────
|
|
9
13
|
/**
|
|
10
14
|
* A list node carrying `items`, mirroring `template`'s metadata and affixes and
|
|
@@ -32,8 +36,8 @@ export function assembleListHalf(template, items, startNumber) {
|
|
|
32
36
|
return half;
|
|
33
37
|
}
|
|
34
38
|
/**
|
|
35
|
-
* A listItem mirroring `template`'s metadata/affixes. `children` are placed verbatim
|
|
36
|
-
* clone before passing if they are still referenced from the source tree.
|
|
39
|
+
* A listItem mirroring `template`'s metadata/affixes. `children` are placed verbatim, so
|
|
40
|
+
* clone them before passing if they are still referenced from the source tree.
|
|
37
41
|
*/
|
|
38
42
|
export function buildListItemWithContent(template, children) {
|
|
39
43
|
const metadata = template.metadata
|
|
@@ -66,9 +70,8 @@ function mintListItem(metadata, innerPrefix, innerSuffix, children) {
|
|
|
66
70
|
return item;
|
|
67
71
|
}
|
|
68
72
|
/**
|
|
69
|
-
* A bare list shell
|
|
70
|
-
*
|
|
71
|
-
* moved items are unshared before being written (`unshare.ts`).
|
|
73
|
+
* A bare list shell that neither renumbers nor rebuilds raw; a live-tree caller does both through
|
|
74
|
+
* `sharing`, so the moved items are copied before being written.
|
|
72
75
|
*/
|
|
73
76
|
export function buildListShell(ordered, children) {
|
|
74
77
|
const metadata = { ordered };
|
|
@@ -83,47 +86,73 @@ export function buildListShell(ordered, children) {
|
|
|
83
86
|
}
|
|
84
87
|
// ── Paste split ──────────────────────────────────────────────────────────────
|
|
85
88
|
/**
|
|
86
|
-
*
|
|
87
|
-
* leading
|
|
88
|
-
* double-space markers after a word-boundary split. Null on an empty side. `raw` overrides
|
|
89
|
-
* the leaf's own bytes, which a paste that ran a delete half first supplies.
|
|
89
|
+
* Split a leaf's raw at `offset` for a paste, each half read as its landing slot reads it, the
|
|
90
|
+
* trailing half losing one leading space or tab so the new marker's space isn't doubled.
|
|
90
91
|
*/
|
|
91
|
-
export function splitLeafForPaste(leaf, offset, raw = leaf.raw) {
|
|
92
|
-
const lineEnding = trailingLineEnding(raw);
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
const leadingNode = leadingText.length > 0 ? parseFirstBlock(leadingText + lineEnding) : null;
|
|
100
|
-
const trailingNode = trailingText.length > 0 ? parseFirstBlock(trailingText + lineEnding) : null;
|
|
101
|
-
return { leadingNode, trailingNode, lineEnding };
|
|
92
|
+
export function splitLeafForPaste(leaf, offset, ending, raw = leaf.raw, read) {
|
|
93
|
+
const lineEnding = trailingLineEnding(raw, ending);
|
|
94
|
+
const { head: leadingText, rest } = cutKeepingStructure({ ...leaf, raw }, offset);
|
|
95
|
+
const trailingText = rest.replace(/^[ \t]/, '');
|
|
96
|
+
const leadingNode = leadingText.length > 0 ? parseFirstBlock(leadingText + lineEnding, read.leading) : null;
|
|
97
|
+
// The line the cut ended is dropped: the trailing item's marker starts a line of its own.
|
|
98
|
+
const trailingNodes = parseCutResidue(trailingText, lineEnding, read.trailing).blocks;
|
|
99
|
+
return { leadingNode, trailingNodes, lineEnding };
|
|
102
100
|
}
|
|
103
101
|
/**
|
|
104
|
-
* The
|
|
105
|
-
*
|
|
106
|
-
* boundary. `targetRaw` overrides the target leaf's bytes, as in `splitLeafForPaste`.
|
|
102
|
+
* The items replacing `item` when a paste splits it at `(innerIndex, offset)`; either is null when
|
|
103
|
+
* the caret sits flush against a boundary.
|
|
107
104
|
*/
|
|
108
|
-
export function buildSplitItems(item, innerIndex, offset, targetRaw) {
|
|
105
|
+
export function buildSplitItems(item, innerIndex, offset, ending, targetRaw, grammar) {
|
|
109
106
|
if (!item.children)
|
|
110
107
|
return { leadingItem: null, trailingItem: null };
|
|
111
108
|
const targetLeaf = item.children[innerIndex];
|
|
112
109
|
if (!targetLeaf)
|
|
113
110
|
return { leadingItem: null, trailingItem: null };
|
|
114
|
-
|
|
111
|
+
// Both halves keep the item's marker, so the leading one stays at `innerIndex` under it and
|
|
112
|
+
// the trailing one opens its own copy of the item.
|
|
113
|
+
const { leadingNode, trailingNodes, lineEnding } = splitLeafForPaste(targetLeaf, offset, ending, targetRaw ?? targetLeaf.raw, {
|
|
114
|
+
leading: fragmentReaderAt(item, innerIndex, grammar),
|
|
115
|
+
trailing: fragmentReaderAt(item, 0, grammar)
|
|
116
|
+
});
|
|
115
117
|
const leadingChildren = item.children.slice(0, innerIndex).map(cloneNode);
|
|
116
118
|
if (leadingNode)
|
|
117
119
|
leadingChildren.push(leadingNode);
|
|
118
120
|
const trailingChildren = [];
|
|
119
|
-
|
|
120
|
-
trailingChildren.push(
|
|
121
|
+
for (const node of trailingNodes)
|
|
122
|
+
trailingChildren.push(node);
|
|
121
123
|
for (const c of item.children.slice(innerIndex + 1))
|
|
122
124
|
trailingChildren.push(cloneNode(c));
|
|
123
125
|
if (trailingChildren[0])
|
|
124
126
|
trailingChildren[0].leadingTrivia = '';
|
|
125
127
|
return {
|
|
126
128
|
leadingItem: leadingChildren.length > 0 ? buildListItemWithContent(item, leadingChildren) : null,
|
|
127
|
-
trailingItem: trailingChildren.length > 0
|
|
129
|
+
trailingItem: trailingChildren.length > 0
|
|
130
|
+
? trailingItemFor(item, trailingChildren, lineEnding, grammar)
|
|
131
|
+
: null
|
|
128
132
|
};
|
|
129
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* The item holding the text after a split, its first block on the marker line unless the reload
|
|
136
|
+
* reads that line otherwise (indented code reads as a wider marker), then below an empty marker.
|
|
137
|
+
*/
|
|
138
|
+
function trailingItemFor(template, children, lineEnding, grammar) {
|
|
139
|
+
const onMarkerLine = buildListItemWithContent(template, children);
|
|
140
|
+
if (readsBackAsBuilt(onMarkerLine, grammar))
|
|
141
|
+
return onMarkerLine;
|
|
142
|
+
const belowMarker = buildListItemWithContent(template, [
|
|
143
|
+
emptyParagraph('', lineEnding),
|
|
144
|
+
...children
|
|
145
|
+
]);
|
|
146
|
+
return readsBackAsBuilt(belowMarker, grammar) ? belowMarker : onMarkerLine;
|
|
147
|
+
}
|
|
148
|
+
/** Whether `item`'s bytes, read alone, give back one item holding the same blocks. */
|
|
149
|
+
function readsBackAsBuilt(item, grammar) {
|
|
150
|
+
const blocks = readBlocks(item.raw, { grammar, scope: 'fragment' }).children;
|
|
151
|
+
const list = blocks.length === 1 && blocks[0].kind === 'list' ? blocks[0] : null;
|
|
152
|
+
const read = list?.children?.length === 1 ? list.children[0] : null;
|
|
153
|
+
const built = item.children ?? [];
|
|
154
|
+
return (read?.children?.length === built.length &&
|
|
155
|
+
read.children.every((child, i) => child.kind === built[i].kind &&
|
|
156
|
+
child.raw === built[i].raw &&
|
|
157
|
+
child.leadingTrivia === built[i].leadingTrivia));
|
|
158
|
+
}
|
|
@@ -9,28 +9,19 @@ export declare function readOrderedSuffix(list: NodeView): string;
|
|
|
9
9
|
/** Increment an ordered marker's numeric prefix, preserving its suffix. */
|
|
10
10
|
export declare function bumpOrderedMarker(marker: string): string;
|
|
11
11
|
/**
|
|
12
|
-
* Renumber an ordered list's items
|
|
13
|
-
*
|
|
14
|
-
* Every renumbered item's metadata and raw is WRITTEN, so a live-tree caller must pass
|
|
15
|
-
* `sharing`; construction-time callers on fresh nodes may omit it.
|
|
12
|
+
* Renumber an ordered list's items from `fromIndex`, keeping marker suffixes. Each item's metadata
|
|
13
|
+
* and raw is written, so a caller on the live tree must pass `sharing`.
|
|
16
14
|
*/
|
|
17
15
|
export declare function renumberOrderedList(list: CstNode, fromIndex?: number, sharing?: SharingState): void;
|
|
18
|
-
/**
|
|
19
|
-
* Renumber an ordered list from an arbitrary `base`: seed item 0's marker with `base`
|
|
20
|
-
* (suffix-preserving), then continue the sequence from item 1. No-op on unordered or
|
|
21
|
-
* childless lists.
|
|
22
|
-
*/
|
|
16
|
+
/** Renumber an ordered list starting at `base`, keeping marker suffixes. */
|
|
23
17
|
export declare function renumberOrderedListFrom(list: CstNode, base: number, sharing?: SharingState): void;
|
|
24
18
|
/**
|
|
25
|
-
* Rewrite `item`'s marker
|
|
26
|
-
*
|
|
27
|
-
* renumber pass's job: only the glyph and punctuation suffix reconcile here.
|
|
19
|
+
* Rewrite `item`'s marker glyph and suffix to match `parentList`'s first item; the number is left
|
|
20
|
+
* to the caller's renumber pass.
|
|
28
21
|
*/
|
|
29
22
|
export declare function normalizeItemMarkerToList(item: CstNode, parentList: CstNode): void;
|
|
30
23
|
/**
|
|
31
|
-
* Rewrite pasted items' markers to the enclosing list's style
|
|
32
|
-
*
|
|
33
|
-
* any splice: `$state` wraps entries lazily, so a marker written to a newly-spliced item
|
|
34
|
-
* bypasses reactivity.
|
|
24
|
+
* Rewrite pasted items' markers to the enclosing list's style before the splice, since `$state`
|
|
25
|
+
* wraps entries lazily and a marker written to an item already spliced would bypass reactivity.
|
|
35
26
|
*/
|
|
36
27
|
export declare function templatePastedItemMarkers(items: CstNode[], outer: CstNode, firstIndex: number): void;
|
|
@@ -25,10 +25,8 @@ export function bumpOrderedMarker(marker) {
|
|
|
25
25
|
return marker.replace(/^(\d+)/, (_, n) => String(Number(n) + 1));
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
|
-
* Renumber an ordered list's items
|
|
29
|
-
*
|
|
30
|
-
* Every renumbered item's metadata and raw is WRITTEN, so a live-tree caller must pass
|
|
31
|
-
* `sharing`; construction-time callers on fresh nodes may omit it.
|
|
28
|
+
* Renumber an ordered list's items from `fromIndex`, keeping marker suffixes. Each item's metadata
|
|
29
|
+
* and raw is written, so a caller on the live tree must pass `sharing`.
|
|
32
30
|
*/
|
|
33
31
|
export function renumberOrderedList(list, fromIndex = 0, sharing) {
|
|
34
32
|
if (!list.children)
|
|
@@ -44,11 +42,7 @@ export function renumberOrderedList(list, fromIndex = 0, sharing) {
|
|
|
44
42
|
rebuildListItemRaw(item);
|
|
45
43
|
}
|
|
46
44
|
}
|
|
47
|
-
/**
|
|
48
|
-
* Renumber an ordered list from an arbitrary `base`: seed item 0's marker with `base`
|
|
49
|
-
* (suffix-preserving), then continue the sequence from item 1. No-op on unordered or
|
|
50
|
-
* childless lists.
|
|
51
|
-
*/
|
|
45
|
+
/** Renumber an ordered list starting at `base`, keeping marker suffixes. */
|
|
52
46
|
export function renumberOrderedListFrom(list, base, sharing) {
|
|
53
47
|
if (!metadataOf(list, 'list')?.ordered)
|
|
54
48
|
return;
|
|
@@ -62,9 +56,8 @@ export function renumberOrderedListFrom(list, base, sharing) {
|
|
|
62
56
|
}
|
|
63
57
|
// ── Style templating ─────────────────────────────────────────────────────────
|
|
64
58
|
/**
|
|
65
|
-
* Rewrite `item`'s marker
|
|
66
|
-
*
|
|
67
|
-
* renumber pass's job: only the glyph and punctuation suffix reconcile here.
|
|
59
|
+
* Rewrite `item`'s marker glyph and suffix to match `parentList`'s first item; the number is left
|
|
60
|
+
* to the caller's renumber pass.
|
|
68
61
|
*/
|
|
69
62
|
export function normalizeItemMarkerToList(item, parentList) {
|
|
70
63
|
const parentOrdered = metadataOf(parentList, 'list')?.ordered ?? false;
|
|
@@ -88,10 +81,8 @@ export function normalizeItemMarkerToList(item, parentList) {
|
|
|
88
81
|
rebuildListItemRaw(item);
|
|
89
82
|
}
|
|
90
83
|
/**
|
|
91
|
-
* Rewrite pasted items' markers to the enclosing list's style
|
|
92
|
-
*
|
|
93
|
-
* any splice: `$state` wraps entries lazily, so a marker written to a newly-spliced item
|
|
94
|
-
* bypasses reactivity.
|
|
84
|
+
* Rewrite pasted items' markers to the enclosing list's style before the splice, since `$state`
|
|
85
|
+
* wraps entries lazily and a marker written to an item already spliced would bypass reactivity.
|
|
95
86
|
*/
|
|
96
87
|
export function templatePastedItemMarkers(items, outer, firstIndex) {
|
|
97
88
|
if (outer.kind !== 'list')
|
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Keeps a list item's task metadata in step with its first block. The parser keeps the task marker
|
|
3
|
+
* in the item's metadata, but a write changes only the block, so every write into an item's first
|
|
4
|
+
* slot goes through `writeKeepingTaskMarker`, which reconciles the marker with what stands there.
|
|
5
5
|
*/
|
|
6
6
|
import type { CstNode } from '../../core/nodes';
|
|
7
|
+
import type { NodeView } from '../../core/node-views';
|
|
8
|
+
import type { SharingState } from '../sharing';
|
|
9
|
+
/** Runs `write` against the child at `slot`, then reconciles the owner's task marker with what
|
|
10
|
+
* stands there now. Pass the owner as the tree holds it once any copy before the write is made. */
|
|
11
|
+
export declare function writeKeepingTaskMarker<T>(owner: CstNode | undefined, children: readonly CstNode[], slot: number, sharing: SharingState | undefined, write: () => T): T;
|
|
7
12
|
/**
|
|
8
|
-
* Align the item's task fields with
|
|
9
|
-
*
|
|
10
|
-
* content survives.
|
|
13
|
+
* Align the item's task fields with a fresh parse of its first line, putting a demoted marker's
|
|
14
|
+
* bytes back in the paragraph; the marker is dropped only if it stood before the replaced block.
|
|
11
15
|
*/
|
|
12
|
-
export declare function reconcileTaskMetadata(listItem: CstNode): void;
|
|
16
|
+
export declare function reconcileTaskMetadata(listItem: CstNode, writtenIndex: number, markerStoodBefore: boolean, sharing?: SharingState): void;
|
|
17
|
+
/**
|
|
18
|
+
* How far back a caret in the first paragraph moves when writing `text` there takes a task marker
|
|
19
|
+
* off its front; read before the write, while the item still holds its current marker.
|
|
20
|
+
*/
|
|
21
|
+
export declare function taskMarkerCaretShift(listItem: NodeView, text: string): number;
|
|
@@ -1,47 +1,104 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Keeps a list item's task metadata in step with its first block. The parser keeps the task marker
|
|
3
|
+
* in the item's metadata, but a write changes only the block, so every write into an item's first
|
|
4
|
+
* slot goes through `writeKeepingTaskMarker`, which reconciles the marker with what stands there.
|
|
5
5
|
*/
|
|
6
6
|
import { metadataOf } from '../../core/nodes';
|
|
7
|
-
|
|
7
|
+
import { trimTrailingLineEnding } from '../../core/lines';
|
|
8
|
+
import { matchTaskCheckbox } from '../../core/parsers/list';
|
|
9
|
+
import { ensureUnsharedChild } from '../unshare';
|
|
10
|
+
/** Runs `write` against the child at `slot`, then reconciles the owner's task marker with what
|
|
11
|
+
* stands there now. Pass the owner as the tree holds it once any copy before the write is made. */
|
|
12
|
+
export function writeKeepingTaskMarker(owner, children, slot, sharing, write) {
|
|
13
|
+
// Read before the write, which can put a block there no task marker may stand before.
|
|
14
|
+
const stood = children[slot] !== undefined && taskMarkerMayStandBefore(children[slot]);
|
|
15
|
+
const result = write();
|
|
16
|
+
if (owner)
|
|
17
|
+
reconcileTaskMetadata(owner, slot, stood, sharing);
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
/** Whether a task marker may stand in front of this block: only its own paragraph (GFM task lists). */
|
|
21
|
+
function taskMarkerMayStandBefore(block) {
|
|
22
|
+
return block.kind === 'paragraph';
|
|
23
|
+
}
|
|
8
24
|
/**
|
|
9
|
-
* Align the item's task fields with
|
|
10
|
-
*
|
|
11
|
-
* content survives.
|
|
25
|
+
* Align the item's task fields with a fresh parse of its first line, putting a demoted marker's
|
|
26
|
+
* bytes back in the paragraph; the marker is dropped only if it stood before the replaced block.
|
|
12
27
|
*/
|
|
13
|
-
export function reconcileTaskMetadata(listItem) {
|
|
14
|
-
if (listItem.kind !== 'listItem')
|
|
28
|
+
export function reconcileTaskMetadata(listItem, writtenIndex, markerStoodBefore, sharing) {
|
|
29
|
+
if (listItem.kind !== 'listItem' || writtenIndex !== 0)
|
|
15
30
|
return;
|
|
16
31
|
const firstChild = listItem.children?.[0];
|
|
17
|
-
if (!firstChild
|
|
32
|
+
if (!firstChild)
|
|
18
33
|
return;
|
|
19
34
|
const meta = metadataOf(listItem, 'listItem');
|
|
20
35
|
if (!meta)
|
|
21
36
|
return;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
37
|
+
if (firstChild.kind !== 'paragraph') {
|
|
38
|
+
// A task marker stands before a paragraph (GFM § 5.3), so the write that puts a block there
|
|
39
|
+
// the marker cannot stand in front of gives the checkbox up with the paragraph it had.
|
|
40
|
+
if (!meta.taskItem || !markerStoodBefore)
|
|
41
|
+
return;
|
|
42
|
+
if (taskMarkerMayStandBefore(firstChild))
|
|
43
|
+
return;
|
|
44
|
+
meta.taskItem = false;
|
|
45
|
+
meta.taskMarker = null;
|
|
46
|
+
meta.taskChecked = false;
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const firstLineText = firstLineTextOf(firstChild.raw);
|
|
50
|
+
// The first line's ending stays with the rest of the paragraph.
|
|
51
|
+
const restRaw = firstChild.raw.slice(firstLineText.length);
|
|
52
|
+
const { match, kept } = splitTaskLine(meta, firstLineText);
|
|
27
53
|
if (match) {
|
|
28
|
-
const newTaskMarker = match[0];
|
|
29
|
-
const newTaskChecked = match[1].toLowerCase() === 'x';
|
|
30
54
|
const drift = meta.taskItem !== true ||
|
|
31
|
-
meta.taskMarker !==
|
|
32
|
-
meta.taskChecked !==
|
|
55
|
+
meta.taskMarker !== match.rawMarker ||
|
|
56
|
+
meta.taskChecked !== match.checked;
|
|
33
57
|
if (drift) {
|
|
34
58
|
meta.taskItem = true;
|
|
35
|
-
meta.taskMarker =
|
|
36
|
-
meta.taskChecked =
|
|
37
|
-
|
|
59
|
+
meta.taskMarker = match.rawMarker;
|
|
60
|
+
meta.taskChecked = match.checked;
|
|
61
|
+
ownedFirstChild(listItem, sharing).raw = kept + restRaw;
|
|
38
62
|
}
|
|
39
63
|
return;
|
|
40
64
|
}
|
|
41
65
|
if (meta.taskItem === true || meta.taskMarker !== null) {
|
|
42
|
-
|
|
66
|
+
ownedFirstChild(listItem, sharing).raw = kept + restRaw;
|
|
43
67
|
meta.taskItem = false;
|
|
44
68
|
meta.taskMarker = null;
|
|
45
69
|
meta.taskChecked = false;
|
|
46
70
|
}
|
|
47
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* How far back a caret in the first paragraph moves when writing `text` there takes a task marker
|
|
74
|
+
* off its front; read before the write, while the item still holds its current marker.
|
|
75
|
+
*/
|
|
76
|
+
export function taskMarkerCaretShift(listItem, text) {
|
|
77
|
+
if (listItem.kind !== 'listItem')
|
|
78
|
+
return 0;
|
|
79
|
+
const meta = metadataOf(listItem, 'listItem');
|
|
80
|
+
if (!meta)
|
|
81
|
+
return 0;
|
|
82
|
+
const firstLineText = firstLineTextOf(text);
|
|
83
|
+
return splitTaskLine(meta, firstLineText).kept.length - firstLineText.length;
|
|
84
|
+
}
|
|
85
|
+
/** The checkbox the item's first line reads as once `firstLineText` stands after the item's
|
|
86
|
+
* current marker, and the text its paragraph keeps: a demoted marker goes back into the text. */
|
|
87
|
+
function splitTaskLine(meta, firstLineText) {
|
|
88
|
+
const line = (meta.taskMarker ?? '') + firstLineText;
|
|
89
|
+
const match = matchTaskCheckbox(line);
|
|
90
|
+
if (match)
|
|
91
|
+
return { match, kept: line.slice(match.rawMarker.length) };
|
|
92
|
+
const demoted = meta.taskItem === true || meta.taskMarker !== null;
|
|
93
|
+
return { match: null, kept: demoted ? line : firstLineText };
|
|
94
|
+
}
|
|
95
|
+
/** The first line of `raw` without its ending. */
|
|
96
|
+
function firstLineTextOf(raw) {
|
|
97
|
+
const end = raw.indexOf('\n');
|
|
98
|
+
return trimTrailingLineEnding(end === -1 ? raw : raw.slice(0, end + 1));
|
|
99
|
+
}
|
|
100
|
+
/** The marker's bytes move between the item's metadata and its first child, so that child is
|
|
101
|
+
* copied out of the undo snapshot before it is written (`unshare.ts` header). */
|
|
102
|
+
function ownedFirstChild(listItem, sharing) {
|
|
103
|
+
return sharing ? ensureUnsharedChild(listItem, 0, sharing) : listItem.children[0];
|
|
104
|
+
}
|