@leafer-in/editor 1.5.1 → 1.5.2

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/editor.cjs CHANGED
@@ -393,7 +393,8 @@ class EditSelect extends draw.Group {
393
393
  return target.leafer !== this.editor.leafer;
394
394
  }
395
395
  allowDrag(e) {
396
- if (this.running && (this.editor.mergeConfig.boxSelect) && !e.target.draggable) {
396
+ const { boxSelect, multipleSelect } = this.editor.mergeConfig;
397
+ if (this.running && (multipleSelect && boxSelect) && !e.target.draggable) {
397
398
  return (!this.editor.editing && this.allow(e.target)) || (e.shiftKey && !findOne(e.path));
398
399
  }
399
400
  else {
@@ -411,7 +412,8 @@ class EditSelect extends draw.Group {
411
412
  return this.isMultipleSelect(e) ? this.findDeepOne(e) : findOne(e.path);
412
413
  }
413
414
  isMultipleSelect(e) {
414
- return e.shiftKey || this.editor.mergeConfig.continuousSelect;
415
+ const { multipleSelect, continuousSelect } = this.editor.mergeConfig;
416
+ return multipleSelect && (e.shiftKey || continuousSelect);
415
417
  }
416
418
  __listenEvents() {
417
419
  const { editor } = this;
@@ -586,21 +588,25 @@ const EditDataHelper = {
586
588
  let last;
587
589
  switch (direction) {
588
590
  case top:
591
+ case topLeft:
589
592
  last = { x: 0.5, y: 0 };
590
593
  align = 'bottom';
591
594
  skewX = 1;
592
595
  break;
593
596
  case bottom:
597
+ case bottomRight:
594
598
  last = { x: 0.5, y: 1 };
595
599
  align = 'top';
596
600
  skewX = 1;
597
601
  break;
598
602
  case left$1:
603
+ case bottomLeft:
599
604
  last = { x: 0, y: 0.5 };
600
605
  align = 'right';
601
606
  skewY = 1;
602
607
  break;
603
608
  case right$1:
609
+ case topRight:
604
610
  last = { x: 1, y: 0.5 };
605
611
  align = 'left';
606
612
  skewY = 1;
@@ -689,7 +695,7 @@ function updateCursor(editor, e) {
689
695
  let showResize = pointType.includes('resize');
690
696
  if (showResize && rotateable && (e.metaKey || e.ctrlKey || !resizeable))
691
697
  showResize = false;
692
- const showSkew = skewable && !showResize && point.name === 'resize-line';
698
+ const showSkew = skewable && !showResize && (point.name === 'resize-line' || pointType === 'skew');
693
699
  const cursor = showSkew ? skewCursor : (showResize ? resizeCursor : rotateCursor);
694
700
  rotation += (EditDataHelper.getFlipDirection(point.direction, flippedX, flippedY) + 1) * 45;
695
701
  rotation = Math.round(draw.MathHelper.formatRotation(rotation, true) / 2) * 2;
@@ -911,6 +917,8 @@ class EditBox extends draw.Group {
911
917
  editor.onRotate(e);
912
918
  if (pointType.includes('resize'))
913
919
  editor.onScale(e);
920
+ if (pointType === 'skew')
921
+ editor.onSkew(e);
914
922
  updateCursor(editor, e);
915
923
  }
916
924
  onArrow(e) {
@@ -1092,6 +1100,7 @@ const config = {
1092
1100
  hover: true,
1093
1101
  select: 'press',
1094
1102
  openInner: 'double',
1103
+ multipleSelect: true,
1095
1104
  boxSelect: true,
1096
1105
  moveable: true,
1097
1106
  resizeable: true,
@@ -1183,13 +1192,16 @@ const EditorHelper = {
1183
1192
  const ungroupList = [];
1184
1193
  app.lockLayout();
1185
1194
  list.forEach(leaf => {
1186
- if (leaf.isBranch && !leaf.isBranchLeaf) {
1195
+ if (leaf.isBranch) {
1187
1196
  const { parent, children } = leaf;
1188
1197
  while (children.length) {
1189
1198
  ungroupList.push(children[0]);
1190
1199
  children[0].dropTo(parent, parent.children.indexOf(leaf));
1191
1200
  }
1192
- leaf.remove();
1201
+ if (leaf.isBranchLeaf)
1202
+ ungroupList.push(leaf);
1203
+ else
1204
+ leaf.remove();
1193
1205
  }
1194
1206
  else {
1195
1207
  ungroupList.push(leaf);
@@ -1494,13 +1506,22 @@ class Editor extends draw.Group {
1494
1506
  this.skewOf(origin, skewX, skewY);
1495
1507
  }
1496
1508
  move(x, y = 0) {
1497
- const { element } = this;
1498
1509
  if (!this.checkTransform('moveable'))
1499
1510
  return;
1500
- const world = element.getWorldPointByLocal(typeof x === 'object' ? Object.assign({}, x) : { x, y }, null, true);
1511
+ if (typeof x === 'object')
1512
+ y = x.y, x = x.x;
1513
+ const { element: target } = this, { beforeMove } = this.mergeConfig;
1514
+ if (beforeMove) {
1515
+ const check = beforeMove({ target, x, y });
1516
+ if (typeof check === 'object')
1517
+ x = check.x, y = check.y;
1518
+ else if (check === false)
1519
+ return;
1520
+ }
1521
+ const world = target.getWorldPointByLocal({ x, y }, null, true);
1501
1522
  if (this.multiple)
1502
- element.safeChange(() => element.move(x, y));
1503
- const data = { target: element, editor: this, moveX: world.x, moveY: world.y };
1523
+ target.safeChange(() => target.move(x, y));
1524
+ const data = { target, editor: this, moveX: world.x, moveY: world.y };
1504
1525
  this.emitEvent(new EditorMoveEvent(EditorMoveEvent.BEFORE_MOVE, data));
1505
1526
  const event = new EditorMoveEvent(EditorMoveEvent.MOVE, data);
1506
1527
  this.editTool.onMove(event);
@@ -1509,8 +1530,14 @@ class Editor extends draw.Group {
1509
1530
  scaleWithDrag(data) {
1510
1531
  if (!this.checkTransform('resizeable'))
1511
1532
  return;
1512
- const { element } = this;
1513
- data = Object.assign(Object.assign({}, data), { target: element, editor: this, worldOrigin: element.getWorldPoint(data.origin) });
1533
+ const { element: target } = this, { beforeScale } = this.mergeConfig;
1534
+ if (beforeScale) {
1535
+ const { origin, scaleX, scaleY, drag } = data;
1536
+ const check = beforeScale({ target, drag, origin, scaleX, scaleY });
1537
+ if (check === false)
1538
+ return;
1539
+ }
1540
+ data = Object.assign(Object.assign({}, data), { target, editor: this, worldOrigin: target.getWorldPoint(data.origin) });
1514
1541
  this.emitEvent(new EditorScaleEvent(EditorScaleEvent.BEFORE_SCALE, data));
1515
1542
  const event = new EditorScaleEvent(EditorScaleEvent.SCALE, data);
1516
1543
  this.editTool.onScaleWithDrag(event);
@@ -1519,10 +1546,17 @@ class Editor extends draw.Group {
1519
1546
  scaleOf(origin, scaleX, scaleY = scaleX, _resize) {
1520
1547
  if (!this.checkTransform('resizeable'))
1521
1548
  return;
1522
- const { element } = this;
1549
+ const { element: target } = this, { beforeScale } = this.mergeConfig;
1550
+ if (beforeScale) {
1551
+ const check = beforeScale({ target, origin, scaleX, scaleY });
1552
+ if (typeof check === 'object')
1553
+ scaleX = check.scaleX, scaleY = check.scaleY;
1554
+ else if (check === false)
1555
+ return;
1556
+ }
1523
1557
  const worldOrigin = this.getWorldOrigin(origin);
1524
- const transform = this.multiple && this.getChangedTransform(() => element.safeChange(() => element.scaleOf(origin, scaleX, scaleY)));
1525
- const data = { target: element, editor: this, worldOrigin, scaleX, scaleY, transform };
1558
+ const transform = this.multiple && this.getChangedTransform(() => target.safeChange(() => target.scaleOf(origin, scaleX, scaleY)));
1559
+ const data = { target, editor: this, worldOrigin, scaleX, scaleY, transform };
1526
1560
  this.emitEvent(new EditorScaleEvent(EditorScaleEvent.BEFORE_SCALE, data));
1527
1561
  const event = new EditorScaleEvent(EditorScaleEvent.SCALE, data);
1528
1562
  this.editTool.onScale(event);
@@ -1543,10 +1577,17 @@ class Editor extends draw.Group {
1543
1577
  rotateOf(origin, rotation) {
1544
1578
  if (!this.checkTransform('rotateable'))
1545
1579
  return;
1546
- const { element } = this;
1580
+ const { element: target } = this, { beforeRotate } = this.mergeConfig;
1581
+ if (beforeRotate) {
1582
+ const check = beforeRotate({ target, origin, rotation });
1583
+ if (typeof check === 'number')
1584
+ rotation = check;
1585
+ else if (check === false)
1586
+ return;
1587
+ }
1547
1588
  const worldOrigin = this.getWorldOrigin(origin);
1548
- const transform = this.multiple && this.getChangedTransform(() => element.safeChange(() => element.rotateOf(origin, rotation)));
1549
- const data = { target: element, editor: this, worldOrigin, rotation, transform };
1589
+ const transform = this.multiple && this.getChangedTransform(() => target.safeChange(() => target.rotateOf(origin, rotation)));
1590
+ const data = { target, editor: this, worldOrigin, rotation, transform };
1550
1591
  this.emitEvent(new EditorRotateEvent(EditorRotateEvent.BEFORE_ROTATE, data));
1551
1592
  const event = new EditorRotateEvent(EditorRotateEvent.ROTATE, data);
1552
1593
  this.editTool.onRotate(event);
@@ -1555,10 +1596,17 @@ class Editor extends draw.Group {
1555
1596
  skewOf(origin, skewX, skewY = 0, _resize) {
1556
1597
  if (!this.checkTransform('skewable'))
1557
1598
  return;
1558
- const { element } = this;
1599
+ const { element: target } = this, { beforeSkew } = this.mergeConfig;
1600
+ if (beforeSkew) {
1601
+ const check = beforeSkew({ target, origin, skewX, skewY });
1602
+ if (typeof check === 'object')
1603
+ skewX = check.skewX, skewY = check.skewY;
1604
+ else if (check === false)
1605
+ return;
1606
+ }
1559
1607
  const worldOrigin = this.getWorldOrigin(origin);
1560
- const transform = this.multiple && this.getChangedTransform(() => element.safeChange(() => element.skewOf(origin, skewX, skewY)));
1561
- const data = { target: element, editor: this, worldOrigin, skewX, skewY, transform };
1608
+ const transform = this.multiple && this.getChangedTransform(() => target.safeChange(() => target.skewOf(origin, skewX, skewY)));
1609
+ const data = { target, editor: this, worldOrigin, skewX, skewY, transform };
1562
1610
  this.emitEvent(new EditorSkewEvent(EditorSkewEvent.BEFORE_SKEW, data));
1563
1611
  const event = new EditorSkewEvent(EditorSkewEvent.SKEW, data);
1564
1612
  this.editTool.onSkew(event);