leafer-ui 1.9.4 → 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.
@@ -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;
@@ -1134,13 +1137,13 @@ const AlignHelper = {
1134
1137
  }
1135
1138
  };
1136
1139
 
1137
- 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;
1138
1141
 
1139
1142
  const {toOuterPoint: toOuterPoint$2} = MatrixHelper;
1140
1143
 
1141
1144
  const {float: float, fourNumber: fourNumber} = MathHelper;
1142
1145
 
1143
- const {floor: floor$2, ceil: ceil$1} = Math;
1146
+ const {floor: floor$2, ceil: ceil$2} = Math;
1144
1147
 
1145
1148
  let right$1, bottom$1, boundsRight, boundsBottom;
1146
1149
 
@@ -1269,7 +1272,7 @@ const BoundsHelper = {
1269
1272
  point.x = t.x;
1270
1273
  toOuterPoint$2(matrix, point, toPoint$4);
1271
1274
  addPoint$2(tempPointBounds$1, toPoint$4.x, toPoint$4.y);
1272
- toBounds$3(tempPointBounds$1, to);
1275
+ toBounds$2(tempPointBounds$1, to);
1273
1276
  }
1274
1277
  },
1275
1278
  toInnerOf(t, matrix, to) {
@@ -1307,8 +1310,8 @@ const BoundsHelper = {
1307
1310
  const {x: x, y: y} = t;
1308
1311
  t.x = floor$2(t.x);
1309
1312
  t.y = floor$2(t.y);
1310
- t.width = x > t.x ? ceil$1(t.width + x - t.x) : ceil$1(t.width);
1311
- 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);
1312
1315
  },
