@leafer-ui/miniapp 1.9.9 → 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.9";
6818
+ const version = "1.9.10";
6819
6819
 
6820
6820
  class LeaferCanvas extends LeaferCanvasBase {
6821
6821
  get allowBackgroundColor() {
@@ -7634,7 +7634,7 @@ class Picker {
7634
7634
  children: [ target ]
7635
7635
  } : target);
7636
7636
  const {list: list} = this.findList;
7637
- const leaf = this.getBestMatchLeaf(list, options.bottomList, ignoreHittable);
7637
+ const leaf = this.getBestMatchLeaf(list, options.bottomList, ignoreHittable, !!options.findList);
7638
7638
  const path = ignoreHittable ? this.getPath(leaf) : this.getHitablePath(leaf);
7639
7639
  this.clear();
7640
7640
  return through ? {
@@ -7649,7 +7649,7 @@ class Picker {
7649
7649
  hitPoint(hitPoint, hitRadius, options) {
7650
7650
  return !!this.getByPoint(hitPoint, hitRadius, options).target;
7651
7651
  }
7652
- getBestMatchLeaf(list, bottomList, ignoreHittable) {
7652
+ getBestMatchLeaf(list, bottomList, ignoreHittable, allowNull) {
7653
7653
  const findList = this.findList = new LeafList;
7654
7654
  if (list.length) {
7655
7655
  let find;
@@ -7680,15 +7680,27 @@ class Picker {
7680
7680
  if (findList.length) return findList.list[0];
7681
7681
  }
7682
7682
  }
7683
+ if (allowNull) return null;
7683
7684
  return ignoreHittable ? list[0] : list.find(item => LeafHelper.worldHittable(item));
7684
7685
  }
7685
7686
  getPath(leaf) {
7686
- const path = new LeafList;
7687
+ const path = new LeafList, syncList = [], {target: target} = this;
7687
7688
  while (leaf) {
7689
+ if (leaf.syncEventer) syncList.push(leaf.syncEventer);
7688
7690
  path.add(leaf);
7689
7691
  leaf = leaf.parent;
7692
+ if (leaf === target) break;
7693
+ }
7694
+ if (syncList.length) {
7695
+ syncList.forEach(item => {
7696
+ while (item) {
7697
+ if (item.__.hittable) path.add(item);
7698
+ item = item.parent;
7699
+ if (item === target) break;
7700
+ }
7701
+ });
7690
7702
  }
7691
- if (this.target) path.add(this.target);
7703
+ if (target) path.add(target);
7692
7704
  return path;
7693
7705
  }
7694
7706
  getHitablePath(leaf) {
@@ -8186,12 +8198,12 @@ class ImageData extends RectData {
8186
8198
  }
8187
8199
  __getData() {
8188
8200
  const data = super.__getData();
8189
- delete data.fill;
8201
+ if (data.url) delete data.fill;
8190
8202
  return data;
8191
8203
  }
8192
8204
  __getInputData(names, options) {
8193
8205
  const data = super.__getInputData(names, options);
8194
- delete data.fill;
8206
+ if (data.url) delete data.fill;
8195
8207
  return data;
8196
8208
  }
8197
8209
  }
@@ -8210,7 +8222,7 @@ class CanvasData extends RectData {
8210
8222
  }
8211
8223
  }
8212
8224
 
8213
- const {max: max$2, add: add$1} = FourNumberHelper;
8225
+ const {max: max$3, add: add$1} = FourNumberHelper;
8214
8226
 
8215
8227
  const UIBounds = {
8216
8228
  __updateStrokeSpread() {
@@ -8226,7 +8238,7 @@ const UIBounds = {
8226
8238
  }
8227
8239
  if (data.__useArrow) spread += strokeWidth * 5;
8228
8240
  if (box) {
8229
- spread = max$2(spread, box.__layout.strokeSpread = box.__updateStrokeSpread());
8241
+ spread = max$3(spread, box.__layout.strokeSpread = box.__updateStrokeSpread());
8230
8242
  boxSpread = Math.max(boxSpread, box.__layout.strokeBoxSpread);
8231
8243
  }
8232
8244
  this.__layout.strokeBoxSpread = boxSpread;
@@ -8236,86 +8248,18 @@ const UIBounds = {
8236
8248
  let spread = 0;
8237
8249
  const {shadow: shadow, innerShadow: innerShadow, blur: blur, backgroundBlur: backgroundBlur, filter: filter, renderSpread: renderSpread} = this.__, {strokeSpread: strokeSpread} = this.__layout, box = this.__box;
8238
8250
  if (shadow) spread = Effect.getShadowRenderSpread(this, shadow);
8239
- if (blur) spread = max$2(spread, blur);
8251
+ if (blur) spread = max$3(spread, blur);
8240
8252
  if (filter) spread = add$1(spread, Filter.getSpread(filter));
8241
8253
  if (renderSpread) spread = add$1(spread, renderSpread);
8242
8254
  if (strokeSpread) spread = add$1(spread, strokeSpread);
8243
8255
  let shapeSpread = spread;
8244
- if (innerShadow) shapeSpread = max$2(shapeSpread, Effect.getInnerShadowSpread(this, innerShadow));
8245
- if (backgroundBlur) shapeSpread = max$2(shapeSpread, backgroundBlur);
8256
+ if (innerShadow) shapeSpread = max$3(shapeSpread, Effect.getInnerShadowSpread(this, innerShadow));
8257
+ if (backgroundBlur) shapeSpread = max$3(shapeSpread, backgroundBlur);
8246
8258
  this.__layout.renderShapeSpread = shapeSpread;
8247
- return box ? max$2(box.__updateRenderSpread(), spread) : spread;
8248
- }
8249
- };
8250
-
8251
- const {float: float} = 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.getValidMove(leaf.__localBoxBounds, D.getDragBounds(leaf), dragBoundsType, move, true);
8259
- D.axisMove(leaf, move);
8260
- },
8261
- limitScaleOf(leaf, origin, scale) {
8262
- const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
8263
- if (dragBounds) D.getValidScaleOf(leaf.__localBoxBounds, D.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.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.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(move.x);
8292
- move.y = float(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.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
8302
- fitScaleX = tempMerge.width / tempContent.width;
8303
- } else {
8304
- fitScaleX = tempIntersect.width / tempContent.width;
8305
- }
8306
- if (D.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
8307
- fitScaleY = tempMerge.height / tempContent.height;
8308
- } else {
8309
- fitScaleY = tempIntersect.height / tempContent.height;
8310
- }
8311
- scale.x = float(tempIntersect.width) ? scale.x * fitScaleX : 1;
8312
- scale.y = float(tempIntersect.height) ? scale.y * fitScaleY : 1;
8313
- return scale;
8259
+ return box ? max$3(box.__updateRenderSpread(), spread) : spread;
8314
8260
  }
8315
8261
  };
8316
8262
 
8317
- const D = DragBoundsHelper;
8318
-
8319
8263
  const {stintSet: stintSet$1} = DataHelper;
8320
8264
 
8321
8265
  const UIRender = {
@@ -9981,6 +9925,102 @@ class UIEvent extends Event {
9981
9925
  }
9982
9926
  }
9983
9927
 
9928
+ const {float: float, sign: sign} = MathHelper, {min: min, max: max$2, abs: abs$2} = Math;
9929
+
9930
+ const tempContent = new Bounds, tempDragBounds = new Bounds;
9931
+
9932
+ const DragBoundsHelper = {
9933
+ limitMove(leaf, move) {
9934
+ const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
9935
+ if (dragBounds) D.getValidMove(leaf.__localBoxBounds, D.getDragBounds(leaf), dragBoundsType, move, true);
9936
+ D.axisMove(leaf, move);
9937
+ },
9938
+ limitScaleOf(leaf, origin, scale, lockRatio) {
9939
+ const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
9940
+ if (dragBounds) D.getValidScaleOf(leaf.__localBoxBounds, D.getDragBounds(leaf), dragBoundsType, leaf.getLocalPointByInner(leaf.getInnerPointByBox(origin)), scale, lockRatio, true);
9941
+ },
9942
+ axisMove(leaf, move) {
9943
+ const {draggable: draggable} = leaf;
9944
+ if (draggable === "x") move.y = 0;
9945
+ if (draggable === "y") move.x = 0;
9946
+ },
9947
+ getDragBounds(leaf) {
9948
+ const {dragBounds: dragBounds} = leaf;
9949
+ return dragBounds === "parent" ? leaf.parent.boxBounds : dragBounds;
9950
+ },
9951
+ isInnerMode(content, dragBounds, dragBoundsType, sideType) {
9952
+ return dragBoundsType === "inner" || dragBoundsType === "auto" && content[sideType] > dragBounds[sideType];
9953
+ },
9954
+ getValidMove(content, dragBounds, dragBoundsType, move, change) {
9955
+ const x = content.x + move.x, y = content.y + move.y, right = x + content.width, bottom = y + content.height;
9956
+ const boundsRight = dragBounds.x + dragBounds.width, boundsBottom = dragBounds.y + dragBounds.height;
9957
+ if (!change) move = Object.assign({}, move);
9958
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
9959
+ if (x > dragBounds.x) move.x += dragBounds.x - x; else if (right < boundsRight) move.x += boundsRight - right;
9960
+ } else {
9961
+ if (x < dragBounds.x) move.x += dragBounds.x - x; else if (right > boundsRight) move.x += boundsRight - right;
9962
+ }
9963
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
9964
+ if (y > dragBounds.y) move.y += dragBounds.y - y; else if (bottom < boundsBottom) move.y += boundsBottom - bottom;
9965
+ } else {
9966
+ if (y < dragBounds.y) move.y += dragBounds.y - y; else if (bottom > boundsBottom) move.y += boundsBottom - bottom;
9967
+ }
9968
+ move.x = float(move.x);
9969
+ move.y = float(move.y);
9970
+ return move;
9971
+ },
9972
+ getValidScaleOf(content, dragBounds, dragBoundsType, origin, scale, lockRatio, change) {
9973
+ if (!change) scale = Object.assign({}, scale);
9974
+ tempDragBounds.set(dragBounds);
9975
+ tempContent.set(content).scaleOf(origin, scale.x, scale.y);
9976
+ const originLeftScale = (origin.x - content.x) / content.width, originRightScale = 1 - originLeftScale;
9977
+ const originTopScale = (origin.y - content.y) / content.height, originBottomScale = 1 - originTopScale;
9978
+ let correctScaleX, correctScaleY, aScale, bScale, aSize, bSize;
9979
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
9980
+ correctScaleX = scale.x < 0 ? 1 / scale.x : 1;
9981
+ if (scale.x < 0) tempContent.scaleOf(origin, correctScaleX, 1);
9982
+ aSize = float(tempContent.minX - tempDragBounds.minX);
9983
+ bSize = float(tempDragBounds.maxX - tempContent.maxX);
9984
+ aScale = originLeftScale && aSize > 0 ? 1 + aSize / (originLeftScale * tempContent.width) : 1;
9985
+ bScale = originRightScale && bSize > 0 ? 1 + bSize / (originRightScale * tempContent.width) : 1;
9986
+ correctScaleX *= max$2(aScale, bScale);
9987
+ } else {
9988
+ if (scale.x < 0) tempContent.unsign();
9989
+ aSize = float(tempDragBounds.minX - tempContent.minX);
9990
+ bSize = float(tempContent.maxX - tempDragBounds.maxX);
9991
+ aScale = originLeftScale && aSize > 0 ? 1 - aSize / (originLeftScale * tempContent.width) : 1;
9992
+ bScale = originRightScale && bSize > 0 ? 1 - bSize / (originRightScale * tempContent.width) : 1;
9993
+ correctScaleX = min(aScale, bScale);
9994
+ }
9995
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
9996
+ correctScaleY = scale.y < 0 ? 1 / scale.y : 1;
9997
+ if (scale.y < 0) tempContent.scaleOf(origin, 1, correctScaleY);
9998
+ aSize = float(tempContent.minY - tempDragBounds.minY);
9999
+ bSize = float(tempDragBounds.maxY - tempContent.maxY);
10000
+ aScale = originTopScale && aSize > 0 ? 1 + aSize / (originTopScale * tempContent.height) : 1;
10001
+ bScale = originBottomScale && bSize > 0 ? 1 + bSize / (originBottomScale * tempContent.height) : 1;
10002
+ correctScaleY *= max$2(aScale, bScale);
10003
+ if (lockRatio) {
10004
+ aScale = max$2(abs$2(correctScaleX), abs$2(correctScaleY));
10005
+ correctScaleX = sign(correctScaleX) * aScale;
10006
+ correctScaleY = sign(correctScaleY) * aScale;
10007
+ }
10008
+ } else {
10009
+ if (scale.y < 0) tempContent.unsign();
10010
+ aSize = float(tempDragBounds.minY - tempContent.minY);
10011
+ bSize = float(tempContent.maxY - tempDragBounds.maxY);
10012
+ aScale = originTopScale && aSize > 0 ? 1 - aSize / (originTopScale * tempContent.height) : 1;
10013
+ bScale = originBottomScale && bSize > 0 ? 1 - bSize / (originBottomScale * tempContent.height) : 1;
10014
+ correctScaleY = min(aScale, bScale);
10015
+ }
10016
+ scale.x *= isFinite(correctScaleX) ? correctScaleX : 1;
10017
+ scale.y *= isFinite(correctScaleY) ? correctScaleY : 1;
10018
+ return scale;
10019
+ }
10020
+ };
10021
+
10022
+ const D = DragBoundsHelper;
10023
+
9984
10024
  let PointerEvent = class PointerEvent extends UIEvent {};
