leafer-ui 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$2 = 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$b(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$2(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$7, toInnerPoint: toInnerPoint$1, scaleOfOuter: scaleOfOuter$2, rotateOfOuter: rotateOfOuter$2, skewOfOuter, multiplyParent: multiplyParent$2, divideParent, getLayout } = MatrixHelper;
4021
+ const { copy: copy$7, toInnerPoint: toInnerPoint$1, toOuterPoint: toOuterPoint$1, scaleOfOuter: scaleOfOuter$2, rotateOfOuter: rotateOfOuter$2, skewOfOuter, multiplyParent: multiplyParent$2, divideParent, getLayout } = MatrixHelper;
3983
4022
  const matrix$1 = {};
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$7(matrix$1, t.__localMatrix);
4068
4106
  scaleOfOuter$2(matrix$1, origin, scaleX, scaleY);
4069
- moveByMatrix(t, matrix$1);
4070
- t.scaleResize(scaleX, scaleY, resize !== true);
4107
+ if (t.origin || t.around) {
4108
+ L.setTransform(t, matrix$1, resize);
4109
+ }
4110
+ else {
4111
+ moveByMatrix(t, matrix$1);
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$7(matrix$1, t.__localMatrix);
4077
4120
  rotateOfOuter$2(matrix$1, origin, angle);
4078
- moveByMatrix(t, matrix$1);
4079
- t.rotation = MathHelper.formatRotation(t.rotation + angle);
4121
+ if (t.origin || t.around) {
4122
+ L.setTransform(t, matrix$1);
4123
+ }
4124
+ else {
4125
+ moveByMatrix(t, matrix$1);
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$1, 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$7(matrix$1, 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$5 } = BoundsHelper;
4955
+ const { toOuterOf: toOuterOf$1, copyAndSpread: copyAndSpread$2, copy: copy$5 } = 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$5(layout.renderBounds, layout.strokeBounds);
5078
+ layout.renderSpread > 0 ? copyAndSpread$2(layout.renderBounds, layout.boxBounds, layout.renderSpread) : copy$5(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$4 } = 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,7 +5822,7 @@ 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
  const debug$7 = Debug.get('LeaferCanvas');
@@ -5781,7 +5846,8 @@ class LeaferCanvas extends LeaferCanvasBase {
5781
5846
  }
5782
5847
  }
5783
5848
  init() {
5784
- const { view } = this.config;
5849
+ const { config } = this;
5850
+ const view = config.view || config.canvas;
5785
5851
  view ? this.__createViewFrom(view) : this.__createView();
5786
5852
  const { style } = this.view;
5787
5853
  style.display || (style.display = 'block');
@@ -5796,7 +5862,7 @@ class LeaferCanvas extends LeaferCanvasBase {
5796
5862
  }
5797
5863
  this.__createContext();
5798
5864
  if (!this.autoLayout)
5799
- this.resize(this.config);
5865
+ this.resize(config);
5800
5866
  }
5801
5867
  set backgroundColor(color) { this.view.style.backgroundColor = color; }
5802
5868
  get backgroundColor() { return this.view.style.backgroundColor; }
@@ -5852,26 +5918,37 @@ class LeaferCanvas extends LeaferCanvasBase {
5852
5918
  this.clientBounds = this.view.getBoundingClientRect();
5853
5919
  }
5854
5920
  startAutoLayout(autoBounds, listener) {
5855
- this.autoBounds = autoBounds;
5856
5921
  this.resizeListener = listener;
5857
- try {
5858
- this.resizeObserver = new ResizeObserver((entries) => {
5859
- this.updateClientBounds();
5860
- for (const entry of entries)
5861
- this.checkAutoBounds(entry.contentRect);
5862
- });
5863
- const parent = this.parentView;
5864
- if (parent) {
5865
- this.resizeObserver.observe(parent);
5866
- this.checkAutoBounds(parent.getBoundingClientRect());
5922
+ if (autoBounds) {
5923
+ this.autoBounds = autoBounds;
5924
+ try {
5925
+ this.resizeObserver = new ResizeObserver((entries) => {
5926
+ this.updateClientBounds();
5927
+ for (const entry of entries)
5928
+ this.checkAutoBounds(entry.contentRect);
5929
+ });
5930
+ const parent = this.parentView;
5931
+ if (parent) {
5932
+ this.resizeObserver.observe(parent);
5933
+ this.checkAutoBounds(parent.getBoundingClientRect());
5934
+ }
5935
+ else {
5936
+ this.checkAutoBounds(this.view);
5937
+ debug$7.warn('no parent');
5938
+ }
5867
5939
  }
5868
- else {
5869
- this.checkAutoBounds(this.view);
5870
- debug$7.warn('no parent');
5940
+ catch (_a) {
5941
+ this.imitateResizeObserver();
5871
5942
  }
5872
5943
  }
5873
- catch (_a) {
5874
- this.imitateResizeObserver();
5944
+ else {
5945
+ window.addEventListener('resize', () => {
5946
+ const pixelRatio = Platform.devicePixelRatio;
5947
+ if (this.pixelRatio !== pixelRatio) {
5948
+ const { width, height } = this;
5949
+ this.emitResize({ width, height, pixelRatio });
5950
+ }
5951
+ });
5875
5952
  }
5876
5953
  }
5877
5954
  imitateResizeObserver() {
@@ -5884,17 +5961,12 @@ class LeaferCanvas extends LeaferCanvasBase {
5884
5961
  checkAutoBounds(parentSize) {
5885
5962
  const view = this.view;
5886
5963
  const { x, y, width, height } = this.autoBounds.getBoundsFrom(parentSize);
5887
- if (width !== this.width || height !== this.height) {
5964
+ const size = { width, height, pixelRatio: Platform.devicePixelRatio };
5965
+ if (!this.isSameSize(size)) {
5888
5966
  const { style } = view;
5889
- const { pixelRatio } = this;
5890
5967
  style.marginLeft = x + 'px';
5891
5968
  style.marginTop = y + 'px';
5892
- const size = { width, height, pixelRatio };
5893
- const oldSize = {};
5894
- DataHelper.copyAttrs(oldSize, this, canvasSizeAttrs);
5895
- this.resize(size);
5896
- if (this.width !== undefined)
5897
- this.resizeListener(new ResizeEvent(size, oldSize));
5969
+ this.emitResize(size);
5898
5970
  }
5899
5971
  }
5900
5972
  stopAutoLayout() {
@@ -5905,6 +5977,13 @@ class LeaferCanvas extends LeaferCanvasBase {
5905
5977
  this.resizeObserver = null;
5906
5978
  }
5907
5979
  }
5980
+ emitResize(size) {
5981
+ const oldSize = {};
5982
+ DataHelper.copyAttrs(oldSize, this, canvasSizeAttrs);
5983
+ this.resize(size);
5984
+ if (this.width !== undefined)
5985
+ this.resizeListener(new ResizeEvent(size, oldSize));
5986
+ }
5908
5987
  unrealCanvas() {
5909
5988
  if (!this.unreal && this.parentView) {
5910
5989
  const view = this.view;
@@ -5985,7 +6064,7 @@ function useCanvas(_canvasType, _power) {
5985
6064
  Platform.name = 'web';
5986
6065
  Platform.isMobile = 'ontouchstart' in window;
5987
6066
  Platform.requestRender = function (render) { window.requestAnimationFrame(render); };
5988
- Platform.devicePixelRatio = Math.max(1, devicePixelRatio);
6067
+ defineKey(Platform, 'devicePixelRatio', { get() { return Math.max(1, devicePixelRatio); } });
5989
6068
  const { userAgent } = navigator;
5990
6069
  if (userAgent.indexOf("Firefox") > -1) {
5991
6070
  Platform.conicGradientRotate90 = true;
@@ -6482,14 +6561,14 @@ class Renderer {
6482
6561
  if (Debug.showRepaint)
6483
6562
  this.canvas.strokeWorld(bounds, 'red');
6484
6563
  this.target.__render(this.canvas, options);
6485
- this.renderBounds = realBounds || bounds;
6564
+ this.renderBounds = realBounds = realBounds || bounds;
6486
6565
  this.renderOptions = options;
6487
- this.totalBounds.isEmpty() ? this.totalBounds = this.renderBounds : this.totalBounds.add(this.renderBounds);
6566
+ this.totalBounds.isEmpty() ? this.totalBounds = realBounds : this.totalBounds.add(realBounds);
6488
6567
  if (Debug.showHitView)
6489
6568
  this.renderHitView(options);
6490
6569
  if (Debug.showBoundsView)
6491
6570
  this.renderBoundsView(options);
6492
- this.canvas.updateRender();
6571
+ this.canvas.updateRender(realBounds);
6493
6572
  }
6494
6573
  renderHitView(_options) { }
6495
6574
  renderBoundsView(_options) { }
@@ -7069,6 +7148,11 @@ class BoxData extends GroupData {
7069
7148
  }
7070
7149
 
7071
7150
  class LeaferData extends GroupData {
7151
+ __getInputData() {
7152
+ const data = super.__getInputData();
7153
+ canvasSizeAttrs.forEach(key => delete data[key]);
7154
+ return data;
7155
+ }
7072
7156
  }
7073
7157
 
7074
7158
  class FrameData extends BoxData {
@@ -7146,6 +7230,11 @@ class ImageData extends RectData {
7146
7230
  }
7147
7231
 
7148
7232
  class CanvasData extends RectData {
7233
+ __getInputData() {
7234
+ const data = super.__getInputData();
7235
+ data.url = this.__leaf.canvas.toDataURL('image/png');
7236
+ return data;
7237
+ }
7149
7238
  }
7150
7239
 
7151
7240
  const UIBounds = {
@@ -7811,7 +7900,7 @@ let Leafer = Leafer_1 = class Leafer extends Group {
7811
7900
  this.__controllers.push(this.renderer = Creator.renderer(this, canvas, config), this.watcher = Creator.watcher(this, config), this.layouter = Creator.layouter(this, config));
7812
7901
  if (this.isApp)
7813
7902
  this.__setApp();
7814
- this.__checkAutoLayout(config);
7903
+ this.__checkAutoLayout(config, parentApp);
7815
7904
  this.view = canvas.view;
7816
7905
  if (parentApp) {
7817
7906
  this.__bindApp(parentApp);
@@ -7912,9 +8001,10 @@ let Leafer = Leafer_1 = class Leafer extends Group {
7912
8001
  this.leafer = leafer;
7913
8002
  this.__level = 1;
7914
8003
  }
7915
- __checkAutoLayout(config) {
7916
- if (!config.width || !config.height) {
7917
- this.autoLayout = new AutoBounds(config);
8004
+ __checkAutoLayout(config, parentApp) {
8005
+ if (!parentApp) {
8006
+ if (!config.width || !config.height)
8007
+ this.autoLayout = new AutoBounds(config);
7918
8008
  this.canvas.startAutoLayout(this.autoLayout, this.__onResize.bind(this));
7919
8009
  }
7920
8010
  }
@@ -8049,12 +8139,21 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8049
8139
  list.push(item);
8050
8140
  }
8051
8141
  }
8052
- zoom(_zoomType, _padding, _fixedScale) { return undefined; }
8142
+ zoom(_zoomType, _padding, _fixedScale) {
8143
+ return debug$3.error('need @leafer-in/view');
8144
+ }
8053
8145
  getValidMove(moveX, moveY) { return { x: moveX, y: moveY }; }
8054
8146
  getValidScale(changeScale) { return changeScale; }
8055
8147
  getWorldPointByClient(clientPoint, updateClient) {
8056
8148
  return this.interaction && this.interaction.getLocal(clientPoint, updateClient);
8057
8149
  }
8150
+ getPagePointByClient(clientPoint, updateClient) {
8151
+ return this.getPagePoint(this.getWorldPointByClient(clientPoint, updateClient));
8152
+ }
8153
+ updateClientBounds() {
8154
+ this.canvas && this.canvas.updateClientBounds();
8155
+ }
8156
+ receiveEvent(_event) { }
8058
8157
  __checkUpdateLayout() {
8059
8158
  this.__layout.update();
8060
8159
  }
@@ -8138,7 +8237,7 @@ Rect = __decorate([
8138
8237
  const rect$1 = Rect.prototype;
8139
8238
  const group$1 = Group.prototype;
8140
8239
  const childrenRenderBounds = {};
8141
- const { copy: copy$3, add, includes: includes$1 } = BoundsHelper;
8240
+ const { copy: copy$3, add, includes: includes$1, copyAndSpread: copyAndSpread$1 } = BoundsHelper;
8142
8241
  let Box = class Box extends Group {
8143
8242
  get __tag() { return 'Box'; }
8144
8243
  get isBranchLeaf() { return true; }
@@ -8152,20 +8251,23 @@ let Box = class Box extends Group {
8152
8251
  return this.__updateRectRenderSpread() || -1;
8153
8252
  }
8154
8253
  __updateRectBoxBounds() { }
8155
- __updateBoxBounds() {
8254
+ __updateBoxBounds(secondLayout) {
8156
8255
  const data = this.__;
8157
8256
  if (this.children.length) {
8158
8257
  if (data.__autoSide) {
8159
8258
  if (this.leafer && this.leafer.ready)
8160
8259
  this.leafer.layouter.addExtra(this);
8161
8260
  super.__updateBoxBounds();
8261
+ const { boxBounds } = this.__layout;
8162
8262
  if (!data.__autoSize) {
8163
- const b = this.__layout.boxBounds;
8164
- if (!data.__autoWidth)
8165
- b.height += b.y, b.width = data.width, b.x = b.y = 0;
8166
- if (!data.__autoHeight)
8167
- b.width += b.x, b.height = data.height, b.y = b.x = 0;
8263
+ if (data.__autoWidth)
8264
+ boxBounds.width += boxBounds.x, boxBounds.height = data.height, boxBounds.y = boxBounds.x = 0;
8265
+ else
8266
+ boxBounds.height += boxBounds.y, boxBounds.width = data.width, boxBounds.x = boxBounds.y = 0;
8168
8267
  }
8268
+ if (secondLayout && data.flow && data.padding)
8269
+ copyAndSpread$1(boxBounds, boxBounds, data.padding, false, data.__autoSize ? null : (data.__autoWidth ? 'width' : 'height'));
8270
+ this.__updateNaturalSize();
8169
8271
  }
8170
8272
  else {
8171
8273
  this.__updateRectBoxBounds();
@@ -8185,13 +8287,13 @@ let Box = class Box extends Group {
8185
8287
  super.__updateRenderBounds();
8186
8288
  copy$3(childrenRenderBounds, renderBounds);
8187
8289
  this.__updateRectRenderBounds();
8188
- isOverflow = !includes$1(renderBounds, childrenRenderBounds) || undefined;
8290
+ isOverflow = !includes$1(renderBounds, childrenRenderBounds) || !this.pathInputed || !this.__.cornerRadius;
8189
8291
  }
8190
8292
  else {
8191
8293
  this.__updateRectRenderBounds();
8192
8294
  }
8193
8295
  this.isOverflow !== isOverflow && (this.isOverflow = isOverflow);
8194
- if (isOverflow && !(this.__.__drawAfterFill = this.__.overflow === 'hide'))
8296
+ if (!(this.__.__drawAfterFill = this.__.overflow === 'hide') && isOverflow)
8195
8297
  add(renderBounds, childrenRenderBounds);
8196
8298
  }
8197
8299
  __updateRectRenderBounds() { }
@@ -8525,14 +8627,26 @@ __decorate([
8525
8627
  Image$1 = __decorate([
8526
8628
  registerUI()
8527
8629
  ], Image$1);
8630
+ const MyImage = Image$1;
8528
8631
 
8529
8632
  let Canvas = class Canvas extends Rect {
8530
8633
  get __tag() { return 'Canvas'; }
8634
+ get ready() { return !this.url; }
8531
8635
  constructor(data) {
8532
8636
  super(data);
8533
8637
  this.canvas = Creator.canvas(this.__);
8534
8638
  this.context = this.canvas.context;
8535
8639
  this.__.__isCanvas = this.__.__drawAfterFill = true;
8640
+ if (data && data.url)
8641
+ this.drawImage(data.url);
8642
+ }
8643
+ drawImage(url) {
8644
+ new LeaferImage({ url }).load((image) => {
8645
+ this.context.drawImage(image.view, 0, 0);
8646
+ this.url = undefined;
8647
+ this.paint();
8648
+ this.emitEvent(new ImageEvent(ImageEvent.LOADED, { image }));
8649
+ });
8536
8650
  }
8537
8651
  draw(ui, offset, scale, rotation) {
8538
8652
  ui.__layout.update();
@@ -8576,8 +8690,7 @@ let Canvas = class Canvas extends Rect {
8576
8690
  destroy() {
8577
8691
  if (this.canvas) {
8578
8692
  this.canvas.destroy();
8579
- this.canvas = null;
8580
- this.context = null;
8693
+ this.canvas = this.context = null;
8581
8694
  }
8582
8695
  super.destroy();
8583
8696
  }
@@ -8592,7 +8705,7 @@ __decorate([
8592
8705
  resizeType(100)
8593
8706
  ], Canvas.prototype, "height", void 0);
8594
8707
  __decorate([
8595
- resizeType(Platform.devicePixelRatio)
8708
+ resizeType(1)
8596
8709
  ], Canvas.prototype, "pixelRatio", void 0);
8597
8710
  __decorate([
8598
8711
  resizeType(true)
@@ -8616,13 +8729,13 @@ let Text = class Text extends UI {
8616
8729
  super(data);
8617
8730
  }
8618
8731
  __drawHitPath(canvas) {
8619
- const { __lineHeight, __baseLine, __textDrawData: data } = this.__;
8732
+ const { __lineHeight, fontSize, __baseLine, __textDrawData: data } = this.__;
8620
8733
  canvas.beginPath();
8621
8734
  if (this.__.__letterSpacing < 0) {
8622
8735
  this.__drawPathByData(canvas);
8623
8736
  }
8624
8737
  else {
8625
- data.rows.forEach(row => canvas.rect(row.x, row.y - __baseLine, row.width, __lineHeight));
8738
+ data.rows.forEach(row => canvas.rect(row.x, row.y - __baseLine, row.width, __lineHeight < fontSize ? fontSize : __lineHeight));
8626
8739
  }
8627
8740
  }
8628
8741
  __drawPathByData(drawer, _data) {
@@ -8815,7 +8928,8 @@ let Pen = class Pen extends Group {
8815
8928
  drawPoints(_points, _curve, _close) { return this; }
8816
8929
  clearPath() { return this; }
8817
8930
  paint() {
8818
- this.pathElement.forceUpdate('path');
8931
+ if (!this.pathElement.__layout.boxChanged)
8932
+ this.pathElement.forceUpdate('path');
8819
8933
  }
8820
8934
  };
8821
8935
  __decorate([
@@ -8825,7 +8939,7 @@ __decorate([
8825
8939
  penPathType()
8826
8940
  ], Pen.prototype, "path", void 0);
8827
8941
  Pen = __decorate([
8828
- useModule(PathCreator, ['set', 'beginPath', 'path']),
8942
+ useModule(PathCreator, ['set', 'beginPath', 'path', 'paint']),
8829
8943
  registerUI()
8830
8944
  ], Pen);
8831
8945
  function penPathType() {
@@ -8930,11 +9044,13 @@ let App = class App extends Leafer {
8930
9044
  this.renderer.update();
8931
9045
  }
8932
9046
  __render(canvas, options) {
8933
- if (options.matrix) {
8934
- const { a, b, c, d, e, f } = options.matrix;
8935
- canvas.setTransform(a, b, c, d, e, f);
9047
+ if (canvas.context) {
9048
+ if (options.matrix) {
9049
+ const { a, b, c, d, e, f } = options.matrix;
9050
+ canvas.setTransform(a, b, c, d, e, f);
9051
+ }
9052
+ this.children.forEach(leafer => canvas.copyWorld(leafer.canvas));
8936
9053
  }
8937
- this.children.forEach(leafer => canvas.copyWorld(leafer.canvas));
8938
9054
  }
8939
9055
  __onResize(event) {
8940
9056
  this.children.forEach(leafer => leafer.resize(event));
@@ -9046,6 +9162,7 @@ PointerEvent.MENU_TAP = 'pointer.menu_tap';
9046
9162
  PointerEvent = __decorate([
9047
9163
  registerUIEvent()
9048
9164
  ], PointerEvent);
9165
+ const MyPointerEvent = PointerEvent;
9049
9166
 
9050
9167
  const move = {};
9051
9168
  let DragEvent = class DragEvent extends PointerEvent {
@@ -9145,6 +9262,7 @@ DragEvent.LEAVE = 'drag.leave';
9145
9262
  DragEvent = __decorate([
9146
9263
  registerUIEvent()
9147
9264
  ], DragEvent);
9265
+ const MyDragEvent = DragEvent;
9148
9266
 
9149
9267
  let DropEvent = class DropEvent extends PointerEvent {
9150
9268
  static setList(data) {
@@ -9226,36 +9344,32 @@ function addInteractionWindow(leafer) {
9226
9344
 
9227
9345
  function document$1(leafer) {
9228
9346
  addInteractionWindow(leafer);
9229
- leafer.config.move.scroll = 'limit';
9230
- leafer.config.zoom.min = 1;
9347
+ const { move, zoom } = leafer.config;
9348
+ move.scroll = 'limit';
9349
+ zoom.min = 1;
9350
+ }
9351
+
9352
+ function block(leafer) {
9353
+ const { config } = leafer;
9354
+ (config.wheel || (config.wheel = {})).preventDefault = false;
9355
+ (config.touch || (config.touch = {})).preventDefault = 'auto';
9231
9356
  }
9232
9357
 
9233
9358
  const debug$2 = Debug.get('LeaferTypeCreator');
9234
9359
  const LeaferTypeCreator = {
9235
9360
  list: {},
9236
9361
  register(name, fn) {
9237
- if (list[name]) {
9238
- debug$2.repeat(name);
9239
- }
9240
- else {
9241
- list[name] = fn;
9242
- }
9362
+ list[name] ? debug$2.repeat(name) : list[name] = fn;
9243
9363
  },
9244
9364
  run(name, leafer) {
9245
9365
  const fn = list[name];
9246
- if (fn) {
9247
- fn(leafer);
9248
- }
9249
- else {
9250
- debug$2.error('no', name);
9251
- }
9366
+ fn && fn(leafer);
9252
9367
  }
9253
9368
  };
9254
9369
  const { list, register } = LeaferTypeCreator;
9255
- register('draw', () => { });
9256
- register('custom', () => { });
9257
9370
  register('design', addInteractionWindow);
9258
9371
  register('document', document$1);
9372
+ register('block', block);
9259
9373
 
9260
9374
  const leafer = Leafer.prototype;
9261
9375
  leafer.initType = function (type) {
@@ -9301,11 +9415,14 @@ leafer.getValidScale = function (changeScale) {
9301
9415
  };
9302
9416
 
9303
9417
  class Transformer {
9418
+ get transforming() { return !!(this.moveData || this.zoomData || this.rotateData); }
9304
9419
  constructor(interaction) {
9305
9420
  this.interaction = interaction;
9306
9421
  }
9307
9422
  move(data) {
9308
9423
  const { interaction } = this;
9424
+ if (!data.moveType)
9425
+ data.moveType = 'move';
9309
9426
  if (!this.moveData) {
9310
9427
  const { path } = interaction.selector.getByPoint(data, interaction.hitRadius);
9311
9428
  data.path = path;
@@ -9441,7 +9558,13 @@ const InteractionHelper = {
9441
9558
  find.add(list[i]);
9442
9559
  }
9443
9560
  return find;
9444
- }
9561
+ },
9562
+ pathCanDrag(path) {
9563
+ return path && path.list.some(item => item.draggable || item.editable || (!item.isLeafer && item.hasEvent(DragEvent.DRAG)));
9564
+ },
9565
+ pathHasOutside(path) {
9566
+ return path && path.list.some(item => item.isOutside);
9567
+ },
9445
9568
  };
9446
9569
  const I = InteractionHelper;
9447
9570
 
@@ -9470,8 +9593,10 @@ class Dragger {
9470
9593
  return;
9471
9594
  }
9472
9595
  if (!this.moving && canDrag) {
9473
- if (this.moving = interaction.canMove(this.downData) || interaction.isHoldRightKey || interaction.isMobileDragEmpty)
9596
+ if (this.moving = interaction.canMove(this.downData) || interaction.isHoldRightKey || interaction.isMobileDragEmpty) {
9597
+ this.dragData.moveType = 'drag';
9474
9598
  interaction.emit(MoveEvent.START, this.dragData);
9599
+ }
9475
9600
  }
9476
9601
  if (!this.moving) {
9477
9602
  this.dragStart(data, canDrag);
@@ -9510,6 +9635,7 @@ class Dragger {
9510
9635
  this.dragData.throughPath = throughPath;
9511
9636
  this.dragData.path = path;
9512
9637
  if (this.moving) {
9638
+ this.dragData.moveType = 'drag';
9513
9639
  interaction.emit(MoveEvent.BEFORE_MOVE, this.dragData);
9514
9640
  interaction.emit(MoveEvent.MOVE, this.dragData);
9515
9641
  }
@@ -9576,6 +9702,7 @@ class Dragger {
9576
9702
  endDragData.path = path;
9577
9703
  if (this.moving) {
9578
9704
  this.moving = false;
9705
+ endDragData.moveType = 'drag';
9579
9706
  interaction.emit(MoveEvent.END, endDragData);
9580
9707
  }
9581
9708
  if (this.dragging) {
@@ -9634,7 +9761,7 @@ class Dragger {
9634
9761
  totalY += moveY;
9635
9762
  PointHelper.move(downData, moveX, moveY);
9636
9763
  PointHelper.move(this.dragData, moveX, moveY);
9637
- interaction.move(Object.assign(Object.assign({}, data), { moveX, moveY, totalX, totalY }));
9764
+ interaction.move(Object.assign(Object.assign({}, data), { moveX, moveY, totalX, totalY, moveType: 'drag' }));
9638
9765
  interaction.pointerMoveReal(data);
9639
9766
  }, 10);
9640
9767
  }
@@ -9747,22 +9874,27 @@ const config = {
9747
9874
  swipeDistance: 20,
9748
9875
  preventDefaultMenu: true
9749
9876
  },
9877
+ touch: {
9878
+ preventDefault: true
9879
+ },
9750
9880
  cursor: true,
9751
9881
  keyEvent: true
9752
9882
  };
9753
9883
 
9754
- const { pathHasEventType, getMoveEventData: getMoveEventData$1, getZoomEventData: getZoomEventData$1, getRotateEventData: getRotateEventData$1 } = InteractionHelper;
9884
+ const { pathHasEventType, getMoveEventData: getMoveEventData$1, getZoomEventData: getZoomEventData$1, getRotateEventData: getRotateEventData$1, pathCanDrag: pathCanDrag$1, pathHasOutside } = InteractionHelper;
9755
9885
  class InteractionBase {
9756
9886
  get dragging() { return this.dragger.dragging; }
9757
- get moveMode() { return this.config.move.drag || this.isHoldSpaceKey || this.isHoldMiddleKey || (this.isHoldRightKey && this.dragger.moving) || this.isDragEmpty; }
9887
+ get transforming() { return this.transformer.transforming; }
9888
+ get moveMode() { return this.config.move.drag === true || this.isHoldSpaceKey || this.isHoldMiddleKey || (this.isHoldRightKey && this.dragger.moving) || this.isDragEmpty; }
9889
+ get canHover() { return this.config.pointer.hover && !this.config.mobile; }
9758
9890
  get isDragEmpty() { return this.config.move.dragEmpty && this.isRootPath(this.hoverData) && (!this.downData || this.isRootPath(this.downData)); }
9759
- get isMobileDragEmpty() { return this.config.move.dragEmpty && !this.config.pointer.hover && this.downData && this.isTreePath(this.downData); }
9891
+ get isMobileDragEmpty() { return this.config.move.dragEmpty && !this.canHover && this.downData && this.isTreePath(this.downData); }
9760
9892
  get isHoldMiddleKey() { return this.config.move.holdMiddleKey && this.downData && PointerButton.middle(this.downData); }
9761
9893
  get isHoldRightKey() { return this.config.move.holdRightKey && this.downData && PointerButton.right(this.downData); }
9762
9894
  get isHoldSpaceKey() { return this.config.move.holdSpaceKey && Keyboard.isHoldSpaceKey(); }
9763
9895
  get hitRadius() { return this.config.pointer.hitRadius; }
9764
9896
  constructor(target, canvas, selector, userConfig) {
9765
- this.config = config;
9897
+ this.config = DataHelper.clone(config);
9766
9898
  this.tapCount = 0;
9767
9899
  this.downKeyMap = {};
9768
9900
  this.target = target;
@@ -9849,6 +9981,7 @@ class InteractionBase {
9849
9981
  if (!downData)
9850
9982
  return;
9851
9983
  PointerButton.defaultLeft(data);
9984
+ data.multiTouch = downData.multiTouch;
9852
9985
  this.findPath(data);
9853
9986
  const upData = Object.assign(Object.assign({}, data), { path: data.path.clone() });
9854
9987
  data.path.addList(downData.path.list);
@@ -9921,7 +10054,7 @@ class InteractionBase {
9921
10054
  this.updateCursor();
9922
10055
  }
9923
10056
  pointerHover(data) {
9924
- if (this.config.pointer.hover) {
10057
+ if (this.canHover) {
9925
10058
  this.pointerOverOrOut(data);
9926
10059
  this.pointerEnterOrLeave(data);
9927
10060
  }
@@ -10013,11 +10146,11 @@ class InteractionBase {
10013
10146
  return app.editor && (!data.path.has(app.editor) && data.path.has(app.tree) && !data.target.syncEventer);
10014
10147
  }
10015
10148
  checkPath(data, useDefaultPath) {
10016
- if (useDefaultPath || this.canMove(data))
10149
+ if (useDefaultPath || (this.moveMode && !pathHasOutside(data.path)))
10017
10150
  data.path = this.defaultPath;
10018
10151
  }
10019
10152
  canMove(data) {
10020
- return this.moveMode && data && data.path.list.every(item => !item.isOutside);
10153
+ return data && (this.moveMode || (this.config.move.drag === 'auto' && !pathCanDrag$1(data.path))) && !pathHasOutside(data.path);
10021
10154
  }
10022
10155
  isDrag(leaf) {
10023
10156
  return this.dragger.getList().has(leaf);
@@ -10058,7 +10191,7 @@ class InteractionBase {
10058
10191
  this.hoverData = data;
10059
10192
  }
10060
10193
  updateCursor(data) {
10061
- if (!this.config.cursor || !this.config.pointer.hover)
10194
+ if (!this.config.cursor || !this.canHover)
10062
10195
  return;
10063
10196
  if (!data) {
10064
10197
  this.updateHoverData();
@@ -10380,7 +10513,7 @@ const PointerEventHelper = {
10380
10513
  convertTouch(e, local) {
10381
10514
  const touch = PointerEventHelper.getTouch(e);
10382
10515
  const base = InteractionHelper.getBase(e);
10383
- return Object.assign(Object.assign({}, base), { x: local.x, y: local.y, width: 1, height: 1, pointerType: 'touch', pressure: touch.force });
10516
+ return Object.assign(Object.assign({}, base), { x: local.x, y: local.y, width: 1, height: 1, pointerType: 'touch', multiTouch: e.touches.length > 1, pressure: touch.force });
10384
10517
  },
10385
10518
  getTouch(e) {
10386
10519
  return e.targetTouches[0] || e.changedTouches[0];
@@ -10435,7 +10568,7 @@ const KeyEventHelper = {
10435
10568
  }
10436
10569
  };
10437
10570
 
10438
- const { getMoveEventData, getZoomEventData, getRotateEventData } = InteractionHelper;
10571
+ const { getMoveEventData, getZoomEventData, getRotateEventData, pathCanDrag } = InteractionHelper;
10439
10572
  class Interaction extends InteractionBase {
10440
10573
  __listenEvents() {
10441
10574
  super.__listenEvents();
@@ -10521,21 +10654,21 @@ class Interaction extends InteractionBase {
10521
10654
  }
10522
10655
  onPointerDown(e) {
10523
10656
  this.preventDefaultPointer(e);
10524
- this.usePointer || (this.usePointer = true);
10525
- if (this.useMultiTouch)
10657
+ if (this.config.pointer.touch || this.useMultiTouch)
10526
10658
  return;
10659
+ this.usePointer || (this.usePointer = true);
10527
10660
  this.pointerDown(PointerEventHelper.convert(e, this.getLocal(e)));
10528
10661
  }
10529
10662
  onPointerMove(e) {
10530
- this.usePointer || (this.usePointer = true);
10531
- if (this.useMultiTouch || this.preventWindowPointer(e))
10663
+ if (this.config.pointer.touch || this.useMultiTouch || this.preventWindowPointer(e))
10532
10664
  return;
10665
+ this.usePointer || (this.usePointer = true);
10533
10666
  this.pointerMove(PointerEventHelper.convert(e, this.getLocal(e, true)));
10534
10667
  }
10535
10668
  onPointerUp(e) {
10536
10669
  if (this.downData)
10537
10670
  this.preventDefaultPointer(e);
10538
- if (this.useMultiTouch || this.preventWindowPointer(e))
10671
+ if (this.config.pointer.touch || this.useMultiTouch || this.preventWindowPointer(e))
10539
10672
  return;
10540
10673
  this.pointerUp(PointerEventHelper.convert(e, this.getLocal(e)));
10541
10674
  }
@@ -10568,7 +10701,11 @@ class Interaction extends InteractionBase {
10568
10701
  this.pointerCancel();
10569
10702
  }
10570
10703
  onTouchStart(e) {
10571
- e.preventDefault();
10704
+ const touch = PointerEventHelper.getTouch(e);
10705
+ const local = this.getLocal(touch, true);
10706
+ const { preventDefault } = this.config.touch;
10707
+ if (preventDefault === true || (preventDefault === 'auto' && pathCanDrag(this.findPath(local))))
10708
+ e.preventDefault();
10572
10709
  this.multiTouchStart(e);
10573
10710
  if (this.usePointer)
10574
10711
  return;
@@ -10577,8 +10714,7 @@ class Interaction extends InteractionBase {
10577
10714
  this.touchTimer = 0;
10578
10715
  }
10579
10716
  this.useTouch = true;
10580
- const touch = PointerEventHelper.getTouch(e);
10581
- this.pointerDown(PointerEventHelper.convertTouch(e, this.getLocal(touch, true)));
10717
+ this.pointerDown(PointerEventHelper.convertTouch(e, local));
10582
10718
  }
10583
10719
  onTouchMove(e) {
10584
10720
  this.multiTouchMove(e);
@@ -10605,7 +10741,7 @@ class Interaction extends InteractionBase {
10605
10741
  this.pointerCancel();
10606
10742
  }
10607
10743
  multiTouchStart(e) {
10608
- this.useMultiTouch = (e.touches.length >= 2);
10744
+ this.useMultiTouch = (e.touches.length > 1);
10609
10745
  this.touches = this.useMultiTouch ? this.getTouches(e.touches) : undefined;
10610
10746
  if (this.useMultiTouch)
10611
10747
  this.pointerCancel();
@@ -11061,10 +11197,13 @@ function repeatMode(data, box, width, height, x, y, scaleX, scaleY, rotation, al
11061
11197
  const { get: get$2, translate } = MatrixHelper;
11062
11198
  const tempBox = new Bounds();
11063
11199
  const tempPoint = {};
11200
+ const tempScaleData = {};
11064
11201
  function createData(leafPaint, image, paint, box) {
11065
- const { blendMode } = paint;
11202
+ const { blendMode, sync } = paint;
11066
11203
  if (blendMode)
11067
11204
  leafPaint.blendMode = blendMode;
11205
+ if (sync)
11206
+ leafPaint.sync = sync;
11068
11207
  leafPaint.data = getPatternData(paint, box, image);
11069
11208
  }
11070
11209
  function getPatternData(paint, box, image) {
@@ -11084,13 +11223,10 @@ function getPatternData(paint, box, image) {
11084
11223
  x += (box.width - width * scaleX) / 2, y += (box.height - height * scaleY) / 2;
11085
11224
  }
11086
11225
  }
11087
- else if (size) {
11088
- scaleX = (typeof size === 'number' ? size : size.width) / width;
11089
- scaleY = (typeof size === 'number' ? size : size.height) / height;
11090
- }
11091
- else if (scale) {
11092
- scaleX = typeof scale === 'number' ? scale : scale.x;
11093
- scaleY = typeof scale === 'number' ? scale : scale.y;
11226
+ else if (scale || size) {
11227
+ MathHelper.getScaleData(scale, size, image, tempScaleData);
11228
+ scaleX = tempScaleData.scaleX;
11229
+ scaleY = tempScaleData.scaleY;
11094
11230
  }
11095
11231
  if (align) {
11096
11232
  const imageBounds = { x, y, width: swapWidth, height: swapHeight };
@@ -11295,7 +11431,7 @@ function createPattern(ui, paint, pixelRatio) {
11295
11431
  const { abs } = Math;
11296
11432
  function checkImage(ui, canvas, paint, allowPaint) {
11297
11433
  const { scaleX, scaleY } = ImageManager.patternLocked ? ui.__world : ui.__nowWorld;
11298
- if (!paint.data || paint.patternId === scaleX + '-' + scaleY) {
11434
+ if (!paint.data || (paint.patternId === scaleX + '-' + scaleY && !Export.running)) {
11299
11435
  return false;
11300
11436
  }
11301
11437
  else {
@@ -11329,7 +11465,7 @@ function checkImage(ui, canvas, paint, allowPaint) {
11329
11465
  return true;
11330
11466
  }
11331
11467
  else {
11332
- if (!paint.style || Export.running) {
11468
+ if (!paint.style || paint.sync || Export.running) {
11333
11469
  createPattern(ui, paint, canvas.pixelRatio);
11334
11470
  }
11335
11471
  else {
@@ -12199,6 +12335,7 @@ const ExportModule = {
12199
12335
  export(leaf, filename, options) {
12200
12336
  this.running = true;
12201
12337
  const fileType = FileHelper.fileType(filename);
12338
+ const isDownload = filename.includes('.');
12202
12339
  options = FileHelper.getExportOptions(options);
12203
12340
  return addTask((success) => new Promise((resolve) => {
12204
12341
  const over = (result) => {
@@ -12208,19 +12345,13 @@ const ExportModule = {
12208
12345
  };
12209
12346
  const { toURL } = Platform;
12210
12347
  const { download } = Platform.origin;
12211
- if (filename === 'json') {
12212
- return over({ data: leaf.toJSON(options.json) });
12213
- }
12214
- else if (fileType === 'json') {
12215
- download(toURL(JSON.stringify(leaf.toJSON(options.json)), 'text'), filename);
12216
- return over({ data: true });
12348
+ if (fileType === 'json') {
12349
+ isDownload && download(toURL(JSON.stringify(leaf.toJSON(options.json)), 'text'), filename);
12350
+ return over({ data: isDownload ? true : leaf.toJSON(options.json) });
12217
12351
  }
12218
- if (filename === 'svg') {
12219
- return over({ data: leaf.toSVG() });
12220
- }
12221
- else if (fileType === 'svg') {
12222
- download(toURL(leaf.toSVG(), 'svg'), filename);
12223
- return over({ data: true });
12352
+ if (fileType === 'svg') {
12353
+ isDownload && download(toURL(leaf.toSVG(), 'svg'), filename);
12354
+ return over({ data: isDownload ? true : leaf.toSVG() });
12224
12355
  }
12225
12356
  const { leafer } = leaf;
12226
12357
  if (leafer) {
@@ -12229,14 +12360,8 @@ const ExportModule = {
12229
12360
  let renderBounds, trimBounds, scaleX = 1, scaleY = 1;
12230
12361
  const { worldTransform, isLeafer, isFrame } = leaf;
12231
12362
  const { slice, trim, onCanvas } = options;
12232
- let scale = options.scale || 1;
12233
- let pixelRatio = options.pixelRatio || 1;
12234
12363
  const smooth = options.smooth === undefined ? leafer.config.smooth : options.smooth;
12235
12364
  const contextSettings = options.contextSettings || leafer.config.contextSettings;
12236
- if (leaf.isApp) {
12237
- scale *= pixelRatio;
12238
- pixelRatio = leaf.app.pixelRatio;
12239
- }
12240
12365
  const screenshot = options.screenshot || leaf.isApp;
12241
12366
  const fill = (isLeafer && screenshot) ? (options.fill === undefined ? leaf.fill : options.fill) : options.fill;
12242
12367
  const needFill = FileHelper.isOpaqueImage(filename) || fill, matrix = new Matrix();
@@ -12270,10 +12395,21 @@ const ExportModule = {
12270
12395
  }
12271
12396
  renderBounds = leaf.getBounds('render', relative);
12272
12397
  }
12273
- const { x, y, width, height } = new Bounds(renderBounds).scale(scale);
12398
+ const scaleData = { scaleX: 1, scaleY: 1 };
12399
+ MathHelper.getScaleData(options.scale, options.size, renderBounds, scaleData);
12400
+ let pixelRatio = options.pixelRatio || 1;
12401
+ if (leaf.isApp) {
12402
+ scaleData.scaleX *= pixelRatio;
12403
+ scaleData.scaleY *= pixelRatio;
12404
+ pixelRatio = leaf.app.pixelRatio;
12405
+ }
12406
+ const { x, y, width, height } = new Bounds(renderBounds).scale(scaleData.scaleX, scaleData.scaleY);
12407
+ const renderOptions = { matrix: matrix.scale(1 / scaleData.scaleX, 1 / scaleData.scaleY).invert().translate(-x, -y).withScale(1 / scaleX * scaleData.scaleX, 1 / scaleY * scaleData.scaleY) };
12274
12408
  let canvas = Creator.canvas({ width: Math.round(width), height: Math.round(height), pixelRatio, smooth, contextSettings });
12275
- const renderOptions = { matrix: matrix.scale(1 / scale).invert().translate(-x, -y).withScale(1 / scaleX * scale, 1 / scaleY * scale) };
12409
+ let sliceLeaf;
12276
12410
  if (slice) {
12411
+ sliceLeaf = leaf;
12412
+ sliceLeaf.__worldOpacity = 0;
12277
12413
  leaf = leafer;
12278
12414
  renderOptions.bounds = canvas.bounds;
12279
12415
  }
@@ -12288,6 +12424,8 @@ const ExportModule = {
12288
12424
  leaf.__render(canvas, renderOptions);
12289
12425
  }
12290
12426
  canvas.restore();
12427
+ if (sliceLeaf)
12428
+ sliceLeaf.__updateWorldOpacity();
12291
12429
  if (trim) {
12292
12430
  trimBounds = getTrimBounds(canvas);
12293
12431
  const old = canvas, { width, height } = trimBounds;
@@ -12377,4 +12515,4 @@ Object.assign(Creator, {
12377
12515
  });
12378
12516
  useCanvas();
12379
12517
 
12380
- export { AlignHelper, AnimateEvent, Answer, App, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, Cursor, DataHelper, Debug, Direction4, Direction9, DragEvent, DropEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Export, FileHelper, Frame, FrameData, Group, GroupData, HitCanvasManager, Image$1 as Image, ImageData, ImageEvent, ImageManager, IncrementId, Interaction, InteractionBase, InteractionHelper, KeyEvent, Keyboard, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferImage, LeaferTypeCreator, Line, LineData, MathHelper, Matrix, MatrixHelper, MoveEvent, MultiTouchHelper, 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, PointerButton, PointerEvent, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, RotateEvent, Run, Selector, Star, StarData, State, StringNumberMap, SwipeEvent, TaskItem, TaskProcessor, Text, TextConvert, TextData, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIEvent, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, ZoomEvent, addInteractionWindow, 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 };
12518
+ export { AlignHelper, AnimateEvent, Answer, App, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, Cursor, DataHelper, Debug, Direction4, Direction9, DragEvent, DropEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Export, FileHelper, Frame, FrameData, Group, GroupData, HitCanvasManager, Image$1 as Image, ImageData, ImageEvent, ImageManager, IncrementId, Interaction, InteractionBase, InteractionHelper, KeyEvent, Keyboard, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferImage, LeaferTypeCreator, Line, LineData, MathHelper, Matrix, MatrixHelper, MoveEvent, MultiTouchHelper, MyDragEvent, MyImage, MyPointerEvent, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Platform, Point, PointHelper, PointerButton, PointerEvent, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, RotateEvent, Run, Selector, Star, StarData, State, StringNumberMap, SwipeEvent, TaskItem, TaskProcessor, Text, TextConvert, TextData, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIEvent, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, ZoomEvent, addInteractionWindow, 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 };