@tmagic/stage 1.4.15 → 1.5.0-beta.0

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.
@@ -1,8 +1,8 @@
1
1
  import EventEmitter, { EventEmitter as EventEmitter$1 } from 'events';
2
+ import { removeClassName, guid, setIdToEl, getIdFromEl, getElById, calcValueByFontsize, addClassName, removeClassNameByClassName, getDocument, createDiv, injectStyle, isSameDomain, getHost } from '@tmagic/utils';
2
3
  import KeyController from 'keycon';
3
4
  import { merge, throttle } from 'lodash-es';
4
5
  import { Env } from '@tmagic/core';
5
- import { removeClassName, guid, calcValueByFontsize, addClassName, removeClassNameByClassName, getDocument, createDiv, injectStyle, isSameDomain, getHost } from '@tmagic/utils';
6
6
  import MoveableHelper from 'moveable-helper';
7
7
  import Moveable from 'moveable';
8
8
  import Guides from '@scena/guides';
@@ -305,7 +305,7 @@ class TargetShadow {
305
305
  }
306
306
  updateEl(target, src) {
307
307
  const el = src || globalThis.document.createElement("div");
308
- el.id = `${this.idPrefix}_${target.id}`;
308
+ setIdToEl()(el, `${this.idPrefix}_${getIdFromEl()(target)}`);
309
309
  el.style.cssText = getTargetElStyle(target, this.zIndex);
310
310
  if (typeof this.updateDragEl === "function") {
311
311
  this.updateDragEl(el, target, this.container);
@@ -317,7 +317,7 @@ class TargetShadow {
317
317
  } else if (!isFixed && mode === Mode.FIXED) {
318
318
  el.style.transform = `translate3d(${-this.scrollLeft}px, ${-this.scrollTop}px, 0)`;
319
319
  }
320
- if (!globalThis.document.getElementById(el.id)) {
320
+ if (!getElById()(globalThis.document, getIdFromEl()(el))) {
321
321
  this.container.append(el);
322
322
  }
323
323
  return el;
@@ -328,6 +328,7 @@ class TargetShadow {
328
328
  };
329
329
  }
330
330
 
331
+ const getId = getIdFromEl();
331
332
  class DragResizeHelper {
332
333
  /** 目标节点在蒙层上的占位节点,用于跟鼠标交互,避免鼠标事件直接作用到目标节点 */
333
334
  targetShadow;
@@ -485,14 +486,14 @@ class DragResizeHelper {
485
486
  events.forEach((ev) => {
486
487
  const { width, height, beforeTranslate } = ev.drag;
487
488
  const frameSnapShot = this.framesSnapShot.find(
488
- (frameItem) => frameItem.id === ev.target.id.replace(DRAG_EL_ID_PREFIX, "")
489
+ (frameItem) => frameItem.id === getId(ev.target)?.replace(DRAG_EL_ID_PREFIX, "")
489
490
  );
490
491
  if (!frameSnapShot) return;
491
492
  const targeEl = this.targetList.find(
492
- (targetItem) => targetItem.id === ev.target.id.replace(DRAG_EL_ID_PREFIX, "")
493
+ (targetItem) => targetItem.id === getId(ev.target)?.replace(DRAG_EL_ID_PREFIX, "")
493
494
  );
494
495
  if (!targeEl) return;
495
- const isParentIncluded = this.targetList.find((targetItem) => targetItem.id === targeEl.parentElement?.id);
496
+ const isParentIncluded = this.targetList.find((targetItem) => getId(targetItem) === getId(targeEl.parentElement));
496
497
  if (!isParentIncluded) {
497
498
  const { marginLeft, marginTop } = getMarginValue(targeEl);
498
499
  targeEl.style.left = `${frameSnapShot.left + beforeTranslate[0] - marginLeft}px`;
@@ -512,14 +513,14 @@ class DragResizeHelper {
512
513
  const { events } = e;
513
514
  events.forEach((ev) => {
514
515
  const frameSnapShot = this.framesSnapShot.find(
515
- (frameItem) => ev.target.id.startsWith(DRAG_EL_ID_PREFIX) && ev.target.id.endsWith(frameItem.id)
516
+ (frameItem) => getId(ev.target)?.startsWith(DRAG_EL_ID_PREFIX) && getId(ev.target)?.endsWith(frameItem.id)
516
517
  );
517
518
  if (!frameSnapShot) return;
518
519
  const targeEl = this.targetList.find(
519
- (targetItem) => ev.target.id.startsWith(DRAG_EL_ID_PREFIX) && ev.target.id.endsWith(targetItem.id)
520
+ (targetItem) => getId(ev.target)?.startsWith(DRAG_EL_ID_PREFIX) && getId(targetItem) && getId(ev.target)?.endsWith(getId(targetItem))
520
521
  );
521
522
  if (!targeEl) return;
522
- const isParentIncluded = this.targetList.find((targetItem) => targetItem.id === targeEl.parentElement?.id);
523
+ const isParentIncluded = this.targetList.find((targetItem) => getId(targetItem) === getId(targeEl.parentElement));
523
524
  if (!isParentIncluded) {
524
525
  const { marginLeft, marginTop } = getMarginValue(targeEl);
525
526
  targeEl.style.left = `${frameSnapShot.left + ev.beforeTranslate[0] - marginLeft}px`;
@@ -538,7 +539,7 @@ class DragResizeHelper {
538
539
  let shadowEl = this.getShadowEl();
539
540
  const shadowEls = this.getShadowEls();
540
541
  if (shadowEls.length) {
541
- shadowEl = shadowEls.find((item) => item.id.endsWith(el.id));
542
+ shadowEl = shadowEls.find((item) => getId(item)?.endsWith(getId(el) || ""));
542
543
  }
543
544
  if (parentEl && this.mode === Mode.ABSOLUTE && shadowEl) {
544
545
  const targetShadowHtmlEl = shadowEl;
@@ -559,13 +560,14 @@ class DragResizeHelper {
559
560
  if (this.framesSnapShot.length > 0) return;
560
561
  events.forEach((ev) => {
561
562
  const matchEventTarget = this.targetList.find(
562
- (targetItem) => ev.target.id.startsWith(DRAG_EL_ID_PREFIX) && ev.target.id.endsWith(targetItem.id)
563
+ (targetItem) => getId(ev.target)?.startsWith(DRAG_EL_ID_PREFIX) && getId(ev.target)?.endsWith(getId(targetItem) || "")
563
564
  );
564
565
  if (!matchEventTarget) return;
565
- this.framesSnapShot.push({
566
+ const id = getId(matchEventTarget);
567
+ id && this.framesSnapShot.push({
566
568
  left: matchEventTarget.offsetLeft,
567
569
  top: matchEventTarget.offsetTop,
568
- id: matchEventTarget.id
570
+ id
569
571
  });
570
572
  });
571
573
  }
@@ -579,7 +581,7 @@ class DragResizeHelper {
579
581
  const ghostEl = el.cloneNode(true);
580
582
  this.setGhostElChildrenId(ghostEl);
581
583
  const { top, left } = getAbsolutePosition(el, getOffset(el));
582
- ghostEl.id = `${GHOST_EL_ID_PREFIX}${el.id}`;
584
+ setIdToEl()(ghostEl, `${GHOST_EL_ID_PREFIX}${getId(el)}`);
583
585
  ghostEl.style.zIndex = ZIndex.GHOST_EL;
584
586
  ghostEl.style.opacity = ".5";
585
587
  ghostEl.style.position = "absolute";
@@ -592,8 +594,10 @@ class DragResizeHelper {
592
594
  }
593
595
  setGhostElChildrenId(el) {
594
596
  for (const child of Array.from(el.children)) {
595
- if (child.id) {
596
- child.id = `${GHOST_EL_ID_PREFIX}${child.id}`;
597
+ const el2 = child;
598
+ const id = getId(el2);
599
+ if (id) {
600
+ setIdToEl()(el2, `${GHOST_EL_ID_PREFIX}${id}`);
597
601
  }
598
602
  if (child.children.length) {
599
603
  this.setGhostElChildrenId(child);
@@ -1123,9 +1127,10 @@ class StageDragResize extends MoveableOptionsManager {
1123
1127
  this.emit("sort", up(deltaTop, this.target));
1124
1128
  }
1125
1129
  } else {
1126
- this.emit("sort", {
1127
- src: this.target.id,
1128
- dist: this.target.id
1130
+ const id = getIdFromEl()(this.target);
1131
+ id && this.emit("sort", {
1132
+ src: id,
1133
+ dist: id
1129
1134
  });
1130
1135
  }
1131
1136
  }
@@ -1285,7 +1290,8 @@ class StageMultiDragResize extends MoveableOptionsManager {
1285
1290
  }).on("clickGroup", (e) => {
1286
1291
  const { inputTarget, targets } = e;
1287
1292
  if (targets.length > 1 && targets.includes(inputTarget)) {
1288
- this.emit("change-to-select", inputTarget.id.replace(DRAG_EL_ID_PREFIX, ""), e.inputEvent);
1293
+ const id = getIdFromEl()(inputTarget)?.replace(DRAG_EL_ID_PREFIX, "");
1294
+ id && this.emit("change-to-select", id, e.inputEvent);
1289
1295
  }
1290
1296
  });
1291
1297
  }
@@ -1395,12 +1401,13 @@ class ActionManager extends EventEmitter {
1395
1401
  return;
1396
1402
  }
1397
1403
  const el = await this.getElementFromPoint(event);
1398
- if (!el) {
1404
+ const id = getIdFromEl()(el);
1405
+ if (!id) {
1399
1406
  this.clearHighlight();
1400
1407
  return;
1401
1408
  }
1402
1409
  this.emit("mousemove", event);
1403
- this.highlight(el.id);
1410
+ this.highlight(id);
1404
1411
  }, throttleTime);
1405
1412
  constructor(config) {
1406
1413
  super();
@@ -1412,7 +1419,7 @@ class ActionManager extends EventEmitter {
1412
1419
  this.disabledMultiSelect = config.disabledMultiSelect ?? false;
1413
1420
  this.getTargetElement = config.getTargetElement;
1414
1421
  this.getElementsFromPoint = config.getElementsFromPoint;
1415
- this.canSelect = config.canSelect || ((el) => !!el.id);
1422
+ this.canSelect = config.canSelect || ((el) => Boolean(getIdFromEl()(el)));
1416
1423
  this.getRenderDocument = config.getRenderDocument;
1417
1424
  this.isContainer = config.isContainer;
1418
1425
  this.dr = this.createDr(config);
@@ -1468,7 +1475,7 @@ class ActionManager extends EventEmitter {
1468
1475
  * 判断是否单选选中的元素
1469
1476
  */
1470
1477
  isSelectedEl(el) {
1471
- return el.id === this.selectedEl?.id;
1478
+ return getIdFromEl()(el) === getIdFromEl()(this.selectedEl);
1472
1479
  }
1473
1480
  setSelectedEl(el) {
1474
1481
  this.selectedEl = el;
@@ -1498,7 +1505,7 @@ class ActionManager extends EventEmitter {
1498
1505
  let stopped = false;
1499
1506
  const stop = () => stopped = true;
1500
1507
  for (const el of els) {
1501
- if (!el.id.startsWith(GHOST_EL_ID_PREFIX) && await this.isElCanSelect(el, event, stop)) {
1508
+ if (!getIdFromEl()(el)?.startsWith(GHOST_EL_ID_PREFIX) && await this.isElCanSelect(el, event, stop)) {
1502
1509
  if (stopped) break;
1503
1510
  return el;
1504
1511
  }
@@ -1599,7 +1606,7 @@ class ActionManager extends EventEmitter {
1599
1606
  if (!doc) return;
1600
1607
  const els = this.getElementsFromPoint(event);
1601
1608
  for (const el of els) {
1602
- if (!el.id.startsWith(GHOST_EL_ID_PREFIX) && await this.isContainer?.(el) && !excludeElList.includes(el)) {
1609
+ if (!getIdFromEl()(el)?.startsWith(GHOST_EL_ID_PREFIX) && await this.isContainer?.(el) && !excludeElList.includes(el)) {
1603
1610
  addClassName(el, doc, this.containerHighlightClassName);
1604
1611
  break;
1605
1612
  }
@@ -1700,9 +1707,9 @@ class ActionManager extends EventEmitter {
1700
1707
  if (typeof options === "function") {
1701
1708
  const cfg = {
1702
1709
  targetEl: this.selectedEl,
1703
- targetElId: this.selectedEl?.id,
1710
+ targetElId: getIdFromEl()(this.selectedEl),
1704
1711
  targetEls: this.selectedElList,
1705
- targetElIds: this.selectedElList?.map((item) => item.id),
1712
+ targetElIds: this.selectedElList?.map((item) => getIdFromEl()(item) || ""),
1706
1713
  isMulti,
1707
1714
  document: this.getRenderDocument()
1708
1715
  };
@@ -1725,7 +1732,7 @@ class ActionManager extends EventEmitter {
1725
1732
  this.selectedElList.push(this.selectedEl);
1726
1733
  this.setSelectedEl(null);
1727
1734
  }
1728
- const existIndex = this.selectedElList.findIndex((selectedDom) => selectedDom.id === el.id);
1735
+ const existIndex = this.selectedElList.findIndex((selectedDom) => getIdFromEl()(selectedDom) === getIdFromEl()(el));
1729
1736
  if (existIndex !== -1) {
1730
1737
  if (this.selectedElList.length > 1) {
1731
1738
  this.selectedElList.splice(existIndex, 1);
@@ -2352,7 +2359,7 @@ class StageRender extends EventEmitter$1 {
2352
2359
  return this.getDocument()?.elementsFromPoint(x / this.zoom, y / this.zoom);
2353
2360
  }
2354
2361
  getTargetElement(id) {
2355
- return this.getDocument()?.getElementById(`${id}`) || null;
2362
+ return getElById()(this.getDocument(), id);
2356
2363
  }
2357
2364
  /**
2358
2365
  * 销毁实例
@@ -2662,11 +2669,12 @@ class StageCore extends EventEmitter$1 {
2662
2669
  */
2663
2670
  initActionManagerEvent() {
2664
2671
  this.actionManager.on("before-select", (el, event) => {
2665
- this.select(el.id, event);
2672
+ const id = getIdFromEl()(el);
2673
+ id && this.select(id, event);
2666
2674
  }).on("select", (selectedEl, event) => {
2667
2675
  this.emit("select", selectedEl, event);
2668
2676
  }).on("before-multi-select", (els) => {
2669
- this.multiSelect(els.map((el) => el.id));
2677
+ this.multiSelect(els.map((el) => getIdFromEl()(el)).filter((id) => Boolean(id)));
2670
2678
  }).on("multi-select", (selectedElList, event) => {
2671
2679
  this.emit("multi-select", selectedElList, event);
2672
2680
  }).on("dblclick", (event) => {
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('events'), require('keycon'), require('lodash-es'), require('@tmagic/core'), require('@tmagic/utils'), require('moveable-helper'), require('moveable'), require('@scena/guides')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'events', 'keycon', 'lodash-es', '@tmagic/core', '@tmagic/utils', 'moveable-helper', 'moveable', '@scena/guides'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.TMagicStage = {}, global.EventEmitter, global.KeyController, global.lodashEs, global.core, global.utils, global.MoveableHelper, global.Moveable, global.Guides));
5
- })(this, (function (exports, EventEmitter, KeyController, lodashEs, core, utils, MoveableHelper, Moveable, Guides) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('events'), require('@tmagic/utils'), require('keycon'), require('lodash-es'), require('@tmagic/core'), require('moveable-helper'), require('moveable'), require('@scena/guides')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'events', '@tmagic/utils', 'keycon', 'lodash-es', '@tmagic/core', 'moveable-helper', 'moveable', '@scena/guides'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.TMagicStage = {}, global.EventEmitter, global.utils, global.KeyController, global.lodashEs, global.core, global.MoveableHelper, global.Moveable, global.Guides));
5
+ })(this, (function (exports, EventEmitter, utils, KeyController, lodashEs, core, MoveableHelper, Moveable, Guides) { 'use strict';
6
6
 
7
7
  const GHOST_EL_ID_PREFIX = "ghost_el_";
8
8
  const DRAG_EL_ID_PREFIX = "drag_el_";
@@ -302,7 +302,7 @@
302
302
  }
303
303
  updateEl(target, src) {
304
304
  const el = src || globalThis.document.createElement("div");
305
- el.id = `${this.idPrefix}_${target.id}`;
305
+ utils.setIdToEl()(el, `${this.idPrefix}_${utils.getIdFromEl()(target)}`);
306
306
  el.style.cssText = getTargetElStyle(target, this.zIndex);
307
307
  if (typeof this.updateDragEl === "function") {
308
308
  this.updateDragEl(el, target, this.container);
@@ -314,7 +314,7 @@
314
314
  } else if (!isFixed && mode === Mode.FIXED) {
315
315
  el.style.transform = `translate3d(${-this.scrollLeft}px, ${-this.scrollTop}px, 0)`;
316
316
  }
317
- if (!globalThis.document.getElementById(el.id)) {
317
+ if (!utils.getElById()(globalThis.document, utils.getIdFromEl()(el))) {
318
318
  this.container.append(el);
319
319
  }
320
320
  return el;
@@ -325,6 +325,7 @@
325
325
  };
326
326
  }
327
327
 
328
+ const getId = utils.getIdFromEl();
328
329
  class DragResizeHelper {
329
330
  /** 目标节点在蒙层上的占位节点,用于跟鼠标交互,避免鼠标事件直接作用到目标节点 */
330
331
  targetShadow;
@@ -482,14 +483,14 @@
482
483
  events.forEach((ev) => {
483
484
  const { width, height, beforeTranslate } = ev.drag;
484
485
  const frameSnapShot = this.framesSnapShot.find(
485
- (frameItem) => frameItem.id === ev.target.id.replace(DRAG_EL_ID_PREFIX, "")
486
+ (frameItem) => frameItem.id === getId(ev.target)?.replace(DRAG_EL_ID_PREFIX, "")
486
487
  );
487
488
  if (!frameSnapShot) return;
488
489
  const targeEl = this.targetList.find(
489
- (targetItem) => targetItem.id === ev.target.id.replace(DRAG_EL_ID_PREFIX, "")
490
+ (targetItem) => targetItem.id === getId(ev.target)?.replace(DRAG_EL_ID_PREFIX, "")
490
491
  );
491
492
  if (!targeEl) return;
492
- const isParentIncluded = this.targetList.find((targetItem) => targetItem.id === targeEl.parentElement?.id);
493
+ const isParentIncluded = this.targetList.find((targetItem) => getId(targetItem) === getId(targeEl.parentElement));
493
494
  if (!isParentIncluded) {
494
495
  const { marginLeft, marginTop } = getMarginValue(targeEl);
495
496
  targeEl.style.left = `${frameSnapShot.left + beforeTranslate[0] - marginLeft}px`;
@@ -509,14 +510,14 @@
509
510
  const { events } = e;
510
511
  events.forEach((ev) => {
511
512
  const frameSnapShot = this.framesSnapShot.find(
512
- (frameItem) => ev.target.id.startsWith(DRAG_EL_ID_PREFIX) && ev.target.id.endsWith(frameItem.id)
513
+ (frameItem) => getId(ev.target)?.startsWith(DRAG_EL_ID_PREFIX) && getId(ev.target)?.endsWith(frameItem.id)
513
514
  );
514
515
  if (!frameSnapShot) return;
515
516
  const targeEl = this.targetList.find(
516
- (targetItem) => ev.target.id.startsWith(DRAG_EL_ID_PREFIX) && ev.target.id.endsWith(targetItem.id)
517
+ (targetItem) => getId(ev.target)?.startsWith(DRAG_EL_ID_PREFIX) && getId(targetItem) && getId(ev.target)?.endsWith(getId(targetItem))
517
518
  );
518
519
  if (!targeEl) return;
519
- const isParentIncluded = this.targetList.find((targetItem) => targetItem.id === targeEl.parentElement?.id);
520
+ const isParentIncluded = this.targetList.find((targetItem) => getId(targetItem) === getId(targeEl.parentElement));
520
521
  if (!isParentIncluded) {
521
522
  const { marginLeft, marginTop } = getMarginValue(targeEl);
522
523
  targeEl.style.left = `${frameSnapShot.left + ev.beforeTranslate[0] - marginLeft}px`;
@@ -535,7 +536,7 @@
535
536
  let shadowEl = this.getShadowEl();
536
537
  const shadowEls = this.getShadowEls();
537
538
  if (shadowEls.length) {
538
- shadowEl = shadowEls.find((item) => item.id.endsWith(el.id));
539
+ shadowEl = shadowEls.find((item) => getId(item)?.endsWith(getId(el) || ""));
539
540
  }
540
541
  if (parentEl && this.mode === Mode.ABSOLUTE && shadowEl) {
541
542
  const targetShadowHtmlEl = shadowEl;
@@ -556,13 +557,14 @@
556
557
  if (this.framesSnapShot.length > 0) return;
557
558
  events.forEach((ev) => {
558
559
  const matchEventTarget = this.targetList.find(
559
- (targetItem) => ev.target.id.startsWith(DRAG_EL_ID_PREFIX) && ev.target.id.endsWith(targetItem.id)
560
+ (targetItem) => getId(ev.target)?.startsWith(DRAG_EL_ID_PREFIX) && getId(ev.target)?.endsWith(getId(targetItem) || "")
560
561
  );
561
562
  if (!matchEventTarget) return;
562
- this.framesSnapShot.push({
563
+ const id = getId(matchEventTarget);
564
+ id && this.framesSnapShot.push({
563
565
  left: matchEventTarget.offsetLeft,
564
566
  top: matchEventTarget.offsetTop,
565
- id: matchEventTarget.id
567
+ id
566
568
  });
567
569
  });
568
570
  }
@@ -576,7 +578,7 @@
576
578
  const ghostEl = el.cloneNode(true);
577
579
  this.setGhostElChildrenId(ghostEl);
578
580
  const { top, left } = getAbsolutePosition(el, getOffset(el));
579
- ghostEl.id = `${GHOST_EL_ID_PREFIX}${el.id}`;
581
+ utils.setIdToEl()(ghostEl, `${GHOST_EL_ID_PREFIX}${getId(el)}`);
580
582
  ghostEl.style.zIndex = ZIndex.GHOST_EL;
581
583
  ghostEl.style.opacity = ".5";
582
584
  ghostEl.style.position = "absolute";
@@ -589,8 +591,10 @@
589
591
  }
590
592
  setGhostElChildrenId(el) {
591
593
  for (const child of Array.from(el.children)) {
592
- if (child.id) {
593
- child.id = `${GHOST_EL_ID_PREFIX}${child.id}`;
594
+ const el2 = child;
595
+ const id = getId(el2);
596
+ if (id) {
597
+ utils.setIdToEl()(el2, `${GHOST_EL_ID_PREFIX}${id}`);
594
598
  }
595
599
  if (child.children.length) {
596
600
  this.setGhostElChildrenId(child);
@@ -1120,9 +1124,10 @@
1120
1124
  this.emit("sort", up(deltaTop, this.target));
1121
1125
  }
1122
1126
  } else {
1123
- this.emit("sort", {
1124
- src: this.target.id,
1125
- dist: this.target.id
1127
+ const id = utils.getIdFromEl()(this.target);
1128
+ id && this.emit("sort", {
1129
+ src: id,
1130
+ dist: id
1126
1131
  });
1127
1132
  }
1128
1133
  }
@@ -1282,7 +1287,8 @@
1282
1287
  }).on("clickGroup", (e) => {
1283
1288
  const { inputTarget, targets } = e;
1284
1289
  if (targets.length > 1 && targets.includes(inputTarget)) {
1285
- this.emit("change-to-select", inputTarget.id.replace(DRAG_EL_ID_PREFIX, ""), e.inputEvent);
1290
+ const id = utils.getIdFromEl()(inputTarget)?.replace(DRAG_EL_ID_PREFIX, "");
1291
+ id && this.emit("change-to-select", id, e.inputEvent);
1286
1292
  }
1287
1293
  });
1288
1294
  }
@@ -1392,12 +1398,13 @@
1392
1398
  return;
1393
1399
  }
1394
1400
  const el = await this.getElementFromPoint(event);
1395
- if (!el) {
1401
+ const id = utils.getIdFromEl()(el);
1402
+ if (!id) {
1396
1403
  this.clearHighlight();
1397
1404
  return;
1398
1405
  }
1399
1406
  this.emit("mousemove", event);
1400
- this.highlight(el.id);
1407
+ this.highlight(id);
1401
1408
  }, throttleTime);
1402
1409
  constructor(config) {
1403
1410
  super();
@@ -1409,7 +1416,7 @@
1409
1416
  this.disabledMultiSelect = config.disabledMultiSelect ?? false;
1410
1417
  this.getTargetElement = config.getTargetElement;
1411
1418
  this.getElementsFromPoint = config.getElementsFromPoint;
1412
- this.canSelect = config.canSelect || ((el) => !!el.id);
1419
+ this.canSelect = config.canSelect || ((el) => Boolean(utils.getIdFromEl()(el)));
1413
1420
  this.getRenderDocument = config.getRenderDocument;
1414
1421
  this.isContainer = config.isContainer;
1415
1422
  this.dr = this.createDr(config);
@@ -1465,7 +1472,7 @@
1465
1472
  * 判断是否单选选中的元素
1466
1473
  */
1467
1474
  isSelectedEl(el) {
1468
- return el.id === this.selectedEl?.id;
1475
+ return utils.getIdFromEl()(el) === utils.getIdFromEl()(this.selectedEl);
1469
1476
  }
1470
1477
  setSelectedEl(el) {
1471
1478
  this.selectedEl = el;
@@ -1495,7 +1502,7 @@
1495
1502
  let stopped = false;
1496
1503
  const stop = () => stopped = true;
1497
1504
  for (const el of els) {
1498
- if (!el.id.startsWith(GHOST_EL_ID_PREFIX) && await this.isElCanSelect(el, event, stop)) {
1505
+ if (!utils.getIdFromEl()(el)?.startsWith(GHOST_EL_ID_PREFIX) && await this.isElCanSelect(el, event, stop)) {
1499
1506
  if (stopped) break;
1500
1507
  return el;
1501
1508
  }
@@ -1596,7 +1603,7 @@
1596
1603
  if (!doc) return;
1597
1604
  const els = this.getElementsFromPoint(event);
1598
1605
  for (const el of els) {
1599
- if (!el.id.startsWith(GHOST_EL_ID_PREFIX) && await this.isContainer?.(el) && !excludeElList.includes(el)) {
1606
+ if (!utils.getIdFromEl()(el)?.startsWith(GHOST_EL_ID_PREFIX) && await this.isContainer?.(el) && !excludeElList.includes(el)) {
1600
1607
  utils.addClassName(el, doc, this.containerHighlightClassName);
1601
1608
  break;
1602
1609
  }
@@ -1697,9 +1704,9 @@
1697
1704
  if (typeof options === "function") {
1698
1705
  const cfg = {
1699
1706
  targetEl: this.selectedEl,
1700
- targetElId: this.selectedEl?.id,
1707
+ targetElId: utils.getIdFromEl()(this.selectedEl),
1701
1708
  targetEls: this.selectedElList,
1702
- targetElIds: this.selectedElList?.map((item) => item.id),
1709
+ targetElIds: this.selectedElList?.map((item) => utils.getIdFromEl()(item) || ""),
1703
1710
  isMulti,
1704
1711
  document: this.getRenderDocument()
1705
1712
  };
@@ -1722,7 +1729,7 @@
1722
1729
  this.selectedElList.push(this.selectedEl);
1723
1730
  this.setSelectedEl(null);
1724
1731
  }
1725
- const existIndex = this.selectedElList.findIndex((selectedDom) => selectedDom.id === el.id);
1732
+ const existIndex = this.selectedElList.findIndex((selectedDom) => utils.getIdFromEl()(selectedDom) === utils.getIdFromEl()(el));
1726
1733
  if (existIndex !== -1) {
1727
1734
  if (this.selectedElList.length > 1) {
1728
1735
  this.selectedElList.splice(existIndex, 1);
@@ -2349,7 +2356,7 @@
2349
2356
  return this.getDocument()?.elementsFromPoint(x / this.zoom, y / this.zoom);
2350
2357
  }
2351
2358
  getTargetElement(id) {
2352
- return this.getDocument()?.getElementById(`${id}`) || null;
2359
+ return utils.getElById()(this.getDocument(), id);
2353
2360
  }
2354
2361
  /**
2355
2362
  * 销毁实例
@@ -2659,11 +2666,12 @@
2659
2666
  */
2660
2667
  initActionManagerEvent() {
2661
2668
  this.actionManager.on("before-select", (el, event) => {
2662
- this.select(el.id, event);
2669
+ const id = utils.getIdFromEl()(el);
2670
+ id && this.select(id, event);
2663
2671
  }).on("select", (selectedEl, event) => {
2664
2672
  this.emit("select", selectedEl, event);
2665
2673
  }).on("before-multi-select", (els) => {
2666
- this.multiSelect(els.map((el) => el.id));
2674
+ this.multiSelect(els.map((el) => utils.getIdFromEl()(el)).filter((id) => Boolean(id)));
2667
2675
  }).on("multi-select", (selectedElList, event) => {
2668
2676
  this.emit("multi-select", selectedElList, event);
2669
2677
  }).on("dblclick", (event) => {
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.4.15",
2
+ "version": "1.5.0-beta.0",
3
3
  "name": "@tmagic/stage",
4
4
  "type": "module",
5
5
  "main": "dist/tmagic-stage.umd.cjs",
@@ -32,7 +32,8 @@
32
32
  "keycon": "^1.4.0",
33
33
  "lodash-es": "^4.17.21",
34
34
  "moveable": "^0.53.0",
35
- "moveable-helper": "^0.4.0"
35
+ "moveable-helper": "^0.4.0",
36
+ "scenejs": "^1.10.3"
36
37
  },
37
38
  "devDependencies": {
38
39
  "@types/events": "^3.0.0",
@@ -40,13 +41,13 @@
40
41
  "@types/node": "^18.19.0",
41
42
  "rimraf": "^3.0.2",
42
43
  "sass": "^1.77.0",
43
- "vite": "^5.3.1"
44
+ "vite": "^5.3.5"
44
45
  },
45
46
  "peerDependencies": {
46
47
  "typescript": "*",
47
- "@tmagic/utils": "1.4.15",
48
- "@tmagic/schema": "1.4.15",
49
- "@tmagic/core": "1.4.15"
48
+ "@tmagic/schema": "1.5.0-beta.0",
49
+ "@tmagic/utils": "1.5.0-beta.0",
50
+ "@tmagic/core": "1.5.0-beta.0"
50
51
  },
51
52
  "peerDependenciesMeta": {
52
53
  "typescript": {
@@ -54,9 +55,6 @@
54
55
  }
55
56
  },
56
57
  "scripts": {
57
- "build": "npm run build:type && vite build",
58
- "build:type": "npm run clear:type && tsc --declaration --emitDeclarationOnly --project tsconfig.build.json",
59
- "clear:type": "rimraf ./types",
60
- "check:type": "tsc --noEmit --project tsconfig.build.json"
58
+ "build": "vite build"
61
59
  }
62
60
  }
@@ -23,7 +23,7 @@ import type { MoveableOptions, OnDragStart } from 'moveable';
23
23
 
24
24
  import { Env } from '@tmagic/core';
25
25
  import type { Id } from '@tmagic/schema';
26
- import { addClassName, getDocument, removeClassNameByClassName } from '@tmagic/utils';
26
+ import { addClassName, getDocument, getIdFromEl, removeClassNameByClassName } from '@tmagic/utils';
27
27
 
28
28
  import {
29
29
  AbleActionEventType,
@@ -99,13 +99,14 @@ export default class ActionManager extends EventEmitter {
99
99
  }
100
100
 
101
101
  const el = await this.getElementFromPoint(event);
102
- if (!el) {
102
+ const id = getIdFromEl()(el);
103
+ if (!id) {
103
104
  this.clearHighlight();
104
105
  return;
105
106
  }
106
107
 
107
108
  this.emit('mousemove', event);
108
- this.highlight(el.id);
109
+ this.highlight(id);
109
110
  }, throttleTime);
110
111
 
111
112
  constructor(config: ActionManagerConfig) {
@@ -118,7 +119,7 @@ export default class ActionManager extends EventEmitter {
118
119
  this.disabledMultiSelect = config.disabledMultiSelect ?? false;
119
120
  this.getTargetElement = config.getTargetElement;
120
121
  this.getElementsFromPoint = config.getElementsFromPoint;
121
- this.canSelect = config.canSelect || ((el: HTMLElement) => !!el.id);
122
+ this.canSelect = config.canSelect || ((el: HTMLElement) => Boolean(getIdFromEl()(el)));
122
123
  this.getRenderDocument = config.getRenderDocument;
123
124
  this.isContainer = config.isContainer;
124
125
 
@@ -187,7 +188,7 @@ export default class ActionManager extends EventEmitter {
187
188
  */
188
189
  public isSelectedEl(el: HTMLElement): boolean {
189
190
  // 有可能dom已经重新渲染,不再是原来的dom了,所以这里判断id,而不是判断el === this.selectedDom
190
- return el.id === this.selectedEl?.id;
191
+ return getIdFromEl()(el) === getIdFromEl()(this.selectedEl);
191
192
  }
192
193
 
193
194
  public setSelectedEl(el: HTMLElement | null): void {
@@ -224,7 +225,7 @@ export default class ActionManager extends EventEmitter {
224
225
  let stopped = false;
225
226
  const stop = () => (stopped = true);
226
227
  for (const el of els) {
227
- if (!el.id.startsWith(GHOST_EL_ID_PREFIX) && (await this.isElCanSelect(el, event, stop))) {
228
+ if (!getIdFromEl()(el)?.startsWith(GHOST_EL_ID_PREFIX) && (await this.isElCanSelect(el, event, stop))) {
228
229
  if (stopped) break;
229
230
  return el;
230
231
  }
@@ -344,7 +345,11 @@ export default class ActionManager extends EventEmitter {
344
345
  const els = this.getElementsFromPoint(event);
345
346
 
346
347
  for (const el of els) {
347
- if (!el.id.startsWith(GHOST_EL_ID_PREFIX) && (await this.isContainer?.(el)) && !excludeElList.includes(el)) {
348
+ if (
349
+ !getIdFromEl()(el)?.startsWith(GHOST_EL_ID_PREFIX) &&
350
+ (await this.isContainer?.(el)) &&
351
+ !excludeElList.includes(el)
352
+ ) {
348
353
  addClassName(el, doc, this.containerHighlightClassName);
349
354
  break;
350
355
  }
@@ -477,9 +482,9 @@ export default class ActionManager extends EventEmitter {
477
482
  if (typeof options === 'function') {
478
483
  const cfg: CustomizeMoveableOptionsCallbackConfig = {
479
484
  targetEl: this.selectedEl,
480
- targetElId: this.selectedEl?.id,
485
+ targetElId: getIdFromEl()(this.selectedEl),
481
486
  targetEls: this.selectedElList,
482
- targetElIds: this.selectedElList?.map((item) => item.id),
487
+ targetElIds: this.selectedElList?.map((item) => getIdFromEl()(item) || ''),
483
488
  isMulti,
484
489
  document: this.getRenderDocument(),
485
490
  };
@@ -507,7 +512,7 @@ export default class ActionManager extends EventEmitter {
507
512
  }
508
513
 
509
514
  // 判断元素是否已在多选列表
510
- const existIndex = this.selectedElList.findIndex((selectedDom) => selectedDom.id === el.id);
515
+ const existIndex = this.selectedElList.findIndex((selectedDom) => getIdFromEl()(selectedDom) === getIdFromEl()(el));
511
516
  if (existIndex !== -1) {
512
517
  // 再次点击取消选中
513
518
  if (this.selectedElList.length > 1) {