@leafer-ui/worker 1.9.3 → 1.9.5

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.
@@ -54,7 +54,7 @@ function isUndefined(value) {
54
54
  }
55
55
 
56
56
  function isNull(value) {
57
- return value === undefined || value === null;
57
+ return value == null;
58
58
  }
59
59
 
60
60
  function isString(value) {
@@ -136,6 +136,9 @@ class LeafData {
136
136
  const {path: path} = this;
137
137
  return path && path.length === 6 && path[0] === 1;
138
138
  }
139
+ get __usePathBox() {
140
+ return this.__pathInputed;
141
+ }
139
142
  get __blendMode() {
140
143
  if (this.eraser && this.eraser !== "path") return "destination-out";
141
144
  const {blendMode: blendMode} = this;
@@ -304,6 +307,9 @@ const MathHelper = {
304
307
  num = round$3(num * a) / a;
305
308
  return num === -0 ? 0 : num;
306
309
  },
310
+ sign(num) {
311
+ return num < 0 ? -1 : 1;
312
+ },
307
313
  getScaleData(scale, size, originSize, scaleData) {
308
314
  if (!scaleData) scaleData = {};
309
315
  if (size) {
@@ -1131,13 +1137,13 @@ const AlignHelper = {
1131
1137
  }
1132
1138
  };
1133
1139
 
1134
- const {tempPointBounds: tempPointBounds$1, setPoint: setPoint$2, addPoint: addPoint$2, toBounds: toBounds$3} = TwoPointBoundsHelper;
1140
+ const {tempPointBounds: tempPointBounds$1, setPoint: setPoint$2, addPoint: addPoint$2, toBounds: toBounds$2} = TwoPointBoundsHelper;
1135
1141
 
1136
1142
  const {toOuterPoint: toOuterPoint$2} = MatrixHelper;
1137
1143
 
1138
1144
  const {float: float, fourNumber: fourNumber} = MathHelper;
1139
1145
 
1140
- const {floor: floor$2, ceil: ceil$1} = Math;
1146
+ const {floor: floor$2, ceil: ceil$2} = Math;
1141
1147
 
1142
1148
  let right$1, bottom$1, boundsRight, boundsBottom;
1143
1149
 
@@ -1266,7 +1272,7 @@ const BoundsHelper = {
1266
1272
  point.x = t.x;
1267
1273
  toOuterPoint$2(matrix, point, toPoint$4);
1268
1274
  addPoint$2(tempPointBounds$1, toPoint$4.x, toPoint$4.y);
1269
- toBounds$3(tempPointBounds$1, to);
1275
+ toBounds$2(tempPointBounds$1, to);
1270
1276
  }
1271
1277
  },
1272
1278
  toInnerOf(t, matrix, to) {
@@ -1304,8 +1310,8 @@ const BoundsHelper = {
1304
1310
  const {x: x, y: y} = t;
1305
1311
  t.x = floor$2(t.x);
1306
1312
  t.y = floor$2(t.y);
1307
- t.width = x > t.x ? ceil$1(t.width + x - t.x) : ceil$1(t.width);
1308
- t.height = y > t.y ? ceil$1(t.height + y - t.y) : ceil$1(t.height);
1313
+ t.width = x > t.x ? ceil$2(t.width + x - t.x) : ceil$2(t.width);
1314
+ t.height = y > t.y ? ceil$2(t.height + y - t.y) : ceil$2(t.height);
1309
1315
  },
1310
1316
  unsign(t) {
1311
1317
  if (t.width < 0) {
@@ -1365,7 +1371,7 @@ const BoundsHelper = {
1365
1371
  },
1366
1372
  setPoints(t, points) {
1367
1373
  points.forEach((point, index) => index === 0 ? setPoint$2(tempPointBounds$1, point.x, point.y) : addPoint$2(tempPointBounds$1, point.x, point.y));
1368
- toBounds$3(tempPointBounds$1, t);
1374
+ toBounds$2(tempPointBounds$1, t);
1369
1375
  },
1370
1376
  setPoint(t, point) {
1371
1377
  B.set(t, point.x, point.y);
@@ -2218,15 +2224,15 @@ class LeaferCanvasBase extends Canvas$1 {
2218
2224
  DataHelper.copyAttrs(s, size, canvasSizeAttrs);
2219
2225
  canvasSizeAttrs.forEach(key => s[key] || (s[key] = 1));
2220
2226
  this.bounds = new Bounds(0, 0, this.width, this.height);
2221
- if (this.context && !this.unreal) {
2222
- this.updateViewSize();
2223
- this.smooth = this.config.smooth;
2224
- }
2227
+ this.updateViewSize();
2225
2228
  this.updateClientBounds();
2226
- if (this.context && !this.unreal && takeCanvas) {
2227
- this.clearWorld(takeCanvas.bounds);
2228
- this.copyWorld(takeCanvas);
2229
- takeCanvas.recycle();
2229
+ if (this.context) {
2230
+ this.smooth = this.config.smooth;
2231
+ if (!this.unreal && takeCanvas) {
2232
+ this.clearWorld(takeCanvas.bounds);
2233
+ this.copyWorld(takeCanvas);
2234
+ takeCanvas.recycle();
2235
+ }
2230
2236
  }
2231
2237
  }
2232
2238
  updateViewSize() {}
@@ -2540,7 +2546,7 @@ const RectHelper = {
2540
2546
  }
2541
2547
  };
2542
2548
 
2543
- const {sin: sin$3, cos: cos$3, atan2: atan2$1, ceil: ceil, abs: abs$2, PI: PI$2, sqrt: sqrt$1, pow: pow} = Math;
2549
+ const {sin: sin$3, cos: cos$3, hypot: hypot, atan2: atan2$1, ceil: ceil$1, abs: abs$2, PI: PI$2, sqrt: sqrt$1, pow: pow} = Math;
2544
2550
 
2545
2551
  const {setPoint: setPoint$1, addPoint: addPoint$1} = TwoPointBoundsHelper;
2546
2552
 
@@ -2611,9 +2617,11 @@ const BezierHelper = {
2611
2617
  const CBy = toY - y1;
2612
2618
  let startRadian = atan2$1(BAy, BAx);
2613
2619
  let endRadian = atan2$1(CBy, CBx);
2620
+ const lenBA = hypot(BAx, BAy);
2621
+ const lenCB = hypot(CBx, CBy);
2614
2622
  let totalRadian = endRadian - startRadian;
2615
2623
  if (totalRadian < 0) totalRadian += PI2;
2616
- if (totalRadian === PI$2 || abs$2(BAx + BAy) < 1e-12 || abs$2(CBx + CBy) < 1e-12) {
2624
+ if (lenBA < 1e-12 || lenCB < 1e-12 || totalRadian < 1e-12 || abs$2(totalRadian - PI$2) < 1e-12) {
2617
2625
  if (data) data.push(L$6, x1, y1);
2618
2626
  if (setPointBounds) {
2619
2627
  setPoint$1(setPointBounds, fromX, fromY);
@@ -2646,7 +2654,7 @@ const BezierHelper = {
2646
2654
  let totalRadian = endRadian - startRadian;
2647
2655
  if (totalRadian < 0) totalRadian += PI2; else if (totalRadian > PI2) totalRadian -= PI2;
2648
2656
  if (anticlockwise) totalRadian -= PI2;
2649
- const parts = ceil(abs$2(totalRadian / PI_2));
2657
+ const parts = ceil$1(abs$2(totalRadian / PI_2));
2650
2658
  const partRadian = totalRadian / parts;
2651
2659
  const partRadian4Sin = sin$3(partRadian / 4);
2652
2660
  const control = 8 / 3 * partRadian4Sin * partRadian4Sin / sin$3(partRadian / 2);
@@ -3205,11 +3213,7 @@ class PathCreator {
3205
3213
  this.set(path);
3206
3214
  }
3207
3215
  set(path) {
3208
- if (path) {
3209
- this.__path = isString(path) ? PathHelper.parse(path) : path;
3210
- } else {
3211
- this.__path = [];
3212
- }
3216
+ this.__path = path ? isString(path) ? PathHelper.parse(path) : path : [];
3213
3217
  return this;
3214
3218
  }
3215
3219
  beginPath() {
@@ -3377,7 +3381,7 @@ const {M: M$1, L: L$2, C: C, Q: Q, Z: Z$1, N: N, D: D$1, X: X, G: G, F: F$1, O:
3377
3381
 
3378
3382
  const {toTwoPointBounds: toTwoPointBounds, toTwoPointBoundsByQuadraticCurve: toTwoPointBoundsByQuadraticCurve, arcTo: arcTo$1, arc: arc, ellipse: ellipse$1} = BezierHelper;
3379
3383
 
3380
- const {addPointBounds: addPointBounds, copy: copy$7, addPoint: addPoint, setPoint: setPoint, addBounds: addBounds, toBounds: toBounds$2} = TwoPointBoundsHelper;
3384
+ const {addPointBounds: addPointBounds, copy: copy$7, addPoint: addPoint, setPoint: setPoint, addBounds: addBounds, toBounds: toBounds$1} = TwoPointBoundsHelper;
3381
3385
 
3382
3386
  const debug$a = Debug.get("PathBounds");
3383
3387
 
@@ -3392,7 +3396,7 @@ const setEndPoint = {};
3392
3396
  const PathBounds = {
3393
3397
  toBounds(data, setBounds) {
3394
3398
  PathBounds.toTwoPointBounds(data, setPointBounds);
3395
- toBounds$2(setPointBounds, setBounds);
3399
+ toBounds$1(setPointBounds, setBounds);
3396
3400
  },
3397
3401
  toTwoPointBounds(data, setPointBounds) {
3398
3402
  if (!data || !data.length) return setPoint(setPointBounds, 0, 0);
@@ -3579,14 +3583,18 @@ const PathCorner = {
3579
3583
  }
3580
3584
  };
3581
3585
 
3582
- PathHelper.creator = new PathCreator;
3586
+ function path(path) {
3587
+ return new PathCreator(path);
3588
+ }
3589
+
3590
+ const pen = path();
3591
+
3592
+ PathHelper.creator = path();
3583
3593
 
3584
3594
  PathHelper.parse = PathConvert.parse;
3585
3595
 
3586
3596
  PathHelper.convertToCanvasData = PathConvert.toCanvasData;
3587
3597
 
3588
- const pen = new PathCreator;
3589
-
3590
3598
  const {drawRoundRect: drawRoundRect} = RectHelper;
3591
3599
 
3592
3600
  function roundRect(drawer) {
@@ -3951,7 +3959,7 @@ const ImageManager = {
3951
3959
  return FileHelper.alphaPixelTypes.some(item => I$1.isFormat(item, config));
3952
3960
  },
3953
3961
  isFormat(format, config) {
3954
- if (config.format === format) return true;
3962
+ if (config.format) return config.format === format;
3955
3963
  const {url: url} = config;
3956
3964
  if (url.startsWith("data:")) {
3957
3965
  if (url.startsWith("data:" + FileHelper.mineType(format))) return true;
@@ -4045,7 +4053,7 @@ class LeaferImage {
4045
4053
  getFull(_filters) {
4046
4054
  return this.view;
4047
4055
  }
4048
- getCanvas(width, height, opacity, _filters, xGap, yGap) {
4056
+ getCanvas(width, height, opacity, _filters, xGap, yGap, smooth) {
4049
4057
  width || (width = this.width);
4050
4058
  height || (height = this.height);
4051
4059
  if (this.cache) {
@@ -4061,6 +4069,7 @@ class LeaferImage {
4061
4069
  const canvas = Platform.origin.createCanvas(max$1(floor$1(width + (xGap || 0)), 1), max$1(floor$1(height + (yGap || 0)), 1));
4062
4070
  const ctx = canvas.getContext("2d");
4063
4071
  if (opacity) ctx.globalAlpha = opacity;
4072
+ ctx.imageSmoothingEnabled = smooth === false ? false : true;
4064
4073
  ctx.drawImage(this.view, 0, 0, width, height);
4065
4074
  this.cache = this.use > 1 ? {
4066
4075
  data: canvas,
@@ -4102,7 +4111,7 @@ function createDescriptor(key, defaultValue) {
4102
4111
  return {
4103
4112
  get() {
4104
4113
  const v = this[privateKey];
4105
- return isUndefined(v) ? defaultValue : v;
4114
+ return v == null ? defaultValue : v;
4106
4115
  },
4107
4116
  set(value) {
4108
4117
  this[privateKey] = value;
@@ -4388,21 +4397,21 @@ function defineDataProcessor(target, key, defaultValue) {
4388
4397
  };
4389
4398
  } else if (typeof defaultValue === "function") {
4390
4399
  property.get = function() {
4391
- let v = this[computedKey];
4392
- return v === undefined ? defaultValue(this.__leaf) : v;
4400
+ const v = this[computedKey];
4401
+ return v == null ? defaultValue(this.__leaf) : v;
4393
4402
  };
4394
4403
  } else if (isObject(defaultValue)) {
4395
4404
  const isEmpty = isEmptyData(defaultValue);
4396
4405
  property.get = function() {
4397
- let v = this[computedKey];
4398
- return v === undefined ? this[computedKey] = isEmpty ? {} : DataHelper.clone(defaultValue) : v;
4406
+ const v = this[computedKey];
4407
+ return v == null ? this[computedKey] = isEmpty ? {} : DataHelper.clone(defaultValue) : v;
4399
4408
  };
4400
4409
  }
4401
4410
  const isBox = target.isBranchLeaf;
4402
4411
  if (key === "width") {
4403
4412
  property.get = function() {
4404
4413
  const v = this[computedKey];
4405
- if (v === undefined) {
4414
+ if (v == null) {
4406
4415
  const t = this, naturalWidth = t.__naturalWidth, leaf = t.__leaf;
4407
4416
  if (!defaultValue || leaf.pathInputed) return leaf.boxBounds.width;
4408
4417
  if (naturalWidth) return t._height && t.__useNaturalRatio ? t._height * naturalWidth / t.__naturalHeight : naturalWidth;
@@ -4412,7 +4421,7 @@ function defineDataProcessor(target, key, defaultValue) {
4412
4421
  } else if (key === "height") {
4413
4422
  property.get = function() {
4414
4423
  const v = this[computedKey];
4415
- if (v === undefined) {
4424
+ if (v == null) {
4416
4425
  const t = this, naturalHeight = t.__naturalHeight, leaf = t.__leaf;
4417
4426
  if (!defaultValue || leaf.pathInputed) return leaf.boxBounds.height;
4418
4427
  if (naturalHeight) return t._width && t.__useNaturalRatio ? t._width * naturalHeight / t.__naturalWidth : naturalHeight;
@@ -4712,8 +4721,9 @@ const L = LeafHelper;
4712
4721
 
4713
4722
  const {updateAllMatrix: updateAllMatrix$3, updateMatrix: updateMatrix$2, updateAllWorldOpacity: updateAllWorldOpacity, updateAllChange: updateAllChange$1, updateChange: updateChange$1} = L;
4714
4723
 
4715
- function getTempLocal(t, world) {
4716
- return t.parent ? PointHelper.tempToInnerOf(world, t.parent.scrollWorldTransform) : world;
4724
+ function getTempLocal(t, worldPoint) {
4725
+ t.updateLayout();
4726
+ return t.parent ? PointHelper.tempToInnerOf(worldPoint, t.parent.scrollWorldTransform) : worldPoint;
4717
4727
  }
4718
4728
 
4719
4729
  const LeafBoundsHelper = {
@@ -5172,7 +5182,7 @@ class LeafLayout {
5172
5182
  }
5173
5183
  boxChange() {
5174
5184
  this.boxChanged = true;
5175
- this.localBoxChanged || this.localBoxChange();
5185
+ this.localBoxChanged ? this.boundsChanged || (this.boundsChanged = true) : this.localBoxChange();
5176
5186
  this.hitCanvasChanged = true;
5177
5187
  }
5178
5188
  localBoxChange() {
@@ -5206,7 +5216,7 @@ class LeafLayout {
5206
5216
  }
5207
5217
  matrixChange() {
5208
5218
  this.matrixChanged = true;
5209
- this.localBoxChanged || this.localBoxChange();
5219
+ this.localBoxChanged ? this.boundsChanged || (this.boundsChanged = true) : this.localBoxChange();
5210
5220
  }
5211
5221
  surfaceChange() {
5212
5222
  this.surfaceChanged = true;
@@ -5731,7 +5741,7 @@ const {updateBounds: updateBounds$1} = BranchHelper;
5731
5741
 
5732
5742
  const {toOuterOf: toOuterOf$1, copyAndSpread: copyAndSpread$1, copy: copy$4} = BoundsHelper;
5733
5743
 
5734
- const {toBounds: toBounds$1} = PathBounds;
5744
+ const {toBounds: toBounds} = PathBounds;
5735
5745
 
5736
5746
  const LeafBounds = {
5737
5747
  __updateWorldBounds() {
@@ -5803,8 +5813,8 @@ const LeafBounds = {
5803
5813
  __updateBoxBounds(_secondLayout, _bounds) {
5804
5814
  const b = this.__layout.boxBounds;
5805
5815
  const data = this.__;
5806
- if (data.__pathInputed) {
5807
- toBounds$1(data.path, b);
5816
+ if (data.__usePathBox) {
5817
+ toBounds(data.path, b);
5808
5818
  } else {
5809
5819
  b.x = 0;
5810
5820
  b.y = 0;
@@ -6272,10 +6282,10 @@ let Leaf = class Leaf {
6272
6282
  relative.innerToWorld(world, to, distance);
6273
6283
  world = to ? to : world;
6274
6284
  }
6275
- toInnerPoint(this.worldTransform, world, to, distance);
6285
+ toInnerPoint(this.scrollWorldTransform, world, to, distance);
6276
6286
  }
6277
6287
  innerToWorld(inner, to, distance, relative) {
6278
- toOuterPoint(this.worldTransform, inner, to, distance);
6288
+ toOuterPoint(this.scrollWorldTransform, inner, to, distance);
6279
6289
  if (relative) relative.worldToInner(to ? to : inner, null, distance);
6280
6290
  }
6281
6291
  getBoxPoint(world, relative, distance, change) {
@@ -6739,7 +6749,7 @@ class LeafLevelList {
6739
6749
  }
6740
6750
  }
6741
6751
 
6742
- const version = "1.9.3";
6752
+ const version = "1.9.5";
6743
6753
 
6744
6754
  class LeaferCanvas extends LeaferCanvasBase {
6745
6755
  get allowBackgroundColor() {
@@ -7162,7 +7172,7 @@ class Renderer {
7162
7172
  this.times = 0;
7163
7173
  this.config = {
7164
7174
  usePartRender: true,
7165
- maxFPS: 60
7175
+ maxFPS: 120
7166
7176
  };
7167
7177
  this.target = target;
7168
7178
  this.canvas = canvas;
@@ -7317,11 +7327,15 @@ class Renderer {
7317
7327
  if (this.requestTime || !target) return;
7318
7328
  if (target.parentApp) return target.parentApp.requestRender(false);
7319
7329
  const requestTime = this.requestTime = Date.now();
7320
- Platform.requestRender(() => {
7321
- this.FPS = Math.min(60, Math.ceil(1e3 / (Date.now() - requestTime)));
7330
+ const render = () => {
7331
+ const nowFPS = 1e3 / (Date.now() - requestTime);
7332
+ const {maxFPS: maxFPS} = this.config;
7333
+ if (maxFPS && nowFPS > maxFPS - .5) return Platform.requestRender(render);
7334
+ this.FPS = Math.min(120, Math.ceil(nowFPS));
7322
7335
  this.requestTime = 0;
7323
7336
  this.checkRender();
7324
- });
7337
+ };
7338
+ Platform.requestRender(render);
7325
7339
  }
7326
7340
  __onResize(e) {
7327
7341
  if (this.canvas.unreal) return;
@@ -7364,7 +7378,8 @@ class Renderer {
7364
7378
  if (this.target) {
7365
7379
  this.stop();
7366
7380
  this.__removeListenEvents();
7367
- this.target = this.canvas = this.config = null;
7381
+ this.config = {};
7382
+ this.target = this.canvas = null;
7368
7383
  }
7369
7384
  }
7370
7385
  }
@@ -7855,7 +7870,11 @@ class LeaferData extends GroupData {
7855
7870
 
7856
7871
  class FrameData extends BoxData {}
7857
7872
 
7858
- class LineData extends UIData {}
7873
+ class LineData extends UIData {
7874
+ get __usePathBox() {
7875
+ return this.points || this.__pathInputed;
7876
+ }
7877
+ }
7859
7878
 
7860
7879
  class RectData extends UIData {
7861
7880
  get __boxStroke() {
@@ -7869,7 +7888,7 @@ class EllipseData extends UIData {
7869
7888
  }
7870
7889
  }
7871
7890
 
7872
- class PolygonData extends UIData {}
7891
+ class PolygonData extends LineData {}
7873
7892
 
7874
7893
  class StarData extends UIData {}
7875
7894
 
@@ -8179,20 +8198,9 @@ let UI = UI_1 = class UI extends Leaf {
8179
8198
  if (!path) this.__drawPathByBox(pen);
8180
8199
  return pen;
8181
8200
  }
8182
- constructor(data) {
8183
- super(data);
8184
- }
8185
8201
  reset(_data) {}
8186
- set(data, transition) {
8187
- if (data) {
8188
- if (transition) {
8189
- if (transition === "temp") {
8190
- this.lockNormalStyle = true;
8191
- Object.assign(this, data);
8192
- this.lockNormalStyle = false;
8193
- } else this.animate(data, transition);
8194
- } else Object.assign(this, data);
8195
- }
8202
+ set(data, _transition) {
8203
+ if (data) Object.assign(this, data);
8196
8204
  }
8197
8205
  get(name) {
8198
8206
  return isString(name) ? this.__.__getInput(name) : this.__.__getInputData(name);
@@ -8238,7 +8246,7 @@ let UI = UI_1 = class UI extends Leaf {
8238
8246
  const data = this.__;
8239
8247
  if (data.path) {
8240
8248
  data.__pathForRender = data.cornerRadius ? PathCorner.smooth(data.path, data.cornerRadius, data.cornerSmoothing) : data.path;
8241
- if (data.__useArrow) PathArrow.addArrows(this, !data.cornerRadius);
8249
+ if (data.__useArrow) PathArrow.addArrows(this);
8242
8250
  } else data.__pathForRender && (data.__pathForRender = undefined);
8243
8251
  }
8244
8252
  __drawRenderPath(canvas) {
@@ -8262,7 +8270,8 @@ let UI = UI_1 = class UI extends Leaf {
8262
8270
  drawImagePlaceholder(canvas, _image) {
8263
8271
  Paint.fill(this.__.placeholderColor, this, canvas);
8264
8272
  }
8265
- animate(_keyframe, _options, _type, _isTemp) {
8273
+ animate(keyframe, _options, _type, _isTemp) {
8274
+ this.set(keyframe);
8266
8275
  return Plugin.need("animate");
8267
8276
  }
8268
8277
  killAnimate(_type, _nextStyle) {}
@@ -8451,9 +8460,6 @@ let Group = class Group extends UI {
8451
8460
  get isBranch() {
8452
8461
  return true;
8453
8462
  }
8454
- constructor(data) {
8455
- super(data);
8456
- }
8457
8463
  reset(data) {
8458
8464
  this.__setBranch();
8459
8465
  super.reset(data);
@@ -8578,7 +8584,7 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8578
8584
  const canvas = this.canvas = Creator.canvas(config);
8579
8585
  this.__controllers.push(this.renderer = Creator.renderer(this, canvas, config), this.watcher = Creator.watcher(this, config), this.layouter = Creator.layouter(this, config));
8580
8586
  if (this.isApp) this.__setApp();
8581
- this.__checkAutoLayout(config, parentApp);
8587
+ this.__checkAutoLayout();
8582
8588
  this.view = canvas.view;
8583
8589
  if (!parentApp) {
8584
8590
  this.selector = Creator.selector(this);
@@ -8677,7 +8683,8 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8677
8683
  this.leafer = leafer;
8678
8684
  this.__level = 1;
8679
8685
  }
8680
- __checkAutoLayout(config, parentApp) {
8686
+ __checkAutoLayout() {
8687
+ const {config: config, parentApp: parentApp} = this;
8681
8688
  if (!parentApp) {
8682
8689
  if (!config.width || !config.height) this.autoLayout = new AutoBounds(config);
8683
8690
  this.canvas.startAutoLayout(this.autoLayout, this.__onResize.bind(this));
@@ -8703,9 +8710,10 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8703
8710
  return super.__getAttr(attrName);
8704
8711
  }
8705
8712
  __changeCanvasSize(attrName, newValue) {
8706
- const data = DataHelper.copyAttrs({}, this.canvas, canvasSizeAttrs);
8707
- data[attrName] = this.config[attrName] = newValue;
8708
- if (newValue) this.canvas.stopAutoLayout();
8713
+ const {config: config, canvas: canvas} = this;
8714
+ const data = DataHelper.copyAttrs({}, canvas, canvasSizeAttrs);
8715
+ data[attrName] = config[attrName] = newValue;
8716
+ config.width && config.height ? canvas.stopAutoLayout() : this.__checkAutoLayout();
8709
8717
  this.__doResize(data);
8710
8718
  }
8711
8719
  __changeFill(newValue) {
@@ -8852,9 +8860,9 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8852
8860
  if (!this.parent) {
8853
8861
  if (this.selector) this.selector.destroy();
8854
8862
  if (this.hitCanvasManager) this.hitCanvasManager.destroy();
8855
- this.canvasManager.destroy();
8863
+ if (this.canvasManager) this.canvasManager.destroy();
8856
8864
  }
8857
- this.canvas.destroy();
8865
+ if (this.canvas) this.canvas.destroy();
8858
8866
  this.config.view = this.view = this.parentApp = null;
8859
8867
  if (this.userConfig) this.userConfig.view = null;
8860
8868
  super.destroy();
@@ -8882,9 +8890,6 @@ let Rect = class Rect extends UI {
8882
8890
  get __tag() {
8883
8891
  return "Rect";
8884
8892
  }
8885
- constructor(data) {
8886
- super(data);
8887
- }
8888
8893
  };
8889
8894
 
8890
8895
  __decorate([ dataProcessor(RectData) ], Rect.prototype, "__", void 0);
@@ -8938,29 +8943,24 @@ let Box = class Box extends Group {
8938
8943
  }
8939
8944
  __updateStrokeBounds() {}
8940
8945
  __updateRenderBounds() {
8941
- let isOverflow;
8946
+ let isOverflow, isScrollMode;
8942
8947
  if (this.children.length) {
8943
- const data = this.__, layout = this.__layout, {renderBounds: renderBounds, boxBounds: boxBounds} = layout;
8948
+ const data = this.__, layout = this.__layout, {renderBounds: renderBounds, boxBounds: boxBounds} = layout, {overflow: overflow} = data;
8944
8949
  const childrenRenderBounds = layout.childrenRenderBounds || (layout.childrenRenderBounds = getBoundsData());
8945
8950
  super.__updateRenderBounds(childrenRenderBounds);
8946
- if (data.overflow.includes("scroll")) {
8951
+ if (isScrollMode = overflow.includes("scroll")) {
8947
8952
  add(childrenRenderBounds, boxBounds);
8948
8953
  scroll(childrenRenderBounds, data);
8949
8954
  }
8950
8955
  this.__updateRectRenderBounds();
8951
8956
  isOverflow = !includes$1(boxBounds, childrenRenderBounds);
8952
- if (isOverflow && data.overflow === "show") add(renderBounds, childrenRenderBounds);
8957
+ if (isOverflow && overflow === "show") add(renderBounds, childrenRenderBounds);
8953
8958
  } else this.__updateRectRenderBounds();
8954
8959
  DataHelper.stintSet(this, "isOverflow", isOverflow);
8955
- this.__checkScroll();
8960
+ this.__checkScroll(isScrollMode);
8956
8961
  }
8957
8962
  __updateRectRenderBounds() {}
8958
- __updateWorldBounds() {
8959
- if (this.hasScroller) this.__updateScroll();
8960
- super.__updateWorldBounds();
8961
- }
8962
- __checkScroll() {}
8963
- __updateScroll() {}
8963
+ __checkScroll(_isScrollMode) {}
8964
8964
  __updateRectChange() {}
8965
8965
  __updateChange() {
8966
8966
  super.__updateChange();
@@ -9021,9 +9021,6 @@ let Frame = class Frame extends Box {
9021
9021
  get isFrame() {
9022
9022
  return true;
9023
9023
  }
9024
- constructor(data) {
9025
- super(data);
9026
- }
9027
9024
  };
9028
9025
 
9029
9026
  __decorate([ dataProcessor(FrameData) ], Frame.prototype, "__", void 0);
@@ -9040,9 +9037,6 @@ let Ellipse = class Ellipse extends UI {
9040
9037
  get __tag() {
9041
9038
  return "Ellipse";
9042
9039
  }
9043
- constructor(data) {
9044
- super(data);
9045
- }
9046
9040
  __updatePath() {
9047
9041
  const {width: width, height: height, innerRadius: innerRadius, startAngle: startAngle, endAngle: endAngle} = this.__;
9048
9042
  const rx = width / 2, ry = height / 2;
@@ -9086,8 +9080,6 @@ const {moveTo: moveTo$2, lineTo: lineTo$2, drawPoints: drawPoints$1} = PathComma
9086
9080
 
9087
9081
  const {rotate: rotate$1, getAngle: getAngle$1, getDistance: getDistance$2, defaultPoint: defaultPoint} = PointHelper;
9088
9082
 
9089
- const {toBounds: toBounds} = PathBounds;
9090
-
9091
9083
  let Line = class Line extends UI {
9092
9084
  get __tag() {
9093
9085
  return "Line";
@@ -9104,31 +9096,16 @@ let Line = class Line extends UI {
9104
9096
  this.rotation = getAngle$1(defaultPoint, value);
9105
9097
  if (this.height) this.height = 0;
9106
9098
  }
9107
- constructor(data) {
9108
- super(data);
9109
- }
9110
9099
  __updatePath() {
9111
9100
  const data = this.__;
9112
9101
  const path = data.path = [];
9113
9102
  if (data.points) {
9114
- drawPoints$1(path, data.points, false, data.closed);
9103
+ drawPoints$1(path, data.points, data.curve, data.closed);
9115
9104
  } else {
9116
9105
  moveTo$2(path, 0, 0);
9117
9106
  lineTo$2(path, this.width, 0);
9118
9107
  }
9119
9108
  }
9120
- __updateRenderPath() {
9121
- const data = this.__;
9122
- if (!this.pathInputed && data.points && data.curve) {
9123
- drawPoints$1(data.__pathForRender = [], data.points, data.curve, data.closed);
9124
- if (data.__useArrow) PathArrow.addArrows(this, false);
9125
- } else super.__updateRenderPath();
9126
- }
9127
- __updateBoxBounds() {
9128
- if (this.points) {
9129
- toBounds(this.__.__pathForRender, this.__layout.boxBounds);
9130
- } else super.__updateBoxBounds();
9131
- }
9132
9109
  };
9133
9110
 
9134
9111
  __decorate([ dataProcessor(LineData) ], Line.prototype, "__", void 0);
@@ -9155,15 +9132,13 @@ let Polygon = class Polygon extends UI {
9155
9132
  get __tag() {
9156
9133
  return "Polygon";
9157
9134
  }
9158
- constructor(data) {
9159
- super(data);
9160
- }
9161
9135
  __updatePath() {
9162
- const path = this.__.path = [];
9163
- if (this.__.points) {
9164
- drawPoints(path, this.__.points, false, true);
9136
+ const data = this.__;
9137
+ const path = data.path = [];
9138
+ if (data.points) {
9139
+ drawPoints(path, data.points, data.curve, true);
9165
9140
  } else {
9166
- const {width: width, height: height, sides: sides} = this.__;
9141
+ const {width: width, height: height, sides: sides} = data;
9167
9142
  const rx = width / 2, ry = height / 2;
9168
9143
  moveTo$1(path, rx, 0);
9169
9144
  for (let i = 1; i < sides; i++) {
@@ -9198,9 +9173,6 @@ let Star = class Star extends UI {
9198
9173
  get __tag() {
9199
9174
  return "Star";
9200
9175
  }
9201
- constructor(data) {
9202
- super(data);
9203
- }
9204
9176
  __updatePath() {
9205
9177
  const {width: width, height: height, corners: corners, innerRadius: innerRadius} = this.__;
9206
9178
  const rx = width / 2, ry = height / 2;
@@ -9233,9 +9205,6 @@ let Image = class Image extends Rect {
9233
9205
  const {fill: fill} = this.__;
9234
9206
  return isArray(fill) && fill[0].image;
9235
9207
  }
9236
- constructor(data) {
9237
- super(data);
9238
- }
9239
9208
  };
9240
9209
 
9241
9210
  __decorate([ dataProcessor(ImageData) ], Image.prototype, "__", void 0);
@@ -9335,9 +9304,6 @@ let Text = class Text extends UI {
9335
9304
  this.updateLayout();
9336
9305
  return this.__.__textDrawData;
9337
9306
  }
9338
- constructor(data) {
9339
- super(data);
9340
- }
9341
9307
  __updateTextDrawData() {
9342
9308
  const data = this.__;
9343
9309
  const {lineHeight: lineHeight, letterSpacing: letterSpacing, fontFamily: fontFamily, fontSize: fontSize, fontWeight: fontWeight, italic: italic, textCase: textCase, textOverflow: textOverflow, padding: padding} = data;
@@ -9470,9 +9436,6 @@ let Path = class Path extends UI {
9470
9436
  get __tag() {
9471
9437
  return "Path";
9472
9438
  }
9473
- constructor(data) {
9474
- super(data);
9475
- }
9476
9439
  };
9477
9440
 
9478
9441
  __decorate([ dataProcessor(PathData) ], Path.prototype, "__", void 0);
@@ -9485,9 +9448,6 @@ let Pen = class Pen extends Group {
9485
9448
  get __tag() {
9486
9449
  return "Pen";
9487
9450
  }
9488
- constructor(data) {
9489
- super(data);
9490
- }
9491
9451
  setStyle(data) {
9492
9452
  const path = this.pathElement = new Path(data);
9493
9453
  this.pathStyle = data;
@@ -11572,7 +11532,7 @@ function ignoreRender(ui, value) {
11572
11532
 
11573
11533
  const {get: get$1, scale: scale, copy: copy$1} = MatrixHelper;
11574
11534
 
11575
- const {floor: floor, max: max, abs: abs} = Math;
11535
+ const {floor: floor, ceil: ceil, max: max, abs: abs} = Math;
11576
11536
 
11577
11537
  function createPattern(ui, paint, pixelRatio) {
11578
11538
  let {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true, paint.scaleFixed);
@@ -11582,8 +11542,6 @@ function createPattern(ui, paint, pixelRatio) {
11582
11542
  let imageScale, imageMatrix, {width: width, height: height, scaleX: sx, scaleY: sy, transform: transform, repeat: repeat, gap: gap} = data;
11583
11543
  scaleX *= pixelRatio;
11584
11544
  scaleY *= pixelRatio;
11585
- const xGap = gap && gap.x * scaleX;
11586
- const yGap = gap && gap.y * scaleY;
11587
11545
  if (sx) {
11588
11546
  sx = abs(sx);
11589
11547
  sy = abs(sy);
@@ -11600,7 +11558,10 @@ function createPattern(ui, paint, pixelRatio) {
11600
11558
  if (size > Platform.image.maxCacheSize) return false;
11601
11559
  }
11602
11560
  let maxSize = Platform.image.maxPatternSize;
11603
- if (!image.isSVG) {
11561
+ if (image.isSVG) {
11562
+ const ws = width / image.width;
11563
+ if (ws > 1) imageScale = ws / ceil(ws);
11564
+ } else {
11604
11565
  const imageSize = image.width * image.height;
11605
11566
  if (maxSize > imageSize) maxSize = imageSize;
11606
11567
  }
@@ -11615,18 +11576,20 @@ function createPattern(ui, paint, pixelRatio) {
11615
11576
  scaleX /= sx;
11616
11577
  scaleY /= sy;
11617
11578
  }
11579
+ const xGap = gap && gap.x * scaleX;
11580
+ const yGap = gap && gap.y * scaleY;
11618
11581
  if (transform || scaleX !== 1 || scaleY !== 1) {
11582
+ const canvasWidth = width + (xGap || 0);
11583
+ const canvasHeight = height + (yGap || 0);
11584
+ scaleX /= canvasWidth / max(floor(canvasWidth), 1);
11585
+ scaleY /= canvasHeight / max(floor(canvasHeight), 1);
11619
11586
  if (!imageMatrix) {
11620
11587
  imageMatrix = get$1();
11621
11588
  if (transform) copy$1(imageMatrix, transform);
11622
11589
  }
11623
11590
  scale(imageMatrix, 1 / scaleX, 1 / scaleY);
11624
11591
  }
11625
- if (imageMatrix) {
11626
- const canvasWidth = width + (xGap || 0), canvasHeight = height + (yGap || 0);
11627
- scale(imageMatrix, canvasWidth / max(floor(canvasWidth), 1), canvasHeight / max(floor(canvasHeight), 1));
11628
- }
11629
- const canvas = image.getCanvas(width, height, data.opacity, data.filters, xGap, yGap);
11592
+ const canvas = image.getCanvas(width, height, data.opacity, data.filters, xGap, yGap, ui.leafer && ui.leafer.config.smooth);
11630
11593
  const pattern = image.getPattern(canvas, repeat || (Platform.origin.noRepeat || "no-repeat"), imageMatrix, paint);
11631
11594
  paint.style = pattern;
11632
11595
  paint.patternId = id;
@@ -12580,4 +12543,4 @@ Object.assign(Creator, {
12580
12543
 
12581
12544
  useCanvas();
12582
12545
 
12583
- 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, 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, 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 };
12546
+ 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, 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 };