@tmagic/editor 1.0.0-rc.5 → 1.0.0-rc.8

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 (85) hide show
  1. package/dist/style.css +3 -0
  2. package/dist/tmagic-editor.es.js +160 -118
  3. package/dist/tmagic-editor.es.js.map +1 -1
  4. package/dist/tmagic-editor.umd.js +160 -120
  5. package/dist/tmagic-editor.umd.js.map +1 -1
  6. package/dist/types/src/Editor.vue.d.ts +36 -2
  7. package/dist/types/src/fields/Code.vue.d.ts +4 -4
  8. package/dist/types/src/fields/CodeLink.vue.d.ts +1 -3
  9. package/dist/types/src/layouts/PropsPanel.vue.d.ts +2 -4
  10. package/dist/types/src/layouts/workspace/Workspace.vue.d.ts +3 -31
  11. package/dist/types/src/services/history.d.ts +1 -18
  12. package/dist/types/src/services/props.d.ts +8 -2
  13. package/dist/types/src/type.d.ts +9 -0
  14. package/dist/types/src/utils/editor.d.ts +0 -6
  15. package/dist/types/src/utils/props.d.ts +8 -1
  16. package/package.json +11 -20
  17. package/src/Editor.vue +35 -9
  18. package/src/components/ContentMenu.vue +58 -25
  19. package/src/layouts/sidebar/LayerMenu.vue +3 -0
  20. package/src/layouts/workspace/Stage.vue +11 -31
  21. package/src/layouts/workspace/ViewerMenu.vue +3 -0
  22. package/src/layouts/workspace/Workspace.vue +2 -28
  23. package/src/services/editor.ts +3 -4
  24. package/src/services/props.ts +64 -9
  25. package/src/theme/workspace.scss +4 -0
  26. package/src/type.ts +10 -0
  27. package/src/utils/editor.ts +1 -50
  28. package/src/utils/props.ts +30 -7
  29. package/LICENSE +0 -5432
  30. package/coverage/clover.xml +0 -1593
  31. package/coverage/coverage-final.json +0 -36
  32. package/coverage/lcov-report/base.css +0 -224
  33. package/coverage/lcov-report/block-navigation.js +0 -87
  34. package/coverage/lcov-report/favicon.png +0 -0
  35. package/coverage/lcov-report/index.html +0 -206
  36. package/coverage/lcov-report/prettify.css +0 -1
  37. package/coverage/lcov-report/prettify.js +0 -2
  38. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  39. package/coverage/lcov-report/sorter.js +0 -196
  40. package/coverage/lcov-report/src/Editor.vue.html +0 -814
  41. package/coverage/lcov-report/src/components/ContentMenu.vue.html +0 -406
  42. package/coverage/lcov-report/src/components/Icon.vue.html +0 -172
  43. package/coverage/lcov-report/src/components/ScrollViewer.vue.html +0 -283
  44. package/coverage/lcov-report/src/components/ToolButton.vue.html +0 -772
  45. package/coverage/lcov-report/src/components/index.html +0 -161
  46. package/coverage/lcov-report/src/index.html +0 -131
  47. package/coverage/lcov-report/src/layouts/AddPageBox.vue.html +0 -214
  48. package/coverage/lcov-report/src/layouts/Framework.vue.html +0 -343
  49. package/coverage/lcov-report/src/layouts/NavMenu.vue.html +0 -208
  50. package/coverage/lcov-report/src/layouts/PropsPanel.vue.html +0 -319
  51. package/coverage/lcov-report/src/layouts/Resizer.vue.html +0 -268
  52. package/coverage/lcov-report/src/layouts/index.html +0 -176
  53. package/coverage/lcov-report/src/layouts/sidebar/ComponentListPanel.vue.html +0 -358
  54. package/coverage/lcov-report/src/layouts/sidebar/LayerMenu.vue.html +0 -421
  55. package/coverage/lcov-report/src/layouts/sidebar/LayerPanel.vue.html +0 -775
  56. package/coverage/lcov-report/src/layouts/sidebar/Sidebar.vue.html +0 -226
  57. package/coverage/lcov-report/src/layouts/sidebar/TabPane.vue.html +0 -289
  58. package/coverage/lcov-report/src/layouts/sidebar/index.html +0 -176
  59. package/coverage/lcov-report/src/layouts/workspace/PageBar.vue.html +0 -718
  60. package/coverage/lcov-report/src/layouts/workspace/Stage.vue.html +0 -766
  61. package/coverage/lcov-report/src/layouts/workspace/ViewerMenu.vue.html +0 -568
  62. package/coverage/lcov-report/src/layouts/workspace/Workspace.vue.html +0 -649
  63. package/coverage/lcov-report/src/layouts/workspace/index.html +0 -161
  64. package/coverage/lcov-report/src/services/BaseService.ts.html +0 -643
  65. package/coverage/lcov-report/src/services/componentList.ts.html +0 -229
  66. package/coverage/lcov-report/src/services/editor.ts.html +0 -2167
  67. package/coverage/lcov-report/src/services/events.ts.html +0 -331
  68. package/coverage/lcov-report/src/services/history.ts.html +0 -478
  69. package/coverage/lcov-report/src/services/index.html +0 -206
  70. package/coverage/lcov-report/src/services/props.ts.html +0 -415
  71. package/coverage/lcov-report/src/services/ui.ts.html +0 -580
  72. package/coverage/lcov-report/src/type.ts.html +0 -850
  73. package/coverage/lcov-report/src/utils/compose.ts.html +0 -184
  74. package/coverage/lcov-report/src/utils/config.ts.html +0 -172
  75. package/coverage/lcov-report/src/utils/editor.ts.html +0 -838
  76. package/coverage/lcov-report/src/utils/index.html +0 -221
  77. package/coverage/lcov-report/src/utils/index.ts.html +0 -151
  78. package/coverage/lcov-report/src/utils/logger.ts.html +0 -226
  79. package/coverage/lcov-report/src/utils/props.ts.html +0 -796
  80. package/coverage/lcov-report/src/utils/scroll-viewer.ts.html +0 -733
  81. package/coverage/lcov-report/src/utils/undo-redo.ts.html +0 -313
  82. package/coverage/lcov.info +0 -3846
  83. package/dist/types/src/components/ToolButton.vue.d.ts +0 -46
  84. package/dist/types/src/fields/UISelect.vue.d.ts +0 -35
  85. package/dist/types/src/layouts/workspace/PageBar.vue.d.ts +0 -18
