@anu3ev/fabric-image-editor 0.5.2 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/main.js +347 -337
  2. package/package.json +1 -1
package/dist/main.js CHANGED
@@ -1,22 +1,22 @@
1
- var as = Object.defineProperty, rs = Object.defineProperties;
2
- var cs = Object.getOwnPropertyDescriptors;
1
+ var rs = Object.defineProperty, cs = Object.defineProperties;
2
+ var ds = Object.getOwnPropertyDescriptors;
3
3
  var Wt = Object.getOwnPropertySymbols;
4
- var Le = Object.prototype.hasOwnProperty, De = Object.prototype.propertyIsEnumerable;
5
- var Oe = (h, t, e) => t in h ? as(h, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : h[t] = e, k = (h, t) => {
4
+ var De = Object.prototype.hasOwnProperty, Re = Object.prototype.propertyIsEnumerable;
5
+ var Le = (h, t, e) => t in h ? rs(h, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : h[t] = e, B = (h, t) => {
6
6
  for (var e in t || (t = {}))
7
- Le.call(t, e) && Oe(h, e, t[e]);
7
+ De.call(t, e) && Le(h, e, t[e]);
8
8
  if (Wt)
9
9
  for (var e of Wt(t))
10
- De.call(t, e) && Oe(h, e, t[e]);
10
+ Re.call(t, e) && Le(h, e, t[e]);
11
11
  return h;
12
- }, bt = (h, t) => rs(h, cs(t));
12
+ }, bt = (h, t) => cs(h, ds(t));
13
13
  var ut = (h, t) => {
14
14
  var e = {};
15
15
  for (var s in h)
16
- Le.call(h, s) && t.indexOf(s) < 0 && (e[s] = h[s]);
16
+ De.call(h, s) && t.indexOf(s) < 0 && (e[s] = h[s]);
17
17
  if (h != null && Wt)
18
18
  for (var s of Wt(h))
19
- t.indexOf(s) < 0 && De.call(h, s) && (e[s] = h[s]);
19
+ t.indexOf(s) < 0 && Re.call(h, s) && (e[s] = h[s]);
20
20
  return e;
21
21
  };
22
22
  var _ = (h, t, e) => new Promise((s, o) => {
@@ -35,12 +35,12 @@ var _ = (h, t, e) => new Promise((s, o) => {
35
35
  }, a = (r) => r.done ? s(r.value) : Promise.resolve(r.value).then(n, i);
36
36
  a((e = e.apply(h, t)).next());
37
37
  });
38
- import { ActiveSelection as B, Textbox as st, util as rt, controlsUtils as Re, InteractiveFabricObject as _e, Point as $, FitContentLayout as Ne, loadSVGFromURL as ds, FabricImage as kt, Gradient as ke, Rect as ls, Circle as hs, Triangle as us, Group as wt, Color as gs, classRegistry as Be, loadSVGFromString as fs, Canvas as ps, Pattern as ms } from "fabric";
39
- import { create as ys } from "jsondiffpatch";
40
- import vs from "diff-match-patch";
41
- var bs = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict", Y = function() {
38
+ import { ActiveSelection as k, Textbox as st, util as rt, controlsUtils as _e, InteractiveFabricObject as Ne, Point as $, FitContentLayout as Be, loadSVGFromURL as ls, FabricImage as Bt, Gradient as ke, Rect as hs, Circle as us, Triangle as gs, Group as wt, Color as fs, classRegistry as xe, loadSVGFromString as ps, Canvas as ms, Pattern as ys } from "fabric";
39
+ import { create as vs } from "jsondiffpatch";
40
+ import bs from "diff-match-patch";
41
+ var Ms = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict", Y = function() {
42
42
  for (var t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 21, e = "", s = crypto.getRandomValues(new Uint8Array(t |= 0)); t--; )
43
- e += bs[s[t] & 63];
43
+ e += Ms[s[t] & 63];
44
44
  return e;
45
45
  };
46
46
  class xt {
@@ -98,7 +98,7 @@ class xt {
98
98
  if (o.length === 1)
99
99
  this.canvas.setActiveObject(o[0]);
100
100
  else {
101
- const i = new B(o, {
101
+ const i = new k(o, {
102
102
  canvas: this.canvas
103
103
  });
104
104
  this.canvas.setActiveObject(i);
@@ -106,7 +106,7 @@ class xt {
106
106
  this.canvas.requestRenderAll();
107
107
  return;
108
108
  }
109
- const n = new B(t, {
109
+ const n = new k(t, {
110
110
  canvas: this.canvas
111
111
  });
112
112
  this.editor.objectLockManager.lockObject({
@@ -220,7 +220,7 @@ class xt {
220
220
  if (o || n) return;
221
221
  this.isSpacePressed = !0, t.preventDefault();
222
222
  const i = e.getActiveObject() || null;
223
- i instanceof B ? this.savedSelection = i.getObjects().slice() : i && (this.savedSelection = [i]), e.discardActiveObject(), e.set({
223
+ i instanceof k ? this.savedSelection = i.getObjects().slice() : i && (this.savedSelection = [i]), e.discardActiveObject(), e.set({
224
224
  selection: !1,
225
225
  defaultCursor: "grab"
226
226
  }), e.setCursor("grab"), s.canvasManager.getObjects().forEach((a) => {
@@ -259,7 +259,7 @@ class xt {
259
259
  e.setActiveObject(t[0]);
260
260
  return;
261
261
  }
262
- const o = t.filter((i) => s.canvasManager.getObjects().includes(i)), n = new B(o, { canvas: e });
262
+ const o = t.filter((i) => s.canvasManager.getObjects().includes(i)), n = new k(o, { canvas: e });
263
263
  e.setActiveObject(n);
264
264
  }
265
265
  // --- Обработчики для событий canvas (Fabric) ---
@@ -391,7 +391,7 @@ class xt {
391
391
  };
392
392
  }
393
393
  }
394
- class Ms {
394
+ class ws {
395
395
  /**
396
396
  * Класс для динамической загрузки внешних модулей.
397
397
  */
@@ -409,7 +409,7 @@ class Ms {
409
409
  return this.loaders[t] ? (this.cache.has(t) || this.cache.set(t, this.loaders[t]()), this.cache.get(t)) : Promise.reject(new Error(`Unknown module "${t}"`));
410
410
  }
411
411
  }
412
- function ws(h) {
412
+ function Ss(h) {
413
413
  return new Worker(
414
414
  "" + new URL("assets/worker-CN39s7P7.js", import.meta.url).href,
415
415
  {
@@ -417,13 +417,13 @@ function ws(h) {
417
417
  }
418
418
  );
419
419
  }
420
- class Ss {
420
+ class As {
421
421
  /**
422
422
  * @param scriptUrl — URL скрипта воркера.
423
423
  * По-умолчанию использует DefaultWorker из соседнего файла
424
424
  */
425
425
  constructor(t) {
426
- t ? this.worker = new Worker(t, { type: "module" }) : this.worker = new ws(), this._callbacks = /* @__PURE__ */ new Map(), this.worker.onmessage = this._handleMessage.bind(this);
426
+ t ? this.worker = new Worker(t, { type: "module" }) : this.worker = new Ss(), this._callbacks = /* @__PURE__ */ new Map(), this.worker.onmessage = this._handleMessage.bind(this);
427
427
  }
428
428
  /**
429
429
  * Обработчик сообщений от воркера
@@ -463,26 +463,26 @@ class Ss {
463
463
  this.worker.terminate();
464
464
  }
465
465
  }
466
- const it = 12, As = 2, ce = 8, de = 20, js = 100, le = 20, he = 8, Is = 100, Xt = 32, pe = 1, Cs = "#2B2D33", me = "#3D8BF4", ye = "#FFFFFF";
466
+ const it = 12, js = 2, de = 8, le = 20, Is = 100, he = 20, ue = 8, Cs = 100, Kt = 32, me = 1, Ts = "#2B2D33", ye = "#3D8BF4", ve = "#FFFFFF";
467
467
  function Zt(h, t, e, s, o) {
468
- const n = it, i = As;
469
- h.save(), h.translate(t, e), h.rotate(rt.degreesToRadians(o.angle)), h.fillStyle = ye, h.strokeStyle = me, h.lineWidth = pe, h.beginPath(), h.roundRect(-n / 2, -n / 2, n, n, i), h.fill(), h.stroke(), h.restore();
470
- }
471
- function xe(h, t, e, s, o) {
472
- const n = ce, i = de, a = js;
473
- h.save(), h.translate(t, e), h.rotate(rt.degreesToRadians(o.angle)), h.fillStyle = ye, h.strokeStyle = me, h.lineWidth = pe, h.beginPath(), h.roundRect(-n / 2, -i / 2, n, i, a), h.fill(), h.stroke(), h.restore();
468
+ const n = it, i = js;
469
+ h.save(), h.translate(t, e), h.rotate(rt.degreesToRadians(o.angle)), h.fillStyle = ve, h.strokeStyle = ye, h.lineWidth = me, h.beginPath(), h.roundRect(-n / 2, -n / 2, n, n, i), h.fill(), h.stroke(), h.restore();
474
470
  }
475
471
  function ze(h, t, e, s, o) {
476
- const n = le, i = he, a = Is;
477
- h.save(), h.translate(t, e), h.rotate(rt.degreesToRadians(o.angle)), h.fillStyle = ye, h.strokeStyle = me, h.lineWidth = pe, h.beginPath(), h.roundRect(-n / 2, -i / 2, n, i, a), h.fill(), h.stroke(), h.restore();
472
+ const n = de, i = le, a = Is;
473
+ h.save(), h.translate(t, e), h.rotate(rt.degreesToRadians(o.angle)), h.fillStyle = ve, h.strokeStyle = ye, h.lineWidth = me, h.beginPath(), h.roundRect(-n / 2, -i / 2, n, i, a), h.fill(), h.stroke(), h.restore();
474
+ }
475
+ function Pe(h, t, e, s, o) {
476
+ const n = he, i = ue, a = Cs;
477
+ h.save(), h.translate(t, e), h.rotate(rt.degreesToRadians(o.angle)), h.fillStyle = ve, h.strokeStyle = ye, h.lineWidth = me, h.beginPath(), h.roundRect(-n / 2, -i / 2, n, i, a), h.fill(), h.stroke(), h.restore();
478
478
  }
479
- const Ts = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE4Ljc1IDQuMzc1djMuNzVhLjYyNS42MjUgMCAwIDEtLjYyNS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDEgMC0xLjI1aDIuMTRsLTIuMDc3LTEuOTAzLS4wMi0uMDE5YTYuMjUgNi4yNSAwIDEgMC0uMTMgOC45NjcuNjI2LjYyNiAwIDAgMSAuODYuOTA5QTcuNDU2IDcuNDU2IDAgMCAxIDEwIDE3LjVoLS4xMDNhNy41IDcuNSAwIDEgMSA1LjM5Ni0xMi44MTJMMTcuNSA2LjcwM1Y0LjM3NWEuNjI1LjYyNSAwIDAgMSAxLjI1IDBaIi8+PC9zdmc+", $e = new Image();
480
- $e.src = Ts;
481
- function Es(h, t, e, s, o) {
482
- const i = Xt / 2;
483
- h.save(), h.translate(t, e), h.rotate(rt.degreesToRadians(o.angle)), h.fillStyle = Cs, h.beginPath(), h.arc(0, 0, i, 0, 2 * Math.PI), h.fill(), h.drawImage($e, -i / 2, -i / 2, i, i), h.restore();
479
+ const Es = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE4Ljc1IDQuMzc1djMuNzVhLjYyNS42MjUgMCAwIDEtLjYyNS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDEgMC0xLjI1aDIuMTRsLTIuMDc3LTEuOTAzLS4wMi0uMDE5YTYuMjUgNi4yNSAwIDEgMC0uMTMgOC45NjcuNjI2LjYyNiAwIDAgMSAuODYuOTA5QTcuNDU2IDcuNDU2IDAgMCAxIDEwIDE3LjVoLS4xMDNhNy41IDcuNSAwIDEgMSA1LjM5Ni0xMi44MTJMMTcuNSA2LjcwM1Y0LjM3NWEuNjI1LjYyNSAwIDAgMSAxLjI1IDBaIi8+PC9zdmc+", Je = new Image();
480
+ Je.src = Es;
481
+ function Os(h, t, e, s, o) {
482
+ const i = Kt / 2;
483
+ h.save(), h.translate(t, e), h.rotate(rt.degreesToRadians(o.angle)), h.fillStyle = Ts, h.beginPath(), h.arc(0, 0, i, 0, 2 * Math.PI), h.fill(), h.drawImage(Je, -i / 2, -i / 2, i, i), h.restore();
484
484
  }
485
- const Os = {
485
+ const Ls = {
486
486
  // Угловые точки
487
487
  tl: {
488
488
  render: Zt,
@@ -514,41 +514,41 @@ const Os = {
514
514
  },
515
515
  // Середина вертикалей
516
516
  ml: {
517
- render: xe,
518
- sizeX: ce,
519
- sizeY: de,
517
+ render: ze,
518
+ sizeX: de,
519
+ sizeY: le,
520
520
  offsetX: 0,
521
521
  offsetY: 0
522
522
  },
523
523
  mr: {
524
- render: xe,
525
- sizeX: ce,
526
- sizeY: de,
524
+ render: ze,
525
+ sizeX: de,
526
+ sizeY: le,
527
527
  offsetX: 0,
528
528
  offsetY: 0
529
529
  },
530
530
  // Середина горизонталей
531
531
  mt: {
532
- render: ze,
533
- sizeX: le,
534
- sizeY: he,
532
+ render: Pe,
533
+ sizeX: he,
534
+ sizeY: ue,
535
535
  offsetX: 0,
536
536
  offsetY: 0
537
537
  },
538
538
  mb: {
539
- render: ze,
540
- sizeX: le,
541
- sizeY: he,
539
+ render: Pe,
540
+ sizeX: he,
541
+ sizeY: ue,
542
542
  offsetX: 0,
543
543
  offsetY: 0
544
544
  },
545
545
  // Специальный «rotate» контрол
546
546
  mtr: {
547
- render: Es,
548
- sizeX: Xt,
549
- sizeY: Xt,
547
+ render: Os,
548
+ sizeX: Kt,
549
+ sizeY: Kt,
550
550
  offsetX: 0,
551
- offsetY: -Xt
551
+ offsetY: -Kt
552
552
  }
553
553
  };
554
554
  class Q {
@@ -567,7 +567,7 @@ class Q {
567
567
  * Применяет конфигурацию контролов к набору по ключам из DEFAULT_CONTROLS.
568
568
  */
569
569
  static applyControlOverrides(t) {
570
- Object.entries(Os).forEach(([e, s]) => {
570
+ Object.entries(Ls).forEach(([e, s]) => {
571
571
  const o = t[e];
572
572
  o && (Object.assign(o, s), e === "mtr" && (o.cursorStyle = "grab", o.mouseDownHandler = (n, i, a, r) => {
573
573
  var d;
@@ -580,16 +580,16 @@ class Q {
580
580
  * Регистрирует контролы и настройки поведения выделений.
581
581
  */
582
582
  static apply() {
583
- const t = Re.createObjectDefaultControls();
584
- Q.applyControlOverrides(t), _e.ownDefaults.controls = t;
585
- const e = Re.createTextboxDefaultControls();
586
- Q.applyControlOverrides(e), e.mt && (e.mt.visible = !1), e.mb && (e.mb.visible = !1), Q.wrapWidthControl(e.ml), Q.wrapWidthControl(e.mr), st.ownDefaults.controls = e, Q.patchActiveSelectionBounds(), _e.ownDefaults.snapAngle = 1;
583
+ const t = _e.createObjectDefaultControls();
584
+ Q.applyControlOverrides(t), Ne.ownDefaults.controls = t;
585
+ const e = _e.createTextboxDefaultControls();
586
+ Q.applyControlOverrides(e), e.mt && (e.mt.visible = !1), e.mb && (e.mb.visible = !1), Q.wrapWidthControl(e.ml), Q.wrapWidthControl(e.mr), st.ownDefaults.controls = e, Q.patchActiveSelectionBounds(), Ne.ownDefaults.snapAngle = 1;
587
587
  }
588
588
  /**
589
589
  * Обновляет алгоритм расчёта границ ActiveSelection, чтобы учитывать фон и отступы текстовых объектов.
590
590
  */
591
591
  static patchActiveSelectionBounds() {
592
- const t = B.prototype, e = t._calcBoundsFromObjects;
592
+ const t = k.prototype, e = t._calcBoundsFromObjects;
593
593
  t._calcBoundsFromObjects = function(...n) {
594
594
  var g, f;
595
595
  const i = (f = (g = this.getObjects) == null ? void 0 : g.call(this)) != null ? f : [];
@@ -630,12 +630,12 @@ class Q {
630
630
  height: g
631
631
  }), this.setPositionByOrigin(f, "center", "center"), this.setCoords(), a;
632
632
  };
633
- const o = Ne.prototype.calcBoundingBox;
634
- Ne.prototype.calcBoundingBox = function(n, i) {
633
+ const o = Be.prototype.calcBoundingBox;
634
+ Be.prototype.calcBoundingBox = function(n, i) {
635
635
  const { target: a, type: r, overrides: c } = i;
636
636
  if (r === "imperative" && c)
637
637
  return c;
638
- if (!(a instanceof B))
638
+ if (!(a instanceof k))
639
639
  return o.call(this, n, i);
640
640
  Q.applyTextSelectionScalingLock({
641
641
  selection: a,
@@ -854,8 +854,8 @@ N.registeredFontKeys = /* @__PURE__ */ new Set(), N.descriptorDefaults = {
854
854
  featureSettings: "normal",
855
855
  display: "auto"
856
856
  };
857
- let ue = N;
858
- const Ls = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNi44NzUgMi41YS42MjUuNjI1IDAgMCAwLS42MjUuNjI0VjYuMjVIMy4xMjVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2MTBjMCAuMzQ1LjI4LjYyNS42MjUuNjI1aDEwYy4zNDUgMCAuNjI1LS4yOC42MjUtLjYyNXYtMy4xMjZoMy4xMjVjLjM0NSAwIC42MjUtLjI4LjYyNS0uNjI1di0xMGEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTEwWm02Ljg3NSAxMGgyLjVWMy43NUg3LjV2Mi41aDUuNjI1Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NS42MjRabS0xMCAzLjc1VjcuNWg4Ljc1djguNzVIMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", Ds = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41IDcuNWMwLS42OS41Ni0xLjI1IDEuMjUtMS4yNWgxMi41Yy42OSAwIDEuMjUuNTYgMS4yNSAxLjI1djguNzVjMCAuNjktLjU2IDEuMjUtMS4yNSAxLjI1SDMuNzVjLS42OSAwLTEuMjUtLjU2LTEuMjUtMS4yNVY3LjVabTEzLjc1IDBIMy43NXY4Ljc1aDEyLjVWNy41WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMS44NzVhMi4xODggMi4xODggMCAwIDAtMi4xODggMi4xODh2Mi44MTJhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyYTMuNDM3IDMuNDM3IDAgMSAxIDYuODc1IDB2Mi44MTNhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyQTIuMTg4IDIuMTg4IDAgMCAwIDEwIDEuODc2WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTEwIDEyLjgxM2EuOTM3LjkzNyAwIDEgMCAwLTEuODc1LjkzNy45MzcgMCAwIDAgMCAxLjg3NFoiLz48L3N2Zz4=", Rs = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE2LjI1IDYuMjVINy41VjQuMzc1YTIuNSAyLjUgMCAwIDEgMi41LTIuNWMxLjIgMCAyLjI4MS44NiAyLjUxMiAyYS42MjUuNjI1IDAgMCAwIDEuMjI2LS4yNWMtLjM1NC0xLjczOC0xLjkyNS0zLTMuNzM4LTNhMy43NTQgMy43NTQgMCAwIDAtMy43NSAzLjc1VjYuMjVoLTIuNUExLjI1IDEuMjUgMCAwIDAgMi41IDcuNXY4Ljc1YTEuMjUgMS4yNSAwIDAgMCAxLjI1IDEuMjVoMTIuNWExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjcuNWExLjI1IDEuMjUgMCAwIDAtMS4yNS0xLjI1Wm0wIDEwSDMuNzVWNy41aDEyLjV2OC43NVptLTUuMzEzLTQuMzc1YS45MzcuOTM3IDAgMSAxLTEuODc0IDAgLjkzNy45MzcgMCAwIDEgMS44NzQgMFoiLz48L3N2Zz4K", _s = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTIuNSA4LjEyNSAxMCAxMi41bDcuNS00LjM3NUwxMCAzLjc1IDIuNSA4LjEyNVoiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05LjY4NSAzLjIxYS42MjUuNjI1IDAgMCAxIC42MyAwbDcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOGw3LjUtNC4zNzVaTTMuNzQgOC4xMjUgMTAgMTEuNzc2bDYuMjYtMy42NTFMMTAgNC40NzQgMy43NCA4LjEyNVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA5LjQ2YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDExLjc3NmwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA5LjQ2Wm0tMS42NiAyLjQxNUwxMCAxNS41MjZsNi4yNi0zLjY1MS0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNi0xLjk3NSAxLjE1MVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", Ns = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMy4yMWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDguMTI1IDEwIDExLjc3Nmw2LjI2LTMuNjUxTDEwIDQuNDc0IDMuNzQgOC4xMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjcxNCAxMCAxMCAxMi41bDQuMjg2LTIuNSAzLjIxNCAxLjg3NUwxMCAxNi4yNWwtNy41LTQuMzc1TDUuNzE0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDkuNDZhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgMTEuNzc2bDMuOTctMi4zMTZhLjYyNS42MjUgMCAwIDEgLjYzIDBsMy4yMTUgMS44NzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhMNS40IDkuNDZabS0xLjY2IDIuNDE1TDEwIDE1LjUyNmw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2LTEuOTc1IDEuMTUxWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+", ks = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIuNSA2LjI1IDcuNSA0LjM3NSA3LjUtNC4zNzVMMTAgMS44NzUgMi41IDYuMjVaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMS4zMzVhLjYyNS42MjUgMCAwIDEgLjYzIDBsNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4bDcuNS00LjM3NVpNMy43NCA2LjI1IDEwIDkuOTAxbDYuMjYtMy42NTFMMTAgMi41OTkgMy43NCA2LjI1WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDExLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCAxMy42NTFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgMTEuMzM1Wk0zLjc0IDEzLjc1IDEwIDE3LjQwMWw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTMuNzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgNy41ODVhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgOS45MDFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgNy41ODVaTTMuNzQgMTAgMTAgMTMuNjUxIDE2LjI2IDEwbC0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNkwzLjc0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+", Bs = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMS45NiAxMy40MzVhLjYyNS42MjUgMCAwIDEgLjg1NS0uMjI1TDEwIDE3LjQwMWw3LjE4NS00LjE5YS42MjUuNjI1IDAgMCAxIC42MyAxLjA3OWwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEtLjIyNS0uODU1Wk05LjY4NSAxLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDYuMjUgMTAgOS45MDFsNi4yNi0zLjY1MUwxMCAyLjU5OSAzLjc0IDYuMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im01LjcxNCAxMS44NzUgNC4yODYgMi41IDQuMjg2LTIuNUwxNy41IDEzLjc1IDEwIDE4LjEyNSAyLjUgMTMuNzVsMy4yMTQtMS44NzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgMTEuMzM1YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDEzLjY1MWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCAxMS4zMzVaTTMuNzQgMTMuNzUgMTAgMTcuNDAxbDYuMjYtMy42NTEtMS45NzQtMS4xNTEtMy45NzEgMi4zMTZhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTMuOTctMi4zMTZMMy43NCAxMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA3LjU4NWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCA5LjkwMWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA3LjU4NVpNMy43NCAxMCAxMCAxMy42NTEgMTYuMjYgMTBsLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTBaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=", xs = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0VDNEU0MCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOC4xMjUgMS4yNUExLjg3NSAxLjg3NSAwIDAgMCA2LjI1IDMuMTI1di42MjVIMy4xMjVhLjYyNS42MjUgMCAwIDAgMCAxLjI1aC42MjV2MTEuMjVBMS4yNSAxLjI1IDAgMCAwIDUgMTcuNWgxMGExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjVoLjYyNWEuNjI1LjYyNSAwIDAgMCAwLTEuMjVIMTMuNzV2LS42MjVhMS44NzUgMS44NzUgMCAwIDAtMS44NzUtMS44NzVoLTMuNzVabTQuMzc1IDIuNXYtLjYyNWEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2LjYyNWg1Wk01IDE2LjI1VjVoMTB2MTEuMjVINVpNOC4xMjUgNy41Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NWEuNjI1LjYyNSAwIDEgMS0xLjI1IDB2LTVjMC0uMzQ1LjI4LS42MjUuNjI1LS42MjVabTQuMzc1IDUuNjI1di01YS42MjUuNjI1IDAgMCAwLTEuMjUgMHY1YS42MjUuNjI1IDAgMSAwIDEuMjUgMFoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", Bt = {
857
+ let ge = N;
858
+ const Ds = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNi44NzUgMi41YS42MjUuNjI1IDAgMCAwLS42MjUuNjI0VjYuMjVIMy4xMjVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2MTBjMCAuMzQ1LjI4LjYyNS42MjUuNjI1aDEwYy4zNDUgMCAuNjI1LS4yOC42MjUtLjYyNXYtMy4xMjZoMy4xMjVjLjM0NSAwIC42MjUtLjI4LjYyNS0uNjI1di0xMGEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTEwWm02Ljg3NSAxMGgyLjVWMy43NUg3LjV2Mi41aDUuNjI1Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NS42MjRabS0xMCAzLjc1VjcuNWg4Ljc1djguNzVIMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", Rs = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41IDcuNWMwLS42OS41Ni0xLjI1IDEuMjUtMS4yNWgxMi41Yy42OSAwIDEuMjUuNTYgMS4yNSAxLjI1djguNzVjMCAuNjktLjU2IDEuMjUtMS4yNSAxLjI1SDMuNzVjLS42OSAwLTEuMjUtLjU2LTEuMjUtMS4yNVY3LjVabTEzLjc1IDBIMy43NXY4Ljc1aDEyLjVWNy41WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMS44NzVhMi4xODggMi4xODggMCAwIDAtMi4xODggMi4xODh2Mi44MTJhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyYTMuNDM3IDMuNDM3IDAgMSAxIDYuODc1IDB2Mi44MTNhLjYyNS42MjUgMCAxIDEtMS4yNSAwVjQuMDYyQTIuMTg4IDIuMTg4IDAgMCAwIDEwIDEuODc2WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTEwIDEyLjgxM2EuOTM3LjkzNyAwIDEgMCAwLTEuODc1LjkzNy45MzcgMCAwIDAgMCAxLjg3NFoiLz48L3N2Zz4=", _s = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE2LjI1IDYuMjVINy41VjQuMzc1YTIuNSAyLjUgMCAwIDEgMi41LTIuNWMxLjIgMCAyLjI4MS44NiAyLjUxMiAyYS42MjUuNjI1IDAgMCAwIDEuMjI2LS4yNWMtLjM1NC0xLjczOC0xLjkyNS0zLTMuNzM4LTNhMy43NTQgMy43NTQgMCAwIDAtMy43NSAzLjc1VjYuMjVoLTIuNUExLjI1IDEuMjUgMCAwIDAgMi41IDcuNXY4Ljc1YTEuMjUgMS4yNSAwIDAgMCAxLjI1IDEuMjVoMTIuNWExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjcuNWExLjI1IDEuMjUgMCAwIDAtMS4yNS0xLjI1Wm0wIDEwSDMuNzVWNy41aDEyLjV2OC43NVptLTUuMzEzLTQuMzc1YS45MzcuOTM3IDAgMSAxLTEuODc0IDAgLjkzNy45MzcgMCAwIDEgMS44NzQgMFoiLz48L3N2Zz4K", Ns = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTIuNSA4LjEyNSAxMCAxMi41bDcuNS00LjM3NUwxMCAzLjc1IDIuNSA4LjEyNVoiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05LjY4NSAzLjIxYS42MjUuNjI1IDAgMCAxIC42MyAwbDcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOGw3LjUtNC4zNzVaTTMuNzQgOC4xMjUgMTAgMTEuNzc2bDYuMjYtMy42NTFMMTAgNC40NzQgMy43NCA4LjEyNVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA5LjQ2YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDExLjc3NmwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA5LjQ2Wm0tMS42NiAyLjQxNUwxMCAxNS41MjZsNi4yNi0zLjY1MS0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNi0xLjk3NSAxLjE1MVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", Bs = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMy4yMWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDguMTI1IDEwIDExLjc3Nmw2LjI2LTMuNjUxTDEwIDQuNDc0IDMuNzQgOC4xMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjcxNCAxMCAxMCAxMi41bDQuMjg2LTIuNSAzLjIxNCAxLjg3NUwxMCAxNi4yNWwtNy41LTQuMzc1TDUuNzE0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDkuNDZhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgMTEuNzc2bDMuOTctMi4zMTZhLjYyNS42MjUgMCAwIDEgLjYzIDBsMy4yMTUgMS44NzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhMNS40IDkuNDZabS0xLjY2IDIuNDE1TDEwIDE1LjUyNmw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2LTEuOTc1IDEuMTUxWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+", ks = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIuNSA2LjI1IDcuNSA0LjM3NSA3LjUtNC4zNzVMMTAgMS44NzUgMi41IDYuMjVaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS42ODUgMS4zMzVhLjYyNS42MjUgMCAwIDEgLjYzIDBsNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4bDcuNS00LjM3NVpNMy43NCA2LjI1IDEwIDkuOTAxbDYuMjYtMy42NTFMMTAgMi41OTkgMy43NCA2LjI1WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS40IDExLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCAxMy42NTFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgMTEuMzM1Wk0zLjc0IDEzLjc1IDEwIDE3LjQwMWw2LjI2LTMuNjUxLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTMuNzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgNy41ODVhLjYyNS42MjUgMCAwIDEgLjYzIDBMMTAgOS45MDFsMy45Ny0yLjMxNmEuNjI1LjYyNSAwIDAgMSAuNjMgMGwzLjIxNSAxLjg3NWEuNjI1LjYyNSAwIDAgMSAwIDEuMDhsLTcuNSA0LjM3NWEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtNy41LTQuMzc1YS42MjUuNjI1IDAgMCAxIDAtMS4wOEw1LjQgNy41ODVaTTMuNzQgMTAgMTAgMTMuNjUxIDE2LjI2IDEwbC0xLjk3NC0xLjE1MS0zLjk3MSAyLjMxNmEuNjI1LjYyNSAwIDAgMS0uNjMgMGwtMy45Ny0yLjMxNkwzLjc0IDEwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+", xs = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMS45NiAxMy40MzVhLjYyNS42MjUgMCAwIDEgLjg1NS0uMjI1TDEwIDE3LjQwMWw3LjE4NS00LjE5YS42MjUuNjI1IDAgMCAxIC42MyAxLjA3OWwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEtLjIyNS0uODU1Wk05LjY4NSAxLjMzNWEuNjI1LjYyNSAwIDAgMSAuNjMgMGw3LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEgMCAxLjA4bC03LjUgNC4zNzVhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTcuNS00LjM3NWEuNjI1LjYyNSAwIDAgMSAwLTEuMDhsNy41LTQuMzc1Wk0zLjc0IDYuMjUgMTAgOS45MDFsNi4yNi0zLjY1MUwxMCAyLjU5OSAzLjc0IDYuMjVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im01LjcxNCAxMS44NzUgNC4yODYgMi41IDQuMjg2LTIuNUwxNy41IDEzLjc1IDEwIDE4LjEyNSAyLjUgMTMuNzVsMy4yMTQtMS44NzVaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQgMTEuMzM1YS42MjUuNjI1IDAgMCAxIC42MyAwTDEwIDEzLjY1MWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCAxMS4zMzVaTTMuNzQgMTMuNzUgMTAgMTcuNDAxbDYuMjYtMy42NTEtMS45NzQtMS4xNTEtMy45NzEgMi4zMTZhLjYyNS42MjUgMCAwIDEtLjYzIDBsLTMuOTctMi4zMTZMMy43NCAxMy43NVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuNCA3LjU4NWEuNjI1LjYyNSAwIDAgMSAuNjMgMEwxMCA5LjkwMWwzLjk3LTIuMzE2YS42MjUuNjI1IDAgMCAxIC42MyAwbDMuMjE1IDEuODc1YS42MjUuNjI1IDAgMCAxIDAgMS4wOGwtNy41IDQuMzc1YS42MjUuNjI1IDAgMCAxLS42MyAwbC03LjUtNC4zNzVhLjYyNS42MjUgMCAwIDEgMC0xLjA4TDUuNCA3LjU4NVpNMy43NCAxMCAxMCAxMy42NTEgMTYuMjYgMTBsLTEuOTc0LTEuMTUxLTMuOTcxIDIuMzE2YS42MjUuNjI1IDAgMCAxLS42MyAwbC0zLjk3LTIuMzE2TDMuNzQgMTBaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=", zs = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0VDNEU0MCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOC4xMjUgMS4yNUExLjg3NSAxLjg3NSAwIDAgMCA2LjI1IDMuMTI1di42MjVIMy4xMjVhLjYyNS42MjUgMCAwIDAgMCAxLjI1aC42MjV2MTEuMjVBMS4yNSAxLjI1IDAgMCAwIDUgMTcuNWgxMGExLjI1IDEuMjUgMCAwIDAgMS4yNS0xLjI1VjVoLjYyNWEuNjI1LjYyNSAwIDAgMCAwLTEuMjVIMTMuNzV2LS42MjVhMS44NzUgMS44NzUgMCAwIDAtMS44NzUtMS44NzVoLTMuNzVabTQuMzc1IDIuNXYtLjYyNWEuNjI1LjYyNSAwIDAgMC0uNjI1LS42MjVoLTMuNzVhLjYyNS42MjUgMCAwIDAtLjYyNS42MjV2LjYyNWg1Wk01IDE2LjI1VjVoMTB2MTEuMjVINVpNOC4xMjUgNy41Yy4zNDUgMCAuNjI1LjI4LjYyNS42MjV2NWEuNjI1LjYyNSAwIDEgMS0xLjI1IDB2LTVjMC0uMzQ1LjI4LS42MjUuNjI1LS42MjVabTQuMzc1IDUuNjI1di01YS42MjUuNjI1IDAgMCAwLTEuMjUgMHY1YS42MjUuNjI1IDAgMSAwIDEuMjUgMFoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==", kt = {
859
859
  style: {
860
860
  position: "absolute",
861
861
  display: "none",
@@ -922,14 +922,14 @@ const Ls = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMj
922
922
  ],
923
923
  offsetTop: 50,
924
924
  icons: {
925
- copyPaste: Ls,
926
- delete: xs,
927
- lock: Ds,
928
- unlock: Rs,
925
+ copyPaste: Ds,
926
+ delete: zs,
927
+ lock: Rs,
928
+ unlock: _s,
929
929
  bringToFront: ks,
930
- sendToBack: Bs,
931
- bringForward: _s,
932
- sendBackwards: Ns
930
+ sendToBack: xs,
931
+ bringForward: Ns,
932
+ sendBackwards: Bs
933
933
  },
934
934
  handlers: {
935
935
  copyPaste: (h) => _(null, null, function* () {
@@ -958,18 +958,18 @@ const Ls = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMj
958
958
  }
959
959
  }
960
960
  };
961
- class zs {
961
+ class Ps {
962
962
  constructor({ editor: t }) {
963
963
  this.currentTarget = null, this.currentLocked = !1, this.isTransforming = !1, this.isTemporarilyHidden = !1, this.editor = t, this.canvas = t.canvas, this.options = t.options, this._initToolbar();
964
964
  }
965
965
  _initToolbar() {
966
966
  if (!this.options.showToolbar) return;
967
967
  const t = this.options.toolbar || {};
968
- this.config = bt(k(k({}, Bt), t), {
969
- style: k(k({}, Bt.style), t.style || {}),
970
- btnStyle: k(k({}, Bt.btnStyle), t.btnStyle || {}),
971
- icons: k(k({}, Bt.icons), t.icons || {}),
972
- handlers: k(k({}, Bt.handlers), t.handlers || {})
968
+ this.config = bt(B(B({}, kt), t), {
969
+ style: B(B({}, kt.style), t.style || {}),
970
+ btnStyle: B(B({}, kt.btnStyle), t.btnStyle || {}),
971
+ icons: B(B({}, kt.icons), t.icons || {}),
972
+ handlers: B(B({}, kt.handlers), t.handlers || {})
973
973
  }), this.currentTarget = null, this.currentLocked = !1, this.isTransforming = !1, this.isTemporarilyHidden = !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 = () => {
974
974
  this.el.style.display = "none";
975
975
  }, this._createDOM(), this._bindEvents();
@@ -1100,8 +1100,8 @@ const Us = {
1100
1100
  "pointer-events": "none",
1101
1101
  "white-space": "nowrap",
1102
1102
  "box-shadow": "0 2px 8px rgba(0, 0, 0, 0.2)"
1103
- }, Ue = 16, Pe = 16, Ps = "fabric-editor-angle-indicator";
1104
- class ve {
1103
+ }, Ue = 16, Ye = 16, Ys = "fabric-editor-angle-indicator";
1104
+ class be {
1105
1105
  constructor({ editor: t }) {
1106
1106
  this.isActive = !1, this.currentAngle = 0, this.editor = t, this.canvas = t.canvas, this.options = t.options, this._createDOM(), this._bindEvents();
1107
1107
  }
@@ -1109,7 +1109,7 @@ class ve {
1109
1109
  * Создание DOM-элемента индикатора
1110
1110
  */
1111
1111
  _createDOM() {
1112
- this.el = document.createElement("div"), this.el.className = Ps, Object.entries(Us).forEach(([t, e]) => {
1112
+ this.el = document.createElement("div"), this.el.className = Ys, Object.entries(Us).forEach(([t, e]) => {
1113
1113
  this.el.style.setProperty(t, e);
1114
1114
  }), this.canvas.wrapperEl.appendChild(this.el);
1115
1115
  }
@@ -1129,7 +1129,7 @@ class ve {
1129
1129
  return;
1130
1130
  }
1131
1131
  const s = e.angle || 0;
1132
- this.currentAngle = ve._normalizeAngle(s), this.el.textContent = `${this.currentAngle}°`, this._positionIndicator(t.e), this.isActive || this._showIndicator();
1132
+ this.currentAngle = be._normalizeAngle(s), this.el.textContent = `${this.currentAngle}°`, this._positionIndicator(t.e), this.isActive || this._showIndicator();
1133
1133
  }
1134
1134
  /**
1135
1135
  * Обработчик отпускания кнопки мыши
@@ -1160,9 +1160,9 @@ class ve {
1160
1160
  */
1161
1161
  _positionIndicator(t) {
1162
1162
  const e = this.canvas.wrapperEl.getBoundingClientRect();
1163
- let s = t.clientX - e.left + Ue, o = t.clientY - e.top + Pe;
1163
+ let s = t.clientX - e.left + Ue, o = t.clientY - e.top + Ye;
1164
1164
  const n = this.el.getBoundingClientRect(), i = n.width, a = n.height;
1165
- s + i > e.width && (s = t.clientX - e.left - i - Ue), o + a > e.height && (o = t.clientY - e.top - a - Pe), this.el.style.left = `${s}px`, this.el.style.top = `${o}px`;
1165
+ s + i > e.width && (s = t.clientX - e.left - i - Ue), o + a > e.height && (o = t.clientY - e.top - a - Ye), this.el.style.left = `${s}px`, this.el.style.top = `${o}px`;
1166
1166
  }
1167
1167
  /**
1168
1168
  * Показать индикатор
@@ -1193,7 +1193,7 @@ class ve {
1193
1193
  this.canvas && (this.canvas.off("object:rotating", this._onObjectRotating), this.canvas.off("mouse:up", this._onMouseUp), this.canvas.off("object:modified", this._onObjectModified), this.canvas.off("selection:cleared", this._onSelectionCleared)), (t = this.el) != null && t.parentNode && this.el.parentNode.removeChild(this.el), this.el = null, this.editor = null, this.canvas = null, this.options = null;
1194
1194
  }
1195
1195
  }
1196
- const Je = [
1196
+ const ts = [
1197
1197
  "selectable",
1198
1198
  "evented",
1199
1199
  "id",
@@ -1229,7 +1229,7 @@ const Je = [
1229
1229
  "radiusBottomRight",
1230
1230
  "radiusBottomLeft"
1231
1231
  ];
1232
- class Kt {
1232
+ class Qt {
1233
1233
  constructor({ editor: t }) {
1234
1234
  this.editor = t, this.canvas = t.canvas, this._historySuspendCount = 0, this.baseState = null, this.patches = [], this.currentIndex = 0, this.maxHistoryLength = t.options.maxHistoryLength, this.totalChangesCount = 0, this.baseStateChangesCount = 0, this._createDiffPatcher();
1235
1235
  }
@@ -1241,7 +1241,7 @@ class Kt {
1241
1241
  return this.patches[this.currentIndex - 1] || null;
1242
1242
  }
1243
1243
  _createDiffPatcher() {
1244
- this.diffPatcher = ys({
1244
+ this.diffPatcher = vs({
1245
1245
  objectHash(t) {
1246
1246
  const e = t, s = t, o = s.styles ? JSON.stringify(s.styles) : "";
1247
1247
  return [
@@ -1291,7 +1291,7 @@ class Kt {
1291
1291
  includeValueOnMove: !1
1292
1292
  },
1293
1293
  textDiff: {
1294
- diffMatchPatch: vs,
1294
+ diffMatchPatch: bs,
1295
1295
  minLength: 60
1296
1296
  }
1297
1297
  });
@@ -1333,7 +1333,7 @@ class Kt {
1333
1333
  if (console.log("saveState"), this.skipHistory) return;
1334
1334
  console.time("saveState");
1335
1335
  const t = this._withTemporaryUnlock(
1336
- () => this.canvas.toDatalessObject([...Je])
1336
+ () => this.canvas.toDatalessObject([...ts])
1337
1337
  );
1338
1338
  if (console.timeEnd("saveState"), !this.baseState) {
1339
1339
  this.baseState = t, this.patches = [], this.currentIndex = 0, console.log("Базовое состояние сохранено.");
@@ -1381,8 +1381,8 @@ class Kt {
1381
1381
  if (!t) return;
1382
1382
  console.log("loadStateFromFullState fullState", t);
1383
1383
  const { canvas: e, canvasManager: s, interactionBlocker: o, backgroundManager: n } = this.editor, { width: i, height: a } = e;
1384
- o.overlayMask = null, Kt._serializeCustomData(t), yield e.loadFromJSON(t, (l, u) => {
1385
- Kt._deserializeCustomData(l, u);
1384
+ o.overlayMask = null, Qt._serializeCustomData(t), yield e.loadFromJSON(t, (l, u) => {
1385
+ Qt._deserializeCustomData(l, u);
1386
1386
  });
1387
1387
  const r = e.getObjects().find((l) => l.id === "montage-area");
1388
1388
  r && (this.editor.montageArea = r, (i !== e.getWidth() || a !== e.getHeight()) && s.updateCanvas());
@@ -1496,7 +1496,7 @@ class Kt {
1496
1496
  }
1497
1497
  }
1498
1498
  }
1499
- const Ys = 0.1, Fs = 2, Ye = 0.1, Hs = 90, It = 16, Ct = 16, ft = 4096, pt = 4096, Fe = "application/image-editor:", Gt = [
1499
+ const Fs = 0.1, Hs = 2, Fe = 0.1, Ws = 90, It = 16, Ct = 16, ft = 4096, pt = 4096, He = "application/image-editor:", Gt = [
1500
1500
  "format",
1501
1501
  "uppercase",
1502
1502
  "textCaseRaw",
@@ -1510,7 +1510,7 @@ const Ys = 0.1, Fs = 2, Ye = 0.1, Hs = 90, It = 16, Ct = 16, ft = 4096, pt = 409
1510
1510
  "radiusTopRight",
1511
1511
  "radiusBottomRight",
1512
1512
  "radiusBottomLeft"
1513
- ], Ws = 50;
1513
+ ], Zs = 50;
1514
1514
  class at {
1515
1515
  constructor({ editor: t }) {
1516
1516
  this.editor = t, this.options = t.options, this._createdBlobUrls = [], this.acceptContentTypes = this.editor.options.acceptContentTypes, this.acceptFormats = this.getAllowedFormatsFromContentTypes();
@@ -1584,20 +1584,20 @@ class at {
1584
1584
  }
1585
1585
  }), null;
1586
1586
  if (this._createdBlobUrls.push(v), f === "svg") {
1587
- const S = yield ds(v);
1587
+ const S = yield ls(v);
1588
1588
  b = rt.groupSVGElements(S.objects, S.options);
1589
1589
  } else
1590
- b = yield kt.fromURL(v, { crossOrigin: "anonymous" });
1590
+ b = yield Bt.fromURL(v, { crossOrigin: "anonymous" });
1591
1591
  const { width: I, height: y } = b;
1592
- if (b instanceof kt) {
1592
+ if (b instanceof Bt) {
1593
1593
  const S = b.getElement();
1594
1594
  let A = "";
1595
1595
  if (S instanceof HTMLImageElement ? A = S.src : S instanceof HTMLCanvasElement && (A = S.toDataURL()), y > pt || I > ft) {
1596
1596
  const M = yield this.resizeImageToBoundaries(A, "max"), C = URL.createObjectURL(M);
1597
- this._createdBlobUrls.push(C), b = yield kt.fromURL(C, { crossOrigin: "anonymous" });
1597
+ this._createdBlobUrls.push(C), b = yield Bt.fromURL(C, { crossOrigin: "anonymous" });
1598
1598
  } else if (y < Ct || I < It) {
1599
1599
  const M = yield this.resizeImageToBoundaries(A, "min"), C = URL.createObjectURL(M);
1600
- this._createdBlobUrls.push(C), b = yield kt.fromURL(C, { crossOrigin: "anonymous" });
1600
+ this._createdBlobUrls.push(C), b = yield Bt.fromURL(C, { crossOrigin: "anonymous" });
1601
1601
  }
1602
1602
  }
1603
1603
  if (b.set("id", `${b.type}-${Y()}`), b.set("format", f), s === "scale-montage")
@@ -1734,21 +1734,21 @@ class at {
1734
1734
  [w]
1735
1735
  );
1736
1736
  if (d) {
1737
- const T = p * 0.264583, x = m * 0.264583, Z = (yield this.editor.moduleLoader.loadModule("jspdf")).jsPDF, P = new Z({
1737
+ const T = p * 0.264583, x = m * 0.264583, Z = (yield this.editor.moduleLoader.loadModule("jspdf")).jsPDF, U = new Z({
1738
1738
  orientation: T > x ? "landscape" : "portrait",
1739
1739
  unit: "mm",
1740
1740
  format: [T, x]
1741
1741
  });
1742
- if (P.addImage(String(S), "JPG", 0, 0, T, x), o) {
1742
+ if (U.addImage(String(S), "JPG", 0, 0, T, x), o) {
1743
1743
  const X = {
1744
- image: P.output("datauristring"),
1744
+ image: U.output("datauristring"),
1745
1745
  format: "pdf",
1746
1746
  contentType: "application/pdf",
1747
1747
  fileName: e
1748
1748
  };
1749
1749
  return i.fire("editor:canvas-exported", X), X;
1750
1750
  }
1751
- const F = P.output("blob"), L = {
1751
+ const F = U.output("blob"), L = {
1752
1752
  image: new File([F], e, { type: "application/pdf" }),
1753
1753
  format: "pdf",
1754
1754
  contentType: "application/pdf",
@@ -1827,7 +1827,7 @@ class at {
1827
1827
  };
1828
1828
  return a.fire("editor:object-exported", v), v;
1829
1829
  }
1830
- if (n && c instanceof kt) {
1830
+ if (n && c instanceof Bt) {
1831
1831
  const p = yield createImageBitmap(c.getElement()), m = yield r.post(
1832
1832
  "toDataURL",
1833
1833
  {
@@ -1998,11 +1998,11 @@ class at {
1998
1998
  return e ? e[1] : "";
1999
1999
  }
2000
2000
  }
2001
- const Mt = (h, t, e) => Math.max(Math.min(h, e), t), He = (h, t) => h * t, Zs = (h, t) => new $(h / 2, t / 2);
2002
- function Gs(h) {
2001
+ const Mt = (h, t, e) => Math.max(Math.min(h, e), t), We = (h, t) => h * t, Gs = (h, t) => new $(h / 2, t / 2);
2002
+ function Vs(h) {
2003
2003
  return ((h == null ? void 0 : h.type) === "image" || (h == null ? void 0 : h.format) === "svg") && typeof (h == null ? void 0 : h.width) == "number" && typeof (h == null ? void 0 : h.height) == "number";
2004
2004
  }
2005
- class Vs {
2005
+ class Xs {
2006
2006
  /**
2007
2007
  * @param options
2008
2008
  * @param options.editor – экземпляр редактора
@@ -2035,7 +2035,7 @@ class Vs {
2035
2035
  options: { canvasBackstoreWidth: a }
2036
2036
  } = this.editor, { width: r, height: c } = i, d = Mt(Number(t), It, ft);
2037
2037
  if (!a || a === "auto" || o ? this.adaptCanvasToContainer() : a ? this.setCanvasBackstoreWidth(Number(a)) : this.setCanvasBackstoreWidth(d), i.set({ width: d }), (f = n.clipPath) == null || f.set({ width: d }), e) {
2038
- const p = d / r, m = He(c, p);
2038
+ const p = d / r, m = We(c, p);
2039
2039
  this.setResolutionHeight(m);
2040
2040
  return;
2041
2041
  }
@@ -2065,7 +2065,7 @@ class Vs {
2065
2065
  options: { canvasBackstoreHeight: a }
2066
2066
  } = this.editor, { width: r, height: c } = i, d = Mt(Number(t), Ct, pt);
2067
2067
  if (!a || a === "auto" || o ? this.adaptCanvasToContainer() : a ? this.setCanvasBackstoreHeight(Number(a)) : this.setCanvasBackstoreHeight(d), i.set({ height: d }), (f = n.clipPath) == null || f.set({ height: d }), e) {
2068
- const p = d / c, m = He(r, p);
2068
+ const p = d / c, m = We(r, p);
2069
2069
  this.setResolutionWidth(m);
2070
2070
  return;
2071
2071
  }
@@ -2083,7 +2083,7 @@ class Vs {
2083
2083
  */
2084
2084
  centerMontageArea() {
2085
2085
  var r;
2086
- const { canvas: t, montageArea: e } = this.editor, s = t.getWidth(), o = t.getHeight(), n = t.getZoom(), i = Zs(s, o);
2086
+ const { canvas: t, montageArea: e } = this.editor, s = t.getWidth(), o = t.getHeight(), n = t.getZoom(), i = Gs(s, o);
2087
2087
  e.set({
2088
2088
  left: s / 2,
2089
2089
  top: o / 2
@@ -2168,7 +2168,7 @@ class Vs {
2168
2168
  if (d.length === 1)
2169
2169
  t.setActiveObject(d[0]);
2170
2170
  else {
2171
- const l = new B(d, {
2171
+ const l = new k(d, {
2172
2172
  canvas: t
2173
2173
  });
2174
2174
  t.setActiveObject(l);
@@ -2334,7 +2334,7 @@ class Vs {
2334
2334
  montageAreaHeight: r
2335
2335
  }
2336
2336
  } = this.editor, c = t || o.getActiveObject();
2337
- if (!Gs(c)) return;
2337
+ if (!Vs(c)) return;
2338
2338
  const { width: d, height: l } = c;
2339
2339
  let u = Math.min(d, ft), g = Math.min(l, pt);
2340
2340
  if (e) {
@@ -2394,7 +2394,7 @@ class Vs {
2394
2394
  );
2395
2395
  }
2396
2396
  }
2397
- class Xs {
2397
+ class Ks {
2398
2398
  constructor({ editor: t }) {
2399
2399
  this.editor = t, this.options = t.options;
2400
2400
  }
@@ -2405,7 +2405,7 @@ class Xs {
2405
2405
  * @param options.withoutSave - Не сохранять состояние
2406
2406
  * @fires editor:object-rotated
2407
2407
  */
2408
- rotate(t = Hs, { withoutSave: e } = {}) {
2408
+ rotate(t = Ws, { withoutSave: e } = {}) {
2409
2409
  const { canvas: s, historyManager: o } = this.editor, n = s.getActiveObject();
2410
2410
  if (!n) return;
2411
2411
  const i = n.angle + t;
@@ -2455,7 +2455,7 @@ class Xs {
2455
2455
  withoutSave: s
2456
2456
  } = {}) {
2457
2457
  const { canvas: o, historyManager: n } = this.editor, i = t || o.getActiveObject();
2458
- i && (i instanceof B ? i.getObjects().forEach((a) => {
2458
+ i && (i instanceof k ? i.getObjects().forEach((a) => {
2459
2459
  a.set("opacity", e);
2460
2460
  }) : i.set("opacity", e), o.renderAll(), s || n.saveState(), o.fire("editor:object-opacity-changed", {
2461
2461
  object: i,
@@ -2482,12 +2482,12 @@ class Xs {
2482
2482
  } = {}) {
2483
2483
  const { canvas: n, historyManager: i } = this.editor, a = t || n.getActiveObject();
2484
2484
  if (a) {
2485
- if (a instanceof B && !o) {
2485
+ if (a instanceof k && !o) {
2486
2486
  const r = a.getObjects();
2487
2487
  n.discardActiveObject(), r.forEach((d) => {
2488
2488
  this._fitSingleObject(d, e);
2489
2489
  });
2490
- const c = new B(r, { canvas: n });
2490
+ const c = new k(r, { canvas: n });
2491
2491
  n.setActiveObject(c);
2492
2492
  } else
2493
2493
  this._fitSingleObject(a, e);
@@ -2560,9 +2560,9 @@ class Xs {
2560
2560
  });
2561
2561
  }
2562
2562
  }
2563
- class Ks {
2563
+ class Qs {
2564
2564
  constructor({ editor: t }) {
2565
- this.editor = t, this.options = t.options, this.minZoom = this.options.minZoom || Ys, this.maxZoom = this.options.maxZoom || Fs, this.defaultZoom = this.options.defaultScale;
2565
+ this.editor = t, this.options = t.options, this.minZoom = this.options.minZoom || Fs, this.maxZoom = this.options.maxZoom || Hs, this.defaultZoom = this.options.defaultScale;
2566
2566
  }
2567
2567
  /**
2568
2568
  * Вспомогательный метод для вычисления размеров масштабированной монтажной области
@@ -2651,7 +2651,7 @@ class Ks {
2651
2651
  * @returns true если центрирование было применено
2652
2652
  * @private
2653
2653
  */
2654
- _applyViewportCentering(t, e = !1, s = Ye) {
2654
+ _applyViewportCentering(t, e = !1, s = Fe) {
2655
2655
  const { canvas: o } = this.editor, n = this._getScaledMontageDimensions(t), i = o.getWidth(), a = o.getHeight(), r = n.width > i || n.height > a, c = this._calculateFitZoom(), d = t - c;
2656
2656
  if (!(!r || d) && !e)
2657
2657
  return !1;
@@ -2726,7 +2726,7 @@ class Ks {
2726
2726
  * @param options.pointY - Координата Y точки зума
2727
2727
  * @fires editor:zoom-changed
2728
2728
  */
2729
- zoom(t = Ye, e = {}) {
2729
+ zoom(t = Fe, e = {}) {
2730
2730
  var g, f;
2731
2731
  if (!t) return;
2732
2732
  const { minZoom: s, maxZoom: o } = this, { canvas: n } = this.editor, i = t < 0, a = n.getZoom(), r = n.getCenterPoint(), c = (g = e.pointX) != null ? g : r.x, d = (f = e.pointY) != null ? f : r.y, l = new $(c, d);
@@ -2764,7 +2764,7 @@ class Ks {
2764
2764
  }), this.editor.panConstraintManager.updateBounds();
2765
2765
  }
2766
2766
  }
2767
- class Qs {
2767
+ class qs {
2768
2768
  constructor({ editor: t }) {
2769
2769
  this.editor = t, this.isBlocked = !1, this.overlayMask = null, this._createOverlay();
2770
2770
  }
@@ -3156,7 +3156,7 @@ class St {
3156
3156
  }) ? !1 : t.type === "linear" && e.type === "linear" ? Math.abs(t.coords.x1 - e.coords.x1) < 1e-4 && Math.abs(t.coords.y1 - e.coords.y1) < 1e-4 && Math.abs(t.coords.x2 - e.coords.x2) < 1e-4 && Math.abs(t.coords.y2 - e.coords.y2) < 1e-4 : t.type === "radial" && e.type === "radial" ? Math.abs(t.coords.x1 - e.coords.x1) < 1e-4 && Math.abs(t.coords.y1 - e.coords.y1) < 1e-4 && Math.abs(t.coords.x2 - e.coords.x2) < 1e-4 && Math.abs(t.coords.y2 - e.coords.y2) < 1e-4 && Math.abs(t.coords.r1 - e.coords.r1) < 1e-4 && Math.abs(t.coords.r2 - e.coords.r2) < 1e-4 : !1;
3157
3157
  }
3158
3158
  }
3159
- class Qt {
3159
+ class qt {
3160
3160
  constructor({ editor: t }) {
3161
3161
  this.editor = t;
3162
3162
  }
@@ -3171,7 +3171,7 @@ class Qt {
3171
3171
  const { canvas: s, historyManager: o } = this.editor;
3172
3172
  o.suspendHistory();
3173
3173
  const n = t || s.getActiveObject();
3174
- n && (n instanceof B ? n.getObjects().forEach((i) => {
3174
+ n && (n instanceof k ? n.getObjects().forEach((i) => {
3175
3175
  s.bringObjectToFront(i);
3176
3176
  }) : s.bringObjectToFront(n), s.renderAll(), o.resumeHistory(), e || o.saveState(), s.fire("editor:object-bring-to-front", {
3177
3177
  object: n,
@@ -3189,7 +3189,7 @@ class Qt {
3189
3189
  const { canvas: s, historyManager: o } = this.editor;
3190
3190
  o.suspendHistory();
3191
3191
  const n = t || s.getActiveObject();
3192
- n && (n instanceof B ? Qt._moveSelectionForward(s, n) : s.bringObjectForward(n), s.renderAll(), o.resumeHistory(), e || o.saveState(), s.fire("editor:object-bring-forward", {
3192
+ n && (n instanceof k ? qt._moveSelectionForward(s, n) : s.bringObjectForward(n), s.renderAll(), o.resumeHistory(), e || o.saveState(), s.fire("editor:object-bring-forward", {
3193
3193
  object: n,
3194
3194
  withoutSave: e
3195
3195
  }));
@@ -3212,7 +3212,7 @@ class Qt {
3212
3212
  n.suspendHistory();
3213
3213
  const r = t || s.getActiveObject();
3214
3214
  if (r) {
3215
- if (r instanceof B) {
3215
+ if (r instanceof k) {
3216
3216
  const c = r.getObjects();
3217
3217
  for (let d = c.length - 1; d >= 0; d -= 1)
3218
3218
  s.sendObjectToBack(c[d]);
@@ -3240,7 +3240,7 @@ class Qt {
3240
3240
  } = this.editor;
3241
3241
  n.suspendHistory();
3242
3242
  const r = t || s.getActiveObject();
3243
- r && (r instanceof B ? Qt._moveSelectionBackwards(s, r) : s.sendObjectBackwards(r), a && s.sendObjectToBack(a), s.sendObjectToBack(o), i && s.sendObjectToBack(i), s.renderAll(), n.resumeHistory(), e || n.saveState(), s.fire("editor:object-send-backwards", {
3243
+ r && (r instanceof k ? qt._moveSelectionBackwards(s, r) : s.sendObjectBackwards(r), a && s.sendObjectToBack(a), s.sendObjectToBack(o), i && s.sendObjectToBack(i), s.renderAll(), n.resumeHistory(), e || n.saveState(), s.fire("editor:object-send-backwards", {
3244
3244
  object: r,
3245
3245
  withoutSave: e
3246
3246
  }));
@@ -3284,7 +3284,7 @@ class Qt {
3284
3284
  });
3285
3285
  }
3286
3286
  }
3287
- class qs {
3287
+ class $s {
3288
3288
  /**
3289
3289
  * Менеджер фигур для редактора.
3290
3290
  * @param options - Опции и настройки менеджера фигур.
@@ -3324,7 +3324,7 @@ class qs {
3324
3324
  "height",
3325
3325
  "fill"
3326
3326
  ]);
3327
- const { canvas: u } = this.editor, g = new ls(k({
3327
+ const { canvas: u } = this.editor, g = new hs(B({
3328
3328
  id: t,
3329
3329
  left: e,
3330
3330
  top: s,
@@ -3364,7 +3364,7 @@ class qs {
3364
3364
  "radius",
3365
3365
  "fill"
3366
3366
  ]);
3367
- const { canvas: l } = this.editor, u = new hs(k({
3367
+ const { canvas: l } = this.editor, u = new us(B({
3368
3368
  id: t,
3369
3369
  left: e,
3370
3370
  top: s,
@@ -3406,7 +3406,7 @@ class qs {
3406
3406
  "height",
3407
3407
  "fill"
3408
3408
  ]);
3409
- const { canvas: u } = this.editor, g = new us(k({
3409
+ const { canvas: u } = this.editor, g = new gs(B({
3410
3410
  id: t,
3411
3411
  left: e,
3412
3412
  top: s,
@@ -3417,7 +3417,7 @@ class qs {
3417
3417
  return !e && !s && u.centerObject(g), c || (u.add(g), r || u.setActiveObject(g), u.renderAll()), g;
3418
3418
  }
3419
3419
  }
3420
- class $s {
3420
+ class Js {
3421
3421
  /**
3422
3422
  * @param options
3423
3423
  * @param options.editor - экземпляр редактора с доступом к canvas
@@ -3516,7 +3516,7 @@ class $s {
3516
3516
  _copyTextToClipboard(t) {
3517
3517
  return _(this, null, function* () {
3518
3518
  try {
3519
- const e = `${Fe}${t}`;
3519
+ const e = `${He}${t}`;
3520
3520
  return yield navigator.clipboard.writeText(e), console.info("Text copied to clipboard successfully"), !0;
3521
3521
  } catch (e) {
3522
3522
  const { errorManager: s } = this.editor;
@@ -3536,7 +3536,7 @@ class $s {
3536
3536
  */
3537
3537
  _addClonedObjectToCanvas(t) {
3538
3538
  const { canvas: e, historyManager: s } = this.editor;
3539
- if (e.discardActiveObject(), t instanceof B) {
3539
+ if (e.discardActiveObject(), t instanceof k) {
3540
3540
  s.suspendHistory(), t.canvas = e, t.forEachObject((o) => {
3541
3541
  e.add(o);
3542
3542
  }), e.setActiveObject(t), e.requestRenderAll(), s.resumeHistory(), s.saveState();
@@ -3570,7 +3570,7 @@ class $s {
3570
3570
  if (!s || s.locked) return !1;
3571
3571
  try {
3572
3572
  const o = yield s.clone(Gt);
3573
- return o instanceof B && o.forEachObject((n) => {
3573
+ return o instanceof k && o.forEachObject((n) => {
3574
3574
  n.set({
3575
3575
  id: `${n.type}-${Y()}`,
3576
3576
  evented: !0
@@ -3607,7 +3607,7 @@ class $s {
3607
3607
  return;
3608
3608
  }
3609
3609
  const s = t.getData("text/plain");
3610
- if (s && s.startsWith(Fe)) {
3610
+ if (s && s.startsWith(He)) {
3611
3611
  this.paste();
3612
3612
  return;
3613
3613
  }
@@ -3656,7 +3656,7 @@ class $s {
3656
3656
  if (!this.clipboard) return !1;
3657
3657
  try {
3658
3658
  const e = yield this.clipboard.clone(Gt);
3659
- return t.discardActiveObject(), e instanceof B && e.forEachObject((s) => {
3659
+ return t.discardActiveObject(), e instanceof k && e.forEachObject((s) => {
3660
3660
  s.set({
3661
3661
  id: `${s.type}-${Y()}`,
3662
3662
  evented: !0
@@ -3680,7 +3680,7 @@ class $s {
3680
3680
  });
3681
3681
  }
3682
3682
  }
3683
- class qt {
3683
+ class $t {
3684
3684
  constructor({ editor: t }) {
3685
3685
  this.editor = t;
3686
3686
  }
@@ -3706,7 +3706,7 @@ class qt {
3706
3706
  editable: !1,
3707
3707
  locked: !0
3708
3708
  };
3709
- i.set(a), !e && qt._isGroupOrSelection(i) && i.getObjects().forEach((c) => {
3709
+ i.set(a), !e && $t._isGroupOrSelection(i) && i.getObjects().forEach((c) => {
3710
3710
  c.set(a);
3711
3711
  }), o.renderAll(), s || n.saveState(), o.fire("editor:object-locked", {
3712
3712
  object: i,
@@ -3735,7 +3735,7 @@ class qt {
3735
3735
  editable: !0,
3736
3736
  locked: !1
3737
3737
  };
3738
- n.set(i), qt._isGroupOrSelection(n) && n.getObjects().forEach((a) => {
3738
+ n.set(i), $t._isGroupOrSelection(n) && n.getObjects().forEach((a) => {
3739
3739
  a.set(i);
3740
3740
  }), s.renderAll(), e || o.saveState(), s.fire("editor:object-unlocked", {
3741
3741
  object: n,
@@ -3743,10 +3743,10 @@ class qt {
3743
3743
  });
3744
3744
  }
3745
3745
  static _isGroupOrSelection(t) {
3746
- return t instanceof B || t instanceof wt;
3746
+ return t instanceof k || t instanceof wt;
3747
3747
  }
3748
3748
  }
3749
- class Js {
3749
+ class to {
3750
3750
  constructor({ editor: t }) {
3751
3751
  this.editor = t;
3752
3752
  }
@@ -3758,7 +3758,7 @@ class Js {
3758
3758
  if (Array.isArray(t))
3759
3759
  return t.length > 0 ? t : null;
3760
3760
  const e = t || this.editor.canvas.getActiveObject();
3761
- return !e || !(e instanceof B) ? null : e.getObjects();
3761
+ return !e || !(e instanceof k) ? null : e.getObjects();
3762
3762
  }
3763
3763
  /**
3764
3764
  * Получить группы для разгруппировки
@@ -3769,13 +3769,13 @@ class Js {
3769
3769
  const s = t.filter((o) => o instanceof wt);
3770
3770
  return s.length > 0 ? s : null;
3771
3771
  }
3772
- if (t instanceof B) {
3772
+ if (t instanceof k) {
3773
3773
  const s = t.getObjects().filter((o) => o instanceof wt);
3774
3774
  return s.length > 0 ? s : null;
3775
3775
  }
3776
3776
  const e = t || this.editor.canvas.getActiveObject();
3777
3777
  if (!e) return null;
3778
- if (e instanceof B) {
3778
+ if (e instanceof k) {
3779
3779
  const s = e.getObjects().filter((o) => o instanceof wt);
3780
3780
  return s.length > 0 ? s : null;
3781
3781
  }
@@ -3832,7 +3832,7 @@ class Js {
3832
3832
  s.add(l), i.push(l);
3833
3833
  });
3834
3834
  });
3835
- const a = new B(i, {
3835
+ const a = new k(i, {
3836
3836
  canvas: s
3837
3837
  });
3838
3838
  s.setActiveObject(a), s.requestRenderAll();
@@ -3847,7 +3847,7 @@ class Js {
3847
3847
  }
3848
3848
  }
3849
3849
  }
3850
- class to {
3850
+ class eo {
3851
3851
  constructor({ editor: t }) {
3852
3852
  this.editor = t;
3853
3853
  }
@@ -3858,11 +3858,11 @@ class to {
3858
3858
  selectAll() {
3859
3859
  const { canvas: t, canvasManager: e, objectLockManager: s } = this.editor;
3860
3860
  t.discardActiveObject();
3861
- const o = e.getObjects(), n = o.some((a) => a.locked), i = o.length > 1 ? new B(e.getObjects(), { canvas: t }) : o[0];
3861
+ const o = e.getObjects(), n = o.some((a) => a.locked), i = o.length > 1 ? new k(e.getObjects(), { canvas: t }) : o[0];
3862
3862
  n && s.lockObject({ object: i, skipInnerObjects: !0, withoutSave: !0 }), t.setActiveObject(i), t.requestRenderAll(), t.fire("editor:all-objects-selected", { selected: i });
3863
3863
  }
3864
3864
  }
3865
- class be {
3865
+ class Me {
3866
3866
  constructor({ editor: t }) {
3867
3867
  this.editor = t;
3868
3868
  }
@@ -3909,7 +3909,7 @@ class be {
3909
3909
  s || n.suspendHistory();
3910
3910
  const r = [];
3911
3911
  if (a.forEach((d) => {
3912
- if (be._isUngroupableGroup(d)) {
3912
+ if (Me._isUngroupableGroup(d)) {
3913
3913
  const l = this._handleGroupDeletion(d);
3914
3914
  r.push(...l);
3915
3915
  return;
@@ -4070,7 +4070,7 @@ class zt {
4070
4070
  message: i,
4071
4071
  data: o
4072
4072
  };
4073
- this._buffer.push(k({
4073
+ this._buffer.push(B({
4074
4074
  type: "editor:error"
4075
4075
  }, a)), this.editor.canvas.fire("editor:error", a);
4076
4076
  }
@@ -4098,7 +4098,7 @@ class zt {
4098
4098
  message: i,
4099
4099
  data: n
4100
4100
  };
4101
- this._buffer.push(k({
4101
+ this._buffer.push(B({
4102
4102
  type: "editor:warning"
4103
4103
  }, a)), this.editor.canvas.fire("editor:warning", a);
4104
4104
  }
@@ -4111,7 +4111,7 @@ class zt {
4111
4111
  return t ? Object.values(gt).some((e) => Object.values(e).includes(t)) : !1;
4112
4112
  }
4113
4113
  }
4114
- class eo {
4114
+ class so {
4115
4115
  constructor({ editor: t }) {
4116
4116
  this.currentBounds = null, this.editor = t;
4117
4117
  }
@@ -4219,7 +4219,7 @@ const nt = ({
4219
4219
  }
4220
4220
  _getTransformedDimensions(t = {}) {
4221
4221
  const { width: e, height: s } = this._getBackgroundDimensions();
4222
- return super._getTransformedDimensions(bt(k({}, t), {
4222
+ return super._getTransformedDimensions(bt(B({}, t), {
4223
4223
  width: e,
4224
4224
  height: s
4225
4225
  }));
@@ -4229,7 +4229,7 @@ const nt = ({
4229
4229
  */
4230
4230
  toObject(t = []) {
4231
4231
  const e = super.toObject(t);
4232
- return bt(k({}, e), {
4232
+ return bt(B({}, e), {
4233
4233
  backgroundOpacity: this.backgroundOpacity,
4234
4234
  paddingTop: this.paddingTop,
4235
4235
  paddingRight: this.paddingRight,
@@ -4290,7 +4290,7 @@ const nt = ({
4290
4290
  const e = nt({ value: (o = this.backgroundOpacity) != null ? o : 1, min: 0, max: 1 });
4291
4291
  let s;
4292
4292
  try {
4293
- s = new gs(t);
4293
+ s = new fs(t);
4294
4294
  } catch (n) {
4295
4295
  return zt.emitError({
4296
4296
  origin: "BackgroundTextbox",
@@ -4344,11 +4344,11 @@ jt.type = "background-textbox", jt.cacheProperties = [
4344
4344
  "radiusBottomRight",
4345
4345
  "radiusBottomLeft"
4346
4346
  ];
4347
- let $t = jt;
4348
- const so = () => {
4347
+ let Jt = jt;
4348
+ const oo = () => {
4349
4349
  var h;
4350
- (h = Be) != null && h.setClass && Be.setClass($t, "background-textbox");
4351
- }, oo = ({ textbox: h }) => {
4350
+ (h = xe) != null && h.setClass && xe.setClass(Jt, "background-textbox");
4351
+ }, no = ({ textbox: h }) => {
4352
4352
  var s, o;
4353
4353
  if (!h.isEditing) return null;
4354
4354
  const t = (s = h.selectionStart) != null ? s : 0, e = (o = h.selectionEnd) != null ? o : t;
@@ -4356,16 +4356,16 @@ const so = () => {
4356
4356
  start: Math.min(t, e),
4357
4357
  end: Math.max(t, e)
4358
4358
  };
4359
- }, no = ({ textbox: h }) => {
4359
+ }, io = ({ textbox: h }) => {
4360
4360
  var e, s;
4361
4361
  const t = (s = (e = h.text) == null ? void 0 : e.length) != null ? s : 0;
4362
4362
  return t <= 0 ? null : { start: 0, end: t };
4363
- }, io = ({ textbox: h, range: t }) => {
4363
+ }, ao = ({ textbox: h, range: t }) => {
4364
4364
  var s, o;
4365
4365
  if (!t) return !1;
4366
4366
  const e = (o = (s = h.text) == null ? void 0 : s.length) != null ? o : 0;
4367
4367
  return e <= 0 ? !1 : t.start <= 0 && t.end >= e;
4368
- }, se = ({
4368
+ }, oe = ({
4369
4369
  textbox: h,
4370
4370
  styles: t,
4371
4371
  range: e
@@ -4373,7 +4373,7 @@ const so = () => {
4373
4373
  if (!t || !Object.keys(t).length) return !1;
4374
4374
  const { start: s, end: o } = e;
4375
4375
  return o <= s ? !1 : (h.setSelectionStyles(t, s, o), !0);
4376
- }, We = ({
4376
+ }, Ze = ({
4377
4377
  textbox: h,
4378
4378
  range: t,
4379
4379
  property: e
@@ -4387,10 +4387,10 @@ const so = () => {
4387
4387
  );
4388
4388
  if (s.length)
4389
4389
  return (o = s[0]) == null ? void 0 : o[e];
4390
- }, Ze = ({ strokeColor: h, width: t }) => {
4390
+ }, Ge = ({ strokeColor: h, width: t }) => {
4391
4391
  if (!(t <= 0))
4392
4392
  return h != null ? h : "#000000";
4393
- }, Ge = ({ width: h = 0 }) => h ? Math.max(0, h) : 0, oe = ({ value: h }) => typeof h == "string" ? h.toLocaleUpperCase() : "", J = 0.01;
4393
+ }, Ve = ({ width: h = 0 }) => h ? Math.max(0, h) : 0, ne = ({ value: h }) => typeof h == "string" ? h.toLocaleUpperCase() : "", J = 0.01;
4394
4394
  class q {
4395
4395
  constructor({ editor: t }) {
4396
4396
  var e;
@@ -4411,11 +4411,11 @@ class q {
4411
4411
  lockMovementY: !1
4412
4412
  }), setTimeout(() => {
4413
4413
  this.isTextEditingActive = !1, this.editor.historyManager.saveState();
4414
- }, Ws);
4414
+ }, Zs);
4415
4415
  }, this._handleObjectScaling = (s) => {
4416
- var Nt, W, yt, Yt, ht, Ft, vt, we, Se, Ae, je, Ie, Ce;
4416
+ var Nt, W, yt, Yt, ht, Ft, vt, Se, Ae, je, Ie, Ce, Te;
4417
4417
  const { target: o, transform: n } = s;
4418
- if (o instanceof B) {
4418
+ if (o instanceof k) {
4419
4419
  this._handleActiveSelectionScaling({
4420
4420
  selection: o,
4421
4421
  transform: n
@@ -4433,11 +4433,11 @@ class q {
4433
4433
  baseStyles: u
4434
4434
  } = i, g = typeof ((Nt = n.original) == null ? void 0 : Nt.width) == "number" ? n.original.width : void 0, f = typeof ((W = n.original) == null ? void 0 : W.left) == "number" ? n.original.left : void 0, p = g != null ? g : a, m = f != null ? f : r, v = (yt = n.corner) != null ? yt : "", b = (Yt = n.action) != null ? Yt : "", I = ["ml", "mr"].includes(v) || b === "scaleX", y = ["mt", "mb"].includes(v) || b === "scaleY", w = ["tl", "tr", "bl", "br"].includes(v) || b === "scale", S = w || y;
4435
4435
  if (!I && !y && !w) return;
4436
- const A = Math.abs((Ft = (ht = o.scaleX) != null ? ht : n.scaleX) != null ? Ft : 1) || 1, M = Math.abs((we = (vt = o.scaleY) != null ? vt : n.scaleY) != null ? we : 1) || 1, C = Math.max(1, p * A), j = Math.max(1, c * M), {
4436
+ const A = Math.abs((Ft = (ht = o.scaleX) != null ? ht : n.scaleX) != null ? Ft : 1) || 1, M = Math.abs((Se = (vt = o.scaleY) != null ? vt : n.scaleY) != null ? Se : 1) || 1, C = Math.max(1, p * A), j = Math.max(1, c * M), {
4437
4437
  paddingTop: T = 0,
4438
4438
  paddingRight: x = 0,
4439
4439
  paddingBottom: Z = 0,
4440
- paddingLeft: P = 0,
4440
+ paddingLeft: U = 0,
4441
4441
  radiusTopLeft: F = 0,
4442
4442
  radiusTopRight: K = 0,
4443
4443
  radiusBottomRight: L = 0,
@@ -4450,27 +4450,27 @@ class q {
4450
4450
  right: Math.max(0, d.right * M),
4451
4451
  bottom: Math.max(0, d.bottom * M),
4452
4452
  left: Math.max(0, d.left * M)
4453
- } : d, U = et ? {
4453
+ } : d, P = et ? {
4454
4454
  topLeft: Math.max(0, l.topLeft * M),
4455
4455
  topRight: Math.max(0, l.topRight * M),
4456
4456
  bottomRight: Math.max(0, l.bottomRight * M),
4457
4457
  bottomLeft: Math.max(0, l.bottomLeft * M)
4458
- } : l, Ut = Object.keys(u).length > 0;
4458
+ } : l, Pt = Object.keys(u).length > 0;
4459
4459
  let mt;
4460
- if (S && Ut) {
4461
- const te = {};
4462
- Object.entries(u).forEach(([ns, Te]) => {
4463
- if (!Te) return;
4464
- const ee = {};
4465
- Object.entries(Te).forEach(([is, Ht]) => {
4460
+ if (S && Pt) {
4461
+ const ee = {};
4462
+ Object.entries(u).forEach(([is, Ee]) => {
4463
+ if (!Ee) return;
4464
+ const se = {};
4465
+ Object.entries(Ee).forEach(([as, Ht]) => {
4466
4466
  if (!Ht) return;
4467
- const Ee = k({}, Ht);
4468
- typeof Ht.fontSize == "number" && (Ee.fontSize = Math.max(1, Ht.fontSize * M)), ee[is] = Ee;
4469
- }), Object.keys(ee).length && (te[ns] = ee);
4470
- }), Object.keys(te).length && (mt = te);
4467
+ const Oe = B({}, Ht);
4468
+ typeof Ht.fontSize == "number" && (Oe.fontSize = Math.max(1, Ht.fontSize * M)), se[as] = Oe;
4469
+ }), Object.keys(se).length && (ee[is] = se);
4470
+ }), Object.keys(ee).length && (mt = ee);
4471
4471
  }
4472
- const Tt = (Ae = (Se = n.originX) != null ? Se : G) != null ? Ae : "left", Et = m + p, Ot = m + p / 2, Jt = H != null ? H : p, Lt = Math.abs(C - Jt) > J, Pt = Math.abs(j - (X != null ? X : c)) > J, Dt = Math.abs(z.top - T) > J || Math.abs(z.right - x) > J || Math.abs(z.bottom - Z) > J || Math.abs(z.left - P) > J, Rt = Math.abs(U.topLeft - F) > J || Math.abs(U.topRight - K) > J || Math.abs(U.bottomRight - L) > J || Math.abs(U.bottomLeft - R) > J;
4473
- if (!Lt && !Pt && !Dt && !Rt) {
4472
+ const Tt = (je = (Ae = n.originX) != null ? Ae : G) != null ? je : "left", Et = m + p, Ot = m + p / 2, te = H != null ? H : p, Lt = Math.abs(C - te) > J, Ut = Math.abs(j - (X != null ? X : c)) > J, Dt = Math.abs(z.top - T) > J || Math.abs(z.right - x) > J || Math.abs(z.bottom - Z) > J || Math.abs(z.left - U) > J, Rt = Math.abs(P.topLeft - F) > J || Math.abs(P.topRight - K) > J || Math.abs(P.bottomRight - L) > J || Math.abs(P.bottomLeft - R) > J;
4473
+ if (!Lt && !Ut && !Dt && !Rt) {
4474
4474
  o.set({ scaleX: 1, scaleY: 1 }), n.scaleX = 1, n.scaleY = 1;
4475
4475
  return;
4476
4476
  }
@@ -4481,32 +4481,32 @@ class q {
4481
4481
  paddingRight: z.right,
4482
4482
  paddingBottom: z.bottom,
4483
4483
  paddingLeft: z.left,
4484
- radiusTopLeft: U.topLeft,
4485
- radiusTopRight: U.topRight,
4486
- radiusBottomRight: U.bottomRight,
4487
- radiusBottomLeft: U.bottomLeft,
4484
+ radiusTopLeft: P.topLeft,
4485
+ radiusTopRight: P.topRight,
4486
+ radiusBottomRight: P.bottomRight,
4487
+ radiusBottomLeft: P.bottomLeft,
4488
4488
  scaleX: 1,
4489
4489
  scaleY: 1
4490
4490
  });
4491
- const ct = (je = o.width) != null ? je : C, _t = Math.abs(ct - Jt) > J;
4491
+ const ct = (Ie = o.width) != null ? Ie : C, _t = Math.abs(ct - te) > J;
4492
4492
  let dt = m;
4493
4493
  _t && (I || w) && (Tt === "right" ? dt = Et - ct : Tt === "center" && (dt = Ot - ct / 2)), o.set({ left: dt }), i.baseLeft = dt, n.scaleX = 1, n.scaleY = 1;
4494
4494
  const { original: ot } = n;
4495
- ot && (ot.scaleX = 1, ot.scaleY = 1, ot.width = ct, ot.height = o.height, ot.left = dt), o.setCoords(), this.canvas.requestRenderAll(), i.baseWidth = ct, i.baseFontSize = (Ie = o.fontSize) != null ? Ie : j, i.baseStyles = JSON.parse(JSON.stringify((Ce = o.styles) != null ? Ce : {})), i.basePadding = {
4495
+ ot && (ot.scaleX = 1, ot.scaleY = 1, ot.width = ct, ot.height = o.height, ot.left = dt), o.setCoords(), this.canvas.requestRenderAll(), i.baseWidth = ct, i.baseFontSize = (Ce = o.fontSize) != null ? Ce : j, i.baseStyles = JSON.parse(JSON.stringify((Te = o.styles) != null ? Te : {})), i.basePadding = {
4496
4496
  top: z.top,
4497
4497
  right: z.right,
4498
4498
  bottom: z.bottom,
4499
4499
  left: z.left
4500
4500
  }, i.baseRadii = {
4501
- topLeft: U.topLeft,
4502
- topRight: U.topRight,
4503
- bottomRight: U.bottomRight,
4504
- bottomLeft: U.bottomLeft
4505
- }, i.hasWidthChange = _t || Pt || Dt || Rt;
4501
+ topLeft: P.topLeft,
4502
+ topRight: P.topRight,
4503
+ bottomRight: P.bottomRight,
4504
+ bottomLeft: P.bottomLeft
4505
+ }, i.hasWidthChange = _t || Ut || Dt || Rt;
4506
4506
  }, this._handleObjectModified = (s) => {
4507
4507
  var b, I, y;
4508
4508
  const { target: o } = s;
4509
- if (o instanceof B) {
4509
+ if (o instanceof k) {
4510
4510
  this._finalizeActiveSelectionScaling({
4511
4511
  selection: o
4512
4512
  });
@@ -4540,7 +4540,7 @@ class q {
4540
4540
  target: o,
4541
4541
  style: v
4542
4542
  }), o.set({ scaleX: 1, scaleY: 1 }), o.setCoords();
4543
- }, this.editor = t, this.canvas = t.canvas, this.fonts = (e = t.options.fonts) != null ? e : [], this.scalingState = /* @__PURE__ */ new WeakMap(), this.isTextEditingActive = !1, this._bindEvents(), so();
4543
+ }, this.editor = t, this.canvas = t.canvas, this.fonts = (e = t.options.fonts) != null ? e : [], this.scalingState = /* @__PURE__ */ new WeakMap(), this.isTextEditingActive = !1, this._bindEvents(), oo();
4544
4544
  }
4545
4545
  /**
4546
4546
  * Добавляет новый текстовый объект на канвас.
@@ -4548,7 +4548,7 @@ class q {
4548
4548
  * @param flags — флаги поведения
4549
4549
  */
4550
4550
  addText(Z = {}, { withoutSelection: j = !1, withoutSave: T = !1, withoutAdding: x = !1 } = {}) {
4551
- var P = Z, {
4551
+ var U = Z, {
4552
4552
  id: t = `text-${Y()}`,
4553
4553
  text: e = "Новый текст",
4554
4554
  fontFamily: s,
@@ -4573,7 +4573,7 @@ class q {
4573
4573
  radiusTopRight: S = 0,
4574
4574
  radiusBottomRight: A = 0,
4575
4575
  radiusBottomLeft: M = 0
4576
- } = P, C = ut(P, [
4576
+ } = U, C = ut(U, [
4577
4577
  "id",
4578
4578
  "text",
4579
4579
  "fontFamily",
@@ -4602,10 +4602,10 @@ class q {
4602
4602
  var V;
4603
4603
  const { historyManager: F } = this.editor, { canvas: K } = this;
4604
4604
  F.suspendHistory();
4605
- const L = s != null ? s : this._getDefaultFontFamily(), R = Ge({ width: g }), X = Ze({
4605
+ const L = s != null ? s : this._getDefaultFontFamily(), R = Ve({ width: g }), X = Ge({
4606
4606
  strokeColor: u,
4607
4607
  width: R
4608
- }), H = k({
4608
+ }), H = B({
4609
4609
  id: t,
4610
4610
  fontFamily: L,
4611
4611
  fontSize: o,
@@ -4630,14 +4630,14 @@ class q {
4630
4630
  radiusTopRight: S,
4631
4631
  radiusBottomRight: A,
4632
4632
  radiusBottomLeft: M
4633
- }, C), G = new $t(e, H);
4633
+ }, C), G = new Jt(e, H);
4634
4634
  if (G.textCaseRaw = (V = G.text) != null ? V : "", r) {
4635
- const et = oe({ value: G.textCaseRaw });
4635
+ const et = ne({ value: G.textCaseRaw });
4636
4636
  et !== G.text && G.set({ text: et });
4637
4637
  }
4638
4638
  return C.left === void 0 && C.top === void 0 && K.centerObject(G), x || K.add(G), j || K.setActiveObject(G), K.requestRenderAll(), F.resumeHistory(), T || F.saveState(), K.fire("editor:text-added", {
4639
4639
  textbox: G,
4640
- options: bt(k({}, H), {
4640
+ options: bt(B({}, H), {
4641
4641
  text: e,
4642
4642
  bold: n,
4643
4643
  italic: i,
@@ -4690,7 +4690,7 @@ class q {
4690
4690
  paddingLeft: T,
4691
4691
  radiusTopLeft: x,
4692
4692
  radiusTopRight: Z,
4693
- radiusBottomRight: P,
4693
+ radiusBottomRight: U,
4694
4694
  radiusBottomLeft: F
4695
4695
  } = Dt, K = ut(Dt, [
4696
4696
  "text",
@@ -4716,39 +4716,39 @@ class q {
4716
4716
  "radiusTopRight",
4717
4717
  "radiusBottomRight",
4718
4718
  "radiusBottomLeft"
4719
- ]), L = k({}, K), R = oo({ textbox: n }), X = R ? this._expandRangeToFullLines({ textbox: n, range: R }) : null, H = {}, G = {}, V = {}, et = io({ textbox: n, range: R }), z = !R || et, U = !R;
4720
- if (d !== void 0 && (X && (G.fontFamily = d), z && (L.fontFamily = d, U && (V.fontFamily = d))), l !== void 0 && (X && (G.fontSize = l), z && (L.fontSize = l, U && (V.fontSize = l))), u !== void 0) {
4719
+ ]), L = B({}, K), R = no({ textbox: n }), X = R ? this._expandRangeToFullLines({ textbox: n, range: R }) : null, H = {}, G = {}, V = {}, et = ao({ textbox: n, range: R }), z = !R || et, P = !R;
4720
+ if (d !== void 0 && (X && (G.fontFamily = d), z && (L.fontFamily = d, P && (V.fontFamily = d))), l !== void 0 && (X && (G.fontSize = l), z && (L.fontSize = l, P && (V.fontSize = l))), u !== void 0) {
4721
4721
  const W = u ? "bold" : "normal";
4722
- R && (H.fontWeight = W), z && (L.fontWeight = W, U && (V.fontWeight = W));
4722
+ R && (H.fontWeight = W), z && (L.fontWeight = W, P && (V.fontWeight = W));
4723
4723
  }
4724
4724
  if (g !== void 0) {
4725
4725
  const W = g ? "italic" : "normal";
4726
- R && (H.fontStyle = W), z && (L.fontStyle = W, U && (V.fontStyle = W));
4726
+ R && (H.fontStyle = W), z && (L.fontStyle = W, P && (V.fontStyle = W));
4727
4727
  }
4728
- if (f !== void 0 && (R && (H.underline = f), z && (L.underline = f, U && (V.underline = f))), m !== void 0 && (R && (H.linethrough = m), z && (L.linethrough = m, U && (V.linethrough = m))), v !== void 0 && (L.textAlign = v), b !== void 0 && (R && (H.fill = b), z && (L.fill = b, U && (V.fill = b))), I !== void 0 || y !== void 0) {
4729
- const W = R ? We({ textbox: n, range: R, property: "strokeWidth" }) : void 0, yt = R ? We({ textbox: n, range: R, property: "stroke" }) : void 0, Yt = (ct = (Rt = y != null ? y : W) != null ? Rt : n.strokeWidth) != null ? ct : 0, ht = Ge({ width: Yt }), Ft = (dt = (_t = I != null ? I : yt) != null ? _t : n.stroke) != null ? dt : void 0, vt = Ze({
4728
+ if (f !== void 0 && (R && (H.underline = f), z && (L.underline = f, P && (V.underline = f))), m !== void 0 && (R && (H.linethrough = m), z && (L.linethrough = m, P && (V.linethrough = m))), v !== void 0 && (L.textAlign = v), b !== void 0 && (R && (H.fill = b), z && (L.fill = b, P && (V.fill = b))), I !== void 0 || y !== void 0) {
4729
+ const W = R ? Ze({ textbox: n, range: R, property: "strokeWidth" }) : void 0, yt = R ? Ze({ textbox: n, range: R, property: "stroke" }) : void 0, Yt = (ct = (Rt = y != null ? y : W) != null ? Rt : n.strokeWidth) != null ? ct : 0, ht = Ve({ width: Yt }), Ft = (dt = (_t = I != null ? I : yt) != null ? _t : n.stroke) != null ? dt : void 0, vt = Ge({
4730
4730
  strokeColor: Ft,
4731
4731
  width: ht
4732
4732
  });
4733
- R && (H.stroke = vt, H.strokeWidth = ht), z && (L.stroke = vt, L.strokeWidth = ht, U && (V.stroke = vt, V.strokeWidth = ht));
4733
+ R && (H.stroke = vt, H.strokeWidth = ht), z && (L.stroke = vt, L.strokeWidth = ht, P && (V.stroke = vt, V.strokeWidth = ht));
4734
4734
  }
4735
- w !== void 0 && (L.opacity = w), S !== void 0 && (L.backgroundColor = S), A !== void 0 && (L.backgroundOpacity = A), M !== void 0 && (L.paddingTop = M), C !== void 0 && (L.paddingRight = C), j !== void 0 && (L.paddingBottom = j), T !== void 0 && (L.paddingLeft = T), x !== void 0 && (L.radiusTopLeft = x), Z !== void 0 && (L.radiusTopRight = Z), P !== void 0 && (L.radiusBottomRight = P), F !== void 0 && (L.radiusBottomLeft = F);
4736
- const Ut = (Nt = n.textCaseRaw) != null ? Nt : (ot = n.text) != null ? ot : "", mt = !!n.uppercase, Tt = c !== void 0, Et = Tt ? c != null ? c : "" : Ut, Ot = p != null ? p : mt;
4735
+ w !== void 0 && (L.opacity = w), S !== void 0 && (L.backgroundColor = S), A !== void 0 && (L.backgroundOpacity = A), M !== void 0 && (L.paddingTop = M), C !== void 0 && (L.paddingRight = C), j !== void 0 && (L.paddingBottom = j), T !== void 0 && (L.paddingLeft = T), x !== void 0 && (L.radiusTopLeft = x), Z !== void 0 && (L.radiusTopRight = Z), U !== void 0 && (L.radiusBottomRight = U), F !== void 0 && (L.radiusBottomLeft = F);
4736
+ const Pt = (Nt = n.textCaseRaw) != null ? Nt : (ot = n.text) != null ? ot : "", mt = !!n.uppercase, Tt = c !== void 0, Et = Tt ? c != null ? c : "" : Pt, Ot = p != null ? p : mt;
4737
4737
  if (Tt || Ot !== mt) {
4738
- const W = Ot ? oe({ value: Et }) : Et;
4738
+ const W = Ot ? ne({ value: Et }) : Et;
4739
4739
  L.text = W, n.textCaseRaw = Et;
4740
- } else n.textCaseRaw === void 0 && (n.textCaseRaw = Ut);
4740
+ } else n.textCaseRaw === void 0 && (n.textCaseRaw = Pt);
4741
4741
  n.uppercase = Ot, n.set(L);
4742
4742
  let Lt = !1;
4743
4743
  if (R) {
4744
- const W = se({ textbox: n, styles: H, range: R }), yt = X ? se({ textbox: n, styles: G, range: X }) : !1;
4744
+ const W = oe({ textbox: n, styles: H, range: R }), yt = X ? oe({ textbox: n, styles: G, range: X }) : !1;
4745
4745
  Lt = W || yt;
4746
4746
  } else if (Object.keys(V).length) {
4747
- const W = no({ textbox: n });
4748
- W && (Lt = se({ textbox: n, styles: V, range: W }));
4747
+ const W = io({ textbox: n });
4748
+ W && (Lt = oe({ textbox: n, styles: V, range: W }));
4749
4749
  }
4750
- Lt && (n.dirty = !0), (S !== void 0 || A !== void 0 || M !== void 0 || C !== void 0 || j !== void 0 || T !== void 0 || x !== void 0 || Z !== void 0 || P !== void 0 || F !== void 0) && (n.dirty = !0), n.setCoords(), o || a.requestRenderAll(), i.resumeHistory(), s || i.saveState();
4751
- const Pt = q._getSnapshot(n);
4750
+ Lt && (n.dirty = !0), (S !== void 0 || A !== void 0 || M !== void 0 || C !== void 0 || j !== void 0 || T !== void 0 || x !== void 0 || Z !== void 0 || U !== void 0 || F !== void 0) && (n.dirty = !0), n.setCoords(), o || a.requestRenderAll(), i.resumeHistory(), s || i.saveState();
4751
+ const Ut = q._getSnapshot(n);
4752
4752
  return a.fire("editor:text-updated", {
4753
4753
  textbox: n,
4754
4754
  target: t,
@@ -4759,7 +4759,7 @@ class q {
4759
4759
  },
4760
4760
  updates: L,
4761
4761
  before: r,
4762
- after: Pt,
4762
+ after: Ut,
4763
4763
  selectionRange: R != null ? R : void 0,
4764
4764
  selectionStyles: R && Object.keys(H).length ? H : void 0
4765
4765
  }), n;
@@ -4809,7 +4809,7 @@ class q {
4809
4809
  if (!q._isTextbox(e)) return;
4810
4810
  const s = (i = e.text) != null ? i : "", o = !!e.uppercase, n = s.toLocaleLowerCase();
4811
4811
  if (o) {
4812
- const a = oe({ value: n });
4812
+ const a = ne({ value: n });
4813
4813
  a !== s && e.set({ text: a }), e.textCaseRaw = n;
4814
4814
  return;
4815
4815
  }
@@ -4963,7 +4963,7 @@ class q {
4963
4963
  radiusBottomLeft: T,
4964
4964
  left: x,
4965
4965
  top: Z,
4966
- width: P,
4966
+ width: U,
4967
4967
  height: F,
4968
4968
  angle: K,
4969
4969
  scaleX: L,
@@ -5000,7 +5000,7 @@ class q {
5000
5000
  radiusBottomLeft: T,
5001
5001
  left: x,
5002
5002
  top: Z,
5003
- width: P,
5003
+ width: U,
5004
5004
  height: F,
5005
5005
  angle: K,
5006
5006
  scaleX: L,
@@ -5026,7 +5026,7 @@ const tt = ({
5026
5026
  }) => {
5027
5027
  const s = tt({ value: h });
5028
5028
  return e ? s : s / (t || 1);
5029
- }, ao = ({
5029
+ }, ro = ({
5030
5030
  object: h,
5031
5031
  baseWidth: t,
5032
5032
  baseHeight: e,
@@ -5060,7 +5060,7 @@ const tt = ({
5060
5060
  x: l + g / 2,
5061
5061
  y: u + f / 2
5062
5062
  };
5063
- }, ro = ({
5063
+ }, co = ({
5064
5064
  normalizedX: h,
5065
5065
  normalizedY: t,
5066
5066
  bounds: e,
@@ -5074,7 +5074,7 @@ const tt = ({
5074
5074
  }
5075
5075
  const c = n + h * a, d = i + t * r;
5076
5076
  return new $(c, d);
5077
- }, co = ({
5077
+ }, lo = ({
5078
5078
  object: h,
5079
5079
  montageArea: t,
5080
5080
  bounds: e
@@ -5112,12 +5112,12 @@ const tt = ({
5112
5112
  } catch (t) {
5113
5113
  return null;
5114
5114
  }
5115
- }, lo = ({
5115
+ }, ho = ({
5116
5116
  x1: h,
5117
5117
  y1: t,
5118
5118
  x2: e,
5119
5119
  y2: s
5120
- }) => (Math.atan2(s - t, e - h) * 180 / Math.PI + 360) % 360, ho = (h) => {
5120
+ }) => (Math.atan2(s - t, e - h) * 180 / Math.PI + 360) % 360, uo = (h) => {
5121
5121
  if (!h || typeof h != "object") return null;
5122
5122
  const { type: t, coords: e, colorStops: s } = h, o = Array.isArray(s) ? s : [], n = o[0], i = o[o.length - 1], a = typeof (n == null ? void 0 : n.color) == "string" ? n.color : void 0, r = typeof (i == null ? void 0 : i.color) == "string" ? i.color : a, c = typeof (n == null ? void 0 : n.offset) == "number" ? n.offset * 100 : void 0, d = typeof (i == null ? void 0 : i.offset) == "number" ? i.offset * 100 : void 0;
5123
5123
  if (!a || !r || !e) return null;
@@ -5126,7 +5126,7 @@ const tt = ({
5126
5126
  if (typeof l == "number" && typeof u == "number" && typeof g == "number" && typeof f == "number")
5127
5127
  return {
5128
5128
  type: "linear",
5129
- angle: lo({ x1: l, y1: u, x2: g, y2: f }),
5129
+ angle: ho({ x1: l, y1: u, x2: g, y2: f }),
5130
5130
  startColor: a,
5131
5131
  endColor: r,
5132
5132
  startPosition: c,
@@ -5148,7 +5148,7 @@ const tt = ({
5148
5148
  };
5149
5149
  }
5150
5150
  return null;
5151
- }, ne = "_templateCenterX", ie = "_templateCenterY", ae = "_templateAnchorX", re = "_templateAnchorY";
5151
+ }, ie = "_templateCenterX", ae = "_templateCenterY", re = "_templateAnchorX", ce = "_templateAnchorY";
5152
5152
  class D {
5153
5153
  constructor({ editor: t }) {
5154
5154
  this.editor = t;
@@ -5182,7 +5182,7 @@ class D {
5182
5182
  baseWidth: m,
5183
5183
  baseHeight: v,
5184
5184
  montageArea: i != null ? i : null
5185
- })), I = bt(k({}, s), {
5185
+ })), I = bt(B({}, s), {
5186
5186
  baseWidth: m,
5187
5187
  baseHeight: v,
5188
5188
  positionsNormalized: !0,
@@ -5283,7 +5283,7 @@ class D {
5283
5283
  * Подготавливает объекты для сериализации.
5284
5284
  */
5285
5285
  static _collectObjects(t) {
5286
- return t ? t instanceof B ? t.getObjects() : [t] : [];
5286
+ return t ? t instanceof k ? t.getObjects() : [t] : [];
5287
5287
  }
5288
5288
  /**
5289
5289
  * Возвращает габариты объекта.
@@ -5359,7 +5359,7 @@ class D {
5359
5359
  const e = typeof t.svgMarkup == "string" ? t.svgMarkup : null;
5360
5360
  if (!e) return null;
5361
5361
  try {
5362
- const s = yield fs(e), o = rt.groupSVGElements(s.objects, s.options), n = yield rt.enlivenObjectEnlivables(
5362
+ const s = yield ps(e), o = rt.groupSVGElements(s.objects, s.options), n = yield rt.enlivenObjectEnlivables(
5363
5363
  D._prepareSerializableProps(t)
5364
5364
  );
5365
5365
  return o.set(n), o.setCoords(), o;
@@ -5372,7 +5372,7 @@ class D {
5372
5372
  * Убирает технические поля сериализации, оставляя только применимые свойства.
5373
5373
  */
5374
5374
  static _prepareSerializableProps(t) {
5375
- const e = k({}, t);
5375
+ const e = B({}, t);
5376
5376
  return delete e.svgMarkup, delete e.objects, delete e.path, delete e.paths, delete e.type, delete e.version, e;
5377
5377
  }
5378
5378
  /**
@@ -5418,14 +5418,14 @@ class D {
5418
5418
  montageArea: a,
5419
5419
  useRelativePositions: r
5420
5420
  }) {
5421
- const c = t, { x: d, y: l } = ao({
5421
+ const c = t, { x: d, y: l } = ro({
5422
5422
  object: t,
5423
5423
  baseWidth: n,
5424
5424
  baseHeight: i,
5425
5425
  useRelativePositions: r,
5426
5426
  centerKeys: {
5427
- x: ne,
5428
- y: ie
5427
+ x: ie,
5428
+ y: ae
5429
5429
  }
5430
5430
  }), { scaleX: u, scaleY: g } = t, f = tt({ value: u, fallback: 1 }), p = tt({ value: g, fallback: 1 }), m = D._getPositioningBounds({
5431
5431
  bounds: s,
@@ -5433,9 +5433,9 @@ class D {
5433
5433
  baseHeight: i,
5434
5434
  scale: e,
5435
5435
  useRelativePositions: r,
5436
- anchorX: D._resolveAnchor(c, ae),
5437
- anchorY: D._resolveAnchor(c, re)
5438
- }), v = ro({
5436
+ anchorX: D._resolveAnchor(c, re),
5437
+ anchorY: D._resolveAnchor(c, ce)
5438
+ }), v = co({
5439
5439
  normalizedX: d,
5440
5440
  normalizedY: l,
5441
5441
  bounds: m,
@@ -5445,7 +5445,7 @@ class D {
5445
5445
  t.set({
5446
5446
  scaleX: b,
5447
5447
  scaleY: I
5448
- }), t.setPositionByOrigin(v, "center", "center"), t.setCoords(), delete c[ne], delete c[ie], delete c[ae], delete c[re];
5448
+ }), t.setPositionByOrigin(v, "center", "center"), t.setCoords(), delete c[ie], delete c[ae], delete c[re], delete c[ce];
5449
5449
  }
5450
5450
  /**
5451
5451
  * Возвращает bounds, в которых должны позиционироваться нормализованные объекты.
@@ -5496,7 +5496,7 @@ class D {
5496
5496
  fallback: e
5497
5497
  }) {
5498
5498
  const { width: s, height: o } = e, r = t || {}, { baseWidth: n = s, baseHeight: i = o } = r, a = ut(r, ["baseWidth", "baseHeight"]);
5499
- return k({
5499
+ return B({
5500
5500
  baseWidth: n,
5501
5501
  baseHeight: i
5502
5502
  }, a);
@@ -5523,7 +5523,7 @@ class D {
5523
5523
  t.setActiveObject(e[0]);
5524
5524
  return;
5525
5525
  }
5526
- const s = new B(e, { canvas: t });
5526
+ const s = new k(e, { canvas: t });
5527
5527
  t.setActiveObject(s);
5528
5528
  }
5529
5529
  /**
@@ -5547,7 +5547,7 @@ class D {
5547
5547
  baseHeight: o,
5548
5548
  montageArea: n
5549
5549
  }) {
5550
- const i = t.toDatalessObject([...Je]);
5550
+ const i = t.toDatalessObject([...ts]);
5551
5551
  if (D._isSvgObject(t)) {
5552
5552
  const y = D._extractSvgMarkup(t);
5553
5553
  y && (i.svgMarkup = y, delete i.objects, delete i.path);
@@ -5558,7 +5558,7 @@ class D {
5558
5558
  top: r,
5559
5559
  width: c,
5560
5560
  height: d
5561
- } = e, l = t.getBoundingRect(!1, !0), u = s || c || 1, g = o || d || 1, f = co({
5561
+ } = e, l = t.getBoundingRect(!1, !0), u = s || c || 1, g = o || d || 1, f = lo({
5562
5562
  object: t,
5563
5563
  montageArea: n,
5564
5564
  bounds: e
@@ -5569,11 +5569,11 @@ class D {
5569
5569
  y: (y.y - r) / g
5570
5570
  };
5571
5571
  })(), m = (l.left - a) / u, v = (l.top - r) / g, b = m + l.width / u, I = v + l.height / g;
5572
- return i[ne] = p.x, i[ie] = p.y, i[ae] = D._detectAnchor({
5572
+ return i[ie] = p.x, i[ae] = p.y, i[re] = D._detectAnchor({
5573
5573
  center: p.x,
5574
5574
  start: m,
5575
5575
  end: b
5576
- }), i[re] = D._detectAnchor({
5576
+ }), i[ce] = D._detectAnchor({
5577
5577
  center: p.y,
5578
5578
  start: v,
5579
5579
  end: I
@@ -5607,7 +5607,7 @@ class D {
5607
5607
  withoutSave: !0
5608
5608
  }), !0;
5609
5609
  if (a === "gradient") {
5610
- const c = ho(n);
5610
+ const c = uo(n);
5611
5611
  if (c)
5612
5612
  return e.setGradientBackground({
5613
5613
  gradient: c,
@@ -5658,7 +5658,7 @@ class D {
5658
5658
  */
5659
5659
  static _cloneCustomData(t) {
5660
5660
  if (!(!t || typeof t != "object"))
5661
- return k({}, t);
5661
+ return B({}, t);
5662
5662
  }
5663
5663
  /**
5664
5664
  * Извлекает src изображения из FabricImage или его исходного элемента.
@@ -5687,7 +5687,7 @@ class D {
5687
5687
  return rt.enlivenObjectEnlivables(t);
5688
5688
  }
5689
5689
  }
5690
- const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
5690
+ const go = 5, es = "#3D8BF4", fe = 1, Xt = 1, Xe = ({
5691
5691
  anchors: h,
5692
5692
  positions: t,
5693
5693
  threshold: e
@@ -5702,16 +5702,16 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
5702
5702
  delta: s,
5703
5703
  guidePosition: n
5704
5704
  };
5705
- }, go = ({
5705
+ }, fo = ({
5706
5706
  activeBounds: h,
5707
5707
  threshold: t,
5708
5708
  anchors: e
5709
5709
  }) => {
5710
- const { left: s, right: o, centerX: n, top: i, bottom: a, centerY: r } = h, c = Ve({
5710
+ const { left: s, right: o, centerX: n, top: i, bottom: a, centerY: r } = h, c = Xe({
5711
5711
  anchors: e.vertical,
5712
5712
  positions: [s, n, o],
5713
5713
  threshold: t
5714
- }), d = Ve({
5714
+ }), d = Xe({
5715
5715
  anchors: e.horizontal,
5716
5716
  positions: [i, r, a],
5717
5717
  threshold: t
@@ -5727,7 +5727,7 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
5727
5727
  deltaY: d.delta,
5728
5728
  guides: l
5729
5729
  };
5730
- }, es = ({
5730
+ }, ss = ({
5731
5731
  activeBounds: h,
5732
5732
  aligned: t,
5733
5733
  threshold: e,
@@ -5799,7 +5799,7 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
5799
5799
  }
5800
5800
  }
5801
5801
  return c;
5802
- }, fo = ({
5802
+ }, po = ({
5803
5803
  activeBounds: h,
5804
5804
  candidates: t,
5805
5805
  threshold: e,
@@ -5858,7 +5858,7 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
5858
5858
  if (A >= 0) {
5859
5859
  const M = A / 2, C = n - y.bottom, j = w.top - i, T = Math.abs(C - M), x = Math.abs(j - M), Z = Math.max(T, x);
5860
5860
  if (Z <= e) {
5861
- const P = M - C, F = i + P, K = {
5861
+ const U = M - C, F = i + U, K = {
5862
5862
  type: "vertical",
5863
5863
  axis: o,
5864
5864
  refStart: y.bottom,
@@ -5867,11 +5867,11 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
5867
5867
  activeEnd: F + M,
5868
5868
  distance: M
5869
5869
  };
5870
- m.push({ delta: P, guide: K, diff: Z });
5870
+ m.push({ delta: U, guide: K, diff: Z });
5871
5871
  }
5872
5872
  }
5873
5873
  }
5874
- const b = es({
5874
+ const b = ss({
5875
5875
  activeBounds: h,
5876
5876
  aligned: c,
5877
5877
  threshold: e,
@@ -5885,7 +5885,7 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
5885
5885
  delta: I.delta,
5886
5886
  guide: I.guide
5887
5887
  };
5888
- }, po = ({
5888
+ }, mo = ({
5889
5889
  activeBounds: h,
5890
5890
  candidates: t,
5891
5891
  threshold: e,
@@ -5944,7 +5944,7 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
5944
5944
  if (A >= 0) {
5945
5945
  const M = A / 2, C = n - y.right, j = w.left - i, T = Math.abs(C - M), x = Math.abs(j - M), Z = Math.max(T, x);
5946
5946
  if (Z <= e) {
5947
- const P = M - C, F = i + P, K = {
5947
+ const U = M - C, F = i + U, K = {
5948
5948
  type: "horizontal",
5949
5949
  axis: o,
5950
5950
  refStart: y.right,
@@ -5953,11 +5953,11 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
5953
5953
  activeEnd: F + M,
5954
5954
  distance: M
5955
5955
  };
5956
- m.push({ delta: P, guide: K, diff: Z });
5956
+ m.push({ delta: U, guide: K, diff: Z });
5957
5957
  }
5958
5958
  }
5959
5959
  }
5960
- const b = es({
5960
+ const b = ss({
5961
5961
  activeBounds: h,
5962
5962
  aligned: c,
5963
5963
  threshold: e,
@@ -5971,18 +5971,18 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
5971
5971
  delta: I.delta,
5972
5972
  guide: I.guide
5973
5973
  };
5974
- }, mo = ({
5974
+ }, yo = ({
5975
5975
  activeBounds: h,
5976
5976
  candidates: t,
5977
5977
  threshold: e,
5978
5978
  spacingPatterns: s
5979
5979
  }) => {
5980
- const o = fo({
5980
+ const o = po({
5981
5981
  activeBounds: h,
5982
5982
  candidates: t,
5983
5983
  threshold: e,
5984
5984
  patterns: s.vertical
5985
- }), n = po({
5985
+ }), n = mo({
5986
5986
  activeBounds: h,
5987
5987
  candidates: t,
5988
5988
  threshold: e,
@@ -5993,7 +5993,7 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
5993
5993
  deltaY: o.delta,
5994
5994
  guides: i
5995
5995
  };
5996
- }, yo = ({
5996
+ }, vo = ({
5997
5997
  context: h,
5998
5998
  x: t,
5999
5999
  y: e,
@@ -6003,7 +6003,7 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
6003
6003
  }) => {
6004
6004
  const i = Math.min(n, s / 2, o / 2);
6005
6005
  h.moveTo(t + i, e), h.lineTo(t + s - i, e), h.quadraticCurveTo(t + s, e, t + s, e + i), h.lineTo(t + s, e + o - i), h.quadraticCurveTo(t + s, e + o, t + s - i, e + o), h.lineTo(t + i, e + o), h.quadraticCurveTo(t, e + o, t, e + o - i), h.lineTo(t, e + i), h.quadraticCurveTo(t, e, t + i, e), h.closePath();
6006
- }, fe = ({
6006
+ }, pe = ({
6007
6007
  context: h,
6008
6008
  type: t,
6009
6009
  axis: e,
@@ -6023,7 +6023,7 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
6023
6023
  const p = i || 1, m = 12 / p, v = l / p, b = u / p, I = (s + o) / 2 + g, y = t === "vertical" ? e + f : I, w = t === "vertical" ? I : e + f;
6024
6024
  h.save(), h.setLineDash([]), h.fillStyle = a, h.strokeStyle = a, h.lineWidth = d / p, h.font = `${m}px ${c}`, h.textAlign = "center", h.textBaseline = "middle";
6025
6025
  const A = h.measureText(n).width + v * 2, M = m + v * 2, C = y - A / 2, j = w - M / 2;
6026
- h.beginPath(), yo({
6026
+ h.beginPath(), vo({
6027
6027
  context: h,
6028
6028
  x: C,
6029
6029
  y: j,
@@ -6031,7 +6031,7 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
6031
6031
  height: M,
6032
6032
  radius: b
6033
6033
  }), h.fill(), h.fillStyle = r, h.fillText(n, y, w), h.restore();
6034
- }, vo = ({
6034
+ }, bo = ({
6035
6035
  context: h,
6036
6036
  guide: t,
6037
6037
  zoom: e
@@ -6046,8 +6046,8 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
6046
6046
  distance: c
6047
6047
  } = t, d = Math.round(c).toString();
6048
6048
  h.beginPath(), s === "vertical" ? (h.moveTo(o, n), h.lineTo(o, i), h.moveTo(o, a), h.lineTo(o, r)) : (h.moveTo(n, o), h.lineTo(i, o), h.moveTo(a, o), h.lineTo(r, o)), h.stroke();
6049
- const l = ts;
6050
- fe({
6049
+ const l = es;
6050
+ pe({
6051
6051
  context: h,
6052
6052
  type: s,
6053
6053
  axis: o,
@@ -6056,8 +6056,8 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
6056
6056
  text: d,
6057
6057
  zoom: e,
6058
6058
  color: l,
6059
- lineWidth: ge
6060
- }), fe({
6059
+ lineWidth: fe
6060
+ }), pe({
6061
6061
  context: h,
6062
6062
  type: s,
6063
6063
  axis: o,
@@ -6066,9 +6066,9 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
6066
6066
  text: d,
6067
6067
  zoom: e,
6068
6068
  color: l,
6069
- lineWidth: ge
6069
+ lineWidth: fe
6070
6070
  });
6071
- }, Xe = ({
6071
+ }, Ke = ({
6072
6072
  anchors: h,
6073
6073
  bounds: t
6074
6074
  }) => {
@@ -6081,7 +6081,7 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
6081
6081
  centerY: a
6082
6082
  } = t;
6083
6083
  h.vertical.push(e, o, s), h.horizontal.push(n, a, i);
6084
- }, Ke = ({
6084
+ }, Qe = ({
6085
6085
  bounds: h,
6086
6086
  type: t,
6087
6087
  primaryStart: e,
@@ -6108,30 +6108,30 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
6108
6108
  });
6109
6109
  }
6110
6110
  return o;
6111
- }, bo = ({
6111
+ }, Mo = ({
6112
6112
  bounds: h
6113
6113
  }) => {
6114
- const t = Ke({
6114
+ const t = Qe({
6115
6115
  bounds: h,
6116
6116
  type: "vertical",
6117
6117
  primaryStart: "top",
6118
6118
  primaryEnd: "bottom"
6119
- }), e = Ke({
6119
+ }), e = Qe({
6120
6120
  bounds: h,
6121
6121
  type: "horizontal",
6122
6122
  primaryStart: "left",
6123
6123
  primaryEnd: "right"
6124
6124
  });
6125
6125
  return { vertical: t, horizontal: e };
6126
- }, Mo = ["montage-area", "background", "interaction-blocker"], ss = ({
6126
+ }, wo = ["montage-area", "background", "interaction-blocker"], os = ({
6127
6127
  activeObject: h
6128
6128
  }) => {
6129
6129
  const t = /* @__PURE__ */ new Set();
6130
- return h && (t.add(h), h instanceof B && h.getObjects().forEach((e) => t.add(e))), t;
6131
- }, os = ({
6130
+ return h && (t.add(h), h instanceof k && h.getObjects().forEach((e) => t.add(e))), t;
6131
+ }, ns = ({
6132
6132
  object: h,
6133
6133
  excluded: t,
6134
- ignoredIds: e = Mo
6134
+ ignoredIds: e = wo
6135
6135
  }) => {
6136
6136
  if (t.has(h)) return !0;
6137
6137
  const { visible: s = !0 } = h;
@@ -6139,7 +6139,7 @@ const uo = 5, ts = "#3D8BF4", ge = 1, Ve = ({
6139
6139
  const { id: o } = h;
6140
6140
  return !!(o && e.includes(o));
6141
6141
  };
6142
- class wo {
6142
+ class So {
6143
6143
  /**
6144
6144
  * Создаёт менеджер прилипания и инициализирует слушатели событий.
6145
6145
  */
@@ -6186,51 +6186,51 @@ class wo {
6186
6186
  * Выполняет привязку объекта к ближайшим линиям при его перемещении.
6187
6187
  */
6188
6188
  _handleObjectMoving(t) {
6189
- var f, p;
6189
+ var p, m;
6190
6190
  const { target: e, e: s } = t;
6191
6191
  if (!e) {
6192
6192
  this._clearGuides();
6193
6193
  return;
6194
6194
  }
6195
- if (s != null && s.ctrlKey) {
6196
- this._clearGuides();
6195
+ if (!!(s != null && s.ctrlKey)) {
6196
+ this._clearGuides(), this._applyMovementStep({ target: e });
6197
6197
  return;
6198
6198
  }
6199
6199
  !this.anchors.vertical.length && !this.anchors.horizontal.length && this._cacheAnchors({ activeObject: e });
6200
- let o = lt({ object: e });
6201
- if (!o) {
6200
+ let n = lt({ object: e });
6201
+ if (!n) {
6202
6202
  this._clearGuides();
6203
6203
  return;
6204
6204
  }
6205
- const { canvas: n } = this, i = n.getZoom() || 1, a = uo / i, r = go({
6206
- activeBounds: o,
6207
- threshold: a,
6205
+ const { canvas: i } = this, a = i.getZoom() || 1, r = go / a, c = fo({
6206
+ activeBounds: n,
6207
+ threshold: r,
6208
6208
  anchors: this.anchors
6209
- }), { deltaX: c, deltaY: d, guides: l } = r;
6210
- if (c !== 0 || d !== 0) {
6211
- const { left: m = 0, top: v = 0 } = e;
6209
+ }), { deltaX: d, deltaY: l, guides: u } = c;
6210
+ if (d !== 0 || l !== 0) {
6211
+ const { left: v = 0, top: b = 0 } = e;
6212
6212
  e.set({
6213
- left: m + c,
6214
- top: v + d
6215
- }), e.setCoords(), o = (f = lt({ object: e })) != null ? f : o;
6216
- }
6217
- const u = this.cachedTargetBounds.length ? this.cachedTargetBounds : this._collectTargets({ activeObject: e }).map((m) => lt({ object: m })).filter((m) => !!m), g = mo({
6218
- activeBounds: o,
6219
- candidates: u,
6220
- threshold: a,
6213
+ left: v + d,
6214
+ top: b + l
6215
+ }), e.setCoords(), n = (p = lt({ object: e })) != null ? p : n;
6216
+ }
6217
+ const g = this.cachedTargetBounds.length ? this.cachedTargetBounds : this._collectTargets({ activeObject: e }).map((v) => lt({ object: v })).filter((v) => !!v), f = yo({
6218
+ activeBounds: n,
6219
+ candidates: g,
6220
+ threshold: r,
6221
6221
  spacingPatterns: this.spacingPatterns
6222
6222
  });
6223
- if (g.deltaX !== 0 || g.deltaY !== 0) {
6224
- const { left: m = 0, top: v = 0 } = e;
6223
+ if (f.deltaX !== 0 || f.deltaY !== 0) {
6224
+ const { left: v = 0, top: b = 0 } = e;
6225
6225
  e.set({
6226
- left: m + g.deltaX,
6227
- top: v + g.deltaY
6228
- }), e.setCoords(), o = (p = lt({ object: e })) != null ? p : o;
6226
+ left: v + f.deltaX,
6227
+ top: b + f.deltaY
6228
+ }), e.setCoords(), n = (m = lt({ object: e })) != null ? m : n;
6229
6229
  }
6230
6230
  this._applyGuides({
6231
- guides: l,
6232
- spacingGuides: g.guides
6233
- });
6231
+ guides: u,
6232
+ spacingGuides: f.guides
6233
+ }), this._applyMovementStep({ target: e });
6234
6234
  }
6235
6235
  /**
6236
6236
  * Очищает направляющие и кеш после окончания перетаскивания.
@@ -6253,11 +6253,11 @@ class wo {
6253
6253
  const { canvas: t, guideBounds: e } = this, s = t.getSelectionContext();
6254
6254
  if (!s) return;
6255
6255
  const o = e != null ? e : this._calculateViewportBounds(), { left: n, right: i, top: a, bottom: r } = o, { viewportTransform: c } = t, d = t.getZoom() || 1;
6256
- s.save(), Array.isArray(c) && s.transform(...c), s.lineWidth = ge / d, s.strokeStyle = ts, s.setLineDash([4, 4]);
6256
+ s.save(), Array.isArray(c) && s.transform(...c), s.lineWidth = fe / d, s.strokeStyle = es, s.setLineDash([4, 4]);
6257
6257
  for (const l of this.activeGuides)
6258
6258
  s.beginPath(), l.type === "vertical" ? (s.moveTo(l.position, a), s.lineTo(l.position, r)) : (s.moveTo(n, l.position), s.lineTo(i, l.position)), s.stroke();
6259
6259
  for (const l of this.activeSpacingGuides)
6260
- vo({
6260
+ bo({
6261
6261
  context: s,
6262
6262
  guide: l,
6263
6263
  zoom: d
@@ -6289,6 +6289,16 @@ class wo {
6289
6289
  _clearAnchors() {
6290
6290
  this.anchors = { vertical: [], horizontal: [] }, this.spacingPatterns = { vertical: [], horizontal: [] }, this.cachedTargetBounds = [];
6291
6291
  }
6292
+ /**
6293
+ * Применяет шаг перемещения, округляя координаты объекта к сетке MOVE_SNAP_STEP.
6294
+ */
6295
+ _applyMovementStep({ target: t }) {
6296
+ const { left: e = 0, top: s = 0 } = t, o = Math.round(e / Xt) * Xt, n = Math.round(s / Xt) * Xt;
6297
+ o === e && n === s || (t.set({
6298
+ left: o,
6299
+ top: n
6300
+ }), t.setCoords());
6301
+ }
6292
6302
  /**
6293
6303
  * Сохраняет линии для прилипания от всех доступных объектов и монтажной области.
6294
6304
  */
@@ -6296,11 +6306,11 @@ class wo {
6296
6306
  const e = this._collectTargets({ activeObject: t }), s = { vertical: [], horizontal: [] }, o = [];
6297
6307
  for (const a of e) {
6298
6308
  const r = lt({ object: a });
6299
- r && (Xe({ anchors: s, bounds: r }), o.push(r));
6309
+ r && (Ke({ anchors: s, bounds: r }), o.push(r));
6300
6310
  }
6301
6311
  const { montageArea: n } = this.editor, i = lt({ object: n });
6302
6312
  if (i) {
6303
- Xe({ anchors: s, bounds: i });
6313
+ Ke({ anchors: s, bounds: i });
6304
6314
  const { left: a, right: r, top: c, bottom: d } = i;
6305
6315
  this.guideBounds = {
6306
6316
  left: a,
@@ -6310,15 +6320,15 @@ class wo {
6310
6320
  };
6311
6321
  } else
6312
6322
  this.guideBounds = this._calculateViewportBounds();
6313
- this.anchors = s, this.spacingPatterns = bo({ bounds: o }), this.cachedTargetBounds = o;
6323
+ this.anchors = s, this.spacingPatterns = Mo({ bounds: o }), this.cachedTargetBounds = o;
6314
6324
  }
6315
6325
  /**
6316
6326
  * Собирает объекты, подходящие для прилипания, исключая активный объект и запрещённые id.
6317
6327
  */
6318
6328
  _collectTargets({ activeObject: t }) {
6319
- const e = ss({ activeObject: t }), s = [];
6329
+ const e = os({ activeObject: t }), s = [];
6320
6330
  return this.canvas.forEachObject((o) => {
6321
- os({ object: o, excluded: e }) || s.push(o);
6331
+ ns({ object: o, excluded: e }) || s.push(o);
6322
6332
  }), s;
6323
6333
  }
6324
6334
  /**
@@ -6341,7 +6351,7 @@ class wo {
6341
6351
  };
6342
6352
  }
6343
6353
  }
6344
- const Qe = "#3D8BF4", qe = 1;
6354
+ const qe = "#3D8BF4", $e = 1;
6345
6355
  class At {
6346
6356
  /**
6347
6357
  * Создаёт менеджер измерений и инициализирует события.
@@ -6482,8 +6492,8 @@ class At {
6482
6492
  event: t,
6483
6493
  activeObject: e
6484
6494
  }) {
6485
- const { target: s } = t, o = ss({ activeObject: e });
6486
- return s && !os({ object: s, excluded: o }) ? s : null;
6495
+ const { target: s } = t, o = os({ activeObject: e });
6496
+ return s && !ns({ object: s, excluded: o }) ? s : null;
6487
6497
  }
6488
6498
  /**
6489
6499
  * Собирает вертикальные и горизонтальные направляющие расстояний.
@@ -6651,10 +6661,10 @@ class At {
6651
6661
  const { canvas: t } = this, e = t.getSelectionContext();
6652
6662
  if (!e) return;
6653
6663
  const { viewportTransform: s } = t, o = t.getZoom() || 1, n = this.activeGuides.some((c) => c.type === "vertical"), i = this.activeGuides.some((c) => c.type === "horizontal"), a = n && i && !this.isTargetMontageArea, r = a ? 12 / o : 0;
6654
- e.save(), Array.isArray(s) && e.transform(...s), e.lineWidth = qe / o, e.strokeStyle = Qe, e.setLineDash([]);
6664
+ e.save(), Array.isArray(s) && e.transform(...s), e.lineWidth = $e / o, e.strokeStyle = qe, e.setLineDash([]);
6655
6665
  for (const c of this.activeGuides) {
6656
6666
  const { type: d, axis: l, start: u, end: g, distance: f } = c, p = Math.abs(g - u), m = u <= g ? -1 : 1, v = a ? m * (p / 2 + r) : 0, b = 0;
6657
- e.beginPath(), d === "vertical" ? (e.moveTo(l, u), e.lineTo(l, g)) : (e.moveTo(u, l), e.lineTo(g, l)), e.stroke(), fe({
6667
+ e.beginPath(), d === "vertical" ? (e.moveTo(l, u), e.lineTo(l, g)) : (e.moveTo(u, l), e.lineTo(g, l)), e.stroke(), pe({
6658
6668
  context: e,
6659
6669
  type: d,
6660
6670
  axis: l,
@@ -6662,8 +6672,8 @@ class At {
6662
6672
  end: g,
6663
6673
  text: Math.round(f).toString(),
6664
6674
  zoom: o,
6665
- color: Qe,
6666
- lineWidth: qe,
6675
+ color: qe,
6676
+ lineWidth: $e,
6667
6677
  offsetAlongAxis: v,
6668
6678
  offsetPerpendicular: b
6669
6679
  });
@@ -6689,7 +6699,7 @@ class At {
6689
6699
  (e = t == null ? void 0 : t.showAfterTemporary) == null || e.call(t), this.isToolbarHidden = !1;
6690
6700
  }
6691
6701
  }
6692
- class Me {
6702
+ class we {
6693
6703
  /**
6694
6704
  * Конструктор класса ImageEditor.
6695
6705
  * @param canvasId - идентификатор канваса, в котором будет создан редактор
@@ -6719,7 +6729,7 @@ class Me {
6719
6729
  showRotationAngle: d,
6720
6730
  _onReadyCallback: l
6721
6731
  } = this.options;
6722
- if (Q.apply(), this.canvas = new ps(this.containerId, this.options), this.moduleLoader = new Ms(), this.workerManager = new Ss(), this.errorManager = new zt({ editor: this }), this.historyManager = new Kt({ editor: this }), this.toolbar = new zs({ editor: this }), this.transformManager = new Xs({ editor: this }), this.zoomManager = new Ks({ editor: this }), this.canvasManager = new Vs({ editor: this }), this.imageManager = new at({ editor: this }), this.layerManager = new Qt({ editor: this }), this.shapeManager = new qs({ editor: this }), this.interactionBlocker = new Qs({ editor: this }), this.backgroundManager = new St({ editor: this }), this.clipboardManager = new $s({ editor: this }), this.objectLockManager = new qt({ editor: this }), this.groupingManager = new Js({ editor: this }), this.selectionManager = new to({ editor: this }), this.deletionManager = new be({ editor: this }), this.panConstraintManager = new eo({ editor: this }), this.snappingManager = new wo({ editor: this }), this.measurementManager = new At({ editor: this }), this.fontManager = new ue((u = this.options.fonts) != null ? u : []), this.textManager = new q({ editor: this }), this.templateManager = new D({ editor: this }), d && (this.angleIndicator = new ve({ editor: this })), this._createMontageArea(), this._createClippingArea(), this.listeners = new xt({ editor: this, options: this.options }), this.canvasManager.setEditorContainerWidth(t), this.canvasManager.setEditorContainerHeight(e), this.canvasManager.setCanvasWrapperWidth(s), this.canvasManager.setCanvasWrapperHeight(o), this.canvasManager.setCanvasCSSWidth(n), this.canvasManager.setCanvasCSSHeight(i), this.canvasManager.updateCanvas(), this.zoomManager.calculateAndApplyDefaultZoom(), yield this.fontManager.loadFonts(), a != null && a.source) {
6732
+ if (Q.apply(), this.canvas = new ms(this.containerId, this.options), this.moduleLoader = new ws(), this.workerManager = new As(), this.errorManager = new zt({ editor: this }), this.historyManager = new Qt({ editor: this }), this.toolbar = new Ps({ editor: this }), this.transformManager = new Ks({ editor: this }), this.zoomManager = new Qs({ editor: this }), this.canvasManager = new Xs({ editor: this }), this.imageManager = new at({ editor: this }), this.layerManager = new qt({ editor: this }), this.shapeManager = new $s({ editor: this }), this.interactionBlocker = new qs({ editor: this }), this.backgroundManager = new St({ editor: this }), this.clipboardManager = new Js({ editor: this }), this.objectLockManager = new $t({ editor: this }), this.groupingManager = new to({ editor: this }), this.selectionManager = new eo({ editor: this }), this.deletionManager = new Me({ editor: this }), this.panConstraintManager = new so({ editor: this }), this.snappingManager = new So({ editor: this }), this.measurementManager = new At({ editor: this }), this.fontManager = new ge((u = this.options.fonts) != null ? u : []), this.textManager = new q({ editor: this }), this.templateManager = new D({ editor: this }), d && (this.angleIndicator = new be({ editor: this })), this._createMontageArea(), this._createClippingArea(), this.listeners = new xt({ editor: this, options: this.options }), this.canvasManager.setEditorContainerWidth(t), this.canvasManager.setEditorContainerHeight(e), this.canvasManager.setCanvasWrapperWidth(s), this.canvasManager.setCanvasWrapperHeight(o), this.canvasManager.setCanvasCSSWidth(n), this.canvasManager.setCanvasCSSHeight(i), this.canvasManager.updateCanvas(), this.zoomManager.calculateAndApplyDefaultZoom(), yield this.fontManager.loadFonts(), a != null && a.source) {
6723
6733
  const {
6724
6734
  source: g,
6725
6735
  scale: f = `image-${c}`,
@@ -6741,7 +6751,7 @@ class Me {
6741
6751
  this.montageArea = this.shapeManager.addRectangle({
6742
6752
  width: t,
6743
6753
  height: e,
6744
- fill: Me._createMosaicPattern(),
6754
+ fill: we._createMosaicPattern(),
6745
6755
  stroke: null,
6746
6756
  strokeWidth: 0,
6747
6757
  selectable: !1,
@@ -6792,7 +6802,7 @@ class Me {
6792
6802
  const t = document.createElement("canvas");
6793
6803
  t.width = 20, t.height = 20;
6794
6804
  const e = t.getContext("2d");
6795
- return e.fillStyle = "#ddd", e.fillRect(0, 0, 40, 40), e.fillStyle = "#ccc", e.fillRect(0, 0, 10, 10), e.fillRect(10, 10, 10, 10), new ms({
6805
+ return e.fillStyle = "#ddd", e.fillRect(0, 0, 40, 40), e.fillStyle = "#ccc", e.fillRect(0, 0, 10, 10), e.fillRect(10, 10, 10, 10), new ys({
6796
6806
  source: t,
6797
6807
  repeat: "repeat"
6798
6808
  });
@@ -6824,7 +6834,7 @@ const E = [
6824
6834
  "U+0490-0491",
6825
6835
  "U+04B0-04B1",
6826
6836
  "U+2116"
6827
- ].join(", "), So = [
6837
+ ].join(", "), Ao = [
6828
6838
  {
6829
6839
  family: "Arial",
6830
6840
  source: 'local("Arial"), local("Liberation Sans"), local("DejaVu Sans")',
@@ -7614,7 +7624,7 @@ const E = [
7614
7624
  unicodeRange: E
7615
7625
  }
7616
7626
  }
7617
- ], Ao = {
7627
+ ], jo = {
7618
7628
  /**
7619
7629
  * Опции редактора
7620
7630
  */
@@ -7706,20 +7716,20 @@ const E = [
7706
7716
  /**
7707
7717
  * Список шрифтов, которые будут доступны в редакторе по умолчанию.
7708
7718
  */
7709
- fonts: So
7719
+ fonts: Ao
7710
7720
  };
7711
- function Eo(h, t = {}) {
7712
- const e = k(k({}, Ao), t), s = document.getElementById(h);
7721
+ function Oo(h, t = {}) {
7722
+ const e = B(B({}, jo), t), s = document.getElementById(h);
7713
7723
  if (!s)
7714
7724
  return Promise.reject(new Error(`Контейнер с ID "${h}" не найден.`));
7715
7725
  const o = document.createElement("canvas");
7716
7726
  return o.id = `${h}-canvas`, s.appendChild(o), e.editorContainer = s, new Promise((n) => {
7717
7727
  e._onReadyCallback = n;
7718
- const i = new Me(o.id, e);
7728
+ const i = new we(o.id, e);
7719
7729
  window[h] = i;
7720
7730
  });
7721
7731
  }
7722
7732
  export {
7723
- Eo as default
7733
+ Oo as default
7724
7734
  };
7725
7735
  //# sourceMappingURL=main.js.map