mirror of
https://github.com/CorentinTh/it-tools.git
synced 2025-07-18 20:59:37 +02:00
69 lines
1.5 KiB
Vue
69 lines
1.5 KiB
Vue
|
<script setup lang="ts">
|
||
|
import * as monaco from 'monaco-editor';
|
||
|
import { useStyleStore } from '@/stores/style.store';
|
||
|
|
||
|
const props = withDefaults(defineProps<{ options?: monaco.editor.IDiffEditorOptions }>(), { options: () => ({}) });
|
||
|
const { options } = toRefs(props);
|
||
|
|
||
|
const editorContainer = ref<HTMLElement | null>(null);
|
||
|
let editor: monaco.editor.IStandaloneDiffEditor | null = null;
|
||
|
|
||
|
monaco.editor.defineTheme('it-tools-dark', {
|
||
|
base: 'vs-dark',
|
||
|
inherit: true,
|
||
|
rules: [],
|
||
|
colors: {
|
||
|
'editor.background': '#00000000',
|
||
|
},
|
||
|
});
|
||
|
|
||
|
monaco.editor.defineTheme('it-tools-light', {
|
||
|
base: 'vs',
|
||
|
inherit: true,
|
||
|
rules: [],
|
||
|
colors: {
|
||
|
'editor.background': '#00000000',
|
||
|
},
|
||
|
});
|
||
|
|
||
|
const styleStore = useStyleStore();
|
||
|
|
||
|
watch(
|
||
|
() => styleStore.isDarkTheme,
|
||
|
isDarkTheme => monaco.editor.setTheme(isDarkTheme ? 'it-tools-dark' : 'it-tools-light'),
|
||
|
{ immediate: true },
|
||
|
);
|
||
|
|
||
|
watch(
|
||
|
() => options.value,
|
||
|
options => editor?.updateOptions(options),
|
||
|
{ immediate: true, deep: true },
|
||
|
);
|
||
|
|
||
|
useResizeObserver(editorContainer, () => {
|
||
|
editor?.layout();
|
||
|
});
|
||
|
|
||
|
onMounted(() => {
|
||
|
if (!editorContainer.value) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
editor = monaco.editor.createDiffEditor(editorContainer.value, {
|
||
|
originalEditable: true,
|
||
|
minimap: {
|
||
|
enabled: false,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
editor.setModel({
|
||
|
original: monaco.editor.createModel('original text', 'txt'),
|
||
|
modified: monaco.editor.createModel('modified text', 'txt'),
|
||
|
});
|
||
|
});
|
||
|
</script>
|
||
|
|
||
|
<template>
|
||
|
<div ref="editorContainer" h-600px />
|
||
|
</template>
|