@leafer-ui/worker 1.9.7 → 1.9.9

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.9";
6778
6819
 
6779
6820
  class LeaferCanvas extends LeaferCanvasBase {
6780
6821
  get allowBackgroundColor() {
@@ -7199,6 +7240,7 @@ class Renderer {
7199
7240
  usePartRender: true,
7200
7241
  maxFPS: 120
7201
7242
  };
7243
+ this.frames = [];
7202
7244
  this.target = target;
7203
7245
  this.canvas = canvas;
7204
7246
  if (userConfig) this.config = DataHelper.default(userConfig, this.config);
@@ -7351,12 +7393,15 @@ class Renderer {
7351
7393
  const target = this.target;
7352
7394
  if (this.requestTime || !target) return;
7353
7395
  if (target.parentApp) return target.parentApp.requestRender(false);
7354
- const requestTime = this.requestTime = Date.now();
7396
+ this.requestTime = this.frameTime || Date.now();
7355
7397
  const render = () => {
7356
- const nowFPS = 1e3 / (Date.now() - requestTime);
7398
+ const nowFPS = 1e3 / ((this.frameTime = Date.now()) - this.requestTime);
7357
7399
  const {maxFPS: maxFPS} = this.config;
7358
- if (maxFPS && nowFPS > maxFPS - .5) return Platform.requestRender(render);
7359
- this.FPS = Math.min(120, Math.ceil(nowFPS));
7400
+ if (maxFPS && nowFPS > maxFPS) return Platform.requestRender(render);
7401
+ const {frames: frames} = this;
7402
+ if (frames.length > 30) frames.shift();
7403
+ frames.push(nowFPS);
7404
+ this.FPS = Math.round(frames.reduce((a, b) => a + b, 0) / frames.length);
7360
7405
  this.requestTime = 0;
7361
7406
  this.checkRender();
7362
7407
  };
@@ -8012,39 +8057,41 @@ class CanvasData extends RectData {
8012
8057
  }
8013
8058
  }
8014
8059
 
8060
+ const {max: max$2, add: add$1} = FourNumberHelper;
8061
+
8015
8062
  const UIBounds = {
8016
8063
  __updateStrokeSpread() {
8017
- let width = 0, boxWidth = 0;
8064
+ let spread = 0, boxSpread = 0;
8018
8065
  const data = this.__, {strokeAlign: strokeAlign, __maxStrokeWidth: strokeWidth} = data, box = this.__box;
8019
8066
  if ((data.stroke || data.hitStroke === "all") && strokeWidth && strokeAlign !== "inside") {
8020
- boxWidth = width = strokeAlign === "center" ? strokeWidth / 2 : strokeWidth;
8067
+ boxSpread = spread = strokeAlign === "center" ? strokeWidth / 2 : strokeWidth;
8021
8068
  if (!data.__boxStroke) {
8022
- const miterLimitAddWidth = data.__isLinePath ? 0 : 10 * width;
8069
+ const miterLimitAddWidth = data.__isLinePath ? 0 : 10 * spread;
8023
8070
  const storkeCapAddWidth = data.strokeCap === "none" ? 0 : strokeWidth;
8024
- width += Math.max(miterLimitAddWidth, storkeCapAddWidth);
8071
+ spread += Math.max(miterLimitAddWidth, storkeCapAddWidth);
8025
8072
  }
8026
8073
  }
8027
- if (data.__useArrow) width += strokeWidth * 5;
8074
+ if (data.__useArrow) spread += strokeWidth * 5;
8028
8075
  if (box) {
8029
- width = Math.max(box.__layout.strokeSpread = box.__updateStrokeSpread(), width);
8030
- boxWidth = box.__layout.strokeBoxSpread;
8076
+ spread = max$2(spread, box.__layout.strokeSpread = box.__updateStrokeSpread());
8077
+ boxSpread = Math.max(boxSpread, box.__layout.strokeBoxSpread);
8031
8078
  }
8032
- this.__layout.strokeBoxSpread = boxWidth;
8033
- return width;
8079
+ this.__layout.strokeBoxSpread = boxSpread;
8080
+ return spread;
8034
8081
  },
8035
8082
  __updateRenderSpread() {
8036
- let width = 0;
8037
- const {shadow: shadow, innerShadow: innerShadow, blur: blur, backgroundBlur: backgroundBlur, filter: filter, renderSpread: renderSpread} = this.__;
8038
- if (shadow) width = Effect.getShadowSpread(this, shadow);
8039
- if (blur) width = Math.max(width, blur);
8040
- if (filter) width += Filter.getSpread(filter);
8041
- if (renderSpread) width += renderSpread;
8042
- let shapeWidth = width = Math.ceil(width);
8043
- 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));
8044
- if (backgroundBlur) shapeWidth = Math.max(shapeWidth, backgroundBlur);
8045
- this.__layout.renderShapeSpread = shapeWidth;
8046
- width += this.__layout.strokeSpread || 0;
8047
- return this.__box ? Math.max(this.__box.__updateRenderSpread(), width) : width;
8083
+ let spread = 0;
8084
+ const {shadow: shadow, innerShadow: innerShadow, blur: blur, backgroundBlur: backgroundBlur, filter: filter, renderSpread: renderSpread} = this.__, {strokeSpread: strokeSpread} = this.__layout, box = this.__box;
8085
+ if (shadow) spread = Effect.getShadowRenderSpread(this, shadow);
8086
+ if (blur) spread = max$2(spread, blur);
8087
+ if (filter) spread = add$1(spread, Filter.getSpread(filter));
8088
+ if (renderSpread) spread = add$1(spread, renderSpread);
8089
+ if (strokeSpread) spread = add$1(spread, strokeSpread);
8090
+ let shapeSpread = spread;
8091
+ if (innerShadow) shapeSpread = max$2(shapeSpread, Effect.getInnerShadowSpread(this, innerShadow));
8092
+ if (backgroundBlur) shapeSpread = max$2(shapeSpread, backgroundBlur);
8093
+ this.__layout.renderShapeSpread = shapeSpread;
8094
+ return box ? max$2(box.__updateRenderSpread(), spread) : spread;
8048
8095
  }
8049
8096
  };
