@voithos-labs/aragonite 0.10.4 → 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 +11 -5
- package/dist/a11y-strings.js +60 -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 +12 -21
- 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 +603 -1126
- package/dist/components/Editor.svelte.d.ts +9 -20
- package/dist/components/GapCaret.svelte +26 -59
- package/dist/components/SelectionOverlay.svelte +26 -51
- package/dist/components/SelectionOverlay.svelte.d.ts +5 -3
- 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 +72 -87
- 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 +29 -34
- 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 +57 -39
- 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 +141 -203
- 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 +45 -90
- package/dist/components/blocks/list/ListItemBlock.svelte +93 -147
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +1 -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 +8 -6
- package/dist/components/blocks/text/click-snap-guard.js +10 -7
- 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 +150 -181
- 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 -108
- 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 +212 -199
- 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 +12 -35
- package/dist/components/drag-handle.js +22 -68
- 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 -24
- package/dist/components/editor-root-listeners.js +49 -24
- 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 +14 -26
- 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 +30 -35
- package/dist/components/menu/SelectionToolbar.svelte.d.ts +3 -5
- 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 +54 -75
- package/dist/core/inline/inline-widgets.js +54 -62
- 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 +31 -15
- 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 -6
- package/dist/cursor/height-oracle.js +26 -74
- 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 +14 -15
- package/dist/cursor/scrollport.js +7 -13
- 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 -14
- package/dist/cursor/visual-lines.js +45 -46
- package/dist/cursor/widget-edge-snap.d.ts +10 -15
- package/dist/cursor/widget-edge-snap.js +13 -12
- package/dist/cursor/widget-offset.d.ts +110 -104
- package/dist/cursor/widget-offset.js +344 -179
- 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 +30 -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 +28 -50
- package/dist/editor-actions/focus/focus-landing.d.ts +8 -11
- package/dist/editor-actions/focus/focus-landing.js +15 -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 +54 -82
- package/dist/editor-actions/plugin/container.js +105 -188
- 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 +88 -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 +37 -8
- package/dist/plugin.js +100 -77
- 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 +78 -67
- 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 -81
- 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 +51 -45
- 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 +15 -6
- 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 +141 -310
- 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 +78 -84
- package/dist/schema/commands.js +152 -117
- 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 +8 -10
- 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 +63 -80
- 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 +92 -125
- 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 +59 -96
- 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 +51 -134
- package/dist/selection/dead-space-caret.d.ts +19 -30
- package/dist/selection/dead-space-caret.js +70 -88
- package/dist/selection/drag-pointer.d.ts +7 -9
- package/dist/selection/drag-pointer.js +23 -33
- 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 -40
- package/dist/selection/keyboard-extend.js +94 -117
- package/dist/selection/multi-click.d.ts +13 -18
- package/dist/selection/multi-click.js +32 -38
- package/dist/selection/native-bridge.d.ts +29 -39
- package/dist/selection/native-bridge.js +78 -127
- package/dist/selection/nearest-block.d.ts +17 -12
- package/dist/selection/nearest-block.js +37 -18
- package/dist/selection/path-lookup.d.ts +25 -16
- package/dist/selection/path-lookup.js +101 -18
- package/dist/selection/path-math.d.ts +9 -11
- package/dist/selection/path-math.js +5 -7
- package/dist/selection/pointer-gesture.d.ts +5 -5
- package/dist/selection/pointer-gesture.js +5 -5
- package/dist/selection/pointer-session.d.ts +10 -16
- package/dist/selection/pointer-session.js +6 -7
- package/dist/selection/primitives.d.ts +64 -40
- package/dist/selection/primitives.js +57 -67
- 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 -23
- 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 +34 -16
- package/dist/selection/selection-drop.js +159 -95
- 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 +60 -53
- package/dist/styles/editor.css +201 -143
- 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 +9 -7
- package/dist/tree-operations/paste/replacement-parse.js +12 -10
- 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 +327 -205
- package/docs/guide/directives.md +7 -7
- package/docs/guide/plugin-api.md +253 -185
- package/docs/guide/plugin-guide.md +332 -235
- package/docs/guide/plugin-testing.md +96 -82
- package/package.json +12 -16
- 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/cursor/scroll-hold.d.ts +0 -10
- package/dist/cursor/scroll-hold.js +0 -22
- package/dist/invariants/split-landing.d.ts +0 -8
- package/dist/invariants/split-landing.js +0 -15
- 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 -31
- package/dist/tree-operations/paste/replace-block-at-parent.js +0 -78
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* The generation counter `unshare.ts` reads to decide whether a node must be copied before it
|
|
3
|
+
* is written. Undo bumps the counter at every snapshot and restore, after which any node marked
|
|
4
|
+
* earlier counts as shared. A missing `ownerEpoch` counts as shared too: an unnecessary copy is
|
|
5
|
+
* correct, a missed one corrupts history.
|
|
6
6
|
*/
|
|
7
7
|
export interface SharingState {
|
|
8
8
|
/** Bump after every snapshot push and every undo/redo restore. */
|
|
@@ -10,7 +10,7 @@ export interface SharingState {
|
|
|
10
10
|
isShared(node: {
|
|
11
11
|
ownerEpoch?: number;
|
|
12
12
|
}): boolean;
|
|
13
|
-
/**
|
|
13
|
+
/** Mark a freshly created or copied node as owned by the live tree. */
|
|
14
14
|
stamp(node: {
|
|
15
15
|
ownerEpoch?: number;
|
|
16
16
|
}): void;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The splice every mutation
|
|
3
|
-
* argument per item, and a list past its argument limit raises "Maximum call stack
|
|
4
|
-
* at the call (G4.60), so a list too long for one call goes in chunks. Splices in
|
|
5
|
-
* array keeps its identity and a `$state` proxy sees the writes
|
|
2
|
+
* The splice every mutation must use on a document-sized list. A spread hands the JavaScript
|
|
3
|
+
* runtime one argument per item, and a list past its argument limit raises "Maximum call stack
|
|
4
|
+
* size exceeded" at the call (G4.60), so a list too long for one call goes in chunks. Splices in
|
|
5
|
+
* place, so the array keeps its identity and a `$state` proxy sees the writes.
|
|
6
6
|
*/
|
|
7
|
-
/** Well under
|
|
7
|
+
/** Well under V8's argument limit, which measures around 125,000 on a desktop. */
|
|
8
8
|
export declare const INSERT_CHUNK = 50000;
|
|
9
9
|
export declare function spliceMany<T>(target: T[], at: number, deleteCount: number, items: readonly T[]): void;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The splice every mutation
|
|
3
|
-
* argument per item, and a list past its argument limit raises "Maximum call stack
|
|
4
|
-
* at the call (G4.60), so a list too long for one call goes in chunks. Splices in
|
|
5
|
-
* array keeps its identity and a `$state` proxy sees the writes
|
|
2
|
+
* The splice every mutation must use on a document-sized list. A spread hands the JavaScript
|
|
3
|
+
* runtime one argument per item, and a list past its argument limit raises "Maximum call stack
|
|
4
|
+
* size exceeded" at the call (G4.60), so a list too long for one call goes in chunks. Splices in
|
|
5
|
+
* place, so the array keeps its identity and a `$state` proxy sees the writes.
|
|
6
6
|
*/
|
|
7
|
-
/** Well under
|
|
7
|
+
/** Well under V8's argument limit, which measures around 125,000 on a desktop. */
|
|
8
8
|
export const INSERT_CHUNK = 50_000;
|
|
9
9
|
export function spliceMany(target, at, deleteCount, items) {
|
|
10
10
|
// One call while the list fits in one: splitting the delete off costs a second O(n) shift of
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one maker of `StoredAs`: how a leaf position stores and reads back bytes, derived from the
|
|
3
|
+
* tree. A store reads the tree the first time it is asked and keeps that answer, so make one per
|
|
4
|
+
* gesture, at the gesture, and drop it after (`docs/design/live-mode.md` § 4.5).
|
|
5
|
+
*/
|
|
6
|
+
import type { DocumentView } from '../core/node-views';
|
|
7
|
+
import type { Reading } from '../schema/reading';
|
|
8
|
+
import type { StoredAs } from '../schema/stored-as';
|
|
9
|
+
import { type WriteTarget } from './content-write';
|
|
10
|
+
/** The leaf at `path` in `doc`: the store its bytes go through, read when first asked. */
|
|
11
|
+
export declare function storedAsAt(doc: DocumentView, path: readonly number[], reading: Reading): StoredAs;
|
|
12
|
+
/** The same for slot `index` of a holder a caller already walked to, such as a join's target. */
|
|
13
|
+
export declare function storedAsIn(holder: WriteTarget, index: number, reading: Reading): StoredAs;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one maker of `StoredAs`: how a leaf position stores and reads back bytes, derived from the
|
|
3
|
+
* tree. A store reads the tree the first time it is asked and keeps that answer, so make one per
|
|
4
|
+
* gesture, at the gesture, and drop it after (`docs/design/live-mode.md` § 4.5).
|
|
5
|
+
*/
|
|
6
|
+
import { documentLineEnding } from '../core/lines';
|
|
7
|
+
import { tryGetBlockKindDescriptor } from '../schema/block-kind-descriptor';
|
|
8
|
+
import { legalizeWrite } from './content-write';
|
|
9
|
+
import { childSlotAt, fragmentReaderAt, readThroughItemMarker } from './list/task-paragraph';
|
|
10
|
+
/** The leaf at `path` in `doc`: the store its bytes go through, read when first asked. */
|
|
11
|
+
export function storedAsAt(doc, path, reading) {
|
|
12
|
+
return storeOver(reading, () => {
|
|
13
|
+
const { owner, index } = childSlotAt(doc, path);
|
|
14
|
+
const holder = owner
|
|
15
|
+
? { owner, children: owner.children ?? [], lineEnding: documentLineEnding(doc) }
|
|
16
|
+
: doc;
|
|
17
|
+
return { holder, index };
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/** The same for slot `index` of a holder a caller already walked to, such as a join's target. */
|
|
21
|
+
export function storedAsIn(holder, index, reading) {
|
|
22
|
+
return storeOver(reading, () => ({ holder, index }));
|
|
23
|
+
}
|
|
24
|
+
function storeOver(reading, locate) {
|
|
25
|
+
let found;
|
|
26
|
+
const slot = () => (found ??= locate());
|
|
27
|
+
return {
|
|
28
|
+
reading,
|
|
29
|
+
get surface() {
|
|
30
|
+
const { holder, index } = slot();
|
|
31
|
+
// A kind with no recognizer of its own stores text the parser never reads as a block.
|
|
32
|
+
const kind = holder.children[index].kind;
|
|
33
|
+
return tryGetBlockKindDescriptor(kind)?.contextDependentKind ? 'inline' : 'block';
|
|
34
|
+
},
|
|
35
|
+
stored(bytes) {
|
|
36
|
+
const { holder, index } = slot();
|
|
37
|
+
return legalizeWrite(holder, index, bytes, 'literal').text;
|
|
38
|
+
},
|
|
39
|
+
readSlot(stored) {
|
|
40
|
+
const { holder, index } = slot();
|
|
41
|
+
const owner = 'owner' in holder ? holder.owner : undefined;
|
|
42
|
+
if (index === 0 && owner?.kind === 'listItem') {
|
|
43
|
+
return readThroughItemMarker(owner, stored, reading.grammar);
|
|
44
|
+
}
|
|
45
|
+
return fragmentReaderAt(owner, index, reading.grammar)(stored);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* The change descriptor a tree op returns; the commit consumes it to keep the parallel
|
|
3
|
+
* `blockIds` / `blockRefs` arrays in step, so callers never splice them by hand. Every variant
|
|
4
|
+
* describes one contiguous `at`/`count` window: an op editing two disjoint ranges splits into
|
|
5
|
+
* separate commits or uses the multi-scope commit.
|
|
6
6
|
*/
|
|
7
7
|
import type { BlockComponent } from '../block-component';
|
|
8
8
|
import type { CstNode } from '../core/nodes';
|
|
@@ -26,16 +26,13 @@ export type StructuralChange = {
|
|
|
26
26
|
idMap?: Record<number, number>;
|
|
27
27
|
};
|
|
28
28
|
/**
|
|
29
|
-
* Replace [at, at+count)
|
|
30
|
-
*
|
|
29
|
+
* Replace [at, at+count), the first new item keeping the first replaced item's id and ref so its
|
|
30
|
+
* component (caret, IME composition) survives the swap.
|
|
31
31
|
*/
|
|
32
32
|
export declare function replacePreservingFirst(at: number, count: number, newCount: number): StructuralChange;
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* containers in a created subtree, before the commit publishes: a freshly-parsed node
|
|
37
|
-
* carries none, and under a reused component instance the nested keyed `{#each}` renders
|
|
38
|
-
* before the re-init effect, so undefined keys would reach Svelte.
|
|
34
|
+
* Mark the nodes the change's window created as owned by the live tree, and give every container
|
|
35
|
+
* in them `childIds`, since a reused component's keyed `{#each}` renders before its re-init.
|
|
39
36
|
*/
|
|
40
37
|
export declare function stampStructuralChange(children: CstNode[], change: StructuralChange, sharing: SharingState): void;
|
|
41
38
|
/**
|
|
@@ -43,15 +40,14 @@ export declare function stampStructuralChange(children: CstNode[], change: Struc
|
|
|
43
40
|
* IDs + undefined refs; `idMap` on replace preserves specified old-index IDs.
|
|
44
41
|
*/
|
|
45
42
|
export declare function applyStructuralChangeToIdsRefs(change: StructuralChange, ids: string[], refs: (BlockComponent | undefined)[]): void;
|
|
46
|
-
/** A parent whose parallel id array the splice
|
|
43
|
+
/** A parent whose parallel id array the splice functions maintain: a container, or the root. */
|
|
47
44
|
type IdCarrier = {
|
|
48
45
|
children?: CstNode[];
|
|
49
46
|
childIds?: string[];
|
|
50
47
|
};
|
|
51
48
|
/**
|
|
52
|
-
* Borrow `parent.childIds`
|
|
53
|
-
*
|
|
54
|
-
* lengths (a settle's fold moves slots the caller's own window never named).
|
|
49
|
+
* Borrow `parent.childIds` to record what several splice functions add up to, since a merge in
|
|
50
|
+
* the fix-up moves positions the caller's own window never named.
|
|
55
51
|
*/
|
|
56
52
|
export declare function trackChildIds(parent: IdCarrier): {
|
|
57
53
|
read: () => StructuralChange;
|
|
@@ -1,26 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* The change descriptor a tree op returns; the commit consumes it to keep the parallel
|
|
3
|
+
* `blockIds` / `blockRefs` arrays in step, so callers never splice them by hand. Every variant
|
|
4
|
+
* describes one contiguous `at`/`count` window: an op editing two disjoint ranges splits into
|
|
5
|
+
* separate commits or uses the multi-scope commit.
|
|
6
6
|
*/
|
|
7
7
|
import { generateBlockId, assignChildIdsDeep, assignIds } from '../block-id';
|
|
8
8
|
import { spliceMany } from './splice-many';
|
|
9
9
|
import { assertInvariant } from '../assert';
|
|
10
10
|
import { checkStructuralDescriptor } from '../invariants/structural-descriptor';
|
|
11
11
|
/**
|
|
12
|
-
* Replace [at, at+count)
|
|
13
|
-
*
|
|
12
|
+
* Replace [at, at+count), the first new item keeping the first replaced item's id and ref so its
|
|
13
|
+
* component (caret, IME composition) survives the swap.
|
|
14
14
|
*/
|
|
15
15
|
export function replacePreservingFirst(at, count, newCount) {
|
|
16
16
|
return { op: 'replace', at, count, newCount, idMap: { 0: 0 } };
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* containers in a created subtree, before the commit publishes: a freshly-parsed node
|
|
22
|
-
* carries none, and under a reused component instance the nested keyed `{#each}` renders
|
|
23
|
-
* before the re-init effect, so undefined keys would reach Svelte.
|
|
19
|
+
* Mark the nodes the change's window created as owned by the live tree, and give every container
|
|
20
|
+
* in them `childIds`, since a reused component's keyed `{#each}` renders before its re-init.
|
|
24
21
|
*/
|
|
25
22
|
export function stampStructuralChange(children, change, sharing) {
|
|
26
23
|
if (change.op !== 'insert' && change.op !== 'replace')
|
|
@@ -65,9 +62,8 @@ export function applyStructuralChangeToIdsRefs(change, ids, refs) {
|
|
|
65
62
|
}
|
|
66
63
|
}
|
|
67
64
|
/**
|
|
68
|
-
* Borrow `parent.childIds`
|
|
69
|
-
*
|
|
70
|
-
* lengths (a settle's fold moves slots the caller's own window never named).
|
|
65
|
+
* Borrow `parent.childIds` to record what several splice functions add up to, since a merge in
|
|
66
|
+
* the fix-up moves positions the caller's own window never named.
|
|
71
67
|
*/
|
|
72
68
|
export function trackChildIds(parent) {
|
|
73
69
|
const had = parent.childIds;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a cut through a heading leaves its structure: the marker in front of the text and the
|
|
3
|
+
* bytes past it (a closing `#` run, a setext underline) stay with the text. Every split, paste
|
|
4
|
+
* and join that divides a block at a caret cuts through here (`docs/design/editor.md` § 8).
|
|
5
|
+
*/
|
|
6
|
+
import type { NodeView } from '../core/node-views';
|
|
7
|
+
/** `node`'s text cut at `offset` for a split or a paste, both halves without a final line ending.
|
|
8
|
+
* A cut at or before an ATX heading's text moves the whole heading into `rest`. */
|
|
9
|
+
export declare function cutKeepingStructure(node: NodeView, offset: number): {
|
|
10
|
+
head: string;
|
|
11
|
+
rest: string;
|
|
12
|
+
};
|
|
13
|
+
/** A cut into `node` moved out of its structural suffix: a join or a truncation that keeps the
|
|
14
|
+
* block's head keeps the suffix whole after it. */
|
|
15
|
+
export declare function cutBeforeSuffix(node: NodeView, cut: number): number;
|
|
16
|
+
/** The bytes of a join: `survivor` cut at `cut`, `absorbed`'s text from `from` through `writeTail`
|
|
17
|
+
* (the absorbed kind's write rule), then the survivor's structural suffix. */
|
|
18
|
+
export declare function joinKeepingSuffix(survivor: NodeView, cut: number, absorbed: NodeView, from: number, writeTail: (tail: string) => string): {
|
|
19
|
+
raw: string;
|
|
20
|
+
start: number;
|
|
21
|
+
end: number;
|
|
22
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a cut through a heading leaves its structure: the marker in front of the text and the
|
|
3
|
+
* bytes past it (a closing `#` run, a setext underline) stay with the text. Every split, paste
|
|
4
|
+
* and join that divides a block at a caret cuts through here (`docs/design/editor.md` § 8).
|
|
5
|
+
*/
|
|
6
|
+
import { headingLevel } from '../core/nodes';
|
|
7
|
+
import { getContentRange, structuralSuffix } from '../core/inline';
|
|
8
|
+
import { displayLength, ownTrailingLineEnding, snapToScalarBoundary, trimTrailingLineEnding } from '../core/lines';
|
|
9
|
+
/** `node`'s text cut at `offset` for a split or a paste, both halves without a final line ending.
|
|
10
|
+
* A cut at or before an ATX heading's text moves the whole heading into `rest`. */
|
|
11
|
+
export function cutKeepingStructure(node, offset) {
|
|
12
|
+
const display = trimTrailingLineEnding(node.raw);
|
|
13
|
+
// The cut leaves a surrogate pair whole, since its halves would land in different blocks.
|
|
14
|
+
const cut = headingHeadCut(node, snapToScalarBoundary(display, offset));
|
|
15
|
+
const suffix = structuralSuffix(node);
|
|
16
|
+
const textEnd = display.length - suffix.length;
|
|
17
|
+
if (suffix === '' || cut === 0 || cut > textEnd) {
|
|
18
|
+
return { head: display.slice(0, cut), rest: display.slice(cut) };
|
|
19
|
+
}
|
|
20
|
+
// A remainder opening with a whitespace-only line reloads as blank, so the head takes it.
|
|
21
|
+
const wsLine = /^[ \t]+\r?\n/.exec(display.slice(cut, textEnd))?.[0] ?? '';
|
|
22
|
+
return {
|
|
23
|
+
// The suffix opens with the ending of the line it follows, so one already on the head goes.
|
|
24
|
+
head: trimTrailingLineEnding(display.slice(0, cut) + trimTrailingLineEnding(wsLine)) + suffix,
|
|
25
|
+
rest: display.slice(cut + wsLine.length, textEnd)
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function headingHeadCut(node, cut) {
|
|
29
|
+
if (headingLevel(node) === null)
|
|
30
|
+
return cut;
|
|
31
|
+
const content = getContentRange(node);
|
|
32
|
+
if (content.start === 0 || content.end === content.start)
|
|
33
|
+
return cut;
|
|
34
|
+
return cut <= content.start ? 0 : cut;
|
|
35
|
+
}
|
|
36
|
+
/** A cut into `node` moved out of its structural suffix: a join or a truncation that keeps the
|
|
37
|
+
* block's head keeps the suffix whole after it. */
|
|
38
|
+
export function cutBeforeSuffix(node, cut) {
|
|
39
|
+
const suffix = structuralSuffix(node);
|
|
40
|
+
return suffix ? Math.min(cut, displayLength(node.raw) - suffix.length) : cut;
|
|
41
|
+
}
|
|
42
|
+
/** The bytes of a join: `survivor` cut at `cut`, `absorbed`'s text from `from` through `writeTail`
|
|
43
|
+
* (the absorbed kind's write rule), then the survivor's structural suffix. */
|
|
44
|
+
export function joinKeepingSuffix(survivor, cut, absorbed, from, writeTail) {
|
|
45
|
+
const kept = structuralSuffix(survivor);
|
|
46
|
+
const dropped = structuralSuffix(absorbed);
|
|
47
|
+
const start = cutBeforeSuffix(survivor, cut);
|
|
48
|
+
const textEnd = displayLength(absorbed.raw) - dropped.length;
|
|
49
|
+
const end = dropped ? Math.min(from, textEnd) : from;
|
|
50
|
+
const tail = writeTail(dropped
|
|
51
|
+
? absorbed.raw.slice(end, textEnd) + ownTrailingLineEnding(absorbed.raw)
|
|
52
|
+
: absorbed.raw.slice(end));
|
|
53
|
+
return {
|
|
54
|
+
raw: survivor.raw.slice(0, start) +
|
|
55
|
+
trimTrailingLineEnding(tail) +
|
|
56
|
+
kept +
|
|
57
|
+
ownTrailingLineEnding(tail),
|
|
58
|
+
start,
|
|
59
|
+
end
|
|
60
|
+
};
|
|
61
|
+
}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A rectangle of a table's cells as clipboard text: a GFM table of its own, written by the table
|
|
3
|
+
* rebuilder so its rows, padding and line ending are the ones the document's table has.
|
|
4
|
+
*/
|
|
1
5
|
import type { NodeView } from '../core/node-views';
|
|
2
6
|
export interface CellPos {
|
|
3
7
|
rowIdx: number;
|
|
4
8
|
colIdx: number;
|
|
5
9
|
}
|
|
10
|
+
/** The rectangle as a GFM table, its first row the header; one cell is its raw alone. */
|
|
6
11
|
export declare function copyRectangleAsSubTable(table: NodeView, a: CellPos, b: CellPos): string;
|
|
12
|
+
/** The raws of the cells between two corners, row by row; a missing cell reads empty. */
|
|
13
|
+
export declare function rectangleCellRaws(table: NodeView, a: CellPos, b: CellPos): string[][];
|
|
@@ -1,43 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A rectangle of a table's cells as clipboard text: a GFM table of its own, written by the table
|
|
3
|
+
* rebuilder so its rows, padding and line ending are the ones the document's table has.
|
|
4
|
+
*/
|
|
1
5
|
import { metadataOf } from '../core/nodes';
|
|
6
|
+
import { rebuildTableRaw, tableLineEnding } from '../schema/container-rebuilders';
|
|
7
|
+
/** The rectangle as a GFM table, its first row the header; one cell is its raw alone. */
|
|
2
8
|
export function copyRectangleAsSubTable(table, a, b) {
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
9
|
+
const cellRaws = rectangleCellRaws(table, a, b);
|
|
10
|
+
if (cellRaws.length === 1 && cellRaws[0].length === 1)
|
|
11
|
+
return cellRaws[0][0];
|
|
12
|
+
const left = Math.min(a.colIdx, b.colIdx);
|
|
13
|
+
const alignments = metadataOf(table, 'table').alignments.slice(left, left + cellRaws[0].length);
|
|
14
|
+
return subTable(cellRaws, alignments, tableLineEnding(table)).raw;
|
|
15
|
+
}
|
|
16
|
+
/** The raws of the cells between two corners, row by row; a missing cell reads empty. */
|
|
17
|
+
export function rectangleCellRaws(table, a, b) {
|
|
7
18
|
const rows = table.children ?? [];
|
|
8
|
-
const
|
|
9
|
-
for (let r =
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
for (let c =
|
|
13
|
-
|
|
19
|
+
const grid = [];
|
|
20
|
+
for (let r = Math.min(a.rowIdx, b.rowIdx); r <= Math.max(a.rowIdx, b.rowIdx); r++) {
|
|
21
|
+
const cells = rows[r]?.children ?? [];
|
|
22
|
+
const line = [];
|
|
23
|
+
for (let c = Math.min(a.colIdx, b.colIdx); c <= Math.max(a.colIdx, b.colIdx); c++) {
|
|
24
|
+
line.push(cells[c]?.raw ?? '');
|
|
14
25
|
}
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
if (cellRaws.length === 1 && cellRaws[0].length === 1) {
|
|
18
|
-
return cellRaws[0][0];
|
|
26
|
+
grid.push(line);
|
|
19
27
|
}
|
|
20
|
-
|
|
21
|
-
const lines = [];
|
|
22
|
-
lines.push(formatRow(cellRaws[0]));
|
|
23
|
-
lines.push(formatRow(alignments.map(formatAlignmentCell)));
|
|
24
|
-
for (let i = 1; i < cellRaws.length; i++) {
|
|
25
|
-
lines.push(formatRow(cellRaws[i]));
|
|
26
|
-
}
|
|
27
|
-
return lines.join('');
|
|
28
|
-
}
|
|
29
|
-
function formatRow(cells) {
|
|
30
|
-
return '| ' + cells.join(' | ') + ' |\n';
|
|
28
|
+
return grid;
|
|
31
29
|
}
|
|
32
|
-
function
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
30
|
+
function subTable(cellRaws, alignments, lineEnding) {
|
|
31
|
+
const table = {
|
|
32
|
+
kind: 'table',
|
|
33
|
+
leadingTrivia: '',
|
|
34
|
+
// The rebuild reads the line ending off the raw it replaces.
|
|
35
|
+
raw: lineEnding,
|
|
36
|
+
metadata: { columnCount: alignments.length, alignments },
|
|
37
|
+
children: cellRaws.map((cells, i) => ({
|
|
38
|
+
kind: 'tableRow',
|
|
39
|
+
leadingTrivia: '',
|
|
40
|
+
raw: '',
|
|
41
|
+
metadata: { isHeader: i === 0 },
|
|
42
|
+
children: cells.map((raw) => ({ kind: 'tableCell', leadingTrivia: '', raw }))
|
|
43
|
+
}))
|
|
44
|
+
};
|
|
45
|
+
rebuildTableRaw(table);
|
|
46
|
+
return table;
|
|
43
47
|
}
|
|
@@ -5,16 +5,11 @@
|
|
|
5
5
|
* inverse, an HTML table for the spreadsheets that read text/html, lives here too.
|
|
6
6
|
*/
|
|
7
7
|
import type { NodeView } from '../core/node-views';
|
|
8
|
+
import { type CellPos } from './sub-table-copy';
|
|
8
9
|
/** Rows of cell texts, rectangular: every row padded to the widest. Null for a non-grid payload. */
|
|
9
10
|
export declare function parseClipboardGrid(text: string): string[][] | null;
|
|
10
11
|
/** A rectangle's cell texts, pipes unescaped, as the clipboard's grid. */
|
|
11
|
-
export declare function rectangleGrid(table: NodeView, a:
|
|
12
|
-
rowIdx: number;
|
|
13
|
-
colIdx: number;
|
|
14
|
-
}, b: {
|
|
15
|
-
rowIdx: number;
|
|
16
|
-
colIdx: number;
|
|
17
|
-
}): string[][];
|
|
12
|
+
export declare function rectangleGrid(table: NodeView, a: CellPos, b: CellPos): string[][];
|
|
18
13
|
/** The grid repeated to fill a selection whose sides are multiples of it (a spreadsheet's
|
|
19
14
|
* tiling); any other selection takes the grid once from its top-left corner. */
|
|
20
15
|
export declare function tileGridTo(grid: string[][], rows: number, cols: number): string[][];
|
|
@@ -4,10 +4,14 @@
|
|
|
4
4
|
* rectangle copy writes). Anything else is not a grid and takes the ordinary paste route. The
|
|
5
5
|
* inverse, an HTML table for the spreadsheets that read text/html, lives here too.
|
|
6
6
|
*/
|
|
7
|
+
import { isBlankText, trimWhitespace } from '../core/lines';
|
|
8
|
+
import { matchTableDelimiterRow, splitRowCells } from '../core/parsers/table';
|
|
9
|
+
import { unescapeCellPipes } from '../schema/table-cell-raw';
|
|
10
|
+
import { rectangleCellRaws } from './sub-table-copy';
|
|
7
11
|
/** Rows of cell texts, rectangular: every row padded to the widest. Null for a non-grid payload. */
|
|
8
12
|
export function parseClipboardGrid(text) {
|
|
9
13
|
const lines = text.replace(/\r\n?/g, '\n').split('\n');
|
|
10
|
-
while (lines.length && lines[lines.length - 1]
|
|
14
|
+
while (lines.length && isBlankText(lines[lines.length - 1]))
|
|
11
15
|
lines.pop();
|
|
12
16
|
if (lines.length === 0)
|
|
13
17
|
return null;
|
|
@@ -21,35 +25,16 @@ export function parseClipboardGrid(text) {
|
|
|
21
25
|
return null;
|
|
22
26
|
return rows.map((row) => [...row, ...Array(width - row.length).fill('')]);
|
|
23
27
|
}
|
|
24
|
-
//
|
|
28
|
+
// Accepts only pipe rows, read by the table parser's own row and delimiter matchers; a cell's
|
|
29
|
+
// pipes are unescaped, as a copied rectangle's are.
|
|
25
30
|
function parseGfmRows(lines) {
|
|
26
|
-
if (!lines.every((line) =>
|
|
31
|
+
if (!lines.every((line) => /^\|.*\|$/.test(trimWhitespace(line))))
|
|
27
32
|
return null;
|
|
28
|
-
const rows = lines.map(
|
|
29
|
-
if (rows.length >= 2 &&
|
|
33
|
+
const rows = lines.map((line) => splitRowCells(line).map(unescapeCellPipes));
|
|
34
|
+
if (rows.length >= 2 && matchTableDelimiterRow(lines[1]))
|
|
30
35
|
rows.splice(1, 1);
|
|
31
36
|
return rows;
|
|
32
37
|
}
|
|
33
|
-
function splitPipeRow(line) {
|
|
34
|
-
const inner = line.trim().slice(1, -1);
|
|
35
|
-
const cells = [];
|
|
36
|
-
let cell = '';
|
|
37
|
-
for (let i = 0; i < inner.length; i++) {
|
|
38
|
-
const ch = inner[i];
|
|
39
|
-
if (ch === '\\' && inner[i + 1] === '|') {
|
|
40
|
-
cell += '|';
|
|
41
|
-
i++;
|
|
42
|
-
}
|
|
43
|
-
else if (ch === '|') {
|
|
44
|
-
cells.push(cell.trim());
|
|
45
|
-
cell = '';
|
|
46
|
-
}
|
|
47
|
-
else
|
|
48
|
-
cell += ch;
|
|
49
|
-
}
|
|
50
|
-
cells.push(cell.trim());
|
|
51
|
-
return cells;
|
|
52
|
-
}
|
|
53
38
|
function parseTsvRows(lines) {
|
|
54
39
|
if (!lines.some((line) => line.includes('\t')))
|
|
55
40
|
return null;
|
|
@@ -57,17 +42,7 @@ function parseTsvRows(lines) {
|
|
|
57
42
|
}
|
|
58
43
|
/** A rectangle's cell texts, pipes unescaped, as the clipboard's grid. */
|
|
59
44
|
export function rectangleGrid(table, a, b) {
|
|
60
|
-
|
|
61
|
-
const grid = [];
|
|
62
|
-
for (let r = Math.min(a.rowIdx, b.rowIdx); r <= Math.max(a.rowIdx, b.rowIdx); r++) {
|
|
63
|
-
const cells = rows[r]?.children ?? [];
|
|
64
|
-
const line = [];
|
|
65
|
-
for (let c = Math.min(a.colIdx, b.colIdx); c <= Math.max(a.colIdx, b.colIdx); c++) {
|
|
66
|
-
line.push((cells[c]?.raw ?? '').replace(/\\\|/g, '|'));
|
|
67
|
-
}
|
|
68
|
-
grid.push(line);
|
|
69
|
-
}
|
|
70
|
-
return grid;
|
|
45
|
+
return rectangleCellRaws(table, a, b).map((row) => row.map(unescapeCellPipes));
|
|
71
46
|
}
|
|
72
47
|
/** The grid repeated to fill a selection whose sides are multiples of it (a spreadsheet's
|
|
73
48
|
* tiling); any other selection takes the grid once from its top-left corner. */
|
|
@@ -3,14 +3,18 @@ import type { StructuralChange } from './structural-change';
|
|
|
3
3
|
export declare function insertEmptyRow(table: CstNode, rowIdx: number, side: 'above' | 'below'): void;
|
|
4
4
|
export declare function insertEmptyColumn(table: CstNode, colIdx: number, side: 'left' | 'right'): StructuralChange[];
|
|
5
5
|
export declare function deleteRow(table: CstNode, rowIdx: number): void;
|
|
6
|
+
/**
|
|
7
|
+
* Make the table's first row its header. A header wider than the delimiter row reads as no table,
|
|
8
|
+
* so its surplus cells become new columns, each row filling them from its own surplus first.
|
|
9
|
+
*/
|
|
10
|
+
export declare function promoteFirstRowToHeader(table: CstNode): void;
|
|
6
11
|
export declare function deleteColumn(table: CstNode, colIdx: number): StructuralChange[];
|
|
7
12
|
export declare function moveColumn(table: CstNode, fromCol: number, toCol: number): StructuralChange[];
|
|
8
13
|
export declare function setAlignment(table: CstNode, colIdx: number, alignment: TableAlignment): void;
|
|
9
14
|
export declare function cycleAlignment(table: CstNode, colIdx: number): void;
|
|
10
15
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* a second body row, else it would leave a header-only table.
|
|
16
|
+
* `rowCount` includes the header. A header delete promotes the next row, so it needs only a
|
|
17
|
+
* second row; a body delete needs a second body row, or it leaves a header-only table.
|
|
14
18
|
*/
|
|
15
19
|
export declare function canDeleteRow(rowIdx: number, rowCount: number): boolean;
|
|
16
20
|
/** Whether a column delete is allowed: a table must keep at least one column. */
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
// In-place table CST mutations; the caller owns the commit
|
|
2
|
-
//
|
|
1
|
+
// In-place table CST mutations; the caller owns the commit and the raw rebuild, so these
|
|
2
|
+
// touch neither reactivity, undo, nor raw. Column mutators emit exactly one
|
|
3
3
|
// StructuralChange per row, in row order, for multi-scope callers to pair with row scopes.
|
|
4
4
|
import { metadataOf } from '../core/nodes';
|
|
5
5
|
import { reorderChildren } from './reorder';
|
|
6
|
+
import { generateBlockId } from '../block-id';
|
|
6
7
|
const ALIGN_CYCLE = ['left', 'center', 'right'];
|
|
7
8
|
// ── Public API ─────────────────────────────────────────────────────────────
|
|
8
9
|
export function insertEmptyRow(table, rowIdx, side) {
|
|
@@ -38,10 +39,46 @@ export function deleteRow(table, rowIdx) {
|
|
|
38
39
|
const rows = table.children ?? [];
|
|
39
40
|
const willRemoveHeader = rowIdx === 0;
|
|
40
41
|
rows.splice(rowIdx, 1);
|
|
41
|
-
if (willRemoveHeader && rows.length > 0)
|
|
42
|
-
|
|
42
|
+
if (willRemoveHeader && rows.length > 0)
|
|
43
|
+
promoteFirstRowToHeader(table);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Make the table's first row its header. A header wider than the delimiter row reads as no table,
|
|
47
|
+
* so its surplus cells become new columns, each row filling them from its own surplus first.
|
|
48
|
+
*/
|
|
49
|
+
export function promoteFirstRowToHeader(table) {
|
|
50
|
+
const rows = table.children ?? [];
|
|
51
|
+
if (rows.length === 0)
|
|
52
|
+
return;
|
|
53
|
+
const meta = metadataOf(table, 'table');
|
|
54
|
+
const extra = metadataOf(rows[0], 'tableRow').surplusCells?.length ?? 0;
|
|
55
|
+
if (extra > 0) {
|
|
56
|
+
meta.columnCount += extra;
|
|
57
|
+
meta.alignments = [...meta.alignments, ...Array(extra).fill('none')];
|
|
58
|
+
}
|
|
59
|
+
// Written as copies: only the table is this edit's own, and a row can still be in an undo entry.
|
|
60
|
+
for (let i = 0; i < rows.length; i++) {
|
|
61
|
+
if (i === 0 || extra > 0)
|
|
62
|
+
rows[i] = widenedRow(rows[i], meta.columnCount, i === 0);
|
|
43
63
|
}
|
|
44
64
|
}
|
|
65
|
+
/** A copy of the row holding `columnCount` cells, the missing ones taken from its surplus first. */
|
|
66
|
+
function widenedRow(row, columnCount, isHeader) {
|
|
67
|
+
const surplus = metadataOf(row, 'tableRow').surplusCells ?? [];
|
|
68
|
+
const missing = Math.max(0, columnCount - row.children.length);
|
|
69
|
+
const added = Array.from({ length: missing }, (_, k) => ({
|
|
70
|
+
kind: 'tableCell',
|
|
71
|
+
leadingTrivia: '',
|
|
72
|
+
raw: surplus[k] ?? ''
|
|
73
|
+
}));
|
|
74
|
+
const rest = surplus.slice(missing);
|
|
75
|
+
const metadata = rest.length > 0 ? { isHeader, surplusCells: rest } : { isHeader };
|
|
76
|
+
const copy = { ...row, metadata, children: [...row.children, ...added] };
|
|
77
|
+
if (row.childIds)
|
|
78
|
+
copy.childIds = [...row.childIds, ...added.map(() => generateBlockId())];
|
|
79
|
+
delete copy.childSpans;
|
|
80
|
+
return copy;
|
|
81
|
+
}
|
|
45
82
|
export function deleteColumn(table, colIdx) {
|
|
46
83
|
const meta = metadataOf(table, 'table');
|
|
47
84
|
const changes = [];
|
|
@@ -73,8 +110,8 @@ export function setAlignment(table, colIdx, alignment) {
|
|
|
73
110
|
export function cycleAlignment(table, colIdx) {
|
|
74
111
|
const meta = metadataOf(table, 'table');
|
|
75
112
|
const current = meta.alignments[colIdx];
|
|
76
|
-
// 'none' renders identically to 'left', so stepping through it would look like
|
|
77
|
-
//
|
|
113
|
+
// 'none' renders identically to 'left', so stepping through it would look like the click
|
|
114
|
+
// did nothing; jump to 'center' instead. Once cycling begins the column never re-enters it.
|
|
78
115
|
if (current === 'none') {
|
|
79
116
|
meta.alignments[colIdx] = 'center';
|
|
80
117
|
return;
|
|
@@ -86,9 +123,8 @@ export function cycleAlignment(table, colIdx) {
|
|
|
86
123
|
// Single source of truth for the deletion-refusal rules, here rather than in
|
|
87
124
|
// editor-actions/ so selection/ never has to reach across for them.
|
|
88
125
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* a second body row, else it would leave a header-only table.
|
|
126
|
+
* `rowCount` includes the header. A header delete promotes the next row, so it needs only a
|
|
127
|
+
* second row; a body delete needs a second body row, or it leaves a header-only table.
|
|
92
128
|
*/
|
|
93
129
|
export function canDeleteRow(rowIdx, rowCount) {
|
|
94
130
|
if (rowCount <= 1)
|