@@ -1,7 +1,7 @@
1
1
  (function (global, factory) {
2
2
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('vue'), require('serialize-javascript'), require('@element-plus/icons'), require('lodash-es'), require('monaco-editor'), require('@tmagic/schema'), require('@tmagic/utils'), require('events'), require('@tmagic/core'), require('gesto'), require('element-plus'), require('keycon'), require('@tmagic/stage')) :
3
3
  typeof define === 'function' && define.amd ? define(['exports', 'vue', 'serialize-javascript', '@element-plus/icons', 'lodash-es', 'monaco-editor', '@tmagic/schema', '@tmagic/utils', 'events', '@tmagic/core', 'gesto', 'element-plus', 'keycon', '@tmagic/stage'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.TMagicEditor = {}, global.vue, global.serialize, global.icons, global.lodashEs, global.monaco, global.schema, global.utils, global.events, global.core, global.Gesto, global.elementPlus, global.KeyController, global.StageCore));
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.TMagicEditor = {}, global.Vue, global.serialize, global.icons, global.lodashEs, global.monaco, global.schema, global.utils, global.events, global.core, global.Gesto, global.ElementPlus, global.KeyController, global.StageCore));
5
5
  })(this, (function (exports, vue, serialize, icons, lodashEs, monaco, schema, utils, events, core, Gesto, elementPlus, KeyController, StageCore) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -139,7 +139,7 @@
139
139
  }
140
140
  var CodeLink = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["render", _sfc_render$l]]);
141
141
 
142
- var UISelect_vue_vue_type_style_index_0_lang = '';
142
+ var UISelect_vue_vue_type_style_index_0_lang = /* #__PURE__ */ (() => ".m-fields-ui-select {\n cursor: pointer;\n}\n.m-fields-ui-select i {\n margin-right: 3px;\n}\n.m-fields-ui-select span {\n color: #2882e0;\n}")();
143
143
 
