diff --git a/.oxlintrc.json b/.oxlintrc.json
index f5adeba..c6b7d89 100644
--- a/.oxlintrc.json
+++ b/.oxlintrc.json
@@ -9,6 +9,7 @@
"src/components/InspiraUI/**",
"**/planispherewidget.js",
"**/konva.2.4.2.min.js",
+ "**/konva.2.min.js",
"**/waterfallwidget.js",
"**/colormapwidget.js"
]
diff --git a/src/pages/Page/canvas/Spectrogram/Spectrogram.md b/src/pages/Page/canvas/Spectrogram/Spectrogram.md
index 66eac40..cf1c71e 100644
--- a/src/pages/Page/canvas/Spectrogram/Spectrogram.md
+++ b/src/pages/Page/canvas/Spectrogram/Spectrogram.md
@@ -1,3 +1,9 @@
+```
+给我说一下 语谱图(spectrogram)是什么
+
+卫星领域有什么用处?
+```
+
在卫星领域,语谱图(spectrogram)也发挥着重要的作用,主要应用于以下方面:
- **信号分析与识别:**
diff --git a/src/pages/Page/canvas/html-page/Spectrogram.html b/src/pages/Page/canvas/html-page/Spectrogram.html
new file mode 100644
index 0000000..56f89ee
--- /dev/null
+++ b/src/pages/Page/canvas/html-page/Spectrogram.html
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+ Document
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/Page/canvas/html-page/colormapwidget.js b/src/pages/Page/canvas/html-page/colormapwidget.js
new file mode 100644
index 0000000..18b4b9c
--- /dev/null
+++ b/src/pages/Page/canvas/html-page/colormapwidget.js
@@ -0,0 +1,152 @@
+colormapwidget.names = ['default', 'blue', 'gray', 'cooledit'];
+
+colormapwidget.prototype.getGradientColors = function (name) {
+ if (name == 'blue') {
+ return ['#050525', '#000CFF', '#33FFFF', '#F9FFFF'];
+ } else if (name == 'gray') {
+ return ['#050525', '#FBFBFB'];
+ } else if (name == 'cooledit') {
+ return ['#010E19', '#720271', '#D7032C', '#FDBC5F', '#F8FFED'];
+ } else {
+ return ['#050525', '#0000CF', '#00FF20', '#EFFF00', '#FF007C'];
+ }
+};
+// 将hex表示方式转换为rgb表示方式(这里返回rgb数组模式)
+colormapwidget.prototype.colorRgb = function (sColor) {
+ var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
+ var sColor = sColor.toLowerCase();
+ if (sColor && reg.test(sColor)) {
+ if (sColor.length === 4) {
+ var sColorNew = '#';
+ for (var i = 1; i < 4; i += 1) {
+ sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
+ }
+ sColor = sColorNew;
+ }
+ //处理六位的颜色值
+ var sColorChange = [];
+ for (var i = 1; i < 7; i += 2) {
+ sColorChange.push(parseInt('0x' + sColor.slice(i, i + 2)));
+ }
+ return sColorChange;
+ } else {
+ return sColor;
+ }
+};
+
+// 将rgb表示方式转换为hex表示方式
+colormapwidget.prototype.colorHex = function (rgb) {
+ var reg = /(\d{1,3}),(\d{1,3}),(\d{1,3})/;
+ var arr = reg.exec(rgb);
+
+ function hex(x) {
+ return ('0' + parseInt(x).toString(16)).slice(-2);
+ }
+ var _hex = '#' + hex(arr[1]) + hex(arr[2]) + hex(arr[3]);
+ return _hex.toUpperCase();
+};
+
+//计算两个颜色的step个阶梯色
+colormapwidget.prototype.gradientColor = function (startColor, endColor, step) {
+ var startRGB = this.colorRgb(startColor); //转换为rgb数组模式
+ var startR = startRGB[0];
+ var startG = startRGB[1];
+ var startB = startRGB[2];
+
+ var endRGB = this.colorRgb(endColor);
+ var endR = endRGB[0];
+ var endG = endRGB[1];
+ var endB = endRGB[2];
+
+ var sR = (endR - startR) / step; //总差值
+ var sG = (endG - startG) / step;
+ var sB = (endB - startB) / step;
+
+ var colorArr = [];
+ for (var i = 0; i < step; i++) {
+ //计算每一步的hex值
+ //var hex = this.colorHex('rgb('+parseInt((sR*i+startR))+','+parseInt((sG*i+startG))+','+parseInt((sB*i+startB))+')');
+ //colorArr.push(hex);
+ colorArr.push([parseInt(sR * i + startR), parseInt(sG * i + startG), parseInt(sB * i + startB)]);
+ }
+ return colorArr;
+};
+
+colormapwidget.prototype.setDbRange = function (count) {
+ this.count = count;
+ this.mapCount = count;
+ this.calColors();
+};
+
+colormapwidget.prototype.getColors = function () {
+ if (
+ this.name === this.buff_name &&
+ this.gravity === this.buff_gravity &&
+ this.gravity_value === this.buff_gravity_value &&
+ this.count === this.buff_count
+ )
+ return this.buff_colors;
+
+ return this.calColors();
+};
+colormapwidget.prototype.getMapColors = function () {
+ return this.buff_mapCountcolors;
+};
+
+colormapwidget.prototype.calColors = function () {
+ this.buff_name = this.name;
+ this.buff_gravity = this.gravity;
+ this.buff_gravity_value = this.gravity_value;
+ this.buff_count = this.count;
+
+ this.buff_colors = this._calColorsByCount(this.count);
+ this.buff_mapCountcolors = this._calColorsByCount(this.mapCount);
+
+ return this.buff_colors;
+};
+
+colormapwidget.prototype._calColorsByCount = function (count) {
+ //console.log("_calColorsByCount " + count)
+ var colors = this.getGradientColors(this.name);
+ var arr = [];
+ var stepSpan = colors.length - 1;
+ if (!this.gravity) {
+ var step = Math.ceil(count / stepSpan);
+ for (var i = 0; i < stepSpan; i++) {
+ var carr = this.gradientColor(colors[i], colors[i + 1], step);
+ arr = arr.concat(carr);
+ }
+ } else {
+ var pStart = this.gravity_value - 0.2;
+ pStart = pStart < 0 ? 0 : pStart;
+ var pEnd = this.gravity_value + 0.2;
+ pEnd = pEnd > 1 ? 1 : pEnd;
+ pStart = count * pStart;
+ pEnd = count * pEnd;
+
+ for (var i = 0; i < pStart; i++) {
+ arr.push(this.colorRgb(colors[0]));
+ }
+
+ var step = Math.ceil((pEnd - pStart + 1) / stepSpan);
+ for (var i = 0; i < stepSpan; i++) {
+ var carr = this.gradientColor(colors[i], colors[i + 1], step);
+ arr = arr.concat(carr);
+ }
+
+ for (var i = pEnd; i < count; i++) {
+ arr.push(this.colorRgb(colors[colors.length - 1]));
+ }
+ }
+ return arr;
+};
+
+function colormapwidget(option) {
+ this.name = option && option.name ? option.name : 'default';
+ this.gravity = option && option.gravity ? option.gravity : false;
+ this.gravity_value = option && option.gravity_value ? option.gravity_value : 0.5;
+ this.count = option && option.count ? option.count : 200;
+ this.mapCount = option && option.mapCount ? option.mapCount : 200;
+
+ this.getColors();
+}
diff --git a/src/pages/Page/canvas/html-page/html-page.md b/src/pages/Page/canvas/html-page/html-page.md
new file mode 100644
index 0000000..d7a6cb5
--- /dev/null
+++ b/src/pages/Page/canvas/html-page/html-page.md
@@ -0,0 +1,3 @@
+```bash
+bunx http-server --port 8000
+```
\ No newline at end of file
diff --git a/src/pages/Page/canvas/html-page/jquery.resize.js b/src/pages/Page/canvas/html-page/jquery.resize.js
new file mode 100644
index 0000000..753cd1c
--- /dev/null
+++ b/src/pages/Page/canvas/html-page/jquery.resize.js
@@ -0,0 +1,73 @@
+(function ($, h, c) {
+ var a = $([]),
+ b = 'delay',
+ j = 'resize',
+ d = j + '-special-event',
+ e = ($.resize = $.extend($.resize, {})),
+ f = 'throttleWindow',
+ i,
+ k = 'setTimeout';
+ e[b] = 250;
+ e[f] = true;
+ $.event.special[j] = {
+ setup: function () {
+ if (!e[f] && this[k]) {
+ return false;
+ }
+ var l = $(this);
+ a = a.add(l);
+ $.data(this, d, {
+ w: l.width(),
+ h: l.height(),
+ });
+ if (a.length === 1) {
+ g();
+ }
+ },
+ teardown: function () {
+ if (!e[f] && this[k]) {
+ return false;
+ }
+ var l = $(this);
+ a = a.not(l);
+ l.removeData(d);
+ if (a.length === 0) {
+ clearTimeout(i);
+ }
+ },
+ add: function (l) {
+ if (!e[f] && this[k]) {
+ return false;
+ }
+ var n;
+ function m(s, o, p) {
+ var q = $(this),
+ r = $.data(this, d) || {};
+ r.w = o === c ? q.width() : o;
+ r.h = p === c ? q.height() : p;
+ Reflect.apply(n, this, arguments);
+ }
+ if ($.isFunction(l)) {
+ n = l;
+ return m;
+ } else {
+ n = l.handler;
+ l.handler = m;
+ }
+ },
+ };
+ function g() {
+ i = h[k](function () {
+ a.each(function () {
+ var n = $(this),
+ l = n.height(),
+ m = n.width(),
+ o = $.data(this, d);
+ if (m !== o.w || l !== o.h) {
+ n.trigger(j, [(o.w = m), (o.h = l)]);
+ }
+ });
+ g();
+ }, e[b]);
+ }
+})(jQuery, this);
diff --git a/src/pages/Page/canvas/html-page/konva.2.4.2.min.js b/src/pages/Page/canvas/html-page/konva.2.4.2.min.js
new file mode 100644
index 0000000..59bf059
--- /dev/null
+++ b/src/pages/Page/canvas/html-page/konva.2.4.2.min.js
@@ -0,0 +1,7380 @@
+// @ts-nocheck
+/*
+ * Konva JavaScript Framework v2.4.2
+ * http://konvajs.github.io/
+ * Licensed under the MIT
+ * Date: Fri Oct 12 2018
+ *
+ * Original work Copyright (C) 2011 - 2013 by Eric Rowell (KineticJS)
+ * Modified work Copyright (C) 2014 - present by Anton Lavrenov (Konva)
+ *
+ * @license
+ */
+!(function () {
+ 'use strict';
+ var e = Math.PI / 180,
+ r = {
+ version: '2.4.2',
+ stages: [],
+ idCounter: 0,
+ ids: {},
+ names: {},
+ shapes: {},
+ listenClickTap: !1,
+ inDblClickWindow: !1,
+ isBrowser:
+ 'undefined' != typeof window &&
+ ('[object Window]' === {}.toString.call(window) || '[object global]' === {}.toString.call(window)),
+ isUnminified: /comment/.test(function () {}),
+ enableTrace: !1,
+ traceArrMax: 100,
+ dblClickWindow: 400,
+ pixelRatio: void 0,
+ dragDistance: 3,
+ angleDeg: !0,
+ showWarnings: !0,
+ Filters: {},
+ isDragging: function () {
+ var t = r.DD;
+ return !!t && t.isDragging;
+ },
+ isDragReady: function () {
+ var t = r.DD;
+ return !!t && !!t.node;
+ },
+ _addId: function (t, e) {
+ e && (this.ids[e] = t);
+ },
+ _removeId: function (t) {
+ void 0 !== t && delete this.ids[t];
+ },
+ _addName: function (t, e) {
+ e && (this.names[e] || (this.names[e] = []), this.names[e].push(t));
+ },
+ _removeName: function (t, e) {
+ if (t) {
+ var i = this.names[t];
+ if (i) {
+ for (var n = 0; n < i.length; n++) {
+ i[n]._id === e && i.splice(n, 1);
+ }
+ 0 === i.length && delete this.names[t];
+ }
+ }
+ },
+ getAngle: function (t) {
+ return this.angleDeg ? t * e : t;
+ },
+ _detectIE: function (t) {
+ var e = t.indexOf('msie ');
+ if (0 < e) return parseInt(t.substring(e + 5, t.indexOf('.', e)), 10);
+ if (0 < t.indexOf('trident/')) {
+ var i = t.indexOf('rv:');
+ return parseInt(t.substring(i + 3, t.indexOf('.', i)), 10);
+ }
+ var n = t.indexOf('edge/');
+ return 0 < n && parseInt(t.substring(n + 5, t.indexOf('.', n)), 10);
+ },
+ _parseUA: function (t) {
+ var e = t.toLowerCase(),
+ i =
+ /(chrome)[ /]([\w.]+)/.exec(e) ||
+ /(webkit)[ /]([\w.]+)/.exec(e) ||
+ /(opera)(?:.*version|)[ /]([\w.]+)/.exec(e) ||
+ /(msie) ([\w.]+)/.exec(e) ||
+ (e.indexOf('compatible') < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)) ||
+ [],
+ n = !!t.match(/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile/i),
+ a = !!t.match(/IEMobile/i);
+ return { browser: i[1] || '', version: i[2] || '0', isIE: r._detectIE(e), mobile: n, ieMobile: a };
+ },
+ UA: void 0,
+ },
+ t =
+ 'undefined' != typeof global
+ ? global
+ : 'undefined' != typeof window
+ ? window
+ : 'undefined' != typeof WorkerGlobalScope
+ ? self
+ : {};
+ (r.UA = r._parseUA((t.navigator && t.navigator.userAgent) || '')),
+ t.Konva && console.error('Konva instance is already exist in current eviroment. Please use only one instance.'),
+ ((t.Konva = r).global = t),
+ (r.window = t),
+ (r.document = t.document),
+ 'object' == typeof exports
+ ? (module.exports = r)
+ : 'function' == typeof define &&
+ define.amd &&
+ define(function () {
+ return r;
+ });
+})(),
+ (function () {
+ 'use strict';
+ (Konva.Collection = function () {
+ var t = [].slice.call(arguments),
+ e = t.length,
+ i = 0;
+ for (this.length = e; i < e; i++) this[i] = t[i];
+ return this;
+ }),
+ (Konva.Collection.prototype = []),
+ (Konva.Collection.prototype.each = function (t) {
+ for (var e = 0; e < this.length; e++) t(this[e], e);
+ }),
+ (Konva.Collection.prototype.toArray = function () {
+ var t,
+ e = [],
+ i = this.length;
+ for (t = 0; t < i; t++) e.push(this[t]);
+ return e;
+ }),
+ (Konva.Collection.toCollection = function (t) {
+ var e,
+ i = new Konva.Collection(),
+ n = t.length;
+ for (e = 0; e < n; e++) i.push(t[e]);
+ return i;
+ }),
+ (Konva.Collection._mapMethod = function (n) {
+ Konva.Collection.prototype[n] = function () {
+ var t,
+ e = this.length,
+ i = [].slice.call(arguments);
+ for (t = 0; t < e; t++) this[t][n].apply(this[t], i);
+ return this;
+ };
+ }),
+ (Konva.Collection.mapMethods = function (t) {
+ var e = t.prototype;
+ for (var i in e) Konva.Collection._mapMethod(i);
+ }),
+ (Konva.Transform = function (t) {
+ this.m = (t && t.slice()) || [1, 0, 0, 1, 0, 0];
+ }),
+ (Konva.Transform.prototype = {
+ copy: function () {
+ return new Konva.Transform(this.m);
+ },
+ point: function (t) {
+ var e = this.m;
+ return { x: e[0] * t.x + e[2] * t.y + e[4], y: e[1] * t.x + e[3] * t.y + e[5] };
+ },
+ translate: function (t, e) {
+ return (this.m[4] += this.m[0] * t + this.m[2] * e), (this.m[5] += this.m[1] * t + this.m[3] * e), this;
+ },
+ scale: function (t, e) {
+ return (this.m[0] *= t), (this.m[1] *= t), (this.m[2] *= e), (this.m[3] *= e), this;
+ },
+ rotate: function (t) {
+ var e = Math.cos(t),
+ i = Math.sin(t),
+ n = this.m[0] * e + this.m[2] * i,
+ a = this.m[1] * e + this.m[3] * i,
+ r = this.m[0] * -i + this.m[2] * e,
+ o = this.m[1] * -i + this.m[3] * e;
+ return (this.m[0] = n), (this.m[1] = a), (this.m[2] = r), (this.m[3] = o), this;
+ },
+ getTranslation: function () {
+ return { x: this.m[4], y: this.m[5] };
+ },
+ skew: function (t, e) {
+ var i = this.m[0] + this.m[2] * e,
+ n = this.m[1] + this.m[3] * e,
+ a = this.m[2] + this.m[0] * t,
+ r = this.m[3] + this.m[1] * t;
+ return (this.m[0] = i), (this.m[1] = n), (this.m[2] = a), (this.m[3] = r), this;
+ },
+ multiply: function (t) {
+ var e = this.m[0] * t.m[0] + this.m[2] * t.m[1],
+ i = this.m[1] * t.m[0] + this.m[3] * t.m[1],
+ n = this.m[0] * t.m[2] + this.m[2] * t.m[3],
+ a = this.m[1] * t.m[2] + this.m[3] * t.m[3],
+ r = this.m[0] * t.m[4] + this.m[2] * t.m[5] + this.m[4],
+ o = this.m[1] * t.m[4] + this.m[3] * t.m[5] + this.m[5];
+ return (
+ (this.m[0] = e), (this.m[1] = i), (this.m[2] = n), (this.m[3] = a), (this.m[4] = r), (this.m[5] = o), this
+ );
+ },
+ invert: function () {
+ var t = 1 / (this.m[0] * this.m[3] - this.m[1] * this.m[2]),
+ e = this.m[3] * t,
+ i = -this.m[1] * t,
+ n = -this.m[2] * t,
+ a = this.m[0] * t,
+ r = t * (this.m[2] * this.m[5] - this.m[3] * this.m[4]),
+ o = t * (this.m[1] * this.m[4] - this.m[0] * this.m[5]);
+ return (
+ (this.m[0] = e), (this.m[1] = i), (this.m[2] = n), (this.m[3] = a), (this.m[4] = r), (this.m[5] = o), this
+ );
+ },
+ getMatrix: function () {
+ return this.m;
+ },
+ setAbsolutePosition: function (t, e) {
+ var i = this.m[0],
+ n = this.m[1],
+ a = this.m[2],
+ r = this.m[3],
+ o = this.m[4],
+ s = (i * (e - this.m[5]) - n * (t - o)) / (i * r - n * a),
+ h = (t - o - a * s) / i;
+ return this.translate(h, s);
+ },
+ });
+ var e = Math.PI / 180,
+ i = 180 / Math.PI,
+ n = 'Konva error: ',
+ a = {
+ aliceblue: [240, 248, 255],
+ antiquewhite: [250, 235, 215],
+ aqua: [0, 255, 255],
+ aquamarine: [127, 255, 212],
+ azure: [240, 255, 255],
+ beige: [245, 245, 220],
+ bisque: [255, 228, 196],
+ black: [0, 0, 0],
+ blanchedalmond: [255, 235, 205],
+ blue: [0, 0, 255],
+ blueviolet: [138, 43, 226],
+ brown: [165, 42, 42],
+ burlywood: [222, 184, 135],
+ cadetblue: [95, 158, 160],
+ chartreuse: [127, 255, 0],
+ chocolate: [210, 105, 30],
+ coral: [255, 127, 80],
+ cornflowerblue: [100, 149, 237],
+ cornsilk: [255, 248, 220],
+ crimson: [220, 20, 60],
+ cyan: [0, 255, 255],
+ darkblue: [0, 0, 139],
+ darkcyan: [0, 139, 139],
+ darkgoldenrod: [184, 132, 11],
+ darkgray: [169, 169, 169],
+ darkgreen: [0, 100, 0],
+ darkgrey: [169, 169, 169],
+ darkkhaki: [189, 183, 107],
+ darkmagenta: [139, 0, 139],
+ darkolivegreen: [85, 107, 47],
+ darkorange: [255, 140, 0],
+ darkorchid: [153, 50, 204],
+ darkred: [139, 0, 0],
+ darksalmon: [233, 150, 122],
+ darkseagreen: [143, 188, 143],
+ darkslateblue: [72, 61, 139],
+ darkslategray: [47, 79, 79],
+ darkslategrey: [47, 79, 79],
+ darkturquoise: [0, 206, 209],
+ darkviolet: [148, 0, 211],
+ deeppink: [255, 20, 147],
+ deepskyblue: [0, 191, 255],
+ dimgray: [105, 105, 105],
+ dimgrey: [105, 105, 105],
+ dodgerblue: [30, 144, 255],
+ firebrick: [178, 34, 34],
+ floralwhite: [255, 255, 240],
+ forestgreen: [34, 139, 34],
+ fuchsia: [255, 0, 255],
+ gainsboro: [220, 220, 220],
+ ghostwhite: [248, 248, 255],
+ gold: [255, 215, 0],
+ goldenrod: [218, 165, 32],
+ gray: [128, 128, 128],
+ green: [0, 128, 0],
+ greenyellow: [173, 255, 47],
+ grey: [128, 128, 128],
+ honeydew: [240, 255, 240],
+ hotpink: [255, 105, 180],
+ indianred: [205, 92, 92],
+ indigo: [75, 0, 130],
+ ivory: [255, 255, 240],
+ khaki: [240, 230, 140],
+ lavender: [230, 230, 250],
+ lavenderblush: [255, 240, 245],
+ lawngreen: [124, 252, 0],
+ lemonchiffon: [255, 250, 205],
+ lightblue: [173, 216, 230],
+ lightcoral: [240, 128, 128],
+ lightcyan: [224, 255, 255],
+ lightgoldenrodyellow: [250, 250, 210],
+ lightgray: [211, 211, 211],
+ lightgreen: [144, 238, 144],
+ lightgrey: [211, 211, 211],
+ lightpink: [255, 182, 193],
+ lightsalmon: [255, 160, 122],
+ lightseagreen: [32, 178, 170],
+ lightskyblue: [135, 206, 250],
+ lightslategray: [119, 136, 153],
+ lightslategrey: [119, 136, 153],
+ lightsteelblue: [176, 196, 222],
+ lightyellow: [255, 255, 224],
+ lime: [0, 255, 0],
+ limegreen: [50, 205, 50],
+ linen: [250, 240, 230],
+ magenta: [255, 0, 255],
+ maroon: [128, 0, 0],
+ mediumaquamarine: [102, 205, 170],
+ mediumblue: [0, 0, 205],
+ mediumorchid: [186, 85, 211],
+ mediumpurple: [147, 112, 219],
+ mediumseagreen: [60, 179, 113],
+ mediumslateblue: [123, 104, 238],
+ mediumspringgreen: [0, 250, 154],
+ mediumturquoise: [72, 209, 204],
+ mediumvioletred: [199, 21, 133],
+ midnightblue: [25, 25, 112],
+ mintcream: [245, 255, 250],
+ mistyrose: [255, 228, 225],
+ moccasin: [255, 228, 181],
+ navajowhite: [255, 222, 173],
+ navy: [0, 0, 128],
+ oldlace: [253, 245, 230],
+ olive: [128, 128, 0],
+ olivedrab: [107, 142, 35],
+ orange: [255, 165, 0],
+ orangered: [255, 69, 0],
+ orchid: [218, 112, 214],
+ palegoldenrod: [238, 232, 170],
+ palegreen: [152, 251, 152],
+ paleturquoise: [175, 238, 238],
+ palevioletred: [219, 112, 147],
+ papayawhip: [255, 239, 213],
+ peachpuff: [255, 218, 185],
+ peru: [205, 133, 63],
+ pink: [255, 192, 203],
+ plum: [221, 160, 203],
+ powderblue: [176, 224, 230],
+ purple: [128, 0, 128],
+ rebeccapurple: [102, 51, 153],
+ red: [255, 0, 0],
+ rosybrown: [188, 143, 143],
+ royalblue: [65, 105, 225],
+ saddlebrown: [139, 69, 19],
+ salmon: [250, 128, 114],
+ sandybrown: [244, 164, 96],
+ seagreen: [46, 139, 87],
+ seashell: [255, 245, 238],
+ sienna: [160, 82, 45],
+ silver: [192, 192, 192],
+ skyblue: [135, 206, 235],
+ slateblue: [106, 90, 205],
+ slategray: [119, 128, 144],
+ slategrey: [119, 128, 144],
+ snow: [255, 255, 250],
+ springgreen: [0, 255, 127],
+ steelblue: [70, 130, 180],
+ tan: [210, 180, 140],
+ teal: [0, 128, 128],
+ thistle: [216, 191, 216],
+ transparent: [255, 255, 255, 0],
+ tomato: [255, 99, 71],
+ turquoise: [64, 224, 208],
+ violet: [238, 130, 238],
+ wheat: [245, 222, 179],
+ white: [255, 255, 255],
+ whitesmoke: [245, 245, 245],
+ yellow: [255, 255, 0],
+ yellowgreen: [154, 205, 5],
+ },
+ r = /rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/;
+ Konva.Util = {
+ _isElement: function (t) {
+ return !(!t || 1 != t.nodeType);
+ },
+ _isFunction: function (t) {
+ return !!(t && t.constructor && t.call && t.apply);
+ },
+ _isObject: function (t) {
+ return !!t && t.constructor === Object;
+ },
+ _isArray: function (t) {
+ return '[object Array]' === Object.prototype.toString.call(t);
+ },
+ _isNumber: function (t) {
+ return '[object Number]' === Object.prototype.toString.call(t) && !isNaN(t) && isFinite(t);
+ },
+ _isString: function (t) {
+ return '[object String]' === Object.prototype.toString.call(t);
+ },
+ _isBoolean: function (t) {
+ return '[object Boolean]' === Object.prototype.toString.call(t);
+ },
+ isObject: function (t) {
+ return t instanceof Object;
+ },
+ isValidSelector: function (t) {
+ if ('string' != typeof t) return !1;
+ var e = t[0];
+ return '#' === e || '.' === e || e === e.toUpperCase();
+ },
+ _sign: function (t) {
+ return 0 === t ? 0 : 0 < t ? 1 : -1;
+ },
+ createCanvasElement: function () {
+ var t = Konva.isBrowser ? Konva.document.createElement('canvas') : new Konva._nodeCanvas();
+ try {
+ t.style = t.style || {};
+ } catch (t) {}
+ return t;
+ },
+ _isInDocument: function (t) {
+ for (; (t = t.parentNode); ) if (t == Konva.document) return !0;
+ return !1;
+ },
+ _simplifyArray: function (t) {
+ var e,
+ i,
+ n = [],
+ a = t.length,
+ r = Konva.Util;
+ for (e = 0; e < a; e++)
+ (i = t[e]),
+ r._isNumber(i) ? (i = Math.round(1e3 * i) / 1e3) : r._isString(i) || (i = i.toString()),
+ n.push(i);
+ return n;
+ },
+ _getImage: function (t, e) {
+ var i, n;
+ if (t)
+ if (this._isElement(t)) e(t);
+ else if (this._isString(t))
+ ((i = new Konva.window.Image()).onload = function () {
+ e(i);
+ }),
+ (i.src = t);
+ else if (t.data) {
+ ((n = Konva.Util.createCanvasElement()).width = t.width),
+ (n.height = t.height),
+ n.getContext('2d').putImageData(t, 0, 0),
+ this._getImage(n.toDataURL(), e);
+ } else e(null);
+ else e(null);
+ },
+ _getRGBAString: function (t) {
+ return ['rgba(', t.red || 0, ',', t.green || 0, ',', t.blue || 0, ',', t.alpha || 1, ')'].join('');
+ },
+ _rgbToHex: function (t, e, i) {
+ return ((1 << 24) + (t << 16) + (e << 8) + i).toString(16).slice(1);
+ },
+ _hexToRgb: function (t) {
+ t = t.replace('#', '');
+ var e = parseInt(t, 16);
+ return { r: (e >> 16) & 255, g: (e >> 8) & 255, b: 255 & e };
+ },
+ getRandomColor: function () {
+ for (var t = ((16777215 * Math.random()) << 0).toString(16); t.length < 6; ) t = '0' + t;
+ return '#' + t;
+ },
+ get: function (t, e) {
+ return void 0 === t ? e : t;
+ },
+ getRGB: function (t) {
+ var e;
+ return t in a
+ ? { r: (e = a[t])[0], g: e[1], b: e[2] }
+ : '#' === t[0]
+ ? this._hexToRgb(t.substring(1))
+ : 'rgb(' === t.substr(0, 4)
+ ? ((e = r.exec(t.replace(/ /g, ''))),
+ { r: parseInt(e[1], 10), g: parseInt(e[2], 10), b: parseInt(e[3], 10) })
+ : { r: 0, g: 0, b: 0 };
+ },
+ colorToRGBA: function (t) {
+ return (
+ (t = t || 'black'),
+ Konva.Util._namedColorToRBA(t) ||
+ Konva.Util._hex3ColorToRGBA(t) ||
+ Konva.Util._hex6ColorToRGBA(t) ||
+ Konva.Util._rgbColorToRGBA(t) ||
+ Konva.Util._rgbaColorToRGBA(t)
+ );
+ },
+ _namedColorToRBA: function (t) {
+ var e = a[t.toLowerCase()];
+ return e ? { r: e[0], g: e[1], b: e[2], a: 1 } : null;
+ },
+ _rgbColorToRGBA: function (t) {
+ if (0 === t.indexOf('rgb(')) {
+ var e = (t = t.match(/rgb\(([^)]+)\)/)[1]).split(/ *, */).map(Number);
+ return { r: e[0], g: e[1], b: e[2], a: 1 };
+ }
+ },
+ _rgbaColorToRGBA: function (t) {
+ if (0 === t.indexOf('rgba(')) {
+ var e = (t = t.match(/rgba\(([^)]+)\)/)[1]).split(/ *, */).map(Number);
+ return { r: e[0], g: e[1], b: e[2], a: e[3] };
+ }
+ },
+ _hex6ColorToRGBA: function (t) {
+ if ('#' === t[0] && 7 === t.length)
+ return {
+ r: parseInt(t.slice(1, 3), 16),
+ g: parseInt(t.slice(3, 5), 16),
+ b: parseInt(t.slice(5, 7), 16),
+ a: 1,
+ };
+ },
+ _hex3ColorToRGBA: function (t) {
+ if ('#' === t[0] && 4 === t.length)
+ return { r: parseInt(t[1] + t[1], 16), g: parseInt(t[2] + t[2], 16), b: parseInt(t[3] + t[3], 16), a: 1 };
+ },
+ _merge: function (t, e) {
+ var i = this._clone(e);
+ for (var n in t) this._isObject(t[n]) ? (i[n] = this._merge(t[n], i[n])) : (i[n] = t[n]);
+ return i;
+ },
+ haveIntersection: function (t, e) {
+ return !(e.x > t.x + t.width || e.x + e.width < t.x || e.y > t.y + t.height || e.y + e.height < t.y);
+ },
+ cloneObject: function (t) {
+ var e = {};
+ for (var i in t)
+ this._isObject(t[i])
+ ? (e[i] = this.cloneObject(t[i]))
+ : this._isArray(t[i])
+ ? (e[i] = this.cloneArray(t[i]))
+ : (e[i] = t[i]);
+ return e;
+ },
+ cloneArray: function (t) {
+ return t.slice(0);
+ },
+ _degToRad: function (t) {
+ return t * e;
+ },
+ _radToDeg: function (t) {
+ return t * i;
+ },
+ _capitalize: function (t) {
+ return t.charAt(0).toUpperCase() + t.slice(1);
+ },
+ throw: function (t) {
+ throw new Error(n + t);
+ },
+ error: function (t) {
+ console.error(n + t);
+ },
+ warn: function (t) {
+ Konva.global.console && console.warn && Konva.showWarnings && console.warn('Konva warning: ' + t);
+ },
+ extend: function (t, e) {
+ function i() {
+ this.constructor = t;
+ }
+ i.prototype = e.prototype;
+ var n = t.prototype;
+ for (var a in ((t.prototype = new i()), n)) n.hasOwnProperty(a) && (t.prototype[a] = n[a]);
+ (t.__super__ = e.prototype), (t.super = e);
+ },
+ addMethods: function (t, e) {
+ var i;
+ for (i in e) t.prototype[i] = e[i];
+ },
+ _getControlPoints: function (t, e, i, n, a, r, o) {
+ var s = Math.sqrt(Math.pow(i - t, 2) + Math.pow(n - e, 2)),
+ h = Math.sqrt(Math.pow(a - i, 2) + Math.pow(r - n, 2)),
+ l = (o * s) / (s + h),
+ c = (o * h) / (s + h);
+ return [i - l * (a - t), n - l * (r - e), i + c * (a - t), n + c * (r - e)];
+ },
+ _expandPoints: function (t, e) {
+ var i,
+ n,
+ a = t.length,
+ r = [];
+ for (i = 2; i < a - 2; i += 2)
+ (n = Konva.Util._getControlPoints(t[i - 2], t[i - 1], t[i], t[i + 1], t[i + 2], t[i + 3], e)),
+ r.push(n[0]),
+ r.push(n[1]),
+ r.push(t[i]),
+ r.push(t[i + 1]),
+ r.push(n[2]),
+ r.push(n[3]);
+ return r;
+ },
+ _removeLastLetter: function (t) {
+ return t.substring(0, t.length - 1);
+ },
+ each: function (t, e) {
+ for (var i in t) e(i, t[i]);
+ },
+ _inRange: function (t, e, i) {
+ return e <= t && t < i;
+ },
+ _getProjectionToSegment: function (t, e, i, n, a, r) {
+ var o,
+ s,
+ h,
+ l = (t - i) * (t - i) + (e - n) * (e - n);
+ if (0 == l) (o = t), (s = e), (h = (a - i) * (a - i) + (r - n) * (r - n));
+ else {
+ var c = ((a - t) * (i - t) + (r - e) * (n - e)) / l;
+ h =
+ c < 0
+ ? ((o = t) - a) * (t - a) + ((s = e) - r) * (e - r)
+ : 1 < c
+ ? ((o = i) - a) * (i - a) + ((s = n) - r) * (n - r)
+ : ((o = t + c * (i - t)) - a) * (o - a) + ((s = e + c * (n - e)) - r) * (s - r);
+ }
+ return [o, s, h];
+ },
+ _getProjectionToLine: function (s, h, l) {
+ var c = Konva.Util.cloneObject(s),
+ d = Number.MAX_VALUE;
+ return (
+ h.forEach(function (t, e) {
+ if (l || e !== h.length - 1) {
+ var i = h[(e + 1) % h.length],
+ n = Konva.Util._getProjectionToSegment(t.x, t.y, i.x, i.y, s.x, s.y),
+ a = n[0],
+ r = n[1],
+ o = n[2];
+ o < d && ((c.x = a), (c.y = r), (d = o));
+ }
+ }),
+ c
+ );
+ },
+ _prepareArrayForTween: function (t, e, i) {
+ var n,
+ a = [],
+ r = [];
+ if (t.length > e.length) {
+ var o = e;
+ (e = t), (t = o);
+ }
+ for (n = 0; n < t.length; n += 2) a.push({ x: t[n], y: t[n + 1] });
+ for (n = 0; n < e.length; n += 2) r.push({ x: e[n], y: e[n + 1] });
+ var s = [];
+ return (
+ r.forEach(function (t) {
+ var e = Konva.Util._getProjectionToLine(t, a, i);
+ s.push(e.x), s.push(e.y);
+ }),
+ s
+ );
+ },
+ _prepareToStringify: function (t) {
+ var e;
+ for (var i in ((t.visitedByCircularReferenceRemoval = !0), t))
+ if (t.hasOwnProperty(i) && t[i] && 'object' == typeof t[i])
+ if (
+ ((e = Object.getOwnPropertyDescriptor(t, i)),
+ t[i].visitedByCircularReferenceRemoval || Konva.Util._isElement(t[i]))
+ ) {
+ if (!e.configurable) return null;
+ delete t[i];
+ } else if (null === Konva.Util._prepareToStringify(t[i])) {
+ if (!e.configurable) return null;
+ delete t[i];
+ }
+ return delete t.visitedByCircularReferenceRemoval, t;
+ },
+ };
+ })(),
+ (function () {
+ 'use strict';
+ var i;
+ (Konva.Canvas = function (t) {
+ this.init(t);
+ }),
+ (Konva.Canvas.prototype = {
+ init: function (t) {
+ var e =
+ (t || {}).pixelRatio ||
+ Konva.pixelRatio ||
+ (function () {
+ if (i) return i;
+ var t = Konva.Util.createCanvasElement().getContext('2d');
+ return (i =
+ (Konva.window.devicePixelRatio || 1) /
+ (t.webkitBackingStorePixelRatio ||
+ t.mozBackingStorePixelRatio ||
+ t.msBackingStorePixelRatio ||
+ t.oBackingStorePixelRatio ||
+ t.backingStorePixelRatio ||
+ 1));
+ })();
+ (this.pixelRatio = e),
+ (this._canvas = Konva.Util.createCanvasElement()),
+ (this._canvas.style.padding = 0),
+ (this._canvas.style.margin = 0),
+ (this._canvas.style.border = 0),
+ (this._canvas.style.background = 'transparent'),
+ (this._canvas.style.position = 'absolute'),
+ (this._canvas.style.top = 0),
+ (this._canvas.style.left = 0);
+ },
+ getContext: function () {
+ return this.context;
+ },
+ getPixelRatio: function () {
+ return this.pixelRatio;
+ },
+ setPixelRatio: function (t) {
+ var e = this.pixelRatio;
+ (this.pixelRatio = t), this.setSize(this.getWidth() / e, this.getHeight() / e);
+ },
+ setWidth: function (t) {
+ (this.width = this._canvas.width = t * this.pixelRatio), (this._canvas.style.width = t + 'px');
+ var e = this.pixelRatio;
+ this.getContext()._context.scale(e, e);
+ },
+ setHeight: function (t) {
+ (this.height = this._canvas.height = t * this.pixelRatio), (this._canvas.style.height = t + 'px');
+ var e = this.pixelRatio;
+ this.getContext()._context.scale(e, e);
+ },
+ getWidth: function () {
+ return this.width;
+ },
+ getHeight: function () {
+ return this.height;
+ },
+ setSize: function (t, e) {
+ this.setWidth(t), this.setHeight(e);
+ },
+ toDataURL: function (t, e) {
+ try {
+ return this._canvas.toDataURL(t, e);
+ } catch (t) {
+ try {
+ return this._canvas.toDataURL();
+ } catch (t) {
+ return Konva.Util.warn('Unable to get data URL. ' + t.message), '';
+ }
+ }
+ },
+ }),
+ (Konva.SceneCanvas = function (t) {
+ var e = t || {},
+ i = e.width || 0,
+ n = e.height || 0;
+ Konva.Canvas.call(this, e), (this.context = new Konva.SceneContext(this)), this.setSize(i, n);
+ }),
+ Konva.Util.extend(Konva.SceneCanvas, Konva.Canvas),
+ (Konva.HitCanvas = function (t) {
+ var e = t || {},
+ i = e.width || 0,
+ n = e.height || 0;
+ Konva.Canvas.call(this, e),
+ (this.context = new Konva.HitContext(this)),
+ this.setSize(i, n),
+ (this.hitCanvas = !0);
+ }),
+ Konva.Util.extend(Konva.HitCanvas, Konva.Canvas);
+ })(),
+ (function () {
+ 'use strict';
+ var s = [
+ 'arc',
+ 'arcTo',
+ 'beginPath',
+ 'bezierCurveTo',
+ 'clearRect',
+ 'clip',
+ 'closePath',
+ 'createLinearGradient',
+ 'createPattern',
+ 'createRadialGradient',
+ 'drawImage',
+ 'fill',
+ 'fillText',
+ 'getImageData',
+ 'createImageData',
+ 'lineTo',
+ 'moveTo',
+ 'putImageData',
+ 'quadraticCurveTo',
+ 'rect',
+ 'restore',
+ 'rotate',
+ 'save',
+ 'scale',
+ 'setLineDash',
+ 'setTransform',
+ 'stroke',
+ 'strokeText',
+ 'transform',
+ 'translate',
+ ];
+ (Konva.Context = function (t) {
+ this.init(t);
+ }),
+ (Konva.Context.prototype = {
+ init: function (t) {
+ (this.canvas = t),
+ (this._context = t._canvas.getContext('2d')),
+ Konva.enableTrace && ((this.traceArr = []), this._enableTrace());
+ },
+ fillShape: function (t) {
+ t.getFillEnabled() && this._fill(t);
+ },
+ strokeShape: function (t) {
+ t.getStrokeEnabled() && this._stroke(t);
+ },
+ fillStrokeShape: function (t) {
+ t.getFillEnabled() && this._fill(t), t.getStrokeEnabled() && this._stroke(t);
+ },
+ getTrace: function (t) {
+ var e,
+ i,
+ n,
+ a,
+ r = this.traceArr,
+ o = r.length,
+ s = '';
+ for (e = 0; e < o; e++)
+ (n = (i = r[e]).method)
+ ? ((a = i.args),
+ (s += n),
+ t
+ ? (s += '()')
+ : Konva.Util._isArray(a[0])
+ ? (s += '([' + a.join(',') + '])')
+ : (s += '(' + a.join(',') + ')'))
+ : ((s += i.property), t || (s += '=' + i.val)),
+ (s += ';');
+ return s;
+ },
+ clearTrace: function () {
+ this.traceArr = [];
+ },
+ _trace: function (t) {
+ var e = this.traceArr;
+ e.push(t), e.length >= Konva.traceArrMax && e.shift();
+ },
+ reset: function () {
+ var t = this.getCanvas().getPixelRatio();
+ this.setTransform(1 * t, 0, 0, 1 * t, 0, 0);
+ },
+ getCanvas: function () {
+ return this.canvas;
+ },
+ clear: function (t) {
+ var e = this.getCanvas();
+ t
+ ? this.clearRect(t.x || 0, t.y || 0, t.width || 0, t.height || 0)
+ : this.clearRect(0, 0, e.getWidth() / e.pixelRatio, e.getHeight() / e.pixelRatio);
+ },
+ _applyLineCap: function (t) {
+ var e = t.getLineCap();
+ e && this.setAttr('lineCap', e);
+ },
+ _applyOpacity: function (t) {
+ var e = t.getAbsoluteOpacity();
+ 1 !== e && this.setAttr('globalAlpha', e);
+ },
+ _applyLineJoin: function (t) {
+ var e = t.getLineJoin();
+ e && this.setAttr('lineJoin', e);
+ },
+ setAttr: function (t, e) {
+ this._context[t] = e;
+ },
+ arc: function () {
+ var t = arguments;
+ this._context.arc(t[0], t[1], t[2], t[3], t[4], t[5]);
+ },
+ beginPath: function () {
+ this._context.beginPath();
+ },
+ bezierCurveTo: function () {
+ var t = arguments;
+ this._context.bezierCurveTo(t[0], t[1], t[2], t[3], t[4], t[5]);
+ },
+ clearRect: function () {
+ var t = arguments;
+ this._context.clearRect(t[0], t[1], t[2], t[3]);
+ },
+ clip: function () {
+ this._context.clip();
+ },
+ closePath: function () {
+ this._context.closePath();
+ },
+ createImageData: function () {
+ var t = arguments;
+ return 2 === t.length
+ ? this._context.createImageData(t[0], t[1])
+ : 1 === t.length
+ ? this._context.createImageData(t[0])
+ : void 0;
+ },
+ createLinearGradient: function () {
+ var t = arguments;
+ return this._context.createLinearGradient(t[0], t[1], t[2], t[3]);
+ },
+ createPattern: function () {
+ var t = arguments;
+ return this._context.createPattern(t[0], t[1]);
+ },
+ createRadialGradient: function () {
+ var t = arguments;
+ return this._context.createRadialGradient(t[0], t[1], t[2], t[3], t[4], t[5]);
+ },
+ drawImage: function () {
+ var t = arguments,
+ e = this._context;
+ 3 === t.length
+ ? e.drawImage(t[0], t[1], t[2])
+ : 5 === t.length
+ ? e.drawImage(t[0], t[1], t[2], t[3], t[4])
+ : 9 === t.length && e.drawImage(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8]);
+ },
+ isPointInPath: function (t, e) {
+ return this._context.isPointInPath(t, e);
+ },
+ fill: function () {
+ this._context.fill();
+ },
+ fillRect: function (t, e, i, n) {
+ this._context.fillRect(t, e, i, n);
+ },
+ strokeRect: function (t, e, i, n) {
+ this._context.strokeRect(t, e, i, n);
+ },
+ fillText: function () {
+ var t = arguments;
+ this._context.fillText(t[0], t[1], t[2]);
+ },
+ measureText: function (t) {
+ return this._context.measureText(t);
+ },
+ getImageData: function () {
+ var t = arguments;
+ return this._context.getImageData(t[0], t[1], t[2], t[3]);
+ },
+ lineTo: function () {
+ var t = arguments;
+ this._context.lineTo(t[0], t[1]);
+ },
+ moveTo: function () {
+ var t = arguments;
+ this._context.moveTo(t[0], t[1]);
+ },
+ rect: function () {
+ var t = arguments;
+ this._context.rect(t[0], t[1], t[2], t[3]);
+ },
+ putImageData: function () {
+ var t = arguments;
+ this._context.putImageData(t[0], t[1], t[2]);
+ },
+ quadraticCurveTo: function () {
+ var t = arguments;
+ this._context.quadraticCurveTo(t[0], t[1], t[2], t[3]);
+ },
+ restore: function () {
+ this._context.restore();
+ },
+ rotate: function () {
+ var t = arguments;
+ this._context.rotate(t[0]);
+ },
+ save: function () {
+ this._context.save();
+ },
+ scale: function () {
+ var t = arguments;
+ this._context.scale(t[0], t[1]);
+ },
+ setLineDash: function () {
+ var t = arguments,
+ e = this._context;
+ this._context.setLineDash
+ ? e.setLineDash(t[0])
+ : 'mozDash' in e
+ ? (e.mozDash = t[0])
+ : 'webkitLineDash' in e && (e.webkitLineDash = t[0]);
+ },
+ getLineDash: function () {
+ return this._context.getLineDash();
+ },
+ setTransform: function () {
+ var t = arguments;
+ this._context.setTransform(t[0], t[1], t[2], t[3], t[4], t[5]);
+ },
+ stroke: function () {
+ this._context.stroke();
+ },
+ strokeText: function () {
+ var t = arguments;
+ this._context.strokeText(t[0], t[1], t[2]);
+ },
+ transform: function () {
+ var t = arguments;
+ this._context.transform(t[0], t[1], t[2], t[3], t[4], t[5]);
+ },
+ translate: function () {
+ var t = arguments;
+ this._context.translate(t[0], t[1]);
+ },
+ _enableTrace: function () {
+ var t,
+ n,
+ a = this,
+ e = s.length,
+ r = Konva.Util._simplifyArray,
+ i = this.setAttr,
+ o = function (t) {
+ var e,
+ i = a[t];
+ a[t] = function () {
+ return (
+ (n = r(Array.prototype.slice.call(arguments, 0))),
+ (e = i.apply(a, arguments)),
+ a._trace({ method: t, args: n }),
+ e
+ );
+ };
+ };
+ for (t = 0; t < e; t++) o(s[t]);
+ a.setAttr = function () {
+ i.apply(a, arguments);
+ var t = arguments[0],
+ e = arguments[1];
+ ('shadowOffsetX' !== t && 'shadowOffsetY' !== t && 'shadowBlur' !== t) ||
+ (e /= this.canvas.getPixelRatio()),
+ a._trace({ property: t, val: e });
+ };
+ },
+ }),
+ [
+ 'fillStyle',
+ 'strokeStyle',
+ 'shadowColor',
+ 'shadowBlur',
+ 'shadowOffsetX',
+ 'shadowOffsetY',
+ 'lineCap',
+ 'lineDashOffset',
+ 'lineJoin',
+ 'lineWidth',
+ 'miterLimit',
+ 'font',
+ 'textAlign',
+ 'textBaseline',
+ 'globalAlpha',
+ 'globalCompositeOperation',
+ ].forEach(function (e) {
+ Object.defineProperty(Konva.Context.prototype, e, {
+ get: function () {
+ return this._context[e];
+ },
+ set: function (t) {
+ this._context[e] = t;
+ },
+ });
+ }),
+ (Konva.SceneContext = function (t) {
+ Konva.Context.call(this, t);
+ }),
+ (Konva.SceneContext.prototype = {
+ _fillColor: function (t) {
+ var e = t.fill();
+ this.setAttr('fillStyle', e), t._fillFunc(this);
+ },
+ _fillPattern: function (t) {
+ var e = t.getFillPatternX(),
+ i = t.getFillPatternY(),
+ n = t.getFillPatternScale(),
+ a = Konva.getAngle(t.getFillPatternRotation()),
+ r = t.getFillPatternOffset();
+ (e || i) && this.translate(e || 0, i || 0),
+ a && this.rotate(a),
+ n && this.scale(n.x, n.y),
+ r && this.translate(-1 * r.x, -1 * r.y),
+ this.setAttr(
+ 'fillStyle',
+ this.createPattern(t.getFillPatternImage(), t.getFillPatternRepeat() || 'repeat'),
+ ),
+ this.fill();
+ },
+ _fillLinearGradient: function (t) {
+ var e = t.getFillLinearGradientStartPoint(),
+ i = t.getFillLinearGradientEndPoint(),
+ n = t.getFillLinearGradientColorStops(),
+ a = this.createLinearGradient(e.x, e.y, i.x, i.y);
+ if (n) {
+ for (var r = 0; r < n.length; r += 2) a.addColorStop(n[r], n[r + 1]);
+ this.setAttr('fillStyle', a), t._fillFunc(this);
+ }
+ },
+ _fillRadialGradient: function (t) {
+ for (
+ var e = t.getFillRadialGradientStartPoint(),
+ i = t.getFillRadialGradientEndPoint(),
+ n = t.getFillRadialGradientStartRadius(),
+ a = t.getFillRadialGradientEndRadius(),
+ r = t.getFillRadialGradientColorStops(),
+ o = this.createRadialGradient(e.x, e.y, n, i.x, i.y, a),
+ s = 0;
+ s < r.length;
+ s += 2
+ )
+ o.addColorStop(r[s], r[s + 1]);
+ this.setAttr('fillStyle', o), this.fill();
+ },
+ _fill: function (t) {
+ var e = t.fill(),
+ i = t.getFillPriority();
+ if (e && 'color' === i) this._fillColor(t);
+ else {
+ var n = t.getFillPatternImage();
+ if (n && 'pattern' === i) this._fillPattern(t);
+ else {
+ var a = t.getFillLinearGradientColorStops();
+ if (a && 'linear-gradient' === i) this._fillLinearGradient(t);
+ else {
+ var r = t.getFillRadialGradientColorStops();
+ r && 'radial-gradient' === i
+ ? this._fillRadialGradient(t)
+ : e
+ ? this._fillColor(t)
+ : n
+ ? this._fillPattern(t)
+ : a
+ ? this._fillLinearGradient(t)
+ : r && this._fillRadialGradient(t);
+ }
+ }
+ }
+ },
+ _strokeLinearGradient: function (t) {
+ var e = t.getStrokeLinearGradientStartPoint(),
+ i = t.getStrokeLinearGradientEndPoint(),
+ n = t.getStrokeLinearGradientColorStops(),
+ a = this.createLinearGradient(e.x, e.y, i.x, i.y);
+ if (n) {
+ for (var r = 0; r < n.length; r += 2) a.addColorStop(n[r], n[r + 1]);
+ this.setAttr('strokeStyle', a);
+ }
+ },
+ _stroke: function (t) {
+ var e = t.dash(),
+ i = t.getStrokeScaleEnabled() || t instanceof Konva.Text;
+ t.hasStroke() &&
+ (i || (this.save(), this.setTransform(1, 0, 0, 1, 0, 0)),
+ this._applyLineCap(t),
+ e && t.dashEnabled() && (this.setLineDash(e), this.setAttr('lineDashOffset', t.dashOffset())),
+ this.setAttr('lineWidth', t.strokeWidth()),
+ t.getShadowForStrokeEnabled() || this.setAttr('shadowColor', 'rgba(0,0,0,0)'),
+ t.getStrokeLinearGradientColorStops()
+ ? this._strokeLinearGradient(t)
+ : this.setAttr('strokeStyle', t.stroke()),
+ t._strokeFunc(this),
+ i || this.restore());
+ },
+ _applyShadow: function (t) {
+ var e = Konva.Util,
+ i = e.get(t.getShadowRGBA(), 'black'),
+ n = e.get(t.getShadowBlur(), 5),
+ a = e.get(t.getShadowOffset(), { x: 0, y: 0 }),
+ r = t.getAbsoluteScale(),
+ o = this.canvas.getPixelRatio(),
+ s = r.x * o,
+ h = r.y * o;
+ this.setAttr('shadowColor', i),
+ this.setAttr('shadowBlur', n * Math.min(Math.abs(s), Math.abs(h))),
+ this.setAttr('shadowOffsetX', a.x * s),
+ this.setAttr('shadowOffsetY', a.y * h);
+ },
+ _applyGlobalCompositeOperation: function (t) {
+ var e = t.getGlobalCompositeOperation();
+ 'source-over' !== e && this.setAttr('globalCompositeOperation', e);
+ },
+ }),
+ Konva.Util.extend(Konva.SceneContext, Konva.Context),
+ (Konva.HitContext = function (t) {
+ Konva.Context.call(this, t);
+ }),
+ (Konva.HitContext.prototype = {
+ _fill: function (t) {
+ this.save(), this.setAttr('fillStyle', t.colorKey), t._fillFuncHit(this), this.restore();
+ },
+ _stroke: function (t) {
+ if (t.hasStroke() && t.strokeHitEnabled()) {
+ var e = t.getStrokeScaleEnabled() || t instanceof Konva.Text;
+ e || (this.save(), this.setTransform(1, 0, 0, 1, 0, 0)),
+ this._applyLineCap(t),
+ this.setAttr('lineWidth', t.strokeWidth()),
+ this.setAttr('strokeStyle', t.colorKey),
+ t._strokeFuncHit(this),
+ e || this.restore();
+ }
+ },
+ }),
+ Konva.Util.extend(Konva.HitContext, Konva.Context);
+ })(),
+ (function () {
+ 'use strict';
+ var d = 'get',
+ u = 'set';
+ (Konva.Factory = {
+ addGetterSetter: function (t, e, i, n, a) {
+ this.addGetter(t, e, i), this.addSetter(t, e, n, a), this.addOverloadedGetterSetter(t, e);
+ },
+ addGetter: function (t, e, i) {
+ var n = d + Konva.Util._capitalize(e);
+ t.prototype[n] = function () {
+ var t = this.attrs[e];
+ return void 0 === t ? i : t;
+ };
+ },
+ addSetter: function (t, e, i, n) {
+ var a = u + Konva.Util._capitalize(e);
+ t.prototype[a] = function (t) {
+ return i && null != t && (t = i.call(this, t, e)), this._setAttr(e, t), n && n.call(this), this;
+ };
+ },
+ addComponentsGetterSetter: function (t, n, e, a, r) {
+ var i,
+ o,
+ s = e.length,
+ h = Konva.Util._capitalize,
+ l = d + h(n),
+ c = u + h(n);
+ (t.prototype[l] = function () {
+ var t = {};
+ for (i = 0; i < s; i++) t[(o = e[i])] = this.getAttr(n + h(o));
+ return t;
+ }),
+ (t.prototype[c] = function (t) {
+ var e,
+ i = this.attrs[n];
+ for (e in (a && (t = a.call(this, t)), t)) t.hasOwnProperty(e) && this._setAttr(n + h(e), t[e]);
+ return this._fireChangeEvent(n, i, t), r && r.call(this), this;
+ }),
+ this.addOverloadedGetterSetter(t, n);
+ },
+ addOverloadedGetterSetter: function (t, e) {
+ var i = Konva.Util._capitalize(e),
+ n = u + i,
+ a = d + i;
+ t.prototype[e] = function () {
+ return arguments.length ? (this[n](arguments[0]), this) : this[a]();
+ };
+ },
+ addDeprecatedGetterSetter: function (t, e, i, n) {
+ Konva.Util.error('Adding deprecated ' + e);
+ var a = d + Konva.Util._capitalize(e),
+ r = e + ' property is deprecated and will be removed soon. Look at Konva change log for more information.';
+ (t.prototype[a] = function () {
+ Konva.Util.error(r);
+ var t = this.attrs[e];
+ return void 0 === t ? i : t;
+ }),
+ this.addSetter(t, e, n, function () {
+ Konva.Util.error(r);
+ }),
+ this.addOverloadedGetterSetter(t, e);
+ },
+ backCompat: function (o, t) {
+ Konva.Util.each(t, function (t, e) {
+ var i = o.prototype[e],
+ n = d + Konva.Util._capitalize(t),
+ a = u + Konva.Util._capitalize(t);
+ function r() {
+ i.apply(this, arguments),
+ Konva.Util.error('"' + t + '" method is deprecated and will be removed soon. Use ""' + e + '" instead.');
+ }
+ (o.prototype[t] = r), (o.prototype[n] = r), (o.prototype[a] = r);
+ });
+ },
+ afterSetFilter: function () {
+ this._filterUpToDate = !1;
+ },
+ }),
+ (Konva.Validators = {
+ RGBComponent: function (t) {
+ return 255 < t ? 255 : t < 0 ? 0 : Math.round(t);
+ },
+ alphaComponent: function (t) {
+ return 1 < t ? 1 : t < 1e-4 ? 1e-4 : t;
+ },
+ _formatValue: function (t) {
+ return Konva.Util._isString(t)
+ ? '"' + t + '"'
+ : '[object Number]' === Object.prototype.toString.call(t)
+ ? t
+ : Konva.Util._isBoolean(t)
+ ? t
+ : Object.prototype.toString.call(t);
+ },
+ getNumberValidator: function () {
+ if (Konva.isUnminified)
+ return function (t, e) {
+ return (
+ Konva.Util._isNumber(t) ||
+ Konva.Util.warn(
+ Konva.Validators._formatValue(t) +
+ ' is a not valid value for "' +
+ e +
+ '" attribute. The value should be a number.',
+ ),
+ t
+ );
+ };
+ },
+ getNumberOrAutoValidator: function () {
+ if (Konva.isUnminified)
+ return function (t, e) {
+ return (
+ Konva.Util._isNumber(t) ||
+ 'auto' === t ||
+ Konva.Util.warn(
+ Konva.Validators._formatValue(t) +
+ ' is a not valid value for "' +
+ e +
+ '" attribute. The value should be a number or "auto".',
+ ),
+ t
+ );
+ };
+ },
+ getStringValidator: function () {
+ if (Konva.isUnminified)
+ return function (t, e) {
+ return (
+ Konva.Util._isString(t) ||
+ Konva.Util.warn(
+ Konva.Validators._formatValue(t) +
+ ' is a not valid value for "' +
+ e +
+ '" attribute. The value should be a string.',
+ ),
+ t
+ );
+ };
+ },
+ getFunctionValidator: function () {
+ if (Konva.isUnminified)
+ return function (t, e) {
+ return (
+ Konva.Util._isFunction(t) ||
+ Konva.Util.warn(
+ Konva.Validators._formatValue(t) +
+ ' is a not valid value for "' +
+ e +
+ '" attribute. The value should be a function.',
+ ),
+ t
+ );
+ };
+ },
+ getNumberArrayValidator: function () {
+ if (Konva.isUnminified)
+ return function (t, e) {
+ return (
+ Konva.Util._isArray(t)
+ ? t.forEach(function (t) {
+ Konva.Util._isNumber(t) ||
+ Konva.Util.warn(
+ '"' +
+ e +
+ '" attribute has non numeric element ' +
+ t +
+ '. Make sure that all elements are numbers.',
+ );
+ })
+ : Konva.Util.warn(
+ Konva.Validators._formatValue(t) +
+ ' is a not valid value for "' +
+ e +
+ '" attribute. The value should be a array of numbers.',
+ ),
+ t
+ );
+ };
+ },
+ getBooleanValidator: function () {
+ if (Konva.isUnminified)
+ return function (t, e) {
+ return (
+ !0 === t ||
+ !1 === t ||
+ Konva.Util.warn(
+ Konva.Validators._formatValue(t) +
+ ' is a not valid value for "' +
+ e +
+ '" attribute. The value should be a boolean.',
+ ),
+ t
+ );
+ };
+ },
+ });
+ })(),
+ (function (v) {
+ 'use strict';
+ var p = 'absoluteOpacity',
+ i = 'absoluteTransform',
+ m = 'absoluteScale',
+ e = 'listening',
+ r = 'mouseenter',
+ o = 'mouseleave',
+ l = 'Shape',
+ n = 'transform',
+ a = 'visible',
+ c = ['id'],
+ s = [
+ 'xChange.konva',
+ 'yChange.konva',
+ 'scaleXChange.konva',
+ 'scaleYChange.konva',
+ 'skewXChange.konva',
+ 'skewYChange.konva',
+ 'rotationChange.konva',
+ 'offsetXChange.konva',
+ 'offsetYChange.konva',
+ 'transformsEnabledChange.konva',
+ ].join(' '),
+ h = ['scaleXChange.konva', 'scaleYChange.konva'].join(' ');
+ (v.Node = function (t) {
+ this._init(t);
+ }),
+ v.Util.addMethods(v.Node, {
+ _init: function (t) {
+ (this._id = v.idCounter++),
+ (this.eventListeners = {}),
+ (this.attrs = {}),
+ (this._cache = {}),
+ (this._filterUpToDate = !1),
+ (this._isUnderCache = !1),
+ this.setAttrs(t),
+ this.on(s, function () {
+ this._clearCache(n), this._clearSelfAndDescendantCache(i);
+ }),
+ this.on(h, function () {
+ this._clearSelfAndDescendantCache(m);
+ }),
+ this.on('visibleChange.konva', function () {
+ this._clearSelfAndDescendantCache(a);
+ }),
+ this.on('listeningChange.konva', function () {
+ this._clearSelfAndDescendantCache(e);
+ }),
+ this.on('opacityChange.konva', function () {
+ this._clearSelfAndDescendantCache(p);
+ });
+ },
+ _clearCache: function (t) {
+ t ? delete this._cache[t] : (this._cache = {});
+ },
+ _getCache: function (t, e) {
+ return void 0 === this._cache[t] && (this._cache[t] = e.call(this)), this._cache[t];
+ },
+ _clearSelfAndDescendantCache: function (e) {
+ this._clearCache(e),
+ this.children &&
+ this.getChildren().each(function (t) {
+ t._clearSelfAndDescendantCache(e);
+ });
+ },
+ clearCache: function () {
+ return delete this._cache.canvas, (this._filterUpToDate = !1), this;
+ },
+ cache: function (t) {
+ var e = t || {},
+ i = this.getClientRect({ skipTransform: !0, relativeTo: this.getParent() }),
+ n = e.width || i.width,
+ a = e.height || i.height,
+ r = e.pixelRatio,
+ o = e.x || i.x,
+ s = e.y || i.y,
+ h = e.offset || 0,
+ l = e.drawBorder || !1;
+ if (n && a) {
+ (n += 2 * h), (a += 2 * h), (o -= h), (s -= h);
+ var c = new v.SceneCanvas({ pixelRatio: r, width: n, height: a }),
+ d = new v.SceneCanvas({ pixelRatio: r, width: n, height: a }),
+ u = new v.HitCanvas({ pixelRatio: 1, width: n, height: a }),
+ g = c.getContext(),
+ f = u.getContext();
+ return (
+ (u.isCache = !0),
+ this.clearCache(),
+ g.save(),
+ f.save(),
+ g.translate(-o, -s),
+ f.translate(-o, -s),
+ (this._isUnderCache = !0),
+ this._clearSelfAndDescendantCache(p),
+ this._clearSelfAndDescendantCache(m),
+ this.drawScene(c, this, !0),
+ this.drawHit(u, this, !0),
+ (this._isUnderCache = !1),
+ g.restore(),
+ f.restore(),
+ l &&
+ (g.save(),
+ g.beginPath(),
+ g.rect(0, 0, n, a),
+ g.closePath(),
+ g.setAttr('strokeStyle', 'red'),
+ g.setAttr('lineWidth', 5),
+ g.stroke(),
+ g.restore()),
+ (this._cache.canvas = { scene: c, filter: d, hit: u, x: o, y: s }),
+ this
+ );
+ }
+ v.Util.error('Can not cache the node. Width or height of the node equals 0. Caching is skipped.');
+ },
+ getClientRect: function () {
+ throw new Error('abstract "getClientRect" method call');
+ },
+ _transformedRect: function (t, e) {
+ var i,
+ n,
+ a,
+ r,
+ o = [
+ { x: t.x, y: t.y },
+ { x: t.x + t.width, y: t.y },
+ { x: t.x + t.width, y: t.y + t.height },
+ { x: t.x, y: t.y + t.height },
+ ],
+ s = this.getAbsoluteTransform(e);
+ return (
+ o.forEach(function (t) {
+ var e = s.point(t);
+ void 0 === i && ((i = a = e.x), (n = r = e.y)),
+ (i = Math.min(i, e.x)),
+ (n = Math.min(n, e.y)),
+ (a = Math.max(a, e.x)),
+ (r = Math.max(r, e.y));
+ }),
+ { x: i, y: n, width: a - i, height: r - n }
+ );
+ },
+ _drawCachedSceneCanvas: function (t) {
+ t.save(),
+ t._applyOpacity(this),
+ t._applyGlobalCompositeOperation(this),
+ t.translate(this._cache.canvas.x, this._cache.canvas.y);
+ var e = this._getCachedSceneCanvas(),
+ i = e.pixelRatio;
+ t.drawImage(e._canvas, 0, 0, e.width / i, e.height / i), t.restore();
+ },
+ _drawCachedHitCanvas: function (t) {
+ var e = this._cache.canvas.hit;
+ t.save(), t.translate(this._cache.canvas.x, this._cache.canvas.y), t.drawImage(e._canvas, 0, 0), t.restore();
+ },
+ _getCachedSceneCanvas: function () {
+ var t,
+ e,
+ i,
+ n,
+ a = this.filters(),
+ r = this._cache.canvas,
+ o = r.scene,
+ s = r.filter,
+ h = s.getContext();
+ if (a) {
+ if (!this._filterUpToDate) {
+ var l = o.pixelRatio;
+ try {
+ for (
+ t = a.length,
+ h.clear(),
+ h.drawImage(o._canvas, 0, 0, o.getWidth() / l, o.getHeight() / l),
+ e = h.getImageData(0, 0, s.getWidth(), s.getHeight()),
+ i = 0;
+ i < t;
+ i++
+ )
+ 'function' == typeof (n = a[i])
+ ? (n.call(this, e), h.putImageData(e, 0, 0))
+ : v.Util.error(
+ 'Filter should be type of function, but got ' +
+ typeof n +
+ ' insted. Please check correct filters',
+ );
+ } catch (t) {
+ v.Util.error('Unable to apply filter. ' + t.message);
+ }
+ this._filterUpToDate = !0;
+ }
+ return s;
+ }
+ return o;
+ },
+ on: function (t, e) {
+ if (3 === arguments.length) return this._delegate.apply(this, arguments);
+ var i,
+ n,
+ a,
+ r,
+ o = t.split(' '),
+ s = o.length;
+ for (i = 0; i < s; i++)
+ (a = (n = o[i].split('.'))[0]),
+ (r = n[1] || ''),
+ this.eventListeners[a] || (this.eventListeners[a] = []),
+ this.eventListeners[a].push({ name: r, handler: e });
+ return this;
+ },
+ off: function (t, e) {
+ var i,
+ n,
+ a,
+ r,
+ o,
+ s = (t || '').split(' '),
+ h = s.length;
+ if (!t) for (n in this.eventListeners) this._off(n);
+ for (i = 0; i < h; i++)
+ if (((r = (a = s[i].split('.'))[0]), (o = a[1]), r)) this.eventListeners[r] && this._off(r, o, e);
+ else for (n in this.eventListeners) this._off(n, o, e);
+ return this;
+ },
+ dispatchEvent: function (t) {
+ var e = { target: this, type: t.type, evt: t };
+ return this.fire(t.type, e), this;
+ },
+ addEventListener: function (t, e) {
+ return (
+ this.on(t, function (t) {
+ e.call(this, t.evt);
+ }),
+ this
+ );
+ },
+ removeEventListener: function (t) {
+ return this.off(t), this;
+ },
+ _delegate: function (t, n, a) {
+ var r = this;
+ this.on(t, function (t) {
+ for (var e = t.target.findAncestors(n, !0, r), i = 0; i < e.length; i++)
+ ((t = v.Util.cloneObject(t)).currentTarget = e[i]), a.call(e[i], t);
+ });
+ },
+ remove: function () {
+ var t = this.getParent();
+ return (
+ t && t.children && (t.children.splice(this.index, 1), t._setChildrenIndices(), delete this.parent),
+ this._clearSelfAndDescendantCache('stage'),
+ this._clearSelfAndDescendantCache(i),
+ this._clearSelfAndDescendantCache(a),
+ this._clearSelfAndDescendantCache(e),
+ this._clearSelfAndDescendantCache(p),
+ this
+ );
+ },
+ destroy: function () {
+ v._removeId(this.getId());
+ for (var t = (this.getName() || '').split(/\s/g), e = 0; e < t.length; e++) {
+ var i = t[e];
+ v._removeName(i, this._id);
+ }
+ return this.remove(), this;
+ },
+ getAttr: function (t) {
+ var e = 'get' + v.Util._capitalize(t);
+ return v.Util._isFunction(this[e]) ? this[e]() : this.attrs[t];
+ },
+ getAncestors: function () {
+ for (var t = this.getParent(), e = new v.Collection(); t; ) e.push(t), (t = t.getParent());
+ return e;
+ },
+ getAttrs: function () {
+ return this.attrs || {};
+ },
+ setAttrs: function (t) {
+ var e, i;
+ if (!t) return this;
+ for (e in t)
+ 'children' !== e &&
+ ((i = 'set' + v.Util._capitalize(e)),
+ v.Util._isFunction(this[i]) ? this[i](t[e]) : this._setAttr(e, t[e]));
+ return this;
+ },
+ isListening: function () {
+ return this._getCache(e, this._isListening);
+ },
+ _isListening: function () {
+ var t = this.getListening(),
+ e = this.getParent();
+ return 'inherit' === t ? !e || e.isListening() : t;
+ },
+ isVisible: function () {
+ return this._getCache(a, this._isVisible);
+ },
+ _isVisible: function (t) {
+ var e = this.getVisible(),
+ i = this.getParent();
+ return (t === i && 'inherit' === e) || (t === i ? e : 'inherit' === e ? !i || i._isVisible(t) : e);
+ },
+ shouldDrawHit: function () {
+ var t = this.getLayer();
+ return (
+ (!t && this.isListening() && this.isVisible()) ||
+ (t && t.hitGraphEnabled() && this.isListening() && this.isVisible())
+ );
+ },
+ show: function () {
+ return this.setVisible(!0), this;
+ },
+ hide: function () {
+ return this.setVisible(!1), this;
+ },
+ getZIndex: function () {
+ return this.index || 0;
+ },
+ getAbsoluteZIndex: function () {
+ var i,
+ n,
+ a,
+ r,
+ o = this.getDepth(),
+ s = this,
+ h = 0;
+ return (
+ 'Stage' !== s.nodeType &&
+ (function t(e) {
+ for (i = [], n = e.length, a = 0; a < n; a++)
+ (r = e[a]),
+ h++,
+ r.nodeType !== l && (i = i.concat(r.getChildren().toArray())),
+ r._id === s._id && (a = n);
+ 0 < i.length && i[0].getDepth() <= o && t(i);
+ })(s.getStage().getChildren()),
+ h
+ );
+ },
+ getDepth: function () {
+ for (var t = 0, e = this.parent; e; ) t++, (e = e.parent);
+ return t;
+ },
+ setPosition: function (t) {
+ return this.setX(t.x), this.setY(t.y), this;
+ },
+ getPosition: function () {
+ return { x: this.getX(), y: this.getY() };
+ },
+ getAbsolutePosition: function (t) {
+ var e = this.getAbsoluteTransform(t).getMatrix(),
+ i = new v.Transform(),
+ n = this.offset();
+ return (i.m = e.slice()), i.translate(n.x, n.y), i.getTranslation();
+ },
+ setAbsolutePosition: function (t) {
+ var e,
+ i = this._clearTransform();
+ return (
+ (this.attrs.x = i.x),
+ (this.attrs.y = i.y),
+ delete i.x,
+ delete i.y,
+ (e = this.getAbsoluteTransform()).invert(),
+ e.translate(t.x, t.y),
+ (t = { x: this.attrs.x + e.getTranslation().x, y: this.attrs.y + e.getTranslation().y }),
+ this.setPosition({ x: t.x, y: t.y }),
+ this._setTransform(i),
+ this
+ );
+ },
+ _setTransform: function (t) {
+ var e;
+ for (e in t) this.attrs[e] = t[e];
+ this._clearCache(n), this._clearSelfAndDescendantCache(i);
+ },
+ _clearTransform: function () {
+ var t = {
+ x: this.getX(),
+ y: this.getY(),
+ rotation: this.getRotation(),
+ scaleX: this.getScaleX(),
+ scaleY: this.getScaleY(),
+ offsetX: this.getOffsetX(),
+ offsetY: this.getOffsetY(),
+ skewX: this.getSkewX(),
+ skewY: this.getSkewY(),
+ };
+ return (
+ (this.attrs.x = 0),
+ (this.attrs.y = 0),
+ (this.attrs.rotation = 0),
+ (this.attrs.scaleX = 1),
+ (this.attrs.scaleY = 1),
+ (this.attrs.offsetX = 0),
+ (this.attrs.offsetY = 0),
+ (this.attrs.skewX = 0),
+ (this.attrs.skewY = 0),
+ this._clearCache(n),
+ this._clearSelfAndDescendantCache(i),
+ t
+ );
+ },
+ move: function (t) {
+ var e = t.x,
+ i = t.y,
+ n = this.getX(),
+ a = this.getY();
+ return void 0 !== e && (n += e), void 0 !== i && (a += i), this.setPosition({ x: n, y: a }), this;
+ },
+ _eachAncestorReverse: function (t, e) {
+ var i,
+ n,
+ a = [],
+ r = this.getParent();
+ if (e && e._id === this._id) t(this);
+ else {
+ for (a.unshift(this); r && (!e || r._id !== e._id); ) a.unshift(r), (r = r.parent);
+ for (i = a.length, n = 0; n < i; n++) t(a[n]);
+ }
+ },
+ rotate: function (t) {
+ return this.setRotation(this.getRotation() + t), this;
+ },
+ moveToTop: function () {
+ if (!this.parent) return v.Util.warn('Node has no parent. moveToTop function is ignored.'), !1;
+ var t = this.index;
+ return (
+ this.parent.children.splice(t, 1), this.parent.children.push(this), this.parent._setChildrenIndices(), !0
+ );
+ },
+ moveUp: function () {
+ if (!this.parent) return v.Util.warn('Node has no parent. moveUp function is ignored.'), !1;
+ var t = this.index;
+ return (
+ t < this.parent.getChildren().length - 1 &&
+ (this.parent.children.splice(t, 1),
+ this.parent.children.splice(t + 1, 0, this),
+ this.parent._setChildrenIndices(),
+ !0)
+ );
+ },
+ moveDown: function () {
+ if (!this.parent) return v.Util.warn('Node has no parent. moveDown function is ignored.'), !1;
+ var t = this.index;
+ return (
+ 0 < t &&
+ (this.parent.children.splice(t, 1),
+ this.parent.children.splice(t - 1, 0, this),
+ this.parent._setChildrenIndices(),
+ !0)
+ );
+ },
+ moveToBottom: function () {
+ if (!this.parent) return v.Util.warn('Node has no parent. moveToBottom function is ignored.'), !1;
+ var t = this.index;
+ return (
+ 0 < t &&
+ (this.parent.children.splice(t, 1),
+ this.parent.children.unshift(this),
+ this.parent._setChildrenIndices(),
+ !0)
+ );
+ },
+ setZIndex: function (t) {
+ if (!this.parent) return v.Util.warn('Node has no parent. zIndex parameter is ignored.'), !1;
+ var e = this.index;
+ return (
+ this.parent.children.splice(e, 1),
+ this.parent.children.splice(t, 0, this),
+ this.parent._setChildrenIndices(),
+ this
+ );
+ },
+ getAbsoluteOpacity: function () {
+ return this._getCache(p, this._getAbsoluteOpacity);
+ },
+ _getAbsoluteOpacity: function () {
+ var t = this.getOpacity(),
+ e = this.getParent();
+ return e && !e._isUnderCache && (t *= this.getParent().getAbsoluteOpacity()), t;
+ },
+ moveTo: function (t) {
+ return this.getParent() !== t && ((this.__originalRemove || this.remove).call(this), t.add(this)), this;
+ },
+ toObject: function () {
+ var t,
+ e,
+ i,
+ n = {},
+ a = this.getAttrs();
+ for (t in ((n.attrs = {}), a))
+ (e = a[t]),
+ (i = 'function' == typeof this[t] && this[t]),
+ delete a[t],
+ (i ? i.call(this) : null) !== (a[t] = e) && (n.attrs[t] = e);
+ return (n.className = this.getClassName()), v.Util._prepareToStringify(n);
+ },
+ toJSON: function () {
+ return JSON.stringify(this.toObject());
+ },
+ getParent: function () {
+ return this.parent;
+ },
+ findAncestors: function (t, e, i) {
+ var n = [];
+ e && this._isMatch(t) && n.push(this);
+ for (var a = this.parent; a; ) {
+ if (a === i) return n;
+ a._isMatch(t) && n.push(a), (a = a.parent);
+ }
+ return n;
+ },
+ findAncestor: function (t, e, i) {
+ return this.findAncestors(t, e, i)[0];
+ },
+ _isMatch: function (t) {
+ if (!t) return !1;
+ var e,
+ i,
+ n = t.replace(/ /g, '').split(','),
+ a = n.length;
+ for (e = 0; e < a; e++)
+ if (
+ ((i = n[e]),
+ v.Util.isValidSelector(i) ||
+ (v.Util.warn(
+ 'Selector "' + i + '" is invalid. Allowed selectors examples are "#foo", ".bar" or "Group".',
+ ),
+ v.Util.warn(
+ 'If you have a custom shape with such className, please change it to start with upper letter like "Triangle".',
+ ),
+ v.Util.warn('Konva is awesome, right?')),
+ '#' === i.charAt(0))
+ ) {
+ if (this.id() === i.slice(1)) return !0;
+ } else if ('.' === i.charAt(0)) {
+ if (this.hasName(i.slice(1))) return !0;
+ } else if (0 !== this._get(i).length) return !0;
+ return !1;
+ },
+ getLayer: function () {
+ var t = this.getParent();
+ return t ? t.getLayer() : null;
+ },
+ getStage: function () {
+ return this._getCache('stage', this._getStage);
+ },
+ _getStage: function () {
+ var t = this.getParent();
+ return t ? t.getStage() : void 0;
+ },
+ fire: function (t, e, i) {
+ return ((e = e || {}).target = e.target || this), i ? this._fireAndBubble(t, e) : this._fire(t, e), this;
+ },
+ getAbsoluteTransform: function (t) {
+ return t ? this._getAbsoluteTransform(t) : this._getCache(i, this._getAbsoluteTransform);
+ },
+ _getAbsoluteTransform: function (t) {
+ var i = new v.Transform();
+ return (
+ this._eachAncestorReverse(function (t) {
+ var e = t.transformsEnabled();
+ 'all' === e
+ ? i.multiply(t.getTransform())
+ : 'position' === e && i.translate(t.getX() - t.getOffsetX(), t.getY() - t.getOffsetY());
+ }, t),
+ i
+ );
+ },
+ getAbsoluteScale: function (t) {
+ return t ? this._getAbsoluteScale(t) : this._getCache(m, this._getAbsoluteScale);
+ },
+ _getAbsoluteScale: function (t) {
+ for (var e = this; e; ) e._isUnderCache && (t = e), (e = e.getParent());
+ var i = 1,
+ n = 1;
+ return (
+ this._eachAncestorReverse(function (t) {
+ (i *= t.scaleX()), (n *= t.scaleY());
+ }, t),
+ { x: i, y: n }
+ );
+ },
+ getTransform: function () {
+ return this._getCache(n, this._getTransform);
+ },
+ _getTransform: function () {
+ var t = new v.Transform(),
+ e = this.getX(),
+ i = this.getY(),
+ n = v.getAngle(this.getRotation()),
+ a = this.getScaleX(),
+ r = this.getScaleY(),
+ o = this.getSkewX(),
+ s = this.getSkewY(),
+ h = this.getOffsetX(),
+ l = this.getOffsetY();
+ return (
+ (0 === e && 0 === i) || t.translate(e, i),
+ 0 !== n && t.rotate(n),
+ (0 === o && 0 === s) || t.skew(o, s),
+ (1 === a && 1 === r) || t.scale(a, r),
+ (0 === h && 0 === l) || t.translate(-1 * h, -1 * l),
+ t
+ );
+ },
+ clone: function (t) {
+ var e,
+ i,
+ n,
+ a,
+ r,
+ o = v.Util.cloneObject(this.attrs);
+ for (var s in c) {
+ delete o[c[s]];
+ }
+ for (e in t) o[e] = t[e];
+ var h = new this.constructor(o);
+ for (e in this.eventListeners)
+ for (n = (i = this.eventListeners[e]).length, a = 0; a < n; a++)
+ (r = i[a]).name.indexOf('konva') < 0 &&
+ (h.eventListeners[e] || (h.eventListeners[e] = []), h.eventListeners[e].push(r));
+ return h;
+ },
+ _toKonvaCanvas: function (t) {
+ t = t || {};
+ var e = this.getClientRect(),
+ i = this.getStage(),
+ n = void 0 !== t.x ? t.x : e.x,
+ a = void 0 !== t.y ? t.y : e.y,
+ r = t.pixelRatio || 1,
+ o = new v.SceneCanvas({
+ width: t.width || e.width || (i ? i.getWidth() : 0),
+ height: t.height || e.height || (i ? i.getHeight() : 0),
+ pixelRatio: r,
+ }),
+ s = o.getContext();
+ return s.save(), (n || a) && s.translate(-1 * n, -1 * a), this.drawScene(o), s.restore(), o;
+ },
+ toCanvas: function (t) {
+ return this._toKonvaCanvas(t)._canvas;
+ },
+ toDataURL: function (t) {
+ var e = (t = t || {}).mimeType || null,
+ i = t.quality || null,
+ n = this._toKonvaCanvas(t).toDataURL(e, i);
+ return t.callback && t.callback(n), n;
+ },
+ toImage: function (t) {
+ if (!t || !t.callback) throw 'callback required for toImage method config argument';
+ var e = t.callback;
+ delete t.callback,
+ v.Util._getImage(this.toDataURL(t), function (t) {
+ e(t);
+ });
+ },
+ setSize: function (t) {
+ return this.setWidth(t.width), this.setHeight(t.height), this;
+ },
+ getSize: function () {
+ return { width: this.getWidth(), height: this.getHeight() };
+ },
+ getWidth: function () {
+ return this.attrs.width || 0;
+ },
+ getHeight: function () {
+ return this.attrs.height || 0;
+ },
+ getClassName: function () {
+ return this.className || this.nodeType;
+ },
+ getType: function () {
+ return this.nodeType;
+ },
+ getDragDistance: function () {
+ return void 0 !== this.attrs.dragDistance
+ ? this.attrs.dragDistance
+ : this.parent
+ ? this.parent.getDragDistance()
+ : v.dragDistance;
+ },
+ _get: function (t) {
+ return this.className === t || this.nodeType === t ? [this] : [];
+ },
+ _off: function (t, e, i) {
+ var n,
+ a,
+ r,
+ o = this.eventListeners[t];
+ for (n = 0; n < o.length; n++)
+ if (
+ ((a = o[n].name),
+ (r = o[n].handler),
+ !(('konva' === a && 'konva' !== e) || (e && a !== e) || (i && i !== r)))
+ ) {
+ if ((o.splice(n, 1), 0 === o.length)) {
+ delete this.eventListeners[t];
+ break;
+ }
+ n--;
+ }
+ },
+ _fireChangeEvent: function (t, e, i) {
+ this._fire(t + 'Change', { oldVal: e, newVal: i });
+ },
+ setId: function (t) {
+ var e = this.getId();
+ return v._removeId(e), v._addId(this, t), this._setAttr('id', t), this;
+ },
+ setName: function (t) {
+ var e,
+ i,
+ n = (this.getName() || '').split(/\s/g),
+ a = (t || '').split(/\s/g);
+ for (i = 0; i < n.length; i++) (e = n[i]), -1 === a.indexOf(e) && e && v._removeName(e, this._id);
+ for (i = 0; i < a.length; i++) (e = a[i]), -1 === n.indexOf(e) && e && v._addName(this, e);
+ return this._setAttr('name', t), this;
+ },
+ addName: function (t) {
+ if (!this.hasName(t)) {
+ var e = this.name(),
+ i = e ? e + ' ' + t : t;
+ this.setName(i);
+ }
+ return this;
+ },
+ hasName: function (t) {
+ return -1 !== (this.name() || '').split(/\s/g).indexOf(t);
+ },
+ removeName: function (t) {
+ var e = (this.name() || '').split(/\s/g),
+ i = e.indexOf(t);
+ return -1 !== i && (e.splice(i, 1), this.setName(e.join(' '))), this;
+ },
+ setAttr: function (t, e) {
+ var i = this['set' + v.Util._capitalize(t)];
+ return v.Util._isFunction(i) ? i.call(this, e) : this._setAttr(t, e), this;
+ },
+ _setAttr: function (t, e) {
+ var i;
+ ((i = this.attrs[t]) === e && !v.Util.isObject(e)) ||
+ (null == e ? delete this.attrs[t] : (this.attrs[t] = e), this._fireChangeEvent(t, i, e));
+ },
+ _setComponentAttr: function (t, e, i) {
+ var n;
+ void 0 !== i &&
+ ((n = this.attrs[t]) || (this.attrs[t] = this.getAttr(t)),
+ (this.attrs[t][e] = i),
+ this._fireChangeEvent(t, n, i));
+ },
+ _fireAndBubble: function (t, e, i) {
+ var n = !0;
+ if (
+ (e && this.nodeType === l && (e.target = this),
+ t === r && i && (this._id === i._id || (this.isAncestorOf && this.isAncestorOf(i)))
+ ? (n = !1)
+ : t === o && i && (this._id === i._id || (this.isAncestorOf && this.isAncestorOf(i))) && (n = !1),
+ n)
+ ) {
+ this._fire(t, e);
+ var a = (t === r || t === o) && i && i.isAncestorOf && i.isAncestorOf(this) && !i.isAncestorOf(this.parent);
+ ((e && !e.cancelBubble) || !e) &&
+ this.parent &&
+ this.parent.isListening() &&
+ !a &&
+ (i && i.parent
+ ? this._fireAndBubble.call(this.parent, t, e, i.parent)
+ : this._fireAndBubble.call(this.parent, t, e));
+ }
+ },
+ _fire: function (t, e) {
+ var i,
+ n = this.eventListeners[t];
+ if ((((e = e || {}).currentTarget = this), (e.type = t), n))
+ for (i = 0; i < n.length; i++) n[i].handler.call(this, e);
+ },
+ draw: function () {
+ return this.drawScene(), this.drawHit(), this;
+ },
+ }),
+ (v.Node.create = function (t, e) {
+ return v.Util._isString(t) && (t = JSON.parse(t)), this._createNode(t, e);
+ }),
+ (v.Node._createNode = function (t, e) {
+ var i,
+ n,
+ a,
+ r = v.Node.prototype.getClassName.call(t),
+ o = t.children;
+ if ((e && (t.attrs.container = e), (i = new v[r](t.attrs)), o))
+ for (n = o.length, a = 0; a < n; a++) i.add(this._createNode(o[a]));
+ return i;
+ }),
+ v.Factory.addOverloadedGetterSetter(v.Node, 'position'),
+ v.Factory.addGetterSetter(v.Node, 'x', 0, v.Validators.getNumberValidator()),
+ v.Factory.addGetterSetter(v.Node, 'y', 0, v.Validators.getNumberValidator()),
+ v.Factory.addGetterSetter(v.Node, 'globalCompositeOperation', 'source-over', v.Validators.getStringValidator()),
+ v.Factory.addGetterSetter(v.Node, 'opacity', 1, v.Validators.getNumberValidator()),
+ v.Factory.addGetter(v.Node, 'name'),
+ v.Factory.addOverloadedGetterSetter(v.Node, 'name'),
+ v.Factory.addGetter(v.Node, 'id'),
+ v.Factory.addOverloadedGetterSetter(v.Node, 'id'),
+ v.Factory.addGetterSetter(v.Node, 'rotation', 0, v.Validators.getNumberValidator()),
+ v.Factory.addComponentsGetterSetter(v.Node, 'scale', ['x', 'y']),
+ v.Factory.addGetterSetter(v.Node, 'scaleX', 1, v.Validators.getNumberValidator()),
+ v.Factory.addGetterSetter(v.Node, 'scaleY', 1, v.Validators.getNumberValidator()),
+ v.Factory.addComponentsGetterSetter(v.Node, 'skew', ['x', 'y']),
+ v.Factory.addGetterSetter(v.Node, 'skewX', 0, v.Validators.getNumberValidator()),
+ v.Factory.addGetterSetter(v.Node, 'skewY', 0, v.Validators.getNumberValidator()),
+ v.Factory.addComponentsGetterSetter(v.Node, 'offset', ['x', 'y']),
+ v.Factory.addGetterSetter(v.Node, 'offsetX', 0, v.Validators.getNumberValidator()),
+ v.Factory.addGetterSetter(v.Node, 'offsetY', 0, v.Validators.getNumberValidator()),
+ v.Factory.addSetter(v.Node, 'dragDistance', v.Validators.getNumberValidator()),
+ v.Factory.addOverloadedGetterSetter(v.Node, 'dragDistance'),
+ v.Factory.addSetter(v.Node, 'width', v.Validators.getNumberValidator()),
+ v.Factory.addOverloadedGetterSetter(v.Node, 'width'),
+ v.Factory.addSetter(v.Node, 'height', v.Validators.getNumberValidator()),
+ v.Factory.addOverloadedGetterSetter(v.Node, 'height'),
+ v.Factory.addGetterSetter(v.Node, 'listening', 'inherit', function (t) {
+ return (
+ !0 === t ||
+ !1 === t ||
+ 'inherit' === t ||
+ v.Util.warn(
+ t + ' is a not valid value for "listening" attribute. The value may be true, false or "inherit".',
+ ),
+ t
+ );
+ }),
+ v.Factory.addGetterSetter(v.Node, 'preventDefault', !0, v.Validators.getBooleanValidator()),
+ v.Factory.addGetterSetter(v.Node, 'filters', null, function (t) {
+ return (this._filterUpToDate = !1), t;
+ }),
+ v.Factory.addGetterSetter(v.Node, 'visible', 'inherit', function (t) {
+ return (
+ !0 === t ||
+ !1 === t ||
+ 'inherit' === t ||
+ v.Util.warn(
+ t + ' is a not valid value for "visible" attribute. The value may be true, false or "inherit".',
+ ),
+ t
+ );
+ }),
+ v.Factory.addGetterSetter(v.Node, 'transformsEnabled', 'all', v.Validators.getStringValidator()),
+ v.Factory.addOverloadedGetterSetter(v.Node, 'size'),
+ v.Factory.backCompat(v.Node, {
+ rotateDeg: 'rotate',
+ setRotationDeg: 'setRotation',
+ getRotationDeg: 'getRotation',
+ }),
+ v.Collection.mapMethods(v.Node);
+ })(Konva),
+ (function () {
+ 'use strict';
+ Konva.Filters.Grayscale = function (t) {
+ var e,
+ i,
+ n = t.data,
+ a = n.length;
+ for (e = 0; e < a; e += 4)
+ (i = 0.34 * n[e] + 0.5 * n[e + 1] + 0.16 * n[e + 2]), (n[e] = i), (n[e + 1] = i), (n[e + 2] = i);
+ };
+ })(),
+ (function (t) {
+ 'use strict';
+ (t.Filters.Brighten = function (t) {
+ var e,
+ i = 255 * this.brightness(),
+ n = t.data,
+ a = n.length;
+ for (e = 0; e < a; e += 4) (n[e] += i), (n[e + 1] += i), (n[e + 2] += i);
+ }),
+ t.Factory.addGetterSetter(t.Node, 'brightness', 0, t.Validators.getNumberValidator(), t.Factory.afterSetFilter);
+ })(Konva),
+ (function () {
+ 'use strict';
+ Konva.Filters.Invert = function (t) {
+ var e,
+ i = t.data,
+ n = i.length;
+ for (e = 0; e < n; e += 4) (i[e] = 255 - i[e]), (i[e + 1] = 255 - i[e + 1]), (i[e + 2] = 255 - i[e + 2]);
+ };
+ })(),
+ (function (t) {
+ 'use strict';
+ function E() {
+ (this.r = 0), (this.g = 0), (this.b = 0), (this.a = 0), (this.next = null);
+ }
+ var B = [
+ 512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512, 454, 405, 364, 328, 298, 271,
+ 496, 456, 420, 388, 360, 335, 312, 292, 273, 512, 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271,
+ 259, 496, 475, 456, 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512, 497, 482,
+ 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328, 320, 312, 305, 298, 291, 284, 278, 271,
+ 265, 259, 507, 496, 485, 475, 465, 456, 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347,
+ 341, 335, 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512, 505, 497, 489, 482,
+ 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405, 399, 394, 389, 383, 378, 373, 368, 364, 359, 354,
+ 350, 345, 341, 337, 332, 328, 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271,
+ 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456, 451, 446, 442, 437, 433, 428,
+ 424, 420, 416, 412, 408, 404, 400, 396, 392, 388, 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347,
+ 344, 341, 338, 335, 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292, 289, 287,
+ 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259,
+ ],
+ z = [
+ 9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24,
+ ];
+ (t.Filters.Blur = function (t) {
+ var e = Math.round(this.blurRadius());
+ 0 < e &&
+ (function (t, e) {
+ var i,
+ n,
+ a,
+ r,
+ o,
+ s,
+ h,
+ l,
+ c,
+ d,
+ u,
+ g,
+ f,
+ v,
+ p,
+ m,
+ _,
+ y,
+ K,
+ S,
+ b,
+ x,
+ C,
+ w,
+ F = t.data,
+ T = t.width,
+ P = t.height,
+ A = e + e + 1,
+ M = T - 1,
+ k = P - 1,
+ G = e + 1,
+ N = (G * (G + 1)) / 2,
+ R = new E(),
+ D = null,
+ L = R,
+ O = null,
+ V = null,
+ U = B[e],
+ I = z[e];
+ for (a = 1; a < A; a++) (L = L.next = new E()), a === G && (D = L);
+ for (L.next = R, h = s = 0, n = 0; n < P; n++) {
+ for (
+ m = _ = y = K = l = c = d = u = 0,
+ g = G * (S = F[s]),
+ f = G * (b = F[s + 1]),
+ v = G * (x = F[s + 2]),
+ p = G * (C = F[s + 3]),
+ l += N * S,
+ c += N * b,
+ d += N * x,
+ u += N * C,
+ L = R,
+ a = 0;
+ a < G;
+ a++
+ )
+ (L.r = S), (L.g = b), (L.b = x), (L.a = C), (L = L.next);
+ for (a = 1; a < G; a++)
+ (r = s + ((M < a ? M : a) << 2)),
+ (l += (L.r = S = F[r]) * (w = G - a)),
+ (c += (L.g = b = F[r + 1]) * w),
+ (d += (L.b = x = F[r + 2]) * w),
+ (u += (L.a = C = F[r + 3]) * w),
+ (m += S),
+ (_ += b),
+ (y += x),
+ (K += C),
+ (L = L.next);
+ for (O = R, V = D, i = 0; i < T; i++)
+ (F[s + 3] = C = (u * U) >> I),
+ 0 !== C
+ ? ((C = 255 / C),
+ (F[s] = ((l * U) >> I) * C),
+ (F[s + 1] = ((c * U) >> I) * C),
+ (F[s + 2] = ((d * U) >> I) * C))
+ : (F[s] = F[s + 1] = F[s + 2] = 0),
+ (l -= g),
+ (c -= f),
+ (d -= v),
+ (u -= p),
+ (g -= O.r),
+ (f -= O.g),
+ (v -= O.b),
+ (p -= O.a),
+ (r = (h + ((r = i + e + 1) < M ? r : M)) << 2),
+ (l += m += O.r = F[r]),
+ (c += _ += O.g = F[r + 1]),
+ (d += y += O.b = F[r + 2]),
+ (u += K += O.a = F[r + 3]),
+ (O = O.next),
+ (g += S = V.r),
+ (f += b = V.g),
+ (v += x = V.b),
+ (p += C = V.a),
+ (m -= S),
+ (_ -= b),
+ (y -= x),
+ (K -= C),
+ (V = V.next),
+ (s += 4);
+ h += T;
+ }
+ for (i = 0; i < T; i++) {
+ for (
+ _ = y = K = m = c = d = u = l = 0,
+ g = G * (S = F[(s = i << 2)]),
+ f = G * (b = F[s + 1]),
+ v = G * (x = F[s + 2]),
+ p = G * (C = F[s + 3]),
+ l += N * S,
+ c += N * b,
+ d += N * x,
+ u += N * C,
+ L = R,
+ a = 0;
+ a < G;
+ a++
+ )
+ (L.r = S), (L.g = b), (L.b = x), (L.a = C), (L = L.next);
+ for (o = T, a = 1; a <= e; a++)
+ (s = (o + i) << 2),
+ (l += (L.r = S = F[s]) * (w = G - a)),
+ (c += (L.g = b = F[s + 1]) * w),
+ (d += (L.b = x = F[s + 2]) * w),
+ (u += (L.a = C = F[s + 3]) * w),
+ (m += S),
+ (_ += b),
+ (y += x),
+ (K += C),
+ (L = L.next),
+ a < k && (o += T);
+ for (s = i, O = R, V = D, n = 0; n < P; n++)
+ (F[3 + (r = s << 2)] = C = (u * U) >> I),
+ 0 < C
+ ? ((C = 255 / C),
+ (F[r] = ((l * U) >> I) * C),
+ (F[r + 1] = ((c * U) >> I) * C),
+ (F[r + 2] = ((d * U) >> I) * C))
+ : (F[r] = F[r + 1] = F[r + 2] = 0),
+ (l -= g),
+ (c -= f),
+ (d -= v),
+ (u -= p),
+ (g -= O.r),
+ (f -= O.g),
+ (v -= O.b),
+ (p -= O.a),
+ (r = (i + ((r = n + G) < k ? r : k) * T) << 2),
+ (l += m += O.r = F[r]),
+ (c += _ += O.g = F[r + 1]),
+ (d += y += O.b = F[r + 2]),
+ (u += K += O.a = F[r + 3]),
+ (O = O.next),
+ (g += S = V.r),
+ (f += b = V.g),
+ (v += x = V.b),
+ (p += C = V.a),
+ (m -= S),
+ (_ -= b),
+ (y -= x),
+ (K -= C),
+ (V = V.next),
+ (s += T);
+ }
+ })(t, e);
+ }),
+ t.Factory.addGetterSetter(t.Node, 'blurRadius', 0, t.Validators.getNumberValidator(), t.Factory.afterSetFilter);
+ })(Konva),
+ (function () {
+ 'use strict';
+ function d(t, e, i) {
+ var n = 4 * (i * t.width + e),
+ a = [];
+ return a.push(t.data[n++], t.data[n++], t.data[n++], t.data[n++]), a;
+ }
+ function u(t, e) {
+ return Math.sqrt(Math.pow(t[0] - e[0], 2) + Math.pow(t[1] - e[1], 2) + Math.pow(t[2] - e[2], 2));
+ }
+ (Konva.Filters.Mask = function (t) {
+ var e = (function (t, e) {
+ var i = d(t, 0, 0),
+ n = d(t, t.width - 1, 0),
+ a = d(t, 0, t.height - 1),
+ r = d(t, t.width - 1, t.height - 1),
+ o = e || 10;
+ if (u(i, n) < o && u(n, r) < o && u(r, a) < o && u(a, i) < o) {
+ for (
+ var s = (function (t) {
+ for (var e = [0, 0, 0], i = 0; i < t.length; i++)
+ (e[0] += t[i][0]), (e[1] += t[i][1]), (e[2] += t[i][2]);
+ return (e[0] /= t.length), (e[1] /= t.length), (e[2] /= t.length), e;
+ })([n, i, r, a]),
+ h = [],
+ l = 0;
+ l < t.width * t.height;
+ l++
+ ) {
+ var c = u(s, [t.data[4 * l], t.data[4 * l + 1], t.data[4 * l + 2]]);
+ h[l] = c < o ? 0 : 255;
+ }
+ return h;
+ }
+ })(t, this.threshold());
+ return (
+ e &&
+ (function (t, e) {
+ for (var i = 0; i < t.width * t.height; i++) t.data[4 * i + 3] = e[i];
+ })(
+ t,
+ (e = (function (t, e, i) {
+ for (
+ var n = [1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9],
+ a = Math.round(Math.sqrt(n.length)),
+ r = Math.floor(a / 2),
+ o = [],
+ s = 0;
+ s < i;
+ s++
+ )
+ for (var h = 0; h < e; h++) {
+ for (var l = s * e + h, c = 0, d = 0; d < a; d++)
+ for (var u = 0; u < a; u++) {
+ var g = s + d - r,
+ f = h + u - r;
+ if (0 <= g && g < i && 0 <= f && f < e) {
+ var v = n[d * a + u];
+ c += t[g * e + f] * v;
+ }
+ }
+ o[l] = c;
+ }
+ return o;
+ })(
+ (e = (function (t, e, i) {
+ for (
+ var n = [1, 1, 1, 1, 1, 1, 1, 1, 1],
+ a = Math.round(Math.sqrt(n.length)),
+ r = Math.floor(a / 2),
+ o = [],
+ s = 0;
+ s < i;
+ s++
+ )
+ for (var h = 0; h < e; h++) {
+ for (var l = s * e + h, c = 0, d = 0; d < a; d++)
+ for (var u = 0; u < a; u++) {
+ var g = s + d - r,
+ f = h + u - r;
+ if (0 <= g && g < i && 0 <= f && f < e) {
+ var v = n[d * a + u];
+ c += t[g * e + f] * v;
+ }
+ }
+ o[l] = 1020 <= c ? 255 : 0;
+ }
+ return o;
+ })(
+ (e = (function (t, e, i) {
+ for (
+ var n = [1, 1, 1, 1, 0, 1, 1, 1, 1],
+ a = Math.round(Math.sqrt(n.length)),
+ r = Math.floor(a / 2),
+ o = [],
+ s = 0;
+ s < i;
+ s++
+ )
+ for (var h = 0; h < e; h++) {
+ for (var l = s * e + h, c = 0, d = 0; d < a; d++)
+ for (var u = 0; u < a; u++) {
+ var g = s + d - r,
+ f = h + u - r;
+ if (0 <= g && g < i && 0 <= f && f < e) {
+ var v = n[d * a + u];
+ c += t[g * e + f] * v;
+ }
+ }
+ o[l] = 2040 === c ? 255 : 0;
+ }
+ return o;
+ })(e, t.width, t.height)),
+ t.width,
+ t.height,
+ )),
+ t.width,
+ t.height,
+ )),
+ ),
+ t
+ );
+ }),
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'threshold',
+ 0,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ );
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Filters.RGB = function (t) {
+ var e,
+ i,
+ n = t.data,
+ a = n.length,
+ r = this.red(),
+ o = this.green(),
+ s = this.blue();
+ for (e = 0; e < a; e += 4)
+ (i = (0.34 * n[e] + 0.5 * n[e + 1] + 0.16 * n[e + 2]) / 255),
+ (n[e] = i * r),
+ (n[e + 1] = i * o),
+ (n[e + 2] = i * s),
+ (n[e + 3] = n[e + 3]);
+ }),
+ Konva.Factory.addGetterSetter(Konva.Node, 'red', 0, function (t) {
+ return (this._filterUpToDate = !1), 255 < t ? 255 : t < 0 ? 0 : Math.round(t);
+ }),
+ Konva.Factory.addGetterSetter(Konva.Node, 'green', 0, function (t) {
+ return (this._filterUpToDate = !1), 255 < t ? 255 : t < 0 ? 0 : Math.round(t);
+ }),
+ Konva.Factory.addGetterSetter(Konva.Node, 'blue', 0, Konva.Validators.RGBComponent, Konva.Factory.afterSetFilter);
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Filters.RGBA = function (t) {
+ var e,
+ i,
+ n = t.data,
+ a = n.length,
+ r = this.red(),
+ o = this.green(),
+ s = this.blue(),
+ h = this.alpha();
+ for (e = 0; e < a; e += 4)
+ (i = 1 - h), (n[e] = r * h + n[e] * i), (n[e + 1] = o * h + n[e + 1] * i), (n[e + 2] = s * h + n[e + 2] * i);
+ }),
+ Konva.Factory.addGetterSetter(Konva.Node, 'red', 0, function (t) {
+ return (this._filterUpToDate = !1), 255 < t ? 255 : t < 0 ? 0 : Math.round(t);
+ }),
+ Konva.Factory.addGetterSetter(Konva.Node, 'green', 0, function (t) {
+ return (this._filterUpToDate = !1), 255 < t ? 255 : t < 0 ? 0 : Math.round(t);
+ }),
+ Konva.Factory.addGetterSetter(Konva.Node, 'blue', 0, Konva.Validators.RGBComponent, Konva.Factory.afterSetFilter),
+ Konva.Factory.addGetterSetter(Konva.Node, 'alpha', 1, function (t) {
+ return (this._filterUpToDate = !1), 1 < t ? 1 : t < 0 ? 0 : t;
+ });
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Filters.HSV = function (t) {
+ var e,
+ i,
+ n,
+ a,
+ r,
+ o = t.data,
+ s = o.length,
+ h = Math.pow(2, this.value()),
+ l = Math.pow(2, this.saturation()),
+ c = Math.abs(this.hue() + 360) % 360,
+ d = h * l * Math.cos((c * Math.PI) / 180),
+ u = h * l * Math.sin((c * Math.PI) / 180),
+ g = 0.299 * h + 0.701 * d + 0.167 * u,
+ f = 0.587 * h - 0.587 * d + 0.33 * u,
+ v = 0.114 * h - 0.114 * d - 0.497 * u,
+ p = 0.299 * h - 0.299 * d - 0.328 * u,
+ m = 0.587 * h + 0.413 * d + 0.035 * u,
+ _ = 0.114 * h - 0.114 * d + 0.293 * u,
+ y = 0.299 * h - 0.3 * d + 1.25 * u,
+ K = 0.587 * h - 0.586 * d - 1.05 * u,
+ S = 0.114 * h + 0.886 * d - 0.2 * u;
+ for (e = 0; e < s; e += 4)
+ (i = o[e + 0]),
+ (n = o[e + 1]),
+ (a = o[e + 2]),
+ (r = o[e + 3]),
+ (o[e + 0] = g * i + f * n + v * a),
+ (o[e + 1] = p * i + m * n + _ * a),
+ (o[e + 2] = y * i + K * n + S * a),
+ (o[e + 3] = r);
+ }),
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'hue',
+ 0,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ ),
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'saturation',
+ 0,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ ),
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'value',
+ 0,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ );
+ })(),
+ (function () {
+ 'use strict';
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'hue',
+ 0,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ ),
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'saturation',
+ 0,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ ),
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'luminance',
+ 0,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ ),
+ (Konva.Filters.HSL = function (t) {
+ var e,
+ i,
+ n,
+ a,
+ r,
+ o = t.data,
+ s = o.length,
+ h = Math.pow(2, this.saturation()),
+ l = Math.abs(this.hue() + 360) % 360,
+ c = 127 * this.luminance(),
+ d = 1 * h * Math.cos((l * Math.PI) / 180),
+ u = 1 * h * Math.sin((l * Math.PI) / 180),
+ g = 0.299 + 0.701 * d + 0.167 * u,
+ f = 0.587 - 0.587 * d + 0.33 * u,
+ v = 0.114 - 0.114 * d - 0.497 * u,
+ p = 0.299 - 0.299 * d - 0.328 * u,
+ m = 0.587 + 0.413 * d + 0.035 * u,
+ _ = 0.114 - 0.114 * d + 0.293 * u,
+ y = 0.299 - 0.3 * d + 1.25 * u,
+ K = 0.587 - 0.586 * d - 1.05 * u,
+ S = 0.114 + 0.886 * d - 0.2 * u;
+ for (e = 0; e < s; e += 4)
+ (i = o[e + 0]),
+ (n = o[e + 1]),
+ (a = o[e + 2]),
+ (r = o[e + 3]),
+ (o[e + 0] = g * i + f * n + v * a + c),
+ (o[e + 1] = p * i + m * n + _ * a + c),
+ (o[e + 2] = y * i + K * n + S * a + c),
+ (o[e + 3] = r);
+ });
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Filters.Emboss = function (t) {
+ var e = 10 * this.embossStrength(),
+ i = 255 * this.embossWhiteLevel(),
+ n = this.embossDirection(),
+ a = this.embossBlend(),
+ r = 0,
+ o = 0,
+ s = t.data,
+ h = t.width,
+ l = t.height,
+ c = 4 * h,
+ d = l;
+ switch (n) {
+ case 'top-left':
+ o = r = -1;
+ break;
+ case 'top':
+ (r = -1), (o = 0);
+ break;
+ case 'top-right':
+ (r = -1), (o = 1);
+ break;
+ case 'right':
+ (r = 0), (o = 1);
+ break;
+ case 'bottom-right':
+ o = r = 1;
+ break;
+ case 'bottom':
+ (r = 1), (o = 0);
+ break;
+ case 'bottom-left':
+ o = -(r = 1);
+ break;
+ case 'left':
+ (r = 0), (o = -1);
+ break;
+ default:
+ Konva.Util.error('Unknown emboss direction: ' + n);
+ }
+ do {
+ var u = (d - 1) * c,
+ g = r;
+ d + g < 1 && (g = 0), l < d + g && (g = 0);
+ var f = (d - 1 + g) * h * 4,
+ v = h;
+ do {
+ var p = u + 4 * (v - 1),
+ m = o;
+ v + m < 1 && (m = 0), h < v + m && (m = 0);
+ var _ = f + 4 * (v - 1 + m),
+ y = s[p] - s[_],
+ K = s[p + 1] - s[_ + 1],
+ S = s[p + 2] - s[_ + 2],
+ b = y,
+ x = 0 < b ? b : -b;
+ if ((x < (0 < K ? K : -K) && (b = K), x < (0 < S ? S : -S) && (b = S), (b *= e), a)) {
+ var C = s[p] + b,
+ w = s[p + 1] + b,
+ F = s[p + 2] + b;
+ (s[p] = 255 < C ? 255 : C < 0 ? 0 : C),
+ (s[p + 1] = 255 < w ? 255 : w < 0 ? 0 : w),
+ (s[p + 2] = 255 < F ? 255 : F < 0 ? 0 : F);
+ } else {
+ var T = i - b;
+ T < 0 ? (T = 0) : 255 < T && (T = 255), (s[p] = s[p + 1] = s[p + 2] = T);
+ }
+ } while (--v);
+ } while (--d);
+ }),
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'embossStrength',
+ 0.5,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ ),
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'embossWhiteLevel',
+ 0.5,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ ),
+ Konva.Factory.addGetterSetter(Konva.Node, 'embossDirection', 'top-left', null, Konva.Factory.afterSetFilter),
+ Konva.Factory.addGetterSetter(Konva.Node, 'embossBlend', !1, null, Konva.Factory.afterSetFilter);
+ })(),
+ (function () {
+ 'use strict';
+ function x(t, e, i, n, a) {
+ var r = i - e,
+ o = a - n;
+ return 0 === r ? n + o / 2 : 0 === o ? n : o * ((t - e) / r) + n;
+ }
+ (Konva.Filters.Enhance = function (t) {
+ var e,
+ i,
+ n,
+ a,
+ r = t.data,
+ o = r.length,
+ s = r[0],
+ h = s,
+ l = r[1],
+ c = l,
+ d = r[2],
+ u = d,
+ g = this.enhance();
+ if (0 !== g) {
+ for (a = 0; a < o; a += 4)
+ (e = r[a + 0]) < s ? (s = e) : h < e && (h = e),
+ (i = r[a + 1]) < l ? (l = i) : c < i && (c = i),
+ (n = r[a + 2]) < d ? (d = n) : u < n && (u = n);
+ var f, v, p, m, _, y, K, S, b;
+ for (
+ h === s && ((h = 255), (s = 0)),
+ c === l && ((c = 255), (l = 0)),
+ u === d && ((u = 255), (d = 0)),
+ 0 < g
+ ? ((v = h + g * (255 - h)),
+ (p = s - g * (s - 0)),
+ (_ = c + g * (255 - c)),
+ (y = l - g * (l - 0)),
+ (S = u + g * (255 - u)),
+ (b = d - g * (d - 0)))
+ : ((v = h + g * (h - (f = 0.5 * (h + s)))),
+ (p = s + g * (s - f)),
+ (_ = c + g * (c - (m = 0.5 * (c + l)))),
+ (y = l + g * (l - m)),
+ (S = u + g * (u - (K = 0.5 * (u + d)))),
+ (b = d + g * (d - K))),
+ a = 0;
+ a < o;
+ a += 4
+ )
+ (r[a + 0] = x(r[a + 0], s, h, p, v)),
+ (r[a + 1] = x(r[a + 1], l, c, y, _)),
+ (r[a + 2] = x(r[a + 2], d, u, b, S));
+ }
+ }),
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'enhance',
+ 0,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ );
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Filters.Posterize = function (t) {
+ var e,
+ i = Math.round(254 * this.levels()) + 1,
+ n = t.data,
+ a = n.length,
+ r = 255 / i;
+ for (e = 0; e < a; e += 1) n[e] = Math.floor(n[e] / r) * r;
+ }),
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'levels',
+ 0.5,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ );
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Filters.Noise = function (t) {
+ var e,
+ i = 255 * this.noise(),
+ n = t.data,
+ a = n.length,
+ r = i / 2;
+ for (e = 0; e < a; e += 4)
+ (n[e + 0] += r - 2 * r * Math.random()),
+ (n[e + 1] += r - 2 * r * Math.random()),
+ (n[e + 2] += r - 2 * r * Math.random());
+ }),
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'noise',
+ 0.2,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ );
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Filters.Pixelate = function (t) {
+ var e,
+ i,
+ n,
+ a,
+ r,
+ o,
+ s,
+ h,
+ l,
+ c,
+ d,
+ u,
+ g,
+ f,
+ v = Math.ceil(this.pixelSize()),
+ p = t.width,
+ m = t.height,
+ _ = Math.ceil(p / v),
+ y = Math.ceil(m / v);
+ if (((t = t.data), v <= 0)) Konva.Util.error('pixelSize value can not be <= 0');
+ else
+ for (u = 0; u < _; u += 1)
+ for (g = 0; g < y; g += 1) {
+ for (l = (h = u * v) + v, d = (c = g * v) + v, f = s = o = r = a = 0, e = h; e < l; e += 1)
+ if (!(p <= e))
+ for (i = c; i < d; i += 1)
+ m <= i ||
+ ((a += t[(n = 4 * (p * i + e)) + 0]), (r += t[n + 1]), (o += t[n + 2]), (s += t[n + 3]), (f += 1));
+ for (a /= f, r /= f, o /= f, s /= f, e = h; e < l; e += 1)
+ if (!(p <= e))
+ for (i = c; i < d; i += 1)
+ m <= i || ((t[(n = 4 * (p * i + e)) + 0] = a), (t[n + 1] = r), (t[n + 2] = o), (t[n + 3] = s));
+ }
+ }),
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'pixelSize',
+ 8,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ );
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Filters.Threshold = function (t) {
+ var e,
+ i = 255 * this.threshold(),
+ n = t.data,
+ a = n.length;
+ for (e = 0; e < a; e += 1) n[e] = n[e] < i ? 0 : 255;
+ }),
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'threshold',
+ 0.5,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ );
+ })(),
+ (function () {
+ 'use strict';
+ /**
+ * Sepia Filter
+ * Based on: Pixastic Lib - Sepia filter - v0.1.0
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
+ * @function
+ * @name Sepia
+ * @memberof Konva.Filters
+ * @param {Object} imageData
+ * @author Jacob Seidelin
+ * @license MPL v1.1 [http://www.pixastic.com/lib/license.txt]
+ * @example
+ * node.cache();
+ * node.filters([Konva.Filters.Sepia]);
+ */ Konva.Filters.Sepia = function (t) {
+ var e,
+ i,
+ n,
+ a,
+ r,
+ o,
+ s,
+ h,
+ l,
+ c = t.data,
+ d = t.width,
+ u = t.height,
+ g = 4 * d;
+ do {
+ for (
+ e = (u - 1) * g, i = d;
+ (s = 0.393 * (a = c[(n = e + 4 * (i - 1))]) + 0.769 * (r = c[n + 1]) + 0.189 * (o = c[n + 2])),
+ (h = 0.349 * a + 0.686 * r + 0.168 * o),
+ (l = 0.272 * a + 0.534 * r + 0.131 * o),
+ (c[n] = 255 < s ? 255 : s),
+ (c[n + 1] = 255 < h ? 255 : h),
+ (c[n + 2] = 255 < l ? 255 : l),
+ (c[n + 3] = c[n + 3]),
+ --i;
+
+ );
+ } while (--u);
+ };
+ })(),
+ (function () {
+ 'use strict';
+ Konva.Filters.Solarize = function (t) {
+ var e = t.data,
+ i = t.width,
+ n = 4 * i,
+ a = t.height;
+ do {
+ var r = (a - 1) * n,
+ o = i;
+ do {
+ var s = r + 4 * (o - 1),
+ h = e[s],
+ l = e[s + 1],
+ c = e[s + 2];
+ 127 < h && (h = 255 - h),
+ 127 < l && (l = 255 - l),
+ 127 < c && (c = 255 - c),
+ (e[s] = h),
+ (e[s + 1] = l),
+ (e[s + 2] = c);
+ } while (--o);
+ } while (--a);
+ };
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Filters.Kaleidoscope = function (t) {
+ var e,
+ i,
+ n,
+ a,
+ r,
+ o,
+ s,
+ h,
+ l,
+ c = t.width,
+ d = t.height,
+ u = Math.round(this.kaleidoscopePower()),
+ g = Math.round(this.kaleidoscopeAngle()),
+ f = Math.floor((c * (g % 360)) / 360);
+ if (!(u < 1)) {
+ var v = Konva.Util.createCanvasElement();
+ (v.width = c), (v.height = d);
+ var p = v.getContext('2d').getImageData(0, 0, c, d);
+ !(function (t, e, i) {
+ var n,
+ a,
+ r,
+ o,
+ s = t.data,
+ h = e.data,
+ l = t.width,
+ c = t.height,
+ d = i.polarCenterX || l / 2,
+ u = i.polarCenterY || c / 2,
+ g = 0,
+ f = 0,
+ v = 0,
+ p = 0,
+ m = Math.sqrt(d * d + u * u);
+ (a = l - d), (r = c - u), (m = m < (o = Math.sqrt(a * a + r * r)) ? o : m);
+ var _,
+ y,
+ K,
+ S,
+ b = c,
+ x = l,
+ C = ((360 / x) * Math.PI) / 180;
+ for (y = 0; y < x; y += 1)
+ for (K = Math.sin(y * C), S = Math.cos(y * C), _ = 0; _ < b; _ += 1)
+ (a = Math.floor(d + ((m * _) / b) * S)),
+ (g = s[0 + (n = 4 * ((r = Math.floor(u + ((m * _) / b) * K)) * l + a))]),
+ (f = s[n + 1]),
+ (v = s[n + 2]),
+ (p = s[n + 3]),
+ (h[0 + (n = 4 * (y + _ * l))] = g),
+ (h[n + 1] = f),
+ (h[n + 2] = v),
+ (h[n + 3] = p);
+ })(t, p, { polarCenterX: c / 2, polarCenterY: d / 2 });
+ for (var m = c / Math.pow(2, u); m <= 8; ) (m *= 2), (u -= 1);
+ var _ = (m = Math.ceil(m)),
+ y = 0,
+ K = _,
+ S = 1;
+ for (c < f + m && ((y = _), (K = 0), (S = -1)), i = 0; i < d; i += 1)
+ for (e = y; e !== K; e += S)
+ (h = 4 * (c * i + (Math.round(e + f) % c))),
+ (a = p.data[h + 0]),
+ (r = p.data[h + 1]),
+ (o = p.data[h + 2]),
+ (s = p.data[h + 3]),
+ (l = 4 * (c * i + e)),
+ (p.data[l + 0] = a),
+ (p.data[l + 1] = r),
+ (p.data[l + 2] = o),
+ (p.data[l + 3] = s);
+ for (i = 0; i < d; i += 1)
+ for (_ = Math.floor(m), n = 0; n < u; n += 1) {
+ for (e = 0; e < _ + 1; e += 1)
+ (h = 4 * (c * i + e)),
+ (a = p.data[h + 0]),
+ (r = p.data[h + 1]),
+ (o = p.data[h + 2]),
+ (s = p.data[h + 3]),
+ (l = 4 * (c * i + 2 * _ - e - 1)),
+ (p.data[l + 0] = a),
+ (p.data[l + 1] = r),
+ (p.data[l + 2] = o),
+ (p.data[l + 3] = s);
+ _ *= 2;
+ }
+ !(function (t, e, i) {
+ var n,
+ a,
+ r,
+ o,
+ s,
+ h,
+ l = t.data,
+ c = e.data,
+ d = t.width,
+ u = t.height,
+ g = i.polarCenterX || d / 2,
+ f = i.polarCenterY || u / 2,
+ v = 0,
+ p = 0,
+ m = 0,
+ _ = 0,
+ y = Math.sqrt(g * g + f * f);
+ (a = d - g), (r = u - f), (y = y < (h = Math.sqrt(a * a + r * r)) ? h : y);
+ var K,
+ S,
+ b,
+ x = u,
+ C = d,
+ w = i.polarRotation || 0;
+ for (a = 0; a < d; a += 1)
+ for (r = 0; r < u; r += 1)
+ (o = a - g),
+ (s = r - f),
+ (K = (Math.sqrt(o * o + s * s) * x) / y),
+ (S = ((S = ((180 * Math.atan2(s, o)) / Math.PI + 360 + w) % 360) * C) / 360),
+ (b = Math.floor(S)),
+ (v = l[0 + (n = 4 * (Math.floor(K) * d + b))]),
+ (p = l[n + 1]),
+ (m = l[n + 2]),
+ (_ = l[n + 3]),
+ (c[0 + (n = 4 * (r * d + a))] = v),
+ (c[n + 1] = p),
+ (c[n + 2] = m),
+ (c[n + 3] = _);
+ })(p, t, { polarRotation: 0 });
+ }
+ }),
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'kaleidoscopePower',
+ 2,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ ),
+ Konva.Factory.addGetterSetter(
+ Konva.Node,
+ 'kaleidoscopeAngle',
+ 0,
+ Konva.Validators.getNumberValidator(),
+ Konva.Factory.afterSetFilter,
+ );
+ })(),
+ (function (t) {
+ 'use strict';
+ (t.Filters.Contrast = function (t) {
+ var e,
+ i = Math.pow((parseInt(this.contrast()) + 100) / 100, 2),
+ n = t.data,
+ a = n.length,
+ r = 150,
+ o = 150,
+ s = 150;
+ for (e = 0; e < a; e += 4)
+ (r = n[e]),
+ (o = n[e + 1]),
+ (s = n[e + 2]),
+ (r /= 255),
+ (r -= 0.5),
+ (r *= i),
+ (r += 0.5),
+ (o /= 255),
+ (o -= 0.5),
+ (o *= i),
+ (o += 0.5),
+ (s /= 255),
+ (s -= 0.5),
+ (s *= i),
+ (s += 0.5),
+ (r = (r *= 255) < 0 ? 0 : 255 < r ? 255 : r),
+ (o = (o *= 255) < 0 ? 0 : 255 < o ? 255 : o),
+ (s = (s *= 255) < 0 ? 0 : 255 < s ? 255 : s),
+ (n[e] = r),
+ (n[e + 1] = o),
+ (n[e + 2] = s);
+ }),
+ t.Factory.addGetterSetter(t.Node, 'contrast', 0, t.Validators.getNumberValidator(), t.Factory.afterSetFilter);
+ })(Konva),
+ (function () {
+ 'use strict';
+ (Konva.Container = function (t) {
+ this.__init(t);
+ }),
+ Konva.Util.addMethods(Konva.Container, {
+ __init: function (t) {
+ (this.children = new Konva.Collection()), Konva.Node.call(this, t);
+ },
+ getChildren: function (e) {
+ if (!e) return this.children;
+ var i = new Konva.Collection();
+ return (
+ this.children.each(function (t) {
+ e(t) && i.push(t);
+ }),
+ i
+ );
+ },
+ hasChildren: function () {
+ return 0 < this.getChildren().length;
+ },
+ removeChildren: function () {
+ for (var t, e = Konva.Collection.toCollection(this.children), i = 0; i < e.length; i++)
+ delete (t = e[i]).parent, (t.index = 0), t.remove();
+ return (e = null), (this.children = new Konva.Collection()), this;
+ },
+ destroyChildren: function () {
+ for (var t, e = Konva.Collection.toCollection(this.children), i = 0; i < e.length; i++)
+ delete (t = e[i]).parent, (t.index = 0), t.destroy();
+ return (e = null), (this.children = new Konva.Collection()), this;
+ },
+ add: function (t) {
+ if (1 < arguments.length) {
+ for (var e = 0; e < arguments.length; e++) this.add(arguments[e]);
+ return this;
+ }
+ if (t.getParent()) return t.moveTo(this), this;
+ var i = this.children;
+ return (
+ this._validateAdd(t),
+ (t.index = i.length),
+ (t.parent = this),
+ i.push(t),
+ this._fire('add', { child: t }),
+ Konva.DD && t.isDragging() && Konva.DD.anim.setLayers(t.getLayer()),
+ this
+ );
+ },
+ destroy: function () {
+ return this.hasChildren() && this.destroyChildren(), Konva.Node.prototype.destroy.call(this), this;
+ },
+ find: function (t) {
+ return this._generalFind(t, !1);
+ },
+ findOne: function (t) {
+ var e = this._generalFind(t, !0);
+ return 0 < e.length ? e[0] : void 0;
+ },
+ _generalFind: function (t, e) {
+ var i = [];
+ return (
+ 'string' == typeof t
+ ? (i = this._findByString(t, e))
+ : 'function' == typeof t && (i = this._findByFunction(t, e)),
+ Konva.Collection.toCollection(i)
+ );
+ },
+ _findByString: function (t) {
+ var e,
+ i,
+ n,
+ a,
+ r,
+ o,
+ s,
+ h = [],
+ l = t.replace(/ /g, '').split(','),
+ c = l.length;
+ for (e = 0; e < c; e++) {
+ if (((n = l[e]), !Konva.Util.isValidSelector(n))) {
+ var d =
+ 'Selector "' +
+ n +
+ '" is invalid. Allowed selectors examples are "#foo", ".bar" or "Group".\nIf you have a custom shape with such className, please change it to start with upper letter like "Triangle".\nKonva is awesome, right?';
+ Konva.Util.warn(d);
+ }
+ if ('#' === n.charAt(0)) (r = this._getNodeById(n.slice(1))) && h.push(r);
+ else if ('.' === n.charAt(0)) (a = this._getNodesByName(n.slice(1))), (h = h.concat(a));
+ else for (s = (o = this.getChildren()).length, i = 0; i < s; i++) h = h.concat(o[i]._get(n));
+ }
+ return h;
+ },
+ _findByFunction: function (a, r) {
+ var o = [],
+ s = function (t) {
+ if (!(r && 0 < o.length)) {
+ var e = t.getChildren(),
+ i = e.length;
+ a(t) && (o = o.concat(t));
+ for (var n = 0; n < i; n++) s(e[n]);
+ }
+ };
+ return s(this), o;
+ },
+ _getNodeById: function (t) {
+ var e = Konva.ids[t];
+ return void 0 !== e && this.isAncestorOf(e) ? e : null;
+ },
+ _getNodesByName: function (t) {
+ var e = Konva.names[t] || [];
+ return this._getDescendants(e);
+ },
+ _get: function (t) {
+ for (var e = Konva.Node.prototype._get.call(this, t), i = this.getChildren(), n = i.length, a = 0; a < n; a++)
+ e = e.concat(i[a]._get(t));
+ return e;
+ },
+ toObject: function () {
+ var t = Konva.Node.prototype.toObject.call(this);
+ t.children = [];
+ for (var e = this.getChildren(), i = e.length, n = 0; n < i; n++) {
+ var a = e[n];
+ t.children.push(a.toObject());
+ }
+ return t;
+ },
+ _getDescendants: function (t) {
+ for (var e = [], i = t.length, n = 0; n < i; n++) {
+ var a = t[n];
+ this.isAncestorOf(a) && e.push(a);
+ }
+ return e;
+ },
+ isAncestorOf: function (t) {
+ for (var e = t.getParent(); e; ) {
+ if (e._id === this._id) return !0;
+ e = e.getParent();
+ }
+ return !1;
+ },
+ clone: function (t) {
+ var e = Konva.Node.prototype.clone.call(this, t);
+ return (
+ this.getChildren().each(function (t) {
+ e.add(t.clone());
+ }),
+ e
+ );
+ },
+ getAllIntersections: function (e) {
+ var i = [];
+ return (
+ this.find('Shape').each(function (t) {
+ t.isVisible() && t.intersects(e) && i.push(t);
+ }),
+ i
+ );
+ },
+ _setChildrenIndices: function () {
+ this.children.each(function (t, e) {
+ t.index = e;
+ });
+ },
+ drawScene: function (t, e, i) {
+ var n = this.getLayer(),
+ a = t || (n && n.getCanvas()),
+ r = a && a.getContext(),
+ o = this._cache.canvas,
+ s = o && o.scene;
+ return (
+ (this.isVisible() || i) &&
+ (!i && s
+ ? (r.save(), n._applyTransform(this, r, e), this._drawCachedSceneCanvas(r), r.restore())
+ : this._drawChildren(a, 'drawScene', e, !1, i)),
+ this
+ );
+ },
+ drawHit: function (t, e, i) {
+ var n = this.getLayer(),
+ a = t || (n && n.hitCanvas),
+ r = a && a.getContext(),
+ o = this._cache.canvas,
+ s = o && o.hit;
+ return (
+ (this.shouldDrawHit(a) || i) &&
+ (n && n.clearHitCache(),
+ !i && s
+ ? (r.save(), n._applyTransform(this, r, e), this._drawCachedHitCanvas(r), r.restore())
+ : this._drawChildren(a, 'drawHit', e)),
+ this
+ );
+ },
+ _drawChildren: function (e, i, n, a, r) {
+ var t,
+ o,
+ s = this.getLayer(),
+ h = e && e.getContext(),
+ l = this.getClipWidth(),
+ c = this.getClipHeight(),
+ d = this.getClipFunc(),
+ u = (l && c) || d;
+ if (u && s) {
+ h.save();
+ var g = this.getAbsoluteTransform(n),
+ f = g.getMatrix();
+ h.transform(f[0], f[1], f[2], f[3], f[4], f[5]),
+ h.beginPath(),
+ d ? d.call(this, h, this) : ((t = this.getClipX()), (o = this.getClipY()), h.rect(t, o, l, c)),
+ h.clip(),
+ (f = g.copy().invert().getMatrix()),
+ h.transform(f[0], f[1], f[2], f[3], f[4], f[5]);
+ }
+ this.children.each(function (t) {
+ t[i](e, n, a, r);
+ }),
+ u && h.restore();
+ },
+ shouldDrawHit: function (t) {
+ var e = this.getLayer(),
+ i = Konva.DD && Konva.isDragging() && -1 !== Konva.DD.anim.getLayers().indexOf(e);
+ return (t && t.isCache) || (e && e.hitGraphEnabled() && this.isVisible() && !i);
+ },
+ getClientRect: function (t) {
+ var i,
+ n,
+ a,
+ r,
+ e = (t = t || {}).skipTransform,
+ o = t.relativeTo,
+ s = { x: 1 / 0, y: 1 / 0, width: 0, height: 0 },
+ h = this;
+ this.children.each(function (t) {
+ if (t.getVisible()) {
+ var e = t.getClientRect({ relativeTo: h });
+ (0 === e.width && 0 === e.height) ||
+ (void 0 === i
+ ? ((i = e.x), (n = e.y), (a = e.x + e.width), (r = e.y + e.height))
+ : ((i = Math.min(i, e.x)),
+ (n = Math.min(n, e.y)),
+ (a = Math.max(a, e.x + e.width)),
+ (r = Math.max(r, e.y + e.height))));
+ }
+ });
+ for (var l = this.find('Shape'), c = !1, d = 0; d < l.length; d++) {
+ if (l[d]._isVisible(this)) {
+ c = !0;
+ break;
+ }
+ }
+ return (
+ (s = c ? { x: i, y: n, width: a - i, height: r - n } : { x: 0, y: 0, width: 0, height: 0 }),
+ e ? s : this._transformedRect(s, o)
+ );
+ },
+ }),
+ Konva.Util.extend(Konva.Container, Konva.Node),
+ (Konva.Container.prototype.get = Konva.Container.prototype.find),
+ Konva.Factory.addComponentsGetterSetter(Konva.Container, 'clip', ['x', 'y', 'width', 'height']),
+ Konva.Factory.addGetterSetter(Konva.Container, 'clipX', void 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Container, 'clipY', void 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Container, 'clipWidth', void 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Container, 'clipHeight', void 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Container, 'clipFunc'),
+ Konva.Collection.mapMethods(Konva.Container);
+ })(),
+ (function (g) {
+ 'use strict';
+ var t = 'hasShadow',
+ e = 'shadowRGBA';
+ function n(t) {
+ t.fill();
+ }
+ function a(t) {
+ t.stroke();
+ }
+ function r(t) {
+ t.fill();
+ }
+ function o(t) {
+ t.stroke();
+ }
+ function s() {
+ this._clearCache(t);
+ }
+ function h() {
+ this._clearCache(e);
+ }
+ (g.Shape = function (t) {
+ this.__init(t);
+ }),
+ g.Util.addMethods(g.Shape, {
+ __init: function (t) {
+ (this.nodeType = 'Shape'),
+ (this._fillFunc = n),
+ (this._strokeFunc = a),
+ (this._fillFuncHit = r),
+ (this._strokeFuncHit = o);
+ for (var e, i = g.shapes; !(e = g.Util.getRandomColor()) || e in i; );
+ (i[(this.colorKey = e)] = this),
+ g.Node.call(this, t),
+ this.on(
+ 'shadowColorChange.konva shadowBlurChange.konva shadowOffsetChange.konva shadowOpacityChange.konva shadowEnabledChange.konva',
+ s,
+ ),
+ this.on('shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva', h);
+ },
+ hasChildren: function () {
+ return !1;
+ },
+ getChildren: function () {
+ return [];
+ },
+ getContext: function () {
+ return this.getLayer().getContext();
+ },
+ getCanvas: function () {
+ return this.getLayer().getCanvas();
+ },
+ hasShadow: function () {
+ return this._getCache(t, this._hasShadow);
+ },
+ _hasShadow: function () {
+ return (
+ this.getShadowEnabled() &&
+ 0 !== this.getShadowOpacity() &&
+ !!(this.getShadowColor() || this.getShadowBlur() || this.getShadowOffsetX() || this.getShadowOffsetY())
+ );
+ },
+ getShadowRGBA: function () {
+ return this._getCache(e, this._getShadowRGBA);
+ },
+ _getShadowRGBA: function () {
+ if (this.hasShadow()) {
+ var t = g.Util.colorToRGBA(this.shadowColor());
+ return 'rgba(' + t.r + ',' + t.g + ',' + t.b + ',' + t.a * (this.getShadowOpacity() || 1) + ')';
+ }
+ },
+ hasFill: function () {
+ return !!(
+ this.getFill() ||
+ this.getFillPatternImage() ||
+ this.getFillLinearGradientColorStops() ||
+ this.getFillRadialGradientColorStops()
+ );
+ },
+ hasStroke: function () {
+ return this.strokeEnabled() && !(!this.stroke() && !this.getStrokeLinearGradientColorStops());
+ },
+ intersects: function (t) {
+ var e = this.getStage().bufferHitCanvas;
+ return (
+ e.getContext().clear(),
+ this.drawHit(e),
+ 0 < e.context.getImageData(Math.round(t.x), Math.round(t.y), 1, 1).data[3]
+ );
+ },
+ destroy: function () {
+ return g.Node.prototype.destroy.call(this), delete g.shapes[this.colorKey], this;
+ },
+ _useBufferCanvas: function (t) {
+ return (
+ (!t &&
+ this.perfectDrawEnabled() &&
+ 1 !== this.getAbsoluteOpacity() &&
+ this.hasFill() &&
+ this.hasStroke() &&
+ this.getStage()) ||
+ (this.perfectDrawEnabled() &&
+ this.hasShadow() &&
+ 1 !== this.getAbsoluteOpacity() &&
+ this.hasFill() &&
+ this.hasStroke() &&
+ this.getStage())
+ );
+ },
+ getSelfRect: function () {
+ var t = this.getSize();
+ return {
+ x: this._centroid ? Math.round(-t.width / 2) : 0,
+ y: this._centroid ? Math.round(-t.height / 2) : 0,
+ width: t.width,
+ height: t.height,
+ };
+ },
+ getClientRect: function (t) {
+ var e = (t = t || {}).skipTransform,
+ i = t.relativeTo,
+ n = this.getSelfRect(),
+ a = (this.hasStroke() && this.strokeWidth()) || 0,
+ r = n.width + a,
+ o = n.height + a,
+ s = this.hasShadow() ? this.shadowOffsetX() : 0,
+ h = this.hasShadow() ? this.shadowOffsetY() : 0,
+ l = r + Math.abs(s),
+ c = o + Math.abs(h),
+ d = (this.hasShadow() && this.shadowBlur()) || 0,
+ u = l + 2 * d,
+ g = c + 2 * d,
+ f = 0;
+ Math.round(a / 2) !== a / 2 && (f = 1);
+ var v = {
+ width: u + f,
+ height: g + f,
+ x: -Math.round(a / 2 + d) + Math.min(s, 0) + n.x,
+ y: -Math.round(a / 2 + d) + Math.min(h, 0) + n.y,
+ };
+ return e ? v : this._transformedRect(v, i);
+ },
+ drawScene: function (t, e, i, n) {
+ var a,
+ r,
+ o = this.getLayer(),
+ s = t || o.getCanvas(),
+ h = s.getContext(),
+ l = this._cache.canvas,
+ c = this.sceneFunc(),
+ d = this.hasShadow(),
+ u = this.hasStroke();
+ if (!this.isVisible() && !i) return this;
+ if (l) return h.save(), o._applyTransform(this, h, e), this._drawCachedSceneCanvas(h), h.restore(), this;
+ if (!c) return this;
+ if ((h.save(), this._useBufferCanvas(i) && !n)) {
+ if (((r = (a = this.getStage().bufferCanvas).getContext()).clear(), r.save(), r._applyLineJoin(this), !i))
+ if (o) o._applyTransform(this, r, e);
+ else {
+ var g = this.getAbsoluteTransform(e).getMatrix();
+ h.transform(g[0], g[1], g[2], g[3], g[4], g[5]);
+ }
+ c.call(this, r, this), r.restore();
+ var f = a.pixelRatio;
+ d && !s.hitCanvas
+ ? (h.save(),
+ h._applyShadow(this),
+ h._applyOpacity(this),
+ h._applyGlobalCompositeOperation(this),
+ h.drawImage(a._canvas, 0, 0, a.width / f, a.height / f),
+ h.restore())
+ : (h._applyOpacity(this),
+ h._applyGlobalCompositeOperation(this),
+ h.drawImage(a._canvas, 0, 0, a.width / f, a.height / f));
+ } else {
+ if ((h._applyLineJoin(this), !i))
+ if (o) o._applyTransform(this, h, e);
+ else {
+ var v = this.getAbsoluteTransform(e).getMatrix();
+ h.transform(v[0], v[1], v[2], v[3], v[4], v[5]);
+ }
+ d && u && !s.hitCanvas
+ ? (h.save(),
+ i || (h._applyOpacity(this), h._applyGlobalCompositeOperation(this)),
+ h._applyShadow(this),
+ c.call(this, h, this),
+ h.restore(),
+ this.hasFill() && this.getShadowForStrokeEnabled() && c.call(this, h, this))
+ : d && !s.hitCanvas
+ ? (h.save(),
+ i || (h._applyOpacity(this), h._applyGlobalCompositeOperation(this)),
+ h._applyShadow(this),
+ c.call(this, h, this),
+ h.restore())
+ : (i || (h._applyOpacity(this), h._applyGlobalCompositeOperation(this)), c.call(this, h, this));
+ }
+ return h.restore(), this;
+ },
+ drawHit: function (t, e, i) {
+ var n = this.getLayer(),
+ a = t || n.hitCanvas,
+ r = a.getContext(),
+ o = this.hitFunc() || this.sceneFunc(),
+ s = this._cache.canvas,
+ h = s && s.hit;
+ if (!this.shouldDrawHit(a) && !i) return this;
+ if ((n && n.clearHitCache(), h))
+ return r.save(), n._applyTransform(this, r, e), this._drawCachedHitCanvas(r), r.restore(), this;
+ if (!o) return this;
+ if ((r.save(), r._applyLineJoin(this), !i))
+ if (n) n._applyTransform(this, r, e);
+ else {
+ var l = this.getAbsoluteTransform(e).getMatrix();
+ r.transform(l[0], l[1], l[2], l[3], l[4], l[5]);
+ }
+ return o.call(this, r, this), r.restore(), this;
+ },
+ drawHitFromCache: function (t) {
+ var e,
+ i,
+ n,
+ a,
+ r,
+ o = t || 0,
+ s = this._cache.canvas,
+ h = this._getCachedSceneCanvas(),
+ l = s.hit,
+ c = l.getContext(),
+ d = l.getWidth(),
+ u = l.getHeight();
+ c.clear(), c.drawImage(h._canvas, 0, 0, d, u);
+ try {
+ for (
+ n = (i = (e = c.getImageData(0, 0, d, u)).data).length, a = g.Util._hexToRgb(this.colorKey), r = 0;
+ r < n;
+ r += 4
+ )
+ o < i[r + 3] ? ((i[r] = a.r), (i[r + 1] = a.g), (i[r + 2] = a.b), (i[r + 3] = 255)) : (i[r + 3] = 0);
+ c.putImageData(e, 0, 0);
+ } catch (t) {
+ g.Util.error('Unable to draw hit graph from cached scene canvas. ' + t.message);
+ }
+ return this;
+ },
+ }),
+ g.Util.extend(g.Shape, g.Node),
+ g.Factory.addGetterSetter(g.Shape, 'stroke', void 0, g.Validators.getStringValidator()),
+ g.Factory.addGetterSetter(g.Shape, 'strokeWidth', 2, g.Validators.getNumberValidator()),
+ g.Factory.addGetterSetter(g.Shape, 'strokeHitEnabled', !0, g.Validators.getBooleanValidator()),
+ g.Factory.addGetterSetter(g.Shape, 'perfectDrawEnabled', !0, g.Validators.getBooleanValidator()),
+ g.Factory.addGetterSetter(g.Shape, 'shadowForStrokeEnabled', !0, g.Validators.getBooleanValidator()),
+ g.Factory.addGetterSetter(g.Shape, 'lineJoin'),
+ g.Factory.addGetterSetter(g.Shape, 'lineCap'),
+ g.Factory.addGetterSetter(g.Shape, 'sceneFunc'),
+ g.Factory.addGetterSetter(g.Shape, 'hitFunc'),
+ g.Factory.addGetterSetter(g.Shape, 'dash'),
+ g.Factory.addGetterSetter(g.Shape, 'dashOffset', 0, g.Validators.getNumberValidator()),
+ g.Factory.addGetterSetter(g.Shape, 'shadowColor', void 0, g.Validators.getStringValidator()),
+ g.Factory.addGetterSetter(g.Shape, 'shadowBlur', 0, g.Validators.getNumberValidator()),
+ g.Factory.addGetterSetter(g.Shape, 'shadowOpacity', 1, g.Validators.getNumberValidator()),
+ g.Factory.addComponentsGetterSetter(g.Shape, 'shadowOffset', ['x', 'y']),
+ g.Factory.addGetterSetter(g.Shape, 'shadowOffsetX', 0, g.Validators.getNumberValidator()),
+ g.Factory.addGetterSetter(g.Shape, 'shadowOffsetY', 0, g.Validators.getNumberValidator()),
+ g.Factory.addGetterSetter(g.Shape, 'fillPatternImage'),
+ g.Factory.addGetterSetter(g.Shape, 'fill', void 0, g.Validators.getStringValidator()),
+ g.Factory.addGetterSetter(g.Shape, 'fillPatternX', 0, g.Validators.getNumberValidator()),
+ g.Factory.addGetterSetter(g.Shape, 'fillPatternY', 0, g.Validators.getNumberValidator()),
+ g.Factory.addGetterSetter(g.Shape, 'fillLinearGradientColorStops'),
+ g.Factory.addGetterSetter(g.Shape, 'strokeLinearGradientColorStops'),
+ g.Factory.addGetterSetter(g.Shape, 'fillRadialGradientStartRadius', 0),
+ g.Factory.addGetterSetter(g.Shape, 'fillRadialGradientEndRadius', 0),
+ g.Factory.addGetterSetter(g.Shape, 'fillRadialGradientColorStops'),
+ g.Factory.addGetterSetter(g.Shape, 'fillPatternRepeat', 'repeat'),
+ g.Factory.addGetterSetter(g.Shape, 'fillEnabled', !0),
+ g.Factory.addGetterSetter(g.Shape, 'strokeEnabled', !0),
+ g.Factory.addGetterSetter(g.Shape, 'shadowEnabled', !0),
+ g.Factory.addGetterSetter(g.Shape, 'dashEnabled', !0),
+ g.Factory.addGetterSetter(g.Shape, 'strokeScaleEnabled', !0),
+ g.Factory.addGetterSetter(g.Shape, 'fillPriority', 'color'),
+ g.Factory.addComponentsGetterSetter(g.Shape, 'fillPatternOffset', ['x', 'y']),
+ g.Factory.addGetterSetter(g.Shape, 'fillPatternOffsetX', 0, g.Validators.getNumberValidator()),
+ g.Factory.addGetterSetter(g.Shape, 'fillPatternOffsetY', 0, g.Validators.getNumberValidator()),
+ g.Factory.addComponentsGetterSetter(g.Shape, 'fillPatternScale', ['x', 'y']),
+ g.Factory.addGetterSetter(g.Shape, 'fillPatternScaleX', 1, g.Validators.getNumberValidator()),
+ g.Factory.addGetterSetter(g.Shape, 'fillPatternScaleY', 1, g.Validators.getNumberValidator()),
+ g.Factory.addComponentsGetterSetter(g.Shape, 'fillLinearGradientStartPoint', ['x', 'y']),
+ g.Factory.addComponentsGetterSetter(g.Shape, 'strokeLinearGradientStartPoint', ['x', 'y']),
+ g.Factory.addGetterSetter(g.Shape, 'fillLinearGradientStartPointX', 0),
+ g.Factory.addGetterSetter(g.Shape, 'strokeLinearGradientStartPointX', 0),
+ g.Factory.addGetterSetter(g.Shape, 'fillLinearGradientStartPointY', 0),
+ g.Factory.addGetterSetter(g.Shape, 'strokeLinearGradientStartPointY', 0),
+ g.Factory.addComponentsGetterSetter(g.Shape, 'fillLinearGradientEndPoint', ['x', 'y']),
+ g.Factory.addComponentsGetterSetter(g.Shape, 'strokeLinearGradientEndPoint', ['x', 'y']),
+ g.Factory.addGetterSetter(g.Shape, 'fillLinearGradientEndPointX', 0),
+ g.Factory.addGetterSetter(g.Shape, 'strokeLinearGradientEndPointX', 0),
+ g.Factory.addGetterSetter(g.Shape, 'fillLinearGradientEndPointY', 0),
+ g.Factory.addGetterSetter(g.Shape, 'strokeLinearGradientEndPointY', 0),
+ g.Factory.addComponentsGetterSetter(g.Shape, 'fillRadialGradientStartPoint', ['x', 'y']),
+ g.Factory.addGetterSetter(g.Shape, 'fillRadialGradientStartPointX', 0),
+ g.Factory.addGetterSetter(g.Shape, 'fillRadialGradientStartPointY', 0),
+ g.Factory.addComponentsGetterSetter(g.Shape, 'fillRadialGradientEndPoint', ['x', 'y']),
+ g.Factory.addGetterSetter(g.Shape, 'fillRadialGradientEndPointX', 0),
+ g.Factory.addGetterSetter(g.Shape, 'fillRadialGradientEndPointY', 0),
+ g.Factory.addGetterSetter(g.Shape, 'fillPatternRotation', 0),
+ g.Factory.backCompat(g.Shape, {
+ dashArray: 'dash',
+ getDashArray: 'getDash',
+ setDashArray: 'getDash',
+ drawFunc: 'sceneFunc',
+ getDrawFunc: 'getSceneFunc',
+ setDrawFunc: 'setSceneFunc',
+ drawHitFunc: 'hitFunc',
+ getDrawHitFunc: 'getHitFunc',
+ setDrawHitFunc: 'setHitFunc',
+ }),
+ g.Collection.mapMethods(g.Shape);
+ })(Konva),
+ (function () {
+ 'use strict';
+ var i = 'mouseout',
+ n = 'mouseleave',
+ a = 'mouseover',
+ r = 'mousemove',
+ o = 'mousedown',
+ s = 'mouseup',
+ h = 'contextmenu',
+ l = 'dblclick',
+ c = 'touchstart',
+ d = 'touchend',
+ u = 'touchmove',
+ g = 'wheel',
+ f = '_',
+ e = [o, r, s, i, c, u, d, a, g, h],
+ v = e.length;
+ function p(e, i) {
+ e.content.addEventListener(
+ i,
+ function (t) {
+ e[f + i](t);
+ },
+ !1,
+ );
+ }
+ (Konva.Stage = function (t) {
+ this.___init(t);
+ }),
+ Konva.Util.addMethods(Konva.Stage, {
+ ___init: function (t) {
+ (this.nodeType = 'Stage'),
+ Konva.Container.call(this, t),
+ (this._id = Konva.idCounter++),
+ this._buildDOM(),
+ this._bindContentEvents(),
+ (this._enableNestedTransforms = !1),
+ Konva.stages.push(this);
+ },
+ _validateAdd: function (t) {
+ 'Layer' !== t.getType() && Konva.Util.throw('You may only add layers to the stage.');
+ },
+ setContainer: function (t) {
+ if ('string' == typeof t) {
+ if ('.' === t.charAt(0)) {
+ var e = t.slice(1);
+ t = Konva.document.getElementsByClassName(e)[0];
+ } else {
+ var i;
+ (i = '#' !== t.charAt(0) ? t : t.slice(1)), (t = Konva.document.getElementById(i));
+ }
+ if (!t) throw 'Can not find container in document with id ' + i;
+ }
+ return this._setAttr('container', t), this;
+ },
+ shouldDrawHit: function () {
+ return !0;
+ },
+ draw: function () {
+ return Konva.Node.prototype.draw.call(this), this;
+ },
+ setHeight: function (t) {
+ return Konva.Node.prototype.setHeight.call(this, t), this._resizeDOM(), this;
+ },
+ setWidth: function (t) {
+ return Konva.Node.prototype.setWidth.call(this, t), this._resizeDOM(), this;
+ },
+ clear: function () {
+ var t,
+ e = this.children,
+ i = e.length;
+ for (t = 0; t < i; t++) e[t].clear();
+ return this;
+ },
+ clone: function (t) {
+ return (
+ t || (t = {}),
+ (t.container = Konva.document.createElement('div')),
+ Konva.Container.prototype.clone.call(this, t)
+ );
+ },
+ destroy: function () {
+ var t = this.content;
+ Konva.Container.prototype.destroy.call(this),
+ t && Konva.Util._isInDocument(t) && this.getContainer().removeChild(t);
+ var e = Konva.stages.indexOf(this);
+ return -1 < e && Konva.stages.splice(e, 1), this;
+ },
+ getPointerPosition: function () {
+ return this.pointerPos;
+ },
+ getStage: function () {
+ return this;
+ },
+ getContent: function () {
+ return this.content;
+ },
+ _toKonvaCanvas: function (i) {
+ var n = (i = i || {}).x || 0,
+ a = i.y || 0,
+ t = new Konva.SceneCanvas({
+ width: i.width || this.getWidth(),
+ height: i.height || this.getHeight(),
+ pixelRatio: i.pixelRatio || 1,
+ }),
+ r = t.getContext()._context,
+ e = this.children;
+ return (
+ (n || a) && r.translate(-1 * n, -1 * a),
+ e.each(function (t) {
+ if (t.isVisible()) {
+ var e = t._toKonvaCanvas(i);
+ r.drawImage(e._canvas, n, a, e.getWidth() / e.getPixelRatio(), e.getHeight() / e.getPixelRatio());
+ }
+ }),
+ t
+ );
+ },
+ toImage: function (t) {
+ var e = t.callback;
+ (t.callback = function (t) {
+ Konva.Util._getImage(t, function (t) {
+ e(t);
+ });
+ }),
+ this.toDataURL(t);
+ },
+ getIntersection: function (t, e) {
+ var i,
+ n,
+ a = this.getChildren();
+ for (i = a.length - 1; 0 <= i; i--) if ((n = a[i].getIntersection(t, e))) return n;
+ return null;
+ },
+ _resizeDOM: function () {
+ if (this.content) {
+ var t,
+ e,
+ i = this.getWidth(),
+ n = this.getHeight(),
+ a = this.getChildren(),
+ r = a.length;
+ for (
+ this.content.style.width = i + 'px',
+ this.content.style.height = n + 'px',
+ this.bufferCanvas.setSize(i, n),
+ this.bufferHitCanvas.setSize(i, n),
+ t = 0;
+ t < r;
+ t++
+ )
+ (e = a[t]).setSize(i, n), e.draw();
+ }
+ },
+ add: function (t) {
+ if (1 < arguments.length) {
+ for (var e = 0; e < arguments.length; e++) this.add(arguments[e]);
+ return this;
+ }
+ return (
+ Konva.Container.prototype.add.call(this, t),
+ t._setCanvasSize(this.width(), this.height()),
+ t.draw(),
+ Konva.isBrowser && this.content.appendChild(t.canvas._canvas),
+ this
+ );
+ },
+ getParent: function () {
+ return null;
+ },
+ getLayer: function () {
+ return null;
+ },
+ getLayers: function () {
+ return this.getChildren();
+ },
+ _bindContentEvents: function () {
+ if (Konva.isBrowser) for (var t = 0; t < v; t++) p(this, e[t]);
+ },
+ _mouseover: function (t) {
+ Konva.UA.mobile || (this._setPointerPosition(t), this._fire('contentMouseover', { evt: t }));
+ },
+ _mouseout: function (t) {
+ if (!Konva.UA.mobile) {
+ this._setPointerPosition(t);
+ var e = this.targetShape;
+ e &&
+ !Konva.isDragging() &&
+ (e._fireAndBubble(i, { evt: t }), e._fireAndBubble(n, { evt: t }), (this.targetShape = null)),
+ (this.pointerPos = void 0),
+ this._fire('contentMouseout', { evt: t });
+ }
+ },
+ _mousemove: function (t) {
+ return Konva.UA.ieMobile
+ ? this._touchmove(t)
+ : (void 0 === t.movementX && void 0 === t.movementY) || 0 !== t.movementY || 0 !== t.movementX
+ ? Konva.UA.mobile
+ ? null
+ : (this._setPointerPosition(t),
+ Konva.isDragging() ||
+ ((e = this.getIntersection(this.getPointerPosition())) && e.isListening()
+ ? Konva.isDragging() || (this.targetShape && this.targetShape._id === e._id)
+ ? e._fireAndBubble(r, { evt: t })
+ : (this.targetShape &&
+ (this.targetShape._fireAndBubble(i, { evt: t }, e),
+ this.targetShape._fireAndBubble(n, { evt: t }, e)),
+ e._fireAndBubble(a, { evt: t }, this.targetShape),
+ e._fireAndBubble('mouseenter', { evt: t }, this.targetShape),
+ (this.targetShape = e))
+ : (this.targetShape &&
+ !Konva.isDragging() &&
+ (this.targetShape._fireAndBubble(i, { evt: t }),
+ this.targetShape._fireAndBubble(n, { evt: t }),
+ (this.targetShape = null)),
+ this._fire(r, { evt: t, target: this, currentTarget: this })),
+ this._fire('contentMousemove', { evt: t })),
+ void (t.cancelable && t.preventDefault()))
+ : null;
+ var e;
+ },
+ _mousedown: function (t) {
+ if (Konva.UA.ieMobile) return this._touchstart(t);
+ if (!Konva.UA.mobile) {
+ this._setPointerPosition(t);
+ var e = this.getIntersection(this.getPointerPosition());
+ (Konva.listenClickTap = !0),
+ e && e.isListening()
+ ? (this.clickStartShape = e)._fireAndBubble(o, { evt: t })
+ : this._fire(o, { evt: t, target: this, currentTarget: this }),
+ this._fire('contentMousedown', { evt: t });
+ }
+ },
+ _mouseup: function (t) {
+ if (Konva.UA.ieMobile) return this._touchend(t);
+ if (!Konva.UA.mobile) {
+ this._setPointerPosition(t);
+ var e = this.getIntersection(this.getPointerPosition()),
+ i = this.clickStartShape,
+ n = this.clickEndShape,
+ a = !1,
+ r = Konva.DD;
+ Konva.inDblClickWindow
+ ? ((a = !0), clearTimeout(this.dblTimeout))
+ : r && r.justDragged
+ ? r && (r.justDragged = !1)
+ : ((Konva.inDblClickWindow = !0), clearTimeout(this.dblTimeout)),
+ (this.dblTimeout = setTimeout(function () {
+ Konva.inDblClickWindow = !1;
+ }, Konva.dblClickWindow)),
+ e && e.isListening()
+ ? ((this.clickEndShape = e)._fireAndBubble(s, { evt: t }),
+ Konva.listenClickTap &&
+ i &&
+ i._id === e._id &&
+ (e._fireAndBubble('click', { evt: t }),
+ a && n && n._id === e._id && e._fireAndBubble(l, { evt: t })))
+ : (this._fire(s, { evt: t, target: this, currentTarget: this }),
+ Konva.listenClickTap && this._fire('click', { evt: t, target: this, currentTarget: this }),
+ a && this._fire(l, { evt: t, target: this, currentTarget: this })),
+ this._fire('contentMouseup', { evt: t }),
+ Konva.listenClickTap &&
+ (this._fire('contentClick', { evt: t }), a && this._fire('contentDblclick', { evt: t })),
+ (Konva.listenClickTap = !1);
+ }
+ t.cancelable && t.preventDefault();
+ },
+ _contextmenu: function (t) {
+ this._setPointerPosition(t);
+ var e = this.getIntersection(this.getPointerPosition());
+ e && e.isListening()
+ ? e._fireAndBubble(h, { evt: t })
+ : this._fire(h, { evt: t, target: this, currentTarget: this }),
+ this._fire('contentContextmenu', { evt: t });
+ },
+ _touchstart: function (t) {
+ this._setPointerPosition(t);
+ var e = this.getIntersection(this.getPointerPosition());
+ (Konva.listenClickTap = !0),
+ e && e.isListening()
+ ? ((this.tapStartShape = e)._fireAndBubble(c, { evt: t }),
+ e.isListening() && e.preventDefault() && t.cancelable && t.preventDefault())
+ : this._fire(c, { evt: t, target: this, currentTarget: this }),
+ this._fire('contentTouchstart', { evt: t });
+ },
+ _touchend: function (t) {
+ this._setPointerPosition(t);
+ var e = this.getIntersection(this.getPointerPosition()),
+ i = !1;
+ Konva.inDblClickWindow ? (i = !0) : (Konva.inDblClickWindow = !0),
+ clearTimeout(this.dblTimeout),
+ (this.dblTimeout = setTimeout(function () {
+ Konva.inDblClickWindow = !1;
+ }, Konva.dblClickWindow)),
+ e && e.isListening()
+ ? (e._fireAndBubble(d, { evt: t }),
+ Konva.listenClickTap &&
+ this.tapStartShape &&
+ e._id === this.tapStartShape._id &&
+ (e._fireAndBubble('tap', { evt: t }), i && e._fireAndBubble('dbltap', { evt: t })),
+ e.isListening() && e.preventDefault() && t.cancelable && t.preventDefault())
+ : (this._fire(d, { evt: t, target: this, currentTarget: this }),
+ Konva.listenClickTap && this._fire('tap', { evt: t, target: this, currentTarget: this }),
+ i && this._fire('dbltap', { evt: t, target: this, currentTarget: this })),
+ this._fire('contentTouchend', { evt: t }),
+ Konva.listenClickTap &&
+ (this._fire('contentTap', { evt: t }), i && this._fire('contentDbltap', { evt: t })),
+ (Konva.listenClickTap = !1);
+ },
+ _touchmove: function (t) {
+ this._setPointerPosition(t);
+ var e,
+ i = Konva.DD;
+ Konva.isDragging() ||
+ ((e = this.getIntersection(this.getPointerPosition())) && e.isListening()
+ ? (e._fireAndBubble(u, { evt: t }),
+ e.isListening() && e.preventDefault() && t.cancelable && t.preventDefault())
+ : this._fire(u, { evt: t, target: this, currentTarget: this }),
+ this._fire('contentTouchmove', { evt: t })),
+ i && Konva.isDragging() && Konva.DD.node.preventDefault() && t.cancelable && t.preventDefault();
+ },
+ _wheel: function (t) {
+ this._setPointerPosition(t);
+ var e = this.getIntersection(this.getPointerPosition());
+ e && e.isListening()
+ ? e._fireAndBubble(g, { evt: t })
+ : this._fire(g, { evt: t, target: this, currentTarget: this }),
+ this._fire('contentWheel', { evt: t });
+ },
+ _setPointerPosition: function (t) {
+ var e = this._getContentPosition(),
+ i = null,
+ n = null;
+ if (void 0 !== (t = t || window.event).touches) {
+ if (0 < t.touches.length) {
+ var a = t.touches[0];
+ (i = a.clientX - e.left), (n = a.clientY - e.top);
+ }
+ } else (i = t.clientX - e.left), (n = t.clientY - e.top);
+ null !== i && null !== n && (this.pointerPos = { x: i, y: n });
+ },
+ _getContentPosition: function () {
+ var t = this.content.getBoundingClientRect ? this.content.getBoundingClientRect() : { top: 0, left: 0 };
+ return { top: t.top, left: t.left };
+ },
+ _buildDOM: function () {
+ if (
+ ((this.bufferCanvas = new Konva.SceneCanvas()),
+ (this.bufferHitCanvas = new Konva.HitCanvas({ pixelRatio: 1 })),
+ Konva.isBrowser)
+ ) {
+ var t = this.getContainer();
+ if (!t) throw 'Stage has no container. A container is required.';
+ (t.innerHTML = ''),
+ (this.content = Konva.document.createElement('div')),
+ (this.content.style.position = 'relative'),
+ (this.content.style.userSelect = 'none'),
+ (this.content.className = 'konvajs-content'),
+ this.content.setAttribute('role', 'presentation'),
+ t.appendChild(this.content),
+ this._resizeDOM();
+ }
+ },
+ _onContent: function (t, e) {
+ var i,
+ n,
+ a = t.split(' '),
+ r = a.length;
+ for (i = 0; i < r; i++) (n = a[i]), this.content.addEventListener(n, e, !1);
+ },
+ cache: function () {
+ Konva.Util.warn(
+ 'Cache function is not allowed for stage. You may use cache only for layers, groups and shapes.',
+ );
+ },
+ clearCache: function () {},
+ }),
+ Konva.Util.extend(Konva.Stage, Konva.Container),
+ Konva.Factory.addGetter(Konva.Stage, 'container'),
+ Konva.Factory.addOverloadedGetterSetter(Konva.Stage, 'container');
+ })(),
+ (function (i) {
+ 'use strict';
+ (i.BaseLayer = function (t) {
+ this.___init(t);
+ }),
+ i.Util.addMethods(i.BaseLayer, {
+ ___init: function (t) {
+ (this.nodeType = 'Layer'), i.Container.call(this, t);
+ },
+ createPNGStream: function () {
+ return this.canvas._canvas.createPNGStream();
+ },
+ getCanvas: function () {
+ return this.canvas;
+ },
+ getHitCanvas: function () {
+ return this.hitCanvas;
+ },
+ getContext: function () {
+ return this.getCanvas().getContext();
+ },
+ clear: function (t) {
+ return this.getContext().clear(t), this;
+ },
+ clearHitCache: function () {
+ this._hitImageData = void 0;
+ },
+ setZIndex: function (t) {
+ i.Node.prototype.setZIndex.call(this, t);
+ var e = this.getStage();
+ return (
+ e &&
+ (e.content.removeChild(this.getCanvas()._canvas),
+ t < e.getChildren().length - 1
+ ? e.content.insertBefore(this.getCanvas()._canvas, e.getChildren()[t + 1].getCanvas()._canvas)
+ : e.content.appendChild(this.getCanvas()._canvas)),
+ this
+ );
+ },
+ moveToTop: function () {
+ i.Node.prototype.moveToTop.call(this);
+ var t = this.getStage();
+ return (
+ t && (t.content.removeChild(this.getCanvas()._canvas), t.content.appendChild(this.getCanvas()._canvas)),
+ this
+ );
+ },
+ moveUp: function () {
+ if (!i.Node.prototype.moveUp.call(this)) return this;
+ var t = this.getStage();
+ return (
+ t &&
+ (t.content.removeChild(this.getCanvas()._canvas),
+ this.index < t.getChildren().length - 1
+ ? t.content.insertBefore(this.getCanvas()._canvas, t.getChildren()[this.index + 1].getCanvas()._canvas)
+ : t.content.appendChild(this.getCanvas()._canvas)),
+ this
+ );
+ },
+ moveDown: function () {
+ if (i.Node.prototype.moveDown.call(this)) {
+ var t = this.getStage();
+ if (t) {
+ var e = t.getChildren();
+ t.content.removeChild(this.getCanvas()._canvas),
+ t.content.insertBefore(this.getCanvas()._canvas, e[this.index + 1].getCanvas()._canvas);
+ }
+ }
+ return this;
+ },
+ moveToBottom: function () {
+ if (i.Node.prototype.moveToBottom.call(this)) {
+ var t = this.getStage();
+ if (t) {
+ var e = t.getChildren();
+ t.content.removeChild(this.getCanvas()._canvas),
+ t.content.insertBefore(this.getCanvas()._canvas, e[1].getCanvas()._canvas);
+ }
+ }
+ return this;
+ },
+ getLayer: function () {
+ return this;
+ },
+ remove: function () {
+ var t = this.getCanvas()._canvas;
+ return (
+ i.Node.prototype.remove.call(this),
+ t && t.parentNode && i.Util._isInDocument(t) && t.parentNode.removeChild(t),
+ this
+ );
+ },
+ getStage: function () {
+ return this.parent;
+ },
+ setSize: function (t, e) {
+ return this.canvas.setSize(t, e), this;
+ },
+ _toKonvaCanvas: function (t) {
+ return (
+ ((t = t || {}).width = t.width || this.getWidth()),
+ (t.height = t.height || this.getHeight()),
+ (t.x = void 0 !== t.x ? t.x : this.getX()),
+ (t.y = void 0 !== t.y ? t.y : this.getY()),
+ i.Node.prototype._toKonvaCanvas.call(this, t)
+ );
+ },
+ getWidth: function () {
+ if (this.parent) return this.parent.getWidth();
+ },
+ setWidth: function () {
+ i.Util.warn('Can not change width of layer. Use "stage.width(value)" function instead.');
+ },
+ getHeight: function () {
+ if (this.parent) return this.parent.getHeight();
+ },
+ setHeight: function () {
+ i.Util.warn('Can not change height of layer. Use "stage.height(value)" function instead.');
+ },
+ _applyTransform: function (t, e, i) {
+ var n = t.getAbsoluteTransform(i).getMatrix();
+ e.transform(n[0], n[1], n[2], n[3], n[4], n[5]);
+ },
+ }),
+ i.Util.extend(i.BaseLayer, i.Container),
+ i.Factory.addGetterSetter(i.BaseLayer, 'clearBeforeDraw', !0),
+ i.Collection.mapMethods(i.BaseLayer);
+ })(Konva),
+ (function () {
+ 'use strict';
+ var h = [
+ { x: 0, y: 0 },
+ { x: -1, y: -1 },
+ { x: 1, y: -1 },
+ { x: 1, y: 1 },
+ { x: -1, y: 1 },
+ ],
+ l = h.length;
+ (Konva.Layer = function (t) {
+ this.____init(t);
+ }),
+ Konva.Util.addMethods(Konva.Layer, {
+ ____init: function (t) {
+ (this.nodeType = 'Layer'),
+ (this.canvas = new Konva.SceneCanvas()),
+ (this.hitCanvas = new Konva.HitCanvas({ pixelRatio: 1 })),
+ Konva.BaseLayer.call(this, t);
+ },
+ _setCanvasSize: function (t, e) {
+ this.canvas.setSize(t, e), this.hitCanvas.setSize(t, e);
+ },
+ _validateAdd: function (t) {
+ var e = t.getType();
+ 'Group' !== e && 'Shape' !== e && Konva.Util.throw('You may only add groups and shapes to a layer.');
+ },
+ getIntersection: function (t, e) {
+ var i, n, a, r;
+ if (!this.hitGraphEnabled() || !this.isVisible()) return null;
+ for (var o = 1, s = !1; ; ) {
+ for (n = 0; n < l; n++) {
+ if (((a = h[n]), (r = (i = this._getIntersection({ x: t.x + a.x * o, y: t.y + a.y * o })).shape) && e))
+ return r.findAncestor(e, !0);
+ if (r) return r;
+ if (((s = !!i.antialiased), !i.antialiased)) break;
+ }
+ if (!s) return null;
+ o += 1;
+ }
+ },
+ _getImageData: function (t, e) {
+ var i = this.hitCanvas.width || 1,
+ n = this.hitCanvas.height || 1,
+ a = Math.round(e) * i + Math.round(t);
+ return (
+ this._hitImageData || (this._hitImageData = this.hitCanvas.context.getImageData(0, 0, i, n)),
+ [
+ this._hitImageData.data[4 * a + 0],
+ this._hitImageData.data[4 * a + 1],
+ this._hitImageData.data[4 * a + 2],
+ this._hitImageData.data[4 * a + 3],
+ ]
+ );
+ },
+ _getIntersection: function (t) {
+ var e,
+ i,
+ n = this.hitCanvas.pixelRatio,
+ a = this.hitCanvas.context.getImageData(Math.round(t.x * n), Math.round(t.y * n), 1, 1).data,
+ r = a[3];
+ return 255 === r
+ ? ((e = Konva.Util._rgbToHex(a[0], a[1], a[2])),
+ (i = Konva.shapes['#' + e]) ? { shape: i } : { antialiased: !0 })
+ : 0 < r
+ ? { antialiased: !0 }
+ : {};
+ },
+ drawScene: function (t, e) {
+ var i = this.getLayer(),
+ n = t || (i && i.getCanvas());
+ return (
+ this._fire('beforeDraw', { node: this }),
+ this.getClearBeforeDraw() && n.getContext().clear(),
+ Konva.Container.prototype.drawScene.call(this, n, e),
+ this._fire('draw', { node: this }),
+ this
+ );
+ },
+ drawHit: function (t, e) {
+ var i = this.getLayer(),
+ n = t || (i && i.hitCanvas);
+ return (
+ i && i.getClearBeforeDraw() && i.getHitCanvas().getContext().clear(),
+ Konva.Container.prototype.drawHit.call(this, n, e),
+ (this.imageData = null),
+ this
+ );
+ },
+ clear: function (t) {
+ return (
+ Konva.BaseLayer.prototype.clear.call(this, t),
+ this.getHitCanvas().getContext().clear(t),
+ (this.imageData = null),
+ this
+ );
+ },
+ setVisible: function (t) {
+ return (
+ Konva.Node.prototype.setVisible.call(this, t),
+ t
+ ? ((this.getCanvas()._canvas.style.display = 'block'), (this.hitCanvas._canvas.style.display = 'block'))
+ : ((this.getCanvas()._canvas.style.display = 'none'), (this.hitCanvas._canvas.style.display = 'none')),
+ this
+ );
+ },
+ enableHitGraph: function () {
+ return this.setHitGraphEnabled(!0), this;
+ },
+ disableHitGraph: function () {
+ return this.setHitGraphEnabled(!1), this;
+ },
+ setSize: function (t, e) {
+ return Konva.BaseLayer.prototype.setSize.call(this, t, e), this.hitCanvas.setSize(t, e), this;
+ },
+ }),
+ Konva.Util.extend(Konva.Layer, Konva.BaseLayer),
+ Konva.Factory.addGetterSetter(Konva.Layer, 'hitGraphEnabled', !0),
+ Konva.Collection.mapMethods(Konva.Layer);
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.FastLayer = function (t) {
+ this.____init(t);
+ }),
+ Konva.Util.addMethods(Konva.FastLayer, {
+ ____init: function (t) {
+ (this.nodeType = 'Layer'), (this.canvas = new Konva.SceneCanvas()), Konva.BaseLayer.call(this, t);
+ },
+ _validateAdd: function (t) {
+ 'Shape' !== t.getType() && Konva.Util.throw('You may only add shapes to a fast layer.');
+ },
+ _setCanvasSize: function (t, e) {
+ this.canvas.setSize(t, e);
+ },
+ hitGraphEnabled: function () {
+ return !1;
+ },
+ getIntersection: function () {
+ return null;
+ },
+ drawScene: function (t) {
+ var e = this.getLayer(),
+ i = t || (e && e.getCanvas());
+ return (
+ this.getClearBeforeDraw() && i.getContext().clear(), Konva.Container.prototype.drawScene.call(this, i), this
+ );
+ },
+ draw: function () {
+ return this.drawScene(), this;
+ },
+ setVisible: function (t) {
+ return (
+ Konva.Node.prototype.setVisible.call(this, t),
+ (this.getCanvas()._canvas.style.display = t ? 'block' : 'none'),
+ this
+ );
+ },
+ }),
+ Konva.Util.extend(Konva.FastLayer, Konva.BaseLayer),
+ Konva.Collection.mapMethods(Konva.FastLayer);
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Group = function (t) {
+ this.___init(t);
+ }),
+ Konva.Util.addMethods(Konva.Group, {
+ ___init: function (t) {
+ (this.nodeType = 'Group'), Konva.Container.call(this, t);
+ },
+ _validateAdd: function (t) {
+ var e = t.getType();
+ 'Group' !== e && 'Shape' !== e && Konva.Util.throw('You may only add groups and shapes to groups.');
+ },
+ }),
+ Konva.Util.extend(Konva.Group, Konva.Container),
+ Konva.Collection.mapMethods(Konva.Group);
+ })(),
+ (function (n) {
+ 'use strict';
+ var c =
+ n.global.performance && n.global.performance.now
+ ? function () {
+ return n.global.performance.now();
+ }
+ : function () {
+ return new Date().getTime();
+ };
+ function t(t) {
+ setTimeout(t, 1e3 / 60);
+ }
+ var e =
+ n.global.requestAnimationFrame ||
+ n.global.webkitRequestAnimationFrame ||
+ n.global.mozRequestAnimationFrame ||
+ n.global.oRequestAnimationFrame ||
+ n.global.msRequestAnimationFrame ||
+ t;
+ function i() {
+ return e.apply(n.global, arguments);
+ }
+ (n.Animation = function (t, e) {
+ var i = n.Animation;
+ (this.func = t),
+ this.setLayers(e),
+ (this.id = i.animIdCounter++),
+ (this.frame = { time: 0, timeDiff: 0, lastTime: c() });
+ }),
+ (n.Animation.prototype = {
+ setLayers: function (t) {
+ var e = [];
+ return (e = t ? (0 < t.length ? t : [t]) : []), (this.layers = e), this;
+ },
+ getLayers: function () {
+ return this.layers;
+ },
+ addLayer: function (t) {
+ var e,
+ i = this.layers,
+ n = i.length;
+ for (e = 0; e < n; e++) if (i[e]._id === t._id) return !1;
+ return this.layers.push(t), !0;
+ },
+ isRunning: function () {
+ var t,
+ e = n.Animation.animations,
+ i = e.length;
+ for (t = 0; t < i; t++) if (e[t].id === this.id) return !0;
+ return !1;
+ },
+ start: function () {
+ var t = n.Animation;
+ return this.stop(), (this.frame.timeDiff = 0), (this.frame.lastTime = c()), t._addAnimation(this), this;
+ },
+ stop: function () {
+ return n.Animation._removeAnimation(this), this;
+ },
+ _updateFrameObject: function (t) {
+ (this.frame.timeDiff = t - this.frame.lastTime),
+ (this.frame.lastTime = t),
+ (this.frame.time += this.frame.timeDiff),
+ (this.frame.frameRate = 1e3 / this.frame.timeDiff);
+ },
+ }),
+ (n.Animation.animations = []),
+ (n.Animation.animIdCounter = 0),
+ (n.Animation.animRunning = !1),
+ (n.Animation._addAnimation = function (t) {
+ this.animations.push(t), this._handleAnimation();
+ }),
+ (n.Animation._removeAnimation = function (t) {
+ var e,
+ i = t.id,
+ n = this.animations,
+ a = n.length;
+ for (e = 0; e < a; e++)
+ if (n[e].id === i) {
+ this.animations.splice(e, 1);
+ break;
+ }
+ }),
+ (n.Animation._runFrames = function () {
+ var t,
+ e,
+ i,
+ n,
+ a,
+ r,
+ o,
+ s,
+ h = {},
+ l = this.animations;
+ for (n = 0; n < l.length; n++)
+ if (
+ ((e = (t = l[n]).layers),
+ (i = t.func),
+ t._updateFrameObject(c()),
+ (r = e.length),
+ !i || !1 !== i.call(t, t.frame))
+ )
+ for (a = 0; a < r; a++) void 0 !== (o = e[a])._id && (h[o._id] = o);
+ for (s in h) h.hasOwnProperty(s) && h[s].draw();
+ }),
+ (n.Animation._animationLoop = function () {
+ var t = n.Animation;
+ t.animations.length ? (t._runFrames(), i(t._animationLoop)) : (t.animRunning = !1);
+ }),
+ (n.Animation._handleAnimation = function () {
+ this.animRunning || ((this.animRunning = !0), i(this._animationLoop));
+ }),
+ (n.BaseLayer.prototype.batchDraw = function () {
+ var t = this,
+ e = n.Animation;
+ return (
+ this.batchAnim ||
+ (this.batchAnim = new e(function () {
+ t.batchAnim.stop();
+ }, this)),
+ this.batchAnim.isRunning() || this.batchAnim.start(),
+ this
+ );
+ }),
+ (n.Stage.prototype.batchDraw = function () {
+ return (
+ this.getChildren().each(function (t) {
+ t.batchDraw();
+ }),
+ this
+ );
+ });
+ })(Konva),
+ (function () {
+ 'use strict';
+ var l = { node: 1, duration: 1, easing: 1, onFinish: 1, yoyo: 1 },
+ c = 0,
+ g = ['fill', 'stroke', 'shadowColor'],
+ d = function (t, e, i, n, a, r, o) {
+ (this.prop = t),
+ (this.propFunc = e),
+ (this.begin = n),
+ (this._pos = n),
+ (this.duration = r),
+ (this._change = 0),
+ (this.prevPos = 0),
+ (this.yoyo = o),
+ (this._time = 0),
+ (this._position = 0),
+ (this._startTime = 0),
+ (this._finish = 0),
+ (this.func = i),
+ (this._change = a - this.begin),
+ this.pause();
+ };
+ (d.prototype = {
+ fire: function (t) {
+ var e = this[t];
+ e && e();
+ },
+ setTime: function (t) {
+ t > this.duration
+ ? this.yoyo
+ ? ((this._time = this.duration), this.reverse())
+ : this.finish()
+ : t < 0
+ ? this.yoyo
+ ? ((this._time = 0), this.play())
+ : this.reset()
+ : ((this._time = t), this.update());
+ },
+ getTime: function () {
+ return this._time;
+ },
+ setPosition: function (t) {
+ (this.prevPos = this._pos), this.propFunc(t), (this._pos = t);
+ },
+ getPosition: function (t) {
+ return void 0 === t && (t = this._time), this.func(t, this.begin, this._change, this.duration);
+ },
+ play: function () {
+ (this.state = 2), (this._startTime = this.getTimer() - this._time), this.onEnterFrame(), this.fire('onPlay');
+ },
+ reverse: function () {
+ (this.state = 3),
+ (this._time = this.duration - this._time),
+ (this._startTime = this.getTimer() - this._time),
+ this.onEnterFrame(),
+ this.fire('onReverse');
+ },
+ seek: function (t) {
+ this.pause(), (this._time = t), this.update(), this.fire('onSeek');
+ },
+ reset: function () {
+ this.pause(), (this._time = 0), this.update(), this.fire('onReset');
+ },
+ finish: function () {
+ this.pause(), (this._time = this.duration), this.update(), this.fire('onFinish');
+ },
+ update: function () {
+ this.setPosition(this.getPosition(this._time));
+ },
+ onEnterFrame: function () {
+ var t = this.getTimer() - this._startTime;
+ 2 === this.state ? this.setTime(t) : 3 === this.state && this.setTime(this.duration - t);
+ },
+ pause: function () {
+ (this.state = 1), this.fire('onPause');
+ },
+ getTimer: function () {
+ return new Date().getTime();
+ },
+ }),
+ (Konva.Tween = function (t) {
+ var e,
+ i,
+ n = this,
+ a = t.node,
+ r = a._id,
+ o = t.easing || Konva.Easings.Linear,
+ s = !!t.yoyo;
+ (e = void 0 === t.duration ? 0.3 : 0 === t.duration ? 0.001 : t.duration), (this.node = a), (this._id = c++);
+ var h = a.getLayer() || (a instanceof Konva.Stage ? a.getLayers() : null);
+ for (i in (h ||
+ Konva.Util.error('Tween constructor have `node` that is not in a layer. Please add node into layer first.'),
+ (this.anim = new Konva.Animation(function () {
+ n.tween.onEnterFrame();
+ }, h)),
+ (this.tween = new d(
+ i,
+ function (t) {
+ n._tweenFunc(t);
+ },
+ o,
+ 0,
+ 1,
+ 1e3 * e,
+ s,
+ )),
+ this._addListeners(),
+ Konva.Tween.attrs[r] || (Konva.Tween.attrs[r] = {}),
+ Konva.Tween.attrs[r][this._id] || (Konva.Tween.attrs[r][this._id] = {}),
+ Konva.Tween.tweens[r] || (Konva.Tween.tweens[r] = {}),
+ t))
+ void 0 === l[i] && this._addAttr(i, t[i]);
+ this.reset(), (this.onFinish = t.onFinish), (this.onReset = t.onReset);
+ }),
+ (Konva.Tween.attrs = {}),
+ (Konva.Tween.tweens = {}),
+ (Konva.Tween.prototype = {
+ _addAttr: function (t, e) {
+ var i,
+ n,
+ a,
+ r,
+ o,
+ s,
+ h,
+ l,
+ c = this.node,
+ d = c._id;
+ if (
+ ((a = Konva.Tween.tweens[d][t]) && delete Konva.Tween.attrs[d][a][t],
+ (i = c.getAttr(t)),
+ Konva.Util._isArray(e))
+ )
+ if (
+ ((n = []),
+ (o = Math.max(e.length, i.length)),
+ 'points' === t &&
+ e.length !== i.length &&
+ (e.length > i.length
+ ? ((h = i), (i = Konva.Util._prepareArrayForTween(i, e, c.closed())))
+ : ((s = e), (e = Konva.Util._prepareArrayForTween(e, i, c.closed())))),
+ 0 === t.indexOf('fill'))
+ )
+ for (r = 0; r < o; r++)
+ if (r % 2 == 0) n.push(e[r] - i[r]);
+ else {
+ var u = Konva.Util.colorToRGBA(i[r]);
+ (l = Konva.Util.colorToRGBA(e[r])),
+ (i[r] = u),
+ n.push({ r: l.r - u.r, g: l.g - u.g, b: l.b - u.b, a: l.a - u.a });
+ }
+ else for (r = 0; r < o; r++) n.push(e[r] - i[r]);
+ else
+ -1 !== g.indexOf(t)
+ ? ((i = Konva.Util.colorToRGBA(i)),
+ (n = { r: (l = Konva.Util.colorToRGBA(e)).r - i.r, g: l.g - i.g, b: l.b - i.b, a: l.a - i.a }))
+ : (n = e - i);
+ (Konva.Tween.attrs[d][this._id][t] = { start: i, diff: n, end: e, trueEnd: s, trueStart: h }),
+ (Konva.Tween.tweens[d][t] = this._id);
+ },
+ _tweenFunc: function (t) {
+ var e,
+ i,
+ n,
+ a,
+ r,
+ o,
+ s,
+ h,
+ l = this.node,
+ c = Konva.Tween.attrs[l._id][this._id];
+ for (e in c) {
+ if (((n = (i = c[e]).start), (a = i.diff), (h = i.end), Konva.Util._isArray(n)))
+ if (((r = []), (s = Math.max(n.length, h.length)), 0 === e.indexOf('fill')))
+ for (o = 0; o < s; o++)
+ o % 2 == 0
+ ? r.push((n[o] || 0) + a[o] * t)
+ : r.push(
+ 'rgba(' +
+ Math.round(n[o].r + a[o].r * t) +
+ ',' +
+ Math.round(n[o].g + a[o].g * t) +
+ ',' +
+ Math.round(n[o].b + a[o].b * t) +
+ ',' +
+ (n[o].a + a[o].a * t) +
+ ')',
+ );
+ else for (o = 0; o < s; o++) r.push((n[o] || 0) + a[o] * t);
+ else
+ r =
+ -1 !== g.indexOf(e)
+ ? 'rgba(' +
+ Math.round(n.r + a.r * t) +
+ ',' +
+ Math.round(n.g + a.g * t) +
+ ',' +
+ Math.round(n.b + a.b * t) +
+ ',' +
+ (n.a + a.a * t) +
+ ')'
+ : n + a * t;
+ l.setAttr(e, r);
+ }
+ },
+ _addListeners: function () {
+ var i = this;
+ (this.tween.onPlay = function () {
+ i.anim.start();
+ }),
+ (this.tween.onReverse = function () {
+ i.anim.start();
+ }),
+ (this.tween.onPause = function () {
+ i.anim.stop();
+ }),
+ (this.tween.onFinish = function () {
+ var t = i.node,
+ e = Konva.Tween.attrs[t._id][i._id];
+ e.points && e.points.trueEnd && t.points(e.points.trueEnd), i.onFinish && i.onFinish.call(i);
+ }),
+ (this.tween.onReset = function () {
+ var t = i.node,
+ e = Konva.Tween.attrs[t._id][i._id];
+ e.points && e.points.trueStart && t.points(e.points.trueStart), i.onReset && i.onReset();
+ });
+ },
+ play: function () {
+ return this.tween.play(), this;
+ },
+ reverse: function () {
+ return this.tween.reverse(), this;
+ },
+ reset: function () {
+ return this.tween.reset(), this;
+ },
+ seek: function (t) {
+ return this.tween.seek(1e3 * t), this;
+ },
+ pause: function () {
+ return this.tween.pause(), this;
+ },
+ finish: function () {
+ return this.tween.finish(), this;
+ },
+ destroy: function () {
+ var t,
+ e = this.node._id,
+ i = this._id,
+ n = Konva.Tween.tweens[e];
+ for (t in (this.pause(), n)) delete Konva.Tween.tweens[e][t];
+ delete Konva.Tween.attrs[e][i];
+ },
+ }),
+ (Konva.Node.prototype.to = function (t) {
+ var e = t.onFinish;
+ (t.node = this),
+ (t.onFinish = function () {
+ this.destroy(), e && e();
+ }),
+ new Konva.Tween(t).play();
+ }),
+ (Konva.Easings = {
+ BackEaseIn: function (t, e, i, n) {
+ return i * (t /= n) * t * (2.70158 * t - 1.70158) + e;
+ },
+ BackEaseOut: function (t, e, i, n) {
+ return i * ((t = t / n - 1) * t * (2.70158 * t + 1.70158) + 1) + e;
+ },
+ BackEaseInOut: function (t, e, i, n) {
+ var a = 1.70158;
+ return (t /= n / 2) < 1
+ ? (i / 2) * (t * t * ((1 + (a *= 1.525)) * t - a)) + e
+ : (i / 2) * ((t -= 2) * t * ((1 + (a *= 1.525)) * t + a) + 2) + e;
+ },
+ ElasticEaseIn: function (t, e, i, n, a, r) {
+ var o = 0;
+ return 0 === t
+ ? e
+ : 1 == (t /= n)
+ ? e + i
+ : (r || (r = 0.3 * n),
+ !a || a < Math.abs(i) ? ((a = i), (o = r / 4)) : (o = (r / (2 * Math.PI)) * Math.asin(i / a)),
+ -a * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t * n - o) * (2 * Math.PI)) / r) + e);
+ },
+ ElasticEaseOut: function (t, e, i, n, a, r) {
+ var o = 0;
+ return 0 === t
+ ? e
+ : 1 == (t /= n)
+ ? e + i
+ : (r || (r = 0.3 * n),
+ !a || a < Math.abs(i) ? ((a = i), (o = r / 4)) : (o = (r / (2 * Math.PI)) * Math.asin(i / a)),
+ a * Math.pow(2, -10 * t) * Math.sin(((t * n - o) * (2 * Math.PI)) / r) + i + e);
+ },
+ ElasticEaseInOut: function (t, e, i, n, a, r) {
+ var o = 0;
+ return 0 === t
+ ? e
+ : 2 == (t /= n / 2)
+ ? e + i
+ : (r || (r = n * (0.3 * 1.5)),
+ !a || a < Math.abs(i) ? ((a = i), (o = r / 4)) : (o = (r / (2 * Math.PI)) * Math.asin(i / a)),
+ t < 1
+ ? a * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t * n - o) * (2 * Math.PI)) / r) * -0.5 + e
+ : a * Math.pow(2, -10 * (t -= 1)) * Math.sin(((t * n - o) * (2 * Math.PI)) / r) * 0.5 + i + e);
+ },
+ BounceEaseOut: function (t, e, i, n) {
+ return (t /= n) < 1 / 2.75
+ ? i * (7.5625 * t * t) + e
+ : t < 2 / 2.75
+ ? i * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + e
+ : t < 2.5 / 2.75
+ ? i * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + e
+ : i * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + e;
+ },
+ BounceEaseIn: function (t, e, i, n) {
+ return i - Konva.Easings.BounceEaseOut(n - t, 0, i, n) + e;
+ },
+ BounceEaseInOut: function (t, e, i, n) {
+ return t < n / 2
+ ? 0.5 * Konva.Easings.BounceEaseIn(2 * t, 0, i, n) + e
+ : 0.5 * Konva.Easings.BounceEaseOut(2 * t - n, 0, i, n) + 0.5 * i + e;
+ },
+ EaseIn: function (t, e, i, n) {
+ return i * (t /= n) * t + e;
+ },
+ EaseOut: function (t, e, i, n) {
+ return -i * (t /= n) * (t - 2) + e;
+ },
+ EaseInOut: function (t, e, i, n) {
+ return (t /= n / 2) < 1 ? (i / 2) * t * t + e : (-i / 2) * (--t * (t - 2) - 1) + e;
+ },
+ StrongEaseIn: function (t, e, i, n) {
+ return i * (t /= n) * t * t * t * t + e;
+ },
+ StrongEaseOut: function (t, e, i, n) {
+ return i * ((t = t / n - 1) * t * t * t * t + 1) + e;
+ },
+ StrongEaseInOut: function (t, e, i, n) {
+ return (t /= n / 2) < 1 ? (i / 2) * t * t * t * t * t + e : (i / 2) * ((t -= 2) * t * t * t * t + 2) + e;
+ },
+ Linear: function (t, e, i, n) {
+ return (i * t) / n + e;
+ },
+ });
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.DD = {
+ anim: new Konva.Animation(function () {
+ var t = this.dirty;
+ return (this.dirty = !1), t;
+ }),
+ isDragging: !1,
+ justDragged: !1,
+ offset: { x: 0, y: 0 },
+ node: null,
+ _drag: function (t) {
+ var e = Konva.DD,
+ i = e.node;
+ if (i) {
+ if (!e.isDragging) {
+ var n = i.getStage().getPointerPosition();
+ n || (i.getStage()._setPointerPosition(t), (n = i.getStage().getPointerPosition()));
+ var a = i.dragDistance();
+ if (Math.max(Math.abs(n.x - e.startPointerPos.x), Math.abs(n.y - e.startPointerPos.y)) < a) return;
+ }
+ i.getStage()._setPointerPosition(t),
+ i._setDragPosition(t),
+ e.isDragging || ((e.isDragging = !0), i.fire('dragstart', { type: 'dragstart', target: i, evt: t }, !0)),
+ i.fire('dragmove', { type: 'dragmove', target: i, evt: t }, !0);
+ }
+ },
+ _endDragBefore: function (t) {
+ var e,
+ i = Konva.DD,
+ n = i.node;
+ n &&
+ ((e = n.getLayer()),
+ i.anim.stop(),
+ i.isDragging &&
+ ((i.isDragging = !1), (i.justDragged = !0), (Konva.listenClickTap = !1), t && (t.dragEndNode = n)),
+ delete i.node,
+ (n.getLayer() || e || n instanceof Konva.Stage) && (e || n).draw());
+ },
+ _endDragAfter: function (t) {
+ var e = (t = t || {}).dragEndNode;
+ t && e && e.fire('dragend', { type: 'dragend', target: e, evt: t }, !0);
+ },
+ }),
+ (Konva.Node.prototype.startDrag = function () {
+ var t = Konva.DD,
+ e = this.getStage(),
+ i = this.getLayer(),
+ n = e.getPointerPosition(),
+ a = this.getAbsolutePosition();
+ n &&
+ (t.node && t.node.stopDrag(),
+ (t.node = this),
+ (t.startPointerPos = n),
+ (t.offset.x = n.x - a.x),
+ (t.offset.y = n.y - a.y),
+ t.anim.setLayers(i || this.getLayers()),
+ t.anim.start(),
+ this._setDragPosition());
+ }),
+ (Konva.Node.prototype._setDragPosition = function (t) {
+ var e = Konva.DD,
+ i = this.getStage().getPointerPosition(),
+ n = this.getDragBoundFunc();
+ if (i) {
+ var a = { x: i.x - e.offset.x, y: i.y - e.offset.y };
+ void 0 !== n && (a = n.call(this, a, t)),
+ this.setAbsolutePosition(a),
+ (this._lastPos && this._lastPos.x === a.x && this._lastPos.y === a.y) || (e.anim.dirty = !0),
+ (this._lastPos = a);
+ }
+ }),
+ (Konva.Node.prototype.stopDrag = function () {
+ var t = Konva.DD,
+ e = {};
+ t._endDragBefore(e), t._endDragAfter(e);
+ }),
+ (Konva.Node.prototype.setDraggable = function (t) {
+ this._setAttr('draggable', t), this._dragChange();
+ });
+ var e = Konva.Node.prototype.remove;
+ (Konva.Node.prototype.__originalRemove = e),
+ (Konva.Node.prototype.remove = function () {
+ var t = Konva.DD;
+ t.node && t.node._id === this._id && this.stopDrag(), e.call(this);
+ }),
+ (Konva.Node.prototype.isDragging = function () {
+ var t = Konva.DD;
+ return !(!t.node || t.node._id !== this._id || !t.isDragging);
+ }),
+ (Konva.Node.prototype._listenDrag = function () {
+ var e = this;
+ this._dragCleanup(),
+ 'Stage' === this.getClassName()
+ ? this.on('contentMousedown.konva contentTouchstart.konva', function (t) {
+ Konva.DD.node || e.startDrag(t);
+ })
+ : this.on('mousedown.konva touchstart.konva', function (t) {
+ 1 !== t.evt.button && 2 !== t.evt.button && (Konva.DD.node || e.startDrag(t));
+ });
+ }),
+ (Konva.Node.prototype._dragChange = function () {
+ if (this.attrs.draggable) this._listenDrag();
+ else {
+ this._dragCleanup();
+ var t = this.getStage(),
+ e = Konva.DD;
+ t && e.node && e.node._id === this._id && e.node.stopDrag();
+ }
+ }),
+ (Konva.Node.prototype._dragCleanup = function () {
+ 'Stage' === this.getClassName()
+ ? (this.off('contentMousedown.konva'), this.off('contentTouchstart.konva'))
+ : (this.off('mousedown.konva'), this.off('touchstart.konva'));
+ }),
+ Konva.Factory.addGetterSetter(Konva.Node, 'dragBoundFunc'),
+ Konva.Factory.addGetter(Konva.Node, 'draggable', !1),
+ Konva.Factory.addOverloadedGetterSetter(Konva.Node, 'draggable'),
+ Konva.isBrowser &&
+ (window.addEventListener('mouseup', Konva.DD._endDragBefore, !0),
+ window.addEventListener('touchend', Konva.DD._endDragBefore, !0),
+ window.addEventListener('mousemove', Konva.DD._drag),
+ window.addEventListener('touchmove', Konva.DD._drag),
+ window.addEventListener('mouseup', Konva.DD._endDragAfter, !1),
+ window.addEventListener('touchend', Konva.DD._endDragAfter, !1));
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Rect = function (t) {
+ this.___init(t);
+ }),
+ (Konva.Rect.prototype = {
+ ___init: function (t) {
+ Konva.Shape.call(this, t), (this.className = 'Rect'), this.sceneFunc(this._sceneFunc);
+ },
+ _sceneFunc: function (t) {
+ var e = this.getCornerRadius(),
+ i = this.getWidth(),
+ n = this.getHeight();
+ t.beginPath(),
+ e
+ ? ((e = Math.min(e, i / 2, n / 2)),
+ t.moveTo(e, 0),
+ t.lineTo(i - e, 0),
+ t.arc(i - e, e, e, (3 * Math.PI) / 2, 0, !1),
+ t.lineTo(i, n - e),
+ t.arc(i - e, n - e, e, 0, Math.PI / 2, !1),
+ t.lineTo(e, n),
+ t.arc(e, n - e, e, Math.PI / 2, Math.PI, !1),
+ t.lineTo(0, e),
+ t.arc(e, e, e, Math.PI, (3 * Math.PI) / 2, !1))
+ : t.rect(0, 0, i, n),
+ t.closePath(),
+ t.fillStrokeShape(this);
+ },
+ }),
+ Konva.Util.extend(Konva.Rect, Konva.Shape),
+ Konva.Factory.addGetterSetter(Konva.Rect, 'cornerRadius', 0, Konva.Validators.getNumberValidator()),
+ Konva.Collection.mapMethods(Konva.Rect);
+ })(),
+ (function (e) {
+ 'use strict';
+ var i = 2 * Math.PI - 1e-4;
+ (e.Circle = function (t) {
+ this.___init(t);
+ }),
+ (e.Circle.prototype = {
+ _centroid: !0,
+ ___init: function (t) {
+ e.Shape.call(this, t), (this.className = 'Circle'), this.sceneFunc(this._sceneFunc);
+ },
+ _sceneFunc: function (t) {
+ t.beginPath(), t.arc(0, 0, this.getRadius(), 0, i, !1), t.closePath(), t.fillStrokeShape(this);
+ },
+ getWidth: function () {
+ return 2 * this.getRadius();
+ },
+ getHeight: function () {
+ return 2 * this.getRadius();
+ },
+ setWidth: function (t) {
+ e.Node.prototype.setWidth.call(this, t), this.radius() !== t / 2 && this.setRadius(t / 2);
+ },
+ setHeight: function (t) {
+ e.Node.prototype.setHeight.call(this, t), this.radius() !== t / 2 && this.setRadius(t / 2);
+ },
+ }),
+ e.Util.extend(e.Circle, e.Shape),
+ e.Factory.addGetterSetter(e.Circle, 'radius', 0, e.Validators.getNumberValidator()),
+ e.Factory.addOverloadedGetterSetter(e.Circle, 'radius'),
+ e.Collection.mapMethods(e.Circle);
+ })(Konva),
+ (function () {
+ 'use strict';
+ var n = 2 * Math.PI - 1e-4;
+ (Konva.Ellipse = function (t) {
+ this.___init(t);
+ }),
+ (Konva.Ellipse.prototype = {
+ _centroid: !0,
+ ___init: function (t) {
+ Konva.Shape.call(this, t), (this.className = 'Ellipse'), this.sceneFunc(this._sceneFunc);
+ },
+ _sceneFunc: function (t) {
+ var e = this.getRadiusX(),
+ i = this.getRadiusY();
+ t.beginPath(),
+ t.save(),
+ e !== i && t.scale(1, i / e),
+ t.arc(0, 0, e, 0, n, !1),
+ t.restore(),
+ t.closePath(),
+ t.fillStrokeShape(this);
+ },
+ getWidth: function () {
+ return 2 * this.getRadiusX();
+ },
+ getHeight: function () {
+ return 2 * this.getRadiusY();
+ },
+ setWidth: function (t) {
+ Konva.Node.prototype.setWidth.call(this, t), this.setRadius({ x: t / 2 });
+ },
+ setHeight: function (t) {
+ Konva.Node.prototype.setHeight.call(this, t), this.setRadius({ y: t / 2 });
+ },
+ }),
+ Konva.Util.extend(Konva.Ellipse, Konva.Shape),
+ Konva.Factory.addComponentsGetterSetter(Konva.Ellipse, 'radius', ['x', 'y']),
+ Konva.Factory.addGetterSetter(Konva.Ellipse, 'radiusX', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Ellipse, 'radiusY', 0, Konva.Validators.getNumberValidator()),
+ Konva.Collection.mapMethods(Konva.Ellipse);
+ })(),
+ (function () {
+ 'use strict';
+ var e = 2 * Math.PI - 1e-4;
+ (Konva.Ring = function (t) {
+ this.___init(t);
+ }),
+ (Konva.Ring.prototype = {
+ _centroid: !0,
+ ___init: function (t) {
+ Konva.Shape.call(this, t), (this.className = 'Ring'), this.sceneFunc(this._sceneFunc);
+ },
+ _sceneFunc: function (t) {
+ t.beginPath(),
+ t.arc(0, 0, this.getInnerRadius(), 0, e, !1),
+ t.moveTo(this.getOuterRadius(), 0),
+ t.arc(0, 0, this.getOuterRadius(), e, 0, !0),
+ t.closePath(),
+ t.fillStrokeShape(this);
+ },
+ getWidth: function () {
+ return 2 * this.getOuterRadius();
+ },
+ getHeight: function () {
+ return 2 * this.getOuterRadius();
+ },
+ setWidth: function (t) {
+ Konva.Node.prototype.setWidth.call(this, t), this.outerRadius() !== t / 2 && this.setOuterRadius(t / 2);
+ },
+ setHeight: function (t) {
+ Konva.Node.prototype.setHeight.call(this, t), this.outerRadius() !== t / 2 && this.setOuterRadius(t / 2);
+ },
+ setOuterRadius: function (t) {
+ this._setAttr('outerRadius', t), this.setWidth(2 * t), this.setHeight(2 * t);
+ },
+ }),
+ Konva.Util.extend(Konva.Ring, Konva.Shape),
+ Konva.Factory.addGetterSetter(Konva.Ring, 'innerRadius', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetter(Konva.Ring, 'outerRadius', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addOverloadedGetterSetter(Konva.Ring, 'outerRadius'),
+ Konva.Collection.mapMethods(Konva.Ring);
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Wedge = function (t) {
+ this.___init(t);
+ }),
+ (Konva.Wedge.prototype = {
+ _centroid: !0,
+ ___init: function (t) {
+ Konva.Shape.call(this, t), (this.className = 'Wedge'), this.sceneFunc(this._sceneFunc);
+ },
+ _sceneFunc: function (t) {
+ t.beginPath(),
+ t.arc(0, 0, this.getRadius(), 0, Konva.getAngle(this.getAngle()), this.getClockwise()),
+ t.lineTo(0, 0),
+ t.closePath(),
+ t.fillStrokeShape(this);
+ },
+ getWidth: function () {
+ return 2 * this.getRadius();
+ },
+ getHeight: function () {
+ return 2 * this.getRadius();
+ },
+ setWidth: function (t) {
+ Konva.Node.prototype.setWidth.call(this, t), this.radius() !== t / 2 && this.setRadius(t / 2);
+ },
+ setHeight: function (t) {
+ Konva.Node.prototype.setHeight.call(this, t), this.radius() !== t / 2 && this.setRadius(t / 2);
+ },
+ }),
+ Konva.Util.extend(Konva.Wedge, Konva.Shape),
+ Konva.Factory.addGetterSetter(Konva.Wedge, 'radius', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Wedge, 'angle', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Wedge, 'clockwise', !1),
+ Konva.Factory.backCompat(Konva.Wedge, { angleDeg: 'angle', getAngleDeg: 'getAngle', setAngleDeg: 'setAngle' }),
+ Konva.Collection.mapMethods(Konva.Wedge);
+ })(),
+ (function (n) {
+ 'use strict';
+ (n.Arc = function (t) {
+ this.___init(t);
+ }),
+ (n.Arc.prototype = {
+ _centroid: !0,
+ ___init: function (t) {
+ n.Shape.call(this, t), (this.className = 'Arc'), this.sceneFunc(this._sceneFunc);
+ },
+ _sceneFunc: function (t) {
+ var e = n.getAngle(this.angle()),
+ i = this.clockwise();
+ t.beginPath(),
+ t.arc(0, 0, this.getOuterRadius(), 0, e, i),
+ t.arc(0, 0, this.getInnerRadius(), e, 0, !i),
+ t.closePath(),
+ t.fillStrokeShape(this);
+ },
+ getWidth: function () {
+ return 2 * this.getOuterRadius();
+ },
+ getHeight: function () {
+ return 2 * this.getOuterRadius();
+ },
+ setWidth: function (t) {
+ n.Node.prototype.setWidth.call(this, t), this.getOuterRadius() !== t / 2 && this.setOuterRadius(t / 2);
+ },
+ setHeight: function (t) {
+ n.Node.prototype.setHeight.call(this, t), this.getOuterRadius() !== t / 2 && this.setOuterRadius(t / 2);
+ },
+ }),
+ n.Util.extend(n.Arc, n.Shape),
+ n.Factory.addGetterSetter(n.Arc, 'innerRadius', 0, n.Validators.getNumberValidator()),
+ n.Factory.addGetterSetter(n.Arc, 'outerRadius', 0, n.Validators.getNumberValidator()),
+ n.Factory.addGetterSetter(n.Arc, 'angle', 0, n.Validators.getNumberValidator()),
+ n.Factory.addGetterSetter(n.Arc, 'clockwise', !1),
+ n.Collection.mapMethods(n.Arc);
+ })(Konva),
+ (function () {
+ 'use strict';
+ (Konva.Image = function (t) {
+ this.___init(t);
+ }),
+ (Konva.Image.prototype = {
+ ___init: function (t) {
+ Konva.Shape.call(this, t),
+ (this.className = 'Image'),
+ this.sceneFunc(this._sceneFunc),
+ this.hitFunc(this._hitFunc);
+ },
+ _useBufferCanvas: function () {
+ return (this.hasShadow() || 1 !== this.getAbsoluteOpacity()) && this.hasStroke() && this.getStage();
+ },
+ _sceneFunc: function (t) {
+ var e,
+ i,
+ n,
+ a = this.getWidth(),
+ r = this.getHeight(),
+ o = this.getImage();
+ o &&
+ ((e = this.getCropWidth()),
+ (i = this.getCropHeight()),
+ (n = e && i ? [o, this.getCropX(), this.getCropY(), e, i, 0, 0, a, r] : [o, 0, 0, a, r])),
+ (this.hasFill() || this.hasStroke()) &&
+ (t.beginPath(), t.rect(0, 0, a, r), t.closePath(), t.fillStrokeShape(this)),
+ o && t.drawImage.apply(t, n);
+ },
+ _hitFunc: function (t) {
+ var e = this.getWidth(),
+ i = this.getHeight();
+ t.beginPath(), t.rect(0, 0, e, i), t.closePath(), t.fillStrokeShape(this);
+ },
+ getWidth: function () {
+ var t = this.getImage();
+ return this.attrs.width || (t ? t.width : 0);
+ },
+ getHeight: function () {
+ var t = this.getImage();
+ return this.attrs.height || (t ? t.height : 0);
+ },
+ }),
+ Konva.Util.extend(Konva.Image, Konva.Shape),
+ Konva.Factory.addGetterSetter(Konva.Image, 'image'),
+ Konva.Factory.addComponentsGetterSetter(Konva.Image, 'crop', ['x', 'y', 'width', 'height']),
+ Konva.Factory.addGetterSetter(Konva.Image, 'cropX', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Image, 'cropY', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Image, 'cropWidth', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Image, 'cropHeight', 0, Konva.Validators.getNumberValidator()),
+ Konva.Collection.mapMethods(Konva.Image),
+ (Konva.Image.fromURL = function (t, e) {
+ var i = new Image();
+ (i.onload = function () {
+ var t = new Konva.Image({ image: i });
+ e(t);
+ }),
+ (i.crossOrigin = 'Anonymous'),
+ (i.src = t);
+ });
+ })(),
+ (function () {
+ 'use strict';
+ var t,
+ M = 'auto',
+ C = 'justify',
+ e = '2d',
+ i = [
+ 'fontFamily',
+ 'fontSize',
+ 'fontStyle',
+ 'fontVariant',
+ 'padding',
+ 'align',
+ 'verticalAlign',
+ 'lineHeight',
+ 'text',
+ 'width',
+ 'height',
+ 'wrap',
+ 'ellipsis',
+ 'letterSpacing',
+ ],
+ n = i.length;
+ function k() {
+ return t || (t = Konva.Util.createCanvasElement().getContext(e));
+ }
+ function a(t) {
+ t.fillText(this.partialText, 0, 0);
+ }
+ function r(t) {
+ t.strokeText(this.partialText, 0, 0);
+ }
+ (Konva.Text = function (t) {
+ this.___init(t);
+ }),
+ (Konva.Text.prototype = {
+ ___init: function (t) {
+ (t = t || {}).fillLinearGradientColorStops || t.fillRadialGradientColorStops || (t.fill = t.fill || 'black'),
+ Konva.Shape.call(this, t),
+ (this._fillFunc = a),
+ (this._strokeFunc = r),
+ (this.className = 'Text');
+ for (var e = 0; e < n; e++) this.on(i[e] + 'Change.konva', this._setTextData);
+ this._setTextData(), this.sceneFunc(this._sceneFunc), this.hitFunc(this._hitFunc);
+ },
+ _sceneFunc: function (t) {
+ var e,
+ i = this.getPadding(),
+ n = this.getTextHeight(),
+ a = this.getLineHeight() * n,
+ r = this.textArr,
+ o = r.length,
+ s = this.getVerticalAlign(),
+ h = 0,
+ l = this.getAlign(),
+ c = this.getWidth(),
+ d = this.getLetterSpacing(),
+ u = this.textDecoration(),
+ g = this.fill(),
+ f = this.fontSize();
+ for (
+ t.setAttr('font', this._getContextFont()),
+ t.setAttr('textBaseline', 'middle'),
+ t.setAttr('textAlign', 'left'),
+ 'middle' === s
+ ? (h = (this.getHeight() - o * a - 2 * i) / 2)
+ : 'bottom' === s && (h = this.getHeight() - o * a - 2 * i),
+ i ? (t.translate(i, 0), t.translate(0, h + i + a / 2)) : t.translate(0, h + a / 2),
+ e = 0;
+ e < o;
+ e++
+ ) {
+ var v,
+ p,
+ m,
+ _ = r[e],
+ y = _.text,
+ K = _.width,
+ S = e !== o - 1;
+ if (
+ (t.save(),
+ 'right' === l ? t.translate(c - K - 2 * i, 0) : 'center' === l && t.translate((c - K - 2 * i) / 2, 0),
+ -1 !== u.indexOf('underline') &&
+ (t.save(),
+ t.beginPath(),
+ t.moveTo(0, Math.round(a / 2)),
+ (p = 0 === (v = y.split(' ').length - 1)),
+ (m = l === C && S && !p ? c - 2 * i : K),
+ t.lineTo(Math.round(m), Math.round(a / 2)),
+ (t.lineWidth = f / 15),
+ (t.strokeStyle = g),
+ t.stroke(),
+ t.restore()),
+ -1 !== u.indexOf('line-through') &&
+ (t.save(),
+ t.beginPath(),
+ t.moveTo(0, 0),
+ (p = 0 === (v = y.split(' ').length - 1)),
+ (m = l === C && S && !p ? c - 2 * i : K),
+ t.lineTo(Math.round(m), 0),
+ (t.lineWidth = f / 15),
+ (t.strokeStyle = g),
+ t.stroke(),
+ t.restore()),
+ 0 !== d || l === C)
+ ) {
+ v = y.split(' ').length - 1;
+ for (var b = 0; b < y.length; b++) {
+ var x = y[b];
+ ' ' === x && e !== o - 1 && l === C && t.translate(Math.floor((c - 2 * i - K) / v), 0),
+ (this.partialText = x),
+ t.fillStrokeShape(this),
+ t.translate(Math.round(this._getTextSize(x).width) + d, 0);
+ }
+ } else (this.partialText = y), t.fillStrokeShape(this);
+ t.restore(), 1 < o && t.translate(0, a);
+ }
+ },
+ _hitFunc: function (t) {
+ var e = this.getWidth(),
+ i = this.getHeight();
+ t.beginPath(), t.rect(0, 0, e, i), t.closePath(), t.fillStrokeShape(this);
+ },
+ setText: function (t) {
+ var e = Konva.Util._isString(t) ? t : (t || '').toString();
+ return this._setAttr('text', e), this;
+ },
+ getWidth: function () {
+ return this.attrs.width === M || void 0 === this.attrs.width
+ ? this.getTextWidth() + 2 * this.getPadding()
+ : this.attrs.width;
+ },
+ getHeight: function () {
+ return this.attrs.height === M || void 0 === this.attrs.height
+ ? this.getTextHeight() * this.textArr.length * this.getLineHeight() + 2 * this.getPadding()
+ : this.attrs.height;
+ },
+ getTextWidth: function () {
+ return this.textWidth;
+ },
+ getTextHeight: function () {
+ return this.textHeight;
+ },
+ _getTextSize: function (t) {
+ var e,
+ i = k(),
+ n = this.getFontSize();
+ return (
+ i.save(),
+ (i.font = this._getContextFont()),
+ (e = i.measureText(t)),
+ i.restore(),
+ { width: e.width, height: parseInt(n, 10) }
+ );
+ },
+ _getContextFont: function () {
+ return Konva.UA.isIE
+ ? this.getFontStyle() + ' ' + this.getFontSize() + 'px ' + this.getFontFamily()
+ : this.getFontStyle() +
+ ' ' +
+ this.getFontVariant() +
+ ' ' +
+ this.getFontSize() +
+ 'px ' +
+ this.getFontFamily();
+ },
+ _addTextLine: function (t) {
+ this.align() === C && (t = t.trim());
+ var e = this._getTextWidth(t);
+ return this.textArr.push({ text: t, width: e });
+ },
+ _getTextWidth: function (t) {
+ var e = this.getLetterSpacing(),
+ i = t.length;
+ return k().measureText(t).width + (i ? e * (i - 1) : 0);
+ },
+ _setTextData: function () {
+ var t = this.getText().split('\n'),
+ e = +this.getFontSize(),
+ i = 0,
+ n = this.getLineHeight() * e,
+ a = this.attrs.width,
+ r = this.attrs.height,
+ o = a !== M,
+ s = r !== M,
+ h = this.getPadding(),
+ l = a - 2 * h,
+ c = r - 2 * h,
+ d = 0,
+ u = this.getWrap(),
+ g = 'none' !== u,
+ f = 'char' !== u && g,
+ v = this.getEllipsis() && !g;
+ (this.textArr = []), (k().font = this._getContextFont());
+ for (var p = 0, m = t.length; p < m; ++p) {
+ var _ = t[p],
+ y = v ? this._getTextWidth('…') : 0,
+ K = this._getTextWidth(_);
+ if (o && l < K)
+ for (; 0 < _.length; ) {
+ for (var S = 0, b = _.length, x = '', C = 0; S < b; ) {
+ var w = (S + b) >>> 1,
+ F = _.slice(0, w + 1),
+ T = this._getTextWidth(F) + y;
+ T <= l ? ((S = w + 1), (x = F + (v ? '…' : '')), (C = T)) : (b = w);
+ }
+ if (!x) break;
+ if (f) {
+ var P,
+ A = _[x.length];
+ 0 <
+ (P =
+ (' ' === A || '-' === A) && C <= l
+ ? x.length
+ : Math.max(x.lastIndexOf(' '), x.lastIndexOf('-')) + 1) &&
+ ((S = P), (x = x.slice(0, S)), (C = this._getTextWidth(x)));
+ }
+ if (((x = x.trimRight()), this._addTextLine(x), (i = Math.max(i, C)), (d += n), !g || (s && c < d + n)))
+ break;
+ if (0 < (_ = (_ = _.slice(S)).trimLeft()).length && (K = this._getTextWidth(_)) <= l) {
+ this._addTextLine(_), (d += n), (i = Math.max(i, K));
+ break;
+ }
+ }
+ else this._addTextLine(_), (d += n), (i = Math.max(i, K));
+ if (s && c < d + n) break;
+ }
+ (this.textHeight = e), (this.textWidth = i);
+ },
+ }),
+ Konva.Util.extend(Konva.Text, Konva.Shape),
+ Konva.Factory.addSetter(Konva.Node, 'width', Konva.Validators.getNumberOrAutoValidator()),
+ Konva.Factory.addSetter(Konva.Node, 'height', Konva.Validators.getNumberOrAutoValidator()),
+ Konva.Factory.addGetterSetter(Konva.Text, 'fontFamily', 'Arial'),
+ Konva.Factory.addGetterSetter(Konva.Text, 'fontSize', 12, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Text, 'fontStyle', 'normal'),
+ Konva.Factory.addGetterSetter(Konva.Text, 'fontVariant', 'normal'),
+ Konva.Factory.addGetterSetter(Konva.Text, 'padding', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Text, 'align', 'left'),
+ Konva.Factory.addGetterSetter(Konva.Text, 'verticalAlign', 'top'),
+ Konva.Factory.addGetterSetter(Konva.Text, 'lineHeight', 1, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Text, 'wrap', 'word'),
+ Konva.Factory.addGetterSetter(Konva.Text, 'ellipsis', !1),
+ Konva.Factory.addGetterSetter(Konva.Text, 'letterSpacing', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetter(Konva.Text, 'text', ''),
+ Konva.Factory.addOverloadedGetterSetter(Konva.Text, 'text'),
+ Konva.Factory.addGetterSetter(Konva.Text, 'textDecoration', ''),
+ Konva.Collection.mapMethods(Konva.Text);
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Line = function (t) {
+ this.___init(t);
+ }),
+ (Konva.Line.prototype = {
+ ___init: function (t) {
+ Konva.Shape.call(this, t),
+ (this.className = 'Line'),
+ this.on('pointsChange.konva tensionChange.konva closedChange.konva bezierChange.konva', function () {
+ this._clearCache('tensionPoints');
+ }),
+ this.sceneFunc(this._sceneFunc);
+ },
+ _sceneFunc: function (t) {
+ var e,
+ i,
+ n,
+ a = this.getPoints(),
+ r = a.length,
+ o = this.getTension(),
+ s = this.getClosed(),
+ h = this.getBezier();
+ if (r) {
+ if ((t.beginPath(), t.moveTo(a[0], a[1]), 0 !== o && 4 < r)) {
+ for (
+ i = (e = this.getTensionPoints()).length,
+ n = s ? 0 : 4,
+ s || t.quadraticCurveTo(e[0], e[1], e[2], e[3]);
+ n < i - 2;
+
+ )
+ t.bezierCurveTo(e[n++], e[n++], e[n++], e[n++], e[n++], e[n++]);
+ s || t.quadraticCurveTo(e[i - 2], e[i - 1], a[r - 2], a[r - 1]);
+ } else if (h) for (n = 2; n < r; ) t.bezierCurveTo(a[n++], a[n++], a[n++], a[n++], a[n++], a[n++]);
+ else for (n = 2; n < r; n += 2) t.lineTo(a[n], a[n + 1]);
+ s ? (t.closePath(), t.fillStrokeShape(this)) : t.strokeShape(this);
+ }
+ },
+ getTensionPoints: function () {
+ return this._getCache('tensionPoints', this._getTensionPoints);
+ },
+ _getTensionPoints: function () {
+ return this.getClosed()
+ ? this._getTensionPointsClosed()
+ : Konva.Util._expandPoints(this.getPoints(), this.getTension());
+ },
+ _getTensionPointsClosed: function () {
+ var t = this.getPoints(),
+ e = t.length,
+ i = this.getTension(),
+ n = Konva.Util,
+ a = n._getControlPoints(t[e - 2], t[e - 1], t[0], t[1], t[2], t[3], i),
+ r = n._getControlPoints(t[e - 4], t[e - 3], t[e - 2], t[e - 1], t[0], t[1], i),
+ o = Konva.Util._expandPoints(t, i);
+ return [a[2], a[3]].concat(o).concat([r[0], r[1], t[e - 2], t[e - 1], r[2], r[3], a[0], a[1], t[0], t[1]]);
+ },
+ getWidth: function () {
+ return this.getSelfRect().width;
+ },
+ getHeight: function () {
+ return this.getSelfRect().height;
+ },
+ getSelfRect: function () {
+ for (
+ var t,
+ e,
+ i,
+ n = (t = 0 !== this.getTension() ? this._getTensionPoints() : this.getPoints())[0],
+ a = t[0],
+ r = t[1],
+ o = t[1],
+ s = 0;
+ s < t.length / 2;
+ s++
+ )
+ (e = t[2 * s]),
+ (i = t[2 * s + 1]),
+ (n = Math.min(n, e)),
+ (a = Math.max(a, e)),
+ (r = Math.min(r, i)),
+ (o = Math.max(o, i));
+ return { x: Math.round(n), y: Math.round(r), width: Math.round(a - n), height: Math.round(o - r) };
+ },
+ }),
+ Konva.Util.extend(Konva.Line, Konva.Shape),
+ Konva.Factory.addGetterSetter(Konva.Line, 'closed', !1),
+ Konva.Factory.addGetterSetter(Konva.Line, 'bezier', !1),
+ Konva.Factory.addGetterSetter(Konva.Line, 'tension', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Line, 'points', [], Konva.Validators.getNumberArrayValidator()),
+ Konva.Collection.mapMethods(Konva.Line);
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Sprite = function (t) {
+ this.___init(t);
+ }),
+ (Konva.Sprite.prototype = {
+ ___init: function (t) {
+ Konva.Shape.call(this, t), (this.className = 'Sprite'), (this._updated = !0);
+ var e = this;
+ (this.anim = new Konva.Animation(function () {
+ var t = e._updated;
+ return (e._updated = !1), t;
+ })),
+ this.on('animationChange.konva', function () {
+ this.frameIndex(0);
+ }),
+ this.on('frameIndexChange.konva', function () {
+ this._updated = !0;
+ }),
+ this.on('frameRateChange.konva', function () {
+ this.anim.isRunning() && (clearInterval(this.interval), this._setInterval());
+ }),
+ this.sceneFunc(this._sceneFunc),
+ this.hitFunc(this._hitFunc);
+ },
+ _sceneFunc: function (t) {
+ var e = this.getAnimation(),
+ i = this.frameIndex(),
+ n = 4 * i,
+ a = this.getAnimations()[e],
+ r = this.frameOffsets(),
+ o = a[n + 0],
+ s = a[n + 1],
+ h = a[n + 2],
+ l = a[n + 3],
+ c = this.getImage();
+ if (
+ ((this.hasFill() || this.hasStroke()) &&
+ (t.beginPath(), t.rect(0, 0, h, l), t.closePath(), t.fillStrokeShape(this)),
+ c)
+ )
+ if (r) {
+ var d = r[e],
+ u = 2 * i;
+ t.drawImage(c, o, s, h, l, d[u + 0], d[u + 1], h, l);
+ } else t.drawImage(c, o, s, h, l, 0, 0, h, l);
+ },
+ _hitFunc: function (t) {
+ var e = this.getAnimation(),
+ i = this.frameIndex(),
+ n = 4 * i,
+ a = this.getAnimations()[e],
+ r = this.frameOffsets(),
+ o = a[n + 2],
+ s = a[n + 3];
+ if ((t.beginPath(), r)) {
+ var h = r[e],
+ l = 2 * i;
+ t.rect(h[l + 0], h[l + 1], o, s);
+ } else t.rect(0, 0, o, s);
+ t.closePath(), t.fillShape(this);
+ },
+ _useBufferCanvas: function () {
+ return (this.hasShadow() || 1 !== this.getAbsoluteOpacity()) && this.hasStroke();
+ },
+ _setInterval: function () {
+ var t = this;
+ this.interval = setInterval(function () {
+ t._updateIndex();
+ }, 1e3 / this.getFrameRate());
+ },
+ start: function () {
+ if (!this.isRunning()) {
+ var t = this.getLayer();
+ this.anim.setLayers(t), this._setInterval(), this.anim.start();
+ }
+ },
+ stop: function () {
+ this.anim.stop(), clearInterval(this.interval);
+ },
+ isRunning: function () {
+ return this.anim.isRunning();
+ },
+ _updateIndex: function () {
+ var t = this.frameIndex(),
+ e = this.getAnimation();
+ t < this.getAnimations()[e].length / 4 - 1 ? this.frameIndex(t + 1) : this.frameIndex(0);
+ },
+ }),
+ Konva.Util.extend(Konva.Sprite, Konva.Shape),
+ Konva.Factory.addGetterSetter(Konva.Sprite, 'animation'),
+ Konva.Factory.addGetterSetter(Konva.Sprite, 'animations'),
+ Konva.Factory.addGetterSetter(Konva.Sprite, 'frameOffsets'),
+ Konva.Factory.addGetterSetter(Konva.Sprite, 'image'),
+ Konva.Factory.addGetterSetter(Konva.Sprite, 'frameIndex', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Sprite, 'frameRate', 17, Konva.Validators.getNumberValidator()),
+ Konva.Factory.backCompat(Konva.Sprite, {
+ index: 'frameIndex',
+ getIndex: 'getFrameIndex',
+ setIndex: 'setFrameIndex',
+ }),
+ Konva.Collection.mapMethods(Konva.Sprite);
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Path = function (t) {
+ this.___init(t);
+ }),
+ (Konva.Path.prototype = {
+ ___init: function (t) {
+ this.dataArray = [];
+ var e = this;
+ Konva.Shape.call(this, t),
+ (this.className = 'Path'),
+ (this.dataArray = Konva.Path.parsePathData(this.getData()));
+ for (var i = (this.pathLength = 0); i < this.dataArray.length; ++i)
+ this.pathLength += this.dataArray[i].pathLength;
+ this.on('dataChange.konva', function () {
+ e.dataArray = Konva.Path.parsePathData(this.getData());
+ for (var t = (this.pathLength = 0); t < this.dataArray.length; ++t)
+ this.pathLength += this.dataArray[t].pathLength;
+ }),
+ this.sceneFunc(this._sceneFunc);
+ },
+ _sceneFunc: function (t) {
+ var e = this.dataArray;
+ t.beginPath();
+ for (var i = 0; i < e.length; i++) {
+ var n = e[i].command,
+ a = e[i].points;
+ switch (n) {
+ case 'L':
+ t.lineTo(a[0], a[1]);
+ break;
+ case 'M':
+ t.moveTo(a[0], a[1]);
+ break;
+ case 'C':
+ t.bezierCurveTo(a[0], a[1], a[2], a[3], a[4], a[5]);
+ break;
+ case 'Q':
+ t.quadraticCurveTo(a[0], a[1], a[2], a[3]);
+ break;
+ case 'A':
+ var r = a[0],
+ o = a[1],
+ s = a[2],
+ h = a[3],
+ l = a[4],
+ c = a[5],
+ d = a[6],
+ u = a[7],
+ g = h < s ? s : h,
+ f = h < s ? 1 : s / h,
+ v = h < s ? h / s : 1;
+ t.translate(r, o),
+ t.rotate(d),
+ t.scale(f, v),
+ t.arc(0, 0, g, l, l + c, 1 - u),
+ t.scale(1 / f, 1 / v),
+ t.rotate(-d),
+ t.translate(-r, -o);
+ break;
+ case 'z':
+ t.closePath();
+ }
+ }
+ t.fillStrokeShape(this);
+ },
+ getSelfRect: function () {
+ var e = [];
+ this.dataArray.forEach(function (t) {
+ e = e.concat(t.points);
+ });
+ for (var t, i, n = e[0], a = e[0], r = e[1], o = e[1], s = 0; s < e.length / 2; s++)
+ (t = e[2 * s]),
+ (i = e[2 * s + 1]),
+ isNaN(t) || ((n = Math.min(n, t)), (a = Math.max(a, t))),
+ isNaN(i) || ((r = Math.min(r, i)), (o = Math.max(o, i)));
+ return { x: Math.round(n), y: Math.round(r), width: Math.round(a - n), height: Math.round(o - r) };
+ },
+ getLength: function () {
+ return this.pathLength;
+ },
+ getPointAtLength: function (t) {
+ var e,
+ i = 0,
+ n = this.dataArray.length;
+ if (!n) return null;
+ for (; i < n && t > this.dataArray[i].pathLength; ) (t -= this.dataArray[i].pathLength), ++i;
+ if (i === n) return { x: (e = this.dataArray[i - 1].points.slice(-2))[0], y: e[1] };
+ if (t < 0.01) return { x: (e = this.dataArray[i].points.slice(0, 2))[0], y: e[1] };
+ var a = this.dataArray[i],
+ r = a.points;
+ switch (a.command) {
+ case 'L':
+ return Konva.Path.getPointOnLine(t, a.start.x, a.start.y, r[0], r[1]);
+ case 'C':
+ return Konva.Path.getPointOnCubicBezier(
+ t / a.pathLength,
+ a.start.x,
+ a.start.y,
+ r[0],
+ r[1],
+ r[2],
+ r[3],
+ r[4],
+ r[5],
+ );
+ case 'Q':
+ return Konva.Path.getPointOnQuadraticBezier(
+ t / a.pathLength,
+ a.start.x,
+ a.start.y,
+ r[0],
+ r[1],
+ r[2],
+ r[3],
+ );
+ case 'A':
+ var o = r[0],
+ s = r[1],
+ h = r[2],
+ l = r[3],
+ c = r[4],
+ d = r[5],
+ u = r[6];
+ return (c += (d * t) / a.pathLength), Konva.Path.getPointOnEllipticalArc(o, s, h, l, c, u);
+ }
+ return null;
+ },
+ }),
+ Konva.Util.extend(Konva.Path, Konva.Shape),
+ (Konva.Path.getLineLength = function (t, e, i, n) {
+ return Math.sqrt((i - t) * (i - t) + (n - e) * (n - e));
+ }),
+ (Konva.Path.getPointOnLine = function (t, e, i, n, a, r, o) {
+ void 0 === r && (r = e), void 0 === o && (o = i);
+ var s = (a - i) / (n - e + 1e-8),
+ h = Math.sqrt((t * t) / (1 + s * s));
+ n < e && (h *= -1);
+ var l,
+ c = s * h;
+ if (n === e) l = { x: r, y: o + c };
+ else if ((o - i) / (r - e + 1e-8) === s) l = { x: r + h, y: o + c };
+ else {
+ var d,
+ u,
+ g = this.getLineLength(e, i, n, a);
+ if (g < 1e-8) return;
+ var f = (r - e) * (n - e) + (o - i) * (a - i);
+ (d = e + (f /= g * g) * (n - e)), (u = i + f * (a - i));
+ var v = this.getLineLength(r, o, d, u),
+ p = Math.sqrt(t * t - v * v);
+ (h = Math.sqrt((p * p) / (1 + s * s))), n < e && (h *= -1), (l = { x: d + h, y: u + (c = s * h) });
+ }
+ return l;
+ }),
+ (Konva.Path.getPointOnCubicBezier = function (t, e, i, n, a, r, o, s, h) {
+ function l(t) {
+ return t * t * t;
+ }
+ function c(t) {
+ return 3 * t * t * (1 - t);
+ }
+ function d(t) {
+ return 3 * t * (1 - t) * (1 - t);
+ }
+ function u(t) {
+ return (1 - t) * (1 - t) * (1 - t);
+ }
+ return { x: s * l(t) + r * c(t) + n * d(t) + e * u(t), y: h * l(t) + o * c(t) + a * d(t) + i * u(t) };
+ }),
+ (Konva.Path.getPointOnQuadraticBezier = function (t, e, i, n, a, r, o) {
+ function s(t) {
+ return t * t;
+ }
+ function h(t) {
+ return 2 * t * (1 - t);
+ }
+ function l(t) {
+ return (1 - t) * (1 - t);
+ }
+ return { x: r * s(t) + n * h(t) + e * l(t), y: o * s(t) + a * h(t) + i * l(t) };
+ }),
+ (Konva.Path.getPointOnEllipticalArc = function (t, e, i, n, a, r) {
+ var o = Math.cos(r),
+ s = Math.sin(r),
+ h = i * Math.cos(a),
+ l = n * Math.sin(a);
+ return { x: t + (h * o - l * s), y: e + (h * s + l * o) };
+ }),
+ (Konva.Path.parsePathData = function (t) {
+ if (!t) return [];
+ var e = t,
+ i = ['m', 'M', 'l', 'L', 'v', 'V', 'h', 'H', 'z', 'Z', 'c', 'C', 'q', 'Q', 't', 'T', 's', 'S', 'a', 'A'];
+ e = e.replace(new RegExp(' ', 'g'), ',');
+ for (var n = 0; n < i.length; n++) e = e.replace(new RegExp(i[n], 'g'), '|' + i[n]);
+ var a,
+ r = e.split('|'),
+ o = [],
+ s = [],
+ h = 0,
+ l = 0,
+ c = /([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi;
+ for (n = 1; n < r.length; n++) {
+ var d = r[n],
+ u = d.charAt(0);
+ for (d = d.slice(1), s.length = 0; (a = c.exec(d)); ) s.push(a[0]);
+ for (var g = [], f = 0, v = s.length; f < v; f++) {
+ var p = parseFloat(s[f]);
+ isNaN(p) ? g.push(0) : g.push(p);
+ }
+ for (; 0 < g.length && !isNaN(g[0]); ) {
+ var m,
+ _,
+ y,
+ K,
+ S,
+ b,
+ x,
+ C,
+ w,
+ F,
+ T = null,
+ P = [],
+ A = h,
+ M = l;
+ switch (u) {
+ case 'l':
+ (h += g.shift()), (l += g.shift()), (T = 'L'), P.push(h, l);
+ break;
+ case 'L':
+ (h = g.shift()), (l = g.shift()), P.push(h, l);
+ break;
+ case 'm':
+ var k = g.shift(),
+ G = g.shift();
+ if (((h += k), (l += G), (T = 'M'), 2 < o.length && 'z' === o[o.length - 1].command))
+ for (var N = o.length - 2; 0 <= N; N--)
+ if ('M' === o[N].command) {
+ (h = o[N].points[0] + k), (l = o[N].points[1] + G);
+ break;
+ }
+ P.push(h, l), (u = 'l');
+ break;
+ case 'M':
+ (h = g.shift()), (l = g.shift()), (T = 'M'), P.push(h, l), (u = 'L');
+ break;
+ case 'h':
+ (h += g.shift()), (T = 'L'), P.push(h, l);
+ break;
+ case 'H':
+ (h = g.shift()), (T = 'L'), P.push(h, l);
+ break;
+ case 'v':
+ (l += g.shift()), (T = 'L'), P.push(h, l);
+ break;
+ case 'V':
+ (l = g.shift()), (T = 'L'), P.push(h, l);
+ break;
+ case 'C':
+ P.push(g.shift(), g.shift(), g.shift(), g.shift()), (h = g.shift()), (l = g.shift()), P.push(h, l);
+ break;
+ case 'c':
+ P.push(h + g.shift(), l + g.shift(), h + g.shift(), l + g.shift()),
+ (h += g.shift()),
+ (l += g.shift()),
+ (T = 'C'),
+ P.push(h, l);
+ break;
+ case 'S':
+ (_ = h),
+ (y = l),
+ 'C' === (m = o[o.length - 1]).command && ((_ = h + (h - m.points[2])), (y = l + (l - m.points[3]))),
+ P.push(_, y, g.shift(), g.shift()),
+ (h = g.shift()),
+ (l = g.shift()),
+ (T = 'C'),
+ P.push(h, l);
+ break;
+ case 's':
+ (_ = h),
+ (y = l),
+ 'C' === (m = o[o.length - 1]).command && ((_ = h + (h - m.points[2])), (y = l + (l - m.points[3]))),
+ P.push(_, y, h + g.shift(), l + g.shift()),
+ (h += g.shift()),
+ (l += g.shift()),
+ (T = 'C'),
+ P.push(h, l);
+ break;
+ case 'Q':
+ P.push(g.shift(), g.shift()), (h = g.shift()), (l = g.shift()), P.push(h, l);
+ break;
+ case 'q':
+ P.push(h + g.shift(), l + g.shift()), (h += g.shift()), (l += g.shift()), (T = 'Q'), P.push(h, l);
+ break;
+ case 'T':
+ (_ = h),
+ (y = l),
+ 'Q' === (m = o[o.length - 1]).command && ((_ = h + (h - m.points[0])), (y = l + (l - m.points[1]))),
+ (h = g.shift()),
+ (l = g.shift()),
+ (T = 'Q'),
+ P.push(_, y, h, l);
+ break;
+ case 't':
+ (_ = h),
+ (y = l),
+ 'Q' === (m = o[o.length - 1]).command && ((_ = h + (h - m.points[0])), (y = l + (l - m.points[1]))),
+ (h += g.shift()),
+ (l += g.shift()),
+ (T = 'Q'),
+ P.push(_, y, h, l);
+ break;
+ case 'A':
+ (K = g.shift()),
+ (S = g.shift()),
+ (b = g.shift()),
+ (x = g.shift()),
+ (C = g.shift()),
+ (w = h),
+ (F = l),
+ (h = g.shift()),
+ (l = g.shift()),
+ (T = 'A'),
+ (P = this.convertEndpointToCenterParameterization(w, F, h, l, x, C, K, S, b));
+ break;
+ case 'a':
+ (K = g.shift()),
+ (S = g.shift()),
+ (b = g.shift()),
+ (x = g.shift()),
+ (C = g.shift()),
+ (w = h),
+ (F = l),
+ (h += g.shift()),
+ (l += g.shift()),
+ (T = 'A'),
+ (P = this.convertEndpointToCenterParameterization(w, F, h, l, x, C, K, S, b));
+ }
+ o.push({ command: T || u, points: P, start: { x: A, y: M }, pathLength: this.calcLength(A, M, T || u, P) });
+ }
+ ('z' !== u && 'Z' !== u) || o.push({ command: 'z', points: [], start: void 0, pathLength: 0 });
+ }
+ return o;
+ }),
+ (Konva.Path.calcLength = function (t, e, i, n) {
+ var a,
+ r,
+ o,
+ s,
+ h = Konva.Path;
+ switch (i) {
+ case 'L':
+ return h.getLineLength(t, e, n[0], n[1]);
+ case 'C':
+ for (
+ a = 0, r = h.getPointOnCubicBezier(0, t, e, n[0], n[1], n[2], n[3], n[4], n[5]), s = 0.01;
+ s <= 1;
+ s += 0.01
+ )
+ (o = h.getPointOnCubicBezier(s, t, e, n[0], n[1], n[2], n[3], n[4], n[5])),
+ (a += h.getLineLength(r.x, r.y, o.x, o.y)),
+ (r = o);
+ return a;
+ case 'Q':
+ for (a = 0, r = h.getPointOnQuadraticBezier(0, t, e, n[0], n[1], n[2], n[3]), s = 0.01; s <= 1; s += 0.01)
+ (o = h.getPointOnQuadraticBezier(s, t, e, n[0], n[1], n[2], n[3])),
+ (a += h.getLineLength(r.x, r.y, o.x, o.y)),
+ (r = o);
+ return a;
+ case 'A':
+ a = 0;
+ var l = n[4],
+ c = n[5],
+ d = n[4] + c,
+ u = Math.PI / 180;
+ if (
+ (Math.abs(l - d) < u && (u = Math.abs(l - d)),
+ (r = h.getPointOnEllipticalArc(n[0], n[1], n[2], n[3], l, 0)),
+ c < 0)
+ )
+ for (s = l - u; d < s; s -= u)
+ (o = h.getPointOnEllipticalArc(n[0], n[1], n[2], n[3], s, 0)),
+ (a += h.getLineLength(r.x, r.y, o.x, o.y)),
+ (r = o);
+ else
+ for (s = l + u; s < d; s += u)
+ (o = h.getPointOnEllipticalArc(n[0], n[1], n[2], n[3], s, 0)),
+ (a += h.getLineLength(r.x, r.y, o.x, o.y)),
+ (r = o);
+ return (
+ (o = h.getPointOnEllipticalArc(n[0], n[1], n[2], n[3], d, 0)), (a += h.getLineLength(r.x, r.y, o.x, o.y))
+ );
+ }
+ return 0;
+ }),
+ (Konva.Path.convertEndpointToCenterParameterization = function (t, e, i, n, a, r, o, s, h) {
+ var l = h * (Math.PI / 180),
+ c = (Math.cos(l) * (t - i)) / 2 + (Math.sin(l) * (e - n)) / 2,
+ d = (-1 * Math.sin(l) * (t - i)) / 2 + (Math.cos(l) * (e - n)) / 2,
+ u = (c * c) / (o * o) + (d * d) / (s * s);
+ 1 < u && ((o *= Math.sqrt(u)), (s *= Math.sqrt(u)));
+ var g = Math.sqrt((o * o * (s * s) - o * o * (d * d) - s * s * (c * c)) / (o * o * (d * d) + s * s * (c * c)));
+ a === r && (g *= -1), isNaN(g) && (g = 0);
+ var f = (g * o * d) / s,
+ v = (g * -s * c) / o,
+ p = (t + i) / 2 + Math.cos(l) * f - Math.sin(l) * v,
+ m = (e + n) / 2 + Math.sin(l) * f + Math.cos(l) * v,
+ _ = function (t) {
+ return Math.sqrt(t[0] * t[0] + t[1] * t[1]);
+ },
+ y = function (t, e) {
+ return (t[0] * e[0] + t[1] * e[1]) / (_(t) * _(e));
+ },
+ K = function (t, e) {
+ return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(y(t, e));
+ },
+ S = K([1, 0], [(c - f) / o, (d - v) / s]),
+ b = [(c - f) / o, (d - v) / s],
+ x = [(-1 * c - f) / o, (-1 * d - v) / s],
+ C = K(b, x);
+ return (
+ y(b, x) <= -1 && (C = Math.PI),
+ 1 <= y(b, x) && (C = 0),
+ 0 === r && 0 < C && (C -= 2 * Math.PI),
+ 1 === r && C < 0 && (C += 2 * Math.PI),
+ [p, m, o, s, S, C, l, r]
+ );
+ }),
+ Konva.Factory.addGetterSetter(Konva.Path, 'data'),
+ Konva.Collection.mapMethods(Konva.Path);
+ })(),
+ (function () {
+ 'use strict';
+ function i(t) {
+ t.fillText(this.partialText, 0, 0);
+ }
+ function n(t) {
+ t.strokeText(this.partialText, 0, 0);
+ }
+ (Konva.TextPath = function (t) {
+ this.___init(t);
+ }),
+ (Konva.TextPath.prototype = {
+ ___init: function (t) {
+ var e = this;
+ (this.dummyCanvas = Konva.Util.createCanvasElement()),
+ (this.dataArray = []),
+ (this.getKerning = t && t.getKerning),
+ Konva.Shape.call(this, t),
+ (this._fillFunc = i),
+ (this._strokeFunc = n),
+ (this._fillFuncHit = i),
+ (this._strokeFuncHit = n),
+ (this.className = 'TextPath'),
+ (this.dataArray = Konva.Path.parsePathData(this.attrs.data)),
+ this.on('dataChange.konva', function () {
+ (e.dataArray = Konva.Path.parsePathData(this.attrs.data)), e._setTextData();
+ }),
+ this.on('textChange.konva alignChange.konva letterSpacingChange.konva', e._setTextData),
+ e._setTextData(),
+ this.sceneFunc(this._sceneFunc),
+ this.hitFunc(this._hitFunc);
+ },
+ _sceneFunc: function (t) {
+ t.setAttr('font', this._getContextFont()),
+ t.setAttr('textBaseline', this.getTextBaseline()),
+ t.setAttr('textAlign', 'left'),
+ t.save();
+ var e = this.textDecoration(),
+ i = this.fill(),
+ n = this.fontSize(),
+ a = this.glyphInfo;
+ 'underline' === e && t.beginPath();
+ for (var r = 0; r < a.length; r++) {
+ t.save();
+ var o = a[r].p0;
+ t.translate(o.x, o.y),
+ t.rotate(a[r].rotation),
+ (this.partialText = a[r].text),
+ t.fillStrokeShape(this),
+ 'underline' === e && (0 === r && t.moveTo(0, n / 2 + 1), t.lineTo(n, n / 2 + 1)),
+ t.restore();
+ }
+ 'underline' === e && ((t.strokeStyle = i), (t.lineWidth = n / 20), t.stroke()), t.restore();
+ },
+ _hitFunc: function (t) {
+ t.beginPath();
+ var e = this.glyphInfo;
+ if (1 <= e.length) {
+ var i = e[0].p0;
+ t.moveTo(i.x, i.y);
+ }
+ for (var n = 0; n < e.length; n++) {
+ var a = e[n].p1;
+ t.lineTo(a.x, a.y);
+ }
+ t.setAttr('lineWidth', this.getFontSize()), t.setAttr('strokeStyle', this.colorKey), t.stroke();
+ },
+ getTextWidth: function () {
+ return this.textWidth;
+ },
+ getTextHeight: function () {
+ return this.textHeight;
+ },
+ setText: function (t) {
+ Konva.Text.prototype.setText.call(this, t);
+ },
+ _getTextSize: function (t) {
+ var e = this.dummyCanvas.getContext('2d');
+ e.save(), (e.font = this._getContextFont());
+ var i = e.measureText(t);
+ return e.restore(), { width: i.width, height: parseInt(this.attrs.fontSize, 10) };
+ },
+ _setTextData: function () {
+ var l = this,
+ t = this._getTextSize(this.attrs.text),
+ c = this.getLetterSpacing(),
+ d = this.align();
+ (this.textWidth = t.width), (this.textHeight = t.height);
+ var u = Math.max(this.textWidth + ((this.attrs.text || '').length - 1) * c, 0);
+ this.glyphInfo = [];
+ for (var g = 0, e = 0; e < l.dataArray.length; e++)
+ 0 < l.dataArray[e].pathLength && (g += l.dataArray[e].pathLength);
+ var i = 0;
+ 'center' === d && (i = Math.max(0, g / 2 - u / 2)), 'right' === d && (i = Math.max(0, g - u));
+ for (
+ var f,
+ v,
+ p,
+ n = this.getText().split(''),
+ m = this.getText().split(' ').length - 1,
+ a = -1,
+ _ = 0,
+ y = function () {
+ _ = 0;
+ for (var t = l.dataArray, e = a + 1; e < t.length; e++) {
+ if (0 < t[e].pathLength) return t[(a = e)];
+ 'M' === t[e].command && (f = { x: t[e].points[0], y: t[e].points[1] });
+ }
+ return {};
+ },
+ r = function (t) {
+ var e = l._getTextSize(t).width + c;
+ ' ' === t && 'justify' === d && (e += (g - u) / m);
+ var i = 0,
+ n = 0;
+ for (v = void 0; 0.01 < Math.abs(e - i) / e && n < 25; ) {
+ n++;
+ for (var a = i; void 0 === p; )
+ (p = y()) && a + p.pathLength < e && ((a += p.pathLength), (p = void 0));
+ if (p === {} || void 0 === f) return;
+ var r = !1;
+ switch (p.command) {
+ case 'L':
+ Konva.Path.getLineLength(f.x, f.y, p.points[0], p.points[1]) > e
+ ? (v = Konva.Path.getPointOnLine(e, f.x, f.y, p.points[0], p.points[1], f.x, f.y))
+ : (p = void 0);
+ break;
+ case 'A':
+ var o = p.points[4],
+ s = p.points[5],
+ h = p.points[4] + s;
+ 0 === _
+ ? (_ = o + 1e-8)
+ : i < e
+ ? (_ += ((Math.PI / 180) * s) / Math.abs(s))
+ : (_ -= ((Math.PI / 360) * s) / Math.abs(s)),
+ ((s < 0 && _ < h) || (0 <= s && h < _)) && ((_ = h), (r = !0)),
+ (v = Konva.Path.getPointOnEllipticalArc(
+ p.points[0],
+ p.points[1],
+ p.points[2],
+ p.points[3],
+ _,
+ p.points[6],
+ ));
+ break;
+ case 'C':
+ 0 === _
+ ? (_ = e > p.pathLength ? 1e-8 : e / p.pathLength)
+ : i < e
+ ? (_ += (e - i) / p.pathLength)
+ : (_ -= (i - e) / p.pathLength),
+ 1 < _ && ((_ = 1), (r = !0)),
+ (v = Konva.Path.getPointOnCubicBezier(
+ _,
+ p.start.x,
+ p.start.y,
+ p.points[0],
+ p.points[1],
+ p.points[2],
+ p.points[3],
+ p.points[4],
+ p.points[5],
+ ));
+ break;
+ case 'Q':
+ 0 === _
+ ? (_ = e / p.pathLength)
+ : i < e
+ ? (_ += (e - i) / p.pathLength)
+ : (_ -= (i - e) / p.pathLength),
+ 1 < _ && ((_ = 1), (r = !0)),
+ (v = Konva.Path.getPointOnQuadraticBezier(
+ _,
+ p.start.x,
+ p.start.y,
+ p.points[0],
+ p.points[1],
+ p.points[2],
+ p.points[3],
+ ));
+ }
+ void 0 !== v && (i = Konva.Path.getLineLength(f.x, f.y, v.x, v.y)), r && ((r = !1), (p = void 0));
+ }
+ },
+ o = l._getTextSize('C').width + c,
+ s = 0;
+ s < i / o && (r('C'), void 0 !== f && void 0 !== v);
+ s++
+ )
+ f = v;
+ for (var h = 0; h < n.length && (r(n[h]), void 0 !== f && void 0 !== v); h++) {
+ var K = Konva.Path.getLineLength(f.x, f.y, v.x, v.y),
+ S = 0;
+ if (this.getKerning)
+ try {
+ S = this.getKerning(n[h - 1], n[h]) * this.fontSize();
+ } catch (t) {
+ S = 0;
+ }
+ (f.x += S), (v.x += S), (this.textWidth += S);
+ var b = Konva.Path.getPointOnLine(S + K / 2, f.x, f.y, v.x, v.y),
+ x = Math.atan2(v.y - f.y, v.x - f.x);
+ this.glyphInfo.push({ transposeX: b.x, transposeY: b.y, text: n[h], rotation: x, p0: f, p1: v }), (f = v);
+ }
+ },
+ getSelfRect: function () {
+ var e = [];
+ this.glyphInfo.forEach(function (t) {
+ e.push(t.p0.x), e.push(t.p0.y), e.push(t.p1.x), e.push(t.p1.y);
+ });
+ for (var t, i, n = e[0], a = e[0], r = e[0], o = e[0], s = 0; s < e.length / 2; s++)
+ (t = e[2 * s]),
+ (i = e[2 * s + 1]),
+ (n = Math.min(n, t)),
+ (a = Math.max(a, t)),
+ (r = Math.min(r, i)),
+ (o = Math.max(o, i));
+ var h = this.fontSize();
+ return {
+ x: Math.round(n) - h / 2,
+ y: Math.round(r) - h / 2,
+ width: Math.round(a - n) + h,
+ height: Math.round(o - r) + h,
+ };
+ },
+ }),
+ (Konva.TextPath.prototype._getContextFont = Konva.Text.prototype._getContextFont),
+ Konva.Util.extend(Konva.TextPath, Konva.Shape),
+ Konva.Factory.addGetterSetter(Konva.TextPath, 'data'),
+ Konva.Factory.addGetterSetter(Konva.TextPath, 'fontFamily', 'Arial'),
+ Konva.Factory.addGetterSetter(Konva.TextPath, 'fontSize', 12, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.TextPath, 'fontStyle', 'normal'),
+ Konva.Factory.addGetterSetter(Konva.TextPath, 'align', 'left'),
+ Konva.Factory.addGetterSetter(Konva.TextPath, 'letterSpacing', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.TextPath, 'textBaseline', 'middle'),
+ Konva.Factory.addGetterSetter(Konva.TextPath, 'fontVariant', 'normal'),
+ Konva.Factory.addGetter(Konva.TextPath, 'text', ''),
+ Konva.Factory.addGetterSetter(Konva.TextPath, 'textDecoration', null),
+ Konva.Collection.mapMethods(Konva.TextPath);
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.RegularPolygon = function (t) {
+ this.___init(t);
+ }),
+ (Konva.RegularPolygon.prototype = {
+ _centroid: !0,
+ ___init: function (t) {
+ Konva.Shape.call(this, t), (this.className = 'RegularPolygon'), this.sceneFunc(this._sceneFunc);
+ },
+ _sceneFunc: function (t) {
+ var e,
+ i,
+ n,
+ a = this.attrs.sides,
+ r = this.attrs.radius;
+ for (t.beginPath(), t.moveTo(0, 0 - r), e = 1; e < a; e++)
+ (i = r * Math.sin((2 * e * Math.PI) / a)), (n = -1 * r * Math.cos((2 * e * Math.PI) / a)), t.lineTo(i, n);
+ t.closePath(), t.fillStrokeShape(this);
+ },
+ getWidth: function () {
+ return 2 * this.getRadius();
+ },
+ getHeight: function () {
+ return 2 * this.getRadius();
+ },
+ setWidth: function (t) {
+ Konva.Node.prototype.setWidth.call(this, t), this.radius() !== t / 2 && this.setRadius(t / 2);
+ },
+ setHeight: function (t) {
+ Konva.Node.prototype.setHeight.call(this, t), this.radius() !== t / 2 && this.setRadius(t / 2);
+ },
+ }),
+ Konva.Util.extend(Konva.RegularPolygon, Konva.Shape),
+ Konva.Factory.addGetterSetter(Konva.RegularPolygon, 'radius', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.RegularPolygon, 'sides', 0, Konva.Validators.getNumberValidator()),
+ Konva.Collection.mapMethods(Konva.RegularPolygon);
+ })(),
+ (function () {
+ 'use strict';
+ (Konva.Star = function (t) {
+ this.___init(t);
+ }),
+ (Konva.Star.prototype = {
+ _centroid: !0,
+ ___init: function (t) {
+ Konva.Shape.call(this, t), (this.className = 'Star'), this.sceneFunc(this._sceneFunc);
+ },
+ _sceneFunc: function (t) {
+ var e = this.innerRadius(),
+ i = this.outerRadius(),
+ n = this.numPoints();
+ t.beginPath(), t.moveTo(0, 0 - i);
+ for (var a = 1; a < 2 * n; a++) {
+ var r = a % 2 == 0 ? i : e,
+ o = r * Math.sin((a * Math.PI) / n),
+ s = -1 * r * Math.cos((a * Math.PI) / n);
+ t.lineTo(o, s);
+ }
+ t.closePath(), t.fillStrokeShape(this);
+ },
+ getWidth: function () {
+ return 2 * this.getOuterRadius();
+ },
+ getHeight: function () {
+ return 2 * this.getOuterRadius();
+ },
+ setWidth: function (t) {
+ Konva.Node.prototype.setWidth.call(this, t), this.outerRadius() !== t / 2 && this.setOuterRadius(t / 2);
+ },
+ setHeight: function (t) {
+ Konva.Node.prototype.setHeight.call(this, t), this.outerRadius() !== t / 2 && this.setOuterRadius(t / 2);
+ },
+ }),
+ Konva.Util.extend(Konva.Star, Konva.Shape),
+ Konva.Factory.addGetterSetter(Konva.Star, 'numPoints', 5, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Star, 'innerRadius', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Star, 'outerRadius', 0, Konva.Validators.getNumberValidator()),
+ Konva.Collection.mapMethods(Konva.Star);
+ })(),
+ (function () {
+ 'use strict';
+ var a = ['fontFamily', 'fontSize', 'fontStyle', 'padding', 'lineHeight', 'text', 'width'],
+ l = 'right',
+ c = 'down',
+ d = 'left',
+ r = a.length;
+ (Konva.Label = function (t) {
+ this.____init(t);
+ }),
+ (Konva.Label.prototype = {
+ ____init: function (t) {
+ var e = this;
+ Konva.Group.call(this, t),
+ (this.className = 'Label'),
+ this.on('add.konva', function (t) {
+ e._addListeners(t.child), e._sync();
+ });
+ },
+ getText: function () {
+ return this.find('Text')[0];
+ },
+ getTag: function () {
+ return this.find('Tag')[0];
+ },
+ _addListeners: function (t) {
+ var e,
+ i = this,
+ n = function () {
+ i._sync();
+ };
+ for (e = 0; e < r; e++) t.on(a[e] + 'Change.konva', n);
+ },
+ getWidth: function () {
+ return this.getText().getWidth();
+ },
+ getHeight: function () {
+ return this.getText().getHeight();
+ },
+ _sync: function () {
+ var t,
+ e,
+ i,
+ n,
+ a,
+ r,
+ o,
+ s = this.getText(),
+ h = this.getTag();
+ if (s && h) {
+ switch (
+ ((t = s.getWidth()),
+ (e = s.getHeight()),
+ (i = h.getPointerDirection()),
+ (n = h.getPointerWidth()),
+ (o = h.getPointerHeight()),
+ (r = a = 0),
+ i)
+ ) {
+ case 'up':
+ (a = t / 2), (r = -1 * o);
+ break;
+ case l:
+ (a = t + n), (r = e / 2);
+ break;
+ case c:
+ (a = t / 2), (r = e + o);
+ break;
+ case d:
+ (a = -1 * n), (r = e / 2);
+ }
+ h.setAttrs({ x: -1 * a, y: -1 * r, width: t, height: e }), s.setAttrs({ x: -1 * a, y: -1 * r });
+ }
+ },
+ }),
+ Konva.Util.extend(Konva.Label, Konva.Group),
+ Konva.Collection.mapMethods(Konva.Label),
+ (Konva.Tag = function (t) {
+ this.___init(t);
+ }),
+ (Konva.Tag.prototype = {
+ ___init: function (t) {
+ Konva.Shape.call(this, t), (this.className = 'Tag'), this.sceneFunc(this._sceneFunc);
+ },
+ _sceneFunc: function (t) {
+ var e = this.getWidth(),
+ i = this.getHeight(),
+ n = this.getPointerDirection(),
+ a = this.getPointerWidth(),
+ r = this.getPointerHeight(),
+ o = Math.min(this.getCornerRadius(), e / 2, i / 2);
+ t.beginPath(),
+ o ? t.moveTo(o, 0) : t.moveTo(0, 0),
+ 'up' === n && (t.lineTo((e - a) / 2, 0), t.lineTo(e / 2, -1 * r), t.lineTo((e + a) / 2, 0)),
+ o ? (t.lineTo(e - o, 0), t.arc(e - o, o, o, (3 * Math.PI) / 2, 0, !1)) : t.lineTo(e, 0),
+ n === l && (t.lineTo(e, (i - r) / 2), t.lineTo(e + a, i / 2), t.lineTo(e, (i + r) / 2)),
+ o ? (t.lineTo(e, i - o), t.arc(e - o, i - o, o, 0, Math.PI / 2, !1)) : t.lineTo(e, i),
+ n === c && (t.lineTo((e + a) / 2, i), t.lineTo(e / 2, i + r), t.lineTo((e - a) / 2, i)),
+ o ? (t.lineTo(o, i), t.arc(o, i - o, o, Math.PI / 2, Math.PI, !1)) : t.lineTo(0, i),
+ n === d && (t.lineTo(0, (i + r) / 2), t.lineTo(-1 * a, i / 2), t.lineTo(0, (i - r) / 2)),
+ o && (t.lineTo(0, o), t.arc(o, o, o, Math.PI, (3 * Math.PI) / 2, !1)),
+ t.closePath(),
+ t.fillStrokeShape(this);
+ },
+ getSelfRect: function () {
+ var t = 0,
+ e = 0,
+ i = this.getPointerWidth(),
+ n = this.getPointerHeight(),
+ a = this.pointerDirection(),
+ r = this.getWidth(),
+ o = this.getHeight();
+ return (
+ 'up' === a
+ ? ((e -= n), (o += n))
+ : a === c
+ ? (o += n)
+ : a === d
+ ? ((t -= 1.5 * i), (r += i))
+ : a === l && (r += 1.5 * i),
+ { x: t, y: e, width: r, height: o }
+ );
+ },
+ }),
+ Konva.Util.extend(Konva.Tag, Konva.Shape),
+ Konva.Factory.addGetterSetter(Konva.Tag, 'pointerDirection', 'none'),
+ Konva.Factory.addGetterSetter(Konva.Tag, 'pointerWidth', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Tag, 'pointerHeight', 0, Konva.Validators.getNumberValidator()),
+ Konva.Factory.addGetterSetter(Konva.Tag, 'cornerRadius', 0, Konva.Validators.getNumberValidator()),
+ Konva.Collection.mapMethods(Konva.Tag);
+ })(),
+ (function (u) {
+ 'use strict';
+ (u.Arrow = function (t) {
+ this.____init(t);
+ }),
+ (u.Arrow.prototype = {
+ ____init: function (t) {
+ u.Line.call(this, t), (this.className = 'Arrow');
+ },
+ _sceneFunc: function (t) {
+ u.Line.prototype._sceneFunc.apply(this, arguments);
+ var e = 2 * Math.PI,
+ i = this.points(),
+ n = i,
+ a = 0 !== this.getTension() && 4 < i.length;
+ a && (n = this.getTensionPoints());
+ var r,
+ o,
+ s = i.length;
+ a
+ ? ((r = i[s - 2] - n[s - 2]), (o = i[s - 1] - n[s - 1]))
+ : ((r = i[s - 2] - i[s - 4]), (o = i[s - 1] - i[s - 3]));
+ var h = (Math.atan2(o, r) + e) % e,
+ l = this.pointerLength(),
+ c = this.pointerWidth();
+ t.save(),
+ t.beginPath(),
+ t.translate(i[s - 2], i[s - 1]),
+ t.rotate(h),
+ t.moveTo(0, 0),
+ t.lineTo(-l, c / 2),
+ t.lineTo(-l, -c / 2),
+ t.closePath(),
+ t.restore(),
+ this.pointerAtBeginning() &&
+ (t.save(),
+ t.translate(i[0], i[1]),
+ a ? ((r = n[0] - i[0]), (o = n[1] - i[1])) : ((r = i[2] - i[0]), (o = i[3] - i[1])),
+ t.rotate((Math.atan2(-o, -r) + e) % e),
+ t.moveTo(0, 0),
+ t.lineTo(-l, c / 2),
+ t.lineTo(-l, -c / 2),
+ t.closePath(),
+ t.restore());
+ var d = this.dashEnabled();
+ d && ((this.attrs.dashEnabled = !1), t.setLineDash([])),
+ t.fillStrokeShape(this),
+ d && (this.attrs.dashEnabled = !0);
+ },
+ }),
+ u.Util.extend(u.Arrow, u.Line),
+ u.Factory.addGetterSetter(u.Arrow, 'pointerLength', 10, u.Validators.getNumberValidator()),
+ u.Factory.addGetterSetter(u.Arrow, 'pointerWidth', 10, u.Validators.getNumberValidator()),
+ u.Factory.addGetterSetter(u.Arrow, 'pointerAtBeginning', !1),
+ u.Collection.mapMethods(u.Arrow);
+ })(Konva),
+ (function (G) {
+ 'use strict';
+ var e = [
+ 'resizeEnabledChange',
+ 'rotateAnchorOffsetChange',
+ 'rotateEnabledChange',
+ 'enabledAnchorsChange',
+ 'anchorSizeChange',
+ 'borderEnabledChange',
+ 'borderStrokeChange',
+ 'borderStrokeWidthChange',
+ 'anchorStrokeChange',
+ 'anchorStrokeWidthChange',
+ 'anchorFillChange',
+ ].join(' '),
+ t = 'nodeRect',
+ i = [
+ 'xChange.resizer',
+ 'yChange.resizer',
+ 'widthChange.resizer',
+ 'heightChange.resizer',
+ 'scaleXChange.resizer',
+ 'scaleYChange.resizer',
+ 'skewXChange.resizer',
+ 'skewYChange.resizer',
+ 'rotationChange.resizer',
+ 'offsetXChange.resizer',
+ 'offsetYChange.resizer',
+ 'transformsEnabledChange.resizer',
+ ].join(' '),
+ n = [
+ 'widthChange.resizer',
+ 'heightChange.resizer',
+ 'scaleXChange.resizer',
+ 'scaleYChange.resizer',
+ 'skewXChange.resizer',
+ 'skewYChange.resizer',
+ 'rotationChange.resizer',
+ 'offsetXChange.resizer',
+ 'offsetYChange.resizer',
+ ].join(' '),
+ s = {
+ 'top-left': -45,
+ 'top-center': 0,
+ 'top-right': 45,
+ 'middle-right': -90,
+ 'middle-left': 90,
+ 'bottom-left': -135,
+ 'bottom-center': 180,
+ 'bottom-right': 135,
+ };
+ G.Transformer = function (t) {
+ this.____init(t);
+ };
+ var a = [
+ 'top-left',
+ 'top-center',
+ 'top-right',
+ 'middle-right',
+ 'middle-left',
+ 'bottom-left',
+ 'bottom-center',
+ 'bottom-right',
+ ];
+ (G.Transformer.prototype = {
+ _centroid: !1,
+ ____init: function (t) {
+ G.Group.call(this, t),
+ (this.className = 'Transformer'),
+ this._createElements(),
+ (this._handleMouseMove = this._handleMouseMove.bind(this)),
+ (this._handleMouseUp = this._handleMouseUp.bind(this)),
+ (this.update = this.update.bind(this)),
+ this.on(e, this.update),
+ this.getNode() && this.update();
+ },
+ attachTo: function (t) {
+ this.setNode(t);
+ },
+ setNode: function (t) {
+ return (
+ this._node && this.detach(),
+ (this._node = t),
+ this._resetTransformCache(),
+ t.on(i, this._resetTransformCache.bind(this)),
+ t.on(
+ n,
+ function () {
+ this._transforming || this.update();
+ }.bind(this),
+ ),
+ !!this.findOne('.top-left') && this.update(),
+ this
+ );
+ },
+ getNode: function () {
+ return this._node;
+ },
+ detach: function () {
+ this.getNode() && (this.getNode().off('.resizer'), (this._node = void 0)), this._resetTransformCache();
+ },
+ _resetTransformCache: function () {
+ this._clearCache(t), this._clearCache('transform'), this._clearSelfAndDescendantCache('absoluteTransform');
+ },
+ _getNodeRect: function () {
+ return this._getCache(t, this.__getNodeRect);
+ },
+ __getNodeRect: function () {
+ var t = this.getNode();
+ if (!t) return { x: -Number.MAX_SAFE_INTEGER, y: -Number.MAX_SAFE_INTEGER, width: 0, height: 0, rotation: 0 };
+ var e = t.getClientRect({ skipTransform: !0 }),
+ i = G.getAngle(t.rotation()),
+ n = e.x * t.scaleX() - t.offsetX() * t.scaleX(),
+ a = e.y * t.scaleY() - t.offsetY() * t.scaleY();
+ return {
+ x: t.x() + n * Math.cos(i) + a * Math.sin(-i),
+ y: t.y() + a * Math.cos(i) + n * Math.sin(i),
+ width: e.width * t.scaleX(),
+ height: e.height * t.scaleY(),
+ rotation: t.rotation(),
+ };
+ },
+ getX: function () {
+ return this._getNodeRect().x;
+ },
+ getY: function () {
+ return this._getNodeRect().y;
+ },
+ getRotation: function () {
+ return this._getNodeRect().rotation;
+ },
+ getWidth: function () {
+ return this._getNodeRect().width;
+ },
+ getHeight: function () {
+ return this._getNodeRect().height;
+ },
+ _createElements: function () {
+ this._createBack(),
+ a.forEach(
+ function (t) {
+ this._createAnchor(t);
+ }.bind(this),
+ ),
+ this._createAnchor('rotater');
+ },
+ _createAnchor: function (r) {
+ var o = new G.Rect({
+ stroke: 'rgb(0, 161, 255)',
+ fill: 'white',
+ strokeWidth: 1,
+ name: r + ' _anchor',
+ dragDistance: 0,
+ draggable: !0,
+ }),
+ e = this;
+ o.on('mousedown touchstart', function (t) {
+ e._handleMouseDown(t);
+ }),
+ o.on('dragstart', function (t) {
+ t.cancelBubble = !0;
+ }),
+ o.on('dragmove', function (t) {
+ t.cancelBubble = !0;
+ }),
+ o.on('dragend', function (t) {
+ t.cancelBubble = !0;
+ }),
+ o.on('mouseenter', function () {
+ var t = this.getParent(),
+ e = G.getAngle(t.rotation()),
+ i = t.getNode().getAbsoluteScale(),
+ n = i.y * i.x < 0,
+ a = (function (t, e, i) {
+ if ('rotater' === t) return 'crosshair';
+ (e += G.Util._degToRad(s[t] || 0)), i && (e *= -1);
+ var n = ((G.Util._radToDeg(e) % 360) + 360) % 360;
+ return G.Util._inRange(n, 337.5, 360) || G.Util._inRange(n, 0, 22.5)
+ ? 'ns-resize'
+ : G.Util._inRange(n, 22.5, 67.5)
+ ? 'nesw-resize'
+ : G.Util._inRange(n, 67.5, 112.5)
+ ? 'ew-resize'
+ : G.Util._inRange(n, 112.5, 157.5)
+ ? 'nwse-resize'
+ : G.Util._inRange(n, 157.5, 202.5)
+ ? 'ns-resize'
+ : G.Util._inRange(n, 202.5, 247.5)
+ ? 'nesw-resize'
+ : G.Util._inRange(n, 247.5, 292.5)
+ ? 'ew-resize'
+ : G.Util._inRange(n, 292.5, 337.5)
+ ? 'nwse-resize'
+ : (G.Util.error('Transformer has unknown angle for cursor detection: ' + n), 'pointer');
+ })(r, e, n);
+ (o.getStage().content.style.cursor = a), (t._cursorChange = !0);
+ }),
+ o.on('mouseout', function () {
+ o.getStage() &&
+ this.getParent() &&
+ ((o.getStage().content.style.cursor = ''), (this.getParent()._cursorChange = !1));
+ }),
+ this.add(o);
+ },
+ _createBack: function () {
+ var t = new G.Shape({
+ name: 'back',
+ width: 0,
+ height: 0,
+ listening: !1,
+ sceneFunc: function (t) {
+ var e = this.getParent(),
+ i = e.getPadding();
+ t.beginPath(),
+ t.rect(-i, -i, this.width() + 2 * i, this.height() + 2 * i),
+ t.moveTo(this.width() / 2, -i),
+ e.rotateEnabled() && t.lineTo(this.width() / 2, -e.rotateAnchorOffset() * G.Util._sign(this.height())),
+ t.fillStrokeShape(this);
+ },
+ });
+ this.add(t);
+ },
+ _handleMouseDown: function (t) {
+ this.movingResizer = t.target.name().split(' ')[0];
+ var e = this._getNodeRect(),
+ i = e.width,
+ n = e.height,
+ a = Math.sqrt(Math.pow(i, 2) + Math.pow(n, 2));
+ (this.sin = n / a),
+ (this.cos = i / a),
+ window.addEventListener('mousemove', this._handleMouseMove),
+ window.addEventListener('touchmove', this._handleMouseMove),
+ window.addEventListener('mouseup', this._handleMouseUp, !0),
+ window.addEventListener('touchend', this._handleMouseUp, !0),
+ (this._transforming = !0),
+ this._fire('transformstart', { evt: t }),
+ this.getNode()._fire('transformstart', { evt: t });
+ },
+ _handleMouseMove: function (t) {
+ var e,
+ i,
+ n,
+ a = this.findOne('.' + this.movingResizer),
+ r = a.getStage().getContent().getBoundingClientRect(),
+ o = r.left,
+ s = r.top,
+ h = {
+ x: (void 0 !== t.clientX ? t.clientX : t.touches[0].clientX) - o,
+ y: (void 0 !== t.clientX ? t.clientY : t.touches[0].clientY) - s,
+ };
+ a.setAbsolutePosition(h);
+ var l = this.keepRatio() || t.shiftKey;
+ if ('top-left' === this.movingResizer)
+ l &&
+ ((e =
+ (n = Math.sqrt(
+ Math.pow(this.findOne('.bottom-right').x() - a.x(), 2) +
+ Math.pow(this.findOne('.bottom-right').y() - a.y(), 2),
+ )) * this.cos),
+ (i = n * this.sin),
+ this.findOne('.top-left').x(this.findOne('.bottom-right').x() - e),
+ this.findOne('.top-left').y(this.findOne('.bottom-right').y() - i));
+ else if ('top-center' === this.movingResizer) this.findOne('.top-left').y(a.y());
+ else if ('top-right' === this.movingResizer) {
+ l &&
+ ((e =
+ (n = Math.sqrt(
+ Math.pow(this.findOne('.bottom-left').x() - a.x(), 2) +
+ Math.pow(this.findOne('.bottom-left').y() - a.y(), 2),
+ )) * this.cos),
+ (i = n * this.sin),
+ this.findOne('.top-right').x(e),
+ this.findOne('.top-right').y(this.findOne('.bottom-left').y() - i));
+ var c = a.position();
+ this.findOne('.top-left').y(c.y), this.findOne('.bottom-right').x(c.x);
+ } else if ('middle-left' === this.movingResizer) this.findOne('.top-left').x(a.x());
+ else if ('middle-right' === this.movingResizer) this.findOne('.bottom-right').x(a.x());
+ else if ('bottom-left' === this.movingResizer)
+ l &&
+ ((e =
+ (n = Math.sqrt(
+ Math.pow(this.findOne('.top-right').x() - a.x(), 2) +
+ Math.pow(this.findOne('.top-right').y() - a.y(), 2),
+ )) * this.cos),
+ (i = n * this.sin),
+ this.findOne('.bottom-left').x(this.findOne('.top-right').x() - e),
+ this.findOne('.bottom-left').y(i)),
+ (c = a.position()),
+ this.findOne('.top-left').x(c.x),
+ this.findOne('.bottom-right').y(c.y);
+ else if ('bottom-center' === this.movingResizer) this.findOne('.bottom-right').y(a.y());
+ else if ('bottom-right' === this.movingResizer)
+ l &&
+ ((e =
+ (n = Math.sqrt(
+ Math.pow(this.findOne('.bottom-right').x(), 2) + Math.pow(this.findOne('.bottom-right').y(), 2),
+ )) * this.cos),
+ (i = n * this.sin),
+ this.findOne('.bottom-right').x(e),
+ this.findOne('.bottom-right').y(i));
+ else if ('rotater' === this.movingResizer) {
+ var d = this.getPadding(),
+ u = this._getNodeRect();
+ (e = a.x() - u.width / 2), (i = -a.y() + u.height / 2);
+ var g = Math.atan2(-i, e) + Math.PI / 2;
+ u.height < 0 && (g -= Math.PI);
+ for (
+ var f = G.getAngle(this.rotation()),
+ v = G.Util._radToDeg(f) + G.Util._radToDeg(g),
+ p = G.getAngle(this.getNode().rotation()),
+ m = G.Util._degToRad(v),
+ _ = this.rotationSnaps(),
+ y = 0;
+ y < _.length;
+ y++
+ ) {
+ var K = G.getAngle(_[y]);
+ Math.abs(K - G.Util._degToRad(v)) % (2 * Math.PI) < 0.1 &&
+ ((v = G.Util._radToDeg(K)), (m = G.Util._degToRad(v)));
+ }
+ var S = d,
+ b = d;
+ this._fitNodeInto(
+ {
+ rotation: G.angleDeg ? v : G.Util._degToRad(v),
+ x:
+ u.x +
+ (u.width / 2 + d) * (Math.cos(p) - Math.cos(m)) +
+ (u.height / 2 + d) * (Math.sin(-p) - Math.sin(-m)) -
+ (S * Math.cos(f) + b * Math.sin(-f)),
+ y:
+ u.y +
+ (u.height / 2 + d) * (Math.cos(p) - Math.cos(m)) +
+ (u.width / 2 + d) * (Math.sin(p) - Math.sin(m)) -
+ (b * Math.cos(f) + S * Math.sin(f)),
+ width: u.width + 2 * d,
+ height: u.height + 2 * d,
+ },
+ t,
+ );
+ } else console.error(new Error('Wrong position argument of selection resizer: ', this.movingResizer));
+ if ('rotater' !== this.movingResizer) {
+ var x = this.findOne('.top-left').getAbsolutePosition(this.getParent());
+ if (this.getCenteredScaling() || t.altKey) {
+ var C = this.findOne('.top-left'),
+ w = this.findOne('.bottom-right'),
+ F = C.x(),
+ T = C.y(),
+ P = this.getWidth() - w.x(),
+ A = this.getHeight() - w.y();
+ console.log(F, T, P, A),
+ w.move({ x: -F, y: -T }),
+ C.move({ x: P, y: A }),
+ (x = C.getAbsolutePosition(this.getParent()));
+ }
+ (e = x.x), (i = x.y);
+ var M = this.findOne('.bottom-right').x() - this.findOne('.top-left').x(),
+ k = this.findOne('.bottom-right').y() - this.findOne('.top-left').y();
+ this._fitNodeInto({ x: e + this.offsetX(), y: i + this.offsetY(), width: M, height: k }, t);
+ }
+ },
+ _handleMouseUp: function (t) {
+ this._removeEvents(t);
+ },
+ _removeEvents: function (t) {
+ if (this._transforming) {
+ (this._transforming = !1),
+ window.removeEventListener('mousemove', this._handleMouseMove),
+ window.removeEventListener('touchmove', this._handleMouseMove),
+ window.removeEventListener('mouseup', this._handleMouseUp, !0),
+ window.removeEventListener('touchend', this._handleMouseUp, !0),
+ this._fire('transformend', { evt: t });
+ var e = this.getNode();
+ e && e.fire('transformend', { evt: t });
+ }
+ },
+ _fitNodeInto: function (t, e) {
+ var i = this.getBoundBoxFunc();
+ if (i) {
+ var n = this._getNodeRect();
+ t = i.call(this, n, t);
+ }
+ this._settings = !0;
+ var a = this.getNode();
+ void 0 !== t.rotation && this.getNode().rotation(t.rotation);
+ var r = a.getClientRect({ skipTransform: !0 }),
+ o = this.getPadding(),
+ s = (t.width - 2 * o) / r.width,
+ h = (t.height - 2 * o) / r.height,
+ l = G.getAngle(a.getRotation()),
+ c = r.x * s - o - a.offsetX() * s,
+ d = r.y * h - o - a.offsetY() * h;
+ this.getNode().setAttrs({
+ scaleX: s,
+ scaleY: h,
+ x: t.x - (c * Math.cos(l) + d * Math.sin(-l)),
+ y: t.y - (d * Math.cos(l) + c * Math.sin(l)),
+ }),
+ (this._settings = !1),
+ this._fire('transform', { evt: e }),
+ this.getNode()._fire('transform', { evt: e }),
+ this.update(),
+ this.getLayer().batchDraw();
+ },
+ forceUpdate: function () {
+ this._resetTransformCache(), this.update();
+ },
+ update: function () {
+ var t = this._getNodeRect(),
+ e = this.getNode(),
+ i = { x: 1, y: 1 };
+ e && e.getParent() && (i = e.getParent().getAbsoluteScale());
+ var n = { x: 1 / i.x, y: 1 / i.y },
+ a = t.width,
+ r = t.height,
+ o = this.enabledAnchors(),
+ s = this.resizeEnabled(),
+ h = this.getPadding(),
+ l = this.getAnchorSize();
+ this.find('._anchor').setAttrs({
+ width: l,
+ height: l,
+ offsetX: l / 2,
+ offsetY: l / 2,
+ stroke: this.getAnchorStroke(),
+ strokeWidth: this.getAnchorStrokeWidth(),
+ fill: this.getAnchorFill(),
+ }),
+ this.findOne('.top-left').setAttrs({ x: -h, y: -h, scale: n, visible: s && 0 <= o.indexOf('top-left') }),
+ this.findOne('.top-center').setAttrs({
+ x: a / 2,
+ y: -h,
+ scale: n,
+ visible: s && 0 <= o.indexOf('top-center'),
+ }),
+ this.findOne('.top-right').setAttrs({ x: a + h, y: -h, scale: n, visible: s && 0 <= o.indexOf('top-right') }),
+ this.findOne('.middle-left').setAttrs({
+ x: -h,
+ y: r / 2,
+ scale: n,
+ visible: s && 0 <= o.indexOf('middle-left'),
+ }),
+ this.findOne('.middle-right').setAttrs({
+ x: a + h,
+ y: r / 2,
+ scale: n,
+ visible: s && 0 <= o.indexOf('middle-right'),
+ }),
+ this.findOne('.bottom-left').setAttrs({
+ x: -h,
+ y: r + h,
+ scale: n,
+ visible: s && 0 <= o.indexOf('bottom-left'),
+ }),
+ this.findOne('.bottom-center').setAttrs({
+ x: a / 2,
+ y: r + h,
+ scale: n,
+ visible: s && 0 <= o.indexOf('bottom-center'),
+ }),
+ this.findOne('.bottom-right').setAttrs({
+ x: a + h,
+ y: r + h,
+ scale: n,
+ visible: s && 0 <= o.indexOf('bottom-right'),
+ });
+ var c = -this.rotateAnchorOffset() * Math.abs(n.y);
+ this.findOne('.rotater').setAttrs({
+ x: a / 2,
+ y: c * G.Util._sign(r),
+ scale: n,
+ visible: this.rotateEnabled(),
+ }),
+ this.findOne('.back').setAttrs({
+ width: a * i.x,
+ height: r * i.y,
+ scale: n,
+ visible: this.borderEnabled(),
+ stroke: this.getBorderStroke(),
+ strokeWidth: this.getBorderStrokeWidth(),
+ dash: this.getBorderDash(),
+ });
+ },
+ isTransforming: function () {
+ return this._transforming;
+ },
+ stopTransform: function () {
+ if (this._transforming) {
+ this._removeEvents();
+ var t = this.findOne('.' + this.movingResizer);
+ t && t.stopDrag();
+ }
+ },
+ destroy: function () {
+ this.getStage() && this._cursorChange && (this.getStage().content.style.cursor = ''),
+ G.Group.prototype.destroy.call(this),
+ this.detach(),
+ this._removeEvents();
+ },
+ toObject: function () {
+ return G.Node.prototype.toObject.call(this);
+ },
+ }),
+ G.Util.extend(G.Transformer, G.Group),
+ G.Factory.addGetterSetter(G.Transformer, 'enabledAnchors', a, function (t) {
+ return (
+ t instanceof Array || G.Util.warn('enabledAnchors value should be an array'),
+ t instanceof Array &&
+ t.forEach(function (t) {
+ -1 === a.indexOf(t) &&
+ G.Util.warn('Unknown anchor name: ' + t + '. Available names are: ' + a.join(', '));
+ }),
+ t || []
+ );
+ }),
+ G.Factory.addGetterSetter(G.Transformer, 'resizeEnabled', !0),
+ G.Factory.addGetterSetter(G.Transformer, 'anchorSize', 10, G.Validators.getNumberValidator()),
+ G.Factory.addGetterSetter(G.Transformer, 'rotateEnabled', !0),
+ G.Factory.addGetterSetter(G.Transformer, 'rotationSnaps', []),
+ G.Factory.addGetterSetter(G.Transformer, 'rotateAnchorOffset', 50, G.Validators.getNumberValidator()),
+ G.Factory.addGetterSetter(G.Transformer, 'borderEnabled', !0),
+ G.Factory.addGetterSetter(G.Transformer, 'anchorStroke', 'rgb(0, 161, 255)'),
+ G.Factory.addGetterSetter(G.Transformer, 'anchorStrokeWidth', 1, G.Validators.getNumberValidator()),
+ G.Factory.addGetterSetter(G.Transformer, 'anchorFill', 'white'),
+ G.Factory.addGetterSetter(G.Transformer, 'borderStroke', 'rgb(0, 161, 255)'),
+ G.Factory.addGetterSetter(G.Transformer, 'borderStrokeWidth', 1, G.Validators.getNumberValidator()),
+ G.Factory.addGetterSetter(G.Transformer, 'borderDash'),
+ G.Factory.addGetterSetter(G.Transformer, 'keepRatio', !0),
+ G.Factory.addGetterSetter(G.Transformer, 'centeredScaling', !1),
+ G.Factory.addGetterSetter(G.Transformer, 'padding', 0, G.Validators.getNumberValidator()),
+ G.Factory.addOverloadedGetterSetter(G.Transformer, 'node'),
+ G.Factory.addGetterSetter(G.Transformer, 'boundBoxFunc'),
+ G.Factory.backCompat(G.Transformer, {
+ lineEnabled: 'borderEnabled',
+ rotateHandlerOffset: 'rotateAnchorOffset',
+ enabledHandlers: 'enabledAnchors',
+ }),
+ G.Collection.mapMethods(G.Transformer);
+ })(Konva);
diff --git a/src/pages/Page/canvas/Spectrogram/waterfallwidget.js b/src/pages/Page/canvas/html-page/waterfallwidget.js
similarity index 99%
rename from src/pages/Page/canvas/Spectrogram/waterfallwidget.js
rename to src/pages/Page/canvas/html-page/waterfallwidget.js
index 39071a0..c2e8cdb 100644
--- a/src/pages/Page/canvas/Spectrogram/waterfallwidget.js
+++ b/src/pages/Page/canvas/html-page/waterfallwidget.js
@@ -1,5 +1,5 @@
// @ts-nocheck
-export class WsLabel {
+class WsLabel {
constructor() {
this.name = 'label';
this.id = 'id';
@@ -2639,8 +2639,8 @@ waterfallwidget.prototype.changeStart = async function (start, end, reDrawLabel
//await this.drawWfBuff();
}
if (reDrawLabel) {
- var ret = await $.post('/setting/getIsShowLabelMasker');
- this.darwLabel(ret.data);
+ // var ret = await $.post('/setting/getIsShowLabelMasker'); // 注释掉接口请求
+ this.darwLabel(true); // 使用模拟数据 true
this.drawWhiteList();
this.zoomChange();
}