1.0.20 • Published 10 months ago

@amoayun/monaco-editor-vue3 v1.0.20

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months 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

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