@tmagic/editor 1.7.14-beta.3 → 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 (35) 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/props-panel/FormPanel.vue_vue_type_script_setup_true_lang.js +1 -1
  12. package/dist/es/layouts/sidebar/layer/use-node-status.js +37 -3
  13. package/dist/es/services/editor.js +58 -27
  14. package/dist/es/style.css +15 -14
  15. package/dist/es/utils/editor.js +1 -1
  16. package/dist/style.css +15 -14
  17. package/dist/tmagic-editor.umd.cjs +199 -52
  18. package/package.json +7 -7
  19. package/src/fields/DataSourceFieldSelect/Index.vue +8 -1
  20. package/src/fields/StyleSetter/Index.vue +6 -0
  21. package/src/fields/StyleSetter/components/Border.vue +15 -1
  22. package/src/fields/StyleSetter/components/Box.vue +2 -0
  23. package/src/fields/StyleSetter/pro/Background.vue +15 -1
  24. package/src/fields/StyleSetter/pro/Border.vue +24 -2
  25. package/src/fields/StyleSetter/pro/Font.vue +15 -1
  26. package/src/fields/StyleSetter/pro/Layout.vue +17 -1
  27. package/src/fields/StyleSetter/pro/Position.vue +15 -1
  28. package/src/fields/StyleSetter/pro/Transform.vue +15 -1
  29. package/src/layouts/props-panel/FormPanel.vue +1 -1
  30. package/src/layouts/sidebar/layer/use-node-status.ts +55 -6
  31. package/src/services/editor.ts +74 -43
  32. package/src/theme/props-panel.scss +20 -20
  33. package/src/type.ts +10 -0
  34. package/src/utils/editor.ts +4 -1
  35. package/types/index.d.ts +31 -22
@@ -5397,7 +5397,7 @@
5397
5397
  var serializeConfig = (config) => (0, serialize_javascript.default)(config, {
5398
5398
  space: 2,
5399
5399
  unsafe: true
5400
- }).replace(/"(\w+)":\s/g, "$1: ");
5400
+ }).replace(/(^|\n)(\s*)"(\w+)":\s/g, "$1$2$3: ");
5401
5401
  var moveItemsInContainer = (sourceIndices, parent, targetIndex) => {
5402
5402
  sourceIndices.sort((a, b) => a - b);
5403
5403
  for (let i = sourceIndices.length - 1; i >= 0; i--) {
@@ -5902,6 +5902,19 @@
5902
5902
  return parent;
5903
5903
  }
5904
5904
  /**
5905
+ * 判断给定节点是否位于非当前页面(即选中该节点将会引起当前页面切换)
5906
+ * @param node 节点
5907
+ * @returns true 表示该节点位于非当前页面
5908
+ */
5909
+ isOnDifferentPage(node) {
5910
+ const currentPageId = this.get("page")?.id;
5911
+ if (currentPageId === void 0 || currentPageId === null) return false;
5912
+ if ((0, _tmagic_utils.isPage)(node) || (0, _tmagic_utils.isPageFragment)(node)) return `${node.id}` !== `${currentPageId}`;
5913
+ const nodePage = this.getNodeInfo(node.id, false).page;
5914
+ if (!nodePage) return false;
5915
+ return `${nodePage.id}` !== `${currentPageId}`;
5916
+ }
5917
+ /**
5905
5918
  * 只有容器拥有布局
5906
5919
  */
5907
5920
  async getLayout(parent, node) {
@@ -6022,11 +6035,12 @@
6022
6035
  * @param parent 要添加到的容器组件节点配置,如果不设置,默认为当前选中的组件的父节点
6023
6036
  * @param options 可选配置
6024
6037
  * @param options.doNotSelect 添加后是否不更新当前选中节点(默认 false,添加后会选中新增的节点)
6038
+ * @param options.doNotSwitchPage 添加后是否不切换当前页面(默认 false;新增页面 / 跨页新增时为 true 会跳过会引发页面切换的选中操作)
6025
6039
  * @returns 添加后的节点
6026
6040
  */
6027
6041
  async add(addNode, parent, options) {
6028
6042
  const safeParentNode = safeParent(parent);
6029
- const { doNotSelect = false } = safeOptions(options);
6043
+ const { doNotSelect = false, doNotSwitchPage = false } = safeOptions(options);
6030
6044
  this.captureSelectionBeforeOp();
6031
6045
  const stage = this.get("stage");
6032
6046
  const addNodes = [];
@@ -6043,16 +6057,19 @@
6043
6057
  return this.doAdd(node, parentNode);
6044
6058
  }));
