@leafer/worker 1.9.8 → 1.9.10

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.
@@ -249,7 +249,7 @@ class LeafData {
249
249
 
250
250
  let tempA, tempB, tempTo;
251
251
 
252
- const {max: max$5} = Math, tempFour = [ 0, 0, 0, 0 ];
252
+ const {max: max$6} = Math, tempFour = [ 0, 0, 0, 0 ];
253
253
 
254
254
  const FourNumberHelper = {
255
255
  zero: [ ...tempFour ],
@@ -263,7 +263,7 @@ const FourNumberHelper = {
263
263
  return to;
264
264
  },
265
265
  setTemp(top, right, bottom, left) {
266
- return set$1(tempFour, top, right, bottom, left);
266
+ return set$2(tempFour, top, right, bottom, left);
267
267
  },
268
268
  toTempAB(a, b, change) {
269
269
  tempTo = change ? isNumber(a) ? b : a : [];
@@ -301,24 +301,24 @@ const FourNumberHelper = {
301
301
  return data;
302
302
  },
303
303
  max(t, other, change) {
304
- if (isNumber(t) && isNumber(other)) return max$5(t, other);
304
+ if (isNumber(t) && isNumber(other)) return max$6(t, other);
305
305
  toTempAB(t, other, change);
306
- return set$1(tempTo, max$5(tempA[0], tempB[0]), max$5(tempA[1], tempB[1]), max$5(tempA[2], tempB[2]), max$5(tempA[3], tempB[3]));
306
+ return set$2(tempTo, max$6(tempA[0], tempB[0]), max$6(tempA[1], tempB[1]), max$6(tempA[2], tempB[2]), max$6(tempA[3], tempB[3]));
307
307
  },
308
308
  add(t, other, change) {
309
309
  if (isNumber(t) && isNumber(other)) return t + other;
310
310
  toTempAB(t, other, change);
311
- return set$1(tempTo, tempA[0] + tempB[0], tempA[1] + tempB[1], tempA[2] + tempB[2], tempA[3] + tempB[3]);
311
+ return set$2(tempTo, tempA[0] + tempB[0], tempA[1] + tempB[1], tempA[2] + tempB[2], tempA[3] + tempB[3]);
312
312
  },
313
313
  swapAndScale(t, scaleX, scaleY, change) {
314
314
  if (isNumber(t)) return scaleX === scaleY ? t * scaleX : [ t * scaleY, t * scaleX ];
315
315
  const to = change ? t : [];
316
316
  const [top, right, bottom, left] = t.length === 4 ? t : get$5(t);
317
- return set$1(to, bottom * scaleY, left * scaleX, top * scaleY, right * scaleX);
317
+ return set$2(to, bottom * scaleY, left * scaleX, top * scaleY, right * scaleX);
318
318
  }
319
319
  };
320
320
 
321
- const {set: set$1, get: get$5, setTemp: setTemp, toTempAB: toTempAB} = FourNumberHelper;
321
+ const {set: set$2, get: get$5, setTemp: setTemp, toTempAB: toTempAB} = FourNumberHelper;
322
322
 
323
323
  const {round: round$6, pow: pow$2, PI: PI$4} = Math;
324
324
 
@@ -720,7 +720,7 @@ const M$b = MatrixHelper;
720
720
 
721
721
  const {toInnerPoint: toInnerPoint$2, toOuterPoint: toOuterPoint$3} = MatrixHelper;
722
722
 
723
- const {sin: sin$5, cos: cos$5, abs: abs$7, sqrt: sqrt$4, atan2: atan2$2, min: min$1, round: round$5} = Math;
723
+ const {sin: sin$5, cos: cos$5, abs: abs$a, sqrt: sqrt$4, atan2: atan2$2, min: min$2, round: round$5} = Math;
724
724
 
725
725
  const PointHelper = {
726
726
  defaultPoint: getPointData(),
@@ -813,12 +813,12 @@ const PointHelper = {
813
813
  return getDistanceFrom(t.x, t.y, point.x, point.y);
814
814
  },
815
815
  getDistanceFrom(x1, y1, x2, y2) {
816
- const x = abs$7(x2 - x1);
817
- const y = abs$7(y2 - y1);
816
+ const x = abs$a(x2 - x1);
817
+ const y = abs$a(y2 - y1);
818
818
  return sqrt$4(x * x + y * y);
819
819
  },
820
820
  getMinDistanceFrom(x1, y1, x2, y2, x3, y3) {
821
- return min$1(getDistanceFrom(x1, y1, x2, y2), getDistanceFrom(x2, y2, x3, y3));
821
+ return min$2(getDistanceFrom(x1, y1, x2, y2), getDistanceFrom(x2, y2, x3, y3));
822
822
  },
823
823
  getAngle(t, to) {
824
824
  return getAtan2(t, to) / OneRadian;
@@ -2592,11 +2592,11 @@ const RectHelper = {
2592
2592
  }
2593
2593
  };
2594
2594
 
2595
- const {sin: sin$4, cos: cos$4, hypot: hypot, atan2: atan2$1, ceil: ceil$2, abs: abs$6, PI: PI$3, sqrt: sqrt$3, pow: pow$1} = Math;
2595
+ const {sin: sin$4, cos: cos$4, hypot: hypot, atan2: atan2$1, ceil: ceil$2, abs: abs$9, PI: PI$3, sqrt: sqrt$3, pow: pow$1} = Math;
2596
2596
 
2597
2597
  const {setPoint: setPoint$4, addPoint: addPoint$2} = TwoPointBoundsHelper;
2598
2598
 
2599
- const {set: set, toNumberPoints: toNumberPoints$1} = PointHelper;
2599
+ const {set: set$1, toNumberPoints: toNumberPoints$1} = PointHelper;
2600
2600
 
2601
2601
  const {M: M$a, L: L$a, C: C$8, Q: Q$7, Z: Z$8} = PathCommandMap;
2602
2602
 
@@ -2667,14 +2667,14 @@ const BezierHelper = {
2667
2667
  const lenCB = hypot(CBx, CBy);
2668
2668
  let totalRadian = endRadian - startRadian;
2669
2669
  if (totalRadian < 0) totalRadian += PI2;
2670
- if (lenBA < 1e-12 || lenCB < 1e-12 || totalRadian < 1e-12 || abs$6(totalRadian - PI$3) < 1e-12) {
2670
+ if (lenBA < 1e-12 || lenCB < 1e-12 || totalRadian < 1e-12 || abs$9(totalRadian - PI$3) < 1e-12) {
2671
2671
  if (data) data.push(L$a, x1, y1);
2672
2672
  if (setPointBounds) {
2673
2673
  setPoint$4(setPointBounds, fromX, fromY);
2674
2674
  addPoint$2(setPointBounds, x1, y1);
2675
2675
  }
2676
- if (setStartPoint) set(setStartPoint, fromX, fromY);
2677
- if (setEndPoint) set(setEndPoint, x1, y1);
2676
+ if (setStartPoint) set$1(setStartPoint, fromX, fromY);
2677
+ if (setEndPoint) set$1(setEndPoint, x1, y1);
2678
2678
  return;
2679
2679
  }
2680
2680
  const anticlockwise = BAx * CBy - CBx * BAy < 0;
@@ -2700,7 +2700,7 @@ const BezierHelper = {
2700
2700
  let totalRadian = endRadian - startRadian;
2701
2701
  if (totalRadian < 0) totalRadian += PI2; else if (totalRadian > PI2) totalRadian -= PI2;
2702
2702
  if (anticlockwise) totalRadian -= PI2;
2703
- const parts = ceil$2(abs$6(totalRadian / PI_2));
2703
+ const parts = ceil$2(abs$9(totalRadian / PI_2));
2704
2704
  const partRadian = totalRadian / parts;
2705
2705
  const partRadian4Sin = sin$4(partRadian / 4);
2706
2706
  const control = 8 / 3 * partRadian4Sin * partRadian4Sin / sin$4(partRadian / 2);
@@ -2714,7 +2714,7 @@ const BezierHelper = {
2714
2714
  let fromX = cx + x, fromY = cy + y;
2715
2715
  if (data) data.push(data.length ? L$a : M$a, fromX, fromY);
2716
2716
  if (setPointBounds) setPoint$4(setPointBounds, fromX, fromY);
2717
- if (setStartPoint) set(setStartPoint, fromX, fromY);
2717
+ if (setStartPoint) set$1(setStartPoint, fromX, fromY);
2718
2718
  for (let i = 0; i < parts; i++) {
2719
2719
  endCos = cos$4(endRadian);
2720
2720
  endSin = sin$4(endRadian);
@@ -2733,7 +2733,7 @@ const BezierHelper = {
2733
2733
  startRadian = endRadian;
2734
2734
  endRadian += partRadian;
2735
2735
  }
2736
- if (setEndPoint) set(setEndPoint, cx + x, cy + y);
2736
+ if (setEndPoint) set$1(setEndPoint, cx + x, cy + y);
2737
2737
  },
2738
2738
  quadraticCurveTo(data, fromX, fromY, x1, y1, toX, toY) {
2739
2739
  data.push(C$8, (fromX + 2 * x1) / 3, (fromY + 2 * y1) / 3, (toX + 2 * x1) / 3, (toY + 2 * y1) / 3, toX, toY);
@@ -3167,7 +3167,7 @@ const {M: M$8, L: L$8, C: C$6, Q: Q$5, Z: Z$6, N: N$4, D: D$5, X: X$4, G: G$4, F
3167
3167
 
3168
3168
  const {getMinDistanceFrom: getMinDistanceFrom, getRadianFrom: getRadianFrom} = PointHelper;
3169
3169
 
3170
- const {tan: tan, min: min, abs: abs$5} = Math;
3170
+ const {tan: tan, min: min$1, abs: abs$8} = Math;
3171
3171
 
3172
3172
  const startPoint = {};
3173
3173
 
@@ -3225,7 +3225,7 @@ const PathCommandDataHelper = {
3225
3225
  arcTo(data, x1, y1, x2, y2, radius, lastX, lastY) {
3226
3226
  if (!isUndefined(lastX)) {
3227
3227
  const d = getMinDistanceFrom(lastX, lastY, x1, y1, x2, y2);
3228
- radius = min(radius, min(d / 2, d / 2 * abs$5(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3228
+ radius = min$1(radius, min$1(d / 2, d / 2 * abs$8(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3229
3229
  }
3230
3230
  data.push(U$4, x1, y1, x2, y2, radius);
3231
3231
  },
@@ -4023,7 +4023,7 @@ const I$1 = ImageManager;
4023
4023
 
4024
4024
  const {IMAGE: IMAGE, create: create$1} = IncrementId;
4025
4025
 
4026
- const {floor: floor$2, max: max$4} = Math;
4026
+ const {floor: floor$2, max: max$5} = Math;
4027
4027
 
4028
4028
  class LeaferImage {
4029
4029
  get url() {
@@ -4112,7 +4112,7 @@ class LeaferImage {
4112
4112
  }
4113
4113
  if (data) return data;
4114
4114
  }
4115
- const canvas = Platform.origin.createCanvas(max$4(floor$2(width + (xGap || 0)), 1), max$4(floor$2(height + (yGap || 0)), 1));
4115
+ const canvas = Platform.origin.createCanvas(max$5(floor$2(width + (xGap || 0)), 1), max$5(floor$2(height + (yGap || 0)), 1));
4116
4116
  const ctx = canvas.getContext("2d");
4117
4117
  if (opacity) ctx.globalAlpha = opacity;
4118
4118
  ctx.imageSmoothingEnabled = smooth === false ? false : true;
@@ -6815,7 +6815,7 @@ class LeafLevelList {
6815
6815
  }
6816
6816
  }
6817
6817
 
6818
- const version = "1.9.8";
6818
+ const version = "1.9.10";
6819
6819
 
6820
6820
  class LeaferCanvas extends LeaferCanvasBase {
6821
6821
  get allowBackgroundColor() {
@@ -7481,7 +7481,7 @@ class Picker {
7481
7481
  children: [ target ]
7482
7482
  } : target);
7483
7483
  const {list: list} = this.findList;
7484
- const leaf = this.getBestMatchLeaf(list, options.bottomList, ignoreHittable);
7484
+ const leaf = this.getBestMatchLeaf(list, options.bottomList, ignoreHittable, !!options.findList);
7485
7485
  const path = ignoreHittable ? this.getPath(leaf) : this.getHitablePath(leaf);
7486
7486
  this.clear();
7487
7487
  return through ? {
@@ -7496,7 +7496,7 @@ class Picker {
7496
7496
  hitPoint(hitPoint, hitRadius, options) {
7497
7497
  return !!this.getByPoint(hitPoint, hitRadius, options).target;
7498
7498
  }
7499
- getBestMatchLeaf(list, bottomList, ignoreHittable) {
7499
+ getBestMatchLeaf(list, bottomList, ignoreHittable, allowNull) {
7500
7500
  const findList = this.findList = new LeafList;
7501
7501
  if (list.length) {
7502
7502
  let find;
@@ -7527,15 +7527,27 @@ class Picker {
7527
7527
  if (findList.length) return findList.list[0];
7528
7528
  }
7529
7529
  }
7530
+ if (allowNull) return null;
7530
7531
  return ignoreHittable ? list[0] : list.find(item => LeafHelper.worldHittable(item));
7531
7532
  }
7532
7533
  getPath(leaf) {
7533
- const path = new LeafList;
7534
+ const path = new LeafList, syncList = [], {target: target} = this;
7534
7535
  while (leaf) {
7536
+ if (leaf.syncEventer) syncList.push(leaf.syncEventer);
7535
7537
  path.add(leaf);
7536
7538
  leaf = leaf.parent;
7539
+ if (leaf === target) break;
7540
+ }
7541
+ if (syncList.length) {
7542
+ syncList.forEach(item => {
7543
+ while (item) {
7544
+ if (item.__.hittable) path.add(item);
7545
+ item = item.parent;
7546
+ if (item === target) break;
7547
+ }
7548
+ });
7537
7549
  }
7538
- if (this.target) path.add(this.target);
7550
+ if (target) path.add(target);
7539
7551
  return path;
7540
7552
  }
7541
7553
  getHitablePath(leaf) {
@@ -8033,12 +8045,12 @@ class ImageData extends RectData {
8033
8045
  }
8034
8046
  __getData() {
8035
8047
  const data = super.__getData();
8036
- delete data.fill;
8048
+ if (data.url) delete data.fill;
8037
8049
  return data;
8038
8050
  }
8039
8051
  __getInputData(names, options) {
8040
8052
  const data = super.__getInputData(names, options);
8041
- delete data.fill;
8053
+ if (data.url) delete data.fill;
8042
8054
  return data;
8043
8055
  }
8044
8056
  }
@@ -8057,7 +8069,7 @@ class CanvasData extends RectData {
8057
8069
  }
8058
8070
  }
8059
8071
 
8060
- const {max: max$3, add: add$1} = FourNumberHelper;
8072
+ const {max: max$4, add: add$1} = FourNumberHelper;
8061
8073
 
8062
8074
  const UIBounds = {
8063
8075
  __updateStrokeSpread() {
@@ -8073,7 +8085,7 @@ const UIBounds = {
8073
8085
  }
8074
8086
  if (data.__useArrow) spread += strokeWidth * 5;
8075
8087
  if (box) {
8076
- spread = max$3(spread, box.__layout.strokeSpread = box.__updateStrokeSpread());
8088
+ spread = max$4(spread, box.__layout.strokeSpread = box.__updateStrokeSpread());
8077
8089
  boxSpread = Math.max(boxSpread, box.__layout.strokeBoxSpread);
8078
8090
  }
8079
8091
  this.__layout.strokeBoxSpread = boxSpread;
@@ -8083,86 +8095,18 @@ const UIBounds = {
8083
8095
  let spread = 0;
8084
8096
  const {shadow: shadow, innerShadow: innerShadow, blur: blur, backgroundBlur: backgroundBlur, filter: filter, renderSpread: renderSpread} = this.__, {strokeSpread: strokeSpread} = this.__layout, box = this.__box;
8085
8097
  if (shadow) spread = Effect.getShadowRenderSpread(this, shadow);
8086
- if (blur) spread = max$3(spread, blur);
8098
+ if (blur) spread = max$4(spread, blur);
8087
8099
  if (filter) spread = add$1(spread, Filter.getSpread(filter));
8088
8100
  if (renderSpread) spread = add$1(spread, renderSpread);
8089
8101
  if (strokeSpread) spread = add$1(spread, strokeSpread);
8090
8102
  let shapeSpread = spread;
8091
- if (innerShadow) shapeSpread = max$3(shapeSpread, Effect.getInnerShadowSpread(this, innerShadow));
8092
- if (backgroundBlur) shapeSpread = max$3(shapeSpread, backgroundBlur);
8103
+ if (innerShadow) shapeSpread = max$4(shapeSpread, Effect.getInnerShadowSpread(this, innerShadow));
8104
+ if (backgroundBlur) shapeSpread = max$4(shapeSpread, backgroundBlur);
8093
8105
  this.__layout.renderShapeSpread = shapeSpread;
8094
- return box ? max$3(box.__updateRenderSpread(), spread) : spread;
8095
- }
8096
- };
8097
-
8098
- const {float: float$1} = MathHelper;
8099
-
8100
- const tempContent = new Bounds, tempMerge = new Bounds, tempIntersect = new Bounds;
8101
-
8102
- const DragBoundsHelper = {
8103
- limitMove(leaf, move) {
8104
- const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
8105
- if (dragBounds) D$2.getValidMove(leaf.__localBoxBounds, D$2.getDragBounds(leaf), dragBoundsType, move, true);
8106
- D$2.axisMove(leaf, move);
8107
- },
8108
- limitScaleOf(leaf, origin, scale) {
8109
- const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
8110
- if (dragBounds) D$2.getValidScaleOf(leaf.__localBoxBounds, D$2.getDragBounds(leaf), dragBoundsType, leaf.getLocalPointByInner(leaf.getInnerPointByBox(origin)), scale, true);
8111
- },
8112
- axisMove(leaf, move) {
8113
- const {draggable: draggable} = leaf;
8114
- if (draggable === "x") move.y = 0;
8115
- if (draggable === "y") move.x = 0;
8116
- },
8117
- getDragBounds(leaf) {
8118
- const {dragBounds: dragBounds} = leaf;
8119
- return dragBounds === "parent" ? leaf.parent.boxBounds : dragBounds;
8120
- },
8121
- isInnerMode(content, dragBounds, dragBoundsType, sideType) {
8122
- return dragBoundsType === "inner" || dragBoundsType === "auto" && content[sideType] > dragBounds[sideType];
8123
- },
8124
- getValidMove(content, dragBounds, dragBoundsType, move, change) {
8125
- const x = content.x + move.x, y = content.y + move.y, right = x + content.width, bottom = y + content.height;
8126
- const boundsRight = dragBounds.x + dragBounds.width, boundsBottom = dragBounds.y + dragBounds.height;
8127
- if (!change) move = Object.assign({}, move);
8128
- if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
8129
- if (x > dragBounds.x) move.x += dragBounds.x - x; else if (right < boundsRight) move.x += boundsRight - right;
8130
- } else {
8131
- if (x < dragBounds.x) move.x += dragBounds.x - x; else if (right > boundsRight) move.x += boundsRight - right;
8132
- }
8133
- if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
8134
- if (y > dragBounds.y) move.y += dragBounds.y - y; else if (bottom < boundsBottom) move.y += boundsBottom - bottom;
8135
- } else {
8136
- if (y < dragBounds.y) move.y += dragBounds.y - y; else if (bottom > boundsBottom) move.y += boundsBottom - bottom;
8137
- }
8138
- move.x = float$1(move.x);
8139
- move.y = float$1(move.y);
8140
- return move;
8141
- },
8142
- getValidScaleOf(content, dragBounds, dragBoundsType, origin, scale, change) {
8143
- if (!change) scale = Object.assign({}, scale);
8144
- let fitScaleX, fitScaleY;
8145
- tempContent.set(content).scaleOf(origin, scale.x, scale.y).unsign();
8146
- tempMerge.set(tempContent).add(dragBounds);
8147
- tempIntersect.set(tempContent).intersect(dragBounds);
8148
- if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
8149
- fitScaleX = tempMerge.width / tempContent.width;
8150
- } else {
8151
- fitScaleX = tempIntersect.width / tempContent.width;
8152
- }
8153
- if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
8154
- fitScaleY = tempMerge.height / tempContent.height;
8155
- } else {
8156
- fitScaleY = tempIntersect.height / tempContent.height;
8157
- }
8158
- scale.x = float$1(tempIntersect.width) ? scale.x * fitScaleX : 1;
8159
- scale.y = float$1(tempIntersect.height) ? scale.y * fitScaleY : 1;
8160
- return scale;
8106
+ return box ? max$4(box.__updateRenderSpread(), spread) : spread;
8161
8107
  }
8162
8108
  };
8163
8109
 
8164
- const D$2 = DragBoundsHelper;
8165
-
8166
8110
  const {stintSet: stintSet$1} = DataHelper;
8167
8111
 
8168
8112
  const UIRender = {
@@ -9828,6 +9772,102 @@ class UIEvent extends Event {
9828
9772
  }
9829
9773
  }
9830
9774
 
9775
+ const {float: float$1, sign: sign$2} = MathHelper, {min: min, max: max$3, abs: abs$7} = Math;
9776
+
9777
+ const tempContent = new Bounds, tempDragBounds = new Bounds;
9778
+
9779
+ const DragBoundsHelper = {
9780
+ limitMove(leaf, move) {
9781
+ const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
9782
+ if (dragBounds) D$2.getValidMove(leaf.__localBoxBounds, D$2.getDragBounds(leaf), dragBoundsType, move, true);
9783
+ D$2.axisMove(leaf, move);
9784
+ },
9785
+ limitScaleOf(leaf, origin, scale, lockRatio) {
9786
+ const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
9787
+ if (dragBounds) D$2.getValidScaleOf(leaf.__localBoxBounds, D$2.getDragBounds(leaf), dragBoundsType, leaf.getLocalPointByInner(leaf.getInnerPointByBox(origin)), scale, lockRatio, true);
9788
+ },
9789
+ axisMove(leaf, move) {
9790
+ const {draggable: draggable} = leaf;
9791
+ if (draggable === "x") move.y = 0;
9792
+ if (draggable === "y") move.x = 0;
9793
+ },
9794
+ getDragBounds(leaf) {
9795
+ const {dragBounds: dragBounds} = leaf;
9796
+ return dragBounds === "parent" ? leaf.parent.boxBounds : dragBounds;
9797
+ },
9798
+ isInnerMode(content, dragBounds, dragBoundsType, sideType) {
9799
+ return dragBoundsType === "inner" || dragBoundsType === "auto" && content[sideType] > dragBounds[sideType];
9800
+ },
9801
+ getValidMove(content, dragBounds, dragBoundsType, move, change) {
9802
+ const x = content.x + move.x, y = content.y + move.y, right = x + content.width, bottom = y + content.height;
9803
+ const boundsRight = dragBounds.x + dragBounds.width, boundsBottom = dragBounds.y + dragBounds.height;
9804
+ if (!change) move = Object.assign({}, move);
9805
+ if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
9806
+ if (x > dragBounds.x) move.x += dragBounds.x - x; else if (right < boundsRight) move.x += boundsRight - right;
9807
+ } else {
9808
+ if (x < dragBounds.x) move.x += dragBounds.x - x; else if (right > boundsRight) move.x += boundsRight - right;
9809
+ }
9810
+ if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
9811
+ if (y > dragBounds.y) move.y += dragBounds.y - y; else if (bottom < boundsBottom) move.y += boundsBottom - bottom;
9812
+ } else {
9813
+ if (y < dragBounds.y) move.y += dragBounds.y - y; else if (bottom > boundsBottom) move.y += boundsBottom - bottom;
9814
+ }
9815
+ move.x = float$1(move.x);
9816
+ move.y = float$1(move.y);
9817
+ return move;
9818
+ },
9819
+ getValidScaleOf(content, dragBounds, dragBoundsType, origin, scale, lockRatio, change) {
9820
+ if (!change) scale = Object.assign({}, scale);
9821
+ tempDragBounds.set(dragBounds);
9822
+ tempContent.set(content).scaleOf(origin, scale.x, scale.y);
9823
+ const originLeftScale = (origin.x - content.x) / content.width, originRightScale = 1 - originLeftScale;
9824
+ const originTopScale = (origin.y - content.y) / content.height, originBottomScale = 1 - originTopScale;
9825
+ let correctScaleX, correctScaleY, aScale, bScale, aSize, bSize;
9826
+ if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
9827
+ correctScaleX = scale.x < 0 ? 1 / scale.x : 1;
9828
+ if (scale.x < 0) tempContent.scaleOf(origin, correctScaleX, 1);
9829
+ aSize = float$1(tempContent.minX - tempDragBounds.minX);
9830
+ bSize = float$1(tempDragBounds.maxX - tempContent.maxX);
9831
+ aScale = originLeftScale && aSize > 0 ? 1 + aSize / (originLeftScale * tempContent.width) : 1;
9832
+ bScale = originRightScale && bSize > 0 ? 1 + bSize / (originRightScale * tempContent.width) : 1;
9833
+ correctScaleX *= max$3(aScale, bScale);
9834
+ } else {
9835
+ if (scale.x < 0) tempContent.unsign();
9836
+ aSize = float$1(tempDragBounds.minX - tempContent.minX);
9837
+ bSize = float$1(tempContent.maxX - tempDragBounds.maxX);
9838
+ aScale = originLeftScale && aSize > 0 ? 1 - aSize / (originLeftScale * tempContent.width) : 1;
9839
+ bScale = originRightScale && bSize > 0 ? 1 - bSize / (originRightScale * tempContent.width) : 1;
9840
+ correctScaleX = min(aScale, bScale);
9841
+ }
9842
+ if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
9843
+ correctScaleY = scale.y < 0 ? 1 / scale.y : 1;
9844
+ if (scale.y < 0) tempContent.scaleOf(origin, 1, correctScaleY);
9845
+ aSize = float$1(tempContent.minY - tempDragBounds.minY);
9846
+ bSize = float$1(tempDragBounds.maxY - tempContent.maxY);
9847
+ aScale = originTopScale && aSize > 0 ? 1 + aSize / (originTopScale * tempContent.height) : 1;
9848
+ bScale = originBottomScale && bSize > 0 ? 1 + bSize / (originBottomScale * tempContent.height) : 1;
9849
+ correctScaleY *= max$3(aScale, bScale);
9850
+ if (lockRatio) {
9851
+ aScale = max$3(abs$7(correctScaleX), abs$7(correctScaleY));
9852
+ correctScaleX = sign$2(correctScaleX) * aScale;
9853
+ correctScaleY = sign$2(correctScaleY) * aScale;
9854
+ }
9855
+ } else {
9856
+ if (scale.y < 0) tempContent.unsign();
9857
+ aSize = float$1(tempDragBounds.minY - tempContent.minY);
9858
+ bSize = float$1(tempContent.maxY - tempDragBounds.maxY);
9859
+ aScale = originTopScale && aSize > 0 ? 1 - aSize / (originTopScale * tempContent.height) : 1;
9860
+ bScale = originBottomScale && bSize > 0 ? 1 - bSize / (originBottomScale * tempContent.height) : 1;
9861
+ correctScaleY = min(aScale, bScale);
9862
+ }
9863
+ scale.x *= isFinite(correctScaleX) ? correctScaleX : 1;
9864
+ scale.y *= isFinite(correctScaleY) ? correctScaleY : 1;
9865
+ return scale;
9866
+ }
9867
+ };
9868
+
9869
+ const D$2 = DragBoundsHelper;
9870
+
9831
9871
  let PointerEvent = class PointerEvent extends UIEvent {};
9832
9872
 
9833
9873
  PointerEvent.POINTER = "pointer";
@@ -11372,7 +11412,14 @@ const PaintModule = {
11372
11412
 
11373
11413
  let origin$1 = {}, tempMatrix$1 = getMatrixData();
11374
11414
 
11375
- const {get: get$3, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, multiplyParent: multiplyParent, scale: scaleHelper, rotate: rotate$2, skew: skewHelper} = MatrixHelper;
11415
+ const {get: get$3, set: set, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, multiplyParent: multiplyParent, scale: scaleHelper, rotate: rotate$2, skew: skewHelper} = MatrixHelper;
11416
+
11417
+ function stretchMode(data, box, scaleX, scaleY) {
11418
+ const transform = get$3();
11419
+ translate$1(transform, box.x, box.y);
11420
+ if (scaleX) scaleHelper(transform, scaleX, scaleY);
11421
+ data.transform = transform;
11422
+ }
11376
11423
 
11377
11424
  function fillOrFitMode(data, box, x, y, scaleX, scaleY, rotation) {
11378
11425
  const transform = get$3();
@@ -11389,8 +11436,11 @@ function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew, clipScaleX, c
11389
11436
  const transform = get$3();
11390
11437
  layout$3(transform, box, x, y, scaleX, scaleY, rotation, skew);
11391
11438
  if (clipScaleX) {
11392
- tempMatrix$1.a = clipScaleX, tempMatrix$1.d = clipScaleY;
11393
- multiplyParent(transform, tempMatrix$1);
11439
+ if (rotation || skew) {
11440
+ set(tempMatrix$1);
11441
+ scaleOfOuter$1(tempMatrix$1, box, clipScaleX, clipScaleY);
11442
+ multiplyParent(transform, tempMatrix$1);
11443
+ } else scaleOfOuter$1(transform, box, clipScaleX, clipScaleY);
11394
11444
  }
11395
11445
  data.transform = transform;
11396
11446
  }
@@ -11486,7 +11536,10 @@ function getPatternData(paint, box, image) {
11486
11536
  if (offset) PointHelper.move(tempImage, offset);
11487
11537
  switch (mode) {
11488
11538
  case "stretch":
11489
- if (!sameBox) width = box.width, height = box.height;
11539
+ if (!sameBox) {
11540
+ scaleX = box.width / width, scaleY = box.height / height;
11541
+ stretchMode(data, box, scaleX, scaleY);
11542
+ }
11490
11543
  break;
11491
11544
 
11492
11545
  case "normal":
@@ -11495,7 +11548,7 @@ function getPatternData(paint, box, image) {
11495
11548
  let clipScaleX, clipScaleY;
11496
11549
  if (clipSize) clipScaleX = box.width / clipSize.width, clipScaleY = box.height / clipSize.height;
11497
11550
  clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation, skew, clipScaleX, clipScaleY);
11498
- if (clipScaleX) scaleX = scaleX ? scaleX * clipScaleX : scaleX, scaleY = scaleY ? scaleY * clipScaleY : clipScaleY;
11551
+ if (clipScaleX) scaleX = scaleX ? scaleX * clipScaleX : clipScaleX, scaleY = scaleY ? scaleY * clipScaleY : clipScaleY;
11499
11552
  }
11500
11553
  break;
11501
11554
 
@@ -11512,17 +11565,14 @@ function getPatternData(paint, box, image) {
11512
11565
  if (scaleX) fillOrFitMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation);
11513
11566
  }
11514
11567
  if (!data.transform) {
11515
- if (box.x || box.y) {
11516
- data.transform = get$2();
11517
- translate(data.transform, box.x, box.y);
11518
- }
11568
+ if (box.x || box.y) translate(data.transform = get$2(), box.x, box.y);
11519
11569
  }
11520
- if (scaleX && mode !== "stretch") {
11570
+ data.width = width;
11571
+ data.height = height;
11572
+ if (scaleX) {
11521
11573
  data.scaleX = scaleX;
11522
11574
  data.scaleY = scaleY;
11523
11575
  }
11524
- data.width = width;
11525
- data.height = height;
11526
11576
  if (opacity) data.opacity = opacity;
11527
11577
  if (filters) data.filters = filters;
11528
11578
  if (repeat) data.repeat = isString(repeat) ? repeat === "x" ? "repeat-x" : "repeat-y" : "repeat";
@@ -11654,7 +11704,7 @@ function ignoreRender(ui, value) {
11654
11704
 
11655
11705
  const {get: get$1, scale: scale$2, copy: copy$4} = MatrixHelper;
11656
11706
 
11657
- const {floor: floor$1, ceil: ceil$1, max: max$2, abs: abs$4} = Math;
11707
+ const {floor: floor$1, ceil: ceil$1, max: max$2, abs: abs$6} = Math;
11658
11708
 
11659
11709
  function createPattern(ui, paint, pixelRatio) {
11660
11710
  let {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true, paint.scaleFixed);
@@ -11665,8 +11715,8 @@ function createPattern(ui, paint, pixelRatio) {
11665
11715
  scaleX *= pixelRatio;
11666
11716
  scaleY *= pixelRatio;
11667
11717
  if (sx) {
11668
- sx = abs$4(sx);
11669
- sy = abs$4(sy);
11718
+ sx = abs$6(sx);
11719
+ sy = abs$6(sy);
11670
11720
  imageMatrix = get$1();
11671
11721
  copy$4(imageMatrix, transform);
11672
11722
  scale$2(imageMatrix, 1 / sx, 1 / sy);
@@ -11808,6 +11858,7 @@ const PaintImageModule = {
11808
11858
  recycleImage: recycleImage,
11809
11859
  createData: createData,
11810
11860
  getPatternData: getPatternData,
11861
+ stretchMode: stretchMode,
11811
11862
  fillOrFitMode: fillOrFitMode,
11812
11863
  clipMode: clipMode,
11813
11864
  repeatMode: repeatMode
@@ -11918,7 +11969,7 @@ const PaintGradientModule = {
11918
11969
  getTransform: getTransform
11919
11970
  };
11920
11971
 
11921
- const {copy: copy$3, move: move$6, toOffsetOutBounds: toOffsetOutBounds$1} = BoundsHelper, {max: max$1} = Math;
11972
+ const {copy: copy$3, move: move$6, toOffsetOutBounds: toOffsetOutBounds$1} = BoundsHelper, {max: max$1, abs: abs$5} = Math;
11922
11973
 
11923
11974
  const tempBounds = {}, tempMatrix = new Matrix;
11924
11975
 
@@ -11938,8 +11989,8 @@ function shadow$1(ui, current, shape) {
11938
11989
  const sx = Math.abs(nowWorld.scaleX);
11939
11990
  if (sx > 1) otherScale = 1 / sx;
11940
11991
  }
11941
- other.setWorldShadow(offsetOutBounds$1.offsetX + item.x * scaleX * otherScale, offsetOutBounds$1.offsetY + item.y * scaleY * otherScale, item.blur * scaleX * otherScale, ColorConvert.string(item.color));
11942
- transform = getShadowTransform(ui, other, shape, item, offsetOutBounds$1, otherScale);
11992
+ other.setWorldShadow(offsetOutBounds$1.offsetX + (item.x || 0) * scaleX * otherScale, offsetOutBounds$1.offsetY + (item.y || 0) * scaleY * otherScale, (item.blur || 0) * scaleX * otherScale, ColorConvert.string(item.color));
11993
+ transform = Effect.getShadowTransform(ui, other, shape, item, offsetOutBounds$1, otherScale);
11943
11994
  if (transform) other.setTransform(transform);
11944
11995
  drawWorldShadow(other, offsetOutBounds$1, shape);
11945
11996
  if (transform) other.resetTransform();
@@ -11962,7 +12013,7 @@ function shadow$1(ui, current, shape) {
11962
12013
  function getShadowRenderSpread(_ui, shadow) {
11963
12014
  let top = 0, right = 0, bottom = 0, left = 0, x, y, spread, blur;
11964
12015
  shadow.forEach(item => {
11965
- x = item.x || 0, y = item.y || 0, spread = item.spread || 0, blur = (item.blur || 0) * 1.5;
12016
+ x = item.x || 0, y = item.y || 0, blur = (item.blur || 0) * 1.5, spread = abs$5(item.spread || 0);
11966
12017
  top = max$1(top, spread + blur - y);
11967
12018
  right = max$1(right, spread + blur + x);
11968
12019
  bottom = max$1(bottom, spread + blur + y);
@@ -12015,8 +12066,8 @@ function innerShadow(ui, current, shape) {
12015
12066
  if (sx > 1) otherScale = 1 / sx;
12016
12067
  }
12017
12068
  other.save();
12018
- other.setWorldShadow(offsetOutBounds.offsetX + item.x * scaleX * otherScale, offsetOutBounds.offsetY + item.y * scaleY * otherScale, item.blur * scaleX * otherScale);
12019
- transform = getShadowTransform(ui, other, shape, item, offsetOutBounds, otherScale, true);
12069
+ other.setWorldShadow(offsetOutBounds.offsetX + (item.x || 0) * scaleX * otherScale, offsetOutBounds.offsetY + (item.y || 0) * scaleY * otherScale, (item.blur || 0) * scaleX * otherScale);
12070
+ transform = Effect.getShadowTransform(ui, other, shape, item, offsetOutBounds, otherScale, true);
12020
12071
  if (transform) other.setTransform(transform);
12021
12072
  drawWorldShadow(other, offsetOutBounds, shape);
12022
12073
  other.restore();
@@ -12652,6 +12703,7 @@ const TextConvertModule = {
12652
12703
  };
12653
12704
 
12654
12705
  function string(color, opacity) {
12706
+ if (!color) return "#000";
12655
12707
  const doOpacity = isNumber(opacity) && opacity < 1;
12656
12708
  if (isString(color)) {
12657
12709
  if (doOpacity && ColorConvert.object) color = ColorConvert.object(color); else return color;
@@ -12737,7 +12789,10 @@ function targetAttr(fn) {
12737
12789
  t.setDimOthers(false);
12738
12790
  t.setBright(false);
12739
12791
  if (isArray(value) && value.length > 1 && value[0].locked) value.splice(0, 1);
12740
- if (t.single) t.element.syncEventer = null;
12792
+ if (t.single) {
12793
+ delete t.element.syncEventer;
12794
+ delete t.element.__world.ignorePixelSnap;
12795
+ }
12741
12796
  }
12742
12797
  const type = isSelect ? EditorEvent.BEFORE_SELECT : EditorEvent.BEFORE_HOVER;
12743
12798
  if (this.hasEvent(type)) this.emitEvent(new EditorEvent(type, {
@@ -12758,7 +12813,15 @@ function mergeConfigAttr() {
12758
12813
  defineKey(target, key, {
12759
12814
  get() {
12760
12815
  const {config: config, element: element, dragPoint: dragPoint, editBox: editBox, app: app} = this, mergeConfig = Object.assign({}, config);
12761
- if (element && element.editConfig) Object.assign(mergeConfig, element.editConfig);
12816
+ if (element && element.editConfig) {
12817
+ let {editConfig: editConfig} = element;
12818
+ if (editConfig.hover || editConfig.hoverStyle) {
12819
+ editConfig = Object.assign({}, editConfig);
12820
+ delete editConfig.hover;
12821
+ delete editConfig.hoverStyle;
12822
+ }
12823
+ Object.assign(mergeConfig, editConfig);
12824
+ }
12762
12825
  if (editBox.config) Object.assign(mergeConfig, editBox.config);
12763
12826
  if (dragPoint) {
12764
12827
  if (dragPoint.editConfig) Object.assign(mergeConfig, dragPoint.editConfig);
@@ -12775,7 +12838,7 @@ function mergeConfigAttr() {
12775
12838
  };
12776
12839
  }
12777
12840
 
12778
- const {abs: abs$3} = Math;
12841
+ const {abs: abs$4} = Math;
12779
12842
 
12780
12843
  const {copy: copy$2, scale: scale$1} = MatrixHelper;
12781
12844
 
@@ -12818,7 +12881,7 @@ class Stroker extends UI {
12818
12881
  leaf = list[i];
12819
12882
  const {worldTransform: worldTransform, worldRenderBounds: worldRenderBounds} = leaf;
12820
12883
  if (worldRenderBounds.width && worldRenderBounds.height && (!bounds || bounds.hit(worldRenderBounds, options.matrix))) {
12821
- const aScaleX = abs$3(worldTransform.scaleX), aScaleY = abs$3(worldTransform.scaleY);
12884
+ const aScaleX = abs$4(worldTransform.scaleX), aScaleY = abs$4(worldTransform.scaleY);
12822
12885
  copy$2(matrix$1, worldTransform);
12823
12886
  matrix$1.half = strokeWidth % 2;
12824
12887
  if (aScaleX !== aScaleY) {
@@ -12832,7 +12895,7 @@ class Stroker extends UI {
12832
12895
  canvas.setWorld(matrix$1, options.matrix);
12833
12896
  canvas.beginPath();
12834
12897
  if (leaf.__.__useArrow) leaf.__drawPath(canvas); else leaf.__.__pathForRender ? leaf.__drawRenderPath(canvas) : leaf.__drawPathByBox(canvas);
12835
- data.strokeWidth = strokeWidth / abs$3(worldTransform.scaleX);
12898
+ data.strokeWidth = strokeWidth / abs$4(worldTransform.scaleX);
12836
12899
  }
12837
12900
  if (stroke) isString(stroke) ? Paint.stroke(stroke, this, canvas) : Paint.strokes(stroke, this, canvas);
12838
12901
  if (fill) isString(fill) ? Paint.fill(fill, this, canvas) : Paint.fills(fill, this, canvas);
@@ -12944,8 +13007,10 @@ class EditSelect extends Group {
12944
13007
  onHover() {
12945
13008
  const {editor: editor} = this;
12946
13009
  if (this.running && !this.dragging && !editor.dragging) {
12947
- const {stroke: stroke, strokeWidth: strokeWidth, hover: hover, hoverStyle: hoverStyle} = editor.mergeConfig;
12948
- this.hoverStroker.setTarget(hover ? this.editor.hoverTarget : null, Object.assign({
13010
+ const {hoverTarget: hoverTarget, mergeConfig: mergeConfig} = editor, config = Object.assign({}, mergeConfig);
13011
+ if (hoverTarget && hoverTarget.editConfig) Object.assign(config, hoverTarget.editConfig);
13012
+ const {stroke: stroke, strokeWidth: strokeWidth, hover: hover, hoverStyle: hoverStyle} = config;
13013
+ this.hoverStroker.setTarget(hover ? hoverTarget : null, Object.assign({
12949
13014
  stroke: stroke,
12950
13015
  strokeWidth: strokeWidth
12951
13016
  }, hoverStyle || {}));
@@ -13125,13 +13190,11 @@ class EditSelect extends Group {
13125
13190
 
13126
13191
  const {topLeft: topLeft$1, top: top$1, topRight: topRight$1, right: right$2, bottomRight: bottomRight, bottom: bottom$1, bottomLeft: bottomLeft, left: left$2} = Direction9;
13127
13192
 
13128
- const {toPoint: toPoint} = AroundHelper;
13129
-
13130
- const {within: within$3, sign: sign$1} = MathHelper;
13193
+ const {toPoint: toPoint} = AroundHelper, {within: within$3, sign: sign$1} = MathHelper, {abs: abs$3} = Math;
13131
13194
 
13132
13195
  const EditDataHelper = {
13133
13196
  getScaleData(target, startBounds, direction, totalMoveOrScale, lockRatio, around, flipable, scaleMode) {
13134
- let align, origin = {}, scaleX = 1, scaleY = 1;
13197
+ let align, origin = {}, scaleX = 1, scaleY = 1, lockScale;
13135
13198
  const {boxBounds: boxBounds, widthRange: widthRange, heightRange: heightRange, dragBounds: dragBounds, worldBoxBounds: worldBoxBounds} = target;
13136
13199
  const {width: width, height: height} = startBounds;
13137
13200
  const originChangedScaleX = target.scaleX / startBounds.scaleX;
@@ -13201,23 +13264,22 @@ const EditDataHelper = {
13201
13264
  if (lockRatio === "corner" && direction % 2) {
13202
13265
  lockRatio = false;
13203
13266
  } else {
13204
- let scale;
13205
13267
  switch (direction) {
13206
13268
  case top$1:
13207
13269
  case bottom$1:
13208
- scale = scaleY;
13270
+ scaleX = scaleY;
13209
13271
  break;
13210
13272
 
13211
13273
  case left$2:
13212
13274
  case right$2:
13213
- scale = scaleX;
13275
+ scaleY = scaleX;
13214
13276
  break;
13215
13277
 
13216
13278
  default:
13217
- scale = Math.sqrt(Math.abs(scaleX * scaleY));
13279
+ lockScale = Math.sqrt(abs$3(scaleX * scaleY));
13280
+ scaleX = sign$1(scaleX) * lockScale;
13281
+ scaleY = sign$1(scaleY) * lockScale;
13218
13282
  }
13219
- scaleX = scaleX < 0 ? -scale : scale;
13220
- scaleY = scaleY < 0 ? -scale : scale;
13221
13283
  }
13222
13284
  }
13223
13285
  }
@@ -13235,7 +13297,7 @@ const EditDataHelper = {
13235
13297
  x: scaleX,
13236
13298
  y: scaleY
13237
13299
  };
13238
- DragBoundsHelper.limitScaleOf(target, origin, scaleData);
13300
+ DragBoundsHelper.limitScaleOf(target, origin, scaleData, lockRatio);
13239
13301
  scaleX = scaleData.x;
13240
13302
  scaleY = scaleData.y;
13241
13303
  }
@@ -13247,9 +13309,13 @@ const EditDataHelper = {
13247
13309
  const nowHeight = boxBounds.height * target.scaleY;
13248
13310
  scaleY = within$3(nowHeight * scaleY, heightRange) / nowHeight;
13249
13311
  }
13250
- if (useScaleX && Math.abs(scaleX * worldBoxBounds.width) < 1) scaleX = sign$1(scaleX) / worldBoxBounds.width;
13251
- if (useScaleY && Math.abs(scaleY * worldBoxBounds.height) < 1) scaleY = sign$1(scaleY) / worldBoxBounds.height;
13252
- if (lockRatio && scaleX !== scaleY) scaleY = scaleX = Math.min(scaleX, scaleY);
13312
+ if (useScaleX && abs$3(scaleX * worldBoxBounds.width) < 1) scaleX = sign$1(scaleX) / worldBoxBounds.width;
13313
+ if (useScaleY && abs$3(scaleY * worldBoxBounds.height) < 1) scaleY = sign$1(scaleY) / worldBoxBounds.height;
13314
+ if (lockRatio && scaleX !== scaleY) {
13315
+ lockScale = Math.min(abs$3(scaleX), abs$3(scaleY));
13316
+ scaleX = sign$1(scaleX) * lockScale;
13317
+ scaleY = sign$1(scaleY) * lockScale;
13318
+ }
13253
13319
  return {
13254
13320
  origin: origin,
13255
13321
  scaleX: scaleX,
@@ -13499,7 +13565,7 @@ class EditBox extends Group {
13499
13565
  return this.scaleX * this.scaleY < 0;
13500
13566
  }
13501
13567
  get canUse() {
13502
- return this.visible && this.view.visible;
13568
+ return this.app && this.visible && this.view.visible;
13503
13569
  }
13504
13570
  get canGesture() {
13505
13571
  if (!this.canUse) return false;
@@ -13580,7 +13646,7 @@ class EditBox extends Group {
13580
13646
  }
13581
13647
  load() {
13582
13648
  const {target: target, mergeConfig: mergeConfig, single: single, rect: rect, circle: circle, resizePoints: resizePoints, resizeLines: resizeLines} = this;
13583
- const {stroke: stroke, strokeWidth: strokeWidth, resizeLine: resizeLine} = mergeConfig;
13649
+ const {stroke: stroke, strokeWidth: strokeWidth, resizeLine: resizeLine, ignorePixelSnap: ignorePixelSnap} = mergeConfig;
13584
13650
  const pointsStyle = this.getPointsStyle();
13585
13651
  const middlePointsStyle = this.getMiddlePointsStyle();
13586
13652
  this.visible = !target.locked;
@@ -13600,16 +13666,16 @@ class EditBox extends Group {
13600
13666
  strokeWidth: strokeWidth,
13601
13667
  editConfig: editConfig
13602
13668
  }, mergeConfig.rect || {}));
13603
- const syncEventer = single && this.transformTool.editTool;
13604
- rect.hittable = !syncEventer;
13605
- rect.syncEventer = syncEventer && this.editor;
13606
- if (syncEventer) {
13669
+ const rectThrough = isNull(mergeConfig.rectThrough) ? single : mergeConfig.rectThrough;
13670
+ rect.hittable = !rectThrough;
13671
+ if (rectThrough) {
13607
13672
  target.syncEventer = rect;
13608
13673
  this.app.interaction.bottomList = [ {
13609
13674
  target: rect,
13610
13675
  proxy: target
13611
13676
  } ];
13612
13677
  }
13678
+ if (single) DataHelper.stintSet(target.__world, "ignorePixelSnap", ignorePixelSnap);
13613
13679
  updateMoveCursor(this);
13614
13680
  }
13615
13681
  update() {
@@ -16334,6 +16400,69 @@ class HTMLTextData extends ImageData {
16334
16400
  }
16335
16401
  }
16336
16402
 
16403
+ const unicodeEntities = {
16404
+ lt: "<",
16405
+ gt: ">",
16406
+ amp: "&",
16407
+ quot: '"',
16408
+ apos: "'",
16409
+ nbsp: " ",
16410
+ ensp: " ",
16411
+ emsp: " ",
16412
+ thinsp: " ",
16413
+ ndash: "–",
16414
+ mdash: "—",
16415
+ hellip: "…",
16416
+ middot: "·",
16417
+ bull: "•",
16418
+ laquo: "«",
16419
+ raquo: "»",
16420
+ lsquo: "‘",
16421
+ rsquo: "’",
16422
+ ldquo: "“",
16423
+ rdquo: "”",
16424
+ cent: "¢",
16425
+ pound: "£",
16426
+ yen: "¥",
16427
+ euro: "€",
16428
+ times: "×",
16429
+ divide: "÷",
16430
+ plusmn: "±",
16431
+ minus: "−",
16432
+ frac12: "½",
16433
+ frac14: "¼",
16434
+ frac34: "¾",
16435
+ sup2: "²",
16436
+ sup3: "³",
16437
+ deg: "°",
16438
+ reg: "®",
16439
+ copy: "©",
16440
+ trade: "™",
16441
+ section: "§",
16442
+ para: "¶",
16443
+ dagger: "†",
16444
+ Dagger: "‡",
16445
+ larr: "←",
16446
+ uarr: "↑",
16447
+ rarr: "→",
16448
+ darr: "↓",
16449
+ harr: "↔",
16450
+ alpha: "α",
16451
+ beta: "β",
16452
+ gamma: "γ",
16453
+ delta: "δ",
16454
+ pi: "π",
16455
+ sigma: "σ",
16456
+ omega: "ω",
16457
+ Omega: "Ω",
16458
+ micro: "µ",
16459
+ infinity: "∞",
16460
+ not: "¬",
16461
+ equiv: "≡",
16462
+ le: "≤",
16463
+ ge: "≥"
16464
+ };
16465
+
16337
16466
  let HTMLText = class HTMLText extends Image {
16338
16467
  get __tag() {
16339
16468
  return "HTMLText";
@@ -16353,7 +16482,7 @@ let HTMLText = class HTMLText extends Image {
16353
16482
  document.body.appendChild(div);
16354
16483
  const {width: width, height: height} = div.getBoundingClientRect();
16355
16484
  const realWidth = width + 10;
16356
- const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${realWidth}" height="${height}">\n <foreignObject width="${realWidth}" height="${height}">\n <style>\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n </style>\n <body xmlns="http://www.w3.org/1999/xhtml">\n ${this.text}\n </body>\n </foreignObject>\n </svg>`;
16485
+ const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${realWidth}" height="${height}">\n <foreignObject width="${realWidth}" height="${height}">\n <style>\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n </style>\n <body xmlns="http://www.w3.org/1999/xhtml">\n ${this.decodeText(this.text)}\n </body>\n </foreignObject>\n </svg>`;
16357
16486
  data.__setImageFill("data:image/svg+xml," + encodeURIComponent(svg));
16358
16487
  data.__naturalWidth = realWidth / data.pixelRatio;
16359
16488
  data.__naturalHeight = height / data.pixelRatio;
@@ -16366,6 +16495,29 @@ let HTMLText = class HTMLText extends Image {
16366
16495
  if (this.textEditing && !options.exporting) return;
16367
16496
  super.__draw(canvas, options, originCanvas);
16368
16497
  }
16498
+ decodeText(text) {
16499
+ if (!text.includes("&")) return text;
16500
+ let result = "", i = 0, entity, value;
16501
+ while (i < text.length) {
16502
+ if (text[i] === "&") {
16503
+ const semicolonIndex = text.indexOf(";", i + 1);
16504
+ if (semicolonIndex > i + 1) {
16505
+ entity = text.slice(i + 1, semicolonIndex);
16506
+ value = unicodeEntities[entity];
16507
+ if (value !== undefined) {
16508
+ result += value;
16509
+ i = semicolonIndex + 1;
16510
+ continue;
16511
+ }
16512
+ }
16513
+ }
16514
+ result += text[i++];
16515
+ }
16516
+ return result;
16517
+ }
16518
+ static addUnicodeEntity(entity, unicode) {
16519
+ if (isString(entity)) unicodeEntities[entity] = unicode; else Object.assign(unicodeEntities, entity);
16520
+ }
16369
16521
  };
16370
16522
 
16371
16523
  __decorate([ dataProcessor(HTMLTextData) ], HTMLText.prototype, "__", void 0);