@leafer-ui/worker 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$e = 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$7 = 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
  class LeaferCanvas extends LeaferCanvasBase {
5792
5920
  get allowBackgroundColor() { return true; }
@@ -6013,9 +6141,13 @@ function updateBounds(boundsList) {
6013
6141
  });
6014
6142
  }
6015
6143
  function updateChange(updateList) {
6144
+ let layout;
6016
6145
  updateList.list.forEach(leaf => {
6017
- if (leaf.__layout.opacityChanged)
6146
+ layout = leaf.__layout;
6147
+ if (layout.opacityChanged)
6018
6148
  updateAllWorldOpacity(leaf);
6149
+ if (layout.stateStyleChanged)
6150
+ setTimeout(() => layout.stateStyleChanged && leaf.updateState());
6019
6151
  leaf.__updateChange();
6020
6152
  });
6021
6153
  }
@@ -6381,7 +6513,6 @@ class Renderer {
6381
6513
  Platform.requestRender(() => {
6382
6514
  this.FPS = Math.min(60, Math.ceil(1000 / (Date.now() - startTime)));
6383
6515
  if (this.running) {
6384
- this.target.emit(AnimateEvent.FRAME);
6385
6516
  if (this.changed && this.canvas.view)
6386
6517
  this.render();
6387
6518
  this.target.emit(RenderEvent.NEXT);
@@ -6726,36 +6857,6 @@ Object.assign(Creator, {
6726
6857
  });
6727
6858
  Platform.layout = Layouter.fullLayout;
6728
6859
 
6729
- const TextConvert = {};
6730
- const ColorConvert = {};
6731
- const PathArrow = {};
6732
- const Paint = {};
6733
- const PaintImage = {};
6734
- const PaintGradient = {};
6735
- const Effect = {};
6736
- const Export = {};
6737
- const State = {};
6738
-
6739
- function stateType(defaultValue) {
6740
- return decorateLeafAttr(defaultValue, (key) => attr({
6741
- set(value) {
6742
- this.__setAttr(key, value);
6743
- this.waitLeafer(() => { if (State.setStyle)
6744
- State.setStyle(this, key + 'Style', value); });
6745
- }
6746
- }));
6747
- }
6748
- function arrowType(defaultValue) {
6749
- return decorateLeafAttr(defaultValue, (key) => attr({
6750
- set(value) {
6751
- if (this.__setAttr(key, value)) {
6752
- const data = this.__;
6753
- data.__useArrow = data.startArrow !== 'none' || data.endArrow !== 'none';
6754
- doStrokeType(this);
6755
- }
6756
- }
6757
- }));
6758
- }
6759
6860
  function effectType(defaultValue) {
6760
6861
  return decorateLeafAttr(defaultValue, (key) => attr({
6761
6862
  set(value) {
@@ -6790,10 +6891,33 @@ function zoomLayerType() {
6790
6891
  };
6791
6892
  }
6792
6893
 
6894
+ const TextConvert = {};
6895
+ const ColorConvert = {};
6896
+ const PathArrow = {};
6897
+ const Paint = {};
6898
+ const PaintImage = {};
6899
+ const PaintGradient = {};
6900
+ const Effect = {};
6901
+ const Export = {};
6902
+ const State = {
6903
+ setStyleName(_leaf, _styleName, _value) { return needPlugin('state'); },
6904
+ set(_leaf, _stateName) { return needPlugin('state'); }
6905
+ };
6906
+ const Transition = {
6907
+ list: {},
6908
+ register(attrName, fn) {
6909
+ Transition.list[attrName] = fn;
6910
+ },
6911
+ get(attrName) {
6912
+ return Transition.list[attrName];
6913
+ }
6914
+ };
6915
+
6793
6916
  const { parse } = PathConvert;
6794
6917
  const emptyPaint = {};
6795
6918
  const debug$4 = Debug.get('UIData');
6796
6919
  class UIData extends LeafData {
6920
+ get scale() { const { scaleX, scaleY } = this; return scaleX !== scaleY ? { x: scaleX, y: scaleY } : scaleX; }
6797
6921
  get __strokeWidth() {
6798
6922
  const { strokeWidth, strokeWidthFixed } = this;
6799
6923
  if (strokeWidthFixed) {
@@ -6812,9 +6936,10 @@ class UIData extends LeafData {
6812
6936
  get __autoSide() { return !this._width || !this._height; }
6813
6937
  get __autoSize() { return !this._width && !this._height; }
6814
6938
  setVisible(value) {
6815
- if (this.__leaf.leafer)
6816
- this.__leaf.leafer.watcher.hasVisible = true;
6817
6939
  this._visible = value;
6940
+ const { leafer } = this.__leaf;
6941
+ if (leafer)
6942
+ leafer.watcher.hasVisible = true;
6818
6943
  }
6819
6944
  setWidth(value) {
6820
6945
  if (value < 0) {
@@ -6938,6 +7063,11 @@ class BoxData extends GroupData {
6938
7063
  }
6939
7064
 
6940
7065
  class LeaferData extends GroupData {
7066
+ __getInputData() {
7067
+ const data = super.__getInputData();
7068
+ canvasSizeAttrs.forEach(key => delete data[key]);
7069
+ return data;
7070
+ }
6941
7071
  }
6942
7072
 
6943
7073
  class FrameData extends BoxData {
@@ -7000,7 +7130,7 @@ class ImageData extends RectData {
7000
7130
  __setImageFill(value) {
7001
7131
  if (this.__leaf.image)
7002
7132
  this.__leaf.image = null;
7003
- this.fill = value ? { type: 'image', mode: 'strench', url: value } : undefined;
7133
+ this.fill = value ? { type: 'image', mode: 'stretch', url: value } : undefined;
7004
7134
  }
7005
7135
  __getData() {
7006
7136
  const data = super.__getData();
@@ -7015,6 +7145,11 @@ class ImageData extends RectData {
7015
7145
  }
7016
7146
 
7017
7147
  class CanvasData extends RectData {
7148
+ __getInputData() {
7149
+ const data = super.__getInputData();
7150
+ data.url = this.__leaf.canvas.toDataURL('image/png');
7151
+ return data;
7152
+ }
7018
7153
  }
7019
7154
 
7020
7155
  const UIBounds = {
@@ -7185,19 +7320,8 @@ var UI_1;
7185
7320
  let UI = UI_1 = class UI extends Leaf {
7186
7321
  get app() { return this.leafer && this.leafer.app; }
7187
7322
  get isFrame() { return false; }
7188
- set scale(value) {
7189
- if (typeof value === 'number') {
7190
- this.scaleX = this.scaleY = value;
7191
- }
7192
- else {
7193
- this.scaleX = value.x;
7194
- this.scaleY = value.y;
7195
- }
7196
- }
7197
- get scale() {
7198
- const { scaleX, scaleY } = this;
7199
- return scaleX !== scaleY ? { x: scaleX, y: scaleY } : scaleX;
7200
- }
7323
+ set scale(value) { MathHelper.assignScale(this, value); }
7324
+ get scale() { return this.__.scale; }
7201
7325
  get pen() {
7202
7326
  const { path } = this.__;
7203
7327
  pen.set(this.path = path || []);
@@ -7212,8 +7336,15 @@ let UI = UI_1 = class UI extends Leaf {
7212
7336
  super(data);
7213
7337
  }
7214
7338
  reset(_data) { }
7215
- set(data) {
7216
- Object.assign(this, data);
7339
+ set(data, isTemp) {
7340
+ if (isTemp) {
7341
+ this.lockNormalStyle = true;
7342
+ Object.assign(this, data);
7343
+ this.lockNormalStyle = false;
7344
+ }
7345
+ else {
7346
+ Object.assign(this, data);
7347
+ }
7217
7348
  }
7218
7349
  get(name) {
7219
7350
  return typeof name === 'string' ? this.__.__getInput(name) : this.__.__getInputData(name);
@@ -7276,11 +7407,18 @@ let UI = UI_1 = class UI extends Leaf {
7276
7407
  drawer.rect(x, y, width, height);
7277
7408
  }
7278
7409
  }
7410
+ animate(_keyframe, _options, _type, _isTemp) {
7411
+ return needPlugin('animate');
7412
+ }
7413
+ killAnimate(_type) { }
7279
7414
  export(filename, options) {
7280
7415
  return Export.export(this, filename, options);
7281
7416
  }
7282
- clone() {
7283
- return UI_1.one(this.toJSON());
7417
+ clone(newData) {
7418
+ const json = this.toJSON();
7419
+ if (newData)
7420
+ Object.assign(json, newData);
7421
+ return UI_1.one(json);
7284
7422
  }
7285
7423
  static one(data, x, y, width, height) {
7286
7424
  return UICreator.get(data.tag || this.prototype.__tag, data, x, y, width, height);
@@ -7296,6 +7434,8 @@ let UI = UI_1 = class UI extends Leaf {
7296
7434
  static setEditInner(_editorName) { }
7297
7435
  destroy() {
7298
7436
  this.fill = this.stroke = null;
7437
+ if (this.__animate)
7438
+ this.killAnimate();
7299
7439
  super.destroy();
7300
7440
  }
7301
7441
  };
@@ -7323,12 +7463,6 @@ __decorate([
7323
7463
  __decorate([
7324
7464
  visibleType(true)
7325
7465
  ], UI.prototype, "visible", void 0);
7326
- __decorate([
7327
- stateType(false)
7328
- ], UI.prototype, "selected", void 0);
7329
- __decorate([
7330
- stateType(false)
7331
- ], UI.prototype, "disabled", void 0);
7332
7466
  __decorate([
7333
7467
  surfaceType(false)
7334
7468
  ], UI.prototype, "locked", void 0);
@@ -7401,45 +7535,9 @@ __decorate([
7401
7535
  __decorate([
7402
7536
  pathType(true)
7403
7537
  ], UI.prototype, "closed", void 0);
7404
- __decorate([
7405
- autoLayoutType(false)
7406
- ], UI.prototype, "flow", void 0);
7407
7538
  __decorate([
7408
7539
  boundsType(0)
7409
7540
  ], UI.prototype, "padding", void 0);
7410
- __decorate([
7411
- boundsType(0)
7412
- ], UI.prototype, "gap", void 0);
7413
- __decorate([
7414
- boundsType('top-left')
7415
- ], UI.prototype, "flowAlign", void 0);
7416
- __decorate([
7417
- boundsType(false)
7418
- ], UI.prototype, "flowWrap", void 0);
7419
- __decorate([
7420
- boundsType('box')
7421
- ], UI.prototype, "itemBox", void 0);
7422
- __decorate([
7423
- boundsType(true)
7424
- ], UI.prototype, "inFlow", void 0);
7425
- __decorate([
7426
- boundsType()
7427
- ], UI.prototype, "autoWidth", void 0);
7428
- __decorate([
7429
- boundsType()
7430
- ], UI.prototype, "autoHeight", void 0);
7431
- __decorate([
7432
- boundsType()
7433
- ], UI.prototype, "lockRatio", void 0);
7434
- __decorate([
7435
- boundsType()
7436
- ], UI.prototype, "autoBox", void 0);
7437
- __decorate([
7438
- boundsType()
7439
- ], UI.prototype, "widthRange", void 0);
7440
- __decorate([
7441
- boundsType()
7442
- ], UI.prototype, "heightRange", void 0);
7443
7541
  __decorate([
7444
7542
  dataType(false)
7445
7543
  ], UI.prototype, "draggable", void 0);
@@ -7503,12 +7601,6 @@ __decorate([
7503
7601
  __decorate([
7504
7602
  strokeType(10)
7505
7603
  ], UI.prototype, "miterLimit", void 0);
7506
- __decorate([
7507
- arrowType('none')
7508
- ], UI.prototype, "startArrow", void 0);
7509
- __decorate([
7510
- arrowType('none')
7511
- ], UI.prototype, "endArrow", void 0);
7512
7604
  __decorate([
7513
7605
  pathType(0)
7514
7606
  ], UI.prototype, "cornerRadius", void 0);
@@ -7530,24 +7622,6 @@ __decorate([
7530
7622
  __decorate([
7531
7623
  effectType()
7532
7624
  ], UI.prototype, "grayscale", void 0);
7533
- __decorate([
7534
- dataType()
7535
- ], UI.prototype, "normalStyle", void 0);
7536
- __decorate([
7537
- dataType()
7538
- ], UI.prototype, "hoverStyle", void 0);
7539
- __decorate([
7540
- dataType()
7541
- ], UI.prototype, "pressStyle", void 0);
7542
- __decorate([
7543
- dataType()
7544
- ], UI.prototype, "focusStyle", void 0);
7545
- __decorate([
7546
- dataType()
7547
- ], UI.prototype, "selectedStyle", void 0);
7548
- __decorate([
7549
- dataType()
7550
- ], UI.prototype, "disabledStyle", void 0);
7551
7625
  __decorate([
7552
7626
  dataType({})
7553
7627
  ], UI.prototype, "data", void 0);
@@ -7574,7 +7648,7 @@ let Group = class Group extends UI {
7574
7648
  if (!this.children)
7575
7649
  this.children = [];
7576
7650
  }
7577
- set(data) {
7651
+ set(data, isTemp) {
7578
7652
  if (data.children) {
7579
7653
  const { children } = data;
7580
7654
  delete data.children;
@@ -7584,7 +7658,7 @@ let Group = class Group extends UI {
7584
7658
  else {
7585
7659
  this.clear();
7586
7660
  }
7587
- super.set(data);
7661
+ super.set(data, isTemp);
7588
7662
  let child;
7589
7663
  children.forEach(childData => {
7590
7664
  child = childData.__ ? childData : UICreator.get(childData.tag, childData);
@@ -7593,7 +7667,7 @@ let Group = class Group extends UI {
7593
7667
  data.children = children;
7594
7668
  }
7595
7669
  else {
7596
- super.set(data);
7670
+ super.set(data, isTemp);
7597
7671
  }
7598
7672
  }
7599
7673
  toJSON(options) {
@@ -7920,13 +7994,20 @@ let Leafer = Leafer_1 = class Leafer extends Group {
7920
7994
  }
7921
7995
  }
7922
7996
  zoom(_zoomType, _padding, _fixedScale) {
7923
- return debug$3.error('need @leafer-in/view');
7997
+ return needPlugin('view');
7924
7998
  }
7925
7999
  getValidMove(moveX, moveY) { return { x: moveX, y: moveY }; }
7926
8000
  getValidScale(changeScale) { return changeScale; }
7927
8001
  getWorldPointByClient(clientPoint, updateClient) {
7928
8002
  return this.interaction && this.interaction.getLocal(clientPoint, updateClient);
7929
8003
  }
8004
+ getPagePointByClient(clientPoint, updateClient) {
8005
+ return this.getPagePoint(this.getWorldPointByClient(clientPoint, updateClient));
8006
+ }
8007
+ updateClientBounds() {
8008
+ this.canvas && this.canvas.updateClientBounds();
8009
+ }
8010
+ receiveEvent(_event) { }
7930
8011
  __checkUpdateLayout() {
7931
8012
  this.__layout.update();
7932
8013
  }
@@ -8010,7 +8091,7 @@ Rect = __decorate([
8010
8091
  const rect$1 = Rect.prototype;
8011
8092
  const group$1 = Group.prototype;
8012
8093
  const childrenRenderBounds = {};
8013
- const { copy: copy$3, add, includes: includes$1 } = BoundsHelper;
8094
+ const { copy: copy$3, add, includes: includes$1, copyAndSpread: copyAndSpread$1 } = BoundsHelper;
8014
8095
  let Box = class Box extends Group {
8015
8096
  get __tag() { return 'Box'; }
8016
8097
  get isBranchLeaf() { return true; }
@@ -8024,20 +8105,23 @@ let Box = class Box extends Group {
8024
8105
  return this.__updateRectRenderSpread() || -1;
8025
8106
  }
8026
8107
  __updateRectBoxBounds() { }
8027
- __updateBoxBounds() {
8108
+ __updateBoxBounds(secondLayout) {
8028
8109
  const data = this.__;
8029
8110
  if (this.children.length) {
8030
8111
  if (data.__autoSide) {
8031
8112
  if (this.leafer && this.leafer.ready)
8032
8113
  this.leafer.layouter.addExtra(this);
8033
8114
  super.__updateBoxBounds();
8115
+ const { boxBounds } = this.__layout;
8034
8116
  if (!data.__autoSize) {
8035
- const b = this.__layout.boxBounds;
8036
- if (!data.__autoWidth)
8037
- b.height += b.y, b.width = data.width, b.x = b.y = 0;
8038
- if (!data.__autoHeight)
8039
- b.width += b.x, b.height = data.height, b.y = b.x = 0;
8117
+ if (data.__autoWidth)
8118
+ boxBounds.width += boxBounds.x, boxBounds.height = data.height, boxBounds.y = boxBounds.x = 0;
8119
+ else
8120
+ boxBounds.height += boxBounds.y, boxBounds.width = data.width, boxBounds.x = boxBounds.y = 0;
8040
8121
  }
8122
+ if (secondLayout && data.flow && data.padding)
8123
+ copyAndSpread$1(boxBounds, boxBounds, data.padding, false, data.__autoSize ? null : (data.__autoWidth ? 'width' : 'height'));
8124
+ this.__updateNaturalSize();
8041
8125
  }
8042
8126
  else {
8043
8127
  this.__updateRectBoxBounds();
@@ -8057,13 +8141,13 @@ let Box = class Box extends Group {
8057
8141
  super.__updateRenderBounds();
8058
8142
  copy$3(childrenRenderBounds, renderBounds);
8059
8143
  this.__updateRectRenderBounds();
8060
- isOverflow = !includes$1(renderBounds, childrenRenderBounds) || undefined;
8144
+ isOverflow = !includes$1(renderBounds, childrenRenderBounds) || !this.pathInputed || !this.__.cornerRadius;
8061
8145
  }
8062
8146
  else {
8063
8147
  this.__updateRectRenderBounds();
8064
8148
  }
8065
8149
  this.isOverflow !== isOverflow && (this.isOverflow = isOverflow);
8066
- if (isOverflow && !(this.__.__drawAfterFill = this.__.overflow === 'hide'))
8150
+ if (!(this.__.__drawAfterFill = this.__.overflow === 'hide') && isOverflow)
8067
8151
  add(renderBounds, childrenRenderBounds);
8068
8152
  }
8069
8153
  __updateRectRenderBounds() { }
@@ -8397,14 +8481,26 @@ __decorate([
8397
8481
  Image = __decorate([
8398
8482
  registerUI()
8399
8483
  ], Image);
8484
+ const MyImage = Image;
8400
8485
 
8401
8486
  let Canvas = class Canvas extends Rect {
8402
8487
  get __tag() { return 'Canvas'; }
8488
+ get ready() { return !this.url; }
8403
8489
  constructor(data) {
8404
8490
  super(data);
8405
8491
  this.canvas = Creator.canvas(this.__);
8406
8492
  this.context = this.canvas.context;
8407
8493
  this.__.__isCanvas = this.__.__drawAfterFill = true;
8494
+ if (data && data.url)
8495
+ this.drawImage(data.url);
8496
+ }
8497
+ drawImage(url) {
8498
+ new LeaferImage({ url }).load((image) => {
8499
+ this.context.drawImage(image.view, 0, 0);
8500
+ this.url = undefined;
8501
+ this.paint();
8502
+ this.emitEvent(new ImageEvent(ImageEvent.LOADED, { image }));
8503
+ });
8408
8504
  }
8409
8505
  draw(ui, offset, scale, rotation) {
8410
8506
  ui.__layout.update();
@@ -8421,19 +8517,18 @@ let Canvas = class Canvas extends Rect {
8421
8517
  this.paint();
8422
8518
  }
8423
8519
  paint() {
8424
- this.forceUpdate('fill');
8520
+ this.forceRender();
8425
8521
  }
8426
8522
  __drawAfterFill(canvas, _options) {
8427
- const origin = this.canvas.view;
8428
- const { width, height } = this;
8429
- if (this.__.cornerRadius || this.pathInputed) {
8523
+ const { width, height, cornerRadius } = this.__, { view } = this.canvas;
8524
+ if (cornerRadius || this.pathInputed) {
8430
8525
  canvas.save();
8431
8526
  canvas.clip();
8432
- canvas.drawImage(this.canvas.view, 0, 0, origin.width, origin.height, 0, 0, width, height);
8527
+ canvas.drawImage(view, 0, 0, view.width, view.height, 0, 0, width, height);
8433
8528
  canvas.restore();
8434
8529
  }
8435
8530
  else {
8436
- canvas.drawImage(this.canvas.view, 0, 0, origin.width, origin.height, 0, 0, width, height);
8531
+ canvas.drawImage(view, 0, 0, view.width, view.height, 0, 0, width, height);
8437
8532
  }
8438
8533
  }
8439
8534
  __updateSize() {
@@ -8463,7 +8558,7 @@ __decorate([
8463
8558
  resizeType(100)
8464
8559
  ], Canvas.prototype, "height", void 0);
8465
8560
  __decorate([
8466
- resizeType(Platform.devicePixelRatio)
8561
+ resizeType(1)
8467
8562
  ], Canvas.prototype, "pixelRatio", void 0);
8468
8563
  __decorate([
8469
8564
  resizeType(true)
@@ -8487,13 +8582,13 @@ let Text = class Text extends UI {
8487
8582
  super(data);
8488
8583
  }
8489
8584
  __drawHitPath(canvas) {
8490
- const { __lineHeight, __baseLine, __textDrawData: data } = this.__;
8585
+ const { __lineHeight, fontSize, __baseLine, __textDrawData: data } = this.__;
8491
8586
  canvas.beginPath();
8492
8587
  if (this.__.__letterSpacing < 0) {
8493
8588
  this.__drawPathByData(canvas);
8494
8589
  }
8495
8590
  else {
8496
- data.rows.forEach(row => canvas.rect(row.x, row.y - __baseLine, row.width, __lineHeight));
8591
+ data.rows.forEach(row => canvas.rect(row.x, row.y - __baseLine, row.width, __lineHeight < fontSize ? fontSize : __lineHeight));
8497
8592
  }
8498
8593
  }
8499
8594
  __drawPathByData(drawer, _data) {
@@ -8686,7 +8781,8 @@ let Pen = class Pen extends Group {
8686
8781
  drawPoints(_points, _curve, _close) { return this; }
8687
8782
  clearPath() { return this; }
8688
8783
  paint() {
8689
- this.pathElement.forceUpdate('path');
8784
+ if (!this.pathElement.__layout.boxChanged)
8785
+ this.pathElement.forceUpdate('path');
8690
8786
  }
8691
8787
  };
8692
8788
  __decorate([
@@ -8696,7 +8792,7 @@ __decorate([
8696
8792
  penPathType()
8697
8793
  ], Pen.prototype, "path", void 0);
8698
8794
  Pen = __decorate([
8699
- useModule(PathCreator, ['set', 'beginPath', 'path']),
8795
+ useModule(PathCreator, ['set', 'beginPath', 'path', 'paint']),
8700
8796
  registerUI()
8701
8797
  ], Pen);
8702
8798
  function penPathType() {
@@ -8875,21 +8971,29 @@ class UIEvent extends Event {
8875
8971
  constructor(params) {
8876
8972
  super(params.type);
8877
8973
  this.bubbles = true;
8974
+ this.getInner = this.getInnerPoint;
8975
+ this.getLocal = this.getLocalPoint;
8976
+ this.getPage = this.getPagePoint;
8878
8977
  Object.assign(this, params);
8879
8978
  }
8880
- getPage() {
8881
- return this.current.getPagePoint(this);
8979
+ getBoxPoint(relative) {
8980
+ if (!relative)
8981
+ relative = this.current;
8982
+ return relative.getBoxPoint(this);
8882
8983
  }
8883
- getInner(relative) {
8984
+ getInnerPoint(relative) {
8884
8985
  if (!relative)
8885
8986
  relative = this.current;
8886
8987
  return relative.getInnerPoint(this);
8887
8988
  }
8888
- getLocal(relative) {
8989
+ getLocalPoint(relative) {
8889
8990
  if (!relative)
8890
8991
  relative = this.current;
8891
8992
  return relative.getLocalPoint(this);
8892
8993
  }
8994
+ getPagePoint() {
8995
+ return this.current.getPagePoint(this);
8996
+ }
8893
8997
  static changeName(oldName, newName) {
8894
8998
  EventCreator.changeName(oldName, newName);
8895
8999
  }
@@ -8919,6 +9023,7 @@ PointerEvent.MENU_TAP = 'pointer.menu_tap';
8919
9023
  PointerEvent = __decorate([
8920
9024
  registerUIEvent()
8921
9025
  ], PointerEvent);
9026
+ const MyPointerEvent = PointerEvent;
8922
9027
 
8923
9028
  const move = {};
8924
9029
  let DragEvent = class DragEvent extends PointerEvent {
@@ -8996,7 +9101,7 @@ let DragEvent = class DragEvent extends PointerEvent {
8996
9101
  }
8997
9102
  getPageBounds() {
8998
9103
  const total = this.getPageTotal();
8999
- const start = this.getPage();
9104
+ const start = this.getPagePoint();
9000
9105
  const bounds = {};
9001
9106
  BoundsHelper.set(bounds, start.x - total.x, start.y - total.y, total.x, total.y);
9002
9107
  BoundsHelper.unsign(bounds);
@@ -9018,6 +9123,7 @@ DragEvent.LEAVE = 'drag.leave';
9018
9123
  DragEvent = __decorate([
9019
9124
  registerUIEvent()
9020
9125
  ], DragEvent);
9126
+ const MyDragEvent = DragEvent;
9021
9127
 
9022
9128
  let DropEvent = class DropEvent extends PointerEvent {
9023
9129
  static setList(data) {
@@ -9099,36 +9205,32 @@ function addInteractionWindow(leafer) {
9099
9205
 
9100
9206
  function document(leafer) {
9101
9207
  addInteractionWindow(leafer);
9102
- leafer.config.move.scroll = 'limit';
9103
- leafer.config.zoom.min = 1;
9208
+ const { move, zoom } = leafer.config;
9209
+ move.scroll = 'limit';
9210
+ zoom.min = 1;
9211
+ }
9212
+
9213
+ function block(leafer) {
9214
+ const { config } = leafer;
9215
+ (config.wheel || (config.wheel = {})).preventDefault = false;
9216
+ (config.touch || (config.touch = {})).preventDefault = 'auto';
9104
9217
  }
9105
9218
 
9106
9219
  const debug$2 = Debug.get('LeaferTypeCreator');
9107
9220
  const LeaferTypeCreator = {
9108
9221
  list: {},
9109
9222
  register(name, fn) {
9110
- if (list[name]) {
9111
- debug$2.repeat(name);
9112
- }
9113
- else {
9114
- list[name] = fn;
9115
- }
9223
+ list[name] ? debug$2.repeat(name) : list[name] = fn;
9116
9224
  },
9117
9225
  run(name, leafer) {
9118
9226
  const fn = list[name];
9119
- if (fn) {
9120
- fn(leafer);
9121
- }
9122
- else {
9123
- debug$2.error('no', name);
9124
- }
9227
+ fn && fn(leafer);
9125
9228
  }
9126
9229
  };
9127
9230
  const { list, register } = LeaferTypeCreator;
9128
- register('draw', () => { });
9129
- register('custom', () => { });
9130
9231
  register('design', addInteractionWindow);
9131
9232
  register('document', document);
9233
+ register('block', block);
9132
9234
 
9133
9235
  const leafer = Leafer.prototype;
9134
9236
  leafer.initType = function (type) {
@@ -9317,7 +9419,13 @@ const InteractionHelper = {
9317
9419
  find.add(list[i]);
9318
9420
  }
9319
9421
  return find;
9320
- }
9422
+ },
9423
+ pathCanDrag(path) {
9424
+ return path && path.list.some(item => item.draggable || item.editable || (!item.isLeafer && item.hasEvent(DragEvent.DRAG)));
9425
+ },
9426
+ pathHasOutside(path) {
9427
+ return path && path.list.some(item => item.isOutside);
9428
+ },
9321
9429
  };
9322
9430
  const I = InteractionHelper;
9323
9431
 
@@ -9577,7 +9685,7 @@ function emitEvent(leaf, type, data, capture, excludePath) {
9577
9685
  if (leaf.destroyed)
9578
9686
  return false;
9579
9687
  if (leaf.__.hitSelf && !exclude(leaf, excludePath)) {
9580
- if (State.updateEventStyle)
9688
+ if (State.updateEventStyle && !capture)
9581
9689
  State.updateEventStyle(leaf, type);
9582
9690
  if (leaf.hasEvent(type, capture)) {
9583
9691
  data.phase = capture ? 1 : ((leaf === data.target) ? 2 : 3);
@@ -9627,15 +9735,18 @@ const config = {
9627
9735
  swipeDistance: 20,
9628
9736
  preventDefaultMenu: true
9629
9737
  },
9738
+ touch: {
9739
+ preventDefault: true
9740
+ },
9630
9741
  cursor: true,
9631
9742
  keyEvent: true
9632
9743
  };
9633
9744
 
9634
- const { pathHasEventType, getMoveEventData, getZoomEventData, getRotateEventData } = InteractionHelper;
9745
+ const { pathHasEventType, getMoveEventData, getZoomEventData, getRotateEventData, pathCanDrag, pathHasOutside } = InteractionHelper;
9635
9746
  class InteractionBase {
9636
9747
  get dragging() { return this.dragger.dragging; }
9637
9748
  get transforming() { return this.transformer.transforming; }
9638
- get moveMode() { return this.config.move.drag || this.isHoldSpaceKey || this.isHoldMiddleKey || (this.isHoldRightKey && this.dragger.moving) || this.isDragEmpty; }
9749
+ get moveMode() { return this.config.move.drag === true || this.isHoldSpaceKey || this.isHoldMiddleKey || (this.isHoldRightKey && this.dragger.moving) || this.isDragEmpty; }
9639
9750
  get canHover() { return this.config.pointer.hover && !this.config.mobile; }
9640
9751
  get isDragEmpty() { return this.config.move.dragEmpty && this.isRootPath(this.hoverData) && (!this.downData || this.isRootPath(this.downData)); }
9641
9752
  get isMobileDragEmpty() { return this.config.move.dragEmpty && !this.canHover && this.downData && this.isTreePath(this.downData); }
@@ -9644,7 +9755,7 @@ class InteractionBase {
9644
9755
  get isHoldSpaceKey() { return this.config.move.holdSpaceKey && Keyboard.isHoldSpaceKey(); }
9645
9756
  get hitRadius() { return this.config.pointer.hitRadius; }
9646
9757
  constructor(target, canvas, selector, userConfig) {
9647
- this.config = config;
9758
+ this.config = DataHelper.clone(config);
9648
9759
  this.tapCount = 0;
9649
9760
  this.downKeyMap = {};
9650
9761
  this.target = target;
@@ -9679,7 +9790,7 @@ class InteractionBase {
9679
9790
  this.tapWait();
9680
9791
  this.longPressWait(data);
9681
9792
  }
9682
- this.waitMenuTap = PointerButton.right(data);
9793
+ this.waitRightTap = PointerButton.right(data);
9683
9794
  this.dragger.setDragData(data);
9684
9795
  if (!this.isHoldRightKey)
9685
9796
  this.updateCursor(data);
@@ -9707,7 +9818,7 @@ class InteractionBase {
9707
9818
  if (canDrag) {
9708
9819
  if (this.waitTap)
9709
9820
  this.pointerWaitCancel();
9710
- this.waitMenuTap = false;
9821
+ this.waitRightTap = false;
9711
9822
  }
9712
9823
  this.dragger.checkDrag(data, canDrag);
9713
9824
  }
@@ -9761,10 +9872,15 @@ class InteractionBase {
9761
9872
  menu(data) {
9762
9873
  this.findPath(data);
9763
9874
  this.emit(PointerEvent.MENU, data);
9875
+ this.waitMenuTap = true;
9876
+ if (!this.downData && this.waitRightTap)
9877
+ this.menuTap(data);
9764
9878
  }
9765
9879
  menuTap(data) {
9766
- if (this.waitMenuTap)
9880
+ if (this.waitRightTap && this.waitMenuTap) {
9767
9881
  this.emit(PointerEvent.MENU_TAP, data);
9882
+ this.waitRightTap = this.waitMenuTap = false;
9883
+ }
9768
9884
  }
9769
9885
  move(data) {
9770
9886
  this.transformer.move(data);
@@ -9896,11 +10012,11 @@ class InteractionBase {
9896
10012
  return app.editor && (!data.path.has(app.editor) && data.path.has(app.tree) && !data.target.syncEventer);
9897
10013
  }
9898
10014
  checkPath(data, useDefaultPath) {
9899
- if (useDefaultPath || this.canMove(data))
10015
+ if (useDefaultPath || (this.moveMode && !pathHasOutside(data.path)))
9900
10016
  data.path = this.defaultPath;
9901
10017
  }
9902
10018
  canMove(data) {
9903
- return this.moveMode && data && data.path.list.every(item => !item.isOutside);
10019
+ return data && (this.moveMode || (this.config.move.drag === 'auto' && !pathCanDrag(data.path))) && !pathHasOutside(data.path);
9904
10020
  }
9905
10021
  isDrag(leaf) {
9906
10022
  return this.dragger.getList().has(leaf);
@@ -10595,16 +10711,21 @@ function repeatMode(data, box, width, height, x, y, scaleX, scaleY, rotation, al
10595
10711
  const { get: get$2, translate } = MatrixHelper;
10596
10712
  const tempBox = new Bounds();
10597
10713
  const tempPoint = {};
10714
+ const tempScaleData = {};
10598
10715
  function createData(leafPaint, image, paint, box) {
10599
- const { blendMode } = paint;
10716
+ const { blendMode, sync } = paint;
10600
10717
  if (blendMode)
10601
10718
  leafPaint.blendMode = blendMode;
10719
+ if (sync)
10720
+ leafPaint.sync = sync;
10602
10721
  leafPaint.data = getPatternData(paint, box, image);
10603
10722
  }
10604
10723
  function getPatternData(paint, box, image) {
10605
10724
  let { width, height } = image;
10606
10725
  if (paint.padding)
10607
10726
  box = tempBox.set(box).shrink(paint.padding);
10727
+ if (paint.mode === 'strench')
10728
+ paint.mode = 'stretch';
10608
10729
  const { opacity, mode, align, offset, scale, size, rotation, repeat } = paint;
10609
10730
  const sameBox = box.width === width && box.height === height;
10610
10731
  const data = { mode };
@@ -10618,13 +10739,10 @@ function getPatternData(paint, box, image) {
10618
10739
  x += (box.width - width * scaleX) / 2, y += (box.height - height * scaleY) / 2;
10619
10740
  }
10620
10741
  }
10621
- else if (size) {
10622
- scaleX = (typeof size === 'number' ? size : size.width) / width;
10623
- scaleY = (typeof size === 'number' ? size : size.height) / height;
10624
- }
10625
- else if (scale) {
10626
- scaleX = typeof scale === 'number' ? scale : scale.x;
10627
- scaleY = typeof scale === 'number' ? scale : scale.y;
10742
+ else if (scale || size) {
10743
+ MathHelper.getScaleData(scale, size, image, tempScaleData);
10744
+ scaleX = tempScaleData.scaleX;
10745
+ scaleY = tempScaleData.scaleY;
10628
10746
  }
10629
10747
  if (align) {
10630
10748
  const imageBounds = { x, y, width: swapWidth, height: swapHeight };
@@ -10636,7 +10754,7 @@ function getPatternData(paint, box, image) {
10636
10754
  if (offset)
10637
10755
  x += offset.x, y += offset.y;
10638
10756
  switch (mode) {
10639
- case 'strench':
10757
+ case 'stretch':
10640
10758
  if (!sameBox)
10641
10759
  width = box.width, height = box.height;
10642
10760
  break;
@@ -10663,7 +10781,7 @@ function getPatternData(paint, box, image) {
10663
10781
  translate(data.transform, box.x, box.y);
10664
10782
  }
10665
10783
  }
10666
- if (scaleX && mode !== 'strench') {
10784
+ if (scaleX && mode !== 'stretch') {
10667
10785
  data.scaleX = scaleX;
10668
10786
  data.scaleY = scaleY;
10669
10787
  }
@@ -10767,7 +10885,7 @@ const { get: get$1, scale, copy: copy$1 } = MatrixHelper;
10767
10885
  const { ceil, abs: abs$1 } = Math;
10768
10886
  function createPattern(ui, paint, pixelRatio) {
10769
10887
  let { scaleX, scaleY } = ImageManager.patternLocked ? ui.__world : ui.__nowWorld;
10770
- const id = scaleX + '-' + scaleY;
10888
+ const id = scaleX + '-' + scaleY + '-' + pixelRatio;
10771
10889
  if (paint.patternId !== id && !ui.destroyed) {
10772
10890
  scaleX = abs$1(scaleX);
10773
10891
  scaleY = abs$1(scaleY);
@@ -10829,7 +10947,8 @@ function createPattern(ui, paint, pixelRatio) {
10829
10947
  const { abs } = Math;
10830
10948
  function checkImage(ui, canvas, paint, allowPaint) {
10831
10949
  const { scaleX, scaleY } = ImageManager.patternLocked ? ui.__world : ui.__nowWorld;
10832
- if (!paint.data || (paint.patternId === scaleX + '-' + scaleY && !Export.running)) {
10950
+ const { pixelRatio } = canvas;
10951
+ if (!paint.data || (paint.patternId === scaleX + '-' + scaleY + '-' + pixelRatio && !Export.running)) {
10833
10952
  return false;
10834
10953
  }
10835
10954
  else {
@@ -10837,8 +10956,8 @@ function checkImage(ui, canvas, paint, allowPaint) {
10837
10956
  if (allowPaint) {
10838
10957
  if (!data.repeat) {
10839
10958
  let { width, height } = data;
10840
- width *= abs(scaleX) * canvas.pixelRatio;
10841
- height *= abs(scaleY) * canvas.pixelRatio;
10959
+ width *= abs(scaleX) * pixelRatio;
10960
+ height *= abs(scaleY) * pixelRatio;
10842
10961
  if (data.scaleX) {
10843
10962
  width *= data.scaleX;
10844
10963
  height *= data.scaleY;
@@ -10863,15 +10982,15 @@ function checkImage(ui, canvas, paint, allowPaint) {
10863
10982
  return true;
10864
10983
  }
10865
10984
  else {
10866
- if (!paint.style || Export.running) {
10867
- createPattern(ui, paint, canvas.pixelRatio);
10985
+ if (!paint.style || paint.sync || Export.running) {
10986
+ createPattern(ui, paint, pixelRatio);
10868
10987
  }
10869
10988
  else {
10870
10989
  if (!paint.patternTask) {
10871
10990
  paint.patternTask = ImageManager.patternTasker.add(() => __awaiter(this, void 0, void 0, function* () {
10872
10991
  paint.patternTask = null;
10873
10992
  if (canvas.bounds.hit(ui.__nowWorld))
10874
- createPattern(ui, paint, canvas.pixelRatio);
10993
+ createPattern(ui, paint, pixelRatio);
10875
10994
  ui.forceUpdate('surface');
10876
10995
  }), 300);
10877
10996
  }
@@ -10935,14 +11054,16 @@ function linearGradient(paint, box) {
10935
11054
  return data;
10936
11055
  }
10937
11056
  function applyStops(gradient, stops, opacity) {
10938
- let stop;
10939
- for (let i = 0, len = stops.length; i < len; i++) {
10940
- stop = stops[i];
10941
- if (typeof stop === 'string') {
10942
- gradient.addColorStop(i / (len - 1), ColorConvert.string(stop, opacity));
10943
- }
10944
- else {
10945
- gradient.addColorStop(stop.offset, ColorConvert.string(stop.color, opacity));
11057
+ if (stops) {
11058
+ let stop;
11059
+ for (let i = 0, len = stops.length; i < len; i++) {
11060
+ stop = stops[i];
11061
+ if (typeof stop === 'string') {
11062
+ gradient.addColorStop(i / (len - 1), ColorConvert.string(stop, opacity));
11063
+ }
11064
+ else {
11065
+ gradient.addColorStop(stop.offset, ColorConvert.string(stop.color, opacity));
11066
+ }
10946
11067
  }
10947
11068
  }
10948
11069
  }
@@ -11698,10 +11819,15 @@ const TextConvertModule = {
11698
11819
  };
11699
11820
 
11700
11821
  function string(color, opacity) {
11701
- if (typeof color === 'string')
11702
- return color;
11822
+ const doOpacity = typeof opacity === 'number' && opacity !== 1;
11823
+ if (typeof color === 'string') {
11824
+ if (doOpacity && ColorConvert.object)
11825
+ color = ColorConvert.object(color);
11826
+ else
11827
+ return color;
11828
+ }
11703
11829
  let a = color.a === undefined ? 1 : color.a;
11704
- if (opacity)
11830
+ if (doOpacity)
11705
11831
  a *= opacity;
11706
11832
  const rgb = color.r + ',' + color.g + ',' + color.b;
11707
11833
  return a === 1 ? 'rgb(' + rgb + ')' : 'rgba(' + rgb + ',' + a + ')';
@@ -11733,6 +11859,7 @@ const ExportModule = {
11733
11859
  export(leaf, filename, options) {
11734
11860
  this.running = true;
11735
11861
  const fileType = FileHelper.fileType(filename);
11862
+ const isDownload = filename.includes('.');
11736
11863
  options = FileHelper.getExportOptions(options);
11737
11864
  return addTask((success) => new Promise((resolve) => {
11738
11865
  const over = (result) => {
@@ -11742,19 +11869,13 @@ const ExportModule = {
11742
11869
  };
11743
11870
  const { toURL } = Platform;
11744
11871
  const { download } = Platform.origin;
11745
- if (filename === 'json') {
11746
- return over({ data: leaf.toJSON(options.json) });
11747
- }
11748
- else if (fileType === 'json') {
11749
- download(toURL(JSON.stringify(leaf.toJSON(options.json)), 'text'), filename);
11750
- return over({ data: true });
11872
+ if (fileType === 'json') {
11873
+ isDownload && download(toURL(JSON.stringify(leaf.toJSON(options.json)), 'text'), filename);
11874
+ return over({ data: isDownload ? true : leaf.toJSON(options.json) });
11751
11875
  }
11752
- if (filename === 'svg') {
11753
- return over({ data: leaf.toSVG() });
11754
- }
11755
- else if (fileType === 'svg') {
11756
- download(toURL(leaf.toSVG(), 'svg'), filename);
11757
- return over({ data: true });
11876
+ if (fileType === 'svg') {
11877
+ isDownload && download(toURL(leaf.toSVG(), 'svg'), filename);
11878
+ return over({ data: isDownload ? true : leaf.toSVG() });
11758
11879
  }
11759
11880
  const { leafer } = leaf;
11760
11881
  if (leafer) {
@@ -11763,14 +11884,8 @@ const ExportModule = {
11763
11884
  let renderBounds, trimBounds, scaleX = 1, scaleY = 1;
11764
11885
  const { worldTransform, isLeafer, isFrame } = leaf;
11765
11886
  const { slice, trim, onCanvas } = options;
11766
- let scale = options.scale || 1;
11767
- let pixelRatio = options.pixelRatio || 1;
11768
11887
  const smooth = options.smooth === undefined ? leafer.config.smooth : options.smooth;
11769
11888
  const contextSettings = options.contextSettings || leafer.config.contextSettings;
11770
- if (leaf.isApp) {
11771
- scale *= pixelRatio;
11772
- pixelRatio = leaf.app.pixelRatio;
11773
- }
11774
11889
  const screenshot = options.screenshot || leaf.isApp;
11775
11890
  const fill = (isLeafer && screenshot) ? (options.fill === undefined ? leaf.fill : options.fill) : options.fill;
11776
11891
  const needFill = FileHelper.isOpaqueImage(filename) || fill, matrix = new Matrix();
@@ -11804,9 +11919,17 @@ const ExportModule = {
11804
11919
  }
11805
11920
  renderBounds = leaf.getBounds('render', relative);
11806
11921
  }
11807
- const { x, y, width, height } = new Bounds(renderBounds).scale(scale);
11922
+ const scaleData = { scaleX: 1, scaleY: 1 };
11923
+ MathHelper.getScaleData(options.scale, options.size, renderBounds, scaleData);
11924
+ let pixelRatio = options.pixelRatio || 1;
11925
+ if (leaf.isApp) {
11926
+ scaleData.scaleX *= pixelRatio;
11927
+ scaleData.scaleY *= pixelRatio;
11928
+ pixelRatio = leaf.app.pixelRatio;
11929
+ }
11930
+ const { x, y, width, height } = new Bounds(renderBounds).scale(scaleData.scaleX, scaleData.scaleY);
11931
+ const renderOptions = { matrix: matrix.scale(1 / scaleData.scaleX, 1 / scaleData.scaleY).invert().translate(-x, -y).withScale(1 / scaleX * scaleData.scaleX, 1 / scaleY * scaleData.scaleY) };
11808
11932
  let canvas = Creator.canvas({ width: Math.round(width), height: Math.round(height), pixelRatio, smooth, contextSettings });
11809
- const renderOptions = { matrix: matrix.scale(1 / scale).invert().translate(-x, -y).withScale(1 / scaleX * scale, 1 / scaleY * scale) };
11810
11933
  let sliceLeaf;
11811
11934
  if (slice) {
11812
11935
  sliceLeaf = leaf;
@@ -11916,4 +12039,4 @@ Object.assign(Creator, {
11916
12039
  });
11917
12040
  useCanvas();
11918
12041
 
11919
- 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, ImageData, ImageEvent, ImageManager, IncrementId, 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 };
12042
+ 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, ImageData, ImageEvent, ImageManager, IncrementId, 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 };