6045
6059
  if (newNodes.length > 1) {
6046
- if (!doNotSelect) {
6060
+ const wouldSwitchPage = newNodes.some((n) => this.isOnDifferentPage(n));
6061
+ if (!doNotSelect && !(doNotSwitchPage && wouldSwitchPage)) {
6047
6062
  const newNodeIds = newNodes.map((node) => node.id);
6048
6063
  stage?.multiSelect(newNodeIds);
6049
6064
  await this.multiSelect(newNodeIds);
6050
6065
  }
6051
6066
  } else {
6052
- if (!doNotSelect) await this.select(newNodes[0]);
6067
+ const wouldSwitchPage = this.isOnDifferentPage(newNodes[0]);
6068
+ const skipSelect = doNotSelect || doNotSwitchPage && wouldSwitchPage;
6069
+ if (!skipSelect) await this.select(newNodes[0]);
6053
6070
  if ((0, _tmagic_utils.isPage)(newNodes[0])) this.state.pageLength += 1;
6054
6071
  else if ((0, _tmagic_utils.isPageFragment)(newNodes[0])) this.state.pageFragmentLength += 1;
6055
- else if (!doNotSelect) stage?.select(newNodes[0].id);
6072
+ else if (!skipSelect) stage?.select(newNodes[0].id);
6056
6073
  }
6057
6074
  if (!((0, _tmagic_utils.isPage)(newNodes[0]) || (0, _tmagic_utils.isPageFragment)(newNodes[0]))) {
6058
6075
  const pageForOp = this.getNodeInfo(newNodes[0].id, false).page;
@@ -6072,7 +6089,7 @@
6072
6089
  return Array.isArray(addNode) ? newNodes : newNodes[0];
6073
6090
  }
6074
6091
  async doRemove(node, options) {
6075
- const { doNotSelect = false } = safeOptions(options);
6092
+ const { doNotSelect = false, doNotSwitchPage = false } = safeOptions(options);
6076
6093
  const root = this.get("root");
6077
6094
  if (!root) throw new Error("root不能为空");
6078
6095
  const { parent, node: curNode } = this.getNodeInfo(node.id, false);
@@ -6086,18 +6103,16 @@
6086
6103
  parentId: parent.id,
6087
6104
  root: cloneDeep(root)
6088
6105
  });
6089
- if (doNotSelect) {
6090
- const selectedNodes = this.get("nodes");
6091
- const removedSelectedIndex = selectedNodes.findIndex((n) => `${n.id}` === `${node.id}`);
6092
- if (removedSelectedIndex !== -1) {
6093
- const nextSelected = [...selectedNodes];
6094
- nextSelected.splice(removedSelectedIndex, 1);
6095
- this.set("nodes", nextSelected);
6096
- }
6097
- if ((0, _tmagic_utils.isPage)(node) || (0, _tmagic_utils.isPageFragment)(node)) {
6098
- const currentPage = this.get("page");
6099
- if (currentPage && `${currentPage.id}` === `${node.id}`) this.set("page", null);
6100
- }
6106
+ const selectedNodes = this.get("nodes");
6107
+ const removedSelectedIndex = selectedNodes.findIndex((n) => `${n.id}` === `${node.id}`);
6108
+ if (removedSelectedIndex !== -1) {
6109
+ const nextSelected = [...selectedNodes];
6110
+ nextSelected.splice(removedSelectedIndex, 1);
6111
+ this.set("nodes", nextSelected);
6112
+ }
6113
+ if ((0, _tmagic_utils.isPage)(node) || (0, _tmagic_utils.isPageFragment)(node)) {
6114
+ const currentPage = this.get("page");
6115
+ if (currentPage && `${currentPage.id}` === `${node.id}`) this.set("page", null);
6101
6116
  }
6102
6117
  const selectDefault = async (pages) => {
6103
6118
  if (pages[0]) {
@@ -6111,10 +6126,10 @@
6111
6126
  const rootItems = root.items || [];
6112
6127
  if ((0, _tmagic_utils.isPage)(node)) {
6113
6128
  this.state.pageLength -= 1;
6114
- if (!doNotSelect) await selectDefault(rootItems);
6129
+ if (!doNotSelect && !doNotSwitchPage) await selectDefault(rootItems);
6115
6130
  } else if ((0, _tmagic_utils.isPageFragment)(node)) {
6116
6131
  this.state.pageFragmentLength -= 1;
6117
- if (!doNotSelect) await selectDefault(rootItems);
6132
+ if (!doNotSelect && !doNotSwitchPage) await selectDefault(rootItems);
6118
6133
  } else {
6119
6134
  if (!doNotSelect) {
6120
6135
  await this.select(parent);
@@ -6132,9 +6147,10 @@
6132
6147
  * @param {Object} node 要删除的节点或节点集合
6133
6148
  * @param options 可选配置
6134
6149
  * @param options.doNotSelect 删除后是否不更新当前选中节点(默认 false,删除后会选中父节点或首个页面)
6150
+ * @param options.doNotSwitchPage 删除后是否不切换当前页面(默认 false;删除页面 / 页面片段时为 true 会跳过自动切换到首个剩余页面)
6135
6151
  */
6136
6152
  async remove(nodeOrNodeList, options) {
6137
- const { doNotSelect = false } = safeOptions(options);
6153
+ const { doNotSelect = false, doNotSwitchPage = false } = safeOptions(options);
6138
6154
  this.captureSelectionBeforeOp();
6139
6155
  const nodes = Array.isArray(nodeOrNodeList) ? nodeOrNodeList : [nodeOrNodeList];
6140
6156
  const removedItems = [];
@@ -6154,7 +6170,10 @@
6154
6170
  });
6155
6171
  }
6156
6172
  }
6157
- await Promise.all(nodes.map((node) => this.doRemove(node, { doNotSelect })));
6173
+ await Promise.all(nodes.map((node) => this.doRemove(node, {
6174
+ doNotSelect,
6175
+ doNotSwitchPage
6176
+ })));
6158
6177
  if (removedItems.length > 0 && pageForOp) this.pushOpHistory("remove", { removedItems }, pageForOp);
6159
6178
  this.emit("remove", nodes);
6160
6179
  }
@@ -6191,7 +6210,10 @@
6191
6210
  selectedNodes.splice(targetIndex, 1, newConfig);
6192
6211
  this.set("nodes", [...selectedNodes]);
6193
6212
  }