144
144
  const _sfc_main$k = vue.defineComponent({
145
145
  name: "m-fields-ui-select",
@@ -645,7 +645,7 @@
645
645
 
646
646
  class Props extends BaseService {
647
647
  constructor() {
648
- super(["setPropsConfig", "getPropsConfig", "setPropsValue", "getPropsValue"]);
648
+ super(["setPropsConfig", "getPropsConfig", "setPropsValue", "getPropsValue", "createId", "setNewItemId"]);
649
649
  this.state = vue.reactive({
650
650
  propsConfigMap: {},
651
651
  propsValueMap: {}
@@ -684,12 +684,44 @@
684
684
  }
685
685
  return value;
686
686
  }
687
- return lodashEs.cloneDeep({
688
- ...getDefaultPropsValue(type),
689
- ...lodashEs.mergeWith(this.state.propsValueMap[type] || {}, defaultValue)
690
- });
687
+ const data = lodashEs.cloneDeep(defaultValue);
688
+ await this.setNewItemId(data);
689
+ return {
690
+ ...getDefaultPropsValue(type, await this.createId(type)),
691
+ ...lodashEs.mergeWith(lodashEs.cloneDeep(this.state.propsValueMap[type] || {}), data)
692
+ };
693
+ }
694
+ async createId(type) {
695
+ return `${type}_${lodashEs.random(1e4, false)}`;
696
+ }
697
+ async setNewItemId(config, parent) {
698
+ const oldId = config.id;
699
+ config.id = await this.createId(config.type || "component");
700
+ if (utils.isPop(config) && parent?.type === schema.NodeType.PAGE) {
701
+ updatePopId(oldId, config.id, parent);
702
+ }
703
+ if (config.items && Array.isArray(config.items)) {
704
+ for (const item of config.items) {
705
+ await this.setNewItemId(item, config);
706
+ }
707
+ }
691
708
  }
692
709
  }
710
+ const updatePopId = (oldId, popId, pageConfig) => {
711
+ pageConfig.items?.forEach((config) => {
712
+ if (config.pop === oldId) {
713
+ config.pop = popId;
714
+ return;
715
+ }
716
+ if (config.popId === oldId) {
717
+ config.popId = popId;
718
+ return;
719
+ }
720
+ if (Array.isArray(config.items)) {
721
+ updatePopId(oldId, popId, config);
722
+ }
723
+ });
724
+ };
693
725
  var propsService = new Props();
694
726
 
695
727
  var LayerOffset = /* @__PURE__ */ ((LayerOffset2) => {
@@ -710,7 +742,6 @@
710
742
  })(Keys || {});
711
743
 
712
744
  const COPY_STORAGE_KEY = "$MagicEditorCopyData";
713
- const generateId = (type) => `${type}_${lodashEs.random(1e4, false)}`;
714
745
  const getPageList = (app) => {
715
746
  if (app.items && Array.isArray(app.items)) {
716
747
  return app.items.filter((item) => item.type === schema.NodeType.PAGE);
@@ -730,32 +761,6 @@
730
761
  return pageName;
731
762
  };
732
763
  const generatePageNameByApp = (app) => generatePageName(getPageNameList(getPageList(app)));
733
- const updatePopId = (oldId, popId, pageConfig) => {
734
- pageConfig.items?.forEach((config) => {
735
- if (config.pop === oldId) {
736
- config.pop = popId;
737
- return;
738
- }
739
- if (config.popId === oldId) {
740
- config.popId = popId;
741
- return;
742
- }
743
- if (Array.isArray(config.items)) {
744
- updatePopId(oldId, popId, config);
745
- }
746
- });
747
- };
748
- const setNewItemId = (config, parent) => {
749
- const oldId = config.id;
750
- config.id = generateId(config.type || "component");
751
- config.name = `${config.name?.replace(/_(\d+)$/, "")}_${config.id}`;
752
- if (utils.isPop(config) && parent?.type === schema.NodeType.PAGE) {
753
- updatePopId(oldId, config.id, parent);
754
- }
755
- if (config.items && Array.isArray(config.items)) {
756
- config.items.forEach((item) => setNewItemId(item, config));
757
- }
758
- };
759
764
  const isFixed = (node) => node.style?.position === "fixed";
760
765
  const getNodeIndex = (node, parent) => {
761
766
  const items = parent?.items || [];
@@ -1154,7 +1159,7 @@
1154
1159
  console.error(e);
1155
1160
  return;
1156
1161
  }
1157
- setNewItemId(config, this.get("root"));
1162
+ await propsService.setNewItemId(config, this.get("root"));
1158
1163
  if (config.style) {
1159
1164
  config.style = {
1160
1165
  ...config.style,
@@ -1197,9 +1202,9 @@
1197
1202
  const node = this.get("node");
1198
1203
  const brothers = parent?.items || [];
1199
1204
  const index = brothers.findIndex((item) => `${item.id}` === `${node?.id}`);
1200
- if (offset === LayerOffset.BOTTOM) {
1205
+ if (offset === LayerOffset.TOP) {
1201
1206
  brothers.splice(brothers.length - 1, 0, brothers.splice(index, 1)[0]);
1202
- } else if (offset === LayerOffset.TOP) {
1207
+ } else if (offset === LayerOffset.BOTTOM) {
1203
1208
  brothers.splice(0, 0, brothers.splice(index, 1)[0]);
1204
1209
  } else {
1205
1210
  brothers.splice(index + parseInt(`${offset}`, 10), 0, brothers.splice(index, 1)[0]);
@@ -1484,6 +1489,21 @@
1484
1489
  text: "\u7C97\u7EC6"
1485
1490
  }
1486
1491
  ]
1492
+ },
1493
+ {
1494
+ type: "fieldset",
1495
+ legend: "\u53D8\u5F62",
1496
+ name: "transform",
1497
+ items: [
1498
+ {
1499
+ name: "rotate",
1500
+ text: "\u65CB\u8F6C\u89D2\u5EA6"
1501
+ },
1502
+ {
1503
+ name: "scale",
1504
+ text: "\u7F29\u653E"
1505
+ }
1506
+ ]
1487
1507
  }
1488
1508
  ]
1489
1509
  }
@@ -1544,12 +1564,18 @@
1544
1564
  }
1545
1565
  ];
1546
1566
  const DEFAULT_CONFIG = fillConfig([]);
1547
- const getDefaultPropsValue = (type) => ({
1567
+ const getDefaultPropsValue = (type, id) => ["page", "container"].includes(type) ? {
1568
+ type,
1569
+ id,
1570
+ style: {},
1571
+ name: type,
1572
+ items: []
1573
+ } : {
1548
1574
  type,
1549
- id: generateId(type),
1575
+ id,
1550
1576
  style: {},
1551
1577
  name: type
1552
- });
1578
+ };
1553
1579
 
