Ignore:
Timestamp:
12/12/24 17:06:06 (5 weeks ago)
Author:
stefan toskovski <stefantoska84@…>
Branches:
main
Parents:
d565449
Message:

Pred finalna verzija

File:
1 edited

Legend:

Unmodified
Added
Removed
  • imaps-frontend/node_modules/konva/konva.js

    rd565449 r0c6b92a  
    66
    77  /*
    8    * Konva JavaScript Framework v9.3.14
     8   * Konva JavaScript Framework v9.3.16
    99   * http://konvajs.org/
    1010   * Licensed under the MIT
    11    * Date: Tue Jul 16 2024
     11   * Date: Mon Oct 21 2024
    1212   *
    1313   * Original work Copyright (C) 2011 - 2013 by Eric Rowell (KineticJS)
     
    3636  const Konva$2 = {
    3737      _global: glob,
    38       version: '9.3.14',
     38      version: '9.3.16',
    3939      isBrowser: detectBrowser(),
    4040      isUnminified: /param/.test(function (param) { }.toString()),
     
    250250       */
    251251      point(point) {
    252           var m = this.m;
     252          const m = this.m;
    253253          return {
    254254              x: m[0] * point.x + m[2] * point.y + m[4],
     
    292292       */
    293293      rotate(rad) {
    294           var c = Math.cos(rad);
    295           var s = Math.sin(rad);
    296           var m11 = this.m[0] * c + this.m[2] * s;
    297           var m12 = this.m[1] * c + this.m[3] * s;
    298           var m21 = this.m[0] * -s + this.m[2] * c;
    299           var m22 = this.m[1] * -s + this.m[3] * c;
     294          const c = Math.cos(rad);
     295          const s = Math.sin(rad);
     296          const m11 = this.m[0] * c + this.m[2] * s;
     297          const m12 = this.m[1] * c + this.m[3] * s;
     298          const m21 = this.m[0] * -s + this.m[2] * c;
     299          const m22 = this.m[1] * -s + this.m[3] * c;
    300300          this.m[0] = m11;
    301301          this.m[1] = m12;
     
    325325       */
    326326      skew(sx, sy) {
    327           var m11 = this.m[0] + this.m[2] * sy;
    328           var m12 = this.m[1] + this.m[3] * sy;
    329           var m21 = this.m[2] + this.m[0] * sx;
    330           var m22 = this.m[3] + this.m[1] * sx;
     327          const m11 = this.m[0] + this.m[2] * sy;
     328          const m12 = this.m[1] + this.m[3] * sy;
     329          const m21 = this.m[2] + this.m[0] * sx;
     330          const m22 = this.m[3] + this.m[1] * sx;
    331331          this.m[0] = m11;
    332332          this.m[1] = m12;
     
    343343       */
    344344      multiply(matrix) {
    345           var m11 = this.m[0] * matrix.m[0] + this.m[2] * matrix.m[1];
    346           var m12 = this.m[1] * matrix.m[0] + this.m[3] * matrix.m[1];
    347           var m21 = this.m[0] * matrix.m[2] + this.m[2] * matrix.m[3];
    348           var m22 = this.m[1] * matrix.m[2] + this.m[3] * matrix.m[3];
    349           var dx = this.m[0] * matrix.m[4] + this.m[2] * matrix.m[5] + this.m[4];
    350           var dy = this.m[1] * matrix.m[4] + this.m[3] * matrix.m[5] + this.m[5];
     345          const m11 = this.m[0] * matrix.m[0] + this.m[2] * matrix.m[1];
     346          const m12 = this.m[1] * matrix.m[0] + this.m[3] * matrix.m[1];
     347          const m21 = this.m[0] * matrix.m[2] + this.m[2] * matrix.m[3];
     348          const m22 = this.m[1] * matrix.m[2] + this.m[3] * matrix.m[3];
     349          const dx = this.m[0] * matrix.m[4] + this.m[2] * matrix.m[5] + this.m[4];
     350          const dy = this.m[1] * matrix.m[4] + this.m[3] * matrix.m[5] + this.m[5];
    351351          this.m[0] = m11;
    352352          this.m[1] = m12;
     
    364364       */
    365365      invert() {
    366           var d = 1 / (this.m[0] * this.m[3] - this.m[1] * this.m[2]);
    367           var m0 = this.m[3] * d;
    368           var m1 = -this.m[1] * d;
    369           var m2 = -this.m[2] * d;
    370           var m3 = this.m[0] * d;
    371           var m4 = d * (this.m[2] * this.m[5] - this.m[3] * this.m[4]);
    372           var m5 = d * (this.m[1] * this.m[4] - this.m[0] * this.m[5]);
     366          const d = 1 / (this.m[0] * this.m[3] - this.m[1] * this.m[2]);
     367          const m0 = this.m[3] * d;
     368          const m1 = -this.m[1] * d;
     369          const m2 = -this.m[2] * d;
     370          const m3 = this.m[0] * d;
     371          const m4 = d * (this.m[2] * this.m[5] - this.m[3] * this.m[4]);
     372          const m5 = d * (this.m[1] * this.m[4] - this.m[0] * this.m[5]);
    373373          this.m[0] = m0;
    374374          this.m[1] = m1;
     
    394394       */
    395395      decompose() {
    396           var a = this.m[0];
    397           var b = this.m[1];
    398           var c = this.m[2];
    399           var d = this.m[3];
    400           var e = this.m[4];
    401           var f = this.m[5];
    402           var delta = a * d - b * c;
    403           let result = {
     396          const a = this.m[0];
     397          const b = this.m[1];
     398          const c = this.m[2];
     399          const d = this.m[3];
     400          const e = this.m[4];
     401          const f = this.m[5];
     402          const delta = a * d - b * c;
     403          const result = {
    404404              x: e,
    405405              y: f,
     
    412412          // Apply the QR-like decomposition.
    413413          if (a != 0 || b != 0) {
    414               var r = Math.sqrt(a * a + b * b);
     414              const r = Math.sqrt(a * a + b * b);
    415415              result.rotation = b > 0 ? Math.acos(a / r) : -Math.acos(a / r);
    416416              result.scaleX = r;
     
    420420          }
    421421          else if (c != 0 || d != 0) {
    422               var s = Math.sqrt(c * c + d * d);
     422              const s = Math.sqrt(c * c + d * d);
    423423              result.rotation =
    424424                  Math.PI / 2 - (d > 0 ? Math.acos(-c / s) : -Math.acos(c / s));
     
    434434  }
    435435  // CONSTANTS
    436   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 = {
     436  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 = {
    437437      aliceblue: [240, 248, 255],
    438438      antiquewhite: [250, 235, 215],
     
    628628              return false;
    629629          }
    630           var firstChar = selector[0];
     630          const firstChar = selector[0];
    631631          return (firstChar === '#' ||
    632632              firstChar === '.' ||
     
    659659      },
    660660      createCanvasElement() {
    661           var canvas = document.createElement('canvas');
     661          const canvas = document.createElement('canvas');
    662662          // on some environments canvas.style is readonly
    663663          try {
     
    683683      _urlToImage(url, callback) {
    684684          // if arg is a string, then it's a data url
    685           var imageObj = Util.createImageElement();
     685          const imageObj = Util.createImageElement();
    686686          imageObj.onload = function () {
    687687              callback(imageObj);
     
    694694      _hexToRgb(hex) {
    695695          hex = hex.replace(HASH$1, EMPTY_STRING$1);
    696           var bigint = parseInt(hex, 16);
     696          const bigint = parseInt(hex, 16);
    697697          return {
    698698              r: (bigint >> 16) & 255,
     
    709709       */
    710710      getRandomColor() {
    711           var randColor = ((Math.random() * 0xffffff) << 0).toString(16);
     711          let randColor = ((Math.random() * 0xffffff) << 0).toString(16);
    712712          while (randColor.length < 6) {
    713713              randColor = ZERO + randColor;
     
    727727       */
    728728      getRGB(color) {
    729           var rgb;
     729          let rgb;
    730730          // color string
    731731          if (color in COLORS) {
     
    774774      // Parse named css color. Like "green"
    775775      _namedColorToRBA(str) {
    776           var c = COLORS[str.toLowerCase()];
     776          const c = COLORS[str.toLowerCase()];
    777777          if (!c) {
    778778              return null;
     
    789789          if (str.indexOf('rgb(') === 0) {
    790790              str = str.match(/rgb\(([^)]+)\)/)[1];
    791               var parts = str.split(/ *, */).map(Number);
     791              const parts = str.split(/ *, */).map(Number);
    792792              return {
    793793                  r: parts[0],
     
    802802          if (str.indexOf('rgba(') === 0) {
    803803              str = str.match(/rgba\(([^)]+)\)/)[1];
    804               var parts = str.split(/ *, */).map((n, index) => {
     804              const parts = str.split(/ *, */).map((n, index) => {
    805805                  if (n.slice(-1) === '%') {
    806806                      return index === 3 ? parseInt(n) / 100 : (parseInt(n) / 100) * 255;
     
    935935      },
    936936      cloneObject(obj) {
    937           var retObj = {};
    938           for (var key in obj) {
     937          const retObj = {};
     938          for (const key in obj) {
    939939              if (this._isPlainObject(obj[key])) {
    940940                  retObj[key] = this.cloneObject(obj[key]);
     
    985985      },
    986986      each(obj, func) {
    987           for (var key in obj) {
     987          for (const key in obj) {
    988988              func(key, obj[key]);
    989989          }
     
    993993      },
    994994      _getProjectionToSegment(x1, y1, x2, y2, x3, y3) {
    995           var x, y, dist;
    996           var pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
     995          let x, y, dist;
     996          const pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
    997997          if (pd2 == 0) {
    998998              x = x1;
     
    10011001          }
    10021002          else {
    1003               var u = ((x3 - x1) * (x2 - x1) + (y3 - y1) * (y2 - y1)) / pd2;
     1003              const u = ((x3 - x1) * (x2 - x1) + (y3 - y1) * (y2 - y1)) / pd2;
    10041004              if (u < 0) {
    10051005                  x = x1;
     
    10231023      // line might be closed
    10241024      _getProjectionToLine(pt, line, isClosed) {
    1025           var pc = Util.cloneObject(pt);
    1026           var dist = Number.MAX_VALUE;
     1025          const pc = Util.cloneObject(pt);
     1026          let dist = Number.MAX_VALUE;
    10271027          line.forEach(function (p1, i) {
    10281028              if (!isClosed && i === line.length - 1) {
    10291029                  return;
    10301030              }
    1031               var p2 = line[(i + 1) % line.length];
    1032               var proj = Util._getProjectionToSegment(p1.x, p1.y, p2.x, p2.y, pt.x, pt.y);
    1033               var px = proj[0], py = proj[1], pdist = proj[2];
     1031              const p2 = line[(i + 1) % line.length];
     1032              const proj = Util._getProjectionToSegment(p1.x, p1.y, p2.x, p2.y, pt.x, pt.y);
     1033              const px = proj[0], py = proj[1], pdist = proj[2];
    10341034              if (pdist < dist) {
    10351035                  pc.x = px;
     
    10411041      },
    10421042      _prepareArrayForTween(startArray, endArray, isClosed) {
    1043           var n, start = [], end = [];
     1043          let n, start = [], end = [];
    10441044          if (startArray.length > endArray.length) {
    1045               var temp = endArray;
     1045              const temp = endArray;
    10461046              endArray = startArray;
    10471047              startArray = temp;
     
    10591059              });
    10601060          }
    1061           var newStart = [];
     1061          const newStart = [];
    10621062          end.forEach(function (point) {
    1063               var pr = Util._getProjectionToLine(point, start, isClosed);
     1063              const pr = Util._getProjectionToLine(point, start, isClosed);
    10641064              newStart.push(pr.x);
    10651065              newStart.push(pr.y);
     
    10681068      },
    10691069      _prepareToStringify(obj) {
    1070           var desc;
     1070          let desc;
    10711071          obj.visitedByCircularReferenceRemoval = true;
    1072           for (var key in obj) {
     1072          for (const key in obj) {
    10731073              if (!(obj.hasOwnProperty(key) && obj[key] && typeof obj[key] == 'object')) {
    10741074                  continue;
     
    10981098      // very simplified version of Object.assign
    10991099      _assign(target, source) {
    1100           for (var key in source) {
     1100          for (const key in source) {
    11011101              target[key] = source[key];
    11021102          }
     
    11871187      if (Konva$2.isUnminified) {
    11881188          return function (val, attr) {
    1189               let isNumber = Util._isNumber(val);
    1190               let isValidArray = Util._isArray(val) && val.length == noOfElements;
     1189              const isNumber = Util._isNumber(val);
     1190              const isValidArray = Util._isArray(val) && val.length == noOfElements;
    11911191              if (!isNumber && !isValidArray) {
    11921192                  Util.warn(_formatValue(val) +
     
    12041204      if (Konva$2.isUnminified) {
    12051205          return function (val, attr) {
    1206               var isNumber = Util._isNumber(val);
    1207               var isAuto = val === 'auto';
     1206              const isNumber = Util._isNumber(val);
     1207              const isAuto = val === 'auto';
    12081208              if (!(isNumber || isAuto)) {
    12091209                  Util.warn(_formatValue(val) +
     
    12781278      if (Konva$2.isUnminified) {
    12791279          return function (val, attr) {
    1280               var isBool = val === true || val === false;
     1280              const isBool = val === true || val === false;
    12811281              if (!isBool) {
    12821282                  Util.warn(_formatValue(val) +
     
    13081308  }
    13091309
    1310   var GET = 'get', SET$1 = 'set';
     1310  const GET = 'get', SET$1 = 'set';
    13111311  const Factory = {
    13121312      addGetterSetter(constructor, attr, def, validator, after) {
     
    13161316      },
    13171317      addGetter(constructor, attr, def) {
    1318           var method = GET + Util._capitalize(attr);
     1318          const method = GET + Util._capitalize(attr);
    13191319          constructor.prototype[method] =
    13201320              constructor.prototype[method] ||
    13211321                  function () {
    1322                       var val = this.attrs[attr];
     1322                      const val = this.attrs[attr];
    13231323                      return val === undefined ? def : val;
    13241324                  };
    13251325      },
    13261326      addSetter(constructor, attr, validator, after) {
    1327           var method = SET$1 + Util._capitalize(attr);
     1327          const method = SET$1 + Util._capitalize(attr);
    13281328          if (!constructor.prototype[method]) {
    13291329              Factory.overWriteSetter(constructor, attr, validator, after);
     
    13311331      },
    13321332      overWriteSetter(constructor, attr, validator, after) {
    1333           var method = SET$1 + Util._capitalize(attr);
     1333          const method = SET$1 + Util._capitalize(attr);
    13341334          constructor.prototype[method] = function (val) {
    13351335              if (validator && val !== undefined && val !== null) {
     
    13441344      },
    13451345      addComponentsGetterSetter(constructor, attr, components, validator, after) {
    1346           var len = components.length, capitalize = Util._capitalize, getter = GET + capitalize(attr), setter = SET$1 + capitalize(attr), n, component;
     1346          let len = components.length, capitalize = Util._capitalize, getter = GET + capitalize(attr), setter = SET$1 + capitalize(attr), n, component;
    13471347          // getter
    13481348          constructor.prototype[getter] = function () {
    1349               var ret = {};
     1349              const ret = {};
    13501350              for (n = 0; n < len; n++) {
    13511351                  component = components[n];
     
    13541354              return ret;
    13551355          };
    1356           var basicValidator = getComponentValidator(components);
     1356          const basicValidator = getComponentValidator(components);
    13571357          // setter
    13581358          constructor.prototype[setter] = function (val) {
    1359               var oldVal = this.attrs[attr], key;
     1359              let oldVal = this.attrs[attr], key;
    13601360              if (validator) {
    13611361                  val = validator.call(this, val);
     
    13841384      },
    13851385      addOverloadedGetterSetter(constructor, attr) {
    1386           var capitalizedAttr = Util._capitalize(attr), setter = SET$1 + capitalizedAttr, getter = GET + capitalizedAttr;
     1386          const capitalizedAttr = Util._capitalize(attr), setter = SET$1 + capitalizedAttr, getter = GET + capitalizedAttr;
    13871387          constructor.prototype[attr] = function () {
    13881388              // setting
     
    13971397      addDeprecatedGetterSetter(constructor, attr, def, validator) {
    13981398          Util.error('Adding deprecated ' + attr);
    1399           var method = GET + Util._capitalize(attr);
    1400           var message = attr +
     1399          const method = GET + Util._capitalize(attr);
     1400          const message = attr +
    14011401              ' property is deprecated and will be removed soon. Look at Konva change log for more information.';
    14021402          constructor.prototype[method] = function () {
    14031403              Util.error(message);
    1404               var val = this.attrs[attr];
     1404              const val = this.attrs[attr];
    14051405              return val === undefined ? def : val;
    14061406          };
     
    14121412      backCompat(constructor, methods) {
    14131413          Util.each(methods, function (oldMethodName, newMethodName) {
    1414               var method = constructor.prototype[newMethodName];
    1415               var oldGetter = GET + Util._capitalize(oldMethodName);
    1416               var oldSetter = SET$1 + Util._capitalize(oldMethodName);
     1414              const method = constructor.prototype[newMethodName];
     1415              const oldGetter = GET + Util._capitalize(oldMethodName);
     1416              const oldSetter = SET$1 + Util._capitalize(oldMethodName);
    14171417              function deprecated() {
    14181418                  method.apply(this, arguments);
     
    14341434
    14351435  function simplifyArray(arr) {
    1436       var retArr = [], len = arr.length, util = Util, n, val;
     1436      let retArr = [], len = arr.length, util = Util, n, val;
    14371437      for (n = 0; n < len; n++) {
    14381438          val = arr[n];
     
    14471447      return retArr;
    14481448  }
    1449   var COMMA = ',', OPEN_PAREN = '(', CLOSE_PAREN = ')', OPEN_PAREN_BRACKET = '([', CLOSE_BRACKET_PAREN = '])', SEMICOLON = ';', DOUBLE_PAREN = '()',
     1449  const COMMA = ',', OPEN_PAREN = '(', CLOSE_PAREN = ')', OPEN_PAREN_BRACKET = '([', CLOSE_BRACKET_PAREN = '])', SEMICOLON = ';', DOUBLE_PAREN = '()',
    14501450  // EMPTY_STRING = '',
    14511451  EQUALS = '=',
     
    14851485      'translate',
    14861486  ];
    1487   var CONTEXT_PROPERTIES = [
     1487  const CONTEXT_PROPERTIES = [
    14881488      'fillStyle',
    14891489      'strokeStyle',
     
    15821582      }
    15831583      getTrace(relaxed, rounded) {
    1584           var traceArr = this.traceArr, len = traceArr.length, str = '', n, trace, method, args;
     1584          let traceArr = this.traceArr, len = traceArr.length, str = '', n, trace, method, args;
    15851585          for (n = 0; n < len; n++) {
    15861586              trace = traceArr[n];
     
    16201620      }
    16211621      _trace(str) {
    1622           var traceArr = this.traceArr, len;
     1622          let traceArr = this.traceArr, len;
    16231623          traceArr.push(str);
    16241624          len = traceArr.length;
     
    16331633       */
    16341634      reset() {
    1635           var pixelRatio = this.getCanvas().getPixelRatio();
     1635          const pixelRatio = this.getCanvas().getPixelRatio();
    16361636          this.setTransform(1 * pixelRatio, 0, 0, 1 * pixelRatio, 0, 0);
    16371637      }
     
    16561656       */
    16571657      clear(bounds) {
    1658           var canvas = this.getCanvas();
     1658          const canvas = this.getCanvas();
    16591659          if (bounds) {
    16601660              this.clearRect(bounds.x || 0, bounds.y || 0, bounds.width || 0, bounds.height || 0);
     
    16711671      }
    16721672      _applyOpacity(shape) {
    1673           var absOpacity = shape.getAbsoluteOpacity();
     1673          const absOpacity = shape.getAbsoluteOpacity();
    16741674          if (absOpacity !== 1) {
    16751675              this.setAttr('globalAlpha', absOpacity);
     
    17431743       */
    17441744      createImageData(width, height) {
    1745           var a = arguments;
     1745          const a = arguments;
    17461746          if (a.length === 2) {
    17471747              return this._context.createImageData(width, height);
     
    17821782      drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) {
    17831783          // this._context.drawImage(...arguments);
    1784           var a = arguments, _context = this._context;
     1784          const a = arguments, _context = this._context;
    17851785          if (a.length === 3) {
    17861786              _context.drawImage(image, sx, sy);
     
    20152015      }
    20162016      _enableTrace() {
    2017           var that = this, len = CONTEXT_METHODS.length, origSetter = this.setAttr, n, args;
     2017          let that = this, len = CONTEXT_METHODS.length, origSetter = this.setAttr, n, args;
    20182018          // to prevent creating scope function at each loop
    2019           var func = function (methodName) {
    2020               var origMethod = that[methodName], ret;
     2019          const func = function (methodName) {
     2020              let origMethod = that[methodName], ret;
    20212021              that[methodName] = function () {
    20222022                  args = simplifyArray(Array.prototype.slice.call(arguments, 0));
     
    20362036          that.setAttr = function () {
    20372037              origSetter.apply(that, arguments);
    2038               var prop = arguments[0];
    2039               var val = arguments[1];
     2038              const prop = arguments[0];
     2039              let val = arguments[1];
    20402040              if (prop === 'shadowOffsetX' ||
    20412041                  prop === 'shadowOffsetY' ||
     
    20512051      _applyGlobalCompositeOperation(node) {
    20522052          const op = node.attrs.globalCompositeOperation;
    2053           var def = !op || op === 'source-over';
     2053          const def = !op || op === 'source-over';
    20542054          if (!def) {
    20552055              this.setAttr('globalCompositeOperation', op);
     
    20752075      }
    20762076      _fillColor(shape) {
    2077           var fill = shape.fill();
     2077          const fill = shape.fill();
    20782078          this.setAttr('fillStyle', fill);
    20792079          shape._fillFunc(this);
     
    20842084      }
    20852085      _fillLinearGradient(shape) {
    2086           var grd = shape._getLinearGradient();
     2086          const grd = shape._getLinearGradient();
    20872087          if (grd) {
    20882088              this.setAttr('fillStyle', grd);
     
    21372137          if (colorStops) {
    21382138              // build color stops
    2139               for (var n = 0; n < colorStops.length; n += 2) {
     2139              for (let n = 0; n < colorStops.length; n += 2) {
    21402140                  grd.addColorStop(colorStops[n], colorStops[n + 1]);
    21412141              }
     
    21442144      }
    21452145      _stroke(shape) {
    2146           var dash = shape.dash(),
     2146          const dash = shape.dash(),
    21472147          // ignore strokeScaleEnabled for Text
    21482148          strokeScaleEnabled = shape.getStrokeScaleEnabled();
     
    21502150              if (!strokeScaleEnabled) {
    21512151                  this.save();
    2152                   var pixelRatio = this.getCanvas().getPixelRatio();
     2152                  const pixelRatio = this.getCanvas().getPixelRatio();
    21532153                  this.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
    21542154              }
     
    21622162                  this.setAttr('shadowColor', 'rgba(0,0,0,0)');
    21632163              }
    2164               var hasLinearGradient = shape.getStrokeLinearGradientColorStops();
     2164              const hasLinearGradient = shape.getStrokeLinearGradientColorStops();
    21652165              if (hasLinearGradient) {
    21662166                  this._strokeLinearGradient(shape);
     
    21772177      _applyShadow(shape) {
    21782178          var _a, _b, _c;
    2179           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 : {
     2179          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 : {
    21802180              x: 0,
    21812181              y: 0,
     
    22112211              if (!strokeScaleEnabled) {
    22122212                  this.save();
    2213                   var pixelRatio = this.getCanvas().getPixelRatio();
     2213                  const pixelRatio = this.getCanvas().getPixelRatio();
    22142214                  this.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
    22152215              }
    22162216              this._applyLineCap(shape);
    2217               var hitStrokeWidth = shape.hitStrokeWidth();
    2218               var strokeWidth = hitStrokeWidth === 'auto' ? shape.strokeWidth() : hitStrokeWidth;
     2217              const hitStrokeWidth = shape.hitStrokeWidth();
     2218              const strokeWidth = hitStrokeWidth === 'auto' ? shape.strokeWidth() : hitStrokeWidth;
    22192219              this.setAttr('lineWidth', strokeWidth);
    22202220              this.setAttr('strokeStyle', shape.colorKey);
     
    22282228
    22292229  // calculate pixel ratio
    2230   var _pixelRatio;
     2230  let _pixelRatio;
    22312231  function getDevicePixelRatio() {
    22322232      if (_pixelRatio) {
    22332233          return _pixelRatio;
    22342234      }
    2235       var canvas = Util.createCanvasElement();
    2236       var context = canvas.getContext('2d');
     2235      const canvas = Util.createCanvasElement();
     2236      const context = canvas.getContext('2d');
    22372237      _pixelRatio = (function () {
    2238           var devicePixelRatio = Konva$2._global.devicePixelRatio || 1, backingStoreRatio = context.webkitBackingStorePixelRatio ||
     2238          const devicePixelRatio = Konva$2._global.devicePixelRatio || 1, backingStoreRatio = context.webkitBackingStorePixelRatio ||
    22392239              context.mozBackingStorePixelRatio ||
    22402240              context.msBackingStorePixelRatio ||
     
    22642264          this.height = 0;
    22652265          this.isCache = false;
    2266           var conf = config || {};
    2267           var pixelRatio = conf.pixelRatio || Konva$2.pixelRatio || getDevicePixelRatio();
     2266          const conf = config || {};
     2267          const pixelRatio = conf.pixelRatio || Konva$2.pixelRatio || getDevicePixelRatio();
    22682268          this.pixelRatio = pixelRatio;
    22692269          this._canvas = Util.createCanvasElement();
     
    22902290      }
    22912291      setPixelRatio(pixelRatio) {
    2292           var previousRatio = this.pixelRatio;
     2292          const previousRatio = this.pixelRatio;
    22932293          this.pixelRatio = pixelRatio;
    22942294          this.setSize(this.getWidth() / previousRatio, this.getHeight() / previousRatio);
     
    22982298          this.width = this._canvas.width = width * this.pixelRatio;
    22992299          this._canvas.style.width = width + 'px';
    2300           var pixelRatio = this.pixelRatio, _context = this.getContext()._context;
     2300          const pixelRatio = this.pixelRatio, _context = this.getContext()._context;
    23012301          _context.scale(pixelRatio, pixelRatio);
    23022302      }
     
    23052305          this.height = this._canvas.height = height * this.pixelRatio;
    23062306          this._canvas.style.height = height + 'px';
    2307           var pixelRatio = this.pixelRatio, _context = this.getContext()._context;
     2307          const pixelRatio = this.pixelRatio, _context = this.getContext()._context;
    23082308          _context.scale(pixelRatio, pixelRatio);
    23092309      }
     
    23862386  const DD = {
    23872387      get isDragging() {
    2388           var flag = false;
     2388          let flag = false;
    23892389          DD._dragElements.forEach((elem) => {
    23902390              if (elem.dragStatus === 'dragging') {
     
    23972397      get node() {
    23982398          // return first dragging node
    2399           var node;
     2399          let node;
    24002400          DD._dragElements.forEach((elem) => {
    24012401              node = elem.node;
     
    24232423              }
    24242424              if (elem.dragStatus !== 'dragging') {
    2425                   var dragDistance = node.dragDistance();
    2426                   var distance = Math.max(Math.abs(pos.x - elem.startPointerPos.x), Math.abs(pos.y - elem.startPointerPos.y));
     2425                  const dragDistance = node.dragDistance();
     2426                  const distance = Math.max(Math.abs(pos.x - elem.startPointerPos.x), Math.abs(pos.y - elem.startPointerPos.y));
    24272427                  if (distance < dragDistance) {
    24282428                      return;
     
    25012501      window.addEventListener('mouseup', DD._endDragBefore, true);
    25022502      window.addEventListener('touchend', DD._endDragBefore, true);
     2503      // add touchcancel to fix this: https://github.com/konvajs/konva/issues/1843
     2504      window.addEventListener('touchcancel', DD._endDragBefore, true);
    25032505      window.addEventListener('mousemove', DD._drag);
    25042506      window.addEventListener('touchmove', DD._drag);
    25052507      window.addEventListener('mouseup', DD._endDragAfter, false);
    25062508      window.addEventListener('touchend', DD._endDragAfter, false);
     2509      window.addEventListener('touchcancel', DD._endDragAfter, false);
    25072510  }
    25082511
    25092512  // CONSTANTS
    2510   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 = [
     2513  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 = [
    25112514      'xChange.konva',
    25122515      'yChange.konva',
     
    25912594      }
    25922595      _getCache(attr, privateGetter) {
    2593           var cache = this._cache.get(attr);
     2596          let cache = this._cache.get(attr);
    25942597          // for transform the cache can be NOT empty
    25952598          // but we still need to recalculate it if it is dirty
    2596           var isTransform = attr === TRANSFORM || attr === ABSOLUTE_TRANSFORM;
    2597           var invalid = cache === undefined || (isTransform && cache.dirty === true);
     2599          const isTransform = attr === TRANSFORM || attr === ABSOLUTE_TRANSFORM;
     2600          const invalid = cache === undefined || (isTransform && cache.dirty === true);
    25982601          // if not cached, we need to set it using the private getter method.
    25992602          if (invalid) {
     
    26932696       */
    26942697      cache(config) {
    2695           var conf = config || {};
    2696           var rect = {};
     2698          const conf = config || {};
     2699          let rect = {};
    26972700          // don't call getClientRect if we have all attributes
    26982701          // it means call it only if have one undefined
     
    27062709              });
    27072710          }
    2708           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;
     2711          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;
    27092712          if (!width || !height) {
    27102713              Util.error('Can not cache the node. Width or height of the node equals 0. Caching is skipped.');
     
    27292732          // }
    27302733          // console.log({ x, y, width, height }, rect);
    2731           var cachedSceneCanvas = new SceneCanvas({
     2734          const cachedSceneCanvas = new SceneCanvas({
    27322735              pixelRatio: pixelRatio,
    27332736              width: width,
     
    28372840      }
    28382841      _transformedRect(rect, top) {
    2839           var points = [
     2842          const points = [
    28402843              { x: rect.x, y: rect.y },
    28412844              { x: rect.x + rect.width, y: rect.y },
     
    28432846              { x: rect.x, y: rect.y + rect.height },
    28442847          ];
    2845           var minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
    2846           var trans = this.getAbsoluteTransform(top);
     2848          let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
     2849          const trans = this.getAbsoluteTransform(top);
    28472850          points.forEach(function (point) {
    2848               var transformed = trans.point(point);
     2851              const transformed = trans.point(point);
    28492852              if (minX === undefined) {
    28502853                  minX = maxX = transformed.x;
     
    28692872          const canvasCache = this._getCanvasCache();
    28702873          context.translate(canvasCache.x, canvasCache.y);
    2871           var cacheCanvas = this._getCachedSceneCanvas();
    2872           var ratio = cacheCanvas.pixelRatio;
     2874          const cacheCanvas = this._getCachedSceneCanvas();
     2875          const ratio = cacheCanvas.pixelRatio;
    28732876          context.drawImage(cacheCanvas._canvas, 0, 0, cacheCanvas.width / ratio, cacheCanvas.height / ratio);
    28742877          context.restore();
    28752878      }
    28762879      _drawCachedHitCanvas(context) {
    2877           var canvasCache = this._getCanvasCache(), hitCanvas = canvasCache.hit;
     2880          const canvasCache = this._getCanvasCache(), hitCanvas = canvasCache.hit;
    28782881          context.save();
    28792882          context.translate(canvasCache.x, canvasCache.y);
     
    28822885      }
    28832886      _getCachedSceneCanvas() {
    2884           var filters = this.filters(), cachedCanvas = this._getCanvasCache(), sceneCanvas = cachedCanvas.scene, filterCanvas = cachedCanvas.filter, filterContext = filterCanvas.getContext(), len, imageData, n, filter;
     2887          let filters = this.filters(), cachedCanvas = this._getCanvasCache(), sceneCanvas = cachedCanvas.scene, filterCanvas = cachedCanvas.filter, filterContext = filterCanvas.getContext(), len, imageData, n, filter;
    28852888          if (filters) {
    28862889              if (!this._filterUpToDate) {
    2887                   var ratio = sceneCanvas.pixelRatio;
     2890                  const ratio = sceneCanvas.pixelRatio;
    28882891                  filterCanvas.setSize(sceneCanvas.width / sceneCanvas.pixelRatio, sceneCanvas.height / sceneCanvas.pixelRatio);
    28892892                  try {
     
    29832986              return this._delegate.apply(this, arguments);
    29842987          }
    2985           var events = evtStr.split(SPACE$1), len = events.length, n, event, parts, baseEvent, name;
     2988          let events = evtStr.split(SPACE$1), len = events.length, n, event, parts, baseEvent, name;
    29862989          /*
    29872990           * loop through types and attach event listeners to
     
    30273030       */
    30283031      off(evtStr, callback) {
    3029           var events = (evtStr || '').split(SPACE$1), len = events.length, n, t, event, parts, baseEvent, name;
     3032          let events = (evtStr || '').split(SPACE$1), len = events.length, n, t, event, parts, baseEvent, name;
    30303033          this._cache && this._cache.delete(ALL_LISTENERS);
    30313034          if (!evtStr) {
     
    30553058      // some event aliases for third party integration like HammerJS
    30563059      dispatchEvent(evt) {
    3057           var e = {
     3060          const e = {
    30583061              target: this,
    30593062              type: evt.type,
     
    30763079      // like node.on
    30773080      _delegate(event, selector, handler) {
    3078           var stopNode = this;
     3081          const stopNode = this;
    30793082          this.on(event, function (evt) {
    3080               var targets = evt.target.findAncestors(selector, true, stopNode);
    3081               for (var i = 0; i < targets.length; i++) {
     3083              const targets = evt.target.findAncestors(selector, true, stopNode);
     3084              for (let i = 0; i < targets.length; i++) {
    30823085                  evt = Util.cloneObject(evt);
    30833086                  evt.currentTarget = targets[i];
     
    31163119          // traversal must be cleared when removing a node
    31173120          this._clearCaches();
    3118           var parent = this.getParent();
     3121          const parent = this.getParent();
    31193122          if (parent && parent.children) {
    31203123              parent.children.splice(this.index, 1);
     
    31463149       */
    31473150      getAttr(attr) {
    3148           var method = 'get' + Util._capitalize(attr);
     3151          const method = 'get' + Util._capitalize(attr);
    31493152          if (Util._isFunction(this[method])) {
    31503153              return this[method]();
     
    31643167       */
    31653168      getAncestors() {
    3166           var parent = this.getParent(), ancestors = [];
     3169          let parent = this.getParent(), ancestors = [];
    31673170          while (parent) {
    31683171              ancestors.push(parent);
     
    31943197      setAttrs(config) {
    31953198          this._batchTransformChanges(() => {
    3196               var key, method;
     3199              let key, method;
    31973200              if (!config) {
    31983201                  return this;
     
    32803283              return this._isVisible(top) && this._isListening(top);
    32813284          }
    3282           var layer = this.getLayer();
    3283           var layerUnderDrag = false;
     3285          const layer = this.getLayer();
     3286          let layerUnderDrag = false;
    32843287          DD._dragElements.forEach((elem) => {
    32853288              if (elem.dragStatus !== 'dragging') {
     
    32933296              }
    32943297          });
    3295           var dragSkip = !skipDragCheck &&
     3298          const dragSkip = !skipDragCheck &&
    32963299              !Konva$2.hitOnDragEnabled &&
    32973300              (layerUnderDrag || Konva$2.isTransforming());
     
    33293332       */
    33303333      getAbsoluteZIndex() {
    3331           var depth = this.getDepth(), that = this, index = 0, nodes, len, n, child;
     3334          let depth = this.getDepth(), that = this, index = 0, nodes, len, n, child;
    33323335          function addChildren(children) {
    33333336              nodes = [];
     
    33623365       */
    33633366      getDepth() {
    3364           var depth = 0, parent = this.parent;
     3367          let depth = 0, parent = this.parent;
    33653368          while (parent) {
    33663369              depth++;
     
    34143417          }
    34153418          // get pointer (say mouse or touch) position
    3416           var pos = stage.getPointerPosition();
     3419          const pos = stage.getPointerPosition();
    34173420          if (!pos) {
    34183421              return null;
    34193422          }
    3420           var transform = this.getAbsoluteTransform().copy();
     3423          const transform = this.getAbsoluteTransform().copy();
    34213424          // to detect relative position we need to invert transform
    34223425          transform.invert();
     
    34543457              top = true;
    34553458          }
    3456           var absoluteMatrix = this.getAbsoluteTransform(top).getMatrix(), absoluteTransform = new Transform(), offset = this.offset();
     3459          const absoluteMatrix = this.getAbsoluteTransform(top).getMatrix(), absoluteTransform = new Transform(), offset = this.offset();
    34573460          // clone the matrix array
    34583461          absoluteTransform.m = absoluteMatrix.slice();
     
    34673470          // important, use non cached value
    34683471          this._clearCache(TRANSFORM);
    3469           var it = this._getAbsoluteTransform().copy();
     3472          const it = this._getAbsoluteTransform().copy();
    34703473          it.invert();
    34713474          it.translate(pos.x, pos.y);
     
    34813484      }
    34823485      _setTransform(trans) {
    3483           var key;
     3486          let key;
    34843487          for (key in trans) {
    34853488              this.attrs[key] = trans[key];
     
    34893492      }
    34903493      _clearTransform() {
    3491           var trans = {
     3494          const trans = {
    34923495              x: this.x(),
    34933496              y: this.y(),
     
    35283531       */
    35293532      move(change) {
    3530           var changeX = change.x, changeY = change.y, x = this.x(), y = this.y();
     3533          let changeX = change.x, changeY = change.y, x = this.x(), y = this.y();
    35313534          if (changeX !== undefined) {
    35323535              x += changeX;
     
    35393542      }
    35403543      _eachAncestorReverse(func, top) {
    3541           var family = [], parent = this.getParent(), len, n;
     3544          let family = [], parent = this.getParent(), len, n;
    35423545          // if top node is defined, and this node is top node,
    35433546          // there's no need to build a family tree.  just execute
     
    35793582              return false;
    35803583          }
    3581           var index = this.index, len = this.parent.getChildren().length;
     3584          const index = this.index, len = this.parent.getChildren().length;
    35823585          if (index < len - 1) {
    35833586              this.parent.children.splice(index, 1);
     
    35993602              return false;
    36003603          }
    3601           var index = this.index, len = this.parent.getChildren().length;
     3604          const index = this.index, len = this.parent.getChildren().length;
    36023605          if (index < len - 1) {
    36033606              this.parent.children.splice(index, 1);
     
    36193622              return false;
    36203623          }
    3621           var index = this.index;
     3624          const index = this.index;
    36223625          if (index > 0) {
    36233626              this.parent.children.splice(index, 1);
     
    36393642              return false;
    36403643          }
    3641           var index = this.index;
     3644          const index = this.index;
    36423645          if (index > 0) {
    36433646              this.parent.children.splice(index, 1);
     
    36603663                  '.');
    36613664          }
    3662           var index = this.index;
     3665          const index = this.index;
    36633666          this.parent.children.splice(index, 1);
    36643667          this.parent.children.splice(zIndex, 0, this);
     
    36763679      }
    36773680      _getAbsoluteOpacity() {
    3678           var absOpacity = this.opacity();
    3679           var parent = this.getParent();
     3681          let absOpacity = this.opacity();
     3682          const parent = this.getParent();
    36803683          if (parent && !parent._isUnderCache) {
    36813684              absOpacity *= parent.getAbsoluteOpacity();
     
    37083711       */
    37093712      toObject() {
    3710           var attrs = this.getAttrs(), key, val, getter, defaultValue, nonPlainObject;
     3713          let attrs = this.getAttrs(), key, val, getter, defaultValue, nonPlainObject;
    37113714          const obj = {
    37123715              attrs: {},
     
    37653768       */
    37663769      findAncestors(selector, includeSelf, stopNode) {
    3767           var res = [];
     3770          const res = [];
    37683771          if (includeSelf && this._isMatch(selector)) {
    37693772              res.push(this);
    37703773          }
    3771           var ancestor = this.parent;
     3774          let ancestor = this.parent;
    37723775          while (ancestor) {
    37733776              if (ancestor === stopNode) {
     
    38073810              return selector(this);
    38083811          }
    3809           var selectorArr = selector.replace(/ /g, '').split(','), len = selectorArr.length, n, sel;
     3812          let selectorArr = selector.replace(/ /g, '').split(','), len = selectorArr.length, n, sel;
    38103813          for (n = 0; n < len; n++) {
    38113814              sel = selectorArr[n];
     
    38423845       */
    38433846      getLayer() {
    3844           var parent = this.getParent();
     3847          const parent = this.getParent();
    38453848          return parent ? parent.getLayer() : null;
    38463849      }
     
    38553858      }
    38563859      _getStage() {
    3857           var parent = this.getParent();
     3860          const parent = this.getParent();
    38583861          if (parent) {
    38593862              return parent.getStage();
     
    39173920      }
    39183921      _getAbsoluteTransform(top) {
    3919           var at;
     3922          let at;
    39203923          // we we need position relative to an ancestor, we will iterate for all
    39213924          if (top) {
     
    39233926              // start with stage and traverse downwards to self
    39243927              this._eachAncestorReverse(function (node) {
    3925                   var transformsEnabled = node.transformsEnabled();
     3928                  const transformsEnabled = node.transformsEnabled();
    39263929                  if (transformsEnabled === 'all') {
    39273930                      at.multiply(node.getTransform());
     
    39433946                  at.reset();
    39443947              }
    3945               var transformsEnabled = this.transformsEnabled();
     3948              const transformsEnabled = this.transformsEnabled();
    39463949              if (transformsEnabled === 'all') {
    39473950                  at.multiply(this.getTransform());
     
    39733976          // because it use cache transform
    39743977          // this is special logic for caching with some shapes with shadow
    3975           var parent = this;
     3978          let parent = this;
    39763979          while (parent) {
    39773980              if (parent._isUnderCache) {
     
    40184021      _getTransform() {
    40194022          var _a, _b;
    4020           var m = this._cache.get(TRANSFORM) || new Transform();
     4023          const m = this._cache.get(TRANSFORM) || new Transform();
    40214024          m.reset();
    40224025          // I was trying to use attributes directly here
    40234026          // but it doesn't work for Transformer well
    40244027          // because it overwrite x,y getters
    4025           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;
     4028          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;
    40264029          if (x !== 0 || y !== 0) {
    40274030              m.translate(x, y);
     
    40614064      clone(obj) {
    40624065          // instantiate new node
    4063           var attrs = Util.cloneObject(this.attrs), key, allListeners, len, n, listener;
     4066          let attrs = Util.cloneObject(this.attrs), key, allListeners, len, n, listener;
    40644067          // apply attr overrides
    40654068          for (key in obj) {
    40664069              attrs[key] = obj[key];
    40674070          }
    4068           var node = new this.constructor(attrs);
     4071          const node = new this.constructor(attrs);
    40694072          // copy over listeners
    40704073          for (key in this.eventListeners) {
     
    40904093      _toKonvaCanvas(config) {
    40914094          config = config || {};
    4092           var box = this.getClientRect();
    4093           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({
     4095          const box = this.getClientRect();
     4096          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({
    40944097              width: config.width || Math.ceil(box.width) || (stage ? stage.width() : 0),
    40954098              height: config.height ||
     
    41634166      toDataURL(config) {
    41644167          config = config || {};
    4165           var mimeType = config.mimeType || null, quality = config.quality || null;
    4166           var url = this._toKonvaCanvas(config).toDataURL(mimeType, quality);
     4168          const mimeType = config.mimeType || null, quality = config.quality || null;
     4169          const url = this._toKonvaCanvas(config).toDataURL(mimeType, quality);
    41674170          if (config.callback) {
    41684171              config.callback(url);
     
    42964299      }
    42974300      _off(type, name, callback) {
    4298           var evtListeners = this.eventListeners[type], i, evtName, handler;
     4301          let evtListeners = this.eventListeners[type], i, evtName, handler;
    42994302          for (i = 0; i < evtListeners.length; i++) {
    43004303              evtName = evtListeners[i].name;
     
    43354338      addName(name) {
    43364339          if (!this.hasName(name)) {
    4337               var oldName = this.name();
    4338               var newName = oldName ? oldName + ' ' + name : name;
     4340              const oldName = this.name();
     4341              const newName = oldName ? oldName + ' ' + name : name;
    43394342              this.name(newName);
    43404343          }
     
    43624365          }
    43634366          // if name is '' the "names" will be [''], so I added extra check above
    4364           var names = (fullName || '').split(/\s/g);
     4367          const names = (fullName || '').split(/\s/g);
    43654368          return names.indexOf(name) !== -1;
    43664369      }
     
    43784381       */
    43794382      removeName(name) {
    4380           var names = (this.name() || '').split(/\s/g);
    4381           var index = names.indexOf(name);
     4383          const names = (this.name() || '').split(/\s/g);
     4384          const index = names.indexOf(name);
    43824385          if (index !== -1) {
    43834386              names.splice(index, 1);
     
    43974400       */
    43984401      setAttr(attr, val) {
    4399           var func = this[SET + Util._capitalize(attr)];
     4402          const func = this[SET + Util._capitalize(attr)];
    44004403          if (Util._isFunction(func)) {
    44014404              func.call(this, val);
     
    44144417      }
    44154418      _setAttr(key, val) {
    4416           var oldVal = this.attrs[key];
     4419          const oldVal = this.attrs[key];
    44174420          if (oldVal === val && !Util.isObject(val)) {
    44184421              return;
     
    44304433      }
    44314434      _setComponentAttr(key, component, val) {
    4432           var oldVal;
     4435          let oldVal;
    44334436          if (val !== undefined) {
    44344437              oldVal = this.attrs[key];
     
    44454448              evt.target = this;
    44464449          }
    4447           var shouldStop = (eventType === MOUSEENTER$1 || eventType === MOUSELEAVE$1) &&
     4450          const shouldStop = (eventType === MOUSEENTER$1 || eventType === MOUSELEAVE$1) &&
    44484451              ((compareShape &&
    44494452                  (this === compareShape ||
     
    44534456              this._fire(eventType, evt);
    44544457              // simulate event bubbling
    4455               var stopBubble = (eventType === MOUSEENTER$1 || eventType === MOUSELEAVE$1) &&
     4458              const stopBubble = (eventType === MOUSEENTER$1 || eventType === MOUSELEAVE$1) &&
    44564459                  compareShape &&
    44574460                  compareShape.isAncestorOf &&
     
    45224525      // drag & drop
    45234526      _createDragElement(evt) {
    4524           var pointerId = evt ? evt.pointerId : undefined;
    4525           var stage = this.getStage();
    4526           var ap = this.getAbsolutePosition();
     4527          const pointerId = evt ? evt.pointerId : undefined;
     4528          const stage = this.getStage();
     4529          const ap = this.getAbsolutePosition();
    45274530          if (!stage) {
    45284531              return;
    45294532          }
    4530           var pos = stage._getPointerById(pointerId) ||
     4533          const pos = stage._getPointerById(pointerId) ||
    45314534              stage._changedPointerPositions[0] ||
    45324535              ap;
     
    45664569              return;
    45674570          }
    4568           var newNodePos = {
     4571          let newNodePos = {
    45694572              x: pos.x - elem.offset.x,
    45704573              y: pos.y - elem.offset.y,
    45714574          };
    4572           var dbf = this.dragBoundFunc();
     4575          const dbf = this.dragBoundFunc();
    45734576          if (dbf !== undefined) {
    45744577              const bounded = dbf.call(this, newNodePos, evt);
     
    46174620          this._dragCleanup();
    46184621          this.on('mousedown.konva touchstart.konva', function (evt) {
    4619               var shouldCheckButton = evt.evt['button'] !== undefined;
    4620               var canDrag = !shouldCheckButton || Konva$2.dragButtons.indexOf(evt.evt['button']) >= 0;
     4622              const shouldCheckButton = evt.evt['button'] !== undefined;
     4623              const canDrag = !shouldCheckButton || Konva$2.dragButtons.indexOf(evt.evt['button']) >= 0;
    46214624              if (!canDrag) {
    46224625                  return;
     
    46254628                  return;
    46264629              }
    4627               var hasDraggingChild = false;
     4630              let hasDraggingChild = false;
    46284631              DD._dragElements.forEach((elem) => {
    46294632                  if (this.isAncestorOf(elem.node)) {
     
    46504653               * drag and drop mode
    46514654               */
    4652               var stage = this.getStage();
     4655              const stage = this.getStage();
    46534656              if (!stage) {
    46544657                  return;
     
    47174720      }
    47184721      static _createNode(obj, container) {
    4719           var className = Node.prototype.getClassName.call(obj), children = obj.children, no, len, n;
     4722          let className = Node.prototype.getClassName.call(obj), children = obj.children, no, len, n;
    47204723          // if container was passed in, add it to attrs
    47214724          if (container) {
     
    53295332          }
    53305333          const children = this.children || [];
    5331           var results = [];
     5334          const results = [];
    53325335          children.forEach(function (child) {
    53335336              if (filterFunc(child)) {
     
    54005403          }
    54015404          if (children.length > 1) {
    5402               for (var i = 0; i < children.length; i++) {
     5405              for (let i = 0; i < children.length; i++) {
    54035406                  this.add(children[i]);
    54045407              }
     
    54935496       */
    54945497      findOne(selector) {
    5495           var result = this._generalFind(selector, true);
     5498          const result = this._generalFind(selector, true);
    54965499          return result.length > 0 ? result[0] : undefined;
    54975500      }
    54985501      _generalFind(selector, findOne) {
    5499           var retArr = [];
     5502          const retArr = [];
    55005503          this._descendants((node) => {
    55015504              const valid = node._isMatch(selector);
     
    55305533      // extenders
    55315534      toObject() {
    5532           var obj = Node.prototype.toObject.call(this);
     5535          const obj = Node.prototype.toObject.call(this);
    55335536          obj.children = [];
    55345537          this.getChildren().forEach((child) => {
     
    55455548       */
    55465549      isAncestorOf(node) {
    5547           var parent = node.getParent();
     5550          let parent = node.getParent();
    55485551          while (parent) {
    55495552              if (parent._id === this._id) {
     
    55565559      clone(obj) {
    55575560          // call super method
    5558           var node = Node.prototype.clone.call(this, obj);
     5561          const node = Node.prototype.clone.call(this, obj);
    55595562          this.getChildren().forEach(function (no) {
    55605563              node.add(no.clone());
     
    55765579       */
    55775580      getAllIntersections(pos) {
    5578           var arr = [];
     5581          const arr = [];
    55795582          this.find('Shape').forEach((shape) => {
    55805583              if (shape.isVisible() && shape.intersects(pos)) {
     
    56045607      }
    56055608      drawScene(can, top, bufferCanvas) {
    5606           var layer = this.getLayer(), canvas = can || (layer && layer.getCanvas()), context = canvas && canvas.getContext(), cachedCanvas = this._getCanvasCache(), cachedSceneCanvas = cachedCanvas && cachedCanvas.scene;
    5607           var caching = canvas && canvas.isCache;
     5609          const layer = this.getLayer(), canvas = can || (layer && layer.getCanvas()), context = canvas && canvas.getContext(), cachedCanvas = this._getCanvasCache(), cachedSceneCanvas = cachedCanvas && cachedCanvas.scene;
     5610          const caching = canvas && canvas.isCache;
    56085611          if (!this.isVisible() && !caching) {
    56095612              return this;
     
    56115614          if (cachedSceneCanvas) {
    56125615              context.save();
    5613               var m = this.getAbsoluteTransform(top).getMatrix();
     5616              const m = this.getAbsoluteTransform(top).getMatrix();
    56145617              context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
    56155618              this._drawCachedSceneCanvas(context);
     
    56255628              return this;
    56265629          }
    5627           var layer = this.getLayer(), canvas = can || (layer && layer.hitCanvas), context = canvas && canvas.getContext(), cachedCanvas = this._getCanvasCache(), cachedHitCanvas = cachedCanvas && cachedCanvas.hit;
     5630          const layer = this.getLayer(), canvas = can || (layer && layer.hitCanvas), context = canvas && canvas.getContext(), cachedCanvas = this._getCanvasCache(), cachedHitCanvas = cachedCanvas && cachedCanvas.hit;
    56285631          if (cachedHitCanvas) {
    56295632              context.save();
    5630               var m = this.getAbsoluteTransform(top).getMatrix();
     5633              const m = this.getAbsoluteTransform(top).getMatrix();
    56315634              context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
    56325635              this._drawCachedHitCanvas(context);
     
    56405643      _drawChildren(drawMethod, canvas, top, bufferCanvas) {
    56415644          var _a;
    5642           var context = canvas && canvas.getContext(), clipWidth = this.clipWidth(), clipHeight = this.clipHeight(), clipFunc = this.clipFunc(), hasClip = (typeof clipWidth === 'number' && typeof clipHeight === 'number') ||
     5645          const context = canvas && canvas.getContext(), clipWidth = this.clipWidth(), clipHeight = this.clipHeight(), clipFunc = this.clipFunc(), hasClip = (typeof clipWidth === 'number' && typeof clipHeight === 'number') ||
    56435646              clipFunc;
    56445647          const selfCache = top === this;
    56455648          if (hasClip) {
    56465649              context.save();
    5647               var transform = this.getAbsoluteTransform(top);
    5648               var m = transform.getMatrix();
     5650              const transform = this.getAbsoluteTransform(top);
     5651              let m = transform.getMatrix();
    56495652              context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
    56505653              context.beginPath();
     
    56545657              }
    56555658              else {
    5656                   var clipX = this.clipX();
    5657                   var clipY = this.clipY();
     5659                  const clipX = this.clipX();
     5660                  const clipY = this.clipY();
    56585661                  context.rect(clipX || 0, clipY || 0, clipWidth, clipHeight);
    56595662              }
     
    56625665              context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
    56635666          }
    5664           var hasComposition = !selfCache &&
     5667          const hasComposition = !selfCache &&
    56655668              this.globalCompositeOperation() !== 'source-over' &&
    56665669              drawMethod === 'drawScene';
     
    56815684      getClientRect(config = {}) {
    56825685          var _a;
    5683           var skipTransform = config.skipTransform;
    5684           var relativeTo = config.relativeTo;
    5685           var minX, minY, maxX, maxY;
    5686           var selfRect = {
     5686          const skipTransform = config.skipTransform;
     5687          const relativeTo = config.relativeTo;
     5688          let minX, minY, maxX, maxY;
     5689          let selfRect = {
    56875690              x: Infinity,
    56885691              y: Infinity,
     
    56905693              height: 0,
    56915694          };
    5692           var that = this;
     5695          const that = this;
    56935696          (_a = this.children) === null || _a === void 0 ? void 0 : _a.forEach(function (child) {
    56945697              // skip invisible children
     
    56965699                  return;
    56975700              }
    5698               var rect = child.getClientRect({
     5701              const rect = child.getClientRect({
    56995702                  relativeTo: that,
    57005703                  skipShadow: config.skipShadow,
     
    57205723          });
    57215724          // if child is group we need to make sure it has visible shapes inside
    5722           var shapes = this.find('Shape');
    5723           var hasVisible = false;
    5724           for (var i = 0; i < shapes.length; i++) {
    5725               var shape = shapes[i];
     5725          const shapes = this.find('Shape');
     5726          let hasVisible = false;
     5727          for (let i = 0; i < shapes.length; i++) {
     5728              const shape = shapes[i];
    57265729              if (shape._isVisible(this)) {
    57275730                  hasVisible = true;
     
    58975900
    58985901  // CONSTANTS
    5899   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 = [
     5902  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 = [
    59005903      [MOUSEENTER, '_pointerenter'],
    59015904      [MOUSEDOWN, '_pointerdown'],
     
    60566059          if (typeof container === STRING) {
    60576060              if (container.charAt(0) === '.') {
    6058                   var className = container.slice(1);
     6061                  const className = container.slice(1);
    60596062                  container = document.getElementsByClassName(className)[0];
    60606063              }
     
    60916094       */
    60926095      clear() {
    6093           var layers = this.children, len = layers.length, n;
     6096          let layers = this.children, len = layers.length, n;
    60946097          for (n = 0; n < len; n++) {
    60956098              layers[n].clear();
     
    61076110      destroy() {
    61086111          super.destroy();
    6109           var content = this.content;
     6112          const content = this.content;
    61106113          if (content && Util._isInDocument(content)) {
    61116114              this.container().removeChild(content);
    61126115          }
    6113           var index = stages.indexOf(this);
     6116          const index = stages.indexOf(this);
    61146117          if (index > -1) {
    61156118              stages.splice(index, 1);
     
    61556158          config.width = config.width || this.width();
    61566159          config.height = config.height || this.height();
    6157           var canvas = new SceneCanvas({
     6160          const canvas = new SceneCanvas({
    61586161              width: config.width,
    61596162              height: config.height,
    61606163              pixelRatio: config.pixelRatio || 1,
    61616164          });
    6162           var _context = canvas.getContext()._context;
    6163           var layers = this.children;
     6165          const _context = canvas.getContext()._context;
     6166          const layers = this.children;
    61646167          if (config.x || config.y) {
    61656168              _context.translate(-1 * config.x, -1 * config.y);
     
    61696172                  return;
    61706173              }
    6171               var layerCanvas = layer._toKonvaCanvas(config);
     6174              const layerCanvas = layer._toKonvaCanvas(config);
    61726175              _context.drawImage(layerCanvas._canvas, config.x, config.y, layerCanvas.getWidth() / layerCanvas.getPixelRatio(), layerCanvas.getHeight() / layerCanvas.getPixelRatio());
    61736176          });
     
    61916194              return null;
    61926195          }
    6193           var layers = this.children, len = layers.length, end = len - 1, n;
     6196          let layers = this.children, len = layers.length, end = len - 1, n;
    61946197          for (n = end; n >= 0; n--) {
    61956198              const shape = layers[n].getIntersection(pos);
     
    62016204      }
    62026205      _resizeDOM() {
    6203           var width = this.width();
    6204           var height = this.height();
     6206          const width = this.width();
     6207          const height = this.height();
    62056208          if (this.content) {
    62066209              // set content dimensions
     
    62186221      add(layer, ...rest) {
    62196222          if (arguments.length > 1) {
    6220               for (var i = 0; i < arguments.length; i++) {
     6223              for (let i = 0; i < arguments.length; i++) {
    62216224                  this.add(arguments[i]);
    62226225              }
     
    62246227          }
    62256228          super.add(layer);
    6226           var length = this.children.length;
     6229          const length = this.children.length;
    62276230          if (length > MAX_LAYERS_NUMBER) {
    62286231              Util.warn('The stage has ' +
     
    63086311          }
    63096312          this.setPointersPositions(evt);
    6310           var targetShape = this._getTargetShape(eventType);
    6311           var eventsEnabled = !(Konva$2.isDragging() || Konva$2.isTransforming()) || Konva$2.hitOnDragEnabled;
     6313          const targetShape = this._getTargetShape(eventType);
     6314          const eventsEnabled = !(Konva$2.isDragging() || Konva$2.isTransforming()) || Konva$2.hitOnDragEnabled;
    63126315          if (targetShape && eventsEnabled) {
    63136316              targetShape._fireAndBubble(events.pointerout, { evt: evt });
     
    63426345          }
    63436346          this.setPointersPositions(evt);
    6344           var triggeredOnShape = false;
     6347          let triggeredOnShape = false;
    63456348          this._changedPointerPositions.forEach((pos) => {
    6346               var shape = this.getIntersection(pos);
     6349              const shape = this.getIntersection(pos);
    63476350              DD.justDragged = false;
    63486351              // probably we are staring a click
     
    63906393          }
    63916394          this.setPointersPositions(evt);
    6392           var eventsEnabled = !(Konva$2.isDragging() || Konva$2.isTransforming()) || Konva$2.hitOnDragEnabled;
     6395          const eventsEnabled = !(Konva$2.isDragging() || Konva$2.isTransforming()) || Konva$2.hitOnDragEnabled;
    63936396          if (!eventsEnabled) {
    63946397              return;
    63956398          }
    6396           var processedShapesIds = {};
     6399          const processedShapesIds = {};
    63976400          let triggeredOnShape = false;
    6398           var targetShape = this._getTargetShape(eventType);
     6401          const targetShape = this._getTargetShape(eventType);
    63996402          this._changedPointerPositions.forEach((pos) => {
    64006403              const shape = (getCapturedShape(pos.id) ||
     
    64026405              const pointerId = pos.id;
    64036406              const event = { evt: evt, pointerId };
    6404               var differentTarget = targetShape !== shape;
     6407              const differentTarget = targetShape !== shape;
    64056408              if (differentTarget && targetShape) {
    64066409                  targetShape._fireAndBubble(events.pointerout, { ...event }, shape);
     
    64526455          const clickStartShape = this[eventType + 'ClickStartShape'];
    64536456          const clickEndShape = this[eventType + 'ClickEndShape'];
    6454           var processedShapesIds = {};
     6457          const processedShapesIds = {};
    64556458          let triggeredOnShape = false;
    64566459          this._changedPointerPositions.forEach((pos) => {
     
    65336536      _contextmenu(evt) {
    65346537          this.setPointersPositions(evt);
    6535           var shape = this.getIntersection(this.getPointerPosition());
     6538          const shape = this.getIntersection(this.getPointerPosition());
    65366539          if (shape && shape.isListening()) {
    65376540              shape._fireAndBubble(CONTEXTMENU, { evt: evt });
     
    65476550      _wheel(evt) {
    65486551          this.setPointersPositions(evt);
    6549           var shape = this.getIntersection(this.getPointerPosition());
     6552          const shape = this.getIntersection(this.getPointerPosition());
    65506553          if (shape && shape.isListening()) {
    65516554              shape._fireAndBubble(WHEEL, { evt: evt });
     
    65866589       */
    65876590      setPointersPositions(evt) {
    6588           var contentPosition = this._getContentPosition(), x = null, y = null;
     6591          let contentPosition = this._getContentPosition(), x = null, y = null;
    65896592          evt = evt ? evt : window.event;
    65906593          // touch events
     
    66366639              };
    66376640          }
    6638           var rect = this.content.getBoundingClientRect();
     6641          const rect = this.content.getBoundingClientRect();
    66396642          return {
    66406643              top: rect.top,
     
    66596662              return;
    66606663          }
    6661           var container = this.container();
     6664          const container = this.container();
    66626665          if (!container) {
    66636666              throw 'Stage has no container. A container is required.';
     
    67236726  }
    67246727
    6725   var HAS_SHADOW = 'hasShadow';
    6726   var SHADOW_RGBA = 'shadowRGBA';
    6727   var patternImage = 'patternImage';
    6728   var linearGradient = 'linearGradient';
    6729   var radialGradient = 'radialGradient';
     6728  const HAS_SHADOW = 'hasShadow';
     6729  const SHADOW_RGBA = 'shadowRGBA';
     6730  const patternImage = 'patternImage';
     6731  const linearGradient = 'linearGradient';
     6732  const radialGradient = 'radialGradient';
    67306733  let dummyContext$1;
    67316734  function getDummyContext$1() {
     
    69296932      __getFillPattern() {
    69306933          if (this.fillPatternImage()) {
    6931               var ctx = getDummyContext$1();
     6934              const ctx = getDummyContext$1();
    69326935              const pattern = ctx.createPattern(this.fillPatternImage(), this.fillPatternRepeat() || 'repeat');
    69336936              if (pattern && pattern.setTransform) {
     
    69576960      }
    69586961      __getLinearGradient() {
    6959           var colorStops = this.fillLinearGradientColorStops();
     6962          const colorStops = this.fillLinearGradientColorStops();
    69606963          if (colorStops) {
    6961               var ctx = getDummyContext$1();
    6962               var start = this.fillLinearGradientStartPoint();
    6963               var end = this.fillLinearGradientEndPoint();
    6964               var grd = ctx.createLinearGradient(start.x, start.y, end.x, end.y);
     6964              const ctx = getDummyContext$1();
     6965              const start = this.fillLinearGradientStartPoint();
     6966              const end = this.fillLinearGradientEndPoint();
     6967              const grd = ctx.createLinearGradient(start.x, start.y, end.x, end.y);
    69656968              // build color stops
    6966               for (var n = 0; n < colorStops.length; n += 2) {
     6969              for (let n = 0; n < colorStops.length; n += 2) {
    69676970                  grd.addColorStop(colorStops[n], colorStops[n + 1]);
    69686971              }
     
    69746977      }
    69756978      __getRadialGradient() {
    6976           var colorStops = this.fillRadialGradientColorStops();
     6979          const colorStops = this.fillRadialGradientColorStops();
    69776980          if (colorStops) {
    6978               var ctx = getDummyContext$1();
    6979               var start = this.fillRadialGradientStartPoint();
    6980               var end = this.fillRadialGradientEndPoint();
    6981               var grd = ctx.createRadialGradient(start.x, start.y, this.fillRadialGradientStartRadius(), end.x, end.y, this.fillRadialGradientEndRadius());
     6981              const ctx = getDummyContext$1();
     6982              const start = this.fillRadialGradientStartPoint();
     6983              const end = this.fillRadialGradientEndPoint();
     6984              const grd = ctx.createRadialGradient(start.x, start.y, this.fillRadialGradientStartRadius(), end.x, end.y, this.fillRadialGradientEndRadius());
    69826985              // build color stops
    6983               for (var n = 0; n < colorStops.length; n += 2) {
     6986              for (let n = 0; n < colorStops.length; n += 2) {
    69846987                  grd.addColorStop(colorStops[n], colorStops[n + 1]);
    69856988              }
     
    69946997              return;
    69956998          }
    6996           var rgba = Util.colorToRGBA(this.shadowColor());
     6999          const rgba = Util.colorToRGBA(this.shadowColor());
    69977000          if (rgba) {
    69987001              return ('rgba(' +
     
    70777080       */
    70787081      intersects(point) {
    7079           var stage = this.getStage();
     7082          const stage = this.getStage();
    70807083          if (!stage) {
    70817084              return false;
     
    71497152       */
    71507153      getSelfRect() {
    7151           var size = this.size();
     7154          const size = this.size();
    71527155          return {
    71537156              x: this._centroid ? -size.width / 2 : 0,
     
    72057208          // 2 - when we are caching current
    72067209          // 3 - when node is cached and we need to draw it into layer
    7207           var layer = this.getLayer();
    7208           var canvas = can || layer.getCanvas(), context = canvas.getContext(), cachedCanvas = this._getCanvasCache(), drawFunc = this.getSceneFunc(), hasShadow = this.hasShadow(), stage, bufferContext;
    7209           var skipBuffer = canvas.isCache;
    7210           var cachingSelf = top === this;
     7210          const layer = this.getLayer();
     7211          let canvas = can || layer.getCanvas(), context = canvas.getContext(), cachedCanvas = this._getCanvasCache(), drawFunc = this.getSceneFunc(), hasShadow = this.hasShadow(), stage, bufferContext;
     7212          const skipBuffer = canvas.isCache;
     7213          const cachingSelf = top === this;
    72117214          if (!this.isVisible() && !cachingSelf) {
    72127215              return this;
     
    72157218          if (cachedCanvas) {
    72167219              context.save();
    7217               var m = this.getAbsoluteTransform(top).getMatrix();
     7220              const m = this.getAbsoluteTransform(top).getMatrix();
    72187221              context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
    72197222              this._drawCachedSceneCanvas(context);
     
    72387241              drawFunc.call(this, bufferContext, this);
    72397242              bufferContext.restore();
    7240               var ratio = bc.pixelRatio;
     7243              const ratio = bc.pixelRatio;
    72417244              if (hasShadow) {
    72427245                  context._applyShadow(this);
     
    72667269              return this;
    72677270          }
    7268           var layer = this.getLayer(), canvas = can || layer.hitCanvas, context = canvas && canvas.getContext(), drawFunc = this.hitFunc() || this.sceneFunc(), cachedCanvas = this._getCanvasCache(), cachedHitCanvas = cachedCanvas && cachedCanvas.hit;
     7271          const layer = this.getLayer(), canvas = can || layer.hitCanvas, context = canvas && canvas.getContext(), drawFunc = this.hitFunc() || this.sceneFunc(), cachedCanvas = this._getCanvasCache(), cachedHitCanvas = cachedCanvas && cachedCanvas.hit;
    72697272          if (!this.colorKey) {
    72707273              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()');
     
    72727275          if (cachedHitCanvas) {
    72737276              context.save();
    7274               var m = this.getAbsoluteTransform(top).getMatrix();
     7277              const m = this.getAbsoluteTransform(top).getMatrix();
    72757278              context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
    72767279              this._drawCachedHitCanvas(context);
     
    72857288          const selfCache = this === top;
    72867289          if (!selfCache) {
    7287               var o = this.getAbsoluteTransform(top).getMatrix();
     7290              const o = this.getAbsoluteTransform(top).getMatrix();
    72887291              context.transform(o[0], o[1], o[2], o[3], o[4], o[5]);
    72897292          }
     
    73057308       */
    73067309      drawHitFromCache(alphaThreshold = 0) {
    7307           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;
     7310          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;
    73087311          hitContext.clear();
    73097312          hitContext.drawImage(sceneCanvas._canvas, 0, 0, hitWidth, hitHeight);
     
    83698372
    83708373  // constants
    8371   var HASH = '#', BEFORE_DRAW = 'beforeDraw', DRAW = 'draw',
     8374  const HASH = '#', BEFORE_DRAW = 'beforeDraw', DRAW = 'draw',
    83728375  /*
    83738376   * 2 - 3 - 4
     
    84848487      setZIndex(index) {
    84858488          super.setZIndex(index);
    8486           var stage = this.getStage();
     8489          const stage = this.getStage();
    84878490          if (stage && stage.content) {
    84888491              stage.content.removeChild(this.getNativeCanvasElement());
     
    84988501      moveToTop() {
    84998502          Node.prototype.moveToTop.call(this);
    8500           var stage = this.getStage();
     8503          const stage = this.getStage();
    85018504          if (stage && stage.content) {
    85028505              stage.content.removeChild(this.getNativeCanvasElement());
     
    85068509      }
    85078510      moveUp() {
    8508           var moved = Node.prototype.moveUp.call(this);
     8511          const moved = Node.prototype.moveUp.call(this);
    85098512          if (!moved) {
    85108513              return false;
    85118514          }
    8512           var stage = this.getStage();
     8515          const stage = this.getStage();
    85138516          if (!stage || !stage.content) {
    85148517              return false;
     
    85268529      moveDown() {
    85278530          if (Node.prototype.moveDown.call(this)) {
    8528               var stage = this.getStage();
     8531              const stage = this.getStage();
    85298532              if (stage) {
    8530                   var children = stage.children;
     8533                  const children = stage.children;
    85318534                  if (stage.content) {
    85328535                      stage.content.removeChild(this.getNativeCanvasElement());
     
    85418544      moveToBottom() {
    85428545          if (Node.prototype.moveToBottom.call(this)) {
    8543               var stage = this.getStage();
     8546              const stage = this.getStage();
    85448547              if (stage) {
    8545                   var children = stage.children;
     8548                  const children = stage.children;
    85468549                  if (stage.content) {
    85478550                      stage.content.removeChild(this.getNativeCanvasElement());
     
    85578560      }
    85588561      remove() {
    8559           var _canvas = this.getNativeCanvasElement();
     8562          const _canvas = this.getNativeCanvasElement();
    85608563          Node.prototype.remove.call(this);
    85618564          if (_canvas && _canvas.parentNode && Util._isInDocument(_canvas)) {
     
    85748577      }
    85758578      _validateAdd(child) {
    8576           var type = child.getType();
     8579          const type = child.getType();
    85778580          if (type !== 'Group' && type !== 'Shape') {
    85788581              Util.throw('You may only add groups and shapes to a layer.');
     
    86718674          // in some cases antialiased area may be bigger than 1px
    86728675          // it is possible if we will cache node, then scale it a lot
    8673           var spiralSearchDistance = 1;
    8674           var continueSearch = false;
     8676          let spiralSearchDistance = 1;
     8677          let continueSearch = false;
    86758678          while (true) {
    86768679              for (let i = 0; i < INTERSECTION_OFFSETS_LEN; i++) {
     
    87288731      }
    87298732      drawScene(can, top) {
    8730           var layer = this.getLayer(), canvas = can || (layer && layer.getCanvas());
     8733          const layer = this.getLayer(), canvas = can || (layer && layer.getCanvas());
    87318734          this._fire(BEFORE_DRAW, {
    87328735              node: this,
     
    87428745      }
    87438746      drawHit(can, top) {
    8744           var layer = this.getLayer(), canvas = can || (layer && layer.hitCanvas);
     8747          const layer = this.getLayer(), canvas = can || (layer && layer.hitCanvas);
    87458748          if (layer && layer.clearBeforeDraw()) {
    87468749              layer.getHitCanvas().getContext().clear();
     
    87868789              return;
    87878790          }
    8788           var parent = this.parent;
    8789           var added = !!this.hitCanvas._canvas.parentNode;
     8791          const parent = this.parent;
     8792          const added = !!this.hitCanvas._canvas.parentNode;
    87908793          if (added) {
    87918794              parent.content.removeChild(this.hitCanvas._canvas);
     
    89248927  class Group extends Container {
    89258928      _validateAdd(child) {
    8926           var type = child.getType();
     8929          const type = child.getType();
    89278930          if (type !== 'Group' && type !== 'Shape') {
    89288931              Util.throw('You may only add groups and shapes to groups.');
     
    91219124              }
    91229125          }
    9123           for (let key in layerHash) {
     9126          for (const key in layerHash) {
    91249127              if (!layerHash.hasOwnProperty(key)) {
    91259128                  continue;
     
    91499152  Animation.animRunning = false;
    91509153
    9151   var blacklist = {
     9154  let blacklist = {
    91529155      node: 1,
    91539156      duration: 1,
     
    91759178      }
    91769179      fire(str) {
    9177           var handler = this[str];
     9180          const handler = this[str];
    91789181          if (handler) {
    91799182              handler();
     
    92549257      }
    92559258      onEnterFrame() {
    9256           var t = this.getTimer() - this._startTime;
     9259          const t = this.getTimer() - this._startTime;
    92579260          if (this.state === PLAYING) {
    92589261              this.setTime(t);
     
    92989301  class Tween {
    92999302      constructor(config) {
    9300           var that = this, node = config.node, nodeId = node._id, duration, easing = config.easing || Easings.Linear, yoyo = !!config.yoyo, key;
     9303          let that = this, node = config.node, nodeId = node._id, duration, easing = config.easing || Easings.Linear, yoyo = !!config.yoyo, key;
    93019304          if (typeof config.duration === 'undefined') {
    93029305              duration = 0.3;
     
    93119314          this.node = node;
    93129315          this._id = idCounter++;
    9313           var layers = node.getLayer() ||
     9316          const layers = node.getLayer() ||
    93149317              (node instanceof Konva$2['Stage'] ? node.getLayers() : null);
    93159318          if (!layers) {
     
    93469349      }
    93479350      _addAttr(key, end) {
    9348           var node = this.node, nodeId = node._id, start, diff, tweenId, n, len, trueEnd, trueStart, endRGBA;
     9351          let node = this.node, nodeId = node._id, start, diff, tweenId, n, len, trueEnd, trueStart, endRGBA;
    93499352          // remove conflict from tween map if it exists
    93509353          tweenId = Tween.tweens[nodeId][key];
     
    93779380                      }
    93789381                      else {
    9379                           var startRGBA = Util.colorToRGBA(start[n]);
     9382                          const startRGBA = Util.colorToRGBA(start[n]);
    93809383                          endRGBA = Util.colorToRGBA(end[n]);
    93819384                          start[n] = startRGBA;
     
    94189421      }
    94199422      _tweenFunc(i) {
    9420           var node = this.node, attrs = Tween.attrs[node._id][this._id], key, attr, start, diff, newVal, n, len, end;
     9423          let node = this.node, attrs = Tween.attrs[node._id][this._id], key, attr, start, diff, newVal, n, len, end;
    94219424          for (key in attrs) {
    94229425              attr = attrs[key];
     
    94829485          };
    94839486          this.tween.onFinish = () => {
    9484               var node = this.node;
     9487              const node = this.node;
    94859488              // after tweening  points of line we need to set original end
    9486               var attrs = Tween.attrs[node._id][this._id];
     9489              const attrs = Tween.attrs[node._id][this._id];
    94879490              if (attrs.points && attrs.points.trueEnd) {
    94889491                  node.setAttr('points', attrs.points.trueEnd);
     
    94939496          };
    94949497          this.tween.onReset = () => {
    9495               var node = this.node;
     9498              const node = this.node;
    94969499              // after tweening  points of line we need to set original start
    9497               var attrs = Tween.attrs[node._id][this._id];
     9500              const attrs = Tween.attrs[node._id][this._id];
    94989501              if (attrs.points && attrs.points.trueStart) {
    94999502                  node.points(attrs.points.trueStart);
     
    95769579       */
    95779580      destroy() {
    9578           var nodeId = this.node._id, thisId = this._id, attrs = Tween.tweens[nodeId], key;
     9581          let nodeId = this.node._id, thisId = this._id, attrs = Tween.tweens[nodeId], key;
    95799582          this.pause();
    95809583          for (key in attrs) {
     
    96019604   */
    96029605  Node.prototype.to = function (params) {
    9603       var onFinish = params.onFinish;
     9606      const onFinish = params.onFinish;
    96049607      params.node = this;
    96059608      params.onFinish = function () {
     
    96099612          }
    96109613      };
    9611       var tween = new Tween(params);
     9614      const tween = new Tween(params);
    96129615      tween.play();
    96139616  };
     
    96279630       */
    96289631      BackEaseIn(t, b, c, d) {
    9629           var s = 1.70158;
     9632          const s = 1.70158;
    96309633          return c * (t /= d) * t * ((s + 1) * t - s) + b;
    96319634      },
     
    96369639       */
    96379640      BackEaseOut(t, b, c, d) {
    9638           var s = 1.70158;
     9641          const s = 1.70158;
    96399642          return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
    96409643      },
     
    96459648       */
    96469649      BackEaseInOut(t, b, c, d) {
    9647           var s = 1.70158;
     9650          let s = 1.70158;
    96489651          if ((t /= d / 2) < 1) {
    96499652              return (c / 2) * (t * t * (((s *= 1.525) + 1) * t - s)) + b;
     
    96589661      ElasticEaseIn(t, b, c, d, a, p) {
    96599662          // added s = 0
    9660           var s = 0;
     9663          let s = 0;
    96619664          if (t === 0) {
    96629665              return b;
     
    96869689      ElasticEaseOut(t, b, c, d, a, p) {
    96879690          // added s = 0
    9688           var s = 0;
     9691          let s = 0;
    96899692          if (t === 0) {
    96909693              return b;
     
    97149717      ElasticEaseInOut(t, b, c, d, a, p) {
    97159718          // added s = 0
    9716           var s = 0;
     9719          let s = 0;
    97179720          if (t === 0) {
    97189721              return b;
     
    99689971  class Arc extends Shape {
    99699972      _sceneFunc(context) {
    9970           var angle = Konva$2.getAngle(this.angle()), clockwise = this.clockwise();
     9973          const angle = Konva$2.getAngle(this.angle()), clockwise = this.clockwise();
    99719974          context.beginPath();
    99729975          context.arc(0, 0, this.outerRadius(), 0, angle, clockwise);
     
    1007410077
    1007510078  function getControlPoints(x0, y0, x1, y1, x2, y2, t) {
    10076       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);
     10079      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);
    1007710080      return [p1x, p1y, p2x, p2y];
    1007810081  }
    1007910082  function expandPoints(p, tension) {
    10080       var len = p.length, allPoints = [], n, cp;
    10081       for (n = 2; n < len - 2; n += 2) {
    10082           cp = getControlPoints(p[n - 2], p[n - 1], p[n], p[n + 1], p[n + 2], p[n + 3], tension);
     10083      const len = p.length, allPoints = [];
     10084      for (let n = 2; n < len - 2; n += 2) {
     10085          const cp = getControlPoints(p[n - 2], p[n - 1], p[n], p[n + 1], p[n + 2], p[n + 3], tension);
    1008310086          if (isNaN(cp[0])) {
    1008410087              continue;
     
    1019610199      }
    1019710200      _sceneFunc(context) {
    10198           var points = this.points(), length = points.length, tension = this.tension(), closed = this.closed(), bezier = this.bezier(), tp, len, n;
     10201          let points = this.points(), length = points.length, tension = this.tension(), closed = this.closed(), bezier = this.bezier(), tp, len, n;
    1019910202          if (!length) {
    1020010203              return;
     
    1025210255      }
    1025310256      _getTensionPointsClosed() {
    10254           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]]
     10257          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]]
    1025510258              .concat(middle)
    1025610259              .concat([
     
    1027610279      // overload size detection
    1027710280      getSelfRect() {
    10278           var points = this.points();
     10281          let points = this.points();
    1027910282          if (points.length < 4) {
    1028010283              return {
     
    1029710300              points = this.points();
    1029810301          }
    10299           var minX = points[0];
    10300           var maxX = points[0];
    10301           var minY = points[1];
    10302           var maxY = points[1];
    10303           var x, y;
    10304           for (var i = 0; i < points.length / 2; i++) {
     10302          let minX = points[0];
     10303          let maxX = points[0];
     10304          let minY = points[1];
     10305          let maxY = points[1];
     10306          let x, y;
     10307          for (let i = 0; i < points.length / 2; i++) {
    1030510308              x = points[i * 2];
    1030610309              y = points[i * 2 + 1];
     
    1107511078  const binomialCoefficients = [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1]];
    1107611079  const getCubicArcLength = (xs, ys, t) => {
    11077       let z;
    1107811080      let sum;
    1107911081      let correctedT;
     
    1108211084          }*/
    1108311085      const n = 20;
    11084       z = t / 2;
     11086      const z = t / 2;
    1108511087      sum = 0;
    1108611088      for (let i = 0; i < n; i++) {
     
    1129211294      }
    1129311295      _sceneFunc(context) {
    11294           var ca = this.dataArray;
     11296          const ca = this.dataArray;
    1129511297          // context position
    1129611298          context.beginPath();
    11297           var isClosed = false;
    11298           for (var n = 0; n < ca.length; n++) {
    11299               var c = ca[n].command;
    11300               var p = ca[n].points;
     11299          let isClosed = false;
     11300          for (let n = 0; n < ca.length; n++) {
     11301              const c = ca[n].command;
     11302              const p = ca[n].points;
    1130111303              switch (c) {
    1130211304                  case 'L':
     
    1133911341      }
    1134011342      getSelfRect() {
    11341           var points = [];
     11343          let points = [];
    1134211344          this.dataArray.forEach(function (data) {
    1134311345              if (data.command === 'A') {
    1134411346                  // Approximates by breaking curve into line segments
    11345                   var start = data.points[4];
     11347                  const start = data.points[4];
    1134611348                  // 4 = theta
    11347                   var dTheta = data.points[5];
     11349                  const dTheta = data.points[5];
    1134811350                  // 5 = dTheta
    11349                   var end = data.points[4] + dTheta;
    11350                   var inc = Math.PI / 180.0;
     11351                  const end = data.points[4] + dTheta;
     11352                  let inc = Math.PI / 180.0;
    1135111353                  // 1 degree resolution
    1135211354                  if (Math.abs(start - end) < inc) {
     
    1138011382              }
    1138111383          });
    11382           var minX = points[0];
    11383           var maxX = points[0];
    11384           var minY = points[1];
    11385           var maxY = points[1];
    11386           var x, y;
    11387           for (var i = 0; i < points.length / 2; i++) {
     11384          let minX = points[0];
     11385          let maxX = points[0];
     11386          let minY = points[1];
     11387          let maxY = points[1];
     11388          let x, y;
     11389          for (let i = 0; i < points.length / 2; i++) {
    1138811390              x = points[i * 2];
    1138911391              y = points[i * 2 + 1];
     
    1143311435      static getPathLength(dataArray) {
    1143411436          let pathLength = 0;
    11435           for (var i = 0; i < dataArray.length; ++i) {
     11437          for (let i = 0; i < dataArray.length; ++i) {
    1143611438              pathLength += dataArray[i].pathLength;
    1143711439          }
     
    1143911441      }
    1144011442      static getPointAtLengthOfDataArray(length, dataArray) {
    11441           var point, i = 0, ii = dataArray.length;
     11443          let points, i = 0, ii = dataArray.length;
    1144211444          if (!ii) {
    1144311445              return null;
     
    1144811450          }
    1144911451          if (i === ii) {
    11450               point = dataArray[i - 1].points.slice(-2);
     11452              points = dataArray[i - 1].points.slice(-2);
    1145111453              return {
    11452                   x: point[0],
    11453                   y: point[1],
     11454                  x: points[0],
     11455                  y: points[1],
    1145411456              };
    1145511457          }
    1145611458          if (length < 0.01) {
    11457               point = dataArray[i].points.slice(0, 2);
     11459              points = dataArray[i].points.slice(0, 2);
    1145811460              return {
    11459                   x: point[0],
    11460                   y: point[1],
     11461                  x: points[0],
     11462                  y: points[1],
    1146111463              };
    1146211464          }
    11463           var cp = dataArray[i];
    11464           var p = cp.points;
     11465          const cp = dataArray[i];
     11466          const p = cp.points;
    1146511467          switch (cp.command) {
    1146611468              case 'L':
     
    1152011522              return (1 - t) * (1 - t) * (1 - t);
    1152111523          }
    11522           var x = P4x * CB1(pct) + P3x * CB2(pct) + P2x * CB3(pct) + P1x * CB4(pct);
    11523           var y = P4y * CB1(pct) + P3y * CB2(pct) + P2y * CB3(pct) + P1y * CB4(pct);
     11524          const x = P4x * CB1(pct) + P3x * CB2(pct) + P2x * CB3(pct) + P1x * CB4(pct);
     11525          const y = P4y * CB1(pct) + P3y * CB2(pct) + P2y * CB3(pct) + P1y * CB4(pct);
    1152411526          return {
    1152511527              x: x,
     
    1153711539              return (1 - t) * (1 - t);
    1153811540          }
    11539           var x = P3x * QB1(pct) + P2x * QB2(pct) + P1x * QB3(pct);
    11540           var y = P3y * QB1(pct) + P2y * QB2(pct) + P1y * QB3(pct);
     11541          const x = P3x * QB1(pct) + P2x * QB2(pct) + P1x * QB3(pct);
     11542          const y = P3y * QB1(pct) + P2y * QB2(pct) + P1y * QB3(pct);
    1154111543          return {
    1154211544              x: x,
     
    1154511547      }
    1154611548      static getPointOnEllipticalArc(cx, cy, rx, ry, theta, psi) {
    11547           var cosPsi = Math.cos(psi), sinPsi = Math.sin(psi);
    11548           var pt = {
     11549          const cosPsi = Math.cos(psi), sinPsi = Math.sin(psi);
     11550          const pt = {
    1154911551              x: rx * Math.cos(theta),
    1155011552              y: ry * Math.sin(theta),
     
    1158811590          }
    1158911591          // command string
    11590           var cs = data;
     11592          let cs = data;
    1159111593          // command chars
    11592           var cc = [
     11594          const cc = [
    1159311595              'm',
    1159411596              'M',
     
    1161911621          }
    1162011622          // create array
    11621           var arr = cs.split('|');
    11622           var ca = [];
    11623           var coords = [];
     11623          const arr = cs.split('|');
     11624          const ca = [];
     11625          const coords = [];
    1162411626          // init context point
    11625           var cpx = 0;
    11626           var cpy = 0;
    11627           var re = /([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi;
    11628           var match;
     11627          let cpx = 0;
     11628          let cpy = 0;
     11629          const re = /([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi;
     11630          let match;
    1162911631          for (n = 1; n < arr.length; n++) {
    11630               var str = arr[n];
    11631               var c = str.charAt(0);
     11632              let str = arr[n];
     11633              let c = str.charAt(0);
    1163211634              str = str.slice(1);
    1163311635              coords.length = 0;
     
    1163811640              //   coords.push(match[0]);
    1163911641              // }
    11640               var p = [];
    11641               for (var j = 0, jlen = coords.length; j < jlen; j++) {
     11642              const p = [];
     11643              for (let j = 0, jlen = coords.length; j < jlen; j++) {
    1164211644                  // extra case for merged flags
    1164311645                  if (coords[j] === '00') {
     
    1164511647                      continue;
    1164611648                  }
    11647                   var parsed = parseFloat(coords[j]);
     11649                  const parsed = parseFloat(coords[j]);
    1164811650                  if (!isNaN(parsed)) {
    1164911651                      p.push(parsed);
     
    1165811660                      break;
    1165911661                  }
    11660                   var cmd = '';
    11661                   var points = [];
    11662                   var startX = cpx, startY = cpy;
     11662                  let cmd = '';
     11663                  let points = [];
     11664                  const startX = cpx, startY = cpy;
    1166311665                  // Move var from within the switch to up here (jshint)
    1166411666                  var prevCmd, ctlPtx, ctlPty; // Ss, Tt
     
    1168811690                          // to the the first point of the path (if any).
    1168911691                          if (ca.length > 2 && ca[ca.length - 1].command === 'z') {
    11690                               for (var idx = ca.length - 2; idx >= 0; idx--) {
     11692                              for (let idx = ca.length - 2; idx >= 0; idx--) {
    1169111693                                  if (ca[idx].command === 'M') {
    1169211694                                      cpx = ca[idx].points[0] + dx;
     
    1185711859      }
    1185811860      static calcLength(x, y, cmd, points) {
    11859           var len, p1, p2, t;
    11860           var path = Path;
     11861          let len, p1, p2, t;
     11862          const path = Path;
    1186111863          switch (cmd) {
    1186211864              case 'L':
     
    1190511907      static convertEndpointToCenterParameterization(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg) {
    1190611908          // Derived from: http://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes
    11907           var psi = psiDeg * (Math.PI / 180.0);
    11908           var xp = (Math.cos(psi) * (x1 - x2)) / 2.0 + (Math.sin(psi) * (y1 - y2)) / 2.0;
    11909           var yp = (-1 * Math.sin(psi) * (x1 - x2)) / 2.0 +
     11909          const psi = psiDeg * (Math.PI / 180.0);
     11910          const xp = (Math.cos(psi) * (x1 - x2)) / 2.0 + (Math.sin(psi) * (y1 - y2)) / 2.0;
     11911          const yp = (-1 * Math.sin(psi) * (x1 - x2)) / 2.0 +
    1191011912              (Math.cos(psi) * (y1 - y2)) / 2.0;
    11911           var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);
     11913          const lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);
    1191211914          if (lambda > 1) {
    1191311915              rx *= Math.sqrt(lambda);
    1191411916              ry *= Math.sqrt(lambda);
    1191511917          }
    11916           var f = Math.sqrt((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) /
     11918          let f = Math.sqrt((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) /
    1191711919              (rx * rx * (yp * yp) + ry * ry * (xp * xp)));
    1191811920          if (fa === fs) {
     
    1192211924              f = 0;
    1192311925          }
    11924           var cxp = (f * rx * yp) / ry;
    11925           var cyp = (f * -ry * xp) / rx;
    11926           var cx = (x1 + x2) / 2.0 + Math.cos(psi) * cxp - Math.sin(psi) * cyp;
    11927           var cy = (y1 + y2) / 2.0 + Math.sin(psi) * cxp + Math.cos(psi) * cyp;
    11928           var vMag = function (v) {
     11926          const cxp = (f * rx * yp) / ry;
     11927          const cyp = (f * -ry * xp) / rx;
     11928          const cx = (x1 + x2) / 2.0 + Math.cos(psi) * cxp - Math.sin(psi) * cyp;
     11929          const cy = (y1 + y2) / 2.0 + Math.sin(psi) * cxp + Math.cos(psi) * cyp;
     11930          const vMag = function (v) {
    1192911931              return Math.sqrt(v[0] * v[0] + v[1] * v[1]);
    1193011932          };
    11931           var vRatio = function (u, v) {
     11933          const vRatio = function (u, v) {
    1193211934              return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));
    1193311935          };
    11934           var vAngle = function (u, v) {
     11936          const vAngle = function (u, v) {
    1193511937              return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));
    1193611938          };
    11937           var theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]);
    11938           var u = [(xp - cxp) / rx, (yp - cyp) / ry];
    11939           var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];
    11940           var dTheta = vAngle(u, v);
     11939          const theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]);
     11940          const u = [(xp - cxp) / rx, (yp - cyp) / ry];
     11941          const v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];
     11942          let dTheta = vAngle(u, v);
    1194111943          if (vRatio(u, v) <= -1) {
    1194211944              dTheta = Math.PI;
     
    1207412076      _sceneFunc(ctx) {
    1207512077          super._sceneFunc(ctx);
    12076           var PI2 = Math.PI * 2;
    12077           var points = this.points();
    12078           var tp = points;
    12079           var fromTension = this.tension() !== 0 && points.length > 4;
     12078          const PI2 = Math.PI * 2;
     12079          const points = this.points();
     12080          let tp = points;
     12081          const fromTension = this.tension() !== 0 && points.length > 4;
    1208012082          if (fromTension) {
    1208112083              tp = this.getTensionPoints();
    1208212084          }
    12083           var length = this.pointerLength();
    12084           var n = points.length;
    12085           var dx, dy;
     12085          const length = this.pointerLength();
     12086          const n = points.length;
     12087          let dx, dy;
    1208612088          if (fromTension) {
    1208712089              const lp = [
     
    1210212104              dy = points[n - 1] - points[n - 3];
    1210312105          }
    12104           var radians = (Math.atan2(dy, dx) + PI2) % PI2;
    12105           var width = this.pointerWidth();
     12106          const radians = (Math.atan2(dy, dx) + PI2) % PI2;
     12107          const width = this.pointerWidth();
    1210612108          if (this.pointerAtEnding()) {
    1210712109              ctx.save();
     
    1214012142          // here is a tricky part
    1214112143          // we need to disable dash for arrow pointers
    12142           var isDashEnabled = this.dashEnabled();
     12144          const isDashEnabled = this.dashEnabled();
    1214312145          if (isDashEnabled) {
    1214412146              // manually disable dash for head
     
    1245012452  class Ellipse extends Shape {
    1245112453      _sceneFunc(context) {
    12452           var rx = this.radiusX(), ry = this.radiusY();
     12454          const rx = this.radiusX(), ry = this.radiusY();
    1245312455          context.beginPath();
    1245412456          context.save();
     
    1269712699      }
    1269812700      _hitFunc(context) {
    12699           var width = this.width(), height = this.height(), cornerRadius = this.cornerRadius();
     12701          const width = this.width(), height = this.height(), cornerRadius = this.cornerRadius();
    1270012702          context.beginPath();
    1270112703          if (!cornerRadius) {
     
    1273112733       */
    1273212734      static fromURL(url, callback, onError = null) {
    12733           var img = Util.createImageElement();
     12735          const img = Util.createImageElement();
    1273412736          img.onload = function () {
    12735               var image = new Image({
     12737              const image = new Image({
    1273612738                  image: img,
    1273712739              });
     
    1285812860
    1285912861  // constants
    12860   var ATTR_CHANGE_LIST$2 = [
     12862  const ATTR_CHANGE_LIST$2 = [
    1286112863      'fontFamily',
    1286212864      'fontSize',
     
    1295912961      }
    1296012962      _addListeners(text) {
    12961           var that = this, n;
    12962           var func = function () {
     12963          let that = this, n;
     12964          const func = function () {
    1296312965              that._sync();
    1296412966          };
     
    1297512977      }
    1297612978      _sync() {
    12977           var text = this.getText(), tag = this.getTag(), width, height, pointerDirection, pointerWidth, x, y, pointerHeight;
     12979          let text = this.getText(), tag = this.getTag(), width, height, pointerDirection, pointerWidth, x, y, pointerHeight;
    1297812980          if (text && tag) {
    1297912981              width = text.width();
     
    1303113033  class Tag extends Shape {
    1303213034      _sceneFunc(context) {
    13033           var width = this.width(), height = this.height(), pointerDirection = this.pointerDirection(), pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), cornerRadius = this.cornerRadius();
     13035          const width = this.width(), height = this.height(), pointerDirection = this.pointerDirection(), pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), cornerRadius = this.cornerRadius();
    1303413036          let topLeft = 0;
    1303513037          let topRight = 0;
     
    1308313085      }
    1308413086      getSelfRect() {
    13085           var x = 0, y = 0, pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), direction = this.pointerDirection(), width = this.width(), height = this.height();
     13087          let x = 0, y = 0, pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), direction = this.pointerDirection(), width = this.width(), height = this.height();
    1308613088          if (direction === UP) {
    1308713089              y -= pointerHeight;
     
    1324613248  class Rect extends Shape {
    1324713249      _sceneFunc(context) {
    13248           var cornerRadius = this.cornerRadius(), width = this.width(), height = this.height();
     13250          const cornerRadius = this.cornerRadius(), width = this.width(), height = this.height();
    1324913251          context.beginPath();
    1325013252          if (!cornerRadius) {
     
    1337813380          context.beginPath();
    1337913381          context.moveTo(points[0].x, points[0].y);
    13380           for (var n = 1; n < points.length; n++) {
     13382          for (let n = 1; n < points.length; n++) {
    1338113383              context.lineTo(points[n].x, points[n].y);
    1338213384          }
     
    1338813390          const radius = this.attrs.radius || 0;
    1338913391          const points = [];
    13390           for (var n = 0; n < sides; n++) {
     13392          for (let n = 0; n < sides; n++) {
    1339113393              points.push({
    1339213394                  x: radius * Math.sin((n * 2 * Math.PI) / sides),
     
    1339813400      getSelfRect() {
    1339913401          const points = this._getPoints();
    13400           var minX = points[0].x;
    13401           var maxX = points[0].y;
    13402           var minY = points[0].x;
    13403           var maxY = points[0].y;
     13402          let minX = points[0].x;
     13403          let maxX = points[0].y;
     13404          let minY = points[0].x;
     13405          let maxY = points[0].y;
    1340413406          points.forEach((point) => {
    1340513407              minX = Math.min(minX, point.x);
     
    1346113463  Factory.addGetterSetter(RegularPolygon, 'sides', 0, getNumberValidator());
    1346213464
    13463   var PIx2 = Math.PI * 2;
     13465  const PIx2 = Math.PI * 2;
    1346413466  /**
    1346513467   * Ring constructor
     
    1373313735          this.anim = new Animation(() => {
    1373413736              // if we don't need to redraw layer we should return false
    13735               var updated = this._updated;
     13737              const updated = this._updated;
    1373613738              this._updated = false;
    1373713739              return updated;
     
    1375413756      }
    1375513757      _sceneFunc(context) {
    13756           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();
     13758          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();
    1375713759          if (this.hasFill() || this.hasStroke()) {
    1375813760              context.beginPath();
     
    1376313765          if (image) {
    1376413766              if (offsets) {
    13765                   var offset = offsets[anim], ix2 = index * 2;
     13767                  const offset = offsets[anim], ix2 = index * 2;
    1376613768                  context.drawImage(image, x, y, width, height, offset[ix2 + 0], offset[ix2 + 1], width, height);
    1376713769              }
     
    1377213774      }
    1377313775      _hitFunc(context) {
    13774           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];
     13776          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];
    1377513777          context.beginPath();
    1377613778          if (offsets) {
    13777               var offset = offsets[anim];
    13778               var ix2 = index * 2;
     13779              const offset = offsets[anim];
     13780              const ix2 = index * 2;
    1377913781              context.rect(offset[ix2 + 0], offset[ix2 + 1], width, height);
    1378013782          }
     
    1378913791      }
    1379013792      _setInterval() {
    13791           var that = this;
     13793          const that = this;
    1379213794          this.interval = setInterval(function () {
    1379313795              that._updateIndex();
     
    1380313805              return;
    1380413806          }
    13805           var layer = this.getLayer();
     13807          const layer = this.getLayer();
    1380613808          /*
    1380713809           * animation object has no executable function because
     
    1383313835      }
    1383413836      _updateIndex() {
    13835           var index = this.frameIndex(), animation = this.animation(), animations = this.animations(), anim = animations[animation], len = anim.length / 4;
     13837          const index = this.frameIndex(), animation = this.animation(), animations = this.animations(), anim = animations[animation], len = anim.length / 4;
    1383613838          if (index < len - 1) {
    1383713839              this.frameIndex(index + 1);
     
    1407214074  class Star extends Shape {
    1407314075      _sceneFunc(context) {
    14074           var innerRadius = this.innerRadius(), outerRadius = this.outerRadius(), numPoints = this.numPoints();
     14076          const innerRadius = this.innerRadius(), outerRadius = this.outerRadius(), numPoints = this.numPoints();
    1407514077          context.beginPath();
    1407614078          context.moveTo(0, 0 - outerRadius);
    14077           for (var n = 1; n < numPoints * 2; n++) {
    14078               var radius = n % 2 === 0 ? outerRadius : innerRadius;
    14079               var x = radius * Math.sin((n * Math.PI) / numPoints);
    14080               var y = -1 * radius * Math.cos((n * Math.PI) / numPoints);
     14079          for (let n = 1; n < numPoints * 2; n++) {
     14080              const radius = n % 2 === 0 ? outerRadius : innerRadius;
     14081              const x = radius * Math.sin((n * Math.PI) / numPoints);
     14082              const y = -1 * radius * Math.cos((n * Math.PI) / numPoints);
    1408114083              context.lineTo(x, y);
    1408214084          }
     
    1414514147
    1414614148  function stringToArray(string) {
    14147       // we need to use `Array.from` because it can split unicode string correctly
    14148       // we also can use some regexp magic from lodash:
    14149       // https://github.com/lodash/lodash/blob/fb1f99d9d90ad177560d771bc5953a435b2dc119/lodash.toarray/index.js#L256
    14150       // but I decided it is too much code for that small fix
    14151       return Array.from(string);
     14149      // Use Unicode-aware splitting
     14150      return [...string].reduce((acc, char, index, array) => {
     14151          // Handle emoji sequences (including ZWJ sequences)
     14152          if (/\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?(?:\u200D\p{Emoji_Presentation})+/u.test(char)) {
     14153              acc.push(char);
     14154          }
     14155          // Handle regional indicator symbols (flags)
     14156          else if (/\p{Regional_Indicator}{2}/u.test(char + (array[index + 1] || ''))) {
     14157              acc.push(char + array[index + 1]);
     14158          }
     14159          // Handle Indic scripts and other combining characters
     14160          else if (index > 0 && /\p{Mn}|\p{Me}|\p{Mc}/u.test(char)) {
     14161              acc[acc.length - 1] += char;
     14162          }
     14163          // Handle other characters
     14164          else {
     14165              acc.push(char);
     14166          }
     14167          return acc;
     14168      }, []);
    1415214169  }
    1415314170  // constants
    14154   var AUTO = 'auto',
     14171  const AUTO = 'auto',
    1415514172  //CANVAS = 'canvas',
    1415614173  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 = [
     
    1418714204          .join(', ');
    1418814205  }
    14189   var dummyContext;
     14206  let dummyContext;
    1419014207  function getDummyContext() {
    1419114208      if (dummyContext) {
     
    1432114338          this._partialTextY = 0;
    1432214339          // update text data for certain attr changes
    14323           for (var n = 0; n < attrChangeListLen; n++) {
     14340          for (let n = 0; n < attrChangeListLen; n++) {
    1432414341              this.on(ATTR_CHANGE_LIST$1[n] + CHANGE_KONVA, this._setTextData);
    1432514342          }
     
    1432714344      }
    1432814345      _sceneFunc(context) {
    14329           var textArr = this.textArr, textArrLen = textArr.length;
     14346          const textArr = this.textArr, textArrLen = textArr.length;
    1433014347          if (!this.text()) {
    1433114348              return;
    1433214349          }
    14333           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;
     14350          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;
    1433414351          direction = direction === INHERIT ? context.direction : direction;
    14335           var translateY = lineHeightPx / 2;
    14336           var baseline = MIDDLE;
     14352          let translateY = lineHeightPx / 2;
     14353          let baseline = MIDDLE;
    1433714354          if (Konva$2._fixTextRendering) {
    14338               var metrics = this.measureSize('M'); // Use a sample character to get the ascent
     14355              const metrics = this.measureSize('M'); // Use a sample character to get the ascent
    1433914356              baseline = 'alphabetic';
    1434014357              translateY =
     
    1437414391                  context.save();
    1437514392                  context.beginPath();
    14376                   let yOffset = Konva$2._fixTextRendering
     14393                  const yOffset = Konva$2._fixTextRendering
    1437714394                      ? Math.round(fontSize / 4)
    1437814395                      : Math.round(fontSize / 2);
     
    1439614413                  context.save();
    1439714414                  context.beginPath();
    14398                   let yOffset = Konva$2._fixTextRendering ? -Math.round(fontSize / 4) : 0;
     14415                  const yOffset = Konva$2._fixTextRendering ? -Math.round(fontSize / 4) : 0;
    1439914416                  context.moveTo(lineTranslateX, translateY + lineTranslateY + yOffset);
    1440014417                  spacesNumber = text.split(' ').length - 1;
     
    1441714434                  //   var words = text.split(' ');
    1441814435                  spacesNumber = text.split(' ').length - 1;
    14419                   var array = stringToArray(text);
    14420                   for (var li = 0; li < array.length; li++) {
    14421                       var letter = array[li];
     14436                  const array = stringToArray(text);
     14437                  for (let li = 0; li < array.length; li++) {
     14438                      const letter = array[li];
    1442214439                      // skip justify for the last line
    1442314440                      if (letter === ' ' && !lastLine && align === JUSTIFY) {
     
    1445114468      }
    1445214469      _hitFunc(context) {
    14453           var width = this.getWidth(), height = this.getHeight();
     14470          const width = this.getWidth(), height = this.getHeight();
    1445414471          context.beginPath();
    1445514472          context.rect(0, 0, width, height);
     
    1445814475      }
    1445914476      setText(text) {
    14460           var str = Util._isString(text)
     14477          const str = Util._isString(text)
    1446114478              ? text
    1446214479              : text === null || text === undefined
     
    1446714484      }
    1446814485      getWidth() {
    14469           var isAuto = this.attrs.width === AUTO || this.attrs.width === undefined;
     14486          const isAuto = this.attrs.width === AUTO || this.attrs.width === undefined;
    1447014487          return isAuto ? this.getTextWidth() + this.padding() * 2 : this.attrs.width;
    1447114488      }
    1447214489      getHeight() {
    14473           var isAuto = this.attrs.height === AUTO || this.attrs.height === undefined;
     14490          const isAuto = this.attrs.height === AUTO || this.attrs.height === undefined;
    1447414491          return isAuto
    1447514492              ? this.fontSize() * this.textArr.length * this.lineHeight() +
     
    1449514512       * @method
    1449614513       * @name Konva.Text#measureSize
    14497        * @param {String} [text] text to measure
    14498        * @returns {Object} { width , height} of measured text
     14514       * @param {String} text text to measure
     14515       * @returns {Object} { width , height } of measured text
    1449914516       */
    1450014517      measureSize(text) {
    1450114518          var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
    14502           var _context = getDummyContext(), fontSize = this.fontSize(), metrics;
     14519          let _context = getDummyContext(), fontSize = this.fontSize(), metrics;
    1450314520          _context.save();
    1450414521          _context.font = this._getContextFont();
     
    1453814555              line = line.trim();
    1453914556          }
    14540           var width = this._getTextWidth(line);
     14557          const width = this._getTextWidth(line);
    1454114558          return this.textArr.push({
    1454214559              text: line,
     
    1454614563      }
    1454714564      _getTextWidth(text) {
    14548           var letterSpacing = this.letterSpacing();
    14549           var length = text.length;
     14565          const letterSpacing = this.letterSpacing();
     14566          const length = text.length;
    1455014567          return (getDummyContext().measureText(text).width +
    1455114568              (length ? letterSpacing * (length - 1) : 0));
    1455214569      }
    1455314570      _setTextData() {
    14554           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(),
     14571          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(),
    1455514572          // align = this.align(),
    1455614573          shouldWrap = wrap !== NONE, wrapAtWord = wrap !== CHAR && shouldWrap, shouldAddEllipsis = this.ellipsis();
    1455714574          this.textArr = [];
    1455814575          getDummyContext().font = this._getContextFont();
    14559           var additionalWidth = shouldAddEllipsis ? this._getTextWidth(ELLIPSIS) : 0;
    14560           for (var i = 0, max = lines.length; i < max; ++i) {
    14561               var line = lines[i];
    14562               var lineWidth = this._getTextWidth(line);
     14576          const additionalWidth = shouldAddEllipsis ? this._getTextWidth(ELLIPSIS) : 0;
     14577          for (let i = 0, max = lines.length; i < max; ++i) {
     14578              let line = lines[i];
     14579              let lineWidth = this._getTextWidth(line);
    1456314580              if (fixedWidth && lineWidth > maxWidth) {
    1456414581                  /*
     
    1457114588                       * that would fit in the specified width
    1457214589                       */
    14573                       var low = 0, high = line.length, match = '', matchWidth = 0;
     14590                      let low = 0, high = line.length, match = '', matchWidth = 0;
    1457414591                      while (low < high) {
    14575                           var mid = (low + high) >>> 1, substr = line.slice(0, mid + 1), substrWidth = this._getTextWidth(substr) + additionalWidth;
     14592                          const mid = (low + high) >>> 1, substr = line.slice(0, mid + 1), substrWidth = this._getTextWidth(substr) + additionalWidth;
    1457614593                          if (substrWidth <= maxWidth) {
    1457714594                              low = mid + 1;
     
    1459314610                              // try to find a space or dash where wrapping could be done
    1459414611                              var wrapIndex;
    14595                               var nextChar = line[match.length];
    14596                               var nextIsSpaceOrDash = nextChar === SPACE || nextChar === DASH;
     14612                              const nextChar = line[match.length];
     14613                              const nextIsSpaceOrDash = nextChar === SPACE || nextChar === DASH;
    1459714614                              if (nextIsSpaceOrDash && matchWidth <= maxWidth) {
    1459814615                                  wrapIndex = match.length;
     
    1461614633                          textWidth = Math.max(textWidth, matchWidth);
    1461714634                          currentHeightPx += lineHeightPx;
    14618                           var shouldHandleEllipsis = this._shouldHandleEllipsis(currentHeightPx);
     14635                          const shouldHandleEllipsis = this._shouldHandleEllipsis(currentHeightPx);
    1461914636                          if (shouldHandleEllipsis) {
    1462014637                              this._tryToAddEllipsisToLastLine();
     
    1467714694       */
    1467814695      _shouldHandleEllipsis(currentHeightPx) {
    14679           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;
     14696          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;
    1468014697          return (!shouldWrap ||
    1468114698              (fixedHeight && currentHeightPx + lineHeightPx > maxHeightPx));
    1468214699      }
    1468314700      _tryToAddEllipsisToLastLine() {
    14684           var width = this.attrs.width, fixedWidth = width !== AUTO && width !== undefined, padding = this.padding(), maxWidth = width - padding * 2, shouldAddEllipsis = this.ellipsis();
    14685           var lastLine = this.textArr[this.textArr.length - 1];
     14701          const width = this.attrs.width, fixedWidth = width !== AUTO && width !== undefined, padding = this.padding(), maxWidth = width - padding * 2, shouldAddEllipsis = this.ellipsis();
     14702          const lastLine = this.textArr[this.textArr.length - 1];
    1468614703          if (!lastLine || !shouldAddEllipsis) {
    1468714704              return;
    1468814705          }
    1468914706          if (fixedWidth) {
    14690               var haveSpace = this._getTextWidth(lastLine.text + ELLIPSIS) < maxWidth;
     14707              const haveSpace = this._getTextWidth(lastLine.text + ELLIPSIS) < maxWidth;
    1469114708              if (!haveSpace) {
    1469214709                  lastLine.text = lastLine.text.slice(0, lastLine.text.length - 3);
     
    1496214979  Factory.addGetterSetter(Text, 'textDecoration', '');
    1496314980
    14964   var EMPTY_STRING = '', NORMAL = 'normal';
     14981  const EMPTY_STRING = '', NORMAL = 'normal';
    1496514982  function _fillFunc(context) {
    1496614983      context.fillText(this.partialText, 0, 0);
     
    1512415141          context.setAttr('textAlign', 'left');
    1512515142          context.save();
    15126           var textDecoration = this.textDecoration();
    15127           var fill = this.fill();
    15128           var fontSize = this.fontSize();
    15129           var glyphInfo = this.glyphInfo;
     15143          const textDecoration = this.textDecoration();
     15144          const fill = this.fill();
     15145          const fontSize = this.fontSize();
     15146          const glyphInfo = this.glyphInfo;
    1513015147          if (textDecoration === 'underline') {
    1513115148              context.beginPath();
    1513215149          }
    15133           for (var i = 0; i < glyphInfo.length; i++) {
     15150          for (let i = 0; i < glyphInfo.length; i++) {
    1513415151              context.save();
    15135               var p0 = glyphInfo[i].p0;
     15152              const p0 = glyphInfo[i].p0;
    1513615153              context.translate(p0.x, p0.y);
    1513715154              context.rotate(glyphInfo[i].rotation);
     
    1516315180      _hitFunc(context) {
    1516415181          context.beginPath();
    15165           var glyphInfo = this.glyphInfo;
     15182          const glyphInfo = this.glyphInfo;
    1516615183          if (glyphInfo.length >= 1) {
    15167               var p0 = glyphInfo[0].p0;
     15184              const p0 = glyphInfo[0].p0;
    1516815185              context.moveTo(p0.x, p0.y);
    1516915186          }
    15170           for (var i = 0; i < glyphInfo.length; i++) {
    15171               var p1 = glyphInfo[i].p1;
     15187          for (let i = 0; i < glyphInfo.length; i++) {
     15188              const p1 = glyphInfo[i].p1;
    1517215189              context.lineTo(p1.x, p1.y);
    1517315190          }
     
    1519515212      }
    1519615213      _getTextSize(text) {
    15197           var dummyCanvas = this.dummyCanvas;
    15198           var _context = dummyCanvas.getContext('2d');
     15214          const dummyCanvas = this.dummyCanvas;
     15215          const _context = dummyCanvas.getContext('2d');
    1519915216          _context.save();
    1520015217          _context.font = this._getContextFont();
    15201           var metrics = _context.measureText(text);
     15218          const metrics = _context.measureText(text);
    1520215219          _context.restore();
    1520315220          return {
     
    1523315250          // 4. Add glyph width to the offsetToGlyph and repeat
    1523415251          let offsetToGlyph = offset;
    15235           for (var i = 0; i < charArr.length; i++) {
     15252          for (let i = 0; i < charArr.length; i++) {
    1523615253              const charStartPoint = this._getPointAtLength(offsetToGlyph);
    1523715254              if (!charStartPoint)
     
    1528115298              };
    1528215299          }
    15283           var points = [];
     15300          const points = [];
    1528415301          this.glyphInfo.forEach(function (info) {
    1528515302              points.push(info.p0.x);
     
    1528815305              points.push(info.p1.y);
    1528915306          });
    15290           var minX = points[0] || 0;
    15291           var maxX = points[0] || 0;
    15292           var minY = points[1] || 0;
    15293           var maxY = points[1] || 0;
    15294           var x, y;
    15295           for (var i = 0; i < points.length / 2; i++) {
     15307          let minX = points[0] || 0;
     15308          let maxX = points[0] || 0;
     15309          let minY = points[1] || 0;
     15310          let maxY = points[1] || 0;
     15311          let x, y;
     15312          for (let i = 0; i < points.length / 2; i++) {
    1529615313              x = points[i * 2];
    1529715314              y = points[i * 2 + 1];
     
    1530115318              maxY = Math.max(maxY, y);
    1530215319          }
    15303           var fontSize = this.fontSize();
     15320          const fontSize = this.fontSize();
    1530415321          return {
    1530515322              x: minX - fontSize / 2,
     
    1548415501  Factory.addGetterSetter(TextPath, 'kerningFunc', null);
    1548515502
    15486   var EVENTS_NAME = 'tr-konva';
    15487   var ATTR_CHANGE_LIST = [
     15503  const EVENTS_NAME = 'tr-konva';
     15504  const ATTR_CHANGE_LIST = [
    1548815505      'resizeEnabledChange',
    1548915506      'rotateAnchorOffsetChange',
     
    1550415521      .map((e) => e + `.${EVENTS_NAME}`)
    1550515522      .join(' ');
    15506   var NODES_RECT = 'nodesRect';
    15507   var TRANSFORM_CHANGE_STR = [
     15523  const NODES_RECT = 'nodesRect';
     15524  const TRANSFORM_CHANGE_STR = [
    1550815525      'widthChange',
    1550915526      'heightChange',
     
    1551815535      'strokeWidthChange',
    1551915536  ];
    15520   var ANGLES = {
     15537  const ANGLES = {
    1552115538      'top-left': -45,
    1552215539      'top-center': 0,
     
    1553415551      }
    1553515552      rad += Util.degToRad(ANGLES[anchorName] || 0);
    15536       var angle = ((Util.radToDeg(rad) % 360) + 360) % 360;
     15553      const angle = ((Util.radToDeg(rad) % 360) + 360) % 360;
    1553715554      if (Util._inRange(angle, 315 + 22.5, 360) || Util._inRange(angle, 0, 22.5)) {
    1553815555          // TOP
     
    1557315590      }
    1557415591  }
    15575   var ANCHORS_NAMES = [
     15592  const ANCHORS_NAMES = [
    1557615593      'top-left',
    1557715594      'top-center',
     
    1558315600      'bottom-right',
    1558415601  ];
    15585   var MAX_SAFE_INTEGER = 100000000;
     15602  const MAX_SAFE_INTEGER = 100000000;
    1558615603  function getCenter(shape) {
    1558715604      return {
     
    1574515762          // we may need it if we set node in initial props
    1574615763          // so elements are not defined yet
    15747           var elementsCreated = !!this.findOne('.top-left');
     15764          const elementsCreated = !!this.findOne('.top-left');
    1574815765          if (elementsCreated) {
    1574915766              this.update();
     
    1584015857      // return absolute rotated bounding rectangle
    1584115858      __getNodeShape(node, rot = this.rotation(), relative) {
    15842           var rect = node.getClientRect({
     15859          const rect = node.getClientRect({
    1584315860              skipTransform: true,
    1584415861              skipShadow: true,
    1584515862              skipStroke: this.ignoreStroke(),
    1584615863          });
    15847           var absScale = node.getAbsoluteScale(relative);
    15848           var absPos = node.getAbsolutePosition(relative);
    15849           var dx = rect.x * absScale.x - node.offsetX() * absScale.x;
    15850           var dy = rect.y * absScale.y - node.offsetY() * absScale.y;
     15864          const absScale = node.getAbsoluteScale(relative);
     15865          const absPos = node.getAbsolutePosition(relative);
     15866          const dx = rect.x * absScale.x - node.offsetX() * absScale.x;
     15867          const dy = rect.y * absScale.y - node.offsetY() * absScale.y;
    1585115868          const rotation = (Konva$2.getAngle(node.getAbsoluteRotation()) + Math.PI * 2) %
    1585215869              (Math.PI * 2);
     
    1586515882      // returns box + rotation of all shapes
    1586615883      __getNodeRect() {
    15867           var node = this.getNode();
     15884          const node = this.getNode();
    1586815885          if (!node) {
    1586915886              return {
     
    1588215899                  skipStroke: this.ignoreStroke(),
    1588315900              });
    15884               var points = [
     15901              const points = [
    1588515902                  { x: box.x, y: box.y },
    1588615903                  { x: box.x + box.width, y: box.y },
     
    1588815905                  { x: box.x, y: box.y + box.height },
    1588915906              ];
    15890               var trans = node.getAbsoluteTransform();
     15907              const trans = node.getAbsoluteTransform();
    1589115908              points.forEach(function (point) {
    15892                   var transformed = trans.point(point);
     15909                  const transformed = trans.point(point);
    1589315910                  totalPoints.push(transformed);
    1589415911              });
     
    1589615913          const tr = new Transform();
    1589715914          tr.rotate(-Konva$2.getAngle(this.rotation()));
    15898           var minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
     15915          let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
    1589915916          totalPoints.forEach(function (point) {
    15900               var transformed = tr.point(point);
     15917              const transformed = tr.point(point);
    1590115918              if (minX === undefined) {
    1590215919                  minX = maxX = transformed.x;
     
    1594615963      }
    1594715964      _createAnchor(name) {
    15948           var anchor = new Rect({
     15965          const anchor = new Rect({
    1594915966              stroke: 'rgb(0, 161, 255)',
    1595015967              fill: 'white',
     
    1595715974              hitStrokeWidth: TOUCH_DEVICE ? 10 : 'auto',
    1595815975          });
    15959           var self = this;
     15976          const self = this;
    1596015977          anchor.on('mousedown touchstart', function (e) {
    1596115978              self._handleMouseDown(e);
     
    1597015987          // add hover styling
    1597115988          anchor.on('mouseenter', () => {
    15972               var rad = Konva$2.getAngle(this.rotation());
    15973               var rotateCursor = this.rotateAnchorCursor();
    15974               var cursor = getCursor(name, rad, rotateCursor);
     15989              const rad = Konva$2.getAngle(this.rotation());
     15990              const rotateCursor = this.rotateAnchorCursor();
     15991              const cursor = getCursor(name, rad, rotateCursor);
    1597515992              anchor.getStage().content &&
    1597615993                  (anchor.getStage().content.style.cursor = cursor);
     
    1598516002      }
    1598616003      _createBack() {
    15987           var back = new Shape({
     16004          const back = new Shape({
    1598816005              name: 'back',
    1598916006              width: 0,
     
    1599116008              draggable: true,
    1599216009              sceneFunc(ctx, shape) {
    15993                   var tr = shape.getParent();
    15994                   var padding = tr.padding();
     16010                  const tr = shape.getParent();
     16011                  const padding = tr.padding();
    1599516012                  ctx.beginPath();
    1599616013                  ctx.rect(-padding, -padding, shape.width() + padding * 2, shape.height() + padding * 2);
     
    1600516022                      return;
    1600616023                  }
    16007                   var padding = this.padding();
     16024                  const padding = this.padding();
    1600816025                  ctx.beginPath();
    1600916026                  ctx.rect(-padding, -padding, shape.width() + padding * 2, shape.height() + padding * 2);
     
    1603716054          }
    1603816055          this._movingAnchorName = e.target.name().split(' ')[0];
    16039           var attrs = this._getNodeRect();
    16040           var width = attrs.width;
    16041           var height = attrs.height;
    16042           var hypotenuse = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));
     16056          const attrs = this._getNodeRect();
     16057          const width = attrs.width;
     16058          const height = attrs.height;
     16059          const hypotenuse = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));
    1604316060          this.sin = Math.abs(height / hypotenuse);
    1604416061          this.cos = Math.abs(width / hypotenuse);
     
    1605016067          }
    1605116068          this._transforming = true;
    16052           var ap = e.target.getAbsolutePosition();
    16053           var pos = e.target.getStage().getPointerPosition();
     16069          const ap = e.target.getAbsolutePosition();
     16070          const pos = e.target.getStage().getPointerPosition();
    1605416071          this._anchorDragOffset = {
    1605516072              x: pos.x - ap.x,
     
    1606316080      }
    1606416081      _handleMouseMove(e) {
    16065           var x, y, newHypotenuse;
    16066           var anchorNode = this.findOne('.' + this._movingAnchorName);
    16067           var stage = anchorNode.getStage();
     16082          let x, y, newHypotenuse;
     16083          const anchorNode = this.findOne('.' + this._movingAnchorName);
     16084          const stage = anchorNode.getStage();
    1606816085          stage.setPointersPositions(e);
    1606916086          const pp = stage.getPointerPosition();
     
    1608416101          // rotater is working very differently, so do it first
    1608516102          if (this._movingAnchorName === 'rotater') {
    16086               var attrs = this._getNodeRect();
     16103              const attrs = this._getNodeRect();
    1608716104              x = anchorNode.x() - attrs.width / 2;
    1608816105              y = -anchorNode.y() + attrs.height / 2;
     
    1609216109                  delta -= Math.PI;
    1609316110              }
    16094               var oldRotation = Konva$2.getAngle(this.rotation());
     16111              const oldRotation = Konva$2.getAngle(this.rotation());
    1609516112              const newRotation = oldRotation + delta;
    1609616113              const tol = Konva$2.getAngle(this.rotationSnapTolerance());
     
    1610116118              return;
    1610216119          }
    16103           var shiftBehavior = this.shiftBehavior();
    16104           var keepProportion;
     16120          const shiftBehavior = this.shiftBehavior();
     16121          let keepProportion;
    1610516122          if (shiftBehavior === 'inverted') {
    1610616123              keepProportion = this.keepRatio() && !e.shiftKey;
     
    1622116238          var centeredScaling = this.centeredScaling() || e.altKey;
    1622216239          if (centeredScaling) {
    16223               var topLeft = this.findOne('.top-left');
    16224               var bottomRight = this.findOne('.bottom-right');
    16225               var topOffsetX = topLeft.x();
    16226               var topOffsetY = topLeft.y();
    16227               var bottomOffsetX = this.getWidth() - bottomRight.x();
    16228               var bottomOffsetY = this.getHeight() - bottomRight.y();
     16240              const topLeft = this.findOne('.top-left');
     16241              const bottomRight = this.findOne('.bottom-right');
     16242              const topOffsetX = topLeft.x();
     16243              const topOffsetY = topLeft.y();
     16244              const bottomOffsetX = this.getWidth() - bottomRight.x();
     16245              const bottomOffsetY = this.getHeight() - bottomRight.y();
    1622916246              bottomRight.move({
    1623016247                  x: -topOffsetX,
     
    1623616253              });
    1623716254          }
    16238           var absPos = this.findOne('.top-left').getAbsolutePosition();
     16255          const absPos = this.findOne('.top-left').getAbsolutePosition();
    1623916256          x = absPos.x;
    1624016257          y = absPos.y;
    16241           var width = this.findOne('.bottom-right').x() - this.findOne('.top-left').x();
    16242           var height = this.findOne('.bottom-right').y() - this.findOne('.top-left').y();
     16258          const width = this.findOne('.bottom-right').x() - this.findOne('.top-left').x();
     16259          const height = this.findOne('.bottom-right').y() - this.findOne('.top-left').y();
    1624316260          this._fitNodesInto({
    1624416261              x: x,
     
    1626516282                  window.removeEventListener('touchend', this._handleMouseUp, true);
    1626616283              }
    16267               var node = this.getNode();
     16284              const node = this.getNode();
    1626816285              activeTransformersCount--;
    1626916286              this._fire('transformend', { evt: e, target: node });
     
    1628216299      }
    1628316300      _fitNodesInto(newAttrs, evt) {
    16284           var oldAttrs = this._getNodeRect();
     16301          const oldAttrs = this._getNodeRect();
    1628516302          const minSize = 1;
    1628616303          if (Util._inRange(newAttrs.width, -this.padding() * 2 - minSize, minSize)) {
     
    1629216309              return;
    1629316310          }
    16294           var t = new Transform();
     16311          const t = new Transform();
    1629516312          t.rotate(Konva$2.getAngle(this.rotation()));
    1629616313          if (this._movingAnchorName &&
     
    1643216449      update() {
    1643316450          var _a;
    16434           var attrs = this._getNodeRect();
     16451          const attrs = this._getNodeRect();
    1643516452          this.rotation(Util._getRotation(attrs.rotation));
    16436           var width = attrs.width;
    16437           var height = attrs.height;
    16438           var enabledAnchors = this.enabledAnchors();
    16439           var resizeEnabled = this.resizeEnabled();
    16440           var padding = this.padding();
    16441           var anchorSize = this.anchorSize();
     16453          const width = attrs.width;
     16454          const height = attrs.height;
     16455          const enabledAnchors = this.enabledAnchors();
     16456          const resizeEnabled = this.resizeEnabled();
     16457          const padding = this.padding();
     16458          const anchorSize = this.anchorSize();
    1644216459          const anchors = this.find('._anchor');
    1644316460          anchors.forEach((node) => {
     
    1654616563          if (this._transforming) {
    1654716564              this._removeEvents();
    16548               var anchorNode = this.findOne('.' + this._movingAnchorName);
     16565              const anchorNode = this.findOne('.' + this._movingAnchorName);
    1654916566              if (anchorNode) {
    1655016567                  anchorNode.stopDrag();
     
    1656816585      // overwrite clone to NOT use method from Container
    1656916586      clone(obj) {
    16570           var node = Node.prototype.clone.call(this, obj);
     16587          const node = Node.prototype.clone.call(this, obj);
    1657116588          return node;
    1657216589      }
     
    1726617283      this.next = null;
    1726717284  }
    17268   var mul_table = [
     17285  const mul_table = [
    1726917286      512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292,
    1727017287      512, 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292,
     
    1728517302      289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259,
    1728617303  ];
    17287   var shg_table = [
     17304  const shg_table = [
    1728817305      9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17,
    1728917306      17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19,
     
    1730217319  ];
    1730317320  function filterGaussBlurRGBA(imageData, radius) {
    17304       var pixels = imageData.data, width = imageData.width, height = imageData.height;
    17305       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;
    17306       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];
     17321      const pixels = imageData.data, width = imageData.width, height = imageData.height;
     17322      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;
     17323      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];
    1730717324      for (i = 1; i < div; i++) {
    1730817325          stack = stack.next = new BlurStack();
     
    1749517512   */
    1749617513  const Blur = function Blur(imageData) {
    17497       var radius = Math.round(this.blurRadius());
     17514      const radius = Math.round(this.blurRadius());
    1749817515      if (radius > 0) {
    1749917516          filterGaussBlurRGBA(imageData, radius);
     
    1752017537   */
    1752117538  const Brighten = function (imageData) {
    17522       var brightness = this.brightness() * 255, data = imageData.data, len = data.length, i;
     17539      let brightness = this.brightness() * 255, data = imageData.data, len = data.length, i;
    1752317540      for (i = 0; i < len; i += 4) {
    1752417541          // red
     
    1755217569   */
    1755317570  const Contrast = function (imageData) {
    17554       var adjust = Math.pow((this.contrast() + 100) / 100, 2);
    17555       var data = imageData.data, nPixels = data.length, red = 150, green = 150, blue = 150, i;
     17571      const adjust = Math.pow((this.contrast() + 100) / 100, 2);
     17572      let data = imageData.data, nPixels = data.length, red = 150, green = 150, blue = 150, i;
    1755617573      for (i = 0; i < nPixels; i += 4) {
    1755717574          red = data[i];
     
    1761517632      // a max value of greyLevel yields a white emboss, and the min value yields a black
    1761617633      // emboss.  Therefore, I changed greyLevel to whiteLevel
    17617       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;
     17634      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;
    1761817635      switch (direction) {
    1761917636          case 'top-left':
     
    1765317670      }
    1765417671      do {
    17655           var offsetY = (y - 1) * w4;
    17656           var otherY = dirY;
     17672          const offsetY = (y - 1) * w4;
     17673          let otherY = dirY;
    1765717674          if (y + otherY < 1) {
    1765817675              otherY = 0;
     
    1766117678              otherY = 0;
    1766217679          }
    17663           var offsetYOther = (y - 1 + otherY) * w * 4;
    17664           var x = w;
     17680          const offsetYOther = (y - 1 + otherY) * w * 4;
     17681          let x = w;
    1766517682          do {
    17666               var offset = offsetY + (x - 1) * 4;
    17667               var otherX = dirX;
     17683              const offset = offsetY + (x - 1) * 4;
     17684              let otherX = dirX;
    1766817685              if (x + otherX < 1) {
    1766917686                  otherX = 0;
     
    1767217689                  otherX = 0;
    1767317690              }
    17674               var offsetOther = offsetYOther + (x - 1 + otherX) * 4;
    17675               var dR = data[offset] - data[offsetOther];
    17676               var dG = data[offset + 1] - data[offsetOther + 1];
    17677               var dB = data[offset + 2] - data[offsetOther + 2];
    17678               var dif = dR;
    17679               var absDif = dif > 0 ? dif : -dif;
    17680               var absG = dG > 0 ? dG : -dG;
    17681               var absB = dB > 0 ? dB : -dB;
     17691              const offsetOther = offsetYOther + (x - 1 + otherX) * 4;
     17692              const dR = data[offset] - data[offsetOther];
     17693              const dG = data[offset + 1] - data[offsetOther + 1];
     17694              const dB = data[offset + 2] - data[offsetOther + 2];
     17695              let dif = dR;
     17696              const absDif = dif > 0 ? dif : -dif;
     17697              const absG = dG > 0 ? dG : -dG;
     17698              const absB = dB > 0 ? dB : -dB;
    1768217699              if (absG > absDif) {
    1768317700                  dif = dG;
     
    1768817705              dif *= strength;
    1768917706              if (blend) {
    17690                   var r = data[offset] + dif;
    17691                   var g = data[offset + 1] + dif;
    17692                   var b = data[offset + 2] + dif;
     17707                  const r = data[offset] + dif;
     17708                  const g = data[offset + 1] + dif;
     17709                  const b = data[offset + 2] + dif;
    1769317710                  data[offset] = r > 255 ? 255 : r < 0 ? 0 : r;
    1769417711                  data[offset + 1] = g > 255 ? 255 : g < 0 ? 0 : g;
     
    1769617713              }
    1769717714              else {
    17698                   var grey = greyLevel - dif;
     17715                  let grey = greyLevel - dif;
    1769917716                  if (grey < 0) {
    1770017717                      grey = 0;
     
    1774417761  function remap(fromValue, fromMin, fromMax, toMin, toMax) {
    1774517762      // Compute the range of the data
    17746       var fromRange = fromMax - fromMin, toRange = toMax - toMin, toValue;
     17763      let fromRange = fromMax - fromMin, toRange = toMax - toMin, toValue;
    1774717764      // If either range is 0, then the value can only be mapped to 1 value
    1774817765      if (fromRange === 0) {
     
    1777217789   */
    1777317790  const Enhance = function (imageData) {
    17774       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;
     17791      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;
    1777517792      // If we are not enhancing anything - don't do any computation
    17776       var enhanceAmount = this.enhance();
     17793      const enhanceAmount = this.enhance();
    1777717794      if (enhanceAmount === 0) {
    1777817795          return;
     
    1781817835          bMin = 0;
    1781917836      }
    17820       var rMid, rGoalMax, rGoalMin, gMid, gGoalMax, gGoalMin, bMid, bGoalMax, bGoalMin;
     17837      let rMid, rGoalMax, rGoalMin, gMid, gGoalMax, gGoalMin, bMid, bGoalMax, bGoalMin;
    1782117838      // If the enhancement is positive - stretch the histogram
    1782217839      if (enhanceAmount > 0) {
     
    1786717884   */
    1786817885  const Grayscale = function (imageData) {
    17869       var data = imageData.data, len = data.length, i, brightness;
     17886      let data = imageData.data, len = data.length, i, brightness;
    1787017887      for (i = 0; i < len; i += 4) {
    1787117888          brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2];
     
    1791417931   */
    1791517932  const HSL = function (imageData) {
    17916       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;
     17933      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;
    1791717934      // Basis for the technique used:
    1791817935      // http://beesbuzz.biz/code/hsv_color_transforms.php
     
    1792617943      //[ .299V-.300vsu+1.25vsw    .587V-.588vsu-1.05vsw    .114V+.886vsu-.203vsw ] [B]
    1792717944      // Precompute the values in the matrix:
    17928       var vsu = v * s * Math.cos((h * Math.PI) / 180), vsw = v * s * Math.sin((h * Math.PI) / 180);
     17945      const vsu = v * s * Math.cos((h * Math.PI) / 180), vsw = v * s * Math.sin((h * Math.PI) / 180);
    1792917946      // (result spot)(source spot)
    17930       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;
    17931       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;
    17932       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;
    17933       var r, g, b, a;
     17947      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;
     17948      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;
     17949      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;
     17950      let r, g, b, a;
    1793417951      for (i = 0; i < nPixels; i += 4) {
    1793517952          r = data[i + 0];
     
    1795617973   */
    1795717974  const HSV = function (imageData) {
    17958       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;
     17975      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;
    1795917976      // Basis for the technique used:
    1796017977      // http://beesbuzz.biz/code/hsv_color_transforms.php
     
    1796817985      //[ .299V-.300vsu+1.25vsw    .587V-.588vsu-1.05vsw    .114V+.886vsu-.203vsw ] [B]
    1796917986      // Precompute the values in the matrix:
    17970       var vsu = v * s * Math.cos((h * Math.PI) / 180), vsw = v * s * Math.sin((h * Math.PI) / 180);
     17987      const vsu = v * s * Math.cos((h * Math.PI) / 180), vsw = v * s * Math.sin((h * Math.PI) / 180);
    1797117988      // (result spot)(source spot)
    17972       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;
    17973       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;
    17974       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;
    17975       var r, g, b, a;
    17976       for (i = 0; i < nPixels; i += 4) {
     17989      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;
     17990      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;
     17991      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;
     17992      let r, g, b, a;
     17993      for (let i = 0; i < nPixels; i += 4) {
    1797717994          r = data[i + 0];
    1797817995          g = data[i + 1];
     
    1802018037   */
    1802118038  const Invert = function (imageData) {
    18022       var data = imageData.data, len = data.length, i;
     18039      let data = imageData.data, len = data.length, i;
    1802318040      for (i = 0; i < len; i += 4) {
    1802418041          // red
     
    1804618063   *  default is in the middle
    1804718064   */
    18048   var ToPolar = function (src, dst, opt) {
    18049       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;
     18065  const ToPolar = function (src, dst, opt) {
     18066      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;
    1805018067      // Find the largest radius
    18051       var rad, rMax = Math.sqrt(xMid * xMid + yMid * yMid);
     18068      let rad, rMax = Math.sqrt(xMid * xMid + yMid * yMid);
    1805218069      x = xSize - xMid;
    1805318070      y = ySize - yMid;
     
    1805518072      rMax = rad > rMax ? rad : rMax;
    1805618073      // We'll be uisng y as the radius, and x as the angle (theta=t)
    18057       var rSize = ySize, tSize = xSize, radius, theta;
     18074      let rSize = ySize, tSize = xSize, radius, theta;
    1805818075      // We want to cover all angles (0-360) and we need to convert to
    1805918076      // radians (*PI/180)
    18060       var conversion = ((360 / tSize) * Math.PI) / 180, sin, cos;
     18077      let conversion = ((360 / tSize) * Math.PI) / 180, sin, cos;
    1806118078      // var x1, x2, x1i, x2i, y1, y2, y1i, y2i, scale;
    1806218079      for (theta = 0; theta < tSize; theta += 1) {
     
    1809718114   *  0 is no rotation, 360 degrees is a full rotation
    1809818115   */
    18099   var FromPolar = function (src, dst, opt) {
    18100       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;
     18116  const FromPolar = function (src, dst, opt) {
     18117      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;
    1810118118      // Find the largest radius
    18102       var rad, rMax = Math.sqrt(xMid * xMid + yMid * yMid);
     18119      let rad, rMax = Math.sqrt(xMid * xMid + yMid * yMid);
    1810318120      x = xSize - xMid;
    1810418121      y = ySize - yMid;
     
    1810618123      rMax = rad > rMax ? rad : rMax;
    1810718124      // We'll be uisng x as the radius, and y as the angle (theta=t)
    18108       var rSize = ySize, tSize = xSize, radius, theta, phaseShift = 0;
     18125      let rSize = ySize, tSize = xSize, radius, theta, phaseShift = 0;
    1810918126      // We need to convert to degrees and we need to make sure
    1811018127      // it's between (0-360)
    1811118128      // var conversion = tSize/360*180/Math.PI;
    1811218129      //var conversion = tSize/360*180/Math.PI;
    18113       var x1, y1;
     18130      let x1, y1;
    1811418131      for (x = 0; x < xSize; x += 1) {
    1811518132          for (y = 0; y < ySize; y += 1) {
     
    1815118168   */
    1815218169  const Kaleidoscope = function (imageData) {
    18153       var xSize = imageData.width, ySize = imageData.height;
    18154       var x, y, xoff, i, r, g, b, a, srcPos, dstPos;
    18155       var power = Math.round(this.kaleidoscopePower());
    18156       var angle = Math.round(this.kaleidoscopeAngle());
    18157       var offset = Math.floor((xSize * (angle % 360)) / 360);
     18170      const xSize = imageData.width, ySize = imageData.height;
     18171      let x, y, xoff, i, r, g, b, a, srcPos, dstPos;
     18172      let power = Math.round(this.kaleidoscopePower());
     18173      const angle = Math.round(this.kaleidoscopeAngle());
     18174      const offset = Math.floor((xSize * (angle % 360)) / 360);
    1815818175      if (power < 1) {
    1815918176          return;
    1816018177      }
    1816118178      // Work with our shared buffer canvas
    18162       var tempCanvas = Util.createCanvasElement();
     18179      const tempCanvas = Util.createCanvasElement();
    1816318180      tempCanvas.width = xSize;
    1816418181      tempCanvas.height = ySize;
    18165       var scratchData = tempCanvas
     18182      const scratchData = tempCanvas
    1816618183          .getContext('2d')
    1816718184          .getImageData(0, 0, xSize, ySize);
     
    1817418191      // Determine how big each section will be, if it's too small
    1817518192      // make it bigger
    18176       var minSectionSize = xSize / Math.pow(2, power);
     18193      let minSectionSize = xSize / Math.pow(2, power);
    1817718194      while (minSectionSize <= 8) {
    1817818195          minSectionSize = minSectionSize * 2;
     
    1818018197      }
    1818118198      minSectionSize = Math.ceil(minSectionSize);
    18182       var sectionSize = minSectionSize;
     18199      let sectionSize = minSectionSize;
    1818318200      // Copy the offset region to 0
    1818418201      // Depending on the size of filter and location of the offset we may need
    1818518202      // to copy the section backwards to prevent it from rewriting itself
    18186       var xStart = 0, xEnd = sectionSize, xDelta = 1;
     18203      let xStart = 0, xEnd = sectionSize, xDelta = 1;
    1818718204      if (offset + minSectionSize > xSize) {
    1818818205          xStart = sectionSize;
     
    1824518262
    1824618263  function pixelAt(idata, x, y) {
    18247       var idx = (y * idata.width + x) * 4;
    18248       var d = [];
     18264      let idx = (y * idata.width + x) * 4;
     18265      const d = [];
    1824918266      d.push(idata.data[idx++], idata.data[idx++], idata.data[idx++], idata.data[idx++]);
    1825018267      return d;
     
    1825618273  }
    1825718274  function rgbMean(pTab) {
    18258       var m = [0, 0, 0];
    18259       for (var i = 0; i < pTab.length; i++) {
     18275      const m = [0, 0, 0];
     18276      for (let i = 0; i < pTab.length; i++) {
    1826018277          m[0] += pTab[i][0];
    1826118278          m[1] += pTab[i][1];
     
    1826818285  }
    1826918286  function backgroundMask(idata, threshold) {
    18270       var rgbv_no = pixelAt(idata, 0, 0);
    18271       var rgbv_ne = pixelAt(idata, idata.width - 1, 0);
    18272       var rgbv_so = pixelAt(idata, 0, idata.height - 1);
    18273       var rgbv_se = pixelAt(idata, idata.width - 1, idata.height - 1);
    18274       var thres = threshold || 10;
     18287      const rgbv_no = pixelAt(idata, 0, 0);
     18288      const rgbv_ne = pixelAt(idata, idata.width - 1, 0);
     18289      const rgbv_so = pixelAt(idata, 0, idata.height - 1);
     18290      const rgbv_se = pixelAt(idata, idata.width - 1, idata.height - 1);
     18291      const thres = threshold || 10;
    1827518292      if (rgbDistance(rgbv_no, rgbv_ne) < thres &&
    1827618293          rgbDistance(rgbv_ne, rgbv_se) < thres &&
     
    1827818295          rgbDistance(rgbv_so, rgbv_no) < thres) {
    1827918296          // Mean color
    18280           var mean = rgbMean([rgbv_ne, rgbv_no, rgbv_se, rgbv_so]);
     18297          const mean = rgbMean([rgbv_ne, rgbv_no, rgbv_se, rgbv_so]);
    1828118298          // Mask based on color distance
    18282           var mask = [];
    18283           for (var i = 0; i < idata.width * idata.height; i++) {
    18284               var d = rgbDistance(mean, [
     18299          const mask = [];
     18300          for (let i = 0; i < idata.width * idata.height; i++) {
     18301              const d = rgbDistance(mean, [
    1828518302                  idata.data[i * 4],
    1828618303                  idata.data[i * 4 + 1],
     
    1829318310  }
    1829418311  function applyMask(idata, mask) {
    18295       for (var i = 0; i < idata.width * idata.height; i++) {
     18312      for (let i = 0; i < idata.width * idata.height; i++) {
    1829618313          idata.data[4 * i + 3] = mask[i];
    1829718314      }
    1829818315  }
    1829918316  function erodeMask(mask, sw, sh) {
    18300       var weights = [1, 1, 1, 1, 0, 1, 1, 1, 1];
    18301       var side = Math.round(Math.sqrt(weights.length));
    18302       var halfSide = Math.floor(side / 2);
    18303       var maskResult = [];
    18304       for (var y = 0; y < sh; y++) {
    18305           for (var x = 0; x < sw; x++) {
    18306               var so = y * sw + x;
    18307               var a = 0;
    18308               for (var cy = 0; cy < side; cy++) {
    18309                   for (var cx = 0; cx < side; cx++) {
    18310                       var scy = y + cy - halfSide;
    18311                       var scx = x + cx - halfSide;
     18317      const weights = [1, 1, 1, 1, 0, 1, 1, 1, 1];
     18318      const side = Math.round(Math.sqrt(weights.length));
     18319      const halfSide = Math.floor(side / 2);
     18320      const maskResult = [];
     18321      for (let y = 0; y < sh; y++) {
     18322          for (let x = 0; x < sw; x++) {
     18323              const so = y * sw + x;
     18324              let a = 0;
     18325              for (let cy = 0; cy < side; cy++) {
     18326                  for (let cx = 0; cx < side; cx++) {
     18327                      const scy = y + cy - halfSide;
     18328                      const scx = x + cx - halfSide;
    1831218329                      if (scy >= 0 && scy < sh && scx >= 0 && scx < sw) {
    18313                           var srcOff = scy * sw + scx;
    18314                           var wt = weights[cy * side + cx];
     18330                          const srcOff = scy * sw + scx;
     18331                          const wt = weights[cy * side + cx];
    1831518332                          a += mask[srcOff] * wt;
    1831618333                      }
     
    1832318340  }
    1832418341  function dilateMask(mask, sw, sh) {
    18325       var weights = [1, 1, 1, 1, 1, 1, 1, 1, 1];
    18326       var side = Math.round(Math.sqrt(weights.length));
    18327       var halfSide = Math.floor(side / 2);
    18328       var maskResult = [];
    18329       for (var y = 0; y < sh; y++) {
    18330           for (var x = 0; x < sw; x++) {
    18331               var so = y * sw + x;
    18332               var a = 0;
    18333               for (var cy = 0; cy < side; cy++) {
    18334                   for (var cx = 0; cx < side; cx++) {
    18335                       var scy = y + cy - halfSide;
    18336                       var scx = x + cx - halfSide;
     18342      const weights = [1, 1, 1, 1, 1, 1, 1, 1, 1];
     18343      const side = Math.round(Math.sqrt(weights.length));
     18344      const halfSide = Math.floor(side / 2);
     18345      const maskResult = [];
     18346      for (let y = 0; y < sh; y++) {
     18347          for (let x = 0; x < sw; x++) {
     18348              const so = y * sw + x;
     18349              let a = 0;
     18350              for (let cy = 0; cy < side; cy++) {
     18351                  for (let cx = 0; cx < side; cx++) {
     18352                      const scy = y + cy - halfSide;
     18353                      const scx = x + cx - halfSide;
    1833718354                      if (scy >= 0 && scy < sh && scx >= 0 && scx < sw) {
    18338                           var srcOff = scy * sw + scx;
    18339                           var wt = weights[cy * side + cx];
     18355                          const srcOff = scy * sw + scx;
     18356                          const wt = weights[cy * side + cx];
    1834018357                          a += mask[srcOff] * wt;
    1834118358                      }
     
    1834818365  }
    1834918366  function smoothEdgeMask(mask, sw, sh) {
    18350       var weights = [1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9];
    18351       var side = Math.round(Math.sqrt(weights.length));
    18352       var halfSide = Math.floor(side / 2);
    18353       var maskResult = [];
    18354       for (var y = 0; y < sh; y++) {
    18355           for (var x = 0; x < sw; x++) {
    18356               var so = y * sw + x;
    18357               var a = 0;
    18358               for (var cy = 0; cy < side; cy++) {
    18359                   for (var cx = 0; cx < side; cx++) {
    18360                       var scy = y + cy - halfSide;
    18361                       var scx = x + cx - halfSide;
     18367      const weights = [1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9];
     18368      const side = Math.round(Math.sqrt(weights.length));
     18369      const halfSide = Math.floor(side / 2);
     18370      const maskResult = [];
     18371      for (let y = 0; y < sh; y++) {
     18372          for (let x = 0; x < sw; x++) {
     18373              const so = y * sw + x;
     18374              let a = 0;
     18375              for (let cy = 0; cy < side; cy++) {
     18376                  for (let cx = 0; cx < side; cx++) {
     18377                      const scy = y + cy - halfSide;
     18378                      const scx = x + cx - halfSide;
    1836218379                      if (scy >= 0 && scy < sh && scx >= 0 && scx < sw) {
    18363                           var srcOff = scy * sw + scx;
    18364                           var wt = weights[cy * side + cx];
     18380                          const srcOff = scy * sw + scx;
     18381                          const wt = weights[cy * side + cx];
    1836518382                          a += mask[srcOff] * wt;
    1836618383                      }
     
    1838518402  const Mask = function (imageData) {
    1838618403      // Detect pixels close to the background color
    18387       var threshold = this.threshold(), mask = backgroundMask(imageData, threshold);
     18404      let threshold = this.threshold(), mask = backgroundMask(imageData, threshold);
    1838818405      if (mask) {
    1838918406          // Erode
     
    1841318430   */
    1841418431  const Noise = function (imageData) {
    18415       var amount = this.noise() * 255, data = imageData.data, nPixels = data.length, half = amount / 2, i;
    18416       for (i = 0; i < nPixels; i += 4) {
     18432      const amount = this.noise() * 255, data = imageData.data, nPixels = data.length, half = amount / 2;
     18433      for (let i = 0; i < nPixels; i += 4) {
    1841718434          data[i + 0] += half - 2 * half * Math.random();
    1841818435          data[i + 1] += half - 2 * half * Math.random();
     
    1842918446   */
    1843018447
    18431   /*eslint-disable max-depth */
    1843218448  /**
    1843318449   * Pixelate Filter. Averages groups of pixels and redraws
     
    1844418460   */
    1844518461  const Pixelate = function (imageData) {
    18446       var pixelSize = Math.ceil(this.pixelSize()), width = imageData.width, height = imageData.height, x, y, i,
     18462      let pixelSize = Math.ceil(this.pixelSize()), width = imageData.width, height = imageData.height, x, y, i,
    1844718463      //pixelsPerBin = pixelSize * pixelSize,
    1844818464      red, green, blue, alpha, nBinsX = Math.ceil(width / pixelSize), nBinsY = Math.ceil(height / pixelSize), xBinStart, xBinEnd, yBinStart, yBinEnd, xBin, yBin, pixelsInBin, data = imageData.data;
     
    1853018546  const Posterize = function (imageData) {
    1853118547      // level must be between 1 and 255
    18532       var levels = Math.round(this.levels() * 254) + 1, data = imageData.data, len = data.length, scale = 255 / levels, i;
     18548      let levels = Math.round(this.levels() * 254) + 1, data = imageData.data, len = data.length, scale = 255 / levels, i;
    1853318549      for (i = 0; i < len; i += 1) {
    1853418550          data[i] = Math.floor(data[i] / scale) * scale;
     
    1855818574   */
    1855918575  const RGB = function (imageData) {
    18560       var data = imageData.data, nPixels = data.length, red = this.red(), green = this.green(), blue = this.blue(), i, brightness;
     18576      let data = imageData.data, nPixels = data.length, red = this.red(), green = this.green(), blue = this.blue(), i, brightness;
    1856118577      for (i = 0; i < nPixels; i += 4) {
    1856218578          brightness =
     
    1863318649   */
    1863418650  const RGBA = function (imageData) {
    18635       var data = imageData.data, nPixels = data.length, red = this.red(), green = this.green(), blue = this.blue(), alpha = this.alpha(), i, ia;
    18636       for (i = 0; i < nPixels; i += 4) {
    18637           ia = 1 - alpha;
     18651      const data = imageData.data, nPixels = data.length, red = this.red(), green = this.green(), blue = this.blue(), alpha = this.alpha();
     18652      for (let i = 0; i < nPixels; i += 4) {
     18653          const ia = 1 - alpha;
    1863818654          data[i] = red * alpha + data[i] * ia; // r
    1863918655          data[i + 1] = green * alpha + data[i + 1] * ia; // g
     
    1872218738   */
    1872318739  const Sepia = function (imageData) {
    18724       var data = imageData.data, nPixels = data.length, i, r, g, b;
     18740      let data = imageData.data, nPixels = data.length, i, r, g, b;
    1872518741      for (i = 0; i < nPixels; i += 4) {
    1872618742          r = data[i + 0];
     
    1874718763   */
    1874818764  const Solarize = function (imageData) {
    18749       var data = imageData.data, w = imageData.width, h = imageData.height, w4 = w * 4, y = h;
     18765      const data = imageData.data, w = imageData.width, h = imageData.height, w4 = w * 4;
     18766      let y = h;
    1875018767      do {
    18751           var offsetY = (y - 1) * w4;
    18752           var x = w;
     18768          const offsetY = (y - 1) * w4;
     18769          let x = w;
    1875318770          do {
    18754               var offset = offsetY + (x - 1) * 4;
    18755               var r = data[offset];
    18756               var g = data[offset + 1];
    18757               var b = data[offset + 2];
     18771              const offset = offsetY + (x - 1) * 4;
     18772              let r = data[offset];
     18773              let g = data[offset + 1];
     18774              let b = data[offset + 2];
    1875818775              if (r > 127) {
    1875918776                  r = 255 - r;
     
    1878718804   */
    1878818805  const Threshold = function (imageData) {
    18789       var level = this.threshold() * 255, data = imageData.data, len = data.length, i;
    18790       for (i = 0; i < len; i += 1) {
     18806      const level = this.threshold() * 255, data = imageData.data, len = data.length;
     18807      for (let i = 0; i < len; i += 1) {
    1879118808          data[i] = data[i] < level ? 0 : 255;
    1879218809      }
Note: See TracChangeset for help on using the changeset viewer.