@leafer-ui/worker 1.2.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/worker.js CHANGED
@@ -768,8 +768,8 @@ var LeaferUI = (function (exports) {
768
768
  t.maxY = y > t.maxY ? y : t.maxY;
769
769
  },
770
770
  addBounds(t, x, y, width, height) {
771
- addPoint$4(t, x, y);
772
- addPoint$4(t, x + width, y + height);
771
+ addPoint$3(t, x, y);
772
+ addPoint$3(t, x + width, y + height);
773
773
  },
774
774
  copy(t, pb) {
775
775
  t.minX = pb.minX;
@@ -790,9 +790,9 @@ var LeaferUI = (function (exports) {
790
790
  setBounds.height = t.maxY - t.minY;
791
791
  }
792
792
  };
793
- const { addPoint: addPoint$4 } = TwoPointBoundsHelper;
793
+ const { addPoint: addPoint$3 } = TwoPointBoundsHelper;
794
794
 
795
- const { tempPointBounds: tempPointBounds$1, setPoint: setPoint$3, addPoint: addPoint$3, toBounds: toBounds$4 } = TwoPointBoundsHelper;
795
+ const { tempPointBounds: tempPointBounds$1, setPoint: setPoint$2, addPoint: addPoint$2, toBounds: toBounds$3 } = TwoPointBoundsHelper;
796
796
  const { toOuterPoint: toOuterPoint$2 } = MatrixHelper;
797
797
  const { float, fourNumber } = MathHelper;
798
798
  const { floor, ceil: ceil$2 } = Math;
@@ -908,17 +908,17 @@ var LeaferUI = (function (exports) {
908
908
  point.x = t.x;
909
909
  point.y = t.y;
910
910
  toOuterPoint$2(matrix, point, toPoint$5);
911
- setPoint$3(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
911
+ setPoint$2(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
912
912
  point.x = t.x + t.width;
913
913
  toOuterPoint$2(matrix, point, toPoint$5);
914
- addPoint$3(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
914
+ addPoint$2(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
915
915
  point.y = t.y + t.height;
916
916
  toOuterPoint$2(matrix, point, toPoint$5);
917
- addPoint$3(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
917
+ addPoint$2(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
918
918
  point.x = t.x;
919
919
  toOuterPoint$2(matrix, point, toPoint$5);
920
- addPoint$3(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
921
- toBounds$4(tempPointBounds$1, to);
920
+ addPoint$2(tempPointBounds$1, toPoint$5.x, toPoint$5.y);
921
+ toBounds$3(tempPointBounds$1, to);
922
922
  }
923
923
  },
924
924
  toInnerOf(t, matrix, to) {
@@ -1008,8 +1008,8 @@ var LeaferUI = (function (exports) {
1008
1008
  B.reset(t);
1009
1009
  },
1010
1010
  setPoints(t, points) {
1011
- points.forEach((point, index) => index === 0 ? setPoint$3(tempPointBounds$1, point.x, point.y) : addPoint$3(tempPointBounds$1, point.x, point.y));
1012
- toBounds$4(tempPointBounds$1, t);
1011
+ points.forEach((point, index) => index === 0 ? setPoint$2(tempPointBounds$1, point.x, point.y) : addPoint$2(tempPointBounds$1, point.x, point.y));
1012
+ toBounds$3(tempPointBounds$1, t);
1013
1013
  },
1014
1014
  setPoint(t, point) {
1015
1015
  B.set(t, point.x, point.y);
@@ -1377,7 +1377,7 @@ var LeaferUI = (function (exports) {
1377
1377
  }
1378
1378
  const D$4 = Debug;
1379
1379
 
1380
- const debug$f = Debug.get('RunTime');
1380
+ const debug$e = Debug.get('RunTime');
1381
1381
  const Run = {
1382
1382
  currentId: 0,
1383
1383
  currentName: '',
@@ -1395,7 +1395,7 @@ var LeaferUI = (function (exports) {
1395
1395
  const time = R.idMap[id], name = R.nameMap[id];
1396
1396
  const duration = microsecond ? (performance.now() - time) / 1000 : Date.now() - time;
1397
1397
  R.idMap[id] = R.nameMap[id] = R.nameToIdMap[name] = undefined;
1398
- debug$f.log(name, duration, 'ms');
1398
+ debug$e.log(name, duration, 'ms');
1399
1399
  },
1400
1400
  endOfName(name, microsecond) {
1401
1401
  const id = R.nameToIdMap[name];
@@ -1405,34 +1405,37 @@ var LeaferUI = (function (exports) {
1405
1405
  };
1406
1406
  const R = Run;
1407
1407
 
1408
+ const check = [];
1408
1409
  const Plugin = {
1409
1410
  list: {},
1410
- add(name) {
1411
+ add(name, ...needPlugins) {
1411
1412
  this.list[name] = true;
1413
+ check.push(...needPlugins);
1412
1414
  },
1413
- check(name, tip) {
1415
+ has(name, tip) {
1414
1416
  const rs = this.list[name];
1415
1417
  if (!rs && tip)
1416
1418
  this.need(name);
1417
1419
  return rs;
1418
1420
  },
1419
1421
  need(name) {
1420
- console.error('need plugin: @leafer-in/' + name);
1422
+ console.error('need plugin: ' + (name.includes('-x') ? '' : '@leafer-in/') + name);
1421
1423
  }
1422
1424
  };
1425
+ setTimeout(() => check.forEach(name => Plugin.has(name, true)));
1423
1426
 
1424
- const debug$e = Debug.get('UICreator');
1427
+ const debug$d = Debug.get('UICreator');
1425
1428
  const UICreator = {
1426
1429
  list: {},
1427
1430
  register(UI) {
1428
1431
  const { __tag: tag } = UI.prototype;
1429
1432
  if (list$1[tag])
1430
- debug$e.repeat(tag);
1433
+ debug$d.repeat(tag);
1431
1434
  list$1[tag] = UI;
1432
1435
  },
1433
1436
  get(tag, data, x, y, width, height) {
1434
1437
  if (!list$1[tag])
1435
- debug$e.error('not register ' + tag);
1438
+ debug$d.error('not register ' + tag);
1436
1439
  const ui = new list$1[tag](data);
1437
1440
  if (x !== undefined) {
1438
1441
  ui.x = x;
@@ -1448,7 +1451,7 @@ var LeaferUI = (function (exports) {
1448
1451
  };
1449
1452
  const { list: list$1 } = UICreator;
1450
1453
 
1451
- const debug$d = Debug.get('EventCreator');
1454
+ const debug$c = Debug.get('EventCreator');
1452
1455
  const EventCreator = {
1453
1456
  nameList: {},
1454
1457
  register(Event) {
@@ -1456,7 +1459,7 @@ var LeaferUI = (function (exports) {
1456
1459
  Object.keys(Event).forEach(key => {
1457
1460
  name = Event[key];
1458
1461
  if (typeof name === 'string')
1459
- nameList[name] && debug$d.repeat(name), nameList[name] = Event;
1462
+ nameList[name] && debug$c.repeat(name), nameList[name] = Event;
1460
1463
  });
1461
1464
  },
1462
1465
  changeName(oldName, newName) {
@@ -2050,11 +2053,11 @@ var LeaferUI = (function (exports) {
2050
2053
  toBlob(_type, _quality) { return undefined; }
2051
2054
  toDataURL(_type, _quality) { return undefined; }
2052
2055
  saveAs(_filename, _quality) { return undefined; }
2053
- resize(size) {
2056
+ resize(size, safeResize = true) {
2054
2057
  if (this.isSameSize(size))
2055
2058
  return;
2056
2059
  let takeCanvas;
2057
- if (this.context && !this.unreal && this.width) {
2060
+ if (this.context && !this.unreal && safeResize && this.width) {
2058
2061
  takeCanvas = this.getSameCanvas();
2059
2062
  takeCanvas.copyWorld(this);
2060
2063
  }
@@ -2345,7 +2348,7 @@ var LeaferUI = (function (exports) {
2345
2348
  };
2346
2349
 
2347
2350
  const { sin: sin$3, cos: cos$3, atan2: atan2$1, ceil: ceil$1, abs: abs$3, PI: PI$2, sqrt: sqrt$1, pow } = Math;
2348
- const { setPoint: setPoint$2, addPoint: addPoint$2 } = TwoPointBoundsHelper;
2351
+ const { setPoint: setPoint$1, addPoint: addPoint$1 } = TwoPointBoundsHelper;
2349
2352
  const { set, toNumberPoints } = PointHelper;
2350
2353
  const { M: M$5, L: L$6, C: C$5, Q: Q$4, Z: Z$5 } = PathCommandMap;
2351
2354
  const tempPoint$2 = {};
@@ -2421,8 +2424,8 @@ var LeaferUI = (function (exports) {
2421
2424
  if (data)
2422
2425
  data.push(L$6, x1, y1);
2423
2426
  if (setPointBounds) {
2424
- setPoint$2(setPointBounds, fromX, fromY);
2425
- addPoint$2(setPointBounds, x1, y1);
2427
+ setPoint$1(setPointBounds, fromX, fromY);
2428
+ addPoint$1(setPointBounds, x1, y1);
2426
2429
  }
2427
2430
  if (setStartPoint)
2428
2431
  set(setStartPoint, fromX, fromY);
@@ -2474,7 +2477,7 @@ var LeaferUI = (function (exports) {
2474
2477
  if (data)
2475
2478
  data.push(data.length ? L$6 : M$5, fromX, fromY);
2476
2479
  if (setPointBounds)
2477
- setPoint$2(setPointBounds, fromX, fromY);
2480
+ setPoint$1(setPointBounds, fromX, fromY);
2478
2481
  if (setStartPoint)
2479
2482
  set(setStartPoint, fromX, fromY);
2480
2483
  for (let i = 0; i < parts; i++) {
@@ -2536,11 +2539,11 @@ var LeaferUI = (function (exports) {
2536
2539
  if (0 < t2 && t2 < 1)
2537
2540
  tList.push(t2);
2538
2541
  }
2539
- addMode ? addPoint$2(pointBounds, fromX, fromY) : setPoint$2(pointBounds, fromX, fromY);
2540
- addPoint$2(pointBounds, toX, toY);
2542
+ addMode ? addPoint$1(pointBounds, fromX, fromY) : setPoint$1(pointBounds, fromX, fromY);
2543
+ addPoint$1(pointBounds, toX, toY);
2541
2544
  for (let i = 0, len = tList.length; i < len; i++) {
2542
2545
  getPointAndSet(tList[i], fromX, fromY, x1, y1, x2, y2, toX, toY, tempPoint$2);
2543
- addPoint$2(pointBounds, tempPoint$2.x, tempPoint$2.y);
2546
+ addPoint$1(pointBounds, tempPoint$2.x, tempPoint$2.y);
2544
2547
  }
2545
2548
  },
2546
2549
  getPointAndSet(t, fromX, fromY, x1, y1, x2, y2, toX, toY, setPoint) {
@@ -2612,7 +2615,7 @@ var LeaferUI = (function (exports) {
2612
2615
  const { M: M$4, m, L: L$5, l, H, h, V, v, C: C$4, c, S, s, Q: Q$3, q, T, t, A, a, Z: Z$4, z, N: N$3, D: D$3, X: X$3, G: G$3, F: F$4, O: O$3, P: P$3, U: U$3 } = PathCommandMap;
2613
2616
  const { rect: rect$3, roundRect: roundRect$2, arcTo: arcTo$3, arc: arc$3, ellipse: ellipse$4, quadraticCurveTo: quadraticCurveTo$1 } = BezierHelper;
2614
2617
  const { ellipticalArc } = EllipseHelper;
2615
- const debug$c = Debug.get('PathConvert');
2618
+ const debug$b = Debug.get('PathConvert');
2616
2619
  const setEndPoint$1 = {};
2617
2620
  const PathConvert = {
2618
2621
  current: { dot: 0 },
@@ -2853,7 +2856,7 @@ var LeaferUI = (function (exports) {
2853
2856
  i += 6;
2854
2857
  break;
2855
2858
  default:
2856
- debug$c.error(`command: ${command} [index:${i}]`, old);
2859
+ debug$b.error(`command: ${command} [index:${i}]`, old);
2857
2860
  return data;
2858
2861
  }
2859
2862
  lastCommand = command;
@@ -3078,7 +3081,7 @@ var LeaferUI = (function (exports) {
3078
3081
  }
3079
3082
 
3080
3083
  const { M: M$2, L: L$3, C: C$2, Q: Q$1, Z: Z$2, N: N$1, D: D$1, X: X$1, G: G$1, F: F$2, O: O$1, P: P$1, U: U$1 } = PathCommandMap;
3081
- const debug$b = Debug.get('PathDrawer');
3084
+ const debug$a = Debug.get('PathDrawer');
3082
3085
  const PathDrawer = {
3083
3086
  drawPathByData(drawer, data) {
3084
3087
  if (!data)
@@ -3141,7 +3144,7 @@ var LeaferUI = (function (exports) {
3141
3144
  i += 6;
3142
3145
  break;
3143
3146
  default:
3144
- debug$b.error(`command: ${command} [index:${i}]`, data);
3147
+ debug$a.error(`command: ${command} [index:${i}]`, data);
3145
3148
  return;
3146
3149
  }
3147
3150
  }
@@ -3150,8 +3153,8 @@ var LeaferUI = (function (exports) {
3150
3153
 
3151
3154
  const { M: M$1, L: L$2, C: C$1, Q, Z: Z$1, N, D, X, G, F: F$1, O, P, U } = PathCommandMap;
3152
3155
  const { toTwoPointBounds, toTwoPointBoundsByQuadraticCurve, arcTo: arcTo$1, arc, ellipse: ellipse$1 } = BezierHelper;
3153
- const { addPointBounds, copy: copy$8, addPoint: addPoint$1, setPoint: setPoint$1, addBounds, toBounds: toBounds$3 } = TwoPointBoundsHelper;
3154
- const debug$a = Debug.get('PathBounds');
3156
+ const { addPointBounds, copy: copy$8, addPoint, setPoint, addBounds, toBounds: toBounds$2 } = TwoPointBoundsHelper;
3157
+ const debug$9 = Debug.get('PathBounds');
3155
3158
  let radius, radiusX, radiusY;
3156
3159
  const tempPointBounds = {};
3157
3160
  const setPointBounds = {};
@@ -3159,21 +3162,21 @@ var LeaferUI = (function (exports) {
3159
3162
  const PathBounds = {
3160
3163
  toBounds(data, setBounds) {
3161
3164
  PathBounds.toTwoPointBounds(data, setPointBounds);
3162
- toBounds$3(setPointBounds, setBounds);
3165
+ toBounds$2(setPointBounds, setBounds);
3163
3166
  },
3164
3167
  toTwoPointBounds(data, setPointBounds) {
3165
3168
  if (!data || !data.length)
3166
- return setPoint$1(setPointBounds, 0, 0);
3169
+ return setPoint(setPointBounds, 0, 0);
3167
3170
  let i = 0, x = 0, y = 0, x1, y1, toX, toY, command;
3168
3171
  const len = data.length;
3169
3172
  while (i < len) {
3170
3173
  command = data[i];
3171
3174
  if (i === 0) {
3172
3175
  if (command === Z$1 || command === C$1 || command === Q) {
3173
- setPoint$1(setPointBounds, x, y);
3176
+ setPoint(setPointBounds, x, y);
3174
3177
  }
3175
3178
  else {
3176
- setPoint$1(setPointBounds, data[i + 1], data[i + 2]);
3179
+ setPoint(setPointBounds, data[i + 1], data[i + 2]);
3177
3180
  }
3178
3181
  }
3179
3182
  switch (command) {
@@ -3181,7 +3184,7 @@ var LeaferUI = (function (exports) {
3181
3184
  case L$2:
3182
3185
  x = data[i + 1];
3183
3186
  y = data[i + 2];
3184
- addPoint$1(setPointBounds, x, y);
3187
+ addPoint(setPointBounds, x, y);
3185
3188
  i += 3;
3186
3189
  break;
3187
3190
  case C$1:
@@ -3259,7 +3262,7 @@ var LeaferUI = (function (exports) {
3259
3262
  i += 6;
3260
3263
  break;
3261
3264
  default:
3262
- debug$a.error(`command: ${command} [index:${i}]`, data);
3265
+ debug$9.error(`command: ${command} [index:${i}]`, data);
3263
3266
  return;
3264
3267
  }
3265
3268
  }
@@ -3375,7 +3378,7 @@ var LeaferUI = (function (exports) {
3375
3378
  const F = FileHelper;
3376
3379
  F.opacityTypes.forEach(type => F.upperCaseTypeMap[type] = type.toUpperCase());
3377
3380
 
3378
- const debug$9 = Debug.get('TaskProcessor');
3381
+ const debug$8 = Debug.get('TaskProcessor');
3379
3382
  class TaskItem {
3380
3383
  constructor(task) {
3381
3384
  this.parallel = true;
@@ -3390,7 +3393,7 @@ var LeaferUI = (function (exports) {
3390
3393
  yield this.task();
3391
3394
  }
3392
3395
  catch (error) {
3393
- debug$9.error(error);
3396
+ debug$8.error(error);
3394
3397
  }
3395
3398
  });
3396
3399
  }
@@ -4077,7 +4080,7 @@ var LeaferUI = (function (exports) {
4077
4080
  defineKey(data, key, property);
4078
4081
  }
4079
4082
 
4080
- const debug$8 = new Debug('rewrite');
4083
+ const debug$7 = new Debug('rewrite');
4081
4084
  const list = [];
4082
4085
  const excludeNames = ['destroy', 'constructor'];
4083
4086
  function rewrite(method) {
@@ -4094,7 +4097,7 @@ var LeaferUI = (function (exports) {
4094
4097
  if (list.length) {
4095
4098
  list.forEach(item => {
4096
4099
  if (error)
4097
- debug$8.error(item.name, '需在Class上装饰@rewriteAble()');
4100
+ debug$7.error(item.name, '需在Class上装饰@rewriteAble()');
4098
4101
  item.run();
4099
4102
  });
4100
4103
  list.length = 0;
@@ -4256,18 +4259,21 @@ var LeaferUI = (function (exports) {
4256
4259
  L.setTransform(t, matrix$1, resize);
4257
4260
  },
4258
4261
  setTransform(t, transform, resize) {
4259
- const layout = getLayout(transform, t.origin && L.getInnerOrigin(t, t.origin), t.around && L.getInnerOrigin(t, t.around));
4262
+ const data = t.__, originPoint = data.origin && L.getInnerOrigin(t, data.origin);
4263
+ const layout = getLayout(transform, originPoint, data.around && L.getInnerOrigin(t, data.around));
4260
4264
  if (resize) {
4261
- const scaleX = layout.scaleX / t.scaleX;
4262
- const scaleY = layout.scaleY / t.scaleY;
4263
- delete layout.scaleX;
4264
- delete layout.scaleY;
4265
+ const scaleX = layout.scaleX / t.scaleX, scaleY = layout.scaleY / t.scaleY;
4266
+ delete layout.scaleX, delete layout.scaleY;
4267
+ if (originPoint) {
4268
+ BoundsHelper.scale(t.boxBounds, Math.abs(scaleX), Math.abs(scaleY));
4269
+ const changedPoint = L.getInnerOrigin(t, data.origin);
4270
+ PointHelper.move(layout, originPoint.x - changedPoint.x, originPoint.y - changedPoint.y);
4271
+ }
4265
4272
  t.set(layout);
4266
- t.scaleResize(scaleX, scaleY, resize !== true);
4273
+ t.scaleResize(scaleX, scaleY, false);
4267
4274
  }
4268
- else {
4275
+ else
4269
4276
  t.set(layout);
4270
- }
4271
4277
  },
4272
4278
  getFlipTransform(t, axis) {
4273
4279
  const m = getMatrixData();
@@ -4808,7 +4814,6 @@ var LeaferUI = (function (exports) {
4808
4814
  }
4809
4815
  }
4810
4816
  }
4811
- LayoutEvent.CHECK_UPDATE = 'layout.check_update';
4812
4817
  LayoutEvent.REQUEST = 'layout.request';
4813
4818
  LayoutEvent.START = 'layout.start';
4814
4819
  LayoutEvent.BEFORE = 'layout.before';
@@ -4950,14 +4955,15 @@ var LeaferUI = (function (exports) {
4950
4955
  if (list) {
4951
4956
  let item;
4952
4957
  for (let i = 0, len = list.length; i < len; i++) {
4953
- item = list[i];
4954
- item.listener(event);
4955
- if (item.once) {
4956
- this.off(type, item.listener, capture);
4957
- i--, len--;
4958
+ if (item = list[i]) {
4959
+ item.listener(event);
4960
+ if (item.once) {
4961
+ this.off(type, item.listener, capture);
4962
+ i--, len--;
4963
+ }
4964
+ if (event && event.isStopNow)
4965
+ break;
4958
4966
  }
4959
- if (event && event.isStopNow)
4960
- break;
4961
4967
  }
4962
4968
  }
4963
4969
  this.syncEventer && this.syncEventer.emitEvent(event, capture);
@@ -5002,13 +5008,13 @@ var LeaferUI = (function (exports) {
5002
5008
  const LeafEventer = { on, on_, off, off_, once, emit: emit$2, emitEvent: emitEvent$1, hasEvent, destroyEventer: destroy };
5003
5009
 
5004
5010
  const { isFinite } = Number;
5005
- const debug$7 = Debug.get('setAttr');
5011
+ const debug$6 = Debug.get('setAttr');
5006
5012
  const LeafDataProxy = {
5007
5013
  __setAttr(name, newValue, checkFiniteNumber) {
5008
5014
  if (this.leaferIsCreated) {
5009
5015
  const oldValue = this.__.__getInput(name);
5010
5016
  if (checkFiniteNumber && !isFinite(newValue) && newValue !== undefined) {
5011
- debug$7.warn(this.innerName, name, newValue);
5017
+ debug$6.warn(this.innerName, name, newValue);
5012
5018
  newValue = undefined;
5013
5019
  }
5014
5020
  if (typeof newValue === 'object' || oldValue !== newValue) {
@@ -5078,7 +5084,7 @@ var LeaferUI = (function (exports) {
5078
5084
  const { updateMatrix: updateMatrix$1, updateAllMatrix: updateAllMatrix$2 } = LeafHelper;
5079
5085
  const { updateBounds: updateBounds$1 } = BranchHelper;
5080
5086
  const { toOuterOf: toOuterOf$1, copyAndSpread: copyAndSpread$1, copy: copy$5 } = BoundsHelper;
5081
- const { toBounds: toBounds$2 } = PathBounds;
5087
+ const { toBounds: toBounds$1 } = PathBounds;
5082
5088
  const LeafBounds = {
5083
5089
  __updateWorldBounds() {
5084
5090
  toOuterOf$1(this.__layout.renderBounds, this.__world, this.__world);
@@ -5160,7 +5166,7 @@ var LeaferUI = (function (exports) {
5160
5166
  const b = this.__layout.boxBounds;
5161
5167
  const data = this.__;
5162
5168
  if (data.__pathInputed) {
5163
- toBounds$2(data.path, b);
5169
+ toBounds$1(data.path, b);
5164
5170
  }
5165
5171
  else {
5166
5172
  b.x = 0;
@@ -5708,7 +5714,7 @@ var LeaferUI = (function (exports) {
5708
5714
  const { setListWithFn } = BoundsHelper;
5709
5715
  const { sort } = BranchHelper;
5710
5716
  const { localBoxBounds, localStrokeBounds, localRenderBounds, maskLocalBoxBounds, maskLocalStrokeBounds, maskLocalRenderBounds } = LeafBoundsHelper;
5711
- const debug$6 = new Debug('Branch');
5717
+ const debug$5 = new Debug('Branch');
5712
5718
  exports.Branch = class Branch extends exports.Leaf {
5713
5719
  __updateStrokeSpread() {
5714
5720
  const { children } = this;
@@ -5750,7 +5756,7 @@ var LeaferUI = (function (exports) {
5750
5756
  }
5751
5757
  add(child, index) {
5752
5758
  if (child === this || child.destroyed)
5753
- return debug$6.warn('add self or destroyed');
5759
+ return debug$5.warn('add self or destroyed');
5754
5760
  const noIndex = index === undefined;
5755
5761
  if (!child.__) {
5756
5762
  if (child instanceof Array)
@@ -6004,7 +6010,7 @@ var LeaferUI = (function (exports) {
6004
6010
  }
6005
6011
  }
6006
6012
 
6007
- const version = "1.2.1";
6013
+ const version = "1.3.0";
6008
6014
 
6009
6015
  class LeaferCanvas extends LeaferCanvasBase {
6010
6016
  get allowBackgroundColor() { return true; }
@@ -6072,6 +6078,7 @@ var LeaferUI = (function (exports) {
6072
6078
  }
6073
6079
  Platform.name = 'web';
6074
6080
  Platform.isWorker = true;
6081
+ Platform.backgrounder = true;
6075
6082
  Platform.requestRender = function (render) { requestAnimationFrame(render); };
6076
6083
  defineKey(Platform, 'devicePixelRatio', { get() { return 1; } });
6077
6084
  const { userAgent } = navigator;
@@ -6278,7 +6285,7 @@ var LeaferUI = (function (exports) {
6278
6285
  }
6279
6286
 
6280
6287
  const { updateAllMatrix, updateAllChange } = LeafHelper;
6281
- const debug$5 = Debug.get('Layouter');
6288
+ const debug$4 = Debug.get('Layouter');
6282
6289
  class Layouter {
6283
6290
  constructor(target, userConfig) {
6284
6291
  this.totalTimes = 0;
@@ -6313,7 +6320,7 @@ var LeaferUI = (function (exports) {
6313
6320
  target.emitEvent(new LayoutEvent(LayoutEvent.END, this.layoutedBlocks, this.times));
6314
6321
  }
6315
6322
  catch (e) {
6316
- debug$5.error(e);
6323
+ debug$4.error(e);
6317
6324
  }
6318
6325
  this.layoutedBlocks = null;
6319
6326
  }
@@ -6327,9 +6334,9 @@ var LeaferUI = (function (exports) {
6327
6334
  }
6328
6335
  layoutOnce() {
6329
6336
  if (this.layouting)
6330
- return debug$5.warn('layouting');
6337
+ return debug$4.warn('layouting');
6331
6338
  if (this.times > 3)
6332
- return debug$5.warn('layout max times');
6339
+ return debug$4.warn('layout max times');
6333
6340
  this.times++;
6334
6341
  this.totalTimes++;
6335
6342
  this.layouting = true;
@@ -6433,7 +6440,7 @@ var LeaferUI = (function (exports) {
6433
6440
  }
6434
6441
  }
6435
6442
 
6436
- const debug$4 = Debug.get('Renderer');
6443
+ const debug$3 = Debug.get('Renderer');
6437
6444
  class Renderer {
6438
6445
  get needFill() { return !!(!this.canvas.allowBackgroundColor && this.config.fill); }
6439
6446
  constructor(target, canvas, userConfig) {
@@ -6471,7 +6478,7 @@ var LeaferUI = (function (exports) {
6471
6478
  const { target } = this;
6472
6479
  this.times = 0;
6473
6480
  this.totalBounds = new Bounds();
6474
- debug$4.log(target.innerName, '--->');
6481
+ debug$3.log(target.innerName, '--->');
6475
6482
  try {
6476
6483
  if (!target.isApp)
6477
6484
  target.app.emit(RenderEvent.CHILD_START, target);
@@ -6482,9 +6489,9 @@ var LeaferUI = (function (exports) {
6482
6489
  }
6483
6490
  catch (e) {
6484
6491
  this.rendering = false;
6485
- debug$4.error(e);
6492
+ debug$3.error(e);
6486
6493
  }
6487
- debug$4.log('-------------|');
6494
+ debug$3.log('-------------|');
6488
6495
  }
6489
6496
  renderAgain() {
6490
6497
  if (this.rendering) {
@@ -6496,9 +6503,9 @@ var LeaferUI = (function (exports) {
6496
6503
  }
6497
6504
  renderOnce(callback) {
6498
6505
  if (this.rendering)
6499
- return debug$4.warn('rendering');
6506
+ return debug$3.warn('rendering');
6500
6507
  if (this.times > 3)
6501
- return debug$4.warn('render max times');
6508
+ return debug$3.warn('render max times');
6502
6509
  this.times++;
6503
6510
  this.totalTimes++;
6504
6511
  this.rendering = true;
@@ -6535,7 +6542,7 @@ var LeaferUI = (function (exports) {
6535
6542
  partRender() {
6536
6543
  const { canvas, updateBlocks: list } = this;
6537
6544
  if (!list)
6538
- return debug$4.warn('PartRender: need update attr');
6545
+ return debug$3.warn('PartRender: need update attr');
6539
6546
  this.mergeBlocks();
6540
6547
  list.forEach(block => { if (canvas.bounds.hit(block) && !block.isEmpty())
6541
6548
  this.clipRender(block); });
@@ -6638,7 +6645,7 @@ var LeaferUI = (function (exports) {
6638
6645
  empty = (!leaf.__world.width || !leaf.__world.height);
6639
6646
  if (empty) {
6640
6647
  if (!leaf.isLeafer)
6641
- debug$4.tip(leaf.innerName, ': empty');
6648
+ debug$3.tip(leaf.innerName, ': empty');
6642
6649
  empty = (!leaf.isBranch || leaf.isBranchLeaf);
6643
6650
  }
6644
6651
  return empty;
@@ -6804,143 +6811,26 @@ var LeaferUI = (function (exports) {
6804
6811
  }
6805
6812
  }
6806
6813
 
6807
- const { Yes, NoAndSkip, YesAndSkip } = exports.Answer;
6808
- const idCondition = {}, classNameCondition = {}, tagCondition = {};
6809
6814
  class Selector {
6810
6815
  constructor(target, userConfig) {
6811
6816
  this.config = {};
6812
- this.innerIdMap = {};
6813
- this.idMap = {};
6814
- this.methods = {
6815
- id: (leaf, name) => leaf.id === name ? (this.target && (this.idMap[name] = leaf), 1) : 0,
6816
- innerId: (leaf, innerId) => leaf.innerId === innerId ? (this.target && (this.innerIdMap[innerId] = leaf), 1) : 0,
6817
- className: (leaf, name) => leaf.className === name ? 1 : 0,
6818
- tag: (leaf, name) => leaf.__tag === name ? 1 : 0,
6819
- tags: (leaf, nameMap) => nameMap[leaf.__tag] ? 1 : 0
6820
- };
6821
- this.target = target;
6822
6817
  if (userConfig)
6823
6818
  this.config = DataHelper.default(userConfig, this.config);
6824
- this.picker = new Picker(target, this);
6825
- if (target)
6826
- this.__listenEvents();
6827
- }
6828
- getBy(condition, branch, one, options) {
6829
- switch (typeof condition) {
6830
- case 'number':
6831
- const leaf = this.getByInnerId(condition, branch);
6832
- return one ? leaf : (leaf ? [leaf] : []);
6833
- case 'string':
6834
- switch (condition[0]) {
6835
- case '#':
6836
- idCondition.id = condition.substring(1), condition = idCondition;
6837
- break;
6838
- case '.':
6839
- classNameCondition.className = condition.substring(1), condition = classNameCondition;
6840
- break;
6841
- default:
6842
- tagCondition.tag = condition, condition = tagCondition;
6843
- }
6844
- case 'object':
6845
- if (condition.id !== undefined) {
6846
- const leaf = this.getById(condition.id, branch);
6847
- return one ? leaf : (leaf ? [leaf] : []);
6848
- }
6849
- else if (condition.tag) {
6850
- const { tag } = condition, isArray = tag instanceof Array;
6851
- return this.getByMethod(isArray ? this.methods.tags : this.methods.tag, branch, one, isArray ? DataHelper.toMap(tag) : tag);
6852
- }
6853
- else {
6854
- return this.getByMethod(this.methods.className, branch, one, condition.className);
6855
- }
6856
- case 'function':
6857
- return this.getByMethod(condition, branch, one, options);
6858
- }
6819
+ this.picker = new Picker(this.target = target, this);
6820
+ this.finder = Creator.finder && Creator.finder();
6859
6821
  }
6860
6822
  getByPoint(hitPoint, hitRadius, options) {
6861
- if (Platform.name === 'node' && this.target)
6862
- this.target.emit(LayoutEvent.CHECK_UPDATE);
6823
+ if (Platform.backgrounder && this.target)
6824
+ this.target.updateLayout();
6863
6825
  return this.picker.getByPoint(hitPoint, hitRadius, options);
6864
6826
  }
6865
- getByInnerId(innerId, branch) {
6866
- const cache = this.innerIdMap[innerId];
6867
- if (cache)
6868
- return cache;
6869
- this.eachFind(this.toChildren(branch), this.methods.innerId, null, innerId);
6870
- return this.findLeaf;
6871
- }
6872
- getById(id, branch) {
6873
- const cache = this.idMap[id];
6874
- if (cache && LeafHelper.hasParent(cache, branch || this.target))
6875
- return cache;
6876
- this.eachFind(this.toChildren(branch), this.methods.id, null, id);
6877
- return this.findLeaf;
6878
- }
6879
- getByClassName(className, branch) {
6880
- return this.getByMethod(this.methods.className, branch, false, className);
6881
- }
6882
- getByTag(tag, branch) {
6883
- return this.getByMethod(this.methods.tag, branch, false, tag);
6884
- }
6885
- getByMethod(method, branch, one, options) {
6886
- const list = one ? null : [];
6887
- this.eachFind(this.toChildren(branch), method, list, options);
6888
- return list || this.findLeaf;
6889
- }
6890
- eachFind(children, method, list, options) {
6891
- let child, result;
6892
- for (let i = 0, len = children.length; i < len; i++) {
6893
- child = children[i];
6894
- result = method(child, options);
6895
- if (result === Yes || result === YesAndSkip) {
6896
- if (list) {
6897
- list.push(child);
6898
- }
6899
- else {
6900
- this.findLeaf = child;
6901
- return;
6902
- }
6903
- }
6904
- if (child.isBranch && result < NoAndSkip)
6905
- this.eachFind(child.children, method, list, options);
6906
- }
6907
- }
6908
- toChildren(branch) {
6909
- this.findLeaf = null;
6910
- return [branch || this.target];
6911
- }
6912
- __onRemoveChild(event) {
6913
- const { id, innerId } = event.child;
6914
- if (this.idMap[id])
6915
- delete this.idMap[id];
6916
- if (this.innerIdMap[innerId])
6917
- delete this.innerIdMap[innerId];
6918
- }
6919
- __checkIdChange(event) {
6920
- if (event.attrName === 'id') {
6921
- const id = event.oldValue;
6922
- if (this.idMap[id])
6923
- delete this.idMap[id];
6924
- }
6925
- }
6926
- __listenEvents() {
6927
- this.__eventIds = [
6928
- this.target.on_(ChildEvent.REMOVE, this.__onRemoveChild, this),
6929
- this.target.on_(PropertyEvent.CHANGE, this.__checkIdChange, this)
6930
- ];
6931
- }
6932
- __removeListenEvents() {
6933
- this.target.off_(this.__eventIds);
6934
- this.__eventIds.length = 0;
6827
+ getBy(condition, branch, one, options) {
6828
+ return this.finder ? this.finder.getBy(condition, branch, one, options) : Plugin.need('find');
6935
6829
  }
6936
6830
  destroy() {
6937
- if (this.__eventIds.length) {
6938
- this.__removeListenEvents();
6939
- this.picker.destroy();
6940
- this.findLeaf = null;
6941
- this.innerIdMap = {};
6942
- this.idMap = {};
6943
- }
6831
+ this.picker.destroy();
6832
+ if (this.finder)
6833
+ this.finder.destroy();
6944
6834
  }
6945
6835
  }
6946
6836
 
@@ -7013,7 +6903,7 @@ var LeaferUI = (function (exports) {
7013
6903
 
7014
6904
  const { parse, objectToCanvasData } = PathConvert;
7015
6905
  const emptyPaint = {};
7016
- const debug$3 = Debug.get('UIData');
6906
+ const debug$2 = Debug.get('UIData');
7017
6907
  class UIData extends LeafData {
7018
6908
  get scale() { const { scaleX, scaleY } = this; return scaleX !== scaleY ? { x: scaleX, y: scaleY } : scaleX; }
7019
6909
  get __strokeWidth() {
@@ -7050,7 +6940,7 @@ var LeaferUI = (function (exports) {
7050
6940
  if (value < 0) {
7051
6941
  this._width = -value;
7052
6942
  this.__leaf.scaleX *= -1;
7053
- debug$3.warn('width < 0, instead -scaleX ', this);
6943
+ debug$2.warn('width < 0, instead -scaleX ', this);
7054
6944
  }
7055
6945
  else
7056
6946
  this._width = value;
@@ -7059,7 +6949,7 @@ var LeaferUI = (function (exports) {
7059
6949
  if (value < 0) {
7060
6950
  this._height = -value;
7061
6951
  this.__leaf.scaleY *= -1;
7062
- debug$3.warn('height < 0, instead -scaleY', this);
6952
+ debug$2.warn('height < 0, instead -scaleY', this);
7063
6953
  }
7064
6954
  else
7065
6955
  this._height = value;
@@ -7436,25 +7326,27 @@ var LeaferUI = (function (exports) {
7436
7326
  }
7437
7327
  reset(_data) { }
7438
7328
  set(data, transition) {
7439
- if (transition) {
7440
- if (transition === 'temp') {
7441
- this.lockNormalStyle = true;
7442
- Object.assign(this, data);
7443
- this.lockNormalStyle = false;
7329
+ if (data) {
7330
+ if (transition) {
7331
+ if (transition === 'temp') {
7332
+ this.lockNormalStyle = true;
7333
+ Object.assign(this, data);
7334
+ this.lockNormalStyle = false;
7335
+ }
7336
+ else
7337
+ this.animate(data, transition);
7444
7338
  }
7445
7339
  else
7446
- this.animate(data, transition);
7340
+ Object.assign(this, data);
7447
7341
  }
7448
- else
7449
- Object.assign(this, data);
7450
7342
  }
7451
7343
  get(name) {
7452
7344
  return typeof name === 'string' ? this.__.__getInput(name) : this.__.__getInputData(name);
7453
7345
  }
7454
7346
  createProxyData() { return undefined; }
7455
- find(_condition, _options) { return undefined; }
7347
+ find(_condition, _options) { return Plugin.need('find'); }
7456
7348
  findTag(tag) { return this.find({ tag }); }
7457
- findOne(_condition, _options) { return undefined; }
7349
+ findOne(_condition, _options) { return Plugin.need('find'); }
7458
7350
  findId(id) { return this.findOne({ id }); }
7459
7351
  getPath(curve, pathForRender) {
7460
7352
  this.__layout.update();
@@ -7506,9 +7398,9 @@ var LeaferUI = (function (exports) {
7506
7398
  animate(_keyframe, _options, _type, _isTemp) {
7507
7399
  return Plugin.need('animate');
7508
7400
  }
7509
- killAnimate(_type) { }
7510
- export(filename, options) {
7511
- return Export.export(this, filename, options);
7401
+ killAnimate(_type, _killStyle) { }
7402
+ export(_filename, _options) {
7403
+ return Plugin.need('export');
7512
7404
  }
7513
7405
  clone(data) {
7514
7406
  const json = this.toJSON();
@@ -7754,16 +7646,18 @@ var LeaferUI = (function (exports) {
7754
7646
  this.children = [];
7755
7647
  }
7756
7648
  set(data, transition) {
7757
- if (data.children) {
7758
- const { children } = data;
7759
- delete data.children;
7760
- this.children ? this.clear() : this.__setBranch();
7761
- super.set(data, transition);
7762
- children.forEach(child => this.add(child));
7763
- data.children = children;
7649
+ if (data) {
7650
+ if (data.children) {
7651
+ const { children } = data;
7652
+ delete data.children;
7653
+ this.children ? this.clear() : this.__setBranch();
7654
+ super.set(data, transition);
7655
+ children.forEach(child => this.add(child));
7656
+ data.children = children;
7657
+ }
7658
+ else
7659
+ super.set(data, transition);
7764
7660
  }
7765
- else
7766
- super.set(data, transition);
7767
7661
  }
7768
7662
  toJSON(options) {
7769
7663
  const data = super.toJSON(options);
@@ -7795,7 +7689,7 @@ var LeaferUI = (function (exports) {
7795
7689
  ], exports.Group);
7796
7690
 
7797
7691
  var Leafer_1;
7798
- const debug$2 = Debug.get('Leafer');
7692
+ const debug$1 = Debug.get('Leafer');
7799
7693
  exports.Leafer = Leafer_1 = class Leafer extends exports.Group {
7800
7694
  get __tag() { return 'Leafer'; }
7801
7695
  get isApp() { return false; }
@@ -7960,7 +7854,7 @@ var LeaferUI = (function (exports) {
7960
7854
  if (this.canvas) {
7961
7855
  if (canvasSizeAttrs.includes(attrName)) {
7962
7856
  if (!newValue)
7963
- debug$2.warn(attrName + ' is 0');
7857
+ debug$1.warn(attrName + ' is 0');
7964
7858
  this.__changeCanvasSize(attrName, newValue);
7965
7859
  }
7966
7860
  else if (attrName === 'fill') {
@@ -8026,6 +7920,8 @@ var LeaferUI = (function (exports) {
8026
7920
  this.requestRender();
8027
7921
  }
8028
7922
  }
7923
+ else
7924
+ this.requestRender();
8029
7925
  }
8030
7926
  __checkViewCompleted(emit = true) {
8031
7927
  this.nextRender(() => {
@@ -8099,9 +7995,6 @@ var LeaferUI = (function (exports) {
8099
7995
  this.canvas && this.canvas.updateClientBounds();
8100
7996
  }
8101
7997
  receiveEvent(_event) { }
8102
- __checkUpdateLayout() {
8103
- this.__layout.update();
8104
- }
8105
7998
  emitLeafer(type) {
8106
7999
  this.emitEvent(new LeaferEvent(type, this));
8107
8000
  }
@@ -8112,7 +8005,7 @@ var LeaferUI = (function (exports) {
8112
8005
  this.once(LayoutEvent.END, () => this.__onReady());
8113
8006
  this.once(RenderEvent.START, () => this.__onCreated());
8114
8007
  this.once(RenderEvent.END, () => this.__onViewReady());
8115
- this.__eventIds.push(this.on_(WatchEvent.DATA, this.__onWatchData, this), this.on_(RenderEvent.NEXT, this.__onNextRender, this), this.on_(LayoutEvent.CHECK_UPDATE, this.__checkUpdateLayout, this));
8008
+ this.__eventIds.push(this.on_(WatchEvent.DATA, this.__onWatchData, this), this.on_(RenderEvent.NEXT, this.__onNextRender, this));
8116
8009
  }
8117
8010
  __removeListenEvents() {
8118
8011
  this.off_(this.__eventIds);
@@ -8143,7 +8036,7 @@ var LeaferUI = (function (exports) {
8143
8036
  setTimeout(() => { ImageManager.clearRecycled(); }, 100);
8144
8037
  }
8145
8038
  catch (e) {
8146
- debug$2.error(e);
8039
+ debug$1.error(e);
8147
8040
  }
8148
8041
  }
8149
8042
  };
@@ -8177,7 +8070,7 @@ var LeaferUI = (function (exports) {
8177
8070
  ], exports.Rect);
8178
8071
 
8179
8072
  const { copy: copy$3, add, includes: includes$1 } = BoundsHelper;
8180
- const rect$1 = exports.Rect.prototype, group$1 = exports.Group.prototype;
8073
+ const rect$1 = exports.Rect.prototype, group = exports.Group.prototype;
8181
8074
  const childrenRenderBounds = {};
8182
8075
  exports.Box = class Box extends exports.Group {
8183
8076
  get __tag() { return 'Box'; }
@@ -8287,7 +8180,7 @@ var LeaferUI = (function (exports) {
8287
8180
  rewrite(rect$1.__render)
8288
8181
  ], exports.Box.prototype, "__renderRect", null);
8289
8182
  __decorate([
8290
- rewrite(group$1.__render)
8183
+ rewrite(group.__render)
8291
8184
  ], exports.Box.prototype, "__renderGroup", null);
8292
8185
  exports.Box = __decorate([
8293
8186
  rewriteAble(),
@@ -8372,7 +8265,7 @@ var LeaferUI = (function (exports) {
8372
8265
 
8373
8266
  const { moveTo: moveTo$2, lineTo: lineTo$2, drawPoints: drawPoints$1 } = PathCommandDataHelper;
8374
8267
  const { rotate: rotate$1, getAngle: getAngle$1, getDistance: getDistance$2, defaultPoint } = PointHelper;
8375
- const { toBounds: toBounds$1 } = PathBounds;
8268
+ const { toBounds } = PathBounds;
8376
8269
  exports.Line = class Line extends exports.UI {
8377
8270
  get __tag() { return 'Line'; }
8378
8271
  get toPoint() {
@@ -8416,7 +8309,7 @@ var LeaferUI = (function (exports) {
8416
8309
  }
8417
8310
  __updateBoxBounds() {
8418
8311
  if (this.points) {
8419
- toBounds$1(this.__.__pathForRender, this.__layout.boxBounds);
8312
+ toBounds(this.__.__pathForRender, this.__layout.boxBounds);
8420
8313
  }
8421
8314
  else
8422
8315
  super.__updateBoxBounds();
@@ -8591,10 +8484,10 @@ var LeaferUI = (function (exports) {
8591
8484
  __updateSize() {
8592
8485
  const { canvas } = this;
8593
8486
  if (canvas) {
8594
- const { smooth } = this.__;
8487
+ const { smooth, safeResize } = this.__;
8488
+ canvas.resize(this.__, safeResize);
8595
8489
  if (canvas.smooth !== smooth)
8596
8490
  canvas.smooth = smooth;
8597
- canvas.resize(this.__);
8598
8491
  }
8599
8492
  }
8600
8493
  destroy() {
@@ -8620,6 +8513,9 @@ var LeaferUI = (function (exports) {
8620
8513
  __decorate([
8621
8514
  resizeType(true)
8622
8515
  ], exports.Canvas.prototype, "smooth", void 0);
8516
+ __decorate([
8517
+ dataType(false)
8518
+ ], exports.Canvas.prototype, "safeResize", void 0);
8623
8519
  __decorate([
8624
8520
  resizeType()
8625
8521
  ], exports.Canvas.prototype, "contextSettings", void 0);
@@ -8765,6 +8661,9 @@ var LeaferUI = (function (exports) {
8765
8661
  __decorate([
8766
8662
  boundsType(0)
8767
8663
  ], exports.Text.prototype, "paraSpacing", void 0);
8664
+ __decorate([
8665
+ boundsType('x')
8666
+ ], exports.Text.prototype, "writingMode", void 0);
8768
8667
  __decorate([
8769
8668
  boundsType('left')
8770
8669
  ], exports.Text.prototype, "textAlign", void 0);
@@ -8951,8 +8850,8 @@ var LeaferUI = (function (exports) {
8951
8850
  this.children.forEach(leafer => leafer.resize(event));
8952
8851
  super.__onResize(event);
8953
8852
  }
8954
- __checkUpdateLayout() {
8955
- this.children.forEach(leafer => leafer.__layout.update());
8853
+ updateLayout() {
8854
+ this.children.forEach(leafer => leafer.updateLayout());
8956
8855
  }
8957
8856
  __getChildConfig(userConfig) {
8958
8857
  let config = Object.assign({}, this.config);
@@ -9442,7 +9341,7 @@ var LeaferUI = (function (exports) {
9442
9341
  }
9443
9342
  }
9444
9343
 
9445
- const debug$1 = Debug.get('emit');
9344
+ const debug = Debug.get('emit');
9446
9345
  function emit$1(type, data, path, excludePath) {
9447
9346
  if (!path && !data.path)
9448
9347
  return;
@@ -9472,7 +9371,7 @@ var LeaferUI = (function (exports) {
9472
9371
  }
9473
9372
  }
9474
9373
  catch (e) {
9475
- debug$1.error(e);
9374
+ debug.error(e);
9476
9375
  }
9477
9376
  }
9478
9377
  const allowTypes = ['move', 'zoom', 'rotate', 'key'];
@@ -10029,8 +9928,8 @@ var LeaferUI = (function (exports) {
10029
9928
  this.__drawRenderPath(canvas); };
10030
9929
 
10031
9930
  const matrix = new Matrix();
10032
- const ui$2 = exports.UI.prototype;
10033
- ui$2.__updateHitCanvas = function () {
9931
+ const ui$1 = exports.UI.prototype;
9932
+ ui$1.__updateHitCanvas = function () {
10034
9933
  const data = this.__, { hitCanvasManager } = this.leafer;
10035
9934
  const isHitPixelFill = (data.__pixelFill || data.__isCanvas) && data.hitFill === 'pixel';
10036
9935
  const isHitPixelStroke = data.__pixelStroke && data.hitStroke === 'pixel';
@@ -10057,7 +9956,7 @@ var LeaferUI = (function (exports) {
10057
9956
  this.__drawHitPath(h);
10058
9957
  h.setStrokeOptions(data);
10059
9958
  };
10060
- ui$2.__hit = function (inner) {
9959
+ ui$1.__hit = function (inner) {
10061
9960
  if (Platform.name === 'miniapp')
10062
9961
  this.__drawHitPath(this.__hitCanvas);
10063
9962
  const data = this.__;
@@ -10097,43 +9996,35 @@ var LeaferUI = (function (exports) {
10097
9996
  return hitWidth ? this.__hitStroke(inner, hitWidth) : false;
10098
9997
  };
10099
9998
 
10100
- const ui$1 = exports.UI.prototype, rect = exports.Rect.prototype, box$1 = exports.Box.prototype;
9999
+ const ui = exports.UI.prototype, rect = exports.Rect.prototype, box$1 = exports.Box.prototype;
10101
10000
  rect.__updateHitCanvas = box$1.__updateHitCanvas = function () {
10102
10001
  if (this.stroke || this.cornerRadius || ((this.fill || this.__.__isCanvas) && this.hitFill === 'pixel') || this.hitStroke === 'all')
10103
- ui$1.__updateHitCanvas.call(this);
10002
+ ui.__updateHitCanvas.call(this);
10104
10003
  else if (this.__hitCanvas)
10105
10004
  this.__hitCanvas = null;
10106
10005
  };
10107
10006
  rect.__hitFill = box$1.__hitFill = function (inner) {
10108
- return this.__hitCanvas ? ui$1.__hitFill.call(this, inner) : BoundsHelper.hitRadiusPoint(this.__layout.boxBounds, inner);
10007
+ return this.__hitCanvas ? ui.__hitFill.call(this, inner) : BoundsHelper.hitRadiusPoint(this.__layout.boxBounds, inner);
10109
10008
  };
10110
10009
 
10111
- const ui = exports.UI.prototype, group = exports.Group.prototype;
10112
10010
  function getSelector(ui) {
10113
10011
  return ui.leafer ? ui.leafer.selector : (Platform.selector || (Platform.selector = Creator.selector()));
10114
10012
  }
10115
- ui.find = function (condition, options) {
10116
- return getSelector(this).getBy(condition, this, false, options);
10117
- };
10118
- ui.findOne = function (condition, options) {
10119
- return getSelector(this).getBy(condition, this, true, options);
10120
- };
10121
- group.pick = function (hitPoint, options) {
10122
- this.__layout.update();
10123
- if (!options)
10124
- options = {};
10013
+ exports.Group.prototype.pick = function (hitPoint, options) {
10014
+ this.leafer || this.updateLayout();
10015
+ options || (options = emptyData);
10125
10016
  return getSelector(this).getByPoint(hitPoint, options.hitRadius || 0, Object.assign(Object.assign({}, options), { target: this }));
10126
10017
  };
10127
10018
 
10128
- const canvas$1 = LeaferCanvasBase.prototype;
10129
- canvas$1.hitFill = function (point, fillRule) {
10019
+ const canvas = LeaferCanvasBase.prototype;
10020
+ canvas.hitFill = function (point, fillRule) {
10130
10021
  return fillRule ? this.context.isPointInPath(point.x, point.y, fillRule) : this.context.isPointInPath(point.x, point.y);
10131
10022
  };
10132
- canvas$1.hitStroke = function (point, strokeWidth) {
10023
+ canvas.hitStroke = function (point, strokeWidth) {
10133
10024
  this.strokeWidth = strokeWidth;
10134
10025
  return this.context.isPointInStroke(point.x, point.y);
10135
10026
  };
10136
- canvas$1.hitPixel = function (radiusPoint, offset, scale = 1) {
10027
+ canvas.hitPixel = function (radiusPoint, offset, scale = 1) {
10137
10028
  let { x, y, radiusX, radiusY } = radiusPoint;
10138
10029
  if (offset)
10139
10030
  x -= offset.x, y -= offset.y;
@@ -11625,197 +11516,12 @@ var LeaferUI = (function (exports) {
11625
11516
  string
11626
11517
  };
11627
11518
 
11628
- const { setPoint, addPoint, toBounds } = TwoPointBoundsHelper;
11629
- function getTrimBounds(canvas) {
11630
- const { width, height } = canvas.view;
11631
- const { data } = canvas.context.getImageData(0, 0, width, height);
11632
- let x, y, pointBounds, index = 0;
11633
- for (let i = 0; i < data.length; i += 4) {
11634
- if (data[i + 3] !== 0) {
11635
- x = index % width;
11636
- y = (index - x) / width;
11637
- pointBounds ? addPoint(pointBounds, x, y) : setPoint(pointBounds = {}, x, y);
11638
- }
11639
- index++;
11640
- }
11641
- const bounds = new Bounds();
11642
- toBounds(pointBounds, bounds);
11643
- return bounds.scale(1 / canvas.pixelRatio).ceil();
11644
- }
11645
-
11646
- const ExportModule = {
11647
- export(leaf, filename, options) {
11648
- this.running = true;
11649
- const fileType = FileHelper.fileType(filename);
11650
- const isDownload = filename.includes('.');
11651
- options = FileHelper.getExportOptions(options);
11652
- return addTask((success) => new Promise((resolve) => {
11653
- const over = (result) => {
11654
- success(result);
11655
- resolve();
11656
- this.running = false;
11657
- };
11658
- const { toURL } = Platform;
11659
- const { download } = Platform.origin;
11660
- if (fileType === 'json') {
11661
- isDownload && download(toURL(JSON.stringify(leaf.toJSON(options.json)), 'text'), filename);
11662
- return over({ data: isDownload ? true : leaf.toJSON(options.json) });
11663
- }
11664
- if (fileType === 'svg') {
11665
- isDownload && download(toURL(leaf.toSVG(), 'svg'), filename);
11666
- return over({ data: isDownload ? true : leaf.toSVG() });
11667
- }
11668
- const { leafer } = leaf;
11669
- if (leafer) {
11670
- checkLazy(leaf);
11671
- leafer.waitViewCompleted(() => __awaiter(this, void 0, void 0, function* () {
11672
- let renderBounds, trimBounds, scaleX = 1, scaleY = 1;
11673
- const { worldTransform, isLeafer, isFrame } = leaf;
11674
- const { slice, trim, onCanvas } = options;
11675
- const smooth = options.smooth === undefined ? leafer.config.smooth : options.smooth;
11676
- const contextSettings = options.contextSettings || leafer.config.contextSettings;
11677
- const screenshot = options.screenshot || leaf.isApp;
11678
- const fill = (isLeafer && screenshot) ? (options.fill === undefined ? leaf.fill : options.fill) : options.fill;
11679
- const needFill = FileHelper.isOpaqueImage(filename) || fill, matrix = new Matrix();
11680
- if (screenshot) {
11681
- renderBounds = screenshot === true ? (isLeafer ? leafer.canvas.bounds : leaf.worldRenderBounds) : screenshot;
11682
- }
11683
- else {
11684
- let relative = options.relative || (isLeafer ? 'inner' : 'local');
11685
- scaleX = worldTransform.scaleX;
11686
- scaleY = worldTransform.scaleY;
11687
- switch (relative) {
11688
- case 'inner':
11689
- matrix.set(worldTransform);
11690
- break;
11691
- case 'local':
11692
- matrix.set(worldTransform).divide(leaf.localTransform);
11693
- scaleX /= leaf.scaleX;
11694
- scaleY /= leaf.scaleY;
11695
- break;
11696
- case 'world':
11697
- scaleX = 1;
11698
- scaleY = 1;
11699
- break;
11700
- case 'page':
11701
- relative = leaf.leafer;
11702
- default:
11703
- matrix.set(worldTransform).divide(leaf.getTransform(relative));
11704
- const l = relative.worldTransform;
11705
- scaleX /= scaleX / l.scaleX;
11706
- scaleY /= scaleY / l.scaleY;
11707
- }
11708
- renderBounds = leaf.getBounds('render', relative);
11709
- }
11710
- const scaleData = { scaleX: 1, scaleY: 1 };
11711
- MathHelper.getScaleData(options.scale, options.size, renderBounds, scaleData);
11712
- let pixelRatio = options.pixelRatio || 1;
11713
- if (leaf.isApp) {
11714
- scaleData.scaleX *= pixelRatio;
11715
- scaleData.scaleY *= pixelRatio;
11716
- pixelRatio = leaf.app.pixelRatio;
11717
- }
11718
- const { x, y, width, height } = new Bounds(renderBounds).scale(scaleData.scaleX, scaleData.scaleY);
11719
- const renderOptions = { matrix: matrix.scale(1 / scaleData.scaleX, 1 / scaleData.scaleY).invert().translate(-x, -y).withScale(1 / scaleX * scaleData.scaleX, 1 / scaleY * scaleData.scaleY) };
11720
- let canvas = Creator.canvas({ width: Math.round(width), height: Math.round(height), pixelRatio, smooth, contextSettings });
11721
- let sliceLeaf;
11722
- if (slice) {
11723
- sliceLeaf = leaf;
11724
- sliceLeaf.__worldOpacity = 0;
11725
- leaf = leafer;
11726
- renderOptions.bounds = canvas.bounds;
11727
- }
11728
- canvas.save();
11729
- if (isFrame && fill !== undefined) {
11730
- const oldFill = leaf.get('fill');
11731
- leaf.fill = '';
11732
- leaf.__render(canvas, renderOptions);
11733
- leaf.fill = oldFill;
11734
- }
11735
- else {
11736
- leaf.__render(canvas, renderOptions);
11737
- }
11738
- canvas.restore();
11739
- if (sliceLeaf)
11740
- sliceLeaf.__updateWorldOpacity();
11741
- if (trim) {
11742
- trimBounds = getTrimBounds(canvas);
11743
- const old = canvas, { width, height } = trimBounds;
11744
- const config = { x: 0, y: 0, width, height, pixelRatio };
11745
- canvas = Creator.canvas(config);
11746
- canvas.copyWorld(old, trimBounds, config);
11747
- }
11748
- if (needFill)
11749
- canvas.fillWorld(canvas.bounds, fill || '#FFFFFF', 'destination-over');
11750
- if (onCanvas)
11751
- onCanvas(canvas);
11752
- const data = filename === 'canvas' ? canvas : yield canvas.export(filename, options);
11753
- over({ data, width: canvas.pixelWidth, height: canvas.pixelHeight, renderBounds, trimBounds });
11754
- }));
11755
- }
11756
- else {
11757
- over({ data: false });
11758
- }
11759
- }));
11760
- }
11761
- };
11762
- let tasker;
11763
- function addTask(task) {
11764
- if (!tasker)
11765
- tasker = new TaskProcessor();
11766
- return new Promise((resolve) => {
11767
- tasker.add(() => __awaiter(this, void 0, void 0, function* () { return yield task(resolve); }), { parallel: false });
11768
- });
11769
- }
11770
- function checkLazy(leaf) {
11771
- if (leaf.__.__needComputePaint)
11772
- leaf.__.__computePaint();
11773
- if (leaf.isBranch)
11774
- leaf.children.forEach(child => checkLazy(child));
11775
- }
11776
-
11777
- const canvas = LeaferCanvasBase.prototype;
11778
- const debug = Debug.get('@leafer-ui/export');
11779
- canvas.export = function (filename, options) {
11780
- const { quality, blob } = FileHelper.getExportOptions(options);
11781
- if (filename.includes('.'))
11782
- return this.saveAs(filename, quality);
11783
- else if (blob)
11784
- return this.toBlob(filename, quality);
11785
- else
11786
- return this.toDataURL(filename, quality);
11787
- };
11788
- canvas.toBlob = function (type, quality) {
11789
- return new Promise((resolve) => {
11790
- Platform.origin.canvasToBolb(this.view, type, quality).then((blob) => {
11791
- resolve(blob);
11792
- }).catch((e) => {
11793
- debug.error(e);
11794
- resolve(null);
11795
- });
11796
- });
11797
- };
11798
- canvas.toDataURL = function (type, quality) {
11799
- return Platform.origin.canvasToDataURL(this.view, type, quality);
11800
- };
11801
- canvas.saveAs = function (filename, quality) {
11802
- return new Promise((resolve) => {
11803
- Platform.origin.canvasSaveAs(this.view, filename, quality).then(() => {
11804
- resolve(true);
11805
- }).catch((e) => {
11806
- debug.error(e);
11807
- resolve(false);
11808
- });
11809
- });
11810
- };
11811
-
11812
11519
  Object.assign(TextConvert, TextConvertModule);
11813
11520
  Object.assign(ColorConvert, ColorConvertModule);
11814
11521
  Object.assign(Paint, PaintModule);
11815
11522
  Object.assign(PaintImage, PaintImageModule);
11816
11523
  Object.assign(PaintGradient, PaintGradientModule);
11817
11524
  Object.assign(Effect, EffectModule);
11818
- Object.assign(Export, ExportModule);
11819
11525
 
11820
11526
  Object.assign(Creator, {
11821
11527
  interaction: (target, canvas, selector, options) => new InteractionBase(target, canvas, selector, options),
@@ -11905,6 +11611,7 @@ var LeaferUI = (function (exports) {
11905
11611
  exports.PathNumberCommandLengthMap = PathNumberCommandLengthMap;
11906
11612
  exports.PathNumberCommandMap = PathNumberCommandMap;
11907
11613
  exports.PenData = PenData;
11614
+ exports.Picker = Picker;
11908
11615
  exports.Platform = Platform;
11909
11616
  exports.Plugin = Plugin;
11910
11617
  exports.Point = Point;