@voithos-labs/aragonite 0.10.3 → 0.10.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/a11y-strings.d.ts +12 -5
- package/dist/a11y-strings.js +61 -5
- package/dist/action-contracts.d.ts +242 -155
- package/dist/action-contracts.js +2 -2
- package/dist/active-editor.d.ts +3 -3
- package/dist/active-editor.js +8 -9
- package/dist/ambient/ambient-dom.d.ts +2 -5
- package/dist/ambient/ambient-dom.js +16 -62
- package/dist/assert.js +6 -5
- package/dist/block-component.d.ts +135 -109
- package/dist/block-component.js +30 -22
- package/dist/block-id.d.ts +6 -10
- package/dist/block-id.js +25 -14
- package/dist/bounded-memo.d.ts +5 -5
- package/dist/bounded-memo.js +6 -6
- package/dist/components/BlockDragHandle.svelte +13 -20
- package/dist/components/BlockHost.svelte +56 -134
- package/dist/components/BlockList.svelte +22 -19
- package/dist/components/DecorationOverlay.svelte +9 -10
- package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
- package/dist/components/Editor.svelte +619 -1089
- package/dist/components/Editor.svelte.d.ts +9 -20
- package/dist/components/GapCaret.svelte +26 -59
- package/dist/components/SelectionOverlay.svelte +36 -67
- package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
- package/dist/components/TailInsert.svelte +8 -55
- package/dist/components/TailInsert.svelte.d.ts +4 -6
- package/dist/components/block-content-selector.d.ts +11 -11
- package/dist/components/block-content-selector.js +11 -11
- package/dist/components/block-el-lookup.d.ts +6 -0
- package/dist/components/block-el-lookup.js +27 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
- package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
- package/dist/components/blocks/code/CodeBlock.svelte +255 -276
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
- package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
- package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
- package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
- package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
- package/dist/components/blocks/code/code-bootstrap.js +35 -28
- package/dist/components/blocks/code/code-context-actions.js +5 -4
- package/dist/components/blocks/code/code-enter.js +2 -2
- package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
- package/dist/components/blocks/code/code-fence-boundary.js +40 -66
- package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
- package/dist/components/blocks/code/code-fence-exit.js +24 -25
- package/dist/components/blocks/code/code-indent.d.ts +2 -2
- package/dist/components/blocks/code/code-indent.js +4 -7
- package/dist/components/blocks/code/code-languages.d.ts +16 -12
- package/dist/components/blocks/code/code-languages.js +58 -32
- package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
- package/dist/components/blocks/code/code-paste-surface.js +9 -18
- package/dist/components/blocks/code/code-renderer.d.ts +21 -5
- package/dist/components/blocks/code/code-renderer.js +90 -125
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
- package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
- package/dist/components/blocks/directive/activate-directives.js +18 -13
- package/dist/components/blocks/editable-leaf.d.ts +50 -74
- package/dist/components/blocks/editable-leaf.js +144 -202
- package/dist/components/blocks/editable-surface.d.ts +96 -100
- package/dist/components/blocks/editable-surface.js +101 -109
- package/dist/components/blocks/list/ListBlock.svelte +46 -90
- package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
- package/dist/components/blocks/list/task-checkbox.js +12 -7
- package/dist/components/blocks/plain-text-backend.d.ts +4 -20
- package/dist/components/blocks/plain-text-backend.js +9 -43
- package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
- package/dist/components/blocks/surface-wiring.svelte.js +15 -34
- package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
- package/dist/components/blocks/table/TableBlock.svelte +100 -165
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
- package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
- package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
- package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
- package/dist/components/blocks/table/cell-pointer.js +49 -71
- package/dist/components/blocks/table/cell-render.d.ts +24 -29
- package/dist/components/blocks/table/cell-render.js +29 -31
- package/dist/components/blocks/table/selected-cells.d.ts +7 -7
- package/dist/components/blocks/table/selected-cells.js +9 -13
- package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
- package/dist/components/blocks/table/table-caret-at-point.js +5 -5
- package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
- package/dist/components/blocks/table/table-cell-paste.js +27 -43
- package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
- package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
- package/dist/components/blocks/table/table-menu-model.js +6 -10
- package/dist/components/blocks/table/table-navigation.js +2 -2
- package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
- package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
- package/dist/components/blocks/text/auto-pair-record.js +51 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
- package/dist/components/blocks/text/click-snap-guard.js +16 -5
- package/dist/components/blocks/text/composition-seat.d.ts +17 -14
- package/dist/components/blocks/text/composition-seat.js +11 -11
- package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
- package/dist/components/blocks/text/construct-edge-delete.js +50 -65
- package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
- package/dist/components/blocks/text/construct-reveal.js +13 -14
- package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
- package/dist/components/blocks/text/delimiter-autopair.js +87 -103
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
- package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
- package/dist/components/blocks/text/edge-seat.d.ts +17 -26
- package/dist/components/blocks/text/edge-seat.js +43 -70
- package/dist/components/blocks/text/link-at-point.d.ts +9 -9
- package/dist/components/blocks/text/link-at-point.js +12 -15
- package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
- package/dist/components/blocks/text/live-join-seam.js +75 -112
- package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
- package/dist/components/blocks/text/live-selection-edit.js +32 -105
- package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
- package/dist/components/blocks/text/live-split-rebalance.js +50 -67
- package/dist/components/blocks/text/marker-completion.d.ts +7 -12
- package/dist/components/blocks/text/marker-completion.js +17 -10
- package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
- package/dist/components/blocks/text/pending-mark-insert.js +30 -49
- package/dist/components/blocks/text/screen-diff.d.ts +5 -15
- package/dist/components/blocks/text/screen-diff.js +5 -19
- package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
- package/dist/components/blocks/text/text-clipboard.js +27 -32
- package/dist/components/blocks/text/text-keydown.d.ts +20 -30
- package/dist/components/blocks/text/text-keydown.js +54 -51
- package/dist/components/blocks/text/text-render.d.ts +25 -35
- package/dist/components/blocks/text/text-render.js +82 -61
- package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
- package/dist/components/blocks/text/widget-adjacency.js +17 -17
- package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
- package/dist/components/blocks/text/widget-interaction.js +243 -208
- package/dist/components/blocks/widget-portal.d.ts +20 -29
- package/dist/components/blocks/widget-portal.js +16 -14
- package/dist/components/built-in-blocks.d.ts +3 -4
- package/dist/components/built-in-blocks.js +17 -18
- package/dist/components/drag-handle.d.ts +13 -30
- package/dist/components/drag-handle.js +25 -63
- package/dist/components/editor-built-ins.d.ts +1 -0
- package/dist/components/editor-built-ins.js +16 -0
- package/dist/components/editor-root-clipboard.d.ts +6 -6
- package/dist/components/editor-root-clipboard.js +16 -27
- package/dist/components/editor-root-document-swap.d.ts +49 -0
- package/dist/components/editor-root-document-swap.js +54 -0
- package/dist/components/editor-root-focus.d.ts +5 -4
- package/dist/components/editor-root-focus.js +51 -22
- package/dist/components/editor-root-focused-surface.d.ts +35 -0
- package/dist/components/editor-root-focused-surface.js +65 -0
- package/dist/components/editor-root-geometry.d.ts +15 -24
- package/dist/components/editor-root-geometry.js +27 -31
- package/dist/components/editor-root-gestures.d.ts +39 -0
- package/dist/components/editor-root-gestures.js +189 -0
- package/dist/components/editor-root-keydown.d.ts +10 -25
- package/dist/components/editor-root-keydown.js +19 -43
- package/dist/components/editor-root-listeners.d.ts +22 -31
- package/dist/components/editor-root-listeners.js +49 -46
- package/dist/components/editor-root-menus.d.ts +51 -0
- package/dist/components/editor-root-menus.js +147 -0
- package/dist/components/editor-root-mode-flip.d.ts +16 -11
- package/dist/components/editor-root-mode-flip.js +36 -34
- package/dist/components/editor-root-scroll-host.d.ts +22 -0
- package/dist/components/editor-root-scroll-host.js +34 -0
- package/dist/components/editor-root-test-surface.d.ts +48 -0
- package/dist/components/editor-root-test-surface.js +6 -0
- package/dist/components/image/ImageOverlayHost.svelte +44 -35
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
- package/dist/components/image/ImageProperties.svelte +37 -41
- package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
- package/dist/components/image/ImageResizeHandles.svelte +26 -30
- package/dist/components/image/image-crop.d.ts +5 -11
- package/dist/components/image/image-crop.js +5 -11
- package/dist/components/image/image-edit-commit.d.ts +19 -16
- package/dist/components/image/image-edit-commit.js +74 -38
- package/dist/components/image/image-resize.d.ts +2 -5
- package/dist/components/image/image-resize.js +3 -6
- package/dist/components/image/image-widget-editing.d.ts +3 -3
- package/dist/components/image/image-widget-editing.js +9 -9
- package/dist/components/image/widget-dom.d.ts +2 -3
- package/dist/components/image/widget-dom.js +19 -24
- package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
- package/dist/components/image/widget-selection-state.svelte.js +26 -19
- package/dist/components/kind-cue.svelte.d.ts +21 -0
- package/dist/components/kind-cue.svelte.js +35 -0
- package/dist/components/link-card/LinkCard.svelte +115 -64
- package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
- package/dist/components/link-card/LinkCardHost.svelte +42 -33
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
- package/dist/components/link-card/link-card-commit.d.ts +16 -19
- package/dist/components/link-card/link-card-commit.js +21 -30
- package/dist/components/link-card/link-card-entry.d.ts +13 -23
- package/dist/components/link-card/link-card-entry.js +16 -24
- package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
- package/dist/components/link-card/link-card-state.svelte.js +2 -2
- package/dist/components/lrd-map-gate.d.ts +4 -11
- package/dist/components/lrd-map-gate.js +5 -11
- package/dist/components/menu/BlockMenu.svelte +20 -81
- package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
- package/dist/components/menu/InlineMenuHost.svelte +191 -0
- package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
- package/dist/components/menu/MenuIcon.svelte +3 -103
- package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
- package/dist/components/menu/SelectionToolbar.svelte +380 -0
- package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
- package/dist/components/menu/clipboard-actions.d.ts +3 -4
- package/dist/components/menu/clipboard-actions.js +3 -4
- package/dist/components/menu/default-context-actions.d.ts +4 -13
- package/dist/components/menu/default-context-actions.js +49 -67
- package/dist/components/menu/flyout-placement.d.ts +2 -2
- package/dist/components/menu/flyout-placement.js +2 -2
- package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
- package/dist/components/menu/menu-presence.svelte.js +19 -0
- package/dist/components/paste-image-arm.d.ts +6 -11
- package/dist/components/paste-image-arm.js +11 -18
- package/dist/components/portal.d.ts +2 -5
- package/dist/components/portal.js +4 -7
- package/dist/core/directive/activate.d.ts +4 -5
- package/dist/core/directive/activate.js +8 -9
- package/dist/core/directive/container-opener.js +13 -12
- package/dist/core/directive/grammar.d.ts +2 -5
- package/dist/core/directive/grammar.js +10 -10
- package/dist/core/directive/kinds.d.ts +4 -7
- package/dist/core/directive/kinds.js +14 -16
- package/dist/core/directive/registry.d.ts +12 -9
- package/dist/core/directive/registry.js +19 -20
- package/dist/core/directive/text-recognizer.d.ts +3 -2
- package/dist/core/directive/text-recognizer.js +5 -9
- package/dist/core/escapable.d.ts +1 -5
- package/dist/core/escapable.js +1 -5
- package/dist/core/inline/backticks.d.ts +3 -4
- package/dist/core/inline/backticks.js +3 -4
- package/dist/core/inline/character-refs.js +2 -1
- package/dist/core/inline/destination-bytes.d.ts +6 -3
- package/dist/core/inline/destination-bytes.js +50 -8
- package/dist/core/inline/entity-widget.d.ts +4 -3
- package/dist/core/inline/entity-widget.js +6 -6
- package/dist/core/inline/format-toggle.d.ts +22 -28
- package/dist/core/inline/format-toggle.js +97 -129
- package/dist/core/inline/html-entities.d.ts +2 -3
- package/dist/core/inline/html-entities.js +2 -3
- package/dist/core/inline/html-tag-grammar.js +6 -2
- package/dist/core/inline/image-dimensions.d.ts +2 -0
- package/dist/core/inline/image-dimensions.js +19 -2
- package/dist/core/inline/image-source-bytes.d.ts +11 -0
- package/dist/core/inline/image-source-bytes.js +71 -0
- package/dist/core/inline/index.d.ts +28 -21
- package/dist/core/inline/index.js +56 -34
- package/dist/core/inline/inline-cache.d.ts +12 -15
- package/dist/core/inline/inline-cache.js +11 -14
- package/dist/core/inline/inline-widgets.d.ts +55 -68
- package/dist/core/inline/inline-widgets.js +55 -58
- package/dist/core/inline/link-destination.d.ts +31 -0
- package/dist/core/inline/link-destination.js +129 -0
- package/dist/core/inline/link-reference-resolver.d.ts +8 -6
- package/dist/core/inline/link-reference-resolver.js +10 -6
- package/dist/core/inline/link-source-bytes.d.ts +31 -0
- package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
- package/dist/core/inline/live-edit/read-back.d.ts +29 -0
- package/dist/core/inline/live-edit/read-back.js +50 -0
- package/dist/core/inline/picture.d.ts +10 -0
- package/dist/core/inline/picture.js +40 -0
- package/dist/core/inline/scan/autolinks.d.ts +7 -8
- package/dist/core/inline/scan/autolinks.js +80 -59
- package/dist/core/inline/scan/brackets.d.ts +2 -2
- package/dist/core/inline/scan/brackets.js +6 -103
- package/dist/core/inline/scan/code-spans.d.ts +4 -0
- package/dist/core/inline/scan/code-spans.js +8 -0
- package/dist/core/inline/scan/emphasis.js +10 -14
- package/dist/core/inline/scan/index.d.ts +3 -1
- package/dist/core/inline/scan/index.js +32 -33
- package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
- package/dist/core/inline/scan/plugin-syntax.js +75 -89
- package/dist/core/inline/scan/scan-state.d.ts +2 -0
- package/dist/core/inline/scan/scan-state.js +1 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
- package/dist/core/inline/scan/simple-nodes.js +2 -5
- package/dist/core/inline/scan/triggers.d.ts +17 -0
- package/dist/core/inline/scan/triggers.js +26 -0
- package/dist/core/inline/scan/url.js +8 -10
- package/dist/core/inline/transparency.d.ts +2 -1
- package/dist/core/inline/transparency.js +33 -17
- package/dist/core/inline/visibility.d.ts +30 -49
- package/dist/core/inline/visibility.js +31 -49
- package/dist/core/inline/walk.d.ts +4 -10
- package/dist/core/inline/walk.js +4 -10
- package/dist/core/inline-render.d.ts +22 -27
- package/dist/core/inline-render.js +51 -60
- package/dist/core/lines.d.ts +67 -26
- package/dist/core/lines.js +164 -33
- package/dist/core/metadata-parity.d.ts +9 -0
- package/dist/core/metadata-parity.js +25 -0
- package/dist/core/node-views.d.ts +7 -6
- package/dist/core/node-views.js +5 -5
- package/dist/core/nodes.d.ts +34 -44
- package/dist/core/nodes.js +4 -12
- package/dist/core/parser.d.ts +27 -34
- package/dist/core/parser.js +53 -67
- package/dist/core/parsers/blockquote.d.ts +5 -8
- package/dist/core/parsers/blockquote.js +11 -10
- package/dist/core/parsers/built-in-openers.d.ts +2 -5
- package/dist/core/parsers/built-in-openers.js +5 -8
- package/dist/core/parsers/fence-syntax.d.ts +36 -7
- package/dist/core/parsers/fence-syntax.js +61 -11
- package/dist/core/parsers/fenced-code.d.ts +16 -0
- package/dist/core/parsers/fenced-code.js +16 -15
- package/dist/core/parsers/heading.d.ts +19 -2
- package/dist/core/parsers/heading.js +50 -2
- package/dist/core/parsers/html-block.d.ts +3 -6
- package/dist/core/parsers/html-block.js +10 -11
- package/dist/core/parsers/indented-code.d.ts +1 -1
- package/dist/core/parsers/indented-code.js +2 -8
- package/dist/core/parsers/link-reference.d.ts +5 -3
- package/dist/core/parsers/link-reference.js +116 -120
- package/dist/core/parsers/list.d.ts +12 -5
- package/dist/core/parsers/list.js +53 -36
- package/dist/core/parsers/paragraph.d.ts +3 -3
- package/dist/core/parsers/paragraph.js +14 -5
- package/dist/core/parsers/table-completion.d.ts +2 -5
- package/dist/core/parsers/table-completion.js +7 -10
- package/dist/core/parsers/table.d.ts +8 -8
- package/dist/core/parsers/table.js +23 -26
- package/dist/core/parsers/thematic-break.js +15 -14
- package/dist/core/paths.d.ts +13 -0
- package/dist/core/paths.js +31 -0
- package/dist/core/terminator-escalation.d.ts +0 -7
- package/dist/core/terminator-escalation.js +5 -8
- package/dist/core/url-policy.d.ts +2 -5
- package/dist/core/url-policy.js +8 -12
- package/dist/cursor/caret-memory.d.ts +34 -0
- package/dist/cursor/caret-memory.js +82 -0
- package/dist/cursor/coordinate-spaces.d.ts +26 -19
- package/dist/cursor/coordinate-spaces.js +32 -20
- package/dist/cursor/dom-walk.d.ts +7 -13
- package/dist/cursor/dom-walk.js +7 -13
- package/dist/cursor/edge-affinity.d.ts +7 -35
- package/dist/cursor/edge-affinity.js +13 -44
- package/dist/cursor/focused-caret.d.ts +6 -8
- package/dist/cursor/focused-caret.js +7 -16
- package/dist/cursor/height-model.d.ts +3 -3
- package/dist/cursor/height-model.js +5 -5
- package/dist/cursor/height-oracle.d.ts +10 -7
- package/dist/cursor/height-oracle.js +26 -75
- package/dist/cursor/observe-resize.d.ts +13 -0
- package/dist/cursor/observe-resize.js +43 -0
- package/dist/cursor/overlay-rects.d.ts +2 -5
- package/dist/cursor/overlay-rects.js +2 -5
- package/dist/cursor/overlay-remeasure.d.ts +6 -7
- package/dist/cursor/overlay-remeasure.js +10 -14
- package/dist/cursor/pending-marks.d.ts +7 -9
- package/dist/cursor/pending-marks.js +6 -27
- package/dist/cursor/point-offset.d.ts +16 -10
- package/dist/cursor/point-offset.js +60 -25
- package/dist/cursor/reveal-source.d.ts +7 -11
- package/dist/cursor/reveal-source.js +10 -18
- package/dist/cursor/scroll-ancestors.d.ts +9 -20
- package/dist/cursor/scroll-ancestors.js +14 -26
- package/dist/cursor/scroll-owner.d.ts +92 -0
- package/dist/cursor/scroll-owner.js +283 -0
- package/dist/cursor/scrollport.d.ts +16 -8
- package/dist/cursor/scrollport.js +28 -5
- package/dist/cursor/sticky-column.d.ts +6 -29
- package/dist/cursor/sticky-column.js +6 -49
- package/dist/cursor/sticky-measure.d.ts +14 -9
- package/dist/cursor/sticky-measure.js +99 -49
- package/dist/cursor/surface-backend.d.ts +41 -0
- package/dist/cursor/surface-backend.js +78 -0
- package/dist/cursor/typography-estimates.d.ts +3 -3
- package/dist/cursor/typography-estimates.js +3 -3
- package/dist/cursor/visual-lines.d.ts +25 -13
- package/dist/cursor/visual-lines.js +72 -28
- package/dist/cursor/widget-edge-snap.d.ts +23 -0
- package/dist/cursor/widget-edge-snap.js +39 -0
- package/dist/cursor/widget-offset.d.ts +111 -102
- package/dist/cursor/widget-offset.js +352 -177
- package/dist/debug/diagnostics-report.d.ts +6 -6
- package/dist/debug/diagnostics-report.js +5 -5
- package/dist/debug/dump-tree.js +2 -2
- package/dist/debug/editor-diagnostics.d.ts +15 -0
- package/dist/debug/editor-diagnostics.js +33 -0
- package/dist/debug/inspect.d.ts +2 -2
- package/dist/debug/inspect.js +4 -4
- package/dist/debug/interaction-trace.d.ts +14 -15
- package/dist/debug/interaction-trace.js +19 -20
- package/dist/debug/operations-log.d.ts +1 -1
- package/dist/debug/operations-log.js +1 -1
- package/dist/decorations/buckets.d.ts +6 -12
- package/dist/decorations/buckets.js +4 -11
- package/dist/decorations/decoration-state.svelte.d.ts +2 -3
- package/dist/decorations/decoration-state.svelte.js +24 -26
- package/dist/decorations/island-dom.d.ts +10 -18
- package/dist/decorations/island-dom.js +25 -50
- package/dist/decorations/reserved-attrs.d.ts +6 -8
- package/dist/decorations/reserved-attrs.js +31 -17
- package/dist/decorations/types.d.ts +6 -7
- package/dist/decorations/types.js +2 -1
- package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
- package/dist/decorations/use-block-decorations.svelte.js +71 -0
- package/dist/decorations/widget-dom.d.ts +3 -3
- package/dist/decorations/widget-dom.js +5 -5
- package/dist/dev-warn.d.ts +5 -2
- package/dist/dev-warn.js +16 -4
- package/dist/editor-actions/ancestry-folds.d.ts +9 -14
- package/dist/editor-actions/ancestry-folds.js +13 -18
- package/dist/editor-actions/block-edit-core.d.ts +49 -22
- package/dist/editor-actions/block-edit-core.js +279 -151
- package/dist/editor-actions/block-edit-scope.d.ts +63 -50
- package/dist/editor-actions/block-edit-scope.js +100 -48
- package/dist/editor-actions/block-edit.d.ts +2 -3
- package/dist/editor-actions/block-edit.js +14 -90
- package/dist/editor-actions/commit/history.d.ts +4 -4
- package/dist/editor-actions/commit/history.js +33 -34
- package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
- package/dist/editor-actions/commit/reading-write-gate.js +56 -0
- package/dist/editor-actions/commit/text-batch.d.ts +7 -11
- package/dist/editor-actions/commit/text-batch.js +6 -7
- package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
- package/dist/editor-actions/commit/undo-controller.js +346 -216
- package/dist/editor-actions/container-block-component.d.ts +32 -51
- package/dist/editor-actions/container-block-component.js +66 -92
- package/dist/editor-actions/container-edit.d.ts +4 -2
- package/dist/editor-actions/container-edit.js +14 -44
- package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
- package/dist/editor-actions/container-exit-overrides.js +19 -21
- package/dist/editor-actions/deps.d.ts +25 -32
- package/dist/editor-actions/enter-completion.d.ts +12 -15
- package/dist/editor-actions/enter-completion.js +49 -51
- package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
- package/dist/editor-actions/focus/focus-dispatch.js +33 -52
- package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
- package/dist/editor-actions/focus/focus-landing.js +29 -14
- package/dist/editor-actions/focus/focus.d.ts +3 -2
- package/dist/editor-actions/focus/focus.js +42 -59
- package/dist/editor-actions/index.d.ts +4 -3
- package/dist/editor-actions/index.js +5 -4
- package/dist/editor-actions/inline-range-commit.d.ts +18 -16
- package/dist/editor-actions/inline-range-commit.js +45 -54
- package/dist/editor-actions/leaf-write.d.ts +11 -0
- package/dist/editor-actions/leaf-write.js +102 -0
- package/dist/editor-actions/list-context.d.ts +9 -10
- package/dist/editor-actions/list-context.js +115 -110
- package/dist/editor-actions/list-overrides.d.ts +13 -5
- package/dist/editor-actions/list-overrides.js +36 -12
- package/dist/editor-actions/merge-fallback.d.ts +10 -16
- package/dist/editor-actions/merge-fallback.js +11 -22
- package/dist/editor-actions/nested/container-actions.d.ts +37 -0
- package/dist/editor-actions/nested/container-actions.js +42 -0
- package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
- package/dist/editor-actions/nested/emptied-container.js +5 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
- package/dist/editor-actions/nested/nested-actions.js +17 -15
- package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
- package/dist/editor-actions/nested/nested-block-edit.js +40 -134
- package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
- package/dist/editor-actions/nested/nested-focus.js +33 -21
- package/dist/editor-actions/paste-coordinator.d.ts +3 -2
- package/dist/editor-actions/paste-coordinator.js +17 -13
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
- package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
- package/dist/editor-actions/plugin/container.d.ts +55 -76
- package/dist/editor-actions/plugin/container.js +105 -186
- package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
- package/dist/editor-actions/plugin/directive-container.js +7 -8
- package/dist/editor-actions/reorder-action.d.ts +7 -12
- package/dist/editor-actions/reorder-action.js +32 -48
- package/dist/editor-actions/reorder-drag.d.ts +12 -8
- package/dist/editor-actions/reorder-drag.js +45 -41
- package/dist/editor-actions/replacement-focus.d.ts +13 -21
- package/dist/editor-actions/replacement-focus.js +32 -33
- package/dist/editor-actions/search-replace.js +71 -67
- package/dist/editor-actions/stored-caret.d.ts +7 -0
- package/dist/editor-actions/stored-caret.js +10 -0
- package/dist/editor-actions/table-context.d.ts +9 -11
- package/dist/editor-actions/table-context.js +70 -93
- package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
- package/dist/editor-actions/unwrap-strategies.js +52 -63
- package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
- package/dist/editor-actions/whole-block-focus-surface.js +43 -53
- package/dist/editor-events.d.ts +25 -29
- package/dist/editor-events.js +17 -28
- package/dist/editor-keys.d.ts +96 -104
- package/dist/editor-keys.js +11 -24
- package/dist/editor-props.d.ts +91 -71
- package/dist/editor-rects.d.ts +23 -34
- package/dist/editor-rects.js +9 -77
- package/dist/env.d.ts +6 -4
- package/dist/env.js +8 -4
- package/dist/index.d.ts +6 -2
- package/dist/index.js +5 -2
- package/dist/inline-menu/inline-menu-session.d.ts +37 -0
- package/dist/inline-menu/inline-menu-session.js +98 -0
- package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
- package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
- package/dist/inline-menu/types.d.ts +77 -0
- package/dist/inline-menu/types.js +7 -0
- package/dist/invariants/child-id-parity.d.ts +23 -0
- package/dist/invariants/child-id-parity.js +39 -0
- package/dist/invariants/commit-paths.d.ts +4 -4
- package/dist/invariants/commit-paths.js +4 -4
- package/dist/invariants/commit-scope.d.ts +4 -4
- package/dist/invariants/commit-scope.js +9 -8
- package/dist/invariants/context-keys.d.ts +2 -5
- package/dist/invariants/context-keys.js +3 -6
- package/dist/invariants/descriptor.d.ts +2 -6
- package/dist/invariants/descriptor.js +2 -6
- package/dist/invariants/inline-transitions.d.ts +9 -16
- package/dist/invariants/inline-transitions.js +10 -18
- package/dist/invariants/install.d.ts +18 -27
- package/dist/invariants/install.js +29 -30
- package/dist/invariants/keeps-a-block.d.ts +7 -0
- package/dist/invariants/keeps-a-block.js +14 -0
- package/dist/invariants/landable-caret.d.ts +5 -7
- package/dist/invariants/landable-caret.js +8 -11
- package/dist/invariants/landing-focus-scroll.d.ts +7 -0
- package/dist/invariants/landing-focus-scroll.js +13 -0
- package/dist/invariants/landing-value.d.ts +13 -0
- package/dist/invariants/landing-value.js +27 -0
- package/dist/invariants/marker-css-parity.d.ts +5 -6
- package/dist/invariants/marker-css-parity.js +11 -12
- package/dist/invariants/measures-in-own-list.d.ts +6 -0
- package/dist/invariants/measures-in-own-list.js +13 -0
- package/dist/invariants/node-shape.d.ts +18 -37
- package/dist/invariants/node-shape.js +123 -79
- package/dist/invariants/open-tail.d.ts +7 -0
- package/dist/invariants/open-tail.js +45 -0
- package/dist/invariants/placement-ends-widget.d.ts +8 -0
- package/dist/invariants/placement-ends-widget.js +13 -0
- package/dist/invariants/registry.d.ts +27 -66
- package/dist/invariants/registry.js +61 -137
- package/dist/invariants/render-fidelity.d.ts +4 -4
- package/dist/invariants/render-fidelity.js +5 -5
- package/dist/invariants/selection-endpoints.d.ts +6 -7
- package/dist/invariants/selection-endpoints.js +18 -16
- package/dist/invariants/single-node-sink.d.ts +4 -5
- package/dist/invariants/single-node-sink.js +4 -5
- package/dist/invariants/snapshot-integrity.d.ts +5 -6
- package/dist/invariants/snapshot-integrity.js +1 -1
- package/dist/invariants/structural-descriptor.d.ts +6 -15
- package/dist/invariants/structural-descriptor.js +6 -15
- package/dist/menu-icons.d.ts +47 -0
- package/dist/menu-icons.js +113 -0
- package/dist/perf/instruments.d.ts +20 -5
- package/dist/perf/instruments.js +35 -15
- package/dist/perf/use-mount-gauge.svelte.js +4 -4
- package/dist/plugin.d.ts +38 -8
- package/dist/plugin.js +102 -74
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
- package/dist/plugins/admonitions/admonition-kind.js +12 -10
- package/dist/plugins/admonitions/convert-document.d.ts +5 -5
- package/dist/plugins/admonitions/convert-document.js +8 -7
- package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
- package/dist/plugins/admonitions/gh-alert.js +21 -22
- package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
- package/dist/plugins/admonitions/github-alert-kind.js +28 -37
- package/dist/plugins/admonitions/index.js +2 -2
- package/dist/plugins/admonitions/kinds.d.ts +1 -1
- package/dist/plugins/admonitions/register.js +11 -2
- package/dist/plugins/details/DetailsBlock.svelte +20 -20
- package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
- package/dist/plugins/details/details-disclosure.svelte.js +6 -7
- package/dist/plugins/details/details-kind.d.ts +6 -7
- package/dist/plugins/details/details-kind.js +44 -59
- package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
- package/dist/plugins/emoji/emoji-recognizer.js +7 -14
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
- package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +3 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
- package/dist/plugins/footnotes/footnote-definition.js +69 -45
- package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
- package/dist/plugins/footnotes/footnote-lookup.js +14 -26
- package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
- package/dist/plugins/footnotes/footnote-numbering.js +22 -31
- package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
- package/dist/plugins/footnotes/footnote-reference.js +8 -13
- package/dist/plugins/footnotes/index.js +2 -3
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
- package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
- package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
- package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/word-char.js +4 -0
- package/dist/plugins/latex/BlockMath.svelte +58 -75
- package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
- package/dist/plugins/latex/MathInline.svelte +10 -9
- package/dist/plugins/latex/flanking.d.ts +1 -0
- package/dist/plugins/latex/flanking.js +3 -0
- package/dist/plugins/latex/index.d.ts +1 -1
- package/dist/plugins/latex/latex-kind.d.ts +4 -4
- package/dist/plugins/latex/latex-kind.js +113 -85
- package/dist/plugins/latex/math-completion.d.ts +1 -1
- package/dist/plugins/latex/math-completion.js +5 -8
- package/dist/plugins/latex/math-layout.d.ts +2 -8
- package/dist/plugins/latex/math-layout.js +0 -9
- package/dist/plugins/latex/math-renderer.d.ts +17 -20
- package/dist/plugins/latex/math-renderer.js +21 -38
- package/dist/plugins/latex/math-source.d.ts +4 -8
- package/dist/plugins/latex/math-source.js +36 -75
- package/dist/plugins/latex/register.d.ts +10 -11
- package/dist/plugins/latex/register.js +24 -10
- package/dist/plugins/latex/renderer.d.ts +9 -10
- package/dist/plugins/latex/renderer.js +9 -24
- package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
- package/dist/plugins/mermaid/index.js +1 -1
- package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
- package/dist/plugins/mermaid/mermaid-kind.js +30 -47
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
- package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
- package/dist/plugins/mermaid/register.d.ts +3 -3
- package/dist/plugins/mermaid/register.js +5 -5
- package/dist/plugins/mermaid/renderer.d.ts +5 -5
- package/dist/plugins/mermaid/renderer.js +8 -11
- package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
- package/dist/plugins/parrot/parrot-plugin.js +3 -3
- package/dist/plugins/slash-commands/filter.d.ts +23 -0
- package/dist/plugins/slash-commands/filter.js +31 -0
- package/dist/plugins/slash-commands/index.d.ts +2 -0
- package/dist/plugins/slash-commands/index.js +2 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
- package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
- package/dist/plugins/slash-commands/slash-source.js +108 -0
- package/dist/plugins/toc/TocBlock.svelte +23 -22
- package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
- package/dist/plugins/toc/heading-outline.d.ts +7 -12
- package/dist/plugins/toc/heading-outline.js +22 -36
- package/dist/plugins/toc/navigation-queue.d.ts +2 -4
- package/dist/plugins/toc/toc-plugin.d.ts +5 -5
- package/dist/plugins/toc/toc-plugin.js +20 -13
- package/dist/presentation-mode.d.ts +15 -23
- package/dist/presentation-mode.js +19 -25
- package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
- package/dist/reactivity/block-list-state.svelte.js +8 -9
- package/dist/reactivity/block-window.svelte.d.ts +12 -6
- package/dist/reactivity/block-window.svelte.js +44 -17
- package/dist/reactivity/child-list.d.ts +34 -0
- package/dist/reactivity/child-list.js +48 -0
- package/dist/reactivity/content-version.svelte.d.ts +4 -7
- package/dist/reactivity/content-version.svelte.js +3 -5
- package/dist/reactivity/hold-across.d.ts +39 -0
- package/dist/reactivity/hold-across.js +57 -0
- package/dist/reactivity/layout-state.svelte.d.ts +27 -0
- package/dist/reactivity/layout-state.svelte.js +51 -0
- package/dist/reactivity/list-tree.d.ts +39 -0
- package/dist/reactivity/list-tree.js +132 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
- package/dist/reactivity/list-windowing.svelte.js +143 -292
- package/dist/reactivity/measure-batch.d.ts +6 -8
- package/dist/reactivity/measure-batch.js +5 -6
- package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
- package/dist/reactivity/publish-ref.svelte.js +21 -85
- package/dist/reactivity/scope-geometry.d.ts +6 -13
- package/dist/reactivity/scope-geometry.js +7 -14
- package/dist/reactivity/state-registry.d.ts +5 -5
- package/dist/reactivity/state-registry.js +11 -15
- package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
- package/dist/reactivity/use-container-windowing.svelte.js +64 -74
- package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
- package/dist/reactivity/use-measured-child.svelte.js +41 -0
- package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
- package/dist/reactivity/use-window-floor.svelte.js +27 -0
- package/dist/reactivity/window-slice.d.ts +4 -4
- package/dist/reactivity/window-slice.js +0 -2
- package/dist/renderer-slot.d.ts +48 -0
- package/dist/renderer-slot.js +85 -0
- package/dist/scan-index.d.ts +4 -4
- package/dist/scan-index.js +4 -4
- package/dist/schema/block-commands.d.ts +69 -54
- package/dist/schema/block-commands.js +91 -104
- package/dist/schema/block-completions.d.ts +16 -19
- package/dist/schema/block-completions.js +25 -32
- package/dist/schema/block-component-registry.d.ts +13 -14
- package/dist/schema/block-component-registry.js +19 -17
- package/dist/schema/block-kind-descriptor.d.ts +234 -168
- package/dist/schema/block-kind-descriptor.js +151 -66
- package/dist/schema/block-openers.d.ts +48 -39
- package/dist/schema/block-openers.js +73 -83
- package/dist/schema/built-in-descriptors.d.ts +3 -5
- package/dist/schema/built-in-descriptors.js +96 -80
- package/dist/schema/child-spans.d.ts +12 -10
- package/dist/schema/child-spans.js +68 -34
- package/dist/schema/closure.d.ts +18 -16
- package/dist/schema/closure.js +24 -14
- package/dist/schema/command-id.d.ts +6 -8
- package/dist/schema/command-id.js +20 -25
- package/dist/schema/commands.d.ts +79 -81
- package/dist/schema/commands.js +156 -116
- package/dist/schema/container-raw.d.ts +51 -11
- package/dist/schema/container-raw.js +143 -14
- package/dist/schema/container-rebuilders.d.ts +17 -15
- package/dist/schema/container-rebuilders.js +30 -22
- package/dist/schema/context-actions.d.ts +25 -13
- package/dist/schema/context-actions.js +32 -17
- package/dist/schema/define-plugin-block.d.ts +8 -6
- package/dist/schema/define-plugin-block.js +6 -4
- package/dist/schema/fenced-code-raw.d.ts +30 -17
- package/dist/schema/fenced-code-raw.js +155 -107
- package/dist/schema/global-commands.d.ts +6 -6
- package/dist/schema/global-commands.js +14 -22
- package/dist/schema/height-estimates.d.ts +31 -0
- package/dist/schema/height-estimates.js +64 -0
- package/dist/schema/inline-construct-policy.d.ts +42 -55
- package/dist/schema/inline-construct-policy.js +36 -35
- package/dist/schema/insert-catalogue.d.ts +30 -0
- package/dist/schema/insert-catalogue.js +95 -0
- package/dist/schema/keybinding-overrides.d.ts +9 -11
- package/dist/schema/keybinding-overrides.js +1 -1
- package/dist/schema/keybindings.d.ts +15 -7
- package/dist/schema/keybindings.js +21 -9
- package/dist/schema/merge-rules.d.ts +5 -7
- package/dist/schema/merge-rules.js +7 -9
- package/dist/schema/opener-priorities.d.ts +4 -4
- package/dist/schema/opener-priorities.js +4 -4
- package/dist/schema/operations.d.ts +9 -11
- package/dist/schema/operations.js +3 -3
- package/dist/schema/page-role.d.ts +14 -0
- package/dist/schema/page-role.js +19 -0
- package/dist/schema/plugin-activation.d.ts +4 -6
- package/dist/schema/plugin-activation.js +12 -10
- package/dist/schema/plugin-editor-context.d.ts +25 -10
- package/dist/schema/plugin-editor-context.js +40 -9
- package/dist/schema/plugin-install.d.ts +49 -17
- package/dist/schema/plugin-install.js +51 -25
- package/dist/schema/plugin-kind.d.ts +12 -8
- package/dist/schema/plugin-kind.js +35 -42
- package/dist/schema/plugin-name.js +3 -3
- package/dist/schema/plugin-registry.d.ts +54 -0
- package/dist/schema/plugin-registry.js +70 -0
- package/dist/schema/reading.d.ts +23 -0
- package/dist/schema/reading.js +7 -0
- package/dist/schema/register-once.d.ts +3 -5
- package/dist/schema/register-once.js +7 -16
- package/dist/schema/registration-checks.d.ts +12 -16
- package/dist/schema/registration-checks.js +35 -51
- package/dist/schema/registration-pairs.d.ts +54 -0
- package/dist/schema/registration-pairs.js +48 -0
- package/dist/schema/registration-pending.d.ts +8 -12
- package/dist/schema/registration-pending.js +9 -9
- package/dist/schema/registry-reset.d.ts +8 -4
- package/dist/schema/registry-reset.js +13 -26
- package/dist/schema/registry-view.d.ts +25 -13
- package/dist/schema/registry-view.js +26 -20
- package/dist/schema/reserved-chords.d.ts +9 -10
- package/dist/schema/reserved-chords.js +73 -78
- package/dist/schema/reserved-chrome.d.ts +12 -11
- package/dist/schema/reserved-chrome.js +15 -11
- package/dist/schema/setext-raw.d.ts +13 -0
- package/dist/schema/setext-raw.js +33 -0
- package/dist/schema/stored-as.d.ts +20 -0
- package/dist/schema/stored-as.js +6 -0
- package/dist/schema/table-cell-raw.d.ts +18 -7
- package/dist/schema/table-cell-raw.js +28 -7
- package/dist/schema/whole-block-unit.d.ts +5 -4
- package/dist/schema/whole-block-unit.js +5 -4
- package/dist/search/document-scan.d.ts +3 -3
- package/dist/search/document-scan.js +2 -2
- package/dist/search/matcher.d.ts +1 -1
- package/dist/search/regex-executor.d.ts +5 -6
- package/dist/search/regex-executor.js +6 -8
- package/dist/search/replace.d.ts +2 -5
- package/dist/search/replace.js +2 -5
- package/dist/search/search-state.svelte.d.ts +5 -5
- package/dist/search/search-state.svelte.js +12 -16
- package/dist/selection/autoscroll.d.ts +6 -9
- package/dist/selection/block-hit-test.d.ts +16 -24
- package/dist/selection/block-hit-test.js +29 -22
- package/dist/selection/caret-doors.d.ts +15 -14
- package/dist/selection/caret-doors.js +37 -26
- package/dist/selection/caret-landing.d.ts +62 -0
- package/dist/selection/caret-landing.js +157 -0
- package/dist/selection/caret-restore.d.ts +17 -10
- package/dist/selection/caret-restore.js +10 -22
- package/dist/selection/caret-target.d.ts +30 -0
- package/dist/selection/caret-target.js +84 -0
- package/dist/selection/char-endpoint-snap.d.ts +6 -10
- package/dist/selection/char-endpoint-snap.js +8 -14
- package/dist/selection/clipboard-text.d.ts +5 -12
- package/dist/selection/clipboard-text.js +69 -172
- package/dist/selection/covered-block.d.ts +6 -8
- package/dist/selection/covered-block.js +8 -19
- package/dist/selection/cross-block/clipboard.d.ts +3 -2
- package/dist/selection/cross-block/clipboard.js +13 -4
- package/dist/selection/cross-block/dispatch.d.ts +47 -43
- package/dist/selection/cross-block/dispatch.js +12 -23
- package/dist/selection/cross-block/format-range.d.ts +18 -21
- package/dist/selection/cross-block/format-range.js +104 -103
- package/dist/selection/cross-block/format-toggle.d.ts +10 -15
- package/dist/selection/cross-block/format-toggle.js +28 -33
- package/dist/selection/cross-block/keydown.d.ts +4 -4
- package/dist/selection/cross-block/keydown.js +93 -152
- package/dist/selection/cross-block/ops.d.ts +19 -34
- package/dist/selection/cross-block/ops.js +110 -95
- package/dist/selection/cross-block/paste.d.ts +2 -3
- package/dist/selection/cross-block/paste.js +61 -104
- package/dist/selection/cross-block/pointer.d.ts +17 -15
- package/dist/selection/cross-block/pointer.js +74 -25
- package/dist/selection/cross-block/type-replace.d.ts +4 -6
- package/dist/selection/cross-block/type-replace.js +53 -146
- package/dist/selection/dead-space-caret.d.ts +20 -28
- package/dist/selection/dead-space-caret.js +79 -87
- package/dist/selection/drag-pointer.d.ts +22 -5
- package/dist/selection/drag-pointer.js +63 -31
- package/dist/selection/gap-caret.d.ts +17 -28
- package/dist/selection/gap-caret.js +14 -26
- package/dist/selection/grid-selection.d.ts +12 -0
- package/dist/selection/grid-selection.js +22 -0
- package/dist/selection/keyboard-extend.d.ts +27 -39
- package/dist/selection/keyboard-extend.js +94 -116
- package/dist/selection/multi-click.d.ts +37 -0
- package/dist/selection/multi-click.js +197 -0
- package/dist/selection/native-bridge.d.ts +30 -37
- package/dist/selection/native-bridge.js +80 -100
- package/dist/selection/nearest-block.d.ts +17 -12
- package/dist/selection/nearest-block.js +37 -18
- package/dist/selection/path-lookup.d.ts +31 -14
- package/dist/selection/path-lookup.js +110 -20
- package/dist/selection/path-math.d.ts +9 -11
- package/dist/selection/path-math.js +5 -7
- package/dist/selection/pointer-gesture.d.ts +9 -0
- package/dist/selection/pointer-gesture.js +11 -0
- package/dist/selection/pointer-session.d.ts +10 -16
- package/dist/selection/pointer-session.js +6 -7
- package/dist/selection/primitives.d.ts +64 -33
- package/dist/selection/primitives.js +61 -53
- package/dist/selection/range-coverage.d.ts +94 -0
- package/dist/selection/range-coverage.js +365 -0
- package/dist/selection/range-delete-ceremony.d.ts +28 -74
- package/dist/selection/range-delete-ceremony.js +100 -141
- package/dist/selection/range-delete-chrome.d.ts +20 -33
- package/dist/selection/range-delete-chrome.js +53 -78
- package/dist/selection/range-delete-table-coverage.d.ts +11 -25
- package/dist/selection/range-delete-table-coverage.js +42 -112
- package/dist/selection/range-delete-table.d.ts +14 -12
- package/dist/selection/range-delete-table.js +106 -310
- package/dist/selection/range-delete.d.ts +18 -19
- package/dist/selection/range-delete.js +83 -123
- package/dist/selection/round-trip-restore.d.ts +18 -0
- package/dist/selection/round-trip-restore.js +19 -0
- package/dist/selection/selection-announcer.d.ts +17 -0
- package/dist/selection/selection-announcer.js +25 -0
- package/dist/selection/selection-description.d.ts +4 -3
- package/dist/selection/selection-description.js +5 -4
- package/dist/selection/selection-drop.d.ts +52 -0
- package/dist/selection/selection-drop.js +317 -0
- package/dist/selection/selection-restore.d.ts +20 -33
- package/dist/selection/selection-restore.js +21 -44
- package/dist/selection/selection-state.svelte.d.ts +50 -42
- package/dist/selection/selection-state.svelte.js +144 -98
- package/dist/selection/shared-keydown.d.ts +22 -27
- package/dist/selection/shared-keydown.js +25 -45
- package/dist/selection/table-endpoint-snap.d.ts +17 -41
- package/dist/selection/table-endpoint-snap.js +54 -80
- package/dist/selection/table-rect-extend.d.ts +3 -6
- package/dist/selection/table-rect-extend.js +19 -14
- package/dist/styles/editor-theme.css +75 -53
- package/dist/styles/editor.css +248 -139
- package/dist/testing/conformance-core.d.ts +50 -18
- package/dist/testing/conformance-core.js +88 -50
- package/dist/testing/container-conformance.d.ts +48 -84
- package/dist/testing/container-conformance.js +159 -285
- package/dist/testing/headless-actions.d.ts +34 -19
- package/dist/testing/headless-actions.js +116 -65
- package/dist/testing/headless-block-list.svelte.d.ts +16 -0
- package/dist/testing/headless-block-list.svelte.js +22 -0
- package/dist/testing/inline-conformance.d.ts +15 -22
- package/dist/testing/inline-conformance.js +131 -148
- package/dist/testing/kind-conformance.d.ts +19 -24
- package/dist/testing/kind-conformance.js +204 -117
- package/dist/testing/kit-reading.d.ts +7 -0
- package/dist/testing/kit-reading.js +16 -0
- package/dist/testing/mount-dom-stubs.d.ts +4 -5
- package/dist/testing/mount-dom-stubs.js +8 -5
- package/dist/testing/parse-convergence.d.ts +10 -10
- package/dist/testing/parse-convergence.js +14 -49
- package/dist/testing.d.ts +13 -9
- package/dist/testing.js +28 -38
- package/dist/tree-operations/blockquote.d.ts +8 -14
- package/dist/tree-operations/blockquote.js +25 -45
- package/dist/tree-operations/chain-rebuild.d.ts +34 -25
- package/dist/tree-operations/chain-rebuild.js +115 -52
- package/dist/tree-operations/children.d.ts +5 -9
- package/dist/tree-operations/children.js +7 -11
- package/dist/tree-operations/cleanup.d.ts +6 -7
- package/dist/tree-operations/cleanup.js +14 -11
- package/dist/tree-operations/clone.js +5 -4
- package/dist/tree-operations/container-lift.d.ts +10 -5
- package/dist/tree-operations/container-lift.js +20 -14
- package/dist/tree-operations/container-offsets.d.ts +22 -0
- package/dist/tree-operations/container-offsets.js +89 -0
- package/dist/tree-operations/content-write.d.ts +52 -29
- package/dist/tree-operations/content-write.js +155 -110
- package/dist/tree-operations/index.d.ts +4 -4
- package/dist/tree-operations/index.js +4 -4
- package/dist/tree-operations/keep-one-block.d.ts +10 -0
- package/dist/tree-operations/keep-one-block.js +19 -0
- package/dist/tree-operations/leaf-range.d.ts +33 -0
- package/dist/tree-operations/leaf-range.js +67 -0
- package/dist/tree-operations/list/empty-check.d.ts +2 -3
- package/dist/tree-operations/list/empty-check.js +4 -4
- package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
- package/dist/tree-operations/list/exit-replacement.js +4 -9
- package/dist/tree-operations/list/item-partition.d.ts +2 -2
- package/dist/tree-operations/list/item-partition.js +2 -2
- package/dist/tree-operations/list/list-builders.d.ts +18 -16
- package/dist/tree-operations/list/list-builders.js +59 -30
- package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
- package/dist/tree-operations/list/ordered-markers.js +7 -16
- package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
- package/dist/tree-operations/list/reconcile-task.js +80 -23
- package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
- package/dist/tree-operations/list/sublist-separator.js +20 -27
- package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
- package/dist/tree-operations/list/task-paragraph.js +54 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
- package/dist/tree-operations/list/unwrap-merge.js +44 -79
- package/dist/tree-operations/node-ops.d.ts +30 -52
- package/dist/tree-operations/node-ops.js +152 -218
- package/dist/tree-operations/node-primitives.d.ts +44 -31
- package/dist/tree-operations/node-primitives.js +84 -60
- package/dist/tree-operations/open-tail.d.ts +25 -0
- package/dist/tree-operations/open-tail.js +100 -0
- package/dist/tree-operations/parse-block.d.ts +15 -2
- package/dist/tree-operations/parse-block.js +19 -4
- package/dist/tree-operations/paste/apply.d.ts +7 -8
- package/dist/tree-operations/paste/apply.js +33 -63
- package/dist/tree-operations/paste/body-write.d.ts +8 -6
- package/dist/tree-operations/paste/body-write.js +13 -14
- package/dist/tree-operations/paste/container-match.d.ts +7 -10
- package/dist/tree-operations/paste/container-match.js +76 -58
- package/dist/tree-operations/paste/container-paste.d.ts +3 -3
- package/dist/tree-operations/paste/container-paste.js +3 -3
- package/dist/tree-operations/paste/dispatch.d.ts +26 -29
- package/dist/tree-operations/paste/dispatch.js +68 -53
- package/dist/tree-operations/paste/focus-target.d.ts +11 -14
- package/dist/tree-operations/paste/focus-target.js +13 -18
- package/dist/tree-operations/paste/hooks.d.ts +7 -12
- package/dist/tree-operations/paste/hooks.js +49 -46
- package/dist/tree-operations/paste/line-ending.d.ts +11 -0
- package/dist/tree-operations/paste/line-ending.js +32 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
- package/dist/tree-operations/paste/list-absorb.js +17 -19
- package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
- package/dist/tree-operations/paste/list-break-out.js +24 -32
- package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
- package/dist/tree-operations/paste/parent-scope.js +9 -16
- package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
- package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
- package/dist/tree-operations/paste/paste-replacement.js +73 -42
- package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
- package/dist/tree-operations/paste/paste-transforms.js +18 -27
- package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
- package/dist/tree-operations/paste/replacement-parse.js +24 -0
- package/dist/tree-operations/paste/strategy.d.ts +1 -1
- package/dist/tree-operations/paste/strategy.js +1 -1
- package/dist/tree-operations/paste/table-slice.js +15 -10
- package/dist/tree-operations/paste-surfaces.d.ts +18 -29
- package/dist/tree-operations/paste-surfaces.js +14 -10
- package/dist/tree-operations/path-mutate.d.ts +7 -8
- package/dist/tree-operations/path-mutate.js +4 -4
- package/dist/tree-operations/reorder-unit.d.ts +4 -5
- package/dist/tree-operations/reorder-unit.js +5 -6
- package/dist/tree-operations/reorder.d.ts +7 -9
- package/dist/tree-operations/reorder.js +39 -40
- package/dist/tree-operations/settle.d.ts +42 -53
- package/dist/tree-operations/settle.js +241 -162
- package/dist/tree-operations/sharing.d.ts +5 -5
- package/dist/tree-operations/splice-many.d.ts +5 -5
- package/dist/tree-operations/splice-many.js +5 -5
- package/dist/tree-operations/stored-as.d.ts +13 -0
- package/dist/tree-operations/stored-as.js +48 -0
- package/dist/tree-operations/structural-change.d.ts +11 -15
- package/dist/tree-operations/structural-change.js +10 -14
- package/dist/tree-operations/structural-suffix.d.ts +22 -0
- package/dist/tree-operations/structural-suffix.js +61 -0
- package/dist/tree-operations/sub-table-copy.d.ts +7 -0
- package/dist/tree-operations/sub-table-copy.js +40 -36
- package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
- package/dist/tree-operations/table-grid-clipboard.js +11 -36
- package/dist/tree-operations/table-mutations.d.ts +7 -3
- package/dist/tree-operations/table-mutations.js +45 -9
- package/dist/tree-operations/unshare.d.ts +11 -15
- package/dist/tree-operations/unshare.js +15 -17
- package/dist/undo/manager.js +1 -1
- package/dist/undo/types.d.ts +2 -2
- package/docs/guide/consumer-guide.md +329 -205
- package/docs/guide/directives.md +7 -7
- package/docs/guide/plugin-api.md +267 -183
- package/docs/guide/plugin-guide.md +341 -235
- package/docs/guide/plugin-testing.md +96 -82
- package/package.json +17 -21
- package/dist/ambient/ambient-cursor.d.ts +0 -41
- package/dist/ambient/ambient-cursor.js +0 -120
- package/dist/components/blocks/code/code-paste.d.ts +0 -24
- package/dist/components/blocks/code/code-paste.js +0 -21
- package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
- package/dist/components/blocks/table/cell-clipboard.js +0 -67
- package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
- package/dist/components/blocks/text/hidden-suffix.js +0 -15
- package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
- package/dist/components/image/image-source-bytes.d.ts +0 -15
- package/dist/components/image/image-source-bytes.js +0 -80
- package/dist/cursor/content-offsets.d.ts +0 -29
- package/dist/cursor/content-offsets.js +0 -151
- package/dist/cursor/reveal-anchor.d.ts +0 -30
- package/dist/cursor/reveal-anchor.js +0 -31
- package/dist/invariants/split-landing.d.ts +0 -8
- package/dist/invariants/split-landing.js +0 -15
- package/dist/selection/double-click-trim.d.ts +0 -17
- package/dist/selection/double-click-trim.js +0 -57
- package/dist/tree-operations/list/terminator.d.ts +0 -17
- package/dist/tree-operations/list/terminator.js +0 -60
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
- package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
|
@@ -1,43 +1,42 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* unverified; every other candidate declines unless it verifies. At a COLLAPSED CARET: unwrap the
|
|
7
|
-
* span, else drop the empty pair, else insert one (live-mode.md § 4.3). Every write clamps to the
|
|
8
|
-
* CONTENT range: a marker in `# ` changes the kind.
|
|
2
|
+
* Toggles an inline mark inside a prose block, and answers whether a range already carries one.
|
|
3
|
+
* The parse decides the direction; in a mode that hides markers a candidate must leave the screen
|
|
4
|
+
* text unchanged (`docs/design/live-mode.md` § 2, and § 4.3 for a collapsed caret). Writes stay
|
|
5
|
+
* inside the content range, since a marker written into `# ` would change the block's kind.
|
|
9
6
|
*/
|
|
10
7
|
import { recordFormatCoverageRead } from '../../perf/instruments';
|
|
11
|
-
import { paintsFocusedMarkers } from '../../presentation-mode';
|
|
12
8
|
import { getInlineMarkPolicy, listInlineMarks } from '../../schema/inline-construct-policy';
|
|
13
|
-
import { constructContentRange, inlineDescendants,
|
|
9
|
+
import { constructContentRange, inlineDescendants, readInline } from './index';
|
|
14
10
|
import { CONTENT_VISIBILITY, renderedText } from './visibility';
|
|
15
|
-
/** Null for a kind whose row declares no mark
|
|
16
|
-
*
|
|
17
|
-
|
|
18
|
-
export function toggleInlineFormat(edit, format, mode) {
|
|
11
|
+
/** Null for a kind whose policy row declares no mark (there are no delimiters to write) and for
|
|
12
|
+
* a toggle whose every candidate fails verification: the safe fallback is to write nothing. */
|
|
13
|
+
export function toggleInlineFormat(edit, format) {
|
|
19
14
|
const mark = getInlineMarkPolicy(format);
|
|
20
15
|
if (!mark)
|
|
21
16
|
return null;
|
|
22
17
|
const { display, content, selection } = edit;
|
|
23
18
|
const start = clampToContent(selection.start, content);
|
|
24
19
|
const end = clampToContent(selection.end, content);
|
|
25
|
-
//
|
|
20
|
+
// Parsed with the block's own content bounds, so no construct can straddle the structural
|
|
26
21
|
// bytes the clamp above keeps the write out of.
|
|
27
|
-
const inlines =
|
|
22
|
+
const inlines = readInline(display, content.start, content.end, edit.reading.resolver, edit.reading.grammar);
|
|
28
23
|
if (start === end)
|
|
29
24
|
return toggleAtCaret(display, inlines, start, format, mark);
|
|
30
|
-
//
|
|
31
|
-
// The preview
|
|
32
|
-
const paints =
|
|
25
|
+
// A mode that shows the delimiters writes its candidate unverified: the user sees the markers.
|
|
26
|
+
// The preview modes count as showing them, since a toggle only writes into the focused block.
|
|
27
|
+
const paints = !edit.reading.hidesDelimitersAtCaret();
|
|
33
28
|
const { from, to, covering } = coveredReading(display, inlines, start, end, format);
|
|
34
|
-
// A strip
|
|
35
|
-
//
|
|
36
|
-
const sole = covering.length > 1
|
|
29
|
+
// A strip removes one run, so when a second run of the same kind also covers the selection the
|
|
30
|
+
// split path below handles it: stripping alone would leave the format still active.
|
|
31
|
+
const sole = covering.length > 1
|
|
32
|
+
? null
|
|
33
|
+
: soleStripCandidate(display, inlines, from, to, format, edit.reading);
|
|
37
34
|
if (sole)
|
|
38
|
-
return paints || preservesScreen(sole, edit, screenOf(display, content))
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
return paints || preservesScreen(sole, edit, screenOf(display, content, edit.reading))
|
|
36
|
+
? sole
|
|
37
|
+
: null;
|
|
38
|
+
// The flank strip rewrites bytes outside the selection, and byte equality can mistake a nested
|
|
39
|
+
// run's delimiters for the enclosing one's, so its candidate is verified like the split's.
|
|
41
40
|
const enclosing = enclosingSpanOf(inlines, from, to, format);
|
|
42
41
|
if (enclosing && flanksAreItsMarkers(display, from, to, enclosing)) {
|
|
43
42
|
const flank = firstFlipVerified([flankStrip(display, from, to, enclosing)], edit, format, 'unapply');
|
|
@@ -49,36 +48,34 @@ export function toggleInlineFormat(edit, format, mode) {
|
|
|
49
48
|
const union = formatUnionOf(inlines, start, end, format);
|
|
50
49
|
if (union)
|
|
51
50
|
return firstFlipVerified(absorbCandidates(display, inlines, union, { start, end }, format, mark), edit, format, 'apply');
|
|
52
|
-
// A wrap
|
|
53
|
-
//
|
|
51
|
+
// A wrap with hidden markers is verified like split and absorb: markers that re-pair with a
|
|
52
|
+
// neighbouring run leave the range unformatted, with nothing on screen to show it.
|
|
54
53
|
const wrap = wrapCandidate(display, inlines, start, end, mark);
|
|
55
54
|
if (!wrap)
|
|
56
55
|
return null;
|
|
57
56
|
return paints ? wrap : firstFlipVerified([wrap], edit, format, 'apply');
|
|
58
57
|
}
|
|
59
|
-
/** Whether a toggle right now would
|
|
60
|
-
* the toggle routes by, asked without
|
|
61
|
-
* carrying its own markers, flanked by them, or covered by a same-format construct. */
|
|
58
|
+
/** Whether a toggle right now would unformat, which is the pressed state a toolbar shows. The
|
|
59
|
+
* same checks the toggle routes by, asked without writing anything. */
|
|
62
60
|
export function isInlineFormatActive(edit, format) {
|
|
63
61
|
return coverageCarries(coverageOf(edit), format);
|
|
64
62
|
}
|
|
65
|
-
/** The
|
|
66
|
-
*
|
|
67
|
-
* drift on the content-end arithmetic. */
|
|
63
|
+
/** The same read over the bytes and range `result` hands back, kept here so the toggle's direction
|
|
64
|
+
* check and the tests that re-read a result agree on where the content ends. */
|
|
68
65
|
export function isInlineFormatActiveAfter(edit, result, format) {
|
|
69
66
|
return isInlineFormatActive({
|
|
70
67
|
display: result.newDisplay,
|
|
71
68
|
content: shiftedContent(edit.content, edit.display, result),
|
|
72
|
-
selection: { start: result.newSelStart, end: result.newSelEnd }
|
|
69
|
+
selection: { start: result.newSelStart, end: result.newSelEnd },
|
|
70
|
+
reading: edit.reading
|
|
73
71
|
}, format);
|
|
74
72
|
}
|
|
75
73
|
/** Every registered mark the edit's range already carries. */
|
|
76
74
|
export function activeInlineFormats(edit) {
|
|
77
75
|
return inlineFormatsCovering(edit, listInlineMarks().map((entry) => entry.kind));
|
|
78
76
|
}
|
|
79
|
-
/**
|
|
80
|
-
*
|
|
81
|
-
* than the vocabulary is what lets a range's running intersection stop re-asking ruled-out marks. */
|
|
77
|
+
/** One parse of the block for every candidate. A toolbar asks per button on each selection
|
|
78
|
+
* change, so a caller can leave out marks it has already ruled out. */
|
|
82
79
|
export function inlineFormatsCovering(edit, candidates) {
|
|
83
80
|
const coverage = coverageOf(edit);
|
|
84
81
|
const carried = new Set();
|
|
@@ -87,14 +84,16 @@ export function inlineFormatsCovering(edit, candidates) {
|
|
|
87
84
|
carried.add(kind);
|
|
88
85
|
return carried;
|
|
89
86
|
}
|
|
90
|
-
/**
|
|
91
|
-
*
|
|
92
|
-
* One slot, since the previous state is dead the moment a keystroke or the caret moves. */
|
|
87
|
+
/** Shares one parse across a toolbar's per-button calls over the same block state. One memo
|
|
88
|
+
* entry only, since a keystroke or a caret move retires the previous state. */
|
|
93
89
|
export function createInlineFormatActiveMemo() {
|
|
90
|
+
// The resolver is kept apart from the edit because the editor's ref reads it through a getter,
|
|
91
|
+
// so a definition edited elsewhere changes it under the same ref.
|
|
94
92
|
let slot = null;
|
|
95
93
|
return (edit, format) => {
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
const resolver = edit.reading.resolver;
|
|
95
|
+
if (!slot || slot.resolver !== resolver || !sameEdit(slot.edit, edit))
|
|
96
|
+
slot = { edit, resolver, coverage: coverageOf(edit) };
|
|
98
97
|
return coverageCarries(slot.coverage, format);
|
|
99
98
|
};
|
|
100
99
|
}
|
|
@@ -103,9 +102,9 @@ function coverageOf(edit) {
|
|
|
103
102
|
const { display, content, selection } = edit;
|
|
104
103
|
const start = clampToContent(selection.start, content);
|
|
105
104
|
const end = clampToContent(selection.end, content);
|
|
106
|
-
const inlines =
|
|
107
|
-
// A selection spanning the whole display
|
|
108
|
-
//
|
|
105
|
+
const inlines = readInline(display, content.start, content.end, edit.reading.resolver, edit.reading.grammar);
|
|
106
|
+
// A selection spanning the whole display parses the same as the block, and that is every
|
|
107
|
+
// middle block of a cross-block range, so the second parse is skipped.
|
|
109
108
|
const sliceIsDisplay = start === 0 && end === display.length;
|
|
110
109
|
return {
|
|
111
110
|
display,
|
|
@@ -116,20 +115,21 @@ function coverageOf(edit) {
|
|
|
116
115
|
? []
|
|
117
116
|
: sliceIsDisplay
|
|
118
117
|
? inlines
|
|
119
|
-
:
|
|
118
|
+
: readInline(display.slice(start, end), 0, end - start, edit.reading.resolver, edit.reading.grammar)
|
|
120
119
|
};
|
|
121
120
|
}
|
|
122
|
-
/**
|
|
123
|
-
*
|
|
121
|
+
/** Field-wise comparison rather than a composed string key: the display is the block's whole raw,
|
|
122
|
+
* and building a key would cost what the memo saves. */
|
|
124
123
|
function sameEdit(a, b) {
|
|
125
124
|
return (a.display === b.display &&
|
|
126
125
|
a.content.start === b.content.start &&
|
|
127
126
|
a.content.end === b.content.end &&
|
|
128
127
|
a.selection.start === b.selection.start &&
|
|
129
|
-
a.selection.end === b.selection.end
|
|
128
|
+
a.selection.end === b.selection.end &&
|
|
129
|
+
a.reading.grammar === b.reading.grammar);
|
|
130
130
|
}
|
|
131
|
-
/** The one
|
|
132
|
-
* including the
|
|
131
|
+
/** The one place that answers "does this range carry this mark", so every reader applies the same
|
|
132
|
+
* checks, including the policy-row test a kind with no mark must fail without parsing. */
|
|
133
133
|
function coverageCarries({ display, start, end, inlines, sliceNodes }, format) {
|
|
134
134
|
if (!getInlineMarkPolicy(format))
|
|
135
135
|
return false;
|
|
@@ -142,11 +142,8 @@ function coverageCarries({ display, start, end, inlines, sliceNodes }, format) {
|
|
|
142
142
|
return true;
|
|
143
143
|
return coveredReading(display, inlines, start, end, format).covering.length > 0;
|
|
144
144
|
}
|
|
145
|
-
/**
|
|
146
|
-
*
|
|
147
|
-
* whitespace, so the wrap leaves a boundary space OUTSIDE the delimiters: a selection reaching
|
|
148
|
-
* past a run by whitespace alone is still that run's own, or it could not take its own mark off.
|
|
149
|
-
*/
|
|
145
|
+
/** A run closes against a word, never whitespace, so a selection reaching past a run by
|
|
146
|
+
* whitespace alone still counts as that run, or it could not take its own mark off. */
|
|
150
147
|
function coveredReading(display, inlines, start, end, format) {
|
|
151
148
|
const covering = coveringSpansOf(inlines, start, end, format);
|
|
152
149
|
if (covering.length > 0)
|
|
@@ -160,13 +157,11 @@ function coveredReading(display, inlines, start, end, format) {
|
|
|
160
157
|
: { from: start, to: end, covering };
|
|
161
158
|
}
|
|
162
159
|
// ── Aligned unapply ──────────────────────────────────────────────────────────
|
|
163
|
-
/**
|
|
164
|
-
*
|
|
165
|
-
|
|
166
|
-
* kind inside that reading, or a whole-range unapply would leave part of the range formatted. */
|
|
167
|
-
function soleStripCandidate(display, inlines, start, end, format) {
|
|
160
|
+
/** For a selection holding its own markers (`**word**`), covered by exactly one span so that
|
|
161
|
+
* `**a** **b**` keeps its markers. Nested same-kind runs go too, or part stays formatted. */
|
|
162
|
+
function soleStripCandidate(display, inlines, start, end, format, reading) {
|
|
168
163
|
const slice = display.slice(start, end);
|
|
169
|
-
const sliceNodes =
|
|
164
|
+
const sliceNodes = readInline(slice, 0, slice.length, reading.resolver, reading.grammar);
|
|
170
165
|
const selfSpan = soleSpanOfSelection(sliceNodes, inlines, start, end, format);
|
|
171
166
|
if (!selfSpan)
|
|
172
167
|
return null;
|
|
@@ -177,9 +172,8 @@ function soleStripCandidate(display, inlines, start, end, format) {
|
|
|
177
172
|
newSelEnd: start + unwrapped.length
|
|
178
173
|
};
|
|
179
174
|
}
|
|
180
|
-
/** Markers outside the selection (`word`
|
|
181
|
-
*
|
|
182
|
-
* arithmetic; the construct check is what makes `**word**` toggled to emphasis nest instead. */
|
|
175
|
+
/** Markers just outside the selection (`word` in `*word*`) are cut at the selection's edges, not
|
|
176
|
+
* at the construct's own run, so `***word***` loses one layer. */
|
|
183
177
|
function flankStrip(display, start, end, span) {
|
|
184
178
|
const mLen = markerLengthOf(span);
|
|
185
179
|
return {
|
|
@@ -189,12 +183,8 @@ function flankStrip(display, start, end, span) {
|
|
|
189
183
|
};
|
|
190
184
|
}
|
|
191
185
|
// ── Split unapply ────────────────────────────────────────────────────────────
|
|
192
|
-
/**
|
|
193
|
-
*
|
|
194
|
-
* delimiter run, and a half's boundary whitespace yields a second candidate with it moved outside,
|
|
195
|
-
* since the symmetric runs cannot close against a space. The middle sheds the markers of any
|
|
196
|
-
* same-format construct it wholly contains, or it would reload still formatted.
|
|
197
|
-
*/
|
|
186
|
+
/** Each non-empty half keeps its delimiters, plus a candidate with boundary spaces moved out, as a
|
|
187
|
+
* run cannot close on a space. The middle loses nested same-format markers, or stays formatted. */
|
|
198
188
|
function splitCandidates(display, inlines, span, start, end, format) {
|
|
199
189
|
const cutStart = Math.max(start, span.contentStart);
|
|
200
190
|
const cutEnd = Math.min(end, span.contentEnd);
|
|
@@ -234,11 +224,8 @@ function halfVariants(text, opener, closer) {
|
|
|
234
224
|
];
|
|
235
225
|
}
|
|
236
226
|
// ── Absorb apply ─────────────────────────────────────────────────────────────
|
|
237
|
-
/**
|
|
238
|
-
*
|
|
239
|
-
* recursive-content constructs join: one holding literal text (a code span) means its delimiters
|
|
240
|
-
* are honest content inside any wider span, so merging would rewrite what the reader sees.
|
|
241
|
-
*/
|
|
227
|
+
/** Grows to a fixed point over the same-format constructs the selection touches. Only ones with
|
|
228
|
+
* children join: inside a wider span a code span's delimiters would show as literal text. */
|
|
242
229
|
function formatUnionOf(inlines, start, end, format) {
|
|
243
230
|
const spans = [];
|
|
244
231
|
for (const node of inlineDescendants(inlines)) {
|
|
@@ -267,9 +254,8 @@ function formatUnionOf(inlines, start, end, format) {
|
|
|
267
254
|
}
|
|
268
255
|
return touched ? { start: from, end: to } : null;
|
|
269
256
|
}
|
|
270
|
-
/** The run grows to the union
|
|
271
|
-
* strip and re-wrap, so a
|
|
272
|
-
* union's edge keeps the new marker inside the range, as a bare wrap's selection does. */
|
|
257
|
+
/** The run grows to the union but the selection does not: each endpoint is tracked through the
|
|
258
|
+
* strip and re-wrap, so a toggle over half a run leaves that half selected. */
|
|
273
259
|
function absorbCandidates(display, inlines, union, selected, format, mark) {
|
|
274
260
|
if (!cutsLandCleanly(inlines, union, union))
|
|
275
261
|
return [];
|
|
@@ -307,10 +293,8 @@ function absorbCandidates(display, inlines, union, selected, format, mark) {
|
|
|
307
293
|
out.push(wrapAt(lead, stripped.slice(lead.length, stripped.length - trail.length), trail));
|
|
308
294
|
return out;
|
|
309
295
|
}
|
|
310
|
-
/**
|
|
311
|
-
*
|
|
312
|
-
* a stranded delimiter re-pairs with whatever run the parse finds next, which can preserve the
|
|
313
|
-
* text while reformatting content nobody selected. Split, absorb and the wrap all ask here. */
|
|
296
|
+
/** Each cut must fall in a text run or on a construct boundary: a delimiter stranded inside a
|
|
297
|
+
* construct re-pairs with the next run the parse finds, formatting content nobody selected. */
|
|
314
298
|
function cutsLandCleanly(inlines, cuts, within) {
|
|
315
299
|
for (const node of inlineDescendants(inlines)) {
|
|
316
300
|
if (node.kind === 'text')
|
|
@@ -352,7 +336,7 @@ function spliceOutCuts(display, cuts, from, to) {
|
|
|
352
336
|
return out + display.slice(at, to);
|
|
353
337
|
}
|
|
354
338
|
/** Where a display offset lands in the stripped slice: the cut bytes before it fall away, and an
|
|
355
|
-
* offset inside a marker
|
|
339
|
+
* offset inside a marker moves to that marker's start. */
|
|
356
340
|
function strippedOffset(cuts, from, offset) {
|
|
357
341
|
let removed = 0;
|
|
358
342
|
for (const [cutFrom, cutTo] of cuts)
|
|
@@ -361,12 +345,8 @@ function strippedOffset(cuts, from, offset) {
|
|
|
361
345
|
return Math.max(0, offset - from - removed);
|
|
362
346
|
}
|
|
363
347
|
// ── Wrap ─────────────────────────────────────────────────────────────────────
|
|
364
|
-
/**
|
|
365
|
-
*
|
|
366
|
-
* never whitespace, so a boundary space goes to the plain text beside the run, as
|
|
367
|
-
* `live-split-rebalance` reads the same problem. Null where nothing survives the trim, or where an
|
|
368
|
-
* endpoint is no legal cut: markers spliced into a construct's bytes re-pair.
|
|
369
|
-
*/
|
|
348
|
+
/** Boundary spaces stay outside the markers, since a run opens and closes against a word. Null
|
|
349
|
+
* when nothing survives the trim or an endpoint would cut into a construct. */
|
|
370
350
|
function wrapCandidate(display, inlines, start, end, mark) {
|
|
371
351
|
const core = withoutBoundaryWhitespace(display, start, end);
|
|
372
352
|
if (!core || !cutsLandCleanly(inlines, core, core))
|
|
@@ -384,27 +364,28 @@ function wrapRange(display, start, end, mark) {
|
|
|
384
364
|
// ── Verification ─────────────────────────────────────────────────────────────
|
|
385
365
|
/** A toggle changes formatting, never the text on screen, so the render path's own reading of the
|
|
386
366
|
* content is what a candidate has to leave unchanged (live-mode.md § 2). */
|
|
387
|
-
function screenOf(display, content) {
|
|
388
|
-
return renderedText(
|
|
367
|
+
function screenOf(display, content, reading) {
|
|
368
|
+
return renderedText(readInline(display, content.start, content.end, reading.resolver, reading.grammar), display, CONTENT_VISIBILITY, { grammar: reading.grammar });
|
|
389
369
|
}
|
|
390
370
|
function preservesScreen(candidate, edit, shown) {
|
|
391
371
|
const { display, content } = edit;
|
|
392
|
-
|
|
372
|
+
const shifted = shiftedContent(content, display, candidate);
|
|
373
|
+
return screenOf(candidate.newDisplay, shifted, edit.reading) === shown;
|
|
393
374
|
}
|
|
394
|
-
/**
|
|
395
|
-
*
|
|
396
|
-
* nested pair that leaves the range formatted exactly as it was. */
|
|
375
|
+
/** The screen text must be unchanged and the coverage must actually flip: text preservation
|
|
376
|
+
* alone admits a nested pair that leaves the range formatted exactly as it was. */
|
|
397
377
|
function firstFlipVerified(candidates, edit, format, direction) {
|
|
398
378
|
const { display, content } = edit;
|
|
399
|
-
const shown = screenOf(display, content);
|
|
379
|
+
const shown = screenOf(display, content, edit.reading);
|
|
400
380
|
return (candidates.find((candidate) => preservesScreen(candidate, edit, shown) &&
|
|
401
|
-
coverageFlipped(candidate,
|
|
381
|
+
coverageFlipped(candidate, edit, format, direction)) ?? null);
|
|
402
382
|
}
|
|
403
|
-
/** Whether
|
|
404
|
-
*
|
|
405
|
-
function coverageFlipped(candidate,
|
|
383
|
+
/** Whether the toggle's direction holds in the bytes it would write: for apply, a same-format run
|
|
384
|
+
* covers the selection whole; for unapply, none still overlaps it. */
|
|
385
|
+
function coverageFlipped(candidate, edit, format, direction) {
|
|
406
386
|
const { newDisplay, newSelStart: from, newSelEnd: to } = candidate;
|
|
407
|
-
const
|
|
387
|
+
const content = shiftedContent(edit.content, edit.display, candidate);
|
|
388
|
+
const inlines = readInline(newDisplay, content.start, content.end, edit.reading.resolver, edit.reading.grammar);
|
|
408
389
|
if (direction === 'apply')
|
|
409
390
|
return coveringSpansOf(inlines, from, to, format).length > 0;
|
|
410
391
|
const spans = [];
|
|
@@ -413,7 +394,7 @@ function coverageFlipped(candidate, content, format, direction) {
|
|
|
413
394
|
spans.push({ start: node.start, end: node.end });
|
|
414
395
|
return spans.every((span) => span.end <= from || to <= span.start);
|
|
415
396
|
}
|
|
416
|
-
/** The write
|
|
397
|
+
/** The write stays inside the content range, so only its end moves, by what the candidate added. */
|
|
417
398
|
function shiftedContent(content, display, candidate) {
|
|
418
399
|
return { start: content.start, end: content.end + candidate.newDisplay.length - display.length };
|
|
419
400
|
}
|
|
@@ -432,10 +413,8 @@ function toggleAtCaret(display, inlines, caret, format, mark) {
|
|
|
432
413
|
}
|
|
433
414
|
const markers = mark.markerBytes;
|
|
434
415
|
const mLen = markers.length;
|
|
435
|
-
//
|
|
436
|
-
//
|
|
437
|
-
// its own: a marker character abutting either side means these are bytes the user wrote, and
|
|
438
|
-
// this arm only runs where the mode paints them.
|
|
416
|
+
// An empty pair from a previous toggle, which parses as literal text (`****`). A marker
|
|
417
|
+
// character beside the pair means the user wrote these bytes, so only a lone pair goes.
|
|
439
418
|
if (isLoneEmptyPair(display, caret, markers)) {
|
|
440
419
|
return {
|
|
441
420
|
newDisplay: display.slice(0, caret - mLen) + display.slice(caret + mLen),
|
|
@@ -460,8 +439,8 @@ function isLoneEmptyPair(display, caret, markers) {
|
|
|
460
439
|
display[start - 1] !== markers[0] &&
|
|
461
440
|
display[caret + mLen] !== markers[mLen - 1]);
|
|
462
441
|
}
|
|
463
|
-
/** Both delimiters of a construct are the same run, so the bytes its content
|
|
464
|
-
*
|
|
442
|
+
/** Both delimiters of a construct are the same run, so the bytes outside its content split evenly;
|
|
443
|
+
* a code span's fence comes from `codeSpanFence`, through {@link constructContentRange}. */
|
|
465
444
|
function markerLengthOf(span) {
|
|
466
445
|
return span.contentStart - span.start;
|
|
467
446
|
}
|
|
@@ -471,11 +450,8 @@ function spanOf(node) {
|
|
|
471
450
|
return null;
|
|
472
451
|
return { start: node.start, end: node.end, contentStart: content.start, contentEnd: content.end };
|
|
473
452
|
}
|
|
474
|
-
/**
|
|
475
|
-
*
|
|
476
|
-
* parse: `*word*` carved from `**word**` and from `***word***` read identically in isolation, but
|
|
477
|
-
* only the latter sits inside an emphasis span.
|
|
478
|
-
*/
|
|
453
|
+
/** The innermost, from the block's full parse: `*word*` cut from `**word**` or from `***word***`
|
|
454
|
+
* reads the same alone, but only the latter sits inside an emphasis span. */
|
|
479
455
|
function enclosingSpanOf(inlines, start, end, format) {
|
|
480
456
|
let found = null;
|
|
481
457
|
for (const node of inlineDescendants(inlines)) {
|
|
@@ -487,10 +463,8 @@ function enclosingSpanOf(inlines, start, end, format) {
|
|
|
487
463
|
}
|
|
488
464
|
return found;
|
|
489
465
|
}
|
|
490
|
-
/**
|
|
491
|
-
*
|
|
492
|
-
* formatted", and where runs of one kind nest, shedding the inner one leaves the outer covering,
|
|
493
|
-
* so the split tries each in turn. */
|
|
466
|
+
/** A selection reaching into the delimiters still reads as formatted. Every nested run of the
|
|
467
|
+
* kind is returned, since removing the inner one leaves the outer covering. */
|
|
494
468
|
function coveringSpansOf(inlines, start, end, format) {
|
|
495
469
|
const range = peeledToContent(inlines, start, end);
|
|
496
470
|
const covering = [];
|
|
@@ -503,9 +477,8 @@ function coveringSpansOf(inlines, start, end, format) {
|
|
|
503
477
|
}
|
|
504
478
|
return covering;
|
|
505
479
|
}
|
|
506
|
-
/**
|
|
507
|
-
*
|
|
508
|
-
* construct whole is asking about the content that construct encloses. */
|
|
480
|
+
/** A run can nest inside another kind's bytes (`***ab***` is emphasis around strong), so a range
|
|
481
|
+
* taking the outer construct whole is asking about the content inside it. */
|
|
509
482
|
function peeledToContent(inlines, start, end) {
|
|
510
483
|
let from = start;
|
|
511
484
|
let to = end;
|
|
@@ -530,12 +503,8 @@ function spanExactlyOver(inlines, start, end) {
|
|
|
530
503
|
}
|
|
531
504
|
return null;
|
|
532
505
|
}
|
|
533
|
-
/**
|
|
534
|
-
*
|
|
535
|
-
* which is the only reading a strip may act on: `*bold*` carved out of `**bold**` is emphasis alone
|
|
536
|
-
* while the block holds none, and shedding one delimiter layer there lands on a run of the same
|
|
537
|
-
* kind. Offsets come back in SLICE space, where the strip splices.
|
|
538
|
-
*/
|
|
506
|
+
/** Both parses must agree before a strip: `*bold*` cut from `**bold**` is emphasis alone but not
|
|
507
|
+
* in the block. Offsets are relative to the slice, where the strip splices. */
|
|
539
508
|
function soleSpanOfSelection(sliceNodes, inlines, start, end, format) {
|
|
540
509
|
const span = soleSpanIn(sliceNodes, end - start, format);
|
|
541
510
|
if (!span)
|
|
@@ -569,9 +538,8 @@ function leadingWs(text) {
|
|
|
569
538
|
function trailingWs(text) {
|
|
570
539
|
return /\s*$/.exec(text)[0];
|
|
571
540
|
}
|
|
572
|
-
/**
|
|
573
|
-
*
|
|
574
|
-
* (`selection/cross-block/format-range.ts`) cannot disagree about where a run may close. */
|
|
541
|
+
/** Shared with the cross-block path (`selection/cross-block/format-range.ts`) so the two agree
|
|
542
|
+
* on where a run may close. Null when nothing is left. */
|
|
575
543
|
export function withoutBoundaryWhitespace(display, from, to) {
|
|
576
544
|
let start = from;
|
|
577
545
|
let end = to;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HTML5 named-entity table per CommonMark §2.5, vendored from
|
|
3
3
|
* https://html.spec.whatwg.org/entities.json (WHATWG HTML Standard, CC BY 4.0; see
|
|
4
|
-
* THIRD-PARTY-NOTICES.md). To regenerate: keep only
|
|
5
|
-
*
|
|
6
|
-
* which is multi-codepoint for some entries.
|
|
4
|
+
* THIRD-PARTY-NOTICES.md). To regenerate: keep only keys ending in `;`, as CommonMark requires,
|
|
5
|
+
* and map each key without `&`/`;` to its whole `characters` field (some are multi-codepoint).
|
|
7
6
|
*/
|
|
8
7
|
export declare const HTML5_NAMED_ENTITIES: Readonly<Record<string, string>>;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HTML5 named-entity table per CommonMark §2.5, vendored from
|
|
3
3
|
* https://html.spec.whatwg.org/entities.json (WHATWG HTML Standard, CC BY 4.0; see
|
|
4
|
-
* THIRD-PARTY-NOTICES.md). To regenerate: keep only
|
|
5
|
-
*
|
|
6
|
-
* which is multi-codepoint for some entries.
|
|
4
|
+
* THIRD-PARTY-NOTICES.md). To regenerate: keep only keys ending in `;`, as CommonMark requires,
|
|
5
|
+
* and map each key without `&`/`;` to its whole `characters` field (some are multi-codepoint).
|
|
7
6
|
*/
|
|
8
7
|
export const HTML5_NAMED_ENTITIES = Object.freeze({
|
|
9
8
|
AElig: 'Æ',
|
|
@@ -4,8 +4,12 @@
|
|
|
4
4
|
* The tag sources are exported so the block parser anchors them at line scope rather than
|
|
5
5
|
* keeping a copy that could drift.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
import { WHITESPACE_CHARS, WHITESPACE_CLASS } from '../lines';
|
|
8
|
+
// `W` is GFM whitespace (§2.1), so a non-breaking space inside a tag makes it no tag.
|
|
9
|
+
const W = WHITESPACE_CLASS;
|
|
10
|
+
const UNQUOTED_VALUE = `[^${WHITESPACE_CHARS}"'=<>\`]+`;
|
|
11
|
+
const OPEN_TAG = new RegExp(`<[A-Za-z][A-Za-z0-9-]*(?:${W}+[a-zA-Z_:][a-zA-Z0-9_.:-]*(?:${W}*=${W}*(?:${UNQUOTED_VALUE}|"[^"]*"|'[^']*'))?)*${W}*\\/?>`);
|
|
12
|
+
const CLOSE_TAG = new RegExp(`<\\/[A-Za-z][A-Za-z0-9-]*${W}*>`);
|
|
9
13
|
/** Open tag `<name (attrs)* /?>` (CommonMark §6.6), unanchored source. */
|
|
10
14
|
export const OPEN_TAG_SOURCE = OPEN_TAG.source;
|
|
11
15
|
/** Close tag `</name>` with optional whitespace before `>`, unanchored source. */
|
|
@@ -7,3 +7,5 @@ export interface ParsedImageAlt {
|
|
|
7
7
|
crop: ImageCrop | undefined;
|
|
8
8
|
}
|
|
9
9
|
export declare function parseImageDimensions(alt: string): ParsedImageAlt;
|
|
10
|
+
/** The suffix `parseImageDimensions` reads back as these values; empty for no width. */
|
|
11
|
+
export declare function buildDimSuffix(width: number | undefined, height: number | undefined, crop: ImageCrop | undefined): string;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
1
|
+
// The size hint at the end of an image's alt text, read and written here. `|N` / `|NxM` is an
|
|
2
|
+
// Obsidian extension, not part of GFM; the `@X,Y[,Z]` tail on the `NxM` form is this editor's
|
|
3
|
+
// own: the pan and zoom of the image inside that frame.
|
|
3
4
|
const MAX_DIMENSION = 10000;
|
|
4
5
|
export const MAX_CROP_ZOOM = 4;
|
|
5
6
|
// The longest decodable suffix, `|10000x10000@100,100,4.00`. Bounding the pipe search to that
|
|
6
7
|
// tail keeps nested-label floods linear.
|
|
7
8
|
const MAX_SUFFIX_SEARCH = 26;
|
|
8
9
|
const NO_HINT = { width: undefined, height: undefined, crop: undefined };
|
|
10
|
+
// ── Reading ─────────────────────────────────────────────────────────────────
|
|
9
11
|
export function parseImageDimensions(alt) {
|
|
10
12
|
const lastPipe = boundedLastPipe(alt);
|
|
11
13
|
const dims = lastPipe === -1 ? null : parseDimensionSuffix(alt.slice(lastPipe + 1));
|
|
@@ -76,3 +78,18 @@ function parseStrictInt(s) {
|
|
|
76
78
|
return null;
|
|
77
79
|
return n;
|
|
78
80
|
}
|
|
81
|
+
// ── Writing ─────────────────────────────────────────────────────────────────
|
|
82
|
+
/** The suffix `parseImageDimensions` reads back as these values; empty for no width. */
|
|
83
|
+
export function buildDimSuffix(width, height, crop) {
|
|
84
|
+
if (width === undefined)
|
|
85
|
+
return '';
|
|
86
|
+
if (height === undefined)
|
|
87
|
+
return `|${width}`;
|
|
88
|
+
return `|${width}x${height}${crop ? buildCropTail(crop) : ''}`;
|
|
89
|
+
}
|
|
90
|
+
/** The pan in whole percents, then the zoom to two decimals, left out at 1. */
|
|
91
|
+
function buildCropTail(crop) {
|
|
92
|
+
const z = Math.round(crop.z * 100) / 100;
|
|
93
|
+
const zoom = z === 1 ? '' : `,${String(z)}`;
|
|
94
|
+
return `@${Math.round(crop.x)},${Math.round(crop.y)}${zoom}`;
|
|
95
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ImageFields, InlineNode } from '../nodes';
|
|
2
|
+
/** Bytes to splice over `image`'s range, or null when the edit is refused. A node a plugin's
|
|
3
|
+
* syntax owns is written by its `rewriteImage` hook (`docs/design/plugin-contract.md`). */
|
|
4
|
+
export declare function buildImageEditBytes(image: InlineNode, blockRaw: string, fields: ImageFields): string | null;
|
|
5
|
+
/** Only the optional keys the node holds, so a rebuild adds no field the source lacked and
|
|
6
|
+
* repeated resizes leave the alt text unchanged. */
|
|
7
|
+
export declare function imageFieldsFromInline(image: InlineNode): ImageFields;
|
|
8
|
+
export declare function sameImageFields(a: ImageFields, b: ImageFields): boolean;
|
|
9
|
+
/** The inverse of the built-in grammar; call `buildImageEditBytes`, which decides whether the
|
|
10
|
+
* bytes are GFM's to write. */
|
|
11
|
+
export declare function buildImageSourceBytes(fields: ImageFields): string;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// Where an image edit becomes bytes: the one function every image write goes through, and
|
|
2
|
+
// below it the GFM serializer, which nothing else may call.
|
|
3
|
+
import { encodeDestination, escapeTitle } from './destination-bytes';
|
|
4
|
+
import { buildDimSuffix } from './image-dimensions';
|
|
5
|
+
import { devWarn } from '../../dev-warn';
|
|
6
|
+
// ── Where the bytes are written ─────────────────────────────────────────────
|
|
7
|
+
/** Bytes to splice over `image`'s range, or null when the edit is refused. A node a plugin's
|
|
8
|
+
* syntax owns is written by its `rewriteImage` hook (`docs/design/plugin-contract.md`). */
|
|
9
|
+
export function buildImageEditBytes(image, blockRaw, fields) {
|
|
10
|
+
const claim = image.syntaxClaim;
|
|
11
|
+
if (!claim)
|
|
12
|
+
return buildImageSourceBytes(fields);
|
|
13
|
+
const bytes = claim.rewriteImage?.(blockRaw.slice(image.start, image.end), fields) ?? null;
|
|
14
|
+
if (bytes === null) {
|
|
15
|
+
devWarn('image-edit', `declined: the "${claim.prefix}" inline syntax handler owns these bytes and ` +
|
|
16
|
+
`${claim.rewriteImage ? 'its rewriteImage hook cannot represent this edit' : 'registered no rewriteImage hook'}`, fields);
|
|
17
|
+
}
|
|
18
|
+
return bytes;
|
|
19
|
+
}
|
|
20
|
+
/** Only the optional keys the node holds, so a rebuild adds no field the source lacked and
|
|
21
|
+
* repeated resizes leave the alt text unchanged. */
|
|
22
|
+
export function imageFieldsFromInline(image) {
|
|
23
|
+
return {
|
|
24
|
+
alt: image.alt ?? '',
|
|
25
|
+
url: image.url ?? '',
|
|
26
|
+
...(image.title !== undefined ? { title: image.title } : {}),
|
|
27
|
+
...(image.width !== undefined ? { width: image.width } : {}),
|
|
28
|
+
...(image.height !== undefined ? { height: image.height } : {}),
|
|
29
|
+
...(image.crop !== undefined ? { crop: image.crop } : {}),
|
|
30
|
+
...(image.label !== undefined ? { label: image.label } : {})
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function sameImageFields(a, b) {
|
|
34
|
+
return (a.alt === b.alt &&
|
|
35
|
+
a.url === b.url &&
|
|
36
|
+
a.title === b.title &&
|
|
37
|
+
a.width === b.width &&
|
|
38
|
+
a.height === b.height &&
|
|
39
|
+
a.label === b.label &&
|
|
40
|
+
a.crop?.x === b.crop?.x &&
|
|
41
|
+
a.crop?.y === b.crop?.y &&
|
|
42
|
+
a.crop?.z === b.crop?.z);
|
|
43
|
+
}
|
|
44
|
+
// ── The GFM serializer ──────────────────────────────────────────────────────
|
|
45
|
+
/** The inverse of the built-in grammar; call `buildImageEditBytes`, which decides whether the
|
|
46
|
+
* bytes are GFM's to write. */
|
|
47
|
+
export function buildImageSourceBytes(fields) {
|
|
48
|
+
const dimSuffix = buildDimSuffix(fields.width, fields.height, fields.crop);
|
|
49
|
+
const altSegment = escapeAlt(fields.alt) + dimSuffix;
|
|
50
|
+
// A reference image's url and title belong to its link reference definition.
|
|
51
|
+
if (fields.label !== undefined) {
|
|
52
|
+
return `![${altSegment}][${fields.label}]`;
|
|
53
|
+
}
|
|
54
|
+
const titleSegment = fields.title !== undefined ? ` "${escapeTitle(fields.title)}"` : '';
|
|
55
|
+
return `}${titleSegment})`;
|
|
56
|
+
}
|
|
57
|
+
// Alt text keeps the label's bytes as written: a bare bracket is escaped so it can't end the
|
|
58
|
+
// label, and an existing backslash pair passes through so repeated commits never double it.
|
|
59
|
+
function escapeAlt(alt) {
|
|
60
|
+
let out = '';
|
|
61
|
+
for (let i = 0; i < alt.length; i++) {
|
|
62
|
+
const ch = alt[i];
|
|
63
|
+
if (ch === '\\' && i + 1 < alt.length) {
|
|
64
|
+
out += ch + alt[i + 1];
|
|
65
|
+
i++;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
out += ch === '[' || ch === ']' || ch === '\\' ? '\\' + ch : ch;
|
|
69
|
+
}
|
|
70
|
+
return out;
|
|
71
|
+
}
|