|
21 | 21 | dropCursor,
|
22 | 22 | EditorView,
|
23 | 23 | highlightActiveLine,
|
24 |
| - highlightActiveLineGutter, |
25 | 24 | keymap,
|
26 | 25 | rectangularSelection,
|
27 | 26 | } from "@codemirror/view";
|
28 | 27 | import { printTree } from "@lezer-unofficial/printer";
|
29 | 28 | import { GFM } from "@lezer/markdown";
|
30 | 29 | import { minimalSetup } from "codemirror";
|
31 | 30 | import { hypermdExtensions, hypermdMarkdownExtensions } from "hypermd";
|
32 |
| - import { onMount } from "svelte"; |
| 31 | + import CodeMirror from "svelte-codemirror-editor"; |
33 | 32 |
|
34 | 33 | export interface Props {
|
35 | 34 | value: string;
|
36 | 35 | }
|
37 | 36 |
|
38 | 37 | let { value = $bindable() }: Props = $props();
|
39 | 38 |
|
40 |
| - let container: HTMLDivElement; |
| 39 | + const extensions = [ |
| 40 | + minimalSetup, |
| 41 | + dropCursor(), |
| 42 | + EditorState.allowMultipleSelections.of(true), |
| 43 | + indentOnInput(), |
| 44 | + bracketMatching(), |
| 45 | + closeBrackets(), |
| 46 | + autocompletion(), |
| 47 | + rectangularSelection(), |
| 48 | + crosshairCursor(), |
| 49 | + highlightActiveLine(), |
| 50 | + highlightSelectionMatches(), |
41 | 51 |
|
42 |
| - onMount(() => { |
43 |
| - new EditorView({ |
44 |
| - doc: value, |
45 |
| - extensions: [ |
46 |
| - minimalSetup, |
| 52 | + EditorView.lineWrapping, |
| 53 | + hypermdExtensions, |
| 54 | + keymap.of([ |
| 55 | + ...closeBracketsKeymap, |
| 56 | + ...searchKeymap, |
| 57 | + ...foldKeymap, |
| 58 | + ...completionKeymap, |
47 | 59 |
|
48 |
| - highlightActiveLineGutter(), |
49 |
| - dropCursor(), |
50 |
| - EditorState.allowMultipleSelections.of(true), |
51 |
| - indentOnInput(), |
52 |
| - bracketMatching(), |
53 |
| - closeBrackets(), |
54 |
| - autocompletion(), |
55 |
| - rectangularSelection(), |
56 |
| - crosshairCursor(), |
57 |
| - highlightActiveLine(), |
58 |
| - highlightSelectionMatches(), |
| 60 | + indentWithTab, |
59 | 61 |
|
60 |
| - markdown({ |
61 |
| - codeLanguages: languages, |
62 |
| - extensions: [GFM, hypermdMarkdownExtensions], |
63 |
| - }), |
64 |
| - EditorView.lineWrapping, |
65 |
| - hypermdExtensions, |
66 |
| - keymap.of([ |
67 |
| - ...closeBracketsKeymap, |
68 |
| - ...searchKeymap, |
69 |
| - ...foldKeymap, |
70 |
| - ...completionKeymap, |
| 62 | + // Debugging |
| 63 | + { |
| 64 | + key: "Alt-p", |
| 65 | + run: (view) => { |
| 66 | + if (import.meta.env.PROD) return true; |
71 | 67 |
|
72 |
| - indentWithTab, |
| 68 | + console.debug( |
| 69 | + printTree(syntaxTree(view.state), view.state.doc.toString()), |
| 70 | + ); |
73 | 71 |
|
74 |
| - // Debugging |
75 |
| - { |
76 |
| - key: "Alt-p", |
77 |
| - run: (view) => { |
78 |
| - if (import.meta.env.PROD) return true; |
79 |
| -
|
80 |
| - console.debug( |
81 |
| - printTree(syntaxTree(view.state), view.state.doc.toString()), |
82 |
| - ); |
83 |
| -
|
84 |
| - return true; |
85 |
| - }, |
86 |
| - }, |
87 |
| - ]), |
88 |
| - ], |
89 |
| - parent: container, |
90 |
| - }); |
91 |
| - }); |
| 72 | + return true; |
| 73 | + }, |
| 74 | + }, |
| 75 | + ]), |
| 76 | + ]; |
92 | 77 | </script>
|
93 | 78 |
|
94 |
| -<div bind:this={container}></div> |
| 79 | +<CodeMirror |
| 80 | + basic={false} |
| 81 | + {extensions} |
| 82 | + lang={markdown({ |
| 83 | + codeLanguages: languages, |
| 84 | + extensions: [GFM, hypermdMarkdownExtensions], |
| 85 | + })} |
| 86 | + bind:value |
| 87 | +/> |
0 commit comments