1.0.20 • Published 1 year ago

@amoayun/monaco-editor-vue3 v1.0.20

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

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

  1. Install dependencies
npm i @amoayun/monaco-editor-vue3
  1. The component relies on Microsoft's monaco-editor, so you need to install it
npm i monaco-editor
  1. Code 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

NameDescriptionTypeDefaultVersion
modelValue (v-model)Bound value (base mode)string--
originalData (v-model)Bound value (diff mode)string--
modifiedData (v-model)Bound value (diff mode)string--
modeEditor mode'diff' | 'base''base'-
languageEditor languagestring"javascript"-
themeEditor theme"vs" | "vs-dark" | "hc-black" | "hc-light""vs-dark"-
placeholderPlaceholder textstring--
disabledDisabled statebase mode: booleandiff mode: boolean, boolean--
configCode editor configurationConfigOptions (see Type below)--
diySuggestCustom suggestionsSuggestItemOptions[] (see Type below)--

Events

Event NameDescriptionParameter
selectSelect content in the editorvalue: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 NameDescriptionParameterReturnVersion
insertTextInsert 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

NameDescriptionTypeDefaultVersion
autoIndentAuto indentation"brackets" | "none" | "keep" | "advanced" | "full""brackets"-
contextmenuRight-click menubooleanfalse-
autoClosingBracketsAuto closing brackets"always" | "languageDefined" | "beforeWhitespace" | "never""always"-
automaticLayoutAutomatic layoutbooleantrue-
cursorBlinkingCursor style"blink" | "smooth" | "phase" | "expand" | "solid""expand"-
dragAndDropAllow content drag and dropbooleantrue-
extraEditorClassNameAdditional editor class namestring"amoayun-monaco-editor"-
fixedOverflowWidgetsFixed overflow widgetsbooleantrue-
glyphMarginShow line number marginbooleanfalse-
lineNumbersDisplay line numbers"on" | "off" | "relative" | "interval""on"-
matchBracketsHighlight matching brackets"never" | "near" | "always""always"-
overviewRulerBorderShow overview ruler borderbooleantrue-
scrollBeyondLastLineAllow scrolling beyond the last linebooleanfalse-
showDeprecatedShow deprecated codebooleanfalse-
showFoldingControlsFolding controls display"always" | "never" | "mouseover""always"-
unfoldOnClickAfterEndOfLineUnfold on end of line clickbooleantrue-
smoothScrollingEnable smooth scrollingbooleantrue-
tabCompletionEnable tab completion"on" | "off" | "onlySnippets""on"-
wordWrapWord wrapping"off" | "on" | "wordWrapColumn" | "bounded""off"-

SuggestItemOptions

NameDescriptionTypeDefaultVersion
labelKeywordstring--
kindSuggestion typenumber17-
insertTextText to insert for the keywordstringUses insertText value first, label second-
detailBrief descriptionstring--
documentationDetailed descriptionstring--
1.0.20

1 year ago

1.0.19

1 year ago

1.0.18

1 year ago

1.0.17

1 year ago

1.0.16

1 year ago

1.0.15

1 year ago

1.0.14

1 year ago

1.0.13

1 year ago

1.0.12

1 year ago

1.0.11

1 year ago

1.0.9

1 year ago

1.0.7

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago