leafer-ui 1.9.7 → 1.9.8

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.
@@ -247,18 +247,34 @@ class LeafData {
247
247
  }
248
248
  }
249
249
 
250
- const {round: round$3, pow: pow$1, PI: PI$3} = Math;
251
-
252
- const MathHelper = {
253
- within(value, min, max) {
254
- if (isObject(min)) max = min.max, min = min.min;
255
- if (!isUndefined(min) && value < min) value = min;
256
- if (!isUndefined(max) && value > max) value = max;
257
- return value;
250
+ let tempA, tempB, tempTo;
251
+
252
+ const {max: max$4} = Math, tempFour = [ 0, 0, 0, 0 ];
253
+
254
+ const FourNumberHelper = {
255
+ zero: [ ...tempFour ],
256
+ tempFour: tempFour,
257
+ set(to, top, right, bottom, left) {
258
+ if (right === undefined) right = bottom = left = top;
259
+ to[0] = top;
260
+ to[1] = right;
261
+ to[2] = bottom;
262
+ to[3] = left;
263
+ return to;
264
+ },
265
+ setTemp(top, right, bottom, left) {
266
+ return set$1(tempFour, top, right, bottom, left);
258
267
  },
259
- fourNumber(num, maxValue) {
268
+ toTempAB(a, b, change) {
269
+ tempTo = change ? isNumber(a) ? b : a : [];
270
+ if (isNumber(a)) tempA = setTemp(a), tempB = b; else if (isNumber(b)) tempA = a,
271
+ tempB = setTemp(b); else tempA = a, tempB = b;
272
+ if (tempA.length !== 4) tempA = get$5(tempA);
273
+ if (tempB.length !== 4) tempB = get$5(tempB);
274
+ },
275
+ get(num, maxValue) {
260
276
  let data;
261
- if (isArray(num)) {
277
+ if (!isNumber(num)) {
262
278
  switch (num.length) {
263
279
  case 4:
264
280
  data = isUndefined(maxValue) ? num : [ ...num ];
@@ -281,9 +297,39 @@ const MathHelper = {
281
297
  }
282
298
  }
283
299
  if (!data) data = [ num, num, num, num ];
284
- if (maxValue) for (let i = 0; i < 4; i++) if (data[i] > maxValue) data[i] = maxValue;
300
+ if (!isUndefined(maxValue)) for (let i = 0; i < 4; i++) if (data[i] > maxValue) data[i] = maxValue;
285
301
  return data;
286
302
  },
303
+ max(t, other, change) {
304
+ if (isNumber(t) && isNumber(other)) return max$4(t, other);
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]));
307
+ },
308
+ add(t, other, change) {
309
+ if (isNumber(t) && isNumber(other)) return t + other;
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]);
312
+ },
313
+ swapAndScale(t, scaleX, scaleY, change) {
314
+ if (isNumber(t)) return scaleX === scaleY ? t * scaleX : [ t * scaleY, t * scaleX ];
315
+ const to = change ? t : [];
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);
318
+ }
319
+ };
320
+
321
+ const {set: set$1, get: get$5, setTemp: setTemp, toTempAB: toTempAB} = FourNumberHelper;
322
+
323
+ const {round: round$3, pow: pow$1, PI: PI$3} = Math;
324
+
325
+ const MathHelper = {
326
+ within(value, min, max) {
327
+ if (isObject(min)) max = min.max, min = min.min;
328
+ if (!isUndefined(min) && value < min) value = min;
329
+ if (!isUndefined(max) && value > max) value = max;
330
+ return value;
331
+ },
332
+ fourNumber: FourNumberHelper.get,
287
333
  formatRotation(rotation, unsign) {
288
334
  rotation %= 360;
289
335
  if (unsign) {
@@ -1014,7 +1060,7 @@ class Matrix {
1014
1060
  }
1015
1061
  }
1016
1062
 
1017
- const tempMatrix$1 = new Matrix;
1063
+ const tempMatrix$2 = new Matrix;
1018
1064
 
1019
1065
  const TwoPointBoundsHelper = {
1020
1066
  tempPointBounds: {},
@@ -1164,10 +1210,10 @@ const point = {};
1164
1210
 
1165
1211
  const toPoint$4 = {};
1166
1212
 
1167
- const tempBounds$2 = {};
1213
+ const tempBounds$3 = {};
1168
1214
 
1169
1215
  const BoundsHelper = {
1170
- tempBounds: tempBounds$2,
1216
+ tempBounds: tempBounds$3,
1171
1217
  set(t, x = 0, y = 0, width = 0, height = 0) {
1172
1218
  t.x = x;
1173
1219
  t.y = y;
@@ -1218,19 +1264,11 @@ const BoundsHelper = {
1218
1264
  B.move(t, x, y);
1219
1265
  return t;
1220
1266
  },
1221
- toOffsetOutBounds(t, to, parent) {
1222
- if (!to) {
1223
- to = t;
1224
- } else {
1225
- copy$9(to, t);
1226
- }
1227
- if (parent) {
1228
- to.offsetX = -(B.maxX(parent) - t.x);
1229
- to.offsetY = -(B.maxY(parent) - t.y);
1230
- } else {
1231
- to.offsetX = t.x + t.width;
1232
- to.offsetY = t.y + t.height;
1233
- }
1267
+ toOffsetOutBounds(t, to, offsetBounds) {
1268
+ if (!to) to = t; else copy$9(to, t);
1269
+ if (!offsetBounds) offsetBounds = t;
1270
+ to.offsetX = B.maxX(offsetBounds);
1271
+ to.offsetY = B.maxY(offsetBounds);
1234
1272
  B.move(to, -to.offsetX, -to.offsetY);
1235
1273
  },
1236
1274
  scale(t, scaleX, scaleY = scaleX, onlySize) {
@@ -1244,9 +1282,9 @@ const BoundsHelper = {
1244
1282
  t.height *= scaleY;
1245
1283
  },
1246
1284
  tempToOuterOf(t, matrix) {
1247
- B.copy(tempBounds$2, t);
1248
- B.toOuterOf(tempBounds$2, matrix);
1249
- return tempBounds$2;
1285
+ B.copy(tempBounds$3, t);
1286
+ B.toOuterOf(tempBounds$3, matrix);
1287
+ return tempBounds$3;
1250
1288
  },
1251
1289
  getOuterOf(t, matrix) {
1252
1290
  t = Object.assign({}, t);
@@ -1304,9 +1342,9 @@ const BoundsHelper = {
1304
1342
  put(t, put, align = "center", putScale = 1, changeSize = true, to) {
1305
1343
  to || (to = put);
1306
1344
  if (isString(putScale)) putScale = B.getFitScale(t, put, putScale === "cover");
1307
- tempBounds$2.width = changeSize ? put.width *= putScale : put.width * putScale;
1308
- tempBounds$2.height = changeSize ? put.height *= putScale : put.height * putScale;
1309
- AlignHelper.toPoint(align, tempBounds$2, t, to, true, true);
1345
+ tempBounds$3.width = changeSize ? put.width *= putScale : put.width * putScale;
1346
+ tempBounds$3.height = changeSize ? put.height *= putScale : put.height * putScale;
1347
+ AlignHelper.toPoint(align, tempBounds$3, t, to, true, true);
1310
1348
  },
1311
1349
  getSpread(t, spread, side) {
1312
1350
  const n = {};
@@ -1376,7 +1414,7 @@ const BoundsHelper = {
1376
1414
  first = false;
1377
1415
  if (!addMode) copy$9(t, bounds);
1378
1416
  } else {
1379
- add$1(t, bounds);
1417
+ add$2(t, bounds);
1380
1418
  }
1381
1419
  }
1382
1420
  }
@@ -1390,7 +1428,7 @@ const BoundsHelper = {
1390
1428
  B.set(t, point.x, point.y);
1391
1429
  },
1392
1430
  addPoint(t, point) {
1393
- add$1(t, point, true);
1431
+ add$2(t, point, true);
1394
1432
  },
1395
1433
  getPoints(t) {
1396
1434
  const {x: x, y: y, width: width, height: height} = t;
@@ -1461,7 +1499,7 @@ const BoundsHelper = {
1461
1499
 
1462
1500
  const B = BoundsHelper;
1463
1501
 
1464
- const {add: add$1, copy: copy$9} = B;
1502
+ const {add: add$2, copy: copy$9} = B;
1465
1503
 
1466
1504
  class Bounds {
1467
1505
  get minX() {
@@ -1606,7 +1644,7 @@ class Bounds {
1606
1644
  }
1607
1645
  }
1608
1646
 
1609
- const tempBounds$1 = new Bounds;
1647
+ const tempBounds$2 = new Bounds;
1610
1648
 
1611
1649
  class AutoBounds {
1612
1650
  constructor(top, right, bottom, left, width, height) {
@@ -2261,7 +2299,7 @@ class LeaferCanvasBase extends Canvas$1 {
2261
2299
  const {pixelRatio: pixelRatio, pixelSnap: pixelSnap} = this, w = this.worldTransform;
2262
2300
  if (parentMatrix) multiplyParent$4(matrix, parentMatrix, w);
2263
2301
  pixelScale(matrix, pixelRatio, w);
2264
- if (pixelSnap) {
2302
+ if (pixelSnap && !matrix.ignorePixelSnap) {
2265
2303
  if (matrix.half && matrix.half * pixelRatio % 2) w.e = round$1(w.e - .5) + .5, w.f = round$1(w.f - .5) + .5; else w.e = round$1(w.e),
2266
2304
  w.f = round$1(w.f);
2267
2305
  }
@@ -3985,7 +4023,7 @@ const I$1 = ImageManager;
3985
4023
 
3986
4024
  const {IMAGE: IMAGE, create: create$1} = IncrementId;
3987
4025
 
3988
- const {floor: floor$1, max: max$1} = Math;
4026
+ const {floor: floor$1, max: max$3} = Math;
3989
4027
 
3990
4028
  class LeaferImage {
3991
4029
  get url() {
@@ -4074,7 +4112,7 @@ class LeaferImage {
4074
4112
  }
4075
4113
  if (data) return data;
4076
4114
  }
4077
- const canvas = Platform.origin.createCanvas(max$1(floor$1(width + (xGap || 0)), 1), max$1(floor$1(height + (yGap || 0)), 1));
4115
+ const canvas = Platform.origin.createCanvas(max$3(floor$1(width + (xGap || 0)), 1), max$3(floor$1(height + (yGap || 0)), 1));
4078
4116
  const ctx = canvas.getContext("2d");
4079
4117
  if (opacity) ctx.globalAlpha = opacity;
4080
4118
  ctx.imageSmoothingEnabled = smooth === false ? false : true;
@@ -4868,7 +4906,7 @@ const WaitHelper = {
4868
4906
 
4869
4907
  const {getRelativeWorld: getRelativeWorld$1, updateBounds: updateBounds$2} = LeafHelper;
4870
4908
 
4871
- const {toOuterOf: toOuterOf$2, getPoints: getPoints, copy: copy$5} = BoundsHelper;
4909
+ const {toOuterOf: toOuterOf$3, getPoints: getPoints, copy: copy$5} = BoundsHelper;
4872
4910
 
4873
4911
  const localContent = "_localContentBounds";
4874
4912
 
@@ -4891,7 +4929,7 @@ class LeafLayout {
4891
4929
  this._renderBounds = bounds;
4892
4930
  }
4893
4931
  get localContentBounds() {
4894
- toOuterOf$2(this.contentBounds, this.leaf.__localMatrix, this[localContent] || (this[localContent] = {}));
4932
+ toOuterOf$3(this.contentBounds, this.leaf.__localMatrix, this[localContent] || (this[localContent] = {}));
4895
4933
  return this[localContent];
4896
4934
  }
4897
4935
  get localStrokeBounds() {
@@ -4901,15 +4939,15 @@ class LeafLayout {
4901
4939
  return this._localRenderBounds || this;
4902
4940
  }
4903
4941
  get worldContentBounds() {
4904
- toOuterOf$2(this.contentBounds, this.leaf.__world, this[worldContent] || (this[worldContent] = {}));
4942
+ toOuterOf$3(this.contentBounds, this.leaf.__world, this[worldContent] || (this[worldContent] = {}));
4905
4943
  return this[worldContent];
4906
4944
  }
4907
4945
  get worldBoxBounds() {
4908
- toOuterOf$2(this.boxBounds, this.leaf.__world, this[worldBox] || (this[worldBox] = {}));
4946
+ toOuterOf$3(this.boxBounds, this.leaf.__world, this[worldBox] || (this[worldBox] = {}));
4909
4947
  return this[worldBox];
4910
4948
  }
4911
4949
  get worldStrokeBounds() {
4912
- toOuterOf$2(this.strokeBounds, this.leaf.__world, this[worldStroke] || (this[worldStroke] = {}));
4950
+ toOuterOf$3(this.strokeBounds, this.leaf.__world, this[worldStroke] || (this[worldStroke] = {}));
4913
4951
  return this[worldStroke];
4914
4952
  }
4915
4953
  get a() {
@@ -5761,14 +5799,14 @@ const {updateMatrix: updateMatrix$1, updateAllMatrix: updateAllMatrix$2} = LeafH
5761
5799
 
5762
5800
  const {updateBounds: updateBounds$1} = BranchHelper;
5763
5801
 
5764
- const {toOuterOf: toOuterOf$1, copyAndSpread: copyAndSpread$1, copy: copy$4} = BoundsHelper;
5802
+ const {toOuterOf: toOuterOf$2, copyAndSpread: copyAndSpread$2, copy: copy$4} = BoundsHelper;
5765
5803
 
5766
5804
  const {toBounds: toBounds} = PathBounds;
5767
5805
 
5768
5806
  const LeafBounds = {
5769
5807
  __updateWorldBounds() {
5770
5808
  const layout = this.__layout;
5771
- toOuterOf$1(layout.renderBounds, this.__world, this.__world);
5809
+ toOuterOf$2(layout.renderBounds, this.__world, this.__world);
5772
5810
  if (layout.resized) {
5773
5811
  if (layout.resized === "inner") this.__onUpdateSize();
5774
5812
  if (this.__hasLocalEvent) BoundsEvent.emitLocal(this);
@@ -5824,13 +5862,13 @@ const LeafBounds = {
5824
5862
  __updateLocalBoxBounds() {
5825
5863
  if (this.__hasMotionPath) this.__updateMotionPath();
5826
5864
  if (this.__hasAutoLayout) this.__updateAutoLayout();
5827
- toOuterOf$1(this.__layout.boxBounds, this.__local, this.__local);
5865
+ toOuterOf$2(this.__layout.boxBounds, this.__local, this.__local);
5828
5866
  },
5829
5867
  __updateLocalStrokeBounds() {
5830
- toOuterOf$1(this.__layout.strokeBounds, this.__localMatrix, this.__layout.localStrokeBounds);
5868
+ toOuterOf$2(this.__layout.strokeBounds, this.__localMatrix, this.__layout.localStrokeBounds);
5831
5869
  },
5832
5870
  __updateLocalRenderBounds() {
5833
- toOuterOf$1(this.__layout.renderBounds, this.__localMatrix, this.__layout.localRenderBounds);
5871
+ toOuterOf$2(this.__layout.renderBounds, this.__localMatrix, this.__layout.localRenderBounds);
5834
5872
  },
5835
5873
  __updateBoxBounds(_secondLayout, _bounds) {
5836
5874
  const b = this.__layout.boxBounds;
@@ -5868,11 +5906,11 @@ const LeafBounds = {
5868
5906
  },
5869
5907
  __updateStrokeBounds(_bounds) {
5870
5908
  const layout = this.__layout;
5871
- copyAndSpread$1(layout.strokeBounds, layout.boxBounds, layout.strokeBoxSpread);
5909
+ copyAndSpread$2(layout.strokeBounds, layout.boxBounds, layout.strokeBoxSpread);
5872
5910
  },
5873
5911
  __updateRenderBounds(_bounds) {
5874
- const layout = this.__layout;
5875
- layout.renderSpread > 0 ? copyAndSpread$1(layout.renderBounds, layout.boxBounds, layout.renderSpread) : copy$4(layout.renderBounds, layout.strokeBounds);
5912
+ const layout = this.__layout, {renderSpread: renderSpread} = layout;
5913
+ isNumber(renderSpread) && renderSpread <= 0 ? copy$4(layout.renderBounds, layout.strokeBounds) : copyAndSpread$2(layout.renderBounds, layout.boxBounds, renderSpread);
5876
5914
  }
5877
5915
  };
5878
5916
 
@@ -5970,11 +6008,13 @@ const tempScaleData$1 = {};
5970
6008
 
5971
6009
  const {LEAF: LEAF, create: create} = IncrementId;
5972
6010
 
6011
+ const {stintSet: stintSet$3} = DataHelper;
6012
+
5973
6013
  const {toInnerPoint: toInnerPoint, toOuterPoint: toOuterPoint, multiplyParent: multiplyParent$1} = MatrixHelper;
5974
6014
 
5975
- const {toOuterOf: toOuterOf} = BoundsHelper;
6015
+ const {toOuterOf: toOuterOf$1} = BoundsHelper;
5976
6016
 
5977
- const {copy: copy$3, move: move} = PointHelper;
6017
+ const {copy: copy$3, move: move$2} = PointHelper;
5978
6018
 
5979
6019
  const {moveLocal: moveLocal, zoomOfLocal: zoomOfLocal, rotateOfLocal: rotateOfLocal, skewOfLocal: skewOfLocal, moveWorld: moveWorld, zoomOfWorld: zoomOfWorld, rotateOfWorld: rotateOfWorld, skewOfWorld: skewOfWorld, transform: transform, transformWorld: transformWorld, setTransform: setTransform, getFlipTransform: getFlipTransform, getLocalOrigin: getLocalOrigin, getRelativeWorld: getRelativeWorld, drop: drop} = LeafHelper;
5980
6020
 
@@ -6250,8 +6290,9 @@ let Leaf = class Leaf {
6250
6290
  if (!this.__cameraWorld) this.__cameraWorld = {};
6251
6291
  const cameraWorld = this.__cameraWorld, world = this.__world;
6252
6292
  multiplyParent$1(world, options.matrix, cameraWorld, undefined, world);
6253
- toOuterOf(this.__layout.renderBounds, cameraWorld, cameraWorld);
6254
- cameraWorld.half !== world.half && (cameraWorld.half = world.half);
6293
+ toOuterOf$1(this.__layout.renderBounds, cameraWorld, cameraWorld);
6294
+ stintSet$3(cameraWorld, "half", world.half);
6295
+ stintSet$3(cameraWorld, "ignorePixelSnap", world.ignorePixelSnap);
6255
6296
  return cameraWorld;
6256
6297
  } else {
6257
6298
  return this.__world;
@@ -6285,7 +6326,7 @@ let Leaf = class Leaf {
6285
6326
  getWorldBounds(inner, relative, change) {
6286
6327
  const matrix = relative ? getRelativeWorld(this, relative) : this.worldTransform;
6287
6328
  const to = change ? inner : {};
6288
- toOuterOf(inner, matrix, to);
6329
+ toOuterOf$1(inner, matrix, to);
6289
6330
  return to;
6290
6331
  }
6291
6332
  worldToLocal(world, to, distance, relative) {
@@ -6318,7 +6359,7 @@ let Leaf = class Leaf {
6318
6359
  }
6319
6360
  getBoxPointByInner(inner, _relative, _distance, change) {
6320
6361
  const point = change ? inner : Object.assign({}, inner), {x: x, y: y} = this.boxBounds;
6321
- move(point, -x, -y);
6362
+ move$2(point, -x, -y);
6322
6363
  return point;
6323
6364
  }
6324
6365
  getInnerPoint(world, relative, distance, change) {
@@ -6328,7 +6369,7 @@ let Leaf = class Leaf {
6328
6369
  }
6329
6370
  getInnerPointByBox(box, _relative, _distance, change) {
6330
6371
  const point = change ? box : Object.assign({}, box), {x: x, y: y} = this.boxBounds;
6331
- move(point, x, y);
6372
+ move$2(point, x, y);
6332
6373
  return point;
6333
6374
  }
6334
6375
  getInnerPointByLocal(local, _relative, distance, change) {
@@ -6774,7 +6815,7 @@ class LeafLevelList {
6774
6815
  }
6775
6816
  }
6776
6817
 
6777
- const version = "1.9.7";
6818
+ const version = "1.9.8";
6778
6819
 
6779
6820
  const debug$5 = Debug.get("LeaferCanvas");
6780
6821
 
@@ -6809,7 +6850,7 @@ class LeaferCanvas extends LeaferCanvasBase {
6809
6850
  }
6810
6851
  if (Platform.syncDomFont && !this.parentView) {
6811
6852
  style.display = "none";
6812
- document.body.appendChild(this.view);
6853
+ if (document.body) document.body.appendChild(this.view);
6813
6854
  }
6814
6855
  this.__createContext();
6815
6856
  if (!this.autoLayout) this.resize(config);
@@ -7405,6 +7446,7 @@ class Renderer {
7405
7446
  usePartRender: true,
7406
7447
  maxFPS: 120
7407
7448
  };
7449
+ this.frames = [];
7408
7450
  this.target = target;
7409
7451
  this.canvas = canvas;
7410
7452
  if (userConfig) this.config = DataHelper.default(userConfig, this.config);
@@ -7557,12 +7599,15 @@ class Renderer {
7557
7599
  const target = this.target;
7558
7600
  if (this.requestTime || !target) return;
7559
7601
  if (target.parentApp) return target.parentApp.requestRender(false);
7560
- const requestTime = this.requestTime = Date.now();
7602
+ this.requestTime = this.frameTime || Date.now();
7561
7603
  const render = () => {
7562
- const nowFPS = 1e3 / (Date.now() - requestTime);
7604
+ const nowFPS = 1e3 / ((this.frameTime = Date.now()) - this.requestTime);
7563
7605
  const {maxFPS: maxFPS} = this.config;
7564
- if (maxFPS && nowFPS > maxFPS - .5) return Platform.requestRender(render);
7565
- this.FPS = Math.min(120, Math.ceil(nowFPS));
7606
+ if (maxFPS && nowFPS > maxFPS) return Platform.requestRender(render);
7607
+ const {frames: frames} = this;
7608
+ if (frames.length > 30) frames.shift();
7609
+ frames.push(nowFPS);
7610
+ this.FPS = Math.round(frames.reduce((a, b) => a + b, 0) / frames.length);
7566
7611
  this.requestTime = 0;
7567
7612
  this.checkRender();
7568
7613
  };
@@ -8218,39 +8263,41 @@ class CanvasData extends RectData {
8218
8263
  }
8219
8264
  }
8220
8265
 
8266
+ const {max: max$2, add: add$1} = FourNumberHelper;
8267
+
8221
8268
  const UIBounds = {
8222
8269
  __updateStrokeSpread() {
8223
- let width = 0, boxWidth = 0;
8270
+ let spread = 0, boxSpread = 0;
8224
8271
  const data = this.__, {strokeAlign: strokeAlign, __maxStrokeWidth: strokeWidth} = data, box = this.__box;
8225
8272
  if ((data.stroke || data.hitStroke === "all") && strokeWidth && strokeAlign !== "inside") {
8226
- boxWidth = width = strokeAlign === "center" ? strokeWidth / 2 : strokeWidth;
8273
+ boxSpread = spread = strokeAlign === "center" ? strokeWidth / 2 : strokeWidth;
8227
8274
  if (!data.__boxStroke) {
8228
- const miterLimitAddWidth = data.__isLinePath ? 0 : 10 * width;
8275
+ const miterLimitAddWidth = data.__isLinePath ? 0 : 10 * spread;
8229
8276
  const storkeCapAddWidth = data.strokeCap === "none" ? 0 : strokeWidth;
8230
- width += Math.max(miterLimitAddWidth, storkeCapAddWidth);
8277
+ spread += Math.max(miterLimitAddWidth, storkeCapAddWidth);
8231
8278
  }
8232
8279
  }
8233
- if (data.__useArrow) width += strokeWidth * 5;
8280
+ if (data.__useArrow) spread += strokeWidth * 5;
8234
8281
  if (box) {
8235
- width = Math.max(box.__layout.strokeSpread = box.__updateStrokeSpread(), width);
8236
- boxWidth = box.__layout.strokeBoxSpread;
8282
+ spread = max$2(spread, box.__layout.strokeSpread = box.__updateStrokeSpread());
8283
+ boxSpread = Math.max(boxSpread, box.__layout.strokeBoxSpread);
8237
8284
  }
8238
- this.__layout.strokeBoxSpread = boxWidth;
8239
- return width;
8285
+ this.__layout.strokeBoxSpread = boxSpread;
8286
+ return spread;
8240
8287
  },
8241
8288
  __updateRenderSpread() {
8242
- let width = 0;
8243
- const {shadow: shadow, innerShadow: innerShadow, blur: blur, backgroundBlur: backgroundBlur, filter: filter, renderSpread: renderSpread} = this.__;
8244
- if (shadow) width = Effect.getShadowSpread(this, shadow);
8245
- if (blur) width = Math.max(width, blur);
8246
- if (filter) width += Filter.getSpread(filter);
8247
- if (renderSpread) width += renderSpread;
8248
- let shapeWidth = width = Math.ceil(width);
8249
- if (innerShadow) innerShadow.forEach(item => shapeWidth = Math.max(shapeWidth, Math.max(Math.abs(item.y), Math.abs(item.x)) + (item.spread < 0 ? -item.spread : 0) + item.blur * 1.5));
8250
- if (backgroundBlur) shapeWidth = Math.max(shapeWidth, backgroundBlur);
8251
- this.__layout.renderShapeSpread = shapeWidth;
8252
- width += this.__layout.strokeSpread || 0;
8253
- return this.__box ? Math.max(this.__box.__updateRenderSpread(), width) : width;
8289
+ let spread = 0;
8290
+ const {shadow: shadow, innerShadow: innerShadow, blur: blur, backgroundBlur: backgroundBlur, filter: filter, renderSpread: renderSpread} = this.__, {strokeSpread: strokeSpread} = this.__layout, box = this.__box;
8291
+ if (shadow) spread = Effect.getShadowRenderSpread(this, shadow);
8292
+ if (blur) spread = max$2(spread, blur);
8293
+ if (filter) spread = add$1(spread, Filter.getSpread(filter));
8294
+ if (renderSpread) spread = add$1(spread, renderSpread);
8295
+ if (strokeSpread) spread = add$1(spread, strokeSpread);
8296
+ let shapeSpread = spread;
8297
+ if (innerShadow) shapeSpread = max$2(shapeSpread, Effect.getInnerShadowSpread(this, innerShadow));
8298
+ if (backgroundBlur) shapeSpread = max$2(shapeSpread, backgroundBlur);
8299
+ this.__layout.renderShapeSpread = shapeSpread;
8300
+ return box ? max$2(box.__updateRenderSpread(), spread) : spread;
8254
8301
  }
8255
8302
  };
8256
8303
 
@@ -9561,7 +9608,7 @@ __decorate([ resizeType() ], Canvas.prototype, "contextSettings", void 0);
9561
9608
 
9562
9609
  Canvas = __decorate([ registerUI() ], Canvas);
9563
9610
 
9564
- const {copyAndSpread: copyAndSpread, includes: includes, spread: spread, setList: setList} = BoundsHelper;
9611
+ const {copyAndSpread: copyAndSpread$1, includes: includes, spread: spread, setList: setList} = BoundsHelper;
9565
9612
 
9566
9613
  let Text = class Text extends UI {
9567
9614
  get __tag() {
@@ -9608,13 +9655,13 @@ let Text = class Text extends UI {
9608
9655
  if (this.isOverflow) setList(data.__textBoxBounds = {}, [ b, contentBounds ]), layout.renderChanged = true; else data.__textBoxBounds = b;
9609
9656
  }
9610
9657
  __updateRenderSpread() {
9611
- let width = super.__updateRenderSpread();
9612
- if (!width) width = this.isOverflow ? 1 : 0;
9613
- return width;
9658
+ let spread = super.__updateRenderSpread();
9659
+ if (!spread) spread = this.isOverflow ? 1 : 0;
9660
+ return spread;
9614
9661
  }
9615
9662
  __updateRenderBounds() {
9616
9663
  const {renderBounds: renderBounds, renderSpread: renderSpread} = this.__layout;
9617
- copyAndSpread(renderBounds, this.__.__textBoxBounds, renderSpread);
9664
+ copyAndSpread$1(renderBounds, this.__.__textBoxBounds, renderSpread);
9618
9665
  if (this.__box) this.__box.__layout.renderBounds = renderBounds;
9619
9666
  }
9620
9667
  __updateChange() {
@@ -10040,9 +10087,9 @@ let DragEvent$1 = class DragEvent extends PointerEvent$1 {
10040
10087
  static setData(data) {
10041
10088
  this.data = data;
10042
10089
  }
10043
- static getValidMove(leaf, start, total, checkLimit = true) {
10044
- const move = leaf.getLocalPoint(total, null, true);
10045
- PointHelper.move(move, start.x - leaf.x, start.y - leaf.y);
10090
+ static getValidMove(leaf, localStart, worldTotal, checkLimit = true) {
10091
+ const move = leaf.getLocalPoint(worldTotal, null, true);
10092
+ PointHelper.move(move, localStart.x - leaf.x, localStart.y - leaf.y);
10046
10093
  if (checkLimit) this.limitMove(leaf, move);
10047
10094
  DragBoundsHelper.axisMove(leaf, move);
10048
10095
  return move;
@@ -11072,8 +11119,8 @@ ui$1.__updateHitCanvas = function() {
11072
11119
  if (isHitPixel) {
11073
11120
  const {renderBounds: renderBounds} = this.__layout;
11074
11121
  const size = Platform.image.hitCanvasSize;
11075
- const scale = h.hitScale = tempBounds$1.set(0, 0, size, size).getFitMatrix(renderBounds).a;
11076
- const {x: x, y: y, width: width, height: height} = tempBounds$1.set(renderBounds).scale(scale);
11122
+ const scale = h.hitScale = tempBounds$2.set(0, 0, size, size).getFitMatrix(renderBounds).a;
11123
+ const {x: x, y: y, width: width, height: height} = tempBounds$2.set(renderBounds).scale(scale);
11077
11124
  h.resize({
11078
11125
  width: width,
11079
11126
  height: height,
@@ -11170,8 +11217,8 @@ canvas.hitStroke = function(point, strokeWidth) {
11170
11217
  canvas.hitPixel = function(radiusPoint, offset, scale = 1) {
11171
11218
  let {x: x, y: y, radiusX: radiusX, radiusY: radiusY} = radiusPoint;
11172
11219
  if (offset) x -= offset.x, y -= offset.y;
11173
- tempBounds$1.set(x - radiusX, y - radiusY, radiusX * 2, radiusY * 2).scale(scale).ceil();
11174
- const {data: data} = this.context.getImageData(tempBounds$1.x, tempBounds$1.y, tempBounds$1.width || 1, tempBounds$1.height || 1);
11220
+ tempBounds$2.set(x - radiusX, y - radiusY, radiusX * 2, radiusY * 2).scale(scale).ceil();
11221
+ const {data: data} = this.context.getImageData(tempBounds$2.x, tempBounds$2.y, tempBounds$2.width || 1, tempBounds$2.height || 1);
11175
11222
  for (let i = 0, len = data.length; i < len; i += 4) {
11176
11223
  if (data[i + 3] > 0) return true;
11177
11224
  }
@@ -11699,24 +11746,29 @@ function drawOutside(stroke, ui, canvas) {
11699
11746
  }
11700
11747
  }
11701
11748
 
11702
- const {getSpread: getSpread, getOuterOf: getOuterOf, getByMove: getByMove, getIntersectData: getIntersectData} = BoundsHelper;
11749
+ const {getSpread: getSpread, copyAndSpread: copyAndSpread, toOuterOf: toOuterOf, getOuterOf: getOuterOf, getByMove: getByMove, move: move$1, getIntersectData: getIntersectData} = BoundsHelper;
11750
+
11751
+ const tempBounds$1 = {};
11703
11752
 
11704
11753
  function shape(ui, current, options) {
11705
11754
  const canvas = current.getSameCanvas();
11706
- const nowWorld = ui.__nowWorld, currentBounds = current.bounds;
11707
- let bounds, matrix, fitMatrix, shapeBounds, worldCanvas;
11755
+ const currentBounds = current.bounds, nowWorld = ui.__nowWorld, layout = ui.__layout;
11756
+ const nowWorldShapeBounds = ui.__nowWorldShapeBounds || (ui.__nowWorldShapeBounds = {});
11757
+ toOuterOf(layout.strokeSpread ? (copyAndSpread(tempBounds$1, layout.boxBounds, layout.strokeSpread),
11758
+ tempBounds$1) : layout.boxBounds, nowWorld, nowWorldShapeBounds);
11759
+ let bounds, renderBounds, matrix, fitMatrix, shapeBounds, worldCanvas;
11708
11760
  let {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true);
11709
- if (currentBounds.includes(nowWorld)) {
11761
+ if (currentBounds.includes(nowWorldShapeBounds)) {
11710
11762
  worldCanvas = canvas;
11711
- bounds = shapeBounds = nowWorld;
11763
+ bounds = shapeBounds = nowWorldShapeBounds;
11764
+ renderBounds = nowWorld;
11712
11765
  } else {
11713
- const {renderShapeSpread: spread} = ui.__layout;
11714
11766
  let worldClipBounds;
11715
11767
  if (Platform.fullImageShadow) {
11716
- worldClipBounds = nowWorld;
11768
+ worldClipBounds = nowWorldShapeBounds;
11717
11769
  } else {
11718
- const spreadBounds = spread ? getSpread(currentBounds, scaleX === scaleY ? spread * scaleX : [ spread * scaleY, spread * scaleX ]) : currentBounds;
11719
- worldClipBounds = getIntersectData(spreadBounds, nowWorld);
11770
+ const spreadBounds = layout.renderShapeSpread ? getSpread(currentBounds, FourNumberHelper.swapAndScale(layout.renderShapeSpread, scaleX, scaleY)) : currentBounds;
11771
+ worldClipBounds = getIntersectData(spreadBounds, nowWorldShapeBounds);
11720
11772
  }
11721
11773
  fitMatrix = currentBounds.getFitMatrix(worldClipBounds);
11722
11774
  let {a: fitScaleX, d: fitScaleY} = fitMatrix;
@@ -11726,8 +11778,10 @@ function shape(ui, current, options) {
11726
11778
  scaleX *= fitScaleX;
11727
11779
  scaleY *= fitScaleY;
11728
11780
  }
11729
- shapeBounds = getOuterOf(nowWorld, fitMatrix);
11781
+ shapeBounds = getOuterOf(nowWorldShapeBounds, fitMatrix);
11730
11782
  bounds = getByMove(shapeBounds, -fitMatrix.e, -fitMatrix.f);
11783
+ renderBounds = getOuterOf(nowWorld, fitMatrix);
11784
+ move$1(renderBounds, -fitMatrix.e, -fitMatrix.f);
11731
11785
  const userMatrix = options.matrix;
11732
11786
  if (userMatrix) {
11733
11787
  matrix = new Matrix(fitMatrix);
@@ -11746,6 +11800,7 @@ function shape(ui, current, options) {
11746
11800
  matrix: matrix,
11747
11801
  fitMatrix: fitMatrix,
11748
11802
  bounds: bounds,
11803
+ renderBounds: renderBounds,
11749
11804
  worldCanvas: worldCanvas,
11750
11805
  shapeBounds: shapeBounds,
11751
11806
  scaleX: scaleX,
@@ -11849,7 +11904,7 @@ const PaintModule = {
11849
11904
  shape: shape
11850
11905
  };
11851
11906
 
11852
- let origin = {}, tempMatrix = getMatrixData();
11907
+ let origin = {}, tempMatrix$1 = getMatrixData();
11853
11908
 
11854
11909
  const {get: get$3, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, multiplyParent: multiplyParent, scale: scaleHelper, rotate: rotate, skew: skewHelper} = MatrixHelper;
11855
11910
 
@@ -11864,12 +11919,12 @@ function fillOrFitMode(data, box, x, y, scaleX, scaleY, rotation) {
11864
11919
  data.transform = transform;
11865
11920
  }
11866
11921
 
11867
- function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew, clipSize) {
11922
+ function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew, clipScaleX, clipScaleY) {
11868
11923
  const transform = get$3();
11869
11924
  layout(transform, box, x, y, scaleX, scaleY, rotation, skew);
11870
- if (clipSize) {
11871
- tempMatrix.a = box.width / clipSize.width, tempMatrix.d = box.height / clipSize.height;
11872
- multiplyParent(transform, tempMatrix);
11925
+ if (clipScaleX) {
11926
+ tempMatrix$1.a = clipScaleX, tempMatrix$1.d = clipScaleY;
11927
+ multiplyParent(transform, tempMatrix$1);
11873
11928
  }
11874
11929
  data.transform = transform;
11875
11930
  }
@@ -11970,7 +12025,12 @@ function getPatternData(paint, box, image) {
11970
12025
 
11971
12026
  case "normal":
11972
12027
  case "clip":
11973
- if (tempImage.x || tempImage.y || scaleX || clipSize || rotation || skew) clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation, skew, paint.clipSize);
12028
+ if (tempImage.x || tempImage.y || scaleX || clipSize || rotation || skew) {
12029
+ let clipScaleX, clipScaleY;
12030
+ if (clipSize) clipScaleX = box.width / clipSize.width, clipScaleY = box.height / clipSize.height;
12031
+ 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;
12033
+ }
11974
12034
  break;
11975
12035
 
11976
12036
  case "repeat":
@@ -12128,7 +12188,7 @@ function ignoreRender(ui, value) {
12128
12188
 
12129
12189
  const {get: get$1, scale: scale, copy: copy$1} = MatrixHelper;
12130
12190
 
12131
- const {floor: floor, ceil: ceil, max: max, abs: abs} = Math;
12191
+ const {floor: floor, ceil: ceil, max: max$1, abs: abs} = Math;
12132
12192
 
12133
12193
  function createPattern(ui, paint, pixelRatio) {
12134
12194
  let {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true, paint.scaleFixed);
@@ -12177,8 +12237,8 @@ function createPattern(ui, paint, pixelRatio) {
12177
12237
  if (transform || scaleX !== 1 || scaleY !== 1) {
12178
12238
  const canvasWidth = width + (xGap || 0);
12179
12239
  const canvasHeight = height + (yGap || 0);
12180
- scaleX /= canvasWidth / max(floor(canvasWidth), 1);
12181
- scaleY /= canvasHeight / max(floor(canvasHeight), 1);
12240
+ scaleX /= canvasWidth / max$1(floor(canvasWidth), 1);
12241
+ scaleY /= canvasHeight / max$1(floor(canvasHeight), 1);
12182
12242
  if (!imageMatrix) {
12183
12243
  imageMatrix = get$1();
12184
12244
  if (transform) copy$1(imageMatrix, transform);
@@ -12204,17 +12264,15 @@ function checkImage(ui, canvas, paint, allowDraw) {
12204
12264
  if (allowDraw) {
12205
12265
  if (data.repeat) {
12206
12266
  allowDraw = false;
12207
- } else {
12208
- if (!(paint.changeful || Platform.name === "miniapp" && ResizeEvent.isResizing(ui) || Export.running)) {
12209
- let {width: width, height: height} = data;
12210
- width *= scaleX * pixelRatio;
12211
- height *= scaleY * pixelRatio;
12212
- if (data.scaleX) {
12213
- width *= data.scaleX;
12214
- height *= data.scaleY;
12215
- }
12216
- allowDraw = width * height > Platform.image.maxCacheSize;
12267
+ } else if (!(paint.changeful || Platform.name === "miniapp" && ResizeEvent.isResizing(ui) || Export.running)) {
12268
+ let {width: width, height: height} = data;
12269
+ width *= scaleX * pixelRatio;
12270
+ height *= scaleY * pixelRatio;
12271
+ if (data.scaleX) {
12272
+ width *= data.scaleX;
12273
+ height *= data.scaleY;
12217
12274
  }
12275
+ allowDraw = width * height > Platform.image.maxCacheSize;
12218
12276
  }
12219
12277
  }
12220
12278
  if (allowDraw) {
@@ -12394,20 +12452,20 @@ const PaintGradientModule = {
12394
12452
  getTransform: getTransform
12395
12453
  };
12396
12454
 
12397
- const {copy: copy, toOffsetOutBounds: toOffsetOutBounds$1} = BoundsHelper;
12455
+ const {copy: copy, move: move, toOffsetOutBounds: toOffsetOutBounds$1} = BoundsHelper, {max: max} = Math;
12398
12456
 
12399
- const tempBounds = {};
12457
+ const tempBounds = {}, tempMatrix = new Matrix;
12400
12458
 
12401
12459
  const offsetOutBounds$1 = {};
12402
12460
 
12403
12461
  function shadow(ui, current, shape) {
12404
- let copyBounds, spreadScale;
12405
- const {__nowWorld: nowWorld, __layout: __layout} = ui;
12462
+ let copyBounds, transform;
12463
+ const {__nowWorld: nowWorld} = ui;
12406
12464
  const {shadow: shadow} = ui.__;
12407
- const {worldCanvas: worldCanvas, bounds: bounds, shapeBounds: shapeBounds, scaleX: scaleX, scaleY: scaleY} = shape;
12465
+ const {worldCanvas: worldCanvas, bounds: bounds, renderBounds: renderBounds, shapeBounds: shapeBounds, scaleX: scaleX, scaleY: scaleY} = shape;
12408
12466
  const other = current.getSameCanvas();
12409
12467
  const end = shadow.length - 1;
12410
- toOffsetOutBounds$1(bounds, offsetOutBounds$1);
12468
+ toOffsetOutBounds$1(bounds, offsetOutBounds$1, renderBounds);
12411
12469
  shadow.forEach((item, index) => {
12412
12470
  let otherScale = 1;
12413
12471
  if (item.scaleFixed) {
@@ -12415,54 +12473,61 @@ function shadow(ui, current, shape) {
12415
12473
  if (sx > 1) otherScale = 1 / sx;
12416
12474
  }
12417
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));
12418
- spreadScale = item.spread ? 1 + item.spread * 2 / (__layout.boxBounds.width + (__layout.strokeBoxSpread || 0) * 2) * otherScale : 0;
12419
- drawWorldShadow(other, offsetOutBounds$1, spreadScale, shape);
12420
- copyBounds = bounds;
12476
+ transform = getShadowTransform(ui, other, shape, item, offsetOutBounds$1, otherScale);
12477
+ if (transform) other.setTransform(transform);
12478
+ drawWorldShadow(other, offsetOutBounds$1, shape);
12479
+ if (transform) other.resetTransform();
12480
+ copyBounds = renderBounds;
12421
12481
  if (item.box) {
12422
12482
  other.restore();
12423
12483
  other.save();
12424
12484
  if (worldCanvas) {
12425
- other.copyWorld(other, bounds, nowWorld, "copy");
12485
+ other.copyWorld(other, renderBounds, nowWorld, "copy");
12426
12486
  copyBounds = nowWorld;
12427
12487
  }
12428
12488
  worldCanvas ? other.copyWorld(worldCanvas, nowWorld, nowWorld, "destination-out") : other.copyWorld(shape.canvas, shapeBounds, bounds, "destination-out");
12429
12489
  }
12430
- if (Effect.isTransformShadow(item)) Effect.renderTransformShadow(ui, current, other, copyBounds, item); else LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
12490
+ LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
12431
12491
  if (end && index < end) other.clearWorld(copyBounds);
12432
12492
  });
12433
12493
  other.recycle(copyBounds);
12434
12494
  }
12435
12495
 
12436
- function getShadowSpread(_ui, shadow) {
12437
- let width = 0;
12438
- shadow.forEach(item => width = Math.max(width, Math.max(Math.abs(item.y), Math.abs(item.x)) + (item.spread > 0 ? item.spread : 0) + item.blur * 1.5));
12439
- return width;
12496
+ function getShadowRenderSpread(_ui, shadow) {
12497
+ let top = 0, right = 0, bottom = 0, left = 0, x, y, spread, blur;
12498
+ shadow.forEach(item => {
12499
+ x = item.x || 0, y = item.y || 0, spread = item.spread || 0, blur = (item.blur || 0) * 1.5;
12500
+ top = max(top, spread + blur - y);
12501
+ right = max(right, spread + blur + x);
12502
+ bottom = max(bottom, spread + blur + y);
12503
+ left = max(left, spread + blur - x);
12504
+ });
12505
+ return top === right && right === bottom && bottom === left ? top : [ top, right, bottom, left ];
12506
+ }
12507
+
12508
+ function getShadowTransform(ui, canvas, _shape, shadow, outBounds, otherScale, isInnerShaodw) {
12509
+ if (shadow.spread) {
12510
+ const spreadScale = 1 + shadow.spread * 2 / ui.__layout.strokeBounds.width * otherScale * (isInnerShaodw ? -1 : 1);
12511
+ tempMatrix.set().scaleOfOuter({
12512
+ x: (outBounds.x + outBounds.width / 2) * canvas.pixelRatio,
12513
+ y: (outBounds.y + outBounds.height / 2) * canvas.pixelRatio
12514
+ }, spreadScale);
12515
+ return tempMatrix;
12516
+ }
12517
+ return undefined;
12440
12518
  }
12441
12519
 
12442
- function drawWorldShadow(canvas, outBounds, spreadScale, shape) {
12443
- const {bounds: bounds, shapeBounds: shapeBounds} = shape;
12520
+ function drawWorldShadow(canvas, outBounds, shape) {
12521
+ const {shapeBounds: shapeBounds} = shape;
12522
+ let from, to;
12444
12523
  if (Platform.fullImageShadow) {
12445
12524
  copy(tempBounds, canvas.bounds);
12446
- tempBounds.x += outBounds.x - shapeBounds.x;
12447
- tempBounds.y += outBounds.y - shapeBounds.y;
12448
- if (spreadScale) {
12449
- const {fitMatrix: fitMatrix} = shape;
12450
- tempBounds.x -= (bounds.x + (fitMatrix ? fitMatrix.e : 0) + bounds.width / 2) * (spreadScale - 1);
12451
- tempBounds.y -= (bounds.y + (fitMatrix ? fitMatrix.f : 0) + bounds.height / 2) * (spreadScale - 1);
12452
- tempBounds.width *= spreadScale;
12453
- tempBounds.height *= spreadScale;
12454
- }
12455
- canvas.copyWorld(shape.canvas, canvas.bounds, tempBounds);
12525
+ move(tempBounds, outBounds.x - shapeBounds.x, outBounds.y - shapeBounds.y);
12526
+ from = canvas.bounds, to = tempBounds;
12456
12527
  } else {
12457
- if (spreadScale) {
12458
- copy(tempBounds, outBounds);
12459
- tempBounds.x -= outBounds.width / 2 * (spreadScale - 1);
12460
- tempBounds.y -= outBounds.height / 2 * (spreadScale - 1);
12461
- tempBounds.width *= spreadScale;
12462
- tempBounds.height *= spreadScale;
12463
- }
12464
- canvas.copyWorld(shape.canvas, shapeBounds, spreadScale ? tempBounds : outBounds);
12528
+ from = shapeBounds, to = outBounds;
12465
12529
  }
12530
+ canvas.copyWorld(shape.canvas, from, to);
12466
12531
  }
12467
12532
 
12468
12533
  const {toOffsetOutBounds: toOffsetOutBounds} = BoundsHelper;
@@ -12470,13 +12535,13 @@ const {toOffsetOutBounds: toOffsetOutBounds} = BoundsHelper;
12470
12535
  const offsetOutBounds = {};
12471
12536
 
12472
12537
  function innerShadow(ui, current, shape) {
12473
- let copyBounds, spreadScale;
12474
- const {__nowWorld: nowWorld, __layout: __layout} = ui;
12538
+ let copyBounds, transform;
12539
+ const {__nowWorld: nowWorld} = ui;
12475
12540
  const {innerShadow: innerShadow} = ui.__;
12476
- const {worldCanvas: worldCanvas, bounds: bounds, shapeBounds: shapeBounds, scaleX: scaleX, scaleY: scaleY} = shape;
12541
+ const {worldCanvas: worldCanvas, bounds: bounds, renderBounds: renderBounds, shapeBounds: shapeBounds, scaleX: scaleX, scaleY: scaleY} = shape;
12477
12542
  const other = current.getSameCanvas();
12478
12543
  const end = innerShadow.length - 1;
12479
- toOffsetOutBounds(bounds, offsetOutBounds);
12544
+ toOffsetOutBounds(bounds, offsetOutBounds, renderBounds);
12480
12545
  innerShadow.forEach((item, index) => {
12481
12546
  let otherScale = 1;
12482
12547
  if (item.scaleFixed) {
@@ -12485,16 +12550,17 @@ function innerShadow(ui, current, shape) {
12485
12550
  }
12486
12551
  other.save();
12487
12552
  other.setWorldShadow(offsetOutBounds.offsetX + item.x * scaleX * otherScale, offsetOutBounds.offsetY + item.y * scaleY * otherScale, item.blur * scaleX * otherScale);
12488
- spreadScale = item.spread ? 1 - item.spread * 2 / (__layout.boxBounds.width + (__layout.strokeBoxSpread || 0) * 2) * otherScale : 0;
12489
- drawWorldShadow(other, offsetOutBounds, spreadScale, shape);
12553
+ transform = getShadowTransform(ui, other, shape, item, offsetOutBounds, otherScale, true);
12554
+ if (transform) other.setTransform(transform);
12555
+ drawWorldShadow(other, offsetOutBounds, shape);
12490
12556
  other.restore();
12491
12557
  if (worldCanvas) {
12492
- other.copyWorld(other, bounds, nowWorld, "copy");
12558
+ other.copyWorld(other, renderBounds, nowWorld, "copy");
12493
12559
  other.copyWorld(worldCanvas, nowWorld, nowWorld, "source-out");
12494
12560
  copyBounds = nowWorld;
12495
12561
  } else {
12496
12562
  other.copyWorld(shape.canvas, shapeBounds, bounds, "source-out");
12497
- copyBounds = bounds;
12563
+ copyBounds = renderBounds;
12498
12564
  }
12499
12565
  other.fillWorld(copyBounds, ColorConvert.string(item.color), "source-in");
12500
12566
  LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
@@ -12503,6 +12569,8 @@ function innerShadow(ui, current, shape) {
12503
12569
  other.recycle(copyBounds);
12504
12570
  }
12505
12571
 
12572
+ const getInnerShadowSpread = getShadowRenderSpread;
12573
+
12506
12574
  function blur(ui, current, origin) {
12507
12575
  const {blur: blur} = ui.__;
12508
12576
  origin.setWorldBlur(blur * ui.__nowWorld.a);
@@ -12517,10 +12585,12 @@ const EffectModule = {
12517
12585
  innerShadow: innerShadow,
12518
12586
  blur: blur,
12519
12587
  backgroundBlur: backgroundBlur,
12520
- getShadowSpread: getShadowSpread,
12588
+ getShadowRenderSpread: getShadowRenderSpread,
12589
+ getShadowTransform: getShadowTransform,
12521
12590
  isTransformShadow(_shadow) {
12522
12591
  return undefined;
12523
- }
12592
+ },
12593
+ getInnerShadowSpread: getInnerShadowSpread
12524
12594
  };
12525
12595
 
12526
12596
  const {excludeRenderBounds: excludeRenderBounds} = LeafBoundsHelper;
@@ -12537,6 +12607,7 @@ Group.prototype.__renderMask = function(canvas, options) {
12537
12607
  maskEnd(this, currentMask, canvas, contentCanvas, maskCanvas, maskOpacity, undefined, true);
12538
12608
  maskCanvas = contentCanvas = null;
12539
12609
  }
12610
+ if (mask === "clipping" || mask === "clipping-path") excludeRenderBounds(child, options) || child.__render(canvas, options);
12540
12611
  maskOpacity = child.__.opacity;
12541
12612
  usedGrayscaleAlpha = false;
12542
12613
  if (mask === "path" || mask === "clipping-path") {
@@ -12554,7 +12625,6 @@ Group.prototype.__renderMask = function(canvas, options) {
12554
12625
  if (!contentCanvas) contentCanvas = getCanvas(canvas);
12555
12626
  child.__render(maskCanvas, options);
12556
12627
  }
12557
- if (mask === "clipping" || mask === "clipping-path") excludeRenderBounds(child, options) || child.__render(canvas, options);
12558
12628
  continue;
12559
12629
  }
12560
12630
  const childBlendMode = maskOpacity === 1 && child.__.__blendMode;
@@ -13150,4 +13220,4 @@ Object.assign(Creator, {
13150
13220
 
13151
13221
  useCanvas();
13152
13222
 
13153
- export { AlignHelper, Answer, App, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsEvent, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, Cursor, DataHelper, Debug, Direction4, Direction9, DragBoundsHelper, DragEvent$1 as DragEvent, Dragger, DropEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, Frame, FrameData, Group, GroupData, HitCanvasManager, Image$1 as Image, ImageData, ImageEvent, ImageManager, IncrementId, Interaction, InteractionBase, InteractionHelper, KeyEvent, Keyboard, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferImage, Line, LineData, MathHelper, Matrix, MatrixHelper, MoveEvent, MyDragEvent, MyImage, MyPointerEvent, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Picker, Platform, Plugin, Point, PointHelper, PointerButton, PointerEvent$1 as PointerEvent, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, Resource, RotateEvent, Run, Selector, Star, StarData, State, StringNumberMap, SwipeEvent, TaskItem, TaskProcessor, Text, TextConvert, TextData, Transition, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIEvent, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, ZoomEvent, affectRenderBoundsType, affectStrokeBoundsType, attr, autoLayoutType, boundsType, canvasPatch, canvasSizeAttrs, createAttr, createDescriptor, cursorType, dataProcessor, dataType, decorateLeafAttr, defineDataProcessor, defineKey, defineLeafAttr, dimType, doBoundsType, doStrokeType, effectType, emptyData, eraserType, extraPropertyEventMap, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, isArray, isData, isEmptyData, isFinite, isNull, isNumber, isObject, isString, isUndefined, layoutProcessor, leaferTransformAttrMap, maskType, naturalBoundsType, opacityType, path, pathInputType, pathType, pen, positionType, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleType, scrollType, sortType, strokeType, surfaceType, tempBounds$1 as tempBounds, tempMatrix$1 as tempMatrix, tempPoint$2 as tempPoint, tryToNumber, useCanvas, useModule, version, visibleType, zoomLayerType };
13223
+ export { AlignHelper, Answer, App, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsEvent, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, Cursor, DataHelper, Debug, Direction4, Direction9, DragBoundsHelper, DragEvent$1 as DragEvent, Dragger, DropEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, FourNumberHelper, Frame, FrameData, Group, GroupData, HitCanvasManager, Image$1 as Image, ImageData, ImageEvent, ImageManager, IncrementId, Interaction, InteractionBase, InteractionHelper, KeyEvent, Keyboard, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferImage, Line, LineData, MathHelper, Matrix, MatrixHelper, MoveEvent, MyDragEvent, MyImage, MyPointerEvent, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Picker, Platform, Plugin, Point, PointHelper, PointerButton, PointerEvent$1 as PointerEvent, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, Resource, RotateEvent, Run, Selector, Star, StarData, State, StringNumberMap, SwipeEvent, TaskItem, TaskProcessor, Text, TextConvert, TextData, Transition, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIEvent, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, ZoomEvent, affectRenderBoundsType, affectStrokeBoundsType, attr, autoLayoutType, boundsType, canvasPatch, canvasSizeAttrs, createAttr, createDescriptor, cursorType, dataProcessor, dataType, decorateLeafAttr, defineDataProcessor, defineKey, defineLeafAttr, dimType, doBoundsType, doStrokeType, effectType, emptyData, eraserType, extraPropertyEventMap, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, isArray, isData, isEmptyData, isFinite, isNull, isNumber, isObject, isString, isUndefined, layoutProcessor, leaferTransformAttrMap, maskType, naturalBoundsType, opacityType, path, pathInputType, pathType, pen, positionType, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleType, scrollType, sortType, strokeType, surfaceType, tempBounds$2 as tempBounds, tempMatrix$2 as tempMatrix, tempPoint$2 as tempPoint, tryToNumber, useCanvas, useModule, version, visibleType, zoomLayerType };