leafer-draw 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$8(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$8(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$8(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$8} = B;
1502
+ const {add: add$2, copy: copy$8} = 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 = 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$4} = BoundsHelper;
4909
+ const {toOuterOf: toOuterOf$3, getPoints: getPoints, copy: copy$4} = 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$3} = BoundsHelper;
5802
+ const {toOuterOf: toOuterOf$2, copyAndSpread: copyAndSpread$2, copy: copy$3} = 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$3(layout.renderBounds, layout.strokeBounds);
5912
+ const layout = this.__layout, {renderSpread: renderSpread} = layout;
5913
+ isNumber(renderSpread) && renderSpread <= 0 ? copy$3(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$2, move: move} = PointHelper;
6017
+ const {copy: copy$2, 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$4 = 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
  };
@@ -8035,39 +8080,41 @@ class CanvasData extends RectData {
8035
8080
  }
8036
8081
  }
8037
8082
 
8083
+ const {max: max$2, add: add$1} = FourNumberHelper;
8084
+
8038
8085
  const UIBounds = {
8039
8086
  __updateStrokeSpread() {
8040
- let width = 0, boxWidth = 0;
8087
+ let spread = 0, boxSpread = 0;
8041
8088
  const data = this.__, {strokeAlign: strokeAlign, __maxStrokeWidth: strokeWidth} = data, box = this.__box;
8042
8089
  if ((data.stroke || data.hitStroke === "all") && strokeWidth && strokeAlign !== "inside") {
8043
- boxWidth = width = strokeAlign === "center" ? strokeWidth / 2 : strokeWidth;
8090
+ boxSpread = spread = strokeAlign === "center" ? strokeWidth / 2 : strokeWidth;
8044
8091
  if (!data.__boxStroke) {
8045
- const miterLimitAddWidth = data.__isLinePath ? 0 : 10 * width;
8092
+ const miterLimitAddWidth = data.__isLinePath ? 0 : 10 * spread;
8046
8093
  const storkeCapAddWidth = data.strokeCap === "none" ? 0 : strokeWidth;
8047
- width += Math.max(miterLimitAddWidth, storkeCapAddWidth);
8094
+ spread += Math.max(miterLimitAddWidth, storkeCapAddWidth);
8048
8095
  }
8049
8096
  }
8050
- if (data.__useArrow) width += strokeWidth * 5;
8097
+ if (data.__useArrow) spread += strokeWidth * 5;
8051
8098
  if (box) {
8052
- width = Math.max(box.__layout.strokeSpread = box.__updateStrokeSpread(), width);
8053
- boxWidth = box.__layout.strokeBoxSpread;
8099
+ spread = max$2(spread, box.__layout.strokeSpread = box.__updateStrokeSpread());
8100
+ boxSpread = Math.max(boxSpread, box.__layout.strokeBoxSpread);
8054
8101
  }
8055
- this.__layout.strokeBoxSpread = boxWidth;
8056
- return width;
8102
+ this.__layout.strokeBoxSpread = boxSpread;
8103
+ return spread;
8057
8104
  },
8058
8105
  __updateRenderSpread() {
8059
- let width = 0;
8060
- const {shadow: shadow, innerShadow: innerShadow, blur: blur, backgroundBlur: backgroundBlur, filter: filter, renderSpread: renderSpread} = this.__;
8061
- if (shadow) width = Effect.getShadowSpread(this, shadow);
8062
- if (blur) width = Math.max(width, blur);
8063
- if (filter) width += Filter.getSpread(filter);
8064
- if (renderSpread) width += renderSpread;
8065
- let shapeWidth = width = Math.ceil(width);
8066
- 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));
8067
- if (backgroundBlur) shapeWidth = Math.max(shapeWidth, backgroundBlur);
8068
- this.__layout.renderShapeSpread = shapeWidth;
8069
- width += this.__layout.strokeSpread || 0;
8070
- return this.__box ? Math.max(this.__box.__updateRenderSpread(), width) : width;
8106
+ let spread = 0;
8107
+ const {shadow: shadow, innerShadow: innerShadow, blur: blur, backgroundBlur: backgroundBlur, filter: filter, renderSpread: renderSpread} = this.__, {strokeSpread: strokeSpread} = this.__layout, box = this.__box;
8108
+ if (shadow) spread = Effect.getShadowRenderSpread(this, shadow);
8109
+ if (blur) spread = max$2(spread, blur);
8110
+ if (filter) spread = add$1(spread, Filter.getSpread(filter));
8111
+ if (renderSpread) spread = add$1(spread, renderSpread);
8112
+ if (strokeSpread) spread = add$1(spread, strokeSpread);
8113
+ let shapeSpread = spread;
8114
+ if (innerShadow) shapeSpread = max$2(shapeSpread, Effect.getInnerShadowSpread(this, innerShadow));
8115
+ if (backgroundBlur) shapeSpread = max$2(shapeSpread, backgroundBlur);
8116
+ this.__layout.renderShapeSpread = shapeSpread;
8117
+ return box ? max$2(box.__updateRenderSpread(), spread) : spread;
8071
8118
  }
