@leafer-editor/worker 1.2.2 → 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.cjs +7 -0
- package/dist/worker.esm.js +1 -0
- package/dist/worker.esm.min.js +1 -1
- package/dist/worker.js +263 -377
- package/dist/worker.min.cjs +1 -1
- package/dist/worker.min.js +1 -1
- package/dist/worker.module.js +263 -378
- package/dist/worker.module.min.js +1 -1
- package/package.json +14 -13
package/dist/worker.module.js
CHANGED
|
@@ -1402,21 +1402,24 @@ const Run = {
|
|
|
1402
1402
|
};
|
|
1403
1403
|
const R = Run;
|
|
1404
1404
|
|
|
1405
|
+
const check = [];
|
|
1405
1406
|
const Plugin = {
|
|
1406
1407
|
list: {},
|
|
1407
|
-
add(name) {
|
|
1408
|
+
add(name, ...needPlugins) {
|
|
1408
1409
|
this.list[name] = true;
|
|
1410
|
+
check.push(...needPlugins);
|
|
1409
1411
|
},
|
|
1410
|
-
|
|
1412
|
+
has(name, tip) {
|
|
1411
1413
|
const rs = this.list[name];
|
|
1412
1414
|
if (!rs && tip)
|
|
1413
1415
|
this.need(name);
|
|
1414
1416
|
return rs;
|
|
1415
1417
|
},
|
|
1416
1418
|
need(name) {
|
|
1417
|
-
console.error('need plugin: @leafer-in/' + name);
|
|
1419
|
+
console.error('need plugin: ' + (name.includes('-x') ? '' : '@leafer-in/') + name);
|
|
1418
1420
|
}
|
|
1419
1421
|
};
|
|
1422
|
+
setTimeout(() => check.forEach(name => Plugin.has(name, true)));
|
|
1420
1423
|
|
|
1421
1424
|
const debug$g = Debug.get('UICreator');
|
|
1422
1425
|
const UICreator = {
|
|
@@ -4808,7 +4811,6 @@ class LayoutEvent extends Event {
|
|
|
4808
4811
|
}
|
|
4809
4812
|
}
|
|
4810
4813
|
}
|
|
4811
|
-
LayoutEvent.CHECK_UPDATE = 'layout.check_update';
|
|
4812
4814
|
LayoutEvent.REQUEST = 'layout.request';
|
|
4813
4815
|
LayoutEvent.START = 'layout.start';
|
|
4814
4816
|
LayoutEvent.BEFORE = 'layout.before';
|
|
@@ -6005,7 +6007,7 @@ class LeafLevelList {
|
|
|
6005
6007
|
}
|
|
6006
6008
|
}
|
|
6007
6009
|
|
|
6008
|
-
const version = "1.
|
|
6010
|
+
const version = "1.3.0";
|
|
6009
6011
|
|
|
6010
6012
|
class LeaferCanvas extends LeaferCanvasBase {
|
|
6011
6013
|
get allowBackgroundColor() { return true; }
|
|
@@ -6073,6 +6075,7 @@ function useCanvas(_canvasType, _power) {
|
|
|
6073
6075
|
}
|
|
6074
6076
|
Platform.name = 'web';
|
|
6075
6077
|
Platform.isWorker = true;
|
|
6078
|
+
Platform.backgrounder = true;
|
|
6076
6079
|
Platform.requestRender = function (render) { requestAnimationFrame(render); };
|
|
6077
6080
|
defineKey(Platform, 'devicePixelRatio', { get() { return 1; } });
|
|
6078
6081
|
const { userAgent } = navigator;
|
|
@@ -6805,143 +6808,26 @@ class Picker {
|
|
|
6805
6808
|
}
|
|
6806
6809
|
}
|
|
6807
6810
|
|
|
6808
|
-
const { Yes: Yes$1, NoAndSkip: NoAndSkip$1, YesAndSkip: YesAndSkip$1 } = Answer;
|
|
6809
|
-
const idCondition = {}, classNameCondition = {}, tagCondition = {};
|
|
6810
6811
|
class Selector {
|
|
6811
6812
|
constructor(target, userConfig) {
|
|
6812
6813
|
this.config = {};
|
|
6813
|
-
this.innerIdMap = {};
|
|
6814
|
-
this.idMap = {};
|
|
6815
|
-
this.methods = {
|
|
6816
|
-
id: (leaf, name) => leaf.id === name ? (this.target && (this.idMap[name] = leaf), 1) : 0,
|
|
6817
|
-
innerId: (leaf, innerId) => leaf.innerId === innerId ? (this.target && (this.innerIdMap[innerId] = leaf), 1) : 0,
|
|
6818
|
-
className: (leaf, name) => leaf.className === name ? 1 : 0,
|
|
6819
|
-
tag: (leaf, name) => leaf.__tag === name ? 1 : 0,
|
|
6820
|
-
tags: (leaf, nameMap) => nameMap[leaf.__tag] ? 1 : 0
|
|
6821
|
-
};
|
|
6822
|
-
this.target = target;
|
|
6823
6814
|
if (userConfig)
|
|
6824
6815
|
this.config = DataHelper.default(userConfig, this.config);
|
|
6825
|
-
this.picker = new Picker(target, this);
|
|
6826
|
-
|
|
6827
|
-
this.__listenEvents();
|
|
6828
|
-
}
|
|
6829
|
-
getBy(condition, branch, one, options) {
|
|
6830
|
-
switch (typeof condition) {
|
|
6831
|
-
case 'number':
|
|
6832
|
-
const leaf = this.getByInnerId(condition, branch);
|
|
6833
|
-
return one ? leaf : (leaf ? [leaf] : []);
|
|
6834
|
-
case 'string':
|
|
6835
|
-
switch (condition[0]) {
|
|
6836
|
-
case '#':
|
|
6837
|
-
idCondition.id = condition.substring(1), condition = idCondition;
|
|
6838
|
-
break;
|
|
6839
|
-
case '.':
|
|
6840
|
-
classNameCondition.className = condition.substring(1), condition = classNameCondition;
|
|
6841
|
-
break;
|
|
6842
|
-
default:
|
|
6843
|
-
tagCondition.tag = condition, condition = tagCondition;
|
|
6844
|
-
}
|
|
6845
|
-
case 'object':
|
|
6846
|
-
if (condition.id !== undefined) {
|
|
6847
|
-
const leaf = this.getById(condition.id, branch);
|
|
6848
|
-
return one ? leaf : (leaf ? [leaf] : []);
|
|
6849
|
-
}
|
|
6850
|
-
else if (condition.tag) {
|
|
6851
|
-
const { tag } = condition, isArray = tag instanceof Array;
|
|
6852
|
-
return this.getByMethod(isArray ? this.methods.tags : this.methods.tag, branch, one, isArray ? DataHelper.toMap(tag) : tag);
|
|
6853
|
-
}
|
|
6854
|
-
else {
|
|
6855
|
-
return this.getByMethod(this.methods.className, branch, one, condition.className);
|
|
6856
|
-
}
|
|
6857
|
-
case 'function':
|
|
6858
|
-
return this.getByMethod(condition, branch, one, options);
|
|
6859
|
-
}
|
|
6816
|
+
this.picker = new Picker(this.target = target, this);
|
|
6817
|
+
this.finder = Creator.finder && Creator.finder();
|
|
6860
6818
|
}
|
|
6861
6819
|
getByPoint(hitPoint, hitRadius, options) {
|
|
6862
|
-
if (Platform.
|
|
6863
|
-
this.target.
|
|
6820
|
+
if (Platform.backgrounder && this.target)
|
|
6821
|
+
this.target.updateLayout();
|
|
6864
6822
|
return this.picker.getByPoint(hitPoint, hitRadius, options);
|
|
6865
6823
|
}
|
|
6866
|
-
|
|
6867
|
-
|
|
6868
|
-
if (cache)
|
|
6869
|
-
return cache;
|
|
6870
|
-
this.eachFind(this.toChildren(branch), this.methods.innerId, null, innerId);
|
|
6871
|
-
return this.findLeaf;
|
|
6872
|
-
}
|
|
6873
|
-
getById(id, branch) {
|
|
6874
|
-
const cache = this.idMap[id];
|
|
6875
|
-
if (cache && LeafHelper.hasParent(cache, branch || this.target))
|
|
6876
|
-
return cache;
|
|
6877
|
-
this.eachFind(this.toChildren(branch), this.methods.id, null, id);
|
|
6878
|
-
return this.findLeaf;
|
|
6879
|
-
}
|
|
6880
|
-
getByClassName(className, branch) {
|
|
6881
|
-
return this.getByMethod(this.methods.className, branch, false, className);
|
|
6882
|
-
}
|
|
6883
|
-
getByTag(tag, branch) {
|
|
6884
|
-
return this.getByMethod(this.methods.tag, branch, false, tag);
|
|
6885
|
-
}
|
|
6886
|
-
getByMethod(method, branch, one, options) {
|
|
6887
|
-
const list = one ? null : [];
|
|
6888
|
-
this.eachFind(this.toChildren(branch), method, list, options);
|
|
6889
|
-
return list || this.findLeaf;
|
|
6890
|
-
}
|
|
6891
|
-
eachFind(children, method, list, options) {
|
|
6892
|
-
let child, result;
|
|
6893
|
-
for (let i = 0, len = children.length; i < len; i++) {
|
|
6894
|
-
child = children[i];
|
|
6895
|
-
result = method(child, options);
|
|
6896
|
-
if (result === Yes$1 || result === YesAndSkip$1) {
|
|
6897
|
-
if (list) {
|
|
6898
|
-
list.push(child);
|
|
6899
|
-
}
|
|
6900
|
-
else {
|
|
6901
|
-
this.findLeaf = child;
|
|
6902
|
-
return;
|
|
6903
|
-
}
|
|
6904
|
-
}
|
|
6905
|
-
if (child.isBranch && result < NoAndSkip$1)
|
|
6906
|
-
this.eachFind(child.children, method, list, options);
|
|
6907
|
-
}
|
|
6908
|
-
}
|
|
6909
|
-
toChildren(branch) {
|
|
6910
|
-
this.findLeaf = null;
|
|
6911
|
-
return [branch || this.target];
|
|
6912
|
-
}
|
|
6913
|
-
__onRemoveChild(event) {
|
|
6914
|
-
const { id, innerId } = event.child;
|
|
6915
|
-
if (this.idMap[id])
|
|
6916
|
-
delete this.idMap[id];
|
|
6917
|
-
if (this.innerIdMap[innerId])
|
|
6918
|
-
delete this.innerIdMap[innerId];
|
|
6919
|
-
}
|
|
6920
|
-
__checkIdChange(event) {
|
|
6921
|
-
if (event.attrName === 'id') {
|
|
6922
|
-
const id = event.oldValue;
|
|
6923
|
-
if (this.idMap[id])
|
|
6924
|
-
delete this.idMap[id];
|
|
6925
|
-
}
|
|
6926
|
-
}
|
|
6927
|
-
__listenEvents() {
|
|
6928
|
-
this.__eventIds = [
|
|
6929
|
-
this.target.on_(ChildEvent.REMOVE, this.__onRemoveChild, this),
|
|
6930
|
-
this.target.on_(PropertyEvent.CHANGE, this.__checkIdChange, this)
|
|
6931
|
-
];
|
|
6932
|
-
}
|
|
6933
|
-
__removeListenEvents() {
|
|
6934
|
-
this.target.off_(this.__eventIds);
|
|
6935
|
-
this.__eventIds.length = 0;
|
|
6824
|
+
getBy(condition, branch, one, options) {
|
|
6825
|
+
return this.finder ? this.finder.getBy(condition, branch, one, options) : Plugin.need('find');
|
|
6936
6826
|
}
|
|
6937
6827
|
destroy() {
|
|
6938
|
-
|
|
6939
|
-
|
|
6940
|
-
this.
|
|
6941
|
-
this.findLeaf = null;
|
|
6942
|
-
this.innerIdMap = {};
|
|
6943
|
-
this.idMap = {};
|
|
6944
|
-
}
|
|
6828
|
+
this.picker.destroy();
|
|
6829
|
+
if (this.finder)
|
|
6830
|
+
this.finder.destroy();
|
|
6945
6831
|
}
|
|
6946
6832
|
}
|
|
6947
6833
|
|
|
@@ -7437,25 +7323,27 @@ let UI = UI_1 = class UI extends Leaf {
|
|
|
7437
7323
|
}
|
|
7438
7324
|
reset(_data) { }
|
|
7439
7325
|
set(data, transition) {
|
|
7440
|
-
if (
|
|
7441
|
-
if (transition
|
|
7442
|
-
|
|
7443
|
-
|
|
7444
|
-
|
|
7326
|
+
if (data) {
|
|
7327
|
+
if (transition) {
|
|
7328
|
+
if (transition === 'temp') {
|
|
7329
|
+
this.lockNormalStyle = true;
|
|
7330
|
+
Object.assign(this, data);
|
|
7331
|
+
this.lockNormalStyle = false;
|
|
7332
|
+
}
|
|
7333
|
+
else
|
|
7334
|
+
this.animate(data, transition);
|
|
7445
7335
|
}
|
|
7446
7336
|
else
|
|
7447
|
-
|
|
7337
|
+
Object.assign(this, data);
|
|
7448
7338
|
}
|
|
7449
|
-
else
|
|
7450
|
-
Object.assign(this, data);
|
|
7451
7339
|
}
|
|
7452
7340
|
get(name) {
|
|
7453
7341
|
return typeof name === 'string' ? this.__.__getInput(name) : this.__.__getInputData(name);
|
|
7454
7342
|
}
|
|
7455
7343
|
createProxyData() { return undefined; }
|
|
7456
|
-
find(_condition, _options) { return
|
|
7344
|
+
find(_condition, _options) { return Plugin.need('find'); }
|
|
7457
7345
|
findTag(tag) { return this.find({ tag }); }
|
|
7458
|
-
findOne(_condition, _options) { return
|
|
7346
|
+
findOne(_condition, _options) { return Plugin.need('find'); }
|
|
7459
7347
|
findId(id) { return this.findOne({ id }); }
|
|
7460
7348
|
getPath(curve, pathForRender) {
|
|
7461
7349
|
this.__layout.update();
|
|
@@ -7507,9 +7395,9 @@ let UI = UI_1 = class UI extends Leaf {
|
|
|
7507
7395
|
animate(_keyframe, _options, _type, _isTemp) {
|
|
7508
7396
|
return Plugin.need('animate');
|
|
7509
7397
|
}
|
|
7510
|
-
killAnimate(_type) { }
|
|
7511
|
-
export(
|
|
7512
|
-
return
|
|
7398
|
+
killAnimate(_type, _killStyle) { }
|
|
7399
|
+
export(_filename, _options) {
|
|
7400
|
+
return Plugin.need('export');
|
|
7513
7401
|
}
|
|
7514
7402
|
clone(data) {
|
|
7515
7403
|
const json = this.toJSON();
|
|
@@ -7755,16 +7643,18 @@ let Group = class Group extends UI {
|
|
|
7755
7643
|
this.children = [];
|
|
7756
7644
|
}
|
|
7757
7645
|
set(data, transition) {
|
|
7758
|
-
if (data
|
|
7759
|
-
|
|
7760
|
-
|
|
7761
|
-
|
|
7762
|
-
|
|
7763
|
-
|
|
7764
|
-
|
|
7646
|
+
if (data) {
|
|
7647
|
+
if (data.children) {
|
|
7648
|
+
const { children } = data;
|
|
7649
|
+
delete data.children;
|
|
7650
|
+
this.children ? this.clear() : this.__setBranch();
|
|
7651
|
+
super.set(data, transition);
|
|
7652
|
+
children.forEach(child => this.add(child));
|
|
7653
|
+
data.children = children;
|
|
7654
|
+
}
|
|
7655
|
+
else
|
|
7656
|
+
super.set(data, transition);
|
|
7765
7657
|
}
|
|
7766
|
-
else
|
|
7767
|
-
super.set(data, transition);
|
|
7768
7658
|
}
|
|
7769
7659
|
toJSON(options) {
|
|
7770
7660
|
const data = super.toJSON(options);
|
|
@@ -8102,9 +7992,6 @@ let Leafer = Leafer_1 = class Leafer extends Group {
|
|
|
8102
7992
|
this.canvas && this.canvas.updateClientBounds();
|
|
8103
7993
|
}
|
|
8104
7994
|
receiveEvent(_event) { }
|
|
8105
|
-
__checkUpdateLayout() {
|
|
8106
|
-
this.__layout.update();
|
|
8107
|
-
}
|
|
8108
7995
|
emitLeafer(type) {
|
|
8109
7996
|
this.emitEvent(new LeaferEvent(type, this));
|
|
8110
7997
|
}
|
|
@@ -8115,7 +8002,7 @@ let Leafer = Leafer_1 = class Leafer extends Group {
|
|
|
8115
8002
|
this.once(LayoutEvent.END, () => this.__onReady());
|
|
8116
8003
|
this.once(RenderEvent.START, () => this.__onCreated());
|
|
8117
8004
|
this.once(RenderEvent.END, () => this.__onViewReady());
|
|
8118
|
-
this.__eventIds.push(this.on_(WatchEvent.DATA, this.__onWatchData, this), this.on_(RenderEvent.NEXT, this.__onNextRender, this)
|
|
8005
|
+
this.__eventIds.push(this.on_(WatchEvent.DATA, this.__onWatchData, this), this.on_(RenderEvent.NEXT, this.__onNextRender, this));
|
|
8119
8006
|
}
|
|
8120
8007
|
__removeListenEvents() {
|
|
8121
8008
|
this.off_(this.__eventIds);
|
|
@@ -8180,7 +8067,7 @@ Rect = __decorate([
|
|
|
8180
8067
|
], Rect);
|
|
8181
8068
|
|
|
8182
8069
|
const { copy: copy$6, add, includes: includes$1 } = BoundsHelper;
|
|
8183
|
-
const rect$1 = Rect.prototype, group
|
|
8070
|
+
const rect$1 = Rect.prototype, group = Group.prototype;
|
|
8184
8071
|
const childrenRenderBounds = {};
|
|
8185
8072
|
let Box = class Box extends Group {
|
|
8186
8073
|
get __tag() { return 'Box'; }
|
|
@@ -8290,7 +8177,7 @@ __decorate([
|
|
|
8290
8177
|
rewrite(rect$1.__render)
|
|
8291
8178
|
], Box.prototype, "__renderRect", null);
|
|
8292
8179
|
__decorate([
|
|
8293
|
-
rewrite(group
|
|
8180
|
+
rewrite(group.__render)
|
|
8294
8181
|
], Box.prototype, "__renderGroup", null);
|
|
8295
8182
|
Box = __decorate([
|
|
8296
8183
|
rewriteAble(),
|
|
@@ -8771,6 +8658,9 @@ __decorate([
|
|
|
8771
8658
|
__decorate([
|
|
8772
8659
|
boundsType(0)
|
|
8773
8660
|
], Text.prototype, "paraSpacing", void 0);
|
|
8661
|
+
__decorate([
|
|
8662
|
+
boundsType('x')
|
|
8663
|
+
], Text.prototype, "writingMode", void 0);
|
|
8774
8664
|
__decorate([
|
|
8775
8665
|
boundsType('left')
|
|
8776
8666
|
], Text.prototype, "textAlign", void 0);
|
|
@@ -8957,8 +8847,8 @@ let App = class App extends Leafer {
|
|
|
8957
8847
|
this.children.forEach(leafer => leafer.resize(event));
|
|
8958
8848
|
super.__onResize(event);
|
|
8959
8849
|
}
|
|
8960
|
-
|
|
8961
|
-
this.children.forEach(leafer => leafer.
|
|
8850
|
+
updateLayout() {
|
|
8851
|
+
this.children.forEach(leafer => leafer.updateLayout());
|
|
8962
8852
|
}
|
|
8963
8853
|
__getChildConfig(userConfig) {
|
|
8964
8854
|
let config = Object.assign({}, this.config);
|
|
@@ -10035,8 +9925,8 @@ leaf$1.__drawHitPath = function (canvas) { if (canvas)
|
|
|
10035
9925
|
this.__drawRenderPath(canvas); };
|
|
10036
9926
|
|
|
10037
9927
|
const matrix$2 = new Matrix();
|
|
10038
|
-
const ui$
|
|
10039
|
-
ui$
|
|
9928
|
+
const ui$2 = UI.prototype;
|
|
9929
|
+
ui$2.__updateHitCanvas = function () {
|
|
10040
9930
|
const data = this.__, { hitCanvasManager } = this.leafer;
|
|
10041
9931
|
const isHitPixelFill = (data.__pixelFill || data.__isCanvas) && data.hitFill === 'pixel';
|
|
10042
9932
|
const isHitPixelStroke = data.__pixelStroke && data.hitStroke === 'pixel';
|
|
@@ -10063,7 +9953,7 @@ ui$3.__updateHitCanvas = function () {
|
|
|
10063
9953
|
this.__drawHitPath(h);
|
|
10064
9954
|
h.setStrokeOptions(data);
|
|
10065
9955
|
};
|
|
10066
|
-
ui$
|
|
9956
|
+
ui$2.__hit = function (inner) {
|
|
10067
9957
|
if (Platform.name === 'miniapp')
|
|
10068
9958
|
this.__drawHitPath(this.__hitCanvas);
|
|
10069
9959
|
const data = this.__;
|
|
@@ -10103,31 +9993,23 @@ ui$3.__hit = function (inner) {
|
|
|
10103
9993
|
return hitWidth ? this.__hitStroke(inner, hitWidth) : false;
|
|
10104
9994
|
};
|
|
10105
9995
|
|
|
10106
|
-
const ui$
|
|
9996
|
+
const ui$1 = UI.prototype, rect = Rect.prototype, box$1 = Box.prototype;
|
|
10107
9997
|
rect.__updateHitCanvas = box$1.__updateHitCanvas = function () {
|
|
10108
9998
|
if (this.stroke || this.cornerRadius || ((this.fill || this.__.__isCanvas) && this.hitFill === 'pixel') || this.hitStroke === 'all')
|
|
10109
|
-
ui$
|
|
9999
|
+
ui$1.__updateHitCanvas.call(this);
|
|
10110
10000
|
else if (this.__hitCanvas)
|
|
10111
10001
|
this.__hitCanvas = null;
|
|
10112
10002
|
};
|
|
10113
10003
|
rect.__hitFill = box$1.__hitFill = function (inner) {
|
|
10114
|
-
return this.__hitCanvas ? ui$
|
|
10004
|
+
return this.__hitCanvas ? ui$1.__hitFill.call(this, inner) : BoundsHelper.hitRadiusPoint(this.__layout.boxBounds, inner);
|
|
10115
10005
|
};
|
|
10116
10006
|
|
|
10117
|
-
const ui$1 = UI.prototype, group = Group.prototype;
|
|
10118
10007
|
function getSelector(ui) {
|
|
10119
10008
|
return ui.leafer ? ui.leafer.selector : (Platform.selector || (Platform.selector = Creator.selector()));
|
|
10120
10009
|
}
|
|
10121
|
-
|
|
10122
|
-
|
|
10123
|
-
|
|
10124
|
-
ui$1.findOne = function (condition, options) {
|
|
10125
|
-
return getSelector(this).getBy(condition, this, true, options);
|
|
10126
|
-
};
|
|
10127
|
-
group.pick = function (hitPoint, options) {
|
|
10128
|
-
this.__layout.update();
|
|
10129
|
-
if (!options)
|
|
10130
|
-
options = {};
|
|
10010
|
+
Group.prototype.pick = function (hitPoint, options) {
|
|
10011
|
+
this.leafer || this.updateLayout();
|
|
10012
|
+
options || (options = emptyData);
|
|
10131
10013
|
return getSelector(this).getByPoint(hitPoint, options.hitRadius || 0, Object.assign(Object.assign({}, options), { target: this }));
|
|
10132
10014
|
};
|
|
10133
10015
|
|
|
@@ -11631,197 +11513,12 @@ const ColorConvertModule = {
|
|
|
11631
11513
|
string
|
|
11632
11514
|
};
|
|
11633
11515
|
|
|
11634
|
-
const { setPoint: setPoint$2, addPoint, toBounds } = TwoPointBoundsHelper;
|
|
11635
|
-
function getTrimBounds(canvas) {
|
|
11636
|
-
const { width, height } = canvas.view;
|
|
11637
|
-
const { data } = canvas.context.getImageData(0, 0, width, height);
|
|
11638
|
-
let x, y, pointBounds, index = 0;
|
|
11639
|
-
for (let i = 0; i < data.length; i += 4) {
|
|
11640
|
-
if (data[i + 3] !== 0) {
|
|
11641
|
-
x = index % width;
|
|
11642
|
-
y = (index - x) / width;
|
|
11643
|
-
pointBounds ? addPoint(pointBounds, x, y) : setPoint$2(pointBounds = {}, x, y);
|
|
11644
|
-
}
|
|
11645
|
-
index++;
|
|
11646
|
-
}
|
|
11647
|
-
const bounds = new Bounds();
|
|
11648
|
-
toBounds(pointBounds, bounds);
|
|
11649
|
-
return bounds.scale(1 / canvas.pixelRatio).ceil();
|
|
11650
|
-
}
|
|
11651
|
-
|
|
11652
|
-
const ExportModule = {
|
|
11653
|
-
export(leaf, filename, options) {
|
|
11654
|
-
this.running = true;
|
|
11655
|
-
const fileType = FileHelper.fileType(filename);
|
|
11656
|
-
const isDownload = filename.includes('.');
|
|
11657
|
-
options = FileHelper.getExportOptions(options);
|
|
11658
|
-
return addTask((success) => new Promise((resolve) => {
|
|
11659
|
-
const over = (result) => {
|
|
11660
|
-
success(result);
|
|
11661
|
-
resolve();
|
|
11662
|
-
this.running = false;
|
|
11663
|
-
};
|
|
11664
|
-
const { toURL } = Platform;
|
|
11665
|
-
const { download } = Platform.origin;
|
|
11666
|
-
if (fileType === 'json') {
|
|
11667
|
-
isDownload && download(toURL(JSON.stringify(leaf.toJSON(options.json)), 'text'), filename);
|
|
11668
|
-
return over({ data: isDownload ? true : leaf.toJSON(options.json) });
|
|
11669
|
-
}
|
|
11670
|
-
if (fileType === 'svg') {
|
|
11671
|
-
isDownload && download(toURL(leaf.toSVG(), 'svg'), filename);
|
|
11672
|
-
return over({ data: isDownload ? true : leaf.toSVG() });
|
|
11673
|
-
}
|
|
11674
|
-
const { leafer } = leaf;
|
|
11675
|
-
if (leafer) {
|
|
11676
|
-
checkLazy(leaf);
|
|
11677
|
-
leafer.waitViewCompleted(() => __awaiter(this, void 0, void 0, function* () {
|
|
11678
|
-
let renderBounds, trimBounds, scaleX = 1, scaleY = 1;
|
|
11679
|
-
const { worldTransform, isLeafer, isFrame } = leaf;
|
|
11680
|
-
const { slice, trim, onCanvas } = options;
|
|
11681
|
-
const smooth = options.smooth === undefined ? leafer.config.smooth : options.smooth;
|
|
11682
|
-
const contextSettings = options.contextSettings || leafer.config.contextSettings;
|
|
11683
|
-
const screenshot = options.screenshot || leaf.isApp;
|
|
11684
|
-
const fill = (isLeafer && screenshot) ? (options.fill === undefined ? leaf.fill : options.fill) : options.fill;
|
|
11685
|
-
const needFill = FileHelper.isOpaqueImage(filename) || fill, matrix = new Matrix();
|
|
11686
|
-
if (screenshot) {
|
|
11687
|
-
renderBounds = screenshot === true ? (isLeafer ? leafer.canvas.bounds : leaf.worldRenderBounds) : screenshot;
|
|
11688
|
-
}
|
|
11689
|
-
else {
|
|
11690
|
-
let relative = options.relative || (isLeafer ? 'inner' : 'local');
|
|
11691
|
-
scaleX = worldTransform.scaleX;
|
|
11692
|
-
scaleY = worldTransform.scaleY;
|
|
11693
|
-
switch (relative) {
|
|
11694
|
-
case 'inner':
|
|
11695
|
-
matrix.set(worldTransform);
|
|
11696
|
-
break;
|
|
11697
|
-
case 'local':
|
|
11698
|
-
matrix.set(worldTransform).divide(leaf.localTransform);
|
|
11699
|
-
scaleX /= leaf.scaleX;
|
|
11700
|
-
scaleY /= leaf.scaleY;
|
|
11701
|
-
break;
|
|
11702
|
-
case 'world':
|
|
11703
|
-
scaleX = 1;
|
|
11704
|
-
scaleY = 1;
|
|
11705
|
-
break;
|
|
11706
|
-
case 'page':
|
|
11707
|
-
relative = leaf.leafer;
|
|
11708
|
-
default:
|
|
11709
|
-
matrix.set(worldTransform).divide(leaf.getTransform(relative));
|
|
11710
|
-
const l = relative.worldTransform;
|
|
11711
|
-
scaleX /= scaleX / l.scaleX;
|
|
11712
|
-
scaleY /= scaleY / l.scaleY;
|
|
11713
|
-
}
|
|
11714
|
-
renderBounds = leaf.getBounds('render', relative);
|
|
11715
|
-
}
|
|
11716
|
-
const scaleData = { scaleX: 1, scaleY: 1 };
|
|
11717
|
-
MathHelper.getScaleData(options.scale, options.size, renderBounds, scaleData);
|
|
11718
|
-
let pixelRatio = options.pixelRatio || 1;
|
|
11719
|
-
if (leaf.isApp) {
|
|
11720
|
-
scaleData.scaleX *= pixelRatio;
|
|
11721
|
-
scaleData.scaleY *= pixelRatio;
|
|
11722
|
-
pixelRatio = leaf.app.pixelRatio;
|
|
11723
|
-
}
|
|
11724
|
-
const { x, y, width, height } = new Bounds(renderBounds).scale(scaleData.scaleX, scaleData.scaleY);
|
|
11725
|
-
const renderOptions = { matrix: matrix.scale(1 / scaleData.scaleX, 1 / scaleData.scaleY).invert().translate(-x, -y).withScale(1 / scaleX * scaleData.scaleX, 1 / scaleY * scaleData.scaleY) };
|
|
11726
|
-
let canvas = Creator.canvas({ width: Math.round(width), height: Math.round(height), pixelRatio, smooth, contextSettings });
|
|
11727
|
-
let sliceLeaf;
|
|
11728
|
-
if (slice) {
|
|
11729
|
-
sliceLeaf = leaf;
|
|
11730
|
-
sliceLeaf.__worldOpacity = 0;
|
|
11731
|
-
leaf = leafer;
|
|
11732
|
-
renderOptions.bounds = canvas.bounds;
|
|
11733
|
-
}
|
|
11734
|
-
canvas.save();
|
|
11735
|
-
if (isFrame && fill !== undefined) {
|
|
11736
|
-
const oldFill = leaf.get('fill');
|
|
11737
|
-
leaf.fill = '';
|
|
11738
|
-
leaf.__render(canvas, renderOptions);
|
|
11739
|
-
leaf.fill = oldFill;
|
|
11740
|
-
}
|
|
11741
|
-
else {
|
|
11742
|
-
leaf.__render(canvas, renderOptions);
|
|
11743
|
-
}
|
|
11744
|
-
canvas.restore();
|
|
11745
|
-
if (sliceLeaf)
|
|
11746
|
-
sliceLeaf.__updateWorldOpacity();
|
|
11747
|
-
if (trim) {
|
|
11748
|
-
trimBounds = getTrimBounds(canvas);
|
|
11749
|
-
const old = canvas, { width, height } = trimBounds;
|
|
11750
|
-
const config = { x: 0, y: 0, width, height, pixelRatio };
|
|
11751
|
-
canvas = Creator.canvas(config);
|
|
11752
|
-
canvas.copyWorld(old, trimBounds, config);
|
|
11753
|
-
}
|
|
11754
|
-
if (needFill)
|
|
11755
|
-
canvas.fillWorld(canvas.bounds, fill || '#FFFFFF', 'destination-over');
|
|
11756
|
-
if (onCanvas)
|
|
11757
|
-
onCanvas(canvas);
|
|
11758
|
-
const data = filename === 'canvas' ? canvas : yield canvas.export(filename, options);
|
|
11759
|
-
over({ data, width: canvas.pixelWidth, height: canvas.pixelHeight, renderBounds, trimBounds });
|
|
11760
|
-
}));
|
|
11761
|
-
}
|
|
11762
|
-
else {
|
|
11763
|
-
over({ data: false });
|
|
11764
|
-
}
|
|
11765
|
-
}));
|
|
11766
|
-
}
|
|
11767
|
-
};
|
|
11768
|
-
let tasker;
|
|
11769
|
-
function addTask(task) {
|
|
11770
|
-
if (!tasker)
|
|
11771
|
-
tasker = new TaskProcessor();
|
|
11772
|
-
return new Promise((resolve) => {
|
|
11773
|
-
tasker.add(() => __awaiter(this, void 0, void 0, function* () { return yield task(resolve); }), { parallel: false });
|
|
11774
|
-
});
|
|
11775
|
-
}
|
|
11776
|
-
function checkLazy(leaf) {
|
|
11777
|
-
if (leaf.__.__needComputePaint)
|
|
11778
|
-
leaf.__.__computePaint();
|
|
11779
|
-
if (leaf.isBranch)
|
|
11780
|
-
leaf.children.forEach(child => checkLazy(child));
|
|
11781
|
-
}
|
|
11782
|
-
|
|
11783
|
-
const canvas = LeaferCanvasBase.prototype;
|
|
11784
|
-
const debug$2 = Debug.get('@leafer-ui/export');
|
|
11785
|
-
canvas.export = function (filename, options) {
|
|
11786
|
-
const { quality, blob } = FileHelper.getExportOptions(options);
|
|
11787
|
-
if (filename.includes('.'))
|
|
11788
|
-
return this.saveAs(filename, quality);
|
|
11789
|
-
else if (blob)
|
|
11790
|
-
return this.toBlob(filename, quality);
|
|
11791
|
-
else
|
|
11792
|
-
return this.toDataURL(filename, quality);
|
|
11793
|
-
};
|
|
11794
|
-
canvas.toBlob = function (type, quality) {
|
|
11795
|
-
return new Promise((resolve) => {
|
|
11796
|
-
Platform.origin.canvasToBolb(this.view, type, quality).then((blob) => {
|
|
11797
|
-
resolve(blob);
|
|
11798
|
-
}).catch((e) => {
|
|
11799
|
-
debug$2.error(e);
|
|
11800
|
-
resolve(null);
|
|
11801
|
-
});
|
|
11802
|
-
});
|
|
11803
|
-
};
|
|
11804
|
-
canvas.toDataURL = function (type, quality) {
|
|
11805
|
-
return Platform.origin.canvasToDataURL(this.view, type, quality);
|
|
11806
|
-
};
|
|
11807
|
-
canvas.saveAs = function (filename, quality) {
|
|
11808
|
-
return new Promise((resolve) => {
|
|
11809
|
-
Platform.origin.canvasSaveAs(this.view, filename, quality).then(() => {
|
|
11810
|
-
resolve(true);
|
|
11811
|
-
}).catch((e) => {
|
|
11812
|
-
debug$2.error(e);
|
|
11813
|
-
resolve(false);
|
|
11814
|
-
});
|
|
11815
|
-
});
|
|
11816
|
-
};
|
|
11817
|
-
|
|
11818
11516
|
Object.assign(TextConvert, TextConvertModule);
|
|
11819
11517
|
Object.assign(ColorConvert, ColorConvertModule);
|
|
11820
11518
|
Object.assign(Paint, PaintModule);
|
|
11821
11519
|
Object.assign(PaintImage, PaintImageModule);
|
|
11822
11520
|
Object.assign(PaintGradient, PaintGradientModule);
|
|
11823
11521
|
Object.assign(Effect, EffectModule);
|
|
11824
|
-
Object.assign(Export, ExportModule);
|
|
11825
11522
|
|
|
11826
11523
|
Object.assign(Creator, {
|
|
11827
11524
|
interaction: (target, canvas, selector, options) => new InteractionBase(target, canvas, selector, options),
|
|
@@ -12966,7 +12663,7 @@ const EditorHelper = {
|
|
|
12966
12663
|
}
|
|
12967
12664
|
};
|
|
12968
12665
|
|
|
12969
|
-
const debug$
|
|
12666
|
+
const debug$2 = Debug.get('EditToolCreator');
|
|
12970
12667
|
function registerEditTool() {
|
|
12971
12668
|
return (target) => {
|
|
12972
12669
|
EditToolCreator.register(target);
|
|
@@ -12977,7 +12674,7 @@ const EditToolCreator = {
|
|
|
12977
12674
|
list: {},
|
|
12978
12675
|
register(EditTool) {
|
|
12979
12676
|
const { tag } = EditTool.prototype;
|
|
12980
|
-
list$1[tag] && debug$
|
|
12677
|
+
list$1[tag] && debug$2.repeat(tag);
|
|
12981
12678
|
list$1[tag] = EditTool;
|
|
12982
12679
|
},
|
|
12983
12680
|
get(tag, editor) {
|
|
@@ -13094,7 +12791,7 @@ class Editor extends Group {
|
|
|
13094
12791
|
if (userConfig)
|
|
13095
12792
|
this.config = DataHelper.default(userConfig, this.config);
|
|
13096
12793
|
this.addMany(this.editMask, this.selector, this.editBox);
|
|
13097
|
-
if (!Plugin.
|
|
12794
|
+
if (!Plugin.has('resize'))
|
|
13098
12795
|
this.config.editSize = 'scale';
|
|
13099
12796
|
}
|
|
13100
12797
|
select(target) {
|
|
@@ -13887,7 +13584,7 @@ Box.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
|
13887
13584
|
|
|
13888
13585
|
Plugin.add('resize');
|
|
13889
13586
|
|
|
13890
|
-
Plugin.add('editor');
|
|
13587
|
+
Plugin.add('editor', 'resize');
|
|
13891
13588
|
Creator.editor = function (options) { return new Editor(options); };
|
|
13892
13589
|
dataType(false)(Box.prototype, 'textBox');
|
|
13893
13590
|
defineKey(UI.prototype, 'editOuter', {
|
|
@@ -13968,11 +13665,11 @@ function document$1(leafer) {
|
|
|
13968
13665
|
});
|
|
13969
13666
|
}
|
|
13970
13667
|
|
|
13971
|
-
const debug = Debug.get('LeaferTypeCreator');
|
|
13668
|
+
const debug$1 = Debug.get('LeaferTypeCreator');
|
|
13972
13669
|
const LeaferTypeCreator = {
|
|
13973
13670
|
list: {},
|
|
13974
13671
|
register(name, fn) {
|
|
13975
|
-
list[name] && debug.repeat(name);
|
|
13672
|
+
list[name] && debug$1.repeat(name);
|
|
13976
13673
|
list[name] = fn;
|
|
13977
13674
|
},
|
|
13978
13675
|
run(name, leafer) {
|
|
@@ -14497,17 +14194,17 @@ const PathMatrixHelper = {
|
|
|
14497
14194
|
switch (command) {
|
|
14498
14195
|
case M$1:
|
|
14499
14196
|
case L$1:
|
|
14500
|
-
setPoint$
|
|
14197
|
+
setPoint$2(data, i + 1, x, y, scaleX, scaleY, rotation, origin);
|
|
14501
14198
|
i += 3;
|
|
14502
14199
|
break;
|
|
14503
14200
|
case C$1:
|
|
14504
14201
|
for (j = 1; j < 6; j += 2)
|
|
14505
|
-
setPoint$
|
|
14202
|
+
setPoint$2(data, i + j, x, y, scaleX, scaleY, rotation, origin);
|
|
14506
14203
|
i += 7;
|
|
14507
14204
|
break;
|
|
14508
14205
|
case Q$1:
|
|
14509
14206
|
for (j = 1; j < 4; j += 2)
|
|
14510
|
-
setPoint$
|
|
14207
|
+
setPoint$2(data, i + j, x, y, scaleX, scaleY, rotation, origin);
|
|
14511
14208
|
i += 5;
|
|
14512
14209
|
break;
|
|
14513
14210
|
case O$1:
|
|
@@ -14528,7 +14225,7 @@ const PathMatrixHelper = {
|
|
|
14528
14225
|
PathMatrixHelper.layout(data, 0, 0, 1, 1, rotation, center);
|
|
14529
14226
|
}
|
|
14530
14227
|
};
|
|
14531
|
-
function setPoint$
|
|
14228
|
+
function setPoint$2(data, startIndex, x, y, scaleX, scaleY, rotation, origin) {
|
|
14532
14229
|
copyFrom$1(point, data[startIndex], data[startIndex + 1]);
|
|
14533
14230
|
if (rotation)
|
|
14534
14231
|
rotate$1(point, rotation, origin);
|
|
@@ -14694,7 +14391,7 @@ const PathArrowModule = {
|
|
|
14694
14391
|
break;
|
|
14695
14392
|
}
|
|
14696
14393
|
if (index)
|
|
14697
|
-
setPoint(path, last, index);
|
|
14394
|
+
setPoint$1(path, last, index);
|
|
14698
14395
|
}
|
|
14699
14396
|
}
|
|
14700
14397
|
}
|
|
@@ -14708,7 +14405,7 @@ function copyPoints(data, from, to, startIndex) {
|
|
|
14708
14405
|
copyFrom(from, data[startIndex], data[startIndex + 1]);
|
|
14709
14406
|
copyFrom(to, data[startIndex + 2], data[startIndex + 3]);
|
|
14710
14407
|
}
|
|
14711
|
-
function setPoint(data, point, startIndex) {
|
|
14408
|
+
function setPoint$1(data, point, startIndex) {
|
|
14712
14409
|
data[startIndex] = point.x;
|
|
14713
14410
|
data[startIndex + 1] = point.y;
|
|
14714
14411
|
}
|
|
@@ -14731,6 +14428,195 @@ arrowType('none')(ui, 'startArrow');
|
|
|
14731
14428
|
arrowType('none')(ui, 'endArrow');
|
|
14732
14429
|
Object.assign(PathArrow, PathArrowModule);
|
|
14733
14430
|
|
|
14431
|
+
const { setPoint, addPoint, toBounds } = TwoPointBoundsHelper;
|
|
14432
|
+
function getTrimBounds(canvas) {
|
|
14433
|
+
const { width, height } = canvas.view;
|
|
14434
|
+
const { data } = canvas.context.getImageData(0, 0, width, height);
|
|
14435
|
+
let x, y, pointBounds, index = 0;
|
|
14436
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
14437
|
+
if (data[i + 3] !== 0) {
|
|
14438
|
+
x = index % width;
|
|
14439
|
+
y = (index - x) / width;
|
|
14440
|
+
pointBounds ? addPoint(pointBounds, x, y) : setPoint(pointBounds = {}, x, y);
|
|
14441
|
+
}
|
|
14442
|
+
index++;
|
|
14443
|
+
}
|
|
14444
|
+
const bounds = new Bounds();
|
|
14445
|
+
toBounds(pointBounds, bounds);
|
|
14446
|
+
return bounds.scale(1 / canvas.pixelRatio).ceil();
|
|
14447
|
+
}
|
|
14448
|
+
|
|
14449
|
+
const ExportModule = {
|
|
14450
|
+
export(leaf, filename, options) {
|
|
14451
|
+
this.running = true;
|
|
14452
|
+
const fileType = FileHelper.fileType(filename);
|
|
14453
|
+
const isDownload = filename.includes('.');
|
|
14454
|
+
options = FileHelper.getExportOptions(options);
|
|
14455
|
+
return addTask((success) => new Promise((resolve) => {
|
|
14456
|
+
const over = (result) => {
|
|
14457
|
+
success(result);
|
|
14458
|
+
resolve();
|
|
14459
|
+
this.running = false;
|
|
14460
|
+
};
|
|
14461
|
+
const { toURL } = Platform;
|
|
14462
|
+
const { download } = Platform.origin;
|
|
14463
|
+
if (fileType === 'json') {
|
|
14464
|
+
isDownload && download(toURL(JSON.stringify(leaf.toJSON(options.json)), 'text'), filename);
|
|
14465
|
+
return over({ data: isDownload ? true : leaf.toJSON(options.json) });
|
|
14466
|
+
}
|
|
14467
|
+
if (fileType === 'svg') {
|
|
14468
|
+
isDownload && download(toURL(leaf.toSVG(), 'svg'), filename);
|
|
14469
|
+
return over({ data: isDownload ? true : leaf.toSVG() });
|
|
14470
|
+
}
|
|
14471
|
+
const { leafer } = leaf;
|
|
14472
|
+
if (leafer) {
|
|
14473
|
+
checkLazy(leaf);
|
|
14474
|
+
leafer.waitViewCompleted(() => __awaiter(this, void 0, void 0, function* () {
|
|
14475
|
+
let renderBounds, trimBounds, scaleX = 1, scaleY = 1;
|
|
14476
|
+
const { worldTransform, isLeafer, isFrame } = leaf;
|
|
14477
|
+
const { slice, trim, onCanvas } = options;
|
|
14478
|
+
const smooth = options.smooth === undefined ? leafer.config.smooth : options.smooth;
|
|
14479
|
+
const contextSettings = options.contextSettings || leafer.config.contextSettings;
|
|
14480
|
+
const screenshot = options.screenshot || leaf.isApp;
|
|
14481
|
+
const fill = (isLeafer && screenshot) ? (options.fill === undefined ? leaf.fill : options.fill) : options.fill;
|
|
14482
|
+
const needFill = FileHelper.isOpaqueImage(filename) || fill, matrix = new Matrix();
|
|
14483
|
+
if (screenshot) {
|
|
14484
|
+
renderBounds = screenshot === true ? (isLeafer ? leafer.canvas.bounds : leaf.worldRenderBounds) : screenshot;
|
|
14485
|
+
}
|
|
14486
|
+
else {
|
|
14487
|
+
let relative = options.relative || (isLeafer ? 'inner' : 'local');
|
|
14488
|
+
scaleX = worldTransform.scaleX;
|
|
14489
|
+
scaleY = worldTransform.scaleY;
|
|
14490
|
+
switch (relative) {
|
|
14491
|
+
case 'inner':
|
|
14492
|
+
matrix.set(worldTransform);
|
|
14493
|
+
break;
|
|
14494
|
+
case 'local':
|
|
14495
|
+
matrix.set(worldTransform).divide(leaf.localTransform);
|
|
14496
|
+
scaleX /= leaf.scaleX;
|
|
14497
|
+
scaleY /= leaf.scaleY;
|
|
14498
|
+
break;
|
|
14499
|
+
case 'world':
|
|
14500
|
+
scaleX = 1;
|
|
14501
|
+
scaleY = 1;
|
|
14502
|
+
break;
|
|
14503
|
+
case 'page':
|
|
14504
|
+
relative = leaf.leafer;
|
|
14505
|
+
default:
|
|
14506
|
+
matrix.set(worldTransform).divide(leaf.getTransform(relative));
|
|
14507
|
+
const l = relative.worldTransform;
|
|
14508
|
+
scaleX /= scaleX / l.scaleX;
|
|
14509
|
+
scaleY /= scaleY / l.scaleY;
|
|
14510
|
+
}
|
|
14511
|
+
renderBounds = leaf.getBounds('render', relative);
|
|
14512
|
+
}
|
|
14513
|
+
const scaleData = { scaleX: 1, scaleY: 1 };
|
|
14514
|
+
MathHelper.getScaleData(options.scale, options.size, renderBounds, scaleData);
|
|
14515
|
+
let pixelRatio = options.pixelRatio || 1;
|
|
14516
|
+
if (leaf.isApp) {
|
|
14517
|
+
scaleData.scaleX *= pixelRatio;
|
|
14518
|
+
scaleData.scaleY *= pixelRatio;
|
|
14519
|
+
pixelRatio = leaf.app.pixelRatio;
|
|
14520
|
+
}
|
|
14521
|
+
const { x, y, width, height } = new Bounds(renderBounds).scale(scaleData.scaleX, scaleData.scaleY);
|
|
14522
|
+
const renderOptions = { matrix: matrix.scale(1 / scaleData.scaleX, 1 / scaleData.scaleY).invert().translate(-x, -y).withScale(1 / scaleX * scaleData.scaleX, 1 / scaleY * scaleData.scaleY) };
|
|
14523
|
+
let canvas = Creator.canvas({ width: Math.round(width), height: Math.round(height), pixelRatio, smooth, contextSettings });
|
|
14524
|
+
let sliceLeaf;
|
|
14525
|
+
if (slice) {
|
|
14526
|
+
sliceLeaf = leaf;
|
|
14527
|
+
sliceLeaf.__worldOpacity = 0;
|
|
14528
|
+
leaf = leafer;
|
|
14529
|
+
renderOptions.bounds = canvas.bounds;
|
|
14530
|
+
}
|
|
14531
|
+
canvas.save();
|
|
14532
|
+
if (isFrame && fill !== undefined) {
|
|
14533
|
+
const oldFill = leaf.get('fill');
|
|
14534
|
+
leaf.fill = '';
|
|
14535
|
+
leaf.__render(canvas, renderOptions);
|
|
14536
|
+
leaf.fill = oldFill;
|
|
14537
|
+
}
|
|
14538
|
+
else {
|
|
14539
|
+
leaf.__render(canvas, renderOptions);
|
|
14540
|
+
}
|
|
14541
|
+
canvas.restore();
|
|
14542
|
+
if (sliceLeaf)
|
|
14543
|
+
sliceLeaf.__updateWorldOpacity();
|
|
14544
|
+
if (trim) {
|
|
14545
|
+
trimBounds = getTrimBounds(canvas);
|
|
14546
|
+
const old = canvas, { width, height } = trimBounds;
|
|
14547
|
+
const config = { x: 0, y: 0, width, height, pixelRatio };
|
|
14548
|
+
canvas = Creator.canvas(config);
|
|
14549
|
+
canvas.copyWorld(old, trimBounds, config);
|
|
14550
|
+
}
|
|
14551
|
+
if (needFill)
|
|
14552
|
+
canvas.fillWorld(canvas.bounds, fill || '#FFFFFF', 'destination-over');
|
|
14553
|
+
if (onCanvas)
|
|
14554
|
+
onCanvas(canvas);
|
|
14555
|
+
const data = filename === 'canvas' ? canvas : yield canvas.export(filename, options);
|
|
14556
|
+
over({ data, width: canvas.pixelWidth, height: canvas.pixelHeight, renderBounds, trimBounds });
|
|
14557
|
+
}));
|
|
14558
|
+
}
|
|
14559
|
+
else {
|
|
14560
|
+
over({ data: false });
|
|
14561
|
+
}
|
|
14562
|
+
}));
|
|
14563
|
+
}
|
|
14564
|
+
};
|
|
14565
|
+
let tasker;
|
|
14566
|
+
function addTask(task) {
|
|
14567
|
+
if (!tasker)
|
|
14568
|
+
tasker = new TaskProcessor();
|
|
14569
|
+
return new Promise((resolve) => {
|
|
14570
|
+
tasker.add(() => __awaiter(this, void 0, void 0, function* () { return yield task(resolve); }), { parallel: false });
|
|
14571
|
+
});
|
|
14572
|
+
}
|
|
14573
|
+
function checkLazy(leaf) {
|
|
14574
|
+
if (leaf.__.__needComputePaint)
|
|
14575
|
+
leaf.__.__computePaint();
|
|
14576
|
+
if (leaf.isBranch)
|
|
14577
|
+
leaf.children.forEach(child => checkLazy(child));
|
|
14578
|
+
}
|
|
14579
|
+
|
|
14580
|
+
const canvas = LeaferCanvasBase.prototype;
|
|
14581
|
+
const debug = Debug.get('@leafer-in/export');
|
|
14582
|
+
canvas.export = function (filename, options) {
|
|
14583
|
+
const { quality, blob } = FileHelper.getExportOptions(options);
|
|
14584
|
+
if (filename.includes('.'))
|
|
14585
|
+
return this.saveAs(filename, quality);
|
|
14586
|
+
else if (blob)
|
|
14587
|
+
return this.toBlob(filename, quality);
|
|
14588
|
+
else
|
|
14589
|
+
return this.toDataURL(filename, quality);
|
|
14590
|
+
};
|
|
14591
|
+
canvas.toBlob = function (type, quality) {
|
|
14592
|
+
return new Promise((resolve) => {
|
|
14593
|
+
Platform.origin.canvasToBolb(this.view, type, quality).then((blob) => {
|
|
14594
|
+
resolve(blob);
|
|
14595
|
+
}).catch((e) => {
|
|
14596
|
+
debug.error(e);
|
|
14597
|
+
resolve(null);
|
|
14598
|
+
});
|
|
14599
|
+
});
|
|
14600
|
+
};
|
|
14601
|
+
canvas.toDataURL = function (type, quality) {
|
|
14602
|
+
return Platform.origin.canvasToDataURL(this.view, type, quality);
|
|
14603
|
+
};
|
|
14604
|
+
canvas.saveAs = function (filename, quality) {
|
|
14605
|
+
return new Promise((resolve) => {
|
|
14606
|
+
Platform.origin.canvasSaveAs(this.view, filename, quality).then(() => {
|
|
14607
|
+
resolve(true);
|
|
14608
|
+
}).catch((e) => {
|
|
14609
|
+
debug.error(e);
|
|
14610
|
+
resolve(false);
|
|
14611
|
+
});
|
|
14612
|
+
});
|
|
14613
|
+
};
|
|
14614
|
+
|
|
14615
|
+
Object.assign(Export, ExportModule);
|
|
14616
|
+
UI.prototype.export = function (filename, options) {
|
|
14617
|
+
return Export.export(this, filename, options);
|
|
14618
|
+
};
|
|
14619
|
+
|
|
14734
14620
|
const textCaseMap = {
|
|
14735
14621
|
'none': 'none',
|
|
14736
14622
|
'title': 'capitalize',
|
|
@@ -14933,8 +14819,7 @@ TextEditor = __decorate([
|
|
|
14933
14819
|
registerInnerEditor()
|
|
14934
14820
|
], TextEditor);
|
|
14935
14821
|
|
|
14936
|
-
Plugin.add('text-editor');
|
|
14937
|
-
setTimeout(() => Plugin.check('editor', true));
|
|
14822
|
+
Plugin.add('text-editor', 'editor');
|
|
14938
14823
|
|
|
14939
14824
|
class HTMLTextData extends ImageData {
|
|
14940
14825
|
setText(value) {
|
|
@@ -14996,4 +14881,4 @@ HTMLText = __decorate([
|
|
|
14996
14881
|
|
|
14997
14882
|
Plugin.add('html');
|
|
14998
14883
|
|
|
14999
|
-
export { AlignHelper, Answer, App, AroundHelper, Arrow, ArrowData, AutoBounds, BezierHelper, Bounds, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, Cursor, DataHelper, Debug, Direction4, Direction9, DragEvent, Dragger, DropEvent, EditBox, EditDataHelper, EditPoint, EditSelect, EditSelectHelper, EditTool, EditToolCreator, Editor, EditorEvent, EditorGroupEvent, EditorHelper, EditorMoveEvent, EditorRotateEvent, EditorScaleEvent, EditorSkewEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Frame, FrameData, Group, GroupData, HTMLText, HTMLTextData, HitCanvasManager, Image, ImageData, ImageEvent, ImageManager, IncrementId, InnerEditor, InnerEditorEvent, InteractionBase, InteractionHelper, KeyEvent, Keyboard, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferImage, LeaferTypeCreator, Line, LineData, LineEditTool, MathHelper, Matrix, MatrixHelper, MoveEvent, MultiTouchHelper, MyDragEvent, MyImage, MyPointerEvent, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathArrowModule, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathMatrixHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Platform, Plugin, Point, PointHelper, PointerButton, PointerEvent, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, RotateEvent, Run, ScrollBar, SelectArea, Selector, Star, StarData, State, StringNumberMap, Stroker, SwipeEvent, TaskItem, TaskProcessor, Text, TextConvert, TextData, TextEditor, Transformer, Transition, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIEvent, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, WheelEventHelper, ZoomEvent, addViewport, addViewportConfig, affectRenderBoundsType, affectStrokeBoundsType, arrowType, attr, autoLayoutType, boundsType, canvasPatch, canvasSizeAttrs, cursorType, dataProcessor, dataType, decorateLeafAttr, defineDataProcessor, defineKey, defineLeafAttr, doBoundsType, doStrokeType, effectType, emptyData, eraserType, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, isNull, layoutProcessor, maskType, naturalBoundsType, opacityType, pathInputType, pathType, pen, positionType, registerEditTool, registerInnerEditor, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleType, sortType, strokeType, surfaceType, tempBounds$1 as tempBounds, tempMatrix, tempPoint$3 as tempPoint, useCanvas, useModule, version, visibleType, zoomLayerType };
|
|
14884
|
+
export { AlignHelper, Answer, App, AroundHelper, Arrow, ArrowData, AutoBounds, BezierHelper, Bounds, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, Cursor, DataHelper, Debug, Direction4, Direction9, DragEvent, Dragger, DropEvent, EditBox, EditDataHelper, EditPoint, EditSelect, EditSelectHelper, EditTool, EditToolCreator, Editor, EditorEvent, EditorGroupEvent, EditorHelper, EditorMoveEvent, EditorRotateEvent, EditorScaleEvent, EditorSkewEvent, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Frame, FrameData, Group, GroupData, HTMLText, HTMLTextData, HitCanvasManager, Image, ImageData, ImageEvent, ImageManager, IncrementId, InnerEditor, InnerEditorEvent, InteractionBase, InteractionHelper, KeyEvent, Keyboard, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferImage, LeaferTypeCreator, Line, LineData, LineEditTool, MathHelper, Matrix, MatrixHelper, MoveEvent, MultiTouchHelper, MyDragEvent, MyImage, MyPointerEvent, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathArrowModule, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathMatrixHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Picker, Platform, Plugin, Point, PointHelper, PointerButton, PointerEvent, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, RotateEvent, Run, ScrollBar, SelectArea, Selector, Star, StarData, State, StringNumberMap, Stroker, SwipeEvent, TaskItem, TaskProcessor, Text, TextConvert, TextData, TextEditor, Transformer, Transition, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIEvent, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, WheelEventHelper, ZoomEvent, addViewport, addViewportConfig, affectRenderBoundsType, affectStrokeBoundsType, arrowType, attr, autoLayoutType, boundsType, canvasPatch, canvasSizeAttrs, cursorType, dataProcessor, dataType, decorateLeafAttr, defineDataProcessor, defineKey, defineLeafAttr, doBoundsType, doStrokeType, effectType, emptyData, eraserType, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, isNull, layoutProcessor, maskType, naturalBoundsType, opacityType, pathInputType, pathType, pen, positionType, registerEditTool, registerInnerEditor, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleType, sortType, strokeType, surfaceType, tempBounds$1 as tempBounds, tempMatrix, tempPoint$3 as tempPoint, useCanvas, useModule, version, visibleType, zoomLayerType };
|