@leafer-ui/worker 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$8, multiplyParent: multiplyParent$4} = MatrixHelper, {round: round$1} = Math, tempPixelBounds = new Bounds, tempPixelBounds2 = new Bounds;
2162
+ const {copy: copy$8, 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() {
@@ -7303,7 +7328,7 @@ class Renderer {
7303
7328
  };
7304
7329
  if (this.needFill) canvas.fillWorld(bounds, this.config.fill);
7305
7330
  if (Debug.showRepaint) Debug.drawRepaint(canvas, bounds);
7306
- this.target.__render(canvas, options);
7331
+ Platform.render(this.target, canvas, options);
7307
7332
  this.renderBounds = realBounds = realBounds || bounds;
7308
7333
  this.renderOptions = options;
7309
7334
  this.totalBounds.isEmpty() ? this.totalBounds = realBounds : this.totalBounds.add(realBounds);
@@ -7475,7 +7500,7 @@ class Picker {
7475
7500
  item = path.list[i];
7476
7501
  if (!item.__.hittable) break;
7477
7502
  hittablePath.addAt(item, 0);
7478
- if (!item.__.hitChildren) break;
7503
+ if (!item.__.hitChildren || item.isLeafer && item.mode === "draw") break;
7479
7504
  }
7480
7505
  return hittablePath;
7481
7506
  }
@@ -7579,6 +7604,15 @@ Object.assign(Creator, {
7579
7604
 
7580
7605
  Platform.layout = Layouter.fullLayout;
7581
7606
 
7607
+ Platform.render = function(target, canvas, options) {
7608
+ const topOptions = Object.assign(Object.assign({}, options), {
7609
+ topRendering: true
7610
+ });
7611
+ options.topList = new LeafList;
7612
+ target.__render(canvas, options);
7613
+ if (options.topList.length) options.topList.forEach(item => item.__render(canvas, topOptions));
7614
+ };
7615
+
7582
7616
  function effectType(defaultValue) {
7583
7617
  return decorateLeafAttr(defaultValue, key => attr({
7584
7618
  set(value) {
@@ -7932,8 +7966,6 @@ class TextData extends UIData {
7932
7966
  if (!boxStyle) box.parent = t, box.__world = t.__world, boxLayout.boxBounds = layout.boxBounds;
7933
7967
  box.set(value);
7934
7968
  if (boxLayout.strokeChanged) layout.strokeChange();
7935
- if (boxLayout.renderChanged) layout.renderChange();
7936
- box.__updateChange();
7937
7969
  } else if (box) {
7938
7970
  t.__box = box.parent = null;
7939
7971
  box.destroy();
@@ -8003,7 +8035,7 @@ const UIBounds = {
8003
8035
  __updateRenderSpread() {
8004
8036
  let width = 0;
8005
8037
  const {shadow: shadow, innerShadow: innerShadow, blur: blur, backgroundBlur: backgroundBlur, filter: filter, renderSpread: renderSpread} = this.__;
8006
- 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));
8038
+ if (shadow) width = Effect.getShadowSpread(this, shadow);
8007
8039
  if (blur) width = Math.max(width, blur);
8008
8040
  if (filter) width += Filter.getSpread(filter);
8009
8041
  if (renderSpread) width += renderSpread;
@@ -8016,36 +8048,69 @@ const UIBounds = {
8016
8048
  }
8017
8049
  };
8018
8050
 
8051
+ const {float: float} = MathHelper;
8052
+
8053
+ const tempContent = new Bounds, tempMerge = new Bounds, tempIntersect = new Bounds;
8054
+
8019
8055
  const DragBoundsHelper = {
8056
+ limitMove(leaf, move) {
8057
+ const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
8058
+ if (dragBounds) D.getValidMove(leaf.__localBoxBounds, D.getDragBounds(leaf), dragBoundsType, move, true);
8059
+ D.axisMove(leaf, move);
8060
+ },
8061
+ limitScaleOf(leaf, origin, scale) {
8062
+ const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
8063
+ if (dragBounds) D.getValidScaleOf(leaf.__localBoxBounds, D.getDragBounds(leaf), dragBoundsType, leaf.getLocalPointByInner(leaf.getInnerPointByBox(origin)), scale, true);
8064
+ },
8065
+ axisMove(leaf, move) {
8066
+ const {draggable: draggable} = leaf;
8067
+ if (draggable === "x") move.y = 0;
8068
+ if (draggable === "y") move.x = 0;
8069
+ },
8070
+ getDragBounds(leaf) {
8071
+ const {dragBounds: dragBounds} = leaf;
8072
+ return dragBounds === "parent" ? leaf.parent.boxBounds : dragBounds;
8073
+ },
8074
+ isInnerMode(content, dragBounds, dragBoundsType, sideType) {
8075
+ return dragBoundsType === "inner" || dragBoundsType === "auto" && content[sideType] > dragBounds[sideType];
8076
+ },
8020
8077
  getValidMove(content, dragBounds, dragBoundsType, move, change) {
8021
8078
  const x = content.x + move.x, y = content.y + move.y, right = x + content.width, bottom = y + content.height;
8022
8079
  const boundsRight = dragBounds.x + dragBounds.width, boundsBottom = dragBounds.y + dragBounds.height;
8023
8080
  if (!change) move = Object.assign({}, move);
8024
- const isBiggerWidth = content.width > dragBounds.width;
8025
- const isBiggerHeight = content.height > dragBounds.height;
8026
- if (isBiggerWidth && dragBoundsType !== "outer") {
8081
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
8027
8082
  if (x > dragBounds.x) move.x += dragBounds.x - x; else if (right < boundsRight) move.x += boundsRight - right;
8028
8083
  } else {
8029
8084
  if (x < dragBounds.x) move.x += dragBounds.x - x; else if (right > boundsRight) move.x += boundsRight - right;
8030
8085
  }
8031
- if (isBiggerHeight && dragBoundsType !== "outer") {
8086
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
8032
8087
  if (y > dragBounds.y) move.y += dragBounds.y - y; else if (bottom < boundsBottom) move.y += boundsBottom - bottom;
8033
8088
  } else {
8034
8089
  if (y < dragBounds.y) move.y += dragBounds.y - y; else if (bottom > boundsBottom) move.y += boundsBottom - bottom;
8035
8090
  }
8036
- move.x = MathHelper.float(move.x);
8037
- move.y = MathHelper.float(move.y);
8091
+ move.x = float(move.x);
8092
+ move.y = float(move.y);
8038
8093
  return move;
8039
8094
  },
8040
- axisMove(leaf, move) {
8041
- const {draggable: draggable} = leaf;
8042
- if (draggable === "x") move.y = 0;
8043
- if (draggable === "y") move.x = 0;
8044
- },
8045
- limitMove(leaf, move) {
8046
- const {dragBounds: dragBounds, dragBoundsType: dragBoundsType} = leaf;
8047
- if (dragBounds) D.getValidMove(leaf.__localBoxBounds, dragBounds === "parent" ? leaf.parent.boxBounds : dragBounds, dragBoundsType, move, true);
8048
- D.axisMove(leaf, move);
8095
+ getValidScaleOf(content, dragBounds, dragBoundsType, origin, scale, change) {
8096
+ if (!change) scale = Object.assign({}, scale);
8097
+ let fitScaleX, fitScaleY;
8098
+ tempContent.set(content).scaleOf(origin, scale.x, scale.y).unsign();
8099
+ tempMerge.set(tempContent).add(dragBounds);
8100
+ tempIntersect.set(tempContent).intersect(dragBounds);
8101
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "width")) {
8102
+ fitScaleX = tempMerge.width / tempContent.width;
8103
+ } else {
8104
+ fitScaleX = tempIntersect.width / tempContent.width;
8105
+ }
8106
+ if (D.isInnerMode(content, dragBounds, dragBoundsType, "height")) {
8107
+ fitScaleY = tempMerge.height / tempContent.height;
8108
+ } else {
8109
+ fitScaleY = tempIntersect.height / tempContent.height;
8110
+ }
8111
+ scale.x = float(tempIntersect.width) ? scale.x * fitScaleX : 1;
8112
+ scale.y = float(tempIntersect.height) ? scale.y * fitScaleY : 1;
8113
+ return scale;
8049
8114
  }
8050
8115
  };
8051
8116
 
@@ -8063,7 +8128,7 @@ const UIRender = {
8063
8128
  }
8064
8129
  if (data.__useEffect) {
8065
8130
  const {shadow: shadow, fill: fill, stroke: stroke} = data, otherEffect = data.innerShadow || data.blur || data.backgroundBlur || data.filter;
8066
- 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"));
8131
+ 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"));
8067
8132
  data.__useEffect = !!(shadow || otherEffect);
8068
8133
  }
8069
8134
  data.__checkSingle();
@@ -8323,9 +8388,9 @@ __decorate([ visibleType(true) ], UI.prototype, "visible", void 0);
8323
8388
 
8324
8389
  __decorate([ surfaceType(false) ], UI.prototype, "locked", void 0);
8325
8390
 
8326
- __decorate([ surfaceType(false) ], UI.prototype, "dim", void 0);
8391
+ __decorate([ dimType(false) ], UI.prototype, "dim", void 0);
8327
8392
 
8328
- __decorate([ surfaceType(false) ], UI.prototype, "dimskip", void 0);
8393
+ __decorate([ dimType(false) ], UI.prototype, "dimskip", void 0);
8329
8394
 
8330
8395
  __decorate([ sortType(0) ], UI.prototype, "zIndex", void 0);
8331
8396
 
@@ -8701,7 +8766,9 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8701
8766
  } else if (attrName === "zIndex") {
8702
8767
  this.canvas.zIndex = newValue;
8703
8768
  setTimeout(() => this.parent && this.parent.__updateSortChildren());
8704
- }
8769
+ } else if (attrName === "mode") this.emit(LeaferEvent.UPDATE_MODE, {
8770
+ mode: newValue
8771
+ });
8705
8772
  }
8706
8773
  return super.__setAttr(attrName, newValue);
8707
8774
  }
@@ -8884,6 +8951,8 @@ __decorate([ dataProcessor(LeaferData) ], Leafer.prototype, "__", void 0);
8884
8951
 
8885
8952
  __decorate([ boundsType() ], Leafer.prototype, "pixelRatio", void 0);
8886
8953
 
8954
+ __decorate([ dataType("normal") ], Leafer.prototype, "mode", void 0);
8955
+
8887
8956
  Leafer = Leafer_1 = __decorate([ registerUI() ], Leafer);
8888
8957
 
8889
8958
  let Rect = class Rect extends UI {
@@ -9076,57 +9145,9 @@ __decorate([ pathType(0) ], Ellipse.prototype, "endAngle", void 0);
9076
9145
 
9077
9146
  Ellipse = __decorate([ registerUI() ], Ellipse);
9078
9147
 
9079
- const {moveTo: moveTo$2, lineTo: lineTo$2, drawPoints: drawPoints$1} = PathCommandDataHelper;
9080
-
9081
- const {rotate: rotate$1, getAngle: getAngle$1, getDistance: getDistance$2, defaultPoint: defaultPoint} = PointHelper;
9082
-
9083
- let Line = class Line extends UI {
9084
- get __tag() {
9085
- return "Line";
9086
- }
9087
- get toPoint() {
9088
- const {width: width, rotation: rotation} = this.__;
9089
- const to = getPointData();
9090
- if (width) to.x = width;
9091
- if (rotation) rotate$1(to, rotation);
9092
- return to;
9093
- }
9094
- set toPoint(value) {
9095
- this.width = getDistance$2(defaultPoint, value);
9096
- this.rotation = getAngle$1(defaultPoint, value);
9097
- if (this.height) this.height = 0;
9098
- }
9099
- __updatePath() {
9100
- const data = this.__;
9101
- const path = data.path = [];
9102
- if (data.points) {
9103
- drawPoints$1(path, data.points, data.curve, data.closed);
9104
- } else {
9105
- moveTo$2(path, 0, 0);
9106
- lineTo$2(path, this.width, 0);
9107
- }
9108
- }
9109
- };
9110
-
9111
- __decorate([ dataProcessor(LineData) ], Line.prototype, "__", void 0);
9112
-
9113
- __decorate([ affectStrokeBoundsType("center") ], Line.prototype, "strokeAlign", void 0);
9114
-
9115
- __decorate([ boundsType(0) ], Line.prototype, "height", void 0);
9116
-
9117
- __decorate([ pathType() ], Line.prototype, "points", void 0);
9118
-
9119
- __decorate([ pathType(0) ], Line.prototype, "curve", void 0);
9120
-
9121
- __decorate([ pathType(false) ], Line.prototype, "closed", void 0);
9122
-
9123
- Line = __decorate([ registerUI() ], Line);
9124
-
9125
9148
  const {sin: sin$1, cos: cos$1, PI: PI$1} = Math;
9126
9149
 
9127
- const {moveTo: moveTo$1, lineTo: lineTo$1, closePath: closePath$1, drawPoints: drawPoints} = PathCommandDataHelper;
9128
-
9129
- const line = Line.prototype;
9150
+ const {moveTo: moveTo$2, lineTo: lineTo$2, closePath: closePath$1, drawPoints: drawPoints$1} = PathCommandDataHelper;
9130
9151
 
9131
9152
  let Polygon = class Polygon extends UI {
9132
9153
  get __tag() {
@@ -9136,19 +9157,17 @@ let Polygon = class Polygon extends UI {
9136
9157
  const data = this.__;
9137
9158
  const path = data.path = [];
9138
9159
  if (data.points) {
9139
- drawPoints(path, data.points, data.curve, true);
9160
+ drawPoints$1(path, data.points, data.curve, true);
9140
9161
  } else {
9141
9162
  const {width: width, height: height, sides: sides} = data;
9142
9163
  const rx = width / 2, ry = height / 2;
9143
- moveTo$1(path, rx, 0);
9164
+ moveTo$2(path, rx, 0);
9144
9165
  for (let i = 1; i < sides; i++) {
9145
- lineTo$1(path, rx + rx * sin$1(i * 2 * PI$1 / sides), ry - ry * cos$1(i * 2 * PI$1 / sides));
9166
+ lineTo$2(path, rx + rx * sin$1(i * 2 * PI$1 / sides), ry - ry * cos$1(i * 2 * PI$1 / sides));
9146
9167
  }
9147
9168
  closePath$1(path);
9148
9169
  }
9149
9170
  }
9150
- __updateRenderPath() {}
9151
- __updateBoxBounds() {}
9152
9171
  };
9153
9172
 
9154
9173
  __decorate([ dataProcessor(PolygonData) ], Polygon.prototype, "__", void 0);
@@ -9159,15 +9178,11 @@ __decorate([ pathType() ], Polygon.prototype, "points", void 0);
9159
9178
 
9160
9179
  __decorate([ pathType(0) ], Polygon.prototype, "curve", void 0);
9161
9180
 
9162
- __decorate([ rewrite(line.__updateRenderPath) ], Polygon.prototype, "__updateRenderPath", null);
9163
-
9164
- __decorate([ rewrite(line.__updateBoxBounds) ], Polygon.prototype, "__updateBoxBounds", null);
9165
-
9166
9181
  Polygon = __decorate([ rewriteAble(), registerUI() ], Polygon);
9167
9182
 
9168
9183
  const {sin: sin, cos: cos, PI: PI} = Math;
9169
9184
 
9170
- const {moveTo: moveTo, lineTo: lineTo, closePath: closePath} = PathCommandDataHelper;
9185
+ const {moveTo: moveTo$1, lineTo: lineTo$1, closePath: closePath} = PathCommandDataHelper;
9171
9186
 
9172
9187
  let Star = class Star extends UI {
9173
9188
  get __tag() {
@@ -9177,9 +9192,9 @@ let Star = class Star extends UI {
9177
9192
  const {width: width, height: height, corners: corners, innerRadius: innerRadius} = this.__;
9178
9193
  const rx = width / 2, ry = height / 2;
9179
9194
  const path = this.__.path = [];
9180
- moveTo(path, rx, 0);
9195
+ moveTo$1(path, rx, 0);
9181
9196
  for (let i = 1; i < corners * 2; i++) {
9182
- lineTo(path, rx + (i % 2 === 0 ? rx : rx * innerRadius) * sin(i * PI / corners), ry - (i % 2 === 0 ? ry : ry * innerRadius) * cos(i * PI / corners));
9197
+ 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));
9183
9198
  }
9184
9199
  closePath(path);
9185
9200
  }
@@ -9193,6 +9208,52 @@ __decorate([ pathType(.382) ], Star.prototype, "innerRadius", void 0);
9193
9208
 
9194
9209
  Star = __decorate([ registerUI() ], Star);
9195
9210
 
9211
+ const {moveTo: moveTo, lineTo: lineTo, drawPoints: drawPoints} = PathCommandDataHelper;
9212
+
9213
+ const {rotate: rotate$1, getAngle: getAngle$1, getDistance: getDistance$2, defaultPoint: defaultPoint} = PointHelper;
9214
+
9215
+ let Line = class Line extends UI {
9216
+ get __tag() {
9217
+ return "Line";
9218
+ }
9219
+ get toPoint() {
9220
+ const {width: width, rotation: rotation} = this.__;
9221
+ const to = getPointData();
9222
+ if (width) to.x = width;
9223
+ if (rotation) rotate$1(to, rotation);
9224
+ return to;
9225
+ }
9226
+ set toPoint(value) {
9227
+ this.width = getDistance$2(defaultPoint, value);
9228
+ this.rotation = getAngle$1(defaultPoint, value);
9229
+ if (this.height) this.height = 0;
9230
+ }
9231
+ __updatePath() {
9232
+ const data = this.__;
9233
+ const path = data.path = [];
9234
+ if (data.points) {
9235
+ drawPoints(path, data.points, data.curve, data.closed);
9236
+ } else {
9237
+ moveTo(path, 0, 0);
9238
+ lineTo(path, this.width, 0);
9239
+ }
9240
+ }
9241
+ };
9242
+
9243
+ __decorate([ dataProcessor(LineData) ], Line.prototype, "__", void 0);
9244
+
9245
+ __decorate([ affectStrokeBoundsType("center") ], Line.prototype, "strokeAlign", void 0);
9246
+
9247
+ __decorate([ boundsType(0) ], Line.prototype, "height", void 0);
9248
+
9249
+ __decorate([ pathType() ], Line.prototype, "points", void 0);
9250
+
9251
+ __decorate([ pathType(0) ], Line.prototype, "curve", void 0);
9252
+
9253
+ __decorate([ pathType(false) ], Line.prototype, "closed", void 0);
9254
+
9255
+ Line = __decorate([ registerUI() ], Line);
9256
+
9196
9257
  let Image = class Image extends Rect {
9197
9258
  get __tag() {
9198
9259
  return "Image";
@@ -9340,10 +9401,6 @@ let Text = class Text extends UI {
9340
9401
  DataHelper.stintSet(this, "isOverflow", !includes(b, contentBounds));
9341
9402
  if (this.isOverflow) setList(data.__textBoxBounds = {}, [ b, contentBounds ]), layout.renderChanged = true; else data.__textBoxBounds = b;
9342
9403
  }
9343
- __onUpdateSize() {
9344
- if (this.__box) this.__box.__onUpdateSize();
9345
- super.__onUpdateSize();
9346
- }
9347
9404
  __updateRenderSpread() {
9348
9405
  let width = super.__updateRenderSpread();
9349
9406
  if (!width) width = this.isOverflow ? 1 : 0;
@@ -9354,6 +9411,11 @@ let Text = class Text extends UI {
9354
9411
  copyAndSpread(renderBounds, this.__.__textBoxBounds, renderSpread);
9355
9412
  if (this.__box) this.__box.__layout.renderBounds = renderBounds;
9356
9413
  }
9414
+ __updateChange() {
9415
+ super.__updateChange();
9416
+ const box = this.__box;
9417
+ if (box) box.__onUpdateSize(), box.__updateChange();
9418
+ }
9357
9419
  __drawRenderPath(canvas) {
9358
9420
  canvas.font = this.__.__font;
9359
9421
  }
@@ -11831,12 +11893,18 @@ function shadow(ui, current, shape) {
11831
11893
  }
11832
11894
  worldCanvas ? other.copyWorld(worldCanvas, nowWorld, nowWorld, "destination-out") : other.copyWorld(shape.canvas, shapeBounds, bounds, "destination-out");
11833
11895
  }
11834
- LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
11896
+ if (Effect.isTransformShadow(item)) Effect.renderTransformShadow(ui, current, other, copyBounds, item); else LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
11835
11897
  if (end && index < end) other.clearWorld(copyBounds);
11836
11898
  });
11837
11899
  other.recycle(copyBounds);
11838
11900
  }
11839
11901
 
11902
+ function getShadowSpread(_ui, shadow) {
11903
+ let width = 0;
11904
+ 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));
11905
+ return width;
11906
+ }
11907
+
11840
11908
  function drawWorldShadow(canvas, outBounds, spreadScale, shape) {
11841
11909
  const {bounds: bounds, shapeBounds: shapeBounds} = shape;
11842
11910
  if (Platform.fullImageShadow) {
@@ -11914,7 +11982,11 @@ const EffectModule = {
11914
11982
  shadow: shadow,
11915
11983
  innerShadow: innerShadow,
11916
11984
  blur: blur,
11917
- backgroundBlur: backgroundBlur
11985
+ backgroundBlur: backgroundBlur,
11986
+ getShadowSpread: getShadowSpread,
11987
+ isTransformShadow(_shadow) {
11988
+ return undefined;
11989
+ }
11918
11990
  };
11919
11991
 
11920
11992
  const {excludeRenderBounds: excludeRenderBounds} = LeafBoundsHelper;
@@ -12422,16 +12494,17 @@ function toTextChar(row) {
12422
12494
  }
12423
12495
 
12424
12496
  function decorationText(drawData, style) {
12425
- let type;
12497
+ let type, offset = 0;
12426
12498
  const {fontSize: fontSize, textDecoration: textDecoration} = style;
12427
12499
  drawData.decorationHeight = fontSize / 11;
12428
12500
  if (isObject(textDecoration)) {
12429
12501
  type = textDecoration.type;
12430
12502
  if (textDecoration.color) drawData.decorationColor = ColorConvert.string(textDecoration.color);
12503
+ if (textDecoration.offset) offset = Math.min(fontSize * .3, Math.max(textDecoration.offset, -fontSize * .15));
12431
12504
  } else type = textDecoration;
12432
12505
  switch (type) {
12433
12506
  case "under":
12434
- drawData.decorationY = [ fontSize * .15 ];
12507
+ drawData.decorationY = [ fontSize * .15 + offset ];
12435
12508
  break;
12436
12509
 
12437
12510
  case "delete":
@@ -12439,7 +12512,7 @@ function decorationText(drawData, style) {
12439
12512
  break;
12440
12513
 
12441
12514
  case "under-delete":
12442
- drawData.decorationY = [ fontSize * .15, -fontSize * .35 ];
12515
+ drawData.decorationY = [ fontSize * .15 + offset, -fontSize * .35 ];
12443
12516
  }
12444
12517
  }
12445
12518
 
@@ -12543,4 +12616,4 @@ Object.assign(Creator, {
12543
12616
 
12544
12617
  useCanvas();
12545
12618
 
12546
- export { AlignHelper, Answer, App, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsEvent, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, Cursor, DataHelper, Debug, Direction4, Direction9, DragBoundsHelper, DragEvent, Dragger, DropEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, Frame, FrameData, Group, GroupData, HitCanvasManager, Image, ImageData, ImageEvent, ImageManager, IncrementId, InteractionBase, InteractionHelper, KeyEvent, Keyboard, 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, MoveEvent, MyDragEvent, MyImage, MyPointerEvent, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Picker, Platform, Plugin, Point, PointHelper, PointerButton, PointerEvent, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, Resource, RotateEvent, Run, Selector, Star, StarData, State, StringNumberMap, SwipeEvent, TaskItem, TaskProcessor, Text, TextConvert, TextData, Transition, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIEvent, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, ZoomEvent, 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 };
12619
+ export { AlignHelper, Answer, App, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsEvent, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, Cursor, DataHelper, Debug, Direction4, Direction9, DragBoundsHelper, DragEvent, Dragger, DropEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, Frame, FrameData, Group, GroupData, HitCanvasManager, Image, ImageData, ImageEvent, ImageManager, IncrementId, InteractionBase, InteractionHelper, KeyEvent, Keyboard, 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, MoveEvent, MyDragEvent, MyImage, MyPointerEvent, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Picker, Platform, Plugin, Point, PointHelper, PointerButton, PointerEvent, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, Resource, RotateEvent, Run, Selector, Star, StarData, State, StringNumberMap, SwipeEvent, TaskItem, TaskProcessor, Text, TextConvert, TextData, Transition, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIEvent, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, ZoomEvent, 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 };