@voithos-labs/aragonite 0.10.1
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/LICENSE +661 -0
- package/README.md +365 -0
- package/THIRD-PARTY-NOTICES.md +102 -0
- package/dist/a11y-strings.d.ts +46 -0
- package/dist/a11y-strings.js +62 -0
- package/dist/action-contracts.d.ts +301 -0
- package/dist/action-contracts.js +5 -0
- package/dist/active-editor.d.ts +16 -0
- package/dist/active-editor.js +67 -0
- package/dist/ambient/ambient-cursor.d.ts +41 -0
- package/dist/ambient/ambient-cursor.js +120 -0
- package/dist/ambient/ambient-dom.d.ts +9 -0
- package/dist/ambient/ambient-dom.js +102 -0
- package/dist/assert.d.ts +6 -0
- package/dist/assert.js +17 -0
- package/dist/block-component.d.ts +274 -0
- package/dist/block-component.js +43 -0
- package/dist/block-id.d.ts +14 -0
- package/dist/block-id.js +34 -0
- package/dist/bounded-memo.d.ts +14 -0
- package/dist/bounded-memo.js +32 -0
- package/dist/components/BlockDragHandle.svelte +66 -0
- package/dist/components/BlockDragHandle.svelte.d.ts +18 -0
- package/dist/components/BlockHost.svelte +328 -0
- package/dist/components/BlockHost.svelte.d.ts +15 -0
- package/dist/components/BlockList.svelte +114 -0
- package/dist/components/BlockList.svelte.d.ts +16 -0
- package/dist/components/DecorationOverlay.svelte +156 -0
- package/dist/components/DecorationOverlay.svelte.d.ts +14 -0
- package/dist/components/Editor.svelte +1849 -0
- package/dist/components/Editor.svelte.d.ts +49 -0
- package/dist/components/GapCaret.svelte +226 -0
- package/dist/components/GapCaret.svelte.d.ts +9 -0
- package/dist/components/SearchBar.svelte +243 -0
- package/dist/components/SearchBar.svelte.d.ts +7 -0
- package/dist/components/SelectionOverlay.svelte +171 -0
- package/dist/components/SelectionOverlay.svelte.d.ts +14 -0
- package/dist/components/block-content-selector.d.ts +12 -0
- package/dist/components/block-content-selector.js +12 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +32 -0
- package/dist/components/blocks/BlockquoteBlock.svelte.d.ts +11 -0
- package/dist/components/blocks/ThematicBreakBlock.svelte +156 -0
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +17 -0
- package/dist/components/blocks/code/CodeBlock.svelte +726 -0
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +23 -0
- package/dist/components/blocks/code/CodeLanguageChip.svelte +127 -0
- package/dist/components/blocks/code/CodeLanguageChip.svelte.d.ts +14 -0
- package/dist/components/blocks/code/code-beforeinput.d.ts +30 -0
- package/dist/components/blocks/code/code-beforeinput.js +40 -0
- package/dist/components/blocks/code/code-bootstrap.d.ts +8 -0
- package/dist/components/blocks/code/code-bootstrap.js +54 -0
- package/dist/components/blocks/code/code-editing.d.ts +28 -0
- package/dist/components/blocks/code/code-editing.js +79 -0
- package/dist/components/blocks/code/code-enter.d.ts +22 -0
- package/dist/components/blocks/code/code-enter.js +19 -0
- package/dist/components/blocks/code/code-fence-boundary.d.ts +77 -0
- package/dist/components/blocks/code/code-fence-boundary.js +169 -0
- package/dist/components/blocks/code/code-fence-exit.d.ts +24 -0
- package/dist/components/blocks/code/code-fence-exit.js +36 -0
- package/dist/components/blocks/code/code-indent.d.ts +14 -0
- package/dist/components/blocks/code/code-indent.js +87 -0
- package/dist/components/blocks/code/code-languages.d.ts +15 -0
- package/dist/components/blocks/code/code-languages.js +30 -0
- package/dist/components/blocks/code/code-paste-surface.d.ts +6 -0
- package/dist/components/blocks/code/code-paste-surface.js +29 -0
- package/dist/components/blocks/code/code-paste.d.ts +24 -0
- package/dist/components/blocks/code/code-paste.js +21 -0
- package/dist/components/blocks/code/code-renderer.d.ts +18 -0
- package/dist/components/blocks/code/code-renderer.js +249 -0
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +51 -0
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte.d.ts +11 -0
- package/dist/components/blocks/directive/activate-directives.d.ts +7 -0
- package/dist/components/blocks/directive/activate-directives.js +23 -0
- package/dist/components/blocks/editable-leaf.d.ts +126 -0
- package/dist/components/blocks/editable-leaf.js +410 -0
- package/dist/components/blocks/editable-surface.d.ts +209 -0
- package/dist/components/blocks/editable-surface.js +331 -0
- package/dist/components/blocks/list/ListBlock.svelte +162 -0
- package/dist/components/blocks/list/ListBlock.svelte.d.ts +11 -0
- package/dist/components/blocks/list/ListItemBlock.svelte +324 -0
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +14 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +3 -0
- package/dist/components/blocks/list/task-checkbox.js +33 -0
- package/dist/components/blocks/plain-text-backend.d.ts +21 -0
- package/dist/components/blocks/plain-text-backend.js +47 -0
- package/dist/components/blocks/surface-wiring.svelte.d.ts +18 -0
- package/dist/components/blocks/surface-wiring.svelte.js +68 -0
- package/dist/components/blocks/table/TableActionMenu.svelte +267 -0
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +15 -0
- package/dist/components/blocks/table/TableBlock.svelte +765 -0
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +30 -0
- package/dist/components/blocks/table/TableCellBlock.svelte +1075 -0
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +30 -0
- package/dist/components/blocks/table/TableGrip.svelte +91 -0
- package/dist/components/blocks/table/TableGrip.svelte.d.ts +8 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +233 -0
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +34 -0
- package/dist/components/blocks/table/cell-clipboard.d.ts +23 -0
- package/dist/components/blocks/table/cell-clipboard.js +34 -0
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +37 -0
- package/dist/components/blocks/table/cell-keydown-plan.js +66 -0
- package/dist/components/blocks/table/cell-pointer.d.ts +58 -0
- package/dist/components/blocks/table/cell-pointer.js +153 -0
- package/dist/components/blocks/table/cell-render.d.ts +51 -0
- package/dist/components/blocks/table/cell-render.js +98 -0
- package/dist/components/blocks/table/cell-table-commands.d.ts +12 -0
- package/dist/components/blocks/table/cell-table-commands.js +21 -0
- package/dist/components/blocks/table/cell-x-mapping.d.ts +6 -0
- package/dist/components/blocks/table/cell-x-mapping.js +16 -0
- package/dist/components/blocks/table/selected-cells.d.ts +19 -0
- package/dist/components/blocks/table/selected-cells.js +35 -0
- package/dist/components/blocks/table/table-caret-at-point.d.ts +8 -0
- package/dist/components/blocks/table/table-caret-at-point.js +35 -0
- package/dist/components/blocks/table/table-cell-paste.d.ts +16 -0
- package/dist/components/blocks/table/table-cell-paste.js +75 -0
- package/dist/components/blocks/table/table-drag-hit-test.d.ts +5 -0
- package/dist/components/blocks/table/table-drag-hit-test.js +20 -0
- package/dist/components/blocks/table/table-drop-target.d.ts +1 -0
- package/dist/components/blocks/table/table-drop-target.js +16 -0
- package/dist/components/blocks/table/table-menu-model.d.ts +52 -0
- package/dist/components/blocks/table/table-menu-model.js +78 -0
- package/dist/components/blocks/table/table-navigation.d.ts +8 -0
- package/dist/components/blocks/table/table-navigation.js +22 -0
- package/dist/components/blocks/table/table-reorder-drag.d.ts +78 -0
- package/dist/components/blocks/table/table-reorder-drag.js +97 -0
- package/dist/components/blocks/text/TextEditableBlock.svelte +1012 -0
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +33 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +8 -0
- package/dist/components/blocks/text/click-snap-guard.js +19 -0
- package/dist/components/blocks/text/composition-seat.d.ts +50 -0
- package/dist/components/blocks/text/composition-seat.js +65 -0
- package/dist/components/blocks/text/construct-edge-delete.d.ts +47 -0
- package/dist/components/blocks/text/construct-edge-delete.js +164 -0
- package/dist/components/blocks/text/construct-reveal.d.ts +39 -0
- package/dist/components/blocks/text/construct-reveal.js +164 -0
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +91 -0
- package/dist/components/blocks/text/edge-policy-dispatch.js +457 -0
- package/dist/components/blocks/text/edge-seat.d.ts +42 -0
- package/dist/components/blocks/text/edge-seat.js +197 -0
- package/dist/components/blocks/text/hidden-suffix.d.ts +10 -0
- package/dist/components/blocks/text/hidden-suffix.js +15 -0
- package/dist/components/blocks/text/link-at-point.d.ts +33 -0
- package/dist/components/blocks/text/link-at-point.js +47 -0
- package/dist/components/blocks/text/link-source-bytes.d.ts +37 -0
- package/dist/components/blocks/text/link-source-bytes.js +161 -0
- package/dist/components/blocks/text/live-join-seam.d.ts +15 -0
- package/dist/components/blocks/text/live-join-seam.js +327 -0
- package/dist/components/blocks/text/live-selection-edit.d.ts +68 -0
- package/dist/components/blocks/text/live-selection-edit.js +120 -0
- package/dist/components/blocks/text/live-split-rebalance.d.ts +56 -0
- package/dist/components/blocks/text/live-split-rebalance.js +239 -0
- package/dist/components/blocks/text/marker-completion.d.ts +18 -0
- package/dist/components/blocks/text/marker-completion.js +29 -0
- package/dist/components/blocks/text/pending-mark-insert.d.ts +37 -0
- package/dist/components/blocks/text/pending-mark-insert.js +188 -0
- package/dist/components/blocks/text/screen-diff.d.ts +20 -0
- package/dist/components/blocks/text/screen-diff.js +39 -0
- package/dist/components/blocks/text/text-clipboard.d.ts +70 -0
- package/dist/components/blocks/text/text-clipboard.js +131 -0
- package/dist/components/blocks/text/text-keydown.d.ts +39 -0
- package/dist/components/blocks/text/text-keydown.js +80 -0
- package/dist/components/blocks/text/text-render.d.ts +67 -0
- package/dist/components/blocks/text/text-render.js +215 -0
- package/dist/components/blocks/text/widget-adjacency.d.ts +30 -0
- package/dist/components/blocks/text/widget-adjacency.js +68 -0
- package/dist/components/blocks/text/widget-interaction.d.ts +90 -0
- package/dist/components/blocks/text/widget-interaction.js +591 -0
- package/dist/components/blocks/widget-portal.d.ts +54 -0
- package/dist/components/blocks/widget-portal.js +136 -0
- package/dist/components/built-in-blocks.d.ts +7 -0
- package/dist/components/built-in-blocks.js +77 -0
- package/dist/components/editor-root-clipboard.d.ts +29 -0
- package/dist/components/editor-root-clipboard.js +105 -0
- package/dist/components/editor-root-keydown.d.ts +47 -0
- package/dist/components/editor-root-keydown.js +88 -0
- package/dist/components/editor-root-listeners.d.ts +44 -0
- package/dist/components/editor-root-listeners.js +112 -0
- package/dist/components/image/ImageOverlayHost.svelte +115 -0
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +20 -0
- package/dist/components/image/ImageProperties.svelte +153 -0
- package/dist/components/image/ImageProperties.svelte.d.ts +14 -0
- package/dist/components/image/ImageResizeHandles.svelte +188 -0
- package/dist/components/image/ImageResizeHandles.svelte.d.ts +10 -0
- package/dist/components/image/image-edit-commit.d.ts +38 -0
- package/dist/components/image/image-edit-commit.js +159 -0
- package/dist/components/image/image-resize.d.ts +11 -0
- package/dist/components/image/image-resize.js +38 -0
- package/dist/components/image/image-source-bytes.d.ts +15 -0
- package/dist/components/image/image-source-bytes.js +73 -0
- package/dist/components/image/image-widget-editing.d.ts +7 -0
- package/dist/components/image/image-widget-editing.js +41 -0
- package/dist/components/image/widget-dom.d.ts +11 -0
- package/dist/components/image/widget-dom.js +110 -0
- package/dist/components/image/widget-selection-state.svelte.d.ts +18 -0
- package/dist/components/image/widget-selection-state.svelte.js +26 -0
- package/dist/components/link-card/LinkCard.svelte +190 -0
- package/dist/components/link-card/LinkCard.svelte.d.ts +18 -0
- package/dist/components/link-card/LinkCardHost.svelte +181 -0
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +25 -0
- package/dist/components/link-card/link-card-commit.d.ts +50 -0
- package/dist/components/link-card/link-card-commit.js +134 -0
- package/dist/components/link-card/link-card-entry.d.ts +39 -0
- package/dist/components/link-card/link-card-entry.js +51 -0
- package/dist/components/link-card/link-card-state.svelte.d.ts +44 -0
- package/dist/components/link-card/link-card-state.svelte.js +46 -0
- package/dist/components/lrd-map-gate.d.ts +18 -0
- package/dist/components/lrd-map-gate.js +22 -0
- package/dist/components/paste-image-arm.d.ts +29 -0
- package/dist/components/paste-image-arm.js +61 -0
- package/dist/components/portal.d.ts +11 -0
- package/dist/components/portal.js +29 -0
- package/dist/core/directive/activate.d.ts +8 -0
- package/dist/core/directive/activate.js +25 -0
- package/dist/core/directive/container-opener.d.ts +7 -0
- package/dist/core/directive/container-opener.js +162 -0
- package/dist/core/directive/grammar.d.ts +50 -0
- package/dist/core/directive/grammar.js +88 -0
- package/dist/core/directive/kinds.d.ts +31 -0
- package/dist/core/directive/kinds.js +137 -0
- package/dist/core/directive/registry.d.ts +39 -0
- package/dist/core/directive/registry.js +49 -0
- package/dist/core/directive/text-recognizer.d.ts +8 -0
- package/dist/core/directive/text-recognizer.js +87 -0
- package/dist/core/escapable.d.ts +6 -0
- package/dist/core/escapable.js +6 -0
- package/dist/core/inline/backticks.d.ts +16 -0
- package/dist/core/inline/backticks.js +62 -0
- package/dist/core/inline/character-refs.d.ts +7 -0
- package/dist/core/inline/character-refs.js +70 -0
- package/dist/core/inline/destination-bytes.d.ts +7 -0
- package/dist/core/inline/destination-bytes.js +14 -0
- package/dist/core/inline/entity-widget.d.ts +11 -0
- package/dist/core/inline/entity-widget.js +21 -0
- package/dist/core/inline/format-toggle.d.ts +50 -0
- package/dist/core/inline/format-toggle.js +533 -0
- package/dist/core/inline/html-entities.d.ts +8 -0
- package/dist/core/inline/html-entities.js +2134 -0
- package/dist/core/inline/html-tag-grammar.d.ts +16 -0
- package/dist/core/inline/html-tag-grammar.js +58 -0
- package/dist/core/inline/image-dimensions.d.ts +6 -0
- package/dist/core/inline/image-dimensions.js +42 -0
- package/dist/core/inline/index.d.ts +42 -0
- package/dist/core/inline/index.js +77 -0
- package/dist/core/inline/inline-cache.d.ts +20 -0
- package/dist/core/inline/inline-cache.js +28 -0
- package/dist/core/inline/inline-widgets.d.ts +124 -0
- package/dist/core/inline/inline-widgets.js +131 -0
- package/dist/core/inline/link-reference-resolver.d.ts +21 -0
- package/dist/core/inline/link-reference-resolver.js +46 -0
- package/dist/core/inline/raw-html-widget.d.ts +10 -0
- package/dist/core/inline/raw-html-widget.js +22 -0
- package/dist/core/inline/scan/autolinks.d.ts +23 -0
- package/dist/core/inline/scan/autolinks.js +354 -0
- package/dist/core/inline/scan/brackets.d.ts +11 -0
- package/dist/core/inline/scan/brackets.js +284 -0
- package/dist/core/inline/scan/code-spans.d.ts +7 -0
- package/dist/core/inline/scan/code-spans.js +27 -0
- package/dist/core/inline/scan/emphasis.d.ts +10 -0
- package/dist/core/inline/scan/emphasis.js +276 -0
- package/dist/core/inline/scan/index.d.ts +7 -0
- package/dist/core/inline/scan/index.js +176 -0
- package/dist/core/inline/scan/plugin-syntax.d.ts +62 -0
- package/dist/core/inline/scan/plugin-syntax.js +150 -0
- package/dist/core/inline/scan/scan-state.d.ts +47 -0
- package/dist/core/inline/scan/scan-state.js +48 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +14 -0
- package/dist/core/inline/scan/simple-nodes.js +53 -0
- package/dist/core/inline/scan/url.d.ts +12 -0
- package/dist/core/inline/scan/url.js +82 -0
- package/dist/core/inline/transparency.d.ts +8 -0
- package/dist/core/inline/transparency.js +39 -0
- package/dist/core/inline/visibility.d.ts +81 -0
- package/dist/core/inline/visibility.js +144 -0
- package/dist/core/inline/walk.d.ts +14 -0
- package/dist/core/inline/walk.js +29 -0
- package/dist/core/inline-render.d.ts +48 -0
- package/dist/core/inline-render.js +322 -0
- package/dist/core/lines.d.ts +44 -0
- package/dist/core/lines.js +91 -0
- package/dist/core/node-views.d.ts +22 -0
- package/dist/core/node-views.js +8 -0
- package/dist/core/nodes.d.ts +297 -0
- package/dist/core/nodes.js +83 -0
- package/dist/core/parser.d.ts +68 -0
- package/dist/core/parser.js +189 -0
- package/dist/core/parsers/blockquote.d.ts +17 -0
- package/dist/core/parsers/blockquote.js +69 -0
- package/dist/core/parsers/built-in-openers.d.ts +8 -0
- package/dist/core/parsers/built-in-openers.js +124 -0
- package/dist/core/parsers/fence-syntax.d.ts +24 -0
- package/dist/core/parsers/fence-syntax.js +44 -0
- package/dist/core/parsers/fenced-code.d.ts +7 -0
- package/dist/core/parsers/fenced-code.js +29 -0
- package/dist/core/parsers/heading.d.ts +3 -0
- package/dist/core/parsers/heading.js +6 -0
- package/dist/core/parsers/html-block.d.ts +17 -0
- package/dist/core/parsers/html-block.js +94 -0
- package/dist/core/parsers/indented-code.d.ts +4 -0
- package/dist/core/parsers/indented-code.js +41 -0
- package/dist/core/parsers/link-reference.d.ts +7 -0
- package/dist/core/parsers/link-reference.js +152 -0
- package/dist/core/parsers/list.d.ts +19 -0
- package/dist/core/parsers/list.js +133 -0
- package/dist/core/parsers/paragraph.d.ts +10 -0
- package/dist/core/parsers/paragraph.js +42 -0
- package/dist/core/parsers/table-completion.d.ts +13 -0
- package/dist/core/parsers/table-completion.js +48 -0
- package/dist/core/parsers/table.d.ts +18 -0
- package/dist/core/parsers/table.js +110 -0
- package/dist/core/parsers/thematic-break.d.ts +1 -0
- package/dist/core/parsers/thematic-break.js +19 -0
- package/dist/core/serializer.d.ts +15 -0
- package/dist/core/serializer.js +11 -0
- package/dist/core/terminator-escalation.d.ts +8 -0
- package/dist/core/terminator-escalation.js +18 -0
- package/dist/core/url-policy.d.ts +14 -0
- package/dist/core/url-policy.js +44 -0
- package/dist/cursor/content-offsets.d.ts +29 -0
- package/dist/cursor/content-offsets.js +151 -0
- package/dist/cursor/coordinate-spaces.d.ts +65 -0
- package/dist/cursor/coordinate-spaces.js +66 -0
- package/dist/cursor/dom-walk.d.ts +18 -0
- package/dist/cursor/dom-walk.js +31 -0
- package/dist/cursor/edge-affinity.d.ts +44 -0
- package/dist/cursor/edge-affinity.js +60 -0
- package/dist/cursor/focused-caret.d.ts +10 -0
- package/dist/cursor/focused-caret.js +24 -0
- package/dist/cursor/height-model.d.ts +24 -0
- package/dist/cursor/height-model.js +72 -0
- package/dist/cursor/height-oracle.d.ts +24 -0
- package/dist/cursor/height-oracle.js +94 -0
- package/dist/cursor/overlay-rects.d.ts +8 -0
- package/dist/cursor/overlay-rects.js +19 -0
- package/dist/cursor/overlay-remeasure.d.ts +17 -0
- package/dist/cursor/overlay-remeasure.js +31 -0
- package/dist/cursor/pending-marks.d.ts +24 -0
- package/dist/cursor/pending-marks.js +36 -0
- package/dist/cursor/point-offset.d.ts +21 -0
- package/dist/cursor/point-offset.js +48 -0
- package/dist/cursor/reveal-anchor.d.ts +30 -0
- package/dist/cursor/reveal-anchor.js +31 -0
- package/dist/cursor/reveal-source.d.ts +35 -0
- package/dist/cursor/reveal-source.js +51 -0
- package/dist/cursor/scroll-ancestors.d.ts +28 -0
- package/dist/cursor/scroll-ancestors.js +89 -0
- package/dist/cursor/scrollport.d.ts +20 -0
- package/dist/cursor/scrollport.js +41 -0
- package/dist/cursor/sticky-column.d.ts +35 -0
- package/dist/cursor/sticky-column.js +64 -0
- package/dist/cursor/sticky-measure.d.ts +16 -0
- package/dist/cursor/sticky-measure.js +97 -0
- package/dist/cursor/typography-estimates.d.ts +21 -0
- package/dist/cursor/typography-estimates.js +21 -0
- package/dist/cursor/visual-lines.d.ts +25 -0
- package/dist/cursor/visual-lines.js +125 -0
- package/dist/cursor/widget-offset.d.ts +132 -0
- package/dist/cursor/widget-offset.js +543 -0
- package/dist/debug/diagnostics-report.d.ts +17 -0
- package/dist/debug/diagnostics-report.js +25 -0
- package/dist/debug/dump-tree.d.ts +6 -0
- package/dist/debug/dump-tree.js +114 -0
- package/dist/debug/inspect.d.ts +19 -0
- package/dist/debug/inspect.js +116 -0
- package/dist/debug/interaction-trace.d.ts +39 -0
- package/dist/debug/interaction-trace.js +105 -0
- package/dist/debug/operations-log.d.ts +14 -0
- package/dist/debug/operations-log.js +30 -0
- package/dist/decorations/buckets.d.ts +40 -0
- package/dist/decorations/buckets.js +87 -0
- package/dist/decorations/decoration-state.svelte.d.ts +20 -0
- package/dist/decorations/decoration-state.svelte.js +195 -0
- package/dist/decorations/island-dom.d.ts +35 -0
- package/dist/decorations/island-dom.js +148 -0
- package/dist/decorations/reserved-attrs.d.ts +12 -0
- package/dist/decorations/reserved-attrs.js +47 -0
- package/dist/decorations/types.d.ts +68 -0
- package/dist/decorations/types.js +5 -0
- package/dist/decorations/widget-dom.d.ts +15 -0
- package/dist/decorations/widget-dom.js +35 -0
- package/dist/dev-warn.d.ts +13 -0
- package/dist/dev-warn.js +28 -0
- package/dist/editor-actions/ancestry-folds.d.ts +32 -0
- package/dist/editor-actions/ancestry-folds.js +106 -0
- package/dist/editor-actions/block-edit-core.d.ts +29 -0
- package/dist/editor-actions/block-edit-core.js +277 -0
- package/dist/editor-actions/block-edit-scope.d.ts +79 -0
- package/dist/editor-actions/block-edit-scope.js +76 -0
- package/dist/editor-actions/block-edit.d.ts +8 -0
- package/dist/editor-actions/block-edit.js +111 -0
- package/dist/editor-actions/commit/history.d.ts +9 -0
- package/dist/editor-actions/commit/history.js +77 -0
- package/dist/editor-actions/commit/text-batch.d.ts +34 -0
- package/dist/editor-actions/commit/text-batch.js +61 -0
- package/dist/editor-actions/commit/undo-controller.d.ts +7 -0
- package/dist/editor-actions/commit/undo-controller.js +570 -0
- package/dist/editor-actions/container-block-component.d.ts +85 -0
- package/dist/editor-actions/container-block-component.js +228 -0
- package/dist/editor-actions/container-edit.d.ts +7 -0
- package/dist/editor-actions/container-edit.js +49 -0
- package/dist/editor-actions/container-exit-overrides.d.ts +16 -0
- package/dist/editor-actions/container-exit-overrides.js +38 -0
- package/dist/editor-actions/deps.d.ts +60 -0
- package/dist/editor-actions/deps.js +1 -0
- package/dist/editor-actions/enter-completion.d.ts +25 -0
- package/dist/editor-actions/enter-completion.js +76 -0
- package/dist/editor-actions/focus/focus-dispatch.d.ts +36 -0
- package/dist/editor-actions/focus/focus-dispatch.js +106 -0
- package/dist/editor-actions/focus/focus-landing.d.ts +7 -0
- package/dist/editor-actions/focus/focus-landing.js +39 -0
- package/dist/editor-actions/focus/focus.d.ts +7 -0
- package/dist/editor-actions/focus/focus.js +74 -0
- package/dist/editor-actions/index.d.ts +15 -0
- package/dist/editor-actions/index.js +19 -0
- package/dist/editor-actions/inline-range-commit.d.ts +20 -0
- package/dist/editor-actions/inline-range-commit.js +63 -0
- package/dist/editor-actions/list-context.d.ts +25 -0
- package/dist/editor-actions/list-context.js +285 -0
- package/dist/editor-actions/list-overrides.d.ts +13 -0
- package/dist/editor-actions/list-overrides.js +26 -0
- package/dist/editor-actions/merge-fallback.d.ts +19 -0
- package/dist/editor-actions/merge-fallback.js +27 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +65 -0
- package/dist/editor-actions/nested/nested-actions.js +59 -0
- package/dist/editor-actions/nested/nested-block-edit.d.ts +10 -0
- package/dist/editor-actions/nested/nested-block-edit.js +181 -0
- package/dist/editor-actions/nested/nested-focus.d.ts +9 -0
- package/dist/editor-actions/nested/nested-focus.js +30 -0
- package/dist/editor-actions/paste-coordinator.d.ts +4 -0
- package/dist/editor-actions/paste-coordinator.js +20 -0
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +25 -0
- package/dist/editor-actions/plugin/chrome-leaf.js +80 -0
- package/dist/editor-actions/plugin/container.d.ts +137 -0
- package/dist/editor-actions/plugin/container.js +351 -0
- package/dist/editor-actions/plugin/directive-container.d.ts +13 -0
- package/dist/editor-actions/plugin/directive-container.js +31 -0
- package/dist/editor-actions/reorder-action.d.ts +17 -0
- package/dist/editor-actions/reorder-action.js +104 -0
- package/dist/editor-actions/reorder-drag.d.ts +34 -0
- package/dist/editor-actions/reorder-drag.js +152 -0
- package/dist/editor-actions/replacement-focus.d.ts +27 -0
- package/dist/editor-actions/replacement-focus.js +60 -0
- package/dist/editor-actions/search-replace.d.ts +6 -0
- package/dist/editor-actions/search-replace.js +145 -0
- package/dist/editor-actions/table-context.d.ts +34 -0
- package/dist/editor-actions/table-context.js +292 -0
- package/dist/editor-actions/unwrap-strategies.d.ts +14 -0
- package/dist/editor-actions/unwrap-strategies.js +131 -0
- package/dist/editor-actions/whole-block-focus-surface.d.ts +51 -0
- package/dist/editor-actions/whole-block-focus-surface.js +171 -0
- package/dist/editor-events.d.ts +89 -0
- package/dist/editor-events.js +96 -0
- package/dist/editor-keys.d.ts +197 -0
- package/dist/editor-keys.js +40 -0
- package/dist/editor-props.d.ts +164 -0
- package/dist/editor-props.js +1 -0
- package/dist/editor-rects.d.ts +58 -0
- package/dist/editor-rects.js +114 -0
- package/dist/env.d.ts +12 -0
- package/dist/env.js +20 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +19 -0
- package/dist/invariants/commit-paths.d.ts +10 -0
- package/dist/invariants/commit-paths.js +25 -0
- package/dist/invariants/commit-scope.d.ts +9 -0
- package/dist/invariants/commit-scope.js +16 -0
- package/dist/invariants/context-keys.d.ts +7 -0
- package/dist/invariants/context-keys.js +14 -0
- package/dist/invariants/descriptor.d.ts +10 -0
- package/dist/invariants/descriptor.js +24 -0
- package/dist/invariants/inline-transitions.d.ts +23 -0
- package/dist/invariants/inline-transitions.js +52 -0
- package/dist/invariants/install.d.ts +36 -0
- package/dist/invariants/install.js +66 -0
- package/dist/invariants/landable-caret.d.ts +12 -0
- package/dist/invariants/landable-caret.js +31 -0
- package/dist/invariants/marker-css-parity.d.ts +10 -0
- package/dist/invariants/marker-css-parity.js +87 -0
- package/dist/invariants/node-shape.d.ts +44 -0
- package/dist/invariants/node-shape.js +258 -0
- package/dist/invariants/registry.d.ts +126 -0
- package/dist/invariants/registry.js +349 -0
- package/dist/invariants/render-fidelity.d.ts +8 -0
- package/dist/invariants/render-fidelity.js +33 -0
- package/dist/invariants/selection-endpoints.d.ts +19 -0
- package/dist/invariants/selection-endpoints.js +78 -0
- package/dist/invariants/single-node-sink.d.ts +9 -0
- package/dist/invariants/single-node-sink.js +16 -0
- package/dist/invariants/snapshot-integrity.d.ts +17 -0
- package/dist/invariants/snapshot-integrity.js +24 -0
- package/dist/invariants/split-landing.d.ts +8 -0
- package/dist/invariants/split-landing.js +15 -0
- package/dist/invariants/structural-descriptor.d.ts +21 -0
- package/dist/invariants/structural-descriptor.js +50 -0
- package/dist/perf/instruments.d.ts +49 -0
- package/dist/perf/instruments.js +154 -0
- package/dist/perf/use-mount-gauge.svelte.d.ts +1 -0
- package/dist/perf/use-mount-gauge.svelte.js +15 -0
- package/dist/plugin.d.ts +102 -0
- package/dist/plugin.js +156 -0
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +144 -0
- package/dist/plugins/admonitions/AdmonitionBlock.svelte.d.ts +11 -0
- package/dist/plugins/admonitions/admonition-kind.d.ts +8 -0
- package/dist/plugins/admonitions/admonition-kind.js +97 -0
- package/dist/plugins/admonitions/convert-document.d.ts +11 -0
- package/dist/plugins/admonitions/convert-document.js +39 -0
- package/dist/plugins/admonitions/gh-alert.d.ts +13 -0
- package/dist/plugins/admonitions/gh-alert.js +83 -0
- package/dist/plugins/admonitions/github-alert-kind.d.ts +12 -0
- package/dist/plugins/admonitions/github-alert-kind.js +125 -0
- package/dist/plugins/admonitions/index.d.ts +6 -0
- package/dist/plugins/admonitions/index.js +8 -0
- package/dist/plugins/admonitions/kinds.d.ts +26 -0
- package/dist/plugins/admonitions/kinds.js +18 -0
- package/dist/plugins/admonitions/register.d.ts +7 -0
- package/dist/plugins/admonitions/register.js +12 -0
- package/dist/plugins/details/DetailsBlock.svelte +129 -0
- package/dist/plugins/details/DetailsBlock.svelte.d.ts +11 -0
- package/dist/plugins/details/details-disclosure.svelte.d.ts +17 -0
- package/dist/plugins/details/details-disclosure.svelte.js +24 -0
- package/dist/plugins/details/details-kind.d.ts +25 -0
- package/dist/plugins/details/details-kind.js +237 -0
- package/dist/plugins/details/index.d.ts +2 -0
- package/dist/plugins/details/index.js +2 -0
- package/dist/plugins/details/register.d.ts +6 -0
- package/dist/plugins/details/register.js +15 -0
- package/dist/plugins/emoji/emoji-plugin.d.ts +2 -0
- package/dist/plugins/emoji/emoji-plugin.js +10 -0
- package/dist/plugins/emoji/emoji-recognizer.d.ts +18 -0
- package/dist/plugins/emoji/emoji-recognizer.js +63 -0
- package/dist/plugins/emoji/emoji-table.d.ts +1 -0
- package/dist/plugins/emoji/emoji-table.js +1919 -0
- package/dist/plugins/emoji/index.d.ts +3 -0
- package/dist/plugins/emoji/index.js +4 -0
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +103 -0
- package/dist/plugins/footnotes/FootnoteDefinition.svelte.d.ts +13 -0
- package/dist/plugins/footnotes/FootnoteReference.svelte +50 -0
- package/dist/plugins/footnotes/FootnoteReference.svelte.d.ts +4 -0
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +4 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +14 -0
- package/dist/plugins/footnotes/footnote-definition.js +147 -0
- package/dist/plugins/footnotes/footnote-lookup.d.ts +9 -0
- package/dist/plugins/footnotes/footnote-lookup.js +33 -0
- package/dist/plugins/footnotes/footnote-numbering.d.ts +23 -0
- package/dist/plugins/footnotes/footnote-numbering.js +78 -0
- package/dist/plugins/footnotes/footnote-reference.d.ts +7 -0
- package/dist/plugins/footnotes/footnote-reference.js +54 -0
- package/dist/plugins/footnotes/footnotes-plugin.d.ts +7 -0
- package/dist/plugins/footnotes/footnotes-plugin.js +17 -0
- package/dist/plugins/footnotes/index.d.ts +5 -0
- package/dist/plugins/footnotes/index.js +6 -0
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +17 -0
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +31 -0
- package/dist/plugins/highlight-occurrences/index.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/index.js +1 -0
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +26 -0
- package/dist/plugins/highlight-occurrences/occurrence-source.js +54 -0
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +33 -0
- package/dist/plugins/highlight-occurrences/occurrences.js +108 -0
- package/dist/plugins/latex/BlockMath.svelte +119 -0
- package/dist/plugins/latex/BlockMath.svelte.d.ts +21 -0
- package/dist/plugins/latex/MathInline.svelte +28 -0
- package/dist/plugins/latex/MathInline.svelte.d.ts +4 -0
- package/dist/plugins/latex/index.d.ts +3 -0
- package/dist/plugins/latex/index.js +4 -0
- package/dist/plugins/latex/latex-kind.d.ts +17 -0
- package/dist/plugins/latex/latex-kind.js +224 -0
- package/dist/plugins/latex/math-completion.d.ts +10 -0
- package/dist/plugins/latex/math-completion.js +19 -0
- package/dist/plugins/latex/math-renderer.d.ts +26 -0
- package/dist/plugins/latex/math-renderer.js +42 -0
- package/dist/plugins/latex/register.d.ts +10 -0
- package/dist/plugins/latex/register.js +23 -0
- package/dist/plugins/latex/renderer.d.ts +13 -0
- package/dist/plugins/latex/renderer.js +34 -0
- package/dist/plugins/mermaid/MermaidBlock.svelte +572 -0
- package/dist/plugins/mermaid/MermaidBlock.svelte.d.ts +11 -0
- package/dist/plugins/mermaid/index.d.ts +3 -0
- package/dist/plugins/mermaid/index.js +3 -0
- package/dist/plugins/mermaid/mermaid-kind.d.ts +38 -0
- package/dist/plugins/mermaid/mermaid-kind.js +176 -0
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +28 -0
- package/dist/plugins/mermaid/mermaid-renderer.js +35 -0
- package/dist/plugins/mermaid/register.d.ts +10 -0
- package/dist/plugins/mermaid/register.js +20 -0
- package/dist/plugins/mermaid/renderer.d.ts +11 -0
- package/dist/plugins/mermaid/renderer.js +53 -0
- package/dist/plugins/parrot/ParrotBlock.svelte +342 -0
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +21 -0
- package/dist/plugins/parrot/index.d.ts +1 -0
- package/dist/plugins/parrot/index.js +2 -0
- package/dist/plugins/parrot/parrot-plugin.d.ts +3 -0
- package/dist/plugins/parrot/parrot-plugin.js +49 -0
- package/dist/plugins/toc/TocBlock.svelte +218 -0
- package/dist/plugins/toc/TocBlock.svelte.d.ts +24 -0
- package/dist/plugins/toc/heading-outline.d.ts +28 -0
- package/dist/plugins/toc/heading-outline.js +65 -0
- package/dist/plugins/toc/index.d.ts +2 -0
- package/dist/plugins/toc/index.js +2 -0
- package/dist/plugins/toc/navigation-queue.d.ts +12 -0
- package/dist/plugins/toc/navigation-queue.js +21 -0
- package/dist/plugins/toc/toc-plugin.d.ts +16 -0
- package/dist/plugins/toc/toc-plugin.js +71 -0
- package/dist/presentation-mode.d.ts +32 -0
- package/dist/presentation-mode.js +50 -0
- package/dist/reactivity/block-list-state.svelte.d.ts +22 -0
- package/dist/reactivity/block-list-state.svelte.js +46 -0
- package/dist/reactivity/block-window.svelte.d.ts +41 -0
- package/dist/reactivity/block-window.svelte.js +93 -0
- package/dist/reactivity/content-version.svelte.d.ts +14 -0
- package/dist/reactivity/content-version.svelte.js +16 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +100 -0
- package/dist/reactivity/list-windowing.svelte.js +402 -0
- package/dist/reactivity/measure-batch.d.ts +15 -0
- package/dist/reactivity/measure-batch.js +18 -0
- package/dist/reactivity/publish-ref.svelte.d.ts +54 -0
- package/dist/reactivity/publish-ref.svelte.js +128 -0
- package/dist/reactivity/scope-geometry.d.ts +18 -0
- package/dist/reactivity/scope-geometry.js +29 -0
- package/dist/reactivity/state-registry.d.ts +10 -0
- package/dist/reactivity/state-registry.js +44 -0
- package/dist/reactivity/use-container-windowing.svelte.d.ts +35 -0
- package/dist/reactivity/use-container-windowing.svelte.js +95 -0
- package/dist/reactivity/window-slice.d.ts +11 -0
- package/dist/reactivity/window-slice.js +9 -0
- package/dist/scan-index.d.ts +11 -0
- package/dist/scan-index.js +27 -0
- package/dist/schema/block-commands.d.ts +105 -0
- package/dist/schema/block-commands.js +179 -0
- package/dist/schema/block-completions.d.ts +33 -0
- package/dist/schema/block-completions.js +49 -0
- package/dist/schema/block-component-registry.d.ts +33 -0
- package/dist/schema/block-component-registry.js +33 -0
- package/dist/schema/block-kind-descriptor.d.ts +281 -0
- package/dist/schema/block-kind-descriptor.js +187 -0
- package/dist/schema/block-openers.d.ts +94 -0
- package/dist/schema/block-openers.js +150 -0
- package/dist/schema/built-in-descriptors.d.ts +8 -0
- package/dist/schema/built-in-descriptors.js +560 -0
- package/dist/schema/child-spans.d.ts +25 -0
- package/dist/schema/child-spans.js +161 -0
- package/dist/schema/closure.d.ts +39 -0
- package/dist/schema/closure.js +55 -0
- package/dist/schema/command-id.d.ts +20 -0
- package/dist/schema/command-id.js +42 -0
- package/dist/schema/commands.d.ts +147 -0
- package/dist/schema/commands.js +294 -0
- package/dist/schema/container-raw.d.ts +21 -0
- package/dist/schema/container-raw.js +43 -0
- package/dist/schema/container-rebuilders.d.ts +32 -0
- package/dist/schema/container-rebuilders.js +95 -0
- package/dist/schema/define-plugin-block.d.ts +15 -0
- package/dist/schema/define-plugin-block.js +18 -0
- package/dist/schema/fenced-code-raw.d.ts +43 -0
- package/dist/schema/fenced-code-raw.js +220 -0
- package/dist/schema/global-commands.d.ts +11 -0
- package/dist/schema/global-commands.js +40 -0
- package/dist/schema/inline-construct-policy.d.ts +131 -0
- package/dist/schema/inline-construct-policy.js +96 -0
- package/dist/schema/keybinding-overrides.d.ts +39 -0
- package/dist/schema/keybinding-overrides.js +43 -0
- package/dist/schema/keybindings.d.ts +36 -0
- package/dist/schema/keybindings.js +75 -0
- package/dist/schema/merge-rules.d.ts +28 -0
- package/dist/schema/merge-rules.js +57 -0
- package/dist/schema/opener-priorities.d.ts +16 -0
- package/dist/schema/opener-priorities.js +16 -0
- package/dist/schema/operations.d.ts +110 -0
- package/dist/schema/operations.js +6 -0
- package/dist/schema/plugin-activation.d.ts +13 -0
- package/dist/schema/plugin-activation.js +18 -0
- package/dist/schema/plugin-editor-context.d.ts +33 -0
- package/dist/schema/plugin-editor-context.js +65 -0
- package/dist/schema/plugin-install.d.ts +58 -0
- package/dist/schema/plugin-install.js +132 -0
- package/dist/schema/plugin-kind.d.ts +21 -0
- package/dist/schema/plugin-kind.js +86 -0
- package/dist/schema/plugin-name.d.ts +1 -0
- package/dist/schema/plugin-name.js +7 -0
- package/dist/schema/register-once.d.ts +9 -0
- package/dist/schema/register-once.js +35 -0
- package/dist/schema/registration-checks.d.ts +32 -0
- package/dist/schema/registration-checks.js +122 -0
- package/dist/schema/registration-pending.d.ts +28 -0
- package/dist/schema/registration-pending.js +48 -0
- package/dist/schema/registry-reset.d.ts +7 -0
- package/dist/schema/registry-reset.js +30 -0
- package/dist/schema/registry-view.d.ts +30 -0
- package/dist/schema/registry-view.js +39 -0
- package/dist/schema/reserved-chords.d.ts +35 -0
- package/dist/schema/reserved-chords.js +313 -0
- package/dist/schema/reserved-chrome.d.ts +23 -0
- package/dist/schema/reserved-chrome.js +33 -0
- package/dist/schema/table-cell-raw.d.ts +14 -0
- package/dist/schema/table-cell-raw.js +30 -0
- package/dist/schema/whole-block-unit.d.ts +8 -0
- package/dist/schema/whole-block-unit.js +12 -0
- package/dist/search/document-scan.d.ts +22 -0
- package/dist/search/document-scan.js +39 -0
- package/dist/search/matcher.d.ts +31 -0
- package/dist/search/matcher.js +70 -0
- package/dist/search/regex-executor.d.ts +41 -0
- package/dist/search/regex-executor.js +165 -0
- package/dist/search/replace.d.ts +15 -0
- package/dist/search/replace.js +29 -0
- package/dist/search/search-state.svelte.d.ts +59 -0
- package/dist/search/search-state.svelte.js +231 -0
- package/dist/selection/autoscroll.d.ts +26 -0
- package/dist/selection/autoscroll.js +91 -0
- package/dist/selection/block-hit-test.d.ts +37 -0
- package/dist/selection/block-hit-test.js +59 -0
- package/dist/selection/caret-doors.d.ts +20 -0
- package/dist/selection/caret-doors.js +44 -0
- package/dist/selection/caret-restore.d.ts +15 -0
- package/dist/selection/caret-restore.js +32 -0
- package/dist/selection/char-endpoint-snap.d.ts +15 -0
- package/dist/selection/char-endpoint-snap.js +39 -0
- package/dist/selection/clipboard-text.d.ts +13 -0
- package/dist/selection/clipboard-text.js +314 -0
- package/dist/selection/cross-block/clipboard.d.ts +14 -0
- package/dist/selection/cross-block/clipboard.js +20 -0
- package/dist/selection/cross-block/dispatch.d.ts +78 -0
- package/dist/selection/cross-block/dispatch.js +57 -0
- package/dist/selection/cross-block/format-range.d.ts +38 -0
- package/dist/selection/cross-block/format-range.js +193 -0
- package/dist/selection/cross-block/format-toggle.d.ts +27 -0
- package/dist/selection/cross-block/format-toggle.js +109 -0
- package/dist/selection/cross-block/keydown.d.ts +11 -0
- package/dist/selection/cross-block/keydown.js +339 -0
- package/dist/selection/cross-block/ops.d.ts +56 -0
- package/dist/selection/cross-block/ops.js +210 -0
- package/dist/selection/cross-block/paste.d.ts +8 -0
- package/dist/selection/cross-block/paste.js +156 -0
- package/dist/selection/cross-block/pointer.d.ts +19 -0
- package/dist/selection/cross-block/pointer.js +80 -0
- package/dist/selection/cross-block/type-replace.d.ts +10 -0
- package/dist/selection/cross-block/type-replace.js +129 -0
- package/dist/selection/dead-space-caret.d.ts +39 -0
- package/dist/selection/dead-space-caret.js +173 -0
- package/dist/selection/drag-pointer.d.ts +22 -0
- package/dist/selection/drag-pointer.js +89 -0
- package/dist/selection/gap-caret.d.ts +47 -0
- package/dist/selection/gap-caret.js +72 -0
- package/dist/selection/keyboard-extend.d.ts +43 -0
- package/dist/selection/keyboard-extend.js +257 -0
- package/dist/selection/native-bridge.d.ts +47 -0
- package/dist/selection/native-bridge.js +204 -0
- package/dist/selection/nearest-block.d.ts +43 -0
- package/dist/selection/nearest-block.js +73 -0
- package/dist/selection/path-lookup.d.ts +32 -0
- package/dist/selection/path-lookup.js +132 -0
- package/dist/selection/path-math.d.ts +35 -0
- package/dist/selection/path-math.js +90 -0
- package/dist/selection/pointer-session.d.ts +43 -0
- package/dist/selection/pointer-session.js +111 -0
- package/dist/selection/primitives.d.ts +75 -0
- package/dist/selection/primitives.js +91 -0
- package/dist/selection/range-delete-ceremony.d.ts +85 -0
- package/dist/selection/range-delete-ceremony.js +197 -0
- package/dist/selection/range-delete-chrome.d.ts +39 -0
- package/dist/selection/range-delete-chrome.js +105 -0
- package/dist/selection/range-delete-table-coverage.d.ts +28 -0
- package/dist/selection/range-delete-table-coverage.js +168 -0
- package/dist/selection/range-delete-table.d.ts +16 -0
- package/dist/selection/range-delete-table.js +347 -0
- package/dist/selection/range-delete.d.ts +33 -0
- package/dist/selection/range-delete.js +121 -0
- package/dist/selection/selection-description.d.ts +7 -0
- package/dist/selection/selection-description.js +18 -0
- package/dist/selection/selection-restore.d.ts +46 -0
- package/dist/selection/selection-restore.js +66 -0
- package/dist/selection/selection-state.svelte.d.ts +72 -0
- package/dist/selection/selection-state.svelte.js +247 -0
- package/dist/selection/shared-keydown.d.ts +61 -0
- package/dist/selection/shared-keydown.js +150 -0
- package/dist/selection/table-endpoint-snap.d.ts +55 -0
- package/dist/selection/table-endpoint-snap.js +143 -0
- package/dist/selection/table-rect-extend.d.ts +23 -0
- package/dist/selection/table-rect-extend.js +46 -0
- package/dist/selection/widget-range-paint.d.ts +12 -0
- package/dist/selection/widget-range-paint.js +44 -0
- package/dist/styles/editor-theme.css +151 -0
- package/dist/styles/editor.css +585 -0
- package/dist/testing/conformance-core.d.ts +45 -0
- package/dist/testing/conformance-core.js +105 -0
- package/dist/testing/container-conformance.d.ts +137 -0
- package/dist/testing/container-conformance.js +533 -0
- package/dist/testing/headless-actions.d.ts +37 -0
- package/dist/testing/headless-actions.js +118 -0
- package/dist/testing/inline-conformance.d.ts +50 -0
- package/dist/testing/inline-conformance.js +442 -0
- package/dist/testing/kind-conformance.d.ts +54 -0
- package/dist/testing/kind-conformance.js +325 -0
- package/dist/testing/mount-dom-stubs.d.ts +8 -0
- package/dist/testing/mount-dom-stubs.js +19 -0
- package/dist/testing/parse-convergence.d.ts +14 -0
- package/dist/testing/parse-convergence.js +81 -0
- package/dist/testing.d.ts +20 -0
- package/dist/testing.js +61 -0
- package/dist/tree-operations/blockquote.d.ts +18 -0
- package/dist/tree-operations/blockquote.js +59 -0
- package/dist/tree-operations/children.d.ts +17 -0
- package/dist/tree-operations/children.js +56 -0
- package/dist/tree-operations/cleanup.d.ts +10 -0
- package/dist/tree-operations/cleanup.js +25 -0
- package/dist/tree-operations/clone.d.ts +5 -0
- package/dist/tree-operations/clone.js +43 -0
- package/dist/tree-operations/container-lift.d.ts +9 -0
- package/dist/tree-operations/container-lift.js +29 -0
- package/dist/tree-operations/index.d.ts +16 -0
- package/dist/tree-operations/index.js +14 -0
- package/dist/tree-operations/list/empty-check.d.ts +7 -0
- package/dist/tree-operations/list/empty-check.js +19 -0
- package/dist/tree-operations/list/exit-replacement.d.ts +13 -0
- package/dist/tree-operations/list/exit-replacement.js +49 -0
- package/dist/tree-operations/list/item-partition.d.ts +13 -0
- package/dist/tree-operations/list/item-partition.js +33 -0
- package/dist/tree-operations/list/list-builders.d.ts +44 -0
- package/dist/tree-operations/list/list-builders.js +129 -0
- package/dist/tree-operations/list/ordered-markers.d.ts +36 -0
- package/dist/tree-operations/list/ordered-markers.js +114 -0
- package/dist/tree-operations/list/reconcile-task.d.ts +12 -0
- package/dist/tree-operations/list/reconcile-task.js +47 -0
- package/dist/tree-operations/list/sublist-separator.d.ts +13 -0
- package/dist/tree-operations/list/sublist-separator.js +34 -0
- package/dist/tree-operations/list/terminator.d.ts +17 -0
- package/dist/tree-operations/list/terminator.js +60 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +29 -0
- package/dist/tree-operations/list/unwrap-merge.js +202 -0
- package/dist/tree-operations/node-ops.d.ts +296 -0
- package/dist/tree-operations/node-ops.js +1428 -0
- package/dist/tree-operations/parse-block.d.ts +3 -0
- package/dist/tree-operations/parse-block.js +8 -0
- package/dist/tree-operations/paste/apply.d.ts +12 -0
- package/dist/tree-operations/paste/apply.js +75 -0
- package/dist/tree-operations/paste/body-write.d.ts +19 -0
- package/dist/tree-operations/paste/body-write.js +53 -0
- package/dist/tree-operations/paste/container-match.d.ts +32 -0
- package/dist/tree-operations/paste/container-match.js +238 -0
- package/dist/tree-operations/paste/container-paste.d.ts +10 -0
- package/dist/tree-operations/paste/container-paste.js +27 -0
- package/dist/tree-operations/paste/dispatch.d.ts +61 -0
- package/dist/tree-operations/paste/dispatch.js +138 -0
- package/dist/tree-operations/paste/find-enclosing-list.d.ts +8 -0
- package/dist/tree-operations/paste/find-enclosing-list.js +30 -0
- package/dist/tree-operations/paste/focus-target.d.ts +27 -0
- package/dist/tree-operations/paste/focus-target.js +40 -0
- package/dist/tree-operations/paste/hooks.d.ts +17 -0
- package/dist/tree-operations/paste/hooks.js +80 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +29 -0
- package/dist/tree-operations/paste/list-absorb.js +106 -0
- package/dist/tree-operations/paste/list-break-out.d.ts +42 -0
- package/dist/tree-operations/paste/list-break-out.js +136 -0
- package/dist/tree-operations/paste/parent-scope.d.ts +17 -0
- package/dist/tree-operations/paste/parent-scope.js +35 -0
- package/dist/tree-operations/paste/paste-deps.d.ts +20 -0
- package/dist/tree-operations/paste/paste-deps.js +6 -0
- package/dist/tree-operations/paste/paste-replacement.d.ts +8 -0
- package/dist/tree-operations/paste/paste-replacement.js +60 -0
- package/dist/tree-operations/paste/paste-transforms.d.ts +25 -0
- package/dist/tree-operations/paste/paste-transforms.js +72 -0
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +29 -0
- package/dist/tree-operations/paste/replace-block-at-parent.js +75 -0
- package/dist/tree-operations/paste/strategy.d.ts +9 -0
- package/dist/tree-operations/paste/strategy.js +20 -0
- package/dist/tree-operations/paste/table-slice.d.ts +10 -0
- package/dist/tree-operations/paste/table-slice.js +39 -0
- package/dist/tree-operations/paste-surfaces.d.ts +61 -0
- package/dist/tree-operations/paste-surfaces.js +15 -0
- package/dist/tree-operations/path-mutate.d.ts +12 -0
- package/dist/tree-operations/path-mutate.js +20 -0
- package/dist/tree-operations/reorder-unit.d.ts +17 -0
- package/dist/tree-operations/reorder-unit.js +37 -0
- package/dist/tree-operations/reorder.d.ts +13 -0
- package/dist/tree-operations/reorder.js +57 -0
- package/dist/tree-operations/sharing.d.ts +18 -0
- package/dist/tree-operations/sharing.js +14 -0
- package/dist/tree-operations/splice-many.d.ts +9 -0
- package/dist/tree-operations/splice-many.js +22 -0
- package/dist/tree-operations/structural-change.d.ts +65 -0
- package/dist/tree-operations/structural-change.js +117 -0
- package/dist/tree-operations/sub-table-copy.d.ts +6 -0
- package/dist/tree-operations/sub-table-copy.js +43 -0
- package/dist/tree-operations/table-mutations.d.ts +17 -0
- package/dist/tree-operations/table-mutations.js +101 -0
- package/dist/tree-operations/unshare.d.ts +101 -0
- package/dist/tree-operations/unshare.js +248 -0
- package/dist/undo/manager.d.ts +2 -0
- package/dist/undo/manager.js +50 -0
- package/dist/undo/types.d.ts +44 -0
- package/dist/undo/types.js +7 -0
- package/docs/guide/consumer-guide.md +1098 -0
- package/docs/guide/directives.md +223 -0
- package/docs/guide/plugin-api.md +329 -0
- package/docs/guide/plugin-guide/conspiracy.gif +0 -0
- package/docs/guide/plugin-guide/parrot-frames.md +209 -0
- package/docs/guide/plugin-guide/parrot.gif +0 -0
- package/docs/guide/plugin-guide.md +1693 -0
- package/docs/guide/plugin-testing.md +463 -0
- package/package.json +238 -0
|
@@ -0,0 +1,726 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getContext, tick } from 'svelte';
|
|
3
|
+
import { type BlockComponent, type StickyColumnDirection } from '../../../block-component';
|
|
4
|
+
import type { NodeView } from '../../../core/node-views';
|
|
5
|
+
import {
|
|
6
|
+
EDITOR_POLICIES_KEY,
|
|
7
|
+
EDITOR_SERVICES_KEY,
|
|
8
|
+
type EditorPolicies,
|
|
9
|
+
type EditorServices
|
|
10
|
+
} from '../../../editor-keys';
|
|
11
|
+
import { asDomTextOffset, asRawOffset } from '../../../cursor/coordinate-spaces';
|
|
12
|
+
import { CONTENT_EMPTY_ATTR, holdsOnlyMarkerChrome } from '../../../cursor/widget-offset';
|
|
13
|
+
import {
|
|
14
|
+
createRangeFromOffsets,
|
|
15
|
+
setCursorOffset,
|
|
16
|
+
getRangeOffsets,
|
|
17
|
+
getSelectionOffsets,
|
|
18
|
+
hasSelection
|
|
19
|
+
} from '../../../cursor/content-offsets';
|
|
20
|
+
import { handleSharedKeydown, handleSharedBeforeInput } from '../../../selection/shared-keydown';
|
|
21
|
+
import {
|
|
22
|
+
createEditableSurface,
|
|
23
|
+
createClipboardHandlers,
|
|
24
|
+
consumePendingRestore
|
|
25
|
+
} from '../editable-surface';
|
|
26
|
+
import { wireSurfaceContexts, useParkFocusOnUnmount } from '../surface-wiring.svelte';
|
|
27
|
+
import { createContentOffsetBackend, anchorTrailingNewline } from '../plain-text-backend';
|
|
28
|
+
import { renderCodeBlock } from './code-renderer';
|
|
29
|
+
import {
|
|
30
|
+
getLineLeadingWhitespace,
|
|
31
|
+
isBetweenEmptyPair,
|
|
32
|
+
isBetweenEmptyBracketPair
|
|
33
|
+
} from './code-editing';
|
|
34
|
+
import { indentLines, dedentLines, type IndentResult } from './code-indent';
|
|
35
|
+
import { computeCodeEnter } from './code-enter';
|
|
36
|
+
import { computeAutoPair } from './code-beforeinput';
|
|
37
|
+
import {
|
|
38
|
+
fenceShapeOf,
|
|
39
|
+
reconcileFenceWrite,
|
|
40
|
+
writeFenceInfo
|
|
41
|
+
} from '../../../schema/fenced-code-raw';
|
|
42
|
+
import { hidesMarkers } from '../../../presentation-mode';
|
|
43
|
+
import CodeLanguageChip from './CodeLanguageChip.svelte';
|
|
44
|
+
import { computeFenceExit } from './code-fence-exit';
|
|
45
|
+
import {
|
|
46
|
+
classifyFenceBoundary,
|
|
47
|
+
clampCaretToBody,
|
|
48
|
+
clampEnterOffsetToBody,
|
|
49
|
+
clampRangeToBody,
|
|
50
|
+
computeFenceRangedEdit,
|
|
51
|
+
crossesFenceBoundary,
|
|
52
|
+
fenceEditSpan,
|
|
53
|
+
isStructureOnlyRange,
|
|
54
|
+
type CodeRange
|
|
55
|
+
} from './code-fence-boundary';
|
|
56
|
+
import { metadataOf, type CstNode } from '../../../core/nodes';
|
|
57
|
+
import { trimTrailingLineEnding, trailingLineEnding } from '../../../core/lines';
|
|
58
|
+
import { pasteDispatch } from '../../../tree-operations/paste/dispatch';
|
|
59
|
+
import { nodeAt, emptyParagraph } from '../../../tree-operations';
|
|
60
|
+
import { type CommandId } from '../../../schema/commands';
|
|
61
|
+
import { reorderRunCommand } from '../../../editor-actions/reorder-action';
|
|
62
|
+
|
|
63
|
+
const ELECTRIC_INDENT_UNIT = '\t';
|
|
64
|
+
|
|
65
|
+
let { node, index, myPath = [] }: { node: NodeView; index: number; myPath?: number[] } = $props();
|
|
66
|
+
|
|
67
|
+
const wiring = wireSurfaceContexts();
|
|
68
|
+
const {
|
|
69
|
+
blockEdit,
|
|
70
|
+
focusActions,
|
|
71
|
+
controller,
|
|
72
|
+
pasteCoordinator,
|
|
73
|
+
stickyColumn,
|
|
74
|
+
edgeAffinity,
|
|
75
|
+
selection,
|
|
76
|
+
getDoc,
|
|
77
|
+
getEditorRoot,
|
|
78
|
+
grammar,
|
|
79
|
+
activePlugins,
|
|
80
|
+
events: editorEvents
|
|
81
|
+
} = wiring.deps;
|
|
82
|
+
const { reorder } = getContext<EditorServices>(EDITOR_SERVICES_KEY);
|
|
83
|
+
const { presentationMode: getPresentationMode, onPasteImage } =
|
|
84
|
+
getContext<EditorPolicies>(EDITOR_POLICIES_KEY);
|
|
85
|
+
const presentationMode = $derived(getPresentationMode?.() ?? 'source');
|
|
86
|
+
const readOnly = $derived(presentationMode === 'reading');
|
|
87
|
+
let el: HTMLDivElement | undefined = $state();
|
|
88
|
+
let composing = $state(false);
|
|
89
|
+
// The walk container's own stamp, kept as state rather than re-derived: it is what
|
|
90
|
+
// decides whether this block paints its fence chrome, and so whether it needs a chip.
|
|
91
|
+
let contentEmpty = $state(false);
|
|
92
|
+
let pendingCursorOffset = $state<number | null>(null);
|
|
93
|
+
let pendingSelection = $state<{ start: number; end: number } | null>(null);
|
|
94
|
+
let lastRenderedRaw = '';
|
|
95
|
+
let preEditOffset = 0;
|
|
96
|
+
|
|
97
|
+
const { backend, getFocusOffset, getTextLen, readText } = createContentOffsetBackend(
|
|
98
|
+
() => el ?? null
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
const editableSurface = createEditableSurface({
|
|
102
|
+
...wiring.deps,
|
|
103
|
+
getEl: () => el ?? null,
|
|
104
|
+
getAmbientLength: () => 0,
|
|
105
|
+
backend,
|
|
106
|
+
getMyPath: () => myPath,
|
|
107
|
+
getIndex: () => index,
|
|
108
|
+
getComposing: () => composing,
|
|
109
|
+
setComposing: (value) => {
|
|
110
|
+
composing = value;
|
|
111
|
+
},
|
|
112
|
+
getPreEditOffset: () => preEditOffset,
|
|
113
|
+
setPreEditOffset: (offset) => {
|
|
114
|
+
preEditOffset = offset;
|
|
115
|
+
},
|
|
116
|
+
setPendingCursor: (offset) => {
|
|
117
|
+
pendingCursorOffset = offset;
|
|
118
|
+
},
|
|
119
|
+
getPresentationMode,
|
|
120
|
+
getFocusOffset,
|
|
121
|
+
getTextLen,
|
|
122
|
+
readText,
|
|
123
|
+
// Hands back the caret the RECONCILED bytes want: the write seam can grow the
|
|
124
|
+
// fence or drop a character, either of which moves the caret off the DOM's.
|
|
125
|
+
commitInput: (text, preEdit, savedOffset) => commitDisplay(text, preEdit, savedOffset)
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
const crossBlock = editableSurface.crossBlock;
|
|
129
|
+
const sharedCtx = editableSurface.sharedCtx;
|
|
130
|
+
|
|
131
|
+
// ── BlockComponent interface ────────────────────────────────────────
|
|
132
|
+
|
|
133
|
+
export const editable = true;
|
|
134
|
+
export const focusable = true;
|
|
135
|
+
|
|
136
|
+
// Every caret-landing door clamps onto editable content: a caret on a fence line
|
|
137
|
+
// takes keystrokes the fence guard refuses, and a PARKED caret there is as dead as
|
|
138
|
+
// a placed one, so both verbs clamp.
|
|
139
|
+
export function focus(offset: number): void {
|
|
140
|
+
editableSurface.surface.focus(clampCaretToBody(node, offset));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export function parkCaret(offset: number): void {
|
|
144
|
+
editableSurface.surface.parkCaret(clampCaretToBody(node, offset));
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// The column walk resolves against pixels, so it can only be corrected after the
|
|
148
|
+
// fact: re-seat when it lands on a fence line, leave it alone when it doesn't.
|
|
149
|
+
export function focusAtColumn(x: number, from: StickyColumnDirection): void {
|
|
150
|
+
editableSurface.surface.focusAtColumn(x, from);
|
|
151
|
+
const landed = backend.getRaw();
|
|
152
|
+
if (landed === null) return;
|
|
153
|
+
const seated = clampCaretToBody(node, landed);
|
|
154
|
+
if (seated !== landed) backend.setRaw(asRawOffset(seated));
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export const getCursorOffset = editableSurface.surface.getCursorOffset;
|
|
158
|
+
export const getSelectedText = editableSurface.surface.getSelectedText;
|
|
159
|
+
export const setSelection = editableSurface.surface.setSelection;
|
|
160
|
+
export const measurePartialRects = editableSurface.surface.measurePartialRects;
|
|
161
|
+
|
|
162
|
+
// ── Render pipeline ───────────────────────────────────────────────────────
|
|
163
|
+
|
|
164
|
+
function getDisplayText(): string {
|
|
165
|
+
return trimTrailingLineEnding(node.raw);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* The block's ONE display-commit door: no gesture calls `updateBlockContent` directly (pinned
|
|
170
|
+
* by `lint/code-commit-funnel`). The write seam sits inside rather than at each caller, so
|
|
171
|
+
* every gesture gets fence reconciliation by construction.
|
|
172
|
+
*/
|
|
173
|
+
function commitDisplay(display: string, undoAnchor: number, caret: number): number {
|
|
174
|
+
const written = reconcileFenceWrite({
|
|
175
|
+
display,
|
|
176
|
+
caret,
|
|
177
|
+
fence: fenceShapeOf(node),
|
|
178
|
+
mode: 'authored'
|
|
179
|
+
});
|
|
180
|
+
void blockEdit.updateBlockContent(
|
|
181
|
+
index,
|
|
182
|
+
written.display + trailingLineEnding(node.raw),
|
|
183
|
+
undoAnchor
|
|
184
|
+
);
|
|
185
|
+
return written.caret;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
$effect(() => {
|
|
189
|
+
if (!el) return;
|
|
190
|
+
if (node.raw === lastRenderedRaw && pendingCursorOffset === null && pendingSelection === null)
|
|
191
|
+
return;
|
|
192
|
+
|
|
193
|
+
el.replaceChildren(renderCodeBlock(node));
|
|
194
|
+
anchorTrailingNewline(el);
|
|
195
|
+
const chromeOnly = holdsOnlyMarkerChrome(el);
|
|
196
|
+
el.toggleAttribute(CONTENT_EMPTY_ATTR, chromeOnly);
|
|
197
|
+
contentEmpty = chromeOnly;
|
|
198
|
+
lastRenderedRaw = node.raw;
|
|
199
|
+
|
|
200
|
+
// Restore only while this block still holds focus: an edit reparsing to multiple
|
|
201
|
+
// blocks moves the caret to the split-off sibling, and a blur would otherwise yank
|
|
202
|
+
// the global selection back. The pending fields clear regardless, never re-armed.
|
|
203
|
+
if (pendingSelection !== null) {
|
|
204
|
+
consumePendingRestore(el, pendingSelection, (range) => {
|
|
205
|
+
const domRange = createRangeFromOffsets(
|
|
206
|
+
el!,
|
|
207
|
+
asDomTextOffset(range.start),
|
|
208
|
+
asDomTextOffset(range.end)
|
|
209
|
+
);
|
|
210
|
+
if (!domRange) return;
|
|
211
|
+
const sel = window.getSelection();
|
|
212
|
+
sel?.removeAllRanges();
|
|
213
|
+
sel?.addRange(domRange);
|
|
214
|
+
});
|
|
215
|
+
pendingSelection = null;
|
|
216
|
+
pendingCursorOffset = null;
|
|
217
|
+
} else if (pendingCursorOffset !== null) {
|
|
218
|
+
consumePendingRestore(el, pendingCursorOffset, (offset) =>
|
|
219
|
+
setCursorOffset(el!, asDomTextOffset(offset))
|
|
220
|
+
);
|
|
221
|
+
pendingCursorOffset = null;
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
useParkFocusOnUnmount(() => el ?? null, getEditorRoot);
|
|
226
|
+
|
|
227
|
+
// ── The language chip ─────────────────────────────────────────────────────
|
|
228
|
+
|
|
229
|
+
// The chip stands in for fence chrome the mode paints nothing for, so it shows exactly
|
|
230
|
+
// where that chrome is missing: never in source, never on a block painting its own.
|
|
231
|
+
const showChip = $derived(hidesMarkers(presentationMode) && !contentEmpty);
|
|
232
|
+
const infoString = $derived(metadataOf(node, 'fencedCode').info);
|
|
233
|
+
|
|
234
|
+
// The chip's write: the opener's info span, through the display funnel so the fence rule
|
|
235
|
+
// runs over it, isolated so no typing burst on either side joins its undo entry.
|
|
236
|
+
function commitLanguage(info: string): void {
|
|
237
|
+
// Unchanged or refused bytes are a close, not a write — no entry, no edit event. The seed
|
|
238
|
+
// is `meta.info`, TRIMMED, so a byte test alone lets a bare Enter respell a padded fence.
|
|
239
|
+
if (info === infoString) {
|
|
240
|
+
returnCaretToBody();
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
const display = getDisplayText();
|
|
244
|
+
const written = writeFenceInfo(display, info, fenceShapeOf(node));
|
|
245
|
+
const bodyStart = clampCaretToBody(node, 0);
|
|
246
|
+
if (written !== null && written !== display) {
|
|
247
|
+
controller.isolateUndoEntry(() => commitDisplay(written, bodyStart, bodyStart));
|
|
248
|
+
}
|
|
249
|
+
returnCaretToBody();
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// This block's own door, not `moveFocus`: the chip is chrome over one block, and a
|
|
253
|
+
// traversal to it stops at the gap above instead. The seat waits for the commit's render.
|
|
254
|
+
function returnCaretToBody(): void {
|
|
255
|
+
void tick().then(() => focus(0));
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// ── Event handlers ────────────────────────────────────────────────────────
|
|
259
|
+
|
|
260
|
+
const onInput = editableSurface.onInput;
|
|
261
|
+
const onCompositionEnd = editableSurface.onCompositionEnd;
|
|
262
|
+
|
|
263
|
+
// An IME deletes the selection as it starts composing, and beforeinput's
|
|
264
|
+
// insertCompositionText is not cancelable — so a fence-crossing selection shrinks
|
|
265
|
+
// onto its body span here, before the composition owns the surface.
|
|
266
|
+
function onCompositionStart(): void {
|
|
267
|
+
const sel = el ? getSelectionOffsets(el) : null;
|
|
268
|
+
if (sel && crossesFenceBoundary(node, sel)) {
|
|
269
|
+
const span = fenceEditSpan(node, sel);
|
|
270
|
+
setSelection(span.start, span.end);
|
|
271
|
+
}
|
|
272
|
+
editableSurface.onCompositionStart();
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
async function onBeforeInput(e: InputEvent): Promise<void> {
|
|
276
|
+
if (await handleSharedBeforeInput(e, sharedCtx)) return;
|
|
277
|
+
if (guardFenceRangedEdit(e)) return;
|
|
278
|
+
// Soft break: Shift+Enter, and mobile/IME insertLineBreak without a keydown.
|
|
279
|
+
// Gated on !composing so an IME emitting it mid-composition does not sync.
|
|
280
|
+
if (e.inputType === 'insertLineBreak' && !composing && el) {
|
|
281
|
+
e.preventDefault();
|
|
282
|
+
// Mobile/IME paths skip onKeyDown so preEditOffset may be stale; capture fresh.
|
|
283
|
+
const branchPreEditOffset = backend.getRaw() ?? 0;
|
|
284
|
+
const result = computeCodeEnter({
|
|
285
|
+
display: getDisplayText(),
|
|
286
|
+
selection: enterSpliceSpan(currentRange()),
|
|
287
|
+
mode: 'soft',
|
|
288
|
+
ending: trailingLineEnding(node.raw)
|
|
289
|
+
});
|
|
290
|
+
pendingCursorOffset = commitDisplay(result.newText, branchPreEditOffset, result.newCursor);
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
if (composing || e.inputType !== 'insertText' || !el) return;
|
|
294
|
+
const data = e.data;
|
|
295
|
+
if (!data || data.length !== 1) return;
|
|
296
|
+
|
|
297
|
+
const text = getDisplayText();
|
|
298
|
+
const selOffsets = getSelectionOffsets(el);
|
|
299
|
+
const offset = selOffsets ? selOffsets.start : (backend.getRaw() ?? 0);
|
|
300
|
+
|
|
301
|
+
const meta = metadataOf(node, 'fencedCode');
|
|
302
|
+
const result = computeAutoPair({
|
|
303
|
+
text,
|
|
304
|
+
selection: selOffsets ?? { start: offset, end: offset },
|
|
305
|
+
typed: data,
|
|
306
|
+
unclosedBacktickFence: meta.closed === false && meta.fenceMarker === '`'
|
|
307
|
+
});
|
|
308
|
+
if (!result) return;
|
|
309
|
+
|
|
310
|
+
e.preventDefault();
|
|
311
|
+
if (result.kind === 'skip') {
|
|
312
|
+
setCursorOffset(el, asDomTextOffset(result.caretOffset));
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
if (result.kind === 'wrap') {
|
|
316
|
+
// Both endpoints sit inside the body, so whatever the seam inserts ahead of
|
|
317
|
+
// the wrap's start moves its end by the same delta.
|
|
318
|
+
const start = commitDisplay(result.newText, preEditOffset, result.selection.start);
|
|
319
|
+
const shift = start - result.selection.start;
|
|
320
|
+
pendingSelection = { start, end: result.selection.end + shift };
|
|
321
|
+
} else {
|
|
322
|
+
pendingCursorOffset = commitDisplay(result.newText, preEditOffset, result.caretOffset);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// ── Fence-crossing edits ──────────────────────────────────────────────────
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Where an Enter-family splice lands (the `code.newline` command and the soft
|
|
330
|
+
* break): a caret clamps out of the fence lines, a selection is replaced on its
|
|
331
|
+
* body span like every other ranged edit here.
|
|
332
|
+
*/
|
|
333
|
+
function enterSpliceSpan(range: CodeRange): CodeRange {
|
|
334
|
+
if (range.start !== range.end) return fenceEditSpan(node, range);
|
|
335
|
+
const at = clampEnterOffsetToBody(node, range.start);
|
|
336
|
+
return { start: at, end: at };
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* The one guard for every native edit that rewrites a range here — delete,
|
|
341
|
+
* forward-delete, type-over, word delete, drag. One that crosses a fence line is
|
|
342
|
+
* re-sited onto the body rather than left to splice the fence away.
|
|
343
|
+
*/
|
|
344
|
+
function guardFenceRangedEdit(e: InputEvent): boolean {
|
|
345
|
+
if (composing || !el) return false;
|
|
346
|
+
const range = pendingEditRange(e, el);
|
|
347
|
+
if (!range || !crossesFenceBoundary(node, range)) return false;
|
|
348
|
+
|
|
349
|
+
e.preventDefault();
|
|
350
|
+
const insert = rangedEditInsertion(e, fenceEditSpan(node, range));
|
|
351
|
+
if (insert === null) return true;
|
|
352
|
+
const edit = computeFenceRangedEdit(node, range, insert);
|
|
353
|
+
if (!edit) return true;
|
|
354
|
+
// Mobile/IME beforeinput arrives without a preceding keydown, so the undo
|
|
355
|
+
// anchor reads fresh rather than trusting preEditOffset (see the soft-break arm).
|
|
356
|
+
pendingCursorOffset = commitDisplay(edit.newText, backend.getRaw() ?? 0, edit.newCursor);
|
|
357
|
+
return true;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* What the pending edit will rewrite. `getTargetRanges()` is the authority — a word
|
|
362
|
+
* delete at a collapsed caret reports the word, not the caret — and is
|
|
363
|
+
* feature-detected because jsdom does not implement it.
|
|
364
|
+
*/
|
|
365
|
+
function pendingEditRange(e: InputEvent, surface: HTMLElement): CodeRange | null {
|
|
366
|
+
const targets = typeof e.getTargetRanges === 'function' ? e.getTargetRanges() : [];
|
|
367
|
+
if (targets.length > 0) return getRangeOffsets(surface, targets[0]);
|
|
368
|
+
const selected = getSelectionOffsets(surface);
|
|
369
|
+
if (selected) return selected;
|
|
370
|
+
const caret = backend.getRaw();
|
|
371
|
+
return caret === null ? null : { start: caret, end: caret };
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* The text each claimed input type writes over its span: only a payload readable off the event
|
|
376
|
+
* or mintable here is re-sited, every other type is REFUSED (null: prevented, nothing
|
|
377
|
+
* committed). Text riding a `dataTransfer` would reach `parse()` without the paste transforms
|
|
378
|
+
* (G4.11).
|
|
379
|
+
*/
|
|
380
|
+
function rangedEditInsertion(e: InputEvent, span: CodeRange): string | null {
|
|
381
|
+
if (e.inputType.startsWith('delete')) return '';
|
|
382
|
+
switch (e.inputType) {
|
|
383
|
+
case 'insertText':
|
|
384
|
+
return e.data ?? '';
|
|
385
|
+
case 'insertLineBreak':
|
|
386
|
+
return trailingLineEnding(node.raw);
|
|
387
|
+
// The keydown path auto-indents (computeCodeEnter 'normal'), and a mobile or
|
|
388
|
+
// IME insertParagraph is the same gesture arriving without a keydown.
|
|
389
|
+
case 'insertParagraph':
|
|
390
|
+
return (
|
|
391
|
+
trailingLineEnding(node.raw) + getLineLeadingWhitespace(getDisplayText(), span.start)
|
|
392
|
+
);
|
|
393
|
+
default:
|
|
394
|
+
return null;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
async function onKeyDown(e: KeyboardEvent): Promise<void> {
|
|
399
|
+
if (composing) return;
|
|
400
|
+
if (!el) return;
|
|
401
|
+
|
|
402
|
+
preEditOffset = backend.getRaw() ?? 0;
|
|
403
|
+
|
|
404
|
+
if ((await handleSharedKeydown(e, sharedCtx)) || editableSurface.isDetached()) return;
|
|
405
|
+
|
|
406
|
+
if (wiring.dispatchChord(e, { kind: node.kind, runCommand })) return;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// ── Commands ────────────────────────────────────────────────────────
|
|
410
|
+
|
|
411
|
+
export function runCommand(id: CommandId): boolean {
|
|
412
|
+
if (reorderRunCommand(id, reorder, () => myPath)) return true;
|
|
413
|
+
switch (id) {
|
|
414
|
+
case 'format.toggleStrong':
|
|
415
|
+
case 'format.toggleEmphasis':
|
|
416
|
+
case 'format.toggleStrikethrough':
|
|
417
|
+
case 'format.toggleCode':
|
|
418
|
+
case 'link.openCard':
|
|
419
|
+
return true; // code blocks carry no inline constructs; swallow to stop the browser default
|
|
420
|
+
case 'code.newline':
|
|
421
|
+
return codeNewline();
|
|
422
|
+
case 'code.indent':
|
|
423
|
+
indentSelection();
|
|
424
|
+
return true;
|
|
425
|
+
case 'code.dedent':
|
|
426
|
+
dedentSelection();
|
|
427
|
+
return true;
|
|
428
|
+
case 'code.backspace':
|
|
429
|
+
return codeBackspace();
|
|
430
|
+
case 'code.delete':
|
|
431
|
+
return codeDelete();
|
|
432
|
+
default:
|
|
433
|
+
return false;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
function codeBackspace(): boolean {
|
|
438
|
+
if (!el || hasSelection()) return false;
|
|
439
|
+
const offset = backend.getRaw() ?? 0;
|
|
440
|
+
// offset===0 is the universal contract; the classifyFenceBoundary check catches the
|
|
441
|
+
// fence boundary, where a native Backspace would delete the opener's terminating `\n`.
|
|
442
|
+
if (
|
|
443
|
+
offset === 0 ||
|
|
444
|
+
classifyFenceBoundary({ node, offset, forward: false }).kind === 'exitPrev'
|
|
445
|
+
) {
|
|
446
|
+
focusActions.moveFocus(index - 1, 'end');
|
|
447
|
+
return true;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
// Pair-delete: remove both halves so the auto-closed companion isn't stranded.
|
|
451
|
+
// A caret inside a backtick fence run reads as a pair, so it declines there.
|
|
452
|
+
const text = getDisplayText();
|
|
453
|
+
const pairSpan = { start: offset - 1, end: offset + 1 };
|
|
454
|
+
if (isBetweenEmptyPair(text, offset) && !crossesFenceBoundary(node, pairSpan)) {
|
|
455
|
+
const newText = text.slice(0, offset - 1) + text.slice(offset + 1);
|
|
456
|
+
pendingCursorOffset = commitDisplay(newText, preEditOffset, offset - 1);
|
|
457
|
+
return true;
|
|
458
|
+
}
|
|
459
|
+
return false;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
function codeDelete(): boolean {
|
|
463
|
+
if (!el || hasSelection()) return false;
|
|
464
|
+
const offset = backend.getRaw() ?? 0;
|
|
465
|
+
if (classifyFenceBoundary({ node, offset, forward: true }).kind === 'exitNext') {
|
|
466
|
+
// The root's forward asymmetry (past-end appends a paragraph) would strand a
|
|
467
|
+
// spurious block here, so suppress the append; no-op at the true doc end.
|
|
468
|
+
focusActions.moveFocus(index + 1, 'start', { append: false });
|
|
469
|
+
return true;
|
|
470
|
+
}
|
|
471
|
+
return false;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
// The browser's insertParagraph adds <div>/<br> elements that don't affect
|
|
475
|
+
// textContent, so the CST never sees the edit — handle Enter via the CST path.
|
|
476
|
+
function codeNewline(): boolean {
|
|
477
|
+
if (!el) return false;
|
|
478
|
+
// Read the caret live: cross-block dispatch calls runCommand without an
|
|
479
|
+
// onKeyDown to refresh preEditOffset, so the undo anchor must read fresh.
|
|
480
|
+
const offset = backend.getRaw() ?? 0;
|
|
481
|
+
const text = getDisplayText();
|
|
482
|
+
const meta = metadataOf(node, 'fencedCode');
|
|
483
|
+
|
|
484
|
+
const exit = computeFenceExit({ text, offset, meta });
|
|
485
|
+
if (exit.kind === 'closeAndExit') {
|
|
486
|
+
closeUnclosedFenceAndDescend(exit.newText);
|
|
487
|
+
return true;
|
|
488
|
+
}
|
|
489
|
+
if (exit.kind !== 'none') {
|
|
490
|
+
if (exit.kind === 'exitWithEdit') {
|
|
491
|
+
commitDisplay(exit.newText, offset, offset);
|
|
492
|
+
}
|
|
493
|
+
exitDownward();
|
|
494
|
+
return true;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
// The undo anchor stays on the true pre-edit caret (`offset`); the splice
|
|
498
|
+
// itself lands wherever the fence lines allow.
|
|
499
|
+
const span = enterSpliceSpan(currentRange());
|
|
500
|
+
|
|
501
|
+
// Electric indent: between an empty bracket pair, expand into three lines with an
|
|
502
|
+
// extra indent on the middle. Quote pairs stay inline; a selection is replaced.
|
|
503
|
+
const ending = trailingLineEnding(node.raw);
|
|
504
|
+
if (span.start === span.end && isBetweenEmptyBracketPair(text, span.start)) {
|
|
505
|
+
const at = span.start;
|
|
506
|
+
const indent = getLineLeadingWhitespace(text, at);
|
|
507
|
+
const inner = indent + ELECTRIC_INDENT_UNIT;
|
|
508
|
+
const newText = text.slice(0, at) + ending + inner + ending + indent + text.slice(at);
|
|
509
|
+
const innerCaret = at + ending.length + inner.length;
|
|
510
|
+
pendingCursorOffset = commitDisplay(newText, offset, innerCaret);
|
|
511
|
+
return true;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
const enter = computeCodeEnter({
|
|
515
|
+
display: text,
|
|
516
|
+
selection: span,
|
|
517
|
+
mode: 'normal',
|
|
518
|
+
ending
|
|
519
|
+
});
|
|
520
|
+
pendingCursorOffset = commitDisplay(enter.newText, offset, enter.newCursor);
|
|
521
|
+
return true;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
// A closed-fence Enter-exit lands within the fence's OWN container scope: the next
|
|
525
|
+
// sibling, else a paragraph minted in-scope. Without this a nested last child would
|
|
526
|
+
// delegate the caret outside its container.
|
|
527
|
+
function exitDownward(): void {
|
|
528
|
+
const container = myPath.length > 1 ? nodeAt(getDoc(), myPath.slice(0, -1)) : null;
|
|
529
|
+
const isNestedLastChild = !!container?.children && index === container.children.length - 1;
|
|
530
|
+
if (isNestedLastChild) blockEdit.descendToBody(index);
|
|
531
|
+
else focusActions.moveFocus(index + 1, 'start');
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
// Leaving an unclosed fence downward mints its closer, keeping save→reload from lazy-absorbing
|
|
535
|
+
// the trailing blocks into it. Closer and fresh paragraph land as ONE replaceBlock commit.
|
|
536
|
+
function closeUnclosedFenceAndDescend(closedDisplay: string): void {
|
|
537
|
+
const meta = metadataOf(node, 'fencedCode');
|
|
538
|
+
const lineEnding = trailingLineEnding(node.raw);
|
|
539
|
+
const closedFence: CstNode = {
|
|
540
|
+
kind: 'fencedCode',
|
|
541
|
+
leadingTrivia: '',
|
|
542
|
+
raw: closedDisplay + lineEnding,
|
|
543
|
+
metadata: { ...meta, closed: true }
|
|
544
|
+
};
|
|
545
|
+
// The blank separator line and the paragraph's own line are both pure line
|
|
546
|
+
// ending, so both take the fence's (G4.20) — the same one the closer above got.
|
|
547
|
+
const paragraphBelow = emptyParagraph(lineEnding, lineEnding);
|
|
548
|
+
void blockEdit.replaceBlock(index, [closedFence, paragraphBelow], {
|
|
549
|
+
replacementIndex: 1,
|
|
550
|
+
offset: 0
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
void ({
|
|
555
|
+
editable,
|
|
556
|
+
focusable,
|
|
557
|
+
focus,
|
|
558
|
+
parkCaret,
|
|
559
|
+
getCursorOffset,
|
|
560
|
+
focusAtColumn,
|
|
561
|
+
insertMarkdown,
|
|
562
|
+
runCommand
|
|
563
|
+
} satisfies BlockComponent);
|
|
564
|
+
|
|
565
|
+
function currentRange(): { start: number; end: number } {
|
|
566
|
+
if (!el) return { start: 0, end: 0 };
|
|
567
|
+
const sel = getSelectionOffsets(el);
|
|
568
|
+
if (sel) return sel;
|
|
569
|
+
const cursor = backend.getRaw() ?? 0;
|
|
570
|
+
return { start: cursor, end: cursor };
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
function applyIndentResult(result: IndentResult): void {
|
|
574
|
+
const start = commitDisplay(result.text, result.selection.start, result.selection.start);
|
|
575
|
+
if (result.selection.start === result.selection.end) {
|
|
576
|
+
pendingCursorOffset = start;
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
// Both endpoints sit inside the body, so an escalation inserting at the opener
|
|
580
|
+
// run moves them by the same delta.
|
|
581
|
+
const shift = start - result.selection.start;
|
|
582
|
+
pendingSelection = { start, end: result.selection.end + shift };
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
// Both gestures rewrite whole LINES, so their range clamps out of the fence lines —
|
|
586
|
+
// the multi-line sibling of codeNewline's clampEnterOffsetToBody. `el` is required
|
|
587
|
+
// only because currentRange() reads the DOM selection through it.
|
|
588
|
+
function indentSelection(): void {
|
|
589
|
+
if (!el) return;
|
|
590
|
+
applyIndentResult(indentLines(getDisplayText(), clampRangeToBody(node, currentRange())));
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
function dedentSelection(): void {
|
|
594
|
+
if (!el) return;
|
|
595
|
+
const text = getDisplayText();
|
|
596
|
+
const result = dedentLines(text, clampRangeToBody(node, currentRange()));
|
|
597
|
+
if (result.text === text) return;
|
|
598
|
+
applyIndentResult(result);
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
// ── Pointer + clipboard ─────────────────────────────────────────────
|
|
602
|
+
|
|
603
|
+
function onPointerDown(e: PointerEvent): void {
|
|
604
|
+
void crossBlock.handlePointerDown(e);
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
// Code has no ambient markers, so its DOM-text selection IS its raw slice: copy falls
|
|
608
|
+
// to the seam's visible-selection default, and cut writes that string before deleting.
|
|
609
|
+
const clipboard = createClipboardHandlers({
|
|
610
|
+
stickyColumn,
|
|
611
|
+
edgeAffinity,
|
|
612
|
+
selection,
|
|
613
|
+
getDoc,
|
|
614
|
+
crossBlock,
|
|
615
|
+
isReadOnly: () => readOnly,
|
|
616
|
+
caret: editableSurface.caret,
|
|
617
|
+
events: editorEvents,
|
|
618
|
+
onPasteImage,
|
|
619
|
+
// Copy is verbatim while the delete clamps: the clipboard keeps the literal bytes
|
|
620
|
+
// selected, fence characters included, and only the body half is removed.
|
|
621
|
+
cutTail: (e) => {
|
|
622
|
+
e.clipboardData?.setData('text/plain', window.getSelection()?.toString() ?? '');
|
|
623
|
+
if (!el) return;
|
|
624
|
+
const selOffsets = getSelectionOffsets(el);
|
|
625
|
+
if (!selOffsets) return;
|
|
626
|
+
const edit = computeFenceRangedEdit(node, selOffsets, '');
|
|
627
|
+
if (!edit) return;
|
|
628
|
+
pendingCursorOffset = commitDisplay(edit.newText, edit.newCursor, edit.newCursor);
|
|
629
|
+
},
|
|
630
|
+
pasteTail: async (pastedText) => {
|
|
631
|
+
if (!el) return;
|
|
632
|
+
// Paste refuses where typing refuses: a target confined to fence structure has
|
|
633
|
+
// nothing to paste into. The tree-op owns the splice, so the span goes to it.
|
|
634
|
+
const target = currentRange();
|
|
635
|
+
if (isStructureOnlyRange(node, target)) return;
|
|
636
|
+
const sel = fenceEditSpan(node, target);
|
|
637
|
+
const result = await pasteDispatch(
|
|
638
|
+
{
|
|
639
|
+
pastedText,
|
|
640
|
+
targetPath: myPath,
|
|
641
|
+
offset: sel.start,
|
|
642
|
+
preDelete: sel.start !== sel.end ? { start: sel.start, end: sel.end } : undefined
|
|
643
|
+
},
|
|
644
|
+
{
|
|
645
|
+
doc: getDoc(),
|
|
646
|
+
blockEdit,
|
|
647
|
+
controller: pasteCoordinator,
|
|
648
|
+
grammar,
|
|
649
|
+
activePlugins
|
|
650
|
+
}
|
|
651
|
+
);
|
|
652
|
+
|
|
653
|
+
if (result.inlineCaretOffset !== undefined) {
|
|
654
|
+
pendingCursorOffset = result.inlineCaretOffset;
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
});
|
|
658
|
+
const { onCopy, onCut, onPaste } = clipboard;
|
|
659
|
+
|
|
660
|
+
export function insertMarkdown(md: string): boolean {
|
|
661
|
+
return clipboard.insertMarkdown(md);
|
|
662
|
+
}
|
|
663
|
+
</script>
|
|
664
|
+
|
|
665
|
+
<div
|
|
666
|
+
bind:this={el}
|
|
667
|
+
tabindex="0"
|
|
668
|
+
class="code-block"
|
|
669
|
+
contenteditable={readOnly ? 'false' : 'true'}
|
|
670
|
+
aria-readonly={readOnly ? 'true' : undefined}
|
|
671
|
+
role="textbox"
|
|
672
|
+
spellcheck="false"
|
|
673
|
+
oninput={onInput}
|
|
674
|
+
onkeydown={onKeyDown}
|
|
675
|
+
onbeforeinput={onBeforeInput}
|
|
676
|
+
oncopy={onCopy}
|
|
677
|
+
oncut={onCut}
|
|
678
|
+
onpaste={onPaste}
|
|
679
|
+
onpointerdown={onPointerDown}
|
|
680
|
+
oncompositionstart={onCompositionStart}
|
|
681
|
+
oncompositionend={onCompositionEnd}
|
|
682
|
+
></div>
|
|
683
|
+
<!-- Beside the walk container, never inside it: the render effect replaces that element's
|
|
684
|
+
children on every commit, and the offset walk counts everything that survives there. -->
|
|
685
|
+
{#if showChip}
|
|
686
|
+
<CodeLanguageChip
|
|
687
|
+
info={infoString}
|
|
688
|
+
editable={!readOnly}
|
|
689
|
+
onCommit={commitLanguage}
|
|
690
|
+
onCancel={(returnCaret) => returnCaret && returnCaretToBody()}
|
|
691
|
+
/>
|
|
692
|
+
{/if}
|
|
693
|
+
|
|
694
|
+
<style>
|
|
695
|
+
.code-block {
|
|
696
|
+
width: 100%;
|
|
697
|
+
outline: none;
|
|
698
|
+
padding: 12px;
|
|
699
|
+
font-family: var(--font-editor, ui-monospace, monospace);
|
|
700
|
+
font-size: 0.9em;
|
|
701
|
+
line-height: 1.5;
|
|
702
|
+
background: var(--color-bg-secondary, rgba(128, 128, 128, 0.12));
|
|
703
|
+
border: 1px solid var(--color-ui-muted, #a4a4a4);
|
|
704
|
+
border-radius: 4px;
|
|
705
|
+
color: inherit;
|
|
706
|
+
white-space: pre;
|
|
707
|
+
overflow-x: auto;
|
|
708
|
+
overflow-y: hidden;
|
|
709
|
+
tab-size: 4;
|
|
710
|
+
box-sizing: border-box;
|
|
711
|
+
min-height: 1.4em;
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
.code-block:focus {
|
|
715
|
+
border-color: var(--color-accent, #567b67);
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
.code-block :global(.md-marker) {
|
|
719
|
+
opacity: var(--syntax-marker-dim, 0.65);
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
.code-block :global(.md-marker.md-lang) {
|
|
723
|
+
color: var(--color-accent, #567b67);
|
|
724
|
+
opacity: 0.7;
|
|
725
|
+
}
|
|
726
|
+
</style>
|