1.0.20 • Published 10 months ago
@amoayun/monaco-editor-vue3 v1.0.20
Feature Support
- ✅ ✨Two modes: 
diff(code comparison editor),base(regular code editor) - ✅ ✨Two-way data binding: supports 
v-model,v-model:originalData,v-model:modifiedData - ✅ ✨Multiple themes: 
vs,vs-dark,hc-black,hc-light - ✅ ✨Multiple language highlighting: JSON, CSS, SCSS, LESS, HTML, TypeScript, JavaScript, etc.
 - ✅ ✨Multiple language code suggestions and customizable code suggestions
 - ✅ ✨Insert text
 - ✅ ✨Real-time content selection
 - ✅ ✨Elimination of monaco-editor side effects
 - More features can be experienced in the Online Demo
 
Online Demo
For more features, please visit the Online Demo
Quick Start
- Install dependencies
 
npm i @amoayun/monaco-editor-vue3- The component relies on Microsoft's 
monaco-editor, so you need to install it 
npm i monaco-editorCode Import
Note: In diff mode, you need to pass two v-model values: originalData and modifiedData, instead of the default modelValue (see Props in the Advanced Usage section for details).
<template>
    <div>
        <AmoAYunMonacoEditorVue3 v-model="content" language="javascript"  style="width: 100%;height: 400px;" />
    </div>
</template>
<script setup lang="ts">
    import { ref } from "vue";
    import { AmoAYunMonacoEditorVue3 } from "@amoayun/monaco-editor-vue3";
    import editorWorker from "monaco-editor/esm/vs/editor/editor.worker?worker";
    import jsonWorker from "monaco-editor/esm/vs/language/json/json.worker?worker";
    import cssWorker from "monaco-editor/esm/vs/language/css/css.worker?worker";
    import htmlWorker from "monaco-editor/esm/vs/language/html/html.worker?worker";
    import tsWorker from "monaco-editor/esm/vs/language/typescript/ts.worker?worker";
    self.MonacoEnvironment = {
        getWorker(_, label) {
            switch (label) {
                case "json":
                    return new jsonWorker();
                case "css":
                case "scss":
                case "less":
                    return new cssWorker();
                case "html":
                case "handlebars":
                case "razor":
                    return new htmlWorker();
                case "typescript":
                case "javascript":
                    return new tsWorker();
                default:
                    return new editorWorker();
            }
        },
    };
    const content = ref("");
</script>Advanced Usage
Props
| Name | Description | Type | Default | Version | 
|---|---|---|---|---|
modelValue (v-model) | Bound value (base mode) | string | - | - | 
originalData (v-model) | Bound value (diff mode) | string | - | - | 
modifiedData (v-model) | Bound value (diff mode) | string | - | - | 
| mode | Editor mode | 'diff' | 'base' | 'base' | - | 
| language | Editor language | string | "javascript" | - | 
| theme | Editor theme | "vs" | "vs-dark" | "hc-black" | "hc-light" | "vs-dark" | - | 
| placeholder | Placeholder text | string | - | - | 
| disabled | Disabled state | base mode: booleandiff mode: boolean, boolean | - | - | 
| config | Code editor configuration | ConfigOptions (see Type below) | - | - | 
| diySuggest | Custom suggestions | SuggestItemOptions[] (see Type below) | - | - | 
Events
| Event Name | Description | Parameter | 
|---|---|---|
| select | Select content in the editor | value:string | 
- Example Usage:
 
<template>
    <div>
        <AmoAYunMonacoEditorVue3 v-model="content" language="javascript" style="width: 100%;height: 400px;" @select="handleSelect" />
    </div>
</template>
<script setup lang="ts">
    import { ref } from "vue";
    import { AmoAYunMonacoEditorVue3 } from "@amoayun/monaco-editor-vue3";
    import editorWorker from "monaco-editor/esm/vs/editor/editor.worker?worker";
    import jsonWorker from "monaco-editor/esm/vs/language/json/json.worker?worker";
    import cssWorker from "monaco-editor/esm/vs/language/css/css.worker?worker";
    import htmlWorker from "monaco-editor/esm/vs/language/html/html.worker?worker";
    import tsWorker from "monaco-editor/esm/vs/language/typescript/ts.worker?worker";
    self.MonacoEnvironment = {
        getWorker(_, label) {
            switch (label) {
                case "json":
                    return new jsonWorker();
                case "css":
                case "scss":
                case "less":
                    return new cssWorker();
                case "html":
                case "handlebars":
                case "razor":
                    return new htmlWorker();
                case "typescript":
                case "javascript":
                    return new tsWorker();
                default:
                    return new editorWorker();
            }
        },
    };
    const content = ref("");
    const handleSelect = (value: string) => {
        console.log(value);
    };
