@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,17 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Inline `$…$` math and the two display-math block forms, as
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Inline `$…$` math and the two display-math block forms, as block kinds that hold their own
|
|
3
|
+
* source. No renderer here: `math-renderer.ts` is handed one, and this file never imports one.
|
|
4
|
+
* Recognition starts only once the plugin registers, so without it parsing stays byte-identical
|
|
5
|
+
* to plain GFM.
|
|
6
6
|
*/
|
|
7
|
-
import { caretOffsetAtPoint, createScanIndex, declarePluginInlineKind, declarePluginKind, registerInlineSyntax, registerInlineWidgetKind, registerBlockKind, registerBlockOpener,
|
|
7
|
+
import { caretOffsetAtPoint, createScanIndex, declarePluginInlineKind, declarePluginKind, registerInlineSyntax, registerInlineWidgetKind, registerBlockKind, registerBlockOpener, simpleLeafClosure, fenceAnatomy, fenceRawWrite, fenceShapeOfRaw, matchFenceInfo, scanFence, OPENER_PRIORITIES, trimTrailingLineEnding, displayLines, joinDisplayLines, ownTrailingLineEnding, trailingLineEnding, trimWhitespace } from '../../plugin';
|
|
8
8
|
import MathInline from './MathInline.svelte';
|
|
9
|
+
import { isFlankingSpace } from './flanking';
|
|
9
10
|
import { registerMathBlockCompleter } from './math-completion';
|
|
10
11
|
export const MATH_INLINE = 'math';
|
|
11
12
|
export const MATH_BLOCK = 'mathBlock';
|
|
12
13
|
export const MATH_FENCE = 'mathFence';
|
|
13
14
|
// ── Recognition ──────────────────────────────────────────────────────────────
|
|
14
|
-
const isWhitespace = (ch) => /\s/.test(ch);
|
|
15
15
|
const isDigit = (ch) => ch >= '0' && ch <= '9';
|
|
16
16
|
function indexDollars(raw) {
|
|
17
17
|
const positions = [];
|
|
@@ -26,28 +26,25 @@ function indexDollars(raw) {
|
|
|
26
26
|
const nextDollarFrom = createScanIndex(indexDollars);
|
|
27
27
|
/** Money, written the way prose writes it: a whole number between the delimiters. */
|
|
28
28
|
const isPriceSpan = (body) => /^\d[\d.,]*$/.test(body);
|
|
29
|
-
/**
|
|
30
|
-
*
|
|
31
|
-
* and a bad closer leaves the opener literal; a closer needs a non-space before it and no digit
|
|
32
|
-
* after it. Ours: a span that is only a number is a price (`$5$`), so a typed price stays prose.
|
|
33
|
-
*/
|
|
29
|
+
/** Pandoc's rule: a match ends at the next `$`, and a closer with a space before it or a digit
|
|
30
|
+
* after leaves the opener literal. Added: a span that is only a number (`$5$`) stays prose. */
|
|
34
31
|
function recognizeMath(raw, pos, end, kind) {
|
|
35
32
|
const afterOpen = pos + 1;
|
|
36
33
|
if (afterOpen >= end)
|
|
37
34
|
return null;
|
|
38
35
|
const opener = raw[afterOpen];
|
|
39
|
-
if (
|
|
36
|
+
if (isFlankingSpace(opener))
|
|
40
37
|
return null;
|
|
41
38
|
// `$$` is the display fence, or the empty pair a keystroke just closed: never an inline
|
|
42
|
-
// opener, or the
|
|
39
|
+
// opener, or the match would end on the second `$` of its own opener.
|
|
43
40
|
if (opener === '$')
|
|
44
41
|
return null;
|
|
45
|
-
// The index spans the whole block, so `end`
|
|
46
|
-
//
|
|
42
|
+
// The index spans the whole block, so `end` is what decides: a closer past the scan
|
|
43
|
+
// range leaves the `$` literal.
|
|
47
44
|
const close = nextDollarFrom(raw, pos + 2);
|
|
48
45
|
if (close === -1 || close >= end)
|
|
49
46
|
return null;
|
|
50
|
-
if (
|
|
47
|
+
if (isFlankingSpace(raw[close - 1]) || isDigit(raw[close + 1] ?? ''))
|
|
51
48
|
return null;
|
|
52
49
|
if (isPriceSpan(raw.slice(afterOpen, close)))
|
|
53
50
|
return null;
|
|
@@ -55,10 +52,6 @@ function recognizeMath(raw, pos, end, kind) {
|
|
|
55
52
|
}
|
|
56
53
|
// ── Registration ─────────────────────────────────────────────────────────────
|
|
57
54
|
export function registerMathInline() {
|
|
58
|
-
// Keyed on the kind registry, not a module latch, so the platform reset that clears
|
|
59
|
-
// the inline registries also clears this guard.
|
|
60
|
-
if (isInlineKindDeclared(MATH_INLINE))
|
|
61
|
-
return;
|
|
62
55
|
const kind = declarePluginInlineKind(MATH_INLINE);
|
|
63
56
|
registerInlineSyntax('$', (raw, pos, end) => recognizeMath(raw, pos, end, kind), {
|
|
64
57
|
autoPair: true
|
|
@@ -73,14 +66,14 @@ export function registerMathInline() {
|
|
|
73
66
|
}
|
|
74
67
|
});
|
|
75
68
|
}
|
|
76
|
-
// ── Caret from a
|
|
77
|
-
// KaTeX paints glyphs, not source bytes, so both forms read a
|
|
78
|
-
// the painted run it
|
|
69
|
+
// ── Caret from a click ───────────────────────────────────────────────────────
|
|
70
|
+
// KaTeX paints glyphs, not source bytes, so both forms read a click the same way: how far along
|
|
71
|
+
// the painted run it landed, scaled into the span that run renders.
|
|
79
72
|
/** `$…$`: one delimiter each side, so an edit stays inside the formula. */
|
|
80
73
|
const mathContentSpan = (source) => source.length >= 2 ? { start: 1, end: source.length - 1 } : null;
|
|
81
74
|
function glyphOffsetInSpan(rendered, span, clientX, clientY) {
|
|
82
|
-
// `.katex-html` is the painted
|
|
83
|
-
//
|
|
75
|
+
// `.katex-html` is the half that is painted: the MathML copy beside it is clipped to a
|
|
76
|
+
// pixel, and measuring both together answers for a point nobody clicked.
|
|
84
77
|
const glyphs = rendered.querySelector('.katex-html');
|
|
85
78
|
const along = glyphs ? caretOffsetAtPoint(glyphs, clientX, clientY) : null;
|
|
86
79
|
const total = glyphs?.textContent?.length ?? 0;
|
|
@@ -92,8 +85,8 @@ function mathInlineOffsetAtPoint(widgetEl, source, clientX, clientY) {
|
|
|
92
85
|
const span = mathContentSpan(source);
|
|
93
86
|
return span ? glyphOffsetInSpan(widgetEl, span, clientX, clientY) : null;
|
|
94
87
|
}
|
|
95
|
-
/** Where a
|
|
96
|
-
* their own, so a point the glyphs cannot answer for
|
|
88
|
+
/** Where a click on the rendered equation puts the caret; the fence lines paint no glyphs of
|
|
89
|
+
* their own, so a point the glyphs cannot answer for goes to the body's end. */
|
|
97
90
|
function mathCaretAtPoint(blockEl, clientX, clientY) {
|
|
98
91
|
const render = blockEl.querySelector('.math-block-render');
|
|
99
92
|
if (!render)
|
|
@@ -110,22 +103,48 @@ function mathCaretAtPoint(blockEl, clientX, clientY) {
|
|
|
110
103
|
* Round-trip stays byte-level on `raw`, so this never feeds serialization.
|
|
111
104
|
*/
|
|
112
105
|
export function mathDisplaySource(source) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
return '';
|
|
117
|
-
const body = source
|
|
118
|
-
.slice(firstBreak + 1)
|
|
119
|
-
.replace(/(?:\r?\n)?[ \t]*(?:`{3,}|~{3,})[ \t]*\r?\n?$/, '');
|
|
120
|
-
return body.trim();
|
|
121
|
-
}
|
|
106
|
+
const fence = fenceAnatomy(source);
|
|
107
|
+
if (fence)
|
|
108
|
+
return trimWhitespace(source.slice(fence.bodyStart, fence.closerStart));
|
|
122
109
|
let inner = source;
|
|
123
110
|
if (inner.startsWith('$$'))
|
|
124
111
|
inner = inner.slice(2);
|
|
125
112
|
if (inner.endsWith('$$'))
|
|
126
113
|
inner = inner.slice(0, -2);
|
|
127
|
-
return inner
|
|
114
|
+
return trimWhitespace(inner);
|
|
115
|
+
}
|
|
116
|
+
// ── Writing a block's own bytes ────────────────────────────────────────────────
|
|
117
|
+
/** The ending a restored closer line takes: the block's own, else the document's. */
|
|
118
|
+
const closerEnding = (ctx) => trailingLineEnding(ctx.node.raw, ctx.lineEnding);
|
|
119
|
+
/** The `$$` kind's write rule: put back a closer a truncating write dropped, as a fenced code
|
|
120
|
+
* block does; a first line that does not open the block is left alone. */
|
|
121
|
+
function normalizeMathBlockRaw(raw, ctx) {
|
|
122
|
+
const display = trimTrailingLineEnding(raw);
|
|
123
|
+
const lines = displayLines(display);
|
|
124
|
+
const { text } = lines[0];
|
|
125
|
+
if (!text.startsWith(BLOCK_FENCE))
|
|
126
|
+
return raw;
|
|
127
|
+
if (text === BLOCK_FENCE) {
|
|
128
|
+
if (lines.slice(1).some((line) => line.text === BLOCK_FENCE))
|
|
129
|
+
return raw;
|
|
130
|
+
return display + closerEnding(ctx) + BLOCK_FENCE + ownTrailingLineEnding(raw);
|
|
131
|
+
}
|
|
132
|
+
if (isBlockMathOpener(text))
|
|
133
|
+
return raw;
|
|
134
|
+
// The one-line form closes on line 0, so the lines a join brought along stay their own blocks.
|
|
135
|
+
lines[0] = { ...lines[0], text: text + BLOCK_FENCE };
|
|
136
|
+
return joinDisplayLines(lines) + ownTrailingLineEnding(raw);
|
|
128
137
|
}
|
|
138
|
+
const mathBlockWrite = {
|
|
139
|
+
normalize: normalizeMathBlockRaw,
|
|
140
|
+
// A restored closer line goes after every written byte; only the one-line form's closer lands
|
|
141
|
+
// mid-write, at the end of line 0.
|
|
142
|
+
mapOffset: (raw, offset) => {
|
|
143
|
+
const { text } = displayLines(raw)[0];
|
|
144
|
+
const closesLineZero = text.startsWith(BLOCK_FENCE) && text !== BLOCK_FENCE && !isBlockMathOpener(text);
|
|
145
|
+
return closesLineZero && offset > text.length ? offset + BLOCK_FENCE.length : offset;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
129
148
|
// ── Block `$$…$$` display math ─────────────────────────────────────────────────
|
|
130
149
|
const BLOCK_FENCE = '$$';
|
|
131
150
|
/** The length ≥ 4 test keeps the open/close pair disjoint; anything else `$$`-prefixed
|
|
@@ -139,17 +158,21 @@ function isBlockMathOpener(text) {
|
|
|
139
158
|
}
|
|
140
159
|
export function registerMathBlock() {
|
|
141
160
|
const mathBlock = declarePluginKind(MATH_BLOCK);
|
|
142
|
-
// A source
|
|
143
|
-
// so a raw built from the exact fence bytes round-trips byte
|
|
161
|
+
// A block that holds its own source, like `fencedCode`: `serialize` re-emits
|
|
162
|
+
// `leadingTrivia + raw`, so a raw built from the exact fence bytes round-trips byte for byte.
|
|
144
163
|
registerBlockKind(mathBlock, {
|
|
164
|
+
label: 'Math block',
|
|
165
|
+
// A formula's source makes a poor label on the drag ghost.
|
|
166
|
+
dragLabel: 'Equation',
|
|
145
167
|
mergeRole: 'not-mergeable',
|
|
146
168
|
editable: true,
|
|
147
169
|
supportsInline: false,
|
|
148
|
-
// The
|
|
149
|
-
//
|
|
170
|
+
// The open source takes Enter as a literal newline and never splits, so neither edge
|
|
171
|
+
// can grow a neighbouring block.
|
|
150
172
|
gapEdges: 'both',
|
|
151
173
|
conformanceFixture: '$$\nx^2\n$$\n',
|
|
152
174
|
caretTargetAtPoint: mathCaretAtPoint,
|
|
175
|
+
rawWrite: mathBlockWrite,
|
|
153
176
|
closure: simpleLeafClosure({
|
|
154
177
|
focus: {
|
|
155
178
|
mode: 'implemented',
|
|
@@ -171,7 +194,7 @@ export function registerMathBlock() {
|
|
|
171
194
|
})
|
|
172
195
|
});
|
|
173
196
|
registerBlockOpener(mathBlock, {
|
|
174
|
-
// `$$` collides with no built-in matcher, so this
|
|
197
|
+
// `$$` collides with no built-in matcher, so this number only keeps it from tying.
|
|
175
198
|
priority: OPENER_PRIORITIES.fencedCode + 5,
|
|
176
199
|
interruptsParagraph: isBlockMathOpener,
|
|
177
200
|
tryOpen(ctx) {
|
|
@@ -201,26 +224,24 @@ export function registerMathBlock() {
|
|
|
201
224
|
});
|
|
202
225
|
// The open/close pair needs its lines adjacent, which Enter alone can never type.
|
|
203
226
|
registerMathBlockCompleter(mathBlock);
|
|
204
|
-
//
|
|
227
|
+
// Registered together so one install adds both forms, as admonitions and alerts do.
|
|
205
228
|
registerMathFence();
|
|
206
229
|
}
|
|
207
230
|
// ── Fenced ```math display math ─────────────────────────────────────────────────
|
|
208
|
-
// GitHub's third math form: a
|
|
231
|
+
// GitHub's third math form: a block holding its own source, like the `$$` block, rendered by
|
|
209
232
|
// the same component.
|
|
210
|
-
const
|
|
211
|
-
function matchMathFence(text) {
|
|
212
|
-
const fence = matchFenceOpen(text);
|
|
213
|
-
return fence && fence.info.split(/\s+/)[0] === FENCE_INFO_TOKEN ? fence : null;
|
|
214
|
-
}
|
|
233
|
+
const matchMathFence = matchFenceInfo('math');
|
|
215
234
|
export function registerMathFence() {
|
|
216
235
|
const mathFence = declarePluginKind(MATH_FENCE);
|
|
217
236
|
registerBlockKind(mathFence, {
|
|
237
|
+
label: 'Math block',
|
|
218
238
|
mergeRole: 'not-mergeable',
|
|
219
239
|
editable: true,
|
|
220
240
|
supportsInline: false,
|
|
221
241
|
gapEdges: 'both',
|
|
222
242
|
caretTargetAtPoint: mathCaretAtPoint,
|
|
223
243
|
conformanceFixture: '```math\nx^2\n```\n',
|
|
244
|
+
rawWrite: fenceRawWrite(fenceShapeOfRaw),
|
|
224
245
|
closure: simpleLeafClosure({
|
|
225
246
|
focus: {
|
|
226
247
|
mode: 'implemented',
|
|
@@ -244,31 +265,21 @@ export function registerMathFence() {
|
|
|
244
265
|
})
|
|
245
266
|
});
|
|
246
267
|
registerBlockOpener(mathFence, {
|
|
247
|
-
// `fencedCode` accepts every fence, ```math included, so this
|
|
248
|
-
//
|
|
268
|
+
// `fencedCode` accepts every fence, ```math included, so this has to be tried before
|
|
269
|
+
// it, at a priority of its own just below mermaid's.
|
|
249
270
|
priority: OPENER_PRIORITIES.fencedCode - 4,
|
|
250
271
|
interruptsParagraph: (line) => matchMathFence(line) !== null,
|
|
251
272
|
tryOpen(ctx) {
|
|
252
273
|
const fence = matchMathFence(ctx.line.text);
|
|
253
274
|
if (!fence)
|
|
254
275
|
return null;
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
break;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
// Unterminated declines so the built-in fencedCode claims it as a plain
|
|
263
|
-
// `math` code block, matching the sibling `$$` block.
|
|
264
|
-
if (closeIdx === -1)
|
|
276
|
+
const scan = scanFence(ctx, fence);
|
|
277
|
+
// An unterminated fence backs out, so the built-in fencedCode takes it as a plain
|
|
278
|
+
// `math` code block, matching the `$$` block.
|
|
279
|
+
if (scan.closer === -1)
|
|
265
280
|
return null;
|
|
266
|
-
const
|
|
267
|
-
|
|
268
|
-
.map((l) => l.raw)
|
|
269
|
-
.join('');
|
|
270
|
-
const node = { kind: mathFence, leadingTrivia: ctx.leadingTrivia, raw };
|
|
271
|
-
return { node, consumed: closeIdx + 1 - ctx.index };
|
|
281
|
+
const node = { kind: mathFence, leadingTrivia: ctx.leadingTrivia, raw: scan.raw };
|
|
282
|
+
return { node, consumed: scan.consumed };
|
|
272
283
|
}
|
|
273
284
|
});
|
|
274
285
|
}
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { type AnyBlockKind, type CompletionResult } from '../../plugin';
|
|
7
7
|
/** Exactly the fence and nothing else: `$$x$$` is already a whole block and `$$ x` opens no
|
|
8
|
-
* multi-line form, so neither is
|
|
8
|
+
* multi-line form, so neither is an attempt at the pair this completes. */
|
|
9
9
|
export declare function tryCompleteMathBlock(line: string): CompletionResult | null;
|
|
10
10
|
export declare function registerMathBlockCompleter(kind: AnyBlockKind): void;
|
|
@@ -3,20 +3,17 @@
|
|
|
3
3
|
* the closer, with the caret on the body. Registered beside the kind, so with no extension loaded
|
|
4
4
|
* `$$` plus Enter still splits exactly as bare GFM does.
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { registerBlockCompleter, trimWhitespace } from '../../plugin';
|
|
7
7
|
const BLOCK_FENCE = '$$';
|
|
8
8
|
/** Exactly the fence and nothing else: `$$x$$` is already a whole block and `$$ x` opens no
|
|
9
|
-
* multi-line form, so neither is
|
|
9
|
+
* multi-line form, so neither is an attempt at the pair this completes. */
|
|
10
10
|
export function tryCompleteMathBlock(line) {
|
|
11
|
-
if (line
|
|
11
|
+
if (trimWhitespace(line) !== BLOCK_FENCE)
|
|
12
12
|
return null;
|
|
13
13
|
return { lines: [BLOCK_FENCE, '', BLOCK_FENCE], caret: { path: [], line: 1, column: 0 } };
|
|
14
14
|
}
|
|
15
15
|
export function registerMathBlockCompleter(kind) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
// On type as well as at Enter: a lone `$$` can only be the pair's opener, so the block forms
|
|
19
|
-
// as the second `$` lands — the way a typed ` ``` ` is a fence at once — with the caret on
|
|
20
|
-
// the body line. The one-line `$$x$$` form is still reachable by typing into that body.
|
|
16
|
+
// On typing as well as on Enter: a lone `$$` can only be the pair's opener, so the block
|
|
17
|
+
// forms as the second `$` is typed, the way a typed ` ``` ` becomes a fence at once.
|
|
21
18
|
registerBlockCompleter(kind, { tryComplete: tryCompleteMathBlock, onType: true });
|
|
22
19
|
}
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* How a `$$` block lays out its source and preview while it is being edited. `split` (side by
|
|
3
3
|
* side) is the default because it moves the page least; `stacked` suits long equations; `source`
|
|
4
|
-
* shows no preview. A host picks the default through `latexPlugin({ blockLayout })
|
|
5
|
-
* block's own toggle
|
|
4
|
+
* shows no preview. A host picks the default through `latexPlugin({ blockLayout })` or an
|
|
5
|
+
* editor's `{ plugin, options }` entry, and the block's own toggle cycles from there.
|
|
6
6
|
*/
|
|
7
7
|
export type MathBlockLayout = 'split' | 'stacked' | 'source';
|
|
8
8
|
export declare const MATH_BLOCK_LAYOUTS: readonly MathBlockLayout[];
|
|
9
9
|
export declare function isMathBlockLayout(value: unknown): value is MathBlockLayout;
|
|
10
|
-
/**
|
|
11
|
-
* The starting layout: this editor's per-instance plugin options first (`{ plugin, options:
|
|
12
|
-
* { blockLayout } }`), then the factory's own default (`latexPlugin({ blockLayout })`), then
|
|
13
|
-
* `split`. An unknown value falls through rather than throwing.
|
|
14
|
-
*/
|
|
15
|
-
export declare function resolveDefaultLayout(options: unknown, fallback?: MathBlockLayout): MathBlockLayout;
|
|
@@ -2,12 +2,3 @@ export const MATH_BLOCK_LAYOUTS = ['split', 'stacked', 'source'];
|
|
|
2
2
|
export function isMathBlockLayout(value) {
|
|
3
3
|
return MATH_BLOCK_LAYOUTS.includes(value);
|
|
4
4
|
}
|
|
5
|
-
/**
|
|
6
|
-
* The starting layout: this editor's per-instance plugin options first (`{ plugin, options:
|
|
7
|
-
* { blockLayout } }`), then the factory's own default (`latexPlugin({ blockLayout })`), then
|
|
8
|
-
* `split`. An unknown value falls through rather than throwing.
|
|
9
|
-
*/
|
|
10
|
-
export function resolveDefaultLayout(options, fallback = 'split') {
|
|
11
|
-
const declared = options?.blockLayout;
|
|
12
|
-
return isMathBlockLayout(declared) ? declared : fallback;
|
|
13
|
-
}
|
|
@@ -1,26 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Where the math renderer is plugged in: `latexPlugin({ renderer })` sets it at install time, so
|
|
3
|
+
* the plugin's own code never imports KaTeX. Blocks and widgets render through `mathSlot`
|
|
4
|
+
* because their props carry no renderer; one cache for the whole document means a repeated
|
|
5
|
+
* formula renders once per theme.
|
|
6
6
|
*/
|
|
7
|
+
/** `theme` is for an adapter that draws its own colors; one written against `{ display }` alone
|
|
8
|
+
* stays assignable. */
|
|
7
9
|
export type MathRenderer = (source: string, opts: {
|
|
8
10
|
display: boolean;
|
|
9
|
-
|
|
11
|
+
theme: string;
|
|
12
|
+
}) => MathRender;
|
|
13
|
+
export interface MathRender {
|
|
10
14
|
dom: HTMLElement;
|
|
11
15
|
error?: string;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export declare function
|
|
20
|
-
dom: HTMLElement;
|
|
21
|
-
error?: string;
|
|
22
|
-
};
|
|
23
|
-
export declare function renderDisplayMath(source: string): {
|
|
24
|
-
dom: HTMLElement;
|
|
25
|
-
error?: string;
|
|
26
|
-
};
|
|
16
|
+
}
|
|
17
|
+
export declare const mathSlot: import("../../plugin").RendererSlot<{
|
|
18
|
+
source: string;
|
|
19
|
+
display: boolean;
|
|
20
|
+
}, MathRender>;
|
|
21
|
+
/** A formula the renderer rejected: its typed source in the error color, with the parser's
|
|
22
|
+
* message on hover. */
|
|
23
|
+
export declare function mathErrorNode(source: string, message: string): HTMLElement;
|
|
@@ -1,42 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Where the math renderer is plugged in: `latexPlugin({ renderer })` sets it at install time, so
|
|
3
|
+
* the plugin's own code never imports KaTeX. Blocks and widgets render through `mathSlot`
|
|
4
|
+
* because their props carry no renderer; one cache for the whole document means a repeated
|
|
5
|
+
* formula renders once per theme.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
cap: MEMO_CAP,
|
|
17
|
-
cloneOnRead: (entry) => ({ dom: entry.dom.cloneNode(true), error: entry.error })
|
|
18
|
-
});
|
|
19
|
-
return (source, opts) => memo(`${source}\x00${opts.display}`, () => inner(source, opts));
|
|
20
|
-
}
|
|
21
|
-
// ── Injection seam ──────────────────────────────────────────────────────────────
|
|
22
|
-
// Deliberately no default engine: the core must not import one, and the plugin's
|
|
23
|
-
// required `renderer` option guarantees this is set before any widget mounts.
|
|
24
|
-
let activeRenderer = null;
|
|
25
|
-
export function setMathRenderer(renderer) {
|
|
26
|
-
activeRenderer = createMemoizedRenderer(renderer);
|
|
27
|
-
}
|
|
28
|
-
export function renderInlineMath(source) {
|
|
29
|
-
return render(source, false);
|
|
30
|
-
}
|
|
31
|
-
export function renderDisplayMath(source) {
|
|
32
|
-
return render(source, true);
|
|
33
|
-
}
|
|
34
|
-
function render(source, display) {
|
|
35
|
-
if (!activeRenderer) {
|
|
36
|
-
const dom = document.createElement('span');
|
|
37
|
-
dom.className = 'math-error';
|
|
38
|
-
dom.textContent = 'Math error: renderer not configured';
|
|
39
|
-
return { dom, error: 'renderer not configured' };
|
|
7
|
+
import { createRendererSlot, renderSourceFallback } from '../../plugin';
|
|
8
|
+
export const mathSlot = createRendererSlot({
|
|
9
|
+
key: ({ source, display }) => `${display}\0${source}`,
|
|
10
|
+
// A cached node can sit in one place only, so every caller mounts its own copy.
|
|
11
|
+
cloneOnRead: ({ dom, error }) => ({ dom: dom.cloneNode(true), error }),
|
|
12
|
+
missing: ({ source }) => ({ dom: renderSourceFallback(source, 'Math renderer not configured') }),
|
|
13
|
+
failed: ({ source }, error) => {
|
|
14
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
15
|
+
return { dom: mathErrorNode(source, message), error: message };
|
|
40
16
|
}
|
|
41
|
-
|
|
17
|
+
});
|
|
18
|
+
/** A formula the renderer rejected: its typed source in the error color, with the parser's
|
|
19
|
+
* message on hover. */
|
|
20
|
+
export function mathErrorNode(source, message) {
|
|
21
|
+
const dom = renderSourceFallback(source, message);
|
|
22
|
+
dom.className = 'math-error';
|
|
23
|
+
dom.style.color = 'var(--color-error, #d03025)';
|
|
24
|
+
return dom;
|
|
42
25
|
}
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Where the body sits inside the block's source. The fence lines
|
|
3
|
-
* a point measured against the rendered equation
|
|
2
|
+
* Where the body sits inside the block's source. The fence lines paint no glyphs of their own,
|
|
3
|
+
* so a point measured against the rendered equation can only name a place inside this span.
|
|
4
4
|
*/
|
|
5
5
|
export declare function mathBodySpan(text: string): {
|
|
6
6
|
start: number;
|
|
7
7
|
end: number;
|
|
8
8
|
};
|
|
9
|
-
/**
|
|
10
|
-
*
|
|
11
|
-
* for a caret to sit once the fence lines hide, and Backspace has no byte it could mean. The
|
|
12
|
-
* completion every such block takes: opener, one empty body line, closer, caret on that line,
|
|
13
|
-
* rebuilt from its OWN delimiters. A block that has a body line, blank or not, is left alone.
|
|
14
|
-
*/
|
|
9
|
+
/** A block with no body line (`$$$$`, `$$\n$$`) has no caret position once the fence lines hide,
|
|
10
|
+
* so it gains one empty body line with the caret on it. */
|
|
15
11
|
export declare function completeBareMathSource(text: string): {
|
|
16
12
|
text: string;
|
|
17
13
|
caret: number;
|
|
@@ -1,103 +1,58 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The block form's source as DOM,
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* The block form's source as DOM, drawn the way a code block draws its own: the fence lines as
|
|
3
|
+
* markers the marker-hiding modes collapse, the body as highlighted LaTeX tokens. It emits exactly
|
|
4
|
+
* the source's text, so the DOM-to-offset traversal stays exact (G1.28). Anything not shaped like
|
|
5
|
+
* a fence paints as plain tokens.
|
|
6
6
|
*/
|
|
7
|
-
import { highlightCode,
|
|
7
|
+
import { displayLines, fenceBodyAsDrawn, highlightCode, isBlankText, renderFencedSource, sliceFencedSource } from '../../plugin';
|
|
8
8
|
const FENCE = '$$';
|
|
9
9
|
const unsliced = (text) => ({ opener: '', body: text, closer: '' });
|
|
10
|
-
/** Both block forms are an opener line, a body and a closer line
|
|
11
|
-
*
|
|
10
|
+
/** Both block forms are an opener line, a body and a closer line. GitHub's ```math reads as a code
|
|
11
|
+
* fence does; the `$$` form closes on a line that is exactly `$$`, or on line 0 itself. */
|
|
12
12
|
function sliceMathSource(text) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
if (text.slice(0, firstNewline) !== FENCE)
|
|
22
|
-
return unsliced(text);
|
|
23
|
-
return sliceFenceLines(text, firstNewline, (line) => line === FENCE);
|
|
13
|
+
if (!text.startsWith(FENCE))
|
|
14
|
+
return sliceFencedSource(text) ?? unsliced(text);
|
|
15
|
+
const firstBreak = text.indexOf('\n');
|
|
16
|
+
if (firstBreak === -1) {
|
|
17
|
+
return text.length >= 4 && text.endsWith(FENCE)
|
|
18
|
+
? { opener: FENCE, body: text.slice(2, -2), closer: FENCE }
|
|
19
|
+
: unsliced(text);
|
|
24
20
|
}
|
|
25
|
-
if (
|
|
21
|
+
if (displayLines(text)[0].text !== FENCE)
|
|
26
22
|
return unsliced(text);
|
|
27
|
-
|
|
28
|
-
// that length or longer.
|
|
29
|
-
const fence = matchFenceOpen(text.slice(0, firstNewline));
|
|
30
|
-
if (!fence)
|
|
31
|
-
return unsliced(text);
|
|
32
|
-
return sliceFenceLines(text, firstNewline, (line) => matchFenceClose(line, fence.marker, fence.length));
|
|
33
|
-
}
|
|
34
|
-
function sliceFenceLines(text, firstNewline, isCloser) {
|
|
35
|
-
const opener = text.slice(0, firstNewline + 1);
|
|
23
|
+
const opener = text.slice(0, firstBreak + 1);
|
|
36
24
|
const rest = text.slice(opener.length);
|
|
37
|
-
const
|
|
38
|
-
const lastLine =
|
|
39
|
-
if (
|
|
25
|
+
const lastBreak = rest.lastIndexOf('\n');
|
|
26
|
+
const lastLine = rest.slice(lastBreak + 1);
|
|
27
|
+
if (lastLine !== FENCE)
|
|
40
28
|
return { opener, body: rest, closer: '' };
|
|
41
|
-
|
|
42
|
-
return { opener, body: '', closer: lastLine };
|
|
43
|
-
// The newline before the closer belongs to the closer's line (the code block's rule), so
|
|
44
|
-
// collapsing that line leaves no blank line at the box's edge — unless the body is blank,
|
|
45
|
-
// where that newline IS the one line the caret can sit on.
|
|
46
|
-
const bodyWithEnding = rest.slice(0, lastNewline + 1);
|
|
47
|
-
if (!/\S/.test(bodyWithEnding))
|
|
48
|
-
return { opener, body: bodyWithEnding, closer: lastLine };
|
|
49
|
-
return { opener, body: rest.slice(0, lastNewline), closer: rest.slice(lastNewline) };
|
|
50
|
-
}
|
|
51
|
-
function fenceLine(text) {
|
|
52
|
-
const line = document.createElement('span');
|
|
53
|
-
line.className = 'md-fence-line';
|
|
54
|
-
const marker = document.createElement('span');
|
|
55
|
-
marker.className = 'md-marker md-fence';
|
|
56
|
-
marker.textContent = text.replace(/\n$/, '').replace(/^\n/, '');
|
|
57
|
-
if (text.startsWith('\n'))
|
|
58
|
-
line.appendChild(document.createTextNode('\n'));
|
|
59
|
-
line.appendChild(marker);
|
|
60
|
-
if (text.endsWith('\n'))
|
|
61
|
-
line.appendChild(document.createTextNode('\n'));
|
|
62
|
-
return line;
|
|
29
|
+
return { opener, body: rest.slice(0, lastBreak + 1), closer: lastLine };
|
|
63
30
|
}
|
|
64
31
|
/**
|
|
65
|
-
* Where the body sits inside the block's source. The fence lines
|
|
66
|
-
* a point measured against the rendered equation
|
|
32
|
+
* Where the body sits inside the block's source. The fence lines paint no glyphs of their own,
|
|
33
|
+
* so a point measured against the rendered equation can only name a place inside this span.
|
|
67
34
|
*/
|
|
68
35
|
export function mathBodySpan(text) {
|
|
69
|
-
const
|
|
70
|
-
|
|
36
|
+
const source = sliceMathSource(text);
|
|
37
|
+
const start = source.opener.length;
|
|
38
|
+
return { start, end: start + fenceBodyAsDrawn(source).length };
|
|
71
39
|
}
|
|
72
|
-
/**
|
|
73
|
-
*
|
|
74
|
-
* for a caret to sit once the fence lines hide, and Backspace has no byte it could mean. The
|
|
75
|
-
* completion every such block takes: opener, one empty body line, closer, caret on that line,
|
|
76
|
-
* rebuilt from its OWN delimiters. A block that has a body line, blank or not, is left alone.
|
|
77
|
-
*/
|
|
40
|
+
/** A block with no body line (`$$$$`, `$$\n$$`) has no caret position once the fence lines hide,
|
|
41
|
+
* so it gains one empty body line with the caret on it. */
|
|
78
42
|
export function completeBareMathSource(text) {
|
|
79
43
|
const { opener, body, closer } = sliceMathSource(text);
|
|
80
44
|
if (!opener || !closer)
|
|
81
45
|
return null;
|
|
82
|
-
if (body.includes('\n') || body
|
|
46
|
+
if (body.includes('\n') || !isBlankText(body))
|
|
83
47
|
return null;
|
|
84
|
-
|
|
85
|
-
|
|
48
|
+
// A one-line `$$$$` has no ending of its own to repeat.
|
|
49
|
+
const [openerLine] = displayLines(opener);
|
|
50
|
+
const ending = openerLine.ending || '\n';
|
|
51
|
+
return {
|
|
52
|
+
text: openerLine.text + ending + ending + closer,
|
|
53
|
+
caret: openerLine.text.length + ending.length
|
|
54
|
+
};
|
|
86
55
|
}
|
|
87
56
|
export function renderMathSource(text) {
|
|
88
|
-
|
|
89
|
-
const frag = document.createDocumentFragment();
|
|
90
|
-
if (opener)
|
|
91
|
-
frag.appendChild(fenceLine(opener));
|
|
92
|
-
frag.appendChild(highlightCode(body, 'latex'));
|
|
93
|
-
// An empty last body line has only the hidden closer after it; the anchor gives the caret
|
|
94
|
-
// that line (see `code-renderer.ts`).
|
|
95
|
-
if (closer.startsWith('\n') && body.endsWith('\n')) {
|
|
96
|
-
const anchor = document.createElement('br');
|
|
97
|
-
anchor.dataset.caretAnchor = 'closer';
|
|
98
|
-
frag.appendChild(anchor);
|
|
99
|
-
}
|
|
100
|
-
if (closer)
|
|
101
|
-
frag.appendChild(fenceLine(closer));
|
|
102
|
-
return frag;
|
|
57
|
+
return renderFencedSource(sliceMathSource(text), (body) => highlightCode(body, 'latex'));
|
|
103
58
|
}
|