leafer-draw 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -48,6 +48,8 @@ const I$1 = IncrementId;
48
48
  const { round, pow: pow$1, PI: PI$4 } = Math;
49
49
  const MathHelper = {
50
50
  within(value, min, max) {
51
+ if (typeof min === 'object')
52
+ max = min.max, min = min.min;
51
53
  if (min !== undefined && value < min)
52
54
  value = min;
53
55
  if (max !== undefined && value > max)
@@ -150,10 +152,10 @@ const MatrixHelper = {
150
152
  t.e += x;
151
153
  t.f += y;
152
154
  },
153
- translateInner(t, x, y, isMoveOrigin) {
155
+ translateInner(t, x, y, hasOrigin) {
154
156
  t.e += t.a * x + t.c * y;
155
157
  t.f += t.b * x + t.d * y;
156
- if (isMoveOrigin)
158
+ if (hasOrigin)
157
159
  t.e -= x, t.f -= y;
158
160
  },
159
161
  scale(t, scaleX, scaleY = scaleX) {
@@ -312,7 +314,7 @@ const MatrixHelper = {
312
314
  to.y -= (f * a - e * b) * s;
313
315
  }
314
316
  },
315
- setLayout(t, layout, origin, bcChanged) {
317
+ setLayout(t, layout, origin, around, bcChanged) {
316
318
  const { x, y, scaleX, scaleY } = layout;
317
319
  if (bcChanged === undefined)
318
320
  bcChanged = layout.rotation || layout.skewX || layout.skewY;
@@ -344,10 +346,10 @@ const MatrixHelper = {
344
346
  }
345
347
  t.e = x;
346
348
  t.f = y;
347
- if (origin)
348
- M$6.translateInner(t, -origin.x, -origin.y, true);
349
+ if (origin = origin || around)
350
+ M$6.translateInner(t, -origin.x, -origin.y, !around);
349
351
  },
350
- getLayout(t, origin, firstSkewY) {
352
+ getLayout(t, origin, around, firstSkewY) {
351
353
  const { a, b, c, d, e, f } = t;
352
354
  let x = e, y = f, scaleX, scaleY, rotation, skewX, skewY;
353
355
  if (b || c) {
@@ -376,9 +378,11 @@ const MatrixHelper = {
376
378
  scaleY = d;
377
379
  rotation = skewX = skewY = 0;
378
380
  }
379
- if (origin) {
381
+ if (origin = around || origin) {
380
382
  x += origin.x * a + origin.y * c;
381
383
  y += origin.x * b + origin.y * d;
384
+ if (!around)
385
+ x -= origin.x, y -= origin.y;
382
386
  }
383
387
  return { x, y, scaleX, scaleY, rotation, skewX, skewY };
384
388
  },
@@ -706,12 +710,12 @@ class Matrix {
706
710
  toInnerPoint(outer, to, distance) {
707
711
  MatrixHelper.toInnerPoint(this, outer, to, distance);
708
712
  }
709
- setLayout(data, origin) {
710
- MatrixHelper.setLayout(this, data, origin);
713
+ setLayout(data, origin, around) {
714
+ MatrixHelper.setLayout(this, data, origin, around);
711
715
  return this;
712
716
  }
713
- getLayout(origin, firstSkewY) {
714
- return MatrixHelper.getLayout(this, origin, firstSkewY);
717
+ getLayout(origin, around, firstSkewY) {
718
+ return MatrixHelper.getLayout(this, origin, around, firstSkewY);
715
719
  }
716
720
  withScale(scaleX, scaleY) {
717
721
  return MatrixHelper.withScale(this, scaleX, scaleY);
@@ -1999,7 +2003,7 @@ class LeaferCanvasBase extends Canvas$1 {
1999
2003
  DataHelper.copyAttrs(this.size, size, canvasSizeAttrs);
2000
2004
  this.size.pixelRatio || (this.size.pixelRatio = 1);
2001
2005
  this.bounds = new Bounds(0, 0, this.width, this.height);
2002
- if (!this.unreal) {
2006
+ if (this.context && !this.unreal) {
2003
2007
  this.updateViewSize();
2004
2008
  this.smooth = this.config.smooth;
2005
2009
  }
@@ -2172,7 +2176,7 @@ class LeaferCanvasBase extends Canvas$1 {
2172
2176
  this.manager ? this.manager.recycle(this) : this.destroy();
2173
2177
  }
2174
2178
  }
2175
- updateRender() { }
2179
+ updateRender(_bounds) { }
2176
2180
  unrealCanvas() { }
2177
2181
  destroy() {
2178
2182
  this.manager = this.view = this.parentView = null;
@@ -4066,8 +4070,13 @@ const LeafHelper = {
4066
4070
  zoomOfLocal(t, origin, scaleX, scaleY = scaleX, resize) {
4067
4071
  copy$6(matrix, t.__localMatrix);
4068
4072
  scaleOfOuter$2(matrix, origin, scaleX, scaleY);
4069
- moveByMatrix(t, matrix);
4070
- t.scaleResize(scaleX, scaleY, resize !== true);
4073
+ if (t.origin || t.around) {
4074
+ L.setTransform(t, matrix, resize);
4075
+ }
4076
+ else {
4077
+ moveByMatrix(t, matrix);
4078
+ t.scaleResize(scaleX, scaleY, resize !== true);
4079
+ }
4071
4080
  },
4072
4081
  rotateOfWorld(t, origin, angle) {
4073
4082
  L.rotateOfLocal(t, getTempLocal(t, origin), angle);
@@ -4075,8 +4084,13 @@ const LeafHelper = {
4075
4084
  rotateOfLocal(t, origin, angle) {
4076
4085
  copy$6(matrix, t.__localMatrix);
4077
4086
  rotateOfOuter$2(matrix, origin, angle);
4078
- moveByMatrix(t, matrix);
4079
- t.rotation = MathHelper.formatRotation(t.rotation + angle);
4087
+ if (t.origin || t.around) {
4088
+ L.setTransform(t, matrix);
4089
+ }
4090
+ else {
4091
+ moveByMatrix(t, matrix);
4092
+ t.rotation = MathHelper.formatRotation(t.rotation + angle);
4093
+ }
4080
4094
  },
4081
4095
  skewOfWorld(t, origin, skewX, skewY, resize) {
4082
4096
  L.skewOfLocal(t, getTempLocal(t, origin), skewX, skewY, resize);
@@ -4099,7 +4113,7 @@ const LeafHelper = {
4099
4113
  L.setTransform(t, matrix, resize);
4100
4114
  },
4101
4115
  setTransform(t, transform, resize) {
4102
- const layout = getLayout(transform);
4116
+ const layout = getLayout(transform, t.origin && L.getInnerOrigin(t, t.origin), t.around && L.getInnerOrigin(t, t.around));
4103
4117
  if (resize) {
4104
4118
  const scaleX = layout.scaleX / t.scaleX;
4105
4119
  const scaleY = layout.scaleY / t.scaleY;
@@ -4112,13 +4126,19 @@ const LeafHelper = {
4112
4126
  t.set(layout);
4113
4127
  }
4114
4128
  },
4129
+ getFlipTransform(t, axis) {
4130
+ const m = getMatrixData();
4131
+ const sign = axis === 'x' ? 1 : -1;
4132
+ scaleOfOuter$2(m, L.getLocalOrigin(t, 'center'), -1 * sign, 1 * sign);
4133
+ return m;
4134
+ },
4115
4135
  getLocalOrigin(t, origin) {
4116
4136
  return PointHelper.tempToOuterOf(L.getInnerOrigin(t, origin), t.localTransform);
4117
4137
  },
4118
4138
  getInnerOrigin(t, origin) {
4119
- if (typeof origin === 'string')
4120
- AroundHelper.toPoint(origin, t.boxBounds, origin = {});
4121
- return origin;
4139
+ const innerOrigin = {};
4140
+ AroundHelper.toPoint(origin, t.boxBounds, innerOrigin);
4141
+ return innerOrigin;
4122
4142
  },
4123
4143
  getRelativeWorld(t, relative, temp) {
4124
4144
  copy$6(matrix, t.worldTransform);
@@ -4545,7 +4565,10 @@ const LeafEventer = {
4545
4565
  on(type, listener, options) {
4546
4566
  let capture, once;
4547
4567
  if (options) {
4548
- if (typeof options === 'boolean') {
4568
+ if (options === 'once') {
4569
+ once = true;
4570
+ }
4571
+ else if (typeof options === 'boolean') {
4549
4572
  capture = options;
4550
4573
  }
4551
4574
  else {
@@ -4576,7 +4599,7 @@ const LeafEventer = {
4576
4599
  if (listener) {
4577
4600
  let capture;
4578
4601
  if (options)
4579
- capture = typeof options === 'boolean' ? options : options.capture;
4602
+ capture = typeof options === 'boolean' ? options : (options === 'once' ? false : options.capture);
4580
4603
  let events, index;
4581
4604
  const map = __getListenerMap(this, capture);
4582
4605
  typeList.forEach(type => {
@@ -4878,7 +4901,7 @@ const LeafMatrix = {
4878
4901
  const layout = this.__layout, local = this.__local, data = this.__;
4879
4902
  if (layout.affectScaleOrRotation) {
4880
4903
  if (layout.scaleChanged || layout.rotationChanged) {
4881
- setLayout(local, data, null, layout.affectRotation);
4904
+ setLayout(local, data, null, null, layout.affectRotation);
4882
4905
  layout.scaleChanged = layout.rotationChanged = false;
4883
4906
  }
4884
4907
  }
@@ -4886,7 +4909,7 @@ const LeafMatrix = {
4886
4909
  local.f = data.y + data.offsetY;
4887
4910
  if (data.around || data.origin) {
4888
4911
  toPoint$3(data.around || data.origin, layout.boxBounds, tempPoint$1);
4889
- translateInner(local, -tempPoint$1.x, -tempPoint$1.y, data.origin);
4912
+ translateInner(local, -tempPoint$1.x, -tempPoint$1.y, !data.around);
4890
4913
  }
4891
4914
  }
4892
4915
  this.__layout.matrixChanged = false;
@@ -5115,7 +5138,7 @@ const { LEAF, create } = IncrementId;
5115
5138
  const { toInnerPoint, toOuterPoint, multiplyParent } = MatrixHelper;
5116
5139
  const { toOuterOf } = BoundsHelper;
5117
5140
  const { copy: copy$3 } = PointHelper;
5118
- const { moveLocal, zoomOfLocal, rotateOfLocal, skewOfLocal, moveWorld, zoomOfWorld, rotateOfWorld, skewOfWorld, transform, transformWorld, setTransform, getLocalOrigin, getRelativeWorld, drop } = LeafHelper;
5141
+ const { moveLocal, zoomOfLocal, rotateOfLocal, skewOfLocal, moveWorld, zoomOfWorld, rotateOfWorld, skewOfWorld, transform, transformWorld, setTransform, getFlipTransform, getLocalOrigin, getRelativeWorld, drop } = LeafHelper;
5119
5142
  let Leaf = class Leaf {
5120
5143
  get tag() { return this.__tag; }
5121
5144
  set tag(_value) { }
@@ -5141,6 +5164,8 @@ let Leaf = class Leaf {
5141
5164
  get __ignoreHitWorld() { return (this.__hasMask || this.__hasEraser) && this.__.hitChildren; }
5142
5165
  get __inLazyBounds() { const { leafer } = this; return leafer && leafer.created && leafer.lazyBounds.hit(this.__world); }
5143
5166
  get pathInputed() { return this.__.__pathInputed; }
5167
+ set event(map) { let event; for (let key in map)
5168
+ event = map[key], event instanceof Array ? this.on(key, event[0], event[1]) : this.on(key, event); }
5144
5169
  constructor(data) {
5145
5170
  this.innerId = create(LEAF);
5146
5171
  this.reset(data);
@@ -5400,6 +5425,9 @@ let Leaf = class Leaf {
5400
5425
  skewOfWorld(worldOrigin, skewX, skewY, resize) {
5401
5426
  skewOfWorld(this, worldOrigin, skewX, skewY, resize);
5402
5427
  }
5428
+ flip(axis) {
5429
+ transform(this, getFlipTransform(this, axis));
5430
+ }
5403
5431
  scaleResize(scaleX, scaleY = scaleX, _noResize) {
5404
5432
  this.scaleX *= scaleX;
5405
5433
  this.scaleY *= scaleY;
@@ -5757,7 +5785,7 @@ class LeafLevelList {
5757
5785
  }
5758
5786
  }
5759
5787
 
5760
- const version = "1.0.0-rc.30";
5788
+ const version = "1.0.1";
5761
5789
  const inviteCode = {};
5762
5790
 
5763
5791
  const debug$5 = Debug.get('LeaferCanvas');
@@ -5781,7 +5809,8 @@ class LeaferCanvas extends LeaferCanvasBase {
5781
5809
  }
5782
5810
  }
5783
5811
  init() {
5784
- const { view } = this.config;
5812
+ const { config } = this;
5813
+ const view = config.view || config.canvas;
5785
5814
  view ? this.__createViewFrom(view) : this.__createView();
5786
5815
  const { style } = this.view;
5787
5816
  style.display || (style.display = 'block');
@@ -5796,7 +5825,7 @@ class LeaferCanvas extends LeaferCanvasBase {
5796
5825
  }
5797
5826
  this.__createContext();
5798
5827
  if (!this.autoLayout)
5799
- this.resize(this.config);
5828
+ this.resize(config);
5800
5829
  }
5801
5830
  set backgroundColor(color) { this.view.style.backgroundColor = color; }
5802
5831
  get backgroundColor() { return this.view.style.backgroundColor; }
@@ -5852,26 +5881,37 @@ class LeaferCanvas extends LeaferCanvasBase {
5852
5881
  this.clientBounds = this.view.getBoundingClientRect();
5853
5882
  }
5854
5883
  startAutoLayout(autoBounds, listener) {
5855
- this.autoBounds = autoBounds;
5856
5884
  this.resizeListener = listener;
5857
- try {
5858
- this.resizeObserver = new ResizeObserver((entries) => {
5859
- this.updateClientBounds();
5860
- for (const entry of entries)
5861
- this.checkAutoBounds(entry.contentRect);
5862
- });
5863
- const parent = this.parentView;
5864
- if (parent) {
5865
- this.resizeObserver.observe(parent);
5866
- this.checkAutoBounds(parent.getBoundingClientRect());
5885
+ if (autoBounds) {
5886
+ this.autoBounds = autoBounds;
5887
+ try {
5888
+ this.resizeObserver = new ResizeObserver((entries) => {
5889
+ this.updateClientBounds();
5890
+ for (const entry of entries)
5891
+ this.checkAutoBounds(entry.contentRect);
5892
+ });
5893
+ const parent = this.parentView;
5894
+ if (parent) {
5895
+ this.resizeObserver.observe(parent);
5896
+ this.checkAutoBounds(parent.getBoundingClientRect());
5897
+ }
5898
+ else {
5899
+ this.checkAutoBounds(this.view);
5900
+ debug$5.warn('no parent');
5901
+ }
5867
5902
  }
5868
- else {
5869
- this.checkAutoBounds(this.view);
5870
- debug$5.warn('no parent');
5903
+ catch (_a) {
5904
+ this.imitateResizeObserver();
5871
5905
  }
5872
5906
  }
5873
- catch (_a) {
5874
- this.imitateResizeObserver();
5907
+ else {
5908
+ window.addEventListener('resize', () => {
5909
+ const pixelRatio = Platform.devicePixelRatio;
5910
+ if (this.pixelRatio !== pixelRatio) {
5911
+ const { width, height } = this;
5912
+ this.emitResize({ width, height, pixelRatio });
5913
+ }
5914
+ });
5875
5915
  }
5876
5916
  }
5877
5917
  imitateResizeObserver() {
@@ -5884,17 +5924,12 @@ class LeaferCanvas extends LeaferCanvasBase {
5884
5924
  checkAutoBounds(parentSize) {
5885
5925
  const view = this.view;
5886
5926
  const { x, y, width, height } = this.autoBounds.getBoundsFrom(parentSize);
5887
- if (width !== this.width || height !== this.height) {
5927
+ const size = { width, height, pixelRatio: Platform.devicePixelRatio };
5928
+ if (!this.isSameSize(size)) {
5888
5929
  const { style } = view;
5889
- const { pixelRatio } = this;
5890
5930
  style.marginLeft = x + 'px';
5891
5931
  style.marginTop = y + 'px';
5892
- const size = { width, height, pixelRatio };
5893
- const oldSize = {};
5894
- DataHelper.copyAttrs(oldSize, this, canvasSizeAttrs);
5895
- this.resize(size);
5896
- if (this.width !== undefined)
5897
- this.resizeListener(new ResizeEvent(size, oldSize));
5932
+ this.emitResize(size);
5898
5933
  }
5899
5934
  }
5900
5935
  stopAutoLayout() {
@@ -5905,6 +5940,13 @@ class LeaferCanvas extends LeaferCanvasBase {
5905
5940
  this.resizeObserver = null;
5906
5941
  }
5907
5942
  }
5943
+ emitResize(size) {
5944
+ const oldSize = {};
5945
+ DataHelper.copyAttrs(oldSize, this, canvasSizeAttrs);
5946
+ this.resize(size);
5947
+ if (this.width !== undefined)
5948
+ this.resizeListener(new ResizeEvent(size, oldSize));
5949
+ }
5908
5950
  unrealCanvas() {
5909
5951
  if (!this.unreal && this.parentView) {
5910
5952
  const view = this.view;
@@ -5985,7 +6027,7 @@ function useCanvas(_canvasType, _power) {
5985
6027
  Platform.name = 'web';
5986
6028
  Platform.isMobile = 'ontouchstart' in window;
5987
6029
  Platform.requestRender = function (render) { window.requestAnimationFrame(render); };
5988
- Platform.devicePixelRatio = Math.max(1, devicePixelRatio);
6030
+ defineKey(Platform, 'devicePixelRatio', { get() { return Math.max(1, devicePixelRatio); } });
5989
6031
  const { userAgent } = navigator;
5990
6032
  if (userAgent.indexOf("Firefox") > -1) {
5991
6033
  Platform.conicGradientRotate90 = true;
@@ -6482,14 +6524,14 @@ class Renderer {
6482
6524
  if (Debug.showRepaint)
6483
6525
  this.canvas.strokeWorld(bounds, 'red');
6484
6526
  this.target.__render(this.canvas, options);
6485
- this.renderBounds = realBounds || bounds;
6527
+ this.renderBounds = realBounds = realBounds || bounds;
6486
6528
  this.renderOptions = options;
6487
- this.totalBounds.isEmpty() ? this.totalBounds = this.renderBounds : this.totalBounds.add(this.renderBounds);
6529
+ this.totalBounds.isEmpty() ? this.totalBounds = realBounds : this.totalBounds.add(realBounds);
6488
6530
  if (Debug.showHitView)
6489
6531
  this.renderHitView(options);
6490
6532
  if (Debug.showBoundsView)
6491
6533
  this.renderBoundsView(options);
6492
- this.canvas.updateRender();
6534
+ this.canvas.updateRender(realBounds);
6493
6535
  }
6494
6536
  renderHitView(_options) { }
6495
6537
  renderBoundsView(_options) { }
@@ -7540,7 +7582,7 @@ let Leafer = Leafer_1 = class Leafer extends Group {
7540
7582
  this.__controllers.push(this.renderer = Creator.renderer(this, canvas, config), this.watcher = Creator.watcher(this, config), this.layouter = Creator.layouter(this, config));
7541
7583
  if (this.isApp)
7542
7584
  this.__setApp();
7543
- this.__checkAutoLayout(config);
7585
+ this.__checkAutoLayout(config, parentApp);
7544
7586
  this.view = canvas.view;
7545
7587
  if (parentApp) {
7546
7588
  this.__bindApp(parentApp);
@@ -7641,9 +7683,10 @@ let Leafer = Leafer_1 = class Leafer extends Group {
7641
7683
  this.leafer = leafer;
7642
7684
  this.__level = 1;
7643
7685
  }
7644
- __checkAutoLayout(config) {
7645
- if (!config.width || !config.height) {
7646
- this.autoLayout = new AutoBounds(config);
7686
+ __checkAutoLayout(config, parentApp) {
7687
+ if (!parentApp) {
7688
+ if (!config.width || !config.height)
7689
+ this.autoLayout = new AutoBounds(config);
7647
7690
  this.canvas.startAutoLayout(this.autoLayout, this.__onResize.bind(this));
7648
7691
  }
7649
7692
  }
@@ -7778,7 +7821,9 @@ let Leafer = Leafer_1 = class Leafer extends Group {
7778
7821
  list.push(item);
7779
7822
  }
7780
7823
  }
7781
- zoom(_zoomType, _padding, _fixedScale) { return undefined; }
7824
+ zoom(_zoomType, _padding, _fixedScale) {
7825
+ return debug$1.error('need @leafer-in/view');
7826
+ }
7782
7827
  getValidMove(moveX, moveY) { return { x: moveX, y: moveY }; }
7783
7828
  getValidScale(changeScale) { return changeScale; }
7784
7829
  getWorldPointByClient(clientPoint, updateClient) {
@@ -8305,8 +8350,7 @@ let Canvas = class Canvas extends Rect {
8305
8350
  destroy() {
8306
8351
  if (this.canvas) {
8307
8352
  this.canvas.destroy();
8308
- this.canvas = null;
8309
- this.context = null;
8353
+ this.canvas = this.context = null;
8310
8354
  }
8311
8355
  super.destroy();
8312
8356
  }
@@ -9150,7 +9194,7 @@ function createPattern(ui, paint, pixelRatio) {
9150
9194
  const { abs } = Math;
9151
9195
  function checkImage(ui, canvas, paint, allowPaint) {
9152
9196
  const { scaleX, scaleY } = ImageManager.patternLocked ? ui.__world : ui.__nowWorld;
9153
- if (!paint.data || paint.patternId === scaleX + '-' + scaleY) {
9197
+ if (!paint.data || (paint.patternId === scaleX + '-' + scaleY && !Export.running)) {
9154
9198
  return false;
9155
9199
  }
9156
9200
  else {
@@ -10128,7 +10172,10 @@ const ExportModule = {
10128
10172
  const { x, y, width, height } = new Bounds(renderBounds).scale(scale);
10129
10173
  let canvas = Creator.canvas({ width: Math.round(width), height: Math.round(height), pixelRatio, smooth, contextSettings });
10130
10174
  const renderOptions = { matrix: matrix.scale(1 / scale).invert().translate(-x, -y).withScale(1 / scaleX * scale, 1 / scaleY * scale) };
10175
+ let sliceLeaf;
10131
10176
  if (slice) {
10177
+ sliceLeaf = leaf;
10178
+ sliceLeaf.__worldOpacity = 0;
10132
10179
  leaf = leafer;
10133
10180
  renderOptions.bounds = canvas.bounds;
10134
10181
  }
@@ -10143,6 +10190,8 @@ const ExportModule = {
10143
10190
  leaf.__render(canvas, renderOptions);
10144
10191
  }
10145
10192
  canvas.restore();
10193
+ if (sliceLeaf)
10194
+ sliceLeaf.__updateWorldOpacity();
10146
10195
  if (trim) {
10147
10196
  trimBounds = getTrimBounds(canvas);
10148
10197
  const old = canvas, { width, height } = trimBounds;