6194
- if ((0, _tmagic_utils.isPage)(newConfig) || (0, _tmagic_utils.isPageFragment)(newConfig)) this.set("page", newConfig);
6213
+ if ((0, _tmagic_utils.isPage)(newConfig) || (0, _tmagic_utils.isPageFragment)(newConfig)) {
6214
+ const currentPage = this.get("page");
6215
+ if (currentPage && `${currentPage.id}` === `${newConfig.id}`) this.set("page", newConfig);
6216
+ }
6195
6217
  this.addModifiedNodeId(newConfig.id);
6196
6218
  return {
6197
6219
  oldNode: node,
@@ -6232,6 +6254,7 @@
6232
6254
  * @param id2 组件ID
6233
6255
  * @param options 可选配置
6234
6256
  * @param options.doNotSelect 排序后是否不更新当前选中节点(默认 false)
6257
+ * @param options.doNotSwitchPage 排序后是否不切换当前页面(排序只发生在同一父节点内,方法内为空操作;保留以与其它 DSL 操作 API 一致)
6235
6258
  * @returns void
6236
6259
  */
6237
6260
  async sort(id1, id2, options) {
@@ -6279,10 +6302,11 @@
6279
6302
  * @param collectorOptions 可选的依赖收集器配置
6280
6303
  * @param options 可选配置
6281
6304
  * @param options.doNotSelect 粘贴后是否不更新当前选中节点(默认 false)
6305
+ * @param options.doNotSwitchPage 粘贴后是否不切换当前页面(默认 false;跨页粘贴时为 true 会跳过页面切换)
6282
6306
  * @returns 添加后的组件节点配置
6283
6307
  */
6284
6308
  async paste(position = {}, collectorOptions, options) {
6285
- const { doNotSelect = false } = safeOptions(options);
6309
+ const { doNotSelect = false, doNotSwitchPage = false } = safeOptions(options);
6286
6310
  const config = storage_default.getItem(COPY_STORAGE_KEY);
6287
6311
  if (!Array.isArray(config)) return;
6288
6312
  const node = this.get("node");
@@ -6293,7 +6317,10 @@
6293
6317
  }
6294
6318
  const pasteConfigs = await this.doPaste(config, position);
6295
6319
  if (collectorOptions && typeof collectorOptions.isTarget === "function") props_default.replaceRelateId(config, pasteConfigs, collectorOptions);
6296
- return this.add(pasteConfigs, parent, { doNotSelect });
6320
+ return this.add(pasteConfigs, parent, {
6321
+ doNotSelect,
6322
+ doNotSwitchPage
6323
+ });
6297
6324
  }
6298
6325
  async doPaste(config, position = {}) {
6299
6326
  props_default.clearRelateId();
@@ -6316,6 +6343,7 @@
6316
6343
  * @param config 组件节点配置
6317
6344
  * @param options 可选配置
6318
6345
  * @param options.doNotSelect 居中后是否不更新当前选中节点(默认 false)
6346
+ * @param options.doNotSwitchPage 居中后是否不切换当前页面(居中只更新节点 style,方法内为空操作;保留以与其它 DSL 操作 API 一致)
6319
6347
  * @returns 当前组件节点配置
6320
6348
  */
6321
6349
  async alignCenter(config, options) {
@@ -6371,9 +6399,10 @@
6371
6399
  * @param targetId 容器ID
6372
6400
  * @param options 可选配置
6373
6401
  * @param options.doNotSelect 移动后是否不更新当前选中节点(默认 false)
6402
+ * @param options.doNotSwitchPage 移动后是否不切换当前页面(默认 false;目标容器位于其它页面时为 true 会跳过自动选中以避免页面切换)
6374
6403
  */
6375
6404
  async moveToContainer(config, targetId, options) {
6376
- const { doNotSelect = false } = safeOptions(options);
6405
+ const { doNotSelect = false, doNotSwitchPage = false } = safeOptions(options);
6377
6406
  this.captureSelectionBeforeOp();
6378
6407
  const root = this.get("root");
6379
6408
  const { node, parent, page: pageForOp } = this.getNodeInfo(config.id, false);
@@ -6395,14 +6424,16 @@
6395
6424
  });
6396
6425
  newConfig.style = getInitPositionStyle(newConfig.style, layout);
6397
6426
  target.items.push(newConfig);
6398
- if (!doNotSelect) await stage.select(targetId);
6427
+ const targetWouldSwitchPage = this.isOnDifferentPage(target);
6428
+ const skipSelect = doNotSelect || doNotSwitchPage && targetWouldSwitchPage;
6429
+ if (!skipSelect) await stage.select(targetId);
6399
6430
  const targetParent = this.getParentById(target.id);
6400
6431
  await stage.update({
6401
6432
  config: cloneDeep(target),
6402
6433
  parentId: targetParent?.id,
6403
6434
  root: cloneDeep(root)
6404
6435
  });
6405
- if (!doNotSelect) {
6436
+ if (!skipSelect) {
6406
6437
  await this.select(newConfig);
6407
6438
  stage.select(newConfig.id);
6408
6439
  }
@@ -9173,7 +9204,7 @@
9173
9204
  (0, vue.createVNode)((0, vue.unref)(_tmagic_design.TMagicScrollbar), null, {
9174
9205
  default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(_tmagic_form.MForm), {
9175
9206
  ref: "configForm",
9176
- class: (0, vue.normalizeClass)(propsPanelSize.value),
9207
+ class: (0, vue.normalizeClass)([propsPanelSize.value, "m-editor-props-form-panel-form"]),
9177
9208
  "popper-class": `m-editor-props-panel-popper ${propsPanelSize.value}`,
9178
9209
  "label-width": __props.labelWidth,
9179
9210
  "label-position": __props.labelPosition,
@@ -11728,10 +11759,43 @@
11728
11759
  const nodeStatusMaps = (0, vue.ref)(/* @__PURE__ */ new Map());
11729
11760
  /** 当前页面的节点状态 */
11730
11761
  const nodeStatusMap = (0, vue.computed)(() => page.value ? nodeStatusMaps.value.get(page.value.id) : /* @__PURE__ */ new Map());
11731
- (0, vue.watch)(() => page.value?.id, (pageId) => {
11732
- if (!pageId) return;
11733
- nodeStatusMaps.value.set(pageId, createPageNodeStatus(page.value, nodeStatusMaps.value.get(pageId)));
11762
+ (0, vue.watch)(page, (newPage) => {
11763
+ if (!newPage?.id) return;
11764
+ nodeStatusMaps.value.set(newPage.id, createPageNodeStatus(newPage, nodeStatusMaps.value.get(newPage.id)));
11734
11765
  }, { immediate: true });
11766
+ /**
11767
+ * root 整体被替换时(外部 modelValue 变化、历史版本恢复、套件编辑模式进入/退出等):
11768
+ * - 仅 watch page 引用还不够,因为 root-change 同步触发时 page 还是旧引用,
11769
+ * 等 initService 的异步 IIFE 跑完 editorService.select(...) 后 page 才会
11770
+ * 被替换为新 dsl 中的 page;此时上面的 page watch 才会触发重建。
11771
+ * - 但若直接同步清空 nodeStatusMaps,会让 nodeStatusMap (computed) 立刻变
11772
+ * undefined。上层 LayerPanel 用 `v-if="page && nodeStatusMap"` 渲染组件树,
11773
+ * 会瞬间销毁整个面板;若紧接着的异步 select 链路(套件退出等场景)发生
11774
+ * 竞态、page 引用未变 / 解析失败,watch(page) 不触发重建,组件树就再也回
11775
+ * 不来。
11776
+ * - 此外「污染」问题本质来自 createPageNodeStatus 用旧 status 作为新节点
11777
+ * initial 值:只要新 root 的 page 是新引用,watch(page) 会触发重建,重建
11778
+ * 时基于新 page.items 生成的 map 只会包含新节点 id;旧节点 id 即便残留在
11779
+ * initialLayerNodeStatus 中也不会被写入新 map。真正的风险只有「同一 page
11780
+ * id 下,新旧 dsl 都存在同一节点 id 但其实是不同节点」这种极端情况——这
11781
+ * 在常规业务中不会发生(id 是 uuid)。
11782
+ *
11783
+ * 综合:root-change 时仅清理「在新 root 中已不存在的 page id」对应缓存,
11784
+ * 保留仍然有效的 page status 不动;既避免 v-if 闪断,也不会保留无关 page 的
11785
+ * 死缓存。同 page id 的重建交给下方 watch(page) 触发。
11786
+ */
11787
+ const rootChangeHandler = (value) => {
11788
+ if (!value) {
11789
+ nodeStatusMaps.value = /* @__PURE__ */ new Map();
11790
+ return;
11791
+ }
11792
+ const validPageIds = /* @__PURE__ */ new Set();
11793
+ (value.items || []).forEach((p) => {
11794
+ if (p?.id !== void 0) validPageIds.add(p.id);
11795
+ });
11796
+ for (const cachedPageId of Array.from(nodeStatusMaps.value.keys())) if (!validPageIds.has(cachedPageId)) nodeStatusMaps.value.delete(cachedPageId);
11797
+ };
11798
+ editorService.on("root-change", rootChangeHandler);
11735
11799
  (0, vue.watch)(nodes, (nodes) => {
11736
11800
  if (!nodeStatusMap.value) return;
11737
11801
  for (const [id, status] of nodeStatusMap.value.entries()) {
@@ -11764,6 +11828,7 @@
11764
11828
  };
11765
11829
  editorService.on("remove", removeHandler);
11766
11830
  (0, vue.onBeforeUnmount)(() => {
11831
+ editorService.off("root-change", rootChangeHandler);
11767
11832
  editorService.off("remove", removeHandler);
11768
11833
  editorService.off("add", addHandler);
11769
11834
  });
@@ -16754,6 +16819,10 @@
16754
16819
  emit("change", [dsId], eventData);
16755
16820
  }
16756
16821
  };
16822
+ const onToggleDataSourceFieldSelectHandler = () => {
16823
+ if (props.disabled || mForm?.isCompare) return;
16824
+ showDataSourceFieldSelect.value = !showDataSourceFieldSelect.value;
16825
+ };
16757
16826
  return (_ctx, _cache) => {
16758
16827
  return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$29, [!disabledDataSource.value && (showDataSourceFieldSelect.value || !__props.config.fieldConfig) ? ((0, vue.openBlock)(), (0, vue.createBlock)(FieldSelect_default, {
16759
16828
  key: 0,
@@ -16803,11 +16872,16 @@
16803
16872
  default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(_tmagic_design.TMagicButton), {
16804
16873
  type: showDataSourceFieldSelect.value ? "primary" : "default",
16805
16874
  size: __props.size,
16806
- onClick: _cache[0] || (_cache[0] = ($event) => showDataSourceFieldSelect.value = !showDataSourceFieldSelect.value)
16875
+ disabled: __props.disabled || (0, vue.unref)(mForm)?.isCompare,
16876
+ onClick: onToggleDataSourceFieldSelectHandler
16807
16877
  }, {
16808
16878
  default: (0, vue.withCtx)(() => [(0, vue.createVNode)(Icon_default, { icon: (0, vue.unref)(_element_plus_icons_vue.Coin) }, null, 8, ["icon"])]),
16809
16879
  _: 1
16810
- }, 8, ["type", "size"])]),
16880
+ }, 8, [
16881
+ "type",
16882
+ "size",
16883
+ "disabled"
16884
+ ])]),
16811
16885
  _: 1
16812
16886
  }, 8, ["disabled"])) : (0, vue.createCommentVNode)("v-if", true)]);
16813
16887
  };