8050
8097
 
@@ -9355,7 +9402,7 @@ __decorate([ resizeType() ], Canvas.prototype, "contextSettings", void 0);
9355
9402
 
9356
9403
  Canvas = __decorate([ registerUI() ], Canvas);
9357
9404
 
9358
- const {copyAndSpread: copyAndSpread, includes: includes, spread: spread, setList: setList} = BoundsHelper;
9405
+ const {copyAndSpread: copyAndSpread$1, includes: includes, spread: spread, setList: setList} = BoundsHelper;
9359
9406
 
9360
9407
  let Text = class Text extends UI {
9361
9408
  get __tag() {
@@ -9402,13 +9449,13 @@ let Text = class Text extends UI {
9402
9449
  if (this.isOverflow) setList(data.__textBoxBounds = {}, [ b, contentBounds ]), layout.renderChanged = true; else data.__textBoxBounds = b;
9403
9450
  }
9404
9451
  __updateRenderSpread() {
9405
- let width = super.__updateRenderSpread();
9406
- if (!width) width = this.isOverflow ? 1 : 0;
9407
- return width;
9452
+ let spread = super.__updateRenderSpread();
9453
+ if (!spread) spread = this.isOverflow ? 1 : 0;
9454
+ return spread;
9408
9455
  }
9409
9456
  __updateRenderBounds() {
9410
9457
  const {renderBounds: renderBounds, renderSpread: renderSpread} = this.__layout;
9411
- copyAndSpread(renderBounds, this.__.__textBoxBounds, renderSpread);
9458
+ copyAndSpread$1(renderBounds, this.__.__textBoxBounds, renderSpread);
9412
9459
  if (this.__box) this.__box.__layout.renderBounds = renderBounds;
9413
9460
  }
9414
9461
  __updateChange() {
@@ -9834,9 +9881,9 @@ let DragEvent = class DragEvent extends PointerEvent {
9834
9881
  static setData(data) {
9835
9882
  this.data = data;
9836
9883
  }
9837
- static getValidMove(leaf, start, total, checkLimit = true) {
9838
- const move = leaf.getLocalPoint(total, null, true);
9839
- PointHelper.move(move, start.x - leaf.x, start.y - leaf.y);
9884
+ static getValidMove(leaf, localStart, worldTotal, checkLimit = true) {
9885
+ const move = leaf.getLocalPoint(worldTotal, null, true);
9886
+ PointHelper.move(move, localStart.x - leaf.x, localStart.y - leaf.y);
9840
9887
  if (checkLimit) this.limitMove(leaf, move);
9841
9888
  DragBoundsHelper.axisMove(leaf, move);
9842
9889
  return move;
@@ -10866,8 +10913,8 @@ ui$1.__updateHitCanvas = function() {
10866
10913
  if (isHitPixel) {
10867
10914
  const {renderBounds: renderBounds} = this.__layout;
10868
10915
  const size = Platform.image.hitCanvasSize;
10869
- const scale = h.hitScale = tempBounds$1.set(0, 0, size, size).getFitMatrix(renderBounds).a;
10870
- const {x: x, y: y, width: width, height: height} = tempBounds$1.set(renderBounds).scale(scale);
10916
+ const scale = h.hitScale = tempBounds$2.set(0, 0, size, size).getFitMatrix(renderBounds).a;
10917
+ const {x: x, y: y, width: width, height: height} = tempBounds$2.set(renderBounds).scale(scale);
10871
10918
  h.resize({
10872
10919
  width: width,
10873
10920
  height: height,
@@ -10964,8 +11011,8 @@ canvas.hitStroke = function(point, strokeWidth) {
10964
11011
  canvas.hitPixel = function(radiusPoint, offset, scale = 1) {
10965
11012
  let {x: x, y: y, radiusX: radiusX, radiusY: radiusY} = radiusPoint;
10966
11013
  if (offset) x -= offset.x, y -= offset.y;
10967
- tempBounds$1.set(x - radiusX, y - radiusY, radiusX * 2, radiusY * 2).scale(scale).ceil();
10968
- const {data: data} = this.context.getImageData(tempBounds$1.x, tempBounds$1.y, tempBounds$1.width || 1, tempBounds$1.height || 1);
11014
+ tempBounds$2.set(x - radiusX, y - radiusY, radiusX * 2, radiusY * 2).scale(scale).ceil();
11015
+ const {data: data} = this.context.getImageData(tempBounds$2.x, tempBounds$2.y, tempBounds$2.width || 1, tempBounds$2.height || 1);
10969
11016
  for (let i = 0, len = data.length; i < len; i += 4) {
10970
11017
  if (data[i + 3] > 0) return true;
10971
11018
  }
@@ -11165,24 +11212,29 @@ function drawOutside(stroke, ui, canvas) {
11165
11212
  }
11166
11213
  }
11167
11214
 
11168
- const {getSpread: getSpread, getOuterOf: getOuterOf, getByMove: getByMove, getIntersectData: getIntersectData} = BoundsHelper;
11215
+ const {getSpread: getSpread, copyAndSpread: copyAndSpread, toOuterOf: toOuterOf, getOuterOf: getOuterOf, getByMove: getByMove, move: move$1, getIntersectData: getIntersectData} = BoundsHelper;
11216
+
11217
+ const tempBounds$1 = {};
11169
11218
 
11170
11219
  function shape(ui, current, options) {
11171
11220
  const canvas = current.getSameCanvas();
11172
- const nowWorld = ui.__nowWorld, currentBounds = current.bounds;
11173
- let bounds, matrix, fitMatrix, shapeBounds, worldCanvas;
11221
+ const currentBounds = current.bounds, nowWorld = ui.__nowWorld, layout = ui.__layout;
11222
+ const nowWorldShapeBounds = ui.__nowWorldShapeBounds || (ui.__nowWorldShapeBounds = {});
11223
+ toOuterOf(layout.strokeSpread ? (copyAndSpread(tempBounds$1, layout.boxBounds, layout.strokeSpread),
11224
+ tempBounds$1) : layout.boxBounds, nowWorld, nowWorldShapeBounds);
11225
+ let bounds, renderBounds, matrix, fitMatrix, shapeBounds, worldCanvas;
11174
11226
  let {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true);
11175
- if (currentBounds.includes(nowWorld)) {
11227
+ if (currentBounds.includes(nowWorldShapeBounds)) {
11176
11228
  worldCanvas = canvas;
11177
- bounds = shapeBounds = nowWorld;
11229
+ bounds = shapeBounds = nowWorldShapeBounds;
11230
+ renderBounds = nowWorld;
11178
11231
  } else {
11179
- const {renderShapeSpread: spread} = ui.__layout;
11180
11232
  let worldClipBounds;
11181
11233
  if (Platform.fullImageShadow) {
11182
- worldClipBounds = nowWorld;
11234
+ worldClipBounds = nowWorldShapeBounds;
11183
11235
  } else {
11184
- const spreadBounds = spread ? getSpread(currentBounds, scaleX === scaleY ? spread * scaleX : [ spread * scaleY, spread * scaleX ]) : currentBounds;
11185
- worldClipBounds = getIntersectData(spreadBounds, nowWorld);
11236
+ const spreadBounds = layout.renderShapeSpread ? getSpread(currentBounds, FourNumberHelper.swapAndScale(layout.renderShapeSpread, scaleX, scaleY)) : currentBounds;
11237
+ worldClipBounds = getIntersectData(spreadBounds, nowWorldShapeBounds);
11186
11238
  }
11187
11239
  fitMatrix = currentBounds.getFitMatrix(worldClipBounds);
11188
11240
  let {a: fitScaleX, d: fitScaleY} = fitMatrix;
@@ -11192,8 +11244,10 @@ function shape(ui, current, options) {
11192
11244
  scaleX *= fitScaleX;
11193
11245
  scaleY *= fitScaleY;
11194
11246
  }
11195
- shapeBounds = getOuterOf(nowWorld, fitMatrix);
11247
+ shapeBounds = getOuterOf(nowWorldShapeBounds, fitMatrix);
11196
11248
  bounds = getByMove(shapeBounds, -fitMatrix.e, -fitMatrix.f);
11249
+ renderBounds = getOuterOf(nowWorld, fitMatrix);
11250
+ move$1(renderBounds, -fitMatrix.e, -fitMatrix.f);
11197
11251
  const userMatrix = options.matrix;
11198
11252
  if (userMatrix) {
11199
11253
  matrix = new Matrix(fitMatrix);
@@ -11212,6 +11266,7 @@ function shape(ui, current, options) {
11212
11266
  matrix: matrix,
11213
11267
  fitMatrix: fitMatrix,
11214
11268
  bounds: bounds,
11269
+ renderBounds: renderBounds,
11215
11270
  worldCanvas: worldCanvas,
11216
11271
  shapeBounds: shapeBounds,
11217
11272
  scaleX: scaleX,
@@ -11315,7 +11370,7 @@ const PaintModule = {
11315
11370
  shape: shape
11316
11371
  };
11317
11372
 
11318
- let origin = {}, tempMatrix = getMatrixData();
11373
+ let origin = {}, tempMatrix$1 = getMatrixData();
11319
11374
 
11320
11375
  const {get: get$3, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, multiplyParent: multiplyParent, scale: scaleHelper, rotate: rotate, skew: skewHelper} = MatrixHelper;
11321
11376
 
@@ -11330,12 +11385,12 @@ function fillOrFitMode(data, box, x, y, scaleX, scaleY, rotation) {
11330
11385
  data.transform = transform;
11331
11386
  }
11332
11387
 
11333
- function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew, clipSize) {
11388
+ function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew, clipScaleX, clipScaleY) {
11334
11389
  const transform = get$3();
11335
11390
  layout(transform, box, x, y, scaleX, scaleY, rotation, skew);
11336
- if (clipSize) {
11337
- tempMatrix.a = box.width / clipSize.width, tempMatrix.d = box.height / clipSize.height;
11338
- multiplyParent(transform, tempMatrix);
11391
+ if (clipScaleX) {
11392
+ tempMatrix$1.a = clipScaleX, tempMatrix$1.d = clipScaleY;
11393
+ multiplyParent(transform, tempMatrix$1);
11339
11394
  }
11340
11395
  data.transform = transform;
11341
11396
  }
@@ -11436,7 +11491,12 @@ function getPatternData(paint, box, image) {
11436
11491
 
11437
11492
  case "normal":
11438
11493
  case "clip":
11439
- if (tempImage.x || tempImage.y || scaleX || clipSize || rotation || skew) clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation, skew, paint.clipSize);
11494
+ if (tempImage.x || tempImage.y || scaleX || clipSize || rotation || skew) {
11495
+ let clipScaleX, clipScaleY;
11496
+ if (clipSize) clipScaleX = box.width / clipSize.width, clipScaleY = box.height / clipSize.height;
11497
+ clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation, skew, clipScaleX, clipScaleY);
11498
+ if (clipScaleX) scaleX = scaleX ? scaleX * clipScaleX : scaleX, scaleY = scaleY ? scaleY * clipScaleY : clipScaleY;
11499
+ }
11440
11500
  break;
11441
11501
 
11442
11502
  case "repeat":
@@ -11594,7 +11654,7 @@ function ignoreRender(ui, value) {
11594
11654
 
11595
11655
  const {get: get$1, scale: scale, copy: copy$1} = MatrixHelper;
11596
11656
 
11597
- const {floor: floor, ceil: ceil, max: max, abs: abs} = Math;
11657
+ const {floor: floor, ceil: ceil, max: max$1, abs: abs} = Math;
11598
11658
 
11599
11659
  function createPattern(ui, paint, pixelRatio) {
11600
11660
  let {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true, paint.scaleFixed);
@@ -11643,8 +11703,8 @@ function createPattern(ui, paint, pixelRatio) {
11643
11703
  if (transform || scaleX !== 1 || scaleY !== 1) {
11644
11704
  const canvasWidth = width + (xGap || 0);
11645
11705
  const canvasHeight = height + (yGap || 0);
11646
- scaleX /= canvasWidth / max(floor(canvasWidth), 1);
11647
- scaleY /= canvasHeight / max(floor(canvasHeight), 1);
11706
+ scaleX /= canvasWidth / max$1(floor(canvasWidth), 1);
11707
+ scaleY /= canvasHeight / max$1(floor(canvasHeight), 1);
11648
11708
  if (!imageMatrix) {
11649
11709
  imageMatrix = get$1();
11650
11710
  if (transform) copy$1(imageMatrix, transform);
@@ -11670,17 +11730,15 @@ function checkImage(ui, canvas, paint, allowDraw) {
11670
11730
  if (allowDraw) {
11671
11731
  if (data.repeat) {
11672
11732
  allowDraw = false;
11673
- } else {
11674
- if (!(paint.changeful || Platform.name === "miniapp" && ResizeEvent.isResizing(ui) || Export.running)) {
11675
- let {width: width, height: height} = data;
11676
- width *= scaleX * pixelRatio;
11677
- height *= scaleY * pixelRatio;
11678
- if (data.scaleX) {
11679
- width *= data.scaleX;
11680
- height *= data.scaleY;
11681
- }
11682
- allowDraw = width * height > Platform.image.maxCacheSize;
11733
+ } else if (!(paint.changeful || Platform.name === "miniapp" && ResizeEvent.isResizing(ui) || Export.running)) {
11734
+ let {width: width, height: height} = data;
11735
+ width *= scaleX * pixelRatio;
11736
+ height *= scaleY * pixelRatio;
11737
+ if (data.scaleX) {
11738
+ width *= data.scaleX;
11739
+ height *= data.scaleY;
11683
11740
  }
11741
+ allowDraw = width * height > Platform.image.maxCacheSize;
11684
11742
  }
11685
11743
  }
11686
11744
  if (allowDraw) {
@@ -11860,75 +11918,82 @@ const PaintGradientModule = {
11860
11918
  getTransform: getTransform
11861
11919
  };
11862
11920
 
11863
- const {copy: copy, toOffsetOutBounds: toOffsetOutBounds$1} = BoundsHelper;
11921
+ const {copy: copy, move: move, toOffsetOutBounds: toOffsetOutBounds$1} = BoundsHelper, {max: max} = Math;
11864
11922
 
11865
- const tempBounds = {};
11923
+ const tempBounds = {}, tempMatrix = new Matrix;
11866
11924
 
11867
11925
  const offsetOutBounds$1 = {};
11868
11926
 
11869
11927
  function shadow(ui, current, shape) {
11870
- let copyBounds, spreadScale;
11871
- const {__nowWorld: nowWorld, __layout: __layout} = ui;
11928
+ let copyBounds, transform;
11929
+ const {__nowWorld: nowWorld} = ui;
11872
11930
  const {shadow: shadow} = ui.__;
11873
- const {worldCanvas: worldCanvas, bounds: bounds, shapeBounds: shapeBounds, scaleX: scaleX, scaleY: scaleY} = shape;
11931
+ const {worldCanvas: worldCanvas, bounds: bounds, renderBounds: renderBounds, shapeBounds: shapeBounds, scaleX: scaleX, scaleY: scaleY} = shape;
11874
11932
  const other = current.getSameCanvas();
11875
11933
  const end = shadow.length - 1;
11876
- toOffsetOutBounds$1(bounds, offsetOutBounds$1);
11934
+ toOffsetOutBounds$1(bounds, offsetOutBounds$1, renderBounds);
11877
11935
  shadow.forEach((item, index) => {
11878
11936
  let otherScale = 1;
11879
11937
  if (item.scaleFixed) {
11880
11938
  const sx = Math.abs(nowWorld.scaleX);
11881
11939
  if (sx > 1) otherScale = 1 / sx;
11882
11940
  }
11883
- other.setWorldShadow(offsetOutBounds$1.offsetX + item.x * scaleX * otherScale, offsetOutBounds$1.offsetY + item.y * scaleY * otherScale, item.blur * scaleX * otherScale, ColorConvert.string(item.color));
11884
- spreadScale = item.spread ? 1 + item.spread * 2 / (__layout.boxBounds.width + (__layout.strokeBoxSpread || 0) * 2) * otherScale : 0;
11885
- drawWorldShadow(other, offsetOutBounds$1, spreadScale, shape);
11886
- copyBounds = bounds;
11941
+ other.setWorldShadow(offsetOutBounds$1.offsetX + (item.x || 0) * scaleX * otherScale, offsetOutBounds$1.offsetY + (item.y || 0) * scaleY * otherScale, (item.blur || 0) * scaleX * otherScale, ColorConvert.string(item.color));
11942
+ transform = Effect.getShadowTransform(ui, other, shape, item, offsetOutBounds$1, otherScale);
11943
+ if (transform) other.setTransform(transform);
11944
+ drawWorldShadow(other, offsetOutBounds$1, shape);
11945
+ if (transform) other.resetTransform();
11946
+ copyBounds = renderBounds;
11887
11947
  if (item.box) {
11888
11948
  other.restore();
11889
11949
  other.save();
11890
11950
  if (worldCanvas) {
11891
- other.copyWorld(other, bounds, nowWorld, "copy");
11951
+ other.copyWorld(other, renderBounds, nowWorld, "copy");
11892
11952
  copyBounds = nowWorld;
11893
11953
  }
11894
11954
  worldCanvas ? other.copyWorld(worldCanvas, nowWorld, nowWorld, "destination-out") : other.copyWorld(shape.canvas, shapeBounds, bounds, "destination-out");
11895
11955
  }
11896
- if (Effect.isTransformShadow(item)) Effect.renderTransformShadow(ui, current, other, copyBounds, item); else LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
11956
+ LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
11897
11957
  if (end && index < end) other.clearWorld(copyBounds);
11898
11958
  });
11899
11959
  other.recycle(copyBounds);
11900
11960
  }
11901
11961
 
11902
- function getShadowSpread(_ui, shadow) {
11903
- let width = 0;
11904
- 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));
11905
- return width;
11962
+ function getShadowRenderSpread(_ui, shadow) {
11963
+ let top = 0, right = 0, bottom = 0, left = 0, x, y, spread, blur;
11964
+ shadow.forEach(item => {
11965
+ x = item.x || 0, y = item.y || 0, spread = item.spread || 0, blur = (item.blur || 0) * 1.5;
11966
+ top = max(top, spread + blur - y);
11967
+ right = max(right, spread + blur + x);
11968
+ bottom = max(bottom, spread + blur + y);
11969
+ left = max(left, spread + blur - x);
11970
+ });
11971
+ return top === right && right === bottom && bottom === left ? top : [ top, right, bottom, left ];
11972
+ }
11973
+
11974
+ function getShadowTransform(ui, canvas, _shape, shadow, outBounds, otherScale, isInnerShaodw) {
11975
+ if (shadow.spread) {
11976
+ const spreadScale = 1 + shadow.spread * 2 / ui.__layout.strokeBounds.width * otherScale * (isInnerShaodw ? -1 : 1);
11977
+ tempMatrix.set().scaleOfOuter({
11978
+ x: (outBounds.x + outBounds.width / 2) * canvas.pixelRatio,
11979
+ y: (outBounds.y + outBounds.height / 2) * canvas.pixelRatio
11980
+ }, spreadScale);
11981
+ return tempMatrix;
11982
+ }
11983
+ return undefined;
11906
11984
  }
11907
11985
 
11908
- function drawWorldShadow(canvas, outBounds, spreadScale, shape) {
11909
- const {bounds: bounds, shapeBounds: shapeBounds} = shape;
11986
+ function drawWorldShadow(canvas, outBounds, shape) {
11987
+ const {shapeBounds: shapeBounds} = shape;
11988
+ let from, to;
11910
11989
  if (Platform.fullImageShadow) {
11911
11990
  copy(tempBounds, canvas.bounds);
11912
- tempBounds.x += outBounds.x - shapeBounds.x;
11913
- tempBounds.y += outBounds.y - shapeBounds.y;
11914
- if (spreadScale) {
11915
- const {fitMatrix: fitMatrix} = shape;
11916
- tempBounds.x -= (bounds.x + (fitMatrix ? fitMatrix.e : 0) + bounds.width / 2) * (spreadScale - 1);
11917
- tempBounds.y -= (bounds.y + (fitMatrix ? fitMatrix.f : 0) + bounds.height / 2) * (spreadScale - 1);
11918
- tempBounds.width *= spreadScale;
11919
- tempBounds.height *= spreadScale;
11920
- }
11921
- canvas.copyWorld(shape.canvas, canvas.bounds, tempBounds);
11991
+ move(tempBounds, outBounds.x - shapeBounds.x, outBounds.y - shapeBounds.y);
11992
+ from = canvas.bounds, to = tempBounds;
11922
11993
  } else {
11923
- if (spreadScale) {
11924
- copy(tempBounds, outBounds);
11925
- tempBounds.x -= outBounds.width / 2 * (spreadScale - 1);
11926
- tempBounds.y -= outBounds.height / 2 * (spreadScale - 1);
11927
- tempBounds.width *= spreadScale;
11928
- tempBounds.height *= spreadScale;
11929
- }
11930
- canvas.copyWorld(shape.canvas, shapeBounds, spreadScale ? tempBounds : outBounds);
11994
+ from = shapeBounds, to = outBounds;
11931
11995
  }
11996
+ canvas.copyWorld(shape.canvas, from, to);
11932
11997
  }
11933
11998
 
11934
11999
  const {toOffsetOutBounds: toOffsetOutBounds} = BoundsHelper;
@@ -11936,13 +12001,13 @@ const {toOffsetOutBounds: toOffsetOutBounds} = BoundsHelper;
11936
12001
  const offsetOutBounds = {};
11937
12002
 
11938
12003
  function innerShadow(ui, current, shape) {
11939
- let copyBounds, spreadScale;
11940
- const {__nowWorld: nowWorld, __layout: __layout} = ui;
12004
+ let copyBounds, transform;
12005
+ const {__nowWorld: nowWorld} = ui;
11941
12006
  const {innerShadow: innerShadow} = ui.__;
11942
- const {worldCanvas: worldCanvas, bounds: bounds, shapeBounds: shapeBounds, scaleX: scaleX, scaleY: scaleY} = shape;
12007
+ const {worldCanvas: worldCanvas, bounds: bounds, renderBounds: renderBounds, shapeBounds: shapeBounds, scaleX: scaleX, scaleY: scaleY} = shape;
11943
12008
  const other = current.getSameCanvas();
11944
12009
  const end = innerShadow.length - 1;
11945
- toOffsetOutBounds(bounds, offsetOutBounds);
12010
+ toOffsetOutBounds(bounds, offsetOutBounds, renderBounds);
11946
12011
  innerShadow.forEach((item, index) => {
11947
12012
  let otherScale = 1;
11948
12013
  if (item.scaleFixed) {
@@ -11950,17 +12015,18 @@ function innerShadow(ui, current, shape) {
11950
12015
  if (sx > 1) otherScale = 1 / sx;
11951
12016
  }
11952
12017
  other.save();
11953
- other.setWorldShadow(offsetOutBounds.offsetX + item.x * scaleX * otherScale, offsetOutBounds.offsetY + item.y * scaleY * otherScale, item.blur * scaleX * otherScale);
11954
- spreadScale = item.spread ? 1 - item.spread * 2 / (__layout.boxBounds.width + (__layout.strokeBoxSpread || 0) * 2) * otherScale : 0;
11955
- drawWorldShadow(other, offsetOutBounds, spreadScale, shape);
12018
+ other.setWorldShadow(offsetOutBounds.offsetX + (item.x || 0) * scaleX * otherScale, offsetOutBounds.offsetY + (item.y || 0) * scaleY * otherScale, (item.blur || 0) * scaleX * otherScale);
12019
+ transform = Effect.getShadowTransform(ui, other, shape, item, offsetOutBounds, otherScale, true);
12020
+ if (transform) other.setTransform(transform);
12021
+ drawWorldShadow(other, offsetOutBounds, shape);
11956
12022
  other.restore();
11957
12023
  if (worldCanvas) {
11958
- other.copyWorld(other, bounds, nowWorld, "copy");
12024
+ other.copyWorld(other, renderBounds, nowWorld, "copy");
11959
12025
  other.copyWorld(worldCanvas, nowWorld, nowWorld, "source-out");
11960
12026
  copyBounds = nowWorld;
11961
12027
  } else {
11962
12028
  other.copyWorld(shape.canvas, shapeBounds, bounds, "source-out");
11963
- copyBounds = bounds;
12029
+ copyBounds = renderBounds;
11964
12030
  }
11965
12031
  other.fillWorld(copyBounds, ColorConvert.string(item.color), "source-in");
11966
12032
  LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
@@ -11969,6 +12035,8 @@ function innerShadow(ui, current, shape) {
11969
12035
  other.recycle(copyBounds);
11970
12036
  }
11971
12037
 
12038
+ const getInnerShadowSpread = getShadowRenderSpread;
12039
+
11972
12040
  function blur(ui, current, origin) {
11973
12041
  const {blur: blur} = ui.__;
11974
12042
  origin.setWorldBlur(blur * ui.__nowWorld.a);
@@ -11983,10 +12051,12 @@ const EffectModule = {
11983
12051
  innerShadow: innerShadow,
11984
12052
  blur: blur,
11985
12053
  backgroundBlur: backgroundBlur,
11986
- getShadowSpread: getShadowSpread,
12054
+ getShadowRenderSpread: getShadowRenderSpread,
12055
+ getShadowTransform: getShadowTransform,
11987
12056
  isTransformShadow(_shadow) {
11988
12057
  return undefined;
11989
- }
12058
+ },
12059
+ getInnerShadowSpread: getInnerShadowSpread
11990
12060
  };
11991
12061
 
11992
12062
  const {excludeRenderBounds: excludeRenderBounds} = LeafBoundsHelper;
@@ -12003,6 +12073,7 @@ Group.prototype.__renderMask = function(canvas, options) {
12003
12073
  maskEnd(this, currentMask, canvas, contentCanvas, maskCanvas, maskOpacity, undefined, true);
12004
12074
  maskCanvas = contentCanvas = null;
12005
12075
  }
12076
+ if (mask === "clipping" || mask === "clipping-path") excludeRenderBounds(child, options) || child.__render(canvas, options);
12006
12077
  maskOpacity = child.__.opacity;
12007
12078
  usedGrayscaleAlpha = false;
12008
12079
  if (mask === "path" || mask === "clipping-path") {
@@ -12020,7 +12091,6 @@ Group.prototype.__renderMask = function(canvas, options) {
12020
12091
  if (!contentCanvas) contentCanvas = getCanvas(canvas);
12021
12092
  child.__render(maskCanvas, options);
12022
12093
  }
12023
- if (mask === "clipping" || mask === "clipping-path") excludeRenderBounds(child, options) || child.__render(canvas, options);
12024
12094
  continue;
12025
12095
  }
12026
12096
  const childBlendMode = maskOpacity === 1 && child.__.__blendMode;
@@ -12582,6 +12652,7 @@ const TextConvertModule = {
12582
12652
  };
12583
12653
 
12584
12654
  function string(color, opacity) {
12655
+ if (!color) return "#000";
12585
12656
  const doOpacity = isNumber(opacity) && opacity < 1;
12586
12657
  if (isString(color)) {
12587
12658
  if (doOpacity && ColorConvert.object) color = ColorConvert.object(color); else return color;
@@ -12616,4 +12687,4 @@ Object.assign(Creator, {
12616
12687
 
12617
12688
  useCanvas();
12618
12689
 
12619
- 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, Dragger, DropEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, Frame, FrameData, Group, GroupData, HitCanvasManager, Image, ImageData, ImageEvent, ImageManager, IncrementId, 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, 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 };
12690
+ 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, Dragger, DropEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, FourNumberHelper, Frame, FrameData, Group, GroupData, HitCanvasManager, Image, ImageData, ImageEvent, ImageManager, IncrementId, 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, 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 };