leafer-ui 1.0.1 → 1.0.3

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.
@@ -111,6 +111,26 @@ const MathHelper = {
111
111
  const a = maxLength ? pow$1(10, maxLength) : 1000000000000;
112
112
  num = round(num * a) / a;
113
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
+ MathHelper.assignScale(scaleData, scale);
124
+ return scaleData;
125
+ },
126
+ assignScale(scaleData, scale) {
127
+ if (typeof scale === 'number') {
128
+ scaleData.scaleX = scaleData.scaleY = scale;
129
+ }
130
+ else {
131
+ scaleData.scaleX = scale.x;
132
+ scaleData.scaleY = scale.y;
133
+ }
114
134
  }
115
135
  };
116
136
  const OneRadian = PI$4 / 180;
@@ -409,7 +429,7 @@ const MatrixHelper = {
409
429
  };
410
430
  const M$6 = MatrixHelper;
411
431
 
412
- const { toInnerPoint: toInnerPoint$2, toOuterPoint: toOuterPoint$2 } = MatrixHelper;
432
+ const { toInnerPoint: toInnerPoint$2, toOuterPoint: toOuterPoint$3 } = MatrixHelper;
413
433
  const { sin: sin$4, cos: cos$4, abs: abs$4, sqrt: sqrt$2, atan2: atan2$2, min: min$1, PI: PI$3 } = Math;
