@tntd/monaco-editor 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +195 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
package/README.md
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# @tntd/monaco-editor
|
|
2
|
+
|
|
3
|
+
基于 Monaco Editor 封装的代码编辑器组件,提供了丰富的编辑功能和自定义主题支持。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @tntd/monaco-editor --save
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 特性
|
|
12
|
+
|
|
13
|
+
- 🎨 支持自定义主题
|
|
14
|
+
- 🌍 支持国际化(中文/英文)
|
|
15
|
+
- 🔍 支持关键字高亮
|
|
16
|
+
- 📝 支持公式编辑模式
|
|
17
|
+
- 🔄 支持 Diff 对比模式
|
|
18
|
+
- 🔌 插件化架构
|
|
19
|
+
|
|
20
|
+
## 基础使用
|
|
21
|
+
|
|
22
|
+
```jsx
|
|
23
|
+
import MonacoEditor from '@tntd/monaco-editor';
|
|
24
|
+
|
|
25
|
+
const App = () => {
|
|
26
|
+
return (
|
|
27
|
+
<MonacoEditor
|
|
28
|
+
language="javascript"
|
|
29
|
+
defaultValue={code}
|
|
30
|
+
onChange={(value) => console.log(value)}
|
|
31
|
+
/>
|
|
32
|
+
);
|
|
33
|
+
};
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## API
|
|
37
|
+
|
|
38
|
+
### 基础配置项
|
|
39
|
+
|
|
40
|
+
| 参数 | 说明 | 类型 | 默认值 |
|
|
41
|
+
| --- | --- | --- | --- |
|
|
42
|
+
| language | 编辑器语言 | string | 'javascript' |
|
|
43
|
+
| value | 编辑器内容 | string | - |
|
|
44
|
+
| onChange | 内容变化回调函数 | (value: string) => void | - |
|
|
45
|
+
| path | Monaco Editor 资源文件路径 | string | '/vs' |
|
|
46
|
+
| theme | 主题 | 'vs-dark' \| 'tntd-vs-dark' \| string | 'vs-dark' |
|
|
47
|
+
| options | 编辑器配置项 | object | defaultOptions |
|
|
48
|
+
| isDiff | 是否启用对比模式 | boolean | false |
|
|
49
|
+
| isFormula | 是否启用公式编辑模式 | boolean | false |
|
|
50
|
+
| keywords | 需要高亮的关键字列表 | string[] | [] |
|
|
51
|
+
|
|
52
|
+
### 编辑器事件
|
|
53
|
+
|
|
54
|
+
| 事件名 | 说明 | 参数 |
|
|
55
|
+
| --- | --- | --- |
|
|
56
|
+
| editorWillMount | 编辑器挂载前的回调 | (monaco: any) => object |
|
|
57
|
+
| editorDidMount | 编辑器挂载后的回调 | ({ monaco, editor }) => void |
|
|
58
|
+
| editorWillUnmount | 编辑器卸载前的回调 | (editor: any) => void |
|
|
59
|
+
|
|
60
|
+
### 默认编辑器配置
|
|
61
|
+
|
|
62
|
+
```javascript
|
|
63
|
+
const defaultOptions = {
|
|
64
|
+
selectOnLineNumbers: true,
|
|
65
|
+
fontSize: 14,
|
|
66
|
+
lineHeight: 24,
|
|
67
|
+
tabSize: 2,
|
|
68
|
+
minimap: { enabled: false },
|
|
69
|
+
automaticLayout: true,
|
|
70
|
+
scrollBeyondLastLine: false,
|
|
71
|
+
// ... 更多配置项见代码
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 主题配置
|
|
76
|
+
|
|
77
|
+
组件内置了 `tntd-vs-dark` 主题,提供了以下默认颜色配置:
|
|
78
|
+
|
|
79
|
+
```javascript
|
|
80
|
+
const defaultThemeColor = {
|
|
81
|
+
'editor.background': '#17233D',
|
|
82
|
+
'editor.foreground': '#BABDC5',
|
|
83
|
+
'editorGutter.background': '#212c45',
|
|
84
|
+
'editorLineNumber.foreground': '#BABDC5',
|
|
85
|
+
'editorCursor.foreground': '#ff9800',
|
|
86
|
+
'editor.lineHighlightBackground': '#002240',
|
|
87
|
+
// ... 更多颜色配置见代码
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 实例方法
|
|
92
|
+
|
|
93
|
+
| 方法名 | 说明 | 参数 |
|
|
94
|
+
| --- | --- | --- |
|
|
95
|
+
| getValue | 获取编辑器内容 | () => string |
|
|
96
|
+
| setValue | 设置编辑器内容 | (value: string) => void |
|
|
97
|
+
| getPosition | 获取光标位置 | () => Position |
|
|
98
|
+
| setPosition | 设置光标位置 | (position: Position) => void |
|
|
99
|
+
| focus | 使编辑器获得焦点 | () => void |
|
|
100
|
+
| layout | 重新布局编辑器 | () => void |
|
|
101
|
+
| updateOptions | 更新编辑器配置 | (options: object) => void |
|
|
102
|
+
| insertText | 在光标位置插入文本 | (content: string) => void |
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
### 插件系统
|
|
106
|
+
|
|
107
|
+
组件支持通过插件扩展功能:
|
|
108
|
+
|
|
109
|
+
```javascript
|
|
110
|
+
editor.use({
|
|
111
|
+
name: 'myPlugin',
|
|
112
|
+
apply: (editor) => {
|
|
113
|
+
// 插件逻辑
|
|
114
|
+
return {
|
|
115
|
+
dispose: () => {
|
|
116
|
+
// 清理逻辑
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## 注意事项
|
|
124
|
+
|
|
125
|
+
1. 确保 Monaco Editor 资源文件路径配置正确
|
|
126
|
+
2. 在生产环境中,建议使用 `CopyWebpackPlugin` 复制 Monaco Editor 资源文件
|
|
127
|
+
3. 使用 Diff 模式时,需要同时提供 `original` 和 `modified` 属性
|
|
128
|
+
4. 自定义主题时,建议继承 `vs-dark` 主题进行扩展
|
|
129
|
+
|
|
130
|
+
## 示例
|
|
131
|
+
|
|
132
|
+
### 基础编辑器
|
|
133
|
+
|
|
134
|
+
```jsx
|
|
135
|
+
import MonacoEditor from '@tntd/monaco-editor';
|
|
136
|
+
|
|
137
|
+
const App = () => {
|
|
138
|
+
const handleEditorDidMount = ({ monaco, editor }) => {
|
|
139
|
+
// 编辑器初始化完成后的操作
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
return (
|
|
143
|
+
<MonacoEditor
|
|
144
|
+
language="javascript"
|
|
145
|
+
value={code}
|
|
146
|
+
onChange={handleChange}
|
|
147
|
+
editorDidMount={handleEditorDidMount}
|
|
148
|
+
options={{
|
|
149
|
+
fontSize: 16,
|
|
150
|
+
minimap: { enabled: true }
|
|
151
|
+
}}
|
|
152
|
+
/>
|
|
153
|
+
);
|
|
154
|
+
};
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### 对比模式
|
|
158
|
+
|
|
159
|
+
```jsx
|
|
160
|
+
import {DiffEditor} from '@tntd/monaco-editor';
|
|
161
|
+
|
|
162
|
+
const App = () => {
|
|
163
|
+
return (
|
|
164
|
+
<DiffEditor
|
|
165
|
+
isDiff={true}
|
|
166
|
+
original={originalCode}
|
|
167
|
+
modified={modifiedCode}
|
|
168
|
+
language="javascript"
|
|
169
|
+
/>
|
|
170
|
+
);
|
|
171
|
+
};
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 公式编辑模式
|
|
175
|
+
|
|
176
|
+
```jsx
|
|
177
|
+
import {FormulaEditor} from '@tntd/monaco-editor';
|
|
178
|
+
|
|
179
|
+
const App = () => {
|
|
180
|
+
return (
|
|
181
|
+
<FormulaEditor
|
|
182
|
+
fieldList={fieldList || []} // @唤起
|
|
183
|
+
methodList={methodList || []} // #唤起
|
|
184
|
+
readOnly={readOnly}
|
|
185
|
+
cnCodeToEnExtraLogic={(item) => {
|
|
186
|
+
if (item.type) {
|
|
187
|
+
return `α${item.type}`;
|
|
188
|
+
}
|
|
189
|
+
}}
|
|
190
|
+
enCodeToCnExtraLogic={()=>{}}
|
|
191
|
+
cnCodeToEnUniqueLogic={({ group2, group1, list, turnStr }) => {}}
|
|
192
|
+
/>
|
|
193
|
+
);
|
|
194
|
+
};
|
|
195
|
+
```
|