@leafer/worker 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/worker.js CHANGED
@@ -233,6 +233,7 @@ var LeaferUI = function(exports) {
233
233
  }
234
234
  destroy() {
235
235
  this.__input = this.__middle = null;
236
+ if (this.__complexData) this.__complexData.destroy();
236
237
  }
237
238
  }
238
239
  const IncrementId = {
@@ -323,6 +324,7 @@ var LeaferUI = function(exports) {
323
324
  };
324
325
  const {set: set$2, get: get$5, setTemp: setTemp, toTempAB: toTempAB} = FourNumberHelper;
325
326
  const {round: round$6, pow: pow$2, max: max$6, floor: floor$3, PI: PI$4} = Math;
327
+ const tempScaleData$1 = {};
326
328
  const MathHelper = {
327
329
  within(value, min, max) {
328
330
  if (isObject(min)) max = min.max, min = min.min;
@@ -366,6 +368,24 @@ var LeaferUI = function(exports) {
366
368
  } else if (scale) MathHelper.assignScale(scaleData, scale);
367
369
  return scaleData;
368
370
  },
371
+ getScaleFixedData(worldScaleData, scaleFixed, unscale, abs, _localScaleData) {
372
+ let {scaleX: scaleX, scaleY: scaleY} = worldScaleData;
373
+ if (abs || scaleFixed) scaleX < 0 && (scaleX = -scaleX), scaleY < 0 && (scaleY = -scaleY);
374
+ if (scaleFixed) {
375
+ if (scaleFixed === true) {
376
+ scaleX = scaleY = unscale ? 1 : 1 / scaleX;
377
+ } else {
378
+ let minScale;
379
+ if (isNumber(scaleFixed)) minScale = scaleFixed; else if (scaleFixed === "zoom-in") minScale = 1;
380
+ if (minScale) {
381
+ if (scaleX > minScale || scaleY > minScale) scaleX = scaleY = unscale ? 1 : 1 / scaleX; else scaleX = scaleY = unscale ? 1 : 1 / minScale;
382
+ }
383
+ }
384
+ }
385
+ tempScaleData$1.scaleX = scaleX;
386
+ tempScaleData$1.scaleY = scaleY;
387
+ return tempScaleData$1;
388
+ },
369
389
  assignScale(scaleData, scale) {
370
390
  if (isNumber(scale)) {
371
391
  scaleData.scaleX = scaleData.scaleY = scale;
@@ -845,8 +865,8 @@ var LeaferUI = function(exports) {
845
865
  if (isObject(originPoints[0])) points = [], originPoints.forEach(p => points.push(p.x, p.y));
846
866
  return points;
847
867
  },
848
- isSame(t, point) {
849
- return float$5(t.x) === float$5(point.x) && float$5(t.y) === float$5(point.y);
868
+ isSame(t, point, quick) {
869
+ return quick ? t.x === point.x && t.y === point.y : float$5(t.x) === float$5(point.x) && float$5(t.y) === float$5(point.y);
850
870
  },
851
871
  reset(t) {
852
872
  P$7.reset(t);
@@ -918,8 +938,8 @@ var LeaferUI = function(exports) {
918
938
  getAtan2(to) {
919
939
  return PointHelper.getAtan2(this, to);
920
940
  }
921
- isSame(point) {
922
- return PointHelper.isSame(this, point);
941
+ isSame(point, quick) {
942
+ return PointHelper.isSame(this, point, quick);
923
943
  }
924
944
  reset() {
925
945
  PointHelper.reset(this);
@@ -1163,9 +1183,9 @@ var LeaferUI = function(exports) {
1163
1183
  }
1164
1184
  if (!onlyBoxSize) to.x += box.x, to.y += box.y;
1165
1185
  },
1166
- getPoint(around, box, to) {
1186
+ getPoint(around, box, to, onlyBoxSize = true) {
1167
1187
  if (!to) to = {};
1168
- AroundHelper.toPoint(around, box, to, true);
1188
+ AroundHelper.toPoint(around, box, to, onlyBoxSize);
1169
1189
  return to;
1170
1190
  }
1171
1191
  };
@@ -1420,6 +1440,9 @@ var LeaferUI = function(exports) {
1420
1440
  y: y + height
1421
1441
  } ];
1422
1442
  },
1443
+ getPoint(t, around, onlyBoxSize = false, to) {
1444
+ return AroundHelper.getPoint(around, t, to, onlyBoxSize);
1445
+ },
1423
1446
  hitRadiusPoint(t, point, pointMatrix) {
1424
1447
  if (pointMatrix) point = PointHelper.tempToInnerRadiusPointOf(point, pointMatrix);
1425
1448
  return point.x >= t.x - point.radiusX && point.x <= t.x + t.width + point.radiusX && (point.y >= t.y - point.radiusY && point.y <= t.y + t.height + point.radiusY);
@@ -1588,6 +1611,9 @@ var LeaferUI = function(exports) {
1588
1611
  getPoints() {
1589
1612
  return BoundsHelper.getPoints(this);
1590
1613
  }
1614
+ getPoint(around, onlyBoxSize, to) {
1615
+ return BoundsHelper.getPoint(this, around, onlyBoxSize, to);
1616
+ }
1591
1617
  hitPoint(point, pointMatrix) {
1592
1618
  return BoundsHelper.hitPoint(this, point, pointMatrix);
1593
1619
  }
@@ -3861,6 +3887,7 @@ var LeaferUI = function(exports) {
3861
3887
  return image;
3862
3888
  },
3863
3889
  recycle(image) {
3890
+ if (image.parent) image = image.parent;
3864
3891
  image.use--;
3865
3892
  setTimeout(() => {
3866
3893
  if (!image.use) {
@@ -4026,8 +4053,10 @@ var LeaferUI = function(exports) {
4026
4053
  return undefined;
4027
4054
  }
4028
4055
  clearLevels(_checkUse) {}
4056
+ destroyFilter() {}
4029
4057
  destroy() {
4030
4058
  this.clearLevels();
4059
+ this.destroyFilter();
4031
4060
  const {view: view} = this;
4032
4061
  if (view && view.close) view.close();
4033
4062
  this.config = {
@@ -4198,7 +4227,6 @@ var LeaferUI = function(exports) {
4198
4227
  if (this.__setAttr(key, value)) {
4199
4228
  const data = this.__;
4200
4229
  DataHelper.stintSet(data, "__useDim", data.dim || data.bright || data.dimskip);
4201
- this.__layout.surfaceChange();
4202
4230
  }
4203
4231
  }
4204
4232
  }));
@@ -4243,7 +4271,6 @@ var LeaferUI = function(exports) {
4243
4271
  return decorateLeafAttr(defaultValue, key => attr({
4244
4272
  set(value) {
4245
4273
  if (this.__setAttr(key, value)) {
4246
- this.__layout.surfaceChange();
4247
4274
  this.waitParent(() => {
4248
4275
  this.parent.__layout.childrenSortChange();
4249
4276
  });
@@ -4277,7 +4304,6 @@ var LeaferUI = function(exports) {
4277
4304
  set(value) {
4278
4305
  if (this.__setAttr(key, value)) {
4279
4306
  this.__layout.hitCanvasChanged = true;
4280
- if (Debug.showBounds === "hit") this.__layout.surfaceChange();
4281
4307
  if (this.leafer) this.leafer.updateCursor();
4282
4308
  }
4283
4309
  }
@@ -4465,6 +4491,10 @@ var LeaferUI = function(exports) {
4465
4491
  if (layout.stateStyleChanged) leaf.updateState();
4466
4492
  if (layout.opacityChanged) updateAllWorldOpacity(leaf);
4467
4493
  leaf.__updateChange();
4494
+ if (layout.surfaceChanged) {
4495
+ if (leaf.__hasComplex) L$4.updateComplex(leaf);
4496
+ layout.surfaceChanged = false;
4497
+ }
4468
4498
  },
4469
4499
  updateAllChange(leaf) {
4470
4500
  updateChange$1(leaf);
@@ -4489,6 +4519,9 @@ var LeaferUI = function(exports) {
4489
4519
  if (!fromWorld) fromWorld = leaf.__nowWorld;
4490
4520
  if (leaf.__worldFlipped || Platform.fullImageShadow) currentCanvas.copyWorldByReset(fromCanvas, fromWorld, leaf.__nowWorld, blendMode, onlyResetTransform); else currentCanvas.copyWorldToInner(fromCanvas, fromWorld, leaf.__layout.renderBounds, blendMode);
4491
4521
  },
4522
+ renderComplex(_leaf, _canvas, _options) {},
4523
+ updateComplex(_leaf) {},
4524
+ checkComplex(_leaf) {},
4492
4525
  moveWorld(t, x, y = 0, isInnerPoint, transition) {
4493
4526
  const local = isObject(x) ? Object.assign({}, x) : {
4494
4527
  x: x,
@@ -4600,6 +4633,9 @@ var LeaferUI = function(exports) {
4600
4633
  divideParent(matrix$3, relative.scrollWorldTransform);
4601
4634
  return temp ? matrix$3 : Object.assign({}, matrix$3);
4602
4635
  },
4636
+ updateScaleFixedWorld(_t) {},
4637
+ updateOuterBounds(_t) {},
4638
+ cacheId(_t) {},
4603
4639
  drop(t, parent, index, resize) {
4604
4640
  t.setTransform(L$4.getRelativeWorld(t, parent, true), resize);
4605
4641
  parent.add(t, index);
@@ -4646,7 +4682,8 @@ var LeaferUI = function(exports) {
4646
4682
  return target.__.eraser || target.__.visible === 0 ? null : target.__layout.localStrokeBounds;
4647
4683
  },
4648
4684
  localRenderBounds(target) {
4649
- return target.__.eraser || target.__.visible === 0 ? null : target.__layout.localRenderBounds;
4685
+ const {__: __, __layout: __layout} = target;
4686
+ return __.eraser || __.visible === 0 ? null : __layout.localOuterBounds || __layout.localRenderBounds;
4650
4687
  },
4651
4688
  maskLocalBoxBounds(target, index) {
4652
4689
  return checkMask(target, index) && target.__localBoxBounds;
@@ -4655,7 +4692,8 @@ var LeaferUI = function(exports) {
4655
4692
  return checkMask(target, index) && target.__layout.localStrokeBounds;
4656
4693
  },
4657
4694
  maskLocalRenderBounds(target, index) {
4658
- return checkMask(target, index) && target.__layout.localRenderBounds;
4695
+ const {__layout: __layout} = target;
4696
+ return checkMask(target, index) && (__layout.localOuterBounds || __layout.localRenderBounds);
4659
4697
  },
4660
4698
  excludeRenderBounds(child, options) {
4661
4699
  if (options.bounds && !options.bounds.hit(child.__world, options.matrix)) return true;
@@ -4775,11 +4813,11 @@ var LeaferUI = function(exports) {
4775
4813
  w.height *= scaleY;
4776
4814
  w.scaleX *= scaleX;
4777
4815
  w.scaleY *= scaleY;
4778
- if (branch.isBranch) scale$2(branch, x, y, scaleX, scaleY, a, b);
4816
+ if (branch.isBranch) scale$3(branch, x, y, scaleX, scaleY, a, b);
4779
4817
  }
4780
4818
  }
4781
4819
  };
4782
- const {pushAllChildBranch: pushAllChildBranch$1, pushAllBranchStack: pushAllBranchStack, updateBoundsByBranchStack: updateBoundsByBranchStack, move: move$9, scale: scale$2} = BranchHelper;
4820
+ const {pushAllChildBranch: pushAllChildBranch$1, pushAllBranchStack: pushAllBranchStack, updateBoundsByBranchStack: updateBoundsByBranchStack, move: move$9, scale: scale$3} = BranchHelper;
4783
4821
  const WaitHelper = {
4784
4822
  run(wait) {
4785
4823
  if (wait && wait.length) {
@@ -5164,7 +5202,6 @@ var LeaferUI = function(exports) {
5164
5202
  }
5165
5203
  opacityChange() {
5166
5204
  this.opacityChanged = true;
5167
- this.surfaceChanged || this.surfaceChange();
5168
5205
  }
5169
5206
  childrenSortChange() {
5170
5207
  if (!this.childrenSortChanged) {
@@ -5579,6 +5616,7 @@ var LeaferUI = function(exports) {
5579
5616
  const {parent: parent, __layout: __layout, __world: __world, __scrollWorld: __scrollWorld, __: __} = this;
5580
5617
  multiplyParent$2(this.__local || __layout, parent ? parent.__scrollWorld || parent.__world : defaultWorld, __world, !!__layout.affectScaleOrRotation, __);
5581
5618
  if (__scrollWorld) translateInner(Object.assign(__scrollWorld, __world), __.scrollX, __.scrollY);
5619
+ if (__layout.scaleFixed) LeafHelper.updateScaleFixedWorld(this);
5582
5620
  },
5583
5621
  __updateLocalMatrix() {
5584
5622
  if (this.__local) {
@@ -5601,12 +5639,13 @@ var LeaferUI = function(exports) {
5601
5639
  };
5602
5640
  const {updateMatrix: updateMatrix$3, updateAllMatrix: updateAllMatrix$3} = LeafHelper;
5603
5641
  const {updateBounds: updateBounds$2} = BranchHelper;
5604
- const {toOuterOf: toOuterOf$2, copyAndSpread: copyAndSpread$3, copy: copy$6} = BoundsHelper;
5642
+ const {toOuterOf: toOuterOf$2, copyAndSpread: copyAndSpread$4, copy: copy$6} = BoundsHelper;
5605
5643
  const {toBounds: toBounds$1} = PathBounds;
5606
5644
  const LeafBounds = {
5607
5645
  __updateWorldBounds() {
5608
5646
  const {__layout: __layout, __world: __world} = this;
5609
5647
  toOuterOf$2(__layout.renderBounds, __world, __world);
5648
+ if (this.__hasComplex) LeafHelper.checkComplex(this);
5610
5649
  if (__layout.resized) {
5611
5650
  if (__layout.resized === "inner") this.__onUpdateSize();
5612
5651
  if (this.__hasLocalEvent) BoundsEvent.emitLocal(this);
@@ -5656,6 +5695,7 @@ var LeaferUI = function(exports) {
5656
5695
  layout.renderChanged = undefined;
5657
5696
  if (this.parent) this.parent.__layout.renderChange();
5658
5697
  }
5698
+ if (layout.outerScale) LeafHelper.updateOuterBounds(this);
5659
5699
  layout.resized || (layout.resized = "local");
5660
5700
  layout.boundsChanged = undefined;
5661
5701
  },
@@ -5706,11 +5746,11 @@ var LeaferUI = function(exports) {
5706
5746
  },
5707
5747
  __updateStrokeBounds(_bounds) {
5708
5748
  const layout = this.__layout;
5709
- copyAndSpread$3(layout.strokeBounds, layout.boxBounds, layout.strokeBoxSpread);
5749
+ copyAndSpread$4(layout.strokeBounds, layout.boxBounds, layout.strokeBoxSpread);
5710
5750
  },
5711
5751
  __updateRenderBounds(_bounds) {
5712
5752
  const layout = this.__layout, {renderSpread: renderSpread} = layout;
5713
- isNumber(renderSpread) && renderSpread <= 0 ? copy$6(layout.renderBounds, layout.strokeBounds) : copyAndSpread$3(layout.renderBounds, layout.boxBounds, renderSpread);
5753
+ isNumber(renderSpread) && renderSpread <= 0 ? copy$6(layout.renderBounds, layout.strokeBounds) : copyAndSpread$4(layout.renderBounds, layout.boxBounds, renderSpread);
5714
5754
  }
5715
5755
  };
5716
5756
  const LeafRender = {
@@ -5721,7 +5761,7 @@ var LeaferUI = function(exports) {
5721
5761
  const data = this.__;
5722
5762
  if (data.bright && !options.topRendering) return options.topList.add(this);
5723
5763
  canvas.setWorld(this.__nowWorld = this.__getNowWorld(options));
5724
- canvas.opacity = options.dimOpacity && !data.dimskip ? data.opacity * options.dimOpacity : data.opacity;
5764
+ canvas.opacity = options.ignoreOpacity ? 1 : options.dimOpacity && !data.dimskip ? data.opacity * options.dimOpacity : data.opacity;
5725
5765
  if (this.__.__single) {
5726
5766
  if (data.eraser === "path") return this.__renderEraser(canvas, options);
5727
5767
  const tempCanvas = canvas.getSameCanvas(true, true);
@@ -5773,7 +5813,7 @@ var LeaferUI = function(exports) {
5773
5813
  if (data.eraser === "path") return this.__renderEraser(canvas, options);
5774
5814
  const tempCanvas = canvas.getSameCanvas(false, true);
5775
5815
  this.__renderBranch(tempCanvas, options);
5776
- canvas.opacity = options.dimOpacity ? data.opacity * options.dimOpacity : data.opacity;
5816
+ canvas.opacity = options.ignoreOpacity ? 1 : options.dimOpacity ? data.opacity * options.dimOpacity : data.opacity;
5777
5817
  canvas.copyWorldByReset(tempCanvas, nowWorld, nowWorld, data.__blendMode, true);
5778
5818
  tempCanvas.recycle(nowWorld);
5779
5819
  } else {
@@ -5789,7 +5829,7 @@ var LeaferUI = function(exports) {
5789
5829
  const {children: children} = this;
5790
5830
  for (let i = 0, len = children.length; i < len; i++) {
5791
5831
  child = children[i];
5792
- excludeRenderBounds$1(child, options) || (child.__.complex ? child.__renderComplex(canvas, options) : child.__render(canvas, options));
5832
+ excludeRenderBounds$1(child, options) || (child.__hasComplex ? LeafHelper.renderComplex(child, canvas, options) : child.__render(canvas, options));
5793
5833
  }
5794
5834
  }
5795
5835
  },
@@ -5802,12 +5842,12 @@ var LeaferUI = function(exports) {
5802
5842
  }
5803
5843
  }
5804
5844
  };
5805
- const tempScaleData$1 = {};
5806
5845
  const {LEAF: LEAF, create: create} = IncrementId;
5807
- const {stintSet: stintSet$4} = DataHelper;
5846
+ const {stintSet: stintSet$6} = DataHelper;
5808
5847
  const {toInnerPoint: toInnerPoint, toOuterPoint: toOuterPoint, multiplyParent: multiplyParent$1} = MatrixHelper;
5809
5848
  const {toOuterOf: toOuterOf$1} = BoundsHelper;
5810
5849
  const {copy: copy$5, move: move$8} = PointHelper;
5850
+ const {getScaleFixedData: getScaleFixedData$1} = MathHelper;
5811
5851
  const {moveLocal: moveLocal, zoomOfLocal: zoomOfLocal, rotateOfLocal: rotateOfLocal, skewOfLocal: skewOfLocal, moveWorld: moveWorld, zoomOfWorld: zoomOfWorld, rotateOfWorld: rotateOfWorld, skewOfWorld: skewOfWorld, transform: transform, transformWorld: transformWorld, setTransform: setTransform, getFlipTransform: getFlipTransform, getLocalOrigin: getLocalOrigin, getRelativeWorld: getRelativeWorld, drop: drop} = LeafHelper;
5812
5852
  exports.Leaf = class Leaf {
5813
5853
  get tag() {
@@ -5965,6 +6005,7 @@ var LeaferUI = function(exports) {
5965
6005
  this.__level = this.parent ? this.parent.__level + 1 : 1;
5966
6006
  if (this.animation) this.__runAnimation("in");
5967
6007
  if (this.__bubbleMap) this.__emitLifeEvent(ChildEvent.MOUNTED);
6008
+ if (leafer.cacheId) LeafHelper.cacheId(this);
5968
6009
  } else {
5969
6010
  this.__emitLifeEvent(ChildEvent.UNMOUNTED);
5970
6011
  }
@@ -6082,8 +6123,8 @@ var LeaferUI = function(exports) {
6082
6123
  const cameraWorld = this.__cameraWorld, world = this.__world;
6083
6124
  multiplyParent$1(world, options.matrix, cameraWorld, undefined, world);
6084
6125
  toOuterOf$1(this.__layout.renderBounds, cameraWorld, cameraWorld);
6085
- stintSet$4(cameraWorld, "half", world.half);
6086
- stintSet$4(cameraWorld, "ignorePixelSnap", world.ignorePixelSnap);
6126
+ stintSet$6(cameraWorld, "half", world.half);
6127
+ stintSet$6(cameraWorld, "ignorePixelSnap", world.ignorePixelSnap);
6087
6128
  return cameraWorld;
6088
6129
  } else {
6089
6130
  return this.__world;
@@ -6094,13 +6135,8 @@ var LeaferUI = function(exports) {
6094
6135
  if (scaleX < 0) scaleX = -scaleX;
6095
6136
  return scaleX > 1 ? scaleX : 1;
6096
6137
  }
6097
- getRenderScaleData(abs, scaleFixed) {
6098
- let {scaleX: scaleX, scaleY: scaleY} = ImageManager.patternLocked ? this.__world : this.__nowWorld;
6099
- if (abs) scaleX < 0 && (scaleX = -scaleX), scaleY < 0 && (scaleY = -scaleY);
6100
- if (scaleFixed === true || scaleFixed === "zoom-in" && scaleX > 1 && scaleY > 1) scaleX = scaleY = 1;
6101
- tempScaleData$1.scaleX = scaleX;
6102
- tempScaleData$1.scaleY = scaleY;
6103
- return tempScaleData$1;
6138
+ getRenderScaleData(abs, scaleFixed, unscale = true) {
6139
+ return getScaleFixedData$1(ImageManager.patternLocked ? this.__world : this.__nowWorld || this.__world, scaleFixed, unscale, abs);
6104
6140
  }
6105
6141
  getTransform(relative) {
6106
6142
  return this.__layout.getTransform(relative || "local");
@@ -6262,7 +6298,6 @@ var LeaferUI = function(exports) {
6262
6298
  __drawHitPath(_canvas) {}
6263
6299
  __updateHitCanvas() {}
6264
6300
  __render(_canvas, _options) {}
6265
- __renderComplex(_canvas, _options) {}
6266
6301
  __drawFast(_canvas, _options) {}
6267
6302
  __draw(_canvas, _options, _originCanvas) {}
6268
6303
  __clip(_canvas, _options) {}
@@ -6273,7 +6308,7 @@ var LeaferUI = function(exports) {
6273
6308
  __drawPath(_canvas) {}
6274
6309
  __drawRenderPath(_canvas) {}
6275
6310
  __updatePath() {}
6276
- __updateRenderPath() {}
6311
+ __updateRenderPath(_updateCache) {}
6277
6312
  getMotionPathData() {
6278
6313
  return Plugin.need("path");
6279
6314
  }
@@ -6341,9 +6376,11 @@ var LeaferUI = function(exports) {
6341
6376
  return 0;
6342
6377
  }
6343
6378
  __updateRenderSpread() {
6379
+ let layout;
6344
6380
  const {children: children} = this;
6345
6381
  for (let i = 0, len = children.length; i < len; i++) {
6346
- if (children[i].__layout.renderSpread) return 1;
6382
+ layout = children[i].__layout;
6383
+ if (layout.renderSpread || layout.localOuterBounds) return 1;
6347
6384
  }
6348
6385
  return 0;
6349
6386
  }
@@ -6598,7 +6635,7 @@ var LeaferUI = function(exports) {
6598
6635
  this.levelMap = null;
6599
6636
  }
6600
6637
  }
6601
- const version = "2.0.2";
6638
+ const version = "2.0.3";
6602
6639
  class LeaferCanvas extends LeaferCanvasBase {
6603
6640
  get allowBackgroundColor() {
6604
6641
  return true;
@@ -7405,7 +7442,7 @@ var LeaferUI = function(exports) {
7405
7442
  this.config = {};
7406
7443
  if (userConfig) this.config = DataHelper.default(userConfig, this.config);
7407
7444
  this.picker = new Picker(this.target = target, this);
7408
- this.finder = Creator.finder && Creator.finder();
7445
+ this.finder = Creator.finder && Creator.finder(target, this.config);
7409
7446
  }
7410
7447
  getByPoint(hitPoint, hitRadius, options) {
7411
7448
  const {target: target, picker: picker} = this;
@@ -7443,7 +7480,9 @@ var LeaferUI = function(exports) {
7443
7480
  set(value) {
7444
7481
  this.__setAttr(key, value);
7445
7482
  if (value) this.__.__useEffect = true;
7446
- this.__layout.renderChanged || this.__layout.renderChange();
7483
+ const layout = this.__layout;
7484
+ layout.renderChanged || layout.renderChange();
7485
+ layout.surfaceChange();
7447
7486
  }
7448
7487
  }));
7449
7488
  }
@@ -7528,7 +7567,7 @@ var LeaferUI = function(exports) {
7528
7567
  }
7529
7568
  };
7530
7569
  const {parse: parse, objectToCanvasData: objectToCanvasData} = PathConvert;
7531
- const {stintSet: stintSet$3} = DataHelper, {hasTransparent: hasTransparent$2} = ColorConvert;
7570
+ const {stintSet: stintSet$5} = DataHelper, {hasTransparent: hasTransparent$2} = ColorConvert;
7532
7571
  const emptyPaint = {
7533
7572
  originPaint: {}
7534
7573
  };
@@ -7594,7 +7633,7 @@ var LeaferUI = function(exports) {
7594
7633
  setFill(value) {
7595
7634
  if (this.__naturalWidth) this.__removeNaturalSize();
7596
7635
  if (isString(value) || !value) {
7597
- stintSet$3(this, "__isTransparentFill", hasTransparent$2(value));
7636
+ stintSet$5(this, "__isTransparentFill", hasTransparent$2(value));
7598
7637
  this.__isFills && this.__removePaint("fill", true);
7599
7638
  this._fill = value;
7600
7639
  } else if (isObject(value)) {
@@ -7603,7 +7642,7 @@ var LeaferUI = function(exports) {
7603
7642
  }
7604
7643
  setStroke(value) {
7605
7644
  if (isString(value) || !value) {
7606
- stintSet$3(this, "__isTransparentStroke", hasTransparent$2(value));
7645
+ stintSet$5(this, "__isTransparentStroke", hasTransparent$2(value));
7607
7646
  this.__isStrokes && this.__removePaint("stroke", true);
7608
7647
  this._stroke = value;
7609
7648
  } else if (isObject(value)) {
@@ -7636,15 +7675,16 @@ var LeaferUI = function(exports) {
7636
7675
  this.__needComputePaint = undefined;
7637
7676
  }
7638
7677
  __getRealStrokeWidth(childStyle) {
7639
- let {strokeWidth: strokeWidth, strokeWidthFixed: strokeWidthFixed} = this;
7678
+ let {strokeWidth: strokeWidth, strokeScaleFixed: strokeScaleFixed} = this;
7640
7679
  if (childStyle) {
7641
7680
  if (childStyle.strokeWidth) strokeWidth = childStyle.strokeWidth;
7642
- if (!isUndefined(childStyle.strokeWidthFixed)) strokeWidthFixed = childStyle.strokeWidthFixed;
7681
+ if (!isUndefined(childStyle.strokeScaleFixed)) strokeScaleFixed = childStyle.strokeScaleFixed;
7682
+ }
7683
+ if (strokeScaleFixed) {
7684
+ const {scaleX: scaleX} = this.__leaf.getRenderScaleData(true, strokeScaleFixed, false);
7685
+ if (scaleX !== 1) return strokeWidth * scaleX;
7643
7686
  }
7644
- if (strokeWidthFixed) {
7645
- const scale = this.__leaf.getClampRenderScale();
7646
- return scale > 1 ? strokeWidth / scale : strokeWidth;
7647
- } else return strokeWidth;
7687
+ return strokeWidth;
7648
7688
  }
7649
7689
  __setPaint(attrName, value) {
7650
7690
  this.__setInput(attrName, value);
@@ -7661,11 +7701,11 @@ var LeaferUI = function(exports) {
7661
7701
  if (removeInput) this.__removeInput(attrName);
7662
7702
  PaintImage.recycleImage(attrName, this);
7663
7703
  if (attrName === "fill") {
7664
- stintSet$3(this, "__isAlphaPixelFill", undefined);
7704
+ stintSet$5(this, "__isAlphaPixelFill", undefined);
7665
7705
  this._fill = this.__isFills = undefined;
7666
7706
  } else {
7667
- stintSet$3(this, "__isAlphaPixelStroke", undefined);
7668
- stintSet$3(this, "__hasMultiStrokeStyle", undefined);
7707
+ stintSet$5(this, "__isAlphaPixelStroke", undefined);
7708
+ stintSet$5(this, "__hasMultiStrokeStyle", undefined);
7669
7709
  this._stroke = this.__isStrokes = undefined;
7670
7710
  }
7671
7711
  }
@@ -7812,7 +7852,7 @@ var LeaferUI = function(exports) {
7812
7852
  const data = this.__, {strokeAlign: strokeAlign, __maxStrokeWidth: strokeWidth} = data, box = this.__box;
7813
7853
  if ((data.stroke || data.hitStroke === "all") && strokeWidth && strokeAlign !== "inside") {
7814
7854
  boxSpread = spread = strokeAlign === "center" ? strokeWidth / 2 : strokeWidth;
7815
- if (!data.__boxStroke) {
7855
+ if (!data.__boxStroke || data.__useArrow) {
7816
7856
  const miterLimitAddWidth = data.__isLinePath ? 0 : 10 * spread;
7817
7857
  const storkeCapAddWidth = data.strokeCap === "none" ? 0 : strokeWidth;
7818
7858
  spread += Math.max(miterLimitAddWidth, storkeCapAddWidth);
@@ -7841,22 +7881,22 @@ var LeaferUI = function(exports) {
7841
7881
  return box ? max$4(box.__updateRenderSpread(), spread) : spread;
7842
7882
  }
7843
7883
  };
7844
- const {stintSet: stintSet$2} = DataHelper;
7884
+ const {stintSet: stintSet$4} = DataHelper;
7845
7885
  const UIRender = {
7846
7886
  __updateChange() {
7847
7887
  const data = this.__;
7848
7888
  if (data.__useStroke) {
7849
7889
  const useStroke = data.__useStroke = !!(data.stroke && data.strokeWidth);
7850
- stintSet$2(this.__world, "half", useStroke && data.strokeAlign === "center" && data.strokeWidth % 2);
7851
- stintSet$2(data, "__fillAfterStroke", useStroke && data.strokeAlign === "outside" && data.fill && !data.__isTransparentFill);
7890
+ stintSet$4(this.__world, "half", useStroke && data.strokeAlign === "center" && data.strokeWidth % 2);
7891
+ stintSet$4(data, "__fillAfterStroke", useStroke && data.strokeAlign === "outside" && data.fill && !data.__isTransparentFill);
7852
7892
  }
7853
7893
  if (data.__useEffect) {
7854
7894
  const {shadow: shadow, fill: fill, stroke: stroke} = data, otherEffect = data.innerShadow || data.blur || data.backgroundBlur || data.filter;
7855
- stintSet$2(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"));
7895
+ stintSet$4(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"));
7856
7896
  data.__useEffect = !!(shadow || otherEffect);
7857
7897
  }
7858
7898
  data.__checkSingle();
7859
- stintSet$2(data, "__complex", data.__isFills || data.__isStrokes || data.cornerRadius || data.__useEffect);
7899
+ stintSet$4(data, "__complex", data.__isFills || data.__isStrokes || data.cornerRadius || data.__useEffect);
7860
7900
  },
7861
7901
  __drawFast(canvas, options) {
7862
7902
  drawFast(this, canvas, options);
@@ -7963,6 +8003,12 @@ var LeaferUI = function(exports) {
7963
8003
  get isFrame() {
7964
8004
  return false;
7965
8005
  }
8006
+ set strokeWidthFixed(value) {
8007
+ this.strokeScaleFixed = value;
8008
+ }
8009
+ get strokeWidthFixed() {
8010
+ return this.strokeScaleFixed;
8011
+ }
7966
8012
  set scale(value) {
7967
8013
  MathHelper.assignScale(this, value);
7968
8014
  }
@@ -8018,6 +8064,9 @@ var LeaferUI = function(exports) {
8018
8064
  getPathString(curve, pathForRender, floatLength) {
8019
8065
  return PathConvert.stringify(this.getPath(curve, pathForRender), floatLength);
8020
8066
  }
8067
+ asPath(curve, pathForRender) {
8068
+ this.path = this.getPath(curve, pathForRender);
8069
+ }
8021
8070
  load() {
8022
8071
  this.__.__computePaint();
8023
8072
  }
@@ -8027,16 +8076,18 @@ var LeaferUI = function(exports) {
8027
8076
  data.lazy && !this.__inLazyBounds && !Export.running ? data.__needComputePaint = true : data.__computePaint();
8028
8077
  }
8029
8078
  }
8030
- __updateRenderPath() {
8079
+ __updateRenderPath(updateCache) {
8031
8080
  const data = this.__;
8032
8081
  if (data.path) {
8033
8082
  data.__pathForRender = data.cornerRadius ? PathCorner.smooth(data.path, data.cornerRadius, data.cornerSmoothing) : data.path;
8034
- if (data.__useArrow) PathArrow.addArrows(this);
8083
+ if (data.__useArrow) PathArrow.addArrows(this, updateCache);
8035
8084
  } else data.__pathForRender && (data.__pathForRender = undefined);
8036
8085
  }
8037
8086
  __drawRenderPath(canvas) {
8087
+ const data = this.__;
8038
8088
  canvas.beginPath();
8039
- this.__drawPathByData(canvas, this.__.__pathForRender);
8089
+ if (data.__useArrow) PathArrow.updateArrow(this);
8090
+ this.__drawPathByData(canvas, data.__pathForRender);
8040
8091
  }
8041
8092
  __drawPath(canvas) {
8042
8093
  canvas.beginPath();
@@ -8085,6 +8136,7 @@ var LeaferUI = function(exports) {
8085
8136
  static setEditOuter(_toolName) {}
8086
8137
  static setEditInner(_editorName) {}
8087
8138
  destroy() {
8139
+ this.__.__willDestroy = true;
8088
8140
  this.fill = this.stroke = null;
8089
8141
  if (this.__animate) this.killAnimate();
8090
8142
  super.destroy();
@@ -8145,7 +8197,7 @@ var LeaferUI = function(exports) {
8145
8197
  __decorate([ strokeType(undefined, true) ], exports.UI.prototype, "stroke", void 0);
8146
8198
  __decorate([ strokeType("inside") ], exports.UI.prototype, "strokeAlign", void 0);
8147
8199
  __decorate([ strokeType(1, true) ], exports.UI.prototype, "strokeWidth", void 0);
8148
- __decorate([ strokeType(false) ], exports.UI.prototype, "strokeWidthFixed", void 0);
8200
+ __decorate([ strokeType(false) ], exports.UI.prototype, "strokeScaleFixed", void 0);
8149
8201
  __decorate([ strokeType("none") ], exports.UI.prototype, "strokeCap", void 0);
8150
8202
  __decorate([ strokeType("miter") ], exports.UI.prototype, "strokeJoin", void 0);
8151
8203
  __decorate([ strokeType() ], exports.UI.prototype, "dashPattern", void 0);
@@ -8719,9 +8771,9 @@ var LeaferUI = function(exports) {
8719
8771
  return "Ellipse";
8720
8772
  }
8721
8773
  __updatePath() {
8722
- const {width: width, height: height, innerRadius: innerRadius, startAngle: startAngle, endAngle: endAngle} = this.__;
8774
+ const data = this.__, {width: width, height: height, innerRadius: innerRadius, startAngle: startAngle, endAngle: endAngle} = data;
8723
8775
  const rx = width / 2, ry = height / 2;
8724
- const path = this.__.path = [];
8776
+ const path = data.path = [];
8725
8777
  let open;
8726
8778
  if (innerRadius) {
8727
8779
  if (startAngle || endAngle) {
@@ -8743,7 +8795,7 @@ var LeaferUI = function(exports) {
8743
8795
  }
8744
8796
  }
8745
8797
  if (!open) closePath$2(path);
8746
- if (Platform.ellipseToCurve) this.__.path = this.getPath(true);
8798
+ if (Platform.ellipseToCurve || data.__useArrow) data.path = this.getPath(true);
8747
8799
  }
8748
8800
  };
8749
8801
  __decorate([ dataProcessor(EllipseData) ], exports.Ellipse.prototype, "__", void 0);
@@ -8922,7 +8974,7 @@ var LeaferUI = function(exports) {
8922
8974
  __decorate([ dataType(false) ], exports.Canvas.prototype, "safeResize", void 0);
8923
8975
  __decorate([ resizeType() ], exports.Canvas.prototype, "contextSettings", void 0);
8924
8976
  exports.Canvas = __decorate([ registerUI() ], exports.Canvas);
8925
- const {copyAndSpread: copyAndSpread$2, includes: includes, spread: spread, setList: setList} = BoundsHelper, {stintSet: stintSet$1} = DataHelper;
8977
+ const {copyAndSpread: copyAndSpread$3, includes: includes, spread: spread, setList: setList} = BoundsHelper, {stintSet: stintSet$3} = DataHelper;
8926
8978
  exports.Text = class Text extends exports.UI {
8927
8979
  get __tag() {
8928
8980
  return "Text";
@@ -8938,9 +8990,9 @@ var LeaferUI = function(exports) {
8938
8990
  data.__letterSpacing = UnitConvert.number(letterSpacing, fontSize);
8939
8991
  data.__baseLine = data.__lineHeight - (data.__lineHeight - fontSize * .7) / 2;
8940
8992
  data.__font = `${italic ? "italic " : ""}${textCase === "small-caps" ? "small-caps " : ""}${fontWeight !== "normal" ? fontWeight + " " : ""}${fontSize || 12}px ${fontFamily || "caption"}`;
8941
- stintSet$1(data, "__padding", padding && MathHelper.fourNumber(padding));
8942
- stintSet$1(data, "__clipText", textOverflow !== "show" && !data.__autoSize);
8943
- stintSet$1(data, "__isCharMode", width || height || data.__letterSpacing || textCase !== "none");
8993
+ stintSet$3(data, "__padding", padding && MathHelper.fourNumber(padding));
8994
+ stintSet$3(data, "__clipText", textOverflow !== "show" && !data.__autoSize);
8995
+ stintSet$3(data, "__isCharMode", width || height || data.__letterSpacing || textCase !== "none");
8944
8996
  data.__textDrawData = TextConvert.getDrawData((data.__isPlacehold = data.placeholder && data.text === "") ? data.placeholder : data.text, this.__);
8945
8997
  }
8946
8998
  __updateBoxBounds() {
@@ -8975,7 +9027,7 @@ var LeaferUI = function(exports) {
8975
9027
  }
8976
9028
  __updateRenderBounds() {
8977
9029
  const {renderBounds: renderBounds, renderSpread: renderSpread} = this.__layout;
8978
- copyAndSpread$2(renderBounds, this.__.__textBoxBounds, renderSpread);
9030
+ copyAndSpread$3(renderBounds, this.__.__textBoxBounds, renderSpread);
8979
9031
  if (this.__box) this.__box.__layout.renderBounds = renderBounds;
8980
9032
  }
8981
9033
  __updateChange() {
@@ -9199,7 +9251,7 @@ var LeaferUI = function(exports) {
9199
9251
  if (this.viewReady) this.renderer.update();
9200
9252
  }
9201
9253
  __render(canvas, options) {
9202
- if (canvas.context) this.forEach(leafer => options.matrix ? leafer.__render(canvas, options) : canvas.copyWorld(leafer.canvas, options.bounds));
9254
+ if (canvas.context) this.forEach(leafer => options.matrix ? leafer.__render(canvas, options) : canvas.copyWorld(leafer.canvas, options.bounds, undefined, undefined, true));
9203
9255
  }
9204
9256
  __onResize(event) {
9205
9257
  this.forEach(leafer => leafer.resize(event));
@@ -10515,8 +10567,8 @@ var LeaferUI = function(exports) {
10515
10567
  canvas.save();
10516
10568
  if (item.transform) canvas.transform(item.transform);
10517
10569
  if (originPaint.scaleFixed) {
10518
- const {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true);
10519
- if (originPaint.scaleFixed === true || originPaint.scaleFixed === "zoom-in" && scaleX > 1 && scaleY > 1) canvas.scale(1 / scaleX, 1 / scaleY);
10570
+ const {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true, originPaint.scaleFixed, false);
10571
+ if (scaleX !== 1) canvas.scale(scaleX, scaleY);
10520
10572
  }
10521
10573
  if (originPaint.blendMode) canvas.blendMode = originPaint.blendMode;
10522
10574
  fillPathOrText(ui, canvas, renderOptions);
@@ -10674,13 +10726,13 @@ var LeaferUI = function(exports) {
10674
10726
  }
10675
10727
  }
10676
10728
  }
10677
- const {getSpread: getSpread, copyAndSpread: copyAndSpread$1, toOuterOf: toOuterOf, getOuterOf: getOuterOf, getByMove: getByMove, move: move$7, getIntersectData: getIntersectData} = BoundsHelper;
10729
+ const {getSpread: getSpread, copyAndSpread: copyAndSpread$2, toOuterOf: toOuterOf, getOuterOf: getOuterOf, getByMove: getByMove, move: move$7, getIntersectData: getIntersectData} = BoundsHelper;
10678
10730
  const tempBounds$2 = {};
10679
10731
  function shape(ui, current, options) {
10680
10732
  const canvas = current.getSameCanvas();
10681
10733
  const currentBounds = current.bounds, nowWorld = ui.__nowWorld, layout = ui.__layout;
10682
10734
  const nowWorldShapeBounds = ui.__nowWorldShapeBounds || (ui.__nowWorldShapeBounds = {});
10683
- toOuterOf(layout.strokeSpread ? (copyAndSpread$1(tempBounds$2, layout.boxBounds, layout.strokeSpread),
10735
+ toOuterOf(layout.strokeSpread ? (copyAndSpread$2(tempBounds$2, layout.boxBounds, layout.strokeSpread),
10684
10736
  tempBounds$2) : layout.boxBounds, nowWorld, nowWorldShapeBounds);
10685
10737
  let bounds, renderBounds, matrix, fitMatrix, shapeBounds, worldCanvas;
10686
10738
  let {scaleX: scaleX, scaleY: scaleY} = ui.getRenderScaleData(true);
@@ -10734,7 +10786,7 @@ var LeaferUI = function(exports) {
10734
10786
  };
10735
10787
  }
10736
10788
  let recycleMap;
10737
- const {stintSet: stintSet} = DataHelper, {hasTransparent: hasTransparent$1} = ColorConvert;
10789
+ const {stintSet: stintSet$2} = DataHelper, {hasTransparent: hasTransparent$1} = ColorConvert;
10738
10790
  function compute(attrName, ui) {
10739
10791
  const data = ui.__, leafPaints = [];
10740
10792
  let paints = data.__input[attrName], isAlphaPixel, isTransparent;
@@ -10757,12 +10809,12 @@ var LeaferUI = function(exports) {
10757
10809
  isTransparent = true;
10758
10810
  }
10759
10811
  if (attrName === "fill") {
10760
- stintSet(data, "__isAlphaPixelFill", isAlphaPixel);
10761
- stintSet(data, "__isTransparentFill", isTransparent);
10812
+ stintSet$2(data, "__isAlphaPixelFill", isAlphaPixel);
10813
+ stintSet$2(data, "__isTransparentFill", isTransparent);
10762
10814
  } else {
10763
- stintSet(data, "__isAlphaPixelStroke", isAlphaPixel);
10764
- stintSet(data, "__isTransparentStroke", isTransparent);
10765
- stintSet(data, "__hasMultiStrokeStyle", maxChildStrokeWidth);
10815
+ stintSet$2(data, "__isAlphaPixelStroke", isAlphaPixel);
10816
+ stintSet$2(data, "__isTransparentStroke", isTransparent);
10817
+ stintSet$2(data, "__hasMultiStrokeStyle", maxChildStrokeWidth);
10766
10818
  }
10767
10819
  } else {
10768
10820
  data.__removePaint(attrName, false);
@@ -10831,11 +10883,11 @@ var LeaferUI = function(exports) {
10831
10883
  shape: shape
10832
10884
  };
10833
10885
  let cache$1, box$2 = new Bounds;
10834
- const {isSame: isSame} = BoundsHelper;
10886
+ const {isSame: isSame$1} = BoundsHelper;
10835
10887
  function image(ui, attrName, paint, boxBounds, firstUse) {
10836
10888
  let leafPaint, event;
10837
10889
  const image = ImageManager.get(paint, paint.type);
10838
- if (cache$1 && paint === cache$1.paint && isSame(boxBounds, cache$1.boxBounds)) {
10890
+ if (cache$1 && paint === cache$1.paint && isSame$1(boxBounds, cache$1.boxBounds)) {
10839
10891
  leafPaint = cache$1.leafPaint;
10840
10892
  } else {
10841
10893
  leafPaint = {
@@ -10913,6 +10965,7 @@ var LeaferUI = function(exports) {
10913
10965
  const clip = transform && !transform.onlyScale || data.path || data.cornerRadius;
10914
10966
  if (clip || opacity && opacity < 1 || blendMode) leafPaint.complex = clip ? 2 : true;
10915
10967
  }
10968
+ if (paint.filter) PaintImage.applyFilter(leafPaint, image, paint.filter, ui);
10916
10969
  return true;
10917
10970
  }
10918
10971
  function onLoad(ui, event) {
@@ -11099,7 +11152,7 @@ var LeaferUI = function(exports) {
11099
11152
  if (scaleX) scaleHelper(transform, scaleX, scaleY);
11100
11153
  translate(transform, box.x + x, box.y + y);
11101
11154
  }
11102
- const {get: get$1, scale: scale$1, copy: copy$4} = MatrixHelper;
11155
+ const {get: get$1, scale: scale$2, copy: copy$4} = MatrixHelper;
11103
11156
  const {getFloorScale: getFloorScale} = MathHelper, {abs: abs$6} = Math;
11104
11157
  function createPatternTask(paint, ui, canvas, renderOptions) {
11105
11158
  if (!paint.patternTask) {
@@ -11116,7 +11169,7 @@ var LeaferUI = function(exports) {
11116
11169
  let {scaleX: scaleX, scaleY: scaleY} = PaintImage.getImageRenderScaleData(paint, ui, canvas, renderOptions), id = paint.film ? paint.nowIndex : scaleX + "-" + scaleY;
11117
11170
  if (paint.patternId !== id && !ui.destroyed) {
11118
11171
  if (!(Platform.image.isLarge(paint.image, scaleX, scaleY) && !paint.data.repeat)) {
11119
- const {image: image, data: data} = paint, {opacity: opacity, filters: filters} = paint.originPaint, {transform: transform, gap: gap} = data, fixScale = PaintImage.getPatternFixScale(paint, scaleX, scaleY);
11172
+ const {image: image, data: data} = paint, {opacity: opacity} = paint.originPaint, {transform: transform, gap: gap} = data, fixScale = PaintImage.getPatternFixScale(paint, scaleX, scaleY);
11120
11173
  let imageMatrix, xGap, yGap, {width: width, height: height} = image;
11121
11174
  if (fixScale) scaleX *= fixScale, scaleY *= fixScale;
11122
11175
  width *= scaleX;
@@ -11130,9 +11183,9 @@ var LeaferUI = function(exports) {
11130
11183
  scaleY *= getFloorScale(height + (yGap || 0));
11131
11184
  imageMatrix = get$1();
11132
11185
  if (transform) copy$4(imageMatrix, transform);
11133
- scale$1(imageMatrix, 1 / scaleX, 1 / scaleY);
11186
+ scale$2(imageMatrix, 1 / scaleX, 1 / scaleY);
11134
11187
  }
11135
- const imageCanvas = image.getCanvas(width, height, opacity, filters, xGap, yGap, ui.leafer && ui.leafer.config.smooth, data.interlace);
11188
+ const imageCanvas = image.getCanvas(width, height, opacity, undefined, xGap, yGap, ui.leafer && ui.leafer.config.smooth, data.interlace);
11136
11189
  const pattern = image.getPattern(imageCanvas, data.repeat || (Platform.origin.noRepeat || "no-repeat"), imageMatrix, paint);
11137
11190
  paint.style = pattern;
11138
11191
  paint.patternId = id;
@@ -11218,6 +11271,7 @@ var LeaferUI = function(exports) {
11218
11271
  if (!recycleMap) recycleMap = {};
11219
11272
  recycleMap[url] = true;
11220
11273
  ImageManager.recyclePaint(paint);
11274
+ if (data.__willDestroy && image.parent) PaintImage.recycleFilter(image, data.__leaf);
11221
11275
  if (image.loading) {
11222
11276
  if (!input) {
11223
11277
  input = data.__input && data.__input[attrName] || [];
@@ -12073,8 +12127,11 @@ var LeaferUI = function(exports) {
12073
12127
  });
12074
12128
  if (isObject(check)) value = check; else if (check === false) return;
12075
12129
  }
12076
- t.setDimOthers(false);
12077
- t.setBright(false);
12130
+ const {dimOthers: dimOthers, bright: bright} = t.editBox.mergedConfig || t.config;
12131
+ if (!isUndefined(dimOthers) || !isUndefined(bright)) {
12132
+ t.setDimOthers(false);
12133
+ t.setBright(false);
12134
+ }
12078
12135
  if (isArray(value) && value.length > 1 && value[0].locked) value.splice(0, 1);
12079
12136
  if (t.single) {
12080
12137
  delete t.element.syncEventer;
@@ -12098,7 +12155,8 @@ var LeaferUI = function(exports) {
12098
12155
  return (target, key) => {
12099
12156
  defineKey(target, key, {
12100
12157
  get() {
12101
- const {config: config, element: element, dragPoint: dragPoint, editBox: editBox, app: app} = this, mergeConfig = Object.assign({}, config);
12158
+ const {config: config, element: element, dragPoint: dragPoint, editBox: editBox, editTool: editTool, innerEditor: innerEditor, app: app} = this, mergeConfig = Object.assign({}, config);
12159
+ if (innerEditor) innerEditor.editConfig && Object.assign(mergeConfig, innerEditor.editConfig); else if (editTool) editTool.editConfig && Object.assign(mergeConfig, editTool.editConfig);
12102
12160
  if (element && element.editConfig) {
12103
12161
  let {editConfig: editConfig} = element;
12104
12162
  if (editConfig.hover || editConfig.hoverStyle) {
@@ -12976,8 +13034,10 @@ var LeaferUI = function(exports) {
12976
13034
  const {editMask: editMask} = editor;
12977
13035
  const {middlePoint: middlePoint, resizeable: resizeable, rotateable: rotateable, hideOnSmall: hideOnSmall, editBox: editBox, mask: mask, dimOthers: dimOthers, bright: bright, spread: spread, hideRotatePoints: hideRotatePoints, hideResizeLines: hideResizeLines} = mergeConfig;
12978
13036
  editMask.visible = mask ? true : 0;
12979
- editor.setDimOthers(dimOthers);
12980
- editor.setBright(!!dimOthers || bright);
13037
+ if (!isUndefined(dimOthers) || !isUndefined(bright)) {
13038
+ editor.setDimOthers(dimOthers);
13039
+ editor.setBright(!!dimOthers || bright);
13040
+ }
12981
13041
  if (spread) BoundsHelper.spread(bounds, spread);
12982
13042
  if (this.view.worldOpacity) {
12983
13043
  const {width: width, height: height} = bounds;
@@ -12996,7 +13056,8 @@ var LeaferUI = function(exports) {
12996
13056
  resizeL = resizeLines[(i - 1) / 2];
12997
13057
  resizeL.set(point);
12998
13058
  resizeL.visible = resizeP.visible && !hideResizeLines;
12999
- resizeP.visible = rotateP.visible = showPoints && !!middlePoint;
13059
+ if (resizeP.visible) resizeP.visible = !!middlePoint;
13060
+ if (rotateP.visible) rotateP.visible = !!middlePoint;
13000
13061
  if ((i + 1) / 2 % 2) {
13001
13062
  resizeL.width = width + resizeL.height;
13002
13063
  if (hideOnSmall && resizeP.width * 2 > width) resizeP.visible = false;
@@ -15781,7 +15842,7 @@ var LeaferUI = function(exports) {
15781
15842
  __decorate([ arrowType("angle") ], exports.Arrow.prototype, "endArrow", void 0);
15782
15843
  exports.Arrow = __decorate([ registerUI() ], exports.Arrow);
15783
15844
  const {M: M$2, L: L$2, C: C$2, Q: Q$1, O: O$1} = PathCommandMap;
15784
- const {rotate: rotate$1, copyFrom: copyFrom$1, scale: scale} = PointHelper;
15845
+ const {rotate: rotate$1, copyFrom: copyFrom$1, scale: scale$1} = PointHelper;
15785
15846
  const point$1 = {};
15786
15847
  const PathMatrixHelper = {
15787
15848
  layout(data, x, y, scaleX, scaleY, rotation, origin) {
@@ -15825,17 +15886,19 @@ var LeaferUI = function(exports) {
15825
15886
  function setPoint$2(data, startIndex, x, y, scaleX, scaleY, rotation, origin) {
15826
15887
  copyFrom$1(point$1, data[startIndex], data[startIndex + 1]);
15827
15888
  if (rotation) rotate$1(point$1, rotation, origin);
15828
- if (scaleX) scale(point$1, scaleX, scaleY);
15889
+ if (scaleX) scale$1(point$1, scaleX, scaleY);
15829
15890
  data[startIndex] = x + point$1.x;
15830
15891
  data[startIndex + 1] = y + point$1.y;
15831
15892
  }
15832
15893
  const {layout: layout$2, rotate: rotate} = PathMatrixHelper;
15833
15894
  const {getAngle: getAngle} = PointHelper;
15834
- const half = {
15895
+ const zero = {
15896
+ x: 0
15897
+ }, half = {
15835
15898
  x: -.5
15836
15899
  };
15837
15900
  const angle = {
15838
- connect: half,
15901
+ connect: zero,
15839
15902
  offset: {
15840
15903
  x: -.71,
15841
15904
  bevelJoin: .36,
@@ -15853,61 +15916,83 @@ var LeaferUI = function(exports) {
15853
15916
  path: [ 1, -3, -3, 2, 0, 0, 2, -1, 0 ]
15854
15917
  };
15855
15918
  const triangleLinePath = [ 1, -3, 0, 2, -3, -2, 2, 0, 0, 2, -3, 2, 2, -3, 0 ];
15856
- const triangle = {
15857
- connect: half,
15919
+ const triangleFill = {
15920
+ connect: zero,
15858
15921
  offset: {
15859
15922
  x: -.9,
15860
15923
  bevelJoin: .624,
15861
15924
  roundJoin: .4
15862
15925
  },
15863
- path: [ ...triangleLinePath, 1, -2.05, 1.1, 2, -2.05, -1.1 ],
15864
- dashPath: [ 1, -2, 0, 2, -.5, 0 ]
15926
+ path: [ ...triangleLinePath ]
15865
15927
  };
15866
- const arrowLinePath = [ 1, -3, 0, 2, -3.5, -1.8, 2, 0, 0, 2, -3.5, 1.8, 2, -3, 0 ];
15867
- const arrow = {
15868
- connect: half,
15869
- offset: {
15870
- x: -1.1,
15871
- bevelJoin: .872,
15872
- roundJoin: .6
15873
- },
15874
- path: [ ...arrowLinePath, 1, -2.25, .95, 2, -2.25, -.95 ],
15875
- dashPath: [ 1, -3, 0, 2, -.5, 0 ]
15928
+ const triangle = DataHelper.clone(triangleFill);
15929
+ triangle.path = [ ...triangleLinePath, 1, -2.05, 1.1, 2, -2.05, -1.1 ];
15930
+ triangle.dashPath = [ 1, -2, 0, 2, -.5, 0 ];
15931
+ const triangleFlipFill = {
15932
+ connect: zero,
15933
+ offset: half,
15934
+ path: [ ...triangleFill.path ]
15876
15935
  };
15877
15936
  const triangleFlip = {
15937
+ connect: zero,
15878
15938
  offset: half,
15879
15939
  path: [ ...triangle.path ],
15880
15940
  dashPath: [ 1, -2.5, 0, 2, -1, 0 ]
15881
15941
  };
15942
+ rotate(triangleFlipFill.path, 180, {
15943
+ x: -1.5,
15944
+ y: 0
15945
+ });
15882
15946
  rotate(triangleFlip.path, 180, {
15883
15947
  x: -1.5,
15884
15948
  y: 0
15885
15949
  });
15950
+ const arrowLinePath = [ 1, -3, 0, 2, -3.5, -1.8, 2, 0, 0, 2, -3.5, 1.8, 2, -3, 0 ];
15951
+ const arrowFill = {
15952
+ connect: zero,
15953
+ offset: {
15954
+ x: -1.1,
15955
+ bevelJoin: .872,
15956
+ roundJoin: .6
15957
+ },
15958
+ path: [ ...arrowLinePath ]
15959
+ };
15960
+ const arrow = DataHelper.clone(arrowFill);
15961
+ arrow.path = [ ...arrowLinePath, 1, -2.25, .95, 2, -2.25, -.95 ];
15962
+ arrow.dashPath = [ 1, -3, 0, 2, -.5, 0 ];
15886
15963
  const circleLine = {
15887
15964
  connect: {
15888
- x: -1.3
15965
+ x: -1.8
15889
15966
  },
15890
15967
  path: [ 1, 1.8, -.1, 2, 1.8, 0, 26, 0, 0, 1.8, 0, 359, 0 ]
15891
15968
  };
15892
- const circle = {
15969
+ const circleFill = {
15893
15970
  connect: {
15894
15971
  x: .5
15895
15972
  },
15896
- path: [ ...circleLine.path, 1, 0, 0, 26, 0, 0, 1, 0, 360, 0 ],
15897
- dashPath: [ 1, -.5, 0, 2, .5, 0 ]
15973
+ path: [ ...circleLine.path ]
15898
15974
  };
15975
+ const circle = DataHelper.clone(circleFill);
15976
+ circle.path = [ ...circleLine.path, 1, 0, 0, 26, 0, 0, 1, 0, 360, 0 ];
15977
+ circle.dashPath = [ 1, -.5, 0, 2, .5, 0 ];
15899
15978
  const squareLine = {
15900
15979
  connect: {
15901
- x: -1.3
15980
+ x: -1.4
15902
15981
  },
15903
15982
  path: [ 1, -1.4, 0, 2, -1.4, -1.4, 2, 1.4, -1.4, 2, 1.4, 1.4, 2, -1.4, 1.4, 2, -1.4, 0 ]
15904
15983
  };
15984
+ const squareFill = {
15985
+ path: [ ...squareLine.path ]
15986
+ };
15905
15987
  const square = {
15906
15988
  path: [ ...squareLine.path, 2, -1.4, -.49, 2, 1, -.49, 1, -1.4, .49, 2, 1, .49 ]
15907
15989
  };
15908
15990
  const diamondLine = DataHelper.clone(squareLine);
15991
+ diamondLine.connect.x = -1.9;
15992
+ const diamondFill = DataHelper.clone(squareFill);
15909
15993
  const diamond = DataHelper.clone(square);
15910
15994
  rotate(diamondLine.path, 45);
15995
+ rotate(diamondFill.path, 45);
15911
15996
  rotate(diamond.path, 45);
15912
15997
  const mark = {
15913
15998
  offset: half,
@@ -15927,19 +16012,33 @@ var LeaferUI = function(exports) {
15927
16012
  "diamond-line": diamondLine,
15928
16013
  mark: mark
15929
16014
  };
16015
+ const fillArrows = {
16016
+ triangle: triangleFill,
16017
+ "triangle-flip": triangleFlipFill,
16018
+ arrow: arrowFill,
16019
+ circle: circleFill,
16020
+ square: squareFill,
16021
+ diamond: diamondFill
16022
+ };
15930
16023
  function getArrowPath(ui, arrow, from, to, size, connectOffset, hasDashPattern) {
15931
- let pathData, scale;
16024
+ let pathData, scale = 1, rotation = 0, fill;
15932
16025
  const {strokeCap: strokeCap, strokeJoin: strokeJoin} = ui.__;
15933
16026
  if (isObject(arrow)) {
15934
16027
  if (arrow.type) {
15935
- scale = arrow.scale;
16028
+ scale = arrow.scale || 1;
16029
+ rotation = arrow.rotation || 0;
15936
16030
  pathData = arrows[arrow.type];
16031
+ if (scale > 1) {
16032
+ const fillData = fillArrows[arrow.type];
16033
+ if (fillData) pathData = fillData, fill = true;
16034
+ }
15937
16035
  } else pathData = arrow;
15938
16036
  } else {
15939
16037
  pathData = arrows[arrow];
15940
16038
  }
16039
+ if (!fill) fill = pathData.fill;
15941
16040
  const {offset: offset, connect: connect, path: path, dashPath: dashPath} = pathData;
15942
- let connectX = connect ? connect.x : 0;
16041
+ let connectX = connect ? connect.x * scale : 0;
15943
16042
  let offsetX = offset ? offset.x : 0;
15944
16043
  const data = [ ...path ];
15945
16044
  if (hasDashPattern && dashPath) data.push(...dashPath);
@@ -15947,22 +16046,31 @@ var LeaferUI = function(exports) {
15947
16046
  if (offset) {
15948
16047
  if (strokeJoin === "round" && offset.roundJoin) offsetX += offset.roundJoin; else if (strokeJoin === "bevel" && offset.bevelJoin) offsetX += offset.bevelJoin;
15949
16048
  }
15950
- if (scale) layout$2(data, 0, 0, scale, scale);
16049
+ if (scale !== 1) layout$2(data, 0, 0, scale, scale);
15951
16050
  if (offsetX) layout$2(data, offsetX, 0);
15952
- layout$2(data, to.x, to.y, size, size, getAngle(from, to));
16051
+ layout$2(data, to.x, to.y, size, size, getAngle(from, to) + rotation);
15953
16052
  connectOffset.x = (connectX + offsetX) * size;
15954
- return data;
16053
+ const arrowData = {
16054
+ data: data
16055
+ };
16056
+ if (fill) arrowData.fill = fill;
16057
+ return arrowData;
15955
16058
  }
15956
16059
  const {M: M$1, L: L$1, C: C$1, Q: Q, Z: Z$1, N: N, D: D, X: X, G: G, F: F, O: O, P: P, U: U} = PathCommandMap;
15957
- const {copy: copy, copyFrom: copyFrom, getDistancePoint: getDistancePoint} = PointHelper;
16060
+ const {copy: copy, copyFrom: copyFrom, getDistancePoint: getDistancePoint, isSame: isSame} = PointHelper;
16061
+ const {stintSet: stintSet$1} = DataHelper;
15958
16062
  const connectPoint = {};
15959
16063
  const first = {}, second = {};
15960
- const last = {}, now = {};
16064
+ const old = {}, last = {}, now = {};
15961
16065
  const PathArrowModule = {
15962
16066
  list: arrows,
15963
- addArrows(ui) {
15964
- const {startArrow: startArrow, endArrow: endArrow, strokeWidth: strokeWidth, dashPattern: dashPattern, __pathForRender: data, cornerRadius: cornerRadius} = ui.__;
16067
+ fillList: fillArrows,
16068
+ addArrows(ui, updateCache) {
16069
+ const uData = ui.__;
16070
+ const {startArrow: startArrow, endArrow: endArrow, __strokeWidth: strokeWidth, dashPattern: dashPattern, __pathForRender: data, cornerRadius: cornerRadius} = uData;
15965
16071
  const clonePathForArrow = !cornerRadius;
16072
+ if (!updateCache) uData.__strokeWidthCache = strokeWidth;
16073
+ let startArrowPath, singleStartArrow, endArrowPath, singleEndArrow;
15966
16074
  let command, i = 0, len = data.length, count = 0, useStartArrow = startArrow && startArrow !== "none";
15967
16075
  while (i < len) {
15968
16076
  command = data[i];
@@ -15970,6 +16078,7 @@ var LeaferUI = function(exports) {
15970
16078
  case M$1:
15971
16079
  case L$1:
15972
16080
  if (count < 2 || i + 6 >= len) {
16081
+ copy(old, now);
15973
16082
  copyFrom(now, data[i + 1], data[i + 2]);
15974
16083
  if (!count && useStartArrow) copy(first, now);
15975
16084
  }
@@ -15977,12 +16086,18 @@ var LeaferUI = function(exports) {
15977
16086
  break;
15978
16087
 
15979
16088
  case C$1:
15980
- if (count === 1 || i + 7 >= len - 3) copyPoints(data, last, now, i + 3);
16089
+ if (count === 1 || i + 7 >= len - 3) {
16090
+ copyPoints(data, last, now, i + 3);
16091
+ old.x = data[i + 1], old.y = data[i + 2];
16092
+ }
15981
16093
  i += 7;
15982
16094
  break;
15983
16095
 
15984
16096
  case Q:
15985
- if (count === 1 || i + 5 >= len - 3) copyPoints(data, last, now, i + 1);
16097
+ if (count === 1 || i + 5 >= len - 3) {
16098
+ copyPoints(data, last, now, i + 1);
16099
+ copy(old, last);
16100
+ }
15986
16101
  i += 5;
15987
16102
  break;
15988
16103
 
@@ -16020,6 +16135,7 @@ var LeaferUI = function(exports) {
16020
16135
  case U:
16021
16136
  if (count === 1 || i + 6 >= len - 3) {
16022
16137
  copyPoints(data, last, now, i + 1);
16138
+ copy(old, last);
16023
16139
  if (i + 6 !== len) {
16024
16140
  now.x -= (now.x - last.x) / 10;
16025
16141
  now.y -= (now.y - last.y) / 10;
@@ -16030,13 +16146,13 @@ var LeaferUI = function(exports) {
16030
16146
  }
16031
16147
  count++;
16032
16148
  if (count === 1 && command !== M$1) return;
16033
- if (count === 2 && useStartArrow) copy(second, command === L$1 ? now : last);
16149
+ if (count === 2 && useStartArrow) copy(second, command === L$1 ? now : isSame(old, first) ? last : old);
16034
16150
  if (i === len) {
16035
- const path = ui.__.__pathForRender = clonePathForArrow ? [ ...data ] : data;
16036
- const pathForArrow = ui.__.__pathForArrow = [];
16151
+ const path = uData.__pathForRender = clonePathForArrow ? [ ...data ] : data;
16037
16152
  if (useStartArrow) {
16038
- const startArrowPath = getArrowPath(ui, startArrow, second, first, strokeWidth, connectPoint, !!dashPattern);
16039
- dashPattern ? pathForArrow.push(...startArrowPath) : path.push(...startArrowPath);
16153
+ startArrowPath = getArrowPath(ui, startArrow, second, first, strokeWidth, connectPoint, !!dashPattern);
16154
+ singleStartArrow = startArrowPath.fill || dashPattern;
16155
+ if (!singleStartArrow) path.push(...startArrowPath.data);
16040
16156
  if (connectPoint.x) {
16041
16157
  getDistancePoint(first, second, -connectPoint.x, true);
16042
16158
  path[1] = second.x;
@@ -16044,8 +16160,10 @@ var LeaferUI = function(exports) {
16044
16160
  }
16045
16161
  }
16046
16162
  if (endArrow && endArrow !== "none") {
16047
- const endArrowPath = getArrowPath(ui, endArrow, last, now, strokeWidth, connectPoint, !!dashPattern);
16048
- dashPattern ? pathForArrow.push(...endArrowPath) : path.push(...endArrowPath);
16163
+ if (isSame(last, now)) copy(last, old);
16164
+ endArrowPath = getArrowPath(ui, endArrow, last, now, strokeWidth, connectPoint, !!dashPattern);
16165
+ singleEndArrow = endArrowPath.fill || dashPattern;
16166
+ if (!singleEndArrow) path.push(...endArrowPath.data);
16049
16167
  if (connectPoint.x) {
16050
16168
  getDistancePoint(now, last, -connectPoint.x, true);
16051
16169
  let index;
@@ -16072,10 +16190,21 @@ var LeaferUI = function(exports) {
16072
16190
  } else {
16073
16191
  copy(last, now);
16074
16192
  }
16193
+ stintSet$1(uData, "__startArrowPath", singleStartArrow && startArrowPath);
16194
+ stintSet$1(uData, "__endArrowPath", singleEndArrow && endArrowPath);
16195
+ }
16196
+ },
16197
+ updateArrow(ui) {
16198
+ const data = ui.__;
16199
+ if (data.strokeScaleFixed) {
16200
+ if (data.__strokeWidthCache !== data.__strokeWidth) {
16201
+ ui.__updateRenderPath(true);
16202
+ }
16075
16203
  }
16076
16204
  },
16077
- register(name, data) {
16205
+ register(name, data, fillData) {
16078
16206
  this.list[name] = data;
16207
+ if (fillData) this.fillList[name] = data;
16079
16208
  },
16080
16209
  get(name) {
16081
16210
  return this.list[name];
@@ -16094,12 +16223,26 @@ var LeaferUI = function(exports) {
16094
16223
  exports.UI.addAttr("endArrow", "none", arrowType);
16095
16224
  Object.assign(PathArrow, PathArrowModule);
16096
16225
  Object.assign(Paint, {
16097
- strokeArrow(_stroke, ui, canvas, _renderOptions) {
16098
- if (ui.__.dashPattern) {
16226
+ strokeArrow(stroke, ui, canvas, _renderOptions) {
16227
+ const {__startArrowPath: __startArrowPath, __endArrowPath: __endArrowPath, dashPattern: dashPattern} = ui.__;
16228
+ if (dashPattern) canvas.dashPattern = null;
16229
+ if (__startArrowPath) {
16099
16230
  canvas.beginPath();
16100
- ui.__drawPathByData(canvas, ui.__.__pathForArrow);
16101
- canvas.dashPattern = null;
16231
+ ui.__drawPathByData(canvas, __startArrowPath.data);
16102
16232
  canvas.stroke();
16233
+ if (__startArrowPath.fill) {
16234
+ canvas.fillStyle = stroke;
16235
+ canvas.fill();
16236
+ }
16237
+ }
16238
+ if (__endArrowPath) {
16239
+ canvas.beginPath();
16240
+ ui.__drawPathByData(canvas, __endArrowPath.data);
16241
+ canvas.stroke();
16242
+ if (__endArrowPath.fill) {
16243
+ canvas.fillStyle = stroke;
16244
+ canvas.fill();
16245
+ }
16103
16246
  }
16104
16247
  }
16105
16248
  });
@@ -16512,7 +16655,7 @@ var LeaferUI = function(exports) {
16512
16655
  exports.UI.addAttr("autoWidth", undefined, autoBoundsType);
16513
16656
  exports.UI.addAttr("autoHeight", undefined, autoBoundsType);
16514
16657
  exports.UI.addAttr("autoBox", undefined, boundsType);
16515
- const {copyAndSpread: copyAndSpread} = BoundsHelper;
16658
+ const {copyAndSpread: copyAndSpread$1} = BoundsHelper;
16516
16659
  box$1.__updateFlowLayout = function() {
16517
16660
  const {leaferIsCreated: leaferIsCreated, flow: flow} = this;
16518
16661
  if (leaferIsCreated) this.leafer.created = false;
@@ -16542,7 +16685,7 @@ var LeaferUI = function(exports) {
16542
16685
  const same = layout.contentBounds === layout.boxBounds;
16543
16686
  if (padding) {
16544
16687
  if (same) layout.shrinkContent();
16545
- copyAndSpread(layout.contentBounds, layout.boxBounds, padding, true);
16688
+ copyAndSpread$1(layout.contentBounds, layout.boxBounds, padding, true);
16546
16689
  } else {
16547
16690
  if (!same) layout.shrinkContentCancel();
16548
16691
  }
@@ -16563,7 +16706,7 @@ var LeaferUI = function(exports) {
16563
16706
  boxBounds.width = data.width, boxBounds.x = 0;
16564
16707
  }
16565
16708
  }
16566
- flow && secondLayout && data.padding && copyAndSpread(boxBounds, boxBounds, data.padding, false, data.__autoSize ? null : data.__autoWidth ? "width" : "height");
16709
+ flow && secondLayout && data.padding && copyAndSpread$1(boxBounds, boxBounds, data.padding, false, data.__autoSize ? null : data.__autoWidth ? "width" : "height");
16567
16710
  this.__updateNaturalSize();
16568
16711
  } else {
16569
16712
  this.__updateRectBoxBounds();
@@ -18366,9 +18509,7 @@ var LeaferUI = function(exports) {
18366
18509
  const {Yes: Yes, NoAndSkip: NoAndSkip, YesAndSkip: YesAndSkip} = exports.Answer;
18367
18510
  const idCondition = {}, classNameCondition = {}, tagCondition = {};
18368
18511
  class Finder {
18369
- constructor(target) {
18370
- this.innerIdMap = {};
18371
- this.idMap = {};
18512
+ constructor(target, _config) {
18372
18513
  this.methods = {
18373
18514
  id: (leaf, name) => leaf.id === name ? (this.target && (this.idMap[name] = leaf),
18374
18515
  1) : 0,
@@ -18378,6 +18519,13 @@ var LeaferUI = function(exports) {
18378
18519
  tag: (leaf, name) => leaf.__tag === name ? 1 : 0,
18379
18520
  tags: (leaf, nameMap) => nameMap[leaf.__tag] ? 1 : 0
18380
18521
  };
18522
+ this.idMap = {};
18523
+ this.innerIdMap = {};
18524
+ const app = target && target.app;
18525
+ if (app) {
18526
+ app.idMap ? this.idMap = app.idMap : app.idMap = this.idMap;
18527
+ app.innerIdMap ? this.innerIdMap = app.innerIdMap : app.innerIdMap = this.innerIdMap;
18528
+ }
18381
18529
  if (this.target = target) this.__listenEvents();
18382
18530
  }
18383
18531
  getBy(condition, branch, one, options) {
@@ -18498,8 +18646,13 @@ var LeaferUI = function(exports) {
18498
18646
  return getSelector(this).getBy(condition, this, true, options);
18499
18647
  };
18500
18648
  Plugin.add("find");
18501
- Creator.finder = function(target) {
18502
- return new Finder(target);
18649
+ Creator.finder = function(target, config) {
18650
+ return new Finder(target, config);
18651
+ };
18652
+ LeafHelper.cacheId = function(t) {
18653
+ const {leafer: leafer, id: id} = t;
18654
+ if (id) leafer.app.idMap[id] = t;
18655
+ if (leafer.cacheInnerId) leafer.app.innerIdMap[t.innerId] = t;
18503
18656
  };
18504
18657
  const {setPoint: setPoint, addPoint: addPoint, toBounds: toBounds} = TwoPointBoundsHelper;
18505
18658
  function getTrimBounds(canvas) {
@@ -18771,7 +18924,7 @@ var LeaferUI = function(exports) {
18771
18924
  style: {
18772
18925
  dragBoundsType: "outer",
18773
18926
  strokeAlign: "center",
18774
- strokeWidthFixed: "zoom-in",
18927
+ strokeScaleFixed: "zoom-in",
18775
18928
  width: 6,
18776
18929
  height: 6,
18777
18930
  opacity: .5,
@@ -19008,6 +19161,41 @@ var LeaferUI = function(exports) {
19008
19161
  fill: "white"
19009
19162
  }
19010
19163
  });
19164
+ const {stintSet: stintSet} = DataHelper;
19165
+ function scaleFixedType(defaultValue) {
19166
+ return decorateLeafAttr(defaultValue, key => attr({
19167
+ set(value) {
19168
+ if (this.__setAttr(key, value)) {
19169
+ const layout = this.__layout;
19170
+ doBoundsType(this);
19171
+ if (!isNumber(value)) value = value ? 1 : 0;
19172
+ stintSet(layout, "scaleFixed", value);
19173
+ stintSet(layout, "outerScale", value ? 1 / value : 0);
19174
+ if (!layout.outerScale && layout.localOuterBounds) layout.localOuterBounds = undefined;
19175
+ }
19176
+ }
19177
+ }));
19178
+ }
19179
+ const {scale: scale} = MatrixHelper;
19180
+ const {copyAndSpread: copyAndSpread} = BoundsHelper;
19181
+ const {getScaleFixedData: getScaleFixedData} = MathHelper;
19182
+ LeafHelper.updateScaleFixedWorld = function(t) {
19183
+ const {__world: __world, __: __} = t, {scaleX: scaleX, scaleY: scaleY} = getScaleFixedData(__world, __.scaleFixed);
19184
+ if (scaleX !== 1) {
19185
+ scale(__world, scaleX, scaleY);
19186
+ __world.scaleX *= scaleX, __world.scaleY *= scaleY;
19187
+ }
19188
+ };
19189
+ LeafHelper.updateOuterBounds = function(t) {
19190
+ const layout = t.__layout, {localRenderBounds: localRenderBounds} = layout;
19191
+ const localOuterBounds = layout.localOuterBounds || (layout.localOuterBounds = {});
19192
+ const {width: width, height: height} = localRenderBounds;
19193
+ const scale = layout.outerScale - 1;
19194
+ copyAndSpread(localOuterBounds, localRenderBounds, [ height * scale, width * scale ]);
19195
+ if (t.parent) t.parent.__layout.renderChange();
19196
+ };
19197
+ Plugin.add("scale-fixed");
19198
+ exports.UI.addAttr("scaleFixed", undefined, scaleFixedType);
19011
19199
  exports.AlignHelper = AlignHelper;
19012
19200
  exports.AnimateEasing = AnimateEasing;
19013
19201
  exports.AnimateEvent = AnimateEvent;