414
434
  const PointHelper = {
415
435
  defaultPoint: getPointData(),
@@ -465,7 +485,7 @@ const PointHelper = {
465
485
  tempToOuterOf(t, matrix) {
466
486
  const { tempPoint: temp } = P$5;
467
487
  copy$b(temp, t);
468
- toOuterPoint$2(matrix, temp, temp);
488
+ toOuterPoint$3(matrix, temp, temp);
469
489
  return temp;
470
490
  },
471
491
  tempToInnerRadiusPointOf(t, matrix) {
@@ -484,7 +504,7 @@ const PointHelper = {
484
504
  toInnerPoint$2(matrix, t, to);
485
505
  },
486
506
  toOuterOf(t, matrix, to) {
487
- toOuterPoint$2(matrix, t, to);
507
+ toOuterPoint$3(matrix, t, to);
488
508
  },
489
509
  getCenter(t, to) {
490
510
  return { x: t.x + (to.x - t.x) / 2, y: t.y + (to.y - t.y) / 2 };
@@ -764,7 +784,7 @@ const TwoPointBoundsHelper = {
764
784
  const { addPoint: addPoint$4 } = TwoPointBoundsHelper;
765
785
 
766
786
  const { tempPointBounds: tempPointBounds$1, setPoint: setPoint$3, addPoint: addPoint$3, toBounds: toBounds$4 } = TwoPointBoundsHelper;
767
- const { toOuterPoint: toOuterPoint$1 } = MatrixHelper;
787
+ const { toOuterPoint: toOuterPoint$2 } = MatrixHelper;
768
788
  const { float, fourNumber } = MathHelper;
769
789
  const { floor, ceil: ceil$2 } = Math;
770
790
  let right$1, bottom$1, boundsRight, boundsBottom;
@@ -784,17 +804,24 @@ const BoundsHelper = {
784
804
  t.width = bounds.width;
785
805
  t.height = bounds.height;
786
806
  },
787
- copyAndSpread(t, bounds, spread, isShrink) {
807
+ copyAndSpread(t, bounds, spread, isShrink, side) {
808
+ const { x, y, width, height } = bounds;
788
809
  if (spread instanceof Array) {
789
810
  const four = fourNumber(spread);
790
811
  isShrink
791
- ? B.set(t, bounds.x + four[3], bounds.y + four[0], bounds.width - four[1] - four[3], bounds.height - four[2] - four[0])
792
- : B.set(t, bounds.x - four[3], bounds.y - four[0], bounds.width + four[1] + four[3], bounds.height + four[2] + four[0]);
812
+ ? B.set(t, x + four[3], y + four[0], width - four[1] - four[3], height - four[2] - four[0])
813
+ : B.set(t, x - four[3], y - four[0], width + four[1] + four[3], height + four[2] + four[0]);
793
814
  }
794
815
  else {
795
816
  if (isShrink)
796
817
  spread = -spread;
797
- B.set(t, bounds.x - spread, bounds.y - spread, bounds.width + spread * 2, bounds.height + spread * 2);
818
+ B.set(t, x - spread, y - spread, width + spread * 2, height + spread * 2);
819
+ }
820
+ if (side) {
821
+ if (side === 'width')
822
+ t.y = y, t.height = height;
823
+ else
824
+ t.x = x, t.width = width;
798
825
  }
799
826
  },
800
827
  minX(t) { return t.width > 0 ? t.x : t.x + t.width; },
@@ -871,16 +898,16 @@ const BoundsHelper = {
871
898
  else {
872
899
  point.x = t.x;
873
900
  point.y = t.y;
874
- toOuterPoint$1(matrix, point, toPoint$5);
901
+ toOuterPoint$2(matrix, point, toPoint$5);
875
902
  setPoint$3(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
876
903
  point.x = t.x + t.width;
877
- toOuterPoint$1(matrix, point, toPoint$5);
904
+ toOuterPoint$2(matrix, point, toPoint$5);
878
905
  addPoint$3(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
879
906
  point.y = t.y + t.height;
880
- toOuterPoint$1(matrix, point, toPoint$5);
907
+ toOuterPoint$2(matrix, point, toPoint$5);
881
908
  addPoint$3(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
882
909
  point.x = t.x;
883
- toOuterPoint$1(matrix, point, toPoint$5);
910
+ toOuterPoint$2(matrix, point, toPoint$5);
884
911
  addPoint$3(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
885
912
  toBounds$4(tempPointBounds$1, to);
886
913
  }
@@ -894,16 +921,16 @@ const BoundsHelper = {
894
921
  const scale = Math.min(baseScale, Math.min(t.width / put.width, t.height / put.height));
895
922
  return new Matrix(scale, 0, 0, scale, -put.x * scale, -put.y * scale);
896
923
  },
897
- getSpread(t, spread) {
924
+ getSpread(t, spread, side) {
898
925
  const n = {};
899
- B.copyAndSpread(n, t, spread);
926
+ B.copyAndSpread(n, t, spread, false, side);
900
927
  return n;
901
928
  },
902
- spread(t, spread) {
903
- B.copyAndSpread(t, t, spread);
929
+ spread(t, spread, side) {
930
+ B.copyAndSpread(t, t, spread, false, side);
904
931
  },
905
- shrink(t, shrink) {
906
- B.copyAndSpread(t, t, shrink, true);
932
+ shrink(t, shrink, side) {
933
+ B.copyAndSpread(t, t, shrink, true, side);
907
934
  },
908
935
  ceil(t) {
909
936
  const { x, y } = t;
@@ -1086,12 +1113,12 @@ class Bounds {
1086
1113
  getFitMatrix(put, baseScale) {
1087
1114
  return BoundsHelper.getFitMatrix(this, put, baseScale);
1088
1115
  }
1089
- spread(fourNumber) {
1090
- BoundsHelper.spread(this, fourNumber);
1116
+ spread(fourNumber, side) {
1117
+ BoundsHelper.spread(this, fourNumber, side);
1091
1118
  return this;
1092
1119
  }
1093
- shrink(fourNumber) {
1094
- BoundsHelper.shrink(this, fourNumber);
1120
+ shrink(fourNumber, side) {
1121
+ BoundsHelper.shrink(this, fourNumber, side);
1095
1122
  return this;
1096
1123
  }
1097
1124
  ceil() {
@@ -1235,7 +1262,6 @@ const AroundHelper = {
1235
1262
  tempPoint: {},
1236
1263
  get: get$4,
1237
1264
  toPoint(around, bounds, to, onlySize, pointBounds) {
1238
- to || (to = {});
1239
1265
  const point = get$4(around);
1240
1266
  to.x = point.x;
1241
1267
  to.y = point.y;
@@ -1370,6 +1396,10 @@ const Run = {
1370
1396
  };
1371
1397
  const R = Run;
1372
1398
 
1399
+ function needPlugin(name) {
1400
+ console.error('need plugin: @leafer-in/' + name);
1401
+ }
1402
+
1373
1403
  const debug$f = Debug.get('UICreator');
1374
1404
  const UICreator = {
1375
1405
  list: {},
@@ -1632,6 +1662,9 @@ var Answer;
1632
1662
  Answer[Answer["YesAndSkip"] = 3] = "YesAndSkip";
1633
1663
  })(Answer || (Answer = {}));
1634
1664
  const emptyData = {};
1665
+ function isNull(value) {
1666
+ return value === undefined || value === null;
1667
+ }
1635
1668
 
1636
1669
  /******************************************************************************
1637
1670
  Copyright (c) Microsoft Corporation.
@@ -2397,7 +2430,7 @@ const BezierHelper = {
2397
2430
  let startY = y = rotationSin * radiusX * startCos + rotationCos * radiusY * startSin;
2398
2431
  let fromX = cx + x, fromY = cy + y;
2399
2432
  if (data)
2400
- data.push(L$6, fromX, fromY);
2433
+ data.push(data.length ? L$6 : M$5, fromX, fromY);
2401
2434
  if (setPointBounds)
2402
2435
  setPoint$2(setPointBounds, fromX, fromY);
2403
2436
  if (setStartPoint)
@@ -2908,60 +2941,75 @@ class PathCreator {
2908
2941
  }
2909
2942
  beginPath() {
2910
2943
  beginPath(this.__path);
2944
+ this.paint();
2911
2945
  return this;
2912
2946
  }
2913
2947
  moveTo(x, y) {
2914
2948
  moveTo$4(this.__path, x, y);
2949
+ this.paint();
2915
2950
  return this;
2916
2951
  }
2917
2952
  lineTo(x, y) {
2918
2953
  lineTo$3(this.__path, x, y);
2954
+ this.paint();
2919
2955
  return this;
2920
2956
  }
2921
2957
  bezierCurveTo(x1, y1, x2, y2, x, y) {
2922
2958
  bezierCurveTo(this.__path, x1, y1, x2, y2, x, y);
2959
+ this.paint();
2923
2960
  return this;
2924
2961
  }
2925
2962
  quadraticCurveTo(x1, y1, x, y) {
2926
2963
  quadraticCurveTo(this.__path, x1, y1, x, y);
2964
+ this.paint();
2927
2965
  return this;
2928
2966
  }
2929
2967
  closePath() {
2930
2968
  closePath$3(this.__path);
2969
+ this.paint();
2931
2970
  return this;
2932
2971
  }
2933
2972
  rect(x, y, width, height) {
2934
2973
  rect$2(this.__path, x, y, width, height);
2974
+ this.paint();
2935
2975
  return this;
2936
2976
  }
2937
2977
  roundRect(x, y, width, height, cornerRadius) {
2938
2978
  roundRect$1(this.__path, x, y, width, height, cornerRadius);
2979
+ this.paint();
2939
2980
  return this;
2940
2981
  }
2941
2982
  ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) {
2942
2983
  ellipse$2(this.__path, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
2984
+ this.paint();
2943
2985
  return this;
2944
2986
  }
2945
2987
  arc(x, y, radius, startAngle, endAngle, anticlockwise) {
2946
2988
  arc$1(this.__path, x, y, radius, startAngle, endAngle, anticlockwise);
2989
+ this.paint();
2947
2990
  return this;
2948
2991
  }
2949
2992
  arcTo(x1, y1, x2, y2, radius) {
2950
2993
  arcTo$2(this.__path, x1, y1, x2, y2, radius);
2994
+ this.paint();
2951
2995
  return this;
2952
2996
  }
2953
2997
  drawEllipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise) {
2954
2998
  drawEllipse(this.__path, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
2999
+ this.paint();
2955
3000
  return this;
2956
3001
  }
2957
3002
  drawArc(x, y, radius, startAngle, endAngle, anticlockwise) {
2958
3003
  drawArc(this.__path, x, y, radius, startAngle, endAngle, anticlockwise);
3004
+ this.paint();
2959
3005
  return this;
2960
3006
  }
2961
3007
  drawPoints(points, curve, close) {
2962
3008
  drawPoints$2(this.__path, points, curve, close);
3009
+ this.paint();
2963
3010
  return this;
2964
3011
  }
3012
+ paint() { }
2965
3013
  }
2966
3014
 
2967
3015
  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;
@@ -3051,8 +3099,7 @@ const PathBounds = {
3051
3099
  toTwoPointBounds(data, setPointBounds) {
3052
3100
  if (!data || !data.length)
3053
3101
  return setPoint$1(setPointBounds, 0, 0);
3054
- let command;
3055
- let i = 0, x = 0, y = 0, x1, y1, toX, toY;
3102
+ let i = 0, x = 0, y = 0, x1, y1, toX, toY, command;
3056
3103
  const len = data.length;
3057
3104
  while (i < len) {
3058
3105
  command = data[i];
@@ -3708,7 +3755,7 @@ function autoLayoutType(defaultValue) {
3708
3755
  set(value) {
3709
3756
  if (this.__setAttr(key, value)) {
3710
3757
  this.__layout.matrixChanged || this.__layout.matrixChange();
3711
- this.__hasAutoLayout = !!value;
3758
+ this.__hasAutoLayout = !!(this.origin || this.around || this.flow);
3712
3759
  if (!this.__local)
3713
3760
  this.__layout.createLocal();
3714
3761
  }
@@ -3801,14 +3848,25 @@ function visibleType(defaultValue) {
3801
3848
  return decorateLeafAttr(defaultValue, (key) => attr({
3802
3849
  set(value) {
3803
3850
  const oldValue = this.visible;
3804
- if (this.__setAttr(key, value)) {
3805
- this.__layout.opacityChanged || this.__layout.opacityChange();
3806
- if (oldValue === 0 || value === 0)
3807
- doBoundsType(this);
3851
+ if (oldValue === true && value === 0) {
3852
+ if (this.animationOut)
3853
+ return this.__runAnimation('out', () => doVisible(this, key, value, oldValue));
3808
3854
  }
3855
+ else if (oldValue === 0 && value === true) {
3856
+ if (this.animation)
3857
+ this.__runAnimation('in');
3858
+ }
3859
+ doVisible(this, key, value, oldValue);
3809
3860
  }
3810
3861
  }));
3811
3862
  }
3863
+ function doVisible(leaf, key, value, oldValue) {
3864
+ if (leaf.__setAttr(key, value)) {
3865
+ leaf.__layout.opacityChanged || leaf.__layout.opacityChange();
3866
+ if (oldValue === 0 || value === 0)
3867
+ doBoundsType(leaf);
3868
+ }
3869
+ }
3812
3870
  function sortType(defaultValue) {
3813
3871
  return decorateLeafAttr(defaultValue, (key) => attr({
3814
3872
  set(value) {
@@ -3892,7 +3950,16 @@ function defineDataProcessor(target, key, defaultValue) {
3892
3950
  if (defaultValue === undefined) {
3893
3951
  property.get = function () { return this[computedKey]; };
3894
3952
  }
3895
- else if (key === 'width') {
3953
+ else if (typeof defaultValue === 'object') {
3954
+ const { clone } = DataHelper;
3955
+ property.get = function () {
3956
+ let v = this[computedKey];
3957
+ if (v === undefined)
3958
+ this[computedKey] = v = clone(defaultValue);
3959
+ return v;
3960
+ };
3961
+ }
3962
+ if (key === 'width') {
3896
3963
  property.get = function () {
3897
3964
  const v = this[computedKey];
3898
3965
  if (v === undefined) {
@@ -3983,7 +4050,7 @@ function registerUIEvent() {
3983
4050
  };
3984
4051
  }
3985
4052
 
3986
- const { copy: copy$7, toInnerPoint: toInnerPoint$1, scaleOfOuter: scaleOfOuter$2, rotateOfOuter: rotateOfOuter$2, skewOfOuter, multiplyParent: multiplyParent$2, divideParent, getLayout } = MatrixHelper;
4053
+ const { copy: copy$7, toInnerPoint: toInnerPoint$1, toOuterPoint: toOuterPoint$1, scaleOfOuter: scaleOfOuter$2, rotateOfOuter: rotateOfOuter$2, skewOfOuter, multiplyParent: multiplyParent$2, divideParent, getLayout } = MatrixHelper;
3987
4054
  const matrix$1 = {};
3988
4055
  const LeafHelper = {
3989
4056
  updateAllMatrix(leaf, checkAutoLayout, waitAutoLayout) {
@@ -4048,10 +4115,9 @@ const LeafHelper = {
4048
4115
  }
4049
4116
  return true;
4050
4117
  },
4051
- moveWorld(t, x, y = 0) {
4118
+ moveWorld(t, x, y = 0, isInnerPoint) {
4052
4119
  const local = typeof x === 'object' ? Object.assign({}, x) : { x, y };
4053
- if (t.parent)
4054
- toInnerPoint$1(t.parent.worldTransform, local, local, true);
4120
+ isInnerPoint ? toOuterPoint$1(t.localTransform, local, local, true) : (t.parent && toInnerPoint$1(t.parent.worldTransform, local, local, true));
4055
4121
  L.moveLocal(t, local.x, local.y);
4056
4122
  },
4057
4123
  moveLocal(t, x, y = 0) {
@@ -4560,144 +4626,6 @@ class LeafLayout {
4560
4626
  destroy() { }
4561
4627
  }
4562
4628
 
4563
- const empty = {};
4564
- const LeafEventer = {
4565
- on(type, listener, options) {
4566
- let capture, once;
4567
- if (options) {
4568
- if (options === 'once') {
4569
- once = true;
4570
- }
4571
- else if (typeof options === 'boolean') {
4572
- capture = options;
4573
- }
4574
- else {
4575
- capture = options.capture;
4576
- once = options.once;
4577
- }
4578
- }
4579
- let events;
4580
- const map = __getListenerMap(this, capture, true);
4581
- const typeList = typeof type === 'string' ? type.split(' ') : type;
4582
- const item = once ? { listener, once } : { listener };
4583
- typeList.forEach(type => {
4584
- if (type) {
4585
- events = map[type];
4586
- if (events) {
4587
- if (events.findIndex(item => item.listener === listener) === -1)
4588
- events.push(item);
4589
- }
4590
- else {
4591
- map[type] = [item];
4592
- }
4593
- }
4594
- });
4595
- },
4596
- off(type, listener, options) {
4597
- if (type) {
4598
- const typeList = typeof type === 'string' ? type.split(' ') : type;
4599
- if (listener) {
4600
- let capture;
4601
- if (options)
4602
- capture = typeof options === 'boolean' ? options : (options === 'once' ? false : options.capture);
4603
- let events, index;
4604
- const map = __getListenerMap(this, capture);
4605
- typeList.forEach(type => {
4606
- if (type) {
4607
- events = map[type];
4608
- if (events) {
4609
- index = events.findIndex(item => item.listener === listener);
4610
- if (index > -1)
4611
- events.splice(index, 1);
4612
- if (!events.length)
4613
- delete map[type];
4614
- }
4615
- }
4616
- });
4617
- }
4618
- else {
4619
- const { __bubbleMap: b, __captureMap: c } = this;
4620
- typeList.forEach(type => {
4621
- if (b)
4622
- delete b[type];
4623
- if (c)
4624
- delete c[type];
4625
- });
4626
- }
4627
- }
4628
- else {
4629
- this.__bubbleMap = this.__captureMap = undefined;
4630
- }
4631
- },
4632
- on_(type, listener, bind, options) {
4633
- if (bind)
4634
- listener = listener.bind(bind);
4635
- this.on(type, listener, options);
4636
- return { type, current: this, listener, options };
4637
- },
4638
- off_(id) {
4639
- if (!id)
4640
- return;
4641
- const list = id instanceof Array ? id : [id];
4642
- list.forEach(item => item.current.off(item.type, item.listener, item.options));
4643
- list.length = 0;
4644
- },
4645
- once(type, listener, capture) {
4646
- this.on(type, listener, { once: true, capture });
4647
- },
4648
- emit(type, event, capture) {
4649
- if (!event && EventCreator.has(type))
4650
- event = EventCreator.get(type, { type, target: this, current: this });
4651
- const map = __getListenerMap(this, capture);
4652
- const list = map[type];
4653
- if (list) {
4654
- let item;
4655
- for (let i = 0, len = list.length; i < len; i++) {
4656
- item = list[i];
4657
- item.listener(event);
4658
- if (item.once) {
4659
- this.off(type, item.listener, capture);
4660
- i--, len--;
4661
- }
4662
- if (event && event.isStopNow)
4663
- break;
4664
- }
4665
- }
4666
- this.syncEventer && this.syncEventer.emitEvent(event, capture);
4667
- },
4668
- emitEvent(event, capture) {
4669
- event.current = this;
4670
- this.emit(event.type, event, capture);
4671
- },
4672
- hasEvent(type, capture) {
4673
- if (this.syncEventer && this.syncEventer.hasEvent(type, capture))
4674
- return true;
4675
- const { __bubbleMap: b, __captureMap: c } = this;
4676
- const hasB = b && b[type], hasC = c && c[type];
4677
- return !!(capture === undefined ? (hasB || hasC) : (capture ? hasC : hasB));
4678
- },
4679
- };
4680
- function __getListenerMap(eventer, capture, create) {
4681
- if (capture) {
4682
- const { __captureMap: c } = eventer;
4683
- if (c) {
4684
- return c;
4685
- }
4686
- else {
4687
- return create ? eventer.__captureMap = {} : empty;
4688
- }
4689
- }
4690
- else {
4691
- const { __bubbleMap: b } = eventer;
4692
- if (b) {
4693
- return b;
4694
- }
4695
- else {
4696
- return create ? eventer.__bubbleMap = {} : empty;
4697
- }
4698
- }
4699
- }
4700
-
4701
4629
  class Event {
4702
4630
  constructor(type, target) {
4703
4631
  this.bubbles = false;
@@ -4732,7 +4660,10 @@ class ChildEvent extends Event {
4732
4660
  }
4733
4661
  ChildEvent.ADD = 'child.add';
4734
4662
  ChildEvent.REMOVE = 'child.remove';
4735
- ChildEvent.DESTROY = 'child.destroy';
4663
+ ChildEvent.CREATED = 'created';
4664
+ ChildEvent.MOUNTED = 'mounted';
4665
+ ChildEvent.UNMOUNTED = 'unmounted';
4666
+ ChildEvent.DESTROY = 'destroy';
4736
4667
 
4737
4668
  class PropertyEvent extends Event {
4738
4669
  constructor(type, target, attrName, oldValue, newValue) {
@@ -4810,10 +4741,6 @@ LayoutEvent.AFTER = 'layout.after';
4810
4741
  LayoutEvent.AGAIN = 'layout.again';
4811
4742
  LayoutEvent.END = 'layout.end';
4812
4743
 
4813
- class AnimateEvent extends Event {
4814
- }
4815
- AnimateEvent.FRAME = 'animate.frame';
4816
-
4817
4744
  class RenderEvent extends Event {
4818
4745
  constructor(type, times, bounds, options) {
4819
4746
  super(type);
@@ -4846,6 +4773,157 @@ LeaferEvent.STOP = 'leafer.stop';
4846
4773
  LeaferEvent.RESTART = 'leafer.restart';
4847
4774
  LeaferEvent.END = 'leafer.end';
4848
4775
 
4776
+ const empty = {};
4777
+ class Eventer {
4778
+ set event(map) { this.on(map); }
4779
+ on(type, listener, options) {
4780
+ if (!listener) {
4781
+ let event, map = type;
4782
+ for (let key in map)
4783
+ event = map[key], event instanceof Array ? this.on(key, event[0], event[1]) : this.on(key, event);
4784
+ return;
4785
+ }
4786
+ let capture, once;
4787
+ if (options) {
4788
+ if (options === 'once') {
4789
+ once = true;
4790
+ }
4791
+ else if (typeof options === 'boolean') {
4792
+ capture = options;
4793
+ }
4794
+ else {
4795
+ capture = options.capture;
4796
+ once = options.once;
4797
+ }
4798
+ }
4799
+ let events;
4800
+ const map = __getListenerMap(this, capture, true);
4801
+ const typeList = typeof type === 'string' ? type.split(' ') : type;
4802
+ const item = once ? { listener, once } : { listener };
4803
+ typeList.forEach(type => {
4804
+ if (type) {
4805
+ events = map[type];
4806
+ if (events) {
4807
+ if (events.findIndex(item => item.listener === listener) === -1)
4808
+ events.push(item);
4809
+ }
4810
+ else {
4811
+ map[type] = [item];
4812
+ }
4813
+ }
4814
+ });
4815
+ }
4816
+ off(type, listener, options) {
4817
+ if (type) {
4818
+ const typeList = typeof type === 'string' ? type.split(' ') : type;
4819
+ if (listener) {
4820
+ let capture;
4821
+ if (options)
4822
+ capture = typeof options === 'boolean' ? options : (options === 'once' ? false : options.capture);
4823
+ let events, index;
4824
+ const map = __getListenerMap(this, capture);
4825
+ typeList.forEach(type => {
4826
+ if (type) {
4827
+ events = map[type];
4828
+ if (events) {
4829
+ index = events.findIndex(item => item.listener === listener);
4830
+ if (index > -1)
4831
+ events.splice(index, 1);
4832
+ if (!events.length)
4833
+ delete map[type];
4834
+ }
4835
+ }
4836
+ });
4837
+ }
4838
+ else {
4839
+ const { __bubbleMap: b, __captureMap: c } = this;
4840
+ typeList.forEach(type => {
4841
+ if (b)
4842
+ delete b[type];
4843
+ if (c)
4844
+ delete c[type];
4845
+ });
4846
+ }
4847
+ }
4848
+ else {
4849
+ this.__bubbleMap = this.__captureMap = undefined;
4850
+ }
4851
+ }
4852
+ on_(type, listener, bind, options) {
4853
+ if (bind)
4854
+ listener = listener.bind(bind);
4855
+ this.on(type, listener, options);
4856
+ return { type, current: this, listener, options };
4857
+ }
4858
+ off_(id) {
4859
+ if (!id)
4860
+ return;
4861
+ const list = id instanceof Array ? id : [id];
4862
+ list.forEach(item => item.current.off(item.type, item.listener, item.options));
4863
+ list.length = 0;
4864
+ }
4865
+ once(type, listener, capture) {
4866
+ this.on(type, listener, { once: true, capture });
4867
+ }
4868
+ emit(type, event, capture) {
4869
+ if (!event && EventCreator.has(type))
4870
+ event = EventCreator.get(type, { type, target: this, current: this });
4871
+ const map = __getListenerMap(this, capture);
4872
+ const list = map[type];
4873
+ if (list) {
4874
+ let item;
4875
+ for (let i = 0, len = list.length; i < len; i++) {
4876
+ item = list[i];
4877
+ item.listener(event);
4878
+ if (item.once) {
4879
+ this.off(type, item.listener, capture);
4880
+ i--, len--;
4881
+ }
4882
+ if (event && event.isStopNow)
4883
+ break;
4884
+ }
4885
+ }
4886
+ this.syncEventer && this.syncEventer.emitEvent(event, capture);
4887
+ }
4888
+ emitEvent(event, capture) {
4889
+ event.current = this;
4890
+ this.emit(event.type, event, capture);
4891
+ }
4892
+ hasEvent(type, capture) {
4893
+ if (this.syncEventer && this.syncEventer.hasEvent(type, capture))
4894
+ return true;
4895
+ const { __bubbleMap: b, __captureMap: c } = this;
4896
+ const hasB = b && b[type], hasC = c && c[type];
4897
+ return !!(capture === undefined ? (hasB || hasC) : (capture ? hasC : hasB));
4898
+ }
4899
+ destroy() {
4900
+ this.__captureMap = this.__bubbleMap = this.syncEventer = null;
4901
+ }
4902
+ }
4903
+ function __getListenerMap(eventer, capture, create) {
4904
+ if (capture) {
4905
+ const { __captureMap: c } = eventer;
4906
+ if (c) {
4907
+ return c;
4908
+ }
4909
+ else {
4910
+ return create ? eventer.__captureMap = {} : empty;
4911
+ }
4912
+ }
4913
+ else {
4914
+ const { __bubbleMap: b } = eventer;
4915
+ if (b) {
4916
+ return b;
4917
+ }
4918
+ else {
4919
+ return create ? eventer.__bubbleMap = {} : empty;
4920
+ }
4921
+ }
4922
+ }
4923
+
4924
+ const { on, on_, off, off_, once, emit: emit$2, emitEvent: emitEvent$1, hasEvent, destroy } = Eventer.prototype;
4925
+ const LeafEventer = { on, on_, off, off_, once, emit: emit$2, emitEvent: emitEvent$1, hasEvent, destroyEventer: destroy };
4926
+
4849
4927
  const { isFinite } = Number;
4850
4928
  const debug$8 = Debug.get('setAttr');
4851
4929
  const LeafDataProxy = {
@@ -4857,9 +4935,7 @@ const LeafDataProxy = {
4857
4935
  newValue = undefined;
4858
4936
  }
4859
4937
  if (typeof newValue === 'object' || oldValue !== newValue) {
4860
- this.__[name] = newValue;
4861
- if (this.__proxyData)
4862
- this.setProxyAttr(name, newValue);
4938
+ this.__realSetAttr(name, newValue);
4863
4939
  const { CHANGE } = PropertyEvent;
4864
4940
  const event = new PropertyEvent(CHANGE, this, name, oldValue, newValue);
4865
4941
  if (this.isLeafer) {
@@ -4877,12 +4953,18 @@ const LeafDataProxy = {
4877
4953
  }
4878
4954
  }
4879
4955
  else {
4880
- this.__[name] = newValue;
4881
- if (this.__proxyData)
4882
- this.setProxyAttr(name, newValue);
4956
+ this.__realSetAttr(name, newValue);
4883
4957
  return true;
4884
4958
  }
4885
4959
  },
4960
+ __realSetAttr(name, newValue) {
4961
+ const data = this.__;
4962
+ data[name] = newValue;
4963
+ if (this.__proxyData)
4964
+ this.setProxyAttr(name, newValue);
4965
+ if (data.normalStyle)
4966
+ this.lockNormalStyle || data.normalStyle[name] === undefined || (data.normalStyle[name] = newValue);
4967
+ },
4886
4968
  __getAttr(name) {
4887
4969
  if (this.__proxyData)
4888
4970
  return this.getProxyAttr(name);
@@ -4918,7 +5000,7 @@ const LeafMatrix = {
4918
5000
 
4919
5001
  const { updateMatrix: updateMatrix$1, updateAllMatrix: updateAllMatrix$2 } = LeafHelper;
4920
5002
  const { updateBounds: updateBounds$1 } = BranchHelper;
4921
- const { toOuterOf: toOuterOf$1, copyAndSpread: copyAndSpread$1, copy: copy$5 } = BoundsHelper;
5003
+ const { toOuterOf: toOuterOf$1, copyAndSpread: copyAndSpread$2, copy: copy$5 } = BoundsHelper;
4922
5004
  const { toBounds: toBounds$2 } = PathBounds;
4923
5005
  const LeafBounds = {
4924
5006
  __updateWorldBounds() {
@@ -4985,6 +5067,8 @@ const LeafBounds = {
4985
5067
  layout.boundsChanged = false;
4986
5068
  },
4987
5069
  __updateLocalBoxBounds() {
5070
+ if (this.__hasMotionPath)
5071
+ this.__updateMotionPath();
4988
5072
  if (this.__hasAutoLayout)
4989
5073
  this.__updateAutoLayout();
4990
5074
  toOuterOf$1(this.__layout.boxBounds, this.__local, this.__local);
@@ -5019,7 +5103,7 @@ const LeafBounds = {
5019
5103
  updateAllMatrix$2(this);
5020
5104
  updateBounds$1(this, this);
5021
5105
  if (this.__.__autoSide)
5022
- this.__updateBoxBounds();
5106
+ this.__updateBoxBounds(true);
5023
5107
  }
5024
5108
  else {
5025
5109
  updateAllMatrix$2(this);
@@ -5037,11 +5121,11 @@ const LeafBounds = {
5037
5121
  },
5038
5122
  __updateStrokeBounds() {
5039
5123
  const layout = this.__layout;
5040
- copyAndSpread$1(layout.strokeBounds, layout.boxBounds, layout.strokeBoxSpread);
5124
+ copyAndSpread$2(layout.strokeBounds, layout.boxBounds, layout.strokeBoxSpread);
5041
5125
  },
5042
5126
  __updateRenderBounds() {
5043
5127
  const layout = this.__layout;
5044
- layout.renderSpread > 0 ? copyAndSpread$1(layout.renderBounds, layout.boxBounds, layout.renderSpread) : copy$5(layout.renderBounds, layout.strokeBounds);
5128
+ layout.renderSpread > 0 ? copyAndSpread$2(layout.renderBounds, layout.boxBounds, layout.renderSpread) : copy$5(layout.renderBounds, layout.strokeBounds);
5045
5129
  }
5046
5130
  };
5047
5131
 
@@ -5137,7 +5221,7 @@ const BranchRender = {
5137
5221
  const { LEAF, create } = IncrementId;
5138
5222
  const { toInnerPoint, toOuterPoint, multiplyParent } = MatrixHelper;
5139
5223
  const { toOuterOf } = BoundsHelper;
5140
- const { copy: copy$4 } = PointHelper;
5224
+ const { copy: copy$4, move: move$1 } = PointHelper;
5141
5225
  const { moveLocal, zoomOfLocal, rotateOfLocal, skewOfLocal, moveWorld, zoomOfWorld, rotateOfWorld, skewOfWorld, transform, transformWorld, setTransform, getFlipTransform, getLocalOrigin, getRelativeWorld, drop } = LeafHelper;
5142
5226
  let Leaf = class Leaf {
5143
5227
  get tag() { return this.__tag; }
@@ -5164,13 +5248,16 @@ let Leaf = class Leaf {
5164
5248
  get __ignoreHitWorld() { return (this.__hasMask || this.__hasEraser) && this.__.hitChildren; }
5165
5249
  get __inLazyBounds() { const { leafer } = this; return leafer && leafer.created && leafer.lazyBounds.hit(this.__world); }
5166
5250
  get pathInputed() { return this.__.__pathInputed; }
5167
- set event(map) { let event; for (let key in map)
5168
- event = map[key], event instanceof Array ? this.on(key, event[0], event[1]) : this.on(key, event); }
5251
+ set event(map) { this.on(map); }
5169
5252
  constructor(data) {
5170
5253
  this.innerId = create(LEAF);
5171
5254
  this.reset(data);
5255
+ if (this.__bubbleMap)
5256
+ this.__emitLifeEvent(ChildEvent.CREATED);
5172
5257
  }
5173
5258
  reset(data) {
5259
+ if (this.leafer)
5260
+ this.leafer.forceRender(this.__world);
5174
5261
  this.__world = { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0, x: 0, y: 0, width: 0, height: 0, scaleX: 1, scaleY: 1 };
5175
5262
  if (data !== null)
5176
5263
  this.__local = { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0, x: 0, y: 0, width: 0, height: 0 };
@@ -5192,12 +5279,12 @@ let Leaf = class Leaf {
5192
5279
  waitParent(item, bind) {
5193
5280
  if (bind)
5194
5281
  item = item.bind(bind);
5195
- this.parent ? item() : (this.__parentWait ? this.__parentWait.push(item) : this.__parentWait = [item]);
5282
+ this.parent ? item() : this.on(ChildEvent.ADD, item, 'once');
5196
5283
  }
5197
5284
  waitLeafer(item, bind) {
5198
5285
  if (bind)
5199
5286
  item = item.bind(bind);
5200
- this.leafer ? item() : (this.__leaferWait ? this.__leaferWait.push(item) : this.__leaferWait = [item]);
5287
+ this.leafer ? item() : this.on(ChildEvent.MOUNTED, item, 'once');
5201
5288
  }
5202
5289
  nextRender(item, bind, off) {
5203
5290
  this.leafer ? this.leafer.nextRender(item, bind, off) : this.waitLeafer(() => this.leafer.nextRender(item, bind, off));
@@ -5206,18 +5293,21 @@ let Leaf = class Leaf {
5206
5293
  this.nextRender(item, null, 'off');
5207
5294
  }
5208
5295
  __bindLeafer(leafer) {
5209
- if (this.isLeafer) {
5210
- if (leafer !== null)
5211
- leafer = this;
5212
- }
5296
+ if (this.isLeafer && leafer !== null)
5297
+ leafer = this;
5213
5298
  if (this.leafer && !leafer)
5214
5299
  this.leafer.leafs--;
5215
5300
  this.leafer = leafer;
5216
5301
  if (leafer) {
5217
5302
  leafer.leafs++;
5218
5303
  this.__level = this.parent ? this.parent.__level + 1 : 1;
5219
- if (this.__leaferWait)
5220
- WaitHelper.run(this.__leaferWait);
5304
+ if (this.animation)
5305
+ this.__runAnimation('in');
5306
+ if (this.__bubbleMap)
5307
+ this.__emitLifeEvent(ChildEvent.MOUNTED);
5308
+ }
5309
+ else {
5310
+ this.__emitLifeEvent(ChildEvent.UNMOUNTED);
5221
5311
  }
5222
5312
  if (this.isBranch) {
5223
5313
  const { children } = this;
@@ -5226,7 +5316,7 @@ let Leaf = class Leaf {
5226
5316
  }
5227
5317
  }
5228
5318
  }
5229
- set(_data) { }
5319
+ set(_data, _isTemp) { }
5230
5320
  get(_name) { return undefined; }
5231
5321
  setAttr(name, value) { this[name] = value; }
5232
5322
  getAttr(name) { return this[name]; }
@@ -5251,6 +5341,7 @@ let Leaf = class Leaf {
5251
5341
  findOne(_condition, _options) { return undefined; }
5252
5342
  findId(_id) { return undefined; }
5253
5343
  focus(_value) { }
5344
+ updateState() { }
5254
5345
  updateLayout() {
5255
5346
  this.__layout.update();
5256
5347
  }
@@ -5358,11 +5449,24 @@ let Leaf = class Leaf {
5358
5449
  if (relative)
5359
5450
  relative.worldToInner(to ? to : inner, null, distance);
5360
5451
  }
5452
+ getBoxPoint(world, relative, distance, change) {
5453
+ return this.getBoxPointByInner(this.getInnerPoint(world, relative, distance, change), null, null, true);
5454
+ }
5455
+ getBoxPointByInner(inner, _relative, _distance, change) {
5456
+ const point = change ? inner : Object.assign({}, inner), { x, y } = this.boxBounds;
5457
+ move$1(point, -x, -y);
5458
+ return point;
5459
+ }
5361
5460
  getInnerPoint(world, relative, distance, change) {
5362
5461
  const point = change ? world : {};
5363
5462
  this.worldToInner(world, point, distance, relative);
5364
5463
  return point;
5365
5464
  }
5465
+ getInnerPointByBox(box, _relative, _distance, change) {
5466
+ const point = change ? box : Object.assign({}, box), { x, y } = this.boxBounds;
5467
+ move$1(point, x, y);
5468
+ return point;
5469
+ }
5366
5470
  getInnerPointByLocal(local, _relative, distance, change) {
5367
5471
  return this.getInnerPoint(local, this.parent, distance, change);
5368
5472
  }
@@ -5374,20 +5478,23 @@ let Leaf = class Leaf {
5374
5478
  getLocalPointByInner(inner, _relative, distance, change) {
5375
5479
  return this.getWorldPoint(inner, this.parent, distance, change);
5376
5480
  }
5481
+ getPagePoint(world, relative, distance, change) {
5482
+ const layer = this.leafer ? this.leafer.zoomLayer : this;
5483
+ return layer.getInnerPoint(world, relative, distance, change);
5484
+ }
5377
5485
  getWorldPoint(inner, relative, distance, change) {
5378
5486
  const point = change ? inner : {};
5379
5487
  this.innerToWorld(inner, point, distance, relative);
5380
5488
  return point;
5381
5489
  }
5490
+ getWorldPointByBox(box, relative, distance, change) {
5491
+ return this.getWorldPoint(this.getInnerPointByBox(box, null, null, change), relative, distance, true);
5492
+ }
5382
5493
  getWorldPointByLocal(local, relative, distance, change) {
5383
5494
  const point = change ? local : {};
5384
5495
  this.localToWorld(local, point, distance, relative);
5385
5496
  return point;
5386
5497
  }
5387
- getPagePoint(world, relative, distance, change) {
5388
- const layer = this.leafer ? this.leafer.zoomLayer : this;
5389
- return layer.getInnerPoint(world, relative, distance, change);
5390
- }
5391
5498
  getWorldPointByPage(page, relative, distance, change) {
5392
5499
  const layer = this.leafer ? this.leafer.zoomLayer : this;
5393
5500
  return layer.getWorldPoint(page, relative, distance, change);
@@ -5401,6 +5508,9 @@ let Leaf = class Leaf {
5401
5508
  move(x, y) {
5402
5509
  moveLocal(this, x, y);
5403
5510
  }
5511
+ moveInner(x, y) {
5512
+ moveWorld(this, x, y, true);
5513
+ }
5404
5514
  scaleOf(origin, scaleX, scaleY, resize) {
5405
5515
  zoomOfLocal(this, getLocalOrigin(this, origin), scaleX, scaleY, resize);
5406
5516
  }
@@ -5453,6 +5563,17 @@ let Leaf = class Leaf {
5453
5563
  __drawRenderPath(_canvas) { }
5454
5564
  __updatePath() { }
5455
5565
  __updateRenderPath() { }
5566
+ getMotionPathData() {
5567
+ return needPlugin('path');
5568
+ }
5569
+ getMotionPoint(_motionDistance) {
5570
+ return needPlugin('path');
5571
+ }
5572
+ getMotionTotal() {
5573
+ return 0;
5574
+ }
5575
+ __updateMotionPath() { }
5576
+ __runAnimation(_type, _complete) { }
5456
5577
  __updateSortChildren() { }
5457
5578
  add(_child, _index) { }
5458
5579
  remove(_child, destroy) {
@@ -5478,6 +5599,10 @@ let Leaf = class Leaf {
5478
5599
  fn = boundsType;
5479
5600
  fn(defaultValue)(this.prototype, attrName);
5480
5601
  }
5602
+ __emitLifeEvent(type) {
5603
+ if (this.hasEvent(type))
5604
+ this.emitEvent(new ChildEvent(type, this, this.parent));
5605
+ }
5481
5606
  destroy() {
5482
5607
  if (!this.destroyed) {
5483
5608
  const { parent } = this;
@@ -5485,11 +5610,10 @@ let Leaf = class Leaf {
5485
5610
  this.remove();
5486
5611
  if (this.children)
5487
5612
  this.removeAll(true);
5488
- if (this.hasEvent(ChildEvent.DESTROY))
5489
- this.emitEvent(new ChildEvent(ChildEvent.DESTROY, this, parent));
5613
+ this.__emitLifeEvent(ChildEvent.DESTROY);
5490
5614
  this.__.destroy();
5491
5615
  this.__layout.destroy();
5492
- this.__captureMap = this.__bubbleMap = this.__parentWait = this.__leaferWait = null;
5616
+ this.destroyEventer();
5493
5617
  this.destroyed = true;
5494
5618
  }
5495
5619
  }
@@ -5555,8 +5679,8 @@ let Branch = class Branch extends Leaf {
5555
5679
  this.__.__childBranchNumber = (this.__.__childBranchNumber || 0) + 1;
5556
5680
  child.__layout.boxChanged || child.__layout.boxChange();
5557
5681
  child.__layout.matrixChanged || child.__layout.matrixChange();
5558
- if (child.__parentWait)
5559
- WaitHelper.run(child.__parentWait);
5682
+ if (child.__bubbleMap)
5683
+ child.__emitLifeEvent(ChildEvent.ADD);
5560
5684
  if (this.leafer) {
5561
5685
  child.__bindLeafer(this.leafer);
5562
5686
  if (this.leafer.created)
@@ -5569,16 +5693,10 @@ let Branch = class Branch extends Leaf {
5569
5693
  }
5570
5694
  remove(child, destroy) {
5571
5695
  if (child) {
5572
- const index = this.children.indexOf(child);
5573
- if (index > -1) {
5574
- this.children.splice(index, 1);
5575
- if (child.isBranch)
5576
- this.__.__childBranchNumber = (this.__.__childBranchNumber || 1) - 1;
5577
- this.__preRemove();
5578
- this.__realRemoveChild(child);
5579
- if (destroy)
5580
- child.destroy();
5581
- }
5696
+ if (child.animationOut)
5697
+ child.__runAnimation('out', () => this.__remove(child, destroy));
5698
+ else
5699
+ this.__remove(child, destroy);
5582
5700
  }
5583
5701
  else if (child === undefined) {
5584
5702
  super.remove(null, destroy);
@@ -5600,6 +5718,18 @@ let Branch = class Branch extends Leaf {
5600
5718
  clear() {
5601
5719
  this.removeAll(true);
5602
5720
  }
5721
+ __remove(child, destroy) {
5722
+ const index = this.children.indexOf(child);
5723
+ if (index > -1) {
5724
+ this.children.splice(index, 1);
5725
+ if (child.isBranch)
5726
+ this.__.__childBranchNumber = (this.__.__childBranchNumber || 1) - 1;
5727
+ this.__preRemove();
5728
+ this.__realRemoveChild(child);
5729
+ if (destroy)
5730
+ child.destroy();
5731
+ }
5732
+ }
5603
5733
  __preRemove() {
5604
5734
  if (this.__hasMask)
5605
5735
  this.__updateMask();
@@ -5609,6 +5739,7 @@ let Branch = class Branch extends Leaf {
5609
5739
  this.__layout.affectChildrenSort && this.__layout.childrenSortChange();
5610
5740
  }
5611
5741
  __realRemoveChild(child) {
5742
+ child.__emitLifeEvent(ChildEvent.REMOVE);
5612
5743
  child.parent = null;
5613
5744
  if (this.leafer) {
5614
5745
  child.__bindLeafer(null);
@@ -5621,8 +5752,6 @@ let Branch = class Branch extends Leaf {
5621
5752
  }
5622
5753
  __emitChildEvent(type, child) {
5623
5754
  const event = new ChildEvent(type, child, this);
5624
- if (child.hasEvent(type))
5625
- child.emitEvent(event);
5626
5755
  if (this.hasEvent(type) && !this.isLeafer)
5627
5756
  this.emitEvent(event);
5628
5757
  this.leafer.emitEvent(event);
@@ -5785,8 +5914,7 @@ class LeafLevelList {
5785
5914
  }
5786
5915
  }
5787
5916
 
5788
- const version = "1.0.1";
5789
- const inviteCode = {};
5917
+ const version = "1.0.3";
5790
5918
 
5791
5919
  const debug$7 = Debug.get('LeaferCanvas');
5792
5920
  class LeaferCanvas extends LeaferCanvasBase {
@@ -6186,9 +6314,13 @@ function updateBounds(boundsList) {
6186
6314
  });
6187
6315
  }
6188
6316
  function updateChange(updateList) {
6317
+ let layout;
6189
6318
  updateList.list.forEach(leaf => {
6190
- if (leaf.__layout.opacityChanged)
6319
+ layout = leaf.__layout;
6320
+ if (layout.opacityChanged)
6191
6321
  updateAllWorldOpacity(leaf);
6322
+ if (layout.stateStyleChanged)
6323
+ setTimeout(() => layout.stateStyleChanged && leaf.updateState());
6192
6324
  leaf.__updateChange();
6193
6325
  });
6194
6326
  }
@@ -6554,7 +6686,6 @@ class Renderer {
6554
6686
  Platform.requestRender(() => {
6555
6687
  this.FPS = Math.min(60, Math.ceil(1000 / (Date.now() - startTime)));
6556
6688
  if (this.running) {
6557
- this.target.emit(AnimateEvent.FRAME);
6558
6689
  if (this.changed && this.canvas.view)
6559
6690
  this.render();
6560
6691
  this.target.emit(RenderEvent.NEXT);
@@ -6899,36 +7030,6 @@ Object.assign(Creator, {
6899
7030
  });
6900
7031
  Platform.layout = Layouter.fullLayout;
6901
7032
 
6902
- const TextConvert = {};
6903
- const ColorConvert = {};
6904
- const PathArrow = {};
6905
- const Paint = {};
6906
- const PaintImage = {};
6907
- const PaintGradient = {};
6908
- const Effect = {};
6909
- const Export = {};
6910
- const State = {};
6911
-
6912
- function stateType(defaultValue) {
6913
- return decorateLeafAttr(defaultValue, (key) => attr({
6914
- set(value) {
6915
- this.__setAttr(key, value);
6916
- this.waitLeafer(() => { if (State.setStyle)
6917
- State.setStyle(this, key + 'Style', value); });
6918
- }
6919
- }));
6920
- }
6921
- function arrowType(defaultValue) {
6922
- return decorateLeafAttr(defaultValue, (key) => attr({
6923
- set(value) {
6924
- if (this.__setAttr(key, value)) {
6925
- const data = this.__;
6926
- data.__useArrow = data.startArrow !== 'none' || data.endArrow !== 'none';
6927
- doStrokeType(this);
6928
- }
6929
- }
6930
- }));
6931
- }
6932
7033
  function effectType(defaultValue) {
6933
7034
  return decorateLeafAttr(defaultValue, (key) => attr({
6934
7035
  set(value) {
@@ -6963,10 +7064,33 @@ function zoomLayerType() {
6963
7064
  };
6964
7065
  }
6965
7066
 
7067
+ const TextConvert = {};
7068
+ const ColorConvert = {};
7069
+ const PathArrow = {};
7070
+ const Paint = {};
7071
+ const PaintImage = {};
7072
+ const PaintGradient = {};
7073
+ const Effect = {};
7074
+ const Export = {};
7075
+ const State = {
7076
+ setStyleName(_leaf, _styleName, _value) { return needPlugin('state'); },
7077
+ set(_leaf, _stateName) { return needPlugin('state'); }
7078
+ };
7079
+ const Transition = {
7080
+ list: {},
7081
+ register(attrName, fn) {
7082
+ Transition.list[attrName] = fn;
7083
+ },
7084
+ get(attrName) {
7085
+ return Transition.list[attrName];
7086
+ }
7087
+ };
7088
+
6966
7089
  const { parse } = PathConvert;
6967
7090
  const emptyPaint = {};
6968
7091
  const debug$4 = Debug.get('UIData');
6969
7092
  class UIData extends LeafData {
7093
+ get scale() { const { scaleX, scaleY } = this; return scaleX !== scaleY ? { x: scaleX, y: scaleY } : scaleX; }
6970
7094
  get __strokeWidth() {
6971
7095
  const { strokeWidth, strokeWidthFixed } = this;
6972
7096
  if (strokeWidthFixed) {
@@ -6985,9 +7109,10 @@ class UIData extends LeafData {
6985
7109
  get __autoSide() { return !this._width || !this._height; }
6986
7110
  get __autoSize() { return !this._width && !this._height; }
6987
7111
  setVisible(value) {
6988
- if (this.__leaf.leafer)
6989
- this.__leaf.leafer.watcher.hasVisible = true;
6990
7112
  this._visible = value;
7113
+ const { leafer } = this.__leaf;
7114
+ if (leafer)
7115
+ leafer.watcher.hasVisible = true;
6991
7116
  }
6992
7117
  setWidth(value) {
6993
7118
  if (value < 0) {
@@ -7111,6 +7236,11 @@ class BoxData extends GroupData {
7111
7236
  }
7112
7237
 
7113
7238
  class LeaferData extends GroupData {
7239
+ __getInputData() {
7240
+ const data = super.__getInputData();
7241
+ canvasSizeAttrs.forEach(key => delete data[key]);
7242
+ return data;
7243
+ }
7114
7244
  }
7115
7245
 
7116
7246
  class FrameData extends BoxData {
@@ -7173,7 +7303,7 @@ class ImageData extends RectData {
7173
7303
  __setImageFill(value) {
7174
7304
  if (this.__leaf.image)
7175
7305
  this.__leaf.image = null;
7176
- this.fill = value ? { type: 'image', mode: 'strench', url: value } : undefined;
7306
+ this.fill = value ? { type: 'image', mode: 'stretch', url: value } : undefined;
7177
7307
  }
7178
7308
  __getData() {
7179
7309
  const data = super.__getData();
@@ -7188,6 +7318,11 @@ class ImageData extends RectData {
7188
7318
  }
7189
7319
 
7190
7320
  class CanvasData extends RectData {
7321
+ __getInputData() {
7322
+ const data = super.__getInputData();
7323
+ data.url = this.__leaf.canvas.toDataURL('image/png');
7324
+ return data;
7325
+ }
7191
7326
  }
7192
7327
 
7193
7328
  const UIBounds = {
@@ -7358,19 +7493,8 @@ var UI_1;
7358
7493
  let UI = UI_1 = class UI extends Leaf {
7359
7494
  get app() { return this.leafer && this.leafer.app; }
7360
7495
  get isFrame() { return false; }
7361
- set scale(value) {
7362
- if (typeof value === 'number') {
7363
- this.scaleX = this.scaleY = value;
7364
- }
7365
- else {
7366
- this.scaleX = value.x;
7367
- this.scaleY = value.y;
7368
- }
7369
- }
7370
- get scale() {
7371
- const { scaleX, scaleY } = this;
7372
- return scaleX !== scaleY ? { x: scaleX, y: scaleY } : scaleX;
7373
- }
7496
+ set scale(value) { MathHelper.assignScale(this, value); }
7497
+ get scale() { return this.__.scale; }
7374
7498
  get pen() {
7375
7499
  const { path } = this.__;
7376
7500
  pen.set(this.path = path || []);
@@ -7385,8 +7509,15 @@ let UI = UI_1 = class UI extends Leaf {
7385
7509
  super(data);
7386
7510
  }
7387
7511
  reset(_data) { }
7388
- set(data) {
7389
- Object.assign(this, data);
7512
+ set(data, isTemp) {
7513
+ if (isTemp) {
7514
+ this.lockNormalStyle = true;
7515
+ Object.assign(this, data);
7516
+ this.lockNormalStyle = false;
7517
+ }
7518
+ else {
7519
+ Object.assign(this, data);
7520
+ }
7390
7521
  }
7391
7522
  get(name) {
7392
7523
  return typeof name === 'string' ? this.__.__getInput(name) : this.__.__getInputData(name);
@@ -7449,11 +7580,18 @@ let UI = UI_1 = class UI extends Leaf {
7449
7580
  drawer.rect(x, y, width, height);
7450
7581
  }
7451
7582
  }
7583
+ animate(_keyframe, _options, _type, _isTemp) {
7584
+ return needPlugin('animate');
7585
+ }
7586
+ killAnimate(_type) { }
7452
7587
  export(filename, options) {
7453
7588
  return Export.export(this, filename, options);
7454
7589
  }
7455
- clone() {
7456
- return UI_1.one(this.toJSON());
7590
+ clone(newData) {
7591
+ const json = this.toJSON();
7592
+ if (newData)
7593
+ Object.assign(json, newData);
7594
+ return UI_1.one(json);
7457
7595
  }
7458
7596
  static one(data, x, y, width, height) {
7459
7597
  return UICreator.get(data.tag || this.prototype.__tag, data, x, y, width, height);
@@ -7469,6 +7607,8 @@ let UI = UI_1 = class UI extends Leaf {
7469
7607
  static setEditInner(_editorName) { }
7470
7608
  destroy() {
7471
7609
  this.fill = this.stroke = null;
7610
+ if (this.__animate)
7611
+ this.killAnimate();
7472
7612
  super.destroy();
7473
7613
  }
7474
7614
  };
@@ -7496,12 +7636,6 @@ __decorate([
7496
7636
  __decorate([
7497
7637
  visibleType(true)
7498
7638
  ], UI.prototype, "visible", void 0);
7499
- __decorate([
7500
- stateType(false)
7501
- ], UI.prototype, "selected", void 0);
7502
- __decorate([
7503
- stateType(false)
7504
- ], UI.prototype, "disabled", void 0);
7505
7639
  __decorate([
7506
7640
  surfaceType(false)
7507
7641
  ], UI.prototype, "locked", void 0);
@@ -7574,45 +7708,9 @@ __decorate([
7574
7708
  __decorate([
7575
7709
  pathType(true)
7576
7710
  ], UI.prototype, "closed", void 0);
7577
- __decorate([
7578
- autoLayoutType(false)
7579
- ], UI.prototype, "flow", void 0);
7580
7711
  __decorate([
7581
7712
  boundsType(0)
7582
7713
  ], UI.prototype, "padding", void 0);
7583
- __decorate([
7584
- boundsType(0)
7585
- ], UI.prototype, "gap", void 0);
7586
- __decorate([
7587
- boundsType('top-left')
7588
- ], UI.prototype, "flowAlign", void 0);
7589
- __decorate([
7590
- boundsType(false)
7591
- ], UI.prototype, "flowWrap", void 0);
7592
- __decorate([
7593
- boundsType('box')
7594
- ], UI.prototype, "itemBox", void 0);
7595
- __decorate([
7596
- boundsType(true)
7597
- ], UI.prototype, "inFlow", void 0);
7598
- __decorate([
7599
- boundsType()
7600
- ], UI.prototype, "autoWidth", void 0);
7601
- __decorate([
7602
- boundsType()
7603
- ], UI.prototype, "autoHeight", void 0);
7604
- __decorate([
7605
- boundsType()
7606
- ], UI.prototype, "lockRatio", void 0);
7607
- __decorate([
7608
- boundsType()
7609
- ], UI.prototype, "autoBox", void 0);
7610
- __decorate([
7611
- boundsType()
7612
- ], UI.prototype, "widthRange", void 0);
7613
- __decorate([
7614
- boundsType()
7615
- ], UI.prototype, "heightRange", void 0);
7616
7714
  __decorate([
7617
7715
  dataType(false)
7618
7716
  ], UI.prototype, "draggable", void 0);
@@ -7676,12 +7774,6 @@ __decorate([
7676
7774
  __decorate([
7677
7775
  strokeType(10)
7678
7776
  ], UI.prototype, "miterLimit", void 0);
7679
- __decorate([
7680
- arrowType('none')
7681
- ], UI.prototype, "startArrow", void 0);
7682
- __decorate([
7683
- arrowType('none')
7684
- ], UI.prototype, "endArrow", void 0);
7685
7777
  __decorate([
7686
7778
  pathType(0)
7687
7779
  ], UI.prototype, "cornerRadius", void 0);
@@ -7703,24 +7795,6 @@ __decorate([
7703
7795
  __decorate([
7704
7796
  effectType()
7705
7797
  ], UI.prototype, "grayscale", void 0);
7706
- __decorate([
7707
- dataType()
7708
- ], UI.prototype, "normalStyle", void 0);
7709
- __decorate([
7710
- dataType()
7711
- ], UI.prototype, "hoverStyle", void 0);
7712
- __decorate([
7713
- dataType()
7714
- ], UI.prototype, "pressStyle", void 0);
7715
- __decorate([
7716
- dataType()
7717
- ], UI.prototype, "focusStyle", void 0);
7718
- __decorate([
7719
- dataType()
7720
- ], UI.prototype, "selectedStyle", void 0);
7721
- __decorate([
7722
- dataType()
7723
- ], UI.prototype, "disabledStyle", void 0);
7724
7798
  __decorate([
7725
7799
  dataType({})
7726
7800
  ], UI.prototype, "data", void 0);
@@ -7747,7 +7821,7 @@ let Group = class Group extends UI {
7747
7821
  if (!this.children)
7748
7822
  this.children = [];
7749
7823
  }
7750
- set(data) {
7824
+ set(data, isTemp) {
7751
7825
  if (data.children) {
7752
7826
  const { children } = data;
7753
7827
  delete data.children;
@@ -7757,7 +7831,7 @@ let Group = class Group extends UI {
7757
7831
  else {
7758
7832
  this.clear();
7759
7833
  }
7760
- super.set(data);
7834
+ super.set(data, isTemp);
7761
7835
  let child;
7762
7836
  children.forEach(childData => {
7763
7837
  child = childData.__ ? childData : UICreator.get(childData.tag, childData);
@@ -7766,7 +7840,7 @@ let Group = class Group extends UI {
7766
7840
  data.children = children;
7767
7841
  }
7768
7842
  else {
7769
- super.set(data);
7843
+ super.set(data, isTemp);
7770
7844
  }
7771
7845
  }
7772
7846
  toJSON(options) {
@@ -8093,13 +8167,20 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8093
8167
  }
8094
8168
  }
8095
8169
  zoom(_zoomType, _padding, _fixedScale) {
8096
- return debug$3.error('need @leafer-in/view');
8170
+ return needPlugin('view');
8097
8171
  }
8098
8172
  getValidMove(moveX, moveY) { return { x: moveX, y: moveY }; }
8099
8173
  getValidScale(changeScale) { return changeScale; }
8100
8174
  getWorldPointByClient(clientPoint, updateClient) {
8101
8175
  return this.interaction && this.interaction.getLocal(clientPoint, updateClient);
8102
8176
  }
8177
+ getPagePointByClient(clientPoint, updateClient) {
8178
+ return this.getPagePoint(this.getWorldPointByClient(clientPoint, updateClient));
8179
+ }
8180
+ updateClientBounds() {
8181
+ this.canvas && this.canvas.updateClientBounds();
8182
+ }
8183
+ receiveEvent(_event) { }
8103
8184
  __checkUpdateLayout() {
8104
8185
  this.__layout.update();
8105
8186
  }
@@ -8183,7 +8264,7 @@ Rect = __decorate([
8183
8264
  const rect$1 = Rect.prototype;
8184
8265
  const group$1 = Group.prototype;
8185
8266
  const childrenRenderBounds = {};
8186
- const { copy: copy$3, add, includes: includes$1 } = BoundsHelper;
8267
+ const { copy: copy$3, add, includes: includes$1, copyAndSpread: copyAndSpread$1 } = BoundsHelper;
8187
8268
  let Box = class Box extends Group {
8188
8269
  get __tag() { return 'Box'; }
8189
8270
  get isBranchLeaf() { return true; }
@@ -8197,20 +8278,23 @@ let Box = class Box extends Group {
8197
8278
  return this.__updateRectRenderSpread() || -1;
8198
8279
  }
8199
8280
  __updateRectBoxBounds() { }
8200
- __updateBoxBounds() {
8281
+ __updateBoxBounds(secondLayout) {
8201
8282
  const data = this.__;
8202
8283
  if (this.children.length) {
8203
8284
  if (data.__autoSide) {
8204
8285
  if (this.leafer && this.leafer.ready)
8205
8286
  this.leafer.layouter.addExtra(this);
8206
8287
  super.__updateBoxBounds();
8288
+ const { boxBounds } = this.__layout;
8207
8289
  if (!data.__autoSize) {
8208
- const b = this.__layout.boxBounds;
8209
- if (!data.__autoWidth)
8210
- b.height += b.y, b.width = data.width, b.x = b.y = 0;
8211
- if (!data.__autoHeight)
8212
- b.width += b.x, b.height = data.height, b.y = b.x = 0;
8290
+ if (data.__autoWidth)
8291
+ boxBounds.width += boxBounds.x, boxBounds.height = data.height, boxBounds.y = boxBounds.x = 0;
8292
+ else
8293
+ boxBounds.height += boxBounds.y, boxBounds.width = data.width, boxBounds.x = boxBounds.y = 0;
8213
8294
  }
8295
+ if (secondLayout && data.flow && data.padding)
8296
+ copyAndSpread$1(boxBounds, boxBounds, data.padding, false, data.__autoSize ? null : (data.__autoWidth ? 'width' : 'height'));
8297
+ this.__updateNaturalSize();
8214
8298
  }
8215
8299
  else {
8216
8300
  this.__updateRectBoxBounds();
@@ -8230,13 +8314,13 @@ let Box = class Box extends Group {
8230
8314
  super.__updateRenderBounds();
8231
8315
  copy$3(childrenRenderBounds, renderBounds);
8232
8316
  this.__updateRectRenderBounds();
8233
- isOverflow = !includes$1(renderBounds, childrenRenderBounds) || undefined;
8317
+ isOverflow = !includes$1(renderBounds, childrenRenderBounds) || !this.pathInputed || !this.__.cornerRadius;
8234
8318
  }
8235
8319
  else {
8236
8320
  this.__updateRectRenderBounds();
8237
8321
  }
8238
8322
  this.isOverflow !== isOverflow && (this.isOverflow = isOverflow);
8239
- if (isOverflow && !(this.__.__drawAfterFill = this.__.overflow === 'hide'))
8323
+ if (!(this.__.__drawAfterFill = this.__.overflow === 'hide') && isOverflow)
8240
8324
  add(renderBounds, childrenRenderBounds);
8241
8325
  }
8242
8326
  __updateRectRenderBounds() { }
@@ -8570,14 +8654,26 @@ __decorate([
8570
8654
  Image$1 = __decorate([
8571
8655
  registerUI()
8572
8656
  ], Image$1);
8657
+ const MyImage = Image$1;
8573
8658
 
8574
8659
  let Canvas = class Canvas extends Rect {
8575
8660
  get __tag() { return 'Canvas'; }
8661
+ get ready() { return !this.url; }
8576
8662
  constructor(data) {
8577
8663
  super(data);
8578
8664
  this.canvas = Creator.canvas(this.__);
8579
8665
  this.context = this.canvas.context;
8580
8666
  this.__.__isCanvas = this.__.__drawAfterFill = true;
8667
+ if (data && data.url)
8668
+ this.drawImage(data.url);
8669
+ }
8670
+ drawImage(url) {
8671
+ new LeaferImage({ url }).load((image) => {
8672
+ this.context.drawImage(image.view, 0, 0);
8673
+ this.url = undefined;
8674
+ this.paint();
8675
+ this.emitEvent(new ImageEvent(ImageEvent.LOADED, { image }));
8676
+ });
8581
8677
  }
8582
8678
  draw(ui, offset, scale, rotation) {
8583
8679
  ui.__layout.update();
@@ -8594,19 +8690,18 @@ let Canvas = class Canvas extends Rect {
8594
8690
  this.paint();
8595
8691
  }
8596
8692
  paint() {
8597
- this.forceUpdate('fill');
8693
+ this.forceRender();
8598
8694
  }
8599
8695
  __drawAfterFill(canvas, _options) {
8600
- const origin = this.canvas.view;
8601
- const { width, height } = this;
8602
- if (this.__.cornerRadius || this.pathInputed) {
8696
+ const { width, height, cornerRadius } = this.__, { view } = this.canvas;
8697
+ if (cornerRadius || this.pathInputed) {
8603
8698
  canvas.save();
8604
8699
  canvas.clip();
8605
- canvas.drawImage(this.canvas.view, 0, 0, origin.width, origin.height, 0, 0, width, height);
8700
+ canvas.drawImage(view, 0, 0, view.width, view.height, 0, 0, width, height);
8606
8701
  canvas.restore();
8607
8702
  }
8608
8703
  else {
8609
- canvas.drawImage(this.canvas.view, 0, 0, origin.width, origin.height, 0, 0, width, height);
8704
+ canvas.drawImage(view, 0, 0, view.width, view.height, 0, 0, width, height);
8610
8705
  }
8611
8706
  }
8612
8707
  __updateSize() {
@@ -8636,7 +8731,7 @@ __decorate([
8636
8731
  resizeType(100)
8637
8732
  ], Canvas.prototype, "height", void 0);
8638
8733
  __decorate([
8639
- resizeType(Platform.devicePixelRatio)
8734
+ resizeType(1)
8640
8735
  ], Canvas.prototype, "pixelRatio", void 0);
8641
8736
  __decorate([
8642
8737
  resizeType(true)
@@ -8660,13 +8755,13 @@ let Text = class Text extends UI {
8660
8755
  super(data);
8661
8756
  }
8662
8757
  __drawHitPath(canvas) {
8663
- const { __lineHeight, __baseLine, __textDrawData: data } = this.__;
8758
+ const { __lineHeight, fontSize, __baseLine, __textDrawData: data } = this.__;
8664
8759
  canvas.beginPath();
8665
8760
  if (this.__.__letterSpacing < 0) {
8666
8761
  this.__drawPathByData(canvas);
8667
8762
  }
8668
8763
  else {
8669
- data.rows.forEach(row => canvas.rect(row.x, row.y - __baseLine, row.width, __lineHeight));
8764
+ data.rows.forEach(row => canvas.rect(row.x, row.y - __baseLine, row.width, __lineHeight < fontSize ? fontSize : __lineHeight));
8670
8765
  }
8671
8766
  }
8672
8767
  __drawPathByData(drawer, _data) {
@@ -8859,7 +8954,8 @@ let Pen = class Pen extends Group {
8859
8954
  drawPoints(_points, _curve, _close) { return this; }
8860
8955
  clearPath() { return this; }
8861
8956
  paint() {
8862
- this.pathElement.forceUpdate('path');
8957
+ if (!this.pathElement.__layout.boxChanged)
8958
+ this.pathElement.forceUpdate('path');
8863
8959
  }
8864
8960
  };
8865
8961
  __decorate([
@@ -8869,7 +8965,7 @@ __decorate([
8869
8965
  penPathType()
8870
8966
  ], Pen.prototype, "path", void 0);
8871
8967
  Pen = __decorate([
8872
- useModule(PathCreator, ['set', 'beginPath', 'path']),
8968
+ useModule(PathCreator, ['set', 'beginPath', 'path', 'paint']),
8873
8969
  registerUI()
8874
8970
  ], Pen);
8875
8971
  function penPathType() {
@@ -9048,21 +9144,29 @@ class UIEvent extends Event {
9048
9144
  constructor(params) {
9049
9145
  super(params.type);
9050
9146
  this.bubbles = true;
9147
+ this.getInner = this.getInnerPoint;
9148
+ this.getLocal = this.getLocalPoint;
9149
+ this.getPage = this.getPagePoint;
9051
9150
  Object.assign(this, params);
9052
9151
  }
9053
- getPage() {
9054
- return this.current.getPagePoint(this);
9152
+ getBoxPoint(relative) {
9153
+ if (!relative)
9154
+ relative = this.current;
9155
+ return relative.getBoxPoint(this);
9055
9156
  }
9056
- getInner(relative) {
9157
+ getInnerPoint(relative) {
9057
9158
  if (!relative)
9058
9159
  relative = this.current;
9059
9160
  return relative.getInnerPoint(this);
9060
9161
  }
9061
- getLocal(relative) {
9162
+ getLocalPoint(relative) {
9062
9163
  if (!relative)
9063
9164
  relative = this.current;
9064
9165
  return relative.getLocalPoint(this);
9065
9166
  }
9167
+ getPagePoint() {
9168
+ return this.current.getPagePoint(this);
9169
+ }
9066
9170
  static changeName(oldName, newName) {
9067
9171
  EventCreator.changeName(oldName, newName);
9068
9172
  }
@@ -9092,6 +9196,7 @@ PointerEvent.MENU_TAP = 'pointer.menu_tap';
9092
9196
  PointerEvent = __decorate([
9093
9197
  registerUIEvent()
9094
9198
  ], PointerEvent);
9199
+ const MyPointerEvent = PointerEvent;
9095
9200
 
9096
9201
  const move = {};
9097
9202
  let DragEvent = class DragEvent extends PointerEvent {
@@ -9169,7 +9274,7 @@ let DragEvent = class DragEvent extends PointerEvent {
9169
9274
  }
9170
9275
  getPageBounds() {
9171
9276
  const total = this.getPageTotal();
9172
- const start = this.getPage();
9277
+ const start = this.getPagePoint();
9173
9278
  const bounds = {};
9174
9279
  BoundsHelper.set(bounds, start.x - total.x, start.y - total.y, total.x, total.y);
9175
9280
  BoundsHelper.unsign(bounds);
@@ -9191,6 +9296,7 @@ DragEvent.LEAVE = 'drag.leave';
9191
9296
  DragEvent = __decorate([
9192
9297
  registerUIEvent()
9193
9298
  ], DragEvent);
9299
+ const MyDragEvent = DragEvent;
9194
9300
 
9195
9301
  let DropEvent = class DropEvent extends PointerEvent {
9196
9302
  static setList(data) {
@@ -9272,36 +9378,32 @@ function addInteractionWindow(leafer) {
9272
9378
 
9273
9379
  function document$1(leafer) {
9274
9380
  addInteractionWindow(leafer);
9275
- leafer.config.move.scroll = 'limit';
9276
- leafer.config.zoom.min = 1;
9381
+ const { move, zoom } = leafer.config;
9382
+ move.scroll = 'limit';
9383
+ zoom.min = 1;
9384
+ }
9385
+
9386
+ function block(leafer) {
9387
+ const { config } = leafer;
9388
+ (config.wheel || (config.wheel = {})).preventDefault = false;
9389
+ (config.touch || (config.touch = {})).preventDefault = 'auto';
9277
9390
  }
9278
9391
 
9279
9392
  const debug$2 = Debug.get('LeaferTypeCreator');
9280
9393
  const LeaferTypeCreator = {
9281
9394
  list: {},
9282
9395
  register(name, fn) {
9283
- if (list[name]) {
9284
- debug$2.repeat(name);
9285
- }
9286
- else {
9287
- list[name] = fn;
9288
- }
9396
+ list[name] ? debug$2.repeat(name) : list[name] = fn;
9289
9397
  },
9290
9398
  run(name, leafer) {
9291
9399
  const fn = list[name];
9292
- if (fn) {
9293
- fn(leafer);
9294
- }
9295
- else {
9296
- debug$2.error('no', name);
9297
- }
9400
+ fn && fn(leafer);
9298
9401
  }
9299
9402
  };
9300
9403
  const { list, register } = LeaferTypeCreator;
9301
- register('draw', () => { });
9302
- register('custom', () => { });
9303
9404
  register('design', addInteractionWindow);
9304
9405
  register('document', document$1);
9406
+ register('block', block);
9305
9407
 
9306
9408
  const leafer = Leafer.prototype;
9307
9409
  leafer.initType = function (type) {
@@ -9490,7 +9592,13 @@ const InteractionHelper = {
9490
9592
  find.add(list[i]);
9491
9593
  }
9492
9594
  return find;
9493
- }
9595
+ },
9596
+ pathCanDrag(path) {
9597
+ return path && path.list.some(item => item.draggable || item.editable || (!item.isLeafer && item.hasEvent(DragEvent.DRAG)));
9598
+ },
9599
+ pathHasOutside(path) {
9600
+ return path && path.list.some(item => item.isOutside);
9601
+ },
9494
9602
  };
9495
9603
  const I = InteractionHelper;
9496
9604
 
@@ -9750,7 +9858,7 @@ function emitEvent(leaf, type, data, capture, excludePath) {
9750
9858
  if (leaf.destroyed)
9751
9859
  return false;
9752
9860
  if (leaf.__.hitSelf && !exclude(leaf, excludePath)) {
9753
- if (State.updateEventStyle)
9861
+ if (State.updateEventStyle && !capture)
9754
9862
  State.updateEventStyle(leaf, type);
9755
9863
  if (leaf.hasEvent(type, capture)) {
9756
9864
  data.phase = capture ? 1 : ((leaf === data.target) ? 2 : 3);
@@ -9800,15 +9908,18 @@ const config = {
9800
9908
  swipeDistance: 20,
9801
9909
  preventDefaultMenu: true
9802
9910
  },
9911
+ touch: {
9912
+ preventDefault: true
9913
+ },
9803
9914
  cursor: true,
9804
9915
  keyEvent: true
9805
9916
  };
9806
9917
 
9807
- const { pathHasEventType, getMoveEventData: getMoveEventData$1, getZoomEventData: getZoomEventData$1, getRotateEventData: getRotateEventData$1 } = InteractionHelper;
9918
+ const { pathHasEventType, getMoveEventData: getMoveEventData$1, getZoomEventData: getZoomEventData$1, getRotateEventData: getRotateEventData$1, pathCanDrag: pathCanDrag$1, pathHasOutside } = InteractionHelper;
9808
9919
  class InteractionBase {
9809
9920
  get dragging() { return this.dragger.dragging; }
9810
9921
  get transforming() { return this.transformer.transforming; }
9811
- get moveMode() { return this.config.move.drag || this.isHoldSpaceKey || this.isHoldMiddleKey || (this.isHoldRightKey && this.dragger.moving) || this.isDragEmpty; }
9922
+ get moveMode() { return this.config.move.drag === true || this.isHoldSpaceKey || this.isHoldMiddleKey || (this.isHoldRightKey && this.dragger.moving) || this.isDragEmpty; }
9812
9923
  get canHover() { return this.config.pointer.hover && !this.config.mobile; }
9813
9924
  get isDragEmpty() { return this.config.move.dragEmpty && this.isRootPath(this.hoverData) && (!this.downData || this.isRootPath(this.downData)); }
9814
9925
  get isMobileDragEmpty() { return this.config.move.dragEmpty && !this.canHover && this.downData && this.isTreePath(this.downData); }
@@ -9817,7 +9928,7 @@ class InteractionBase {
9817
9928
  get isHoldSpaceKey() { return this.config.move.holdSpaceKey && Keyboard.isHoldSpaceKey(); }
9818
9929
  get hitRadius() { return this.config.pointer.hitRadius; }
9819
9930
  constructor(target, canvas, selector, userConfig) {
9820
- this.config = config;
9931
+ this.config = DataHelper.clone(config);
9821
9932
  this.tapCount = 0;
9822
9933
  this.downKeyMap = {};
9823
9934
  this.target = target;
@@ -9852,7 +9963,7 @@ class InteractionBase {
9852
9963
  this.tapWait();
9853
9964
  this.longPressWait(data);
9854
9965
  }
9855
- this.waitMenuTap = PointerButton.right(data);
9966
+ this.waitRightTap = PointerButton.right(data);
9856
9967
  this.dragger.setDragData(data);
9857
9968
  if (!this.isHoldRightKey)
9858
9969
  this.updateCursor(data);
@@ -9880,7 +9991,7 @@ class InteractionBase {
9880
9991
  if (canDrag) {
9881
9992
  if (this.waitTap)
9882
9993
  this.pointerWaitCancel();
9883
- this.waitMenuTap = false;
9994
+ this.waitRightTap = false;
9884
9995
  }
9885
9996
  this.dragger.checkDrag(data, canDrag);
9886
9997
  }
@@ -9934,10 +10045,15 @@ class InteractionBase {
9934
10045
  menu(data) {
9935
10046
  this.findPath(data);
9936
10047
  this.emit(PointerEvent.MENU, data);
10048
+ this.waitMenuTap = true;
10049
+ if (!this.downData && this.waitRightTap)
10050
+ this.menuTap(data);
9937
10051
  }
9938
10052
  menuTap(data) {
9939
- if (this.waitMenuTap)
10053
+ if (this.waitRightTap && this.waitMenuTap) {
9940
10054
  this.emit(PointerEvent.MENU_TAP, data);
10055
+ this.waitRightTap = this.waitMenuTap = false;
10056
+ }
9941
10057
  }
9942
10058
  move(data) {
9943
10059
  this.transformer.move(data);
@@ -10069,11 +10185,11 @@ class InteractionBase {
10069
10185
  return app.editor && (!data.path.has(app.editor) && data.path.has(app.tree) && !data.target.syncEventer);
10070
10186
  }
10071
10187
  checkPath(data, useDefaultPath) {
10072
- if (useDefaultPath || this.canMove(data))
10188
+ if (useDefaultPath || (this.moveMode && !pathHasOutside(data.path)))
10073
10189
  data.path = this.defaultPath;
10074
10190
  }
10075
10191
  canMove(data) {
10076
- return this.moveMode && data && data.path.list.every(item => !item.isOutside);
10192
+ return data && (this.moveMode || (this.config.move.drag === 'auto' && !pathCanDrag$1(data.path))) && !pathHasOutside(data.path);
10077
10193
  }
10078
10194
  isDrag(leaf) {
10079
10195
  return this.dragger.getList().has(leaf);
@@ -10491,7 +10607,7 @@ const KeyEventHelper = {
10491
10607
  }
10492
10608
  };
10493
10609
 
10494
- const { getMoveEventData, getZoomEventData, getRotateEventData } = InteractionHelper;
10610
+ const { getMoveEventData, getZoomEventData, getRotateEventData, pathCanDrag } = InteractionHelper;
10495
10611
  class Interaction extends InteractionBase {
10496
10612
  __listenEvents() {
10497
10613
  super.__listenEvents();
@@ -10624,7 +10740,11 @@ class Interaction extends InteractionBase {
10624
10740
  this.pointerCancel();
10625
10741
  }
10626
10742
  onTouchStart(e) {
10627
- e.preventDefault();
10743
+ const touch = PointerEventHelper.getTouch(e);
10744
+ const local = this.getLocal(touch, true);
10745
+ const { preventDefault } = this.config.touch;
10746
+ if (preventDefault === true || (preventDefault === 'auto' && pathCanDrag(this.findPath(local))))
10747
+ e.preventDefault();
10628
10748
  this.multiTouchStart(e);
10629
10749
  if (this.usePointer)
10630
10750
  return;
@@ -10633,8 +10753,7 @@ class Interaction extends InteractionBase {
10633
10753
  this.touchTimer = 0;
10634
10754
  }
10635
10755
  this.useTouch = true;
10636
- const touch = PointerEventHelper.getTouch(e);
10637
- this.pointerDown(PointerEventHelper.convertTouch(e, this.getLocal(touch, true)));
10756
+ this.pointerDown(PointerEventHelper.convertTouch(e, local));
10638
10757
  }
10639
10758
  onTouchMove(e) {
10640
10759
  this.multiTouchMove(e);
@@ -11117,16 +11236,21 @@ function repeatMode(data, box, width, height, x, y, scaleX, scaleY, rotation, al
11117
11236
  const { get: get$2, translate } = MatrixHelper;
11118
11237
  const tempBox = new Bounds();
11119
11238
  const tempPoint = {};
11239
+ const tempScaleData = {};
11120
11240
  function createData(leafPaint, image, paint, box) {
11121
- const { blendMode } = paint;
11241
+ const { blendMode, sync } = paint;
11122
11242
  if (blendMode)
11123
11243
  leafPaint.blendMode = blendMode;
11244
+ if (sync)
11245
+ leafPaint.sync = sync;
11124
11246
  leafPaint.data = getPatternData(paint, box, image);
11125
11247
  }
11126
11248
  function getPatternData(paint, box, image) {
11127
11249
  let { width, height } = image;
11128
11250
  if (paint.padding)
11129
11251
  box = tempBox.set(box).shrink(paint.padding);
11252
+ if (paint.mode === 'strench')
11253
+ paint.mode = 'stretch';
11130
11254
  const { opacity, mode, align, offset, scale, size, rotation, repeat } = paint;
11131
11255
  const sameBox = box.width === width && box.height === height;
11132
11256
  const data = { mode };
@@ -11140,13 +11264,10 @@ function getPatternData(paint, box, image) {
11140
11264
  x += (box.width - width * scaleX) / 2, y += (box.height - height * scaleY) / 2;
11141
11265
  }
11142
11266
  }
11143
- else if (size) {
11144
- scaleX = (typeof size === 'number' ? size : size.width) / width;
11145
- scaleY = (typeof size === 'number' ? size : size.height) / height;
11146
- }
11147
- else if (scale) {
11148
- scaleX = typeof scale === 'number' ? scale : scale.x;
11149
- scaleY = typeof scale === 'number' ? scale : scale.y;
11267
+ else if (scale || size) {
11268
+ MathHelper.getScaleData(scale, size, image, tempScaleData);
11269
+ scaleX = tempScaleData.scaleX;
11270
+ scaleY = tempScaleData.scaleY;
11150
11271
  }
11151
11272
  if (align) {
11152
11273
  const imageBounds = { x, y, width: swapWidth, height: swapHeight };
@@ -11158,7 +11279,7 @@ function getPatternData(paint, box, image) {
11158
11279
  if (offset)
11159
11280
  x += offset.x, y += offset.y;
11160
11281
  switch (mode) {
11161
- case 'strench':
11282
+ case 'stretch':
11162
11283
  if (!sameBox)
11163
11284
  width = box.width, height = box.height;
11164
11285
  break;
@@ -11185,7 +11306,7 @@ function getPatternData(paint, box, image) {
11185
11306
  translate(data.transform, box.x, box.y);
11186
11307
  }
11187
11308
  }
11188
- if (scaleX && mode !== 'strench') {
11309
+ if (scaleX && mode !== 'stretch') {
11189
11310
  data.scaleX = scaleX;
11190
11311
  data.scaleY = scaleY;
11191
11312
  }
@@ -11289,7 +11410,7 @@ const { get: get$1, scale, copy: copy$1 } = MatrixHelper;
11289
11410
  const { ceil, abs: abs$1 } = Math;
11290
11411
  function createPattern(ui, paint, pixelRatio) {
11291
11412
  let { scaleX, scaleY } = ImageManager.patternLocked ? ui.__world : ui.__nowWorld;
11292
- const id = scaleX + '-' + scaleY;
11413
+ const id = scaleX + '-' + scaleY + '-' + pixelRatio;
11293
11414
  if (paint.patternId !== id && !ui.destroyed) {
11294
11415
  scaleX = abs$1(scaleX);
11295
11416
  scaleY = abs$1(scaleY);
@@ -11351,7 +11472,8 @@ function createPattern(ui, paint, pixelRatio) {
11351
11472
  const { abs } = Math;
11352
11473
  function checkImage(ui, canvas, paint, allowPaint) {
11353
11474
  const { scaleX, scaleY } = ImageManager.patternLocked ? ui.__world : ui.__nowWorld;
11354
- if (!paint.data || (paint.patternId === scaleX + '-' + scaleY && !Export.running)) {
11475
+ const { pixelRatio } = canvas;
11476
+ if (!paint.data || (paint.patternId === scaleX + '-' + scaleY + '-' + pixelRatio && !Export.running)) {
11355
11477
  return false;
11356
11478
  }
11357
11479
  else {
@@ -11359,8 +11481,8 @@ function checkImage(ui, canvas, paint, allowPaint) {
11359
11481
  if (allowPaint) {
11360
11482
  if (!data.repeat) {
11361
11483
  let { width, height } = data;
11362
- width *= abs(scaleX) * canvas.pixelRatio;
11363
- height *= abs(scaleY) * canvas.pixelRatio;
11484
+ width *= abs(scaleX) * pixelRatio;
11485
+ height *= abs(scaleY) * pixelRatio;
11364
11486
  if (data.scaleX) {
11365
11487
  width *= data.scaleX;
11366
11488
  height *= data.scaleY;
@@ -11385,15 +11507,15 @@ function checkImage(ui, canvas, paint, allowPaint) {
11385
11507
  return true;
11386
11508
  }
11387
11509
  else {
11388
- if (!paint.style || Export.running) {
11389
- createPattern(ui, paint, canvas.pixelRatio);
11510
+ if (!paint.style || paint.sync || Export.running) {
11511
+ createPattern(ui, paint, pixelRatio);
11390
11512
  }
11391
11513
  else {
11392
11514
  if (!paint.patternTask) {
11393
11515
  paint.patternTask = ImageManager.patternTasker.add(() => __awaiter(this, void 0, void 0, function* () {
11394
11516
  paint.patternTask = null;
11395
11517
  if (canvas.bounds.hit(ui.__nowWorld))
11396
- createPattern(ui, paint, canvas.pixelRatio);
11518
+ createPattern(ui, paint, pixelRatio);
11397
11519
  ui.forceUpdate('surface');
11398
11520
  }), 300);
11399
11521
  }
@@ -11457,14 +11579,16 @@ function linearGradient(paint, box) {
11457
11579
  return data;
11458
11580
  }
11459
11581
  function applyStops(gradient, stops, opacity) {
11460
- let stop;
11461
- for (let i = 0, len = stops.length; i < len; i++) {
11462
- stop = stops[i];
11463
- if (typeof stop === 'string') {
11464
- gradient.addColorStop(i / (len - 1), ColorConvert.string(stop, opacity));
11465
- }
11466
- else {
11467
- gradient.addColorStop(stop.offset, ColorConvert.string(stop.color, opacity));
11582
+ if (stops) {
11583
+ let stop;
11584
+ for (let i = 0, len = stops.length; i < len; i++) {
11585
+ stop = stops[i];
11586
+ if (typeof stop === 'string') {
11587
+ gradient.addColorStop(i / (len - 1), ColorConvert.string(stop, opacity));
11588
+ }
11589
+ else {
11590
+ gradient.addColorStop(stop.offset, ColorConvert.string(stop.color, opacity));
11591
+ }
11468
11592
  }
11469
11593
  }
11470
11594
  }
@@ -12220,10 +12344,15 @@ const TextConvertModule = {
12220
12344
  };
12221
12345
 
12222
12346
  function string(color, opacity) {
12223
- if (typeof color === 'string')
12224
- return color;
12347
+ const doOpacity = typeof opacity === 'number' && opacity !== 1;
12348
+ if (typeof color === 'string') {
12349
+ if (doOpacity && ColorConvert.object)
12350
+ color = ColorConvert.object(color);
12351
+ else
12352
+ return color;
12353
+ }
12225
12354
  let a = color.a === undefined ? 1 : color.a;
12226
- if (opacity)
12355
+ if (doOpacity)
12227
12356
  a *= opacity;
12228
12357
  const rgb = color.r + ',' + color.g + ',' + color.b;
12229
12358
  return a === 1 ? 'rgb(' + rgb + ')' : 'rgba(' + rgb + ',' + a + ')';
@@ -12255,6 +12384,7 @@ const ExportModule = {
12255
12384
  export(leaf, filename, options) {
12256
12385
  this.running = true;
12257
12386
  const fileType = FileHelper.fileType(filename);
12387
+ const isDownload = filename.includes('.');
12258
12388
  options = FileHelper.getExportOptions(options);
12259
12389
  return addTask((success) => new Promise((resolve) => {
12260
12390
  const over = (result) => {
@@ -12264,19 +12394,13 @@ const ExportModule = {
12264
12394
  };
12265
12395
  const { toURL } = Platform;
12266
12396
  const { download } = Platform.origin;
12267
- if (filename === 'json') {
12268
- return over({ data: leaf.toJSON(options.json) });
12269
- }
12270
- else if (fileType === 'json') {
12271
- download(toURL(JSON.stringify(leaf.toJSON(options.json)), 'text'), filename);
12272
- return over({ data: true });
12397
+ if (fileType === 'json') {
12398
+ isDownload && download(toURL(JSON.stringify(leaf.toJSON(options.json)), 'text'), filename);
12399
+ return over({ data: isDownload ? true : leaf.toJSON(options.json) });
12273
12400
  }
12274
- if (filename === 'svg') {
12275
- return over({ data: leaf.toSVG() });
12276
- }
12277
- else if (fileType === 'svg') {
12278
- download(toURL(leaf.toSVG(), 'svg'), filename);
12279
- return over({ data: true });
12401
+ if (fileType === 'svg') {
12402
+ isDownload && download(toURL(leaf.toSVG(), 'svg'), filename);
12403
+ return over({ data: isDownload ? true : leaf.toSVG() });
12280
12404
  }
12281
12405
  const { leafer } = leaf;
12282
12406
  if (leafer) {
@@ -12285,14 +12409,8 @@ const ExportModule = {
12285
12409
  let renderBounds, trimBounds, scaleX = 1, scaleY = 1;
12286
12410
  const { worldTransform, isLeafer, isFrame } = leaf;
12287
12411
  const { slice, trim, onCanvas } = options;
12288
- let scale = options.scale || 1;
12289
- let pixelRatio = options.pixelRatio || 1;
12290
12412
  const smooth = options.smooth === undefined ? leafer.config.smooth : options.smooth;
12291
12413
  const contextSettings = options.contextSettings || leafer.config.contextSettings;
12292
- if (leaf.isApp) {
12293
- scale *= pixelRatio;
12294
- pixelRatio = leaf.app.pixelRatio;
12295
- }
12296
12414
  const screenshot = options.screenshot || leaf.isApp;
12297
12415
  const fill = (isLeafer && screenshot) ? (options.fill === undefined ? leaf.fill : options.fill) : options.fill;
12298
12416
  const needFill = FileHelper.isOpaqueImage(filename) || fill, matrix = new Matrix();
@@ -12326,9 +12444,17 @@ const ExportModule = {
12326
12444
  }
12327
12445
  renderBounds = leaf.getBounds('render', relative);
12328
12446
  }
12329
- const { x, y, width, height } = new Bounds(renderBounds).scale(scale);
12447
+ const scaleData = { scaleX: 1, scaleY: 1 };
12448
+ MathHelper.getScaleData(options.scale, options.size, renderBounds, scaleData);
12449
+ let pixelRatio = options.pixelRatio || 1;
12450
+ if (leaf.isApp) {
12451
+ scaleData.scaleX *= pixelRatio;
12452
+ scaleData.scaleY *= pixelRatio;
12453
+ pixelRatio = leaf.app.pixelRatio;
12454
+ }
12455
+ const { x, y, width, height } = new Bounds(renderBounds).scale(scaleData.scaleX, scaleData.scaleY);
12456
+ const renderOptions = { matrix: matrix.scale(1 / scaleData.scaleX, 1 / scaleData.scaleY).invert().translate(-x, -y).withScale(1 / scaleX * scaleData.scaleX, 1 / scaleY * scaleData.scaleY) };
12330
12457
  let canvas = Creator.canvas({ width: Math.round(width), height: Math.round(height), pixelRatio, smooth, contextSettings });
12331
- const renderOptions = { matrix: matrix.scale(1 / scale).invert().translate(-x, -y).withScale(1 / scaleX * scale, 1 / scaleY * scale) };
12332
12458
  let sliceLeaf;
12333
12459
  if (slice) {
12334
12460
  sliceLeaf = leaf;
@@ -12438,4 +12564,4 @@ Object.assign(Creator, {
12438
12564
  });
12439
12565
  useCanvas();
12440
12566
 
12441
- 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 };
12567
+ export { AlignHelper, 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, Eventer, 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, Transition, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIEvent, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, ZoomEvent, addInteractionWindow, affectRenderBoundsType, affectStrokeBoundsType, attr, autoLayoutType, boundsType, canvasPatch, canvasSizeAttrs, cursorType, dataProcessor, dataType, decorateLeafAttr, defineDataProcessor, defineKey, defineLeafAttr, doBoundsType, doStrokeType, effectType, emptyData, eraserType, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, isNull, layoutProcessor, maskType, naturalBoundsType, needPlugin, opacityType, pathInputType, pathType, pen, positionType, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleType, sortType, strokeType, surfaceType, tempBounds$1 as tempBounds, tempMatrix, tempPoint$3 as tempPoint, useCanvas, useModule, version, visibleType, zoomLayerType };