leafer-ui 1.0.2 → 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.
package/dist/web.js CHANGED
@@ -122,11 +122,18 @@ var LeaferUI = (function (exports) {
122
122
  scaleData.scaleX = (typeof size === 'number' ? size : size.width) / originSize.width;
123
123
  scaleData.scaleY = (typeof size === 'number' ? size : size.height) / originSize.height;
124
124
  }
125
- else if (scale) {
126
- scaleData.scaleX = typeof scale === 'number' ? scale : scale.x;
127
- scaleData.scaleY = typeof scale === 'number' ? scale : scale.y;
128
- }
125
+ else if (scale)
126
+ MathHelper.assignScale(scaleData, scale);
129
127
  return scaleData;
128
+ },
129
+ assignScale(scaleData, scale) {
130
+ if (typeof scale === 'number') {
131
+ scaleData.scaleX = scaleData.scaleY = scale;
132
+ }
133
+ else {
134
+ scaleData.scaleX = scale.x;
135
+ scaleData.scaleY = scale.y;
136
+ }
130
137
  }
131
138
  };
132
139
  const OneRadian = PI$4 / 180;
@@ -1258,7 +1265,6 @@ var LeaferUI = (function (exports) {
1258
1265
  tempPoint: {},
1259
1266
  get: get$4,
1260
1267
  toPoint(around, bounds, to, onlySize, pointBounds) {
1261
- to || (to = {});
1262
1268
  const point = get$4(around);
1263
1269
  to.x = point.x;
1264
1270
  to.y = point.y;
@@ -1393,6 +1399,10 @@ var LeaferUI = (function (exports) {
1393
1399
  };
1394
1400
  const R = Run;
1395
1401
 
1402
+ function needPlugin(name) {
1403
+ console.error('need plugin: @leafer-in/' + name);
1404
+ }
1405
+
1396
1406
  const debug$f = Debug.get('UICreator');
1397
1407
  const UICreator = {
1398
1408
  list: {},
@@ -1655,6 +1665,9 @@ var LeaferUI = (function (exports) {
1655
1665
  Answer[Answer["YesAndSkip"] = 3] = "YesAndSkip";
1656
1666
  })(exports.Answer || (exports.Answer = {}));
1657
1667
  const emptyData = {};
1668
+ function isNull(value) {
1669
+ return value === undefined || value === null;
1670
+ }
1658
1671
 
1659
1672
  /******************************************************************************
1660
1673
  Copyright (c) Microsoft Corporation.
@@ -2420,7 +2433,7 @@ var LeaferUI = (function (exports) {
2420
2433
  let startY = y = rotationSin * radiusX * startCos + rotationCos * radiusY * startSin;
2421
2434
  let fromX = cx + x, fromY = cy + y;
2422
2435
  if (data)
2423
- data.push(L$6, fromX, fromY);
2436
+ data.push(data.length ? L$6 : M$5, fromX, fromY);
2424
2437
  if (setPointBounds)
2425
2438
  setPoint$2(setPointBounds, fromX, fromY);
2426
2439
  if (setStartPoint)
@@ -3089,8 +3102,7 @@ var LeaferUI = (function (exports) {
3089
3102
  toTwoPointBounds(data, setPointBounds) {
3090
3103
  if (!data || !data.length)
3091
3104
  return setPoint$1(setPointBounds, 0, 0);
3092
- let command;
3093
- let i = 0, x = 0, y = 0, x1, y1, toX, toY;
3105
+ let i = 0, x = 0, y = 0, x1, y1, toX, toY, command;
3094
3106
  const len = data.length;
3095
3107
  while (i < len) {
3096
3108
  command = data[i];
@@ -3746,7 +3758,7 @@ var LeaferUI = (function (exports) {
3746
3758
  set(value) {
3747
3759
  if (this.__setAttr(key, value)) {
3748
3760
  this.__layout.matrixChanged || this.__layout.matrixChange();
3749
- this.__hasAutoLayout = !!value;
3761
+ this.__hasAutoLayout = !!(this.origin || this.around || this.flow);
3750
3762
  if (!this.__local)
3751
3763
  this.__layout.createLocal();
3752
3764
  }
@@ -3839,14 +3851,25 @@ var LeaferUI = (function (exports) {
3839
3851
  return decorateLeafAttr(defaultValue, (key) => attr({
3840
3852
  set(value) {
3841
3853
  const oldValue = this.visible;
3842
- if (this.__setAttr(key, value)) {
3843
- this.__layout.opacityChanged || this.__layout.opacityChange();
3844
- if (oldValue === 0 || value === 0)
3845
- doBoundsType(this);
3854
+ if (oldValue === true && value === 0) {
3855
+ if (this.animationOut)
3856
+ return this.__runAnimation('out', () => doVisible(this, key, value, oldValue));
3857
+ }
3858
+ else if (oldValue === 0 && value === true) {
3859
+ if (this.animation)
3860
+ this.__runAnimation('in');
3846
3861
  }
3862
+ doVisible(this, key, value, oldValue);
3847
3863
  }
3848
3864
  }));
3849
3865
  }
3866
+ function doVisible(leaf, key, value, oldValue) {
3867
+ if (leaf.__setAttr(key, value)) {
3868
+ leaf.__layout.opacityChanged || leaf.__layout.opacityChange();
3869
+ if (oldValue === 0 || value === 0)
3870
+ doBoundsType(leaf);
3871
+ }
3872
+ }
3850
3873
  function sortType(defaultValue) {
3851
3874
  return decorateLeafAttr(defaultValue, (key) => attr({
3852
3875
  set(value) {
@@ -3930,7 +3953,16 @@ var LeaferUI = (function (exports) {
3930
3953
  if (defaultValue === undefined) {
3931
3954
  property.get = function () { return this[computedKey]; };
3932
3955
  }
3933
- else if (key === 'width') {
3956
+ else if (typeof defaultValue === 'object') {
3957
+ const { clone } = DataHelper;
3958
+ property.get = function () {
3959
+ let v = this[computedKey];
3960
+ if (v === undefined)
3961
+ this[computedKey] = v = clone(defaultValue);
3962
+ return v;
3963
+ };
3964
+ }
3965
+ if (key === 'width') {
3934
3966
  property.get = function () {
3935
3967
  const v = this[computedKey];
3936
3968
  if (v === undefined) {
@@ -4597,144 +4629,6 @@ var LeaferUI = (function (exports) {
4597
4629
  destroy() { }
4598
4630
  }
4599
4631
 
4600
- const empty = {};
4601
- const LeafEventer = {
4602
- on(type, listener, options) {
4603
- let capture, once;
4604
- if (options) {
4605
- if (options === 'once') {
4606
- once = true;
4607
- }
4608
- else if (typeof options === 'boolean') {
4609
- capture = options;
4610
- }
4611
- else {
4612
- capture = options.capture;
4613
- once = options.once;
4614
- }
4615
- }
4616
- let events;
4617
- const map = __getListenerMap(this, capture, true);
4618
- const typeList = typeof type === 'string' ? type.split(' ') : type;
4619
- const item = once ? { listener, once } : { listener };
4620
- typeList.forEach(type => {
4621
- if (type) {
4622
- events = map[type];
4623
- if (events) {
4624
- if (events.findIndex(item => item.listener === listener) === -1)
4625
- events.push(item);
4626
- }
4627
- else {
4628
- map[type] = [item];
4629
- }
4630
- }
4631
- });
4632
- },
4633
- off(type, listener, options) {
4634
- if (type) {
4635
- const typeList = typeof type === 'string' ? type.split(' ') : type;
4636
- if (listener) {
4637
- let capture;
4638
- if (options)
4639
- capture = typeof options === 'boolean' ? options : (options === 'once' ? false : options.capture);
4640
- let events, index;
4641
- const map = __getListenerMap(this, capture);
4642
- typeList.forEach(type => {
4643
- if (type) {
4644
- events = map[type];
4645
- if (events) {
4646
- index = events.findIndex(item => item.listener === listener);
4647
- if (index > -1)
4648
- events.splice(index, 1);
4649
- if (!events.length)
4650
- delete map[type];
4651
- }
4652
- }
4653
- });
4654
- }
4655
- else {
4656
- const { __bubbleMap: b, __captureMap: c } = this;
4657
- typeList.forEach(type => {
4658
- if (b)
4659
- delete b[type];
4660
- if (c)
4661
- delete c[type];
4662
- });
4663
- }
4664
- }
4665
- else {
4666
- this.__bubbleMap = this.__captureMap = undefined;
4667
- }
4668
- },
4669
- on_(type, listener, bind, options) {
4670
- if (bind)
4671
- listener = listener.bind(bind);
4672
- this.on(type, listener, options);
4673
- return { type, current: this, listener, options };
4674
- },
4675
- off_(id) {
4676
- if (!id)
4677
- return;
4678
- const list = id instanceof Array ? id : [id];
4679
- list.forEach(item => item.current.off(item.type, item.listener, item.options));
4680
- list.length = 0;
4681
- },
4682
- once(type, listener, capture) {
4683
- this.on(type, listener, { once: true, capture });
4684
- },
4685
- emit(type, event, capture) {
4686
- if (!event && EventCreator.has(type))
4687
- event = EventCreator.get(type, { type, target: this, current: this });
4688
- const map = __getListenerMap(this, capture);
4689
- const list = map[type];
4690
- if (list) {
4691
- let item;
4692
- for (let i = 0, len = list.length; i < len; i++) {
4693
- item = list[i];
4694
- item.listener(event);
4695
- if (item.once) {
4696
- this.off(type, item.listener, capture);
4697
- i--, len--;
4698
- }
4699
- if (event && event.isStopNow)
4700
- break;
4701
- }
4702
- }
4703
- this.syncEventer && this.syncEventer.emitEvent(event, capture);
4704
- },
4705
- emitEvent(event, capture) {
4706
- event.current = this;
4707
- this.emit(event.type, event, capture);
4708
- },
4709
- hasEvent(type, capture) {
4710
- if (this.syncEventer && this.syncEventer.hasEvent(type, capture))
4711
- return true;
4712
- const { __bubbleMap: b, __captureMap: c } = this;
4713
- const hasB = b && b[type], hasC = c && c[type];
4714
- return !!(capture === undefined ? (hasB || hasC) : (capture ? hasC : hasB));
4715
- },
4716
- };
4717
- function __getListenerMap(eventer, capture, create) {
4718
- if (capture) {
4719
- const { __captureMap: c } = eventer;
4720
- if (c) {
4721
- return c;
4722
- }
4723
- else {
4724
- return create ? eventer.__captureMap = {} : empty;
4725
- }
4726
- }
4727
- else {
4728
- const { __bubbleMap: b } = eventer;
4729
- if (b) {
4730
- return b;
4731
- }
4732
- else {
4733
- return create ? eventer.__bubbleMap = {} : empty;
4734
- }
4735
- }
4736
- }
4737
-
4738
4632
  class Event {
4739
4633
  constructor(type, target) {
4740
4634
  this.bubbles = false;
@@ -4769,7 +4663,10 @@ var LeaferUI = (function (exports) {
4769
4663
  }
4770
4664
  ChildEvent.ADD = 'child.add';
4771
4665
  ChildEvent.REMOVE = 'child.remove';
4772
- ChildEvent.DESTROY = 'child.destroy';
4666
+ ChildEvent.CREATED = 'created';
4667
+ ChildEvent.MOUNTED = 'mounted';
4668
+ ChildEvent.UNMOUNTED = 'unmounted';
4669
+ ChildEvent.DESTROY = 'destroy';
4773
4670
 
4774
4671
  class PropertyEvent extends Event {
4775
4672
  constructor(type, target, attrName, oldValue, newValue) {
@@ -4847,10 +4744,6 @@ var LeaferUI = (function (exports) {
4847
4744
  LayoutEvent.AGAIN = 'layout.again';
4848
4745
  LayoutEvent.END = 'layout.end';
4849
4746
 
4850
- class AnimateEvent extends Event {
4851
- }
4852
- AnimateEvent.FRAME = 'animate.frame';
4853
-
4854
4747
  class RenderEvent extends Event {
4855
4748
  constructor(type, times, bounds, options) {
4856
4749
  super(type);
@@ -4883,6 +4776,157 @@ var LeaferUI = (function (exports) {
4883
4776
  LeaferEvent.RESTART = 'leafer.restart';
4884
4777
  LeaferEvent.END = 'leafer.end';
4885
4778
 
4779
+ const empty = {};
4780
+ class Eventer {
4781
+ set event(map) { this.on(map); }
4782
+ on(type, listener, options) {
4783
+ if (!listener) {
4784
+ let event, map = type;
4785
+ for (let key in map)
4786
+ event = map[key], event instanceof Array ? this.on(key, event[0], event[1]) : this.on(key, event);
4787
+ return;
4788
+ }
4789
+ let capture, once;
4790
+ if (options) {
4791
+ if (options === 'once') {
4792
+ once = true;
4793
+ }
4794
+ else if (typeof options === 'boolean') {
4795
+ capture = options;
4796
+ }
4797
+ else {
4798
+ capture = options.capture;
4799
+ once = options.once;
4800
+ }
4801
+ }
4802
+ let events;
4803
+ const map = __getListenerMap(this, capture, true);
4804
+ const typeList = typeof type === 'string' ? type.split(' ') : type;
4805
+ const item = once ? { listener, once } : { listener };
4806
+ typeList.forEach(type => {
4807
+ if (type) {
4808
+ events = map[type];
4809
+ if (events) {
4810
+ if (events.findIndex(item => item.listener === listener) === -1)
4811
+ events.push(item);
4812
+ }
4813
+ else {
4814
+ map[type] = [item];
4815
+ }
4816
+ }
4817
+ });
4818
+ }
4819
+ off(type, listener, options) {
4820
+ if (type) {
4821
+ const typeList = typeof type === 'string' ? type.split(' ') : type;
4822
+ if (listener) {
4823
+ let capture;
4824
+ if (options)
4825
+ capture = typeof options === 'boolean' ? options : (options === 'once' ? false : options.capture);
4826
+ let events, index;
4827
+ const map = __getListenerMap(this, capture);
4828
+ typeList.forEach(type => {
4829
+ if (type) {
4830
+ events = map[type];
4831
+ if (events) {
4832
+ index = events.findIndex(item => item.listener === listener);
4833
+ if (index > -1)
4834
+ events.splice(index, 1);
4835
+ if (!events.length)
4836
+ delete map[type];
4837
+ }
4838
+ }
4839
+ });
4840
+ }
4841
+ else {
4842
+ const { __bubbleMap: b, __captureMap: c } = this;
4843
+ typeList.forEach(type => {
4844
+ if (b)
4845
+ delete b[type];
4846
+ if (c)
4847
+ delete c[type];
4848
+ });
4849
+ }
4850
+ }
4851
+ else {
4852
+ this.__bubbleMap = this.__captureMap = undefined;
4853
+ }
4854
+ }
4855
+ on_(type, listener, bind, options) {
4856
+ if (bind)
4857
+ listener = listener.bind(bind);
4858
+ this.on(type, listener, options);
4859
+ return { type, current: this, listener, options };
4860
+ }
4861
+ off_(id) {
4862
+ if (!id)
4863
+ return;
4864
+ const list = id instanceof Array ? id : [id];
4865
+ list.forEach(item => item.current.off(item.type, item.listener, item.options));
4866
+ list.length = 0;
4867
+ }
4868
+ once(type, listener, capture) {
4869
+ this.on(type, listener, { once: true, capture });
4870
+ }
4871
+ emit(type, event, capture) {
4872
+ if (!event && EventCreator.has(type))
4873
+ event = EventCreator.get(type, { type, target: this, current: this });
4874
+ const map = __getListenerMap(this, capture);
4875
+ const list = map[type];
4876
+ if (list) {
4877
+ let item;
4878
+ for (let i = 0, len = list.length; i < len; i++) {
4879
+ item = list[i];
4880
+ item.listener(event);
4881
+ if (item.once) {
4882
+ this.off(type, item.listener, capture);
4883
+ i--, len--;
4884
+ }
4885
+ if (event && event.isStopNow)
4886
+ break;
4887
+ }
4888
+ }
4889
+ this.syncEventer && this.syncEventer.emitEvent(event, capture);
4890
+ }
4891
+ emitEvent(event, capture) {
4892
+ event.current = this;
4893
+ this.emit(event.type, event, capture);
4894
+ }
4895
+ hasEvent(type, capture) {
4896
+ if (this.syncEventer && this.syncEventer.hasEvent(type, capture))
4897
+ return true;
4898
+ const { __bubbleMap: b, __captureMap: c } = this;
4899
+ const hasB = b && b[type], hasC = c && c[type];
4900
+ return !!(capture === undefined ? (hasB || hasC) : (capture ? hasC : hasB));
4901
+ }
4902
+ destroy() {
4903
+ this.__captureMap = this.__bubbleMap = this.syncEventer = null;
4904
+ }
4905
+ }
4906
+ function __getListenerMap(eventer, capture, create) {
4907
+ if (capture) {
4908
+ const { __captureMap: c } = eventer;
4909
+ if (c) {
4910
+ return c;
4911
+ }
4912
+ else {
4913
+ return create ? eventer.__captureMap = {} : empty;
4914
+ }
4915
+ }
4916
+ else {
4917
+ const { __bubbleMap: b } = eventer;
4918
+ if (b) {
4919
+ return b;
4920
+ }
4921
+ else {
4922
+ return create ? eventer.__bubbleMap = {} : empty;
4923
+ }
4924
+ }
4925
+ }
4926
+
4927
+ const { on, on_, off, off_, once, emit: emit$2, emitEvent: emitEvent$1, hasEvent, destroy } = Eventer.prototype;
4928
+ const LeafEventer = { on, on_, off, off_, once, emit: emit$2, emitEvent: emitEvent$1, hasEvent, destroyEventer: destroy };
4929
+
4886
4930
  const { isFinite } = Number;
4887
4931
  const debug$8 = Debug.get('setAttr');
4888
4932
  const LeafDataProxy = {
@@ -4894,9 +4938,7 @@ var LeaferUI = (function (exports) {
4894
4938
  newValue = undefined;
4895
4939
  }
4896
4940
  if (typeof newValue === 'object' || oldValue !== newValue) {
4897
- this.__[name] = newValue;
4898
- if (this.__proxyData)
4899
- this.setProxyAttr(name, newValue);
4941
+ this.__realSetAttr(name, newValue);
4900
4942
  const { CHANGE } = PropertyEvent;
4901
4943
  const event = new PropertyEvent(CHANGE, this, name, oldValue, newValue);
4902
4944
  if (this.isLeafer) {
@@ -4914,12 +4956,18 @@ var LeaferUI = (function (exports) {
4914
4956
  }
4915
4957
  }
4916
4958
  else {
4917
- this.__[name] = newValue;
4918
- if (this.__proxyData)
4919
- this.setProxyAttr(name, newValue);
4959
+ this.__realSetAttr(name, newValue);
4920
4960
  return true;
4921
4961
  }
4922
4962
  },
4963
+ __realSetAttr(name, newValue) {
4964
+ const data = this.__;
4965
+ data[name] = newValue;
4966
+ if (this.__proxyData)
4967
+ this.setProxyAttr(name, newValue);
4968
+ if (data.normalStyle)
4969
+ this.lockNormalStyle || data.normalStyle[name] === undefined || (data.normalStyle[name] = newValue);
4970
+ },
4923
4971
  __getAttr(name) {
4924
4972
  if (this.__proxyData)
4925
4973
  return this.getProxyAttr(name);
@@ -5022,6 +5070,8 @@ var LeaferUI = (function (exports) {
5022
5070
  layout.boundsChanged = false;
5023
5071
  },
5024
5072
  __updateLocalBoxBounds() {
5073
+ if (this.__hasMotionPath)
5074
+ this.__updateMotionPath();
5025
5075
  if (this.__hasAutoLayout)
5026
5076
  this.__updateAutoLayout();
5027
5077
  toOuterOf$1(this.__layout.boxBounds, this.__local, this.__local);
@@ -5174,7 +5224,7 @@ var LeaferUI = (function (exports) {
5174
5224
  const { LEAF, create } = IncrementId;
5175
5225
  const { toInnerPoint, toOuterPoint, multiplyParent } = MatrixHelper;
5176
5226
  const { toOuterOf } = BoundsHelper;
5177
- const { copy: copy$4 } = PointHelper;
5227
+ const { copy: copy$4, move: move$1 } = PointHelper;
5178
5228
  const { moveLocal, zoomOfLocal, rotateOfLocal, skewOfLocal, moveWorld, zoomOfWorld, rotateOfWorld, skewOfWorld, transform, transformWorld, setTransform, getFlipTransform, getLocalOrigin, getRelativeWorld, drop } = LeafHelper;
5179
5229
  exports.Leaf = class Leaf {
5180
5230
  get tag() { return this.__tag; }
@@ -5201,13 +5251,16 @@ var LeaferUI = (function (exports) {
5201
5251
  get __ignoreHitWorld() { return (this.__hasMask || this.__hasEraser) && this.__.hitChildren; }
5202
5252
  get __inLazyBounds() { const { leafer } = this; return leafer && leafer.created && leafer.lazyBounds.hit(this.__world); }
5203
5253
  get pathInputed() { return this.__.__pathInputed; }
5204
- set event(map) { let event; for (let key in map)
5205
- event = map[key], event instanceof Array ? this.on(key, event[0], event[1]) : this.on(key, event); }
5254
+ set event(map) { this.on(map); }
5206
5255
  constructor(data) {
5207
5256
  this.innerId = create(LEAF);
5208
5257
  this.reset(data);
5258
+ if (this.__bubbleMap)
5259
+ this.__emitLifeEvent(ChildEvent.CREATED);
5209
5260
  }
5210
5261
  reset(data) {
5262
+ if (this.leafer)
5263
+ this.leafer.forceRender(this.__world);
5211
5264
  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 };
5212
5265
  if (data !== null)
5213
5266
  this.__local = { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0, x: 0, y: 0, width: 0, height: 0 };
@@ -5229,12 +5282,12 @@ var LeaferUI = (function (exports) {
5229
5282
  waitParent(item, bind) {
5230
5283
  if (bind)
5231
5284
  item = item.bind(bind);
5232
- this.parent ? item() : (this.__parentWait ? this.__parentWait.push(item) : this.__parentWait = [item]);
5285
+ this.parent ? item() : this.on(ChildEvent.ADD, item, 'once');
5233
5286
  }
5234
5287
  waitLeafer(item, bind) {
5235
5288
  if (bind)
5236
5289
  item = item.bind(bind);
5237
- this.leafer ? item() : (this.__leaferWait ? this.__leaferWait.push(item) : this.__leaferWait = [item]);
5290
+ this.leafer ? item() : this.on(ChildEvent.MOUNTED, item, 'once');
5238
5291
  }
5239
5292
  nextRender(item, bind, off) {
5240
5293
  this.leafer ? this.leafer.nextRender(item, bind, off) : this.waitLeafer(() => this.leafer.nextRender(item, bind, off));
@@ -5243,18 +5296,21 @@ var LeaferUI = (function (exports) {
5243
5296
  this.nextRender(item, null, 'off');
5244
5297
  }
5245
5298
  __bindLeafer(leafer) {
5246
- if (this.isLeafer) {
5247
- if (leafer !== null)
5248
- leafer = this;
5249
- }
5299
+ if (this.isLeafer && leafer !== null)
5300
+ leafer = this;
5250
5301
  if (this.leafer && !leafer)
5251
5302
  this.leafer.leafs--;
5252
5303
  this.leafer = leafer;
5253
5304
  if (leafer) {
5254
5305
  leafer.leafs++;
5255
5306
  this.__level = this.parent ? this.parent.__level + 1 : 1;
5256
- if (this.__leaferWait)
5257
- WaitHelper.run(this.__leaferWait);
5307
+ if (this.animation)
5308
+ this.__runAnimation('in');
5309
+ if (this.__bubbleMap)
5310
+ this.__emitLifeEvent(ChildEvent.MOUNTED);
5311
+ }
5312
+ else {
5313
+ this.__emitLifeEvent(ChildEvent.UNMOUNTED);
5258
5314
  }
5259
5315
  if (this.isBranch) {
5260
5316
  const { children } = this;
@@ -5263,7 +5319,7 @@ var LeaferUI = (function (exports) {
5263
5319
  }
5264
5320
  }
5265
5321
  }
5266
- set(_data) { }
5322
+ set(_data, _isTemp) { }
5267
5323
  get(_name) { return undefined; }
5268
5324
  setAttr(name, value) { this[name] = value; }
5269
5325
  getAttr(name) { return this[name]; }
@@ -5288,6 +5344,7 @@ var LeaferUI = (function (exports) {
5288
5344
  findOne(_condition, _options) { return undefined; }
5289
5345
  findId(_id) { return undefined; }
5290
5346
  focus(_value) { }
5347
+ updateState() { }
5291
5348
  updateLayout() {
5292
5349
  this.__layout.update();
5293
5350
  }
@@ -5395,11 +5452,24 @@ var LeaferUI = (function (exports) {
5395
5452
  if (relative)
5396
5453
  relative.worldToInner(to ? to : inner, null, distance);
5397
5454
  }
5455
+ getBoxPoint(world, relative, distance, change) {
5456
+ return this.getBoxPointByInner(this.getInnerPoint(world, relative, distance, change), null, null, true);
5457
+ }
5458
+ getBoxPointByInner(inner, _relative, _distance, change) {
5459
+ const point = change ? inner : Object.assign({}, inner), { x, y } = this.boxBounds;
5460
+ move$1(point, -x, -y);
5461
+ return point;
5462
+ }
5398
5463
  getInnerPoint(world, relative, distance, change) {
5399
5464
  const point = change ? world : {};
5400
5465
  this.worldToInner(world, point, distance, relative);
5401
5466
  return point;
5402
5467
  }
5468
+ getInnerPointByBox(box, _relative, _distance, change) {
5469
+ const point = change ? box : Object.assign({}, box), { x, y } = this.boxBounds;
5470
+ move$1(point, x, y);
5471
+ return point;
5472
+ }
5403
5473
  getInnerPointByLocal(local, _relative, distance, change) {
5404
5474
  return this.getInnerPoint(local, this.parent, distance, change);
5405
5475
  }
@@ -5411,20 +5481,23 @@ var LeaferUI = (function (exports) {
5411
5481
  getLocalPointByInner(inner, _relative, distance, change) {
5412
5482
  return this.getWorldPoint(inner, this.parent, distance, change);
5413
5483
  }
5484
+ getPagePoint(world, relative, distance, change) {
5485
+ const layer = this.leafer ? this.leafer.zoomLayer : this;
5486
+ return layer.getInnerPoint(world, relative, distance, change);
5487
+ }
5414
5488
  getWorldPoint(inner, relative, distance, change) {
5415
5489
  const point = change ? inner : {};
5416
5490
  this.innerToWorld(inner, point, distance, relative);
5417
5491
  return point;
5418
5492
  }
5493
+ getWorldPointByBox(box, relative, distance, change) {
5494
+ return this.getWorldPoint(this.getInnerPointByBox(box, null, null, change), relative, distance, true);
5495
+ }
5419
5496
  getWorldPointByLocal(local, relative, distance, change) {
5420
5497
  const point = change ? local : {};
5421
5498
  this.localToWorld(local, point, distance, relative);
5422
5499
  return point;
5423
5500
  }
5424
- getPagePoint(world, relative, distance, change) {
5425
- const layer = this.leafer ? this.leafer.zoomLayer : this;
5426
- return layer.getInnerPoint(world, relative, distance, change);
5427
- }
5428
5501
  getWorldPointByPage(page, relative, distance, change) {
5429
5502
  const layer = this.leafer ? this.leafer.zoomLayer : this;
5430
5503
  return layer.getWorldPoint(page, relative, distance, change);
@@ -5493,6 +5566,17 @@ var LeaferUI = (function (exports) {
5493
5566
  __drawRenderPath(_canvas) { }
5494
5567
  __updatePath() { }
5495
5568
  __updateRenderPath() { }
5569
+ getMotionPathData() {
5570
+ return needPlugin('path');
5571
+ }
5572
+ getMotionPoint(_motionDistance) {
5573
+ return needPlugin('path');
5574
+ }
5575
+ getMotionTotal() {
5576
+ return 0;
5577
+ }
5578
+ __updateMotionPath() { }
5579
+ __runAnimation(_type, _complete) { }
5496
5580
  __updateSortChildren() { }
5497
5581
  add(_child, _index) { }
5498
5582
  remove(_child, destroy) {
@@ -5518,6 +5602,10 @@ var LeaferUI = (function (exports) {
5518
5602
  fn = boundsType;
5519
5603
  fn(defaultValue)(this.prototype, attrName);
5520
5604
  }
5605
+ __emitLifeEvent(type) {
5606
+ if (this.hasEvent(type))
5607
+ this.emitEvent(new ChildEvent(type, this, this.parent));
5608
+ }
5521
5609
  destroy() {
5522
5610
  if (!this.destroyed) {
5523
5611
  const { parent } = this;
@@ -5525,11 +5613,10 @@ var LeaferUI = (function (exports) {
5525
5613
  this.remove();
5526
5614
  if (this.children)
5527
5615
  this.removeAll(true);
5528
- if (this.hasEvent(ChildEvent.DESTROY))
5529
- this.emitEvent(new ChildEvent(ChildEvent.DESTROY, this, parent));
5616
+ this.__emitLifeEvent(ChildEvent.DESTROY);
5530
5617
  this.__.destroy();
5531
5618
  this.__layout.destroy();
5532
- this.__captureMap = this.__bubbleMap = this.__parentWait = this.__leaferWait = null;
5619
+ this.destroyEventer();
5533
5620
  this.destroyed = true;
5534
5621
  }
5535
5622
  }
@@ -5595,8 +5682,8 @@ var LeaferUI = (function (exports) {
5595
5682
  this.__.__childBranchNumber = (this.__.__childBranchNumber || 0) + 1;
5596
5683
  child.__layout.boxChanged || child.__layout.boxChange();
5597
5684
  child.__layout.matrixChanged || child.__layout.matrixChange();
5598
- if (child.__parentWait)
5599
- WaitHelper.run(child.__parentWait);
5685
+ if (child.__bubbleMap)
5686
+ child.__emitLifeEvent(ChildEvent.ADD);
5600
5687
  if (this.leafer) {
5601
5688
  child.__bindLeafer(this.leafer);
5602
5689
  if (this.leafer.created)
@@ -5609,16 +5696,10 @@ var LeaferUI = (function (exports) {
5609
5696
  }
5610
5697
  remove(child, destroy) {
5611
5698
  if (child) {
5612
- const index = this.children.indexOf(child);
5613
- if (index > -1) {
5614
- this.children.splice(index, 1);
5615
- if (child.isBranch)
5616
- this.__.__childBranchNumber = (this.__.__childBranchNumber || 1) - 1;
5617
- this.__preRemove();
5618
- this.__realRemoveChild(child);
5619
- if (destroy)
5620
- child.destroy();
5621
- }
5699
+ if (child.animationOut)
5700
+ child.__runAnimation('out', () => this.__remove(child, destroy));
5701
+ else
5702
+ this.__remove(child, destroy);
5622
5703
  }
5623
5704
  else if (child === undefined) {
5624
5705
  super.remove(null, destroy);
@@ -5640,6 +5721,18 @@ var LeaferUI = (function (exports) {
5640
5721
  clear() {
5641
5722
  this.removeAll(true);
5642
5723
  }
5724
+ __remove(child, destroy) {
5725
+ const index = this.children.indexOf(child);
5726
+ if (index > -1) {
5727
+ this.children.splice(index, 1);
5728
+ if (child.isBranch)
5729
+ this.__.__childBranchNumber = (this.__.__childBranchNumber || 1) - 1;
5730
+ this.__preRemove();
5731
+ this.__realRemoveChild(child);
5732
+ if (destroy)
5733
+ child.destroy();
5734
+ }
5735
+ }
5643
5736
  __preRemove() {
5644
5737
  if (this.__hasMask)
5645
5738
  this.__updateMask();
@@ -5649,6 +5742,7 @@ var LeaferUI = (function (exports) {
5649
5742
  this.__layout.affectChildrenSort && this.__layout.childrenSortChange();
5650
5743
  }
5651
5744
  __realRemoveChild(child) {
5745
+ child.__emitLifeEvent(ChildEvent.REMOVE);
5652
5746
  child.parent = null;
5653
5747
  if (this.leafer) {
5654
5748
  child.__bindLeafer(null);
@@ -5661,8 +5755,6 @@ var LeaferUI = (function (exports) {
5661
5755
  }
5662
5756
  __emitChildEvent(type, child) {
5663
5757
  const event = new ChildEvent(type, child, this);
5664
- if (child.hasEvent(type))
5665
- child.emitEvent(event);
5666
5758
  if (this.hasEvent(type) && !this.isLeafer)
5667
5759
  this.emitEvent(event);
5668
5760
  this.leafer.emitEvent(event);
@@ -5825,8 +5917,7 @@ var LeaferUI = (function (exports) {
5825
5917
  }
5826
5918
  }
5827
5919
 
5828
- const version = "1.0.1";
5829
- const inviteCode = {};
5920
+ const version = "1.0.3";
5830
5921
 
5831
5922
  const debug$7 = Debug.get('LeaferCanvas');
5832
5923
  class LeaferCanvas extends LeaferCanvasBase {
@@ -6226,9 +6317,13 @@ var LeaferUI = (function (exports) {
6226
6317
  });
6227
6318
  }
6228
6319
  function updateChange(updateList) {
6320
+ let layout;
6229
6321
  updateList.list.forEach(leaf => {
6230
- if (leaf.__layout.opacityChanged)
6322
+ layout = leaf.__layout;
6323
+ if (layout.opacityChanged)
6231
6324
  updateAllWorldOpacity(leaf);
6325
+ if (layout.stateStyleChanged)
6326
+ setTimeout(() => layout.stateStyleChanged && leaf.updateState());
6232
6327
  leaf.__updateChange();
6233
6328
  });
6234
6329
  }
@@ -6594,7 +6689,6 @@ var LeaferUI = (function (exports) {
6594
6689
  Platform.requestRender(() => {
6595
6690
  this.FPS = Math.min(60, Math.ceil(1000 / (Date.now() - startTime)));
6596
6691
  if (this.running) {
6597
- this.target.emit(AnimateEvent.FRAME);
6598
6692
  if (this.changed && this.canvas.view)
6599
6693
  this.render();
6600
6694
  this.target.emit(RenderEvent.NEXT);
@@ -6939,36 +7033,6 @@ var LeaferUI = (function (exports) {
6939
7033
  });
6940
7034
  Platform.layout = Layouter.fullLayout;
6941
7035
 
6942
- const TextConvert = {};
6943
- const ColorConvert = {};
6944
- const PathArrow = {};
6945
- const Paint = {};
6946
- const PaintImage = {};
6947
- const PaintGradient = {};
6948
- const Effect = {};
6949
- const Export = {};
6950
- const State = {};
6951
-
6952
- function stateType(defaultValue) {
6953
- return decorateLeafAttr(defaultValue, (key) => attr({
6954
- set(value) {
6955
- this.__setAttr(key, value);
6956
- this.waitLeafer(() => { if (State.setStyle)
6957
- State.setStyle(this, key + 'Style', value); });
6958
- }
6959
- }));
6960
- }
6961
- function arrowType(defaultValue) {
6962
- return decorateLeafAttr(defaultValue, (key) => attr({
6963
- set(value) {
6964
- if (this.__setAttr(key, value)) {
6965
- const data = this.__;
6966
- data.__useArrow = data.startArrow !== 'none' || data.endArrow !== 'none';
6967
- doStrokeType(this);
6968
- }
6969
- }
6970
- }));
6971
- }
6972
7036
  function effectType(defaultValue) {
6973
7037
  return decorateLeafAttr(defaultValue, (key) => attr({
6974
7038
  set(value) {
@@ -7003,10 +7067,33 @@ var LeaferUI = (function (exports) {
7003
7067
  };
7004
7068
  }
7005
7069
 
7070
+ const TextConvert = {};
7071
+ const ColorConvert = {};
7072
+ const PathArrow = {};
7073
+ const Paint = {};
7074
+ const PaintImage = {};
7075
+ const PaintGradient = {};
7076
+ const Effect = {};
7077
+ const Export = {};
7078
+ const State = {
7079
+ setStyleName(_leaf, _styleName, _value) { return needPlugin('state'); },
7080
+ set(_leaf, _stateName) { return needPlugin('state'); }
7081
+ };
7082
+ const Transition = {
7083
+ list: {},
7084
+ register(attrName, fn) {
7085
+ Transition.list[attrName] = fn;
7086
+ },
7087
+ get(attrName) {
7088
+ return Transition.list[attrName];
7089
+ }
7090
+ };
7091
+
7006
7092
  const { parse } = PathConvert;
7007
7093
  const emptyPaint = {};
7008
7094
  const debug$4 = Debug.get('UIData');
7009
7095
  class UIData extends LeafData {
7096
+ get scale() { const { scaleX, scaleY } = this; return scaleX !== scaleY ? { x: scaleX, y: scaleY } : scaleX; }
7010
7097
  get __strokeWidth() {
7011
7098
  const { strokeWidth, strokeWidthFixed } = this;
7012
7099
  if (strokeWidthFixed) {
@@ -7025,9 +7112,10 @@ var LeaferUI = (function (exports) {
7025
7112
  get __autoSide() { return !this._width || !this._height; }
7026
7113
  get __autoSize() { return !this._width && !this._height; }
7027
7114
  setVisible(value) {
7028
- if (this.__leaf.leafer)
7029
- this.__leaf.leafer.watcher.hasVisible = true;
7030
7115
  this._visible = value;
7116
+ const { leafer } = this.__leaf;
7117
+ if (leafer)
7118
+ leafer.watcher.hasVisible = true;
7031
7119
  }
7032
7120
  setWidth(value) {
7033
7121
  if (value < 0) {
@@ -7218,7 +7306,7 @@ var LeaferUI = (function (exports) {
7218
7306
  __setImageFill(value) {
7219
7307
  if (this.__leaf.image)
7220
7308
  this.__leaf.image = null;
7221
- this.fill = value ? { type: 'image', mode: 'strench', url: value } : undefined;
7309
+ this.fill = value ? { type: 'image', mode: 'stretch', url: value } : undefined;
7222
7310
  }
7223
7311
  __getData() {
7224
7312
  const data = super.__getData();
@@ -7408,19 +7496,8 @@ var LeaferUI = (function (exports) {
7408
7496
  exports.UI = UI_1 = class UI extends exports.Leaf {
7409
7497
  get app() { return this.leafer && this.leafer.app; }
7410
7498
  get isFrame() { return false; }
7411
- set scale(value) {
7412
- if (typeof value === 'number') {
7413
- this.scaleX = this.scaleY = value;
7414
- }
7415
- else {
7416
- this.scaleX = value.x;
7417
- this.scaleY = value.y;
7418
- }
7419
- }
7420
- get scale() {
7421
- const { scaleX, scaleY } = this;
7422
- return scaleX !== scaleY ? { x: scaleX, y: scaleY } : scaleX;
7423
- }
7499
+ set scale(value) { MathHelper.assignScale(this, value); }
7500
+ get scale() { return this.__.scale; }
7424
7501
  get pen() {
7425
7502
  const { path } = this.__;
7426
7503
  pen.set(this.path = path || []);
@@ -7435,8 +7512,15 @@ var LeaferUI = (function (exports) {
7435
7512
  super(data);
7436
7513
  }
7437
7514
  reset(_data) { }
7438
- set(data) {
7439
- Object.assign(this, data);
7515
+ set(data, isTemp) {
7516
+ if (isTemp) {
7517
+ this.lockNormalStyle = true;
7518
+ Object.assign(this, data);
7519
+ this.lockNormalStyle = false;
7520
+ }
7521
+ else {
7522
+ Object.assign(this, data);
7523
+ }
7440
7524
  }
7441
7525
  get(name) {
7442
7526
  return typeof name === 'string' ? this.__.__getInput(name) : this.__.__getInputData(name);
@@ -7499,11 +7583,18 @@ var LeaferUI = (function (exports) {
7499
7583
  drawer.rect(x, y, width, height);
7500
7584
  }
7501
7585
  }
7586
+ animate(_keyframe, _options, _type, _isTemp) {
7587
+ return needPlugin('animate');
7588
+ }
7589
+ killAnimate(_type) { }
7502
7590
  export(filename, options) {
7503
7591
  return Export.export(this, filename, options);
7504
7592
  }
7505
- clone() {
7506
- return UI_1.one(this.toJSON());
7593
+ clone(newData) {
7594
+ const json = this.toJSON();
7595
+ if (newData)
7596
+ Object.assign(json, newData);
7597
+ return UI_1.one(json);
7507
7598
  }
7508
7599
  static one(data, x, y, width, height) {
7509
7600
  return UICreator.get(data.tag || this.prototype.__tag, data, x, y, width, height);
@@ -7519,6 +7610,8 @@ var LeaferUI = (function (exports) {
7519
7610
  static setEditInner(_editorName) { }
7520
7611
  destroy() {
7521
7612
  this.fill = this.stroke = null;
7613
+ if (this.__animate)
7614
+ this.killAnimate();
7522
7615
  super.destroy();
7523
7616
  }
7524
7617
  };
@@ -7546,12 +7639,6 @@ var LeaferUI = (function (exports) {
7546
7639
  __decorate([
7547
7640
  visibleType(true)
7548
7641
  ], exports.UI.prototype, "visible", void 0);
7549
- __decorate([
7550
- stateType(false)
7551
- ], exports.UI.prototype, "selected", void 0);
7552
- __decorate([
7553
- stateType(false)
7554
- ], exports.UI.prototype, "disabled", void 0);
7555
7642
  __decorate([
7556
7643
  surfaceType(false)
7557
7644
  ], exports.UI.prototype, "locked", void 0);
@@ -7624,45 +7711,9 @@ var LeaferUI = (function (exports) {
7624
7711
  __decorate([
7625
7712
  pathType(true)
7626
7713
  ], exports.UI.prototype, "closed", void 0);
7627
- __decorate([
7628
- autoLayoutType(false)
7629
- ], exports.UI.prototype, "flow", void 0);
7630
7714
  __decorate([
7631
7715
  boundsType(0)
7632
7716
  ], exports.UI.prototype, "padding", void 0);
7633
- __decorate([
7634
- boundsType(0)
7635
- ], exports.UI.prototype, "gap", void 0);
7636
- __decorate([
7637
- boundsType('top-left')
7638
- ], exports.UI.prototype, "flowAlign", void 0);
7639
- __decorate([
7640
- boundsType(false)
7641
- ], exports.UI.prototype, "flowWrap", void 0);
7642
- __decorate([
7643
- boundsType('box')
7644
- ], exports.UI.prototype, "itemBox", void 0);
7645
- __decorate([
7646
- boundsType(true)
7647
- ], exports.UI.prototype, "inFlow", void 0);
7648
- __decorate([
7649
- boundsType()
7650
- ], exports.UI.prototype, "autoWidth", void 0);
7651
- __decorate([
7652
- boundsType()
7653
- ], exports.UI.prototype, "autoHeight", void 0);
7654
- __decorate([
7655
- boundsType()
7656
- ], exports.UI.prototype, "lockRatio", void 0);
7657
- __decorate([
7658
- boundsType()
7659
- ], exports.UI.prototype, "autoBox", void 0);
7660
- __decorate([
7661
- boundsType()
7662
- ], exports.UI.prototype, "widthRange", void 0);
7663
- __decorate([
7664
- boundsType()
7665
- ], exports.UI.prototype, "heightRange", void 0);
7666
7717
  __decorate([
7667
7718
  dataType(false)
7668
7719
  ], exports.UI.prototype, "draggable", void 0);
@@ -7726,12 +7777,6 @@ var LeaferUI = (function (exports) {
7726
7777
  __decorate([
7727
7778
  strokeType(10)
7728
7779
  ], exports.UI.prototype, "miterLimit", void 0);
7729
- __decorate([
7730
- arrowType('none')
7731
- ], exports.UI.prototype, "startArrow", void 0);
7732
- __decorate([
7733
- arrowType('none')
7734
- ], exports.UI.prototype, "endArrow", void 0);
7735
7780
  __decorate([
7736
7781
  pathType(0)
7737
7782
  ], exports.UI.prototype, "cornerRadius", void 0);
@@ -7753,24 +7798,6 @@ var LeaferUI = (function (exports) {
7753
7798
  __decorate([
7754
7799
  effectType()
7755
7800
  ], exports.UI.prototype, "grayscale", void 0);
7756
- __decorate([
7757
- dataType()
7758
- ], exports.UI.prototype, "normalStyle", void 0);
7759
- __decorate([
7760
- dataType()
7761
- ], exports.UI.prototype, "hoverStyle", void 0);
7762
- __decorate([
7763
- dataType()
7764
- ], exports.UI.prototype, "pressStyle", void 0);
7765
- __decorate([
7766
- dataType()
7767
- ], exports.UI.prototype, "focusStyle", void 0);
7768
- __decorate([
7769
- dataType()
7770
- ], exports.UI.prototype, "selectedStyle", void 0);
7771
- __decorate([
7772
- dataType()
7773
- ], exports.UI.prototype, "disabledStyle", void 0);
7774
7801
  __decorate([
7775
7802
  dataType({})
7776
7803
  ], exports.UI.prototype, "data", void 0);
@@ -7797,7 +7824,7 @@ var LeaferUI = (function (exports) {
7797
7824
  if (!this.children)
7798
7825
  this.children = [];
7799
7826
  }
7800
- set(data) {
7827
+ set(data, isTemp) {
7801
7828
  if (data.children) {
7802
7829
  const { children } = data;
7803
7830
  delete data.children;
@@ -7807,7 +7834,7 @@ var LeaferUI = (function (exports) {
7807
7834
  else {
7808
7835
  this.clear();
7809
7836
  }
7810
- super.set(data);
7837
+ super.set(data, isTemp);
7811
7838
  let child;
7812
7839
  children.forEach(childData => {
7813
7840
  child = childData.__ ? childData : UICreator.get(childData.tag, childData);
@@ -7816,7 +7843,7 @@ var LeaferUI = (function (exports) {
7816
7843
  data.children = children;
7817
7844
  }
7818
7845
  else {
7819
- super.set(data);
7846
+ super.set(data, isTemp);
7820
7847
  }
7821
7848
  }
7822
7849
  toJSON(options) {
@@ -8143,7 +8170,7 @@ var LeaferUI = (function (exports) {
8143
8170
  }
8144
8171
  }
8145
8172
  zoom(_zoomType, _padding, _fixedScale) {
8146
- return debug$3.error('need @leafer-in/view');
8173
+ return needPlugin('view');
8147
8174
  }
8148
8175
  getValidMove(moveX, moveY) { return { x: moveX, y: moveY }; }
8149
8176
  getValidScale(changeScale) { return changeScale; }
@@ -8666,19 +8693,18 @@ var LeaferUI = (function (exports) {
8666
8693
  this.paint();
8667
8694
  }
8668
8695
  paint() {
8669
- this.forceUpdate('fill');
8696
+ this.forceRender();
8670
8697
  }
8671
8698
  __drawAfterFill(canvas, _options) {
8672
- const origin = this.canvas.view;
8673
- const { width, height } = this;
8674
- if (this.__.cornerRadius || this.pathInputed) {
8699
+ const { width, height, cornerRadius } = this.__, { view } = this.canvas;
8700
+ if (cornerRadius || this.pathInputed) {
8675
8701
  canvas.save();
8676
8702
  canvas.clip();
8677
- canvas.drawImage(this.canvas.view, 0, 0, origin.width, origin.height, 0, 0, width, height);
8703
+ canvas.drawImage(view, 0, 0, view.width, view.height, 0, 0, width, height);
8678
8704
  canvas.restore();
8679
8705
  }
8680
8706
  else {
8681
- canvas.drawImage(this.canvas.view, 0, 0, origin.width, origin.height, 0, 0, width, height);
8707
+ canvas.drawImage(view, 0, 0, view.width, view.height, 0, 0, width, height);
8682
8708
  }
8683
8709
  }
8684
8710
  __updateSize() {
@@ -9121,21 +9147,29 @@ var LeaferUI = (function (exports) {
9121
9147
  constructor(params) {
9122
9148
  super(params.type);
9123
9149
  this.bubbles = true;
9150
+ this.getInner = this.getInnerPoint;
9151
+ this.getLocal = this.getLocalPoint;
9152
+ this.getPage = this.getPagePoint;
9124
9153
  Object.assign(this, params);
9125
9154
  }
9126
- getPage() {
9127
- return this.current.getPagePoint(this);
9155
+ getBoxPoint(relative) {
9156
+ if (!relative)
9157
+ relative = this.current;
9158
+ return relative.getBoxPoint(this);
9128
9159
  }
9129
- getInner(relative) {
9160
+ getInnerPoint(relative) {
9130
9161
  if (!relative)
9131
9162
  relative = this.current;
9132
9163
  return relative.getInnerPoint(this);
9133
9164
  }
9134
- getLocal(relative) {
9165
+ getLocalPoint(relative) {
9135
9166
  if (!relative)
9136
9167
  relative = this.current;
9137
9168
  return relative.getLocalPoint(this);
9138
9169
  }
9170
+ getPagePoint() {
9171
+ return this.current.getPagePoint(this);
9172
+ }
9139
9173
  static changeName(oldName, newName) {
9140
9174
  EventCreator.changeName(oldName, newName);
9141
9175
  }
@@ -9243,7 +9277,7 @@ var LeaferUI = (function (exports) {
9243
9277
  }
9244
9278
  getPageBounds() {
9245
9279
  const total = this.getPageTotal();
9246
- const start = this.getPage();
9280
+ const start = this.getPagePoint();
9247
9281
  const bounds = {};
9248
9282
  BoundsHelper.set(bounds, start.x - total.x, start.y - total.y, total.x, total.y);
9249
9283
  BoundsHelper.unsign(bounds);
@@ -9827,7 +9861,7 @@ var LeaferUI = (function (exports) {
9827
9861
  if (leaf.destroyed)
9828
9862
  return false;
9829
9863
  if (leaf.__.hitSelf && !exclude(leaf, excludePath)) {
9830
- if (State.updateEventStyle)
9864
+ if (State.updateEventStyle && !capture)
9831
9865
  State.updateEventStyle(leaf, type);
9832
9866
  if (leaf.hasEvent(type, capture)) {
9833
9867
  data.phase = capture ? 1 : ((leaf === data.target) ? 2 : 3);
@@ -9932,7 +9966,7 @@ var LeaferUI = (function (exports) {
9932
9966
  this.tapWait();
9933
9967
  this.longPressWait(data);
9934
9968
  }
9935
- this.waitMenuTap = PointerButton.right(data);
9969
+ this.waitRightTap = PointerButton.right(data);
9936
9970
  this.dragger.setDragData(data);
9937
9971
  if (!this.isHoldRightKey)
9938
9972
  this.updateCursor(data);
@@ -9960,7 +9994,7 @@ var LeaferUI = (function (exports) {
9960
9994
  if (canDrag) {
9961
9995
  if (this.waitTap)
9962
9996
  this.pointerWaitCancel();
9963
- this.waitMenuTap = false;
9997
+ this.waitRightTap = false;
9964
9998
  }
9965
9999
  this.dragger.checkDrag(data, canDrag);
9966
10000
  }
@@ -10014,10 +10048,15 @@ var LeaferUI = (function (exports) {
10014
10048
  menu(data) {
10015
10049
  this.findPath(data);
10016
10050
  this.emit(exports.PointerEvent.MENU, data);
10051
+ this.waitMenuTap = true;
10052
+ if (!this.downData && this.waitRightTap)
10053
+ this.menuTap(data);
10017
10054
  }
10018
10055
  menuTap(data) {
10019
- if (this.waitMenuTap)
10056
+ if (this.waitRightTap && this.waitMenuTap) {
10020
10057
  this.emit(exports.PointerEvent.MENU_TAP, data);
10058
+ this.waitRightTap = this.waitMenuTap = false;
10059
+ }
10021
10060
  }
10022
10061
  move(data) {
10023
10062
  this.transformer.move(data);
@@ -11213,6 +11252,8 @@ var LeaferUI = (function (exports) {
11213
11252
  let { width, height } = image;
11214
11253
  if (paint.padding)
11215
11254
  box = tempBox.set(box).shrink(paint.padding);
11255
+ if (paint.mode === 'strench')
11256
+ paint.mode = 'stretch';
11216
11257
  const { opacity, mode, align, offset, scale, size, rotation, repeat } = paint;
11217
11258
  const sameBox = box.width === width && box.height === height;
11218
11259
  const data = { mode };
@@ -11241,7 +11282,7 @@ var LeaferUI = (function (exports) {
11241
11282
  if (offset)
11242
11283
  x += offset.x, y += offset.y;
11243
11284
  switch (mode) {
11244
- case 'strench':
11285
+ case 'stretch':
11245
11286
  if (!sameBox)
11246
11287
  width = box.width, height = box.height;
11247
11288
  break;
@@ -11268,7 +11309,7 @@ var LeaferUI = (function (exports) {
11268
11309
  translate(data.transform, box.x, box.y);
11269
11310
  }
11270
11311
  }
11271
- if (scaleX && mode !== 'strench') {
11312
+ if (scaleX && mode !== 'stretch') {
11272
11313
  data.scaleX = scaleX;
11273
11314
  data.scaleY = scaleY;
11274
11315
  }
@@ -11372,7 +11413,7 @@ var LeaferUI = (function (exports) {
11372
11413
  const { ceil, abs: abs$1 } = Math;
11373
11414
  function createPattern(ui, paint, pixelRatio) {
11374
11415
  let { scaleX, scaleY } = ImageManager.patternLocked ? ui.__world : ui.__nowWorld;
11375
- const id = scaleX + '-' + scaleY;
11416
+ const id = scaleX + '-' + scaleY + '-' + pixelRatio;
11376
11417
  if (paint.patternId !== id && !ui.destroyed) {
11377
11418
  scaleX = abs$1(scaleX);
11378
11419
  scaleY = abs$1(scaleY);
@@ -11434,7 +11475,8 @@ var LeaferUI = (function (exports) {
11434
11475
  const { abs } = Math;
11435
11476
  function checkImage(ui, canvas, paint, allowPaint) {
11436
11477
  const { scaleX, scaleY } = ImageManager.patternLocked ? ui.__world : ui.__nowWorld;
11437
- if (!paint.data || (paint.patternId === scaleX + '-' + scaleY && !Export.running)) {
11478
+ const { pixelRatio } = canvas;
11479
+ if (!paint.data || (paint.patternId === scaleX + '-' + scaleY + '-' + pixelRatio && !Export.running)) {
11438
11480
  return false;
11439
11481
  }
11440
11482
  else {
@@ -11442,8 +11484,8 @@ var LeaferUI = (function (exports) {
11442
11484
  if (allowPaint) {
11443
11485
  if (!data.repeat) {
11444
11486
  let { width, height } = data;
11445
- width *= abs(scaleX) * canvas.pixelRatio;
11446
- height *= abs(scaleY) * canvas.pixelRatio;
11487
+ width *= abs(scaleX) * pixelRatio;
11488
+ height *= abs(scaleY) * pixelRatio;
11447
11489
  if (data.scaleX) {
11448
11490
  width *= data.scaleX;
11449
11491
  height *= data.scaleY;
@@ -11469,14 +11511,14 @@ var LeaferUI = (function (exports) {
11469
11511
  }
11470
11512
  else {
11471
11513
  if (!paint.style || paint.sync || Export.running) {
11472
- createPattern(ui, paint, canvas.pixelRatio);
11514
+ createPattern(ui, paint, pixelRatio);
11473
11515
  }
11474
11516
  else {
11475
11517
  if (!paint.patternTask) {
11476
11518
  paint.patternTask = ImageManager.patternTasker.add(() => __awaiter(this, void 0, void 0, function* () {
11477
11519
  paint.patternTask = null;
11478
11520
  if (canvas.bounds.hit(ui.__nowWorld))
11479
- createPattern(ui, paint, canvas.pixelRatio);
11521
+ createPattern(ui, paint, pixelRatio);
11480
11522
  ui.forceUpdate('surface');
11481
11523
  }), 300);
11482
11524
  }
@@ -11540,14 +11582,16 @@ var LeaferUI = (function (exports) {
11540
11582
  return data;
11541
11583
  }
11542
11584
  function applyStops(gradient, stops, opacity) {
11543
- let stop;
11544
- for (let i = 0, len = stops.length; i < len; i++) {
11545
- stop = stops[i];
11546
- if (typeof stop === 'string') {
11547
- gradient.addColorStop(i / (len - 1), ColorConvert.string(stop, opacity));
11548
- }
11549
- else {
11550
- gradient.addColorStop(stop.offset, ColorConvert.string(stop.color, opacity));
11585
+ if (stops) {
11586
+ let stop;
11587
+ for (let i = 0, len = stops.length; i < len; i++) {
11588
+ stop = stops[i];
11589
+ if (typeof stop === 'string') {
11590
+ gradient.addColorStop(i / (len - 1), ColorConvert.string(stop, opacity));
11591
+ }
11592
+ else {
11593
+ gradient.addColorStop(stop.offset, ColorConvert.string(stop.color, opacity));
11594
+ }
11551
11595
  }
11552
11596
  }
11553
11597
  }
@@ -12303,10 +12347,15 @@ var LeaferUI = (function (exports) {
12303
12347
  };
12304
12348
 
12305
12349
  function string(color, opacity) {
12306
- if (typeof color === 'string')
12307
- return color;
12350
+ const doOpacity = typeof opacity === 'number' && opacity !== 1;
12351
+ if (typeof color === 'string') {
12352
+ if (doOpacity && ColorConvert.object)
12353
+ color = ColorConvert.object(color);
12354
+ else
12355
+ return color;
12356
+ }
12308
12357
  let a = color.a === undefined ? 1 : color.a;
12309
- if (opacity)
12358
+ if (doOpacity)
12310
12359
  a *= opacity;
12311
12360
  const rgb = color.r + ',' + color.g + ',' + color.b;
12312
12361
  return a === 1 ? 'rgb(' + rgb + ')' : 'rgba(' + rgb + ',' + a + ')';
@@ -12519,7 +12568,6 @@ var LeaferUI = (function (exports) {
12519
12568
  useCanvas();
12520
12569
 
12521
12570
  exports.AlignHelper = AlignHelper;
12522
- exports.AnimateEvent = AnimateEvent;
12523
12571
  exports.AroundHelper = AroundHelper;
12524
12572
  exports.AutoBounds = AutoBounds;
12525
12573
  exports.BezierHelper = BezierHelper;
@@ -12541,6 +12589,7 @@ var LeaferUI = (function (exports) {
12541
12589
  exports.EllipseHelper = EllipseHelper;
12542
12590
  exports.Event = Event;
12543
12591
  exports.EventCreator = EventCreator;
12592
+ exports.Eventer = Eventer;
12544
12593
  exports.Export = Export;
12545
12594
  exports.FileHelper = FileHelper;
12546
12595
  exports.FrameData = FrameData;
@@ -12622,6 +12671,7 @@ var LeaferUI = (function (exports) {
12622
12671
  exports.TaskProcessor = TaskProcessor;
12623
12672
  exports.TextConvert = TextConvert;
12624
12673
  exports.TextData = TextData;
12674
+ exports.Transition = Transition;
12625
12675
  exports.TwoPointBoundsHelper = TwoPointBoundsHelper;
12626
12676
  exports.UIBounds = UIBounds;
12627
12677
  exports.UICreator = UICreator;
@@ -12635,7 +12685,6 @@ var LeaferUI = (function (exports) {
12635
12685
  exports.addInteractionWindow = addInteractionWindow;
12636
12686
  exports.affectRenderBoundsType = affectRenderBoundsType;
12637
12687
  exports.affectStrokeBoundsType = affectStrokeBoundsType;
12638
- exports.arrowType = arrowType;
12639
12688
  exports.attr = attr;
12640
12689
  exports.autoLayoutType = autoLayoutType;
12641
12690
  exports.boundsType = boundsType;
@@ -12658,10 +12707,11 @@ var LeaferUI = (function (exports) {
12658
12707
  exports.getMatrixData = getMatrixData;
12659
12708
  exports.getPointData = getPointData;
12660
12709
  exports.hitType = hitType;
12661
- exports.inviteCode = inviteCode;
12710
+ exports.isNull = isNull;
12662
12711
  exports.layoutProcessor = layoutProcessor;
12663
12712
  exports.maskType = maskType;
12664
12713
  exports.naturalBoundsType = naturalBoundsType;
12714
+ exports.needPlugin = needPlugin;
12665
12715
  exports.opacityType = opacityType;
12666
12716
  exports.pathInputType = pathInputType;
12667
12717
  exports.pathType = pathType;
@@ -12675,7 +12725,6 @@ var LeaferUI = (function (exports) {
12675
12725
  exports.rotationType = rotationType;
12676
12726
  exports.scaleType = scaleType;
12677
12727
  exports.sortType = sortType;
12678
- exports.stateType = stateType;
12679
12728
  exports.strokeType = strokeType;
12680
12729
  exports.surfaceType = surfaceType;
12681
12730
  exports.tempBounds = tempBounds$1;