@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.
- package/dist/tmagic-stage.js +40 -32
- package/dist/tmagic-stage.umd.cjs +43 -35
- package/package.json +8 -10
- package/src/ActionManager.ts +15 -10
- package/src/DragResizeHelper.ts +28 -17
- package/src/StageCore.ts +4 -2
- package/src/StageDragResize.ts +8 -4
- package/src/StageMultiDragResize.ts +4 -1
- package/src/StageRender.ts +2 -2
- package/src/TargetShadow.ts +3 -3
- package/types/index.d.ts +997 -10
- package/types/ActionManager.d.ts +0 -149
- package/types/DragResizeHelper.d.ts +0 -71
- package/types/MoveableActionsAble.d.ts +0 -9
- package/types/MoveableOptionsManager.d.ts +0 -87
- package/types/Rule.d.ts +0 -37
- package/types/StageCore.d.ts +0 -116
- package/types/StageDragResize.d.ts +0 -49
- package/types/StageHighlight.d.ts +0 -26
- package/types/StageMask.d.ts +0 -89
- package/types/StageMultiDragResize.d.ts +0 -40
- package/types/StageRender.d.ts +0 -54
- package/types/TargetShadow.d.ts +0 -22
- package/types/const.d.ts +0 -78
- package/types/logger.d.ts +0 -5
- package/types/types.d.ts +0 -253
- package/types/util.d.ts +0 -42
package/dist/tmagic-stage.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
563
|
+
(targetItem) => getId(ev.target)?.startsWith(DRAG_EL_ID_PREFIX) && getId(ev.target)?.endsWith(getId(targetItem) || "")
|
|
563
564
|
);
|
|
564
565
|
if (!matchEventTarget) return;
|
|
565
|
-
|
|
566
|
+
const id = getId(matchEventTarget);
|
|
567
|
+
id && this.framesSnapShot.push({
|
|
566
568
|
left: matchEventTarget.offsetLeft,
|
|
567
569
|
top: matchEventTarget.offsetTop,
|
|
568
|
-
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
|
|
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
|
-
|
|
596
|
-
|
|
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.
|
|
1127
|
-
|
|
1128
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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) =>
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1710
|
+
targetElId: getIdFromEl()(this.selectedEl),
|
|
1704
1711
|
targetEls: this.selectedElList,
|
|
1705
|
-
targetElIds: this.selectedElList?.map((item) => item
|
|
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
|
|
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()
|
|
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
|
-
|
|
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('
|
|
3
|
-
typeof define === 'function' && define.amd ? define(['exports', 'events', 'keycon', 'lodash-es', '@tmagic/core', '
|
|
4
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.TMagicStage = {}, global.EventEmitter, global.
|
|
5
|
-
})(this, (function (exports, EventEmitter, KeyController, lodashEs, core,
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
560
|
+
(targetItem) => getId(ev.target)?.startsWith(DRAG_EL_ID_PREFIX) && getId(ev.target)?.endsWith(getId(targetItem) || "")
|
|
560
561
|
);
|
|
561
562
|
if (!matchEventTarget) return;
|
|
562
|
-
|
|
563
|
+
const id = getId(matchEventTarget);
|
|
564
|
+
id && this.framesSnapShot.push({
|
|
563
565
|
left: matchEventTarget.offsetLeft,
|
|
564
566
|
top: matchEventTarget.offsetTop,
|
|
565
|
-
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
|
|
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
|
-
|
|
593
|
-
|
|
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.
|
|
1124
|
-
|
|
1125
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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) =>
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1707
|
+
targetElId: utils.getIdFromEl()(this.selectedEl),
|
|
1701
1708
|
targetEls: this.selectedElList,
|
|
1702
|
-
targetElIds: this.selectedElList?.map((item) =>
|
|
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
|
|
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()
|
|
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
|
-
|
|
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.
|
|
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.
|
|
44
|
+
"vite": "^5.3.5"
|
|
44
45
|
},
|
|
45
46
|
"peerDependencies": {
|
|
46
47
|
"typescript": "*",
|
|
47
|
-
"@tmagic/
|
|
48
|
-
"@tmagic/
|
|
49
|
-
"@tmagic/core": "1.
|
|
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": "
|
|
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
|
}
|
package/src/ActionManager.ts
CHANGED
|
@@ -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
|
-
|
|
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(
|
|
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) =>
|
|
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
|
|
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
|
|
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 (
|
|
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
|
|
485
|
+
targetElId: getIdFromEl()(this.selectedEl),
|
|
481
486
|
targetEls: this.selectedElList,
|
|
482
|
-
targetElIds: this.selectedElList?.map((item) => item
|
|
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
|
|
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) {
|