@leafer-draw/miniapp 1.9.5 → 1.9.7

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.
@@ -372,7 +372,7 @@ function getMatrixData() {
372
372
 
373
373
  const {sin: sin$5, cos: cos$5, acos: acos, sqrt: sqrt$3} = Math;
374
374
 
375
- const {float: float$1} = MathHelper;
375
+ const {float: float$2} = MathHelper;
376
376
 
377
377
  const tempPoint$3 = {};
378
378
 
@@ -423,6 +423,15 @@ const MatrixHelper = {
423
423
  t.c *= scaleY;
424
424
  t.d *= scaleY;
425
425
  },
426
+ pixelScale(t, pixelRatio, to) {
427
+ to || (to = t);
428
+ to.a = t.a * pixelRatio;
429
+ to.b = t.b * pixelRatio;
430
+ to.c = t.c * pixelRatio;
431
+ to.d = t.d * pixelRatio;
432
+ to.e = t.e * pixelRatio;
433
+ to.f = t.f * pixelRatio;
434
+ },
426
435
  scaleOfOuter(t, origin, scaleX, scaleY) {
427
436
  M$6.toInnerPoint(t, origin, tempPoint$3);
428
437
  M$6.scaleOfInner(t, tempPoint$3, scaleX, scaleY);
@@ -614,12 +623,12 @@ const MatrixHelper = {
614
623
  const cosR = c / scaleY;
615
624
  rotation = PI_2 - (d > 0 ? acos(-cosR) : -acos(cosR));
616
625
  }
617
- const cosR = float$1(cos$5(rotation));
626
+ const cosR = float$2(cos$5(rotation));
618
627
  const sinR = sin$5(rotation);
619
- scaleX = float$1(scaleX), scaleY = float$1(scaleY);
620
- skewX = cosR ? float$1((c / scaleY + sinR) / cosR / OneRadian, 9) : 0;
621
- skewY = cosR ? float$1((b / scaleX - sinR) / cosR / OneRadian, 9) : 0;
622
- rotation = float$1(rotation / OneRadian);
628
+ scaleX = float$2(scaleX), scaleY = float$2(scaleY);
629
+ skewX = cosR ? float$2((c / scaleY + sinR) / cosR / OneRadian, 9) : 0;
630
+ skewY = cosR ? float$2((b / scaleX - sinR) / cosR / OneRadian, 9) : 0;
631
+ rotation = float$2(rotation / OneRadian);
623
632
  } else {
624
633
  scaleX = a;
625
634
  scaleY = d;
@@ -922,6 +931,10 @@ class Matrix {
922
931
  this.scaleY *= y || x;
923
932
  return this;
924
933
  }
934
+ pixelScale(pixelRatio) {
935
+ MatrixHelper.pixelScale(this, pixelRatio);
936
+ return this;
937
+ }
925
938
  scaleOfOuter(origin, x, y) {
926
939
  MatrixHelper.scaleOfOuter(this, origin, x, y);
927
940
  return this;
@@ -1141,7 +1154,7 @@ const {tempPointBounds: tempPointBounds$1, setPoint: setPoint$2, addPoint: addPo
1141
1154
 
1142
1155
  const {toOuterPoint: toOuterPoint$2} = MatrixHelper;
1143
1156
 
1144
- const {float: float, fourNumber: fourNumber} = MathHelper;
1157
+ const {float: float$1, fourNumber: fourNumber} = MathHelper;
1145
1158
 
1146
1159
  const {floor: floor$2, ceil: ceil$2} = Math;
1147
1160
 
@@ -1324,10 +1337,10 @@ const BoundsHelper = {
1324
1337
  }
1325
1338
  },
1326
1339
  float(t, maxLength) {
1327
- t.x = float(t.x, maxLength);
1328
- t.y = float(t.y, maxLength);
1329
- t.width = float(t.width, maxLength);
1330
- t.height = float(t.height, maxLength);
1340
+ t.x = float$1(t.x, maxLength);
1341
+ t.y = float$1(t.y, maxLength);
1342
+ t.width = float$1(t.width, maxLength);
1343
+ t.height = float$1(t.height, maxLength);
1331
1344
  },
1332
1345
  add(t, bounds, isPoint) {
1333
1346
  right$1 = t.x + t.width;
@@ -2146,7 +2159,7 @@ __decorate([ contextMethod() ], Canvas$1.prototype, "measureText", null);
2146
2159
 
2147
2160
  __decorate([ contextMethod() ], Canvas$1.prototype, "strokeText", null);
2148
2161
 
2149
- const {copy: copy$7, multiplyParent: multiplyParent$4} = MatrixHelper, {round: round$1} = Math, tempPixelBounds = new Bounds, tempPixelBounds2 = new Bounds;
2162
+ const {copy: copy$7, multiplyParent: multiplyParent$4, pixelScale: pixelScale} = MatrixHelper, {round: round$1} = Math, tempPixelBounds = new Bounds, tempPixelBounds2 = new Bounds;
2150
2163
 
2151
2164
  const minSize = {
2152
2165
  width: 1,
@@ -2247,12 +2260,7 @@ class LeaferCanvasBase extends Canvas$1 {
2247
2260
  setWorld(matrix, parentMatrix) {
2248
2261
  const {pixelRatio: pixelRatio, pixelSnap: pixelSnap} = this, w = this.worldTransform;
2249
2262
  if (parentMatrix) multiplyParent$4(matrix, parentMatrix, w);
2250
- w.a = matrix.a * pixelRatio;
2251
- w.b = matrix.b * pixelRatio;
2252
- w.c = matrix.c * pixelRatio;
2253
- w.d = matrix.d * pixelRatio;
2254
- w.e = matrix.e * pixelRatio;
2255
- w.f = matrix.f * pixelRatio;
2263
+ pixelScale(matrix, pixelRatio, w);
2256
2264
  if (pixelSnap) {
2257
2265
  if (matrix.half && matrix.half * pixelRatio % 2) w.e = round$1(w.e - .5) + .5, w.f = round$1(w.f - .5) + .5; else w.e = round$1(w.e),
2258
2266
  w.f = round$1(w.f);
@@ -4265,6 +4273,18 @@ function surfaceType(defaultValue) {
4265
4273
  }));
4266
4274
  }
4267
4275
 
4276
+ function dimType(defaultValue) {
4277
+ return decorateLeafAttr(defaultValue, key => attr({
4278
+ set(value) {
4279
+ if (this.__setAttr(key, value)) {
4280
+ const data = this.__;
4281
+ DataHelper.stintSet(data, "__useDim", data.dim || data.bright || data.dimskip);
4282
+ this.__layout.surfaceChange();
4283
+ }
4284
+ }
4285
+ }));
4286
+ }
4287
+
4268
4288
  function opacityType(defaultValue) {
4269
4289
  return decorateLeafAttr(defaultValue, key => attr({
4270
4290
  set(value) {
@@ -4309,7 +4329,7 @@ function sortType(defaultValue) {
4309
4329
  return decorateLeafAttr(defaultValue, key => attr({
4310
4330
  set(value) {
4311
4331
  if (this.__setAttr(key, value)) {
4312
- this.__layout.surfaceChanged || this.__layout.surfaceChange();
4332
+ this.__layout.surfaceChange();
4313
4333
  this.waitParent(() => {
4314
4334
  this.parent.__layout.childrenSortChange();
4315
4335
  });
@@ -4346,7 +4366,7 @@ function hitType(defaultValue) {
4346
4366
  set(value) {
4347
4367
  if (this.__setAttr(key, value)) {
4348
4368
  this.__layout.hitCanvasChanged = true;
4349
- if (Debug.showBounds === "hit") this.__layout.surfaceChanged || this.__layout.surfaceChange();
4369
+ if (Debug.showBounds === "hit") this.__layout.surfaceChange();
4350
4370
  if (this.leafer) this.leafer.updateCursor();
4351
4371
  }
4352
4372
  }
@@ -5463,6 +5483,8 @@ LeaferEvent.RESTART = "leafer.restart";
5463
5483
 
5464
5484
  LeaferEvent.END = "leafer.end";
5465
5485
 
5486
+ LeaferEvent.UPDATE_MODE = "leafer.update_mode";
5487
+
5466
5488
  LeaferEvent.TRANSFORM = "leafer.transform";
5467
5489
 
5468
5490
  LeaferEvent.MOVE = "leafer.move";
@@ -5859,6 +5881,7 @@ const LeafRender = {
5859
5881
  if (options.shape) return this.__renderShape(canvas, options);
5860
5882
  if (this.__worldOpacity) {
5861
5883
  const data = this.__;
5884
+ if (data.bright && !options.topRendering) return options.topList.add(this);
5862
5885
  canvas.setWorld(this.__nowWorld = this.__getNowWorld(options));
5863
5886
  canvas.opacity = options.dimOpacity && !data.dimskip ? data.opacity * options.dimOpacity : data.opacity;
5864
5887
  if (this.__.__single) {
@@ -5907,7 +5930,9 @@ const BranchRender = {
5907
5930
  this.__nowWorld = this.__getNowWorld(options);
5908
5931
  if (this.__worldOpacity) {
5909
5932
  const data = this.__;
5910
- if (data.dim) options.dimOpacity = data.dim === true ? .2 : data.dim; else if (data.dimskip) options.dimOpacity && (options.dimOpacity = 0);
5933
+ if (data.__useDim) {
5934
+ if (data.dim) options.dimOpacity = data.dim === true ? .2 : data.dim; else if (data.bright && !options.topRendering) return options.topList.add(this); else if (data.dimskip) options.dimOpacity && (options.dimOpacity = 0);
5935
+ }
5911
5936
  if (data.__single && !this.isBranchLeaf) {
5912
5937
  if (data.eraser === "path") return this.__renderEraser(canvas, options);
5913
5938
  const tempCanvas = canvas.getSameCanvas(false, true);
@@ -6749,7 +6774,7 @@ class LeafLevelList {
6749
6774
  }
6750
6775
  }
6751
6776
 
6752
- const version = "1.9.5";
6777
+ const version = "1.9.7";
6753
6778
 
6754
6779
  class LeaferCanvas extends LeaferCanvasBase {
6755
6780
  get allowBackgroundColor() {
@@ -7456,7 +7481,7 @@ class Renderer {
7456
7481
  };
7457
7482
  if (this.needFill) canvas.fillWorld(bounds, this.config.fill);
7458
7483
  if (Debug.showRepaint) Debug.drawRepaint(canvas, bounds);
7459
- this.target.__render(canvas, options);
7484
+ Platform.render(this.target, canvas, options);
7460
7485
  this.renderBounds = realBounds = realBounds || bounds;
7461
7486
  this.renderOptions = options;
7462
7487
  this.totalBounds.isEmpty() ? this.totalBounds = realBounds : this.totalBounds.add(realBounds);
@@ -7549,6 +7574,15 @@ Object.assign(Creator, {
7549
7574
 
7550
7575
  Platform.layout = Layouter.fullLayout;
7551
7576
 
7577
+ Platform.render = function(target, canvas, options) {
7578
+ const topOptions = Object.assign(Object.assign({}, options), {
7579
+ topRendering: true
7580
+ });
7581
+ options.topList = new LeafList;
7582
+ target.__render(canvas, options);
7583
+ if (options.topList.length) options.topList.forEach(item => item.__render(canvas, topOptions));
7584
+ };
7585
+
7552
7586
  function effectType(defaultValue) {
7553
7587
  return decorateLeafAttr(defaultValue, key => attr({
7554
7588
  set(value) {
@@ -7902,8 +7936,6 @@ class TextData extends UIData {
7902
7936
  if (!boxStyle) box.parent = t, box.__world = t.__world, boxLayout.boxBounds = layout.boxBounds;
7903
7937
  box.set(value);
7904
7938
  if (boxLayout.strokeChanged) layout.strokeChange();
7905
- if (boxLayout.renderChanged) layout.renderChange();
7906
- box.__updateChange();
7907
7939
  } else if (box) {
7908
7940
  t.__box = box.parent = null;
7909
7941
  box.destroy();
@@ -7973,7 +8005,7 @@ const UIBounds = {
7973
8005
  __updateRenderSpread() {
7974
8006
  let width = 0;
7975
8007
  const {shadow: shadow, innerShadow: innerShadow, blur: blur, backgroundBlur: backgroundBlur, filter: filter, renderSpread: renderSpread} = this.__;
7976
- if (shadow) shadow.forEach(item => width = Math.max(width, Math.max(Math.abs(item.y), Math.abs(item.x)) + (item.spread > 0 ? item.spread : 0) + item.blur * 1.5));
8008
+ if (shadow) width = Effect.getShadowSpread(this, shadow);
7977
8009
  if (blur) width = Math.max(width, blur);
7978
8010
  if (filter) width += Filter.getSpread(filter);
7979
8011
  if (renderSpread) width += renderSpread;
@@ -7986,36 +8018,69 @@ const UIBounds = {
7986
8018
  }
7987
8019
  };
7988
8020
 
8021
+ const {float: float} = MathHelper;
8022
+
8023
+ const tempContent = new Bounds, tempMerge = new Bounds, tempIntersect = new Bounds;
8024
+
7989
8025
  const DragBoundsHelper = {
8026
+ limitMove(leaf, move) {
8027
+ const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
8028
+ if (dragBounds) D.getValidMove(leaf.__localBoxBounds, D.getDragBounds(leaf), dragBoundsType, move, true);
8029
+ D.axisMove(leaf, move);
8030
+ },
8031
+ limitScaleOf(leaf, origin, scale) {
8032
+ const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
8033
+ if (dragBounds) D.getValidScaleOf(leaf.__localBoxBounds, D.getDragBounds(leaf), dragBoundsType, leaf.getLocalPointByInner(leaf.getInnerPointByBox(origin)), scale, true);
8034
+ },
8035
+ axisMove(leaf, move) {
8036
+ const {draggable: draggable} = leaf;
8037
+ if (draggable === "x") move.y = 0;
8038
+ if (draggable === "y") move.x = 0;
8039
+ },
8040
+ getDragBounds(leaf) {
8041
+ const {dragBounds: dragBounds} = leaf;
8042
+ return dragBounds === "parent" ? leaf.parent.boxBounds : dragBounds;
8043
+ },
8044
+ isInnerMode(content, dragBounds, dragBoundsType, sideType) {
8045
+ return dragBoundsType === "inner" || dragBoundsType === "auto" && content[sideType] > dragBounds[sideType];
8046
+ },
7990
8047
  getValidMove(content, dragBounds, dragBoundsType, move, change) {
7991
8048
  const x = content.x + move.x, y = content.y + move.y, right = x + content.width, bottom = y + content.height;
7992
8049
  const boundsRight = dragBounds.x + dragBounds.width, boundsBottom = dragBounds.y + dragBounds.height;
7993
8050
  if (!change) move = Object.assign({}, move);
7994
- const isBiggerWidth = content.width > dragBounds.width;
7995
- const isBiggerHeight = content.height > dragBounds.height;
7996
- if (isBiggerWidth && dragBoundsType !== "outer") {
8051
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
7997
8052
  if (x > dragBounds.x) move.x += dragBounds.x - x; else if (right < boundsRight) move.x += boundsRight - right;
7998
8053
  } else {
7999
8054
  if (x < dragBounds.x) move.x += dragBounds.x - x; else if (right > boundsRight) move.x += boundsRight - right;
8000
8055
  }
8001
- if (isBiggerHeight && dragBoundsType !== "outer") {
8056
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
8002
8057
  if (y > dragBounds.y) move.y += dragBounds.y - y; else if (bottom < boundsBottom) move.y += boundsBottom - bottom;
8003
8058
  } else {
8004
8059
  if (y < dragBounds.y) move.y += dragBounds.y - y; else if (bottom > boundsBottom) move.y += boundsBottom - bottom;
8005
8060
  }
8006
- move.x = MathHelper.float(move.x);
8007
- move.y = MathHelper.float(move.y);
8061
+ move.x = float(move.x);
8062
+ move.y = float(move.y);
8008
8063
  return move;
8009
8064
  },
8010
- axisMove(leaf, move) {
8011
- const {draggable: draggable} = leaf;
8012
- if (draggable === "x") move.y = 0;
8013
- if (draggable === "y") move.x = 0;
8014
- },
8015
- limitMove(leaf, move) {
8016
- const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
8017
- if (dragBounds) D.getValidMove(leaf.__localBoxBounds, dragBounds === "parent" ? leaf.parent.boxBounds : dragBounds, dragBoundsType, move, true);
8018
- D.axisMove(leaf, move);
8065
+ getValidScaleOf(content, dragBounds, dragBoundsType, origin, scale, change) {
8066
+ if (!change) scale = Object.assign({}, scale);
8067
+ let fitScaleX, fitScaleY;
8068
+ tempContent.set(content).scaleOf(origin, scale.x, scale.y).unsign();
8069
+ tempMerge.set(tempContent).add(dragBounds);
8070
+ tempIntersect.set(tempContent).intersect(dragBounds);
8071
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
8072
+ fitScaleX = tempMerge.width / tempContent.width;
8073
+ } else {
8074
+ fitScaleX = tempIntersect.width / tempContent.width;
8075
+ }
8076
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
8077
+ fitScaleY = tempMerge.height / tempContent.height;
8078
+ } else {
8079
+ fitScaleY = tempIntersect.height / tempContent.height;
8080
+ }
8081
+ scale.x = float(tempIntersect.width) ? scale.x * fitScaleX : 1;
8082
+ scale.y = float(tempIntersect.height) ? scale.y * fitScaleY : 1;
8083
+ return scale;
8019
8084
  }
8020
8085
  };
8021
8086
 
@@ -8033,7 +8098,7 @@ const UIRender = {
8033
8098
  }
8034
8099
  if (data.__useEffect) {
8035
8100
  const {shadow: shadow, fill: fill, stroke: stroke} = data, otherEffect = data.innerShadow || data.blur || data.backgroundBlur || data.filter;
8036
- stintSet$1(data, "__isFastShadow", shadow && !otherEffect && shadow.length < 2 && !shadow[0].spread && fill && !data.__isTransparentFill && !(isArray(fill) && fill.length > 1) && (this.useFastShadow || !stroke || stroke && data.strokeAlign === "inside"));
8101
+ stintSet$1(data, "__isFastShadow", shadow && !otherEffect && shadow.length < 2 && !shadow[0].spread && !Effect.isTransformShadow(shadow[0]) && fill && !data.__isTransparentFill && !(isArray(fill) && fill.length > 1) && (this.useFastShadow || !stroke || stroke && data.strokeAlign === "inside"));
8037
8102
  data.__useEffect = !!(shadow || otherEffect);
8038
8103
  }
8039
8104
  data.__checkSingle();
@@ -8293,9 +8358,9 @@ __decorate([ visibleType(true) ], UI.prototype, "visible", void 0);
8293
8358
 
8294
8359
  __decorate([ surfaceType(false) ], UI.prototype, "locked", void 0);
8295
8360
 
8296
- __decorate([ surfaceType(false) ], UI.prototype, "dim", void 0);
8361
+ __decorate([ dimType(false) ], UI.prototype, "dim", void 0);
8297
8362
 
8298
- __decorate([ surfaceType(false) ], UI.prototype, "dimskip", void 0);
8363
+ __decorate([ dimType(false) ], UI.prototype, "dimskip", void 0);
8299
8364
 
8300
8365
  __decorate([ sortType(0) ], UI.prototype, "zIndex", void 0);
8301
8366
 
@@ -8671,7 +8736,9 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8671
8736
  } else if (attrName === "zIndex") {
8672
8737
  this.canvas.zIndex = newValue;
8673
8738
  setTimeout(() => this.parent && this.parent.__updateSortChildren());
8674
- }
8739
+ } else if (attrName === "mode") this.emit(LeaferEvent.UPDATE_MODE, {
8740
+ mode: newValue
8741
+ });
8675
8742
  }
8676
8743
  return super.__setAttr(attrName, newValue);
8677
8744
  }
@@ -8854,6 +8921,8 @@ __decorate([ dataProcessor(LeaferData) ], Leafer.prototype, "__", void 0);
8854
8921
 
8855
8922
  __decorate([ boundsType() ], Leafer.prototype, "pixelRatio", void 0);
8856
8923
 
8924
+ __decorate([ dataType("normal") ], Leafer.prototype, "mode", void 0);
8925
+
8857
8926
  Leafer = Leafer_1 = __decorate([ registerUI() ], Leafer);
8858
8927
 
8859
8928
  let Rect = class Rect extends UI {
@@ -9046,57 +9115,9 @@ __decorate([ pathType(0) ], Ellipse.prototype, "endAngle", void 0);
9046
9115
 
9047
9116
  Ellipse = __decorate([ registerUI() ], Ellipse);
9048
9117
 
9049
- const {moveTo: moveTo$2, lineTo: lineTo$2, drawPoints: drawPoints$1} = PathCommandDataHelper;
9050
-
9051
- const {rotate: rotate$1, getAngle: getAngle$1, getDistance: getDistance$2, defaultPoint: defaultPoint} = PointHelper;
9052
-
9053
- let Line = class Line extends UI {
9054
- get __tag() {
9055
- return "Line";
9056
- }
9057
- get toPoint() {
9058
- const {width: width, rotation: rotation} = this.__;
9059
- const to = getPointData();
9060
- if (width) to.x = width;
9061
- if (rotation) rotate$1(to, rotation);
9062
- return to;
9063
- }
9064
- set toPoint(value) {
9065
- this.width = getDistance$2(defaultPoint, value);
9066
- this.rotation = getAngle$1(defaultPoint, value);
9067
- if (this.height) this.height = 0;
9068
- }
9069
- __updatePath() {
9070
- const data = this.__;
9071
- const path = data.path = [];
9072
- if (data.points) {
9073
- drawPoints$1(path, data.points, data.curve, data.closed);
9074
- } else {
9075
- moveTo$2(path, 0, 0);
9076
- lineTo$2(path, this.width, 0);
9077
- }
9078
- }
9079
- };
9080
-
9081
- __decorate([ dataProcessor(LineData) ], Line.prototype, "__", void 0);
9082
-
9083
- __decorate([ affectStrokeBoundsType("center") ], Line.prototype, "strokeAlign", void 0);
9084
-
9085
- __decorate([ boundsType(0) ], Line.prototype, "height", void 0);
9086
-
9087
- __decorate([ pathType() ], Line.prototype, "points", void 0);
9088
-
9089
- __decorate([ pathType(0) ], Line.prototype, "curve", void 0);
9090
-
9091
- __decorate([ pathType(false) ], Line.prototype, "closed", void 0);
9092
-
9093
- Line = __decorate([ registerUI() ], Line);
9094
-
9095
9118
  const {sin: sin$1, cos: cos$1, PI: PI$1} = Math;
9096
9119
 
9097
- const {moveTo: moveTo$1, lineTo: lineTo$1, closePath: closePath$1, drawPoints: drawPoints} = PathCommandDataHelper;
9098
-
9099
- const line = Line.prototype;
9120
+ const {moveTo: moveTo$2, lineTo: lineTo$2, closePath: closePath$1, drawPoints: drawPoints$1} = PathCommandDataHelper;
9100
9121
 
9101
9122
  let Polygon = class Polygon extends UI {
9102
9123
  get __tag() {
@@ -9106,19 +9127,17 @@ let Polygon = class Polygon extends UI {
9106
9127
  const data = this.__;
9107
9128
  const path = data.path = [];
9108
9129
  if (data.points) {
9109
- drawPoints(path, data.points, data.curve, true);
9130
+ drawPoints$1(path, data.points, data.curve, true);
9110
9131
  } else {
9111
9132
  const {width: width, height: height, sides: sides} = data;
9112
9133
  const rx = width / 2, ry = height / 2;
9113
- moveTo$1(path, rx, 0);
9134
+ moveTo$2(path, rx, 0);
9114
9135
  for (let i = 1; i < sides; i++) {
9115
- lineTo$1(path, rx + rx * sin$1(i * 2 * PI$1 / sides), ry - ry * cos$1(i * 2 * PI$1 / sides));
9136
+ lineTo$2(path, rx + rx * sin$1(i * 2 * PI$1 / sides), ry - ry * cos$1(i * 2 * PI$1 / sides));
9116
9137
  }
9117
9138
  closePath$1(path);
9118
9139
  }
9119
9140
  }
9120
- __updateRenderPath() {}
9121
- __updateBoxBounds() {}
9122
9141
  };
9123
9142
 
9124
9143
  __decorate([ dataProcessor(PolygonData) ], Polygon.prototype, "__", void 0);
@@ -9129,15 +9148,11 @@ __decorate([ pathType() ], Polygon.prototype, "points", void 0);
9129
9148
 
9130
9149
  __decorate([ pathType(0) ], Polygon.prototype, "curve", void 0);
9131
9150
 
9132
- __decorate([ rewrite(line.__updateRenderPath) ], Polygon.prototype, "__updateRenderPath", null);
9133
-
9134
- __decorate([ rewrite(line.__updateBoxBounds) ], Polygon.prototype, "__updateBoxBounds", null);
9135
-
9136
9151
  Polygon = __decorate([ rewriteAble(), registerUI() ], Polygon);
9137
9152
 
9138
9153
  const {sin: sin, cos: cos, PI: PI} = Math;
9139
9154
 
9140
- const {moveTo: moveTo, lineTo: lineTo, closePath: closePath} = PathCommandDataHelper;
9155
+ const {moveTo: moveTo$1, lineTo: lineTo$1, closePath: closePath} = PathCommandDataHelper;
9141
9156
 
9142
9157
  let Star = class Star extends UI {
9143
9158
  get __tag() {
@@ -9147,9 +9162,9 @@ let Star = class Star extends UI {
9147
9162
  const {width: width, height: height, corners: corners, innerRadius: innerRadius} = this.__;
9148
9163
  const rx = width / 2, ry = height / 2;
9149
9164
  const path = this.__.path = [];
9150
- moveTo(path, rx, 0);
9165
+ moveTo$1(path, rx, 0);
9151
9166
  for (let i = 1; i < corners * 2; i++) {
9152
- lineTo(path, rx + (i % 2 === 0 ? rx : rx * innerRadius) * sin(i * PI / corners), ry - (i % 2 === 0 ? ry : ry * innerRadius) * cos(i * PI / corners));
9167
+ lineTo$1(path, rx + (i % 2 === 0 ? rx : rx * innerRadius) * sin(i * PI / corners), ry - (i % 2 === 0 ? ry : ry * innerRadius) * cos(i * PI / corners));
9153
9168
  }
9154
9169
  closePath(path);
9155
9170
  }
@@ -9163,6 +9178,52 @@ __decorate([ pathType(.382) ], Star.prototype, "innerRadius", void 0);
9163
9178
 
9164
9179
  Star = __decorate([ registerUI() ], Star);
9165
9180
 
9181
+ const {moveTo: moveTo, lineTo: lineTo, drawPoints: drawPoints} = PathCommandDataHelper;
9182
+
9183
+ const {rotate: rotate$1, getAngle: getAngle$1, getDistance: getDistance$2, defaultPoint: defaultPoint} = PointHelper;
9184
+
9185
+ let Line = class Line extends UI {
9186
+ get __tag() {
9187
+ return "Line";
9188
+ }
9189
+ get toPoint() {
9190
+ const {width: width, rotation: rotation} = this.__;
9191
+ const to = getPointData();
9192
+ if (width) to.x = width;
9193
+ if (rotation) rotate$1(to, rotation);
9194
+ return to;
9195
+ }
9196
+ set toPoint(value) {
9197
+ this.width = getDistance$2(defaultPoint, value);
9198
+ this.rotation = getAngle$1(defaultPoint, value);
9199
+ if (this.height) this.height = 0;
9200
+ }
9201
+ __updatePath() {
9202
+ const data = this.__;
9203
+ const path = data.path = [];
9204
+ if (data.points) {
9205
+ drawPoints(path, data.points, data.curve, data.closed);
9206
+ } else {
9207
+ moveTo(path, 0, 0);
9208
+ lineTo(path, this.width, 0);
9209
+ }
9210
+ }
9211
+ };
9212
+
9213
+ __decorate([ dataProcessor(LineData) ], Line.prototype, "__", void 0);
9214
+
9215
+ __decorate([ affectStrokeBoundsType("center") ], Line.prototype, "strokeAlign", void 0);
9216
+
9217
+ __decorate([ boundsType(0) ], Line.prototype, "height", void 0);
9218
+
9219
+ __decorate([ pathType() ], Line.prototype, "points", void 0);
9220
+
9221
+ __decorate([ pathType(0) ], Line.prototype, "curve", void 0);
9222
+
9223
+ __decorate([ pathType(false) ], Line.prototype, "closed", void 0);
9224
+
9225
+ Line = __decorate([ registerUI() ], Line);
9226
+
9166
9227
  let Image = class Image extends Rect {
9167
9228
  get __tag() {
9168
9229
  return "Image";
@@ -9310,10 +9371,6 @@ let Text = class Text extends UI {
9310
9371
  DataHelper.stintSet(this, "isOverflow", !includes(b, contentBounds));
9311
9372
  if (this.isOverflow) setList(data.__textBoxBounds = {}, [ b, contentBounds ]), layout.renderChanged = true; else data.__textBoxBounds = b;
9312
9373
  }
9313
- __onUpdateSize() {
9314
- if (this.__box) this.__box.__onUpdateSize();
9315
- super.__onUpdateSize();
9316
- }
9317
9374
  __updateRenderSpread() {
9318
9375
  let width = super.__updateRenderSpread();
9319
9376
  if (!width) width = this.isOverflow ? 1 : 0;
@@ -9324,6 +9381,11 @@ let Text = class Text extends UI {
9324
9381
  copyAndSpread(renderBounds, this.__.__textBoxBounds, renderSpread);
9325
9382
  if (this.__box) this.__box.__layout.renderBounds = renderBounds;
9326
9383
  }
9384
+ __updateChange() {
9385
+ super.__updateChange();
9386
+ const box = this.__box;
9387
+ if (box) box.__onUpdateSize(), box.__updateChange();
9388
+ }
9327
9389
  __drawRenderPath(canvas) {
9328
9390
  canvas.font = this.__.__font;
9329
9391
  }
@@ -10412,12 +10474,18 @@ function shadow(ui, current, shape) {
10412
10474
  }
10413
10475
  worldCanvas ? other.copyWorld(worldCanvas, nowWorld, nowWorld, "destination-out") : other.copyWorld(shape.canvas, shapeBounds, bounds, "destination-out");
10414
10476
  }
10415
- LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
10477
+ if (Effect.isTransformShadow(item)) Effect.renderTransformShadow(ui, current, other, copyBounds, item); else LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
10416
10478
  if (end && index < end) other.clearWorld(copyBounds);
10417
10479
  });
10418
10480
  other.recycle(copyBounds);
10419
10481
  }
10420
10482
 
10483
+ function getShadowSpread(_ui, shadow) {
10484
+ let width = 0;
10485
+ shadow.forEach(item => width = Math.max(width, Math.max(Math.abs(item.y), Math.abs(item.x)) + (item.spread > 0 ? item.spread : 0) + item.blur * 1.5));
10486
+ return width;
10487
+ }
10488
+
10421
10489
  function drawWorldShadow(canvas, outBounds, spreadScale, shape) {
10422
10490
  const {bounds: bounds, shapeBounds: shapeBounds} = shape;
10423
10491
  if (Platform.fullImageShadow) {
@@ -10495,7 +10563,11 @@ const EffectModule = {
10495
10563
  shadow: shadow,
10496
10564
  innerShadow: innerShadow,
10497
10565
  blur: blur,
10498
- backgroundBlur: backgroundBlur
10566
+ backgroundBlur: backgroundBlur,
10567
+ getShadowSpread: getShadowSpread,
10568
+ isTransformShadow(_shadow) {
10569
+ return undefined;
10570
+ }
10499
10571
  };
10500
10572
 
10501
10573
  const {excludeRenderBounds: excludeRenderBounds} = LeafBoundsHelper;
@@ -11003,16 +11075,17 @@ function toTextChar(row) {
11003
11075
  }
11004
11076
 
11005
11077
  function decorationText(drawData, style) {
11006
- let type;
11078
+ let type, offset = 0;
11007
11079
  const {fontSize: fontSize, textDecoration: textDecoration} = style;
11008
11080
  drawData.decorationHeight = fontSize / 11;
11009
11081
  if (isObject(textDecoration)) {
11010
11082
  type = textDecoration.type;
11011
11083
  if (textDecoration.color) drawData.decorationColor = ColorConvert.string(textDecoration.color);
11084
+ if (textDecoration.offset) offset = Math.min(fontSize * .3, Math.max(textDecoration.offset, -fontSize * .15));
11012
11085
  } else type = textDecoration;
11013
11086
  switch (type) {
11014
11087
  case "under":
11015
- drawData.decorationY = [ fontSize * .15 ];
11088
+ drawData.decorationY = [ fontSize * .15 + offset ];
11016
11089
  break;
11017
11090
 
11018
11091
  case "delete":
@@ -11020,7 +11093,7 @@ function decorationText(drawData, style) {
11020
11093
  break;
11021
11094
 
11022
11095
  case "under-delete":
11023
- drawData.decorationY = [ fontSize * .15, -fontSize * .35 ];
11096
+ drawData.decorationY = [ fontSize * .15 + offset, -fontSize * .35 ];
11024
11097
  }
11025
11098
  }
11026
11099
 
@@ -11120,4 +11193,4 @@ try {
11120
11193
  if (wx) useCanvas("miniapp", wx);
11121
11194
  } catch (_a) {}
11122
11195
 
11123
- export { AlignHelper, Answer, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsEvent, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, DataHelper, Debug, Direction4, Direction9, DragBoundsHelper, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, Frame, FrameData, Group, GroupData, Image, ImageData, ImageEvent, ImageManager, IncrementId, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferImage, Line, LineData, MathHelper, Matrix, MatrixHelper, MyImage, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Platform, Plugin, Point, PointHelper, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, Resource, Run, Star, StarData, State, StringNumberMap, TaskItem, TaskProcessor, Text, TextConvert, TextData, Transition, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, affectRenderBoundsType, affectStrokeBoundsType, attr, autoLayoutType, boundsType, canvasPatch, canvasSizeAttrs, createAttr, createDescriptor, cursorType, dataProcessor, dataType, decorateLeafAttr, defineDataProcessor, defineKey, defineLeafAttr, doBoundsType, doStrokeType, effectType, emptyData, eraserType, extraPropertyEventMap, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, isArray, isData, isEmptyData, isFinite, isNull, isNumber, isObject, isString, isUndefined, layoutProcessor, leaferTransformAttrMap, maskType, naturalBoundsType, opacityType, path, pathInputType, pathType, pen, positionType, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleType, scrollType, sortType, strokeType, surfaceType, tempBounds$1 as tempBounds, tempMatrix$1 as tempMatrix, tempPoint$2 as tempPoint, tryToNumber, useCanvas, useModule, version, visibleType, zoomLayerType };
11196
+ export { AlignHelper, Answer, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsEvent, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, DataHelper, Debug, Direction4, Direction9, DragBoundsHelper, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, Frame, FrameData, Group, GroupData, Image, ImageData, ImageEvent, ImageManager, IncrementId, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferImage, Line, LineData, MathHelper, Matrix, MatrixHelper, MyImage, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Platform, Plugin, Point, PointHelper, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, Resource, Run, Star, StarData, State, StringNumberMap, TaskItem, TaskProcessor, Text, TextConvert, TextData, Transition, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, affectRenderBoundsType, affectStrokeBoundsType, attr, autoLayoutType, boundsType, canvasPatch, canvasSizeAttrs, createAttr, createDescriptor, cursorType, dataProcessor, dataType, decorateLeafAttr, defineDataProcessor, defineKey, defineLeafAttr, dimType, doBoundsType, doStrokeType, effectType, emptyData, eraserType, extraPropertyEventMap, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, isArray, isData, isEmptyData, isFinite, isNull, isNumber, isObject, isString, isUndefined, layoutProcessor, leaferTransformAttrMap, maskType, naturalBoundsType, opacityType, path, pathInputType, pathType, pen, positionType, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleType, scrollType, sortType, strokeType, surfaceType, tempBounds$1 as tempBounds, tempMatrix$1 as tempMatrix, tempPoint$2 as tempPoint, tryToNumber, useCanvas, useModule, version, visibleType, zoomLayerType };