leafer-ui 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$4} = Math, tempFour = [ 0, 0, 0, 0 ];
252
+ const {max: max$5} = 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$4(t, other);
304
+ if (isNumber(t) && isNumber(other)) return max$5(t, other);
305
305
  toTempAB(t, other, change);
306
- return set$1(tempTo, max$4(tempA[0], tempB[0]), max$4(tempA[1], tempB[1]), max$4(tempA[2], tempB[2]), max$4(tempA[3], tempB[3]));
306
+ return set$2(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]));
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$3, pow: pow$1, PI: PI$3} = Math;
324
324
 
@@ -720,7 +720,7 @@ const M$6 = MatrixHelper;
720
720
 
721
721
  const {toInnerPoint: toInnerPoint$2, toOuterPoint: toOuterPoint$3} = MatrixHelper;
722
722
 
723
- const {sin: sin$4, cos: cos$4, abs: abs$3, sqrt: sqrt$2, atan2: atan2$2, min: min$1, round: round$2} = Math;
723
+ const {sin: sin$4, cos: cos$4, abs: abs$5, sqrt: sqrt$2, atan2: atan2$2, min: min$2, round: round$2} = 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$3(x2 - x1);
817
- const y = abs$3(y2 - y1);
816
+ const x = abs$5(x2 - x1);
817
+ const y = abs$5(y2 - y1);
818
818
  return sqrt$2(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$3, cos: cos$3, hypot: hypot, atan2: atan2$1, ceil: ceil$1, abs: abs$2, PI: PI$2, sqrt: sqrt$1, pow: pow} = Math;
2595
+ const {sin: sin$3, cos: cos$3, hypot: hypot, atan2: atan2$1, ceil: ceil$1, abs: abs$4, PI: PI$2, sqrt: sqrt$1, pow: pow} = Math;
2596
2596
 
2597
2597
  const {setPoint: setPoint$1, addPoint: addPoint$1} = TwoPointBoundsHelper;
2598
2598
 
2599
- const {set: set, toNumberPoints: toNumberPoints} = PointHelper;
2599
+ const {set: set$1, toNumberPoints: toNumberPoints} = PointHelper;
2600
2600
 
