@anu3ev/fabric-image-editor 0.1.35 → 0.1.37
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/main.js +123 -132
- package/package.json +2 -1
package/dist/main.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var Te = Object.defineProperty;
|
|
2
2
|
var G = Object.getOwnPropertySymbols;
|
|
3
3
|
var Me = Object.prototype.hasOwnProperty, fe = Object.prototype.propertyIsEnumerable;
|
|
4
|
-
var me = (o, e, t) => e in o ? Te(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t,
|
|
4
|
+
var me = (o, e, t) => e in o ? Te(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t, A = (o, e) => {
|
|
5
5
|
for (var t in e || (e = {}))
|
|
6
6
|
Me.call(e, t) && me(o, t, e[t]);
|
|
7
7
|
if (G)
|
|
@@ -34,11 +34,11 @@ var $ = (o, e, t) => new Promise((a, r) => {
|
|
|
34
34
|
}, s = (c) => c.done ? a(c.value) : Promise.resolve(c.value).then(i, n);
|
|
35
35
|
s((t = t.apply(o, e)).next());
|
|
36
36
|
});
|
|
37
|
-
import { ActiveSelection as
|
|
38
|
-
import { create as
|
|
39
|
-
var
|
|
37
|
+
import { ActiveSelection as _, util as R, controlsUtils as Oe, InteractiveFabricObject as ke, loadSVGFromURL as xe, FabricImage as q, Point as Be, Rect as Ze, Circle as ze, Triangle as Ue, Group as Ye, Canvas as He, Pattern as Pe } from "fabric";
|
|
38
|
+
import { create as _e } from "jsondiffpatch";
|
|
39
|
+
var Re = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict", D = function() {
|
|
40
40
|
for (var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 21, t = "", a = crypto.getRandomValues(new Uint8Array(e |= 0)); e--; )
|
|
41
|
-
t +=
|
|
41
|
+
t += Re[a[e] & 63];
|
|
42
42
|
return t;
|
|
43
43
|
};
|
|
44
44
|
class P {
|
|
@@ -95,7 +95,7 @@ class P {
|
|
|
95
95
|
this.canvas.setActiveObject(r[0]);
|
|
96
96
|
return;
|
|
97
97
|
}
|
|
98
|
-
const i = new
|
|
98
|
+
const i = new _(r, {
|
|
99
99
|
canvas: this.canvas
|
|
100
100
|
});
|
|
101
101
|
this.canvas.setActiveObject(i), this.canvas.requestRenderAll();
|
|
@@ -329,7 +329,7 @@ class P {
|
|
|
329
329
|
};
|
|
330
330
|
}
|
|
331
331
|
}
|
|
332
|
-
class
|
|
332
|
+
class We {
|
|
333
333
|
/**
|
|
334
334
|
* @description Класс для динамической загрузки внешних модулей.
|
|
335
335
|
*/
|
|
@@ -387,7 +387,7 @@ class Fe {
|
|
|
387
387
|
* @returns {Promise<any>}
|
|
388
388
|
*/
|
|
389
389
|
post(e, t) {
|
|
390
|
-
var a = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [], r = "".concat(e, ":").concat(
|
|
390
|
+
var a = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [], r = "".concat(e, ":").concat(D(8));
|
|
391
391
|
return new Promise((i, n) => {
|
|
392
392
|
this._callbacks.set(r, {
|
|
393
393
|
resolve: i,
|
|
@@ -409,21 +409,21 @@ class Fe {
|
|
|
409
409
|
var I = 12, Ve = 2, te = 8, ae = 20, Ge = 100, re = 20, ie = 8, Xe = 100, ne = 32, se = 1, Qe = "#2B2D33", oe = "#3D8BF4", ce = "#FFFFFF";
|
|
410
410
|
function Q(o, e, t, a, r) {
|
|
411
411
|
var i = I, n = Ve;
|
|
412
|
-
o.save(), o.translate(e, t), o.rotate(
|
|
412
|
+
o.save(), o.translate(e, t), o.rotate(R.degreesToRadians(r.angle)), o.fillStyle = ce, o.strokeStyle = oe, o.lineWidth = se, o.beginPath(), o.roundRect(-12 / 2, -12 / 2, i, i, n), o.fill(), o.stroke(), o.restore();
|
|
413
413
|
}
|
|
414
414
|
function je(o, e, t, a, r) {
|
|
415
415
|
var i = te, n = ae, s = Ge;
|
|
416
|
-
o.save(), o.translate(e, t), o.rotate(
|
|
416
|
+
o.save(), o.translate(e, t), o.rotate(R.degreesToRadians(r.angle)), o.fillStyle = ce, o.strokeStyle = oe, o.lineWidth = se, o.beginPath(), o.roundRect(-8 / 2, -20 / 2, i, n, s), o.fill(), o.stroke(), o.restore();
|
|
417
417
|
}
|
|
418
418
|
function ye(o, e, t, a, r) {
|
|
419
419
|
var i = re, n = ie, s = Xe;
|
|
420
|
-
o.save(), o.translate(e, t), o.rotate(
|
|
420
|
+
o.save(), o.translate(e, t), o.rotate(R.degreesToRadians(r.angle)), o.fillStyle = ce, o.strokeStyle = oe, o.lineWidth = se, o.beginPath(), o.roundRect(-20 / 2, -8 / 2, i, n, s), o.fill(), o.stroke(), o.restore();
|
|
421
421
|
}
|
|
422
|
-
var Je = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE4Ljc1IDQuMzc1djMuNzVhLjYyNS42MjUgMCAwIDEtLjYyNS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDEgMC0xLjI1aDIuMTRsLTIuMDc3LTEuOTAzLS4wMi0uMDE5YTYuMjUgNi4yNSAwIDEgMC0uMTMgOC45NjcuNjI2LjYyNiAwIDAgMSAuODYuOTA5QTcuNDU2IDcuNDU2IDAgMCAxIDEwIDE3LjVoLS4xMDNhNy41IDcuNSAwIDEgMSA1LjM5Ni0xMi44MTJMMTcuNSA2LjcwM1Y0LjM3NWEuNjI1LjYyNSAwIDAgMSAxLjI1IDBaIi8+PC9zdmc+",
|
|
423
|
-
|
|
422
|
+
var Je = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE4Ljc1IDQuMzc1djMuNzVhLjYyNS42MjUgMCAwIDEtLjYyNS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDEgMC0xLjI1aDIuMTRsLTIuMDc3LTEuOTAzLS4wMi0uMDE5YTYuMjUgNi4yNSAwIDEgMC0uMTMgOC45NjcuNjI2LjYyNiAwIDAgMSAuODYuOTA5QTcuNDU2IDcuNDU2IDAgMCAxIDEwIDE3LjVoLS4xMDNhNy41IDcuNSAwIDEgMSA1LjM5Ni0xMi44MTJMMTcuNSA2LjcwM1Y0LjM3NWEuNjI1LjYyNSAwIDAgMSAxLjI1IDBaIi8+PC9zdmc+", De = new Image();
|
|
423
|
+
De.src = Je;
|
|
424
424
|
function Ke(o, e, t, a, r) {
|
|
425
425
|
var i = ne, n = i / 2;
|
|
426
|
-
o.save(), o.translate(e, t), o.rotate(
|
|
426
|
+
o.save(), o.translate(e, t), o.rotate(R.degreesToRadians(r.angle)), o.fillStyle = Qe, o.beginPath(), o.arc(0, 0, n, 0, 2 * Math.PI), o.fill(), o.drawImage(De, -16 / 2, -16 / 2, n, n), o.restore();
|
|
427
427
|
}
|
|
428
428
|
var $e = {
|
|
429
429
|
// Угловые точки
|
|
@@ -505,6 +505,9 @@ class qe {
|
|
|
505
505
|
sizeY: r.sizeY,
|
|
506
506
|
offsetX: r.offsetX,
|
|
507
507
|
offsetY: r.offsetY
|
|
508
|
+
}), a === "mtr" && (e[a].cursorStyle = "grab", e[a].mouseDownHandler = (i, n, s, c) => {
|
|
509
|
+
var u = n.target;
|
|
510
|
+
u.canvas.setCursor("grabbing");
|
|
508
511
|
});
|
|
509
512
|
}), ke.ownDefaults.controls = e;
|
|
510
513
|
}
|
|
@@ -863,7 +866,7 @@ class gt {
|
|
|
863
866
|
return this._historySuspendCount > 0;
|
|
864
867
|
}
|
|
865
868
|
_createDiffPatcher() {
|
|
866
|
-
this.diffPatcher =
|
|
869
|
+
this.diffPatcher = _e({
|
|
867
870
|
objectHash(e) {
|
|
868
871
|
return [e.id, e.format, e.locked, e.left, e.top, e.width, e.height, e.flipX, e.flipY, e.scaleX, e.scaleY, e.angle, e.opacity].join("-");
|
|
869
872
|
},
|
|
@@ -1001,7 +1004,7 @@ class gt {
|
|
|
1001
1004
|
})();
|
|
1002
1005
|
}
|
|
1003
1006
|
}
|
|
1004
|
-
const vt = 0.1, mt = 2, Mt = 0.1, ft = 90, k = 16, x = 16,
|
|
1007
|
+
const vt = 0.1, mt = 2, Mt = 0.1, ft = 90, k = 16, x = 16, E = 4096, T = 4096;
|
|
1005
1008
|
function Se(o, e, t, a, r, i, n) {
|
|
1006
1009
|
try {
|
|
1007
1010
|
var s = o[i](n), c = s.value;
|
|
@@ -1025,7 +1028,7 @@ function O(o) {
|
|
|
1025
1028
|
});
|
|
1026
1029
|
};
|
|
1027
1030
|
}
|
|
1028
|
-
class
|
|
1031
|
+
class C {
|
|
1029
1032
|
/**
|
|
1030
1033
|
* @param {object} options
|
|
1031
1034
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -1063,7 +1066,7 @@ class A {
|
|
|
1063
1066
|
transformManager: c,
|
|
1064
1067
|
historyManager: u,
|
|
1065
1068
|
errorManager: l
|
|
1066
|
-
} = t.editor, d = yield t.getContentType(a), h =
|
|
1069
|
+
} = t.editor, d = yield t.getContentType(a), h = C.getFormatFromContentType(d), {
|
|
1067
1070
|
acceptContentTypes: g,
|
|
1068
1071
|
acceptFormats: m
|
|
1069
1072
|
} = t;
|
|
@@ -1111,28 +1114,28 @@ class A {
|
|
|
1111
1114
|
}
|
|
1112
1115
|
}), null;
|
|
1113
1116
|
if (t._createdBlobUrls.push(f), h === "svg") {
|
|
1114
|
-
var
|
|
1115
|
-
v =
|
|
1117
|
+
var w = yield xe(f);
|
|
1118
|
+
v = R.groupSVGElements(w.objects, w.options);
|
|
1116
1119
|
} else
|
|
1117
1120
|
v = yield q.fromURL(f, {
|
|
1118
1121
|
crossOrigin: "anonymous"
|
|
1119
1122
|
});
|
|
1120
1123
|
var {
|
|
1121
|
-
width:
|
|
1124
|
+
width: L,
|
|
1122
1125
|
height: y
|
|
1123
1126
|
} = v;
|
|
1124
|
-
if (y >
|
|
1127
|
+
if (y > T || L > E) {
|
|
1125
1128
|
var p = yield t.resizeImageToBoundaries(v._element.src, "max"), B = URL.createObjectURL(p);
|
|
1126
1129
|
t._createdBlobUrls.push(B), v = yield q.fromURL(B, {
|
|
1127
1130
|
crossOrigin: "anonymous"
|
|
1128
1131
|
});
|
|
1129
|
-
} else if (y < x ||
|
|
1130
|
-
var
|
|
1132
|
+
} else if (y < x || L < k) {
|
|
1133
|
+
var W = yield t.resizeImageToBoundaries(v._element.src, "min"), Z = URL.createObjectURL(W);
|
|
1131
1134
|
t._createdBlobUrls.push(Z), v = yield q.fromURL(Z, {
|
|
1132
1135
|
crossOrigin: "anonymous"
|
|
1133
1136
|
});
|
|
1134
1137
|
}
|
|
1135
|
-
if (v.set("id", "".concat(v.type, "-").concat(
|
|
1138
|
+
if (v.set("id", "".concat(v.type, "-").concat(D())), v.set("format", h), r === "scale-montage")
|
|
1136
1139
|
t.editor.canvasManager.scaleMontageAreaToImage({
|
|
1137
1140
|
object: v,
|
|
1138
1141
|
withoutSave: !0
|
|
@@ -1149,7 +1152,7 @@ class A {
|
|
|
1149
1152
|
object: v,
|
|
1150
1153
|
type: "contain",
|
|
1151
1154
|
withoutSave: !0
|
|
1152
|
-
}) : r === "image-cover" && (
|
|
1155
|
+
}) : r === "image-cover" && (L > F || y > z) && c.fitObject({
|
|
1153
1156
|
object: v,
|
|
1154
1157
|
type: "cover",
|
|
1155
1158
|
withoutSave: !0
|
|
@@ -1193,13 +1196,13 @@ class A {
|
|
|
1193
1196
|
resizeImageToBoundaries(e) {
|
|
1194
1197
|
var t = arguments, a = this;
|
|
1195
1198
|
return O(function* () {
|
|
1196
|
-
var r = t.length > 1 && t[1] !== void 0 ? t[1] : "max", i = "Размер изображения больше максимального размера канваса, поэтому оно будет уменьшено до максимальных размеров c сохранением пропорций: ".concat(
|
|
1199
|
+
var r = t.length > 1 && t[1] !== void 0 ? t[1] : "max", i = "Размер изображения больше максимального размера канваса, поэтому оно будет уменьшено до максимальных размеров c сохранением пропорций: ".concat(E, "x").concat(T);
|
|
1197
1200
|
r === "min" && (i = "Размер изображения меньше минимального размера канваса, поэтому оно будет увеличено до минимальных размеров c сохранением пропорций: ".concat(k, "x").concat(x));
|
|
1198
1201
|
var n = {
|
|
1199
1202
|
dataURL: e,
|
|
1200
1203
|
sizeType: r,
|
|
1201
|
-
maxWidth:
|
|
1202
|
-
maxHeight:
|
|
1204
|
+
maxWidth: E,
|
|
1205
|
+
maxHeight: T,
|
|
1203
1206
|
minWidth: k,
|
|
1204
1207
|
minHeight: x
|
|
1205
1208
|
};
|
|
@@ -1237,7 +1240,7 @@ class A {
|
|
|
1237
1240
|
workerManager: u
|
|
1238
1241
|
} = t.editor;
|
|
1239
1242
|
try {
|
|
1240
|
-
var l = r === "application/pdf", d = l ? "image/jpg" : r, h =
|
|
1243
|
+
var l = r === "application/pdf", d = l ? "image/jpg" : r, h = C.getFormatFromContentType(d);
|
|
1241
1244
|
c.setCoords();
|
|
1242
1245
|
var {
|
|
1243
1246
|
left: g,
|
|
@@ -1255,14 +1258,14 @@ class A {
|
|
|
1255
1258
|
}), v.renderAll();
|
|
1256
1259
|
var N = v.getObjects().filter((b) => b.format).every((b) => b.format === "svg");
|
|
1257
1260
|
if (h === "svg" && N) {
|
|
1258
|
-
var
|
|
1261
|
+
var w = v.toSVG();
|
|
1259
1262
|
v.dispose();
|
|
1260
|
-
var
|
|
1263
|
+
var L = C._exportSVGStringAsFile(w, {
|
|
1261
1264
|
exportAsBase64: i,
|
|
1262
1265
|
exportAsBlob: n,
|
|
1263
1266
|
fileName: a
|
|
1264
1267
|
}), y = {
|
|
1265
|
-
image:
|
|
1268
|
+
image: L,
|
|
1266
1269
|
format: "svg",
|
|
1267
1270
|
contentType: "image/svg+xml",
|
|
1268
1271
|
fileName: a.replace(/\.[^/.]+$/, ".svg")
|
|
@@ -1281,11 +1284,11 @@ class A {
|
|
|
1281
1284
|
};
|
|
1282
1285
|
return s.fire("editor:canvas-exported", B), B;
|
|
1283
1286
|
}
|
|
1284
|
-
var
|
|
1287
|
+
var W = yield createImageBitmap(p), Z = yield u.post("toDataURL", {
|
|
1285
1288
|
format: h,
|
|
1286
1289
|
quality: 1,
|
|
1287
|
-
bitmap:
|
|
1288
|
-
}, [
|
|
1290
|
+
bitmap: W
|
|
1291
|
+
}, [W]);
|
|
1289
1292
|
if (l) {
|
|
1290
1293
|
var F = 0.264583, z = M * F, U = f * F, V = (yield t.editor.moduleLoader.loadModule("jspdf")).jsPDF, Y = new V({
|
|
1291
1294
|
orientation: z > U ? "landscape" : "portrait",
|
|
@@ -1293,8 +1296,8 @@ class A {
|
|
|
1293
1296
|
format: [z, U]
|
|
1294
1297
|
});
|
|
1295
1298
|
if (Y.addImage(Z, "JPG", 0, 0, z, U), i) {
|
|
1296
|
-
var
|
|
1297
|
-
image:
|
|
1299
|
+
var Ne = Y.output("datauristring"), de = {
|
|
1300
|
+
image: Ne,
|
|
1298
1301
|
format: "pdf",
|
|
1299
1302
|
contentType: "application/pdf",
|
|
1300
1303
|
fileName: a
|
|
@@ -1383,7 +1386,7 @@ class A {
|
|
|
1383
1386
|
}
|
|
1384
1387
|
}), "";
|
|
1385
1388
|
try {
|
|
1386
|
-
var d =
|
|
1389
|
+
var d = C.getFormatFromContentType(i);
|
|
1387
1390
|
if (d === "svg") {
|
|
1388
1391
|
var h = l.toSVG(), g = t._exportSVGStringAsFile(h, {
|
|
1389
1392
|
exportAsBase64: n,
|
|
@@ -1414,18 +1417,18 @@ class A {
|
|
|
1414
1417
|
S.toBlob(p);
|
|
1415
1418
|
});
|
|
1416
1419
|
if (s) {
|
|
1417
|
-
var
|
|
1420
|
+
var w = {
|
|
1418
1421
|
image: N,
|
|
1419
1422
|
format: d,
|
|
1420
1423
|
contentType: i,
|
|
1421
1424
|
fileName: r
|
|
1422
1425
|
};
|
|
1423
|
-
return c.fire("editor:object-exported",
|
|
1426
|
+
return c.fire("editor:object-exported", w), w;
|
|
1424
1427
|
}
|
|
1425
|
-
var
|
|
1428
|
+
var L = new File([N], r, {
|
|
1426
1429
|
type: i
|
|
1427
1430
|
}), y = {
|
|
1428
|
-
image:
|
|
1431
|
+
image: L,
|
|
1429
1432
|
format: d,
|
|
1430
1433
|
contentType: i,
|
|
1431
1434
|
fileName: r
|
|
@@ -1482,7 +1485,7 @@ class A {
|
|
|
1482
1485
|
* @returns {string[]} - массив допустимых форматов изображений
|
|
1483
1486
|
*/
|
|
1484
1487
|
getAllowedFormatsFromContentTypes() {
|
|
1485
|
-
return this.acceptContentTypes.map((e) =>
|
|
1488
|
+
return this.acceptContentTypes.map((e) => C.getFormatFromContentType(e)).filter((e) => e);
|
|
1486
1489
|
}
|
|
1487
1490
|
/**
|
|
1488
1491
|
* Извлекает чистый формат (subtype) из contentType,
|
|
@@ -1551,7 +1554,7 @@ class A {
|
|
|
1551
1554
|
try {
|
|
1552
1555
|
var t, a = new URL(e), r = (t = a.pathname.split(".").pop()) === null || t === void 0 ? void 0 : t.toLowerCase(), i = {};
|
|
1553
1556
|
return this.acceptContentTypes.forEach((n) => {
|
|
1554
|
-
var s =
|
|
1557
|
+
var s = C.getFormatFromContentType(n);
|
|
1555
1558
|
s && (i[s] = n);
|
|
1556
1559
|
}), i[r] || "application/octet-stream";
|
|
1557
1560
|
} catch (n) {
|
|
@@ -1615,7 +1618,7 @@ class jt {
|
|
|
1615
1618
|
} = this.editor, {
|
|
1616
1619
|
width: c,
|
|
1617
1620
|
height: u
|
|
1618
|
-
} = n, l = Number(Math.max(Math.min(e,
|
|
1621
|
+
} = n, l = Number(Math.max(Math.min(e, E), k));
|
|
1619
1622
|
if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreWidth(s) : this.setCanvasBackstoreWidth(l), n.set({
|
|
1620
1623
|
width: l
|
|
1621
1624
|
}), i.clipPath.set({
|
|
@@ -1659,7 +1662,7 @@ class jt {
|
|
|
1659
1662
|
} = this.editor, {
|
|
1660
1663
|
width: c,
|
|
1661
1664
|
height: u
|
|
1662
|
-
} = n, l = Number(Math.max(Math.min(e,
|
|
1665
|
+
} = n, l = Number(Math.max(Math.min(e, T), x));
|
|
1663
1666
|
if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreHeight(s) : this.setCanvasBackstoreHeight(l), n.set({
|
|
1664
1667
|
height: l
|
|
1665
1668
|
}), i.clipPath.set({
|
|
@@ -1721,7 +1724,7 @@ class jt {
|
|
|
1721
1724
|
}
|
|
1722
1725
|
setCanvasBackstoreWidth(e) {
|
|
1723
1726
|
if (!(!e || typeof e != "number")) {
|
|
1724
|
-
var t = Math.max(Math.min(e,
|
|
1727
|
+
var t = Math.max(Math.min(e, E), k);
|
|
1725
1728
|
this.editor.canvas.setDimensions({
|
|
1726
1729
|
width: t
|
|
1727
1730
|
}, {
|
|
@@ -1731,7 +1734,7 @@ class jt {
|
|
|
1731
1734
|
}
|
|
1732
1735
|
setCanvasBackstoreHeight(e) {
|
|
1733
1736
|
if (!(!e || typeof e != "number")) {
|
|
1734
|
-
var t = Math.max(Math.min(e,
|
|
1737
|
+
var t = Math.max(Math.min(e, T), x);
|
|
1735
1738
|
this.editor.canvas.setDimensions({
|
|
1736
1739
|
height: t
|
|
1737
1740
|
}, {
|
|
@@ -1742,7 +1745,7 @@ class jt {
|
|
|
1742
1745
|
adaptCanvasToContainer() {
|
|
1743
1746
|
var {
|
|
1744
1747
|
canvas: e
|
|
1745
|
-
} = this.editor, t = e.editorContainer, a = t.clientWidth, r = t.clientHeight, i = Math.max(Math.min(a,
|
|
1748
|
+
} = this.editor, t = e.editorContainer, a = t.clientWidth, r = t.clientHeight, i = Math.max(Math.min(a, E), k), n = Math.max(Math.min(r, T), x);
|
|
1746
1749
|
console.log("adaptCanvasToContainer newWidth", i), console.log("adaptCanvasToContainer newHeight", n), e.setDimensions({
|
|
1747
1750
|
width: i,
|
|
1748
1751
|
height: n
|
|
@@ -1925,7 +1928,7 @@ class jt {
|
|
|
1925
1928
|
var {
|
|
1926
1929
|
width: l,
|
|
1927
1930
|
height: d
|
|
1928
|
-
} = u, h = Math.min(l,
|
|
1931
|
+
} = u, h = Math.min(l, E), g = Math.min(d, T);
|
|
1929
1932
|
if (t) {
|
|
1930
1933
|
var {
|
|
1931
1934
|
width: m,
|
|
@@ -2191,7 +2194,7 @@ class yt {
|
|
|
2191
2194
|
historyManager: s
|
|
2192
2195
|
} = this.editor, c = e || i.getActiveObject();
|
|
2193
2196
|
if (c) {
|
|
2194
|
-
if (["activeselection"].includes(c.type) && !r) {
|
|
2197
|
+
if (c.set("angle", 0), ["activeselection"].includes(c.type) && !r) {
|
|
2195
2198
|
var u = c.getObjects();
|
|
2196
2199
|
i.discardActiveObject(), u.forEach((h) => {
|
|
2197
2200
|
var g = n.calculateScaleFactor({
|
|
@@ -2200,7 +2203,7 @@ class yt {
|
|
|
2200
2203
|
});
|
|
2201
2204
|
h.scale(g), i.centerObject(h);
|
|
2202
2205
|
});
|
|
2203
|
-
var l = new
|
|
2206
|
+
var l = new _(u, {
|
|
2204
2207
|
canvas: i
|
|
2205
2208
|
});
|
|
2206
2209
|
i.setActiveObject(l);
|
|
@@ -2545,7 +2548,7 @@ class bt {
|
|
|
2545
2548
|
*/
|
|
2546
2549
|
addRectangle(l = {}, { withoutSelection: c, withoutAdding: u } = {}) {
|
|
2547
2550
|
var d = l, {
|
|
2548
|
-
id: e = `rect-${
|
|
2551
|
+
id: e = `rect-${D()}`,
|
|
2549
2552
|
left: t,
|
|
2550
2553
|
top: a,
|
|
2551
2554
|
width: r = 100,
|
|
@@ -2559,7 +2562,7 @@ class bt {
|
|
|
2559
2562
|
"height",
|
|
2560
2563
|
"fill"
|
|
2561
2564
|
]);
|
|
2562
|
-
const { canvas: h } = this.editor, g = new Ze(
|
|
2565
|
+
const { canvas: h } = this.editor, g = new Ze(A({
|
|
2563
2566
|
id: e,
|
|
2564
2567
|
left: t,
|
|
2565
2568
|
top: a,
|
|
@@ -2587,7 +2590,7 @@ class bt {
|
|
|
2587
2590
|
*/
|
|
2588
2591
|
addCircle(u = {}, { withoutSelection: s, withoutAdding: c } = {}) {
|
|
2589
2592
|
var l = u, {
|
|
2590
|
-
id: e = `circle-${
|
|
2593
|
+
id: e = `circle-${D()}`,
|
|
2591
2594
|
left: t,
|
|
2592
2595
|
top: a,
|
|
2593
2596
|
radius: r = 50,
|
|
@@ -2599,7 +2602,7 @@ class bt {
|
|
|
2599
2602
|
"radius",
|
|
2600
2603
|
"fill"
|
|
2601
2604
|
]);
|
|
2602
|
-
const { canvas: d } = this.editor, h = new ze(
|
|
2605
|
+
const { canvas: d } = this.editor, h = new ze(A({
|
|
2603
2606
|
id: e,
|
|
2604
2607
|
left: t,
|
|
2605
2608
|
top: a,
|
|
@@ -2627,7 +2630,7 @@ class bt {
|
|
|
2627
2630
|
*/
|
|
2628
2631
|
addTriangle(l = {}, { withoutSelection: c, withoutAdding: u } = {}) {
|
|
2629
2632
|
var d = l, {
|
|
2630
|
-
id: e = `triangle-${
|
|
2633
|
+
id: e = `triangle-${D()}`,
|
|
2631
2634
|
left: t,
|
|
2632
2635
|
top: a,
|
|
2633
2636
|
width: r = 100,
|
|
@@ -2641,7 +2644,7 @@ class bt {
|
|
|
2641
2644
|
"height",
|
|
2642
2645
|
"fill"
|
|
2643
2646
|
]);
|
|
2644
|
-
const { canvas: h } = this.editor, g = new Ue(
|
|
2647
|
+
const { canvas: h } = this.editor, g = new Ue(A({
|
|
2645
2648
|
id: e,
|
|
2646
2649
|
left: t,
|
|
2647
2650
|
top: a,
|
|
@@ -2743,11 +2746,11 @@ class It {
|
|
|
2743
2746
|
if (e.clipboard) {
|
|
2744
2747
|
var a = yield e.clipboard.clone(["format"]);
|
|
2745
2748
|
t.discardActiveObject(), a.set({
|
|
2746
|
-
id: "".concat(a.type, "-").concat(
|
|
2749
|
+
id: "".concat(a.type, "-").concat(D()),
|
|
2747
2750
|
left: a.left + 10,
|
|
2748
2751
|
top: a.top + 10,
|
|
2749
2752
|
evented: !0
|
|
2750
|
-
}), a instanceof
|
|
2753
|
+
}), a instanceof _ ? (a.canvas = t, a.forEachObject((r) => {
|
|
2751
2754
|
t.add(r);
|
|
2752
2755
|
})) : t.add(a), t.setActiveObject(a), t.requestRenderAll(), t.fire("editor:object-pasted", {
|
|
2753
2756
|
object: a
|
|
@@ -2869,7 +2872,7 @@ class At {
|
|
|
2869
2872
|
var i = e || a.getActiveObject();
|
|
2870
2873
|
if (i && i.type === "activeselection") {
|
|
2871
2874
|
var n = i.getObjects(), s = new Ye(n);
|
|
2872
|
-
n.forEach((c) => a.remove(c)), s.set("id", "".concat(s.type, "-").concat(
|
|
2875
|
+
n.forEach((c) => a.remove(c)), s.set("id", "".concat(s.type, "-").concat(D())), a.add(s), a.setActiveObject(s), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-grouped");
|
|
2873
2876
|
}
|
|
2874
2877
|
}
|
|
2875
2878
|
/**
|
|
@@ -2892,7 +2895,7 @@ class At {
|
|
|
2892
2895
|
if (!(!i || i.type !== "group")) {
|
|
2893
2896
|
var n = i.removeAll();
|
|
2894
2897
|
a.remove(i), n.forEach((c) => a.add(c));
|
|
2895
|
-
var s = new
|
|
2898
|
+
var s = new _(n, {
|
|
2896
2899
|
canvas: a
|
|
2897
2900
|
});
|
|
2898
2901
|
a.setActiveObject(s), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-ungrouped");
|
|
@@ -2921,7 +2924,7 @@ class Ct {
|
|
|
2921
2924
|
objectLockManager: a
|
|
2922
2925
|
} = this.editor;
|
|
2923
2926
|
e.discardActiveObject();
|
|
2924
|
-
var r = t.getObjects(), i = r.some((s) => s.locked), n = r.length > 1 ? new
|
|
2927
|
+
var r = t.getObjects(), i = r.some((s) => s.locked), n = r.length > 1 ? new _(t.getObjects(), {
|
|
2925
2928
|
canvas: e
|
|
2926
2929
|
}) : r[0];
|
|
2927
2930
|
i && a.lockObject({
|
|
@@ -2933,7 +2936,7 @@ class Ct {
|
|
|
2933
2936
|
});
|
|
2934
2937
|
}
|
|
2935
2938
|
}
|
|
2936
|
-
class
|
|
2939
|
+
class Dt {
|
|
2937
2940
|
/**
|
|
2938
2941
|
* @param {object} options
|
|
2939
2942
|
* @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
|
|
@@ -2969,7 +2972,7 @@ class Nt {
|
|
|
2969
2972
|
}), a.discardActiveObject(), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-deleted"));
|
|
2970
2973
|
}
|
|
2971
2974
|
}
|
|
2972
|
-
var
|
|
2975
|
+
var Nt = {
|
|
2973
2976
|
IMAGE_MANAGER: {
|
|
2974
2977
|
/**
|
|
2975
2978
|
* Некорректный Content-Type изображения
|
|
@@ -2998,86 +3001,74 @@ var Dt = {
|
|
|
2998
3001
|
}
|
|
2999
3002
|
};
|
|
3000
3003
|
class K {
|
|
3001
|
-
constructor(e) {
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
this.
|
|
3004
|
+
constructor({ editor: e }) {
|
|
3005
|
+
this._buffer = [], this.editor = e;
|
|
3006
|
+
}
|
|
3007
|
+
get buffer() {
|
|
3008
|
+
return this._buffer;
|
|
3009
|
+
}
|
|
3010
|
+
cleanBuffer() {
|
|
3011
|
+
this._buffer.length = 0;
|
|
3006
3012
|
}
|
|
3007
3013
|
/**
|
|
3008
3014
|
* Эмитит событие ошибки через fabricjs
|
|
3009
3015
|
* @param {object} options
|
|
3010
|
-
* @param {string} [origin='ImageEditor'] — источник ошибки (по умолчанию 'ImageEditor')
|
|
3011
|
-
* @param {string} [method='Unknown Method'] — метод, вызвавший ошибку (по умолчанию 'Unknown Method')
|
|
3012
|
-
* @param {string} code — код ошибки (из errorCodes)
|
|
3013
|
-
* @param {object} [data] — доп. данные (опционально)
|
|
3014
|
-
* @param {string} [message] — текст ошибки (опционально, если не передан, то используется код ошибки)
|
|
3016
|
+
* @param {string} [options.origin='ImageEditor'] — источник ошибки (по умолчанию 'ImageEditor')
|
|
3017
|
+
* @param {string} [options.method='Unknown Method'] — метод, вызвавший ошибку (по умолчанию 'Unknown Method')
|
|
3018
|
+
* @param {string} options.code — код ошибки (из errorCodes)
|
|
3019
|
+
* @param {object} [options.data] — доп. данные (опционально)
|
|
3020
|
+
* @param {string} [options.message] — текст ошибки (опционально, если не передан, то используется код ошибки)
|
|
3015
3021
|
* @fires editor:error
|
|
3016
3022
|
*/
|
|
3017
|
-
emitError(e) {
|
|
3018
|
-
|
|
3019
|
-
origin: t
|
|
3020
|
-
method: a = "Unknown Method",
|
|
3021
|
-
code: r,
|
|
3022
|
-
data: i,
|
|
3023
|
-
message: n
|
|
3024
|
-
} = e;
|
|
3025
|
-
if (!K.isValidErrorCode(r)) {
|
|
3026
|
-
console.warn("Неизвестный код ошибки: ", {
|
|
3027
|
-
code: r,
|
|
3028
|
-
origin: t,
|
|
3029
|
-
method: a
|
|
3030
|
-
});
|
|
3023
|
+
emitError({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, data: r, message: i }) {
|
|
3024
|
+
if (!K.isValidErrorCode(a)) {
|
|
3025
|
+
console.warn("Неизвестный код ошибки: ", { code: a, origin: e, method: t });
|
|
3031
3026
|
return;
|
|
3032
3027
|
}
|
|
3033
|
-
if (
|
|
3034
|
-
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
}
|
|
3028
|
+
if (!a) return;
|
|
3029
|
+
const n = i || a;
|
|
3030
|
+
console.error(`${e}. ${t}. ${a}. ${n}`, r);
|
|
3031
|
+
const s = {
|
|
3032
|
+
code: a,
|
|
3033
|
+
origin: e,
|
|
3034
|
+
method: t,
|
|
3035
|
+
message: n,
|
|
3036
|
+
data: r
|
|
3037
|
+
};
|
|
3038
|
+
this._buffer.push(A({
|
|
3039
|
+
type: "editor:error"
|
|
3040
|
+
}, s)), this.editor.canvas.fire("editor:error", s);
|
|
3043
3041
|
}
|
|
3044
3042
|
/**
|
|
3045
3043
|
* Эмитит предупреждение через fabricjs
|
|
3046
3044
|
* @param {object} options
|
|
3047
|
-
* @param {string} [origin='ImageEditor'] — источник предупреждения (по умолчанию 'ImageEditor')
|
|
3048
|
-
* @param {string} [method='Unknown Method'] — метод, вызвавший предупреждение (по умолчанию 'Unknown Method')
|
|
3049
|
-
* @param {string} code — код предупреждения (из errorCodes)
|
|
3050
|
-
* @param {object} [data] — доп. данные (опционально)
|
|
3051
|
-
* @param {string} [message] — текст предупреждения (опционально, если не передан, то используется код предупреждения)
|
|
3045
|
+
* @param {string} [options.origin='ImageEditor'] — источник предупреждения (по умолчанию 'ImageEditor')
|
|
3046
|
+
* @param {string} [options.method='Unknown Method'] — метод, вызвавший предупреждение (по умолчанию 'Unknown Method')
|
|
3047
|
+
* @param {string} options.code — код предупреждения (из errorCodes)
|
|
3048
|
+
* @param {object} [options.data] — доп. данные (опционально)
|
|
3049
|
+
* @param {string} [options.message] — текст предупреждения (опционально, если не передан, то используется код предупреждения)
|
|
3052
3050
|
* @fires editor:warning
|
|
3053
3051
|
*/
|
|
3054
|
-
emitWarning(e) {
|
|
3055
|
-
|
|
3056
|
-
origin: t
|
|
3057
|
-
method: a = "Unknown Method",
|
|
3058
|
-
code: r,
|
|
3059
|
-
message: i,
|
|
3060
|
-
data: n
|
|
3061
|
-
} = e;
|
|
3062
|
-
if (!K.isValidErrorCode(r)) {
|
|
3063
|
-
console.warn("Неизвестный код ошибки: ", {
|
|
3064
|
-
code: r,
|
|
3065
|
-
origin: t,
|
|
3066
|
-
method: a
|
|
3067
|
-
});
|
|
3052
|
+
emitWarning({ origin: e = "ImageEditor", method: t = "Unknown Method", code: a, message: r, data: i }) {
|
|
3053
|
+
if (!K.isValidErrorCode(a)) {
|
|
3054
|
+
console.warn("Неизвестный код предупреждения: ", { code: a, origin: e, method: t });
|
|
3068
3055
|
return;
|
|
3069
3056
|
}
|
|
3070
|
-
|
|
3071
|
-
console.warn(
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
|
|
3057
|
+
const n = r || a;
|
|
3058
|
+
console.warn(`${e}. ${t}. ${a}. ${n}`, i);
|
|
3059
|
+
const s = {
|
|
3060
|
+
code: a,
|
|
3061
|
+
origin: e,
|
|
3062
|
+
method: t,
|
|
3063
|
+
message: n,
|
|
3064
|
+
data: i
|
|
3065
|
+
};
|
|
3066
|
+
this._buffer.push(A({
|
|
3067
|
+
type: "editor:warning"
|
|
3068
|
+
}, s)), this.editor.canvas.fire("editor:warning", s);
|
|
3078
3069
|
}
|
|
3079
3070
|
static isValidErrorCode(e) {
|
|
3080
|
-
return e ? Object.values(
|
|
3071
|
+
return e ? Object.values(Nt).some((t) => Object.values(t).includes(e)) : !1;
|
|
3081
3072
|
}
|
|
3082
3073
|
}
|
|
3083
3074
|
class ue {
|
|
@@ -3089,7 +3080,7 @@ class ue {
|
|
|
3089
3080
|
constructor(e, t) {
|
|
3090
3081
|
this.options = t;
|
|
3091
3082
|
const { defaultScale: a, minZoom: r, maxZoom: i } = t;
|
|
3092
|
-
this.containerId = e, this.editorId = `${e}-${
|
|
3083
|
+
this.containerId = e, this.editorId = `${e}-${D()}`, this.clipboard = null, this.defaultZoom = a, this.minZoom = r || vt, this.maxZoom = i || mt, this.init();
|
|
3093
3084
|
}
|
|
3094
3085
|
init() {
|
|
3095
3086
|
return $(this, null, function* () {
|
|
@@ -3105,7 +3096,7 @@ class ue {
|
|
|
3105
3096
|
scaleType: u,
|
|
3106
3097
|
_onReadyCallback: l
|
|
3107
3098
|
} = this.options;
|
|
3108
|
-
if (qe.apply(), this.canvas = new He(this.containerId, this.options), this.moduleLoader = new
|
|
3099
|
+
if (qe.apply(), this.canvas = new He(this.containerId, this.options), this.moduleLoader = new We(), this.workerManager = new Fe(), this.errorManager = new K({ editor: this }), this.historyManager = new gt({ editor: this }), this.toolbar = new ht({ editor: this }), this.transformManager = new yt({ editor: this }), this.canvasManager = new jt({ editor: this }), this.imageManager = new C({ editor: this }), this.layerManager = new J({ editor: this }), this.shapeManager = new bt({ editor: this }), this.interactionBlocker = new pt({ editor: this }), this.clipboardManager = new It({ editor: this }), this.objectLockManager = new St({ editor: this }), this.groupingManager = new At({ editor: this }), this.selectionManager = new Ct({ editor: this }), this.deletionManager = new Dt({ editor: this }), this._createMontageArea(), this._createClippingArea(), this.listeners = new P({ editor: this, options: this.options }), this.canvasManager.setEditorContainerWidth(e), this.canvasManager.setEditorContainerHeight(t), this.canvasManager.setCanvasWrapperWidth(a), this.canvasManager.setCanvasWrapperHeight(r), this.canvasManager.setCanvasCSSWidth(i), this.canvasManager.setCanvasCSSHeight(n), s != null && s.source) {
|
|
3109
3100
|
const {
|
|
3110
3101
|
source: d,
|
|
3111
3102
|
scale: h = `image-${u}`,
|
|
@@ -3159,7 +3150,7 @@ class ue {
|
|
|
3159
3150
|
}, { withoutSelection: !0, withoutAdding: !0 });
|
|
3160
3151
|
}
|
|
3161
3152
|
destroy() {
|
|
3162
|
-
this.listeners.destroy(), this.toolbar.destroy(), this.canvas.dispose(), this.workerManager.worker.terminate(), this.imageManager.revokeBlobUrls();
|
|
3153
|
+
this.listeners.destroy(), this.toolbar.destroy(), this.canvas.dispose(), this.workerManager.worker.terminate(), this.imageManager.revokeBlobUrls(), this.errorManager.cleanBuffer();
|
|
3163
3154
|
}
|
|
3164
3155
|
/**
|
|
3165
3156
|
* Создает паттерн мозаики.
|
|
@@ -3265,7 +3256,7 @@ const wt = {
|
|
|
3265
3256
|
resetObjectFitByDoubleClick: !0
|
|
3266
3257
|
};
|
|
3267
3258
|
function Ot(o, e = {}) {
|
|
3268
|
-
const t =
|
|
3259
|
+
const t = A(A({}, wt), e), a = document.getElementById(o);
|
|
3269
3260
|
if (!a)
|
|
3270
3261
|
return Promise.reject(new Error(`Контейнер с ID "${o}" не найден.`));
|
|
3271
3262
|
const r = document.createElement("canvas");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anu3ev/fabric-image-editor",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.37",
|
|
4
4
|
"description": "JavaScript image editor built on FabricJS, allowing you to create instances with an integrated montage area and providing an API to modify and manage state.",
|
|
5
5
|
"module": "dist/main.js",
|
|
6
6
|
"files": [
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"scripts": {
|
|
11
11
|
"dev": "vite",
|
|
12
12
|
"dev:build": "vite build --watch --mode development --config vite.config.dev.js",
|
|
13
|
+
"prebuild": "npm install",
|
|
13
14
|
"build": "vite build --config vite.config.prod.js",
|
|
14
15
|
"preview": "vite preview",
|
|
15
16
|
"lint": "eslint ."
|