9985
10025
 
9986
10026
  PointerEvent.POINTER = "pointer";
@@ -11637,7 +11677,14 @@ const PaintModule = {
11637
11677
 
11638
11678
  let origin = {}, tempMatrix$1 = getMatrixData();
11639
11679
 
11640
- const {get: get$3, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, multiplyParent: multiplyParent, scale: scaleHelper, rotate: rotate, skew: skewHelper} = MatrixHelper;
11680
+ const {get: get$3, set: set, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, multiplyParent: multiplyParent, scale: scaleHelper, rotate: rotate, skew: skewHelper} = MatrixHelper;
11681
+
11682
+ function stretchMode(data, box, scaleX, scaleY) {
11683
+ const transform = get$3();
11684
+ translate$1(transform, box.x, box.y);
11685
+ if (scaleX) scaleHelper(transform, scaleX, scaleY);
11686
+ data.transform = transform;
11687
+ }
11641
11688
 
11642
11689
  function fillOrFitMode(data, box, x, y, scaleX, scaleY, rotation) {
11643
11690
  const transform = get$3();
@@ -11654,8 +11701,11 @@ function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew, clipScaleX, c
11654
11701
  const transform = get$3();
11655
11702
  layout(transform, box, x, y, scaleX, scaleY, rotation, skew);
11656
11703
  if (clipScaleX) {
11657
- tempMatrix$1.a = clipScaleX, tempMatrix$1.d = clipScaleY;
11658
- multiplyParent(transform, tempMatrix$1);
11704
+ if (rotation || skew) {
11705
+ set(tempMatrix$1);
11706
+ scaleOfOuter$1(tempMatrix$1, box, clipScaleX, clipScaleY);
11707
+ multiplyParent(transform, tempMatrix$1);
11708
+ } else scaleOfOuter$1(transform, box, clipScaleX, clipScaleY);
11659
11709
  }
11660
11710
  data.transform = transform;
11661
11711
  }
@@ -11751,7 +11801,10 @@ function getPatternData(paint, box, image) {
11751
11801
  if (offset) PointHelper.move(tempImage, offset);
11752
11802
  switch (mode) {
11753
11803
  case "stretch":
11754
- if (!sameBox) width = box.width, height = box.height;
11804
+ if (!sameBox) {
11805
+ scaleX = box.width / width, scaleY = box.height / height;
11806
+ stretchMode(data, box, scaleX, scaleY);
11807
+ }
11755
11808
  break;
11756
11809
 
11757
11810
  case "normal":
@@ -11760,7 +11813,7 @@ function getPatternData(paint, box, image) {
11760
11813
  let clipScaleX, clipScaleY;
11761
11814
  if (clipSize) clipScaleX = box.width / clipSize.width, clipScaleY = box.height / clipSize.height;
11762
11815
  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;
11816
+ if (clipScaleX) scaleX = scaleX ? scaleX * clipScaleX : clipScaleX, scaleY = scaleY ? scaleY * clipScaleY : clipScaleY;
11764
11817
  }
11765
11818
  break;
11766
11819
 
@@ -11777,17 +11830,14 @@ function getPatternData(paint, box, image) {
11777
11830
  if (scaleX) fillOrFitMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation);
11778
11831
  }
11779
11832
  if (!data.transform) {
11780
- if (box.x || box.y) {
11781
- data.transform = get$2();
11782
- translate(data.transform, box.x, box.y);
11783
- }
11833
+ if (box.x || box.y) translate(data.transform = get$2(), box.x, box.y);
11784
11834
  }
11785
- if (scaleX && mode !== "stretch") {
11835
+ data.width = width;
11836
+ data.height = height;
11837
+ if (scaleX) {
11786
11838
  data.scaleX = scaleX;
11787
11839
  data.scaleY = scaleY;
11788
11840
  }
11789
- data.width = width;
11790
- data.height = height;
11791
11841
  if (opacity) data.opacity = opacity;
11792
11842
  if (filters) data.filters = filters;
11793
11843
  if (repeat) data.repeat = isString(repeat) ? repeat === "x" ? "repeat-x" : "repeat-y" : "repeat";
@@ -11919,7 +11969,7 @@ function ignoreRender(ui, value) {
11919
11969
 
11920
11970
  const {get: get$1, scale: scale, copy: copy$1} = MatrixHelper;
11921
11971
 
11922
- const {floor: floor, ceil: ceil, max: max$1, abs: abs} = Math;
11972
+ const {floor: floor, ceil: ceil, max: max$1, abs: abs$1} = Math;
11923
11973
 
11924
11974
  function createPattern(ui, paint, pixelRatio) {
11925
11975
  let {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true, paint.scaleFixed);
@@ -11930,8 +11980,8 @@ function createPattern(ui, paint, pixelRatio) {
11930
11980
  scaleX *= pixelRatio;
11931
11981
  scaleY *= pixelRatio;
11932
11982
  if (sx) {
11933
- sx = abs(sx);
11934
- sy = abs(sy);
11983
+ sx = abs$1(sx);
11984
+ sy = abs$1(sy);
11935
11985
  imageMatrix = get$1();
11936
11986
  copy$1(imageMatrix, transform);
11937
11987
  scale(imageMatrix, 1 / sx, 1 / sy);
@@ -12073,6 +12123,7 @@ const PaintImageModule = {
12073
12123
  recycleImage: recycleImage,
12074
12124
  createData: createData,
12075
12125
  getPatternData: getPatternData,
12126
+ stretchMode: stretchMode,
12076
12127
  fillOrFitMode: fillOrFitMode,
12077
12128
  clipMode: clipMode,
12078
12129
  repeatMode: repeatMode
@@ -12183,7 +12234,7 @@ const PaintGradientModule = {
12183
12234
  getTransform: getTransform
12184
12235
  };
12185
12236
 
12186
- const {copy: copy, move: move, toOffsetOutBounds: toOffsetOutBounds$1} = BoundsHelper, {max: max} = Math;
12237
+ const {copy: copy, move: move, toOffsetOutBounds: toOffsetOutBounds$1} = BoundsHelper, {max: max, abs: abs} = Math;
12187
12238
 
12188
12239
  const tempBounds = {}, tempMatrix = new Matrix;
12189
12240
 
@@ -12227,7 +12278,7 @@ function shadow(ui, current, shape) {
12227
12278
  function getShadowRenderSpread(_ui, shadow) {
12228
12279
  let top = 0, right = 0, bottom = 0, left = 0, x, y, spread, blur;
12229
12280
  shadow.forEach(item => {
12230
- x = item.x || 0, y = item.y || 0, spread = item.spread || 0, blur = (item.blur || 0) * 1.5;
12281
+ x = item.x || 0, y = item.y || 0, blur = (item.blur || 0) * 1.5, spread = abs(item.spread || 0);
12231
12282
  top = max(top, spread + blur - y);
12232
12283
  right = max(right, spread + blur + x);
12233
12284
  bottom = max(bottom, spread + blur + y);