@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,380 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* The editor's own formatting popover over a selection: a row of marks, then labelled rows
|
|
4
|
+
* for what acts on the whole selection. Built only on the public API a host's toolbar would
|
|
5
|
+
* use (`selectionChange`, the rect API, `runCommand`), so the consumer-guide recipe matches it.
|
|
6
|
+
*/
|
|
7
|
+
import type { EditorInstance } from '../../editor-props';
|
|
8
|
+
import type { EditorSelection } from '../../selection/primitives';
|
|
9
|
+
import { normalize as normalizeSelection } from '../../selection/primitives';
|
|
10
|
+
import { SELECTION_END } from '../../block-component';
|
|
11
|
+
import { TOOLBAR_COMMANDS } from '../../schema/commands';
|
|
12
|
+
import { SELECTION_TOOLBAR_LABEL } from '../../a11y-strings';
|
|
13
|
+
import { keepFlyoutOnScreen } from './flyout-placement';
|
|
14
|
+
import { runClipboardAction } from './clipboard-actions';
|
|
15
|
+
import MenuIcon from './MenuIcon.svelte';
|
|
16
|
+
import type { MenuIconName } from '../../menu-icons';
|
|
17
|
+
|
|
18
|
+
type ToolbarEditor = Pick<
|
|
19
|
+
EditorInstance,
|
|
20
|
+
| 'getSelection'
|
|
21
|
+
| 'getRects'
|
|
22
|
+
| 'getBlockKindAt'
|
|
23
|
+
| 'runCommand'
|
|
24
|
+
| 'canRunCommand'
|
|
25
|
+
| 'isCommandActive'
|
|
26
|
+
| 'getEvents'
|
|
27
|
+
>;
|
|
28
|
+
|
|
29
|
+
// The bar: the three marks and the link. Beneath it, as rows: the heading picker, inline code
|
|
30
|
+
// and copy. The bar sets the card's width.
|
|
31
|
+
const MARKS: readonly { icon: MenuIconName; title: string; command: string; size: number }[] = [
|
|
32
|
+
{ icon: 'bold', title: 'Bold (Ctrl/Cmd+B)', command: TOOLBAR_COMMANDS.toggleStrong, size: 16 },
|
|
33
|
+
{
|
|
34
|
+
icon: 'italic',
|
|
35
|
+
title: 'Italic (Ctrl/Cmd+I)',
|
|
36
|
+
command: TOOLBAR_COMMANDS.toggleEmphasis,
|
|
37
|
+
size: 16
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
icon: 'strikethrough',
|
|
41
|
+
title: 'Strikethrough (Ctrl/Cmd+Shift+X)',
|
|
42
|
+
command: TOOLBAR_COMMANDS.toggleStrikethrough,
|
|
43
|
+
size: 16
|
|
44
|
+
},
|
|
45
|
+
{ icon: 'link', title: 'Edit link (Ctrl/Cmd+K)', command: TOOLBAR_COMMANDS.editLink, size: 10 }
|
|
46
|
+
];
|
|
47
|
+
const ROWS: readonly { icon: MenuIconName; label: string; command: string }[] = [
|
|
48
|
+
{ icon: 'code', label: 'Inline code', command: TOOLBAR_COMMANDS.toggleCode }
|
|
49
|
+
];
|
|
50
|
+
const TURN_INTO_COMMAND = TOOLBAR_COMMANDS.setHeading;
|
|
51
|
+
const TURN_INTO: readonly { label: string; level: number }[] = [
|
|
52
|
+
{ label: 'Normal text', level: 0 },
|
|
53
|
+
{ label: 'Heading 1', level: 1 },
|
|
54
|
+
{ label: 'Heading 2', level: 2 },
|
|
55
|
+
{ label: 'Heading 3', level: 3 }
|
|
56
|
+
];
|
|
57
|
+
const BUTTONS = [...MARKS, ...ROWS, { command: TURN_INTO_COMMAND }];
|
|
58
|
+
const BAR_GAP = 6;
|
|
59
|
+
|
|
60
|
+
let { editor, root }: { editor: ToolbarEditor; root: HTMLElement | undefined } = $props();
|
|
61
|
+
|
|
62
|
+
let turnIntoOpen = $state(false);
|
|
63
|
+
let blockKind = $state<string | null>(null);
|
|
64
|
+
let placement = $state<Placement | null>(null);
|
|
65
|
+
let declined = $state<ReadonlySet<string>>(new Set());
|
|
66
|
+
let active = $state<ReadonlySet<string>>(new Set());
|
|
67
|
+
let current: EditorSelection | null = null;
|
|
68
|
+
let barEl: HTMLDivElement | undefined = $state();
|
|
69
|
+
|
|
70
|
+
// A labelled row the editor refuses is dropped, where a mark only dims: the icons keep the
|
|
71
|
+
// bar's shape, while a row that does nothing is noise over a selection it cannot act on.
|
|
72
|
+
const rows = $derived(ROWS.filter((row) => !declined.has(row.command)));
|
|
73
|
+
const offersHeading = $derived(!declined.has(TURN_INTO_COMMAND));
|
|
74
|
+
|
|
75
|
+
interface Placement {
|
|
76
|
+
x: number;
|
|
77
|
+
y: number;
|
|
78
|
+
/** The selection's first rectangle, used when the bar has to go above it instead. */
|
|
79
|
+
flipY: number;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// The editor root's top is the line the bar may not cross: whatever the host draws above
|
|
83
|
+
// the editor ends where the root begins.
|
|
84
|
+
function topInset(): number {
|
|
85
|
+
return Math.max(0, root?.getBoundingClientRect().top ?? 0);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// The document's own copy, so a cross-block range lands as the Markdown Ctrl+C would write.
|
|
89
|
+
function copySelection(): void {
|
|
90
|
+
void runClipboardAction('copy', null);
|
|
91
|
+
placement = null;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// The bar's own size, measured once it is in the DOM, so the placement can keep it on screen:
|
|
95
|
+
// pushed left at the right edge, moved above the selection when there is no room below.
|
|
96
|
+
let size = $state<{ w: number; h: number } | null>(null);
|
|
97
|
+
$effect(() => {
|
|
98
|
+
if (!barEl || !placement) return;
|
|
99
|
+
const rect = barEl.getBoundingClientRect();
|
|
100
|
+
size = { w: rect.width, h: rect.height };
|
|
101
|
+
});
|
|
102
|
+
const shown = $derived.by(() => {
|
|
103
|
+
if (!placement) return null;
|
|
104
|
+
if (!size) return { x: placement.x, y: placement.y };
|
|
105
|
+
const margin = 8;
|
|
106
|
+
let { x, y } = placement;
|
|
107
|
+
if (x + size.w > window.innerWidth - margin)
|
|
108
|
+
x = Math.max(margin, window.innerWidth - margin - size.w);
|
|
109
|
+
if (y + size.h > window.innerHeight - margin)
|
|
110
|
+
y = Math.max(topInset() + 4, placement.flipY - size.h - BAR_GAP);
|
|
111
|
+
return { x, y };
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
$effect(() => editor.getEvents().on('selectionChange', update));
|
|
115
|
+
|
|
116
|
+
// Shown only once the drag is over, since a bar moving under the pointer is in the way;
|
|
117
|
+
// watched at the document, where the drag can end anywhere.
|
|
118
|
+
let pointerHeld = false;
|
|
119
|
+
$effect(() => {
|
|
120
|
+
// A pointer-down on the bar itself is a button, not a drag: watching for its release
|
|
121
|
+
// would re-place the bar, and close its flyout, under the click that follows.
|
|
122
|
+
const down = (e: PointerEvent) => {
|
|
123
|
+
if (e.button === 0 && !barEl?.contains(e.target as Node)) pointerHeld = true;
|
|
124
|
+
};
|
|
125
|
+
// Placed from the range the editor last reported; a release that still moves the range
|
|
126
|
+
// reports again through `selectionChange`, which re-places.
|
|
127
|
+
const up = () => {
|
|
128
|
+
if (!pointerHeld) return;
|
|
129
|
+
pointerHeld = false;
|
|
130
|
+
if (current) update(current);
|
|
131
|
+
};
|
|
132
|
+
document.addEventListener('pointerdown', down, true);
|
|
133
|
+
document.addEventListener('pointerup', up, true);
|
|
134
|
+
document.addEventListener('pointercancel', up, true);
|
|
135
|
+
return () => {
|
|
136
|
+
document.removeEventListener('pointerdown', down, true);
|
|
137
|
+
document.removeEventListener('pointerup', up, true);
|
|
138
|
+
document.removeEventListener('pointercancel', up, true);
|
|
139
|
+
};
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// The editor's own right-click menu takes the selection's spot; two panels over one range read
|
|
143
|
+
// as a glitch, so the bar hides while it is open and comes back where the selection still is.
|
|
144
|
+
let menuOpen = false;
|
|
145
|
+
$effect(() =>
|
|
146
|
+
editor.getEvents().on('menuChange', (open) => {
|
|
147
|
+
menuOpen = open;
|
|
148
|
+
if (open) placement = null;
|
|
149
|
+
else if (current) update(current);
|
|
150
|
+
})
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
// Sticky with the text: the rects are viewport coordinates, so a scroll or resize moves the
|
|
154
|
+
// selection under the bar and the bar re-measures. Scroll already arrives once per frame.
|
|
155
|
+
$effect(() => {
|
|
156
|
+
const reanchor = () => {
|
|
157
|
+
// Same gates as a selection change: a scroll mid-drag (autoscroll included) must not
|
|
158
|
+
// bring the bar out before the release does.
|
|
159
|
+
if (current) placement = shownOver(current);
|
|
160
|
+
};
|
|
161
|
+
window.addEventListener('scroll', reanchor, { capture: true, passive: true });
|
|
162
|
+
window.addEventListener('resize', reanchor, { passive: true });
|
|
163
|
+
return () => {
|
|
164
|
+
window.removeEventListener('scroll', reanchor, { capture: true });
|
|
165
|
+
window.removeEventListener('resize', reanchor);
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
function update(selection: EditorSelection | null): void {
|
|
170
|
+
current = selection;
|
|
171
|
+
turnIntoOpen = false;
|
|
172
|
+
blockKind = selection ? editor.getBlockKindAt(normalizeSelection(selection).start.path) : null;
|
|
173
|
+
// Asked per selection change, not per render: the answers are snapshots of this selection.
|
|
174
|
+
declined = new Set(
|
|
175
|
+
BUTTONS.filter((b) => !editor.canRunCommand(b.command)).map((b) => b.command)
|
|
176
|
+
);
|
|
177
|
+
active = new Set(
|
|
178
|
+
BUTTONS.filter((b) => editor.isCommandActive(b.command)).map((b) => b.command)
|
|
179
|
+
);
|
|
180
|
+
placement = selection ? shownOver(selection) : null;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// The editor decides where the bar belongs: over a code fence or an equation's source it
|
|
184
|
+
// refuses every mark, and a bar of greyed-out buttons is worse than none.
|
|
185
|
+
function shownOver(selection: EditorSelection): Placement | null {
|
|
186
|
+
if (menuOpen || pointerHeld) return null;
|
|
187
|
+
if (MARKS.every((mark) => declined.has(mark.command))) return null;
|
|
188
|
+
return place(selection);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function place(selection: EditorSelection): Placement | null {
|
|
192
|
+
const { start, end } = normalizeSelection(selection);
|
|
193
|
+
const sameBlock = start.path.join('.') === end.path.join('.');
|
|
194
|
+
if (!sameBlock) {
|
|
195
|
+
// The bar hangs off where the selection ends; the start block's remaining range, then
|
|
196
|
+
// its whole box, are the fallbacks when the end block yields no rectangle.
|
|
197
|
+
const rects = editor.getRects();
|
|
198
|
+
const endRects =
|
|
199
|
+
editor.getBlockKindAt(end.path) !== 'table' && end.offset > 0
|
|
200
|
+
? rects.rangeRects(end.path, 0, end.offset)
|
|
201
|
+
: [];
|
|
202
|
+
const anchored = endRects.length
|
|
203
|
+
? endRects
|
|
204
|
+
: rects.rangeRects(start.path, start.offset, SELECTION_END);
|
|
205
|
+
const measured = anchored.length ? anchored : rects.rangeRects(start.path, 0, SELECTION_END);
|
|
206
|
+
return measured.length ? belowRight(measured) : null;
|
|
207
|
+
}
|
|
208
|
+
// A rectangle inside one table shares the table's path and holds cell indices on endpoints
|
|
209
|
+
// the cross-block flag need not set, so the kind is what rules it out, not the flag.
|
|
210
|
+
if (editor.getBlockKindAt(start.path) === 'table') return null;
|
|
211
|
+
if (start.offset === end.offset) return null;
|
|
212
|
+
const rects = editor.getRects().rangeRects(start.path, start.offset, end.offset);
|
|
213
|
+
return rects.length ? belowRight(rects) : null;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** Below the selection's last line and right of where it ends, never over the text; the
|
|
217
|
+
* clamp above moves it left or above when there is no room. */
|
|
218
|
+
function belowRight(rects: DOMRect[]): Placement | null {
|
|
219
|
+
const first = rects[0];
|
|
220
|
+
const last = rects[rects.length - 1];
|
|
221
|
+
// Scrolled out from under whatever the host draws above, or off the bottom: nowhere to go.
|
|
222
|
+
if (last.bottom < topInset() || first.top > window.innerHeight) return null;
|
|
223
|
+
return { x: last.right + BAR_GAP, y: last.bottom + BAR_GAP, flipY: first.top };
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// The command id, not a made-up keystroke: a host rebind moves the shortcut and leaves the
|
|
227
|
+
// button. A refused run means what the bar assumed has changed, so the bar hides.
|
|
228
|
+
function fire(command: string, arg?: unknown): void {
|
|
229
|
+
turnIntoOpen = false;
|
|
230
|
+
if (!editor.runCommand(command, arg)) placement = null;
|
|
231
|
+
}
|
|
232
|
+
</script>
|
|
233
|
+
|
|
234
|
+
{#if shown}
|
|
235
|
+
<div
|
|
236
|
+
bind:this={barEl}
|
|
237
|
+
class="md-menu selection-toolbar"
|
|
238
|
+
data-testid="selection-toolbar"
|
|
239
|
+
style:left="{shown.x}px"
|
|
240
|
+
style:top="{shown.y}px"
|
|
241
|
+
role="toolbar"
|
|
242
|
+
aria-label={SELECTION_TOOLBAR_LABEL}
|
|
243
|
+
tabindex="-1"
|
|
244
|
+
onpointerleave={() => (turnIntoOpen = false)}
|
|
245
|
+
>
|
|
246
|
+
<div class="selection-toolbar-marks">
|
|
247
|
+
{#each MARKS as button (button.command)}
|
|
248
|
+
<button
|
|
249
|
+
type="button"
|
|
250
|
+
class="md-menu-item selection-toolbar-mark"
|
|
251
|
+
data-testid="toolbar-{button.command}"
|
|
252
|
+
title={button.title}
|
|
253
|
+
disabled={declined.has(button.command)}
|
|
254
|
+
aria-pressed={active.has(button.command)}
|
|
255
|
+
onmousedown={(e) => e.preventDefault()}
|
|
256
|
+
onclick={() => fire(button.command)}
|
|
257
|
+
>
|
|
258
|
+
<MenuIcon name={button.icon} size={button.size} />
|
|
259
|
+
</button>
|
|
260
|
+
{/each}
|
|
261
|
+
</div>
|
|
262
|
+
<div class="md-menu-divider" aria-hidden="true"></div>
|
|
263
|
+
{#if offersHeading}
|
|
264
|
+
<div
|
|
265
|
+
class="selection-toolbar-row"
|
|
266
|
+
role="presentation"
|
|
267
|
+
onpointerenter={() => (turnIntoOpen = true)}
|
|
268
|
+
>
|
|
269
|
+
<button
|
|
270
|
+
type="button"
|
|
271
|
+
class="md-menu-item"
|
|
272
|
+
data-testid="toolbar-set-heading"
|
|
273
|
+
aria-haspopup="menu"
|
|
274
|
+
aria-expanded={turnIntoOpen}
|
|
275
|
+
onmousedown={(e) => e.preventDefault()}
|
|
276
|
+
onclick={() => (turnIntoOpen = !turnIntoOpen)}
|
|
277
|
+
>
|
|
278
|
+
<span class="md-menu-icon"><MenuIcon name="heading" size={14} /></span>
|
|
279
|
+
<span class="selection-toolbar-label">Set heading</span>
|
|
280
|
+
<span class="md-menu-icon"><MenuIcon name="chevron-right" size={13} /></span>
|
|
281
|
+
</button>
|
|
282
|
+
{#if turnIntoOpen}
|
|
283
|
+
<div class="md-menu selection-toolbar-flyout" role="menu" {@attach keepFlyoutOnScreen}>
|
|
284
|
+
{#each TURN_INTO as option (option.level)}
|
|
285
|
+
{@const chosen = option.level === 0 ? blockKind === 'paragraph' : false}
|
|
286
|
+
<button
|
|
287
|
+
type="button"
|
|
288
|
+
class="md-menu-item"
|
|
289
|
+
role="menuitemradio"
|
|
290
|
+
data-testid="toolbar-set-heading-{option.level}"
|
|
291
|
+
aria-checked={chosen}
|
|
292
|
+
onmousedown={(e) => e.preventDefault()}
|
|
293
|
+
onclick={() => fire(TURN_INTO_COMMAND, option.level)}
|
|
294
|
+
>
|
|
295
|
+
<span class="selection-toolbar-label">{option.label}</span>
|
|
296
|
+
{#if chosen}<span class="md-menu-icon"><MenuIcon name="check" size={13} /></span
|
|
297
|
+
>{/if}
|
|
298
|
+
</button>
|
|
299
|
+
{/each}
|
|
300
|
+
</div>
|
|
301
|
+
{/if}
|
|
302
|
+
</div>
|
|
303
|
+
{/if}
|
|
304
|
+
{#each rows as row (row.command)}
|
|
305
|
+
<button
|
|
306
|
+
type="button"
|
|
307
|
+
class="md-menu-item"
|
|
308
|
+
data-testid="toolbar-{row.command}"
|
|
309
|
+
aria-pressed={active.has(row.command)}
|
|
310
|
+
onmousedown={(e) => e.preventDefault()}
|
|
311
|
+
onclick={() => fire(row.command)}
|
|
312
|
+
>
|
|
313
|
+
<span class="md-menu-icon"><MenuIcon name={row.icon} size={14} /></span>
|
|
314
|
+
<span class="selection-toolbar-label">{row.label}</span>
|
|
315
|
+
{#if active.has(row.command)}<span class="md-menu-icon"
|
|
316
|
+
><MenuIcon name="check" size={13} /></span
|
|
317
|
+
>{/if}
|
|
318
|
+
</button>
|
|
319
|
+
{/each}
|
|
320
|
+
<button
|
|
321
|
+
type="button"
|
|
322
|
+
class="md-menu-item"
|
|
323
|
+
data-testid="toolbar-copy"
|
|
324
|
+
onmousedown={(e) => e.preventDefault()}
|
|
325
|
+
onclick={copySelection}
|
|
326
|
+
>
|
|
327
|
+
<span class="md-menu-icon"><MenuIcon name="copy" size={14} /></span>
|
|
328
|
+
<span>Copy</span>
|
|
329
|
+
</button>
|
|
330
|
+
</div>
|
|
331
|
+
{/if}
|
|
332
|
+
|
|
333
|
+
<style>
|
|
334
|
+
/* The panel and its rows are the shared `.md-menu` family (editor.css); only the marks row
|
|
335
|
+
and where the flyout hangs are this popover's own. */
|
|
336
|
+
.selection-toolbar {
|
|
337
|
+
z-index: 100;
|
|
338
|
+
min-width: 0;
|
|
339
|
+
width: calc(4 * 34px + 3 * 2px + 2 * 6px);
|
|
340
|
+
white-space: nowrap;
|
|
341
|
+
}
|
|
342
|
+
.selection-toolbar-marks {
|
|
343
|
+
display: flex;
|
|
344
|
+
align-items: center;
|
|
345
|
+
gap: 2px;
|
|
346
|
+
padding: 2px;
|
|
347
|
+
}
|
|
348
|
+
.selection-toolbar-mark {
|
|
349
|
+
flex: 0 0 34px;
|
|
350
|
+
justify-content: center;
|
|
351
|
+
width: 34px;
|
|
352
|
+
height: 30px;
|
|
353
|
+
padding: 0;
|
|
354
|
+
color: var(--color-ui-muted, #93938d);
|
|
355
|
+
}
|
|
356
|
+
.selection-toolbar-mark:hover:not(:disabled),
|
|
357
|
+
.selection-toolbar-mark[aria-pressed='true'] {
|
|
358
|
+
color: var(--color-text-primary, #e8e8e5);
|
|
359
|
+
}
|
|
360
|
+
/* The marks are serif letters; a Lucide outline beside them needs a heavier stroke to weigh
|
|
361
|
+
the same. */
|
|
362
|
+
.selection-toolbar-mark :global(svg) {
|
|
363
|
+
stroke-width: 2.2;
|
|
364
|
+
}
|
|
365
|
+
.selection-toolbar-row {
|
|
366
|
+
position: relative;
|
|
367
|
+
}
|
|
368
|
+
.selection-toolbar-label {
|
|
369
|
+
flex: 1;
|
|
370
|
+
overflow: hidden;
|
|
371
|
+
text-overflow: ellipsis;
|
|
372
|
+
}
|
|
373
|
+
.selection-toolbar-flyout {
|
|
374
|
+
position: absolute;
|
|
375
|
+
left: 100%;
|
|
376
|
+
top: -4px;
|
|
377
|
+
margin-left: 4px;
|
|
378
|
+
min-width: 150px;
|
|
379
|
+
}
|
|
380
|
+
</style>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The editor's own formatting popover over a selection: a row of marks, then labelled rows
|
|
3
|
+
* for what acts on the whole selection. Built only on the public API a host's toolbar would
|
|
4
|
+
* use (`selectionChange`, the rect API, `runCommand`), so the consumer-guide recipe matches it.
|
|
5
|
+
*/
|
|
6
|
+
import type { EditorInstance } from '../../editor-props';
|
|
7
|
+
type ToolbarEditor = Pick<EditorInstance, 'getSelection' | 'getRects' | 'getBlockKindAt' | 'runCommand' | 'canRunCommand' | 'isCommandActive' | 'getEvents'>;
|
|
8
|
+
type $$ComponentProps = {
|
|
9
|
+
editor: ToolbarEditor;
|
|
10
|
+
root: HTMLElement | undefined;
|
|
11
|
+
};
|
|
12
|
+
declare const SelectionToolbar: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
13
|
+
type SelectionToolbar = ReturnType<typeof SelectionToolbar>;
|
|
14
|
+
export default SelectionToolbar;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The clipboard rows a menu offers
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Ctrl+V takes — either as it is, or escaped so Markdown syntax in it lands as literal text.
|
|
2
|
+
* The clipboard rows a menu offers: cut and copy through the document's own command, so the
|
|
3
|
+
* editor's copy handlers run as usual, and paste as a paste event on the focused editable,
|
|
4
|
+
* as is or escaped so Markdown syntax arrives as literal text.
|
|
6
5
|
*/
|
|
7
6
|
export type ClipboardAction = 'cut' | 'copy' | 'paste' | 'paste-plain';
|
|
8
7
|
/** Markdown-significant bytes, escaped so pasted text reads back exactly as pasted. */
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The clipboard rows a menu offers
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Ctrl+V takes — either as it is, or escaped so Markdown syntax in it lands as literal text.
|
|
2
|
+
* The clipboard rows a menu offers: cut and copy through the document's own command, so the
|
|
3
|
+
* editor's copy handlers run as usual, and paste as a paste event on the focused editable,
|
|
4
|
+
* as is or escaped so Markdown syntax arrives as literal text.
|
|
6
5
|
*/
|
|
7
6
|
/** Markdown-significant bytes, escaped so pasted text reads back exactly as pasted. */
|
|
8
7
|
export function escapeMarkdownLiteral(text) {
|
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What every non-prose block's context menu offers after the kind's own rows: copy it (its
|
|
3
|
-
* Markdown), replace it with the clipboard, remove it — each named for what the block is
|
|
4
|
-
* ("Remove code block", "Copy image"). Plain, not red: every one is a Ctrl+Z away. Prose blocks
|
|
5
|
-
* are the page's background and keep the browser's own menu (`Editor.svelte`).
|
|
6
|
-
*/
|
|
7
1
|
import type { NodeView } from '../../core/node-views';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export declare function isProseBackground(node: NodeView): boolean;
|
|
13
|
-
/** Test-only. */
|
|
14
|
-
export declare function __resetDefaultContextActionsForTests(): void;
|
|
2
|
+
import type { InlineReading } from '../../core/inline/inline-cache';
|
|
3
|
+
/** The noun the menu uses for a block: its kind's name mid-sentence, and "image" or "images"
|
|
4
|
+
* for a paragraph holding nothing but images. */
|
|
5
|
+
export declare function blockNoun(node: NodeView, reading: InlineReading): string;
|
|
15
6
|
export declare function registerDefaultContextActions(): void;
|
|
@@ -1,76 +1,58 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const PROSE_KINDS = new Set(['paragraph', 'heading', 'setextHeading']);
|
|
20
|
-
/** The noun the menu uses for a block: a paragraph holding nothing but an image is "image". */
|
|
21
|
-
export function blockNoun(node) {
|
|
22
|
-
if (node.kind === 'paragraph' && IMAGE_ONLY.test(node.raw))
|
|
23
|
-
return 'image';
|
|
24
|
-
return KIND_NAMES[node.kind] ?? 'block';
|
|
25
|
-
}
|
|
26
|
-
/** Prose is the page's background: it takes no block menu of its own. An image alone in a
|
|
27
|
-
* paragraph is a block, not prose. */
|
|
28
|
-
export function isProseBackground(node) {
|
|
29
|
-
return PROSE_KINDS.has(node.kind) && blockNoun(node) !== 'image';
|
|
1
|
+
/**
|
|
2
|
+
* What every non-prose block's context menu offers after the kind's own rows: copy it (its
|
|
3
|
+
* Markdown), replace it with the clipboard, remove it, each named for what the block is
|
|
4
|
+
* ("Remove code block", "Copy image"). Plain, not red: every one is a Ctrl+Z away. Prose blocks
|
|
5
|
+
* are the page's background and take the clipboard rows instead (`editor-root-menus.ts`).
|
|
6
|
+
*/
|
|
7
|
+
import { blockKindLabel } from '../../a11y-strings';
|
|
8
|
+
import { pictureImageCount } from '../../core/inline/picture';
|
|
9
|
+
import { EVERY_KIND, registerBuiltinBlockContextActions } from '../../schema/context-actions';
|
|
10
|
+
/** The noun the menu uses for a block: its kind's name mid-sentence, and "image" or "images"
|
|
11
|
+
* for a paragraph holding nothing but images. */
|
|
12
|
+
export function blockNoun(node, reading) {
|
|
13
|
+
const images = pictureImageCount(node, reading);
|
|
14
|
+
if (images > 0)
|
|
15
|
+
return images === 1 ? 'image' : 'images';
|
|
16
|
+
const label = blockKindLabel(node.kind);
|
|
17
|
+
// An initialism keeps its capitals: "HTML block", not "hTML block".
|
|
18
|
+
return /^.[A-Z]/.test(label) ? label : label.charAt(0).toLowerCase() + label.slice(1);
|
|
30
19
|
}
|
|
31
20
|
let registered = false;
|
|
32
|
-
/** Test-only. */
|
|
33
|
-
export function __resetDefaultContextActionsForTests() {
|
|
34
|
-
registered = false;
|
|
35
|
-
}
|
|
36
21
|
export function registerDefaultContextActions() {
|
|
37
22
|
if (registered)
|
|
38
23
|
return;
|
|
39
24
|
registered = true;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
{
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
catch {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
if (text.trim() === '')
|
|
62
|
-
return;
|
|
63
|
-
// The paste transforms first, as any paste gets, so a plugin's rewrite applies.
|
|
64
|
-
const md = applyPasteTransforms(text);
|
|
65
|
-
await ctx.replaceRaw(md.endsWith('\n') ? md : md + '\n');
|
|
25
|
+
registerBuiltinBlockContextActions(EVERY_KIND, 'block', (node, _path, noun) => [
|
|
26
|
+
{
|
|
27
|
+
id: 'block.copy',
|
|
28
|
+
label: `Copy ${noun}`,
|
|
29
|
+
icon: 'copy',
|
|
30
|
+
run: () => navigator.clipboard.writeText(node.raw)
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
id: 'block.replace',
|
|
34
|
+
label: 'Replace with clipboard',
|
|
35
|
+
icon: 'clipboard',
|
|
36
|
+
run: async (ctx) => {
|
|
37
|
+
let text;
|
|
38
|
+
try {
|
|
39
|
+
text = await navigator.clipboard.readText();
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return;
|
|
66
43
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
run: (ctx) => ctx.deleteBlock()
|
|
44
|
+
if (text.trim() === '')
|
|
45
|
+
return;
|
|
46
|
+
// The paste transforms first, as any paste gets, so a plugin's rewrite applies.
|
|
47
|
+
const md = ctx.transformPaste(text);
|
|
48
|
+
await ctx.replaceRaw(md.endsWith('\n') ? md : md + '\n');
|
|
73
49
|
}
|
|
74
|
-
|
|
75
|
-
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: 'block.remove',
|
|
53
|
+
label: `Remove ${noun}`,
|
|
54
|
+
icon: 'trash',
|
|
55
|
+
run: (ctx) => ctx.deleteBlock()
|
|
56
|
+
}
|
|
57
|
+
]);
|
|
76
58
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Svelte attachment for a menu flyout: measures the
|
|
3
|
-
*
|
|
2
|
+
* Svelte attachment for a menu flyout: measures the panel once it is in the DOM and moves it to
|
|
3
|
+
* stay inside the viewport (`flyoutPlacement`). The element's own CSS hangs it off the row's
|
|
4
4
|
* right edge; this writes the correction inline, so the rule lives in one place for every menu.
|
|
5
5
|
*/
|
|
6
6
|
export declare function keepFlyoutOnScreen(node: HTMLElement): void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Svelte attachment for a menu flyout: measures the
|
|
3
|
-
*
|
|
2
|
+
* Svelte attachment for a menu flyout: measures the panel once it is in the DOM and moves it to
|
|
3
|
+
* stay inside the viewport (`flyoutPlacement`). The element's own CSS hangs it off the row's
|
|
4
4
|
* right edge; this writes the correction inline, so the rule lives in one place for every menu.
|
|
5
5
|
*/
|
|
6
6
|
import { flyoutPlacement } from '../blocks/table/table-menu-model';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How many editor menus are showing, which is what `menuChange` reports. Every menu attaches
|
|
3
|
+
* `track` to its root element, so a menu reads open for exactly as long as it is mounted,
|
|
4
|
+
* whichever way it closes. A count, so two menus overlapping still read as one open.
|
|
5
|
+
*/
|
|
6
|
+
import type { Attachment } from 'svelte/attachments';
|
|
7
|
+
export interface MenuPresence {
|
|
8
|
+
/** A getter, so a reader re-runs when a menu opens or closes. */
|
|
9
|
+
readonly isOpen: boolean;
|
|
10
|
+
track: Attachment;
|
|
11
|
+
}
|
|
12
|
+
export declare function createMenuPresence(): MenuPresence;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How many editor menus are showing, which is what `menuChange` reports. Every menu attaches
|
|
3
|
+
* `track` to its root element, so a menu reads open for exactly as long as it is mounted,
|
|
4
|
+
* whichever way it closes. A count, so two menus overlapping still read as one open.
|
|
5
|
+
*/
|
|
6
|
+
import { untrack } from 'svelte';
|
|
7
|
+
export function createMenuPresence() {
|
|
8
|
+
let open = $state(0);
|
|
9
|
+
return {
|
|
10
|
+
get isOpen() {
|
|
11
|
+
return open > 0;
|
|
12
|
+
},
|
|
13
|
+
track() {
|
|
14
|
+
// Untracked, or the attachment would depend on the count it writes and rerun forever.
|
|
15
|
+
untrack(() => open++);
|
|
16
|
+
return () => untrack(() => open--);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* editor-root fallback.
|
|
4
|
-
*
|
|
5
|
-
* dependably live afterwards), and a multi-block selection reaches the delete only after the hook
|
|
6
|
-
* answers, so a failed import destroys nothing.
|
|
2
|
+
* Hands a paste's images to the host's import hook, for the blocks' clipboard code and the
|
|
3
|
+
* editor-root fallback alike. Files are read before the first await, since `clipboardData` may
|
|
4
|
+
* not stay live, and a multi-block selection is deleted only after the hook answers.
|
|
7
5
|
*/
|
|
8
6
|
import type { PasteImageHook } from '../editor-keys';
|
|
9
7
|
import { type EditorEvents } from '../editor-events';
|
|
10
8
|
import type { CrossBlockHandlers } from '../selection/cross-block/dispatch';
|
|
11
9
|
export interface ImagePasteArmDeps {
|
|
12
|
-
/** Undefined leaves
|
|
10
|
+
/** Undefined leaves a paste carrying images on the text/plain path: `filesOf`
|
|
13
11
|
* then reports none. */
|
|
14
12
|
onPasteImage: PasteImageHook | undefined;
|
|
15
13
|
/** A failed import reports here rather than vanishing. */
|
|
@@ -19,11 +17,8 @@ export interface ImagePasteArmDeps {
|
|
|
19
17
|
export interface ImagePasteArm {
|
|
20
18
|
/** Call before the handler's first await; empty when no hook is installed. */
|
|
21
19
|
filesOf(data: DataTransfer | null): File[];
|
|
22
|
-
/**
|
|
23
|
-
*
|
|
24
|
-
* seam. Null means the arm is finished (nothing imported, or a multi-block
|
|
25
|
-
* selection took the insertion); markdown means no selection claimed it.
|
|
26
|
-
*/
|
|
20
|
+
/** Imports `files` in clipboard order and offers the markdown to the cross-block paste; null
|
|
21
|
+
* when nothing is left to do, the markdown when no selection took it. */
|
|
27
22
|
run(e: ClipboardEvent, files: File[]): Promise<string | null>;
|
|
28
23
|
}
|
|
29
24
|
export declare function createImagePasteArm(deps: ImagePasteArmDeps): ImagePasteArm;
|