@leafer-ui/miniapp 1.6.6 → 1.7.0

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.
@@ -43,7 +43,7 @@ const IncrementId = {
43
43
  };
44
44
  const I$2 = IncrementId;
45
45
 
46
- const { round: round$3, pow: pow$1, PI: PI$4 } = Math;
46
+ const { round: round$3, pow: pow$1, PI: PI$3 } = Math;
47
47
  const MathHelper = {
48
48
  within(value, min, max) {
49
49
  if (typeof min === 'object')
@@ -139,9 +139,9 @@ const MathHelper = {
139
139
  function randInt(num) {
140
140
  return Math.round(Math.random() * num);
141
141
  }
142
- const OneRadian = PI$4 / 180;
143
- const PI2 = PI$4 * 2;
144
- const PI_2 = PI$4 / 2;
142
+ const OneRadian = PI$3 / 180;
143
+ const PI2 = PI$3 * 2;
144
+ const PI_2 = PI$3 / 2;
145
145
  function getPointData() { return { x: 0, y: 0 }; }
146
146
  function getBoundsData() { return { x: 0, y: 0, width: 0, height: 0 }; }
147
147
  function getMatrixData() { return { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 }; }
@@ -436,7 +436,7 @@ const MatrixHelper = {
436
436
  const M$6 = MatrixHelper;
437
437
 
438
438
  const { toInnerPoint: toInnerPoint$2, toOuterPoint: toOuterPoint$3 } = MatrixHelper;
439
- const { sin: sin$4, cos: cos$4, abs: abs$4, sqrt: sqrt$2, atan2: atan2$2, min: min$1, round: round$2, PI: PI$3 } = Math;
439
+ const { sin: sin$4, cos: cos$4, abs: abs$4, sqrt: sqrt$2, atan2: atan2$2, min: min$1, round: round$2 } = Math;
440
440
  const PointHelper = {
441
441
  defaultPoint: getPointData(),
442
442
  tempPoint: {},
@@ -549,10 +549,11 @@ const PointHelper = {
549
549
  getRadianFrom(fromX, fromY, originX, originY, toX, toY, toOriginX, toOriginY) {
550
550
  if (toOriginX === undefined)
551
551
  toOriginX = originX, toOriginY = originY;
552
- let fromAngle = atan2$2(fromY - originY, fromX - originX);
553
- let toAngle = atan2$2(toY - toOriginY, toX - toOriginX);
554
- const radian = toAngle - fromAngle;
555
- return radian < -PI$3 ? radian + PI2 : radian;
552
+ const a = fromX - originX;
553
+ const b = fromY - originY;
554
+ const c = toX - toOriginX;
555
+ const d = toY - toOriginY;
556
+ return Math.atan2(a * d - b * c, a * c + b * d);
556
557
  },
557
558
  getAtan2(t, to) {
558
559
  return atan2$2(to.y - t.y, to.x - t.x);
@@ -3339,7 +3340,7 @@ const { getCenterX, getCenterY } = PointHelper;
3339
3340
  const { arcTo } = PathCommandDataHelper;
3340
3341
  const PathCorner = {
3341
3342
  smooth(data, cornerRadius, _cornerSmoothing) {
3342
- let command, commandLen;
3343
+ let command, lastCommand, commandLen;
3343
3344
  let i = 0, x = 0, y = 0, startX = 0, startY = 0, secondX = 0, secondY = 0, lastX = 0, lastY = 0;
3344
3345
  const len = data.length;
3345
3346
  const smooth = [];
@@ -3377,8 +3378,10 @@ const PathCorner = {
3377
3378
  lastY = y;
3378
3379
  break;
3379
3380
  case Z:
3380
- arcTo(smooth, startX, startY, secondX, secondY, cornerRadius, lastX, lastY);
3381
- smooth.push(Z);
3381
+ if (lastCommand !== Z) {
3382
+ arcTo(smooth, startX, startY, secondX, secondY, cornerRadius, lastX, lastY);
3383
+ smooth.push(Z);
3384
+ }
3382
3385
  i += 1;
3383
3386
  break;
3384
3387
  default:
@@ -3387,6 +3390,7 @@ const PathCorner = {
3387
3390
  smooth.push(data[i + j]);
3388
3391
  i += commandLen;
3389
3392
  }
3393
+ lastCommand = command;
3390
3394
  }
3391
3395
  if (command !== Z) {
3392
3396
  smooth[1] = startX;
@@ -3883,12 +3887,12 @@ class LeaferImage {
3883
3887
  try {
3884
3888
  if (transform && pattern.setTransform) {
3885
3889
  pattern.setTransform(transform);
3886
- transform = null;
3890
+ transform = undefined;
3887
3891
  }
3888
3892
  }
3889
3893
  catch (_a) { }
3890
3894
  if (paint)
3891
- paint.transform = transform;
3895
+ DataHelper.stintSet(paint, 'transform', transform);
3892
3896
  return pattern;
3893
3897
  }
3894
3898
  destroy() {
@@ -3993,10 +3997,14 @@ function pathInputType(defaultValue) {
3993
3997
  }));
3994
3998
  }
3995
3999
  const pathType = boundsType;
3996
- function affectStrokeBoundsType(defaultValue) {
4000
+ function affectStrokeBoundsType(defaultValue, useStroke) {
3997
4001
  return decorateLeafAttr(defaultValue, (key) => attr({
3998
4002
  set(value) {
3999
- this.__setAttr(key, value) && doStrokeType(this);
4003
+ if (this.__setAttr(key, value)) {
4004
+ doStrokeType(this);
4005
+ if (useStroke)
4006
+ this.__.__useStroke = true;
4007
+ }
4000
4008
  }
4001
4009
  }));
4002
4010
  }
@@ -5422,6 +5430,8 @@ const LeafBounds = {
5422
5430
 
5423
5431
  const LeafRender = {
5424
5432
  __render(canvas, options) {
5433
+ if (options.shape)
5434
+ return this.__renderShape(canvas, options);
5425
5435
  if (this.__worldOpacity) {
5426
5436
  const data = this.__;
5427
5437
  canvas.setWorld(this.__nowWorld = this.__getNowWorld(options));
@@ -5431,12 +5441,10 @@ const LeafRender = {
5431
5441
  return this.__renderEraser(canvas, options);
5432
5442
  const tempCanvas = canvas.getSameCanvas(true, true);
5433
5443
  this.__draw(tempCanvas, options, canvas);
5434
- if (this.__worldFlipped) {
5444
+ if (this.__worldFlipped)
5435
5445
  canvas.copyWorldByReset(tempCanvas, this.__nowWorld, null, data.__blendMode, true);
5436
- }
5437
- else {
5446
+ else
5438
5447
  canvas.copyWorldToInner(tempCanvas, this.__nowWorld, this.__layout.renderBounds, data.__blendMode);
5439
- }
5440
5448
  tempCanvas.recycle(this.__nowWorld);
5441
5449
  }
5442
5450
  else {
@@ -5446,6 +5454,12 @@ const LeafRender = {
5446
5454
  Debug.drawBounds(this, canvas, options);
5447
5455
  }
5448
5456
  },
5457
+ __renderShape(canvas, options) {
5458
+ if (this.__worldOpacity) {
5459
+ canvas.setWorld(this.__nowWorld = this.__getNowWorld(options));
5460
+ this.__drawShape(canvas, options);
5461
+ }
5462
+ },
5449
5463
  __clip(canvas, options) {
5450
5464
  if (this.__worldOpacity) {
5451
5465
  canvas.setWorld(this.__nowWorld = this.__getNowWorld(options));
@@ -5865,7 +5879,8 @@ let Leaf = class Leaf {
5865
5879
  __drawFast(_canvas, _options) { }
5866
5880
  __draw(_canvas, _options, _originCanvas) { }
5867
5881
  __clip(_canvas, _options) { }
5868
- __renderShape(_canvas, _options, _ignoreFill, _ignoreStroke) { }
5882
+ __renderShape(_canvas, _options) { }
5883
+ __drawShape(_canvas, _options) { }
5869
5884
  __updateWorldOpacity() { }
5870
5885
  __updateChange() { }
5871
5886
  __drawPath(_canvas) { }
@@ -6233,7 +6248,7 @@ class LeafLevelList {
6233
6248
  }
6234
6249
  }
6235
6250
 
6236
- const version = "1.6.6";
6251
+ const version = "1.7.0";
6237
6252
 
6238
6253
  class LeaferCanvas extends LeaferCanvasBase {
6239
6254
  get allowBackgroundColor() { return false; }
@@ -7289,13 +7304,9 @@ class UIData extends LeafData {
7289
7304
  else
7290
7305
  return strokeWidth;
7291
7306
  }
7292
- get __hasStroke() { return this.stroke && this.strokeWidth; }
7293
- get __hasHalf() { const t = this; return (t.stroke && t.strokeAlign === 'center' && t.strokeWidth % 2) || undefined; }
7294
7307
  get __hasMultiPaint() {
7295
7308
  const t = this;
7296
- if ((t.__isFills && t.fill.length > 1) || (t.__isStrokes && t.stroke.length > 1) || t.__useEffect)
7297
- return true;
7298
- return t.fill && this.__hasStroke;
7309
+ return (t.fill && this.__useStroke) || (t.__isFills && t.fill.length > 1) || (t.__isStrokes && t.stroke.length > 1) || t.__useEffect;
7299
7310
  }
7300
7311
  get __clipAfterFill() { const t = this; return (t.cornerRadius || t.innerShadow || t.__pathInputed); }
7301
7312
  get __hasSurface() { const t = this; return (t.fill || t.stroke); }
@@ -7586,15 +7597,18 @@ const { stintSet: stintSet$1 } = DataHelper;
7586
7597
  const UIRender = {
7587
7598
  __updateChange() {
7588
7599
  const data = this.__;
7600
+ if (data.__useStroke) {
7601
+ const useStroke = data.__useStroke = !!(data.stroke && data.strokeWidth);
7602
+ stintSet$1(this.__world, 'half', useStroke && data.strokeAlign === 'center' && data.strokeWidth % 2);
7603
+ stintSet$1(data, '__fillAfterStroke', useStroke && data.strokeAlign === 'outside' && data.fill && !data.__isTransparentFill);
7604
+ }
7589
7605
  if (data.__useEffect) {
7590
7606
  const { shadow, fill, stroke } = data, otherEffect = data.innerShadow || data.blur || data.backgroundBlur || data.filter;
7591
7607
  stintSet$1(data, '__isFastShadow', shadow && !otherEffect && shadow.length < 2 && !shadow[0].spread && !(shadow[0].box && data.__isTransparentFill) && fill && !(fill instanceof Array && fill.length > 1) && (this.useFastShadow || !stroke || (stroke && data.strokeAlign === 'inside')));
7592
7608
  data.__useEffect = !!(shadow || otherEffect);
7593
7609
  }
7594
- stintSet$1(this.__world, 'half', data.__hasHalf);
7595
- stintSet$1(data, '__fillAfterStroke', data.stroke && data.strokeAlign === 'outside' && data.fill && !data.__isTransparentFill);
7596
7610
  data.__checkSingle();
7597
- stintSet$1(data, '__complex', data.__isFills || data.__isStrokes || data.cornerRadius || data.__useEffect);
7611
+ stintSet$1(data, '__complex', (data.__isFills || data.__isStrokes || data.cornerRadius || data.__useEffect));
7598
7612
  },
7599
7613
  __drawFast(canvas, options) {
7600
7614
  drawFast(this, canvas, options);
@@ -7652,18 +7666,15 @@ const UIRender = {
7652
7666
  this.__drawFast(canvas, options);
7653
7667
  }
7654
7668
  },
7655
- __renderShape(canvas, options, ignoreFill, ignoreStroke) {
7656
- if (this.__worldOpacity) {
7657
- canvas.setWorld(this.__nowWorld = this.__getNowWorld(options));
7658
- const { fill, stroke } = this.__;
7659
- this.__drawRenderPath(canvas);
7660
- if (fill && !ignoreFill)
7661
- this.__.__isAlphaPixelFill ? Paint.fills(fill, this, canvas) : Paint.fill('#000000', this, canvas);
7662
- if (this.__.__isCanvas)
7663
- this.__drawAfterFill(canvas, options);
7664
- if (stroke && !ignoreStroke)
7665
- this.__.__isAlphaPixelStroke ? Paint.strokes(stroke, this, canvas) : Paint.stroke('#000000', this, canvas);
7666
- }
7669
+ __drawShape(canvas, options) {
7670
+ this.__drawRenderPath(canvas);
7671
+ const data = this.__, { fill, stroke } = data;
7672
+ if (fill && !options.ignoreFill)
7673
+ data.__isAlphaPixelFill ? Paint.fills(fill, this, canvas) : Paint.fill('#000000', this, canvas);
7674
+ if (data.__isCanvas)
7675
+ this.__drawAfterFill(canvas, options);
7676
+ if (stroke && !options.ignoreStroke)
7677
+ data.__isAlphaPixelStroke ? Paint.strokes(stroke, this, canvas) : Paint.stroke('#000000', this, canvas);
7667
7678
  },
7668
7679
  __drawAfterFill(canvas, options) {
7669
7680
  if (this.__.__clipAfterFill) {
@@ -7788,12 +7799,14 @@ let UI = UI_1 = class UI extends Leaf {
7788
7799
  }
7789
7800
  }
7790
7801
  __updateRenderPath() {
7791
- if (this.__.path) {
7792
- const data = this.__;
7802
+ const data = this.__;
7803
+ if (data.path) {
7793
7804
  data.__pathForRender = data.cornerRadius ? PathCorner.smooth(data.path, data.cornerRadius, data.cornerSmoothing) : data.path;
7794
7805
  if (data.__useArrow)
7795
7806
  PathArrow.addArrows(this, !data.cornerRadius);
7796
7807
  }
7808
+ else
7809
+ data.__pathForRender && (data.__pathForRender = undefined);
7797
7810
  }
7798
7811
  __drawRenderPath(canvas) {
7799
7812
  canvas.beginPath();
@@ -8004,13 +8017,13 @@ __decorate([
8004
8017
  surfaceType()
8005
8018
  ], UI.prototype, "fill", void 0);
8006
8019
  __decorate([
8007
- strokeType()
8020
+ strokeType(undefined, true)
8008
8021
  ], UI.prototype, "stroke", void 0);
8009
8022
  __decorate([
8010
8023
  strokeType('inside')
8011
8024
  ], UI.prototype, "strokeAlign", void 0);
8012
8025
  __decorate([
8013
- strokeType(1)
8026
+ strokeType(1, true)
8014
8027
  ], UI.prototype, "strokeWidth", void 0);
8015
8028
  __decorate([
8016
8029
  strokeType(false)
@@ -8437,7 +8450,7 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8437
8450
  list.push(item);
8438
8451
  this.requestRender();
8439
8452
  }
8440
- zoom(_zoomType, _padding, _fixedScale, _transition) {
8453
+ zoom(_zoomType, _optionsOrPadding, _scroll, _transition) {
8441
8454
  return Plugin.need('view');
8442
8455
  }
8443
8456
  getValidMove(moveX, moveY) { return { x: moveX, y: moveY }; }
@@ -8482,7 +8495,7 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8482
8495
  Leafer_1.list.remove(this);
8483
8496
  try {
8484
8497
  this.stop();
8485
- this.emitEvent(new LeaferEvent(LeaferEvent.END, this));
8498
+ this.emitLeafer(LeaferEvent.END);
8486
8499
  this.__removeListenEvents();
8487
8500
  this.__controllers.forEach(item => !(this.parent && item === this.interaction) && item.destroy());
8488
8501
  this.__controllers.length = 0;
@@ -8610,7 +8623,7 @@ let Box = class Box extends Group {
8610
8623
  }
8611
8624
  __drawContent(canvas, options) {
8612
8625
  this.__renderGroup(canvas, options);
8613
- if (this.__.__hasStroke) {
8626
+ if (this.__.__useStroke) {
8614
8627
  canvas.setWorld(this.__nowWorld);
8615
8628
  this.__drawRenderPath(canvas);
8616
8629
  }
@@ -8830,8 +8843,8 @@ let Polygon = class Polygon extends UI {
8830
8843
  for (let i = 1; i < sides; i++) {
8831
8844
  lineTo$1(path, rx + rx * sin$1((i * 2 * PI$1) / sides), ry - ry * cos$1((i * 2 * PI$1) / sides));
8832
8845
  }
8846
+ closePath$1(path);
8833
8847
  }
8834
- closePath$1(path);
8835
8848
  }
8836
8849
  __updateRenderPath() { }
8837
8850
  __updateBoxBounds() { }
@@ -9065,10 +9078,15 @@ let Text = class Text extends UI {
9065
9078
  const box = this.__box;
9066
9079
  if (box)
9067
9080
  box.__nowWorld = this.__nowWorld, box.__draw(canvas, options, originCanvas);
9068
- if (this.textEditing && !Export.running)
9081
+ if (this.textEditing && !options.exporting)
9069
9082
  return;
9070
9083
  super.__draw(canvas, options, originCanvas);
9071
9084
  }
9085
+ __drawShape(canvas, options) {
9086
+ if (options.shape)
9087
+ this.__box && this.__box.__drawShape(canvas, options);
9088
+ super.__drawShape(canvas, options);
9089
+ }
9072
9090
  destroy() {
9073
9091
  if (this.boxStyle)
9074
9092
  this.boxStyle = null;
@@ -9890,6 +9908,7 @@ const config = {
9890
9908
  delta: { x: 80 / 4, y: 8.0 },
9891
9909
  },
9892
9910
  pointer: {
9911
+ type: 'pointer',
9893
9912
  snap: true,
9894
9913
  hitRadius: 5,
9895
9914
  tapTime: 120,
@@ -10433,7 +10452,7 @@ ui$1.__updateHitCanvas = function () {
10433
10452
  h.resize({ width, height, pixelRatio: 1 });
10434
10453
  h.clear();
10435
10454
  ImageManager.patternLocked = true;
10436
- this.__renderShape(h, { matrix: matrix.setWith(this.__world).scaleWith(1 / scale).invertWith().translate(-x, -y) }, !isHitPixelFill, !isHitPixelStroke);
10455
+ this.__renderShape(h, { matrix: matrix.setWith(this.__world).scaleWith(1 / scale).invertWith().translate(-x, -y), ignoreFill: !isHitPixelFill, ignoreStroke: !isHitPixelStroke });
10437
10456
  ImageManager.patternLocked = false;
10438
10457
  h.resetTransform();
10439
10458
  data.__isHitPixel = true;
@@ -10942,7 +10961,7 @@ const PaintModule = {
10942
10961
  };
10943
10962
 
10944
10963
  let origin = {};
10945
- const { get: get$3, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, scale: scaleHelper, rotate } = MatrixHelper;
10964
+ const { get: get$3, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, scale: scaleHelper, rotate, skew: skewHelper } = MatrixHelper;
10946
10965
  function fillOrFitMode(data, box, x, y, scaleX, scaleY, rotation) {
10947
10966
  const transform = get$3();
10948
10967
  translate$1(transform, box.x + x, box.y + y);
@@ -10951,13 +10970,15 @@ function fillOrFitMode(data, box, x, y, scaleX, scaleY, rotation) {
10951
10970
  rotateOfOuter$1(transform, { x: box.x + box.width / 2, y: box.y + box.height / 2 }, rotation);
10952
10971
  data.transform = transform;
10953
10972
  }
10954
- function clipMode(data, box, x, y, scaleX, scaleY, rotation) {
10973
+ function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew) {
10955
10974
  const transform = get$3();
10956
- translate$1(transform, box.x + x, box.y + y);
10957
- if (scaleX)
10958
- scaleHelper(transform, scaleX, scaleY);
10959
10975
  if (rotation)
10960
10976
  rotate(transform, rotation);
10977
+ if (skew)
10978
+ skewHelper(transform, skew.x, skew.y);
10979
+ if (scaleX)
10980
+ scaleHelper(transform, scaleX, scaleY);
10981
+ translate$1(transform, box.x + x, box.y + y);
10961
10982
  data.transform = transform;
10962
10983
  }
10963
10984
  function repeatMode(data, box, width, height, x, y, scaleX, scaleY, rotation, align) {
@@ -10994,11 +11015,13 @@ const tempBox = new Bounds();
10994
11015
  const tempScaleData = {};
10995
11016
  const tempImage = {};
10996
11017
  function createData(leafPaint, image, paint, box) {
10997
- const { changeful, sync } = paint;
11018
+ const { changeful, sync, editing } = paint;
10998
11019
  if (changeful)
10999
11020
  leafPaint.changeful = changeful;
11000
11021
  if (sync)
11001
11022
  leafPaint.sync = sync;
11023
+ if (editing)
11024
+ leafPaint.editing = editing;
11002
11025
  leafPaint.data = getPatternData(paint, box, image);
11003
11026
  }
11004
11027
  function getPatternData(paint, box, image) {
@@ -11007,7 +11030,7 @@ function getPatternData(paint, box, image) {
11007
11030
  if (paint.mode === 'strench')
11008
11031
  paint.mode = 'stretch';
11009
11032
  let { width, height } = image;
11010
- const { opacity, mode, align, offset, scale, size, rotation, repeat, filters } = paint;
11033
+ const { opacity, mode, align, offset, scale, size, rotation, skew, repeat, filters } = paint;
11011
11034
  const sameBox = box.width === width && box.height === height;
11012
11035
  const data = { mode };
11013
11036
  const swapSize = align !== 'center' && (rotation || 0) % 180 === 90;
@@ -11041,8 +11064,8 @@ function getPatternData(paint, box, image) {
11041
11064
  break;
11042
11065
  case 'normal':
11043
11066
  case 'clip':
11044
- if (tempImage.x || tempImage.y || scaleX || rotation)
11045
- clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation);
11067
+ if (tempImage.x || tempImage.y || scaleX || rotation || skew)
11068
+ clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation, skew);
11046
11069
  break;
11047
11070
  case 'repeat':
11048
11071
  if (!sameBox || scaleX || rotation)
@@ -11119,11 +11142,11 @@ function image(ui, attrName, paint, boxBounds, firstUse) {
11119
11142
  }
11120
11143
  onLoadSuccess(ui, event);
11121
11144
  }
11122
- leafPaint.loadId = null;
11145
+ leafPaint.loadId = undefined;
11123
11146
  }, (error) => {
11124
11147
  ignoreRender(ui, false);
11125
11148
  onLoadError(ui, event, error);
11126
- leafPaint.loadId = null;
11149
+ leafPaint.loadId = undefined;
11127
11150
  });
11128
11151
  if (ui.placeholderColor) {
11129
11152
  if (!ui.placeholderDelay)
@@ -11189,6 +11212,8 @@ function createPattern(ui, paint, pixelRatio) {
11189
11212
  const { image, data } = paint;
11190
11213
  let imageScale, imageMatrix, { width, height, scaleX: sx, scaleY: sy, transform, repeat } = data;
11191
11214
  if (sx) {
11215
+ sx = abs$1(sx);
11216
+ sy = abs$1(sy);
11192
11217
  imageMatrix = get$1();
11193
11218
  copy$1(imageMatrix, transform);
11194
11219
  scale(imageMatrix, 1 / sx, 1 / sy);