@anu3ev/fabric-image-editor 0.1.12 → 0.1.13

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.
Files changed (2) hide show
  1. package/dist/main.js +318 -228
  2. package/package.json +1 -1
package/dist/main.js CHANGED
@@ -1,4 +1,4 @@
1
- import { ActiveSelection as Z, util as z, controlsUtils as Oe, InteractiveFabricObject as Te, loadSVGFromURL as Ee, FabricImage as de, Point as ke, Rect as xe, Circle as Be, Triangle as Ze, Group as ze, Pattern as Ue, Canvas as Pe } from "fabric";
1
+ import { ActiveSelection as z, util as U, controlsUtils as Oe, InteractiveFabricObject as Te, loadSVGFromURL as Ee, FabricImage as de, Point as ke, Rect as xe, Circle as Be, Triangle as Ze, Group as ze, Pattern as Ue, Canvas as Pe } from "fabric";
2
2
  import { create as Ye } from "jsondiffpatch";
3
3
  var He = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict", I = function() {
4
4
  for (var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 21, t = "", a = crypto.getRandomValues(new Uint8Array(e |= 0)); e--; )
@@ -28,7 +28,7 @@ function We(o) {
28
28
  });
29
29
  };
30
30
  }
31
- class B {
31
+ class Z {
32
32
  /**
33
33
  * Конструктор принимает редактор и опции.
34
34
  * @param {Object} params
@@ -49,7 +49,7 @@ class B {
49
49
  editor: t,
50
50
  options: a = {}
51
51
  } = e;
52
- this.editor = t, this.canvas = t.canvas, this.options = a, this.isUndoRedoKeyPressed = !1, this.handleAdaptCanvasToContainerBound = B.debounce(this.handleAdaptCanvasToContainer.bind(this), 500), this.handleCopyEventBound = this.handleCopyEvent.bind(this), this.handlePasteEventBound = this.handlePasteEvent.bind(this), this.handleUndoRedoEventBound = this.handleUndoRedoEvent.bind(this), this.handleUndoRedoKeyUpBound = this.handleUndoRedoKeyUp.bind(this), this.handleSelectAllEventBound = this.handleSelectAllEvent.bind(this), this.handleDeleteObjectsEventBound = this.handleDeleteObjectsEvent.bind(this), this.handleObjectModifiedHistoryBound = B.debounce(this.handleObjectModifiedHistory.bind(this), 300), this.handleObjectRotatingHistoryBound = B.debounce(this.handleObjectRotatingHistory.bind(this), 300), this.handleObjectAddedHistoryBound = this.handleObjectAddedHistory.bind(this), this.handleObjectRemovedHistoryBound = this.handleObjectRemovedHistory.bind(this), this.handleOverlayUpdateBound = this.handleOverlayUpdate.bind(this), this.handleCanvasDragStartBound = this.handleCanvasDragStart.bind(this), this.handleCanvasDraggingBound = this.handleCanvasDragging.bind(this), this.handleCanvasDragEndBound = this.handleCanvasDragEnd.bind(this), this.handleMouseWheelZoomBound = this.handleMouseWheelZoom.bind(this), this.handleBringToFrontBound = this.handleBringToFront.bind(this), this.handleResetObjectFitBound = this.handleResetObjectFit.bind(this), this.handleLockedSelectionBound = this._filterLockedSelection.bind(this), this.init();
52
+ this.editor = t, this.canvas = t.canvas, this.options = a, this.isUndoRedoKeyPressed = !1, this.handleAdaptCanvasToContainerBound = Z.debounce(this.handleAdaptCanvasToContainer.bind(this), 500), this.handleCopyEventBound = this.handleCopyEvent.bind(this), this.handlePasteEventBound = this.handlePasteEvent.bind(this), this.handleUndoRedoEventBound = this.handleUndoRedoEvent.bind(this), this.handleUndoRedoKeyUpBound = this.handleUndoRedoKeyUp.bind(this), this.handleSelectAllEventBound = this.handleSelectAllEvent.bind(this), this.handleDeleteObjectsEventBound = this.handleDeleteObjectsEvent.bind(this), this.handleObjectModifiedHistoryBound = Z.debounce(this.handleObjectModifiedHistory.bind(this), 300), this.handleObjectRotatingHistoryBound = Z.debounce(this.handleObjectRotatingHistory.bind(this), 300), this.handleObjectAddedHistoryBound = this.handleObjectAddedHistory.bind(this), this.handleObjectRemovedHistoryBound = this.handleObjectRemovedHistory.bind(this), this.handleOverlayUpdateBound = this.handleOverlayUpdate.bind(this), this.handleCanvasDragStartBound = this.handleCanvasDragStart.bind(this), this.handleCanvasDraggingBound = this.handleCanvasDragging.bind(this), this.handleCanvasDragEndBound = this.handleCanvasDragEnd.bind(this), this.handleMouseWheelZoomBound = this.handleMouseWheelZoom.bind(this), this.handleBringToFrontBound = this.handleBringToFront.bind(this), this.handleResetObjectFitBound = this.handleResetObjectFit.bind(this), this.handleLockedSelectionBound = this._filterLockedSelection.bind(this), this.init();
53
53
  }
54
54
  /**
55
55
  * Инициализация всех обработчиков согласно опциям.
@@ -103,7 +103,7 @@ class B {
103
103
  this.canvas.setActiveObject(n[0]);
104
104
  return;
105
105
  }
106
- var i = new Z(n, {
106
+ var i = new z(n, {
107
107
  canvas: this.canvas
108
108
  });
109
109
  this.canvas.setActiveObject(i), this.canvas.requestRenderAll();
@@ -176,6 +176,8 @@ class B {
176
176
  * @param {Object} event — объект события
177
177
  * @param {Object} event.clipboardData — данные из буфера обмена
178
178
  * @param {Array} event.clipboardData.items — элементы буфера обмена
179
+ *
180
+ * TODO: Попробовать вынести методы в классы-менеджеры.
179
181
  */
180
182
  handlePasteEvent(e) {
181
183
  var t, {
@@ -183,25 +185,27 @@ class B {
183
185
  } = e;
184
186
  if (a != null && (t = a.items) !== null && t !== void 0 && t.length) {
185
187
  var {
186
- items: r
187
- } = a, n = r[r.length - 1];
188
- if (n.type.indexOf("image") !== -1) {
189
- var i = n.getAsFile();
190
- if (!i) return;
191
- var s = new FileReader();
192
- s.onload = (h) => {
188
+ imageManager: r
189
+ } = this.editor, {
190
+ items: n
191
+ } = a, i = n[n.length - 1];
192
+ if (i.type.indexOf("image") !== -1) {
193
+ var s = i.getAsFile();
194
+ if (!s) return;
195
+ var c = new FileReader();
196
+ c.onload = (g) => {
193
197
  this.editor.imageManager.importImage({
194
- source: h.target.result
198
+ source: g.target.result
195
199
  });
196
- }, s.readAsDataURL(i);
200
+ }, c.readAsDataURL(s);
197
201
  return;
198
202
  }
199
- var c = a.getData("text/html");
200
- if (c) {
201
- var u = new DOMParser(), l = u.parseFromString(c, "text/html"), d = l.querySelector("img");
202
- if (d != null && d.src) {
203
- this.editor.imageManager.importImage({
204
- source: d.src
203
+ var u = a.getData("text/html");
204
+ if (u) {
205
+ var l = new DOMParser(), d = l.parseFromString(u, "text/html"), h = d.querySelector("img");
206
+ if (h != null && h.src) {
207
+ r.importImage({
208
+ source: h.src
205
209
  });
206
210
  return;
207
211
  }
@@ -440,90 +444,90 @@ class Re {
440
444
  this.worker.terminate();
441
445
  }
442
446
  }
443
- var b = 12, Ve = 2, G = 8, X = 20, Fe = 100, Q = 20, J = 8, Ge = 100, K = 32, $ = 1, Xe = "#2B2D33", q = "#3D8BF4", ee = "#FFFFFF";
444
- function U(o, e, t, a, r) {
445
- var n = b, i = Ve;
446
- o.save(), o.translate(e, t), o.rotate(z.degreesToRadians(r.angle)), o.fillStyle = ee, o.strokeStyle = q, o.lineWidth = $, o.beginPath(), o.roundRect(-12 / 2, -12 / 2, n, n, i), o.fill(), o.stroke(), o.restore();
447
+ var p = 12, Ve = 2, X = 8, Q = 20, Fe = 100, J = 20, K = 8, Ge = 100, $ = 32, q = 1, Xe = "#2B2D33", ee = "#3D8BF4", te = "#FFFFFF";
448
+ function Y(o, e, t, a, r) {
449
+ var n = p, i = Ve;
450
+ o.save(), o.translate(e, t), o.rotate(U.degreesToRadians(r.angle)), o.fillStyle = te, o.strokeStyle = ee, o.lineWidth = q, o.beginPath(), o.roundRect(-12 / 2, -12 / 2, n, n, i), o.fill(), o.stroke(), o.restore();
447
451
  }
448
452
  function he(o, e, t, a, r) {
449
- var n = G, i = X, s = Fe;
450
- o.save(), o.translate(e, t), o.rotate(z.degreesToRadians(r.angle)), o.fillStyle = ee, o.strokeStyle = q, o.lineWidth = $, o.beginPath(), o.roundRect(-8 / 2, -20 / 2, n, i, s), o.fill(), o.stroke(), o.restore();
453
+ var n = X, i = Q, s = Fe;
454
+ o.save(), o.translate(e, t), o.rotate(U.degreesToRadians(r.angle)), o.fillStyle = te, o.strokeStyle = ee, o.lineWidth = q, o.beginPath(), o.roundRect(-8 / 2, -20 / 2, n, i, s), o.fill(), o.stroke(), o.restore();
451
455
  }
452
456
  function ge(o, e, t, a, r) {
453
- var n = Q, i = J, s = Ge;
454
- o.save(), o.translate(e, t), o.rotate(z.degreesToRadians(r.angle)), o.fillStyle = ee, o.strokeStyle = q, o.lineWidth = $, o.beginPath(), o.roundRect(-20 / 2, -8 / 2, n, i, s), o.fill(), o.stroke(), o.restore();
457
+ var n = J, i = K, s = Ge;
458
+ o.save(), o.translate(e, t), o.rotate(U.degreesToRadians(r.angle)), o.fillStyle = te, o.strokeStyle = ee, o.lineWidth = q, o.beginPath(), o.roundRect(-20 / 2, -8 / 2, n, i, s), o.fill(), o.stroke(), o.restore();
455
459
  }
456
460
  var Qe = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE4Ljc1IDQuMzc1djMuNzVhLjYyNS42MjUgMCAwIDEtLjYyNS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDEgMC0xLjI1aDIuMTRsLTIuMDc3LTEuOTAzLS4wMi0uMDE5YTYuMjUgNi4yNSAwIDEgMC0uMTMgOC45NjcuNjI2LjYyNiAwIDAgMSAuODYuOTA5QTcuNDU2IDcuNDU2IDAgMCAxIDEwIDE3LjVoLS4xMDNhNy41IDcuNSAwIDEgMSA1LjM5Ni0xMi44MTJMMTcuNSA2LjcwM1Y0LjM3NWEuNjI1LjYyNSAwIDAgMSAxLjI1IDBaIi8+PC9zdmc+", Ae = new Image();
457
461
  Ae.src = Qe;
458
462
  function Je(o, e, t, a, r) {
459
- var n = K, i = n / 2;
460
- o.save(), o.translate(e, t), o.rotate(z.degreesToRadians(r.angle)), o.fillStyle = Xe, o.beginPath(), o.arc(0, 0, i, 0, 2 * Math.PI), o.fill(), o.drawImage(Ae, -16 / 2, -16 / 2, i, i), o.restore();
463
+ var n = $, i = n / 2;
464
+ o.save(), o.translate(e, t), o.rotate(U.degreesToRadians(r.angle)), o.fillStyle = Xe, o.beginPath(), o.arc(0, 0, i, 0, 2 * Math.PI), o.fill(), o.drawImage(Ae, -16 / 2, -16 / 2, i, i), o.restore();
461
465
  }
462
466
  var Ke = {
463
467
  // Угловые точки
464
468
  tl: {
465
- render: U,
466
- sizeX: b,
467
- sizeY: b,
469
+ render: Y,
470
+ sizeX: p,
471
+ sizeY: p,
468
472
  offsetX: 0,
469
473
  offsetY: 0
470
474
  },
471
475
  tr: {
472
- render: U,
473
- sizeX: b,
474
- sizeY: b,
476
+ render: Y,
477
+ sizeX: p,
478
+ sizeY: p,
475
479
  offsetX: 0,
476
480
  offsetY: 0
477
481
  },
478
482
  bl: {
479
- render: U,
480
- sizeX: b,
481
- sizeY: b,
483
+ render: Y,
484
+ sizeX: p,
485
+ sizeY: p,
482
486
  offsetX: 0,
483
487
  offsetY: 0
484
488
  },
485
489
  br: {
486
- render: U,
487
- sizeX: b,
488
- sizeY: b,
490
+ render: Y,
491
+ sizeX: p,
492
+ sizeY: p,
489
493
  offsetX: 0,
490
494
  offsetY: 0
491
495
  },
492
496
  // Середина вертикалей
493
497
  ml: {
494
498
  render: he,
495
- sizeX: G,
496
- sizeY: X,
499
+ sizeX: X,
500
+ sizeY: Q,
497
501
  offsetX: 0,
498
502
  offsetY: 0
499
503
  },
500
504
  mr: {
501
505
  render: he,
502
- sizeX: G,
503
- sizeY: X,
506
+ sizeX: X,
507
+ sizeY: Q,
504
508
  offsetX: 0,
505
509
  offsetY: 0
506
510
  },
507
511
  // Середина горизонталей
508
512
  mt: {
509
513
  render: ge,
510
- sizeX: Q,
511
- sizeY: J,
514
+ sizeX: J,
515
+ sizeY: K,
512
516
  offsetX: 0,
513
517
  offsetY: 0
514
518
  },
515
519
  mb: {
516
520
  render: ge,
517
- sizeX: Q,
518
- sizeY: J,
521
+ sizeX: J,
522
+ sizeY: K,
519
523
  offsetX: 0,
520
524
  offsetY: 0
521
525
  },
522
526
  // Специальный «rotate» контрол
523
527
  mtr: {
524
528
  render: Je,
525
- sizeX: K,
526
- sizeY: K,
529
+ sizeX: $,
530
+ sizeY: $,
527
531
  offsetX: 0,
528
532
  offsetY: -32
529
533
  }
@@ -567,7 +571,7 @@ function st(o) {
567
571
  });
568
572
  };
569
573
  }
570
- const E = {
574
+ const k = {
571
575
  style: {
572
576
  position: "absolute",
573
577
  display: "none",
@@ -678,7 +682,7 @@ function me(o, e) {
678
682
  }
679
683
  return t;
680
684
  }
681
- function M(o) {
685
+ function j(o) {
682
686
  for (var e = 1; e < arguments.length; e++) {
683
687
  var t = arguments[e] != null ? arguments[e] : {};
684
688
  e % 2 ? me(Object(t), !0).forEach(function(a) {
@@ -718,11 +722,11 @@ class lt {
718
722
  if (this.options = t.options, !!this.options.showToolbar) {
719
723
  this.editor = t, this.canvas = t.canvas;
720
724
  var a = this.options.toolbar || {};
721
- this.config = M(M(M({}, E), a), {}, {
722
- style: M(M({}, E.style), a.style || {}),
723
- btnStyle: M(M({}, E.btnStyle), a.btnStyle || {}),
724
- icons: M(M({}, E.icons), a.icons || {}),
725
- handlers: M(M({}, E.handlers), a.handlers || {})
725
+ this.config = j(j(j({}, k), a), {}, {
726
+ style: j(j({}, k.style), a.style || {}),
727
+ btnStyle: j(j({}, k.btnStyle), a.btnStyle || {}),
728
+ icons: j(j({}, k.icons), a.icons || {}),
729
+ handlers: j(j({}, k.handlers), a.handlers || {})
726
730
  }), this.currentTarget = null, this.currentLocked = null, this.isTransforming = !1, this._onMouseDown = this._handleMouseDown.bind(this), this._onObjectMoving = this._startTransform.bind(this), this._onObjectScaling = this._startTransform.bind(this), this._onObjectRotating = this._startTransform.bind(this), this._onMouseUp = this._endTransform.bind(this), this._onObjectModified = this._endTransform.bind(this), this._onSelectionChange = this._updateToolbar.bind(this), this._onSelectionClear = () => {
727
731
  this.el.style.display = "none";
728
732
  }, this._createDOM(), this._bindEvents();
@@ -866,7 +870,7 @@ function fe(o, e, t, a, r, n, i) {
866
870
  }
867
871
  s.done ? e(c) : Promise.resolve(c).then(a, r);
868
872
  }
869
- function R(o) {
873
+ function V(o) {
870
874
  return function() {
871
875
  var e = this, t = arguments;
872
876
  return new Promise(function(a, r) {
@@ -970,7 +974,7 @@ class ht {
970
974
  */
971
975
  loadStateFromFullState(e) {
972
976
  var t = this;
973
- return R(function* () {
977
+ return V(function* () {
974
978
  if (e) {
975
979
  console.log("loadStateFromFullState fullState", e), yield t.canvas.loadFromJSON(e);
976
980
  var a = t.canvas.getObjects().find((n) => n.id === "montage-area");
@@ -986,7 +990,7 @@ class ht {
986
990
  */
987
991
  undo() {
988
992
  var e = this;
989
- return R(function* () {
993
+ return V(function* () {
990
994
  if (!e.skipHistory) {
991
995
  if (e.currentIndex <= 0) {
992
996
  console.log("Нет предыдущих состояний для отмены.");
@@ -1013,7 +1017,7 @@ class ht {
1013
1017
  */
1014
1018
  redo() {
1015
1019
  var e = this;
1016
- return R(function* () {
1020
+ return V(function* () {
1017
1021
  if (!e.skipHistory) {
1018
1022
  if (e.currentIndex >= e.patches.length) {
1019
1023
  console.log("Нет состояний для повтора.");
@@ -1035,7 +1039,7 @@ class ht {
1035
1039
  })();
1036
1040
  }
1037
1041
  }
1038
- var gt = 0.1, vt = 2, mt = 0.1, ft = 90, k = 16, x = 16, N = 4096, D = 4096;
1042
+ var gt = 0.1, vt = 2, mt = 0.1, ft = 90, x = 16, B = 16, D = 4096, N = 4096;
1039
1043
  function Me(o, e, t, a, r, n, i) {
1040
1044
  try {
1041
1045
  var s = o[n](i), c = s.value;
@@ -1044,7 +1048,7 @@ function Me(o, e, t, a, r, n, i) {
1044
1048
  }
1045
1049
  s.done ? e(c) : Promise.resolve(c).then(a, r);
1046
1050
  }
1047
- function P(o) {
1051
+ function T(o) {
1048
1052
  return function() {
1049
1053
  var e = this, t = arguments;
1050
1054
  return new Promise(function(a, r) {
@@ -1059,7 +1063,7 @@ function P(o) {
1059
1063
  });
1060
1064
  };
1061
1065
  }
1062
- class L {
1066
+ class C {
1063
1067
  /**
1064
1068
  * @param {object} options
1065
1069
  * @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
@@ -1083,82 +1087,89 @@ class L {
1083
1087
  */
1084
1088
  importImage(e) {
1085
1089
  var t = this;
1086
- return P(function* () {
1090
+ return T(function* () {
1087
1091
  var {
1088
1092
  source: a,
1089
1093
  scale: r = "image-".concat(t.options.scaleType),
1090
- withoutSave: n = !1,
1091
- contentType: i = "image/png"
1094
+ withoutSave: n = !1
1092
1095
  } = e;
1093
1096
  if (a) {
1097
+ var i = yield t.getContentType(a);
1098
+ if (!t.isAllowedContentType(i)) {
1099
+ var s = "Неверный contentType для изображения: ".concat(i, ". Ожидается один из: ").concat(t.options.acceptContentTypes.join(", "), ".");
1100
+ console.error("ImageManager. ".concat(s)), t.editor.canvas.fire("editor:error", {
1101
+ message: s
1102
+ });
1103
+ return;
1104
+ }
1094
1105
  var {
1095
- canvas: s,
1096
- montageArea: c,
1097
- transformManager: u,
1098
- historyManager: l
1106
+ canvas: c,
1107
+ montageArea: u,
1108
+ transformManager: l,
1109
+ historyManager: d
1099
1110
  } = t.editor;
1100
- l.suspendHistory();
1111
+ d.suspendHistory();
1101
1112
  try {
1102
- var d, h;
1113
+ var h, g;
1103
1114
  if (a instanceof File)
1104
- d = URL.createObjectURL(a);
1115
+ h = URL.createObjectURL(a);
1105
1116
  else if (typeof a == "string") {
1106
- var g = yield fetch(a, {
1117
+ var v = yield fetch(a, {
1107
1118
  mode: "cors"
1108
- }), v = yield g.blob({
1119
+ }), f = yield v.blob({
1109
1120
  type: i,
1110
1121
  quality: 1
1111
1122
  });
1112
- d = URL.createObjectURL(v);
1123
+ h = URL.createObjectURL(f);
1113
1124
  } else
1114
1125
  throw new Error("ImportImage. Неверный тип источника изображения. Ожидается URL или объект File.");
1115
- t._createdBlobUrls.push(d);
1116
- var m = L.getFormatFromContentType(i);
1117
- if (m === "svg") {
1118
- var j = yield Ee(d);
1119
- h = z.groupSVGElements(j.objects, j.options);
1126
+ t._createdBlobUrls.push(h);
1127
+ var y = C.getFormatFromContentType(i);
1128
+ if (y === "svg") {
1129
+ var m = yield Ee(h);
1130
+ g = U.groupSVGElements(m.objects, m.options);
1120
1131
  } else
1121
- h = yield de.fromURL(d, {
1132
+ g = yield de.fromURL(h, {
1122
1133
  crossOrigin: "anonymous"
1123
1134
  });
1124
1135
  var {
1125
- width: f,
1126
- height: p
1127
- } = h;
1128
- if (p > D || f > N) {
1129
- var y = yield t.resizeImageToBoundaries(h._element.src, "max"), S = URL.createObjectURL(y);
1130
- t._createdBlobUrls.push(S), h = yield de.fromURL(S, {
1136
+ width: b,
1137
+ height: M
1138
+ } = g;
1139
+ if (M > N || b > D) {
1140
+ var L = yield t.resizeImageToBoundaries(g._element.src, "max"), O = URL.createObjectURL(L);
1141
+ t._createdBlobUrls.push(O), g = yield de.fromURL(O, {
1131
1142
  crossOrigin: "anonymous"
1132
1143
  });
1133
1144
  }
1134
- if (h.set("id", "".concat(h.type, "-").concat(I())), h.set("format", m), r === "scale-montage")
1145
+ if (g.set("id", "".concat(g.type, "-").concat(I())), g.set("format", y), r === "scale-montage")
1135
1146
  t.editor.canvasManager.scaleMontageAreaToImage({
1136
- object: h,
1147
+ object: g,
1137
1148
  withoutSave: !0
1138
1149
  });
1139
1150
  else {
1140
1151
  var {
1141
- width: O,
1152
+ width: S,
1142
1153
  height: A
1143
- } = c, w = t.calculateScaleFactor({
1144
- imageObject: h,
1154
+ } = u, P = t.calculateScaleFactor({
1155
+ imageObject: g,
1145
1156
  scaleType: r
1146
1157
  });
1147
- r === "image-contain" && w < 1 ? u.fitObject({
1148
- object: h,
1158
+ r === "image-contain" && P < 1 ? l.fitObject({
1159
+ object: g,
1149
1160
  type: "contain",
1150
1161
  withoutSave: !0
1151
- }) : r === "image-cover" && (f > O || p > A) && u.fitObject({
1152
- object: h,
1162
+ }) : r === "image-cover" && (b > S || M > A) && l.fitObject({
1163
+ object: g,
1153
1164
  type: "cover",
1154
1165
  withoutSave: !0
1155
1166
  });
1156
1167
  }
1157
- s.add(h), s.centerObject(h), s.setActiveObject(h), s.renderAll(), l.resumeHistory(), n || l.saveState();
1158
- } catch (T) {
1159
- console.error("importImage. Ошибка импорта изображения: ", T), s.fire("editor:error", {
1160
- message: "Ошибка импорта изображения: ".concat(T.message)
1161
- }), l.resumeHistory();
1168
+ c.add(g), c.centerObject(g), c.setActiveObject(g), c.renderAll(), d.resumeHistory(), n || d.saveState();
1169
+ } catch (E) {
1170
+ console.error("importImage. Ошибка импорта изображения: ", E), c.fire("editor:error", {
1171
+ message: "Ошибка импорта изображения: ".concat(E.message)
1172
+ }), d.resumeHistory();
1162
1173
  }
1163
1174
  }
1164
1175
  })();
@@ -1173,15 +1184,15 @@ class L {
1173
1184
  */
1174
1185
  resizeImageToBoundaries(e) {
1175
1186
  var t = arguments, a = this;
1176
- return P(function* () {
1177
- var r = t.length > 1 && t[1] !== void 0 ? t[1] : "max", n = "Размер изображения больше максимального размера канваса, поэтому оно будет уменьшено до максимальных размеров: ".concat(N, "x").concat(D);
1187
+ return T(function* () {
1188
+ var r = t.length > 1 && t[1] !== void 0 ? t[1] : "max", n = "Размер изображения больше максимального размера канваса, поэтому оно будет уменьшено до максимальных размеров: ".concat(D, "x").concat(N);
1178
1189
  console.warn("importImage. ".concat(n)), a.editor.canvas.fire("editor:warning", {
1179
1190
  message: n
1180
1191
  });
1181
1192
  var i = yield a.editor.workerManager.post("resizeImage", {
1182
1193
  dataURL: e,
1183
- maxWidth: N,
1184
- maxHeight: D,
1194
+ maxWidth: D,
1195
+ maxHeight: N,
1185
1196
  sizeType: r
1186
1197
  });
1187
1198
  return i;
@@ -1200,7 +1211,7 @@ class L {
1200
1211
  */
1201
1212
  exportCanvasAsImageFile() {
1202
1213
  var e = arguments, t = this;
1203
- return P(function* () {
1214
+ return T(function* () {
1204
1215
  var {
1205
1216
  fileName: a = "image.png",
1206
1217
  contentType: r = "image/png",
@@ -1210,63 +1221,63 @@ class L {
1210
1221
  canvas: s,
1211
1222
  montageArea: c,
1212
1223
  workerManager: u
1213
- } = t.editor, l = r === "application/pdf", d = l ? "image/jpg" : r, h = L.getFormatFromContentType(d);
1224
+ } = t.editor, l = r === "application/pdf", d = l ? "image/jpg" : r, h = C.getFormatFromContentType(d);
1214
1225
  c.setCoords();
1215
1226
  var {
1216
1227
  left: g,
1217
1228
  top: v,
1218
- width: m,
1219
- height: j
1220
- } = c.getBoundingRect(), f = yield s.clone(["id", "format", "locked"]);
1221
- ["image/jpg", "image/jpeg"].includes(d) && (f.backgroundColor = "#ffffff");
1222
- var p = f.getObjects().find((C) => C.id === c.id);
1223
- p.visible = !1, f.viewportTransform = [1, 0, 0, 1, -g, -v], f.setDimensions({
1224
- width: m,
1225
- height: j
1229
+ width: f,
1230
+ height: y
1231
+ } = c.getBoundingRect(), m = yield s.clone(["id", "format", "locked"]);
1232
+ ["image/jpg", "image/jpeg"].includes(d) && (m.backgroundColor = "#ffffff");
1233
+ var b = m.getObjects().find((w) => w.id === c.id);
1234
+ b.visible = !1, m.viewportTransform = [1, 0, 0, 1, -g, -v], m.setDimensions({
1235
+ width: f,
1236
+ height: y
1226
1237
  }, {
1227
1238
  backstoreOnly: !0
1228
- }), f.renderAll();
1229
- var y = f.getObjects().filter((C) => C.format).every((C) => C.format === "svg");
1230
- if (h === "svg" && y) {
1231
- var S = f.toSVG();
1232
- f.dispose();
1233
- var O = L._exportSVGStringAsFile(S, {
1239
+ }), m.renderAll();
1240
+ var M = m.getObjects().filter((w) => w.format).every((w) => w.format === "svg");
1241
+ if (h === "svg" && M) {
1242
+ var L = m.toSVG();
1243
+ m.dispose();
1244
+ var O = C._exportSVGStringAsFile(L, {
1234
1245
  exportAsBase64: n,
1235
1246
  exportAsBlob: i,
1236
1247
  fileName: a
1237
- }), A = {
1248
+ }), S = {
1238
1249
  image: O,
1239
1250
  format: "svg",
1240
1251
  contentType: "image/svg+xml",
1241
1252
  fileName: a.replace(/\.[^/.]+$/, ".svg")
1242
1253
  };
1243
- return s.fire("editor:canvas-exported", A), A;
1254
+ return s.fire("editor:canvas-exported", S), S;
1244
1255
  }
1245
- var w = yield new Promise((C) => {
1246
- f.getElement().toBlob(C);
1256
+ var A = yield new Promise((w) => {
1257
+ m.getElement().toBlob(w);
1247
1258
  });
1248
- if (f.dispose(), i) {
1249
- var T = {
1250
- image: w,
1259
+ if (m.dispose(), i) {
1260
+ var P = {
1261
+ image: A,
1251
1262
  format: h,
1252
1263
  contentType: d,
1253
1264
  fileName: a
1254
1265
  };
1255
- return s.fire("editor:canvas-exported", T), T;
1266
+ return s.fire("editor:canvas-exported", P), P;
1256
1267
  }
1257
- var ae = yield createImageBitmap(w), re = yield u.post("toDataURL", {
1268
+ var E = yield createImageBitmap(A), re = yield u.post("toDataURL", {
1258
1269
  format: h,
1259
1270
  quality: 1,
1260
- bitmap: ae
1261
- }, [ae]);
1271
+ bitmap: E
1272
+ }, [E]);
1262
1273
  if (l) {
1263
- var ne = 0.264583, H = m * ne, W = j * ne, we = (yield t.editor.moduleLoader.loadModule("jspdf")).jsPDF, _ = new we({
1264
- orientation: H > W ? "landscape" : "portrait",
1274
+ var ne = 0.264583, W = f * ne, _ = y * ne, we = (yield t.editor.moduleLoader.loadModule("jspdf")).jsPDF, R = new we({
1275
+ orientation: W > _ ? "landscape" : "portrait",
1265
1276
  unit: "mm",
1266
- format: [H, W]
1277
+ format: [W, _]
1267
1278
  });
1268
- if (_.addImage(re, "JPG", 0, 0, H, W), n) {
1269
- var Ce = _.output("datauristring"), ie = {
1279
+ if (R.addImage(re, "JPG", 0, 0, W, _), n) {
1280
+ var Ce = R.output("datauristring"), ie = {
1270
1281
  image: Ce,
1271
1282
  format: "pdf",
1272
1283
  contentType: "application/pdf",
@@ -1274,10 +1285,10 @@ class L {
1274
1285
  };
1275
1286
  return s.fire("editor:canvas-exported", ie), ie;
1276
1287
  }
1277
- var Ne = _.output("blob"), De = new File([Ne], a, {
1288
+ var De = R.output("blob"), Ne = new File([De], a, {
1278
1289
  type: "application/pdf"
1279
1290
  }), oe = {
1280
- image: De,
1291
+ image: Ne,
1281
1292
  format: "pdf",
1282
1293
  contentType: "application/pdf",
1283
1294
  fileName: a
@@ -1293,7 +1304,7 @@ class L {
1293
1304
  };
1294
1305
  return s.fire("editor:canvas-exported", se), se;
1295
1306
  }
1296
- var ce = h === "svg" && !y ? a.replace(/\.[^/.]+$/, ".png") : a, Le = new File([w], ce, {
1307
+ var ce = h === "svg" && !M ? a.replace(/\.[^/.]+$/, ".png") : a, Le = new File([A], ce, {
1297
1308
  type: d
1298
1309
  }), ue = {
1299
1310
  image: Le,
@@ -1317,7 +1328,7 @@ class L {
1317
1328
  */
1318
1329
  exportObjectAsImageFile() {
1319
1330
  var e = arguments, t = this;
1320
- return P(function* () {
1331
+ return T(function* () {
1321
1332
  var {
1322
1333
  object: a,
1323
1334
  fileName: r = "image.png",
@@ -1332,7 +1343,7 @@ class L {
1332
1343
  return console.error("exportObjectAsDataURL. Не выбран объект"), c.fire("editor:error", {
1333
1344
  message: "Не выбран объект для экспорта"
1334
1345
  }), "";
1335
- var d = L.getFormatFromContentType(n);
1346
+ var d = C.getFormatFromContentType(n);
1336
1347
  if (d === "svg") {
1337
1348
  var h = l.toSVG(), g = t._exportSVGStringAsFile(h, {
1338
1349
  exportAsBase64: i,
@@ -1347,39 +1358,39 @@ class L {
1347
1358
  return c.fire("editor:object-exported", v), v;
1348
1359
  }
1349
1360
  if (i) {
1350
- var m = yield createImageBitmap(l._element), j = yield u.post("toDataURL", {
1361
+ var f = yield createImageBitmap(l._element), y = yield u.post("toDataURL", {
1351
1362
  format: d,
1352
1363
  quality: 1,
1353
- bitmap: m
1354
- }, [m]), f = {
1355
- image: j,
1364
+ bitmap: f
1365
+ }, [f]), m = {
1366
+ image: y,
1356
1367
  format: d,
1357
1368
  contentType: n,
1358
1369
  fileName: r
1359
1370
  };
1360
- return c.fire("editor:object-exported", f), f;
1371
+ return c.fire("editor:object-exported", m), m;
1361
1372
  }
1362
- var p = l.toCanvasElement(), y = yield new Promise((w) => {
1363
- p.toBlob(w);
1373
+ var b = l.toCanvasElement(), M = yield new Promise((A) => {
1374
+ b.toBlob(A);
1364
1375
  });
1365
1376
  if (s) {
1366
- var S = {
1367
- image: y,
1377
+ var L = {
1378
+ image: M,
1368
1379
  format: d,
1369
1380
  contentType: n,
1370
1381
  fileName: r
1371
1382
  };
1372
- return c.fire("editor:object-exported", S), S;
1383
+ return c.fire("editor:object-exported", L), L;
1373
1384
  }
1374
- var O = new File([y], r, {
1385
+ var O = new File([M], r, {
1375
1386
  type: n
1376
- }), A = {
1387
+ }), S = {
1377
1388
  image: O,
1378
1389
  format: d,
1379
1390
  contentType: n,
1380
1391
  fileName: r
1381
1392
  };
1382
- return c.fire("editor:object-exported", A), A;
1393
+ return c.fire("editor:object-exported", S), S;
1383
1394
  })();
1384
1395
  }
1385
1396
  /**
@@ -1423,6 +1434,84 @@ class L {
1423
1434
  var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "", t = e.match(/^[^/]+\/([^+;]+)/);
1424
1435
  return t ? t[1] : "";
1425
1436
  }
1437
+ /**
1438
+ * Проверяет, является ли contentType допустимым типом изображения.
1439
+ * @param {string} contentType - тип контента
1440
+ * @returns {boolean} true, если contentType допустим, иначе false
1441
+ */
1442
+ isAllowedContentType() {
1443
+ var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "", {
1444
+ acceptContentTypes: t
1445
+ } = this.editor.options;
1446
+ return t.includes(e);
1447
+ }
1448
+ /**
1449
+ * Проверяет, является ли формат допустимым.
1450
+ * @param {string} format - формат изображения, например 'png', 'jpeg', 'svg'
1451
+ * @returns {boolean} true, если формат допустим, иначе false
1452
+ */
1453
+ isAllowedFormat() {
1454
+ var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "", {
1455
+ acceptContentTypes: t
1456
+ } = this.editor.options, a = "image/".concat(e);
1457
+ return t.includes(a);
1458
+ }
1459
+ /**
1460
+ * Получает contentType изображения из источника
1461
+ * @param {File|string} source - URL изображения или объект File
1462
+ * @returns {Promise<string>|string} - MIME-тип изображения
1463
+ * @public
1464
+ */
1465
+ getContentType(e) {
1466
+ var t = this;
1467
+ return T(function* () {
1468
+ return typeof e == "string" ? t.getContentTypeFromUrl(e) : e.type || "application/octet-stream";
1469
+ })();
1470
+ }
1471
+ /**
1472
+ * Получает contentType изображения через HTTP HEAD запрос или анализ URL
1473
+ * @param {string} src - URL изображения
1474
+ * @returns {Promise<string>} - MIME-тип изображения
1475
+ * @public
1476
+ */
1477
+ getContentTypeFromUrl(e) {
1478
+ var t = this;
1479
+ return T(function* () {
1480
+ if (e.startsWith("data:")) {
1481
+ var a = e.match(/^data:([^;]+)/);
1482
+ return a ? a[1] : "application/octet-stream";
1483
+ }
1484
+ try {
1485
+ var r = yield fetch(e, {
1486
+ method: "HEAD"
1487
+ }), n = r.headers.get("content-type");
1488
+ if (n && n.startsWith("image/"))
1489
+ return n.split(";")[0];
1490
+ } catch (i) {
1491
+ console.warn("HEAD запрос неудачен, определяем тип по расширению:", i);
1492
+ }
1493
+ return t.getContentTypeFromExtension(e);
1494
+ })();
1495
+ }
1496
+ /**
1497
+ * Определяет contentType по расширению файла в URL
1498
+ * @param {string} url - URL файла
1499
+ * @returns {string} - MIME-тип
1500
+ * @public
1501
+ */
1502
+ getContentTypeFromExtension(e) {
1503
+ try {
1504
+ var t, {
1505
+ acceptContentTypes: a
1506
+ } = this.editor.options, r = new URL(e), n = (t = r.pathname.split(".").pop()) === null || t === void 0 ? void 0 : t.toLowerCase(), i = {};
1507
+ return a.forEach((s) => {
1508
+ var c = C.getFormatFromContentType(s);
1509
+ c && (i[c] = s);
1510
+ }), i[n] || "application/octet-stream";
1511
+ } catch (s) {
1512
+ return console.warn("Не удалось определить расширение из URL:", e, s), "application/octet-stream";
1513
+ }
1514
+ }
1426
1515
  /**
1427
1516
  * Рассчитывает коэффициент масштабирования изображения.
1428
1517
  * @param {object} imageObject - объект изображения
@@ -1479,7 +1568,7 @@ class Mt {
1479
1568
  } = this.editor, {
1480
1569
  width: c,
1481
1570
  height: u
1482
- } = i, l = Number(Math.max(Math.min(e, N), k));
1571
+ } = i, l = Number(Math.max(Math.min(e, D), x));
1483
1572
  if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreWidth(s) : this.setCanvasBackstoreWidth(l), i.set({
1484
1573
  width: l
1485
1574
  }), n.clipPath.set({
@@ -1492,8 +1581,8 @@ class Mt {
1492
1581
  var {
1493
1582
  left: g,
1494
1583
  top: v
1495
- } = this.getObjectDefaultCoords(i), m = n.getZoom();
1496
- n.setViewportTransform([m, 0, 0, m, g, v]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), n == null || n.fire("editor:resolution-width-changed", {
1584
+ } = this.getObjectDefaultCoords(i), f = n.getZoom();
1585
+ n.setViewportTransform([f, 0, 0, f, g, v]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), n == null || n.fire("editor:resolution-width-changed", {
1497
1586
  width: e
1498
1587
  });
1499
1588
  }
@@ -1522,7 +1611,7 @@ class Mt {
1522
1611
  } = this.editor, {
1523
1612
  width: c,
1524
1613
  height: u
1525
- } = i, l = Number(Math.max(Math.min(e, D), x));
1614
+ } = i, l = Number(Math.max(Math.min(e, N), B));
1526
1615
  if (!s || s === "auto" || r ? this.adaptCanvasToContainer() : s ? this.setCanvasBackstoreHeight(s) : this.setCanvasBackstoreHeight(l), i.set({
1527
1616
  height: l
1528
1617
  }), n.clipPath.set({
@@ -1535,8 +1624,8 @@ class Mt {
1535
1624
  var {
1536
1625
  left: g,
1537
1626
  top: v
1538
- } = this.getObjectDefaultCoords(i), m = n.getZoom();
1539
- n.setViewportTransform([m, 0, 0, m, g, v]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), n == null || n.fire("editor:resolution-height-changed", {
1627
+ } = this.getObjectDefaultCoords(i), f = n.getZoom();
1628
+ n.setViewportTransform([f, 0, 0, f, g, v]), this.centerMontageArea(), a || this.editor.historyManager.saveState(), n == null || n.fire("editor:resolution-height-changed", {
1540
1629
  height: e
1541
1630
  });
1542
1631
  }
@@ -1584,7 +1673,7 @@ class Mt {
1584
1673
  }
1585
1674
  setCanvasBackstoreWidth(e) {
1586
1675
  if (!(!e || typeof e != "number")) {
1587
- var t = Math.max(Math.min(e, N), k);
1676
+ var t = Math.max(Math.min(e, D), x);
1588
1677
  this.editor.canvas.setDimensions({
1589
1678
  width: t
1590
1679
  }, {
@@ -1594,7 +1683,7 @@ class Mt {
1594
1683
  }
1595
1684
  setCanvasBackstoreHeight(e) {
1596
1685
  if (!(!e || typeof e != "number")) {
1597
- var t = Math.max(Math.min(e, D), x);
1686
+ var t = Math.max(Math.min(e, N), B);
1598
1687
  this.editor.canvas.setDimensions({
1599
1688
  height: t
1600
1689
  }, {
@@ -1605,7 +1694,7 @@ class Mt {
1605
1694
  adaptCanvasToContainer() {
1606
1695
  var {
1607
1696
  canvas: e
1608
- } = this.editor, t = e.editorContainer, a = t.clientWidth, r = t.clientHeight, n = Math.max(Math.min(a, N), k), i = Math.max(Math.min(r, D), x);
1697
+ } = this.editor, t = e.editorContainer, a = t.clientWidth, r = t.clientHeight, n = Math.max(Math.min(a, D), x), i = Math.max(Math.min(r, N), B);
1609
1698
  console.log("adaptCanvasToContainer newWidth", n), console.log("adaptCanvasToContainer newHeight", i), e.setDimensions({
1610
1699
  width: n,
1611
1700
  height: i
@@ -1766,19 +1855,19 @@ class Mt {
1766
1855
  width: l,
1767
1856
  height: d
1768
1857
  } = u;
1769
- if (l < k || d < x) {
1770
- var h = "Размер изображения меньше минимального размера канваса, поэтому оно будет растянуто до минимальных размеров: ".concat(k, "x").concat(x);
1858
+ if (l < x || d < B) {
1859
+ var h = "Размер изображения меньше минимального размера канваса, поэтому оно будет растянуто до минимальных размеров: ".concat(x, "x").concat(B);
1771
1860
  console.warn("scaleMontageAreaToImage. ".concat(h)), r.fire("editor:warning", {
1772
1861
  message: h
1773
1862
  });
1774
1863
  }
1775
- var g = Math.min(l, N), v = Math.min(d, D);
1864
+ var g = Math.min(l, D), v = Math.min(d, N);
1776
1865
  if (t) {
1777
1866
  var {
1778
- width: m,
1779
- height: j
1780
- } = n, f = l / m, p = d / j, y = Math.max(f, p);
1781
- g = m * y, v = j * y;
1867
+ width: f,
1868
+ height: y
1869
+ } = n, m = l / f, b = d / y, M = Math.max(m, b);
1870
+ g = f * M, v = y * M;
1782
1871
  }
1783
1872
  this.setResolutionWidth(g, {
1784
1873
  withoutSave: !0
@@ -2034,32 +2123,31 @@ class jt {
2034
2123
  fitAsOneObject: r
2035
2124
  } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, {
2036
2125
  canvas: n,
2037
- montageArea: i,
2038
- imageManager: s,
2039
- historyManager: c
2040
- } = this.editor, u = e || n.getActiveObject();
2041
- if (u) {
2042
- if (["activeselection"].includes(u.type) && !r) {
2043
- var l = u.getObjects();
2044
- n.discardActiveObject(), l.forEach((g) => {
2045
- var v = s.calculateScaleFactor({
2046
- imageObject: g,
2126
+ imageManager: i,
2127
+ historyManager: s
2128
+ } = this.editor, c = e || n.getActiveObject();
2129
+ if (c) {
2130
+ if (["activeselection"].includes(c.type) && !r) {
2131
+ var u = c.getObjects();
2132
+ n.discardActiveObject(), u.forEach((h) => {
2133
+ var g = i.calculateScaleFactor({
2134
+ imageObject: h,
2047
2135
  scaleType: t
2048
2136
  });
2049
- g.scale(v), n.centerObject(g);
2137
+ h.scale(g), n.centerObject(h);
2050
2138
  });
2051
- var d = new Z(l, {
2139
+ var l = new z(u, {
2052
2140
  canvas: n
2053
2141
  });
2054
- n.setActiveObject(d);
2142
+ n.setActiveObject(l);
2055
2143
  } else {
2056
- var h = s.calculateScaleFactor({
2057
- imageObject: u,
2144
+ var d = i.calculateScaleFactor({
2145
+ imageObject: c,
2058
2146
  scaleType: t
2059
2147
  });
2060
- u.scale(h), n.centerObject(u);
2148
+ c.scale(d), n.centerObject(c);
2061
2149
  }
2062
- n.renderAll(), a || c.saveState(), n.fire("editor:image-fitted", {
2150
+ n.renderAll(), a || s.saveState(), n.fire("editor:image-fitted", {
2063
2151
  type: t
2064
2152
  });
2065
2153
  }
@@ -2231,7 +2319,7 @@ class yt {
2231
2319
  }
2232
2320
  }
2233
2321
  }
2234
- class Y {
2322
+ class H {
2235
2323
  /**
2236
2324
  * @param {object} options
2237
2325
  * @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
@@ -2278,7 +2366,7 @@ class Y {
2278
2366
  } = this.editor;
2279
2367
  r.suspendHistory();
2280
2368
  var n = e || a.getActiveObject();
2281
- n && (n.type === "activeselection" ? Y._moveSelectionForward(a, n) : a.bringObjectForward(n), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:object-bring-forward"));
2369
+ n && (n.type === "activeselection" ? H._moveSelectionForward(a, n) : a.bringObjectForward(n), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:object-bring-forward"));
2282
2370
  }
2283
2371
  /**
2284
2372
  * Отправить объект на задний план по оси Z
@@ -2328,7 +2416,7 @@ class Y {
2328
2416
  } = this.editor;
2329
2417
  n.suspendHistory();
2330
2418
  var s = e || a.getActiveObject();
2331
- s && (s.type === "activeselection" ? Y._moveSelectionBackwards(a, s) : a.sendObjectBackwards(s), a.sendObjectToBack(r), a.sendObjectToBack(i), a.renderAll(), n.resumeHistory(), t || n.saveState(), a.fire("editor:object-send-backwards"));
2419
+ s && (s.type === "activeselection" ? H._moveSelectionBackwards(a, s) : a.sendObjectBackwards(s), a.sendObjectToBack(r), a.sendObjectToBack(i), a.renderAll(), n.resumeHistory(), t || n.saveState(), a.fire("editor:object-send-backwards"));
2332
2420
  }
2333
2421
  /**
2334
2422
  * Сдвигает выделенные объекты на один уровень вверх относительно ближайшего верхнего объекта
@@ -2367,7 +2455,7 @@ class Y {
2367
2455
  e.moveObjectTo(r[i], n - 1);
2368
2456
  }
2369
2457
  }
2370
- var bt = ["id", "left", "top", "width", "height", "fill"], pt = ["id", "left", "top", "radius", "fill"], It = ["id", "left", "top", "width", "height", "fill"];
2458
+ var pt = ["id", "left", "top", "width", "height", "fill"], bt = ["id", "left", "top", "radius", "fill"], It = ["id", "left", "top", "width", "height", "fill"];
2371
2459
  function je(o, e) {
2372
2460
  var t = Object.keys(o);
2373
2461
  if (Object.getOwnPropertySymbols) {
@@ -2378,7 +2466,7 @@ function je(o, e) {
2378
2466
  }
2379
2467
  return t;
2380
2468
  }
2381
- function V(o) {
2469
+ function F(o) {
2382
2470
  for (var e = 1; e < arguments.length; e++) {
2383
2471
  var t = arguments[e] != null ? arguments[e] : {};
2384
2472
  e % 2 ? je(Object(t), !0).forEach(function(a) {
@@ -2406,7 +2494,7 @@ function wt(o, e) {
2406
2494
  }
2407
2495
  return (e === "string" ? String : Number)(o);
2408
2496
  }
2409
- function F(o, e) {
2497
+ function G(o, e) {
2410
2498
  if (o == null) return {};
2411
2499
  var t, a, r = Ct(o, e);
2412
2500
  if (Object.getOwnPropertySymbols) {
@@ -2424,7 +2512,7 @@ function Ct(o, e) {
2424
2512
  }
2425
2513
  return t;
2426
2514
  }
2427
- class Nt {
2515
+ class Dt {
2428
2516
  /**
2429
2517
  * @param {object} options
2430
2518
  * @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
@@ -2458,12 +2546,12 @@ class Nt {
2458
2546
  width: n = 100,
2459
2547
  height: i = 100,
2460
2548
  fill: s = "blue"
2461
- } = e, c = F(e, bt), {
2549
+ } = e, c = G(e, pt), {
2462
2550
  withoutSelection: u,
2463
2551
  withoutAdding: l
2464
2552
  } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
2465
2553
  canvas: d
2466
- } = this.editor, h = new xe(V({
2554
+ } = this.editor, h = new xe(F({
2467
2555
  id: t,
2468
2556
  left: a,
2469
2557
  top: r,
@@ -2494,12 +2582,12 @@ class Nt {
2494
2582
  top: r,
2495
2583
  radius: n = 50,
2496
2584
  fill: i = "green"
2497
- } = e, s = F(e, pt), {
2585
+ } = e, s = G(e, bt), {
2498
2586
  withoutSelection: c,
2499
2587
  withoutAdding: u
2500
2588
  } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
2501
2589
  canvas: l
2502
- } = this.editor, d = new Be(V({
2590
+ } = this.editor, d = new Be(F({
2503
2591
  id: t,
2504
2592
  left: a,
2505
2593
  top: r,
@@ -2531,12 +2619,12 @@ class Nt {
2531
2619
  width: n = 100,
2532
2620
  height: i = 100,
2533
2621
  fill: s = "yellow"
2534
- } = e, c = F(e, It), {
2622
+ } = e, c = G(e, It), {
2535
2623
  withoutSelection: u,
2536
2624
  withoutAdding: l
2537
2625
  } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, {
2538
2626
  canvas: d
2539
- } = this.editor, h = new Ze(V({
2627
+ } = this.editor, h = new Ze(F({
2540
2628
  id: t,
2541
2629
  left: a,
2542
2630
  top: r,
@@ -2555,7 +2643,7 @@ function ye(o, e, t, a, r, n, i) {
2555
2643
  }
2556
2644
  s.done ? e(c) : Promise.resolve(c).then(a, r);
2557
2645
  }
2558
- function be(o) {
2646
+ function pe(o) {
2559
2647
  return function() {
2560
2648
  var e = this, t = arguments;
2561
2649
  return new Promise(function(a, r) {
@@ -2570,7 +2658,7 @@ function be(o) {
2570
2658
  });
2571
2659
  };
2572
2660
  }
2573
- class Dt {
2661
+ class Nt {
2574
2662
  /**
2575
2663
  * @param {object} options
2576
2664
  * @param {ImageEditor} options.editor - экземпляр редактора с доступом к canvas
@@ -2587,13 +2675,13 @@ class Dt {
2587
2675
  */
2588
2676
  copy() {
2589
2677
  var e = this;
2590
- return be(function* () {
2678
+ return pe(function* () {
2591
2679
  var {
2592
2680
  canvas: t
2593
2681
  } = e.editor, a = t.getActiveObject();
2594
2682
  if (a)
2595
2683
  try {
2596
- var r = yield a.clone();
2684
+ var r = yield a.clone(["format"]);
2597
2685
  if (e.clipboard = r, typeof ClipboardItem == "undefined" || !navigator.clipboard) {
2598
2686
  console.warn(
2599
2687
  // eslint-disable-next-line max-len
@@ -2631,18 +2719,18 @@ class Dt {
2631
2719
  */
2632
2720
  paste() {
2633
2721
  var e = this;
2634
- return be(function* () {
2722
+ return pe(function* () {
2635
2723
  var {
2636
2724
  canvas: t
2637
2725
  } = e.editor;
2638
2726
  if (e.clipboard) {
2639
- var a = yield e.clipboard.clone();
2727
+ var a = yield e.clipboard.clone(["format"]);
2640
2728
  t.discardActiveObject(), a.set({
2641
2729
  id: "".concat(a.type, "-").concat(I()),
2642
2730
  left: a.left + 10,
2643
2731
  top: a.top + 10,
2644
2732
  evented: !0
2645
- }), a instanceof Z ? (a.canvas = t, a.forEachObject((r) => {
2733
+ }), a instanceof z ? (a.canvas = t, a.forEachObject((r) => {
2646
2734
  t.add(r);
2647
2735
  })) : t.add(a), t.setActiveObject(a), t.requestRenderAll(), t.fire("editor:object-pasted", {
2648
2736
  object: a
@@ -2787,7 +2875,7 @@ class Ot {
2787
2875
  if (!(!n || n.type !== "group")) {
2788
2876
  var i = n.removeAll();
2789
2877
  a.remove(n), i.forEach((c) => a.add(c));
2790
- var s = new Z(i, {
2878
+ var s = new z(i, {
2791
2879
  canvas: a
2792
2880
  });
2793
2881
  a.setActiveObject(s), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-ungrouped");
@@ -2816,7 +2904,7 @@ class Tt {
2816
2904
  objectLockManager: a
2817
2905
  } = this.editor;
2818
2906
  e.discardActiveObject();
2819
- var r = t.getObjects(), n = r.some((s) => s.locked), i = r.length > 1 ? new Z(t.getObjects(), {
2907
+ var r = t.getObjects(), n = r.some((s) => s.locked), i = r.length > 1 ? new z(t.getObjects(), {
2820
2908
  canvas: e
2821
2909
  }) : r[0];
2822
2910
  n && a.lockObject({
@@ -2863,7 +2951,7 @@ class Et {
2863
2951
  }), a.discardActiveObject(), a.renderAll(), r.resumeHistory(), t || r.saveState(), a.fire("editor:objects-deleted"));
2864
2952
  }
2865
2953
  }
2866
- function pe(o, e, t, a, r, n, i) {
2954
+ function be(o, e, t, a, r, n, i) {
2867
2955
  try {
2868
2956
  var s = o[n](i), c = s.value;
2869
2957
  } catch (u) {
@@ -2877,16 +2965,16 @@ function kt(o) {
2877
2965
  return new Promise(function(a, r) {
2878
2966
  var n = o.apply(e, t);
2879
2967
  function i(c) {
2880
- pe(n, a, r, i, s, "next", c);
2968
+ be(n, a, r, i, s, "next", c);
2881
2969
  }
2882
2970
  function s(c) {
2883
- pe(n, a, r, i, s, "throw", c);
2971
+ be(n, a, r, i, s, "throw", c);
2884
2972
  }
2885
2973
  i(void 0);
2886
2974
  });
2887
2975
  };
2888
2976
  }
2889
- class te {
2977
+ class ae {
2890
2978
  constructor(e) {
2891
2979
  var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
2892
2980
  this.options = t;
@@ -2920,15 +3008,15 @@ class te {
2920
3008
  editor: e
2921
3009
  }), e.canvasManager = new Mt({
2922
3010
  editor: e
2923
- }), e.imageManager = new L({
3011
+ }), e.imageManager = new C({
2924
3012
  editor: e
2925
- }), e.layerManager = new Y({
3013
+ }), e.layerManager = new H({
2926
3014
  editor: e
2927
- }), e.shapeManager = new Nt({
3015
+ }), e.shapeManager = new Dt({
2928
3016
  editor: e
2929
3017
  }), e.interactionBlocker = new yt({
2930
3018
  editor: e
2931
- }), e.clipboardManager = new Dt({
3019
+ }), e.clipboardManager = new Nt({
2932
3020
  editor: e
2933
3021
  }), e.objectLockManager = new Lt({
2934
3022
  editor: e
@@ -2938,21 +3026,19 @@ class te {
2938
3026
  editor: e
2939
3027
  }), e.deletionManager = new Et({
2940
3028
  editor: e
2941
- }), e._createMonageArea(), e._createClippingArea(), e.listeners = new B({
3029
+ }), e._createMonageArea(), e._createClippingArea(), e.listeners = new Z({
2942
3030
  editor: e,
2943
3031
  options: e.options
2944
3032
  }), e.canvasManager.setEditorContainerWidth(t), e.canvasManager.setEditorContainerHeight(a), e.canvasManager.setCanvasWrapperWidth(r), e.canvasManager.setCanvasWrapperHeight(n), e.canvasManager.setCanvasCSSWidth(i), e.canvasManager.setCanvasCSSHeight(s), c != null && c.source) {
2945
3033
  var {
2946
3034
  source: h,
2947
3035
  scale: g = "image-".concat(l),
2948
- withoutSave: v = !0,
2949
- contentType: m
3036
+ withoutSave: v = !0
2950
3037
  } = c;
2951
3038
  yield e.imageManager.importImage({
2952
3039
  source: h,
2953
3040
  scale: g,
2954
- withoutSave: v,
2955
- contentType: m
3041
+ withoutSave: v
2956
3042
  });
2957
3043
  } else
2958
3044
  e.canvasManager.setDefaultScale({
@@ -2974,7 +3060,7 @@ class te {
2974
3060
  this.montageArea = this.shapeManager.addRectangle({
2975
3061
  width: e,
2976
3062
  height: t,
2977
- fill: te._createMosaicPattern(),
3063
+ fill: ae._createMosaicPattern(),
2978
3064
  stroke: null,
2979
3065
  strokeWidth: 0,
2980
3066
  selectable: !1,
@@ -3069,6 +3155,10 @@ const xt = {
3069
3155
  maxHistoryLength: 50,
3070
3156
  // Дефолтный тип скейлинга для объектов (cotain/cover)
3071
3157
  scaleType: "contain",
3158
+ /**
3159
+ * Массив допустимых форматов изображений для загрузки в редактор.
3160
+ */
3161
+ acceptContentTypes: ["image/png", "image/jpeg", "image/jpg", "image/svg+xml", "image/webp"],
3072
3162
  // Показывать панель инструментов для выделенного объекта
3073
3163
  showToolbar: !0,
3074
3164
  // Настройки панели инструментов выделенного объекта.
@@ -3190,7 +3280,7 @@ function Yt(o) {
3190
3280
  var r = document.createElement("canvas");
3191
3281
  return r.id = "".concat(o, "-canvas"), a.appendChild(r), t.editorContainer = a, new Promise((n) => {
3192
3282
  t._onReadyCallback = n;
3193
- var i = new te(r.id, t);
3283
+ var i = new ae(r.id, t);
3194
3284
  window[o] = i;
3195
3285
  });
3196
3286
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anu3ev/fabric-image-editor",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
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": [