@leafer/miniapp 1.9.9 → 1.9.11

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
  },
@@ -3840,7 +3840,12 @@ class TaskProcessor {
3840
3840
  runTask() {
3841
3841
  const task = this.list[this.index];
3842
3842
  if (!task) {
3843
- this.nextTask();
3843
+ this.timer = setTimeout(() => this.nextTask());
3844
+ return;
3845
+ }
3846
+ if (task.isCancel) {
3847
+ this.index++;
3848
+ this.runTask();
3844
3849
  return;
3845
3850
  }
3846
3851
  task.run().then(() => {
@@ -3871,16 +3876,15 @@ class TaskProcessor {
3871
3876
  }
3872
3877
  setParallelList() {
3873
3878
  let task;
3879
+ const {config: config, list: list, index: index} = this;
3874
3880
  this.parallelList = [];
3875
3881
  this.parallelSuccessNumber = 0;
3876
- let end = this.index + this.config.parallel;
3877
- if (end > this.list.length) end = this.list.length;
3878
- for (let i = this.index; i < end; i++) {
3879
- task = this.list[i];
3880
- if (task.parallel) {
3881
- this.parallelList.push(task);
3882
- } else {
3883
- break;
3882
+ let end = index + config.parallel;
3883
+ if (end > list.length) end = list.length;
3884
+ if (config.parallel > 1) {
3885
+ for (let i = index; i < end; i++) {
3886
+ task = list[i];
3887
+ if (task.parallel) this.parallelList.push(task); else break;
3884
3888
  }
3885
3889
  }
3886
3890
  }
@@ -4023,7 +4027,7 @@ const I$1 = ImageManager;
4023
4027
 
4024
4028
  const {IMAGE: IMAGE, create: create$1} = IncrementId;
4025
4029
 
4026
- const {floor: floor$2, max: max$4} = Math;
4030
+ const {floor: floor$2, max: max$5} = Math;
4027
4031
 
4028
4032
  class LeaferImage {
4029
4033
  get url() {
@@ -4112,7 +4116,7 @@ class LeaferImage {
4112
4116
  }
4113
4117
  if (data) return data;
4114
4118
  }
4115
- const canvas = Platform.origin.createCanvas(max$4(floor$2(width + (xGap || 0)), 1), max$4(floor$2(height + (yGap || 0)), 1));
4119
+ const canvas = Platform.origin.createCanvas(max$5(floor$2(width + (xGap || 0)), 1), max$5(floor$2(height + (yGap || 0)), 1));
4116
4120
  const ctx = canvas.getContext("2d");
4117
4121
  if (opacity) ctx.globalAlpha = opacity;
4118
4122
  ctx.imageSmoothingEnabled = smooth === false ? false : true;
@@ -6815,7 +6819,7 @@ class LeafLevelList {
6815
6819
  }
6816
6820
  }
6817
6821
 
6818
- const version = "1.9.9";
6822
+ const version = "1.9.11";
6819
6823
 
6820
6824
  class LeaferCanvas extends LeaferCanvasBase {
6821
6825
  get allowBackgroundColor() {
@@ -7634,7 +7638,7 @@ class Picker {
7634
7638
  children: [ target ]
7635
7639
  } : target);
7636
7640
  const {list: list} = this.findList;
7637
- const leaf = this.getBestMatchLeaf(list, options.bottomList, ignoreHittable);
7641
+ const leaf = this.getBestMatchLeaf(list, options.bottomList, ignoreHittable, !!options.findList);
7638
7642
  const path = ignoreHittable ? this.getPath(leaf) : this.getHitablePath(leaf);
7639
7643
  this.clear();
7640
7644
  return through ? {
@@ -7649,7 +7653,7 @@ class Picker {
7649
7653
  hitPoint(hitPoint, hitRadius, options) {
7650
7654
  return !!this.getByPoint(hitPoint, hitRadius, options).target;
7651
7655
  }
7652
- getBestMatchLeaf(list, bottomList, ignoreHittable) {
7656
+ getBestMatchLeaf(list, bottomList, ignoreHittable, allowNull) {
7653
7657
  const findList = this.findList = new LeafList;
7654
7658
  if (list.length) {
7655
7659
  let find;
@@ -7680,15 +7684,27 @@ class Picker {
7680
7684
  if (findList.length) return findList.list[0];
7681
7685
  }
7682
7686
  }
7687
+ if (allowNull) return null;
7683
7688
  return ignoreHittable ? list[0] : list.find(item => LeafHelper.worldHittable(item));
7684
7689
  }
7685
7690
  getPath(leaf) {
7686
- const path = new LeafList;
7691
+ const path = new LeafList, syncList = [], {target: target} = this;
7687
7692
  while (leaf) {
7693
+ if (leaf.syncEventer) syncList.push(leaf.syncEventer);
7688
7694
  path.add(leaf);
7689
7695
  leaf = leaf.parent;
7696
+ if (leaf === target) break;
7697
+ }
7698
+ if (syncList.length) {
7699
+ syncList.forEach(item => {
7700
+ while (item) {
7701
+ if (item.__.hittable) path.add(item);
7702
+ item = item.parent;
7703
+ if (item === target) break;
7704
+ }
7705
+ });
7690
7706
  }
7691
- if (this.target) path.add(this.target);
7707
+ if (target) path.add(target);
7692
7708
  return path;
7693
7709
  }
7694
7710
  getHitablePath(leaf) {
@@ -8186,12 +8202,12 @@ class ImageData extends RectData {
8186
8202
  }
8187
8203
  __getData() {
8188
8204
  const data = super.__getData();
8189
- delete data.fill;
8205
+ if (data.url) delete data.fill;
8190
8206
  return data;
8191
8207
  }
8192
8208
  __getInputData(names, options) {
8193
8209
  const data = super.__getInputData(names, options);
8194
- delete data.fill;
8210
+ if (data.url) delete data.fill;
8195
8211
  return data;
8196
8212
  }
8197
8213
  }
@@ -8210,7 +8226,7 @@ class CanvasData extends RectData {
8210
8226
  }
8211
8227
  }
8212
8228
 
8213
- const {max: max$3, add: add$1} = FourNumberHelper;
8229
+ const {max: max$4, add: add$1} = FourNumberHelper;
8214
8230
 
8215
8231
  const UIBounds = {
8216
8232
  __updateStrokeSpread() {
@@ -8226,7 +8242,7 @@ const UIBounds = {
8226
8242
  }
8227
8243
  if (data.__useArrow) spread += strokeWidth * 5;
8228
8244
  if (box) {
8229
- spread = max$3(spread, box.__layout.strokeSpread = box.__updateStrokeSpread());
8245
+ spread = max$4(spread, box.__layout.strokeSpread = box.__updateStrokeSpread());
8230
8246
  boxSpread = Math.max(boxSpread, box.__layout.strokeBoxSpread);
8231
8247
  }
8232
8248
  this.__layout.strokeBoxSpread = boxSpread;
@@ -8236,86 +8252,18 @@ const UIBounds = {
8236
8252
  let spread = 0;
8237
8253
  const {shadow: shadow, innerShadow: innerShadow, blur: blur, backgroundBlur: backgroundBlur, filter: filter, renderSpread: renderSpread} = this.__, {strokeSpread: strokeSpread} = this.__layout, box = this.__box;
8238
8254
  if (shadow) spread = Effect.getShadowRenderSpread(this, shadow);
8239
- if (blur) spread = max$3(spread, blur);
8255
+ if (blur) spread = max$4(spread, blur);
8240
8256
  if (filter) spread = add$1(spread, Filter.getSpread(filter));
8241
8257
  if (renderSpread) spread = add$1(spread, renderSpread);
8242
8258
  if (strokeSpread) spread = add$1(spread, strokeSpread);
8243
8259
  let shapeSpread = spread;
8244
- if (innerShadow) shapeSpread = max$3(shapeSpread, Effect.getInnerShadowSpread(this, innerShadow));
8245
- if (backgroundBlur) shapeSpread = max$3(shapeSpread, backgroundBlur);
8260
+ if (innerShadow) shapeSpread = max$4(shapeSpread, Effect.getInnerShadowSpread(this, innerShadow));
8261
+ if (backgroundBlur) shapeSpread = max$4(shapeSpread, backgroundBlur);
8246
8262
  this.__layout.renderShapeSpread = shapeSpread;
8247
- return box ? max$3(box.__updateRenderSpread(), spread) : spread;
8248
- }
8249
- };
8250
-
8251
- const {float: float$1} = MathHelper;
8252
-
8253
- const tempContent = new Bounds, tempMerge = new Bounds, tempIntersect = new Bounds;
8254
-
8255
- const DragBoundsHelper = {
8256
- limitMove(leaf, move) {
8257
- const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
8258
- if (dragBounds) D$2.getValidMove(leaf.__localBoxBounds, D$2.getDragBounds(leaf), dragBoundsType, move, true);
8259
- D$2.axisMove(leaf, move);
8260
- },
8261
- limitScaleOf(leaf, origin, scale) {
8262
- const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
8263
- if (dragBounds) D$2.getValidScaleOf(leaf.__localBoxBounds, D$2.getDragBounds(leaf), dragBoundsType, leaf.getLocalPointByInner(leaf.getInnerPointByBox(origin)), scale, true);
8264
- },
8265
- axisMove(leaf, move) {
8266
- const {draggable: draggable} = leaf;
8267
- if (draggable === "x") move.y = 0;
8268
- if (draggable === "y") move.x = 0;
8269
- },
8270
- getDragBounds(leaf) {
8271
- const {dragBounds: dragBounds} = leaf;
8272
- return dragBounds === "parent" ? leaf.parent.boxBounds : dragBounds;
8273
- },
8274
- isInnerMode(content, dragBounds, dragBoundsType, sideType) {
8275
- return dragBoundsType === "inner" || dragBoundsType === "auto" && content[sideType] > dragBounds[sideType];
8276
- },
8277
- getValidMove(content, dragBounds, dragBoundsType, move, change) {
8278
- const x = content.x + move.x, y = content.y + move.y, right = x + content.width, bottom = y + content.height;
8279
- const boundsRight = dragBounds.x + dragBounds.width, boundsBottom = dragBounds.y + dragBounds.height;
8280
- if (!change) move = Object.assign({}, move);
8281
- if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
8282
- if (x > dragBounds.x) move.x += dragBounds.x - x; else if (right < boundsRight) move.x += boundsRight - right;
8283
- } else {
8284
- if (x < dragBounds.x) move.x += dragBounds.x - x; else if (right > boundsRight) move.x += boundsRight - right;
8285
- }
8286
- if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
8287
- if (y > dragBounds.y) move.y += dragBounds.y - y; else if (bottom < boundsBottom) move.y += boundsBottom - bottom;
8288
- } else {
8289
- if (y < dragBounds.y) move.y += dragBounds.y - y; else if (bottom > boundsBottom) move.y += boundsBottom - bottom;
8290
- }
8291
- move.x = float$1(move.x);
8292
- move.y = float$1(move.y);
8293
- return move;
8294
- },
8295
- getValidScaleOf(content, dragBounds, dragBoundsType, origin, scale, change) {
8296
- if (!change) scale = Object.assign({}, scale);
8297
- let fitScaleX, fitScaleY;
8298
- tempContent.set(content).scaleOf(origin, scale.x, scale.y).unsign();
8299
- tempMerge.set(tempContent).add(dragBounds);
8300
- tempIntersect.set(tempContent).intersect(dragBounds);
8301
- if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
8302
- fitScaleX = tempMerge.width / tempContent.width;
8303
- } else {
8304
- fitScaleX = tempIntersect.width / tempContent.width;
8305
- }
8306
- if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
8307
- fitScaleY = tempMerge.height / tempContent.height;
8308
- } else {
8309
- fitScaleY = tempIntersect.height / tempContent.height;
8310
- }
8311
- scale.x = float$1(tempIntersect.width) ? scale.x * fitScaleX : 1;
8312
- scale.y = float$1(tempIntersect.height) ? scale.y * fitScaleY : 1;
8313
- return scale;
8263
+ return box ? max$4(box.__updateRenderSpread(), spread) : spread;
8314
8264
  }
8315
8265
  };
8316
8266
 
8317
- const D$2 = DragBoundsHelper;
8318
-
8319
8267
  const {stintSet: stintSet$1} = DataHelper;
8320
8268
 
8321
8269
  const UIRender = {
@@ -9981,6 +9929,106 @@ class UIEvent extends Event {
9981
9929
  }
9982
9930
  }
9983
9931
 
9932
+ const {min: min, max: max$3, abs: abs$7} = Math, {float: float$1, sign: sign$2} = MathHelper, {minX: minX, maxX: maxX, minY: minY, maxY: maxY} = BoundsHelper;
9933
+
9934
+ const tempContent = new Bounds, tempDragBounds = new Bounds;
9935
+
9936
+ const DragBoundsHelper = {
9937
+ limitMove(leaf, move) {
9938
+ const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
9939
+ if (dragBounds) D$2.getValidMove(leaf.__localBoxBounds, D$2.getDragBounds(leaf), dragBoundsType, move, true);
9940
+ D$2.axisMove(leaf, move);
9941
+ },
9942
+ limitScaleOf(leaf, origin, scale, lockRatio) {
9943
+ const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
9944
+ if (dragBounds) D$2.getValidScaleOf(leaf.__localBoxBounds, D$2.getDragBounds(leaf), dragBoundsType, leaf.getLocalPointByInner(leaf.getInnerPointByBox(origin)), scale, lockRatio, true);
9945
+ },
9946
+ axisMove(leaf, move) {
9947
+ const {draggable: draggable} = leaf;
9948
+ if (draggable === "x") move.y = 0;
9949
+ if (draggable === "y") move.x = 0;
9950
+ },
9951
+ getDragBounds(leaf) {
9952
+ const {dragBounds: dragBounds} = leaf;
9953
+ return dragBounds === "parent" ? leaf.parent.boxBounds : dragBounds;
9954
+ },
9955
+ isInnerMode(content, dragBounds, dragBoundsType, sideType) {
9956
+ return dragBoundsType === "inner" || dragBoundsType === "auto" && content[sideType] > dragBounds[sideType];
9957
+ },
9958
+ getValidMove(content, dragBounds, dragBoundsType, move, change) {
9959
+ const x = content.x + move.x, y = content.y + move.y, right = x + content.width, bottom = y + content.height;
9960
+ const boundsRight = dragBounds.x + dragBounds.width, boundsBottom = dragBounds.y + dragBounds.height;
9961
+ if (!change) move = Object.assign({}, move);
9962
+ if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
9963
+ if (x > dragBounds.x) move.x += dragBounds.x - x; else if (right < boundsRight) move.x += boundsRight - right;
9964
+ } else {
9965
+ if (x < dragBounds.x) move.x += dragBounds.x - x; else if (right > boundsRight) move.x += boundsRight - right;
9966
+ }
9967
+ if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
9968
+ if (y > dragBounds.y) move.y += dragBounds.y - y; else if (bottom < boundsBottom) move.y += boundsBottom - bottom;
9969
+ } else {
9970
+ if (y < dragBounds.y) move.y += dragBounds.y - y; else if (bottom > boundsBottom) move.y += boundsBottom - bottom;
9971
+ }
9972
+ move.x = float$1(move.x);
9973
+ move.y = float$1(move.y);
9974
+ return move;
9975
+ },
9976
+ getValidScaleOf(content, dragBounds, dragBoundsType, origin, scale, lockRatio, change) {
9977
+ if (!change) scale = Object.assign({}, scale);
9978
+ tempDragBounds.set(dragBounds);
9979
+ tempContent.set(content).scaleOf(origin, scale.x, scale.y);
9980
+ const originLeftScale = (origin.x - content.x) / content.width, originRightScale = 1 - originLeftScale;
9981
+ const originTopScale = (origin.y - content.y) / content.height, originBottomScale = 1 - originTopScale;
9982
+ let correctScaleX = 1, correctScaleY = 1, aScale, bScale, aSize, bSize;
9983
+ if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
9984
+ if (scale.x < 0) tempContent.scaleOf(origin, correctScaleX = 1 / scale.x, 1);
9985
+ aSize = float$1(tempContent.minX - tempDragBounds.minX);
9986
+ bSize = float$1(tempDragBounds.maxX - tempContent.maxX);
9987
+ aScale = originLeftScale && aSize > 0 ? 1 + aSize / (originLeftScale * tempContent.width) : 1;
9988
+ bScale = originRightScale && bSize > 0 ? 1 + bSize / (originRightScale * tempContent.width) : 1;
9989
+ correctScaleX *= max$3(aScale, bScale);
9990
+ } else {
9991
+ if (scale.x < 0) {
9992
+ if (float$1(minX(content) - minX(dragBounds)) <= 0 || float$1(maxX(dragBounds) - maxX(content)) <= 0) tempContent.scaleOf(origin, correctScaleX = 1 / scale.x, 1);
9993
+ tempContent.unsign();
9994
+ }
9995
+ aSize = float$1(tempDragBounds.minX - tempContent.minX);
9996
+ bSize = float$1(tempContent.maxX - tempDragBounds.maxX);
9997
+ aScale = originLeftScale && aSize > 0 ? 1 - aSize / (originLeftScale * tempContent.width) : 1;
9998
+ bScale = originRightScale && bSize > 0 ? 1 - bSize / (originRightScale * tempContent.width) : 1;
9999
+ correctScaleX *= min(aScale, bScale);
10000
+ }
10001
+ if (D$2.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
10002
+ if (scale.y < 0) tempContent.scaleOf(origin, 1, correctScaleY = 1 / scale.y);
10003
+ aSize = float$1(tempContent.minY - tempDragBounds.minY);
10004
+ bSize = float$1(tempDragBounds.maxY - tempContent.maxY);
10005
+ aScale = originTopScale && aSize > 0 ? 1 + aSize / (originTopScale * tempContent.height) : 1;
10006
+ bScale = originBottomScale && bSize > 0 ? 1 + bSize / (originBottomScale * tempContent.height) : 1;
10007
+ correctScaleY *= max$3(aScale, bScale);
10008
+ if (lockRatio) {
10009
+ aScale = max$3(abs$7(correctScaleX), abs$7(correctScaleY));
10010
+ correctScaleX = sign$2(correctScaleX) * aScale;
10011
+ correctScaleY = sign$2(correctScaleY) * aScale;
10012
+ }
10013
+ } else {
10014
+ if (scale.y < 0) {
10015
+ if (float$1(minY(content) - minY(dragBounds)) <= 0 || float$1(maxY(dragBounds) - maxY(content)) <= 0) tempContent.scaleOf(origin, 1, correctScaleY = 1 / scale.y);
10016
+ tempContent.unsign();
10017
+ }
10018
+ aSize = float$1(tempDragBounds.minY - tempContent.minY);
10019
+ bSize = float$1(tempContent.maxY - tempDragBounds.maxY);
10020
+ aScale = originTopScale && aSize > 0 ? 1 - aSize / (originTopScale * tempContent.height) : 1;
10021
+ bScale = originBottomScale && bSize > 0 ? 1 - bSize / (originBottomScale * tempContent.height) : 1;
10022
+ correctScaleY *= min(aScale, bScale);
10023
+ }
10024
+ scale.x *= isFinite(correctScaleX) ? correctScaleX : 1;
10025
+ scale.y *= isFinite(correctScaleY) ? correctScaleY : 1;
10026
+ return scale;
10027
+ }
10028
+ };
10029
+
10030
+ const D$2 = DragBoundsHelper;
10031
+
9984
10032
  let PointerEvent = class PointerEvent extends UIEvent {};
9985
10033
 
9986
10034
  PointerEvent.POINTER = "pointer";
@@ -11051,9 +11099,9 @@ const ui$5 = UI.prototype;
11051
11099
 
11052
11100
  ui$5.__updateHitCanvas = function() {
11053
11101
  if (this.__box) this.__box.__updateHitCanvas();
11054
- const leafer = this.leafer || this.parent && this.parent.leafer;
11055
- if (!leafer) return;
11056
- const data = this.__, {hitCanvasManager: hitCanvasManager} = leafer;
11102
+ const {hitCanvasManager: hitCanvasManager} = this.leafer || this.parent && this.parent.leafer || {};
11103
+ if (!hitCanvasManager) return;
11104
+ const data = this.__;
11057
11105
  const isHitPixelFill = (data.__isAlphaPixelFill || data.__isCanvas) && data.hitFill === "pixel";
11058
11106
  const isHitPixelStroke = data.__isAlphaPixelStroke && data.hitStroke === "pixel";
11059
11107
  const isHitPixel = isHitPixelFill || isHitPixelStroke;
@@ -11637,7 +11685,14 @@ const PaintModule = {
11637
11685
 
11638
11686
  let origin$1 = {}, tempMatrix$1 = getMatrixData();
11639
11687
 
11640
- const {get: get$3, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, multiplyParent: multiplyParent, scale: scaleHelper, rotate: rotate$2, skew: skewHelper} = MatrixHelper;
11688
+ 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;
11689
+
11690
+ function stretchMode(data, box, scaleX, scaleY) {
11691
+ const transform = get$3();
11692
+ translate$1(transform, box.x, box.y);
11693
+ if (scaleX) scaleHelper(transform, scaleX, scaleY);
11694
+ data.transform = transform;
11695
+ }
11641
11696
 
11642
11697
  function fillOrFitMode(data, box, x, y, scaleX, scaleY, rotation) {
11643
11698
  const transform = get$3();
@@ -11654,8 +11709,11 @@ function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew, clipScaleX, c
11654
11709
  const transform = get$3();
11655
11710
  layout$3(transform, box, x, y, scaleX, scaleY, rotation, skew);
11656
11711
  if (clipScaleX) {
11657
- tempMatrix$1.a = clipScaleX, tempMatrix$1.d = clipScaleY;
11658
- multiplyParent(transform, tempMatrix$1);
11712
+ if (rotation || skew) {
11713
+ set(tempMatrix$1);
11714
+ scaleOfOuter$1(tempMatrix$1, box, clipScaleX, clipScaleY);
11715
+ multiplyParent(transform, tempMatrix$1);
11716
+ } else scaleOfOuter$1(transform, box, clipScaleX, clipScaleY);
11659
11717
  }
11660
11718
  data.transform = transform;
11661
11719
  }
@@ -11751,7 +11809,10 @@ function getPatternData(paint, box, image) {
11751
11809
  if (offset) PointHelper.move(tempImage, offset);
11752
11810
  switch (mode) {
11753
11811
  case "stretch":
11754
- if (!sameBox) width = box.width, height = box.height;
11812
+ if (!sameBox) {
11813
+ scaleX = box.width / width, scaleY = box.height / height;
11814
+ stretchMode(data, box, scaleX, scaleY);
11815
+ }
11755
11816
  break;
11756
11817
 
11757
11818
  case "normal":
@@ -11760,7 +11821,7 @@ function getPatternData(paint, box, image) {
11760
11821
  let clipScaleX, clipScaleY;
11761
11822
  if (clipSize) clipScaleX = box.width / clipSize.width, clipScaleY = box.height / clipSize.height;
11762
11823
  clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation, skew, clipScaleX, clipScaleY);
11763
- if (clipScaleX) scaleX = scaleX ? scaleX * clipScaleX : scaleX, scaleY = scaleY ? scaleY * clipScaleY : clipScaleY;
11824
+ if (clipScaleX) scaleX = scaleX ? scaleX * clipScaleX : clipScaleX, scaleY = scaleY ? scaleY * clipScaleY : clipScaleY;
11764
11825
  }
11765
11826
  break;
11766
11827
 
@@ -11777,17 +11838,14 @@ function getPatternData(paint, box, image) {
11777
11838
  if (scaleX) fillOrFitMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation);
11778
11839
  }
11779
11840
  if (!data.transform) {
11780
- if (box.x || box.y) {
11781
- data.transform = get$2();
11782
- translate(data.transform, box.x, box.y);
11783
- }
11841
+ if (box.x || box.y) translate(data.transform = get$2(), box.x, box.y);
11784
11842
  }
11785
- if (scaleX && mode !== "stretch") {
11843
+ data.width = width;
11844
+ data.height = height;
11845
+ if (scaleX) {
11786
11846
  data.scaleX = scaleX;
11787
11847
  data.scaleY = scaleY;
11788
11848
  }
11789
- data.width = width;
11790
- data.height = height;
11791
11849
  if (opacity) data.opacity = opacity;
11792
11850
  if (filters) data.filters = filters;
11793
11851
  if (repeat) data.repeat = isString(repeat) ? repeat === "x" ? "repeat-x" : "repeat-y" : "repeat";
@@ -11919,7 +11977,7 @@ function ignoreRender(ui, value) {
11919
11977
 
11920
11978
  const {get: get$1, scale: scale$2, copy: copy$4} = MatrixHelper;
11921
11979
 
11922
- const {floor: floor$1, ceil: ceil$1, max: max$2, abs: abs$4} = Math;
11980
+ const {floor: floor$1, ceil: ceil$1, max: max$2, abs: abs$6} = Math;
11923
11981
 
11924
11982
  function createPattern(ui, paint, pixelRatio) {
11925
11983
  let {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true, paint.scaleFixed);
@@ -11930,8 +11988,8 @@ function createPattern(ui, paint, pixelRatio) {
11930
11988
  scaleX *= pixelRatio;
11931
11989
  scaleY *= pixelRatio;
11932
11990
  if (sx) {
11933
- sx = abs$4(sx);
11934
- sy = abs$4(sy);
11991
+ sx = abs$6(sx);
11992
+ sy = abs$6(sy);
11935
11993
  imageMatrix = get$1();
11936
11994
  copy$4(imageMatrix, transform);
11937
11995
  scale$2(imageMatrix, 1 / sx, 1 / sy);
@@ -12073,6 +12131,7 @@ const PaintImageModule = {
12073
12131
  recycleImage: recycleImage,
12074
12132
  createData: createData,
12075
12133
  getPatternData: getPatternData,
12134
+ stretchMode: stretchMode,
12076
12135
  fillOrFitMode: fillOrFitMode,
12077
12136
  clipMode: clipMode,
12078
12137
  repeatMode: repeatMode
@@ -12183,7 +12242,7 @@ const PaintGradientModule = {
12183
12242
  getTransform: getTransform
12184
12243
  };
12185
12244
 
12186
- const {copy: copy$3, move: move$6, toOffsetOutBounds: toOffsetOutBounds$1} = BoundsHelper, {max: max$1} = Math;
12245
+ const {copy: copy$3, move: move$6, toOffsetOutBounds: toOffsetOutBounds$1} = BoundsHelper, {max: max$1, abs: abs$5} = Math;
12187
12246
 
12188
12247
  const tempBounds = {}, tempMatrix = new Matrix;
12189
12248
 
@@ -12227,7 +12286,7 @@ function shadow$1(ui, current, shape) {
12227
12286
  function getShadowRenderSpread(_ui, shadow) {
12228
12287
  let top = 0, right = 0, bottom = 0, left = 0, x, y, spread, blur;
12229
12288
  shadow.forEach(item => {
12230
- x = item.x || 0, y = item.y || 0, spread = item.spread || 0, blur = (item.blur || 0) * 1.5;
12289
+ x = item.x || 0, y = item.y || 0, blur = (item.blur || 0) * 1.5, spread = abs$5(item.spread || 0);
12231
12290
  top = max$1(top, spread + blur - y);
12232
12291
  right = max$1(right, spread + blur + x);
12233
12292
  bottom = max$1(bottom, spread + blur + y);
@@ -12238,11 +12297,11 @@ function getShadowRenderSpread(_ui, shadow) {
12238
12297
 
12239
12298
  function getShadowTransform(ui, canvas, _shape, shadow, outBounds, otherScale, isInnerShaodw) {
12240
12299
  if (shadow.spread) {
12241
- const spreadScale = 1 + shadow.spread * 2 / ui.__layout.strokeBounds.width * otherScale * (isInnerShaodw ? -1 : 1);
12300
+ const spread = shadow.spread * 2 * otherScale * (isInnerShaodw ? -1 : 1), {width: width, height: height} = ui.__layout.strokeBounds;
12242
12301
  tempMatrix.set().scaleOfOuter({
12243
12302
  x: (outBounds.x + outBounds.width / 2) * canvas.pixelRatio,
12244
12303
  y: (outBounds.y + outBounds.height / 2) * canvas.pixelRatio
12245
- }, spreadScale);
12304
+ }, 1 + spread / width, 1 + spread / height);
12246
12305
  return tempMatrix;
12247
12306
  }
12248
12307
  return undefined;
@@ -13009,7 +13068,10 @@ function targetAttr(fn) {
13009
13068
  t.setDimOthers(false);
13010
13069
  t.setBright(false);
13011
13070
  if (isArray(value) && value.length > 1 && value[0].locked) value.splice(0, 1);
13012
- if (t.single) t.element.syncEventer = null;
13071
+ if (t.single) {
13072
+ delete t.element.syncEventer;
13073
+ delete t.element.__world.ignorePixelSnap;
13074
+ }
13013
13075
  }
13014
13076
  const type = isSelect ? EditorEvent.BEFORE_SELECT : EditorEvent.BEFORE_HOVER;
13015
13077
  if (this.hasEvent(type)) this.emitEvent(new EditorEvent(type, {
@@ -13030,7 +13092,15 @@ function mergeConfigAttr() {
13030
13092
  defineKey(target, key, {
13031
13093
  get() {
13032
13094
  const {config: config, element: element, dragPoint: dragPoint, editBox: editBox, app: app} = this, mergeConfig = Object.assign({}, config);
13033
- if (element && element.editConfig) Object.assign(mergeConfig, element.editConfig);
13095
+ if (element && element.editConfig) {
13096
+ let {editConfig: editConfig} = element;
13097
+ if (editConfig.hover || editConfig.hoverStyle) {
13098
+ editConfig = Object.assign({}, editConfig);
13099
+ delete editConfig.hover;
13100
+ delete editConfig.hoverStyle;
13101
+ }
13102
+ Object.assign(mergeConfig, editConfig);
13103
+ }
13034
13104
  if (editBox.config) Object.assign(mergeConfig, editBox.config);
13035
13105
  if (dragPoint) {
13036
13106
  if (dragPoint.editConfig) Object.assign(mergeConfig, dragPoint.editConfig);
@@ -13047,7 +13117,7 @@ function mergeConfigAttr() {
13047
13117
  };
13048
13118
  }
13049
13119
 
13050
- const {abs: abs$3} = Math;
13120
+ const {abs: abs$4} = Math;
13051
13121
 
13052
13122
  const {copy: copy$2, scale: scale$1} = MatrixHelper;
13053
13123
 
@@ -13090,7 +13160,7 @@ class Stroker extends UI {
13090
13160
  leaf = list[i];
13091
13161
  const {worldTransform: worldTransform, worldRenderBounds: worldRenderBounds} = leaf;
13092
13162
  if (worldRenderBounds.width && worldRenderBounds.height && (!bounds || bounds.hit(worldRenderBounds, options.matrix))) {
13093
- const aScaleX = abs$3(worldTransform.scaleX), aScaleY = abs$3(worldTransform.scaleY);
13163
+ const aScaleX = abs$4(worldTransform.scaleX), aScaleY = abs$4(worldTransform.scaleY);
13094
13164
  copy$2(matrix$1, worldTransform);
13095
13165
  matrix$1.half = strokeWidth % 2;
13096
13166
  if (aScaleX !== aScaleY) {
@@ -13104,7 +13174,7 @@ class Stroker extends UI {
13104
13174
  canvas.setWorld(matrix$1, options.matrix);
13105
13175
  canvas.beginPath();
13106
13176
  if (leaf.__.__useArrow) leaf.__drawPath(canvas); else leaf.__.__pathForRender ? leaf.__drawRenderPath(canvas) : leaf.__drawPathByBox(canvas);
13107
- data.strokeWidth = strokeWidth / abs$3(worldTransform.scaleX);
13177
+ data.strokeWidth = strokeWidth / abs$4(worldTransform.scaleX);
13108
13178
  }
13109
13179
  if (stroke) isString(stroke) ? Paint.stroke(stroke, this, canvas) : Paint.strokes(stroke, this, canvas);
13110
13180
  if (fill) isString(fill) ? Paint.fill(fill, this, canvas) : Paint.fills(fill, this, canvas);
@@ -13216,8 +13286,10 @@ class EditSelect extends Group {
13216
13286
  onHover() {
13217
13287
  const {editor: editor} = this;
13218
13288
  if (this.running && !this.dragging && !editor.dragging) {
13219
- const {stroke: stroke, strokeWidth: strokeWidth, hover: hover, hoverStyle: hoverStyle} = editor.mergeConfig;
13220
- this.hoverStroker.setTarget(hover ? this.editor.hoverTarget : null, Object.assign({
13289
+ const {hoverTarget: hoverTarget, mergeConfig: mergeConfig} = editor, config = Object.assign({}, mergeConfig);
13290
+ if (hoverTarget && hoverTarget.editConfig) Object.assign(config, hoverTarget.editConfig);
13291
+ const {stroke: stroke, strokeWidth: strokeWidth, hover: hover, hoverStyle: hoverStyle} = config;
13292
+ this.hoverStroker.setTarget(hover ? hoverTarget : null, Object.assign({
13221
13293
  stroke: stroke,
13222
13294
  strokeWidth: strokeWidth
13223
13295
  }, hoverStyle || {}));
@@ -13397,13 +13469,11 @@ class EditSelect extends Group {
13397
13469
 
13398
13470
  const {topLeft: topLeft$1, top: top$1, topRight: topRight$1, right: right$2, bottomRight: bottomRight, bottom: bottom$1, bottomLeft: bottomLeft, left: left$2} = Direction9;
13399
13471
 
13400
- const {toPoint: toPoint} = AroundHelper;
13401
-
13402
- const {within: within$3, sign: sign$1} = MathHelper;
13472
+ const {toPoint: toPoint} = AroundHelper, {within: within$3, sign: sign$1} = MathHelper, {abs: abs$3} = Math;
13403
13473
 
13404
13474
  const EditDataHelper = {
13405
13475
  getScaleData(target, startBounds, direction, totalMoveOrScale, lockRatio, around, flipable, scaleMode) {
13406
- let align, origin = {}, scaleX = 1, scaleY = 1;
13476
+ let align, origin = {}, scaleX = 1, scaleY = 1, lockScale;
13407
13477
  const {boxBounds: boxBounds, widthRange: widthRange, heightRange: heightRange, dragBounds: dragBounds, worldBoxBounds: worldBoxBounds} = target;
13408
13478
  const {width: width, height: height} = startBounds;
13409
13479
  const originChangedScaleX = target.scaleX / startBounds.scaleX;
@@ -13473,23 +13543,22 @@ const EditDataHelper = {
13473
13543
  if (lockRatio === "corner" && direction % 2) {
13474
13544
  lockRatio = false;
13475
13545
  } else {
13476
- let scale;
13477
13546
  switch (direction) {
13478
13547
  case top$1:
13479
13548
  case bottom$1:
13480
- scale = scaleY;
13549
+ scaleX = scaleY;
13481
13550
  break;
13482
13551
 
13483
13552
  case left$2:
13484
13553
  case right$2:
13485
- scale = scaleX;
13554
+ scaleY = scaleX;
13486
13555
  break;
13487
13556
 
13488
13557
  default:
13489
- scale = Math.sqrt(Math.abs(scaleX * scaleY));
13558
+ lockScale = Math.sqrt(abs$3(scaleX * scaleY));
13559
+ scaleX = sign$1(scaleX) * lockScale;
13560
+ scaleY = sign$1(scaleY) * lockScale;
13490
13561
  }
13491
- scaleX = scaleX < 0 ? -scale : scale;
13492
- scaleY = scaleY < 0 ? -scale : scale;
13493
13562
  }
13494
13563
  }
13495
13564
  }
@@ -13507,7 +13576,7 @@ const EditDataHelper = {
13507
13576
  x: scaleX,
13508
13577
  y: scaleY
13509
13578
  };
13510
- DragBoundsHelper.limitScaleOf(target, origin, scaleData);
13579
+ DragBoundsHelper.limitScaleOf(target, origin, scaleData, lockRatio);
13511
13580
  scaleX = scaleData.x;
13512
13581
  scaleY = scaleData.y;
13513
13582
  }
@@ -13519,9 +13588,13 @@ const EditDataHelper = {
13519
13588
  const nowHeight = boxBounds.height * target.scaleY;
13520
13589
  scaleY = within$3(nowHeight * scaleY, heightRange) / nowHeight;
13521
13590
  }
13522
- if (useScaleX && Math.abs(scaleX * worldBoxBounds.width) < 1) scaleX = sign$1(scaleX) / worldBoxBounds.width;
13523
- if (useScaleY && Math.abs(scaleY * worldBoxBounds.height) < 1) scaleY = sign$1(scaleY) / worldBoxBounds.height;
13524
- if (lockRatio && scaleX !== scaleY) scaleY = scaleX = Math.min(scaleX, scaleY);
13591
+ if (useScaleX && abs$3(scaleX * worldBoxBounds.width) < 1) scaleX = sign$1(scaleX) / worldBoxBounds.width;
13592
+ if (useScaleY && abs$3(scaleY * worldBoxBounds.height) < 1) scaleY = sign$1(scaleY) / worldBoxBounds.height;
13593
+ if (lockRatio && scaleX !== scaleY) {
13594
+ lockScale = Math.min(abs$3(scaleX), abs$3(scaleY));
13595
+ scaleX = sign$1(scaleX) * lockScale;
13596
+ scaleY = sign$1(scaleY) * lockScale;
13597
+ }
13525
13598
  return {
13526
13599
  origin: origin,
13527
13600
  scaleX: scaleX,
@@ -13771,7 +13844,7 @@ class EditBox extends Group {
13771
13844
  return this.scaleX * this.scaleY < 0;
13772
13845
  }
13773
13846
  get canUse() {
13774
- return this.visible && this.view.visible;
13847
+ return this.app && this.editor.editing;
13775
13848
  }
13776
13849
  get canGesture() {
13777
13850
  if (!this.canUse) return false;
@@ -13852,7 +13925,7 @@ class EditBox extends Group {
13852
13925
  }
13853
13926
  load() {
13854
13927
  const {target: target, mergeConfig: mergeConfig, single: single, rect: rect, circle: circle, resizePoints: resizePoints, resizeLines: resizeLines} = this;
13855
- const {stroke: stroke, strokeWidth: strokeWidth, resizeLine: resizeLine} = mergeConfig;
13928
+ const {stroke: stroke, strokeWidth: strokeWidth, resizeLine: resizeLine, ignorePixelSnap: ignorePixelSnap} = mergeConfig;
13856
13929
  const pointsStyle = this.getPointsStyle();
13857
13930
  const middlePointsStyle = this.getMiddlePointsStyle();
13858
13931
  this.visible = !target.locked;
@@ -13872,16 +13945,16 @@ class EditBox extends Group {
13872
13945
  strokeWidth: strokeWidth,
13873
13946
  editConfig: editConfig
13874
13947
  }, mergeConfig.rect || {}));
13875
- const syncEventer = single && this.transformTool.editTool;
13876
- rect.hittable = !syncEventer;
13877
- rect.syncEventer = syncEventer && this.editor;
13878
- if (syncEventer) {
13948
+ const rectThrough = isNull(mergeConfig.rectThrough) ? single : mergeConfig.rectThrough;
13949
+ rect.hittable = !rectThrough;
13950
+ if (rectThrough) {
13879
13951
  target.syncEventer = rect;
13880
13952
  this.app.interaction.bottomList = [ {
13881
13953
  target: rect,
13882
13954
  proxy: target
13883
13955
  } ];
13884
13956
  }
13957
+ if (single) DataHelper.stintSet(target.__world, "ignorePixelSnap", ignorePixelSnap);
13885
13958
  updateMoveCursor(this);
13886
13959
  }
13887
13960
  update() {
@@ -14045,29 +14118,25 @@ class EditBox extends Group {
14045
14118
  this.dragPoint = null;
14046
14119
  }
14047
14120
  onTransformStart(e) {
14048
- if (this.canUse) {
14049
- if (this.moving) this.editor.opacity = this.mergedConfig.hideOnMove ? 0 : 1;
14050
- if (this.resizing) ResizeEvent.resizingKeys = this.editor.leafList.keys;
14051
- const {dragStartData: dragStartData, target: target} = this;
14052
- dragStartData.x = e.x;
14053
- dragStartData.y = e.y;
14054
- dragStartData.totalOffset = getPointData();
14055
- dragStartData.point = {
14056
- x: target.x,
14057
- y: target.y
14058
- };
14059
- dragStartData.bounds = Object.assign({}, target.getLayoutBounds("box", "local"));
14060
- dragStartData.rotation = target.rotation;
14061
- }
14121
+ if (this.moving) this.editor.opacity = this.mergedConfig.hideOnMove ? 0 : 1;
14122
+ if (this.resizing) ResizeEvent.resizingKeys = this.editor.leafList.keys;
14123
+ const {dragStartData: dragStartData, target: target} = this;
14124
+ dragStartData.x = e.x;
14125
+ dragStartData.y = e.y;
14126
+ dragStartData.totalOffset = getPointData();
14127
+ dragStartData.point = {
14128
+ x: target.x,
14129
+ y: target.y
14130
+ };
14131
+ dragStartData.bounds = Object.assign({}, target.getLayoutBounds("box", "local"));
14132
+ dragStartData.rotation = target.rotation;
14062
14133
  }
14063
14134
  onTransformEnd(e) {
14064
- if (this.canUse) {
14065
- if (this.canDragLimitAnimate && (e instanceof DragEvent || e instanceof MoveEvent)) this.transformTool.onMove(e);
14066
- if (this.resizing) ResizeEvent.resizingKeys = null;
14067
- this.dragging = this.gesturing = this.moving = this.resizing = this.rotating = this.skewing = false;
14068
- this.editor.opacity = 1;
14069
- this.update();
14070
- }
14135
+ if (this.canDragLimitAnimate && (e instanceof DragEvent || e instanceof MoveEvent)) this.transformTool.onMove(e);
14136
+ if (this.resizing) ResizeEvent.resizingKeys = null;
14137
+ this.dragging = this.gesturing = this.moving = this.resizing = this.rotating = this.skewing = false;
14138
+ this.editor.opacity = 1;
14139
+ this.editor.update();
14071
14140
  }
14072
14141
  onMove(e) {
14073
14142
  if (this.canGesture && e.moveType !== "drag") {
@@ -14096,6 +14165,12 @@ class EditBox extends Group {
14096
14165
  }
14097
14166
  }
14098
14167
  }
14168
+ onGestureStart(e) {
14169
+ if (this.canGesture && e.moveType !== "drag") this.onTransformStart(e);
14170
+ }
14171
+ onGestureEnd(e) {
14172
+ if (this.canGesture && e.moveType !== "drag") this.onTransformEnd(e);
14173
+ }
14099
14174
  isHoldRotateKey(e) {
14100
14175
  const {rotateKey: rotateKey} = this.mergedConfig;
14101
14176
  if (rotateKey) return e.isHoldKeys(rotateKey);
@@ -14165,7 +14240,7 @@ class EditBox extends Group {
14165
14240
  const {rect: rect, editor: editor, __eventIds: events} = this;
14166
14241
  events.push(rect.on_([ [ PointerEvent.DOUBLE_TAP, this.onDoubleTap, this ], [ PointerEvent.LONG_PRESS, this.onLongPress, this ] ]));
14167
14242
  this.waitLeafer(() => {
14168
- events.push(editor.app.on_([ [ [ KeyEvent.HOLD, KeyEvent.UP ], this.onKey, this ], [ KeyEvent.DOWN, this.onArrow, this ], [ [ MoveEvent.START, MoveEvent.BEFORE_MOVE ], this.onMove, this, true ], [ [ ZoomEvent.START, ZoomEvent.BEFORE_ZOOM ], this.onScale, this, true ], [ [ RotateEvent.START, RotateEvent.BEFORE_ROTATE ], this.onRotate, this, true ], [ [ MoveEvent.END, ZoomEvent.END, RotateEvent.END ], this.onTransformEnd, this ] ]));
14243
+ events.push(editor.app.on_([ [ [ KeyEvent.HOLD, KeyEvent.UP ], this.onKey, this ], [ KeyEvent.DOWN, this.onArrow, this ], [ MoveEvent.BEFORE_MOVE, this.onMove, this, true ], [ ZoomEvent.BEFORE_ZOOM, this.onScale, this, true ], [ RotateEvent.BEFORE_ROTATE, this.onRotate, this, true ], [ [ MoveEvent.START, ZoomEvent.START, RotateEvent.START ], this.onGestureStart, this ], [ [ MoveEvent.END, ZoomEvent.END, RotateEvent.END ], this.onGestureEnd, this ] ]));
14169
14244
  });
14170
14245
  }
14171
14246
  __removeListenEvents() {