@tmagic/editor 1.1.4 → 1.1.5
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/dist/tmagic-editor.mjs +557 -429
- package/dist/tmagic-editor.mjs.map +1 -1
- package/dist/tmagic-editor.umd.js +556 -428
- package/dist/tmagic-editor.umd.js.map +1 -1
- package/package.json +9 -9
- package/src/Editor.vue +0 -2
- package/src/fields/Code.vue +17 -21
- package/src/fields/CodeLink.vue +49 -63
- package/src/index.ts +2 -2
- package/src/layouts/Framework.vue +85 -55
- package/src/layouts/Layout.vue +100 -0
- package/src/layouts/Resizer.vue +17 -46
- package/src/services/editor.ts +5 -2
- package/src/services/ui.ts +8 -69
- package/types/components/ToolButton.vue.d.ts +4 -4
- package/types/fields/Code.vue.d.ts +88 -20
- package/types/fields/CodeLink.vue.d.ts +99 -48
- package/types/layouts/Framework.vue.d.ts +88 -20
- package/types/layouts/Layout.vue.d.ts +133 -0
- package/types/layouts/Resizer.vue.d.ts +54 -10
- package/types/services/ui.d.ts +0 -2
package/dist/tmagic-editor.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent, computed, resolveComponent, openBlock, createBlock, normalizeStyle,
|
|
1
|
+
import { defineComponent, computed, resolveComponent, openBlock, createBlock, normalizeStyle, unref, reactive, watch, inject, ref, createElementBlock, createVNode, withCtx, withModifiers, createCommentVNode, createTextVNode, toDisplayString, onMounted, onUnmounted, toRaw, createElementVNode, renderSlot, Fragment, normalizeClass, watchEffect, createSlots, resolveDynamicComponent, renderList, normalizeProps, mergeProps, markRaw, getCurrentInstance, Teleport, nextTick, toHandlers, provide } from 'vue';
|
|
2
2
|
import serialize from 'serialize-javascript';
|
|
3
3
|
import { Delete, Close, Plus, Edit, ArrowDown, Grid, Memo, FullScreen, ScaleToOriginal, ZoomOut, ZoomIn, Right, Back, Files, DocumentCopy, Coin, ArrowLeftBold, ArrowRightBold, CaretBottom, Top, Bottom } from '@element-plus/icons-vue';
|
|
4
4
|
import { throttle, cloneDeep, mergeWith, isEmpty, uniq } from 'lodash-es';
|
|
@@ -12,112 +12,100 @@ import Gesto from 'gesto';
|
|
|
12
12
|
import { ElMessage } from 'element-plus';
|
|
13
13
|
import KeyController from 'keycon';
|
|
14
14
|
|
|
15
|
-
const _sfc_main$
|
|
16
|
-
|
|
17
|
-
props:
|
|
15
|
+
const _sfc_main$p = /* @__PURE__ */ defineComponent({
|
|
16
|
+
__name: "Code",
|
|
17
|
+
props: {
|
|
18
|
+
model: null,
|
|
19
|
+
name: null,
|
|
20
|
+
config: null,
|
|
21
|
+
prop: null
|
|
22
|
+
},
|
|
18
23
|
emits: ["change"],
|
|
19
|
-
setup(
|
|
24
|
+
setup(__props, { emit }) {
|
|
25
|
+
const props = __props;
|
|
20
26
|
const language = computed(() => props.config.language || "javascript");
|
|
21
27
|
const height = computed(() => `${document.body.clientHeight - 168}px`);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
const save = (v) => {
|
|
29
|
+
props.model[props.name] = v;
|
|
30
|
+
emit("change", v);
|
|
31
|
+
};
|
|
32
|
+
return (_ctx, _cache) => {
|
|
33
|
+
const _component_magic_code_editor = resolveComponent("magic-code-editor");
|
|
34
|
+
return openBlock(), createBlock(_component_magic_code_editor, {
|
|
35
|
+
style: normalizeStyle(`height: ${unref(height)}`),
|
|
36
|
+
"init-values": __props.model[__props.name],
|
|
37
|
+
language: unref(language),
|
|
38
|
+
onSave: save
|
|
39
|
+
}, null, 8, ["style", "init-values", "language"]);
|
|
29
40
|
};
|
|
30
41
|
}
|
|
31
42
|
});
|
|
32
43
|
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
for (const [key, val] of props) {
|
|
36
|
-
target[key] = val;
|
|
37
|
-
}
|
|
38
|
-
return target;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
|
|
42
|
-
const _component_magic_code_editor = resolveComponent("magic-code-editor");
|
|
43
|
-
return openBlock(), createBlock(_component_magic_code_editor, {
|
|
44
|
-
style: normalizeStyle(`height: ${_ctx.height}`),
|
|
45
|
-
"init-values": _ctx.model[_ctx.name],
|
|
46
|
-
language: _ctx.language,
|
|
47
|
-
onSave: _ctx.save
|
|
48
|
-
}, null, 8, ["style", "init-values", "language", "onSave"]);
|
|
49
|
-
}
|
|
50
|
-
const Code = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["render", _sfc_render$a]]);
|
|
51
|
-
|
|
52
|
-
const _sfc_main$n = defineComponent({
|
|
53
|
-
name: "m-fields-code-link",
|
|
44
|
+
const _sfc_main$o = /* @__PURE__ */ defineComponent({
|
|
45
|
+
__name: "CodeLink",
|
|
54
46
|
props: {
|
|
55
|
-
config:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
type: Object
|
|
60
|
-
},
|
|
61
|
-
name: {
|
|
62
|
-
type: String
|
|
63
|
-
},
|
|
64
|
-
prop: {
|
|
65
|
-
type: String
|
|
66
|
-
}
|
|
47
|
+
config: null,
|
|
48
|
+
model: null,
|
|
49
|
+
name: null,
|
|
50
|
+
prop: null
|
|
67
51
|
},
|
|
68
52
|
emits: ["change"],
|
|
69
|
-
setup(
|
|
70
|
-
const
|
|
71
|
-
|
|
53
|
+
setup(__props, { emit }) {
|
|
54
|
+
const props = __props;
|
|
55
|
+
const formConfig = computed(() => ({
|
|
56
|
+
...props.config,
|
|
57
|
+
text: "",
|
|
58
|
+
type: "link",
|
|
59
|
+
form: [
|
|
60
|
+
{
|
|
61
|
+
name: props.name,
|
|
62
|
+
type: "vs-code"
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}));
|
|
66
|
+
const modelValue = reactive({
|
|
67
|
+
form: {
|
|
68
|
+
[props.name]: ""
|
|
69
|
+
}
|
|
72
70
|
});
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
watch(
|
|
72
|
+
() => props.model[props.name],
|
|
73
|
+
(value) => {
|
|
74
|
+
modelValue.form = {
|
|
75
|
+
[props.name]: serialize(value, {
|
|
76
|
+
space: 2,
|
|
77
|
+
unsafe: true
|
|
78
|
+
}).replace(/"(\w+)":\s/g, "$1: ")
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
immediate: true
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
const changeHandler = (v) => {
|
|
86
|
+
if (!props.name || !props.model)
|
|
75
87
|
return;
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return {
|
|
82
|
-
modelValue,
|
|
83
|
-
formConfig: computed(() => ({
|
|
84
|
-
...props.config,
|
|
85
|
-
text: "",
|
|
86
|
-
type: "link",
|
|
87
|
-
form: [
|
|
88
|
-
{
|
|
89
|
-
name: props.name,
|
|
90
|
-
type: "vs-code"
|
|
91
|
-
}
|
|
92
|
-
]
|
|
93
|
-
})),
|
|
94
|
-
changeHandler(v) {
|
|
95
|
-
if (!props.name || !props.model)
|
|
96
|
-
return;
|
|
97
|
-
try {
|
|
98
|
-
props.model[props.name] = eval(`${v[props.name]}`);
|
|
99
|
-
emit("change", props.model[props.name]);
|
|
100
|
-
} catch (e) {
|
|
101
|
-
console.error(e);
|
|
102
|
-
}
|
|
88
|
+
try {
|
|
89
|
+
props.model[props.name] = eval(`(${v[props.name]})`);
|
|
90
|
+
emit("change", props.model[props.name]);
|
|
91
|
+
} catch (e) {
|
|
92
|
+
console.error(e);
|
|
103
93
|
}
|
|
104
94
|
};
|
|
95
|
+
return (_ctx, _cache) => {
|
|
96
|
+
const _component_m_fields_link = resolveComponent("m-fields-link");
|
|
97
|
+
return openBlock(), createBlock(_component_m_fields_link, {
|
|
98
|
+
config: unref(formConfig),
|
|
99
|
+
model: modelValue,
|
|
100
|
+
name: "form",
|
|
101
|
+
onChange: changeHandler
|
|
102
|
+
}, null, 8, ["config", "model"]);
|
|
103
|
+
};
|
|
105
104
|
}
|
|
106
105
|
});
|
|
107
106
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
return openBlock(), createBlock(_component_m_fields_link, {
|
|
111
|
-
config: _ctx.formConfig,
|
|
112
|
-
model: _ctx.modelValue,
|
|
113
|
-
name: "form",
|
|
114
|
-
onChange: _ctx.changeHandler
|
|
115
|
-
}, null, 8, ["config", "model", "onChange"]);
|
|
116
|
-
}
|
|
117
|
-
const CodeLink = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["render", _sfc_render$9]]);
|
|
118
|
-
|
|
119
|
-
const _hoisted_1$c = /* @__PURE__ */ createTextVNode("\u53D6\u6D88");
|
|
120
|
-
const _sfc_main$m = /* @__PURE__ */ defineComponent({
|
|
107
|
+
const _hoisted_1$b = /* @__PURE__ */ createTextVNode("\u53D6\u6D88");
|
|
108
|
+
const _sfc_main$n = /* @__PURE__ */ defineComponent({
|
|
121
109
|
__name: "UISelect",
|
|
122
110
|
props: {
|
|
123
111
|
config: null,
|
|
@@ -182,7 +170,7 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
|
|
|
182
170
|
style: { "padding": "0" }
|
|
183
171
|
}, {
|
|
184
172
|
default: withCtx(() => [
|
|
185
|
-
_hoisted_1$
|
|
173
|
+
_hoisted_1$b
|
|
186
174
|
]),
|
|
187
175
|
_: 1
|
|
188
176
|
}, 8, ["icon"])
|
|
@@ -245,7 +233,7 @@ const toString = (v, language) => {
|
|
|
245
233
|
}
|
|
246
234
|
return value;
|
|
247
235
|
};
|
|
248
|
-
const _sfc_main$
|
|
236
|
+
const _sfc_main$m = defineComponent({
|
|
249
237
|
name: "magic-code-editor",
|
|
250
238
|
props: {
|
|
251
239
|
initValues: {
|
|
@@ -274,10 +262,12 @@ const _sfc_main$l = defineComponent({
|
|
|
274
262
|
const values = ref("");
|
|
275
263
|
const loading = ref(false);
|
|
276
264
|
const codeEditor = ref();
|
|
277
|
-
const resizeObserver = new globalThis.ResizeObserver(
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
265
|
+
const resizeObserver = new globalThis.ResizeObserver(
|
|
266
|
+
throttle(() => {
|
|
267
|
+
vsEditor?.layout();
|
|
268
|
+
vsDiffEditor?.layout();
|
|
269
|
+
}, 300)
|
|
270
|
+
);
|
|
281
271
|
const setEditorValue = (v, m) => {
|
|
282
272
|
values.value = toString(v, props.language);
|
|
283
273
|
if (props.type === "diff") {
|
|
@@ -322,14 +312,18 @@ const _sfc_main$l = defineComponent({
|
|
|
322
312
|
}
|
|
323
313
|
resizeObserver.observe(codeEditor.value);
|
|
324
314
|
};
|
|
325
|
-
watch(
|
|
326
|
-
|
|
327
|
-
|
|
315
|
+
watch(
|
|
316
|
+
() => props.initValues,
|
|
317
|
+
(v, preV) => {
|
|
318
|
+
if (v !== preV) {
|
|
319
|
+
setEditorValue(props.initValues, props.modifiedValues);
|
|
320
|
+
}
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
deep: true,
|
|
324
|
+
immediate: true
|
|
328
325
|
}
|
|
329
|
-
|
|
330
|
-
deep: true,
|
|
331
|
-
immediate: true
|
|
332
|
-
});
|
|
326
|
+
);
|
|
333
327
|
onMounted(async () => {
|
|
334
328
|
loading.value = true;
|
|
335
329
|
init();
|
|
@@ -353,14 +347,22 @@ const _sfc_main$l = defineComponent({
|
|
|
353
347
|
}
|
|
354
348
|
});
|
|
355
349
|
|
|
356
|
-
const
|
|
350
|
+
const _export_sfc = (sfc, props) => {
|
|
351
|
+
const target = sfc.__vccOpts || sfc;
|
|
352
|
+
for (const [key, val] of props) {
|
|
353
|
+
target[key] = val;
|
|
354
|
+
}
|
|
355
|
+
return target;
|
|
356
|
+
};
|
|
357
|
+
|
|
358
|
+
const _hoisted_1$a = {
|
|
357
359
|
ref: "codeEditor",
|
|
358
360
|
class: "magic-code-editor"
|
|
359
361
|
};
|
|
360
|
-
function _sfc_render$
|
|
361
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
362
|
+
function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
|
|
363
|
+
return openBlock(), createElementBlock("div", _hoisted_1$a, null, 512);
|
|
362
364
|
}
|
|
363
|
-
const CodeEditor = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
365
|
+
const CodeEditor = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["render", _sfc_render$6]]);
|
|
364
366
|
|
|
365
367
|
let $TMAGIC_EDITOR = {};
|
|
366
368
|
const setConfig = (option) => {
|
|
@@ -633,7 +635,9 @@ class WebStorage extends BaseService {
|
|
|
633
635
|
}
|
|
634
636
|
async getItem(key, options = {}) {
|
|
635
637
|
const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);
|
|
636
|
-
const { protocol = options.protocol, item } = this.getValueAndProtocol(
|
|
638
|
+
const { protocol = options.protocol, item } = this.getValueAndProtocol(
|
|
639
|
+
storage.getItem(`${options.namespace || namespace}:${key}`)
|
|
640
|
+
);
|
|
637
641
|
if (item === null)
|
|
638
642
|
return null;
|
|
639
643
|
switch (protocol) {
|
|
@@ -924,10 +928,12 @@ class Props extends BaseService {
|
|
|
924
928
|
const [id, defaultPropsValue, data] = await Promise.all([
|
|
925
929
|
this.createId(type),
|
|
926
930
|
this.getDefaultPropsValue(type),
|
|
927
|
-
this.setNewItemId(
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
+
this.setNewItemId(
|
|
932
|
+
cloneDeep({
|
|
933
|
+
type,
|
|
934
|
+
...defaultValue
|
|
935
|
+
})
|
|
936
|
+
)
|
|
931
937
|
]);
|
|
932
938
|
return {
|
|
933
939
|
id,
|
|
@@ -980,37 +986,39 @@ const beforePaste = async (position, config) => {
|
|
|
980
986
|
return config;
|
|
981
987
|
const curNode = editorService.get("node");
|
|
982
988
|
const { left: referenceLeft, top: referenceTop } = config[0].style;
|
|
983
|
-
const pasteConfigs = await Promise.all(
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
if (pastePosition.left && configItem.style?.left) {
|
|
990
|
-
pastePosition.left = configItem.style.left - referenceLeft + pastePosition.left;
|
|
991
|
-
}
|
|
992
|
-
if (pastePosition.top && configItem.style?.top) {
|
|
993
|
-
pastePosition.top = configItem.style?.top - referenceTop + pastePosition.top;
|
|
994
|
-
}
|
|
995
|
-
const pasteConfig = await propsService.setNewItemId(configItem);
|
|
996
|
-
if (pasteConfig.style) {
|
|
997
|
-
const { left, top } = pasteConfig.style;
|
|
998
|
-
if (typeof left === "number" || !!left && !isNaN(Number(left))) {
|
|
999
|
-
pasteConfig.style.left = Number(left) + offsetX;
|
|
989
|
+
const pasteConfigs = await Promise.all(
|
|
990
|
+
config.map(async (configItem) => {
|
|
991
|
+
const { offsetX = 0, offsetY = 0, ...positionClone } = position;
|
|
992
|
+
let pastePosition = positionClone;
|
|
993
|
+
if (!isEmpty(pastePosition) && curNode.items) {
|
|
994
|
+
pastePosition = getPositionInContainer(pastePosition, curNode.id);
|
|
1000
995
|
}
|
|
1001
|
-
if (
|
|
1002
|
-
|
|
996
|
+
if (pastePosition.left && configItem.style?.left) {
|
|
997
|
+
pastePosition.left = configItem.style.left - referenceLeft + pastePosition.left;
|
|
1003
998
|
}
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
999
|
+
if (pastePosition.top && configItem.style?.top) {
|
|
1000
|
+
pastePosition.top = configItem.style?.top - referenceTop + pastePosition.top;
|
|
1001
|
+
}
|
|
1002
|
+
const pasteConfig = await propsService.setNewItemId(configItem);
|
|
1003
|
+
if (pasteConfig.style) {
|
|
1004
|
+
const { left, top } = pasteConfig.style;
|
|
1005
|
+
if (typeof left === "number" || !!left && !isNaN(Number(left))) {
|
|
1006
|
+
pasteConfig.style.left = Number(left) + offsetX;
|
|
1007
|
+
}
|
|
1008
|
+
if (typeof top === "number" || !!top && !isNaN(Number(top))) {
|
|
1009
|
+
pasteConfig.style.top = Number(top) + offsetY;
|
|
1010
|
+
}
|
|
1011
|
+
pasteConfig.style = {
|
|
1012
|
+
...pasteConfig.style,
|
|
1013
|
+
...pastePosition
|
|
1014
|
+
};
|
|
1015
|
+
}
|
|
1016
|
+
if (isPage(pasteConfig)) {
|
|
1017
|
+
pasteConfig.name = generatePageNameByApp(editorService.get("root"));
|
|
1018
|
+
}
|
|
1019
|
+
return pasteConfig;
|
|
1020
|
+
})
|
|
1021
|
+
);
|
|
1014
1022
|
return pasteConfigs;
|
|
1015
1023
|
};
|
|
1016
1024
|
const getPositionInContainer = (position = {}, id) => {
|
|
@@ -1051,28 +1059,31 @@ class Editor$1 extends BaseService {
|
|
|
1051
1059
|
});
|
|
1052
1060
|
isHistoryStateChange = false;
|
|
1053
1061
|
constructor() {
|
|
1054
|
-
super(
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1062
|
+
super(
|
|
1063
|
+
[
|
|
1064
|
+
"getLayout",
|
|
1065
|
+
"select",
|
|
1066
|
+
"doAdd",
|
|
1067
|
+
"add",
|
|
1068
|
+
"doRemove",
|
|
1069
|
+
"remove",
|
|
1070
|
+
"doUpdate",
|
|
1071
|
+
"update",
|
|
1072
|
+
"sort",
|
|
1073
|
+
"copy",
|
|
1074
|
+
"paste",
|
|
1075
|
+
"doPaste",
|
|
1076
|
+
"duAlignCenter",
|
|
1077
|
+
"alignCenter",
|
|
1078
|
+
"moveLayer",
|
|
1079
|
+
"moveToContainer",
|
|
1080
|
+
"move",
|
|
1081
|
+
"undo",
|
|
1082
|
+
"redo",
|
|
1083
|
+
"highlight"
|
|
1084
|
+
],
|
|
1085
|
+
["select", "update", "moveLayer"]
|
|
1086
|
+
);
|
|
1076
1087
|
}
|
|
1077
1088
|
set(name, value) {
|
|
1078
1089
|
this.state[name] = value;
|
|
@@ -1144,11 +1155,15 @@ class Editor$1 extends BaseService {
|
|
|
1144
1155
|
historyService.empty();
|
|
1145
1156
|
}
|
|
1146
1157
|
if (node?.id) {
|
|
1147
|
-
this.get("stage")?.renderer.runtime?.getApp?.()?.emit(
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1158
|
+
this.get("stage")?.renderer.runtime?.getApp?.()?.emit(
|
|
1159
|
+
"editor:select",
|
|
1160
|
+
{
|
|
1161
|
+
node,
|
|
1162
|
+
page,
|
|
1163
|
+
parent
|
|
1164
|
+
},
|
|
1165
|
+
getNodePath(node.id, this.get("root").items)
|
|
1166
|
+
);
|
|
1152
1167
|
}
|
|
1153
1168
|
this.emit("select", node);
|
|
1154
1169
|
return node;
|
|
@@ -1214,8 +1229,11 @@ class Editor$1 extends BaseService {
|
|
|
1214
1229
|
parentId: parent.id,
|
|
1215
1230
|
root: cloneDeep(root)
|
|
1216
1231
|
});
|
|
1217
|
-
|
|
1218
|
-
|
|
1232
|
+
const newStyle = fixNodePosition(node, parent, stage);
|
|
1233
|
+
if (newStyle && (newStyle.top !== node.style.top || newStyle.left !== node.style.left)) {
|
|
1234
|
+
node.style = newStyle;
|
|
1235
|
+
await stage?.update({ config: cloneDeep(node), parentId: parent.id, root: cloneDeep(root) });
|
|
1236
|
+
}
|
|
1219
1237
|
this.addModifiedNodeId(node.id);
|
|
1220
1238
|
return node;
|
|
1221
1239
|
}
|
|
@@ -1230,12 +1248,14 @@ class Editor$1 extends BaseService {
|
|
|
1230
1248
|
} else {
|
|
1231
1249
|
addNodes.push(...addNode);
|
|
1232
1250
|
}
|
|
1233
|
-
const newNodes = await Promise.all(
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1251
|
+
const newNodes = await Promise.all(
|
|
1252
|
+
addNodes.map((node) => {
|
|
1253
|
+
const parentNode = parent && typeof parent !== "function" ? parent : getAddParent(node);
|
|
1254
|
+
if (!parentNode)
|
|
1255
|
+
throw new Error("\u672A\u627E\u5230\u7236\u5143\u7D20");
|
|
1256
|
+
return this.doAdd(node, parentNode);
|
|
1257
|
+
})
|
|
1258
|
+
);
|
|
1239
1259
|
if (newNodes.length > 1) {
|
|
1240
1260
|
const newNodeIds = newNodes.map((node) => node.id);
|
|
1241
1261
|
stage?.multiSelect(newNodeIds);
|
|
@@ -1854,16 +1874,6 @@ const error = (...args) => {
|
|
|
1854
1874
|
}
|
|
1855
1875
|
};
|
|
1856
1876
|
|
|
1857
|
-
const DEFAULT_LEFT_COLUMN_WIDTH = 310;
|
|
1858
|
-
const MIN_LEFT_COLUMN_WIDTH = 45;
|
|
1859
|
-
const DEFAULT_RIGHT_COLUMN_WIDTH = 480;
|
|
1860
|
-
const MIN_RIGHT_COLUMN_WIDTH = 1;
|
|
1861
|
-
const COLUMN_WIDTH_STORAGE_KEY = "$MagicEditorColumnWidthData";
|
|
1862
|
-
const defaultColumnWidth = {
|
|
1863
|
-
left: DEFAULT_LEFT_COLUMN_WIDTH,
|
|
1864
|
-
center: globalThis.document.body.clientWidth - DEFAULT_LEFT_COLUMN_WIDTH - DEFAULT_RIGHT_COLUMN_WIDTH,
|
|
1865
|
-
right: DEFAULT_RIGHT_COLUMN_WIDTH
|
|
1866
|
-
};
|
|
1867
1877
|
const state = reactive({
|
|
1868
1878
|
uiSelectMode: false,
|
|
1869
1879
|
showSrc: false,
|
|
@@ -1876,7 +1886,11 @@ const state = reactive({
|
|
|
1876
1886
|
width: 375,
|
|
1877
1887
|
height: 817
|
|
1878
1888
|
},
|
|
1879
|
-
columnWidth:
|
|
1889
|
+
columnWidth: {
|
|
1890
|
+
left: 0,
|
|
1891
|
+
right: 0,
|
|
1892
|
+
center: 0
|
|
1893
|
+
},
|
|
1880
1894
|
showGuides: true,
|
|
1881
1895
|
showRule: true,
|
|
1882
1896
|
propsPanelSize: "small",
|
|
@@ -1884,19 +1898,10 @@ const state = reactive({
|
|
|
1884
1898
|
});
|
|
1885
1899
|
class Ui extends BaseService {
|
|
1886
1900
|
constructor() {
|
|
1887
|
-
super(["
|
|
1888
|
-
globalThis.addEventListener("resize", () => {
|
|
1889
|
-
this.setColumnWidth({
|
|
1890
|
-
center: "auto"
|
|
1891
|
-
});
|
|
1892
|
-
});
|
|
1901
|
+
super(["zoom", "calcZoom"]);
|
|
1893
1902
|
}
|
|
1894
1903
|
set(name, value) {
|
|
1895
1904
|
const mask = editorService.get("stage")?.mask;
|
|
1896
|
-
if (name === "columnWidth") {
|
|
1897
|
-
this.setColumnWidth(value);
|
|
1898
|
-
return;
|
|
1899
|
-
}
|
|
1900
1905
|
if (name === "stageRect") {
|
|
1901
1906
|
this.setStageRect(value);
|
|
1902
1907
|
return;
|
|
@@ -1912,17 +1917,6 @@ class Ui extends BaseService {
|
|
|
1912
1917
|
get(name) {
|
|
1913
1918
|
return state[name];
|
|
1914
1919
|
}
|
|
1915
|
-
async initColumnWidth() {
|
|
1916
|
-
const columnWidthCacheData = globalThis.localStorage.getItem(COLUMN_WIDTH_STORAGE_KEY);
|
|
1917
|
-
if (columnWidthCacheData) {
|
|
1918
|
-
try {
|
|
1919
|
-
const columnWidthCache = JSON.parse(columnWidthCacheData);
|
|
1920
|
-
this.setColumnWidth(columnWidthCache);
|
|
1921
|
-
} catch (e) {
|
|
1922
|
-
console.error(e);
|
|
1923
|
-
}
|
|
1924
|
-
}
|
|
1925
|
-
}
|
|
1926
1920
|
async zoom(zoom) {
|
|
1927
1921
|
this.set("zoom", (this.get("zoom") * 100 + zoom * 100) / 100);
|
|
1928
1922
|
if (this.get("zoom") < 0.1)
|
|
@@ -1943,30 +1937,6 @@ class Ui extends BaseService {
|
|
|
1943
1937
|
destroy() {
|
|
1944
1938
|
this.removeAllListeners();
|
|
1945
1939
|
}
|
|
1946
|
-
setColumnWidth({ left, center, right }) {
|
|
1947
|
-
const columnWidth = {
|
|
1948
|
-
...toRaw(this.get("columnWidth"))
|
|
1949
|
-
};
|
|
1950
|
-
if (left) {
|
|
1951
|
-
columnWidth.left = Math.max(left, MIN_LEFT_COLUMN_WIDTH);
|
|
1952
|
-
}
|
|
1953
|
-
if (right) {
|
|
1954
|
-
columnWidth.right = Math.max(right, MIN_RIGHT_COLUMN_WIDTH);
|
|
1955
|
-
}
|
|
1956
|
-
if (!center || center === "auto") {
|
|
1957
|
-
const bodyWidth = globalThis.document.body.clientWidth;
|
|
1958
|
-
columnWidth.center = bodyWidth - (columnWidth?.left || 0) - (columnWidth?.right || 0);
|
|
1959
|
-
if (columnWidth.center <= 0) {
|
|
1960
|
-
columnWidth.left = defaultColumnWidth.left;
|
|
1961
|
-
columnWidth.center = defaultColumnWidth.center;
|
|
1962
|
-
columnWidth.right = defaultColumnWidth.right;
|
|
1963
|
-
}
|
|
1964
|
-
} else {
|
|
1965
|
-
columnWidth.center = center;
|
|
1966
|
-
}
|
|
1967
|
-
globalThis.localStorage.setItem(COLUMN_WIDTH_STORAGE_KEY, JSON.stringify(columnWidth));
|
|
1968
|
-
state.columnWidth = columnWidth;
|
|
1969
|
-
}
|
|
1970
1940
|
async setStageRect(value) {
|
|
1971
1941
|
state.stageRect = {
|
|
1972
1942
|
...state.stageRect,
|
|
@@ -2032,7 +2002,9 @@ const useStage = (stageOptions) => {
|
|
|
2032
2002
|
uiService.set("showGuides", true);
|
|
2033
2003
|
if (!root.value || !page.value)
|
|
2034
2004
|
return;
|
|
2035
|
-
const storageKey = getGuideLineKey(
|
|
2005
|
+
const storageKey = getGuideLineKey(
|
|
2006
|
+
e.type === GuidesType.HORIZONTAL ? H_GUIDE_LINE_STORAGE_KEY : V_GUIDE_LINE_STORAGE_KEY
|
|
2007
|
+
);
|
|
2036
2008
|
if (e.guides.length) {
|
|
2037
2009
|
globalThis.localStorage.setItem(storageKey, JSON.stringify(e.guides));
|
|
2038
2010
|
} else {
|
|
@@ -2042,7 +2014,7 @@ const useStage = (stageOptions) => {
|
|
|
2042
2014
|
return stage;
|
|
2043
2015
|
};
|
|
2044
2016
|
|
|
2045
|
-
const _sfc_main$
|
|
2017
|
+
const _sfc_main$l = defineComponent({
|
|
2046
2018
|
components: { Plus },
|
|
2047
2019
|
setup() {
|
|
2048
2020
|
const services = inject("services");
|
|
@@ -2060,14 +2032,14 @@ const _sfc_main$k = defineComponent({
|
|
|
2060
2032
|
}
|
|
2061
2033
|
});
|
|
2062
2034
|
|
|
2063
|
-
const _hoisted_1$
|
|
2064
|
-
const _hoisted_2$
|
|
2035
|
+
const _hoisted_1$9 = { class: "m-editor-empty-panel" };
|
|
2036
|
+
const _hoisted_2$3 = { class: "m-editor-empty-content" };
|
|
2065
2037
|
const _hoisted_3 = /* @__PURE__ */ createElementVNode("p", null, "\u65B0\u589E\u9875\u9762", -1);
|
|
2066
|
-
function _sfc_render$
|
|
2038
|
+
function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
|
|
2067
2039
|
const _component_plus = resolveComponent("plus");
|
|
2068
2040
|
const _component_el_icon = resolveComponent("el-icon");
|
|
2069
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
2070
|
-
createElementVNode("div", _hoisted_2$
|
|
2041
|
+
return openBlock(), createElementBlock("div", _hoisted_1$9, [
|
|
2042
|
+
createElementVNode("div", _hoisted_2$3, [
|
|
2071
2043
|
createElementVNode("div", {
|
|
2072
2044
|
class: "m-editor-empty-button",
|
|
2073
2045
|
onClick: _cache[0] || (_cache[0] = (...args) => _ctx.clickHandler && _ctx.clickHandler(...args))
|
|
@@ -2085,17 +2057,12 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
2085
2057
|
])
|
|
2086
2058
|
]);
|
|
2087
2059
|
}
|
|
2088
|
-
const AddPageBox = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
2060
|
+
const AddPageBox = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["render", _sfc_render$5]]);
|
|
2089
2061
|
|
|
2090
|
-
const _sfc_main$
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
type: String
|
|
2095
|
-
}
|
|
2096
|
-
},
|
|
2097
|
-
setup(props) {
|
|
2098
|
-
const services = inject("services");
|
|
2062
|
+
const _sfc_main$k = /* @__PURE__ */ defineComponent({
|
|
2063
|
+
__name: "Resizer",
|
|
2064
|
+
emits: ["change"],
|
|
2065
|
+
setup(__props, { emit }) {
|
|
2099
2066
|
const target = ref();
|
|
2100
2067
|
let getso;
|
|
2101
2068
|
onMounted(() => {
|
|
@@ -2105,124 +2072,220 @@ const _sfc_main$j = defineComponent({
|
|
|
2105
2072
|
container: window,
|
|
2106
2073
|
pinchOutside: true
|
|
2107
2074
|
}).on("drag", (e) => {
|
|
2108
|
-
if (!target.value
|
|
2075
|
+
if (!target.value)
|
|
2109
2076
|
return;
|
|
2110
|
-
|
|
2111
|
-
...toRaw(services.uiService.get("columnWidth"))
|
|
2112
|
-
};
|
|
2113
|
-
if (props.type === "left") {
|
|
2114
|
-
left += e.deltaX;
|
|
2115
|
-
} else if (props.type === "right") {
|
|
2116
|
-
right -= e.deltaX;
|
|
2117
|
-
}
|
|
2118
|
-
services.uiService.set("columnWidth", {
|
|
2119
|
-
left,
|
|
2120
|
-
right
|
|
2121
|
-
});
|
|
2077
|
+
emit("change", e.deltaX);
|
|
2122
2078
|
});
|
|
2123
2079
|
});
|
|
2124
2080
|
onUnmounted(() => {
|
|
2125
2081
|
getso?.unset();
|
|
2126
2082
|
});
|
|
2127
|
-
return {
|
|
2128
|
-
|
|
2083
|
+
return (_ctx, _cache) => {
|
|
2084
|
+
return openBlock(), createElementBlock("span", {
|
|
2085
|
+
ref_key: "target",
|
|
2086
|
+
ref: target,
|
|
2087
|
+
class: "m-editor-resizer"
|
|
2088
|
+
}, [
|
|
2089
|
+
renderSlot(_ctx.$slots, "default")
|
|
2090
|
+
], 512);
|
|
2129
2091
|
};
|
|
2130
2092
|
}
|
|
2131
2093
|
});
|
|
2132
2094
|
|
|
2133
|
-
const
|
|
2134
|
-
|
|
2135
|
-
class: "m-editor-resizer"
|
|
2136
|
-
};
|
|
2137
|
-
function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
|
|
2138
|
-
return openBlock(), createElementBlock("span", _hoisted_1$9, [
|
|
2139
|
-
renderSlot(_ctx.$slots, "default")
|
|
2140
|
-
], 512);
|
|
2141
|
-
}
|
|
2142
|
-
const Resizer = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["render", _sfc_render$6]]);
|
|
2143
|
-
|
|
2144
|
-
const _sfc_main$i = defineComponent({
|
|
2145
|
-
components: {
|
|
2146
|
-
AddPageBox,
|
|
2147
|
-
Resizer
|
|
2148
|
-
},
|
|
2095
|
+
const _sfc_main$j = /* @__PURE__ */ defineComponent({
|
|
2096
|
+
__name: "Layout",
|
|
2149
2097
|
props: {
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
}
|
|
2098
|
+
left: null,
|
|
2099
|
+
right: null,
|
|
2100
|
+
minLeft: { default: 1 },
|
|
2101
|
+
minRight: { default: 1 },
|
|
2102
|
+
leftClass: null,
|
|
2103
|
+
rightClass: null,
|
|
2104
|
+
centerClass: null
|
|
2154
2105
|
},
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
const
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
}
|
|
2106
|
+
emits: ["update:left", "change", "update:right"],
|
|
2107
|
+
setup(__props, { emit }) {
|
|
2108
|
+
const props = __props;
|
|
2109
|
+
const el = ref();
|
|
2110
|
+
let clientWidth = 0;
|
|
2111
|
+
const resizerObserver = new ResizeObserver((entries) => {
|
|
2112
|
+
for (const { contentRect } of entries) {
|
|
2113
|
+
clientWidth = contentRect.width;
|
|
2114
|
+
center.value = clientWidth - (props.left || 0) - (props.right || 0);
|
|
2115
|
+
emit("change", {
|
|
2116
|
+
left: props.left,
|
|
2117
|
+
center: center.value,
|
|
2118
|
+
right: props.right
|
|
2119
|
+
});
|
|
2120
|
+
}
|
|
2121
|
+
});
|
|
2122
|
+
onMounted(() => {
|
|
2123
|
+
if (el.value) {
|
|
2124
|
+
resizerObserver.observe(el.value);
|
|
2169
2125
|
}
|
|
2126
|
+
});
|
|
2127
|
+
onUnmounted(() => {
|
|
2128
|
+
resizerObserver.disconnect();
|
|
2129
|
+
});
|
|
2130
|
+
const center = ref(0);
|
|
2131
|
+
const changeLeft = (deltaX) => {
|
|
2132
|
+
if (typeof props.left === "undefined")
|
|
2133
|
+
return;
|
|
2134
|
+
const left = Math.max(props.left + deltaX, props.minLeft) || 0;
|
|
2135
|
+
emit("update:left", left);
|
|
2136
|
+
center.value = clientWidth - left - (props.right || 0);
|
|
2137
|
+
emit("change", {
|
|
2138
|
+
left,
|
|
2139
|
+
center: center.value,
|
|
2140
|
+
right: props.right
|
|
2141
|
+
});
|
|
2142
|
+
};
|
|
2143
|
+
const changeRight = (deltaX) => {
|
|
2144
|
+
if (typeof props.right === "undefined")
|
|
2145
|
+
return;
|
|
2146
|
+
const right = Math.max(props.right - deltaX, props.minRight) || 0;
|
|
2147
|
+
emit("update:right", right);
|
|
2148
|
+
center.value = clientWidth - (props.left || 0) - right;
|
|
2149
|
+
emit("change", {
|
|
2150
|
+
left: props.left,
|
|
2151
|
+
center: center.value,
|
|
2152
|
+
right
|
|
2153
|
+
});
|
|
2154
|
+
};
|
|
2155
|
+
return (_ctx, _cache) => {
|
|
2156
|
+
return openBlock(), createElementBlock("div", {
|
|
2157
|
+
ref_key: "el",
|
|
2158
|
+
ref: el
|
|
2159
|
+
}, [
|
|
2160
|
+
typeof props.left !== "undefined" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
2161
|
+
createElementVNode("div", {
|
|
2162
|
+
class: normalizeClass(["m-editor-layout-left", __props.leftClass]),
|
|
2163
|
+
style: normalizeStyle(`width: ${__props.left}px`)
|
|
2164
|
+
}, [
|
|
2165
|
+
renderSlot(_ctx.$slots, "left")
|
|
2166
|
+
], 6),
|
|
2167
|
+
createVNode(_sfc_main$k, { onChange: changeLeft })
|
|
2168
|
+
], 64)) : createCommentVNode("", true),
|
|
2169
|
+
createElementVNode("div", {
|
|
2170
|
+
class: normalizeClass(["m-editor-layout-center", __props.centerClass]),
|
|
2171
|
+
style: normalizeStyle(`width: ${center.value}px`)
|
|
2172
|
+
}, [
|
|
2173
|
+
renderSlot(_ctx.$slots, "center")
|
|
2174
|
+
], 6),
|
|
2175
|
+
typeof props.right !== "undefined" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
2176
|
+
createVNode(_sfc_main$k, { onChange: changeRight }),
|
|
2177
|
+
createElementVNode("div", {
|
|
2178
|
+
class: normalizeClass(["m-editor-layout-right", __props.rightClass]),
|
|
2179
|
+
style: normalizeStyle(`width: ${__props.right}px`)
|
|
2180
|
+
}, [
|
|
2181
|
+
renderSlot(_ctx.$slots, "right")
|
|
2182
|
+
], 6)
|
|
2183
|
+
], 64)) : createCommentVNode("", true)
|
|
2184
|
+
], 512);
|
|
2170
2185
|
};
|
|
2171
2186
|
}
|
|
2172
2187
|
});
|
|
2173
2188
|
|
|
2174
2189
|
const _hoisted_1$8 = { class: "m-editor" };
|
|
2175
|
-
const
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
}
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2190
|
+
const _sfc_main$i = /* @__PURE__ */ defineComponent({
|
|
2191
|
+
__name: "Framework",
|
|
2192
|
+
props: {
|
|
2193
|
+
codeOptions: { default: () => ({}) }
|
|
2194
|
+
},
|
|
2195
|
+
setup(__props) {
|
|
2196
|
+
const DEFAULT_LEFT_COLUMN_WIDTH = 310;
|
|
2197
|
+
const DEFAULT_RIGHT_COLUMN_WIDTH = 480;
|
|
2198
|
+
const { editorService, uiService } = inject("services") || {};
|
|
2199
|
+
const root = computed(() => editorService?.get("root"));
|
|
2200
|
+
const pageLength = computed(() => editorService?.get("pageLength") || 0);
|
|
2201
|
+
const showSrc = computed(() => uiService?.get("showSrc"));
|
|
2202
|
+
const columnWidth = ref({
|
|
2203
|
+
left: DEFAULT_LEFT_COLUMN_WIDTH,
|
|
2204
|
+
center: 0,
|
|
2205
|
+
right: 0
|
|
2206
|
+
});
|
|
2207
|
+
uiService?.set("columnWidth", columnWidth.value);
|
|
2208
|
+
watchEffect(() => {
|
|
2209
|
+
if (pageLength.value <= 0) {
|
|
2210
|
+
columnWidth.value.right = void 0;
|
|
2211
|
+
columnWidth.value.center = globalThis.document.body.clientWidth - DEFAULT_LEFT_COLUMN_WIDTH;
|
|
2212
|
+
} else {
|
|
2213
|
+
columnWidth.value.right = columnWidth.value.right || DEFAULT_RIGHT_COLUMN_WIDTH;
|
|
2214
|
+
columnWidth.value.center = globalThis.document.body.clientWidth - DEFAULT_LEFT_COLUMN_WIDTH - DEFAULT_RIGHT_COLUMN_WIDTH;
|
|
2215
|
+
}
|
|
2216
|
+
});
|
|
2217
|
+
const saveCode = (value) => {
|
|
2218
|
+
try {
|
|
2219
|
+
editorService?.set("root", eval(value));
|
|
2220
|
+
} catch (e) {
|
|
2221
|
+
console.error(e);
|
|
2222
|
+
}
|
|
2223
|
+
};
|
|
2224
|
+
const COLUMN_WIDTH_STORAGE_KEY = "$MagicEditorColumnWidthData";
|
|
2225
|
+
const columnWidthCacheData = globalThis.localStorage.getItem(COLUMN_WIDTH_STORAGE_KEY);
|
|
2226
|
+
if (columnWidthCacheData) {
|
|
2227
|
+
try {
|
|
2228
|
+
const columnWidthCache = JSON.parse(columnWidthCacheData);
|
|
2229
|
+
columnWidth.value = columnWidthCache;
|
|
2230
|
+
} catch (e) {
|
|
2231
|
+
console.error(e);
|
|
2232
|
+
}
|
|
2233
|
+
}
|
|
2234
|
+
const columnWidthChange = (columnWidth2) => {
|
|
2235
|
+
uiService?.set("columnWidth", columnWidth2);
|
|
2236
|
+
globalThis.localStorage.setItem(COLUMN_WIDTH_STORAGE_KEY, JSON.stringify(columnWidth2));
|
|
2237
|
+
};
|
|
2238
|
+
return (_ctx, _cache) => {
|
|
2239
|
+
const _component_magic_code_editor = resolveComponent("magic-code-editor");
|
|
2240
|
+
const _component_el_scrollbar = resolveComponent("el-scrollbar");
|
|
2241
|
+
return openBlock(), createElementBlock("div", _hoisted_1$8, [
|
|
2242
|
+
renderSlot(_ctx.$slots, "nav", { class: "m-editor-nav-menu" }),
|
|
2243
|
+
unref(showSrc) ? (openBlock(), createBlock(_component_magic_code_editor, {
|
|
2244
|
+
key: 0,
|
|
2245
|
+
class: "m-editor-content",
|
|
2246
|
+
"init-values": unref(root),
|
|
2247
|
+
options: __props.codeOptions,
|
|
2248
|
+
onSave: saveCode
|
|
2249
|
+
}, null, 8, ["init-values", "options"])) : (openBlock(), createBlock(_sfc_main$j, {
|
|
2250
|
+
key: 1,
|
|
2251
|
+
class: "m-editor-content",
|
|
2252
|
+
"left-class": "m-editor-framework-left",
|
|
2253
|
+
"center-class": "m-editor-framework-center",
|
|
2254
|
+
"right-class": "m-editor-framework-right",
|
|
2255
|
+
left: columnWidth.value.left,
|
|
2256
|
+
"onUpdate:left": _cache[0] || (_cache[0] = ($event) => columnWidth.value.left = $event),
|
|
2257
|
+
right: columnWidth.value.right,
|
|
2258
|
+
"onUpdate:right": _cache[1] || (_cache[1] = ($event) => columnWidth.value.right = $event),
|
|
2259
|
+
"min-left": 45,
|
|
2260
|
+
"min-right": 1,
|
|
2261
|
+
onChange: columnWidthChange
|
|
2262
|
+
}, createSlots({
|
|
2263
|
+
left: withCtx(() => [
|
|
2264
|
+
renderSlot(_ctx.$slots, "sidebar")
|
|
2265
|
+
]),
|
|
2266
|
+
center: withCtx(() => [
|
|
2267
|
+
unref(pageLength) > 0 ? renderSlot(_ctx.$slots, "workspace", { key: 0 }) : renderSlot(_ctx.$slots, "empty", { key: 1 }, () => [
|
|
2268
|
+
createVNode(AddPageBox)
|
|
2269
|
+
])
|
|
2270
|
+
]),
|
|
2271
|
+
_: 2
|
|
2211
2272
|
}, [
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2273
|
+
unref(pageLength) > 0 ? {
|
|
2274
|
+
name: "right",
|
|
2275
|
+
fn: withCtx(() => [
|
|
2276
|
+
createVNode(_component_el_scrollbar, null, {
|
|
2277
|
+
default: withCtx(() => [
|
|
2278
|
+
renderSlot(_ctx.$slots, "props-panel")
|
|
2279
|
+
]),
|
|
2280
|
+
_: 3
|
|
2281
|
+
})
|
|
2282
|
+
])
|
|
2283
|
+
} : void 0
|
|
2284
|
+
]), 1032, ["left", "right"]))
|
|
2285
|
+
]);
|
|
2286
|
+
};
|
|
2287
|
+
}
|
|
2288
|
+
});
|
|
2226
2289
|
|
|
2227
2290
|
const _hoisted_1$7 = ["src"];
|
|
2228
2291
|
const _sfc_main$h = /* @__PURE__ */ defineComponent({
|
|
@@ -2464,7 +2527,13 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
|
2464
2527
|
});
|
|
2465
2528
|
break;
|
|
2466
2529
|
case "zoom":
|
|
2467
|
-
config.push(
|
|
2530
|
+
config.push(
|
|
2531
|
+
...getConfig("zoom-out"),
|
|
2532
|
+
...getConfig(`${parseInt(`${zoom.value * 100}`, 10)}%`),
|
|
2533
|
+
...getConfig("zoom-in"),
|
|
2534
|
+
...getConfig("scale-to-original"),
|
|
2535
|
+
...getConfig("scale-to-fit")
|
|
2536
|
+
);
|
|
2468
2537
|
break;
|
|
2469
2538
|
case "delete":
|
|
2470
2539
|
config.push({
|
|
@@ -2672,11 +2741,15 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
2672
2741
|
const services = inject("services");
|
|
2673
2742
|
const stageOptions = inject("stageOptions");
|
|
2674
2743
|
const stage = computed(() => services?.editorService.get("stage"));
|
|
2675
|
-
const list = computed(
|
|
2676
|
-
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2744
|
+
const list = computed(
|
|
2745
|
+
() => services?.componentListService.getList().map((group) => ({
|
|
2746
|
+
...group,
|
|
2747
|
+
items: group.items.filter((item) => item.text.includes(searchText.value))
|
|
2748
|
+
}))
|
|
2749
|
+
);
|
|
2750
|
+
const collapseValue = computed(
|
|
2751
|
+
() => Array(list.value?.length).fill(1).map((x, i) => i)
|
|
2752
|
+
);
|
|
2680
2753
|
let timeout;
|
|
2681
2754
|
let clientX;
|
|
2682
2755
|
let clientY;
|
|
@@ -2690,11 +2763,14 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
2690
2763
|
const dragstartHandler = ({ text, type, data = {} }, e) => {
|
|
2691
2764
|
if (e.dataTransfer) {
|
|
2692
2765
|
e.dataTransfer.effectAllowed = "move";
|
|
2693
|
-
e.dataTransfer.setData(
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
2766
|
+
e.dataTransfer.setData(
|
|
2767
|
+
"data",
|
|
2768
|
+
serialize({
|
|
2769
|
+
name: text,
|
|
2770
|
+
type,
|
|
2771
|
+
...data
|
|
2772
|
+
}).replace(/"(\w+)":\s/g, "$1: ")
|
|
2773
|
+
);
|
|
2698
2774
|
}
|
|
2699
2775
|
};
|
|
2700
2776
|
const dragendHandler = () => {
|
|
@@ -2950,12 +3026,18 @@ const _sfc_main$b = defineComponent({
|
|
|
2950
3026
|
];
|
|
2951
3027
|
}
|
|
2952
3028
|
if (node.value?.items) {
|
|
2953
|
-
return componentList.value.reduce(
|
|
2954
|
-
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
3029
|
+
return componentList.value.reduce(
|
|
3030
|
+
(subMenuData, group, index) => subMenuData.concat(
|
|
3031
|
+
createMenuItems(group),
|
|
3032
|
+
index < componentList.value.length - 1 ? [
|
|
3033
|
+
{
|
|
3034
|
+
type: "divider",
|
|
3035
|
+
direction: "horizontal"
|
|
3036
|
+
}
|
|
3037
|
+
] : []
|
|
3038
|
+
),
|
|
3039
|
+
[]
|
|
3040
|
+
) || [];
|
|
2959
3041
|
}
|
|
2960
3042
|
return [];
|
|
2961
3043
|
});
|
|
@@ -3147,7 +3229,9 @@ const _sfc_main$a = defineComponent({
|
|
|
3147
3229
|
clicked.value = !clicked.value;
|
|
3148
3230
|
};
|
|
3149
3231
|
const statusData = useStatus(tree, editorService);
|
|
3150
|
-
const canHighlight = computed(
|
|
3232
|
+
const canHighlight = computed(
|
|
3233
|
+
() => statusData.highlightNode.value?.id !== statusData.clickNode.value?.id && !clicked.value
|
|
3234
|
+
);
|
|
3151
3235
|
editorService?.on("remove", () => {
|
|
3152
3236
|
setTimeout(() => {
|
|
3153
3237
|
tree.value?.getNode(editorService.get("node").id)?.updateChildren();
|
|
@@ -3359,9 +3443,12 @@ const _sfc_main$8 = defineComponent({
|
|
|
3359
3443
|
},
|
|
3360
3444
|
setup(props) {
|
|
3361
3445
|
const activeTabName = ref(props.data?.status);
|
|
3362
|
-
watch(
|
|
3363
|
-
|
|
3364
|
-
|
|
3446
|
+
watch(
|
|
3447
|
+
() => props.data?.status,
|
|
3448
|
+
(status) => {
|
|
3449
|
+
activeTabName.value = status || "0";
|
|
3450
|
+
}
|
|
3451
|
+
);
|
|
3365
3452
|
return {
|
|
3366
3453
|
activeTabName
|
|
3367
3454
|
};
|
|
@@ -3839,12 +3926,14 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
3839
3926
|
const props = __props;
|
|
3840
3927
|
const container = ref();
|
|
3841
3928
|
const el = ref();
|
|
3842
|
-
const style = computed(
|
|
3929
|
+
const style = computed(
|
|
3930
|
+
() => `
|
|
3843
3931
|
width: ${props.width}px;
|
|
3844
3932
|
height: ${props.height}px;
|
|
3845
3933
|
position: absolute;
|
|
3846
3934
|
margin-top: 30px;
|
|
3847
|
-
`
|
|
3935
|
+
`
|
|
3936
|
+
);
|
|
3848
3937
|
const scrollWidth = ref(0);
|
|
3849
3938
|
const scrollHeight = ref(0);
|
|
3850
3939
|
let scrollViewer;
|
|
@@ -3866,9 +3955,12 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
3866
3955
|
onUnmounted(() => {
|
|
3867
3956
|
scrollViewer.destroy();
|
|
3868
3957
|
});
|
|
3869
|
-
watch(
|
|
3870
|
-
|
|
3871
|
-
|
|
3958
|
+
watch(
|
|
3959
|
+
() => props.zoom,
|
|
3960
|
+
() => {
|
|
3961
|
+
scrollViewer.setZoom(props.zoom);
|
|
3962
|
+
}
|
|
3963
|
+
);
|
|
3872
3964
|
const vOffset = ref(0);
|
|
3873
3965
|
const vScrollHandler = (delta) => {
|
|
3874
3966
|
vOffset.value += delta;
|
|
@@ -4040,14 +4132,20 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
4040
4132
|
},
|
|
4041
4133
|
...stageContentMenu
|
|
4042
4134
|
]);
|
|
4043
|
-
watch(
|
|
4044
|
-
|
|
4045
|
-
|
|
4046
|
-
|
|
4047
|
-
|
|
4048
|
-
|
|
4049
|
-
|
|
4050
|
-
|
|
4135
|
+
watch(
|
|
4136
|
+
parent,
|
|
4137
|
+
async () => {
|
|
4138
|
+
if (!parent.value || !editorService)
|
|
4139
|
+
return canCenter.value = false;
|
|
4140
|
+
const layout = await editorService.getLayout(parent.value);
|
|
4141
|
+
const isLayoutConform = [Layout.ABSOLUTE, Layout.FIXED].includes(layout);
|
|
4142
|
+
const isTypeConform = nodes.value?.every(
|
|
4143
|
+
(selectedNode) => ![NodeType.ROOT, NodeType.PAGE, "pop"].includes(`${selectedNode?.type}`)
|
|
4144
|
+
);
|
|
4145
|
+
canCenter.value = isLayoutConform && !!isTypeConform;
|
|
4146
|
+
},
|
|
4147
|
+
{ immediate: true }
|
|
4148
|
+
);
|
|
4051
4149
|
const show = async (e) => {
|
|
4052
4150
|
menu.value?.show(e);
|
|
4053
4151
|
const data = await storageService.getItem(COPY_STORAGE_KEY);
|
|
@@ -4367,7 +4465,7 @@ const _sfc_main = defineComponent({
|
|
|
4367
4465
|
Sidebar,
|
|
4368
4466
|
Workspace: _sfc_main$1,
|
|
4369
4467
|
PropsPanel: _sfc_main$e,
|
|
4370
|
-
Framework
|
|
4468
|
+
Framework: _sfc_main$i
|
|
4371
4469
|
},
|
|
4372
4470
|
props: {
|
|
4373
4471
|
modelValue: {
|
|
@@ -4460,37 +4558,64 @@ const _sfc_main = defineComponent({
|
|
|
4460
4558
|
}
|
|
4461
4559
|
emit("update:modelValue", toRaw(editorService.get("root")));
|
|
4462
4560
|
});
|
|
4463
|
-
watch(
|
|
4464
|
-
|
|
4465
|
-
|
|
4466
|
-
|
|
4467
|
-
|
|
4468
|
-
|
|
4469
|
-
|
|
4470
|
-
|
|
4471
|
-
|
|
4472
|
-
|
|
4473
|
-
|
|
4474
|
-
|
|
4475
|
-
|
|
4476
|
-
|
|
4477
|
-
|
|
4478
|
-
|
|
4479
|
-
|
|
4480
|
-
|
|
4481
|
-
|
|
4482
|
-
|
|
4483
|
-
|
|
4484
|
-
|
|
4485
|
-
|
|
4486
|
-
|
|
4487
|
-
|
|
4488
|
-
|
|
4489
|
-
|
|
4490
|
-
|
|
4491
|
-
|
|
4492
|
-
|
|
4493
|
-
|
|
4561
|
+
watch(
|
|
4562
|
+
() => props.modelValue,
|
|
4563
|
+
(modelValue) => editorService.set("root", modelValue),
|
|
4564
|
+
{
|
|
4565
|
+
immediate: true
|
|
4566
|
+
}
|
|
4567
|
+
);
|
|
4568
|
+
watch(
|
|
4569
|
+
() => props.componentGroupList,
|
|
4570
|
+
(componentGroupList) => componentListService.setList(componentGroupList),
|
|
4571
|
+
{
|
|
4572
|
+
immediate: true
|
|
4573
|
+
}
|
|
4574
|
+
);
|
|
4575
|
+
watch(
|
|
4576
|
+
() => props.propsConfigs,
|
|
4577
|
+
(configs) => propsService.setPropsConfigs(configs),
|
|
4578
|
+
{
|
|
4579
|
+
immediate: true
|
|
4580
|
+
}
|
|
4581
|
+
);
|
|
4582
|
+
watch(
|
|
4583
|
+
() => props.propsValues,
|
|
4584
|
+
(values) => propsService.setPropsValues(values),
|
|
4585
|
+
{
|
|
4586
|
+
immediate: true
|
|
4587
|
+
}
|
|
4588
|
+
);
|
|
4589
|
+
watch(
|
|
4590
|
+
() => props.eventMethodList,
|
|
4591
|
+
(eventMethodList) => {
|
|
4592
|
+
const eventsList = {};
|
|
4593
|
+
const methodsList = {};
|
|
4594
|
+
Object.keys(eventMethodList).forEach((type) => {
|
|
4595
|
+
eventsList[type] = eventMethodList[type].events;
|
|
4596
|
+
methodsList[type] = eventMethodList[type].methods;
|
|
4597
|
+
});
|
|
4598
|
+
eventsService.setEvents(eventsList);
|
|
4599
|
+
eventsService.setMethods(methodsList);
|
|
4600
|
+
},
|
|
4601
|
+
{
|
|
4602
|
+
immediate: true
|
|
4603
|
+
}
|
|
4604
|
+
);
|
|
4605
|
+
watch(
|
|
4606
|
+
() => props.defaultSelected,
|
|
4607
|
+
(defaultSelected) => defaultSelected && editorService.select(defaultSelected),
|
|
4608
|
+
{
|
|
4609
|
+
immediate: true
|
|
4610
|
+
}
|
|
4611
|
+
);
|
|
4612
|
+
watch(
|
|
4613
|
+
() => props.stageRect,
|
|
4614
|
+
(stageRect) => stageRect && uiService.set("stageRect", stageRect),
|
|
4615
|
+
{
|
|
4616
|
+
immediate: true
|
|
4617
|
+
}
|
|
4618
|
+
);
|
|
4494
4619
|
onUnmounted(() => {
|
|
4495
4620
|
editorService.destroy();
|
|
4496
4621
|
historyService.destroy();
|
|
@@ -4511,18 +4636,21 @@ const _sfc_main = defineComponent({
|
|
|
4511
4636
|
provide("services", services);
|
|
4512
4637
|
provide("layerContentMenu", props.layerContentMenu);
|
|
4513
4638
|
provide("stageContentMenu", props.stageContentMenu);
|
|
4514
|
-
provide(
|
|
4515
|
-
|
|
4516
|
-
|
|
4517
|
-
|
|
4518
|
-
|
|
4519
|
-
|
|
4520
|
-
|
|
4521
|
-
|
|
4522
|
-
|
|
4523
|
-
|
|
4524
|
-
|
|
4525
|
-
|
|
4639
|
+
provide(
|
|
4640
|
+
"stageOptions",
|
|
4641
|
+
reactive({
|
|
4642
|
+
runtimeUrl: props.runtimeUrl,
|
|
4643
|
+
autoScrollIntoView: props.autoScrollIntoView,
|
|
4644
|
+
render: props.render,
|
|
4645
|
+
moveableOptions: props.moveableOptions,
|
|
4646
|
+
canSelect: props.canSelect,
|
|
4647
|
+
updateDragEl: props.updateDragEl,
|
|
4648
|
+
isContainer: props.isContainer,
|
|
4649
|
+
containerHighlightClassName: props.containerHighlightClassName,
|
|
4650
|
+
containerHighlightDuration: props.containerHighlightDuration,
|
|
4651
|
+
containerHighlightType: props.containerHighlightType
|
|
4652
|
+
})
|
|
4653
|
+
);
|
|
4526
4654
|
return services;
|
|
4527
4655
|
}
|
|
4528
4656
|
});
|
|
@@ -4603,9 +4731,9 @@ const index = {
|
|
|
4603
4731
|
app.config.globalProperties.$TMAGIC_EDITOR = option;
|
|
4604
4732
|
setConfig(option);
|
|
4605
4733
|
app.component(Editor.name, Editor);
|
|
4606
|
-
app.component("m-fields-ui-select", _sfc_main$
|
|
4607
|
-
app.component(
|
|
4608
|
-
app.component(
|
|
4734
|
+
app.component("m-fields-ui-select", _sfc_main$n);
|
|
4735
|
+
app.component("m-fields-code-link", _sfc_main$o);
|
|
4736
|
+
app.component("m-fields-vs-code", _sfc_main$p);
|
|
4609
4737
|
app.component(CodeEditor.name, CodeEditor);
|
|
4610
4738
|
}
|
|
4611
4739
|
};
|