Commit a812685084b45ce3c6b6675bb1569e324f742416
1 parent
c04e8943
feat: add codeEditor component
Showing
19 changed files
with
1159 additions
and
41 deletions
CHANGELOG.zh_CN.md
package.json
@@ -39,6 +39,7 @@ | @@ -39,6 +39,7 @@ | ||
39 | "@zxcvbn-ts/core": "^0.3.0", | 39 | "@zxcvbn-ts/core": "^0.3.0", |
40 | "ant-design-vue": "^2.1.2", | 40 | "ant-design-vue": "^2.1.2", |
41 | "axios": "^0.21.1", | 41 | "axios": "^0.21.1", |
42 | + "codemirror": "^5.60.0", | ||
42 | "cropperjs": "^1.5.11", | 43 | "cropperjs": "^1.5.11", |
43 | "crypto-js": "^4.0.0", | 44 | "crypto-js": "^4.0.0", |
44 | "echarts": "^5.1.0", | 45 | "echarts": "^5.1.0", |
@@ -64,6 +65,7 @@ | @@ -64,6 +65,7 @@ | ||
64 | "@commitlint/config-conventional": "^12.1.1", | 65 | "@commitlint/config-conventional": "^12.1.1", |
65 | "@iconify/json": "^1.1.330", | 66 | "@iconify/json": "^1.1.330", |
66 | "@purge-icons/generated": "^0.7.0", | 67 | "@purge-icons/generated": "^0.7.0", |
68 | + "@types/codemirror": "^0.0.109", | ||
67 | "@types/crypto-js": "^4.0.1", | 69 | "@types/crypto-js": "^4.0.1", |
68 | "@types/fs-extra": "^9.0.11", | 70 | "@types/fs-extra": "^9.0.11", |
69 | "@types/inquirer": "^7.3.1", | 71 | "@types/inquirer": "^7.3.1", |
src/components/CodeEditor/index.ts
0 → 100644
src/components/CodeEditor/src/CodeEditor.vue
0 → 100644
1 | +<template> | ||
2 | + <div class="h-full"> | ||
3 | + <CodeMirrorEditor :value="getValue" @change="handleValueChange" :mode="mode" /> | ||
4 | + </div> | ||
5 | +</template> | ||
6 | +<script lang="ts"> | ||
7 | + import { defineComponent, computed } from 'vue'; | ||
8 | + import CodeMirrorEditor from './codemirror/CodeMirror.vue'; | ||
9 | + import { isString } from '/@/utils/is'; | ||
10 | + | ||
11 | + const MODE = { | ||
12 | + JSON: 'application/json', | ||
13 | + html: 'htmlmixed', | ||
14 | + js: 'javascript', | ||
15 | + }; | ||
16 | + export default defineComponent({ | ||
17 | + name: 'CodeEditor', | ||
18 | + components: { CodeMirrorEditor }, | ||
19 | + props: { | ||
20 | + value: { | ||
21 | + type: [Object, String], | ||
22 | + }, | ||
23 | + mode: { | ||
24 | + type: String, | ||
25 | + default: MODE.JSON, | ||
26 | + }, | ||
27 | + }, | ||
28 | + emits: ['change'], | ||
29 | + setup(props, { emit }) { | ||
30 | + const getValue = computed(() => { | ||
31 | + const { value, mode } = props; | ||
32 | + | ||
33 | + if (mode === MODE.JSON) { | ||
34 | + return isString(value) | ||
35 | + ? JSON.stringify(JSON.parse(value), null, 2) | ||
36 | + : JSON.stringify(value, null, 2); | ||
37 | + } | ||
38 | + return value; | ||
39 | + }); | ||
40 | + | ||
41 | + function handleValueChange(v) { | ||
42 | + emit('change', v); | ||
43 | + } | ||
44 | + | ||
45 | + return { | ||
46 | + handleValueChange, | ||
47 | + getValue, | ||
48 | + }; | ||
49 | + }, | ||
50 | + }); | ||
51 | +</script> |
src/components/CodeEditor/src/codemirror/CodeMirror.vue
0 → 100644
1 | +<template> | ||
2 | + <div class="relative h-100 !h-full w-full overflow-hidden" ref="el"> </div> | ||
3 | +</template> | ||
4 | + | ||
5 | +<script lang="ts"> | ||
6 | + import { | ||
7 | + ref, | ||
8 | + onMounted, | ||
9 | + onUnmounted, | ||
10 | + watchEffect, | ||
11 | + watch, | ||
12 | + defineComponent, | ||
13 | + unref, | ||
14 | + nextTick, | ||
15 | + } from 'vue'; | ||
16 | + import { useDebounceFn } from '@vueuse/core'; | ||
17 | + import { useAppStore } from '/@/store/modules/app'; | ||
18 | + | ||
19 | + import CodeMirror from 'codemirror'; | ||
20 | + import './codemirror.css'; | ||
21 | + import 'codemirror/theme/idea.css'; | ||
22 | + import 'codemirror/theme/material-palenight.css'; | ||
23 | + | ||
24 | + // modes | ||
25 | + import 'codemirror/mode/javascript/javascript'; | ||
26 | + import 'codemirror/mode/css/css'; | ||
27 | + import 'codemirror/mode/htmlmixed/htmlmixed'; | ||
28 | + export default defineComponent({ | ||
29 | + props: { | ||
30 | + mode: { | ||
31 | + type: String, | ||
32 | + default: 'application/json', | ||
33 | + }, | ||
34 | + value: { | ||
35 | + type: String, | ||
36 | + default: '', | ||
37 | + }, | ||
38 | + readonly: { | ||
39 | + type: Boolean, | ||
40 | + default: false, | ||
41 | + }, | ||
42 | + }, | ||
43 | + emits: ['change'], | ||
44 | + setup(props, { emit }) { | ||
45 | + const el = ref(); | ||
46 | + let editor: Nullable<CodeMirror.Editor>; | ||
47 | + | ||
48 | + const debounceRefresh = useDebounceFn(refresh, 100); | ||
49 | + const appStore = useAppStore(); | ||
50 | + | ||
51 | + watch( | ||
52 | + () => props.value, | ||
53 | + async (v) => { | ||
54 | + await nextTick(); | ||
55 | + const oldValue = editor?.getValue(); | ||
56 | + v && v !== oldValue && editor?.setValue(v); | ||
57 | + }, | ||
58 | + { flush: 'post' } | ||
59 | + ); | ||
60 | + | ||
61 | + watchEffect(() => { | ||
62 | + editor?.setOption('mode', props.mode); | ||
63 | + }); | ||
64 | + | ||
65 | + watch( | ||
66 | + () => appStore.getDarkMode, | ||
67 | + async () => { | ||
68 | + setTheme(); | ||
69 | + }, | ||
70 | + { | ||
71 | + immediate: true, | ||
72 | + } | ||
73 | + ); | ||
74 | + | ||
75 | + function setTheme() { | ||
76 | + unref(editor)?.setOption( | ||
77 | + 'theme', | ||
78 | + appStore.getDarkMode === 'light' ? 'idea' : 'material-palenight' | ||
79 | + ); | ||
80 | + } | ||
81 | + | ||
82 | + function refresh() { | ||
83 | + editor?.refresh(); | ||
84 | + } | ||
85 | + | ||
86 | + async function init() { | ||
87 | + const addonOptions = { | ||
88 | + autoCloseBrackets: true, | ||
89 | + autoCloseTags: true, | ||
90 | + foldGutter: true, | ||
91 | + gutters: ['CodeMirror-linenumbers'], | ||
92 | + }; | ||
93 | + | ||
94 | + editor = CodeMirror(el.value!, { | ||
95 | + value: '', | ||
96 | + mode: props.mode, | ||
97 | + readOnly: props.readonly, | ||
98 | + tabSize: 2, | ||
99 | + theme: 'material-palenight', | ||
100 | + lineWrapping: true, | ||
101 | + lineNumbers: true, | ||
102 | + ...addonOptions, | ||
103 | + }); | ||
104 | + editor?.setValue(props.value); | ||
105 | + setTheme(); | ||
106 | + editor?.on('change', () => { | ||
107 | + emit('change', editor?.getValue()); | ||
108 | + }); | ||
109 | + } | ||
110 | + | ||
111 | + onMounted(async () => { | ||
112 | + await nextTick(); | ||
113 | + init(); | ||
114 | + window.addEventListener('resize', debounceRefresh); | ||
115 | + setTimeout(refresh, 50); | ||
116 | + }); | ||
117 | + | ||
118 | + onUnmounted(() => { | ||
119 | + window.removeEventListener('resize', debounceRefresh); | ||
120 | + editor = null; | ||
121 | + }); | ||
122 | + return { el }; | ||
123 | + }, | ||
124 | + }); | ||
125 | +</script> |
src/components/CodeEditor/src/codemirror/codeMirror.ts
0 → 100644
1 | +import CodeMirror from 'codemirror'; | ||
2 | +import './codemirror.css'; | ||
3 | +import 'codemirror/theme/idea.css'; | ||
4 | +import 'codemirror/theme/material-palenight.css'; | ||
5 | +// import 'codemirror/addon/lint/lint.css'; | ||
6 | + | ||
7 | +// modes | ||
8 | +import 'codemirror/mode/javascript/javascript'; | ||
9 | +import 'codemirror/mode/css/css'; | ||
10 | +import 'codemirror/mode/htmlmixed/htmlmixed'; | ||
11 | +// addons | ||
12 | +// import 'codemirror/addon/edit/closebrackets'; | ||
13 | +// import 'codemirror/addon/edit/closetag'; | ||
14 | +// import 'codemirror/addon/comment/comment'; | ||
15 | +// import 'codemirror/addon/fold/foldcode'; | ||
16 | +// import 'codemirror/addon/fold/foldgutter'; | ||
17 | +// import 'codemirror/addon/fold/brace-fold'; | ||
18 | +// import 'codemirror/addon/fold/indent-fold'; | ||
19 | +// import 'codemirror/addon/lint/json-lint'; | ||
20 | +// import 'codemirror/addon/fold/comment-fold'; | ||
21 | +export { CodeMirror }; |
src/components/CodeEditor/src/codemirror/codemirror.css
0 → 100644
1 | +/* BASICS */ | ||
2 | + | ||
3 | +.CodeMirror { | ||
4 | + --base: #545281; | ||
5 | + --comment: hsl(210, 25%, 60%); | ||
6 | + --keyword: #af4ab1; | ||
7 | + --variable: #0055d1; | ||
8 | + --function: #c25205; | ||
9 | + --string: #2ba46d; | ||
10 | + --number: #c25205; | ||
11 | + --tags: #d00; | ||
12 | + --qualifier: #ff6032; | ||
13 | + --important: var(--string); | ||
14 | + | ||
15 | + height: auto; | ||
16 | + height: 100%; | ||
17 | + font-family: var(--font-code); | ||
18 | + direction: ltr; | ||
19 | +} | ||
20 | + | ||
21 | +/* PADDING */ | ||
22 | + | ||
23 | +.CodeMirror-lines { | ||
24 | + padding: 4px 0; /* Vertical padding around content */ | ||
25 | +} | ||
26 | + | ||
27 | +.CodeMirror pre { | ||
28 | + padding: 0 4px; /* Horizontal padding of content */ | ||
29 | +} | ||
30 | + | ||
31 | +.CodeMirror-scrollbar-filler, | ||
32 | +.CodeMirror-gutter-filler { | ||
33 | + background-color: white; /* The little square between H and V scrollbars */ | ||
34 | +} | ||
35 | + | ||
36 | +/* GUTTER */ | ||
37 | + | ||
38 | +.CodeMirror-gutters { | ||
39 | + white-space: nowrap; | ||
40 | + background-color: transparent; | ||
41 | + border-right: 1px solid #ddd; | ||
42 | +} | ||
43 | + | ||
44 | +.CodeMirror-linenumber { | ||
45 | + min-width: 20px; | ||
46 | + padding: 0 3px 0 5px; | ||
47 | + color: var(--comment); | ||
48 | + text-align: right; | ||
49 | + white-space: nowrap; | ||
50 | + opacity: 0.6; | ||
51 | +} | ||
52 | + | ||
53 | +.CodeMirror-guttermarker { | ||
54 | + color: black; | ||
55 | +} | ||
56 | + | ||
57 | +.CodeMirror-guttermarker-subtle { | ||
58 | + color: #999; | ||
59 | +} | ||
60 | + | ||
61 | +/* FOLD GUTTER */ | ||
62 | + | ||
63 | +.CodeMirror-foldmarker { | ||
64 | + font-family: arial; | ||
65 | + line-height: 0.3; | ||
66 | + color: #414141; | ||
67 | + text-shadow: #f96 1px 1px 2px, #f96 -1px -1px 2px, #f96 1px -1px 2px, #f96 -1px 1px 2px; | ||
68 | + cursor: pointer; | ||
69 | +} | ||
70 | + | ||
71 | +.CodeMirror-foldgutter { | ||
72 | + width: 0.7em; | ||
73 | +} | ||
74 | + | ||
75 | +.CodeMirror-foldgutter-open, | ||
76 | +.CodeMirror-foldgutter-folded { | ||
77 | + cursor: pointer; | ||
78 | +} | ||
79 | + | ||
80 | +.CodeMirror-foldgutter-open::after, | ||
81 | +.CodeMirror-foldgutter-folded::after { | ||
82 | + position: relative; | ||
83 | + top: -0.1em; | ||
84 | + display: inline-block; | ||
85 | + font-size: 0.8em; | ||
86 | + content: '>'; | ||
87 | + opacity: 0.8; | ||
88 | + transform: rotate(90deg); | ||
89 | + transition: transform 0.2s; | ||
90 | +} | ||
91 | + | ||
92 | +.CodeMirror-foldgutter-folded::after { | ||
93 | + transform: none; | ||
94 | +} | ||
95 | + | ||
96 | +/* CURSOR */ | ||
97 | + | ||
98 | +.CodeMirror-cursor { | ||
99 | + width: 0; | ||
100 | + border-right: none; | ||
101 | + border-left: 1px solid black; | ||
102 | +} | ||
103 | + | ||
104 | +/* Shown when moving in bi-directional text */ | ||
105 | +.CodeMirror div.CodeMirror-secondarycursor { | ||
106 | + border-left: 1px solid silver; | ||
107 | +} | ||
108 | + | ||
109 | +.cm-fat-cursor .CodeMirror-cursor { | ||
110 | + width: auto; | ||
111 | + background: #7e7; | ||
112 | + border: 0 !important; | ||
113 | +} | ||
114 | + | ||
115 | +.cm-fat-cursor div.CodeMirror-cursors { | ||
116 | + z-index: 1; | ||
117 | +} | ||
118 | + | ||
119 | +.cm-fat-cursor-mark { | ||
120 | + background-color: rgba(20, 255, 20, 0.5); | ||
121 | + -webkit-animation: blink 1.06s steps(1) infinite; | ||
122 | + -moz-animation: blink 1.06s steps(1) infinite; | ||
123 | + animation: blink 1.06s steps(1) infinite; | ||
124 | +} | ||
125 | + | ||
126 | +.cm-animate-fat-cursor { | ||
127 | + width: auto; | ||
128 | + background-color: #7e7; | ||
129 | + border: 0; | ||
130 | + -webkit-animation: blink 1.06s steps(1) infinite; | ||
131 | + -moz-animation: blink 1.06s steps(1) infinite; | ||
132 | + animation: blink 1.06s steps(1) infinite; | ||
133 | +} | ||
134 | +@-moz-keyframes blink { | ||
135 | + 0% { | ||
136 | + } | ||
137 | + | ||
138 | + 50% { | ||
139 | + background-color: transparent; | ||
140 | + } | ||
141 | + | ||
142 | + 100% { | ||
143 | + } | ||
144 | +} | ||
145 | +@-webkit-keyframes blink { | ||
146 | + 0% { | ||
147 | + } | ||
148 | + | ||
149 | + 50% { | ||
150 | + background-color: transparent; | ||
151 | + } | ||
152 | + | ||
153 | + 100% { | ||
154 | + } | ||
155 | +} | ||
156 | +@keyframes blink { | ||
157 | + 0% { | ||
158 | + } | ||
159 | + | ||
160 | + 50% { | ||
161 | + background-color: transparent; | ||
162 | + } | ||
163 | + | ||
164 | + 100% { | ||
165 | + } | ||
166 | +} | ||
167 | + | ||
168 | +.cm-tab { | ||
169 | + display: inline-block; | ||
170 | + text-decoration: inherit; | ||
171 | +} | ||
172 | + | ||
173 | +.CodeMirror-rulers { | ||
174 | + position: absolute; | ||
175 | + top: -50px; | ||
176 | + right: 0; | ||
177 | + bottom: -20px; | ||
178 | + left: 0; | ||
179 | + overflow: hidden; | ||
180 | +} | ||
181 | + | ||
182 | +.CodeMirror-ruler { | ||
183 | + position: absolute; | ||
184 | + top: 0; | ||
185 | + bottom: 0; | ||
186 | + border-left: 1px solid #ccc; | ||
187 | +} | ||
188 | + | ||
189 | +/* DEFAULT THEME */ | ||
190 | +.cm-s-default.CodeMirror { | ||
191 | + background-color: transparent; | ||
192 | +} | ||
193 | + | ||
194 | +.cm-s-default .cm-header { | ||
195 | + color: blue; | ||
196 | +} | ||
197 | + | ||
198 | +.cm-s-default .cm-quote { | ||
199 | + color: #090; | ||
200 | +} | ||
201 | + | ||
202 | +.cm-negative { | ||
203 | + color: #d44; | ||
204 | +} | ||
205 | + | ||
206 | +.cm-positive { | ||
207 | + color: #292; | ||
208 | +} | ||
209 | + | ||
210 | +.cm-header, | ||
211 | +.cm-strong { | ||
212 | + font-weight: bold; | ||
213 | +} | ||
214 | + | ||
215 | +.cm-em { | ||
216 | + font-style: italic; | ||
217 | +} | ||
218 | + | ||
219 | +.cm-link { | ||
220 | + text-decoration: underline; | ||
221 | +} | ||
222 | + | ||
223 | +.cm-strikethrough { | ||
224 | + text-decoration: line-through; | ||
225 | +} | ||
226 | + | ||
227 | +.cm-s-default .cm-atom, | ||
228 | +.cm-s-default .cm-def, | ||
229 | +.cm-s-default .cm-property, | ||
230 | +.cm-s-default .cm-variable-2, | ||
231 | +.cm-s-default .cm-variable-3, | ||
232 | +.cm-s-default .cm-punctuation { | ||
233 | + color: var(--base); | ||
234 | +} | ||
235 | + | ||
236 | +.cm-s-default .cm-hr, | ||
237 | +.cm-s-default .cm-comment { | ||
238 | + color: var(--comment); | ||
239 | +} | ||
240 | + | ||
241 | +.cm-s-default .cm-attribute, | ||
242 | +.cm-s-default .cm-keyword { | ||
243 | + color: var(--keyword); | ||
244 | +} | ||
245 | + | ||
246 | +.cm-s-default .cm-variable { | ||
247 | + color: var(--variable); | ||
248 | +} | ||
249 | + | ||
250 | +.cm-s-default .cm-bracket, | ||
251 | +.cm-s-default .cm-tag { | ||
252 | + color: var(--tags); | ||
253 | +} | ||
254 | + | ||
255 | +.cm-s-default .cm-number { | ||
256 | + color: var(--number); | ||
257 | +} | ||
258 | + | ||
259 | +.cm-s-default .cm-string, | ||
260 | +.cm-s-default .cm-string-2 { | ||
261 | + color: var(--string); | ||
262 | +} | ||
263 | + | ||
264 | +.cm-s-default .cm-type { | ||
265 | + color: #085; | ||
266 | +} | ||
267 | + | ||
268 | +.cm-s-default .cm-meta { | ||
269 | + color: #555; | ||
270 | +} | ||
271 | + | ||
272 | +.cm-s-default .cm-qualifier { | ||
273 | + color: var(--qualifier); | ||
274 | +} | ||
275 | + | ||
276 | +.cm-s-default .cm-builtin { | ||
277 | + color: #7539ff; | ||
278 | +} | ||
279 | + | ||
280 | +.cm-s-default .cm-link { | ||
281 | + color: var(--flash); | ||
282 | +} | ||
283 | + | ||
284 | +.cm-s-default .cm-error { | ||
285 | + color: #ff008c; | ||
286 | +} | ||
287 | + | ||
288 | +.cm-invalidchar { | ||
289 | + color: #ff008c; | ||
290 | +} | ||
291 | + | ||
292 | +.CodeMirror-composing { | ||
293 | + border-bottom: 2px solid; | ||
294 | +} | ||
295 | + | ||
296 | +/* Default styles for common addons */ | ||
297 | + | ||
298 | +div.CodeMirror span.CodeMirror-matchingbracket { | ||
299 | + color: #0b0; | ||
300 | +} | ||
301 | + | ||
302 | +div.CodeMirror span.CodeMirror-nonmatchingbracket { | ||
303 | + color: #a22; | ||
304 | +} | ||
305 | + | ||
306 | +.CodeMirror-matchingtag { | ||
307 | + background: rgba(255, 150, 0, 0.3); | ||
308 | +} | ||
309 | + | ||
310 | +.CodeMirror-activeline-background { | ||
311 | + background: #e8f2ff; | ||
312 | +} | ||
313 | + | ||
314 | +/* STOP */ | ||
315 | + | ||
316 | +/* The rest of this file contains styles related to the mechanics of | ||
317 | + the editor. You probably shouldn't touch them. */ | ||
318 | + | ||
319 | +.CodeMirror { | ||
320 | + position: relative; | ||
321 | + overflow: hidden; | ||
322 | + background: white; | ||
323 | +} | ||
324 | + | ||
325 | +.CodeMirror-scroll { | ||
326 | + position: relative; | ||
327 | + height: 100%; | ||
328 | + padding-bottom: 30px; | ||
329 | + margin-right: -30px; | ||
330 | + | ||
331 | + /* 30px is the magic margin used to hide the element's real scrollbars */ | ||
332 | + | ||
333 | + /* See overflow: hidden in .CodeMirror */ | ||
334 | + margin-bottom: -30px; | ||
335 | + overflow: scroll !important; /* Things will break if this is overridden */ | ||
336 | + outline: none; /* Prevent dragging from highlighting the element */ | ||
337 | +} | ||
338 | + | ||
339 | +.CodeMirror-sizer { | ||
340 | + position: relative; | ||
341 | + border-right: 30px solid transparent; | ||
342 | +} | ||
343 | + | ||
344 | +/* The fake, visible scrollbars. Used to force redraw during scrolling | ||
345 | + before actual scrolling happens, thus preventing shaking and | ||
346 | + flickering artifacts. */ | ||
347 | +.CodeMirror-vscrollbar, | ||
348 | +.CodeMirror-hscrollbar, | ||
349 | +.CodeMirror-scrollbar-filler, | ||
350 | +.CodeMirror-gutter-filler { | ||
351 | + position: absolute; | ||
352 | + z-index: 6; | ||
353 | + display: none; | ||
354 | +} | ||
355 | + | ||
356 | +.CodeMirror-vscrollbar { | ||
357 | + top: 0; | ||
358 | + right: 0; | ||
359 | + overflow-x: hidden; | ||
360 | + overflow-y: scroll; | ||
361 | +} | ||
362 | + | ||
363 | +.CodeMirror-hscrollbar { | ||
364 | + bottom: 0; | ||
365 | + left: 0; | ||
366 | + overflow-x: scroll; | ||
367 | + overflow-y: hidden; | ||
368 | +} | ||
369 | + | ||
370 | +.CodeMirror-scrollbar-filler { | ||
371 | + right: 0; | ||
372 | + bottom: 0; | ||
373 | +} | ||
374 | + | ||
375 | +.CodeMirror-gutter-filler { | ||
376 | + bottom: 0; | ||
377 | + left: 0; | ||
378 | +} | ||
379 | + | ||
380 | +.CodeMirror-gutters { | ||
381 | + position: absolute; | ||
382 | + top: 0; | ||
383 | + left: 0; | ||
384 | + z-index: 3; | ||
385 | + min-height: 100%; | ||
386 | +} | ||
387 | + | ||
388 | +.CodeMirror-gutter { | ||
389 | + display: inline-block; | ||
390 | + height: 100%; | ||
391 | + margin-bottom: -30px; | ||
392 | + white-space: normal; | ||
393 | + vertical-align: top; | ||
394 | +} | ||
395 | + | ||
396 | +.CodeMirror-gutter-wrapper { | ||
397 | + position: absolute; | ||
398 | + z-index: 4; | ||
399 | + background: none !important; | ||
400 | + border: none !important; | ||
401 | +} | ||
402 | + | ||
403 | +.CodeMirror-gutter-background { | ||
404 | + position: absolute; | ||
405 | + top: 0; | ||
406 | + bottom: 0; | ||
407 | + z-index: 4; | ||
408 | +} | ||
409 | + | ||
410 | +.CodeMirror-gutter-elt { | ||
411 | + position: absolute; | ||
412 | + z-index: 4; | ||
413 | + cursor: default; | ||
414 | +} | ||
415 | + | ||
416 | +.CodeMirror-gutter-wrapper ::selection { | ||
417 | + background-color: transparent; | ||
418 | +} | ||
419 | + | ||
420 | +.CodeMirror-gutter-wrapper ::-moz-selection { | ||
421 | + background-color: transparent; | ||
422 | +} | ||
423 | + | ||
424 | +.CodeMirror-lines { | ||
425 | + min-height: 1px; /* prevents collapsing before first draw */ | ||
426 | + cursor: text; | ||
427 | +} | ||
428 | + | ||
429 | +.CodeMirror pre { | ||
430 | + position: relative; | ||
431 | + z-index: 2; | ||
432 | + margin: 0; | ||
433 | + overflow: visible; | ||
434 | + font-family: inherit; | ||
435 | + font-size: inherit; | ||
436 | + line-height: inherit; | ||
437 | + color: inherit; | ||
438 | + word-wrap: normal; | ||
439 | + white-space: pre; | ||
440 | + background: transparent; | ||
441 | + border-width: 0; | ||
442 | + | ||
443 | + /* Reset some styles that the rest of the page might have set */ | ||
444 | + -moz-border-radius: 0; | ||
445 | + -webkit-border-radius: 0; | ||
446 | + border-radius: 0; | ||
447 | + -webkit-tap-highlight-color: transparent; | ||
448 | + -webkit-font-variant-ligatures: contextual; | ||
449 | + font-variant-ligatures: contextual; | ||
450 | +} | ||
451 | + | ||
452 | +.CodeMirror-wrap pre { | ||
453 | + word-break: normal; | ||
454 | + word-wrap: break-word; | ||
455 | + white-space: pre-wrap; | ||
456 | +} | ||
457 | + | ||
458 | +.CodeMirror-linebackground { | ||
459 | + position: absolute; | ||
460 | + top: 0; | ||
461 | + right: 0; | ||
462 | + bottom: 0; | ||
463 | + left: 0; | ||
464 | + z-index: 0; | ||
465 | +} | ||
466 | + | ||
467 | +.CodeMirror-linewidget { | ||
468 | + position: relative; | ||
469 | + z-index: 2; | ||
470 | + padding: 0.1px; /* Force widget margins to stay inside of the container */ | ||
471 | +} | ||
472 | + | ||
473 | +.CodeMirror-rtl pre { | ||
474 | + direction: rtl; | ||
475 | +} | ||
476 | + | ||
477 | +.CodeMirror-code { | ||
478 | + outline: none; | ||
479 | +} | ||
480 | + | ||
481 | +/* Force content-box sizing for the elements where we expect it */ | ||
482 | +.CodeMirror-scroll, | ||
483 | +.CodeMirror-sizer, | ||
484 | +.CodeMirror-gutter, | ||
485 | +.CodeMirror-gutters, | ||
486 | +.CodeMirror-linenumber { | ||
487 | + -moz-box-sizing: content-box; | ||
488 | + box-sizing: content-box; | ||
489 | +} | ||
490 | + | ||
491 | +.CodeMirror-measure { | ||
492 | + position: absolute; | ||
493 | + width: 100%; | ||
494 | + height: 0; | ||
495 | + overflow: hidden; | ||
496 | + visibility: hidden; | ||
497 | +} | ||
498 | + | ||
499 | +.CodeMirror-cursor { | ||
500 | + position: absolute; | ||
501 | + pointer-events: none; | ||
502 | +} | ||
503 | + | ||
504 | +.CodeMirror-measure pre { | ||
505 | + position: static; | ||
506 | +} | ||
507 | + | ||
508 | +div.CodeMirror-cursors { | ||
509 | + position: relative; | ||
510 | + z-index: 3; | ||
511 | + visibility: hidden; | ||
512 | +} | ||
513 | + | ||
514 | +div.CodeMirror-dragcursors { | ||
515 | + visibility: visible; | ||
516 | +} | ||
517 | + | ||
518 | +.CodeMirror-focused div.CodeMirror-cursors { | ||
519 | + visibility: visible; | ||
520 | +} | ||
521 | + | ||
522 | +.CodeMirror-selected { | ||
523 | + background: #d9d9d9; | ||
524 | +} | ||
525 | + | ||
526 | +.CodeMirror-focused .CodeMirror-selected { | ||
527 | + background: #d7d4f0; | ||
528 | +} | ||
529 | + | ||
530 | +.CodeMirror-crosshair { | ||
531 | + cursor: crosshair; | ||
532 | +} | ||
533 | + | ||
534 | +.CodeMirror-line::selection, | ||
535 | +.CodeMirror-line > span::selection, | ||
536 | +.CodeMirror-line > span > span::selection { | ||
537 | + background: #d7d4f0; | ||
538 | +} | ||
539 | + | ||
540 | +.CodeMirror-line::-moz-selection, | ||
541 | +.CodeMirror-line > span::-moz-selection, | ||
542 | +.CodeMirror-line > span > span::-moz-selection { | ||
543 | + background: #d7d4f0; | ||
544 | +} | ||
545 | + | ||
546 | +.cm-searching { | ||
547 | + background-color: #ffa; | ||
548 | + background-color: rgba(255, 255, 0, 0.4); | ||
549 | +} | ||
550 | + | ||
551 | +/* Used to force a border model for a node */ | ||
552 | +.cm-force-border { | ||
553 | + padding-right: 0.1px; | ||
554 | +} | ||
555 | + | ||
556 | +@media print { | ||
557 | + /* Hide the cursor when printing */ | ||
558 | + .CodeMirror div.CodeMirror-cursors { | ||
559 | + visibility: hidden; | ||
560 | + } | ||
561 | +} | ||
562 | + | ||
563 | +/* See issue #2901 */ | ||
564 | +.cm-tab-wrap-hack::after { | ||
565 | + content: ''; | ||
566 | +} | ||
567 | + | ||
568 | +/* Help users use markselection to safely style text background */ | ||
569 | +span.CodeMirror-selectedtext { | ||
570 | + background: none; | ||
571 | +} |
src/components/FlowChart/index.ts
src/components/FlowChart/src/index.css
0 → 100644
1 | +.lf-control { | ||
2 | + position: absolute; | ||
3 | + top: 0; | ||
4 | + right: 10px; | ||
5 | + display: flex; | ||
6 | + padding: 0 15px; | ||
7 | + margin: 5px; | ||
8 | + background: rgba(255, 255, 255, 0.8); | ||
9 | + border-radius: 5px; | ||
10 | + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); | ||
11 | + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); | ||
12 | +} | ||
13 | + | ||
14 | +.lf-control-item { | ||
15 | + display: flex; | ||
16 | + padding: 5px 10px; | ||
17 | + cursor: pointer; | ||
18 | + flex-direction: column; | ||
19 | + align-items: center; | ||
20 | + justify-content: center; | ||
21 | +} | ||
22 | + | ||
23 | +.lf-control-item:hover { | ||
24 | + background: #efefef; | ||
25 | +} | ||
26 | + | ||
27 | +.lf-control-item.disabled { | ||
28 | + cursor: not-allowed; | ||
29 | + filter: opacity(0.6); | ||
30 | +} | ||
31 | + | ||
32 | +.lf-control-item.disabled:hover { | ||
33 | + background: #fff; | ||
34 | +} | ||
35 | + | ||
36 | +.lf-control-item.disabled i { | ||
37 | + pointer-events: none; | ||
38 | +} | ||
39 | + | ||
40 | +.lf-control-item i { | ||
41 | + display: inline-block; | ||
42 | + width: 20px; | ||
43 | + height: 20px; | ||
44 | + vertical-align: middle; | ||
45 | + background-size: cover; | ||
46 | +} | ||
47 | + | ||
48 | +.lf-control-text { | ||
49 | + margin-top: 5px; | ||
50 | + font-size: 12px; | ||
51 | +} | ||
52 | + | ||
53 | +.lf-control-zoomOut { | ||
54 | + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAFMElEQVR4Xu3dsQ3CQBBFQei/KEoDXQG2xAv9h3yDnb0nh7xffgQIXAq82RAgcC0gEK+DwI2AQDwPAgLxBgg0AV+Q5mZqREAgI4e2ZhMQSHMzNSIgkJFDW7MJCKS5mRoREMjIoa3ZBATS3EyNCAhk5NDWbAICaW6mRgQEMnJoazYBgTQ3UyMCAhk5tDWbgECam6kRAYGMHNqaTUAgzc3UiIBARg5tzSYgkOZmakRAICOHtmYTEEhzMzUiIJCRQ1uzCQikuZkaERDIyKGt2QQE0txMjQgIZOTQ1mwCAmlupkYEBDJyaGs2AYE0N1MjAgIZObQ1m4BAmpupEQGBjBzamk1AIM3N1IiAQEYObc0mIJDmZmpEQCAjh7ZmExBIczM1IiCQkUNbswkIpLmZGhEQyMihrdkEBNLcTI0ICGTk0NZsAgJpbqZGBAQycmhrNgGBNDdTIwICGTm0NZuAQJqbqREBgYwc2ppNQCDNzdSIgEBGDm3NJiCQ5mZqREAgI4e2ZhMQSHMzNSIgkJFDW7MJCKS5mRoREMjIoa3ZBATS3EyNCAhk5NDWbAICaW6mRgQEMnJoazYBgTQ3UyMCAhk5tDWbgECam6kRAYGMHNqaTUAgzc3UiIBARg5tzSYgkOZmakRAICOHtmYTEEhzMzUiIJCRQ1uzCQikuZkaERDIyKGt2QQE0txMjQgIZOTQ1mwCAmlupkYEBDJyaGs2AYE0N1MjAgIZObQ1m4BAmpupEQGBjBzamk3gBPJpo6YIPF/gBPJ9/po2JNAEBNLcTI0ICGTk0NZsAgJpbqZGBAQycmhrNgGBNDdTIwICGTm0NZuAQJqbqREBgYwc2ppNQCDNzdSIgEBGDm3NJiCQ5mZqREAgI4e2ZhMQSHMzNSIgkJFDW7MJCKS5mRoREMjIoa3ZBATS3EyNCAhk5NDWbAICaW6mRgQEMnJoazYBgTQ3UyMCAhk5tDWbgECam6kRAYGMHNqaTUAgzc3UiIBARg5tzSYgkOZmakRAICOHtmYTEEhzMzUiIJCRQ1uzCQikuZkaETiB+AOdkWNb83+BE4gfAQIXAgLxNAjcCAjE8yAgEG+AQBPwBWlupkYEBDJyaGs2AYE0N1MjAgIZObQ1m4BAmpupEQGBjBzamk1AIM3N1IiAQEYObc0mIJDmZmpEQCAjh7ZmExBIczM1IiCQkUNbswkIpLmZGhEQyMihrdkEBNLcTI0ICGTk0NZsAgJpbqZGBAQycmhrNgGBNDdTIwICGTm0NZuAQJqbqREBgYwc2ppNQCDNzdSIgEBGDm3NJiCQ5mZqREAgI4e2ZhMQSHMzNSIgkJFDW7MJCKS5mRoREMjIoa3ZBATS3EyNCAhk5NDWbAICaW6mRgQEMnJoazYBgTQ3UyMCAhk5tDWbgECam6kRAYGMHNqaTUAgzc3UiIBARg5tzSYgkOZmakRAICOHtmYTEEhzMzUiIJCRQ1uzCQikuZkaERDIyKGt2QQE0txMjQgIZOTQ1mwCAmlupkYEBDJyaGs2AYE0N1MjAgIZObQ1m4BAmpupEQGBjBzamk1AIM3N1IiAQEYObc0mIJDmZmpEQCAjh7ZmExBIczM1IiCQkUNbswkIpLmZGhEQyMihrdkEBNLcTI0ICGTk0NZsAgJpbqZGBAQycmhrNgGBNDdTIwICGTm0NZuAQJqbqREBgYwc2ppNQCDNzdSIgEBGDm3NJiCQ5mZqREAgI4e2ZhMQSHMzNSIgkJFDW7MJCKS5mRoREMjIoa3ZBATS3EyNCPwAiAUiJ9hUCCUAAAAASUVORK5CYII=); | ||
55 | +} | ||
56 | + | ||
57 | +.lf-control-zoomIn { | ||
58 | + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAGr0lEQVR4Xu3dsW3cABQEUaoIN+F6DDfpJlSFm1ARMi53JAywwse7nHP8s5iYb49faeDP8zy/SuAXWK93+P2F5zzyHwNvrKQGBJLq3MME0m4gkNbnnCaQdgKBtD7nNIG0Ewik9TmnCaSdQCCtzzlNIO0EAml9zmkCaScQSOtzThNIO4FAWp9zmkDaCQTS+pzTBNJOIJDW55wmkHYCgbQ+5zSBtBMIpPU5pwmknUAgrc85TSDtBAJpfc5pAmknEEjrc04TSDuBQFqfc5pA2gkE0vqc0wTSTiCQ1uecJpB2AoG0Puc0gbQTCKT1OacJpJ1AIK3POU0g7QQCaX3OaQJpJxBI63NOE0g7gUBan3OaQNoJBNL6nNME0k4gkNbnnCaQdgKBtD7nNIG0Ewik9TmnCaSdQCCtzzlNIO0EAml9zmkCaScQSOtzThNIO4FAWp9zmkDaCQTS+pzTBNJOIJDW55wmkHYCgbQ+5zSBtBMIpPU5pwmknUAgrc85TSDtBAJpfc5pAmknEEjrc04TSDuBQFqfc5pA2gkE0vqc0wTSTiCQ1uecJpB2AoG0Puc0gbQTCKT1OacJpJ1AIK3POU0g7QQCaX3OaQJpJxBI63NOE0g7gUBan3OaQNoJBNL6nNME0k4gkNbnnCaQdgKBtD7nNIG0Ewik9TmnCaSdQCCtzzlNIO0EAml9zmkCaScQSOtzThNIO4FAWp9zmkDaCQTS+pzTBNJOIJDW55wmkHYCgbQ+5zSBtBMIpPU5pwmknUAgrc85TSDtBAJpfc5pAmknEEjrc04TSDuBQFqfc5pA2gkE0vqc0wTSTiCQ1uecJpB2AoG0Puc0gbQTCKT1OacJpJ1AIK3POU0g7QQCaX3OaQJpJxBI63NOE0g7gUBan3OaQNoJBNL6nNME0k4gkNbnnCaQdgKBtD7nNIG0Ewik9TmnCaSdQCCtzzlNIO0EAml9zmkCaScQSOtzThNIO4FAWp9zmkDaCQTS+pzTBNJOIJDW55z2CuR9/hZ3XuDn8zw/xud8PM/zd/wOZ/7+FcjnmWscwkBsQCCxULhbBgRya0/XxAYEEguFu2VAILf2dE1sQCCxULhbBgRya0/XxAYEEguFu2VAILf2dE1sQCCxULhbBgRya0/XxAYEEguFu2VAILf2dE1sQCCxULhbBgRya0/XxAYEEguFu2VAILf2dE1sQCCxULhbBgRya0/XxAYEEguFu2VAILf2dE1sQCCxULhbBgRya0/XxAYEEguFu2VAILf2dE1sQCCxULhbBgRya0/XxAYEEguFu2VAILf2dE1sQCCxULhbBgRya0/XxAYEEguFu2XgFYgP6HSb+oBO5/JbkF6B+HUGfIKtc/ktSAJpZxBI63NOE0g7gUBan3OaQNoJBNL6nNME0k4gkNbnnCaQdgKBtD7nNIG0Ewik9TmnCaSdQCCtzzlNIO0EAml9zmkCaScQSOtzThNIO4FAWp9zmkDaCQTS+pzTBNJOIJDW55wmkHYCgbQ+5zSBtBMIpPU5pwmknUAgrc85TSDtBAJpfc5pAmknEEjrc04TSDuBQFqfc5pA2gkE0vqc0wTSTiCQ1uecJpB2AoG0Puc0gbQTCKT1OacJpJ1AIK3POU0g7QQCaX3OaQJpJxBI63NOE0g7gUBan3OaQNoJBNL6nNME0k4gkNbnnCaQdgKBtD7nNIG0Ewik9TmnCaSdQCCtzzlNIO0EAml9zmkCaScQSOtzThNIO4FAWp9zmkDaCQTS+pzTBNJOIJDW55wmkHYCgbQ+5zSBtBMIpPU5pwmknUAgrc85TSDtBAJpfc5pAmknEEjrc04TSDuBQFqfc5pA2gkE0vqc0wTSTiCQ1uecJpB2AoG0Puc0gbQTCKT1OacJpJ1AIK3POU0g7QQCaX3OaQJpJxBI63NOE0g7gUBan3OaQNoJBNL6nNME0k4gkNbnnCaQdgKBtD7nNIG0Ewik9TmnCaSdQCCtzzlNIO0EAml9zmkCaScQSOtzThNIO4FAWp9zmkDaCQTS+pzTBNJOIJDW55wmkHYCgbQ+5zSBtBMIpPU5pwmknUAgrc85TSDtBAJpfc5pAmknEEjrc04TSDuBQFqfc5pA2gkE0vqc0wTSTiCQ1uecJpB2AoG0Puc0gbQTCKT1OacJpJ1AIK3POU0g7QQCaX3OaQJpJxBI63NOE0g7gUBan3OaQNoJBNL6nNME0k4gkNbnnCaQdgKBtD7nNIG0Ewik9TmnCaSdQCCtzzlNIO0EAml9zmkCaScQSOtzThNIO4FAWp9z2j95TXI4rwKcnQAAAABJRU5ErkJggg==); | ||
59 | +} | ||
60 | + | ||
61 | +.lf-control-fit { | ||
62 | + background-image: url(data:image/png;base64,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); | ||
63 | +} | ||
64 | + | ||
65 | +.lf-control-undo { | ||
66 | + background-image: url(data:image/png;base64,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); | ||
67 | +} | ||
68 | + | ||
69 | +.lf-control-redo { | ||
70 | + background-image: url(data:image/png;base64,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); | ||
71 | +} | ||
72 | + | ||
73 | +/* menu */ | ||
74 | +.lf-menu { | ||
75 | + position: absolute; | ||
76 | + display: none; | ||
77 | + width: 200px; | ||
78 | + padding: 10px 0; | ||
79 | + margin: 0 0 0 10px; | ||
80 | + background: #fff; | ||
81 | + border: 1px solid #efefee; | ||
82 | + border-radius: 3px; | ||
83 | +} | ||
84 | + | ||
85 | +.lf-menu > li { | ||
86 | + position: relative; | ||
87 | + padding: 3px 12px; | ||
88 | + font-size: 12px; | ||
89 | + line-height: 18px; | ||
90 | + list-style: none; | ||
91 | + cursor: pointer; | ||
92 | + transition: all 120ms ease-in-out; | ||
93 | +} | ||
94 | + | ||
95 | +.lf-menu-item__disabled { | ||
96 | + color: #aaa; | ||
97 | + pointer-events: none; | ||
98 | + cursor: default; | ||
99 | + opacity: 0.88; | ||
100 | +} | ||
101 | + | ||
102 | +.lf-menu-item:hover { | ||
103 | + background: #f3f3f3; | ||
104 | +} | ||
105 | + | ||
106 | +/* dnd */ | ||
107 | +.lf-dnd { | ||
108 | + position: absolute; | ||
109 | + padding: 15px 5px; | ||
110 | + margin: 5px; | ||
111 | + background: rgba(255, 255, 255, 0.8); | ||
112 | + border-radius: 5px; | ||
113 | + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); | ||
114 | +} | ||
115 | + | ||
116 | +.lf-dnd-item { | ||
117 | + margin-top: 5px; | ||
118 | + font-size: 14px; | ||
119 | + text-align: center; | ||
120 | +} | ||
121 | + | ||
122 | +.lf-dnd-item:first-child { | ||
123 | + margin-top: 0; | ||
124 | +} | ||
125 | + | ||
126 | +.lf-dnd-item div { | ||
127 | + width: 40px; | ||
128 | + height: 40px; | ||
129 | +} | ||
130 | + | ||
131 | +.lf-dnd-item div:hover { | ||
132 | + cursor: grab; | ||
133 | +} | ||
134 | + | ||
135 | +.lf-dnd-circle { | ||
136 | + background: url('data:image/png;base64,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') | ||
137 | + center center no-repeat; | ||
138 | +} | ||
139 | + | ||
140 | +.lf-dnd-rect { | ||
141 | + background: url('data:image/png;base64,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') | ||
142 | + center center no-repeat; | ||
143 | +} | ||
144 | + | ||
145 | +.lf-dnd-polygon { | ||
146 | + background: url('data:image/png;base64,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') | ||
147 | + center center no-repeat; | ||
148 | +} | ||
149 | + | ||
150 | +.lf-dnd-triangle { | ||
151 | + background: url('data:image/png;base64,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') | ||
152 | + center center no-repeat; | ||
153 | +} | ||
154 | + | ||
155 | +.lf-dnd-hexagon { | ||
156 | + background: url('data:image/png;base64,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') | ||
157 | + center center no-repeat; | ||
158 | +} | ||
159 | + | ||
160 | +.lf-dnd-star { | ||
161 | + background: url('data:image/png;base64,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') | ||
162 | + center center no-repeat; | ||
163 | +} | ||
164 | + | ||
165 | +.lf-selection-select { | ||
166 | + position: absolute; | ||
167 | + border: 2px dashed darkorange; | ||
168 | +} | ||
169 | + | ||
170 | +.lf-mini-map { | ||
171 | + position: absolute; | ||
172 | + padding-top: 20px; | ||
173 | + overflow: hidden; | ||
174 | + background: rgba(255, 255, 255, 1); | ||
175 | + border: 1px solid #93a3b4; | ||
176 | +} | ||
177 | + | ||
178 | +.lf-mini-map-graph { | ||
179 | + position: relative; | ||
180 | + overflow: hidden; | ||
181 | +} | ||
182 | + | ||
183 | +.lf-minimap-viewport { | ||
184 | + position: absolute; | ||
185 | + top: 0; | ||
186 | + left: 0; | ||
187 | + cursor: grab; | ||
188 | + border: 2px solid rgb(24, 125, 255); | ||
189 | +} | ||
190 | + | ||
191 | +.lf-mini-map-header { | ||
192 | + position: absolute; | ||
193 | + top: 0; | ||
194 | + right: 0; | ||
195 | + left: 0; | ||
196 | + height: 18px; | ||
197 | + padding: 0 10px; | ||
198 | + line-height: 18px; | ||
199 | + text-shadow: 0 1px 0 rgb(255 255 255 / 33%); | ||
200 | + background-color: #a6a6a6; | ||
201 | + background-image: linear-gradient(to top, #b2b2b2, #9b9b9b); | ||
202 | + border: 1px solid #999; | ||
203 | + border-top: #bfbfbf solid 1px; | ||
204 | + border-bottom: #666 solid 1px; | ||
205 | +} | ||
206 | + | ||
207 | +.lf-mini-map-close { | ||
208 | + position: absolute; | ||
209 | + top: 0; | ||
210 | + right: 2px; | ||
211 | + width: 18px; | ||
212 | + height: 18px; | ||
213 | + cursor: pointer; | ||
214 | + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACL0lEQVRoQ+1YT2vUQBT/vS+Smc3u0ZtfwA+hUKEttIIVbMEWrGAL3UItqKCCCipooS3Ynu29ePfqLcnO5Nov0NsrWbc0myxtJpNmGZw9LZk37/3+vCTzQnD8R47jhycwbQe9A94BSwV8C1kKaL3dO2AtoWWC/8+BMJB9ItwHcM6MX0mqtm1EzOU7Y8bvJFV9k3zGDnSFPAVw76oIb8ZavzIpehnbE+Ilg/J7/8Za3THJVYfAHwB3x4owXsSpemNSuCs6zwEu7rl9AmEgt4hQspkIa5FS76uQCKV8RoxSLDP6pi1p7EAGsCvEBkA7ZbC0EuvBp+tI9IR4yqBSDIE3Iq13qwiQj6lFYEgikOsgvC4VJDyJlfo6CUg3kI9BmLBG67EevDUFn8XXJpBt7km5yox3xcIMfpRo/SN/PZRygRhj17J1JqwmSn2oA96awL926iwD/LEIgJjmo3RwMCQadGaZePh/3H5ejrT+XBd8IwSGJKRcAuPLhHZ6mIkMxlFpjbEUp+qbDfjGCGSJQiEWCfS9CiAmLCZK7VWJvSnG6h4oJu8FnTkm3r+uKDHNReng8CZgVdcbJTBqpxkwfk4EQJiJlTquCq5KnCeQV8npFnL6Jnb6Mer0i8zpo4TThzmnj9OjGXardDBrZqDZbmMmdnukdH6oL3xWOTG1vNh6oxn7AYB2PqtUOWC1GdP4Ya5N8I0ONG0Dv6znHZiW8t6BaSvvHfAONKSAf4w2JGTtNBey0xBAkjSEzwAAAABJRU5ErkJggg=='); | ||
215 | + background-size: contain; | ||
216 | +} |
src/components/FlowChart/src/index.vue
@@ -19,7 +19,7 @@ | @@ -19,7 +19,7 @@ | ||
19 | import { toLogicFlowData } from './adpterForTurbo'; | 19 | import { toLogicFlowData } from './adpterForTurbo'; |
20 | 20 | ||
21 | import '@logicflow/core/dist/style/index.css'; | 21 | import '@logicflow/core/dist/style/index.css'; |
22 | - import '@logicflow/extension/lib/style/index.css'; | 22 | + import './index.css'; |
23 | export default defineComponent({ | 23 | export default defineComponent({ |
24 | name: 'FlowChart', | 24 | name: 'FlowChart', |
25 | components: { FlowChartToolbar }, | 25 | components: { FlowChartToolbar }, |
src/components/Tinymce/src/Editor.vue
@@ -12,6 +12,40 @@ | @@ -12,6 +12,40 @@ | ||
12 | </template> | 12 | </template> |
13 | 13 | ||
14 | <script lang="ts"> | 14 | <script lang="ts"> |
15 | + import tinymce from 'tinymce/tinymce'; | ||
16 | + import 'tinymce/themes/silver'; | ||
17 | + | ||
18 | + import 'tinymce/icons/default/icons'; | ||
19 | + import 'tinymce/plugins/advlist'; | ||
20 | + import 'tinymce/plugins/anchor'; | ||
21 | + import 'tinymce/plugins/autolink'; | ||
22 | + import 'tinymce/plugins/autosave'; | ||
23 | + import 'tinymce/plugins/code'; | ||
24 | + import 'tinymce/plugins/codesample'; | ||
25 | + import 'tinymce/plugins/directionality'; | ||
26 | + import 'tinymce/plugins/fullscreen'; | ||
27 | + import 'tinymce/plugins/hr'; | ||
28 | + import 'tinymce/plugins/insertdatetime'; | ||
29 | + import 'tinymce/plugins/link'; | ||
30 | + import 'tinymce/plugins/lists'; | ||
31 | + import 'tinymce/plugins/media'; | ||
32 | + import 'tinymce/plugins/nonbreaking'; | ||
33 | + import 'tinymce/plugins/noneditable'; | ||
34 | + import 'tinymce/plugins/pagebreak'; | ||
35 | + import 'tinymce/plugins/paste'; | ||
36 | + import 'tinymce/plugins/preview'; | ||
37 | + import 'tinymce/plugins/print'; | ||
38 | + import 'tinymce/plugins/save'; | ||
39 | + import 'tinymce/plugins/searchreplace'; | ||
40 | + import 'tinymce/plugins/spellchecker'; | ||
41 | + import 'tinymce/plugins/tabfocus'; | ||
42 | + // import 'tinymce/plugins/table'; | ||
43 | + import 'tinymce/plugins/template'; | ||
44 | + import 'tinymce/plugins/textpattern'; | ||
45 | + import 'tinymce/plugins/visualblocks'; | ||
46 | + import 'tinymce/plugins/visualchars'; | ||
47 | + import 'tinymce/plugins/wordcount'; | ||
48 | + | ||
15 | import { | 49 | import { |
16 | defineComponent, | 50 | defineComponent, |
17 | computed, | 51 | computed, |
@@ -25,7 +59,7 @@ | @@ -25,7 +59,7 @@ | ||
25 | 59 | ||
26 | import ImgUpload from './ImgUpload.vue'; | 60 | import ImgUpload from './ImgUpload.vue'; |
27 | 61 | ||
28 | - import { tinymce, toolbar, plugins } from './tinymce'; | 62 | + import { toolbar, plugins } from './tinymce'; |
29 | 63 | ||
30 | import { buildShortUUID } from '/@/utils/uuid'; | 64 | import { buildShortUUID } from '/@/utils/uuid'; |
31 | import { bindHandlers } from './helper'; | 65 | import { bindHandlers } from './helper'; |
src/components/Tinymce/src/tinymce.ts
1 | -import tinymce from 'tinymce/tinymce'; | ||
2 | -import 'tinymce/themes/silver'; | ||
3 | - | ||
4 | -import 'tinymce/icons/default/icons'; | ||
5 | -import 'tinymce/plugins/advlist'; | ||
6 | -import 'tinymce/plugins/anchor'; | ||
7 | -import 'tinymce/plugins/autolink'; | ||
8 | -import 'tinymce/plugins/autosave'; | ||
9 | -import 'tinymce/plugins/code'; | ||
10 | -import 'tinymce/plugins/codesample'; | ||
11 | -import 'tinymce/plugins/directionality'; | ||
12 | -import 'tinymce/plugins/fullscreen'; | ||
13 | -import 'tinymce/plugins/hr'; | ||
14 | -import 'tinymce/plugins/insertdatetime'; | ||
15 | -import 'tinymce/plugins/link'; | ||
16 | -import 'tinymce/plugins/lists'; | ||
17 | -import 'tinymce/plugins/media'; | ||
18 | -import 'tinymce/plugins/nonbreaking'; | ||
19 | -import 'tinymce/plugins/noneditable'; | ||
20 | -import 'tinymce/plugins/pagebreak'; | ||
21 | -import 'tinymce/plugins/paste'; | ||
22 | -import 'tinymce/plugins/preview'; | ||
23 | -import 'tinymce/plugins/print'; | ||
24 | -import 'tinymce/plugins/save'; | ||
25 | -import 'tinymce/plugins/searchreplace'; | ||
26 | -import 'tinymce/plugins/spellchecker'; | ||
27 | -import 'tinymce/plugins/tabfocus'; | ||
28 | -// import 'tinymce/plugins/table'; | ||
29 | -import 'tinymce/plugins/template'; | ||
30 | -import 'tinymce/plugins/textpattern'; | ||
31 | -import 'tinymce/plugins/visualblocks'; | ||
32 | -import 'tinymce/plugins/visualchars'; | ||
33 | -import 'tinymce/plugins/wordcount'; | ||
34 | - | ||
35 | // Any plugins you want to setting has to be imported | 1 | // Any plugins you want to setting has to be imported |
36 | // Detail plugins list see https://www.tinymce.com/docs/plugins/ | 2 | // Detail plugins list see https://www.tinymce.com/docs/plugins/ |
37 | // Custom builds see https://www.tinymce.com/download/custom-builds/ | 3 | // Custom builds see https://www.tinymce.com/download/custom-builds/ |
@@ -45,5 +11,3 @@ export const toolbar = [ | @@ -45,5 +11,3 @@ export const toolbar = [ | ||
45 | 'fontsizeselect lineheight searchreplace bold italic underline strikethrough alignleft aligncenter alignright outdent indent blockquote undo redo removeformat subscript superscript code codesample', | 11 | 'fontsizeselect lineheight searchreplace bold italic underline strikethrough alignleft aligncenter alignright outdent indent blockquote undo redo removeformat subscript superscript code codesample', |
46 | 'hr bullist numlist link preview anchor pagebreak insertdatetime media forecolor backcolor fullscreen', | 12 | 'hr bullist numlist link preview anchor pagebreak insertdatetime media forecolor backcolor fullscreen', |
47 | ]; | 13 | ]; |
48 | - | ||
49 | -export { tinymce }; |
src/locales/lang/en/routes/demo/editor.ts
src/locales/lang/zh_CN/routes/demo/editor.ts
src/router/menus/modules/demo/comp.ts
@@ -6,7 +6,9 @@ const menu: MenuModule = { | @@ -6,7 +6,9 @@ const menu: MenuModule = { | ||
6 | menu: { | 6 | menu: { |
7 | name: t('routes.demo.comp.comp'), | 7 | name: t('routes.demo.comp.comp'), |
8 | path: '/comp', | 8 | path: '/comp', |
9 | - | 9 | + tag: { |
10 | + dot: true, | ||
11 | + }, | ||
10 | children: [ | 12 | children: [ |
11 | { | 13 | { |
12 | path: 'basic', | 14 | path: 'basic', |
@@ -181,8 +183,18 @@ const menu: MenuModule = { | @@ -181,8 +183,18 @@ const menu: MenuModule = { | ||
181 | { | 183 | { |
182 | name: t('routes.demo.editor.editor'), | 184 | name: t('routes.demo.editor.editor'), |
183 | path: 'editor', | 185 | path: 'editor', |
186 | + tag: { | ||
187 | + dot: true, | ||
188 | + }, | ||
184 | children: [ | 189 | children: [ |
185 | { | 190 | { |
191 | + path: 'json', | ||
192 | + name: t('routes.demo.editor.jsonEditor'), | ||
193 | + tag: { | ||
194 | + content: 'new', | ||
195 | + }, | ||
196 | + }, | ||
197 | + { | ||
186 | path: 'markdown', | 198 | path: 'markdown', |
187 | name: t('routes.demo.editor.markdown'), | 199 | name: t('routes.demo.editor.markdown'), |
188 | children: [ | 200 | children: [ |
src/router/routes/modules/demo/comp.ts
@@ -304,6 +304,14 @@ const comp: AppRouteModule = { | @@ -304,6 +304,14 @@ const comp: AppRouteModule = { | ||
304 | }, | 304 | }, |
305 | children: [ | 305 | children: [ |
306 | { | 306 | { |
307 | + path: 'json', | ||
308 | + component: () => import('/@/views/demo/editor/json/index.vue'), | ||
309 | + name: 'JsonEditorDemo', | ||
310 | + meta: { | ||
311 | + title: t('routes.demo.editor.jsonEditor'), | ||
312 | + }, | ||
313 | + }, | ||
314 | + { | ||
307 | path: 'markdown', | 315 | path: 'markdown', |
308 | component: getParentLayout('MarkdownDemo'), | 316 | component: getParentLayout('MarkdownDemo'), |
309 | name: 'MarkdownDemo', | 317 | name: 'MarkdownDemo', |
src/views/demo/editor/json/index.vue
0 → 100644
1 | +<template> | ||
2 | + <PageWrapper title="代码编辑器组件示例" contentFullHeight fixedHeight contentBackground> | ||
3 | + <template #extra> | ||
4 | + <RadioGroup button-style="solid" v-model:value="modeValue" @change="handleModeChange"> | ||
5 | + <RadioButton value="application/json"> json数据 </RadioButton> | ||
6 | + <RadioButton value="htmlmixed"> html代码 </RadioButton> | ||
7 | + <RadioButton value="javascript"> javascript代码 </RadioButton> | ||
8 | + </RadioGroup> | ||
9 | + </template> | ||
10 | + <CodeEditor v-model:value="value" :mode="modeValue" /> | ||
11 | + </PageWrapper> | ||
12 | +</template> | ||
13 | +<script lang="ts"> | ||
14 | + import { defineComponent, ref } from 'vue'; | ||
15 | + import { CodeEditor } from '/@/components/CodeEditor'; | ||
16 | + import { PageWrapper } from '/@/components/Page'; | ||
17 | + import { Radio } from 'ant-design-vue'; | ||
18 | + | ||
19 | + const jsonData = | ||
20 | + '{"name":"BeJson","url":"http://www.xxx.com","page":88,"isNonProfit":true,"address":{"street":"科技园路.","city":"江苏苏州","country":"中国"},"links":[{"name":"Google","url":"http://www.xxx.com"},{"name":"Baidu","url":"http://www.xxx.com"},{"name":"SoSo","url":"http://www.xxx.com"}]}'; | ||
21 | + | ||
22 | + const jsData = ` | ||
23 | + (() => { | ||
24 | + var htmlRoot = document.getElementById('htmlRoot'); | ||
25 | + var theme = window.localStorage.getItem('__APP__DARK__MODE__'); | ||
26 | + if (htmlRoot && theme) { | ||
27 | + htmlRoot.setAttribute('data-theme', theme); | ||
28 | + theme = htmlRoot = null; | ||
29 | + } | ||
30 | + })(); | ||
31 | + `; | ||
32 | + | ||
33 | + const htmlData = ` | ||
34 | + <!DOCTYPE html> | ||
35 | +<html lang="en" id="htmlRoot"> | ||
36 | + <head> | ||
37 | + <meta charset="UTF-8" /> | ||
38 | + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> | ||
39 | + <meta name="renderer" content="webkit" /> | ||
40 | + <meta | ||
41 | + name="viewport" | ||
42 | + content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" | ||
43 | + /> | ||
44 | + <title><%= title %></title> | ||
45 | + <link rel="icon" href="/favicon.ico" /> | ||
46 | + </head> | ||
47 | + <body> | ||
48 | + <div id="app"> | ||
49 | + </div> | ||
50 | + </body> | ||
51 | +</html> | ||
52 | + `; | ||
53 | + export default defineComponent({ | ||
54 | + components: { CodeEditor, PageWrapper, RadioButton: Radio.Button, RadioGroup: Radio.Group }, | ||
55 | + setup() { | ||
56 | + const modeValue = ref('application/json'); | ||
57 | + const value = ref(jsonData); | ||
58 | + | ||
59 | + function handleModeChange(e: ChangeEvent) { | ||
60 | + const mode = e.target.value; | ||
61 | + if (mode === 'application/json') { | ||
62 | + value.value = jsonData; | ||
63 | + return; | ||
64 | + } | ||
65 | + if (mode === 'htmlmixed') { | ||
66 | + value.value = htmlData; | ||
67 | + return; | ||
68 | + } | ||
69 | + if (mode === 'javascript') { | ||
70 | + value.value = jsData; | ||
71 | + return; | ||
72 | + } | ||
73 | + } | ||
74 | + | ||
75 | + return { value, modeValue, handleModeChange }; | ||
76 | + }, | ||
77 | + }); | ||
78 | +</script> |
vite.config.ts
@@ -58,6 +58,7 @@ export default ({ command, mode }: ConfigEnv): UserConfig => { | @@ -58,6 +58,7 @@ export default ({ command, mode }: ConfigEnv): UserConfig => { | ||
58 | proxy: createProxy(VITE_PROXY), | 58 | proxy: createProxy(VITE_PROXY), |
59 | }, | 59 | }, |
60 | build: { | 60 | build: { |
61 | + minify: 'esbuild', | ||
61 | target: 'es2015', | 62 | target: 'es2015', |
62 | outDir: OUTPUT_DIR, | 63 | outDir: OUTPUT_DIR, |
63 | terserOptions: { | 64 | terserOptions: { |
yarn.lock
@@ -1301,11 +1301,23 @@ | @@ -1301,11 +1301,23 @@ | ||
1301 | resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz#3348564048e7a2d7398c935d466c0414ebb6a669" | 1301 | resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz#3348564048e7a2d7398c935d466c0414ebb6a669" |
1302 | integrity sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow== | 1302 | integrity sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow== |
1303 | 1303 | ||
1304 | +"@types/codemirror@^0.0.109": | ||
1305 | + version "0.0.109" | ||
1306 | + resolved "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.109.tgz#89d575ff1c7b462c4c3b8654f8bb38e5622e9036" | ||
1307 | + integrity sha512-cSdiHeeLjvGn649lRTNeYrVCDOgDrtP+bDDSFDd1TF+i0jKGPDRozno2NOJ9lTniso+taiv4kiVS8dgM8Jm5lg== | ||
1308 | + dependencies: | ||
1309 | + "@types/tern" "*" | ||
1310 | + | ||
1304 | "@types/crypto-js@^4.0.1": | 1311 | "@types/crypto-js@^4.0.1": |
1305 | version "4.0.1" | 1312 | version "4.0.1" |
1306 | resolved "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.0.1.tgz#3a4bd24518b0e6c5940da4e2659eeb2ef0806963" | 1313 | resolved "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.0.1.tgz#3a4bd24518b0e6c5940da4e2659eeb2ef0806963" |
1307 | integrity sha512-6+OPzqhKX/cx5xh+yO8Cqg3u3alrkhoxhE5ZOdSEv0DOzJ13lwJ6laqGU0Kv6+XDMFmlnGId04LtY22PsFLQUw== | 1314 | integrity sha512-6+OPzqhKX/cx5xh+yO8Cqg3u3alrkhoxhE5ZOdSEv0DOzJ13lwJ6laqGU0Kv6+XDMFmlnGId04LtY22PsFLQUw== |
1308 | 1315 | ||
1316 | +"@types/estree@*": | ||
1317 | + version "0.0.47" | ||
1318 | + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" | ||
1319 | + integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== | ||
1320 | + | ||
1309 | "@types/estree@0.0.39": | 1321 | "@types/estree@0.0.39": |
1310 | version "0.0.39" | 1322 | version "0.0.39" |
1311 | resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" | 1323 | resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" |
@@ -1477,6 +1489,13 @@ | @@ -1477,6 +1489,13 @@ | ||
1477 | resolved "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.5.tgz#18a0166fbcdfbfc7f17d0491da2ea07ee397d3f9" | 1489 | resolved "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.5.tgz#18a0166fbcdfbfc7f17d0491da2ea07ee397d3f9" |
1478 | integrity sha512-y9Pw8IK50OqFRDpdI9Is29KlWiENVW9FDvlTmGHelvTfR2brYFJbsClvulZfeq6YKacFrDsG9a39w0kJZdHLaw== | 1490 | integrity sha512-y9Pw8IK50OqFRDpdI9Is29KlWiENVW9FDvlTmGHelvTfR2brYFJbsClvulZfeq6YKacFrDsG9a39w0kJZdHLaw== |
1479 | 1491 | ||
1492 | +"@types/tern@*": | ||
1493 | + version "0.23.3" | ||
1494 | + resolved "https://registry.npmjs.org/@types/tern/-/tern-0.23.3.tgz#4b54538f04a88c9ff79de1f6f94f575a7f339460" | ||
1495 | + integrity sha512-imDtS4TAoTcXk0g7u4kkWqedB3E4qpjXzCpD2LU5M5NAXHzCDsypyvXSaG7mM8DKYkCRa7tFp4tS/lp/Wo7Q3w== | ||
1496 | + dependencies: | ||
1497 | + "@types/estree" "*" | ||
1498 | + | ||
1480 | "@types/through@*": | 1499 | "@types/through@*": |
1481 | version "0.0.30" | 1500 | version "0.0.30" |
1482 | resolved "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz#e0e42ce77e897bd6aead6f6ea62aeb135b8a3895" | 1501 | resolved "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz#e0e42ce77e897bd6aead6f6ea62aeb135b8a3895" |
@@ -2610,6 +2629,11 @@ coa@^2.0.2: | @@ -2610,6 +2629,11 @@ coa@^2.0.2: | ||
2610 | chalk "^2.4.1" | 2629 | chalk "^2.4.1" |
2611 | q "^1.1.2" | 2630 | q "^1.1.2" |
2612 | 2631 | ||
2632 | +codemirror@^5.60.0: | ||
2633 | + version "5.60.0" | ||
2634 | + resolved "https://registry.npmjs.org/codemirror/-/codemirror-5.60.0.tgz#00a8cfd287d5d8737ceb73987f04aee2fe5860da" | ||
2635 | + integrity sha512-AEL7LhFOlxPlCL8IdTcJDblJm8yrAGib7I+DErJPdZd4l6imx8IMgKK3RblVgBQqz3TZJR4oknQ03bz+uNjBYA== | ||
2636 | + | ||
2613 | codepage@~1.14.0: | 2637 | codepage@~1.14.0: |
2614 | version "1.14.0" | 2638 | version "1.14.0" |
2615 | resolved "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz#8cbe25481323559d7d307571b0fff91e7a1d2f99" | 2639 | resolved "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz#8cbe25481323559d7d307571b0fff91e7a1d2f99" |
@@ -7729,7 +7753,7 @@ rollup-plugin-visualizer@5.3.4: | @@ -7729,7 +7753,7 @@ rollup-plugin-visualizer@5.3.4: | ||
7729 | source-map "^0.7.3" | 7753 | source-map "^0.7.3" |
7730 | yargs "^16.2.0" | 7754 | yargs "^16.2.0" |
7731 | 7755 | ||
7732 | -rollup@^2.25.0, rollup@^2.38.5, rollup@^2.44.0: | 7756 | +rollup@^2.25.0, rollup@^2.38.5, rollup@^2.44.0, rollup@^2.45.2: |
7733 | version "2.45.2" | 7757 | version "2.45.2" |
7734 | resolved "https://registry.npmjs.org/rollup/-/rollup-2.45.2.tgz#8fb85917c9f35605720e92328f3ccbfba6f78b48" | 7758 | resolved "https://registry.npmjs.org/rollup/-/rollup-2.45.2.tgz#8fb85917c9f35605720e92328f3ccbfba6f78b48" |
7735 | integrity sha512-kRRU7wXzFHUzBIv0GfoFFIN3m9oteY4uAsKllIpQDId5cfnkWF2J130l+27dzDju0E6MScKiV0ZM5Bw8m4blYQ== | 7759 | integrity sha512-kRRU7wXzFHUzBIv0GfoFFIN3m9oteY4uAsKllIpQDId5cfnkWF2J130l+27dzDju0E6MScKiV0ZM5Bw8m4blYQ== |