@@ -17794,10 +17868,12 @@
17794
17868
  __name: "Background",
17795
17869
  props: {
17796
17870
  values: {},
17871
+ lastValues: {},
17872
+ isCompare: { type: Boolean },
17797
17873
  disabled: { type: Boolean },
17798
17874
  size: {}
17799
17875
  },
17800
- emits: ["change"],
17876
+ emits: ["change", "addDiffCount"],
17801
17877
  setup(__props, { emit: __emit }) {
17802
17878
  const emit = __emit;
17803
17879
  const config = (0, _tmagic_form.defineFormItem)({ items: [
@@ -17879,16 +17955,22 @@
17879
17955
  const change = (value, eventData) => {
17880
17956
  emit("change", value, eventData);
17881
17957
  };
17958
+ const onAddDiffCount = () => emit("addDiffCount");
17882
17959
  return (_ctx, _cache) => {
17883
17960
  return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_tmagic_form.MContainer), {
17884
17961
  config: (0, vue.unref)(config),
17885
17962
  model: __props.values,
17963
+ "last-values": __props.lastValues,
17964
+ "is-compare": __props.isCompare,
17886
17965
  size: __props.size,
17887
17966
  disabled: __props.disabled,
17888
- onChange: change
17967
+ onChange: change,
17968
+ onAddDiffCount
17889
17969
  }, null, 8, [
17890
17970
  "config",
17891
17971
  "model",
17972
+ "last-values",
17973
+ "is-compare",
17892
17974
  "size",
17893
17975
  "disabled"
17894
17976
  ]);
@@ -17937,10 +18019,12 @@
17937
18019
  __name: "Font",
17938
18020
  props: {
17939
18021
  values: {},
18022
+ lastValues: {},
18023
+ isCompare: { type: Boolean },
17940
18024
  disabled: { type: Boolean },
17941
18025
  size: {}
17942
18026
  },
17943
- emits: ["change"],
18027
+ emits: ["change", "addDiffCount"],
17944
18028
  setup(__props, { emit: __emit }) {
17945
18029
  const emit = __emit;
17946
18030
  const config = (0, _tmagic_form.defineFormItem)({ items: [
@@ -18008,16 +18092,22 @@
18008
18092
  const change = (value, eventData) => {
18009
18093
  emit("change", value, eventData);
18010
18094
  };
18095
+ const onAddDiffCount = () => emit("addDiffCount");
18011
18096
  return (_ctx, _cache) => {
18012
18097
  return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_tmagic_form.MContainer), {
18013
18098
  config: (0, vue.unref)(config),
18014
18099
  model: __props.values,
18100
+ "last-values": __props.lastValues,
18101
+ "is-compare": __props.isCompare,
18015
18102
  size: __props.size,
18016
18103
  disabled: __props.disabled,
18017
- onChange: change
18104
+ onChange: change,
18105
+ onAddDiffCount
18018
18106
  }, null, 8, [
18019
18107
  "config",
18020
18108
  "model",
18109
+ "last-values",
18110
+ "is-compare",
18021
18111
  "size",
18022
18112
  "disabled"
18023
18113
  ]);
@@ -18046,7 +18136,9 @@
18046
18136
  props: {
18047
18137
  disabled: { type: Boolean },
18048
18138
  size: {},
18049
- model: {}
18139
+ model: {},
18140
+ lastValues: {},
18141
+ isCompare: { type: Boolean }
18050
18142
  },
18051
18143
  emits: ["change"],
18052
18144
  setup(__props, { emit: __emit }) {
@@ -18269,10 +18361,12 @@
18269
18361
  __name: "Layout",
18270
18362
  props: {
18271
18363
  values: {},
18364
+ lastValues: {},
18365
+ isCompare: { type: Boolean },
18272
18366
  disabled: { type: Boolean },
18273
18367
  size: {}
18274
18368
  },
18275
- emits: ["change"],
18369
+ emits: ["change", "addDiffCount"],
18276
18370
  setup(__props, { emit: __emit }) {
18277
18371
  const emit = __emit;
18278
18372
  const config = (0, _tmagic_form.defineFormItem)({ items: [
@@ -18508,25 +18602,35 @@
18508
18602
  const change = (value, eventData) => {
18509
18603
  emit("change", value, eventData);
18510
18604
  };
18605
+ const onAddDiffCount = () => emit("addDiffCount");
18511
18606
  return (_ctx, _cache) => {
18512
18607
  return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, [(0, vue.createVNode)((0, vue.unref)(_tmagic_form.MContainer), {
18513
18608
  config: (0, vue.unref)(config),
18514
18609
  model: __props.values,
18610
+ "last-values": __props.lastValues,
18611
+ "is-compare": __props.isCompare,
18515
18612
  size: __props.size,
18516
18613
  disabled: __props.disabled,
18517
- onChange: change
18614
+ onChange: change,
18615
+ onAddDiffCount
18518
18616
  }, null, 8, [
18519
18617
  "config",
18520
18618
  "model",
18619
+ "last-values",
18620
+ "is-compare",
18521
18621
  "size",
18522
18622
  "disabled"
18523
18623
  ]), (0, vue.withDirectives)((0, vue.createVNode)(Box_default, {
18524
18624
  model: __props.values,
18625
+ "last-values": __props.lastValues,
18626
+ "is-compare": __props.isCompare,
18525
18627
  size: __props.size,
18526
18628
  disabled: __props.disabled,
18527
18629
  onChange: change
18528
18630
  }, null, 8, [
18529
18631
  "model",
18632
+ "last-values",
18633
+ "is-compare",
18530
18634
  "size",
18531
18635
  "disabled"
18532
18636
  ]), [[vue.vShow, !["fixed", "absolute"].includes(__props.values.position)]])], 64);
@@ -18542,10 +18646,12 @@
18542
18646
  __name: "Position",
18543
18647
  props: {
18544
18648
  values: {},
18649
+ lastValues: {},
18650
+ isCompare: { type: Boolean },
18545
18651
  disabled: { type: Boolean },
18546
18652
  size: {}
18547
18653
  },
18548
- emits: ["change"],
18654
+ emits: ["change", "addDiffCount"],
18549
18655
  setup(__props, { emit: __emit }) {
18550
18656
  const props = __props;
18551
18657
  const emit = __emit;
@@ -18613,16 +18719,22 @@
18613
18719
  const change = (value, eventData) => {
18614
18720
  emit("change", value, eventData);
18615
18721
  };
18722
+ const onAddDiffCount = () => emit("addDiffCount");
18616
18723
  return (_ctx, _cache) => {
18617
18724
  return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_tmagic_form.MContainer), {
18618
18725
  config: (0, vue.unref)(config),
18619
18726
  model: __props.values,
18727
+ "last-values": __props.lastValues,
18728
+ "is-compare": __props.isCompare,
18620
18729
  size: __props.size,
18621
18730
  disabled: __props.disabled,
18622
- onChange: change
18731
+ onChange: change,
18732
+ onAddDiffCount
18623
18733
  }, null, 8, [
18624
18734
  "config",
18625
18735
  "model",
18736
+ "last-values",
18737
+ "is-compare",
18626
18738
  "size",
18627
18739
  "disabled"
18628
18740
  ]);
@@ -18644,10 +18756,12 @@
18644
18756
  __name: "Border",
18645
18757
  props: {
18646
18758
  model: {},
18759
+ lastValues: {},
18760
+ isCompare: { type: Boolean },
18647
18761
  disabled: { type: Boolean },
18648
18762
  size: {}
18649
18763
  },
18650
- emits: ["change"],
18764
+ emits: ["change", "addDiffCount"],
18651
18765
  setup(__props, { emit: __emit }) {
18652
18766
  const direction = (0, vue.ref)("");
18653
18767
  const config = (0, vue.computed)(() => (0, _tmagic_form.defineFormItem)({ items: [
@@ -18690,6 +18804,7 @@
18690
18804
  emit("change", record.value, { modifyKey: record.propPath });
18691
18805
  });
18692
18806
  };
18807
+ const onAddDiffCount = () => emit("addDiffCount");
18693
18808
  return (_ctx, _cache) => {
18694
18809
  return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$1, [(0, vue.createElementVNode)("div", _hoisted_2, [
18695
18810
  (0, vue.createElementVNode)("div", _hoisted_3, [(0, vue.createElementVNode)("div", {
@@ -18717,12 +18832,17 @@
18717
18832
  ]), (0, vue.createElementVNode)("div", _hoisted_6, [(0, vue.createVNode)((0, vue.unref)(_tmagic_form.MContainer), {
18718
18833
  config: config.value,
18719
18834
  model: __props.model,
18835
+ "last-values": __props.lastValues,
18836
+ "is-compare": __props.isCompare,
18720
18837
  size: __props.size,
18721
18838
  disabled: __props.disabled,
18722
- onChange: change
18839
+ onChange: change,
18840
+ onAddDiffCount
18723
18841
  }, null, 8, [
18724
18842
  "config",
18725
18843
  "model",
18844
+ "last-values",
18845
+ "is-compare",
18726
18846
  "size",
18727
18847
  "disabled"
18728
18848
  ])])]);
@@ -18738,10 +18858,12 @@
18738
18858
  __name: "Border",
18739
18859
  props: {
18740
18860
  values: {},
18861
+ lastValues: {},
18862
+ isCompare: { type: Boolean },
18741
18863
  disabled: { type: Boolean },
18742
18864
  size: {}
18743
18865
  },
18744
- emits: ["change"],
18866
+ emits: ["change", "addDiffCount"],
18745
18867
  setup(__props, { emit: __emit }) {
18746
18868
  const emit = __emit;
18747
18869
  const config = (0, _tmagic_form.defineFormItem)({ items: [{
@@ -18754,25 +18876,36 @@
18754
18876
  const change = (value, eventData) => {
18755
18877
  emit("change", value, eventData);
18756
18878
  };
18879
+ const onAddDiffCount = () => emit("addDiffCount");
18757
18880
  return (_ctx, _cache) => {
18758
18881
  return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, [(0, vue.createVNode)((0, vue.unref)(_tmagic_form.MContainer), {
18759
18882
  config: (0, vue.unref)(config),
18760
18883
  model: __props.values,
18884
+ "last-values": __props.lastValues,
18885
+ "is-compare": __props.isCompare,
18761
18886
  size: __props.size,
18762
18887
  disabled: __props.disabled,
18763
- onChange: change
18888
+ onChange: change,
18889
+ onAddDiffCount
18764
18890
  }, null, 8, [
18765
18891
  "config",
18766
18892
  "model",
18893
+ "last-values",
18894
+ "is-compare",
18767
18895
  "size",
18768
18896
  "disabled"
18769
18897
  ]), (0, vue.createVNode)(Border_default$1, {
18770
18898
  model: __props.values,
18899
+ "last-values": __props.lastValues,
18900
+ "is-compare": __props.isCompare,
18771
18901
  size: __props.size,
18772
18902
  disabled: __props.disabled,
18773
- onChange: change
18903
+ onChange: change,
18904
+ onAddDiffCount
18774
18905
  }, null, 8, [
18775
18906
  "model",
18907
+ "last-values",
18908
+ "is-compare",
18776
18909
  "size",
18777
18910
  "disabled"
18778
18911
  ])], 64);
@@ -18788,10 +18921,12 @@
18788
18921
  __name: "Transform",
18789
18922
  props: {
18790
18923
  values: {},
18924
+ lastValues: {},
18925
+ isCompare: { type: Boolean },
18791
18926
  disabled: { type: Boolean },
18792
18927
  size: {}
18793
18928
  },
18794
- emits: ["change"],
18929
+ emits: ["change", "addDiffCount"],
18795
18930
  setup(__props, { emit: __emit }) {
18796
18931
  const emit = __emit;
18797
18932
  const config = (0, _tmagic_form.defineFormItem)({ items: [{
@@ -18817,16 +18952,22 @@
18817
18952
  const change = (value, eventData) => {
18818
18953
  emit("change", value, eventData);
18819
18954
  };
18955
+ const onAddDiffCount = () => emit("addDiffCount");
18820
18956
  return (_ctx, _cache) => {
18821
18957
  return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_tmagic_form.MContainer), {
18822
18958
  config: (0, vue.unref)(config),
18823
18959
  model: __props.values,
18960
+ "last-values": __props.lastValues,
18961
+ "is-compare": __props.isCompare,
18824
18962
  size: __props.size,
18825
18963
  disabled: __props.disabled,
18826
- onChange: change
18964
+ onChange: change,
18965
+ onAddDiffCount
18827
18966
  }, null, 8, [
18828
18967
  "config",
18829
18968
  "model",
18969
+ "last-values",
18970
+ "is-compare",
18830
18971
  "size",
18831
18972
  "disabled"
18832
18973
  ]);
@@ -18853,7 +18994,7 @@
18853
18994
  lastValues: {},
18854
18995
  isCompare: { type: Boolean }
18855
18996
  },
18856
- emits: ["change"],
18997
+ emits: ["change", "addDiffCount"],
18857
18998
  setup(__props, { emit: __emit }) {
18858
18999
  const props = __props;
18859
19000
  const emit = __emit;
@@ -18892,6 +19033,7 @@
18892
19033
  });
18893
19034
  emit("change", v, eventData);
18894
19035
  };
19036
+ const onAddDiffCount = () => emit("addDiffCount");
18895
19037
  return (_ctx, _cache) => {
18896
19038
  return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_tmagic_design.TMagicCollapse), {
18897
19039
  class: "m-fields-style-setter",
@@ -18907,11 +19049,16 @@
18907
19049
  default: (0, vue.withCtx)(() => [item.component ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(item.component), {
18908
19050
  key: 0,
18909
19051
  values: __props.model[__props.name],
19052
+ "last-values": __props.lastValues?.[__props.name],
19053
+ "is-compare": __props.isCompare,
18910
19054
  size: __props.size,
18911
19055
  disabled: __props.disabled,
18912
- onChange: change
19056
+ onChange: change,
19057
+ onAddDiffCount
18913
19058
  }, null, 40, [
18914
19059
  "values",
19060
+ "last-values",
19061
+ "is-compare",
18915
19062
  "size",
18916
19063
  "disabled"
18917
19064
  ])) : (0, vue.createCommentVNode)("v-if", true)]),
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.7.14-beta.3",
2
+ "version": "1.8.0-beta.1",
3
3
  "name": "@tmagic/editor",
4
4
  "type": "module",
5
5
  "sideEffects": [
@@ -58,11 +58,11 @@
58
58
  "moveable": "^0.53.0",
59
59
  "serialize-javascript": "^7.0.0",
60
60
  "sortablejs": "^1.15.6",
61
- "@tmagic/design": "1.7.14-beta.3",
62
- "@tmagic/form": "1.7.14-beta.3",
63
- "@tmagic/stage": "1.7.14-beta.3",
64
- "@tmagic/table": "1.7.14-beta.3",
65
- "@tmagic/utils": "1.7.14-beta.3"
61
+ "@tmagic/design": "1.8.0-beta.1",
62
+ "@tmagic/form": "1.8.0-beta.1",
63
+ "@tmagic/stage": "1.8.0-beta.1",
64
+ "@tmagic/table": "1.8.0-beta.1",
65
+ "@tmagic/utils": "1.8.0-beta.1"
66
66
  },
67
67
  "devDependencies": {
68
68
  "@types/events": "^3.0.3",
@@ -76,7 +76,7 @@
76
76
  "type-fest": "^5.2.0",
77
77
  "typescript": "^6.0.3",
78
78
  "vue": "^3.5.34",
79
- "@tmagic/core": "1.7.14-beta.3"
79
+ "@tmagic/core": "1.8.0-beta.1"
80
80
  },
81
81
  "peerDependenciesMeta": {
82
82
  "typescript": {