Index: imaps-frontend/node_modules/konva/konva.js
===================================================================
--- imaps-frontend/node_modules/konva/konva.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/konva.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -6,8 +6,8 @@
 
   /*
-   * Konva JavaScript Framework v9.3.16
+   * Konva JavaScript Framework v9.3.14
    * http://konvajs.org/
    * Licensed under the MIT
-   * Date: Mon Oct 21 2024
+   * Date: Tue Jul 16 2024
    *
    * Original work Copyright (C) 2011 - 2013 by Eric Rowell (KineticJS)
@@ -36,5 +36,5 @@
   const Konva$2 = {
       _global: glob,
-      version: '9.3.16',
+      version: '9.3.14',
       isBrowser: detectBrowser(),
       isUnminified: /param/.test(function (param) { }.toString()),
@@ -250,5 +250,5 @@
        */
       point(point) {
-          const m = this.m;
+          var m = this.m;
           return {
               x: m[0] * point.x + m[2] * point.y + m[4],
@@ -292,10 +292,10 @@
        */
       rotate(rad) {
-          const c = Math.cos(rad);
-          const s = Math.sin(rad);
-          const m11 = this.m[0] * c + this.m[2] * s;
-          const m12 = this.m[1] * c + this.m[3] * s;
-          const m21 = this.m[0] * -s + this.m[2] * c;
-          const m22 = this.m[1] * -s + this.m[3] * c;
+          var c = Math.cos(rad);
+          var s = Math.sin(rad);
+          var m11 = this.m[0] * c + this.m[2] * s;
+          var m12 = this.m[1] * c + this.m[3] * s;
+          var m21 = this.m[0] * -s + this.m[2] * c;
+          var m22 = this.m[1] * -s + this.m[3] * c;
           this.m[0] = m11;
           this.m[1] = m12;
@@ -325,8 +325,8 @@
        */
       skew(sx, sy) {
-          const m11 = this.m[0] + this.m[2] * sy;
-          const m12 = this.m[1] + this.m[3] * sy;
-          const m21 = this.m[2] + this.m[0] * sx;
-          const m22 = this.m[3] + this.m[1] * sx;
+          var m11 = this.m[0] + this.m[2] * sy;
+          var m12 = this.m[1] + this.m[3] * sy;
+          var m21 = this.m[2] + this.m[0] * sx;
+          var m22 = this.m[3] + this.m[1] * sx;
           this.m[0] = m11;
           this.m[1] = m12;
@@ -343,10 +343,10 @@
        */
       multiply(matrix) {
-          const m11 = this.m[0] * matrix.m[0] + this.m[2] * matrix.m[1];
-          const m12 = this.m[1] * matrix.m[0] + this.m[3] * matrix.m[1];
-          const m21 = this.m[0] * matrix.m[2] + this.m[2] * matrix.m[3];
-          const m22 = this.m[1] * matrix.m[2] + this.m[3] * matrix.m[3];
-          const dx = this.m[0] * matrix.m[4] + this.m[2] * matrix.m[5] + this.m[4];
-          const dy = this.m[1] * matrix.m[4] + this.m[3] * matrix.m[5] + this.m[5];
+          var m11 = this.m[0] * matrix.m[0] + this.m[2] * matrix.m[1];
+          var m12 = this.m[1] * matrix.m[0] + this.m[3] * matrix.m[1];
+          var m21 = this.m[0] * matrix.m[2] + this.m[2] * matrix.m[3];
+          var m22 = this.m[1] * matrix.m[2] + this.m[3] * matrix.m[3];
+          var dx = this.m[0] * matrix.m[4] + this.m[2] * matrix.m[5] + this.m[4];
+          var dy = this.m[1] * matrix.m[4] + this.m[3] * matrix.m[5] + this.m[5];
           this.m[0] = m11;
           this.m[1] = m12;
@@ -364,11 +364,11 @@
        */
       invert() {
-          const d = 1 / (this.m[0] * this.m[3] - this.m[1] * this.m[2]);
-          const m0 = this.m[3] * d;
-          const m1 = -this.m[1] * d;
-          const m2 = -this.m[2] * d;
-          const m3 = this.m[0] * d;
-          const m4 = d * (this.m[2] * this.m[5] - this.m[3] * this.m[4]);
-          const m5 = d * (this.m[1] * this.m[4] - this.m[0] * this.m[5]);
+          var d = 1 / (this.m[0] * this.m[3] - this.m[1] * this.m[2]);
+          var m0 = this.m[3] * d;
+          var m1 = -this.m[1] * d;
+          var m2 = -this.m[2] * d;
+          var m3 = this.m[0] * d;
+          var m4 = d * (this.m[2] * this.m[5] - this.m[3] * this.m[4]);
+          var m5 = d * (this.m[1] * this.m[4] - this.m[0] * this.m[5]);
           this.m[0] = m0;
           this.m[1] = m1;
@@ -394,12 +394,12 @@
        */
       decompose() {
-          const a = this.m[0];
-          const b = this.m[1];
-          const c = this.m[2];
-          const d = this.m[3];
-          const e = this.m[4];
-          const f = this.m[5];
-          const delta = a * d - b * c;
-          const result = {
+          var a = this.m[0];
+          var b = this.m[1];
+          var c = this.m[2];
+          var d = this.m[3];
+          var e = this.m[4];
+          var f = this.m[5];
+          var delta = a * d - b * c;
+          let result = {
               x: e,
               y: f,
@@ -412,5 +412,5 @@
           // Apply the QR-like decomposition.
           if (a != 0 || b != 0) {
-              const r = Math.sqrt(a * a + b * b);
+              var r = Math.sqrt(a * a + b * b);
               result.rotation = b > 0 ? Math.acos(a / r) : -Math.acos(a / r);
               result.scaleX = r;
@@ -420,5 +420,5 @@
           }
           else if (c != 0 || d != 0) {
-              const s = Math.sqrt(c * c + d * d);
+              var s = Math.sqrt(c * c + d * d);
               result.rotation =
                   Math.PI / 2 - (d > 0 ? Math.acos(-c / s) : -Math.acos(c / s));
@@ -434,5 +434,5 @@
   }
   // CONSTANTS
-  let OBJECT_ARRAY = '[object Array]', OBJECT_NUMBER = '[object Number]', OBJECT_STRING = '[object String]', OBJECT_BOOLEAN = '[object Boolean]', PI_OVER_DEG180 = Math.PI / 180, DEG180_OVER_PI = 180 / Math.PI, HASH$1 = '#', EMPTY_STRING$1 = '', ZERO = '0', KONVA_WARNING = 'Konva warning: ', KONVA_ERROR = 'Konva error: ', RGB_PAREN = 'rgb(', COLORS = {
+  var OBJECT_ARRAY = '[object Array]', OBJECT_NUMBER = '[object Number]', OBJECT_STRING = '[object String]', OBJECT_BOOLEAN = '[object Boolean]', PI_OVER_DEG180 = Math.PI / 180, DEG180_OVER_PI = 180 / Math.PI, HASH$1 = '#', EMPTY_STRING$1 = '', ZERO = '0', KONVA_WARNING = 'Konva warning: ', KONVA_ERROR = 'Konva error: ', RGB_PAREN = 'rgb(', COLORS = {
       aliceblue: [240, 248, 255],
       antiquewhite: [250, 235, 215],
@@ -628,5 +628,5 @@
               return false;
           }
-          const firstChar = selector[0];
+          var firstChar = selector[0];
           return (firstChar === '#' ||
               firstChar === '.' ||
@@ -659,5 +659,5 @@
       },
       createCanvasElement() {
-          const canvas = document.createElement('canvas');
+          var canvas = document.createElement('canvas');
           // on some environments canvas.style is readonly
           try {
@@ -683,5 +683,5 @@
       _urlToImage(url, callback) {
           // if arg is a string, then it's a data url
-          const imageObj = Util.createImageElement();
+          var imageObj = Util.createImageElement();
           imageObj.onload = function () {
               callback(imageObj);
@@ -694,5 +694,5 @@
       _hexToRgb(hex) {
           hex = hex.replace(HASH$1, EMPTY_STRING$1);
-          const bigint = parseInt(hex, 16);
+          var bigint = parseInt(hex, 16);
           return {
               r: (bigint >> 16) & 255,
@@ -709,5 +709,5 @@
        */
       getRandomColor() {
-          let randColor = ((Math.random() * 0xffffff) << 0).toString(16);
+          var randColor = ((Math.random() * 0xffffff) << 0).toString(16);
           while (randColor.length < 6) {
               randColor = ZERO + randColor;
@@ -727,5 +727,5 @@
        */
       getRGB(color) {
-          let rgb;
+          var rgb;
           // color string
           if (color in COLORS) {
@@ -774,5 +774,5 @@
       // Parse named css color. Like "green"
       _namedColorToRBA(str) {
-          const c = COLORS[str.toLowerCase()];
+          var c = COLORS[str.toLowerCase()];
           if (!c) {
               return null;
@@ -789,5 +789,5 @@
           if (str.indexOf('rgb(') === 0) {
               str = str.match(/rgb\(([^)]+)\)/)[1];
-              const parts = str.split(/ *, */).map(Number);
+              var parts = str.split(/ *, */).map(Number);
               return {
                   r: parts[0],
@@ -802,5 +802,5 @@
           if (str.indexOf('rgba(') === 0) {
               str = str.match(/rgba\(([^)]+)\)/)[1];
-              const parts = str.split(/ *, */).map((n, index) => {
+              var parts = str.split(/ *, */).map((n, index) => {
                   if (n.slice(-1) === '%') {
                       return index === 3 ? parseInt(n) / 100 : (parseInt(n) / 100) * 255;
@@ -935,6 +935,6 @@
       },
       cloneObject(obj) {
-          const retObj = {};
-          for (const key in obj) {
+          var retObj = {};
+          for (var key in obj) {
               if (this._isPlainObject(obj[key])) {
                   retObj[key] = this.cloneObject(obj[key]);
@@ -985,5 +985,5 @@
       },
       each(obj, func) {
-          for (const key in obj) {
+          for (var key in obj) {
               func(key, obj[key]);
           }
@@ -993,6 +993,6 @@
       },
       _getProjectionToSegment(x1, y1, x2, y2, x3, y3) {
-          let x, y, dist;
-          const pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
+          var x, y, dist;
+          var pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
           if (pd2 == 0) {
               x = x1;
@@ -1001,5 +1001,5 @@
           }
           else {
-              const u = ((x3 - x1) * (x2 - x1) + (y3 - y1) * (y2 - y1)) / pd2;
+              var u = ((x3 - x1) * (x2 - x1) + (y3 - y1) * (y2 - y1)) / pd2;
               if (u < 0) {
                   x = x1;
@@ -1023,13 +1023,13 @@
       // line might be closed
       _getProjectionToLine(pt, line, isClosed) {
-          const pc = Util.cloneObject(pt);
-          let dist = Number.MAX_VALUE;
+          var pc = Util.cloneObject(pt);
+          var dist = Number.MAX_VALUE;
           line.forEach(function (p1, i) {
               if (!isClosed && i === line.length - 1) {
                   return;
               }
-              const p2 = line[(i + 1) % line.length];
-              const proj = Util._getProjectionToSegment(p1.x, p1.y, p2.x, p2.y, pt.x, pt.y);
-              const px = proj[0], py = proj[1], pdist = proj[2];
+              var p2 = line[(i + 1) % line.length];
+              var proj = Util._getProjectionToSegment(p1.x, p1.y, p2.x, p2.y, pt.x, pt.y);
+              var px = proj[0], py = proj[1], pdist = proj[2];
               if (pdist < dist) {
                   pc.x = px;
@@ -1041,7 +1041,7 @@
       },
       _prepareArrayForTween(startArray, endArray, isClosed) {
-          let n, start = [], end = [];
+          var n, start = [], end = [];
           if (startArray.length > endArray.length) {
-              const temp = endArray;
+              var temp = endArray;
               endArray = startArray;
               startArray = temp;
@@ -1059,7 +1059,7 @@
               });
           }
-          const newStart = [];
+          var newStart = [];
           end.forEach(function (point) {
-              const pr = Util._getProjectionToLine(point, start, isClosed);
+              var pr = Util._getProjectionToLine(point, start, isClosed);
               newStart.push(pr.x);
               newStart.push(pr.y);
@@ -1068,7 +1068,7 @@
       },
       _prepareToStringify(obj) {
-          let desc;
+          var desc;
           obj.visitedByCircularReferenceRemoval = true;
-          for (const key in obj) {
+          for (var key in obj) {
               if (!(obj.hasOwnProperty(key) && obj[key] && typeof obj[key] == 'object')) {
                   continue;
@@ -1098,5 +1098,5 @@
       // very simplified version of Object.assign
       _assign(target, source) {
-          for (const key in source) {
+          for (var key in source) {
               target[key] = source[key];
           }
@@ -1187,6 +1187,6 @@
       if (Konva$2.isUnminified) {
           return function (val, attr) {
-              const isNumber = Util._isNumber(val);
-              const isValidArray = Util._isArray(val) && val.length == noOfElements;
+              let isNumber = Util._isNumber(val);
+              let isValidArray = Util._isArray(val) && val.length == noOfElements;
               if (!isNumber && !isValidArray) {
                   Util.warn(_formatValue(val) +
@@ -1204,6 +1204,6 @@
       if (Konva$2.isUnminified) {
           return function (val, attr) {
-              const isNumber = Util._isNumber(val);
-              const isAuto = val === 'auto';
+              var isNumber = Util._isNumber(val);
+              var isAuto = val === 'auto';
               if (!(isNumber || isAuto)) {
                   Util.warn(_formatValue(val) +
@@ -1278,5 +1278,5 @@
       if (Konva$2.isUnminified) {
           return function (val, attr) {
-              const isBool = val === true || val === false;
+              var isBool = val === true || val === false;
               if (!isBool) {
                   Util.warn(_formatValue(val) +
@@ -1308,5 +1308,5 @@
   }
 
-  const GET = 'get', SET$1 = 'set';
+  var GET = 'get', SET$1 = 'set';
   const Factory = {
       addGetterSetter(constructor, attr, def, validator, after) {
@@ -1316,14 +1316,14 @@
       },
       addGetter(constructor, attr, def) {
-          const method = GET + Util._capitalize(attr);
+          var method = GET + Util._capitalize(attr);
           constructor.prototype[method] =
               constructor.prototype[method] ||
                   function () {
-                      const val = this.attrs[attr];
+                      var val = this.attrs[attr];
                       return val === undefined ? def : val;
                   };
       },
       addSetter(constructor, attr, validator, after) {
-          const method = SET$1 + Util._capitalize(attr);
+          var method = SET$1 + Util._capitalize(attr);
           if (!constructor.prototype[method]) {
               Factory.overWriteSetter(constructor, attr, validator, after);
@@ -1331,5 +1331,5 @@
       },
       overWriteSetter(constructor, attr, validator, after) {
-          const method = SET$1 + Util._capitalize(attr);
+          var method = SET$1 + Util._capitalize(attr);
           constructor.prototype[method] = function (val) {
               if (validator && val !== undefined && val !== null) {
@@ -1344,8 +1344,8 @@
       },
       addComponentsGetterSetter(constructor, attr, components, validator, after) {
-          let len = components.length, capitalize = Util._capitalize, getter = GET + capitalize(attr), setter = SET$1 + capitalize(attr), n, component;
+          var len = components.length, capitalize = Util._capitalize, getter = GET + capitalize(attr), setter = SET$1 + capitalize(attr), n, component;
           // getter
           constructor.prototype[getter] = function () {
-              const ret = {};
+              var ret = {};
               for (n = 0; n < len; n++) {
                   component = components[n];
@@ -1354,8 +1354,8 @@
               return ret;
           };
-          const basicValidator = getComponentValidator(components);
+          var basicValidator = getComponentValidator(components);
           // setter
           constructor.prototype[setter] = function (val) {
-              let oldVal = this.attrs[attr], key;
+              var oldVal = this.attrs[attr], key;
               if (validator) {
                   val = validator.call(this, val);
@@ -1384,5 +1384,5 @@
       },
       addOverloadedGetterSetter(constructor, attr) {
-          const capitalizedAttr = Util._capitalize(attr), setter = SET$1 + capitalizedAttr, getter = GET + capitalizedAttr;
+          var capitalizedAttr = Util._capitalize(attr), setter = SET$1 + capitalizedAttr, getter = GET + capitalizedAttr;
           constructor.prototype[attr] = function () {
               // setting
@@ -1397,10 +1397,10 @@
       addDeprecatedGetterSetter(constructor, attr, def, validator) {
           Util.error('Adding deprecated ' + attr);
-          const method = GET + Util._capitalize(attr);
-          const message = attr +
+          var method = GET + Util._capitalize(attr);
+          var message = attr +
               ' property is deprecated and will be removed soon. Look at Konva change log for more information.';
           constructor.prototype[method] = function () {
               Util.error(message);
-              const val = this.attrs[attr];
+              var val = this.attrs[attr];
               return val === undefined ? def : val;
           };
@@ -1412,7 +1412,7 @@
       backCompat(constructor, methods) {
           Util.each(methods, function (oldMethodName, newMethodName) {
-              const method = constructor.prototype[newMethodName];
-              const oldGetter = GET + Util._capitalize(oldMethodName);
-              const oldSetter = SET$1 + Util._capitalize(oldMethodName);
+              var method = constructor.prototype[newMethodName];
+              var oldGetter = GET + Util._capitalize(oldMethodName);
+              var oldSetter = SET$1 + Util._capitalize(oldMethodName);
               function deprecated() {
                   method.apply(this, arguments);
@@ -1434,5 +1434,5 @@
 
   function simplifyArray(arr) {
-      let retArr = [], len = arr.length, util = Util, n, val;
+      var retArr = [], len = arr.length, util = Util, n, val;
       for (n = 0; n < len; n++) {
           val = arr[n];
@@ -1447,5 +1447,5 @@
       return retArr;
   }
-  const COMMA = ',', OPEN_PAREN = '(', CLOSE_PAREN = ')', OPEN_PAREN_BRACKET = '([', CLOSE_BRACKET_PAREN = '])', SEMICOLON = ';', DOUBLE_PAREN = '()', 
+  var COMMA = ',', OPEN_PAREN = '(', CLOSE_PAREN = ')', OPEN_PAREN_BRACKET = '([', CLOSE_BRACKET_PAREN = '])', SEMICOLON = ';', DOUBLE_PAREN = '()', 
   // EMPTY_STRING = '',
   EQUALS = '=', 
@@ -1485,5 +1485,5 @@
       'translate',
   ];
-  const CONTEXT_PROPERTIES = [
+  var CONTEXT_PROPERTIES = [
       'fillStyle',
       'strokeStyle',
@@ -1582,5 +1582,5 @@
       }
       getTrace(relaxed, rounded) {
-          let traceArr = this.traceArr, len = traceArr.length, str = '', n, trace, method, args;
+          var traceArr = this.traceArr, len = traceArr.length, str = '', n, trace, method, args;
           for (n = 0; n < len; n++) {
               trace = traceArr[n];
@@ -1620,5 +1620,5 @@
       }
       _trace(str) {
-          let traceArr = this.traceArr, len;
+          var traceArr = this.traceArr, len;
           traceArr.push(str);
           len = traceArr.length;
@@ -1633,5 +1633,5 @@
        */
       reset() {
-          const pixelRatio = this.getCanvas().getPixelRatio();
+          var pixelRatio = this.getCanvas().getPixelRatio();
           this.setTransform(1 * pixelRatio, 0, 0, 1 * pixelRatio, 0, 0);
       }
@@ -1656,5 +1656,5 @@
        */
       clear(bounds) {
-          const canvas = this.getCanvas();
+          var canvas = this.getCanvas();
           if (bounds) {
               this.clearRect(bounds.x || 0, bounds.y || 0, bounds.width || 0, bounds.height || 0);
@@ -1671,5 +1671,5 @@
       }
       _applyOpacity(shape) {
-          const absOpacity = shape.getAbsoluteOpacity();
+          var absOpacity = shape.getAbsoluteOpacity();
           if (absOpacity !== 1) {
               this.setAttr('globalAlpha', absOpacity);
@@ -1743,5 +1743,5 @@
        */
       createImageData(width, height) {
-          const a = arguments;
+          var a = arguments;
           if (a.length === 2) {
               return this._context.createImageData(width, height);
@@ -1782,5 +1782,5 @@
       drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) {
           // this._context.drawImage(...arguments);
-          const a = arguments, _context = this._context;
+          var a = arguments, _context = this._context;
           if (a.length === 3) {
               _context.drawImage(image, sx, sy);
@@ -2015,8 +2015,8 @@
       }
       _enableTrace() {
-          let that = this, len = CONTEXT_METHODS.length, origSetter = this.setAttr, n, args;
+          var that = this, len = CONTEXT_METHODS.length, origSetter = this.setAttr, n, args;
           // to prevent creating scope function at each loop
-          const func = function (methodName) {
-              let origMethod = that[methodName], ret;
+          var func = function (methodName) {
+              var origMethod = that[methodName], ret;
               that[methodName] = function () {
                   args = simplifyArray(Array.prototype.slice.call(arguments, 0));
@@ -2036,6 +2036,6 @@
           that.setAttr = function () {
               origSetter.apply(that, arguments);
-              const prop = arguments[0];
-              let val = arguments[1];
+              var prop = arguments[0];
+              var val = arguments[1];
               if (prop === 'shadowOffsetX' ||
                   prop === 'shadowOffsetY' ||
@@ -2051,5 +2051,5 @@
       _applyGlobalCompositeOperation(node) {
           const op = node.attrs.globalCompositeOperation;
-          const def = !op || op === 'source-over';
+          var def = !op || op === 'source-over';
           if (!def) {
               this.setAttr('globalCompositeOperation', op);
@@ -2075,5 +2075,5 @@
       }
       _fillColor(shape) {
-          const fill = shape.fill();
+          var fill = shape.fill();
           this.setAttr('fillStyle', fill);
           shape._fillFunc(this);
@@ -2084,5 +2084,5 @@
       }
       _fillLinearGradient(shape) {
-          const grd = shape._getLinearGradient();
+          var grd = shape._getLinearGradient();
           if (grd) {
               this.setAttr('fillStyle', grd);
@@ -2137,5 +2137,5 @@
           if (colorStops) {
               // build color stops
-              for (let n = 0; n < colorStops.length; n += 2) {
+              for (var n = 0; n < colorStops.length; n += 2) {
                   grd.addColorStop(colorStops[n], colorStops[n + 1]);
               }
@@ -2144,5 +2144,5 @@
       }
       _stroke(shape) {
-          const dash = shape.dash(), 
+          var dash = shape.dash(), 
           // ignore strokeScaleEnabled for Text
           strokeScaleEnabled = shape.getStrokeScaleEnabled();
@@ -2150,5 +2150,5 @@
               if (!strokeScaleEnabled) {
                   this.save();
-                  const pixelRatio = this.getCanvas().getPixelRatio();
+                  var pixelRatio = this.getCanvas().getPixelRatio();
                   this.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
               }
@@ -2162,5 +2162,5 @@
                   this.setAttr('shadowColor', 'rgba(0,0,0,0)');
               }
-              const hasLinearGradient = shape.getStrokeLinearGradientColorStops();
+              var hasLinearGradient = shape.getStrokeLinearGradientColorStops();
               if (hasLinearGradient) {
                   this._strokeLinearGradient(shape);
@@ -2177,5 +2177,5 @@
       _applyShadow(shape) {
           var _a, _b, _c;
-          const color = (_a = shape.getShadowRGBA()) !== null && _a !== void 0 ? _a : 'black', blur = (_b = shape.getShadowBlur()) !== null && _b !== void 0 ? _b : 5, offset = (_c = shape.getShadowOffset()) !== null && _c !== void 0 ? _c : {
+          var color = (_a = shape.getShadowRGBA()) !== null && _a !== void 0 ? _a : 'black', blur = (_b = shape.getShadowBlur()) !== null && _b !== void 0 ? _b : 5, offset = (_c = shape.getShadowOffset()) !== null && _c !== void 0 ? _c : {
               x: 0,
               y: 0,
@@ -2211,10 +2211,10 @@
               if (!strokeScaleEnabled) {
                   this.save();
-                  const pixelRatio = this.getCanvas().getPixelRatio();
+                  var pixelRatio = this.getCanvas().getPixelRatio();
                   this.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
               }
               this._applyLineCap(shape);
-              const hitStrokeWidth = shape.hitStrokeWidth();
-              const strokeWidth = hitStrokeWidth === 'auto' ? shape.strokeWidth() : hitStrokeWidth;
+              var hitStrokeWidth = shape.hitStrokeWidth();
+              var strokeWidth = hitStrokeWidth === 'auto' ? shape.strokeWidth() : hitStrokeWidth;
               this.setAttr('lineWidth', strokeWidth);
               this.setAttr('strokeStyle', shape.colorKey);
@@ -2228,13 +2228,13 @@
 
   // calculate pixel ratio
-  let _pixelRatio;
+  var _pixelRatio;
   function getDevicePixelRatio() {
       if (_pixelRatio) {
           return _pixelRatio;
       }
-      const canvas = Util.createCanvasElement();
-      const context = canvas.getContext('2d');
+      var canvas = Util.createCanvasElement();
+      var context = canvas.getContext('2d');
       _pixelRatio = (function () {
-          const devicePixelRatio = Konva$2._global.devicePixelRatio || 1, backingStoreRatio = context.webkitBackingStorePixelRatio ||
+          var devicePixelRatio = Konva$2._global.devicePixelRatio || 1, backingStoreRatio = context.webkitBackingStorePixelRatio ||
               context.mozBackingStorePixelRatio ||
               context.msBackingStorePixelRatio ||
@@ -2264,6 +2264,6 @@
           this.height = 0;
           this.isCache = false;
-          const conf = config || {};
-          const pixelRatio = conf.pixelRatio || Konva$2.pixelRatio || getDevicePixelRatio();
+          var conf = config || {};
+          var pixelRatio = conf.pixelRatio || Konva$2.pixelRatio || getDevicePixelRatio();
           this.pixelRatio = pixelRatio;
           this._canvas = Util.createCanvasElement();
@@ -2290,5 +2290,5 @@
       }
       setPixelRatio(pixelRatio) {
-          const previousRatio = this.pixelRatio;
+          var previousRatio = this.pixelRatio;
           this.pixelRatio = pixelRatio;
           this.setSize(this.getWidth() / previousRatio, this.getHeight() / previousRatio);
@@ -2298,5 +2298,5 @@
           this.width = this._canvas.width = width * this.pixelRatio;
           this._canvas.style.width = width + 'px';
-          const pixelRatio = this.pixelRatio, _context = this.getContext()._context;
+          var pixelRatio = this.pixelRatio, _context = this.getContext()._context;
           _context.scale(pixelRatio, pixelRatio);
       }
@@ -2305,5 +2305,5 @@
           this.height = this._canvas.height = height * this.pixelRatio;
           this._canvas.style.height = height + 'px';
-          const pixelRatio = this.pixelRatio, _context = this.getContext()._context;
+          var pixelRatio = this.pixelRatio, _context = this.getContext()._context;
           _context.scale(pixelRatio, pixelRatio);
       }
@@ -2386,5 +2386,5 @@
   const DD = {
       get isDragging() {
-          let flag = false;
+          var flag = false;
           DD._dragElements.forEach((elem) => {
               if (elem.dragStatus === 'dragging') {
@@ -2397,5 +2397,5 @@
       get node() {
           // return first dragging node
-          let node;
+          var node;
           DD._dragElements.forEach((elem) => {
               node = elem.node;
@@ -2423,6 +2423,6 @@
               }
               if (elem.dragStatus !== 'dragging') {
-                  const dragDistance = node.dragDistance();
-                  const distance = Math.max(Math.abs(pos.x - elem.startPointerPos.x), Math.abs(pos.y - elem.startPointerPos.y));
+                  var dragDistance = node.dragDistance();
+                  var distance = Math.max(Math.abs(pos.x - elem.startPointerPos.x), Math.abs(pos.y - elem.startPointerPos.y));
                   if (distance < dragDistance) {
                       return;
@@ -2501,15 +2501,12 @@
       window.addEventListener('mouseup', DD._endDragBefore, true);
       window.addEventListener('touchend', DD._endDragBefore, true);
-      // add touchcancel to fix this: https://github.com/konvajs/konva/issues/1843
-      window.addEventListener('touchcancel', DD._endDragBefore, true);
       window.addEventListener('mousemove', DD._drag);
       window.addEventListener('touchmove', DD._drag);
       window.addEventListener('mouseup', DD._endDragAfter, false);
       window.addEventListener('touchend', DD._endDragAfter, false);
-      window.addEventListener('touchcancel', DD._endDragAfter, false);
   }
 
   // CONSTANTS
-  const ABSOLUTE_OPACITY = 'absoluteOpacity', ALL_LISTENERS = 'allEventListeners', ABSOLUTE_TRANSFORM = 'absoluteTransform', ABSOLUTE_SCALE = 'absoluteScale', CANVAS = 'canvas', CHANGE = 'Change', CHILDREN = 'children', KONVA = 'konva', LISTENING = 'listening', MOUSEENTER$1 = 'mouseenter', MOUSELEAVE$1 = 'mouseleave', SET = 'set', SHAPE = 'Shape', SPACE$1 = ' ', STAGE$1 = 'stage', TRANSFORM = 'transform', UPPER_STAGE = 'Stage', VISIBLE = 'visible', TRANSFORM_CHANGE_STR$1 = [
+  var ABSOLUTE_OPACITY = 'absoluteOpacity', ALL_LISTENERS = 'allEventListeners', ABSOLUTE_TRANSFORM = 'absoluteTransform', ABSOLUTE_SCALE = 'absoluteScale', CANVAS = 'canvas', CHANGE = 'Change', CHILDREN = 'children', KONVA = 'konva', LISTENING = 'listening', MOUSEENTER$1 = 'mouseenter', MOUSELEAVE$1 = 'mouseleave', SET = 'set', SHAPE = 'Shape', SPACE$1 = ' ', STAGE$1 = 'stage', TRANSFORM = 'transform', UPPER_STAGE = 'Stage', VISIBLE = 'visible', TRANSFORM_CHANGE_STR$1 = [
       'xChange.konva',
       'yChange.konva',
@@ -2594,9 +2591,9 @@
       }
       _getCache(attr, privateGetter) {
-          let cache = this._cache.get(attr);
+          var cache = this._cache.get(attr);
           // for transform the cache can be NOT empty
           // but we still need to recalculate it if it is dirty
-          const isTransform = attr === TRANSFORM || attr === ABSOLUTE_TRANSFORM;
-          const invalid = cache === undefined || (isTransform && cache.dirty === true);
+          var isTransform = attr === TRANSFORM || attr === ABSOLUTE_TRANSFORM;
+          var invalid = cache === undefined || (isTransform && cache.dirty === true);
           // if not cached, we need to set it using the private getter method.
           if (invalid) {
@@ -2696,6 +2693,6 @@
        */
       cache(config) {
-          const conf = config || {};
-          let rect = {};
+          var conf = config || {};
+          var rect = {};
           // don't call getClientRect if we have all attributes
           // it means call it only if have one undefined
@@ -2709,5 +2706,5 @@
               });
           }
-          let width = Math.ceil(conf.width || rect.width), height = Math.ceil(conf.height || rect.height), pixelRatio = conf.pixelRatio, x = conf.x === undefined ? Math.floor(rect.x) : conf.x, y = conf.y === undefined ? Math.floor(rect.y) : conf.y, offset = conf.offset || 0, drawBorder = conf.drawBorder || false, hitCanvasPixelRatio = conf.hitCanvasPixelRatio || 1;
+          var width = Math.ceil(conf.width || rect.width), height = Math.ceil(conf.height || rect.height), pixelRatio = conf.pixelRatio, x = conf.x === undefined ? Math.floor(rect.x) : conf.x, y = conf.y === undefined ? Math.floor(rect.y) : conf.y, offset = conf.offset || 0, drawBorder = conf.drawBorder || false, hitCanvasPixelRatio = conf.hitCanvasPixelRatio || 1;
           if (!width || !height) {
               Util.error('Can not cache the node. Width or height of the node equals 0. Caching is skipped.');
@@ -2732,5 +2729,5 @@
           // }
           // console.log({ x, y, width, height }, rect);
-          const cachedSceneCanvas = new SceneCanvas({
+          var cachedSceneCanvas = new SceneCanvas({
               pixelRatio: pixelRatio,
               width: width,
@@ -2840,5 +2837,5 @@
       }
       _transformedRect(rect, top) {
-          const points = [
+          var points = [
               { x: rect.x, y: rect.y },
               { x: rect.x + rect.width, y: rect.y },
@@ -2846,8 +2843,8 @@
               { x: rect.x, y: rect.y + rect.height },
           ];
-          let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
-          const trans = this.getAbsoluteTransform(top);
+          var minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
+          var trans = this.getAbsoluteTransform(top);
           points.forEach(function (point) {
-              const transformed = trans.point(point);
+              var transformed = trans.point(point);
               if (minX === undefined) {
                   minX = maxX = transformed.x;
@@ -2872,11 +2869,11 @@
           const canvasCache = this._getCanvasCache();
           context.translate(canvasCache.x, canvasCache.y);
-          const cacheCanvas = this._getCachedSceneCanvas();
-          const ratio = cacheCanvas.pixelRatio;
+          var cacheCanvas = this._getCachedSceneCanvas();
+          var ratio = cacheCanvas.pixelRatio;
           context.drawImage(cacheCanvas._canvas, 0, 0, cacheCanvas.width / ratio, cacheCanvas.height / ratio);
           context.restore();
       }
       _drawCachedHitCanvas(context) {
-          const canvasCache = this._getCanvasCache(), hitCanvas = canvasCache.hit;
+          var canvasCache = this._getCanvasCache(), hitCanvas = canvasCache.hit;
           context.save();
           context.translate(canvasCache.x, canvasCache.y);
@@ -2885,8 +2882,8 @@
       }
       _getCachedSceneCanvas() {
-          let filters = this.filters(), cachedCanvas = this._getCanvasCache(), sceneCanvas = cachedCanvas.scene, filterCanvas = cachedCanvas.filter, filterContext = filterCanvas.getContext(), len, imageData, n, filter;
+          var filters = this.filters(), cachedCanvas = this._getCanvasCache(), sceneCanvas = cachedCanvas.scene, filterCanvas = cachedCanvas.filter, filterContext = filterCanvas.getContext(), len, imageData, n, filter;
           if (filters) {
               if (!this._filterUpToDate) {
-                  const ratio = sceneCanvas.pixelRatio;
+                  var ratio = sceneCanvas.pixelRatio;
                   filterCanvas.setSize(sceneCanvas.width / sceneCanvas.pixelRatio, sceneCanvas.height / sceneCanvas.pixelRatio);
                   try {
@@ -2986,5 +2983,5 @@
               return this._delegate.apply(this, arguments);
           }
-          let events = evtStr.split(SPACE$1), len = events.length, n, event, parts, baseEvent, name;
+          var events = evtStr.split(SPACE$1), len = events.length, n, event, parts, baseEvent, name;
           /*
            * loop through types and attach event listeners to
@@ -3030,5 +3027,5 @@
        */
       off(evtStr, callback) {
-          let events = (evtStr || '').split(SPACE$1), len = events.length, n, t, event, parts, baseEvent, name;
+          var events = (evtStr || '').split(SPACE$1), len = events.length, n, t, event, parts, baseEvent, name;
           this._cache && this._cache.delete(ALL_LISTENERS);
           if (!evtStr) {
@@ -3058,5 +3055,5 @@
       // some event aliases for third party integration like HammerJS
       dispatchEvent(evt) {
-          const e = {
+          var e = {
               target: this,
               type: evt.type,
@@ -3079,8 +3076,8 @@
       // like node.on
       _delegate(event, selector, handler) {
-          const stopNode = this;
+          var stopNode = this;
           this.on(event, function (evt) {
-              const targets = evt.target.findAncestors(selector, true, stopNode);
-              for (let i = 0; i < targets.length; i++) {
+              var targets = evt.target.findAncestors(selector, true, stopNode);
+              for (var i = 0; i < targets.length; i++) {
                   evt = Util.cloneObject(evt);
                   evt.currentTarget = targets[i];
@@ -3119,5 +3116,5 @@
           // traversal must be cleared when removing a node
           this._clearCaches();
-          const parent = this.getParent();
+          var parent = this.getParent();
           if (parent && parent.children) {
               parent.children.splice(this.index, 1);
@@ -3149,5 +3146,5 @@
        */
       getAttr(attr) {
-          const method = 'get' + Util._capitalize(attr);
+          var method = 'get' + Util._capitalize(attr);
           if (Util._isFunction(this[method])) {
               return this[method]();
@@ -3167,5 +3164,5 @@
        */
       getAncestors() {
-          let parent = this.getParent(), ancestors = [];
+          var parent = this.getParent(), ancestors = [];
           while (parent) {
               ancestors.push(parent);
@@ -3197,5 +3194,5 @@
       setAttrs(config) {
           this._batchTransformChanges(() => {
-              let key, method;
+              var key, method;
               if (!config) {
                   return this;
@@ -3283,6 +3280,6 @@
               return this._isVisible(top) && this._isListening(top);
           }
-          const layer = this.getLayer();
-          let layerUnderDrag = false;
+          var layer = this.getLayer();
+          var layerUnderDrag = false;
           DD._dragElements.forEach((elem) => {
               if (elem.dragStatus !== 'dragging') {
@@ -3296,5 +3293,5 @@
               }
           });
-          const dragSkip = !skipDragCheck &&
+          var dragSkip = !skipDragCheck &&
               !Konva$2.hitOnDragEnabled &&
               (layerUnderDrag || Konva$2.isTransforming());
@@ -3332,5 +3329,5 @@
        */
       getAbsoluteZIndex() {
-          let depth = this.getDepth(), that = this, index = 0, nodes, len, n, child;
+          var depth = this.getDepth(), that = this, index = 0, nodes, len, n, child;
           function addChildren(children) {
               nodes = [];
@@ -3365,5 +3362,5 @@
        */
       getDepth() {
-          let depth = 0, parent = this.parent;
+          var depth = 0, parent = this.parent;
           while (parent) {
               depth++;
@@ -3417,9 +3414,9 @@
           }
           // get pointer (say mouse or touch) position
-          const pos = stage.getPointerPosition();
+          var pos = stage.getPointerPosition();
           if (!pos) {
               return null;
           }
-          const transform = this.getAbsoluteTransform().copy();
+          var transform = this.getAbsoluteTransform().copy();
           // to detect relative position we need to invert transform
           transform.invert();
@@ -3457,5 +3454,5 @@
               top = true;
           }
-          const absoluteMatrix = this.getAbsoluteTransform(top).getMatrix(), absoluteTransform = new Transform(), offset = this.offset();
+          var absoluteMatrix = this.getAbsoluteTransform(top).getMatrix(), absoluteTransform = new Transform(), offset = this.offset();
           // clone the matrix array
           absoluteTransform.m = absoluteMatrix.slice();
@@ -3470,5 +3467,5 @@
           // important, use non cached value
           this._clearCache(TRANSFORM);
-          const it = this._getAbsoluteTransform().copy();
+          var it = this._getAbsoluteTransform().copy();
           it.invert();
           it.translate(pos.x, pos.y);
@@ -3484,5 +3481,5 @@
       }
       _setTransform(trans) {
-          let key;
+          var key;
           for (key in trans) {
               this.attrs[key] = trans[key];
@@ -3492,5 +3489,5 @@
       }
       _clearTransform() {
-          const trans = {
+          var trans = {
               x: this.x(),
               y: this.y(),
@@ -3531,5 +3528,5 @@
        */
       move(change) {
-          let changeX = change.x, changeY = change.y, x = this.x(), y = this.y();
+          var changeX = change.x, changeY = change.y, x = this.x(), y = this.y();
           if (changeX !== undefined) {
               x += changeX;
@@ -3542,5 +3539,5 @@
       }
       _eachAncestorReverse(func, top) {
-          let family = [], parent = this.getParent(), len, n;
+          var family = [], parent = this.getParent(), len, n;
           // if top node is defined, and this node is top node,
           // there's no need to build a family tree.  just execute
@@ -3582,5 +3579,5 @@
               return false;
           }
-          const index = this.index, len = this.parent.getChildren().length;
+          var index = this.index, len = this.parent.getChildren().length;
           if (index < len - 1) {
               this.parent.children.splice(index, 1);
@@ -3602,5 +3599,5 @@
               return false;
           }
-          const index = this.index, len = this.parent.getChildren().length;
+          var index = this.index, len = this.parent.getChildren().length;
           if (index < len - 1) {
               this.parent.children.splice(index, 1);
@@ -3622,5 +3619,5 @@
               return false;
           }
-          const index = this.index;
+          var index = this.index;
           if (index > 0) {
               this.parent.children.splice(index, 1);
@@ -3642,5 +3639,5 @@
               return false;
           }
-          const index = this.index;
+          var index = this.index;
           if (index > 0) {
               this.parent.children.splice(index, 1);
@@ -3663,5 +3660,5 @@
                   '.');
           }
-          const index = this.index;
+          var index = this.index;
           this.parent.children.splice(index, 1);
           this.parent.children.splice(zIndex, 0, this);
@@ -3679,6 +3676,6 @@
       }
       _getAbsoluteOpacity() {
-          let absOpacity = this.opacity();
-          const parent = this.getParent();
+          var absOpacity = this.opacity();
+          var parent = this.getParent();
           if (parent && !parent._isUnderCache) {
               absOpacity *= parent.getAbsoluteOpacity();
@@ -3711,5 +3708,5 @@
        */
       toObject() {
-          let attrs = this.getAttrs(), key, val, getter, defaultValue, nonPlainObject;
+          var attrs = this.getAttrs(), key, val, getter, defaultValue, nonPlainObject;
           const obj = {
               attrs: {},
@@ -3768,9 +3765,9 @@
        */
       findAncestors(selector, includeSelf, stopNode) {
-          const res = [];
+          var res = [];
           if (includeSelf && this._isMatch(selector)) {
               res.push(this);
           }
-          let ancestor = this.parent;
+          var ancestor = this.parent;
           while (ancestor) {
               if (ancestor === stopNode) {
@@ -3810,5 +3807,5 @@
               return selector(this);
           }
-          let selectorArr = selector.replace(/ /g, '').split(','), len = selectorArr.length, n, sel;
+          var selectorArr = selector.replace(/ /g, '').split(','), len = selectorArr.length, n, sel;
           for (n = 0; n < len; n++) {
               sel = selectorArr[n];
@@ -3845,5 +3842,5 @@
        */
       getLayer() {
-          const parent = this.getParent();
+          var parent = this.getParent();
           return parent ? parent.getLayer() : null;
       }
@@ -3858,5 +3855,5 @@
       }
       _getStage() {
-          const parent = this.getParent();
+          var parent = this.getParent();
           if (parent) {
               return parent.getStage();
@@ -3920,5 +3917,5 @@
       }
       _getAbsoluteTransform(top) {
-          let at;
+          var at;
           // we we need position relative to an ancestor, we will iterate for all
           if (top) {
@@ -3926,5 +3923,5 @@
               // start with stage and traverse downwards to self
               this._eachAncestorReverse(function (node) {
-                  const transformsEnabled = node.transformsEnabled();
+                  var transformsEnabled = node.transformsEnabled();
                   if (transformsEnabled === 'all') {
                       at.multiply(node.getTransform());
@@ -3946,5 +3943,5 @@
                   at.reset();
               }
-              const transformsEnabled = this.transformsEnabled();
+              var transformsEnabled = this.transformsEnabled();
               if (transformsEnabled === 'all') {
                   at.multiply(this.getTransform());
@@ -3976,5 +3973,5 @@
           // because it use cache transform
           // this is special logic for caching with some shapes with shadow
-          let parent = this;
+          var parent = this;
           while (parent) {
               if (parent._isUnderCache) {
@@ -4021,10 +4018,10 @@
       _getTransform() {
           var _a, _b;
-          const m = this._cache.get(TRANSFORM) || new Transform();
+          var m = this._cache.get(TRANSFORM) || new Transform();
           m.reset();
           // I was trying to use attributes directly here
           // but it doesn't work for Transformer well
           // because it overwrite x,y getters
-          const x = this.x(), y = this.y(), rotation = Konva$2.getAngle(this.rotation()), scaleX = (_a = this.attrs.scaleX) !== null && _a !== void 0 ? _a : 1, scaleY = (_b = this.attrs.scaleY) !== null && _b !== void 0 ? _b : 1, skewX = this.attrs.skewX || 0, skewY = this.attrs.skewY || 0, offsetX = this.attrs.offsetX || 0, offsetY = this.attrs.offsetY || 0;
+          var x = this.x(), y = this.y(), rotation = Konva$2.getAngle(this.rotation()), scaleX = (_a = this.attrs.scaleX) !== null && _a !== void 0 ? _a : 1, scaleY = (_b = this.attrs.scaleY) !== null && _b !== void 0 ? _b : 1, skewX = this.attrs.skewX || 0, skewY = this.attrs.skewY || 0, offsetX = this.attrs.offsetX || 0, offsetY = this.attrs.offsetY || 0;
           if (x !== 0 || y !== 0) {
               m.translate(x, y);
@@ -4064,10 +4061,10 @@
       clone(obj) {
           // instantiate new node
-          let attrs = Util.cloneObject(this.attrs), key, allListeners, len, n, listener;
+          var attrs = Util.cloneObject(this.attrs), key, allListeners, len, n, listener;
           // apply attr overrides
           for (key in obj) {
               attrs[key] = obj[key];
           }
-          const node = new this.constructor(attrs);
+          var node = new this.constructor(attrs);
           // copy over listeners
           for (key in this.eventListeners) {
@@ -4093,6 +4090,6 @@
       _toKonvaCanvas(config) {
           config = config || {};
-          const box = this.getClientRect();
-          const stage = this.getStage(), x = config.x !== undefined ? config.x : Math.floor(box.x), y = config.y !== undefined ? config.y : Math.floor(box.y), pixelRatio = config.pixelRatio || 1, canvas = new SceneCanvas({
+          var box = this.getClientRect();
+          var stage = this.getStage(), x = config.x !== undefined ? config.x : Math.floor(box.x), y = config.y !== undefined ? config.y : Math.floor(box.y), pixelRatio = config.pixelRatio || 1, canvas = new SceneCanvas({
               width: config.width || Math.ceil(box.width) || (stage ? stage.width() : 0),
               height: config.height ||
@@ -4166,6 +4163,6 @@
       toDataURL(config) {
           config = config || {};
-          const mimeType = config.mimeType || null, quality = config.quality || null;
-          const url = this._toKonvaCanvas(config).toDataURL(mimeType, quality);
+          var mimeType = config.mimeType || null, quality = config.quality || null;
+          var url = this._toKonvaCanvas(config).toDataURL(mimeType, quality);
           if (config.callback) {
               config.callback(url);
@@ -4299,5 +4296,5 @@
       }
       _off(type, name, callback) {
-          let evtListeners = this.eventListeners[type], i, evtName, handler;
+          var evtListeners = this.eventListeners[type], i, evtName, handler;
           for (i = 0; i < evtListeners.length; i++) {
               evtName = evtListeners[i].name;
@@ -4338,6 +4335,6 @@
       addName(name) {
           if (!this.hasName(name)) {
-              const oldName = this.name();
-              const newName = oldName ? oldName + ' ' + name : name;
+              var oldName = this.name();
+              var newName = oldName ? oldName + ' ' + name : name;
               this.name(newName);
           }
@@ -4365,5 +4362,5 @@
           }
           // if name is '' the "names" will be [''], so I added extra check above
-          const names = (fullName || '').split(/\s/g);
+          var names = (fullName || '').split(/\s/g);
           return names.indexOf(name) !== -1;
       }
@@ -4381,6 +4378,6 @@
        */
       removeName(name) {
-          const names = (this.name() || '').split(/\s/g);
-          const index = names.indexOf(name);
+          var names = (this.name() || '').split(/\s/g);
+          var index = names.indexOf(name);
           if (index !== -1) {
               names.splice(index, 1);
@@ -4400,5 +4397,5 @@
        */
       setAttr(attr, val) {
-          const func = this[SET + Util._capitalize(attr)];
+          var func = this[SET + Util._capitalize(attr)];
           if (Util._isFunction(func)) {
               func.call(this, val);
@@ -4417,5 +4414,5 @@
       }
       _setAttr(key, val) {
-          const oldVal = this.attrs[key];
+          var oldVal = this.attrs[key];
           if (oldVal === val && !Util.isObject(val)) {
               return;
@@ -4433,5 +4430,5 @@
       }
       _setComponentAttr(key, component, val) {
-          let oldVal;
+          var oldVal;
           if (val !== undefined) {
               oldVal = this.attrs[key];
@@ -4448,5 +4445,5 @@
               evt.target = this;
           }
-          const shouldStop = (eventType === MOUSEENTER$1 || eventType === MOUSELEAVE$1) &&
+          var shouldStop = (eventType === MOUSEENTER$1 || eventType === MOUSELEAVE$1) &&
               ((compareShape &&
                   (this === compareShape ||
@@ -4456,5 +4453,5 @@
               this._fire(eventType, evt);
               // simulate event bubbling
-              const stopBubble = (eventType === MOUSEENTER$1 || eventType === MOUSELEAVE$1) &&
+              var stopBubble = (eventType === MOUSEENTER$1 || eventType === MOUSELEAVE$1) &&
                   compareShape &&
                   compareShape.isAncestorOf &&
@@ -4525,11 +4522,11 @@
       // drag & drop
       _createDragElement(evt) {
-          const pointerId = evt ? evt.pointerId : undefined;
-          const stage = this.getStage();
-          const ap = this.getAbsolutePosition();
+          var pointerId = evt ? evt.pointerId : undefined;
+          var stage = this.getStage();
+          var ap = this.getAbsolutePosition();
           if (!stage) {
               return;
           }
-          const pos = stage._getPointerById(pointerId) ||
+          var pos = stage._getPointerById(pointerId) ||
               stage._changedPointerPositions[0] ||
               ap;
@@ -4569,9 +4566,9 @@
               return;
           }
-          let newNodePos = {
+          var newNodePos = {
               x: pos.x - elem.offset.x,
               y: pos.y - elem.offset.y,
           };
-          const dbf = this.dragBoundFunc();
+          var dbf = this.dragBoundFunc();
           if (dbf !== undefined) {
               const bounded = dbf.call(this, newNodePos, evt);
@@ -4620,6 +4617,6 @@
           this._dragCleanup();
           this.on('mousedown.konva touchstart.konva', function (evt) {
-              const shouldCheckButton = evt.evt['button'] !== undefined;
-              const canDrag = !shouldCheckButton || Konva$2.dragButtons.indexOf(evt.evt['button']) >= 0;
+              var shouldCheckButton = evt.evt['button'] !== undefined;
+              var canDrag = !shouldCheckButton || Konva$2.dragButtons.indexOf(evt.evt['button']) >= 0;
               if (!canDrag) {
                   return;
@@ -4628,5 +4625,5 @@
                   return;
               }
-              let hasDraggingChild = false;
+              var hasDraggingChild = false;
               DD._dragElements.forEach((elem) => {
                   if (this.isAncestorOf(elem.node)) {
@@ -4653,5 +4650,5 @@
                * drag and drop mode
                */
-              const stage = this.getStage();
+              var stage = this.getStage();
               if (!stage) {
                   return;
@@ -4720,5 +4717,5 @@
       }
       static _createNode(obj, container) {
-          let className = Node.prototype.getClassName.call(obj), children = obj.children, no, len, n;
+          var className = Node.prototype.getClassName.call(obj), children = obj.children, no, len, n;
           // if container was passed in, add it to attrs
           if (container) {
@@ -5332,5 +5329,5 @@
           }
           const children = this.children || [];
-          const results = [];
+          var results = [];
           children.forEach(function (child) {
               if (filterFunc(child)) {
@@ -5403,5 +5400,5 @@
           }
           if (children.length > 1) {
-              for (let i = 0; i < children.length; i++) {
+              for (var i = 0; i < children.length; i++) {
                   this.add(children[i]);
               }
@@ -5496,9 +5493,9 @@
        */
       findOne(selector) {
-          const result = this._generalFind(selector, true);
+          var result = this._generalFind(selector, true);
           return result.length > 0 ? result[0] : undefined;
       }
       _generalFind(selector, findOne) {
-          const retArr = [];
+          var retArr = [];
           this._descendants((node) => {
               const valid = node._isMatch(selector);
@@ -5533,5 +5530,5 @@
       // extenders
       toObject() {
-          const obj = Node.prototype.toObject.call(this);
+          var obj = Node.prototype.toObject.call(this);
           obj.children = [];
           this.getChildren().forEach((child) => {
@@ -5548,5 +5545,5 @@
        */
       isAncestorOf(node) {
-          let parent = node.getParent();
+          var parent = node.getParent();
           while (parent) {
               if (parent._id === this._id) {
@@ -5559,5 +5556,5 @@
       clone(obj) {
           // call super method
-          const node = Node.prototype.clone.call(this, obj);
+          var node = Node.prototype.clone.call(this, obj);
           this.getChildren().forEach(function (no) {
               node.add(no.clone());
@@ -5579,5 +5576,5 @@
        */
       getAllIntersections(pos) {
-          const arr = [];
+          var arr = [];
           this.find('Shape').forEach((shape) => {
               if (shape.isVisible() && shape.intersects(pos)) {
@@ -5607,6 +5604,6 @@
       }
       drawScene(can, top, bufferCanvas) {
-          const layer = this.getLayer(), canvas = can || (layer && layer.getCanvas()), context = canvas && canvas.getContext(), cachedCanvas = this._getCanvasCache(), cachedSceneCanvas = cachedCanvas && cachedCanvas.scene;
-          const caching = canvas && canvas.isCache;
+          var layer = this.getLayer(), canvas = can || (layer && layer.getCanvas()), context = canvas && canvas.getContext(), cachedCanvas = this._getCanvasCache(), cachedSceneCanvas = cachedCanvas && cachedCanvas.scene;
+          var caching = canvas && canvas.isCache;
           if (!this.isVisible() && !caching) {
               return this;
@@ -5614,5 +5611,5 @@
           if (cachedSceneCanvas) {
               context.save();
-              const m = this.getAbsoluteTransform(top).getMatrix();
+              var m = this.getAbsoluteTransform(top).getMatrix();
               context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
               this._drawCachedSceneCanvas(context);
@@ -5628,8 +5625,8 @@
               return this;
           }
-          const layer = this.getLayer(), canvas = can || (layer && layer.hitCanvas), context = canvas && canvas.getContext(), cachedCanvas = this._getCanvasCache(), cachedHitCanvas = cachedCanvas && cachedCanvas.hit;
+          var layer = this.getLayer(), canvas = can || (layer && layer.hitCanvas), context = canvas && canvas.getContext(), cachedCanvas = this._getCanvasCache(), cachedHitCanvas = cachedCanvas && cachedCanvas.hit;
           if (cachedHitCanvas) {
               context.save();
-              const m = this.getAbsoluteTransform(top).getMatrix();
+              var m = this.getAbsoluteTransform(top).getMatrix();
               context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
               this._drawCachedHitCanvas(context);
@@ -5643,11 +5640,11 @@
       _drawChildren(drawMethod, canvas, top, bufferCanvas) {
           var _a;
-          const context = canvas && canvas.getContext(), clipWidth = this.clipWidth(), clipHeight = this.clipHeight(), clipFunc = this.clipFunc(), hasClip = (typeof clipWidth === 'number' && typeof clipHeight === 'number') ||
+          var context = canvas && canvas.getContext(), clipWidth = this.clipWidth(), clipHeight = this.clipHeight(), clipFunc = this.clipFunc(), hasClip = (typeof clipWidth === 'number' && typeof clipHeight === 'number') ||
               clipFunc;
           const selfCache = top === this;
           if (hasClip) {
               context.save();
-              const transform = this.getAbsoluteTransform(top);
-              let m = transform.getMatrix();
+              var transform = this.getAbsoluteTransform(top);
+              var m = transform.getMatrix();
               context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
               context.beginPath();
@@ -5657,6 +5654,6 @@
               }
               else {
-                  const clipX = this.clipX();
-                  const clipY = this.clipY();
+                  var clipX = this.clipX();
+                  var clipY = this.clipY();
                   context.rect(clipX || 0, clipY || 0, clipWidth, clipHeight);
               }
@@ -5665,5 +5662,5 @@
               context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
           }
-          const hasComposition = !selfCache &&
+          var hasComposition = !selfCache &&
               this.globalCompositeOperation() !== 'source-over' &&
               drawMethod === 'drawScene';
@@ -5684,8 +5681,8 @@
       getClientRect(config = {}) {
           var _a;
-          const skipTransform = config.skipTransform;
-          const relativeTo = config.relativeTo;
-          let minX, minY, maxX, maxY;
-          let selfRect = {
+          var skipTransform = config.skipTransform;
+          var relativeTo = config.relativeTo;
+          var minX, minY, maxX, maxY;
+          var selfRect = {
               x: Infinity,
               y: Infinity,
@@ -5693,5 +5690,5 @@
               height: 0,
           };
-          const that = this;
+          var that = this;
           (_a = this.children) === null || _a === void 0 ? void 0 : _a.forEach(function (child) {
               // skip invisible children
@@ -5699,5 +5696,5 @@
                   return;
               }
-              const rect = child.getClientRect({
+              var rect = child.getClientRect({
                   relativeTo: that,
                   skipShadow: config.skipShadow,
@@ -5723,8 +5720,8 @@
           });
           // if child is group we need to make sure it has visible shapes inside
-          const shapes = this.find('Shape');
-          let hasVisible = false;
-          for (let i = 0; i < shapes.length; i++) {
-              const shape = shapes[i];
+          var shapes = this.find('Shape');
+          var hasVisible = false;
+          for (var i = 0; i < shapes.length; i++) {
+              var shape = shapes[i];
               if (shape._isVisible(this)) {
                   hasVisible = true;
@@ -5900,5 +5897,5 @@
 
   // CONSTANTS
-  const STAGE = 'Stage', STRING = 'string', PX = 'px', MOUSEOUT = 'mouseout', MOUSELEAVE = 'mouseleave', MOUSEOVER = 'mouseover', MOUSEENTER = 'mouseenter', MOUSEMOVE = 'mousemove', MOUSEDOWN = 'mousedown', MOUSEUP = 'mouseup', POINTERMOVE = 'pointermove', POINTERDOWN = 'pointerdown', POINTERUP = 'pointerup', POINTERCANCEL = 'pointercancel', LOSTPOINTERCAPTURE = 'lostpointercapture', POINTEROUT = 'pointerout', POINTERLEAVE = 'pointerleave', POINTEROVER = 'pointerover', POINTERENTER = 'pointerenter', CONTEXTMENU = 'contextmenu', TOUCHSTART = 'touchstart', TOUCHEND = 'touchend', TOUCHMOVE = 'touchmove', TOUCHCANCEL = 'touchcancel', WHEEL = 'wheel', MAX_LAYERS_NUMBER = 5, EVENTS = [
+  var STAGE = 'Stage', STRING = 'string', PX = 'px', MOUSEOUT = 'mouseout', MOUSELEAVE = 'mouseleave', MOUSEOVER = 'mouseover', MOUSEENTER = 'mouseenter', MOUSEMOVE = 'mousemove', MOUSEDOWN = 'mousedown', MOUSEUP = 'mouseup', POINTERMOVE = 'pointermove', POINTERDOWN = 'pointerdown', POINTERUP = 'pointerup', POINTERCANCEL = 'pointercancel', LOSTPOINTERCAPTURE = 'lostpointercapture', POINTEROUT = 'pointerout', POINTERLEAVE = 'pointerleave', POINTEROVER = 'pointerover', POINTERENTER = 'pointerenter', CONTEXTMENU = 'contextmenu', TOUCHSTART = 'touchstart', TOUCHEND = 'touchend', TOUCHMOVE = 'touchmove', TOUCHCANCEL = 'touchcancel', WHEEL = 'wheel', MAX_LAYERS_NUMBER = 5, EVENTS = [
       [MOUSEENTER, '_pointerenter'],
       [MOUSEDOWN, '_pointerdown'],
@@ -6059,5 +6056,5 @@
           if (typeof container === STRING) {
               if (container.charAt(0) === '.') {
-                  const className = container.slice(1);
+                  var className = container.slice(1);
                   container = document.getElementsByClassName(className)[0];
               }
@@ -6094,5 +6091,5 @@
        */
       clear() {
-          let layers = this.children, len = layers.length, n;
+          var layers = this.children, len = layers.length, n;
           for (n = 0; n < len; n++) {
               layers[n].clear();
@@ -6110,9 +6107,9 @@
       destroy() {
           super.destroy();
-          const content = this.content;
+          var content = this.content;
           if (content && Util._isInDocument(content)) {
               this.container().removeChild(content);
           }
-          const index = stages.indexOf(this);
+          var index = stages.indexOf(this);
           if (index > -1) {
               stages.splice(index, 1);
@@ -6158,11 +6155,11 @@
           config.width = config.width || this.width();
           config.height = config.height || this.height();
-          const canvas = new SceneCanvas({
+          var canvas = new SceneCanvas({
               width: config.width,
               height: config.height,
               pixelRatio: config.pixelRatio || 1,
           });
-          const _context = canvas.getContext()._context;
-          const layers = this.children;
+          var _context = canvas.getContext()._context;
+          var layers = this.children;
           if (config.x || config.y) {
               _context.translate(-1 * config.x, -1 * config.y);
@@ -6172,5 +6169,5 @@
                   return;
               }
-              const layerCanvas = layer._toKonvaCanvas(config);
+              var layerCanvas = layer._toKonvaCanvas(config);
               _context.drawImage(layerCanvas._canvas, config.x, config.y, layerCanvas.getWidth() / layerCanvas.getPixelRatio(), layerCanvas.getHeight() / layerCanvas.getPixelRatio());
           });
@@ -6194,5 +6191,5 @@
               return null;
           }
-          let layers = this.children, len = layers.length, end = len - 1, n;
+          var layers = this.children, len = layers.length, end = len - 1, n;
           for (n = end; n >= 0; n--) {
               const shape = layers[n].getIntersection(pos);
@@ -6204,6 +6201,6 @@
       }
       _resizeDOM() {
-          const width = this.width();
-          const height = this.height();
+          var width = this.width();
+          var height = this.height();
           if (this.content) {
               // set content dimensions
@@ -6221,5 +6218,5 @@
       add(layer, ...rest) {
           if (arguments.length > 1) {
-              for (let i = 0; i < arguments.length; i++) {
+              for (var i = 0; i < arguments.length; i++) {
                   this.add(arguments[i]);
               }
@@ -6227,5 +6224,5 @@
           }
           super.add(layer);
-          const length = this.children.length;
+          var length = this.children.length;
           if (length > MAX_LAYERS_NUMBER) {
               Util.warn('The stage has ' +
@@ -6311,6 +6308,6 @@
           }
           this.setPointersPositions(evt);
-          const targetShape = this._getTargetShape(eventType);
-          const eventsEnabled = !(Konva$2.isDragging() || Konva$2.isTransforming()) || Konva$2.hitOnDragEnabled;
+          var targetShape = this._getTargetShape(eventType);
+          var eventsEnabled = !(Konva$2.isDragging() || Konva$2.isTransforming()) || Konva$2.hitOnDragEnabled;
           if (targetShape && eventsEnabled) {
               targetShape._fireAndBubble(events.pointerout, { evt: evt });
@@ -6345,7 +6342,7 @@
           }
           this.setPointersPositions(evt);
-          let triggeredOnShape = false;
+          var triggeredOnShape = false;
           this._changedPointerPositions.forEach((pos) => {
-              const shape = this.getIntersection(pos);
+              var shape = this.getIntersection(pos);
               DD.justDragged = false;
               // probably we are staring a click
@@ -6393,11 +6390,11 @@
           }
           this.setPointersPositions(evt);
-          const eventsEnabled = !(Konva$2.isDragging() || Konva$2.isTransforming()) || Konva$2.hitOnDragEnabled;
+          var eventsEnabled = !(Konva$2.isDragging() || Konva$2.isTransforming()) || Konva$2.hitOnDragEnabled;
           if (!eventsEnabled) {
               return;
           }
-          const processedShapesIds = {};
+          var processedShapesIds = {};
           let triggeredOnShape = false;
-          const targetShape = this._getTargetShape(eventType);
+          var targetShape = this._getTargetShape(eventType);
           this._changedPointerPositions.forEach((pos) => {
               const shape = (getCapturedShape(pos.id) ||
@@ -6405,5 +6402,5 @@
               const pointerId = pos.id;
               const event = { evt: evt, pointerId };
-              const differentTarget = targetShape !== shape;
+              var differentTarget = targetShape !== shape;
               if (differentTarget && targetShape) {
                   targetShape._fireAndBubble(events.pointerout, { ...event }, shape);
@@ -6455,5 +6452,5 @@
           const clickStartShape = this[eventType + 'ClickStartShape'];
           const clickEndShape = this[eventType + 'ClickEndShape'];
-          const processedShapesIds = {};
+          var processedShapesIds = {};
           let triggeredOnShape = false;
           this._changedPointerPositions.forEach((pos) => {
@@ -6536,5 +6533,5 @@
       _contextmenu(evt) {
           this.setPointersPositions(evt);
-          const shape = this.getIntersection(this.getPointerPosition());
+          var shape = this.getIntersection(this.getPointerPosition());
           if (shape && shape.isListening()) {
               shape._fireAndBubble(CONTEXTMENU, { evt: evt });
@@ -6550,5 +6547,5 @@
       _wheel(evt) {
           this.setPointersPositions(evt);
-          const shape = this.getIntersection(this.getPointerPosition());
+          var shape = this.getIntersection(this.getPointerPosition());
           if (shape && shape.isListening()) {
               shape._fireAndBubble(WHEEL, { evt: evt });
@@ -6589,5 +6586,5 @@
        */
       setPointersPositions(evt) {
-          let contentPosition = this._getContentPosition(), x = null, y = null;
+          var contentPosition = this._getContentPosition(), x = null, y = null;
           evt = evt ? evt : window.event;
           // touch events
@@ -6639,5 +6636,5 @@
               };
           }
-          const rect = this.content.getBoundingClientRect();
+          var rect = this.content.getBoundingClientRect();
           return {
               top: rect.top,
@@ -6662,5 +6659,5 @@
               return;
           }
-          const container = this.container();
+          var container = this.container();
           if (!container) {
               throw 'Stage has no container. A container is required.';
@@ -6726,9 +6723,9 @@
   }
 
-  const HAS_SHADOW = 'hasShadow';
-  const SHADOW_RGBA = 'shadowRGBA';
-  const patternImage = 'patternImage';
-  const linearGradient = 'linearGradient';
-  const radialGradient = 'radialGradient';
+  var HAS_SHADOW = 'hasShadow';
+  var SHADOW_RGBA = 'shadowRGBA';
+  var patternImage = 'patternImage';
+  var linearGradient = 'linearGradient';
+  var radialGradient = 'radialGradient';
   let dummyContext$1;
   function getDummyContext$1() {
@@ -6932,5 +6929,5 @@
       __getFillPattern() {
           if (this.fillPatternImage()) {
-              const ctx = getDummyContext$1();
+              var ctx = getDummyContext$1();
               const pattern = ctx.createPattern(this.fillPatternImage(), this.fillPatternRepeat() || 'repeat');
               if (pattern && pattern.setTransform) {
@@ -6960,12 +6957,12 @@
       }
       __getLinearGradient() {
-          const colorStops = this.fillLinearGradientColorStops();
+          var colorStops = this.fillLinearGradientColorStops();
           if (colorStops) {
-              const ctx = getDummyContext$1();
-              const start = this.fillLinearGradientStartPoint();
-              const end = this.fillLinearGradientEndPoint();
-              const grd = ctx.createLinearGradient(start.x, start.y, end.x, end.y);
+              var ctx = getDummyContext$1();
+              var start = this.fillLinearGradientStartPoint();
+              var end = this.fillLinearGradientEndPoint();
+              var grd = ctx.createLinearGradient(start.x, start.y, end.x, end.y);
               // build color stops
-              for (let n = 0; n < colorStops.length; n += 2) {
+              for (var n = 0; n < colorStops.length; n += 2) {
                   grd.addColorStop(colorStops[n], colorStops[n + 1]);
               }
@@ -6977,12 +6974,12 @@
       }
       __getRadialGradient() {
-          const colorStops = this.fillRadialGradientColorStops();
+          var colorStops = this.fillRadialGradientColorStops();
           if (colorStops) {
-              const ctx = getDummyContext$1();
-              const start = this.fillRadialGradientStartPoint();
-              const end = this.fillRadialGradientEndPoint();
-              const grd = ctx.createRadialGradient(start.x, start.y, this.fillRadialGradientStartRadius(), end.x, end.y, this.fillRadialGradientEndRadius());
+              var ctx = getDummyContext$1();
+              var start = this.fillRadialGradientStartPoint();
+              var end = this.fillRadialGradientEndPoint();
+              var grd = ctx.createRadialGradient(start.x, start.y, this.fillRadialGradientStartRadius(), end.x, end.y, this.fillRadialGradientEndRadius());
               // build color stops
-              for (let n = 0; n < colorStops.length; n += 2) {
+              for (var n = 0; n < colorStops.length; n += 2) {
                   grd.addColorStop(colorStops[n], colorStops[n + 1]);
               }
@@ -6997,5 +6994,5 @@
               return;
           }
-          const rgba = Util.colorToRGBA(this.shadowColor());
+          var rgba = Util.colorToRGBA(this.shadowColor());
           if (rgba) {
               return ('rgba(' +
@@ -7080,5 +7077,5 @@
        */
       intersects(point) {
-          const stage = this.getStage();
+          var stage = this.getStage();
           if (!stage) {
               return false;
@@ -7152,5 +7149,5 @@
        */
       getSelfRect() {
-          const size = this.size();
+          var size = this.size();
           return {
               x: this._centroid ? -size.width / 2 : 0,
@@ -7208,8 +7205,8 @@
           // 2 - when we are caching current
           // 3 - when node is cached and we need to draw it into layer
-          const layer = this.getLayer();
-          let canvas = can || layer.getCanvas(), context = canvas.getContext(), cachedCanvas = this._getCanvasCache(), drawFunc = this.getSceneFunc(), hasShadow = this.hasShadow(), stage, bufferContext;
-          const skipBuffer = canvas.isCache;
-          const cachingSelf = top === this;
+          var layer = this.getLayer();
+          var canvas = can || layer.getCanvas(), context = canvas.getContext(), cachedCanvas = this._getCanvasCache(), drawFunc = this.getSceneFunc(), hasShadow = this.hasShadow(), stage, bufferContext;
+          var skipBuffer = canvas.isCache;
+          var cachingSelf = top === this;
           if (!this.isVisible() && !cachingSelf) {
               return this;
@@ -7218,5 +7215,5 @@
           if (cachedCanvas) {
               context.save();
-              const m = this.getAbsoluteTransform(top).getMatrix();
+              var m = this.getAbsoluteTransform(top).getMatrix();
               context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
               this._drawCachedSceneCanvas(context);
@@ -7241,5 +7238,5 @@
               drawFunc.call(this, bufferContext, this);
               bufferContext.restore();
-              const ratio = bc.pixelRatio;
+              var ratio = bc.pixelRatio;
               if (hasShadow) {
                   context._applyShadow(this);
@@ -7269,5 +7266,5 @@
               return this;
           }
-          const layer = this.getLayer(), canvas = can || layer.hitCanvas, context = canvas && canvas.getContext(), drawFunc = this.hitFunc() || this.sceneFunc(), cachedCanvas = this._getCanvasCache(), cachedHitCanvas = cachedCanvas && cachedCanvas.hit;
+          var layer = this.getLayer(), canvas = can || layer.hitCanvas, context = canvas && canvas.getContext(), drawFunc = this.hitFunc() || this.sceneFunc(), cachedCanvas = this._getCanvasCache(), cachedHitCanvas = cachedCanvas && cachedCanvas.hit;
           if (!this.colorKey) {
               Util.warn('Looks like your canvas has a destroyed shape in it. Do not reuse shape after you destroyed it. If you want to reuse shape you should call remove() instead of destroy()');
@@ -7275,5 +7272,5 @@
           if (cachedHitCanvas) {
               context.save();
-              const m = this.getAbsoluteTransform(top).getMatrix();
+              var m = this.getAbsoluteTransform(top).getMatrix();
               context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
               this._drawCachedHitCanvas(context);
@@ -7288,5 +7285,5 @@
           const selfCache = this === top;
           if (!selfCache) {
-              const o = this.getAbsoluteTransform(top).getMatrix();
+              var o = this.getAbsoluteTransform(top).getMatrix();
               context.transform(o[0], o[1], o[2], o[3], o[4], o[5]);
           }
@@ -7308,5 +7305,5 @@
        */
       drawHitFromCache(alphaThreshold = 0) {
-          let cachedCanvas = this._getCanvasCache(), sceneCanvas = this._getCachedSceneCanvas(), hitCanvas = cachedCanvas.hit, hitContext = hitCanvas.getContext(), hitWidth = hitCanvas.getWidth(), hitHeight = hitCanvas.getHeight(), hitImageData, hitData, len, rgbColorKey, i, alpha;
+          var cachedCanvas = this._getCanvasCache(), sceneCanvas = this._getCachedSceneCanvas(), hitCanvas = cachedCanvas.hit, hitContext = hitCanvas.getContext(), hitWidth = hitCanvas.getWidth(), hitHeight = hitCanvas.getHeight(), hitImageData, hitData, len, rgbColorKey, i, alpha;
           hitContext.clear();
           hitContext.drawImage(sceneCanvas._canvas, 0, 0, hitWidth, hitHeight);
@@ -8372,5 +8369,5 @@
 
   // constants
-  const HASH = '#', BEFORE_DRAW = 'beforeDraw', DRAW = 'draw', 
+  var HASH = '#', BEFORE_DRAW = 'beforeDraw', DRAW = 'draw', 
   /*
    * 2 - 3 - 4
@@ -8487,5 +8484,5 @@
       setZIndex(index) {
           super.setZIndex(index);
-          const stage = this.getStage();
+          var stage = this.getStage();
           if (stage && stage.content) {
               stage.content.removeChild(this.getNativeCanvasElement());
@@ -8501,5 +8498,5 @@
       moveToTop() {
           Node.prototype.moveToTop.call(this);
-          const stage = this.getStage();
+          var stage = this.getStage();
           if (stage && stage.content) {
               stage.content.removeChild(this.getNativeCanvasElement());
@@ -8509,9 +8506,9 @@
       }
       moveUp() {
-          const moved = Node.prototype.moveUp.call(this);
+          var moved = Node.prototype.moveUp.call(this);
           if (!moved) {
               return false;
           }
-          const stage = this.getStage();
+          var stage = this.getStage();
           if (!stage || !stage.content) {
               return false;
@@ -8529,7 +8526,7 @@
       moveDown() {
           if (Node.prototype.moveDown.call(this)) {
-              const stage = this.getStage();
+              var stage = this.getStage();
               if (stage) {
-                  const children = stage.children;
+                  var children = stage.children;
                   if (stage.content) {
                       stage.content.removeChild(this.getNativeCanvasElement());
@@ -8544,7 +8541,7 @@
       moveToBottom() {
           if (Node.prototype.moveToBottom.call(this)) {
-              const stage = this.getStage();
+              var stage = this.getStage();
               if (stage) {
-                  const children = stage.children;
+                  var children = stage.children;
                   if (stage.content) {
                       stage.content.removeChild(this.getNativeCanvasElement());
@@ -8560,5 +8557,5 @@
       }
       remove() {
-          const _canvas = this.getNativeCanvasElement();
+          var _canvas = this.getNativeCanvasElement();
           Node.prototype.remove.call(this);
           if (_canvas && _canvas.parentNode && Util._isInDocument(_canvas)) {
@@ -8577,5 +8574,5 @@
       }
       _validateAdd(child) {
-          const type = child.getType();
+          var type = child.getType();
           if (type !== 'Group' && type !== 'Shape') {
               Util.throw('You may only add groups and shapes to a layer.');
@@ -8674,6 +8671,6 @@
           // in some cases antialiased area may be bigger than 1px
           // it is possible if we will cache node, then scale it a lot
-          let spiralSearchDistance = 1;
-          let continueSearch = false;
+          var spiralSearchDistance = 1;
+          var continueSearch = false;
           while (true) {
               for (let i = 0; i < INTERSECTION_OFFSETS_LEN; i++) {
@@ -8731,5 +8728,5 @@
       }
       drawScene(can, top) {
-          const layer = this.getLayer(), canvas = can || (layer && layer.getCanvas());
+          var layer = this.getLayer(), canvas = can || (layer && layer.getCanvas());
           this._fire(BEFORE_DRAW, {
               node: this,
@@ -8745,5 +8742,5 @@
       }
       drawHit(can, top) {
-          const layer = this.getLayer(), canvas = can || (layer && layer.hitCanvas);
+          var layer = this.getLayer(), canvas = can || (layer && layer.hitCanvas);
           if (layer && layer.clearBeforeDraw()) {
               layer.getHitCanvas().getContext().clear();
@@ -8789,6 +8786,6 @@
               return;
           }
-          const parent = this.parent;
-          const added = !!this.hitCanvas._canvas.parentNode;
+          var parent = this.parent;
+          var added = !!this.hitCanvas._canvas.parentNode;
           if (added) {
               parent.content.removeChild(this.hitCanvas._canvas);
@@ -8927,5 +8924,5 @@
   class Group extends Container {
       _validateAdd(child) {
-          const type = child.getType();
+          var type = child.getType();
           if (type !== 'Group' && type !== 'Shape') {
               Util.throw('You may only add groups and shapes to groups.');
@@ -9124,5 +9121,5 @@
               }
           }
-          for (const key in layerHash) {
+          for (let key in layerHash) {
               if (!layerHash.hasOwnProperty(key)) {
                   continue;
@@ -9152,5 +9149,5 @@
   Animation.animRunning = false;
 
-  let blacklist = {
+  var blacklist = {
       node: 1,
       duration: 1,
@@ -9178,5 +9175,5 @@
       }
       fire(str) {
-          const handler = this[str];
+          var handler = this[str];
           if (handler) {
               handler();
@@ -9257,5 +9254,5 @@
       }
       onEnterFrame() {
-          const t = this.getTimer() - this._startTime;
+          var t = this.getTimer() - this._startTime;
           if (this.state === PLAYING) {
               this.setTime(t);
@@ -9301,5 +9298,5 @@
   class Tween {
       constructor(config) {
-          let that = this, node = config.node, nodeId = node._id, duration, easing = config.easing || Easings.Linear, yoyo = !!config.yoyo, key;
+          var that = this, node = config.node, nodeId = node._id, duration, easing = config.easing || Easings.Linear, yoyo = !!config.yoyo, key;
           if (typeof config.duration === 'undefined') {
               duration = 0.3;
@@ -9314,5 +9311,5 @@
           this.node = node;
           this._id = idCounter++;
-          const layers = node.getLayer() ||
+          var layers = node.getLayer() ||
               (node instanceof Konva$2['Stage'] ? node.getLayers() : null);
           if (!layers) {
@@ -9349,5 +9346,5 @@
       }
       _addAttr(key, end) {
-          let node = this.node, nodeId = node._id, start, diff, tweenId, n, len, trueEnd, trueStart, endRGBA;
+          var node = this.node, nodeId = node._id, start, diff, tweenId, n, len, trueEnd, trueStart, endRGBA;
           // remove conflict from tween map if it exists
           tweenId = Tween.tweens[nodeId][key];
@@ -9380,5 +9377,5 @@
                       }
                       else {
-                          const startRGBA = Util.colorToRGBA(start[n]);
+                          var startRGBA = Util.colorToRGBA(start[n]);
                           endRGBA = Util.colorToRGBA(end[n]);
                           start[n] = startRGBA;
@@ -9421,5 +9418,5 @@
       }
       _tweenFunc(i) {
-          let node = this.node, attrs = Tween.attrs[node._id][this._id], key, attr, start, diff, newVal, n, len, end;
+          var node = this.node, attrs = Tween.attrs[node._id][this._id], key, attr, start, diff, newVal, n, len, end;
           for (key in attrs) {
               attr = attrs[key];
@@ -9485,7 +9482,7 @@
           };
           this.tween.onFinish = () => {
-              const node = this.node;
+              var node = this.node;
               // after tweening  points of line we need to set original end
-              const attrs = Tween.attrs[node._id][this._id];
+              var attrs = Tween.attrs[node._id][this._id];
               if (attrs.points && attrs.points.trueEnd) {
                   node.setAttr('points', attrs.points.trueEnd);
@@ -9496,7 +9493,7 @@
           };
           this.tween.onReset = () => {
-              const node = this.node;
+              var node = this.node;
               // after tweening  points of line we need to set original start
-              const attrs = Tween.attrs[node._id][this._id];
+              var attrs = Tween.attrs[node._id][this._id];
               if (attrs.points && attrs.points.trueStart) {
                   node.points(attrs.points.trueStart);
@@ -9579,5 +9576,5 @@
        */
       destroy() {
-          let nodeId = this.node._id, thisId = this._id, attrs = Tween.tweens[nodeId], key;
+          var nodeId = this.node._id, thisId = this._id, attrs = Tween.tweens[nodeId], key;
           this.pause();
           for (key in attrs) {
@@ -9604,5 +9601,5 @@
    */
   Node.prototype.to = function (params) {
-      const onFinish = params.onFinish;
+      var onFinish = params.onFinish;
       params.node = this;
       params.onFinish = function () {
@@ -9612,5 +9609,5 @@
           }
       };
-      const tween = new Tween(params);
+      var tween = new Tween(params);
       tween.play();
   };
@@ -9630,5 +9627,5 @@
        */
       BackEaseIn(t, b, c, d) {
-          const s = 1.70158;
+          var s = 1.70158;
           return c * (t /= d) * t * ((s + 1) * t - s) + b;
       },
@@ -9639,5 +9636,5 @@
        */
       BackEaseOut(t, b, c, d) {
-          const s = 1.70158;
+          var s = 1.70158;
           return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
       },
@@ -9648,5 +9645,5 @@
        */
       BackEaseInOut(t, b, c, d) {
-          let s = 1.70158;
+          var s = 1.70158;
           if ((t /= d / 2) < 1) {
               return (c / 2) * (t * t * (((s *= 1.525) + 1) * t - s)) + b;
@@ -9661,5 +9658,5 @@
       ElasticEaseIn(t, b, c, d, a, p) {
           // added s = 0
-          let s = 0;
+          var s = 0;
           if (t === 0) {
               return b;
@@ -9689,5 +9686,5 @@
       ElasticEaseOut(t, b, c, d, a, p) {
           // added s = 0
-          let s = 0;
+          var s = 0;
           if (t === 0) {
               return b;
@@ -9717,5 +9714,5 @@
       ElasticEaseInOut(t, b, c, d, a, p) {
           // added s = 0
-          let s = 0;
+          var s = 0;
           if (t === 0) {
               return b;
@@ -9971,5 +9968,5 @@
   class Arc extends Shape {
       _sceneFunc(context) {
-          const angle = Konva$2.getAngle(this.angle()), clockwise = this.clockwise();
+          var angle = Konva$2.getAngle(this.angle()), clockwise = this.clockwise();
           context.beginPath();
           context.arc(0, 0, this.outerRadius(), 0, angle, clockwise);
@@ -10077,11 +10074,11 @@
 
   function getControlPoints(x0, y0, x1, y1, x2, y2, t) {
-      const d01 = Math.sqrt(Math.pow(x1 - x0, 2) + Math.pow(y1 - y0, 2)), d12 = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)), fa = (t * d01) / (d01 + d12), fb = (t * d12) / (d01 + d12), p1x = x1 - fa * (x2 - x0), p1y = y1 - fa * (y2 - y0), p2x = x1 + fb * (x2 - x0), p2y = y1 + fb * (y2 - y0);
+      var d01 = Math.sqrt(Math.pow(x1 - x0, 2) + Math.pow(y1 - y0, 2)), d12 = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)), fa = (t * d01) / (d01 + d12), fb = (t * d12) / (d01 + d12), p1x = x1 - fa * (x2 - x0), p1y = y1 - fa * (y2 - y0), p2x = x1 + fb * (x2 - x0), p2y = y1 + fb * (y2 - y0);
       return [p1x, p1y, p2x, p2y];
   }
   function expandPoints(p, tension) {
-      const len = p.length, allPoints = [];
-      for (let n = 2; n < len - 2; n += 2) {
-          const cp = getControlPoints(p[n - 2], p[n - 1], p[n], p[n + 1], p[n + 2], p[n + 3], tension);
+      var len = p.length, allPoints = [], n, cp;
+      for (n = 2; n < len - 2; n += 2) {
+          cp = getControlPoints(p[n - 2], p[n - 1], p[n], p[n + 1], p[n + 2], p[n + 3], tension);
           if (isNaN(cp[0])) {
               continue;
@@ -10199,5 +10196,5 @@
       }
       _sceneFunc(context) {
-          let points = this.points(), length = points.length, tension = this.tension(), closed = this.closed(), bezier = this.bezier(), tp, len, n;
+          var points = this.points(), length = points.length, tension = this.tension(), closed = this.closed(), bezier = this.bezier(), tp, len, n;
           if (!length) {
               return;
@@ -10255,5 +10252,5 @@
       }
       _getTensionPointsClosed() {
-          const p = this.points(), len = p.length, tension = this.tension(), firstControlPoints = getControlPoints(p[len - 2], p[len - 1], p[0], p[1], p[2], p[3], tension), lastControlPoints = getControlPoints(p[len - 4], p[len - 3], p[len - 2], p[len - 1], p[0], p[1], tension), middle = expandPoints(p, tension), tp = [firstControlPoints[2], firstControlPoints[3]]
+          var p = this.points(), len = p.length, tension = this.tension(), firstControlPoints = getControlPoints(p[len - 2], p[len - 1], p[0], p[1], p[2], p[3], tension), lastControlPoints = getControlPoints(p[len - 4], p[len - 3], p[len - 2], p[len - 1], p[0], p[1], tension), middle = expandPoints(p, tension), tp = [firstControlPoints[2], firstControlPoints[3]]
               .concat(middle)
               .concat([
@@ -10279,5 +10276,5 @@
       // overload size detection
       getSelfRect() {
-          let points = this.points();
+          var points = this.points();
           if (points.length < 4) {
               return {
@@ -10300,10 +10297,10 @@
               points = this.points();
           }
-          let minX = points[0];
-          let maxX = points[0];
-          let minY = points[1];
-          let maxY = points[1];
-          let x, y;
-          for (let i = 0; i < points.length / 2; i++) {
+          var minX = points[0];
+          var maxX = points[0];
+          var minY = points[1];
+          var maxY = points[1];
+          var x, y;
+          for (var i = 0; i < points.length / 2; i++) {
               x = points[i * 2];
               y = points[i * 2 + 1];
@@ -11078,4 +11075,5 @@
   const binomialCoefficients = [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1]];
   const getCubicArcLength = (xs, ys, t) => {
+      let z;
       let sum;
       let correctedT;
@@ -11084,5 +11082,5 @@
           }*/
       const n = 20;
-      const z = t / 2;
+      z = t / 2;
       sum = 0;
       for (let i = 0; i < n; i++) {
@@ -11294,11 +11292,11 @@
       }
       _sceneFunc(context) {
-          const ca = this.dataArray;
+          var ca = this.dataArray;
           // context position
           context.beginPath();
-          let isClosed = false;
-          for (let n = 0; n < ca.length; n++) {
-              const c = ca[n].command;
-              const p = ca[n].points;
+          var isClosed = false;
+          for (var n = 0; n < ca.length; n++) {
+              var c = ca[n].command;
+              var p = ca[n].points;
               switch (c) {
                   case 'L':
@@ -11341,14 +11339,14 @@
       }
       getSelfRect() {
-          let points = [];
+          var points = [];
           this.dataArray.forEach(function (data) {
               if (data.command === 'A') {
                   // Approximates by breaking curve into line segments
-                  const start = data.points[4];
+                  var start = data.points[4];
                   // 4 = theta
-                  const dTheta = data.points[5];
+                  var dTheta = data.points[5];
                   // 5 = dTheta
-                  const end = data.points[4] + dTheta;
-                  let inc = Math.PI / 180.0;
+                  var end = data.points[4] + dTheta;
+                  var inc = Math.PI / 180.0;
                   // 1 degree resolution
                   if (Math.abs(start - end) < inc) {
@@ -11382,10 +11380,10 @@
               }
           });
-          let minX = points[0];
-          let maxX = points[0];
-          let minY = points[1];
-          let maxY = points[1];
-          let x, y;
-          for (let i = 0; i < points.length / 2; i++) {
+          var minX = points[0];
+          var maxX = points[0];
+          var minY = points[1];
+          var maxY = points[1];
+          var x, y;
+          for (var i = 0; i < points.length / 2; i++) {
               x = points[i * 2];
               y = points[i * 2 + 1];
@@ -11435,5 +11433,5 @@
       static getPathLength(dataArray) {
           let pathLength = 0;
-          for (let i = 0; i < dataArray.length; ++i) {
+          for (var i = 0; i < dataArray.length; ++i) {
               pathLength += dataArray[i].pathLength;
           }
@@ -11441,5 +11439,5 @@
       }
       static getPointAtLengthOfDataArray(length, dataArray) {
-          let points, i = 0, ii = dataArray.length;
+          var point, i = 0, ii = dataArray.length;
           if (!ii) {
               return null;
@@ -11450,19 +11448,19 @@
           }
           if (i === ii) {
-              points = dataArray[i - 1].points.slice(-2);
+              point = dataArray[i - 1].points.slice(-2);
               return {
-                  x: points[0],
-                  y: points[1],
+                  x: point[0],
+                  y: point[1],
               };
           }
           if (length < 0.01) {
-              points = dataArray[i].points.slice(0, 2);
+              point = dataArray[i].points.slice(0, 2);
               return {
-                  x: points[0],
-                  y: points[1],
+                  x: point[0],
+                  y: point[1],
               };
           }
-          const cp = dataArray[i];
-          const p = cp.points;
+          var cp = dataArray[i];
+          var p = cp.points;
           switch (cp.command) {
               case 'L':
@@ -11522,6 +11520,6 @@
               return (1 - t) * (1 - t) * (1 - t);
           }
-          const x = P4x * CB1(pct) + P3x * CB2(pct) + P2x * CB3(pct) + P1x * CB4(pct);
-          const y = P4y * CB1(pct) + P3y * CB2(pct) + P2y * CB3(pct) + P1y * CB4(pct);
+          var x = P4x * CB1(pct) + P3x * CB2(pct) + P2x * CB3(pct) + P1x * CB4(pct);
+          var y = P4y * CB1(pct) + P3y * CB2(pct) + P2y * CB3(pct) + P1y * CB4(pct);
           return {
               x: x,
@@ -11539,6 +11537,6 @@
               return (1 - t) * (1 - t);
           }
-          const x = P3x * QB1(pct) + P2x * QB2(pct) + P1x * QB3(pct);
-          const y = P3y * QB1(pct) + P2y * QB2(pct) + P1y * QB3(pct);
+          var x = P3x * QB1(pct) + P2x * QB2(pct) + P1x * QB3(pct);
+          var y = P3y * QB1(pct) + P2y * QB2(pct) + P1y * QB3(pct);
           return {
               x: x,
@@ -11547,6 +11545,6 @@
       }
       static getPointOnEllipticalArc(cx, cy, rx, ry, theta, psi) {
-          const cosPsi = Math.cos(psi), sinPsi = Math.sin(psi);
-          const pt = {
+          var cosPsi = Math.cos(psi), sinPsi = Math.sin(psi);
+          var pt = {
               x: rx * Math.cos(theta),
               y: ry * Math.sin(theta),
@@ -11590,7 +11588,7 @@
           }
           // command string
-          let cs = data;
+          var cs = data;
           // command chars
-          const cc = [
+          var cc = [
               'm',
               'M',
@@ -11621,15 +11619,15 @@
           }
           // create array
-          const arr = cs.split('|');
-          const ca = [];
-          const coords = [];
+          var arr = cs.split('|');
+          var ca = [];
+          var coords = [];
           // init context point
-          let cpx = 0;
-          let cpy = 0;
-          const re = /([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi;
-          let match;
+          var cpx = 0;
+          var cpy = 0;
+          var re = /([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi;
+          var match;
           for (n = 1; n < arr.length; n++) {
-              let str = arr[n];
-              let c = str.charAt(0);
+              var str = arr[n];
+              var c = str.charAt(0);
               str = str.slice(1);
               coords.length = 0;
@@ -11640,6 +11638,6 @@
               //   coords.push(match[0]);
               // }
-              const p = [];
-              for (let j = 0, jlen = coords.length; j < jlen; j++) {
+              var p = [];
+              for (var j = 0, jlen = coords.length; j < jlen; j++) {
                   // extra case for merged flags
                   if (coords[j] === '00') {
@@ -11647,5 +11645,5 @@
                       continue;
                   }
-                  const parsed = parseFloat(coords[j]);
+                  var parsed = parseFloat(coords[j]);
                   if (!isNaN(parsed)) {
                       p.push(parsed);
@@ -11660,7 +11658,7 @@
                       break;
                   }
-                  let cmd = '';
-                  let points = [];
-                  const startX = cpx, startY = cpy;
+                  var cmd = '';
+                  var points = [];
+                  var startX = cpx, startY = cpy;
                   // Move var from within the switch to up here (jshint)
                   var prevCmd, ctlPtx, ctlPty; // Ss, Tt
@@ -11690,5 +11688,5 @@
                           // to the the first point of the path (if any).
                           if (ca.length > 2 && ca[ca.length - 1].command === 'z') {
-                              for (let idx = ca.length - 2; idx >= 0; idx--) {
+                              for (var idx = ca.length - 2; idx >= 0; idx--) {
                                   if (ca[idx].command === 'M') {
                                       cpx = ca[idx].points[0] + dx;
@@ -11859,6 +11857,6 @@
       }
       static calcLength(x, y, cmd, points) {
-          let len, p1, p2, t;
-          const path = Path;
+          var len, p1, p2, t;
+          var path = Path;
           switch (cmd) {
               case 'L':
@@ -11907,14 +11905,14 @@
       static convertEndpointToCenterParameterization(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg) {
           // Derived from: http://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes
-          const psi = psiDeg * (Math.PI / 180.0);
-          const xp = (Math.cos(psi) * (x1 - x2)) / 2.0 + (Math.sin(psi) * (y1 - y2)) / 2.0;
-          const yp = (-1 * Math.sin(psi) * (x1 - x2)) / 2.0 +
+          var psi = psiDeg * (Math.PI / 180.0);
+          var xp = (Math.cos(psi) * (x1 - x2)) / 2.0 + (Math.sin(psi) * (y1 - y2)) / 2.0;
+          var yp = (-1 * Math.sin(psi) * (x1 - x2)) / 2.0 +
               (Math.cos(psi) * (y1 - y2)) / 2.0;
-          const lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);
+          var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);
           if (lambda > 1) {
               rx *= Math.sqrt(lambda);
               ry *= Math.sqrt(lambda);
           }
-          let f = Math.sqrt((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) /
+          var f = Math.sqrt((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) /
               (rx * rx * (yp * yp) + ry * ry * (xp * xp)));
           if (fa === fs) {
@@ -11924,21 +11922,21 @@
               f = 0;
           }
-          const cxp = (f * rx * yp) / ry;
-          const cyp = (f * -ry * xp) / rx;
-          const cx = (x1 + x2) / 2.0 + Math.cos(psi) * cxp - Math.sin(psi) * cyp;
-          const cy = (y1 + y2) / 2.0 + Math.sin(psi) * cxp + Math.cos(psi) * cyp;
-          const vMag = function (v) {
+          var cxp = (f * rx * yp) / ry;
+          var cyp = (f * -ry * xp) / rx;
+          var cx = (x1 + x2) / 2.0 + Math.cos(psi) * cxp - Math.sin(psi) * cyp;
+          var cy = (y1 + y2) / 2.0 + Math.sin(psi) * cxp + Math.cos(psi) * cyp;
+          var vMag = function (v) {
               return Math.sqrt(v[0] * v[0] + v[1] * v[1]);
           };
-          const vRatio = function (u, v) {
+          var vRatio = function (u, v) {
               return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));
           };
-          const vAngle = function (u, v) {
+          var vAngle = function (u, v) {
               return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));
           };
-          const theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]);
-          const u = [(xp - cxp) / rx, (yp - cyp) / ry];
-          const v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];
-          let dTheta = vAngle(u, v);
+          var theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]);
+          var u = [(xp - cxp) / rx, (yp - cyp) / ry];
+          var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];
+          var dTheta = vAngle(u, v);
           if (vRatio(u, v) <= -1) {
               dTheta = Math.PI;
@@ -12076,14 +12074,14 @@
       _sceneFunc(ctx) {
           super._sceneFunc(ctx);
-          const PI2 = Math.PI * 2;
-          const points = this.points();
-          let tp = points;
-          const fromTension = this.tension() !== 0 && points.length > 4;
+          var PI2 = Math.PI * 2;
+          var points = this.points();
+          var tp = points;
+          var fromTension = this.tension() !== 0 && points.length > 4;
           if (fromTension) {
               tp = this.getTensionPoints();
           }
-          const length = this.pointerLength();
-          const n = points.length;
-          let dx, dy;
+          var length = this.pointerLength();
+          var n = points.length;
+          var dx, dy;
           if (fromTension) {
               const lp = [
@@ -12104,6 +12102,6 @@
               dy = points[n - 1] - points[n - 3];
           }
-          const radians = (Math.atan2(dy, dx) + PI2) % PI2;
-          const width = this.pointerWidth();
+          var radians = (Math.atan2(dy, dx) + PI2) % PI2;
+          var width = this.pointerWidth();
           if (this.pointerAtEnding()) {
               ctx.save();
@@ -12142,5 +12140,5 @@
           // here is a tricky part
           // we need to disable dash for arrow pointers
-          const isDashEnabled = this.dashEnabled();
+          var isDashEnabled = this.dashEnabled();
           if (isDashEnabled) {
               // manually disable dash for head
@@ -12452,5 +12450,5 @@
   class Ellipse extends Shape {
       _sceneFunc(context) {
-          const rx = this.radiusX(), ry = this.radiusY();
+          var rx = this.radiusX(), ry = this.radiusY();
           context.beginPath();
           context.save();
@@ -12699,5 +12697,5 @@
       }
       _hitFunc(context) {
-          const width = this.width(), height = this.height(), cornerRadius = this.cornerRadius();
+          var width = this.width(), height = this.height(), cornerRadius = this.cornerRadius();
           context.beginPath();
           if (!cornerRadius) {
@@ -12733,7 +12731,7 @@
        */
       static fromURL(url, callback, onError = null) {
-          const img = Util.createImageElement();
+          var img = Util.createImageElement();
           img.onload = function () {
-              const image = new Image({
+              var image = new Image({
                   image: img,
               });
@@ -12860,5 +12858,5 @@
 
   // constants
-  const ATTR_CHANGE_LIST$2 = [
+  var ATTR_CHANGE_LIST$2 = [
       'fontFamily',
       'fontSize',
@@ -12961,6 +12959,6 @@
       }
       _addListeners(text) {
-          let that = this, n;
-          const func = function () {
+          var that = this, n;
+          var func = function () {
               that._sync();
           };
@@ -12977,5 +12975,5 @@
       }
       _sync() {
-          let text = this.getText(), tag = this.getTag(), width, height, pointerDirection, pointerWidth, x, y, pointerHeight;
+          var text = this.getText(), tag = this.getTag(), width, height, pointerDirection, pointerWidth, x, y, pointerHeight;
           if (text && tag) {
               width = text.width();
@@ -13033,5 +13031,5 @@
   class Tag extends Shape {
       _sceneFunc(context) {
-          const width = this.width(), height = this.height(), pointerDirection = this.pointerDirection(), pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), cornerRadius = this.cornerRadius();
+          var width = this.width(), height = this.height(), pointerDirection = this.pointerDirection(), pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), cornerRadius = this.cornerRadius();
           let topLeft = 0;
           let topRight = 0;
@@ -13085,5 +13083,5 @@
       }
       getSelfRect() {
-          let x = 0, y = 0, pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), direction = this.pointerDirection(), width = this.width(), height = this.height();
+          var x = 0, y = 0, pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), direction = this.pointerDirection(), width = this.width(), height = this.height();
           if (direction === UP) {
               y -= pointerHeight;
@@ -13248,5 +13246,5 @@
   class Rect extends Shape {
       _sceneFunc(context) {
-          const cornerRadius = this.cornerRadius(), width = this.width(), height = this.height();
+          var cornerRadius = this.cornerRadius(), width = this.width(), height = this.height();
           context.beginPath();
           if (!cornerRadius) {
@@ -13380,5 +13378,5 @@
           context.beginPath();
           context.moveTo(points[0].x, points[0].y);
-          for (let n = 1; n < points.length; n++) {
+          for (var n = 1; n < points.length; n++) {
               context.lineTo(points[n].x, points[n].y);
           }
@@ -13390,5 +13388,5 @@
           const radius = this.attrs.radius || 0;
           const points = [];
-          for (let n = 0; n < sides; n++) {
+          for (var n = 0; n < sides; n++) {
               points.push({
                   x: radius * Math.sin((n * 2 * Math.PI) / sides),
@@ -13400,8 +13398,8 @@
       getSelfRect() {
           const points = this._getPoints();
-          let minX = points[0].x;
-          let maxX = points[0].y;
-          let minY = points[0].x;
-          let maxY = points[0].y;
+          var minX = points[0].x;
+          var maxX = points[0].y;
+          var minY = points[0].x;
+          var maxY = points[0].y;
           points.forEach((point) => {
               minX = Math.min(minX, point.x);
@@ -13463,5 +13461,5 @@
   Factory.addGetterSetter(RegularPolygon, 'sides', 0, getNumberValidator());
 
-  const PIx2 = Math.PI * 2;
+  var PIx2 = Math.PI * 2;
   /**
    * Ring constructor
@@ -13735,5 +13733,5 @@
           this.anim = new Animation(() => {
               // if we don't need to redraw layer we should return false
-              const updated = this._updated;
+              var updated = this._updated;
               this._updated = false;
               return updated;
@@ -13756,5 +13754,5 @@
       }
       _sceneFunc(context) {
-          const anim = this.animation(), index = this.frameIndex(), ix4 = index * 4, set = this.animations()[anim], offsets = this.frameOffsets(), x = set[ix4 + 0], y = set[ix4 + 1], width = set[ix4 + 2], height = set[ix4 + 3], image = this.image();
+          var anim = this.animation(), index = this.frameIndex(), ix4 = index * 4, set = this.animations()[anim], offsets = this.frameOffsets(), x = set[ix4 + 0], y = set[ix4 + 1], width = set[ix4 + 2], height = set[ix4 + 3], image = this.image();
           if (this.hasFill() || this.hasStroke()) {
               context.beginPath();
@@ -13765,5 +13763,5 @@
           if (image) {
               if (offsets) {
-                  const offset = offsets[anim], ix2 = index * 2;
+                  var offset = offsets[anim], ix2 = index * 2;
                   context.drawImage(image, x, y, width, height, offset[ix2 + 0], offset[ix2 + 1], width, height);
               }
@@ -13774,9 +13772,9 @@
       }
       _hitFunc(context) {
-          const anim = this.animation(), index = this.frameIndex(), ix4 = index * 4, set = this.animations()[anim], offsets = this.frameOffsets(), width = set[ix4 + 2], height = set[ix4 + 3];
+          var anim = this.animation(), index = this.frameIndex(), ix4 = index * 4, set = this.animations()[anim], offsets = this.frameOffsets(), width = set[ix4 + 2], height = set[ix4 + 3];
           context.beginPath();
           if (offsets) {
-              const offset = offsets[anim];
-              const ix2 = index * 2;
+              var offset = offsets[anim];
+              var ix2 = index * 2;
               context.rect(offset[ix2 + 0], offset[ix2 + 1], width, height);
           }
@@ -13791,5 +13789,5 @@
       }
       _setInterval() {
-          const that = this;
+          var that = this;
           this.interval = setInterval(function () {
               that._updateIndex();
@@ -13805,5 +13803,5 @@
               return;
           }
-          const layer = this.getLayer();
+          var layer = this.getLayer();
           /*
            * animation object has no executable function because
@@ -13835,5 +13833,5 @@
       }
       _updateIndex() {
-          const index = this.frameIndex(), animation = this.animation(), animations = this.animations(), anim = animations[animation], len = anim.length / 4;
+          var index = this.frameIndex(), animation = this.animation(), animations = this.animations(), anim = animations[animation], len = anim.length / 4;
           if (index < len - 1) {
               this.frameIndex(index + 1);
@@ -14074,11 +14072,11 @@
   class Star extends Shape {
       _sceneFunc(context) {
-          const innerRadius = this.innerRadius(), outerRadius = this.outerRadius(), numPoints = this.numPoints();
+          var innerRadius = this.innerRadius(), outerRadius = this.outerRadius(), numPoints = this.numPoints();
           context.beginPath();
           context.moveTo(0, 0 - outerRadius);
-          for (let n = 1; n < numPoints * 2; n++) {
-              const radius = n % 2 === 0 ? outerRadius : innerRadius;
-              const x = radius * Math.sin((n * Math.PI) / numPoints);
-              const y = -1 * radius * Math.cos((n * Math.PI) / numPoints);
+          for (var n = 1; n < numPoints * 2; n++) {
+              var radius = n % 2 === 0 ? outerRadius : innerRadius;
+              var x = radius * Math.sin((n * Math.PI) / numPoints);
+              var y = -1 * radius * Math.cos((n * Math.PI) / numPoints);
               context.lineTo(x, y);
           }
@@ -14147,27 +14145,12 @@
 
   function stringToArray(string) {
-      // Use Unicode-aware splitting
-      return [...string].reduce((acc, char, index, array) => {
-          // Handle emoji sequences (including ZWJ sequences)
-          if (/\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?(?:\u200D\p{Emoji_Presentation})+/u.test(char)) {
-              acc.push(char);
-          }
-          // Handle regional indicator symbols (flags)
-          else if (/\p{Regional_Indicator}{2}/u.test(char + (array[index + 1] || ''))) {
-              acc.push(char + array[index + 1]);
-          }
-          // Handle Indic scripts and other combining characters
-          else if (index > 0 && /\p{Mn}|\p{Me}|\p{Mc}/u.test(char)) {
-              acc[acc.length - 1] += char;
-          }
-          // Handle other characters
-          else {
-              acc.push(char);
-          }
-          return acc;
-      }, []);
+      // we need to use `Array.from` because it can split unicode string correctly
+      // we also can use some regexp magic from lodash:
+      // https://github.com/lodash/lodash/blob/fb1f99d9d90ad177560d771bc5953a435b2dc119/lodash.toarray/index.js#L256
+      // but I decided it is too much code for that small fix
+      return Array.from(string);
   }
   // constants
-  const AUTO = 'auto', 
+  var AUTO = 'auto', 
   //CANVAS = 'canvas',
   CENTER = 'center', INHERIT = 'inherit', JUSTIFY = 'justify', CHANGE_KONVA = 'Change.konva', CONTEXT_2D = '2d', DASH = '-', LEFT = 'left', TEXT = 'text', TEXT_UPPER = 'Text', TOP = 'top', BOTTOM = 'bottom', MIDDLE = 'middle', NORMAL$1 = 'normal', PX_SPACE = 'px ', SPACE = ' ', RIGHT = 'right', RTL = 'rtl', WORD = 'word', CHAR = 'char', NONE = 'none', ELLIPSIS = '…', ATTR_CHANGE_LIST$1 = [
@@ -14204,5 +14187,5 @@
           .join(', ');
   }
-  let dummyContext;
+  var dummyContext;
   function getDummyContext() {
       if (dummyContext) {
@@ -14338,5 +14321,5 @@
           this._partialTextY = 0;
           // update text data for certain attr changes
-          for (let n = 0; n < attrChangeListLen; n++) {
+          for (var n = 0; n < attrChangeListLen; n++) {
               this.on(ATTR_CHANGE_LIST$1[n] + CHANGE_KONVA, this._setTextData);
           }
@@ -14344,14 +14327,14 @@
       }
       _sceneFunc(context) {
-          const textArr = this.textArr, textArrLen = textArr.length;
+          var textArr = this.textArr, textArrLen = textArr.length;
           if (!this.text()) {
               return;
           }
-          let padding = this.padding(), fontSize = this.fontSize(), lineHeightPx = this.lineHeight() * fontSize, verticalAlign = this.verticalAlign(), direction = this.direction(), alignY = 0, align = this.align(), totalWidth = this.getWidth(), letterSpacing = this.letterSpacing(), fill = this.fill(), textDecoration = this.textDecoration(), shouldUnderline = textDecoration.indexOf('underline') !== -1, shouldLineThrough = textDecoration.indexOf('line-through') !== -1, n;
+          var padding = this.padding(), fontSize = this.fontSize(), lineHeightPx = this.lineHeight() * fontSize, verticalAlign = this.verticalAlign(), direction = this.direction(), alignY = 0, align = this.align(), totalWidth = this.getWidth(), letterSpacing = this.letterSpacing(), fill = this.fill(), textDecoration = this.textDecoration(), shouldUnderline = textDecoration.indexOf('underline') !== -1, shouldLineThrough = textDecoration.indexOf('line-through') !== -1, n;
           direction = direction === INHERIT ? context.direction : direction;
-          let translateY = lineHeightPx / 2;
-          let baseline = MIDDLE;
+          var translateY = lineHeightPx / 2;
+          var baseline = MIDDLE;
           if (Konva$2._fixTextRendering) {
-              const metrics = this.measureSize('M'); // Use a sample character to get the ascent
+              var metrics = this.measureSize('M'); // Use a sample character to get the ascent
               baseline = 'alphabetic';
               translateY =
@@ -14391,5 +14374,5 @@
                   context.save();
                   context.beginPath();
-                  const yOffset = Konva$2._fixTextRendering
+                  let yOffset = Konva$2._fixTextRendering
                       ? Math.round(fontSize / 4)
                       : Math.round(fontSize / 2);
@@ -14413,5 +14396,5 @@
                   context.save();
                   context.beginPath();
-                  const yOffset = Konva$2._fixTextRendering ? -Math.round(fontSize / 4) : 0;
+                  let yOffset = Konva$2._fixTextRendering ? -Math.round(fontSize / 4) : 0;
                   context.moveTo(lineTranslateX, translateY + lineTranslateY + yOffset);
                   spacesNumber = text.split(' ').length - 1;
@@ -14434,7 +14417,7 @@
                   //   var words = text.split(' ');
                   spacesNumber = text.split(' ').length - 1;
-                  const array = stringToArray(text);
-                  for (let li = 0; li < array.length; li++) {
-                      const letter = array[li];
+                  var array = stringToArray(text);
+                  for (var li = 0; li < array.length; li++) {
+                      var letter = array[li];
                       // skip justify for the last line
                       if (letter === ' ' && !lastLine && align === JUSTIFY) {
@@ -14468,5 +14451,5 @@
       }
       _hitFunc(context) {
-          const width = this.getWidth(), height = this.getHeight();
+          var width = this.getWidth(), height = this.getHeight();
           context.beginPath();
           context.rect(0, 0, width, height);
@@ -14475,5 +14458,5 @@
       }
       setText(text) {
-          const str = Util._isString(text)
+          var str = Util._isString(text)
               ? text
               : text === null || text === undefined
@@ -14484,9 +14467,9 @@
       }
       getWidth() {
-          const isAuto = this.attrs.width === AUTO || this.attrs.width === undefined;
+          var isAuto = this.attrs.width === AUTO || this.attrs.width === undefined;
           return isAuto ? this.getTextWidth() + this.padding() * 2 : this.attrs.width;
       }
       getHeight() {
-          const isAuto = this.attrs.height === AUTO || this.attrs.height === undefined;
+          var isAuto = this.attrs.height === AUTO || this.attrs.height === undefined;
           return isAuto
               ? this.fontSize() * this.textArr.length * this.lineHeight() +
@@ -14512,10 +14495,10 @@
        * @method
        * @name Konva.Text#measureSize
-       * @param {String} text text to measure
-       * @returns {Object} { width , height } of measured text
+       * @param {String} [text] text to measure
+       * @returns {Object} { width , height} of measured text
        */
       measureSize(text) {
           var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
-          let _context = getDummyContext(), fontSize = this.fontSize(), metrics;
+          var _context = getDummyContext(), fontSize = this.fontSize(), metrics;
           _context.save();
           _context.font = this._getContextFont();
@@ -14555,5 +14538,5 @@
               line = line.trim();
           }
-          const width = this._getTextWidth(line);
+          var width = this._getTextWidth(line);
           return this.textArr.push({
               text: line,
@@ -14563,19 +14546,19 @@
       }
       _getTextWidth(text) {
-          const letterSpacing = this.letterSpacing();
-          const length = text.length;
+          var letterSpacing = this.letterSpacing();
+          var length = text.length;
           return (getDummyContext().measureText(text).width +
               (length ? letterSpacing * (length - 1) : 0));
       }
       _setTextData() {
-          let lines = this.text().split('\n'), fontSize = +this.fontSize(), textWidth = 0, lineHeightPx = this.lineHeight() * fontSize, width = this.attrs.width, height = this.attrs.height, fixedWidth = width !== AUTO && width !== undefined, fixedHeight = height !== AUTO && height !== undefined, padding = this.padding(), maxWidth = width - padding * 2, maxHeightPx = height - padding * 2, currentHeightPx = 0, wrap = this.wrap(), 
+          var lines = this.text().split('\n'), fontSize = +this.fontSize(), textWidth = 0, lineHeightPx = this.lineHeight() * fontSize, width = this.attrs.width, height = this.attrs.height, fixedWidth = width !== AUTO && width !== undefined, fixedHeight = height !== AUTO && height !== undefined, padding = this.padding(), maxWidth = width - padding * 2, maxHeightPx = height - padding * 2, currentHeightPx = 0, wrap = this.wrap(), 
           // align = this.align(),
           shouldWrap = wrap !== NONE, wrapAtWord = wrap !== CHAR && shouldWrap, shouldAddEllipsis = this.ellipsis();
           this.textArr = [];
           getDummyContext().font = this._getContextFont();
-          const additionalWidth = shouldAddEllipsis ? this._getTextWidth(ELLIPSIS) : 0;
-          for (let i = 0, max = lines.length; i < max; ++i) {
-              let line = lines[i];
-              let lineWidth = this._getTextWidth(line);
+          var additionalWidth = shouldAddEllipsis ? this._getTextWidth(ELLIPSIS) : 0;
+          for (var i = 0, max = lines.length; i < max; ++i) {
+              var line = lines[i];
+              var lineWidth = this._getTextWidth(line);
               if (fixedWidth && lineWidth > maxWidth) {
                   /*
@@ -14588,7 +14571,7 @@
                        * that would fit in the specified width
                        */
-                      let low = 0, high = line.length, match = '', matchWidth = 0;
+                      var low = 0, high = line.length, match = '', matchWidth = 0;
                       while (low < high) {
-                          const mid = (low + high) >>> 1, substr = line.slice(0, mid + 1), substrWidth = this._getTextWidth(substr) + additionalWidth;
+                          var mid = (low + high) >>> 1, substr = line.slice(0, mid + 1), substrWidth = this._getTextWidth(substr) + additionalWidth;
                           if (substrWidth <= maxWidth) {
                               low = mid + 1;
@@ -14610,6 +14593,6 @@
                               // try to find a space or dash where wrapping could be done
                               var wrapIndex;
-                              const nextChar = line[match.length];
-                              const nextIsSpaceOrDash = nextChar === SPACE || nextChar === DASH;
+                              var nextChar = line[match.length];
+                              var nextIsSpaceOrDash = nextChar === SPACE || nextChar === DASH;
                               if (nextIsSpaceOrDash && matchWidth <= maxWidth) {
                                   wrapIndex = match.length;
@@ -14633,5 +14616,5 @@
                           textWidth = Math.max(textWidth, matchWidth);
                           currentHeightPx += lineHeightPx;
-                          const shouldHandleEllipsis = this._shouldHandleEllipsis(currentHeightPx);
+                          var shouldHandleEllipsis = this._shouldHandleEllipsis(currentHeightPx);
                           if (shouldHandleEllipsis) {
                               this._tryToAddEllipsisToLastLine();
@@ -14694,16 +14677,16 @@
        */
       _shouldHandleEllipsis(currentHeightPx) {
-          const fontSize = +this.fontSize(), lineHeightPx = this.lineHeight() * fontSize, height = this.attrs.height, fixedHeight = height !== AUTO && height !== undefined, padding = this.padding(), maxHeightPx = height - padding * 2, wrap = this.wrap(), shouldWrap = wrap !== NONE;
+          var fontSize = +this.fontSize(), lineHeightPx = this.lineHeight() * fontSize, height = this.attrs.height, fixedHeight = height !== AUTO && height !== undefined, padding = this.padding(), maxHeightPx = height - padding * 2, wrap = this.wrap(), shouldWrap = wrap !== NONE;
           return (!shouldWrap ||
               (fixedHeight && currentHeightPx + lineHeightPx > maxHeightPx));
       }
       _tryToAddEllipsisToLastLine() {
-          const width = this.attrs.width, fixedWidth = width !== AUTO && width !== undefined, padding = this.padding(), maxWidth = width - padding * 2, shouldAddEllipsis = this.ellipsis();
-          const lastLine = this.textArr[this.textArr.length - 1];
+          var width = this.attrs.width, fixedWidth = width !== AUTO && width !== undefined, padding = this.padding(), maxWidth = width - padding * 2, shouldAddEllipsis = this.ellipsis();
+          var lastLine = this.textArr[this.textArr.length - 1];
           if (!lastLine || !shouldAddEllipsis) {
               return;
           }
           if (fixedWidth) {
-              const haveSpace = this._getTextWidth(lastLine.text + ELLIPSIS) < maxWidth;
+              var haveSpace = this._getTextWidth(lastLine.text + ELLIPSIS) < maxWidth;
               if (!haveSpace) {
                   lastLine.text = lastLine.text.slice(0, lastLine.text.length - 3);
@@ -14979,5 +14962,5 @@
   Factory.addGetterSetter(Text, 'textDecoration', '');
 
-  const EMPTY_STRING = '', NORMAL = 'normal';
+  var EMPTY_STRING = '', NORMAL = 'normal';
   function _fillFunc(context) {
       context.fillText(this.partialText, 0, 0);
@@ -15141,14 +15124,14 @@
           context.setAttr('textAlign', 'left');
           context.save();
-          const textDecoration = this.textDecoration();
-          const fill = this.fill();
-          const fontSize = this.fontSize();
-          const glyphInfo = this.glyphInfo;
+          var textDecoration = this.textDecoration();
+          var fill = this.fill();
+          var fontSize = this.fontSize();
+          var glyphInfo = this.glyphInfo;
           if (textDecoration === 'underline') {
               context.beginPath();
           }
-          for (let i = 0; i < glyphInfo.length; i++) {
+          for (var i = 0; i < glyphInfo.length; i++) {
               context.save();
-              const p0 = glyphInfo[i].p0;
+              var p0 = glyphInfo[i].p0;
               context.translate(p0.x, p0.y);
               context.rotate(glyphInfo[i].rotation);
@@ -15180,11 +15163,11 @@
       _hitFunc(context) {
           context.beginPath();
-          const glyphInfo = this.glyphInfo;
+          var glyphInfo = this.glyphInfo;
           if (glyphInfo.length >= 1) {
-              const p0 = glyphInfo[0].p0;
+              var p0 = glyphInfo[0].p0;
               context.moveTo(p0.x, p0.y);
           }
-          for (let i = 0; i < glyphInfo.length; i++) {
-              const p1 = glyphInfo[i].p1;
+          for (var i = 0; i < glyphInfo.length; i++) {
+              var p1 = glyphInfo[i].p1;
               context.lineTo(p1.x, p1.y);
           }
@@ -15212,9 +15195,9 @@
       }
       _getTextSize(text) {
-          const dummyCanvas = this.dummyCanvas;
-          const _context = dummyCanvas.getContext('2d');
+          var dummyCanvas = this.dummyCanvas;
+          var _context = dummyCanvas.getContext('2d');
           _context.save();
           _context.font = this._getContextFont();
-          const metrics = _context.measureText(text);
+          var metrics = _context.measureText(text);
           _context.restore();
           return {
@@ -15250,5 +15233,5 @@
           // 4. Add glyph width to the offsetToGlyph and repeat
           let offsetToGlyph = offset;
-          for (let i = 0; i < charArr.length; i++) {
+          for (var i = 0; i < charArr.length; i++) {
               const charStartPoint = this._getPointAtLength(offsetToGlyph);
               if (!charStartPoint)
@@ -15298,5 +15281,5 @@
               };
           }
-          const points = [];
+          var points = [];
           this.glyphInfo.forEach(function (info) {
               points.push(info.p0.x);
@@ -15305,10 +15288,10 @@
               points.push(info.p1.y);
           });
-          let minX = points[0] || 0;
-          let maxX = points[0] || 0;
-          let minY = points[1] || 0;
-          let maxY = points[1] || 0;
-          let x, y;
-          for (let i = 0; i < points.length / 2; i++) {
+          var minX = points[0] || 0;
+          var maxX = points[0] || 0;
+          var minY = points[1] || 0;
+          var maxY = points[1] || 0;
+          var x, y;
+          for (var i = 0; i < points.length / 2; i++) {
               x = points[i * 2];
               y = points[i * 2 + 1];
@@ -15318,5 +15301,5 @@
               maxY = Math.max(maxY, y);
           }
-          const fontSize = this.fontSize();
+          var fontSize = this.fontSize();
           return {
               x: minX - fontSize / 2,
@@ -15501,6 +15484,6 @@
   Factory.addGetterSetter(TextPath, 'kerningFunc', null);
 
-  const EVENTS_NAME = 'tr-konva';
-  const ATTR_CHANGE_LIST = [
+  var EVENTS_NAME = 'tr-konva';
+  var ATTR_CHANGE_LIST = [
       'resizeEnabledChange',
       'rotateAnchorOffsetChange',
@@ -15521,6 +15504,6 @@
       .map((e) => e + `.${EVENTS_NAME}`)
       .join(' ');
-  const NODES_RECT = 'nodesRect';
-  const TRANSFORM_CHANGE_STR = [
+  var NODES_RECT = 'nodesRect';
+  var TRANSFORM_CHANGE_STR = [
       'widthChange',
       'heightChange',
@@ -15535,5 +15518,5 @@
       'strokeWidthChange',
   ];
-  const ANGLES = {
+  var ANGLES = {
       'top-left': -45,
       'top-center': 0,
@@ -15551,5 +15534,5 @@
       }
       rad += Util.degToRad(ANGLES[anchorName] || 0);
-      const angle = ((Util.radToDeg(rad) % 360) + 360) % 360;
+      var angle = ((Util.radToDeg(rad) % 360) + 360) % 360;
       if (Util._inRange(angle, 315 + 22.5, 360) || Util._inRange(angle, 0, 22.5)) {
           // TOP
@@ -15590,5 +15573,5 @@
       }
   }
-  const ANCHORS_NAMES = [
+  var ANCHORS_NAMES = [
       'top-left',
       'top-center',
@@ -15600,5 +15583,5 @@
       'bottom-right',
   ];
-  const MAX_SAFE_INTEGER = 100000000;
+  var MAX_SAFE_INTEGER = 100000000;
   function getCenter(shape) {
       return {
@@ -15762,5 +15745,5 @@
           // we may need it if we set node in initial props
           // so elements are not defined yet
-          const elementsCreated = !!this.findOne('.top-left');
+          var elementsCreated = !!this.findOne('.top-left');
           if (elementsCreated) {
               this.update();
@@ -15857,13 +15840,13 @@
       // return absolute rotated bounding rectangle
       __getNodeShape(node, rot = this.rotation(), relative) {
-          const rect = node.getClientRect({
+          var rect = node.getClientRect({
               skipTransform: true,
               skipShadow: true,
               skipStroke: this.ignoreStroke(),
           });
-          const absScale = node.getAbsoluteScale(relative);
-          const absPos = node.getAbsolutePosition(relative);
-          const dx = rect.x * absScale.x - node.offsetX() * absScale.x;
-          const dy = rect.y * absScale.y - node.offsetY() * absScale.y;
+          var absScale = node.getAbsoluteScale(relative);
+          var absPos = node.getAbsolutePosition(relative);
+          var dx = rect.x * absScale.x - node.offsetX() * absScale.x;
+          var dy = rect.y * absScale.y - node.offsetY() * absScale.y;
           const rotation = (Konva$2.getAngle(node.getAbsoluteRotation()) + Math.PI * 2) %
               (Math.PI * 2);
@@ -15882,5 +15865,5 @@
       // returns box + rotation of all shapes
       __getNodeRect() {
-          const node = this.getNode();
+          var node = this.getNode();
           if (!node) {
               return {
@@ -15899,5 +15882,5 @@
                   skipStroke: this.ignoreStroke(),
               });
-              const points = [
+              var points = [
                   { x: box.x, y: box.y },
                   { x: box.x + box.width, y: box.y },
@@ -15905,7 +15888,7 @@
                   { x: box.x, y: box.y + box.height },
               ];
-              const trans = node.getAbsoluteTransform();
+              var trans = node.getAbsoluteTransform();
               points.forEach(function (point) {
-                  const transformed = trans.point(point);
+                  var transformed = trans.point(point);
                   totalPoints.push(transformed);
               });
@@ -15913,7 +15896,7 @@
           const tr = new Transform();
           tr.rotate(-Konva$2.getAngle(this.rotation()));
-          let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
+          var minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
           totalPoints.forEach(function (point) {
-              const transformed = tr.point(point);
+              var transformed = tr.point(point);
               if (minX === undefined) {
                   minX = maxX = transformed.x;
@@ -15963,5 +15946,5 @@
       }
       _createAnchor(name) {
-          const anchor = new Rect({
+          var anchor = new Rect({
               stroke: 'rgb(0, 161, 255)',
               fill: 'white',
@@ -15974,5 +15957,5 @@
               hitStrokeWidth: TOUCH_DEVICE ? 10 : 'auto',
           });
-          const self = this;
+          var self = this;
           anchor.on('mousedown touchstart', function (e) {
               self._handleMouseDown(e);
@@ -15987,7 +15970,7 @@
           // add hover styling
           anchor.on('mouseenter', () => {
-              const rad = Konva$2.getAngle(this.rotation());
-              const rotateCursor = this.rotateAnchorCursor();
-              const cursor = getCursor(name, rad, rotateCursor);
+              var rad = Konva$2.getAngle(this.rotation());
+              var rotateCursor = this.rotateAnchorCursor();
+              var cursor = getCursor(name, rad, rotateCursor);
               anchor.getStage().content &&
                   (anchor.getStage().content.style.cursor = cursor);
@@ -16002,5 +15985,5 @@
       }
       _createBack() {
-          const back = new Shape({
+          var back = new Shape({
               name: 'back',
               width: 0,
@@ -16008,6 +15991,6 @@
               draggable: true,
               sceneFunc(ctx, shape) {
-                  const tr = shape.getParent();
-                  const padding = tr.padding();
+                  var tr = shape.getParent();
+                  var padding = tr.padding();
                   ctx.beginPath();
                   ctx.rect(-padding, -padding, shape.width() + padding * 2, shape.height() + padding * 2);
@@ -16022,5 +16005,5 @@
                       return;
                   }
-                  const padding = this.padding();
+                  var padding = this.padding();
                   ctx.beginPath();
                   ctx.rect(-padding, -padding, shape.width() + padding * 2, shape.height() + padding * 2);
@@ -16054,8 +16037,8 @@
           }
           this._movingAnchorName = e.target.name().split(' ')[0];
-          const attrs = this._getNodeRect();
-          const width = attrs.width;
-          const height = attrs.height;
-          const hypotenuse = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));
+          var attrs = this._getNodeRect();
+          var width = attrs.width;
+          var height = attrs.height;
+          var hypotenuse = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));
           this.sin = Math.abs(height / hypotenuse);
           this.cos = Math.abs(width / hypotenuse);
@@ -16067,6 +16050,6 @@
           }
           this._transforming = true;
-          const ap = e.target.getAbsolutePosition();
-          const pos = e.target.getStage().getPointerPosition();
+          var ap = e.target.getAbsolutePosition();
+          var pos = e.target.getStage().getPointerPosition();
           this._anchorDragOffset = {
               x: pos.x - ap.x,
@@ -16080,7 +16063,7 @@
       }
       _handleMouseMove(e) {
-          let x, y, newHypotenuse;
-          const anchorNode = this.findOne('.' + this._movingAnchorName);
-          const stage = anchorNode.getStage();
+          var x, y, newHypotenuse;
+          var anchorNode = this.findOne('.' + this._movingAnchorName);
+          var stage = anchorNode.getStage();
           stage.setPointersPositions(e);
           const pp = stage.getPointerPosition();
@@ -16101,5 +16084,5 @@
           // rotater is working very differently, so do it first
           if (this._movingAnchorName === 'rotater') {
-              const attrs = this._getNodeRect();
+              var attrs = this._getNodeRect();
               x = anchorNode.x() - attrs.width / 2;
               y = -anchorNode.y() + attrs.height / 2;
@@ -16109,5 +16092,5 @@
                   delta -= Math.PI;
               }
-              const oldRotation = Konva$2.getAngle(this.rotation());
+              var oldRotation = Konva$2.getAngle(this.rotation());
               const newRotation = oldRotation + delta;
               const tol = Konva$2.getAngle(this.rotationSnapTolerance());
@@ -16118,6 +16101,6 @@
               return;
           }
-          const shiftBehavior = this.shiftBehavior();
-          let keepProportion;
+          var shiftBehavior = this.shiftBehavior();
+          var keepProportion;
           if (shiftBehavior === 'inverted') {
               keepProportion = this.keepRatio() && !e.shiftKey;
@@ -16238,10 +16221,10 @@
           var centeredScaling = this.centeredScaling() || e.altKey;
           if (centeredScaling) {
-              const topLeft = this.findOne('.top-left');
-              const bottomRight = this.findOne('.bottom-right');
-              const topOffsetX = topLeft.x();
-              const topOffsetY = topLeft.y();
-              const bottomOffsetX = this.getWidth() - bottomRight.x();
-              const bottomOffsetY = this.getHeight() - bottomRight.y();
+              var topLeft = this.findOne('.top-left');
+              var bottomRight = this.findOne('.bottom-right');
+              var topOffsetX = topLeft.x();
+              var topOffsetY = topLeft.y();
+              var bottomOffsetX = this.getWidth() - bottomRight.x();
+              var bottomOffsetY = this.getHeight() - bottomRight.y();
               bottomRight.move({
                   x: -topOffsetX,
@@ -16253,9 +16236,9 @@
               });
           }
-          const absPos = this.findOne('.top-left').getAbsolutePosition();
+          var absPos = this.findOne('.top-left').getAbsolutePosition();
           x = absPos.x;
           y = absPos.y;
-          const width = this.findOne('.bottom-right').x() - this.findOne('.top-left').x();
-          const height = this.findOne('.bottom-right').y() - this.findOne('.top-left').y();
+          var width = this.findOne('.bottom-right').x() - this.findOne('.top-left').x();
+          var height = this.findOne('.bottom-right').y() - this.findOne('.top-left').y();
           this._fitNodesInto({
               x: x,
@@ -16282,5 +16265,5 @@
                   window.removeEventListener('touchend', this._handleMouseUp, true);
               }
-              const node = this.getNode();
+              var node = this.getNode();
               activeTransformersCount--;
               this._fire('transformend', { evt: e, target: node });
@@ -16299,5 +16282,5 @@
       }
       _fitNodesInto(newAttrs, evt) {
-          const oldAttrs = this._getNodeRect();
+          var oldAttrs = this._getNodeRect();
           const minSize = 1;
           if (Util._inRange(newAttrs.width, -this.padding() * 2 - minSize, minSize)) {
@@ -16309,5 +16292,5 @@
               return;
           }
-          const t = new Transform();
+          var t = new Transform();
           t.rotate(Konva$2.getAngle(this.rotation()));
           if (this._movingAnchorName &&
@@ -16449,12 +16432,12 @@
       update() {
           var _a;
-          const attrs = this._getNodeRect();
+          var attrs = this._getNodeRect();
           this.rotation(Util._getRotation(attrs.rotation));
-          const width = attrs.width;
-          const height = attrs.height;
-          const enabledAnchors = this.enabledAnchors();
-          const resizeEnabled = this.resizeEnabled();
-          const padding = this.padding();
-          const anchorSize = this.anchorSize();
+          var width = attrs.width;
+          var height = attrs.height;
+          var enabledAnchors = this.enabledAnchors();
+          var resizeEnabled = this.resizeEnabled();
+          var padding = this.padding();
+          var anchorSize = this.anchorSize();
           const anchors = this.find('._anchor');
           anchors.forEach((node) => {
@@ -16563,5 +16546,5 @@
           if (this._transforming) {
               this._removeEvents();
-              const anchorNode = this.findOne('.' + this._movingAnchorName);
+              var anchorNode = this.findOne('.' + this._movingAnchorName);
               if (anchorNode) {
                   anchorNode.stopDrag();
@@ -16585,5 +16568,5 @@
       // overwrite clone to NOT use method from Container
       clone(obj) {
-          const node = Node.prototype.clone.call(this, obj);
+          var node = Node.prototype.clone.call(this, obj);
           return node;
       }
@@ -17283,5 +17266,5 @@
       this.next = null;
   }
-  const mul_table = [
+  var mul_table = [
       512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292,
       512, 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292,
@@ -17302,5 +17285,5 @@
       289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259,
   ];
-  const shg_table = [
+  var shg_table = [
       9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17,
       17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19,
@@ -17319,7 +17302,7 @@
   ];
   function filterGaussBlurRGBA(imageData, radius) {
-      const pixels = imageData.data, width = imageData.width, height = imageData.height;
-      let x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum, r_out_sum, g_out_sum, b_out_sum, a_out_sum, r_in_sum, g_in_sum, b_in_sum, a_in_sum, pr, pg, pb, pa, rbs;
-      let div = radius + radius + 1, widthMinus1 = width - 1, heightMinus1 = height - 1, radiusPlus1 = radius + 1, sumFactor = (radiusPlus1 * (radiusPlus1 + 1)) / 2, stackStart = new BlurStack(), stackEnd = null, stack = stackStart, stackIn = null, stackOut = null, mul_sum = mul_table[radius], shg_sum = shg_table[radius];
+      var pixels = imageData.data, width = imageData.width, height = imageData.height;
+      var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum, r_out_sum, g_out_sum, b_out_sum, a_out_sum, r_in_sum, g_in_sum, b_in_sum, a_in_sum, pr, pg, pb, pa, rbs;
+      var div = radius + radius + 1, widthMinus1 = width - 1, heightMinus1 = height - 1, radiusPlus1 = radius + 1, sumFactor = (radiusPlus1 * (radiusPlus1 + 1)) / 2, stackStart = new BlurStack(), stackEnd = null, stack = stackStart, stackIn = null, stackOut = null, mul_sum = mul_table[radius], shg_sum = shg_table[radius];
       for (i = 1; i < div; i++) {
           stack = stack.next = new BlurStack();
@@ -17512,5 +17495,5 @@
    */
   const Blur = function Blur(imageData) {
-      const radius = Math.round(this.blurRadius());
+      var radius = Math.round(this.blurRadius());
       if (radius > 0) {
           filterGaussBlurRGBA(imageData, radius);
@@ -17537,5 +17520,5 @@
    */
   const Brighten = function (imageData) {
-      let brightness = this.brightness() * 255, data = imageData.data, len = data.length, i;
+      var brightness = this.brightness() * 255, data = imageData.data, len = data.length, i;
       for (i = 0; i < len; i += 4) {
           // red
@@ -17569,6 +17552,6 @@
    */
   const Contrast = function (imageData) {
-      const adjust = Math.pow((this.contrast() + 100) / 100, 2);
-      let data = imageData.data, nPixels = data.length, red = 150, green = 150, blue = 150, i;
+      var adjust = Math.pow((this.contrast() + 100) / 100, 2);
+      var data = imageData.data, nPixels = data.length, red = 150, green = 150, blue = 150, i;
       for (i = 0; i < nPixels; i += 4) {
           red = data[i];
@@ -17632,5 +17615,5 @@
       // a max value of greyLevel yields a white emboss, and the min value yields a black
       // emboss.  Therefore, I changed greyLevel to whiteLevel
-      let strength = this.embossStrength() * 10, greyLevel = this.embossWhiteLevel() * 255, direction = this.embossDirection(), blend = this.embossBlend(), dirY = 0, dirX = 0, data = imageData.data, w = imageData.width, h = imageData.height, w4 = w * 4, y = h;
+      var strength = this.embossStrength() * 10, greyLevel = this.embossWhiteLevel() * 255, direction = this.embossDirection(), blend = this.embossBlend(), dirY = 0, dirX = 0, data = imageData.data, w = imageData.width, h = imageData.height, w4 = w * 4, y = h;
       switch (direction) {
           case 'top-left':
@@ -17670,6 +17653,6 @@
       }
       do {
-          const offsetY = (y - 1) * w4;
-          let otherY = dirY;
+          var offsetY = (y - 1) * w4;
+          var otherY = dirY;
           if (y + otherY < 1) {
               otherY = 0;
@@ -17678,9 +17661,9 @@
               otherY = 0;
           }
-          const offsetYOther = (y - 1 + otherY) * w * 4;
-          let x = w;
+          var offsetYOther = (y - 1 + otherY) * w * 4;
+          var x = w;
           do {
-              const offset = offsetY + (x - 1) * 4;
-              let otherX = dirX;
+              var offset = offsetY + (x - 1) * 4;
+              var otherX = dirX;
               if (x + otherX < 1) {
                   otherX = 0;
@@ -17689,12 +17672,12 @@
                   otherX = 0;
               }
-              const offsetOther = offsetYOther + (x - 1 + otherX) * 4;
-              const dR = data[offset] - data[offsetOther];
-              const dG = data[offset + 1] - data[offsetOther + 1];
-              const dB = data[offset + 2] - data[offsetOther + 2];
-              let dif = dR;
-              const absDif = dif > 0 ? dif : -dif;
-              const absG = dG > 0 ? dG : -dG;
-              const absB = dB > 0 ? dB : -dB;
+              var offsetOther = offsetYOther + (x - 1 + otherX) * 4;
+              var dR = data[offset] - data[offsetOther];
+              var dG = data[offset + 1] - data[offsetOther + 1];
+              var dB = data[offset + 2] - data[offsetOther + 2];
+              var dif = dR;
+              var absDif = dif > 0 ? dif : -dif;
+              var absG = dG > 0 ? dG : -dG;
+              var absB = dB > 0 ? dB : -dB;
               if (absG > absDif) {
                   dif = dG;
@@ -17705,7 +17688,7 @@
               dif *= strength;
               if (blend) {
-                  const r = data[offset] + dif;
-                  const g = data[offset + 1] + dif;
-                  const b = data[offset + 2] + dif;
+                  var r = data[offset] + dif;
+                  var g = data[offset + 1] + dif;
+                  var b = data[offset + 2] + dif;
                   data[offset] = r > 255 ? 255 : r < 0 ? 0 : r;
                   data[offset + 1] = g > 255 ? 255 : g < 0 ? 0 : g;
@@ -17713,5 +17696,5 @@
               }
               else {
-                  let grey = greyLevel - dif;
+                  var grey = greyLevel - dif;
                   if (grey < 0) {
                       grey = 0;
@@ -17761,5 +17744,5 @@
   function remap(fromValue, fromMin, fromMax, toMin, toMax) {
       // Compute the range of the data
-      let fromRange = fromMax - fromMin, toRange = toMax - toMin, toValue;
+      var fromRange = fromMax - fromMin, toRange = toMax - toMin, toValue;
       // If either range is 0, then the value can only be mapped to 1 value
       if (fromRange === 0) {
@@ -17789,7 +17772,7 @@
    */
   const Enhance = function (imageData) {
-      let data = imageData.data, nSubPixels = data.length, rMin = data[0], rMax = rMin, r, gMin = data[1], gMax = gMin, g, bMin = data[2], bMax = bMin, b, i;
+      var data = imageData.data, nSubPixels = data.length, rMin = data[0], rMax = rMin, r, gMin = data[1], gMax = gMin, g, bMin = data[2], bMax = bMin, b, i;
       // If we are not enhancing anything - don't do any computation
-      const enhanceAmount = this.enhance();
+      var enhanceAmount = this.enhance();
       if (enhanceAmount === 0) {
           return;
@@ -17835,5 +17818,5 @@
           bMin = 0;
       }
-      let rMid, rGoalMax, rGoalMin, gMid, gGoalMax, gGoalMin, bMid, bGoalMax, bGoalMin;
+      var rMid, rGoalMax, rGoalMin, gMid, gGoalMax, gGoalMin, bMid, bGoalMax, bGoalMin;
       // If the enhancement is positive - stretch the histogram
       if (enhanceAmount > 0) {
@@ -17884,5 +17867,5 @@
    */
   const Grayscale = function (imageData) {
-      let data = imageData.data, len = data.length, i, brightness;
+      var data = imageData.data, len = data.length, i, brightness;
       for (i = 0; i < len; i += 4) {
           brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2];
@@ -17931,5 +17914,5 @@
    */
   const HSL = function (imageData) {
-      let data = imageData.data, nPixels = data.length, v = 1, s = Math.pow(2, this.saturation()), h = Math.abs(this.hue() + 360) % 360, l = this.luminance() * 127, i;
+      var data = imageData.data, nPixels = data.length, v = 1, s = Math.pow(2, this.saturation()), h = Math.abs(this.hue() + 360) % 360, l = this.luminance() * 127, i;
       // Basis for the technique used:
       // http://beesbuzz.biz/code/hsv_color_transforms.php
@@ -17943,10 +17926,10 @@
       //[ .299V-.300vsu+1.25vsw    .587V-.588vsu-1.05vsw    .114V+.886vsu-.203vsw ] [B]
       // Precompute the values in the matrix:
-      const vsu = v * s * Math.cos((h * Math.PI) / 180), vsw = v * s * Math.sin((h * Math.PI) / 180);
+      var vsu = v * s * Math.cos((h * Math.PI) / 180), vsw = v * s * Math.sin((h * Math.PI) / 180);
       // (result spot)(source spot)
-      const rr = 0.299 * v + 0.701 * vsu + 0.167 * vsw, rg = 0.587 * v - 0.587 * vsu + 0.33 * vsw, rb = 0.114 * v - 0.114 * vsu - 0.497 * vsw;
-      const gr = 0.299 * v - 0.299 * vsu - 0.328 * vsw, gg = 0.587 * v + 0.413 * vsu + 0.035 * vsw, gb = 0.114 * v - 0.114 * vsu + 0.293 * vsw;
-      const br = 0.299 * v - 0.3 * vsu + 1.25 * vsw, bg = 0.587 * v - 0.586 * vsu - 1.05 * vsw, bb = 0.114 * v + 0.886 * vsu - 0.2 * vsw;
-      let r, g, b, a;
+      var rr = 0.299 * v + 0.701 * vsu + 0.167 * vsw, rg = 0.587 * v - 0.587 * vsu + 0.33 * vsw, rb = 0.114 * v - 0.114 * vsu - 0.497 * vsw;
+      var gr = 0.299 * v - 0.299 * vsu - 0.328 * vsw, gg = 0.587 * v + 0.413 * vsu + 0.035 * vsw, gb = 0.114 * v - 0.114 * vsu + 0.293 * vsw;
+      var br = 0.299 * v - 0.3 * vsu + 1.25 * vsw, bg = 0.587 * v - 0.586 * vsu - 1.05 * vsw, bb = 0.114 * v + 0.886 * vsu - 0.2 * vsw;
+      var r, g, b, a;
       for (i = 0; i < nPixels; i += 4) {
           r = data[i + 0];
@@ -17973,5 +17956,5 @@
    */
   const HSV = function (imageData) {
-      const data = imageData.data, nPixels = data.length, v = Math.pow(2, this.value()), s = Math.pow(2, this.saturation()), h = Math.abs(this.hue() + 360) % 360;
+      var data = imageData.data, nPixels = data.length, v = Math.pow(2, this.value()), s = Math.pow(2, this.saturation()), h = Math.abs(this.hue() + 360) % 360, i;
       // Basis for the technique used:
       // http://beesbuzz.biz/code/hsv_color_transforms.php
@@ -17985,11 +17968,11 @@
       //[ .299V-.300vsu+1.25vsw    .587V-.588vsu-1.05vsw    .114V+.886vsu-.203vsw ] [B]
       // Precompute the values in the matrix:
-      const vsu = v * s * Math.cos((h * Math.PI) / 180), vsw = v * s * Math.sin((h * Math.PI) / 180);
+      var vsu = v * s * Math.cos((h * Math.PI) / 180), vsw = v * s * Math.sin((h * Math.PI) / 180);
       // (result spot)(source spot)
-      const rr = 0.299 * v + 0.701 * vsu + 0.167 * vsw, rg = 0.587 * v - 0.587 * vsu + 0.33 * vsw, rb = 0.114 * v - 0.114 * vsu - 0.497 * vsw;
-      const gr = 0.299 * v - 0.299 * vsu - 0.328 * vsw, gg = 0.587 * v + 0.413 * vsu + 0.035 * vsw, gb = 0.114 * v - 0.114 * vsu + 0.293 * vsw;
-      const br = 0.299 * v - 0.3 * vsu + 1.25 * vsw, bg = 0.587 * v - 0.586 * vsu - 1.05 * vsw, bb = 0.114 * v + 0.886 * vsu - 0.2 * vsw;
-      let r, g, b, a;
-      for (let i = 0; i < nPixels; i += 4) {
+      var rr = 0.299 * v + 0.701 * vsu + 0.167 * vsw, rg = 0.587 * v - 0.587 * vsu + 0.33 * vsw, rb = 0.114 * v - 0.114 * vsu - 0.497 * vsw;
+      var gr = 0.299 * v - 0.299 * vsu - 0.328 * vsw, gg = 0.587 * v + 0.413 * vsu + 0.035 * vsw, gb = 0.114 * v - 0.114 * vsu + 0.293 * vsw;
+      var br = 0.299 * v - 0.3 * vsu + 1.25 * vsw, bg = 0.587 * v - 0.586 * vsu - 1.05 * vsw, bb = 0.114 * v + 0.886 * vsu - 0.2 * vsw;
+      var r, g, b, a;
+      for (i = 0; i < nPixels; i += 4) {
           r = data[i + 0];
           g = data[i + 1];
@@ -18037,5 +18020,5 @@
    */
   const Invert = function (imageData) {
-      let data = imageData.data, len = data.length, i;
+      var data = imageData.data, len = data.length, i;
       for (i = 0; i < len; i += 4) {
           // red
@@ -18063,8 +18046,8 @@
    *  default is in the middle
    */
-  const ToPolar = function (src, dst, opt) {
-      let srcPixels = src.data, dstPixels = dst.data, xSize = src.width, ySize = src.height, xMid = opt.polarCenterX || xSize / 2, yMid = opt.polarCenterY || ySize / 2, i, x, y, r = 0, g = 0, b = 0, a = 0;
+  var ToPolar = function (src, dst, opt) {
+      var srcPixels = src.data, dstPixels = dst.data, xSize = src.width, ySize = src.height, xMid = opt.polarCenterX || xSize / 2, yMid = opt.polarCenterY || ySize / 2, i, x, y, r = 0, g = 0, b = 0, a = 0;
       // Find the largest radius
-      let rad, rMax = Math.sqrt(xMid * xMid + yMid * yMid);
+      var rad, rMax = Math.sqrt(xMid * xMid + yMid * yMid);
       x = xSize - xMid;
       y = ySize - yMid;
@@ -18072,8 +18055,8 @@
       rMax = rad > rMax ? rad : rMax;
       // We'll be uisng y as the radius, and x as the angle (theta=t)
-      let rSize = ySize, tSize = xSize, radius, theta;
+      var rSize = ySize, tSize = xSize, radius, theta;
       // We want to cover all angles (0-360) and we need to convert to
       // radians (*PI/180)
-      let conversion = ((360 / tSize) * Math.PI) / 180, sin, cos;
+      var conversion = ((360 / tSize) * Math.PI) / 180, sin, cos;
       // var x1, x2, x1i, x2i, y1, y2, y1i, y2i, scale;
       for (theta = 0; theta < tSize; theta += 1) {
@@ -18114,8 +18097,8 @@
    *  0 is no rotation, 360 degrees is a full rotation
    */
-  const FromPolar = function (src, dst, opt) {
-      let srcPixels = src.data, dstPixels = dst.data, xSize = src.width, ySize = src.height, xMid = opt.polarCenterX || xSize / 2, yMid = opt.polarCenterY || ySize / 2, i, x, y, dx, dy, r = 0, g = 0, b = 0, a = 0;
+  var FromPolar = function (src, dst, opt) {
+      var srcPixels = src.data, dstPixels = dst.data, xSize = src.width, ySize = src.height, xMid = opt.polarCenterX || xSize / 2, yMid = opt.polarCenterY || ySize / 2, i, x, y, dx, dy, r = 0, g = 0, b = 0, a = 0;
       // Find the largest radius
-      let rad, rMax = Math.sqrt(xMid * xMid + yMid * yMid);
+      var rad, rMax = Math.sqrt(xMid * xMid + yMid * yMid);
       x = xSize - xMid;
       y = ySize - yMid;
@@ -18123,10 +18106,10 @@
       rMax = rad > rMax ? rad : rMax;
       // We'll be uisng x as the radius, and y as the angle (theta=t)
-      let rSize = ySize, tSize = xSize, radius, theta, phaseShift = 0;
+      var rSize = ySize, tSize = xSize, radius, theta, phaseShift = 0;
       // We need to convert to degrees and we need to make sure
       // it's between (0-360)
       // var conversion = tSize/360*180/Math.PI;
       //var conversion = tSize/360*180/Math.PI;
-      let x1, y1;
+      var x1, y1;
       for (x = 0; x < xSize; x += 1) {
           for (y = 0; y < ySize; y += 1) {
@@ -18168,17 +18151,17 @@
    */
   const Kaleidoscope = function (imageData) {
-      const xSize = imageData.width, ySize = imageData.height;
-      let x, y, xoff, i, r, g, b, a, srcPos, dstPos;
-      let power = Math.round(this.kaleidoscopePower());
-      const angle = Math.round(this.kaleidoscopeAngle());
-      const offset = Math.floor((xSize * (angle % 360)) / 360);
+      var xSize = imageData.width, ySize = imageData.height;
+      var x, y, xoff, i, r, g, b, a, srcPos, dstPos;
+      var power = Math.round(this.kaleidoscopePower());
+      var angle = Math.round(this.kaleidoscopeAngle());
+      var offset = Math.floor((xSize * (angle % 360)) / 360);
       if (power < 1) {
           return;
       }
       // Work with our shared buffer canvas
-      const tempCanvas = Util.createCanvasElement();
+      var tempCanvas = Util.createCanvasElement();
       tempCanvas.width = xSize;
       tempCanvas.height = ySize;
-      const scratchData = tempCanvas
+      var scratchData = tempCanvas
           .getContext('2d')
           .getImageData(0, 0, xSize, ySize);
@@ -18191,5 +18174,5 @@
       // Determine how big each section will be, if it's too small
       // make it bigger
-      let minSectionSize = xSize / Math.pow(2, power);
+      var minSectionSize = xSize / Math.pow(2, power);
       while (minSectionSize <= 8) {
           minSectionSize = minSectionSize * 2;
@@ -18197,9 +18180,9 @@
       }
       minSectionSize = Math.ceil(minSectionSize);
-      let sectionSize = minSectionSize;
+      var sectionSize = minSectionSize;
       // Copy the offset region to 0
       // Depending on the size of filter and location of the offset we may need
       // to copy the section backwards to prevent it from rewriting itself
-      let xStart = 0, xEnd = sectionSize, xDelta = 1;
+      var xStart = 0, xEnd = sectionSize, xDelta = 1;
       if (offset + minSectionSize > xSize) {
           xStart = sectionSize;
@@ -18262,6 +18245,6 @@
 
   function pixelAt(idata, x, y) {
-      let idx = (y * idata.width + x) * 4;
-      const d = [];
+      var idx = (y * idata.width + x) * 4;
+      var d = [];
       d.push(idata.data[idx++], idata.data[idx++], idata.data[idx++], idata.data[idx++]);
       return d;
@@ -18273,6 +18256,6 @@
   }
   function rgbMean(pTab) {
-      const m = [0, 0, 0];
-      for (let i = 0; i < pTab.length; i++) {
+      var m = [0, 0, 0];
+      for (var i = 0; i < pTab.length; i++) {
           m[0] += pTab[i][0];
           m[1] += pTab[i][1];
@@ -18285,9 +18268,9 @@
   }
   function backgroundMask(idata, threshold) {
-      const rgbv_no = pixelAt(idata, 0, 0);
-      const rgbv_ne = pixelAt(idata, idata.width - 1, 0);
-      const rgbv_so = pixelAt(idata, 0, idata.height - 1);
-      const rgbv_se = pixelAt(idata, idata.width - 1, idata.height - 1);
-      const thres = threshold || 10;
+      var rgbv_no = pixelAt(idata, 0, 0);
+      var rgbv_ne = pixelAt(idata, idata.width - 1, 0);
+      var rgbv_so = pixelAt(idata, 0, idata.height - 1);
+      var rgbv_se = pixelAt(idata, idata.width - 1, idata.height - 1);
+      var thres = threshold || 10;
       if (rgbDistance(rgbv_no, rgbv_ne) < thres &&
           rgbDistance(rgbv_ne, rgbv_se) < thres &&
@@ -18295,9 +18278,9 @@
           rgbDistance(rgbv_so, rgbv_no) < thres) {
           // Mean color
-          const mean = rgbMean([rgbv_ne, rgbv_no, rgbv_se, rgbv_so]);
+          var mean = rgbMean([rgbv_ne, rgbv_no, rgbv_se, rgbv_so]);
           // Mask based on color distance
-          const mask = [];
-          for (let i = 0; i < idata.width * idata.height; i++) {
-              const d = rgbDistance(mean, [
+          var mask = [];
+          for (var i = 0; i < idata.width * idata.height; i++) {
+              var d = rgbDistance(mean, [
                   idata.data[i * 4],
                   idata.data[i * 4 + 1],
@@ -18310,24 +18293,24 @@
   }
   function applyMask(idata, mask) {
-      for (let i = 0; i < idata.width * idata.height; i++) {
+      for (var i = 0; i < idata.width * idata.height; i++) {
           idata.data[4 * i + 3] = mask[i];
       }
   }
   function erodeMask(mask, sw, sh) {
-      const weights = [1, 1, 1, 1, 0, 1, 1, 1, 1];
-      const side = Math.round(Math.sqrt(weights.length));
-      const halfSide = Math.floor(side / 2);
-      const maskResult = [];
-      for (let y = 0; y < sh; y++) {
-          for (let x = 0; x < sw; x++) {
-              const so = y * sw + x;
-              let a = 0;
-              for (let cy = 0; cy < side; cy++) {
-                  for (let cx = 0; cx < side; cx++) {
-                      const scy = y + cy - halfSide;
-                      const scx = x + cx - halfSide;
+      var weights = [1, 1, 1, 1, 0, 1, 1, 1, 1];
+      var side = Math.round(Math.sqrt(weights.length));
+      var halfSide = Math.floor(side / 2);
+      var maskResult = [];
+      for (var y = 0; y < sh; y++) {
+          for (var x = 0; x < sw; x++) {
+              var so = y * sw + x;
+              var a = 0;
+              for (var cy = 0; cy < side; cy++) {
+                  for (var cx = 0; cx < side; cx++) {
+                      var scy = y + cy - halfSide;
+                      var scx = x + cx - halfSide;
                       if (scy >= 0 && scy < sh && scx >= 0 && scx < sw) {
-                          const srcOff = scy * sw + scx;
-                          const wt = weights[cy * side + cx];
+                          var srcOff = scy * sw + scx;
+                          var wt = weights[cy * side + cx];
                           a += mask[srcOff] * wt;
                       }
@@ -18340,19 +18323,19 @@
   }
   function dilateMask(mask, sw, sh) {
-      const weights = [1, 1, 1, 1, 1, 1, 1, 1, 1];
-      const side = Math.round(Math.sqrt(weights.length));
-      const halfSide = Math.floor(side / 2);
-      const maskResult = [];
-      for (let y = 0; y < sh; y++) {
-          for (let x = 0; x < sw; x++) {
-              const so = y * sw + x;
-              let a = 0;
-              for (let cy = 0; cy < side; cy++) {
-                  for (let cx = 0; cx < side; cx++) {
-                      const scy = y + cy - halfSide;
-                      const scx = x + cx - halfSide;
+      var weights = [1, 1, 1, 1, 1, 1, 1, 1, 1];
+      var side = Math.round(Math.sqrt(weights.length));
+      var halfSide = Math.floor(side / 2);
+      var maskResult = [];
+      for (var y = 0; y < sh; y++) {
+          for (var x = 0; x < sw; x++) {
+              var so = y * sw + x;
+              var a = 0;
+              for (var cy = 0; cy < side; cy++) {
+                  for (var cx = 0; cx < side; cx++) {
+                      var scy = y + cy - halfSide;
+                      var scx = x + cx - halfSide;
                       if (scy >= 0 && scy < sh && scx >= 0 && scx < sw) {
-                          const srcOff = scy * sw + scx;
-                          const wt = weights[cy * side + cx];
+                          var srcOff = scy * sw + scx;
+                          var wt = weights[cy * side + cx];
                           a += mask[srcOff] * wt;
                       }
@@ -18365,19 +18348,19 @@
   }
   function smoothEdgeMask(mask, sw, sh) {
-      const weights = [1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9];
-      const side = Math.round(Math.sqrt(weights.length));
-      const halfSide = Math.floor(side / 2);
-      const maskResult = [];
-      for (let y = 0; y < sh; y++) {
-          for (let x = 0; x < sw; x++) {
-              const so = y * sw + x;
-              let a = 0;
-              for (let cy = 0; cy < side; cy++) {
-                  for (let cx = 0; cx < side; cx++) {
-                      const scy = y + cy - halfSide;
-                      const scx = x + cx - halfSide;
+      var weights = [1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9];
+      var side = Math.round(Math.sqrt(weights.length));
+      var halfSide = Math.floor(side / 2);
+      var maskResult = [];
+      for (var y = 0; y < sh; y++) {
+          for (var x = 0; x < sw; x++) {
+              var so = y * sw + x;
+              var a = 0;
+              for (var cy = 0; cy < side; cy++) {
+                  for (var cx = 0; cx < side; cx++) {
+                      var scy = y + cy - halfSide;
+                      var scx = x + cx - halfSide;
                       if (scy >= 0 && scy < sh && scx >= 0 && scx < sw) {
-                          const srcOff = scy * sw + scx;
-                          const wt = weights[cy * side + cx];
+                          var srcOff = scy * sw + scx;
+                          var wt = weights[cy * side + cx];
                           a += mask[srcOff] * wt;
                       }
@@ -18402,5 +18385,5 @@
   const Mask = function (imageData) {
       // Detect pixels close to the background color
-      let threshold = this.threshold(), mask = backgroundMask(imageData, threshold);
+      var threshold = this.threshold(), mask = backgroundMask(imageData, threshold);
       if (mask) {
           // Erode
@@ -18430,6 +18413,6 @@
    */
   const Noise = function (imageData) {
-      const amount = this.noise() * 255, data = imageData.data, nPixels = data.length, half = amount / 2;
-      for (let i = 0; i < nPixels; i += 4) {
+      var amount = this.noise() * 255, data = imageData.data, nPixels = data.length, half = amount / 2, i;
+      for (i = 0; i < nPixels; i += 4) {
           data[i + 0] += half - 2 * half * Math.random();
           data[i + 1] += half - 2 * half * Math.random();
@@ -18446,4 +18429,5 @@
    */
 
+  /*eslint-disable max-depth */
   /**
    * Pixelate Filter. Averages groups of pixels and redraws
@@ -18460,5 +18444,5 @@
    */
   const Pixelate = function (imageData) {
-      let pixelSize = Math.ceil(this.pixelSize()), width = imageData.width, height = imageData.height, x, y, i, 
+      var pixelSize = Math.ceil(this.pixelSize()), width = imageData.width, height = imageData.height, x, y, i, 
       //pixelsPerBin = pixelSize * pixelSize,
       red, green, blue, alpha, nBinsX = Math.ceil(width / pixelSize), nBinsY = Math.ceil(height / pixelSize), xBinStart, xBinEnd, yBinStart, yBinEnd, xBin, yBin, pixelsInBin, data = imageData.data;
@@ -18546,5 +18530,5 @@
   const Posterize = function (imageData) {
       // level must be between 1 and 255
-      let levels = Math.round(this.levels() * 254) + 1, data = imageData.data, len = data.length, scale = 255 / levels, i;
+      var levels = Math.round(this.levels() * 254) + 1, data = imageData.data, len = data.length, scale = 255 / levels, i;
       for (i = 0; i < len; i += 1) {
           data[i] = Math.floor(data[i] / scale) * scale;
@@ -18574,5 +18558,5 @@
    */
   const RGB = function (imageData) {
-      let data = imageData.data, nPixels = data.length, red = this.red(), green = this.green(), blue = this.blue(), i, brightness;
+      var data = imageData.data, nPixels = data.length, red = this.red(), green = this.green(), blue = this.blue(), i, brightness;
       for (i = 0; i < nPixels; i += 4) {
           brightness =
@@ -18649,7 +18633,7 @@
    */
   const RGBA = function (imageData) {
-      const data = imageData.data, nPixels = data.length, red = this.red(), green = this.green(), blue = this.blue(), alpha = this.alpha();
-      for (let i = 0; i < nPixels; i += 4) {
-          const ia = 1 - alpha;
+      var data = imageData.data, nPixels = data.length, red = this.red(), green = this.green(), blue = this.blue(), alpha = this.alpha(), i, ia;
+      for (i = 0; i < nPixels; i += 4) {
+          ia = 1 - alpha;
           data[i] = red * alpha + data[i] * ia; // r
           data[i + 1] = green * alpha + data[i + 1] * ia; // g
@@ -18738,5 +18722,5 @@
    */
   const Sepia = function (imageData) {
-      let data = imageData.data, nPixels = data.length, i, r, g, b;
+      var data = imageData.data, nPixels = data.length, i, r, g, b;
       for (i = 0; i < nPixels; i += 4) {
           r = data[i + 0];
@@ -18763,14 +18747,13 @@
    */
   const Solarize = function (imageData) {
-      const data = imageData.data, w = imageData.width, h = imageData.height, w4 = w * 4;
-      let y = h;
+      var data = imageData.data, w = imageData.width, h = imageData.height, w4 = w * 4, y = h;
       do {
-          const offsetY = (y - 1) * w4;
-          let x = w;
+          var offsetY = (y - 1) * w4;
+          var x = w;
           do {
-              const offset = offsetY + (x - 1) * 4;
-              let r = data[offset];
-              let g = data[offset + 1];
-              let b = data[offset + 2];
+              var offset = offsetY + (x - 1) * 4;
+              var r = data[offset];
+              var g = data[offset + 1];
+              var b = data[offset + 2];
               if (r > 127) {
                   r = 255 - r;
@@ -18804,6 +18787,6 @@
    */
   const Threshold = function (imageData) {
-      const level = this.threshold() * 255, data = imageData.data, len = data.length;
-      for (let i = 0; i < len; i += 1) {
+      var level = this.threshold() * 255, data = imageData.data, len = data.length, i;
+      for (i = 0; i < len; i += 1) {
           data[i] = data[i] < level ? 0 : 255;
       }
Index: imaps-frontend/node_modules/konva/konva.min.js
===================================================================
--- imaps-frontend/node_modules/konva/konva.min.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/konva.min.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -1,8 +1,8 @@
 !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Konva=e()}(this,(function(){"use strict";
 /*
-   * Konva JavaScript Framework v9.3.16
+   * Konva JavaScript Framework v9.3.14
    * http://konvajs.org/
    * Licensed under the MIT
-   * Date: Mon Oct 21 2024
+   * Date: Tue Jul 16 2024
    *
    * Original work Copyright (C) 2011 - 2013 by Eric Rowell (KineticJS)
@@ -10,3 +10,3 @@
    *
    * @license
-   */const t=Math.PI/180;const e="undefined"!=typeof global?global:"undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope?self:{},i={_global:e,version:"9.3.16",isBrowser:"undefined"!=typeof window&&("[object Window]"==={}.toString.call(window)||"[object global]"==={}.toString.call(window)),isUnminified:/param/.test(function(t){}.toString()),dblClickWindow:400,getAngle:e=>i.angleDeg?e*t:e,enableTrace:!1,pointerEventsEnabled:!0,autoDrawEnabled:!0,hitOnDragEnabled:!1,capturePointerEventsEnabled:!1,_mouseListenClick:!1,_touchListenClick:!1,_pointerListenClick:!1,_mouseInDblClickWindow:!1,_touchInDblClickWindow:!1,_pointerInDblClickWindow:!1,_mouseDblClickPointerId:null,_touchDblClickPointerId:null,_pointerDblClickPointerId:null,_fixTextRendering:!1,pixelRatio:"undefined"!=typeof window&&window.devicePixelRatio||1,dragDistance:3,angleDeg:!0,showWarnings:!0,dragButtons:[0,1],isDragging:()=>i.DD.isDragging,isTransforming(){var t;return null===(t=i.Transformer)||void 0===t?void 0:t.isTransforming()},isDragReady:()=>!!i.DD.node,releaseCanvasOnDestroy:!0,document:e.document,_injectGlobal(t){e.Konva=t}},n=t=>{i[t.prototype.getClassName()]=t};i._injectGlobal(i);class s{constructor(t=[1,0,0,1,0,0]){this.dirty=!1,this.m=t&&t.slice()||[1,0,0,1,0,0]}reset(){this.m[0]=1,this.m[1]=0,this.m[2]=0,this.m[3]=1,this.m[4]=0,this.m[5]=0}copy(){return new s(this.m)}copyInto(t){t.m[0]=this.m[0],t.m[1]=this.m[1],t.m[2]=this.m[2],t.m[3]=this.m[3],t.m[4]=this.m[4],t.m[5]=this.m[5]}point(t){const e=this.m;return{x:e[0]*t.x+e[2]*t.y+e[4],y:e[1]*t.x+e[3]*t.y+e[5]}}translate(t,e){return this.m[4]+=this.m[0]*t+this.m[2]*e,this.m[5]+=this.m[1]*t+this.m[3]*e,this}scale(t,e){return this.m[0]*=t,this.m[1]*=t,this.m[2]*=e,this.m[3]*=e,this}rotate(t){const e=Math.cos(t),i=Math.sin(t),n=this.m[0]*e+this.m[2]*i,s=this.m[1]*e+this.m[3]*i,r=this.m[0]*-i+this.m[2]*e,a=this.m[1]*-i+this.m[3]*e;return this.m[0]=n,this.m[1]=s,this.m[2]=r,this.m[3]=a,this}getTranslation(){return{x:this.m[4],y:this.m[5]}}skew(t,e){const i=this.m[0]+this.m[2]*e,n=this.m[1]+this.m[3]*e,s=this.m[2]+this.m[0]*t,r=this.m[3]+this.m[1]*t;return this.m[0]=i,this.m[1]=n,this.m[2]=s,this.m[3]=r,this}multiply(t){const e=this.m[0]*t.m[0]+this.m[2]*t.m[1],i=this.m[1]*t.m[0]+this.m[3]*t.m[1],n=this.m[0]*t.m[2]+this.m[2]*t.m[3],s=this.m[1]*t.m[2]+this.m[3]*t.m[3],r=this.m[0]*t.m[4]+this.m[2]*t.m[5]+this.m[4],a=this.m[1]*t.m[4]+this.m[3]*t.m[5]+this.m[5];return this.m[0]=e,this.m[1]=i,this.m[2]=n,this.m[3]=s,this.m[4]=r,this.m[5]=a,this}invert(){const t=1/(this.m[0]*this.m[3]-this.m[1]*this.m[2]),e=this.m[3]*t,i=-this.m[1]*t,n=-this.m[2]*t,s=this.m[0]*t,r=t*(this.m[2]*this.m[5]-this.m[3]*this.m[4]),a=t*(this.m[1]*this.m[4]-this.m[0]*this.m[5]);return this.m[0]=e,this.m[1]=i,this.m[2]=n,this.m[3]=s,this.m[4]=r,this.m[5]=a,this}getMatrix(){return this.m}decompose(){const t=this.m[0],e=this.m[1],i=this.m[2],n=this.m[3],s=t*n-e*i,r={x:this.m[4],y:this.m[5],rotation:0,scaleX:0,scaleY:0,skewX:0,skewY:0};if(0!=t||0!=e){const a=Math.sqrt(t*t+e*e);r.rotation=e>0?Math.acos(t/a):-Math.acos(t/a),r.scaleX=a,r.scaleY=s/a,r.skewX=(t*i+e*n)/s,r.skewY=0}else if(0!=i||0!=n){const a=Math.sqrt(i*i+n*n);r.rotation=Math.PI/2-(n>0?Math.acos(-i/a):-Math.acos(i/a)),r.scaleX=s/a,r.scaleY=a,r.skewX=0,r.skewY=(t*i+e*n)/s}return r.rotation=g._getRotation(r.rotation),r}}let r=Math.PI/180,a=180/Math.PI,o="Konva error: ",h={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,132,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,255,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,203],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[119,128,144],slategrey:[119,128,144],snow:[255,255,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],transparent:[255,255,255,0],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,5]},l=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/,d=[];const c="undefined"!=typeof requestAnimationFrame&&requestAnimationFrame||function(t){setTimeout(t,60)},g={_isElement:t=>!(!t||1!=t.nodeType),_isFunction:t=>!!(t&&t.constructor&&t.call&&t.apply),_isPlainObject:t=>!!t&&t.constructor===Object,_isArray:t=>"[object Array]"===Object.prototype.toString.call(t),_isNumber:t=>"[object Number]"===Object.prototype.toString.call(t)&&!isNaN(t)&&isFinite(t),_isString:t=>"[object String]"===Object.prototype.toString.call(t),_isBoolean:t=>"[object Boolean]"===Object.prototype.toString.call(t),isObject:t=>t instanceof Object,isValidSelector(t){if("string"!=typeof t)return!1;const e=t[0];return"#"===e||"."===e||e===e.toUpperCase()},_sign:t=>0===t||t>0?1:-1,requestAnimFrame(t){d.push(t),1===d.length&&c((function(){const t=d;d=[],t.forEach((function(t){t()}))}))},createCanvasElement(){const t=document.createElement("canvas");try{t.style=t.style||{}}catch(t){}return t},createImageElement:()=>document.createElement("img"),_isInDocument(t){for(;t=t.parentNode;)if(t==document)return!0;return!1},_urlToImage(t,e){const i=g.createImageElement();i.onload=function(){e(i)},i.src=t},_rgbToHex:(t,e,i)=>((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1),_hexToRgb(t){t=t.replace("#","");const e=parseInt(t,16);return{r:e>>16&255,g:e>>8&255,b:255&e}},getRandomColor(){let t=(16777215*Math.random()|0).toString(16);for(;t.length<6;)t="0"+t;return"#"+t},getRGB(t){let e;return t in h?(e=h[t],{r:e[0],g:e[1],b:e[2]}):"#"===t[0]?this._hexToRgb(t.substring(1)):"rgb("===t.substr(0,4)?(e=l.exec(t.replace(/ /g,"")),{r:parseInt(e[1],10),g:parseInt(e[2],10),b:parseInt(e[3],10)}):{r:0,g:0,b:0}},colorToRGBA:t=>(t=t||"black",g._namedColorToRBA(t)||g._hex3ColorToRGBA(t)||g._hex4ColorToRGBA(t)||g._hex6ColorToRGBA(t)||g._hex8ColorToRGBA(t)||g._rgbColorToRGBA(t)||g._rgbaColorToRGBA(t)||g._hslColorToRGBA(t)),_namedColorToRBA(t){const e=h[t.toLowerCase()];return e?{r:e[0],g:e[1],b:e[2],a:1}:null},_rgbColorToRGBA(t){if(0===t.indexOf("rgb(")){const e=(t=t.match(/rgb\(([^)]+)\)/)[1]).split(/ *, */).map(Number);return{r:e[0],g:e[1],b:e[2],a:1}}},_rgbaColorToRGBA(t){if(0===t.indexOf("rgba(")){const e=(t=t.match(/rgba\(([^)]+)\)/)[1]).split(/ *, */).map(((t,e)=>"%"===t.slice(-1)?3===e?parseInt(t)/100:parseInt(t)/100*255:Number(t)));return{r:e[0],g:e[1],b:e[2],a:e[3]}}},_hex8ColorToRGBA(t){if("#"===t[0]&&9===t.length)return{r:parseInt(t.slice(1,3),16),g:parseInt(t.slice(3,5),16),b:parseInt(t.slice(5,7),16),a:parseInt(t.slice(7,9),16)/255}},_hex6ColorToRGBA(t){if("#"===t[0]&&7===t.length)return{r:parseInt(t.slice(1,3),16),g:parseInt(t.slice(3,5),16),b:parseInt(t.slice(5,7),16),a:1}},_hex4ColorToRGBA(t){if("#"===t[0]&&5===t.length)return{r:parseInt(t[1]+t[1],16),g:parseInt(t[2]+t[2],16),b:parseInt(t[3]+t[3],16),a:parseInt(t[4]+t[4],16)/255}},_hex3ColorToRGBA(t){if("#"===t[0]&&4===t.length)return{r:parseInt(t[1]+t[1],16),g:parseInt(t[2]+t[2],16),b:parseInt(t[3]+t[3],16),a:1}},_hslColorToRGBA(t){if(/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.test(t)){const[e,...i]=/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(t),n=Number(i[0])/360,s=Number(i[1])/100,r=Number(i[2])/100;let a,o,h;if(0===s)return h=255*r,{r:Math.round(h),g:Math.round(h),b:Math.round(h),a:1};a=r<.5?r*(1+s):r+s-r*s;const l=2*r-a,d=[0,0,0];for(let t=0;t<3;t++)o=n+1/3*-(t-1),o<0&&o++,o>1&&o--,h=6*o<1?l+6*(a-l)*o:2*o<1?a:3*o<2?l+(a-l)*(2/3-o)*6:l,d[t]=255*h;return{r:Math.round(d[0]),g:Math.round(d[1]),b:Math.round(d[2]),a:1}}},haveIntersection:(t,e)=>!(e.x>t.x+t.width||e.x+e.width<t.x||e.y>t.y+t.height||e.y+e.height<t.y),cloneObject(t){const e={};for(const i in t)this._isPlainObject(t[i])?e[i]=this.cloneObject(t[i]):this._isArray(t[i])?e[i]=this.cloneArray(t[i]):e[i]=t[i];return e},cloneArray:t=>t.slice(0),degToRad:t=>t*r,radToDeg:t=>t*a,_degToRad:t=>(g.warn("Util._degToRad is removed. Please use public Util.degToRad instead."),g.degToRad(t)),_radToDeg:t=>(g.warn("Util._radToDeg is removed. Please use public Util.radToDeg instead."),g.radToDeg(t)),_getRotation:t=>i.angleDeg?g.radToDeg(t):t,_capitalize:t=>t.charAt(0).toUpperCase()+t.slice(1),throw(t){throw new Error(o+t)},error(t){console.error(o+t)},warn(t){i.showWarnings&&console.warn("Konva warning: "+t)},each(t,e){for(const i in t)e(i,t[i])},_inRange:(t,e,i)=>e<=t&&t<i,_getProjectionToSegment(t,e,i,n,s,r){let a,o,h;const l=(t-i)*(t-i)+(e-n)*(e-n);if(0==l)a=t,o=e,h=(s-i)*(s-i)+(r-n)*(r-n);else{const d=((s-t)*(i-t)+(r-e)*(n-e))/l;d<0?(a=t,o=e,h=(t-s)*(t-s)+(e-r)*(e-r)):d>1?(a=i,o=n,h=(i-s)*(i-s)+(n-r)*(n-r)):(a=t+d*(i-t),o=e+d*(n-e),h=(a-s)*(a-s)+(o-r)*(o-r))}return[a,o,h]},_getProjectionToLine(t,e,i){const n=g.cloneObject(t);let s=Number.MAX_VALUE;return e.forEach((function(r,a){if(!i&&a===e.length-1)return;const o=e[(a+1)%e.length],h=g._getProjectionToSegment(r.x,r.y,o.x,o.y,t.x,t.y),l=h[0],d=h[1],c=h[2];c<s&&(n.x=l,n.y=d,s=c)})),n},_prepareArrayForTween(t,e,i){let n,s=[],r=[];if(t.length>e.length){const i=e;e=t,t=i}for(n=0;n<t.length;n+=2)s.push({x:t[n],y:t[n+1]});for(n=0;n<e.length;n+=2)r.push({x:e[n],y:e[n+1]});const a=[];return r.forEach((function(t){const e=g._getProjectionToLine(t,s,i);a.push(e.x),a.push(e.y)})),a},_prepareToStringify(t){let e;t.visitedByCircularReferenceRemoval=!0;for(const i in t)if(t.hasOwnProperty(i)&&t[i]&&"object"==typeof t[i])if(e=Object.getOwnPropertyDescriptor(t,i),t[i].visitedByCircularReferenceRemoval||g._isElement(t[i])){if(!e.configurable)return null;delete t[i]}else if(null===g._prepareToStringify(t[i])){if(!e.configurable)return null;delete t[i]}return delete t.visitedByCircularReferenceRemoval,t},_assign(t,e){for(const i in e)t[i]=e[i];return t},_getFirstPointerId:t=>t.touches?t.changedTouches[0].identifier:t.pointerId||999,releaseCanvas(...t){i.releaseCanvasOnDestroy&&t.forEach((t=>{t.width=0,t.height=0}))},drawRoundedRectPath(t,e,i,n){let s=0,r=0,a=0,o=0;"number"==typeof n?s=r=a=o=Math.min(n,e/2,i/2):(s=Math.min(n[0]||0,e/2,i/2),r=Math.min(n[1]||0,e/2,i/2),o=Math.min(n[2]||0,e/2,i/2),a=Math.min(n[3]||0,e/2,i/2)),t.moveTo(s,0),t.lineTo(e-r,0),t.arc(e-r,r,r,3*Math.PI/2,0,!1),t.lineTo(e,i-o),t.arc(e-o,i-o,o,0,Math.PI/2,!1),t.lineTo(a,i),t.arc(a,i-a,a,Math.PI/2,Math.PI,!1),t.lineTo(0,s),t.arc(s,s,s,Math.PI,3*Math.PI/2,!1)}};function u(t){return g._isString(t)?'"'+t+'"':"[object Number]"===Object.prototype.toString.call(t)||g._isBoolean(t)?t:Object.prototype.toString.call(t)}function f(t){return t>255?255:t<0?0:Math.round(t)}function p(){if(i.isUnminified)return function(t,e){return g._isNumber(t)||g.warn(u(t)+' is a not valid value for "'+e+'" attribute. The value should be a number.'),t}}function m(t){if(i.isUnminified)return function(e,i){const n=g._isNumber(e),s=g._isArray(e)&&e.length==t;return n||s||g.warn(u(e)+' is a not valid value for "'+i+'" attribute. The value should be a number or Array<number>('+t+")"),e}}function _(){if(i.isUnminified)return function(t,e){return g._isNumber(t)||"auto"===t||g.warn(u(t)+' is a not valid value for "'+e+'" attribute. The value should be a number or "auto".'),t}}function y(){if(i.isUnminified)return function(t,e){return g._isString(t)||g.warn(u(t)+' is a not valid value for "'+e+'" attribute. The value should be a string.'),t}}function v(){if(i.isUnminified)return function(t,e){const i=g._isString(t),n="[object CanvasGradient]"===Object.prototype.toString.call(t)||t&&t.addColorStop;return i||n||g.warn(u(t)+' is a not valid value for "'+e+'" attribute. The value should be a string or a native gradient.'),t}}function x(){if(i.isUnminified)return function(t,e){return!0===t||!1===t||g.warn(u(t)+' is a not valid value for "'+e+'" attribute. The value should be a boolean.'),t}}const b="get",S="set",w={addGetterSetter(t,e,i,n,s){w.addGetter(t,e,i),w.addSetter(t,e,n,s),w.addOverloadedGetterSetter(t,e)},addGetter(t,e,i){const n=b+g._capitalize(e);t.prototype[n]=t.prototype[n]||function(){const t=this.attrs[e];return void 0===t?i:t}},addSetter(t,e,i,n){const s=S+g._capitalize(e);t.prototype[s]||w.overWriteSetter(t,e,i,n)},overWriteSetter(t,e,i,n){const s=S+g._capitalize(e);t.prototype[s]=function(t){return i&&null!=t&&(t=i.call(this,t,e)),this._setAttr(e,t),n&&n.call(this),this}},addComponentsGetterSetter(t,e,n,s,r){let a,o,h=n.length,l=g._capitalize,d=b+l(e),c=S+l(e);t.prototype[d]=function(){const t={};for(a=0;a<h;a++)o=n[a],t[o]=this.getAttr(e+l(o));return t};const f=function(t){if(i.isUnminified)return function(e,i){return null==e||g.isObject(e)||g.warn(u(e)+' is a not valid value for "'+i+'" attribute. The value should be an object with properties '+t),e}}(n);t.prototype[c]=function(t){let i,a=this.attrs[e];for(i in s&&(t=s.call(this,t)),f&&f.call(this,t,e),t)t.hasOwnProperty(i)&&this._setAttr(e+l(i),t[i]);return t||n.forEach((t=>{this._setAttr(e+l(t),void 0)})),this._fireChangeEvent(e,a,t),r&&r.call(this),this},w.addOverloadedGetterSetter(t,e)},addOverloadedGetterSetter(t,e){const i=g._capitalize(e),n=S+i,s=b+i;t.prototype[e]=function(){return arguments.length?(this[n](arguments[0]),this):this[s]()}},addDeprecatedGetterSetter(t,e,i,n){g.error("Adding deprecated "+e);const s=b+g._capitalize(e),r=e+" property is deprecated and will be removed soon. Look at Konva change log for more information.";t.prototype[s]=function(){g.error(r);const t=this.attrs[e];return void 0===t?i:t},w.addSetter(t,e,n,(function(){g.error(r)})),w.addOverloadedGetterSetter(t,e)},backCompat(t,e){g.each(e,(function(e,i){const n=t.prototype[i],s=b+g._capitalize(e),r=S+g._capitalize(e);function a(){n.apply(this,arguments),g.error('"'+e+'" method is deprecated and will be removed soon. Use ""'+i+'" instead.')}t.prototype[e]=a,t.prototype[s]=a,t.prototype[r]=a}))},afterSetFilter(){this._filterUpToDate=!1}};const C=["arc","arcTo","beginPath","bezierCurveTo","clearRect","clip","closePath","createLinearGradient","createPattern","createRadialGradient","drawImage","ellipse","fill","fillText","getImageData","createImageData","lineTo","moveTo","putImageData","quadraticCurveTo","rect","roundRect","restore","rotate","save","scale","setLineDash","setTransform","stroke","strokeText","transform","translate"];class P{constructor(t){this.canvas=t,i.enableTrace&&(this.traceArr=[],this._enableTrace())}fillShape(t){t.fillEnabled()&&this._fill(t)}_fill(t){}strokeShape(t){t.hasStroke()&&this._stroke(t)}_stroke(t){}fillStrokeShape(t){t.attrs.fillAfterStrokeEnabled?(this.strokeShape(t),this.fillShape(t)):(this.fillShape(t),this.strokeShape(t))}getTrace(t,e){let i,n,s,r,a=this.traceArr,o=a.length,h="";for(i=0;i<o;i++)n=a[i],s=n.method,s?(r=n.args,h+=s,t?h+="()":g._isArray(r[0])?h+="(["+r.join(",")+"])":(e&&(r=r.map((t=>"number"==typeof t?Math.floor(t):t))),h+="("+r.join(",")+")")):(h+=n.property,t||(h+="="+n.val)),h+=";";return h}clearTrace(){this.traceArr=[]}_trace(t){let e,i=this.traceArr;i.push(t),e=i.length,e>=100&&i.shift()}reset(){const t=this.getCanvas().getPixelRatio();this.setTransform(1*t,0,0,1*t,0,0)}getCanvas(){return this.canvas}clear(t){const e=this.getCanvas();t?this.clearRect(t.x||0,t.y||0,t.width||0,t.height||0):this.clearRect(0,0,e.getWidth()/e.pixelRatio,e.getHeight()/e.pixelRatio)}_applyLineCap(t){const e=t.attrs.lineCap;e&&this.setAttr("lineCap",e)}_applyOpacity(t){const e=t.getAbsoluteOpacity();1!==e&&this.setAttr("globalAlpha",e)}_applyLineJoin(t){const e=t.attrs.lineJoin;e&&this.setAttr("lineJoin",e)}setAttr(t,e){this._context[t]=e}arc(t,e,i,n,s,r){this._context.arc(t,e,i,n,s,r)}arcTo(t,e,i,n,s){this._context.arcTo(t,e,i,n,s)}beginPath(){this._context.beginPath()}bezierCurveTo(t,e,i,n,s,r){this._context.bezierCurveTo(t,e,i,n,s,r)}clearRect(t,e,i,n){this._context.clearRect(t,e,i,n)}clip(...t){this._context.clip.apply(this._context,t)}closePath(){this._context.closePath()}createImageData(t,e){const i=arguments;return 2===i.length?this._context.createImageData(t,e):1===i.length?this._context.createImageData(t):void 0}createLinearGradient(t,e,i,n){return this._context.createLinearGradient(t,e,i,n)}createPattern(t,e){return this._context.createPattern(t,e)}createRadialGradient(t,e,i,n,s,r){return this._context.createRadialGradient(t,e,i,n,s,r)}drawImage(t,e,i,n,s,r,a,o,h){const l=arguments,d=this._context;3===l.length?d.drawImage(t,e,i):5===l.length?d.drawImage(t,e,i,n,s):9===l.length&&d.drawImage(t,e,i,n,s,r,a,o,h)}ellipse(t,e,i,n,s,r,a,o){this._context.ellipse(t,e,i,n,s,r,a,o)}isPointInPath(t,e,i,n){return i?this._context.isPointInPath(i,t,e,n):this._context.isPointInPath(t,e,n)}fill(...t){this._context.fill.apply(this._context,t)}fillRect(t,e,i,n){this._context.fillRect(t,e,i,n)}strokeRect(t,e,i,n){this._context.strokeRect(t,e,i,n)}fillText(t,e,i,n){n?this._context.fillText(t,e,i,n):this._context.fillText(t,e,i)}measureText(t){return this._context.measureText(t)}getImageData(t,e,i,n){return this._context.getImageData(t,e,i,n)}lineTo(t,e){this._context.lineTo(t,e)}moveTo(t,e){this._context.moveTo(t,e)}rect(t,e,i,n){this._context.rect(t,e,i,n)}roundRect(t,e,i,n,s){this._context.roundRect(t,e,i,n,s)}putImageData(t,e,i){this._context.putImageData(t,e,i)}quadraticCurveTo(t,e,i,n){this._context.quadraticCurveTo(t,e,i,n)}restore(){this._context.restore()}rotate(t){this._context.rotate(t)}save(){this._context.save()}scale(t,e){this._context.scale(t,e)}setLineDash(t){this._context.setLineDash?this._context.setLineDash(t):"mozDash"in this._context?this._context.mozDash=t:"webkitLineDash"in this._context&&(this._context.webkitLineDash=t)}getLineDash(){return this._context.getLineDash()}setTransform(t,e,i,n,s,r){this._context.setTransform(t,e,i,n,s,r)}stroke(t){t?this._context.stroke(t):this._context.stroke()}strokeText(t,e,i,n){this._context.strokeText(t,e,i,n)}transform(t,e,i,n,s,r){this._context.transform(t,e,i,n,s,r)}translate(t,e){this._context.translate(t,e)}_enableTrace(){let t,e,i=this,n=C.length,s=this.setAttr;const r=function(t){let n,s=i[t];i[t]=function(){return e=function(t){let e,i,n=[],s=t.length,r=g;for(e=0;e<s;e++)i=t[e],r._isNumber(i)?i=Math.round(1e3*i)/1e3:r._isString(i)||(i+=""),n.push(i);return n}(Array.prototype.slice.call(arguments,0)),n=s.apply(i,arguments),i._trace({method:t,args:e}),n}};for(t=0;t<n;t++)r(C[t]);i.setAttr=function(){s.apply(i,arguments);const t=arguments[0];let e=arguments[1];"shadowOffsetX"!==t&&"shadowOffsetY"!==t&&"shadowBlur"!==t||(e/=this.canvas.getPixelRatio()),i._trace({property:t,val:e})}}_applyGlobalCompositeOperation(t){const e=t.attrs.globalCompositeOperation;!e||"source-over"===e||this.setAttr("globalCompositeOperation",e)}}["fillStyle","strokeStyle","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","letterSpacing","lineCap","lineDashOffset","lineJoin","lineWidth","miterLimit","direction","font","textAlign","textBaseline","globalAlpha","globalCompositeOperation","imageSmoothingEnabled"].forEach((function(t){Object.defineProperty(P.prototype,t,{get(){return this._context[t]},set(e){this._context[t]=e}})}));class k extends P{constructor(t,{willReadFrequently:e=!1}={}){super(t),this._context=t._canvas.getContext("2d",{willReadFrequently:e})}_fillColor(t){const e=t.fill();this.setAttr("fillStyle",e),t._fillFunc(this)}_fillPattern(t){this.setAttr("fillStyle",t._getFillPattern()),t._fillFunc(this)}_fillLinearGradient(t){const e=t._getLinearGradient();e&&(this.setAttr("fillStyle",e),t._fillFunc(this))}_fillRadialGradient(t){const e=t._getRadialGradient();e&&(this.setAttr("fillStyle",e),t._fillFunc(this))}_fill(t){const e=t.fill(),i=t.getFillPriority();if(e&&"color"===i)return void this._fillColor(t);const n=t.getFillPatternImage();if(n&&"pattern"===i)return void this._fillPattern(t);const s=t.getFillLinearGradientColorStops();if(s&&"linear-gradient"===i)return void this._fillLinearGradient(t);const r=t.getFillRadialGradientColorStops();r&&"radial-gradient"===i?this._fillRadialGradient(t):e?this._fillColor(t):n?this._fillPattern(t):s?this._fillLinearGradient(t):r&&this._fillRadialGradient(t)}_strokeLinearGradient(t){const e=t.getStrokeLinearGradientStartPoint(),i=t.getStrokeLinearGradientEndPoint(),n=t.getStrokeLinearGradientColorStops(),s=this.createLinearGradient(e.x,e.y,i.x,i.y);if(n){for(let t=0;t<n.length;t+=2)s.addColorStop(n[t],n[t+1]);this.setAttr("strokeStyle",s)}}_stroke(t){const e=t.dash(),i=t.getStrokeScaleEnabled();if(t.hasStroke()){if(!i){this.save();const t=this.getCanvas().getPixelRatio();this.setTransform(t,0,0,t,0,0)}this._applyLineCap(t),e&&t.dashEnabled()&&(this.setLineDash(e),this.setAttr("lineDashOffset",t.dashOffset())),this.setAttr("lineWidth",t.strokeWidth()),t.getShadowForStrokeEnabled()||this.setAttr("shadowColor","rgba(0,0,0,0)");t.getStrokeLinearGradientColorStops()?this._strokeLinearGradient(t):this.setAttr("strokeStyle",t.stroke()),t._strokeFunc(this),i||this.restore()}}_applyShadow(t){var e,i,n;const s=null!==(e=t.getShadowRGBA())&&void 0!==e?e:"black",r=null!==(i=t.getShadowBlur())&&void 0!==i?i:5,a=null!==(n=t.getShadowOffset())&&void 0!==n?n:{x:0,y:0},o=t.getAbsoluteScale(),h=this.canvas.getPixelRatio(),l=o.x*h,d=o.y*h;this.setAttr("shadowColor",s),this.setAttr("shadowBlur",r*Math.min(Math.abs(l),Math.abs(d))),this.setAttr("shadowOffsetX",a.x*l),this.setAttr("shadowOffsetY",a.y*d)}}class A extends P{constructor(t){super(t),this._context=t._canvas.getContext("2d",{willReadFrequently:!0})}_fill(t){this.save(),this.setAttr("fillStyle",t.colorKey),t._fillFuncHit(this),this.restore()}strokeShape(t){t.hasHitStroke()&&this._stroke(t)}_stroke(t){if(t.hasHitStroke()){const e=t.getStrokeScaleEnabled();if(!e){this.save();const t=this.getCanvas().getPixelRatio();this.setTransform(t,0,0,t,0,0)}this._applyLineCap(t);const i=t.hitStrokeWidth(),n="auto"===i?t.strokeWidth():i;this.setAttr("lineWidth",n),this.setAttr("strokeStyle",t.colorKey),t._strokeFuncHit(this),e||this.restore()}}}let T;class M{constructor(t){this.pixelRatio=1,this.width=0,this.height=0,this.isCache=!1;const e=(t||{}).pixelRatio||i.pixelRatio||function(){if(T)return T;const t=g.createCanvasElement(),e=t.getContext("2d");return T=(i._global.devicePixelRatio||1)/(e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1),g.releaseCanvas(t),T}();this.pixelRatio=e,this._canvas=g.createCanvasElement(),this._canvas.style.padding="0",this._canvas.style.margin="0",this._canvas.style.border="0",this._canvas.style.background="transparent",this._canvas.style.position="absolute",this._canvas.style.top="0",this._canvas.style.left="0"}getContext(){return this.context}getPixelRatio(){return this.pixelRatio}setPixelRatio(t){const e=this.pixelRatio;this.pixelRatio=t,this.setSize(this.getWidth()/e,this.getHeight()/e)}setWidth(t){this.width=this._canvas.width=t*this.pixelRatio,this._canvas.style.width=t+"px";const e=this.pixelRatio;this.getContext()._context.scale(e,e)}setHeight(t){this.height=this._canvas.height=t*this.pixelRatio,this._canvas.style.height=t+"px";const e=this.pixelRatio;this.getContext()._context.scale(e,e)}getWidth(){return this.width}getHeight(){return this.height}setSize(t,e){this.setWidth(t||0),this.setHeight(e||0)}toDataURL(t,e){try{return this._canvas.toDataURL(t,e)}catch(t){try{return this._canvas.toDataURL()}catch(t){return g.error("Unable to get data URL. "+t.message+" For more info read https://konvajs.org/docs/posts/Tainted_Canvas.html."),""}}}}w.addGetterSetter(M,"pixelRatio",void 0,p());class G extends M{constructor(t={width:0,height:0,willReadFrequently:!1}){super(t),this.context=new k(this,{willReadFrequently:t.willReadFrequently}),this.setSize(t.width,t.height)}}class R extends M{constructor(t={width:0,height:0}){super(t),this.hitCanvas=!0,this.context=new A(this),this.setSize(t.width,t.height)}}const E={get isDragging(){let t=!1;return E._dragElements.forEach((e=>{"dragging"===e.dragStatus&&(t=!0)})),t},justDragged:!1,get node(){let t;return E._dragElements.forEach((e=>{t=e.node})),t},_dragElements:new Map,_drag(t){const e=[];E._dragElements.forEach(((i,n)=>{const{node:s}=i,r=s.getStage();r.setPointersPositions(t),void 0===i.pointerId&&(i.pointerId=g._getFirstPointerId(t));const a=r._changedPointerPositions.find((t=>t.id===i.pointerId));if(a){if("dragging"!==i.dragStatus){const e=s.dragDistance();if(Math.max(Math.abs(a.x-i.startPointerPos.x),Math.abs(a.y-i.startPointerPos.y))<e)return;if(s.startDrag({evt:t}),!s.isDragging())return}s._setDragPosition(t,i),e.push(s)}})),e.forEach((e=>{e.fire("dragmove",{type:"dragmove",target:e,evt:t},!0)}))},_endDragBefore(t){const e=[];E._dragElements.forEach((n=>{const{node:s}=n,r=s.getStage();t&&r.setPointersPositions(t);if(!r._changedPointerPositions.find((t=>t.id===n.pointerId)))return;"dragging"!==n.dragStatus&&"stopped"!==n.dragStatus||(E.justDragged=!0,i._mouseListenClick=!1,i._touchListenClick=!1,i._pointerListenClick=!1,n.dragStatus="stopped");const a=n.node.getLayer()||n.node instanceof i.Stage&&n.node;a&&-1===e.indexOf(a)&&e.push(a)})),e.forEach((t=>{t.draw()}))},_endDragAfter(t){E._dragElements.forEach(((e,i)=>{"stopped"===e.dragStatus&&e.node.fire("dragend",{type:"dragend",target:e.node,evt:t},!0),"dragging"!==e.dragStatus&&E._dragElements.delete(i)}))}};i.isBrowser&&(window.addEventListener("mouseup",E._endDragBefore,!0),window.addEventListener("touchend",E._endDragBefore,!0),window.addEventListener("touchcancel",E._endDragBefore,!0),window.addEventListener("mousemove",E._drag),window.addEventListener("touchmove",E._drag),window.addEventListener("mouseup",E._endDragAfter,!1),window.addEventListener("touchend",E._endDragAfter,!1),window.addEventListener("touchcancel",E._endDragAfter,!1));const D="absoluteOpacity",L="allEventListeners",I="absoluteTransform",O="absoluteScale",F="canvas",B="listening",N="mouseenter",H="mouseleave",W="Shape",z=" ",Y="stage",X="transform",j="visible",q=["xChange.konva","yChange.konva","scaleXChange.konva","scaleYChange.konva","skewXChange.konva","skewYChange.konva","rotationChange.konva","offsetXChange.konva","offsetYChange.konva","transformsEnabledChange.konva"].join(z);let U=1;class V{constructor(t){this._id=U++,this.eventListeners={},this.attrs={},this.index=0,this._allEventListeners=null,this.parent=null,this._cache=new Map,this._attachedDepsListeners=new Map,this._lastPos=null,this._batchingTransformChange=!1,this._needClearTransformCache=!1,this._filterUpToDate=!1,this._isUnderCache=!1,this._dragEventId=null,this._shouldFireChangeEvents=!1,this.setAttrs(t),this._shouldFireChangeEvents=!0}hasChildren(){return!1}_clearCache(t){t!==X&&t!==I||!this._cache.get(t)?t?this._cache.delete(t):this._cache.clear():this._cache.get(t).dirty=!0}_getCache(t,e){let i=this._cache.get(t);return(void 0===i||(t===X||t===I)&&!0===i.dirty)&&(i=e.call(this),this._cache.set(t,i)),i}_calculate(t,e,i){if(!this._attachedDepsListeners.get(t)){const i=e.map((t=>t+"Change.konva")).join(z);this.on(i,(()=>{this._clearCache(t)})),this._attachedDepsListeners.set(t,!0)}return this._getCache(t,i)}_getCanvasCache(){return this._cache.get(F)}_clearSelfAndDescendantCache(t){this._clearCache(t),t===I&&this.fire("absoluteTransformChange")}clearCache(){if(this._cache.has(F)){const{scene:t,filter:e,hit:i}=this._cache.get(F);g.releaseCanvas(t,e,i),this._cache.delete(F)}return this._clearSelfAndDescendantCache(),this._requestDraw(),this}cache(t){const e=t||{};let i={};void 0!==e.x&&void 0!==e.y&&void 0!==e.width&&void 0!==e.height||(i=this.getClientRect({skipTransform:!0,relativeTo:this.getParent()||void 0}));let n=Math.ceil(e.width||i.width),s=Math.ceil(e.height||i.height),r=e.pixelRatio,a=void 0===e.x?Math.floor(i.x):e.x,o=void 0===e.y?Math.floor(i.y):e.y,h=e.offset||0,l=e.drawBorder||!1,d=e.hitCanvasPixelRatio||1;if(!n||!s)return void g.error("Can not cache the node. Width or height of the node equals 0. Caching is skipped.");n+=2*h+(Math.abs(Math.round(i.x)-a)>.5?1:0),s+=2*h+(Math.abs(Math.round(i.y)-o)>.5?1:0),a-=h,o-=h;const c=new G({pixelRatio:r,width:n,height:s}),u=new G({pixelRatio:r,width:0,height:0,willReadFrequently:!0}),f=new R({pixelRatio:d,width:n,height:s}),p=c.getContext(),m=f.getContext();return f.isCache=!0,c.isCache=!0,this._cache.delete(F),this._filterUpToDate=!1,!1===e.imageSmoothingEnabled&&(c.getContext()._context.imageSmoothingEnabled=!1,u.getContext()._context.imageSmoothingEnabled=!1),p.save(),m.save(),p.translate(-a,-o),m.translate(-a,-o),this._isUnderCache=!0,this._clearSelfAndDescendantCache(D),this._clearSelfAndDescendantCache(O),this.drawScene(c,this),this.drawHit(f,this),this._isUnderCache=!1,p.restore(),m.restore(),l&&(p.save(),p.beginPath(),p.rect(0,0,n,s),p.closePath(),p.setAttr("strokeStyle","red"),p.setAttr("lineWidth",5),p.stroke(),p.restore()),this._cache.set(F,{scene:c,filter:u,hit:f,x:a,y:o}),this._requestDraw(),this}isCached(){return this._cache.has(F)}getClientRect(t){throw new Error('abstract "getClientRect" method call')}_transformedRect(t,e){const i=[{x:t.x,y:t.y},{x:t.x+t.width,y:t.y},{x:t.x+t.width,y:t.y+t.height},{x:t.x,y:t.y+t.height}];let n=1/0,s=1/0,r=-1/0,a=-1/0;const o=this.getAbsoluteTransform(e);return i.forEach((function(t){const e=o.point(t);void 0===n&&(n=r=e.x,s=a=e.y),n=Math.min(n,e.x),s=Math.min(s,e.y),r=Math.max(r,e.x),a=Math.max(a,e.y)})),{x:n,y:s,width:r-n,height:a-s}}_drawCachedSceneCanvas(t){t.save(),t._applyOpacity(this),t._applyGlobalCompositeOperation(this);const e=this._getCanvasCache();t.translate(e.x,e.y);const i=this._getCachedSceneCanvas(),n=i.pixelRatio;t.drawImage(i._canvas,0,0,i.width/n,i.height/n),t.restore()}_drawCachedHitCanvas(t){const e=this._getCanvasCache(),i=e.hit;t.save(),t.translate(e.x,e.y),t.drawImage(i._canvas,0,0,i.width/i.pixelRatio,i.height/i.pixelRatio),t.restore()}_getCachedSceneCanvas(){let t,e,i,n,s=this.filters(),r=this._getCanvasCache(),a=r.scene,o=r.filter,h=o.getContext();if(s){if(!this._filterUpToDate){const r=a.pixelRatio;o.setSize(a.width/a.pixelRatio,a.height/a.pixelRatio);try{for(t=s.length,h.clear(),h.drawImage(a._canvas,0,0,a.getWidth()/r,a.getHeight()/r),e=h.getImageData(0,0,o.getWidth(),o.getHeight()),i=0;i<t;i++)n=s[i],"function"==typeof n?(n.call(this,e),h.putImageData(e,0,0)):g.error("Filter should be type of function, but got "+typeof n+" instead. Please check correct filters")}catch(t){g.error("Unable to apply filter. "+t.message+" This post my help you https://konvajs.org/docs/posts/Tainted_Canvas.html.")}this._filterUpToDate=!0}return o}return a}on(t,e){if(this._cache&&this._cache.delete(L),3===arguments.length)return this._delegate.apply(this,arguments);let i,n,s,r,a,o=t.split(z),h=o.length;for(i=0;i<h;i++)n=o[i],s=n.split("."),r=s[0],a=s[1]||"",this.eventListeners[r]||(this.eventListeners[r]=[]),this.eventListeners[r].push({name:a,handler:e});return this}off(t,e){let i,n,s,r,a,o,h=(t||"").split(z),l=h.length;if(this._cache&&this._cache.delete(L),!t)for(n in this.eventListeners)this._off(n);for(i=0;i<l;i++)if(s=h[i],r=s.split("."),a=r[0],o=r[1],a)this.eventListeners[a]&&this._off(a,o,e);else for(n in this.eventListeners)this._off(n,o,e);return this}dispatchEvent(t){const e={target:this,type:t.type,evt:t};return this.fire(t.type,e),this}addEventListener(t,e){return this.on(t,(function(t){e.call(this,t.evt)})),this}removeEventListener(t){return this.off(t),this}_delegate(t,e,i){const n=this;this.on(t,(function(t){const s=t.target.findAncestors(e,!0,n);for(let e=0;e<s.length;e++)(t=g.cloneObject(t)).currentTarget=s[e],i.call(s[e],t)}))}remove(){return this.isDragging()&&this.stopDrag(),E._dragElements.delete(this._id),this._remove(),this}_clearCaches(){this._clearSelfAndDescendantCache(I),this._clearSelfAndDescendantCache(D),this._clearSelfAndDescendantCache(O),this._clearSelfAndDescendantCache(Y),this._clearSelfAndDescendantCache(j),this._clearSelfAndDescendantCache(B)}_remove(){this._clearCaches();const t=this.getParent();t&&t.children&&(t.children.splice(this.index,1),t._setChildrenIndices(),this.parent=null)}destroy(){return this.remove(),this.clearCache(),this}getAttr(t){const e="get"+g._capitalize(t);return g._isFunction(this[e])?this[e]():this.attrs[t]}getAncestors(){let t=this.getParent(),e=[];for(;t;)e.push(t),t=t.getParent();return e}getAttrs(){return this.attrs||{}}setAttrs(t){return this._batchTransformChanges((()=>{let e,i;if(!t)return this;for(e in t)"children"!==e&&(i="set"+g._capitalize(e),g._isFunction(this[i])?this[i](t[e]):this._setAttr(e,t[e]))})),this}isListening(){return this._getCache(B,this._isListening)}_isListening(t){if(!this.listening())return!1;const e=this.getParent();return!e||e===t||this===t||e._isListening(t)}isVisible(){return this._getCache(j,this._isVisible)}_isVisible(t){if(!this.visible())return!1;const e=this.getParent();return!e||e===t||this===t||e._isVisible(t)}shouldDrawHit(t,e=!1){if(t)return this._isVisible(t)&&this._isListening(t);const n=this.getLayer();let s=!1;E._dragElements.forEach((t=>{"dragging"===t.dragStatus&&("Stage"===t.node.nodeType||t.node.getLayer()===n)&&(s=!0)}));const r=!e&&!i.hitOnDragEnabled&&(s||i.isTransforming());return this.isListening()&&this.isVisible()&&!r}show(){return this.visible(!0),this}hide(){return this.visible(!1),this}getZIndex(){return this.index||0}getAbsoluteZIndex(){let t,e,i,n,s=this.getDepth(),r=this,a=0;const o=this.getStage();return"Stage"!==r.nodeType&&o&&function o(h){for(t=[],e=h.length,i=0;i<e;i++)n=h[i],a++,n.nodeType!==W&&(t=t.concat(n.getChildren().slice())),n._id===r._id&&(i=e);t.length>0&&t[0].getDepth()<=s&&o(t)}(o.getChildren()),a}getDepth(){let t=0,e=this.parent;for(;e;)t++,e=e.parent;return t}_batchTransformChanges(t){this._batchingTransformChange=!0,t(),this._batchingTransformChange=!1,this._needClearTransformCache&&(this._clearCache(X),this._clearSelfAndDescendantCache(I)),this._needClearTransformCache=!1}setPosition(t){return this._batchTransformChanges((()=>{this.x(t.x),this.y(t.y)})),this}getPosition(){return{x:this.x(),y:this.y()}}getRelativePointerPosition(){const t=this.getStage();if(!t)return null;const e=t.getPointerPosition();if(!e)return null;const i=this.getAbsoluteTransform().copy();return i.invert(),i.point(e)}getAbsolutePosition(t){let e=!1,i=this.parent;for(;i;){if(i.isCached()){e=!0;break}i=i.parent}e&&!t&&(t=!0);const n=this.getAbsoluteTransform(t).getMatrix(),r=new s,a=this.offset();return r.m=n.slice(),r.translate(a.x,a.y),r.getTranslation()}setAbsolutePosition(t){const{x:e,y:i,...n}=this._clearTransform();this.attrs.x=e,this.attrs.y=i,this._clearCache(X);const s=this._getAbsoluteTransform().copy();return s.invert(),s.translate(t.x,t.y),t={x:this.attrs.x+s.getTranslation().x,y:this.attrs.y+s.getTranslation().y},this._setTransform(n),this.setPosition({x:t.x,y:t.y}),this._clearCache(X),this._clearSelfAndDescendantCache(I),this}_setTransform(t){let e;for(e in t)this.attrs[e]=t[e]}_clearTransform(){const t={x:this.x(),y:this.y(),rotation:this.rotation(),scaleX:this.scaleX(),scaleY:this.scaleY(),offsetX:this.offsetX(),offsetY:this.offsetY(),skewX:this.skewX(),skewY:this.skewY()};return this.attrs.x=0,this.attrs.y=0,this.attrs.rotation=0,this.attrs.scaleX=1,this.attrs.scaleY=1,this.attrs.offsetX=0,this.attrs.offsetY=0,this.attrs.skewX=0,this.attrs.skewY=0,t}move(t){let e=t.x,i=t.y,n=this.x(),s=this.y();return void 0!==e&&(n+=e),void 0!==i&&(s+=i),this.setPosition({x:n,y:s}),this}_eachAncestorReverse(t,e){let i,n,s=[],r=this.getParent();if(!e||e._id!==this._id){for(s.unshift(this);r&&(!e||r._id!==e._id);)s.unshift(r),r=r.parent;for(i=s.length,n=0;n<i;n++)t(s[n])}}rotate(t){return this.rotation(this.rotation()+t),this}moveToTop(){if(!this.parent)return g.warn("Node has no parent. moveToTop function is ignored."),!1;const t=this.index;return t<this.parent.getChildren().length-1&&(this.parent.children.splice(t,1),this.parent.children.push(this),this.parent._setChildrenIndices(),!0)}moveUp(){if(!this.parent)return g.warn("Node has no parent. moveUp function is ignored."),!1;const t=this.index;return t<this.parent.getChildren().length-1&&(this.parent.children.splice(t,1),this.parent.children.splice(t+1,0,this),this.parent._setChildrenIndices(),!0)}moveDown(){if(!this.parent)return g.warn("Node has no parent. moveDown function is ignored."),!1;const t=this.index;return t>0&&(this.parent.children.splice(t,1),this.parent.children.splice(t-1,0,this),this.parent._setChildrenIndices(),!0)}moveToBottom(){if(!this.parent)return g.warn("Node has no parent. moveToBottom function is ignored."),!1;const t=this.index;return t>0&&(this.parent.children.splice(t,1),this.parent.children.unshift(this),this.parent._setChildrenIndices(),!0)}setZIndex(t){if(!this.parent)return g.warn("Node has no parent. zIndex parameter is ignored."),this;(t<0||t>=this.parent.children.length)&&g.warn("Unexpected value "+t+" for zIndex property. zIndex is just index of a node in children of its parent. Expected value is from 0 to "+(this.parent.children.length-1)+".");const e=this.index;return this.parent.children.splice(e,1),this.parent.children.splice(t,0,this),this.parent._setChildrenIndices(),this}getAbsoluteOpacity(){return this._getCache(D,this._getAbsoluteOpacity)}_getAbsoluteOpacity(){let t=this.opacity();const e=this.getParent();return e&&!e._isUnderCache&&(t*=e.getAbsoluteOpacity()),t}moveTo(t){return this.getParent()!==t&&(this._remove(),t.add(this)),this}toObject(){let t,e,i,n,s,r=this.getAttrs();const a={attrs:{},className:this.getClassName()};for(t in r)e=r[t],s=g.isObject(e)&&!g._isPlainObject(e)&&!g._isArray(e),s||(i="function"==typeof this[t]&&this[t],delete r[t],n=i?i.call(this):null,r[t]=e,n!==e&&(a.attrs[t]=e));return g._prepareToStringify(a)}toJSON(){return JSON.stringify(this.toObject())}getParent(){return this.parent}findAncestors(t,e,i){const n=[];e&&this._isMatch(t)&&n.push(this);let s=this.parent;for(;s;){if(s===i)return n;s._isMatch(t)&&n.push(s),s=s.parent}return n}isAncestorOf(t){return!1}findAncestor(t,e,i){return this.findAncestors(t,e,i)[0]}_isMatch(t){if(!t)return!1;if("function"==typeof t)return t(this);let e,i,n=t.replace(/ /g,"").split(","),s=n.length;for(e=0;e<s;e++)if(i=n[e],g.isValidSelector(i)||(g.warn('Selector "'+i+'" is invalid. Allowed selectors examples are "#foo", ".bar" or "Group".'),g.warn('If you have a custom shape with such className, please change it to start with upper letter like "Triangle".'),g.warn("Konva is awesome, right?")),"#"===i.charAt(0)){if(this.id()===i.slice(1))return!0}else if("."===i.charAt(0)){if(this.hasName(i.slice(1)))return!0}else if(this.className===i||this.nodeType===i)return!0;return!1}getLayer(){const t=this.getParent();return t?t.getLayer():null}getStage(){return this._getCache(Y,this._getStage)}_getStage(){const t=this.getParent();return t?t.getStage():null}fire(t,e={},i){return e.target=e.target||this,i?this._fireAndBubble(t,e):this._fire(t,e),this}getAbsoluteTransform(t){return t?this._getAbsoluteTransform(t):this._getCache(I,this._getAbsoluteTransform)}_getAbsoluteTransform(t){let e;if(t)return e=new s,this._eachAncestorReverse((function(t){const i=t.transformsEnabled();"all"===i?e.multiply(t.getTransform()):"position"===i&&e.translate(t.x()-t.offsetX(),t.y()-t.offsetY())}),t),e;{e=this._cache.get(I)||new s,this.parent?this.parent.getAbsoluteTransform().copyInto(e):e.reset();const t=this.transformsEnabled();if("all"===t)e.multiply(this.getTransform());else if("position"===t){const t=this.attrs.x||0,i=this.attrs.y||0,n=this.attrs.offsetX||0,s=this.attrs.offsetY||0;e.translate(t-n,i-s)}return e.dirty=!1,e}}getAbsoluteScale(t){let e=this;for(;e;)e._isUnderCache&&(t=e),e=e.getParent();const i=this.getAbsoluteTransform(t).decompose();return{x:i.scaleX,y:i.scaleY}}getAbsoluteRotation(){return this.getAbsoluteTransform().decompose().rotation}getTransform(){return this._getCache(X,this._getTransform)}_getTransform(){var t,e;const n=this._cache.get(X)||new s;n.reset();const r=this.x(),a=this.y(),o=i.getAngle(this.rotation()),h=null!==(t=this.attrs.scaleX)&&void 0!==t?t:1,l=null!==(e=this.attrs.scaleY)&&void 0!==e?e:1,d=this.attrs.skewX||0,c=this.attrs.skewY||0,g=this.attrs.offsetX||0,u=this.attrs.offsetY||0;return 0===r&&0===a||n.translate(r,a),0!==o&&n.rotate(o),0===d&&0===c||n.skew(d,c),1===h&&1===l||n.scale(h,l),0===g&&0===u||n.translate(-1*g,-1*u),n.dirty=!1,n}clone(t){let e,i,n,s,r,a=g.cloneObject(this.attrs);for(e in t)a[e]=t[e];const o=new this.constructor(a);for(e in this.eventListeners)for(i=this.eventListeners[e],n=i.length,s=0;s<n;s++)r=i[s],r.name.indexOf("konva")<0&&(o.eventListeners[e]||(o.eventListeners[e]=[]),o.eventListeners[e].push(r));return o}_toKonvaCanvas(t){t=t||{};const e=this.getClientRect(),i=this.getStage(),n=void 0!==t.x?t.x:Math.floor(e.x),s=void 0!==t.y?t.y:Math.floor(e.y),r=t.pixelRatio||1,a=new G({width:t.width||Math.ceil(e.width)||(i?i.width():0),height:t.height||Math.ceil(e.height)||(i?i.height():0),pixelRatio:r}),o=a.getContext(),h=new G({width:a.width/a.pixelRatio+Math.abs(n),height:a.height/a.pixelRatio+Math.abs(s),pixelRatio:a.pixelRatio});return!1===t.imageSmoothingEnabled&&(o._context.imageSmoothingEnabled=!1),o.save(),(n||s)&&o.translate(-1*n,-1*s),this.drawScene(a,void 0,h),o.restore(),a}toCanvas(t){return this._toKonvaCanvas(t)._canvas}toDataURL(t){const e=(t=t||{}).mimeType||null,i=t.quality||null,n=this._toKonvaCanvas(t).toDataURL(e,i);return t.callback&&t.callback(n),n}toImage(t){return new Promise(((e,i)=>{try{const i=null==t?void 0:t.callback;i&&delete t.callback,g._urlToImage(this.toDataURL(t),(function(t){e(t),null==i||i(t)}))}catch(t){i(t)}}))}toBlob(t){return new Promise(((e,i)=>{try{const i=null==t?void 0:t.callback;i&&delete t.callback,this.toCanvas(t).toBlob((t=>{e(t),null==i||i(t)}),null==t?void 0:t.mimeType,null==t?void 0:t.quality)}catch(t){i(t)}}))}setSize(t){return this.width(t.width),this.height(t.height),this}getSize(){return{width:this.width(),height:this.height()}}getClassName(){return this.className||this.nodeType}getType(){return this.nodeType}getDragDistance(){return void 0!==this.attrs.dragDistance?this.attrs.dragDistance:this.parent?this.parent.getDragDistance():i.dragDistance}_off(t,e,i){let n,s,r,a=this.eventListeners[t];for(n=0;n<a.length;n++)if(s=a[n].name,r=a[n].handler,!("konva"===s&&"konva"!==e||e&&s!==e||i&&i!==r)){if(a.splice(n,1),0===a.length){delete this.eventListeners[t];break}n--}}_fireChangeEvent(t,e,i){this._fire(t+"Change",{oldVal:e,newVal:i})}addName(t){if(!this.hasName(t)){const e=this.name(),i=e?e+" "+t:t;this.name(i)}return this}hasName(t){if(!t)return!1;const e=this.name();if(!e)return!1;return-1!==(e||"").split(/\s/g).indexOf(t)}removeName(t){const e=(this.name()||"").split(/\s/g),i=e.indexOf(t);return-1!==i&&(e.splice(i,1),this.name(e.join(" "))),this}setAttr(t,e){const i=this["set"+g._capitalize(t)];return g._isFunction(i)?i.call(this,e):this._setAttr(t,e),this}_requestDraw(){if(i.autoDrawEnabled){const t=this.getLayer()||this.getStage();null==t||t.batchDraw()}}_setAttr(t,e){const i=this.attrs[t];(i!==e||g.isObject(e))&&(null==e?delete this.attrs[t]:this.attrs[t]=e,this._shouldFireChangeEvents&&this._fireChangeEvent(t,i,e),this._requestDraw())}_setComponentAttr(t,e,i){let n;void 0!==i&&(n=this.attrs[t],n||(this.attrs[t]=this.getAttr(t)),this.attrs[t][e]=i,this._fireChangeEvent(t,n,i))}_fireAndBubble(t,e,i){e&&this.nodeType===W&&(e.target=this);if(!((t===N||t===H)&&(i&&(this===i||this.isAncestorOf&&this.isAncestorOf(i))||"Stage"===this.nodeType&&!i))){this._fire(t,e);const n=(t===N||t===H)&&i&&i.isAncestorOf&&i.isAncestorOf(this)&&!i.isAncestorOf(this.parent);(e&&!e.cancelBubble||!e)&&this.parent&&this.parent.isListening()&&!n&&(i&&i.parent?this._fireAndBubble.call(this.parent,t,e,i):this._fireAndBubble.call(this.parent,t,e))}}_getProtoListeners(t){var e,i,n;const s=null!==(e=this._cache.get(L))&&void 0!==e?e:{};let r=null==s?void 0:s[t];if(void 0===r){r=[];let e=Object.getPrototypeOf(this);for(;e;){const s=null!==(n=null===(i=e.eventListeners)||void 0===i?void 0:i[t])&&void 0!==n?n:[];r.push(...s),e=Object.getPrototypeOf(e)}s[t]=r,this._cache.set(L,s)}return r}_fire(t,e){(e=e||{}).currentTarget=this,e.type=t;const i=this._getProtoListeners(t);if(i)for(var n=0;n<i.length;n++)i[n].handler.call(this,e);const s=this.eventListeners[t];if(s)for(n=0;n<s.length;n++)s[n].handler.call(this,e)}draw(){return this.drawScene(),this.drawHit(),this}_createDragElement(t){const e=t?t.pointerId:void 0,i=this.getStage(),n=this.getAbsolutePosition();if(!i)return;const s=i._getPointerById(e)||i._changedPointerPositions[0]||n;E._dragElements.set(this._id,{node:this,startPointerPos:s,offset:{x:s.x-n.x,y:s.y-n.y},dragStatus:"ready",pointerId:e})}startDrag(t,e=!0){E._dragElements.has(this._id)||this._createDragElement(t);E._dragElements.get(this._id).dragStatus="dragging",this.fire("dragstart",{type:"dragstart",target:this,evt:t&&t.evt},e)}_setDragPosition(t,e){const i=this.getStage()._getPointerById(e.pointerId);if(!i)return;let n={x:i.x-e.offset.x,y:i.y-e.offset.y};const s=this.dragBoundFunc();if(void 0!==s){const e=s.call(this,n,t);e?n=e:g.warn("dragBoundFunc did not return any value. That is unexpected behavior. You must return new absolute position from dragBoundFunc.")}this._lastPos&&this._lastPos.x===n.x&&this._lastPos.y===n.y||(this.setAbsolutePosition(n),this._requestDraw()),this._lastPos=n}stopDrag(t){const e=E._dragElements.get(this._id);e&&(e.dragStatus="stopped"),E._endDragBefore(t),E._endDragAfter(t)}setDraggable(t){this._setAttr("draggable",t),this._dragChange()}isDragging(){const t=E._dragElements.get(this._id);return!!t&&"dragging"===t.dragStatus}_listenDrag(){this._dragCleanup(),this.on("mousedown.konva touchstart.konva",(function(t){if(!(!(void 0!==t.evt.button)||i.dragButtons.indexOf(t.evt.button)>=0))return;if(this.isDragging())return;let e=!1;E._dragElements.forEach((t=>{this.isAncestorOf(t.node)&&(e=!0)})),e||this._createDragElement(t)}))}_dragChange(){if(this.attrs.draggable)this._listenDrag();else{this._dragCleanup();if(!this.getStage())return;const t=E._dragElements.get(this._id),e=t&&"dragging"===t.dragStatus,i=t&&"ready"===t.dragStatus;e?this.stopDrag():i&&E._dragElements.delete(this._id)}}_dragCleanup(){this.off("mousedown.konva"),this.off("touchstart.konva")}isClientRectOnScreen(t={x:0,y:0}){const e=this.getStage();if(!e)return!1;const i={x:-t.x,y:-t.y,width:e.width()+2*t.x,height:e.height()+2*t.y};return g.haveIntersection(i,this.getClientRect())}static create(t,e){return g._isString(t)&&(t=JSON.parse(t)),this._createNode(t,e)}static _createNode(t,e){let n,s,r,a=V.prototype.getClassName.call(t),o=t.children;e&&(t.attrs.container=e),i[a]||(g.warn('Can not find a node with class name "'+a+'". Fallback to "Shape".'),a="Shape");if(n=new(0,i[a])(t.attrs),o)for(s=o.length,r=0;r<s;r++)n.add(V._createNode(o[r]));return n}}V.prototype.nodeType="Node",V.prototype._attrsAffectingSize=[],V.prototype.eventListeners={},V.prototype.on.call(V.prototype,q,(function(){this._batchingTransformChange?this._needClearTransformCache=!0:(this._clearCache(X),this._clearSelfAndDescendantCache(I))})),V.prototype.on.call(V.prototype,"visibleChange.konva",(function(){this._clearSelfAndDescendantCache(j)})),V.prototype.on.call(V.prototype,"listeningChange.konva",(function(){this._clearSelfAndDescendantCache(B)})),V.prototype.on.call(V.prototype,"opacityChange.konva",(function(){this._clearSelfAndDescendantCache(D)}));const K=w.addGetterSetter;K(V,"zIndex"),K(V,"absolutePosition"),K(V,"position"),K(V,"x",0,p()),K(V,"y",0,p()),K(V,"globalCompositeOperation","source-over",y()),K(V,"opacity",1,p()),K(V,"name","",y()),K(V,"id","",y()),K(V,"rotation",0,p()),w.addComponentsGetterSetter(V,"scale",["x","y"]),K(V,"scaleX",1,p()),K(V,"scaleY",1,p()),w.addComponentsGetterSetter(V,"skew",["x","y"]),K(V,"skewX",0,p()),K(V,"skewY",0,p()),w.addComponentsGetterSetter(V,"offset",["x","y"]),K(V,"offsetX",0,p()),K(V,"offsetY",0,p()),K(V,"dragDistance",null,p()),K(V,"width",0,p()),K(V,"height",0,p()),K(V,"listening",!0,x()),K(V,"preventDefault",!0,x()),K(V,"filters",null,(function(t){return this._filterUpToDate=!1,t})),K(V,"visible",!0,x()),K(V,"transformsEnabled","all",y()),K(V,"size"),K(V,"dragBoundFunc"),K(V,"draggable",!1,x()),w.backCompat(V,{rotateDeg:"rotate",setRotationDeg:"setRotation",getRotationDeg:"getRotation"});class Q extends V{constructor(){super(...arguments),this.children=[]}getChildren(t){if(!t)return this.children||[];const e=this.children||[],i=[];return e.forEach((function(e){t(e)&&i.push(e)})),i}hasChildren(){return this.getChildren().length>0}removeChildren(){return this.getChildren().forEach((t=>{t.parent=null,t.index=0,t.remove()})),this.children=[],this._requestDraw(),this}destroyChildren(){return this.getChildren().forEach((t=>{t.parent=null,t.index=0,t.destroy()})),this.children=[],this._requestDraw(),this}add(...t){if(0===t.length)return this;if(t.length>1){for(let e=0;e<t.length;e++)this.add(t[e]);return this}const e=t[0];return e.getParent()?(e.moveTo(this),this):(this._validateAdd(e),e.index=this.getChildren().length,e.parent=this,e._clearCaches(),this.getChildren().push(e),this._fire("add",{child:e}),this._requestDraw(),this)}destroy(){return this.hasChildren()&&this.destroyChildren(),super.destroy(),this}find(t){return this._generalFind(t,!1)}findOne(t){const e=this._generalFind(t,!0);return e.length>0?e[0]:void 0}_generalFind(t,e){const i=[];return this._descendants((n=>{const s=n._isMatch(t);return s&&i.push(n),!(!s||!e)})),i}_descendants(t){let e=!1;const i=this.getChildren();for(const n of i){if(e=t(n),e)return!0;if(n.hasChildren()&&(e=n._descendants(t),e))return!0}return!1}toObject(){const t=V.prototype.toObject.call(this);return t.children=[],this.getChildren().forEach((e=>{t.children.push(e.toObject())})),t}isAncestorOf(t){let e=t.getParent();for(;e;){if(e._id===this._id)return!0;e=e.getParent()}return!1}clone(t){const e=V.prototype.clone.call(this,t);return this.getChildren().forEach((function(t){e.add(t.clone())})),e}getAllIntersections(t){const e=[];return this.find("Shape").forEach((i=>{i.isVisible()&&i.intersects(t)&&e.push(i)})),e}_clearSelfAndDescendantCache(t){var e;super._clearSelfAndDescendantCache(t),this.isCached()||null===(e=this.children)||void 0===e||e.forEach((function(e){e._clearSelfAndDescendantCache(t)}))}_setChildrenIndices(){var t;null===(t=this.children)||void 0===t||t.forEach((function(t,e){t.index=e})),this._requestDraw()}drawScene(t,e,i){const n=this.getLayer(),s=t||n&&n.getCanvas(),r=s&&s.getContext(),a=this._getCanvasCache(),o=a&&a.scene,h=s&&s.isCache;if(!this.isVisible()&&!h)return this;if(o){r.save();const t=this.getAbsoluteTransform(e).getMatrix();r.transform(t[0],t[1],t[2],t[3],t[4],t[5]),this._drawCachedSceneCanvas(r),r.restore()}else this._drawChildren("drawScene",s,e,i);return this}drawHit(t,e){if(!this.shouldDrawHit(e))return this;const i=this.getLayer(),n=t||i&&i.hitCanvas,s=n&&n.getContext(),r=this._getCanvasCache();if(r&&r.hit){s.save();const t=this.getAbsoluteTransform(e).getMatrix();s.transform(t[0],t[1],t[2],t[3],t[4],t[5]),this._drawCachedHitCanvas(s),s.restore()}else this._drawChildren("drawHit",n,e);return this}_drawChildren(t,e,i,n){var s;const r=e&&e.getContext(),a=this.clipWidth(),o=this.clipHeight(),h=this.clipFunc(),l="number"==typeof a&&"number"==typeof o||h,d=i===this;if(l){r.save();const t=this.getAbsoluteTransform(i);let e,n=t.getMatrix();if(r.transform(n[0],n[1],n[2],n[3],n[4],n[5]),r.beginPath(),h)e=h.call(this,r,this);else{const t=this.clipX(),e=this.clipY();r.rect(t||0,e||0,a,o)}r.clip.apply(r,e),n=t.copy().invert().getMatrix(),r.transform(n[0],n[1],n[2],n[3],n[4],n[5])}const c=!d&&"source-over"!==this.globalCompositeOperation()&&"drawScene"===t;c&&(r.save(),r._applyGlobalCompositeOperation(this)),null===(s=this.children)||void 0===s||s.forEach((function(s){s[t](e,i,n)})),c&&r.restore(),l&&r.restore()}getClientRect(t={}){var e;const i=t.skipTransform,n=t.relativeTo;let s,r,a,o,h={x:1/0,y:1/0,width:0,height:0};const l=this;null===(e=this.children)||void 0===e||e.forEach((function(e){if(!e.visible())return;const i=e.getClientRect({relativeTo:l,skipShadow:t.skipShadow,skipStroke:t.skipStroke});0===i.width&&0===i.height||(void 0===s?(s=i.x,r=i.y,a=i.x+i.width,o=i.y+i.height):(s=Math.min(s,i.x),r=Math.min(r,i.y),a=Math.max(a,i.x+i.width),o=Math.max(o,i.y+i.height)))}));const d=this.find("Shape");let c=!1;for(let t=0;t<d.length;t++){if(d[t]._isVisible(this)){c=!0;break}}return h=c&&void 0!==s?{x:s,y:r,width:a-s,height:o-r}:{x:0,y:0,width:0,height:0},i?h:this._transformedRect(h,n)}}w.addComponentsGetterSetter(Q,"clip",["x","y","width","height"]),w.addGetterSetter(Q,"clipX",void 0,p()),w.addGetterSetter(Q,"clipY",void 0,p()),w.addGetterSetter(Q,"clipWidth",void 0,p()),w.addGetterSetter(Q,"clipHeight",void 0,p()),w.addGetterSetter(Q,"clipFunc");const J=new Map,$=void 0!==i._global.PointerEvent;function Z(t){return J.get(t)}function tt(t){return{evt:t,pointerId:t.pointerId}}function et(t,e){return J.get(t)===e}function it(t,e){nt(t);e.getStage()&&(J.set(t,e),$&&e._fire("gotpointercapture",tt(new PointerEvent("gotpointercapture"))))}function nt(t,e){const i=J.get(t);if(!i)return;const n=i.getStage();n&&n.content,J.delete(t),$&&i._fire("lostpointercapture",tt(new PointerEvent("lostpointercapture")))}const st="mouseleave",rt="mouseover",at="mouseenter",ot="mousemove",ht="mousedown",lt="mouseup",dt="pointermove",ct="pointerdown",gt="pointerup",ut="pointercancel",ft="pointerout",pt="pointerleave",mt="pointerover",_t="pointerenter",yt="contextmenu",vt="touchstart",xt="touchend",bt="touchmove",St="touchcancel",wt="wheel",Ct=[[at,"_pointerenter"],[ht,"_pointerdown"],[ot,"_pointermove"],[lt,"_pointerup"],[st,"_pointerleave"],[vt,"_pointerdown"],[bt,"_pointermove"],[xt,"_pointerup"],[St,"_pointercancel"],[rt,"_pointerover"],[wt,"_wheel"],[yt,"_contextmenu"],[ct,"_pointerdown"],[dt,"_pointermove"],[gt,"_pointerup"],[ut,"_pointercancel"],["lostpointercapture","_lostpointercapture"]],Pt={mouse:{[ft]:"mouseout",[pt]:st,[mt]:rt,[_t]:at,[dt]:ot,[ct]:ht,[gt]:lt,[ut]:"mousecancel",pointerclick:"click",pointerdblclick:"dblclick"},touch:{[ft]:"touchout",[pt]:"touchleave",[mt]:"touchover",[_t]:"touchenter",[dt]:bt,[ct]:vt,[gt]:xt,[ut]:St,pointerclick:"tap",pointerdblclick:"dbltap"},pointer:{[ft]:ft,[pt]:pt,[mt]:mt,[_t]:_t,[dt]:dt,[ct]:ct,[gt]:gt,[ut]:ut,pointerclick:"pointerclick",pointerdblclick:"pointerdblclick"}},kt=t=>t.indexOf("pointer")>=0?"pointer":t.indexOf("touch")>=0?"touch":"mouse",At=t=>{const e=kt(t);return"pointer"===e?i.pointerEventsEnabled&&Pt.pointer:"touch"===e?Pt.touch:"mouse"===e?Pt.mouse:void 0};function Tt(t={}){return(t.clipFunc||t.clipWidth||t.clipHeight)&&g.warn("Stage does not support clipping. Please use clip for Layers or Groups."),t}const Mt=[];class Gt extends Q{constructor(t){super(Tt(t)),this._pointerPositions=[],this._changedPointerPositions=[],this._buildDOM(),this._bindContentEvents(),Mt.push(this),this.on("widthChange.konva heightChange.konva",this._resizeDOM),this.on("visibleChange.konva",this._checkVisibility),this.on("clipWidthChange.konva clipHeightChange.konva clipFuncChange.konva",(()=>{Tt(this.attrs)})),this._checkVisibility()}_validateAdd(t){const e="Layer"===t.getType(),i="FastLayer"===t.getType();e||i||g.throw("You may only add layers to the stage.")}_checkVisibility(){if(!this.content)return;const t=this.visible()?"":"none";this.content.style.display=t}setContainer(t){if("string"==typeof t){if("."===t.charAt(0)){const e=t.slice(1);t=document.getElementsByClassName(e)[0]}else{var e;e="#"!==t.charAt(0)?t:t.slice(1),t=document.getElementById(e)}if(!t)throw"Can not find container in document with id "+e}return this._setAttr("container",t),this.content&&(this.content.parentElement&&this.content.parentElement.removeChild(this.content),t.appendChild(this.content)),this}shouldDrawHit(){return!0}clear(){let t,e=this.children,i=e.length;for(t=0;t<i;t++)e[t].clear();return this}clone(t){return t||(t={}),t.container="undefined"!=typeof document&&document.createElement("div"),Q.prototype.clone.call(this,t)}destroy(){super.destroy();const t=this.content;t&&g._isInDocument(t)&&this.container().removeChild(t);const e=Mt.indexOf(this);return e>-1&&Mt.splice(e,1),g.releaseCanvas(this.bufferCanvas._canvas,this.bufferHitCanvas._canvas),this}getPointerPosition(){const t=this._pointerPositions[0]||this._changedPointerPositions[0];return t?{x:t.x,y:t.y}:(g.warn("Pointer position is missing and not registered by the stage. Looks like it is outside of the stage container. You can set it manually from event: stage.setPointersPositions(event);"),null)}_getPointerById(t){return this._pointerPositions.find((e=>e.id===t))}getPointersPositions(){return this._pointerPositions}getStage(){return this}getContent(){return this.content}_toKonvaCanvas(t){(t=t||{}).x=t.x||0,t.y=t.y||0,t.width=t.width||this.width(),t.height=t.height||this.height();const e=new G({width:t.width,height:t.height,pixelRatio:t.pixelRatio||1}),i=e.getContext()._context,n=this.children;return(t.x||t.y)&&i.translate(-1*t.x,-1*t.y),n.forEach((function(e){if(!e.isVisible())return;const n=e._toKonvaCanvas(t);i.drawImage(n._canvas,t.x,t.y,n.getWidth()/n.getPixelRatio(),n.getHeight()/n.getPixelRatio())})),e}getIntersection(t){if(!t)return null;let e,i=this.children;for(e=i.length-1;e>=0;e--){const n=i[e].getIntersection(t);if(n)return n}return null}_resizeDOM(){const t=this.width(),e=this.height();this.content&&(this.content.style.width=t+"px",this.content.style.height=e+"px"),this.bufferCanvas.setSize(t,e),this.bufferHitCanvas.setSize(t,e),this.children.forEach((i=>{i.setSize({width:t,height:e}),i.draw()}))}add(t,...e){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.add(arguments[t]);return this}super.add(t);const n=this.children.length;return n>5&&g.warn("The stage has "+n+" layers. Recommended maximum number of layers is 3-5. Adding more layers into the stage may drop the performance. Rethink your tree structure, you can use Konva.Group."),t.setSize({width:this.width(),height:this.height()}),t.draw(),i.isBrowser&&this.content.appendChild(t.canvas._canvas),this}getParent(){return null}getLayer(){return null}hasPointerCapture(t){return et(t,this)}setPointerCapture(t){it(t,this)}releaseCapture(t){nt(t)}getLayers(){return this.children}_bindContentEvents(){i.isBrowser&&Ct.forEach((([t,e])=>{this.content.addEventListener(t,(t=>{this[e](t)}),{passive:!1})}))}_pointerenter(t){this.setPointersPositions(t);const e=At(t.type);e&&this._fire(e.pointerenter,{evt:t,target:this,currentTarget:this})}_pointerover(t){this.setPointersPositions(t);const e=At(t.type);e&&this._fire(e.pointerover,{evt:t,target:this,currentTarget:this})}_getTargetShape(t){let e=this[t+"targetShape"];return e&&!e.getStage()&&(e=null),e}_pointerleave(t){const e=At(t.type),n=kt(t.type);if(!e)return;this.setPointersPositions(t);const s=this._getTargetShape(n),r=!(i.isDragging()||i.isTransforming())||i.hitOnDragEnabled;s&&r?(s._fireAndBubble(e.pointerout,{evt:t}),s._fireAndBubble(e.pointerleave,{evt:t}),this._fire(e.pointerleave,{evt:t,target:this,currentTarget:this}),this[n+"targetShape"]=null):r&&(this._fire(e.pointerleave,{evt:t,target:this,currentTarget:this}),this._fire(e.pointerout,{evt:t,target:this,currentTarget:this})),this.pointerPos=null,this._pointerPositions=[]}_pointerdown(t){const e=At(t.type),n=kt(t.type);if(!e)return;this.setPointersPositions(t);let s=!1;this._changedPointerPositions.forEach((r=>{const a=this.getIntersection(r);if(E.justDragged=!1,i["_"+n+"ListenClick"]=!0,!a||!a.isListening())return void(this[n+"ClickStartShape"]=void 0);i.capturePointerEventsEnabled&&a.setPointerCapture(r.id),this[n+"ClickStartShape"]=a,a._fireAndBubble(e.pointerdown,{evt:t,pointerId:r.id}),s=!0;const o=t.type.indexOf("touch")>=0;a.preventDefault()&&t.cancelable&&o&&t.preventDefault()})),s||this._fire(e.pointerdown,{evt:t,target:this,currentTarget:this,pointerId:this._pointerPositions[0].id})}_pointermove(t){const e=At(t.type),n=kt(t.type);if(!e)return;i.isDragging()&&E.node.preventDefault()&&t.cancelable&&t.preventDefault(),this.setPointersPositions(t);if(!(!(i.isDragging()||i.isTransforming())||i.hitOnDragEnabled))return;const s={};let r=!1;const a=this._getTargetShape(n);this._changedPointerPositions.forEach((i=>{const o=Z(i.id)||this.getIntersection(i),h=i.id,l={evt:t,pointerId:h},d=a!==o;if(d&&a&&(a._fireAndBubble(e.pointerout,{...l},o),a._fireAndBubble(e.pointerleave,{...l},o)),o){if(s[o._id])return;s[o._id]=!0}o&&o.isListening()?(r=!0,d&&(o._fireAndBubble(e.pointerover,{...l},a),o._fireAndBubble(e.pointerenter,{...l},a),this[n+"targetShape"]=o),o._fireAndBubble(e.pointermove,{...l})):a&&(this._fire(e.pointerover,{evt:t,target:this,currentTarget:this,pointerId:h}),this[n+"targetShape"]=null)})),r||this._fire(e.pointermove,{evt:t,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id})}_pointerup(t){const e=At(t.type),n=kt(t.type);if(!e)return;this.setPointersPositions(t);const s=this[n+"ClickStartShape"],r=this[n+"ClickEndShape"],a={};let o=!1;this._changedPointerPositions.forEach((h=>{const l=Z(h.id)||this.getIntersection(h);if(l){if(l.releaseCapture(h.id),a[l._id])return;a[l._id]=!0}const d=h.id,c={evt:t,pointerId:d};let g=!1;i["_"+n+"InDblClickWindow"]?(g=!0,clearTimeout(this[n+"DblTimeout"])):E.justDragged||(i["_"+n+"InDblClickWindow"]=!0,clearTimeout(this[n+"DblTimeout"])),this[n+"DblTimeout"]=setTimeout((function(){i["_"+n+"InDblClickWindow"]=!1}),i.dblClickWindow),l&&l.isListening()?(o=!0,this[n+"ClickEndShape"]=l,l._fireAndBubble(e.pointerup,{...c}),i["_"+n+"ListenClick"]&&s&&s===l&&(l._fireAndBubble(e.pointerclick,{...c}),g&&r&&r===l&&l._fireAndBubble(e.pointerdblclick,{...c}))):(this[n+"ClickEndShape"]=null,i["_"+n+"ListenClick"]&&this._fire(e.pointerclick,{evt:t,target:this,currentTarget:this,pointerId:d}),g&&this._fire(e.pointerdblclick,{evt:t,target:this,currentTarget:this,pointerId:d}))})),o||this._fire(e.pointerup,{evt:t,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id}),i["_"+n+"ListenClick"]=!1,t.cancelable&&"touch"!==n&&t.preventDefault()}_contextmenu(t){this.setPointersPositions(t);const e=this.getIntersection(this.getPointerPosition());e&&e.isListening()?e._fireAndBubble(yt,{evt:t}):this._fire(yt,{evt:t,target:this,currentTarget:this})}_wheel(t){this.setPointersPositions(t);const e=this.getIntersection(this.getPointerPosition());e&&e.isListening()?e._fireAndBubble(wt,{evt:t}):this._fire(wt,{evt:t,target:this,currentTarget:this})}_pointercancel(t){this.setPointersPositions(t);const e=Z(t.pointerId)||this.getIntersection(this.getPointerPosition());e&&e._fireAndBubble(gt,tt(t)),nt(t.pointerId)}_lostpointercapture(t){nt(t.pointerId)}setPointersPositions(t){let e=this._getContentPosition(),i=null,n=null;void 0!==(t=t||window.event).touches?(this._pointerPositions=[],this._changedPointerPositions=[],Array.prototype.forEach.call(t.touches,(t=>{this._pointerPositions.push({id:t.identifier,x:(t.clientX-e.left)/e.scaleX,y:(t.clientY-e.top)/e.scaleY})})),Array.prototype.forEach.call(t.changedTouches||t.touches,(t=>{this._changedPointerPositions.push({id:t.identifier,x:(t.clientX-e.left)/e.scaleX,y:(t.clientY-e.top)/e.scaleY})}))):(i=(t.clientX-e.left)/e.scaleX,n=(t.clientY-e.top)/e.scaleY,this.pointerPos={x:i,y:n},this._pointerPositions=[{x:i,y:n,id:g._getFirstPointerId(t)}],this._changedPointerPositions=[{x:i,y:n,id:g._getFirstPointerId(t)}])}_setPointerPosition(t){g.warn('Method _setPointerPosition is deprecated. Use "stage.setPointersPositions(event)" instead.'),this.setPointersPositions(t)}_getContentPosition(){if(!this.content||!this.content.getBoundingClientRect)return{top:0,left:0,scaleX:1,scaleY:1};const t=this.content.getBoundingClientRect();return{top:t.top,left:t.left,scaleX:t.width/this.content.clientWidth||1,scaleY:t.height/this.content.clientHeight||1}}_buildDOM(){if(this.bufferCanvas=new G({width:this.width(),height:this.height()}),this.bufferHitCanvas=new R({pixelRatio:1,width:this.width(),height:this.height()}),!i.isBrowser)return;const t=this.container();if(!t)throw"Stage has no container. A container is required.";t.innerHTML="",this.content=document.createElement("div"),this.content.style.position="relative",this.content.style.userSelect="none",this.content.className="konvajs-content",this.content.setAttribute("role","presentation"),t.appendChild(this.content),this._resizeDOM()}cache(){return g.warn("Cache function is not allowed for stage. You may use cache only for layers, groups and shapes."),this}clearCache(){return this}batchDraw(){return this.getChildren().forEach((function(t){t.batchDraw()})),this}}Gt.prototype.nodeType="Stage",n(Gt),w.addGetterSetter(Gt,"container"),i.isBrowser&&document.addEventListener("visibilitychange",(()=>{Mt.forEach((t=>{t.batchDraw()}))}));const Rt="hasShadow",Et="shadowRGBA",Dt="patternImage",Lt="linearGradient",It="radialGradient";let Ot;function Ft(){return Ot||(Ot=g.createCanvasElement().getContext("2d"),Ot)}const Bt={};class Nt extends V{constructor(t){let e;for(super(t);e=g.getRandomColor(),!e||e in Bt;);this.colorKey=e,Bt[e]=this}getContext(){return g.warn("shape.getContext() method is deprecated. Please do not use it."),this.getLayer().getContext()}getCanvas(){return g.warn("shape.getCanvas() method is deprecated. Please do not use it."),this.getLayer().getCanvas()}getSceneFunc(){return this.attrs.sceneFunc||this._sceneFunc}getHitFunc(){return this.attrs.hitFunc||this._hitFunc}hasShadow(){return this._getCache(Rt,this._hasShadow)}_hasShadow(){return this.shadowEnabled()&&0!==this.shadowOpacity()&&!!(this.shadowColor()||this.shadowBlur()||this.shadowOffsetX()||this.shadowOffsetY())}_getFillPattern(){return this._getCache(Dt,this.__getFillPattern)}__getFillPattern(){if(this.fillPatternImage()){const t=Ft().createPattern(this.fillPatternImage(),this.fillPatternRepeat()||"repeat");if(t&&t.setTransform){const e=new s;e.translate(this.fillPatternX(),this.fillPatternY()),e.rotate(i.getAngle(this.fillPatternRotation())),e.scale(this.fillPatternScaleX(),this.fillPatternScaleY()),e.translate(-1*this.fillPatternOffsetX(),-1*this.fillPatternOffsetY());const n=e.getMatrix(),r="undefined"==typeof DOMMatrix?{a:n[0],b:n[1],c:n[2],d:n[3],e:n[4],f:n[5]}:new DOMMatrix(n);t.setTransform(r)}return t}}_getLinearGradient(){return this._getCache(Lt,this.__getLinearGradient)}__getLinearGradient(){const t=this.fillLinearGradientColorStops();if(t){const e=Ft(),i=this.fillLinearGradientStartPoint(),n=this.fillLinearGradientEndPoint(),s=e.createLinearGradient(i.x,i.y,n.x,n.y);for(let e=0;e<t.length;e+=2)s.addColorStop(t[e],t[e+1]);return s}}_getRadialGradient(){return this._getCache(It,this.__getRadialGradient)}__getRadialGradient(){const t=this.fillRadialGradientColorStops();if(t){const e=Ft(),i=this.fillRadialGradientStartPoint(),n=this.fillRadialGradientEndPoint(),s=e.createRadialGradient(i.x,i.y,this.fillRadialGradientStartRadius(),n.x,n.y,this.fillRadialGradientEndRadius());for(let e=0;e<t.length;e+=2)s.addColorStop(t[e],t[e+1]);return s}}getShadowRGBA(){return this._getCache(Et,this._getShadowRGBA)}_getShadowRGBA(){if(!this.hasShadow())return;const t=g.colorToRGBA(this.shadowColor());return t?"rgba("+t.r+","+t.g+","+t.b+","+t.a*(this.shadowOpacity()||1)+")":void 0}hasFill(){return this._calculate("hasFill",["fillEnabled","fill","fillPatternImage","fillLinearGradientColorStops","fillRadialGradientColorStops"],(()=>this.fillEnabled()&&!!(this.fill()||this.fillPatternImage()||this.fillLinearGradientColorStops()||this.fillRadialGradientColorStops())))}hasStroke(){return this._calculate("hasStroke",["strokeEnabled","strokeWidth","stroke","strokeLinearGradientColorStops"],(()=>this.strokeEnabled()&&this.strokeWidth()&&!(!this.stroke()&&!this.strokeLinearGradientColorStops())))}hasHitStroke(){const t=this.hitStrokeWidth();return"auto"===t?this.hasStroke():this.strokeEnabled()&&!!t}intersects(t){const e=this.getStage();if(!e)return!1;const i=e.bufferHitCanvas;i.getContext().clear(),this.drawHit(i,void 0,!0);return i.context.getImageData(Math.round(t.x),Math.round(t.y),1,1).data[3]>0}destroy(){return V.prototype.destroy.call(this),delete Bt[this.colorKey],delete this.colorKey,this}_useBufferCanvas(t){var e;if(!(null===(e=this.attrs.perfectDrawEnabled)||void 0===e||e))return!1;const i=t||this.hasFill(),n=this.hasStroke(),s=1!==this.getAbsoluteOpacity();if(i&&n&&s)return!0;const r=this.hasShadow(),a=this.shadowForStrokeEnabled();return!!(i&&n&&r&&a)}setStrokeHitEnabled(t){g.warn("strokeHitEnabled property is deprecated. Please use hitStrokeWidth instead."),t?this.hitStrokeWidth("auto"):this.hitStrokeWidth(0)}getStrokeHitEnabled(){return 0!==this.hitStrokeWidth()}getSelfRect(){const t=this.size();return{x:this._centroid?-t.width/2:0,y:this._centroid?-t.height/2:0,width:t.width,height:t.height}}getClientRect(t={}){let e=!1,i=this.getParent();for(;i;){if(i.isCached()){e=!0;break}i=i.getParent()}const n=t.skipTransform,s=t.relativeTo||e&&this.getStage()||void 0,r=this.getSelfRect(),a=!t.skipStroke&&this.hasStroke()&&this.strokeWidth()||0,o=r.width+a,h=r.height+a,l=!t.skipShadow&&this.hasShadow(),d=l?this.shadowOffsetX():0,c=l?this.shadowOffsetY():0,g=o+Math.abs(d),u=h+Math.abs(c),f=l&&this.shadowBlur()||0,p={width:g+2*f,height:u+2*f,x:-(a/2+f)+Math.min(d,0)+r.x,y:-(a/2+f)+Math.min(c,0)+r.y};return n?p:this._transformedRect(p,s)}drawScene(t,e,i){const n=this.getLayer();let s,r,a=t||n.getCanvas(),o=a.getContext(),h=this._getCanvasCache(),l=this.getSceneFunc(),d=this.hasShadow();const c=a.isCache,g=e===this;if(!this.isVisible()&&!g)return this;if(h){o.save();const t=this.getAbsoluteTransform(e).getMatrix();return o.transform(t[0],t[1],t[2],t[3],t[4],t[5]),this._drawCachedSceneCanvas(o),o.restore(),this}if(!l)return this;if(o.save(),this._useBufferCanvas()&&!c){s=this.getStage();const t=i||s.bufferCanvas;r=t.getContext(),r.clear(),r.save(),r._applyLineJoin(this);var u=this.getAbsoluteTransform(e).getMatrix();r.transform(u[0],u[1],u[2],u[3],u[4],u[5]),l.call(this,r,this),r.restore();const n=t.pixelRatio;d&&o._applyShadow(this),o._applyOpacity(this),o._applyGlobalCompositeOperation(this),o.drawImage(t._canvas,0,0,t.width/n,t.height/n)}else{if(o._applyLineJoin(this),!g){u=this.getAbsoluteTransform(e).getMatrix();o.transform(u[0],u[1],u[2],u[3],u[4],u[5]),o._applyOpacity(this),o._applyGlobalCompositeOperation(this)}d&&o._applyShadow(this),l.call(this,o,this)}return o.restore(),this}drawHit(t,e,i=!1){if(!this.shouldDrawHit(e,i))return this;const n=this.getLayer(),s=t||n.hitCanvas,r=s&&s.getContext(),a=this.hitFunc()||this.sceneFunc(),o=this._getCanvasCache(),h=o&&o.hit;if(this.colorKey||g.warn("Looks like your canvas has a destroyed shape in it. Do not reuse shape after you destroyed it. If you want to reuse shape you should call remove() instead of destroy()"),h){r.save();const t=this.getAbsoluteTransform(e).getMatrix();return r.transform(t[0],t[1],t[2],t[3],t[4],t[5]),this._drawCachedHitCanvas(r),r.restore(),this}if(!a)return this;r.save(),r._applyLineJoin(this);if(!(this===e)){const t=this.getAbsoluteTransform(e).getMatrix();r.transform(t[0],t[1],t[2],t[3],t[4],t[5])}return a.call(this,r,this),r.restore(),this}drawHitFromCache(t=0){let e,i,n,s,r,a,o=this._getCanvasCache(),h=this._getCachedSceneCanvas(),l=o.hit,d=l.getContext(),c=l.getWidth(),u=l.getHeight();d.clear(),d.drawImage(h._canvas,0,0,c,u);try{for(e=d.getImageData(0,0,c,u),i=e.data,n=i.length,s=g._hexToRgb(this.colorKey),r=0;r<n;r+=4)a=i[r+3],a>t?(i[r]=s.r,i[r+1]=s.g,i[r+2]=s.b,i[r+3]=255):i[r+3]=0;d.putImageData(e,0,0)}catch(t){g.error("Unable to draw hit graph from cached scene canvas. "+t.message)}return this}hasPointerCapture(t){return et(t,this)}setPointerCapture(t){it(t,this)}releaseCapture(t){nt(t)}}Nt.prototype._fillFunc=function(t){const e=this.attrs.fillRule;e?t.fill(e):t.fill()},Nt.prototype._strokeFunc=function(t){t.stroke()},Nt.prototype._fillFuncHit=function(t){const e=this.attrs.fillRule;e?t.fill(e):t.fill()},Nt.prototype._strokeFuncHit=function(t){t.stroke()},Nt.prototype._centroid=!1,Nt.prototype.nodeType="Shape",n(Nt),Nt.prototype.eventListeners={},Nt.prototype.on.call(Nt.prototype,"shadowColorChange.konva shadowBlurChange.konva shadowOffsetChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",(function(){this._clearCache(Rt)})),Nt.prototype.on.call(Nt.prototype,"shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",(function(){this._clearCache(Et)})),Nt.prototype.on.call(Nt.prototype,"fillPriorityChange.konva fillPatternImageChange.konva fillPatternRepeatChange.konva fillPatternScaleXChange.konva fillPatternScaleYChange.konva fillPatternOffsetXChange.konva fillPatternOffsetYChange.konva fillPatternXChange.konva fillPatternYChange.konva fillPatternRotationChange.konva",(function(){this._clearCache(Dt)})),Nt.prototype.on.call(Nt.prototype,"fillPriorityChange.konva fillLinearGradientColorStopsChange.konva fillLinearGradientStartPointXChange.konva fillLinearGradientStartPointYChange.konva fillLinearGradientEndPointXChange.konva fillLinearGradientEndPointYChange.konva",(function(){this._clearCache(Lt)})),Nt.prototype.on.call(Nt.prototype,"fillPriorityChange.konva fillRadialGradientColorStopsChange.konva fillRadialGradientStartPointXChange.konva fillRadialGradientStartPointYChange.konva fillRadialGradientEndPointXChange.konva fillRadialGradientEndPointYChange.konva fillRadialGradientStartRadiusChange.konva fillRadialGradientEndRadiusChange.konva",(function(){this._clearCache(It)})),w.addGetterSetter(Nt,"stroke",void 0,v()),w.addGetterSetter(Nt,"strokeWidth",2,p()),w.addGetterSetter(Nt,"fillAfterStrokeEnabled",!1),w.addGetterSetter(Nt,"hitStrokeWidth","auto",_()),w.addGetterSetter(Nt,"strokeHitEnabled",!0,x()),w.addGetterSetter(Nt,"perfectDrawEnabled",!0,x()),w.addGetterSetter(Nt,"shadowForStrokeEnabled",!0,x()),w.addGetterSetter(Nt,"lineJoin"),w.addGetterSetter(Nt,"lineCap"),w.addGetterSetter(Nt,"sceneFunc"),w.addGetterSetter(Nt,"hitFunc"),w.addGetterSetter(Nt,"dash"),w.addGetterSetter(Nt,"dashOffset",0,p()),w.addGetterSetter(Nt,"shadowColor",void 0,y()),w.addGetterSetter(Nt,"shadowBlur",0,p()),w.addGetterSetter(Nt,"shadowOpacity",1,p()),w.addComponentsGetterSetter(Nt,"shadowOffset",["x","y"]),w.addGetterSetter(Nt,"shadowOffsetX",0,p()),w.addGetterSetter(Nt,"shadowOffsetY",0,p()),w.addGetterSetter(Nt,"fillPatternImage"),w.addGetterSetter(Nt,"fill",void 0,v()),w.addGetterSetter(Nt,"fillPatternX",0,p()),w.addGetterSetter(Nt,"fillPatternY",0,p()),w.addGetterSetter(Nt,"fillLinearGradientColorStops"),w.addGetterSetter(Nt,"strokeLinearGradientColorStops"),w.addGetterSetter(Nt,"fillRadialGradientStartRadius",0),w.addGetterSetter(Nt,"fillRadialGradientEndRadius",0),w.addGetterSetter(Nt,"fillRadialGradientColorStops"),w.addGetterSetter(Nt,"fillPatternRepeat","repeat"),w.addGetterSetter(Nt,"fillEnabled",!0),w.addGetterSetter(Nt,"strokeEnabled",!0),w.addGetterSetter(Nt,"shadowEnabled",!0),w.addGetterSetter(Nt,"dashEnabled",!0),w.addGetterSetter(Nt,"strokeScaleEnabled",!0),w.addGetterSetter(Nt,"fillPriority","color"),w.addComponentsGetterSetter(Nt,"fillPatternOffset",["x","y"]),w.addGetterSetter(Nt,"fillPatternOffsetX",0,p()),w.addGetterSetter(Nt,"fillPatternOffsetY",0,p()),w.addComponentsGetterSetter(Nt,"fillPatternScale",["x","y"]),w.addGetterSetter(Nt,"fillPatternScaleX",1,p()),w.addGetterSetter(Nt,"fillPatternScaleY",1,p()),w.addComponentsGetterSetter(Nt,"fillLinearGradientStartPoint",["x","y"]),w.addComponentsGetterSetter(Nt,"strokeLinearGradientStartPoint",["x","y"]),w.addGetterSetter(Nt,"fillLinearGradientStartPointX",0),w.addGetterSetter(Nt,"strokeLinearGradientStartPointX",0),w.addGetterSetter(Nt,"fillLinearGradientStartPointY",0),w.addGetterSetter(Nt,"strokeLinearGradientStartPointY",0),w.addComponentsGetterSetter(Nt,"fillLinearGradientEndPoint",["x","y"]),w.addComponentsGetterSetter(Nt,"strokeLinearGradientEndPoint",["x","y"]),w.addGetterSetter(Nt,"fillLinearGradientEndPointX",0),w.addGetterSetter(Nt,"strokeLinearGradientEndPointX",0),w.addGetterSetter(Nt,"fillLinearGradientEndPointY",0),w.addGetterSetter(Nt,"strokeLinearGradientEndPointY",0),w.addComponentsGetterSetter(Nt,"fillRadialGradientStartPoint",["x","y"]),w.addGetterSetter(Nt,"fillRadialGradientStartPointX",0),w.addGetterSetter(Nt,"fillRadialGradientStartPointY",0),w.addComponentsGetterSetter(Nt,"fillRadialGradientEndPoint",["x","y"]),w.addGetterSetter(Nt,"fillRadialGradientEndPointX",0),w.addGetterSetter(Nt,"fillRadialGradientEndPointY",0),w.addGetterSetter(Nt,"fillPatternRotation",0),w.addGetterSetter(Nt,"fillRule",void 0,y()),w.backCompat(Nt,{dashArray:"dash",getDashArray:"getDash",setDashArray:"getDash",drawFunc:"sceneFunc",getDrawFunc:"getSceneFunc",setDrawFunc:"setSceneFunc",drawHitFunc:"hitFunc",getDrawHitFunc:"getHitFunc",setDrawHitFunc:"setHitFunc"});const Ht=[{x:0,y:0},{x:-1,y:-1},{x:1,y:-1},{x:1,y:1},{x:-1,y:1}],Wt=Ht.length;class zt extends Q{constructor(t){super(t),this.canvas=new G,this.hitCanvas=new R({pixelRatio:1}),this._waitingForDraw=!1,this.on("visibleChange.konva",this._checkVisibility),this._checkVisibility(),this.on("imageSmoothingEnabledChange.konva",this._setSmoothEnabled),this._setSmoothEnabled()}createPNGStream(){return this.canvas._canvas.createPNGStream()}getCanvas(){return this.canvas}getNativeCanvasElement(){return this.canvas._canvas}getHitCanvas(){return this.hitCanvas}getContext(){return this.getCanvas().getContext()}clear(t){return this.getContext().clear(t),this.getHitCanvas().getContext().clear(t),this}setZIndex(t){super.setZIndex(t);const e=this.getStage();return e&&e.content&&(e.content.removeChild(this.getNativeCanvasElement()),t<e.children.length-1?e.content.insertBefore(this.getNativeCanvasElement(),e.children[t+1].getCanvas()._canvas):e.content.appendChild(this.getNativeCanvasElement())),this}moveToTop(){V.prototype.moveToTop.call(this);const t=this.getStage();return t&&t.content&&(t.content.removeChild(this.getNativeCanvasElement()),t.content.appendChild(this.getNativeCanvasElement())),!0}moveUp(){if(!V.prototype.moveUp.call(this))return!1;const t=this.getStage();return!(!t||!t.content)&&(t.content.removeChild(this.getNativeCanvasElement()),this.index<t.children.length-1?t.content.insertBefore(this.getNativeCanvasElement(),t.children[this.index+1].getCanvas()._canvas):t.content.appendChild(this.getNativeCanvasElement()),!0)}moveDown(){if(V.prototype.moveDown.call(this)){const t=this.getStage();if(t){const e=t.children;t.content&&(t.content.removeChild(this.getNativeCanvasElement()),t.content.insertBefore(this.getNativeCanvasElement(),e[this.index+1].getCanvas()._canvas))}return!0}return!1}moveToBottom(){if(V.prototype.moveToBottom.call(this)){const t=this.getStage();if(t){const e=t.children;t.content&&(t.content.removeChild(this.getNativeCanvasElement()),t.content.insertBefore(this.getNativeCanvasElement(),e[1].getCanvas()._canvas))}return!0}return!1}getLayer(){return this}remove(){const t=this.getNativeCanvasElement();return V.prototype.remove.call(this),t&&t.parentNode&&g._isInDocument(t)&&t.parentNode.removeChild(t),this}getStage(){return this.parent}setSize({width:t,height:e}){return this.canvas.setSize(t,e),this.hitCanvas.setSize(t,e),this._setSmoothEnabled(),this}_validateAdd(t){const e=t.getType();"Group"!==e&&"Shape"!==e&&g.throw("You may only add groups and shapes to a layer.")}_toKonvaCanvas(t){return(t=t||{}).width=t.width||this.getWidth(),t.height=t.height||this.getHeight(),t.x=void 0!==t.x?t.x:this.x(),t.y=void 0!==t.y?t.y:this.y(),V.prototype._toKonvaCanvas.call(this,t)}_checkVisibility(){const t=this.visible();this.canvas._canvas.style.display=t?"block":"none"}_setSmoothEnabled(){this.getContext()._context.imageSmoothingEnabled=this.imageSmoothingEnabled()}getWidth(){if(this.parent)return this.parent.width()}setWidth(){g.warn('Can not change width of layer. Use "stage.width(value)" function instead.')}getHeight(){if(this.parent)return this.parent.height()}setHeight(){g.warn('Can not change height of layer. Use "stage.height(value)" function instead.')}batchDraw(){return this._waitingForDraw||(this._waitingForDraw=!0,g.requestAnimFrame((()=>{this.draw(),this._waitingForDraw=!1}))),this}getIntersection(t){if(!this.isListening()||!this.isVisible())return null;let e=1,i=!1;for(;;){for(let n=0;n<Wt;n++){const s=Ht[n],r=this._getIntersection({x:t.x+s.x*e,y:t.y+s.y*e}),a=r.shape;if(a)return a;if(i=!!r.antialiased,!r.antialiased)break}if(!i)return null;e+=1}}_getIntersection(t){const e=this.hitCanvas.pixelRatio,i=this.hitCanvas.context.getImageData(Math.round(t.x*e),Math.round(t.y*e),1,1).data,n=i[3];if(255===n){const t=g._rgbToHex(i[0],i[1],i[2]),e=Bt["#"+t];return e?{shape:e}:{antialiased:!0}}return n>0?{antialiased:!0}:{}}drawScene(t,e){const i=this.getLayer(),n=t||i&&i.getCanvas();return this._fire("beforeDraw",{node:this}),this.clearBeforeDraw()&&n.getContext().clear(),Q.prototype.drawScene.call(this,n,e),this._fire("draw",{node:this}),this}drawHit(t,e){const i=this.getLayer(),n=t||i&&i.hitCanvas;return i&&i.clearBeforeDraw()&&i.getHitCanvas().getContext().clear(),Q.prototype.drawHit.call(this,n,e),this}enableHitGraph(){return this.hitGraphEnabled(!0),this}disableHitGraph(){return this.hitGraphEnabled(!1),this}setHitGraphEnabled(t){g.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening(t)}getHitGraphEnabled(t){return g.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening()}toggleHitCanvas(){if(!this.parent||!this.parent.content)return;const t=this.parent;!!this.hitCanvas._canvas.parentNode?t.content.removeChild(this.hitCanvas._canvas):t.content.appendChild(this.hitCanvas._canvas)}destroy(){return g.releaseCanvas(this.getNativeCanvasElement(),this.getHitCanvas()._canvas),super.destroy()}}zt.prototype.nodeType="Layer",n(zt),w.addGetterSetter(zt,"imageSmoothingEnabled",!0),w.addGetterSetter(zt,"clearBeforeDraw",!0),w.addGetterSetter(zt,"hitGraphEnabled",!0,x());class Yt extends zt{constructor(t){super(t),this.listening(!1),g.warn('Konva.Fast layer is deprecated. Please use "new Konva.Layer({ listening: false })" instead.')}}Yt.prototype.nodeType="FastLayer",n(Yt);class Xt extends Q{_validateAdd(t){const e=t.getType();"Group"!==e&&"Shape"!==e&&g.throw("You may only add groups and shapes to groups.")}}Xt.prototype.nodeType="Group",n(Xt);const jt=e.performance&&e.performance.now?function(){return e.performance.now()}:function(){return(new Date).getTime()};class qt{constructor(t,e){this.id=qt.animIdCounter++,this.frame={time:0,timeDiff:0,lastTime:jt(),frameRate:0},this.func=t,this.setLayers(e)}setLayers(t){let e=[];return t&&(e=Array.isArray(t)?t:[t]),this.layers=e,this}getLayers(){return this.layers}addLayer(t){const e=this.layers,i=e.length;for(let n=0;n<i;n++)if(e[n]._id===t._id)return!1;return this.layers.push(t),!0}isRunning(){const t=qt.animations,e=t.length;for(let i=0;i<e;i++)if(t[i].id===this.id)return!0;return!1}start(){return this.stop(),this.frame.timeDiff=0,this.frame.lastTime=jt(),qt._addAnimation(this),this}stop(){return qt._removeAnimation(this),this}_updateFrameObject(t){this.frame.timeDiff=t-this.frame.lastTime,this.frame.lastTime=t,this.frame.time+=this.frame.timeDiff,this.frame.frameRate=1e3/this.frame.timeDiff}static _addAnimation(t){this.animations.push(t),this._handleAnimation()}static _removeAnimation(t){const e=t.id,i=this.animations,n=i.length;for(let t=0;t<n;t++)if(i[t].id===e){this.animations.splice(t,1);break}}static _runFrames(){const t={},e=this.animations;for(let i=0;i<e.length;i++){const n=e[i],s=n.layers,r=n.func;n._updateFrameObject(jt());const a=s.length;let o;if(o=!r||!1!==r.call(n,n.frame),o)for(let e=0;e<a;e++){const i=s[e];void 0!==i._id&&(t[i._id]=i)}}for(const e in t)t.hasOwnProperty(e)&&t[e].batchDraw()}static _animationLoop(){const t=qt;t.animations.length?(t._runFrames(),g.requestAnimFrame(t._animationLoop)):t.animRunning=!1}static _handleAnimation(){this.animRunning||(this.animRunning=!0,g.requestAnimFrame(this._animationLoop))}}qt.animations=[],qt.animIdCounter=0,qt.animRunning=!1;let Ut={node:1,duration:1,easing:1,onFinish:1,yoyo:1},Vt=0,Kt=["fill","stroke","shadowColor"];class Qt{constructor(t,e,i,n,s,r,a){this.prop=t,this.propFunc=e,this.begin=n,this._pos=n,this.duration=r,this._change=0,this.prevPos=0,this.yoyo=a,this._time=0,this._position=0,this._startTime=0,this._finish=0,this.func=i,this._change=s-this.begin,this.pause()}fire(t){const e=this[t];e&&e()}setTime(t){t>this.duration?this.yoyo?(this._time=this.duration,this.reverse()):this.finish():t<0?this.yoyo?(this._time=0,this.play()):this.reset():(this._time=t,this.update())}getTime(){return this._time}setPosition(t){this.prevPos=this._pos,this.propFunc(t),this._pos=t}getPosition(t){return void 0===t&&(t=this._time),this.func(t,this.begin,this._change,this.duration)}play(){this.state=2,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire("onPlay")}reverse(){this.state=3,this._time=this.duration-this._time,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire("onReverse")}seek(t){this.pause(),this._time=t,this.update(),this.fire("onSeek")}reset(){this.pause(),this._time=0,this.update(),this.fire("onReset")}finish(){this.pause(),this._time=this.duration,this.update(),this.fire("onFinish")}update(){this.setPosition(this.getPosition(this._time)),this.fire("onUpdate")}onEnterFrame(){const t=this.getTimer()-this._startTime;2===this.state?this.setTime(t):3===this.state&&this.setTime(this.duration-t)}pause(){this.state=1,this.fire("onPause")}getTimer(){return(new Date).getTime()}}class Jt{constructor(t){let e,n,s=this,r=t.node,a=r._id,o=t.easing||$t.Linear,h=!!t.yoyo;e=void 0===t.duration?.3:0===t.duration?.001:t.duration,this.node=r,this._id=Vt++;const l=r.getLayer()||(r instanceof i.Stage?r.getLayers():null);for(n in l||g.error("Tween constructor have `node` that is not in a layer. Please add node into layer first."),this.anim=new qt((function(){s.tween.onEnterFrame()}),l),this.tween=new Qt(n,(function(t){s._tweenFunc(t)}),o,0,1,1e3*e,h),this._addListeners(),Jt.attrs[a]||(Jt.attrs[a]={}),Jt.attrs[a][this._id]||(Jt.attrs[a][this._id]={}),Jt.tweens[a]||(Jt.tweens[a]={}),t)void 0===Ut[n]&&this._addAttr(n,t[n]);this.reset(),this.onFinish=t.onFinish,this.onReset=t.onReset,this.onUpdate=t.onUpdate}_addAttr(t,e){let i,n,s,r,a,o,h,l,d=this.node,c=d._id;if(s=Jt.tweens[c][t],s&&delete Jt.attrs[c][s][t],i=d.getAttr(t),g._isArray(e))if(n=[],a=Math.max(e.length,i.length),"points"===t&&e.length!==i.length&&(e.length>i.length?(h=i,i=g._prepareArrayForTween(i,e,d.closed())):(o=e,e=g._prepareArrayForTween(e,i,d.closed()))),0===t.indexOf("fill"))for(r=0;r<a;r++)if(r%2==0)n.push(e[r]-i[r]);else{const t=g.colorToRGBA(i[r]);l=g.colorToRGBA(e[r]),i[r]=t,n.push({r:l.r-t.r,g:l.g-t.g,b:l.b-t.b,a:l.a-t.a})}else for(r=0;r<a;r++)n.push(e[r]-i[r]);else-1!==Kt.indexOf(t)?(i=g.colorToRGBA(i),l=g.colorToRGBA(e),n={r:l.r-i.r,g:l.g-i.g,b:l.b-i.b,a:l.a-i.a}):n=e-i;Jt.attrs[c][this._id][t]={start:i,diff:n,end:e,trueEnd:o,trueStart:h},Jt.tweens[c][t]=this._id}_tweenFunc(t){let e,i,n,s,r,a,o,h,l=this.node,d=Jt.attrs[l._id][this._id];for(e in d){if(i=d[e],n=i.start,s=i.diff,h=i.end,g._isArray(n))if(r=[],o=Math.max(n.length,h.length),0===e.indexOf("fill"))for(a=0;a<o;a++)a%2==0?r.push((n[a]||0)+s[a]*t):r.push("rgba("+Math.round(n[a].r+s[a].r*t)+","+Math.round(n[a].g+s[a].g*t)+","+Math.round(n[a].b+s[a].b*t)+","+(n[a].a+s[a].a*t)+")");else for(a=0;a<o;a++)r.push((n[a]||0)+s[a]*t);else r=-1!==Kt.indexOf(e)?"rgba("+Math.round(n.r+s.r*t)+","+Math.round(n.g+s.g*t)+","+Math.round(n.b+s.b*t)+","+(n.a+s.a*t)+")":n+s*t;l.setAttr(e,r)}}_addListeners(){this.tween.onPlay=()=>{this.anim.start()},this.tween.onReverse=()=>{this.anim.start()},this.tween.onPause=()=>{this.anim.stop()},this.tween.onFinish=()=>{const t=this.node,e=Jt.attrs[t._id][this._id];e.points&&e.points.trueEnd&&t.setAttr("points",e.points.trueEnd),this.onFinish&&this.onFinish.call(this)},this.tween.onReset=()=>{const t=this.node,e=Jt.attrs[t._id][this._id];e.points&&e.points.trueStart&&t.points(e.points.trueStart),this.onReset&&this.onReset()},this.tween.onUpdate=()=>{this.onUpdate&&this.onUpdate.call(this)}}play(){return this.tween.play(),this}reverse(){return this.tween.reverse(),this}reset(){return this.tween.reset(),this}seek(t){return this.tween.seek(1e3*t),this}pause(){return this.tween.pause(),this}finish(){return this.tween.finish(),this}destroy(){let t,e=this.node._id,i=this._id,n=Jt.tweens[e];for(t in this.pause(),n)delete Jt.tweens[e][t];delete Jt.attrs[e][i]}}Jt.attrs={},Jt.tweens={},V.prototype.to=function(t){const e=t.onFinish;t.node=this,t.onFinish=function(){this.destroy(),e&&e()};new Jt(t).play()};const $t={BackEaseIn(t,e,i,n){const s=1.70158;return i*(t/=n)*t*((s+1)*t-s)+e},BackEaseOut(t,e,i,n){const s=1.70158;return i*((t=t/n-1)*t*((s+1)*t+s)+1)+e},BackEaseInOut(t,e,i,n){let s=1.70158;return(t/=n/2)<1?i/2*(t*t*((1+(s*=1.525))*t-s))+e:i/2*((t-=2)*t*((1+(s*=1.525))*t+s)+2)+e},ElasticEaseIn(t,e,i,n,s,r){let a=0;return 0===t?e:1==(t/=n)?e+i:(r||(r=.3*n),!s||s<Math.abs(i)?(s=i,a=r/4):a=r/(2*Math.PI)*Math.asin(i/s),-s*Math.pow(2,10*(t-=1))*Math.sin((t*n-a)*(2*Math.PI)/r)+e)},ElasticEaseOut(t,e,i,n,s,r){let a=0;return 0===t?e:1==(t/=n)?e+i:(r||(r=.3*n),!s||s<Math.abs(i)?(s=i,a=r/4):a=r/(2*Math.PI)*Math.asin(i/s),s*Math.pow(2,-10*t)*Math.sin((t*n-a)*(2*Math.PI)/r)+i+e)},ElasticEaseInOut(t,e,i,n,s,r){let a=0;return 0===t?e:2==(t/=n/2)?e+i:(r||(r=n*(.3*1.5)),!s||s<Math.abs(i)?(s=i,a=r/4):a=r/(2*Math.PI)*Math.asin(i/s),t<1?s*Math.pow(2,10*(t-=1))*Math.sin((t*n-a)*(2*Math.PI)/r)*-.5+e:s*Math.pow(2,-10*(t-=1))*Math.sin((t*n-a)*(2*Math.PI)/r)*.5+i+e)},BounceEaseOut:(t,e,i,n)=>(t/=n)<1/2.75?i*(7.5625*t*t)+e:t<2/2.75?i*(7.5625*(t-=1.5/2.75)*t+.75)+e:t<2.5/2.75?i*(7.5625*(t-=2.25/2.75)*t+.9375)+e:i*(7.5625*(t-=2.625/2.75)*t+.984375)+e,BounceEaseIn:(t,e,i,n)=>i-$t.BounceEaseOut(n-t,0,i,n)+e,BounceEaseInOut:(t,e,i,n)=>t<n/2?.5*$t.BounceEaseIn(2*t,0,i,n)+e:.5*$t.BounceEaseOut(2*t-n,0,i,n)+.5*i+e,EaseIn:(t,e,i,n)=>i*(t/=n)*t+e,EaseOut:(t,e,i,n)=>-i*(t/=n)*(t-2)+e,EaseInOut:(t,e,i,n)=>(t/=n/2)<1?i/2*t*t+e:-i/2*(--t*(t-2)-1)+e,StrongEaseIn:(t,e,i,n)=>i*(t/=n)*t*t*t*t+e,StrongEaseOut:(t,e,i,n)=>i*((t=t/n-1)*t*t*t*t+1)+e,StrongEaseInOut:(t,e,i,n)=>(t/=n/2)<1?i/2*t*t*t*t*t+e:i/2*((t-=2)*t*t*t*t+2)+e,Linear:(t,e,i,n)=>i*t/n+e},Zt=g._assign(i,{Util:g,Transform:s,Node:V,Container:Q,Stage:Gt,stages:Mt,Layer:zt,FastLayer:Yt,Group:Xt,DD:E,Shape:Nt,shapes:Bt,Animation:qt,Tween:Jt,Easings:$t,Context:P,Canvas:M});class te extends Nt{_sceneFunc(t){const e=i.getAngle(this.angle()),n=this.clockwise();t.beginPath(),t.arc(0,0,this.outerRadius(),0,e,n),t.arc(0,0,this.innerRadius(),e,0,!n),t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*this.outerRadius()}getHeight(){return 2*this.outerRadius()}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}getSelfRect(){const t=this.innerRadius(),e=this.outerRadius(),n=this.clockwise(),s=i.getAngle(n?360-this.angle():this.angle()),r=Math.cos(Math.min(s,Math.PI)),a=Math.sin(Math.min(Math.max(Math.PI,s),3*Math.PI/2)),o=Math.sin(Math.min(s,Math.PI/2)),h=r*(r>0?t:e),l=a*(a>0?t:e),d=o*(o>0?e:t);return{x:h,y:n?-1*d:l,width:1*e-h,height:d-l}}}function ee(t,e,i,n,s,r,a){const o=Math.sqrt(Math.pow(i-t,2)+Math.pow(n-e,2)),h=Math.sqrt(Math.pow(s-i,2)+Math.pow(r-n,2)),l=a*o/(o+h),d=a*h/(o+h);return[i-l*(s-t),n-l*(r-e),i+d*(s-t),n+d*(r-e)]}function ie(t,e){const i=t.length,n=[];for(let s=2;s<i-2;s+=2){const i=ee(t[s-2],t[s-1],t[s],t[s+1],t[s+2],t[s+3],e);isNaN(i[0])||(n.push(i[0]),n.push(i[1]),n.push(t[s]),n.push(t[s+1]),n.push(i[2]),n.push(i[3]))}return n}te.prototype._centroid=!0,te.prototype.className="Arc",te.prototype._attrsAffectingSize=["innerRadius","outerRadius"],n(te),w.addGetterSetter(te,"innerRadius",0,p()),w.addGetterSetter(te,"outerRadius",0,p()),w.addGetterSetter(te,"angle",0,p()),w.addGetterSetter(te,"clockwise",!1,x());class ne extends Nt{constructor(t){super(t),this.on("pointsChange.konva tensionChange.konva closedChange.konva bezierChange.konva",(function(){this._clearCache("tensionPoints")}))}_sceneFunc(t){let e,i,n,s=this.points(),r=s.length,a=this.tension(),o=this.closed(),h=this.bezier();if(r){if(t.beginPath(),t.moveTo(s[0],s[1]),0!==a&&r>4){for(e=this.getTensionPoints(),i=e.length,n=o?0:4,o||t.quadraticCurveTo(e[0],e[1],e[2],e[3]);n<i-2;)t.bezierCurveTo(e[n++],e[n++],e[n++],e[n++],e[n++],e[n++]);o||t.quadraticCurveTo(e[i-2],e[i-1],s[r-2],s[r-1])}else if(h)for(n=2;n<r;)t.bezierCurveTo(s[n++],s[n++],s[n++],s[n++],s[n++],s[n++]);else for(n=2;n<r;n+=2)t.lineTo(s[n],s[n+1]);o?(t.closePath(),t.fillStrokeShape(this)):t.strokeShape(this)}}getTensionPoints(){return this._getCache("tensionPoints",this._getTensionPoints)}_getTensionPoints(){return this.closed()?this._getTensionPointsClosed():ie(this.points(),this.tension())}_getTensionPointsClosed(){const t=this.points(),e=t.length,i=this.tension(),n=ee(t[e-2],t[e-1],t[0],t[1],t[2],t[3],i),s=ee(t[e-4],t[e-3],t[e-2],t[e-1],t[0],t[1],i),r=ie(t,i);return[n[2],n[3]].concat(r).concat([s[0],s[1],t[e-2],t[e-1],s[2],s[3],n[0],n[1],t[0],t[1]])}getWidth(){return this.getSelfRect().width}getHeight(){return this.getSelfRect().height}getSelfRect(){let t=this.points();if(t.length<4)return{x:t[0]||0,y:t[1]||0,width:0,height:0};t=0!==this.tension()?[t[0],t[1],...this._getTensionPoints(),t[t.length-2],t[t.length-1]]:this.points();let e,i,n=t[0],s=t[0],r=t[1],a=t[1];for(let o=0;o<t.length/2;o++)e=t[2*o],i=t[2*o+1],n=Math.min(n,e),s=Math.max(s,e),r=Math.min(r,i),a=Math.max(a,i);return{x:n,y:r,width:s-n,height:a-r}}}ne.prototype.className="Line",ne.prototype._attrsAffectingSize=["points","bezier","tension"],n(ne),w.addGetterSetter(ne,"closed",!1),w.addGetterSetter(ne,"bezier",!1),w.addGetterSetter(ne,"tension",0,p()),w.addGetterSetter(ne,"points",[],function(){if(i.isUnminified)return function(t,e){const i=Int8Array?Object.getPrototypeOf(Int8Array):null;return i&&t instanceof i||(g._isArray(t)?t.forEach((function(t){g._isNumber(t)||g.warn('"'+e+'" attribute has non numeric element '+t+". Make sure that all elements are numbers.")})):g.warn(u(t)+' is a not valid value for "'+e+'" attribute. The value should be a array of numbers.')),t}}());const se=[[],[],[-.5773502691896257,.5773502691896257],[0,-.7745966692414834,.7745966692414834],[-.33998104358485626,.33998104358485626,-.8611363115940526,.8611363115940526],[0,-.5384693101056831,.5384693101056831,-.906179845938664,.906179845938664],[.6612093864662645,-.6612093864662645,-.2386191860831969,.2386191860831969,-.932469514203152,.932469514203152],[0,.4058451513773972,-.4058451513773972,-.7415311855993945,.7415311855993945,-.9491079123427585,.9491079123427585],[-.1834346424956498,.1834346424956498,-.525532409916329,.525532409916329,-.7966664774136267,.7966664774136267,-.9602898564975363,.9602898564975363],[0,-.8360311073266358,.8360311073266358,-.9681602395076261,.9681602395076261,-.3242534234038089,.3242534234038089,-.6133714327005904,.6133714327005904],[-.14887433898163122,.14887433898163122,-.4333953941292472,.4333953941292472,-.6794095682990244,.6794095682990244,-.8650633666889845,.8650633666889845,-.9739065285171717,.9739065285171717],[0,-.26954315595234496,.26954315595234496,-.5190961292068118,.5190961292068118,-.7301520055740494,.7301520055740494,-.8870625997680953,.8870625997680953,-.978228658146057,.978228658146057],[-.1252334085114689,.1252334085114689,-.3678314989981802,.3678314989981802,-.5873179542866175,.5873179542866175,-.7699026741943047,.7699026741943047,-.9041172563704749,.9041172563704749,-.9815606342467192,.9815606342467192],[0,-.2304583159551348,.2304583159551348,-.44849275103644687,.44849275103644687,-.6423493394403402,.6423493394403402,-.8015780907333099,.8015780907333099,-.9175983992229779,.9175983992229779,-.9841830547185881,.9841830547185881],[-.10805494870734367,.10805494870734367,-.31911236892788974,.31911236892788974,-.5152486363581541,.5152486363581541,-.6872929048116855,.6872929048116855,-.827201315069765,.827201315069765,-.9284348836635735,.9284348836635735,-.9862838086968123,.9862838086968123],[0,-.20119409399743451,.20119409399743451,-.3941513470775634,.3941513470775634,-.5709721726085388,.5709721726085388,-.7244177313601701,.7244177313601701,-.8482065834104272,.8482065834104272,-.937273392400706,.937273392400706,-.9879925180204854,.9879925180204854],[-.09501250983763744,.09501250983763744,-.2816035507792589,.2816035507792589,-.45801677765722737,.45801677765722737,-.6178762444026438,.6178762444026438,-.755404408355003,.755404408355003,-.8656312023878318,.8656312023878318,-.9445750230732326,.9445750230732326,-.9894009349916499,.9894009349916499],[0,-.17848418149584785,.17848418149584785,-.3512317634538763,.3512317634538763,-.5126905370864769,.5126905370864769,-.6576711592166907,.6576711592166907,-.7815140038968014,.7815140038968014,-.8802391537269859,.8802391537269859,-.9506755217687678,.9506755217687678,-.9905754753144174,.9905754753144174],[-.0847750130417353,.0847750130417353,-.2518862256915055,.2518862256915055,-.41175116146284263,.41175116146284263,-.5597708310739475,.5597708310739475,-.6916870430603532,.6916870430603532,-.8037049589725231,.8037049589725231,-.8926024664975557,.8926024664975557,-.9558239495713977,.9558239495713977,-.9915651684209309,.9915651684209309],[0,-.16035864564022537,.16035864564022537,-.31656409996362983,.31656409996362983,-.46457074137596094,.46457074137596094,-.600545304661681,.600545304661681,-.7209661773352294,.7209661773352294,-.8227146565371428,.8227146565371428,-.9031559036148179,.9031559036148179,-.96020815213483,.96020815213483,-.9924068438435844,.9924068438435844],[-.07652652113349734,.07652652113349734,-.22778585114164507,.22778585114164507,-.37370608871541955,.37370608871541955,-.5108670019508271,.5108670019508271,-.636053680726515,.636053680726515,-.7463319064601508,.7463319064601508,-.8391169718222188,.8391169718222188,-.912234428251326,.912234428251326,-.9639719272779138,.9639719272779138,-.9931285991850949,.9931285991850949],[0,-.1455618541608951,.1455618541608951,-.2880213168024011,.2880213168024011,-.4243421202074388,.4243421202074388,-.5516188358872198,.5516188358872198,-.6671388041974123,.6671388041974123,-.7684399634756779,.7684399634756779,-.8533633645833173,.8533633645833173,-.9200993341504008,.9200993341504008,-.9672268385663063,.9672268385663063,-.9937521706203895,.9937521706203895],[-.06973927331972223,.06973927331972223,-.20786042668822127,.20786042668822127,-.34193582089208424,.34193582089208424,-.469355837986757,.469355837986757,-.5876404035069116,.5876404035069116,-.6944872631866827,.6944872631866827,-.7878168059792081,.7878168059792081,-.8658125777203002,.8658125777203002,-.926956772187174,.926956772187174,-.9700604978354287,.9700604978354287,-.9942945854823992,.9942945854823992],[0,-.1332568242984661,.1332568242984661,-.26413568097034495,.26413568097034495,-.3903010380302908,.3903010380302908,-.5095014778460075,.5095014778460075,-.6196098757636461,.6196098757636461,-.7186613631319502,.7186613631319502,-.8048884016188399,.8048884016188399,-.8767523582704416,.8767523582704416,-.9329710868260161,.9329710868260161,-.9725424712181152,.9725424712181152,-.9947693349975522,.9947693349975522],[-.06405689286260563,.06405689286260563,-.1911188674736163,.1911188674736163,-.3150426796961634,.3150426796961634,-.4337935076260451,.4337935076260451,-.5454214713888396,.5454214713888396,-.6480936519369755,.6480936519369755,-.7401241915785544,.7401241915785544,-.820001985973903,.820001985973903,-.8864155270044011,.8864155270044011,-.9382745520027328,.9382745520027328,-.9747285559713095,.9747285559713095,-.9951872199970213,.9951872199970213]],re=[[],[],[1,1],[.8888888888888888,.5555555555555556,.5555555555555556],[.6521451548625461,.6521451548625461,.34785484513745385,.34785484513745385],[.5688888888888889,.47862867049936647,.47862867049936647,.23692688505618908,.23692688505618908],[.3607615730481386,.3607615730481386,.46791393457269104,.46791393457269104,.17132449237917036,.17132449237917036],[.4179591836734694,.3818300505051189,.3818300505051189,.27970539148927664,.27970539148927664,.1294849661688697,.1294849661688697],[.362683783378362,.362683783378362,.31370664587788727,.31370664587788727,.22238103445337448,.22238103445337448,.10122853629037626,.10122853629037626],[.3302393550012598,.1806481606948574,.1806481606948574,.08127438836157441,.08127438836157441,.31234707704000286,.31234707704000286,.26061069640293544,.26061069640293544],[.29552422471475287,.29552422471475287,.26926671930999635,.26926671930999635,.21908636251598204,.21908636251598204,.1494513491505806,.1494513491505806,.06667134430868814,.06667134430868814],[.2729250867779006,.26280454451024665,.26280454451024665,.23319376459199048,.23319376459199048,.18629021092773426,.18629021092773426,.1255803694649046,.1255803694649046,.05566856711617366,.05566856711617366],[.24914704581340277,.24914704581340277,.2334925365383548,.2334925365383548,.20316742672306592,.20316742672306592,.16007832854334622,.16007832854334622,.10693932599531843,.10693932599531843,.04717533638651183,.04717533638651183],[.2325515532308739,.22628318026289723,.22628318026289723,.2078160475368885,.2078160475368885,.17814598076194574,.17814598076194574,.13887351021978725,.13887351021978725,.09212149983772845,.09212149983772845,.04048400476531588,.04048400476531588],[.2152638534631578,.2152638534631578,.2051984637212956,.2051984637212956,.18553839747793782,.18553839747793782,.15720316715819355,.15720316715819355,.12151857068790319,.12151857068790319,.08015808715976021,.08015808715976021,.03511946033175186,.03511946033175186],[.2025782419255613,.19843148532711158,.19843148532711158,.1861610000155622,.1861610000155622,.16626920581699392,.16626920581699392,.13957067792615432,.13957067792615432,.10715922046717194,.10715922046717194,.07036604748810812,.07036604748810812,.03075324199611727,.03075324199611727],[.1894506104550685,.1894506104550685,.18260341504492358,.18260341504492358,.16915651939500254,.16915651939500254,.14959598881657674,.14959598881657674,.12462897125553388,.12462897125553388,.09515851168249279,.09515851168249279,.062253523938647894,.062253523938647894,.027152459411754096,.027152459411754096],[.17944647035620653,.17656270536699264,.17656270536699264,.16800410215645004,.16800410215645004,.15404576107681028,.15404576107681028,.13513636846852548,.13513636846852548,.11188384719340397,.11188384719340397,.08503614831717918,.08503614831717918,.0554595293739872,.0554595293739872,.02414830286854793,.02414830286854793],[.1691423829631436,.1691423829631436,.16427648374583273,.16427648374583273,.15468467512626524,.15468467512626524,.14064291467065065,.14064291467065065,.12255520671147846,.12255520671147846,.10094204410628717,.10094204410628717,.07642573025488905,.07642573025488905,.0497145488949698,.0497145488949698,.02161601352648331,.02161601352648331],[.1610544498487837,.15896884339395434,.15896884339395434,.15276604206585967,.15276604206585967,.1426067021736066,.1426067021736066,.12875396253933621,.12875396253933621,.11156664554733399,.11156664554733399,.09149002162245,.09149002162245,.06904454273764123,.06904454273764123,.0448142267656996,.0448142267656996,.019461788229726478,.019461788229726478],[.15275338713072584,.15275338713072584,.14917298647260374,.14917298647260374,.14209610931838204,.14209610931838204,.13168863844917664,.13168863844917664,.11819453196151841,.11819453196151841,.10193011981724044,.10193011981724044,.08327674157670475,.08327674157670475,.06267204833410907,.06267204833410907,.04060142980038694,.04060142980038694,.017614007139152118,.017614007139152118],[.14608113364969041,.14452440398997005,.14452440398997005,.13988739479107315,.13988739479107315,.13226893863333747,.13226893863333747,.12183141605372853,.12183141605372853,.10879729916714838,.10879729916714838,.09344442345603386,.09344442345603386,.0761001136283793,.0761001136283793,.057134425426857205,.057134425426857205,.036953789770852494,.036953789770852494,.016017228257774335,.016017228257774335],[.13925187285563198,.13925187285563198,.13654149834601517,.13654149834601517,.13117350478706238,.13117350478706238,.12325237681051242,.12325237681051242,.11293229608053922,.11293229608053922,.10041414444288096,.10041414444288096,.08594160621706773,.08594160621706773,.06979646842452049,.06979646842452049,.052293335152683286,.052293335152683286,.03377490158481415,.03377490158481415,.0146279952982722,.0146279952982722],[.13365457218610619,.1324620394046966,.1324620394046966,.12890572218808216,.12890572218808216,.12304908430672953,.12304908430672953,.11499664022241136,.11499664022241136,.10489209146454141,.10489209146454141,.09291576606003515,.09291576606003515,.07928141177671895,.07928141177671895,.06423242140852585,.06423242140852585,.04803767173108467,.04803767173108467,.030988005856979445,.030988005856979445,.013411859487141771,.013411859487141771],[.12793819534675216,.12793819534675216,.1258374563468283,.1258374563468283,.12167047292780339,.12167047292780339,.1155056680537256,.1155056680537256,.10744427011596563,.10744427011596563,.09761865210411388,.09761865210411388,.08619016153195327,.08619016153195327,.0733464814110803,.0733464814110803,.05929858491543678,.05929858491543678,.04427743881741981,.04427743881741981,.028531388628933663,.028531388628933663,.0123412297999872,.0123412297999872]],ae=[[1],[1,1],[1,2,1],[1,3,3,1]],oe=(t,e,i)=>{let n,s;const r=i/2;n=0;for(let i=0;i<20;i++)s=r*se[20][i]+r,n+=re[20][i]*le(t,e,s);return r*n},he=(t,e,i)=>{void 0===i&&(i=1);const n=t[0]-2*t[1]+t[2],s=e[0]-2*e[1]+e[2],r=2*t[1]-2*t[0],a=2*e[1]-2*e[0],o=4*(n*n+s*s),h=4*(n*r+s*a),l=r*r+a*a;if(0===o)return i*Math.sqrt(Math.pow(t[2]-t[0],2)+Math.pow(e[2]-e[0],2));const d=h/(2*o),c=i+d,g=l/o-d*d,u=c*c+g>0?Math.sqrt(c*c+g):0,f=d*d+g>0?Math.sqrt(d*d+g):0,p=d+Math.sqrt(d*d+g)!==0?g*Math.log(Math.abs((c+u)/(d+f))):0;return Math.sqrt(o)/2*(c*u-d*f+p)};function le(t,e,i){const n=de(1,i,t),s=de(1,i,e),r=n*n+s*s;return Math.sqrt(r)}const de=(t,e,i)=>{const n=i.length-1;let s,r;if(0===n)return 0;if(0===t){r=0;for(let t=0;t<=n;t++)r+=ae[n][t]*Math.pow(1-e,n-t)*Math.pow(e,t)*i[t];return r}s=new Array(n);for(let t=0;t<n;t++)s[t]=n*(i[t+1]-i[t]);return de(t-1,e,s)},ce=(t,e,i)=>{let n=1,s=t/e,r=(t-i(s))/e,a=0;for(;n>.001;){const o=i(s+r),h=Math.abs(t-o)/e;if(h<n)n=h,s+=r;else{const a=i(s-r),o=Math.abs(t-a)/e;o<n?(n=o,s-=r):r/=2}if(a++,a>500)break}return s};class ge extends Nt{constructor(t){super(t),this.dataArray=[],this.pathLength=0,this._readDataAttribute(),this.on("dataChange.konva",(function(){this._readDataAttribute()}))}_readDataAttribute(){this.dataArray=ge.parsePathData(this.data()),this.pathLength=ge.getPathLength(this.dataArray)}_sceneFunc(t){const e=this.dataArray;t.beginPath();let i=!1;for(let f=0;f<e.length;f++){const p=e[f].command,m=e[f].points;switch(p){case"L":t.lineTo(m[0],m[1]);break;case"M":t.moveTo(m[0],m[1]);break;case"C":t.bezierCurveTo(m[0],m[1],m[2],m[3],m[4],m[5]);break;case"Q":t.quadraticCurveTo(m[0],m[1],m[2],m[3]);break;case"A":var n=m[0],s=m[1],r=m[2],a=m[3],o=m[4],h=m[5],l=m[6],d=m[7],c=r>a?r:a,g=r>a?1:r/a,u=r>a?a/r:1;t.translate(n,s),t.rotate(l),t.scale(g,u),t.arc(0,0,c,o,o+h,1-d),t.scale(1/g,1/u),t.rotate(-l),t.translate(-n,-s);break;case"z":i=!0,t.closePath()}}i||this.hasFill()?t.fillStrokeShape(this):t.strokeShape(this)}getSelfRect(){let t=[];this.dataArray.forEach((function(e){if("A"===e.command){const i=e.points[4],n=e.points[5],s=e.points[4]+n;let r=Math.PI/180;if(Math.abs(i-s)<r&&(r=Math.abs(i-s)),n<0)for(let n=i-r;n>s;n-=r){const i=ge.getPointOnEllipticalArc(e.points[0],e.points[1],e.points[2],e.points[3],n,0);t.push(i.x,i.y)}else for(let n=i+r;n<s;n+=r){const i=ge.getPointOnEllipticalArc(e.points[0],e.points[1],e.points[2],e.points[3],n,0);t.push(i.x,i.y)}}else if("C"===e.command)for(let i=0;i<=1;i+=.01){const n=ge.getPointOnCubicBezier(i,e.start.x,e.start.y,e.points[0],e.points[1],e.points[2],e.points[3],e.points[4],e.points[5]);t.push(n.x,n.y)}else t=t.concat(e.points)}));let e,i,n=t[0],s=t[0],r=t[1],a=t[1];for(let o=0;o<t.length/2;o++)e=t[2*o],i=t[2*o+1],isNaN(e)||(n=Math.min(n,e),s=Math.max(s,e)),isNaN(i)||(r=Math.min(r,i),a=Math.max(a,i));return{x:n,y:r,width:s-n,height:a-r}}getLength(){return this.pathLength}getPointAtLength(t){return ge.getPointAtLengthOfDataArray(t,this.dataArray)}static getLineLength(t,e,i,n){return Math.sqrt((i-t)*(i-t)+(n-e)*(n-e))}static getPathLength(t){let e=0;for(let i=0;i<t.length;++i)e+=t[i].pathLength;return e}static getPointAtLengthOfDataArray(t,e){let i,n=0,s=e.length;if(!s)return null;for(;n<s&&t>e[n].pathLength;)t-=e[n].pathLength,++n;if(n===s)return i=e[n-1].points.slice(-2),{x:i[0],y:i[1]};if(t<.01)return i=e[n].points.slice(0,2),{x:i[0],y:i[1]};const r=e[n],a=r.points;switch(r.command){case"L":return ge.getPointOnLine(t,r.start.x,r.start.y,a[0],a[1]);case"C":return ge.getPointOnCubicBezier(ce(t,ge.getPathLength(e),(t=>oe([r.start.x,a[0],a[2],a[4]],[r.start.y,a[1],a[3],a[5]],t))),r.start.x,r.start.y,a[0],a[1],a[2],a[3],a[4],a[5]);case"Q":return ge.getPointOnQuadraticBezier(ce(t,ge.getPathLength(e),(t=>he([r.start.x,a[0],a[2]],[r.start.y,a[1],a[3]],t))),r.start.x,r.start.y,a[0],a[1],a[2],a[3]);case"A":var o=a[0],h=a[1],l=a[2],d=a[3],c=a[4],g=a[5],u=a[6];return c+=g*t/r.pathLength,ge.getPointOnEllipticalArc(o,h,l,d,c,u)}return null}static getPointOnLine(t,e,i,n,s,r,a){r=null!=r?r:e,a=null!=a?a:i;const o=this.getLineLength(e,i,n,s);if(o<1e-10)return{x:e,y:i};if(n===e)return{x:r,y:a+(s>i?t:-t)};const h=(s-i)/(n-e),l=Math.sqrt(t*t/(1+h*h))*(n<e?-1:1),d=h*l;if(Math.abs(a-i-h*(r-e))<1e-10)return{x:r+l,y:a+d};const c=((r-e)*(n-e)+(a-i)*(s-i))/(o*o),g=e+c*(n-e),u=i+c*(s-i),f=this.getLineLength(r,a,g,u),p=Math.sqrt(t*t-f*f),m=Math.sqrt(p*p/(1+h*h))*(n<e?-1:1);return{x:g+m,y:u+h*m}}static getPointOnCubicBezier(t,e,i,n,s,r,a,o,h){function l(t){return t*t*t}function d(t){return 3*t*t*(1-t)}function c(t){return 3*t*(1-t)*(1-t)}function g(t){return(1-t)*(1-t)*(1-t)}return{x:o*l(t)+r*d(t)+n*c(t)+e*g(t),y:h*l(t)+a*d(t)+s*c(t)+i*g(t)}}static getPointOnQuadraticBezier(t,e,i,n,s,r,a){function o(t){return t*t}function h(t){return 2*t*(1-t)}function l(t){return(1-t)*(1-t)}return{x:r*o(t)+n*h(t)+e*l(t),y:a*o(t)+s*h(t)+i*l(t)}}static getPointOnEllipticalArc(t,e,i,n,s,r){const a=Math.cos(r),o=Math.sin(r),h=i*Math.cos(s),l=n*Math.sin(s);return{x:t+(h*a-l*o),y:e+(h*o+l*a)}}static parsePathData(t){if(!t)return[];let e=t;const i=["m","M","l","L","v","V","h","H","z","Z","c","C","q","Q","t","T","s","S","a","A"];e=e.replace(new RegExp(" ","g"),",");for(var n=0;n<i.length;n++)e=e.replace(new RegExp(i[n],"g"),"|"+i[n]);const s=e.split("|"),r=[],a=[];let o=0,h=0;const l=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi;let d;for(n=1;n<s.length;n++){let t=s[n],e=t.charAt(0);for(t=t.slice(1),a.length=0;d=l.exec(t);)a.push(d[0]);const i=[];for(let t=0,e=a.length;t<e;t++){if("00"===a[t]){i.push(0,0);continue}const e=parseFloat(a[t]);isNaN(e)?i.push(0):i.push(e)}for(;i.length>0&&!isNaN(i[0]);){let t="",n=[];const s=o,a=h;var c,g,u,f,p,m,_,y,v,x;switch(e){case"l":o+=i.shift(),h+=i.shift(),t="L",n.push(o,h);break;case"L":o=i.shift(),h=i.shift(),n.push(o,h);break;case"m":var b=i.shift(),S=i.shift();if(o+=b,h+=S,t="M",r.length>2&&"z"===r[r.length-1].command)for(let t=r.length-2;t>=0;t--)if("M"===r[t].command){o=r[t].points[0]+b,h=r[t].points[1]+S;break}n.push(o,h),e="l";break;case"M":o=i.shift(),h=i.shift(),t="M",n.push(o,h),e="L";break;case"h":o+=i.shift(),t="L",n.push(o,h);break;case"H":o=i.shift(),t="L",n.push(o,h);break;case"v":h+=i.shift(),t="L",n.push(o,h);break;case"V":h=i.shift(),t="L",n.push(o,h);break;case"C":n.push(i.shift(),i.shift(),i.shift(),i.shift()),o=i.shift(),h=i.shift(),n.push(o,h);break;case"c":n.push(o+i.shift(),h+i.shift(),o+i.shift(),h+i.shift()),o+=i.shift(),h+=i.shift(),t="C",n.push(o,h);break;case"S":g=o,u=h,"C"===(c=r[r.length-1]).command&&(g=o+(o-c.points[2]),u=h+(h-c.points[3])),n.push(g,u,i.shift(),i.shift()),o=i.shift(),h=i.shift(),t="C",n.push(o,h);break;case"s":g=o,u=h,"C"===(c=r[r.length-1]).command&&(g=o+(o-c.points[2]),u=h+(h-c.points[3])),n.push(g,u,o+i.shift(),h+i.shift()),o+=i.shift(),h+=i.shift(),t="C",n.push(o,h);break;case"Q":n.push(i.shift(),i.shift()),o=i.shift(),h=i.shift(),n.push(o,h);break;case"q":n.push(o+i.shift(),h+i.shift()),o+=i.shift(),h+=i.shift(),t="Q",n.push(o,h);break;case"T":g=o,u=h,"Q"===(c=r[r.length-1]).command&&(g=o+(o-c.points[0]),u=h+(h-c.points[1])),o=i.shift(),h=i.shift(),t="Q",n.push(g,u,o,h);break;case"t":g=o,u=h,"Q"===(c=r[r.length-1]).command&&(g=o+(o-c.points[0]),u=h+(h-c.points[1])),o+=i.shift(),h+=i.shift(),t="Q",n.push(g,u,o,h);break;case"A":f=i.shift(),p=i.shift(),m=i.shift(),_=i.shift(),y=i.shift(),v=o,x=h,o=i.shift(),h=i.shift(),t="A",n=this.convertEndpointToCenterParameterization(v,x,o,h,_,y,f,p,m);break;case"a":f=i.shift(),p=i.shift(),m=i.shift(),_=i.shift(),y=i.shift(),v=o,x=h,o+=i.shift(),h+=i.shift(),t="A",n=this.convertEndpointToCenterParameterization(v,x,o,h,_,y,f,p,m)}r.push({command:t||e,points:n,start:{x:s,y:a},pathLength:this.calcLength(s,a,t||e,n)})}"z"!==e&&"Z"!==e||r.push({command:"z",points:[],start:void 0,pathLength:0})}return r}static calcLength(t,e,i,n){let s,r,a,o;const h=ge;switch(i){case"L":return h.getLineLength(t,e,n[0],n[1]);case"C":return oe([t,n[0],n[2],n[4]],[e,n[1],n[3],n[5]],1);case"Q":return he([t,n[0],n[2]],[e,n[1],n[3]],1);case"A":s=0;var l=n[4],d=n[5],c=n[4]+d,g=Math.PI/180;if(Math.abs(l-c)<g&&(g=Math.abs(l-c)),r=h.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],l,0),d<0)for(o=l-g;o>c;o-=g)a=h.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],o,0),s+=h.getLineLength(r.x,r.y,a.x,a.y),r=a;else for(o=l+g;o<c;o+=g)a=h.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],o,0),s+=h.getLineLength(r.x,r.y,a.x,a.y),r=a;return a=h.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],c,0),s+=h.getLineLength(r.x,r.y,a.x,a.y),s}return 0}static convertEndpointToCenterParameterization(t,e,i,n,s,r,a,o,h){const l=h*(Math.PI/180),d=Math.cos(l)*(t-i)/2+Math.sin(l)*(e-n)/2,c=-1*Math.sin(l)*(t-i)/2+Math.cos(l)*(e-n)/2,g=d*d/(a*a)+c*c/(o*o);g>1&&(a*=Math.sqrt(g),o*=Math.sqrt(g));let u=Math.sqrt((a*a*(o*o)-a*a*(c*c)-o*o*(d*d))/(a*a*(c*c)+o*o*(d*d)));s===r&&(u*=-1),isNaN(u)&&(u=0);const f=u*a*c/o,p=u*-o*d/a,m=(t+i)/2+Math.cos(l)*f-Math.sin(l)*p,_=(e+n)/2+Math.sin(l)*f+Math.cos(l)*p,y=function(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])},v=function(t,e){return(t[0]*e[0]+t[1]*e[1])/(y(t)*y(e))},x=function(t,e){return(t[0]*e[1]<t[1]*e[0]?-1:1)*Math.acos(v(t,e))},b=x([1,0],[(d-f)/a,(c-p)/o]),S=[(d-f)/a,(c-p)/o],w=[(-1*d-f)/a,(-1*c-p)/o];let C=x(S,w);return v(S,w)<=-1&&(C=Math.PI),v(S,w)>=1&&(C=0),0===r&&C>0&&(C-=2*Math.PI),1===r&&C<0&&(C+=2*Math.PI),[m,_,a,o,b,C,l,r]}}ge.prototype.className="Path",ge.prototype._attrsAffectingSize=["data"],n(ge),w.addGetterSetter(ge,"data");class ue extends ne{_sceneFunc(t){super._sceneFunc(t);const e=2*Math.PI,i=this.points();let n=i;const s=0!==this.tension()&&i.length>4;s&&(n=this.getTensionPoints());const r=this.pointerLength(),a=i.length;let o,h;if(s){const t=[n[n.length-4],n[n.length-3],n[n.length-2],n[n.length-1],i[a-2],i[a-1]],e=ge.calcLength(n[n.length-4],n[n.length-3],"C",t),s=ge.getPointOnQuadraticBezier(Math.min(1,1-r/e),t[0],t[1],t[2],t[3],t[4],t[5]);o=i[a-2]-s.x,h=i[a-1]-s.y}else o=i[a-2]-i[a-4],h=i[a-1]-i[a-3];const l=(Math.atan2(h,o)+e)%e,d=this.pointerWidth();this.pointerAtEnding()&&(t.save(),t.beginPath(),t.translate(i[a-2],i[a-1]),t.rotate(l),t.moveTo(0,0),t.lineTo(-r,d/2),t.lineTo(-r,-d/2),t.closePath(),t.restore(),this.__fillStroke(t)),this.pointerAtBeginning()&&(t.save(),t.beginPath(),t.translate(i[0],i[1]),s?(o=(n[0]+n[2])/2-i[0],h=(n[1]+n[3])/2-i[1]):(o=i[2]-i[0],h=i[3]-i[1]),t.rotate((Math.atan2(-h,-o)+e)%e),t.moveTo(0,0),t.lineTo(-r,d/2),t.lineTo(-r,-d/2),t.closePath(),t.restore(),this.__fillStroke(t))}__fillStroke(t){const e=this.dashEnabled();e&&(this.attrs.dashEnabled=!1,t.setLineDash([])),t.fillStrokeShape(this),e&&(this.attrs.dashEnabled=!0)}getSelfRect(){const t=super.getSelfRect(),e=this.pointerWidth()/2;return{x:t.x-e,y:t.y-e,width:t.width+2*e,height:t.height+2*e}}}ue.prototype.className="Arrow",n(ue),w.addGetterSetter(ue,"pointerLength",10,p()),w.addGetterSetter(ue,"pointerWidth",10,p()),w.addGetterSetter(ue,"pointerAtBeginning",!1),w.addGetterSetter(ue,"pointerAtEnding",!0);class fe extends Nt{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.attrs.radius||0,0,2*Math.PI,!1),t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*this.radius()}getHeight(){return 2*this.radius()}setWidth(t){this.radius()!==t/2&&this.radius(t/2)}setHeight(t){this.radius()!==t/2&&this.radius(t/2)}}fe.prototype._centroid=!0,fe.prototype.className="Circle",fe.prototype._attrsAffectingSize=["radius"],n(fe),w.addGetterSetter(fe,"radius",0,p());class pe extends Nt{_sceneFunc(t){const e=this.radiusX(),i=this.radiusY();t.beginPath(),t.save(),e!==i&&t.scale(1,i/e),t.arc(0,0,e,0,2*Math.PI,!1),t.restore(),t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*this.radiusX()}getHeight(){return 2*this.radiusY()}setWidth(t){this.radiusX(t/2)}setHeight(t){this.radiusY(t/2)}}pe.prototype.className="Ellipse",pe.prototype._centroid=!0,pe.prototype._attrsAffectingSize=["radiusX","radiusY"],n(pe),w.addComponentsGetterSetter(pe,"radius",["x","y"]),w.addGetterSetter(pe,"radiusX",0,p()),w.addGetterSetter(pe,"radiusY",0,p());class me extends Nt{constructor(t){super(t),this.on("imageChange.konva",(()=>{this._setImageLoad()})),this._setImageLoad()}_setImageLoad(){const t=this.image();t&&t.complete||t&&4===t.readyState||t&&t.addEventListener&&t.addEventListener("load",(()=>{this._requestDraw()}))}_useBufferCanvas(){const t=!!this.cornerRadius(),e=this.hasShadow();return!(!t||!e)||super._useBufferCanvas(!0)}_sceneFunc(t){const e=this.getWidth(),i=this.getHeight(),n=this.cornerRadius(),s=this.attrs.image;let r;if(s){const t=this.attrs.cropWidth,n=this.attrs.cropHeight;r=t&&n?[s,this.cropX(),this.cropY(),t,n,0,0,e,i]:[s,0,0,e,i]}(this.hasFill()||this.hasStroke()||n)&&(t.beginPath(),n?g.drawRoundedRectPath(t,e,i,n):t.rect(0,0,e,i),t.closePath(),t.fillStrokeShape(this)),s&&(n&&t.clip(),t.drawImage.apply(t,r))}_hitFunc(t){const e=this.width(),i=this.height(),n=this.cornerRadius();t.beginPath(),n?g.drawRoundedRectPath(t,e,i,n):t.rect(0,0,e,i),t.closePath(),t.fillStrokeShape(this)}getWidth(){var t,e;return null!==(t=this.attrs.width)&&void 0!==t?t:null===(e=this.image())||void 0===e?void 0:e.width}getHeight(){var t,e;return null!==(t=this.attrs.height)&&void 0!==t?t:null===(e=this.image())||void 0===e?void 0:e.height}static fromURL(t,e,i=null){const n=g.createImageElement();n.onload=function(){const t=new me({image:n});e(t)},n.onerror=i,n.crossOrigin="Anonymous",n.src=t}}me.prototype.className="Image",n(me),w.addGetterSetter(me,"cornerRadius",0,m(4)),w.addGetterSetter(me,"image"),w.addComponentsGetterSetter(me,"crop",["x","y","width","height"]),w.addGetterSetter(me,"cropX",0,p()),w.addGetterSetter(me,"cropY",0,p()),w.addGetterSetter(me,"cropWidth",0,p()),w.addGetterSetter(me,"cropHeight",0,p());const _e=["fontFamily","fontSize","fontStyle","padding","lineHeight","text","width","height","pointerDirection","pointerWidth","pointerHeight"],ye="up",ve="right",xe="down",be="left",Se=_e.length;class we extends Xt{constructor(t){super(t),this.on("add.konva",(function(t){this._addListeners(t.child),this._sync()}))}getText(){return this.find("Text")[0]}getTag(){return this.find("Tag")[0]}_addListeners(t){let e,i=this;const n=function(){i._sync()};for(e=0;e<Se;e++)t.on(_e[e]+"Change.konva",n)}getWidth(){return this.getText().width()}getHeight(){return this.getText().height()}_sync(){let t,e,i,n,s,r,a,o=this.getText(),h=this.getTag();if(o&&h){switch(t=o.width(),e=o.height(),i=h.pointerDirection(),n=h.pointerWidth(),a=h.pointerHeight(),s=0,r=0,i){case ye:s=t/2,r=-1*a;break;case ve:s=t+n,r=e/2;break;case xe:s=t/2,r=e+a;break;case be:s=-1*n,r=e/2}h.setAttrs({x:-1*s,y:-1*r,width:t,height:e}),o.setAttrs({x:-1*s,y:-1*r})}}}we.prototype.className="Label",n(we);class Ce extends Nt{_sceneFunc(t){const e=this.width(),i=this.height(),n=this.pointerDirection(),s=this.pointerWidth(),r=this.pointerHeight(),a=this.cornerRadius();let o=0,h=0,l=0,d=0;"number"==typeof a?o=h=l=d=Math.min(a,e/2,i/2):(o=Math.min(a[0]||0,e/2,i/2),h=Math.min(a[1]||0,e/2,i/2),d=Math.min(a[2]||0,e/2,i/2),l=Math.min(a[3]||0,e/2,i/2)),t.beginPath(),t.moveTo(o,0),n===ye&&(t.lineTo((e-s)/2,0),t.lineTo(e/2,-1*r),t.lineTo((e+s)/2,0)),t.lineTo(e-h,0),t.arc(e-h,h,h,3*Math.PI/2,0,!1),n===ve&&(t.lineTo(e,(i-r)/2),t.lineTo(e+s,i/2),t.lineTo(e,(i+r)/2)),t.lineTo(e,i-d),t.arc(e-d,i-d,d,0,Math.PI/2,!1),n===xe&&(t.lineTo((e+s)/2,i),t.lineTo(e/2,i+r),t.lineTo((e-s)/2,i)),t.lineTo(l,i),t.arc(l,i-l,l,Math.PI/2,Math.PI,!1),n===be&&(t.lineTo(0,(i+r)/2),t.lineTo(-1*s,i/2),t.lineTo(0,(i-r)/2)),t.lineTo(0,o),t.arc(o,o,o,Math.PI,3*Math.PI/2,!1),t.closePath(),t.fillStrokeShape(this)}getSelfRect(){let t=0,e=0,i=this.pointerWidth(),n=this.pointerHeight(),s=this.pointerDirection(),r=this.width(),a=this.height();return s===ye?(e-=n,a+=n):s===xe?a+=n:s===be?(t-=1.5*i,r+=i):s===ve&&(r+=1.5*i),{x:t,y:e,width:r,height:a}}}Ce.prototype.className="Tag",n(Ce),w.addGetterSetter(Ce,"pointerDirection","none"),w.addGetterSetter(Ce,"pointerWidth",0,p()),w.addGetterSetter(Ce,"pointerHeight",0,p()),w.addGetterSetter(Ce,"cornerRadius",0,m(4));class Pe extends Nt{_sceneFunc(t){const e=this.cornerRadius(),i=this.width(),n=this.height();t.beginPath(),e?g.drawRoundedRectPath(t,i,n,e):t.rect(0,0,i,n),t.closePath(),t.fillStrokeShape(this)}}Pe.prototype.className="Rect",n(Pe),w.addGetterSetter(Pe,"cornerRadius",0,m(4));class ke extends Nt{_sceneFunc(t){const e=this._getPoints();t.beginPath(),t.moveTo(e[0].x,e[0].y);for(let i=1;i<e.length;i++)t.lineTo(e[i].x,e[i].y);t.closePath(),t.fillStrokeShape(this)}_getPoints(){const t=this.attrs.sides,e=this.attrs.radius||0,i=[];for(let n=0;n<t;n++)i.push({x:e*Math.sin(2*n*Math.PI/t),y:-1*e*Math.cos(2*n*Math.PI/t)});return i}getSelfRect(){const t=this._getPoints();let e=t[0].x,i=t[0].y,n=t[0].x,s=t[0].y;return t.forEach((t=>{e=Math.min(e,t.x),i=Math.max(i,t.x),n=Math.min(n,t.y),s=Math.max(s,t.y)})),{x:e,y:n,width:i-e,height:s-n}}getWidth(){return 2*this.radius()}getHeight(){return 2*this.radius()}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}ke.prototype.className="RegularPolygon",ke.prototype._centroid=!0,ke.prototype._attrsAffectingSize=["radius"],n(ke),w.addGetterSetter(ke,"radius",0,p()),w.addGetterSetter(ke,"sides",0,p());const Ae=2*Math.PI;class Te extends Nt{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.innerRadius(),0,Ae,!1),t.moveTo(this.outerRadius(),0),t.arc(0,0,this.outerRadius(),Ae,0,!0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*this.outerRadius()}getHeight(){return 2*this.outerRadius()}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}}Te.prototype.className="Ring",Te.prototype._centroid=!0,Te.prototype._attrsAffectingSize=["innerRadius","outerRadius"],n(Te),w.addGetterSetter(Te,"innerRadius",0,p()),w.addGetterSetter(Te,"outerRadius",0,p());class Me extends Nt{constructor(t){super(t),this._updated=!0,this.anim=new qt((()=>{const t=this._updated;return this._updated=!1,t})),this.on("animationChange.konva",(function(){this.frameIndex(0)})),this.on("frameIndexChange.konva",(function(){this._updated=!0})),this.on("frameRateChange.konva",(function(){this.anim.isRunning()&&(clearInterval(this.interval),this._setInterval())}))}_sceneFunc(t){const e=this.animation(),i=this.frameIndex(),n=4*i,s=this.animations()[e],r=this.frameOffsets(),a=s[n+0],o=s[n+1],h=s[n+2],l=s[n+3],d=this.image();if((this.hasFill()||this.hasStroke())&&(t.beginPath(),t.rect(0,0,h,l),t.closePath(),t.fillStrokeShape(this)),d)if(r){const n=r[e],s=2*i;t.drawImage(d,a,o,h,l,n[s+0],n[s+1],h,l)}else t.drawImage(d,a,o,h,l,0,0,h,l)}_hitFunc(t){const e=this.animation(),i=this.frameIndex(),n=4*i,s=this.animations()[e],r=this.frameOffsets(),a=s[n+2],o=s[n+3];if(t.beginPath(),r){const n=r[e],s=2*i;t.rect(n[s+0],n[s+1],a,o)}else t.rect(0,0,a,o);t.closePath(),t.fillShape(this)}_useBufferCanvas(){return super._useBufferCanvas(!0)}_setInterval(){const t=this;this.interval=setInterval((function(){t._updateIndex()}),1e3/this.frameRate())}start(){if(this.isRunning())return;const t=this.getLayer();this.anim.setLayers(t),this._setInterval(),this.anim.start()}stop(){this.anim.stop(),clearInterval(this.interval)}isRunning(){return this.anim.isRunning()}_updateIndex(){const t=this.frameIndex(),e=this.animation();t<this.animations()[e].length/4-1?this.frameIndex(t+1):this.frameIndex(0)}}Me.prototype.className="Sprite",n(Me),w.addGetterSetter(Me,"animation"),w.addGetterSetter(Me,"animations"),w.addGetterSetter(Me,"frameOffsets"),w.addGetterSetter(Me,"image"),w.addGetterSetter(Me,"frameIndex",0,p()),w.addGetterSetter(Me,"frameRate",17,p()),w.backCompat(Me,{index:"frameIndex",getIndex:"getFrameIndex",setIndex:"setFrameIndex"});class Ge extends Nt{_sceneFunc(t){const e=this.innerRadius(),i=this.outerRadius(),n=this.numPoints();t.beginPath(),t.moveTo(0,0-i);for(let s=1;s<2*n;s++){const r=s%2==0?i:e,a=r*Math.sin(s*Math.PI/n),o=-1*r*Math.cos(s*Math.PI/n);t.lineTo(a,o)}t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*this.outerRadius()}getHeight(){return 2*this.outerRadius()}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}}function Re(t){return[...t].reduce(((t,e,i,n)=>(/\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?(?:\u200D\p{Emoji_Presentation})+/u.test(e)?t.push(e):/\p{Regional_Indicator}{2}/u.test(e+(n[i+1]||""))?t.push(e+n[i+1]):i>0&&/\p{Mn}|\p{Me}|\p{Mc}/u.test(e)?t[t.length-1]+=e:t.push(e),t)),[])}Ge.prototype.className="Star",Ge.prototype._centroid=!0,Ge.prototype._attrsAffectingSize=["innerRadius","outerRadius"],n(Ge),w.addGetterSetter(Ge,"numPoints",5,p()),w.addGetterSetter(Ge,"innerRadius",0,p()),w.addGetterSetter(Ge,"outerRadius",0,p());const Ee="auto",De="inherit",Le="justify",Ie="left",Oe="middle",Fe="normal",Be=" ",Ne="none",He=["direction","fontFamily","fontSize","fontStyle","fontVariant","padding","align","verticalAlign","lineHeight","text","width","height","wrap","ellipsis","letterSpacing"],We=He.length;let ze;function Ye(){return ze||(ze=g.createCanvasElement().getContext("2d"),ze)}class Xe extends Nt{constructor(t){super(function(t){return(t=t||{}).fillLinearGradientColorStops||t.fillRadialGradientColorStops||t.fillPatternImage||(t.fill=t.fill||"black"),t}(t)),this._partialTextX=0,this._partialTextY=0;for(let t=0;t<We;t++)this.on(He[t]+"Change.konva",this._setTextData);this._setTextData()}_sceneFunc(t){const e=this.textArr,n=e.length;if(!this.text())return;let s,r=this.padding(),a=this.fontSize(),o=this.lineHeight()*a,h=this.verticalAlign(),l=this.direction(),d=0,c=this.align(),g=this.getWidth(),u=this.letterSpacing(),f=this.fill(),p=this.textDecoration(),m=-1!==p.indexOf("underline"),_=-1!==p.indexOf("line-through");l=l===De?t.direction:l;let y=o/2,v=Oe;if(i._fixTextRendering){const t=this.measureSize("M");v="alphabetic",y=(t.fontBoundingBoxAscent-t.fontBoundingBoxDescent)/2+o/2}var x=0,b=0;for("rtl"===l&&t.setAttr("direction",l),t.setAttr("font",this._getContextFont()),t.setAttr("textBaseline",v),t.setAttr("textAlign",Ie),h===Oe?d=(this.getHeight()-n*o-2*r)/2:"bottom"===h&&(d=this.getHeight()-n*o-2*r),t.translate(r,d+r),s=0;s<n;s++){x=0,b=0;var S,w,C,P=e[s],k=P.text,A=P.width,T=P.lastInParagraph;if(t.save(),"right"===c?x+=g-A-2*r:"center"===c&&(x+=(g-A-2*r)/2),m){t.save(),t.beginPath();const e=x,n=y+b+(i._fixTextRendering?Math.round(a/4):Math.round(a/2));t.moveTo(e,n),w=0===(S=k.split(" ").length-1),C=c!==Le||T?A:g-2*r,t.lineTo(e+Math.round(C),n),t.lineWidth=a/15;const s=this._getLinearGradient();t.strokeStyle=s||f,t.stroke(),t.restore()}if(_){t.save(),t.beginPath();const e=i._fixTextRendering?-Math.round(a/4):0;t.moveTo(x,y+b+e),w=0===(S=k.split(" ").length-1),C=c===Le&&T&&!w?g-2*r:A,t.lineTo(x+Math.round(C),y+b+e),t.lineWidth=a/15;const n=this._getLinearGradient();t.strokeStyle=n||f,t.stroke(),t.restore()}if("rtl"===l||0===u&&c!==Le)0!==u&&t.setAttr("letterSpacing",`${u}px`),this._partialTextX=x,this._partialTextY=y+b,this._partialText=k,t.fillStrokeShape(this);else{S=k.split(" ").length-1;const e=Re(k);for(let i=0;i<e.length;i++){const n=e[i];" "!==n||T||c!==Le||(x+=(g-2*r-A)/S),this._partialTextX=x,this._partialTextY=y+b,this._partialText=n,t.fillStrokeShape(this),x+=this.measureSize(n).width+u}}t.restore(),n>1&&(y+=o)}}_hitFunc(t){const e=this.getWidth(),i=this.getHeight();t.beginPath(),t.rect(0,0,e,i),t.closePath(),t.fillStrokeShape(this)}setText(t){const e=g._isString(t)?t:null==t?"":t+"";return this._setAttr("text",e),this}getWidth(){return this.attrs.width===Ee||void 0===this.attrs.width?this.getTextWidth()+2*this.padding():this.attrs.width}getHeight(){return this.attrs.height===Ee||void 0===this.attrs.height?this.fontSize()*this.textArr.length*this.lineHeight()+2*this.padding():this.attrs.height}getTextWidth(){return this.textWidth}getTextHeight(){return g.warn("text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height."),this.textHeight}measureSize(t){var e,i,n,s,r,a,o,h,l,d,c;let g,u=Ye(),f=this.fontSize();u.save(),u.font=this._getContextFont(),g=u.measureText(t),u.restore();const p=f/100;return{actualBoundingBoxAscent:null!==(e=g.actualBoundingBoxAscent)&&void 0!==e?e:71.58203125*p,actualBoundingBoxDescent:null!==(i=g.actualBoundingBoxDescent)&&void 0!==i?i:0,actualBoundingBoxLeft:null!==(n=g.actualBoundingBoxLeft)&&void 0!==n?n:-7.421875*p,actualBoundingBoxRight:null!==(s=g.actualBoundingBoxRight)&&void 0!==s?s:75.732421875*p,alphabeticBaseline:null!==(r=g.alphabeticBaseline)&&void 0!==r?r:0,emHeightAscent:null!==(a=g.emHeightAscent)&&void 0!==a?a:100*p,emHeightDescent:null!==(o=g.emHeightDescent)&&void 0!==o?o:-20*p,fontBoundingBoxAscent:null!==(h=g.fontBoundingBoxAscent)&&void 0!==h?h:91*p,fontBoundingBoxDescent:null!==(l=g.fontBoundingBoxDescent)&&void 0!==l?l:21*p,hangingBaseline:null!==(d=g.hangingBaseline)&&void 0!==d?d:72.80000305175781*p,ideographicBaseline:null!==(c=g.ideographicBaseline)&&void 0!==c?c:-21*p,width:g.width,height:f}}_getContextFont(){return this.fontStyle()+Be+this.fontVariant()+Be+(this.fontSize()+"px ")+this.fontFamily().split(",").map((t=>{const e=(t=t.trim()).indexOf(" ")>=0,i=t.indexOf('"')>=0||t.indexOf("'")>=0;return e&&!i&&(t=`"${t}"`),t})).join(", ")}_addTextLine(t){this.align()===Le&&(t=t.trim());const e=this._getTextWidth(t);return this.textArr.push({text:t,width:e,lastInParagraph:!1})}_getTextWidth(t){const e=this.letterSpacing(),i=t.length;return Ye().measureText(t).width+(i?e*(i-1):0)}_setTextData(){let t=this.text().split("\n"),e=+this.fontSize(),i=0,n=this.lineHeight()*e,s=this.attrs.width,r=this.attrs.height,a=s!==Ee&&void 0!==s,o=r!==Ee&&void 0!==r,h=this.padding(),l=s-2*h,d=r-2*h,c=0,g=this.wrap(),u="char"!==g&&g!==Ne,f=this.ellipsis();this.textArr=[],Ye().font=this._getContextFont();const p=f?this._getTextWidth("…"):0;for(let e=0,s=t.length;e<s;++e){let r=t[e],h=this._getTextWidth(r);if(a&&h>l)for(;r.length>0;){let t=0,e=r.length,s="",a=0;for(;t<e;){const i=t+e>>>1,n=r.slice(0,i+1),o=this._getTextWidth(n)+p;o<=l?(t=i+1,s=n,a=o):e=i}if(!s)break;if(u){var m;const e=r[s.length];(m=(e===Be||"-"===e)&&a<=l?s.length:Math.max(s.lastIndexOf(Be),s.lastIndexOf("-"))+1)>0&&(t=m,s=s.slice(0,t),a=this._getTextWidth(s))}s=s.trimRight(),this._addTextLine(s),i=Math.max(i,a),c+=n;if(this._shouldHandleEllipsis(c)){this._tryToAddEllipsisToLastLine();break}if(r=r.slice(t),r=r.trimLeft(),r.length>0&&(h=this._getTextWidth(r),h<=l)){this._addTextLine(r),c+=n,i=Math.max(i,h);break}}else this._addTextLine(r),c+=n,i=Math.max(i,h),this._shouldHandleEllipsis(c)&&e<s-1&&this._tryToAddEllipsisToLastLine();if(this.textArr[this.textArr.length-1]&&(this.textArr[this.textArr.length-1].lastInParagraph=!0),o&&c+n>d)break}this.textHeight=e,this.textWidth=i}_shouldHandleEllipsis(t){const e=+this.fontSize(),i=this.lineHeight()*e,n=this.attrs.height,s=n!==Ee&&void 0!==n,r=n-2*this.padding();return!(this.wrap()!==Ne)||s&&t+i>r}_tryToAddEllipsisToLastLine(){const t=this.attrs.width,e=t!==Ee&&void 0!==t,i=t-2*this.padding(),n=this.ellipsis(),s=this.textArr[this.textArr.length-1];if(s&&n){if(e){this._getTextWidth(s.text+"…")<i||(s.text=s.text.slice(0,s.text.length-3))}this.textArr.splice(this.textArr.length-1,1),this._addTextLine(s.text+"…")}}getStrokeScaleEnabled(){return!0}_useBufferCanvas(){const t=-1!==this.textDecoration().indexOf("underline")||-1!==this.textDecoration().indexOf("line-through"),e=this.hasShadow();return!(!t||!e)||super._useBufferCanvas()}}Xe.prototype._fillFunc=function(t){t.fillText(this._partialText,this._partialTextX,this._partialTextY)},Xe.prototype._strokeFunc=function(t){t.setAttr("miterLimit",2),t.strokeText(this._partialText,this._partialTextX,this._partialTextY)},Xe.prototype.className="Text",Xe.prototype._attrsAffectingSize=["text","fontSize","padding","wrap","lineHeight","letterSpacing"],n(Xe),w.overWriteSetter(Xe,"width",_()),w.overWriteSetter(Xe,"height",_()),w.addGetterSetter(Xe,"direction",De),w.addGetterSetter(Xe,"fontFamily","Arial"),w.addGetterSetter(Xe,"fontSize",12,p()),w.addGetterSetter(Xe,"fontStyle",Fe),w.addGetterSetter(Xe,"fontVariant",Fe),w.addGetterSetter(Xe,"padding",0,p()),w.addGetterSetter(Xe,"align",Ie),w.addGetterSetter(Xe,"verticalAlign","top"),w.addGetterSetter(Xe,"lineHeight",1,p()),w.addGetterSetter(Xe,"wrap","word"),w.addGetterSetter(Xe,"ellipsis",!1,x()),w.addGetterSetter(Xe,"letterSpacing",0,p()),w.addGetterSetter(Xe,"text","",y()),w.addGetterSetter(Xe,"textDecoration","");const je="normal";function qe(t){t.fillText(this.partialText,0,0)}function Ue(t){t.strokeText(this.partialText,0,0)}class Ve extends Nt{constructor(t){super(t),this.dummyCanvas=g.createCanvasElement(),this.dataArray=[],this._readDataAttribute(),this.on("dataChange.konva",(function(){this._readDataAttribute(),this._setTextData()})),this.on("textChange.konva alignChange.konva letterSpacingChange.konva kerningFuncChange.konva fontSizeChange.konva fontFamilyChange.konva",this._setTextData),this._setTextData()}_getTextPathLength(){return ge.getPathLength(this.dataArray)}_getPointAtLength(t){if(!this.attrs.data)return null;return t-1>this.pathLength?null:ge.getPointAtLengthOfDataArray(t,this.dataArray)}_readDataAttribute(){this.dataArray=ge.parsePathData(this.attrs.data),this.pathLength=this._getTextPathLength()}_sceneFunc(t){t.setAttr("font",this._getContextFont()),t.setAttr("textBaseline",this.textBaseline()),t.setAttr("textAlign","left"),t.save();const e=this.textDecoration(),i=this.fill(),n=this.fontSize(),s=this.glyphInfo;"underline"===e&&t.beginPath();for(let i=0;i<s.length;i++){t.save();const r=s[i].p0;t.translate(r.x,r.y),t.rotate(s[i].rotation),this.partialText=s[i].text,t.fillStrokeShape(this),"underline"===e&&(0===i&&t.moveTo(0,n/2+1),t.lineTo(n,n/2+1)),t.restore()}"underline"===e&&(t.strokeStyle=i,t.lineWidth=n/20,t.stroke()),t.restore()}_hitFunc(t){t.beginPath();const e=this.glyphInfo;if(e.length>=1){const i=e[0].p0;t.moveTo(i.x,i.y)}for(let i=0;i<e.length;i++){const n=e[i].p1;t.lineTo(n.x,n.y)}t.setAttr("lineWidth",this.fontSize()),t.setAttr("strokeStyle",this.colorKey),t.stroke()}getTextWidth(){return this.textWidth}getTextHeight(){return g.warn("text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height."),this.textHeight}setText(t){return Xe.prototype.setText.call(this,t)}_getContextFont(){return Xe.prototype._getContextFont.call(this)}_getTextSize(t){const e=this.dummyCanvas.getContext("2d");e.save(),e.font=this._getContextFont();const i=e.measureText(t);return e.restore(),{width:i.width,height:parseInt(`${this.fontSize()}`,10)}}_setTextData(){const{width:t,height:e}=this._getTextSize(this.attrs.text);if(this.textWidth=t,this.textHeight=e,this.glyphInfo=[],!this.attrs.data)return null;const i=this.letterSpacing(),n=this.align(),s=this.kerningFunc(),r=Math.max(this.textWidth+((this.attrs.text||"").length-1)*i,0);let a=0;"center"===n&&(a=Math.max(0,this.pathLength/2-r/2)),"right"===n&&(a=Math.max(0,this.pathLength-r));const o=Re(this.text());let h=a;for(let t=0;t<o.length;t++){const e=this._getPointAtLength(h);if(!e)return;let a=this._getTextSize(o[t]).width+i;if(" "===o[t]&&"justify"===n){const t=this.text().split(" ").length-1;a+=(this.pathLength-r)/t}const l=this._getPointAtLength(h+a);if(!l)return;const d=ge.getLineLength(e.x,e.y,l.x,l.y);let c=0;if(s)try{c=s(o[t-1],o[t])*this.fontSize()}catch(t){c=0}e.x+=c,l.x+=c,this.textWidth+=c;const g=ge.getPointOnLine(c+d/2,e.x,e.y,l.x,l.y),u=Math.atan2(l.y-e.y,l.x-e.x);this.glyphInfo.push({transposeX:g.x,transposeY:g.y,text:o[t],rotation:u,p0:e,p1:l}),h+=a}}getSelfRect(){if(!this.glyphInfo.length)return{x:0,y:0,width:0,height:0};const t=[];this.glyphInfo.forEach((function(e){t.push(e.p0.x),t.push(e.p0.y),t.push(e.p1.x),t.push(e.p1.y)}));let e,i,n=t[0]||0,s=t[0]||0,r=t[1]||0,a=t[1]||0;for(let o=0;o<t.length/2;o++)e=t[2*o],i=t[2*o+1],n=Math.min(n,e),s=Math.max(s,e),r=Math.min(r,i),a=Math.max(a,i);const o=this.fontSize();return{x:n-o/2,y:r-o/2,width:s-n+o,height:a-r+o}}destroy(){return g.releaseCanvas(this.dummyCanvas),super.destroy()}}Ve.prototype._fillFunc=qe,Ve.prototype._strokeFunc=Ue,Ve.prototype._fillFuncHit=qe,Ve.prototype._strokeFuncHit=Ue,Ve.prototype.className="TextPath",Ve.prototype._attrsAffectingSize=["text","fontSize","data"],n(Ve),w.addGetterSetter(Ve,"data"),w.addGetterSetter(Ve,"fontFamily","Arial"),w.addGetterSetter(Ve,"fontSize",12,p()),w.addGetterSetter(Ve,"fontStyle",je),w.addGetterSetter(Ve,"align","left"),w.addGetterSetter(Ve,"letterSpacing",0,p()),w.addGetterSetter(Ve,"textBaseline","middle"),w.addGetterSetter(Ve,"fontVariant",je),w.addGetterSetter(Ve,"text",""),w.addGetterSetter(Ve,"textDecoration",null),w.addGetterSetter(Ve,"kerningFunc",null);const Ke="tr-konva",Qe=["resizeEnabledChange","rotateAnchorOffsetChange","rotateEnabledChange","enabledAnchorsChange","anchorSizeChange","borderEnabledChange","borderStrokeChange","borderStrokeWidthChange","borderDashChange","anchorStrokeChange","anchorStrokeWidthChange","anchorFillChange","anchorCornerRadiusChange","ignoreStrokeChange","anchorStyleFuncChange"].map((t=>t+`.${Ke}`)).join(" "),Je="nodesRect",$e=["widthChange","heightChange","scaleXChange","scaleYChange","skewXChange","skewYChange","rotationChange","offsetXChange","offsetYChange","transformsEnabledChange","strokeWidthChange"],Ze={"top-left":-45,"top-center":0,"top-right":45,"middle-right":-90,"middle-left":90,"bottom-left":-135,"bottom-center":180,"bottom-right":135},ti="ontouchstart"in i._global;const ei=["top-left","top-center","top-right","middle-right","middle-left","bottom-left","bottom-center","bottom-right"];function ii(t,e,i){const n=i.x+(t.x-i.x)*Math.cos(e)-(t.y-i.y)*Math.sin(e),s=i.y+(t.x-i.x)*Math.sin(e)+(t.y-i.y)*Math.cos(e);return{...t,rotation:t.rotation+e,x:n,y:s}}function ni(t,e){const i=function(t){return{x:t.x+t.width/2*Math.cos(t.rotation)+t.height/2*Math.sin(-t.rotation),y:t.y+t.height/2*Math.cos(t.rotation)+t.width/2*Math.sin(t.rotation)}}(t);return ii(t,e,i)}let si=0;class ri extends Xt{constructor(t){super(t),this._movingAnchorName=null,this._transforming=!1,this._createElements(),this._handleMouseMove=this._handleMouseMove.bind(this),this._handleMouseUp=this._handleMouseUp.bind(this),this.update=this.update.bind(this),this.on(Qe,this.update),this.getNode()&&this.update()}attachTo(t){return this.setNode(t),this}setNode(t){return g.warn("tr.setNode(shape), tr.node(shape) and tr.attachTo(shape) methods are deprecated. Please use tr.nodes(nodesArray) instead."),this.setNodes([t])}getNode(){return this._nodes&&this._nodes[0]}_getEventNamespace(){return Ke+this._id}setNodes(t=[]){this._nodes&&this._nodes.length&&this.detach();const e=t.filter((t=>!t.isAncestorOf(this)||(g.error("Konva.Transformer cannot be an a child of the node you are trying to attach"),!1)));this._nodes=t=e,1===t.length&&this.useSingleNodeRotation()?this.rotation(t[0].getAbsoluteRotation()):this.rotation(0),this._nodes.forEach((t=>{const e=()=>{1===this.nodes().length&&this.useSingleNodeRotation()&&this.rotation(this.nodes()[0].getAbsoluteRotation()),this._resetTransformCache(),this._transforming||this.isDragging()||this.update()},i=t._attrsAffectingSize.map((t=>t+"Change."+this._getEventNamespace())).join(" ");t.on(i,e),t.on($e.map((t=>t+`.${this._getEventNamespace()}`)).join(" "),e),t.on(`absoluteTransformChange.${this._getEventNamespace()}`,e),this._proxyDrag(t)})),this._resetTransformCache();return!!this.findOne(".top-left")&&this.update(),this}_proxyDrag(t){let e;t.on(`dragstart.${this._getEventNamespace()}`,(i=>{e=t.getAbsolutePosition(),this.isDragging()||t===this.findOne(".back")||this.startDrag(i,!1)})),t.on(`dragmove.${this._getEventNamespace()}`,(i=>{if(!e)return;const n=t.getAbsolutePosition(),s=n.x-e.x,r=n.y-e.y;this.nodes().forEach((e=>{if(e===t)return;if(e.isDragging())return;const n=e.getAbsolutePosition();e.setAbsolutePosition({x:n.x+s,y:n.y+r}),e.startDrag(i)})),e=null}))}getNodes(){return this._nodes||[]}getActiveAnchor(){return this._movingAnchorName}detach(){this._nodes&&this._nodes.forEach((t=>{t.off("."+this._getEventNamespace())})),this._nodes=[],this._resetTransformCache()}_resetTransformCache(){this._clearCache(Je),this._clearCache("transform"),this._clearSelfAndDescendantCache("absoluteTransform")}_getNodeRect(){return this._getCache(Je,this.__getNodeRect)}__getNodeShape(t,e=this.rotation(),n){const s=t.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),r=t.getAbsoluteScale(n),a=t.getAbsolutePosition(n),o=s.x*r.x-t.offsetX()*r.x,h=s.y*r.y-t.offsetY()*r.y,l=(i.getAngle(t.getAbsoluteRotation())+2*Math.PI)%(2*Math.PI);return ii({x:a.x+o*Math.cos(l)+h*Math.sin(-l),y:a.y+h*Math.cos(l)+o*Math.sin(l),width:s.width*r.x,height:s.height*r.y,rotation:l},-i.getAngle(e),{x:0,y:0})}__getNodeRect(){if(!this.getNode())return{x:-1e8,y:-1e8,width:0,height:0,rotation:0};const t=[];this.nodes().map((e=>{const i=e.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),n=[{x:i.x,y:i.y},{x:i.x+i.width,y:i.y},{x:i.x+i.width,y:i.y+i.height},{x:i.x,y:i.y+i.height}],s=e.getAbsoluteTransform();n.forEach((function(e){const i=s.point(e);t.push(i)}))}));const e=new s;e.rotate(-i.getAngle(this.rotation()));let n=1/0,r=1/0,a=-1/0,o=-1/0;t.forEach((function(t){const i=e.point(t);void 0===n&&(n=a=i.x,r=o=i.y),n=Math.min(n,i.x),r=Math.min(r,i.y),a=Math.max(a,i.x),o=Math.max(o,i.y)})),e.invert();const h=e.point({x:n,y:r});return{x:h.x,y:h.y,width:a-n,height:o-r,rotation:i.getAngle(this.rotation())}}getX(){return this._getNodeRect().x}getY(){return this._getNodeRect().y}getWidth(){return this._getNodeRect().width}getHeight(){return this._getNodeRect().height}_createElements(){this._createBack(),ei.forEach((t=>{this._createAnchor(t)})),this._createAnchor("rotater")}_createAnchor(t){const e=new Pe({stroke:"rgb(0, 161, 255)",fill:"white",strokeWidth:1,name:t+" _anchor",dragDistance:0,draggable:!0,hitStrokeWidth:ti?10:"auto"}),n=this;e.on("mousedown touchstart",(function(t){n._handleMouseDown(t)})),e.on("dragstart",(t=>{e.stopDrag(),t.cancelBubble=!0})),e.on("dragend",(t=>{t.cancelBubble=!0})),e.on("mouseenter",(()=>{const n=i.getAngle(this.rotation()),s=this.rotateAnchorCursor(),r=function(t,e,i){if("rotater"===t)return i;e+=g.degToRad(Ze[t]||0);const n=(g.radToDeg(e)%360+360)%360;return g._inRange(n,337.5,360)||g._inRange(n,0,22.5)?"ns-resize":g._inRange(n,22.5,67.5)?"nesw-resize":g._inRange(n,67.5,112.5)?"ew-resize":g._inRange(n,112.5,157.5)?"nwse-resize":g._inRange(n,157.5,202.5)?"ns-resize":g._inRange(n,202.5,247.5)?"nesw-resize":g._inRange(n,247.5,292.5)?"ew-resize":g._inRange(n,292.5,337.5)?"nwse-resize":(g.error("Transformer has unknown angle for cursor detection: "+n),"pointer")}(t,n,s);e.getStage().content&&(e.getStage().content.style.cursor=r),this._cursorChange=!0})),e.on("mouseout",(()=>{e.getStage().content&&(e.getStage().content.style.cursor=""),this._cursorChange=!1})),this.add(e)}_createBack(){const t=new Nt({name:"back",width:0,height:0,draggable:!0,sceneFunc(t,e){const i=e.getParent(),n=i.padding();t.beginPath(),t.rect(-n,-n,e.width()+2*n,e.height()+2*n),t.moveTo(e.width()/2,-n),i.rotateEnabled()&&i.rotateLineVisible()&&t.lineTo(e.width()/2,-i.rotateAnchorOffset()*g._sign(e.height())-n),t.fillStrokeShape(e)},hitFunc:(t,e)=>{if(!this.shouldOverdrawWholeArea())return;const i=this.padding();t.beginPath(),t.rect(-i,-i,e.width()+2*i,e.height()+2*i),t.fillStrokeShape(e)}});this.add(t),this._proxyDrag(t),t.on("dragstart",(t=>{t.cancelBubble=!0})),t.on("dragmove",(t=>{t.cancelBubble=!0})),t.on("dragend",(t=>{t.cancelBubble=!0})),this.on("dragmove",(t=>{this.update()}))}_handleMouseDown(t){if(this._transforming)return;this._movingAnchorName=t.target.name().split(" ")[0];const e=this._getNodeRect(),i=e.width,n=e.height,s=Math.sqrt(Math.pow(i,2)+Math.pow(n,2));this.sin=Math.abs(n/s),this.cos=Math.abs(i/s),"undefined"!=typeof window&&(window.addEventListener("mousemove",this._handleMouseMove),window.addEventListener("touchmove",this._handleMouseMove),window.addEventListener("mouseup",this._handleMouseUp,!0),window.addEventListener("touchend",this._handleMouseUp,!0)),this._transforming=!0;const r=t.target.getAbsolutePosition(),a=t.target.getStage().getPointerPosition();this._anchorDragOffset={x:a.x-r.x,y:a.y-r.y},si++,this._fire("transformstart",{evt:t.evt,target:this.getNode()}),this._nodes.forEach((e=>{e._fire("transformstart",{evt:t.evt,target:e})}))}_handleMouseMove(t){let e,n,s;const r=this.findOne("."+this._movingAnchorName),a=r.getStage();a.setPointersPositions(t);const o=a.getPointerPosition();let h={x:o.x-this._anchorDragOffset.x,y:o.y-this._anchorDragOffset.y};const l=r.getAbsolutePosition();this.anchorDragBoundFunc()&&(h=this.anchorDragBoundFunc()(l,h,t)),r.setAbsolutePosition(h);const d=r.getAbsolutePosition();if(l.x===d.x&&l.y===d.y)return;if("rotater"===this._movingAnchorName){const s=this._getNodeRect();e=r.x()-s.width/2,n=-r.y()+s.height/2;let a=Math.atan2(-n,e)+Math.PI/2;s.height<0&&(a-=Math.PI);const o=i.getAngle(this.rotation())+a,h=i.getAngle(this.rotationSnapTolerance()),l=function(t,e,n){let s=e;for(let r=0;r<t.length;r++){const a=i.getAngle(t[r]),o=Math.abs(a-e)%(2*Math.PI);Math.min(o,2*Math.PI-o)<n&&(s=a)}return s}(this.rotationSnaps(),o,h),d=ni(s,l-s.rotation);return void this._fitNodesInto(d,t)}const c=this.shiftBehavior();let g;g="inverted"===c?this.keepRatio()&&!t.shiftKey:"none"===c?this.keepRatio():this.keepRatio()||t.shiftKey;var u=this.centeredScaling()||t.altKey;if("top-left"===this._movingAnchorName){if(g){var f=u?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".bottom-right").x(),y:this.findOne(".bottom-right").y()};s=Math.sqrt(Math.pow(f.x-r.x(),2)+Math.pow(f.y-r.y(),2));var p=this.findOne(".top-left").x()>f.x?-1:1,m=this.findOne(".top-left").y()>f.y?-1:1;e=s*this.cos*p,n=s*this.sin*m,this.findOne(".top-left").x(f.x-e),this.findOne(".top-left").y(f.y-n)}}else if("top-center"===this._movingAnchorName)this.findOne(".top-left").y(r.y());else if("top-right"===this._movingAnchorName){if(g){f=u?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".bottom-left").x(),y:this.findOne(".bottom-left").y()};s=Math.sqrt(Math.pow(r.x()-f.x,2)+Math.pow(f.y-r.y(),2));p=this.findOne(".top-right").x()<f.x?-1:1,m=this.findOne(".top-right").y()>f.y?-1:1;e=s*this.cos*p,n=s*this.sin*m,this.findOne(".top-right").x(f.x+e),this.findOne(".top-right").y(f.y-n)}var _=r.position();this.findOne(".top-left").y(_.y),this.findOne(".bottom-right").x(_.x)}else if("middle-left"===this._movingAnchorName)this.findOne(".top-left").x(r.x());else if("middle-right"===this._movingAnchorName)this.findOne(".bottom-right").x(r.x());else if("bottom-left"===this._movingAnchorName){if(g){f=u?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".top-right").x(),y:this.findOne(".top-right").y()};s=Math.sqrt(Math.pow(f.x-r.x(),2)+Math.pow(r.y()-f.y,2));p=f.x<r.x()?-1:1,m=r.y()<f.y?-1:1;e=s*this.cos*p,n=s*this.sin*m,r.x(f.x-e),r.y(f.y+n)}_=r.position(),this.findOne(".top-left").x(_.x),this.findOne(".bottom-right").y(_.y)}else if("bottom-center"===this._movingAnchorName)this.findOne(".bottom-right").y(r.y());else if("bottom-right"===this._movingAnchorName){if(g){f=u?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".top-left").x(),y:this.findOne(".top-left").y()};s=Math.sqrt(Math.pow(r.x()-f.x,2)+Math.pow(r.y()-f.y,2));p=this.findOne(".bottom-right").x()<f.x?-1:1,m=this.findOne(".bottom-right").y()<f.y?-1:1;e=s*this.cos*p,n=s*this.sin*m,this.findOne(".bottom-right").x(f.x+e),this.findOne(".bottom-right").y(f.y+n)}}else console.error(new Error("Wrong position argument of selection resizer: "+this._movingAnchorName));if(u=this.centeredScaling()||t.altKey){const t=this.findOne(".top-left"),e=this.findOne(".bottom-right"),i=t.x(),n=t.y(),s=this.getWidth()-e.x(),r=this.getHeight()-e.y();e.move({x:-i,y:-n}),t.move({x:s,y:r})}const y=this.findOne(".top-left").getAbsolutePosition();e=y.x,n=y.y;const v=this.findOne(".bottom-right").x()-this.findOne(".top-left").x(),x=this.findOne(".bottom-right").y()-this.findOne(".top-left").y();this._fitNodesInto({x:e,y:n,width:v,height:x,rotation:i.getAngle(this.rotation())},t)}_handleMouseUp(t){this._removeEvents(t)}getAbsoluteTransform(){return this.getTransform()}_removeEvents(t){var e;if(this._transforming){this._transforming=!1,"undefined"!=typeof window&&(window.removeEventListener("mousemove",this._handleMouseMove),window.removeEventListener("touchmove",this._handleMouseMove),window.removeEventListener("mouseup",this._handleMouseUp,!0),window.removeEventListener("touchend",this._handleMouseUp,!0));const i=this.getNode();si--,this._fire("transformend",{evt:t,target:i}),null===(e=this.getLayer())||void 0===e||e.batchDraw(),i&&this._nodes.forEach((e=>{var i;e._fire("transformend",{evt:t,target:e}),null===(i=e.getLayer())||void 0===i||i.batchDraw()})),this._movingAnchorName=null}}_fitNodesInto(t,e){const n=this._getNodeRect();if(g._inRange(t.width,2*-this.padding()-1,1))return void this.update();if(g._inRange(t.height,2*-this.padding()-1,1))return void this.update();const r=new s;if(r.rotate(i.getAngle(this.rotation())),this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("left")>=0){const e=r.point({x:2*-this.padding(),y:0});t.x+=e.x,t.y+=e.y,t.width+=2*this.padding(),this._movingAnchorName=this._movingAnchorName.replace("left","right"),this._anchorDragOffset.x-=e.x,this._anchorDragOffset.y-=e.y}else if(this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("right")>=0){const e=r.point({x:2*this.padding(),y:0});this._movingAnchorName=this._movingAnchorName.replace("right","left"),this._anchorDragOffset.x-=e.x,this._anchorDragOffset.y-=e.y,t.width+=2*this.padding()}if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("top")>=0){const e=r.point({x:0,y:2*-this.padding()});t.x+=e.x,t.y+=e.y,this._movingAnchorName=this._movingAnchorName.replace("top","bottom"),this._anchorDragOffset.x-=e.x,this._anchorDragOffset.y-=e.y,t.height+=2*this.padding()}else if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("bottom")>=0){const e=r.point({x:0,y:2*this.padding()});this._movingAnchorName=this._movingAnchorName.replace("bottom","top"),this._anchorDragOffset.x-=e.x,this._anchorDragOffset.y-=e.y,t.height+=2*this.padding()}if(this.boundBoxFunc()){const e=this.boundBoxFunc()(n,t);e?t=e:g.warn("boundBoxFunc returned falsy. You should return new bound rect from it!")}const a=1e7,o=new s;o.translate(n.x,n.y),o.rotate(n.rotation),o.scale(n.width/a,n.height/a);const h=new s,l=t.width/a,d=t.height/a;!1===this.flipEnabled()?(h.translate(t.x,t.y),h.rotate(t.rotation),h.translate(t.width<0?t.width:0,t.height<0?t.height:0),h.scale(Math.abs(l),Math.abs(d))):(h.translate(t.x,t.y),h.rotate(t.rotation),h.scale(l,d));const c=h.multiply(o.invert());this._nodes.forEach((t=>{var e;const i=t.getParent().getAbsoluteTransform(),n=t.getTransform().copy();n.translate(t.offsetX(),t.offsetY());const r=new s;r.multiply(i.copy().invert()).multiply(c).multiply(i).multiply(n);const a=r.decompose();t.setAttrs(a),null===(e=t.getLayer())||void 0===e||e.batchDraw()})),this.rotation(g._getRotation(t.rotation)),this._nodes.forEach((t=>{this._fire("transform",{evt:e,target:t}),t._fire("transform",{evt:e,target:t})})),this._resetTransformCache(),this.update(),this.getLayer().batchDraw()}forceUpdate(){this._resetTransformCache(),this.update()}_batchChangeChild(t,e){this.findOne(t).setAttrs(e)}update(){var t;const e=this._getNodeRect();this.rotation(g._getRotation(e.rotation));const i=e.width,n=e.height,s=this.enabledAnchors(),r=this.resizeEnabled(),a=this.padding(),o=this.anchorSize(),h=this.find("._anchor");h.forEach((t=>{t.setAttrs({width:o,height:o,offsetX:o/2,offsetY:o/2,stroke:this.anchorStroke(),strokeWidth:this.anchorStrokeWidth(),fill:this.anchorFill(),cornerRadius:this.anchorCornerRadius()})})),this._batchChangeChild(".top-left",{x:0,y:0,offsetX:o/2+a,offsetY:o/2+a,visible:r&&s.indexOf("top-left")>=0}),this._batchChangeChild(".top-center",{x:i/2,y:0,offsetY:o/2+a,visible:r&&s.indexOf("top-center")>=0}),this._batchChangeChild(".top-right",{x:i,y:0,offsetX:o/2-a,offsetY:o/2+a,visible:r&&s.indexOf("top-right")>=0}),this._batchChangeChild(".middle-left",{x:0,y:n/2,offsetX:o/2+a,visible:r&&s.indexOf("middle-left")>=0}),this._batchChangeChild(".middle-right",{x:i,y:n/2,offsetX:o/2-a,visible:r&&s.indexOf("middle-right")>=0}),this._batchChangeChild(".bottom-left",{x:0,y:n,offsetX:o/2+a,offsetY:o/2-a,visible:r&&s.indexOf("bottom-left")>=0}),this._batchChangeChild(".bottom-center",{x:i/2,y:n,offsetY:o/2-a,visible:r&&s.indexOf("bottom-center")>=0}),this._batchChangeChild(".bottom-right",{x:i,y:n,offsetX:o/2-a,offsetY:o/2-a,visible:r&&s.indexOf("bottom-right")>=0}),this._batchChangeChild(".rotater",{x:i/2,y:-this.rotateAnchorOffset()*g._sign(n)-a,visible:this.rotateEnabled()}),this._batchChangeChild(".back",{width:i,height:n,visible:this.borderEnabled(),stroke:this.borderStroke(),strokeWidth:this.borderStrokeWidth(),dash:this.borderDash(),x:0,y:0});const l=this.anchorStyleFunc();l&&h.forEach((t=>{l(t)})),null===(t=this.getLayer())||void 0===t||t.batchDraw()}isTransforming(){return this._transforming}stopTransform(){if(this._transforming){this._removeEvents();const t=this.findOne("."+this._movingAnchorName);t&&t.stopDrag()}}destroy(){return this.getStage()&&this._cursorChange&&this.getStage().content&&(this.getStage().content.style.cursor=""),Xt.prototype.destroy.call(this),this.detach(),this._removeEvents(),this}toObject(){return V.prototype.toObject.call(this)}clone(t){return V.prototype.clone.call(this,t)}getClientRect(){return this.nodes().length>0?super.getClientRect():{x:0,y:0,width:0,height:0}}}ri.isTransforming=()=>si>0,ri.prototype.className="Transformer",n(ri),w.addGetterSetter(ri,"enabledAnchors",ei,(function(t){return t instanceof Array||g.warn("enabledAnchors value should be an array"),t instanceof Array&&t.forEach((function(t){-1===ei.indexOf(t)&&g.warn("Unknown anchor name: "+t+". Available names are: "+ei.join(", "))})),t||[]})),w.addGetterSetter(ri,"flipEnabled",!0,x()),w.addGetterSetter(ri,"resizeEnabled",!0),w.addGetterSetter(ri,"anchorSize",10,p()),w.addGetterSetter(ri,"rotateEnabled",!0),w.addGetterSetter(ri,"rotateLineVisible",!0),w.addGetterSetter(ri,"rotationSnaps",[]),w.addGetterSetter(ri,"rotateAnchorOffset",50,p()),w.addGetterSetter(ri,"rotateAnchorCursor","crosshair"),w.addGetterSetter(ri,"rotationSnapTolerance",5,p()),w.addGetterSetter(ri,"borderEnabled",!0),w.addGetterSetter(ri,"anchorStroke","rgb(0, 161, 255)"),w.addGetterSetter(ri,"anchorStrokeWidth",1,p()),w.addGetterSetter(ri,"anchorFill","white"),w.addGetterSetter(ri,"anchorCornerRadius",0,p()),w.addGetterSetter(ri,"borderStroke","rgb(0, 161, 255)"),w.addGetterSetter(ri,"borderStrokeWidth",1,p()),w.addGetterSetter(ri,"borderDash"),w.addGetterSetter(ri,"keepRatio",!0),w.addGetterSetter(ri,"shiftBehavior","default"),w.addGetterSetter(ri,"centeredScaling",!1),w.addGetterSetter(ri,"ignoreStroke",!1),w.addGetterSetter(ri,"padding",0,p()),w.addGetterSetter(ri,"node"),w.addGetterSetter(ri,"nodes"),w.addGetterSetter(ri,"boundBoxFunc"),w.addGetterSetter(ri,"anchorDragBoundFunc"),w.addGetterSetter(ri,"anchorStyleFunc"),w.addGetterSetter(ri,"shouldOverdrawWholeArea",!1),w.addGetterSetter(ri,"useSingleNodeRotation",!0),w.backCompat(ri,{lineEnabled:"borderEnabled",rotateHandlerOffset:"rotateAnchorOffset",enabledHandlers:"enabledAnchors"});class ai extends Nt{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.radius(),0,i.getAngle(this.angle()),this.clockwise()),t.lineTo(0,0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*this.radius()}getHeight(){return 2*this.radius()}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}function oi(){this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}ai.prototype.className="Wedge",ai.prototype._centroid=!0,ai.prototype._attrsAffectingSize=["radius"],n(ai),w.addGetterSetter(ai,"radius",0,p()),w.addGetterSetter(ai,"angle",0,p()),w.addGetterSetter(ai,"clockwise",!1),w.backCompat(ai,{angleDeg:"angle",getAngleDeg:"getAngle",setAngleDeg:"setAngle"});const hi=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],li=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];w.addGetterSetter(V,"blurRadius",0,p(),w.afterSetFilter);w.addGetterSetter(V,"brightness",0,p(),w.afterSetFilter);w.addGetterSetter(V,"contrast",0,p(),w.afterSetFilter);function di(t,e,i,n,s){let r,a=i-e,o=s-n;return 0===a?n+o/2:0===o?n:(r=(t-e)/a,r=o*r+n,r)}w.addGetterSetter(V,"embossStrength",.5,p(),w.afterSetFilter),w.addGetterSetter(V,"embossWhiteLevel",.5,p(),w.afterSetFilter),w.addGetterSetter(V,"embossDirection","top-left",null,w.afterSetFilter),w.addGetterSetter(V,"embossBlend",!1,null,w.afterSetFilter);w.addGetterSetter(V,"enhance",0,p(),w.afterSetFilter);w.addGetterSetter(V,"hue",0,p(),w.afterSetFilter),w.addGetterSetter(V,"saturation",0,p(),w.afterSetFilter),w.addGetterSetter(V,"luminance",0,p(),w.afterSetFilter);w.addGetterSetter(V,"hue",0,p(),w.afterSetFilter),w.addGetterSetter(V,"saturation",0,p(),w.afterSetFilter),w.addGetterSetter(V,"value",0,p(),w.afterSetFilter);function ci(t,e,i){let n=4*(i*t.width+e);const s=[];return s.push(t.data[n++],t.data[n++],t.data[n++],t.data[n++]),s}function gi(t,e){return Math.sqrt(Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)+Math.pow(t[2]-e[2],2))}w.addGetterSetter(V,"kaleidoscopePower",2,p(),w.afterSetFilter),w.addGetterSetter(V,"kaleidoscopeAngle",0,p(),w.afterSetFilter);w.addGetterSetter(V,"threshold",0,p(),w.afterSetFilter);w.addGetterSetter(V,"noise",.2,p(),w.afterSetFilter);w.addGetterSetter(V,"pixelSize",8,p(),w.afterSetFilter);w.addGetterSetter(V,"levels",.5,p(),w.afterSetFilter);w.addGetterSetter(V,"red",0,(function(t){return this._filterUpToDate=!1,t>255?255:t<0?0:Math.round(t)})),w.addGetterSetter(V,"green",0,(function(t){return this._filterUpToDate=!1,t>255?255:t<0?0:Math.round(t)})),w.addGetterSetter(V,"blue",0,f,w.afterSetFilter);w.addGetterSetter(V,"red",0,(function(t){return this._filterUpToDate=!1,t>255?255:t<0?0:Math.round(t)})),w.addGetterSetter(V,"green",0,(function(t){return this._filterUpToDate=!1,t>255?255:t<0?0:Math.round(t)})),w.addGetterSetter(V,"blue",0,f,w.afterSetFilter),w.addGetterSetter(V,"alpha",1,(function(t){return this._filterUpToDate=!1,t>1?1:t<0?0:t}));w.addGetterSetter(V,"threshold",.5,p(),w.afterSetFilter);return Zt.Util._assign(Zt,{Arc:te,Arrow:ue,Circle:fe,Ellipse:pe,Image:me,Label:we,Tag:Ce,Line:ne,Path:ge,Rect:Pe,RegularPolygon:ke,Ring:Te,Sprite:Me,Star:Ge,Text:Xe,TextPath:Ve,Transformer:ri,Wedge:ai,Filters:{Blur:function(t){const e=Math.round(this.blurRadius());e>0&&function(t,e){const i=t.data,n=t.width,s=t.height;let r,a,o,h,l,d,c,g,u,f,p,m,_,y,v,x,b,S,w,C,P,k,A,T,M=e+e+1,G=n-1,R=s-1,E=e+1,D=E*(E+1)/2,L=new oi,I=null,O=L,F=null,B=null,N=hi[e],H=li[e];for(o=1;o<M;o++)O=O.next=new oi,o===E&&(I=O);for(O.next=L,c=d=0,a=0;a<s;a++){for(x=b=S=w=g=u=f=p=0,m=E*(C=i[d]),_=E*(P=i[d+1]),y=E*(k=i[d+2]),v=E*(A=i[d+3]),g+=D*C,u+=D*P,f+=D*k,p+=D*A,O=L,o=0;o<E;o++)O.r=C,O.g=P,O.b=k,O.a=A,O=O.next;for(o=1;o<E;o++)h=d+((G<o?G:o)<<2),g+=(O.r=C=i[h])*(T=E-o),u+=(O.g=P=i[h+1])*T,f+=(O.b=k=i[h+2])*T,p+=(O.a=A=i[h+3])*T,x+=C,b+=P,S+=k,w+=A,O=O.next;for(F=L,B=I,r=0;r<n;r++)i[d+3]=A=p*N>>H,0!==A?(A=255/A,i[d]=(g*N>>H)*A,i[d+1]=(u*N>>H)*A,i[d+2]=(f*N>>H)*A):i[d]=i[d+1]=i[d+2]=0,g-=m,u-=_,f-=y,p-=v,m-=F.r,_-=F.g,y-=F.b,v-=F.a,h=c+((h=r+e+1)<G?h:G)<<2,x+=F.r=i[h],b+=F.g=i[h+1],S+=F.b=i[h+2],w+=F.a=i[h+3],g+=x,u+=b,f+=S,p+=w,F=F.next,m+=C=B.r,_+=P=B.g,y+=k=B.b,v+=A=B.a,x-=C,b-=P,S-=k,w-=A,B=B.next,d+=4;c+=n}for(r=0;r<n;r++){for(b=S=w=x=u=f=p=g=0,d=r<<2,m=E*(C=i[d]),_=E*(P=i[d+1]),y=E*(k=i[d+2]),v=E*(A=i[d+3]),g+=D*C,u+=D*P,f+=D*k,p+=D*A,O=L,o=0;o<E;o++)O.r=C,O.g=P,O.b=k,O.a=A,O=O.next;for(l=n,o=1;o<=e;o++)d=l+r<<2,g+=(O.r=C=i[d])*(T=E-o),u+=(O.g=P=i[d+1])*T,f+=(O.b=k=i[d+2])*T,p+=(O.a=A=i[d+3])*T,x+=C,b+=P,S+=k,w+=A,O=O.next,o<R&&(l+=n);for(d=r,F=L,B=I,a=0;a<s;a++)h=d<<2,i[h+3]=A=p*N>>H,A>0?(A=255/A,i[h]=(g*N>>H)*A,i[h+1]=(u*N>>H)*A,i[h+2]=(f*N>>H)*A):i[h]=i[h+1]=i[h+2]=0,g-=m,u-=_,f-=y,p-=v,m-=F.r,_-=F.g,y-=F.b,v-=F.a,h=r+((h=a+E)<R?h:R)*n<<2,g+=x+=F.r=i[h],u+=b+=F.g=i[h+1],f+=S+=F.b=i[h+2],p+=w+=F.a=i[h+3],F=F.next,m+=C=B.r,_+=P=B.g,y+=k=B.b,v+=A=B.a,x-=C,b-=P,S-=k,w-=A,B=B.next,d+=n}}(t,e)},Brighten:function(t){let e,i=255*this.brightness(),n=t.data,s=n.length;for(e=0;e<s;e+=4)n[e]+=i,n[e+1]+=i,n[e+2]+=i},Contrast:function(t){const e=Math.pow((this.contrast()+100)/100,2);let i,n=t.data,s=n.length,r=150,a=150,o=150;for(i=0;i<s;i+=4)r=n[i],a=n[i+1],o=n[i+2],r/=255,r-=.5,r*=e,r+=.5,r*=255,a/=255,a-=.5,a*=e,a+=.5,a*=255,o/=255,o-=.5,o*=e,o+=.5,o*=255,r=r<0?0:r>255?255:r,a=a<0?0:a>255?255:a,o=o<0?0:o>255?255:o,n[i]=r,n[i+1]=a,n[i+2]=o},Emboss:function(t){let e=10*this.embossStrength(),i=255*this.embossWhiteLevel(),n=this.embossDirection(),s=this.embossBlend(),r=0,a=0,o=t.data,h=t.width,l=t.height,d=4*h,c=l;switch(n){case"top-left":r=-1,a=-1;break;case"top":r=-1,a=0;break;case"top-right":r=-1,a=1;break;case"right":r=0,a=1;break;case"bottom-right":r=1,a=1;break;case"bottom":r=1,a=0;break;case"bottom-left":r=1,a=-1;break;case"left":r=0,a=-1;break;default:g.error("Unknown emboss direction: "+n)}do{const t=(c-1)*d;let n=r;c+n<1&&(n=0),c+n>l&&(n=0);const g=(c-1+n)*h*4;let u=h;do{const n=t+4*(u-1);let r=a;u+r<1&&(r=0),u+r>h&&(r=0);const l=g+4*(u-1+r),d=o[n]-o[l],c=o[n+1]-o[l+1],f=o[n+2]-o[l+2];let p=d;const m=p>0?p:-p;if((c>0?c:-c)>m&&(p=c),(f>0?f:-f)>m&&(p=f),p*=e,s){const t=o[n]+p,e=o[n+1]+p,i=o[n+2]+p;o[n]=t>255?255:t<0?0:t,o[n+1]=e>255?255:e<0?0:e,o[n+2]=i>255?255:i<0?0:i}else{let t=i-p;t<0?t=0:t>255&&(t=255),o[n]=o[n+1]=o[n+2]=t}}while(--u)}while(--c)},Enhance:function(t){let e,i,n,s,r=t.data,a=r.length,o=r[0],h=o,l=r[1],d=l,c=r[2],g=c;const u=this.enhance();if(0===u)return;for(s=0;s<a;s+=4)e=r[s+0],e<o?o=e:e>h&&(h=e),i=r[s+1],i<l?l=i:i>d&&(d=i),n=r[s+2],n<c?c=n:n>g&&(g=n);let f,p,m,_,y,v,x,b,S;for(h===o&&(h=255,o=0),d===l&&(d=255,l=0),g===c&&(g=255,c=0),u>0?(p=h+u*(255-h),m=o-u*(o-0),y=d+u*(255-d),v=l-u*(l-0),b=g+u*(255-g),S=c-u*(c-0)):(f=.5*(h+o),p=h+u*(h-f),m=o+u*(o-f),_=.5*(d+l),y=d+u*(d-_),v=l+u*(l-_),x=.5*(g+c),b=g+u*(g-x),S=c+u*(c-x)),s=0;s<a;s+=4)r[s+0]=di(r[s+0],o,h,m,p),r[s+1]=di(r[s+1],l,d,v,y),r[s+2]=di(r[s+2],c,g,S,b)},Grayscale:function(t){let e,i,n=t.data,s=n.length;for(e=0;e<s;e+=4)i=.34*n[e]+.5*n[e+1]+.16*n[e+2],n[e]=i,n[e+1]=i,n[e+2]=i},HSL:function(t){let e,i=t.data,n=i.length,s=Math.pow(2,this.saturation()),r=Math.abs(this.hue()+360)%360,a=127*this.luminance();const o=1*s*Math.cos(r*Math.PI/180),h=1*s*Math.sin(r*Math.PI/180),l=.299+.701*o+.167*h,d=.587-.587*o+.33*h,c=.114-.114*o-.497*h,g=.299-.299*o-.328*h,u=.587+.413*o+.035*h,f=.114-.114*o+.293*h,p=.299-.3*o+1.25*h,m=.587-.586*o-1.05*h,_=.114+.886*o-.2*h;let y,v,x,b;for(e=0;e<n;e+=4)y=i[e+0],v=i[e+1],x=i[e+2],b=i[e+3],i[e+0]=l*y+d*v+c*x+a,i[e+1]=g*y+u*v+f*x+a,i[e+2]=p*y+m*v+_*x+a,i[e+3]=b},HSV:function(t){const e=t.data,i=e.length,n=Math.pow(2,this.value()),s=Math.pow(2,this.saturation()),r=Math.abs(this.hue()+360)%360,a=n*s*Math.cos(r*Math.PI/180),o=n*s*Math.sin(r*Math.PI/180),h=.299*n+.701*a+.167*o,l=.587*n-.587*a+.33*o,d=.114*n-.114*a-.497*o,c=.299*n-.299*a-.328*o,g=.587*n+.413*a+.035*o,u=.114*n-.114*a+.293*o,f=.299*n-.3*a+1.25*o,p=.587*n-.586*a-1.05*o,m=.114*n+.886*a-.2*o;let _,y,v,x;for(let t=0;t<i;t+=4)_=e[t+0],y=e[t+1],v=e[t+2],x=e[t+3],e[t+0]=h*_+l*y+d*v,e[t+1]=c*_+g*y+u*v,e[t+2]=f*_+p*y+m*v,e[t+3]=x},Invert:function(t){let e,i=t.data,n=i.length;for(e=0;e<n;e+=4)i[e]=255-i[e],i[e+1]=255-i[e+1],i[e+2]=255-i[e+2]},Kaleidoscope:function(t){const e=t.width,i=t.height;let n,s,r,a,o,h,l,d,c,u,f=Math.round(this.kaleidoscopePower());const p=Math.round(this.kaleidoscopeAngle()),m=Math.floor(e*(p%360)/360);if(f<1)return;const _=g.createCanvasElement();_.width=e,_.height=i;const y=_.getContext("2d").getImageData(0,0,e,i);g.releaseCanvas(_),function(t,e,i){let n,s,r,a,o=t.data,h=e.data,l=t.width,d=t.height,c=i.polarCenterX||l/2,g=i.polarCenterY||d/2,u=0,f=0,p=0,m=0,_=Math.sqrt(c*c+g*g);s=l-c,r=d-g,a=Math.sqrt(s*s+r*r),_=a>_?a:_;let y,v,x,b,S=d,w=l,C=360/w*Math.PI/180;for(v=0;v<w;v+=1)for(x=Math.sin(v*C),b=Math.cos(v*C),y=0;y<S;y+=1)s=Math.floor(c+_*y/S*b),r=Math.floor(g+_*y/S*x),n=4*(r*l+s),u=o[n+0],f=o[n+1],p=o[n+2],m=o[n+3],n=4*(v+y*l),h[n+0]=u,h[n+1]=f,h[n+2]=p,h[n+3]=m}(t,y,{polarCenterX:e/2,polarCenterY:i/2});let v=e/Math.pow(2,f);for(;v<=8;)v*=2,f-=1;v=Math.ceil(v);let x=v,b=0,S=x,w=1;for(m+v>e&&(b=x,S=0,w=-1),s=0;s<i;s+=1)for(n=b;n!==S;n+=w)r=Math.round(n+m)%e,c=4*(e*s+r),o=y.data[c+0],h=y.data[c+1],l=y.data[c+2],d=y.data[c+3],u=4*(e*s+n),y.data[u+0]=o,y.data[u+1]=h,y.data[u+2]=l,y.data[u+3]=d;for(s=0;s<i;s+=1)for(x=Math.floor(v),a=0;a<f;a+=1){for(n=0;n<x+1;n+=1)c=4*(e*s+n),o=y.data[c+0],h=y.data[c+1],l=y.data[c+2],d=y.data[c+3],u=4*(e*s+2*x-n-1),y.data[u+0]=o,y.data[u+1]=h,y.data[u+2]=l,y.data[u+3]=d;x*=2}!function(t,e,i){let n,s,r,a,o,h,l=t.data,d=e.data,c=t.width,g=t.height,u=i.polarCenterX||c/2,f=i.polarCenterY||g/2,p=0,m=0,_=0,y=0,v=Math.sqrt(u*u+f*f);s=c-u,r=g-f,h=Math.sqrt(s*s+r*r),v=h>v?h:v;let x,b,S,w,C=g,P=c;for(s=0;s<c;s+=1)for(r=0;r<g;r+=1)a=s-u,o=r-f,x=Math.sqrt(a*a+o*o)*C/v,b=(180*Math.atan2(o,a)/Math.PI+360+0)%360,b=b*P/360,S=Math.floor(b),w=Math.floor(x),n=4*(w*c+S),p=l[n+0],m=l[n+1],_=l[n+2],y=l[n+3],n=4*(r*c+s),d[n+0]=p,d[n+1]=m,d[n+2]=_,d[n+3]=y}(y,t,{polarRotation:0})},Mask:function(t){let e=function(t,e){const i=ci(t,0,0),n=ci(t,t.width-1,0),s=ci(t,0,t.height-1),r=ci(t,t.width-1,t.height-1),a=e||10;if(gi(i,n)<a&&gi(n,r)<a&&gi(r,s)<a&&gi(s,i)<a){const e=function(t){const e=[0,0,0];for(let i=0;i<t.length;i++)e[0]+=t[i][0],e[1]+=t[i][1],e[2]+=t[i][2];return e[0]/=t.length,e[1]/=t.length,e[2]/=t.length,e}([n,i,r,s]),o=[];for(let i=0;i<t.width*t.height;i++){const n=gi(e,[t.data[4*i],t.data[4*i+1],t.data[4*i+2]]);o[i]=n<a?0:255}return o}}(t,this.threshold());return e&&(e=function(t,e,i){const n=[1,1,1,1,0,1,1,1,1],s=Math.round(Math.sqrt(n.length)),r=Math.floor(s/2),a=[];for(let o=0;o<i;o++)for(let h=0;h<e;h++){const l=o*e+h;let d=0;for(let a=0;a<s;a++)for(let l=0;l<s;l++){const c=o+a-r,g=h+l-r;if(c>=0&&c<i&&g>=0&&g<e){const i=n[a*s+l];d+=t[c*e+g]*i}}a[l]=2040===d?255:0}return a}(e,t.width,t.height),e=function(t,e,i){const n=[1,1,1,1,1,1,1,1,1],s=Math.round(Math.sqrt(n.length)),r=Math.floor(s/2),a=[];for(let o=0;o<i;o++)for(let h=0;h<e;h++){const l=o*e+h;let d=0;for(let a=0;a<s;a++)for(let l=0;l<s;l++){const c=o+a-r,g=h+l-r;if(c>=0&&c<i&&g>=0&&g<e){const i=n[a*s+l];d+=t[c*e+g]*i}}a[l]=d>=1020?255:0}return a}(e,t.width,t.height),e=function(t,e,i){const n=[1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9],s=Math.round(Math.sqrt(n.length)),r=Math.floor(s/2),a=[];for(let o=0;o<i;o++)for(let h=0;h<e;h++){const l=o*e+h;let d=0;for(let a=0;a<s;a++)for(let l=0;l<s;l++){const c=o+a-r,g=h+l-r;if(c>=0&&c<i&&g>=0&&g<e){const i=n[a*s+l];d+=t[c*e+g]*i}}a[l]=d}return a}(e,t.width,t.height),function(t,e){for(let i=0;i<t.width*t.height;i++)t.data[4*i+3]=e[i]}(t,e)),t},Noise:function(t){const e=255*this.noise(),i=t.data,n=i.length,s=e/2;for(let t=0;t<n;t+=4)i[t+0]+=s-2*s*Math.random(),i[t+1]+=s-2*s*Math.random(),i[t+2]+=s-2*s*Math.random()},Pixelate:function(t){let e,i,n,s,r,a,o,h,l,d,c,u,f,p,m=Math.ceil(this.pixelSize()),_=t.width,y=t.height,v=Math.ceil(_/m),x=Math.ceil(y/m),b=t.data;if(m<=0)g.error("pixelSize value can not be <= 0");else for(u=0;u<v;u+=1)for(f=0;f<x;f+=1){for(s=0,r=0,a=0,o=0,h=u*m,l=h+m,d=f*m,c=d+m,p=0,e=h;e<l;e+=1)if(!(e>=_))for(i=d;i<c;i+=1)i>=y||(n=4*(_*i+e),s+=b[n+0],r+=b[n+1],a+=b[n+2],o+=b[n+3],p+=1);for(s/=p,r/=p,a/=p,o/=p,e=h;e<l;e+=1)if(!(e>=_))for(i=d;i<c;i+=1)i>=y||(n=4*(_*i+e),b[n+0]=s,b[n+1]=r,b[n+2]=a,b[n+3]=o)}},Posterize:function(t){let e,i=Math.round(254*this.levels())+1,n=t.data,s=n.length,r=255/i;for(e=0;e<s;e+=1)n[e]=Math.floor(n[e]/r)*r},RGB:function(t){let e,i,n=t.data,s=n.length,r=this.red(),a=this.green(),o=this.blue();for(e=0;e<s;e+=4)i=(.34*n[e]+.5*n[e+1]+.16*n[e+2])/255,n[e]=i*r,n[e+1]=i*a,n[e+2]=i*o,n[e+3]=n[e+3]},RGBA:function(t){const e=t.data,i=e.length,n=this.red(),s=this.green(),r=this.blue(),a=this.alpha();for(let t=0;t<i;t+=4){const i=1-a;e[t]=n*a+e[t]*i,e[t+1]=s*a+e[t+1]*i,e[t+2]=r*a+e[t+2]*i}},Sepia:function(t){let e,i,n,s,r=t.data,a=r.length;for(e=0;e<a;e+=4)i=r[e+0],n=r[e+1],s=r[e+2],r[e+0]=Math.min(255,.393*i+.769*n+.189*s),r[e+1]=Math.min(255,.349*i+.686*n+.168*s),r[e+2]=Math.min(255,.272*i+.534*n+.131*s)},Solarize:function(t){const e=t.data,i=t.width,n=4*i;let s=t.height;do{const t=(s-1)*n;let r=i;do{const i=t+4*(r-1);let n=e[i],s=e[i+1],a=e[i+2];n>127&&(n=255-n),s>127&&(s=255-s),a>127&&(a=255-a),e[i]=n,e[i+1]=s,e[i+2]=a}while(--r)}while(--s)},Threshold:function(t){const e=255*this.threshold(),i=t.data,n=i.length;for(let t=0;t<n;t+=1)i[t]=i[t]<e?0:255}}})}));
+   */const t=Math.PI/180;const e="undefined"!=typeof global?global:"undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope?self:{},i={_global:e,version:"9.3.14",isBrowser:"undefined"!=typeof window&&("[object Window]"==={}.toString.call(window)||"[object global]"==={}.toString.call(window)),isUnminified:/param/.test(function(t){}.toString()),dblClickWindow:400,getAngle:e=>i.angleDeg?e*t:e,enableTrace:!1,pointerEventsEnabled:!0,autoDrawEnabled:!0,hitOnDragEnabled:!1,capturePointerEventsEnabled:!1,_mouseListenClick:!1,_touchListenClick:!1,_pointerListenClick:!1,_mouseInDblClickWindow:!1,_touchInDblClickWindow:!1,_pointerInDblClickWindow:!1,_mouseDblClickPointerId:null,_touchDblClickPointerId:null,_pointerDblClickPointerId:null,_fixTextRendering:!1,pixelRatio:"undefined"!=typeof window&&window.devicePixelRatio||1,dragDistance:3,angleDeg:!0,showWarnings:!0,dragButtons:[0,1],isDragging:()=>i.DD.isDragging,isTransforming(){var t;return null===(t=i.Transformer)||void 0===t?void 0:t.isTransforming()},isDragReady:()=>!!i.DD.node,releaseCanvasOnDestroy:!0,document:e.document,_injectGlobal(t){e.Konva=t}},r=t=>{i[t.prototype.getClassName()]=t};i._injectGlobal(i);class a{constructor(t=[1,0,0,1,0,0]){this.dirty=!1,this.m=t&&t.slice()||[1,0,0,1,0,0]}reset(){this.m[0]=1,this.m[1]=0,this.m[2]=0,this.m[3]=1,this.m[4]=0,this.m[5]=0}copy(){return new a(this.m)}copyInto(t){t.m[0]=this.m[0],t.m[1]=this.m[1],t.m[2]=this.m[2],t.m[3]=this.m[3],t.m[4]=this.m[4],t.m[5]=this.m[5]}point(t){var e=this.m;return{x:e[0]*t.x+e[2]*t.y+e[4],y:e[1]*t.x+e[3]*t.y+e[5]}}translate(t,e){return this.m[4]+=this.m[0]*t+this.m[2]*e,this.m[5]+=this.m[1]*t+this.m[3]*e,this}scale(t,e){return this.m[0]*=t,this.m[1]*=t,this.m[2]*=e,this.m[3]*=e,this}rotate(t){var e=Math.cos(t),i=Math.sin(t),r=this.m[0]*e+this.m[2]*i,a=this.m[1]*e+this.m[3]*i,n=this.m[0]*-i+this.m[2]*e,s=this.m[1]*-i+this.m[3]*e;return this.m[0]=r,this.m[1]=a,this.m[2]=n,this.m[3]=s,this}getTranslation(){return{x:this.m[4],y:this.m[5]}}skew(t,e){var i=this.m[0]+this.m[2]*e,r=this.m[1]+this.m[3]*e,a=this.m[2]+this.m[0]*t,n=this.m[3]+this.m[1]*t;return this.m[0]=i,this.m[1]=r,this.m[2]=a,this.m[3]=n,this}multiply(t){var e=this.m[0]*t.m[0]+this.m[2]*t.m[1],i=this.m[1]*t.m[0]+this.m[3]*t.m[1],r=this.m[0]*t.m[2]+this.m[2]*t.m[3],a=this.m[1]*t.m[2]+this.m[3]*t.m[3],n=this.m[0]*t.m[4]+this.m[2]*t.m[5]+this.m[4],s=this.m[1]*t.m[4]+this.m[3]*t.m[5]+this.m[5];return this.m[0]=e,this.m[1]=i,this.m[2]=r,this.m[3]=a,this.m[4]=n,this.m[5]=s,this}invert(){var t=1/(this.m[0]*this.m[3]-this.m[1]*this.m[2]),e=this.m[3]*t,i=-this.m[1]*t,r=-this.m[2]*t,a=this.m[0]*t,n=t*(this.m[2]*this.m[5]-this.m[3]*this.m[4]),s=t*(this.m[1]*this.m[4]-this.m[0]*this.m[5]);return this.m[0]=e,this.m[1]=i,this.m[2]=r,this.m[3]=a,this.m[4]=n,this.m[5]=s,this}getMatrix(){return this.m}decompose(){var t=this.m[0],e=this.m[1],i=this.m[2],r=this.m[3],a=t*r-e*i;let n={x:this.m[4],y:this.m[5],rotation:0,scaleX:0,scaleY:0,skewX:0,skewY:0};if(0!=t||0!=e){var s=Math.sqrt(t*t+e*e);n.rotation=e>0?Math.acos(t/s):-Math.acos(t/s),n.scaleX=s,n.scaleY=a/s,n.skewX=(t*i+e*r)/a,n.skewY=0}else if(0!=i||0!=r){var o=Math.sqrt(i*i+r*r);n.rotation=Math.PI/2-(r>0?Math.acos(-i/o):-Math.acos(i/o)),n.scaleX=a/o,n.scaleY=o,n.skewX=0,n.skewY=(t*i+e*r)/a}return n.rotation=g._getRotation(n.rotation),n}}var n=Math.PI/180,s=180/Math.PI,o="Konva error: ",h={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,132,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,255,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,203],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[119,128,144],slategrey:[119,128,144],snow:[255,255,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],transparent:[255,255,255,0],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,5]},l=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/,d=[];const c="undefined"!=typeof requestAnimationFrame&&requestAnimationFrame||function(t){setTimeout(t,60)},g={_isElement:t=>!(!t||1!=t.nodeType),_isFunction:t=>!!(t&&t.constructor&&t.call&&t.apply),_isPlainObject:t=>!!t&&t.constructor===Object,_isArray:t=>"[object Array]"===Object.prototype.toString.call(t),_isNumber:t=>"[object Number]"===Object.prototype.toString.call(t)&&!isNaN(t)&&isFinite(t),_isString:t=>"[object String]"===Object.prototype.toString.call(t),_isBoolean:t=>"[object Boolean]"===Object.prototype.toString.call(t),isObject:t=>t instanceof Object,isValidSelector(t){if("string"!=typeof t)return!1;var e=t[0];return"#"===e||"."===e||e===e.toUpperCase()},_sign:t=>0===t||t>0?1:-1,requestAnimFrame(t){d.push(t),1===d.length&&c((function(){const t=d;d=[],t.forEach((function(t){t()}))}))},createCanvasElement(){var t=document.createElement("canvas");try{t.style=t.style||{}}catch(t){}return t},createImageElement:()=>document.createElement("img"),_isInDocument(t){for(;t=t.parentNode;)if(t==document)return!0;return!1},_urlToImage(t,e){var i=g.createImageElement();i.onload=function(){e(i)},i.src=t},_rgbToHex:(t,e,i)=>((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1),_hexToRgb(t){t=t.replace("#","");var e=parseInt(t,16);return{r:e>>16&255,g:e>>8&255,b:255&e}},getRandomColor(){for(var t=(16777215*Math.random()|0).toString(16);t.length<6;)t="0"+t;return"#"+t},getRGB(t){var e;return t in h?{r:(e=h[t])[0],g:e[1],b:e[2]}:"#"===t[0]?this._hexToRgb(t.substring(1)):"rgb("===t.substr(0,4)?(e=l.exec(t.replace(/ /g,"")),{r:parseInt(e[1],10),g:parseInt(e[2],10),b:parseInt(e[3],10)}):{r:0,g:0,b:0}},colorToRGBA:t=>(t=t||"black",g._namedColorToRBA(t)||g._hex3ColorToRGBA(t)||g._hex4ColorToRGBA(t)||g._hex6ColorToRGBA(t)||g._hex8ColorToRGBA(t)||g._rgbColorToRGBA(t)||g._rgbaColorToRGBA(t)||g._hslColorToRGBA(t)),_namedColorToRBA(t){var e=h[t.toLowerCase()];return e?{r:e[0],g:e[1],b:e[2],a:1}:null},_rgbColorToRGBA(t){if(0===t.indexOf("rgb(")){var e=(t=t.match(/rgb\(([^)]+)\)/)[1]).split(/ *, */).map(Number);return{r:e[0],g:e[1],b:e[2],a:1}}},_rgbaColorToRGBA(t){if(0===t.indexOf("rgba(")){var e=(t=t.match(/rgba\(([^)]+)\)/)[1]).split(/ *, */).map(((t,e)=>"%"===t.slice(-1)?3===e?parseInt(t)/100:parseInt(t)/100*255:Number(t)));return{r:e[0],g:e[1],b:e[2],a:e[3]}}},_hex8ColorToRGBA(t){if("#"===t[0]&&9===t.length)return{r:parseInt(t.slice(1,3),16),g:parseInt(t.slice(3,5),16),b:parseInt(t.slice(5,7),16),a:parseInt(t.slice(7,9),16)/255}},_hex6ColorToRGBA(t){if("#"===t[0]&&7===t.length)return{r:parseInt(t.slice(1,3),16),g:parseInt(t.slice(3,5),16),b:parseInt(t.slice(5,7),16),a:1}},_hex4ColorToRGBA(t){if("#"===t[0]&&5===t.length)return{r:parseInt(t[1]+t[1],16),g:parseInt(t[2]+t[2],16),b:parseInt(t[3]+t[3],16),a:parseInt(t[4]+t[4],16)/255}},_hex3ColorToRGBA(t){if("#"===t[0]&&4===t.length)return{r:parseInt(t[1]+t[1],16),g:parseInt(t[2]+t[2],16),b:parseInt(t[3]+t[3],16),a:1}},_hslColorToRGBA(t){if(/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.test(t)){const[e,...i]=/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(t),r=Number(i[0])/360,a=Number(i[1])/100,n=Number(i[2])/100;let s,o,h;if(0===a)return h=255*n,{r:Math.round(h),g:Math.round(h),b:Math.round(h),a:1};s=n<.5?n*(1+a):n+a-n*a;const l=2*n-s,d=[0,0,0];for(let t=0;t<3;t++)o=r+1/3*-(t-1),o<0&&o++,o>1&&o--,h=6*o<1?l+6*(s-l)*o:2*o<1?s:3*o<2?l+(s-l)*(2/3-o)*6:l,d[t]=255*h;return{r:Math.round(d[0]),g:Math.round(d[1]),b:Math.round(d[2]),a:1}}},haveIntersection:(t,e)=>!(e.x>t.x+t.width||e.x+e.width<t.x||e.y>t.y+t.height||e.y+e.height<t.y),cloneObject(t){var e={};for(var i in t)this._isPlainObject(t[i])?e[i]=this.cloneObject(t[i]):this._isArray(t[i])?e[i]=this.cloneArray(t[i]):e[i]=t[i];return e},cloneArray:t=>t.slice(0),degToRad:t=>t*n,radToDeg:t=>t*s,_degToRad:t=>(g.warn("Util._degToRad is removed. Please use public Util.degToRad instead."),g.degToRad(t)),_radToDeg:t=>(g.warn("Util._radToDeg is removed. Please use public Util.radToDeg instead."),g.radToDeg(t)),_getRotation:t=>i.angleDeg?g.radToDeg(t):t,_capitalize:t=>t.charAt(0).toUpperCase()+t.slice(1),throw(t){throw new Error(o+t)},error(t){console.error(o+t)},warn(t){i.showWarnings&&console.warn("Konva warning: "+t)},each(t,e){for(var i in t)e(i,t[i])},_inRange:(t,e,i)=>e<=t&&t<i,_getProjectionToSegment(t,e,i,r,a,n){var s,o,h,l=(t-i)*(t-i)+(e-r)*(e-r);if(0==l)s=t,o=e,h=(a-i)*(a-i)+(n-r)*(n-r);else{var d=((a-t)*(i-t)+(n-e)*(r-e))/l;d<0?(s=t,o=e,h=(t-a)*(t-a)+(e-n)*(e-n)):d>1?(s=i,o=r,h=(i-a)*(i-a)+(r-n)*(r-n)):h=((s=t+d*(i-t))-a)*(s-a)+((o=e+d*(r-e))-n)*(o-n)}return[s,o,h]},_getProjectionToLine(t,e,i){var r=g.cloneObject(t),a=Number.MAX_VALUE;return e.forEach((function(n,s){if(i||s!==e.length-1){var o=e[(s+1)%e.length],h=g._getProjectionToSegment(n.x,n.y,o.x,o.y,t.x,t.y),l=h[0],d=h[1],c=h[2];c<a&&(r.x=l,r.y=d,a=c)}})),r},_prepareArrayForTween(t,e,i){var r,a=[],n=[];if(t.length>e.length){var s=e;e=t,t=s}for(r=0;r<t.length;r+=2)a.push({x:t[r],y:t[r+1]});for(r=0;r<e.length;r+=2)n.push({x:e[r],y:e[r+1]});var o=[];return n.forEach((function(t){var e=g._getProjectionToLine(t,a,i);o.push(e.x),o.push(e.y)})),o},_prepareToStringify(t){var e;for(var i in t.visitedByCircularReferenceRemoval=!0,t)if(t.hasOwnProperty(i)&&t[i]&&"object"==typeof t[i])if(e=Object.getOwnPropertyDescriptor(t,i),t[i].visitedByCircularReferenceRemoval||g._isElement(t[i])){if(!e.configurable)return null;delete t[i]}else if(null===g._prepareToStringify(t[i])){if(!e.configurable)return null;delete t[i]}return delete t.visitedByCircularReferenceRemoval,t},_assign(t,e){for(var i in e)t[i]=e[i];return t},_getFirstPointerId:t=>t.touches?t.changedTouches[0].identifier:t.pointerId||999,releaseCanvas(...t){i.releaseCanvasOnDestroy&&t.forEach((t=>{t.width=0,t.height=0}))},drawRoundedRectPath(t,e,i,r){let a=0,n=0,s=0,o=0;"number"==typeof r?a=n=s=o=Math.min(r,e/2,i/2):(a=Math.min(r[0]||0,e/2,i/2),n=Math.min(r[1]||0,e/2,i/2),o=Math.min(r[2]||0,e/2,i/2),s=Math.min(r[3]||0,e/2,i/2)),t.moveTo(a,0),t.lineTo(e-n,0),t.arc(e-n,n,n,3*Math.PI/2,0,!1),t.lineTo(e,i-o),t.arc(e-o,i-o,o,0,Math.PI/2,!1),t.lineTo(s,i),t.arc(s,i-s,s,Math.PI/2,Math.PI,!1),t.lineTo(0,a),t.arc(a,a,a,Math.PI,3*Math.PI/2,!1)}};function u(t){return g._isString(t)?'"'+t+'"':"[object Number]"===Object.prototype.toString.call(t)||g._isBoolean(t)?t:Object.prototype.toString.call(t)}function f(t){return t>255?255:t<0?0:Math.round(t)}function p(){if(i.isUnminified)return function(t,e){return g._isNumber(t)||g.warn(u(t)+' is a not valid value for "'+e+'" attribute. The value should be a number.'),t}}function v(t){if(i.isUnminified)return function(e,i){let r=g._isNumber(e),a=g._isArray(e)&&e.length==t;return r||a||g.warn(u(e)+' is a not valid value for "'+i+'" attribute. The value should be a number or Array<number>('+t+")"),e}}function m(){if(i.isUnminified)return function(t,e){return g._isNumber(t)||"auto"===t||g.warn(u(t)+' is a not valid value for "'+e+'" attribute. The value should be a number or "auto".'),t}}function _(){if(i.isUnminified)return function(t,e){return g._isString(t)||g.warn(u(t)+' is a not valid value for "'+e+'" attribute. The value should be a string.'),t}}function y(){if(i.isUnminified)return function(t,e){const i=g._isString(t),r="[object CanvasGradient]"===Object.prototype.toString.call(t)||t&&t.addColorStop;return i||r||g.warn(u(t)+' is a not valid value for "'+e+'" attribute. The value should be a string or a native gradient.'),t}}function x(){if(i.isUnminified)return function(t,e){return!0===t||!1===t||g.warn(u(t)+' is a not valid value for "'+e+'" attribute. The value should be a boolean.'),t}}var b="get",S="set";const w={addGetterSetter(t,e,i,r,a){w.addGetter(t,e,i),w.addSetter(t,e,r,a),w.addOverloadedGetterSetter(t,e)},addGetter(t,e,i){var r=b+g._capitalize(e);t.prototype[r]=t.prototype[r]||function(){var t=this.attrs[e];return void 0===t?i:t}},addSetter(t,e,i,r){var a=S+g._capitalize(e);t.prototype[a]||w.overWriteSetter(t,e,i,r)},overWriteSetter(t,e,i,r){var a=S+g._capitalize(e);t.prototype[a]=function(t){return i&&null!=t&&(t=i.call(this,t,e)),this._setAttr(e,t),r&&r.call(this),this}},addComponentsGetterSetter(t,e,r,a,n){var s,o,h=r.length,l=g._capitalize,d=b+l(e),c=S+l(e);t.prototype[d]=function(){var t={};for(s=0;s<h;s++)t[o=r[s]]=this.getAttr(e+l(o));return t};var f=function(t){if(i.isUnminified)return function(e,i){return null==e||g.isObject(e)||g.warn(u(e)+' is a not valid value for "'+i+'" attribute. The value should be an object with properties '+t),e}}(r);t.prototype[c]=function(t){var i,s=this.attrs[e];for(i in a&&(t=a.call(this,t)),f&&f.call(this,t,e),t)t.hasOwnProperty(i)&&this._setAttr(e+l(i),t[i]);return t||r.forEach((t=>{this._setAttr(e+l(t),void 0)})),this._fireChangeEvent(e,s,t),n&&n.call(this),this},w.addOverloadedGetterSetter(t,e)},addOverloadedGetterSetter(t,e){var i=g._capitalize(e),r=S+i,a=b+i;t.prototype[e]=function(){return arguments.length?(this[r](arguments[0]),this):this[a]()}},addDeprecatedGetterSetter(t,e,i,r){g.error("Adding deprecated "+e);var a=b+g._capitalize(e),n=e+" property is deprecated and will be removed soon. Look at Konva change log for more information.";t.prototype[a]=function(){g.error(n);var t=this.attrs[e];return void 0===t?i:t},w.addSetter(t,e,r,(function(){g.error(n)})),w.addOverloadedGetterSetter(t,e)},backCompat(t,e){g.each(e,(function(e,i){var r=t.prototype[i],a=b+g._capitalize(e),n=S+g._capitalize(e);function s(){r.apply(this,arguments),g.error('"'+e+'" method is deprecated and will be removed soon. Use ""'+i+'" instead.')}t.prototype[e]=s,t.prototype[a]=s,t.prototype[n]=s}))},afterSetFilter(){this._filterUpToDate=!1}};var C=["arc","arcTo","beginPath","bezierCurveTo","clearRect","clip","closePath","createLinearGradient","createPattern","createRadialGradient","drawImage","ellipse","fill","fillText","getImageData","createImageData","lineTo","moveTo","putImageData","quadraticCurveTo","rect","roundRect","restore","rotate","save","scale","setLineDash","setTransform","stroke","strokeText","transform","translate"];class P{constructor(t){this.canvas=t,i.enableTrace&&(this.traceArr=[],this._enableTrace())}fillShape(t){t.fillEnabled()&&this._fill(t)}_fill(t){}strokeShape(t){t.hasStroke()&&this._stroke(t)}_stroke(t){}fillStrokeShape(t){t.attrs.fillAfterStrokeEnabled?(this.strokeShape(t),this.fillShape(t)):(this.fillShape(t),this.strokeShape(t))}getTrace(t,e){var i,r,a,n,s=this.traceArr,o=s.length,h="";for(i=0;i<o;i++)(a=(r=s[i]).method)?(n=r.args,h+=a,t?h+="()":g._isArray(n[0])?h+="(["+n.join(",")+"])":(e&&(n=n.map((t=>"number"==typeof t?Math.floor(t):t))),h+="("+n.join(",")+")")):(h+=r.property,t||(h+="="+r.val)),h+=";";return h}clearTrace(){this.traceArr=[]}_trace(t){var e=this.traceArr;e.push(t),e.length>=100&&e.shift()}reset(){var t=this.getCanvas().getPixelRatio();this.setTransform(1*t,0,0,1*t,0,0)}getCanvas(){return this.canvas}clear(t){var e=this.getCanvas();t?this.clearRect(t.x||0,t.y||0,t.width||0,t.height||0):this.clearRect(0,0,e.getWidth()/e.pixelRatio,e.getHeight()/e.pixelRatio)}_applyLineCap(t){const e=t.attrs.lineCap;e&&this.setAttr("lineCap",e)}_applyOpacity(t){var e=t.getAbsoluteOpacity();1!==e&&this.setAttr("globalAlpha",e)}_applyLineJoin(t){const e=t.attrs.lineJoin;e&&this.setAttr("lineJoin",e)}setAttr(t,e){this._context[t]=e}arc(t,e,i,r,a,n){this._context.arc(t,e,i,r,a,n)}arcTo(t,e,i,r,a){this._context.arcTo(t,e,i,r,a)}beginPath(){this._context.beginPath()}bezierCurveTo(t,e,i,r,a,n){this._context.bezierCurveTo(t,e,i,r,a,n)}clearRect(t,e,i,r){this._context.clearRect(t,e,i,r)}clip(...t){this._context.clip.apply(this._context,t)}closePath(){this._context.closePath()}createImageData(t,e){var i=arguments;return 2===i.length?this._context.createImageData(t,e):1===i.length?this._context.createImageData(t):void 0}createLinearGradient(t,e,i,r){return this._context.createLinearGradient(t,e,i,r)}createPattern(t,e){return this._context.createPattern(t,e)}createRadialGradient(t,e,i,r,a,n){return this._context.createRadialGradient(t,e,i,r,a,n)}drawImage(t,e,i,r,a,n,s,o,h){var l=arguments,d=this._context;3===l.length?d.drawImage(t,e,i):5===l.length?d.drawImage(t,e,i,r,a):9===l.length&&d.drawImage(t,e,i,r,a,n,s,o,h)}ellipse(t,e,i,r,a,n,s,o){this._context.ellipse(t,e,i,r,a,n,s,o)}isPointInPath(t,e,i,r){return i?this._context.isPointInPath(i,t,e,r):this._context.isPointInPath(t,e,r)}fill(...t){this._context.fill.apply(this._context,t)}fillRect(t,e,i,r){this._context.fillRect(t,e,i,r)}strokeRect(t,e,i,r){this._context.strokeRect(t,e,i,r)}fillText(t,e,i,r){r?this._context.fillText(t,e,i,r):this._context.fillText(t,e,i)}measureText(t){return this._context.measureText(t)}getImageData(t,e,i,r){return this._context.getImageData(t,e,i,r)}lineTo(t,e){this._context.lineTo(t,e)}moveTo(t,e){this._context.moveTo(t,e)}rect(t,e,i,r){this._context.rect(t,e,i,r)}roundRect(t,e,i,r,a){this._context.roundRect(t,e,i,r,a)}putImageData(t,e,i){this._context.putImageData(t,e,i)}quadraticCurveTo(t,e,i,r){this._context.quadraticCurveTo(t,e,i,r)}restore(){this._context.restore()}rotate(t){this._context.rotate(t)}save(){this._context.save()}scale(t,e){this._context.scale(t,e)}setLineDash(t){this._context.setLineDash?this._context.setLineDash(t):"mozDash"in this._context?this._context.mozDash=t:"webkitLineDash"in this._context&&(this._context.webkitLineDash=t)}getLineDash(){return this._context.getLineDash()}setTransform(t,e,i,r,a,n){this._context.setTransform(t,e,i,r,a,n)}stroke(t){t?this._context.stroke(t):this._context.stroke()}strokeText(t,e,i,r){this._context.strokeText(t,e,i,r)}transform(t,e,i,r,a,n){this._context.transform(t,e,i,r,a,n)}translate(t,e){this._context.translate(t,e)}_enableTrace(){var t,e,i=this,r=C.length,a=this.setAttr,n=function(t){var r,a=i[t];i[t]=function(){return e=function(t){var e,i,r=[],a=t.length,n=g;for(e=0;e<a;e++)i=t[e],n._isNumber(i)?i=Math.round(1e3*i)/1e3:n._isString(i)||(i+=""),r.push(i);return r}(Array.prototype.slice.call(arguments,0)),r=a.apply(i,arguments),i._trace({method:t,args:e}),r}};for(t=0;t<r;t++)n(C[t]);i.setAttr=function(){a.apply(i,arguments);var t=arguments[0],e=arguments[1];"shadowOffsetX"!==t&&"shadowOffsetY"!==t&&"shadowBlur"!==t||(e/=this.canvas.getPixelRatio()),i._trace({property:t,val:e})}}_applyGlobalCompositeOperation(t){const e=t.attrs.globalCompositeOperation;!e||"source-over"===e||this.setAttr("globalCompositeOperation",e)}}["fillStyle","strokeStyle","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","letterSpacing","lineCap","lineDashOffset","lineJoin","lineWidth","miterLimit","direction","font","textAlign","textBaseline","globalAlpha","globalCompositeOperation","imageSmoothingEnabled"].forEach((function(t){Object.defineProperty(P.prototype,t,{get(){return this._context[t]},set(e){this._context[t]=e}})}));class k extends P{constructor(t,{willReadFrequently:e=!1}={}){super(t),this._context=t._canvas.getContext("2d",{willReadFrequently:e})}_fillColor(t){var e=t.fill();this.setAttr("fillStyle",e),t._fillFunc(this)}_fillPattern(t){this.setAttr("fillStyle",t._getFillPattern()),t._fillFunc(this)}_fillLinearGradient(t){var e=t._getLinearGradient();e&&(this.setAttr("fillStyle",e),t._fillFunc(this))}_fillRadialGradient(t){const e=t._getRadialGradient();e&&(this.setAttr("fillStyle",e),t._fillFunc(this))}_fill(t){const e=t.fill(),i=t.getFillPriority();if(e&&"color"===i)return void this._fillColor(t);const r=t.getFillPatternImage();if(r&&"pattern"===i)return void this._fillPattern(t);const a=t.getFillLinearGradientColorStops();if(a&&"linear-gradient"===i)return void this._fillLinearGradient(t);const n=t.getFillRadialGradientColorStops();n&&"radial-gradient"===i?this._fillRadialGradient(t):e?this._fillColor(t):r?this._fillPattern(t):a?this._fillLinearGradient(t):n&&this._fillRadialGradient(t)}_strokeLinearGradient(t){const e=t.getStrokeLinearGradientStartPoint(),i=t.getStrokeLinearGradientEndPoint(),r=t.getStrokeLinearGradientColorStops(),a=this.createLinearGradient(e.x,e.y,i.x,i.y);if(r){for(var n=0;n<r.length;n+=2)a.addColorStop(r[n],r[n+1]);this.setAttr("strokeStyle",a)}}_stroke(t){var e=t.dash(),i=t.getStrokeScaleEnabled();if(t.hasStroke()){if(!i){this.save();var r=this.getCanvas().getPixelRatio();this.setTransform(r,0,0,r,0,0)}this._applyLineCap(t),e&&t.dashEnabled()&&(this.setLineDash(e),this.setAttr("lineDashOffset",t.dashOffset())),this.setAttr("lineWidth",t.strokeWidth()),t.getShadowForStrokeEnabled()||this.setAttr("shadowColor","rgba(0,0,0,0)"),t.getStrokeLinearGradientColorStops()?this._strokeLinearGradient(t):this.setAttr("strokeStyle",t.stroke()),t._strokeFunc(this),i||this.restore()}}_applyShadow(t){var e,i,r,a=null!==(e=t.getShadowRGBA())&&void 0!==e?e:"black",n=null!==(i=t.getShadowBlur())&&void 0!==i?i:5,s=null!==(r=t.getShadowOffset())&&void 0!==r?r:{x:0,y:0},o=t.getAbsoluteScale(),h=this.canvas.getPixelRatio(),l=o.x*h,d=o.y*h;this.setAttr("shadowColor",a),this.setAttr("shadowBlur",n*Math.min(Math.abs(l),Math.abs(d))),this.setAttr("shadowOffsetX",s.x*l),this.setAttr("shadowOffsetY",s.y*d)}}class A extends P{constructor(t){super(t),this._context=t._canvas.getContext("2d",{willReadFrequently:!0})}_fill(t){this.save(),this.setAttr("fillStyle",t.colorKey),t._fillFuncHit(this),this.restore()}strokeShape(t){t.hasHitStroke()&&this._stroke(t)}_stroke(t){if(t.hasHitStroke()){const a=t.getStrokeScaleEnabled();if(!a){this.save();var e=this.getCanvas().getPixelRatio();this.setTransform(e,0,0,e,0,0)}this._applyLineCap(t);var i=t.hitStrokeWidth(),r="auto"===i?t.strokeWidth():i;this.setAttr("lineWidth",r),this.setAttr("strokeStyle",t.colorKey),t._strokeFuncHit(this),a||this.restore()}}}var T;class M{constructor(t){this.pixelRatio=1,this.width=0,this.height=0,this.isCache=!1;var e=(t||{}).pixelRatio||i.pixelRatio||function(){if(T)return T;var t=g.createCanvasElement(),e=t.getContext("2d");return T=(i._global.devicePixelRatio||1)/(e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1),g.releaseCanvas(t),T}();this.pixelRatio=e,this._canvas=g.createCanvasElement(),this._canvas.style.padding="0",this._canvas.style.margin="0",this._canvas.style.border="0",this._canvas.style.background="transparent",this._canvas.style.position="absolute",this._canvas.style.top="0",this._canvas.style.left="0"}getContext(){return this.context}getPixelRatio(){return this.pixelRatio}setPixelRatio(t){var e=this.pixelRatio;this.pixelRatio=t,this.setSize(this.getWidth()/e,this.getHeight()/e)}setWidth(t){this.width=this._canvas.width=t*this.pixelRatio,this._canvas.style.width=t+"px";var e=this.pixelRatio;this.getContext()._context.scale(e,e)}setHeight(t){this.height=this._canvas.height=t*this.pixelRatio,this._canvas.style.height=t+"px";var e=this.pixelRatio;this.getContext()._context.scale(e,e)}getWidth(){return this.width}getHeight(){return this.height}setSize(t,e){this.setWidth(t||0),this.setHeight(e||0)}toDataURL(t,e){try{return this._canvas.toDataURL(t,e)}catch(t){try{return this._canvas.toDataURL()}catch(t){return g.error("Unable to get data URL. "+t.message+" For more info read https://konvajs.org/docs/posts/Tainted_Canvas.html."),""}}}}w.addGetterSetter(M,"pixelRatio",void 0,p());class G extends M{constructor(t={width:0,height:0,willReadFrequently:!1}){super(t),this.context=new k(this,{willReadFrequently:t.willReadFrequently}),this.setSize(t.width,t.height)}}class R extends M{constructor(t={width:0,height:0}){super(t),this.hitCanvas=!0,this.context=new A(this),this.setSize(t.width,t.height)}}const E={get isDragging(){var t=!1;return E._dragElements.forEach((e=>{"dragging"===e.dragStatus&&(t=!0)})),t},justDragged:!1,get node(){var t;return E._dragElements.forEach((e=>{t=e.node})),t},_dragElements:new Map,_drag(t){const e=[];E._dragElements.forEach(((i,r)=>{const{node:a}=i,n=a.getStage();n.setPointersPositions(t),void 0===i.pointerId&&(i.pointerId=g._getFirstPointerId(t));const s=n._changedPointerPositions.find((t=>t.id===i.pointerId));if(s){if("dragging"!==i.dragStatus){var o=a.dragDistance();if(Math.max(Math.abs(s.x-i.startPointerPos.x),Math.abs(s.y-i.startPointerPos.y))<o)return;if(a.startDrag({evt:t}),!a.isDragging())return}a._setDragPosition(t,i),e.push(a)}})),e.forEach((e=>{e.fire("dragmove",{type:"dragmove",target:e,evt:t},!0)}))},_endDragBefore(t){const e=[];E._dragElements.forEach((r=>{const{node:a}=r,n=a.getStage();t&&n.setPointersPositions(t);if(!n._changedPointerPositions.find((t=>t.id===r.pointerId)))return;"dragging"!==r.dragStatus&&"stopped"!==r.dragStatus||(E.justDragged=!0,i._mouseListenClick=!1,i._touchListenClick=!1,i._pointerListenClick=!1,r.dragStatus="stopped");const s=r.node.getLayer()||r.node instanceof i.Stage&&r.node;s&&-1===e.indexOf(s)&&e.push(s)})),e.forEach((t=>{t.draw()}))},_endDragAfter(t){E._dragElements.forEach(((e,i)=>{"stopped"===e.dragStatus&&e.node.fire("dragend",{type:"dragend",target:e.node,evt:t},!0),"dragging"!==e.dragStatus&&E._dragElements.delete(i)}))}};i.isBrowser&&(window.addEventListener("mouseup",E._endDragBefore,!0),window.addEventListener("touchend",E._endDragBefore,!0),window.addEventListener("mousemove",E._drag),window.addEventListener("touchmove",E._drag),window.addEventListener("mouseup",E._endDragAfter,!1),window.addEventListener("touchend",E._endDragAfter,!1));var D="absoluteOpacity",L="allEventListeners",O="absoluteTransform",I="absoluteScale",F="canvas",B="listening",N="mouseenter",H="mouseleave",W="Shape",z=" ",Y="stage",X="transform",q="visible",j=["xChange.konva","yChange.konva","scaleXChange.konva","scaleYChange.konva","skewXChange.konva","skewYChange.konva","rotationChange.konva","offsetXChange.konva","offsetYChange.konva","transformsEnabledChange.konva"].join(z);let U=1;class V{constructor(t){this._id=U++,this.eventListeners={},this.attrs={},this.index=0,this._allEventListeners=null,this.parent=null,this._cache=new Map,this._attachedDepsListeners=new Map,this._lastPos=null,this._batchingTransformChange=!1,this._needClearTransformCache=!1,this._filterUpToDate=!1,this._isUnderCache=!1,this._dragEventId=null,this._shouldFireChangeEvents=!1,this.setAttrs(t),this._shouldFireChangeEvents=!0}hasChildren(){return!1}_clearCache(t){t!==X&&t!==O||!this._cache.get(t)?t?this._cache.delete(t):this._cache.clear():this._cache.get(t).dirty=!0}_getCache(t,e){var i=this._cache.get(t);return(void 0===i||(t===X||t===O)&&!0===i.dirty)&&(i=e.call(this),this._cache.set(t,i)),i}_calculate(t,e,i){if(!this._attachedDepsListeners.get(t)){const i=e.map((t=>t+"Change.konva")).join(z);this.on(i,(()=>{this._clearCache(t)})),this._attachedDepsListeners.set(t,!0)}return this._getCache(t,i)}_getCanvasCache(){return this._cache.get(F)}_clearSelfAndDescendantCache(t){this._clearCache(t),t===O&&this.fire("absoluteTransformChange")}clearCache(){if(this._cache.has(F)){const{scene:t,filter:e,hit:i}=this._cache.get(F);g.releaseCanvas(t,e,i),this._cache.delete(F)}return this._clearSelfAndDescendantCache(),this._requestDraw(),this}cache(t){var e=t||{},i={};void 0!==e.x&&void 0!==e.y&&void 0!==e.width&&void 0!==e.height||(i=this.getClientRect({skipTransform:!0,relativeTo:this.getParent()||void 0}));var r=Math.ceil(e.width||i.width),a=Math.ceil(e.height||i.height),n=e.pixelRatio,s=void 0===e.x?Math.floor(i.x):e.x,o=void 0===e.y?Math.floor(i.y):e.y,h=e.offset||0,l=e.drawBorder||!1,d=e.hitCanvasPixelRatio||1;if(!r||!a)return void g.error("Can not cache the node. Width or height of the node equals 0. Caching is skipped.");const c=Math.abs(Math.round(i.x)-s)>.5?1:0,u=Math.abs(Math.round(i.y)-o)>.5?1:0;s-=h,o-=h;var f=new G({pixelRatio:n,width:r+=2*h+c,height:a+=2*h+u}),p=new G({pixelRatio:n,width:0,height:0,willReadFrequently:!0}),v=new R({pixelRatio:d,width:r,height:a}),m=f.getContext(),_=v.getContext();return v.isCache=!0,f.isCache=!0,this._cache.delete(F),this._filterUpToDate=!1,!1===e.imageSmoothingEnabled&&(f.getContext()._context.imageSmoothingEnabled=!1,p.getContext()._context.imageSmoothingEnabled=!1),m.save(),_.save(),m.translate(-s,-o),_.translate(-s,-o),this._isUnderCache=!0,this._clearSelfAndDescendantCache(D),this._clearSelfAndDescendantCache(I),this.drawScene(f,this),this.drawHit(v,this),this._isUnderCache=!1,m.restore(),_.restore(),l&&(m.save(),m.beginPath(),m.rect(0,0,r,a),m.closePath(),m.setAttr("strokeStyle","red"),m.setAttr("lineWidth",5),m.stroke(),m.restore()),this._cache.set(F,{scene:f,filter:p,hit:v,x:s,y:o}),this._requestDraw(),this}isCached(){return this._cache.has(F)}getClientRect(t){throw new Error('abstract "getClientRect" method call')}_transformedRect(t,e){var i=[{x:t.x,y:t.y},{x:t.x+t.width,y:t.y},{x:t.x+t.width,y:t.y+t.height},{x:t.x,y:t.y+t.height}],r=1/0,a=1/0,n=-1/0,s=-1/0,o=this.getAbsoluteTransform(e);return i.forEach((function(t){var e=o.point(t);void 0===r&&(r=n=e.x,a=s=e.y),r=Math.min(r,e.x),a=Math.min(a,e.y),n=Math.max(n,e.x),s=Math.max(s,e.y)})),{x:r,y:a,width:n-r,height:s-a}}_drawCachedSceneCanvas(t){t.save(),t._applyOpacity(this),t._applyGlobalCompositeOperation(this);const e=this._getCanvasCache();t.translate(e.x,e.y);var i=this._getCachedSceneCanvas(),r=i.pixelRatio;t.drawImage(i._canvas,0,0,i.width/r,i.height/r),t.restore()}_drawCachedHitCanvas(t){var e=this._getCanvasCache(),i=e.hit;t.save(),t.translate(e.x,e.y),t.drawImage(i._canvas,0,0,i.width/i.pixelRatio,i.height/i.pixelRatio),t.restore()}_getCachedSceneCanvas(){var t,e,i,r,a=this.filters(),n=this._getCanvasCache(),s=n.scene,o=n.filter,h=o.getContext();if(a){if(!this._filterUpToDate){var l=s.pixelRatio;o.setSize(s.width/s.pixelRatio,s.height/s.pixelRatio);try{for(t=a.length,h.clear(),h.drawImage(s._canvas,0,0,s.getWidth()/l,s.getHeight()/l),e=h.getImageData(0,0,o.getWidth(),o.getHeight()),i=0;i<t;i++)"function"==typeof(r=a[i])?(r.call(this,e),h.putImageData(e,0,0)):g.error("Filter should be type of function, but got "+typeof r+" instead. Please check correct filters")}catch(t){g.error("Unable to apply filter. "+t.message+" This post my help you https://konvajs.org/docs/posts/Tainted_Canvas.html.")}this._filterUpToDate=!0}return o}return s}on(t,e){if(this._cache&&this._cache.delete(L),3===arguments.length)return this._delegate.apply(this,arguments);var i,r,a,n,s=t.split(z),o=s.length;for(i=0;i<o;i++)a=(r=s[i].split("."))[0],n=r[1]||"",this.eventListeners[a]||(this.eventListeners[a]=[]),this.eventListeners[a].push({name:n,handler:e});return this}off(t,e){var i,r,a,n,s,o=(t||"").split(z),h=o.length;if(this._cache&&this._cache.delete(L),!t)for(r in this.eventListeners)this._off(r);for(i=0;i<h;i++)if(n=(a=o[i].split("."))[0],s=a[1],n)this.eventListeners[n]&&this._off(n,s,e);else for(r in this.eventListeners)this._off(r,s,e);return this}dispatchEvent(t){var e={target:this,type:t.type,evt:t};return this.fire(t.type,e),this}addEventListener(t,e){return this.on(t,(function(t){e.call(this,t.evt)})),this}removeEventListener(t){return this.off(t),this}_delegate(t,e,i){var r=this;this.on(t,(function(t){for(var a=t.target.findAncestors(e,!0,r),n=0;n<a.length;n++)(t=g.cloneObject(t)).currentTarget=a[n],i.call(a[n],t)}))}remove(){return this.isDragging()&&this.stopDrag(),E._dragElements.delete(this._id),this._remove(),this}_clearCaches(){this._clearSelfAndDescendantCache(O),this._clearSelfAndDescendantCache(D),this._clearSelfAndDescendantCache(I),this._clearSelfAndDescendantCache(Y),this._clearSelfAndDescendantCache(q),this._clearSelfAndDescendantCache(B)}_remove(){this._clearCaches();var t=this.getParent();t&&t.children&&(t.children.splice(this.index,1),t._setChildrenIndices(),this.parent=null)}destroy(){return this.remove(),this.clearCache(),this}getAttr(t){var e="get"+g._capitalize(t);return g._isFunction(this[e])?this[e]():this.attrs[t]}getAncestors(){for(var t=this.getParent(),e=[];t;)e.push(t),t=t.getParent();return e}getAttrs(){return this.attrs||{}}setAttrs(t){return this._batchTransformChanges((()=>{var e,i;if(!t)return this;for(e in t)"children"!==e&&(i="set"+g._capitalize(e),g._isFunction(this[i])?this[i](t[e]):this._setAttr(e,t[e]))})),this}isListening(){return this._getCache(B,this._isListening)}_isListening(t){if(!this.listening())return!1;const e=this.getParent();return!e||e===t||this===t||e._isListening(t)}isVisible(){return this._getCache(q,this._isVisible)}_isVisible(t){if(!this.visible())return!1;const e=this.getParent();return!e||e===t||this===t||e._isVisible(t)}shouldDrawHit(t,e=!1){if(t)return this._isVisible(t)&&this._isListening(t);var r=this.getLayer(),a=!1;E._dragElements.forEach((t=>{"dragging"===t.dragStatus&&("Stage"===t.node.nodeType||t.node.getLayer()===r)&&(a=!0)}));var n=!e&&!i.hitOnDragEnabled&&(a||i.isTransforming());return this.isListening()&&this.isVisible()&&!n}show(){return this.visible(!0),this}hide(){return this.visible(!1),this}getZIndex(){return this.index||0}getAbsoluteZIndex(){var t,e,i,r,a=this.getDepth(),n=this,s=0;const o=this.getStage();return"Stage"!==n.nodeType&&o&&function o(h){for(t=[],e=h.length,i=0;i<e;i++)r=h[i],s++,r.nodeType!==W&&(t=t.concat(r.getChildren().slice())),r._id===n._id&&(i=e);t.length>0&&t[0].getDepth()<=a&&o(t)}(o.getChildren()),s}getDepth(){for(var t=0,e=this.parent;e;)t++,e=e.parent;return t}_batchTransformChanges(t){this._batchingTransformChange=!0,t(),this._batchingTransformChange=!1,this._needClearTransformCache&&(this._clearCache(X),this._clearSelfAndDescendantCache(O)),this._needClearTransformCache=!1}setPosition(t){return this._batchTransformChanges((()=>{this.x(t.x),this.y(t.y)})),this}getPosition(){return{x:this.x(),y:this.y()}}getRelativePointerPosition(){const t=this.getStage();if(!t)return null;var e=t.getPointerPosition();if(!e)return null;var i=this.getAbsoluteTransform().copy();return i.invert(),i.point(e)}getAbsolutePosition(t){let e=!1,i=this.parent;for(;i;){if(i.isCached()){e=!0;break}i=i.parent}e&&!t&&(t=!0);var r=this.getAbsoluteTransform(t).getMatrix(),n=new a,s=this.offset();return n.m=r.slice(),n.translate(s.x,s.y),n.getTranslation()}setAbsolutePosition(t){const{x:e,y:i,...r}=this._clearTransform();this.attrs.x=e,this.attrs.y=i,this._clearCache(X);var a=this._getAbsoluteTransform().copy();return a.invert(),a.translate(t.x,t.y),t={x:this.attrs.x+a.getTranslation().x,y:this.attrs.y+a.getTranslation().y},this._setTransform(r),this.setPosition({x:t.x,y:t.y}),this._clearCache(X),this._clearSelfAndDescendantCache(O),this}_setTransform(t){var e;for(e in t)this.attrs[e]=t[e]}_clearTransform(){var t={x:this.x(),y:this.y(),rotation:this.rotation(),scaleX:this.scaleX(),scaleY:this.scaleY(),offsetX:this.offsetX(),offsetY:this.offsetY(),skewX:this.skewX(),skewY:this.skewY()};return this.attrs.x=0,this.attrs.y=0,this.attrs.rotation=0,this.attrs.scaleX=1,this.attrs.scaleY=1,this.attrs.offsetX=0,this.attrs.offsetY=0,this.attrs.skewX=0,this.attrs.skewY=0,t}move(t){var e=t.x,i=t.y,r=this.x(),a=this.y();return void 0!==e&&(r+=e),void 0!==i&&(a+=i),this.setPosition({x:r,y:a}),this}_eachAncestorReverse(t,e){var i,r,a=[],n=this.getParent();if(!e||e._id!==this._id){for(a.unshift(this);n&&(!e||n._id!==e._id);)a.unshift(n),n=n.parent;for(i=a.length,r=0;r<i;r++)t(a[r])}}rotate(t){return this.rotation(this.rotation()+t),this}moveToTop(){if(!this.parent)return g.warn("Node has no parent. moveToTop function is ignored."),!1;var t=this.index;return t<this.parent.getChildren().length-1&&(this.parent.children.splice(t,1),this.parent.children.push(this),this.parent._setChildrenIndices(),!0)}moveUp(){if(!this.parent)return g.warn("Node has no parent. moveUp function is ignored."),!1;var t=this.index;return t<this.parent.getChildren().length-1&&(this.parent.children.splice(t,1),this.parent.children.splice(t+1,0,this),this.parent._setChildrenIndices(),!0)}moveDown(){if(!this.parent)return g.warn("Node has no parent. moveDown function is ignored."),!1;var t=this.index;return t>0&&(this.parent.children.splice(t,1),this.parent.children.splice(t-1,0,this),this.parent._setChildrenIndices(),!0)}moveToBottom(){if(!this.parent)return g.warn("Node has no parent. moveToBottom function is ignored."),!1;var t=this.index;return t>0&&(this.parent.children.splice(t,1),this.parent.children.unshift(this),this.parent._setChildrenIndices(),!0)}setZIndex(t){if(!this.parent)return g.warn("Node has no parent. zIndex parameter is ignored."),this;(t<0||t>=this.parent.children.length)&&g.warn("Unexpected value "+t+" for zIndex property. zIndex is just index of a node in children of its parent. Expected value is from 0 to "+(this.parent.children.length-1)+".");var e=this.index;return this.parent.children.splice(e,1),this.parent.children.splice(t,0,this),this.parent._setChildrenIndices(),this}getAbsoluteOpacity(){return this._getCache(D,this._getAbsoluteOpacity)}_getAbsoluteOpacity(){var t=this.opacity(),e=this.getParent();return e&&!e._isUnderCache&&(t*=e.getAbsoluteOpacity()),t}moveTo(t){return this.getParent()!==t&&(this._remove(),t.add(this)),this}toObject(){var t,e,i,r,a=this.getAttrs();const n={attrs:{},className:this.getClassName()};for(t in a)e=a[t],g.isObject(e)&&!g._isPlainObject(e)&&!g._isArray(e)||(i="function"==typeof this[t]&&this[t],delete a[t],r=i?i.call(this):null,a[t]=e,r!==e&&(n.attrs[t]=e));return g._prepareToStringify(n)}toJSON(){return JSON.stringify(this.toObject())}getParent(){return this.parent}findAncestors(t,e,i){var r=[];e&&this._isMatch(t)&&r.push(this);for(var a=this.parent;a;){if(a===i)return r;a._isMatch(t)&&r.push(a),a=a.parent}return r}isAncestorOf(t){return!1}findAncestor(t,e,i){return this.findAncestors(t,e,i)[0]}_isMatch(t){if(!t)return!1;if("function"==typeof t)return t(this);var e,i,r=t.replace(/ /g,"").split(","),a=r.length;for(e=0;e<a;e++)if(i=r[e],g.isValidSelector(i)||(g.warn('Selector "'+i+'" is invalid. Allowed selectors examples are "#foo", ".bar" or "Group".'),g.warn('If you have a custom shape with such className, please change it to start with upper letter like "Triangle".'),g.warn("Konva is awesome, right?")),"#"===i.charAt(0)){if(this.id()===i.slice(1))return!0}else if("."===i.charAt(0)){if(this.hasName(i.slice(1)))return!0}else if(this.className===i||this.nodeType===i)return!0;return!1}getLayer(){var t=this.getParent();return t?t.getLayer():null}getStage(){return this._getCache(Y,this._getStage)}_getStage(){var t=this.getParent();return t?t.getStage():null}fire(t,e={},i){return e.target=e.target||this,i?this._fireAndBubble(t,e):this._fire(t,e),this}getAbsoluteTransform(t){return t?this._getAbsoluteTransform(t):this._getCache(O,this._getAbsoluteTransform)}_getAbsoluteTransform(t){var e;if(t)return e=new a,this._eachAncestorReverse((function(t){var i=t.transformsEnabled();"all"===i?e.multiply(t.getTransform()):"position"===i&&e.translate(t.x()-t.offsetX(),t.y()-t.offsetY())}),t),e;e=this._cache.get(O)||new a,this.parent?this.parent.getAbsoluteTransform().copyInto(e):e.reset();var i=this.transformsEnabled();if("all"===i)e.multiply(this.getTransform());else if("position"===i){const t=this.attrs.x||0,i=this.attrs.y||0,r=this.attrs.offsetX||0,a=this.attrs.offsetY||0;e.translate(t-r,i-a)}return e.dirty=!1,e}getAbsoluteScale(t){for(var e=this;e;)e._isUnderCache&&(t=e),e=e.getParent();const i=this.getAbsoluteTransform(t).decompose();return{x:i.scaleX,y:i.scaleY}}getAbsoluteRotation(){return this.getAbsoluteTransform().decompose().rotation}getTransform(){return this._getCache(X,this._getTransform)}_getTransform(){var t,e,r=this._cache.get(X)||new a;r.reset();var n=this.x(),s=this.y(),o=i.getAngle(this.rotation()),h=null!==(t=this.attrs.scaleX)&&void 0!==t?t:1,l=null!==(e=this.attrs.scaleY)&&void 0!==e?e:1,d=this.attrs.skewX||0,c=this.attrs.skewY||0,g=this.attrs.offsetX||0,u=this.attrs.offsetY||0;return 0===n&&0===s||r.translate(n,s),0!==o&&r.rotate(o),0===d&&0===c||r.skew(d,c),1===h&&1===l||r.scale(h,l),0===g&&0===u||r.translate(-1*g,-1*u),r.dirty=!1,r}clone(t){var e,i,r,a,n,s=g.cloneObject(this.attrs);for(e in t)s[e]=t[e];var o=new this.constructor(s);for(e in this.eventListeners)for(r=(i=this.eventListeners[e]).length,a=0;a<r;a++)(n=i[a]).name.indexOf("konva")<0&&(o.eventListeners[e]||(o.eventListeners[e]=[]),o.eventListeners[e].push(n));return o}_toKonvaCanvas(t){t=t||{};var e=this.getClientRect(),i=this.getStage(),r=void 0!==t.x?t.x:Math.floor(e.x),a=void 0!==t.y?t.y:Math.floor(e.y),n=t.pixelRatio||1,s=new G({width:t.width||Math.ceil(e.width)||(i?i.width():0),height:t.height||Math.ceil(e.height)||(i?i.height():0),pixelRatio:n}),o=s.getContext();const h=new G({width:s.width/s.pixelRatio+Math.abs(r),height:s.height/s.pixelRatio+Math.abs(a),pixelRatio:s.pixelRatio});return!1===t.imageSmoothingEnabled&&(o._context.imageSmoothingEnabled=!1),o.save(),(r||a)&&o.translate(-1*r,-1*a),this.drawScene(s,void 0,h),o.restore(),s}toCanvas(t){return this._toKonvaCanvas(t)._canvas}toDataURL(t){var e=(t=t||{}).mimeType||null,i=t.quality||null,r=this._toKonvaCanvas(t).toDataURL(e,i);return t.callback&&t.callback(r),r}toImage(t){return new Promise(((e,i)=>{try{const i=null==t?void 0:t.callback;i&&delete t.callback,g._urlToImage(this.toDataURL(t),(function(t){e(t),null==i||i(t)}))}catch(t){i(t)}}))}toBlob(t){return new Promise(((e,i)=>{try{const i=null==t?void 0:t.callback;i&&delete t.callback,this.toCanvas(t).toBlob((t=>{e(t),null==i||i(t)}),null==t?void 0:t.mimeType,null==t?void 0:t.quality)}catch(t){i(t)}}))}setSize(t){return this.width(t.width),this.height(t.height),this}getSize(){return{width:this.width(),height:this.height()}}getClassName(){return this.className||this.nodeType}getType(){return this.nodeType}getDragDistance(){return void 0!==this.attrs.dragDistance?this.attrs.dragDistance:this.parent?this.parent.getDragDistance():i.dragDistance}_off(t,e,i){var r,a,n,s=this.eventListeners[t];for(r=0;r<s.length;r++)if(a=s[r].name,n=s[r].handler,!("konva"===a&&"konva"!==e||e&&a!==e||i&&i!==n)){if(s.splice(r,1),0===s.length){delete this.eventListeners[t];break}r--}}_fireChangeEvent(t,e,i){this._fire(t+"Change",{oldVal:e,newVal:i})}addName(t){if(!this.hasName(t)){var e=this.name(),i=e?e+" "+t:t;this.name(i)}return this}hasName(t){if(!t)return!1;const e=this.name();return!!e&&-1!==(e||"").split(/\s/g).indexOf(t)}removeName(t){var e=(this.name()||"").split(/\s/g),i=e.indexOf(t);return-1!==i&&(e.splice(i,1),this.name(e.join(" "))),this}setAttr(t,e){var i=this["set"+g._capitalize(t)];return g._isFunction(i)?i.call(this,e):this._setAttr(t,e),this}_requestDraw(){if(i.autoDrawEnabled){const t=this.getLayer()||this.getStage();null==t||t.batchDraw()}}_setAttr(t,e){var i=this.attrs[t];(i!==e||g.isObject(e))&&(null==e?delete this.attrs[t]:this.attrs[t]=e,this._shouldFireChangeEvents&&this._fireChangeEvent(t,i,e),this._requestDraw())}_setComponentAttr(t,e,i){var r;void 0!==i&&((r=this.attrs[t])||(this.attrs[t]=this.getAttr(t)),this.attrs[t][e]=i,this._fireChangeEvent(t,r,i))}_fireAndBubble(t,e,i){if(e&&this.nodeType===W&&(e.target=this),!((t===N||t===H)&&(i&&(this===i||this.isAncestorOf&&this.isAncestorOf(i))||"Stage"===this.nodeType&&!i))){this._fire(t,e);var r=(t===N||t===H)&&i&&i.isAncestorOf&&i.isAncestorOf(this)&&!i.isAncestorOf(this.parent);(e&&!e.cancelBubble||!e)&&this.parent&&this.parent.isListening()&&!r&&(i&&i.parent?this._fireAndBubble.call(this.parent,t,e,i):this._fireAndBubble.call(this.parent,t,e))}}_getProtoListeners(t){var e,i,r;const a=null!==(e=this._cache.get(L))&&void 0!==e?e:{};let n=null==a?void 0:a[t];if(void 0===n){n=[];let e=Object.getPrototypeOf(this);for(;e;){const a=null!==(r=null===(i=e.eventListeners)||void 0===i?void 0:i[t])&&void 0!==r?r:[];n.push(...a),e=Object.getPrototypeOf(e)}a[t]=n,this._cache.set(L,a)}return n}_fire(t,e){(e=e||{}).currentTarget=this,e.type=t;const i=this._getProtoListeners(t);if(i)for(var r=0;r<i.length;r++)i[r].handler.call(this,e);const a=this.eventListeners[t];if(a)for(r=0;r<a.length;r++)a[r].handler.call(this,e)}draw(){return this.drawScene(),this.drawHit(),this}_createDragElement(t){var e=t?t.pointerId:void 0,i=this.getStage(),r=this.getAbsolutePosition();if(i){var a=i._getPointerById(e)||i._changedPointerPositions[0]||r;E._dragElements.set(this._id,{node:this,startPointerPos:a,offset:{x:a.x-r.x,y:a.y-r.y},dragStatus:"ready",pointerId:e})}}startDrag(t,e=!0){E._dragElements.has(this._id)||this._createDragElement(t);E._dragElements.get(this._id).dragStatus="dragging",this.fire("dragstart",{type:"dragstart",target:this,evt:t&&t.evt},e)}_setDragPosition(t,e){const i=this.getStage()._getPointerById(e.pointerId);if(i){var r={x:i.x-e.offset.x,y:i.y-e.offset.y},a=this.dragBoundFunc();if(void 0!==a){const e=a.call(this,r,t);e?r=e:g.warn("dragBoundFunc did not return any value. That is unexpected behavior. You must return new absolute position from dragBoundFunc.")}this._lastPos&&this._lastPos.x===r.x&&this._lastPos.y===r.y||(this.setAbsolutePosition(r),this._requestDraw()),this._lastPos=r}}stopDrag(t){const e=E._dragElements.get(this._id);e&&(e.dragStatus="stopped"),E._endDragBefore(t),E._endDragAfter(t)}setDraggable(t){this._setAttr("draggable",t),this._dragChange()}isDragging(){const t=E._dragElements.get(this._id);return!!t&&"dragging"===t.dragStatus}_listenDrag(){this._dragCleanup(),this.on("mousedown.konva touchstart.konva",(function(t){if((!(void 0!==t.evt.button)||i.dragButtons.indexOf(t.evt.button)>=0)&&!this.isDragging()){var e=!1;E._dragElements.forEach((t=>{this.isAncestorOf(t.node)&&(e=!0)})),e||this._createDragElement(t)}}))}_dragChange(){if(this.attrs.draggable)this._listenDrag();else{if(this._dragCleanup(),!this.getStage())return;const t=E._dragElements.get(this._id),e=t&&"dragging"===t.dragStatus,i=t&&"ready"===t.dragStatus;e?this.stopDrag():i&&E._dragElements.delete(this._id)}}_dragCleanup(){this.off("mousedown.konva"),this.off("touchstart.konva")}isClientRectOnScreen(t={x:0,y:0}){const e=this.getStage();if(!e)return!1;const i={x:-t.x,y:-t.y,width:e.width()+2*t.x,height:e.height()+2*t.y};return g.haveIntersection(i,this.getClientRect())}static create(t,e){return g._isString(t)&&(t=JSON.parse(t)),this._createNode(t,e)}static _createNode(t,e){var r,a,n,s=V.prototype.getClassName.call(t),o=t.children;e&&(t.attrs.container=e),i[s]||(g.warn('Can not find a node with class name "'+s+'". Fallback to "Shape".'),s="Shape");if(r=new(0,i[s])(t.attrs),o)for(a=o.length,n=0;n<a;n++)r.add(V._createNode(o[n]));return r}}V.prototype.nodeType="Node",V.prototype._attrsAffectingSize=[],V.prototype.eventListeners={},V.prototype.on.call(V.prototype,j,(function(){this._batchingTransformChange?this._needClearTransformCache=!0:(this._clearCache(X),this._clearSelfAndDescendantCache(O))})),V.prototype.on.call(V.prototype,"visibleChange.konva",(function(){this._clearSelfAndDescendantCache(q)})),V.prototype.on.call(V.prototype,"listeningChange.konva",(function(){this._clearSelfAndDescendantCache(B)})),V.prototype.on.call(V.prototype,"opacityChange.konva",(function(){this._clearSelfAndDescendantCache(D)}));const K=w.addGetterSetter;K(V,"zIndex"),K(V,"absolutePosition"),K(V,"position"),K(V,"x",0,p()),K(V,"y",0,p()),K(V,"globalCompositeOperation","source-over",_()),K(V,"opacity",1,p()),K(V,"name","",_()),K(V,"id","",_()),K(V,"rotation",0,p()),w.addComponentsGetterSetter(V,"scale",["x","y"]),K(V,"scaleX",1,p()),K(V,"scaleY",1,p()),w.addComponentsGetterSetter(V,"skew",["x","y"]),K(V,"skewX",0,p()),K(V,"skewY",0,p()),w.addComponentsGetterSetter(V,"offset",["x","y"]),K(V,"offsetX",0,p()),K(V,"offsetY",0,p()),K(V,"dragDistance",null,p()),K(V,"width",0,p()),K(V,"height",0,p()),K(V,"listening",!0,x()),K(V,"preventDefault",!0,x()),K(V,"filters",null,(function(t){return this._filterUpToDate=!1,t})),K(V,"visible",!0,x()),K(V,"transformsEnabled","all",_()),K(V,"size"),K(V,"dragBoundFunc"),K(V,"draggable",!1,x()),w.backCompat(V,{rotateDeg:"rotate",setRotationDeg:"setRotation",getRotationDeg:"getRotation"});class Q extends V{constructor(){super(...arguments),this.children=[]}getChildren(t){if(!t)return this.children||[];const e=this.children||[];var i=[];return e.forEach((function(e){t(e)&&i.push(e)})),i}hasChildren(){return this.getChildren().length>0}removeChildren(){return this.getChildren().forEach((t=>{t.parent=null,t.index=0,t.remove()})),this.children=[],this._requestDraw(),this}destroyChildren(){return this.getChildren().forEach((t=>{t.parent=null,t.index=0,t.destroy()})),this.children=[],this._requestDraw(),this}add(...t){if(0===t.length)return this;if(t.length>1){for(var e=0;e<t.length;e++)this.add(t[e]);return this}const i=t[0];return i.getParent()?(i.moveTo(this),this):(this._validateAdd(i),i.index=this.getChildren().length,i.parent=this,i._clearCaches(),this.getChildren().push(i),this._fire("add",{child:i}),this._requestDraw(),this)}destroy(){return this.hasChildren()&&this.destroyChildren(),super.destroy(),this}find(t){return this._generalFind(t,!1)}findOne(t){var e=this._generalFind(t,!0);return e.length>0?e[0]:void 0}_generalFind(t,e){var i=[];return this._descendants((r=>{const a=r._isMatch(t);return a&&i.push(r),!(!a||!e)})),i}_descendants(t){let e=!1;const i=this.getChildren();for(const r of i){if(e=t(r),e)return!0;if(r.hasChildren()&&(e=r._descendants(t),e))return!0}return!1}toObject(){var t=V.prototype.toObject.call(this);return t.children=[],this.getChildren().forEach((e=>{t.children.push(e.toObject())})),t}isAncestorOf(t){for(var e=t.getParent();e;){if(e._id===this._id)return!0;e=e.getParent()}return!1}clone(t){var e=V.prototype.clone.call(this,t);return this.getChildren().forEach((function(t){e.add(t.clone())})),e}getAllIntersections(t){var e=[];return this.find("Shape").forEach((i=>{i.isVisible()&&i.intersects(t)&&e.push(i)})),e}_clearSelfAndDescendantCache(t){var e;super._clearSelfAndDescendantCache(t),this.isCached()||null===(e=this.children)||void 0===e||e.forEach((function(e){e._clearSelfAndDescendantCache(t)}))}_setChildrenIndices(){var t;null===(t=this.children)||void 0===t||t.forEach((function(t,e){t.index=e})),this._requestDraw()}drawScene(t,e,i){var r=this.getLayer(),a=t||r&&r.getCanvas(),n=a&&a.getContext(),s=this._getCanvasCache(),o=s&&s.scene,h=a&&a.isCache;if(!this.isVisible()&&!h)return this;if(o){n.save();var l=this.getAbsoluteTransform(e).getMatrix();n.transform(l[0],l[1],l[2],l[3],l[4],l[5]),this._drawCachedSceneCanvas(n),n.restore()}else this._drawChildren("drawScene",a,e,i);return this}drawHit(t,e){if(!this.shouldDrawHit(e))return this;var i=this.getLayer(),r=t||i&&i.hitCanvas,a=r&&r.getContext(),n=this._getCanvasCache();if(n&&n.hit){a.save();var s=this.getAbsoluteTransform(e).getMatrix();a.transform(s[0],s[1],s[2],s[3],s[4],s[5]),this._drawCachedHitCanvas(a),a.restore()}else this._drawChildren("drawHit",r,e);return this}_drawChildren(t,e,i,r){var a,n=e&&e.getContext(),s=this.clipWidth(),o=this.clipHeight(),h=this.clipFunc(),l="number"==typeof s&&"number"==typeof o||h;const d=i===this;if(l){n.save();var c=this.getAbsoluteTransform(i),g=c.getMatrix();let t;if(n.transform(g[0],g[1],g[2],g[3],g[4],g[5]),n.beginPath(),h)t=h.call(this,n,this);else{var u=this.clipX(),f=this.clipY();n.rect(u||0,f||0,s,o)}n.clip.apply(n,t),g=c.copy().invert().getMatrix(),n.transform(g[0],g[1],g[2],g[3],g[4],g[5])}var p=!d&&"source-over"!==this.globalCompositeOperation()&&"drawScene"===t;p&&(n.save(),n._applyGlobalCompositeOperation(this)),null===(a=this.children)||void 0===a||a.forEach((function(a){a[t](e,i,r)})),p&&n.restore(),l&&n.restore()}getClientRect(t={}){var e,i,r,a,n,s=t.skipTransform,o=t.relativeTo,h={x:1/0,y:1/0,width:0,height:0},l=this;null===(e=this.children)||void 0===e||e.forEach((function(e){if(e.visible()){var s=e.getClientRect({relativeTo:l,skipShadow:t.skipShadow,skipStroke:t.skipStroke});0===s.width&&0===s.height||(void 0===i?(i=s.x,r=s.y,a=s.x+s.width,n=s.y+s.height):(i=Math.min(i,s.x),r=Math.min(r,s.y),a=Math.max(a,s.x+s.width),n=Math.max(n,s.y+s.height)))}}));for(var d=this.find("Shape"),c=!1,g=0;g<d.length;g++){if(d[g]._isVisible(this)){c=!0;break}}return h=c&&void 0!==i?{x:i,y:r,width:a-i,height:n-r}:{x:0,y:0,width:0,height:0},s?h:this._transformedRect(h,o)}}w.addComponentsGetterSetter(Q,"clip",["x","y","width","height"]),w.addGetterSetter(Q,"clipX",void 0,p()),w.addGetterSetter(Q,"clipY",void 0,p()),w.addGetterSetter(Q,"clipWidth",void 0,p()),w.addGetterSetter(Q,"clipHeight",void 0,p()),w.addGetterSetter(Q,"clipFunc");const J=new Map,$=void 0!==i._global.PointerEvent;function Z(t){return J.get(t)}function tt(t){return{evt:t,pointerId:t.pointerId}}function et(t,e){return J.get(t)===e}function it(t,e){rt(t);e.getStage()&&(J.set(t,e),$&&e._fire("gotpointercapture",tt(new PointerEvent("gotpointercapture"))))}function rt(t,e){const i=J.get(t);if(!i)return;const r=i.getStage();r&&r.content,J.delete(t),$&&i._fire("lostpointercapture",tt(new PointerEvent("lostpointercapture")))}var at="mouseleave",nt="mouseover",st="mouseenter",ot="mousemove",ht="mousedown",lt="mouseup",dt="pointermove",ct="pointerdown",gt="pointerup",ut="pointercancel",ft="pointerout",pt="pointerleave",vt="pointerover",mt="pointerenter",_t="contextmenu",yt="touchstart",xt="touchend",bt="touchmove",St="touchcancel",wt="wheel",Ct=[[st,"_pointerenter"],[ht,"_pointerdown"],[ot,"_pointermove"],[lt,"_pointerup"],[at,"_pointerleave"],[yt,"_pointerdown"],[bt,"_pointermove"],[xt,"_pointerup"],[St,"_pointercancel"],[nt,"_pointerover"],[wt,"_wheel"],[_t,"_contextmenu"],[ct,"_pointerdown"],[dt,"_pointermove"],[gt,"_pointerup"],[ut,"_pointercancel"],["lostpointercapture","_lostpointercapture"]];const Pt={mouse:{[ft]:"mouseout",[pt]:at,[vt]:nt,[mt]:st,[dt]:ot,[ct]:ht,[gt]:lt,[ut]:"mousecancel",pointerclick:"click",pointerdblclick:"dblclick"},touch:{[ft]:"touchout",[pt]:"touchleave",[vt]:"touchover",[mt]:"touchenter",[dt]:bt,[ct]:yt,[gt]:xt,[ut]:St,pointerclick:"tap",pointerdblclick:"dbltap"},pointer:{[ft]:ft,[pt]:pt,[vt]:vt,[mt]:mt,[dt]:dt,[ct]:ct,[gt]:gt,[ut]:ut,pointerclick:"pointerclick",pointerdblclick:"pointerdblclick"}},kt=t=>t.indexOf("pointer")>=0?"pointer":t.indexOf("touch")>=0?"touch":"mouse",At=t=>{const e=kt(t);return"pointer"===e?i.pointerEventsEnabled&&Pt.pointer:"touch"===e?Pt.touch:"mouse"===e?Pt.mouse:void 0};function Tt(t={}){return(t.clipFunc||t.clipWidth||t.clipHeight)&&g.warn("Stage does not support clipping. Please use clip for Layers or Groups."),t}const Mt=[];class Gt extends Q{constructor(t){super(Tt(t)),this._pointerPositions=[],this._changedPointerPositions=[],this._buildDOM(),this._bindContentEvents(),Mt.push(this),this.on("widthChange.konva heightChange.konva",this._resizeDOM),this.on("visibleChange.konva",this._checkVisibility),this.on("clipWidthChange.konva clipHeightChange.konva clipFuncChange.konva",(()=>{Tt(this.attrs)})),this._checkVisibility()}_validateAdd(t){const e="Layer"===t.getType(),i="FastLayer"===t.getType();e||i||g.throw("You may only add layers to the stage.")}_checkVisibility(){if(!this.content)return;const t=this.visible()?"":"none";this.content.style.display=t}setContainer(t){if("string"==typeof t){if("."===t.charAt(0)){var e=t.slice(1);t=document.getElementsByClassName(e)[0]}else{var i;i="#"!==t.charAt(0)?t:t.slice(1),t=document.getElementById(i)}if(!t)throw"Can not find container in document with id "+i}return this._setAttr("container",t),this.content&&(this.content.parentElement&&this.content.parentElement.removeChild(this.content),t.appendChild(this.content)),this}shouldDrawHit(){return!0}clear(){var t,e=this.children,i=e.length;for(t=0;t<i;t++)e[t].clear();return this}clone(t){return t||(t={}),t.container="undefined"!=typeof document&&document.createElement("div"),Q.prototype.clone.call(this,t)}destroy(){super.destroy();var t=this.content;t&&g._isInDocument(t)&&this.container().removeChild(t);var e=Mt.indexOf(this);return e>-1&&Mt.splice(e,1),g.releaseCanvas(this.bufferCanvas._canvas,this.bufferHitCanvas._canvas),this}getPointerPosition(){const t=this._pointerPositions[0]||this._changedPointerPositions[0];return t?{x:t.x,y:t.y}:(g.warn("Pointer position is missing and not registered by the stage. Looks like it is outside of the stage container. You can set it manually from event: stage.setPointersPositions(event);"),null)}_getPointerById(t){return this._pointerPositions.find((e=>e.id===t))}getPointersPositions(){return this._pointerPositions}getStage(){return this}getContent(){return this.content}_toKonvaCanvas(t){(t=t||{}).x=t.x||0,t.y=t.y||0,t.width=t.width||this.width(),t.height=t.height||this.height();var e=new G({width:t.width,height:t.height,pixelRatio:t.pixelRatio||1}),i=e.getContext()._context,r=this.children;return(t.x||t.y)&&i.translate(-1*t.x,-1*t.y),r.forEach((function(e){if(e.isVisible()){var r=e._toKonvaCanvas(t);i.drawImage(r._canvas,t.x,t.y,r.getWidth()/r.getPixelRatio(),r.getHeight()/r.getPixelRatio())}})),e}getIntersection(t){if(!t)return null;var e,i=this.children;for(e=i.length-1;e>=0;e--){const r=i[e].getIntersection(t);if(r)return r}return null}_resizeDOM(){var t=this.width(),e=this.height();this.content&&(this.content.style.width=t+"px",this.content.style.height=e+"px"),this.bufferCanvas.setSize(t,e),this.bufferHitCanvas.setSize(t,e),this.children.forEach((i=>{i.setSize({width:t,height:e}),i.draw()}))}add(t,...e){if(arguments.length>1){for(var r=0;r<arguments.length;r++)this.add(arguments[r]);return this}super.add(t);var a=this.children.length;return a>5&&g.warn("The stage has "+a+" layers. Recommended maximum number of layers is 3-5. Adding more layers into the stage may drop the performance. Rethink your tree structure, you can use Konva.Group."),t.setSize({width:this.width(),height:this.height()}),t.draw(),i.isBrowser&&this.content.appendChild(t.canvas._canvas),this}getParent(){return null}getLayer(){return null}hasPointerCapture(t){return et(t,this)}setPointerCapture(t){it(t,this)}releaseCapture(t){rt(t)}getLayers(){return this.children}_bindContentEvents(){i.isBrowser&&Ct.forEach((([t,e])=>{this.content.addEventListener(t,(t=>{this[e](t)}),{passive:!1})}))}_pointerenter(t){this.setPointersPositions(t);const e=At(t.type);e&&this._fire(e.pointerenter,{evt:t,target:this,currentTarget:this})}_pointerover(t){this.setPointersPositions(t);const e=At(t.type);e&&this._fire(e.pointerover,{evt:t,target:this,currentTarget:this})}_getTargetShape(t){let e=this[t+"targetShape"];return e&&!e.getStage()&&(e=null),e}_pointerleave(t){const e=At(t.type),r=kt(t.type);if(e){this.setPointersPositions(t);var a=this._getTargetShape(r),n=!(i.isDragging()||i.isTransforming())||i.hitOnDragEnabled;a&&n?(a._fireAndBubble(e.pointerout,{evt:t}),a._fireAndBubble(e.pointerleave,{evt:t}),this._fire(e.pointerleave,{evt:t,target:this,currentTarget:this}),this[r+"targetShape"]=null):n&&(this._fire(e.pointerleave,{evt:t,target:this,currentTarget:this}),this._fire(e.pointerout,{evt:t,target:this,currentTarget:this})),this.pointerPos=null,this._pointerPositions=[]}}_pointerdown(t){const e=At(t.type),r=kt(t.type);if(e){this.setPointersPositions(t);var a=!1;this._changedPointerPositions.forEach((n=>{var s=this.getIntersection(n);if(E.justDragged=!1,i["_"+r+"ListenClick"]=!0,!s||!s.isListening())return void(this[r+"ClickStartShape"]=void 0);i.capturePointerEventsEnabled&&s.setPointerCapture(n.id),this[r+"ClickStartShape"]=s,s._fireAndBubble(e.pointerdown,{evt:t,pointerId:n.id}),a=!0;const o=t.type.indexOf("touch")>=0;s.preventDefault()&&t.cancelable&&o&&t.preventDefault()})),a||this._fire(e.pointerdown,{evt:t,target:this,currentTarget:this,pointerId:this._pointerPositions[0].id})}}_pointermove(t){const e=At(t.type),r=kt(t.type);if(!e)return;if(i.isDragging()&&E.node.preventDefault()&&t.cancelable&&t.preventDefault(),this.setPointersPositions(t),!(!(i.isDragging()||i.isTransforming())||i.hitOnDragEnabled))return;var a={};let n=!1;var s=this._getTargetShape(r);this._changedPointerPositions.forEach((i=>{const o=Z(i.id)||this.getIntersection(i),h=i.id,l={evt:t,pointerId:h};var d=s!==o;if(d&&s&&(s._fireAndBubble(e.pointerout,{...l},o),s._fireAndBubble(e.pointerleave,{...l},o)),o){if(a[o._id])return;a[o._id]=!0}o&&o.isListening()?(n=!0,d&&(o._fireAndBubble(e.pointerover,{...l},s),o._fireAndBubble(e.pointerenter,{...l},s),this[r+"targetShape"]=o),o._fireAndBubble(e.pointermove,{...l})):s&&(this._fire(e.pointerover,{evt:t,target:this,currentTarget:this,pointerId:h}),this[r+"targetShape"]=null)})),n||this._fire(e.pointermove,{evt:t,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id})}_pointerup(t){const e=At(t.type),r=kt(t.type);if(!e)return;this.setPointersPositions(t);const a=this[r+"ClickStartShape"],n=this[r+"ClickEndShape"];var s={};let o=!1;this._changedPointerPositions.forEach((h=>{const l=Z(h.id)||this.getIntersection(h);if(l){if(l.releaseCapture(h.id),s[l._id])return;s[l._id]=!0}const d=h.id,c={evt:t,pointerId:d};let g=!1;i["_"+r+"InDblClickWindow"]?(g=!0,clearTimeout(this[r+"DblTimeout"])):E.justDragged||(i["_"+r+"InDblClickWindow"]=!0,clearTimeout(this[r+"DblTimeout"])),this[r+"DblTimeout"]=setTimeout((function(){i["_"+r+"InDblClickWindow"]=!1}),i.dblClickWindow),l&&l.isListening()?(o=!0,this[r+"ClickEndShape"]=l,l._fireAndBubble(e.pointerup,{...c}),i["_"+r+"ListenClick"]&&a&&a===l&&(l._fireAndBubble(e.pointerclick,{...c}),g&&n&&n===l&&l._fireAndBubble(e.pointerdblclick,{...c}))):(this[r+"ClickEndShape"]=null,i["_"+r+"ListenClick"]&&this._fire(e.pointerclick,{evt:t,target:this,currentTarget:this,pointerId:d}),g&&this._fire(e.pointerdblclick,{evt:t,target:this,currentTarget:this,pointerId:d}))})),o||this._fire(e.pointerup,{evt:t,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id}),i["_"+r+"ListenClick"]=!1,t.cancelable&&"touch"!==r&&t.preventDefault()}_contextmenu(t){this.setPointersPositions(t);var e=this.getIntersection(this.getPointerPosition());e&&e.isListening()?e._fireAndBubble(_t,{evt:t}):this._fire(_t,{evt:t,target:this,currentTarget:this})}_wheel(t){this.setPointersPositions(t);var e=this.getIntersection(this.getPointerPosition());e&&e.isListening()?e._fireAndBubble(wt,{evt:t}):this._fire(wt,{evt:t,target:this,currentTarget:this})}_pointercancel(t){this.setPointersPositions(t);const e=Z(t.pointerId)||this.getIntersection(this.getPointerPosition());e&&e._fireAndBubble(gt,tt(t)),rt(t.pointerId)}_lostpointercapture(t){rt(t.pointerId)}setPointersPositions(t){var e=this._getContentPosition(),i=null,r=null;void 0!==(t=t||window.event).touches?(this._pointerPositions=[],this._changedPointerPositions=[],Array.prototype.forEach.call(t.touches,(t=>{this._pointerPositions.push({id:t.identifier,x:(t.clientX-e.left)/e.scaleX,y:(t.clientY-e.top)/e.scaleY})})),Array.prototype.forEach.call(t.changedTouches||t.touches,(t=>{this._changedPointerPositions.push({id:t.identifier,x:(t.clientX-e.left)/e.scaleX,y:(t.clientY-e.top)/e.scaleY})}))):(i=(t.clientX-e.left)/e.scaleX,r=(t.clientY-e.top)/e.scaleY,this.pointerPos={x:i,y:r},this._pointerPositions=[{x:i,y:r,id:g._getFirstPointerId(t)}],this._changedPointerPositions=[{x:i,y:r,id:g._getFirstPointerId(t)}])}_setPointerPosition(t){g.warn('Method _setPointerPosition is deprecated. Use "stage.setPointersPositions(event)" instead.'),this.setPointersPositions(t)}_getContentPosition(){if(!this.content||!this.content.getBoundingClientRect)return{top:0,left:0,scaleX:1,scaleY:1};var t=this.content.getBoundingClientRect();return{top:t.top,left:t.left,scaleX:t.width/this.content.clientWidth||1,scaleY:t.height/this.content.clientHeight||1}}_buildDOM(){if(this.bufferCanvas=new G({width:this.width(),height:this.height()}),this.bufferHitCanvas=new R({pixelRatio:1,width:this.width(),height:this.height()}),i.isBrowser){var t=this.container();if(!t)throw"Stage has no container. A container is required.";t.innerHTML="",this.content=document.createElement("div"),this.content.style.position="relative",this.content.style.userSelect="none",this.content.className="konvajs-content",this.content.setAttribute("role","presentation"),t.appendChild(this.content),this._resizeDOM()}}cache(){return g.warn("Cache function is not allowed for stage. You may use cache only for layers, groups and shapes."),this}clearCache(){return this}batchDraw(){return this.getChildren().forEach((function(t){t.batchDraw()})),this}}Gt.prototype.nodeType="Stage",r(Gt),w.addGetterSetter(Gt,"container"),i.isBrowser&&document.addEventListener("visibilitychange",(()=>{Mt.forEach((t=>{t.batchDraw()}))}));var Rt="hasShadow",Et="shadowRGBA",Dt="patternImage",Lt="linearGradient",Ot="radialGradient";let It;function Ft(){return It||(It=g.createCanvasElement().getContext("2d"),It)}const Bt={};class Nt extends V{constructor(t){let e;for(super(t);e=g.getRandomColor(),!e||e in Bt;);this.colorKey=e,Bt[e]=this}getContext(){return g.warn("shape.getContext() method is deprecated. Please do not use it."),this.getLayer().getContext()}getCanvas(){return g.warn("shape.getCanvas() method is deprecated. Please do not use it."),this.getLayer().getCanvas()}getSceneFunc(){return this.attrs.sceneFunc||this._sceneFunc}getHitFunc(){return this.attrs.hitFunc||this._hitFunc}hasShadow(){return this._getCache(Rt,this._hasShadow)}_hasShadow(){return this.shadowEnabled()&&0!==this.shadowOpacity()&&!!(this.shadowColor()||this.shadowBlur()||this.shadowOffsetX()||this.shadowOffsetY())}_getFillPattern(){return this._getCache(Dt,this.__getFillPattern)}__getFillPattern(){if(this.fillPatternImage()){const t=Ft().createPattern(this.fillPatternImage(),this.fillPatternRepeat()||"repeat");if(t&&t.setTransform){const e=new a;e.translate(this.fillPatternX(),this.fillPatternY()),e.rotate(i.getAngle(this.fillPatternRotation())),e.scale(this.fillPatternScaleX(),this.fillPatternScaleY()),e.translate(-1*this.fillPatternOffsetX(),-1*this.fillPatternOffsetY());const r=e.getMatrix(),n="undefined"==typeof DOMMatrix?{a:r[0],b:r[1],c:r[2],d:r[3],e:r[4],f:r[5]}:new DOMMatrix(r);t.setTransform(n)}return t}}_getLinearGradient(){return this._getCache(Lt,this.__getLinearGradient)}__getLinearGradient(){var t=this.fillLinearGradientColorStops();if(t){for(var e=Ft(),i=this.fillLinearGradientStartPoint(),r=this.fillLinearGradientEndPoint(),a=e.createLinearGradient(i.x,i.y,r.x,r.y),n=0;n<t.length;n+=2)a.addColorStop(t[n],t[n+1]);return a}}_getRadialGradient(){return this._getCache(Ot,this.__getRadialGradient)}__getRadialGradient(){var t=this.fillRadialGradientColorStops();if(t){for(var e=Ft(),i=this.fillRadialGradientStartPoint(),r=this.fillRadialGradientEndPoint(),a=e.createRadialGradient(i.x,i.y,this.fillRadialGradientStartRadius(),r.x,r.y,this.fillRadialGradientEndRadius()),n=0;n<t.length;n+=2)a.addColorStop(t[n],t[n+1]);return a}}getShadowRGBA(){return this._getCache(Et,this._getShadowRGBA)}_getShadowRGBA(){if(this.hasShadow()){var t=g.colorToRGBA(this.shadowColor());return t?"rgba("+t.r+","+t.g+","+t.b+","+t.a*(this.shadowOpacity()||1)+")":void 0}}hasFill(){return this._calculate("hasFill",["fillEnabled","fill","fillPatternImage","fillLinearGradientColorStops","fillRadialGradientColorStops"],(()=>this.fillEnabled()&&!!(this.fill()||this.fillPatternImage()||this.fillLinearGradientColorStops()||this.fillRadialGradientColorStops())))}hasStroke(){return this._calculate("hasStroke",["strokeEnabled","strokeWidth","stroke","strokeLinearGradientColorStops"],(()=>this.strokeEnabled()&&this.strokeWidth()&&!(!this.stroke()&&!this.strokeLinearGradientColorStops())))}hasHitStroke(){const t=this.hitStrokeWidth();return"auto"===t?this.hasStroke():this.strokeEnabled()&&!!t}intersects(t){var e=this.getStage();if(!e)return!1;const i=e.bufferHitCanvas;i.getContext().clear(),this.drawHit(i,void 0,!0);return i.context.getImageData(Math.round(t.x),Math.round(t.y),1,1).data[3]>0}destroy(){return V.prototype.destroy.call(this),delete Bt[this.colorKey],delete this.colorKey,this}_useBufferCanvas(t){var e;if(!(null===(e=this.attrs.perfectDrawEnabled)||void 0===e||e))return!1;const i=t||this.hasFill(),r=this.hasStroke(),a=1!==this.getAbsoluteOpacity();if(i&&r&&a)return!0;const n=this.hasShadow(),s=this.shadowForStrokeEnabled();return!!(i&&r&&n&&s)}setStrokeHitEnabled(t){g.warn("strokeHitEnabled property is deprecated. Please use hitStrokeWidth instead."),t?this.hitStrokeWidth("auto"):this.hitStrokeWidth(0)}getStrokeHitEnabled(){return 0!==this.hitStrokeWidth()}getSelfRect(){var t=this.size();return{x:this._centroid?-t.width/2:0,y:this._centroid?-t.height/2:0,width:t.width,height:t.height}}getClientRect(t={}){let e=!1,i=this.getParent();for(;i;){if(i.isCached()){e=!0;break}i=i.getParent()}const r=t.skipTransform,a=t.relativeTo||e&&this.getStage()||void 0,n=this.getSelfRect(),s=!t.skipStroke&&this.hasStroke()&&this.strokeWidth()||0,o=n.width+s,h=n.height+s,l=!t.skipShadow&&this.hasShadow(),d=l?this.shadowOffsetX():0,c=l?this.shadowOffsetY():0,g=o+Math.abs(d),u=h+Math.abs(c),f=l&&this.shadowBlur()||0,p={width:g+2*f,height:u+2*f,x:-(s/2+f)+Math.min(d,0)+n.x,y:-(s/2+f)+Math.min(c,0)+n.y};return r?p:this._transformedRect(p,a)}drawScene(t,e,i){var r,a,n=this.getLayer(),s=t||n.getCanvas(),o=s.getContext(),h=this._getCanvasCache(),l=this.getSceneFunc(),d=this.hasShadow(),c=s.isCache,g=e===this;if(!this.isVisible()&&!g)return this;if(h){o.save();var u=this.getAbsoluteTransform(e).getMatrix();return o.transform(u[0],u[1],u[2],u[3],u[4],u[5]),this._drawCachedSceneCanvas(o),o.restore(),this}if(!l)return this;if(o.save(),this._useBufferCanvas()&&!c){r=this.getStage();const t=i||r.bufferCanvas;(a=t.getContext()).clear(),a.save(),a._applyLineJoin(this);var f=this.getAbsoluteTransform(e).getMatrix();a.transform(f[0],f[1],f[2],f[3],f[4],f[5]),l.call(this,a,this),a.restore();var p=t.pixelRatio;d&&o._applyShadow(this),o._applyOpacity(this),o._applyGlobalCompositeOperation(this),o.drawImage(t._canvas,0,0,t.width/p,t.height/p)}else{if(o._applyLineJoin(this),!g){f=this.getAbsoluteTransform(e).getMatrix();o.transform(f[0],f[1],f[2],f[3],f[4],f[5]),o._applyOpacity(this),o._applyGlobalCompositeOperation(this)}d&&o._applyShadow(this),l.call(this,o,this)}return o.restore(),this}drawHit(t,e,i=!1){if(!this.shouldDrawHit(e,i))return this;var r=this.getLayer(),a=t||r.hitCanvas,n=a&&a.getContext(),s=this.hitFunc()||this.sceneFunc(),o=this._getCanvasCache(),h=o&&o.hit;if(this.colorKey||g.warn("Looks like your canvas has a destroyed shape in it. Do not reuse shape after you destroyed it. If you want to reuse shape you should call remove() instead of destroy()"),h){n.save();var l=this.getAbsoluteTransform(e).getMatrix();return n.transform(l[0],l[1],l[2],l[3],l[4],l[5]),this._drawCachedHitCanvas(n),n.restore(),this}if(!s)return this;n.save(),n._applyLineJoin(this);if(!(this===e)){var d=this.getAbsoluteTransform(e).getMatrix();n.transform(d[0],d[1],d[2],d[3],d[4],d[5])}return s.call(this,n,this),n.restore(),this}drawHitFromCache(t=0){var e,i,r,a,n,s=this._getCanvasCache(),o=this._getCachedSceneCanvas(),h=s.hit,l=h.getContext(),d=h.getWidth(),c=h.getHeight();l.clear(),l.drawImage(o._canvas,0,0,d,c);try{for(r=(i=(e=l.getImageData(0,0,d,c)).data).length,a=g._hexToRgb(this.colorKey),n=0;n<r;n+=4)i[n+3]>t?(i[n]=a.r,i[n+1]=a.g,i[n+2]=a.b,i[n+3]=255):i[n+3]=0;l.putImageData(e,0,0)}catch(t){g.error("Unable to draw hit graph from cached scene canvas. "+t.message)}return this}hasPointerCapture(t){return et(t,this)}setPointerCapture(t){it(t,this)}releaseCapture(t){rt(t)}}Nt.prototype._fillFunc=function(t){const e=this.attrs.fillRule;e?t.fill(e):t.fill()},Nt.prototype._strokeFunc=function(t){t.stroke()},Nt.prototype._fillFuncHit=function(t){const e=this.attrs.fillRule;e?t.fill(e):t.fill()},Nt.prototype._strokeFuncHit=function(t){t.stroke()},Nt.prototype._centroid=!1,Nt.prototype.nodeType="Shape",r(Nt),Nt.prototype.eventListeners={},Nt.prototype.on.call(Nt.prototype,"shadowColorChange.konva shadowBlurChange.konva shadowOffsetChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",(function(){this._clearCache(Rt)})),Nt.prototype.on.call(Nt.prototype,"shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",(function(){this._clearCache(Et)})),Nt.prototype.on.call(Nt.prototype,"fillPriorityChange.konva fillPatternImageChange.konva fillPatternRepeatChange.konva fillPatternScaleXChange.konva fillPatternScaleYChange.konva fillPatternOffsetXChange.konva fillPatternOffsetYChange.konva fillPatternXChange.konva fillPatternYChange.konva fillPatternRotationChange.konva",(function(){this._clearCache(Dt)})),Nt.prototype.on.call(Nt.prototype,"fillPriorityChange.konva fillLinearGradientColorStopsChange.konva fillLinearGradientStartPointXChange.konva fillLinearGradientStartPointYChange.konva fillLinearGradientEndPointXChange.konva fillLinearGradientEndPointYChange.konva",(function(){this._clearCache(Lt)})),Nt.prototype.on.call(Nt.prototype,"fillPriorityChange.konva fillRadialGradientColorStopsChange.konva fillRadialGradientStartPointXChange.konva fillRadialGradientStartPointYChange.konva fillRadialGradientEndPointXChange.konva fillRadialGradientEndPointYChange.konva fillRadialGradientStartRadiusChange.konva fillRadialGradientEndRadiusChange.konva",(function(){this._clearCache(Ot)})),w.addGetterSetter(Nt,"stroke",void 0,y()),w.addGetterSetter(Nt,"strokeWidth",2,p()),w.addGetterSetter(Nt,"fillAfterStrokeEnabled",!1),w.addGetterSetter(Nt,"hitStrokeWidth","auto",m()),w.addGetterSetter(Nt,"strokeHitEnabled",!0,x()),w.addGetterSetter(Nt,"perfectDrawEnabled",!0,x()),w.addGetterSetter(Nt,"shadowForStrokeEnabled",!0,x()),w.addGetterSetter(Nt,"lineJoin"),w.addGetterSetter(Nt,"lineCap"),w.addGetterSetter(Nt,"sceneFunc"),w.addGetterSetter(Nt,"hitFunc"),w.addGetterSetter(Nt,"dash"),w.addGetterSetter(Nt,"dashOffset",0,p()),w.addGetterSetter(Nt,"shadowColor",void 0,_()),w.addGetterSetter(Nt,"shadowBlur",0,p()),w.addGetterSetter(Nt,"shadowOpacity",1,p()),w.addComponentsGetterSetter(Nt,"shadowOffset",["x","y"]),w.addGetterSetter(Nt,"shadowOffsetX",0,p()),w.addGetterSetter(Nt,"shadowOffsetY",0,p()),w.addGetterSetter(Nt,"fillPatternImage"),w.addGetterSetter(Nt,"fill",void 0,y()),w.addGetterSetter(Nt,"fillPatternX",0,p()),w.addGetterSetter(Nt,"fillPatternY",0,p()),w.addGetterSetter(Nt,"fillLinearGradientColorStops"),w.addGetterSetter(Nt,"strokeLinearGradientColorStops"),w.addGetterSetter(Nt,"fillRadialGradientStartRadius",0),w.addGetterSetter(Nt,"fillRadialGradientEndRadius",0),w.addGetterSetter(Nt,"fillRadialGradientColorStops"),w.addGetterSetter(Nt,"fillPatternRepeat","repeat"),w.addGetterSetter(Nt,"fillEnabled",!0),w.addGetterSetter(Nt,"strokeEnabled",!0),w.addGetterSetter(Nt,"shadowEnabled",!0),w.addGetterSetter(Nt,"dashEnabled",!0),w.addGetterSetter(Nt,"strokeScaleEnabled",!0),w.addGetterSetter(Nt,"fillPriority","color"),w.addComponentsGetterSetter(Nt,"fillPatternOffset",["x","y"]),w.addGetterSetter(Nt,"fillPatternOffsetX",0,p()),w.addGetterSetter(Nt,"fillPatternOffsetY",0,p()),w.addComponentsGetterSetter(Nt,"fillPatternScale",["x","y"]),w.addGetterSetter(Nt,"fillPatternScaleX",1,p()),w.addGetterSetter(Nt,"fillPatternScaleY",1,p()),w.addComponentsGetterSetter(Nt,"fillLinearGradientStartPoint",["x","y"]),w.addComponentsGetterSetter(Nt,"strokeLinearGradientStartPoint",["x","y"]),w.addGetterSetter(Nt,"fillLinearGradientStartPointX",0),w.addGetterSetter(Nt,"strokeLinearGradientStartPointX",0),w.addGetterSetter(Nt,"fillLinearGradientStartPointY",0),w.addGetterSetter(Nt,"strokeLinearGradientStartPointY",0),w.addComponentsGetterSetter(Nt,"fillLinearGradientEndPoint",["x","y"]),w.addComponentsGetterSetter(Nt,"strokeLinearGradientEndPoint",["x","y"]),w.addGetterSetter(Nt,"fillLinearGradientEndPointX",0),w.addGetterSetter(Nt,"strokeLinearGradientEndPointX",0),w.addGetterSetter(Nt,"fillLinearGradientEndPointY",0),w.addGetterSetter(Nt,"strokeLinearGradientEndPointY",0),w.addComponentsGetterSetter(Nt,"fillRadialGradientStartPoint",["x","y"]),w.addGetterSetter(Nt,"fillRadialGradientStartPointX",0),w.addGetterSetter(Nt,"fillRadialGradientStartPointY",0),w.addComponentsGetterSetter(Nt,"fillRadialGradientEndPoint",["x","y"]),w.addGetterSetter(Nt,"fillRadialGradientEndPointX",0),w.addGetterSetter(Nt,"fillRadialGradientEndPointY",0),w.addGetterSetter(Nt,"fillPatternRotation",0),w.addGetterSetter(Nt,"fillRule",void 0,_()),w.backCompat(Nt,{dashArray:"dash",getDashArray:"getDash",setDashArray:"getDash",drawFunc:"sceneFunc",getDrawFunc:"getSceneFunc",setDrawFunc:"setSceneFunc",drawHitFunc:"hitFunc",getDrawHitFunc:"getHitFunc",setDrawHitFunc:"setHitFunc"});var Ht=[{x:0,y:0},{x:-1,y:-1},{x:1,y:-1},{x:1,y:1},{x:-1,y:1}],Wt=Ht.length;class zt extends Q{constructor(t){super(t),this.canvas=new G,this.hitCanvas=new R({pixelRatio:1}),this._waitingForDraw=!1,this.on("visibleChange.konva",this._checkVisibility),this._checkVisibility(),this.on("imageSmoothingEnabledChange.konva",this._setSmoothEnabled),this._setSmoothEnabled()}createPNGStream(){return this.canvas._canvas.createPNGStream()}getCanvas(){return this.canvas}getNativeCanvasElement(){return this.canvas._canvas}getHitCanvas(){return this.hitCanvas}getContext(){return this.getCanvas().getContext()}clear(t){return this.getContext().clear(t),this.getHitCanvas().getContext().clear(t),this}setZIndex(t){super.setZIndex(t);var e=this.getStage();return e&&e.content&&(e.content.removeChild(this.getNativeCanvasElement()),t<e.children.length-1?e.content.insertBefore(this.getNativeCanvasElement(),e.children[t+1].getCanvas()._canvas):e.content.appendChild(this.getNativeCanvasElement())),this}moveToTop(){V.prototype.moveToTop.call(this);var t=this.getStage();return t&&t.content&&(t.content.removeChild(this.getNativeCanvasElement()),t.content.appendChild(this.getNativeCanvasElement())),!0}moveUp(){if(!V.prototype.moveUp.call(this))return!1;var t=this.getStage();return!(!t||!t.content)&&(t.content.removeChild(this.getNativeCanvasElement()),this.index<t.children.length-1?t.content.insertBefore(this.getNativeCanvasElement(),t.children[this.index+1].getCanvas()._canvas):t.content.appendChild(this.getNativeCanvasElement()),!0)}moveDown(){if(V.prototype.moveDown.call(this)){var t=this.getStage();if(t){var e=t.children;t.content&&(t.content.removeChild(this.getNativeCanvasElement()),t.content.insertBefore(this.getNativeCanvasElement(),e[this.index+1].getCanvas()._canvas))}return!0}return!1}moveToBottom(){if(V.prototype.moveToBottom.call(this)){var t=this.getStage();if(t){var e=t.children;t.content&&(t.content.removeChild(this.getNativeCanvasElement()),t.content.insertBefore(this.getNativeCanvasElement(),e[1].getCanvas()._canvas))}return!0}return!1}getLayer(){return this}remove(){var t=this.getNativeCanvasElement();return V.prototype.remove.call(this),t&&t.parentNode&&g._isInDocument(t)&&t.parentNode.removeChild(t),this}getStage(){return this.parent}setSize({width:t,height:e}){return this.canvas.setSize(t,e),this.hitCanvas.setSize(t,e),this._setSmoothEnabled(),this}_validateAdd(t){var e=t.getType();"Group"!==e&&"Shape"!==e&&g.throw("You may only add groups and shapes to a layer.")}_toKonvaCanvas(t){return(t=t||{}).width=t.width||this.getWidth(),t.height=t.height||this.getHeight(),t.x=void 0!==t.x?t.x:this.x(),t.y=void 0!==t.y?t.y:this.y(),V.prototype._toKonvaCanvas.call(this,t)}_checkVisibility(){const t=this.visible();this.canvas._canvas.style.display=t?"block":"none"}_setSmoothEnabled(){this.getContext()._context.imageSmoothingEnabled=this.imageSmoothingEnabled()}getWidth(){if(this.parent)return this.parent.width()}setWidth(){g.warn('Can not change width of layer. Use "stage.width(value)" function instead.')}getHeight(){if(this.parent)return this.parent.height()}setHeight(){g.warn('Can not change height of layer. Use "stage.height(value)" function instead.')}batchDraw(){return this._waitingForDraw||(this._waitingForDraw=!0,g.requestAnimFrame((()=>{this.draw(),this._waitingForDraw=!1}))),this}getIntersection(t){if(!this.isListening()||!this.isVisible())return null;for(var e=1,i=!1;;){for(let r=0;r<Wt;r++){const a=Ht[r],n=this._getIntersection({x:t.x+a.x*e,y:t.y+a.y*e}),s=n.shape;if(s)return s;if(i=!!n.antialiased,!n.antialiased)break}if(!i)return null;e+=1}}_getIntersection(t){const e=this.hitCanvas.pixelRatio,i=this.hitCanvas.context.getImageData(Math.round(t.x*e),Math.round(t.y*e),1,1).data,r=i[3];if(255===r){const t=g._rgbToHex(i[0],i[1],i[2]),e=Bt["#"+t];return e?{shape:e}:{antialiased:!0}}return r>0?{antialiased:!0}:{}}drawScene(t,e){var i=this.getLayer(),r=t||i&&i.getCanvas();return this._fire("beforeDraw",{node:this}),this.clearBeforeDraw()&&r.getContext().clear(),Q.prototype.drawScene.call(this,r,e),this._fire("draw",{node:this}),this}drawHit(t,e){var i=this.getLayer(),r=t||i&&i.hitCanvas;return i&&i.clearBeforeDraw()&&i.getHitCanvas().getContext().clear(),Q.prototype.drawHit.call(this,r,e),this}enableHitGraph(){return this.hitGraphEnabled(!0),this}disableHitGraph(){return this.hitGraphEnabled(!1),this}setHitGraphEnabled(t){g.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening(t)}getHitGraphEnabled(t){return g.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening()}toggleHitCanvas(){if(this.parent&&this.parent.content){var t=this.parent;!!this.hitCanvas._canvas.parentNode?t.content.removeChild(this.hitCanvas._canvas):t.content.appendChild(this.hitCanvas._canvas)}}destroy(){return g.releaseCanvas(this.getNativeCanvasElement(),this.getHitCanvas()._canvas),super.destroy()}}zt.prototype.nodeType="Layer",r(zt),w.addGetterSetter(zt,"imageSmoothingEnabled",!0),w.addGetterSetter(zt,"clearBeforeDraw",!0),w.addGetterSetter(zt,"hitGraphEnabled",!0,x());class Yt extends zt{constructor(t){super(t),this.listening(!1),g.warn('Konva.Fast layer is deprecated. Please use "new Konva.Layer({ listening: false })" instead.')}}Yt.prototype.nodeType="FastLayer",r(Yt);class Xt extends Q{_validateAdd(t){var e=t.getType();"Group"!==e&&"Shape"!==e&&g.throw("You may only add groups and shapes to groups.")}}Xt.prototype.nodeType="Group",r(Xt);const qt=e.performance&&e.performance.now?function(){return e.performance.now()}:function(){return(new Date).getTime()};class jt{constructor(t,e){this.id=jt.animIdCounter++,this.frame={time:0,timeDiff:0,lastTime:qt(),frameRate:0},this.func=t,this.setLayers(e)}setLayers(t){let e=[];return t&&(e=Array.isArray(t)?t:[t]),this.layers=e,this}getLayers(){return this.layers}addLayer(t){const e=this.layers,i=e.length;for(let r=0;r<i;r++)if(e[r]._id===t._id)return!1;return this.layers.push(t),!0}isRunning(){const t=jt.animations,e=t.length;for(let i=0;i<e;i++)if(t[i].id===this.id)return!0;return!1}start(){return this.stop(),this.frame.timeDiff=0,this.frame.lastTime=qt(),jt._addAnimation(this),this}stop(){return jt._removeAnimation(this),this}_updateFrameObject(t){this.frame.timeDiff=t-this.frame.lastTime,this.frame.lastTime=t,this.frame.time+=this.frame.timeDiff,this.frame.frameRate=1e3/this.frame.timeDiff}static _addAnimation(t){this.animations.push(t),this._handleAnimation()}static _removeAnimation(t){const e=t.id,i=this.animations,r=i.length;for(let t=0;t<r;t++)if(i[t].id===e){this.animations.splice(t,1);break}}static _runFrames(){const t={},e=this.animations;for(let i=0;i<e.length;i++){const r=e[i],a=r.layers,n=r.func;r._updateFrameObject(qt());const s=a.length;let o;if(o=!n||!1!==n.call(r,r.frame),o)for(let e=0;e<s;e++){const i=a[e];void 0!==i._id&&(t[i._id]=i)}}for(let e in t)t.hasOwnProperty(e)&&t[e].batchDraw()}static _animationLoop(){const t=jt;t.animations.length?(t._runFrames(),g.requestAnimFrame(t._animationLoop)):t.animRunning=!1}static _handleAnimation(){this.animRunning||(this.animRunning=!0,g.requestAnimFrame(this._animationLoop))}}jt.animations=[],jt.animIdCounter=0,jt.animRunning=!1;var Ut={node:1,duration:1,easing:1,onFinish:1,yoyo:1},Vt=0,Kt=["fill","stroke","shadowColor"];class Qt{constructor(t,e,i,r,a,n,s){this.prop=t,this.propFunc=e,this.begin=r,this._pos=r,this.duration=n,this._change=0,this.prevPos=0,this.yoyo=s,this._time=0,this._position=0,this._startTime=0,this._finish=0,this.func=i,this._change=a-this.begin,this.pause()}fire(t){var e=this[t];e&&e()}setTime(t){t>this.duration?this.yoyo?(this._time=this.duration,this.reverse()):this.finish():t<0?this.yoyo?(this._time=0,this.play()):this.reset():(this._time=t,this.update())}getTime(){return this._time}setPosition(t){this.prevPos=this._pos,this.propFunc(t),this._pos=t}getPosition(t){return void 0===t&&(t=this._time),this.func(t,this.begin,this._change,this.duration)}play(){this.state=2,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire("onPlay")}reverse(){this.state=3,this._time=this.duration-this._time,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire("onReverse")}seek(t){this.pause(),this._time=t,this.update(),this.fire("onSeek")}reset(){this.pause(),this._time=0,this.update(),this.fire("onReset")}finish(){this.pause(),this._time=this.duration,this.update(),this.fire("onFinish")}update(){this.setPosition(this.getPosition(this._time)),this.fire("onUpdate")}onEnterFrame(){var t=this.getTimer()-this._startTime;2===this.state?this.setTime(t):3===this.state&&this.setTime(this.duration-t)}pause(){this.state=1,this.fire("onPause")}getTimer(){return(new Date).getTime()}}class Jt{constructor(t){var e,r,a=this,n=t.node,s=n._id,o=t.easing||$t.Linear,h=!!t.yoyo;e=void 0===t.duration?.3:0===t.duration?.001:t.duration,this.node=n,this._id=Vt++;var l=n.getLayer()||(n instanceof i.Stage?n.getLayers():null);for(r in l||g.error("Tween constructor have `node` that is not in a layer. Please add node into layer first."),this.anim=new jt((function(){a.tween.onEnterFrame()}),l),this.tween=new Qt(r,(function(t){a._tweenFunc(t)}),o,0,1,1e3*e,h),this._addListeners(),Jt.attrs[s]||(Jt.attrs[s]={}),Jt.attrs[s][this._id]||(Jt.attrs[s][this._id]={}),Jt.tweens[s]||(Jt.tweens[s]={}),t)void 0===Ut[r]&&this._addAttr(r,t[r]);this.reset(),this.onFinish=t.onFinish,this.onReset=t.onReset,this.onUpdate=t.onUpdate}_addAttr(t,e){var i,r,a,n,s,o,h,l,d=this.node,c=d._id;if((a=Jt.tweens[c][t])&&delete Jt.attrs[c][a][t],i=d.getAttr(t),g._isArray(e))if(r=[],s=Math.max(e.length,i.length),"points"===t&&e.length!==i.length&&(e.length>i.length?(h=i,i=g._prepareArrayForTween(i,e,d.closed())):(o=e,e=g._prepareArrayForTween(e,i,d.closed()))),0===t.indexOf("fill"))for(n=0;n<s;n++)if(n%2==0)r.push(e[n]-i[n]);else{var u=g.colorToRGBA(i[n]);l=g.colorToRGBA(e[n]),i[n]=u,r.push({r:l.r-u.r,g:l.g-u.g,b:l.b-u.b,a:l.a-u.a})}else for(n=0;n<s;n++)r.push(e[n]-i[n]);else-1!==Kt.indexOf(t)?(i=g.colorToRGBA(i),r={r:(l=g.colorToRGBA(e)).r-i.r,g:l.g-i.g,b:l.b-i.b,a:l.a-i.a}):r=e-i;Jt.attrs[c][this._id][t]={start:i,diff:r,end:e,trueEnd:o,trueStart:h},Jt.tweens[c][t]=this._id}_tweenFunc(t){var e,i,r,a,n,s,o,h,l=this.node,d=Jt.attrs[l._id][this._id];for(e in d){if(r=(i=d[e]).start,a=i.diff,h=i.end,g._isArray(r))if(n=[],o=Math.max(r.length,h.length),0===e.indexOf("fill"))for(s=0;s<o;s++)s%2==0?n.push((r[s]||0)+a[s]*t):n.push("rgba("+Math.round(r[s].r+a[s].r*t)+","+Math.round(r[s].g+a[s].g*t)+","+Math.round(r[s].b+a[s].b*t)+","+(r[s].a+a[s].a*t)+")");else for(s=0;s<o;s++)n.push((r[s]||0)+a[s]*t);else n=-1!==Kt.indexOf(e)?"rgba("+Math.round(r.r+a.r*t)+","+Math.round(r.g+a.g*t)+","+Math.round(r.b+a.b*t)+","+(r.a+a.a*t)+")":r+a*t;l.setAttr(e,n)}}_addListeners(){this.tween.onPlay=()=>{this.anim.start()},this.tween.onReverse=()=>{this.anim.start()},this.tween.onPause=()=>{this.anim.stop()},this.tween.onFinish=()=>{var t=this.node,e=Jt.attrs[t._id][this._id];e.points&&e.points.trueEnd&&t.setAttr("points",e.points.trueEnd),this.onFinish&&this.onFinish.call(this)},this.tween.onReset=()=>{var t=this.node,e=Jt.attrs[t._id][this._id];e.points&&e.points.trueStart&&t.points(e.points.trueStart),this.onReset&&this.onReset()},this.tween.onUpdate=()=>{this.onUpdate&&this.onUpdate.call(this)}}play(){return this.tween.play(),this}reverse(){return this.tween.reverse(),this}reset(){return this.tween.reset(),this}seek(t){return this.tween.seek(1e3*t),this}pause(){return this.tween.pause(),this}finish(){return this.tween.finish(),this}destroy(){var t,e=this.node._id,i=this._id,r=Jt.tweens[e];for(t in this.pause(),r)delete Jt.tweens[e][t];delete Jt.attrs[e][i]}}Jt.attrs={},Jt.tweens={},V.prototype.to=function(t){var e=t.onFinish;t.node=this,t.onFinish=function(){this.destroy(),e&&e()},new Jt(t).play()};const $t={BackEaseIn(t,e,i,r){var a=1.70158;return i*(t/=r)*t*((a+1)*t-a)+e},BackEaseOut(t,e,i,r){var a=1.70158;return i*((t=t/r-1)*t*((a+1)*t+a)+1)+e},BackEaseInOut(t,e,i,r){var a=1.70158;return(t/=r/2)<1?i/2*(t*t*((1+(a*=1.525))*t-a))+e:i/2*((t-=2)*t*((1+(a*=1.525))*t+a)+2)+e},ElasticEaseIn(t,e,i,r,a,n){var s=0;return 0===t?e:1==(t/=r)?e+i:(n||(n=.3*r),!a||a<Math.abs(i)?(a=i,s=n/4):s=n/(2*Math.PI)*Math.asin(i/a),-a*Math.pow(2,10*(t-=1))*Math.sin((t*r-s)*(2*Math.PI)/n)+e)},ElasticEaseOut(t,e,i,r,a,n){var s=0;return 0===t?e:1==(t/=r)?e+i:(n||(n=.3*r),!a||a<Math.abs(i)?(a=i,s=n/4):s=n/(2*Math.PI)*Math.asin(i/a),a*Math.pow(2,-10*t)*Math.sin((t*r-s)*(2*Math.PI)/n)+i+e)},ElasticEaseInOut(t,e,i,r,a,n){var s=0;return 0===t?e:2==(t/=r/2)?e+i:(n||(n=r*(.3*1.5)),!a||a<Math.abs(i)?(a=i,s=n/4):s=n/(2*Math.PI)*Math.asin(i/a),t<1?a*Math.pow(2,10*(t-=1))*Math.sin((t*r-s)*(2*Math.PI)/n)*-.5+e:a*Math.pow(2,-10*(t-=1))*Math.sin((t*r-s)*(2*Math.PI)/n)*.5+i+e)},BounceEaseOut:(t,e,i,r)=>(t/=r)<1/2.75?i*(7.5625*t*t)+e:t<2/2.75?i*(7.5625*(t-=1.5/2.75)*t+.75)+e:t<2.5/2.75?i*(7.5625*(t-=2.25/2.75)*t+.9375)+e:i*(7.5625*(t-=2.625/2.75)*t+.984375)+e,BounceEaseIn:(t,e,i,r)=>i-$t.BounceEaseOut(r-t,0,i,r)+e,BounceEaseInOut:(t,e,i,r)=>t<r/2?.5*$t.BounceEaseIn(2*t,0,i,r)+e:.5*$t.BounceEaseOut(2*t-r,0,i,r)+.5*i+e,EaseIn:(t,e,i,r)=>i*(t/=r)*t+e,EaseOut:(t,e,i,r)=>-i*(t/=r)*(t-2)+e,EaseInOut:(t,e,i,r)=>(t/=r/2)<1?i/2*t*t+e:-i/2*(--t*(t-2)-1)+e,StrongEaseIn:(t,e,i,r)=>i*(t/=r)*t*t*t*t+e,StrongEaseOut:(t,e,i,r)=>i*((t=t/r-1)*t*t*t*t+1)+e,StrongEaseInOut:(t,e,i,r)=>(t/=r/2)<1?i/2*t*t*t*t*t+e:i/2*((t-=2)*t*t*t*t+2)+e,Linear:(t,e,i,r)=>i*t/r+e},Zt=g._assign(i,{Util:g,Transform:a,Node:V,Container:Q,Stage:Gt,stages:Mt,Layer:zt,FastLayer:Yt,Group:Xt,DD:E,Shape:Nt,shapes:Bt,Animation:jt,Tween:Jt,Easings:$t,Context:P,Canvas:M});class te extends Nt{_sceneFunc(t){var e=i.getAngle(this.angle()),r=this.clockwise();t.beginPath(),t.arc(0,0,this.outerRadius(),0,e,r),t.arc(0,0,this.innerRadius(),e,0,!r),t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*this.outerRadius()}getHeight(){return 2*this.outerRadius()}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}getSelfRect(){const t=this.innerRadius(),e=this.outerRadius(),r=this.clockwise(),a=i.getAngle(r?360-this.angle():this.angle()),n=Math.cos(Math.min(a,Math.PI)),s=Math.sin(Math.min(Math.max(Math.PI,a),3*Math.PI/2)),o=Math.sin(Math.min(a,Math.PI/2)),h=n*(n>0?t:e),l=s*(s>0?t:e),d=o*(o>0?e:t);return{x:h,y:r?-1*d:l,width:1*e-h,height:d-l}}}function ee(t,e,i,r,a,n,s){var o=Math.sqrt(Math.pow(i-t,2)+Math.pow(r-e,2)),h=Math.sqrt(Math.pow(a-i,2)+Math.pow(n-r,2)),l=s*o/(o+h),d=s*h/(o+h);return[i-l*(a-t),r-l*(n-e),i+d*(a-t),r+d*(n-e)]}function ie(t,e){var i,r,a=t.length,n=[];for(i=2;i<a-2;i+=2)r=ee(t[i-2],t[i-1],t[i],t[i+1],t[i+2],t[i+3],e),isNaN(r[0])||(n.push(r[0]),n.push(r[1]),n.push(t[i]),n.push(t[i+1]),n.push(r[2]),n.push(r[3]));return n}te.prototype._centroid=!0,te.prototype.className="Arc",te.prototype._attrsAffectingSize=["innerRadius","outerRadius"],r(te),w.addGetterSetter(te,"innerRadius",0,p()),w.addGetterSetter(te,"outerRadius",0,p()),w.addGetterSetter(te,"angle",0,p()),w.addGetterSetter(te,"clockwise",!1,x());class re extends Nt{constructor(t){super(t),this.on("pointsChange.konva tensionChange.konva closedChange.konva bezierChange.konva",(function(){this._clearCache("tensionPoints")}))}_sceneFunc(t){var e,i,r,a=this.points(),n=a.length,s=this.tension(),o=this.closed(),h=this.bezier();if(n){if(t.beginPath(),t.moveTo(a[0],a[1]),0!==s&&n>4){for(i=(e=this.getTensionPoints()).length,r=o?0:4,o||t.quadraticCurveTo(e[0],e[1],e[2],e[3]);r<i-2;)t.bezierCurveTo(e[r++],e[r++],e[r++],e[r++],e[r++],e[r++]);o||t.quadraticCurveTo(e[i-2],e[i-1],a[n-2],a[n-1])}else if(h)for(r=2;r<n;)t.bezierCurveTo(a[r++],a[r++],a[r++],a[r++],a[r++],a[r++]);else for(r=2;r<n;r+=2)t.lineTo(a[r],a[r+1]);o?(t.closePath(),t.fillStrokeShape(this)):t.strokeShape(this)}}getTensionPoints(){return this._getCache("tensionPoints",this._getTensionPoints)}_getTensionPoints(){return this.closed()?this._getTensionPointsClosed():ie(this.points(),this.tension())}_getTensionPointsClosed(){var t=this.points(),e=t.length,i=this.tension(),r=ee(t[e-2],t[e-1],t[0],t[1],t[2],t[3],i),a=ee(t[e-4],t[e-3],t[e-2],t[e-1],t[0],t[1],i),n=ie(t,i);return[r[2],r[3]].concat(n).concat([a[0],a[1],t[e-2],t[e-1],a[2],a[3],r[0],r[1],t[0],t[1]])}getWidth(){return this.getSelfRect().width}getHeight(){return this.getSelfRect().height}getSelfRect(){var t=this.points();if(t.length<4)return{x:t[0]||0,y:t[1]||0,width:0,height:0};for(var e,i,r=(t=0!==this.tension()?[t[0],t[1],...this._getTensionPoints(),t[t.length-2],t[t.length-1]]:this.points())[0],a=t[0],n=t[1],s=t[1],o=0;o<t.length/2;o++)e=t[2*o],i=t[2*o+1],r=Math.min(r,e),a=Math.max(a,e),n=Math.min(n,i),s=Math.max(s,i);return{x:r,y:n,width:a-r,height:s-n}}}re.prototype.className="Line",re.prototype._attrsAffectingSize=["points","bezier","tension"],r(re),w.addGetterSetter(re,"closed",!1),w.addGetterSetter(re,"bezier",!1),w.addGetterSetter(re,"tension",0,p()),w.addGetterSetter(re,"points",[],function(){if(i.isUnminified)return function(t,e){const i=Int8Array?Object.getPrototypeOf(Int8Array):null;return i&&t instanceof i||(g._isArray(t)?t.forEach((function(t){g._isNumber(t)||g.warn('"'+e+'" attribute has non numeric element '+t+". Make sure that all elements are numbers.")})):g.warn(u(t)+' is a not valid value for "'+e+'" attribute. The value should be a array of numbers.')),t}}());const ae=[[],[],[-.5773502691896257,.5773502691896257],[0,-.7745966692414834,.7745966692414834],[-.33998104358485626,.33998104358485626,-.8611363115940526,.8611363115940526],[0,-.5384693101056831,.5384693101056831,-.906179845938664,.906179845938664],[.6612093864662645,-.6612093864662645,-.2386191860831969,.2386191860831969,-.932469514203152,.932469514203152],[0,.4058451513773972,-.4058451513773972,-.7415311855993945,.7415311855993945,-.9491079123427585,.9491079123427585],[-.1834346424956498,.1834346424956498,-.525532409916329,.525532409916329,-.7966664774136267,.7966664774136267,-.9602898564975363,.9602898564975363],[0,-.8360311073266358,.8360311073266358,-.9681602395076261,.9681602395076261,-.3242534234038089,.3242534234038089,-.6133714327005904,.6133714327005904],[-.14887433898163122,.14887433898163122,-.4333953941292472,.4333953941292472,-.6794095682990244,.6794095682990244,-.8650633666889845,.8650633666889845,-.9739065285171717,.9739065285171717],[0,-.26954315595234496,.26954315595234496,-.5190961292068118,.5190961292068118,-.7301520055740494,.7301520055740494,-.8870625997680953,.8870625997680953,-.978228658146057,.978228658146057],[-.1252334085114689,.1252334085114689,-.3678314989981802,.3678314989981802,-.5873179542866175,.5873179542866175,-.7699026741943047,.7699026741943047,-.9041172563704749,.9041172563704749,-.9815606342467192,.9815606342467192],[0,-.2304583159551348,.2304583159551348,-.44849275103644687,.44849275103644687,-.6423493394403402,.6423493394403402,-.8015780907333099,.8015780907333099,-.9175983992229779,.9175983992229779,-.9841830547185881,.9841830547185881],[-.10805494870734367,.10805494870734367,-.31911236892788974,.31911236892788974,-.5152486363581541,.5152486363581541,-.6872929048116855,.6872929048116855,-.827201315069765,.827201315069765,-.9284348836635735,.9284348836635735,-.9862838086968123,.9862838086968123],[0,-.20119409399743451,.20119409399743451,-.3941513470775634,.3941513470775634,-.5709721726085388,.5709721726085388,-.7244177313601701,.7244177313601701,-.8482065834104272,.8482065834104272,-.937273392400706,.937273392400706,-.9879925180204854,.9879925180204854],[-.09501250983763744,.09501250983763744,-.2816035507792589,.2816035507792589,-.45801677765722737,.45801677765722737,-.6178762444026438,.6178762444026438,-.755404408355003,.755404408355003,-.8656312023878318,.8656312023878318,-.9445750230732326,.9445750230732326,-.9894009349916499,.9894009349916499],[0,-.17848418149584785,.17848418149584785,-.3512317634538763,.3512317634538763,-.5126905370864769,.5126905370864769,-.6576711592166907,.6576711592166907,-.7815140038968014,.7815140038968014,-.8802391537269859,.8802391537269859,-.9506755217687678,.9506755217687678,-.9905754753144174,.9905754753144174],[-.0847750130417353,.0847750130417353,-.2518862256915055,.2518862256915055,-.41175116146284263,.41175116146284263,-.5597708310739475,.5597708310739475,-.6916870430603532,.6916870430603532,-.8037049589725231,.8037049589725231,-.8926024664975557,.8926024664975557,-.9558239495713977,.9558239495713977,-.9915651684209309,.9915651684209309],[0,-.16035864564022537,.16035864564022537,-.31656409996362983,.31656409996362983,-.46457074137596094,.46457074137596094,-.600545304661681,.600545304661681,-.7209661773352294,.7209661773352294,-.8227146565371428,.8227146565371428,-.9031559036148179,.9031559036148179,-.96020815213483,.96020815213483,-.9924068438435844,.9924068438435844],[-.07652652113349734,.07652652113349734,-.22778585114164507,.22778585114164507,-.37370608871541955,.37370608871541955,-.5108670019508271,.5108670019508271,-.636053680726515,.636053680726515,-.7463319064601508,.7463319064601508,-.8391169718222188,.8391169718222188,-.912234428251326,.912234428251326,-.9639719272779138,.9639719272779138,-.9931285991850949,.9931285991850949],[0,-.1455618541608951,.1455618541608951,-.2880213168024011,.2880213168024011,-.4243421202074388,.4243421202074388,-.5516188358872198,.5516188358872198,-.6671388041974123,.6671388041974123,-.7684399634756779,.7684399634756779,-.8533633645833173,.8533633645833173,-.9200993341504008,.9200993341504008,-.9672268385663063,.9672268385663063,-.9937521706203895,.9937521706203895],[-.06973927331972223,.06973927331972223,-.20786042668822127,.20786042668822127,-.34193582089208424,.34193582089208424,-.469355837986757,.469355837986757,-.5876404035069116,.5876404035069116,-.6944872631866827,.6944872631866827,-.7878168059792081,.7878168059792081,-.8658125777203002,.8658125777203002,-.926956772187174,.926956772187174,-.9700604978354287,.9700604978354287,-.9942945854823992,.9942945854823992],[0,-.1332568242984661,.1332568242984661,-.26413568097034495,.26413568097034495,-.3903010380302908,.3903010380302908,-.5095014778460075,.5095014778460075,-.6196098757636461,.6196098757636461,-.7186613631319502,.7186613631319502,-.8048884016188399,.8048884016188399,-.8767523582704416,.8767523582704416,-.9329710868260161,.9329710868260161,-.9725424712181152,.9725424712181152,-.9947693349975522,.9947693349975522],[-.06405689286260563,.06405689286260563,-.1911188674736163,.1911188674736163,-.3150426796961634,.3150426796961634,-.4337935076260451,.4337935076260451,-.5454214713888396,.5454214713888396,-.6480936519369755,.6480936519369755,-.7401241915785544,.7401241915785544,-.820001985973903,.820001985973903,-.8864155270044011,.8864155270044011,-.9382745520027328,.9382745520027328,-.9747285559713095,.9747285559713095,-.9951872199970213,.9951872199970213]],ne=[[],[],[1,1],[.8888888888888888,.5555555555555556,.5555555555555556],[.6521451548625461,.6521451548625461,.34785484513745385,.34785484513745385],[.5688888888888889,.47862867049936647,.47862867049936647,.23692688505618908,.23692688505618908],[.3607615730481386,.3607615730481386,.46791393457269104,.46791393457269104,.17132449237917036,.17132449237917036],[.4179591836734694,.3818300505051189,.3818300505051189,.27970539148927664,.27970539148927664,.1294849661688697,.1294849661688697],[.362683783378362,.362683783378362,.31370664587788727,.31370664587788727,.22238103445337448,.22238103445337448,.10122853629037626,.10122853629037626],[.3302393550012598,.1806481606948574,.1806481606948574,.08127438836157441,.08127438836157441,.31234707704000286,.31234707704000286,.26061069640293544,.26061069640293544],[.29552422471475287,.29552422471475287,.26926671930999635,.26926671930999635,.21908636251598204,.21908636251598204,.1494513491505806,.1494513491505806,.06667134430868814,.06667134430868814],[.2729250867779006,.26280454451024665,.26280454451024665,.23319376459199048,.23319376459199048,.18629021092773426,.18629021092773426,.1255803694649046,.1255803694649046,.05566856711617366,.05566856711617366],[.24914704581340277,.24914704581340277,.2334925365383548,.2334925365383548,.20316742672306592,.20316742672306592,.16007832854334622,.16007832854334622,.10693932599531843,.10693932599531843,.04717533638651183,.04717533638651183],[.2325515532308739,.22628318026289723,.22628318026289723,.2078160475368885,.2078160475368885,.17814598076194574,.17814598076194574,.13887351021978725,.13887351021978725,.09212149983772845,.09212149983772845,.04048400476531588,.04048400476531588],[.2152638534631578,.2152638534631578,.2051984637212956,.2051984637212956,.18553839747793782,.18553839747793782,.15720316715819355,.15720316715819355,.12151857068790319,.12151857068790319,.08015808715976021,.08015808715976021,.03511946033175186,.03511946033175186],[.2025782419255613,.19843148532711158,.19843148532711158,.1861610000155622,.1861610000155622,.16626920581699392,.16626920581699392,.13957067792615432,.13957067792615432,.10715922046717194,.10715922046717194,.07036604748810812,.07036604748810812,.03075324199611727,.03075324199611727],[.1894506104550685,.1894506104550685,.18260341504492358,.18260341504492358,.16915651939500254,.16915651939500254,.14959598881657674,.14959598881657674,.12462897125553388,.12462897125553388,.09515851168249279,.09515851168249279,.062253523938647894,.062253523938647894,.027152459411754096,.027152459411754096],[.17944647035620653,.17656270536699264,.17656270536699264,.16800410215645004,.16800410215645004,.15404576107681028,.15404576107681028,.13513636846852548,.13513636846852548,.11188384719340397,.11188384719340397,.08503614831717918,.08503614831717918,.0554595293739872,.0554595293739872,.02414830286854793,.02414830286854793],[.1691423829631436,.1691423829631436,.16427648374583273,.16427648374583273,.15468467512626524,.15468467512626524,.14064291467065065,.14064291467065065,.12255520671147846,.12255520671147846,.10094204410628717,.10094204410628717,.07642573025488905,.07642573025488905,.0497145488949698,.0497145488949698,.02161601352648331,.02161601352648331],[.1610544498487837,.15896884339395434,.15896884339395434,.15276604206585967,.15276604206585967,.1426067021736066,.1426067021736066,.12875396253933621,.12875396253933621,.11156664554733399,.11156664554733399,.09149002162245,.09149002162245,.06904454273764123,.06904454273764123,.0448142267656996,.0448142267656996,.019461788229726478,.019461788229726478],[.15275338713072584,.15275338713072584,.14917298647260374,.14917298647260374,.14209610931838204,.14209610931838204,.13168863844917664,.13168863844917664,.11819453196151841,.11819453196151841,.10193011981724044,.10193011981724044,.08327674157670475,.08327674157670475,.06267204833410907,.06267204833410907,.04060142980038694,.04060142980038694,.017614007139152118,.017614007139152118],[.14608113364969041,.14452440398997005,.14452440398997005,.13988739479107315,.13988739479107315,.13226893863333747,.13226893863333747,.12183141605372853,.12183141605372853,.10879729916714838,.10879729916714838,.09344442345603386,.09344442345603386,.0761001136283793,.0761001136283793,.057134425426857205,.057134425426857205,.036953789770852494,.036953789770852494,.016017228257774335,.016017228257774335],[.13925187285563198,.13925187285563198,.13654149834601517,.13654149834601517,.13117350478706238,.13117350478706238,.12325237681051242,.12325237681051242,.11293229608053922,.11293229608053922,.10041414444288096,.10041414444288096,.08594160621706773,.08594160621706773,.06979646842452049,.06979646842452049,.052293335152683286,.052293335152683286,.03377490158481415,.03377490158481415,.0146279952982722,.0146279952982722],[.13365457218610619,.1324620394046966,.1324620394046966,.12890572218808216,.12890572218808216,.12304908430672953,.12304908430672953,.11499664022241136,.11499664022241136,.10489209146454141,.10489209146454141,.09291576606003515,.09291576606003515,.07928141177671895,.07928141177671895,.06423242140852585,.06423242140852585,.04803767173108467,.04803767173108467,.030988005856979445,.030988005856979445,.013411859487141771,.013411859487141771],[.12793819534675216,.12793819534675216,.1258374563468283,.1258374563468283,.12167047292780339,.12167047292780339,.1155056680537256,.1155056680537256,.10744427011596563,.10744427011596563,.09761865210411388,.09761865210411388,.08619016153195327,.08619016153195327,.0733464814110803,.0733464814110803,.05929858491543678,.05929858491543678,.04427743881741981,.04427743881741981,.028531388628933663,.028531388628933663,.0123412297999872,.0123412297999872]],se=[[1],[1,1],[1,2,1],[1,3,3,1]],oe=(t,e,i)=>{let r,a,n;r=i/2,a=0;for(let i=0;i<20;i++)n=r*ae[20][i]+r,a+=ne[20][i]*le(t,e,n);return r*a},he=(t,e,i)=>{void 0===i&&(i=1);const r=t[0]-2*t[1]+t[2],a=e[0]-2*e[1]+e[2],n=2*t[1]-2*t[0],s=2*e[1]-2*e[0],o=4*(r*r+a*a),h=4*(r*n+a*s),l=n*n+s*s;if(0===o)return i*Math.sqrt(Math.pow(t[2]-t[0],2)+Math.pow(e[2]-e[0],2));const d=h/(2*o),c=i+d,g=l/o-d*d,u=c*c+g>0?Math.sqrt(c*c+g):0,f=d*d+g>0?Math.sqrt(d*d+g):0,p=d+Math.sqrt(d*d+g)!==0?g*Math.log(Math.abs((c+u)/(d+f))):0;return Math.sqrt(o)/2*(c*u-d*f+p)};function le(t,e,i){const r=de(1,i,t),a=de(1,i,e),n=r*r+a*a;return Math.sqrt(n)}const de=(t,e,i)=>{const r=i.length-1;let a,n;if(0===r)return 0;if(0===t){n=0;for(let t=0;t<=r;t++)n+=se[r][t]*Math.pow(1-e,r-t)*Math.pow(e,t)*i[t];return n}a=new Array(r);for(let t=0;t<r;t++)a[t]=r*(i[t+1]-i[t]);return de(t-1,e,a)},ce=(t,e,i)=>{let r=1,a=t/e,n=(t-i(a))/e,s=0;for(;r>.001;){const o=i(a+n),h=Math.abs(t-o)/e;if(h<r)r=h,a+=n;else{const s=i(a-n),o=Math.abs(t-s)/e;o<r?(r=o,a-=n):n/=2}if(s++,s>500)break}return a};class ge extends Nt{constructor(t){super(t),this.dataArray=[],this.pathLength=0,this._readDataAttribute(),this.on("dataChange.konva",(function(){this._readDataAttribute()}))}_readDataAttribute(){this.dataArray=ge.parsePathData(this.data()),this.pathLength=ge.getPathLength(this.dataArray)}_sceneFunc(t){var e=this.dataArray;t.beginPath();for(var i=!1,r=0;r<e.length;r++){var a=e[r].command,n=e[r].points;switch(a){case"L":t.lineTo(n[0],n[1]);break;case"M":t.moveTo(n[0],n[1]);break;case"C":t.bezierCurveTo(n[0],n[1],n[2],n[3],n[4],n[5]);break;case"Q":t.quadraticCurveTo(n[0],n[1],n[2],n[3]);break;case"A":var s=n[0],o=n[1],h=n[2],l=n[3],d=n[4],c=n[5],g=n[6],u=n[7],f=h>l?h:l,p=h>l?1:h/l,v=h>l?l/h:1;t.translate(s,o),t.rotate(g),t.scale(p,v),t.arc(0,0,f,d,d+c,1-u),t.scale(1/p,1/v),t.rotate(-g),t.translate(-s,-o);break;case"z":i=!0,t.closePath()}}i||this.hasFill()?t.fillStrokeShape(this):t.strokeShape(this)}getSelfRect(){var t=[];this.dataArray.forEach((function(e){if("A"===e.command){var i=e.points[4],r=e.points[5],a=e.points[4]+r,n=Math.PI/180;if(Math.abs(i-a)<n&&(n=Math.abs(i-a)),r<0)for(let r=i-n;r>a;r-=n){const i=ge.getPointOnEllipticalArc(e.points[0],e.points[1],e.points[2],e.points[3],r,0);t.push(i.x,i.y)}else for(let r=i+n;r<a;r+=n){const i=ge.getPointOnEllipticalArc(e.points[0],e.points[1],e.points[2],e.points[3],r,0);t.push(i.x,i.y)}}else if("C"===e.command)for(let i=0;i<=1;i+=.01){const r=ge.getPointOnCubicBezier(i,e.start.x,e.start.y,e.points[0],e.points[1],e.points[2],e.points[3],e.points[4],e.points[5]);t.push(r.x,r.y)}else t=t.concat(e.points)}));for(var e,i,r=t[0],a=t[0],n=t[1],s=t[1],o=0;o<t.length/2;o++)e=t[2*o],i=t[2*o+1],isNaN(e)||(r=Math.min(r,e),a=Math.max(a,e)),isNaN(i)||(n=Math.min(n,i),s=Math.max(s,i));return{x:r,y:n,width:a-r,height:s-n}}getLength(){return this.pathLength}getPointAtLength(t){return ge.getPointAtLengthOfDataArray(t,this.dataArray)}static getLineLength(t,e,i,r){return Math.sqrt((i-t)*(i-t)+(r-e)*(r-e))}static getPathLength(t){let e=0;for(var i=0;i<t.length;++i)e+=t[i].pathLength;return e}static getPointAtLengthOfDataArray(t,e){var i,r=0,a=e.length;if(!a)return null;for(;r<a&&t>e[r].pathLength;)t-=e[r].pathLength,++r;if(r===a)return{x:(i=e[r-1].points.slice(-2))[0],y:i[1]};if(t<.01)return{x:(i=e[r].points.slice(0,2))[0],y:i[1]};var n=e[r],s=n.points;switch(n.command){case"L":return ge.getPointOnLine(t,n.start.x,n.start.y,s[0],s[1]);case"C":return ge.getPointOnCubicBezier(ce(t,ge.getPathLength(e),(t=>oe([n.start.x,s[0],s[2],s[4]],[n.start.y,s[1],s[3],s[5]],t))),n.start.x,n.start.y,s[0],s[1],s[2],s[3],s[4],s[5]);case"Q":return ge.getPointOnQuadraticBezier(ce(t,ge.getPathLength(e),(t=>he([n.start.x,s[0],s[2]],[n.start.y,s[1],s[3]],t))),n.start.x,n.start.y,s[0],s[1],s[2],s[3]);case"A":var o=s[0],h=s[1],l=s[2],d=s[3],c=s[4],g=s[5],u=s[6];return c+=g*t/n.pathLength,ge.getPointOnEllipticalArc(o,h,l,d,c,u)}return null}static getPointOnLine(t,e,i,r,a,n,s){n=null!=n?n:e,s=null!=s?s:i;const o=this.getLineLength(e,i,r,a);if(o<1e-10)return{x:e,y:i};if(r===e)return{x:n,y:s+(a>i?t:-t)};const h=(a-i)/(r-e),l=Math.sqrt(t*t/(1+h*h))*(r<e?-1:1),d=h*l;if(Math.abs(s-i-h*(n-e))<1e-10)return{x:n+l,y:s+d};const c=((n-e)*(r-e)+(s-i)*(a-i))/(o*o),g=e+c*(r-e),u=i+c*(a-i),f=this.getLineLength(n,s,g,u),p=Math.sqrt(t*t-f*f),v=Math.sqrt(p*p/(1+h*h))*(r<e?-1:1);return{x:g+v,y:u+h*v}}static getPointOnCubicBezier(t,e,i,r,a,n,s,o,h){function l(t){return t*t*t}function d(t){return 3*t*t*(1-t)}function c(t){return 3*t*(1-t)*(1-t)}function g(t){return(1-t)*(1-t)*(1-t)}return{x:o*l(t)+n*d(t)+r*c(t)+e*g(t),y:h*l(t)+s*d(t)+a*c(t)+i*g(t)}}static getPointOnQuadraticBezier(t,e,i,r,a,n,s){function o(t){return t*t}function h(t){return 2*t*(1-t)}function l(t){return(1-t)*(1-t)}return{x:n*o(t)+r*h(t)+e*l(t),y:s*o(t)+a*h(t)+i*l(t)}}static getPointOnEllipticalArc(t,e,i,r,a,n){var s=Math.cos(n),o=Math.sin(n),h=i*Math.cos(a),l=r*Math.sin(a);return{x:t+(h*s-l*o),y:e+(h*o+l*s)}}static parsePathData(t){if(!t)return[];var e=t,i=["m","M","l","L","v","V","h","H","z","Z","c","C","q","Q","t","T","s","S","a","A"];e=e.replace(new RegExp(" ","g"),",");for(var r=0;r<i.length;r++)e=e.replace(new RegExp(i[r],"g"),"|"+i[r]);var a,n=e.split("|"),s=[],o=[],h=0,l=0,d=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi;for(r=1;r<n.length;r++){var c=n[r],g=c.charAt(0);for(c=c.slice(1),o.length=0;a=d.exec(c);)o.push(a[0]);for(var u=[],f=0,p=o.length;f<p;f++)if("00"!==o[f]){var v=parseFloat(o[f]);isNaN(v)?u.push(0):u.push(v)}else u.push(0,0);for(;u.length>0&&!isNaN(u[0]);){var m,_,y,x,b,S,w,C,P,k,A="",T=[],M=h,G=l;switch(g){case"l":h+=u.shift(),l+=u.shift(),A="L",T.push(h,l);break;case"L":h=u.shift(),l=u.shift(),T.push(h,l);break;case"m":var R=u.shift(),E=u.shift();if(h+=R,l+=E,A="M",s.length>2&&"z"===s[s.length-1].command)for(var D=s.length-2;D>=0;D--)if("M"===s[D].command){h=s[D].points[0]+R,l=s[D].points[1]+E;break}T.push(h,l),g="l";break;case"M":h=u.shift(),l=u.shift(),A="M",T.push(h,l),g="L";break;case"h":h+=u.shift(),A="L",T.push(h,l);break;case"H":h=u.shift(),A="L",T.push(h,l);break;case"v":l+=u.shift(),A="L",T.push(h,l);break;case"V":l=u.shift(),A="L",T.push(h,l);break;case"C":T.push(u.shift(),u.shift(),u.shift(),u.shift()),h=u.shift(),l=u.shift(),T.push(h,l);break;case"c":T.push(h+u.shift(),l+u.shift(),h+u.shift(),l+u.shift()),h+=u.shift(),l+=u.shift(),A="C",T.push(h,l);break;case"S":_=h,y=l,"C"===(m=s[s.length-1]).command&&(_=h+(h-m.points[2]),y=l+(l-m.points[3])),T.push(_,y,u.shift(),u.shift()),h=u.shift(),l=u.shift(),A="C",T.push(h,l);break;case"s":_=h,y=l,"C"===(m=s[s.length-1]).command&&(_=h+(h-m.points[2]),y=l+(l-m.points[3])),T.push(_,y,h+u.shift(),l+u.shift()),h+=u.shift(),l+=u.shift(),A="C",T.push(h,l);break;case"Q":T.push(u.shift(),u.shift()),h=u.shift(),l=u.shift(),T.push(h,l);break;case"q":T.push(h+u.shift(),l+u.shift()),h+=u.shift(),l+=u.shift(),A="Q",T.push(h,l);break;case"T":_=h,y=l,"Q"===(m=s[s.length-1]).command&&(_=h+(h-m.points[0]),y=l+(l-m.points[1])),h=u.shift(),l=u.shift(),A="Q",T.push(_,y,h,l);break;case"t":_=h,y=l,"Q"===(m=s[s.length-1]).command&&(_=h+(h-m.points[0]),y=l+(l-m.points[1])),h+=u.shift(),l+=u.shift(),A="Q",T.push(_,y,h,l);break;case"A":x=u.shift(),b=u.shift(),S=u.shift(),w=u.shift(),C=u.shift(),P=h,k=l,h=u.shift(),l=u.shift(),A="A",T=this.convertEndpointToCenterParameterization(P,k,h,l,w,C,x,b,S);break;case"a":x=u.shift(),b=u.shift(),S=u.shift(),w=u.shift(),C=u.shift(),P=h,k=l,h+=u.shift(),l+=u.shift(),A="A",T=this.convertEndpointToCenterParameterization(P,k,h,l,w,C,x,b,S)}s.push({command:A||g,points:T,start:{x:M,y:G},pathLength:this.calcLength(M,G,A||g,T)})}"z"!==g&&"Z"!==g||s.push({command:"z",points:[],start:void 0,pathLength:0})}return s}static calcLength(t,e,i,r){var a,n,s,o,h=ge;switch(i){case"L":return h.getLineLength(t,e,r[0],r[1]);case"C":return oe([t,r[0],r[2],r[4]],[e,r[1],r[3],r[5]],1);case"Q":return he([t,r[0],r[2]],[e,r[1],r[3]],1);case"A":a=0;var l=r[4],d=r[5],c=r[4]+d,g=Math.PI/180;if(Math.abs(l-c)<g&&(g=Math.abs(l-c)),n=h.getPointOnEllipticalArc(r[0],r[1],r[2],r[3],l,0),d<0)for(o=l-g;o>c;o-=g)s=h.getPointOnEllipticalArc(r[0],r[1],r[2],r[3],o,0),a+=h.getLineLength(n.x,n.y,s.x,s.y),n=s;else for(o=l+g;o<c;o+=g)s=h.getPointOnEllipticalArc(r[0],r[1],r[2],r[3],o,0),a+=h.getLineLength(n.x,n.y,s.x,s.y),n=s;return s=h.getPointOnEllipticalArc(r[0],r[1],r[2],r[3],c,0),a+=h.getLineLength(n.x,n.y,s.x,s.y)}return 0}static convertEndpointToCenterParameterization(t,e,i,r,a,n,s,o,h){var l=h*(Math.PI/180),d=Math.cos(l)*(t-i)/2+Math.sin(l)*(e-r)/2,c=-1*Math.sin(l)*(t-i)/2+Math.cos(l)*(e-r)/2,g=d*d/(s*s)+c*c/(o*o);g>1&&(s*=Math.sqrt(g),o*=Math.sqrt(g));var u=Math.sqrt((s*s*(o*o)-s*s*(c*c)-o*o*(d*d))/(s*s*(c*c)+o*o*(d*d)));a===n&&(u*=-1),isNaN(u)&&(u=0);var f=u*s*c/o,p=u*-o*d/s,v=(t+i)/2+Math.cos(l)*f-Math.sin(l)*p,m=(e+r)/2+Math.sin(l)*f+Math.cos(l)*p,_=function(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])},y=function(t,e){return(t[0]*e[0]+t[1]*e[1])/(_(t)*_(e))},x=function(t,e){return(t[0]*e[1]<t[1]*e[0]?-1:1)*Math.acos(y(t,e))},b=x([1,0],[(d-f)/s,(c-p)/o]),S=[(d-f)/s,(c-p)/o],w=[(-1*d-f)/s,(-1*c-p)/o],C=x(S,w);return y(S,w)<=-1&&(C=Math.PI),y(S,w)>=1&&(C=0),0===n&&C>0&&(C-=2*Math.PI),1===n&&C<0&&(C+=2*Math.PI),[v,m,s,o,b,C,l,n]}}ge.prototype.className="Path",ge.prototype._attrsAffectingSize=["data"],r(ge),w.addGetterSetter(ge,"data");class ue extends re{_sceneFunc(t){super._sceneFunc(t);var e=2*Math.PI,i=this.points(),r=i,a=0!==this.tension()&&i.length>4;a&&(r=this.getTensionPoints());var n,s,o=this.pointerLength(),h=i.length;if(a){const t=[r[r.length-4],r[r.length-3],r[r.length-2],r[r.length-1],i[h-2],i[h-1]],e=ge.calcLength(r[r.length-4],r[r.length-3],"C",t),a=ge.getPointOnQuadraticBezier(Math.min(1,1-o/e),t[0],t[1],t[2],t[3],t[4],t[5]);n=i[h-2]-a.x,s=i[h-1]-a.y}else n=i[h-2]-i[h-4],s=i[h-1]-i[h-3];var l=(Math.atan2(s,n)+e)%e,d=this.pointerWidth();this.pointerAtEnding()&&(t.save(),t.beginPath(),t.translate(i[h-2],i[h-1]),t.rotate(l),t.moveTo(0,0),t.lineTo(-o,d/2),t.lineTo(-o,-d/2),t.closePath(),t.restore(),this.__fillStroke(t)),this.pointerAtBeginning()&&(t.save(),t.beginPath(),t.translate(i[0],i[1]),a?(n=(r[0]+r[2])/2-i[0],s=(r[1]+r[3])/2-i[1]):(n=i[2]-i[0],s=i[3]-i[1]),t.rotate((Math.atan2(-s,-n)+e)%e),t.moveTo(0,0),t.lineTo(-o,d/2),t.lineTo(-o,-d/2),t.closePath(),t.restore(),this.__fillStroke(t))}__fillStroke(t){var e=this.dashEnabled();e&&(this.attrs.dashEnabled=!1,t.setLineDash([])),t.fillStrokeShape(this),e&&(this.attrs.dashEnabled=!0)}getSelfRect(){const t=super.getSelfRect(),e=this.pointerWidth()/2;return{x:t.x-e,y:t.y-e,width:t.width+2*e,height:t.height+2*e}}}ue.prototype.className="Arrow",r(ue),w.addGetterSetter(ue,"pointerLength",10,p()),w.addGetterSetter(ue,"pointerWidth",10,p()),w.addGetterSetter(ue,"pointerAtBeginning",!1),w.addGetterSetter(ue,"pointerAtEnding",!0);class fe extends Nt{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.attrs.radius||0,0,2*Math.PI,!1),t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*this.radius()}getHeight(){return 2*this.radius()}setWidth(t){this.radius()!==t/2&&this.radius(t/2)}setHeight(t){this.radius()!==t/2&&this.radius(t/2)}}fe.prototype._centroid=!0,fe.prototype.className="Circle",fe.prototype._attrsAffectingSize=["radius"],r(fe),w.addGetterSetter(fe,"radius",0,p());class pe extends Nt{_sceneFunc(t){var e=this.radiusX(),i=this.radiusY();t.beginPath(),t.save(),e!==i&&t.scale(1,i/e),t.arc(0,0,e,0,2*Math.PI,!1),t.restore(),t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*this.radiusX()}getHeight(){return 2*this.radiusY()}setWidth(t){this.radiusX(t/2)}setHeight(t){this.radiusY(t/2)}}pe.prototype.className="Ellipse",pe.prototype._centroid=!0,pe.prototype._attrsAffectingSize=["radiusX","radiusY"],r(pe),w.addComponentsGetterSetter(pe,"radius",["x","y"]),w.addGetterSetter(pe,"radiusX",0,p()),w.addGetterSetter(pe,"radiusY",0,p());class ve extends Nt{constructor(t){super(t),this.on("imageChange.konva",(()=>{this._setImageLoad()})),this._setImageLoad()}_setImageLoad(){const t=this.image();t&&t.complete||t&&4===t.readyState||t&&t.addEventListener&&t.addEventListener("load",(()=>{this._requestDraw()}))}_useBufferCanvas(){const t=!!this.cornerRadius(),e=this.hasShadow();return!(!t||!e)||super._useBufferCanvas(!0)}_sceneFunc(t){const e=this.getWidth(),i=this.getHeight(),r=this.cornerRadius(),a=this.attrs.image;let n;if(a){const t=this.attrs.cropWidth,r=this.attrs.cropHeight;n=t&&r?[a,this.cropX(),this.cropY(),t,r,0,0,e,i]:[a,0,0,e,i]}(this.hasFill()||this.hasStroke()||r)&&(t.beginPath(),r?g.drawRoundedRectPath(t,e,i,r):t.rect(0,0,e,i),t.closePath(),t.fillStrokeShape(this)),a&&(r&&t.clip(),t.drawImage.apply(t,n))}_hitFunc(t){var e=this.width(),i=this.height(),r=this.cornerRadius();t.beginPath(),r?g.drawRoundedRectPath(t,e,i,r):t.rect(0,0,e,i),t.closePath(),t.fillStrokeShape(this)}getWidth(){var t,e;return null!==(t=this.attrs.width)&&void 0!==t?t:null===(e=this.image())||void 0===e?void 0:e.width}getHeight(){var t,e;return null!==(t=this.attrs.height)&&void 0!==t?t:null===(e=this.image())||void 0===e?void 0:e.height}static fromURL(t,e,i=null){var r=g.createImageElement();r.onload=function(){var t=new ve({image:r});e(t)},r.onerror=i,r.crossOrigin="Anonymous",r.src=t}}ve.prototype.className="Image",r(ve),w.addGetterSetter(ve,"cornerRadius",0,v(4)),w.addGetterSetter(ve,"image"),w.addComponentsGetterSetter(ve,"crop",["x","y","width","height"]),w.addGetterSetter(ve,"cropX",0,p()),w.addGetterSetter(ve,"cropY",0,p()),w.addGetterSetter(ve,"cropWidth",0,p()),w.addGetterSetter(ve,"cropHeight",0,p());var me=["fontFamily","fontSize","fontStyle","padding","lineHeight","text","width","height","pointerDirection","pointerWidth","pointerHeight"],_e="up",ye="right",xe="down",be="left",Se=me.length;class we extends Xt{constructor(t){super(t),this.on("add.konva",(function(t){this._addListeners(t.child),this._sync()}))}getText(){return this.find("Text")[0]}getTag(){return this.find("Tag")[0]}_addListeners(t){var e,i=this,r=function(){i._sync()};for(e=0;e<Se;e++)t.on(me[e]+"Change.konva",r)}getWidth(){return this.getText().width()}getHeight(){return this.getText().height()}_sync(){var t,e,i,r,a,n,s,o=this.getText(),h=this.getTag();if(o&&h){switch(t=o.width(),e=o.height(),i=h.pointerDirection(),r=h.pointerWidth(),s=h.pointerHeight(),a=0,n=0,i){case _e:a=t/2,n=-1*s;break;case ye:a=t+r,n=e/2;break;case xe:a=t/2,n=e+s;break;case be:a=-1*r,n=e/2}h.setAttrs({x:-1*a,y:-1*n,width:t,height:e}),o.setAttrs({x:-1*a,y:-1*n})}}}we.prototype.className="Label",r(we);class Ce extends Nt{_sceneFunc(t){var e=this.width(),i=this.height(),r=this.pointerDirection(),a=this.pointerWidth(),n=this.pointerHeight(),s=this.cornerRadius();let o=0,h=0,l=0,d=0;"number"==typeof s?o=h=l=d=Math.min(s,e/2,i/2):(o=Math.min(s[0]||0,e/2,i/2),h=Math.min(s[1]||0,e/2,i/2),d=Math.min(s[2]||0,e/2,i/2),l=Math.min(s[3]||0,e/2,i/2)),t.beginPath(),t.moveTo(o,0),r===_e&&(t.lineTo((e-a)/2,0),t.lineTo(e/2,-1*n),t.lineTo((e+a)/2,0)),t.lineTo(e-h,0),t.arc(e-h,h,h,3*Math.PI/2,0,!1),r===ye&&(t.lineTo(e,(i-n)/2),t.lineTo(e+a,i/2),t.lineTo(e,(i+n)/2)),t.lineTo(e,i-d),t.arc(e-d,i-d,d,0,Math.PI/2,!1),r===xe&&(t.lineTo((e+a)/2,i),t.lineTo(e/2,i+n),t.lineTo((e-a)/2,i)),t.lineTo(l,i),t.arc(l,i-l,l,Math.PI/2,Math.PI,!1),r===be&&(t.lineTo(0,(i+n)/2),t.lineTo(-1*a,i/2),t.lineTo(0,(i-n)/2)),t.lineTo(0,o),t.arc(o,o,o,Math.PI,3*Math.PI/2,!1),t.closePath(),t.fillStrokeShape(this)}getSelfRect(){var t=0,e=0,i=this.pointerWidth(),r=this.pointerHeight(),a=this.pointerDirection(),n=this.width(),s=this.height();return a===_e?(e-=r,s+=r):a===xe?s+=r:a===be?(t-=1.5*i,n+=i):a===ye&&(n+=1.5*i),{x:t,y:e,width:n,height:s}}}Ce.prototype.className="Tag",r(Ce),w.addGetterSetter(Ce,"pointerDirection","none"),w.addGetterSetter(Ce,"pointerWidth",0,p()),w.addGetterSetter(Ce,"pointerHeight",0,p()),w.addGetterSetter(Ce,"cornerRadius",0,v(4));class Pe extends Nt{_sceneFunc(t){var e=this.cornerRadius(),i=this.width(),r=this.height();t.beginPath(),e?g.drawRoundedRectPath(t,i,r,e):t.rect(0,0,i,r),t.closePath(),t.fillStrokeShape(this)}}Pe.prototype.className="Rect",r(Pe),w.addGetterSetter(Pe,"cornerRadius",0,v(4));class ke extends Nt{_sceneFunc(t){const e=this._getPoints();t.beginPath(),t.moveTo(e[0].x,e[0].y);for(var i=1;i<e.length;i++)t.lineTo(e[i].x,e[i].y);t.closePath(),t.fillStrokeShape(this)}_getPoints(){const t=this.attrs.sides,e=this.attrs.radius||0,i=[];for(var r=0;r<t;r++)i.push({x:e*Math.sin(2*r*Math.PI/t),y:-1*e*Math.cos(2*r*Math.PI/t)});return i}getSelfRect(){const t=this._getPoints();var e=t[0].x,i=t[0].y,r=t[0].x,a=t[0].y;return t.forEach((t=>{e=Math.min(e,t.x),i=Math.max(i,t.x),r=Math.min(r,t.y),a=Math.max(a,t.y)})),{x:e,y:r,width:i-e,height:a-r}}getWidth(){return 2*this.radius()}getHeight(){return 2*this.radius()}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}ke.prototype.className="RegularPolygon",ke.prototype._centroid=!0,ke.prototype._attrsAffectingSize=["radius"],r(ke),w.addGetterSetter(ke,"radius",0,p()),w.addGetterSetter(ke,"sides",0,p());var Ae=2*Math.PI;class Te extends Nt{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.innerRadius(),0,Ae,!1),t.moveTo(this.outerRadius(),0),t.arc(0,0,this.outerRadius(),Ae,0,!0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*this.outerRadius()}getHeight(){return 2*this.outerRadius()}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}}Te.prototype.className="Ring",Te.prototype._centroid=!0,Te.prototype._attrsAffectingSize=["innerRadius","outerRadius"],r(Te),w.addGetterSetter(Te,"innerRadius",0,p()),w.addGetterSetter(Te,"outerRadius",0,p());class Me extends Nt{constructor(t){super(t),this._updated=!0,this.anim=new jt((()=>{var t=this._updated;return this._updated=!1,t})),this.on("animationChange.konva",(function(){this.frameIndex(0)})),this.on("frameIndexChange.konva",(function(){this._updated=!0})),this.on("frameRateChange.konva",(function(){this.anim.isRunning()&&(clearInterval(this.interval),this._setInterval())}))}_sceneFunc(t){var e=this.animation(),i=this.frameIndex(),r=4*i,a=this.animations()[e],n=this.frameOffsets(),s=a[r+0],o=a[r+1],h=a[r+2],l=a[r+3],d=this.image();if((this.hasFill()||this.hasStroke())&&(t.beginPath(),t.rect(0,0,h,l),t.closePath(),t.fillStrokeShape(this)),d)if(n){var c=n[e],g=2*i;t.drawImage(d,s,o,h,l,c[g+0],c[g+1],h,l)}else t.drawImage(d,s,o,h,l,0,0,h,l)}_hitFunc(t){var e=this.animation(),i=this.frameIndex(),r=4*i,a=this.animations()[e],n=this.frameOffsets(),s=a[r+2],o=a[r+3];if(t.beginPath(),n){var h=n[e],l=2*i;t.rect(h[l+0],h[l+1],s,o)}else t.rect(0,0,s,o);t.closePath(),t.fillShape(this)}_useBufferCanvas(){return super._useBufferCanvas(!0)}_setInterval(){var t=this;this.interval=setInterval((function(){t._updateIndex()}),1e3/this.frameRate())}start(){if(!this.isRunning()){var t=this.getLayer();this.anim.setLayers(t),this._setInterval(),this.anim.start()}}stop(){this.anim.stop(),clearInterval(this.interval)}isRunning(){return this.anim.isRunning()}_updateIndex(){var t=this.frameIndex(),e=this.animation();t<this.animations()[e].length/4-1?this.frameIndex(t+1):this.frameIndex(0)}}Me.prototype.className="Sprite",r(Me),w.addGetterSetter(Me,"animation"),w.addGetterSetter(Me,"animations"),w.addGetterSetter(Me,"frameOffsets"),w.addGetterSetter(Me,"image"),w.addGetterSetter(Me,"frameIndex",0,p()),w.addGetterSetter(Me,"frameRate",17,p()),w.backCompat(Me,{index:"frameIndex",getIndex:"getFrameIndex",setIndex:"setFrameIndex"});class Ge extends Nt{_sceneFunc(t){var e=this.innerRadius(),i=this.outerRadius(),r=this.numPoints();t.beginPath(),t.moveTo(0,0-i);for(var a=1;a<2*r;a++){var n=a%2==0?i:e,s=n*Math.sin(a*Math.PI/r),o=-1*n*Math.cos(a*Math.PI/r);t.lineTo(s,o)}t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*this.outerRadius()}getHeight(){return 2*this.outerRadius()}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}}function Re(t){return Array.from(t)}Ge.prototype.className="Star",Ge.prototype._centroid=!0,Ge.prototype._attrsAffectingSize=["innerRadius","outerRadius"],r(Ge),w.addGetterSetter(Ge,"numPoints",5,p()),w.addGetterSetter(Ge,"innerRadius",0,p()),w.addGetterSetter(Ge,"outerRadius",0,p());var Ee,De="auto",Le="inherit",Oe="justify",Ie="left",Fe="middle",Be="normal",Ne=" ",He="none",We=["direction","fontFamily","fontSize","fontStyle","fontVariant","padding","align","verticalAlign","lineHeight","text","width","height","wrap","ellipsis","letterSpacing"],ze=We.length;function Ye(){return Ee||(Ee=g.createCanvasElement().getContext("2d"))}class Xe extends Nt{constructor(t){super(function(t){return(t=t||{}).fillLinearGradientColorStops||t.fillRadialGradientColorStops||t.fillPatternImage||(t.fill=t.fill||"black"),t}(t)),this._partialTextX=0,this._partialTextY=0;for(var e=0;e<ze;e++)this.on(We[e]+"Change.konva",this._setTextData);this._setTextData()}_sceneFunc(t){var e=this.textArr,r=e.length;if(this.text()){var a,n=this.padding(),s=this.fontSize(),o=this.lineHeight()*s,h=this.verticalAlign(),l=this.direction(),d=0,c=this.align(),g=this.getWidth(),u=this.letterSpacing(),f=this.fill(),p=this.textDecoration(),v=-1!==p.indexOf("underline"),m=-1!==p.indexOf("line-through");l=l===Le?t.direction:l;var _=o/2,y=Fe;if(i._fixTextRendering){var x=this.measureSize("M");y="alphabetic",_=(x.fontBoundingBoxAscent-x.fontBoundingBoxDescent)/2+o/2}var b=0,S=0;for("rtl"===l&&t.setAttr("direction",l),t.setAttr("font",this._getContextFont()),t.setAttr("textBaseline",y),t.setAttr("textAlign",Ie),h===Fe?d=(this.getHeight()-r*o-2*n)/2:"bottom"===h&&(d=this.getHeight()-r*o-2*n),t.translate(n,d+n),a=0;a<r;a++){b=0,S=0;var w,C,P,k=e[a],A=k.text,T=k.width,M=k.lastInParagraph;if(t.save(),"right"===c?b+=g-T-2*n:"center"===c&&(b+=(g-T-2*n)/2),v){t.save(),t.beginPath();const e=b,r=_+S+(i._fixTextRendering?Math.round(s/4):Math.round(s/2));t.moveTo(e,r),C=0===(w=A.split(" ").length-1),P=c!==Oe||M?T:g-2*n,t.lineTo(e+Math.round(P),r),t.lineWidth=s/15;const a=this._getLinearGradient();t.strokeStyle=a||f,t.stroke(),t.restore()}if(m){t.save(),t.beginPath();let e=i._fixTextRendering?-Math.round(s/4):0;t.moveTo(b,_+S+e),C=0===(w=A.split(" ").length-1),P=c===Oe&&M&&!C?g-2*n:T,t.lineTo(b+Math.round(P),_+S+e),t.lineWidth=s/15;const r=this._getLinearGradient();t.strokeStyle=r||f,t.stroke(),t.restore()}if("rtl"===l||0===u&&c!==Oe)0!==u&&t.setAttr("letterSpacing",`${u}px`),this._partialTextX=b,this._partialTextY=_+S,this._partialText=A,t.fillStrokeShape(this);else{w=A.split(" ").length-1;for(var G=Re(A),R=0;R<G.length;R++){var E=G[R];" "!==E||M||c!==Oe||(b+=(g-2*n-T)/w),this._partialTextX=b,this._partialTextY=_+S,this._partialText=E,t.fillStrokeShape(this),b+=this.measureSize(E).width+u}}t.restore(),r>1&&(_+=o)}}}_hitFunc(t){var e=this.getWidth(),i=this.getHeight();t.beginPath(),t.rect(0,0,e,i),t.closePath(),t.fillStrokeShape(this)}setText(t){var e=g._isString(t)?t:null==t?"":t+"";return this._setAttr("text",e),this}getWidth(){return this.attrs.width===De||void 0===this.attrs.width?this.getTextWidth()+2*this.padding():this.attrs.width}getHeight(){return this.attrs.height===De||void 0===this.attrs.height?this.fontSize()*this.textArr.length*this.lineHeight()+2*this.padding():this.attrs.height}getTextWidth(){return this.textWidth}getTextHeight(){return g.warn("text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height."),this.textHeight}measureSize(t){var e,i,r,a,n,s,o,h,l,d,c,g,u=Ye(),f=this.fontSize();u.save(),u.font=this._getContextFont(),g=u.measureText(t),u.restore();const p=f/100;return{actualBoundingBoxAscent:null!==(e=g.actualBoundingBoxAscent)&&void 0!==e?e:71.58203125*p,actualBoundingBoxDescent:null!==(i=g.actualBoundingBoxDescent)&&void 0!==i?i:0,actualBoundingBoxLeft:null!==(r=g.actualBoundingBoxLeft)&&void 0!==r?r:-7.421875*p,actualBoundingBoxRight:null!==(a=g.actualBoundingBoxRight)&&void 0!==a?a:75.732421875*p,alphabeticBaseline:null!==(n=g.alphabeticBaseline)&&void 0!==n?n:0,emHeightAscent:null!==(s=g.emHeightAscent)&&void 0!==s?s:100*p,emHeightDescent:null!==(o=g.emHeightDescent)&&void 0!==o?o:-20*p,fontBoundingBoxAscent:null!==(h=g.fontBoundingBoxAscent)&&void 0!==h?h:91*p,fontBoundingBoxDescent:null!==(l=g.fontBoundingBoxDescent)&&void 0!==l?l:21*p,hangingBaseline:null!==(d=g.hangingBaseline)&&void 0!==d?d:72.80000305175781*p,ideographicBaseline:null!==(c=g.ideographicBaseline)&&void 0!==c?c:-21*p,width:g.width,height:f}}_getContextFont(){return this.fontStyle()+Ne+this.fontVariant()+Ne+(this.fontSize()+"px ")+this.fontFamily().split(",").map((t=>{const e=(t=t.trim()).indexOf(" ")>=0,i=t.indexOf('"')>=0||t.indexOf("'")>=0;return e&&!i&&(t=`"${t}"`),t})).join(", ")}_addTextLine(t){this.align()===Oe&&(t=t.trim());var e=this._getTextWidth(t);return this.textArr.push({text:t,width:e,lastInParagraph:!1})}_getTextWidth(t){var e=this.letterSpacing(),i=t.length;return Ye().measureText(t).width+(i?e*(i-1):0)}_setTextData(){var t=this.text().split("\n"),e=+this.fontSize(),i=0,r=this.lineHeight()*e,a=this.attrs.width,n=this.attrs.height,s=a!==De&&void 0!==a,o=n!==De&&void 0!==n,h=this.padding(),l=a-2*h,d=n-2*h,c=0,g=this.wrap(),u="char"!==g&&g!==He,f=this.ellipsis();this.textArr=[],Ye().font=this._getContextFont();for(var p=f?this._getTextWidth("…"):0,v=0,m=t.length;v<m;++v){var _=t[v],y=this._getTextWidth(_);if(s&&y>l)for(;_.length>0;){for(var x=0,b=_.length,S="",w=0;x<b;){var C=x+b>>>1,P=_.slice(0,C+1),k=this._getTextWidth(P)+p;k<=l?(x=C+1,S=P,w=k):b=C}if(!S)break;if(u){var A,T=_[S.length];(A=(T===Ne||"-"===T)&&w<=l?S.length:Math.max(S.lastIndexOf(Ne),S.lastIndexOf("-"))+1)>0&&(x=A,S=S.slice(0,x),w=this._getTextWidth(S))}if(S=S.trimRight(),this._addTextLine(S),i=Math.max(i,w),c+=r,this._shouldHandleEllipsis(c)){this._tryToAddEllipsisToLastLine();break}if((_=(_=_.slice(x)).trimLeft()).length>0&&(y=this._getTextWidth(_))<=l){this._addTextLine(_),c+=r,i=Math.max(i,y);break}}else this._addTextLine(_),c+=r,i=Math.max(i,y),this._shouldHandleEllipsis(c)&&v<m-1&&this._tryToAddEllipsisToLastLine();if(this.textArr[this.textArr.length-1]&&(this.textArr[this.textArr.length-1].lastInParagraph=!0),o&&c+r>d)break}this.textHeight=e,this.textWidth=i}_shouldHandleEllipsis(t){var e=+this.fontSize(),i=this.lineHeight()*e,r=this.attrs.height,a=r!==De&&void 0!==r,n=r-2*this.padding();return!(this.wrap()!==He)||a&&t+i>n}_tryToAddEllipsisToLastLine(){var t=this.attrs.width,e=t!==De&&void 0!==t,i=t-2*this.padding(),r=this.ellipsis(),a=this.textArr[this.textArr.length-1];if(a&&r){if(e)this._getTextWidth(a.text+"…")<i||(a.text=a.text.slice(0,a.text.length-3));this.textArr.splice(this.textArr.length-1,1),this._addTextLine(a.text+"…")}}getStrokeScaleEnabled(){return!0}_useBufferCanvas(){const t=-1!==this.textDecoration().indexOf("underline")||-1!==this.textDecoration().indexOf("line-through"),e=this.hasShadow();return!(!t||!e)||super._useBufferCanvas()}}Xe.prototype._fillFunc=function(t){t.fillText(this._partialText,this._partialTextX,this._partialTextY)},Xe.prototype._strokeFunc=function(t){t.setAttr("miterLimit",2),t.strokeText(this._partialText,this._partialTextX,this._partialTextY)},Xe.prototype.className="Text",Xe.prototype._attrsAffectingSize=["text","fontSize","padding","wrap","lineHeight","letterSpacing"],r(Xe),w.overWriteSetter(Xe,"width",m()),w.overWriteSetter(Xe,"height",m()),w.addGetterSetter(Xe,"direction",Le),w.addGetterSetter(Xe,"fontFamily","Arial"),w.addGetterSetter(Xe,"fontSize",12,p()),w.addGetterSetter(Xe,"fontStyle",Be),w.addGetterSetter(Xe,"fontVariant",Be),w.addGetterSetter(Xe,"padding",0,p()),w.addGetterSetter(Xe,"align",Ie),w.addGetterSetter(Xe,"verticalAlign","top"),w.addGetterSetter(Xe,"lineHeight",1,p()),w.addGetterSetter(Xe,"wrap","word"),w.addGetterSetter(Xe,"ellipsis",!1,x()),w.addGetterSetter(Xe,"letterSpacing",0,p()),w.addGetterSetter(Xe,"text","",_()),w.addGetterSetter(Xe,"textDecoration","");var qe="normal";function je(t){t.fillText(this.partialText,0,0)}function Ue(t){t.strokeText(this.partialText,0,0)}class Ve extends Nt{constructor(t){super(t),this.dummyCanvas=g.createCanvasElement(),this.dataArray=[],this._readDataAttribute(),this.on("dataChange.konva",(function(){this._readDataAttribute(),this._setTextData()})),this.on("textChange.konva alignChange.konva letterSpacingChange.konva kerningFuncChange.konva fontSizeChange.konva fontFamilyChange.konva",this._setTextData),this._setTextData()}_getTextPathLength(){return ge.getPathLength(this.dataArray)}_getPointAtLength(t){if(!this.attrs.data)return null;return t-1>this.pathLength?null:ge.getPointAtLengthOfDataArray(t,this.dataArray)}_readDataAttribute(){this.dataArray=ge.parsePathData(this.attrs.data),this.pathLength=this._getTextPathLength()}_sceneFunc(t){t.setAttr("font",this._getContextFont()),t.setAttr("textBaseline",this.textBaseline()),t.setAttr("textAlign","left"),t.save();var e=this.textDecoration(),i=this.fill(),r=this.fontSize(),a=this.glyphInfo;"underline"===e&&t.beginPath();for(var n=0;n<a.length;n++){t.save();var s=a[n].p0;t.translate(s.x,s.y),t.rotate(a[n].rotation),this.partialText=a[n].text,t.fillStrokeShape(this),"underline"===e&&(0===n&&t.moveTo(0,r/2+1),t.lineTo(r,r/2+1)),t.restore()}"underline"===e&&(t.strokeStyle=i,t.lineWidth=r/20,t.stroke()),t.restore()}_hitFunc(t){t.beginPath();var e=this.glyphInfo;if(e.length>=1){var i=e[0].p0;t.moveTo(i.x,i.y)}for(var r=0;r<e.length;r++){var a=e[r].p1;t.lineTo(a.x,a.y)}t.setAttr("lineWidth",this.fontSize()),t.setAttr("strokeStyle",this.colorKey),t.stroke()}getTextWidth(){return this.textWidth}getTextHeight(){return g.warn("text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height."),this.textHeight}setText(t){return Xe.prototype.setText.call(this,t)}_getContextFont(){return Xe.prototype._getContextFont.call(this)}_getTextSize(t){var e=this.dummyCanvas.getContext("2d");e.save(),e.font=this._getContextFont();var i=e.measureText(t);return e.restore(),{width:i.width,height:parseInt(`${this.fontSize()}`,10)}}_setTextData(){const{width:t,height:e}=this._getTextSize(this.attrs.text);if(this.textWidth=t,this.textHeight=e,this.glyphInfo=[],!this.attrs.data)return null;const i=this.letterSpacing(),r=this.align(),a=this.kerningFunc(),n=Math.max(this.textWidth+((this.attrs.text||"").length-1)*i,0);let s=0;"center"===r&&(s=Math.max(0,this.pathLength/2-n/2)),"right"===r&&(s=Math.max(0,this.pathLength-n));const o=Re(this.text());let h=s;for(var l=0;l<o.length;l++){const t=this._getPointAtLength(h);if(!t)return;let e=this._getTextSize(o[l]).width+i;if(" "===o[l]&&"justify"===r){const t=this.text().split(" ").length-1;e+=(this.pathLength-n)/t}const s=this._getPointAtLength(h+e);if(!s)return;const d=ge.getLineLength(t.x,t.y,s.x,s.y);let c=0;if(a)try{c=a(o[l-1],o[l])*this.fontSize()}catch(t){c=0}t.x+=c,s.x+=c,this.textWidth+=c;const g=ge.getPointOnLine(c+d/2,t.x,t.y,s.x,s.y),u=Math.atan2(s.y-t.y,s.x-t.x);this.glyphInfo.push({transposeX:g.x,transposeY:g.y,text:o[l],rotation:u,p0:t,p1:s}),h+=e}}getSelfRect(){if(!this.glyphInfo.length)return{x:0,y:0,width:0,height:0};var t=[];this.glyphInfo.forEach((function(e){t.push(e.p0.x),t.push(e.p0.y),t.push(e.p1.x),t.push(e.p1.y)}));for(var e,i,r=t[0]||0,a=t[0]||0,n=t[1]||0,s=t[1]||0,o=0;o<t.length/2;o++)e=t[2*o],i=t[2*o+1],r=Math.min(r,e),a=Math.max(a,e),n=Math.min(n,i),s=Math.max(s,i);var h=this.fontSize();return{x:r-h/2,y:n-h/2,width:a-r+h,height:s-n+h}}destroy(){return g.releaseCanvas(this.dummyCanvas),super.destroy()}}Ve.prototype._fillFunc=je,Ve.prototype._strokeFunc=Ue,Ve.prototype._fillFuncHit=je,Ve.prototype._strokeFuncHit=Ue,Ve.prototype.className="TextPath",Ve.prototype._attrsAffectingSize=["text","fontSize","data"],r(Ve),w.addGetterSetter(Ve,"data"),w.addGetterSetter(Ve,"fontFamily","Arial"),w.addGetterSetter(Ve,"fontSize",12,p()),w.addGetterSetter(Ve,"fontStyle",qe),w.addGetterSetter(Ve,"align","left"),w.addGetterSetter(Ve,"letterSpacing",0,p()),w.addGetterSetter(Ve,"textBaseline","middle"),w.addGetterSetter(Ve,"fontVariant",qe),w.addGetterSetter(Ve,"text",""),w.addGetterSetter(Ve,"textDecoration",null),w.addGetterSetter(Ve,"kerningFunc",null);var Ke="tr-konva",Qe=["resizeEnabledChange","rotateAnchorOffsetChange","rotateEnabledChange","enabledAnchorsChange","anchorSizeChange","borderEnabledChange","borderStrokeChange","borderStrokeWidthChange","borderDashChange","anchorStrokeChange","anchorStrokeWidthChange","anchorFillChange","anchorCornerRadiusChange","ignoreStrokeChange","anchorStyleFuncChange"].map((t=>t+`.${Ke}`)).join(" "),Je="nodesRect",$e=["widthChange","heightChange","scaleXChange","scaleYChange","skewXChange","skewYChange","rotationChange","offsetXChange","offsetYChange","transformsEnabledChange","strokeWidthChange"],Ze={"top-left":-45,"top-center":0,"top-right":45,"middle-right":-90,"middle-left":90,"bottom-left":-135,"bottom-center":180,"bottom-right":135};const ti="ontouchstart"in i._global;var ei=["top-left","top-center","top-right","middle-right","middle-left","bottom-left","bottom-center","bottom-right"];function ii(t,e,i){const r=i.x+(t.x-i.x)*Math.cos(e)-(t.y-i.y)*Math.sin(e),a=i.y+(t.x-i.x)*Math.sin(e)+(t.y-i.y)*Math.cos(e);return{...t,rotation:t.rotation+e,x:r,y:a}}function ri(t,e){const i=function(t){return{x:t.x+t.width/2*Math.cos(t.rotation)+t.height/2*Math.sin(-t.rotation),y:t.y+t.height/2*Math.cos(t.rotation)+t.width/2*Math.sin(t.rotation)}}(t);return ii(t,e,i)}let ai=0;class ni extends Xt{constructor(t){super(t),this._movingAnchorName=null,this._transforming=!1,this._createElements(),this._handleMouseMove=this._handleMouseMove.bind(this),this._handleMouseUp=this._handleMouseUp.bind(this),this.update=this.update.bind(this),this.on(Qe,this.update),this.getNode()&&this.update()}attachTo(t){return this.setNode(t),this}setNode(t){return g.warn("tr.setNode(shape), tr.node(shape) and tr.attachTo(shape) methods are deprecated. Please use tr.nodes(nodesArray) instead."),this.setNodes([t])}getNode(){return this._nodes&&this._nodes[0]}_getEventNamespace(){return Ke+this._id}setNodes(t=[]){this._nodes&&this._nodes.length&&this.detach();const e=t.filter((t=>!t.isAncestorOf(this)||(g.error("Konva.Transformer cannot be an a child of the node you are trying to attach"),!1)));return this._nodes=t=e,1===t.length&&this.useSingleNodeRotation()?this.rotation(t[0].getAbsoluteRotation()):this.rotation(0),this._nodes.forEach((t=>{const e=()=>{1===this.nodes().length&&this.useSingleNodeRotation()&&this.rotation(this.nodes()[0].getAbsoluteRotation()),this._resetTransformCache(),this._transforming||this.isDragging()||this.update()},i=t._attrsAffectingSize.map((t=>t+"Change."+this._getEventNamespace())).join(" ");t.on(i,e),t.on($e.map((t=>t+`.${this._getEventNamespace()}`)).join(" "),e),t.on(`absoluteTransformChange.${this._getEventNamespace()}`,e),this._proxyDrag(t)})),this._resetTransformCache(),!!this.findOne(".top-left")&&this.update(),this}_proxyDrag(t){let e;t.on(`dragstart.${this._getEventNamespace()}`,(i=>{e=t.getAbsolutePosition(),this.isDragging()||t===this.findOne(".back")||this.startDrag(i,!1)})),t.on(`dragmove.${this._getEventNamespace()}`,(i=>{if(!e)return;const r=t.getAbsolutePosition(),a=r.x-e.x,n=r.y-e.y;this.nodes().forEach((e=>{if(e===t)return;if(e.isDragging())return;const r=e.getAbsolutePosition();e.setAbsolutePosition({x:r.x+a,y:r.y+n}),e.startDrag(i)})),e=null}))}getNodes(){return this._nodes||[]}getActiveAnchor(){return this._movingAnchorName}detach(){this._nodes&&this._nodes.forEach((t=>{t.off("."+this._getEventNamespace())})),this._nodes=[],this._resetTransformCache()}_resetTransformCache(){this._clearCache(Je),this._clearCache("transform"),this._clearSelfAndDescendantCache("absoluteTransform")}_getNodeRect(){return this._getCache(Je,this.__getNodeRect)}__getNodeShape(t,e=this.rotation(),r){var a=t.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),n=t.getAbsoluteScale(r),s=t.getAbsolutePosition(r),o=a.x*n.x-t.offsetX()*n.x,h=a.y*n.y-t.offsetY()*n.y;const l=(i.getAngle(t.getAbsoluteRotation())+2*Math.PI)%(2*Math.PI);return ii({x:s.x+o*Math.cos(l)+h*Math.sin(-l),y:s.y+h*Math.cos(l)+o*Math.sin(l),width:a.width*n.x,height:a.height*n.y,rotation:l},-i.getAngle(e),{x:0,y:0})}__getNodeRect(){if(!this.getNode())return{x:-1e8,y:-1e8,width:0,height:0,rotation:0};const t=[];this.nodes().map((e=>{const i=e.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()});var r=[{x:i.x,y:i.y},{x:i.x+i.width,y:i.y},{x:i.x+i.width,y:i.y+i.height},{x:i.x,y:i.y+i.height}],a=e.getAbsoluteTransform();r.forEach((function(e){var i=a.point(e);t.push(i)}))}));const e=new a;e.rotate(-i.getAngle(this.rotation()));var r=1/0,n=1/0,s=-1/0,o=-1/0;t.forEach((function(t){var i=e.point(t);void 0===r&&(r=s=i.x,n=o=i.y),r=Math.min(r,i.x),n=Math.min(n,i.y),s=Math.max(s,i.x),o=Math.max(o,i.y)})),e.invert();const h=e.point({x:r,y:n});return{x:h.x,y:h.y,width:s-r,height:o-n,rotation:i.getAngle(this.rotation())}}getX(){return this._getNodeRect().x}getY(){return this._getNodeRect().y}getWidth(){return this._getNodeRect().width}getHeight(){return this._getNodeRect().height}_createElements(){this._createBack(),ei.forEach((t=>{this._createAnchor(t)})),this._createAnchor("rotater")}_createAnchor(t){var e=new Pe({stroke:"rgb(0, 161, 255)",fill:"white",strokeWidth:1,name:t+" _anchor",dragDistance:0,draggable:!0,hitStrokeWidth:ti?10:"auto"}),r=this;e.on("mousedown touchstart",(function(t){r._handleMouseDown(t)})),e.on("dragstart",(t=>{e.stopDrag(),t.cancelBubble=!0})),e.on("dragend",(t=>{t.cancelBubble=!0})),e.on("mouseenter",(()=>{var r=i.getAngle(this.rotation()),a=this.rotateAnchorCursor(),n=function(t,e,i){if("rotater"===t)return i;e+=g.degToRad(Ze[t]||0);var r=(g.radToDeg(e)%360+360)%360;return g._inRange(r,337.5,360)||g._inRange(r,0,22.5)?"ns-resize":g._inRange(r,22.5,67.5)?"nesw-resize":g._inRange(r,67.5,112.5)?"ew-resize":g._inRange(r,112.5,157.5)?"nwse-resize":g._inRange(r,157.5,202.5)?"ns-resize":g._inRange(r,202.5,247.5)?"nesw-resize":g._inRange(r,247.5,292.5)?"ew-resize":g._inRange(r,292.5,337.5)?"nwse-resize":(g.error("Transformer has unknown angle for cursor detection: "+r),"pointer")}(t,r,a);e.getStage().content&&(e.getStage().content.style.cursor=n),this._cursorChange=!0})),e.on("mouseout",(()=>{e.getStage().content&&(e.getStage().content.style.cursor=""),this._cursorChange=!1})),this.add(e)}_createBack(){var t=new Nt({name:"back",width:0,height:0,draggable:!0,sceneFunc(t,e){var i=e.getParent(),r=i.padding();t.beginPath(),t.rect(-r,-r,e.width()+2*r,e.height()+2*r),t.moveTo(e.width()/2,-r),i.rotateEnabled()&&i.rotateLineVisible()&&t.lineTo(e.width()/2,-i.rotateAnchorOffset()*g._sign(e.height())-r),t.fillStrokeShape(e)},hitFunc:(t,e)=>{if(this.shouldOverdrawWholeArea()){var i=this.padding();t.beginPath(),t.rect(-i,-i,e.width()+2*i,e.height()+2*i),t.fillStrokeShape(e)}}});this.add(t),this._proxyDrag(t),t.on("dragstart",(t=>{t.cancelBubble=!0})),t.on("dragmove",(t=>{t.cancelBubble=!0})),t.on("dragend",(t=>{t.cancelBubble=!0})),this.on("dragmove",(t=>{this.update()}))}_handleMouseDown(t){if(!this._transforming){this._movingAnchorName=t.target.name().split(" ")[0];var e=this._getNodeRect(),i=e.width,r=e.height,a=Math.sqrt(Math.pow(i,2)+Math.pow(r,2));this.sin=Math.abs(r/a),this.cos=Math.abs(i/a),"undefined"!=typeof window&&(window.addEventListener("mousemove",this._handleMouseMove),window.addEventListener("touchmove",this._handleMouseMove),window.addEventListener("mouseup",this._handleMouseUp,!0),window.addEventListener("touchend",this._handleMouseUp,!0)),this._transforming=!0;var n=t.target.getAbsolutePosition(),s=t.target.getStage().getPointerPosition();this._anchorDragOffset={x:s.x-n.x,y:s.y-n.y},ai++,this._fire("transformstart",{evt:t.evt,target:this.getNode()}),this._nodes.forEach((e=>{e._fire("transformstart",{evt:t.evt,target:e})}))}}_handleMouseMove(t){var e,r,a,n=this.findOne("."+this._movingAnchorName),s=n.getStage();s.setPointersPositions(t);const o=s.getPointerPosition();let h={x:o.x-this._anchorDragOffset.x,y:o.y-this._anchorDragOffset.y};const l=n.getAbsolutePosition();this.anchorDragBoundFunc()&&(h=this.anchorDragBoundFunc()(l,h,t)),n.setAbsolutePosition(h);const d=n.getAbsolutePosition();if(l.x!==d.x||l.y!==d.y)if("rotater"!==this._movingAnchorName){var c,g=this.shiftBehavior();c="inverted"===g?this.keepRatio()&&!t.shiftKey:"none"===g?this.keepRatio():this.keepRatio()||t.shiftKey;var u=this.centeredScaling()||t.altKey;if("top-left"===this._movingAnchorName){if(c){var f=u?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".bottom-right").x(),y:this.findOne(".bottom-right").y()};a=Math.sqrt(Math.pow(f.x-n.x(),2)+Math.pow(f.y-n.y(),2));var p=this.findOne(".top-left").x()>f.x?-1:1,v=this.findOne(".top-left").y()>f.y?-1:1;e=a*this.cos*p,r=a*this.sin*v,this.findOne(".top-left").x(f.x-e),this.findOne(".top-left").y(f.y-r)}}else if("top-center"===this._movingAnchorName)this.findOne(".top-left").y(n.y());else if("top-right"===this._movingAnchorName){if(c){f=u?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".bottom-left").x(),y:this.findOne(".bottom-left").y()};a=Math.sqrt(Math.pow(n.x()-f.x,2)+Math.pow(f.y-n.y(),2));p=this.findOne(".top-right").x()<f.x?-1:1,v=this.findOne(".top-right").y()>f.y?-1:1;e=a*this.cos*p,r=a*this.sin*v,this.findOne(".top-right").x(f.x+e),this.findOne(".top-right").y(f.y-r)}var m=n.position();this.findOne(".top-left").y(m.y),this.findOne(".bottom-right").x(m.x)}else if("middle-left"===this._movingAnchorName)this.findOne(".top-left").x(n.x());else if("middle-right"===this._movingAnchorName)this.findOne(".bottom-right").x(n.x());else if("bottom-left"===this._movingAnchorName){if(c){f=u?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".top-right").x(),y:this.findOne(".top-right").y()};a=Math.sqrt(Math.pow(f.x-n.x(),2)+Math.pow(n.y()-f.y,2));p=f.x<n.x()?-1:1,v=n.y()<f.y?-1:1;e=a*this.cos*p,r=a*this.sin*v,n.x(f.x-e),n.y(f.y+r)}m=n.position(),this.findOne(".top-left").x(m.x),this.findOne(".bottom-right").y(m.y)}else if("bottom-center"===this._movingAnchorName)this.findOne(".bottom-right").y(n.y());else if("bottom-right"===this._movingAnchorName){if(c){f=u?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".top-left").x(),y:this.findOne(".top-left").y()};a=Math.sqrt(Math.pow(n.x()-f.x,2)+Math.pow(n.y()-f.y,2));p=this.findOne(".bottom-right").x()<f.x?-1:1,v=this.findOne(".bottom-right").y()<f.y?-1:1;e=a*this.cos*p,r=a*this.sin*v,this.findOne(".bottom-right").x(f.x+e),this.findOne(".bottom-right").y(f.y+r)}}else console.error(new Error("Wrong position argument of selection resizer: "+this._movingAnchorName));if(u=this.centeredScaling()||t.altKey){var _=this.findOne(".top-left"),y=this.findOne(".bottom-right"),x=_.x(),b=_.y(),S=this.getWidth()-y.x(),w=this.getHeight()-y.y();y.move({x:-x,y:-b}),_.move({x:S,y:w})}var C=this.findOne(".top-left").getAbsolutePosition();e=C.x,r=C.y;var P=this.findOne(".bottom-right").x()-this.findOne(".top-left").x(),k=this.findOne(".bottom-right").y()-this.findOne(".top-left").y();this._fitNodesInto({x:e,y:r,width:P,height:k,rotation:i.getAngle(this.rotation())},t)}else{var A=this._getNodeRect();e=n.x()-A.width/2,r=-n.y()+A.height/2;let a=Math.atan2(-r,e)+Math.PI/2;A.height<0&&(a-=Math.PI);const s=i.getAngle(this.rotation())+a,o=i.getAngle(this.rotationSnapTolerance()),h=ri(A,function(t,e,r){let a=e;for(let n=0;n<t.length;n++){const s=i.getAngle(t[n]),o=Math.abs(s-e)%(2*Math.PI);Math.min(o,2*Math.PI-o)<r&&(a=s)}return a}(this.rotationSnaps(),s,o)-A.rotation);this._fitNodesInto(h,t)}}_handleMouseUp(t){this._removeEvents(t)}getAbsoluteTransform(){return this.getTransform()}_removeEvents(t){var e;if(this._transforming){this._transforming=!1,"undefined"!=typeof window&&(window.removeEventListener("mousemove",this._handleMouseMove),window.removeEventListener("touchmove",this._handleMouseMove),window.removeEventListener("mouseup",this._handleMouseUp,!0),window.removeEventListener("touchend",this._handleMouseUp,!0));var i=this.getNode();ai--,this._fire("transformend",{evt:t,target:i}),null===(e=this.getLayer())||void 0===e||e.batchDraw(),i&&this._nodes.forEach((e=>{var i;e._fire("transformend",{evt:t,target:e}),null===(i=e.getLayer())||void 0===i||i.batchDraw()})),this._movingAnchorName=null}}_fitNodesInto(t,e){var r=this._getNodeRect();if(g._inRange(t.width,2*-this.padding()-1,1))return void this.update();if(g._inRange(t.height,2*-this.padding()-1,1))return void this.update();var n=new a;if(n.rotate(i.getAngle(this.rotation())),this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("left")>=0){const e=n.point({x:2*-this.padding(),y:0});t.x+=e.x,t.y+=e.y,t.width+=2*this.padding(),this._movingAnchorName=this._movingAnchorName.replace("left","right"),this._anchorDragOffset.x-=e.x,this._anchorDragOffset.y-=e.y}else if(this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("right")>=0){const e=n.point({x:2*this.padding(),y:0});this._movingAnchorName=this._movingAnchorName.replace("right","left"),this._anchorDragOffset.x-=e.x,this._anchorDragOffset.y-=e.y,t.width+=2*this.padding()}if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("top")>=0){const e=n.point({x:0,y:2*-this.padding()});t.x+=e.x,t.y+=e.y,this._movingAnchorName=this._movingAnchorName.replace("top","bottom"),this._anchorDragOffset.x-=e.x,this._anchorDragOffset.y-=e.y,t.height+=2*this.padding()}else if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("bottom")>=0){const e=n.point({x:0,y:2*this.padding()});this._movingAnchorName=this._movingAnchorName.replace("bottom","top"),this._anchorDragOffset.x-=e.x,this._anchorDragOffset.y-=e.y,t.height+=2*this.padding()}if(this.boundBoxFunc()){const e=this.boundBoxFunc()(r,t);e?t=e:g.warn("boundBoxFunc returned falsy. You should return new bound rect from it!")}const s=1e7,o=new a;o.translate(r.x,r.y),o.rotate(r.rotation),o.scale(r.width/s,r.height/s);const h=new a,l=t.width/s,d=t.height/s;!1===this.flipEnabled()?(h.translate(t.x,t.y),h.rotate(t.rotation),h.translate(t.width<0?t.width:0,t.height<0?t.height:0),h.scale(Math.abs(l),Math.abs(d))):(h.translate(t.x,t.y),h.rotate(t.rotation),h.scale(l,d));const c=h.multiply(o.invert());this._nodes.forEach((t=>{var e;const i=t.getParent().getAbsoluteTransform(),r=t.getTransform().copy();r.translate(t.offsetX(),t.offsetY());const n=new a;n.multiply(i.copy().invert()).multiply(c).multiply(i).multiply(r);const s=n.decompose();t.setAttrs(s),null===(e=t.getLayer())||void 0===e||e.batchDraw()})),this.rotation(g._getRotation(t.rotation)),this._nodes.forEach((t=>{this._fire("transform",{evt:e,target:t}),t._fire("transform",{evt:e,target:t})})),this._resetTransformCache(),this.update(),this.getLayer().batchDraw()}forceUpdate(){this._resetTransformCache(),this.update()}_batchChangeChild(t,e){this.findOne(t).setAttrs(e)}update(){var t,e=this._getNodeRect();this.rotation(g._getRotation(e.rotation));var i=e.width,r=e.height,a=this.enabledAnchors(),n=this.resizeEnabled(),s=this.padding(),o=this.anchorSize();const h=this.find("._anchor");h.forEach((t=>{t.setAttrs({width:o,height:o,offsetX:o/2,offsetY:o/2,stroke:this.anchorStroke(),strokeWidth:this.anchorStrokeWidth(),fill:this.anchorFill(),cornerRadius:this.anchorCornerRadius()})})),this._batchChangeChild(".top-left",{x:0,y:0,offsetX:o/2+s,offsetY:o/2+s,visible:n&&a.indexOf("top-left")>=0}),this._batchChangeChild(".top-center",{x:i/2,y:0,offsetY:o/2+s,visible:n&&a.indexOf("top-center")>=0}),this._batchChangeChild(".top-right",{x:i,y:0,offsetX:o/2-s,offsetY:o/2+s,visible:n&&a.indexOf("top-right")>=0}),this._batchChangeChild(".middle-left",{x:0,y:r/2,offsetX:o/2+s,visible:n&&a.indexOf("middle-left")>=0}),this._batchChangeChild(".middle-right",{x:i,y:r/2,offsetX:o/2-s,visible:n&&a.indexOf("middle-right")>=0}),this._batchChangeChild(".bottom-left",{x:0,y:r,offsetX:o/2+s,offsetY:o/2-s,visible:n&&a.indexOf("bottom-left")>=0}),this._batchChangeChild(".bottom-center",{x:i/2,y:r,offsetY:o/2-s,visible:n&&a.indexOf("bottom-center")>=0}),this._batchChangeChild(".bottom-right",{x:i,y:r,offsetX:o/2-s,offsetY:o/2-s,visible:n&&a.indexOf("bottom-right")>=0}),this._batchChangeChild(".rotater",{x:i/2,y:-this.rotateAnchorOffset()*g._sign(r)-s,visible:this.rotateEnabled()}),this._batchChangeChild(".back",{width:i,height:r,visible:this.borderEnabled(),stroke:this.borderStroke(),strokeWidth:this.borderStrokeWidth(),dash:this.borderDash(),x:0,y:0});const l=this.anchorStyleFunc();l&&h.forEach((t=>{l(t)})),null===(t=this.getLayer())||void 0===t||t.batchDraw()}isTransforming(){return this._transforming}stopTransform(){if(this._transforming){this._removeEvents();var t=this.findOne("."+this._movingAnchorName);t&&t.stopDrag()}}destroy(){return this.getStage()&&this._cursorChange&&this.getStage().content&&(this.getStage().content.style.cursor=""),Xt.prototype.destroy.call(this),this.detach(),this._removeEvents(),this}toObject(){return V.prototype.toObject.call(this)}clone(t){return V.prototype.clone.call(this,t)}getClientRect(){return this.nodes().length>0?super.getClientRect():{x:0,y:0,width:0,height:0}}}ni.isTransforming=()=>ai>0,ni.prototype.className="Transformer",r(ni),w.addGetterSetter(ni,"enabledAnchors",ei,(function(t){return t instanceof Array||g.warn("enabledAnchors value should be an array"),t instanceof Array&&t.forEach((function(t){-1===ei.indexOf(t)&&g.warn("Unknown anchor name: "+t+". Available names are: "+ei.join(", "))})),t||[]})),w.addGetterSetter(ni,"flipEnabled",!0,x()),w.addGetterSetter(ni,"resizeEnabled",!0),w.addGetterSetter(ni,"anchorSize",10,p()),w.addGetterSetter(ni,"rotateEnabled",!0),w.addGetterSetter(ni,"rotateLineVisible",!0),w.addGetterSetter(ni,"rotationSnaps",[]),w.addGetterSetter(ni,"rotateAnchorOffset",50,p()),w.addGetterSetter(ni,"rotateAnchorCursor","crosshair"),w.addGetterSetter(ni,"rotationSnapTolerance",5,p()),w.addGetterSetter(ni,"borderEnabled",!0),w.addGetterSetter(ni,"anchorStroke","rgb(0, 161, 255)"),w.addGetterSetter(ni,"anchorStrokeWidth",1,p()),w.addGetterSetter(ni,"anchorFill","white"),w.addGetterSetter(ni,"anchorCornerRadius",0,p()),w.addGetterSetter(ni,"borderStroke","rgb(0, 161, 255)"),w.addGetterSetter(ni,"borderStrokeWidth",1,p()),w.addGetterSetter(ni,"borderDash"),w.addGetterSetter(ni,"keepRatio",!0),w.addGetterSetter(ni,"shiftBehavior","default"),w.addGetterSetter(ni,"centeredScaling",!1),w.addGetterSetter(ni,"ignoreStroke",!1),w.addGetterSetter(ni,"padding",0,p()),w.addGetterSetter(ni,"node"),w.addGetterSetter(ni,"nodes"),w.addGetterSetter(ni,"boundBoxFunc"),w.addGetterSetter(ni,"anchorDragBoundFunc"),w.addGetterSetter(ni,"anchorStyleFunc"),w.addGetterSetter(ni,"shouldOverdrawWholeArea",!1),w.addGetterSetter(ni,"useSingleNodeRotation",!0),w.backCompat(ni,{lineEnabled:"borderEnabled",rotateHandlerOffset:"rotateAnchorOffset",enabledHandlers:"enabledAnchors"});class si extends Nt{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.radius(),0,i.getAngle(this.angle()),this.clockwise()),t.lineTo(0,0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*this.radius()}getHeight(){return 2*this.radius()}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}function oi(){this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}si.prototype.className="Wedge",si.prototype._centroid=!0,si.prototype._attrsAffectingSize=["radius"],r(si),w.addGetterSetter(si,"radius",0,p()),w.addGetterSetter(si,"angle",0,p()),w.addGetterSetter(si,"clockwise",!1),w.backCompat(si,{angleDeg:"angle",getAngleDeg:"getAngle",setAngleDeg:"setAngle"});var hi=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],li=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];w.addGetterSetter(V,"blurRadius",0,p(),w.afterSetFilter);w.addGetterSetter(V,"brightness",0,p(),w.afterSetFilter);w.addGetterSetter(V,"contrast",0,p(),w.afterSetFilter);function di(t,e,i,r,a){var n=i-e,s=a-r;return 0===n?r+s/2:0===s?r:s*((t-e)/n)+r}w.addGetterSetter(V,"embossStrength",.5,p(),w.afterSetFilter),w.addGetterSetter(V,"embossWhiteLevel",.5,p(),w.afterSetFilter),w.addGetterSetter(V,"embossDirection","top-left",null,w.afterSetFilter),w.addGetterSetter(V,"embossBlend",!1,null,w.afterSetFilter);w.addGetterSetter(V,"enhance",0,p(),w.afterSetFilter);w.addGetterSetter(V,"hue",0,p(),w.afterSetFilter),w.addGetterSetter(V,"saturation",0,p(),w.afterSetFilter),w.addGetterSetter(V,"luminance",0,p(),w.afterSetFilter);w.addGetterSetter(V,"hue",0,p(),w.afterSetFilter),w.addGetterSetter(V,"saturation",0,p(),w.afterSetFilter),w.addGetterSetter(V,"value",0,p(),w.afterSetFilter);function ci(t,e,i){var r=4*(i*t.width+e),a=[];return a.push(t.data[r++],t.data[r++],t.data[r++],t.data[r++]),a}function gi(t,e){return Math.sqrt(Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)+Math.pow(t[2]-e[2],2))}w.addGetterSetter(V,"kaleidoscopePower",2,p(),w.afterSetFilter),w.addGetterSetter(V,"kaleidoscopeAngle",0,p(),w.afterSetFilter);w.addGetterSetter(V,"threshold",0,p(),w.afterSetFilter);w.addGetterSetter(V,"noise",.2,p(),w.afterSetFilter);w.addGetterSetter(V,"pixelSize",8,p(),w.afterSetFilter);w.addGetterSetter(V,"levels",.5,p(),w.afterSetFilter);w.addGetterSetter(V,"red",0,(function(t){return this._filterUpToDate=!1,t>255?255:t<0?0:Math.round(t)})),w.addGetterSetter(V,"green",0,(function(t){return this._filterUpToDate=!1,t>255?255:t<0?0:Math.round(t)})),w.addGetterSetter(V,"blue",0,f,w.afterSetFilter);w.addGetterSetter(V,"red",0,(function(t){return this._filterUpToDate=!1,t>255?255:t<0?0:Math.round(t)})),w.addGetterSetter(V,"green",0,(function(t){return this._filterUpToDate=!1,t>255?255:t<0?0:Math.round(t)})),w.addGetterSetter(V,"blue",0,f,w.afterSetFilter),w.addGetterSetter(V,"alpha",1,(function(t){return this._filterUpToDate=!1,t>1?1:t<0?0:t}));w.addGetterSetter(V,"threshold",.5,p(),w.afterSetFilter);return Zt.Util._assign(Zt,{Arc:te,Arrow:ue,Circle:fe,Ellipse:pe,Image:ve,Label:we,Tag:Ce,Line:re,Path:ge,Rect:Pe,RegularPolygon:ke,Ring:Te,Sprite:Me,Star:Ge,Text:Xe,TextPath:Ve,Transformer:ni,Wedge:si,Filters:{Blur:function(t){var e=Math.round(this.blurRadius());e>0&&function(t,e){var i,r,a,n,s,o,h,l,d,c,g,u,f,p,v,m,_,y,x,b,S,w,C,P,k=t.data,A=t.width,T=t.height,M=e+e+1,G=A-1,R=T-1,E=e+1,D=E*(E+1)/2,L=new oi,O=null,I=L,F=null,B=null,N=hi[e],H=li[e];for(a=1;a<M;a++)I=I.next=new oi,a===E&&(O=I);for(I.next=L,h=o=0,r=0;r<T;r++){for(m=_=y=x=l=d=c=g=0,u=E*(b=k[o]),f=E*(S=k[o+1]),p=E*(w=k[o+2]),v=E*(C=k[o+3]),l+=D*b,d+=D*S,c+=D*w,g+=D*C,I=L,a=0;a<E;a++)I.r=b,I.g=S,I.b=w,I.a=C,I=I.next;for(a=1;a<E;a++)n=o+((G<a?G:a)<<2),l+=(I.r=b=k[n])*(P=E-a),d+=(I.g=S=k[n+1])*P,c+=(I.b=w=k[n+2])*P,g+=(I.a=C=k[n+3])*P,m+=b,_+=S,y+=w,x+=C,I=I.next;for(F=L,B=O,i=0;i<A;i++)k[o+3]=C=g*N>>H,0!==C?(C=255/C,k[o]=(l*N>>H)*C,k[o+1]=(d*N>>H)*C,k[o+2]=(c*N>>H)*C):k[o]=k[o+1]=k[o+2]=0,l-=u,d-=f,c-=p,g-=v,u-=F.r,f-=F.g,p-=F.b,v-=F.a,n=h+((n=i+e+1)<G?n:G)<<2,l+=m+=F.r=k[n],d+=_+=F.g=k[n+1],c+=y+=F.b=k[n+2],g+=x+=F.a=k[n+3],F=F.next,u+=b=B.r,f+=S=B.g,p+=w=B.b,v+=C=B.a,m-=b,_-=S,y-=w,x-=C,B=B.next,o+=4;h+=A}for(i=0;i<A;i++){for(_=y=x=m=d=c=g=l=0,u=E*(b=k[o=i<<2]),f=E*(S=k[o+1]),p=E*(w=k[o+2]),v=E*(C=k[o+3]),l+=D*b,d+=D*S,c+=D*w,g+=D*C,I=L,a=0;a<E;a++)I.r=b,I.g=S,I.b=w,I.a=C,I=I.next;for(s=A,a=1;a<=e;a++)o=s+i<<2,l+=(I.r=b=k[o])*(P=E-a),d+=(I.g=S=k[o+1])*P,c+=(I.b=w=k[o+2])*P,g+=(I.a=C=k[o+3])*P,m+=b,_+=S,y+=w,x+=C,I=I.next,a<R&&(s+=A);for(o=i,F=L,B=O,r=0;r<T;r++)k[3+(n=o<<2)]=C=g*N>>H,C>0?(C=255/C,k[n]=(l*N>>H)*C,k[n+1]=(d*N>>H)*C,k[n+2]=(c*N>>H)*C):k[n]=k[n+1]=k[n+2]=0,l-=u,d-=f,c-=p,g-=v,u-=F.r,f-=F.g,p-=F.b,v-=F.a,n=i+((n=r+E)<R?n:R)*A<<2,l+=m+=F.r=k[n],d+=_+=F.g=k[n+1],c+=y+=F.b=k[n+2],g+=x+=F.a=k[n+3],F=F.next,u+=b=B.r,f+=S=B.g,p+=w=B.b,v+=C=B.a,m-=b,_-=S,y-=w,x-=C,B=B.next,o+=A}}(t,e)},Brighten:function(t){var e,i=255*this.brightness(),r=t.data,a=r.length;for(e=0;e<a;e+=4)r[e]+=i,r[e+1]+=i,r[e+2]+=i},Contrast:function(t){var e,i=Math.pow((this.contrast()+100)/100,2),r=t.data,a=r.length,n=150,s=150,o=150;for(e=0;e<a;e+=4)n=r[e],s=r[e+1],o=r[e+2],n/=255,n-=.5,n*=i,n+=.5,s/=255,s-=.5,s*=i,s+=.5,o/=255,o-=.5,o*=i,o+=.5,n=(n*=255)<0?0:n>255?255:n,s=(s*=255)<0?0:s>255?255:s,o=(o*=255)<0?0:o>255?255:o,r[e]=n,r[e+1]=s,r[e+2]=o},Emboss:function(t){var e=10*this.embossStrength(),i=255*this.embossWhiteLevel(),r=this.embossDirection(),a=this.embossBlend(),n=0,s=0,o=t.data,h=t.width,l=t.height,d=4*h,c=l;switch(r){case"top-left":n=-1,s=-1;break;case"top":n=-1,s=0;break;case"top-right":n=-1,s=1;break;case"right":n=0,s=1;break;case"bottom-right":n=1,s=1;break;case"bottom":n=1,s=0;break;case"bottom-left":n=1,s=-1;break;case"left":n=0,s=-1;break;default:g.error("Unknown emboss direction: "+r)}do{var u=(c-1)*d,f=n;c+f<1&&(f=0),c+f>l&&(f=0);var p=(c-1+f)*h*4,v=h;do{var m=u+4*(v-1),_=s;v+_<1&&(_=0),v+_>h&&(_=0);var y=p+4*(v-1+_),x=o[m]-o[y],b=o[m+1]-o[y+1],S=o[m+2]-o[y+2],w=x,C=w>0?w:-w;if((b>0?b:-b)>C&&(w=b),(S>0?S:-S)>C&&(w=S),w*=e,a){var P=o[m]+w,k=o[m+1]+w,A=o[m+2]+w;o[m]=P>255?255:P<0?0:P,o[m+1]=k>255?255:k<0?0:k,o[m+2]=A>255?255:A<0?0:A}else{var T=i-w;T<0?T=0:T>255&&(T=255),o[m]=o[m+1]=o[m+2]=T}}while(--v)}while(--c)},Enhance:function(t){var e,i,r,a,n=t.data,s=n.length,o=n[0],h=o,l=n[1],d=l,c=n[2],g=c,u=this.enhance();if(0!==u){for(a=0;a<s;a+=4)(e=n[a+0])<o?o=e:e>h&&(h=e),(i=n[a+1])<l?l=i:i>d&&(d=i),(r=n[a+2])<c?c=r:r>g&&(g=r);var f,p,v,m,_,y,x,b,S;for(h===o&&(h=255,o=0),d===l&&(d=255,l=0),g===c&&(g=255,c=0),u>0?(p=h+u*(255-h),v=o-u*(o-0),_=d+u*(255-d),y=l-u*(l-0),b=g+u*(255-g),S=c-u*(c-0)):(p=h+u*(h-(f=.5*(h+o))),v=o+u*(o-f),_=d+u*(d-(m=.5*(d+l))),y=l+u*(l-m),b=g+u*(g-(x=.5*(g+c))),S=c+u*(c-x)),a=0;a<s;a+=4)n[a+0]=di(n[a+0],o,h,v,p),n[a+1]=di(n[a+1],l,d,y,_),n[a+2]=di(n[a+2],c,g,S,b)}},Grayscale:function(t){var e,i,r=t.data,a=r.length;for(e=0;e<a;e+=4)i=.34*r[e]+.5*r[e+1]+.16*r[e+2],r[e]=i,r[e+1]=i,r[e+2]=i},HSL:function(t){var e,i,r,a,n,s=t.data,o=s.length,h=Math.pow(2,this.saturation()),l=Math.abs(this.hue()+360)%360,d=127*this.luminance(),c=1*h*Math.cos(l*Math.PI/180),g=1*h*Math.sin(l*Math.PI/180),u=.299+.701*c+.167*g,f=.587-.587*c+.33*g,p=.114-.114*c-.497*g,v=.299-.299*c-.328*g,m=.587+.413*c+.035*g,_=.114-.114*c+.293*g,y=.299-.3*c+1.25*g,x=.587-.586*c-1.05*g,b=.114+.886*c-.2*g;for(e=0;e<o;e+=4)i=s[e+0],r=s[e+1],a=s[e+2],n=s[e+3],s[e+0]=u*i+f*r+p*a+d,s[e+1]=v*i+m*r+_*a+d,s[e+2]=y*i+x*r+b*a+d,s[e+3]=n},HSV:function(t){var e,i,r,a,n,s=t.data,o=s.length,h=Math.pow(2,this.value()),l=Math.pow(2,this.saturation()),d=Math.abs(this.hue()+360)%360,c=h*l*Math.cos(d*Math.PI/180),g=h*l*Math.sin(d*Math.PI/180),u=.299*h+.701*c+.167*g,f=.587*h-.587*c+.33*g,p=.114*h-.114*c-.497*g,v=.299*h-.299*c-.328*g,m=.587*h+.413*c+.035*g,_=.114*h-.114*c+.293*g,y=.299*h-.3*c+1.25*g,x=.587*h-.586*c-1.05*g,b=.114*h+.886*c-.2*g;for(e=0;e<o;e+=4)i=s[e+0],r=s[e+1],a=s[e+2],n=s[e+3],s[e+0]=u*i+f*r+p*a,s[e+1]=v*i+m*r+_*a,s[e+2]=y*i+x*r+b*a,s[e+3]=n},Invert:function(t){var e,i=t.data,r=i.length;for(e=0;e<r;e+=4)i[e]=255-i[e],i[e+1]=255-i[e+1],i[e+2]=255-i[e+2]},Kaleidoscope:function(t){var e,i,r,a,n,s,o,h,l,d=t.width,c=t.height,u=Math.round(this.kaleidoscopePower()),f=Math.round(this.kaleidoscopeAngle()),p=Math.floor(d*(f%360)/360);if(!(u<1)){var v=g.createCanvasElement();v.width=d,v.height=c;var m=v.getContext("2d").getImageData(0,0,d,c);g.releaseCanvas(v),function(t,e,i){var r,a,n,s,o=t.data,h=e.data,l=t.width,d=t.height,c=i.polarCenterX||l/2,g=i.polarCenterY||d/2,u=0,f=0,p=0,v=0,m=Math.sqrt(c*c+g*g);a=l-c,n=d-g,m=(s=Math.sqrt(a*a+n*n))>m?s:m;var _,y,x,b,S=d,w=l,C=360/w*Math.PI/180;for(y=0;y<w;y+=1)for(x=Math.sin(y*C),b=Math.cos(y*C),_=0;_<S;_+=1)a=Math.floor(c+m*_/S*b),u=o[0+(r=4*((n=Math.floor(g+m*_/S*x))*l+a))],f=o[r+1],p=o[r+2],v=o[r+3],h[0+(r=4*(y+_*l))]=u,h[r+1]=f,h[r+2]=p,h[r+3]=v}(t,m,{polarCenterX:d/2,polarCenterY:c/2});for(var _=d/Math.pow(2,u);_<=8;)_*=2,u-=1;var y=_=Math.ceil(_),x=0,b=y,S=1;for(p+_>d&&(x=y,b=0,S=-1),i=0;i<c;i+=1)for(e=x;e!==b;e+=S)h=4*(d*i+Math.round(e+p)%d),a=m.data[h+0],n=m.data[h+1],s=m.data[h+2],o=m.data[h+3],l=4*(d*i+e),m.data[l+0]=a,m.data[l+1]=n,m.data[l+2]=s,m.data[l+3]=o;for(i=0;i<c;i+=1)for(y=Math.floor(_),r=0;r<u;r+=1){for(e=0;e<y+1;e+=1)h=4*(d*i+e),a=m.data[h+0],n=m.data[h+1],s=m.data[h+2],o=m.data[h+3],l=4*(d*i+2*y-e-1),m.data[l+0]=a,m.data[l+1]=n,m.data[l+2]=s,m.data[l+3]=o;y*=2}!function(t,e,i){var r,a,n,s,o,h,l=t.data,d=e.data,c=t.width,g=t.height,u=i.polarCenterX||c/2,f=i.polarCenterY||g/2,p=0,v=0,m=0,_=0,y=Math.sqrt(u*u+f*f);a=c-u,n=g-f,y=(h=Math.sqrt(a*a+n*n))>y?h:y;var x,b,S,w=g,C=c;for(a=0;a<c;a+=1)for(n=0;n<g;n+=1)s=a-u,o=n-f,x=Math.sqrt(s*s+o*o)*w/y,b=(b=(180*Math.atan2(o,s)/Math.PI+360+0)%360)*C/360,S=Math.floor(b),p=l[0+(r=4*(Math.floor(x)*c+S))],v=l[r+1],m=l[r+2],_=l[r+3],d[0+(r=4*(n*c+a))]=p,d[r+1]=v,d[r+2]=m,d[r+3]=_}(m,t,{polarRotation:0})}},Mask:function(t){var e=function(t,e){var i=ci(t,0,0),r=ci(t,t.width-1,0),a=ci(t,0,t.height-1),n=ci(t,t.width-1,t.height-1),s=e||10;if(gi(i,r)<s&&gi(r,n)<s&&gi(n,a)<s&&gi(a,i)<s){for(var o=function(t){for(var e=[0,0,0],i=0;i<t.length;i++)e[0]+=t[i][0],e[1]+=t[i][1],e[2]+=t[i][2];return e[0]/=t.length,e[1]/=t.length,e[2]/=t.length,e}([r,i,n,a]),h=[],l=0;l<t.width*t.height;l++){var d=gi(o,[t.data[4*l],t.data[4*l+1],t.data[4*l+2]]);h[l]=d<s?0:255}return h}}(t,this.threshold());return e&&function(t,e){for(var i=0;i<t.width*t.height;i++)t.data[4*i+3]=e[i]}(t,e=function(t,e,i){for(var r=[1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9],a=Math.round(Math.sqrt(r.length)),n=Math.floor(a/2),s=[],o=0;o<i;o++)for(var h=0;h<e;h++){for(var l=o*e+h,d=0,c=0;c<a;c++)for(var g=0;g<a;g++){var u=o+c-n,f=h+g-n;if(u>=0&&u<i&&f>=0&&f<e){var p=r[c*a+g];d+=t[u*e+f]*p}}s[l]=d}return s}(e=function(t,e,i){for(var r=[1,1,1,1,1,1,1,1,1],a=Math.round(Math.sqrt(r.length)),n=Math.floor(a/2),s=[],o=0;o<i;o++)for(var h=0;h<e;h++){for(var l=o*e+h,d=0,c=0;c<a;c++)for(var g=0;g<a;g++){var u=o+c-n,f=h+g-n;if(u>=0&&u<i&&f>=0&&f<e){var p=r[c*a+g];d+=t[u*e+f]*p}}s[l]=d>=1020?255:0}return s}(e=function(t,e,i){for(var r=[1,1,1,1,0,1,1,1,1],a=Math.round(Math.sqrt(r.length)),n=Math.floor(a/2),s=[],o=0;o<i;o++)for(var h=0;h<e;h++){for(var l=o*e+h,d=0,c=0;c<a;c++)for(var g=0;g<a;g++){var u=o+c-n,f=h+g-n;if(u>=0&&u<i&&f>=0&&f<e){var p=r[c*a+g];d+=t[u*e+f]*p}}s[l]=2040===d?255:0}return s}(e,t.width,t.height),t.width,t.height),t.width,t.height)),t},Noise:function(t){var e,i=255*this.noise(),r=t.data,a=r.length,n=i/2;for(e=0;e<a;e+=4)r[e+0]+=n-2*n*Math.random(),r[e+1]+=n-2*n*Math.random(),r[e+2]+=n-2*n*Math.random()},Pixelate:function(t){var e,i,r,a,n,s,o,h,l,d,c,u,f,p,v=Math.ceil(this.pixelSize()),m=t.width,_=t.height,y=Math.ceil(m/v),x=Math.ceil(_/v),b=t.data;if(v<=0)g.error("pixelSize value can not be <= 0");else for(u=0;u<y;u+=1)for(f=0;f<x;f+=1){for(a=0,n=0,s=0,o=0,l=(h=u*v)+v,c=(d=f*v)+v,p=0,e=h;e<l;e+=1)if(!(e>=m))for(i=d;i<c;i+=1)i>=_||(a+=b[(r=4*(m*i+e))+0],n+=b[r+1],s+=b[r+2],o+=b[r+3],p+=1);for(a/=p,n/=p,s/=p,o/=p,e=h;e<l;e+=1)if(!(e>=m))for(i=d;i<c;i+=1)i>=_||(b[(r=4*(m*i+e))+0]=a,b[r+1]=n,b[r+2]=s,b[r+3]=o)}},Posterize:function(t){var e,i=Math.round(254*this.levels())+1,r=t.data,a=r.length,n=255/i;for(e=0;e<a;e+=1)r[e]=Math.floor(r[e]/n)*n},RGB:function(t){var e,i,r=t.data,a=r.length,n=this.red(),s=this.green(),o=this.blue();for(e=0;e<a;e+=4)i=(.34*r[e]+.5*r[e+1]+.16*r[e+2])/255,r[e]=i*n,r[e+1]=i*s,r[e+2]=i*o,r[e+3]=r[e+3]},RGBA:function(t){var e,i,r=t.data,a=r.length,n=this.red(),s=this.green(),o=this.blue(),h=this.alpha();for(e=0;e<a;e+=4)i=1-h,r[e]=n*h+r[e]*i,r[e+1]=s*h+r[e+1]*i,r[e+2]=o*h+r[e+2]*i},Sepia:function(t){var e,i,r,a,n=t.data,s=n.length;for(e=0;e<s;e+=4)i=n[e+0],r=n[e+1],a=n[e+2],n[e+0]=Math.min(255,.393*i+.769*r+.189*a),n[e+1]=Math.min(255,.349*i+.686*r+.168*a),n[e+2]=Math.min(255,.272*i+.534*r+.131*a)},Solarize:function(t){var e=t.data,i=t.width,r=4*i,a=t.height;do{var n=(a-1)*r,s=i;do{var o=n+4*(s-1),h=e[o],l=e[o+1],d=e[o+2];h>127&&(h=255-h),l>127&&(l=255-l),d>127&&(d=255-d),e[o]=h,e[o+1]=l,e[o+2]=d}while(--s)}while(--a)},Threshold:function(t){var e,i=255*this.threshold(),r=t.data,a=r.length;for(e=0;e<a;e+=1)r[e]=r[e]<i?0:255}}})}));
Index: imaps-frontend/node_modules/konva/lib/Animation.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/Animation.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Animation.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -117,5 +117,5 @@
             }
         }
-        for (const key in layerHash) {
+        for (let key in layerHash) {
             if (!layerHash.hasOwnProperty(key)) {
                 continue;
Index: imaps-frontend/node_modules/konva/lib/BezierFunctions.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/BezierFunctions.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/BezierFunctions.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -688,8 +688,9 @@
 exports.binomialCoefficients = [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1]];
 const getCubicArcLength = (xs, ys, t) => {
+    let z;
     let sum;
     let correctedT;
     const n = 20;
-    const z = t / 2;
+    z = t / 2;
     sum = 0;
     for (let i = 0; i < n; i++) {
Index: imaps-frontend/node_modules/konva/lib/Canvas.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/Canvas.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Canvas.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -7,13 +7,13 @@
 const Factory_1 = require("./Factory");
 const Validators_1 = require("./Validators");
-let _pixelRatio;
+var _pixelRatio;
 function getDevicePixelRatio() {
     if (_pixelRatio) {
         return _pixelRatio;
     }
-    const canvas = Util_1.Util.createCanvasElement();
-    const context = canvas.getContext('2d');
+    var canvas = Util_1.Util.createCanvasElement();
+    var context = canvas.getContext('2d');
     _pixelRatio = (function () {
-        const devicePixelRatio = Global_1.Konva._global.devicePixelRatio || 1, backingStoreRatio = context.webkitBackingStorePixelRatio ||
+        var devicePixelRatio = Global_1.Konva._global.devicePixelRatio || 1, backingStoreRatio = context.webkitBackingStorePixelRatio ||
             context.mozBackingStorePixelRatio ||
             context.msBackingStorePixelRatio ||
@@ -32,6 +32,6 @@
         this.height = 0;
         this.isCache = false;
-        const conf = config || {};
-        const pixelRatio = conf.pixelRatio || Global_1.Konva.pixelRatio || getDevicePixelRatio();
+        var conf = config || {};
+        var pixelRatio = conf.pixelRatio || Global_1.Konva.pixelRatio || getDevicePixelRatio();
         this.pixelRatio = pixelRatio;
         this._canvas = Util_1.Util.createCanvasElement();
@@ -51,5 +51,5 @@
     }
     setPixelRatio(pixelRatio) {
-        const previousRatio = this.pixelRatio;
+        var previousRatio = this.pixelRatio;
         this.pixelRatio = pixelRatio;
         this.setSize(this.getWidth() / previousRatio, this.getHeight() / previousRatio);
@@ -58,5 +58,5 @@
         this.width = this._canvas.width = width * this.pixelRatio;
         this._canvas.style.width = width + 'px';
-        const pixelRatio = this.pixelRatio, _context = this.getContext()._context;
+        var pixelRatio = this.pixelRatio, _context = this.getContext()._context;
         _context.scale(pixelRatio, pixelRatio);
     }
@@ -64,5 +64,5 @@
         this.height = this._canvas.height = height * this.pixelRatio;
         this._canvas.style.height = height + 'px';
-        const pixelRatio = this.pixelRatio, _context = this.getContext()._context;
+        var pixelRatio = this.pixelRatio, _context = this.getContext()._context;
         _context.scale(pixelRatio, pixelRatio);
     }
Index: imaps-frontend/node_modules/konva/lib/Container.d.ts
===================================================================
--- imaps-frontend/node_modules/konva/lib/Container.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Container.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -29,5 +29,5 @@
         attrs: any;
         className: string;
-        children?: Array<any>;
+        children?: any[] | undefined;
     };
     isAncestorOf(node: Node): boolean;
Index: imaps-frontend/node_modules/konva/lib/Container.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/Container.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Container.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -15,5 +15,5 @@
         }
         const children = this.children || [];
-        const results = [];
+        var results = [];
         children.forEach(function (child) {
             if (filterFunc(child)) {
@@ -51,5 +51,5 @@
         }
         if (children.length > 1) {
-            for (let i = 0; i < children.length; i++) {
+            for (var i = 0; i < children.length; i++) {
                 this.add(children[i]);
             }
@@ -83,9 +83,9 @@
     }
     findOne(selector) {
-        const result = this._generalFind(selector, true);
+        var result = this._generalFind(selector, true);
         return result.length > 0 ? result[0] : undefined;
     }
     _generalFind(selector, findOne) {
-        const retArr = [];
+        var retArr = [];
         this._descendants((node) => {
             const valid = node._isMatch(selector);
@@ -119,5 +119,5 @@
     }
     toObject() {
-        const obj = Node_1.Node.prototype.toObject.call(this);
+        var obj = Node_1.Node.prototype.toObject.call(this);
         obj.children = [];
         this.getChildren().forEach((child) => {
@@ -127,5 +127,5 @@
     }
     isAncestorOf(node) {
-        let parent = node.getParent();
+        var parent = node.getParent();
         while (parent) {
             if (parent._id === this._id) {
@@ -137,5 +137,5 @@
     }
     clone(obj) {
-        const node = Node_1.Node.prototype.clone.call(this, obj);
+        var node = Node_1.Node.prototype.clone.call(this, obj);
         this.getChildren().forEach(function (no) {
             node.add(no.clone());
@@ -144,5 +144,5 @@
     }
     getAllIntersections(pos) {
-        const arr = [];
+        var arr = [];
         this.find('Shape').forEach((shape) => {
             if (shape.isVisible() && shape.intersects(pos)) {
@@ -170,6 +170,6 @@
     }
     drawScene(can, top, bufferCanvas) {
-        const layer = this.getLayer(), canvas = can || (layer && layer.getCanvas()), context = canvas && canvas.getContext(), cachedCanvas = this._getCanvasCache(), cachedSceneCanvas = cachedCanvas && cachedCanvas.scene;
-        const caching = canvas && canvas.isCache;
+        var layer = this.getLayer(), canvas = can || (layer && layer.getCanvas()), context = canvas && canvas.getContext(), cachedCanvas = this._getCanvasCache(), cachedSceneCanvas = cachedCanvas && cachedCanvas.scene;
+        var caching = canvas && canvas.isCache;
         if (!this.isVisible() && !caching) {
             return this;
@@ -177,5 +177,5 @@
         if (cachedSceneCanvas) {
             context.save();
-            const m = this.getAbsoluteTransform(top).getMatrix();
+            var m = this.getAbsoluteTransform(top).getMatrix();
             context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
             this._drawCachedSceneCanvas(context);
@@ -191,8 +191,8 @@
             return this;
         }
-        const layer = this.getLayer(), canvas = can || (layer && layer.hitCanvas), context = canvas && canvas.getContext(), cachedCanvas = this._getCanvasCache(), cachedHitCanvas = cachedCanvas && cachedCanvas.hit;
+        var layer = this.getLayer(), canvas = can || (layer && layer.hitCanvas), context = canvas && canvas.getContext(), cachedCanvas = this._getCanvasCache(), cachedHitCanvas = cachedCanvas && cachedCanvas.hit;
         if (cachedHitCanvas) {
             context.save();
-            const m = this.getAbsoluteTransform(top).getMatrix();
+            var m = this.getAbsoluteTransform(top).getMatrix();
             context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
             this._drawCachedHitCanvas(context);
@@ -206,11 +206,11 @@
     _drawChildren(drawMethod, canvas, top, bufferCanvas) {
         var _a;
-        const context = canvas && canvas.getContext(), clipWidth = this.clipWidth(), clipHeight = this.clipHeight(), clipFunc = this.clipFunc(), hasClip = (typeof clipWidth === 'number' && typeof clipHeight === 'number') ||
+        var context = canvas && canvas.getContext(), clipWidth = this.clipWidth(), clipHeight = this.clipHeight(), clipFunc = this.clipFunc(), hasClip = (typeof clipWidth === 'number' && typeof clipHeight === 'number') ||
             clipFunc;
         const selfCache = top === this;
         if (hasClip) {
             context.save();
-            const transform = this.getAbsoluteTransform(top);
-            let m = transform.getMatrix();
+            var transform = this.getAbsoluteTransform(top);
+            var m = transform.getMatrix();
             context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
             context.beginPath();
@@ -220,6 +220,6 @@
             }
             else {
-                const clipX = this.clipX();
-                const clipY = this.clipY();
+                var clipX = this.clipX();
+                var clipY = this.clipY();
                 context.rect(clipX || 0, clipY || 0, clipWidth, clipHeight);
             }
@@ -228,5 +228,5 @@
             context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
         }
-        const hasComposition = !selfCache &&
+        var hasComposition = !selfCache &&
             this.globalCompositeOperation() !== 'source-over' &&
             drawMethod === 'drawScene';
@@ -247,8 +247,8 @@
     getClientRect(config = {}) {
         var _a;
-        const skipTransform = config.skipTransform;
-        const relativeTo = config.relativeTo;
-        let minX, minY, maxX, maxY;
-        let selfRect = {
+        var skipTransform = config.skipTransform;
+        var relativeTo = config.relativeTo;
+        var minX, minY, maxX, maxY;
+        var selfRect = {
             x: Infinity,
             y: Infinity,
@@ -256,10 +256,10 @@
             height: 0,
         };
-        const that = this;
+        var that = this;
         (_a = this.children) === null || _a === void 0 ? void 0 : _a.forEach(function (child) {
             if (!child.visible()) {
                 return;
             }
-            const rect = child.getClientRect({
+            var rect = child.getClientRect({
                 relativeTo: that,
                 skipShadow: config.skipShadow,
@@ -282,8 +282,8 @@
             }
         });
-        const shapes = this.find('Shape');
-        let hasVisible = false;
-        for (let i = 0; i < shapes.length; i++) {
-            const shape = shapes[i];
+        var shapes = this.find('Shape');
+        var hasVisible = false;
+        for (var i = 0; i < shapes.length; i++) {
+            var shape = shapes[i];
             if (shape._isVisible(this)) {
                 hasVisible = true;
Index: imaps-frontend/node_modules/konva/lib/Context.d.ts
===================================================================
--- imaps-frontend/node_modules/konva/lib/Context.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Context.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -3,5 +3,5 @@
 import { IRect } from './types.js';
 import type { Node } from './Node.js';
-declare const CONTEXT_PROPERTIES: readonly ["fillStyle", "strokeStyle", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY", "letterSpacing", "lineCap", "lineDashOffset", "lineJoin", "lineWidth", "miterLimit", "direction", "font", "textAlign", "textBaseline", "globalAlpha", "globalCompositeOperation", "imageSmoothingEnabled"];
+declare var CONTEXT_PROPERTIES: readonly ["fillStyle", "strokeStyle", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY", "letterSpacing", "lineCap", "lineDashOffset", "lineJoin", "lineWidth", "miterLimit", "direction", "font", "textAlign", "textBaseline", "globalAlpha", "globalCompositeOperation", "imageSmoothingEnabled"];
 interface ExtendedCanvasRenderingContext2D extends CanvasRenderingContext2D {
     letterSpacing: string;
@@ -10,5 +10,5 @@
     canvas: Canvas;
     _context: CanvasRenderingContext2D;
-    traceArr: Array<string>;
+    traceArr: Array<String>;
     constructor(canvas: Canvas);
     fillShape(shape: Shape): void;
Index: imaps-frontend/node_modules/konva/lib/Context.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/Context.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Context.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -5,5 +5,5 @@
 const Global_1 = require("./Global");
 function simplifyArray(arr) {
-    let retArr = [], len = arr.length, util = Util_1.Util, n, val;
+    var retArr = [], len = arr.length, util = Util_1.Util, n, val;
     for (n = 0; n < len; n++) {
         val = arr[n];
@@ -18,5 +18,5 @@
     return retArr;
 }
-const COMMA = ',', OPEN_PAREN = '(', CLOSE_PAREN = ')', OPEN_PAREN_BRACKET = '([', CLOSE_BRACKET_PAREN = '])', SEMICOLON = ';', DOUBLE_PAREN = '()', EQUALS = '=', CONTEXT_METHODS = [
+var COMMA = ',', OPEN_PAREN = '(', CLOSE_PAREN = ')', OPEN_PAREN_BRACKET = '([', CLOSE_BRACKET_PAREN = '])', SEMICOLON = ';', DOUBLE_PAREN = '()', EQUALS = '=', CONTEXT_METHODS = [
     'arc',
     'arcTo',
@@ -52,5 +52,5 @@
     'translate',
 ];
-const CONTEXT_PROPERTIES = [
+var CONTEXT_PROPERTIES = [
     'fillStyle',
     'strokeStyle',
@@ -107,5 +107,5 @@
     }
     getTrace(relaxed, rounded) {
-        let traceArr = this.traceArr, len = traceArr.length, str = '', n, trace, method, args;
+        var traceArr = this.traceArr, len = traceArr.length, str = '', n, trace, method, args;
         for (n = 0; n < len; n++) {
             trace = traceArr[n];
@@ -143,5 +143,5 @@
     }
     _trace(str) {
-        let traceArr = this.traceArr, len;
+        var traceArr = this.traceArr, len;
         traceArr.push(str);
         len = traceArr.length;
@@ -151,5 +151,5 @@
     }
     reset() {
-        const pixelRatio = this.getCanvas().getPixelRatio();
+        var pixelRatio = this.getCanvas().getPixelRatio();
         this.setTransform(1 * pixelRatio, 0, 0, 1 * pixelRatio, 0, 0);
     }
@@ -158,5 +158,5 @@
     }
     clear(bounds) {
-        const canvas = this.getCanvas();
+        var canvas = this.getCanvas();
         if (bounds) {
             this.clearRect(bounds.x || 0, bounds.y || 0, bounds.width || 0, bounds.height || 0);
@@ -173,5 +173,5 @@
     }
     _applyOpacity(shape) {
-        const absOpacity = shape.getAbsoluteOpacity();
+        var absOpacity = shape.getAbsoluteOpacity();
         if (absOpacity !== 1) {
             this.setAttr('globalAlpha', absOpacity);
@@ -209,5 +209,5 @@
     }
     createImageData(width, height) {
-        const a = arguments;
+        var a = arguments;
         if (a.length === 2) {
             return this._context.createImageData(width, height);
@@ -227,5 +227,5 @@
     }
     drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) {
-        const a = arguments, _context = this._context;
+        var a = arguments, _context = this._context;
         if (a.length === 3) {
             _context.drawImage(image, sx, sy);
@@ -335,7 +335,7 @@
     }
     _enableTrace() {
-        let that = this, len = CONTEXT_METHODS.length, origSetter = this.setAttr, n, args;
-        const func = function (methodName) {
-            let origMethod = that[methodName], ret;
+        var that = this, len = CONTEXT_METHODS.length, origSetter = this.setAttr, n, args;
+        var func = function (methodName) {
+            var origMethod = that[methodName], ret;
             that[methodName] = function () {
                 args = simplifyArray(Array.prototype.slice.call(arguments, 0));
@@ -353,6 +353,6 @@
         that.setAttr = function () {
             origSetter.apply(that, arguments);
-            const prop = arguments[0];
-            let val = arguments[1];
+            var prop = arguments[0];
+            var val = arguments[1];
             if (prop === 'shadowOffsetX' ||
                 prop === 'shadowOffsetY' ||
@@ -368,5 +368,5 @@
     _applyGlobalCompositeOperation(node) {
         const op = node.attrs.globalCompositeOperation;
-        const def = !op || op === 'source-over';
+        var def = !op || op === 'source-over';
         if (!def) {
             this.setAttr('globalCompositeOperation', op);
@@ -393,5 +393,5 @@
     }
     _fillColor(shape) {
-        const fill = shape.fill();
+        var fill = shape.fill();
         this.setAttr('fillStyle', fill);
         shape._fillFunc(this);
@@ -402,5 +402,5 @@
     }
     _fillLinearGradient(shape) {
-        const grd = shape._getLinearGradient();
+        var grd = shape._getLinearGradient();
         if (grd) {
             this.setAttr('fillStyle', grd);
@@ -452,5 +452,5 @@
         const start = shape.getStrokeLinearGradientStartPoint(), end = shape.getStrokeLinearGradientEndPoint(), colorStops = shape.getStrokeLinearGradientColorStops(), grd = this.createLinearGradient(start.x, start.y, end.x, end.y);
         if (colorStops) {
-            for (let n = 0; n < colorStops.length; n += 2) {
+            for (var n = 0; n < colorStops.length; n += 2) {
                 grd.addColorStop(colorStops[n], colorStops[n + 1]);
             }
@@ -459,9 +459,9 @@
     }
     _stroke(shape) {
-        const dash = shape.dash(), strokeScaleEnabled = shape.getStrokeScaleEnabled();
+        var dash = shape.dash(), strokeScaleEnabled = shape.getStrokeScaleEnabled();
         if (shape.hasStroke()) {
             if (!strokeScaleEnabled) {
                 this.save();
-                const pixelRatio = this.getCanvas().getPixelRatio();
+                var pixelRatio = this.getCanvas().getPixelRatio();
                 this.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
             }
@@ -475,5 +475,5 @@
                 this.setAttr('shadowColor', 'rgba(0,0,0,0)');
             }
-            const hasLinearGradient = shape.getStrokeLinearGradientColorStops();
+            var hasLinearGradient = shape.getStrokeLinearGradientColorStops();
             if (hasLinearGradient) {
                 this._strokeLinearGradient(shape);
@@ -490,5 +490,5 @@
     _applyShadow(shape) {
         var _a, _b, _c;
-        const color = (_a = shape.getShadowRGBA()) !== null && _a !== void 0 ? _a : 'black', blur = (_b = shape.getShadowBlur()) !== null && _b !== void 0 ? _b : 5, offset = (_c = shape.getShadowOffset()) !== null && _c !== void 0 ? _c : {
+        var color = (_a = shape.getShadowRGBA()) !== null && _a !== void 0 ? _a : 'black', blur = (_b = shape.getShadowBlur()) !== null && _b !== void 0 ? _b : 5, offset = (_c = shape.getShadowOffset()) !== null && _c !== void 0 ? _c : {
             x: 0,
             y: 0,
@@ -524,10 +524,10 @@
             if (!strokeScaleEnabled) {
                 this.save();
-                const pixelRatio = this.getCanvas().getPixelRatio();
+                var pixelRatio = this.getCanvas().getPixelRatio();
                 this.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
             }
             this._applyLineCap(shape);
-            const hitStrokeWidth = shape.hitStrokeWidth();
-            const strokeWidth = hitStrokeWidth === 'auto' ? shape.strokeWidth() : hitStrokeWidth;
+            var hitStrokeWidth = shape.hitStrokeWidth();
+            var strokeWidth = hitStrokeWidth === 'auto' ? shape.strokeWidth() : hitStrokeWidth;
             this.setAttr('lineWidth', strokeWidth);
             this.setAttr('strokeStyle', shape.colorKey);
Index: imaps-frontend/node_modules/konva/lib/DragAndDrop.d.ts
===================================================================
--- imaps-frontend/node_modules/konva/lib/DragAndDrop.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/DragAndDrop.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -9,6 +9,6 @@
         startPointerPos: Vector2d;
         offset: Vector2d;
-        pointerId?: number;
-        dragStatus: "ready" | "dragging" | "stopped";
+        pointerId?: number | undefined;
+        dragStatus: 'ready' | 'dragging' | 'stopped';
     }>;
     _drag(evt: any): void;
Index: imaps-frontend/node_modules/konva/lib/DragAndDrop.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/DragAndDrop.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/DragAndDrop.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -6,5 +6,5 @@
 exports.DD = {
     get isDragging() {
-        let flag = false;
+        var flag = false;
         exports.DD._dragElements.forEach((elem) => {
             if (elem.dragStatus === 'dragging') {
@@ -16,5 +16,5 @@
     justDragged: false,
     get node() {
-        let node;
+        var node;
         exports.DD._dragElements.forEach((elem) => {
             node = elem.node;
@@ -37,6 +37,6 @@
             }
             if (elem.dragStatus !== 'dragging') {
-                const dragDistance = node.dragDistance();
-                const distance = Math.max(Math.abs(pos.x - elem.startPointerPos.x), Math.abs(pos.y - elem.startPointerPos.y));
+                var dragDistance = node.dragDistance();
+                var distance = Math.max(Math.abs(pos.x - elem.startPointerPos.x), Math.abs(pos.y - elem.startPointerPos.y));
                 if (distance < dragDistance) {
                     return;
@@ -105,9 +105,7 @@
     window.addEventListener('mouseup', exports.DD._endDragBefore, true);
     window.addEventListener('touchend', exports.DD._endDragBefore, true);
-    window.addEventListener('touchcancel', exports.DD._endDragBefore, true);
     window.addEventListener('mousemove', exports.DD._drag);
     window.addEventListener('touchmove', exports.DD._drag);
     window.addEventListener('mouseup', exports.DD._endDragAfter, false);
     window.addEventListener('touchend', exports.DD._endDragAfter, false);
-    window.addEventListener('touchcancel', exports.DD._endDragAfter, false);
 }
Index: imaps-frontend/node_modules/konva/lib/Factory.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/Factory.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Factory.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -4,5 +4,5 @@
 const Util_1 = require("./Util");
 const Validators_1 = require("./Validators");
-const GET = 'get', SET = 'set';
+var GET = 'get', SET = 'set';
 exports.Factory = {
     addGetterSetter(constructor, attr, def, validator, after) {
@@ -12,14 +12,14 @@
     },
     addGetter(constructor, attr, def) {
-        const method = GET + Util_1.Util._capitalize(attr);
+        var method = GET + Util_1.Util._capitalize(attr);
         constructor.prototype[method] =
             constructor.prototype[method] ||
                 function () {
-                    const val = this.attrs[attr];
+                    var val = this.attrs[attr];
                     return val === undefined ? def : val;
                 };
     },
     addSetter(constructor, attr, validator, after) {
-        const method = SET + Util_1.Util._capitalize(attr);
+        var method = SET + Util_1.Util._capitalize(attr);
         if (!constructor.prototype[method]) {
             exports.Factory.overWriteSetter(constructor, attr, validator, after);
@@ -27,5 +27,5 @@
     },
     overWriteSetter(constructor, attr, validator, after) {
-        const method = SET + Util_1.Util._capitalize(attr);
+        var method = SET + Util_1.Util._capitalize(attr);
         constructor.prototype[method] = function (val) {
             if (validator && val !== undefined && val !== null) {
@@ -40,7 +40,7 @@
     },
     addComponentsGetterSetter(constructor, attr, components, validator, after) {
-        let len = components.length, capitalize = Util_1.Util._capitalize, getter = GET + capitalize(attr), setter = SET + capitalize(attr), n, component;
+        var len = components.length, capitalize = Util_1.Util._capitalize, getter = GET + capitalize(attr), setter = SET + capitalize(attr), n, component;
         constructor.prototype[getter] = function () {
-            const ret = {};
+            var ret = {};
             for (n = 0; n < len; n++) {
                 component = components[n];
@@ -49,7 +49,7 @@
             return ret;
         };
-        const basicValidator = (0, Validators_1.getComponentValidator)(components);
+        var basicValidator = (0, Validators_1.getComponentValidator)(components);
         constructor.prototype[setter] = function (val) {
-            let oldVal = this.attrs[attr], key;
+            var oldVal = this.attrs[attr], key;
             if (validator) {
                 val = validator.call(this, val);
@@ -78,5 +78,5 @@
     },
     addOverloadedGetterSetter(constructor, attr) {
-        const capitalizedAttr = Util_1.Util._capitalize(attr), setter = SET + capitalizedAttr, getter = GET + capitalizedAttr;
+        var capitalizedAttr = Util_1.Util._capitalize(attr), setter = SET + capitalizedAttr, getter = GET + capitalizedAttr;
         constructor.prototype[attr] = function () {
             if (arguments.length) {
@@ -89,10 +89,10 @@
     addDeprecatedGetterSetter(constructor, attr, def, validator) {
         Util_1.Util.error('Adding deprecated ' + attr);
-        const method = GET + Util_1.Util._capitalize(attr);
-        const message = attr +
+        var method = GET + Util_1.Util._capitalize(attr);
+        var message = attr +
             ' property is deprecated and will be removed soon. Look at Konva change log for more information.';
         constructor.prototype[method] = function () {
             Util_1.Util.error(message);
-            const val = this.attrs[attr];
+            var val = this.attrs[attr];
             return val === undefined ? def : val;
         };
@@ -104,7 +104,7 @@
     backCompat(constructor, methods) {
         Util_1.Util.each(methods, function (oldMethodName, newMethodName) {
-            const method = constructor.prototype[newMethodName];
-            const oldGetter = GET + Util_1.Util._capitalize(oldMethodName);
-            const oldSetter = SET + Util_1.Util._capitalize(oldMethodName);
+            var method = constructor.prototype[newMethodName];
+            var oldGetter = GET + Util_1.Util._capitalize(oldMethodName);
+            var oldSetter = SET + Util_1.Util._capitalize(oldMethodName);
             function deprecated() {
                 method.apply(this, arguments);
Index: imaps-frontend/node_modules/konva/lib/Global.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/Global.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Global.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -17,5 +17,5 @@
 exports.Konva = {
     _global: exports.glob,
-    version: '9.3.16',
+    version: '9.3.14',
     isBrowser: detectBrowser(),
     isUnminified: /param/.test(function (param) { }.toString()),
Index: imaps-frontend/node_modules/konva/lib/Group.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/Group.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Group.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -7,5 +7,5 @@
 class Group extends Container_1.Container {
     _validateAdd(child) {
-        const type = child.getType();
+        var type = child.getType();
         if (type !== 'Group' && type !== 'Shape') {
             Util_1.Util.throw('You may only add groups and shapes to groups.');
Index: imaps-frontend/node_modules/konva/lib/Layer.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/Layer.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Layer.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -10,5 +10,5 @@
 const Shape_1 = require("./Shape");
 const Global_1 = require("./Global");
-const HASH = '#', BEFORE_DRAW = 'beforeDraw', DRAW = 'draw', INTERSECTION_OFFSETS = [
+var HASH = '#', BEFORE_DRAW = 'beforeDraw', DRAW = 'draw', INTERSECTION_OFFSETS = [
     { x: 0, y: 0 },
     { x: -1, y: -1 },
@@ -53,5 +53,5 @@
     setZIndex(index) {
         super.setZIndex(index);
-        const stage = this.getStage();
+        var stage = this.getStage();
         if (stage && stage.content) {
             stage.content.removeChild(this.getNativeCanvasElement());
@@ -67,5 +67,5 @@
     moveToTop() {
         Node_1.Node.prototype.moveToTop.call(this);
-        const stage = this.getStage();
+        var stage = this.getStage();
         if (stage && stage.content) {
             stage.content.removeChild(this.getNativeCanvasElement());
@@ -75,9 +75,9 @@
     }
     moveUp() {
-        const moved = Node_1.Node.prototype.moveUp.call(this);
+        var moved = Node_1.Node.prototype.moveUp.call(this);
         if (!moved) {
             return false;
         }
-        const stage = this.getStage();
+        var stage = this.getStage();
         if (!stage || !stage.content) {
             return false;
@@ -94,7 +94,7 @@
     moveDown() {
         if (Node_1.Node.prototype.moveDown.call(this)) {
-            const stage = this.getStage();
+            var stage = this.getStage();
             if (stage) {
-                const children = stage.children;
+                var children = stage.children;
                 if (stage.content) {
                     stage.content.removeChild(this.getNativeCanvasElement());
@@ -108,7 +108,7 @@
     moveToBottom() {
         if (Node_1.Node.prototype.moveToBottom.call(this)) {
-            const stage = this.getStage();
+            var stage = this.getStage();
             if (stage) {
-                const children = stage.children;
+                var children = stage.children;
                 if (stage.content) {
                     stage.content.removeChild(this.getNativeCanvasElement());
@@ -124,5 +124,5 @@
     }
     remove() {
-        const _canvas = this.getNativeCanvasElement();
+        var _canvas = this.getNativeCanvasElement();
         Node_1.Node.prototype.remove.call(this);
         if (_canvas && _canvas.parentNode && Util_1.Util._isInDocument(_canvas)) {
@@ -141,5 +141,5 @@
     }
     _validateAdd(child) {
-        const type = child.getType();
+        var type = child.getType();
         if (type !== 'Group' && type !== 'Shape') {
             Util_1.Util.throw('You may only add groups and shapes to a layer.');
@@ -197,6 +197,6 @@
             return null;
         }
-        let spiralSearchDistance = 1;
-        let continueSearch = false;
+        var spiralSearchDistance = 1;
+        var continueSearch = false;
         while (true) {
             for (let i = 0; i < INTERSECTION_OFFSETS_LEN; i++) {
@@ -247,5 +247,5 @@
     }
     drawScene(can, top) {
-        const layer = this.getLayer(), canvas = can || (layer && layer.getCanvas());
+        var layer = this.getLayer(), canvas = can || (layer && layer.getCanvas());
         this._fire(BEFORE_DRAW, {
             node: this,
@@ -261,5 +261,5 @@
     }
     drawHit(can, top) {
-        const layer = this.getLayer(), canvas = can || (layer && layer.hitCanvas);
+        var layer = this.getLayer(), canvas = can || (layer && layer.hitCanvas);
         if (layer && layer.clearBeforeDraw()) {
             layer.getHitCanvas().getContext().clear();
@@ -288,6 +288,6 @@
             return;
         }
-        const parent = this.parent;
-        const added = !!this.hitCanvas._canvas.parentNode;
+        var parent = this.parent;
+        var added = !!this.hitCanvas._canvas.parentNode;
         if (added) {
             parent.content.removeChild(this.hitCanvas._canvas);
Index: imaps-frontend/node_modules/konva/lib/Node.d.ts
===================================================================
--- imaps-frontend/node_modules/konva/lib/Node.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Node.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -40,14 +40,14 @@
     [index: string]: any;
 };
-export interface KonvaEventObject<EventType, This = Node> {
+export interface KonvaEventObject<EventType> {
     type: string;
     target: Shape | Stage;
     evt: EventType;
     pointerId: number;
-    currentTarget: This;
+    currentTarget: Node;
     cancelBubble: boolean;
     child?: Node;
 }
-export type KonvaEventListener<This, EventType> = (this: This, ev: KonvaEventObject<EventType, This>) => void;
+export type KonvaEventListener<This, EventType> = (this: This, ev: KonvaEventObject<EventType>) => void;
 export declare abstract class Node<Config extends NodeConfig = NodeConfig> {
     _id: number;
@@ -181,5 +181,5 @@
         attrs: Config & Record<string, any>;
         className: string;
-        children?: Array<any>;
+        children?: any[] | undefined;
     };
     toJSON(): string;
@@ -320,5 +320,5 @@
     transformsEnabled: GetSet<string, this>;
     visible: GetSet<boolean, this>;
-    width: GetSet<number, this>;
+    width: number;
     height: GetSet<number, this>;
     x: GetSet<number, this>;
Index: imaps-frontend/node_modules/konva/lib/Node.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/Node.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Node.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -8,5 +8,5 @@
 const DragAndDrop_1 = require("./DragAndDrop");
 const Validators_1 = require("./Validators");
-const ABSOLUTE_OPACITY = 'absoluteOpacity', ALL_LISTENERS = 'allEventListeners', ABSOLUTE_TRANSFORM = 'absoluteTransform', ABSOLUTE_SCALE = 'absoluteScale', CANVAS = 'canvas', CHANGE = 'Change', CHILDREN = 'children', KONVA = 'konva', LISTENING = 'listening', MOUSEENTER = 'mouseenter', MOUSELEAVE = 'mouseleave', NAME = 'name', SET = 'set', SHAPE = 'Shape', SPACE = ' ', STAGE = 'stage', TRANSFORM = 'transform', UPPER_STAGE = 'Stage', VISIBLE = 'visible', TRANSFORM_CHANGE_STR = [
+var ABSOLUTE_OPACITY = 'absoluteOpacity', ALL_LISTENERS = 'allEventListeners', ABSOLUTE_TRANSFORM = 'absoluteTransform', ABSOLUTE_SCALE = 'absoluteScale', CANVAS = 'canvas', CHANGE = 'Change', CHILDREN = 'children', KONVA = 'konva', LISTENING = 'listening', MOUSEENTER = 'mouseenter', MOUSELEAVE = 'mouseleave', NAME = 'name', SET = 'set', SHAPE = 'Shape', SPACE = ' ', STAGE = 'stage', TRANSFORM = 'transform', UPPER_STAGE = 'Stage', VISIBLE = 'visible', TRANSFORM_CHANGE_STR = [
     'xChange.konva',
     'yChange.konva',
@@ -57,7 +57,7 @@
     }
     _getCache(attr, privateGetter) {
-        let cache = this._cache.get(attr);
-        const isTransform = attr === TRANSFORM || attr === ABSOLUTE_TRANSFORM;
-        const invalid = cache === undefined || (isTransform && cache.dirty === true);
+        var cache = this._cache.get(attr);
+        var isTransform = attr === TRANSFORM || attr === ABSOLUTE_TRANSFORM;
+        var invalid = cache === undefined || (isTransform && cache.dirty === true);
         if (invalid) {
             cache = privateGetter.call(this);
@@ -96,6 +96,6 @@
     }
     cache(config) {
-        const conf = config || {};
-        let rect = {};
+        var conf = config || {};
+        var rect = {};
         if (conf.x === undefined ||
             conf.y === undefined ||
@@ -107,5 +107,5 @@
             });
         }
-        let width = Math.ceil(conf.width || rect.width), height = Math.ceil(conf.height || rect.height), pixelRatio = conf.pixelRatio, x = conf.x === undefined ? Math.floor(rect.x) : conf.x, y = conf.y === undefined ? Math.floor(rect.y) : conf.y, offset = conf.offset || 0, drawBorder = conf.drawBorder || false, hitCanvasPixelRatio = conf.hitCanvasPixelRatio || 1;
+        var width = Math.ceil(conf.width || rect.width), height = Math.ceil(conf.height || rect.height), pixelRatio = conf.pixelRatio, x = conf.x === undefined ? Math.floor(rect.x) : conf.x, y = conf.y === undefined ? Math.floor(rect.y) : conf.y, offset = conf.offset || 0, drawBorder = conf.drawBorder || false, hitCanvasPixelRatio = conf.hitCanvasPixelRatio || 1;
         if (!width || !height) {
             Util_1.Util.error('Can not cache the node. Width or height of the node equals 0. Caching is skipped.');
@@ -118,5 +118,5 @@
         x -= offset;
         y -= offset;
-        const cachedSceneCanvas = new Canvas_1.SceneCanvas({
+        var cachedSceneCanvas = new Canvas_1.SceneCanvas({
             pixelRatio: pixelRatio,
             width: width,
@@ -179,5 +179,5 @@
     }
     _transformedRect(rect, top) {
-        const points = [
+        var points = [
             { x: rect.x, y: rect.y },
             { x: rect.x + rect.width, y: rect.y },
@@ -185,8 +185,8 @@
             { x: rect.x, y: rect.y + rect.height },
         ];
-        let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
-        const trans = this.getAbsoluteTransform(top);
+        var minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
+        var trans = this.getAbsoluteTransform(top);
         points.forEach(function (point) {
-            const transformed = trans.point(point);
+            var transformed = trans.point(point);
             if (minX === undefined) {
                 minX = maxX = transformed.x;
@@ -211,11 +211,11 @@
         const canvasCache = this._getCanvasCache();
         context.translate(canvasCache.x, canvasCache.y);
-        const cacheCanvas = this._getCachedSceneCanvas();
-        const ratio = cacheCanvas.pixelRatio;
+        var cacheCanvas = this._getCachedSceneCanvas();
+        var ratio = cacheCanvas.pixelRatio;
         context.drawImage(cacheCanvas._canvas, 0, 0, cacheCanvas.width / ratio, cacheCanvas.height / ratio);
         context.restore();
     }
     _drawCachedHitCanvas(context) {
-        const canvasCache = this._getCanvasCache(), hitCanvas = canvasCache.hit;
+        var canvasCache = this._getCanvasCache(), hitCanvas = canvasCache.hit;
         context.save();
         context.translate(canvasCache.x, canvasCache.y);
@@ -224,8 +224,8 @@
     }
     _getCachedSceneCanvas() {
-        let filters = this.filters(), cachedCanvas = this._getCanvasCache(), sceneCanvas = cachedCanvas.scene, filterCanvas = cachedCanvas.filter, filterContext = filterCanvas.getContext(), len, imageData, n, filter;
+        var filters = this.filters(), cachedCanvas = this._getCanvasCache(), sceneCanvas = cachedCanvas.scene, filterCanvas = cachedCanvas.filter, filterContext = filterCanvas.getContext(), len, imageData, n, filter;
         if (filters) {
             if (!this._filterUpToDate) {
-                const ratio = sceneCanvas.pixelRatio;
+                var ratio = sceneCanvas.pixelRatio;
                 filterCanvas.setSize(sceneCanvas.width / sceneCanvas.pixelRatio, sceneCanvas.height / sceneCanvas.pixelRatio);
                 try {
@@ -262,5 +262,5 @@
             return this._delegate.apply(this, arguments);
         }
-        let events = evtStr.split(SPACE), len = events.length, n, event, parts, baseEvent, name;
+        var events = evtStr.split(SPACE), len = events.length, n, event, parts, baseEvent, name;
         for (n = 0; n < len; n++) {
             event = events[n];
@@ -279,5 +279,5 @@
     }
     off(evtStr, callback) {
-        let events = (evtStr || '').split(SPACE), len = events.length, n, t, event, parts, baseEvent, name;
+        var events = (evtStr || '').split(SPACE), len = events.length, n, t, event, parts, baseEvent, name;
         this._cache && this._cache.delete(ALL_LISTENERS);
         if (!evtStr) {
@@ -305,5 +305,5 @@
     }
     dispatchEvent(evt) {
-        const e = {
+        var e = {
             target: this,
             type: evt.type,
@@ -324,8 +324,8 @@
     }
     _delegate(event, selector, handler) {
-        const stopNode = this;
+        var stopNode = this;
         this.on(event, function (evt) {
-            const targets = evt.target.findAncestors(selector, true, stopNode);
-            for (let i = 0; i < targets.length; i++) {
+            var targets = evt.target.findAncestors(selector, true, stopNode);
+            for (var i = 0; i < targets.length; i++) {
                 evt = Util_1.Util.cloneObject(evt);
                 evt.currentTarget = targets[i];
@@ -352,5 +352,5 @@
     _remove() {
         this._clearCaches();
-        const parent = this.getParent();
+        var parent = this.getParent();
         if (parent && parent.children) {
             parent.children.splice(this.index, 1);
@@ -365,5 +365,5 @@
     }
     getAttr(attr) {
-        const method = 'get' + Util_1.Util._capitalize(attr);
+        var method = 'get' + Util_1.Util._capitalize(attr);
         if (Util_1.Util._isFunction(this[method])) {
             return this[method]();
@@ -372,5 +372,5 @@
     }
     getAncestors() {
-        let parent = this.getParent(), ancestors = [];
+        var parent = this.getParent(), ancestors = [];
         while (parent) {
             ancestors.push(parent);
@@ -384,5 +384,5 @@
     setAttrs(config) {
         this._batchTransformChanges(() => {
-            let key, method;
+            var key, method;
             if (!config) {
                 return this;
@@ -439,6 +439,6 @@
             return this._isVisible(top) && this._isListening(top);
         }
-        const layer = this.getLayer();
-        let layerUnderDrag = false;
+        var layer = this.getLayer();
+        var layerUnderDrag = false;
         DragAndDrop_1.DD._dragElements.forEach((elem) => {
             if (elem.dragStatus !== 'dragging') {
@@ -452,5 +452,5 @@
             }
         });
-        const dragSkip = !skipDragCheck &&
+        var dragSkip = !skipDragCheck &&
             !Global_1.Konva.hitOnDragEnabled &&
             (layerUnderDrag || Global_1.Konva.isTransforming());
@@ -469,5 +469,5 @@
     }
     getAbsoluteZIndex() {
-        let depth = this.getDepth(), that = this, index = 0, nodes, len, n, child;
+        var depth = this.getDepth(), that = this, index = 0, nodes, len, n, child;
         function addChildren(children) {
             nodes = [];
@@ -494,5 +494,5 @@
     }
     getDepth() {
-        let depth = 0, parent = this.parent;
+        var depth = 0, parent = this.parent;
         while (parent) {
             depth++;
@@ -529,9 +529,9 @@
             return null;
         }
-        const pos = stage.getPointerPosition();
+        var pos = stage.getPointerPosition();
         if (!pos) {
             return null;
         }
-        const transform = this.getAbsoluteTransform().copy();
+        var transform = this.getAbsoluteTransform().copy();
         transform.invert();
         return transform.point(pos);
@@ -550,5 +550,5 @@
             top = true;
         }
-        const absoluteMatrix = this.getAbsoluteTransform(top).getMatrix(), absoluteTransform = new Util_1.Transform(), offset = this.offset();
+        var absoluteMatrix = this.getAbsoluteTransform(top).getMatrix(), absoluteTransform = new Util_1.Transform(), offset = this.offset();
         absoluteTransform.m = absoluteMatrix.slice();
         absoluteTransform.translate(offset.x, offset.y);
@@ -560,5 +560,5 @@
         this.attrs.y = y;
         this._clearCache(TRANSFORM);
-        const it = this._getAbsoluteTransform().copy();
+        var it = this._getAbsoluteTransform().copy();
         it.invert();
         it.translate(pos.x, pos.y);
@@ -574,5 +574,5 @@
     }
     _setTransform(trans) {
-        let key;
+        var key;
         for (key in trans) {
             this.attrs[key] = trans[key];
@@ -580,5 +580,5 @@
     }
     _clearTransform() {
-        const trans = {
+        var trans = {
             x: this.x(),
             y: this.y(),
@@ -603,5 +603,5 @@
     }
     move(change) {
-        let changeX = change.x, changeY = change.y, x = this.x(), y = this.y();
+        var changeX = change.x, changeY = change.y, x = this.x(), y = this.y();
         if (changeX !== undefined) {
             x += changeX;
@@ -614,5 +614,5 @@
     }
     _eachAncestorReverse(func, top) {
-        let family = [], parent = this.getParent(), len, n;
+        var family = [], parent = this.getParent(), len, n;
         if (top && top._id === this._id) {
             return;
@@ -637,5 +637,5 @@
             return false;
         }
-        const index = this.index, len = this.parent.getChildren().length;
+        var index = this.index, len = this.parent.getChildren().length;
         if (index < len - 1) {
             this.parent.children.splice(index, 1);
@@ -651,5 +651,5 @@
             return false;
         }
-        const index = this.index, len = this.parent.getChildren().length;
+        var index = this.index, len = this.parent.getChildren().length;
         if (index < len - 1) {
             this.parent.children.splice(index, 1);
@@ -665,5 +665,5 @@
             return false;
         }
-        const index = this.index;
+        var index = this.index;
         if (index > 0) {
             this.parent.children.splice(index, 1);
@@ -679,5 +679,5 @@
             return false;
         }
-        const index = this.index;
+        var index = this.index;
         if (index > 0) {
             this.parent.children.splice(index, 1);
@@ -700,5 +700,5 @@
                 '.');
         }
-        const index = this.index;
+        var index = this.index;
         this.parent.children.splice(index, 1);
         this.parent.children.splice(zIndex, 0, this);
@@ -710,6 +710,6 @@
     }
     _getAbsoluteOpacity() {
-        let absOpacity = this.opacity();
-        const parent = this.getParent();
+        var absOpacity = this.opacity();
+        var parent = this.getParent();
         if (parent && !parent._isUnderCache) {
             absOpacity *= parent.getAbsoluteOpacity();
@@ -725,5 +725,5 @@
     }
     toObject() {
-        let attrs = this.getAttrs(), key, val, getter, defaultValue, nonPlainObject;
+        var attrs = this.getAttrs(), key, val, getter, defaultValue, nonPlainObject;
         const obj = {
             attrs: {},
@@ -754,9 +754,9 @@
     }
     findAncestors(selector, includeSelf, stopNode) {
-        const res = [];
+        var res = [];
         if (includeSelf && this._isMatch(selector)) {
             res.push(this);
         }
-        let ancestor = this.parent;
+        var ancestor = this.parent;
         while (ancestor) {
             if (ancestor === stopNode) {
@@ -783,5 +783,5 @@
             return selector(this);
         }
-        let selectorArr = selector.replace(/ /g, '').split(','), len = selectorArr.length, n, sel;
+        var selectorArr = selector.replace(/ /g, '').split(','), len = selectorArr.length, n, sel;
         for (n = 0; n < len; n++) {
             sel = selectorArr[n];
@@ -810,5 +810,5 @@
     }
     getLayer() {
-        const parent = this.getParent();
+        var parent = this.getParent();
         return parent ? parent.getLayer() : null;
     }
@@ -817,5 +817,5 @@
     }
     _getStage() {
-        const parent = this.getParent();
+        var parent = this.getParent();
         if (parent) {
             return parent.getStage();
@@ -844,9 +844,9 @@
     }
     _getAbsoluteTransform(top) {
-        let at;
+        var at;
         if (top) {
             at = new Util_1.Transform();
             this._eachAncestorReverse(function (node) {
-                const transformsEnabled = node.transformsEnabled();
+                var transformsEnabled = node.transformsEnabled();
                 if (transformsEnabled === 'all') {
                     at.multiply(node.getTransform());
@@ -866,5 +866,5 @@
                 at.reset();
             }
-            const transformsEnabled = this.transformsEnabled();
+            var transformsEnabled = this.transformsEnabled();
             if (transformsEnabled === 'all') {
                 at.multiply(this.getTransform());
@@ -882,5 +882,5 @@
     }
     getAbsoluteScale(top) {
-        let parent = this;
+        var parent = this;
         while (parent) {
             if (parent._isUnderCache) {
@@ -904,7 +904,7 @@
     _getTransform() {
         var _a, _b;
-        const m = this._cache.get(TRANSFORM) || new Util_1.Transform();
+        var m = this._cache.get(TRANSFORM) || new Util_1.Transform();
         m.reset();
-        const x = this.x(), y = this.y(), rotation = Global_1.Konva.getAngle(this.rotation()), scaleX = (_a = this.attrs.scaleX) !== null && _a !== void 0 ? _a : 1, scaleY = (_b = this.attrs.scaleY) !== null && _b !== void 0 ? _b : 1, skewX = this.attrs.skewX || 0, skewY = this.attrs.skewY || 0, offsetX = this.attrs.offsetX || 0, offsetY = this.attrs.offsetY || 0;
+        var x = this.x(), y = this.y(), rotation = Global_1.Konva.getAngle(this.rotation()), scaleX = (_a = this.attrs.scaleX) !== null && _a !== void 0 ? _a : 1, scaleY = (_b = this.attrs.scaleY) !== null && _b !== void 0 ? _b : 1, skewX = this.attrs.skewX || 0, skewY = this.attrs.skewY || 0, offsetX = this.attrs.offsetX || 0, offsetY = this.attrs.offsetY || 0;
         if (x !== 0 || y !== 0) {
             m.translate(x, y);
@@ -926,9 +926,9 @@
     }
     clone(obj) {
-        let attrs = Util_1.Util.cloneObject(this.attrs), key, allListeners, len, n, listener;
+        var attrs = Util_1.Util.cloneObject(this.attrs), key, allListeners, len, n, listener;
         for (key in obj) {
             attrs[key] = obj[key];
         }
-        const node = new this.constructor(attrs);
+        var node = new this.constructor(attrs);
         for (key in this.eventListeners) {
             allListeners = this.eventListeners[key];
@@ -948,6 +948,6 @@
     _toKonvaCanvas(config) {
         config = config || {};
-        const box = this.getClientRect();
-        const stage = this.getStage(), x = config.x !== undefined ? config.x : Math.floor(box.x), y = config.y !== undefined ? config.y : Math.floor(box.y), pixelRatio = config.pixelRatio || 1, canvas = new Canvas_1.SceneCanvas({
+        var box = this.getClientRect();
+        var stage = this.getStage(), x = config.x !== undefined ? config.x : Math.floor(box.x), y = config.y !== undefined ? config.y : Math.floor(box.y), pixelRatio = config.pixelRatio || 1, canvas = new Canvas_1.SceneCanvas({
             width: config.width || Math.ceil(box.width) || (stage ? stage.width() : 0),
             height: config.height ||
@@ -977,6 +977,6 @@
     toDataURL(config) {
         config = config || {};
-        const mimeType = config.mimeType || null, quality = config.quality || null;
-        const url = this._toKonvaCanvas(config).toDataURL(mimeType, quality);
+        var mimeType = config.mimeType || null, quality = config.quality || null;
+        var url = this._toKonvaCanvas(config).toDataURL(mimeType, quality);
         if (config.callback) {
             config.callback(url);
@@ -1045,5 +1045,5 @@
     }
     _off(type, name, callback) {
-        let evtListeners = this.eventListeners[type], i, evtName, handler;
+        var evtListeners = this.eventListeners[type], i, evtName, handler;
         for (i = 0; i < evtListeners.length; i++) {
             evtName = evtListeners[i].name;
@@ -1069,6 +1069,6 @@
     addName(name) {
         if (!this.hasName(name)) {
-            const oldName = this.name();
-            const newName = oldName ? oldName + ' ' + name : name;
+            var oldName = this.name();
+            var newName = oldName ? oldName + ' ' + name : name;
             this.name(newName);
         }
@@ -1083,10 +1083,10 @@
             return false;
         }
-        const names = (fullName || '').split(/\s/g);
+        var names = (fullName || '').split(/\s/g);
         return names.indexOf(name) !== -1;
     }
     removeName(name) {
-        const names = (this.name() || '').split(/\s/g);
-        const index = names.indexOf(name);
+        var names = (this.name() || '').split(/\s/g);
+        var index = names.indexOf(name);
         if (index !== -1) {
             names.splice(index, 1);
@@ -1096,5 +1096,5 @@
     }
     setAttr(attr, val) {
-        const func = this[SET + Util_1.Util._capitalize(attr)];
+        var func = this[SET + Util_1.Util._capitalize(attr)];
         if (Util_1.Util._isFunction(func)) {
             func.call(this, val);
@@ -1112,5 +1112,5 @@
     }
     _setAttr(key, val) {
-        const oldVal = this.attrs[key];
+        var oldVal = this.attrs[key];
         if (oldVal === val && !Util_1.Util.isObject(val)) {
             return;
@@ -1128,5 +1128,5 @@
     }
     _setComponentAttr(key, component, val) {
-        let oldVal;
+        var oldVal;
         if (val !== undefined) {
             oldVal = this.attrs[key];
@@ -1142,5 +1142,5 @@
             evt.target = this;
         }
-        const shouldStop = (eventType === MOUSEENTER || eventType === MOUSELEAVE) &&
+        var shouldStop = (eventType === MOUSEENTER || eventType === MOUSELEAVE) &&
             ((compareShape &&
                 (this === compareShape ||
@@ -1149,5 +1149,5 @@
         if (!shouldStop) {
             this._fire(eventType, evt);
-            const stopBubble = (eventType === MOUSEENTER || eventType === MOUSELEAVE) &&
+            var stopBubble = (eventType === MOUSEENTER || eventType === MOUSELEAVE) &&
                 compareShape &&
                 compareShape.isAncestorOf &&
@@ -1207,11 +1207,11 @@
     }
     _createDragElement(evt) {
-        const pointerId = evt ? evt.pointerId : undefined;
-        const stage = this.getStage();
-        const ap = this.getAbsolutePosition();
+        var pointerId = evt ? evt.pointerId : undefined;
+        var stage = this.getStage();
+        var ap = this.getAbsolutePosition();
         if (!stage) {
             return;
         }
-        const pos = stage._getPointerById(pointerId) ||
+        var pos = stage._getPointerById(pointerId) ||
             stage._changedPointerPositions[0] ||
             ap;
@@ -1244,9 +1244,9 @@
             return;
         }
-        let newNodePos = {
+        var newNodePos = {
             x: pos.x - elem.offset.x,
             y: pos.y - elem.offset.y,
         };
-        const dbf = this.dragBoundFunc();
+        var dbf = this.dragBoundFunc();
         if (dbf !== undefined) {
             const bounded = dbf.call(this, newNodePos, evt);
@@ -1285,6 +1285,6 @@
         this._dragCleanup();
         this.on('mousedown.konva touchstart.konva', function (evt) {
-            const shouldCheckButton = evt.evt['button'] !== undefined;
-            const canDrag = !shouldCheckButton || Global_1.Konva.dragButtons.indexOf(evt.evt['button']) >= 0;
+            var shouldCheckButton = evt.evt['button'] !== undefined;
+            var canDrag = !shouldCheckButton || Global_1.Konva.dragButtons.indexOf(evt.evt['button']) >= 0;
             if (!canDrag) {
                 return;
@@ -1293,5 +1293,5 @@
                 return;
             }
-            let hasDraggingChild = false;
+            var hasDraggingChild = false;
             DragAndDrop_1.DD._dragElements.forEach((elem) => {
                 if (this.isAncestorOf(elem.node)) {
@@ -1310,5 +1310,5 @@
         else {
             this._dragCleanup();
-            const stage = this.getStage();
+            var stage = this.getStage();
             if (!stage) {
                 return;
@@ -1349,5 +1349,5 @@
     }
     static _createNode(obj, container) {
-        let className = Node.prototype.getClassName.call(obj), children = obj.children, no, len, n;
+        var className = Node.prototype.getClassName.call(obj), children = obj.children, no, len, n;
         if (container) {
             obj.attrs.container = container;
Index: imaps-frontend/node_modules/konva/lib/PointerEvents.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/PointerEvents.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/PointerEvents.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -1,9 +1,5 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.getCapturedShape = getCapturedShape;
-exports.createEvent = createEvent;
-exports.hasPointerCapture = hasPointerCapture;
-exports.setPointerCapture = setPointerCapture;
-exports.releaseCapture = releaseCapture;
+exports.releaseCapture = exports.setPointerCapture = exports.hasPointerCapture = exports.createEvent = exports.getCapturedShape = void 0;
 const Global_1 = require("./Global");
 const Captures = new Map();
@@ -12,4 +8,5 @@
     return Captures.get(pointerId);
 }
+exports.getCapturedShape = getCapturedShape;
 function createEvent(evt) {
     return {
@@ -18,7 +15,9 @@
     };
 }
+exports.createEvent = createEvent;
 function hasPointerCapture(pointerId, shape) {
     return Captures.get(pointerId) === shape;
 }
+exports.hasPointerCapture = hasPointerCapture;
 function setPointerCapture(pointerId, shape) {
     releaseCapture(pointerId);
@@ -31,4 +30,5 @@
     }
 }
+exports.setPointerCapture = setPointerCapture;
 function releaseCapture(pointerId, target) {
     const shape = Captures.get(pointerId);
@@ -43,2 +43,3 @@
     }
 }
+exports.releaseCapture = releaseCapture;
Index: imaps-frontend/node_modules/konva/lib/Shape.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/Shape.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Shape.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -9,9 +9,9 @@
 const Global_2 = require("./Global");
 const PointerEvents = require("./PointerEvents");
-const HAS_SHADOW = 'hasShadow';
-const SHADOW_RGBA = 'shadowRGBA';
-const patternImage = 'patternImage';
-const linearGradient = 'linearGradient';
-const radialGradient = 'radialGradient';
+var HAS_SHADOW = 'hasShadow';
+var SHADOW_RGBA = 'shadowRGBA';
+var patternImage = 'patternImage';
+var linearGradient = 'linearGradient';
+var radialGradient = 'radialGradient';
 let dummyContext;
 function getDummyContext() {
@@ -105,5 +105,5 @@
     __getFillPattern() {
         if (this.fillPatternImage()) {
-            const ctx = getDummyContext();
+            var ctx = getDummyContext();
             const pattern = ctx.createPattern(this.fillPatternImage(), this.fillPatternRepeat() || 'repeat');
             if (pattern && pattern.setTransform) {
@@ -133,11 +133,11 @@
     }
     __getLinearGradient() {
-        const colorStops = this.fillLinearGradientColorStops();
+        var colorStops = this.fillLinearGradientColorStops();
         if (colorStops) {
-            const ctx = getDummyContext();
-            const start = this.fillLinearGradientStartPoint();
-            const end = this.fillLinearGradientEndPoint();
-            const grd = ctx.createLinearGradient(start.x, start.y, end.x, end.y);
-            for (let n = 0; n < colorStops.length; n += 2) {
+            var ctx = getDummyContext();
+            var start = this.fillLinearGradientStartPoint();
+            var end = this.fillLinearGradientEndPoint();
+            var grd = ctx.createLinearGradient(start.x, start.y, end.x, end.y);
+            for (var n = 0; n < colorStops.length; n += 2) {
                 grd.addColorStop(colorStops[n], colorStops[n + 1]);
             }
@@ -149,11 +149,11 @@
     }
     __getRadialGradient() {
-        const colorStops = this.fillRadialGradientColorStops();
+        var colorStops = this.fillRadialGradientColorStops();
         if (colorStops) {
-            const ctx = getDummyContext();
-            const start = this.fillRadialGradientStartPoint();
-            const end = this.fillRadialGradientEndPoint();
-            const grd = ctx.createRadialGradient(start.x, start.y, this.fillRadialGradientStartRadius(), end.x, end.y, this.fillRadialGradientEndRadius());
-            for (let n = 0; n < colorStops.length; n += 2) {
+            var ctx = getDummyContext();
+            var start = this.fillRadialGradientStartPoint();
+            var end = this.fillRadialGradientEndPoint();
+            var grd = ctx.createRadialGradient(start.x, start.y, this.fillRadialGradientStartRadius(), end.x, end.y, this.fillRadialGradientEndRadius());
+            for (var n = 0; n < colorStops.length; n += 2) {
                 grd.addColorStop(colorStops[n], colorStops[n + 1]);
             }
@@ -168,5 +168,5 @@
             return;
         }
-        const rgba = Util_1.Util.colorToRGBA(this.shadowColor());
+        var rgba = Util_1.Util.colorToRGBA(this.shadowColor());
         if (rgba) {
             return ('rgba(' +
@@ -216,5 +216,5 @@
     }
     intersects(point) {
-        const stage = this.getStage();
+        var stage = this.getStage();
         if (!stage) {
             return false;
@@ -269,5 +269,5 @@
     }
     getSelfRect() {
-        const size = this.size();
+        var size = this.size();
         return {
             x: this._centroid ? -size.width / 2 : 0,
@@ -318,8 +318,8 @@
     }
     drawScene(can, top, bufferCanvas) {
-        const layer = this.getLayer();
-        let canvas = can || layer.getCanvas(), context = canvas.getContext(), cachedCanvas = this._getCanvasCache(), drawFunc = this.getSceneFunc(), hasShadow = this.hasShadow(), stage, bufferContext;
-        const skipBuffer = canvas.isCache;
-        const cachingSelf = top === this;
+        var layer = this.getLayer();
+        var canvas = can || layer.getCanvas(), context = canvas.getContext(), cachedCanvas = this._getCanvasCache(), drawFunc = this.getSceneFunc(), hasShadow = this.hasShadow(), stage, bufferContext;
+        var skipBuffer = canvas.isCache;
+        var cachingSelf = top === this;
         if (!this.isVisible() && !cachingSelf) {
             return this;
@@ -327,5 +327,5 @@
         if (cachedCanvas) {
             context.save();
-            const m = this.getAbsoluteTransform(top).getMatrix();
+            var m = this.getAbsoluteTransform(top).getMatrix();
             context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
             this._drawCachedSceneCanvas(context);
@@ -348,5 +348,5 @@
             drawFunc.call(this, bufferContext, this);
             bufferContext.restore();
-            const ratio = bc.pixelRatio;
+            var ratio = bc.pixelRatio;
             if (hasShadow) {
                 context._applyShadow(this);
@@ -376,5 +376,5 @@
             return this;
         }
-        const layer = this.getLayer(), canvas = can || layer.hitCanvas, context = canvas && canvas.getContext(), drawFunc = this.hitFunc() || this.sceneFunc(), cachedCanvas = this._getCanvasCache(), cachedHitCanvas = cachedCanvas && cachedCanvas.hit;
+        var layer = this.getLayer(), canvas = can || layer.hitCanvas, context = canvas && canvas.getContext(), drawFunc = this.hitFunc() || this.sceneFunc(), cachedCanvas = this._getCanvasCache(), cachedHitCanvas = cachedCanvas && cachedCanvas.hit;
         if (!this.colorKey) {
             Util_1.Util.warn('Looks like your canvas has a destroyed shape in it. Do not reuse shape after you destroyed it. If you want to reuse shape you should call remove() instead of destroy()');
@@ -382,5 +382,5 @@
         if (cachedHitCanvas) {
             context.save();
-            const m = this.getAbsoluteTransform(top).getMatrix();
+            var m = this.getAbsoluteTransform(top).getMatrix();
             context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
             this._drawCachedHitCanvas(context);
@@ -395,5 +395,5 @@
         const selfCache = this === top;
         if (!selfCache) {
-            const o = this.getAbsoluteTransform(top).getMatrix();
+            var o = this.getAbsoluteTransform(top).getMatrix();
             context.transform(o[0], o[1], o[2], o[3], o[4], o[5]);
         }
@@ -403,5 +403,5 @@
     }
     drawHitFromCache(alphaThreshold = 0) {
-        let cachedCanvas = this._getCanvasCache(), sceneCanvas = this._getCachedSceneCanvas(), hitCanvas = cachedCanvas.hit, hitContext = hitCanvas.getContext(), hitWidth = hitCanvas.getWidth(), hitHeight = hitCanvas.getHeight(), hitImageData, hitData, len, rgbColorKey, i, alpha;
+        var cachedCanvas = this._getCanvasCache(), sceneCanvas = this._getCachedSceneCanvas(), hitCanvas = cachedCanvas.hit, hitContext = hitCanvas.getContext(), hitWidth = hitCanvas.getWidth(), hitHeight = hitCanvas.getHeight(), hitImageData, hitData, len, rgbColorKey, i, alpha;
         hitContext.clear();
         hitContext.drawImage(sceneCanvas._canvas, 0, 0, hitWidth, hitHeight);
Index: imaps-frontend/node_modules/konva/lib/Stage.d.ts
===================================================================
--- imaps-frontend/node_modules/konva/lib/Stage.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Stage.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -5,5 +5,5 @@
 import { Layer } from './Layer.js';
 export interface StageConfig extends ContainerConfig {
-    container?: HTMLDivElement | string;
+    container: HTMLDivElement | string;
 }
 export declare const stages: Stage[];
@@ -41,8 +41,8 @@
     getPointerPosition(): Vector2d | null;
     _getPointerById(id?: number): (Vector2d & {
-        id?: number;
+        id?: number | undefined;
     }) | undefined;
     getPointersPositions(): (Vector2d & {
-        id?: number;
+        id?: number | undefined;
     })[];
     getStage(): this;
Index: imaps-frontend/node_modules/konva/lib/Stage.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/Stage.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Stage.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -10,5 +10,5 @@
 const Global_2 = require("./Global");
 const PointerEvents = require("./PointerEvents");
-const STAGE = 'Stage', STRING = 'string', PX = 'px', MOUSEOUT = 'mouseout', MOUSELEAVE = 'mouseleave', MOUSEOVER = 'mouseover', MOUSEENTER = 'mouseenter', MOUSEMOVE = 'mousemove', MOUSEDOWN = 'mousedown', MOUSEUP = 'mouseup', POINTERMOVE = 'pointermove', POINTERDOWN = 'pointerdown', POINTERUP = 'pointerup', POINTERCANCEL = 'pointercancel', LOSTPOINTERCAPTURE = 'lostpointercapture', POINTEROUT = 'pointerout', POINTERLEAVE = 'pointerleave', POINTEROVER = 'pointerover', POINTERENTER = 'pointerenter', CONTEXTMENU = 'contextmenu', TOUCHSTART = 'touchstart', TOUCHEND = 'touchend', TOUCHMOVE = 'touchmove', TOUCHCANCEL = 'touchcancel', WHEEL = 'wheel', MAX_LAYERS_NUMBER = 5, EVENTS = [
+var STAGE = 'Stage', STRING = 'string', PX = 'px', MOUSEOUT = 'mouseout', MOUSELEAVE = 'mouseleave', MOUSEOVER = 'mouseover', MOUSEENTER = 'mouseenter', MOUSEMOVE = 'mousemove', MOUSEDOWN = 'mousedown', MOUSEUP = 'mouseup', POINTERMOVE = 'pointermove', POINTERDOWN = 'pointerdown', POINTERUP = 'pointerup', POINTERCANCEL = 'pointercancel', LOSTPOINTERCAPTURE = 'lostpointercapture', POINTEROUT = 'pointerout', POINTERLEAVE = 'pointerleave', POINTEROVER = 'pointerover', POINTERENTER = 'pointerenter', CONTEXTMENU = 'contextmenu', TOUCHSTART = 'touchstart', TOUCHEND = 'touchend', TOUCHMOVE = 'touchmove', TOUCHCANCEL = 'touchcancel', WHEEL = 'wheel', MAX_LAYERS_NUMBER = 5, EVENTS = [
     [MOUSEENTER, '_pointerenter'],
     [MOUSEDOWN, '_pointerdown'],
@@ -129,5 +129,5 @@
         if (typeof container === STRING) {
             if (container.charAt(0) === '.') {
-                const className = container.slice(1);
+                var className = container.slice(1);
                 container = document.getElementsByClassName(className)[0];
             }
@@ -159,5 +159,5 @@
     }
     clear() {
-        let layers = this.children, len = layers.length, n;
+        var layers = this.children, len = layers.length, n;
         for (n = 0; n < len; n++) {
             layers[n].clear();
@@ -175,9 +175,9 @@
     destroy() {
         super.destroy();
-        const content = this.content;
+        var content = this.content;
         if (content && Util_1.Util._isInDocument(content)) {
             this.container().removeChild(content);
         }
-        const index = exports.stages.indexOf(this);
+        var index = exports.stages.indexOf(this);
         if (index > -1) {
             exports.stages.splice(index, 1);
@@ -215,11 +215,11 @@
         config.width = config.width || this.width();
         config.height = config.height || this.height();
-        const canvas = new Canvas_1.SceneCanvas({
+        var canvas = new Canvas_1.SceneCanvas({
             width: config.width,
             height: config.height,
             pixelRatio: config.pixelRatio || 1,
         });
-        const _context = canvas.getContext()._context;
-        const layers = this.children;
+        var _context = canvas.getContext()._context;
+        var layers = this.children;
         if (config.x || config.y) {
             _context.translate(-1 * config.x, -1 * config.y);
@@ -229,5 +229,5 @@
                 return;
             }
-            const layerCanvas = layer._toKonvaCanvas(config);
+            var layerCanvas = layer._toKonvaCanvas(config);
             _context.drawImage(layerCanvas._canvas, config.x, config.y, layerCanvas.getWidth() / layerCanvas.getPixelRatio(), layerCanvas.getHeight() / layerCanvas.getPixelRatio());
         });
@@ -238,5 +238,5 @@
             return null;
         }
-        let layers = this.children, len = layers.length, end = len - 1, n;
+        var layers = this.children, len = layers.length, end = len - 1, n;
         for (n = end; n >= 0; n--) {
             const shape = layers[n].getIntersection(pos);
@@ -248,6 +248,6 @@
     }
     _resizeDOM() {
-        const width = this.width();
-        const height = this.height();
+        var width = this.width();
+        var height = this.height();
         if (this.content) {
             this.content.style.width = width + PX;
@@ -263,5 +263,5 @@
     add(layer, ...rest) {
         if (arguments.length > 1) {
-            for (let i = 0; i < arguments.length; i++) {
+            for (var i = 0; i < arguments.length; i++) {
                 this.add(arguments[i]);
             }
@@ -269,5 +269,5 @@
         }
         super.add(layer);
-        const length = this.children.length;
+        var length = this.children.length;
         if (length > MAX_LAYERS_NUMBER) {
             Util_1.Util.warn('The stage has ' +
@@ -346,6 +346,6 @@
         }
         this.setPointersPositions(evt);
-        const targetShape = this._getTargetShape(eventType);
-        const eventsEnabled = !(Global_1.Konva.isDragging() || Global_1.Konva.isTransforming()) || Global_1.Konva.hitOnDragEnabled;
+        var targetShape = this._getTargetShape(eventType);
+        var eventsEnabled = !(Global_1.Konva.isDragging() || Global_1.Konva.isTransforming()) || Global_1.Konva.hitOnDragEnabled;
         if (targetShape && eventsEnabled) {
             targetShape._fireAndBubble(events.pointerout, { evt: evt });
@@ -380,7 +380,7 @@
         }
         this.setPointersPositions(evt);
-        let triggeredOnShape = false;
+        var triggeredOnShape = false;
         this._changedPointerPositions.forEach((pos) => {
-            const shape = this.getIntersection(pos);
+            var shape = this.getIntersection(pos);
             DragAndDrop_1.DD.justDragged = false;
             Global_1.Konva['_' + eventType + 'ListenClick'] = true;
@@ -422,11 +422,11 @@
         }
         this.setPointersPositions(evt);
-        const eventsEnabled = !(Global_1.Konva.isDragging() || Global_1.Konva.isTransforming()) || Global_1.Konva.hitOnDragEnabled;
+        var eventsEnabled = !(Global_1.Konva.isDragging() || Global_1.Konva.isTransforming()) || Global_1.Konva.hitOnDragEnabled;
         if (!eventsEnabled) {
             return;
         }
-        const processedShapesIds = {};
+        var processedShapesIds = {};
         let triggeredOnShape = false;
-        const targetShape = this._getTargetShape(eventType);
+        var targetShape = this._getTargetShape(eventType);
         this._changedPointerPositions.forEach((pos) => {
             const shape = (PointerEvents.getCapturedShape(pos.id) ||
@@ -434,5 +434,5 @@
             const pointerId = pos.id;
             const event = { evt: evt, pointerId };
-            const differentTarget = targetShape !== shape;
+            var differentTarget = targetShape !== shape;
             if (differentTarget && targetShape) {
                 targetShape._fireAndBubble(events.pointerout, { ...event }, shape);
@@ -484,5 +484,5 @@
         const clickStartShape = this[eventType + 'ClickStartShape'];
         const clickEndShape = this[eventType + 'ClickEndShape'];
-        const processedShapesIds = {};
+        var processedShapesIds = {};
         let triggeredOnShape = false;
         this._changedPointerPositions.forEach((pos) => {
@@ -558,5 +558,5 @@
     _contextmenu(evt) {
         this.setPointersPositions(evt);
-        const shape = this.getIntersection(this.getPointerPosition());
+        var shape = this.getIntersection(this.getPointerPosition());
         if (shape && shape.isListening()) {
             shape._fireAndBubble(CONTEXTMENU, { evt: evt });
@@ -572,5 +572,5 @@
     _wheel(evt) {
         this.setPointersPositions(evt);
-        const shape = this.getIntersection(this.getPointerPosition());
+        var shape = this.getIntersection(this.getPointerPosition());
         if (shape && shape.isListening()) {
             shape._fireAndBubble(WHEEL, { evt: evt });
@@ -597,5 +597,5 @@
     }
     setPointersPositions(evt) {
-        let contentPosition = this._getContentPosition(), x = null, y = null;
+        var contentPosition = this._getContentPosition(), x = null, y = null;
         evt = evt ? evt : window.event;
         if (evt.touches !== undefined) {
@@ -643,5 +643,5 @@
             };
         }
-        const rect = this.content.getBoundingClientRect();
+        var rect = this.content.getBoundingClientRect();
         return {
             top: rect.top,
@@ -664,5 +664,5 @@
             return;
         }
-        const container = this.container();
+        var container = this.container();
         if (!container) {
             throw 'Stage has no container. A container is required.';
Index: imaps-frontend/node_modules/konva/lib/Tween.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/Tween.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Tween.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -6,5 +6,5 @@
 const Node_1 = require("./Node");
 const Global_1 = require("./Global");
-let blacklist = {
+var blacklist = {
     node: 1,
     duration: 1,
@@ -32,5 +32,5 @@
     }
     fire(str) {
-        const handler = this[str];
+        var handler = this[str];
         if (handler) {
             handler();
@@ -111,5 +111,5 @@
     }
     onEnterFrame() {
-        const t = this.getTimer() - this._startTime;
+        var t = this.getTimer() - this._startTime;
         if (this.state === PLAYING) {
             this.setTime(t);
@@ -129,5 +129,5 @@
 class Tween {
     constructor(config) {
-        let that = this, node = config.node, nodeId = node._id, duration, easing = config.easing || exports.Easings.Linear, yoyo = !!config.yoyo, key;
+        var that = this, node = config.node, nodeId = node._id, duration, easing = config.easing || exports.Easings.Linear, yoyo = !!config.yoyo, key;
         if (typeof config.duration === 'undefined') {
             duration = 0.3;
@@ -141,5 +141,5 @@
         this.node = node;
         this._id = idCounter++;
-        const layers = node.getLayer() ||
+        var layers = node.getLayer() ||
             (node instanceof Global_1.Konva['Stage'] ? node.getLayers() : null);
         if (!layers) {
@@ -173,5 +173,5 @@
     }
     _addAttr(key, end) {
-        let node = this.node, nodeId = node._id, start, diff, tweenId, n, len, trueEnd, trueStart, endRGBA;
+        var node = this.node, nodeId = node._id, start, diff, tweenId, n, len, trueEnd, trueStart, endRGBA;
         tweenId = Tween.tweens[nodeId][key];
         if (tweenId) {
@@ -198,5 +198,5 @@
                     }
                     else {
-                        const startRGBA = Util_1.Util.colorToRGBA(start[n]);
+                        var startRGBA = Util_1.Util.colorToRGBA(start[n]);
                         endRGBA = Util_1.Util.colorToRGBA(end[n]);
                         start[n] = startRGBA;
@@ -239,5 +239,5 @@
     }
     _tweenFunc(i) {
-        let node = this.node, attrs = Tween.attrs[node._id][this._id], key, attr, start, diff, newVal, n, len, end;
+        var node = this.node, attrs = Tween.attrs[node._id][this._id], key, attr, start, diff, newVal, n, len, end;
         for (key in attrs) {
             attr = attrs[key];
@@ -301,6 +301,6 @@
         };
         this.tween.onFinish = () => {
-            const node = this.node;
-            const attrs = Tween.attrs[node._id][this._id];
+            var node = this.node;
+            var attrs = Tween.attrs[node._id][this._id];
             if (attrs.points && attrs.points.trueEnd) {
                 node.setAttr('points', attrs.points.trueEnd);
@@ -311,6 +311,6 @@
         };
         this.tween.onReset = () => {
-            const node = this.node;
-            const attrs = Tween.attrs[node._id][this._id];
+            var node = this.node;
+            var attrs = Tween.attrs[node._id][this._id];
             if (attrs.points && attrs.points.trueStart) {
                 node.points(attrs.points.trueStart);
@@ -351,5 +351,5 @@
     }
     destroy() {
-        let nodeId = this.node._id, thisId = this._id, attrs = Tween.tweens[nodeId], key;
+        var nodeId = this.node._id, thisId = this._id, attrs = Tween.tweens[nodeId], key;
         this.pause();
         for (key in attrs) {
@@ -363,5 +363,5 @@
 Tween.tweens = {};
 Node_1.Node.prototype.to = function (params) {
-    const onFinish = params.onFinish;
+    var onFinish = params.onFinish;
     params.node = this;
     params.onFinish = function () {
@@ -371,18 +371,18 @@
         }
     };
-    const tween = new Tween(params);
+    var tween = new Tween(params);
     tween.play();
 };
 exports.Easings = {
     BackEaseIn(t, b, c, d) {
-        const s = 1.70158;
+        var s = 1.70158;
         return c * (t /= d) * t * ((s + 1) * t - s) + b;
     },
     BackEaseOut(t, b, c, d) {
-        const s = 1.70158;
+        var s = 1.70158;
         return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
     },
     BackEaseInOut(t, b, c, d) {
-        let s = 1.70158;
+        var s = 1.70158;
         if ((t /= d / 2) < 1) {
             return (c / 2) * (t * t * (((s *= 1.525) + 1) * t - s)) + b;
@@ -391,5 +391,5 @@
     },
     ElasticEaseIn(t, b, c, d, a, p) {
-        let s = 0;
+        var s = 0;
         if (t === 0) {
             return b;
@@ -413,5 +413,5 @@
     },
     ElasticEaseOut(t, b, c, d, a, p) {
-        let s = 0;
+        var s = 0;
         if (t === 0) {
             return b;
@@ -435,5 +435,5 @@
     },
     ElasticEaseInOut(t, b, c, d, a, p) {
-        let s = 0;
+        var s = 0;
         if (t === 0) {
             return b;
Index: imaps-frontend/node_modules/konva/lib/Util.d.ts
===================================================================
--- imaps-frontend/node_modules/konva/lib/Util.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Util.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -37,9 +37,9 @@
     _isFunction(obj: any): boolean;
     _isPlainObject(obj: any): boolean;
-    _isArray(obj: any): obj is Array<any>;
+    _isArray(obj: any): obj is any[];
     _isNumber(obj: any): obj is number;
     _isString(obj: any): obj is string;
     _isBoolean(obj: any): obj is boolean;
-    isObject(val: any): val is object;
+    isObject(val: any): val is Object;
     isValidSelector(selector: any): boolean;
     _sign(number: number): 1 | -1;
@@ -119,5 +119,5 @@
     error(str: string): void;
     warn(str: string): void;
-    each(obj: object, func: Function): void;
+    each(obj: Object, func: Function): void;
     _inRange(val: number, left: number, right: number): boolean;
     _getProjectionToSegment(x1: any, y1: any, x2: any, y2: any, x3: any, y3: any): any[];
@@ -125,5 +125,5 @@
     _prepareArrayForTween(startArray: any, endArray: any, isClosed: any): number[];
     _prepareToStringify<T>(obj: any): T | null;
-    _assign<T, U>(target: T, source: U): T & U;
+    _assign<T_1, U>(target: T_1, source: U): T_1 & U;
     _getFirstPointerId(evt: any): any;
     releaseCanvas(...canvases: HTMLCanvasElement[]): void;
Index: imaps-frontend/node_modules/konva/lib/Util.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/Util.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Util.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -28,5 +28,5 @@
     }
     point(point) {
-        const m = this.m;
+        var m = this.m;
         return {
             x: m[0] * point.x + m[2] * point.y + m[4],
@@ -47,10 +47,10 @@
     }
     rotate(rad) {
-        const c = Math.cos(rad);
-        const s = Math.sin(rad);
-        const m11 = this.m[0] * c + this.m[2] * s;
-        const m12 = this.m[1] * c + this.m[3] * s;
-        const m21 = this.m[0] * -s + this.m[2] * c;
-        const m22 = this.m[1] * -s + this.m[3] * c;
+        var c = Math.cos(rad);
+        var s = Math.sin(rad);
+        var m11 = this.m[0] * c + this.m[2] * s;
+        var m12 = this.m[1] * c + this.m[3] * s;
+        var m21 = this.m[0] * -s + this.m[2] * c;
+        var m22 = this.m[1] * -s + this.m[3] * c;
         this.m[0] = m11;
         this.m[1] = m12;
@@ -66,8 +66,8 @@
     }
     skew(sx, sy) {
-        const m11 = this.m[0] + this.m[2] * sy;
-        const m12 = this.m[1] + this.m[3] * sy;
-        const m21 = this.m[2] + this.m[0] * sx;
-        const m22 = this.m[3] + this.m[1] * sx;
+        var m11 = this.m[0] + this.m[2] * sy;
+        var m12 = this.m[1] + this.m[3] * sy;
+        var m21 = this.m[2] + this.m[0] * sx;
+        var m22 = this.m[3] + this.m[1] * sx;
         this.m[0] = m11;
         this.m[1] = m12;
@@ -77,10 +77,10 @@
     }
     multiply(matrix) {
-        const m11 = this.m[0] * matrix.m[0] + this.m[2] * matrix.m[1];
-        const m12 = this.m[1] * matrix.m[0] + this.m[3] * matrix.m[1];
-        const m21 = this.m[0] * matrix.m[2] + this.m[2] * matrix.m[3];
-        const m22 = this.m[1] * matrix.m[2] + this.m[3] * matrix.m[3];
-        const dx = this.m[0] * matrix.m[4] + this.m[2] * matrix.m[5] + this.m[4];
-        const dy = this.m[1] * matrix.m[4] + this.m[3] * matrix.m[5] + this.m[5];
+        var m11 = this.m[0] * matrix.m[0] + this.m[2] * matrix.m[1];
+        var m12 = this.m[1] * matrix.m[0] + this.m[3] * matrix.m[1];
+        var m21 = this.m[0] * matrix.m[2] + this.m[2] * matrix.m[3];
+        var m22 = this.m[1] * matrix.m[2] + this.m[3] * matrix.m[3];
+        var dx = this.m[0] * matrix.m[4] + this.m[2] * matrix.m[5] + this.m[4];
+        var dy = this.m[1] * matrix.m[4] + this.m[3] * matrix.m[5] + this.m[5];
         this.m[0] = m11;
         this.m[1] = m12;
@@ -92,11 +92,11 @@
     }
     invert() {
-        const d = 1 / (this.m[0] * this.m[3] - this.m[1] * this.m[2]);
-        const m0 = this.m[3] * d;
-        const m1 = -this.m[1] * d;
-        const m2 = -this.m[2] * d;
-        const m3 = this.m[0] * d;
-        const m4 = d * (this.m[2] * this.m[5] - this.m[3] * this.m[4]);
-        const m5 = d * (this.m[1] * this.m[4] - this.m[0] * this.m[5]);
+        var d = 1 / (this.m[0] * this.m[3] - this.m[1] * this.m[2]);
+        var m0 = this.m[3] * d;
+        var m1 = -this.m[1] * d;
+        var m2 = -this.m[2] * d;
+        var m3 = this.m[0] * d;
+        var m4 = d * (this.m[2] * this.m[5] - this.m[3] * this.m[4]);
+        var m5 = d * (this.m[1] * this.m[4] - this.m[0] * this.m[5]);
         this.m[0] = m0;
         this.m[1] = m1;
@@ -111,12 +111,12 @@
     }
     decompose() {
-        const a = this.m[0];
-        const b = this.m[1];
-        const c = this.m[2];
-        const d = this.m[3];
-        const e = this.m[4];
-        const f = this.m[5];
-        const delta = a * d - b * c;
-        const result = {
+        var a = this.m[0];
+        var b = this.m[1];
+        var c = this.m[2];
+        var d = this.m[3];
+        var e = this.m[4];
+        var f = this.m[5];
+        var delta = a * d - b * c;
+        let result = {
             x: e,
             y: f,
@@ -128,5 +128,5 @@
         };
         if (a != 0 || b != 0) {
-            const r = Math.sqrt(a * a + b * b);
+            var r = Math.sqrt(a * a + b * b);
             result.rotation = b > 0 ? Math.acos(a / r) : -Math.acos(a / r);
             result.scaleX = r;
@@ -136,5 +136,5 @@
         }
         else if (c != 0 || d != 0) {
-            const s = Math.sqrt(c * c + d * d);
+            var s = Math.sqrt(c * c + d * d);
             result.rotation =
                 Math.PI / 2 - (d > 0 ? Math.acos(-c / s) : -Math.acos(c / s));
@@ -151,5 +151,5 @@
 }
 exports.Transform = Transform;
-let OBJECT_ARRAY = '[object Array]', OBJECT_NUMBER = '[object Number]', OBJECT_STRING = '[object String]', OBJECT_BOOLEAN = '[object Boolean]', PI_OVER_DEG180 = Math.PI / 180, DEG180_OVER_PI = 180 / Math.PI, HASH = '#', EMPTY_STRING = '', ZERO = '0', KONVA_WARNING = 'Konva warning: ', KONVA_ERROR = 'Konva error: ', RGB_PAREN = 'rgb(', COLORS = {
+var OBJECT_ARRAY = '[object Array]', OBJECT_NUMBER = '[object Number]', OBJECT_STRING = '[object String]', OBJECT_BOOLEAN = '[object Boolean]', PI_OVER_DEG180 = Math.PI / 180, DEG180_OVER_PI = 180 / Math.PI, HASH = '#', EMPTY_STRING = '', ZERO = '0', KONVA_WARNING = 'Konva warning: ', KONVA_ERROR = 'Konva error: ', RGB_PAREN = 'rgb(', COLORS = {
     aliceblue: [240, 248, 255],
     antiquewhite: [250, 235, 215],
@@ -337,5 +337,5 @@
             return false;
         }
-        const firstChar = selector[0];
+        var firstChar = selector[0];
         return (firstChar === '#' ||
             firstChar === '.' ||
@@ -366,5 +366,5 @@
     },
     createCanvasElement() {
-        const canvas = document.createElement('canvas');
+        var canvas = document.createElement('canvas');
         try {
             canvas.style = canvas.style || {};
@@ -385,5 +385,5 @@
     },
     _urlToImage(url, callback) {
-        const imageObj = exports.Util.createImageElement();
+        var imageObj = exports.Util.createImageElement();
         imageObj.onload = function () {
             callback(imageObj);
@@ -396,5 +396,5 @@
     _hexToRgb(hex) {
         hex = hex.replace(HASH, EMPTY_STRING);
-        const bigint = parseInt(hex, 16);
+        var bigint = parseInt(hex, 16);
         return {
             r: (bigint >> 16) & 255,
@@ -404,5 +404,5 @@
     },
     getRandomColor() {
-        let randColor = ((Math.random() * 0xffffff) << 0).toString(16);
+        var randColor = ((Math.random() * 0xffffff) << 0).toString(16);
         while (randColor.length < 6) {
             randColor = ZERO + randColor;
@@ -411,5 +411,5 @@
     },
     getRGB(color) {
-        let rgb;
+        var rgb;
         if (color in COLORS) {
             rgb = COLORS[color];
@@ -451,5 +451,5 @@
     },
     _namedColorToRBA(str) {
-        const c = COLORS[str.toLowerCase()];
+        var c = COLORS[str.toLowerCase()];
         if (!c) {
             return null;
@@ -465,5 +465,5 @@
         if (str.indexOf('rgb(') === 0) {
             str = str.match(/rgb\(([^)]+)\)/)[1];
-            const parts = str.split(/ *, */).map(Number);
+            var parts = str.split(/ *, */).map(Number);
             return {
                 r: parts[0],
@@ -477,5 +477,5 @@
         if (str.indexOf('rgba(') === 0) {
             str = str.match(/rgba\(([^)]+)\)/)[1];
-            const parts = str.split(/ *, */).map((n, index) => {
+            var parts = str.split(/ *, */).map((n, index) => {
                 if (n.slice(-1) === '%') {
                     return index === 3 ? parseInt(n) / 100 : (parseInt(n) / 100) * 255;
@@ -594,6 +594,6 @@
     },
     cloneObject(obj) {
-        const retObj = {};
-        for (const key in obj) {
+        var retObj = {};
+        for (var key in obj) {
             if (this._isPlainObject(obj[key])) {
                 retObj[key] = this.cloneObject(obj[key]);
@@ -644,5 +644,5 @@
     },
     each(obj, func) {
-        for (const key in obj) {
+        for (var key in obj) {
             func(key, obj[key]);
         }
@@ -652,6 +652,6 @@
     },
     _getProjectionToSegment(x1, y1, x2, y2, x3, y3) {
-        let x, y, dist;
-        const pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
+        var x, y, dist;
+        var pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
         if (pd2 == 0) {
             x = x1;
@@ -660,5 +660,5 @@
         }
         else {
-            const u = ((x3 - x1) * (x2 - x1) + (y3 - y1) * (y2 - y1)) / pd2;
+            var u = ((x3 - x1) * (x2 - x1) + (y3 - y1) * (y2 - y1)) / pd2;
             if (u < 0) {
                 x = x1;
@@ -680,13 +680,13 @@
     },
     _getProjectionToLine(pt, line, isClosed) {
-        const pc = exports.Util.cloneObject(pt);
-        let dist = Number.MAX_VALUE;
+        var pc = exports.Util.cloneObject(pt);
+        var dist = Number.MAX_VALUE;
         line.forEach(function (p1, i) {
             if (!isClosed && i === line.length - 1) {
                 return;
             }
-            const p2 = line[(i + 1) % line.length];
-            const proj = exports.Util._getProjectionToSegment(p1.x, p1.y, p2.x, p2.y, pt.x, pt.y);
-            const px = proj[0], py = proj[1], pdist = proj[2];
+            var p2 = line[(i + 1) % line.length];
+            var proj = exports.Util._getProjectionToSegment(p1.x, p1.y, p2.x, p2.y, pt.x, pt.y);
+            var px = proj[0], py = proj[1], pdist = proj[2];
             if (pdist < dist) {
                 pc.x = px;
@@ -698,7 +698,7 @@
     },
     _prepareArrayForTween(startArray, endArray, isClosed) {
-        let n, start = [], end = [];
+        var n, start = [], end = [];
         if (startArray.length > endArray.length) {
-            const temp = endArray;
+            var temp = endArray;
             endArray = startArray;
             startArray = temp;
@@ -716,7 +716,7 @@
             });
         }
-        const newStart = [];
+        var newStart = [];
         end.forEach(function (point) {
-            const pr = exports.Util._getProjectionToLine(point, start, isClosed);
+            var pr = exports.Util._getProjectionToLine(point, start, isClosed);
             newStart.push(pr.x);
             newStart.push(pr.y);
@@ -725,7 +725,7 @@
     },
     _prepareToStringify(obj) {
-        let desc;
+        var desc;
         obj.visitedByCircularReferenceRemoval = true;
-        for (const key in obj) {
+        for (var key in obj) {
             if (!(obj.hasOwnProperty(key) && obj[key] && typeof obj[key] == 'object')) {
                 continue;
@@ -754,5 +754,5 @@
     },
     _assign(target, source) {
-        for (const key in source) {
+        for (var key in source) {
             target[key] = source[key];
         }
Index: imaps-frontend/node_modules/konva/lib/Validators.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/Validators.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/Validators.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -1,15 +1,5 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.RGBComponent = RGBComponent;
-exports.alphaComponent = alphaComponent;
-exports.getNumberValidator = getNumberValidator;
-exports.getNumberOrArrayOfNumbersValidator = getNumberOrArrayOfNumbersValidator;
-exports.getNumberOrAutoValidator = getNumberOrAutoValidator;
-exports.getStringValidator = getStringValidator;
-exports.getStringOrGradientValidator = getStringOrGradientValidator;
-exports.getFunctionValidator = getFunctionValidator;
-exports.getNumberArrayValidator = getNumberArrayValidator;
-exports.getBooleanValidator = getBooleanValidator;
-exports.getComponentValidator = getComponentValidator;
+exports.getComponentValidator = exports.getBooleanValidator = exports.getNumberArrayValidator = exports.getFunctionValidator = exports.getStringOrGradientValidator = exports.getStringValidator = exports.getNumberOrAutoValidator = exports.getNumberOrArrayOfNumbersValidator = exports.getNumberValidator = exports.alphaComponent = exports.RGBComponent = void 0;
 const Global_1 = require("./Global");
 const Util_1 = require("./Util");
@@ -35,4 +25,5 @@
     return Math.round(val);
 }
+exports.RGBComponent = RGBComponent;
 function alphaComponent(val) {
     if (val > 1) {
@@ -44,4 +35,5 @@
     return val;
 }
+exports.alphaComponent = alphaComponent;
 function getNumberValidator() {
     if (Global_1.Konva.isUnminified) {
@@ -57,9 +49,10 @@
     }
 }
+exports.getNumberValidator = getNumberValidator;
 function getNumberOrArrayOfNumbersValidator(noOfElements) {
     if (Global_1.Konva.isUnminified) {
         return function (val, attr) {
-            const isNumber = Util_1.Util._isNumber(val);
-            const isValidArray = Util_1.Util._isArray(val) && val.length == noOfElements;
+            let isNumber = Util_1.Util._isNumber(val);
+            let isValidArray = Util_1.Util._isArray(val) && val.length == noOfElements;
             if (!isNumber && !isValidArray) {
                 Util_1.Util.warn(_formatValue(val) +
@@ -74,9 +67,10 @@
     }
 }
+exports.getNumberOrArrayOfNumbersValidator = getNumberOrArrayOfNumbersValidator;
 function getNumberOrAutoValidator() {
     if (Global_1.Konva.isUnminified) {
         return function (val, attr) {
-            const isNumber = Util_1.Util._isNumber(val);
-            const isAuto = val === 'auto';
+            var isNumber = Util_1.Util._isNumber(val);
+            var isAuto = val === 'auto';
             if (!(isNumber || isAuto)) {
                 Util_1.Util.warn(_formatValue(val) +
@@ -89,4 +83,5 @@
     }
 }
+exports.getNumberOrAutoValidator = getNumberOrAutoValidator;
 function getStringValidator() {
     if (Global_1.Konva.isUnminified) {
@@ -102,4 +97,5 @@
     }
 }
+exports.getStringValidator = getStringValidator;
 function getStringOrGradientValidator() {
     if (Global_1.Konva.isUnminified) {
@@ -118,4 +114,5 @@
     }
 }
+exports.getStringOrGradientValidator = getStringOrGradientValidator;
 function getFunctionValidator() {
     if (Global_1.Konva.isUnminified) {
@@ -131,4 +128,5 @@
     }
 }
+exports.getFunctionValidator = getFunctionValidator;
 function getNumberArrayValidator() {
     if (Global_1.Konva.isUnminified) {
@@ -159,8 +157,9 @@
     }
 }
+exports.getNumberArrayValidator = getNumberArrayValidator;
 function getBooleanValidator() {
     if (Global_1.Konva.isUnminified) {
         return function (val, attr) {
-            const isBool = val === true || val === false;
+            var isBool = val === true || val === false;
             if (!isBool) {
                 Util_1.Util.warn(_formatValue(val) +
@@ -173,4 +172,5 @@
     }
 }
+exports.getBooleanValidator = getBooleanValidator;
 function getComponentValidator(components) {
     if (Global_1.Konva.isUnminified) {
@@ -190,2 +190,3 @@
     }
 }
+exports.getComponentValidator = getComponentValidator;
Index: imaps-frontend/node_modules/konva/lib/_CoreInternals.d.ts
===================================================================
--- imaps-frontend/node_modules/konva/lib/_CoreInternals.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/_CoreInternals.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -49,9 +49,9 @@
         _isFunction(obj: any): boolean;
         _isPlainObject(obj: any): boolean;
-        _isArray(obj: any): obj is Array<any>;
+        _isArray(obj: any): obj is any[];
         _isNumber(obj: any): obj is number;
         _isString(obj: any): obj is string;
         _isBoolean(obj: any): obj is boolean;
-        isObject(val: any): val is object;
+        isObject(val: any): val is Object;
         isValidSelector(selector: any): boolean;
         _sign(number: number): 1 | -1;
@@ -121,5 +121,5 @@
         haveIntersection(r1: import("./types").IRect, r2: import("./types.js").IRect): boolean;
         cloneObject<Any>(obj: Any): Any;
-        cloneArray(arr: Array<any>): any[];
+        cloneArray(arr: any[]): any[];
         degToRad(deg: number): number;
         radToDeg(rad: number): number;
@@ -131,11 +131,11 @@
         error(str: string): void;
         warn(str: string): void;
-        each(obj: object, func: Function): void;
+        each(obj: Object, func: Function): void;
         _inRange(val: number, left: number, right: number): boolean;
         _getProjectionToSegment(x1: any, y1: any, x2: any, y2: any, x3: any, y3: any): any[];
-        _getProjectionToLine(pt: import("./types").Vector2d, line: Array<import("./types").Vector2d>, isClosed: boolean): import("./types.js").Vector2d;
+        _getProjectionToLine(pt: import("./types").Vector2d, line: import("./types").Vector2d[], isClosed: boolean): import("./types.js").Vector2d;
         _prepareArrayForTween(startArray: any, endArray: any, isClosed: any): number[];
         _prepareToStringify<T>(obj: any): T | null;
-        _assign<T, U>(target: T, source: U): T & U;
+        _assign<T_1, U>(target: T_1, source: U): T_1 & U;
         _getFirstPointerId(evt: any): any;
         releaseCanvas(...canvases: HTMLCanvasElement[]): void;
@@ -155,8 +155,8 @@
         readonly node: Node<import("./Node.js").NodeConfig> | undefined;
         _dragElements: Map<number, {
-            node: Node;
+            node: Node<import("./Node.js").NodeConfig>;
             startPointerPos: import("./types.js").Vector2d;
             offset: import("./types.js").Vector2d;
-            pointerId?: number;
+            pointerId?: number | undefined;
             dragStatus: "ready" | "dragging" | "stopped";
         }>;
Index: imaps-frontend/node_modules/konva/lib/_FullInternals.d.ts
===================================================================
--- imaps-frontend/node_modules/konva/lib/_FullInternals.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/_FullInternals.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -54,9 +54,9 @@
         _isFunction(obj: any): boolean;
         _isPlainObject(obj: any): boolean;
-        _isArray(obj: any): obj is Array<any>;
+        _isArray(obj: any): obj is any[];
         _isNumber(obj: any): obj is number;
         _isString(obj: any): obj is string;
         _isBoolean(obj: any): obj is boolean;
-        isObject(val: any): val is object;
+        isObject(val: any): val is Object;
         isValidSelector(selector: any): boolean;
         _sign(number: number): 1 | -1;
@@ -126,5 +126,5 @@
         haveIntersection(r1: import("./types").IRect, r2: import("./types.js").IRect): boolean;
         cloneObject<Any>(obj: Any): Any;
-        cloneArray(arr: Array<any>): any[];
+        cloneArray(arr: any[]): any[];
         degToRad(deg: number): number;
         radToDeg(rad: number): number;
@@ -136,11 +136,11 @@
         error(str: string): void;
         warn(str: string): void;
-        each(obj: object, func: Function): void;
+        each(obj: Object, func: Function): void;
         _inRange(val: number, left: number, right: number): boolean;
         _getProjectionToSegment(x1: any, y1: any, x2: any, y2: any, x3: any, y3: any): any[];
-        _getProjectionToLine(pt: import("./types").Vector2d, line: Array<import("./types").Vector2d>, isClosed: boolean): import("./types.js").Vector2d;
+        _getProjectionToLine(pt: import("./types").Vector2d, line: import("./types").Vector2d[], isClosed: boolean): import("./types.js").Vector2d;
         _prepareArrayForTween(startArray: any, endArray: any, isClosed: any): number[];
         _prepareToStringify<T>(obj: any): T | null;
-        _assign<T, U>(target: T, source: U): T & U;
+        _assign<T_1, U>(target: T_1, source: U): T_1 & U;
         _getFirstPointerId(evt: any): any;
         releaseCanvas(...canvases: HTMLCanvasElement[]): void;
@@ -160,8 +160,8 @@
         readonly node: import("./Node").Node<import("./Node.js").NodeConfig> | undefined;
         _dragElements: Map<number, {
-            node: import("./Node.js").Node;
+            node: import("./Node").Node<import("./Node.js").NodeConfig>;
             startPointerPos: import("./types.js").Vector2d;
             offset: import("./types.js").Vector2d;
-            pointerId?: number;
+            pointerId?: number | undefined;
             dragStatus: "ready" | "dragging" | "stopped";
         }>;
Index: imaps-frontend/node_modules/konva/lib/filters/Blur.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/Blur.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/Blur.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -12,5 +12,5 @@
     this.next = null;
 }
-const mul_table = [
+var mul_table = [
     512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292,
     512, 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292,
@@ -31,5 +31,5 @@
     289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259,
 ];
-const shg_table = [
+var shg_table = [
     9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17,
     17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19,
@@ -48,7 +48,7 @@
 ];
 function filterGaussBlurRGBA(imageData, radius) {
-    const pixels = imageData.data, width = imageData.width, height = imageData.height;
-    let x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum, r_out_sum, g_out_sum, b_out_sum, a_out_sum, r_in_sum, g_in_sum, b_in_sum, a_in_sum, pr, pg, pb, pa, rbs;
-    let div = radius + radius + 1, widthMinus1 = width - 1, heightMinus1 = height - 1, radiusPlus1 = radius + 1, sumFactor = (radiusPlus1 * (radiusPlus1 + 1)) / 2, stackStart = new BlurStack(), stackEnd = null, stack = stackStart, stackIn = null, stackOut = null, mul_sum = mul_table[radius], shg_sum = shg_table[radius];
+    var pixels = imageData.data, width = imageData.width, height = imageData.height;
+    var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum, r_out_sum, g_out_sum, b_out_sum, a_out_sum, r_in_sum, g_in_sum, b_in_sum, a_in_sum, pr, pg, pb, pa, rbs;
+    var div = radius + radius + 1, widthMinus1 = width - 1, heightMinus1 = height - 1, radiusPlus1 = radius + 1, sumFactor = (radiusPlus1 * (radiusPlus1 + 1)) / 2, stackStart = new BlurStack(), stackEnd = null, stack = stackStart, stackIn = null, stackOut = null, mul_sum = mul_table[radius], shg_sum = shg_table[radius];
     for (i = 1; i < div; i++) {
         stack = stack.next = new BlurStack();
@@ -230,5 +230,5 @@
 }
 const Blur = function Blur(imageData) {
-    const radius = Math.round(this.blurRadius());
+    var radius = Math.round(this.blurRadius());
     if (radius > 0) {
         filterGaussBlurRGBA(imageData, radius);
Index: imaps-frontend/node_modules/konva/lib/filters/Brighten.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/Brighten.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/Brighten.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -6,5 +6,5 @@
 const Validators_1 = require("../Validators");
 const Brighten = function (imageData) {
-    let brightness = this.brightness() * 255, data = imageData.data, len = data.length, i;
+    var brightness = this.brightness() * 255, data = imageData.data, len = data.length, i;
     for (i = 0; i < len; i += 4) {
         data[i] += brightness;
Index: imaps-frontend/node_modules/konva/lib/filters/Contrast.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/Contrast.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/Contrast.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -6,6 +6,6 @@
 const Validators_1 = require("../Validators");
 const Contrast = function (imageData) {
-    const adjust = Math.pow((this.contrast() + 100) / 100, 2);
-    let data = imageData.data, nPixels = data.length, red = 150, green = 150, blue = 150, i;
+    var adjust = Math.pow((this.contrast() + 100) / 100, 2);
+    var data = imageData.data, nPixels = data.length, red = 150, green = 150, blue = 150, i;
     for (i = 0; i < nPixels; i += 4) {
         red = data[i];
Index: imaps-frontend/node_modules/konva/lib/filters/Emboss.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/Emboss.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/Emboss.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -7,5 +7,5 @@
 const Validators_1 = require("../Validators");
 const Emboss = function (imageData) {
-    let strength = this.embossStrength() * 10, greyLevel = this.embossWhiteLevel() * 255, direction = this.embossDirection(), blend = this.embossBlend(), dirY = 0, dirX = 0, data = imageData.data, w = imageData.width, h = imageData.height, w4 = w * 4, y = h;
+    var strength = this.embossStrength() * 10, greyLevel = this.embossWhiteLevel() * 255, direction = this.embossDirection(), blend = this.embossBlend(), dirY = 0, dirX = 0, data = imageData.data, w = imageData.width, h = imageData.height, w4 = w * 4, y = h;
     switch (direction) {
         case 'top-left':
@@ -45,6 +45,6 @@
     }
     do {
-        const offsetY = (y - 1) * w4;
-        let otherY = dirY;
+        var offsetY = (y - 1) * w4;
+        var otherY = dirY;
         if (y + otherY < 1) {
             otherY = 0;
@@ -53,9 +53,9 @@
             otherY = 0;
         }
-        const offsetYOther = (y - 1 + otherY) * w * 4;
-        let x = w;
+        var offsetYOther = (y - 1 + otherY) * w * 4;
+        var x = w;
         do {
-            const offset = offsetY + (x - 1) * 4;
-            let otherX = dirX;
+            var offset = offsetY + (x - 1) * 4;
+            var otherX = dirX;
             if (x + otherX < 1) {
                 otherX = 0;
@@ -64,12 +64,12 @@
                 otherX = 0;
             }
-            const offsetOther = offsetYOther + (x - 1 + otherX) * 4;
-            const dR = data[offset] - data[offsetOther];
-            const dG = data[offset + 1] - data[offsetOther + 1];
-            const dB = data[offset + 2] - data[offsetOther + 2];
-            let dif = dR;
-            const absDif = dif > 0 ? dif : -dif;
-            const absG = dG > 0 ? dG : -dG;
-            const absB = dB > 0 ? dB : -dB;
+            var offsetOther = offsetYOther + (x - 1 + otherX) * 4;
+            var dR = data[offset] - data[offsetOther];
+            var dG = data[offset + 1] - data[offsetOther + 1];
+            var dB = data[offset + 2] - data[offsetOther + 2];
+            var dif = dR;
+            var absDif = dif > 0 ? dif : -dif;
+            var absG = dG > 0 ? dG : -dG;
+            var absB = dB > 0 ? dB : -dB;
             if (absG > absDif) {
                 dif = dG;
@@ -80,7 +80,7 @@
             dif *= strength;
             if (blend) {
-                const r = data[offset] + dif;
-                const g = data[offset + 1] + dif;
-                const b = data[offset + 2] + dif;
+                var r = data[offset] + dif;
+                var g = data[offset + 1] + dif;
+                var b = data[offset + 2] + dif;
                 data[offset] = r > 255 ? 255 : r < 0 ? 0 : r;
                 data[offset + 1] = g > 255 ? 255 : g < 0 ? 0 : g;
@@ -88,5 +88,5 @@
             }
             else {
-                let grey = greyLevel - dif;
+                var grey = greyLevel - dif;
                 if (grey < 0) {
                     grey = 0;
Index: imaps-frontend/node_modules/konva/lib/filters/Enhance.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/Enhance.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/Enhance.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -6,5 +6,5 @@
 const Validators_1 = require("../Validators");
 function remap(fromValue, fromMin, fromMax, toMin, toMax) {
-    let fromRange = fromMax - fromMin, toRange = toMax - toMin, toValue;
+    var fromRange = fromMax - fromMin, toRange = toMax - toMin, toValue;
     if (fromRange === 0) {
         return toMin + toRange / 2;
@@ -18,6 +18,6 @@
 }
 const Enhance = function (imageData) {
-    let data = imageData.data, nSubPixels = data.length, rMin = data[0], rMax = rMin, r, gMin = data[1], gMax = gMin, g, bMin = data[2], bMax = bMin, b, i;
-    const enhanceAmount = this.enhance();
+    var data = imageData.data, nSubPixels = data.length, rMin = data[0], rMax = rMin, r, gMin = data[1], gMax = gMin, g, bMin = data[2], bMax = bMin, b, i;
+    var enhanceAmount = this.enhance();
     if (enhanceAmount === 0) {
         return;
@@ -58,5 +58,5 @@
         bMin = 0;
     }
-    let rMid, rGoalMax, rGoalMin, gMid, gGoalMax, gGoalMin, bMid, bGoalMax, bGoalMin;
+    var rMid, rGoalMax, rGoalMin, gMid, gGoalMax, gGoalMin, bMid, bGoalMax, bGoalMin;
     if (enhanceAmount > 0) {
         rGoalMax = rMax + enhanceAmount * (255 - rMax);
Index: imaps-frontend/node_modules/konva/lib/filters/Grayscale.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/Grayscale.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/Grayscale.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -3,5 +3,5 @@
 exports.Grayscale = void 0;
 const Grayscale = function (imageData) {
-    let data = imageData.data, len = data.length, i, brightness;
+    var data = imageData.data, len = data.length, i, brightness;
     for (i = 0; i < len; i += 4) {
         brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2];
Index: imaps-frontend/node_modules/konva/lib/filters/HSL.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/HSL.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/HSL.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -9,10 +9,10 @@
 Factory_1.Factory.addGetterSetter(Node_1.Node, 'luminance', 0, (0, Validators_1.getNumberValidator)(), Factory_1.Factory.afterSetFilter);
 const HSL = function (imageData) {
-    let data = imageData.data, nPixels = data.length, v = 1, s = Math.pow(2, this.saturation()), h = Math.abs(this.hue() + 360) % 360, l = this.luminance() * 127, i;
-    const vsu = v * s * Math.cos((h * Math.PI) / 180), vsw = v * s * Math.sin((h * Math.PI) / 180);
-    const rr = 0.299 * v + 0.701 * vsu + 0.167 * vsw, rg = 0.587 * v - 0.587 * vsu + 0.33 * vsw, rb = 0.114 * v - 0.114 * vsu - 0.497 * vsw;
-    const gr = 0.299 * v - 0.299 * vsu - 0.328 * vsw, gg = 0.587 * v + 0.413 * vsu + 0.035 * vsw, gb = 0.114 * v - 0.114 * vsu + 0.293 * vsw;
-    const br = 0.299 * v - 0.3 * vsu + 1.25 * vsw, bg = 0.587 * v - 0.586 * vsu - 1.05 * vsw, bb = 0.114 * v + 0.886 * vsu - 0.2 * vsw;
-    let r, g, b, a;
+    var data = imageData.data, nPixels = data.length, v = 1, s = Math.pow(2, this.saturation()), h = Math.abs(this.hue() + 360) % 360, l = this.luminance() * 127, i;
+    var vsu = v * s * Math.cos((h * Math.PI) / 180), vsw = v * s * Math.sin((h * Math.PI) / 180);
+    var rr = 0.299 * v + 0.701 * vsu + 0.167 * vsw, rg = 0.587 * v - 0.587 * vsu + 0.33 * vsw, rb = 0.114 * v - 0.114 * vsu - 0.497 * vsw;
+    var gr = 0.299 * v - 0.299 * vsu - 0.328 * vsw, gg = 0.587 * v + 0.413 * vsu + 0.035 * vsw, gb = 0.114 * v - 0.114 * vsu + 0.293 * vsw;
+    var br = 0.299 * v - 0.3 * vsu + 1.25 * vsw, bg = 0.587 * v - 0.586 * vsu - 1.05 * vsw, bb = 0.114 * v + 0.886 * vsu - 0.2 * vsw;
+    var r, g, b, a;
     for (i = 0; i < nPixels; i += 4) {
         r = data[i + 0];
Index: imaps-frontend/node_modules/konva/lib/filters/HSV.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/HSV.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/HSV.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -6,11 +6,11 @@
 const Validators_1 = require("../Validators");
 const HSV = function (imageData) {
-    const data = imageData.data, nPixels = data.length, v = Math.pow(2, this.value()), s = Math.pow(2, this.saturation()), h = Math.abs(this.hue() + 360) % 360;
-    const vsu = v * s * Math.cos((h * Math.PI) / 180), vsw = v * s * Math.sin((h * Math.PI) / 180);
-    const rr = 0.299 * v + 0.701 * vsu + 0.167 * vsw, rg = 0.587 * v - 0.587 * vsu + 0.33 * vsw, rb = 0.114 * v - 0.114 * vsu - 0.497 * vsw;
-    const gr = 0.299 * v - 0.299 * vsu - 0.328 * vsw, gg = 0.587 * v + 0.413 * vsu + 0.035 * vsw, gb = 0.114 * v - 0.114 * vsu + 0.293 * vsw;
-    const br = 0.299 * v - 0.3 * vsu + 1.25 * vsw, bg = 0.587 * v - 0.586 * vsu - 1.05 * vsw, bb = 0.114 * v + 0.886 * vsu - 0.2 * vsw;
-    let r, g, b, a;
-    for (let i = 0; i < nPixels; i += 4) {
+    var data = imageData.data, nPixels = data.length, v = Math.pow(2, this.value()), s = Math.pow(2, this.saturation()), h = Math.abs(this.hue() + 360) % 360, i;
+    var vsu = v * s * Math.cos((h * Math.PI) / 180), vsw = v * s * Math.sin((h * Math.PI) / 180);
+    var rr = 0.299 * v + 0.701 * vsu + 0.167 * vsw, rg = 0.587 * v - 0.587 * vsu + 0.33 * vsw, rb = 0.114 * v - 0.114 * vsu - 0.497 * vsw;
+    var gr = 0.299 * v - 0.299 * vsu - 0.328 * vsw, gg = 0.587 * v + 0.413 * vsu + 0.035 * vsw, gb = 0.114 * v - 0.114 * vsu + 0.293 * vsw;
+    var br = 0.299 * v - 0.3 * vsu + 1.25 * vsw, bg = 0.587 * v - 0.586 * vsu - 1.05 * vsw, bb = 0.114 * v + 0.886 * vsu - 0.2 * vsw;
+    var r, g, b, a;
+    for (i = 0; i < nPixels; i += 4) {
         r = data[i + 0];
         g = data[i + 1];
Index: imaps-frontend/node_modules/konva/lib/filters/Invert.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/Invert.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/Invert.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -3,5 +3,5 @@
 exports.Invert = void 0;
 const Invert = function (imageData) {
-    let data = imageData.data, len = data.length, i;
+    var data = imageData.data, len = data.length, i;
     for (i = 0; i < len; i += 4) {
         data[i] = 255 - data[i];
Index: imaps-frontend/node_modules/konva/lib/filters/Kaleidoscope.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/Kaleidoscope.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/Kaleidoscope.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -6,13 +6,13 @@
 const Util_1 = require("../Util");
 const Validators_1 = require("../Validators");
-const ToPolar = function (src, dst, opt) {
-    let srcPixels = src.data, dstPixels = dst.data, xSize = src.width, ySize = src.height, xMid = opt.polarCenterX || xSize / 2, yMid = opt.polarCenterY || ySize / 2, i, x, y, r = 0, g = 0, b = 0, a = 0;
-    let rad, rMax = Math.sqrt(xMid * xMid + yMid * yMid);
+var ToPolar = function (src, dst, opt) {
+    var srcPixels = src.data, dstPixels = dst.data, xSize = src.width, ySize = src.height, xMid = opt.polarCenterX || xSize / 2, yMid = opt.polarCenterY || ySize / 2, i, x, y, r = 0, g = 0, b = 0, a = 0;
+    var rad, rMax = Math.sqrt(xMid * xMid + yMid * yMid);
     x = xSize - xMid;
     y = ySize - yMid;
     rad = Math.sqrt(x * x + y * y);
     rMax = rad > rMax ? rad : rMax;
-    let rSize = ySize, tSize = xSize, radius, theta;
-    let conversion = ((360 / tSize) * Math.PI) / 180, sin, cos;
+    var rSize = ySize, tSize = xSize, radius, theta;
+    var conversion = ((360 / tSize) * Math.PI) / 180, sin, cos;
     for (theta = 0; theta < tSize; theta += 1) {
         sin = Math.sin(theta * conversion);
@@ -34,13 +34,13 @@
     }
 };
-const FromPolar = function (src, dst, opt) {
-    let srcPixels = src.data, dstPixels = dst.data, xSize = src.width, ySize = src.height, xMid = opt.polarCenterX || xSize / 2, yMid = opt.polarCenterY || ySize / 2, i, x, y, dx, dy, r = 0, g = 0, b = 0, a = 0;
-    let rad, rMax = Math.sqrt(xMid * xMid + yMid * yMid);
+var FromPolar = function (src, dst, opt) {
+    var srcPixels = src.data, dstPixels = dst.data, xSize = src.width, ySize = src.height, xMid = opt.polarCenterX || xSize / 2, yMid = opt.polarCenterY || ySize / 2, i, x, y, dx, dy, r = 0, g = 0, b = 0, a = 0;
+    var rad, rMax = Math.sqrt(xMid * xMid + yMid * yMid);
     x = xSize - xMid;
     y = ySize - yMid;
     rad = Math.sqrt(x * x + y * y);
     rMax = rad > rMax ? rad : rMax;
-    let rSize = ySize, tSize = xSize, radius, theta, phaseShift = opt.polarRotation || 0;
-    let x1, y1;
+    var rSize = ySize, tSize = xSize, radius, theta, phaseShift = opt.polarRotation || 0;
+    var x1, y1;
     for (x = 0; x < xSize; x += 1) {
         for (y = 0; y < ySize; y += 1) {
@@ -66,16 +66,16 @@
 };
 const Kaleidoscope = function (imageData) {
-    const xSize = imageData.width, ySize = imageData.height;
-    let x, y, xoff, i, r, g, b, a, srcPos, dstPos;
-    let power = Math.round(this.kaleidoscopePower());
-    const angle = Math.round(this.kaleidoscopeAngle());
-    const offset = Math.floor((xSize * (angle % 360)) / 360);
+    var xSize = imageData.width, ySize = imageData.height;
+    var x, y, xoff, i, r, g, b, a, srcPos, dstPos;
+    var power = Math.round(this.kaleidoscopePower());
+    var angle = Math.round(this.kaleidoscopeAngle());
+    var offset = Math.floor((xSize * (angle % 360)) / 360);
     if (power < 1) {
         return;
     }
-    const tempCanvas = Util_1.Util.createCanvasElement();
+    var tempCanvas = Util_1.Util.createCanvasElement();
     tempCanvas.width = xSize;
     tempCanvas.height = ySize;
-    const scratchData = tempCanvas
+    var scratchData = tempCanvas
         .getContext('2d')
         .getImageData(0, 0, xSize, ySize);
@@ -85,5 +85,5 @@
         polarCenterY: ySize / 2,
     });
-    let minSectionSize = xSize / Math.pow(2, power);
+    var minSectionSize = xSize / Math.pow(2, power);
     while (minSectionSize <= 8) {
         minSectionSize = minSectionSize * 2;
@@ -91,6 +91,6 @@
     }
     minSectionSize = Math.ceil(minSectionSize);
-    let sectionSize = minSectionSize;
-    let xStart = 0, xEnd = sectionSize, xDelta = 1;
+    var sectionSize = minSectionSize;
+    var xStart = 0, xEnd = sectionSize, xDelta = 1;
     if (offset + minSectionSize > xSize) {
         xStart = sectionSize;
Index: imaps-frontend/node_modules/konva/lib/filters/Mask.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/Mask.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/Mask.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -6,6 +6,6 @@
 const Validators_1 = require("../Validators");
 function pixelAt(idata, x, y) {
-    let idx = (y * idata.width + x) * 4;
-    const d = [];
+    var idx = (y * idata.width + x) * 4;
+    var d = [];
     d.push(idata.data[idx++], idata.data[idx++], idata.data[idx++], idata.data[idx++]);
     return d;
@@ -17,6 +17,6 @@
 }
 function rgbMean(pTab) {
-    const m = [0, 0, 0];
-    for (let i = 0; i < pTab.length; i++) {
+    var m = [0, 0, 0];
+    for (var i = 0; i < pTab.length; i++) {
         m[0] += pTab[i][0];
         m[1] += pTab[i][1];
@@ -29,17 +29,17 @@
 }
 function backgroundMask(idata, threshold) {
-    const rgbv_no = pixelAt(idata, 0, 0);
-    const rgbv_ne = pixelAt(idata, idata.width - 1, 0);
-    const rgbv_so = pixelAt(idata, 0, idata.height - 1);
-    const rgbv_se = pixelAt(idata, idata.width - 1, idata.height - 1);
-    const thres = threshold || 10;
+    var rgbv_no = pixelAt(idata, 0, 0);
+    var rgbv_ne = pixelAt(idata, idata.width - 1, 0);
+    var rgbv_so = pixelAt(idata, 0, idata.height - 1);
+    var rgbv_se = pixelAt(idata, idata.width - 1, idata.height - 1);
+    var thres = threshold || 10;
     if (rgbDistance(rgbv_no, rgbv_ne) < thres &&
         rgbDistance(rgbv_ne, rgbv_se) < thres &&
         rgbDistance(rgbv_se, rgbv_so) < thres &&
         rgbDistance(rgbv_so, rgbv_no) < thres) {
-        const mean = rgbMean([rgbv_ne, rgbv_no, rgbv_se, rgbv_so]);
-        const mask = [];
-        for (let i = 0; i < idata.width * idata.height; i++) {
-            const d = rgbDistance(mean, [
+        var mean = rgbMean([rgbv_ne, rgbv_no, rgbv_se, rgbv_so]);
+        var mask = [];
+        for (var i = 0; i < idata.width * idata.height; i++) {
+            var d = rgbDistance(mean, [
                 idata.data[i * 4],
                 idata.data[i * 4 + 1],
@@ -52,24 +52,24 @@
 }
 function applyMask(idata, mask) {
-    for (let i = 0; i < idata.width * idata.height; i++) {
+    for (var i = 0; i < idata.width * idata.height; i++) {
         idata.data[4 * i + 3] = mask[i];
     }
 }
 function erodeMask(mask, sw, sh) {
-    const weights = [1, 1, 1, 1, 0, 1, 1, 1, 1];
-    const side = Math.round(Math.sqrt(weights.length));
-    const halfSide = Math.floor(side / 2);
-    const maskResult = [];
-    for (let y = 0; y < sh; y++) {
-        for (let x = 0; x < sw; x++) {
-            const so = y * sw + x;
-            let a = 0;
-            for (let cy = 0; cy < side; cy++) {
-                for (let cx = 0; cx < side; cx++) {
-                    const scy = y + cy - halfSide;
-                    const scx = x + cx - halfSide;
+    var weights = [1, 1, 1, 1, 0, 1, 1, 1, 1];
+    var side = Math.round(Math.sqrt(weights.length));
+    var halfSide = Math.floor(side / 2);
+    var maskResult = [];
+    for (var y = 0; y < sh; y++) {
+        for (var x = 0; x < sw; x++) {
+            var so = y * sw + x;
+            var a = 0;
+            for (var cy = 0; cy < side; cy++) {
+                for (var cx = 0; cx < side; cx++) {
+                    var scy = y + cy - halfSide;
+                    var scx = x + cx - halfSide;
                     if (scy >= 0 && scy < sh && scx >= 0 && scx < sw) {
-                        const srcOff = scy * sw + scx;
-                        const wt = weights[cy * side + cx];
+                        var srcOff = scy * sw + scx;
+                        var wt = weights[cy * side + cx];
                         a += mask[srcOff] * wt;
                     }
@@ -82,19 +82,19 @@
 }
 function dilateMask(mask, sw, sh) {
-    const weights = [1, 1, 1, 1, 1, 1, 1, 1, 1];
-    const side = Math.round(Math.sqrt(weights.length));
-    const halfSide = Math.floor(side / 2);
-    const maskResult = [];
-    for (let y = 0; y < sh; y++) {
-        for (let x = 0; x < sw; x++) {
-            const so = y * sw + x;
-            let a = 0;
-            for (let cy = 0; cy < side; cy++) {
-                for (let cx = 0; cx < side; cx++) {
-                    const scy = y + cy - halfSide;
-                    const scx = x + cx - halfSide;
+    var weights = [1, 1, 1, 1, 1, 1, 1, 1, 1];
+    var side = Math.round(Math.sqrt(weights.length));
+    var halfSide = Math.floor(side / 2);
+    var maskResult = [];
+    for (var y = 0; y < sh; y++) {
+        for (var x = 0; x < sw; x++) {
+            var so = y * sw + x;
+            var a = 0;
+            for (var cy = 0; cy < side; cy++) {
+                for (var cx = 0; cx < side; cx++) {
+                    var scy = y + cy - halfSide;
+                    var scx = x + cx - halfSide;
                     if (scy >= 0 && scy < sh && scx >= 0 && scx < sw) {
-                        const srcOff = scy * sw + scx;
-                        const wt = weights[cy * side + cx];
+                        var srcOff = scy * sw + scx;
+                        var wt = weights[cy * side + cx];
                         a += mask[srcOff] * wt;
                     }
@@ -107,19 +107,19 @@
 }
 function smoothEdgeMask(mask, sw, sh) {
-    const weights = [1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9];
-    const side = Math.round(Math.sqrt(weights.length));
-    const halfSide = Math.floor(side / 2);
-    const maskResult = [];
-    for (let y = 0; y < sh; y++) {
-        for (let x = 0; x < sw; x++) {
-            const so = y * sw + x;
-            let a = 0;
-            for (let cy = 0; cy < side; cy++) {
-                for (let cx = 0; cx < side; cx++) {
-                    const scy = y + cy - halfSide;
-                    const scx = x + cx - halfSide;
+    var weights = [1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9];
+    var side = Math.round(Math.sqrt(weights.length));
+    var halfSide = Math.floor(side / 2);
+    var maskResult = [];
+    for (var y = 0; y < sh; y++) {
+        for (var x = 0; x < sw; x++) {
+            var so = y * sw + x;
+            var a = 0;
+            for (var cy = 0; cy < side; cy++) {
+                for (var cx = 0; cx < side; cx++) {
+                    var scy = y + cy - halfSide;
+                    var scx = x + cx - halfSide;
                     if (scy >= 0 && scy < sh && scx >= 0 && scx < sw) {
-                        const srcOff = scy * sw + scx;
-                        const wt = weights[cy * side + cx];
+                        var srcOff = scy * sw + scx;
+                        var wt = weights[cy * side + cx];
                         a += mask[srcOff] * wt;
                     }
@@ -132,5 +132,5 @@
 }
 const Mask = function (imageData) {
-    let threshold = this.threshold(), mask = backgroundMask(imageData, threshold);
+    var threshold = this.threshold(), mask = backgroundMask(imageData, threshold);
     if (mask) {
         mask = erodeMask(mask, imageData.width, imageData.height);
Index: imaps-frontend/node_modules/konva/lib/filters/Noise.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/Noise.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/Noise.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -6,6 +6,6 @@
 const Validators_1 = require("../Validators");
 const Noise = function (imageData) {
-    const amount = this.noise() * 255, data = imageData.data, nPixels = data.length, half = amount / 2;
-    for (let i = 0; i < nPixels; i += 4) {
+    var amount = this.noise() * 255, data = imageData.data, nPixels = data.length, half = amount / 2, i;
+    for (i = 0; i < nPixels; i += 4) {
         data[i + 0] += half - 2 * half * Math.random();
         data[i + 1] += half - 2 * half * Math.random();
Index: imaps-frontend/node_modules/konva/lib/filters/Pixelate.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/Pixelate.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/Pixelate.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -7,5 +7,5 @@
 const Validators_1 = require("../Validators");
 const Pixelate = function (imageData) {
-    let pixelSize = Math.ceil(this.pixelSize()), width = imageData.width, height = imageData.height, x, y, i, red, green, blue, alpha, nBinsX = Math.ceil(width / pixelSize), nBinsY = Math.ceil(height / pixelSize), xBinStart, xBinEnd, yBinStart, yBinEnd, xBin, yBin, pixelsInBin, data = imageData.data;
+    var pixelSize = Math.ceil(this.pixelSize()), width = imageData.width, height = imageData.height, x, y, i, red, green, blue, alpha, nBinsX = Math.ceil(width / pixelSize), nBinsY = Math.ceil(height / pixelSize), xBinStart, xBinEnd, yBinStart, yBinEnd, xBin, yBin, pixelsInBin, data = imageData.data;
     if (pixelSize <= 0) {
         Util_1.Util.error('pixelSize value can not be <= 0');
Index: imaps-frontend/node_modules/konva/lib/filters/Posterize.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/Posterize.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/Posterize.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -6,5 +6,5 @@
 const Validators_1 = require("../Validators");
 const Posterize = function (imageData) {
-    let levels = Math.round(this.levels() * 254) + 1, data = imageData.data, len = data.length, scale = 255 / levels, i;
+    var levels = Math.round(this.levels() * 254) + 1, data = imageData.data, len = data.length, scale = 255 / levels, i;
     for (i = 0; i < len; i += 1) {
         data[i] = Math.floor(data[i] / scale) * scale;
Index: imaps-frontend/node_modules/konva/lib/filters/RGB.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/RGB.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/RGB.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -6,5 +6,5 @@
 const Validators_1 = require("../Validators");
 const RGB = function (imageData) {
-    let data = imageData.data, nPixels = data.length, red = this.red(), green = this.green(), blue = this.blue(), i, brightness;
+    var data = imageData.data, nPixels = data.length, red = this.red(), green = this.green(), blue = this.blue(), i, brightness;
     for (i = 0; i < nPixels; i += 4) {
         brightness =
Index: imaps-frontend/node_modules/konva/lib/filters/RGBA.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/RGBA.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/RGBA.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -6,7 +6,7 @@
 const Validators_1 = require("../Validators");
 const RGBA = function (imageData) {
-    const data = imageData.data, nPixels = data.length, red = this.red(), green = this.green(), blue = this.blue(), alpha = this.alpha();
-    for (let i = 0; i < nPixels; i += 4) {
-        const ia = 1 - alpha;
+    var data = imageData.data, nPixels = data.length, red = this.red(), green = this.green(), blue = this.blue(), alpha = this.alpha(), i, ia;
+    for (i = 0; i < nPixels; i += 4) {
+        ia = 1 - alpha;
         data[i] = red * alpha + data[i] * ia;
         data[i + 1] = green * alpha + data[i + 1] * ia;
Index: imaps-frontend/node_modules/konva/lib/filters/Sepia.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/Sepia.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/Sepia.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -3,5 +3,5 @@
 exports.Sepia = void 0;
 const Sepia = function (imageData) {
-    let data = imageData.data, nPixels = data.length, i, r, g, b;
+    var data = imageData.data, nPixels = data.length, i, r, g, b;
     for (i = 0; i < nPixels; i += 4) {
         r = data[i + 0];
Index: imaps-frontend/node_modules/konva/lib/filters/Solarize.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/Solarize.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/Solarize.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -3,14 +3,13 @@
 exports.Solarize = void 0;
 const Solarize = function (imageData) {
-    const data = imageData.data, w = imageData.width, h = imageData.height, w4 = w * 4;
-    let y = h;
+    var data = imageData.data, w = imageData.width, h = imageData.height, w4 = w * 4, y = h;
     do {
-        const offsetY = (y - 1) * w4;
-        let x = w;
+        var offsetY = (y - 1) * w4;
+        var x = w;
         do {
-            const offset = offsetY + (x - 1) * 4;
-            let r = data[offset];
-            let g = data[offset + 1];
-            let b = data[offset + 2];
+            var offset = offsetY + (x - 1) * 4;
+            var r = data[offset];
+            var g = data[offset + 1];
+            var b = data[offset + 2];
             if (r > 127) {
                 r = 255 - r;
Index: imaps-frontend/node_modules/konva/lib/filters/Threshold.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/filters/Threshold.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/filters/Threshold.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -6,6 +6,6 @@
 const Validators_1 = require("../Validators");
 const Threshold = function (imageData) {
-    const level = this.threshold() * 255, data = imageData.data, len = data.length;
-    for (let i = 0; i < len; i += 1) {
+    var level = this.threshold() * 255, data = imageData.data, len = data.length, i;
+    for (i = 0; i < len; i += 1) {
         data[i] = data[i] < level ? 0 : 255;
     }
Index: imaps-frontend/node_modules/konva/lib/shapes/Arc.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Arc.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Arc.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -9,5 +9,5 @@
 class Arc extends Shape_1.Shape {
     _sceneFunc(context) {
-        const angle = Global_1.Konva.getAngle(this.angle()), clockwise = this.clockwise();
+        var angle = Global_1.Konva.getAngle(this.angle()), clockwise = this.clockwise();
         context.beginPath();
         context.arc(0, 0, this.outerRadius(), 0, angle, clockwise);
Index: imaps-frontend/node_modules/konva/lib/shapes/Arrow.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Arrow.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Arrow.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -10,14 +10,14 @@
     _sceneFunc(ctx) {
         super._sceneFunc(ctx);
-        const PI2 = Math.PI * 2;
-        const points = this.points();
-        let tp = points;
-        const fromTension = this.tension() !== 0 && points.length > 4;
+        var PI2 = Math.PI * 2;
+        var points = this.points();
+        var tp = points;
+        var fromTension = this.tension() !== 0 && points.length > 4;
         if (fromTension) {
             tp = this.getTensionPoints();
         }
-        const length = this.pointerLength();
-        const n = points.length;
-        let dx, dy;
+        var length = this.pointerLength();
+        var n = points.length;
+        var dx, dy;
         if (fromTension) {
             const lp = [
@@ -38,6 +38,6 @@
             dy = points[n - 1] - points[n - 3];
         }
-        const radians = (Math.atan2(dy, dx) + PI2) % PI2;
-        const width = this.pointerWidth();
+        var radians = (Math.atan2(dy, dx) + PI2) % PI2;
+        var width = this.pointerWidth();
         if (this.pointerAtEnding()) {
             ctx.save();
@@ -74,5 +74,5 @@
     }
     __fillStroke(ctx) {
-        const isDashEnabled = this.dashEnabled();
+        var isDashEnabled = this.dashEnabled();
         if (isDashEnabled) {
             this.attrs.dashEnabled = false;
Index: imaps-frontend/node_modules/konva/lib/shapes/Ellipse.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Ellipse.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Ellipse.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -8,5 +8,5 @@
 class Ellipse extends Shape_1.Shape {
     _sceneFunc(context) {
-        const rx = this.radiusX(), ry = this.radiusY();
+        var rx = this.radiusX(), ry = this.radiusY();
         context.beginPath();
         context.save();
Index: imaps-frontend/node_modules/konva/lib/shapes/Image.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Image.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Image.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -79,5 +79,5 @@
     }
     _hitFunc(context) {
-        const width = this.width(), height = this.height(), cornerRadius = this.cornerRadius();
+        var width = this.width(), height = this.height(), cornerRadius = this.cornerRadius();
         context.beginPath();
         if (!cornerRadius) {
@@ -99,7 +99,7 @@
     }
     static fromURL(url, callback, onError = null) {
-        const img = Util_1.Util.createImageElement();
+        var img = Util_1.Util.createImageElement();
         img.onload = function () {
-            const image = new Image({
+            var image = new Image({
                 image: img,
             });
Index: imaps-frontend/node_modules/konva/lib/shapes/Label.d.ts
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Label.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Label.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -30,5 +30,5 @@
         height: number;
     };
-    pointerDirection: GetSet<'left' | 'top' | 'right' | 'bottom' | 'up' | 'down', this>;
+    pointerDirection: GetSet<'left' | 'top' | 'right' | 'bottom', this>;
     pointerWidth: GetSet<number, this>;
     pointerHeight: GetSet<number, this>;
Index: imaps-frontend/node_modules/konva/lib/shapes/Label.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Label.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Label.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -7,5 +7,5 @@
 const Validators_1 = require("../Validators");
 const Global_1 = require("../Global");
-const ATTR_CHANGE_LIST = [
+var ATTR_CHANGE_LIST = [
     'fontFamily',
     'fontSize',
@@ -35,6 +35,6 @@
     }
     _addListeners(text) {
-        let that = this, n;
-        const func = function () {
+        var that = this, n;
+        var func = function () {
             that._sync();
         };
@@ -50,5 +50,5 @@
     }
     _sync() {
-        let text = this.getText(), tag = this.getTag(), width, height, pointerDirection, pointerWidth, x, y, pointerHeight;
+        var text = this.getText(), tag = this.getTag(), width, height, pointerDirection, pointerWidth, x, y, pointerHeight;
         if (text && tag) {
             width = text.width();
@@ -95,5 +95,5 @@
 class Tag extends Shape_1.Shape {
     _sceneFunc(context) {
-        const width = this.width(), height = this.height(), pointerDirection = this.pointerDirection(), pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), cornerRadius = this.cornerRadius();
+        var width = this.width(), height = this.height(), pointerDirection = this.pointerDirection(), pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), cornerRadius = this.cornerRadius();
         let topLeft = 0;
         let topRight = 0;
@@ -147,5 +147,5 @@
     }
     getSelfRect() {
-        let x = 0, y = 0, pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), direction = this.pointerDirection(), width = this.width(), height = this.height();
+        var x = 0, y = 0, pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), direction = this.pointerDirection(), width = this.width(), height = this.height();
         if (direction === UP) {
             y -= pointerHeight;
Index: imaps-frontend/node_modules/konva/lib/shapes/Line.d.ts
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Line.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Line.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -1,5 +1,5 @@
 import { Shape, ShapeConfig } from '../Shape.js';
+import { GetSet } from '../types.js';
 import { Context } from '../Context.js';
-import { GetSet } from '../types.js';
 export interface LineConfig extends ShapeConfig {
     points?: number[] | Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array;
Index: imaps-frontend/node_modules/konva/lib/shapes/Line.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Line.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Line.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -3,15 +3,15 @@
 exports.Line = void 0;
 const Factory_1 = require("../Factory");
-const Global_1 = require("../Global");
 const Shape_1 = require("../Shape");
 const Validators_1 = require("../Validators");
+const Global_1 = require("../Global");
 function getControlPoints(x0, y0, x1, y1, x2, y2, t) {
-    const d01 = Math.sqrt(Math.pow(x1 - x0, 2) + Math.pow(y1 - y0, 2)), d12 = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)), fa = (t * d01) / (d01 + d12), fb = (t * d12) / (d01 + d12), p1x = x1 - fa * (x2 - x0), p1y = y1 - fa * (y2 - y0), p2x = x1 + fb * (x2 - x0), p2y = y1 + fb * (y2 - y0);
+    var d01 = Math.sqrt(Math.pow(x1 - x0, 2) + Math.pow(y1 - y0, 2)), d12 = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)), fa = (t * d01) / (d01 + d12), fb = (t * d12) / (d01 + d12), p1x = x1 - fa * (x2 - x0), p1y = y1 - fa * (y2 - y0), p2x = x1 + fb * (x2 - x0), p2y = y1 + fb * (y2 - y0);
     return [p1x, p1y, p2x, p2y];
 }
 function expandPoints(p, tension) {
-    const len = p.length, allPoints = [];
-    for (let n = 2; n < len - 2; n += 2) {
-        const cp = getControlPoints(p[n - 2], p[n - 1], p[n], p[n + 1], p[n + 2], p[n + 3], tension);
+    var len = p.length, allPoints = [], n, cp;
+    for (n = 2; n < len - 2; n += 2) {
+        cp = getControlPoints(p[n - 2], p[n - 1], p[n], p[n + 1], p[n + 2], p[n + 3], tension);
         if (isNaN(cp[0])) {
             continue;
@@ -34,5 +34,5 @@
     }
     _sceneFunc(context) {
-        let points = this.points(), length = points.length, tension = this.tension(), closed = this.closed(), bezier = this.bezier(), tp, len, n;
+        var points = this.points(), length = points.length, tension = this.tension(), closed = this.closed(), bezier = this.bezier(), tp, len, n;
         if (!length) {
             return;
@@ -85,5 +85,5 @@
     }
     _getTensionPointsClosed() {
-        const p = this.points(), len = p.length, tension = this.tension(), firstControlPoints = getControlPoints(p[len - 2], p[len - 1], p[0], p[1], p[2], p[3], tension), lastControlPoints = getControlPoints(p[len - 4], p[len - 3], p[len - 2], p[len - 1], p[0], p[1], tension), middle = expandPoints(p, tension), tp = [firstControlPoints[2], firstControlPoints[3]]
+        var p = this.points(), len = p.length, tension = this.tension(), firstControlPoints = getControlPoints(p[len - 2], p[len - 1], p[0], p[1], p[2], p[3], tension), lastControlPoints = getControlPoints(p[len - 4], p[len - 3], p[len - 2], p[len - 1], p[0], p[1], tension), middle = expandPoints(p, tension), tp = [firstControlPoints[2], firstControlPoints[3]]
             .concat(middle)
             .concat([
@@ -108,5 +108,5 @@
     }
     getSelfRect() {
-        let points = this.points();
+        var points = this.points();
         if (points.length < 4) {
             return {
@@ -129,10 +129,10 @@
             points = this.points();
         }
-        let minX = points[0];
-        let maxX = points[0];
-        let minY = points[1];
-        let maxY = points[1];
-        let x, y;
-        for (let i = 0; i < points.length / 2; i++) {
+        var minX = points[0];
+        var maxX = points[0];
+        var minY = points[1];
+        var maxY = points[1];
+        var x, y;
+        for (var i = 0; i < points.length / 2; i++) {
             x = points[i * 2];
             y = points[i * 2 + 1];
Index: imaps-frontend/node_modules/konva/lib/shapes/Path.d.ts
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Path.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Path.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -18,17 +18,17 @@
     getLength(): number;
     getPointAtLength(length: any): {
-        x: number;
-        y: number;
+        x: any;
+        y: any;
     } | null;
     data: GetSet<string, this>;
     static getLineLength(x1: any, y1: any, x2: any, y2: any): number;
     static getPathLength(dataArray: PathSegment[]): number;
-    static getPointAtLengthOfDataArray(length: number, dataArray: PathSegment[]): {
-        x: number;
-        y: number;
+    static getPointAtLengthOfDataArray(length: number, dataArray: any): {
+        x: any;
+        y: any;
     } | null;
-    static getPointOnLine(dist: number, P1x: number, P1y: number, P2x: number, P2y: number, fromX?: number, fromY?: number): {
-        x: number;
-        y: number;
+    static getPointOnLine(dist: any, P1x: any, P1y: any, P2x: any, P2y: any, fromX?: any, fromY?: any): {
+        x: any;
+        y: any;
     };
     static getPointOnCubicBezier(pct: any, P1x: any, P1y: any, P2x: any, P2y: any, P3x: any, P3y: any, P4x: any, P4y: any): {
Index: imaps-frontend/node_modules/konva/lib/shapes/Path.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Path.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Path.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -21,10 +21,10 @@
     }
     _sceneFunc(context) {
-        const ca = this.dataArray;
+        var ca = this.dataArray;
         context.beginPath();
-        let isClosed = false;
-        for (let n = 0; n < ca.length; n++) {
-            const c = ca[n].command;
-            const p = ca[n].points;
+        var isClosed = false;
+        for (var n = 0; n < ca.length; n++) {
+            var c = ca[n].command;
+            var p = ca[n].points;
             switch (c) {
                 case 'L':
@@ -67,11 +67,11 @@
     }
     getSelfRect() {
-        let points = [];
+        var points = [];
         this.dataArray.forEach(function (data) {
             if (data.command === 'A') {
-                const start = data.points[4];
-                const dTheta = data.points[5];
-                const end = data.points[4] + dTheta;
-                let inc = Math.PI / 180.0;
+                var start = data.points[4];
+                var dTheta = data.points[5];
+                var end = data.points[4] + dTheta;
+                var inc = Math.PI / 180.0;
                 if (Math.abs(start - end) < inc) {
                     inc = Math.abs(start - end);
@@ -100,10 +100,10 @@
             }
         });
-        let minX = points[0];
-        let maxX = points[0];
-        let minY = points[1];
-        let maxY = points[1];
-        let x, y;
-        for (let i = 0; i < points.length / 2; i++) {
+        var minX = points[0];
+        var maxX = points[0];
+        var minY = points[1];
+        var maxY = points[1];
+        var x, y;
+        for (var i = 0; i < points.length / 2; i++) {
             x = points[i * 2];
             y = points[i * 2 + 1];
@@ -135,5 +135,5 @@
     static getPathLength(dataArray) {
         let pathLength = 0;
-        for (let i = 0; i < dataArray.length; ++i) {
+        for (var i = 0; i < dataArray.length; ++i) {
             pathLength += dataArray[i].pathLength;
         }
@@ -141,5 +141,5 @@
     }
     static getPointAtLengthOfDataArray(length, dataArray) {
-        let points, i = 0, ii = dataArray.length;
+        var point, i = 0, ii = dataArray.length;
         if (!ii) {
             return null;
@@ -150,19 +150,19 @@
         }
         if (i === ii) {
-            points = dataArray[i - 1].points.slice(-2);
+            point = dataArray[i - 1].points.slice(-2);
             return {
-                x: points[0],
-                y: points[1],
+                x: point[0],
+                y: point[1],
             };
         }
         if (length < 0.01) {
-            points = dataArray[i].points.slice(0, 2);
+            point = dataArray[i].points.slice(0, 2);
             return {
-                x: points[0],
-                y: points[1],
+                x: point[0],
+                y: point[1],
             };
         }
-        const cp = dataArray[i];
-        const p = cp.points;
+        var cp = dataArray[i];
+        var p = cp.points;
         switch (cp.command) {
             case 'L':
@@ -221,6 +221,6 @@
             return (1 - t) * (1 - t) * (1 - t);
         }
-        const x = P4x * CB1(pct) + P3x * CB2(pct) + P2x * CB3(pct) + P1x * CB4(pct);
-        const y = P4y * CB1(pct) + P3y * CB2(pct) + P2y * CB3(pct) + P1y * CB4(pct);
+        var x = P4x * CB1(pct) + P3x * CB2(pct) + P2x * CB3(pct) + P1x * CB4(pct);
+        var y = P4y * CB1(pct) + P3y * CB2(pct) + P2y * CB3(pct) + P1y * CB4(pct);
         return {
             x: x,
@@ -238,6 +238,6 @@
             return (1 - t) * (1 - t);
         }
-        const x = P3x * QB1(pct) + P2x * QB2(pct) + P1x * QB3(pct);
-        const y = P3y * QB1(pct) + P2y * QB2(pct) + P1y * QB3(pct);
+        var x = P3x * QB1(pct) + P2x * QB2(pct) + P1x * QB3(pct);
+        var y = P3y * QB1(pct) + P2y * QB2(pct) + P1y * QB3(pct);
         return {
             x: x,
@@ -246,6 +246,6 @@
     }
     static getPointOnEllipticalArc(cx, cy, rx, ry, theta, psi) {
-        const cosPsi = Math.cos(psi), sinPsi = Math.sin(psi);
-        const pt = {
+        var cosPsi = Math.cos(psi), sinPsi = Math.sin(psi);
+        var pt = {
             x: rx * Math.cos(theta),
             y: ry * Math.sin(theta),
@@ -260,6 +260,6 @@
             return [];
         }
-        let cs = data;
-        const cc = [
+        var cs = data;
+        var cc = [
             'm',
             'M',
@@ -287,14 +287,14 @@
             cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]);
         }
-        const arr = cs.split('|');
-        const ca = [];
-        const coords = [];
-        let cpx = 0;
-        let cpy = 0;
-        const re = /([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi;
-        let match;
+        var arr = cs.split('|');
+        var ca = [];
+        var coords = [];
+        var cpx = 0;
+        var cpy = 0;
+        var re = /([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi;
+        var match;
         for (n = 1; n < arr.length; n++) {
-            let str = arr[n];
-            let c = str.charAt(0);
+            var str = arr[n];
+            var c = str.charAt(0);
             str = str.slice(1);
             coords.length = 0;
@@ -302,11 +302,11 @@
                 coords.push(match[0]);
             }
-            const p = [];
-            for (let j = 0, jlen = coords.length; j < jlen; j++) {
+            var p = [];
+            for (var j = 0, jlen = coords.length; j < jlen; j++) {
                 if (coords[j] === '00') {
                     p.push(0, 0);
                     continue;
                 }
-                const parsed = parseFloat(coords[j]);
+                var parsed = parseFloat(coords[j]);
                 if (!isNaN(parsed)) {
                     p.push(parsed);
@@ -320,7 +320,7 @@
                     break;
                 }
-                let cmd = '';
-                let points = [];
-                const startX = cpx, startY = cpy;
+                var cmd = '';
+                var points = [];
+                var startX = cpx, startY = cpy;
                 var prevCmd, ctlPtx, ctlPty;
                 var rx, ry, psi, fa, fs, x1, y1;
@@ -344,5 +344,5 @@
                         cmd = 'M';
                         if (ca.length > 2 && ca[ca.length - 1].command === 'z') {
-                            for (let idx = ca.length - 2; idx >= 0; idx--) {
+                            for (var idx = ca.length - 2; idx >= 0; idx--) {
                                 if (ca[idx].command === 'M') {
                                     cpx = ca[idx].points[0] + dx;
@@ -511,6 +511,6 @@
     }
     static calcLength(x, y, cmd, points) {
-        let len, p1, p2, t;
-        const path = Path;
+        var len, p1, p2, t;
+        var path = Path;
         switch (cmd) {
             case 'L':
@@ -551,14 +551,14 @@
     }
     static convertEndpointToCenterParameterization(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg) {
-        const psi = psiDeg * (Math.PI / 180.0);
-        const xp = (Math.cos(psi) * (x1 - x2)) / 2.0 + (Math.sin(psi) * (y1 - y2)) / 2.0;
-        const yp = (-1 * Math.sin(psi) * (x1 - x2)) / 2.0 +
+        var psi = psiDeg * (Math.PI / 180.0);
+        var xp = (Math.cos(psi) * (x1 - x2)) / 2.0 + (Math.sin(psi) * (y1 - y2)) / 2.0;
+        var yp = (-1 * Math.sin(psi) * (x1 - x2)) / 2.0 +
             (Math.cos(psi) * (y1 - y2)) / 2.0;
-        const lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);
+        var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);
         if (lambda > 1) {
             rx *= Math.sqrt(lambda);
             ry *= Math.sqrt(lambda);
         }
-        let f = Math.sqrt((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) /
+        var f = Math.sqrt((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) /
             (rx * rx * (yp * yp) + ry * ry * (xp * xp)));
         if (fa === fs) {
@@ -568,21 +568,21 @@
             f = 0;
         }
-        const cxp = (f * rx * yp) / ry;
-        const cyp = (f * -ry * xp) / rx;
-        const cx = (x1 + x2) / 2.0 + Math.cos(psi) * cxp - Math.sin(psi) * cyp;
-        const cy = (y1 + y2) / 2.0 + Math.sin(psi) * cxp + Math.cos(psi) * cyp;
-        const vMag = function (v) {
+        var cxp = (f * rx * yp) / ry;
+        var cyp = (f * -ry * xp) / rx;
+        var cx = (x1 + x2) / 2.0 + Math.cos(psi) * cxp - Math.sin(psi) * cyp;
+        var cy = (y1 + y2) / 2.0 + Math.sin(psi) * cxp + Math.cos(psi) * cyp;
+        var vMag = function (v) {
             return Math.sqrt(v[0] * v[0] + v[1] * v[1]);
         };
-        const vRatio = function (u, v) {
+        var vRatio = function (u, v) {
             return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));
         };
-        const vAngle = function (u, v) {
+        var vAngle = function (u, v) {
             return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));
         };
-        const theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]);
-        const u = [(xp - cxp) / rx, (yp - cyp) / ry];
-        const v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];
-        let dTheta = vAngle(u, v);
+        var theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]);
+        var u = [(xp - cxp) / rx, (yp - cyp) / ry];
+        var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];
+        var dTheta = vAngle(u, v);
         if (vRatio(u, v) <= -1) {
             dTheta = Math.PI;
Index: imaps-frontend/node_modules/konva/lib/shapes/Rect.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Rect.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Rect.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -9,5 +9,5 @@
 class Rect extends Shape_1.Shape {
     _sceneFunc(context) {
-        const cornerRadius = this.cornerRadius(), width = this.width(), height = this.height();
+        var cornerRadius = this.cornerRadius(), width = this.width(), height = this.height();
         context.beginPath();
         if (!cornerRadius) {
Index: imaps-frontend/node_modules/konva/lib/shapes/RegularPolygon.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/RegularPolygon.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/RegularPolygon.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -11,5 +11,5 @@
         context.beginPath();
         context.moveTo(points[0].x, points[0].y);
-        for (let n = 1; n < points.length; n++) {
+        for (var n = 1; n < points.length; n++) {
             context.lineTo(points[n].x, points[n].y);
         }
@@ -21,5 +21,5 @@
         const radius = this.attrs.radius || 0;
         const points = [];
-        for (let n = 0; n < sides; n++) {
+        for (var n = 0; n < sides; n++) {
             points.push({
                 x: radius * Math.sin((n * 2 * Math.PI) / sides),
@@ -31,8 +31,8 @@
     getSelfRect() {
         const points = this._getPoints();
-        let minX = points[0].x;
-        let maxX = points[0].y;
-        let minY = points[0].x;
-        let maxY = points[0].y;
+        var minX = points[0].x;
+        var maxX = points[0].y;
+        var minY = points[0].x;
+        var maxY = points[0].y;
         points.forEach((point) => {
             minX = Math.min(minX, point.x);
Index: imaps-frontend/node_modules/konva/lib/shapes/Ring.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Ring.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Ring.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -6,5 +6,5 @@
 const Validators_1 = require("../Validators");
 const Global_1 = require("../Global");
-const PIx2 = Math.PI * 2;
+var PIx2 = Math.PI * 2;
 class Ring extends Shape_1.Shape {
     _sceneFunc(context) {
Index: imaps-frontend/node_modules/konva/lib/shapes/Sprite.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Sprite.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Sprite.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -12,5 +12,5 @@
         this._updated = true;
         this.anim = new Animation_1.Animation(() => {
-            const updated = this._updated;
+            var updated = this._updated;
             this._updated = false;
             return updated;
@@ -31,5 +31,5 @@
     }
     _sceneFunc(context) {
-        const anim = this.animation(), index = this.frameIndex(), ix4 = index * 4, set = this.animations()[anim], offsets = this.frameOffsets(), x = set[ix4 + 0], y = set[ix4 + 1], width = set[ix4 + 2], height = set[ix4 + 3], image = this.image();
+        var anim = this.animation(), index = this.frameIndex(), ix4 = index * 4, set = this.animations()[anim], offsets = this.frameOffsets(), x = set[ix4 + 0], y = set[ix4 + 1], width = set[ix4 + 2], height = set[ix4 + 3], image = this.image();
         if (this.hasFill() || this.hasStroke()) {
             context.beginPath();
@@ -40,5 +40,5 @@
         if (image) {
             if (offsets) {
-                const offset = offsets[anim], ix2 = index * 2;
+                var offset = offsets[anim], ix2 = index * 2;
                 context.drawImage(image, x, y, width, height, offset[ix2 + 0], offset[ix2 + 1], width, height);
             }
@@ -49,9 +49,9 @@
     }
     _hitFunc(context) {
-        const anim = this.animation(), index = this.frameIndex(), ix4 = index * 4, set = this.animations()[anim], offsets = this.frameOffsets(), width = set[ix4 + 2], height = set[ix4 + 3];
+        var anim = this.animation(), index = this.frameIndex(), ix4 = index * 4, set = this.animations()[anim], offsets = this.frameOffsets(), width = set[ix4 + 2], height = set[ix4 + 3];
         context.beginPath();
         if (offsets) {
-            const offset = offsets[anim];
-            const ix2 = index * 2;
+            var offset = offsets[anim];
+            var ix2 = index * 2;
             context.rect(offset[ix2 + 0], offset[ix2 + 1], width, height);
         }
@@ -66,5 +66,5 @@
     }
     _setInterval() {
-        const that = this;
+        var that = this;
         this.interval = setInterval(function () {
             that._updateIndex();
@@ -75,5 +75,5 @@
             return;
         }
-        const layer = this.getLayer();
+        var layer = this.getLayer();
         this.anim.setLayers(layer);
         this._setInterval();
@@ -88,5 +88,5 @@
     }
     _updateIndex() {
-        const index = this.frameIndex(), animation = this.animation(), animations = this.animations(), anim = animations[animation], len = anim.length / 4;
+        var index = this.frameIndex(), animation = this.animation(), animations = this.animations(), anim = animations[animation], len = anim.length / 4;
         if (index < len - 1) {
             this.frameIndex(index + 1);
Index: imaps-frontend/node_modules/konva/lib/shapes/Star.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Star.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Star.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -8,11 +8,11 @@
 class Star extends Shape_1.Shape {
     _sceneFunc(context) {
-        const innerRadius = this.innerRadius(), outerRadius = this.outerRadius(), numPoints = this.numPoints();
+        var innerRadius = this.innerRadius(), outerRadius = this.outerRadius(), numPoints = this.numPoints();
         context.beginPath();
         context.moveTo(0, 0 - outerRadius);
-        for (let n = 1; n < numPoints * 2; n++) {
-            const radius = n % 2 === 0 ? outerRadius : innerRadius;
-            const x = radius * Math.sin((n * Math.PI) / numPoints);
-            const y = -1 * radius * Math.cos((n * Math.PI) / numPoints);
+        for (var n = 1; n < numPoints * 2; n++) {
+            var radius = n % 2 === 0 ? outerRadius : innerRadius;
+            var x = radius * Math.sin((n * Math.PI) / numPoints);
+            var y = -1 * radius * Math.cos((n * Math.PI) / numPoints);
             context.lineTo(x, y);
         }
Index: imaps-frontend/node_modules/konva/lib/shapes/Text.d.ts
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Text.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Text.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -38,17 +38,17 @@
     getTextWidth(): number;
     getTextHeight(): number;
-    measureSize(text: string): {
-        actualBoundingBoxAscent: number;
-        actualBoundingBoxDescent: number;
-        actualBoundingBoxLeft: number;
-        actualBoundingBoxRight: number;
-        alphabeticBaseline: number;
-        emHeightAscent: number;
-        emHeightDescent: number;
-        fontBoundingBoxAscent: number;
-        fontBoundingBoxDescent: number;
-        hangingBaseline: number;
-        ideographicBaseline: number;
-        width: number;
+    measureSize(text: any): {
+        actualBoundingBoxAscent: any;
+        actualBoundingBoxDescent: any;
+        actualBoundingBoxLeft: any;
+        actualBoundingBoxRight: any;
+        alphabeticBaseline: any;
+        emHeightAscent: any;
+        emHeightDescent: any;
+        fontBoundingBoxAscent: any;
+        fontBoundingBoxDescent: any;
+        hangingBaseline: any;
+        ideographicBaseline: any;
+        width: any;
         height: number;
     };
Index: imaps-frontend/node_modules/konva/lib/shapes/Text.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Text.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Text.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -1,6 +1,5 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.Text = void 0;
-exports.stringToArray = stringToArray;
+exports.Text = exports.stringToArray = void 0;
 const Util_1 = require("../Util");
 const Factory_1 = require("../Factory");
@@ -10,21 +9,8 @@
 const Global_2 = require("../Global");
 function stringToArray(string) {
-    return [...string].reduce((acc, char, index, array) => {
-        if (/\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?(?:\u200D\p{Emoji_Presentation})+/u.test(char)) {
-            acc.push(char);
-        }
-        else if (/\p{Regional_Indicator}{2}/u.test(char + (array[index + 1] || ''))) {
-            acc.push(char + array[index + 1]);
-        }
-        else if (index > 0 && /\p{Mn}|\p{Me}|\p{Mc}/u.test(char)) {
-            acc[acc.length - 1] += char;
-        }
-        else {
-            acc.push(char);
-        }
-        return acc;
-    }, []);
-}
-const AUTO = 'auto', CENTER = 'center', INHERIT = 'inherit', JUSTIFY = 'justify', CHANGE_KONVA = 'Change.konva', CONTEXT_2D = '2d', DASH = '-', LEFT = 'left', TEXT = 'text', TEXT_UPPER = 'Text', TOP = 'top', BOTTOM = 'bottom', MIDDLE = 'middle', NORMAL = 'normal', PX_SPACE = 'px ', SPACE = ' ', RIGHT = 'right', RTL = 'rtl', WORD = 'word', CHAR = 'char', NONE = 'none', ELLIPSIS = '…', ATTR_CHANGE_LIST = [
+    return Array.from(string);
+}
+exports.stringToArray = stringToArray;
+var AUTO = 'auto', CENTER = 'center', INHERIT = 'inherit', JUSTIFY = 'justify', CHANGE_KONVA = 'Change.konva', CONTEXT_2D = '2d', DASH = '-', LEFT = 'left', LTR = 'ltr', TEXT = 'text', TEXT_UPPER = 'Text', TOP = 'top', BOTTOM = 'bottom', MIDDLE = 'middle', NORMAL = 'normal', PX_SPACE = 'px ', SPACE = ' ', RIGHT = 'right', RTL = 'rtl', WORD = 'word', CHAR = 'char', NONE = 'none', ELLIPSIS = '…', ATTR_CHANGE_LIST = [
     'direction',
     'fontFamily',
@@ -57,5 +43,5 @@
         .join(', ');
 }
-let dummyContext;
+var dummyContext;
 function getDummyContext() {
     if (dummyContext) {
@@ -86,5 +72,5 @@
         this._partialTextX = 0;
         this._partialTextY = 0;
-        for (let n = 0; n < attrChangeListLen; n++) {
+        for (var n = 0; n < attrChangeListLen; n++) {
             this.on(ATTR_CHANGE_LIST[n] + CHANGE_KONVA, this._setTextData);
         }
@@ -92,14 +78,14 @@
     }
     _sceneFunc(context) {
-        const textArr = this.textArr, textArrLen = textArr.length;
+        var textArr = this.textArr, textArrLen = textArr.length;
         if (!this.text()) {
             return;
         }
-        let padding = this.padding(), fontSize = this.fontSize(), lineHeightPx = this.lineHeight() * fontSize, verticalAlign = this.verticalAlign(), direction = this.direction(), alignY = 0, align = this.align(), totalWidth = this.getWidth(), letterSpacing = this.letterSpacing(), fill = this.fill(), textDecoration = this.textDecoration(), shouldUnderline = textDecoration.indexOf('underline') !== -1, shouldLineThrough = textDecoration.indexOf('line-through') !== -1, n;
+        var padding = this.padding(), fontSize = this.fontSize(), lineHeightPx = this.lineHeight() * fontSize, verticalAlign = this.verticalAlign(), direction = this.direction(), alignY = 0, align = this.align(), totalWidth = this.getWidth(), letterSpacing = this.letterSpacing(), fill = this.fill(), textDecoration = this.textDecoration(), shouldUnderline = textDecoration.indexOf('underline') !== -1, shouldLineThrough = textDecoration.indexOf('line-through') !== -1, n;
         direction = direction === INHERIT ? context.direction : direction;
-        let translateY = lineHeightPx / 2;
-        let baseline = MIDDLE;
+        var translateY = lineHeightPx / 2;
+        var baseline = MIDDLE;
         if (Global_1.Konva._fixTextRendering) {
-            const metrics = this.measureSize('M');
+            var metrics = this.measureSize('M');
             baseline = 'alphabetic';
             translateY =
@@ -136,5 +122,5 @@
                 context.save();
                 context.beginPath();
-                const yOffset = Global_1.Konva._fixTextRendering
+                let yOffset = Global_1.Konva._fixTextRendering
                     ? Math.round(fontSize / 4)
                     : Math.round(fontSize / 2);
@@ -156,5 +142,5 @@
                 context.save();
                 context.beginPath();
-                const yOffset = Global_1.Konva._fixTextRendering ? -Math.round(fontSize / 4) : 0;
+                let yOffset = Global_1.Konva._fixTextRendering ? -Math.round(fontSize / 4) : 0;
                 context.moveTo(lineTranslateX, translateY + lineTranslateY + yOffset);
                 spacesNumber = text.split(' ').length - 1;
@@ -173,7 +159,7 @@
             if (direction !== RTL && (letterSpacing !== 0 || align === JUSTIFY)) {
                 spacesNumber = text.split(' ').length - 1;
-                const array = stringToArray(text);
-                for (let li = 0; li < array.length; li++) {
-                    const letter = array[li];
+                var array = stringToArray(text);
+                for (var li = 0; li < array.length; li++) {
+                    var letter = array[li];
                     if (letter === ' ' && !lastLine && align === JUSTIFY) {
                         lineTranslateX += (totalWidth - padding * 2 - width) / spacesNumber;
@@ -202,5 +188,5 @@
     }
     _hitFunc(context) {
-        const width = this.getWidth(), height = this.getHeight();
+        var width = this.getWidth(), height = this.getHeight();
         context.beginPath();
         context.rect(0, 0, width, height);
@@ -209,5 +195,5 @@
     }
     setText(text) {
-        const str = Util_1.Util._isString(text)
+        var str = Util_1.Util._isString(text)
             ? text
             : text === null || text === undefined
@@ -218,9 +204,9 @@
     }
     getWidth() {
-        const isAuto = this.attrs.width === AUTO || this.attrs.width === undefined;
+        var isAuto = this.attrs.width === AUTO || this.attrs.width === undefined;
         return isAuto ? this.getTextWidth() + this.padding() * 2 : this.attrs.width;
     }
     getHeight() {
-        const isAuto = this.attrs.height === AUTO || this.attrs.height === undefined;
+        var isAuto = this.attrs.height === AUTO || this.attrs.height === undefined;
         return isAuto
             ? this.fontSize() * this.textArr.length * this.lineHeight() +
@@ -237,5 +223,5 @@
     measureSize(text) {
         var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
-        let _context = getDummyContext(), fontSize = this.fontSize(), metrics;
+        var _context = getDummyContext(), fontSize = this.fontSize(), metrics;
         _context.save();
         _context.font = this._getContextFont();
@@ -272,5 +258,5 @@
             line = line.trim();
         }
-        const width = this._getTextWidth(line);
+        var width = this._getTextWidth(line);
         return this.textArr.push({
             text: line,
@@ -280,22 +266,22 @@
     }
     _getTextWidth(text) {
-        const letterSpacing = this.letterSpacing();
-        const length = text.length;
+        var letterSpacing = this.letterSpacing();
+        var length = text.length;
         return (getDummyContext().measureText(text).width +
             (length ? letterSpacing * (length - 1) : 0));
     }
     _setTextData() {
-        let lines = this.text().split('\n'), fontSize = +this.fontSize(), textWidth = 0, lineHeightPx = this.lineHeight() * fontSize, width = this.attrs.width, height = this.attrs.height, fixedWidth = width !== AUTO && width !== undefined, fixedHeight = height !== AUTO && height !== undefined, padding = this.padding(), maxWidth = width - padding * 2, maxHeightPx = height - padding * 2, currentHeightPx = 0, wrap = this.wrap(), shouldWrap = wrap !== NONE, wrapAtWord = wrap !== CHAR && shouldWrap, shouldAddEllipsis = this.ellipsis();
+        var lines = this.text().split('\n'), fontSize = +this.fontSize(), textWidth = 0, lineHeightPx = this.lineHeight() * fontSize, width = this.attrs.width, height = this.attrs.height, fixedWidth = width !== AUTO && width !== undefined, fixedHeight = height !== AUTO && height !== undefined, padding = this.padding(), maxWidth = width - padding * 2, maxHeightPx = height - padding * 2, currentHeightPx = 0, wrap = this.wrap(), shouldWrap = wrap !== NONE, wrapAtWord = wrap !== CHAR && shouldWrap, shouldAddEllipsis = this.ellipsis();
         this.textArr = [];
         getDummyContext().font = this._getContextFont();
-        const additionalWidth = shouldAddEllipsis ? this._getTextWidth(ELLIPSIS) : 0;
-        for (let i = 0, max = lines.length; i < max; ++i) {
-            let line = lines[i];
-            let lineWidth = this._getTextWidth(line);
+        var additionalWidth = shouldAddEllipsis ? this._getTextWidth(ELLIPSIS) : 0;
+        for (var i = 0, max = lines.length; i < max; ++i) {
+            var line = lines[i];
+            var lineWidth = this._getTextWidth(line);
             if (fixedWidth && lineWidth > maxWidth) {
                 while (line.length > 0) {
-                    let low = 0, high = line.length, match = '', matchWidth = 0;
+                    var low = 0, high = line.length, match = '', matchWidth = 0;
                     while (low < high) {
-                        const mid = (low + high) >>> 1, substr = line.slice(0, mid + 1), substrWidth = this._getTextWidth(substr) + additionalWidth;
+                        var mid = (low + high) >>> 1, substr = line.slice(0, mid + 1), substrWidth = this._getTextWidth(substr) + additionalWidth;
                         if (substrWidth <= maxWidth) {
                             low = mid + 1;
@@ -310,6 +296,6 @@
                         if (wrapAtWord) {
                             var wrapIndex;
-                            const nextChar = line[match.length];
-                            const nextIsSpaceOrDash = nextChar === SPACE || nextChar === DASH;
+                            var nextChar = line[match.length];
+                            var nextIsSpaceOrDash = nextChar === SPACE || nextChar === DASH;
                             if (nextIsSpaceOrDash && matchWidth <= maxWidth) {
                                 wrapIndex = match.length;
@@ -330,5 +316,5 @@
                         textWidth = Math.max(textWidth, matchWidth);
                         currentHeightPx += lineHeightPx;
-                        const shouldHandleEllipsis = this._shouldHandleEllipsis(currentHeightPx);
+                        var shouldHandleEllipsis = this._shouldHandleEllipsis(currentHeightPx);
                         if (shouldHandleEllipsis) {
                             this._tryToAddEllipsisToLastLine();
@@ -371,16 +357,16 @@
     }
     _shouldHandleEllipsis(currentHeightPx) {
-        const fontSize = +this.fontSize(), lineHeightPx = this.lineHeight() * fontSize, height = this.attrs.height, fixedHeight = height !== AUTO && height !== undefined, padding = this.padding(), maxHeightPx = height - padding * 2, wrap = this.wrap(), shouldWrap = wrap !== NONE;
+        var fontSize = +this.fontSize(), lineHeightPx = this.lineHeight() * fontSize, height = this.attrs.height, fixedHeight = height !== AUTO && height !== undefined, padding = this.padding(), maxHeightPx = height - padding * 2, wrap = this.wrap(), shouldWrap = wrap !== NONE;
         return (!shouldWrap ||
             (fixedHeight && currentHeightPx + lineHeightPx > maxHeightPx));
     }
     _tryToAddEllipsisToLastLine() {
-        const width = this.attrs.width, fixedWidth = width !== AUTO && width !== undefined, padding = this.padding(), maxWidth = width - padding * 2, shouldAddEllipsis = this.ellipsis();
-        const lastLine = this.textArr[this.textArr.length - 1];
+        var width = this.attrs.width, fixedWidth = width !== AUTO && width !== undefined, padding = this.padding(), maxWidth = width - padding * 2, shouldAddEllipsis = this.ellipsis();
+        var lastLine = this.textArr[this.textArr.length - 1];
         if (!lastLine || !shouldAddEllipsis) {
             return;
         }
         if (fixedWidth) {
-            const haveSpace = this._getTextWidth(lastLine.text + ELLIPSIS) < maxWidth;
+            var haveSpace = this._getTextWidth(lastLine.text + ELLIPSIS) < maxWidth;
             if (!haveSpace) {
                 lastLine.text = lastLine.text.slice(0, lastLine.text.length - 3);
Index: imaps-frontend/node_modules/konva/lib/shapes/TextPath.d.ts
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/TextPath.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/TextPath.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -29,6 +29,6 @@
     _getTextPathLength(): number;
     _getPointAtLength(length: number): {
-        x: number;
-        y: number;
+        x: any;
+        y: any;
     } | null;
     _readDataAttribute(): void;
Index: imaps-frontend/node_modules/konva/lib/shapes/TextPath.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/TextPath.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/TextPath.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -9,5 +9,5 @@
 const Validators_1 = require("../Validators");
 const Global_1 = require("../Global");
-const EMPTY_STRING = '', NORMAL = 'normal';
+var EMPTY_STRING = '', NORMAL = 'normal';
 function _fillFunc(context) {
     context.fillText(this.partialText, 0, 0);
@@ -51,14 +51,14 @@
         context.setAttr('textAlign', 'left');
         context.save();
-        const textDecoration = this.textDecoration();
-        const fill = this.fill();
-        const fontSize = this.fontSize();
-        const glyphInfo = this.glyphInfo;
+        var textDecoration = this.textDecoration();
+        var fill = this.fill();
+        var fontSize = this.fontSize();
+        var glyphInfo = this.glyphInfo;
         if (textDecoration === 'underline') {
             context.beginPath();
         }
-        for (let i = 0; i < glyphInfo.length; i++) {
+        for (var i = 0; i < glyphInfo.length; i++) {
             context.save();
-            const p0 = glyphInfo[i].p0;
+            var p0 = glyphInfo[i].p0;
             context.translate(p0.x, p0.y);
             context.rotate(glyphInfo[i].rotation);
@@ -82,11 +82,11 @@
     _hitFunc(context) {
         context.beginPath();
-        const glyphInfo = this.glyphInfo;
+        var glyphInfo = this.glyphInfo;
         if (glyphInfo.length >= 1) {
-            const p0 = glyphInfo[0].p0;
+            var p0 = glyphInfo[0].p0;
             context.moveTo(p0.x, p0.y);
         }
-        for (let i = 0; i < glyphInfo.length; i++) {
-            const p1 = glyphInfo[i].p1;
+        for (var i = 0; i < glyphInfo.length; i++) {
+            var p1 = glyphInfo[i].p1;
             context.lineTo(p1.x, p1.y);
         }
@@ -109,9 +109,9 @@
     }
     _getTextSize(text) {
-        const dummyCanvas = this.dummyCanvas;
-        const _context = dummyCanvas.getContext('2d');
+        var dummyCanvas = this.dummyCanvas;
+        var _context = dummyCanvas.getContext('2d');
         _context.save();
         _context.font = this._getContextFont();
-        const metrics = _context.measureText(text);
+        var metrics = _context.measureText(text);
         _context.restore();
         return {
@@ -141,5 +141,5 @@
         const charArr = (0, Text_1.stringToArray)(this.text());
         let offsetToGlyph = offset;
-        for (let i = 0; i < charArr.length; i++) {
+        for (var i = 0; i < charArr.length; i++) {
             const charStartPoint = this._getPointAtLength(offsetToGlyph);
             if (!charStartPoint)
@@ -188,5 +188,5 @@
             };
         }
-        const points = [];
+        var points = [];
         this.glyphInfo.forEach(function (info) {
             points.push(info.p0.x);
@@ -195,10 +195,10 @@
             points.push(info.p1.y);
         });
-        let minX = points[0] || 0;
-        let maxX = points[0] || 0;
-        let minY = points[1] || 0;
-        let maxY = points[1] || 0;
-        let x, y;
-        for (let i = 0; i < points.length / 2; i++) {
+        var minX = points[0] || 0;
+        var maxX = points[0] || 0;
+        var minY = points[1] || 0;
+        var maxY = points[1] || 0;
+        var x, y;
+        for (var i = 0; i < points.length / 2; i++) {
             x = points[i * 2];
             y = points[i * 2 + 1];
@@ -208,5 +208,5 @@
             maxY = Math.max(maxY, y);
         }
-        const fontSize = this.fontSize();
+        var fontSize = this.fontSize();
         return {
             x: minX - fontSize / 2,
Index: imaps-frontend/node_modules/konva/lib/shapes/Transformer.d.ts
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Transformer.d.ts	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Transformer.d.ts	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -95,5 +95,5 @@
         attrs: any;
         className: string;
-        children?: Array<any>;
+        children?: any[] | undefined;
     };
     clone(obj?: any): this;
Index: imaps-frontend/node_modules/konva/lib/shapes/Transformer.js
===================================================================
--- imaps-frontend/node_modules/konva/lib/shapes/Transformer.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/lib/shapes/Transformer.js	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -11,6 +11,6 @@
 const Validators_1 = require("../Validators");
 const Global_2 = require("../Global");
-const EVENTS_NAME = 'tr-konva';
-const ATTR_CHANGE_LIST = [
+var EVENTS_NAME = 'tr-konva';
+var ATTR_CHANGE_LIST = [
     'resizeEnabledChange',
     'rotateAnchorOffsetChange',
@@ -31,6 +31,6 @@
     .map((e) => e + `.${EVENTS_NAME}`)
     .join(' ');
-const NODES_RECT = 'nodesRect';
-const TRANSFORM_CHANGE_STR = [
+var NODES_RECT = 'nodesRect';
+var TRANSFORM_CHANGE_STR = [
     'widthChange',
     'heightChange',
@@ -45,5 +45,5 @@
     'strokeWidthChange',
 ];
-const ANGLES = {
+var ANGLES = {
     'top-left': -45,
     'top-center': 0,
@@ -61,5 +61,5 @@
     }
     rad += Util_1.Util.degToRad(ANGLES[anchorName] || 0);
-    const angle = ((Util_1.Util.radToDeg(rad) % 360) + 360) % 360;
+    var angle = ((Util_1.Util.radToDeg(rad) % 360) + 360) % 360;
     if (Util_1.Util._inRange(angle, 315 + 22.5, 360) || Util_1.Util._inRange(angle, 0, 22.5)) {
         return 'ns-resize';
@@ -91,5 +91,5 @@
     }
 }
-const ANCHORS_NAMES = [
+var ANCHORS_NAMES = [
     'top-left',
     'top-center',
@@ -101,5 +101,5 @@
     'bottom-right',
 ];
-const MAX_SAFE_INTEGER = 100000000;
+var MAX_SAFE_INTEGER = 100000000;
 function getCenter(shape) {
     return {
@@ -208,5 +208,5 @@
         });
         this._resetTransformCache();
-        const elementsCreated = !!this.findOne('.top-left');
+        var elementsCreated = !!this.findOne('.top-left');
         if (elementsCreated) {
             this.update();
@@ -270,13 +270,13 @@
     }
     __getNodeShape(node, rot = this.rotation(), relative) {
-        const rect = node.getClientRect({
+        var rect = node.getClientRect({
             skipTransform: true,
             skipShadow: true,
             skipStroke: this.ignoreStroke(),
         });
-        const absScale = node.getAbsoluteScale(relative);
-        const absPos = node.getAbsolutePosition(relative);
-        const dx = rect.x * absScale.x - node.offsetX() * absScale.x;
-        const dy = rect.y * absScale.y - node.offsetY() * absScale.y;
+        var absScale = node.getAbsoluteScale(relative);
+        var absPos = node.getAbsolutePosition(relative);
+        var dx = rect.x * absScale.x - node.offsetX() * absScale.x;
+        var dy = rect.y * absScale.y - node.offsetY() * absScale.y;
         const rotation = (Global_1.Konva.getAngle(node.getAbsoluteRotation()) + Math.PI * 2) %
             (Math.PI * 2);
@@ -294,5 +294,5 @@
     }
     __getNodeRect() {
-        const node = this.getNode();
+        var node = this.getNode();
         if (!node) {
             return {
@@ -311,5 +311,5 @@
                 skipStroke: this.ignoreStroke(),
             });
-            const points = [
+            var points = [
                 { x: box.x, y: box.y },
                 { x: box.x + box.width, y: box.y },
@@ -317,7 +317,7 @@
                 { x: box.x, y: box.y + box.height },
             ];
-            const trans = node.getAbsoluteTransform();
+            var trans = node.getAbsoluteTransform();
             points.forEach(function (point) {
-                const transformed = trans.point(point);
+                var transformed = trans.point(point);
                 totalPoints.push(transformed);
             });
@@ -325,7 +325,7 @@
         const tr = new Util_1.Transform();
         tr.rotate(-Global_1.Konva.getAngle(this.rotation()));
-        let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
+        var minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
         totalPoints.forEach(function (point) {
-            const transformed = tr.point(point);
+            var transformed = tr.point(point);
             if (minX === undefined) {
                 minX = maxX = transformed.x;
@@ -367,5 +367,5 @@
     }
     _createAnchor(name) {
-        const anchor = new Rect_1.Rect({
+        var anchor = new Rect_1.Rect({
             stroke: 'rgb(0, 161, 255)',
             fill: 'white',
@@ -376,5 +376,5 @@
             hitStrokeWidth: TOUCH_DEVICE ? 10 : 'auto',
         });
-        const self = this;
+        var self = this;
         anchor.on('mousedown touchstart', function (e) {
             self._handleMouseDown(e);
@@ -388,7 +388,7 @@
         });
         anchor.on('mouseenter', () => {
-            const rad = Global_1.Konva.getAngle(this.rotation());
-            const rotateCursor = this.rotateAnchorCursor();
-            const cursor = getCursor(name, rad, rotateCursor);
+            var rad = Global_1.Konva.getAngle(this.rotation());
+            var rotateCursor = this.rotateAnchorCursor();
+            var cursor = getCursor(name, rad, rotateCursor);
             anchor.getStage().content &&
                 (anchor.getStage().content.style.cursor = cursor);
@@ -403,5 +403,5 @@
     }
     _createBack() {
-        const back = new Shape_1.Shape({
+        var back = new Shape_1.Shape({
             name: 'back',
             width: 0,
@@ -409,6 +409,6 @@
             draggable: true,
             sceneFunc(ctx, shape) {
-                const tr = shape.getParent();
-                const padding = tr.padding();
+                var tr = shape.getParent();
+                var padding = tr.padding();
                 ctx.beginPath();
                 ctx.rect(-padding, -padding, shape.width() + padding * 2, shape.height() + padding * 2);
@@ -423,5 +423,5 @@
                     return;
                 }
-                const padding = this.padding();
+                var padding = this.padding();
                 ctx.beginPath();
                 ctx.rect(-padding, -padding, shape.width() + padding * 2, shape.height() + padding * 2);
@@ -449,8 +449,8 @@
         }
         this._movingAnchorName = e.target.name().split(' ')[0];
-        const attrs = this._getNodeRect();
-        const width = attrs.width;
-        const height = attrs.height;
-        const hypotenuse = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));
+        var attrs = this._getNodeRect();
+        var width = attrs.width;
+        var height = attrs.height;
+        var hypotenuse = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));
         this.sin = Math.abs(height / hypotenuse);
         this.cos = Math.abs(width / hypotenuse);
@@ -462,6 +462,6 @@
         }
         this._transforming = true;
-        const ap = e.target.getAbsolutePosition();
-        const pos = e.target.getStage().getPointerPosition();
+        var ap = e.target.getAbsolutePosition();
+        var pos = e.target.getStage().getPointerPosition();
         this._anchorDragOffset = {
             x: pos.x - ap.x,
@@ -475,7 +475,7 @@
     }
     _handleMouseMove(e) {
-        let x, y, newHypotenuse;
-        const anchorNode = this.findOne('.' + this._movingAnchorName);
-        const stage = anchorNode.getStage();
+        var x, y, newHypotenuse;
+        var anchorNode = this.findOne('.' + this._movingAnchorName);
+        var stage = anchorNode.getStage();
         stage.setPointersPositions(e);
         const pp = stage.getPointerPosition();
@@ -494,5 +494,5 @@
         }
         if (this._movingAnchorName === 'rotater') {
-            const attrs = this._getNodeRect();
+            var attrs = this._getNodeRect();
             x = anchorNode.x() - attrs.width / 2;
             y = -anchorNode.y() + attrs.height / 2;
@@ -501,5 +501,5 @@
                 delta -= Math.PI;
             }
-            const oldRotation = Global_1.Konva.getAngle(this.rotation());
+            var oldRotation = Global_1.Konva.getAngle(this.rotation());
             const newRotation = oldRotation + delta;
             const tol = Global_1.Konva.getAngle(this.rotationSnapTolerance());
@@ -510,6 +510,6 @@
             return;
         }
-        const shiftBehavior = this.shiftBehavior();
-        let keepProportion;
+        var shiftBehavior = this.shiftBehavior();
+        var keepProportion;
         if (shiftBehavior === 'inverted') {
             keepProportion = this.keepRatio() && !e.shiftKey;
@@ -630,10 +630,10 @@
         var centeredScaling = this.centeredScaling() || e.altKey;
         if (centeredScaling) {
-            const topLeft = this.findOne('.top-left');
-            const bottomRight = this.findOne('.bottom-right');
-            const topOffsetX = topLeft.x();
-            const topOffsetY = topLeft.y();
-            const bottomOffsetX = this.getWidth() - bottomRight.x();
-            const bottomOffsetY = this.getHeight() - bottomRight.y();
+            var topLeft = this.findOne('.top-left');
+            var bottomRight = this.findOne('.bottom-right');
+            var topOffsetX = topLeft.x();
+            var topOffsetY = topLeft.y();
+            var bottomOffsetX = this.getWidth() - bottomRight.x();
+            var bottomOffsetY = this.getHeight() - bottomRight.y();
             bottomRight.move({
                 x: -topOffsetX,
@@ -645,9 +645,9 @@
             });
         }
-        const absPos = this.findOne('.top-left').getAbsolutePosition();
+        var absPos = this.findOne('.top-left').getAbsolutePosition();
         x = absPos.x;
         y = absPos.y;
-        const width = this.findOne('.bottom-right').x() - this.findOne('.top-left').x();
-        const height = this.findOne('.bottom-right').y() - this.findOne('.top-left').y();
+        var width = this.findOne('.bottom-right').x() - this.findOne('.top-left').x();
+        var height = this.findOne('.bottom-right').y() - this.findOne('.top-left').y();
         this._fitNodesInto({
             x: x,
@@ -674,5 +674,5 @@
                 window.removeEventListener('touchend', this._handleMouseUp, true);
             }
-            const node = this.getNode();
+            var node = this.getNode();
             activeTransformersCount--;
             this._fire('transformend', { evt: e, target: node });
@@ -689,5 +689,5 @@
     }
     _fitNodesInto(newAttrs, evt) {
-        const oldAttrs = this._getNodeRect();
+        var oldAttrs = this._getNodeRect();
         const minSize = 1;
         if (Util_1.Util._inRange(newAttrs.width, -this.padding() * 2 - minSize, minSize)) {
@@ -699,5 +699,5 @@
             return;
         }
-        const t = new Util_1.Transform();
+        var t = new Util_1.Transform();
         t.rotate(Global_1.Konva.getAngle(this.rotation()));
         if (this._movingAnchorName &&
@@ -816,12 +816,12 @@
     update() {
         var _a;
-        const attrs = this._getNodeRect();
+        var attrs = this._getNodeRect();
         this.rotation(Util_1.Util._getRotation(attrs.rotation));
-        const width = attrs.width;
-        const height = attrs.height;
-        const enabledAnchors = this.enabledAnchors();
-        const resizeEnabled = this.resizeEnabled();
-        const padding = this.padding();
-        const anchorSize = this.anchorSize();
+        var width = attrs.width;
+        var height = attrs.height;
+        var enabledAnchors = this.enabledAnchors();
+        var resizeEnabled = this.resizeEnabled();
+        var padding = this.padding();
+        var anchorSize = this.anchorSize();
         const anchors = this.find('._anchor');
         anchors.forEach((node) => {
@@ -918,5 +918,5 @@
         if (this._transforming) {
             this._removeEvents();
-            const anchorNode = this.findOne('.' + this._movingAnchorName);
+            var anchorNode = this.findOne('.' + this._movingAnchorName);
             if (anchorNode) {
                 anchorNode.stopDrag();
@@ -937,5 +937,5 @@
     }
     clone(obj) {
-        const node = Node_1.Node.prototype.clone.call(this, obj);
+        var node = Node_1.Node.prototype.clone.call(this, obj);
         return node;
     }
Index: imaps-frontend/node_modules/konva/package.json
===================================================================
--- imaps-frontend/node_modules/konva/package.json	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/konva/package.json	(revision d56544918790c0c3bc50f2f0a98c99f3d2988ccf)
@@ -1,36 +1,62 @@
 {
-  "_from": "konva@9.3.16",
-  "_id": "konva@9.3.16",
-  "_inBundle": false,
-  "_integrity": "sha512-qa47cefGDDHzkToGRGDsy24f/Njrz7EHP56jQ8mlDcjAPO7vkfTDeoBDIfmF7PZtpfzDdooafQmEUJMDU2F7FQ==",
-  "_location": "/konva",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "konva@9.3.16",
-    "name": "konva",
-    "escapedName": "konva",
-    "rawSpec": "9.3.16",
-    "saveSpec": null,
-    "fetchSpec": "9.3.16"
+  "name": "konva",
+  "version": "9.3.14",
+  "author": "Anton Lavrenov",
+  "files": [
+    "README.md",
+    "konva.js",
+    "konva.min.js",
+    "lib",
+    "cmj"
+  ],
+  "main": "./lib/index-node.js",
+  "browser": "./lib/index.js",
+  "typings": "./lib/index-types.d.ts",
+  "scripts": {
+    "start": "npm run test:watch",
+    "compile": "npm run clean && npm run tsc && cp ./src/index-types.d.ts ./lib/index-types.d.ts && npm run rollup",
+    "build": "npm run compile && cp ./src/index-types.d.ts ./lib && gulp build && node ./rename-imports.mjs",
+    "test:import": "npm run build  && node ./test/import-test.cjs &&node ./test/import-test.mjs",
+    "test": "npm run test:browser && npm run test:node",
+    "test:build": "parcel build ./test/unit-tests.html --dist-dir ./test-build --target none --public-url ./ --no-source-maps",
+    "test:browser": "npm run test:build && mocha-headless-chrome -f ./test-build/unit-tests.html -a disable-web-security",
+    "test:watch": "rm -rf ./.parcel-cache && parcel serve ./test/unit-tests.html ./test/manual-tests.html ./test/sandbox.html ./test/text-paths.html ./test/bunnies.html",
+    "test:node": "ts-mocha -r ./test/node-global-setup.mjs -p ./test/tsconfig.json test/unit/**/*.ts --exit && npm run test:import",
+    "tsc": "tsc --removeComments",
+    "rollup": "rollup -c --bundleConfigAsCjs",
+    "clean": "rm -rf ./lib && rm -rf ./types && rm -rf ./cmj && rm -rf ./test-build",
+    "watch": "rollup -c -w",
+    "size": "size-limit"
   },
-  "_requiredBy": [
-    "/"
+  "targets": {
+    "none": {}
+  },
+  "funding": [
+    {
+      "type": "patreon",
+      "url": "https://www.patreon.com/lavrton"
+    },
+    {
+      "type": "opencollective",
+      "url": "https://opencollective.com/konva"
+    },
+    {
+      "type": "github",
+      "url": "https://github.com/sponsors/lavrton"
+    }
   ],
-  "_resolved": "https://registry.npmjs.org/konva/-/konva-9.3.16.tgz",
-  "_shasum": "0e8b52e8cb20c80c5e4cb98d0babd89ff6f95a2c",
-  "_spec": "konva@9.3.16",
-  "_where": "/home/stevetosak/Proekt/IMaps/imaps-frontend",
-  "author": {
-    "name": "Anton Lavrenov"
-  },
-  "browser": "./lib/index.js",
-  "bugs": {
-    "url": "https://github.com/konvajs/konva/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "<p align=\"center\">   <img src=\"https://konvajs.org/android-chrome-192x192.png\" alt=\"Konva logo\" height=\"180\" /> </p>",
+  "size-limit": [
+    {
+      "limit": "45 KB",
+      "path": "./lib/index.js"
+    },
+    {
+      "limit": "26 KB",
+      "path": "./lib/Core.js"
+    },
+    {
+      "path": "./konva.min.js"
+    }
+  ],
   "devDependencies": {
     "@parcel/transformer-image": "2.10.1",
@@ -56,4 +82,7 @@
     "process": "^0.11.10",
     "rollup": "^4.9.1",
+    "rollup-plugin-commonjs": "^10.1.0",
+    "rollup-plugin-node-resolve": "^5.2.0",
+    "rollup-plugin-sourcemaps": "^0.6.3",
     "rollup-plugin-typescript2": "^0.36.0",
     "size-limit": "^11.0.1",
@@ -62,26 +91,4 @@
     "typescript": "^5.3.3"
   },
-  "files": [
-    "README.md",
-    "konva.js",
-    "konva.min.js",
-    "lib",
-    "cmj"
-  ],
-  "funding": [
-    {
-      "type": "patreon",
-      "url": "https://www.patreon.com/lavrton"
-    },
-    {
-      "type": "opencollective",
-      "url": "https://opencollective.com/konva"
-    },
-    {
-      "type": "github",
-      "url": "https://github.com/sponsors/lavrton"
-    }
-  ],
-  "homepage": "http://konvajs.org/",
   "keywords": [
     "canvas",
@@ -90,47 +97,16 @@
     "html5"
   ],
-  "license": "MIT",
-  "main": "./lib/index-node.js",
-  "name": "konva",
   "prettier": {
     "singleQuote": true
   },
+  "bugs": {
+    "url": "https://github.com/konvajs/konva/issues"
+  },
+  "homepage": "http://konvajs.org/",
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/konvajs/konva.git"
   },
-  "scripts": {
-    "build": "npm run compile && cp ./src/index-types.d.ts ./lib && gulp build && node ./rename-imports.mjs",
-    "clean": "rm -rf ./lib && rm -rf ./types && rm -rf ./cmj && rm -rf ./test-build",
-    "compile": "npm run clean && npm run tsc && cp ./src/index-types.d.ts ./lib/index-types.d.ts && npm run rollup",
-    "rollup": "rollup -c --bundleConfigAsCjs",
-    "size": "size-limit",
-    "start": "npm run test:watch",
-    "test": "npm run test:browser && npm run test:node",
-    "test:browser": "npm run test:build && mocha-headless-chrome -f ./test-build/unit-tests.html -a disable-web-security",
-    "test:build": "parcel build ./test/unit-tests.html --dist-dir ./test-build --target none --public-url ./ --no-source-maps",
-    "test:import": "npm run build  && node ./test/import-test.cjs &&node ./test/import-test.mjs",
-    "test:node": "ts-mocha -r ./test/node-global-setup.mjs -p ./test/tsconfig.json test/unit/**/*.ts --exit && npm run test:import",
-    "test:watch": "rm -rf ./.parcel-cache && PARCEL_WORKERS=0  parcel serve ./test/unit-tests.html ./test/manual-tests.html ./test/sandbox.html ./test/text-paths.html ./test/bunnies.html",
-    "tsc": "tsc --removeComments",
-    "watch": "rollup -c -w"
-  },
-  "size-limit": [
-    {
-      "limit": "45 KB",
-      "path": "./lib/index.js"
-    },
-    {
-      "limit": "26 KB",
-      "path": "./lib/Core.js"
-    },
-    {
-      "path": "./konva.min.js"
-    }
-  ],
-  "targets": {
-    "none": {}
-  },
-  "typings": "./lib/index-types.d.ts",
-  "version": "9.3.16"
+  "license": "MIT"
 }
