@leafer-draw/miniapp 1.0.0 → 1.0.2

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.
@@ -48,6 +48,8 @@ const I$1 = IncrementId;
48
48
  const { round, pow: pow$1, PI: PI$4 } = Math;
49
49
  const MathHelper = {
50
50
  within(value, min, max) {
51
+ if (typeof min === 'object')
52
+ max = min.max, min = min.min;
51
53
  if (min !== undefined && value < min)
52
54
  value = min;
53
55
  if (max !== undefined && value > max)
@@ -109,6 +111,19 @@ const MathHelper = {
109
111
  const a = maxLength ? pow$1(10, maxLength) : 1000000000000;
110
112
  num = round(num * a) / a;
111
113
  return num === -0 ? 0 : num;
114
+ },
115
+ getScaleData(scale, size, originSize, scaleData) {
116
+ if (!scaleData)
117
+ scaleData = {};
118
+ if (size) {
119
+ scaleData.scaleX = (typeof size === 'number' ? size : size.width) / originSize.width;
120
+ scaleData.scaleY = (typeof size === 'number' ? size : size.height) / originSize.height;
121
+ }
122
+ else if (scale) {
123
+ scaleData.scaleX = typeof scale === 'number' ? scale : scale.x;
124
+ scaleData.scaleY = typeof scale === 'number' ? scale : scale.y;
125
+ }
126
+ return scaleData;
112
127
  }
113
128
  };
114
129
  const OneRadian = PI$4 / 180;
@@ -150,10 +165,10 @@ const MatrixHelper = {
150
165
  t.e += x;
151
166
  t.f += y;
152
167
  },
153
- translateInner(t, x, y, isMoveOrigin) {
168
+ translateInner(t, x, y, hasOrigin) {
154
169
  t.e += t.a * x + t.c * y;
155
170
  t.f += t.b * x + t.d * y;
156
- if (isMoveOrigin)
171
+ if (hasOrigin)
157
172
  t.e -= x, t.f -= y;
158
173
  },
159
174
  scale(t, scaleX, scaleY = scaleX) {
@@ -312,7 +327,7 @@ const MatrixHelper = {
312
327
  to.y -= (f * a - e * b) * s;
313
328
  }
314
329
  },
315
- setLayout(t, layout, origin, bcChanged) {
330
+ setLayout(t, layout, origin, around, bcChanged) {
316
331
  const { x, y, scaleX, scaleY } = layout;
317
332
  if (bcChanged === undefined)
318
333
  bcChanged = layout.rotation || layout.skewX || layout.skewY;
@@ -344,10 +359,10 @@ const MatrixHelper = {
344
359
  }
345
360
  t.e = x;
346
361
  t.f = y;
347
- if (origin)
348
- M$6.translateInner(t, -origin.x, -origin.y, true);
362
+ if (origin = origin || around)
363
+ M$6.translateInner(t, -origin.x, -origin.y, !around);
349
364
  },
350
- getLayout(t, origin, firstSkewY) {
365
+ getLayout(t, origin, around, firstSkewY) {
351
366
  const { a, b, c, d, e, f } = t;
352
367
  let x = e, y = f, scaleX, scaleY, rotation, skewX, skewY;
353
368
  if (b || c) {
@@ -376,9 +391,11 @@ const MatrixHelper = {
376
391
  scaleY = d;
377
392
  rotation = skewX = skewY = 0;
378
393
  }
379
- if (origin) {
394
+ if (origin = around || origin) {
380
395
  x += origin.x * a + origin.y * c;
381
396
  y += origin.x * b + origin.y * d;
397
+ if (!around)
398
+ x -= origin.x, y -= origin.y;
382
399
  }
383
400
  return { x, y, scaleX, scaleY, rotation, skewX, skewY };
384
401
  },
@@ -405,7 +422,7 @@ const MatrixHelper = {
405
422
  };
406
423
  const M$6 = MatrixHelper;
407
424
 
408
- const { toInnerPoint: toInnerPoint$2, toOuterPoint: toOuterPoint$2 } = MatrixHelper;
425
+ const { toInnerPoint: toInnerPoint$2, toOuterPoint: toOuterPoint$3 } = MatrixHelper;
409
426
  const { sin: sin$4, cos: cos$4, abs: abs$4, sqrt: sqrt$2, atan2: atan2$2, min: min$1, PI: PI$3 } = Math;
410
427
  const PointHelper = {
411
428
  defaultPoint: getPointData(),
@@ -461,7 +478,7 @@ const PointHelper = {
461
478
  tempToOuterOf(t, matrix) {
462
479
  const { tempPoint: temp } = P$5;
463
480
  copy$a(temp, t);
464
- toOuterPoint$2(matrix, temp, temp);
481
+ toOuterPoint$3(matrix, temp, temp);
465
482
  return temp;
466
483
  },
467
484
  tempToInnerRadiusPointOf(t, matrix) {
@@ -480,7 +497,7 @@ const PointHelper = {
480
497
  toInnerPoint$2(matrix, t, to);
481
498
  },
482
499
  toOuterOf(t, matrix, to) {
483
- toOuterPoint$2(matrix, t, to);
500
+ toOuterPoint$3(matrix, t, to);
484
501
  },
485
502
  getCenter(t, to) {
486
503
  return { x: t.x + (to.x - t.x) / 2, y: t.y + (to.y - t.y) / 2 };
@@ -706,12 +723,12 @@ class Matrix {
706
723
  toInnerPoint(outer, to, distance) {
707
724
  MatrixHelper.toInnerPoint(this, outer, to, distance);
708
725
  }
709
- setLayout(data, origin) {
710
- MatrixHelper.setLayout(this, data, origin);
726
+ setLayout(data, origin, around) {
727
+ MatrixHelper.setLayout(this, data, origin, around);
711
728
  return this;
712
729
  }
713
- getLayout(origin, firstSkewY) {
714
- return MatrixHelper.getLayout(this, origin, firstSkewY);
730
+ getLayout(origin, around, firstSkewY) {
731
+ return MatrixHelper.getLayout(this, origin, around, firstSkewY);
715
732
  }
716
733
  withScale(scaleX, scaleY) {
717
734
  return MatrixHelper.withScale(this, scaleX, scaleY);
@@ -760,7 +777,7 @@ const TwoPointBoundsHelper = {
760
777
  const { addPoint: addPoint$4 } = TwoPointBoundsHelper;
761
778
 
762
779
  const { tempPointBounds: tempPointBounds$1, setPoint: setPoint$3, addPoint: addPoint$3, toBounds: toBounds$4 } = TwoPointBoundsHelper;
763
- const { toOuterPoint: toOuterPoint$1 } = MatrixHelper;
780
+ const { toOuterPoint: toOuterPoint$2 } = MatrixHelper;
764
781
  const { float, fourNumber } = MathHelper;
765
782
  const { floor, ceil: ceil$2 } = Math;
766
783
  let right$1, bottom$1, boundsRight, boundsBottom;
@@ -780,17 +797,24 @@ const BoundsHelper = {
780
797
  t.width = bounds.width;
781
798
  t.height = bounds.height;
782
799
  },
783
- copyAndSpread(t, bounds, spread, isShrink) {
800
+ copyAndSpread(t, bounds, spread, isShrink, side) {
801
+ const { x, y, width, height } = bounds;
784
802
  if (spread instanceof Array) {
785
803
  const four = fourNumber(spread);
786
804
  isShrink
787
- ? B.set(t, bounds.x + four[3], bounds.y + four[0], bounds.width - four[1] - four[3], bounds.height - four[2] - four[0])
788
- : B.set(t, bounds.x - four[3], bounds.y - four[0], bounds.width + four[1] + four[3], bounds.height + four[2] + four[0]);
805
+ ? B.set(t, x + four[3], y + four[0], width - four[1] - four[3], height - four[2] - four[0])
806
+ : B.set(t, x - four[3], y - four[0], width + four[1] + four[3], height + four[2] + four[0]);
789
807
  }
790
808
  else {
791
809
  if (isShrink)
792
810
  spread = -spread;
793
- B.set(t, bounds.x - spread, bounds.y - spread, bounds.width + spread * 2, bounds.height + spread * 2);
811
+ B.set(t, x - spread, y - spread, width + spread * 2, height + spread * 2);
812
+ }
813
+ if (side) {
814
+ if (side === 'width')
815
+ t.y = y, t.height = height;
816
+ else
817
+ t.x = x, t.width = width;
794
818
  }
795
819
  },
796
820
  minX(t) { return t.width > 0 ? t.x : t.x + t.width; },
@@ -867,16 +891,16 @@ const BoundsHelper = {
867
891
  else {
868
892
  point.x = t.x;
869
893
  point.y = t.y;
870
- toOuterPoint$1(matrix, point, toPoint$5);
894
+ toOuterPoint$2(matrix, point, toPoint$5);
871
895
  setPoint$3(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
872
896
  point.x = t.x + t.width;
873
- toOuterPoint$1(matrix, point, toPoint$5);
897
+ toOuterPoint$2(matrix, point, toPoint$5);
874
898
  addPoint$3(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
875
899
  point.y = t.y + t.height;
876
- toOuterPoint$1(matrix, point, toPoint$5);
900
+ toOuterPoint$2(matrix, point, toPoint$5);
877
901
  addPoint$3(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
878
902
  point.x = t.x;
879
- toOuterPoint$1(matrix, point, toPoint$5);
903
+ toOuterPoint$2(matrix, point, toPoint$5);
880
904
  addPoint$3(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
881
905
  toBounds$4(tempPointBounds$1, to);
882
906
  }
@@ -890,16 +914,16 @@ const BoundsHelper = {
890
914
  const scale = Math.min(baseScale, Math.min(t.width / put.width, t.height / put.height));
891
915
  return new Matrix(scale, 0, 0, scale, -put.x * scale, -put.y * scale);
892
916
  },
893
- getSpread(t, spread) {
917
+ getSpread(t, spread, side) {
894
918
  const n = {};
895
- B.copyAndSpread(n, t, spread);
919
+ B.copyAndSpread(n, t, spread, false, side);
896
920
  return n;
897
921
  },
898
- spread(t, spread) {
899
- B.copyAndSpread(t, t, spread);
922
+ spread(t, spread, side) {
923
+ B.copyAndSpread(t, t, spread, false, side);
900
924
  },
901
- shrink(t, shrink) {
902
- B.copyAndSpread(t, t, shrink, true);
925
+ shrink(t, shrink, side) {
926
+ B.copyAndSpread(t, t, shrink, true, side);
903
927
  },
904
928
  ceil(t) {
905
929
  const { x, y } = t;
@@ -1082,12 +1106,12 @@ class Bounds {
1082
1106
  getFitMatrix(put, baseScale) {
1083
1107
  return BoundsHelper.getFitMatrix(this, put, baseScale);
1084
1108
  }
1085
- spread(fourNumber) {
1086
- BoundsHelper.spread(this, fourNumber);
1109
+ spread(fourNumber, side) {
1110
+ BoundsHelper.spread(this, fourNumber, side);
1087
1111
  return this;
1088
1112
  }
1089
- shrink(fourNumber) {
1090
- BoundsHelper.shrink(this, fourNumber);
1113
+ shrink(fourNumber, side) {
1114
+ BoundsHelper.shrink(this, fourNumber, side);
1091
1115
  return this;
1092
1116
  }
1093
1117
  ceil() {
@@ -1999,7 +2023,7 @@ class LeaferCanvasBase extends Canvas$1 {
1999
2023
  DataHelper.copyAttrs(this.size, size, canvasSizeAttrs);
2000
2024
  this.size.pixelRatio || (this.size.pixelRatio = 1);
2001
2025
  this.bounds = new Bounds(0, 0, this.width, this.height);
2002
- if (!this.unreal) {
2026
+ if (this.context && !this.unreal) {
2003
2027
  this.updateViewSize();
2004
2028
  this.smooth = this.config.smooth;
2005
2029
  }
@@ -2172,7 +2196,7 @@ class LeaferCanvasBase extends Canvas$1 {
2172
2196
  this.manager ? this.manager.recycle(this) : this.destroy();
2173
2197
  }
2174
2198
  }
2175
- updateRender() { }
2199
+ updateRender(_bounds) { }
2176
2200
  unrealCanvas() { }
2177
2201
  destroy() {
2178
2202
  this.manager = this.view = this.parentView = null;
@@ -2904,60 +2928,75 @@ class PathCreator {
2904
2928
  }
2905
2929
  beginPath() {
2906
2930
  beginPath(this.__path);
2931
+ this.paint();
2907
2932
  return this;
2908
2933
  }
2909
2934
  moveTo(x, y) {
2910
2935
  moveTo$4(this.__path, x, y);
2936
+ this.paint();
2911
2937
  return this;
2912
2938
  }
2913
2939
  lineTo(x, y) {
2914
2940
  lineTo$3(this.__path, x, y);
2941
+ this.paint();
2915
2942
  return this;
2916
2943
  }
2917
2944
  bezierCurveTo(x1, y1, x2, y2, x, y) {
2918
2945
  bezierCurveTo(this.__path, x1, y1, x2, y2, x, y);
2946
+ this.paint();
2919
2947
  return this;
2920
2948
  }
2921
2949
  quadraticCurveTo(x1, y1, x, y) {
2922
2950
  quadraticCurveTo(this.__path, x1, y1, x, y);
2951
+ this.paint();
2923
2952
  return this;
2924
2953
  }
2925
2954
  closePath() {
2926
2955
  closePath$3(this.__path);
2956
+ this.paint();
2927
2957
  return this;
2928
2958
  }
2929
2959
  rect(x, y, width, height) {
2930
2960
  rect$1(this.__path, x, y, width, height);
2961
+ this.paint();
2931
2962
  return this;
2932
2963
  }
2933
2964
  roundRect(x, y, width, height, cornerRadius) {
2934
2965
  roundRect$1(this.__path, x, y, width, height, cornerRadius);
2966
+ this.paint();
2935
2967
  return this;
2936
2968
  }
2937
2969
  ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) {
2938
2970
  ellipse$2(this.__path, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
2971
+ this.paint();
2939
2972
  return this;
2940
2973
  }
2941
2974
  arc(x, y, radius, startAngle, endAngle, anticlockwise) {
2942
2975
  arc$1(this.__path, x, y, radius, startAngle, endAngle, anticlockwise);
2976
+ this.paint();
2943
2977
  return this;
2944
2978
  }
2945
2979
  arcTo(x1, y1, x2, y2, radius) {
2946
2980
  arcTo$2(this.__path, x1, y1, x2, y2, radius);
2981
+ this.paint();
2947
2982
  return this;
2948
2983
  }
2949
2984
  drawEllipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) {
2950
2985
  drawEllipse(this.__path, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
2986
+ this.paint();
2951
2987
  return this;
2952
2988
  }
2953
2989
  drawArc(x, y, radius, startAngle, endAngle, anticlockwise) {
2954
2990
  drawArc(this.__path, x, y, radius, startAngle, endAngle, anticlockwise);
2991
+ this.paint();
2955
2992
  return this;
2956
2993
  }
2957
2994
  drawPoints(points, curve, close) {
2958
2995
  drawPoints$2(this.__path, points, curve, close);
2996
+ this.paint();
2959
2997
  return this;
2960
2998
  }
2999
+ paint() { }
2961
3000
  }
2962
3001
 
2963
3002
  const { M: M$2, L: L$3, C: C$2, Q: Q$1, Z: Z$2, N: N$1, D: D$1, X: X$1, G: G$1, F: F$2, O: O$1, P: P$1, U: U$1 } = PathCommandMap;
@@ -3979,7 +4018,7 @@ function registerUIEvent() {
3979
4018
  };
3980
4019
  }
3981
4020
 
3982
- const { copy: copy$6, toInnerPoint: toInnerPoint$1, scaleOfOuter: scaleOfOuter$2, rotateOfOuter: rotateOfOuter$2, skewOfOuter, multiplyParent: multiplyParent$2, divideParent, getLayout } = MatrixHelper;
4021
+ const { copy: copy$6, toInnerPoint: toInnerPoint$1, toOuterPoint: toOuterPoint$1, scaleOfOuter: scaleOfOuter$2, rotateOfOuter: rotateOfOuter$2, skewOfOuter, multiplyParent: multiplyParent$2, divideParent, getLayout } = MatrixHelper;
3983
4022
  const matrix = {};
3984
4023
  const LeafHelper = {
3985
4024
  updateAllMatrix(leaf, checkAutoLayout, waitAutoLayout) {
@@ -4044,10 +4083,9 @@ const LeafHelper = {
4044
4083
  }
4045
4084
  return true;
4046
4085
  },
4047
- moveWorld(t, x, y = 0) {
4086
+ moveWorld(t, x, y = 0, isInnerPoint) {
4048
4087
  const local = typeof x === 'object' ? Object.assign({}, x) : { x, y };
4049
- if (t.parent)
4050
- toInnerPoint$1(t.parent.worldTransform, local, local, true);
4088
+ isInnerPoint ? toOuterPoint$1(t.localTransform, local, local, true) : (t.parent && toInnerPoint$1(t.parent.worldTransform, local, local, true));
4051
4089
  L.moveLocal(t, local.x, local.y);
4052
4090
  },
4053
4091
  moveLocal(t, x, y = 0) {
@@ -4066,8 +4104,13 @@ const LeafHelper = {
4066
4104
  zoomOfLocal(t, origin, scaleX, scaleY = scaleX, resize) {
4067
4105
  copy$6(matrix, t.__localMatrix);
4068
4106
  scaleOfOuter$2(matrix, origin, scaleX, scaleY);
4069
- moveByMatrix(t, matrix);
4070
- t.scaleResize(scaleX, scaleY, resize !== true);
4107
+ if (t.origin || t.around) {
4108
+ L.setTransform(t, matrix, resize);
4109
+ }
4110
+ else {
4111
+ moveByMatrix(t, matrix);
4112
+ t.scaleResize(scaleX, scaleY, resize !== true);
4113
+ }
4071
4114
  },
4072
4115
  rotateOfWorld(t, origin, angle) {
4073
4116
  L.rotateOfLocal(t, getTempLocal(t, origin), angle);
@@ -4075,8 +4118,13 @@ const LeafHelper = {
4075
4118
  rotateOfLocal(t, origin, angle) {
4076
4119
  copy$6(matrix, t.__localMatrix);
4077
4120
  rotateOfOuter$2(matrix, origin, angle);
4078
- moveByMatrix(t, matrix);
4079
- t.rotation = MathHelper.formatRotation(t.rotation + angle);
4121
+ if (t.origin || t.around) {
4122
+ L.setTransform(t, matrix);
4123
+ }
4124
+ else {
4125
+ moveByMatrix(t, matrix);
4126
+ t.rotation = MathHelper.formatRotation(t.rotation + angle);
4127
+ }
4080
4128
  },
4081
4129
  skewOfWorld(t, origin, skewX, skewY, resize) {
4082
4130
  L.skewOfLocal(t, getTempLocal(t, origin), skewX, skewY, resize);
@@ -4099,7 +4147,7 @@ const LeafHelper = {
4099
4147
  L.setTransform(t, matrix, resize);
4100
4148
  },
4101
4149
  setTransform(t, transform, resize) {
4102
- const layout = getLayout(transform);
4150
+ const layout = getLayout(transform, t.origin && L.getInnerOrigin(t, t.origin), t.around && L.getInnerOrigin(t, t.around));
4103
4151
  if (resize) {
4104
4152
  const scaleX = layout.scaleX / t.scaleX;
4105
4153
  const scaleY = layout.scaleY / t.scaleY;
@@ -4112,13 +4160,19 @@ const LeafHelper = {
4112
4160
  t.set(layout);
4113
4161
  }
4114
4162
  },
4163
+ getFlipTransform(t, axis) {
4164
+ const m = getMatrixData();
4165
+ const sign = axis === 'x' ? 1 : -1;
4166
+ scaleOfOuter$2(m, L.getLocalOrigin(t, 'center'), -1 * sign, 1 * sign);
4167
+ return m;
4168
+ },
4115
4169
  getLocalOrigin(t, origin) {
4116
4170
  return PointHelper.tempToOuterOf(L.getInnerOrigin(t, origin), t.localTransform);
4117
4171
  },
4118
4172
  getInnerOrigin(t, origin) {
4119
- if (typeof origin === 'string')
4120
- AroundHelper.toPoint(origin, t.boxBounds, origin = {});
4121
- return origin;
4173
+ const innerOrigin = {};
4174
+ AroundHelper.toPoint(origin, t.boxBounds, innerOrigin);
4175
+ return innerOrigin;
4122
4176
  },
4123
4177
  getRelativeWorld(t, relative, temp) {
4124
4178
  copy$6(matrix, t.worldTransform);
@@ -4545,7 +4599,10 @@ const LeafEventer = {
4545
4599
  on(type, listener, options) {
4546
4600
  let capture, once;
4547
4601
  if (options) {
4548
- if (typeof options === 'boolean') {
4602
+ if (options === 'once') {
4603
+ once = true;
4604
+ }
4605
+ else if (typeof options === 'boolean') {
4549
4606
  capture = options;
4550
4607
  }
4551
4608
  else {
@@ -4576,7 +4633,7 @@ const LeafEventer = {
4576
4633
  if (listener) {
4577
4634
  let capture;
4578
4635
  if (options)
4579
- capture = typeof options === 'boolean' ? options : options.capture;
4636
+ capture = typeof options === 'boolean' ? options : (options === 'once' ? false : options.capture);
4580
4637
  let events, index;
4581
4638
  const map = __getListenerMap(this, capture);
4582
4639
  typeList.forEach(type => {
@@ -4878,7 +4935,7 @@ const LeafMatrix = {
4878
4935
  const layout = this.__layout, local = this.__local, data = this.__;
4879
4936
  if (layout.affectScaleOrRotation) {
4880
4937
  if (layout.scaleChanged || layout.rotationChanged) {
4881
- setLayout(local, data, null, layout.affectRotation);
4938
+ setLayout(local, data, null, null, layout.affectRotation);
4882
4939
  layout.scaleChanged = layout.rotationChanged = false;
4883
4940
  }
4884
4941
  }
@@ -4886,7 +4943,7 @@ const LeafMatrix = {
4886
4943
  local.f = data.y + data.offsetY;
4887
4944
  if (data.around || data.origin) {
4888
4945
  toPoint$3(data.around || data.origin, layout.boxBounds, tempPoint$1);
4889
- translateInner(local, -tempPoint$1.x, -tempPoint$1.y, data.origin);
4946
+ translateInner(local, -tempPoint$1.x, -tempPoint$1.y, !data.around);
4890
4947
  }
4891
4948
  }
4892
4949
  this.__layout.matrixChanged = false;
@@ -4895,7 +4952,7 @@ const LeafMatrix = {
4895
4952
 
4896
4953
  const { updateMatrix: updateMatrix$1, updateAllMatrix: updateAllMatrix$2 } = LeafHelper;
4897
4954
  const { updateBounds: updateBounds$1 } = BranchHelper;
4898
- const { toOuterOf: toOuterOf$1, copyAndSpread: copyAndSpread$1, copy: copy$4 } = BoundsHelper;
4955
+ const { toOuterOf: toOuterOf$1, copyAndSpread: copyAndSpread$2, copy: copy$4 } = BoundsHelper;
4899
4956
  const { toBounds: toBounds$2 } = PathBounds;
4900
4957
  const LeafBounds = {
4901
4958
  __updateWorldBounds() {
@@ -4996,7 +5053,7 @@ const LeafBounds = {
4996
5053
  updateAllMatrix$2(this);
4997
5054
  updateBounds$1(this, this);
4998
5055
  if (this.__.__autoSide)
4999
- this.__updateBoxBounds();
5056
+ this.__updateBoxBounds(true);
5000
5057
  }
5001
5058
  else {
5002
5059
  updateAllMatrix$2(this);
@@ -5014,11 +5071,11 @@ const LeafBounds = {
5014
5071
  },
5015
5072
  __updateStrokeBounds() {
5016
5073
  const layout = this.__layout;
5017
- copyAndSpread$1(layout.strokeBounds, layout.boxBounds, layout.strokeBoxSpread);
5074
+ copyAndSpread$2(layout.strokeBounds, layout.boxBounds, layout.strokeBoxSpread);
5018
5075
  },
5019
5076
  __updateRenderBounds() {
5020
5077
  const layout = this.__layout;
5021
- layout.renderSpread > 0 ? copyAndSpread$1(layout.renderBounds, layout.boxBounds, layout.renderSpread) : copy$4(layout.renderBounds, layout.strokeBounds);
5078
+ layout.renderSpread > 0 ? copyAndSpread$2(layout.renderBounds, layout.boxBounds, layout.renderSpread) : copy$4(layout.renderBounds, layout.strokeBounds);
5022
5079
  }
5023
5080
  };
5024
5081
 
@@ -5115,7 +5172,7 @@ const { LEAF, create } = IncrementId;
5115
5172
  const { toInnerPoint, toOuterPoint, multiplyParent } = MatrixHelper;
5116
5173
  const { toOuterOf } = BoundsHelper;
5117
5174
  const { copy: copy$3 } = PointHelper;
5118
- const { moveLocal, zoomOfLocal, rotateOfLocal, skewOfLocal, moveWorld, zoomOfWorld, rotateOfWorld, skewOfWorld, transform, transformWorld, setTransform, getLocalOrigin, getRelativeWorld, drop } = LeafHelper;
5175
+ const { moveLocal, zoomOfLocal, rotateOfLocal, skewOfLocal, moveWorld, zoomOfWorld, rotateOfWorld, skewOfWorld, transform, transformWorld, setTransform, getFlipTransform, getLocalOrigin, getRelativeWorld, drop } = LeafHelper;
5119
5176
  let Leaf = class Leaf {
5120
5177
  get tag() { return this.__tag; }
5121
5178
  set tag(_value) { }
@@ -5141,6 +5198,8 @@ let Leaf = class Leaf {
5141
5198
  get __ignoreHitWorld() { return (this.__hasMask || this.__hasEraser) && this.__.hitChildren; }
5142
5199
  get __inLazyBounds() { const { leafer } = this; return leafer && leafer.created && leafer.lazyBounds.hit(this.__world); }
5143
5200
  get pathInputed() { return this.__.__pathInputed; }
5201
+ set event(map) { let event; for (let key in map)
5202
+ event = map[key], event instanceof Array ? this.on(key, event[0], event[1]) : this.on(key, event); }
5144
5203
  constructor(data) {
5145
5204
  this.innerId = create(LEAF);
5146
5205
  this.reset(data);
@@ -5376,6 +5435,9 @@ let Leaf = class Leaf {
5376
5435
  move(x, y) {
5377
5436
  moveLocal(this, x, y);
5378
5437
  }
5438
+ moveInner(x, y) {
5439
+ moveWorld(this, x, y, true);
5440
+ }
5379
5441
  scaleOf(origin, scaleX, scaleY, resize) {
5380
5442
  zoomOfLocal(this, getLocalOrigin(this, origin), scaleX, scaleY, resize);
5381
5443
  }
@@ -5400,6 +5462,9 @@ let Leaf = class Leaf {
5400
5462
  skewOfWorld(worldOrigin, skewX, skewY, resize) {
5401
5463
  skewOfWorld(this, worldOrigin, skewX, skewY, resize);
5402
5464
  }
5465
+ flip(axis) {
5466
+ transform(this, getFlipTransform(this, axis));
5467
+ }
5403
5468
  scaleResize(scaleX, scaleY = scaleX, _noResize) {
5404
5469
  this.scaleX *= scaleX;
5405
5470
  this.scaleY *= scaleY;
@@ -5757,13 +5822,14 @@ class LeafLevelList {
5757
5822
  }
5758
5823
  }
5759
5824
 
5760
- const version = "1.0.0-rc.30";
5825
+ const version = "1.0.1";
5761
5826
  const inviteCode = {};
5762
5827
 
5763
5828
  class LeaferCanvas extends LeaferCanvasBase {
5764
5829
  get allowBackgroundColor() { return false; }
5765
5830
  init() {
5766
- let { view } = this.config;
5831
+ const { config } = this;
5832
+ let view = config.view || config.canvas;
5767
5833
  if (view) {
5768
5834
  if (typeof view === 'string') {
5769
5835
  if (view[0] !== '#')
@@ -5793,16 +5859,20 @@ class LeaferCanvas extends LeaferCanvasBase {
5793
5859
  else {
5794
5860
  this.view = view.view || view;
5795
5861
  }
5796
- this.__createContext();
5862
+ this.view.getContext ? this.__createContext() : this.unrealCanvas();
5797
5863
  const { width, height, pixelRatio } = this.config;
5798
5864
  const size = { width: width || view.width, height: height || view.height, pixelRatio };
5799
5865
  this.resize(size);
5800
- if (this.context.roundRect) {
5801
- this.roundRect = function (x, y, width, height, radius) {
5802
- this.context.roundRect(x, y, width, height, typeof radius === 'number' ? [radius] : radius);
5803
- };
5866
+ if (this.context) {
5867
+ if (this.viewSelect)
5868
+ Platform.renderCanvas = this;
5869
+ if (this.context.roundRect) {
5870
+ this.roundRect = function (x, y, width, height, radius) {
5871
+ this.context.roundRect(x, y, width, height, typeof radius === 'number' ? [radius] : radius);
5872
+ };
5873
+ }
5874
+ canvasPatch(this.context.__proto__);
5804
5875
  }
5805
- canvasPatch(this.context.__proto__);
5806
5876
  }
5807
5877
  __createView() {
5808
5878
  this.view = Platform.origin.createCanvas(1, 1);
@@ -5820,10 +5890,12 @@ class LeaferCanvas extends LeaferCanvasBase {
5820
5890
  callback();
5821
5891
  });
5822
5892
  }
5823
- startAutoLayout(_autoBounds, listener) {
5893
+ startAutoLayout(autoBounds, listener) {
5824
5894
  this.resizeListener = listener;
5825
- this.checkSize = this.checkSize.bind(this);
5826
- Platform.miniapp.onWindowResize(this.checkSize);
5895
+ if (autoBounds) {
5896
+ this.checkSize = this.checkSize.bind(this);
5897
+ Platform.miniapp.onWindowResize(this.checkSize);
5898
+ }
5827
5899
  }
5828
5900
  checkSize() {
5829
5901
  if (this.viewSelect) {
@@ -5832,13 +5904,8 @@ class LeaferCanvas extends LeaferCanvasBase {
5832
5904
  const { width, height } = this.clientBounds;
5833
5905
  const { pixelRatio } = this;
5834
5906
  const size = { width, height, pixelRatio };
5835
- if (!this.isSameSize(size)) {
5836
- const oldSize = {};
5837
- DataHelper.copyAttrs(oldSize, this, canvasSizeAttrs);
5838
- this.resize(size);
5839
- if (this.width !== undefined)
5840
- this.resizeListener(new ResizeEvent(size, oldSize));
5841
- }
5907
+ if (!this.isSameSize(size))
5908
+ this.emitResize(size);
5842
5909
  });
5843
5910
  }, 500);
5844
5911
  }
@@ -5848,6 +5915,16 @@ class LeaferCanvas extends LeaferCanvasBase {
5848
5915
  this.resizeListener = null;
5849
5916
  Platform.miniapp.offWindowResize(this.checkSize);
5850
5917
  }
5918
+ unrealCanvas() {
5919
+ this.unreal = true;
5920
+ }
5921
+ emitResize(size) {
5922
+ const oldSize = {};
5923
+ DataHelper.copyAttrs(oldSize, this, canvasSizeAttrs);
5924
+ this.resize(size);
5925
+ if (this.width !== undefined)
5926
+ this.resizeListener(new ResizeEvent(size, oldSize));
5927
+ }
5851
5928
  }
5852
5929
 
5853
5930
  const { mineType, fileType } = FileHelper;
@@ -5856,120 +5933,121 @@ Object.assign(Creator, {
5856
5933
  image: (options) => new LeaferImage(options)
5857
5934
  });
5858
5935
  function useCanvas(_canvasType, app) {
5859
- if (!Platform.origin) {
5860
- Platform.origin = {
5861
- createCanvas: (width, height, _format) => app.createOffscreenCanvas({ type: '2d', width, height }),
5862
- canvasToDataURL: (canvas, type, quality) => canvas.toDataURL(mineType(type), quality),
5863
- canvasToBolb: (canvas, type, quality) => canvas.toBuffer(type, { quality }),
5864
- canvasSaveAs: (canvas, filePath, quality) => {
5865
- let data = canvas.toDataURL(mineType(fileType(filePath)), quality);
5866
- data = data.substring(data.indexOf('64,') + 3);
5867
- return Platform.origin.download(data, filePath);
5868
- },
5869
- download(data, filePath) {
5870
- return new Promise((resolve, reject) => {
5871
- let toAlbum;
5872
- if (!filePath.includes('/')) {
5873
- filePath = `${app.env.USER_DATA_PATH}/` + filePath;
5874
- toAlbum = true;
5875
- }
5876
- const fs = app.getFileSystemManager();
5877
- fs.writeFile({
5878
- filePath,
5879
- data,
5880
- encoding: 'base64',
5881
- success() {
5882
- if (toAlbum) {
5883
- Platform.miniapp.saveToAlbum(filePath).then(() => {
5884
- fs.unlink({ filePath });
5885
- resolve();
5886
- });
5887
- }
5888
- else {
5936
+ Platform.origin = {
5937
+ createCanvas: (width, height, _format) => app.createOffscreenCanvas({ type: '2d', width, height }),
5938
+ canvasToDataURL: (canvas, type, quality) => canvas.toDataURL(mineType(type), quality),
5939
+ canvasToBolb: (canvas, type, quality) => canvas.toBuffer(type, { quality }),
5940
+ canvasSaveAs: (canvas, filePath, quality) => {
5941
+ let data = canvas.toDataURL(mineType(fileType(filePath)), quality);
5942
+ data = data.substring(data.indexOf('64,') + 3);
5943
+ return Platform.origin.download(data, filePath);
5944
+ },
5945
+ download(data, filePath) {
5946
+ return new Promise((resolve, reject) => {
5947
+ let toAlbum;
5948
+ if (!filePath.includes('/')) {
5949
+ filePath = `${app.env.USER_DATA_PATH}/` + filePath;
5950
+ toAlbum = true;
5951
+ }
5952
+ const fs = app.getFileSystemManager();
5953
+ fs.writeFile({
5954
+ filePath,
5955
+ data,
5956
+ encoding: 'base64',
5957
+ success() {
5958
+ if (toAlbum) {
5959
+ Platform.miniapp.saveToAlbum(filePath).then(() => {
5960
+ fs.unlink({ filePath });
5889
5961
  resolve();
5890
- }
5891
- },
5892
- fail(error) {
5893
- reject(error);
5962
+ });
5894
5963
  }
5895
- });
5896
- });
5897
- },
5898
- loadImage(src) {
5899
- return new Promise((resolve, reject) => {
5900
- const img = Platform.canvas.view.createImage();
5901
- img.onload = () => { resolve(img); };
5902
- img.onerror = (error) => { reject(error); };
5903
- img.src = Platform.image.getRealURL(src);
5964
+ else {
5965
+ resolve();
5966
+ }
5967
+ },
5968
+ fail(error) {
5969
+ reject(error);
5970
+ }
5904
5971
  });
5905
- },
5906
- noRepeat: 'repeat-x'
5907
- };
5908
- Platform.miniapp = {
5909
- select(name) {
5910
- return app.createSelectorQuery().select(name);
5911
- },
5912
- getBounds(select) {
5913
- return new Promise((resolve) => {
5914
- select.boundingClientRect().exec((res) => {
5915
- const rect = res[1];
5916
- resolve({ x: rect.top, y: rect.left, width: rect.width, height: rect.height });
5917
- });
5972
+ });
5973
+ },
5974
+ loadImage(src) {
5975
+ return new Promise((resolve, reject) => {
5976
+ const img = Platform.canvas.view.createImage();
5977
+ img.onload = () => { resolve(img); };
5978
+ img.onerror = (error) => { reject(error); };
5979
+ img.src = Platform.image.getRealURL(src);
5980
+ });
5981
+ },
5982
+ noRepeat: 'repeat-x'
5983
+ };
5984
+ Platform.miniapp = {
5985
+ select(name) {
5986
+ return app.createSelectorQuery().select(name);
5987
+ },
5988
+ getBounds(select) {
5989
+ return new Promise((resolve) => {
5990
+ select.boundingClientRect().exec((res) => {
5991
+ const rect = res[1];
5992
+ resolve({ x: rect.top, y: rect.left, width: rect.width, height: rect.height });
5918
5993
  });
5919
- },
5920
- getSizeView(select) {
5921
- return new Promise((resolve) => {
5922
- select.fields({ node: true, size: true }).exec((res) => {
5923
- const data = res[0];
5924
- resolve({ view: data.node, width: data.width, height: data.height });
5925
- });
5994
+ });
5995
+ },
5996
+ getSizeView(select) {
5997
+ return new Promise((resolve) => {
5998
+ select.fields({ node: true, size: true }).exec((res) => {
5999
+ const data = res[0];
6000
+ resolve({ view: data.node, width: data.width, height: data.height });
5926
6001
  });
5927
- },
5928
- saveToAlbum(path) {
5929
- return new Promise((resolve) => {
5930
- app.getSetting({
5931
- success: (res) => {
5932
- if (res.authSetting['scope.writePhotosAlbum']) {
5933
- app.saveImageToPhotosAlbum({
5934
- filePath: path,
5935
- success() { resolve(true); }
5936
- });
5937
- }
5938
- else {
5939
- app.authorize({
5940
- scope: 'scope.writePhotosAlbum',
5941
- success: () => {
5942
- app.saveImageToPhotosAlbum({
5943
- filePath: path,
5944
- success() { resolve(true); }
5945
- });
5946
- },
5947
- fail: () => { }
5948
- });
5949
- }
6002
+ });
6003
+ },
6004
+ saveToAlbum(path) {
6005
+ return new Promise((resolve) => {
6006
+ app.getSetting({
6007
+ success: (res) => {
6008
+ if (res.authSetting['scope.writePhotosAlbum']) {
6009
+ app.saveImageToPhotosAlbum({
6010
+ filePath: path,
6011
+ success() { resolve(true); }
6012
+ });
5950
6013
  }
5951
- });
6014
+ else {
6015
+ app.authorize({
6016
+ scope: 'scope.writePhotosAlbum',
6017
+ success: () => {
6018
+ app.saveImageToPhotosAlbum({
6019
+ filePath: path,
6020
+ success() { resolve(true); }
6021
+ });
6022
+ },
6023
+ fail: () => { }
6024
+ });
6025
+ }
6026
+ }
5952
6027
  });
5953
- },
5954
- onWindowResize(fun) {
5955
- app.onWindowResize(fun);
5956
- },
5957
- offWindowResize(fun) {
5958
- app.offWindowResize(fun);
5959
- }
5960
- };
5961
- Platform.event = {
5962
- stopDefault(_origin) { },
5963
- stopNow(_origin) { },
5964
- stop(_origin) { }
5965
- };
5966
- Platform.canvas = Creator.canvas();
5967
- Platform.conicGradientSupport = !!Platform.canvas.context.createConicGradient;
5968
- }
6028
+ });
6029
+ },
6030
+ onWindowResize(fun) {
6031
+ app.onWindowResize(fun);
6032
+ },
6033
+ offWindowResize(fun) {
6034
+ app.offWindowResize(fun);
6035
+ }
6036
+ };
6037
+ Platform.event = {
6038
+ stopDefault(_origin) { },
6039
+ stopNow(_origin) { },
6040
+ stop(_origin) { }
6041
+ };
6042
+ Platform.canvas = Creator.canvas();
6043
+ Platform.conicGradientSupport = !!Platform.canvas.context.createConicGradient;
5969
6044
  }
5970
6045
  Platform.name = 'miniapp';
5971
- Platform.requestRender = function (render) { Platform.canvas.view.requestAnimationFrame(render); };
5972
- Platform.devicePixelRatio = wx.getSystemInfoSync().pixelRatio;
6046
+ Platform.requestRender = function (render) {
6047
+ const { view } = (Platform.renderCanvas || Platform.canvas);
6048
+ view.requestAnimationFrame ? view.requestAnimationFrame(render) : setTimeout(render, 16);
6049
+ };
6050
+ defineKey(Platform, 'devicePixelRatio', { get() { return Math.max(1, wx.getSystemInfoSync().pixelRatio); } });
5973
6051
 
5974
6052
  class Watcher {
5975
6053
  get childrenChanged() { return this.hasAdd || this.hasRemove || this.hasVisible; }
@@ -6447,14 +6525,14 @@ class Renderer {
6447
6525
  if (Debug.showRepaint)
6448
6526
  this.canvas.strokeWorld(bounds, 'red');
6449
6527
  this.target.__render(this.canvas, options);
6450
- this.renderBounds = realBounds || bounds;
6528
+ this.renderBounds = realBounds = realBounds || bounds;
6451
6529
  this.renderOptions = options;
6452
- this.totalBounds.isEmpty() ? this.totalBounds = this.renderBounds : this.totalBounds.add(this.renderBounds);
6530
+ this.totalBounds.isEmpty() ? this.totalBounds = realBounds : this.totalBounds.add(realBounds);
6453
6531
  if (Debug.showHitView)
6454
6532
  this.renderHitView(options);
6455
6533
  if (Debug.showBoundsView)
6456
6534
  this.renderBoundsView(options);
6457
- this.canvas.updateRender();
6535
+ this.canvas.updateRender(realBounds);
6458
6536
  }
6459
6537
  renderHitView(_options) { }
6460
6538
  renderBoundsView(_options) { }
@@ -6763,6 +6841,11 @@ class BoxData extends GroupData {
6763
6841
  }
6764
6842
 
6765
6843
  class LeaferData extends GroupData {
6844
+ __getInputData() {
6845
+ const data = super.__getInputData();
6846
+ canvasSizeAttrs.forEach(key => delete data[key]);
6847
+ return data;
6848
+ }
6766
6849
  }
6767
6850
 
6768
6851
  class FrameData extends BoxData {
@@ -6840,6 +6923,11 @@ class ImageData extends RectData {
6840
6923
  }
6841
6924
 
6842
6925
  class CanvasData extends RectData {
6926
+ __getInputData() {
6927
+ const data = super.__getInputData();
6928
+ data.url = this.__leaf.canvas.toDataURL('image/png');
6929
+ return data;
6930
+ }
6843
6931
  }
6844
6932
 
6845
6933
  const UIBounds = {
@@ -7505,7 +7593,7 @@ let Leafer = Leafer_1 = class Leafer extends Group {
7505
7593
  this.__controllers.push(this.renderer = Creator.renderer(this, canvas, config), this.watcher = Creator.watcher(this, config), this.layouter = Creator.layouter(this, config));
7506
7594
  if (this.isApp)
7507
7595
  this.__setApp();
7508
- this.__checkAutoLayout(config);
7596
+ this.__checkAutoLayout(config, parentApp);
7509
7597
  this.view = canvas.view;
7510
7598
  if (parentApp) {
7511
7599
  this.__bindApp(parentApp);
@@ -7606,9 +7694,10 @@ let Leafer = Leafer_1 = class Leafer extends Group {
7606
7694
  this.leafer = leafer;
7607
7695
  this.__level = 1;
7608
7696
  }
7609
- __checkAutoLayout(config) {
7610
- if (!config.width || !config.height) {
7611
- this.autoLayout = new AutoBounds(config);
7697
+ __checkAutoLayout(config, parentApp) {
7698
+ if (!parentApp) {
7699
+ if (!config.width || !config.height)
7700
+ this.autoLayout = new AutoBounds(config);
7612
7701
  this.canvas.startAutoLayout(this.autoLayout, this.__onResize.bind(this));
7613
7702
  }
7614
7703
  }
@@ -7743,12 +7832,21 @@ let Leafer = Leafer_1 = class Leafer extends Group {
7743
7832
  list.push(item);
7744
7833
  }
7745
7834
  }
7746
- zoom(_zoomType, _padding, _fixedScale) { return undefined; }
7835
+ zoom(_zoomType, _padding, _fixedScale) {
7836
+ return debug$1.error('need @leafer-in/view');
7837
+ }
7747
7838
  getValidMove(moveX, moveY) { return { x: moveX, y: moveY }; }
7748
7839
  getValidScale(changeScale) { return changeScale; }
7749
7840
  getWorldPointByClient(clientPoint, updateClient) {
7750
7841
  return this.interaction && this.interaction.getLocal(clientPoint, updateClient);
7751
7842
  }
7843
+ getPagePointByClient(clientPoint, updateClient) {
7844
+ return this.getPagePoint(this.getWorldPointByClient(clientPoint, updateClient));
7845
+ }
7846
+ updateClientBounds() {
7847
+ this.canvas && this.canvas.updateClientBounds();
7848
+ }
7849
+ receiveEvent(_event) { }
7752
7850
  __checkUpdateLayout() {
7753
7851
  this.__layout.update();
7754
7852
  }
@@ -7832,7 +7930,7 @@ Rect = __decorate([
7832
7930
  const rect = Rect.prototype;
7833
7931
  const group = Group.prototype;
7834
7932
  const childrenRenderBounds = {};
7835
- const { copy: copy$2, add, includes: includes$1 } = BoundsHelper;
7933
+ const { copy: copy$2, add, includes: includes$1, copyAndSpread: copyAndSpread$1 } = BoundsHelper;
7836
7934
  let Box = class Box extends Group {
7837
7935
  get __tag() { return 'Box'; }
7838
7936
  get isBranchLeaf() { return true; }
@@ -7846,20 +7944,23 @@ let Box = class Box extends Group {
7846
7944
  return this.__updateRectRenderSpread() || -1;
7847
7945
  }
7848
7946
  __updateRectBoxBounds() { }
7849
- __updateBoxBounds() {
7947
+ __updateBoxBounds(secondLayout) {
7850
7948
  const data = this.__;
7851
7949
  if (this.children.length) {
7852
7950
  if (data.__autoSide) {
7853
7951
  if (this.leafer && this.leafer.ready)
7854
7952
  this.leafer.layouter.addExtra(this);
7855
7953
  super.__updateBoxBounds();
7954
+ const { boxBounds } = this.__layout;
7856
7955
  if (!data.__autoSize) {
7857
- const b = this.__layout.boxBounds;
7858
- if (!data.__autoWidth)
7859
- b.height += b.y, b.width = data.width, b.x = b.y = 0;
7860
- if (!data.__autoHeight)
7861
- b.width += b.x, b.height = data.height, b.y = b.x = 0;
7956
+ if (data.__autoWidth)
7957
+ boxBounds.width += boxBounds.x, boxBounds.height = data.height, boxBounds.y = boxBounds.x = 0;
7958
+ else
7959
+ boxBounds.height += boxBounds.y, boxBounds.width = data.width, boxBounds.x = boxBounds.y = 0;
7862
7960
  }
7961
+ if (secondLayout && data.flow && data.padding)
7962
+ copyAndSpread$1(boxBounds, boxBounds, data.padding, false, data.__autoSize ? null : (data.__autoWidth ? 'width' : 'height'));
7963
+ this.__updateNaturalSize();
7863
7964
  }
7864
7965
  else {
7865
7966
  this.__updateRectBoxBounds();
@@ -7879,13 +7980,13 @@ let Box = class Box extends Group {
7879
7980
  super.__updateRenderBounds();
7880
7981
  copy$2(childrenRenderBounds, renderBounds);
7881
7982
  this.__updateRectRenderBounds();
7882
- isOverflow = !includes$1(renderBounds, childrenRenderBounds) || undefined;
7983
+ isOverflow = !includes$1(renderBounds, childrenRenderBounds) || !this.pathInputed || !this.__.cornerRadius;
7883
7984
  }
7884
7985
  else {
7885
7986
  this.__updateRectRenderBounds();
7886
7987
  }
7887
7988
  this.isOverflow !== isOverflow && (this.isOverflow = isOverflow);
7888
- if (isOverflow && !(this.__.__drawAfterFill = this.__.overflow === 'hide'))
7989
+ if (!(this.__.__drawAfterFill = this.__.overflow === 'hide') && isOverflow)
7889
7990
  add(renderBounds, childrenRenderBounds);
7890
7991
  }
7891
7992
  __updateRectRenderBounds() { }
@@ -8219,14 +8320,26 @@ __decorate([
8219
8320
  Image = __decorate([
8220
8321
  registerUI()
8221
8322
  ], Image);
8323
+ const MyImage = Image;
8222
8324
 
8223
8325
  let Canvas = class Canvas extends Rect {
8224
8326
  get __tag() { return 'Canvas'; }
8327
+ get ready() { return !this.url; }
8225
8328
  constructor(data) {
8226
8329
  super(data);
8227
8330
  this.canvas = Creator.canvas(this.__);
8228
8331
  this.context = this.canvas.context;
8229
8332
  this.__.__isCanvas = this.__.__drawAfterFill = true;
8333
+ if (data && data.url)
8334
+ this.drawImage(data.url);
8335
+ }
8336
+ drawImage(url) {
8337
+ new LeaferImage({ url }).load((image) => {
8338
+ this.context.drawImage(image.view, 0, 0);
8339
+ this.url = undefined;
8340
+ this.paint();
8341
+ this.emitEvent(new ImageEvent(ImageEvent.LOADED, { image }));
8342
+ });
8230
8343
  }
8231
8344
  draw(ui, offset, scale, rotation) {
8232
8345
  ui.__layout.update();
@@ -8270,8 +8383,7 @@ let Canvas = class Canvas extends Rect {
8270
8383
  destroy() {
8271
8384
  if (this.canvas) {
8272
8385
  this.canvas.destroy();
8273
- this.canvas = null;
8274
- this.context = null;
8386
+ this.canvas = this.context = null;
8275
8387
  }
8276
8388
  super.destroy();
8277
8389
  }
@@ -8286,7 +8398,7 @@ __decorate([
8286
8398
  resizeType(100)
8287
8399
  ], Canvas.prototype, "height", void 0);
8288
8400
  __decorate([
8289
- resizeType(Platform.devicePixelRatio)
8401
+ resizeType(1)
8290
8402
  ], Canvas.prototype, "pixelRatio", void 0);
8291
8403
  __decorate([
8292
8404
  resizeType(true)
@@ -8310,13 +8422,13 @@ let Text = class Text extends UI {
8310
8422
  super(data);
8311
8423
  }
8312
8424
  __drawHitPath(canvas) {
8313
- const { __lineHeight, __baseLine, __textDrawData: data } = this.__;
8425
+ const { __lineHeight, fontSize, __baseLine, __textDrawData: data } = this.__;
8314
8426
  canvas.beginPath();
8315
8427
  if (this.__.__letterSpacing < 0) {
8316
8428
  this.__drawPathByData(canvas);
8317
8429
  }
8318
8430
  else {
8319
- data.rows.forEach(row => canvas.rect(row.x, row.y - __baseLine, row.width, __lineHeight));
8431
+ data.rows.forEach(row => canvas.rect(row.x, row.y - __baseLine, row.width, __lineHeight < fontSize ? fontSize : __lineHeight));
8320
8432
  }
8321
8433
  }
8322
8434
  __drawPathByData(drawer, _data) {
@@ -8509,7 +8621,8 @@ let Pen = class Pen extends Group {
8509
8621
  drawPoints(_points, _curve, _close) { return this; }
8510
8622
  clearPath() { return this; }
8511
8623
  paint() {
8512
- this.pathElement.forceUpdate('path');
8624
+ if (!this.pathElement.__layout.boxChanged)
8625
+ this.pathElement.forceUpdate('path');
8513
8626
  }
8514
8627
  };
8515
8628
  __decorate([
@@ -8519,7 +8632,7 @@ __decorate([
8519
8632
  penPathType()
8520
8633
  ], Pen.prototype, "path", void 0);
8521
8634
  Pen = __decorate([
8522
- useModule(PathCreator, ['set', 'beginPath', 'path']),
8635
+ useModule(PathCreator, ['set', 'beginPath', 'path', 'paint']),
8523
8636
  registerUI()
8524
8637
  ], Pen);
8525
8638
  function penPathType() {
@@ -8881,10 +8994,13 @@ function repeatMode(data, box, width, height, x, y, scaleX, scaleY, rotation, al
8881
8994
  const { get: get$2, translate } = MatrixHelper;
8882
8995
  const tempBox = new Bounds();
8883
8996
  const tempPoint = {};
8997
+ const tempScaleData = {};
8884
8998
  function createData(leafPaint, image, paint, box) {
8885
- const { blendMode } = paint;
8999
+ const { blendMode, sync } = paint;
8886
9000
  if (blendMode)
8887
9001
  leafPaint.blendMode = blendMode;
9002
+ if (sync)
9003
+ leafPaint.sync = sync;
8888
9004
  leafPaint.data = getPatternData(paint, box, image);
8889
9005
  }
8890
9006
  function getPatternData(paint, box, image) {
@@ -8904,13 +9020,10 @@ function getPatternData(paint, box, image) {
8904
9020
  x += (box.width - width * scaleX) / 2, y += (box.height - height * scaleY) / 2;
8905
9021
  }
8906
9022
  }
8907
- else if (size) {
8908
- scaleX = (typeof size === 'number' ? size : size.width) / width;
8909
- scaleY = (typeof size === 'number' ? size : size.height) / height;
8910
- }
8911
- else if (scale) {
8912
- scaleX = typeof scale === 'number' ? scale : scale.x;
8913
- scaleY = typeof scale === 'number' ? scale : scale.y;
9023
+ else if (scale || size) {
9024
+ MathHelper.getScaleData(scale, size, image, tempScaleData);
9025
+ scaleX = tempScaleData.scaleX;
9026
+ scaleY = tempScaleData.scaleY;
8914
9027
  }
8915
9028
  if (align) {
8916
9029
  const imageBounds = { x, y, width: swapWidth, height: swapHeight };
@@ -9115,7 +9228,7 @@ function createPattern(ui, paint, pixelRatio) {
9115
9228
  const { abs } = Math;
9116
9229
  function checkImage(ui, canvas, paint, allowPaint) {
9117
9230
  const { scaleX, scaleY } = ImageManager.patternLocked ? ui.__world : ui.__nowWorld;
9118
- if (!paint.data || paint.patternId === scaleX + '-' + scaleY) {
9231
+ if (!paint.data || (paint.patternId === scaleX + '-' + scaleY && !Export.running)) {
9119
9232
  return false;
9120
9233
  }
9121
9234
  else {
@@ -9149,7 +9262,7 @@ function checkImage(ui, canvas, paint, allowPaint) {
9149
9262
  return true;
9150
9263
  }
9151
9264
  else {
9152
- if (!paint.style || Export.running) {
9265
+ if (!paint.style || paint.sync || Export.running) {
9153
9266
  createPattern(ui, paint, canvas.pixelRatio);
9154
9267
  }
9155
9268
  else {
@@ -10019,6 +10132,7 @@ const ExportModule = {
10019
10132
  export(leaf, filename, options) {
10020
10133
  this.running = true;
10021
10134
  const fileType = FileHelper.fileType(filename);
10135
+ const isDownload = filename.includes('.');
10022
10136
  options = FileHelper.getExportOptions(options);
10023
10137
  return addTask((success) => new Promise((resolve) => {
10024
10138
  const over = (result) => {
@@ -10028,19 +10142,13 @@ const ExportModule = {
10028
10142
  };
10029
10143
  const { toURL } = Platform;
10030
10144
  const { download } = Platform.origin;
10031
- if (filename === 'json') {
10032
- return over({ data: leaf.toJSON(options.json) });
10033
- }
10034
- else if (fileType === 'json') {
10035
- download(toURL(JSON.stringify(leaf.toJSON(options.json)), 'text'), filename);
10036
- return over({ data: true });
10145
+ if (fileType === 'json') {
10146
+ isDownload && download(toURL(JSON.stringify(leaf.toJSON(options.json)), 'text'), filename);
10147
+ return over({ data: isDownload ? true : leaf.toJSON(options.json) });
10037
10148
  }
10038
- if (filename === 'svg') {
10039
- return over({ data: leaf.toSVG() });
10040
- }
10041
- else if (fileType === 'svg') {
10042
- download(toURL(leaf.toSVG(), 'svg'), filename);
10043
- return over({ data: true });
10149
+ if (fileType === 'svg') {
10150
+ isDownload && download(toURL(leaf.toSVG(), 'svg'), filename);
10151
+ return over({ data: isDownload ? true : leaf.toSVG() });
10044
10152
  }
10045
10153
  const { leafer } = leaf;
10046
10154
  if (leafer) {
@@ -10049,14 +10157,8 @@ const ExportModule = {
10049
10157
  let renderBounds, trimBounds, scaleX = 1, scaleY = 1;
10050
10158
  const { worldTransform, isLeafer, isFrame } = leaf;
10051
10159
  const { slice, trim, onCanvas } = options;
10052
- let scale = options.scale || 1;
10053
- let pixelRatio = options.pixelRatio || 1;
10054
10160
  const smooth = options.smooth === undefined ? leafer.config.smooth : options.smooth;
10055
10161
  const contextSettings = options.contextSettings || leafer.config.contextSettings;
10056
- if (leaf.isApp) {
10057
- scale *= pixelRatio;
10058
- pixelRatio = leaf.app.pixelRatio;
10059
- }
10060
10162
  const screenshot = options.screenshot || leaf.isApp;
10061
10163
  const fill = (isLeafer && screenshot) ? (options.fill === undefined ? leaf.fill : options.fill) : options.fill;
10062
10164
  const needFill = FileHelper.isOpaqueImage(filename) || fill, matrix = new Matrix();
@@ -10090,10 +10192,21 @@ const ExportModule = {
10090
10192
  }
10091
10193
  renderBounds = leaf.getBounds('render', relative);
10092
10194
  }
10093
- const { x, y, width, height } = new Bounds(renderBounds).scale(scale);
10195
+ const scaleData = { scaleX: 1, scaleY: 1 };
10196
+ MathHelper.getScaleData(options.scale, options.size, renderBounds, scaleData);
10197
+ let pixelRatio = options.pixelRatio || 1;
10198
+ if (leaf.isApp) {
10199
+ scaleData.scaleX *= pixelRatio;
10200
+ scaleData.scaleY *= pixelRatio;
10201
+ pixelRatio = leaf.app.pixelRatio;
10202
+ }
10203
+ const { x, y, width, height } = new Bounds(renderBounds).scale(scaleData.scaleX, scaleData.scaleY);
10204
+ const renderOptions = { matrix: matrix.scale(1 / scaleData.scaleX, 1 / scaleData.scaleY).invert().translate(-x, -y).withScale(1 / scaleX * scaleData.scaleX, 1 / scaleY * scaleData.scaleY) };
10094
10205
  let canvas = Creator.canvas({ width: Math.round(width), height: Math.round(height), pixelRatio, smooth, contextSettings });
10095
- const renderOptions = { matrix: matrix.scale(1 / scale).invert().translate(-x, -y).withScale(1 / scaleX * scale, 1 / scaleY * scale) };
10206
+ let sliceLeaf;
10096
10207
  if (slice) {
10208
+ sliceLeaf = leaf;
10209
+ sliceLeaf.__worldOpacity = 0;
10097
10210
  leaf = leafer;
10098
10211
  renderOptions.bounds = canvas.bounds;
10099
10212
  }
@@ -10108,6 +10221,8 @@ const ExportModule = {
10108
10221
  leaf.__render(canvas, renderOptions);
10109
10222
  }
10110
10223
  canvas.restore();
10224
+ if (sliceLeaf)
10225
+ sliceLeaf.__updateWorldOpacity();
10111
10226
  if (trim) {
10112
10227
  trimBounds = getTrimBounds(canvas);
10113
10228
  const old = canvas, { width, height } = trimBounds;
@@ -10191,8 +10306,9 @@ Object.assign(Effect, EffectModule);
10191
10306
  Object.assign(Export, ExportModule);
10192
10307
 
10193
10308
  try {
10194
- useCanvas('wx', wx);
10309
+ if (wx)
10310
+ useCanvas('miniapp', wx);
10195
10311
  }
10196
10312
  catch (_a) { }
10197
10313
 
10198
- export { AlignHelper, AnimateEvent, Answer, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, DataHelper, Debug, Direction4, Direction9, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Export, FileHelper, Frame, FrameData, Group, GroupData, Image, ImageData, ImageEvent, ImageManager, IncrementId, 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, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Platform, Point, PointHelper, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, Run, Star, StarData, State, StringNumberMap, TaskItem, TaskProcessor, Text, TextConvert, TextData, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, affectRenderBoundsType, affectStrokeBoundsType, arrowType, attr, autoLayoutType, boundsType, canvasPatch, canvasSizeAttrs, cursorType, dataProcessor, dataType, decorateLeafAttr, defineDataProcessor, defineKey, defineLeafAttr, doBoundsType, doStrokeType, effectType, emptyData, eraserType, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, inviteCode, layoutProcessor, maskType, naturalBoundsType, opacityType, pathInputType, pathType, pen, positionType, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleType, sortType, stateType, strokeType, surfaceType, tempBounds$1 as tempBounds, tempMatrix, tempPoint$3 as tempPoint, useCanvas, useModule, version, visibleType, zoomLayerType };
10314
+ export { AlignHelper, AnimateEvent, Answer, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, DataHelper, Debug, Direction4, Direction9, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Export, FileHelper, Frame, FrameData, Group, GroupData, Image, ImageData, ImageEvent, ImageManager, IncrementId, 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, MyImage, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Platform, Point, PointHelper, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, Run, Star, StarData, State, StringNumberMap, TaskItem, TaskProcessor, Text, TextConvert, TextData, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, affectRenderBoundsType, affectStrokeBoundsType, arrowType, attr, autoLayoutType, boundsType, canvasPatch, canvasSizeAttrs, cursorType, dataProcessor, dataType, decorateLeafAttr, defineDataProcessor, defineKey, defineLeafAttr, doBoundsType, doStrokeType, effectType, emptyData, eraserType, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, inviteCode, layoutProcessor, maskType, naturalBoundsType, opacityType, pathInputType, pathType, pen, positionType, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleType, sortType, stateType, strokeType, surfaceType, tempBounds$1 as tempBounds, tempMatrix, tempPoint$3 as tempPoint, useCanvas, useModule, version, visibleType, zoomLayerType };