1313
1316
  unsign(t) {
1314
1317
  if (t.width < 0) {
@@ -1368,7 +1371,7 @@ const BoundsHelper = {
1368
1371
  },
1369
1372
  setPoints(t, points) {
1370
1373
  points.forEach((point, index) => index === 0 ? setPoint$2(tempPointBounds$1, point.x, point.y) : addPoint$2(tempPointBounds$1, point.x, point.y));
1371
- toBounds$3(tempPointBounds$1, t);
1374
+ toBounds$2(tempPointBounds$1, t);
1372
1375
  },
1373
1376
  setPoint(t, point) {
1374
1377
  B.set(t, point.x, point.y);
@@ -2221,15 +2224,15 @@ class LeaferCanvasBase extends Canvas$1 {
2221
2224
  DataHelper.copyAttrs(s, size, canvasSizeAttrs);
2222
2225
  canvasSizeAttrs.forEach(key => s[key] || (s[key] = 1));
2223
2226
  this.bounds = new Bounds(0, 0, this.width, this.height);
2224
- if (this.context && !this.unreal) {
2225
- this.updateViewSize();
2226
- this.smooth = this.config.smooth;
2227
- }
2227
+ this.updateViewSize();
2228
2228
  this.updateClientBounds();
2229
- if (this.context && !this.unreal && takeCanvas) {
2230
- this.clearWorld(takeCanvas.bounds);
2231
- this.copyWorld(takeCanvas);
2232
- 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
+ }
2233
2236
  }
2234
2237
  }
2235
2238
  updateViewSize() {}
@@ -2543,7 +2546,7 @@ const RectHelper = {
2543
2546
  }
2544
2547
  };
2545
2548
 
2546
- 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;
2547
2550
 
2548
2551
  const {setPoint: setPoint$1, addPoint: addPoint$1} = TwoPointBoundsHelper;
2549
2552
 
@@ -2614,9 +2617,11 @@ const BezierHelper = {
2614
2617
  const CBy = toY - y1;
2615
2618
  let startRadian = atan2$1(BAy, BAx);
2616
2619
  let endRadian = atan2$1(CBy, CBx);
2620
+ const lenBA = hypot(BAx, BAy);
2621
+ const lenCB = hypot(CBx, CBy);
2617
2622
  let totalRadian = endRadian - startRadian;
2618
2623
  if (totalRadian < 0) totalRadian += PI2;
2619
- 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) {
2620
2625
  if (data) data.push(L$6, x1, y1);
2621
2626
  if (setPointBounds) {
2622
2627
  setPoint$1(setPointBounds, fromX, fromY);
@@ -2649,7 +2654,7 @@ const BezierHelper = {
2649
2654
  let totalRadian = endRadian - startRadian;
2650
2655
  if (totalRadian < 0) totalRadian += PI2; else if (totalRadian > PI2) totalRadian -= PI2;
2651
2656
  if (anticlockwise) totalRadian -= PI2;
2652
- const parts = ceil(abs$2(totalRadian / PI_2));
2657
+ const parts = ceil$1(abs$2(totalRadian / PI_2));
2653
2658
  const partRadian = totalRadian / parts;
2654
2659
  const partRadian4Sin = sin$3(partRadian / 4);
2655
2660
  const control = 8 / 3 * partRadian4Sin * partRadian4Sin / sin$3(partRadian / 2);
@@ -3208,11 +3213,7 @@ class PathCreator {
3208
3213
  this.set(path);
3209
3214
  }
3210
3215
  set(path) {
3211
- if (path) {
3212
- this.__path = isString(path) ? PathHelper.parse(path) : path;
3213
- } else {
3214
- this.__path = [];
3215
- }
3216
+ this.__path = path ? isString(path) ? PathHelper.parse(path) : path : [];
3216
3217
  return this;
3217
3218
  }
3218
3219
  beginPath() {
@@ -3380,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:
3380
3381
 
3381
3382
  const {toTwoPointBounds: toTwoPointBounds, toTwoPointBoundsByQuadraticCurve: toTwoPointBoundsByQuadraticCurve, arcTo: arcTo$1, arc: arc, ellipse: ellipse$1} = BezierHelper;
3382
3383
 
3383
- 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;
3384
3385
 
3385
3386
  const debug$b = Debug.get("PathBounds");
3386
3387
 
@@ -3395,7 +3396,7 @@ const setEndPoint = {};
3395
3396
  const PathBounds = {
3396
3397
  toBounds(data, setBounds) {
3397
3398
  PathBounds.toTwoPointBounds(data, setPointBounds);
3398
- toBounds$2(setPointBounds, setBounds);
3399
+ toBounds$1(setPointBounds, setBounds);
3399
3400
  },
3400
3401
  toTwoPointBounds(data, setPointBounds) {
3401
3402
  if (!data || !data.length) return setPoint(setPointBounds, 0, 0);
@@ -3582,14 +3583,18 @@ const PathCorner = {
3582
3583
  }
3583
3584
  };
3584
3585
 
3585
- PathHelper.creator = new PathCreator;
3586
+ function path(path) {
3587
+ return new PathCreator(path);
3588
+ }
3589
+
3590
+ const pen = path();
3591
+
3592
+ PathHelper.creator = path();
3586
3593
 
3587
3594
  PathHelper.parse = PathConvert.parse;
3588
3595
 
3589
3596
  PathHelper.convertToCanvasData = PathConvert.toCanvasData;
3590
3597
 
3591
- const pen = new PathCreator;
3592
-
3593
3598
  const {drawRoundRect: drawRoundRect} = RectHelper;
3594
3599
 
3595
3600
  function roundRect(drawer) {
@@ -3954,7 +3959,7 @@ const ImageManager = {
3954
3959
  return FileHelper.alphaPixelTypes.some(item => I$1.isFormat(item, config));
3955
3960
  },
3956
3961
  isFormat(format, config) {
3957
- if (config.format === format) return true;
3962
+ if (config.format) return config.format === format;
3958
3963
  const {url: url} = config;
3959
3964
  if (url.startsWith("data:")) {
3960
3965
  if (url.startsWith("data:" + FileHelper.mineType(format))) return true;
@@ -4048,7 +4053,7 @@ class LeaferImage {
4048
4053
  getFull(_filters) {
4049
4054
  return this.view;
4050
4055
  }
4051
- getCanvas(width, height, opacity, _filters, xGap, yGap) {
4056
+ getCanvas(width, height, opacity, _filters, xGap, yGap, smooth) {
4052
4057
  width || (width = this.width);
4053
4058
  height || (height = this.height);
4054
4059
  if (this.cache) {
@@ -4064,6 +4069,7 @@ class LeaferImage {
4064
4069
  const canvas = Platform.origin.createCanvas(max$1(floor$1(width + (xGap || 0)), 1), max$1(floor$1(height + (yGap || 0)), 1));
4065
4070
  const ctx = canvas.getContext("2d");
4066
4071
  if (opacity) ctx.globalAlpha = opacity;
4072
+ ctx.imageSmoothingEnabled = smooth === false ? false : true;
4067
4073
  ctx.drawImage(this.view, 0, 0, width, height);
4068
4074
  this.cache = this.use > 1 ? {
4069
4075
  data: canvas,
@@ -4715,8 +4721,9 @@ const L = LeafHelper;
4715
4721
 
4716
4722
  const {updateAllMatrix: updateAllMatrix$3, updateMatrix: updateMatrix$2, updateAllWorldOpacity: updateAllWorldOpacity, updateAllChange: updateAllChange$1, updateChange: updateChange$1} = L;
4717
4723
 
4718
- function getTempLocal(t, world) {
4719
- 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;
4720
4727
  }
4721
4728
 
4722
4729
  const LeafBoundsHelper = {
@@ -5734,7 +5741,7 @@ const {updateBounds: updateBounds$1} = BranchHelper;
5734
5741
 
5735
5742
  const {toOuterOf: toOuterOf$1, copyAndSpread: copyAndSpread$1, copy: copy$4} = BoundsHelper;
5736
5743
 
5737
- const {toBounds: toBounds$1} = PathBounds;
5744
+ const {toBounds: toBounds} = PathBounds;
5738
5745
 
5739
5746
  const LeafBounds = {
5740
5747
  __updateWorldBounds() {
@@ -5806,8 +5813,8 @@ const LeafBounds = {
5806
5813
  __updateBoxBounds(_secondLayout, _bounds) {
5807
5814
  const b = this.__layout.boxBounds;
5808
5815
  const data = this.__;
5809
- if (data.__pathInputed) {
5810
- toBounds$1(data.path, b);
5816
+ if (data.__usePathBox) {
5817
+ toBounds(data.path, b);
5811
5818
  } else {
5812
5819
  b.x = 0;
5813
5820
  b.y = 0;
@@ -6742,7 +6749,7 @@ class LeafLevelList {
6742
6749
  }
6743
6750
  }
6744
6751
 
6745
- const version = "1.9.4";
6752
+ const version = "1.9.5";
6746
6753
 
6747
6754
  const debug$5 = Debug.get("LeaferCanvas");
6748
6755
 
@@ -6833,10 +6840,22 @@ class LeaferCanvas extends LeaferCanvasBase {
6833
6840
  updateViewSize() {
6834
6841
  const {width: width, height: height, pixelRatio: pixelRatio} = this;
6835
6842
  const {style: style} = this.view;
6836
- style.width = width + "px";
6837
- style.height = height + "px";
6838
- this.view.width = Math.ceil(width * pixelRatio);
6839
- this.view.height = Math.ceil(height * pixelRatio);
6843
+ if (this.unreal) {
6844
+ const {config: config, autoWidthStr: autoWidthStr, autoHeightStr: autoHeightStr} = this;
6845
+ if (config.width) {
6846
+ if (isUndefined(autoWidthStr)) this.autoWidthStr = style.width || "";
6847
+ style.width = config.width + "px";
6848
+ } else if (!isUndefined(autoWidthStr)) style.width = autoWidthStr;
6849
+ if (config.height) {
6850
+ if (isUndefined(autoHeightStr)) this.autoHeightStr = style.height || "";
6851
+ style.height = config.height + "px";
6852
+ } else if (!isUndefined(autoHeightStr)) style.height = autoHeightStr;
6853
+ } else {
6854
+ style.width = width + "px";
6855
+ style.height = height + "px";
6856
+ this.view.width = Math.ceil(width * pixelRatio);
6857
+ this.view.height = Math.ceil(height * pixelRatio);
6858
+ }
6840
6859
  }
6841
6860
  updateClientBounds() {
6842
6861
  if (this.view.parentElement) this.clientBounds = this.view.getBoundingClientRect();
@@ -6845,6 +6864,7 @@ class LeaferCanvas extends LeaferCanvasBase {
6845
6864
  this.resizeListener = listener;
6846
6865
  if (autoBounds) {
6847
6866
  this.autoBounds = autoBounds;
6867
+ if (this.resizeObserver) return;
6848
6868
  try {
6849
6869
  this.resizeObserver = new ResizeObserver(entries => {
6850
6870
  this.updateClientBounds();
@@ -6861,18 +6881,10 @@ class LeaferCanvas extends LeaferCanvasBase {
6861
6881
  } catch (_a) {
6862
6882
  this.imitateResizeObserver();
6863
6883
  }
6884
+ this.stopListenPixelRatio();
6864
6885
  } else {
6865
- window.addEventListener("resize", this.windowListener = () => {
6866
- const pixelRatio = Platform.devicePixelRatio;
6867
- if (!this.config.pixelRatio && this.pixelRatio !== pixelRatio) {
6868
- const {width: width, height: height} = this;
6869
- this.emitResize({
6870
- width: width,
6871
- height: height,
6872
- pixelRatio: pixelRatio
6873
- });
6874
- }
6875
- });
6886
+ this.listenPixelRatio();
6887
+ if (this.unreal) this.updateViewSize();
6876
6888
  }
6877
6889
  }
6878
6890
  imitateResizeObserver() {
@@ -6881,6 +6893,25 @@ class LeaferCanvas extends LeaferCanvasBase {
6881
6893
  Platform.requestRender(this.imitateResizeObserver.bind(this));
6882
6894
  }
6883
6895
  }
6896
+ listenPixelRatio() {
6897
+ if (!this.windowListener) window.addEventListener("resize", this.windowListener = () => {
6898
+ const pixelRatio = Platform.devicePixelRatio;
6899
+ if (!this.config.pixelRatio && this.pixelRatio !== pixelRatio) {
6900
+ const {width: width, height: height} = this;
6901
+ this.emitResize({
6902
+ width: width,
6903
+ height: height,
6904
+ pixelRatio: pixelRatio
6905
+ });
6906
+ }
6907
+ });
6908
+ }
6909
+ stopListenPixelRatio() {
6910
+ if (this.windowListener) {
6911
+ window.removeEventListener("resize", this.windowListener);
6912
+ this.windowListener = null;
6913
+ }
6914
+ }
6884
6915
  checkAutoBounds(parentSize) {
6885
6916
  const view = this.view;
6886
6917
  const {x: x, y: y, width: width, height: height} = this.autoBounds.getBoundsFrom(parentSize);
@@ -6918,10 +6949,7 @@ class LeaferCanvas extends LeaferCanvasBase {
6918
6949
  destroy() {
6919
6950
  if (this.view) {
6920
6951
  this.stopAutoLayout();
6921
- if (this.windowListener) {
6922
- window.removeEventListener("resize", this.windowListener);
6923
- this.windowListener = null;
6924
- }
6952
+ this.stopListenPixelRatio();
6925
6953
  if (!this.unreal) {
6926
6954
  const view = this.view;
6927
6955
  if (view.parentElement) view.remove();
@@ -7350,7 +7378,7 @@ class Renderer {
7350
7378
  this.times = 0;
7351
7379
  this.config = {
7352
7380
  usePartRender: true,
7353
- maxFPS: 60
7381
+ maxFPS: 120
7354
7382
  };
7355
7383
  this.target = target;
7356
7384
  this.canvas = canvas;
@@ -7505,11 +7533,15 @@ class Renderer {
7505
7533
  if (this.requestTime || !target) return;
7506
7534
  if (target.parentApp) return target.parentApp.requestRender(false);
7507
7535
  const requestTime = this.requestTime = Date.now();
7508
- Platform.requestRender(() => {
7509
- this.FPS = Math.min(60, Math.ceil(1e3 / (Date.now() - requestTime)));
7536
+ const render = () => {
7537
+ const nowFPS = 1e3 / (Date.now() - requestTime);
7538
+ const {maxFPS: maxFPS} = this.config;
7539
+ if (maxFPS && nowFPS > maxFPS - .5) return Platform.requestRender(render);
7540
+ this.FPS = Math.min(120, Math.ceil(nowFPS));
7510
7541
  this.requestTime = 0;
7511
7542
  this.checkRender();
7512
- });
7543
+ };
7544
+ Platform.requestRender(render);
7513
7545
  }
7514
7546
  __onResize(e) {
7515
7547
  if (this.canvas.unreal) return;
@@ -7552,7 +7584,8 @@ class Renderer {
7552
7584
  if (this.target) {
7553
7585
  this.stop();
7554
7586
  this.__removeListenEvents();
7555
- this.target = this.canvas = this.config = null;
7587
+ this.config = {};
7588
+ this.target = this.canvas = null;
7556
7589
  }
7557
7590
  }
7558
7591
  }
@@ -8043,7 +8076,11 @@ class LeaferData extends GroupData {
8043
8076
 
8044
8077
  class FrameData extends BoxData {}
8045
8078
 
8046
- class LineData extends UIData {}
8079
+ class LineData extends UIData {
8080
+ get __usePathBox() {
8081
+ return this.points || this.__pathInputed;
8082
+ }
8083
+ }
8047
8084
 
8048
8085
  class RectData extends UIData {
8049
8086
  get __boxStroke() {
@@ -8057,7 +8094,7 @@ class EllipseData extends UIData {
8057
8094
  }
8058
8095
  }
8059
8096
 
8060
- class PolygonData extends UIData {}
8097
+ class PolygonData extends LineData {}
8061
8098
 
8062
8099
  class StarData extends UIData {}
8063
8100
 
@@ -8367,20 +8404,9 @@ let UI = UI_1 = class UI extends Leaf {
8367
8404
  if (!path) this.__drawPathByBox(pen);
8368
8405
  return pen;
8369
8406
  }
8370
- constructor(data) {
8371
- super(data);
8372
- }
8373
8407
  reset(_data) {}
8374
- set(data, transition) {
8375
- if (data) {
8376
- if (transition) {
8377
- if (transition === "temp") {
8378
- this.lockNormalStyle = true;
8379
- Object.assign(this, data);
8380
- this.lockNormalStyle = false;
8381
- } else this.animate(data, transition);
8382
- } else Object.assign(this, data);
8383
- }
8408
+ set(data, _transition) {
8409
+ if (data) Object.assign(this, data);
8384
8410
  }
8385
8411
  get(name) {
8386
8412
  return isString(name) ? this.__.__getInput(name) : this.__.__getInputData(name);
@@ -8426,7 +8452,7 @@ let UI = UI_1 = class UI extends Leaf {
8426
8452
  const data = this.__;
8427
8453
  if (data.path) {
8428
8454
  data.__pathForRender = data.cornerRadius ? PathCorner.smooth(data.path, data.cornerRadius, data.cornerSmoothing) : data.path;
8429
- if (data.__useArrow) PathArrow.addArrows(this, !data.cornerRadius);
8455
+ if (data.__useArrow) PathArrow.addArrows(this);
8430
8456
  } else data.__pathForRender && (data.__pathForRender = undefined);
8431
8457
  }
8432
8458
  __drawRenderPath(canvas) {
@@ -8450,7 +8476,8 @@ let UI = UI_1 = class UI extends Leaf {
8450
8476
  drawImagePlaceholder(canvas, _image) {
8451
8477
  Paint.fill(this.__.placeholderColor, this, canvas);
8452
8478
  }
8453
- animate(_keyframe, _options, _type, _isTemp) {
8479
+ animate(keyframe, _options, _type, _isTemp) {
8480
+ this.set(keyframe);
8454
8481
  return Plugin.need("animate");
8455
8482
  }
8456
8483
  killAnimate(_type, _nextStyle) {}
@@ -8639,9 +8666,6 @@ let Group = class Group extends UI {
8639
8666
  get isBranch() {
8640
8667
  return true;
8641
8668
  }
8642
- constructor(data) {
8643
- super(data);
8644
- }
8645
8669
  reset(data) {
8646
8670
  this.__setBranch();
8647
8671
  super.reset(data);
@@ -8766,7 +8790,7 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8766
8790
  const canvas = this.canvas = Creator.canvas(config);
8767
8791
  this.__controllers.push(this.renderer = Creator.renderer(this, canvas, config), this.watcher = Creator.watcher(this, config), this.layouter = Creator.layouter(this, config));
8768
8792
  if (this.isApp) this.__setApp();
8769
- this.__checkAutoLayout(config, parentApp);
8793
+ this.__checkAutoLayout();
8770
8794
  this.view = canvas.view;
8771
8795
  if (!parentApp) {
8772
8796
  this.selector = Creator.selector(this);
@@ -8865,7 +8889,8 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8865
8889
  this.leafer = leafer;
8866
8890
  this.__level = 1;
8867
8891
  }
8868
- __checkAutoLayout(config, parentApp) {
8892
+ __checkAutoLayout() {
8893
+ const {config: config, parentApp: parentApp} = this;
8869
8894
  if (!parentApp) {
8870
8895
  if (!config.width || !config.height) this.autoLayout = new AutoBounds(config);
8871
8896
  this.canvas.startAutoLayout(this.autoLayout, this.__onResize.bind(this));
@@ -8891,9 +8916,10 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8891
8916
  return super.__getAttr(attrName);
8892
8917
  }
8893
8918
  __changeCanvasSize(attrName, newValue) {
8894
- const data = DataHelper.copyAttrs({}, this.canvas, canvasSizeAttrs);
8895
- data[attrName] = this.config[attrName] = newValue;
8896
- if (newValue) this.canvas.stopAutoLayout();
8919
+ const {config: config, canvas: canvas} = this;
8920
+ const data = DataHelper.copyAttrs({}, canvas, canvasSizeAttrs);
8921
+ data[attrName] = config[attrName] = newValue;
8922
+ config.width && config.height ? canvas.stopAutoLayout() : this.__checkAutoLayout();
8897
8923
  this.__doResize(data);
8898
8924
  }
8899
8925
  __changeFill(newValue) {
@@ -9040,9 +9066,9 @@ let Leafer = Leafer_1 = class Leafer extends Group {
9040
9066
  if (!this.parent) {
9041
9067
  if (this.selector) this.selector.destroy();
9042
9068
  if (this.hitCanvasManager) this.hitCanvasManager.destroy();
9043
- this.canvasManager.destroy();
9069
+ if (this.canvasManager) this.canvasManager.destroy();
9044
9070
  }
9045
- this.canvas.destroy();
9071
+ if (this.canvas) this.canvas.destroy();
9046
9072
  this.config.view = this.view = this.parentApp = null;
9047
9073
  if (this.userConfig) this.userConfig.view = null;
9048
9074
  super.destroy();
@@ -9070,9 +9096,6 @@ let Rect = class Rect extends UI {
9070
9096
  get __tag() {
9071
9097
  return "Rect";
9072
9098
  }
9073
- constructor(data) {
9074
- super(data);
9075
- }
9076
9099
  };
9077
9100
 
9078
9101
  __decorate([ dataProcessor(RectData) ], Rect.prototype, "__", void 0);
@@ -9204,9 +9227,6 @@ let Frame = class Frame extends Box {
9204
9227
  get isFrame() {
9205
9228
  return true;
9206
9229
  }
9207
- constructor(data) {
9208
- super(data);
9209
- }
9210
9230
  };
9211
9231
 
9212
9232
  __decorate([ dataProcessor(FrameData) ], Frame.prototype, "__", void 0);
@@ -9223,9 +9243,6 @@ let Ellipse = class Ellipse extends UI {
9223
9243
  get __tag() {
9224
9244
  return "Ellipse";
9225
9245
  }
9226
- constructor(data) {
9227
- super(data);
9228
- }
9229
9246
  __updatePath() {
9230
9247
  const {width: width, height: height, innerRadius: innerRadius, startAngle: startAngle, endAngle: endAngle} = this.__;
9231
9248
  const rx = width / 2, ry = height / 2;
@@ -9269,8 +9286,6 @@ const {moveTo: moveTo$2, lineTo: lineTo$2, drawPoints: drawPoints$1} = PathComma
9269
9286
 
9270
9287
  const {rotate: rotate$1, getAngle: getAngle$1, getDistance: getDistance$2, defaultPoint: defaultPoint} = PointHelper;
9271
9288
 
9272
- const {toBounds: toBounds} = PathBounds;
9273
-
9274
9289
  let Line = class Line extends UI {
9275
9290
  get __tag() {
9276
9291
  return "Line";
@@ -9287,31 +9302,16 @@ let Line = class Line extends UI {
9287
9302
  this.rotation = getAngle$1(defaultPoint, value);
9288
9303
  if (this.height) this.height = 0;
9289
9304
  }
9290
- constructor(data) {
9291
- super(data);
9292
- }
9293
9305
  __updatePath() {
9294
9306
  const data = this.__;
9295
9307
  const path = data.path = [];
9296
9308
  if (data.points) {
9297
- drawPoints$1(path, data.points, false, data.closed);
9309
+ drawPoints$1(path, data.points, data.curve, data.closed);
9298
9310
  } else {
9299
9311
  moveTo$2(path, 0, 0);
9300
9312
  lineTo$2(path, this.width, 0);
9301
9313
  }
9302
9314
  }
9303
- __updateRenderPath() {
9304
- const data = this.__;
9305
- if (!this.pathInputed && data.points && data.curve) {
9306
- drawPoints$1(data.__pathForRender = [], data.points, data.curve, data.closed);
9307
- if (data.__useArrow) PathArrow.addArrows(this, false);
9308
- } else super.__updateRenderPath();
9309
- }
9310
- __updateBoxBounds() {
9311
- if (this.points) {
9312
- toBounds(this.__.__pathForRender, this.__layout.boxBounds);
9313
- } else super.__updateBoxBounds();
9314
- }
9315
9315
  };
9316
9316
 
9317
9317
  __decorate([ dataProcessor(LineData) ], Line.prototype, "__", void 0);
@@ -9338,15 +9338,13 @@ let Polygon = class Polygon extends UI {
9338
9338
  get __tag() {
9339
9339
  return "Polygon";
9340
9340
  }
9341
- constructor(data) {
9342
- super(data);
9343
- }
9344
9341
  __updatePath() {
9345
- const path = this.__.path = [];
9346
- if (this.__.points) {
9347
- drawPoints(path, this.__.points, false, true);
9342
+ const data = this.__;
9343
+ const path = data.path = [];
9344
+ if (data.points) {
9345
+ drawPoints(path, data.points, data.curve, true);
9348
9346
  } else {
9349
- const {width: width, height: height, sides: sides} = this.__;
9347
+ const {width: width, height: height, sides: sides} = data;
9350
9348
  const rx = width / 2, ry = height / 2;
9351
9349
  moveTo$1(path, rx, 0);
9352
9350
  for (let i = 1; i < sides; i++) {
@@ -9381,9 +9379,6 @@ let Star = class Star extends UI {
9381
9379
  get __tag() {
9382
9380
  return "Star";
9383
9381
  }
9384
- constructor(data) {
9385
- super(data);
9386
- }
9387
9382
  __updatePath() {
9388
9383
  const {width: width, height: height, corners: corners, innerRadius: innerRadius} = this.__;
9389
9384
  const rx = width / 2, ry = height / 2;
@@ -9416,9 +9411,6 @@ let Image$1 = class Image extends Rect {
9416
9411
  const {fill: fill} = this.__;
9417
9412
  return isArray(fill) && fill[0].image;
9418
9413
  }
9419
- constructor(data) {
9420
- super(data);
9421
- }
9422
9414
  };
9423
9415
 
9424
9416
  __decorate([ dataProcessor(ImageData) ], Image$1.prototype, "__", void 0);
@@ -9518,9 +9510,6 @@ let Text = class Text extends UI {
9518
9510
  this.updateLayout();
9519
9511
  return this.__.__textDrawData;
9520
9512
  }
9521
- constructor(data) {
9522
- super(data);
9523
- }
9524
9513
  __updateTextDrawData() {
9525
9514
  const data = this.__;
9526
9515
  const {lineHeight: lineHeight, letterSpacing: letterSpacing, fontFamily: fontFamily, fontSize: fontSize, fontWeight: fontWeight, italic: italic, textCase: textCase, textOverflow: textOverflow, padding: padding} = data;
@@ -9653,9 +9642,6 @@ let Path = class Path extends UI {
9653
9642
  get __tag() {
9654
9643
  return "Path";
9655
9644
  }
9656
- constructor(data) {
9657
- super(data);
9658
- }
9659
9645
  };
9660
9646
 
9661
9647
  __decorate([ dataProcessor(PathData) ], Path.prototype, "__", void 0);
@@ -9668,9 +9654,6 @@ let Pen = class Pen extends Group {
9668
9654
  get __tag() {
9669
9655
  return "Pen";
9670
9656
  }
9671
- constructor(data) {
9672
- super(data);
9673
- }
9674
9657
  setStyle(data) {
9675
9658
  const path = this.pathElement = new Path(data);
9676
9659
  this.pathStyle = data;
@@ -12083,7 +12066,7 @@ function ignoreRender(ui, value) {
12083
12066
 
12084
12067
  const {get: get$1, scale: scale, copy: copy$1} = MatrixHelper;
12085
12068
 
12086
- const {floor: floor, max: max, abs: abs} = Math;
12069
+ const {floor: floor, ceil: ceil, max: max, abs: abs} = Math;
12087
12070
 
12088
12071
  function createPattern(ui, paint, pixelRatio) {
12089
12072
  let {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true, paint.scaleFixed);
@@ -12093,8 +12076,6 @@ function createPattern(ui, paint, pixelRatio) {
12093
12076
  let imageScale, imageMatrix, {width: width, height: height, scaleX: sx, scaleY: sy, transform: transform, repeat: repeat, gap: gap} = data;
12094
12077
  scaleX *= pixelRatio;
12095
12078
  scaleY *= pixelRatio;
12096
- const xGap = gap && gap.x * scaleX;
12097
- const yGap = gap && gap.y * scaleY;
12098
12079
  if (sx) {
12099
12080
  sx = abs(sx);
12100
12081
  sy = abs(sy);
@@ -12111,7 +12092,10 @@ function createPattern(ui, paint, pixelRatio) {
12111
12092
  if (size > Platform.image.maxCacheSize) return false;
12112
12093
  }
12113
12094
  let maxSize = Platform.image.maxPatternSize;
12114
- if (!image.isSVG) {
12095
+ if (image.isSVG) {
12096
+ const ws = width / image.width;
12097
+ if (ws > 1) imageScale = ws / ceil(ws);
12098
+ } else {
12115
12099
  const imageSize = image.width * image.height;
12116
12100
  if (maxSize > imageSize) maxSize = imageSize;
12117
12101
  }
@@ -12126,18 +12110,20 @@ function createPattern(ui, paint, pixelRatio) {
12126
12110
  scaleX /= sx;
12127
12111
  scaleY /= sy;
12128
12112
  }
12113
+ const xGap = gap && gap.x * scaleX;
12114
+ const yGap = gap && gap.y * scaleY;
12129
12115
  if (transform || scaleX !== 1 || scaleY !== 1) {
12116
+ const canvasWidth = width + (xGap || 0);
12117
+ const canvasHeight = height + (yGap || 0);
12118
+ scaleX /= canvasWidth / max(floor(canvasWidth), 1);
12119
+ scaleY /= canvasHeight / max(floor(canvasHeight), 1);
12130
12120
  if (!imageMatrix) {
12131
12121
  imageMatrix = get$1();
12132
12122
  if (transform) copy$1(imageMatrix, transform);
12133
12123
  }
12134
12124
  scale(imageMatrix, 1 / scaleX, 1 / scaleY);
12135
12125
  }
12136
- if (imageMatrix) {
12137
- const canvasWidth = width + (xGap || 0), canvasHeight = height + (yGap || 0);
12138
- scale(imageMatrix, canvasWidth / max(floor(canvasWidth), 1), canvasHeight / max(floor(canvasHeight), 1));
12139
- }
12140
- const canvas = image.getCanvas(width, height, data.opacity, data.filters, xGap, yGap);
12126
+ const canvas = image.getCanvas(width, height, data.opacity, data.filters, xGap, yGap, ui.leafer && ui.leafer.config.smooth);
12141
12127
  const pattern = image.getPattern(canvas, repeat || (Platform.origin.noRepeat || "no-repeat"), imageMatrix, paint);
12142
12128
  paint.style = pattern;
12143
12129
  paint.patternId = id;
@@ -13091,4 +13077,4 @@ Object.assign(Creator, {
13091
13077
 
13092
13078
  useCanvas();
13093
13079
 
13094
- 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$1 as DragEvent, Dragger, DropEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, Frame, FrameData, Group, GroupData, HitCanvasManager, Image$1 as 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$1 as 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 };
13080
+ 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$1 as DragEvent, Dragger, DropEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, Frame, FrameData, Group, GroupData, HitCanvasManager, Image$1 as 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$1 as 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 };