1554
1580
  const _sfc_main$i = vue.defineComponent({
1555
1581
  components: { Plus: icons.Plus },
@@ -2267,9 +2293,14 @@
2267
2293
  menuData: {
2268
2294
  type: Array,
2269
2295
  default: () => []
2296
+ },
2297
+ isSubMenu: {
2298
+ type: Boolean,
2299
+ default: false
2270
2300
  }
2271
2301
  },
2272
- setup() {
2302
+ emits: ["hide", "show"],
2303
+ setup(props, { emit }) {
2273
2304
  const menu = vue.ref();
2274
2305
  const subMenu = vue.ref();
2275
2306
  const visible = vue.ref(false);
@@ -2279,15 +2310,31 @@
2279
2310
  top: "0"
2280
2311
  });
2281
2312
  const hide = () => {
2313
+ if (!visible.value)
2314
+ return;
2282
2315
  visible.value = false;
2316
+ subMenu.value?.hide();
2317
+ emit("hide");
2318
+ };
2319
+ const hideHandler = (e) => {
2320
+ const target = e.target;
2321
+ if (!visible.value || !target) {
2322
+ return;
2323
+ }
2324
+ if (menu.value?.contains(target) || subMenu.value?.$el?.contains(target)) {
2325
+ return;
2326
+ }
2327
+ hide();
2283
2328
  };
2284
2329
  vue.onMounted(() => {
2285
- globalThis.addEventListener("mouseup", (e) => {
2286
- if (!visible.value || e.target && menu.value?.contains(e.target)) {
2287
- return;
2288
- }
2289
- hide();
2290
- }, true);
2330
+ if (props.isSubMenu)
2331
+ return;
2332
+ globalThis.addEventListener("mousedown", hideHandler, true);
2333
+ });
2334
+ vue.onUnmounted(() => {
2335
+ if (props.isSubMenu)
2336
+ return;
2337
+ globalThis.removeEventListener("mousedown", hideHandler, true);
2291
2338
  });
2292
2339
  return {
2293
2340
  menu,
@@ -2297,18 +2344,21 @@
2297
2344
  subMenuData,
2298
2345
  hide,
2299
2346
  show(e) {
2300
- visible.value = true;
2301
- vue.nextTick(() => {
2302
- const menuHeight = menu.value?.clientHeight || 0;
2303
- let top = e.clientY;
2304
- if (menuHeight + e.clientY > document.body.clientHeight) {
2305
- top = document.body.clientHeight - menuHeight;
2306
- }
2307
- menuStyle.value = {
2308
- top: `${top}px`,
2309
- left: `${e.clientX + 2}px`
2310
- };
2311
- });
2347
+ setTimeout(() => {
2348
+ visible.value = true;
2349
+ vue.nextTick(() => {
2350
+ const menuHeight = menu.value?.clientHeight || 0;
2351
+ let top = e.clientY;
2352
+ if (menuHeight + e.clientY > document.body.clientHeight) {
2353
+ top = document.body.clientHeight - menuHeight;
2354
+ }
2355
+ menuStyle.value = {
2356
+ top: `${top}px`,
2357
+ left: `${e.clientX}px`
2358
+ };
2359
+ emit("show");
2360
+ });
2361
+ }, 300);
2312
2362
  },
2313
2363
  showSubMenu(item) {
2314
2364
  const menuItem = item;
@@ -2350,8 +2400,10 @@
2350
2400
  vue.createVNode(_component_content_menu, {
2351
2401
  class: "sub-menu",
2352
2402
  ref: "subMenu",
2353
- "menu-data": _ctx.subMenuData
2354
- }, null, 8, ["menu-data"])
2403
+ "menu-data": _ctx.subMenuData,
2404
+ "is-sub-menu": true,
2405
+ onHide: _ctx.hide
2406
+ }, null, 8, ["menu-data", "onHide"])
2355
2407
  ]))
2356
2408
  ], 4)) : vue.createCommentVNode("", true);
2357
2409
  }
@@ -2366,6 +2418,7 @@
2366
2418
  const isRoot = vue.computed(() => node.value?.type === schema.NodeType.ROOT);
2367
2419
  const isPage = vue.computed(() => node.value?.type === schema.NodeType.PAGE);
2368
2420
  const componentList = vue.computed(() => services?.componentListService.getList() || []);
2421
+ const layerContentMenu = vue.inject("layerContentMenu", []);
2369
2422
  const createMenuItems = (group) => group.items.map((component) => ({
2370
2423
  text: component.text,
2371
2424
  type: "button",
@@ -2430,7 +2483,8 @@
2430
2483
  handler: () => {
2431
2484
  node.value && services?.editorService.remove(node.value);
2432
2485
  }
2433
- }
2486
+ },
2487
+ ...layerContentMenu
2434
2488
  ]),
2435
2489
  show(e) {
2436
2490
  menu.value?.show(e);
@@ -3221,6 +3275,7 @@
3221
3275
  const node = vue.computed(() => editorService?.get("node"));
3222
3276
  const parent = vue.computed(() => editorService?.get("parent"));
3223
3277
  const isPage = vue.computed(() => node.value?.type === schema.NodeType.PAGE);
3278
+ const stageContentMenu = vue.inject("stageContentMenu", []);
3224
3279
  vue.onMounted(() => {
3225
3280
  const data = globalThis.localStorage.getItem(COPY_STORAGE_KEY);
3226
3281
  canPaste.value = data !== "undefined" && !!data;
@@ -3333,7 +3388,8 @@
3333
3388
  handler: () => {
3334
3389
  editorService?.get("stage").clearGuides();
3335
3390
  }
3336
- }
3391
+ },
3392
+ ...stageContentMenu
3337
3393
  ]),
3338
3394
  show(e) {
3339
3395
  menu.value?.show(e);
@@ -3356,25 +3412,9 @@
3356
3412
  ViewerMenu,
3357
3413
  ScrollViewer
3358
3414
  },