2601
2601
  const {M: M$5, L: L$6, C: C$4, Q: Q$4, Z: Z$5} = 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$2(totalRadian - PI$2) < 1e-12) {
2670
+ if (lenBA < 1e-12 || lenCB < 1e-12 || totalRadian < 1e-12 || abs$4(totalRadian - PI$2) < 1e-12) {
2671
2671
  if (data) data.push(L$6, x1, y1);
2672
2672
  if (setPointBounds) {
2673
2673
  setPoint$1(setPointBounds, fromX, fromY);
2674
2674
  addPoint$1(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$1(abs$2(totalRadian / PI_2));
2703
+ const parts = ceil$1(abs$4(totalRadian / PI_2));
2704
2704
  const partRadian = totalRadian / parts;
2705
2705
  const partRadian4Sin = sin$3(partRadian / 4);
2706
2706
  const control = 8 / 3 * partRadian4Sin * partRadian4Sin / sin$3(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$6 : M$5, fromX, fromY);
2716
2716
  if (setPointBounds) setPoint$1(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$3(endRadian);
2720
2720
  endSin = sin$3(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$4, (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$3, L: L$4, C: C$2, Q: Q$2, Z: Z$3, N: N$2, D: D$3, X: X$2, G: G$2, F
3167
3167
 
3168
3168
  const {getMinDistanceFrom: getMinDistanceFrom, getRadianFrom: getRadianFrom} = PointHelper;
3169
3169
 
3170
- const {tan: tan, min: min, abs: abs$1} = Math;
3170
+ const {tan: tan, min: min$1, abs: abs$3} = 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$1(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3228
+ radius = min$1(radius, min$1(d / 2, d / 2 * abs$3(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3229
3229
  }
3230
3230
  data.push(U$2, 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$1, max: max$3} = Math;
4026
+ const {floor: floor$1, max: max$4} = 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$3(floor$1(width + (xGap || 0)), 1), max$3(floor$1(height + (yGap || 0)), 1));
4115
+ const canvas = Platform.origin.createCanvas(max$4(floor$1(width + (xGap || 0)), 1), max$4(floor$1(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
  const debug$5 = Debug.get("LeaferCanvas");
6821
6821
 
@@ -7687,7 +7687,7 @@ class Picker {
7687
7687
  children: [ target ]
7688
7688
  } : target);
7689
7689
  const {list: list} = this.findList;
7690
- const leaf = this.getBestMatchLeaf(list, options.bottomList, ignoreHittable);
7690
+ const leaf = this.getBestMatchLeaf(list, options.bottomList, ignoreHittable, !!options.findList);
7691
7691
  const path = ignoreHittable ? this.getPath(leaf) : this.getHitablePath(leaf);
7692
7692
  this.clear();
7693
7693
  return through ? {
@@ -7702,7 +7702,7 @@ class Picker {
7702
7702
  hitPoint(hitPoint, hitRadius, options) {
7703
7703
  return !!this.getByPoint(hitPoint, hitRadius, options).target;
7704
7704
  }
7705
- getBestMatchLeaf(list, bottomList, ignoreHittable) {
7705
+ getBestMatchLeaf(list, bottomList, ignoreHittable, allowNull) {
7706
7706
  const findList = this.findList = new LeafList;
7707
7707
  if (list.length) {
7708
7708
  let find;
@@ -7733,15 +7733,27 @@ class Picker {
7733
7733
  if (findList.length) return findList.list[0];
7734
7734
  }
7735
7735
  }
7736
+ if (allowNull) return null;
7736
7737
  return ignoreHittable ? list[0] : list.find(item => LeafHelper.worldHittable(item));
7737
7738
  }
7738
7739
  getPath(leaf) {
7739
- const path = new LeafList;
7740
+ const path = new LeafList, syncList = [], {target: target} = this;
7740
7741
  while (leaf) {
7742
+ if (leaf.syncEventer) syncList.push(leaf.syncEventer);
7741
7743
  path.add(leaf);
7742
7744
  leaf = leaf.parent;
7745
+ if (leaf === target) break;
7746
+ }
7747
+ if (syncList.length) {
7748
+ syncList.forEach(item => {
7749
+ while (item) {
7750
+ if (item.__.hittable) path.add(item);
7751
+ item = item.parent;
7752
+ if (item === target) break;
7753
+ }
7754
+ });
7743
7755
  }
7744
- if (this.target) path.add(this.target);
7756
+ if (target) path.add(target);
7745
7757
  return path;
7746
7758
  }
7747
7759
  getHitablePath(leaf) {
@@ -8239,12 +8251,12 @@ class ImageData extends RectData {
8239
8251
  }
8240
8252
  __getData() {
8241
8253
  const data = super.__getData();
8242
- delete data.fill;
8254
+ if (data.url) delete data.fill;
8243
8255
  return data;
8244
8256
  }
8245
8257
  __getInputData(names, options) {
8246
8258
  const data = super.__getInputData(names, options);
8247
- delete data.fill;
8259
+ if (data.url) delete data.fill;
8248
8260
  return data;
8249
8261
  }
8250
8262
  }
@@ -8263,7 +8275,7 @@ class CanvasData extends RectData {
8263
8275
  }
8264
8276
  }
8265
8277
 
8266
- const {max: max$2, add: add$1} = FourNumberHelper;
8278
+ const {max: max$3, add: add$1} = FourNumberHelper;
8267
8279
 
8268
8280
  const UIBounds = {
8269
8281
  __updateStrokeSpread() {
@@ -8279,7 +8291,7 @@ const UIBounds = {
8279
8291
  }
8280
8292
  if (data.__useArrow) spread += strokeWidth * 5;
8281
8293
  if (box) {
8282
- spread = max$2(spread, box.__layout.strokeSpread = box.__updateStrokeSpread());
8294
+ spread = max$3(spread, box.__layout.strokeSpread = box.__updateStrokeSpread());
8283
8295
  boxSpread = Math.max(boxSpread, box.__layout.strokeBoxSpread);
8284
8296
  }
8285
8297
  this.__layout.strokeBoxSpread = boxSpread;
@@ -8289,86 +8301,18 @@ const UIBounds = {
8289
8301
  let spread = 0;
8290
8302
  const {shadow: shadow, innerShadow: innerShadow, blur: blur, backgroundBlur: backgroundBlur, filter: filter, renderSpread: renderSpread} = this.__, {strokeSpread: strokeSpread} = this.__layout, box = this.__box;
8291
8303
  if (shadow) spread = Effect.getShadowRenderSpread(this, shadow);
8292
- if (blur) spread = max$2(spread, blur);
8304
+ if (blur) spread = max$3(spread, blur);
8293
8305
  if (filter) spread = add$1(spread, Filter.getSpread(filter));
8294
8306
  if (renderSpread) spread = add$1(spread, renderSpread);
8295
8307
  if (strokeSpread) spread = add$1(spread, strokeSpread);
8296
8308
  let shapeSpread = spread;
8297
- if (innerShadow) shapeSpread = max$2(shapeSpread, Effect.getInnerShadowSpread(this, innerShadow));
8298
- if (backgroundBlur) shapeSpread = max$2(shapeSpread, backgroundBlur);
8309
+ if (innerShadow) shapeSpread = max$3(shapeSpread, Effect.getInnerShadowSpread(this, innerShadow));
8310
+ if (backgroundBlur) shapeSpread = max$3(shapeSpread, backgroundBlur);
8299
8311
  this.__layout.renderShapeSpread = shapeSpread;
8300
- return box ? max$2(box.__updateRenderSpread(), spread) : spread;
8301
- }
8302
- };
8303
-
8304
- const {float: float} = MathHelper;
8305
-
8306
- const tempContent = new Bounds, tempMerge = new Bounds, tempIntersect = new Bounds;
8307
-
8308
- const DragBoundsHelper = {
8309
- limitMove(leaf, move) {
8310
- const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
8311
- if (dragBounds) D.getValidMove(leaf.__localBoxBounds, D.getDragBounds(leaf), dragBoundsType, move, true);
8312
- D.axisMove(leaf, move);
8313
- },
8314
- limitScaleOf(leaf, origin, scale) {
8315
- const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
8316
- if (dragBounds) D.getValidScaleOf(leaf.__localBoxBounds, D.getDragBounds(leaf), dragBoundsType, leaf.getLocalPointByInner(leaf.getInnerPointByBox(origin)), scale, true);
8317
- },
8318
- axisMove(leaf, move) {
8319
- const {draggable: draggable} = leaf;
8320
- if (draggable === "x") move.y = 0;
8321
- if (draggable === "y") move.x = 0;
8322
- },
8323
- getDragBounds(leaf) {
8324
- const {dragBounds: dragBounds} = leaf;
8325
- return dragBounds === "parent" ? leaf.parent.boxBounds : dragBounds;
8326
- },
8327
- isInnerMode(content, dragBounds, dragBoundsType, sideType) {
8328
- return dragBoundsType === "inner" || dragBoundsType === "auto" && content[sideType] > dragBounds[sideType];
8329
- },
8330
- getValidMove(content, dragBounds, dragBoundsType, move, change) {
8331
- const x = content.x + move.x, y = content.y + move.y, right = x + content.width, bottom = y + content.height;
8332
- const boundsRight = dragBounds.x + dragBounds.width, boundsBottom = dragBounds.y + dragBounds.height;
8333
- if (!change) move = Object.assign({}, move);
8334
- if (D.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
8335
- if (x > dragBounds.x) move.x += dragBounds.x - x; else if (right < boundsRight) move.x += boundsRight - right;
8336
- } else {
8337
- if (x < dragBounds.x) move.x += dragBounds.x - x; else if (right > boundsRight) move.x += boundsRight - right;
8338
- }
8339
- if (D.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
8340
- if (y > dragBounds.y) move.y += dragBounds.y - y; else if (bottom < boundsBottom) move.y += boundsBottom - bottom;
8341
- } else {
8342
- if (y < dragBounds.y) move.y += dragBounds.y - y; else if (bottom > boundsBottom) move.y += boundsBottom - bottom;
8343
- }
8344
- move.x = float(move.x);
8345
- move.y = float(move.y);
8346
- return move;
8347
- },
8348
- getValidScaleOf(content, dragBounds, dragBoundsType, origin, scale, change) {
8349
- if (!change) scale = Object.assign({}, scale);
8350
- let fitScaleX, fitScaleY;
8351
- tempContent.set(content).scaleOf(origin, scale.x, scale.y).unsign();
8352
- tempMerge.set(tempContent).add(dragBounds);
8353
- tempIntersect.set(tempContent).intersect(dragBounds);
8354
- if (D.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
8355
- fitScaleX = tempMerge.width / tempContent.width;
8356
- } else {
8357
- fitScaleX = tempIntersect.width / tempContent.width;
8358
- }
8359
- if (D.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
8360
- fitScaleY = tempMerge.height / tempContent.height;
8361
- } else {
8362
- fitScaleY = tempIntersect.height / tempContent.height;
8363
- }
8364
- scale.x = float(tempIntersect.width) ? scale.x * fitScaleX : 1;
8365
- scale.y = float(tempIntersect.height) ? scale.y * fitScaleY : 1;
8366
- return scale;
8312
+ return box ? max$3(box.__updateRenderSpread(), spread) : spread;
8367
8313
  }
8368
8314
  };
8369
8315
 
8370
- const D = DragBoundsHelper;
8371
-
8372
8316
  const {stintSet: stintSet$1} = DataHelper;
8373
8317
 
8374
8318
  const UIRender = {
@@ -10034,6 +9978,102 @@ class UIEvent extends Event {
10034
9978
  }
10035
9979
  }
10036
9980
 
9981
+ const {float: float, sign: sign} = MathHelper, {min: min, max: max$2, abs: abs$2} = Math;
9982
+
9983
+ const tempContent = new Bounds, tempDragBounds = new Bounds;
9984
+
9985
+ const DragBoundsHelper = {
9986
+ limitMove(leaf, move) {
9987
+ const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
9988
+ if (dragBounds) D.getValidMove(leaf.__localBoxBounds, D.getDragBounds(leaf), dragBoundsType, move, true);
9989
+ D.axisMove(leaf, move);
9990
+ },
9991
+ limitScaleOf(leaf, origin, scale, lockRatio) {
9992
+ const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
9993
+ if (dragBounds) D.getValidScaleOf(leaf.__localBoxBounds, D.getDragBounds(leaf), dragBoundsType, leaf.getLocalPointByInner(leaf.getInnerPointByBox(origin)), scale, lockRatio, true);
9994
+ },
9995
+ axisMove(leaf, move) {
9996
+ const {draggable: draggable} = leaf;
9997
+ if (draggable === "x") move.y = 0;
9998
+ if (draggable === "y") move.x = 0;
9999
+ },
10000
+ getDragBounds(leaf) {
10001
+ const {dragBounds: dragBounds} = leaf;
10002
+ return dragBounds === "parent" ? leaf.parent.boxBounds : dragBounds;
10003
+ },
10004
+ isInnerMode(content, dragBounds, dragBoundsType, sideType) {
10005
+ return dragBoundsType === "inner" || dragBoundsType === "auto" && content[sideType] > dragBounds[sideType];
10006
+ },
10007
+ getValidMove(content, dragBounds, dragBoundsType, move, change) {
10008
+ const x = content.x + move.x, y = content.y + move.y, right = x + content.width, bottom = y + content.height;
10009
+ const boundsRight = dragBounds.x + dragBounds.width, boundsBottom = dragBounds.y + dragBounds.height;
10010
+ if (!change) move = Object.assign({}, move);
10011
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
10012
+ if (x > dragBounds.x) move.x += dragBounds.x - x; else if (right < boundsRight) move.x += boundsRight - right;
10013
+ } else {
10014
+ if (x < dragBounds.x) move.x += dragBounds.x - x; else if (right > boundsRight) move.x += boundsRight - right;
10015
+ }
10016
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
10017
+ if (y > dragBounds.y) move.y += dragBounds.y - y; else if (bottom < boundsBottom) move.y += boundsBottom - bottom;
10018
+ } else {
10019
+ if (y < dragBounds.y) move.y += dragBounds.y - y; else if (bottom > boundsBottom) move.y += boundsBottom - bottom;
10020
+ }
10021
+ move.x = float(move.x);
10022
+ move.y = float(move.y);
10023
+ return move;
10024
+ },
10025
+ getValidScaleOf(content, dragBounds, dragBoundsType, origin, scale, lockRatio, change) {
10026
+ if (!change) scale = Object.assign({}, scale);
10027
+ tempDragBounds.set(dragBounds);
10028
+ tempContent.set(content).scaleOf(origin, scale.x, scale.y);
10029
+ const originLeftScale = (origin.x - content.x) / content.width, originRightScale = 1 - originLeftScale;
10030
+ const originTopScale = (origin.y - content.y) / content.height, originBottomScale = 1 - originTopScale;
10031
+ let correctScaleX, correctScaleY, aScale, bScale, aSize, bSize;
10032
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
10033
+ correctScaleX = scale.x < 0 ? 1 / scale.x : 1;
10034
+ if (scale.x < 0) tempContent.scaleOf(origin, correctScaleX, 1);
10035
+ aSize = float(tempContent.minX - tempDragBounds.minX);
10036
+ bSize = float(tempDragBounds.maxX - tempContent.maxX);
10037
+ aScale = originLeftScale && aSize > 0 ? 1 + aSize / (originLeftScale * tempContent.width) : 1;
10038
+ bScale = originRightScale && bSize > 0 ? 1 + bSize / (originRightScale * tempContent.width) : 1;
10039
+ correctScaleX *= max$2(aScale, bScale);
10040
+ } else {
10041
+ if (scale.x < 0) tempContent.unsign();
10042
+ aSize = float(tempDragBounds.minX - tempContent.minX);
10043
+ bSize = float(tempContent.maxX - tempDragBounds.maxX);
10044
+ aScale = originLeftScale && aSize > 0 ? 1 - aSize / (originLeftScale * tempContent.width) : 1;
10045
+ bScale = originRightScale && bSize > 0 ? 1 - bSize / (originRightScale * tempContent.width) : 1;
10046
+ correctScaleX = min(aScale, bScale);
10047
+ }
10048
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
10049
+ correctScaleY = scale.y < 0 ? 1 / scale.y : 1;
10050
+ if (scale.y < 0) tempContent.scaleOf(origin, 1, correctScaleY);
10051
+ aSize = float(tempContent.minY - tempDragBounds.minY);
10052
+ bSize = float(tempDragBounds.maxY - tempContent.maxY);
10053
+ aScale = originTopScale && aSize > 0 ? 1 + aSize / (originTopScale * tempContent.height) : 1;
10054
+ bScale = originBottomScale && bSize > 0 ? 1 + bSize / (originBottomScale * tempContent.height) : 1;
10055
+ correctScaleY *= max$2(aScale, bScale);
10056
+ if (lockRatio) {
10057
+ aScale = max$2(abs$2(correctScaleX), abs$2(correctScaleY));
10058
+ correctScaleX = sign(correctScaleX) * aScale;
10059
+ correctScaleY = sign(correctScaleY) * aScale;
10060
+ }
10061
+ } else {
10062
+ if (scale.y < 0) tempContent.unsign();
10063
+ aSize = float(tempDragBounds.minY - tempContent.minY);
10064
+ bSize = float(tempContent.maxY - tempDragBounds.maxY);
10065
+ aScale = originTopScale && aSize > 0 ? 1 - aSize / (originTopScale * tempContent.height) : 1;
10066
+ bScale = originBottomScale && bSize > 0 ? 1 - bSize / (originBottomScale * tempContent.height) : 1;
10067
+ correctScaleY = min(aScale, bScale);
10068
+ }
10069
+ scale.x *= isFinite(correctScaleX) ? correctScaleX : 1;
10070
+ scale.y *= isFinite(correctScaleY) ? correctScaleY : 1;
10071
+ return scale;
10072
+ }
10073
+ };
10074
+
10075
+ const D = DragBoundsHelper;
10076
+
10037
10077
  let PointerEvent$1 = class PointerEvent extends UIEvent {};
10038
10078
 
10039
10079
  PointerEvent$1.POINTER = "pointer";
@@ -11906,7 +11946,14 @@ const PaintModule = {
11906
11946
 
11907
11947
  let origin = {}, tempMatrix$1 = getMatrixData();
11908
11948
 
11909
- const {get: get$3, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, multiplyParent: multiplyParent, scale: scaleHelper, rotate: rotate, skew: skewHelper} = MatrixHelper;
11949
+ const {get: get$3, set: set, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, multiplyParent: multiplyParent, scale: scaleHelper, rotate: rotate, skew: skewHelper} = MatrixHelper;
11950
+
11951
+ function stretchMode(data, box, scaleX, scaleY) {
11952
+ const transform = get$3();
11953
+ translate$1(transform, box.x, box.y);
11954
+ if (scaleX) scaleHelper(transform, scaleX, scaleY);
11955
+ data.transform = transform;
11956
+ }
11910
11957
 
11911
11958
  function fillOrFitMode(data, box, x, y, scaleX, scaleY, rotation) {
11912
11959
  const transform = get$3();
@@ -11923,8 +11970,11 @@ function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew, clipScaleX, c
11923
11970
  const transform = get$3();
11924
11971
  layout(transform, box, x, y, scaleX, scaleY, rotation, skew);
11925
11972
  if (clipScaleX) {
11926
- tempMatrix$1.a = clipScaleX, tempMatrix$1.d = clipScaleY;
11927
- multiplyParent(transform, tempMatrix$1);
11973
+ if (rotation || skew) {
11974
+ set(tempMatrix$1);
11975
+ scaleOfOuter$1(tempMatrix$1, box, clipScaleX, clipScaleY);
11976
+ multiplyParent(transform, tempMatrix$1);
11977
+ } else scaleOfOuter$1(transform, box, clipScaleX, clipScaleY);
11928
11978
  }
11929
11979
  data.transform = transform;
11930
11980
  }
@@ -12020,7 +12070,10 @@ function getPatternData(paint, box, image) {
12020
12070
  if (offset) PointHelper.move(tempImage, offset);
12021
12071
  switch (mode) {
12022
12072
  case "stretch":
12023
- if (!sameBox) width = box.width, height = box.height;
12073
+ if (!sameBox) {
12074
+ scaleX = box.width / width, scaleY = box.height / height;
12075
+ stretchMode(data, box, scaleX, scaleY);
12076
+ }
12024
12077
  break;
12025
12078
 
12026
12079
  case "normal":
@@ -12029,7 +12082,7 @@ function getPatternData(paint, box, image) {
12029
12082
  let clipScaleX, clipScaleY;
12030
12083
  if (clipSize) clipScaleX = box.width / clipSize.width, clipScaleY = box.height / clipSize.height;
12031
12084
  clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation, skew, clipScaleX, clipScaleY);
12032
- if (clipScaleX) scaleX = scaleX ? scaleX * clipScaleX : scaleX, scaleY = scaleY ? scaleY * clipScaleY : clipScaleY;
12085
+ if (clipScaleX) scaleX = scaleX ? scaleX * clipScaleX : clipScaleX, scaleY = scaleY ? scaleY * clipScaleY : clipScaleY;
12033
12086
  }
12034
12087
  break;
12035
12088
 
@@ -12046,17 +12099,14 @@ function getPatternData(paint, box, image) {
12046
12099
  if (scaleX) fillOrFitMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation);
12047
12100
  }
12048
12101
  if (!data.transform) {
12049
- if (box.x || box.y) {
12050
- data.transform = get$2();
12051
- translate(data.transform, box.x, box.y);
12052
- }
12102
+ if (box.x || box.y) translate(data.transform = get$2(), box.x, box.y);
12053
12103
  }
12054
- if (scaleX && mode !== "stretch") {
12104
+ data.width = width;
12105
+ data.height = height;
12106
+ if (scaleX) {
12055
12107
  data.scaleX = scaleX;
12056
12108
  data.scaleY = scaleY;
12057
12109
  }
12058
- data.width = width;
12059
- data.height = height;
12060
12110
  if (opacity) data.opacity = opacity;
12061
12111
  if (filters) data.filters = filters;
12062
12112
  if (repeat) data.repeat = isString(repeat) ? repeat === "x" ? "repeat-x" : "repeat-y" : "repeat";
@@ -12188,7 +12238,7 @@ function ignoreRender(ui, value) {
12188
12238
 
12189
12239
  const {get: get$1, scale: scale, copy: copy$1} = MatrixHelper;
12190
12240
 
12191
- const {floor: floor, ceil: ceil, max: max$1, abs: abs} = Math;
12241
+ const {floor: floor, ceil: ceil, max: max$1, abs: abs$1} = Math;
12192
12242
 
12193
12243
  function createPattern(ui, paint, pixelRatio) {
12194
12244
  let {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true, paint.scaleFixed);
@@ -12199,8 +12249,8 @@ function createPattern(ui, paint, pixelRatio) {
12199
12249
  scaleX *= pixelRatio;
12200
12250
  scaleY *= pixelRatio;
12201
12251
  if (sx) {
12202
- sx = abs(sx);
12203
- sy = abs(sy);
12252
+ sx = abs$1(sx);
12253
+ sy = abs$1(sy);
12204
12254
  imageMatrix = get$1();
12205
12255
  copy$1(imageMatrix, transform);
12206
12256
  scale(imageMatrix, 1 / sx, 1 / sy);
@@ -12342,6 +12392,7 @@ const PaintImageModule = {
12342
12392
  recycleImage: recycleImage,
12343
12393
  createData: createData,
12344
12394
  getPatternData: getPatternData,
12395
+ stretchMode: stretchMode,
12345
12396
  fillOrFitMode: fillOrFitMode,
12346
12397
  clipMode: clipMode,
12347
12398
  repeatMode: repeatMode
@@ -12452,7 +12503,7 @@ const PaintGradientModule = {
12452
12503
  getTransform: getTransform
12453
12504
  };
12454
12505
 
12455
- const {copy: copy, move: move, toOffsetOutBounds: toOffsetOutBounds$1} = BoundsHelper, {max: max} = Math;
12506
+ const {copy: copy, move: move, toOffsetOutBounds: toOffsetOutBounds$1} = BoundsHelper, {max: max, abs: abs} = Math;
12456
12507
 
12457
12508
  const tempBounds = {}, tempMatrix = new Matrix;
12458
12509
 
@@ -12472,8 +12523,8 @@ function shadow(ui, current, shape) {
12472
12523
  const sx = Math.abs(nowWorld.scaleX);
12473
12524
  if (sx > 1) otherScale = 1 / sx;
12474
12525
  }
12475
- other.setWorldShadow(offsetOutBounds$1.offsetX + item.x * scaleX * otherScale, offsetOutBounds$1.offsetY + item.y * scaleY * otherScale, item.blur * scaleX * otherScale, ColorConvert.string(item.color));
12476
- transform = getShadowTransform(ui, other, shape, item, offsetOutBounds$1, otherScale);
12526
+ 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));
12527
+ transform = Effect.getShadowTransform(ui, other, shape, item, offsetOutBounds$1, otherScale);
12477
12528
  if (transform) other.setTransform(transform);
12478
12529
  drawWorldShadow(other, offsetOutBounds$1, shape);
12479
12530
  if (transform) other.resetTransform();
@@ -12496,7 +12547,7 @@ function shadow(ui, current, shape) {
12496
12547
  function getShadowRenderSpread(_ui, shadow) {
12497
12548
  let top = 0, right = 0, bottom = 0, left = 0, x, y, spread, blur;
12498
12549
  shadow.forEach(item => {
12499
- x = item.x || 0, y = item.y || 0, spread = item.spread || 0, blur = (item.blur || 0) * 1.5;
12550
+ x = item.x || 0, y = item.y || 0, blur = (item.blur || 0) * 1.5, spread = abs(item.spread || 0);
12500
12551
  top = max(top, spread + blur - y);
12501
12552
  right = max(right, spread + blur + x);
12502
12553
  bottom = max(bottom, spread + blur + y);
@@ -12549,8 +12600,8 @@ function innerShadow(ui, current, shape) {
12549
12600
  if (sx > 1) otherScale = 1 / sx;
12550
12601
  }
12551
12602
  other.save();
12552
- other.setWorldShadow(offsetOutBounds.offsetX + item.x * scaleX * otherScale, offsetOutBounds.offsetY + item.y * scaleY * otherScale, item.blur * scaleX * otherScale);
12553
- transform = getShadowTransform(ui, other, shape, item, offsetOutBounds, otherScale, true);
12603
+ other.setWorldShadow(offsetOutBounds.offsetX + (item.x || 0) * scaleX * otherScale, offsetOutBounds.offsetY + (item.y || 0) * scaleY * otherScale, (item.blur || 0) * scaleX * otherScale);
12604
+ transform = Effect.getShadowTransform(ui, other, shape, item, offsetOutBounds, otherScale, true);
12554
12605
  if (transform) other.setTransform(transform);
12555
12606
  drawWorldShadow(other, offsetOutBounds, shape);
12556
12607
  other.restore();
@@ -13186,6 +13237,7 @@ const TextConvertModule = {
13186
13237
  };
13187
13238
 
13188
13239
  function string(color, opacity) {
13240
+ if (!color) return "#000";
13189
13241
  const doOpacity = isNumber(opacity) && opacity < 1;
13190
13242
  if (isString(color)) {
13191
13243
  if (doOpacity && ColorConvert.object) color = ColorConvert.object(color); else return color;