@leafer-ui/miniapp 1.7.0 → 1.8.0

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.
@@ -436,7 +436,7 @@ const MatrixHelper = {
436
436
  const M$6 = MatrixHelper;
437
437
 
438
438
  const { toInnerPoint: toInnerPoint$2, toOuterPoint: toOuterPoint$3 } = MatrixHelper;
439
- const { sin: sin$4, cos: cos$4, abs: abs$4, sqrt: sqrt$2, atan2: atan2$2, min: min$1, round: round$2 } = Math;
439
+ const { sin: sin$4, cos: cos$4, abs: abs$3, sqrt: sqrt$2, atan2: atan2$2, min: min$1, round: round$2 } = Math;
440
440
  const PointHelper = {
441
441
  defaultPoint: getPointData(),
442
442
  tempPoint: {},
@@ -531,8 +531,8 @@ const PointHelper = {
531
531
  return getDistanceFrom(t.x, t.y, point.x, point.y);
532
532
  },
533
533
  getDistanceFrom(x1, y1, x2, y2) {
534
- const x = abs$4(x2 - x1);
535
- const y = abs$4(y2 - y1);
534
+ const x = abs$3(x2 - x1);
535
+ const y = abs$3(y2 - y1);
536
536
  return sqrt$2(x * x + y * y);
537
537
  },
538
538
  getMinDistanceFrom(x1, y1, x2, y2, x3, y3) {
@@ -763,7 +763,7 @@ class Matrix {
763
763
  MatrixHelper.reset(this);
764
764
  }
765
765
  }
766
- const tempMatrix = new Matrix();
766
+ const tempMatrix$1 = new Matrix();
767
767
 
768
768
  const TwoPointBoundsHelper = {
769
769
  tempPointBounds: {},
@@ -860,6 +860,12 @@ const AroundHelper = {
860
860
  }
861
861
  if (!onlyBoxSize)
862
862
  to.x += box.x, to.y += box.y;
863
+ },
864
+ getPoint(around, box, to) {
865
+ if (!to)
866
+ to = {};
867
+ AroundHelper.toPoint(around, box, to, true);
868
+ return to;
863
869
  }
864
870
  };
865
871
  function get$4(around) {
@@ -1788,10 +1794,13 @@ function contextAttr(realName) {
1788
1794
  return (target, key) => {
1789
1795
  if (!realName)
1790
1796
  realName = key;
1791
- Object.defineProperty(target, key, {
1797
+ const property = {
1792
1798
  get() { return this.context[realName]; },
1793
1799
  set(value) { this.context[realName] = value; }
1794
- });
1800
+ };
1801
+ if (key === 'strokeCap')
1802
+ property.set = function (value) { this.context[realName] = value === 'none' ? 'butt' : value; };
1803
+ Object.defineProperty(target, key, property);
1795
1804
  };
1796
1805
  }
1797
1806
  const contextMethodNameList = [];
@@ -2067,15 +2076,15 @@ __decorate([
2067
2076
  contextMethod()
2068
2077
  ], Canvas$1.prototype, "strokeText", null);
2069
2078
 
2070
- const { copy: copy$9, multiplyParent: multiplyParent$3 } = MatrixHelper, { round: round$1 } = Math;
2079
+ const { copy: copy$9, multiplyParent: multiplyParent$4 } = MatrixHelper, { round: round$1 } = Math;
2071
2080
  const minSize = { width: 1, height: 1, pixelRatio: 1 };
2072
2081
  const canvasSizeAttrs = ['width', 'height', 'pixelRatio'];
2073
2082
  class LeaferCanvasBase extends Canvas$1 {
2074
2083
  get width() { return this.size.width; }
2075
2084
  get height() { return this.size.height; }
2076
2085
  get pixelRatio() { return this.size.pixelRatio; }
2077
- get pixelWidth() { return this.width * this.pixelRatio; }
2078
- get pixelHeight() { return this.height * this.pixelRatio; }
2086
+ get pixelWidth() { return this.width * this.pixelRatio || 0; }
2087
+ get pixelHeight() { return this.height * this.pixelRatio || 0; }
2079
2088
  get pixelSnap() { return this.config.pixelSnap; }
2080
2089
  set pixelSnap(value) { this.config.pixelSnap = value; }
2081
2090
  get allowBackgroundColor() { return this.view && this.parentView; }
@@ -2140,7 +2149,7 @@ class LeaferCanvasBase extends Canvas$1 {
2140
2149
  setWorld(matrix, parentMatrix) {
2141
2150
  const { pixelRatio, pixelSnap } = this, w = this.worldTransform;
2142
2151
  if (parentMatrix)
2143
- multiplyParent$3(matrix, parentMatrix, w);
2152
+ multiplyParent$4(matrix, parentMatrix, w);
2144
2153
  w.a = matrix.a * pixelRatio;
2145
2154
  w.b = matrix.b * pixelRatio;
2146
2155
  w.c = matrix.c * pixelRatio;
@@ -2162,20 +2171,33 @@ class LeaferCanvasBase extends Canvas$1 {
2162
2171
  if (w)
2163
2172
  this.setTransform(w.a, w.b, w.c, w.d, w.e, w.f);
2164
2173
  }
2165
- setStroke(color, strokeWidth, options) {
2174
+ setStroke(color, strokeWidth, options, childOptions) {
2166
2175
  if (strokeWidth)
2167
2176
  this.strokeWidth = strokeWidth;
2168
2177
  if (color)
2169
2178
  this.strokeStyle = color;
2170
2179
  if (options)
2171
- this.setStrokeOptions(options);
2172
- }
2173
- setStrokeOptions(options) {
2174
- this.strokeCap = options.strokeCap === 'none' ? 'butt' : options.strokeCap;
2175
- this.strokeJoin = options.strokeJoin;
2176
- this.dashPattern = options.dashPattern;
2177
- this.dashOffset = options.dashOffset;
2178
- this.miterLimit = options.miterLimit;
2180
+ this.setStrokeOptions(options, childOptions);
2181
+ }
2182
+ setStrokeOptions(options, childOptions) {
2183
+ let { strokeCap, strokeJoin, dashPattern, dashOffset, miterLimit } = options;
2184
+ if (childOptions) {
2185
+ if (childOptions.strokeCap)
2186
+ strokeCap = childOptions.strokeCap;
2187
+ if (childOptions.strokeJoin)
2188
+ strokeJoin = childOptions.strokeJoin;
2189
+ if (childOptions.dashPattern !== undefined)
2190
+ dashPattern = childOptions.dashPattern;
2191
+ if (childOptions.dashOffset !== undefined)
2192
+ dashOffset = childOptions.dashOffset;
2193
+ if (childOptions.miterLimit)
2194
+ miterLimit = childOptions.miterLimit;
2195
+ }
2196
+ this.strokeCap = strokeCap;
2197
+ this.strokeJoin = strokeJoin;
2198
+ this.dashPattern = dashPattern;
2199
+ this.dashOffset = dashOffset;
2200
+ this.miterLimit = miterLimit;
2179
2201
  }
2180
2202
  saveBlendMode(blendMode) {
2181
2203
  this.savedBlendMode = this.blendMode;
@@ -2409,7 +2431,7 @@ const RectHelper = {
2409
2431
  }
2410
2432
  };
2411
2433
 
2412
- const { sin: sin$3, cos: cos$3, atan2: atan2$1, ceil: ceil$1, abs: abs$3, PI: PI$2, sqrt: sqrt$1, pow } = Math;
2434
+ const { sin: sin$3, cos: cos$3, atan2: atan2$1, ceil: ceil$1, abs: abs$2, PI: PI$2, sqrt: sqrt$1, pow } = Math;
2413
2435
  const { setPoint: setPoint$1, addPoint: addPoint$1 } = TwoPointBoundsHelper;
2414
2436
  const { set, toNumberPoints } = PointHelper;
2415
2437
  const { M: M$5, L: L$6, C: C$4, Q: Q$4, Z: Z$5 } = PathCommandMap;
@@ -2484,7 +2506,7 @@ const BezierHelper = {
2484
2506
  let totalRadian = endRadian - startRadian;
2485
2507
  if (totalRadian < 0)
2486
2508
  totalRadian += PI2;
2487
- if (totalRadian === PI$2 || (abs$3(BAx + BAy) < 1.e-12) || (abs$3(CBx + CBy) < 1.e-12)) {
2509
+ if (totalRadian === PI$2 || (abs$2(BAx + BAy) < 1.e-12) || (abs$2(CBx + CBy) < 1.e-12)) {
2488
2510
  if (data)
2489
2511
  data.push(L$6, x1, y1);
2490
2512
  if (setPointBounds) {
@@ -2526,7 +2548,7 @@ const BezierHelper = {
2526
2548
  totalRadian -= PI2;
2527
2549
  if (anticlockwise)
2528
2550
  totalRadian -= PI2;
2529
- const parts = ceil$1(abs$3(totalRadian / PI_2));
2551
+ const parts = ceil$1(abs$2(totalRadian / PI_2));
2530
2552
  const partRadian = totalRadian / parts;
2531
2553
  const partRadian4Sin = sin$3(partRadian / 4);
2532
2554
  const control = 8 / 3 * partRadian4Sin * partRadian4Sin / sin$3(partRadian / 2);
@@ -2971,7 +2993,7 @@ const { current, pushData, copyData } = PathConvert;
2971
2993
 
2972
2994
  const { M: M$3, L: L$4, C: C$2, Q: Q$2, Z: Z$3, N: N$2, D: D$2, X: X$2, G: G$2, F: F$3, O: O$2, P: P$2, U: U$2 } = PathCommandMap;
2973
2995
  const { getMinDistanceFrom, getRadianFrom } = PointHelper;
2974
- const { tan, min, abs: abs$2 } = Math;
2996
+ const { tan, min, abs: abs$1 } = Math;
2975
2997
  const startPoint = {};
2976
2998
  const PathCommandDataHelper = {
2977
2999
  beginPath(data) {
@@ -3034,7 +3056,7 @@ const PathCommandDataHelper = {
3034
3056
  arcTo(data, x1, y1, x2, y2, radius, lastX, lastY) {
3035
3057
  if (lastX !== undefined) {
3036
3058
  const d = getMinDistanceFrom(lastX, lastY, x1, y1, x2, y2);
3037
- radius = min(radius, min(d / 2, d / 2 * abs$2(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3059
+ radius = min(radius, min(d / 2, d / 2 * abs$1(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3038
3060
  }
3039
3061
  data.push(U$2, x1, y1, x2, y2, radius);
3040
3062
  },
@@ -3910,6 +3932,13 @@ function defineKey(target, key, descriptor, noConfigurable) {
3910
3932
  function getDescriptor(object, name) {
3911
3933
  return Object.getOwnPropertyDescriptor(object, name);
3912
3934
  }
3935
+ function createDescriptor(key, defaultValue) {
3936
+ const privateKey = '_' + key;
3937
+ return {
3938
+ get() { const v = this[privateKey]; return v === undefined ? defaultValue : v; },
3939
+ set(value) { this[privateKey] = value; }
3940
+ };
3941
+ }
3913
3942
  function getNames(object) {
3914
3943
  return Object.getOwnPropertyNames(object);
3915
3944
  }
@@ -4142,15 +4171,7 @@ function defineDataProcessor(target, key, defaultValue) {
4142
4171
  const data = target.__DataProcessor.prototype;
4143
4172
  const computedKey = '_' + key;
4144
4173
  const setMethodName = getSetMethodName(key);
4145
- const property = {
4146
- get() {
4147
- const v = this[computedKey];
4148
- return v === undefined ? defaultValue : v;
4149
- },
4150
- set(value) {
4151
- this[computedKey] = value;
4152
- }
4153
- };
4174
+ const property = createDescriptor(key, defaultValue);
4154
4175
  if (defaultValue === undefined) {
4155
4176
  property.get = function () { return this[computedKey]; };
4156
4177
  }
@@ -4265,7 +4286,7 @@ function registerUIEvent() {
4265
4286
  };
4266
4287
  }
4267
4288
 
4268
- const { copy: copy$7, toInnerPoint: toInnerPoint$1, toOuterPoint: toOuterPoint$1, scaleOfOuter: scaleOfOuter$2, rotateOfOuter: rotateOfOuter$2, skewOfOuter, multiplyParent: multiplyParent$2, divideParent, getLayout } = MatrixHelper;
4289
+ const { copy: copy$7, toInnerPoint: toInnerPoint$1, toOuterPoint: toOuterPoint$1, scaleOfOuter: scaleOfOuter$2, rotateOfOuter: rotateOfOuter$2, skewOfOuter, multiplyParent: multiplyParent$3, divideParent, getLayout } = MatrixHelper;
4269
4290
  const matrix$1 = {}, { round } = Math;
4270
4291
  const LeafHelper = {
4271
4292
  updateAllMatrix(leaf, checkAutoLayout, waitAutoLayout) {
@@ -4337,6 +4358,14 @@ const LeafHelper = {
4337
4358
  }
4338
4359
  return true;
4339
4360
  },
4361
+ copyCanvasByWorld(leaf, currentCanvas, fromCanvas, fromWorld, blendMode, onlyResetTransform) {
4362
+ if (!fromWorld)
4363
+ fromWorld = leaf.__nowWorld;
4364
+ if (leaf.__worldFlipped || Platform.fullImageShadow)
4365
+ currentCanvas.copyWorldByReset(fromCanvas, fromWorld, leaf.__nowWorld, blendMode, onlyResetTransform);
4366
+ else
4367
+ currentCanvas.copyWorldToInner(fromCanvas, fromWorld, leaf.__layout.renderBounds, blendMode);
4368
+ },
4340
4369
  moveWorld(t, x, y = 0, isInnerPoint, transition) {
4341
4370
  const local = typeof x === 'object' ? Object.assign({}, x) : { x, y };
4342
4371
  isInnerPoint ? toOuterPoint$1(t.localTransform, local, local, true) : (t.parent && toInnerPoint$1(t.parent.worldTransform, local, local, true));
@@ -4396,14 +4425,14 @@ const LeafHelper = {
4396
4425
  },
4397
4426
  transformWorld(t, transform, resize, transition) {
4398
4427
  copy$7(matrix$1, t.worldTransform);
4399
- multiplyParent$2(matrix$1, transform);
4428
+ multiplyParent$3(matrix$1, transform);
4400
4429
  if (t.parent)
4401
4430
  divideParent(matrix$1, t.parent.worldTransform);
4402
4431
  L.setTransform(t, matrix$1, resize, transition);
4403
4432
  },
4404
4433
  transform(t, transform, resize, transition) {
4405
4434
  copy$7(matrix$1, t.localTransform);
4406
- multiplyParent$2(matrix$1, transform);
4435
+ multiplyParent$3(matrix$1, transform);
4407
4436
  L.setTransform(t, matrix$1, resize, transition);
4408
4437
  },
4409
4438
  setTransform(t, transform, resize, transition) {
@@ -5265,17 +5294,18 @@ const LeafDataProxy = {
5265
5294
  }
5266
5295
  };
5267
5296
 
5268
- const { setLayout, multiplyParent: multiplyParent$1, translateInner, defaultWorld } = MatrixHelper;
5297
+ const { setLayout, multiplyParent: multiplyParent$2, translateInner, defaultWorld } = MatrixHelper;
5269
5298
  const { toPoint: toPoint$3, tempPoint } = AroundHelper;
5270
5299
  const LeafMatrix = {
5271
5300
  __updateWorldMatrix() {
5272
- multiplyParent$1(this.__local || this.__layout, this.parent ? this.parent.__world : defaultWorld, this.__world, !!this.__layout.affectScaleOrRotation, this.__, this.parent && this.parent.__);
5301
+ const { parent, __layout } = this;
5302
+ multiplyParent$2(this.__local || __layout, parent ? parent.__world : defaultWorld, this.__world, !!__layout.affectScaleOrRotation, this.__, parent && (parent.scrollY || parent.scrollX) && parent.__);
5273
5303
  },
5274
5304
  __updateLocalMatrix() {
5275
5305
  if (this.__local) {
5276
5306
  const layout = this.__layout, local = this.__local, data = this.__;
5277
5307
  if (layout.affectScaleOrRotation) {
5278
- if ((layout.scaleChanged && (layout.resized = 'scale')) || layout.rotationChanged) {
5308
+ if ((layout.scaleChanged && (layout.resized || (layout.resized = 'scale'))) || layout.rotationChanged) {
5279
5309
  setLayout(local, data, null, null, layout.affectRotation);
5280
5310
  layout.scaleChanged = layout.rotationChanged = undefined;
5281
5311
  }
@@ -5441,10 +5471,7 @@ const LeafRender = {
5441
5471
  return this.__renderEraser(canvas, options);
5442
5472
  const tempCanvas = canvas.getSameCanvas(true, true);
5443
5473
  this.__draw(tempCanvas, options, canvas);
5444
- if (this.__worldFlipped)
5445
- canvas.copyWorldByReset(tempCanvas, this.__nowWorld, null, data.__blendMode, true);
5446
- else
5447
- canvas.copyWorldToInner(tempCanvas, this.__nowWorld, this.__layout.renderBounds, data.__blendMode);
5474
+ LeafHelper.copyCanvasByWorld(this, canvas, tempCanvas, this.__nowWorld, data.__blendMode, true);
5448
5475
  tempCanvas.recycle(this.__nowWorld);
5449
5476
  }
5450
5477
  else {
@@ -5492,7 +5519,7 @@ const BranchRender = {
5492
5519
  options.dimOpacity = data.dim === true ? 0.2 : data.dim;
5493
5520
  else if (data.dimskip)
5494
5521
  options.dimOpacity && (options.dimOpacity = 0);
5495
- if (data.__single) {
5522
+ if (data.__single && !this.isBranchLeaf) {
5496
5523
  if (data.eraser === 'path')
5497
5524
  return this.__renderEraser(canvas, options);
5498
5525
  const tempCanvas = canvas.getSameCanvas(false, true);
@@ -5514,9 +5541,7 @@ const BranchRender = {
5514
5541
  else {
5515
5542
  const { children } = this;
5516
5543
  for (let i = 0, len = children.length; i < len; i++) {
5517
- if (excludeRenderBounds$1(children[i], options))
5518
- continue;
5519
- children[i].__render(canvas, options);
5544
+ excludeRenderBounds$1(children[i], options) || children[i].__render(canvas, options);
5520
5545
  }
5521
5546
  }
5522
5547
  },
@@ -5524,16 +5549,15 @@ const BranchRender = {
5524
5549
  if (this.__worldOpacity) {
5525
5550
  const { children } = this;
5526
5551
  for (let i = 0, len = children.length; i < len; i++) {
5527
- if (excludeRenderBounds$1(children[i], options))
5528
- continue;
5529
- children[i].__clip(canvas, options);
5552
+ excludeRenderBounds$1(children[i], options) || children[i].__clip(canvas, options);
5530
5553
  }
5531
5554
  }
5532
5555
  }
5533
5556
  };
5534
5557
 
5558
+ const tempScaleData$1 = {};
5535
5559
  const { LEAF, create } = IncrementId;
5536
- const { toInnerPoint, toOuterPoint, multiplyParent } = MatrixHelper;
5560
+ const { toInnerPoint, toOuterPoint, multiplyParent: multiplyParent$1 } = MatrixHelper;
5537
5561
  const { toOuterOf } = BoundsHelper;
5538
5562
  const { copy: copy$4, move } = PointHelper;
5539
5563
  const { moveLocal, zoomOfLocal, rotateOfLocal, skewOfLocal, moveWorld, zoomOfWorld, rotateOfWorld, skewOfWorld, transform, transformWorld, setTransform, getFlipTransform, getLocalOrigin, getRelativeWorld, drop } = LeafHelper;
@@ -5715,7 +5739,7 @@ let Leaf = class Leaf {
5715
5739
  if (!this.__cameraWorld)
5716
5740
  this.__cameraWorld = {};
5717
5741
  const cameraWorld = this.__cameraWorld, world = this.__world;
5718
- multiplyParent(world, options.matrix, cameraWorld, undefined, world);
5742
+ multiplyParent$1(world, options.matrix, cameraWorld, undefined, world);
5719
5743
  toOuterOf(this.__layout.renderBounds, cameraWorld, cameraWorld);
5720
5744
  cameraWorld.half !== world.half && (cameraWorld.half = world.half);
5721
5745
  return cameraWorld;
@@ -5724,6 +5748,22 @@ let Leaf = class Leaf {
5724
5748
  return this.__world;
5725
5749
  }
5726
5750
  }
5751
+ getClampRenderScale() {
5752
+ let { scaleX } = this.__nowWorld || this.__world;
5753
+ if (scaleX < 0)
5754
+ scaleX = -scaleX;
5755
+ return scaleX > 1 ? scaleX : 1;
5756
+ }
5757
+ getRenderScaleData(abs, scaleFixed) {
5758
+ const { scaleX, scaleY } = ImageManager.patternLocked ? this.__world : this.__nowWorld;
5759
+ if (scaleFixed)
5760
+ tempScaleData$1.scaleX = tempScaleData$1.scaleY = 1;
5761
+ else if (abs)
5762
+ tempScaleData$1.scaleX = scaleX < 0 ? -scaleX : scaleX, tempScaleData$1.scaleY = scaleY < 0 ? -scaleY : scaleY;
5763
+ else
5764
+ tempScaleData$1.scaleX = scaleX, tempScaleData$1.scaleY = scaleY;
5765
+ return tempScaleData$1;
5766
+ }
5727
5767
  getTransform(relative) {
5728
5768
  return this.__layout.getTransform(relative || 'local');
5729
5769
  }
@@ -6248,7 +6288,7 @@ class LeafLevelList {
6248
6288
  }
6249
6289
  }
6250
6290
 
6251
- const version = "1.7.0";
6291
+ const version = "1.8.0";
6252
6292
 
6253
6293
  class LeaferCanvas extends LeaferCanvasBase {
6254
6294
  get allowBackgroundColor() { return false; }
@@ -7235,6 +7275,11 @@ function zoomLayerType() {
7235
7275
  });
7236
7276
  };
7237
7277
  }
7278
+ function createAttr(defaultValue) {
7279
+ return (target, key) => {
7280
+ defineKey(target, key, createDescriptor(key, defaultValue));
7281
+ };
7282
+ }
7238
7283
 
7239
7284
  function hasTransparent$3(color) {
7240
7285
  if (!color || color.length === 7 || color.length === 4)
@@ -7292,22 +7337,9 @@ const emptyPaint = {};
7292
7337
  const debug$2 = Debug.get('UIData');
7293
7338
  class UIData extends LeafData {
7294
7339
  get scale() { const { scaleX, scaleY } = this; return scaleX !== scaleY ? { x: scaleX, y: scaleY } : scaleX; }
7295
- get __strokeWidth() {
7296
- const { strokeWidth, strokeWidthFixed } = this;
7297
- if (strokeWidthFixed) {
7298
- const ui = this.__leaf;
7299
- let { scaleX } = ui.__nowWorld || ui.__world;
7300
- if (scaleX < 0)
7301
- scaleX = -scaleX;
7302
- return scaleX > 1 ? strokeWidth / scaleX : strokeWidth;
7303
- }
7304
- else
7305
- return strokeWidth;
7306
- }
7307
- get __hasMultiPaint() {
7308
- const t = this;
7309
- return (t.fill && this.__useStroke) || (t.__isFills && t.fill.length > 1) || (t.__isStrokes && t.stroke.length > 1) || t.__useEffect;
7310
- }
7340
+ get __strokeWidth() { return this.__getRealStrokeWidth(); }
7341
+ get __maxStrokeWidth() { const t = this; return t.__hasMultiStrokeStyle ? Math.max(t.__hasMultiStrokeStyle, t.strokeWidth) : t.strokeWidth; }
7342
+ get __hasMultiPaint() { const t = this; return (t.fill && this.__useStroke) || (t.__isFills && t.fill.length > 1) || (t.__isStrokes && t.stroke.length > 1) || t.__useEffect; }
7311
7343
  get __clipAfterFill() { const t = this; return (t.cornerRadius || t.innerShadow || t.__pathInputed); }
7312
7344
  get __hasSurface() { const t = this; return (t.fill || t.stroke); }
7313
7345
  get __autoWidth() { return !this._width; }
@@ -7389,6 +7421,21 @@ class UIData extends LeafData {
7389
7421
  Paint.compute('stroke', this.__leaf);
7390
7422
  this.__needComputePaint = undefined;
7391
7423
  }
7424
+ __getRealStrokeWidth(childStyle) {
7425
+ let { strokeWidth, strokeWidthFixed } = this;
7426
+ if (childStyle) {
7427
+ if (childStyle.strokeWidth)
7428
+ strokeWidth = childStyle.strokeWidth;
7429
+ if (childStyle.strokeWidthFixed !== undefined)
7430
+ strokeWidthFixed = childStyle.strokeWidthFixed;
7431
+ }
7432
+ if (strokeWidthFixed) {
7433
+ const scale = this.__leaf.getClampRenderScale();
7434
+ return scale > 1 ? strokeWidth / scale : strokeWidth;
7435
+ }
7436
+ else
7437
+ return strokeWidth;
7438
+ }
7392
7439
  __setPaint(attrName, value) {
7393
7440
  this.__setInput(attrName, value);
7394
7441
  const layout = this.__leaf.__layout;
@@ -7413,6 +7460,7 @@ class UIData extends LeafData {
7413
7460
  }
7414
7461
  else {
7415
7462
  stintSet$2(this, '__isAlphaPixelStroke', undefined);
7463
+ stintSet$2(this, '__hasMultiStrokeStyle', undefined);
7416
7464
  this._stroke = this.__isStrokes = undefined;
7417
7465
  }
7418
7466
  }
@@ -7434,8 +7482,8 @@ class GroupData extends UIData {
7434
7482
 
7435
7483
  class BoxData extends GroupData {
7436
7484
  get __boxStroke() { return !this.__pathInputed; }
7437
- get __drawAfterFill() { const t = this; return (t.overflow === 'hide' && (t.__clipAfterFill || t.innerShadow) && t.__leaf.children.length); }
7438
- get __clipAfterFill() { return this.__leaf.isOverflow || super.__clipAfterFill; }
7485
+ get __drawAfterFill() { const t = this; return t.__single || t.__clipAfterFill; }
7486
+ get __clipAfterFill() { const t = this; return t.overflow === 'hide' && t.__leaf.children.length && (t.__leaf.isOverflow || super.__clipAfterFill); }
7439
7487
  }
7440
7488
 
7441
7489
  class LeaferData extends GroupData {
@@ -7555,7 +7603,7 @@ class CanvasData extends RectData {
7555
7603
  const UIBounds = {
7556
7604
  __updateStrokeSpread() {
7557
7605
  let width = 0, boxWidth = 0;
7558
- const data = this.__, { strokeAlign, strokeWidth } = data, box = this.__box;
7606
+ const data = this.__, { strokeAlign, __maxStrokeWidth: strokeWidth } = data, box = this.__box;
7559
7607
  if ((data.stroke || data.hitStroke === 'all') && strokeWidth && strokeAlign !== 'inside') {
7560
7608
  boxWidth = width = strokeAlign === 'center' ? strokeWidth / 2 : strokeWidth;
7561
7609
  if (!data.__boxStroke) {
@@ -7575,13 +7623,15 @@ const UIBounds = {
7575
7623
  },
7576
7624
  __updateRenderSpread() {
7577
7625
  let width = 0;
7578
- const { shadow, innerShadow, blur, backgroundBlur, filter } = this.__;
7626
+ const { shadow, innerShadow, blur, backgroundBlur, filter, renderSpread } = this.__;
7579
7627
  if (shadow)
7580
7628
  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));
7581
7629
  if (blur)
7582
7630
  width = Math.max(width, blur);
7583
7631
  if (filter)
7584
7632
  width += Filter.getSpread(filter);
7633
+ if (renderSpread)
7634
+ width += renderSpread;
7585
7635
  let shapeWidth = width = Math.ceil(width);
7586
7636
  if (innerShadow)
7587
7637
  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));
@@ -7604,7 +7654,7 @@ const UIRender = {
7604
7654
  }
7605
7655
  if (data.__useEffect) {
7606
7656
  const { shadow, fill, stroke } = data, otherEffect = data.innerShadow || data.blur || data.backgroundBlur || data.filter;
7607
- stintSet$1(data, '__isFastShadow', shadow && !otherEffect && shadow.length < 2 && !shadow[0].spread && !(shadow[0].box && data.__isTransparentFill) && fill && !(fill instanceof Array && fill.length > 1) && (this.useFastShadow || !stroke || (stroke && data.strokeAlign === 'inside')));
7657
+ stintSet$1(data, '__isFastShadow', shadow && !otherEffect && shadow.length < 2 && !shadow[0].spread && fill && !data.__isTransparentFill && !(fill instanceof Array && fill.length > 1) && (this.useFastShadow || !stroke || (stroke && data.strokeAlign === 'inside')));
7608
7658
  data.__useEffect = !!(shadow || otherEffect);
7609
7659
  }
7610
7660
  data.__checkSingle();
@@ -7711,17 +7761,17 @@ const RectRender = {
7711
7761
  if (__drawAfterFill)
7712
7762
  this.__drawAfterFill(canvas, options);
7713
7763
  if (stroke) {
7714
- const { strokeAlign, __strokeWidth } = this.__;
7715
- if (!__strokeWidth)
7764
+ const { strokeAlign, __strokeWidth: strokeWidth } = this.__;
7765
+ if (!strokeWidth)
7716
7766
  return;
7717
- canvas.setStroke(stroke, __strokeWidth, this.__);
7718
- const half = __strokeWidth / 2;
7767
+ canvas.setStroke(stroke, strokeWidth, this.__);
7768
+ const half = strokeWidth / 2;
7719
7769
  switch (strokeAlign) {
7720
7770
  case 'center':
7721
7771
  canvas.strokeRect(0, 0, width, height);
7722
7772
  break;
7723
7773
  case 'inside':
7724
- width -= __strokeWidth, height -= __strokeWidth;
7774
+ width -= strokeWidth, height -= strokeWidth;
7725
7775
  if (width < 0 || height < 0) {
7726
7776
  canvas.save();
7727
7777
  this.__clip(canvas, options);
@@ -7732,7 +7782,7 @@ const RectRender = {
7732
7782
  canvas.strokeRect(x + half, y + half, width, height);
7733
7783
  break;
7734
7784
  case 'outside':
7735
- canvas.strokeRect(x - half, y - half, width + __strokeWidth, height + __strokeWidth);
7785
+ canvas.strokeRect(x - half, y - half, width + strokeWidth, height + strokeWidth);
7736
7786
  break;
7737
7787
  }
7738
7788
  }
@@ -7745,6 +7795,8 @@ let UI = UI_1 = class UI extends Leaf {
7745
7795
  get isFrame() { return false; }
7746
7796
  set scale(value) { MathHelper.assignScale(this, value); }
7747
7797
  get scale() { return this.__.scale; }
7798
+ get isAutoWidth() { const t = this.__; return t.__autoWidth || t.autoWidth; }
7799
+ get isAutoHeight() { const t = this.__; return t.__autoHeight || t.autoHeight; }
7748
7800
  get pen() {
7749
7801
  const { path } = this.__;
7750
7802
  pen.set(this.path = path || []);
@@ -7959,6 +8011,9 @@ __decorate([
7959
8011
  __decorate([
7960
8012
  naturalBoundsType(1)
7961
8013
  ], UI.prototype, "pixelRatio", void 0);
8014
+ __decorate([
8015
+ affectRenderBoundsType(0)
8016
+ ], UI.prototype, "renderSpread", void 0);
7962
8017
  __decorate([
7963
8018
  pathInputType()
7964
8019
  ], UI.prototype, "path", void 0);
@@ -8115,7 +8170,8 @@ let Group = class Group extends UI {
8115
8170
  }
8116
8171
  toJSON(options) {
8117
8172
  const data = super.toJSON(options);
8118
- data.children = this.children.map(child => child.toJSON(options));
8173
+ if (!this.childlessJSON)
8174
+ data.children = this.children.map(child => child.toJSON(options));
8119
8175
  return data;
8120
8176
  }
8121
8177
  pick(_hitPoint, _options) { return undefined; }
@@ -8562,8 +8618,8 @@ let Box = class Box extends Group {
8562
8618
  __updateRenderSpread() { return this.__updateRectRenderSpread() || -1; }
8563
8619
  __updateRectBoxBounds() { }
8564
8620
  __updateBoxBounds(_secondLayout) {
8565
- const data = this.__;
8566
8621
  if (this.children.length && !this.pathInputed) {
8622
+ const data = this.__;
8567
8623
  if (data.__autoSide) {
8568
8624
  if (data.__hasSurface)
8569
8625
  this.__extraUpdate();
@@ -8590,20 +8646,26 @@ let Box = class Box extends Group {
8590
8646
  __updateStrokeBounds() { }
8591
8647
  __updateRenderBounds() {
8592
8648
  let isOverflow;
8593
- const { renderBounds } = this.__layout;
8594
8649
  if (this.children.length) {
8650
+ const data = this.__, { renderBounds, boxBounds } = this.__layout;
8595
8651
  super.__updateRenderBounds();
8596
8652
  copy$3(childrenRenderBounds, renderBounds);
8597
8653
  this.__updateRectRenderBounds();
8598
- isOverflow = !includes$1(renderBounds, childrenRenderBounds);
8599
- if (isOverflow && this.__.overflow !== 'hide')
8654
+ if (data.scrollY || data.scrollX) {
8655
+ childrenRenderBounds.x += data.scrollX;
8656
+ childrenRenderBounds.y += data.scrollY;
8657
+ }
8658
+ isOverflow = !includes$1(boxBounds, childrenRenderBounds);
8659
+ if (isOverflow && data.overflow !== 'hide')
8600
8660
  add(renderBounds, childrenRenderBounds);
8601
8661
  }
8602
8662
  else
8603
8663
  this.__updateRectRenderBounds();
8604
8664
  DataHelper.stintSet(this, 'isOverflow', isOverflow);
8665
+ this.__updateScrollBar();
8605
8666
  }
8606
8667
  __updateRectRenderBounds() { }
8668
+ __updateScrollBar() { }
8607
8669
  __updateRectChange() { }
8608
8670
  __updateChange() {
8609
8671
  super.__updateChange();
@@ -8620,10 +8682,12 @@ let Box = class Box extends Group {
8620
8682
  if (this.children.length)
8621
8683
  this.__renderGroup(canvas, options);
8622
8684
  }
8685
+ if (this.scrollBar)
8686
+ this.scrollBar.__render(canvas, options);
8623
8687
  }
8624
8688
  __drawContent(canvas, options) {
8625
8689
  this.__renderGroup(canvas, options);
8626
- if (this.__.__useStroke) {
8690
+ if (this.__.__useStroke || this.__.__useEffect) {
8627
8691
  canvas.setWorld(this.__nowWorld);
8628
8692
  this.__drawRenderPath(canvas);
8629
8693
  }
@@ -10426,18 +10490,20 @@ leaf.__hitWorld = function (point) {
10426
10490
  }
10427
10491
  return this.__hit(inner);
10428
10492
  };
10429
- leaf.__hitFill = function (inner) { var _a; return (_a = this.__hitCanvas) === null || _a === void 0 ? void 0 : _a.hitFill(inner, this.__.windingRule); };
10430
- leaf.__hitStroke = function (inner, strokeWidth) { var _a; return (_a = this.__hitCanvas) === null || _a === void 0 ? void 0 : _a.hitStroke(inner, strokeWidth); };
10431
- leaf.__hitPixel = function (inner) { var _a; return (_a = this.__hitCanvas) === null || _a === void 0 ? void 0 : _a.hitPixel(inner, this.__layout.renderBounds, this.__hitCanvas.hitScale); };
10432
- leaf.__drawHitPath = function (canvas) { if (canvas)
10433
- this.__drawRenderPath(canvas); };
10493
+ leaf.__hitFill = function (inner) { const h = this.__hitCanvas; return h && h.hitFill(inner, this.__.windingRule); };
10494
+ leaf.__hitStroke = function (inner, strokeWidth) { const h = this.__hitCanvas; return h && h.hitStroke(inner, strokeWidth); };
10495
+ leaf.__hitPixel = function (inner) { const h = this.__hitCanvas; return h && h.hitPixel(inner, this.__layout.renderBounds, h.hitScale); };
10496
+ leaf.__drawHitPath = function (canvas) { canvas && this.__drawRenderPath(canvas); };
10434
10497
 
10435
10498
  const matrix = new Matrix();
10436
10499
  const ui$1 = UI.prototype;
10437
10500
  ui$1.__updateHitCanvas = function () {
10438
10501
  if (this.__box)
10439
10502
  this.__box.__updateHitCanvas();
10440
- const data = this.__, { hitCanvasManager } = this.leafer || this.parent.leafer;
10503
+ const leafer = this.leafer || (this.parent && this.parent.leafer);
10504
+ if (!leafer)
10505
+ return;
10506
+ const data = this.__, { hitCanvasManager } = leafer;
10441
10507
  const isHitPixelFill = (data.__isAlphaPixelFill || data.__isCanvas) && data.hitFill === 'pixel';
10442
10508
  const isHitPixelStroke = data.__isAlphaPixelStroke && data.hitStroke === 'pixel';
10443
10509
  const isHitPixel = isHitPixelFill || isHitPixelStroke;
@@ -10473,7 +10539,7 @@ ui$1.__hit = function (inner) {
10473
10539
  const needHitFillPath = ((data.fill || data.__isCanvas) && (hitFill === 'path' || (hitFill === 'pixel' && !(data.__isAlphaPixelFill || data.__isCanvas)))) || hitFill === 'all';
10474
10540
  if (needHitFillPath && this.__hitFill(inner))
10475
10541
  return true;
10476
- const { hitStroke, __strokeWidth } = data;
10542
+ const { hitStroke, __maxStrokeWidth: strokeWidth } = data;
10477
10543
  const needHitStrokePath = (data.stroke && (hitStroke === 'path' || (hitStroke === 'pixel' && !data.__isAlphaPixelStroke))) || hitStroke === 'all';
10478
10544
  if (!needHitFillPath && !needHitStrokePath)
10479
10545
  return false;
@@ -10482,16 +10548,16 @@ ui$1.__hit = function (inner) {
10482
10548
  if (needHitStrokePath) {
10483
10549
  switch (data.strokeAlign) {
10484
10550
  case 'inside':
10485
- hitWidth += __strokeWidth * 2;
10551
+ hitWidth += strokeWidth * 2;
10486
10552
  if (!needHitFillPath && this.__hitFill(inner) && this.__hitStroke(inner, hitWidth))
10487
10553
  return true;
10488
10554
  hitWidth = radiusWidth;
10489
10555
  break;
10490
10556
  case 'center':
10491
- hitWidth += __strokeWidth;
10557
+ hitWidth += strokeWidth;
10492
10558
  break;
10493
10559
  case 'outside':
10494
- hitWidth += __strokeWidth * 2;
10560
+ hitWidth += strokeWidth * 2;
10495
10561
  if (!needHitFillPath) {
10496
10562
  if (!this.__hitFill(inner) && this.__hitStroke(inner, hitWidth))
10497
10563
  return true;
@@ -10696,9 +10762,14 @@ function fills(fills, ui, canvas) {
10696
10762
  }
10697
10763
  }
10698
10764
  canvas.fillStyle = item.style;
10699
- if (item.transform) {
10765
+ if (item.transform || item.scaleFixed) {
10700
10766
  canvas.save();
10701
- canvas.transform(item.transform);
10767
+ if (item.transform)
10768
+ canvas.transform(item.transform);
10769
+ if (item.scaleFixed) {
10770
+ const { scaleX, scaleY } = ui.getRenderScaleData(true);
10771
+ canvas.scale(1 / scaleX, 1 / scaleY);
10772
+ }
10702
10773
  if (item.blendMode)
10703
10774
  canvas.blendMode = item.blendMode;
10704
10775
  fillPathOrText(ui, canvas);
@@ -10734,8 +10805,13 @@ function strokeText(stroke, ui, canvas) {
10734
10805
  }
10735
10806
  function drawCenter$1(stroke, strokeWidthScale, ui, canvas) {
10736
10807
  const data = ui.__;
10737
- canvas.setStroke(!data.__isStrokes && stroke, data.strokeWidth * strokeWidthScale, data);
10738
- data.__isStrokes ? drawStrokesStyle(stroke, true, ui, canvas) : drawTextStroke(ui, canvas);
10808
+ if (typeof stroke === 'object') {
10809
+ drawStrokesStyle(stroke, strokeWidthScale, true, ui, canvas);
10810
+ }
10811
+ else {
10812
+ canvas.setStroke(stroke, data.__strokeWidth * strokeWidthScale, data);
10813
+ drawTextStroke(ui, canvas);
10814
+ }
10739
10815
  }
10740
10816
  function drawAlign(stroke, align, ui, canvas) {
10741
10817
  const out = canvas.getSameCanvas(true, true);
@@ -10744,15 +10820,9 @@ function drawAlign(stroke, align, ui, canvas) {
10744
10820
  out.blendMode = align === 'outside' ? 'destination-out' : 'destination-in';
10745
10821
  fillText(ui, out);
10746
10822
  out.blendMode = 'normal';
10747
- copyWorld(canvas, out, ui);
10823
+ LeafHelper.copyCanvasByWorld(ui, canvas, out);
10748
10824
  out.recycle(ui.__nowWorld);
10749
10825
  }
10750
- function copyWorld(canvas, out, ui) {
10751
- if (ui.__worldFlipped || Platform.fullImageShadow)
10752
- canvas.copyWorldByReset(out, ui.__nowWorld);
10753
- else
10754
- canvas.copyWorldToInner(out, ui.__nowWorld, ui.__layout.renderBounds);
10755
- }
10756
10826
  function drawTextStroke(ui, canvas) {
10757
10827
  let row, data = ui.__.__textDrawData;
10758
10828
  const { rows, decorationY } = data;
@@ -10768,14 +10838,21 @@ function drawTextStroke(ui, canvas) {
10768
10838
  rows.forEach(row => decorationY.forEach(value => canvas.strokeRect(row.x, row.y + value, row.width, decorationHeight)));
10769
10839
  }
10770
10840
  }
10771
- function drawStrokesStyle(strokes, isText, ui, canvas) {
10841
+ function drawStrokesStyle(strokes, strokeWidthScale, isText, ui, canvas) {
10772
10842
  let item;
10843
+ const data = ui.__, { __hasMultiStrokeStyle } = data;
10844
+ __hasMultiStrokeStyle || canvas.setStroke(undefined, data.__strokeWidth * strokeWidthScale, data);
10773
10845
  for (let i = 0, len = strokes.length; i < len; i++) {
10774
10846
  item = strokes[i];
10775
10847
  if (item.image && PaintImage.checkImage(ui, canvas, item, false))
10776
10848
  continue;
10777
10849
  if (item.style) {
10778
- canvas.strokeStyle = item.style;
10850
+ if (__hasMultiStrokeStyle) {
10851
+ const { strokeStyle } = item;
10852
+ strokeStyle ? canvas.setStroke(item.style, data.__getRealStrokeWidth(strokeStyle) * strokeWidthScale, data, strokeStyle) : canvas.setStroke(item.style, data.__strokeWidth * strokeWidthScale, data);
10853
+ }
10854
+ else
10855
+ canvas.strokeStyle = item.style;
10779
10856
  if (item.blendMode) {
10780
10857
  canvas.saveBlendMode(item.blendMode);
10781
10858
  isText ? drawTextStroke(ui, canvas) : canvas.stroke();
@@ -10814,8 +10891,13 @@ function strokes(strokes, ui, canvas) {
10814
10891
  }
10815
10892
  function drawCenter(stroke, strokeWidthScale, ui, canvas) {
10816
10893
  const data = ui.__;
10817
- canvas.setStroke(!data.__isStrokes && stroke, data.__strokeWidth * strokeWidthScale, data);
10818
- data.__isStrokes ? drawStrokesStyle(stroke, false, ui, canvas) : canvas.stroke();
10894
+ if (typeof stroke === 'object') {
10895
+ drawStrokesStyle(stroke, strokeWidthScale, false, ui, canvas);
10896
+ }
10897
+ else {
10898
+ canvas.setStroke(stroke, data.__strokeWidth * strokeWidthScale, data);
10899
+ canvas.stroke();
10900
+ }
10819
10901
  if (data.__useArrow)
10820
10902
  Paint.strokeArrow(stroke, ui, canvas);
10821
10903
  }
@@ -10837,7 +10919,7 @@ function drawOutside(stroke, ui, canvas) {
10837
10919
  drawCenter(stroke, 2, ui, out);
10838
10920
  out.clipUI(data);
10839
10921
  out.clearWorld(renderBounds);
10840
- copyWorld(canvas, out, ui);
10922
+ LeafHelper.copyCanvasByWorld(ui, canvas, out);
10841
10923
  out.recycle(ui.__nowWorld);
10842
10924
  }
10843
10925
  }
@@ -10892,8 +10974,16 @@ function compute(attrName, ui) {
10892
10974
  if (!(paints instanceof Array))
10893
10975
  paints = [paints];
10894
10976
  recycleMap = PaintImage.recycleImage(attrName, data);
10977
+ let maxChildStrokeWidth;
10895
10978
  for (let i = 0, len = paints.length, item; i < len; i++) {
10896
- (item = getLeafPaint(attrName, paints[i], ui)) && leafPaints.push(item);
10979
+ if (item = getLeafPaint(attrName, paints[i], ui)) {
10980
+ leafPaints.push(item);
10981
+ if (item.strokeStyle) {
10982
+ maxChildStrokeWidth || (maxChildStrokeWidth = 1);
10983
+ if (item.strokeStyle.strokeWidth)
10984
+ maxChildStrokeWidth = Math.max(maxChildStrokeWidth, item.strokeStyle.strokeWidth);
10985
+ }
10986
+ }
10897
10987
  }
10898
10988
  data['_' + attrName] = leafPaints.length ? leafPaints : undefined;
10899
10989
  if (leafPaints.length) {
@@ -10910,6 +11000,7 @@ function compute(attrName, ui) {
10910
11000
  else {
10911
11001
  stintSet(data, '__isAlphaPixelStroke', isAlphaPixel);
10912
11002
  stintSet(data, '__isTransparentStroke', isTransparent);
11003
+ stintSet(data, '__hasMultiStrokeStyle', maxChildStrokeWidth);
10913
11004
  }
10914
11005
  }
10915
11006
  function getLeafPaint(attrName, paint, ui) {
@@ -10941,6 +11032,11 @@ function getLeafPaint(attrName, paint, ui) {
10941
11032
  if (data) {
10942
11033
  if (typeof data.style === 'string' && hasTransparent$1(data.style))
10943
11034
  data.isTransparent = true;
11035
+ if (paint.style) {
11036
+ if (paint.style.strokeWidth === 0)
11037
+ return undefined;
11038
+ data.strokeStyle = paint.style;
11039
+ }
10944
11040
  if (paint.blendMode)
10945
11041
  data.blendMode = paint.blendMode;
10946
11042
  }
@@ -10960,8 +11056,8 @@ const PaintModule = {
10960
11056
  shape
10961
11057
  };
10962
11058
 
10963
- let origin = {};
10964
- const { get: get$3, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, scale: scaleHelper, rotate, skew: skewHelper } = MatrixHelper;
11059
+ let origin = {}, tempMatrix = getMatrixData();
11060
+ const { get: get$3, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, multiplyParent, scale: scaleHelper, rotate, skew: skewHelper } = MatrixHelper;
10965
11061
  function fillOrFitMode(data, box, x, y, scaleX, scaleY, rotation) {
10966
11062
  const transform = get$3();
10967
11063
  translate$1(transform, box.x + x, box.y + y);
@@ -10970,7 +11066,7 @@ function fillOrFitMode(data, box, x, y, scaleX, scaleY, rotation) {
10970
11066
  rotateOfOuter$1(transform, { x: box.x + box.width / 2, y: box.y + box.height / 2 }, rotation);
10971
11067
  data.transform = transform;
10972
11068
  }
10973
- function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew) {
11069
+ function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew, clipSize) {
10974
11070
  const transform = get$3();
10975
11071
  if (rotation)
10976
11072
  rotate(transform, rotation);
@@ -10979,6 +11075,10 @@ function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew) {
10979
11075
  if (scaleX)
10980
11076
  scaleHelper(transform, scaleX, scaleY);
10981
11077
  translate$1(transform, box.x + x, box.y + y);
11078
+ if (clipSize) {
11079
+ tempMatrix.a = box.width / clipSize.width, tempMatrix.d = box.height / clipSize.height;
11080
+ multiplyParent(transform, tempMatrix);
11081
+ }
10982
11082
  data.transform = transform;
10983
11083
  }
10984
11084
  function repeatMode(data, box, width, height, x, y, scaleX, scaleY, rotation, align) {
@@ -11015,13 +11115,15 @@ const tempBox = new Bounds();
11015
11115
  const tempScaleData = {};
11016
11116
  const tempImage = {};
11017
11117
  function createData(leafPaint, image, paint, box) {
11018
- const { changeful, sync, editing } = paint;
11118
+ const { changeful, sync, editing, scaleFixed } = paint;
11019
11119
  if (changeful)
11020
11120
  leafPaint.changeful = changeful;
11021
11121
  if (sync)
11022
11122
  leafPaint.sync = sync;
11023
11123
  if (editing)
11024
11124
  leafPaint.editing = editing;
11125
+ if (scaleFixed)
11126
+ leafPaint.scaleFixed = scaleFixed;
11025
11127
  leafPaint.data = getPatternData(paint, box, image);
11026
11128
  }
11027
11129
  function getPatternData(paint, box, image) {
@@ -11030,7 +11132,7 @@ function getPatternData(paint, box, image) {
11030
11132
  if (paint.mode === 'strench')
11031
11133
  paint.mode = 'stretch';
11032
11134
  let { width, height } = image;
11033
- const { opacity, mode, align, offset, scale, size, rotation, skew, repeat, filters } = paint;
11135
+ const { opacity, mode, align, offset, scale, size, rotation, skew, clipSize, repeat, filters } = paint;
11034
11136
  const sameBox = box.width === width && box.height === height;
11035
11137
  const data = { mode };
11036
11138
  const swapSize = align !== 'center' && (rotation || 0) % 180 === 90;
@@ -11064,8 +11166,8 @@ function getPatternData(paint, box, image) {
11064
11166
  break;
11065
11167
  case 'normal':
11066
11168
  case 'clip':
11067
- if (tempImage.x || tempImage.y || scaleX || rotation || skew)
11068
- clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation, skew);
11169
+ if (tempImage.x || tempImage.y || scaleX || clipSize || rotation || skew)
11170
+ clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation, skew, paint.clipSize);
11069
11171
  break;
11070
11172
  case 'repeat':
11071
11173
  if (!sameBox || scaleX || rotation)
@@ -11202,18 +11304,16 @@ function ignoreRender(ui, value) {
11202
11304
  }
11203
11305
 
11204
11306
  const { get: get$1, scale, copy: copy$1 } = MatrixHelper;
11205
- const { ceil, abs: abs$1 } = Math;
11307
+ const { ceil, abs } = Math;
11206
11308
  function createPattern(ui, paint, pixelRatio) {
11207
- let { scaleX, scaleY } = ImageManager.patternLocked ? ui.__world : ui.__nowWorld;
11309
+ let { scaleX, scaleY } = ui.getRenderScaleData(true, paint.scaleFixed);
11208
11310
  const id = scaleX + '-' + scaleY + '-' + pixelRatio;
11209
11311
  if (paint.patternId !== id && !ui.destroyed) {
11210
- scaleX = abs$1(scaleX);
11211
- scaleY = abs$1(scaleY);
11212
11312
  const { image, data } = paint;
11213
11313
  let imageScale, imageMatrix, { width, height, scaleX: sx, scaleY: sy, transform, repeat } = data;
11214
11314
  if (sx) {
11215
- sx = abs$1(sx);
11216
- sy = abs$1(sy);
11315
+ sx = abs(sx);
11316
+ sy = abs(sy);
11217
11317
  imageMatrix = get$1();
11218
11318
  copy$1(imageMatrix, transform);
11219
11319
  scale(imageMatrix, 1 / sx, 1 / sy);
@@ -11266,9 +11366,8 @@ function createPattern(ui, paint, pixelRatio) {
11266
11366
  }
11267
11367
  }
11268
11368
 
11269
- const { abs } = Math;
11270
11369
  function checkImage(ui, canvas, paint, allowDraw) {
11271
- const { scaleX, scaleY } = ImageManager.patternLocked ? ui.__world : ui.__nowWorld;
11370
+ const { scaleX, scaleY } = ui.getRenderScaleData(true, paint.scaleFixed);
11272
11371
  const { pixelRatio } = canvas, { data } = paint;
11273
11372
  if (!data || (paint.patternId === scaleX + '-' + scaleY + '-' + pixelRatio && !Export.running)) {
11274
11373
  return false;
@@ -11281,8 +11380,8 @@ function checkImage(ui, canvas, paint, allowDraw) {
11281
11380
  else {
11282
11381
  if (!(paint.changeful || ResizeEvent.isResizing(ui) || Export.running)) {
11283
11382
  let { width, height } = data;
11284
- width *= abs(scaleX) * pixelRatio;
11285
- height *= abs(scaleY) * pixelRatio;
11383
+ width *= scaleX * pixelRatio;
11384
+ height *= scaleY * pixelRatio;
11286
11385
  if (data.scaleX) {
11287
11386
  width *= data.scaleX;
11288
11387
  height *= data.scaleY;
@@ -11292,6 +11391,10 @@ function checkImage(ui, canvas, paint, allowDraw) {
11292
11391
  }
11293
11392
  }
11294
11393
  if (allowDraw) {
11394
+ if (ui.__.__isFastShadow) {
11395
+ canvas.fillStyle = paint.style || '#000';
11396
+ canvas.fill();
11397
+ }
11295
11398
  drawImage(ui, canvas, paint, data);
11296
11399
  return true;
11297
11400
  }
@@ -11480,10 +11583,7 @@ function shadow(ui, current, shape) {
11480
11583
  }
11481
11584
  worldCanvas ? other.copyWorld(worldCanvas, nowWorld, nowWorld, 'destination-out') : other.copyWorld(shape.canvas, shapeBounds, bounds, 'destination-out');
11482
11585
  }
11483
- if (ui.__worldFlipped)
11484
- current.copyWorldByReset(other, copyBounds, nowWorld, item.blendMode);
11485
- else
11486
- current.copyWorldToInner(other, copyBounds, __layout.renderBounds, item.blendMode);
11586
+ LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
11487
11587
  if (end && index < end)
11488
11588
  other.clearWorld(copyBounds, true);
11489
11589
  });
@@ -11542,10 +11642,7 @@ function innerShadow(ui, current, shape) {
11542
11642
  copyBounds = bounds;
11543
11643
  }
11544
11644
  other.fillWorld(copyBounds, ColorConvert.string(item.color), 'source-in');
11545
- if (ui.__worldFlipped)
11546
- current.copyWorldByReset(other, copyBounds, nowWorld, item.blendMode);
11547
- else
11548
- current.copyWorldToInner(other, copyBounds, __layout.renderBounds, item.blendMode);
11645
+ LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
11549
11646
  if (end && index < end)
11550
11647
  other.clearWorld(copyBounds, true);
11551
11648
  });
@@ -11601,12 +11698,11 @@ Group.prototype.__renderMask = function (canvas, options) {
11601
11698
  contentCanvas = getCanvas(canvas);
11602
11699
  child.__render(maskCanvas, options);
11603
11700
  }
11604
- if (!(mask === 'clipping' || mask === 'clipping-path'))
11605
- continue;
11606
- }
11607
- if (excludeRenderBounds(child, options))
11701
+ if (mask === 'clipping' || mask === 'clipping-path')
11702
+ excludeRenderBounds(child, options) || child.__render(canvas, options);
11608
11703
  continue;
11609
- child.__render(contentCanvas || canvas, options);
11704
+ }
11705
+ excludeRenderBounds(child, options) || child.__render(contentCanvas || canvas, options);
11610
11706
  }
11611
11707
  maskEnd(this, currentMask, canvas, contentCanvas, maskCanvas, maskOpacity);
11612
11708
  };
@@ -12200,4 +12296,4 @@ try {
12200
12296
  }
12201
12297
  catch (_a) { }
12202
12298
 
12203
- 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, DragEvent, Dragger, DropEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, Frame, FrameData, Group, GroupData, HitCanvasManager, Image, ImageData, ImageEvent, ImageManager, IncrementId, Interaction, InteractionBase, InteractionHelper, KeyEvent, Keyboard, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferImage, Line, LineData, MathHelper, Matrix, MatrixHelper, MoveEvent, MyDragEvent, MyImage, MyPointerEvent, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Picker, Platform, Plugin, Point, PointHelper, PointerButton, PointerEvent, 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, cursorType, dataProcessor, dataType, decorateLeafAttr, defineDataProcessor, defineKey, defineLeafAttr, doBoundsType, doStrokeType, effectType, emptyData, eraserType, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, isEmptyData, isNull, layoutProcessor, maskType, naturalBoundsType, opacityType, pathInputType, pathType, pen, positionType, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleType, sortType, strokeType, surfaceType, tempBounds$1 as tempBounds, tempMatrix, tempPoint$2 as tempPoint, useCanvas, useModule, version, visibleType, zoomLayerType };
12299
+ 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, DragEvent, Dragger, DropEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, Frame, FrameData, Group, GroupData, HitCanvasManager, Image, ImageData, ImageEvent, ImageManager, IncrementId, Interaction, InteractionBase, InteractionHelper, KeyEvent, Keyboard, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferImage, Line, LineData, MathHelper, Matrix, MatrixHelper, MoveEvent, MyDragEvent, MyImage, MyPointerEvent, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Picker, Platform, Plugin, Point, PointHelper, PointerButton, PointerEvent, 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, doBoundsType, doStrokeType, effectType, emptyData, eraserType, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, isEmptyData, isNull, layoutProcessor, maskType, naturalBoundsType, opacityType, pathInputType, pathType, pen, positionType, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleType, sortType, strokeType, surfaceType, tempBounds$1 as tempBounds, tempMatrix$1 as tempMatrix, tempPoint$2 as tempPoint, useCanvas, useModule, version, visibleType, zoomLayerType };