@leafer/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$6(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) {
@@ -659,7 +665,7 @@ const M$a = MatrixHelper;
659
665
 
660
666
  const {toInnerPoint: toInnerPoint$2, toOuterPoint: toOuterPoint$3} = MatrixHelper;
661
667
 
662
- const {sin: sin$5, cos: cos$5, abs: abs$6, sqrt: sqrt$4, atan2: atan2$2, min: min$1, round: round$5} = Math;
668
+ const {sin: sin$5, cos: cos$5, abs: abs$7, sqrt: sqrt$4, atan2: atan2$2, min: min$1, round: round$5} = Math;
663
669
 
664
670
  const PointHelper = {
665
671
  defaultPoint: getPointData(),
@@ -752,8 +758,8 @@ const PointHelper = {
752
758
  return getDistanceFrom(t.x, t.y, point.x, point.y);
753
759
  },
754
760
  getDistanceFrom(x1, y1, x2, y2) {
755
- const x = abs$6(x2 - x1);
756
- const y = abs$6(y2 - y1);
761
+ const x = abs$7(x2 - x1);
762
+ const y = abs$7(y2 - y1);
757
763
  return sqrt$4(x * x + y * y);
758
764
  },
759
765
  getMinDistanceFrom(x1, y1, x2, y2, x3, y3) {
@@ -1131,13 +1137,13 @@ const AlignHelper = {
1131
1137
  }
1132
1138
  };
1133
1139
 
1134
- const {tempPointBounds: tempPointBounds$1, setPoint: setPoint$5, addPoint: addPoint$3, toBounds: toBounds$4} = TwoPointBoundsHelper;
1140
+ const {tempPointBounds: tempPointBounds$1, setPoint: setPoint$5, addPoint: addPoint$3, toBounds: toBounds$3} = TwoPointBoundsHelper;
1135
1141
 
1136
1142
  const {toOuterPoint: toOuterPoint$2} = MatrixHelper;
1137
1143
 
1138
1144
  const {float: float$1, fourNumber: fourNumber$1} = MathHelper;
1139
1145
 
1140
- const {floor: floor$3, ceil: ceil$2} = Math;
1146
+ const {floor: floor$3, ceil: ceil$3} = Math;
1141
1147
 
1142
1148
  let right$4, bottom$3, boundsRight, boundsBottom;
1143
1149
 
@@ -1266,7 +1272,7 @@ const BoundsHelper = {
1266
1272
  point$2.x = t.x;
1267
1273
  toOuterPoint$2(matrix, point$2, toPoint$5);
1268
1274
  addPoint$3(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
1269
- toBounds$4(tempPointBounds$1, to);
1275
+ toBounds$3(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$3(t.x);
1306
1312
  t.y = floor$3(t.y);
1307
- t.width = x > t.x ? ceil$2(t.width + x - t.x) : ceil$2(t.width);
1308
- t.height = y > t.y ? ceil$2(t.height + y - t.y) : ceil$2(t.height);
1313
+ t.width = x > t.x ? ceil$3(t.width + x - t.x) : ceil$3(t.width);
1314
+ t.height = y > t.y ? ceil$3(t.height + y - t.y) : ceil$3(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$5(tempPointBounds$1, point.x, point.y) : addPoint$3(tempPointBounds$1, point.x, point.y));
1368
- toBounds$4(tempPointBounds$1, t);
1374
+ toBounds$3(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$4, cos: cos$4, atan2: atan2$1, ceil: ceil$1, abs: abs$5, PI: PI$3, sqrt: sqrt$3, pow: pow$1} = Math;
2549
+ const {sin: sin$4, cos: cos$4, hypot: hypot, atan2: atan2$1, ceil: ceil$2, abs: abs$6, PI: PI$3, sqrt: sqrt$3, pow: pow$1} = Math;
2544
2550
 
2545
2551
  const {setPoint: setPoint$4, addPoint: addPoint$2} = 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$3 || abs$5(BAx + BAy) < 1e-12 || abs$5(CBx + CBy) < 1e-12) {
2624
+ if (lenBA < 1e-12 || lenCB < 1e-12 || totalRadian < 1e-12 || abs$6(totalRadian - PI$3) < 1e-12) {
2617
2625
  if (data) data.push(L$a, x1, y1);
2618
2626
  if (setPointBounds) {
2619
2627
  setPoint$4(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$1(abs$5(totalRadian / PI_2));
2657
+ const parts = ceil$2(abs$6(totalRadian / PI_2));
2650
2658
  const partRadian = totalRadian / parts;
2651
2659
  const partRadian4Sin = sin$4(partRadian / 4);
2652
2660
  const control = 8 / 3 * partRadian4Sin * partRadian4Sin / sin$4(partRadian / 2);
@@ -3113,7 +3121,7 @@ const {M: M$7, L: L$8, C: C$6, Q: Q$5, Z: Z$6, N: N$4, D: D$5, X: X$4, G: G$4, F
3113
3121
 
3114
3122
  const {getMinDistanceFrom: getMinDistanceFrom, getRadianFrom: getRadianFrom} = PointHelper;
3115
3123
 
3116
- const {tan: tan, min: min, abs: abs$4} = Math;
3124
+ const {tan: tan, min: min, abs: abs$5} = Math;
3117
3125
 
3118
3126
  const startPoint = {};
3119
3127
 
@@ -3171,7 +3179,7 @@ const PathCommandDataHelper = {
3171
3179
  arcTo(data, x1, y1, x2, y2, radius, lastX, lastY) {
3172
3180
  if (!isUndefined(lastX)) {
3173
3181
  const d = getMinDistanceFrom(lastX, lastY, x1, y1, x2, y2);
3174
- radius = min(radius, min(d / 2, d / 2 * abs$4(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3182
+ radius = min(radius, min(d / 2, d / 2 * abs$5(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3175
3183
  }
3176
3184
  data.push(U$4, x1, y1, x2, y2, radius);
3177
3185
  },
@@ -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$5, L: L$6, C: C$4, Q: Q$3, Z: Z$4, N: N$2, D: D$3, X: X$2, G: G$2, F
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$a, addPoint: addPoint$1, setPoint: setPoint$3, addBounds: addBounds, toBounds: toBounds$3} = TwoPointBoundsHelper;
3384
+ const {addPointBounds: addPointBounds, copy: copy$a, addPoint: addPoint$1, setPoint: setPoint$3, addBounds: addBounds, toBounds: toBounds$2} = TwoPointBoundsHelper;
3381
3385
 
3382
3386
  const debug$d = 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$3(setPointBounds, setBounds);
3399
+ toBounds$2(setPointBounds, setBounds);
3396
3400
  },
3397
3401
  toTwoPointBounds(data, setPointBounds) {
3398
3402
  if (!data || !data.length) return setPoint$3(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;
@@ -3969,7 +3977,7 @@ const I$1 = ImageManager;
3969
3977
 
3970
3978
  const {IMAGE: IMAGE, create: create$1} = IncrementId;
3971
3979
 
3972
- const {floor: floor$2, max: max$1} = Math;
3980
+ const {floor: floor$2, max: max$2} = Math;
3973
3981
 
3974
3982
  class LeaferImage {
3975
3983
  get url() {
@@ -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) {
@@ -4058,9 +4066,10 @@ class LeaferImage {
4058
4066
  }
4059
4067
  if (data) return data;
4060
4068
  }
4061
- const canvas = Platform.origin.createCanvas(max$1(floor$2(width + (xGap || 0)), 1), max$1(floor$2(height + (yGap || 0)), 1));
4069
+ const canvas = Platform.origin.createCanvas(max$2(floor$2(width + (xGap || 0)), 1), max$2(floor$2(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$4 = LeafHelper;
4712
4721
 
4713
4722
  const {updateAllMatrix: updateAllMatrix$4, updateMatrix: updateMatrix$4, updateAllWorldOpacity: updateAllWorldOpacity, updateAllChange: updateAllChange$1, updateChange: updateChange$1} = L$4;
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$2} = BranchHelper;
5731
5741
 
5732
5742
  const {toOuterOf: toOuterOf$1, copyAndSpread: copyAndSpread$2, copy: copy$7} = BoundsHelper;
5733
5743
 
5734
- const {toBounds: toBounds$2} = PathBounds;
5744
+ const {toBounds: toBounds$1} = 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$2(data.path, b);
5816
+ if (data.__usePathBox) {
5817
+ toBounds$1(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$3, getAngle: getAngle$2, getDistance: getDistance$3, defaultPoint: defaultPoint} = PointHelper;
9088
9082
 
9089
- const {toBounds: toBounds$1} = 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$2(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$1(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$2, copy: copy$4} = MatrixHelper;
11574
11534
 
11575
- const {floor: floor$1, max: max, abs: abs$3} = Math;
11535
+ const {floor: floor$1, ceil: ceil$1, max: max$1, abs: abs$4} = Math;
11576
11536
 
11577
11537
  function createPattern(ui, paint, pixelRatio) {
11578
11538
  let {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true, paint.scaleFixed);
@@ -11582,11 +11542,9 @@ 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
- sx = abs$3(sx);
11589
- sy = abs$3(sy);
11546
+ sx = abs$4(sx);
11547
+ sy = abs$4(sy);
11590
11548
  imageMatrix = get$1();
11591
11549
  copy$4(imageMatrix, transform);
11592
11550
  scale$2(imageMatrix, 1 / sx, 1 / 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$1(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$1(floor$1(canvasWidth), 1);
11585
+ scaleY /= canvasHeight / max$1(floor$1(canvasHeight), 1);
11619
11586
  if (!imageMatrix) {
11620
11587
  imageMatrix = get$1();
11621
11588
  if (transform) copy$4(imageMatrix, transform);
11622
11589
  }
11623
11590
  scale$2(imageMatrix, 1 / scaleX, 1 / scaleY);
11624
11591
  }
11625
- if (imageMatrix) {
11626
- const canvasWidth = width + (xGap || 0), canvasHeight = height + (yGap || 0);
11627
- scale$2(imageMatrix, canvasWidth / max(floor$1(canvasWidth), 1), canvasHeight / max(floor$1(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;
@@ -12648,7 +12611,7 @@ function mergeConfigAttr() {
12648
12611
  return (target, key) => {
12649
12612
  defineKey(target, key, {
12650
12613
  get() {
12651
- const {config: config, element: element, dragPoint: dragPoint, editBox: editBox} = this, mergeConfig = Object.assign({}, config);
12614
+ const {config: config, element: element, dragPoint: dragPoint, editBox: editBox, app: app} = this, mergeConfig = Object.assign({}, config);
12652
12615
  if (element && element.editConfig) Object.assign(mergeConfig, element.editConfig);
12653
12616
  if (editBox.config) Object.assign(mergeConfig, editBox.config);
12654
12617
  if (dragPoint) {
@@ -12659,13 +12622,14 @@ function mergeConfigAttr() {
12659
12622
  isNull(mergeConfig.lockRatio) && (mergeConfig.lockRatio = true);
12660
12623
  }
12661
12624
  }
12625
+ if (isUndefined(mergeConfig.dragLimitAnimate)) mergeConfig.dragLimitAnimate = app && app.config.pointer.dragLimitAnimate;
12662
12626
  return this.mergedConfig = mergeConfig;
12663
12627
  }
12664
12628
  });
12665
12629
  };
12666
12630
  }
12667
12631
 
12668
- const {abs: abs$2} = Math;
12632
+ const {abs: abs$3} = Math;
12669
12633
 
12670
12634
  const {copy: copy$2, scale: scale$1} = MatrixHelper;
12671
12635
 
@@ -12708,7 +12672,7 @@ class Stroker extends UI {
12708
12672
  leaf = list[i];
12709
12673
  const {worldTransform: worldTransform, worldRenderBounds: worldRenderBounds} = leaf;
12710
12674
  if (worldRenderBounds.width && worldRenderBounds.height && (!bounds || bounds.hit(worldRenderBounds, options.matrix))) {
12711
- const aScaleX = abs$2(worldTransform.scaleX), aScaleY = abs$2(worldTransform.scaleY);
12675
+ const aScaleX = abs$3(worldTransform.scaleX), aScaleY = abs$3(worldTransform.scaleY);
12712
12676
  copy$2(matrix$1, worldTransform);
12713
12677
  matrix$1.half = strokeWidth % 2;
12714
12678
  if (aScaleX !== aScaleY) {
@@ -12722,7 +12686,7 @@ class Stroker extends UI {
12722
12686
  canvas.setWorld(matrix$1, options.matrix);
12723
12687
  canvas.beginPath();
12724
12688
  if (leaf.__.__useArrow) leaf.__drawPath(canvas); else leaf.__.__pathForRender ? leaf.__drawRenderPath(canvas) : leaf.__drawPathByBox(canvas);
12725
- data.strokeWidth = strokeWidth / abs$2(worldTransform.scaleX);
12689
+ data.strokeWidth = strokeWidth / abs$3(worldTransform.scaleX);
12726
12690
  }
12727
12691
  if (stroke) isString(stroke) ? Paint.stroke(stroke, this, canvas) : Paint.strokes(stroke, this, canvas);
12728
12692
  if (fill) isString(fill) ? Paint.fill(fill, this, canvas) : Paint.fills(fill, this, canvas);
@@ -13016,7 +12980,7 @@ const {topLeft: topLeft$1, top: top$1, topRight: topRight$1, right: right$2, bot
13016
12980
 
13017
12981
  const {toPoint: toPoint} = AroundHelper;
13018
12982
 
13019
- const {within: within$2} = MathHelper;
12983
+ const {within: within$3, sign: sign$1} = MathHelper;
13020
12984
 
13021
12985
  const EditDataHelper = {
13022
12986
  getScaleData(target, startBounds, direction, totalMove, lockRatio, around, flipable, scaleMode) {
@@ -13029,8 +12993,8 @@ const EditDataHelper = {
13029
12993
  }
13030
12994
  const originChangedScaleX = target.scaleX / startBounds.scaleX;
13031
12995
  const originChangedScaleY = target.scaleY / startBounds.scaleY;
13032
- const signX = originChangedScaleX < 0 ? -1 : 1;
13033
- const signY = originChangedScaleY < 0 ? -1 : 1;
12996
+ const signX = sign$1(originChangedScaleX);
12997
+ const signY = sign$1(originChangedScaleY);
13034
12998
  const changedScaleX = scaleMode ? originChangedScaleX : signX * boxBounds.width / width;
13035
12999
  const changedScaleY = scaleMode ? originChangedScaleY : signY * boxBounds.height / height;
13036
13000
  totalMove.x *= scaleMode ? originChangedScaleX : signX;
@@ -13130,14 +13094,14 @@ const EditDataHelper = {
13130
13094
  }
13131
13095
  if (useScaleX && widthRange) {
13132
13096
  const nowWidth = boxBounds.width * target.scaleX;
13133
- scaleX = within$2(nowWidth * scaleX, widthRange) / nowWidth;
13097
+ scaleX = within$3(nowWidth * scaleX, widthRange) / nowWidth;
13134
13098
  }
13135
13099
  if (useScaleY && heightRange) {
13136
13100
  const nowHeight = boxBounds.height * target.scaleY;
13137
- scaleY = within$2(nowHeight * scaleY, heightRange) / nowHeight;
13101
+ scaleY = within$3(nowHeight * scaleY, heightRange) / nowHeight;
13138
13102
  }
13139
- if (useScaleX && Math.abs(scaleX * worldBoxBounds.width) < 1) scaleX = (scaleX < 0 ? -1 : 1) / worldBoxBounds.width;
13140
- if (useScaleY && Math.abs(scaleY * worldBoxBounds.height) < 1) scaleY = (scaleY < 0 ? -1 : 1) / worldBoxBounds.height;
13103
+ if (useScaleX && Math.abs(scaleX * worldBoxBounds.width) < 1) scaleX = sign$1(scaleX) / worldBoxBounds.width;
13104
+ if (useScaleY && Math.abs(scaleY * worldBoxBounds.height) < 1) scaleY = sign$1(scaleY) / worldBoxBounds.height;
13141
13105
  if (lockRatio && scaleX !== scaleY) scaleY = scaleX = Math.min(scaleX, scaleY);
13142
13106
  return {
13143
13107
  origin: origin,
@@ -13639,7 +13603,7 @@ class EditBox extends Group {
13639
13603
  if (pointType && pointType.includes("resize")) ResizeEvent.resizingKeys = editor.leafList.keys;
13640
13604
  }
13641
13605
  onDragEnd(e) {
13642
- if (this.moving) this.transformTool.onMove(e);
13606
+ if (this.moving && this.mergeConfig.dragLimitAnimate && this.target.dragBounds) this.transformTool.onMove(e);
13643
13607
  this.dragPoint = null;
13644
13608
  this.resetDoing();
13645
13609
  const {name: name, pointType: pointType} = e.current;
@@ -14159,9 +14123,8 @@ EditorSkewEvent.SKEW = "editor.skew";
14159
14123
 
14160
14124
  class TransformTool {
14161
14125
  onMove(e) {
14162
- const {target: target, mergeConfig: mergeConfig, dragStartData: dragStartData, app: app} = this.editBox;
14126
+ const {target: target, mergeConfig: mergeConfig, dragStartData: dragStartData} = this.editBox;
14163
14127
  let move, {dragLimitAnimate: dragLimitAnimate} = mergeConfig;
14164
- if (isUndefined(dragLimitAnimate)) dragLimitAnimate = app && app.config.pointer.dragLimitAnimate;
14165
14128
  const isMoveEnd = e.type === MoveEvent.END || e.type === DragEvent.END;
14166
14129
  const axisDrag = isString(target.draggable);
14167
14130
  const checkLimitMove = !dragLimitAnimate || isMoveEnd || axisDrag;
@@ -15570,6 +15533,8 @@ const MultiTouchHelper = {
15570
15533
  }
15571
15534
  };
15572
15535
 
15536
+ const {abs: abs$2, max: max} = Math, {sign: sign, within: within$2} = MathHelper;
15537
+
15573
15538
  const WheelEventHelper = {
15574
15539
  getMove(event, config) {
15575
15540
  let {moveSpeed: moveSpeed} = config;
@@ -15578,8 +15543,9 @@ const WheelEventHelper = {
15578
15543
  deltaX = deltaY;
15579
15544
  deltaY = 0;
15580
15545
  }
15581
- if (deltaX > 50) deltaX = Math.max(50, deltaX / 3);
15582
- if (deltaY > 50) deltaY = Math.max(50, deltaY / 3);
15546
+ const absX = abs$2(deltaX), absY = abs$2(deltaY);
15547
+ if (absX > 50) deltaX = max(50, absX / 3) * sign(deltaX);
15548
+ if (absY > 50) deltaY = max(50, absY / 3) * sign(deltaY);
15583
15549
  return {
15584
15550
  x: -deltaX * moveSpeed * 2,
15585
15551
  y: -deltaY * moveSpeed * 2
@@ -15597,11 +15563,10 @@ const WheelEventHelper = {
15597
15563
  zoom = !event.shiftKey && (event.metaKey || event.ctrlKey);
15598
15564
  }
15599
15565
  if (zoom) {
15600
- zoomSpeed = MathHelper.within(zoomSpeed, 0, 1);
15566
+ zoomSpeed = within$2(zoomSpeed, 0, 1);
15601
15567
  const min = event.deltaY ? config.delta.y : config.delta.x;
15602
- scale = 1 - delta / (min * 4) * zoomSpeed;
15603
- if (scale < .5) scale = .5;
15604
- if (scale >= 1.5) scale = 1.5;
15568
+ const absScale = within$2(1 - abs$2(delta) / (min * 4) * zoomSpeed, .5, 2);
15569
+ scale = delta > 0 ? absScale : 1 / absScale;
15605
15570
  }
15606
15571
  return scale;
15607
15572
  }
@@ -16156,6 +16121,9 @@ let Arrow = class Arrow extends Line {
16156
16121
  super(data);
16157
16122
  this.__.__useArrow = true;
16158
16123
  }
16124
+ static registerArrow(name, data) {
16125
+ PathArrow.register(name, data);
16126
+ }
16159
16127
  };
16160
16128
 
16161
16129
  __decorate([ dataProcessor(ArrowData) ], Arrow.prototype, "__", void 0);
@@ -16337,9 +16305,18 @@ const arrows = {
16337
16305
  mark: mark
16338
16306
  };
16339
16307
 
16340
- function getArrowPath(ui, arrow, from, to, scale, connectOffset, hasDashPattern) {
16308
+ function getArrowPath(ui, arrow, from, to, size, connectOffset, hasDashPattern) {
16309
+ let pathData, scale;
16341
16310
  const {strokeCap: strokeCap, strokeJoin: strokeJoin} = ui.__;
16342
- const {offset: offset, connect: connect, path: path, dashPath: dashPath} = isObject(arrow) ? arrow : arrows[arrow];
16311
+ if (isObject(arrow)) {
16312
+ if (arrow.type) {
16313
+ scale = arrow.scale;
16314
+ pathData = arrows[arrow.type];
16315
+ } else pathData = arrow;
16316
+ } else {
16317
+ pathData = arrows[arrow];
16318
+ }
16319
+ const {offset: offset, connect: connect, path: path, dashPath: dashPath} = pathData;
16343
16320
  let connectX = connect ? connect.x : 0;
16344
16321
  let offsetX = offset ? offset.x : 0;
16345
16322
  const data = [ ...path ];
@@ -16348,9 +16325,10 @@ function getArrowPath(ui, arrow, from, to, scale, connectOffset, hasDashPattern)
16348
16325
  if (offset) {
16349
16326
  if (strokeJoin === "round" && offset.roundJoin) offsetX += offset.roundJoin; else if (strokeJoin === "bevel" && offset.bevelJoin) offsetX += offset.bevelJoin;
16350
16327
  }
16328
+ if (scale) layout$2(data, 0, 0, scale, scale);
16351
16329
  if (offsetX) layout$2(data, offsetX, 0);
16352
- layout$2(data, to.x, to.y, scale, scale, getAngle(from, to));
16353
- connectOffset.x = (connectX + offsetX) * scale;
16330
+ layout$2(data, to.x, to.y, size, size, getAngle(from, to));
16331
+ connectOffset.x = (connectX + offsetX) * size;
16354
16332
  return data;
16355
16333
  }
16356
16334
 
@@ -16366,8 +16344,9 @@ const last = {}, now = {};
16366
16344
 
16367
16345
  const PathArrowModule = {
16368
16346
  list: arrows,
16369
- addArrows(ui, changeRenderPath) {
16370
- const {startArrow: startArrow, endArrow: endArrow, strokeWidth: strokeWidth, dashPattern: dashPattern, __pathForRender: data} = ui.__;
16347
+ addArrows(ui) {
16348
+ const {startArrow: startArrow, endArrow: endArrow, strokeWidth: strokeWidth, dashPattern: dashPattern, __pathForRender: data, cornerRadius: cornerRadius} = ui.__;
16349
+ const clonePathForArrow = !cornerRadius;
16371
16350
  let command, i = 0, len = data.length, count = 0, useStartArrow = startArrow && startArrow !== "none";
16372
16351
  while (i < len) {
16373
16352
  command = data[i];
@@ -16382,12 +16361,12 @@ const PathArrowModule = {
16382
16361
  break;
16383
16362
 
16384
16363
  case C$1:
16385
- if (count === 1 || i + 7 === len) copyPoints(data, last, now, i + 3);
16364
+ if (count === 1 || i + 7 >= len - 3) copyPoints(data, last, now, i + 3);
16386
16365
  i += 7;
16387
16366
  break;
16388
16367
 
16389
16368
  case Q:
16390
- if (count === 1 || i + 5 === len) copyPoints(data, last, now, i + 1);
16369
+ if (count === 1 || i + 5 >= len - 3) copyPoints(data, last, now, i + 1);
16391
16370
  i += 5;
16392
16371
  break;
16393
16372
 
@@ -16423,7 +16402,13 @@ const PathArrowModule = {
16423
16402
  break;
16424
16403
 
16425
16404
  case U:
16426
- if (count === 1 || i + 6 === len) copyPoints(data, last, now, i + 1);
16405
+ if (count === 1 || i + 6 >= len - 3) {
16406
+ copyPoints(data, last, now, i + 1);
16407
+ if (i + 6 !== len) {
16408
+ now.x -= (now.x - last.x) / 10;
16409
+ now.y -= (now.y - last.y) / 10;
16410
+ }
16411
+ }
16427
16412
  i += 6;
16428
16413
  break;
16429
16414
  }
@@ -16431,7 +16416,7 @@ const PathArrowModule = {
16431
16416
  if (count === 1 && command !== M$1) return;
16432
16417
  if (count === 2 && useStartArrow) copy(second, command === L$1 ? now : last);
16433
16418
  if (i === len) {
16434
- const path = ui.__.__pathForRender = changeRenderPath ? [ ...data ] : data;
16419
+ const path = ui.__.__pathForRender = clonePathForArrow ? [ ...data ] : data;
16435
16420
  const pathForArrow = ui.__.__pathForArrow = [];
16436
16421
  if (useStartArrow) {
16437
16422
  const startArrowPath = getArrowPath(ui, startArrow, second, first, strokeWidth, connectPoint, !!dashPattern);
@@ -16472,6 +16457,12 @@ const PathArrowModule = {
16472
16457
  copy(last, now);
16473
16458
  }
16474
16459
  }
16460
+ },
16461
+ register(name, data) {
16462
+ this.list[name] = data;
16463
+ },
16464
+ get(name) {
16465
+ return this.list[name];
16475
16466
  }
16476
16467
  };
16477
16468
 
@@ -18037,6 +18028,18 @@ UI.addAttr("transition", true, dataType);
18037
18028
 
18038
18029
  UI.addAttr("transitionOut", undefined, dataType);
18039
18030
 
18031
+ ui$3.set = function(data, transition) {
18032
+ if (data) {
18033
+ if (transition) {
18034
+ if (transition === "temp") {
18035
+ this.lockNormalStyle = true;
18036
+ Object.assign(this, data);
18037
+ this.lockNormalStyle = false;
18038
+ } else this.animate(data, transition);
18039
+ } else Object.assign(this, data);
18040
+ }
18041
+ };
18042
+
18040
18043
  ui$3.animate = function(keyframe, options, kill, isTemp) {
18041
18044
  if (isUndefined(keyframe)) return this.__animate;
18042
18045
  const isAnimationList = isArray(keyframe) && !options && kill;
@@ -19353,4 +19356,4 @@ Object.assign(Filter, {
19353
19356
  }
19354
19357
  });
19355
19358
 
19356
- export { AlignHelper, Animate, AnimateEasing, AnimateEvent, AnimateList, Answer, App, AroundHelper, Arrow, ArrowData, 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, EditBox, EditDataHelper, EditPoint, EditSelect, EditSelectHelper, EditTool, EditToolCreator, Editor, EditorEvent, EditorGroupEvent, EditorHelper, EditorMoveEvent, EditorRotateEvent, EditorScaleEvent, EditorSkewEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, Finder, Flow, Frame, FrameData, Group, GroupData, HTMLText, HTMLTextData, HighBezierHelper, HighCurveHelper, HitCanvasManager, Image, ImageData, ImageEvent, ImageManager, IncrementId, InnerEditor, InnerEditorEvent, InteractionBase, InteractionHelper, KeyEvent, Keyboard, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferImage, LeaferTypeCreator, Line, LineData, LineEditTool, MathHelper, Matrix, MatrixHelper, MoveEvent, MultiTouchHelper, MyDragEvent, MyImage, MyPointerEvent, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathArrowModule, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathMatrixHelper, PathNumberCommandLengthMap, PathNumberCommandMap, PathScaler, Pen, PenData, Picker, Platform, Plugin, Point, PointHelper, PointerButton, PointerEvent, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, Resource, Robot, RobotData, RotateEvent, Run, ScrollBar, SelectArea, Selector, Star, StarData, State, StringNumberMap, Stroker, SwipeEvent, TaskItem, TaskProcessor, Text, TextConvert, TextData, TextEditor, TransformTool, Transformer, Transition, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIEvent, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, WheelEventHelper, ZoomEvent, addViewport, addViewportConfig, affectRenderBoundsType, affectStrokeBoundsType, arrowType, 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, motionPathType, naturalBoundsType, opacityType, pathInputType, pathType, pen, positionType, registerEditTool, registerInnerEditor, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleResize, scaleResizeFontSize, scaleResizeGroup, scaleResizePath, scaleResizePoints, scaleType, scrollType, sortType, stateStyleType, stateType, strokeType, surfaceType, tempBounds$1 as tempBounds, tempMatrix$1 as tempMatrix, tempPoint$3 as tempPoint, tryToNumber, useCanvas, useModule, version, visibleType, zoomLayerType };
19359
+ export { AlignHelper, Animate, AnimateEasing, AnimateEvent, AnimateList, Answer, App, AroundHelper, Arrow, ArrowData, 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, EditBox, EditDataHelper, EditPoint, EditSelect, EditSelectHelper, EditTool, EditToolCreator, Editor, EditorEvent, EditorGroupEvent, EditorHelper, EditorMoveEvent, EditorRotateEvent, EditorScaleEvent, EditorSkewEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, Finder, Flow, Frame, FrameData, Group, GroupData, HTMLText, HTMLTextData, HighBezierHelper, HighCurveHelper, HitCanvasManager, Image, ImageData, ImageEvent, ImageManager, IncrementId, InnerEditor, InnerEditorEvent, InteractionBase, InteractionHelper, KeyEvent, Keyboard, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferImage, LeaferTypeCreator, Line, LineData, LineEditTool, MathHelper, Matrix, MatrixHelper, MoveEvent, MultiTouchHelper, MyDragEvent, MyImage, MyPointerEvent, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathArrowModule, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathMatrixHelper, PathNumberCommandLengthMap, PathNumberCommandMap, PathScaler, Pen, PenData, Picker, Platform, Plugin, Point, PointHelper, PointerButton, PointerEvent, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, Resource, Robot, RobotData, RotateEvent, Run, ScrollBar, SelectArea, Selector, Star, StarData, State, StringNumberMap, Stroker, SwipeEvent, TaskItem, TaskProcessor, Text, TextConvert, TextData, TextEditor, TransformTool, Transformer, Transition, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIEvent, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, WheelEventHelper, ZoomEvent, addViewport, addViewportConfig, affectRenderBoundsType, affectStrokeBoundsType, arrowType, 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, motionPathType, naturalBoundsType, opacityType, path, pathInputType, pathType, pen, positionType, registerEditTool, registerInnerEditor, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleResize, scaleResizeFontSize, scaleResizeGroup, scaleResizePath, scaleResizePoints, scaleType, scrollType, sortType, stateStyleType, stateType, strokeType, surfaceType, tempBounds$1 as tempBounds, tempMatrix$1 as tempMatrix, tempPoint$3 as tempPoint, tryToNumber, useCanvas, useModule, version, visibleType, zoomLayerType };