@leafer-ui/worker 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/worker.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$e = 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$7 = 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
  class LeaferCanvas extends LeaferCanvasBase {
5832
5923
  get allowBackgroundColor() { return true; }
@@ -6053,9 +6144,13 @@ var LeaferUI = (function (exports) {
6053
6144
  });
6054
6145
  }
6055
6146
  function updateChange(updateList) {
6147
+ let layout;
6056
6148
  updateList.list.forEach(leaf => {
6057
- if (leaf.__layout.opacityChanged)
6149
+ layout = leaf.__layout;
6150
+ if (layout.opacityChanged)
6058
6151
  updateAllWorldOpacity(leaf);
6152
+ if (layout.stateStyleChanged)
6153
+ setTimeout(() => layout.stateStyleChanged && leaf.updateState());
6059
6154
  leaf.__updateChange();
6060
6155
  });
6061
6156
  }
@@ -6421,7 +6516,6 @@ var LeaferUI = (function (exports) {
6421
6516
  Platform.requestRender(() => {
6422
6517
  this.FPS = Math.min(60, Math.ceil(1000 / (Date.now() - startTime)));
6423
6518
  if (this.running) {
6424
- this.target.emit(AnimateEvent.FRAME);
6425
6519
  if (this.changed && this.canvas.view)
6426
6520
  this.render();
6427
6521
  this.target.emit(RenderEvent.NEXT);
@@ -6766,36 +6860,6 @@ var LeaferUI = (function (exports) {
6766
6860
  });
6767
6861
  Platform.layout = Layouter.fullLayout;
6768
6862
 
6769
- const TextConvert = {};
6770
- const ColorConvert = {};
6771
- const PathArrow = {};
6772
- const Paint = {};
6773
- const PaintImage = {};
6774
- const PaintGradient = {};
6775
- const Effect = {};
6776
- const Export = {};
6777
- const State = {};
6778
-
6779
- function stateType(defaultValue) {
6780
- return decorateLeafAttr(defaultValue, (key) => attr({
6781
- set(value) {
6782
- this.__setAttr(key, value);
6783
- this.waitLeafer(() => { if (State.setStyle)
6784
- State.setStyle(this, key + 'Style', value); });
6785
- }
6786
- }));
6787
- }
6788
- function arrowType(defaultValue) {
6789
- return decorateLeafAttr(defaultValue, (key) => attr({
6790
- set(value) {
6791
- if (this.__setAttr(key, value)) {
6792
- const data = this.__;
6793
- data.__useArrow = data.startArrow !== 'none' || data.endArrow !== 'none';
6794
- doStrokeType(this);
6795
- }
6796
- }
6797
- }));
6798
- }
6799
6863
  function effectType(defaultValue) {
6800
6864
  return decorateLeafAttr(defaultValue, (key) => attr({
6801
6865
  set(value) {
@@ -6830,10 +6894,33 @@ var LeaferUI = (function (exports) {
6830
6894
  };
6831
6895
  }
6832
6896
 
6897
+ const TextConvert = {};
6898
+ const ColorConvert = {};
6899
+ const PathArrow = {};
6900
+ const Paint = {};
6901
+ const PaintImage = {};
6902
+ const PaintGradient = {};
6903
+ const Effect = {};
6904
+ const Export = {};
6905
+ const State = {
6906
+ setStyleName(_leaf, _styleName, _value) { return needPlugin('state'); },
6907
+ set(_leaf, _stateName) { return needPlugin('state'); }
6908
+ };
6909
+ const Transition = {
6910
+ list: {},
6911
+ register(attrName, fn) {
6912
+ Transition.list[attrName] = fn;
6913
+ },
6914
+ get(attrName) {
6915
+ return Transition.list[attrName];
6916
+ }
6917
+ };
6918
+
6833
6919
  const { parse } = PathConvert;
6834
6920
  const emptyPaint = {};
6835
6921
  const debug$4 = Debug.get('UIData');
6836
6922
  class UIData extends LeafData {
6923
+ get scale() { const { scaleX, scaleY } = this; return scaleX !== scaleY ? { x: scaleX, y: scaleY } : scaleX; }
6837
6924
  get __strokeWidth() {
6838
6925
  const { strokeWidth, strokeWidthFixed } = this;
6839
6926
  if (strokeWidthFixed) {
@@ -6852,9 +6939,10 @@ var LeaferUI = (function (exports) {
6852
6939
  get __autoSide() { return !this._width || !this._height; }
6853
6940
  get __autoSize() { return !this._width && !this._height; }
6854
6941
  setVisible(value) {
6855
- if (this.__leaf.leafer)
6856
- this.__leaf.leafer.watcher.hasVisible = true;
6857
6942
  this._visible = value;
6943
+ const { leafer } = this.__leaf;
6944
+ if (leafer)
6945
+ leafer.watcher.hasVisible = true;
6858
6946
  }
6859
6947
  setWidth(value) {
6860
6948
  if (value < 0) {
@@ -7045,7 +7133,7 @@ var LeaferUI = (function (exports) {
7045
7133
  __setImageFill(value) {
7046
7134
  if (this.__leaf.image)
7047
7135
  this.__leaf.image = null;
7048
- this.fill = value ? { type: 'image', mode: 'strench', url: value } : undefined;
7136
+ this.fill = value ? { type: 'image', mode: 'stretch', url: value } : undefined;
7049
7137
  }
7050
7138
  __getData() {
7051
7139
  const data = super.__getData();
@@ -7235,19 +7323,8 @@ var LeaferUI = (function (exports) {
7235
7323
  exports.UI = UI_1 = class UI extends exports.Leaf {
7236
7324
  get app() { return this.leafer && this.leafer.app; }
7237
7325
  get isFrame() { return false; }
7238
- set scale(value) {
7239
- if (typeof value === 'number') {
7240
- this.scaleX = this.scaleY = value;
7241
- }
7242
- else {
7243
- this.scaleX = value.x;
7244
- this.scaleY = value.y;
7245
- }
7246
- }
7247
- get scale() {
7248
- const { scaleX, scaleY } = this;
7249
- return scaleX !== scaleY ? { x: scaleX, y: scaleY } : scaleX;
7250
- }
7326
+ set scale(value) { MathHelper.assignScale(this, value); }
7327
+ get scale() { return this.__.scale; }
7251
7328
  get pen() {
7252
7329
  const { path } = this.__;
7253
7330
  pen.set(this.path = path || []);
@@ -7262,8 +7339,15 @@ var LeaferUI = (function (exports) {
7262
7339
  super(data);
7263
7340
  }
7264
7341
  reset(_data) { }
7265
- set(data) {
7266
- Object.assign(this, data);
7342
+ set(data, isTemp) {
7343
+ if (isTemp) {
7344
+ this.lockNormalStyle = true;
7345
+ Object.assign(this, data);
7346
+ this.lockNormalStyle = false;
7347
+ }
7348
+ else {
7349
+ Object.assign(this, data);
7350
+ }
7267
7351
  }
7268
7352
  get(name) {
7269
7353
  return typeof name === 'string' ? this.__.__getInput(name) : this.__.__getInputData(name);
@@ -7326,11 +7410,18 @@ var LeaferUI = (function (exports) {
7326
7410
  drawer.rect(x, y, width, height);
7327
7411
  }
7328
7412
  }
7413
+ animate(_keyframe, _options, _type, _isTemp) {
7414
+ return needPlugin('animate');
7415
+ }
7416
+ killAnimate(_type) { }
7329
7417
  export(filename, options) {
7330
7418
  return Export.export(this, filename, options);
7331
7419
  }
7332
- clone() {
7333
- return UI_1.one(this.toJSON());
7420
+ clone(newData) {
7421
+ const json = this.toJSON();
7422
+ if (newData)
7423
+ Object.assign(json, newData);
7424
+ return UI_1.one(json);
7334
7425
  }
7335
7426
  static one(data, x, y, width, height) {
7336
7427
  return UICreator.get(data.tag || this.prototype.__tag, data, x, y, width, height);
@@ -7346,6 +7437,8 @@ var LeaferUI = (function (exports) {
7346
7437
  static setEditInner(_editorName) { }
7347
7438
  destroy() {
7348
7439
  this.fill = this.stroke = null;
7440
+ if (this.__animate)
7441
+ this.killAnimate();
7349
7442
  super.destroy();
7350
7443
  }
7351
7444
  };
@@ -7373,12 +7466,6 @@ var LeaferUI = (function (exports) {
7373
7466
  __decorate([
7374
7467
  visibleType(true)
7375
7468
  ], exports.UI.prototype, "visible", void 0);
7376
- __decorate([
7377
- stateType(false)
7378
- ], exports.UI.prototype, "selected", void 0);
7379
- __decorate([
7380
- stateType(false)
7381
- ], exports.UI.prototype, "disabled", void 0);
7382
7469
  __decorate([
7383
7470
  surfaceType(false)
7384
7471
  ], exports.UI.prototype, "locked", void 0);
@@ -7451,45 +7538,9 @@ var LeaferUI = (function (exports) {
7451
7538
  __decorate([
7452
7539
  pathType(true)
7453
7540
  ], exports.UI.prototype, "closed", void 0);
7454
- __decorate([
7455
- autoLayoutType(false)
7456
- ], exports.UI.prototype, "flow", void 0);
7457
7541
  __decorate([
7458
7542
  boundsType(0)
7459
7543
  ], exports.UI.prototype, "padding", void 0);
7460
- __decorate([
7461
- boundsType(0)
7462
- ], exports.UI.prototype, "gap", void 0);
7463
- __decorate([
7464
- boundsType('top-left')
7465
- ], exports.UI.prototype, "flowAlign", void 0);
7466
- __decorate([
7467
- boundsType(false)
7468
- ], exports.UI.prototype, "flowWrap", void 0);
7469
- __decorate([
7470
- boundsType('box')
7471
- ], exports.UI.prototype, "itemBox", void 0);
7472
- __decorate([
7473
- boundsType(true)
7474
- ], exports.UI.prototype, "inFlow", void 0);
7475
- __decorate([
7476
- boundsType()
7477
- ], exports.UI.prototype, "autoWidth", void 0);
7478
- __decorate([
7479
- boundsType()
7480
- ], exports.UI.prototype, "autoHeight", void 0);
7481
- __decorate([
7482
- boundsType()
7483
- ], exports.UI.prototype, "lockRatio", void 0);
7484
- __decorate([
7485
- boundsType()
7486
- ], exports.UI.prototype, "autoBox", void 0);
7487
- __decorate([
7488
- boundsType()
7489
- ], exports.UI.prototype, "widthRange", void 0);
7490
- __decorate([
7491
- boundsType()
7492
- ], exports.UI.prototype, "heightRange", void 0);
7493
7544
  __decorate([
7494
7545
  dataType(false)
7495
7546
  ], exports.UI.prototype, "draggable", void 0);
@@ -7553,12 +7604,6 @@ var LeaferUI = (function (exports) {
7553
7604
  __decorate([
7554
7605
  strokeType(10)
7555
7606
  ], exports.UI.prototype, "miterLimit", void 0);
7556
- __decorate([
7557
- arrowType('none')
7558
- ], exports.UI.prototype, "startArrow", void 0);
7559
- __decorate([
7560
- arrowType('none')
7561
- ], exports.UI.prototype, "endArrow", void 0);
7562
7607
  __decorate([
7563
7608
  pathType(0)
7564
7609
  ], exports.UI.prototype, "cornerRadius", void 0);
@@ -7580,24 +7625,6 @@ var LeaferUI = (function (exports) {
7580
7625
  __decorate([
7581
7626
  effectType()
7582
7627
  ], exports.UI.prototype, "grayscale", void 0);
7583
- __decorate([
7584
- dataType()
7585
- ], exports.UI.prototype, "normalStyle", void 0);
7586
- __decorate([
7587
- dataType()
7588
- ], exports.UI.prototype, "hoverStyle", void 0);
7589
- __decorate([
7590
- dataType()
7591
- ], exports.UI.prototype, "pressStyle", void 0);
7592
- __decorate([
7593
- dataType()
7594
- ], exports.UI.prototype, "focusStyle", void 0);
7595
- __decorate([
7596
- dataType()
7597
- ], exports.UI.prototype, "selectedStyle", void 0);
7598
- __decorate([
7599
- dataType()
7600
- ], exports.UI.prototype, "disabledStyle", void 0);
7601
7628
  __decorate([
7602
7629
  dataType({})
7603
7630
  ], exports.UI.prototype, "data", void 0);
@@ -7624,7 +7651,7 @@ var LeaferUI = (function (exports) {
7624
7651
  if (!this.children)
7625
7652
  this.children = [];
7626
7653
  }
7627
- set(data) {
7654
+ set(data, isTemp) {
7628
7655
  if (data.children) {
7629
7656
  const { children } = data;
7630
7657
  delete data.children;
@@ -7634,7 +7661,7 @@ var LeaferUI = (function (exports) {
7634
7661
  else {
7635
7662
  this.clear();
7636
7663
  }
7637
- super.set(data);
7664
+ super.set(data, isTemp);
7638
7665
  let child;
7639
7666
  children.forEach(childData => {
7640
7667
  child = childData.__ ? childData : UICreator.get(childData.tag, childData);
@@ -7643,7 +7670,7 @@ var LeaferUI = (function (exports) {
7643
7670
  data.children = children;
7644
7671
  }
7645
7672
  else {
7646
- super.set(data);
7673
+ super.set(data, isTemp);
7647
7674
  }
7648
7675
  }
7649
7676
  toJSON(options) {
@@ -7970,7 +7997,7 @@ var LeaferUI = (function (exports) {
7970
7997
  }
7971
7998
  }
7972
7999
  zoom(_zoomType, _padding, _fixedScale) {
7973
- return debug$3.error('need @leafer-in/view');
8000
+ return needPlugin('view');
7974
8001
  }
7975
8002
  getValidMove(moveX, moveY) { return { x: moveX, y: moveY }; }
7976
8003
  getValidScale(changeScale) { return changeScale; }
@@ -8493,19 +8520,18 @@ var LeaferUI = (function (exports) {
8493
8520
  this.paint();
8494
8521
  }
8495
8522
  paint() {
8496
- this.forceUpdate('fill');
8523
+ this.forceRender();
8497
8524
  }
8498
8525
  __drawAfterFill(canvas, _options) {
8499
- const origin = this.canvas.view;
8500
- const { width, height } = this;
8501
- if (this.__.cornerRadius || this.pathInputed) {
8526
+ const { width, height, cornerRadius } = this.__, { view } = this.canvas;
8527
+ if (cornerRadius || this.pathInputed) {
8502
8528
  canvas.save();
8503
8529
  canvas.clip();
8504
- canvas.drawImage(this.canvas.view, 0, 0, origin.width, origin.height, 0, 0, width, height);
8530
+ canvas.drawImage(view, 0, 0, view.width, view.height, 0, 0, width, height);
8505
8531
  canvas.restore();
8506
8532
  }
8507
8533
  else {
8508
- canvas.drawImage(this.canvas.view, 0, 0, origin.width, origin.height, 0, 0, width, height);
8534
+ canvas.drawImage(view, 0, 0, view.width, view.height, 0, 0, width, height);
8509
8535
  }
8510
8536
  }
8511
8537
  __updateSize() {
@@ -8948,21 +8974,29 @@ var LeaferUI = (function (exports) {
8948
8974
  constructor(params) {
8949
8975
  super(params.type);
8950
8976
  this.bubbles = true;
8977
+ this.getInner = this.getInnerPoint;
8978
+ this.getLocal = this.getLocalPoint;
8979
+ this.getPage = this.getPagePoint;
8951
8980
  Object.assign(this, params);
8952
8981
  }
8953
- getPage() {
8954
- return this.current.getPagePoint(this);
8982
+ getBoxPoint(relative) {
8983
+ if (!relative)
8984
+ relative = this.current;
8985
+ return relative.getBoxPoint(this);
8955
8986
  }
8956
- getInner(relative) {
8987
+ getInnerPoint(relative) {
8957
8988
  if (!relative)
8958
8989
  relative = this.current;
8959
8990
  return relative.getInnerPoint(this);
8960
8991
  }
8961
- getLocal(relative) {
8992
+ getLocalPoint(relative) {
8962
8993
  if (!relative)
8963
8994
  relative = this.current;
8964
8995
  return relative.getLocalPoint(this);
8965
8996
  }
8997
+ getPagePoint() {
8998
+ return this.current.getPagePoint(this);
8999
+ }
8966
9000
  static changeName(oldName, newName) {
8967
9001
  EventCreator.changeName(oldName, newName);
8968
9002
  }
@@ -9070,7 +9104,7 @@ var LeaferUI = (function (exports) {
9070
9104
  }
9071
9105
  getPageBounds() {
9072
9106
  const total = this.getPageTotal();
9073
- const start = this.getPage();
9107
+ const start = this.getPagePoint();
9074
9108
  const bounds = {};
9075
9109
  BoundsHelper.set(bounds, start.x - total.x, start.y - total.y, total.x, total.y);
9076
9110
  BoundsHelper.unsign(bounds);
@@ -9654,7 +9688,7 @@ var LeaferUI = (function (exports) {
9654
9688
  if (leaf.destroyed)
9655
9689
  return false;
9656
9690
  if (leaf.__.hitSelf && !exclude(leaf, excludePath)) {
9657
- if (State.updateEventStyle)
9691
+ if (State.updateEventStyle && !capture)
9658
9692
  State.updateEventStyle(leaf, type);
9659
9693
  if (leaf.hasEvent(type, capture)) {
9660
9694
  data.phase = capture ? 1 : ((leaf === data.target) ? 2 : 3);
@@ -9759,7 +9793,7 @@ var LeaferUI = (function (exports) {
9759
9793
  this.tapWait();
9760
9794
  this.longPressWait(data);
9761
9795
  }
9762
- this.waitMenuTap = PointerButton.right(data);
9796
+ this.waitRightTap = PointerButton.right(data);
9763
9797
  this.dragger.setDragData(data);
9764
9798
  if (!this.isHoldRightKey)
9765
9799
  this.updateCursor(data);
@@ -9787,7 +9821,7 @@ var LeaferUI = (function (exports) {
9787
9821
  if (canDrag) {
9788
9822
  if (this.waitTap)
9789
9823
  this.pointerWaitCancel();
9790
- this.waitMenuTap = false;
9824
+ this.waitRightTap = false;
9791
9825
  }
9792
9826
  this.dragger.checkDrag(data, canDrag);
9793
9827
  }
@@ -9841,10 +9875,15 @@ var LeaferUI = (function (exports) {
9841
9875
  menu(data) {
9842
9876
  this.findPath(data);
9843
9877
  this.emit(exports.PointerEvent.MENU, data);
9878
+ this.waitMenuTap = true;
9879
+ if (!this.downData && this.waitRightTap)
9880
+ this.menuTap(data);
9844
9881
  }
9845
9882
  menuTap(data) {
9846
- if (this.waitMenuTap)
9883
+ if (this.waitRightTap && this.waitMenuTap) {
9847
9884
  this.emit(exports.PointerEvent.MENU_TAP, data);
9885
+ this.waitRightTap = this.waitMenuTap = false;
9886
+ }
9848
9887
  }
9849
9888
  move(data) {
9850
9889
  this.transformer.move(data);
@@ -10688,6 +10727,8 @@ var LeaferUI = (function (exports) {
10688
10727
  let { width, height } = image;
10689
10728
  if (paint.padding)
10690
10729
  box = tempBox.set(box).shrink(paint.padding);
10730
+ if (paint.mode === 'strench')
10731
+ paint.mode = 'stretch';
10691
10732
  const { opacity, mode, align, offset, scale, size, rotation, repeat } = paint;
10692
10733
  const sameBox = box.width === width && box.height === height;
10693
10734
  const data = { mode };
@@ -10716,7 +10757,7 @@ var LeaferUI = (function (exports) {
10716
10757
  if (offset)
10717
10758
  x += offset.x, y += offset.y;
10718
10759
  switch (mode) {
10719
- case 'strench':
10760
+ case 'stretch':
10720
10761
  if (!sameBox)
10721
10762
  width = box.width, height = box.height;
10722
10763
  break;
@@ -10743,7 +10784,7 @@ var LeaferUI = (function (exports) {
10743
10784
  translate(data.transform, box.x, box.y);
10744
10785
  }
10745
10786
  }
10746
- if (scaleX && mode !== 'strench') {
10787
+ if (scaleX && mode !== 'stretch') {
10747
10788
  data.scaleX = scaleX;
10748
10789
  data.scaleY = scaleY;
10749
10790
  }
@@ -10847,7 +10888,7 @@ var LeaferUI = (function (exports) {
10847
10888
  const { ceil, abs: abs$1 } = Math;
10848
10889
  function createPattern(ui, paint, pixelRatio) {
10849
10890
  let { scaleX, scaleY } = ImageManager.patternLocked ? ui.__world : ui.__nowWorld;
10850
- const id = scaleX + '-' + scaleY;
10891
+ const id = scaleX + '-' + scaleY + '-' + pixelRatio;
10851
10892
  if (paint.patternId !== id && !ui.destroyed) {
10852
10893
  scaleX = abs$1(scaleX);
10853
10894
  scaleY = abs$1(scaleY);
@@ -10909,7 +10950,8 @@ var LeaferUI = (function (exports) {
10909
10950
  const { abs } = Math;
10910
10951
  function checkImage(ui, canvas, paint, allowPaint) {
10911
10952
  const { scaleX, scaleY } = ImageManager.patternLocked ? ui.__world : ui.__nowWorld;
10912
- if (!paint.data || (paint.patternId === scaleX + '-' + scaleY && !Export.running)) {
10953
+ const { pixelRatio } = canvas;
10954
+ if (!paint.data || (paint.patternId === scaleX + '-' + scaleY + '-' + pixelRatio && !Export.running)) {
10913
10955
  return false;
10914
10956
  }
10915
10957
  else {
@@ -10917,8 +10959,8 @@ var LeaferUI = (function (exports) {
10917
10959
  if (allowPaint) {
10918
10960
  if (!data.repeat) {
10919
10961
  let { width, height } = data;
10920
- width *= abs(scaleX) * canvas.pixelRatio;
10921
- height *= abs(scaleY) * canvas.pixelRatio;
10962
+ width *= abs(scaleX) * pixelRatio;
10963
+ height *= abs(scaleY) * pixelRatio;
10922
10964
  if (data.scaleX) {
10923
10965
  width *= data.scaleX;
10924
10966
  height *= data.scaleY;
@@ -10944,14 +10986,14 @@ var LeaferUI = (function (exports) {
10944
10986
  }
10945
10987
  else {
10946
10988
  if (!paint.style || paint.sync || Export.running) {
10947
- createPattern(ui, paint, canvas.pixelRatio);
10989
+ createPattern(ui, paint, pixelRatio);
10948
10990
  }
10949
10991
  else {
10950
10992
  if (!paint.patternTask) {
10951
10993
  paint.patternTask = ImageManager.patternTasker.add(() => __awaiter(this, void 0, void 0, function* () {
10952
10994
  paint.patternTask = null;
10953
10995
  if (canvas.bounds.hit(ui.__nowWorld))
10954
- createPattern(ui, paint, canvas.pixelRatio);
10996
+ createPattern(ui, paint, pixelRatio);
10955
10997
  ui.forceUpdate('surface');
10956
10998
  }), 300);
10957
10999
  }
@@ -11015,14 +11057,16 @@ var LeaferUI = (function (exports) {
11015
11057
  return data;
11016
11058
  }
11017
11059
  function applyStops(gradient, stops, opacity) {
11018
- let stop;
11019
- for (let i = 0, len = stops.length; i < len; i++) {
11020
- stop = stops[i];
11021
- if (typeof stop === 'string') {
11022
- gradient.addColorStop(i / (len - 1), ColorConvert.string(stop, opacity));
11023
- }
11024
- else {
11025
- gradient.addColorStop(stop.offset, ColorConvert.string(stop.color, opacity));
11060
+ if (stops) {
11061
+ let stop;
11062
+ for (let i = 0, len = stops.length; i < len; i++) {
11063
+ stop = stops[i];
11064
+ if (typeof stop === 'string') {
11065
+ gradient.addColorStop(i / (len - 1), ColorConvert.string(stop, opacity));
11066
+ }
11067
+ else {
11068
+ gradient.addColorStop(stop.offset, ColorConvert.string(stop.color, opacity));
11069
+ }
11026
11070
  }
11027
11071
  }
11028
11072
  }
@@ -11778,10 +11822,15 @@ var LeaferUI = (function (exports) {
11778
11822
  };
11779
11823
 
11780
11824
  function string(color, opacity) {
11781
- if (typeof color === 'string')
11782
- return color;
11825
+ const doOpacity = typeof opacity === 'number' && opacity !== 1;
11826
+ if (typeof color === 'string') {
11827
+ if (doOpacity && ColorConvert.object)
11828
+ color = ColorConvert.object(color);
11829
+ else
11830
+ return color;
11831
+ }
11783
11832
  let a = color.a === undefined ? 1 : color.a;
11784
- if (opacity)
11833
+ if (doOpacity)
11785
11834
  a *= opacity;
11786
11835
  const rgb = color.r + ',' + color.g + ',' + color.b;
11787
11836
  return a === 1 ? 'rgb(' + rgb + ')' : 'rgba(' + rgb + ',' + a + ')';
@@ -11994,7 +12043,6 @@ var LeaferUI = (function (exports) {
11994
12043
  useCanvas();
11995
12044
 
11996
12045
  exports.AlignHelper = AlignHelper;
11997
- exports.AnimateEvent = AnimateEvent;
11998
12046
  exports.AroundHelper = AroundHelper;
11999
12047
  exports.AutoBounds = AutoBounds;
12000
12048
  exports.BezierHelper = BezierHelper;
@@ -12016,6 +12064,7 @@ var LeaferUI = (function (exports) {
12016
12064
  exports.EllipseHelper = EllipseHelper;
12017
12065
  exports.Event = Event;
12018
12066
  exports.EventCreator = EventCreator;
12067
+ exports.Eventer = Eventer;
12019
12068
  exports.Export = Export;
12020
12069
  exports.FileHelper = FileHelper;
12021
12070
  exports.FrameData = FrameData;
@@ -12096,6 +12145,7 @@ var LeaferUI = (function (exports) {
12096
12145
  exports.TaskProcessor = TaskProcessor;
12097
12146
  exports.TextConvert = TextConvert;
12098
12147
  exports.TextData = TextData;
12148
+ exports.Transition = Transition;
12099
12149
  exports.TwoPointBoundsHelper = TwoPointBoundsHelper;
12100
12150
  exports.UIBounds = UIBounds;
12101
12151
  exports.UICreator = UICreator;
@@ -12109,7 +12159,6 @@ var LeaferUI = (function (exports) {
12109
12159
  exports.addInteractionWindow = addInteractionWindow;
12110
12160
  exports.affectRenderBoundsType = affectRenderBoundsType;
12111
12161
  exports.affectStrokeBoundsType = affectStrokeBoundsType;
12112
- exports.arrowType = arrowType;
12113
12162
  exports.attr = attr;
12114
12163
  exports.autoLayoutType = autoLayoutType;
12115
12164
  exports.boundsType = boundsType;
@@ -12132,10 +12181,11 @@ var LeaferUI = (function (exports) {
12132
12181
  exports.getMatrixData = getMatrixData;
12133
12182
  exports.getPointData = getPointData;
12134
12183
  exports.hitType = hitType;
12135
- exports.inviteCode = inviteCode;
12184
+ exports.isNull = isNull;
12136
12185
  exports.layoutProcessor = layoutProcessor;
12137
12186
  exports.maskType = maskType;
12138
12187
  exports.naturalBoundsType = naturalBoundsType;
12188
+ exports.needPlugin = needPlugin;
12139
12189
  exports.opacityType = opacityType;
12140
12190
  exports.pathInputType = pathInputType;
12141
12191
  exports.pathType = pathType;
@@ -12149,7 +12199,6 @@ var LeaferUI = (function (exports) {
12149
12199
  exports.rotationType = rotationType;
12150
12200
  exports.scaleType = scaleType;
12151
12201
  exports.sortType = sortType;
12152
- exports.stateType = stateType;
12153
12202
  exports.strokeType = strokeType;
12154
12203
  exports.surfaceType = surfaceType;
12155
12204
  exports.tempBounds = tempBounds$1;