8072
8119
  };
8073
8120
 
@@ -9378,7 +9425,7 @@ __decorate([ resizeType() ], Canvas.prototype, "contextSettings", void 0);
9378
9425
 
9379
9426
  Canvas = __decorate([ registerUI() ], Canvas);
9380
9427
 
9381
- const {copyAndSpread: copyAndSpread, includes: includes, spread: spread, setList: setList} = BoundsHelper;
9428
+ const {copyAndSpread: copyAndSpread$1, includes: includes, spread: spread, setList: setList} = BoundsHelper;
9382
9429
 
9383
9430
  let Text = class Text extends UI {
9384
9431
  get __tag() {
@@ -9425,13 +9472,13 @@ let Text = class Text extends UI {
9425
9472
  if (this.isOverflow) setList(data.__textBoxBounds = {}, [ b, contentBounds ]), layout.renderChanged = true; else data.__textBoxBounds = b;
9426
9473
  }
9427
9474
  __updateRenderSpread() {
9428
- let width = super.__updateRenderSpread();
9429
- if (!width) width = this.isOverflow ? 1 : 0;
9430
- return width;
9475
+ let spread = super.__updateRenderSpread();
9476
+ if (!spread) spread = this.isOverflow ? 1 : 0;
9477
+ return spread;
9431
9478
  }
9432
9479
  __updateRenderBounds() {
9433
9480
  const {renderBounds: renderBounds, renderSpread: renderSpread} = this.__layout;
9434
- copyAndSpread(renderBounds, this.__.__textBoxBounds, renderSpread);
9481
+ copyAndSpread$1(renderBounds, this.__.__textBoxBounds, renderSpread);
9435
9482
  if (this.__box) this.__box.__layout.renderBounds = renderBounds;
9436
9483
  }
9437
9484
  __updateChange() {
@@ -9799,24 +9846,29 @@ function drawOutside(stroke, ui, canvas) {
9799
9846
  }
9800
9847
  }
9801
9848
 
9802
- const {getSpread: getSpread, getOuterOf: getOuterOf, getByMove: getByMove, getIntersectData: getIntersectData} = BoundsHelper;
9849
+ const {getSpread: getSpread, copyAndSpread: copyAndSpread, toOuterOf: toOuterOf, getOuterOf: getOuterOf, getByMove: getByMove, move: move$1, getIntersectData: getIntersectData} = BoundsHelper;
9850
+
9851
+ const tempBounds$1 = {};
9803
9852
 
9804
9853
  function shape(ui, current, options) {
9805
9854
  const canvas = current.getSameCanvas();
9806
- const nowWorld = ui.__nowWorld, currentBounds = current.bounds;
9807
- let bounds, matrix, fitMatrix, shapeBounds, worldCanvas;
9855
+ const currentBounds = current.bounds, nowWorld = ui.__nowWorld, layout = ui.__layout;
9856
+ const nowWorldShapeBounds = ui.__nowWorldShapeBounds || (ui.__nowWorldShapeBounds = {});
9857
+ toOuterOf(layout.strokeSpread ? (copyAndSpread(tempBounds$1, layout.boxBounds, layout.strokeSpread),
9858
+ tempBounds$1) : layout.boxBounds, nowWorld, nowWorldShapeBounds);
9859
+ let bounds, renderBounds, matrix, fitMatrix, shapeBounds, worldCanvas;
9808
9860
  let {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true);
9809
- if (currentBounds.includes(nowWorld)) {
9861
+ if (currentBounds.includes(nowWorldShapeBounds)) {
9810
9862
  worldCanvas = canvas;
9811
- bounds = shapeBounds = nowWorld;
9863
+ bounds = shapeBounds = nowWorldShapeBounds;
9864
+ renderBounds = nowWorld;
9812
9865
  } else {
9813
- const {renderShapeSpread: spread} = ui.__layout;
9814
9866
  let worldClipBounds;
9815
9867
  if (Platform.fullImageShadow) {
9816
- worldClipBounds = nowWorld;
9868
+ worldClipBounds = nowWorldShapeBounds;
9817
9869
  } else {
9818
- const spreadBounds = spread ? getSpread(currentBounds, scaleX === scaleY ? spread * scaleX : [ spread * scaleY, spread * scaleX ]) : currentBounds;
9819
- worldClipBounds = getIntersectData(spreadBounds, nowWorld);
9870
+ const spreadBounds = layout.renderShapeSpread ? getSpread(currentBounds, FourNumberHelper.swapAndScale(layout.renderShapeSpread, scaleX, scaleY)) : currentBounds;
9871
+ worldClipBounds = getIntersectData(spreadBounds, nowWorldShapeBounds);
9820
9872
  }
9821
9873
  fitMatrix = currentBounds.getFitMatrix(worldClipBounds);
9822
9874
  let {a: fitScaleX, d: fitScaleY} = fitMatrix;
@@ -9826,8 +9878,10 @@ function shape(ui, current, options) {
9826
9878
  scaleX *= fitScaleX;
9827
9879
  scaleY *= fitScaleY;
9828
9880
  }
9829
- shapeBounds = getOuterOf(nowWorld, fitMatrix);
9881
+ shapeBounds = getOuterOf(nowWorldShapeBounds, fitMatrix);
9830
9882
  bounds = getByMove(shapeBounds, -fitMatrix.e, -fitMatrix.f);
9883
+ renderBounds = getOuterOf(nowWorld, fitMatrix);
9884
+ move$1(renderBounds, -fitMatrix.e, -fitMatrix.f);
9831
9885
  const userMatrix = options.matrix;
9832
9886
  if (userMatrix) {
9833
9887
  matrix = new Matrix(fitMatrix);
@@ -9846,6 +9900,7 @@ function shape(ui, current, options) {
9846
9900
  matrix: matrix,
9847
9901
  fitMatrix: fitMatrix,
9848
9902
  bounds: bounds,
9903
+ renderBounds: renderBounds,
9849
9904
  worldCanvas: worldCanvas,
9850
9905
  shapeBounds: shapeBounds,
9851
9906
  scaleX: scaleX,
@@ -9949,7 +10004,7 @@ const PaintModule = {
9949
10004
  shape: shape
9950
10005
  };
9951
10006
 
9952
- let origin = {}, tempMatrix = getMatrixData();
10007
+ let origin = {}, tempMatrix$1 = getMatrixData();
9953
10008
 
9954
10009
  const {get: get$3, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, multiplyParent: multiplyParent, scale: scaleHelper, rotate: rotate, skew: skewHelper} = MatrixHelper;
9955
10010
 
@@ -9964,12 +10019,12 @@ function fillOrFitMode(data, box, x, y, scaleX, scaleY, rotation) {
9964
10019
  data.transform = transform;
9965
10020
  }
9966
10021
 
9967
- function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew, clipSize) {
10022
+ function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew, clipScaleX, clipScaleY) {
9968
10023
  const transform = get$3();
9969
10024
  layout(transform, box, x, y, scaleX, scaleY, rotation, skew);
9970
- if (clipSize) {
9971
- tempMatrix.a = box.width / clipSize.width, tempMatrix.d = box.height / clipSize.height;
9972
- multiplyParent(transform, tempMatrix);
10025
+ if (clipScaleX) {
10026
+ tempMatrix$1.a = clipScaleX, tempMatrix$1.d = clipScaleY;
10027
+ multiplyParent(transform, tempMatrix$1);
9973
10028
  }
9974
10029
  data.transform = transform;
9975
10030
  }
@@ -10070,7 +10125,12 @@ function getPatternData(paint, box, image) {
10070
10125
 
10071
10126
  case "normal":
10072
10127
  case "clip":
10073
- if (tempImage.x || tempImage.y || scaleX || clipSize || rotation || skew) clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation, skew, paint.clipSize);
10128
+ if (tempImage.x || tempImage.y || scaleX || clipSize || rotation || skew) {
10129
+ let clipScaleX, clipScaleY;
10130
+ if (clipSize) clipScaleX = box.width / clipSize.width, clipScaleY = box.height / clipSize.height;
10131
+ clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation, skew, clipScaleX, clipScaleY);
10132
+ if (clipScaleX) scaleX = scaleX ? scaleX * clipScaleX : scaleX, scaleY = scaleY ? scaleY * clipScaleY : clipScaleY;
10133
+ }
10074
10134
  break;
10075
10135
 
10076
10136
  case "repeat":
@@ -10228,7 +10288,7 @@ function ignoreRender(ui, value) {
10228
10288
 
10229
10289
  const {get: get$1, scale: scale, copy: copy$1} = MatrixHelper;
10230
10290
 
10231
- const {floor: floor, ceil: ceil, max: max, abs: abs} = Math;
10291
+ const {floor: floor, ceil: ceil, max: max$1, abs: abs} = Math;
10232
10292
 
10233
10293
  function createPattern(ui, paint, pixelRatio) {
10234
10294
  let {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true, paint.scaleFixed);
@@ -10277,8 +10337,8 @@ function createPattern(ui, paint, pixelRatio) {
10277
10337
  if (transform || scaleX !== 1 || scaleY !== 1) {
10278
10338
  const canvasWidth = width + (xGap || 0);
10279
10339
  const canvasHeight = height + (yGap || 0);
10280
- scaleX /= canvasWidth / max(floor(canvasWidth), 1);
10281
- scaleY /= canvasHeight / max(floor(canvasHeight), 1);
10340
+ scaleX /= canvasWidth / max$1(floor(canvasWidth), 1);
10341
+ scaleY /= canvasHeight / max$1(floor(canvasHeight), 1);
10282
10342
  if (!imageMatrix) {
10283
10343
  imageMatrix = get$1();
10284
10344
  if (transform) copy$1(imageMatrix, transform);
@@ -10304,17 +10364,15 @@ function checkImage(ui, canvas, paint, allowDraw) {
10304
10364
  if (allowDraw) {
10305
10365
  if (data.repeat) {
10306
10366
  allowDraw = false;
10307
- } else {
10308
- if (!(paint.changeful || Platform.name === "miniapp" && ResizeEvent.isResizing(ui) || Export.running)) {
10309
- let {width: width, height: height} = data;
10310
- width *= scaleX * pixelRatio;
10311
- height *= scaleY * pixelRatio;
10312
- if (data.scaleX) {
10313
- width *= data.scaleX;
10314
- height *= data.scaleY;
10315
- }
10316
- allowDraw = width * height > Platform.image.maxCacheSize;
10367
+ } else if (!(paint.changeful || Platform.name === "miniapp" && ResizeEvent.isResizing(ui) || Export.running)) {
10368
+ let {width: width, height: height} = data;
10369
+ width *= scaleX * pixelRatio;
10370
+ height *= scaleY * pixelRatio;
10371
+ if (data.scaleX) {
10372
+ width *= data.scaleX;
10373
+ height *= data.scaleY;
10317
10374
  }
10375
+ allowDraw = width * height > Platform.image.maxCacheSize;
10318
10376
  }
10319
10377
  }
10320
10378
  if (allowDraw) {
@@ -10494,20 +10552,20 @@ const PaintGradientModule = {
10494
10552
  getTransform: getTransform
10495
10553
  };
10496
10554
 
10497
- const {copy: copy, toOffsetOutBounds: toOffsetOutBounds$1} = BoundsHelper;
10555
+ const {copy: copy, move: move, toOffsetOutBounds: toOffsetOutBounds$1} = BoundsHelper, {max: max} = Math;
10498
10556
 
10499
- const tempBounds = {};
10557
+ const tempBounds = {}, tempMatrix = new Matrix;
10500
10558
 
10501
10559
  const offsetOutBounds$1 = {};
10502
10560
 
10503
10561
  function shadow(ui, current, shape) {
10504
- let copyBounds, spreadScale;
10505
- const {__nowWorld: nowWorld, __layout: __layout} = ui;
10562
+ let copyBounds, transform;
10563
+ const {__nowWorld: nowWorld} = ui;
10506
10564
  const {shadow: shadow} = ui.__;
10507
- const {worldCanvas: worldCanvas, bounds: bounds, shapeBounds: shapeBounds, scaleX: scaleX, scaleY: scaleY} = shape;
10565
+ const {worldCanvas: worldCanvas, bounds: bounds, renderBounds: renderBounds, shapeBounds: shapeBounds, scaleX: scaleX, scaleY: scaleY} = shape;
10508
10566
  const other = current.getSameCanvas();
10509
10567
  const end = shadow.length - 1;
10510
- toOffsetOutBounds$1(bounds, offsetOutBounds$1);
10568
+ toOffsetOutBounds$1(bounds, offsetOutBounds$1, renderBounds);
10511
10569
  shadow.forEach((item, index) => {
10512
10570
  let otherScale = 1;
10513
10571
  if (item.scaleFixed) {
@@ -10515,54 +10573,61 @@ function shadow(ui, current, shape) {
10515
10573
  if (sx > 1) otherScale = 1 / sx;
10516
10574
  }
10517
10575
  other.setWorldShadow(offsetOutBounds$1.offsetX + item.x * scaleX * otherScale, offsetOutBounds$1.offsetY + item.y * scaleY * otherScale, item.blur * scaleX * otherScale, ColorConvert.string(item.color));
10518
- spreadScale = item.spread ? 1 + item.spread * 2 / (__layout.boxBounds.width + (__layout.strokeBoxSpread || 0) * 2) * otherScale : 0;
10519
- drawWorldShadow(other, offsetOutBounds$1, spreadScale, shape);
10520
- copyBounds = bounds;
10576
+ transform = getShadowTransform(ui, other, shape, item, offsetOutBounds$1, otherScale);
10577
+ if (transform) other.setTransform(transform);
10578
+ drawWorldShadow(other, offsetOutBounds$1, shape);
10579
+ if (transform) other.resetTransform();
10580
+ copyBounds = renderBounds;
10521
10581
  if (item.box) {
10522
10582
  other.restore();
10523
10583
  other.save();
10524
10584
  if (worldCanvas) {
10525
- other.copyWorld(other, bounds, nowWorld, "copy");
10585
+ other.copyWorld(other, renderBounds, nowWorld, "copy");
10526
10586
  copyBounds = nowWorld;
10527
10587
  }
10528
10588
  worldCanvas ? other.copyWorld(worldCanvas, nowWorld, nowWorld, "destination-out") : other.copyWorld(shape.canvas, shapeBounds, bounds, "destination-out");
10529
10589
  }
10530
- if (Effect.isTransformShadow(item)) Effect.renderTransformShadow(ui, current, other, copyBounds, item); else LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
10590
+ LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
10531
10591
  if (end && index < end) other.clearWorld(copyBounds);
10532
10592
  });
10533
10593
  other.recycle(copyBounds);
10534
10594
  }
10535
10595
 
10536
- function getShadowSpread(_ui, shadow) {
10537
- let width = 0;
10538
- 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));
10539
- return width;
10596
+ function getShadowRenderSpread(_ui, shadow) {
10597
+ let top = 0, right = 0, bottom = 0, left = 0, x, y, spread, blur;
10598
+ shadow.forEach(item => {
10599
+ x = item.x || 0, y = item.y || 0, spread = item.spread || 0, blur = (item.blur || 0) * 1.5;
10600
+ top = max(top, spread + blur - y);
10601
+ right = max(right, spread + blur + x);
10602
+ bottom = max(bottom, spread + blur + y);
10603
+ left = max(left, spread + blur - x);
10604
+ });
10605
+ return top === right && right === bottom && bottom === left ? top : [ top, right, bottom, left ];
10606
+ }
10607
+
10608
+ function getShadowTransform(ui, canvas, _shape, shadow, outBounds, otherScale, isInnerShaodw) {
10609
+ if (shadow.spread) {
10610
+ const spreadScale = 1 + shadow.spread * 2 / ui.__layout.strokeBounds.width * otherScale * (isInnerShaodw ? -1 : 1);
10611
+ tempMatrix.set().scaleOfOuter({
10612
+ x: (outBounds.x + outBounds.width / 2) * canvas.pixelRatio,
10613
+ y: (outBounds.y + outBounds.height / 2) * canvas.pixelRatio
10614
+ }, spreadScale);
10615
+ return tempMatrix;
10616
+ }
10617
+ return undefined;
10540
10618
  }
10541
10619
 
10542
- function drawWorldShadow(canvas, outBounds, spreadScale, shape) {
10543
- const {bounds: bounds, shapeBounds: shapeBounds} = shape;
10620
+ function drawWorldShadow(canvas, outBounds, shape) {
10621
+ const {shapeBounds: shapeBounds} = shape;
10622
+ let from, to;
10544
10623
  if (Platform.fullImageShadow) {
10545
10624
  copy(tempBounds, canvas.bounds);
10546
- tempBounds.x += outBounds.x - shapeBounds.x;
10547
- tempBounds.y += outBounds.y - shapeBounds.y;
10548
- if (spreadScale) {
10549
- const {fitMatrix: fitMatrix} = shape;
10550
- tempBounds.x -= (bounds.x + (fitMatrix ? fitMatrix.e : 0) + bounds.width / 2) * (spreadScale - 1);
10551
- tempBounds.y -= (bounds.y + (fitMatrix ? fitMatrix.f : 0) + bounds.height / 2) * (spreadScale - 1);
10552
- tempBounds.width *= spreadScale;
10553
- tempBounds.height *= spreadScale;
10554
- }
10555
- canvas.copyWorld(shape.canvas, canvas.bounds, tempBounds);
10625
+ move(tempBounds, outBounds.x - shapeBounds.x, outBounds.y - shapeBounds.y);
10626
+ from = canvas.bounds, to = tempBounds;
10556
10627
  } else {
10557
- if (spreadScale) {
10558
- copy(tempBounds, outBounds);
10559
- tempBounds.x -= outBounds.width / 2 * (spreadScale - 1);
10560
- tempBounds.y -= outBounds.height / 2 * (spreadScale - 1);
10561
- tempBounds.width *= spreadScale;
10562
- tempBounds.height *= spreadScale;
10563
- }
10564
- canvas.copyWorld(shape.canvas, shapeBounds, spreadScale ? tempBounds : outBounds);
10628
+ from = shapeBounds, to = outBounds;
10565
10629
  }
10630
+ canvas.copyWorld(shape.canvas, from, to);
10566
10631
  }
10567
10632
 
10568
10633
  const {toOffsetOutBounds: toOffsetOutBounds} = BoundsHelper;
@@ -10570,13 +10635,13 @@ const {toOffsetOutBounds: toOffsetOutBounds} = BoundsHelper;
10570
10635
  const offsetOutBounds = {};
10571
10636
 
10572
10637
  function innerShadow(ui, current, shape) {
10573
- let copyBounds, spreadScale;
10574
- const {__nowWorld: nowWorld, __layout: __layout} = ui;
10638
+ let copyBounds, transform;
10639
+ const {__nowWorld: nowWorld} = ui;
10575
10640
  const {innerShadow: innerShadow} = ui.__;
10576
- const {worldCanvas: worldCanvas, bounds: bounds, shapeBounds: shapeBounds, scaleX: scaleX, scaleY: scaleY} = shape;
10641
+ const {worldCanvas: worldCanvas, bounds: bounds, renderBounds: renderBounds, shapeBounds: shapeBounds, scaleX: scaleX, scaleY: scaleY} = shape;
10577
10642
  const other = current.getSameCanvas();
10578
10643
  const end = innerShadow.length - 1;
10579
- toOffsetOutBounds(bounds, offsetOutBounds);
10644
+ toOffsetOutBounds(bounds, offsetOutBounds, renderBounds);
10580
10645
  innerShadow.forEach((item, index) => {
10581
10646
  let otherScale = 1;
10582
10647
  if (item.scaleFixed) {
@@ -10585,16 +10650,17 @@ function innerShadow(ui, current, shape) {
10585
10650
  }
10586
10651
  other.save();
10587
10652
  other.setWorldShadow(offsetOutBounds.offsetX + item.x * scaleX * otherScale, offsetOutBounds.offsetY + item.y * scaleY * otherScale, item.blur * scaleX * otherScale);
10588
- spreadScale = item.spread ? 1 - item.spread * 2 / (__layout.boxBounds.width + (__layout.strokeBoxSpread || 0) * 2) * otherScale : 0;
10589
- drawWorldShadow(other, offsetOutBounds, spreadScale, shape);
10653
+ transform = getShadowTransform(ui, other, shape, item, offsetOutBounds, otherScale, true);
10654
+ if (transform) other.setTransform(transform);
10655
+ drawWorldShadow(other, offsetOutBounds, shape);
10590
10656
  other.restore();
10591
10657
  if (worldCanvas) {
10592
- other.copyWorld(other, bounds, nowWorld, "copy");
10658
+ other.copyWorld(other, renderBounds, nowWorld, "copy");
10593
10659
  other.copyWorld(worldCanvas, nowWorld, nowWorld, "source-out");
10594
10660
  copyBounds = nowWorld;
10595
10661
  } else {
10596
10662
  other.copyWorld(shape.canvas, shapeBounds, bounds, "source-out");
10597
- copyBounds = bounds;
10663
+ copyBounds = renderBounds;
10598
10664
  }
10599
10665
  other.fillWorld(copyBounds, ColorConvert.string(item.color), "source-in");
10600
10666
  LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
@@ -10603,6 +10669,8 @@ function innerShadow(ui, current, shape) {
10603
10669
  other.recycle(copyBounds);
10604
10670
  }
10605
10671
 
10672
+ const getInnerShadowSpread = getShadowRenderSpread;
10673
+
10606
10674
  function blur(ui, current, origin) {
10607
10675
  const {blur: blur} = ui.__;
10608
10676
  origin.setWorldBlur(blur * ui.__nowWorld.a);
@@ -10617,10 +10685,12 @@ const EffectModule = {
10617
10685
  innerShadow: innerShadow,
10618
10686
  blur: blur,
10619
10687
  backgroundBlur: backgroundBlur,
10620
- getShadowSpread: getShadowSpread,
10688
+ getShadowRenderSpread: getShadowRenderSpread,
10689
+ getShadowTransform: getShadowTransform,
10621
10690
  isTransformShadow(_shadow) {
10622
10691
  return undefined;
10623
- }
10692
+ },
10693
+ getInnerShadowSpread: getInnerShadowSpread
10624
10694
  };
10625
10695
 
10626
10696
  const {excludeRenderBounds: excludeRenderBounds} = LeafBoundsHelper;
@@ -10637,6 +10707,7 @@ Group.prototype.__renderMask = function(canvas, options) {
10637
10707
  maskEnd(this, currentMask, canvas, contentCanvas, maskCanvas, maskOpacity, undefined, true);
10638
10708
  maskCanvas = contentCanvas = null;
10639
10709
  }
10710
+ if (mask === "clipping" || mask === "clipping-path") excludeRenderBounds(child, options) || child.__render(canvas, options);
10640
10711
  maskOpacity = child.__.opacity;
10641
10712
  usedGrayscaleAlpha = false;
10642
10713
  if (mask === "path" || mask === "clipping-path") {
@@ -10654,7 +10725,6 @@ Group.prototype.__renderMask = function(canvas, options) {
10654
10725
  if (!contentCanvas) contentCanvas = getCanvas(canvas);
10655
10726
  child.__render(maskCanvas, options);
10656
10727
  }
10657
- if (mask === "clipping" || mask === "clipping-path") excludeRenderBounds(child, options) || child.__render(canvas, options);
10658
10728
  continue;
10659
10729
  }
10660
10730
  const childBlendMode = maskOpacity === 1 && child.__.__blendMode;
@@ -11244,4 +11314,4 @@ Object.assign(Effect, EffectModule);
11244
11314
 
11245
11315
  useCanvas();
11246
11316
 
11247
- export { AlignHelper, Answer, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsEvent, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, DataHelper, Debug, Direction4, Direction9, DragBoundsHelper, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, Frame, FrameData, Group, GroupData, Image$1 as Image, ImageData, ImageEvent, ImageManager, IncrementId, 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, MyImage, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Platform, Plugin, Point, PointHelper, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, Resource, Run, Star, StarData, State, StringNumberMap, TaskItem, TaskProcessor, Text, TextConvert, TextData, Transition, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, 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 };
11317
+ export { AlignHelper, Answer, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsEvent, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, DataHelper, Debug, Direction4, Direction9, DragBoundsHelper, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, FourNumberHelper, Frame, FrameData, Group, GroupData, Image$1 as Image, ImageData, ImageEvent, ImageManager, IncrementId, 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, MyImage, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Platform, Plugin, Point, PointHelper, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, Resource, Run, Star, StarData, State, StringNumberMap, TaskItem, TaskProcessor, Text, TextConvert, TextData, Transition, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, 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 };