3359
- props: {
3360
- render: {
3361
- type: Function
3362
- },
3363
- runtimeUrl: String,
3364
- autoScrollIntoView: Boolean,
3365
- canSelect: {
3366
- type: Function,
3367
- default: (el) => Boolean(el.id)
3368
- },
3369
- moveableOptions: {
3370
- type: [Object, Function],
3371
- default: () => (core) => ({
3372
- container: core?.renderer?.contentWindow?.document.getElementById("app")
3373
- })
3374
- }
3375
- },
3376
- setup(props) {
3415
+ setup() {
3377
3416
  const services = vue.inject("services");
3417
+ const stageOptions = vue.inject("stageOptions");
3378
3418
  const stageWrap = vue.ref();
3379
3419
  const stageContainer = vue.ref();
3380
3420
  const menu = vue.ref();
@@ -3391,22 +3431,23 @@
3391
3431
  return;
3392
3432
  if (!stageContainer.value)
3393
3433
  return;
3394
- if (!(props.runtimeUrl || props.render) || !root.value)
3434
+ if (!(stageOptions?.runtimeUrl || stageOptions?.render) || !root.value)
3395
3435
  return;
3396
3436
  stage = new StageCore__default["default"]({
3397
- render: props.render,
3398
- runtimeUrl: props.runtimeUrl,
3437
+ render: stageOptions.render,
3438
+ runtimeUrl: stageOptions.runtimeUrl,
3399
3439
  zoom: zoom.value,
3400
- autoScrollIntoView: props.autoScrollIntoView,
3440
+ autoScrollIntoView: stageOptions.autoScrollIntoView,
3401
3441
  canSelect: (el, event, stop) => {
3402
- const elCanSelect = props.canSelect(el);
3442
+ const elCanSelect = stageOptions.canSelect(el);
3403
3443
  if (uiSelectMode.value && elCanSelect && event.type === "mousedown") {
3404
3444
  document.dispatchEvent(new CustomEvent("ui-select", { detail: el }));
3405
3445
  return stop();
3406
3446
  }
3407
3447
  return elCanSelect;
3408
3448
  },
3409
- moveableOptions: props.moveableOptions
3449
+ moveableOptions: stageOptions.moveableOptions,
3450
+ updateDragEl: stageOptions.updateDragEl
3410
3451
  });
3411
3452
  services?.editorService.set("stage", vue.markRaw(stage));
3412
3453
  stage?.mount(stageContainer.value);
@@ -3533,19 +3574,6 @@
3533
3574
  PageBar,
3534
3575
  MagicStage
3535
3576
  },
3536
- props: {
3537
- runtimeUrl: String,
3538
- autoScrollIntoView: Boolean,
3539
- render: {
3540
- type: Function
3541
- },
3542
- moveableOptions: {
3543
- type: [Object, Function]
3544
- },
3545
- canSelect: {
3546
- type: Function
3547
- }
3548
- },
3549
3577
  setup() {
3550
3578
  const services = vue.inject("services");
3551
3579
  const workspace = vue.ref();
@@ -3656,13 +3684,8 @@
3656
3684
  const _component_page_bar = vue.resolveComponent("page-bar");
3657
3685
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
3658
3686
  (vue.openBlock(), vue.createBlock(_component_magic_stage, {
3659
- key: _ctx.page?.id,
3660
- "runtime-url": _ctx.runtimeUrl,
3661
- "auto-scroll-into-view": _ctx.autoScrollIntoView,
3662
- render: _ctx.render,
3663
- "moveable-options": _ctx.moveableOptions,
3664
- "can-select": _ctx.canSelect
3665
- }, null, 8, ["runtime-url", "auto-scroll-into-view", "render", "moveable-options", "can-select"])),
3687
+ key: _ctx.page?.id
3688
+ })),
3666
3689
  vue.renderSlot(_ctx.$slots, "workspace-content"),
3667
3690
  vue.createVNode(_component_page_bar, null, {
3668
3691
  "page-bar-title": vue.withCtx(({ page }) => [
@@ -3831,6 +3854,14 @@
3831
3854
  sidebar: {
3832
3855
  type: Object
3833
3856
  },
3857
+ layerContentMenu: {
3858
+ type: Array,
3859
+ default: () => []
3860
+ },
3861
+ stageContentMenu: {
3862
+ type: Array,
3863
+ default: () => []
3864
+ },
3834
3865
  menu: {
3835
3866
  type: Object,
3836
3867
  default: () => ({ left: [], right: [] })
@@ -3853,13 +3884,17 @@
3853
3884
  default: () => ({})
3854
3885
  },
3855
3886
  moveableOptions: {
3856
- type: [Object, Function]
3887
+ type: [Object, Function],
3888
+ default: () => (core) => ({
3889
+ container: core?.renderer?.contentWindow?.document.getElementById("app")
3890
+ })
3857
3891
  },
3858
3892
  defaultSelected: {
3859
3893
  type: [Number, String]
3860
3894
  },
3861
3895
  canSelect: {
3862
- type: Function
3896
+ type: Function,
3897
+ default: (el) => Boolean(el.id)
3863
3898
  },
3864
3899
  stageRect: {
3865
3900
  type: [String, Object]
@@ -3867,6 +3902,9 @@
3867
3902
  codeOptions: {
3868
3903
  type: Object,
3869
3904
  default: () => ({})
3905
+ },
3906
+ updateDragEl: {
3907
+ type: Function
3870
3908
  }
3871
3909
  },
3872
3910
  emits: ["props-panel-mounted", "update:modelValue"],
@@ -3916,6 +3954,16 @@
3916
3954
  uiService
3917
3955
  };
3918
3956
  vue.provide("services", services);
3957
+ vue.provide("layerContentMenu", props.layerContentMenu);
3958
+ vue.provide("stageContentMenu", props.stageContentMenu);
3959
+ vue.provide("stageOptions", vue.reactive({
3960
+ runtimeUrl: props.runtimeUrl,
3961
+ autoScrollIntoView: props.autoScrollIntoView,
3962
+ render: props.render,
3963
+ moveableOptions: props.moveableOptions,
3964
+ canSelect: props.canSelect,
3965
+ updateDragEl: props.updateDragEl
3966
+ }));
3919
3967
  return services;
3920
3968
  }
3921
3969
  });
@@ -3938,13 +3986,7 @@
3938
3986
  ]),
