@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.
@@ -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
- let left = el.offsetLeft;
50
- let top = el.offsetTop;
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(el) {
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 === el)
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 (e.dragStart) {
314
- const rect = this.moveable.getRect();
315
- const offset = getAbsolutePosition(e.target, rect);
316
- e.dragStart.set([offset.left, offset.top]);
317
- }
318
- }).on("resize", ({ width, height, drag }) => {
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.dragEl.style.width = `${width}px`;
326
- this.dragEl.style.height = `${height}px`;
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
- const rect = this.moveable.getRect();
406
- const offset = this.mode === Mode.SORTABLE ? { left: 0, top: 0 } : getAbsolutePosition(this.target, rect);
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(rect.width);
410
- const height = this.calcValueByFontsize(rect.height);
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 = "5";
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: ${width}px;
443
- height: ${height}px;
444
- z-index: 9;
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: ${width}px;
576
- height: ${height}px;
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
- let left = el.offsetLeft;
588
- let top = el.offsetTop;
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 || "";