@tmagic/editor 1.8.0-beta.0 → 1.8.0-beta.1

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.
Files changed (27) hide show
  1. package/dist/es/fields/DataSourceFieldSelect/Index.vue_vue_type_script_setup_true_lang.js +11 -2
  2. package/dist/es/fields/StyleSetter/Index.vue_vue_type_script_setup_true_lang.js +8 -2
  3. package/dist/es/fields/StyleSetter/components/Border.vue_vue_type_script_setup_true_lang.js +10 -2
  4. package/dist/es/fields/StyleSetter/components/Box.vue_vue_type_script_setup_true_lang.js +3 -1
  5. package/dist/es/fields/StyleSetter/pro/Background.vue_vue_type_script_setup_true_lang.js +10 -2
  6. package/dist/es/fields/StyleSetter/pro/Border.vue_vue_type_script_setup_true_lang.js +16 -3
  7. package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +10 -2
  8. package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +14 -2
  9. package/dist/es/fields/StyleSetter/pro/Position.vue_vue_type_script_setup_true_lang.js +10 -2
  10. package/dist/es/fields/StyleSetter/pro/Transform.vue_vue_type_script_setup_true_lang.js +10 -2
  11. package/dist/es/layouts/sidebar/layer/use-node-status.js +37 -3
  12. package/dist/es/utils/editor.js +1 -1
  13. package/dist/tmagic-editor.umd.cjs +140 -24
  14. package/package.json +7 -7
  15. package/src/fields/DataSourceFieldSelect/Index.vue +8 -1
  16. package/src/fields/StyleSetter/Index.vue +6 -0
  17. package/src/fields/StyleSetter/components/Border.vue +15 -1
  18. package/src/fields/StyleSetter/components/Box.vue +2 -0
  19. package/src/fields/StyleSetter/pro/Background.vue +15 -1
  20. package/src/fields/StyleSetter/pro/Border.vue +24 -2
  21. package/src/fields/StyleSetter/pro/Font.vue +15 -1
  22. package/src/fields/StyleSetter/pro/Layout.vue +17 -1
  23. package/src/fields/StyleSetter/pro/Position.vue +15 -1
  24. package/src/fields/StyleSetter/pro/Transform.vue +15 -1
  25. package/src/layouts/sidebar/layer/use-node-status.ts +55 -6
  26. package/src/utils/editor.ts +4 -1
  27. package/types/index.d.ts +2 -0
@@ -95,6 +95,10 @@ var Index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
95
95
  emit("change", [dsId], eventData);
96
96
  }
97
97
  };
98
+ const onToggleDataSourceFieldSelectHandler = () => {
99
+ if (props.disabled || mForm?.isCompare) return;
100
+ showDataSourceFieldSelect.value = !showDataSourceFieldSelect.value;
101
+ };
98
102
  return (_ctx, _cache) => {
99
103
  return openBlock(), createElementBlock("div", _hoisted_1, [!disabledDataSource.value && (showDataSourceFieldSelect.value || !__props.config.fieldConfig) ? (openBlock(), createBlock(FieldSelect_default, {
100
104
  key: 0,
@@ -144,11 +148,16 @@ var Index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
144
148
  default: withCtx(() => [createVNode(unref(TMagicButton), {
145
149
  type: showDataSourceFieldSelect.value ? "primary" : "default",
146
150
  size: __props.size,
147
- onClick: _cache[0] || (_cache[0] = ($event) => showDataSourceFieldSelect.value = !showDataSourceFieldSelect.value)
151
+ disabled: __props.disabled || unref(mForm)?.isCompare,
152
+ onClick: onToggleDataSourceFieldSelectHandler
148
153
  }, {
149
154
  default: withCtx(() => [createVNode(Icon_default, { icon: unref(Coin) }, null, 8, ["icon"])]),
150
155
  _: 1
151
- }, 8, ["type", "size"])]),
156
+ }, 8, [
157
+ "type",
158
+ "size",
159
+ "disabled"
160
+ ])]),
152
161
  _: 1
153
162
  }, 8, ["disabled"])) : createCommentVNode("v-if", true)]);
154
163
  };
@@ -24,7 +24,7 @@ var Index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
24
24
  lastValues: {},
25
25
  isCompare: { type: Boolean }
26
26
  },
