@tmagic/stage 1.0.0-rc.4 → 1.0.0-rc.7
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.es.js +95 -88
- package/dist/tmagic-stage.es.js.map +1 -1
- package/dist/tmagic-stage.umd.js +95 -88
- package/dist/tmagic-stage.umd.js.map +1 -1
- package/dist/types/src/StageDragResize.d.ts +2 -0
- package/dist/types/src/const.d.ts +3 -1
- package/dist/types/src/types.d.ts +7 -3
- package/package.json +5 -6
- package/src/StageDragResize.ts +95 -41
- package/src/StageRender.ts +0 -12
- package/src/TargetCalibrate.ts +6 -30
- package/src/const.ts +2 -0
- package/src/types.ts +8 -3
- package/src/util.ts +2 -27
- package/LICENSE +0 -5432
package/dist/tmagic-stage.es.js
CHANGED
|
@@ -16,6 +16,8 @@ var GuidesType = /* @__PURE__ */ ((GuidesType2) => {
|
|
|
16
16
|
var ZIndex = /* @__PURE__ */ ((ZIndex2) => {
|
|
17
17
|
ZIndex2["MASK"] = "99999";
|
|
18
18
|
ZIndex2["SELECTED_EL"] = "666";
|
|
19
|
+
ZIndex2["GHOST_EL"] = "700";
|
|
20
|
+
ZIndex2["DRAG_EL"] = "9";
|
|
19
21
|
return ZIndex2;
|
|
20
22
|
})(ZIndex || {});
|
|
21
23
|
var MouseButton = /* @__PURE__ */ ((MouseButton2) => {
|
|
@@ -44,29 +46,9 @@ const getParents = (el, relative) => {
|
|
|
44
46
|
return parents;
|
|
45
47
|
};
|
|
46
48
|
const getOffset = (el) => {
|
|
47
|
-
const { transform } = getComputedStyle(el);
|
|
48
49
|
const { offsetParent } = el;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (transform.indexOf("matrix") > -1) {
|
|
52
|
-
let a = 1;
|
|
53
|
-
let b = 1;
|
|
54
|
-
let c = 1;
|
|
55
|
-
let d = 1;
|
|
56
|
-
let e = 0;
|
|
57
|
-
let f = 0;
|
|
58
|
-
transform.replace(/matrix\((.+), (.+), (.+), (.+), (.+), (.+)\)/, ($0, $1, $2, $3, $4, $5, $6) => {
|
|
59
|
-
a = +$1;
|
|
60
|
-
b = +$2;
|
|
61
|
-
c = +$3;
|
|
62
|
-
d = +$4;
|
|
63
|
-
e = +$5;
|
|
64
|
-
f = +$6;
|
|
65
|
-
return transform;
|
|
66
|
-
});
|
|
67
|
-
left = a * left + c * top + e;
|
|
68
|
-
top = b * left + d * top + f;
|
|
69
|
-
}
|
|
50
|
+
const left = el.offsetLeft;
|
|
51
|
+
const top = el.offsetTop;
|
|
70
52
|
if (offsetParent) {
|
|
71
53
|
const parentOffset = getOffset(offsetParent);
|
|
72
54
|
return {
|
|
@@ -272,13 +254,11 @@ class StageDragResize extends EventEmitter {
|
|
|
272
254
|
this.mode = getMode(el);
|
|
273
255
|
this.destroyGhostEl();
|
|
274
256
|
this.updateDragEl(el);
|
|
275
|
-
this.setElementGuidelines(el);
|
|
276
257
|
this.moveableOptions = this.getOptions({
|
|
277
258
|
target: this.dragEl
|
|
278
259
|
});
|
|
279
260
|
}
|
|
280
|
-
setElementGuidelines(
|
|
281
|
-
const nodes = el.parentElement?.children || [];
|
|
261
|
+
setElementGuidelines(nodes) {
|
|
282
262
|
this.elementGuidelines.forEach((node) => {
|
|
283
263
|
node.remove();
|
|
284
264
|
});
|
|
@@ -287,7 +267,7 @@ class StageDragResize extends EventEmitter {
|
|
|
287
267
|
const frame = document.createDocumentFragment();
|
|
288
268
|
for (const node of nodes) {
|
|
289
269
|
const { width, height } = node.getBoundingClientRect();
|
|
290
|
-
if (node ===
|
|
270
|
+
if (node === this.target)
|
|
291
271
|
continue;
|
|
292
272
|
const { left, top } = getOffset(node);
|
|
293
273
|
const elementGuideline = document.createElement("div");
|
|
@@ -305,35 +285,34 @@ class StageDragResize extends EventEmitter {
|
|
|
305
285
|
});
|
|
306
286
|
this.bindResizeEvent();
|
|
307
287
|
this.bindDragEvent();
|
|
288
|
+
this.bindRotateEvent();
|
|
289
|
+
this.bindScaleEvent();
|
|
308
290
|
}
|
|
309
291
|
bindResizeEvent() {
|
|
310
292
|
if (!this.moveable)
|
|
311
293
|
throw new Error("moveable \u4E3A\u521D\u59CB\u5316");
|
|
294
|
+
const frame = {
|
|
295
|
+
left: 0,
|
|
296
|
+
top: 0
|
|
297
|
+
};
|
|
312
298
|
this.moveable.on("resizeStart", (e) => {
|
|
313
|
-
if (
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
299
|
+
if (!this.target)
|
|
300
|
+
return;
|
|
301
|
+
this.dragStatus = "start" /* START */;
|
|
302
|
+
this.moveableHelper?.onResizeStart(e);
|
|
303
|
+
frame.top = this.target.offsetTop;
|
|
304
|
+
frame.left = this.target.offsetLeft;
|
|
305
|
+
}).on("resize", (e) => {
|
|
306
|
+
const { width, height, drag } = e;
|
|
319
307
|
if (!this.moveable || !this.target || !this.dragEl)
|
|
320
308
|
return;
|
|
321
309
|
const { beforeTranslate } = drag;
|
|
322
310
|
this.dragStatus = "ing" /* ING */;
|
|
311
|
+
this.moveableHelper?.onResize(e);
|
|
323
312
|
this.target.style.width = `${width}px`;
|
|
324
313
|
this.target.style.height = `${height}px`;
|
|
325
|
-
this.
|
|
326
|
-
this.
|
|
327
|
-
if (this.mode === Mode.SORTABLE) {
|
|
328
|
-
this.dragEl.style.top = `${beforeTranslate[1]}px`;
|
|
329
|
-
this.target.style.top = `0px`;
|
|
330
|
-
return;
|
|
331
|
-
}
|
|
332
|
-
this.dragEl.style.left = `${beforeTranslate[0]}px`;
|
|
333
|
-
this.dragEl.style.top = `${beforeTranslate[1]}px`;
|
|
334
|
-
const offset = getAbsolutePosition(this.target, { left: beforeTranslate[0], top: beforeTranslate[1] });
|
|
335
|
-
this.target.style.left = `${offset.left}px`;
|
|
336
|
-
this.target.style.top = `${offset.top}px`;
|
|
314
|
+
this.target.style.left = `${frame.left + beforeTranslate[0]}px`;
|
|
315
|
+
this.target.style.top = `${frame.top + beforeTranslate[1]}px`;
|
|
337
316
|
}).on("resizeEnd", () => {
|
|
338
317
|
this.dragStatus = "end" /* END */;
|
|
339
318
|
this.update(true);
|
|
@@ -382,6 +361,54 @@ class StageDragResize extends EventEmitter {
|
|
|
382
361
|
this.destroyGhostEl();
|
|
383
362
|
});
|
|
384
363
|
}
|
|
364
|
+
bindRotateEvent() {
|
|
365
|
+
if (!this.moveable)
|
|
366
|
+
throw new Error("moveable \u4E3A\u521D\u59CB\u5316");
|
|
367
|
+
this.moveable.on("rotateStart", (e) => {
|
|
368
|
+
this.dragStatus = "start" /* START */;
|
|
369
|
+
this.moveableHelper?.onRotateStart(e);
|
|
370
|
+
}).on("rotate", (e) => {
|
|
371
|
+
if (!this.target || !this.dragEl)
|
|
372
|
+
return;
|
|
373
|
+
this.dragStatus = "ing" /* ING */;
|
|
374
|
+
this.moveableHelper?.onRotate(e);
|
|
375
|
+
const frame = this.moveableHelper?.getFrame(e.target);
|
|
376
|
+
this.target.style.transform = frame?.toCSSObject().transform || "";
|
|
377
|
+
}).on("rotateEnd", (e) => {
|
|
378
|
+
this.dragStatus = "end" /* END */;
|
|
379
|
+
const frame = this.moveableHelper?.getFrame(e.target);
|
|
380
|
+
this.emit("update", {
|
|
381
|
+
el: this.target,
|
|
382
|
+
style: {
|
|
383
|
+
transform: frame?.get("transform")
|
|
384
|
+
}
|
|
385
|
+
});
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
bindScaleEvent() {
|
|
389
|
+
if (!this.moveable)
|
|
390
|
+
throw new Error("moveable \u4E3A\u521D\u59CB\u5316");
|
|
391
|
+
this.moveable.on("scaleStart", (e) => {
|
|
392
|
+
this.dragStatus = "start" /* START */;
|
|
393
|
+
this.moveableHelper?.onScaleStart(e);
|
|
394
|
+
}).on("scale", (e) => {
|
|
395
|
+
if (!this.target || !this.dragEl)
|
|
396
|
+
return;
|
|
397
|
+
this.dragStatus = "ing" /* ING */;
|
|
398
|
+
this.moveableHelper?.onScale(e);
|
|
399
|
+
const frame = this.moveableHelper?.getFrame(e.target);
|
|
400
|
+
this.target.style.transform = frame?.toCSSObject().transform || "";
|
|
401
|
+
}).on("scaleEnd", (e) => {
|
|
402
|
+
this.dragStatus = "end" /* END */;
|
|
403
|
+
const frame = this.moveableHelper?.getFrame(e.target);
|
|
404
|
+
this.emit("update", {
|
|
405
|
+
el: this.target,
|
|
406
|
+
style: {
|
|
407
|
+
transform: frame?.get("transform")
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
});
|
|
411
|
+
}
|
|
385
412
|
sort() {
|
|
386
413
|
if (!this.target || !this.ghostEl)
|
|
387
414
|
throw new Error("\u672A\u77E5\u9519\u8BEF");
|
|
@@ -402,12 +429,13 @@ class StageDragResize extends EventEmitter {
|
|
|
402
429
|
}
|
|
403
430
|
}
|
|
404
431
|
update(isResize = false) {
|
|
405
|
-
|
|
406
|
-
|
|
432
|
+
if (!this.target)
|
|
433
|
+
return;
|
|
434
|
+
const offset = this.mode === Mode.SORTABLE ? { left: 0, top: 0 } : { left: this.target.offsetLeft, top: this.target.offsetTop };
|
|
407
435
|
const left = this.calcValueByFontsize(offset.left);
|
|
408
436
|
const top = this.calcValueByFontsize(offset.top);
|
|
409
|
-
const width = this.calcValueByFontsize(
|
|
410
|
-
const height = this.calcValueByFontsize(
|
|
437
|
+
const width = this.calcValueByFontsize(this.target.clientWidth);
|
|
438
|
+
const height = this.calcValueByFontsize(this.target.clientHeight);
|
|
411
439
|
this.emit("update", {
|
|
412
440
|
el: this.target,
|
|
413
441
|
style: isResize ? { left, top, width, height } : { left, top }
|
|
@@ -420,7 +448,7 @@ class StageDragResize extends EventEmitter {
|
|
|
420
448
|
const ghostEl = el.cloneNode(true);
|
|
421
449
|
const { top, left } = getAbsolutePosition(el, getOffset(el));
|
|
422
450
|
ghostEl.id = `${GHOST_EL_ID_PREFIX}${el.id}`;
|
|
423
|
-
ghostEl.style.zIndex =
|
|
451
|
+
ghostEl.style.zIndex = ZIndex.GHOST_EL;
|
|
424
452
|
ghostEl.style.opacity = ".5";
|
|
425
453
|
ghostEl.style.position = "absolute";
|
|
426
454
|
ghostEl.style.left = `${left}px`;
|
|
@@ -433,15 +461,16 @@ class StageDragResize extends EventEmitter {
|
|
|
433
461
|
this.ghostEl = void 0;
|
|
434
462
|
}
|
|
435
463
|
updateDragEl(el) {
|
|
436
|
-
const { width, height } = el.getBoundingClientRect();
|
|
437
464
|
const offset = getOffset(el);
|
|
465
|
+
const { transform } = getComputedStyle(el);
|
|
438
466
|
this.dragEl.style.cssText = `
|
|
439
467
|
position: absolute;
|
|
468
|
+
transform: ${transform};
|
|
440
469
|
left: ${offset.left}px;
|
|
441
470
|
top: ${offset.top}px;
|
|
442
|
-
width: ${
|
|
443
|
-
height: ${
|
|
444
|
-
z-index:
|
|
471
|
+
width: ${el.clientWidth}px;
|
|
472
|
+
height: ${el.clientHeight}px;
|
|
473
|
+
z-index: ${ZIndex.DRAG_EL};
|
|
445
474
|
`;
|
|
446
475
|
this.dragEl.id = `${DRAG_EL_ID_PREFIX}${el.id}`;
|
|
447
476
|
}
|
|
@@ -457,6 +486,11 @@ class StageDragResize extends EventEmitter {
|
|
|
457
486
|
if (typeof moveableOptions === "function") {
|
|
458
487
|
moveableOptions = moveableOptions(this.core);
|
|
459
488
|
}
|
|
489
|
+
const elementGuidelines = moveableOptions.elementGuidelines || this.target.parentElement?.children || [];
|
|
490
|
+
this.setElementGuidelines(elementGuidelines);
|
|
491
|
+
if (moveableOptions.elementGuidelines) {
|
|
492
|
+
delete moveableOptions.elementGuidelines;
|
|
493
|
+
}
|
|
460
494
|
return {
|
|
461
495
|
origin: false,
|
|
462
496
|
rootContainer: this.core.container,
|
|
@@ -464,6 +498,8 @@ class StageDragResize extends EventEmitter {
|
|
|
464
498
|
dragArea: false,
|
|
465
499
|
draggable: true,
|
|
466
500
|
resizable: true,
|
|
501
|
+
scalable: false,
|
|
502
|
+
rotatable: false,
|
|
467
503
|
snappable: isAbsolute || isFixed,
|
|
468
504
|
snapGap: isAbsolute || isFixed,
|
|
469
505
|
snapThreshold: 5,
|
|
@@ -566,14 +602,15 @@ class TargetCalibrate extends EventEmitter {
|
|
|
566
602
|
this.parent.append(this.operationEl);
|
|
567
603
|
}
|
|
568
604
|
update(el, prefix) {
|
|
569
|
-
const { width, height } = el.getBoundingClientRect();
|
|
570
605
|
const { left, top } = this.getOffset(el);
|
|
606
|
+
const { transform } = getComputedStyle(el);
|
|
571
607
|
this.operationEl.style.cssText = `
|
|
572
608
|
position: absolute;
|
|
609
|
+
transform: ${transform};
|
|
573
610
|
left: ${left}px;
|
|
574
611
|
top: ${top}px;
|
|
575
|
-
width: ${
|
|
576
|
-
height: ${
|
|
612
|
+
width: ${el.clientWidth}px;
|
|
613
|
+
height: ${el.clientHeight}px;
|
|
577
614
|
`;
|
|
578
615
|
this.operationEl.id = `${prefix}${el.id}`;
|
|
579
616
|
return this.operationEl;
|
|
@@ -582,29 +619,9 @@ class TargetCalibrate extends EventEmitter {
|
|
|
582
619
|
this.operationEl?.remove();
|
|
583
620
|
}
|
|
584
621
|
getOffset(el) {
|
|
585
|
-
const { transform } = getComputedStyle(el);
|
|
586
622
|
const { offsetParent } = el;
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
if (transform.indexOf("matrix") > -1) {
|
|
590
|
-
let a = 1;
|
|
591
|
-
let b = 1;
|
|
592
|
-
let c = 1;
|
|
593
|
-
let d = 1;
|
|
594
|
-
let e = 0;
|
|
595
|
-
let f = 0;
|
|
596
|
-
transform.replace(/matrix\((.+), (.+), (.+), (.+), (.+), (.+)\)/, ($0, $1, $2, $3, $4, $5, $6) => {
|
|
597
|
-
a = +$1;
|
|
598
|
-
b = +$2;
|
|
599
|
-
c = +$3;
|
|
600
|
-
d = +$4;
|
|
601
|
-
e = +$5;
|
|
602
|
-
f = +$6;
|
|
603
|
-
return transform;
|
|
604
|
-
});
|
|
605
|
-
left = a * left + c * top + e;
|
|
606
|
-
top = b * left + d * top + f;
|
|
607
|
-
}
|
|
623
|
+
const left = el.offsetLeft;
|
|
624
|
+
const top = el.offsetTop;
|
|
608
625
|
if (offsetParent) {
|
|
609
626
|
const parentOffset = this.getOffset(offsetParent);
|
|
610
627
|
return {
|
|
@@ -1047,16 +1064,6 @@ class StageRender extends EventEmitter {
|
|
|
1047
1064
|
this.iframe?.contentDocument?.body?.appendChild(el);
|
|
1048
1065
|
}
|
|
1049
1066
|
}
|
|
1050
|
-
if (this.contentWindow) {
|
|
1051
|
-
const style = this.contentWindow.document.createElement("style");
|
|
1052
|
-
style.id = "tmagic-stage-render";
|
|
1053
|
-
style.innerHTML = `
|
|
1054
|
-
.${SELECTED_CLASS}, .${SELECTED_CLASS}-parent {
|
|
1055
|
-
z-index: ${ZIndex.SELECTED_EL};
|
|
1056
|
-
}
|
|
1057
|
-
`;
|
|
1058
|
-
this.contentWindow.document.head.appendChild(style);
|
|
1059
|
-
}
|
|
1060
1067
|
};
|
|
1061
1068
|
this.core = core;
|
|
1062
1069
|
this.runtimeUrl = core.config.runtimeUrl || "";
|