@leafer-ui/miniapp 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() {
@@ -6793,6 +6803,7 @@ class LeaferCanvas extends LeaferCanvasBase {
6793
6803
  this.view = Platform.origin.createCanvas(1, 1);
6794
6804
  }
6795
6805
  updateViewSize() {
6806
+ if (this.unreal) return;
6796
6807
  const {width: width, height: height, pixelRatio: pixelRatio} = this;
6797
6808
  this.view.width = Math.ceil(width * pixelRatio);
6798
6809
  this.view.height = Math.ceil(height * pixelRatio);
@@ -6804,6 +6815,7 @@ class LeaferCanvas extends LeaferCanvasBase {
6804
6815
  });
6805
6816
  }
6806
6817
  startAutoLayout(autoBounds, listener) {
6818
+ if (this.resizeListener) return;
6807
6819
  this.resizeListener = listener;
6808
6820
  if (autoBounds) {
6809
6821
  this.checkSize = this.checkSize.bind(this);
@@ -7313,7 +7325,7 @@ class Renderer {
7313
7325
  this.times = 0;
7314
7326
  this.config = {
7315
7327
  usePartRender: true,
7316
- maxFPS: 60
7328
+ maxFPS: 120
7317
7329
  };
7318
7330
  this.target = target;
7319
7331
  this.canvas = canvas;
@@ -7468,11 +7480,15 @@ class Renderer {
7468
7480
  if (this.requestTime || !target) return;
7469
7481
  if (target.parentApp) return target.parentApp.requestRender(false);
7470
7482
  const requestTime = this.requestTime = Date.now();
7471
- Platform.requestRender(() => {
7472
- this.FPS = Math.min(60, Math.ceil(1e3 / (Date.now() - requestTime)));
7483
+ const render = () => {
7484
+ const nowFPS = 1e3 / (Date.now() - requestTime);
7485
+ const {maxFPS: maxFPS} = this.config;
7486
+ if (maxFPS && nowFPS > maxFPS - .5) return Platform.requestRender(render);
7487
+ this.FPS = Math.min(120, Math.ceil(nowFPS));
7473
7488
  this.requestTime = 0;
7474
7489
  this.checkRender();
7475
- });
7490
+ };
7491
+ Platform.requestRender(render);
7476
7492
  }
7477
7493
  __onResize(e) {
7478
7494
  if (this.canvas.unreal) return;
@@ -7515,7 +7531,8 @@ class Renderer {
7515
7531
  if (this.target) {
7516
7532
  this.stop();
7517
7533
  this.__removeListenEvents();
7518
- this.target = this.canvas = this.config = null;
7534
+ this.config = {};
7535
+ this.target = this.canvas = null;
7519
7536
  }
7520
7537
  }
7521
7538
  }
@@ -8006,7 +8023,11 @@ class LeaferData extends GroupData {
8006
8023
 
8007
8024
  class FrameData extends BoxData {}
8008
8025
 
8009
- class LineData extends UIData {}
8026
+ class LineData extends UIData {
8027
+ get __usePathBox() {
8028
+ return this.points || this.__pathInputed;
8029
+ }
8030
+ }
8010
8031
 
8011
8032
  class RectData extends UIData {
8012
8033
  get __boxStroke() {
@@ -8020,7 +8041,7 @@ class EllipseData extends UIData {
8020
8041
  }
8021
8042
  }
8022
8043
 
8023
- class PolygonData extends UIData {}
8044
+ class PolygonData extends LineData {}
8024
8045
 
8025
8046
  class StarData extends UIData {}
8026
8047
 
@@ -8330,20 +8351,9 @@ let UI = UI_1 = class UI extends Leaf {
8330
8351
  if (!path) this.__drawPathByBox(pen);
8331
8352
  return pen;
8332
8353
  }
8333
- constructor(data) {
8334
- super(data);
8335
- }
8336
8354
  reset(_data) {}
8337
- set(data, transition) {
8338
- if (data) {
8339
- if (transition) {
8340
- if (transition === "temp") {
8341
- this.lockNormalStyle = true;
8342
- Object.assign(this, data);
8343
- this.lockNormalStyle = false;
8344
- } else this.animate(data, transition);
8345
- } else Object.assign(this, data);
8346
- }
8355
+ set(data, _transition) {
8356
+ if (data) Object.assign(this, data);
8347
8357
  }
8348
8358
  get(name) {
8349
8359
  return isString(name) ? this.__.__getInput(name) : this.__.__getInputData(name);
@@ -8389,7 +8399,7 @@ let UI = UI_1 = class UI extends Leaf {
8389
8399
  const data = this.__;
8390
8400
  if (data.path) {
8391
8401
  data.__pathForRender = data.cornerRadius ? PathCorner.smooth(data.path, data.cornerRadius, data.cornerSmoothing) : data.path;
8392
- if (data.__useArrow) PathArrow.addArrows(this, !data.cornerRadius);
8402
+ if (data.__useArrow) PathArrow.addArrows(this);
8393
8403
  } else data.__pathForRender && (data.__pathForRender = undefined);
8394
8404
  }
8395
8405
  __drawRenderPath(canvas) {
@@ -8413,7 +8423,8 @@ let UI = UI_1 = class UI extends Leaf {
8413
8423
  drawImagePlaceholder(canvas, _image) {
8414
8424
  Paint.fill(this.__.placeholderColor, this, canvas);
8415
8425
  }
8416
- animate(_keyframe, _options, _type, _isTemp) {
8426
+ animate(keyframe, _options, _type, _isTemp) {
8427
+ this.set(keyframe);
8417
8428
  return Plugin.need("animate");
8418
8429
  }
8419
8430
  killAnimate(_type, _nextStyle) {}
@@ -8602,9 +8613,6 @@ let Group = class Group extends UI {
8602
8613
  get isBranch() {
8603
8614
  return true;
8604
8615
  }
8605
- constructor(data) {
8606
- super(data);
8607
- }
8608
8616
  reset(data) {
8609
8617
  this.__setBranch();
8610
8618
  super.reset(data);
@@ -8729,7 +8737,7 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8729
8737
  const canvas = this.canvas = Creator.canvas(config);
8730
8738
  this.__controllers.push(this.renderer = Creator.renderer(this, canvas, config), this.watcher = Creator.watcher(this, config), this.layouter = Creator.layouter(this, config));
8731
8739
  if (this.isApp) this.__setApp();
8732
- this.__checkAutoLayout(config, parentApp);
8740
+ this.__checkAutoLayout();
8733
8741
  this.view = canvas.view;
8734
8742
  if (!parentApp) {
8735
8743
  this.selector = Creator.selector(this);
@@ -8828,7 +8836,8 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8828
8836
  this.leafer = leafer;
8829
8837
  this.__level = 1;
8830
8838
  }
8831
- __checkAutoLayout(config, parentApp) {
8839
+ __checkAutoLayout() {
8840
+ const {config: config, parentApp: parentApp} = this;
8832
8841
  if (!parentApp) {
8833
8842
  if (!config.width || !config.height) this.autoLayout = new AutoBounds(config);
8834
8843
  this.canvas.startAutoLayout(this.autoLayout, this.__onResize.bind(this));
@@ -8854,9 +8863,10 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8854
8863
  return super.__getAttr(attrName);
8855
8864
  }
8856
8865
  __changeCanvasSize(attrName, newValue) {
8857
- const data = DataHelper.copyAttrs({}, this.canvas, canvasSizeAttrs);
8858
- data[attrName] = this.config[attrName] = newValue;
8859
- if (newValue) this.canvas.stopAutoLayout();
8866
+ const {config: config, canvas: canvas} = this;
8867
+ const data = DataHelper.copyAttrs({}, canvas, canvasSizeAttrs);
8868
+ data[attrName] = config[attrName] = newValue;
8869
+ config.width && config.height ? canvas.stopAutoLayout() : this.__checkAutoLayout();
8860
8870
  this.__doResize(data);
8861
8871
  }
8862
8872
  __changeFill(newValue) {
@@ -9003,9 +9013,9 @@ let Leafer = Leafer_1 = class Leafer extends Group {
9003
9013
  if (!this.parent) {
9004
9014
  if (this.selector) this.selector.destroy();
9005
9015
  if (this.hitCanvasManager) this.hitCanvasManager.destroy();
9006
- this.canvasManager.destroy();
9016
+ if (this.canvasManager) this.canvasManager.destroy();
9007
9017
  }
9008
- this.canvas.destroy();
9018
+ if (this.canvas) this.canvas.destroy();
9009
9019
  this.config.view = this.view = this.parentApp = null;
9010
9020
  if (this.userConfig) this.userConfig.view = null;
9011
9021
  super.destroy();
@@ -9033,9 +9043,6 @@ let Rect = class Rect extends UI {
9033
9043
  get __tag() {
9034
9044
  return "Rect";
9035
9045
  }
9036
- constructor(data) {
9037
- super(data);
9038
- }
9039
9046
  };
9040
9047
 
9041
9048
  __decorate([ dataProcessor(RectData) ], Rect.prototype, "__", void 0);
@@ -9089,29 +9096,24 @@ let Box = class Box extends Group {
9089
9096
  }
9090
9097
  __updateStrokeBounds() {}
9091
9098
  __updateRenderBounds() {
9092
- let isOverflow;
9099
+ let isOverflow, isScrollMode;
9093
9100
  if (this.children.length) {
9094
- const data = this.__, layout = this.__layout, {renderBounds: renderBounds, boxBounds: boxBounds} = layout;
9101
+ const data = this.__, layout = this.__layout, {renderBounds: renderBounds, boxBounds: boxBounds} = layout, {overflow: overflow} = data;
9095
9102
  const childrenRenderBounds = layout.childrenRenderBounds || (layout.childrenRenderBounds = getBoundsData());
9096
9103
  super.__updateRenderBounds(childrenRenderBounds);
9097
- if (data.overflow.includes("scroll")) {
9104
+ if (isScrollMode = overflow.includes("scroll")) {
9098
9105
  add(childrenRenderBounds, boxBounds);
9099
9106
  scroll(childrenRenderBounds, data);
9100
9107
  }
9101
9108
  this.__updateRectRenderBounds();
9102
9109
  isOverflow = !includes$1(boxBounds, childrenRenderBounds);
9103
- if (isOverflow && data.overflow === "show") add(renderBounds, childrenRenderBounds);
9110
+ if (isOverflow && overflow === "show") add(renderBounds, childrenRenderBounds);
9104
9111
  } else this.__updateRectRenderBounds();
9105
9112
  DataHelper.stintSet(this, "isOverflow", isOverflow);
9106
- this.__checkScroll();
9113
+ this.__checkScroll(isScrollMode);
9107
9114
  }
9108
9115
  __updateRectRenderBounds() {}
9109
- __updateWorldBounds() {
9110
- if (this.hasScroller) this.__updateScroll();
9111
- super.__updateWorldBounds();
9112
- }
9113
- __checkScroll() {}
9114
- __updateScroll() {}
9116
+ __checkScroll(_isScrollMode) {}
9115
9117
  __updateRectChange() {}
9116
9118
  __updateChange() {
9117
9119
  super.__updateChange();
@@ -9172,9 +9174,6 @@ let Frame = class Frame extends Box {
9172
9174
  get isFrame() {
9173
9175
  return true;
9174
9176
  }
9175
- constructor(data) {
9176
- super(data);
9177
- }
9178
9177
  };
9179
9178
 
9180
9179
  __decorate([ dataProcessor(FrameData) ], Frame.prototype, "__", void 0);
@@ -9191,9 +9190,6 @@ let Ellipse = class Ellipse extends UI {
9191
9190
  get __tag() {
9192
9191
  return "Ellipse";
9193
9192
  }
9194
- constructor(data) {
9195
- super(data);
9196
- }
9197
9193
  __updatePath() {
9198
9194
  const {width: width, height: height, innerRadius: innerRadius, startAngle: startAngle, endAngle: endAngle} = this.__;
9199
9195
  const rx = width / 2, ry = height / 2;
@@ -9237,8 +9233,6 @@ const {moveTo: moveTo$2, lineTo: lineTo$2, drawPoints: drawPoints$1} = PathComma
9237
9233
 
9238
9234
  const {rotate: rotate$1, getAngle: getAngle$1, getDistance: getDistance$2, defaultPoint: defaultPoint} = PointHelper;
9239
9235
 
9240
- const {toBounds: toBounds} = PathBounds;
9241
-
9242
9236
  let Line = class Line extends UI {
9243
9237
  get __tag() {
9244
9238
  return "Line";
@@ -9255,31 +9249,16 @@ let Line = class Line extends UI {
9255
9249
  this.rotation = getAngle$1(defaultPoint, value);
9256
9250
  if (this.height) this.height = 0;
9257
9251
  }
9258
- constructor(data) {
9259
- super(data);
9260
- }
9261
9252
  __updatePath() {
9262
9253
  const data = this.__;
9263
9254
  const path = data.path = [];
9264
9255
  if (data.points) {
9265
- drawPoints$1(path, data.points, false, data.closed);
9256
+ drawPoints$1(path, data.points, data.curve, data.closed);
9266
9257
  } else {
9267
9258
  moveTo$2(path, 0, 0);
9268
9259
  lineTo$2(path, this.width, 0);
9269
9260
  }
9270
9261
  }
9271
- __updateRenderPath() {
9272
- const data = this.__;
9273
- if (!this.pathInputed && data.points && data.curve) {
9274
- drawPoints$1(data.__pathForRender = [], data.points, data.curve, data.closed);
9275
- if (data.__useArrow) PathArrow.addArrows(this, false);
9276
- } else super.__updateRenderPath();
9277
- }
9278
- __updateBoxBounds() {
9279
- if (this.points) {
9280
- toBounds(this.__.__pathForRender, this.__layout.boxBounds);
9281
- } else super.__updateBoxBounds();
9282
- }
9283
9262
  };
9284
9263
 
9285
9264
  __decorate([ dataProcessor(LineData) ], Line.prototype, "__", void 0);
@@ -9306,15 +9285,13 @@ let Polygon = class Polygon extends UI {
9306
9285
  get __tag() {
9307
9286
  return "Polygon";
9308
9287
  }
9309
- constructor(data) {
9310
- super(data);
9311
- }
9312
9288
  __updatePath() {
9313
- const path = this.__.path = [];
9314
- if (this.__.points) {
9315
- drawPoints(path, this.__.points, false, true);
9289
+ const data = this.__;
9290
+ const path = data.path = [];
9291
+ if (data.points) {
9292
+ drawPoints(path, data.points, data.curve, true);
9316
9293
  } else {
9317
- const {width: width, height: height, sides: sides} = this.__;
9294
+ const {width: width, height: height, sides: sides} = data;
9318
9295
  const rx = width / 2, ry = height / 2;
9319
9296
  moveTo$1(path, rx, 0);
9320
9297
  for (let i = 1; i < sides; i++) {
@@ -9349,9 +9326,6 @@ let Star = class Star extends UI {
9349
9326
  get __tag() {
9350
9327
  return "Star";
9351
9328
  }
9352
- constructor(data) {
9353
- super(data);
9354
- }
9355
9329
  __updatePath() {
9356
9330
  const {width: width, height: height, corners: corners, innerRadius: innerRadius} = this.__;
9357
9331
  const rx = width / 2, ry = height / 2;
@@ -9384,9 +9358,6 @@ let Image = class Image extends Rect {
9384
9358
  const {fill: fill} = this.__;
9385
9359
  return isArray(fill) && fill[0].image;
9386
9360
  }
9387
- constructor(data) {
9388
- super(data);
9389
- }
9390
9361
  };
9391
9362
 
9392
9363
  __decorate([ dataProcessor(ImageData) ], Image.prototype, "__", void 0);
@@ -9486,9 +9457,6 @@ let Text = class Text extends UI {
9486
9457
  this.updateLayout();
9487
9458
  return this.__.__textDrawData;
9488
9459
  }
9489
- constructor(data) {
9490
- super(data);
9491
- }
9492
9460
  __updateTextDrawData() {
9493
9461
  const data = this.__;
9494
9462
  const {lineHeight: lineHeight, letterSpacing: letterSpacing, fontFamily: fontFamily, fontSize: fontSize, fontWeight: fontWeight, italic: italic, textCase: textCase, textOverflow: textOverflow, padding: padding} = data;
@@ -9621,9 +9589,6 @@ let Path = class Path extends UI {
9621
9589
  get __tag() {
9622
9590
  return "Path";
9623
9591
  }
9624
- constructor(data) {
9625
- super(data);
9626
- }
9627
9592
  };
9628
9593
 
9629
9594
  __decorate([ dataProcessor(PathData) ], Path.prototype, "__", void 0);
@@ -9636,9 +9601,6 @@ let Pen = class Pen extends Group {
9636
9601
  get __tag() {
9637
9602
  return "Pen";
9638
9603
  }
9639
- constructor(data) {
9640
- super(data);
9641
- }
9642
9604
  setStyle(data) {
9643
9605
  const path = this.pathElement = new Path(data);
9644
9606
  this.pathStyle = data;
@@ -11835,7 +11797,7 @@ function ignoreRender(ui, value) {
11835
11797
 
11836
11798
  const {get: get$1, scale: scale, copy: copy$1} = MatrixHelper;
11837
11799
 
11838
- const {floor: floor, max: max, abs: abs} = Math;
11800
+ const {floor: floor, ceil: ceil, max: max, abs: abs} = Math;
11839
11801
 
11840
11802
  function createPattern(ui, paint, pixelRatio) {
11841
11803
  let {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true, paint.scaleFixed);
@@ -11845,8 +11807,6 @@ function createPattern(ui, paint, pixelRatio) {
11845
11807
  let imageScale, imageMatrix, {width: width, height: height, scaleX: sx, scaleY: sy, transform: transform, repeat: repeat, gap: gap} = data;
11846
11808
  scaleX *= pixelRatio;
11847
11809
  scaleY *= pixelRatio;
11848
- const xGap = gap && gap.x * scaleX;
11849
- const yGap = gap && gap.y * scaleY;
11850
11810
  if (sx) {
11851
11811
  sx = abs(sx);
11852
11812
  sy = abs(sy);
@@ -11863,7 +11823,10 @@ function createPattern(ui, paint, pixelRatio) {
11863
11823
  if (size > Platform.image.maxCacheSize) return false;
11864
11824
  }
11865
11825
  let maxSize = Platform.image.maxPatternSize;
11866
- if (!image.isSVG) {
11826
+ if (image.isSVG) {
11827
+ const ws = width / image.width;
11828
+ if (ws > 1) imageScale = ws / ceil(ws);
11829
+ } else {
11867
11830
  const imageSize = image.width * image.height;
11868
11831
  if (maxSize > imageSize) maxSize = imageSize;
11869
11832
  }
@@ -11878,18 +11841,20 @@ function createPattern(ui, paint, pixelRatio) {
11878
11841
  scaleX /= sx;
11879
11842
  scaleY /= sy;
11880
11843
  }
11844
+ const xGap = gap && gap.x * scaleX;
11845
+ const yGap = gap && gap.y * scaleY;
11881
11846
  if (transform || scaleX !== 1 || scaleY !== 1) {
11847
+ const canvasWidth = width + (xGap || 0);
11848
+ const canvasHeight = height + (yGap || 0);
11849
+ scaleX /= canvasWidth / max(floor(canvasWidth), 1);
11850
+ scaleY /= canvasHeight / max(floor(canvasHeight), 1);
11882
11851
  if (!imageMatrix) {
11883
11852
  imageMatrix = get$1();
11884
11853
  if (transform) copy$1(imageMatrix, transform);
11885
11854
  }
11886
11855
  scale(imageMatrix, 1 / scaleX, 1 / scaleY);
11887
11856
  }
11888
- if (imageMatrix) {
11889
- const canvasWidth = width + (xGap || 0), canvasHeight = height + (yGap || 0);
11890
- scale(imageMatrix, canvasWidth / max(floor(canvasWidth), 1), canvasHeight / max(floor(canvasHeight), 1));
11891
- }
11892
- const canvas = image.getCanvas(width, height, data.opacity, data.filters, xGap, yGap);
11857
+ const canvas = image.getCanvas(width, height, data.opacity, data.filters, xGap, yGap, ui.leafer && ui.leafer.config.smooth);
11893
11858
  const pattern = image.getPattern(canvas, repeat || (Platform.origin.noRepeat || "no-repeat"), imageMatrix, paint);
11894
11859
  paint.style = pattern;
11895
11860
  paint.patternId = id;
@@ -12849,4 +12814,4 @@ try {
12849
12814
  if (wx) useCanvas("miniapp", wx);
12850
12815
  } catch (_a) {}
12851
12816
 
12852
- 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, 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, 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 };
12817
+ 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, 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, 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 };