3939
3987
  workspace: vue.withCtx(() => [
3940
3988
  vue.renderSlot(_ctx.$slots, "workspace", {}, () => [
3941
- vue.createVNode(_component_workspace, {
3942
- "runtime-url": _ctx.runtimeUrl,
3943
- "auto-scroll-into-view": _ctx.autoScrollIntoView,
3944
- render: _ctx.render,
3945
- "moveable-options": _ctx.moveableOptions,
3946
- "can-select": _ctx.canSelect
3947
- }, {
3989
+ vue.createVNode(_component_workspace, null, {
3948
3990
  "workspace-content": vue.withCtx(() => [
3949
3991
  vue.renderSlot(_ctx.$slots, "workspace-content", { editorService: _ctx.editorService })
3950
3992
  ]),
@@ -3955,7 +3997,7 @@
3955
3997
  vue.renderSlot(_ctx.$slots, "page-bar-popover", { page })
3956
3998
  ]),
3957
3999
  _: 3
3958
- }, 8, ["runtime-url", "auto-scroll-into-view", "render", "moveable-options", "can-select"])
4000
+ })
3959
4001
  ])
3960
4002
  ]),
3961
4003
  propsPanel: vue.withCtx(() => [
@@ -3974,7 +4016,7 @@
3974
4016
  }
3975
4017
  var Editor = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
3976
4018
 
3977
- var index$1 = '';
4019
+ var index$1 = /* #__PURE__ */ (() => ".m-editor-nav-menu {\n display: flex;\n z-index: 5;\n -webkit-box-pack: justify;\n justify-content: space-between;\n -webkit-box-align: center;\n align-items: center;\n background-color: #ffffff;\n font-size: 19.2px;\n color: #070303;\n font-weight: 400;\n box-sizing: border-box;\n margin: 0px;\n flex: 0 0 35px;\n border-bottom: 1px solid #d8dee8;\n}\n.m-editor-nav-menu > div {\n display: flex;\n height: 100%;\n z-index: 1;\n align-items: center;\n}\n.m-editor-nav-menu .menu-center {\n justify-content: center;\n}\n.m-editor-nav-menu .menu-right {\n justify-content: flex-end;\n}\n.m-editor-nav-menu .menu-item {\n flex-direction: row;\n -webkit-box-align: center;\n align-items: center;\n vertical-align: middle;\n font-size: 14px;\n line-height: 1;\n height: 100%;\n color: rgba(255, 255, 255, 0.7);\n box-sizing: inherit;\n z-index: 1;\n display: flex !important;\n transition: all 0.3s ease 0s;\n border-bottom: 2px solid transparent;\n margin: 0;\n}\n.m-editor-nav-menu .menu-item .is-disabled {\n opacity: 0.5;\n}\n.m-editor-nav-menu .menu-item .is-text {\n padding: 5px;\n}\n.m-editor-nav-menu .menu-item .is-text,\n.m-editor-nav-menu .menu-item i {\n color: #070303;\n}\n.m-editor-nav-menu .menu-item .icon {\n display: flex;\n -webkit-box-align: center;\n align-items: center;\n height: 100%;\n padding: 0px 8px;\n}\n.m-editor-nav-menu .menu-item .menu-item-text {\n color: #070303;\n}\n.m-editor {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n.m-editor-content {\n width: 100%;\n height: calc(100% - 35px);\n display: flex;\n justify-self: space-between;\n}\n.m-editor-framework-center {\n position: relative;\n transform: translateZ(0);\n flex: 1;\n}\n.m-editor-framework-left {\n background-color: #ffffff;\n}\n.m-editor-framework-center .el-scrollbar__view {\n height: 100%;\n min-height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.m-editor-empty-panel {\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n height: calc(100% - 32px);\n}\n.m-editor-empty-content {\n display: flex;\n justify-content: space-evenly;\n flex-direction: row;\n width: 100%;\n}\n.m-editor-empty-button {\n border: 3px solid rgba(0, 0, 0, 0.2);\n padding: 10px 40px;\n color: rgba(0, 0, 0, 0.6);\n cursor: pointer;\n}\n.m-editor-empty-button i {\n height: 180px;\n line-height: 180px;\n font-size: 100px;\n}\n.m-editor-empty-button p {\n text-align: center;\n font-size: 20px;\n margin-top: 5px;\n}\n.m-editor-empty-button:hover {\n border-color: #2882e0;\n color: #2882e0;\n}\n.m-editor-sidebar {\n height: 100%;\n}\n.m-editor-sidebar.el-tabs--left .el-tabs__header {\n background: #2882e0;\n border: 0;\n}\n.m-editor-sidebar.el-tabs--left .el-tabs__header.is-left {\n width: 40px;\n margin-right: 0;\n}\n.m-editor-sidebar.el-tabs--left .el-tabs__header .el-tabs__nav-wrap {\n margin: 0;\n}\n.m-editor-sidebar.el-tabs--left .el-tabs__header .el-tabs__nav {\n border: 0;\n border-radius: 0;\n}\n.m-editor-sidebar.el-tabs--left .el-tabs__header .tab-label {\n margin-left: 2px;\n}\n.m-editor-sidebar.el-tabs--left .el-tabs__header .el-tabs__item.is-left {\n line-height: 15px;\n border: 0;\n height: auto;\n padding: 8px;\n color: rgb(255, 255, 255);\n box-sizing: border-box;\n}\n.m-editor-sidebar.el-tabs--left .el-tabs__header .el-tabs__item.is-left.is-left.is-active {\n background: #ffffff;\n border: 0;\n}\n.m-editor-sidebar.el-tabs--left .el-tabs__header .el-tabs__item.is-left.is-left.is-active i {\n color: #353140;\n}\n.m-editor-sidebar.el-tabs--left .el-tabs__header .el-tabs__item.is-left.is-left.is-active .magic-editor-tab-panel-title {\n color: #353140;\n}\n.m-editor-sidebar.el-tabs--left .el-tabs__header .el-tabs__item.is-left.is-left:first-child {\n border-right: 0;\n}\n.m-editor-sidebar.el-tabs--left .el-tabs__header i {\n font-size: 25px;\n color: rgba(255, 255, 255, 0.6);\n}\n.m-editor-sidebar.el-tabs--left .el-tabs__header i:hover {\n color: rgb(255, 255, 255);\n}\n.m-editor-sidebar.el-tabs--left .el-tabs__header .magic-editor-tab-panel-title {\n font-size: 12px;\n white-space: normal;\n}\n.m-editor-sidebar .el-scrollbar {\n height: 100%;\n}\n.m-editor-sidebar .el-tree {\n min-height: 100%;\n}\n.m-editor-sidebar .fold-icon {\n position: absolute;\n bottom: 8px;\n left: 0px;\n width: 45px;\n padding-left: 8px;\n color: #fff;\n font-size: 32px;\n opacity: 0.8;\n cursor: pointer;\n}\n.m-editor-sidebar .fold-icon:hover {\n background: rgba(0, 0, 0, 0.2);\n}\n.m-editor-sidebar .el-tabs__content,\n.m-editor-sidebar .el-tab-pane {\n height: 100%;\n}\n.magic-editor-layer-panel {\n background: #ffffff;\n}\n.magic-editor-layer-panel .search-input {\n background: #ffffff;\n color: #bbbbbb;\n padding: 10px;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1;\n}\n.magic-editor-layer-panel .search-input .el-input__suffix {\n padding: 10px 5px;\n}\n.magic-editor-layer-panel .node-content {\n flex: 1;\n display: flex;\n width: 100%;\n}\n.magic-editor-layer-panel .node-content > div {\n width: 8px;\n}\n.magic-editor-layer-panel .node-content > span {\n width: calc(100% - 68px);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.magic-editor-layer-panel .node-content > i {\n margin-right: 10px;\n font-size: 20px;\n}\n.magic-editor-layer-panel .node-content > i.lock {\n color: #bbb;\n}\n.magic-editor-layer-panel,\n.magic-editor-layer-panel .el-tree {\n background-color: #ffffff;\n color: #313a40;\n}\n.magic-editor-layer-panel .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {\n background-color: #2882e0;\n color: #fff;\n}\n.magic-editor-layer-panel .cus-tree-node {\n width: 100%;\n overflow: hidden;\n}\n.magic-editor-layer-panel .cus-tree-node-hover {\n background-color: #f3f5f9;\n width: 100%;\n}\n.magic-editor-layer-panel .el-tree-node:focus > .el-tree-node__content {\n background-color: #2882e0;\n color: #fff;\n}\n.ui-tree-tip {\n width: 100%;\n height: 25px;\n margin-left: 10px;\n background: #ffffff;\n font-style: italic;\n color: #555554;\n position: absolute;\n top: 40px;\n left: 0;\n z-index: 1;\n}\n.ui-component-panel {\n height: 100%;\n border-top: 0 !important;\n margin-top: 50px;\n background-color: #ffffff;\n}\n.ui-component-panel .search-input {\n background: #f8fbff;\n color: #bbbbbb;\n padding: 10px;\n position: absolute;\n top: 0;\n left: 0;\n box-sizing: border-box;\n z-index: 1;\n}\n.ui-component-panel .search-input .el-input__prefix {\n padding: 10px;\n}\n.ui-component-panel .search-input .el-input__suffix {\n padding: 10px 5px;\n}\n.ui-component-panel .el-collapse-item > div:first-of-type {\n border-bottom: 1px solid #d9dbdd;\n margin-bottom: 10px;\n}\n.ui-component-panel .el-collapse-item__header {\n background: #ffffff;\n color: #070303;\n height: 25px;\n line-height: 25px;\n padding-left: 10px;\n font-size: 12px;\n}\n.ui-component-panel .el-collapse-item__header i {\n margin-right: 5px;\n font-size: 14px;\n}\n.ui-component-panel .el-collapse-item__wrap {\n background: #ffffff;\n border-bottom: 0;\n}\n.ui-component-panel .el-collapse-item__wrap .el-collapse-item__content {\n padding: 10px;\n display: flex;\n flex-wrap: wrap;\n}\n.ui-component-panel .el-collapse-item__wrap .component-item {\n display: flex;\n overflow: hidden;\n text-overflow: ellipsis;\n margin: 5px 10px;\n box-sizing: border-box;\n color: #070303;\n flex-direction: column;\n width: 42px;\n cursor: pointer;\n}\n.ui-component-panel .el-collapse-item__wrap .component-item i {\n font-size: 20px;\n background: #fff;\n height: 40px;\n width: 40px;\n line-height: 40px;\n border-radius: 5px;\n color: #909090;\n border: 1px solid #d9dbdd;\n display: flex;\n justify-content: space-evenly;\n align-items: center;\n margin-bottom: 5px;\n}\n.ui-component-panel .el-collapse-item__wrap .component-item i:hover {\n background: #2882e0;\n color: #fff;\n border-color: #4e8be1;\n}\n.ui-component-panel .el-collapse-item__wrap .component-item span {\n font-size: 12px;\n text-align: center;\n}\n.ui-component-panel .el-collapse-item__wrap .component-item .el-tooltip {\n width: 50px;\n height: 30px;\n line-height: 15px;\n display: block;\n white-space: normal;\n margin: 0;\n}\n.m-editor-resizer {\n border-left: 1px solid transparent;\n border-right: 1px solid transparent;\n width: 8px;\n margin: 0 -5px;\n height: 100%;\n opacity: 0.9;\n background: padding-box #d8dee8;\n box-sizing: border-box;\n cursor: col-resize;\n z-index: 1;\n}\n.m-editor-resizer:hover {\n border-color: #d8dee8;\n}\n.m-editor-resizer .icon-container {\n visibility: hidden;\n opacity: 0;\n transition: opacity 0.4s;\n width: 20px;\n height: 120px;\n line-height: 120px;\n text-align: center;\n background: #d8dee8;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n cursor: pointer;\n}\n.m-editor-resizer .icon-container.position-left {\n transform: translate(calc(-100% - 4px), -50%);\n}\n.m-editor-resizer .icon-container.position-right {\n transform: translate(calc(100% + 4px), -50%);\n}\n.m-editor-resizer .icon {\n color: #fff;\n font-size: 18px;\n}\n.magic-editor-resizer:hover .icon-container {\n visibility: visible;\n opacity: 1;\n}\n.m-editor-workspace {\n height: 100%;\n width: 100%;\n user-select: none;\n}\n.m-editor-workspace:focus-visible {\n outline: 0;\n}\n.m-editor-page-bar {\n position: fixed;\n bottom: 0;\n left: 0;\n display: flex;\n width: 100%;\n height: 32px;\n line-height: 32px;\n color: #070303;\n background-color: #f3f3f3;\n border-top: 1px solid #d9dbdd;\n z-index: 2;\n overflow: hidden;\n}\n.m-editor-page-bar-items {\n display: flex;\n transition: transform 0.3s;\n}\n.m-editor-page-bar-item {\n padding: 0 10px;\n cursor: pointer;\n border-right: 1px solid #d9dbdd;\n display: flex;\n justify-items: center;\n align-items: center;\n background-color: #f3f3f3;\n}\n.m-editor-page-bar-item.active {\n background-color: #fff;\n cursor: text;\n}\n.m-editor-page-bar-item.active .m-editor-page-bar-menu-icon {\n cursor: pointer;\n}\n.m-editor-page-bar-item-icon {\n position: relative;\n z-index: 1;\n}\n.m-editor-page-bar-item-title {\n max-width: 150px;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n.page-bar-popover.el-popper.el-popover {\n padding: 10px 0;\n}\n.page-bar-popover .menu-item {\n cursor: pointer;\n transition: all 0.2s ease 0s;\n padding: 5px 14px;\n}\n.page-bar-popover .menu-item .el-button--text,\n.page-bar-popover .menu-item i {\n color: #070303;\n}\n.page-bar-popover .menu-item:hover {\n background-color: #f3f5f9;\n}\n.m-editor-props-panel {\n padding: 0 10px;\n}\n.m-editor-props-panel.small .el-form-item__label {\n font-size: 12px;\n}\n.m-editor-props-panel.small .m-fieldset legend {\n font-size: 12px;\n}\n.m-editor-props-panel.small .el-tabs__item {\n font-size: 12px;\n}\n.m-editor-props-panel .el-input__wrapper {\n border-radius: 0;\n}\n.m-editor-props-panel-popper.small span,\n.m-editor-props-panel-popper.small a,\n.m-editor-props-panel-popper.small p {\n font-size: 12px;\n}\n.magic-editor-content-menu {\n position: fixed;\n font-size: 12px;\n background: #fff;\n box-shadow: 0 2px 8px 2px rgba(68, 73, 77, 0.16);\n z-index: 9999;\n transform-origin: 0% 0%;\n font-weight: 600;\n padding: 4px 0px;\n overflow: auto;\n max-height: 100%;\n}\n.magic-editor-content-menu .menu-item {\n color: #333;\n display: flex;\n -webkit-box-align: center;\n align-items: center;\n cursor: pointer;\n min-width: 140px;\n transition: all 0.2s ease 0s;\n padding: 5px 14px;\n border-left: 2px solid transparent;\n}\n.magic-editor-content-menu .menu-item .el-button {\n width: 100%;\n justify-content: flex-start;\n}\n.magic-editor-content-menu .menu-item .el-button--text,\n.magic-editor-content-menu .menu-item i {\n color: #070303;\n}\n.magic-editor-content-menu .menu-item.divider {\n padding: 0 14px;\n}\n.magic-editor-content-menu .menu-item.divider .el-divider {\n margin: 0;\n}\n.magic-editor-content-menu .menu-item:hover {\n background-color: #f3f5f9;\n}\n.m-editor-stage {\n position: relative;\n width: 100%;\n height: calc(100% - 32px);\n overflow: hidden;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.m-editor-stage-container {\n width: 100%;\n height: 100%;\n z-index: 0;\n position: relative;\n border: 1px solid #d9dbdd;\n transition: transform 0.3s;\n box-sizing: content-box;\n}\n.m-editor-stage-container::-webkit-scrollbar {\n width: 0 !important;\n}\n.magic-code-editor {\n width: 100%;\n}\n.magic-code-editor .margin {\n margin: 0;\n}")();
3978
4020
 
3979
4021
  const defaultInstallOpt = {};
3980
4022
  var index = {
@@ -4009,7 +4051,6 @@
4009
4051
  exports.error = error;
4010
4052
  exports.eventsService = eventsService;
4011
4053
  exports.fillConfig = fillConfig;
4012
- exports.generateId = generateId;
4013
4054
  exports.generatePageName = generatePageName;
4014
4055
  exports.generatePageNameByApp = generatePageNameByApp;
4015
4056
  exports.getConfig = getConfig;
@@ -4025,7 +4066,6 @@
4025
4066
  exports.propsService = propsService;
4026
4067
  exports.setConfig = setConfig;
4027
4068
  exports.setLayout = setLayout;
4028
- exports.setNewItemId = setNewItemId;
4029
4069
  exports.toRelative = toRelative;
4030
4070
  exports.uiService = uiService;
4031
4071
  exports.warn = warn;