27
- emits: ["change"],
27
+ emits: ["change", "addDiffCount"],
28
28
  setup(__props, { emit: __emit }) {
29
29
  const props = __props;
30
30
  const emit = __emit;
@@ -63,6 +63,7 @@ var Index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
63
63
  });
64
64
  emit("change", v, eventData);
65
65
  };
66
+ const onAddDiffCount = () => emit("addDiffCount");
66
67
  return (_ctx, _cache) => {
67
68
  return openBlock(), createBlock(unref(TMagicCollapse), {
68
69
  class: "m-fields-style-setter",
@@ -78,11 +79,16 @@ var Index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
78
79
  default: withCtx(() => [item.component ? (openBlock(), createBlock(resolveDynamicComponent(item.component), {
79
80
  key: 0,
80
81
  values: __props.model[__props.name],
82
+ "last-values": __props.lastValues?.[__props.name],
83
+ "is-compare": __props.isCompare,
81
84
  size: __props.size,
82
85
  disabled: __props.disabled,
83
- onChange: change
86
+ onChange: change,
87
+ onAddDiffCount
84
88
  }, null, 40, [
85
89
  "values",
90
+ "last-values",
91
+ "is-compare",
86
92
  "size",
87
93
  "disabled"
88
94
  ])) : createCommentVNode("v-if", true)]),
@@ -11,10 +11,12 @@ var Border_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
11
11
  __name: "Border",
12
12
  props: {
13
13
  model: {},
14
+ lastValues: {},
15
+ isCompare: { type: Boolean },
14
16
  disabled: { type: Boolean },
15
17
  size: {}
16
18
  },
17
- emits: ["change"],
19
+ emits: ["change", "addDiffCount"],
18
20
  setup(__props, { emit: __emit }) {
19
21
  const direction = ref("");
20
22
  const config = computed(() => defineFormItem({ items: [
@@ -57,6 +59,7 @@ var Border_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
57
59
  emit("change", record.value, { modifyKey: record.propPath });
58
60
  });
59
61
  };
62
+ const onAddDiffCount = () => emit("addDiffCount");
60
63
  return (_ctx, _cache) => {
61
64
  return openBlock(), createElementBlock("div", _hoisted_1, [createElementVNode("div", _hoisted_2, [
62
65
  createElementVNode("div", _hoisted_3, [createElementVNode("div", {
@@ -84,12 +87,17 @@ var Border_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
84
87
  ]), createElementVNode("div", _hoisted_6, [createVNode(unref(MContainer), {
85
88
  config: config.value,
86
89
  model: __props.model,
90
+ "last-values": __props.lastValues,
91
+ "is-compare": __props.isCompare,
87
92
  size: __props.size,
88
93
  disabled: __props.disabled,
89
- onChange: change
94
+ onChange: change,
95
+ onAddDiffCount
90
96
  }, null, 8, [
91
97
  "config",
92
98
  "model",
99
+ "last-values",
100
+ "is-compare",
93
101
  "size",
94
102
  "disabled"
95
103
  ])])]);
@@ -17,7 +17,9 @@ var Box_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComp
17
17
  props: {
18
18
  disabled: { type: Boolean },
19
19
  size: {},
20
- model: {}
20
+ model: {},
21
+ lastValues: {},
22
+ isCompare: { type: Boolean }
21
23
  },
22
24
  emits: ["change"],
23
25
  setup(__props, { emit: __emit }) {
@@ -10,10 +10,12 @@ var Background_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
10
10
  __name: "Background",
11
11
  props: {
12
12
  values: {},
13
+ lastValues: {},
14
+ isCompare: { type: Boolean },
13
15
  disabled: { type: Boolean },
14
16
  size: {}
15
17
  },
16
- emits: ["change"],
18
+ emits: ["change", "addDiffCount"],
17
19
  setup(__props, { emit: __emit }) {
18
20
  const emit = __emit;
19
21
  const config = defineFormItem({ items: [
@@ -95,16 +97,22 @@ var Background_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
95
97
  const change = (value, eventData) => {
96
98
  emit("change", value, eventData);
97
99
  };
100
+ const onAddDiffCount = () => emit("addDiffCount");
98
101
  return (_ctx, _cache) => {
99
102
  return openBlock(), createBlock(unref(MContainer), {
100
103
  config: unref(config),
101
104
  model: __props.values,
105
+ "last-values": __props.lastValues,
106
+ "is-compare": __props.isCompare,
102
107
  size: __props.size,
103
108
  disabled: __props.disabled,
104
- onChange: change
109
+ onChange: change,
110
+ onAddDiffCount
105
111
  }, null, 8, [
106
112
  "config",
107
113
  "model",
114
+ "last-values",
115
+ "is-compare",
108
116
  "size",
109
117
  "disabled"
110
118
  ]);
@@ -6,10 +6,12 @@ var Border_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
6
6
  __name: "Border",
7
7
  props: {
8
8
  values: {},
9
+ lastValues: {},
10
+ isCompare: { type: Boolean },
9
11
  disabled: { type: Boolean },
10
12
  size: {}
11
13
  },
12
- emits: ["change"],
14
+ emits: ["change", "addDiffCount"],
13
15
  setup(__props, { emit: __emit }) {
14
16
  const emit = __emit;
15
17
  const config = defineFormItem({ items: [{
@@ -22,25 +24,36 @@ var Border_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
22
24
  const change = (value, eventData) => {
23
25
  emit("change", value, eventData);
24
26
  };
27
+ const onAddDiffCount = () => emit("addDiffCount");
25
28
  return (_ctx, _cache) => {
26
29
  return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(MContainer), {
27
30
  config: unref(config),
28
31
  model: __props.values,
32
+ "last-values": __props.lastValues,
33
+ "is-compare": __props.isCompare,
29
34
  size: __props.size,
30
35
  disabled: __props.disabled,
31
- onChange: change
36
+ onChange: change,
37
+ onAddDiffCount
32
38
  }, null, 8, [
33
39
  "config",
34
40
  "model",
41
+ "last-values",
42
+ "is-compare",
35
43
  "size",
36
44
  "disabled"
37
45
  ]), createVNode(Border_default, {
38
46
  model: __props.values,
47
+ "last-values": __props.lastValues,
48
+ "is-compare": __props.isCompare,
39
49
  size: __props.size,
40
50
  disabled: __props.disabled,
41
- onChange: change
51
+ onChange: change,
52
+ onAddDiffCount
42
53
  }, null, 8, [
43
54
  "model",
55
+ "last-values",
56
+ "is-compare",
44
57
  "size",
45
58
  "disabled"
46
59
  ])], 64);
@@ -8,10 +8,12 @@ var Font_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
8
8
  __name: "Font",
9
9
  props: {
10
10
  values: {},
11
+ lastValues: {},
12
+ isCompare: { type: Boolean },
11
13
  disabled: { type: Boolean },
12
14
  size: {}
13
15
  },
14
- emits: ["change"],
16
+ emits: ["change", "addDiffCount"],
15
17
  setup(__props, { emit: __emit }) {
16
18
  const emit = __emit;
17
19
  const config = defineFormItem({ items: [
@@ -79,16 +81,22 @@ var Font_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
79
81
  const change = (value, eventData) => {
80
82
  emit("change", value, eventData);
81
83
  };
84
+ const onAddDiffCount = () => emit("addDiffCount");
82
85
  return (_ctx, _cache) => {
83
86
  return openBlock(), createBlock(unref(MContainer), {
84
87
  config: unref(config),
85
88
  model: __props.values,
89
+ "last-values": __props.lastValues,
90
+ "is-compare": __props.isCompare,
86
91
  size: __props.size,
87
92
  disabled: __props.disabled,
88
- onChange: change
93
+ onChange: change,
94
+ onAddDiffCount
89
95
  }, null, 8, [
90
96
  "config",
91
97
  "model",
98
+ "last-values",
99
+ "is-compare",
92
100
  "size",
93
101
  "disabled"
94
102
  ]);
@@ -20,10 +20,12 @@ var Layout_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
20
20
  __name: "Layout",
21
21
  props: {
22
22
  values: {},
23
+ lastValues: {},
24
+ isCompare: { type: Boolean },
23
25
  disabled: { type: Boolean },
24
26
  size: {}
25
27
  },
26
- emits: ["change"],
28
+ emits: ["change", "addDiffCount"],
27
29
  setup(__props, { emit: __emit }) {
28
30
  const emit = __emit;
29
31
  const config = defineFormItem({ items: [
@@ -259,25 +261,35 @@ var Layout_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
259
261
  const change = (value, eventData) => {
260
262
  emit("change", value, eventData);
261
263
  };
264
+ const onAddDiffCount = () => emit("addDiffCount");
262
265
  return (_ctx, _cache) => {
263
266
  return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(MContainer), {
264
267
  config: unref(config),
265
268
  model: __props.values,
269
+ "last-values": __props.lastValues,
270
+ "is-compare": __props.isCompare,
266
271
  size: __props.size,
267
272
  disabled: __props.disabled,
268
- onChange: change
273
+ onChange: change,
274
+ onAddDiffCount
269
275
  }, null, 8, [
270
276
  "config",
271
277
  "model",
278
+ "last-values",
279
+ "is-compare",
272
280
  "size",
273
281
  "disabled"
274
282
  ]), withDirectives(createVNode(Box_default, {
275
283
  model: __props.values,
284
+ "last-values": __props.lastValues,
285
+ "is-compare": __props.isCompare,
276
286
  size: __props.size,
277
287
  disabled: __props.disabled,
278
288
  onChange: change
279
289
  }, null, 8, [
280
290
  "model",
291
+ "last-values",
292
+ "is-compare",
281
293
  "size",
282
294
  "disabled"
283
295
  ]), [[vShow, !["fixed", "absolute"].includes(__props.values.position)]])], 64);
@@ -5,10 +5,12 @@ var Position_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
5
5
  __name: "Position",
6
6
  props: {
7
7
  values: {},
8
+ lastValues: {},
9
+ isCompare: { type: Boolean },
8
10
  disabled: { type: Boolean },
9
11
  size: {}
10
12
  },
11
- emits: ["change"],
13
+ emits: ["change", "addDiffCount"],
12
14
  setup(__props, { emit: __emit }) {
13
15
  const props = __props;
14
16
  const emit = __emit;
@@ -76,16 +78,22 @@ var Position_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
76
78
  const change = (value, eventData) => {
77
79
  emit("change", value, eventData);
78
80
  };
81
+ const onAddDiffCount = () => emit("addDiffCount");
79
82
  return (_ctx, _cache) => {
80
83
  return openBlock(), createBlock(unref(MContainer), {
81
84
  config: unref(config),
82
85
  model: __props.values,
86
+ "last-values": __props.lastValues,
87
+ "is-compare": __props.isCompare,
83
88
  size: __props.size,
84
89
  disabled: __props.disabled,
85
- onChange: change
90
+ onChange: change,
91
+ onAddDiffCount
86
92
  }, null, 8, [
87
93
  "config",
88
94
  "model",
95
+ "last-values",
96
+ "is-compare",
89
97
  "size",
90
98
  "disabled"
91
99
  ]);
@@ -5,10 +5,12 @@ var Transform_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
5
5
  __name: "Transform",
6
6
  props: {
7
7
  values: {},
8
+ lastValues: {},
9
+ isCompare: { type: Boolean },
8
10
  disabled: { type: Boolean },
9
11
  size: {}
10
12
  },
11
- emits: ["change"],
13
+ emits: ["change", "addDiffCount"],
12
14
  setup(__props, { emit: __emit }) {
13
15
  const emit = __emit;
14
16
  const config = defineFormItem({ items: [{
@@ -34,16 +36,22 @@ var Transform_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
34
36
  const change = (value, eventData) => {
35
37
  emit("change", value, eventData);
36
38
  };
39
+ const onAddDiffCount = () => emit("addDiffCount");
37
40
  return (_ctx, _cache) => {
38
41
  return openBlock(), createBlock(unref(MContainer), {
39
42
  config: unref(config),
40
43
  model: __props.values,
44
+ "last-values": __props.lastValues,
45
+ "is-compare": __props.isCompare,
41
46
  size: __props.size,
42
47
  disabled: __props.disabled,
43
- onChange: change
48
+ onChange: change,
49
+ onAddDiffCount
44
50
  }, null, 8, [
45
51
  "config",
46
52
  "model",
53
+ "last-values",
54
+ "is-compare",
47
55
  "size",
48
56
  "disabled"
49
57
  ]);
@@ -27,10 +27,43 @@ var useNodeStatus = ({ editorService }) => {
27
27
  const nodeStatusMaps = ref(/* @__PURE__ */ new Map());
28
28
  /** 当前页面的节点状态 */
29
29
  const nodeStatusMap = computed(() => page.value ? nodeStatusMaps.value.get(page.value.id) : /* @__PURE__ */ new Map());
30
- watch(() => page.value?.id, (pageId) => {
31
- if (!pageId) return;
32
- nodeStatusMaps.value.set(pageId, createPageNodeStatus(page.value, nodeStatusMaps.value.get(pageId)));
30
+ watch(page, (newPage) => {
31
+ if (!newPage?.id) return;
32
+ nodeStatusMaps.value.set(newPage.id, createPageNodeStatus(newPage, nodeStatusMaps.value.get(newPage.id)));
33
33
  }, { immediate: true });
34
+ /**
35
+ * root 整体被替换时(外部 modelValue 变化、历史版本恢复、套件编辑模式进入/退出等):
36
+ * - 仅 watch page 引用还不够,因为 root-change 同步触发时 page 还是旧引用,
37
+ * 等 initService 的异步 IIFE 跑完 editorService.select(...) 后 page 才会
38
+ * 被替换为新 dsl 中的 page;此时上面的 page watch 才会触发重建。
39
+ * - 但若直接同步清空 nodeStatusMaps,会让 nodeStatusMap (computed) 立刻变
40
+ * undefined。上层 LayerPanel 用 `v-if="page && nodeStatusMap"` 渲染组件树,
41
+ * 会瞬间销毁整个面板;若紧接着的异步 select 链路(套件退出等场景)发生
42
+ * 竞态、page 引用未变 / 解析失败,watch(page) 不触发重建,组件树就再也回
43
+ * 不来。
44
+ * - 此外「污染」问题本质来自 createPageNodeStatus 用旧 status 作为新节点
45
+ * initial 值:只要新 root 的 page 是新引用,watch(page) 会触发重建,重建
46
+ * 时基于新 page.items 生成的 map 只会包含新节点 id;旧节点 id 即便残留在
47
+ * initialLayerNodeStatus 中也不会被写入新 map。真正的风险只有「同一 page
48
+ * id 下,新旧 dsl 都存在同一节点 id 但其实是不同节点」这种极端情况——这
49
+ * 在常规业务中不会发生(id 是 uuid)。
50
+ *
51
+ * 综合:root-change 时仅清理「在新 root 中已不存在的 page id」对应缓存,
52
+ * 保留仍然有效的 page status 不动;既避免 v-if 闪断,也不会保留无关 page 的
53
+ * 死缓存。同 page id 的重建交给下方 watch(page) 触发。
54
+ */
55
+ const rootChangeHandler = (value) => {
56
+ if (!value) {
57
+ nodeStatusMaps.value = /* @__PURE__ */ new Map();
58
+ return;
59
+ }
60
+ const validPageIds = /* @__PURE__ */ new Set();
61
+ (value.items || []).forEach((p) => {
62
+ if (p?.id !== void 0) validPageIds.add(p.id);
63
+ });
64
+ for (const cachedPageId of Array.from(nodeStatusMaps.value.keys())) if (!validPageIds.has(cachedPageId)) nodeStatusMaps.value.delete(cachedPageId);
65
+ };
66
+ editorService.on("root-change", rootChangeHandler);
34
67
  watch(nodes, (nodes) => {
35
68
  if (!nodeStatusMap.value) return;
36
69
  for (const [id, status] of nodeStatusMap.value.entries()) {
@@ -63,6 +96,7 @@ var useNodeStatus = ({ editorService }) => {
63
96
  };
64
97
  editorService.on("remove", removeHandler);
65
98
  onBeforeUnmount(() => {
99
+ editorService.off("root-change", rootChangeHandler);
66
100
  editorService.off("remove", removeHandler);
67
101
  editorService.off("add", addHandler);
68
102
  });
@@ -196,7 +196,7 @@ var fixNodePosition = (config, parent, stage) => {
196
196
  var serializeConfig = (config) => serialize(config, {
197
197
  space: 2,
198
198
  unsafe: true
199
- }).replace(/"(\w+)":\s/g, "$1: ");
199
+ }).replace(/(^|\n)(\s*)"(\w+)":\s/g, "$1$2$3: ");
200
200
  var moveItemsInContainer = (sourceIndices, parent, targetIndex) => {
201
201
  sourceIndices.sort((a, b) => a - b);
202
202
  for (let i = sourceIndices.length - 1; i >= 0; i--) {