</script>Methods
| Method Name | Description | Parameter | Return | Version | 
|---|---|---|---|---|
| insertText | Insert content (only available in base mode) | field:string | - | - | 
- Example Usage:
 
<template>
    <div>
        <AmoAYunMonacoEditorVue3 v-model="content" language="javascript" style="width: 100%;height: 400px;" ref="editor" />
        <button @click="handleInsert">Insert Content</button>
    </div>
</template>
<script setup lang="ts">
    import { ref } from "vue";
    import { AmoAYunMonacoEditorVue3 } from "@amoayun/monaco-editor-vue3";
    import editorWorker from "monaco-editor/esm/vs/editor/editor.worker?worker";
    import jsonWorker from "monaco-editor/esm/vs/language/json/json.worker?worker";
    import cssWorker from "monaco-editor/esm/vs/language/css/css.worker?worker";
    import htmlWorker from "monaco-editor/esm/vs/language/html/html.worker?worker";
    import tsWorker from "monaco-editor/esm/vs/language/typescript/ts.worker?worker";
    self.MonacoEnvironment = {
        getWorker(_, label) {
            switch (label) {
                case "json":
                    return new jsonWorker();
                case "css":
                case "scss":
                case "less":
                    return new cssWorker();
                case "html":
                case "handlebars":
                case "razor":
                    return new htmlWorker();
                case "typescript":
                case "javascript":
                    return new tsWorker();
                default:
                    return new editorWorker();
            }
        },
    };
    const content = ref<string>("");
    const editor = ref<any>(null);
    const handleInsert = () => {
        editor.value?.insertText("hello world");
    };
</script>Type
ConfigOptions
| Name | Description | Type | Default | Version | 
|---|---|---|---|---|
| autoIndent | Auto indentation | "brackets" | "none" | "keep" | "advanced" | "full" | "brackets" | - | 
| contextmenu | Right-click menu | boolean | false | - | 
| autoClosingBrackets | Auto closing brackets | "always" | "languageDefined" | "beforeWhitespace" | "never" | "always" | - | 
| automaticLayout | Automatic layout | boolean | true | - | 
| cursorBlinking | Cursor style | "blink" | "smooth" | "phase" | "expand" | "solid" | "expand" | - | 
| dragAndDrop | Allow content drag and drop | boolean | true | - | 
| extraEditorClassName | Additional editor class name | string | "amoayun-monaco-editor" | - | 
| fixedOverflowWidgets | Fixed overflow widgets | boolean | true | - | 
| glyphMargin | Show line number margin | boolean | false | - | 
| lineNumbers | Display line numbers | "on" | "off" | "relative" | "interval" | "on" | - | 
| matchBrackets | Highlight matching brackets | "never" | "near" | "always" | "always" | - | 
| overviewRulerBorder | Show overview ruler border | boolean | true | - | 
| scrollBeyondLastLine | Allow scrolling beyond the last line | boolean | false | - | 
| showDeprecated | Show deprecated code | boolean | false | - | 
| showFoldingControls | Folding controls display | "always" | "never" | "mouseover" | "always" | - | 
| unfoldOnClickAfterEndOfLine | Unfold on end of line click | boolean | true | - | 
| smoothScrolling | Enable smooth scrolling | boolean | true | - | 
| tabCompletion | Enable tab completion | "on" | "off" | "onlySnippets" | "on" | - | 
| wordWrap | Word wrapping | "off" | "on" | "wordWrapColumn" | "bounded" | "off" | - | 
SuggestItemOptions
| Name | Description | Type | Default | Version | 
|---|---|---|---|---|
| label | Keyword | string | - | - | 
| kind | Suggestion type | number | 17 | - | 
| insertText | Text to insert for the keyword | string | Uses insertText value first, label second | - | 
| detail | Brief description | string | - | - | 
| documentation | Detailed description | string | - | - | 
1.0.20
10 months ago
1.0.19
10 months ago
1.0.18
10 months ago
1.0.17
10 months ago
1.0.16
10 months ago
1.0.15
10 months ago
1.0.14
10 months ago
1.0.13
10 months ago
1.0.12
10 months ago
1.0.11
10 months ago
1.0.9
10 months ago
1.0.7
10 months ago
1.0.5
10 months ago
1.0.4
10 months ago
1.0.3
10 months ago
1.0.2
11 months ago
1.0.1
11 months ago