This commit is contained in:
2025-05-10 14:29:36 +08:00
parent b4c367b799
commit bb7ee2d2a5
15 changed files with 367 additions and 1150 deletions

64
packages/codemirror/.gitignore vendored Normal file
View File

@@ -0,0 +1,64 @@
node_modules
# mac
.DS_Store
.env*
!.env*example
dist
# build
/build
/logs
.turbo
/pack-dist
# astro
.astro
# next
.next
# nuxt
.nuxt
# vercel
.vercel
# vuepress
.vuepress/dist
# coverage
coverage/
# typescript
*.tsbuildinfo
# debug logs
*.log
*.tmp
# vscode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# idea
.idea
# system
Thumbs.db
ehthumbs.db
Desktop.ini
# temp files
*.tmp
*.temp
# local development
*.local

View File

@@ -1,6 +1,6 @@
{
"name": "@kevisual/codemirror",
"version": "0.0.3",
"version": "0.0.4",
"description": "",
"main": "dist/editor.js",
"private": false,

View File

@@ -1,11 +1,13 @@
import { EditorView, basicSetup } from 'codemirror';
import { javascript } from '@codemirror/lang-javascript';
import { json } from '@codemirror/lang-json';
let editor: EditorView = null;
type CreateOpts = {
jsx?: boolean;
typescript?: boolean;
type?: 'javascript' | 'json';
};
/**
* 创建单例
@@ -19,9 +21,15 @@ const createEditorInstance = (el?: HTMLDivElement, opts?: CreateOpts) => {
} else if (editor) {
return editor;
}
const { jsx, typescript } = opts || {};
const { type = 'javascript' } = opts || {};
const plugins = [basicSetup];
if (type === 'json') {
plugins.push(json());
} else {
plugins.push(javascript({ jsx: opts?.jsx, typescript: opts?.typescript }));
}
editor = new EditorView({
extensions: [basicSetup, javascript({ jsx, typescript })],
extensions: plugins,
parent: el || document.body,
});
editor.dom.style.height = '100%';
@@ -34,8 +42,15 @@ const createEditorInstance = (el?: HTMLDivElement, opts?: CreateOpts) => {
* @returns
*/
export const createEditor = (el: HTMLDivElement, opts?: CreateOpts) => {
const { type = 'javascript' } = opts || {};
const plugins = [basicSetup];
if (type === 'json') {
plugins.push(json());
} else {
plugins.push(javascript({ jsx: opts?.jsx, typescript: opts?.typescript }));
}
const editor = new EditorView({
extensions: [basicSetup, javascript({ jsx: opts?.jsx, typescript: opts?.typescript })],
extensions: plugins,
parent: el || document.body,
});
editor.dom.style.height = '100%';