@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,7 +1,8 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { untrack } from 'svelte';
|
|
3
3
|
import type { ImageCrop, ImageFields } from '../../core/nodes';
|
|
4
|
-
import {
|
|
4
|
+
import { pressLeavesImage } from './widget-selection-state.svelte';
|
|
5
|
+
import type { WidgetTarget } from '../../selection/primitives';
|
|
5
6
|
import {
|
|
6
7
|
IMAGE_ALT_FIELD,
|
|
7
8
|
IMAGE_ALT_PLACEHOLDER,
|
|
@@ -12,6 +13,7 @@
|
|
|
12
13
|
IMAGE_REMOVE
|
|
13
14
|
} from '../../a11y-strings';
|
|
14
15
|
import MenuIcon from '../menu/MenuIcon.svelte';
|
|
16
|
+
import type { MenuPresence } from '../menu/menu-presence.svelte';
|
|
15
17
|
import { DEFAULT_CROP, applyCropToWidget, panCrop, zoomCrop, type Size } from './image-crop';
|
|
16
18
|
|
|
17
19
|
let {
|
|
@@ -23,19 +25,24 @@
|
|
|
23
25
|
onRemove,
|
|
24
26
|
onDismiss,
|
|
25
27
|
maxFrameWidth,
|
|
28
|
+
menuPresence,
|
|
26
29
|
cropping = $bindable(false)
|
|
27
30
|
}: {
|
|
28
31
|
target: WidgetTarget;
|
|
29
32
|
fields: ImageFields;
|
|
30
33
|
getWidgetEl: () => HTMLElement | null;
|
|
31
|
-
/** The popover
|
|
32
|
-
*
|
|
34
|
+
/** The popover decides it has changes by comparing bytes, and what those bytes are
|
|
35
|
+
* is the image write path's to decide. */
|
|
33
36
|
buildBytes: (target: WidgetTarget, fields: ImageFields) => string | null;
|
|
34
|
-
|
|
37
|
+
/** `fields` goes back with each write, so a draft for an image the document has since
|
|
38
|
+
* replaced is dropped. */
|
|
39
|
+
onCommit: (target: WidgetTarget, seenFields: ImageFields, newFields: ImageFields) => void;
|
|
35
40
|
onRemove: (target: WidgetTarget) => void;
|
|
36
41
|
onDismiss: () => void;
|
|
37
42
|
/** The column width: the widest frame a corner drag can open. */
|
|
38
43
|
maxFrameWidth: () => number;
|
|
44
|
+
/** The alt field is a popover over the document, so it counts as an open menu. */
|
|
45
|
+
menuPresence: MenuPresence;
|
|
39
46
|
cropping?: boolean;
|
|
40
47
|
} = $props();
|
|
41
48
|
|
|
@@ -45,13 +52,12 @@
|
|
|
45
52
|
let rootEl: HTMLDivElement | undefined = $state();
|
|
46
53
|
let fieldInput: HTMLInputElement | undefined = $state();
|
|
47
54
|
|
|
48
|
-
// The
|
|
49
|
-
// identity says nothing about whether the image
|
|
55
|
+
// The starting point is the bytes, not the fields object: a rebuild creates a fresh object
|
|
56
|
+
// every render, so its identity says nothing about whether the image changed.
|
|
50
57
|
let seedBytes = $state(untrack(() => buildBytes(target, fields)));
|
|
51
58
|
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
// old bytes back. The in-flight draft is discarded rather than a committed change reverted.
|
|
59
|
+
// A write from outside the popover while it stays open (a find-bar replace) discards the
|
|
60
|
+
// draft, or an edit to it would put the earlier bytes back.
|
|
55
61
|
$effect(() => {
|
|
56
62
|
const live = buildBytes(target, fields);
|
|
57
63
|
if (live === seedBytes) return;
|
|
@@ -62,17 +68,14 @@
|
|
|
62
68
|
$effect(() => {
|
|
63
69
|
if (!rootEl) return;
|
|
64
70
|
const handler = (e: PointerEvent) => {
|
|
65
|
-
|
|
66
|
-
if (target?.closest(IMAGE_CHROME_SELECTOR)) return;
|
|
67
|
-
onDismiss();
|
|
71
|
+
if (pressLeavesImage(e, getWidgetEl()?.closest('.editor') ?? null)) onDismiss();
|
|
68
72
|
};
|
|
69
73
|
document.addEventListener('pointerdown', handler, true);
|
|
70
74
|
return () => document.removeEventListener('pointerdown', handler, true);
|
|
71
75
|
});
|
|
72
76
|
|
|
73
|
-
//
|
|
74
|
-
//
|
|
75
|
-
// committed: only the tick writes one.
|
|
77
|
+
// In the effect's cleanup, so every way the popover closes commits here; an open crop is
|
|
78
|
+
// abandoned, since only the tick button writes one.
|
|
76
79
|
$effect(() => {
|
|
77
80
|
return () => {
|
|
78
81
|
if (cropping) cancelCrop();
|
|
@@ -87,7 +90,7 @@
|
|
|
87
90
|
// ── Alt ────────────────────────────────────────────────────────────────────
|
|
88
91
|
|
|
89
92
|
// The title (``) has no field: it is a tooltip nobody reads in an editor,
|
|
90
|
-
// and an existing one
|
|
93
|
+
// and an existing one passes through every commit untouched, as do the url, frame and crop.
|
|
91
94
|
function draftFields(): ImageFields {
|
|
92
95
|
return {
|
|
93
96
|
alt,
|
|
@@ -103,10 +106,10 @@
|
|
|
103
106
|
const next = draftFields();
|
|
104
107
|
const newBytes = buildBytes(target, next);
|
|
105
108
|
if (newBytes === seedBytes) return;
|
|
106
|
-
//
|
|
109
|
+
// Set now rather than when the write lands, so a blur and the unmount that follows
|
|
107
110
|
// it cannot commit the same draft twice.
|
|
108
111
|
seedBytes = newBytes;
|
|
109
|
-
onCommit(target, next);
|
|
112
|
+
onCommit(target, fields, next);
|
|
110
113
|
}
|
|
111
114
|
|
|
112
115
|
function toggleField() {
|
|
@@ -132,9 +135,8 @@
|
|
|
132
135
|
}
|
|
133
136
|
|
|
134
137
|
// ── Crop ───────────────────────────────────────────────────────────────────
|
|
135
|
-
//
|
|
136
|
-
//
|
|
137
|
-
// gains `|WxH` on its first crop.
|
|
138
|
+
// Drag pans, the wheel zooms, the corners resize the frame, the tick writes it. The frame
|
|
139
|
+
// starts as the image's current box, so an unframed image gains `|WxH` on its first crop.
|
|
138
140
|
|
|
139
141
|
let draft = $state<ImageCrop>(DEFAULT_CROP);
|
|
140
142
|
let frame: Size = { width: 0, height: 0 };
|
|
@@ -200,11 +202,11 @@
|
|
|
200
202
|
height: Math.round(frame.height),
|
|
201
203
|
crop: draft
|
|
202
204
|
};
|
|
203
|
-
// The commit rebuilds the widget from the bytes; the preview styles go with the
|
|
205
|
+
// The commit rebuilds the widget from the bytes; the preview styles go with the replaced DOM.
|
|
204
206
|
snapshot = null;
|
|
205
207
|
cropping = false;
|
|
206
208
|
seedBytes = buildBytes(target, next);
|
|
207
|
-
onCommit(target, next);
|
|
209
|
+
onCommit(target, fields, next);
|
|
208
210
|
}
|
|
209
211
|
|
|
210
212
|
function onCropPointerDown(e: PointerEvent) {
|
|
@@ -231,10 +233,8 @@
|
|
|
231
233
|
paintDraft();
|
|
232
234
|
}
|
|
233
235
|
|
|
234
|
-
// The
|
|
235
|
-
//
|
|
236
|
-
// left-hand corner dragged inward shrinks the width the way the right-hand one dragged
|
|
237
|
-
// inward does.
|
|
236
|
+
// The frame stays anchored in the flow, so every corner moves the far edges: a left corner
|
|
237
|
+
// dragged inward shrinks the width as a right one does.
|
|
238
238
|
type Corner = 'tl' | 'tr' | 'bl' | 'br';
|
|
239
239
|
const MIN_FRAME = 32;
|
|
240
240
|
let cornerDrag: { corner: Corner; startX: number; startY: number; start: Size } | null = null;
|
|
@@ -266,9 +266,8 @@
|
|
|
266
266
|
cornerDrag = null;
|
|
267
267
|
}
|
|
268
268
|
|
|
269
|
-
// A double click on the picture
|
|
270
|
-
//
|
|
271
|
-
// each commit rebuilds the widget and a listener bound to one goes stale with it.
|
|
269
|
+
// A double click on the picture starts a crop. On the document, since each commit rebuilds
|
|
270
|
+
// the widget and a listener bound to it would go stale.
|
|
272
271
|
$effect(() => {
|
|
273
272
|
const onDoubleClick = (e: MouseEvent) => {
|
|
274
273
|
if (cropping) return;
|
|
@@ -301,9 +300,8 @@
|
|
|
301
300
|
|
|
302
301
|
// ── Placement ──────────────────────────────────────────────────────────────
|
|
303
302
|
|
|
304
|
-
/** Beside the image, level with its top, when
|
|
305
|
-
*
|
|
306
|
-
* past it. Re-measured whenever the overlay re-anchors. */
|
|
303
|
+
/** Beside the image, level with its top, when there is room; otherwise a row inside its
|
|
304
|
+
* top-right corner, clamped to the viewport. Re-measured whenever the overlay moves. */
|
|
307
305
|
function keepBesideImage(node: HTMLElement): (() => void) | void {
|
|
308
306
|
const place = () => {
|
|
309
307
|
node.classList.remove('inside');
|
|
@@ -425,7 +423,7 @@
|
|
|
425
423
|
</button>
|
|
426
424
|
{/if}
|
|
427
425
|
{#if fieldOpen}
|
|
428
|
-
<label class="md-image-field" {@attach keepFieldOnScreen}>
|
|
426
|
+
<label class="md-image-field" {@attach keepFieldOnScreen} {@attach menuPresence.track}>
|
|
429
427
|
<span class="md-image-field-label">Alt</span>
|
|
430
428
|
<input
|
|
431
429
|
type="text"
|
|
@@ -440,8 +438,8 @@
|
|
|
440
438
|
</div>
|
|
441
439
|
|
|
442
440
|
<style>
|
|
443
|
-
/*
|
|
444
|
-
|
|
441
|
+
/* Small raised buttons beside the image, level with its top; `inside` (no room beside)
|
|
442
|
+
lays them as a row in the image's top-right corner. */
|
|
445
443
|
.md-image-properties {
|
|
446
444
|
position: absolute;
|
|
447
445
|
top: 0;
|
|
@@ -481,8 +479,7 @@
|
|
|
481
479
|
background: var(--color-surface, #2d3033);
|
|
482
480
|
}
|
|
483
481
|
|
|
484
|
-
/* The alt field
|
|
485
|
-
input, the way a properties row reads, rather than a label beside a box. */
|
|
482
|
+
/* The alt field hangs off the toolbar's far side: a caption over its input. */
|
|
486
483
|
.md-image-field {
|
|
487
484
|
position: absolute;
|
|
488
485
|
top: 0;
|
|
@@ -515,8 +512,7 @@
|
|
|
515
512
|
color: var(--color-text-muted, #aaaaaa);
|
|
516
513
|
}
|
|
517
514
|
|
|
518
|
-
/* Underlined, not boxed:
|
|
519
|
-
surface calm, where a second rounded box inside a rounded card reads as chrome on chrome. */
|
|
515
|
+
/* Underlined, not boxed: a box inside the rounded panel would read as a frame in a frame. */
|
|
520
516
|
.md-image-field input {
|
|
521
517
|
width: 100%;
|
|
522
518
|
box-sizing: border-box;
|
|
@@ -539,7 +535,7 @@
|
|
|
539
535
|
color: var(--color-text-muted, #aaaaaa);
|
|
540
536
|
}
|
|
541
537
|
|
|
542
|
-
/*
|
|
538
|
+
/* While cropping: the whole image can be dragged to pan, with brackets at the corners. */
|
|
543
539
|
.md-image-crop-surface {
|
|
544
540
|
position: absolute;
|
|
545
541
|
inset: 0;
|
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
import type { ImageFields } from '../../core/nodes';
|
|
2
|
-
import {
|
|
2
|
+
import type { WidgetTarget } from '../../selection/primitives';
|
|
3
|
+
import type { MenuPresence } from '../menu/menu-presence.svelte';
|
|
3
4
|
type $$ComponentProps = {
|
|
4
5
|
target: WidgetTarget;
|
|
5
6
|
fields: ImageFields;
|
|
6
7
|
getWidgetEl: () => HTMLElement | null;
|
|
7
|
-
/** The popover
|
|
8
|
-
*
|
|
8
|
+
/** The popover decides it has changes by comparing bytes, and what those bytes are
|
|
9
|
+
* is the image write path's to decide. */
|
|
9
10
|
buildBytes: (target: WidgetTarget, fields: ImageFields) => string | null;
|
|
10
|
-
|
|
11
|
+
/** `fields` goes back with each write, so a draft for an image the document has since
|
|
12
|
+
* replaced is dropped. */
|
|
13
|
+
onCommit: (target: WidgetTarget, seenFields: ImageFields, newFields: ImageFields) => void;
|
|
11
14
|
onRemove: (target: WidgetTarget) => void;
|
|
12
15
|
onDismiss: () => void;
|
|
13
16
|
/** The column width: the widest frame a corner drag can open. */
|
|
14
17
|
maxFrameWidth: () => number;
|
|
18
|
+
/** The alt field is a popover over the document, so it counts as an open menu. */
|
|
19
|
+
menuPresence: MenuPresence;
|
|
15
20
|
cropping?: boolean;
|
|
16
21
|
};
|
|
17
22
|
declare const ImageProperties: import("svelte").Component<$$ComponentProps, {}, "cropping">;
|
|
@@ -26,9 +26,8 @@
|
|
|
26
26
|
currentWidth: number;
|
|
27
27
|
} | null = $state(null);
|
|
28
28
|
|
|
29
|
-
// `md-image-broken`
|
|
30
|
-
//
|
|
31
|
-
// the widget DOM, so the observer re-attaches on every edit event.
|
|
29
|
+
// Mirrors the widget's `md-image-broken` class into state; re-attached on every edit, since
|
|
30
|
+
// each commit rebuilds the widget.
|
|
32
31
|
let isBroken = $state(false);
|
|
33
32
|
$effect(() => {
|
|
34
33
|
let observer: MutationObserver | null = null;
|
|
@@ -64,12 +63,8 @@
|
|
|
64
63
|
return getWidgetEl()?.querySelector('img') ?? null;
|
|
65
64
|
}
|
|
66
65
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
* picture panned inside it, so the `<img>` is neither the size being changed nor the box the
|
|
70
|
-
* user is dragging: previewing on it bulges the picture out of its frame, and at a zoom above
|
|
71
|
-
* 1 the drag would start from the painted image's width and jump.
|
|
72
|
-
*/
|
|
66
|
+
// A cropped image resizes its frame (the widget), not the `<img>` panned inside it, which
|
|
67
|
+
// would bulge out of the frame and, zoomed, start the drag from the wrong width.
|
|
73
68
|
function isCropped(): boolean {
|
|
74
69
|
return getWidgetEl()?.classList.contains('md-image-cropped') ?? false;
|
|
75
70
|
}
|
|
@@ -94,9 +89,8 @@
|
|
|
94
89
|
startWidth,
|
|
95
90
|
startHeight,
|
|
96
91
|
naturalWidth: img.naturalWidth,
|
|
97
|
-
// A crop's frame keeps its shape through a resize
|
|
98
|
-
//
|
|
99
|
-
// brackets are where a frame's aspect changes.
|
|
92
|
+
// A crop's frame keeps its shape through a resize, so Shift unlocks nothing; the crop
|
|
93
|
+
// corners are where a frame's shape changes.
|
|
100
94
|
aspectLocked: isCropped() || !e.shiftKey,
|
|
101
95
|
currentWidth: startWidth
|
|
102
96
|
};
|
|
@@ -104,9 +98,8 @@
|
|
|
104
98
|
|
|
105
99
|
function moveDrag(e: PointerEvent) {
|
|
106
100
|
if (!dragState) return;
|
|
107
|
-
// Reflow mid-drag
|
|
108
|
-
//
|
|
109
|
-
// snapping the image to nothing.
|
|
101
|
+
// Reflow mid-drag can briefly zero the content width; the last good width holds rather
|
|
102
|
+
// than snapping the image to nothing.
|
|
110
103
|
if (editorContentWidth < MIN_WIDTH) return;
|
|
111
104
|
const dx = e.clientX - dragState.startX;
|
|
112
105
|
const proposed = dragState.startWidth + dx;
|
|
@@ -116,9 +109,8 @@
|
|
|
116
109
|
const preview = previewEl();
|
|
117
110
|
if (!preview) return;
|
|
118
111
|
preview.style.width = `${snapped}px`;
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
// `height: auto` (plain) derives it from the new width.
|
|
112
|
+
// Unlocked, the height stays put and the image distorts; locked, the frame's `aspect-ratio`
|
|
113
|
+
// or the stylesheet's `height: auto` derives it from the width.
|
|
122
114
|
preview.style.height = dragState.aspectLocked ? '' : `${dragState.startHeight}px`;
|
|
123
115
|
}
|
|
124
116
|
|
|
@@ -173,8 +165,8 @@
|
|
|
173
165
|
}
|
|
174
166
|
</script>
|
|
175
167
|
|
|
176
|
-
<!-- One
|
|
177
|
-
aspect), so a second corner
|
|
168
|
+
<!-- One handle, on the right edge: width is the only thing a drag sets (Shift unlocks the
|
|
169
|
+
aspect ratio), so a second corner handle would be the same gesture twice. -->
|
|
178
170
|
{#if !isBroken}
|
|
179
171
|
<div
|
|
180
172
|
class="md-resize-handle md-resize-handle-right"
|
|
@@ -187,12 +179,8 @@
|
|
|
187
179
|
{/if}
|
|
188
180
|
|
|
189
181
|
<style>
|
|
190
|
-
/*
|
|
191
|
-
|
|
192
|
-
rather than as a control. White over a hairline rim so it carries on a dark picture and a
|
|
193
|
-
pale one alike. The hit strip is wider than the paint, so on a picture too narrow to hold
|
|
194
|
-
both the strip and a clickable middle (an icon-sized image) the grip steps back outside
|
|
195
|
-
the edge, where it stood before. */
|
|
182
|
+
/* White over a hairline rim, inside the right edge, so it shows on any picture without
|
|
183
|
+
competing with the accent selection ring; on an icon-sized image it moves outside the edge. */
|
|
196
184
|
.md-resize-handle {
|
|
197
185
|
position: absolute;
|
|
198
186
|
right: clamp(-3px, calc(50% - 20px), 7px);
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Pure math for the image crop:
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* The model is CSS `background-size: cover` at `z` times the fill scale, with the image point
|
|
7
|
-
* (`x`%, `y`%) pinned to that point of the frame, so `{50, 50, 1}` is a centred cover fit.
|
|
2
|
+
* Pure math for the image crop: the styles a `{x, y, z}` window paints with, and how a pan or a
|
|
3
|
+
* wheel turn moves it. The model is a cover fit scaled by `z`, with the image point (`x`%, `y`%)
|
|
4
|
+
* pinned to the same point of the frame, so `{50, 50, 1}` is a centred cover fit.
|
|
8
5
|
*/
|
|
9
6
|
import type { ImageCrop } from '../../core/nodes';
|
|
10
7
|
export declare const DEFAULT_CROP: ImageCrop;
|
|
@@ -13,11 +10,8 @@ export interface Size {
|
|
|
13
10
|
height: number;
|
|
14
11
|
}
|
|
15
12
|
export declare function clampCrop(crop: ImageCrop): ImageCrop;
|
|
16
|
-
/**
|
|
17
|
-
*
|
|
18
|
-
* the frame with `object-fit: cover`, offset so the pinned point stays put: at `z` 1 the offset
|
|
19
|
-
* is zero and `object-position` alone pans the cover overflow.
|
|
20
|
-
*/
|
|
13
|
+
/** The image box is `z` times the frame with `object-fit: cover`, offset so the pinned point
|
|
14
|
+
* stays put; at `z` 1 the offset is zero and `object-position` alone pans. */
|
|
21
15
|
export declare function cropImageStyle(crop: ImageCrop): {
|
|
22
16
|
width: string;
|
|
23
17
|
height: string;
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Pure math for the image crop:
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* The model is CSS `background-size: cover` at `z` times the fill scale, with the image point
|
|
7
|
-
* (`x`%, `y`%) pinned to that point of the frame, so `{50, 50, 1}` is a centred cover fit.
|
|
2
|
+
* Pure math for the image crop: the styles a `{x, y, z}` window paints with, and how a pan or a
|
|
3
|
+
* wheel turn moves it. The model is a cover fit scaled by `z`, with the image point (`x`%, `y`%)
|
|
4
|
+
* pinned to the same point of the frame, so `{50, 50, 1}` is a centred cover fit.
|
|
8
5
|
*/
|
|
9
6
|
import { MAX_CROP_ZOOM } from '../../core/inline/image-dimensions';
|
|
10
7
|
export const DEFAULT_CROP = { x: 50, y: 50, z: 1 };
|
|
@@ -15,11 +12,8 @@ export function clampCrop(crop) {
|
|
|
15
12
|
z: Math.min(MAX_CROP_ZOOM, Math.max(1, crop.z))
|
|
16
13
|
};
|
|
17
14
|
}
|
|
18
|
-
/**
|
|
19
|
-
*
|
|
20
|
-
* the frame with `object-fit: cover`, offset so the pinned point stays put: at `z` 1 the offset
|
|
21
|
-
* is zero and `object-position` alone pans the cover overflow.
|
|
22
|
-
*/
|
|
15
|
+
/** The image box is `z` times the frame with `object-fit: cover`, offset so the pinned point
|
|
16
|
+
* stays put; at `z` 1 the offset is zero and `object-position` alone pans. */
|
|
23
17
|
export function cropImageStyle(crop) {
|
|
24
18
|
const c = clampCrop(crop);
|
|
25
19
|
const pct = (n) => `${Math.round(n * 1000) / 1000}%`;
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import type { Document, ImageFields, InlineNode } from '../../core/nodes';
|
|
2
|
-
import type {
|
|
3
|
-
import type { UndoController } from '../../editor-actions/deps';
|
|
2
|
+
import type { InlineRangeCommit } from '../../editor-actions/inline-range-commit';
|
|
4
3
|
import type { EditorEvents } from '../../editor-events';
|
|
5
|
-
import type {
|
|
6
|
-
import type {
|
|
4
|
+
import type { WidgetSelectionState } from './widget-selection-state.svelte';
|
|
5
|
+
import type { WidgetTarget } from '../../selection/primitives';
|
|
6
|
+
import type { Reading } from '../../schema/reading';
|
|
7
|
+
/** The image `target` names in `doc`, or null once no image starts at its bytes. */
|
|
8
|
+
export declare function imageAtTarget(doc: Document, target: WidgetTarget, reading: Reading): InlineNode | null;
|
|
7
9
|
export interface ImageEditCommitterDeps {
|
|
8
10
|
getDoc: () => Document;
|
|
9
11
|
getEditorEl: () => HTMLElement | null;
|
|
10
12
|
widgetSelection: WidgetSelectionState;
|
|
11
|
-
|
|
13
|
+
/** The editor's inline range write, which every popover edit goes through. */
|
|
14
|
+
inlineRange: InlineRangeCommit;
|
|
12
15
|
events: EditorEvents;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
/** How the editor reads its bytes: the image is found in the block as drawn, and the block's
|
|
17
|
+
* own raw-write rule reads its grammar. */
|
|
18
|
+
reading: Reading;
|
|
16
19
|
}
|
|
17
20
|
export interface SelectedImageFields {
|
|
18
21
|
image: InlineNode;
|
|
@@ -20,20 +23,20 @@ export interface SelectedImageFields {
|
|
|
20
23
|
}
|
|
21
24
|
export interface ImageEditCommitter {
|
|
22
25
|
getSelectedImageFields(): SelectedImageFields | null;
|
|
23
|
-
/**
|
|
24
|
-
*
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
*/
|
|
28
|
-
commitImageEdit(target: WidgetTarget, newFields: ImageFields): void;
|
|
29
|
-
/** The bytes `commitImageEdit` would write, or `null` if it would decline — the
|
|
30
|
-
* popover's dirty check compares against these. */
|
|
26
|
+
/** Writes only if the image at `target` still reads as `seenFields`, the image the popover
|
|
27
|
+
* last showed, so a draft never lands on another image. */
|
|
28
|
+
commitImageEdit(target: WidgetTarget, seenFields: ImageFields, newFields: ImageFields): void;
|
|
29
|
+
/** The bytes `commitImageEdit` would write, or `null` if it would refuse; the popover
|
|
30
|
+
* compares against these to see whether anything changed. */
|
|
31
31
|
buildEditBytes(target: WidgetTarget, newFields: ImageFields): string | null;
|
|
32
32
|
commitImageResize(newWidth: number, newHeight: number | undefined): void;
|
|
33
33
|
removeImage(target: WidgetTarget): void;
|
|
34
34
|
dismissImagePopover(): void;
|
|
35
35
|
getEditorContentWidth(): number;
|
|
36
36
|
attachWidgetSelectListener(): () => void;
|
|
37
|
+
/** Clears the widget selection once no image starts at its bytes; commits to this image or
|
|
38
|
+
* to one before it keep it selected. */
|
|
39
|
+
clearStaleSelection(): void;
|
|
37
40
|
syncOverlayToWidget(getOverlay: () => HTMLElement | null): () => void;
|
|
38
41
|
}
|
|
39
42
|
export declare function createImageEditCommitter(deps: ImageEditCommitterDeps): ImageEditCommitter;
|
|
@@ -1,42 +1,36 @@
|
|
|
1
|
+
import { tick } from 'svelte';
|
|
1
2
|
import { resolvedInlineContent } from '../../core/inline/inline-cache';
|
|
2
3
|
import { flattenInlineWidgets } from '../../core/inline/inline-widgets';
|
|
3
|
-
import { createInlineRangeCommit } from '../../editor-actions/inline-range-commit';
|
|
4
4
|
import { FALLBACK_CONTENT_WIDTH } from '../../cursor/typography-estimates';
|
|
5
5
|
import { blockNodeAt } from '../../tree-operations/node-primitives';
|
|
6
|
-
import { buildImageEditBytes } from '
|
|
6
|
+
import { buildImageEditBytes, imageFieldsFromInline, sameImageFields } from '../../core/inline/image-source-bytes';
|
|
7
|
+
// ── Public API ──────────────────────────────────────────────────────────
|
|
8
|
+
/** The image `target` names in `doc`, or null once no image starts at its bytes. */
|
|
9
|
+
export function imageAtTarget(doc, target, reading) {
|
|
10
|
+
const paragraph = blockNodeAt(doc, target.paragraphPath);
|
|
11
|
+
return paragraph ? findImageInParagraph(paragraph, target.sourceStart, reading) : null;
|
|
12
|
+
}
|
|
7
13
|
export function createImageEditCommitter(deps) {
|
|
8
|
-
const { getDoc, getEditorEl, widgetSelection,
|
|
9
|
-
const inlineRange = createInlineRangeCommit({ getDoc, controller, grammar: deps.grammar });
|
|
10
|
-
function findImageInParagraph(para, sourceStart) {
|
|
11
|
-
// Resolver-aware so a reference-style image resolves as the render path saw it,
|
|
12
|
-
// and flattened so an image nested in a link (`[![alt][ref]][repo]`) is found.
|
|
13
|
-
const inlines = resolvedInlineContent(para, deps.linkRef);
|
|
14
|
-
for (const widget of flattenInlineWidgets(inlines, para.raw)) {
|
|
15
|
-
if (widget.kind === 'image' && widget.start === sourceStart)
|
|
16
|
-
return widget;
|
|
17
|
-
}
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
14
|
+
const { getDoc, getEditorEl, widgetSelection, inlineRange, events } = deps;
|
|
20
15
|
function queryWidgetEl(paragraphPath, sourceStart) {
|
|
21
16
|
const root = getEditorEl();
|
|
22
17
|
if (!root)
|
|
23
18
|
return null;
|
|
24
|
-
// Locate by the live block-host path, never
|
|
19
|
+
// Locate by the live block-host path, never an attribute baked into the widget:
|
|
25
20
|
// see widget-dom.ts's click handler.
|
|
26
21
|
const host = root.querySelector(`[data-block-path='${JSON.stringify(paragraphPath)}']`);
|
|
27
22
|
if (!host)
|
|
28
23
|
return null;
|
|
29
24
|
return host.querySelector(`[data-image-widget][data-source-start="${sourceStart}"]`);
|
|
30
25
|
}
|
|
26
|
+
const imageAt = (target) => imageAtTarget(getDoc(), target, deps.reading);
|
|
27
|
+
// The bytes the last popover write moved, applied by the next stale check: the write runs as
|
|
28
|
+
// the popover unmounts, where a read of the selection still returns the one before the click.
|
|
29
|
+
let lastShift = null;
|
|
31
30
|
function getSelectedImageFields() {
|
|
32
31
|
const sel = widgetSelection.getSelected();
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const paragraph = blockNodeAt(getDoc(), sel.paragraphPath);
|
|
36
|
-
if (!paragraph)
|
|
37
|
-
return null;
|
|
38
|
-
const image = findImageInParagraph(paragraph, sel.sourceStart);
|
|
39
|
-
if (!image)
|
|
32
|
+
const image = sel && imageAt(sel);
|
|
33
|
+
if (!sel || !image)
|
|
40
34
|
return null;
|
|
41
35
|
return { image, widgetEl: queryWidgetEl(sel.paragraphPath, sel.sourceStart) };
|
|
42
36
|
}
|
|
@@ -44,11 +38,11 @@ export function createImageEditCommitter(deps) {
|
|
|
44
38
|
const paragraph = blockNodeAt(getDoc(), target.paragraphPath);
|
|
45
39
|
if (!paragraph)
|
|
46
40
|
return null;
|
|
47
|
-
const image = findImageInParagraph(paragraph, target.sourceStart);
|
|
41
|
+
const image = findImageInParagraph(paragraph, target.sourceStart, deps.reading);
|
|
48
42
|
if (!image)
|
|
49
43
|
return null;
|
|
50
|
-
//
|
|
51
|
-
//
|
|
44
|
+
// Keep the reference form when the url and title are untouched: writing the resolved
|
|
45
|
+
// url inline would leave the definition unused. Changing either is the user asking.
|
|
52
46
|
const fields = image.label !== undefined && newFields.url === image.url && newFields.title === image.title
|
|
53
47
|
? { ...newFields, label: image.label }
|
|
54
48
|
: newFields;
|
|
@@ -58,11 +52,24 @@ export function createImageEditCommitter(deps) {
|
|
|
58
52
|
function buildEditBytes(target, newFields) {
|
|
59
53
|
return resolveEdit(target, newFields)?.bytes ?? null;
|
|
60
54
|
}
|
|
61
|
-
function commitImageEdit(target, newFields) {
|
|
55
|
+
function commitImageEdit(target, seenFields, newFields) {
|
|
56
|
+
const image = imageAt(target);
|
|
57
|
+
if (!image || !sameImageFields(imageFieldsFromInline(image), seenFields))
|
|
58
|
+
return;
|
|
59
|
+
writeImageEdit(target, newFields);
|
|
60
|
+
}
|
|
61
|
+
// The caret from before the image was selected anchors the undo entry when no other caret
|
|
62
|
+
// answers: the popover can commit after the selection has moved on.
|
|
63
|
+
function writeImageEdit(target, newFields) {
|
|
62
64
|
const edit = resolveEdit(target, newFields);
|
|
63
65
|
if (!edit)
|
|
64
66
|
return;
|
|
65
|
-
|
|
67
|
+
// Read from the bytes the block's kind will store, which a kind's own write rule can change.
|
|
68
|
+
const delta = inlineRange.writtenDelta(target.paragraphPath, edit.image.start, edit.image.end, edit.bytes);
|
|
69
|
+
if (delta !== 0) {
|
|
70
|
+
lastShift = { paragraphPath: target.paragraphPath, editEnd: edit.image.end, delta };
|
|
71
|
+
}
|
|
72
|
+
void inlineRange.commitInlineRange(target.paragraphPath, edit.image.start, edit.image.end, edit.bytes, target.preSelectOffset);
|
|
66
73
|
}
|
|
67
74
|
function commitImageResize(newWidth, newHeight) {
|
|
68
75
|
const sel = widgetSelection.getSelected();
|
|
@@ -84,16 +91,16 @@ export function createImageEditCommitter(deps) {
|
|
|
84
91
|
...(framedHeight !== undefined ? { height: framedHeight } : {}),
|
|
85
92
|
...(image.crop !== undefined && framedHeight !== undefined ? { crop: image.crop } : {})
|
|
86
93
|
};
|
|
87
|
-
|
|
94
|
+
writeImageEdit(sel, newFields);
|
|
88
95
|
}
|
|
89
|
-
/** The whole `` span goes
|
|
96
|
+
/** The whole `` span goes. The selection clears first, so the undo entry is told
|
|
97
|
+
* the caret the user had before selecting the image rather than reading it. */
|
|
90
98
|
function removeImage(target) {
|
|
91
|
-
const
|
|
92
|
-
const image = paragraph && findImageInParagraph(paragraph, target.sourceStart);
|
|
99
|
+
const image = imageAt(target);
|
|
93
100
|
if (!image)
|
|
94
101
|
return;
|
|
95
102
|
widgetSelection.clear();
|
|
96
|
-
void inlineRange.commitInlineRange(target.paragraphPath, image.start, image.end, '',
|
|
103
|
+
void inlineRange.commitInlineRange(target.paragraphPath, image.start, image.end, '', target.preSelectOffset);
|
|
97
104
|
}
|
|
98
105
|
function dismissImagePopover() {
|
|
99
106
|
widgetSelection.clear();
|
|
@@ -109,15 +116,33 @@ export function createImageEditCommitter(deps) {
|
|
|
109
116
|
root.addEventListener('image-widget-select', handler);
|
|
110
117
|
return () => root.removeEventListener('image-widget-select', handler);
|
|
111
118
|
}
|
|
119
|
+
function clearStaleSelection() {
|
|
120
|
+
const shift = lastShift;
|
|
121
|
+
lastShift = null;
|
|
122
|
+
if (!shift) {
|
|
123
|
+
dropSelectionIfStale();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// The overlay finds the widget by the bytes its element names, so the move waits for the
|
|
127
|
+
// block to render the write.
|
|
128
|
+
void tick().then(() => {
|
|
129
|
+
widgetSelection.followEdit(shift.paragraphPath, shift.editEnd, shift.delta);
|
|
130
|
+
dropSelectionIfStale();
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
function dropSelectionIfStale() {
|
|
134
|
+
const sel = widgetSelection.getSelected();
|
|
135
|
+
if (sel && !imageAt(sel))
|
|
136
|
+
widgetSelection.clear();
|
|
137
|
+
}
|
|
112
138
|
function syncOverlayToWidget(getOverlay) {
|
|
113
139
|
const noop = () => { };
|
|
114
140
|
const overlayEl = getOverlay();
|
|
115
141
|
const editorEl = getEditorEl();
|
|
116
142
|
if (!overlayEl || !editorEl)
|
|
117
143
|
return noop;
|
|
118
|
-
// Each commit rebuilds the inline DOM, so
|
|
119
|
-
//
|
|
120
|
-
// when widget identity changes.
|
|
144
|
+
// Each commit rebuilds the inline DOM, so the widget is re-resolved on every update and
|
|
145
|
+
// the observer re-attached when it changes.
|
|
121
146
|
let observer = null;
|
|
122
147
|
let observed = null;
|
|
123
148
|
const update = () => {
|
|
@@ -144,9 +169,8 @@ export function createImageEditCommitter(deps) {
|
|
|
144
169
|
// Edits above the widget shift its y without resizing it.
|
|
145
170
|
const unsubscribeEdit = events.on('edit', update);
|
|
146
171
|
window.addEventListener('resize', update);
|
|
147
|
-
// Sibling images settling
|
|
148
|
-
//
|
|
149
|
-
// event bubbles.
|
|
172
|
+
// Sibling images settling shift the widget's y without resizing it; capture phase,
|
|
173
|
+
// since neither event bubbles.
|
|
150
174
|
const onImgSettle = (e) => {
|
|
151
175
|
if (e.target instanceof HTMLImageElement)
|
|
152
176
|
update();
|
|
@@ -170,6 +194,18 @@ export function createImageEditCommitter(deps) {
|
|
|
170
194
|
dismissImagePopover,
|
|
171
195
|
getEditorContentWidth,
|
|
172
196
|
attachWidgetSelectListener,
|
|
197
|
+
clearStaleSelection,
|
|
173
198
|
syncOverlayToWidget
|
|
174
199
|
};
|
|
175
200
|
}
|
|
201
|
+
// ── Internal ────────────────────────────────────────────────────────────
|
|
202
|
+
function findImageInParagraph(para, sourceStart, reading) {
|
|
203
|
+
// Resolver-aware so a reference-style image resolves as the render path saw it,
|
|
204
|
+
// and flattened so an image nested in a link (`[![alt][ref]][repo]`) is found.
|
|
205
|
+
const inlines = resolvedInlineContent(para, reading);
|
|
206
|
+
for (const widget of flattenInlineWidgets(inlines, para.raw, reading.grammar)) {
|
|
207
|
+
if (widget.kind === 'image' && widget.start === sourceStart)
|
|
208
|
+
return widget;
|
|
209
|
+
}
|
|
210
|
+
return null;
|
|
211
|
+
}
|